[
  {
    "path": ".config/dotnet-tools.json_",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"cake.tool\": {\n      \"version\": \"2.0.0\",\n      \"commands\": [\n        \"dotnet-cake\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": ".gitattributes",
    "content": "# MonoGame - Copyright (C) The MonoGame Team\n# This file is subject to the terms and conditions defined in\n# file 'LICENSE.txt', which is part of this source code package.\n\n\n# This forces the 3-way merge on the changelog to take lines\n# from both versions instead of leaving conflicts to resolve.\nCHANGELOG.md -text merge=union\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "﻿# These are supported funding model platforms\n\ngithub: [nkast]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: [\"https://paypal.me/nkastellanos\"]\n"
  },
  {
    "path": ".github/workflows/dotnet.yml",
    "content": "# This workflow will build a .NET project\n# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net\n\nname: .NET\n\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n    branches: [ \"main\" ]\n\njobs:\n  build:\n\n    runs-on: windows-latest\n\n    steps:\n    - uses: actions/checkout@v4    \n      with:\n          submodules: recursive\n\n   # - name: Setup .NET\n   #   uses: actions/setup-dotnet@v4\n   #   with:\n   #     dotnet-version: 8.0.x\n        \n\n   # - name: Cache .NET workloads\n   #   uses: actions/cache@v4\n   #   with:\n   #     path: ~\\AppData\\Local\\Microsoft\\dotnet\\workloads\n   #     key: ${{ runner.os }}-dotnet-workloads-${{ hashFiles('**/*.csproj') }}\n   #     restore-keys: |\n   #       ${{ runner.os }}-dotnet-workloads-\n\n   # - name: Install workloads\n   #   run: dotnet workload install android ios\n\n\n    - name: Cache .NET nuget packages\n      uses: actions/cache@v4\n      with:\n        path: ~/.nuget/packages\n        key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}\n        restore-keys: |\n          ${{ runner.os }}-nuget-\n\n    - name: dotnet version\n      run: dotnet --version\n    - name: dotnet runtimes\n      run: dotnet --list-runtimes\n    - name: dotnet sdks       \n      run: dotnet --list-sdks\n      \n    - name: dotnet workloads\n      run: dotnet workload list\n\n    - name: Restore Android workload\n      run: dotnet workload restore Kni.Platform.Android.GL.sln\n    - name: Restore iOS workload\n      run: dotnet workload restore Kni.Platform.iOS.GL.sln\n    - name: Restore Blazor workload\n      run: dotnet workload restore Kni.Platform.Blazor.GL.sln\n    - name: Restore WinForms workload\n      run: dotnet workload restore Kni.Platform.WinForms.DX11.sln\n            \n    - name: dotnet workloads (after restore)\n      run: dotnet workload list\n      \n    - name: Restore dependencies\n      run: dotnet restore KNI.sln\n      \n   # - name: Build\n   #   run: dotnet build KNI.sln --no-restore --property:WarningLevel=1\n    - name: Build Ref\n      run: dotnet build Platforms\\Kni.Platform.Ref.csproj --property:WarningLevel=1\n    - name: Build Blazor.GL\n      run: dotnet build Kni.Platform.Blazor.GL.sln --property:WarningLevel=1\n    - name: Build WinForms.DX11\n      run: dotnet build Kni.Platform.WinForms.DX11.sln --property:WarningLevel=1     \n    - name: Build SDL2.GL\n      run: dotnet build Kni.Platform.SDL2.GL.sln --property:WarningLevel=1  \n    - name: Build iOS.GL\n      run: dotnet build Kni.Platform.iOS.GL.sln --property:WarningLevel=1\n    - name: Build Android.GL\n      run: dotnet build Kni.Platform.Android.GL.sln --property:WarningLevel=1\n\n    - name: Install Android SDK Platform 32\n      shell: cmd\n      run: |\n        echo y | \"%ANDROID_HOME%\\cmdline-tools\\latest\\bin\\sdkmanager.bat\" --install \"platforms;android-32\"\n\n    - name: Build Oculus.GL\n      run: dotnet build Kni.Platform.Oculus.GL.sln --property:WarningLevel=1\n   # - name: Build Cardboard.GL\n   #   run: dotnet build Kni.Platform.Cardboard.GL.sln --property:WarningLevel=1\n   # - name: Build Windows UAP.DX11\n   #   run: dotnet msbuild Kni.Platform.UAP.DX11.sln --property:WarningLevel=1\n\n   # - name: Test\n   #   run: dotnet test --no-build --verbosity normal\n"
  },
  {
    "path": ".github/workflows/sponsors.yml",
    "content": "name: Generate Sponsors README\non:\n  workflow_dispatch:\n  schedule:\n    # This is a cron schedule, it will run every day at 15:30. You can change this to whatever you want.x\n    - cron: 30 15 1,15 * *\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      # Checkout the repository\n      - name: Checkout 🛎️\n        uses: actions/checkout@v2\n\n      # Generate the sponsors\n      - name: Generate Sponsors 💖\n        uses: JamesIves/github-sponsors-readme-action@v1\n        with:\n          token: ${{ secrets.SECRET_SPONSORS_README }}\n          file: 'README.md'\n\n      # Deploy the changes back to the main branch of the repository\n      - name: Deploy to GitHub Pages 🚀\n        uses: JamesIves/github-pages-deploy-action@v4\n        with:\n          branch: main\n          # As we're deploying changes to our markdown files, this needs to be . to push the root directory back to the repository.\n          folder: '.'\n"
  },
  {
    "path": ".gitignore",
    "content": "#OS junk files\r\n[Tt]humbs.db\r\n*.DS_Store\r\n\r\n#Output Linux Installer\r\nInstallers/Linux/tmp_deb/\r\nInstallers/Linux/tmp_run/\r\n*.run\r\n*.deb\r\n\r\n#Visual Studio files\r\n*.pidb\r\n*.userprefs\r\n*.[Oo]bj\r\n*.exe\r\n*.pdb\r\n*.user\r\n*.aps\r\n*.pch\r\n*.vspscc\r\n*.vssscc\r\n*_i.c\r\n*_p.c\r\n*.ncb\r\n*.suo\r\n*.tlb\r\n*.tlh\r\n*.bak\r\n*.[Cc]ache\r\n*.ilk\r\n*.log\r\n*.lib\r\n*.sbr\r\n*.sdf\r\n*.csproj.csdat\r\nipch/\r\nobj/\r\n[Bb]in\r\n[Dd]ebug*/\r\n[Rr]elease*/\r\nAnkh.NoLoad\r\n.vs/\r\nproject.lock.json\r\n/MonoGame.Framework/MonoGame.Framework.Net.WindowsUniversal.project.lock.json\r\n/MonoGame.Framework/MonoGame.Framework.WindowsUniversal.project.lock.json\r\nartifacts/\r\n\r\n# JetBrains Rider\r\n.idea/\r\n\r\n#Tooling\r\n_ReSharper*/\r\n*.resharper\r\n[Tt]est[Rr]esult*\r\n\r\n#Visual Studio Rebracer extension, allows the user to automatically change the style configuration by project\r\nrebracer.xml\r\n\r\n#Subversion files\r\n.svn\r\n\r\n# Office Temp Files\r\n~$*\r\n\r\n#monodroid private beta\r\nmonodroid*.msi\r\n\r\n#Unix temporary files\r\n*~\r\n\r\n# Output docs\r\nDocumentation/Output/\r\n\r\n#Mac Package Files\r\n*.pkg\r\n*.mpack\r\n**/packages\r\n\r\n#Nuget Packages\r\n**/*.nupkg\r\n\r\n#Zip files\r\n*.zip\r\n\r\nInstallers/Windows/header.nsh\r\nInstallers/MacOS/Scripts/Framework/postinstall\r\nIDE/MonoDevelop/MonoDevelop.MonoGame/templates/Common/MonoGame.Framework.dll.config\r\n\r\n# CAKE\r\n.cake/**\r\n\r\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"ThirdParty/Dependencies\"]\n\tpath = ThirdParty/Dependencies\n\turl = https://github.com/kniEngine/kniDependencies.git\n[submodule \"ThirdParty/NVorbis\"]\n\tpath = ThirdParty/NVorbis\nurl=https://github.com/NVorbis/NVorbis.git\n[submodule \"ThirdParty/SDL_GameControllerDB\"]\n\tpath = ThirdParty/SDL_GameControllerDB\n\turl = https://github.com/gabomdq/SDL_GameControllerDB.git\n[submodule \"ThirdParty/StbImageSharp\"]\n\tpath = ThirdParty/StbImageSharp\n\turl = https://github.com/StbSharp/StbImageSharp.git\n[submodule \"ThirdParty/StbImageWriteSharp\"]\n\tpath = ThirdParty/StbImageWriteSharp\n\turl = https://github.com/StbSharp/StbImageWriteSharp.git\n"
  },
  {
    "path": "BuildNuget.bat",
    "content": "dotnet pack src\\Xna.Framework\\Xna.Framework.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Content\\Xna.Framework.Content.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Media\\Xna.Framework.Media.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Input\\Xna.Framework.Input.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Game\\Xna.Framework.Game.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.XR\\Xna.Framework.XR.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Design\\Xna.Framework.Design.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\n\ndotnet pack src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\n\n\"C:\\Program Files (x86)\\NuGet3\\nuget.exe\" pack NuGetPackages/Content.Pipeline.Builder.nuspec\t        -OutputDirectory NuGetPackages\\Output\\  -BasePath .  -Version 4.2.9001  -Properties Configuration=Release\n\"C:\\Program Files (x86)\\NuGet3\\nuget.exe\" pack NuGetPackages/Content.Pipeline.Builder.Windows.nuspec\t-OutputDirectory NuGetPackages\\Output\\  -BasePath .  -Version 4.2.9001  -Properties Configuration=Release\n\n\"C:\\Program Files (x86)\\NuGet3\\nuget.exe\" pack NuGetPackages/MonoGame.Framework.WindowsUniversal.nuspec\t-OutputDirectory NuGetPackages\\Output\\  -BasePath .  -Version 4.2.9001  -Properties Configuration=Release\n\ndotnet pack Platforms\\Kni.Platform.Android.GL.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack Platforms\\Kni.Platform.Oculus.GL.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack Platforms\\Kni.Platform.iOS.GL.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack Platforms\\Kni.Platform.WinForms.DX11.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack Platforms\\Kni.Platform.SDL2.GL.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\ndotnet pack Kni.Platform.Blazor.GL.sln --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release \ndotnet pack Platforms\\Kni.Platform.Ref.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release \ndotnet pack Platforms\\Kni.Platform.WinForms.DX11.OculusOVR.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release \n\ndotnet pack Platforms\\Kni.Platform.Cardboard.GL.csproj --output NuGetPackages\\Output\\ /t:Build /p:Configuration=Release\n\n@pause\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "﻿# Changelog\r\n\r\n\r\n## 4.2.9001 Release - November 2, 2025\r\n\r\n### Fixed\r\n - fix BoundingFrustum Intersects BoundingSphere #2436\r\n - fix GraphicsResourceStrategy.Dispose() #2334\r\n - fix ShouldNotOverrideTextures tests #2401 (XNA API compatibility)\r\n - fix shouldSetAndGetOptimizedMatrixArray Test #2466\r\n - Fix SFX MasterVolume #2381\r\n - [DesktopGL] fix SDL MediaPlayer.IsRepeating gaps #2515\r\n - [OpenAL] fix default microphone selection #2339\r\n - [XAudio/WebAudio] fix SoundEffectInstance default Volume #2360\r\n - [Android] fix Android ConcreteMediaPlayerStrategy IsRepeating #2440\r\n - [Android] fix Android ConcreteVideoPlayer IsLooped #2439\r\n - [Blazor.GL] MouseState.ScrollWheelValue does not change #2532\r\n - [GL] fix GLes precision #2448\r\n - [GL] fix GraphicsDevice.Clear(...) #2354\r\n - [Content.Pipeline] fix Incremental builds #2449\r\n - [Content.Pipeline] fix ColorWriter RuntimeType namespace #2298\r\n - [Content.Pipeline] fix BuildEvent SourceFile for external references #2333\r\n - [Content.Pipeline] fix parsing WebM metadata #2386\r\n - [Content.Pipeline] fix parsing WMV metadata #2322\r\n - [PipelineEditor] content editor preserve Link #2345\r\n\r\n### Performance\r\n - optimize ConstantBufferStrategy.SetData(...) #2320\r\n - reduce ModelBoneCollection allocations #2501\r\n - [OpenAL] reduce allocations on OpenAL DynamicSoundEffectInstance #2484\r\n - [OpenAL] reduce allocations on OpenAL SoundEffect #2489\r\n - [Content.Pipeline] optimize CreateGeometry(...) #2336\r\n - [Content.Pipeline] perf SoundEffectProcessor #2369\r\n\r\n### Changed\r\n - thread-safe Model.Draw(...) #2500\r\n - KNIFX Format #2396, #2400\r\n - multiplatform shaders #2464\r\n - check Shader model Version #2350\r\n - GLSL 300es Shaders #2406\r\n - [GL] seperate GL shaders #2456, #2457, #2463\r\n - [Android] upgrade to 16K aligned OpenAL v1.24.3 + OBOE #2495, #2504\r\n - [Winforms.DX11] enable DX Keyboard Input by default when there is no GameWindow/Game. #2528\r\n - [Blazor.GL] update Wasm v8.0.11 #2467,#2543\r\n - [WebGL] allow feature level FL10_0 #2517\r\n - [GL] allow SM4.0 on GLSL #2428, #2446\r\n - [DX11] upgrade to SharpDX 4.2.0 #2297, #2479\r\n - [Content.Pipeline] default media formats #2384\r\n - [Content.Pipeline] use WebM as the default on all platforms #2388\r\n - [Content.Pipeline] use MP3 as the default on all platforms #2389\r\n - [Content.Pipeline] Transcode Video files #2324\r\n - [PipelineEditor] resolving packages modal window #2471\r\n - [PipelineEditor] preserve ProcessorParams #2476, #2482\r\n - [PipelineEditor] PathComparer #2290\r\n\r\n### Added\r\n - [Android] implement ConcreteMouse #2422, #2423\r\n - [Winforms.DX11] implements SaveAsJpeg() #2519\r\n - [Blazor.GL] Implements BlazorGameWindow.OnTextInput #2351\r\n - [Blazor.GL] Implements Mouse.SetCursor for BlazorGL #2346\r\n - [WebAudio] implement WebAudio Pan #2361\r\n - [WebAudio] implement WebAudio Ieee float #2367\r\n - [WebAudio] implements DynamicSoundEffectInstance #2468\r\n - [WebAudio] implements MicrophoneStrategy #2469\r\n - [WebGL] Implements DrawInstancedPrimitives support for BlazorGL #2338\r\n - [Content.Pipeline] VideoImporter #2385\r\n - [Content.Pipeline] added .fx defines __GL__, __GLES__ #2546\r\n\r\n### Removed\r\n - [Content.Pipeline] drop support for legacy MGFX v09 #2397\r\n - [Content.Pipeline] removed .fx defines MGFX, DEBUG, GLSL, HLSL, OPENGL, SM4 #2545\r\n\r\n## 4.1.9001 Release - April 08, 2025\r\n\r\n### Fixed\r\n - [GL] fix DrawRangeElementsBaseVertex and DrawElementsBaseVertex #2191\r\n - [BlazorGL] fix Reach profile #2192\r\n - [Content.Pipeline] fix Nvidia.TextureTools 'exited with code (0xc0000409)' #2206\r\n - fix AboutAssets.txt templates typo #2195\r\n - [Android] initialize AndroidGameWindow.CurrentOrientation #2222\r\n - [Android] fix AndroidGameWindow Dispose #2242\r\n - fix build targets #2244\r\n - fix BoundingFrustumIntersectsBoundingSphere #2245, #2246, #2247\r\n - [BlazorGL] disable webkit text highlighting #2259\r\n - [Content.Pipeline] fix assimp SpecularPower #2264\r\n - [Android] fix ConcreteMicrophone #2269\r\n - [Oculus] fix .net9 build and target SDK 32 #2275,#2276\r\n\r\n### Performance\r\n - reduce GetRenderTargets() allocations #2212\r\n\r\n### Changed\r\n - [GL] improve PlatformNotSupportedException error messages #2209\r\n - return the number of render targets from GetRenderTargets() #2213\r\n - improve KNIFXC help output #2277, #2281\r\n\r\n### Added\r\n - [BlazorGL] implemented MediaPlayer.MediaStateChanged #2258\r\n\r\n### Removed\r\n\r\n## 4.0.9001 Release - January 14, 2025\r\n\r\n### Fixed\r\n - fixed SensorBase.Dispose() #1925\r\n - fixed sensor Dispose/finalize #1929\r\n - fix TestContentManager usage #1955\r\n - fix PipelineEditor OpenFile #1964\r\n - fix SDL IndexBuffer ShouldSetAndGetStructData #1974\r\n - fix SDL VertexBuffer ShouldSetAndGetStructData #1974, #2000\r\n - rebuild Assets when compression method changed #1980\r\n - fix DesktopGL native runtimes #1992\r\n - fix IFrame event capture #1993\r\n - fix DesktopGL MediaPlayer.Position #2006\r\n - fix PipelineEditor OnReferencesModified #2026\r\n - fix BoundingFrustrum Intersects & Contains #2052, #2073, #2074\r\n - fix CheckGLError(...) #2055\r\n - [SDL2] pin buffer to avoid access to invalid memory #2058\r\n - [OpenGL] fix Discard rendertargets #2062\r\n - [OpenGL] fix multisample surface types #2063\r\n - fix Complex out parameters #2125\r\n - fix GL TextureFilter.Linear #2165\r\n - fix GetInfoLog() #2166\r\n - fix DrawRangeElementsBaseVertex #2187, #2181\r\n\r\n### Performance\r\n - optimize DX VertexBuffer Get/Set Data #1967\r\n - optimize SDL IndexBuffer GetData #1974\r\n - optimize SDL VertexBuffer GetData #1974, #2000\r\n - perf ConvertFloat32ToInt16() #2008, #2009, #2028\r\n - perf DesktopGL Texture GetData(...) #2011\r\n - perf use Environment.CurrentManagedThreadId #2013\r\n - perf use generic ContentTypeReaderT, avoid boxing for value types #2029\r\n - optimize GamePadDPad #2114\r\n\r\n### Changed\r\n - remove MaxSensorCount limit #1928\r\n - rename Sensors namespace #1942\r\n   Microsoft.Devices.Sensors -> Microsoft.Xna.Framework.Devices.Sensors\r\n - The library MonoGame.Framework is split into Xna.Framework.Devices, and Xna.Framework.Storage #1947, #1988.\r\n - ContentLoadException message include assetName #1963\r\n - throw 'Operation not called on main thread' for VertexShader/PixelShader #2014\r\n - throw 'Operation not called on main thread' for GetBackBufferData(...) #2020\r\n - [PipelineEditor] resize dialogs #2066, #2067\r\n - Rename Platform assembly #2136, #2146, #2147\r\n - rename Platform packages #2137, #2150, #2156\r\n\r\n### Added\r\n - Vibrator class #1941, #2089\r\n - implement UAP Accelerometer #1948\r\n - XNB compression extension #1961, #2039\r\n - Brotli XNB compression #1962, #1966, #2033, #2040, #2041\r\n - /packageReference option in .mgcb to consume importers & processors from nuget #2027, #2068, #2069, #2070, #2075\r\n - added Plane.Intersects(Ray) #2044, #2046\r\n - added XR library, and unify LibOVR.\r\n - implement XR for BlazorGL platform #2090\r\n - [WebGL] implement half-float surface formats #2042\r\n - [WebGL] implement multisampling in rendertargets #2088\r\n - System.Numerics explicit conversion #2110\r\n - Matrix.CreateRotationZ(Complex) #2120\r\n - Pose3 and Pose2 structs #2121\r\n - windowsDX11 net4.8 #2142, #2152\r\n - tools net4.8 #2151\r\n - Oculus native backend #2174\r\n - [Blazor] implement MediaPlayer.PlayPosition and VideoPlayer.PlayPosition #2184\r\n\r\n### Removed\r\n - drop net6.0 from WindowsDX & BlazorGL #2086\r\n - xamarin .nuspec #2154\r\n - Xamarin iOS project #2155\r\n\r\n## 3.14.9001 Release - September 23, 2024\r\n\r\n### Fixed\r\n - fixed TouchPanel scalling #1852\r\n - [BlazorGL] fixed Gamepad disconnect #1771\r\n - [BlazorGL] map GamePad Indices #1773\r\n - [BlazorGL] fixed Buffers SetData(...) with startIndex #1834\r\n - [BlazorGL] fixed TouchPanel initialization #1837\r\n - [OpenGL] fix DrawIndexedPrimitives (#1869\r\n - [WindowsDX/UAP] fixed GamePadState.IsConnected #1769\r\n - [Content.Pipeline] fixed OpenAssetImporter #1817,#1868\r\n - [Content.Pipeline] fixed DX textureSlot #1851\r\n\r\n### Performance\r\n\r\n### Changed\r\n - IsContentLost will not throw NotImplementedException #1865\r\n - [Android] GraphicsAdapter.MonitorHandle return the native eglDisplay handle #1795\r\n - [OpenGL/WebGL] include GL shader compilation InfoLog in the exception message. #1830,#1832,#1838\r\n - [BlazorGL] Upgrade Wasm packages to v8.0.2 #1860\r\n - [UAP] update to SDK v10.19041 #1769\r\n - [LibOVR] OvrDevice require GraphicsProfile FL11_0 #1795\r\n - [LibOVR] Upgrade LibOVR packages to v2.1 #1862\r\n\r\n### Added\r\n - [OpenGL] ColorSRgba support #1802,#1805\r\n - [OpenGL] implemented GL shared texture2D #1854\r\n - [Android/GLES] implemented RenderTarget multisampling #1843,#1814\r\n - [Android/GLES] implemented Multiple Render Targets #1845\r\n - [BlazorGL] implemented Multiple Render Targets #1840\r\n - [BlazorGL] implemented SamplerStates #1765\r\n - [BlazorGL] implemented DXT5 compression #1766\r\n - [BlazorGL] implemented TextureCube #1767\r\n - [BlazorGL] support for SM 3.0 standard_derivatives #1833,#1844\r\n - [BlazorGL] implemented float texture surfaceTypes (Vector4,Vector2,Single) #1842\r\n - [BlazorGL] implemented Buffers GetData(...)  #1861\r\n - [BlazorGL] implemented Gamepad Trigger buttons #1770\r\n - [BlazorGL] implemented GamePad.SetVibration #1853\r\n - [LibOVR] add OvrDevice.TrackFloorLevelOrigin #1864\r\n - [Oculus/OpenXR] add HandsState.GetGripTransform() #1856\r\n\r\n### Removed\r\n\r\n## 3.13.9001 Release - July 24, 2024\r\n\r\n### Fixed\r\n - fix GamePadCapabilities #1565\r\n - [iOS] fix Game.Services NullReferenceException #1607\r\n - [SDL] fix JoystickCapabilities.IsGamepad #1626\r\n - [ANDROID] fix Keyboard #1688\r\n - fix templates .mgcb file creation #1693\r\n - Fix templates projectname #1694\r\n - fix BlazorGL template alpha blend #1695\r\n - [DX11] fix NonPowerOfTwoUnusedTextureShouldNotThrow test #1701\r\n - [GL] fix NonPowerOfTwoUnusedTextureShouldNotThrow test #1702\r\n - [EffectProcessor] inorder samplers merge #1709\r\n - [EffectProcessor] fix ShaderProfileDX11 samplerSlot #1710\r\n - fix CreateGamePadCapabilities #1713\r\n - fix ResourceNameAlphaTestEffect #1724\r\n - [BlazorGL] fix MediaPlayer IsRepeating #1726\r\n - [SDL] early Joysticks initialization #1735\r\n - [BlazorGL] clear KeyboardState on focus lost #1736\r\n - [BlazorGL] fix Keyboard special keys #1738\r\n - fix MGCB builds with no response file #1745\r\n\r\n### Performance\r\n - optimize ConcreteTextureCollection.PlatformApply() #1605\r\n - perf use HashSet for ContentManager _disposableAssets #1711\r\n - [Android] reduce FromEGLConfig() allocations #1583\r\n - [GL] use HashSet for GL Extensions #1587\r\n - [GL] optimized PlatformApplyVertexBuffers() #1604, #1673\r\n - [GL] discard VertexBuffer in SpriteBatcher #1636\r\n - [OpenGL] remove glFinish() from Texture2D.SetData() #1638\r\n - [OpenGL] use DrawRangeElements #1703\r\n - [SDL] cache JoystickCapabilities #1625\r\n - [SDL] cache GamePadCapabilities #1630\r\n - [SDL] reduce Vorbis MediaPlayer allocations #1680\r\n - [SDL] reuse Vorbis reader for Song Repeat #1684\r\n\r\n### Changed\r\n - [EffectProcessor] Shader Model 1.x error message #1722\r\n - [BlazorGL] implemented DrawUserPrimitives and DrawUserIndexedPrimitives with vertexOffset #1723\r\n - [BlazorGL] implemented GamePad #1730\r\n - [BlazorGL] implemented TouchPanelCapabilities MaximumTouchCount and IsConnected #1731\r\n - [BlazorGL] implemented Medium quality SoundEfects (MsAdpcm) #1748\r\n - [BlazorGL] implemented SoundEffect.FromStream() #1749\r\n - [BlazorGL] implemented Buffers SetData(...) with startIndex #1753\r\n - [BlazorGL] implemented HiDef and WebGL2 #1756\r\n\r\n### Added\r\n\r\n### Removed\r\n - VS2019 templates removed #1631\r\n - Xamarin templates removed #1632\r\n - removed GamePadState.Default #1650, #1651, #1653\r\n\r\n## 3.12.9001 Release - May 12, 2024\r\n\r\n### Fixed\r\n - fix FBX GlobalSettings transforms #1310, #1545.\r\n - fix ContentCompiler.Compile(...) #1320.\r\n - fix psShader error message #1333.\r\n - fix TitleContainer.Current comments #1339.\r\n - [Android] fix Android Game Initialization #1446, #1551.\r\n - [UAP] fix UAP Game Initialization #1452.\r\n - [iOS] fix iOS Game Initialization #1487.\r\n - allow the Game loop to run without a GraphicsDeviceManager #1453, #1467.\r\n - fix XAudio ADPCM fallback #1508.\r\n - fix ProcessMesh() channel mapping to VertexElement #1538.\r\n - fix ExternalReferenceWriter GetRuntimeReader(...) #1540.\r\n - ModelProcessor default ColorKeyColor #1542.\r\n - set MaterialProcessor Parameter default values #1546, #1547.\r\n - Fixed resolve Type bug due to splitting out to different assemblies #1534, #1552.\r\n\r\n### Performance\r\n - skip XNB compression for uncompressed files #1321, #1334.\r\n - compact sizeof GamePadCapabilities #1430.\r\n - compact sizeof JoystickHat #1471.\r\n - optimize BufferPool array allocation #1526, #1527.\r\n - optimize ProcessMesh #1537.\r\n\r\n### Changed\r\n - [Content.Pipeline] upgrade Assimp to v5.2.4 #1305.\r\n - renamed HandState.GetHandTransform(int handIndex) parameter #1312. \r\n - allow Shader Model 2_0 and 3_0 on DirectX targets #1333.\r\n - Game.ResetElapsedTime() is no longer virtual #1439.\r\n - GameTime properties are now readonly/protected. #1443.\r\n - The library MonoGame.Framework is split into Xna.Framework.Input, and Xna.Framework.Game #1517, #1518. \r\n\r\n### Added\r\n - GameWindow keyboard events are now visible in all platforms #1317, #1323.\r\n - fx macro __KNIFX__.\r\n - protected GameWindow.OnClientSizeChanged() (XNA API compatibility) #1486.\r\n - ModelProcessor.GenerateNormals #1543.\r\n\r\n### Removed\r\n - TouchPanelState class #1337.\r\n - TouchPanel.GetState(GameWindow) #1337.\r\n - Removed Cardboard Xamarin target #1507, #1548.\r\n - Removed obsolete PlatformInfo, GraphicsBackend, PlatformInfo #1519.\r\n - protected ContentManager.LoadedAssets property #1523.\r\n\r\n## 3.11.9002 Release - March 09, 2024\r\n\r\n### Fixed\r\n - [Content.Pipeline] fixed FontDescriptionStyle (Regular,Bold,Italic) #1019, #1056, #1142.\r\n - [Content.Pipeline] fixed FontDescriptionStyle flags #1053.\r\n - [Content.Pipeline] fixed FontDescription.Name. Resolve FontFamily #1060.\r\n - [Content.Pipeline] fixed MeshHelper.CalculateNormals() #1128.\r\n - [Content.Pipeline] fixed ProcessorContext.BuildAsset<Tin,Tout> asset path #1147.\r\n - [PipelineEditor] fixed content Editor layout. Preserve splitter positions & window size. #1214, #1225.\r\n - [GL] bugfix: #991 zero-initialized RenderTargetBinding instances being accessed in PlatformUnbindRenderTarget #998.\r\n - [Android] fixed GL InitExtensions() #1239.\r\n - [Android] fixed LzxDecoderStream #1261.\r\n - [UAP.XAML] fixed PresentationParameters.DeviceWindowHandle #970.\r\n - fixed SoundEffectInstance finalizer #1281.\r\n - fixed default initialization of PresentationParameters #985.\r\n - fixed spelling errors in comments #1063, #1281, #1209.\r\n - fixed WindowsDX VS2019 template #1106.\r\n\r\n### Performance\r\n - Optimized VertexElements iteration #1115.\r\n\r\n### Changed\r\n - [Content.Pipeline] local fonts must specify the full filename + extension #1055.\r\n - [Content.Pipeline] Builder.Task nuget package to replace build targets #1139, #1140, #1141 #1224, #1270.\r\n - [Content.Pipeline] VertexBufferWriter will throw PipelineException on invalid VertexData.Length #1150.\r\n - [Content.Pipeline] ModelProcessor throws InvalidOperationException on invalid geometry #1151.\r\n - [Content.Pipeline] ContentWriter.Write(Color) & ContentReader.ReadColor() replaced with extensions #1190, #1191.\r\n - [Content.Pipeline] Upgrade content pipeline to net8 #1229, #1230, #1235.\r\n - [Content.Pipeline] 2MGFX tool renamed to Knifx #1251.\r\n - [Content.Pipeline] renamed stock importers #1252.\r\n - [PipelineEditor] Upgrade ContentMenu to ContentMenuStrip #1213.\r\n - [PipelineEditor] Upgrade content editor from net4.x to net8 #1216, #1217, #1218, #1219, #1220, #1223, #1226.\r\n  - set Tools icon (content editor, MGCB, 2MGFX) #1221.\r\n - [BlazorGL] Upgrade WebAssembly packages to v6.0.27 #1233.\r\n - [BlazorGL] Upgrade Wasm packages to v8.0.0 #1249, #1287.\r\n - [Android] Disabled fast deployment in net8 template #1279.\r\n - [Android/iOS] Enable trimming in iOS, Android templates #1288.\r\n - [DesktopGL] Enable trimming and nativeAOT in DesktopGL templates #1288.\r\n - [DX11] GraphicsAdapter.DriverType & GraphicsAdapter.UseDriverType moved to PresentationParameters #1007.\r\n - [LibOVR] Upgrade LibOVR packages to v2.0 #1286.\r\n - [LibOVR] implement TouchController.ThumbSticks #1290, #1291, #1292.\r\n - DesktopGL & WindowsDX11 projects upgraded to netcode SDK #1131.\r\n - test files merged #1129.\r\n - VS2019 project templates updated to use nuget packages #1269.\r\n - updated VS2022 template icons #1289.\r\n - The library MonoGame.Framework is split into MonoGame.Framework, Xna.Framework.Content, Xna.Framework.Graphics, Xna.Framework.Audio, and Xna.Framework.Media #1166, #1167, #1176, #1188.\r\n - PlatformInfo.GraphicsBackend marked obsolete. Use Adapter.Backend #1202.\r\n - PlatformInfo.MonoGamePlatform marked obsolete.Use TitleContainer.Platform #1208.\r\n - Upgrade platforms to net8 #1228, #1236.\r\n - Upgrade templates to net8 #1237.\r\n - Upgrade framework to net8 #1263.\r\n\r\n### Added\r\n - \r\n - RenderTargetBinding(RenderTarget3D) .ctor is now visible in all platforms #982.\r\n - ResourceContentReader class is now visible in all platforms #1100.\r\n - Added ContentReader.BufferPool property #1092.\r\n - Added MediaQueue.Count property #1182.\r\n - Added Adapter.Backend #1202.\r\n - Added TitleContainer.Platform #1208.\r\n - Added ColorConverter class #1253.\r\n - Added MGCB debug profiles #1274.\r\n - Enable trimming in framework libraries #1282, 1283.\r\n - VertexDeclaration implements IDisposable #1284.\r\n\r\n### Removed\r\n - [UAP.XAML] removed custom game constructor #961.\r\n - [UAP] removed UAP gameloop thread #968.\r\n - [UAP] removed template WizardExtension #1272.\r\n - removed PresentationParameters.Clear() method #962.\r\n - removed PresentationParameters.SwapChanPanel property #972, #975.\r\n - removed Video.FileName property #1178.\r\n\r\n## 3.10.9001 Release - November 30, 2023\r\n\r\n### Fixed\r\n - Fixed spelling of 'Occurred' in Exceptions, Errors and comments #536.\r\n - Fixed spelling errors #545.\r\n - Fixed not-supported compression format error message #537.\r\n - Fixed GraphicsResource.Disposing event. Throw Disposing before the object is disposed or or collected (XNA Compatibility) #583.\r\n - Fixed GraphicsDevice.Disposing event #587. Throw Disposing before the object is disposed or collected.\r\n - [OculusVR] Dispose of OvrDevice on device disposing #589.\r\n - [OpenAL] Fixed Microphone.BufferDuration redundancy #599.\r\n - [OpenGL] Fixed GenRenderbuffer() & DeleteFramebuffer() #647.\r\n - [DX11] Fixed MultiSample in shared textures #666.\r\n - Fixed spelling in MeshHelper documentation #679.\r\n - [OpenGL/WebGL] Fixed Texture bindings #694.\r\n - [OpenGL/WebGL] Fixed GL Texture MultiSampleCount #720.\r\n - Fixed spelling in comments #744.\r\n - Fixed GLSL Texture parameter #752.\r\n - Fixed HLSL Texture parameter #754, #755, #830.\r\n - Fixed Game.IsActive on startup #759.\r\n - Fixed collection of DynamicSoundEffectInstance objects #776. \r\n - Fixed collection of MediaPlayer objects #777, #784.\r\n - [OpenGL] Fixed appling of VertexBuffersAttribs #787.\r\n - [OpenGL] Fixed disposal of GraphicsResource objects from the GC Finalizer thread. #797, #798, #799, #800, #802, #803, #805.\r\n - [DX11] Fixed resizing while a renderTarget is attached to the backbuffer #808.\r\n - [OpenGL] Fixed updating of GraphicsDevice.ScissorRectangle after a ClientResize event #810.\r\n - Fixed content Builder db corruption #864.\r\n - Fixed content Builder IntermediateOutputDir when building from VS target. #875, #876, #877, #878 .\r\n - Fixed content Builder /Clean option. #882.\r\n - Fixed content Editor crash from invalid builder's output #890.\r\n - Fixed content Builder non-standard output. #892.\r\n - Fixed content Builder race condition in CopyItems #894.\r\n - Fixed content Builder Success/Error counters in CopyItems #895.\r\n - Fixed Game.SuppressDraw #915.\r\n - [SDL] Bugfix: Tick() was called after Game.Exit() #917.\r\n  \r\n### Performance\r\n - [OpenGL/WebGL] Optimized SamplerState.PlatformApplyState(...) #580.\r\n - [OpenGL] Optimized Effect loading GL #672.\r\n - [DX11] Optimized DrawUserIndexedPrimitives #678.\r\n - [OpenGL/WebGL] Optimized Apply of TextureCollection #705.\r\n - Optimized DrawIndexedPrimitives #706.\r\n - [OpenGL] Optimized DrawIndexedPrimitives & DrawInstancedPrimitives #709.\r\n - Optimized SpriteBatch flush #710.\r\n - [DX11] Optimized SetConstantBuffers #711.\r\n - Optimized Effect processor #763.\r\n - [OpenGL/WebGL] Optimized ComputeHash #768.\r\n - Optimized GraphicsResource.GraphicsDevice code-flow #783, #780.\r\n - Optimized PlatformApplyVertexBuffersAttribs code-flow #786.\r\n - Optimized content Builder db #871, #872.\r\n - Optimized content Builder CleanItems #884.\r\n - Optimized content Builder project file loading #887. \r\n - Optimized SetParameter code-flow #896.\r\n - Optimized Po2 check #906.\r\n \r\n### Changed\r\n - [Android] implemented GameWindow.Handle and PresentationParameters.DeviceWindowHandle #534.\r\n - GraphicsDevice.Handle and Texture.Handle marked obsolete. Use GraphicsDevice.GetD3D11Device() and Texture.GetD3D11Resource() extensions. #593.\r\n - Renamed  parameter 'cubeMapFace' of TextureCube.SetData() (XNA Compatibility) #613.\r\n - Unresolvable Character error from a SpriteFont now reports the unresolved chracter. #648.\r\n - Renamed parameter 'usage' of IndexBuffer & VertexBuffer (XNA Compatibility) #686.\r\n - Renamed constants in project templates, LINUX->DESKTOPGL, WINDOWS->WINDOWSDX #712.\r\n - VertexDeclaration is no longer inherited from GraphicsResource (breaks XNA API) #760, #773.\r\n - Macros removed from the SpriteEffect.fx template #769, #817.\r\n - The content Editor enforce rooted content #774.\r\n - Updated CompareFunction Members documentation #815.\r\n - Cleaned up UAP project templates #831.\r\n - VS2022 project templates updated to use nuget packages. #839.\r\n - Invalid XNB file error from ContentManager now reports the invalid platform flag #865, #866.\r\n - Content builder with /quiet option no longer output 'Skipping...' files in VS build output. #873.\r\n - VS2022 project templates updated to use new build target Kni.Content.Builder.targets #879, #880, #928.\r\n - Content builder with /guiet option now output a single-line report message. #886.\r\n - Content builder reports milliseconds in 3 digits. #886.\r\n - [BlazorGL] implemented Texture2D.GetData() #716.\r\n - [BlazorGL] implemented SongReader & MediaPlayer #723.\r\n - [BlazorGL] implemented VideoPlayer #724.\r\n - [BlazorGL] implemented Depth24Stencil8 for render targets #816.\r\n - [BlazorGL] implemented Depth24Stencil8 for GraphicsDeviceManager.PreferredDepthStencilFormat #821.\r\n - [BlazorGL] implemented GraphicsDeviceManager.PreferrMultiSampling #824.\r\n - [BlazorGL] implemented PresentationParameters.RenderTargetUsage #825.\r\n - [BlazorGL] implemented Game.IsActive #826.\r\n - [OpenGL/WebGL] GraphicsAdapter.IsDefaultAdapter #826.\r\n - [DesktopGL] GraphicsAdapter.IsProfileSupported #903.\r\n - [ANDROID/iOS] Mobile/Xamarin projects & templates upgraded to .net8 #925, #926, #927.\r\n - [BlazorGL] Brotli decompression is disabled by default #931.\r\n\r\n### Added\r\n - GraphicsDevice.Flush() added to all platforms #590.\r\n - DynamicBuffer.ContentLost event (XNA API compatibility) #725.\r\n - [BlazorGL] loading screen #911.\r\n - [BlazorGL] added enableBrotliDecompression boolean in index.html #930.\r\n \r\n### Removed\r\n - Textur2D.Reload() method #571.\r\n - [Android/iOS] Native Texture2D.FromStream() methods #572.\r\n - .net6 Libraries removed from the SDK #835.\r\n - VS2017 project templates #850.\r\n - Implicit response & content filenames as arguments in the content builder, Use /@:responseFile and /build:contentFile #867.\r\n - /LauncgDebugger option from the content builder #868.\r\n - .net6 Templates #920.\r\n\r\n## 3.9.9001 Release - august 09, 2023\r\n\r\n### Fixed\r\n - bugfix: fix Complex.Magnitude.\r\n - bugfix: fix DictionaryReader.\r\n - bugfix: fix RenderTarget3D/RenderTargetCube multisample.\r\n - bugfix: fix EffectParameter.SetValueTranspose(Matrix) for Matrxi4x3 and Matrix3x4.\r\n - bugfix: [OpenGL] Dispose of GraphicsContext.\r\n - bugfix: [OpenGL] fix MarshalStringToPtr(...).\r\n - bugfix: [OpenGL] fix RenderTarget2D multisample.\r\n - bugfix: [OpenGL] IndexBuffer is invalidated after a call to DrawUserPrimitives, IndexBuffer's .ctor and GetData/SetData.\r\n - bugfix: [WindowsDX] fix ObjectDisposedException in PreFilterMessage.\r\n - bugfix: [WindowsDX] fix VideoPlayer.Resume().\r\n - bugfix: [WindowsDX] fix VideoPlayer memory leak.\r\n - bugfix: [WindowsDX/UAP] fix VideoPlayer.GetTexture().\r\n - bugfix: [DesktopGL] DeviceWindowHandle is not updated to the actual GL Window handle.\r\n - bugfix: [DesktopGL] game window fails to load Icon.bmp.\r\n - bugfix: [DesktopGL] GameWindow.Title.\r\n - bugfix: [Content.Pipeline] fix FontDescriptionProcessor smoothing.\r\n - bugfix: [Content.Pipeline] FontDescription.Spacing was incorectly applied to VerticalLineSpacing (XNA API compatibility).\r\n - bugfix: [Content.Pipeline] fix FontDescriptionProcessor Yoffset Cropping.\r\n - bugfix: [Content.Pipeline] fix font size.\r\n - bugfix: [Content.Pipeline] Added 1px spacing to Glyphs when UseKerning is false.\r\n - bugfix: [Content.Pipeline] method CalculateAlphaRange(...) should throw instead of returning default value when the type is unsupported.\r\n - bugfix: [Content.Pipeline] fix GLSL optimized matrix parameter.\r\n - bugfix: [Content.Pipeline] fix Compression of 16bit Textures with Alpha.\r\n - bugfix: [Content.Pipeline] fix EnvironmentMapEffectWriter.\r\n - bugfix: [Content.Pipeline] fix MeshHelper.CalculateNormals(...).\r\n - bugfix: [Content.Pipeline] Implement ContentImporterContext.AddDependency() (XNA API compatibility).\r\n - bugfix: [Content.Pipeline] Interpolate curved animation (XNA API compatibility).\r\n \r\n### Performance\r\n - [DesktopGL] reduce GamePad.GetCapabilities(...) string allocations.\r\n - [GL] Use DYNAMIC_DRAW for Dynamic buffers instead of STREAM_DRAW.\r\n - [Content.Pipeline] Optimized ProcessPremultiplyAlpha(...).\r\n - [Content.Pipeline] Optimized Texture compression.\r\n - [Content.Pipeline] Optimized FontDescriptionProcessor and FontTextureProcessor.\r\n - [Content.Pipeline] Optimized PixelBitmapContentT.SetPixelData(...) and PixelBitmapContentT.ReplaceColor(...).\r\n - [PipelineEditor] optimize UpdateRecentProjectList().\r\n \r\n### Changed\r\n  - The library MonoGame.Framework is split into MonoGame.Framework, Xna.Framework and Xna.Framework.Design.\r\n  - Game.Exit() will now throw PlatformNotSupportedException instead of InvalidOperationException (XNA API change).\r\n  - GameWindow.Title will throw ArgumentNullException (XNA API compatibility).\r\n  - Max Capacity of TextureCollection, ConstantBufferCollection, SamplerStateCollection increased to 32. Collections will throw ArgumentOutOfRangeException.\r\n  - EffectParameter.SetValue(Matrix) will throw InvalidCastException for unsuported Matrix types.\r\n  - Vector2/3/4TypeConverter, renamed to Vector2/3/4Converter.\r\n  - IsContentLost will throw NotImplementedException.\r\n  - [BlazorGL] Game.Exit() will throw PlatformNotSupportedException.\r\n  - [BlazorGL] MaxTextureSlots increased to 8 from 4.\r\n  - [WindowsDX] Texture2D.Reload() will throw NotImplementedException.\r\n  - [PipelineEditor] font size increased to 11 from 9.\r\n  - [Content.Pipeline] AssimpNet updated to v4.1.0.\r\n  - [Content.Pipeline] The library MonoGame.Framework.Content.Pipeline is split into\r\nXna.Framework.Content.Pipeline, Xna.Framework.Content.Pipeline.Audio, Xna.Framework.Content.Pipeline.Media,\r\nXna.Framework.Content.Pipeline.Graphics and Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.\r\n \r\n### Added\r\n - Implement IPackedVector<UInt32> for Color (XNA API compatibility).\r\n - Implement EffectParameter.SetValue(Matrix) for Matrix4x2.\r\n - [DesktopGL] Implement Mouse Raw Input.\r\n - [WindowsDX/UAP] Implement VideoPlayer.IsLooped.\r\n - [Android] Implement VideoPlayer.GetTexture(), VideoPlayer.PlayPosition, VideoPlayer.IsLooped, VideoPlayer.Volume.\r\n - [BlazorGL] Implement building effects for the WebGL Platform.\r\n - [BlazorGL] Update template to prevent Arrows Keys and Spacebar scrolling the outer page when running inside an iframe. (by @Terria-K)\r\n - [BlazorGL] Update template to prevent Mousewheel scrolling the outer page when running inside an iframe.\r\n - [Content.Pipeline] added FontDescriptionProcessor.Smoothing parameter.\r\n - [Content.Pipeline] support Alpha8, NormalizedShort2, NormalizedShort4 in PixelBitmapContent (XNA API compatibility).\r\n \r\n### Removed\r\n  - GraphicsDevice.IsContentLost property.\r\n  - GraphicsDevice.ResourcesLost property.\r\n  - [UAP] removed Game.PreviousExecutionState property.\r\n  - [Android] removed Game.Activity property.\r\n  - [Content.Pipeline] StbSharp is now internal.\r\n \r\n## 3.8.9102 Release - February 5, 2023\r\n\r\n### Fixed\r\n - bugfix: Android gameloop will now pause while app is in the background.\r\n - bugfix: FontDescriptionProcessor glyph cropping.\r\n - bugfix: FontDescriptionProcessor glyph whitespaces width.\r\n - bugfix: GlyphPacker failed when FontDescription imports a single character.\r\n - bugfix: [MGCB] processorParam flag changed to 'm'. Fix conflict with processor flag 'p'.\r\n - bugfix: [MGCB] remove multiple flags support. Fix conflict with all non-flag parameters.\r\n - bugfix: [DesktopGL] Game initialization.\r\n\r\n### Performance\r\n - [GL] Single ShaderProgramCache lookup.\r\n - [GL] Use _blendFactorDirty  & _blendStateDirty to skip checks.\r\n - Parallel PixelBitmapContent<T> .ctor() and GetPixelData().\r\n - Multithread content pipeline builder.\r\n\r\n### Changed\r\n - GraphicsAdapter is no longer IDisposable (XNA API compatibility).\r\n - MonoGameAndroidGameView renamed to AndroidSurfaceView\r\n - base ContentTypeWriter.ShouldCompressContent(...) returns true.\r\n - Include type name in the error message for failed resolved Types in content pipeline.\r\n - Report duplicate importers/processors without faling/halting the build.\r\n - [OpenGL/GLES] resources are released immediately when the object is collected/Disposed.\r\n - Song in DesktopGL is re-implemented as DynamicSoundEffectInstance.\r\n - Include FontDescription.DefaultCharacter in the imported Glyphs instead of throwing an error (XNA API compatibility).\r\n - SpriteFont template updated with DefaultCharacter '�'.\r\n - Reverted WinForms editor replaces eto.\r\n - Calling EffectPass.Apply() will always apply the EffectPass that it was called on (XNA API compatibility).\r\nChanging the CurrentTechnique in Effect.OnApply() in no longer allowed and will throw an InvalidOperationException.\r\n - MonoGamePlatform enum BLAZOR renamed to BlazorGL.\r\n - [BlazorGL] workaround for .net7 Unmarshalled interop bug.\r\n\r\n### Added\r\n - The following Classes/Methods are now visible in all platforms.\r\nSetRenderTarget(RenderTarget2D renderTarget, int arraySlice)\r\nSetRenderTarget(RenderTarget3D renderTarget, int arraySlice)\r\n - Restored SpriteFont.Characters property (XNA API compatibility).\r\n - [MGCB] Parameter 'singleThread' (-s) to turn of Multithread build.\r\n - fx macros __DEBUG__, __DIRECTX__, __OPENGL__, __MOJOSHADER__.\r\n - DrawableGameComponent and GameComponent VS2022 template.\r\n - BlazorGL VS2022 template.\r\n\r\n### Removed\r\n - IWindowInfo\r\n - AndroidGameActivity.RenderOnUIThread\r\n - Song.Position\r\n - Protected methods PlatformOnSongRepeat(), PlatformPlay(), PlatformResume() in MediaPlayer.\r\n - GlyphCollection.CopyTo()\r\n - Stadia platform.\r\n\r\n## 3.8.9101 Release - October 9, 2022\r\n\r\n### Fixed\r\n - bugfix: [DesktopGL] screen appear white washed.\r\n - bugfix: [GL] TextureSlots number can be greater that implementation limitations.\r\n - bugfix: [webGL] Texture.Dispose() throws Exception when garbage collected.\r\n - bugfix: [WebAudio] SoundEffect.Volume is not applied to a playing instance.\r\n - bugfix: [DirectX] RenderTargetCube throws Exception when created without a Depth.\r\n - bugfix: Content manager should throw error when TypeVersion does not match.\r\n\r\n### Performance\r\n - perf: [GL] 250% faster spriteBatcher.\r\n - perf: 10% faster MeasureString().\r\n - perf: Optimize Vector array Transform methods.\r\n  - perf: cache resolved TypeReader types\r\n\r\n### Changed\r\n - [webGL] implement Discard mode in Dynamic buffers.\r\n - [webGL] implement Dtx3 texture compression.\r\n\r\n### Added\r\n - Oculus VR (PC library), Implemented as addon lib for WindowsDX.\r\nAdded classes/structs: OvrDevice, HandsState, HeadsetState.\r\nThe following classes/structs were added in Framework.Input.Oculus:\r\nTouchController, TouchControllerState, TouchControllerType, TouchButtons, TouchButtonState.\r\n - Complex numbers.\r\nAdded classes/structs/methods: Complex, ComplexWriter, ComplexReader,\r\nVector2.Transform() overloads, \r\nSpriteBatch.Draw() and SpriteBatch.DrawString() overloads.\r\n - The following Classes/Methods are now visible in all platforms.\r\nVideo, VideoPlayer, VideoReader, \r\nOcclusionQuery,\r\nTexture3D, RenderTarget3D, Texture3DReader,\r\nEffectParameter.GetValueTexture3D()\r\n\r\n## 3.8.9100 Release - Aug 11, 2022\r\n\r\n### Fixed\r\n - Fix incremental build of external assets.\r\n - fix MGFXHeader.\r\n - fix EffectProcessor.\r\n - fix Mouse.SetCursor() resource leaks.\r\n - fix memory leak on ContentManager.ReloadGraphicsAssets().\r\n - Fix DrawableGameComponent.Dispose().\r\n - TextureProcessor no longer override existing MipMaps (XNA API compatibility).\r\n - [UAP] fix IsFullScreen. Implement IsFullScreenMode, PreferredLaunchWindowingMode.\r\n - [UAP] fix GamePad race condition.\r\n - fix ContentTypeReaderManager,ResolveType() when running on Core/Net6.\r\n - fix game loop, Reset IsRunningSlowly after 5 frames.\r\n - fix error \"Could not find ContentTypeReader ReflectiveReader<MaterialContent>\".\r\n - fix FBX/OpenAssetImporter TextureCoordinate AddressV mode.\r\n - fix FBX/OpenAssetImporter material.SpecularPower.\r\n - [Android] fix GraphicsDeviceManager.SupportedOrientations and Backbuffer size handling.\r\n - fix SoundEffectInstance, DynamicSoundEffectInstance states (Play/Stop/Pause/Resume).\r\n - fix SoundEffectInstance resource leaks.\r\n - fix DynamicSoundEffectInstance.BufferNeeded.\r\n - [openAL] fix SoundEffectInstance Pan and Apply3D.\r\n - GraphicsDeviceManager will not swap PreferredBackBufferWidth/PreferredBackBufferHeight.\r\n - fix graphics context ApplyState.\r\n - [DirectX] fix RenderTargetCube with depth for Feature level 10_0 and higher.\r\n - fix mgcb output. Some errors are not caught by the mgcb editor.\r\n - mgcb generates output combatible with Visual Studio. mgcb errors and warnings are visible on the Error List panel. \r\n - fix error in FontDescriptionProcessor, throw InvalidContentException instead of InvalidOperationException.\r\n - fix reported shader error/warning line number when #include files are used.\r\n - fix pipeline error due to missing redistributable msvcr110.dll.\r\n\r\n### Performance\r\n - [DesktopDX] reduce WinForms garbage from EventArgs.\r\n - optimize Intersects BoundingBox vs BoundingSphere.\r\n - optimize BoundingBox.CreateFromPoints().\r\n - precalculate Glyph TexCoord (SpriteBatch).\r\n - optimize Viewport Project()/Unproject().\r\n - [DirectX] grow internal buffers in chunks.\r\n - fast IntermediateSerializer.FindType().\r\n - Reduce garbage in EffectResource loading.\r\n - TouchCollection with Fixed Size array. Doesn't allocate memory/generate garbage. \r\n - [DesktopDX] reduce WinForms keyboard garbage from EventArgs.\r\n - [DirectX] optimized spriteBatcher. Two phase batching with buffers.\r\n - [DirectX] optimized spriteBatcher. Write vertices directly to the Mapped Buffer.\r\n - improved gameLoop.\r\n - [DirectX] optimized Texture2D.GetData() when (rowPitch != 0).\r\n - reduce garbage from GameWindow.TextInput, GameWindow.KeyUp, GameWindow.KeyDown events.\r\n - [Android] reduce garbage in ContentManager.Load<>().\r\n - [ANDROID] Reduce garbage from gameLoop.\r\n - optimized SpriteBatch.End()/Setup(). \r\n - [Audio] Optimize and reduce memory garbage.\r\n - optimize graphics context ApplyState.\r\n - reduced size of TouchLocation. Split TouchLocation/TouchLocationData and other minor optimizations.\r\n   \r\n### Changed\r\n - backward compatible EffectReader (v9,v8).\r\n - no longer applying reordering of content items in .mgcb files.\r\n - ContentManager allow rooted paths on all platforms.\r\n - [UAP] ContentManager throws DirectoryNotFoundException.\r\n - Matrix.CreatePerspective() no longer support infinite far planes.\r\n - Game.Exit() throws InvalidOperationException on platforms that don't allow programmatically exiting the app (Android, iOS).\r\n - [WindowsDX] implement Mouse.WindowHandle.\r\n - Texture2D.FromStream() does no longer cut-off alpha pixels (breaks XNA API).\r\n - GamePadDPad and GamePadState constructors (XNA API compatibility).\r\n - [UWP] Allow BackBuffer Scaling\r\n - [WindowsDX] game will not update during moving/resizing of the window. instead the window gets repainted.\r\n - removed sender parameter from on-event virtual methods (breaks XNA API).\r\nGame.OnExiting(), Game.OnActivated(), Game.OnDeactivated(),\r\nGameComponent.OnUpdateOrderChanged(),  GameComponent.OnEnabledChanged() ,\r\nDrawableGameComponent.OnDrawOrderChanged(), DrawableGameComponent.OnVisibleChanged(). \r\n - in effect templates the GL level is now the same version as DX.\r\n - some Model properties, methods and setters were made internal/private. \r\n - all ContentWriters are now backward compatible with XNA (XNA API compatibility).\r\n - [UAP/Xaml] game loop runs from main thread.\r\n - [DirectAudio] decode invalid MSADPCM during loading.\r\n - [WindowsDX] BaseIndexInstancing is disabled.\r\n - implement Graphic Profiles (Reach & HiDef) (XNA API compatibility).\r\n - implement Extended Graphics profiles (FL10_0,FL10_1,FL11_0,FL11_1).\r\n - The following event arguments were changed to classes inheriting EventArgs.\r\nFileDropEventArgs, InputKeyEventArgs, TextInputEventArgs.\r\n - SpriteFont.Glyphs returns a GlyphCollection.\r\n - [Android] TitleContainer now returns a random access stream.\r\n - [Android] Fine tune resolution for automatic orientation (45 degrees angle).\r\n - [Android] Shockproof automatic orientation (0.5sec delay).\r\n - [Android] Suspend game during a Call (Requires READ_PHONE_STATE permission).\r\n - [Android] Implement Game.IsActive.\r\n - FrameworkDispatcher is no longer a static class (breaks XNA API).\r\n - SoundEffect, SoundEffectInstance, DynamicSoundEffectInstance is now thread safe.\r\n - Audio device might get initialized on demand and shutdown automatically as needed multiple times.\r\n - DynamicSoundEffectInstance.BufferNeeded will not automatically stop firing.\r\n - [GL] Texture2D.SetData(), Texture2D.GetData() no longer work from worker threads.\r\n - GraphicsDeviceManager explicitly implements IGraphicsDeviceManager.\r\n - SpriteFontContent properties, methods and setters were made internal/private.\r\n - Converters under the Framework.Design namespace now convert only to/from String.\r\n - Texture2D.FromStream now use native decoders when posible.\r\n - Net.Framework libraries (DesktopGL, Content.Pipeline) set to target 4.0. \r\n - Net6 libraries DesktopGL & Content.Pipeline set to target netstandard2.0.\r\n \r\n### Added\r\n - Mouse.IsRawInputAvailable, MouseState.RawX, MouseState.RawY.\r\n - Game.IsVisible.\r\n - GraphicsProfile.FL10_0, GraphicsProfile.FL10_1, GraphicsProfile.FL11_0, GraphicsProfile.FL11_1.\r\n - GlyphCollection.\r\n - The following Classes/Methods are now visible (XNA API compatibility).\r\nBoundingSphere.Intersects(BoundingFrustum frustum), Ray.Intersects(BoundingFrustum),\r\nEffectParameter.GetValueBooleanArray(), EffectParameter.GetValueQuaternionArray(),\r\nEffectParameter.SetValue(bool[]), EffectParameter.SetValue(Quaternion[]), EffectParameter.SetValue(string).\r\nGraphicsDevice.Present(Rectangle? , Rectangle? , IntPtr ) \r\n - MediaLibrary.SavePicture() overloads.\r\n - IFrameworkDispatcher, FrameworkDispatcher.Current.\r\n - GraphicsDeviceManager implements Dispose() on all platforms.\r\n - StorageDevice, StorageContainer.\r\n - VectorConverter (XNA API compatibility).\r\n - Blazor/WebGL platform.\r\n - Reference platform.\r\n \r\n### Removed\r\n - System.Numerics.\r\n - ContentProcessorContext.SourceIdentity.\r\n - ContentStats.\r\n - ContentBuildLogger.LoggerRootDirectory, ContentBuildLogger.IndentString.\r\n - ContentManager.Unload().\r\n - Buttons.None.\r\n - TouchPanel.EnableMouseTouchPoint, TouchPanel.EnableMouseGestures.\r\n - Texture2D.FromFile(), DefaultColorProcessors, Texture2D.FromStream(GraphicsDevice, Stream, Action<byte[]>).\r\n - ContentTypeReaderManager.AddTypeCreator(), ContentTypeReaderManager.ClearTypeCreators().\r\n - SpriteFont.Characters, SpriteFont.GetGlyphs(), Glyph.Character.\r\n - MonoGameAndroidGameView.Visible, MonoGameAndroidGameView.Size. \r\n - SoundEffect.FromFile().\r\n - RenderTargetCube.GetRenderTargetView(), RenderTargetCube.GetDepthStencilView() (IRenderTarget methods).\r\n - GrowRule, MaxRectsBin, MaxRectsHeuristic were made internal.\r\n - VectorConversion.\r\n  \r\n## 3.8.1 HOTFIX Release - July 26, 2022\r\n\r\n## What's Changed\r\n - Fix MonoGame publisher name for the VS marketplace by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7847\r\n - Corrected 'Framwork' to 'Framework' by @benjitrosch in https://github.com/MonoGame/MonoGame/pull/7850\r\n - added missing words to platforms.md by @MrGrak in https://github.com/MonoGame/MonoGame/pull/7852\r\n - Fixed grammatical error from 'project' to 'projects' by @benjitrosch in https://github.com/MonoGame/MonoGame/pull/7855\r\n - Grammar Hotfix on README by @Emersont1 in https://github.com/MonoGame/MonoGame/pull/7856\r\n - Remove redundant dependencies by @vpenades in https://github.com/MonoGame/MonoGame/pull/7854\r\n - Fixes Visual Studio freezing with the extension by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7857\r\n - Updated migration guide by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7858\r\n - More migration guide updates by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7859\r\n - Wild cards don't work in dotnet-tools.json by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7860\r\n - Removed explicit global usings by @vpenades in https://github.com/MonoGame/MonoGame/pull/7853\r\n\r\n## 3.8.1 Release - July 24, 2022\r\n\r\n## What's Changed\r\n - Update build version to 3.8.1.xxxx by @tomspilman in https://github.com/MonoGame/MonoGame/pull/7296\r\n - Fix broken links by @rejurime in https://github.com/MonoGame/MonoGame/pull/7297\r\n - [DesktopGL] Fix setting backbuffer size not working in constructor by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7299\r\n - Add quotation marks around MGCBPath by @bjornenalfa in https://github.com/MonoGame/MonoGame/pull/7304\r\n - [Templates] Update FSharp projects by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7302\r\n - fix Texture.GetSharedHandle() by @nkast in https://github.com/MonoGame/MonoGame/pull/7306\r\n - [MGCB Editor] Update registration handling files by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7311\r\n - Updated to the latest version of StbSharp by @rds1983 in https://github.com/MonoGame/MonoGame/pull/7312\r\n - Support MSAA in SwapChainRenderTarget by @nkast in https://github.com/MonoGame/MonoGame/pull/7307\r\n - Updated link for the XNA 3.1 to XNA 4.0 cheatsheet by @SimonDarksideJ in https://github.com/MonoGame/MonoGame/pull/7321\r\n - Updated and added links to latest MonoGame 3.8 content in tutorials.md by @SimonDarksideJ in https://github.com/MonoGame/MonoGame/pull/7322\r\n - Explicitly document BackToFront and FrontToBack use an unstable sort. by @goosenoises in https://github.com/MonoGame/MonoGame/pull/7323\r\n - Update mgfxc_wine_setup.sh by @Kwyrky in https://github.com/MonoGame/MonoGame/pull/7327\r\n - Fix multisampling in DesktopGL by @sk-zk in https://github.com/MonoGame/MonoGame/pull/7338\r\n - [MGCB Editor] macOS fixes by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7337\r\n - Fix shader error messages for OpenGL by @cpt-max in https://github.com/MonoGame/MonoGame/pull/7340\r\n - Added IEffectBones interface, implemented by SkinnedEffect. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7344\r\n - Update NVTT (fixes #5866) by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7354\r\n - Edited the Getting Started parts of the documentation for grammar, clarity, and style by @HopefulFrog in https://github.com/MonoGame/MonoGame/pull/7374\r\n - Updated Matrix.CreatePerspective - to support infinite far planes. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7367\r\n - Add missing underscore in code section by @pbedn in https://github.com/MonoGame/MonoGame/pull/7349\r\n - Update CONTRIBUTING.md by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7394\r\n - Added ICurveEvaluator{T} interface. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7387\r\n - Update Eto.Froms for VS for Mac addin by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7365\r\n - Fix for MGFXO file format to increases collection size limits. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7397\r\n - NUnit Test Attachments To preview Test images in VS. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7413\r\n - [macOS] Properly check current folder if we are inside of .app bundle by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7416\r\n - fix 7402: enqueue buffer ref before sending to OAL by @lodicolo in https://github.com/MonoGame/MonoGame/pull/7403\r\n - Fixes 3D Audio Direction Issues On Platforms Using OpenAL by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7404\r\n - Fixes Stopping Looped Sounds On Platforms Using XAudio by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7405\r\n - Fixes Buffer Bindings Cache Issue On Platforms Using OpenGL by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7406\r\n - Fixes 3D Audio Direction Issues On Platforms Using X3DAudio by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7389\r\n - Proposal for adding basic interoperability with System.Numerics.Vectors by @vpenades in https://github.com/MonoGame/MonoGame/pull/7417\r\n - [VSMac] Mark .spritefont files as .xml files by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7426\r\n - Updated console references by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7432\r\n - Removed residual OUYA references by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7433\r\n - [VSMac] Fix freeze upon opening a mgcb file and bump dependencies by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7435\r\n - [MGCB Editor] Fix help link (fixes #7428) by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7438\r\n - Changed uses of Math to MathF where it was used for floats by @initram in https://github.com/MonoGame/MonoGame/pull/7390\r\n - [MGCB.Task] Separate obj folder per target framework (fixes #7409) by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7441\r\n - Revert \"Changed uses of Math to MathF where it was used for floats\" by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7442\r\n - File drop event on DesktopGL and WindowsDX platforms by @Quant1um in https://github.com/MonoGame/MonoGame/pull/7362\r\n - [MGCB Editor] Bump Eto.Forms version (fixes #7418) by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7439\r\n - Update SDL to 2.0.14 by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7445\r\n - Help with compatibility toward NativeAOT by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7462\r\n - Generic Threading.BlockOnUIThread for reducing garbage allocs by @TechPizzaDev in https://github.com/MonoGame/MonoGame/pull/7384\r\n - Fix UWP Vsync support by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7463\r\n - [DesktopGL] Improve mouse handling outside gamewindow by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7440\r\n - Updated to the latest StbSharp 2.22.5, which added support for HDR images by @rds1983 in https://github.com/MonoGame/MonoGame/pull/7467\r\n - Fix type collisions and default implementations for consoles by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7466\r\n - Removed threading limitations by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7472\r\n - Fixed a typo in the comments. charaters --> characters by @rbwhitaker in https://github.com/MonoGame/MonoGame/pull/7473\r\n - fixed grammar in CONTRIBUTING.md by @algobytewise in https://github.com/MonoGame/MonoGame/pull/7469\r\n - Fixed a small handful of typos in the comments of SpriteFont. by @rbwhitaker in https://github.com/MonoGame/MonoGame/pull/7479\r\n - Update copyright year to 2021 in LICENSE.txt by @monegit in https://github.com/MonoGame/MonoGame/pull/7482\r\n - Fixes PacketNumber For Non-Haptic Gamepads On Platforms Using SDL by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7487\r\n - Fixes Duplicate/Missing Gamepads On Platforms Using SDL by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7486\r\n - Bump GtkSharp to fix crashes on Arch Linux by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7493\r\n - Update NVorbis submodule by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7495\r\n - Added selective ContentManager asset unloading by @kimimaru4000 in https://github.com/MonoGame/MonoGame/pull/6663\r\n - Update Mac Extension Link by @gideongrinberg in https://github.com/MonoGame/MonoGame/pull/7497\r\n - Remove deprecated property Color.TransparentBlack by @nkast in https://github.com/MonoGame/MonoGame/pull/7505\r\n - Remove duplicate check with wrong argument name by @nkast in https://github.com/MonoGame/MonoGame/pull/7504\r\n - fix spelling error by @nkast in https://github.com/MonoGame/MonoGame/pull/7503\r\n - Prevent App suspension when the user press 'B' button on UWP (xbox controller) by @nkast in https://github.com/MonoGame/MonoGame/pull/7500\r\n - fix PipelineBuildEvent deserialization by @nkast in https://github.com/MonoGame/MonoGame/pull/7502\r\n - Support drawing point primitives by @roy-t in https://github.com/MonoGame/MonoGame/pull/7477\r\n - Update samples.md by @Michael1993 in https://github.com/MonoGame/MonoGame/pull/7358\r\n - Merged the two requirements files into the REQUIREMENTS.md by @RicoGuerra in https://github.com/MonoGame/MonoGame/pull/7484\r\n - Upgrade tooling to .NET 5 by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7437\r\n - Upgraded projects and documentation to NET5 by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7514\r\n - Changed Math to MathF by @initram in https://github.com/MonoGame/MonoGame/pull/7451\r\n - Shared MSAA RenderTarget by @nkast in https://github.com/MonoGame/MonoGame/pull/7506\r\n - Added pixels processing function parameter to the Texture2D.FromStream/TextureFromFile by @rds1983 in https://github.com/MonoGame/MonoGame/pull/7369\r\n - Docs/content pipeline update by @SimonDarksideJ in https://github.com/MonoGame/MonoGame/pull/7370\r\n - Don't recompile the same shader multiple times. by @cpt-max in https://github.com/MonoGame/MonoGame/pull/7392\r\n - Update Game.cs by @SAJenkin in https://github.com/MonoGame/MonoGame/pull/7528\r\n - Fix FontDescriptionProcessor kerning by @nkast in https://github.com/MonoGame/MonoGame/pull/7501\r\n - Fix assembly trimming in templates by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7529\r\n - Fixed GLDesktop PlatformStop() resolving issue #7372 by @JacksonDorsett in https://github.com/MonoGame/MonoGame/pull/7453\r\n - Fix VSCode launch configuration for MGCB Editor on Mac by @the-maverick-m in https://github.com/MonoGame/MonoGame/pull/7535\r\n - OpenGL debug context for better error messages by @cpt-max in https://github.com/MonoGame/MonoGame/pull/7536\r\n - cask is no longer a brew command by @miluchen in https://github.com/MonoGame/MonoGame/pull/7543\r\n - Fix iOS GamePlatform to run pending background tasks #7520 by @Mindfulplays in https://github.com/MonoGame/MonoGame/pull/7522\r\n - Removed PS Vita support by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7531\r\n - Optimized ApplyAlpha by removing two unnecessary arithmetic operations by @rds1983 in https://github.com/MonoGame/MonoGame/pull/7555\r\n - [Feature] GitHub Actions integration by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7511\r\n - [Content Pipeline] Fix library names when packaging the nuget by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7557\r\n - Null song parameters for MediaPlayer.Play are not allowed in XNA by @james0x0A in https://github.com/MonoGame/MonoGame/pull/7558\r\n - Fixes XACT ADPCM Compression Playback by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7564\r\n - Fixes XACT Cue.IsPlaying Behaviour When Paused by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7563\r\n - Fixes EffectParameter SetValue Using Int For Float Parameters by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7568\r\n - Added a keyboard shortcut (F2) to rename a file. by @rbwhitaker in https://github.com/MonoGame/MonoGame/pull/7575\r\n - Fix NRE for Game._gameTimer by @JacksonDorsett in https://github.com/MonoGame/MonoGame/pull/7587\r\n - Enable setting 8 render targets when targetting Windows by @bjornenalfa in https://github.com/MonoGame/MonoGame/pull/7549\r\n - Fixed Comment for Intersects Method by @JacksonDorsett in https://github.com/MonoGame/MonoGame/pull/7592\r\n - remove unused usings from Content readers by @nkast in https://github.com/MonoGame/MonoGame/pull/7595\r\n - remove CLSCompliant(false) from internal members by @nkast in https://github.com/MonoGame/MonoGame/pull/7594\r\n - remove unused reader/writer classes by @nkast in https://github.com/MonoGame/MonoGame/pull/7597\r\n - Added PlayStation 5 support by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7645\r\n - Fix back and start buttons on iOS by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7694\r\n - Update stuff to .NET 6 by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7688\r\n - net6 mobile and UWP fixes by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7697\r\n - Fixed a broken link in custom_effects docs. by @davidhesselbom in https://github.com/MonoGame/MonoGame/pull/7663\r\n - terminology, spelling & grammar corrections by @mikeirvingweb in https://github.com/MonoGame/MonoGame/pull/7657\r\n - Fix comment typos in enum GestureType by @Brett208 in https://github.com/MonoGame/MonoGame/pull/7658\r\n - Update SDL_GameControllerDB by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7702\r\n - Console check fake project by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7698\r\n - Improve GamePad support on macOS and introduce support for rumble by @carlfriess in https://github.com/MonoGame/MonoGame/pull/7690\r\n - Fix mgcb building content during nuget package restore by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7709\r\n - Visual Studio 2022 Extension for templates by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7699\r\n - Fix up mgcb-editor dotnet tool by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7708\r\n - Optimized SpriteFont GlyphPacker by @TechPizzaDev in https://github.com/MonoGame/MonoGame/pull/7464\r\n - Add thread locking to the UWP gamepads dictionary by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7655\r\n - Multisampling on Android by @j0nat in https://github.com/MonoGame/MonoGame/pull/7561\r\n - proposal: additional vertex structs by @lodicolo in https://github.com/MonoGame/MonoGame/pull/7421\r\n - Fixes UWP Set Window Size Thread Access Error by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7570\r\n - Fix templates for VS for Mac 2022 by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7764\r\n - Fix memory leak on desktop gl static variable by @adnanioricce in https://github.com/MonoGame/MonoGame/pull/7684\r\n - Make the VS extension to open .mgcb by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7765\r\n - Fix broken links to Extended samples in docs by @NogginBox in https://github.com/MonoGame/MonoGame/pull/7767\r\n - RTL text rendering overload for SpriteBatch.DrawString by @BlueElectivire in https://github.com/MonoGame/MonoGame/pull/7644\r\n - fix GamePad.GetCapabilities(...) race codition by @nkast in https://github.com/MonoGame/MonoGame/pull/7770\r\n - Update templates by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7771\r\n - Build system upgrades by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7772\r\n - Add automatic upload of artifacts to GitHub packages by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7773\r\n - [Actions] Use GITHUB_TOKEN for deploy job by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7775\r\n - Fix obsolete call on iOS by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7777\r\n - Fix SoundEffectInstance pooling by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7776\r\n - Update wine script for NET 6 by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7790\r\n - Auto versioning of VS extension by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7788\r\n - Added RollForward directive by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7789\r\n - Cleaned up rollforward from mobiles by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7791\r\n - Remove default Inner Exceptions by @nkast in https://github.com/MonoGame/MonoGame/pull/7800\r\n - fix list of supported surfaces by @nkast in https://github.com/MonoGame/MonoGame/pull/7801\r\n - Update submodules by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7806\r\n - Add Buttons.None by @TimerbaevRR in https://github.com/MonoGame/MonoGame/pull/7818\r\n - Fix Buttons.None by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7822\r\n - [Actions] Fix UWP package path by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7825\r\n - [Actions] Build VS for Mac addin by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7824\r\n - [WIP] Documentation update for 3.8.1 by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7798\r\n - Removed trimming property from templates by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7829\r\n - Create a release when pushing a tag by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7828\r\n\r\n## 3.8 Release - August 10, 2020\r\n\r\n### Added\r\n - New Plane constructor. [#6085](https://github.com/MonoGame/MonoGame/pull/6085)\r\n - Round, Ceiling, Floor functions for Vector2/3/4. [#6318](https://github.com/MonoGame/MonoGame/pull/6318)\r\n - Dotnet templating templates. [#6494](https://github.com/MonoGame/MonoGame/pull/6494)\r\n - TransformMatrix for SpriteEffect. [#6623](https://github.com/MonoGame/MonoGame/pull/6623)\r\n - SpriteBatch constructor overload with capacity parameter. [#6682](https://github.com/MonoGame/MonoGame/pull/6682)\r\n - [OpenGL] Support for separate blend states per render target. [#6343](https://github.com/MonoGame/MonoGame/pull/6343)\r\n - Multiply operator overload for Color: `scale * Color`. [#6747](https://github.com/MonoGame/MonoGame/pull/6747)\r\n - Overloads for garbageless BoundingBox.CreateFromPoints. [#6743](https://github.com/MonoGame/MonoGame/pull/6743)\r\n - UseStandardPixelAddressing flag. [#6621](https://github.com/MonoGame/MonoGame/pull/6621) [#6780](https://github.com/MonoGame/MonoGame/pull/6780)\r\n - [MGCB] Search fonts in HKEY_CURRENT_USER on Windows. [#6671](https://github.com/MonoGame/MonoGame/pull/6671)\r\n - Garbageless GetPressedKeys overload. [#6643](https://github.com/MonoGame/MonoGame/pull/6643)\r\n - Expose GraphicsDevice.DiscardColor to set the clear color of render targets. [#6832](https://github.com/MonoGame/MonoGame/pull/6832)\r\n - KeyDown and KeyUp events on GameWindow. [#6762](https://github.com/MonoGame/MonoGame/pull/6762)\r\n - FromFile for Texture2D and SoundEffect. [#6586](https://github.com/MonoGame/MonoGame/pull/6586)\r\n - PlatformInfo class to query runtime platform. [#6846](https://github.com/MonoGame/MonoGame/pull/6846) [#6873](https://github.com/MonoGame/MonoGame/pull/6873)\r\n - API to query graphical system at runtime. [#6872](https://github.com/MonoGame/MonoGame/pull/6872)\r\n - Etc2 texture format support. [#6864](https://github.com/MonoGame/MonoGame/pull/6864)\r\n - MonoGame.Content.Builder package. [#6905](https://github.com/MonoGame/MonoGame/pull/6905)\r\n - τ constant. [#6937](https://github.com/MonoGame/MonoGame/pull/6937)\r\n - [UWP] Overloads for more detailed vibration control. [#6933](https://github.com/MonoGame/MonoGame/pull/6933)\r\n - [MGCB Editor] Always use Headerbar. [#6938](https://github.com/MonoGame/MonoGame/pull/6938)\r\n - Joystick display name for the Joystick API. [#7008](https://github.com/MonoGame/MonoGame/pull/7008)\r\n - [OpenGL] Overload with base index for draw instancing. [#7016](https://github.com/MonoGame/MonoGame/pull/7016)\r\n - Google Stadia Support. [#7020](https://github.com/MonoGame/MonoGame/pull/7020) [#7049](https://github.com/MonoGame/MonoGame/pull/7049)\r\n - LastJoystickIndex for the Joystick API. [#7017](https://github.com/MonoGame/MonoGame/pull/7017)\r\n - MouseState.ToString. [#7091](https://github.com/MonoGame/MonoGame/pull/7091)\r\n - [MGCB Editor] .NET Core tool. [#7090](https://github.com/MonoGame/MonoGame/pull/7090)\r\n - [MGFXC] Wine support. [#7098](https://github.com/MonoGame/MonoGame/pull/7098) [#7103](https://github.com/MonoGame/MonoGame/pull/7103) [#7107](https://github.com/MonoGame/MonoGame/pull/7107) [#7188](https://github.com/MonoGame/MonoGame/pull/7188)\r\n - EffectParameter.SetValue for int array. [#7143](https://github.com/MonoGame/MonoGame/pull/7143)\r\n - Add Web platform information to the content builder. [#7144](https://github.com/MonoGame/MonoGame/pull/7144)\r\n - [macOS] MonoGame Content pad for VS for Mac. [#7266](https://github.com/MonoGame/MonoGame/pull/7266)\r\n\r\n### Removed\r\n - Remove obsolete SpriteBatch.Draw overload. [#6818](https://github.com/MonoGame/MonoGame/pull/6818)\r\n - Disable Piranha portable build. [#6844](https://github.com/MonoGame/MonoGame/pull/6844)\r\n - Removed MonoGame.Framework.Net. [#6900](https://github.com/MonoGame/MonoGame/pull/6900) [#6775](https://github.com/MonoGame/MonoGame/pull/6775)\r\n - Remove internal PNG Utility Classes. [#6976](https://github.com/MonoGame/MonoGame/pull/6976)\r\n - Protobuild removed and replaced with solutions and projects. [#7040](https://github.com/MonoGame/MonoGame/pull/7040) [#7041](https://github.com/MonoGame/MonoGame/pull/7041)\r\n\r\n### Changed\r\n - OpenAssetImporter Improvements and FbxImporter Unit Tests. [#6158](https://github.com/MonoGame/MonoGame/pull/6158)\r\n - Made sound system optional. [#6629](https://github.com/MonoGame/MonoGame/pull/6629)\r\n - [UWP] Do not set minimum window size. [#6763](https://github.com/MonoGame/MonoGame/pull/6763)\r\n - Added Cake build script to replace NANT. [#6776](https://github.com/MonoGame/MonoGame/pull/6776)\r\n - Marked Color.TransparentBlack obsolete. [#6817](https://github.com/MonoGame/MonoGame/pull/6817)\r\n - [SDL] Performance and garbage optimizations to Joystick. [#6829](https://github.com/MonoGame/MonoGame/pull/6829) [#6834](https://github.com/MonoGame/MonoGame/pull/6834)\r\n - Track GamePad packet number and general optimizations. [#6760](https://github.com/MonoGame/MonoGame/pull/6760)\r\n - [DirectX] Basic performance enhancements to Texture2D. [#6726](https://github.com/MonoGame/MonoGame/pull/6726)\r\n - Inline Vector2 operator / and Point.ToVector2(). [#6700](https://github.com/MonoGame/MonoGame/pull/6700)\r\n - Make OggStreamer thread a background thread. [#6848](https://github.com/MonoGame/MonoGame/pull/6848)\r\n - Made it so Texture2D in any format could be saved as Png/Jpeg when using MonoGame.DesktopGL backend. [#6855](https://github.com/MonoGame/MonoGame/pull/6855)\r\n - Upgrade SDK projects to .NET 4.5.2. [#6902](https://github.com/MonoGame/MonoGame/pull/6902)  [#6903](https://github.com/MonoGame/MonoGame/pull/6903) [#7050](https://github.com/MonoGame/MonoGame/pull/7050)\r\n - Reduced garbage in Direct X-specific SetRenderTargets methods. [#7034](https://github.com/MonoGame/MonoGame/pull/7034)\r\n - MouseState Improvements. [#6973](https://github.com/MonoGame/MonoGame/pull/6973)\r\n - KeyboardState Improvements. [#6972](https://github.com/MonoGame/MonoGame/pull/6972)\r\n - [SDL] Updated controller DB. [#7124](https://github.com/MonoGame/MonoGame/pull/7124)\r\n - We now pool ContentManager scratch buffers. [#5921](https://github.com/MonoGame/MonoGame/pull/5921)\r\n - [OpenAL] Clean up sound disposal. [#7097](https://github.com/MonoGame/MonoGame/pull/7097)\r\n - [macOS] Replaced System.Drawing with StbImageSharp to enable tests. [#7071](https://github.com/MonoGame/MonoGame/pull/7071)\r\n - [Docs] Moved to DocFX v2 for documentation. [#7127](https://github.com/MonoGame/MonoGame/pull/7127)\r\n - [SDL] Bump dependencies to SDL 2.0.12. [#7133](https://github.com/MonoGame/MonoGame/pull/7133)\r\n - [Docs] Update for 3.8. [#7117](https://github.com/MonoGame/MonoGame/pull/7117) [#7240](https://github.com/MonoGame/MonoGame/pull/7240)\r\n - [MGCB Editor] Changed position for context menu item Rebuild. [#7176](https://github.com/MonoGame/MonoGame/pull/7176)\r\n - [MGCB] Replace symbols for assembly references. [#7272](https://github.com/MonoGame/MonoGame/pull/7272)\r\n\r\n### Fixed\r\n - Support arrays > 255 elements in shaders. [#5995](https://github.com/MonoGame/MonoGame/pull/5995)\r\n - [DesktopGL] Fix setting mouse cursor from Texture2D. [#6187](https://github.com/MonoGame/MonoGame/pull/6187)\r\n - Remove trailing NUL chars in registry font name. [#6577](https://github.com/MonoGame/MonoGame/pull/6577)\r\n - [OpenAL] Fix loading OpenAL-Soft in DesktopGL when # is in path. [#6581](https://github.com/MonoGame/MonoGame/pull/6581)\r\n - [WindowsDX] Avoid freezing while moving/resizing window. [#6594](https://github.com/MonoGame/MonoGame/pull/6594)\r\n - [iOS] Fixed background music stopping on game startup. [#6596](https://github.com/MonoGame/MonoGame/pull/6596)\r\n - Fixed GameUpdateRequiredException namespace. [#6597](https://github.com/MonoGame/MonoGame/pull/6597)\r\n - [MGCB] Fixed build not cleaning empty projects. [#6615](https://github.com/MonoGame/MonoGame/pull/6615)\r\n - Reduce garbage from TextInput. [#6664](https://github.com/MonoGame/MonoGame/pull/6664)\r\n - Fix for loading native libraries on Amazon Fire HD 8. [#6677](https://github.com/MonoGame/MonoGame/pull/6677)\r\n - Fixes reflection support on SpriteBatch ctor. [#6709](https://github.com/MonoGame/MonoGame/pull/6709)\r\n - [Android] Fixed crashes on launch and resume. [#6741](https://github.com/MonoGame/MonoGame/pull/6741)\r\n - [Android] Fixed restoration of an activity after Game.Exit. [#6739](https://github.com/MonoGame/MonoGame/pull/6739)\r\n - [SDL] Fix rumble infinity threshold. [#6744](https://github.com/MonoGame/MonoGame/pull/6744)\r\n - [SDL] Fixed OnTextInput. [#6749](https://github.com/MonoGame/MonoGame/pull/6749)\r\n - Move touches are now aged too. (fixes #6753). [#6756](https://github.com/MonoGame/MonoGame/pull/6756)\r\n - [Android] Fixed Texture2D.GetData corrupting the Texture2D object. [#6729](https://github.com/MonoGame/MonoGame/pull/6729)\r\n - [MGCB Editor] Fix assembly load API used for custom user references. [#6770](https://github.com/MonoGame/MonoGame/pull/6770)\r\n - Fix nuget metadata URL properties. [#6774](https://github.com/MonoGame/MonoGame/pull/6774)\r\n - Fix IRenderTarget comments. [#6785](https://github.com/MonoGame/MonoGame/pull/6785)\r\n - Catch ArgumentException when trying to get encoding upon PipelineController.DoBuild. [#6826](https://github.com/MonoGame/MonoGame/pull/6826)\r\n - [OpenAL] Free source when sound instance is disposed. [#6813](https://github.com/MonoGame/MonoGame/pull/6813)\r\n - Use Resume when Play is called on Paused sound effect instance. [#6815](https://github.com/MonoGame/MonoGame/pull/6815)\r\n - Fixed BoundingSphere.Intersects(BoundingBox). [#6666](https://github.com/MonoGame/MonoGame/pull/6666)\r\n - Override Dispose in DrawableGameComponent to unload content. [#6858](https://github.com/MonoGame/MonoGame/pull/6858)\r\n - Fixed SwapChain is null in GraphicsDevice.PlatformDispose. [#6869](https://github.com/MonoGame/MonoGame/pull/6869)\r\n - Swap red and blue when setting mouse cursor texture. [#6859](https://github.com/MonoGame/MonoGame/pull/6859)\r\n - [DesktopGL] Fix IsActive not getting set to false. [#6895](https://github.com/MonoGame/MonoGame/pull/6895)\r\n - Fix FileHelpers Uri getting confused by double slashes. [#6924](https://github.com/MonoGame/MonoGame/pull/6924)\r\n - [UWP] Vibrate controller handles instead of triggers. [#6933](https://github.com/MonoGame/MonoGame/pull/6933)\r\n - Fix for CoreRT support. [#6948](https://github.com/MonoGame/MonoGame/pull/6948)\r\n - Fix a crash on macOS and CoreRT related to mishandling unmanaged function pointers. [#6949](https://github.com/MonoGame/MonoGame/pull/6949)\r\n - [MGCB] Rethrow InvalidContentException for Importers instead of wrapping it in a new PipelineException. [#6954](https://github.com/MonoGame/MonoGame/pull/6954)\r\n - Throw InvalidContentException with error line number/position in ContentIdentity. [#6953](https://github.com/MonoGame/MonoGame/pull/6953)\r\n - Fall back to less precise frame pacing on non-Windows platforms. [#6941](https://github.com/MonoGame/MonoGame/pull/6941)\r\n - [UWP] Fixes content loading to work with packaged files (and not just resources). [#6964](https://github.com/MonoGame/MonoGame/pull/6964)\r\n - [UWP] Fixes window resizing upon GraphicsDeviceManager.ApplyChanges(). [#6964](https://github.com/MonoGame/MonoGame/pull/6964)\r\n - [Android] fix GamePad.Back emulation. [#6951](https://github.com/MonoGame/MonoGame/pull/6951)\r\n - [Android] Fixes android APIs fallback. [#6952](https://github.com/MonoGame/MonoGame/pull/6952)\r\n - Fixed sample count in SoundEffect. [#6996](https://github.com/MonoGame/MonoGame/pull/6996)\r\n - [SDL] Fixed memory leak in controller mapping by freeing the returned string. [#7021](https://github.com/MonoGame/MonoGame/pull/7021)\r\n - [macOS] Look for native libraries in Frameworks folder for .app bundles. [#7022](https://github.com/MonoGame/MonoGame/pull/7022)\r\n - [OpenGL] Fixed PlatformClear and PlatformPresent to be private in GraphicsDevice. [#7026](https://github.com/MonoGame/MonoGame/pull/7026)\r\n - [DesktopGL] Fixed GraphicsAdapter.Description to return renderer. [#6959](https://github.com/MonoGame/MonoGame/pull/6959)\r\n - [OpenGL] Query correct value for the bounds to GL.ActiveTexture. [#6970](https://github.com/MonoGame/MonoGame/pull/6970)\r\n - Fix Content.mgcb not being visible in VS 2019. [#7064](https://github.com/MonoGame/MonoGame/pull/7064)\r\n - [iOS] Fix initialization crash on GLES 2.0 devices. [#7047](https://github.com/MonoGame/MonoGame/pull/7047)\r\n - [iOS] Fix GL error and race condition. [#7073](https://github.com/MonoGame/MonoGame/pull/7073)\r\n - [MGCB Editor] Mac fixes. [#7077](https://github.com/MonoGame/MonoGame/pull/7077)\r\n - [OpenAL] Fixing audio duplicating sourceids. [#7095](https://github.com/MonoGame/MonoGame/pull/7095)\r\n - [MGCB] Fix FindCommand not looking system locations on macOS/Linux. [#7100](https://github.com/MonoGame/MonoGame/pull/7100)\r\n - Fix FuncLoader not properly checking the current folder (fixes #7101). [#7102](https://github.com/MonoGame/MonoGame/pull/7102)\r\n - Fix .NET Standard template using wrong nuget. [#7099](https://github.com/MonoGame/MonoGame/pull/7099)\r\n - [DirectX] Fixed MSAA RenderTarget GetData and SetData. [#5838](https://github.com/MonoGame/MonoGame/pull/5838)\r\n - Fixed deconstruction of color for bytes and floats. [#7109](https://github.com/MonoGame/MonoGame/pull/7109)\r\n - [MGCB] Fix failing to find ffmpeg because it tries relative path. [#7138](https://github.com/MonoGame/MonoGame/pull/7138)\r\n - [MGFXC] Various fixes. [#7148](https://github.com/MonoGame/MonoGame/pull/7148)\r\n - Fixed a bug where The \"New Item\" dialogue would have no templates listed. [#7141](https://github.com/MonoGame/MonoGame/pull/7141)\r\n - [MGCB Editor] Darken text in output. [#7163](https://github.com/MonoGame/MonoGame/pull/7163)\r\n - [MGCB] Fix trying to chmod root files. [#7183](https://github.com/MonoGame/MonoGame/pull/7183)\r\n - [MGCB Editor] Fixed to not require root privileges for installing. [#7185](https://github.com/MonoGame/MonoGame/pull/7185)\r\n - [SDL] Better debugging for macOS. [#7187](https://github.com/MonoGame/MonoGame/pull/7187)\r\n - Fixed content failing to load on NetCore. [#7199](https://github.com/MonoGame/MonoGame/pull/7199)\r\n - [MGCB Editor] Fix parsing filename from arguments on macOS. [#7215](https://github.com/MonoGame/MonoGame/pull/7215)\r\n - [Linux] Flatpak packaging upgrades. [#7224](https://github.com/MonoGame/MonoGame/pull/7224)\r\n - Fix path in RebuildMGFX.bat. [#7239](https://github.com/MonoGame/MonoGame/pull/7239)\r\n - [DirectX] Fix issues with RenderTexture2D and SwapChainRenderTarget. [#7225](https://github.com/MonoGame/MonoGame/pull/7225)\r\n - [macOS] VSMac addin fixes. [#7253](https://github.com/MonoGame/MonoGame/pull/7253)\r\n - [MGCB Editor] PropertyGrid fixes. [#7256](https://github.com/MonoGame/MonoGame/pull/7256)\r\n - [MGCB Editor] General fixes. [#7262](https://github.com/MonoGame/MonoGame/pull/7262)\r\n - Fix a race condition when playing sound in worker threads. [#7219](https://github.com/MonoGame/MonoGame/pull/7219)\r\n - [Android] Fixed surface recreation when resuming from sleep mode on FireTV. [#7211](https://github.com/MonoGame/MonoGame/pull/7211)\r\n - Fix loading of content with special characters in a file name. [#7267](https://github.com/MonoGame/MonoGame/pull/7267)\r\n\r\n\r\n## 3.7.1 Release - December 8, 2018\r\n\r\n - MGCB now generates content building statistics. [#6401](https://github.com/MonoGame/MonoGame/pull/6401)\r\n - Fixes to dependency loading in Pipeline Tool. [#6450](https://github.com/MonoGame/MonoGame/pull/6450)\r\n - Fixed crash when canceling choose folder dialog in Pipeline Tool. [#6449](https://github.com/MonoGame/MonoGame/pull/6449)\r\n - Fix add item dialog jumping around in Pipeline Tool. [#6451](https://github.com/MonoGame/MonoGame/pull/6451)\r\n - Fix OpenAL library loading on some Android phones. [#6454](https://github.com/MonoGame/MonoGame/pull/6454)\r\n - Fix Gamepad index tracking under UWP. [#6456](https://github.com/MonoGame/MonoGame/pull/6456)\r\n - Rename \"Copy Asset Path\" to \"Copy Asset Name\" for consistency with XNA in Pipeline Tool. [#6457](https://github.com/MonoGame/MonoGame/pull/6457)\r\n - Fix TextInput Keys argument for UWP. [#6455](https://github.com/MonoGame/MonoGame/pull/6455)\r\n - Add new GamePad.GetState() overloads to support different dead zone modes. [#6467](https://github.com/MonoGame/MonoGame/pull/6467)\r\n - Fixed incorrect offset DynamicSoundEffectInstance.SubmitBuffer under XAudio. [#6523](https://github.com/MonoGame/MonoGame/pull/6523)\r\n - Improved accuracy of fixed time step. [#6535](https://github.com/MonoGame/MonoGame/pull/6535)\r\n - Ensure intermediate output path exists before writing stats in Pipeline Tool. [#6503](https://github.com/MonoGame/MonoGame/pull/6503)\r\n - Fix for special window close case under SDL. [#6489](https://github.com/MonoGame/MonoGame/pull/6489)\r\n - Marshal microphone identifiers as UTF-8. [#6530](https://github.com/MonoGame/MonoGame/pull/6530)\r\n - Clear the current selections when excluding items in the Pipeline Tool. [#6549](https://github.com/MonoGame/MonoGame/pull/6549)\r\n - Enable standard derivatives extension for GLSL shaders. [#6501](https://github.com/MonoGame/MonoGame/pull/6501)\r\n - Fixed framebuffer object EXT loading under OpenGL. [#6562](https://github.com/MonoGame/MonoGame/pull/6562)\r\n - Fixed GL.RenderbufferStorage for devices that use the EXT entry points. [#6563](https://github.com/MonoGame/MonoGame/pull/6563)\r\n - Fix VS template installation when C# folder is missing. [#6544](https://github.com/MonoGame/MonoGame/pull/6544)\r\n - Fix for SDL loading when a '#' is in the directory path. [#6573](https://github.com/MonoGame/MonoGame/pull/6573)\r\n - Restored Buttons[] constructor in GamePadState fixing XNA compatibility. [#6572](https://github.com/MonoGame/MonoGame/pull/6572)\r\n\r\n\r\n## 3.7 Release - September 23, 2018\r\n\r\n - Remove Scale and Rotation properties from Matrix. [#5584](https://github.com/MonoGame/MonoGame/pull/5584)\r\n - Added Switch as a platform. [#5596](https://github.com/MonoGame/MonoGame/pull/5596)\r\n - DirectX: Fixed multisample clamping logic. [#5477](https://github.com/MonoGame/MonoGame/pull/5477)\r\n - SDL Gamepad DB update. [#5605](https://github.com/MonoGame/MonoGame/pull/5605)\r\n - Add Missing method OpaqueDataDictionary.GetValue. [#5637](https://github.com/MonoGame/MonoGame/pull/5637)\r\n - Increase code coverage in Model* family. [#5632](https://github.com/MonoGame/MonoGame/pull/5632)\r\n - Fix scroll wheel events on Windows Universal. [#5631](https://github.com/MonoGame/MonoGame/pull/5631)\r\n - Implement GetHashCode on Vertex types. [#5654](https://github.com/MonoGame/MonoGame/pull/5654)\r\n - Implement GetHashCode and ToString methods for Joystick. [#5670](https://github.com/MonoGame/MonoGame/pull/5670)\r\n - Fixed Gamepad DPad on Android. [#5673](https://github.com/MonoGame/MonoGame/pull/5673)\r\n - Pipeline process not terminating on exit fix. [#5672](https://github.com/MonoGame/MonoGame/pull/5672)\r\n - Added Joystick.IsSupported property. [#5678](https://github.com/MonoGame/MonoGame/pull/5678)\r\n - Use GraphicsCapabilities.MaxTextureAnisotropy on SamplerState. [#5676](https://github.com/MonoGame/MonoGame/pull/5676)\r\n - Make SpriteBatch.End throw when Begin not called. [#5689](https://github.com/MonoGame/MonoGame/pull/5689)\r\n - Add Open Output Directory option to Pipeline Tool. [#5690](https://github.com/MonoGame/MonoGame/pull/5690)\r\n - Rename Exit to Quit on Pipeline Tool Linux Headerbar. [#5687](https://github.com/MonoGame/MonoGame/pull/5687)\r\n - Added minimum size to the Pipeline Tool window. [#5692](https://github.com/MonoGame/MonoGame/pull/5692)\r\n - Added Id and DisplayName properties to Gamepad. [#5625](https://github.com/MonoGame/MonoGame/pull/5625)\r\n - Improved GameController database loading for DesktopGL. [#5606](https://github.com/MonoGame/MonoGame/pull/5606)\r\n - RPC curves are now updated before Cue is played. [#5709](https://github.com/MonoGame/MonoGame/pull/5709)\r\n - Fixes to Texture2D.FromStream on Windows DirectX. [#5712](https://github.com/MonoGame/MonoGame/pull/5712)\r\n - Support DistanceScale and DopplerFactor under OpenAL. [#5718](https://github.com/MonoGame/MonoGame/pull/5718)\r\n - Implemented Microphone for OpenAL platforms. [#5651](https://github.com/MonoGame/MonoGame/pull/5651)\r\n - Implemented caching of staging resources used to copy data from a Texture2D under DirectX. [#5704](https://github.com/MonoGame/MonoGame/pull/5704)\r\n - Reusable function for raising events. [#5713](https://github.com/MonoGame/MonoGame/pull/5713)\r\n - Remove reference to SharpDX from project templates. [#5611](https://github.com/MonoGame/MonoGame/pull/5611)\r\n - Improvements to VideoPlayer for Desktop DirectX. [#5737](https://github.com/MonoGame/MonoGame/pull/5737)\r\n - Use SharpDX NuGet packages from our NuGet packages. [#5748](https://github.com/MonoGame/MonoGame/pull/5748)\r\n - Fixed leaks that affected shutting down and recreating GraphicsDevice under DirectX. [#5728](https://github.com/MonoGame/MonoGame/pull/5728)\r\n - Texture2D mipmap generation and population fixes. [#5614](https://github.com/MonoGame/MonoGame/pull/5614)\r\n - Remove SharpDX.RawInput.dll reference from DirectX graphics backend. [#5723](https://github.com/MonoGame/MonoGame/pull/5723)\r\n - New fast Texture2D.FromStream implementation for DesktopGL ported from STB. [#5630](https://github.com/MonoGame/MonoGame/pull/5630)\r\n - Added support DrawInstancedPrimitives on OpenGL platforms. [#4920](https://github.com/MonoGame/MonoGame/pull/4920)\r\n - Fixed mouse touch event to release when mouse moves outside the client area or we loses focus. [#5641](https://github.com/MonoGame/MonoGame/pull/5641)\r\n - Added GraphicsAdapter.UseDebugLayers to enable GPU debug features in release builds. [#5791](https://github.com/MonoGame/MonoGame/pull/5791)\r\n - Fixed DirectX back buffer update when multisampling changes. [#5617](https://github.com/MonoGame/MonoGame/pull/5617)\r\n - Adds Xbox One S controller support to Linux. [#5797](https://github.com/MonoGame/MonoGame/pull/5797)\r\n - Do not allow the Pipeline tool to delete files outside the content folder. [#5820](https://github.com/MonoGame/MonoGame/pull/5820)\r\n - OpenGL Mouse.SetCursor now works with alpha correctly. [#5829](https://github.com/MonoGame/MonoGame/pull/5829)\r\n - Implement Mouse.SetCursor() for Windows. [#5831](https://github.com/MonoGame/MonoGame/pull/5831)\r\n - Fix pre-emptive song finish in OggStreamer. [#5821](https://github.com/MonoGame/MonoGame/pull/5821)\r\n - UWP Templates use target version selected in wizard. [#5819](https://github.com/MonoGame/MonoGame/pull/5819)\r\n - Implement Mouse.WindowHandle under Windows DirectX. [#5816](https://github.com/MonoGame/MonoGame/pull/5816)\r\n - Improve shader error/warning parsing in Pipeline Tool. [#5849](https://github.com/MonoGame/MonoGame/pull/5849)\r\n - Fix crash on multi-editing bool values in Pipeline Tool. [#5859](https://github.com/MonoGame/MonoGame/pull/5859)\r\n - Fixes to XACT sound effect pooling. [#5832](https://github.com/MonoGame/MonoGame/pull/5832)\r\n - Improved disposal of OpenGL resources. [#5850](https://github.com/MonoGame/MonoGame/pull/5850)\r\n - Better support for WAV audio formats in content pipeline and FromStream. [#5750](https://github.com/MonoGame/MonoGame/pull/5750)\r\n - Fix for build hang with no mgcb file in project. [#5886](https://github.com/MonoGame/MonoGame/pull/5886)\r\n - Removed deprecated Rider settings from Linux installer. [#5881](https://github.com/MonoGame/MonoGame/pull/5881)\r\n - Improved performance of SpriteFont.MeasureString() & SpriteBatch.DrawString(). [#5874](https://github.com/MonoGame/MonoGame/pull/5874)\r\n - Sort content when saving MGCB files. [#5930](https://github.com/MonoGame/MonoGame/pull/5930)\r\n - Fix a crash when building content in xbuild. [#5897](https://github.com/MonoGame/MonoGame/pull/5897)\r\n - Fixed back button problems in UWP. [#5810](https://github.com/MonoGame/MonoGame/pull/5810)\r\n - Removed Windows 8.1 and Windows Phone 8.1 support. [#5809](https://github.com/MonoGame/MonoGame/pull/5809)\r\n - Upgrade to SharpDX 4.0.1. [#5949](https://github.com/MonoGame/MonoGame/pull/5949)\r\n - Update the UWP Template to use the Latest SDK. [#5931](https://github.com/MonoGame/MonoGame/pull/5931)\r\n - Fixed the Scissor rect calculation on DesktopGL and OpenGL platforms. [#5977](https://github.com/MonoGame/MonoGame/pull/5977)\r\n - Calculate the Client Bounds a bit later. [#5975](https://github.com/MonoGame/MonoGame/pull/5975)\r\n - Rework Android OpenGL Framebuffer Support. [#5993](https://github.com/MonoGame/MonoGame/pull/5993)\r\n - Implemented GraphicsDevice.GetBackBufferData. [#5114](https://github.com/MonoGame/MonoGame/pull/5114)\r\n - Optimizations to Length and Normalize in Vector3 and Vector4. [#6004](https://github.com/MonoGame/MonoGame/pull/6004)\r\n - Added MGCB man page for Linux. [#5987](https://github.com/MonoGame/MonoGame/pull/5987)\r\n - Included mgcb autocomplete for bash. [#5985](https://github.com/MonoGame/MonoGame/pull/5985)\r\n - Fixed GamePad.SetVibration crash. [#5965](https://github.com/MonoGame/MonoGame/pull/5965)\r\n - Fallback SurfaceFormat for RenderTargets. [#6170](https://github.com/MonoGame/MonoGame/pull/6170)\r\n - Added O(1) EffectParameter lookups by name. [#6146](https://github.com/MonoGame/MonoGame/pull/6146)\r\n - Reduce MouseState garbage in Desktop DirectX. [#6168](https://github.com/MonoGame/MonoGame/pull/6168)\r\n - Made SpriteFont constructor public. [#6126](https://github.com/MonoGame/MonoGame/pull/6126)\r\n - New Template System using Nuget. [#6135](https://github.com/MonoGame/MonoGame/pull/6135)\r\n - Use StbSharp for all Texture2D.FromStream. [#6008](https://github.com/MonoGame/MonoGame/pull/6008)\r\n - Dynamic reference loading in Pipeline Tool. [#6202](https://github.com/MonoGame/MonoGame/pull/6202)\r\n - Fix Pipeline tool to work regardless of Mono changes. [#6197](https://github.com/MonoGame/MonoGame/pull/6197)\r\n - Update Template Icons and Fix Mac Info.plist. [#6209](https://github.com/MonoGame/MonoGame/pull/6209)\r\n - Fix typo in VS2013 Shared Project Template. [#6216](https://github.com/MonoGame/MonoGame/pull/6216)\r\n - Fill up dotnet template info. [#6226](https://github.com/MonoGame/MonoGame/pull/6226)\r\n - Support Mac Unit Tests. [#5952](https://github.com/MonoGame/MonoGame/pull/5952)\r\n - Updated Assimp to latest version. [#6222](https://github.com/MonoGame/MonoGame/pull/6222)\r\n - Make sure that the window titlebar is within screen bounds on DesktopGL. [#6258](https://github.com/MonoGame/MonoGame/pull/6258)\r\n - Fixed trigger/dpad button state and reduced garbage in iOS Gamepad. [#6271](https://github.com/MonoGame/MonoGame/pull/6271)\r\n - Updated Windows Universal Min SDK Versions. [#6257](https://github.com/MonoGame/MonoGame/pull/6257)\r\n - Fix property content serialization detection when using a property named `Item`. [#5996](https://github.com/MonoGame/MonoGame/pull/5996)\r\n - Fix launcher default mimetype in Linux installer. [#6275](https://github.com/MonoGame/MonoGame/pull/6275)\r\n - Restore NVTT. [#6239](https://github.com/MonoGame/MonoGame/pull/6239)\r\n - Support unicode in window title under DesktopGL. [#6335](https://github.com/MonoGame/MonoGame/pull/6335)\r\n - Add crash report window to Pipeline Tool. [#6272](https://github.com/MonoGame/MonoGame/pull/6272)\r\n - Fix linking for copy action in Pipeline Tool. [#6398](https://github.com/MonoGame/MonoGame/pull/6398)\r\n - Implemented KeyboardInput and MessageBox for Windows DX. [#6410](https://github.com/MonoGame/MonoGame/pull/6410)\r\n - Fixed audio interruption bug on iOS. [#6433](https://github.com/MonoGame/MonoGame/pull/6433)\r\n\r\n\r\n## 3.6 Release - February 28, 2017\r\n\r\n - Fixed XML deserialization of Curve type. [#5494](https://github.com/MonoGame/MonoGame/pull/5494)\r\n - Fix #5498 Pipeline Tool template loading on MacOS. [#5501](https://github.com/MonoGame/MonoGame/pull/5501)\r\n - Fix typo in the exclude.addins which cause warnings when installing the Addin in XS. [#5500](https://github.com/MonoGame/MonoGame/pull/5500)\r\n - Added support for arbitrary defines passed to the Effect compiler. [#5496](https://github.com/MonoGame/MonoGame/pull/5496)\r\n - Fixed GraphicsDevice.Present() to check for current render target. [#5389](https://github.com/MonoGame/MonoGame/pull/5389)\r\n - Custom texture compression for SpriteFonts. [#5299](https://github.com/MonoGame/MonoGame/pull/5299)\r\n - Performance improvements to SpriteBatch.DrawString(). [#5226](https://github.com/MonoGame/MonoGame/pull/5226)\r\n - Removed the OUYA platform [#5194](https://github.com/MonoGame/MonoGame/pull/5194)\r\n - Dispose of all graphical resources in unit tests. [#5133](https://github.com/MonoGame/MonoGame/pull/5133)\r\n - Throw NoSuitableGraphicsDeviceException if graphics device creation fails. [#5130](https://github.com/MonoGame/MonoGame/pull/5130)\r\n - Optimized and added additional constructors to Color. [#5117](https://github.com/MonoGame/MonoGame/pull/5117)\r\n - Added SamplerState.TextureFilterMode to correctly support comparison filtering. [#5112](https://github.com/MonoGame/MonoGame/pull/5112)\r\n - Fixed Apply3D() on stereo SoundEffect. [#5099](https://github.com/MonoGame/MonoGame/pull/5099)\r\n - Fixed Effect.OnApply to return void to match XNA. [#5090](https://github.com/MonoGame/MonoGame/pull/5090)\r\n - Fix crash when DynamicSoundEffectInstance not disposed. [#5075](https://github.com/MonoGame/MonoGame/pull/5075)\r\n - Texture2D.FromStream now correctly throws on null arguments. [#5050](https://github.com/MonoGame/MonoGame/pull/5050)\r\n - Implemented GraphicsAdapter for DirectX platforms. [#5024](https://github.com/MonoGame/MonoGame/pull/5024)\r\n - Fixed initialization of GameComponent when created within another GameComponent. [#5020](https://github.com/MonoGame/MonoGame/pull/5020)\r\n - Improved SoundEffect internal platform extendability. [#5006](https://github.com/MonoGame/MonoGame/pull/5006)\r\n - Refactored audio processing for platform extensibility. [#5001](https://github.com/MonoGame/MonoGame/pull/5001)\r\n - Refactored texture processing for platform extensibility. [#4996](https://github.com/MonoGame/MonoGame/pull/4996)\r\n - Refactor ShaderProfile to allow for pipeline extensibility. [#4992](https://github.com/MonoGame/MonoGame/pull/4992)\r\n - Removed unnessasary dictionary lookup for user index buffers for DirectX platforms. [#4988](https://github.com/MonoGame/MonoGame/pull/4988)\r\n - New SetRenderTargets() method which allows for variable target count. [#4987](https://github.com/MonoGame/MonoGame/pull/4987)\r\n - Added support for XACT reverb and filter effects. [#4974](https://github.com/MonoGame/MonoGame/pull/4974)\r\n - Remove array in GamePadDPad constructor. [#4970](https://github.com/MonoGame/MonoGame/pull/4970)\r\n - Updated to the latest version of Protobuild. [#4964](https://github.com/MonoGame/MonoGame/pull/4964)\r\n - Fixed static VBs and IBs on UWP on XB1. [#4955](https://github.com/MonoGame/MonoGame/pull/4955)\r\n - Updated to the latest version of Protobuild. [#4950](https://github.com/MonoGame/MonoGame/pull/4950)\r\n - Update Xamarin Studio addin for latest platform changes. [#4926](https://github.com/MonoGame/MonoGame/pull/4926)\r\n - Replace OpenTK with custom OpenGL bindings [#4874](https://github.com/MonoGame/MonoGame/pull/4874)\r\n - Fix Mouse updating when moving the Window. [#4924](https://github.com/MonoGame/MonoGame/pull/4924)\r\n - Fix incorrect use of startIndex in Texture2D.GetData DX. [#4833](https://github.com/MonoGame/MonoGame/pull/4833)\r\n - Cleanup of AssemblyInfo for framework assembly. [#4810](https://github.com/MonoGame/MonoGame/pull/4810)\r\n - New SDL2 backend for desktop GL platforms. [#4428](https://github.com/MonoGame/MonoGame/pull/4428)\r\n - Two MaterialProcessor properties fixed. [#4746](https://github.com/MonoGame/MonoGame/pull/4746)\r\n - Fixed thumbstick virtual buttons to always use independent axes. [#4742](https://github.com/MonoGame/MonoGame/pull/4742)\r\n - Fixed back buffer MSAA on DirectX platforms. [#4739](https://github.com/MonoGame/MonoGame/pull/4739)\r\n - Added new CHANGELOG.md to project. [#4732](https://github.com/MonoGame/MonoGame/pull/4732)\r\n - Added obsolete attribute and updated documentation. [#4731](https://github.com/MonoGame/MonoGame/pull/4731)\r\n - Fixed layout of UWP windows in VS template to ignore window chrome. [#4727](https://github.com/MonoGame/MonoGame/pull/4727)\r\n - Remove support for reading raw assets through ContentManager. [#4726](https://github.com/MonoGame/MonoGame/pull/4726)\r\n - Implemented DynamicSoundEffectInstance for DirectX and OpenAL platforms. [#4715](https://github.com/MonoGame/MonoGame/pull/4715)\r\n - Removed unused Yeti Mp3 compressor. [#4713](https://github.com/MonoGame/MonoGame/pull/4713)\r\n - MonoGame Portable Assemblies. [#4712](https://github.com/MonoGame/MonoGame/pull/4712)\r\n - Fixed RGBA64 packing and added unit tests. [#4683](https://github.com/MonoGame/MonoGame/pull/4683)\r\n - Fix Gamepad crash when platform doesn't support the amount. [#4677](https://github.com/MonoGame/MonoGame/pull/4677)\r\n - Fixed Song stopping before they are finished on Windows. [#4668](https://github.com/MonoGame/MonoGame/pull/4668)\r\n - Removed the Linux .deb installer. [#4665](https://github.com/MonoGame/MonoGame/pull/4665)\r\n - OpenAssetImporter is now automatically selected for all the formats it supports. [#4663](https://github.com/MonoGame/MonoGame/pull/4663)\r\n - Fixed broken unit tests under Linux. [#4614](https://github.com/MonoGame/MonoGame/pull/4614)\r\n - Split out Title Container into partial classes. [#4590](https://github.com/MonoGame/MonoGame/pull/4590)\r\n - Added Rider Support to Linux installer. [#4589](https://github.com/MonoGame/MonoGame/pull/4589)\r\n - Implement vertexStride in VertexBuffer.SetData for OpenGL. [#4568](https://github.com/MonoGame/MonoGame/pull/4568)\r\n - Performance improvement to SpriteBatch vertex generation. [#4547](https://github.com/MonoGame/MonoGame/pull/4547)\r\n - Optimization of indices initialization in SpriteBatcher. [#4546](https://github.com/MonoGame/MonoGame/pull/4546)\r\n - Optimized ContentReader to decode LZ4 compressed streams directly. [#4522](https://github.com/MonoGame/MonoGame/pull/4522)\r\n - TitleContainer partial class cleanup. [#4520](https://github.com/MonoGame/MonoGame/pull/4520)\r\n - Remove raw asset support from ContentManager. [#4489](https://github.com/MonoGame/MonoGame/pull/4489)\r\n - Initial implementation of RenderTargetCube for OpenGL. [#4488](https://github.com/MonoGame/MonoGame/pull/4488)\r\n - Removed unnecessary platform differences in MGFX. [#4486](https://github.com/MonoGame/MonoGame/pull/4486)\r\n - SoundEffect fixes and tests. [#4469](https://github.com/MonoGame/MonoGame/pull/4469)\r\n - Cleanup FX syntax for shader compiler. [#4462](https://github.com/MonoGame/MonoGame/pull/4462)\r\n - General Improvements to Pipeline Gtk implementation. [#4459](https://github.com/MonoGame/MonoGame/pull/4459)\r\n - ShaderProfile Refactor. [#4438](https://github.com/MonoGame/MonoGame/pull/4438)\r\n - GraphicsDeviceManager partial class refactor. [#4425](https://github.com/MonoGame/MonoGame/pull/4425)\r\n - Remove legacy Storage classes. [#4320](https://github.com/MonoGame/MonoGame/pull/4320)\r\n - Added mipmap generation for DirectX render targets. [#4189](https://github.com/MonoGame/MonoGame/pull/4189)\r\n \r\n\r\n## 3.5.1 Release - March 30, 2016\r\n\r\n - Fixed negative values when pressing up on left thumbstick on Mac.\r\n - Removed exception and just return empty state when requesting an invalid GamePad index.\r\n - Fixed texture processing for 64bpp textures.\r\n - Fixed Texture2D.SaveAsPng on Mac.\r\n\r\n\r\n## 3.5 Release - March 17, 2016\r\n\r\n - Content Pipeline Integration for Xamarin Studio and MonoDevleop on Mac and Linux.\r\n - Automatic inclusion of XNBs into your final project on Mac and Linux.\r\n - Improved Mac and Linux installers.\r\n - Assemblies are now installed locally on Mac and Linux just like they are on Windows.\r\n - New cross-platform \"Desktop\" project where same binary and content will work on Windows, Linux and Mac desktops.\r\n - Better Support for Xamarin.Mac and Xam.Mac.\r\n - Apple TV support (requires to be built from source at the moment).\r\n - Various sound system fixes.\r\n - New GraphicsMetrics API.\r\n - Optimizations to SpriteBatch performance and garbage generation.\r\n - Many improvements to the Pipeline tool: added toolbar, new filtered output view, new templates, drag and drop, and more.\r\n - New GamePad support for UWP.\r\n - Mac and Linux now support Vorbis compressed music.\r\n - Major refactor of texture support in content pipeline.\r\n - Added 151 new unit tests.\r\n - Big improvements to FBX and model content processing.\r\n - Various fixes to XML serialization.\r\n - MediaLibrary implementation for Windows platforms.\r\n - Removed PlayStation Mobile platform.\r\n - Added content pipeline extension template project.\r\n - Support for binding multiple vertex buffers in a draw call.\r\n - Fixed deadzone issues in GamePad support.\r\n - OcclusionQuery support for DX platforms.\r\n - Fixed incorrect z depth in SpriteBatch.\r\n - Lots of OpenTK backend fixes.\r\n - Much improved font processing.\r\n - Added new VertexPosition vertex format.\r\n - Better VS project template installation under Windows.\r\n\r\n\r\n## 3.4 Release - April 29, 2015\r\n\r\n - Removed old XNA content pipeline extensions.\r\n - Added all missing PackedVector types.\r\n - Replacement of old SDL joystick path with OpenTK.\r\n - Added SamplerState.ComparisonFunction feature to DX and OGL platforms.\r\n - Fixed bug where content importers would not be autodetected on upper case file extensions.\r\n - Fixed compatibility with XNA sound effect XNBs.\r\n - Lots of reference doc improvements.\r\n - Added SamplerState.BorderColor feature to DX and OGL platforms.\r\n - Lots of improvements to the Mac, Linux and Windows versions of the Pipeline GUI tool.\r\n - Fixes for bad key mapping on Linux.\r\n - Support for texture arrays on DX platforms.\r\n - Fixed broken ModelMesh.Tag\r\n - VS templates will now only install if VS is detected on your system.\r\n - Added Color.MonoGameOrange.\r\n - Fixed Xact SoundBack loading bug on Android.\r\n - Added support for a bunch of missing render states to MGFX.\r\n - Added support for sRGB texture formats to DX and OGL platforms.\r\n - Added RasterizerState.DepthClipEnable support for DX and OGL platforms.\r\n - New support for the Windows 10 UAP plafform.\r\n - Fixed bug which caused the GamePad left thumbstick to not work correctly.\r\n - Preliminary base classed for future Joystick API.\r\n - Performance improvement on iOS by avoiding unnessasary GL context changes.\r\n - Fixed bug where MediaPlayer volume affected all sounds.\r\n - New XamarinStudio/MonoDevelop Addin for Mac.\r\n - New Mac installer packages.\r\n\r\n\r\n## 3.3 Release - March 16, 2015\r\n\r\n - Support for vertex texture fetch on Windows.\r\n - New modern classes for KeyboardInput and MessageBox.\r\n - Added more validation to draw calls and render states.\r\n - Cleaned up usage of statics to support multiple GraphicsDevice instances.\r\n - Support Window.Position on WindowsGL platform.\r\n - Reduction of redundant OpenGL calls.\r\n - Fullscreen support for Windows DX platform.\r\n - Implemented Texture2D SaveAsPng and SaveAsJpeg for Android.\r\n - Improved GamePad deadzone calculations.\r\n - We now use FFmpeg for audio content building.\r\n - BoundingSphere fixes and optimizations.\r\n - Many improvements to Linux platform.\r\n - Various fixes to FontTextureProcessor.\r\n - New Windows Universal App template for Windows Store and Windows Phone support.\r\n - Many fixes to reduce garbage generation during runtime.\r\n - Adding support for TextureFormatOptions to FontDescriptionProcessor.\r\n - XNA compatibility improvements to FontDescriptionProcessor.\r\n - Resuscitated the unit test framework with 100s of additional unit tests.\r\n - BoundingFrustum fixes and optimizations.\r\n - Added VS2013 project templates.\r\n - Moved to new MonoGame logo.\r\n - Added MSAA render target support for OpenGL platforms.\r\n - Added optional content compression support to content pipeline and runtime.\r\n - TextureCube content reader and GetData fixes.\r\n - New OpenAL software implementation for Android.\r\n - Xact compatibility improvements.\r\n - Lots of Android fixes and improvements.\r\n - Added MediaLibrary implementation for Android, iOS, Windows Phone, and Windows Store.\r\n - Added ReflectiveWriter implementation to content pipeline.\r\n - Fixes to Texture2D.GetData on DirectX platforms.\r\n - SpriteFont rendering performance optimizations.\r\n - Huge refactor of ModelProcessor to be more compatible with XNA.\r\n - Moved NET and GamerServices into its own MonoGame.Framework.Net assembly.\r\n - Runtime support for ETC1 textures for Androud.\r\n - Improved compatibility for FBXImporter and XImporter.\r\n - Multiple SpritBatch compatibility fixes.\r\n - We now use FreeImage in TextureImporter to support many more input formats.\r\n - MGFX parsing and render state improvements.\r\n - New Pipeline GUI tool for managing content projects for Windows, Mac, and Linux desktops.\r\n - New implementation of content pipeline IntermediateSerializer.\r\n - All tools and content pipeline built for 64-bit.\r\n - New documentation system.\r\n - Implement web platform (JSIL) stubs.\r\n - Lots of fixes to PSM.\r\n - Added Protobuild support for project generation.\r\n - Major refactor of internals to better separate platform specific code.\r\n - Added MGCB command line tool to Windows installer.\r\n\r\n\r\n## 3.2 Release - April 7, 2014\r\n\r\n - Implemented missing PackedVector types.\r\n - VS2013 support for MonoGame templates.\r\n - Big improvement to XInput performance on Windows/Windows8.\r\n - Added GameWindow.TextInput event enhancement.\r\n - Added Xamarin.Mac compatability.\r\n - Support for WPF interop under DirectX.\r\n - Enhancement to support multiple GameWindows on Windows under DirectX.\r\n - Various SpriteFont compatibility improvements.\r\n - OpenAL performance/memory/error handling improvements.\r\n - Reduction of Effect runtime memory usage.\r\n - Support for DXT/S3TC textures on Android.\r\n - Touch support on Windows desktop games.\r\n - Added new RenderTarget3D enhancement.\r\n - OUYA gamepad improvements.\r\n - Internal improvements to reduce garbage generation.\r\n - Various windowing fixes for OpenTK on Linux, Mac, and Windows.\r\n - Automatic support for content reloading on resume for Android.\r\n - Support for TextureCube, Texture3D, and RenderTargetCube on DirectX.\r\n - Added TitleContainer.SupportRetina enhancement for loading @2x content.\r\n - Lots of Android/Kindle compatibility fixes.\r\n - Added enhancement GameWindow.IsBorderless.\r\n - OpenGL now supports multiple render targets.\r\n - Game.IsRunningSlowly working accurately to XNA.\r\n - Game tick resolution improvements.\r\n - XACT compatibility improvements.\r\n - Various fixes and improvements to math types.\r\n - DrawUserIndexedPrimitives now works with 32bit indicies.\r\n - GamerServices fixes under iOS.\r\n - Various MonoGame FX improvements and fixes.\r\n - Render target fixes for Windows Phone.\r\n - MediaPlayer/MediaQueue/Song fixes on Windows Phone.\r\n - XNA accuracy fixes to TitleContainer.\r\n - Fixes to SpriteBatch performance and compatibility with XNA.\r\n - Threading fixes around SoundEffectInstance.\r\n - Support for Song.Duration.\r\n - Fixed disposal of OpenGL shader program cache.\r\n - Improved support of PoT textures in OpenGL.\r\n - Implemented missing EffectParameter SetValue/GetValue calls.\r\n - Touch fixes to Windows Phone.\r\n - Fixes to orientation support in iOS.\r\n - Lots of PSM fixes which make it usable for 2D games.\r\n - New Windows desktop platform using DirectX/XAudio.\r\n - Old Windows project renamed WindowsGL.\r\n - Fixed offsetInBytes parameter in IndexBuffer/VertexBuffer SetData.\r\n - Fixed subpixel offset when viewport is changed in OpenGL.\r\n - Tons of content pipeline improvements making it close to complete.\r\n\r\n\r\n## 3.0.1 Release - March 3, 2013\r\n\r\n - Fix template error.\r\n - Fix offsetInBytes parameter in IndexBuffer/VertexBuffer SetData.\r\n - Fixes the scale applied on the origin in SpriteBatch.\r\n - Fixed render targets on WP8.\r\n - Removed minVertexIndex Exception.\r\n - Fixed some threading issues on iOS.\r\n - Use generic link for opening store on iOS.\r\n - Fix Matrix::Transpose.\r\n - Fixed vertexOffset in DrawUserIndexedPrimitives in GL.\r\n - Keys.RightControl/RightShift Support for WinRT.\r\n - Dispose in ShaderProgramCache.\r\n - IsRunningSlowly Fix.\r\n\r\n\r\n## 3.0 Release - January 1, 2013\r\n\r\n - 3D (many thanks to Infinite Flight Studios for the code and Sickhead Games in taking the time to merge the code in).\r\n - New platforms: Windows 8, Windows Phone 8, OUYA, PlayStation Mobile (including Vita).\r\n - Custom Effects.\r\n - PVRTC support for iOS.\r\n - iOS supports compressed Songs.\r\n - Skinned Meshs.\r\n - VS2012 templates.\r\n - New Windows Installer.\r\n - New MonoDevelop Package/AddIn.\r\n - A LOT of bug fixes.\r\n - Closer XNA 4 compatibility.\r\n\r\n\r\n## 2.5.1 Release - June 18, 2012\r\n\r\n - Updated android to use enumerations rather than hardocded ids as part of the Mono for Android 4.2 update.\r\n - Changed the Android video player to make use of the ViewView.\r\n - Corrected namespaces for SongReader and SoundEffectReader.\r\n - Updated the Keyboard mapping for android.\r\n - Added RectangleArrayReader.\r\n - Removed links to the third party GamePadBridge.\r\n - Added some missing mouseState operators.\r\n - Replaced all calls to DateTime.Now with DateTime.UtcNow.\r\n - Fixed SpriteFont rendering (again).\r\n - Added code to correclty dispose of Textures on all platforms.\r\n - Added some fixes for the sound on iOS.\r\n - Adding missing MediaQueue class.\r\n - Fixed Rectangle Intersect code.\r\n - Changed the way UserPrimitives work on windows.\r\n - Made sure the @2x file support on iOS works.\r\n - Updated project templates.\r\n - Added project templates for MacOS.\r\n - Fixed MonoDevelop.MonoGame AddIn so it works on Linux.\r\n \r\n\r\n## 2.5 Release - March 29, 2012\r\n\r\n### Fixes and Features\r\n - Minor fixes to the Networking stack to make it more reliable when looking for games.\r\n - SpriteBatch Fixes including making sure the matrix parameter is applied in both gles 1.1 and gles 2.0.\r\n - Updated IDrawable and IUpdatable interfaces to match XNA 4.0.\r\n - Fixed the Tick method.\r\n - Updated VideoPlayer constructor contract to match XNA 4.0.\r\n - Added Code to Lookup the Host Application Guid for Networking, the guid id is now pulled from the AssemblyInfo.cs if one is present.\r\n - Uses OpenAL on all platforms except Android.\r\n - Added Dxt5 decompression support.\r\n - Improves SpriteFont to conform more closely to XNA 4.0.\r\n - Moved DynamicVertexBuffer and DynamicIndexBuffer into its own files.\r\n\r\n### iOS\r\n - Fixed Console.WriteLine problem.\r\n - Fixed loading of @2x Retina files.\r\n - Fixed Landscape Rendering.\r\n - Fixed Orientations changes correctly animate.\r\n - Fixed Guide.BeginShowKeyboardInput.\r\n - Fixed StorageDevice AOT compile problem.\r\n - Fixed SpriteBatch to respect matrices when drawn.\r\n - Fixed DoubleTap, improves touches in serial Game instances.\r\n - Fixed App startup in non-Portrait orientations.\r\n - Fixed UnauthorizedAccessException using TitleContainer.\r\n - Fixed a runtime JIT error that was occuring with List<AddJournalEntry<T>().\r\n - Guide.ShowKeyboard is not working.\r\n - App Backgrounding has regressed. A patch is already being tested in the develop branch and the fix will be rolled out as part of the v2.5.1.\r\n\r\n### Android\r\n - Project Templates for MonoDevelop.\r\n - Fixed a few issues with Gestures.\r\n - Fixed the name of the assembly to be MonoGame.Framework.Android.\r\n - Fixed a Memory Leak in Texture Loading.\r\n - Force linear filter and clamp wrap on npot textures in ES2.0 on Android.\r\n - Added SetData and GetData support for Texture2D.\r\n - Guide.SignIn picks up the first email account on the phone.\r\n - CatapultWars does not render correctly under gles 1.1.\r\n\r\n### MacOS X\r\n - SoundEffectInstance.Stop now works correctly.\r\n\r\n### Linux\r\n - Project Templates for Visual Studio and MonoDevelop.\r\n - Fixed a bug when loading of Wav files.\r\n\r\n### Windows\r\n - Project Templates for Visual Studio and MonoDevelop.\r\n - Fixed a bug when loading of Wav files.\r\n - Added Game.IsMouseVisible implementation for Windows.\r\n - Guide.SignIn picks up the logged in user.\r\n - Added a new Installer to install the MonoDevelop and / or Visual Studio Templates and binaries.\r\n\r\n\r\n## 2.1 Release - October 28, 2011\r\n\r\n### Features\r\n - Content Manager rewritten to use partial classes and implementation of cached assets that are loaded.  Greatly improves memory footprint.\r\n - Experimental support for GamePads and Joysticks.  Enhancements will be coming to integrate better for developers.\r\n - ContentReader improvements across the board.\r\n - Improved support for XACT audio.\r\n - StarterKits VectorRumble.\r\n\r\n### iOS\r\n - Gesture support has been improved.\r\n - Better support for portrait to landscape rotations.\r\n - Fixed a rendering bug related to upsidedown portrait mode.\r\n - Better WaveBank support.\r\n - The Guide functionality is only available in iOS, for this release.\r\n\r\n### Android\r\n - Updated to support Mono for Android 4.0.\r\n - Improvements to the Orientation Support.\r\n - Changed Sound system to use SoundPool.\r\n - Added Tap and DoubleTap Gesture Support.\r\n\r\n### MacOS X\r\n - A lot of enhancements and fixes for Full Screen and Windowed control.\r\n - Cursor support fixed for IsMouseVisible.\r\n - Implementation of IsActive property and the events Activated and Deactivated.\r\n - First steps of DrawPrimitives, DrawUserPrimitives, DrawIndexedPrimitives.\r\n - Better WaveBank support.\r\n - Support for ApplyChanges() and setting the backbuffer and viewport sizes correctly.\r\n\r\n### Linux\r\n - All new implementation which share quite a bit of code between MacOS X and Windows.\r\n - Added shader support via the Effects class.\r\n\r\n### Windows\r\n - All new implementation which shares quite a bit of code between MacOS and Linux.\r\n\r\n\r\n## 2.0 Release - October 28, 2011\r\n\r\n - Project renamed MonoGame.\r\n - Project moved to GitHub.\r\n - Support for Linux, Mac, Linux, and OpenGL on Windows.\r\n\r\n\r\n## 0.7 Release - December 2, 2009\r\n\r\n - First stable release.\r\n - Originally named XnaTouch.\r\n - iPhone support only.\r\n - 2D rendering support.\r\n - Audio support.\r\n - Networking support.\r\n - Partial multitouch support.\r\n - Partial accelerometer support.\r\n"
  },
  {
    "path": "CODESTYLE.md",
    "content": "> #### NOTE: This code style standard for MonoGame is a work in progress and much of the code does not currently conform to these rules.  This is something that will be addressed by the core team.\n\n# Introduction\nAs the MonoGame project gains more traction and becomes more widely used, we aim to provide a more professional and consistent look to the large amount of source now in the project.  It was a broadly supported decision by the core development team to follow the Microsoft coding guidelines (the default provided in Visual Studio's C# editor).  These coding guidelines listed below are based on a [MSDN blog post](http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx) from 2005 by Brad Abrams describing the internal coding guidelines at Microsoft, with some changes to suit our project.\n# Coding Guidelines\n## Tabs & Indenting\nTab characters (\\0x09) should not be used in code. All indentation should be done with 4 space characters.\n## Bracing\nOpen braces should always be at the beginning of the line after the statement that begins the block. Contents of the brace should be indented by 4 spaces. Single statements do not have braces. For example:\n```\nif (someExpression)\n{\n   DoSomething();\n   DoAnotherThing();\n}\nelse\n   DoSomethingElse();\n```\n\n`case` statements should be indented from the switch statement like this:\n```\nswitch (someExpression) \n{\n   case 0:\n      DoSomething();\n      break;\n\n   case 1:\n      DoSomethingElse();\n      break;\n\n   case 2: \n      {\n         int n = 1;\n         DoAnotherThing(n);\n      }\n      break;\n}\n```\n\nBraces are not used for single statement blocks immediately following a `for`, `foreach`, `if`, `do`, etc. The single statement block should always be on the following line and indented by four spaces. This increases code readability and maintainability.\n```\nfor (int i = 0; i < 100; ++i)\n    DoSomething(i);\n```\n\n## Single line property statements\nSingle line property statements can have braces that begin and end on the same line. This should only be used for simple property statements.  Add a single space before and after the braces.\n```\npublic class Foo\n{\n   int bar;\n\n   public int Bar\n   {\n      get { return bar; }\n      set { bar = value; }\n   }\n}\n```\n\n## Commenting\nComments should be used to describe intention, algorithmic overview, and/or logical flow.  It would be ideal if, from reading the comments alone, someone other than the author could understand a function's intended behavior and general operation. While there are no minimum comment requirements (and certainly some very small routines need no commenting at all), it is best that most routines have comments reflecting the programmer's intent and approach.\n\nComments must provide added value or explanation to the code. Simply describing the code is not helpful or useful.\n```\n    // Wrong\n    // Set count to 1\n    count = 1;\n\n    // Right\n    // Set the initial reference count so it isn't cleaned up next frame\n    count = 1;\n```\n\n### Copyright/License notice\nEach file should start with a copyright notice. This is a short statement declaring the project name and copyright notice, and directing the reader to the license document elsewhere in the project. To avoid errors in doc comment builds, avoid using triple-slash doc comments.\n```\n// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n```\n\n### Documentation Comments\nAll methods should use XML doc comments. For internal dev comments, the `<devdoc>` tag should be used.\n```\npublic class Foo \n{\n    /// <summary>Public stuff about the method</summary>\n    /// <param name=\"bar\">What a neat parameter!</param>\n    /// <devdoc>Cool internal stuff!</devdoc>\n    public void MyMethod(int bar)\n    {\n        ...\n    }\n}\n```\n\n### Comment Style\nThe // (two slashes) style of comment tags should be used in most situations. Wherever possible, place comments above the code instead of beside it.  Here are some examples:\n```\n    // This is required for WebClient to work through the proxy\n    GlobalProxySelection.Select = new WebProxy(\"http://itgproxy\");\n\n    // Create object to access Internet resources\n    WebClient myClient = new WebClient();\n```\n\n## Spacing\nSpaces improve readability by decreasing code density. Here are some guidelines for the use of space characters within code:\n\nDo use a single space after a comma between function arguments.\n```\nConsole.In.Read(myChar, 0, 1);  // Right\nConsole.In.Read(myChar,0,1);    // Wrong\n```\nDo not use a space after the parenthesis and function arguments.\n```\nCreateFoo(myChar, 0, 1)         // Right\nCreateFoo( myChar, 0, 1 )       // Wrong\n```\nDo not use spaces between a function name and parentheses.\n```\nCreateFoo()                     // Right\nCreateFoo ()                    // Wrong\n```\nDo not use spaces inside brackets.\n```\nx = dataArray[index];           // Right\nx = dataArray[ index ];         // Wrong\n```\nDo use a single space before flow control statements.\n```\nwhile (x == y)                  // Right\nwhile(x==y)                     // Wrong\n```\nDo use a single space before and after binary operators.\n```\nif (x == y)                     // Right\nif (x==y)                       // Wrong\n```\nDo not use a space between a unary operator and the operand.\n```\n++i;                            // Right\n++ i;                           // Wrong\n```\nDo not use a space before a semi-colon. Do use a space after a semi-colon if there is more on the same line.\n```\nfor (int i = 0; i < 100; ++i)   // Right\nfor (int i=0 ; i<100 ; ++i)     // Wrong\n```\n\n## Naming\nFollow all .NET Framework Design Guidelines for both internal and external members. Highlights of these include:\n* Do not use Hungarian notation\n* Do use an underscore prefix for member variables, e.g. \"_foo\"\n* Do use camelCasing for member variables (first word all lowercase, subsequent words initial uppercase)\n* Do use camelCasing for parameters\n* Do use camelCasing for local variables\n* Do use PascalCasing for function, property, event, and class names (all words initial uppercase)\n* Do prefix interfaces names with \"I\"\n* Do not prefix enums, classes, or delegates with any letter\n\nThe reasons to extend the public rules (no Hungarian, underscore prefix for member variables, etc.) is to produce a consistent source code appearance. In addition, the goal is to have clean, readable source. Code legibility should be a primary goal.\n\n## File Organization\n* Source files should contain only one public type, although multiple internal types are permitted if required\n* Source files should be given the name of the public type in the file\n* Directory names should follow the namespace for the class after `Framework`. For example, one would expect to find the public class `Microsoft.Xna.Framework.Graphics.GraphicsDevice` in **MonoGame.Framework\\Graphics\\GraphicsDevice.cs**\n* Class members should be grouped logically, and encapsulated into regions (Fields, Constructors, Properties, Events, Methods, Private interface implementations, Nested types)\n* Using statements should be before the namespace declaration.\n```\nusing System;\n\nnamespace MyNamespace \n{\n    public class MyClass : IFoo \n    {\n        #region Fields\n        int foo;\n        #endregion\n\n        #region Properties\n        public int Foo { get { ... } set { ... } }\n        #endregion\n\n        #region Constructors\n        public MyClass()\n        {\n            ...\n        }\n        #endregion\n\n        #region Events\n        public event EventHandler FooChanged { add { ... } remove { ... } }\n        #endregion\n\n        #region Methods\n        void DoSomething()\n        {\n            ...\n        }\n\n        void FindSomething()\n        {\n            ...\n        }\n        #endregion\n\n        #region Private interface implementations\n        void IFoo.DoSomething()\n        {\n            DoSomething();\n        }\n        #endregion\n\n        #region Nested types\n        class NestedType\n        {\n            ...\n        }\n        #endregion\n    }\n}\n```\n\n# Useful Links\n[C# Coding Conventions (MSDN)](http://msdn.microsoft.com/en-us/library/ff926074.aspx)\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to MonoGame\n\nWe're happy that you have chosen to contribute to the MonoGame project.\n\nYou are joining a group of hundreds of volunteers that have helped build MonoGame since 2009.  To organize these efforts, the MonoGame Team has written this simple guide to help you.\n\nPlease read this document completely before contributing.\n\n\n## How To Contribute\n\nMonoGame has a `master` branch for stable releases and a `develop` branch for daily development.  New features and fixes are always submitted to the `develop` branch.\n\nIf you are looking for ways to help, you should start by looking at the [Help Wanted tasks](https://github.com/mono/MonoGame/issues?q=is%3Aissue+is%3Aopen+label%3A%22Help+Wanted%22).  Please let us know if you plan to work on an issue so that others are not duplicating your work.\n\nThe MonoGame project follows standard [GitHub flow](https://guides.github.com/introduction/flow/index.html).  You should learn and be familiar with how to [use Git](https://help.github.com/articles/set-up-git/), how to [create a fork of MonoGame](https://help.github.com/articles/fork-a-repo/), and how to [submit a Pull Request](https://help.github.com/articles/using-pull-requests/).\n\nAfter you submit a PR, the [MonoGame build server](http://teamcity.monogame.net/?guest=1) will build your changes and verify that all tests pass.  Project maintainers and contributors will review your changes and provide constructive feedback to improve your submission.\n\nOnce we are satisfied that your changes are good for MonoGame, we will merge your PR.\n\n\n## Quick Guidelines\n\nHere are a few simple rules and suggestions to remember when contributing to MonoGame.\n\n* :bangbang: **NEVER** commit code that you didn't personally write.\n* :bangbang: **NEVER** use decompiler tools to steal code and submit it as your own work.\n* :bangbang: **NEVER** decompile XNA assemblies and steal Microsoft's copyrighted code.\n* **PLEASE** try to keep your PRs focused on a single topic and of a reasonable size or we may ask you to break it up.\n* **PLEASE** be sure to write simple and descriptive commit messages.\n* **DO NOT** surprise us with new APIs or big new features. Open an issue to discuss your ideas first.\n* **DO NOT** reorder type members as it makes it difficult to compare code changes in a PR.\n* **DO** try to follow our [coding style](CODESTYLE.md) for new code.\n* **DO** give priority to the existing style of the file you're changing.\n* **DO** try to add to our [unit tests](Test) when adding new features or fixing bugs.\n* **DO NOT** send PRs for code style changes or make code changes just for the sake of style.\n* **PLEASE** keep a civil and respectful tone when discussing and reviewing contributions.\n* **PLEASE** tell others about MonoGame and your contributions via social media.\n\n\n## Decompiler Tools\n\nWe prohibit the use of tools like dotPeek, ILSpy, JustDecompiler, or .NET Reflector which convert compiled assemblies into readable code.\n\nThere has been confusion on this point in the past, so we want to make this clear.  It is **NEVER ACCEPTABLE** to decompile copyrighted assemblies and submit that code to the MonoGame project.\n\n* It **DOES NOT** matter how much you change the code.\n* It **DOES NOT** matter what country you live in or what your local laws say.  \n* It **DOES NOT** matter that XNA is discontinued.  \n* It **DOES NOT** matter how small the bit of code you have stolen is.  \n* It **DOES NOT** matter what your opinion of stealing code is.\n\nIf you did not write the code, you do not have ownership of the code and you shouldn't submit it to MonoGame.\n\nIf we find a contribution to be in violation of copyright, it will be immediately removed.  We will bar that contributor from the MonoGame project.\n\n## Code guidelines\n\nDue to limitations on private target platforms, MonoGame enforces the use of C# 5.0 features.\n\nIt is however allowed to use the latest class library, but if contributions make use of classes that are not present in .NET 4.5, it will be required from the contribution to implement backward-compatible switches.\n\nThese limitations should be lifted at some point.\n\n## Licensing\n\nThe MonoGame project is under the [Microsoft Public License](https://opensource.org/licenses/MS-PL) except for a few portions of the code.  See the [LICENSE.txt](LICENSE.txt) file for more details.  Third-party libraries used by MonoGame are under their own licenses.  Please refer to those libraries for details on the license they use.\n\nWe accept contributions in \"good faith\" that it isn't bound to a conflicting license.  By submitting a PR you agree to distribute your work under the MonoGame license and copyright.\n\nTo this end, when submitting new files, include the following in the header if appropriate:\n```csharp\n// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n```\n\n## Need More Help?\n\nIf you need help, please ask questions on our [community forums](http://community.monogame.net/) or come [chat on Gitter](https://gitter.im/mono/MonoGame).\n\n\nThanks for reading this guide and helping make MonoGame great!\n\n :heart: The MonoGame Team\n"
  },
  {
    "path": "Clean.bat",
    "content": "\nfor /d /r . %%d in (bin,obj,bak) do @if exist \"%%d\" rd /s /q \"%%d\"\n\nrd /s /q \"Artifacts\"\n\ncd Templates\ndel /s /q *.zip\ncd ..\n\npause"
  },
  {
    "path": "Documentation/articles/README.md",
    "content": "THIS IS A WORK IN PROGRESS!\n\n# MonoGame Documentation\n\nThis is the source for the [documentation published on MonoGame.net](http://www.monogame.net/documentation/).  It is rebuilt when the code changes and is published nightly to the website.\n\n## General Rules\n\nThe following rules must be observed at all times when contributing documentation to the MonoGame project.\n\n- Write in a neutral, technical tone.\n- Avoid humor, personal opinions, and colloquial language.\n- **Never** plagiarize any documentation from another source.\n- Do not use automatic documentation tools as they are ineffective. \n\nBreaking these rules can result in your contribution being rejected.\n\n## Getting Started\n\nYou can create and edit documentation right from the web browser without needing to install Git or ever leave the GitHub site.\n\n- [Fork the MonoGame repo](https://help.github.com/articles/fork-a-repo/).\n- [Create a new branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/) from `develop` and make your changes only in that branch.\n- [Create a new file](https://help.github.com/articles/creating-new-files/) or [edit an existing one](https://help.github.com/articles/editing-files-in-your-repository/) using the GitHub markup editor.\n- [Submit pull requests](https://help.github.com/articles/creating-a-pull-request/) early and often to merge your documentation changes.\n\n## Style Guide\n\nReview the following expectations before contributing any documentation.\n\n### Manuals, Guides, and Tutorials\n\nTODO!\n\n### API Reference\n\nThe API reference documentation is a big part of the documentation effort for MonoGame.  The documentation is written in the [C# XML format](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/xmldoc/xml-documentation-comments) and is inline to the MonoGame source code. The final web pages with API documentation are generated using [DocFX]([DocFX - static documentation generator | DocFX website](https://dotnet.github.io/docfx/)).\n\n#### Every Word Should Contain Value\n\nEvery word in the reference documentation should provide information beyond the API itself.  Documentation that only rehashes or rephrases what is already apparent in the class, method, parameter, or property name has zero value and wastes time for both the writer and reader.\n\n#### The First Sentence Is the Most Important\n\nThere is no guarantee that the reader will read beyond the first sentence of the reference documentation.  This is why that first sentence is the most important and should convey the most key piece of information.  Take your time to write the most concise and clear first sentence possible.  This helps users tremendously and goes a long way towards having great documentation.\n\n#### Surface Information Hidden in the Code\n\nBeing inline with the code allows you to easily look for critical information within it that the user might not know from looking at the API alone.  Take your time to explore inner method calls and platform specific sections of the code.  The time to write the documentation is once you feel you fully understand the code you are documenting.  If you don't feel you understand the code then leave the documentation for someone else to write.\n\n#### Documentation Is Referenced Not Read\n\nRemember that the user is searching for an answer for a specific question.  It is your job to predict these questions and provide them clear answers.\n\n## License\n\nAll documentation contributed to the MonoGame project is subject to the [Creative Commons Attribution-NonCommercial-ShareAlike](http://creativecommons.org/licenses/by-nc-sa/4.0/) license.  By contributing you are agreeing to the terms of that license.\n\n<p align=\"center\"><a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"><img alt=\"Creative Commons License\" style=\"border-width:0\" src=\"http://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" /></a><br /><span xmlns:dct=\"http://purl.org/dc/terms/\" href=\"http://purl.org/dc/dcmitype/Text\" property=\"dct:title\" rel=\"dct:type\">MonoGame Documentation</span> by the <a xmlns:cc=\"http://creativecommons.org/ns#\" href=\"http://www.monogame.net\" property=\"cc:attributionName\" rel=\"cc:attributionURL\">MonoGame Team</a> is licensed under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\">Creative Commons Attribution-NonCommercial-ShareAlike License</a>.</p>\n"
  },
  {
    "path": "Documentation/articles/content/adding_ttf_fonts.md",
    "content": "# TrueType fonts\n\nMonoGame supports more than one method of using fonts, the following is an explanation of how to use TrueType fonts.\n\n## Using TrueType Fonts with MonoGame\n\nTo be able to use a TrueType font, MonoGame requires the **TrueType font file** and a **.spritefont** file.\n\n> TrueType fonts may be installed on the system, or added manually in to the same directory as the .spritefont file.\n\n1. Create the .spritefont file by selecting \"Edit -> Add -> New Item\" from the MGCB Editor menu, then select **SpriteFont Description** from the list and click **Create**.\n   \n   ![Adding TTF fonts step 2](~/images/content/adding_ttf_fonts.PNG)\n\n2. Open the newly created .spritefont file in your text editor of choice, find this line and change it to your selected .ttf font.\n   If the font is installed on the system, just type the name of the font.\n\n```xml\n<FontName>Arial</FontName>\n```\n\n## Usage Example\n\nMake a class variable of type [`Spritefont`](xref:Microsoft.Xna.Framework.Graphics.SpriteFont)\n\n```csharp\nSpriteFont font;\n```\n\nLoad the font with [`ContentManager.Load`](xref:Microsoft.Xna.Framework.Content.ContentManager)\n\n```csharp\nfont = myGame.Content.Load<SpriteFont>(\"Fonts/myFont\")\n```\n\nDraw text with [`SpriteBatch.Draw`](xref:Microsoft.Xna.Framework.Graphics.SpriteBatch)\n\n```csharp\nspriteBatch.Begin();\n// Finds the center of the string in coordinates inside the text rectangle\nVector2 textMiddlePoint = font.MeasureString(text) / 2;\n// Places text in center of the screen\nVector2 position = new Vector2(myGame.Window.ClientBounds.Width / 2, myGame.Window.ClientBounds.Height / 2);\nspriteBatch.DrawString(font, \"MonoGame Font Test\", position, Color.White, 0, textMiddlePoint, 1.0f, SpriteEffects.None, 0.5f)\nspriteBatch.End();\n```\n"
  },
  {
    "path": "Documentation/articles/content/content.md",
    "content": "# Adding Content\n\nA big part of your game is your content.  This includes standard files like textures, sound effects, music, videos, and custom effects as well as custom content like level and enemy files.\n\nMonoGame implements its own content pipeline for transforming your unoptimized assets into platform optimized content.  This is critical in building a game which runs as fast as possible under tight resource constraints.\n\nThis section will cover the following topics:\n\n- [Why use the Content Pipeline](why_content_pipeline.md)\n- [Using MGCB Editor](using_mgcb_editor.md)\n- [TrueType Fonts](adding_ttf_fonts.md)\n- [Custom Effects](custom_effects.md)\n- [Localization](localization.md)\n"
  },
  {
    "path": "Documentation/articles/content/custom_effects.md",
    "content": "# Custom Effects\n\nA core element of Microsoft XNA is the effect system which is used for all rendering.\n\nFor KNI we are supporting stock and custom HLSL effects, for DirectX 11, desktop OpenGL, mobile GLES and WebGL.\nThere currently is no effect system or shader language that supports all the platforms we require, forcing us to build a new custom effect system.\n\n## MGFX\n\nKNIFX is KNI's \"Effect\" runtime and tools which with the following core goals:\n\n* Support a similar technique, passes, shaders structure as Microsoft FX files.\n* Have a textual format for ease of editing.\n* Have a compiled and optimized binary format for runtime use.\n* Be cross-platform and support multiple shader languages and bytecodes.\n* Easy to extend for future platforms and features.\n\n## Stock Effects\n\nKNI has the following effects built-in and fully supported on current platforms:\n\n* BasicEffect\n* AlphaTestEffect\n* DualTextureEffect\n* EnvironmentMapEffect\n* SkinnedEffect\n* SpriteEffect\n\nUnder the hood these effects use the same system and tools as one would for a custom Effect.  The source of these effects can be found in the ['Platforms\\Graphics\\Effect\\Shaders'](https://github.com/kniEngine/kni/tree/main/Platforms/Graphics/Effect/Shaders) folder.\n\n## Custom Effects\n\nTo use a custom effect with KNI you must do one of the following:\n\n* Run the effect file through the [content processor](~/articles/tools/mgcb.md) for loading via the [`ContentManager`](xref:Microsoft.Xna.Framework.Content.ContentManager) (Recommended).\n* Process your effect file with the [KNIFXC tool](~/articles/tools/knifxc.md) and load them yourself at runtime.\n\n## Effect Writing Tips\n\nThese are some tips for writing or converting effects for use with KNI.\n\n| The compiler support both new HLSL syntax and is backward compatible with the old HLSL syntax. vs_4_0_level_9_1 and vs_2_0 are interchangeable:|\n| The supported shader models when targeting DX are the following:|\n|---|\n|  * `vs_4_0_level_9_1` and `ps_4_0_level_9_1` (`Reach` `GraphicsProfile`)|\n|  * `vs_4_0_level_9_3` and `ps_4_0_level_9_3` (requires `HiDef` `GraphicsProfile` at runtime)|\n|  * `vs_2_0` and `ps_2_0` (`Reach` `GraphicsProfile`)|\n|  * `vs_3_0` and `ps_3_0` (requires `HiDef` `GraphicsProfile` at runtime)|\n|  * `vs_4_0` and `ps_4_0` (requires `FL10_0` `GraphicsProfile` at runtime)|\n|  * `vs_4_1` and `ps_4_1` (requires `FL10_1` `GraphicsProfile` at runtime)|\n|  * `vs_5_0` and `ps_5_0` (requires `FL11_0` `GraphicsProfile` at runtime)|\n|---|\n|When targeting GL platforms we automatically translate FX files to GLSL using a library called [MojoShader](http://icculus.org/mojoshader/).|\n|Shader Model 4.0 under GL unlocks the instruction count limit of 3.0, but is otherwise limited to 3.0 instructions|\n|The supported feature levels are the following:|\n|---|\n|  * `vs_4_0_level_9_1` and `ps_4_0_level_9_1` (`Reach` `GraphicsProfile`)|\n|  * `vs_4_0_level_9_3` and `ps_4_0_level_9_3` (requires `HiDef` `GraphicsProfile` at runtime)|\n|  * `vs_2_0` and `ps_2_0` (`Reach` `GraphicsProfile`)|\n|  * `vs_3_0` and `ps_3_0` (requires `HiDef` `GraphicsProfile` at runtime)|\n|  * `vs_4_0` and `ps_4_0` (requires `FL10_0` `GraphicsProfile` at runtime)|\n|---|\n|You can use preprocessor checks to add conditional code or compilation depending on defined symbols. KNI defines the following symbols when compiling effects:|\n|---|\n|  * `__KNIFX__`                   |\n|  * `__DEBUG__` when building with the Debug flag |\n|  * `__DIRECTX__` when targeting DirectX |\n|  * `__GL__` when targeting OpenGL/GLES/WebGL |\n|  * `__OPENGL__` when targeting desktop OpenGL |\n|  * `__GLES__` when targeting GLES/WebGL |\n|  * `__MOJOSHADER__` when building with MojoShader, targeting OpenGL/GLES/WebGL |\n|---|\n\n\nCustom symbols can be defined from the [MGCB Editor](~/articles/tools/mgcb_editor.md) or via [KNIFXC](~/articles/tools/knifxc.md).\n\n* Make sure the pixel shaders inputs **exactly match** the vertex shader outputs so the parameters are passed in the correct registers. The parameters need to have the same size and order. Omitting parameters might not break compilation, but can cause unexpected results.\n* The effect compiler is aggressive about removing unused parameters, be sure the parameters you are setting are actually used.\n* Preshaders are not supported.\n* If you think you have found a bug porting a shader, [please let us know](https://github.com/kniEngine/kni/issues).\n"
  },
  {
    "path": "Documentation/articles/content/localization.md",
    "content": "# Localization\n\nLocalization is an important part of any game. While it can be possible to design a game that is region independent, it is quite hard. At some point you will need to produce localized text and graphics.\n\nMonoGame has a simple localization system built in. If you want to develop your own system you are still able to do so. But the default system should be good enough for\nmost use cases.\n\n## Creating resx files\n\nMonoGame runs on .net/Mono on most platforms. Localization is handled by those platforms\nvia the use of resx files. There are walkthroughs on [MSDN](https://msdn.microsoft.com/en-us/library/aa992030(v=vs.100).aspx)\nwhich walk you through the process. A simplified version is presented here.\n\nCreate a .resx file in the IDE e.g Foo.resx and add it to your game project. Note this needs to be added to the main app projects. The Foo.resx file should have an Action of EmbeddedResouce and a Generator value of ResXFileCodeGenerator.\n\nHere is a snippet from the .csproj:\n\n```xml\n<EmbeddedResource Include=\"Foo.resx\">\n  <Generator>ResXFileCodeGenerator</Generator>\n  <LastGenOutput>Foo.Designer.cs</LastGenOutput>\n</EmbeddedResource>\n```\n\nAdd any string resources to that file. These are in the form of a Key/Value pair. You can use the built-in editor or manually edit the .resx file by hand. It is an xml file so you can view the contents easily.\n\n```xml\n<data name=\"Wall_Style\" xml:space=\"preserve\">\n  <value>Wall Style : {0}</value>\n</data>\n```\n\nWhen the resx is processed by the generator, it produces a **Foo.Designer.cs** file which is then included in your project. You can then access the \"string\" value by using code as follows:\n\n```csharp\nvar s = MyProject.Foo.Wall_Style;\n```\n\n> Note in the example we have a place holder ({0}) for additional text. You can still use te property of Foo.Wall_Style with things like string.Format.\n\n```csharp\nint i = 1;\nvar s = string.Format (MyProject.Foo.Wall_Style, i);\n```\n\nAll this means you do not need to hardcode the string directly. When accessing the **MyProject.Foo.Wall_Style** property, the code will look up the value from the embedded resx file automatically.\n\nYou can add support for a new language by adding a new resx file which uses the language/region code as a suffix, e.g Foo.**de-DE**.resx.\nThis new file will contain the translations for that language/region. In the above example we are targetting German.\n\n### Universal Windows Platform (UWP) considerations\n\nUnfortunately UWP does not support resx files any more. They have a new file called a **resw**. The format is similar but incompatible to resx. As a result, you will need to duplicate the data into a set of additional resw files to get the translation to work on UWP.\nThe process is like the standard resx process.\n\n## Upgrading your SpriteFont files\n\nBy default, the SpriteFont processor uses a limited set of characters to generate the font. While this is fine for English languages it will probably not include special characters needed for other languages (French, Arabic, Korean etc).\n\nAs a result MonoGame has a **LocalizedFontProcessor** which does something slightly different. The process looks at the resx files you provide it with and generates an optimized **spritefont** which only contains the characters your game uses.\n\nTo make use of this functionality you ned to tell the spritefont which resx files to use. Open the **.spritefont** with a xml/text editor and add lines like this inside the Asset node:\n\n```xml\n<ResourceFiles>\n  <Resx>..\\Foo.resx</Resx>\n  <Resx>..\\Foo.de-DE.resx</Resx>\n</ResourceFiles>\n```\n\n> Note the paths are relative to the .spritefont directory. In the example above the resx files are in the directory above the .spritefont.\n\nYou should end up with a .spritefont file like this\n\n```xml\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n    <FontName>Verdana</FontName>\n    <Size>14</Size>\n    <Spacing>1</Spacing>\n    <Style>Regular</Style>\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#32;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n    <ResourceFiles>\n      <Resx>..\\Foo.resx</Resx>\n      <Resx>..\\Foo.de-DE.resx</Resx>\n    </ResourceFiles>\n  </Asset>\n</XnaContent>\n```\n\nOnce that is done you then need to change the **.mgcb file** so that the **SpriteFontProcessor** is replaced with the **LocalizedFontProcessor**. This can be done by editing the .mgcb file or using the MGCB Editor. After that you can just compile your content as normal. If the processor has any trouble resolving or reading the\nresx files you will get an error.\n\n## Loading the Font\n\nLoading the font can be done in the normal way. The end result of the process is an .xnb file containing a normal SpriteFont.\n\n```csharp\nvar font = Content.Load<SpriteFont>(\"Foo\");\n```\n\n### Other Localized assets\n\nNot all localized assets will be fonts. In certain situations you might need to swap out an entire textures or spritesheets.\nFor these cases a new method has been added to the ContentManager, **LoadLocalized**. The idea behind this method is that it will look for localized files **BEFORE** loading the default one.\n\nSo for example say you have an asset, MyCharacter. You have a MyCharacter.xnb file which contains the data for that item. You can also has a MyCharacter.de-DE.xnb file which contains the German version of that asset. This asset could be a Texture, Audio or any other game asset. You can then use LoadLocalized to load the localized version of the asset.\n\n```csharp\nvar myCharacter = Content.LoadLocalized<Texture2D>(\"MyCharacter\");\n```\n\nThe decision on which localized asset to load is made by looking for a file with the following patterns\n\n```xml\n<AssetName>.<CurrentCulture.Name>\n<AssetName>.<CurrentCulture.TwoLetterISOLanguageName>\n```\n\nThese values are retrieved from\n\n```csharp\nCultureInfo.CurrentCulture.Name                         // eg. \"en-US\"\nCultureInfo.CurrentCulture.TwoLetterISOLanguageName     // eg. \"en\"\n```\n\nwhich are part of the **System.Globalization namespace**. \n\n> On a side note you can also use the `LoadLocalized` to load language specific SpriteFonts. They just need to be named in the same way as we have described above.\n"
  },
  {
    "path": "Documentation/articles/content/toc.yml",
    "content": "- name: Why use the Content Pipeline\r\n  href: why_content_pipeline.md\r\n- name: Using MGCB Editor\r\n  href: using_mgcb_editor.md\r\n- name: Custom Effects\r\n  href: custom_effects.md\r\n- name: TrueType fonts\r\n  href: adding_ttf_fonts.md\r\n- name: Localization\r\n  href: localization.md\r\n"
  },
  {
    "path": "Documentation/articles/content/using_mgcb_editor.md",
    "content": "# Using MGCB Editor\n\nThe [MGCB Editor](~/articles/tools/mgcb_editor.md) is used to organize and build content for use with MonoGame. It is accessed by double-clicking a \"**.mgcb**\" file from within the Visual Studio solution explorer (providing that you installed [MonoGame's Visual Studio extension](/Documentation/articles/getting_started/1_setting_up_your_development_environment_windows.md)).\n\nAlternatively, you can build it [directly from source](https://github.com/MonoGame/MonoGame/tree/develop/Tools/MonoGame.Content.Builder.Editor) if needed.\n\n## Create A Project\n\nTo start a new project just select “New...” from the “File” menu.\n\n![MGCB Editor new project](~/images/content/mgcb_new.png)\n\nThis will give you a new empty project to add content to.\n\n## Importing an XNA (.contentproj) content project\n\nIf you are starting from an existing XNA project, the MGCB Editor supports importing your existing **.contentproj**. Again you can access this from the “**File**” menu:\n\n![MGCB Editor import XNA](~/images/content/mgcb_import.png)\n\nThis creates a new project, adding all your content and content settings from the XNA project. If you happened to be using custom processors, you may need to edit the assembly references to link to the correct paths which we discuss next.\n\n## Project Settings\n\nYou can edit the content project settings directly from the property grid editor after selecting the project node in the tree view:\n\n![Project settings](~/images/content/mgcb_project.png)\n\nThis is where you set up the folders for output, the platform to target, the assembly references for custom processors, etc.\n\n> Note that currently, the MGCB Editor is not set up to support multiple target platforms. This means you may need to manage multiple content projects or manually change the target platform between builds. If you are using `MonoGame.Content.Builder.Task` to build content as part of building your project, the correct platform will automatically be targeted.\n\n## Adding Content Items\n\nOnce you have a project set up you can add content to it for building. You can do this from the “**Edit**” menu:\n\n![Edit menu](~/images/content/mgcb_addexisting.png)\n\nSelecting “**New Item...**” will bring up the New Item dialog which displays a list of new items that can be created:\n\n![New item](~/images/content/mgcb_newitem.png)\n\nWhen you select “**Existing Item...**”, you can select an existing item from disk to add to the content project.\n\n## Built-in Content Importers and Processors\n\nMonoGame provides default **Importers** (File Read) and **Processors** (File Transform) methods for handling almost all standard content which is automatically selected for known content types. In most cases, you do not need to alter these settings when adding content. The lists below highlight the default configuration options for each file type.\n\n> If you wish to create your own Importers and Processors for custom file types, please see the \"[Custom Content Processors](#custom-content-processors)\" section.\n\n## File Types\n\nThe MonoGame Content Builder (MGCB) pipeline supports many different file types within a content project, along with several default processing options for those files:\n\n### Images\n\n![Image Properties](~/images/content/MGCB-ImageProperties.png)\n\nImages come in a variety of formats such as png or jpg, most of which are natively supported by the MonoGame content pipeline.\n\nAdditionally, the following options are configurable per image asset when imported:\n\n| Property           | Description                                                                                                                                   |\n| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |\n| ColorKeyColor      | Background color used for transparency                                                                                                        |\n| ColorKeyEnabled    | If enabled, any colors identified using the Color Key will be marked as transparent (Alpha 0). The default value is **false**                 |\n| GenerateMipmaps    | If enabled, this will generate MipMaps for the selected texture. The default value is **false**                                               |\n| MakeSquare         | if enabled this will make best efforts to expand the image to a square. The default value is **false**                                        |\n| PremultiplyAlpha   | If enabled this will treat the selected texture as an Alpha Mask. The default value is **false**                                              |\n| ResizeToPowerOfTwo | If enabled this will resize the image dimensions to the next largest power of 2 size, e.g. 128x128 or 512x512. The default value is **false** |\n| TextureFormat      | Selected format of the Texture to process, e.g. raw Color, DXT. The default value is **color**                                                |\n\n### Audio\n\n![Image Properties](~/images/content/MGCB-AudioProperties.png)\n\nMonoGame supports several audio formats to cope with a wide variety of audio needs, from Wav files for effects to MP3's for songs/background music. The type of audio you use will depend on the audio needs for your project.\n\nAudio can be configured to use either the **Sound Effect** processor which imports audio as a [SoundEffect](xref:Microsoft.Xna.Framework.Audio.SoundEffect) which is generally used for short and quick audio sounds. Alternatively, by selecting the **Song** processor, the audio will be imported as a **Song** which is used for long-running audio using the Media Player class.\n\n| Property  | Description                                                                                                                                                            |\n| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| DebugMode | Depending on the setting, this will either leave the audio uncompressed (for speed) when debugging or optimized for a production build. The default value is **false** |\n| Quality   | The quality of compression to be used when compiling the asset. The default value is **best**                                                                          |\n\n### Models\n\n![Image Properties](~/images/content/MGCB-ModelProperties.png)\n\n| Property                   | Description                                                                                                                                             |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| ColorKeyColor              | Background color used for transparency                                                                                                                  |\n| ColorKeyEnabled            | If enabled, any colors identified using the Color Key will be marked as transparent (Alpha 0). The default value is **false**                           |\n| DefaultEffect              | The default effect class to apply to this model. The default value is **BasicEffect**                                                                   |\n| GenerateMipmaps            | If enabled, this will generate MipMaps for the selected texture. The default value is **false**                                                         |\n| GenerateTangentFrames      | Generate model tangents for use in Normal Mapping. The default value is **false**                                                                       |\n| PremultiplyTextureAlpha    | If enabled this will treat the selected texture as an Alpha Mask. The default value is **false**                                                        |\n| PremultiplyVertexColors    | If enabled this will treat the selected texture as a Vertex Color Mask. The default value is **false**                                                  |\n| ResizeTexturesToPowerOfTwo | If enabled this will resize the models texture(s) dimensions to the next largest power of 2 size, e.g. 128x128 or 512x512                               |\n| RotationX                  | Default model X Axis Rotation–Number, in degrees of rotation. The default value is **0**                                                                |\n| RotationY                  | Default model Y Axis Rotation–Number, in degrees of rotation. The default value is **0**                                                                |\n| RotationZ                  | Default model Z Axis Rotation–Number, in degrees of rotation. The default value is **0**                                                                |\n| Scale                      | Default model scale. The default value is **1.0f**                                                                                                      |\n| SwapWindingOrder           | Boolean value indicating if the winding order is swapped. This is useful for models that appear to be drawn inside out. The default value is **false**. |\n| TextureFormat              | Selected format of the Texture to process, e.g. raw Color, DXT. The default value is **compressed**                                                     |\n\n### [Fonts](adding_ttf_fonts.md)\n\n![Font Properties](~/images/content/MGCB-Fontproperties.png)\n\nMonoGame uses a **Font descriptor** file to describe the type of font to import, the font in question needs to be installed in the machines Font library for it to enable the project to build, else this will result in a Font importer error.\n\n> It is recommended you keep a copy of the Font file in the content folder for reference to avoid issues with missing Fonts, that way any developer on the project can re-add the Font to their machine when needed.\n\n| Property         | Description                                                                                                    |\n| ---------------- | -------------------------------------------------------------------------------------------------------------- |\n| PremultiplyAlpha | If enabled this will treat the font texture that is generated as an Alpha Mask. The default value is **false** |\n| TextureFormat    | Selected format of the font Texture to process, e.g. raw Color, DXT. The default value is **compressed**       |\n\nSee the [TrueType fonts](adding_ttf_fonts.md) section for more detail on working with Fonts. Additionally, check out the [Localization](localization.md) section for details on working with managing translated text within your project using [resx](https://msdn.microsoft.com/en-us/library/aa992030(v=vs.100).aspx) files.\n\n### [Effects](custom_effects.md)\n\n![Effect Properties](~/images/content/MGCB-EffectProperties.png)\n\nEffects in MonoGame are shaders that have been built with a supported shader language (HLSL / GLSL) which will then be pre-processed into a common shader language / effect used by MonoGame.\n\n| Property  | Description                                                                                                                                                            |\n| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| DebugMode | Depending on the setting, this will either leave the audio uncompressed (for speed) when debugging, or optimise for a production build. The default value is **false** |\n| Defines   | Custom compiler defines to enable specific code paths (#if) in the shader file, if appropriate. The default value is **empty**                                         |\n\nSee the [Effects](custom_effects.md) section for more detail on the built-in effects with MonoGame and how to generate your own custom effects.\n\n### Video\n\n![Image Properties](~/images/content/MGCB-VideoProperties.png)\n\nMonoGame uses a custom video player which converts video files into a format that can be used and rendered by MonoGame using a series of VideoTextures.\n\nThere are no configurable properties for the Video Player currently.\n\n### Text (e.g. XML)\n\n![Image Properties](~/images/content/MGCB-TextProperties.png)\n\nOne of the most powerful processors in MonoGame is the text processor, ideally used for XML files used to manage Game Class content in text files rather than writing it all in code.\n\nSo long as the XML file conforms to the MonoGame (XNA) standard, it will generate data within the game for use in the solution.\n\nFor an example on how to use XML in your MonoGame project, [check out this article](https://dzone.com/articles/getting-started-with-monogame-using-xml).\n\n## Custom Content Processors\n\nJust like XNA, the MonoGame content pipeline supports custom content processors. To use them you need to rebuild them correctly to work against MonoGame.\n\nThe first step is removing all `Microsoft.Xna.Framework.XXX` references and replacing them with references to `MonoGame.Framework` and `MonoGame.Framework.Content.Pipeline`. This is required as you will no longer be building against Microsoft XNA.\n\nOnce your references are working, you then need to change your assembly target platform. MonoGame does not support x86 (aka 32bit) assemblies in the content pipeline. This is mainly to allow of processing really big content as well as to simplify the number of configurations and native code dependencies. For this reason, you should try to target “Any CPU” with your custom content assembly.\n\nAfter you have done these fixes, you should be able to add these new processors to the content project “References”.\n\n## Building Content\n\nThe MGCB Editor has 3 actions related to building content: Build, Rebuild and Clean:\n\n- **Build** - This will build all content that needs to be built and put it in the output directory (bin by default). Content will be skipped if it has not changed since the last build. The time source content was last edited is saved in the intermediate directory (obj by default) to determine if content changed since the last build.\n- **Rebuild** - Cleans the project first and then Builds it again.\n- **Clean** - Cleaning the project will empty the output and intermediate directories.\n\n## Linking Content To Your Game\n\nOnce you have built your content, you have a few different ways to add it to your game project. They all have the same goal, to get the built XNB's in your project output folder so a [`ContentManager`](xref:Microsoft.Xna.Framework.Content.ContentManager) can easily find and load them.\n\n### KniContentReference\n\nThe simplest method is to set up your game project from one of the templates that come with the SDK. When you create a new project, it will include a Content.mgcb file with its Build Action set to **KniContentReference** and a reference to `MonoGame.Content.Builder.Task` which processes *KniContentReference* items.\n\n![MonoGame Content Reference](~/images/content/MGCB-ContentReference.png)\n\n> This build action is defined in the .targets file [here](https://github.com/MonoGame/MonoGame/blob/develop/Tools/MonoGame.Content.Builder.Task/MonoGame.Content.Builder.Task.targets).\n\nThe **KniContentReference** is set up so that when the project is built, the MGCB will automatically build any new/modified content and copy the resulting XNB's to the project output directory, so they can be used in the project. This way you do not even have to manually build the content with the MGCB Editor.\n\nJust add your content to the .mgcb with the MGCB Editor and the rest will happen when you build your project. The content files do not need to be added to your project.\n\n### Manual Copy\n\nIf you do not want to use the automated process, you can build the content project with the MGCB Editor and copy the XNB's to the output folder of your project manually.\n\n### Add As Content\n\nIf you are using Visual Studio, you can bypass the content pipeline all together and simply the files to your C# game project directly (or as links). Create a folder in the project called Content then right-click on the folder and select Add > Existing Item.\n\n![Add existing item](~/images/content/existing_item.png)\n\nYou will now see a file dialog from which you can add your content files. \n\n> Note that if you do not want Visual Studio to make a local copy of the files. Make sure to use “**Add As Link**” when “Linking” files.\n> \n> ![Add as link](~/images/content/add_as_link.png)\n\nOnce the files are added you will need to select them all and change their properties in the properties window to:\n\n* \"Build Action\" to **Content**\n* \"Copy to Output Directory\" to **Copy if newer**\n\n![Copy if newer](~/images/content/copy_if_newer.png)\n\n### Add With Wildcard\n\nThe more automatic option is to edit your game .csproj manually and have it include you content automatically using wildcards.\n\nTo do this just open the .csproj with any text editor, then add the following after any other `**<ItemGroup>**`:\n\n```xml\n<ItemGroup>\n  <Content Include=\"Content\\**\\*.xnb\">\n    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n  </Content>\n</ItemGroup>\n```\n\nThen any files you put in a Content folder within your game project will automatically be included in the build.\n\n## Reporting Bugs\n\nIf you run into any problems with MGCB or the MGCB Editor, please ask for help on the [community site](http://community.monogame.net/) or submit a [bug report on GitHub](https://github.com/MonoGame/MonoGame/issues).\n"
  },
  {
    "path": "Documentation/articles/content/why_content_pipeline.md",
    "content": "# Why use the Content Pipeline\n\nThe MonoGame team continues to put a lot of effort into a cross-platform content pipeline, but would you use the Content Pipeline when MonoGame also supports loading assets natively, like .png, .mp3, .wav? Well, it all boils down to a couple of words, performance and efficiency.\n\n## Textures\n\nMost image formats (like PNGs) are generally not optimized for games, most GPUs have specific hardware supported compressed formats for textures. PNGs or JPEGs just get uncompressed when passed to the GPU. By using the hardware compression you often get 4x to 8x more textures space for your game as well as faster load times and smaller packages.\n\nWhen we load the .png from storage at runtime, the texture is then loaded into memory and decompressed/unpacked from its compressed png format into raw bytes.\n\n> Note that 262 KB  is quite a bit bigger than the compressed size.\n\nA new texture is then created for that data because your device cannot decompress on the fly (yet) so it has to use that data as is. Creating the texture uses 262kb of graphics memory on the GPU. That does not sound too bad, but if you are using larger textures say 1024×1024, then you are using 4 MB or more of GPU memory for that one texture. Multiply that over the number of textures in your game and you soon run out of texture memory on the GPU. If this happens then the GPU has to swap that data out into system memory (if it supports that) or throw an error when you try to create textures that will not fit into available memory.\n\n> So to sum up:\n>\n> using **.pngs** = smaller package size & higher memory usage & less textures\n\nIf you pre-process the texture using the content pipeline, because we know that we are targeting iOS and we know the GPU on those devices support using PVRTC texture compression, we can compress the textures ready for the GPU to use. So we take our sample .png and compress it at build time using PVRTC and we end up with a 32kb file (size depends on the texture, alpha channel, etc). Hmm, that is a lot bigger than the .png on disk, but that is not the whole story. The difference here is that there is no need to unpack/decompress it at runtime which saves on load time, also, we can create a texture from that data directly so we only use 32kb of texture memory on the GPU and not 262kb. That is a massive saving.\n\n> Summing up:\n>\n> **compressed textures** = larger package size (maybe) & lower runtime memory usage & more textures\n\nThis applies to all platforms as most desktop GPUs support DXT texture compression, so the content pipeline will produce DXT compressed textures which can be loaded and used directly. The Android platform currently does not have consistent support for compressed textures at the moment so MonoGame has to decompress DXT textures on the device and use it directly, when this changes MonoGame will adapt.\n\nIn the Content Pipeline tool, MonoGame will automatically pick the correct texture format to use, so for opaque textures, it will use ETC1 (which is supported on all android devices but does not support alpha channels) but for textures with an alpha channel, it will use RGBA4444 (dithered). It will also allow the user to override this default and enable picking from a wide variety of compression options manually such as PVRTC, ATITC, DXT/S3TC, ETC1, and RGBA4444. This will give the developer the choice of what to use/support.\n\n## Audio\n\nAll platforms support different audio formats, if you are handling this yourself you will need to manually convert all your files and include the right formats for each platform. A better option would be to keep one source file (be it .mp3, .wmv, etc) and then convert it to a supported format for the target platform at build time. This creates longer build times, but at least we know the music will work. MonoGame uses ffmpeg to do the heavy lifting when converting between formats as it can pretty much convert any type to any other type which is really cool.\n\n> The build times are only for the first time the asset is processed, the Content Pipeline will preserve the generated content for subsequent builds until the source is changed\n\nMost platforms have audio processing that is optimized to certain compressed formats. By not using them you loose performance and system memory.  If you save the sound effects as ADPCM, these run pretty optimally on Windows systems. The problem however, is that once you try to take your game to another platform where ACPCM is not optimal. You will need to manually re-export all your game content into the new optimal format for that platform (assuming you kept all your original content uncompressed)\n\n## Shaders\n\nThere are a number of shading languages that you can use depending on the platform you are targeting:\n\n- For OpenGL based systems that is GLSL\n- For DirectX based systems it is HLSL\n- There is also CG from Nvidia.\n\nThe Effect system in XNA/MonoGame was designed around the HLSL language as it is based around the .fx format, which allows a developer to write both vertex and pixel shaders in one place. Historically both GLSL and HLSL have separate vertex and pixel shaders.  HLSL until recently compiled and linked these at build time, however, GLSL does this at runtime.\n\nWithout a content pipeline or some form of tooling a developer would need to write two shaders, one for HLSL and one for GLSL. The good news is the MonoGame KNIFXC.exe tool can create a shader in .fx format and also enable it to work in GLSL. It does this by using an open-source library called libMojoShader, which does some funky HLSL to GLSL instruction conversion to create an OpenGL-based shader, but rather than doing that at runtime, we do it at build time so we do not need to deploy mojoshader with the OpenGL based games. All this saves you the hassle of having to write and maintain two shaders.\n\n## Models\n\nMonoGame, thanks to the excellent assimp project, supports a much wider range of models including .x, .fbx and .3ds. However, some of these formats might produce some weirdness at render time as only .fbx has been fully tested. Also note that assimp does not support the older version .fbx format which ships with most of the original XNA samples, so you will need to [convert those to the new format manually](https://www.codeproject.com/articles/1041397/updating-old-fbx-files-for-the-modern-era).\n\n> A nice trick to upgrade the old .fbx is to open them in Visual Studio 2012+ and then save it again under a new name. [This article](https://www.codeproject.com/articles/1041397/updating-old-fbx-files-for-the-modern-era) walks through some of the quick, easy, and FREE methods for updating older .fbx files.\n\nWhen the MonoGame content pipeline processes a Model file, it is converted into an optimized internal format that will contain the Vertices, Texture Coordinates, and Normals. The pipeline will also pull out the textures used in the model and put those through the pipeline too, so you get optimized textures automatically.\n\n## Summary\n\nThis is why using the content pipeline and XNB's is superior. You feed uncompressed source content to the MonoGame content pipeline, tell it what platform you are building for and it takes care of converting it to the most optimal format for that platform. When you decide to ship to another platform it is a one-click change to rebuild your content optimized for that platform.\n\nHopefully, you have a good idea of why you should use the content pipeline in your games. Using the raw assets is ok when you are putting together a simple demo or proof of concept but sooner or later you will need to start optimizing your content. My advice would be to use the Pipeline tooling from the outset so you get used to it.\n\nInformation on the [Pipeline tool](~/articles/tools/mgcb_editor.md) can be found here.\n"
  },
  {
    "path": "Documentation/articles/getting_started/0_getting_started.md",
    "content": "# Getting Started\n\nThis section walks you through the basics of MonoGame, and helps you to create your first game.\n\nFirst, select the operating system and toolset you will be working with to create your first MonoGame project, then continue reading to understand the basic layout of a MonoGame project.\n\nBy the end of this tutorial set, you will have a working project to build for your target platform and will be ready to tackle your next steps.\n\n## 1. Setting up your development environment\n\n- [Windows](1_setting_up_your_development_environment_windows.md)\n- [macOS](1_setting_up_your_development_environment_macos.md)\n- [Linux](1_setting_up_your_development_environment_ubuntu.md)\n\n## 2. Creating a new project\n\n- With [Visual Studio 2022](2_creating_a_new_project_vs.md)\n- With [Visual Studio 2022 for Mac](2_creating_a_new_project_vsm.md)\n- With [the .NET command line interface](2_creating_a_new_project_netcore.md) (compatible with JetBrains Rider and Visual Studio Code)\n\n## 3. Building your game\n\n- [Understanding the Code](3_understanding_the_code.md)\n- [Adding Content](4_adding_content.md)\n- [Adding Basic Code](5_adding_basic_code.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/1_setting_up_your_development_environment_macos.md",
    "content": "# Setting up your development environment for macOS\n\nThis section provides a step-by-step guide for setting up your development environment on macOS.\n\nMonoGame can work with most .NET compatible tools, but we recommend [Visual Studio 2022 for Mac](https://visualstudio.microsoft.com/vs/mac/) (prior versions are not supported).\n\nAlternatively, you can use [JetBrains Rider](https://www.jetbrains.com/rider/) or [Visual Studio Code](https://code.visualstudio.com/).\n\n## Install Visual Studio for Mac\n\nGo to the following URL to download and install Visual Studio 2022 for Mac: https://visualstudio.microsoft.com/vs/mac/\n\n### Install MonoGame extension for Visual Studio for Mac\n\nDownload the MonoGame extension for Visual Studio 2022 for Mac from the following link: https://github.com/MonoGame/MonoGame/releases/tag/v3.8.1\n\nOpen up Visual Studio 2022 for Mac and you should be able to see a window as shown below:\n\n![VS for Mac installer](~/images/getting_started/vsmac-mg-install-1.png)\n\nIn the menu bar, click on **Visual Studio**, and then click on the **Extensions...** menu item.\n\n![Launch Extensions manager](~/images/getting_started/vsmac-mg-install-2.png)\n\nNext, click on the **Install from file...** button in the bottom left and select the extension file you downloaded in the previous step.\n\n![Import VSM extension](~/images/getting_started/vsmac-mg-install-3.png)\n\nFinally, click on the Install button once again.\n\n![Install VSM extension](~/images/getting_started/vsmac-mg-install-4.png)\n\n## [Optional] Set up Wine for effect compilation\n\nEffect (shader) compilation requires access to DirectX, so it will not work natively on macOS systems, but it can be used through Wine. Here are instructions to get this working.\n\nInstall brew\n\n```sh\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)\"\n```\n\nInstall wine64:\n\n```sh\nbrew install xquartz\nbrew install wine-stable\nbrew install p7zip wget\n```\n\nBefore wine is usable, you will need to open it manually first - otherwise, you will get an error that Apple couldn't verify it.\n\n - Open Finder\n - Navigate to Applications\n - Control+Click on Wine Stable\n - Choose to open it\n\nIf you choose, you may close it now - it has been unblocked.\n\nCreate wine prefix:\n\n```sh\nwget -qO- https://raw.githubusercontent.com/MonoGame/MonoGame/master/Tools/MonoGame.Effect.Compiler/mgfxc_wine_setup.sh | bash\n```\n\nIf you ever need to undo the script, simply delete the `.winemonogame` folder in your home directory.\n\n**Next up:** [Creating a new project](2_creating_a_new_project_vsm.md)\n\n## [Alternative] Install the .NET 6 SDK (compatible with JetBrains Rider and Visual Studio Code)\n\nIf you prefer to use JetBrains Rider or Visual Studio Code, after installing any of them you will need to [install the .NET 6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0).\n\nOnce the .NET 6 SDK is installed, you can open a terminal and install the MonoGame templates by typing the following command:\n\n```sh\ndotnet new --install MonoGame.Templates.CSharp\n```\n\n**Next up:** [Creating a new project](2_creating_a_new_project_vsm.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/1_setting_up_your_development_environment_ubuntu.md",
    "content": "# Setting up your development environment for Linux\n\nThis section provides a step-by-step guide for setting up your development environment on Linux.\n\nThe only development environment that MonoGame officially supports on Linux is [Visual Studio Code](https://code.visualstudio.com/).\n\n## Install .NET 6 SDK\n\nTo install the .NET 6 SDK on your Linux distribution, please follow [Microsoft's instructions](https://docs.microsoft.com/dotnet/core/install/linux).\n\n## Install Visual Studio Code\n\nTo install Visual Studio on your Linux distribution, please follow [Microsoft's instructions](https://code.visualstudio.com/docs/setup/linux).\n\n## Install Visual Studio Code C# extension:\n\nIn order to code and build C# projects, you will also need to install a Visual Studio Code C# extension. You can do this with the following command within the Visual Studio Code command line interface:\n\n```sh\ncode --install-extension ms-dotnettools.csharp\n```\n> Or alternatively, select the \"Extensions\" tab on the left hand side in VSCOde and search for the C# Extension published by Microsoft.\n\n## Install MonoGame templates\n\nThe following command will install templates for the .NET CLI and Rider IDE. \n\n> There is no template support for MonoDevelop.\n\n```sh\ndotnet new --install MonoGame.Templates.CSharp\n```\n\n## [Optional] Set up Wine for effect compilation\n\nEffect (shader) compilation requires access to DirectX, so it will not work natively on Linux systems, but it can be used through Wine. Here are instructions to get this working (providing that your distribution is using apt).\n\nInstall wine64:\n\n```sh\nsudo apt install wine64 p7zip-full curl\n```\n\nCreate wine prefix:\n\n```sh\nwget -qO- https://raw.githubusercontent.com/MonoGame/MonoGame/master/Tools/MonoGame.Effect.Compiler/mgfxc_wine_setup.sh | bash\n```\n\nIf you ever need to undo the script, simply delete the `.winemonogame` folder in your home directory.\n\n**Next up:** [Creating a new project](2_creating_a_new_project_netcore.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/1_setting_up_your_development_environment_windows.md",
    "content": "# Setting up your development environment for Windows\n\nThis section provides a step-by-step guide for setting up your development environment on Windows.\n\nMonoGame can work with most .NET compatible tools, but we recommend [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (prior versions are not supported with MonoGame 3.8.1).\n\nAlternatively, you can use [JetBrains Rider](https://www.jetbrains.com/rider/) or [Visual Studio Code](https://code.visualstudio.com/).\n\n## [Recommended] Install Visual Studio 2022\n\nBefore using MonoGame, you will need to install [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) or later (any edition, including Community) with the following workloads, depending on your desired [target platform(s)](~/platforms.md):\n\n* .NET desktop development (mandatory for all platforms)\n* Mobile Development with .NET (optional, if you wish to target Android, iOS, or iPadOS)\n* Universal Windows Platform development (optional, if you wish to build for the Windows Store, or Xbox)\n\n![Visual Studio optional components](~/images/getting_started/1_installer_vs_components.png)\n\nIf you are targeting the standard Windows DirectX backend, you will also need [the DirectX June 2010 runtime](https://www.microsoft.com/en-us/download/details.aspx?id=8109) for audio and gamepads to work properly.\n\n### Install MonoGame extension for Visual Studio 2022\n\nTo create new projects from within Visual Studio 2022, you will need to install the MonoGame extension, which can be installed from \"*Extensions -> Manage Extensions*\" in the Visual Studio 2022 menu bar.\n\n![Visual Studio Extension Manager](~/images/getting_started/1_VisualStudioExtensionManager.png)\n\nOnce it is open, simply search for **MonoGame** in the top right search window, as shown above, and install the \"MonoGame Framework C# project templates\" (make sure that it is version 3.8.1 or above).  You now have the MonoGame templates installed, ready to create new projects.\n\n**Next up:** [Creating a new project](2_creating_a_new_project_vs.md)\n\n## [Alternative] Install the .NET 6 SDK (compatible with JetBrains Rider and Visual Studio Code)\n\nIf you prefer to use JetBrains Rider or Visual Studio Code, and after installing any of them, you will also need to [install the .NET 6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0).\n\nOnce the .NET 6 SDK is installed, you can open a Command Prompt and install the MonoGame templates by typing the following command:\n\n```sh\ndotnet new --install MonoGame.Templates.CSharp\n```\n\n**Next up:** [Creating a new project](2_creating_a_new_project_vs.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/2_creating_a_new_project_netcore.md",
    "content": "# .NET CLI (JetBrains Rider or Visual Studio Code)\n\nThis guide will walk you through building a starter game with MonoGame using only the command line/terminal on your operating system and a lightweight coding tool of your choice (such as [Visual Studio Code](https://code.visualstudio.com/) or [JetBrains Rider](https://www.jetbrains.com/rider/)).\n\n> It is assumed that you have already properly installed the .NET 6 SDK and MonoGame.\n\n> Be aware that for iOS/iPadOS, and Android, development might be limited when using the .NET CLI. Many of the development features for those targets are exclusive to Visual Studio 2022.\n\n## Create a MonoGame Project\n\nYou can now create new MonoGame projects. To do that:\n\n- Create a new directory for your project.\n\n- Open a new terminal window or command prompt and navigate to your project directory.\n\n- Run `dotnet new <TemplateID> -o <ProjectName>` to create your project, where `<TemplateID>` is a platform identifier, and `<ProjectName>` the name of your project.\n\nFor example:\n\n```\ndotnet new mgdesktopgl -o MyGame\n```\n\n> To know which platform identifier (short name) to use for your project, please refer to [Target Platforms](~/articles/platforms.md), or type the following command into the command prompt to list the installed templates and their corresponding short names:\n> \n> ```\n> dotnet new -l\n> ```\n\nOnce created, you can open your code editor of choice in the new folder and begin editing.\n\n> To run your project, check the instructions for [packaging your game](~/articles/packaging_games.md) to build the executable using the .NET tooling.\n\n**Next up:** [Understanding the code](3_understanding_the_code.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/2_creating_a_new_project_vs.md",
    "content": "# Creating a Project with Visual Studio 2022\n\nThis guide will walk you through building a starter game with MonoGame using Windows and Visual Studio 2022. \n\n> It is assumed that you have already properly installed Visual Studio 2022 and MonoGame.\n\nStart Visual Studio 2022 and select **New Project...** in the upper left corner.\n\n![New Solution](~/images/getting_started/vswin-mg-new-1.png)\n\nYou should see the \"Create a new project\" dialog pop up. From here, select the **Templates > Visual C# > MonoGame** category, and then select **MonoGame Cross Platform Desktop Project**.\n\n![New Template](~/images/getting_started/vswin-mg-new-2.png)\n\nNext, type in a name for your project. For this tutorial, **Pong** will be used (note: project names cannot contain spaces). After you have entered the name, click on the **...** button next to the Location text field and choose the folder you want to save the project in. Finally, click **OK** to create the project.\n\n![Project Name](~/images/getting_started/vswin-mg-new-3.png)\n\nIf everything went correctly, you should see a project named **Pong** open up like in the picture below. To run your game, simply press the big **Play Button** in the toolbar, or press **F5**.\n\n![Project Start](~/images/getting_started/vswin-mg-new-4.png)\n\nYou should now see your game window running.\n\n![Game](~/images/getting_started/vswin-mg-new-5.png)\n\n**Next up:** [Understanding the code](3_understanding_the_code.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/2_creating_a_new_project_vsm.md",
    "content": "# Creating a Project with Visual Studio for Mac\n\nThis guide will walk you through building a starter game with MonoGame using a Mac and Visual Studio for Mac. \n\n> It is assumed that you have already properly installed Visual Studio 2022 for Mac and MonoGame.\n\nStart Visual Studio 2022 for Mac and select **New** on the right side.\n\n![New Solution](~/images/getting_started/vsmac-mg-new-1.png)\n\nNow you should see a \"New Project\" dialog pop up. From here, select the **MonoGame > App** category, then select **MonoGame Cross Platform Desktop Project** and click **Next**.\n\n![New Template](~/images/getting_started/vsmac-mg-new-2.png)\n\nOn the following dialog, type in a name for your project. For this tutorial, **Pong** will be used (note: project names cannot contain spaces). After you have entered the name, click on the **Browse** button next to the Location text field and choose the folder you want to save the project in. Finally, click **Create** to create a new project.\n\n![Project Name](~/images/getting_started/vsmac-mg-new-3.png)\n\nIf everything went correctly, you should see a project named **Pong** open up like in the picture below. To run your game, simply press the big **Play Button** in the upper left corner, or press **F5**.\n\n![Project Start](~/images/getting_started/vsmac-mg-new-4.png)\n\nYou should now see your game window running.\n\n![Game](~/images/getting_started/vsmac-mg-new-5.png)\n\n**Next up:** [Understanding the Code](3_understanding_the_code.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/3_understanding_the_code.md",
    "content": "# Understanding the Code\n\nThis tutorial will go over the code that is generated when you start a blank project.\n\n> For help with creating a project, please look at the Creating a New Project section of the [Getting Started guide](0_getting_started.md).\n\nWithin the **Game.cs** class file, which is the core of any MonoGame project, you will find several critical sections necessary for your game to run:\n\n* **Using statements** - which provide easy access to the various components of MonoGame.\n\n* The **Game Class** definition - the heart of any MonoGame project.\n\n* The **Game constructor** and key variables - which tell the project how to start.\n\n* The **Initialize** method - to initialize the game upon its startup.\n\n* The **Load and Unload Content** methods - which are used to add and remove assets from the running game from the [Content project](4_adding_content.md).\n\n* The **Update** method - which is called on a regular interval to update your game state, e.g. take player inputs, move ships, or animate entities.\n\n* The **Draw** method - which is called on a regular interval to take the current game state and draw your game entities to the screen.\n\nRead further for more details and examples while looking through the code of your new project.\n\n---\n\n## Using Statements\n\n```csharp\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Storage;\nusing Microsoft.Xna.Framework.Input;\n```\n\nThese using statements make it easier to use the code that MonoGame has to offer.\n\n> They are prefixed with Microsoft.Xna.Framework because MonoGame is an open source re-implementation of Microsoft's XNA framework, and in order to maintain compatibility with the XNA code, it uses the same namespaces.\n\n## The Game1 Class\n\n```csharp\npublic class Game1 : Game\n```\n\nThe main **Game1** class inherits from the **Game** class, which provides all the core methods for your game (ie. Load/Unload Content, Update, Draw etc.). You usually only have one Game class per game, so its name is not that important.\n\n## Instance Variables\n\n```csharp\nGraphicsDeviceManager graphics;\nSpriteBatch spriteBatch;\n```\n\nThe two default variables that the blank template starts with are the **GraphicsDeviceManager** and **SpriteBatch**. Both of these variables that are used for drawing to the screen, as you will see in a later tutorial.\n\n## Constructor\n\n```csharp\npublic Game1()\n{\n    graphics = new GraphicsDeviceManager(this);\n    Content.RootDirectory = \"Content\";\n}\n```\n\nThe main game constructor is used to initialize the starting variables. In this case, a new **GraphicsDeviceManager** is created, and the root directory containing the game's content files is set.\n\n## Initialize Method\n\n```csharp\nprotected override void Initialize()\n{\n    // TODO: Add your initialization logic here\n\n    base.Initialize();\n}\n```\n\nThe **Initialize** method is called after the constructor but before the main game loop (Update/Draw). This is where you can query any required services and load any non-graphic related content.\n\n## LoadContent Method\n\n```csharp\nprotected override void LoadContent()\n{\n    // Create a new SpriteBatch, which can be used to draw textures.\n    spriteBatch = new SpriteBatch(GraphicsDevice);\n\n    // TODO: use this.Content to load your game content here\n}\n```\n\nThe **LoadContent** method is used to load your game content. It is called only once per game, within the **Initialize** method, before the main game loop starts.\n\n## Update Method\n\n```csharp\nprotected override void Update(GameTime gameTime)\n{\n    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))\n        Exit();\n\n    // TODO: Add your update logic here\n\n    base.Update(gameTime);\n}\n```\n\nThe **Update** method is called multiple times per second, and it is used to update your game state (checking for collisions, gathering input, playing audio, etc.).\n\n## Draw Method\n\n```csharp\nprotected override void Draw(GameTime gameTime)\n{\n    graphics.GraphicsDevice.Clear(Color.CornflowerBlue);\n\n    // TODO: Add your drawing code here\n\n    base.Draw(gameTime);\n}\n```\n\nSimilar to the Update method, the **Draw** method is also called multiple times per second.  This, as the name suggests, is responsible for drawing content to the screen.\n\n**Next up:** [Adding Content](4_adding_content.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/4_adding_content.md",
    "content": "# Adding Content\n\nThis tutorial will go over adding content such as images or sounds to your game.\n\n> For help with creating a project, please look at the [Creating a New Project](0_getting_started.md) section of the Getting Started guide.\n\n## MonoGame Content Builder Tool (MGCB Editor)\n\nThis tutorial assumes that you are using Visual Studio 2022 with its MonoGame extension installed. If you are not using the extension, you will need to manually install and use the [MGCB Editor](~/articles/tools/mgcb_editor.md).\n\n> This is technically optional, since you can edit the .mgcb files manually if you wish, but the editor is highly recommended for ease of use.\n\n## Adding content\n\nFirst, you will need some content for your game. For this tutorial, use the following image of a ball:\n\n![Open Content](~/images/getting_started/ball.png)\n\nCopy the image to your machine by using **right-click > Save Image As** and save it somewhere locally with the name “ball.png”.\n\nNow open up your game project and look at the Solution Explorer window. Expand the **Content** folder and open up **Content.mgcb** file by double-clicking on it.\n\n![Open Content](~/images/getting_started/3_open_content.png)\n\nYou should now see the MGCB Editor window open up. If a text file opens instead, then right-click on **Content.mgcb** and select **Open With**, then select **MGCB Editor** in the list, click **Set as Default** and then click **OK**, then try again.\n\n> If you do not see the **MGCB Editor** option when you right-click and select **Open With**, then please review the [Tools documentation](~/articles/tools/tools.md) for installing the MGCB Editor tool for your operating system.\n\n![MGCB Editor](~/images/getting_started/3_mgcb_editor_tool.png)\n\nYour game content is managed from this external tool. You can add content to your game in one of the following ways:\n\n- **Add Existing Item** toolbar button\n- **Edit > Add > Existing Item...** menu button\n- **right-click > Add > Existing Item...** context menu\n\nMake sure the \"Content\" MGCB file is selected to the left, then click the **Add Existing Item** toolbar button.\n\n![Add Content](~/images/getting_started/3_add_content.png)\n\nYou should now be prompted to select a file. Select the “**ball.png**” image that you downloaded a moment ago. Once you have confirmed your selection, you will be asked whether to copy the file, add a link to it, or skip it. Make sure \"**Copy the file to the directory**\" option is selected and click **Add**.\n\n![Copy Content](~/images/getting_started/3_copy_content.png)\n\nNow click the **Save** toolbar button and close the MGCB Editor tool.\n\n![Save Content](~/images/getting_started/3_save_content.png)\n\n---\n\n## Adding the content in your game\n\nNow that you have added the asset to the Content project, it is time to load it into your game. First, open up the **Game1.cs** class file and declare a new **ballTexture** variable of type **Texture2D** in the **Game1** class, so you can store the ball image into memory.\n\n```csharp\npublic class Game1 : Game\n{\n    Texture2D ballTexture;\n\n    private GraphicsDeviceManager _graphics;\n    private SpriteBatch _spriteBatch;\n```\n\nNext, find the **LoadContent** method. Here, use **Content.Load()** function to load the \"ball\" sprite and store it in the **ballTexture** parameter. **Content.Load()** requires you to specify what type of content you are trying to load, in this case it is a **Texture2D**.\n\n```csharp\nprotected override void LoadContent()\n{\n    // Create a new SpriteBatch, which can be used to draw textures.\n    _spriteBatch = new SpriteBatch(GraphicsDevice);\n\n    // TODO: use this.Content to load your game content here\n    ballTexture = Content.Load<Texture2D>(\"ball\");\n}\n```\n\nFinally, find the Draw method to draw the ball onto the screen. This is done by:\n\n- Opening a SpriteBatch (an image drawing collection function).\n\n- Adding the images you want to draw and specifying where you want to draw them.\n\n- Then finally closing the SpriteBatch to commit the textures you want drawn to the screen.\n\n> **Note**: if you add multiple images, they will be drawn in the order you place them from back to front (each drawn on top of each other).\n\nAs shown below:\n\n```csharp\nprotected override void Draw(GameTime gameTime)\n{\n    graphics.GraphicsDevice.Clear(Color.CornflowerBlue);\n\n    // TODO: Add your drawing code here\n    _spriteBatch.Begin();\n    _spriteBatch.Draw(ballTexture, new Vector2(0, 0), Color.White);\n    _spriteBatch.End();\n\n    base.Draw(gameTime);\n}\n```\n\nNow run the game. You should get the following:\n\n![Game](~/images/getting_started/3_game.png)\n\n**Next up:** [Adding Basic Code](5_adding_basic_code.md)\n"
  },
  {
    "path": "Documentation/articles/getting_started/5_adding_basic_code.md",
    "content": "# Adding Basic Code\n\nThis tutorial will go over adding basic logic to your game, continuing from where [Adding Content](4_adding_content.md) left off.\n\n---\n\n## Positioning the content\n\nFirst, you need to add few new variables in the Game1.cs class file: one for position and one for speed.\n\n```csharp\npublic class Game1 : Game\n{\n    Texture2D ballTexture;\n    Vector2 ballPosition;\n    float ballSpeed;\n```\n\nNext, you need to initialize them. Find the **Initialize** method and add the following lines.\n\n```csharp\n// TODO: Add your initialization logic here\nballPosition = new Vector2(_graphics.PreferredBackBufferWidth / 2,\n_graphics.PreferredBackBufferHeight / 2);\nballSpeed = 100f;\n\nbase.Initialize();\n```\n\nWith this, you are setting the ball's starting position to the center of the screen based on the dimensions of the screen determined by the current **BackBufferWidth** and **BackBufferHeight** that was obtained from the Graphics Device (the current resolution the game is running at).\n\nLastly, change the Draw method to draw the ball at the correct position.  Find the **Draw** method and update the **spriteBatch.Draw** call to:\n\n```csharp\n_spriteBatch.Draw(ballTexture, ballPosition, Color.White);\n```\n\nNow run the game.\n\n![Draw Ball 1](~/images/getting_started/4_ball_not_center.png)\n\nAs you can see, the ball is not quite centered yet. That is because the default origin of a texture is its top-left corner, or (0, 0) relative to the texture, so the ball texture is drawn with its top-left corner exactly centered, rather than its actual center. You can specify a different origin when drawing, as shown in the following code snippet. The new origin takes into account the height and width of the image when drawing:\n\n```csharp\n_spriteBatch.Draw(\n    ballTexture,\n    ballPosition,\n    null,\n    Color.White,\n    0f,\n    new Vector2(ballTexture.Width / 2, ballTexture.Height / 2),\n    Vector2.One,\n    SpriteEffects.None,\n    0f\n);\n```\n\nThis change adds a few extra parameters to the spriteBatch.Draw call, but do not worry about that for now. This new code sets the actual center (width / 2 and height / 2) of the image as its origin (drawing point). \n\nNow the image will get drawn to the center of the screen.\n\n![Draw Ball 2](~/images/getting_started/4_ball_center.png)\n\n---\n\n## Getting user input\n\nTime to set up some movement. Find the **Update** method in the Game1.cs class file and add:\n\n```csharp\n// TODO: Add your update logic here\nvar kstate = Keyboard.GetState();\n\nif (kstate.IsKeyDown(Keys.Up))\n{\n    ballPosition.Y -= ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;\n}\n\nif(kstate.IsKeyDown(Keys.Down))\n{\n    ballPosition.Y += ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;\n}\n\nif (kstate.IsKeyDown(Keys.Left))\n{\n    ballPosition.X -= ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;\n}\n\nif(kstate.IsKeyDown(Keys.Right))\n{\n    ballPosition.X += ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;\n}\n\nbase.Update(gameTime);\n```\n\nThe following is a line-by-line analysis of the above code.\n\n```csharp\nvar kstate = Keyboard.GetState();\n```\n\nThis code fetches the current keyboard state ('Keyboard.GetState()') and stores it into a variable called **kstate**.\n\n```csharp\nif (kstate.IsKeyDown(Keys.Up))\n```\n\nThis line checks to see if the Up Arrow key is pressed.\n\n```csharp\n    ballPosition.Y -= ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;\n```\n\nIf the **Up Arrow** key is pressed, the ball moves using the value you assigned to **ballSpeed**. The reason why **ballSpeed** is multiplied by **gameTime.ElapsedGameTime.TotalSeconds** is because, when not using fixed time step, the time between Update calls varies. To account for this, the ballSpeed is multiplied by the amount of time that has passed since the last Update call. The result is that the ball appears to move at the same speed regardless of what framerate the game happens to be running at.\n\n> Try experimenting with what happens if you do not multiply the **ballSpeed** by **gameTime.ElapsedGameTime.TotalSeconds**, to see the difference it makes.\n\nThe rest of the lines of code do the same thing but for the Down, Left and Right Arrow keys, and down, left, and right movement, respectively.\n\nIf you run the game, you should be able to move the ball with the arrow keys.\n\nYou will probably notice that the ball is not confined to the window. You can fix that by setting bounds onto the ballPosition after it has already been moved to ensure it cannot go further than the width or height of the screen.\n\n```csharp\nif(kstate.IsKeyDown(Keys.Right))\n{\n    ballPosition.X += ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;\n}\n\nif(ballPosition.X > GraphicsDevice.Viewport.Width - ballTexture.Width / 2)\n{\n    ballPosition.X = GraphicsDevice.Viewport.Width - ballTexture.Width / 2;\n}\nelse if(ballPosition.X < ballTexture.Width / 2)\n{\n    ballPosition.X = ballTexture.Width / 2;\n}\n\nif(ballPosition.Y > GraphicsDevice.Viewport.Height - ballTexture.Height / 2)\n{\n    ballPosition.Y = GraphicsDevice.Viewport.Height - ballTexture.Height / 2;\n}\nelse if(ballPosition.Y < ballTexture.Height / 2)\n{\n    ballPosition.Y = ballTexture.Height / 2;\n}\n\nbase.Update(gameTime);\n```\n\nNow run the game to test for yourself that the ball cannot go beyond the window bounds any more.\n\nHappy Coding ^^\n\n## Further Reading\n\nCheck out the [Tutorials section](~/articles/tutorials.md) for many more helpful guides and tutorials on building games with MonoGame.  We have an expansive library of helpful content, all provided by other MonoGame developers in the community.\n\nAdditionally, be sure to check out the official [MonoGame Samples](~/articles/samples.md) page for fully built sample projects built with MonoGame and targeting our most common platforms.\n"
  },
  {
    "path": "Documentation/articles/getting_started/toc.yml",
    "content": "- name: 1. Setting up your development environment\r\n  items:\r\n  - name: Windows\r\n    href: 1_setting_up_your_development_environment_windows.md\r\n  - name: macOS\r\n    href: 1_setting_up_your_development_environment_macos.md\r\n  - name: Linux\r\n    href: 1_setting_up_your_development_environment_ubuntu.md\r\n- name: 2. Creating a new project\r\n  items:\r\n  - name: Visual Studio 2022\r\n    href: 2_creating_a_new_project_vs.md\r\n  - name: Visual Studio 2022 for Mac\r\n    href: 2_creating_a_new_project_vsm.md\r\n  - name: .NET CLI (Rider or Visual Studio Code)\r\n    href: 2_creating_a_new_project_netcore.md\r\n- name: 3. Understanding the Code\r\n  href: 3_understanding_the_code.md\r\n- name: 4. Adding Content\r\n  href: 4_adding_content.md\r\n- name: 5. Adding Basic Code\r\n  href: 5_adding_basic_code.md\r\n"
  },
  {
    "path": "Documentation/articles/help_and_support.md",
    "content": "# Help and Support\n\nThere is a wealth of [community created content, blogs and tutorials](tutorials.md) available.\n\nIf you want to find an answer to a more specific problem, you can ask it on our [community site](https://community.monogame.net/).\n\nYou can also chat to other MonoGame users via  [Discord](https://discord.gg/xCehJFD) using the links below\n\n[![Discord](~/images/third_party/discordlogo.png)](https://discord.gg/xCehJFD)\n\n## Bugs and feature requests\n\nIf you find a bug or have a feature request, [please open a new issue](https://github.com/mono/monogame/issues). Before opening any issue, please search for existing issues.\n\nPlease note that the issue tracker is not for requesting help.\n"
  },
  {
    "path": "Documentation/articles/migrate_37.md",
    "content": "# Migrating from 3.7\n\nPreviously MonoGame installed on your machine through an installer, but from 3.8 onwards everything is installed through NuGet packages and Visual Studio Extensions.\n\n> **Note** MonoGame 3.8 project templates are not compatible with earlier versions of MonoGame.  If you wish to work on or build older MonoGame projects, then you will still need to install [MonoGame 3.7.1](https://www.monogame.net/downloads/) or earlier to open them.\n\n## WindowsDX and DesktopGL\n\nWindowsDX and DesktopGL templates now use SDK-style projects.\nTo migrate old projects we recommend creating a new project with the 3.8+ templates and copying the csproj to your project folder.  Make sure you back up your old project.\n\n> For more information about SDK-style projects see the [documentation](https://docs.microsoft.com/en-us/dotnet/core/tools/csproj).\n\n## Other Platforms\n\nTo migrate open up your project file in a text editor.\nThe reference to the MonoGame assembly looks like this:\n\n```xml\n</ItemGroup>\n    <Reference Include=\"MonoGame.Framework\">\n        <HintPath>$(MonoGameInstallDirectory)\\MonoGame\\v3.0\\Assemblies\\{Platform}\\MonoGame.Framework.dll</HintPath>\n    </Reference>\n</ItemGroup>\n```\n\nThe task to build your content is imported at the end of the project file like this:\n\n```xml\n<Import Project=\"$(MSBuildExtensionsPath)\\MonoGame\\v3.0\\MonoGame.Content.Builder.targets\" />\n```\n\nYou can remove these references and add a reference to the MonoGame NuGet packages instead.\n\n```xml\n<ItemGroup>\n    <PackageReference Include=\"MonoGame.Framework.{Platform}\" Version=\"3.8.1\" />\n    <PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1\" />\n</ItemGroup>\n```\n\n## Tooling\n\nMonoGame tools (MGCB, 2MGFX, and the Pipeline Tool) are now distributed as [.NET Tools](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools) automatically when using any of the MonoGame 3.8.1 templates.\n\nThe templates also build your .mgcb files automatically thanks to the `MonoGame.Content.Builder.Task` NuGet package.\n\nThe Pipeline Tool has been renamed MonoGame Content Builder Editor (MGCB Editor) and does not require an installation anymore (providing that you are using the MonoGame 3.8.1 templates). The Visual Studio 2022 extensions make .mgcb files within your solution clickable and will open the MGCB Editor on them.\n"
  },
  {
    "path": "Documentation/articles/migrate_38.md",
    "content": "# Migrating from 3.8.0\n\nMigrating from 3.8.0 should be straightforward for most platforms.\n\nThe major difference is that 3.8.1 now requires .NET 6 and Visual Studio 2022. You can follow the [environment setup tutorial](./getting_started/0_getting_started.md) to make sure that you are not missing any components.\n\nThe MGCB Editor is no longer a global .NET tool and we recommend that you use the new Visual Studio 2022 extension which helps accessing it without the need of CLI commands.\n\n## WindowsDX, DesktopGL, and UWP\n\nUpgrading from 3.8.0 should be as straightforward as upgrading your ```TargetFramework``` and MonoGame version.\n\nEdit your csproj file to change your ```TargetFramework```:\n\n```xml\n<TargetFramework>net6.0</TargetFramework>\n```\n\nThen edit your MonoGame ```PackageReference``` to point to 3.8.1:\n\n```xml\n<PackageReference Include=\"MonoGame.Framework.{Platform}\" Version=\"3.8.1.*\" />\n<PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1.*\" />\n```\n\n### Accessing MGCB and MCGB Editor without a global tool\n\nMGCB Editor is no longer a .NET global tool, and doesn't need to be installed or registered.\n\nHowever, if you are migrating from 3.8.0, you will need to setup a configuration file. Next to your ```.csproj```, create a folder nammed ```.config``` and a file within it nammed ```dotnet-tools.json``` with this content:\n\n```json\n{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-mgcb\": {\n      \"version\": \"3.8.1.263\",\n      \"commands\": [\n        \"mgcb\"\n      ]\n    },\n    \"dotnet-mgcb-editor\": {\n      \"version\": \"3.8.1.263\",\n      \"commands\": [\n        \"mgcb-editor\"\n      ]\n    },\n    \"dotnet-mgcb-editor-linux\": {\n      \"version\": \"3.8.1.263\",\n      \"commands\": [\n        \"mgcb-editor-linux\"\n      ]\n    },\n    \"dotnet-mgcb-editor-windows\": {\n      \"version\": \"3.8.1.263\",\n      \"commands\": [\n        \"mgcb-editor-windows\"\n      ]\n    },\n    \"dotnet-mgcb-editor-mac\": {\n      \"version\": \"3.8.1.263\",\n      \"commands\": [\n        \"mgcb-editor-mac\"\n      ]\n    }\n  }\n}\n```\n\nPlease note that you can't use the ```3.8.1.*``` wildcard in the ```dotnet-tools.json``` file (tool versions have to be fully qualified). We strongly recommand that the versions match the MonoGame version referenced in your ```.csproj``` (if you're using the ```*``` wildcard, make sure that they don't end up mismatching if the nugets are updated without you noticing).\n\nYou will also need to add this to your ```.csproj```:\n\n```xml\n  <Target Name=\"RestoreDotnetTools\" BeforeTargets=\"Restore\">\n    <Message Text=\"Restoring dotnet tools\" Importance=\"High\" />\n    <Exec Command=\"dotnet tool restore\" />\n  </Target>\n```\n\nWith these changes, .NET will automatically install the MGCB Editor for you when launching Visual Studio 2022 (if you want to install it manually and skip adding the Target, run ```dotnet tool restore``` within the project directory).\n\nThen, if you installed the Visual Studio extension, you should also be able to just double-click an ```.mgcb``` file to open the MGCB Editor. You can also open the MGCB Editor with the CLI via ```dotnet mgcb-editor``` when executed from within the project directory.\n\nThis new configuration has the advantage of allowing to have per-project versions of MGCB and its Editor (instead of per-machine like a global tool).\n\n## iOS/iPadOS, and Android\n\n.NET 6 introduced breaking changes in how csproj are defined for iOS/iPadOS and Android. We recommand that you create new projects using the 3.8.1 templates and that you copy over your project files there.\n"
  },
  {
    "path": "Documentation/articles/migrate_381.md",
    "content": "# Migrating from MonoGame 3.8.1 to KNI 4.2\n\n\n## Migrating Framework\n\nEdit your .csproj file of the main project and replace:\n\n```xml\n    <PackageReference Include=\"MonoGame.Framework.{Platform}\" Version=\"3.8.1.303\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.{Platform}\" Version=\"4.2.9001\" />\n```\n\nwhere {Platform} maps as follows.\n - Android - > Android.GL\n - DesktopGL - > SDL2.GL \n - iOS -> iOS.GL\n - WindowsUniversal -> UAP.DX11\n - WindowsDX - > WinForms.DX11\n\nFor libraries, edit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"MonoGame.Framework.DesktopGL\" Version=\"3.8.1.303\" PrivateAssets=\"All\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n```\n\n### Migrating Framework (Android)\n\nEdit your Activity1.cs file and replace:\n\n```xml\n  ScreenOrientation = ScreenOrientation.FullUser,\n```\n\nTo:\n\n```xml\n  ScreenOrientation = ScreenOrientation.FullSensor,\n```\n\n\n## Migrating Content Builder\n\nEdit your .csproj file and add:\n\n```xml\n  <PropertyGroup>\n    <KniPlatform>{Platform}</KniPlatform>\n  </PropertyGroup>\n```\n\nWhere {Platform} is Windows, DesktopGL, Android, etc.\n\nThen replace:\n\n```xml\n    <PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1.303\" />\n```\n\nWith:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n```\n\nThen rename 'MonoGameContentReference':\n\n```xml\n    <MonoGameContentReference Include=\"Content\\Content.mgcb\">\n```\n\nWith 'KniContentReference':\n\n```xml\n     <KniContentReference Include=\"Content\\Content.mgcb\">\n```\n\n\n\nif your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package.\n\n\n## Migrating Effects\n\nEdit your .fx file and rename 'VS_SHADERMODEL' and 'PS_SHADERMODEL':\n\n```\n    pass Pass0\n\t{   \n\t\tVertexShader = compile VS_SHADERMODEL VSMethod();\n\t\tPixelShader  = compile PS_SHADERMODEL PSMethod();\n\t}\n```\n\nWith 'vs_4_0_level_9_1' and 'ps_4_0_level_9_1':\n\n``` \n    pass Pass0\n\t{   \n\t\tVertexShader = compile vs_4_0_level_9_1 VSMethod();\n\t\tPixelShader  = compile ps_4_0_level_9_1 PSMethod();\n\t}\n```\n\nThen remove:\n\n```\n#if OPENGL\n\t#define SV_POSITION POSITION\n\t#define VS_SHADERMODEL vs_3_0\n\t#define PS_SHADERMODEL ps_3_0\n#else\n\t#define VS_SHADERMODEL vs_4_0_level_9_1\n\t#define PS_SHADERMODEL ps_4_0_level_9_1\n#endif\n```\n\nReplace the following defines:\n\n DEBUG with `__DEBUG__`  <br>\n MGFX with `__KNIFX__`  <br>\n HLSL and SM4 with `__DIRECTX__`  <br>\n GLSL and OPENGL with `__GL__` or (`__OPENGL__` || `__GLES__`)  <br>\n\n## Trimming (optional)\n\n### Enable Trimming (Android)\n\nEdit your .csproj file and add:\n\n```xml\n  <PropertyGroup>\n    <IsTrimmable>True</IsTrimmable>\n\t<TrimMode>partial</TrimMode>\t\n  </PropertyGroup>\n```\n\n### Enable Trimming and Aot (DesktopGL)\n\nEdit your .csproj file and upgrade TargetFramework from net6.0 to net8.0.\nThen add:\n\n```xml\n  <PropertyGroup>\n    <PublishTrimmed>True</PublishTrimmed>\n    <PublishAot>True</PublishAot>\t\n  </PropertyGroup>\n```\n"
  },
  {
    "path": "Documentation/articles/migrate_3_10.md",
    "content": "# Migrating from 3.10 to 3.11\n\n\n## Migrating Framework\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.10.9001\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.10.9001\" />\n```\n\nto:\n\n```xml   \n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.11.9002\" />\n```\n\n## Migrating Content Builder\n\nEdit your .csproj file and remove:\n\n```xml\n  <Import Project=\"$(MSBuildExtensionsPath)\\MonoGame\\v3.0\\Kni.Content.Builder.targets\" />\n```\n\nThen add:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"3.11.9002\" />\n  </ItemGroup>\n```\n\nif your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package.\n\n### Migrating BlazorGL projects\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"6.0.11\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"6.0.11\" PrivateAssets=\"all\" />\n```\n\nwith:\n\n```xml\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'net6.0'\">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"6.0.27\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"6.0.27\" PrivateAssets=\"all\" />\n  </ItemGroup>\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.2\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.2\" PrivateAssets=\"all\" />\n  </ItemGroup>\n```\n\nEdit index.html file and replace:\n\n```\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.6.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.6.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.6.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.6.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.6.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.6.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.6.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.6.0.5.js\"></script>\n```\n\nwith:\n\n```\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.0.js\"></script>\n```\n\n### Migrating OculusVR projects\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework.Oculus.OvrDX11\" Version=\"3.10.9001\" />\n    <PackageReference Include=\"nkast.LibOVR\" Version=\"1.0.0\" />\n```\n\nwith:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework.Oculus.OvrDX11\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.LibOVR\" Version=\"2.0.0\" />\n```\n\n## Trimming\n\n### Enable Trimming (Android)\n\nEdit your .csproj file and add:\n\n```xml\n  <PropertyGroup>\n    <IsTrimmable>True</IsTrimmable>\n\t<TrimMode>partial</TrimMode>\t\n  </PropertyGroup>\n```\n\n### Enable Trimming (BlazorGL)\n\nEdit your .csproj file and upgrade TargetFramework from net6.0 to net8.0.\nTrimming is enabled by default.\n\n\n### Enable Trimming and Aot (DesktopGL)\n\nEdit your .csproj file and upgrade TargetFramework from net6.0 to net8.0.\nThen add:\n\n```xml\n  <PropertyGroup>\n    <PublishTrimmed>True</PublishTrimmed>\n    <PublishAot>True</PublishAot>\t\n  </PropertyGroup>\n```\n"
  },
  {
    "path": "Documentation/articles/migrate_3_11.md",
    "content": "# Migrating from 3.11 to 3.12\n\n\n## Migrating Framework\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.11.9002\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.12.9001\" />\n```\n\nFor libraries, edit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.11.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Ref\" Version=\"3.11.9002\" PrivateAssets=\"All\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.12.9001\" />\n```\n\n## Migrating Content Builder\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"3.11.9002\" />\n  </ItemGroup>\n```\n\nto:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"3.12.9001\" />\n  </ItemGroup>\n```\n\nif your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package.\n\n"
  },
  {
    "path": "Documentation/articles/migrate_3_12.md",
    "content": "# Migrating from 3.12 to 3.13\n\n\n## Migrating Framework\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.12.9002\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.13.9001\" />\n```\n\nFor libraries, edit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.12.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.12.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.12.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.13.9001\" />\n```\n\n## Migrating Content Builder\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"3.12.9002\" />\n  </ItemGroup>\n```\n\nto:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"3.13.9001\" />\n  </ItemGroup>\n```\n\nif your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package.\n\n\n### Migrating BlazorGL projects\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'net6.0'\">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"6.0.27\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"6.0.27\" PrivateAssets=\"all\" />\n  </ItemGroup>\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.2\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.2\" PrivateAssets=\"all\" />\n  </ItemGroup>\n```\n\nwith:\n\n```xml\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'net6.0'\">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"6.0.32\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"6.0.32\" PrivateAssets=\"all\" />\n  </ItemGroup>\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.7\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.7\" PrivateAssets=\"all\" />\n  </ItemGroup>\n```\n\nEdit index.html file and replace:\n\n```\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.0.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.0.js\"></script>\n```\n\nwith:\n\n```\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.1.js\"></script>\n```\n\n### Migrating OculusVR projects\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework.Oculus.OvrDX11\" Version=\"3.12.9001\" />\n```\n\nwith:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework.Oculus.OvrDX11\" Version=\"3.13.9002\" />\n```\n"
  },
  {
    "path": "Documentation/articles/migrate_3_13.md",
    "content": "# Migrating from 3.13 to 3.14\n\n\n## Migrating Framework\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.13.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.14.9001\" />\n```\n\nFor libraries, edit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.13.9002\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.13.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.13.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.14.9001\" />\n```\n\n## Migrating Content Builder\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"3.13.9001\" />\n  </ItemGroup>\n```\n\nto:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"3.14.9001\" />\n  </ItemGroup>\n```\n\nif your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package.\n\n\n### Migrating BlazorGL projects\n\nEdit index.html file and replace:\n\n```\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.1.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.1.js\"></script>\n```\n\nwith:\n\n```\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.2.js\"></script>\n```\n\n### Migrating OculusVR projects\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework.Oculus.OvrDX11\" Version=\"3.13.9001\" />\n```\n\nwith:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework.Oculus.OvrDX11\" Version=\"3.14.9001\" />\n```\n"
  },
  {
    "path": "Documentation/articles/migrate_3_14.md",
    "content": "# Migrating from 3.14 to 4.0\n\n\n## Migrating Framework\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"MonoGame.Framework.{Platform}.9000\" Version=\"3.14.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.{Platform}\" Version=\"4.0.9001\" />\n```\n\nwhere {Platform} maps as follows.\n - Android - > Android.GL\n - BlazorGL - > Blazor.GL\n - Cardboard - > Cardboard.GL\n - DesktopGL - > SDL2.GL \n - iOS -> iOS.GL\n - WindowsUniversal -> UAP.DX11\n - WindowsDX - > WinForms.DX11\n\nFor libraries, edit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"3.14.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"3.14.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.0.9001\" />\n```\n\n## Migrating Content Builder\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"3.14.9001\" />\n  </ItemGroup>\n```\n\nto:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.0.9001\" />\n  </ItemGroup>\n```\n\nif your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package.\n\n\n### Migrating BlazorGL projects\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'net6.0'\">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"6.0.27\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"6.0.27\" PrivateAssets=\"all\" />\n  </ItemGroup>\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.7\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.7\" PrivateAssets=\"all\" />\n  </ItemGroup>\n```\n\nwith:\n\n```xml\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.11\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.11\" PrivateAssets=\"all\" />\n  </ItemGroup>\n```\n\nEdit index.html file and replace:\n\n```\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.2.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.2.js\"></script>\n```\n\nwith:\n\n```\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.XR/js/XR.8.0.5.js\"></script>\n```\n\nafter this line:\n\n```\n    import { BrotliDecode } from './js/decode.min.js';\n```\n\nadd\n\n```\n    import { BrotliDecode } from './js/decode.min.js';\n    window.BrotliDecode = BrotliDecode;\n```\n\n\n### Migrating OculusVR projects\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework.Oculus.OvrDX11\" Version=\"3.14.9001\" />\n```\n\nwith:\n\n```xml\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11.OculusOVR\" Version=\"4.0.9001\" />\n```\n\nIn Program.cs, before creating the the Game instance,\n\n```\n    using (var game = new $ext_safeprojectname$Game())\n        game.Run();\n```\n\nadd:\n```\n    Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory());\n    using (var game = new $ext_safeprojectname$Game())\n        game.Run();\n```\n\n"
  },
  {
    "path": "Documentation/articles/migrate_4_0.md",
    "content": "# Migrating from 4.0 to 4.1\n\n\n## Migrating Framework\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.{Platform}.\" Version=\"4.0.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.{Platform}\" Version=\"4.1.9001\" />\n```\n\nFor libraries, edit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.0.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.0.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.1.9001\" />\n```\n\n## Migrating Content Builder\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.0.9001\" />\n  </ItemGroup>\n```\n\nto:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.1.9001\" />\n  </ItemGroup>\n```\n\nif your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package.\n\n\n### Migrating Blazor.GL projects\n\n\nEdit /wwwroot/css/app.css file and replace:\n\n```\n#theCanvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n}\n```\n\nwith:\n\n```\n #theCanvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n\n    /* Disable text highlighting and magnifying glass on iPhone/webkit */\n    -webkit-user-select: none;\n}\n```\n\n### Migrating Oculus.GL projects\n\nEdit your AndroidManifest.xml file and add:\n\n```xml\n\t<uses-sdk android:minSdkVersion=\"32\" android:targetSdkVersion=\"32\" />\n```\n\n\n"
  },
  {
    "path": "Documentation/articles/migrate_4_1.md",
    "content": "# Migrating from 4.1 to 4.2\n\n\n## Migrating Framework\n\nEdit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.{Platform}.\" Version=\"4.1.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.{Platform}\" Version=\"4.2.9001\" />\n```\n\nFor libraries, edit your .csproj file and replace:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.1.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.1.9001\" />\n```\n\nto:\n\n```xml\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n```\n\n## Migrating Content Builder\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.1.9001\" />\n  </ItemGroup>\n```\n\nto:\n\n```xml\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n```\n\nif your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package.\n\n\n### Migrating Blazor.GL projects\n\nEdit your .csproj file and replace:\n\n```xml\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.11\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.11\" PrivateAssets=\"all\" />\n  </ItemGroup>\n```\n\nwith:\n\n```xml\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.17\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.17\" PrivateAssets=\"all\" />\n  </ItemGroup>\n```\n\nEdit index.html file and replace:\n\n```xml\n    <script src=\"_content/nkast.Wasm.Dom/js/JSObject.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.5.js\"></script>\n    <script src=\"_content/nkast.Wasm.XR/js/XR.8.0.5.js\"></script>\n```\n\nwith:\n\n```xml\n    <script src=\"_content/nkast.Wasm.JSInterop/js/JSObject.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XR/js/XR.8.0.11.js\"></script>\n```\n\nCreate a new Blazor.GL project, and copy the files:\n  \\wwwroot\\js\\micProcessor.js \n  \\wwwroot\\js\\streamProcessor.js\n\n\n### Migrating Oculus.GL projects\n\nEdit your Application.csproj file and after <TargetFramework>, add:\n\n```xml\n    <SupportedOSPlatformVersion>32.0</SupportedOSPlatformVersion>\n```\n\n\n## Migrating Effects\n\nEdit your .fx file and replace the following defines:\n\n replace DEBUG with `__DEBUG__`  <br>\n replace MGFX with `__KNIFX__`  <br>\n replace HLSL and SM4 with `__DIRECTX__`  <br>\n replace GLSL , OPENGL and `__OPENGL__` with `__GL__` or (`__OPENGL__` || `__GLES__`)  <br>\n\n\n\n"
  },
  {
    "path": "Documentation/articles/migrate_xna.md",
    "content": "# Migrating from XNA\n\nMonoGame is API compatible with [XNA 4.0](https://docs.microsoft.com/en-us/previous-versions/windows/xna/bb200104(v=xnagamestudio.41)) even down to the namespaces.  That means you do not have to change much of your game code to port from XNA to MonoGame. There are however some exceptions and some things to keep in mind.\n\n> If your game targets XNA 3.1, you might want to use this archived migration cheatsheet to upgrade to 4.0:\n> \n> [http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-cheatsheet/](https://www.nelsonhurst.com/xna-cheatsheet/)\n\n## Missing/removed API\n\n- The Storage namespace was removed due to portability issues (short discussion [here](https://github.com/MonoGame/MonoGame/issues/4311)).\n- GamerServices was removed. This part of MonoGame was badly maintained due to low usage and difficulties in providing the GamerServices API for different platforms.\n- The Net namespace was removed due to its cost of maintenance.\n\n## Effects\n\nMonoGame does not use the legacy fxc compiler for effects that XNA used. Instead, MonoGame uses the DX11 compiler.\nThe way MonoGame handles shaders imposes some restrictions and causes some caveats in what is and is not supported.\n\nThis is all documented in the [custom effects](content/custom_effects.md) documentation page.\n\n## Half pixel offset\n\nXNA uses the DirectX 9 graphics API. MonoGame uses the newer Direct X 11 API for DirectX platforms.\n\nDirectX 9 interprets UV coordinates differently from other graphics API's. This is typically referred to as the half-pixel offset.\n\nMonoGame supports replicating XNA's behavior (currently only on OpenGL platforms) by setting the `PreferHalfPixelOffset` flag in [`GraphicsDeviceManager`](xref:Microsoft.Xna.Framework.GraphicsDeviceManager) to `true`. This flag is set to `false` by default to encourage users to use the modern style of pixel addressing.\n\nDirectX platforms will ignore setting the `PreferHalfPixelOffset` flag and will\nalways render with a half pixel offset compared to XNA. This is usually not noticeable.\n\nThis value is passed to `UseHalfPixelOffset` in [`GraphicsDevice`](xref:Microsoft.Xna.Framework.Graphics.GraphicsDevice). If `UseHalfPixelOffset` is `true`, you have to add half-pixel offset to a Projection matrix.\n\n[`SpriteBatch`](xref:Microsoft.Xna.Framework.Graphics.SpriteBatch) rendering is not affected by the flag.\n\nRegardless of what value the flag has, `SpriteBatch` will render things exactly the same as in XNA.\n\nIf you migrated your game from XNA and some things seem blurred out or very slightly offset, you may want to try to enable the `PreferHalfPixelOffset` flag.\n"
  },
  {
    "path": "Documentation/articles/packaging_games.md",
    "content": "# Package games for distribution\n\nOnce your game is ready to be published, it is recommended that you package it properly for consumption by players.\n\n## Desktop games\n\nTo publish desktop games, it is recommended that you build your project as a [self-contained](https://docs.microsoft.com/en-us/dotnet/core/deploying/#publish-self-contained) .NET application. As such, your game will require absolutely no external dependencies and should run out-of-the-box as-is.\n\n### Building and packaging for Windows\n\nFrom the .NET CLI:\n\n`dotnet publish -c Release -r win-x64 /p:PublishReadyToRun=false /p:TieredCompilation=false --self-contained`\n\nYou can then zip the content of the publish folder and distribute the archive as-is.\n\nIf you are targeting WindowsDX, note that players will need [the DirectX June 2010 runtime](https://www.microsoft.com/en-us/download/details.aspx?id=8109) to be installed on their machine for audio and gamepads to work properly.\n\n### Building and packaging for Linux\n\nFrom the .NET CLI:\n\n`dotnet publish -c Release -r linux-x64 /p:PublishReadyToRun=false /p:TieredCompilation=false --self-contained`\n\nYou can then archive the content of the publish folder and distribute the archive as-is.\n\nWe recommend using the .tar.gz archiving format to preserve the execution permissions.\n\n### Build and packaging for macOS\n\nFrom the .NET CLI:\n\n```\ndotnet publish -c Release -r osx-x64 /p:PublishReadyToRun=false /p:TieredCompilation=false --self-contained\ndotnet publish -c Release -r osx-arm64 /p:PublishReadyToRun=false /p:TieredCompilation=false --self-contained\n```\n\nWe recommend that you distribute your game as an [application bundle](https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html). Application bundles are directories with the following file structure:\n\n```\nYourGame.app                    (this is your root folder)\n    - Contents\n        - Resources\n            - Content           (this is where all your content and XNB's should go)\n            - YourGame.icns     (this is your app icon, in ICNS format)\n        - MacOS\n            - amd64             (this is where your game executable for amd64 belongs, place files from the osx-x64/publish directory here)\n            - amd64             (this is where your game executable for arm64 belongs, place files from the osx-arm64/publish directory here)\n            - YourGame          (the entry point script of your app, see bellow for contents)\n        - Info.plist            (the metadata of your app, see bellow for contents)\n```\n\nThe contents of the entry point script:\n```sh\n#!/bin/bash\n\ncd \"$(dirname $BASH_SOURCE)/../Resources\"\nif [[ $(uname -p) == 'arm' ]]; then\n  ./../MacOS/arm64/YourGame\nelse\n  ./../MacOS/amd64/YourGame\nfi\n```\n\nThe Info.plist file is a standard macOS file containing metadata about your game. Here's an example file with required and recommended values set:\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>CFBundleDevelopmentRegion</key>\n    <string>en</string>\n    <key>CFBundleExecutable</key>\n    <string>YourGame</string>\n    <key>CFBundleIconFile</key>\n    <string>YourGame</string>\n    <key>CFBundleIdentifier</key>\n    <string>com.your-domain.YourGame</string>\n    <key>CFBundleInfoDictionaryVersion</key>\n    <string>6.0</string>\n    <key>CFBundleName</key>\n    <string>YourGame</string>\n    <key>CFBundlePackageType</key>\n    <string>APPL</string>\n    <key>CFBundleShortVersionString</key>\n    <string>1.0</string>\n    <key>CFBundleSignature</key>\n    <string>FONV</string>\n    <key>CFBundleVersion</key>\n    <string>1</string>\n    <key>LSApplicationCategoryType</key>\n    <string>public.app-category.games</string>\n    <key>LSMinimumSystemVersion</key>\n    <string>10.15</string>\n    <key>NSHumanReadableCopyright</key>\n    <string>Copyright © 2022</string>\n    <key>NSPrincipalClass</key>\n    <string>NSApplication</string>\n    <key>LSRequiresNativeExecution</key>\n    <true/>\n    <key>LSArchitecturePriority</key>\n    <array>\n        <string>arm64</string>\n    </array>\n</dict>\n</plist>\n```\n\nFor more information about Info.plist files, see the [documentation](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html).\n\nAfter completing these steps, your .app folder should appear as an executable application on macOS.\n\nFor archiving, we recommend using the .tar.gz format to preserve the execution permissions (you will likely run into permission issues if you use .zip at any point).\n\n## Special notes about .NET parameters\n\n.NET proposes several parameters when publishing apps that may sound helpful, but have many issues when it comes to games (because they were never meant for games in the first place, but for small lightweight applications).\n\n### ReadyToRun (R2R)\n\n[ReadyToRun](https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#readytorun-images) is advertised as improving application startup time, but slightly increasing binary size. We recommend not using it for games, because it produces micro stutters when your game is running.\n\nReady2Run code is of low quality and makes the Just-In-Time compiler (JIT) to trigger regularly to promote the code to a higher quality. Whenever the JIT runs, it produces potentially very visible stutters.\n\nDisabling ReadyToRun solves this issue (at the cost of a slightly longer startup time, but typically very negligible).\n\nReadyToRun is disabled by default. You can configure it by setting the `PublishReadyToRun` property in your csproj file.\n\nMonoGame templates for .NET projects explicitly set this to `false`.\n\n### Tiered compilation\n\n[Tiered compilation](https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#tiered-compilation) is a companion system to ReadyToRun and works on the same principle to enhance startup time. We suggest disabling it to avoid any stutter while your game is running.\n\nTiered compilation is **enabled by default**. To disable it set the `TieredCompilation` property to `false` in your csproj.\nMonoGame templates for .NET projects explicitly set this to `false`.\n\n### SingleFilePublish\n\nSingleFilePublish packages your game into a single executable file with all dependencies and content integrated.\n\nWhile it sounds very convenient, be aware that it's not magical and is in fact a hidden self-extracting zip archive. As such, it may make app startup take **a lot** longer if your game is large, and may fail to launch on systems where user permissions don't allow extracting files (or if there is not enough storage space available).\n\nWe highly recommend not using it for better compatibility across systems.\n\n## Windows Store games\n\nPlease refer to the [Windows Store documentation](https://docs.microsoft.com/en-us/windows/uwp/publish/).\n\n## Mobile games\n\nPlease refer to the Xamarin documentation:\n\n- [Android](https://docs.microsoft.com/en-us/xamarin/android/deploy-test/publishing/)\n\n- [iOS](https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/app-distribution/app-store-distribution/publishing-to-the-app-store?tabs=windows)\n"
  },
  {
    "path": "Documentation/articles/platforms.md",
    "content": "# Supported Platforms\n\nMonoGame supports building games for the following **systems**:\n\n| **Desktop PCs**             | **Mobiles**                | \n| --------------------------- | -------------------------- | \n| Windows<br/>OculusVR<br/>Web<br/>macOS<br/>Linux | iOS<br/>iPadOS<br/>Android | \n\n**Gaming consoles are restricted to registered developers and are not publicly available nor publicly documented. To get access to those platforms, please contact your console account manager(s). MonoGame documentation for closed platforms is available in their respective repositories.*\n\n## Understanding MonoGame's platform types\n\nThere are different implementations of MonoGame that we call **target platforms** (or just **platforms**).\n\nThe platforms mostly correspond to the systems MonoGame supports but some platforms support multiple systems. For instance, the *DesktopGL* platform can be used to build games that will run either on Windows, macOS, or Linux with the same base code and project.\n\nEach platform comes with its own project template that you can choose when starting a project.\n\nBelow is a list of public platforms with their corresponding NuGet package, the `dotnet new` template identifier, and an explanation of the platform. \n\n- [WindowsDX](#windowsdx)\n- [DesktopGL](#desktopgl)\n- [Windows Universal](#windowsuniversal)\n- [Android](#android)\n- [iOS](#ios)\n\nBeside these target platforms, MonoGame provides additional templates for shared game logic and extensions to the MonoGame Content Pipeline that can be used across all platforms.\n\n- [.NET Standard Library](#net-standard-library)\n- [Shared Project](#shared-project)\n- [Content Pipeline Extension](#content-pipeline-extension)\n\n## Platform details\n\n### WindowsDX\n\n| **Supported Systems** | **NuGet Package**            | **Template ID** |\n| --------------------- | ---------------------------- | --------------- |\n| Windows               | MonoGame.Framework.WindowsDX | mgwindowsdx     |\n\nWindowsDX uses WinForms to manage the game window, **DirectX** (9.0c or newer) is used for graphics, and XAudio is used for audio.\n\nYou can target **Windows*** 8.1 and up with this platform.\n\nWindowsDX requires the [DirectX June 2010](https://www.microsoft.com/en-us/download/details.aspx?id=8109) runtime to both build and run games. Make sure that your players have it installed (otherwise you might be missing sound and gamepad rumble support).\n\n### DesktopGL\n\n| **Supported Systems** | **NuGet Package**            | **Template ID** |\n| --------------------- | ---------------------------- | --------------- |\n| Windows, macOS, Linux | MonoGame.Framework.DesktopGL | mgdesktopgl     |\n\nDesktopGL uses SDL for windowing, **OpenGL** for graphics, and OpenAL-Soft for audio. \n\nDesktopGL supports **Windows** (8.1 and up), **macOS** (Catalina 10.15 and up) and **Linux** (64bit-only).\n\nDesktopGL requires at least OpenGL 2.0 with the ARB_framebuffer_object extension (or alternatively at least OpenGL 3.0).\n\nDesktopGL is a convenient way to publish builds for Windows, macOS, and Linux from a single project and source code. It also allows to cross-compile any build from any of these operating systems (e.g. you can build a Linux game from Windows).\n\nYou can target Windows 8.1 (and up), macOS Catalina 10.15 (and up), and Linux with this platform.\n\nDesktopGL currently does not have a `VideoPlayer` implementation.\n\n### WindowsUniversal\n\n| **Supported Systems**                | **NuGet Package**                   | **Template ID**                                     |\n| ------------------------------------ | ----------------------------------- | --------------------------------------------------- |\n| Windows 10, Xbox (UWP-only, not XDK) | MonoGame.Framework.WindowsUniversal | mguwpcore (core app, no xaml), mguwpxaml (xaml app) |\n\nThe WindowsUniversal platform runs on [Universal Windows Platform (UWP)](https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide).\n\nWindowsUniversal uses **DirectX** for graphics, and XAudio for audio just like the WindowsDX platform.\n\nUWP comes in two flavors, each with its own project template:\n\n- **XAML app template**: an app in which your game will be hosted within an XAML page. This can be useful if you wish to offer a more complex UWP experience with multiple pages or XAML controls.\n\n- **Core app template**: a raw app without any XAML, more straightforward if you don't need XAML controls.\n\nThis platform is meant to publish games on the **Windows Store**, for both **Windows** and **Xbox** (through the [Xbox Live Creators Program](https://www.xbox.com/en-US/developers/creators-program)).\n\nNote that UWP games running on Xbox get [restricted access](https://docs.microsoft.com/en-us/windows/uwp/xbox-apps/system-resource-allocation) to the console capabilities. To unlock those restrictions, MonoGame has a dedicated Xbox platform for registered [ID@Xbox](https://www.xbox.com/en-US/Developers/id) developers targeting the XDK (this platform is private and requires you to contact your ID@Xbox manager).\n\nBuilding for UWP requires the Windows SDK version 22621 or better to be installed.\n\n### Android\n\n| **Supported Systems** | **NuGet Package**          | **Template ID** |\n| --------------------- | -------------------------- | --------------- |\n| Android               | MonoGame.Framework.Android | mgandroid       |\n\nThe Android platform uses [Xamarin.Android](https://docs.microsoft.com/en-us/xamarin/android/). **OpenGL** is used for graphics, and OpenAL for audio.\n\nBuilding for Android requires the .NET Xamarin component to be installed. You can install it with the Visual Studio installer (if you're using Visual Studio) or with the CLI command ```dotnet workload install android``` (if you're working with Rider, VS Code, or the CLI).\n\nBuilding for Android also requires the Java 11 JDK (we recommand that you use [the Microsoft's distribution](https://docs.microsoft.com/en-us/java/openjdk/download#openjdk-11)) as well as the Android SDK 31.\n\n### iOS\n\n| **Supported Systems** | **NuGet Package**      | **Template ID** |\n| --------------------- | ---------------------- | --------------- |\n| iOS, iPadOS           | MonoGame.Framework.iOS | mgios           |\n\nThe iOS platform uses [Xamarin.iOS](https://docs.microsoft.com/en-us/xamarin/ios/). **OpenGL** is used for graphics, and OpenAL for audio.\n\nBuilding for Android requires the .NET Xamarin component to be installed. You can install it with the Visual Studio installer (if you're using Visual Studio) or with the CLI command `dotnet workload install ios` (if you're working with Rider, VS Code, or the CLI).\n\nThe latest version of Xcode will also be required.\n\nYou can test and deploy an iOS game on Windows by [pairing your Visual Studio 2022 with a mac on your local network](https://docs.microsoft.com/en-us/xamarin/ios/get-started/installation/windows/connecting-to-mac/). This feature is not avaible for Rider, Visual Studio Code, or the CLI.\n\n## Other templates\n\n### .NET Standard Library\n\n**Template ID**: mgnetstandard\n\nA project template to create [.NET Standard](https://docs.microsoft.com/en-us/dotnet/standard/net-standard) libraries to distribute code through a DLL. This can be used to redistribute libraries or to share code between multiple projects (like different platforms).\n\n### Shared Project\n\n**Template ID**: mgshared\n\nA project template to create a [shared project](https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/shared-projects) which can be used to share code between multiple other projects. The difference with .NET Standard libraries is that shared projects don't produce an intermediate DLL and the code is directly shared and built into the other projects it reference.\n\n### Content Pipeline Extension\n\n**Template ID**: mgpipeline\n\nA project template for writing custom logic for handling content and building it into XNB files.\n\n# \n"
  },
  {
    "path": "Documentation/articles/samples.md",
    "content": "# Samples & Demos\n\nThe samples and demos below are recommended for learning how to use MonoGame.\n\n## Official MonoGame Samples\n\nThese are [the official samples](https://github.com/MonoGame/MonoGame.Samples) that contain the following:\n\n- [Platformer 2D](https://github.com/MonoGame/MonoGame.Samples/tree/develop/Platformer2D)\n- [NeonShooter](https://github.com/MonoGame/MonoGame.Samples/tree/develop/NeonShooter)\n\n## XNA Game Studio Archive\n\nThe [XNA Game Studio archive](https://github.com/SimonDarksideJ/XNAGameStudio) contains all of the original XNA sample content. This contains a vast array of samples demonstrating almost every feature of XNA, which is easily translatable to MonoGame.\n\nThere are pre-converted samples available on the repository as well.\n\n## MonoGame.Extended Samples\n\n[MonoGame.Extended](https://github.com/craftworkgames/MonoGame.Extended) is an extension for MonoGame that makes it easier to make games. They have [demos](https://github.com/craftworkgames/MonoGame.Extended-samples/tree/master/src/Demos) and [games](https://github.com/craftworkgames/MonoGame.Extended-samples/tree/master/src/Games) that can be tried out.\n\n## CartBlanche's Samples\n\nThis is a [large library of MonoGame samples](https://github.com/CartBlanche/MonoGame-Samples) covering a large range of topics, including:\n\n> Will require MonoGame 3.7 or earlier installed to open.\n\n- Physics\n- P2P Networking\n- Textures\n- Shaders\n\nIt also includes games such as:\n\n- Tetris\n- Pacman\n- Role Playing Game\n"
  },
  {
    "path": "Documentation/articles/toc.yml",
    "content": "- name: Introduction\r\n  href: ../index.md\r\n- name: What's New\r\n  href: whats_new.md\r\n- name: Getting Started\r\n  href: getting_started/toc.yml\r\n  topicHref: getting_started/0_getting_started.md\r\n- name: Tools\r\n  href: tools/toc.yml\r\n  topicHref: tools/tools.md\r\n- name: Content Pipeline\r\n  href: content/toc.yml\r\n  topicHref: content/content.md\r\n- name: Supported platforms\r\n  href: platforms.md\r\n- name: Migrating from 3.7\r\n  href: migrate_37.md\r\n- name: Migrating from 3.8.0\r\n  href: migrate_38.md\r\n  name: Migrating from 3.10.9001\r\n  href: migrate_3_10.md\r\n- name: Migrating from XNA\r\n  href: migrate_xna.md\r\n- name: Packaging\r\n  href: packaging_games.md\r\n- name: Samples and Demos\r\n  href: samples.md\r\n- name: Community Tutorials\r\n  href: tutorials.md\r\n- name: Help and Support\r\n  href: help_and_support.md\r\n"
  },
  {
    "path": "Documentation/articles/tools/knifxc.md",
    "content": "# KNI Effects Compiler (KNIFXC)\n\nThe KNIFXC tool is used to compile [DirectX Effect files](https://docs.microsoft.com/en-us/windows/win32/direct3d9/writing-an-effect) (shaders) for usage with KNI. It will compile shaders into fxo files ready to be consumed by the ```Effect``` class.\n\nThe KNIFXC uses the EffectProcessor to compile effects and extract them from the xnb file.\n\nIf you compile effects with KNIFXC you can load effects using the `Microsoft.Framework.Xna.Graphics.Effect` constructor that takes a byte array with the effect code.\n\nEffects compiled with KNIFXC are not content files and can not be loaded by the `ContentManager`.\n\n## Installation\n\nKNIFXC can be installed as a [.NET tool](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools).\nMake sure you have the .NET SDK installed. You can download it [here](https://dotnet.microsoft.com/download).\n\nIn a terminal run `dotnet tool install -g dotnet-knifxc` to install KNIFXC.\n\n## Command Line\n\nThe command line options are:\n\n```bat\nKNIFXC <SourceFile> <OutputFile> [/Debug] [/Platform:<Windows,DesktopGL,Android>]\n```\n\n### Source File\n\nThe input effect file in typical FX format with samplers, techniques, and passes defined.  This parameter is required.\n\n### Output File\n\nThe path to write the compiled effect to.  This parameter is required.\n\nNOTE: The generated file is not an XNB file for use with the ContentManager.\n\nIf the `/Debug` flag is passed the resulting compiled effect file will contain extra debug information and the fewest possible optimizations.\n\n### Platform Profile\n\nThe `/Platform` option defines the platform we're targeting with this effect file.  It can be one of the following:\n\n- Windows\n- DesktopGL\n- Android\n\n### Help\n\nIf you use `/?`, `/help`, or simply pass no parameters to KNIFXC you will get information about these command-line options.\n\n## Runtime Use\n\nThe resulting compiled effect file can be used from your game code like so:\n\n```csharp\nbyte[] bytecode = File.ReadAllBytes(\"mycompiled.fxo\");\nvar effect = new Effect(bytecode);\n```\n\nThis is how the stock effects (BasicEffect, DualTextureEffect, etc) are compiled and loaded.\n"
  },
  {
    "path": "Documentation/articles/tools/mgcb.md",
    "content": "# MonoGame Content Builder (MGCB)\n\nThe MonoGame Content Builder is a command line tool for building XNB content on Windows, Mac, and Linux desktop systems.\n\nTypically, it is executed by the [MGCB Editor](mgcb_editor.md) when editing content or by `MonoGame.Content.Builder.Task` during the build process\nof a MonoGame project. Alternatively you can use it yourself from the command line for specialized build pipelines or for debugging content processing.\n\n## Installation\n\nMGCB can be installed as a [.NET tool](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools).\nMake sure you have the .NET SDK installed. You can download it [here](https://dotnet.microsoft.com/download).\n\nIn a terminal run `dotnet tool install -g dotnet-mgcb` to install MGCB. Then you can execute MGCB by simply running `mgcb`.\n\n## Command Line Options\n\nThe options are processed “left to right”. When an option is repeated, it is overwritten.\n\n### Output Directory\n\n```\n/outputDir:<directory_path>\n```\n\nSpecifies the directory where all content is written. Defaults to the current working directory.\n\n### Intermediate Directory\n\n```\n/intermediateDir:<directory_path>\n```\n\nSpecifies the directory where all intermediate files are written. Defaults to the current working directory.\n\n### Rebuild Content\n\n```\n/rebuild\n```\n\nForce a full rebuild of all content.\n\n### Clean Content\n\n```\n/clean\n```\n\nDelete all previously built content and intermediate files. Only the `/intermediateDir` and `/outputDir` need to be defined for clean to do its job.\n\n### Incremental Build\n\n```\n/incremental\n```\n\nOnly build content that changed since the last build.\n\n### Assembly Reference\n\n```\n/reference:<assembly_path>\n```\n\nAn optional parameter which adds an assembly reference which contains importers, processors, or writers needed during content building.\n\n### Target Platform\n\n```\n/platform:<target_Platform>\n```\n\nSet the target platform for this build. It must be a member of the [TargetPlatform](xref:Microsoft.Xna.Framework.Content.Pipeline.TargetPlatform) enum:\n\n* Windows\n* iOS\n* Android\n* DesktopGL\n* WindowsStoreApp\n* WebGL\n\n\nIf not set, it will default to Windows.\n\n### Target Graphics Profile\n\n```\n/profile:<graphics_Profile>\n```\n\nSet the target graphics profile for this build. It must be a member of the [GraphicsProfile](xref:Microsoft.Xna.Framework.Graphics.GraphicsProfile) enum:\n\n* Reach\n* HiDef\n\nIf not set, it will default to HiDef.\n\n### Target Build Configuration\n\n```\n/config:<build_config>\n```\n\nThe optional build configuration name from the build system. This is sometimes used as a hint in content processors.\n\n### Content Compression\n\n```\n/compress\n```\n\nUses LZ4 compression to compress the contents of the XNB files. Content build times will increase with this option enabled. Compression is not recommended for Android as the app package is already compressed. This is not compatible with LZX compression used in XNA content.\n\n### Content Importer Name\n\n```\n/importer:<class_name>\n```\n\nAn optional parameter which defines the class name of the content importer for reading source content. If the option is omitted or used without a class name the default content importer for the source type is used.\n\n### Content Processor Name\n\n```\n/processor:<class_name>\n```\n\nAn optional parameter which defines the class name of the content processor for processing imported content. If the option is omitted used without a class name the default content processor for the imported content is used.\n\nNote that when you change the processor all previously defined `/processorParam` are cleared.\n\n### Content Processor Parameter\n\n```\n/processorParam:<name>=<value>\n```\n\nAn optional parameter which defines a parameter name and value to set on a content processor.\n\nNote all defined processor parameters are cleared when the `/processor` is set.\n\n### Build Content File\n\n```\n/build:<content_filepath>\n/build:<content_filepath>;<destination_filepath>\n```\n\nInstructs the content builder to build the specified content file using the previously set switches and options. Optional destination path may be specified if you want to change the output file path.\n\n### Launch Debugger\n\n```\n/launchdebugger\n```\n\nAllows a debugger to attach to the MGCB executable before content is built.\n\n### Response File\n\n```\n/@:<response_filepath>\n```\n\nThis defines a text response file (sometimes called a command file) that contains the same options and switches you would normally find on the command line.\n\nEach switch is specified on a new line. Comment lines are prefixed with #. These lines are ignored. You can specify multiple response files or mix normal command line switches with response files.\n\nAn example response file could look like this:\n\n```\n# Directories\n/outputDir:bin/foo\n/intermediateDir:obj/foo\n\n/rebuild\n\n# Build a texture\n/importer:TextureImporter\n/processor:TextureProcessor\n/processorParam:ColorKeyEnabled=false\n/build:Textures\\wood.png\n/build:Textures\\metal.png\n/build:Textures\\plastic.png\n```\n\n#### Preprocessor Macros\n\nResponse files support preprocessor macros to allow conditionals within a response file.\n\n```\n$if <name>=<value>\n$endif\n```\n\nPreprocessor symbols can be defined from the command line with the `define` option or in a response file with the `$set` directive.\n\n```\n<example command line>\nMGCB.exe /define:BuildEffects=No /@:example.mgcb\n\n<example.mgcb file>\n$if BuildEffects=Yes\n   /importer:EffectImporter\n   /processor:EffectProcessor\n   /build:Effects\\custom.fx\n   # all other effects here....\n$endif\n```\n\n```\n$set BuildEffects=Yes\n\n$if BuildEffects=Yes\n    # ...\n    # This is executed\n$endif\n```\n\nFor booleans you can omit a value to set a symbol and to check if it is set:\n\n```\n$set BuildEffects\n\n$if BuildEffects\n    # ...\n    # This is executed\n$endif\n```\n\n### Customizing your Build Process\n\nWhen building content from your project with `MonoGame.Content.Builder.Task`, there are a few ways to hook into the build process. `MonoGame.Content.Builder.Task` runs a target called\n`RunContentBuilder` just before your project builds. If you want to do any processing before or after this process you can use the `BeforeTargets` and `AfterTargets` mechanism provided\nby `msbuild` to run your own targets.\n\n```\n<Target Name=\"MyBeforeTarget\" BeforeTargets=\"RunContentBuilder\">\n   <Message Text=\"MyBeforeTarget Ran\"/>\n</Target>\n<Target Name=\"MyAfterTarget\" AfterTargets=\"RunContentBuilder\">\n   <Message Text=\"MyAfterTarget Ran\"/>\n</Target>\n```\n\nIf you want to customize the arguments sent to the `MGCB.exe` as part of the build process you can use the `<KniContentBuilderArguments>` property to define those.\nFor example to pass in the current project configuration you could include the following code in a PropertyGroup in your .csproj file.\n\n```\n<KniContentBuilderArguments>-config:$(Configuration)</KniContentBuilderArguments>\n```\n"
  },
  {
    "path": "Documentation/articles/tools/mgcb_editor.md",
    "content": "# MGCB Editor\n\nMonoGame Content Builder (MGCB) Editor is the front-end GUI editor for MonoGame content builder projects.\n\n![MCGB Editor](~/images/MGCB-editor.png)\n\nThe MGCB Editor has the following features:\n\n* Create, open, and save MGCB projects.\n* Import existing XNA .contentproj.\n* Tree view showing content of project.\n* Property grid for editing content settings.\n* Full undo/redo support.\n* Build, rebuild, and clean the project.\n* Rebuild selected items.\n* Create new content like fonts and xml.\n* Support for custom importers/processors/writers.\n* Template format for adding new custom content types.\n\n## Installation Instructions\n\nThe MGCB Editor is automatically installed (if you are using MonoGame's templates) and accessible by double-clicking an .mgcb file from Visual Studio 2022 (if you have the extension installed).\n\nAlternatively, you can open the MGCB Editor from the .NET command line. This will only work if you are using the MonoGame templates and executing the command from the root directory of your project:\n\n```\ndotnet mgcb-editor\n```\n\nIf it is the first time you run the tool, you might need to restore tools first (.NET should invite you to do so if you try the above command):\n\n```\ndotnet tool restore\n```\n\nSee [Using MGCB Editor](~/articles/content/using_mgcb_editor.md) for more information.\n"
  },
  {
    "path": "Documentation/articles/tools/toc.yml",
    "content": "- name: MGCB\r\n  href: mgcb.md\r\n- name: MGCB Editor\r\n  href: mgcb_editor.md\r\n- name: KNIFXC\r\n  href: knifxc.md\r\n"
  },
  {
    "path": "Documentation/articles/tools/tools.md",
    "content": "# Tools\n\nMonoGame distributes tooling to help manage and build content for your game.\n\nThese tools are available as [.NET Tools](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools) and are automatically installed if you are using the MonoGame templates.\n\nUsage instructions are on the following pages:\n\n- [MonoGame Content Builder](mgcb.md) (MGCB): used to build content pipeline content.\n- [MGCB Editor](mgcb_editor.md): The MonoGame Content Builder (MGCB) Editor is a graphical front end to edit mgcb files.\n- [KNI Effect Compiler](knifxc.md) (KNIFXC): used to compile stand alone effects (shaders).\n"
  },
  {
    "path": "Documentation/articles/tutorials.md",
    "content": "# Tutorials\n\nCheck out the awesome work of the larger MonoGame community with their own tutorials, blogs and videos.\n\n> If you have a blog or article on MonoGame and wish to have it recognized here, reach out to the MonoGame team using the [support links listed on the help page](help_and_support.md).\n\n## Microsoft\n\n- [Archived XNA Game Studio documentation](https://docs.microsoft.com/en-us/previous-versions/windows/xna/bb200104(v=xnagamestudio.41))\n- [XNA Game Studio educational resources archive](https://github.com/SimonDarksideJ/XNAGameStudio)\n\n## RB Whitaker's MonoGame Tutorials\n\n- [1 - C# Crash Course](http://rbwhitaker.wikidot.com/c-sharp-tutorials)\n- [2 - MonoGame Getting started tutorials](http://rbwhitaker.wikidot.com/monogame-getting-started-tutorials)\n- [3 - MonoGame 2D tutorials](http://rbwhitaker.wikidot.com/monogame-2d-tutorials)\n- [4 - 3D tutorials](http://rbwhitaker.wikidot.com/monogame-3d-tutorials)\n- [Extra - XNA tutorials](http://rbwhitaker.wikidot.com/xna-tutorials)\n\n## Neil Danson's F# series\n\n- [Part 1 - MacOS](http://neildanson.wordpress.com/2013/07/30/f-and-monogame/)\n- [Part 2 - Android](http://neildanson.wordpress.com/2013/07/31/f-and-monogame-part-2-android/)\n- [Part 3 - iOS](http://neildanson.wordpress.com/2013/07/31/f-and-monogame-part-3-ios/)\n- [Part 4 - Content Pipeline](http://neildanson.wordpress.com/2013/08/13/f-and-monogame-part-4-content-pipeline/)\n\n## Darkside of MonoGame video series\n\n- [Getting Started with MonoGame using Visual Studio 2019](https://www.youtube.com/watch?v=BahlvXQcJw4)\n- [Getting Started with MonoGame using Visual Studio for Mac](https://www.youtube.com/watch?v=Hxo9A0-qcVo)\n- [Getting Started with MonoGame using the command-line](https://www.youtube.com/watch?v=MOcZriFLt7c)\n- [Walk-through setting up your Mac for MonoGame CLI](https://www.youtube.com/watch?v=2c_41vMhDYo)\n- [Getting Started with MonoGame using 2D](https://www.youtube.com/watch?v=6inkDfpUxAU)\n- [Getting Started with MonoGame using XML](https://www.youtube.com/watch?v=wCc_rLrqsIo)\n- [Getting the most out of your assets–The MonoGame Content Pipeline](https://www.youtube.com/watch?v=5mEQqCgTaLU)\n- [MonoGame - Building multi-platform solutions](https://www.youtube.com/watch?v=WonVmlpPBuU&t=735s)\n- [Building apps & games for Xbox One using UWP](https://www.youtube.com/watch?v=AAMToCwPy8s&t=1s)\n\n## Video Tutorials\n\n- [CodingMadeEasy RPG Tutorial](http://www.youtube.com/watch?feature=player_embedded&v=agt9-J9RPZ0)\n- [Psuedo Games Tutorials](http://www.youtube.com/watch?feature=player_embedded&v=BwtQn02oy6A)\n- [Desenvolvendo jogos multiplataforma em C# com MonoGame - Alexandre Chohfi (Portuguese)](http://channel9.msdn.com/Blogs/MSDN-Brasil-Cursos-de-Desenvolvimento/Desenvolvendo-jogos-multiplataforma-em-C-com-MonoGame)\n- [Desenvolvimento de jogos para Windows 8 com XNA - Alexandre Chohfi (Portuguese)](https://www.youtube.com/watch?v=gM5pRnYV1tA)\n- [Batholith Entertainment Game dev tutorials](https://www.youtube.com/playlist?list=PLZ6ofHM1rvK8lQSoKX1USZstM-ZXikFHp)\n- [Let's Code: The T-Rex Runner Game with MonoGame](https://www.youtube.com/watch?v=DJCQVJ83J1U)\n\n## Others\n\n- [Dark Genesis Blog MonoGame content](http://darkgenesis.zenithmoon.com/tag/monogame/)\n- [awesome-monogame - A large list of MonoGame libraries and more by aloisdeniel](https://github.com/aloisdeniel/awesome-monogame)\n- [A collection of tutorials, libraries and more, many of which are MonoGame related](https://github.com/UnterrainerInformatik/GameDevelopmentLinks)\n- [How to create animations and sprite sheets for MonoGame](https://www.codeandweb.com/texturepacker/tutorials/how-to-create-sprite-sheets-and-animations-with-monogame)\n- [Making a platformer in F# with MonoGame](http://bruinbrown.wordpress.com/2013/10/06/making-a-platformer-in-f-with-monogame/)\n- [XNA 4.0 Shader Programming / HLSL](http://digitalerr0r.wordpress.com/tutorials/)\n- [Using Spine with MonoGame - by Randolph Burt (Randeroo)](http://randolphburt.co.uk/2013/03/30/dragons-and-dancing-crabs/)\n- [Mac porting series](http://benkane.wordpress.com/2012/01/20/the-great-porting-adventure-day-8/)\n- [Porting a Windows Phone 7 Game to Android](http://warrenburch.blogspot.co.uk/2011/12/porting-windows-phone-7-game-to-android.html)\n- [A series on embedding MonoGame/WinGL into WinForms](http://jaquadro.com/2013/03/bringing-your-xna-winforms-controls-to-monogame-opengl/)\n- [French articles about MonoGame on Linux, Windows and Windows 8](http://www.demonixis.net/blog/category/tutoriels/tuto-xna/)\n- [MonoGame \"Hello World\" on Mac OS X and Xamarin Studio](http://jaquadro.com/2013/09/monogame-hello-world-on-mac-os-x-and-xamarin-studio/)\n- [Solving Resolution Independent Rendering And 2D Camera Using MonoGame](http://blog.roboblob.com/2013/07/27/solving-resolution-independent-rendering-and-2d-camera-using-monogame/)\n- [XNA is Dead; Long Live the New XNA, MonoGame](http://www.codemag.com/Article/1411081)\n- [Running MonoGame on Android Wear](http://crossplatform.io/running-monogame-on-android-wear/)\n- [Text rendering in MonoGame](https://roy-t.nl/2018/07/04/Text-Rendering.html)\n- [Randomchaos-MonoGame-Samples](https://github.com/NemoKradXNA/Randomchaos-MonoGame-Samples)\n"
  },
  {
    "path": "Documentation/articles/whats_new.md",
    "content": "# What's New\n\nThe MonoGame 3.8.1 release marks some big changes since 3.8.0 in how we build and distribute.\n\n> [!NOTE] Refer to the [Changelog](../../CHANGELOG.md) for a more complete list of changes.\n\n## .NET 6 Support\n\nWe now support [.NET 6](https://docs.microsoft.com/en-us/dotnet/core/introduction) exclusively.  This brings us up to date with the latest improvements in the .NET ecosystem and allows for exciting new features like [.NET NativeAOT Runtime](https://github.com/dotnet/runtimelab/tree/feature/NativeAOT) and much easier distribution of your games for Windows, macOS and Linux.\n\n## Visual Studio 2022 extension\n\nMonoGame 3.8.1 now comes with an optional Visual Studio extension which will install all the MonoGame project templates and will allow a quick access to the [MGCB Editor](./tools/mgcb_editor.md).\n\nThis extension is avaible for Visual Studio 2022, and Visual Studio 2022 for Mac.\n\n## Visual Studio 2019 and prior are no more supported\n\nBecause .NET 6 isn't supported by Visual Studio 2019, starting with MonoGame 3.8.1 it will no more be possible to build games with it.\n\nMoving forward, we will only support Visual Studio 2022, and Visual Studio 2022 for Mac.\n\nIf you need to use Visual Studio 2019, we encourage you to stick to MonoGame 3.8.0.\n\nJetBrains Rider and Visual Studio Code can be used regardless of the version of MonoGame.\n\n## Last version to support 32bit Windows\n\nMonoGame 3.8.1 will be the last version to support building and running 32bit games on Windows.\n\nThis is motivated by the fact that 32bit players are near full extinction (less than 0.24% of the Steam user base). It will also help developers with less complex distribution and less confusing debug/build experiences.\n\n## Apple M1 silicon support\n\nGames built using the ```DesktopGL``` [platform](./platforms.md) and targeting ```osx-arm64``` will now run natively on Apple M1 silicon without Rosetta emulation.\n\n**However**, it is not yet possible to use the [MGCB](./tools/mgcb.md) or the [MGCB Editor](./tools/mgcb_editor.md) on Apple M1 silicon, unless you are running the ```osx-x64``` variant of the .NET SDK (and therefore using Rosetta emulation). We are working toward resolving this inconvenience.\n"
  },
  {
    "path": "Documentation/docfx.json",
    "content": "{\r\n  \"metadata\": [\r\n    {\r\n      \"src\": [\r\n        {\r\n          \"src\": \"..\",\r\n          \"files\": [ \r\n            \"MonoGame.Framework/MonoGame.Framework.WindowsDX.csproj\",\r\n            \"MonoGame.Framework.Content.Pipeline/MonoGame.Framework.Content.Pipeline.csproj\"\r\n          ]\r\n        }\r\n      ],\r\n\r\n      \"dest\": \"obj/api/merged\"\r\n    }\r\n  ],\r\n  \"build\": {\r\n    \"content\": [\r\n      {\r\n        \"src\": \"obj/api/merged\",\r\n        \"dest\": \"api/\",\r\n        \"files\": [\r\n          \"**.yml\",\r\n          \"index.md\"\r\n        ]\r\n      },\r\n      {\r\n        \"files\": [\r\n          \"articles/**.md\",\r\n          \"articles/**/toc.yml\",\r\n          \"toc.yml\",\r\n          \"index.md\"\r\n        ],\r\n        \"exclude\": [\r\n          \"**/bin/**\",\r\n          \"**/obj/**\",\r\n          \"_site/**\",\r\n          \"**~\"\r\n        ]\r\n      },\r\n      {\r\n        \"src\": \"..\",\r\n        \"files\": [\r\n          \"CHANGELOG.md\"\r\n        ]\r\n      }\r\n    ],\r\n    \"resource\": [\r\n      {\r\n        \"files\": [\r\n          \"images/**\"\r\n        ],\r\n        \"exclude\": [\r\n          \"**/bin/**\",\r\n          \"**/obj/**\",\r\n          \"**~\"\r\n        ]\r\n      }\r\n    ],\r\n    \"xrefService\": [\r\n      \"https://xref.docs.microsoft.com/query?uid={uid}\"\r\n    ],\r\n    \"overwrite\": [\r\n      {\r\n        \"files\": [\r\n          \"apidoc/**.md\"\r\n        ],\r\n        \"exclude\": [\r\n          \"**/bin/**\",\r\n          \"**/obj/**\",\r\n          \"_site/**\",\r\n          \"**~\"\r\n        ]\r\n      }\r\n    ],\r\n    \"dest\": \"_site\",\r\n    \"postProcessors\": [\r\n    ],\r\n    \"globalMetadata\": {\r\n      \"_appTitle\": \"MonoGame Documentation\",\r\n      \"_appLogoPath\": \"images/mg-logo-white.svg\",\r\n      \"_appFaviconPath\": \"images/favicon-192x192.png\",\r\n      \"_appFooter\": \"<p>© 2012 Microsoft Corporation. All rights reserved.</p><p>© The MonoGame Team.</p>\",\r\n      \"baseDir\": \"MonoGame-docfx\"\r\n    },\r\n    \"fileMetadataFiles\": [\r\n      \"metadata.json\"\r\n    ],\r\n    \"template\": [\r\n      \"default\",\r\n      \"theme/material\",\r\n      \"theme/monogame\"\r\n    ],\r\n    \"noLangKeyword\": false\r\n  }\r\n}\r\n\r\n"
  },
  {
    "path": "Documentation/index.md",
    "content": "---\nuid: index.md\ntitle: Introduction\n---\n\n<p align=\"center\">\n<br/>\n  <img src=\"https://raw.githubusercontent.com/Mono-Game/MonoGame.Logo/master/FullColorOnLight/HorizontalLogo_128px.png\"/>\n<br/>\n<br/>\n</p>\n\nWelcome to the MonoGame documentation hub!\n\nMonoGame is a simple and powerful .NET framework for creating games for desktop PCs, video game consoles, and mobile devices using the C# programming language.\n\nIt is a re-implementation of the discontinued [Microsoft's XNA Framework](https://msdn.microsoft.com/en-us/library/bb200104.aspx), and it provides the following features:\n\n- Game framework\n- 2D and 3D rendering\n- Sound effect and music playback\n- Keyboard, mouse, touch, and controller inputs\n- Content building and optimization\n- Math library optimized for games\n\nThis documentation [helps you to get started](articles/getting_started/0_getting_started.md) by providing overviews of key features and tools, and a complete API reference.\n\nPlease use the links at the top and left to navigate the documentation sections.\n\n> This documentation assume that the reader has a basic knowledge of the C# programming language.\n\n## What is MonoGame exactly?\n\nMonoGame is a \"bring your own tools\" kind of framework, which means that it provides the building blocks to build your own engine and tools, but it isn't quite an engine itself.\n\nIf you are expecting a scene editor (like Unity or Unreal), MonoGame is not that.\n\nIf you love coding and understanding how things work under the hood, MonoGame might be what you are looking for. And fear not, getting a game running with MonoGame only takes a few minutes.\n\n[Let's get started!](articles/getting_started/0_getting_started.md)\n\n## We Need Your Help!\n\nMonoGame is an open-source project maintained by its community. Great open source projects require high-quality documentation. This is a call for volunteers to continue to help us make the MonoGame documentation truly great. If you can create tutorials, feature guides, code snippets, reference docs, video walkthroughs, or make any improvement to the current documentation, we could use your help!\n\nCheck out the [README on GitHub](https://github.com/MonoGame/MonoGame/blob/develop/README.md) or [talk with us on the community site](http://community.monogame.net/t/lets-improve-the-monogame-documentation/916) to learn how to help! For a quick start, you can jump on this [list of documentation tasks](https://github.com/MonoGame/MonoGame/projects/4).\n"
  },
  {
    "path": "Documentation/metadata.json",
    "content": "{\r\n  \"_disableAffix\": {\r\n    \"index.md\": true\r\n  },\r\n  \"_disableContribution\": {\r\n    \"../CHANGELOG.md\": true\r\n  },\r\n  \"_disableBreadcrumb\": {\r\n    \"index.md\": true,\r\n    \"../CHANGELOG.md\": true,\r\n    \"articles/**\": true\r\n  }\r\n}\r\n"
  },
  {
    "path": "Documentation/theme/material/partials/head.tmpl.partial",
    "content": "{{!Copyright (c) Oscar Vasquez. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}\n\n<head>\n  <meta charset=\"utf-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}</title>\n  <meta name=\"viewport\" content=\"width=device-width\">\n  <meta name=\"title\" content=\"{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}\">\n  <meta name=\"generator\" content=\"docfx {{_docfxVersion}}\">\n  {{#_description}}<meta name=\"description\" content=\"{{_description}}\">{{/_description}}\n  <link rel=\"shortcut icon\" href=\"{{_rel}}{{{_appFaviconPath}}}{{^_appFaviconPath}}favicon.ico{{/_appFaviconPath}}\">\n  <link rel=\"stylesheet\" href=\"{{_rel}}styles/docfx.vendor.css\">\n  <link rel=\"stylesheet\" href=\"{{_rel}}styles/docfx.css\">\n  <link rel=\"stylesheet\" href=\"{{_rel}}styles/main.css\">\n  <link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\"> \n  <meta property=\"docfx:navrel\" content=\"{{_navRel}}\">\n  <meta property=\"docfx:tocrel\" content=\"{{_tocRel}}\">\n  {{#_noindex}}<meta name=\"searchOption\" content=\"noindex\">{{/_noindex}}\n  {{#_enableSearch}}<meta property=\"docfx:rel\" content=\"{{_rel}}\">{{/_enableSearch}}\n  {{#_enableNewTab}}<meta property=\"docfx:newtab\" content=\"true\">{{/_enableNewTab}}\n</head>"
  },
  {
    "path": "Documentation/theme/material/styles/main.css",
    "content": "/* Custom css for MG theme */\n\n.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {\n  border-top: none;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #fff3;\n}\n.navbar-inverse .navbar-toggle:focus,\n.navbar-inverse .navbar-toggle:hover {\n  border-color: #fff3;\n  background-color: #fff1;\n}\n\n/* COLOR VARIABLES*/\n:root {\n  --header-bg-color: #e73c00;\n  --header-ft-color: #fff;\n  --highlight-light: #ff6933;\n  --highlight-dark: #e73c00;\n  --font-color: #34393e;\n  --custom-box-shadow: 0 1px 2px 0 rgba(61, 65, 68, 0.06), 0 1px 3px 1px rgba(61, 65, 68, 0.16);\n}\n\nbody {\n  color: var(--font-color);\n  font-family: \"Roboto\", sans-serif;\n  line-height: 1.5;\n  font-size: 16px;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n  word-wrap: break-word;\n}\n\n/* HIGHLIGHT COLOR */\n\nbutton,\na {\n  color: var(--highlight-dark);\n  cursor: pointer;\n}\n\nbutton:hover,\nbutton:focus,\na:hover,\na:focus {\n  color: var(--highlight-light);\n  text-decoration: none;\n}\n.affix > ul > li.active > a, .affix > ul > li.active > a::before {\n  color: var(--highlight-dark);\n}\n.affix ul > li.active > a, .affix ul > li.active > a::before {\n  color: var(--highlight-dark);\n}\n\n.toc .nav > li.active > a {\n  color: var(--highlight-dark);\n}\n.toc .nav > li.active > a:hover\n.toc .nav > li.active > a:focus {\n  color: var(--highlight-light);\n}\n\n.toc .nav > li.active > a:hover,\n.toc .nav > li.active > a:focus {\n  color: var(--highlight-light);\n}\n\n.pagination > .active > a {\n  background-color: var(--header-bg-color);\n  border-color: var(--header-bg-color);\n}\n\n.pagination > .active > a,\n.pagination > .active > a:focus,\n.pagination > .active > a:hover,\n.pagination > .active > span,\n.pagination > .active > span:focus,\n.pagination > .active > span:hover {\n  background-color: var(--highlight-light);\n  border-color: var(--highlight-light);\n}\n\n/* HEADINGS */\n\nh1 {\n  font-weight: 600;\n  font-size: 32px;\n}\n\nh2 {\n  font-weight: 600;\n  font-size: 24px;\n  line-height: 1.8;\n}\n\nh3 {\n  font-weight: 600;\n  font-size: 20px;\n  line-height: 1.8;\n}\n\nh5 {\n  font-size: 14px;\n  padding: 10px 0px;\n}\n\narticle h1,\narticle h2,\narticle h3,\narticle h4 {\n  margin-top: 35px;\n  margin-bottom: 15px;\n}\n\narticle h4 {\n  padding-bottom: 8px;\n  border-bottom: 2px solid #ddd;\n}\n\n/* NAVBAR */\n\n.navbar-brand > img {\n  color: var(--header-ft-color);\n}\n\n.navbar {\n  border: none;\n  /* Both navbars use box-shadow */\n  -webkit-box-shadow: var(--custom-box-shadow);\n  -moz-box-shadow: var(--custom-box-shadow);\n  box-shadow: var(--custom-box-shadow);\n}\n\n.subnav {\n  border-top: 1px solid #ddd;\n  background-color: #fff;\n}\n\n.navbar-inverse {\n  background-color: var(--header-bg-color);\n  z-index: 100;\n}\n\n.navbar-inverse .navbar-nav > li > a,\n.navbar-inverse .navbar-text {\n  color: var(--header-ft-color);\n  background-color: var(--header-bg-color);\n  border-bottom: 3px solid transparent;\n  padding-bottom: 12px;\n}\n\n.navbar-inverse .navbar-nav > li > a:focus,\n.navbar-inverse .navbar-nav > li > a:hover {\n  color: var(--header-ft-color);\n  background-color: var(--header-bg-color);\n  border-bottom: 3px solid white;\n}\n\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:focus,\n.navbar-inverse .navbar-nav > .active > a:hover {\n  color: var(--header-ft-color);\n  background-color: var(--header-bg-color);\n  border-bottom: 3px solid white;\n}\n\n.navbar-form .form-control {\n  border: none;\n  border-radius: 20px;\n}\n\n/* SIDEBAR */\n\n.toc .level1 > li {\n  font-weight: 400;\n}\n\n.toc .nav > li > a {\n  color: var(--font-color);\n}\n\n.sidefilter {\n  background-color: #fff;\n  border-left: none;\n  border-right: none;\n}\n\n.sidefilter {\n  background-color: #fff;\n  border-left: none;\n  border-right: none;\n}\n\n.toc-filter {\n  padding: 10px;\n  margin: 0;\n}\n\n.toc-filter > input {\n  border: 2px solid #ddd;\n  border-radius: 20px;\n}\n\n.toc-filter > .filter-icon {\n  display: none;\n}\n\n.sidetoc > .toc {\n  background-color: #fff;\n  overflow-x: hidden;\n}\n\n.sidetoc {\n  background-color: #fff;\n  border: none;\n}\n\n/* ALERTS */\n\n.alert {\n  padding: 0px 0px 5px 0px;\n  color: inherit;\n  background-color: inherit;\n  border: none;\n  box-shadow: var(--custom-box-shadow);\n}\n\n.alert > p {\n  margin-bottom: 0;\n  padding: 5px 10px;\n}\n\n.alert > ul {\n  margin-bottom: 0;\n  padding: 5px 40px;\n}\n\n.alert > h5 {\n  padding: 10px 15px;\n  margin-top: 0;\n  text-transform: uppercase;\n  font-weight: bold;\n  border-radius: 4px 4px 0 0;\n}\n\n.alert-info > h5 {\n  color: #1976d2;\n  border-bottom: 4px solid #1976d2;\n  background-color: #e3f2fd;\n}\n\n.alert-warning > h5 {\n  color: #f57f17;\n  border-bottom: 4px solid #f57f17;\n  background-color: #fff3e0;\n}\n\n.alert-danger > h5 {\n  color: #d32f2f;\n  border-bottom: 4px solid #d32f2f;\n  background-color: #ffebee;\n}\n\n/* CODE HIGHLIGHT */\npre {\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #fffaef;\n  border-radius: 4px;\n  border: none;\n  box-shadow: var(--custom-box-shadow);\n}\n"
  },
  {
    "path": "Documentation/theme/monogame/partials/head.tmpl.partial",
    "content": "{{!Copyright (c) Oscar Vasquez. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}\r\n\r\n<head>\r\n  <meta charset=\"utf-8\">\r\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\r\n  <title>{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}</title>\r\n  <meta name=\"viewport\" content=\"width=device-width\">\r\n  <meta name=\"title\" content=\"{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}\">\r\n  <meta name=\"generator\" content=\"docfx {{_docfxVersion}}\">\r\n  {{#_description}}<meta name=\"description\" content=\"{{_description}}\">{{/_description}}\r\n  <link rel=\"shortcut icon\" href=\"{{_rel}}{{{_appFaviconPath}}}{{^_appFaviconPath}}favicon.ico{{/_appFaviconPath}}\">\r\n  <link rel=\"stylesheet\" href=\"{{_rel}}styles/docfx.vendor.css\">\r\n  <link rel=\"stylesheet\" href=\"{{_rel}}styles/docfx.css\">\r\n  <link rel=\"stylesheet\" href=\"{{_rel}}styles/main.css\">\r\n  <link rel=\"stylesheet\" href=\"{{_rel}}styles/monogame.css\">\r\n  <link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\"> \r\n  <meta property=\"docfx:navrel\" content=\"{{_navRel}}\">\r\n  <meta property=\"docfx:tocrel\" content=\"{{_tocRel}}\">\r\n  {{#_noindex}}<meta name=\"searchOption\" content=\"noindex\">{{/_noindex}}\r\n  {{#_enableSearch}}<meta property=\"docfx:rel\" content=\"{{_rel}}\">{{/_enableSearch}}\r\n  {{#_enableNewTab}}<meta property=\"docfx:newtab\" content=\"true\">{{/_enableNewTab}}\r\n</head>\r\n"
  },
  {
    "path": "Documentation/theme/monogame/partials/navbar.tmpl.partial",
    "content": "{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}\r\n\r\n<nav id=\"autocollapse\" class=\"navbar navbar-inverse ng-scope\" role=\"navigation\">\r\n  <div class=\"container\" style=\"height: 50px\">\r\n    <div class=\"navbar-header\">\r\n      <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar\">\r\n        <span class=\"sr-only\">Toggle navigation</span>\r\n        <span class=\"icon-bar\"></span>\r\n        <span class=\"icon-bar\"></span>\r\n        <span class=\"icon-bar\"></span>\r\n      </button>\r\n      {{>partials/logo}}\r\n    </div>\r\n    <div class=\"collapse navbar-collapse\" id=\"navbar\">\r\n      <form class=\"navbar-form navbar-right\" role=\"search\" id=\"search\">\r\n        <div class=\"form-group\">\r\n          <input type=\"text\" class=\"form-control\" id=\"search-query\" placeholder=\"Search\" autocomplete=\"off\">\r\n        </div>\r\n      </form>\r\n    </div>\r\n    <div class=\"mg-link-block\">\r\n      <a class=\"mg-link\" href=\"https://monogame.net\">Back to monogame.net</a>\r\n    </div>\r\n  </div>\r\n</nav>\r\n"
  },
  {
    "path": "Documentation/theme/monogame/styles/monogame.css",
    "content": ".article {\r\n  margin-top: 80px;\r\n}\r\n\r\n.mg-link {\r\n  display: block;\r\n  padding: 15px 15px 0 15px;\r\n  color: var(--header-ft-color);\r\n}\r\n.mg-link:hover,\r\n.mg-link:focus {\r\n  color: var(--header-ft-color);\r\n}\r\n\r\n.mg-link-block {\r\n  float: right;\r\n}\r\n\r\n@media (min-width: 768px) {\r\n  #navbar {\r\n    display: inline-block !important;\r\n  }\r\n}\r\n\r\n@media (max-width: 767px) {\r\n  .mg-link-block {\r\n    display: none;\r\n  }\r\n}\r\n\r\n"
  },
  {
    "path": "Documentation/toc.yml",
    "content": "- name: Articles\r\n  href: articles/\r\n- name: Api\r\n  href: obj/api/merged/\r\n- name: Changelog\r\n  href: ../CHANGELOG.md\r\n\r\n"
  },
  {
    "path": "ISSUE_TEMPLATE.md",
    "content": "<!--\n# Please make sure that the issue is present in the\n# develop branch of KNI before reporting\n#\n# GitHub issues are only for bug reports / feature requests\n# if you have a question, ask it on the community site:\n# https://community.monogame.net\n-->\n\n<!-- Write your issue below -->\n\n\n\n\n\n<!-- System stats -->\n\n#### What version of KNI does the bug occur on:\n- KNI x.xx.xxxx\n\n#### What operating system are you using:\n- Windows10\n\n#### What KNI platform are you using:\n<!-- e.g. DesktopGL, Android, BlazorGL, WindowsDX, WindowsUWP, Android -->\n- KniPlatform\n"
  },
  {
    "path": "Installers/Windows/KniSdkSetup.nsi",
    "content": "SetCompressor /SOLID /FINAL lzma\n\n!include \"header.nsh\"\n!include \"LogicLib.nsh\"\n!define APPNAME \"KNI\"\n\n;Include Modern UI\n\n!include \"Sections.nsh\"\n!include \"MUI2.nsh\"\n!include \"InstallOptions.nsh\"\n\n!define MUI_ICON \"${FrameworkPath}\\Kni.ico\"\n\n!define MUI_UNICON \"${FrameworkPath}\\Kni.ico\"\n\n; Request application privileges for Windows Vista\nRequestExecutionLevel admin\n\n;Interface Configuration\n\n!define MUI_HEADERIMAGE\n!define MUI_HEADERIMAGE_BITMAP \"${FrameworkPath}\\Kni.bmp\"\n!define MUI_ABORTWARNING\n\n!define MUI_WELCOMEFINISHPAGE_BITMAP \"${FrameworkPath}\\panel.bmp\"\n;Languages\n\n!insertmacro MUI_PAGE_WELCOME\n\n!insertmacro MUI_PAGE_LICENSE \"..\\..\\License.txt\"\n\n!insertmacro MUI_PAGE_COMPONENTS\n!insertmacro MUI_PAGE_INSTFILES\n\nPage Custom SponsorPage SponsorPageLeave\n\n!insertmacro MUI_PAGE_FINISH\n!insertmacro MUI_UNPAGE_CONFIRM\n!insertmacro MUI_UNPAGE_INSTFILES\n\n!insertmacro MUI_LANGUAGE \"English\"\n\n \nName '${APPNAME} SDK ${INSTALLERVERSION}'\nOutFile 'KniSdkSetup.exe'\nInstallDir '$PROGRAMFILES\\${APPNAME}\\v${VERSION}'\nVIProductVersion \"${INSTALLERVERSION}\"\nVIAddVersionKey /LANG=${LANG_ENGLISH} \"ProductName\" \"${APPNAME} SDK\"\nVIAddVersionKey /LANG=${LANG_ENGLISH} \"CompanyName\" \"Kni framework\"\nVIAddVersionKey /LANG=${LANG_ENGLISH} \"FileVersion\" \"${INSTALLERVERSION}\"\nVIAddVersionKey /LANG=${LANG_ENGLISH} \"ProductVersion\" \"${INSTALLERVERSION}\"\nVIAddVersionKey /LANG=${LANG_ENGLISH} \"FileDescription\" \"${APPNAME} SDK Installer\"\nVIAddVersionKey /LANG=${LANG_ENGLISH} \"LegalCopyright\" \"Copyright © Kni framework\"\n\n!macro VS_ASSOCIATE_EDITOR TOOLNAME VSVERSION EXT TOOLPATH\n  WriteRegStr   HKCU 'Software\\Microsoft\\VisualStudio\\${VSVERSION}\\Default Editors\\${EXT}' 'Custom' '${TOOLNAME}'\n  WriteRegDWORD HKCU 'Software\\Microsoft\\VisualStudio\\${VSVERSION}\\Default Editors\\${EXT}' 'Type' 0x00000002\n  WriteRegStr   HKCU 'Software\\Microsoft\\VisualStudio\\${VSVERSION}\\Default Editors\\${EXT}\\${TOOLNAME}' '' '${TOOLPATH}'\n  WriteRegStr   HKCU 'Software\\Microsoft\\VisualStudio\\${VSVERSION}\\Default Editors\\${EXT}\\${TOOLNAME}' 'Arguments' ''\n!macroend\n\n!macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND\n  WriteRegStr HKCR \".${EXT}\" \"\" \"${FILECLASS}\" \n  WriteRegStr HKCR \"${FILECLASS}\" \"\" `${DESCRIPTION}`\n  WriteRegStr HKCR \"${FILECLASS}\\DefaultIcon\" \"\" `${ICON}`\n  WriteRegStr HKCR \"${FILECLASS}\\shell\" \"\" \"open\"\n  WriteRegStr HKCR \"${FILECLASS}\\shell\\open\" \"\" `${COMMANDTEXT}`\n  WriteRegStr HKCR \"${FILECLASS}\\shell\\open\\command\" \"\" `${COMMAND}`\n!macroend\n\n;--------------------------------\n\n; The stuff to install\nSection \"Kni Core Components\" CoreComponents ;No components page, name is not important\n  SectionIn RO\n  \n  ; Install the Kni tools to a single shared folder.\n  SetOutPath '$INSTDIR\\Tools'\n  File /r '..\\..\\Tools\\EffectCompiler\\bin\\Windows\\AnyCPU\\Release\\net8.0\\*.exe'\n  File /r '..\\..\\Tools\\EffectCompiler\\bin\\Windows\\AnyCPU\\Release\\net8.0\\*.runtimeconfig.json'\n  File /r '..\\..\\Tools\\EffectCompiler\\bin\\Windows\\AnyCPU\\Release\\net8.0\\*.dll'\n  File /r '..\\..\\Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0-windows\\*.exe'\n  File /r '..\\..\\Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0-windows\\*.runtimeconfig.json'\n  File /r '..\\..\\Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0-windows\\*.dll'\n  File /r '..\\..\\Tools\\Content.Pipeline.Editor.WinForms\\bin\\AnyCPU\\Release\\net8.0-windows\\Templates'\n  ;File /r '..\\..\\Tools\\Content.Pipeline.Editor.WinForms\\bin\\AnyCPU\\Release\\net8.0-windows\\runtimes'\n  File /r '..\\..\\Tools\\Content.Pipeline.Editor.WinForms\\bin\\AnyCPU\\Release\\net8.0-windows\\PipelineEditor.exe'\n  File /r '..\\..\\Tools\\Content.Pipeline.Editor.WinForms\\bin\\AnyCPU\\Release\\net8.0-windows\\PipelineEditor.runtimeconfig.json'\n  File /r '..\\..\\Tools\\Content.Pipeline.Editor.WinForms\\bin\\AnyCPU\\Release\\net8.0-windows\\PipelineEditor.dll'\n  File '..\\..\\Artifacts\\Xna.Framework.Design\\Release\\netstandard2.0\\*.dll'\n\n  ; Associate .mgcb files open in the Pipeline tool.\n  !insertmacro VS_ASSOCIATE_EDITOR 'MonoGame Pipeline' '15.0' 'mgcb' '$INSTDIR\\Tools\\PipelineEditor.exe'\n  !insertmacro APP_ASSOCIATE 'mgcb' 'MonoGame.ContentBuilderFile' 'A MonoGame content builder project.' '$INSTDIR\\Tools\\PipelineEditor.exe,0' 'Open with PipelineEditor' '$INSTDIR\\Tools\\PipelineEditor.exe \"%1\"'\n\n  ; Install framework packages\n  ;SetOutPath '$INSTDIR\\Packages\\'\n  ;File '..\\..\\Artifacts\\Packages\\*.*'\n  \n  End32Bitvs64BitCheck:\n  ; Add remote programs\n  WriteRegStr HKLM 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${APPNAME}' 'DisplayName' '${APPNAME} SDK'\n  WriteRegStr HKLM 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${APPNAME}' 'DisplayVersion' '${INSTALLERVERSION}'\n  WriteRegStr HKLM 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${APPNAME}' 'DisplayIcon' '$INSTDIR\\Kni.ico'\n  WriteRegStr HKLM 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${APPNAME}' 'InstallLocation' '$INSTDIR\\'\n  WriteRegStr HKLM 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${APPNAME}' 'Publisher' 'Kni framework'\n  WriteRegStr HKLM 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${APPNAME}' 'UninstallString' '$INSTDIR\\uninstall.exe'\n\n\n  SetOutPath '$INSTDIR'\n  File '..\\Kni.ico'\n\n  ; Uninstaller\n  WriteUninstaller \"uninstall.exe\"\n\n\nSectionEnd\n\nSection \"VS012 Redistributables (x64)\" VS2012Redist\n\n  SetOutPath \"$INSTDIR\"\n  File \"..\\..\\ThirdParty\\VCRedist\\vcredist2012_x64.exe\"\n  ExecWait '\"$INSTDIR\\vcredist2012_x64.exe\"  /passive /norestart'\n  \nSectionEnd\n\nSection \"VS2022 Templates\" VS2022\n\n  IfFileExists `$DOCUMENTS\\Visual Studio 2022\\*.*` InstallTemplates CannotInstallTemplates\n  InstallTemplates:\n    SetOutPath \"$DOCUMENTS\\Visual Studio 2022\\Templates\\ProjectTemplates\\Visual C#\\KNI\"\n    File /r '..\\..\\Templates\\VisualStudio2022\\ProjectTemplates\\*.zip'\n    SetOutPath \"$DOCUMENTS\\Visual Studio 2022\\Templates\\ItemTemplates\\Visual C#\\KNI\"\n    File /r '..\\..\\Templates\\VisualStudio2022\\ItemTemplates\\*.zip'\n    GOTO EndTemplates\n  CannotInstallTemplates:\n    DetailPrint \"Visual Studio 2022 not found\"\n  EndTemplates:\n\nSectionEnd\n\n; Optional section (can be disabled by the user)\nSection \"Start Menu Shortcuts\" Menu\n\tCreateDirectory $SMPROGRAMS\\${APPNAME}\n\tSetOutPath \"$INSTDIR\"\n\tCreateShortCut \"$SMPROGRAMS\\${APPNAME}\\Uninstall MonoGame.lnk\" \"$INSTDIR\\uninstall.exe\" \"\" \"$INSTDIR\\uninstall.exe\" 0\n\tSetOutPath \"$INSTDIR\\Tools\"\n\tCreateShortCut \"$SMPROGRAMS\\${APPNAME}\\Kni PipelineEditor.lnk\" \"$INSTDIR\\Tools\\PipelineEditor.exe\" \"\" \"$INSTDIR\\Tools\\PipelineEditor.exe\" 0\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Website.url\" \"InternetShortcut\" \"URL\" \"http://www.monogame.net\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Website.url\" \"InternetShortcut\" \"IconFile\" \"$INSTDIR\\Kni.ico\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Website.url\" \"InternetShortcut\" \"IconIndex\" \"0\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Documentation.url\" \"InternetShortcut\" \"URL\" \"http://www.monogame.net/documentation\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Documentation.url\" \"InternetShortcut\" \"IconFile\" \"$INSTDIR\\Kni.ico\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Documentation.url\" \"InternetShortcut\" \"IconIndex\" \"0\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Support.url\" \"InternetShortcut\" \"URL\" \"http://community.monogame.net/\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Support.url\" \"InternetShortcut\" \"IconFile\" \"$INSTDIR\\Kni.ico\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Support.url\" \"InternetShortcut\" \"IconIndex\" \"0\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Bug Reports.url\" \"InternetShortcut\" \"URL\" \"https://github.com/kniEngine/kni/issues\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Bug Reports.url\" \"InternetShortcut\" \"IconFile\" \"$INSTDIR\\Kni.ico\"\n\tWriteINIStr \"$SMPROGRAMS\\${APPNAME}\\MonoGame Bug Reports.url\" \"InternetShortcut\" \"IconIndex\" \"0\"\n\nSectionEnd\n\nLangString CoreComponentsDesc ${LANG_ENGLISH} \"Install the Runtimes and the MSBuild extensions for MonoGame\"\nLangString VS2012RedistDesc ${LANG_ENGLISH} \"Install the VS2012 Redistributables (x64)\"\nLangString VS2022Desc ${LANG_ENGLISH} \"Install the project templates for Visual Studio 2022\"\nLangString MenuDesc ${LANG_ENGLISH} \"Add a link to the MonoGame website to your start menu\"\n\n!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN\n  !insertmacro MUI_DESCRIPTION_TEXT ${CoreComponents} $(CoreComponentsDesc)\n  !insertmacro MUI_DESCRIPTION_TEXT ${VS2012Redist} $(VS2012RedistDesc)\n  !insertmacro MUI_DESCRIPTION_TEXT ${NugetPackages} $(NugetPackagesDesc)\n  !insertmacro MUI_DESCRIPTION_TEXT ${VS2022} $(VS2022Desc)\n  !insertmacro MUI_DESCRIPTION_TEXT ${Menu} $(MenuDesc)\n!insertmacro MUI_FUNCTION_DESCRIPTION_END\n\nFunction SponsorPage\n  ReserveFile \"SponsorPage.ini\"\n  !insertmacro INSTALLOPTIONS_EXTRACT \"SponsorPage.ini\"\n  !insertmacro INSTALLOPTIONS_DISPLAY \"SponsorPage.ini\"\nFunctionEnd\n \nFunction SponsorPageLeave\n  # Find out which field event called us. 0 = Next button called us.\n  !insertmacro INSTALLOPTIONS_READ $R0 \"SponsorPage.ini\" \"Settings\" \"State\"\n  ${If} $R0 == 3 # Field 3.\n    ExecShell \"open\" \"https://github.com/sponsors/nkast\"\n    abort\n  ${EndIf}\nFunctionEnd\n\nFunction checkVS2012Redist\n ; TODO: check if VS2012 Redisttributables are installed \nFunctionEnd\n\nFunction checkVS2022\nIfFileExists `$DOCUMENTS\\Visual Studio 2022\\*.*` end disable\n  disable:\n\t SectionSetFlags ${VS2022} $0\n  end:\nFunctionEnd\n\nFunction .onInit \n  IntOp $0 $0 | ${SF_RO}\n  call checkVS2012Redist\n  Call checkVS2022\n  IntOp $0 ${SF_SELECTED} | ${SF_RO}\n  SectionSetFlags ${core_id} $0\nFunctionEnd\n\n;--------------------------------\n;Uninstaller Section\n\nSection \"Uninstall\"\n\n  DeleteRegKey HKLM 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${APPNAME}'\n\n  ;DeleteRegKey HKCU 'Software\\Microsoft\\VisualStudio\\12.0\\Default Editors\\mgcb'\n\n  DeleteRegKey HKCR '.mgcb'\n  DeleteRegKey HKCR 'MonoGame.ContentBuilderFile'\n  \n  RMDir /r \"$DOCUMENTS\\Visual Studio 2022\\Templates\\ProjectTemplates\\Visual C#\\KNI\"\n  RMDir /r \"$DOCUMENTS\\Visual Studio 2022\\Templates\\ItemTemplates\\Visual C#\\KNI\"\n  RMDir /r \"$SMPROGRAMS\\${APPNAME}\"\n\n  Delete \"$INSTDIR\\Uninstall.exe\"\n  RMDir /r \"$INSTDIR\"\n\nSectionEnd\n\n"
  },
  {
    "path": "Installers/Windows/SponsorPage.ini",
    "content": "[Settings]\nNumFields=3\n\n[Field 1]\nType=Label\nText=While KNI is free and open-source, maintaining and expanding the framework requires ongoing effort and resources. We rely on the support of our community to continue delivering top-notch updates, features, and support.\nLeft=16\nRight=280\nTop=10\nBottom=48\n\n[Field 2]\nType=Label\nText=By becoming a Sponsor, you can directly contribute to the growth and sustainability of the KNI Game Framework.\nLeft=16\nRight=280\nTop=50\nBottom=88\n\n[Field 3]\nType=Button\nText=Sponsor KNI\nLeft=16\nRight=110\nTop=100\nBottom=120\nState=\nFlags=NOTIFY\n"
  },
  {
    "path": "Installers/default.build",
    "content": "<?xml version=\"1.0\"?>\n<project name=\"Installer Build Script\" default=\"build\" basedir=\".\">\n  <description>Default Installer Automated Build script</description>\n  <property name=\"os\" value=\"${operating-system::get-platform(environment::get-operating-system())}\" />\n\n  <!-- The build version number we can get from the environment variable -->\n  <property name=\"buildNumber\" value=\"4.2.9001.0\"/>\n  <if test=\"${environment::variable-exists('BUILD_NUMBER')}\">\n    <property name=\"buildNumber\" value=\"${environment::get-variable('BUILD_NUMBER')}\"/>\n  </if>\n\n  <target name=\"_checkos\">\n    <property name=\"os\" value=\"${operating-system::get-platform(environment::get-operating-system())}\"/>\n    <if test=\"${os == 'Unix'}\">\n      <if test=\"${directory::exists('/Applications') and directory::exists('/Library')}\">\n        <property name=\"os\" value=\"MacOS\"/>\n      </if>\n    </if>\n    <echo message=\"Detected : ${os}\"/>\n  </target>\n\n\n  <target name=\"build\" description=\"Build Installers\" depends=\"_checkos\">\n\n\n    <!-- Windows Installer -->    \n    <if test=\"${file::exists('C:\\Program Files (x86)\\NSIS\\makensis.exe')}\">\n      <echo append=\"false\" file=\"Windows/header.nsh\">\n!define FrameworkPath \"${project::get-base-directory()}\"\n!define VERSION \"4.2\"\n!define INSTALLERVERSION \"${buildNumber}\"\n      </echo>\n      <exec program=\"makensis\" workingdir=\"Windows\" basedir=\"C:\\Program Files (x86)\\NSIS\">\n\t\t    <arg value=\"KniSdkSetup.nsi\"/>\n      </exec>\n    </if>\n  </target>\n\n</project>\n"
  },
  {
    "path": "KNI.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Content.Pipeline\", \"Content.Pipeline\", \"{F2A58A8B-F174-48E0-BE84-F221C705CE27}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tools\", \"Tools\", \"{753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{94670BA5-3B36-4EBA-A3E0-27912F6BD11A}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Benchmarks\", \"Benchmarks\", \"{4C7DF6E2-94B3-4C09-A49D-C70922861A48}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Design\", \"src\\Xna.Framework.Design\\Xna.Framework.Design.csproj\", \"{E37F98D7-C4E8-4556-B322-AEF99638ECE1}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline\", \"src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\", \"{73509F44-3566-4B79-BB47-C7C6E2AA2351}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Graphics\", \"src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\", \"{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\", \"src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\", \"{476EE43E-E93B-4019-B8B7-AD52C4216456}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Audio\", \"src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\", \"{ACD26013-5730-4CAF-9468-3BAAE867A8A2}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Media\", \"src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\", \"{63486463-8AEE-483E-862A-7720CD62B4DF}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Android.GL\", \"Platforms\\Kni.Platform.Android.GL.csproj\", \"{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Kni.Platform.Android.GL.Xamarin\", \"Platforms\\Kni.Platform.Android.GL.Xamarin.csproj\", \"{BA9476CF-99BA-4D03-92F2-73D2C5E58883}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Blazor.GL\", \"Platforms\\Kni.Platform.Blazor.GL.csproj\", \"{E442B4FA-5F28-40AC-92C2-2979786418D3}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Cardboard.GL\", \"Platforms\\Kni.Platform.Cardboard.GL.csproj\", \"{BF257928-8B5D-4371-BD03-C18DA71918C3}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.SDL2.GL\", \"Platforms\\Kni.Platform.SDL2.GL.csproj\", \"{6D75E618-19CA-4C51-9546-F10965FBC0B8}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.iOS.GL\", \"Platforms\\Kni.Platform.iOS.GL.csproj\", \"{D93291EF-3419-412E-BC56-376BD6A02224}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Ref\", \"Platforms\\Kni.Platform.Ref.csproj\", \"{2ACF610C-9188-4F16-A611-577C1223DD90}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Kni.Platform.UAP.DX11\", \"Platforms\\Kni.Platform.UAP.DX11.csproj\", \"{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.WinForms.DX11\", \"Platforms\\Kni.Platform.WinForms.DX11.csproj\", \"{7DE47032-A904-4C29-BD22-2D235E8D91BA}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.WinForms.DX11.OculusOVR\", \"Platforms\\Kni.Platform.WinForms.DX11.OculusOVR.csproj\", \"{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"EffectCompiler\", \"Tools\\EffectCompiler\\EffectCompiler.csproj\", \"{46474D32-2E58-6957-6E64-6F7773324D47}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MGCB\", \"Tools\\MonoGame.Content.Builder\\MGCB.csproj\", \"{4243474D-572E-6E69-646F-77734D474342}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Content.Pipeline.Editor.net8\", \"Tools\\Content.Pipeline.Editor.WinForms\\Content.Pipeline.Editor.net8.csproj\", \"{5212C44E-1573-43C2-85E8-5751A12FBBFD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Tests.SDL2.GL\", \"Tests\\Kni.Tests.SDL2.GL.csproj\", \"{DED2DDB6-D4BE-B1B4-2E54-657374732E57}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Tests.WinForms.DX11\", \"Tests\\Kni.Tests.WinForms.DX11.csproj\", \"{DED2DDB6-D4BE-656D-2E54-657374732E57}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Oculus.GL\", \"Platforms\\Kni.Platform.Oculus.GL.csproj\", \"{3472997A-CD26-4D0D-B64A-795F913E6777}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E442B4FA-5F28-40AC-92C2-2979786418D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E442B4FA-5F28-40AC-92C2-2979786418D3}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E442B4FA-5F28-40AC-92C2-2979786418D3}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E442B4FA-5F28-40AC-92C2-2979786418D3}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2ACF610C-9188-4F16-A611-577C1223DD90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2ACF610C-9188-4F16-A611-577C1223DD90}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2ACF610C-9188-4F16-A611-577C1223DD90}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2ACF610C-9188-4F16-A611-577C1223DD90}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4243474D-572E-6E69-646F-77734D474342}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4243474D-572E-6E69-646F-77734D474342}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4243474D-572E-6E69-646F-77734D474342}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4243474D-572E-6E69-646F-77734D474342}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{E442B4FA-5F28-40AC-92C2-2979786418D3} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{2ACF610C-9188-4F16-A611-577C1223DD90} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\n\t\t{4243474D-572E-6E69-646F-77734D474342} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57} = {94670BA5-3B36-4EBA-A3E0-27912F6BD11A}\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57} = {94670BA5-3B36-4EBA-A3E0-27912F6BD11A}\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {48F20664-456B-4FE0-AE0A-7F5AC695B13C}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.Android.GL.Xamarin.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Kni.Platform.Android.GL.Xamarin\", \"Platforms\\Kni.Platform.Android.GL.Xamarin.csproj\", \"{BA9476CF-99BA-4D03-92F2-73D2C5E58883}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{BA9476CF-99BA-4D03-92F2-73D2C5E58883} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.Android.GL.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Android.GL\", \"Platforms\\Kni.Platform.Android.GL.csproj\", \"{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.Blazor.GL.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Blazor.GL\", \"Platforms\\Kni.Platform.Blazor.GL.csproj\", \"{6FE118A2-6D2B-4652-8C50-79DF113CA22B}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6FE118A2-6D2B-4652-8C50-79DF113CA22B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6FE118A2-6D2B-4652-8C50-79DF113CA22B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6FE118A2-6D2B-4652-8C50-79DF113CA22B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6FE118A2-6D2B-4652-8C50-79DF113CA22B}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6FE118A2-6D2B-4652-8C50-79DF113CA22B} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {FD0DE32B-7FB8-4E51-987B-3C6F5EC228B9}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.Cardboard.GL.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Cardboard.GL\", \"Platforms\\Kni.Platform.Cardboard.GL.csproj\", \"{BF257928-8B5D-4371-BD03-C18DA71918C3}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"GoogleCardboard\", \"Platforms\\XR\\.CardboardLegacy\\GoogleCardboard\\GoogleCardboard.csproj\", \"{4EAA991B-83C7-41AA-B845-8A13E05E0334}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4EAA991B-83C7-41AA-B845-8A13E05E0334}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4EAA991B-83C7-41AA-B845-8A13E05E0334}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4EAA991B-83C7-41AA-B845-8A13E05E0334}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4EAA991B-83C7-41AA-B845-8A13E05E0334}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{BF257928-8B5D-4371-BD03-C18DA71918C3} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{4EAA991B-83C7-41AA-B845-8A13E05E0334} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.Oculus.GL.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Oculus.GL\", \"Platforms\\Kni.Platform.Oculus.GL.csproj\", \"{3472997A-CD26-4D0D-B64A-795F913E6777}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3472997A-CD26-4D0D-B64A-795F913E6777} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.Ref.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.Ref\", \"Platforms\\Kni.Platform.Ref.csproj\", \"{91E64EE8-04D3-4850-A3CA-C4839EF167F2}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{91E64EE8-04D3-4850-A3CA-C4839EF167F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{91E64EE8-04D3-4850-A3CA-C4839EF167F2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{91E64EE8-04D3-4850-A3CA-C4839EF167F2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{91E64EE8-04D3-4850-A3CA-C4839EF167F2}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{91E64EE8-04D3-4850-A3CA-C4839EF167F2} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {0B8E7E4B-7522-4B37-932C-19ACF360618E}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.SDL2.GL.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{94670BA5-3B36-4EBA-A3E0-27912F6BD11A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Design\", \"src\\Xna.Framework.Design\\Xna.Framework.Design.csproj\", \"{E37F98D7-C4E8-4556-B322-AEF99638ECE1}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.SDL2.GL\", \"Platforms\\Kni.Platform.SDL2.GL.csproj\", \"{6D75E618-19CA-4C51-9546-F10965FBC0B8}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Tests.SDL2.GL\", \"Tests\\Kni.Tests.SDL2.GL.csproj\", \"{DED2DDB6-D4BE-B1B4-2E54-657374732E57}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Content.Pipeline\", \"Content.Pipeline\", \"{28AEF6DE-B48A-4EA8-9262-B91E48544888}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline\", \"src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\", \"{D3C16384-9049-4E8F-AE16-8D66CDB415BC}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Audio\", \"src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\", \"{95E174DB-00F0-4C2C-8187-4B61287847F0}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Graphics\", \"src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\", \"{F56A9FCE-D61D-4D1F-A592-F50155930EAC}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\", \"src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\", \"{5A371934-6507-4DFB-9942-C347DFA0C16D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Media\", \"src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\", \"{EAE3E234-EB8E-496E-A269-5DB6026732D5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D3C16384-9049-4E8F-AE16-8D66CDB415BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D3C16384-9049-4E8F-AE16-8D66CDB415BC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D3C16384-9049-4E8F-AE16-8D66CDB415BC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D3C16384-9049-4E8F-AE16-8D66CDB415BC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{95E174DB-00F0-4C2C-8187-4B61287847F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{95E174DB-00F0-4C2C-8187-4B61287847F0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{95E174DB-00F0-4C2C-8187-4B61287847F0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{95E174DB-00F0-4C2C-8187-4B61287847F0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F56A9FCE-D61D-4D1F-A592-F50155930EAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F56A9FCE-D61D-4D1F-A592-F50155930EAC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F56A9FCE-D61D-4D1F-A592-F50155930EAC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F56A9FCE-D61D-4D1F-A592-F50155930EAC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5A371934-6507-4DFB-9942-C347DFA0C16D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5A371934-6507-4DFB-9942-C347DFA0C16D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5A371934-6507-4DFB-9942-C347DFA0C16D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5A371934-6507-4DFB-9942-C347DFA0C16D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{EAE3E234-EB8E-496E-A269-5DB6026732D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EAE3E234-EB8E-496E-A269-5DB6026732D5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EAE3E234-EB8E-496E-A269-5DB6026732D5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EAE3E234-EB8E-496E-A269-5DB6026732D5}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D75E618-19CA-4C51-9546-F10965FBC0B8} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{DED2DDB6-D4BE-B1B4-2E54-657374732E57} = {94670BA5-3B36-4EBA-A3E0-27912F6BD11A}\n\t\t{D3C16384-9049-4E8F-AE16-8D66CDB415BC} = {28AEF6DE-B48A-4EA8-9262-B91E48544888}\n\t\t{95E174DB-00F0-4C2C-8187-4B61287847F0} = {28AEF6DE-B48A-4EA8-9262-B91E48544888}\n\t\t{F56A9FCE-D61D-4D1F-A592-F50155930EAC} = {28AEF6DE-B48A-4EA8-9262-B91E48544888}\n\t\t{5A371934-6507-4DFB-9942-C347DFA0C16D} = {28AEF6DE-B48A-4EA8-9262-B91E48544888}\n\t\t{EAE3E234-EB8E-496E-A269-5DB6026732D5} = {28AEF6DE-B48A-4EA8-9262-B91E48544888}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {9D1DC476-C56A-4EA2-BD08-955AD37A0DD1}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.UAP.DX11.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Kni.Platform.UAP.DX11\", \"Platforms\\Kni.Platform.UAP.DX11.csproj\", \"{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.WinForms.DX11.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Content.Pipeline\", \"Content.Pipeline\", \"{F2A58A8B-F174-48E0-BE84-F221C705CE27}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tools\", \"Tools\", \"{753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{94670BA5-3B36-4EBA-A3E0-27912F6BD11A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Design\", \"src\\Xna.Framework.Design\\Xna.Framework.Design.csproj\", \"{E37F98D7-C4E8-4556-B322-AEF99638ECE1}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline\", \"src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\", \"{73509F44-3566-4B79-BB47-C7C6E2AA2351}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Graphics\", \"src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\", \"{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\", \"src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\", \"{476EE43E-E93B-4019-B8B7-AD52C4216456}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Audio\", \"src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\", \"{ACD26013-5730-4CAF-9468-3BAAE867A8A2}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Media\", \"src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\", \"{63486463-8AEE-483E-862A-7720CD62B4DF}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.WinForms.DX11\", \"Platforms\\Kni.Platform.WinForms.DX11.csproj\", \"{7DE47032-A904-4C29-BD22-2D235E8D91BA}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.WinForms.DX11.OculusOVR\", \"Platforms\\Kni.Platform.WinForms.DX11.OculusOVR.csproj\", \"{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"EffectCompiler\", \"Tools\\EffectCompiler\\EffectCompiler.csproj\", \"{46474D32-2E58-6957-6E64-6F7773324D47}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MGCB\", \"Tools\\MonoGame.Content.Builder\\MGCB.csproj\", \"{4243474D-572E-6E69-646F-77734D474342}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Content.Pipeline.Editor.net8\", \"Tools\\Content.Pipeline.Editor.WinForms\\Content.Pipeline.Editor.net8.csproj\", \"{5212C44E-1573-43C2-85E8-5751A12FBBFD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Tests.WinForms.DX11\", \"Tests\\Kni.Tests.WinForms.DX11.csproj\", \"{DED2DDB6-D4BE-656D-2E54-657374732E57}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4243474D-572E-6E69-646F-77734D474342}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4243474D-572E-6E69-646F-77734D474342}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4243474D-572E-6E69-646F-77734D474342}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4243474D-572E-6E69-646F-77734D474342}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{E37F98D7-C4E8-4556-B322-AEF99638ECE1} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{46474D32-2E58-6957-6E64-6F7773324D47} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\n\t\t{4243474D-572E-6E69-646F-77734D474342} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\n\t\t{5212C44E-1573-43C2-85E8-5751A12FBBFD} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\n\t\t{DED2DDB6-D4BE-656D-2E54-657374732E57} = {94670BA5-3B36-4EBA-A3E0-27912F6BD11A}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {10805590-D308-49FA-97FF-13C844224544}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Kni.Platform.iOS.GL.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Xna.Framework.XR\", \"src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\", \"{6D0D985D-B256-4208-9E78-77897D461698}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Kni.Platform.iOS.GL\", \"Platforms\\Kni.Platform.iOS.GL.csproj\", \"{D93291EF-3419-412E-BC56-376BD6A02224}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{D93291EF-3419-412E-BC56-376BD6A02224} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "﻿Microsoft Public License (Ms-PL)\nKni - Copyright © 2014-2025 Nick Kastellanos\n\n-------------------------------------------------------------------------------\n\nMicrosoft Public License (Ms-PL)\nMonoGame - Copyright © 2009-2021 The MonoGame Team\n\nAll rights reserved.\n\nThis license governs use of the accompanying software. If you use the software,\nyou accept this license. If you do not accept the license, do not use the\nsoftware.\n\n1. Definitions\n\nThe terms \"reproduce,\" \"reproduction,\" \"derivative works,\" and \"distribution\"\nhave the same meaning here as under U.S. copyright law.\n\nA \"contribution\" is the original software, or any additions or changes to the\nsoftware.\n\nA \"contributor\" is any person that distributes its contribution under this\nlicense.\n\n\"Licensed patents\" are a contributor's patent claims that read directly on its\ncontribution.\n\n2. Grant of Rights\n\n(A) Copyright Grant- Subject to the terms of this license, including the\nlicense conditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free copyright license to reproduce its\ncontribution, prepare derivative works of its contribution, and distribute its\ncontribution or any derivative works that you create.\n\n(B) Patent Grant- Subject to the terms of this license, including the license\nconditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free license under its licensed patents to\nmake, have made, use, sell, offer for sale, import, and/or otherwise dispose of\nits contribution in the software or derivative works of the contribution in the\nsoftware.\n\n3. Conditions and Limitations\n\n(A) No Trademark License- This license does not grant you rights to use any\ncontributors' name, logo, or trademarks.\n\n(B) If you bring a patent claim against any contributor over patents that you\nclaim are infringed by the software, your patent license from such contributor\nto the software ends automatically.\n\n(C) If you distribute any portion of the software, you must retain all\ncopyright, patent, trademark, and attribution notices that are present in the\nsoftware.\n\n(D) If you distribute any portion of the software in source code form, you may\ndo so only under this license by including a complete copy of this license with\nyour distribution. If you distribute any portion of the software in compiled or\nobject code form, you may only do so under a license that complies with this\nlicense.\n\n(E) The software is licensed \"as-is.\" You bear the risk of using it. The\ncontributors give no express warranties, guarantees or conditions. You may have\nadditional consumer rights under your local laws which this license cannot\nchange. To the extent permitted under your local laws, the contributors exclude\nthe implied warranties of merchantability, fitness for a particular purpose and\nnon-infringement.\n\n-------------------------------------------------------------------------------\n\nThe MIT License (MIT)\nPortions Copyright © The Mono.Xna Team\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "MonoGame.Tools.Linux.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 17.9.34723.18\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Framework\", \"Framework\", \"{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Content.Pipeline\", \"Content.Pipeline\", \"{F2A58A8B-F174-48E0-BE84-F221C705CE27}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Platforms\", \"Platforms\", \"{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tools\", \"Tools\", \"{753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{94670BA5-3B36-4EBA-A3E0-27912F6BD11A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework\", \"src\\Xna.Framework\\Xna.Framework.csproj\", \"{741B4B1E-89E4-434C-8867-6129838AFD51}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content\", \"src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\", \"{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Graphics\", \"src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\", \"{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Audio\", \"src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\", \"{3F81F76D-F0F3-44FE-A256-40AF153C33F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Media\", \"src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\", \"{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Input\", \"src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\", \"{8FB8B257-C091-4C41-B221-75C37B68CD8F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Game\", \"src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\", \"{90BBD6EF-F386-4F47-88CD-BF386C7D1705}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Devices\", \"src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\", \"{6B3E56F7-C567-463C-9746-0244FD959322}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Storage\", \"src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\", \"{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline\", \"src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\", \"{73509F44-3566-4B79-BB47-C7C6E2AA2351}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Graphics\", \"src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\", \"{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\", \"src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\", \"{476EE43E-E93B-4019-B8B7-AD52C4216456}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Audio\", \"src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\", \"{ACD26013-5730-4CAF-9468-3BAAE867A8A2}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xna.Framework.Content.Pipeline.Media\", \"src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\", \"{63486463-8AEE-483E-862A-7720CD62B4DF}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MonoGame.Framework.DesktopGL\", \"Platforms\\MonoGame.Framework.DesktopGL.csproj\", \"{5B5871CA-AD66-4B5E-B097-B7144CF1B570}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MonoGame.Packaging.Flatpak\", \"Tools\\MonoGame.Packaging.Flatpak\\MonoGame.Packaging.Flatpak.csproj\", \"{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|x64.Build.0 = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51}.Release|x86.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|x64.Build.0 = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|x86.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|x64.Build.0 = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|x86.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|x64.Build.0 = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|x86.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|x64.Build.0 = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|x86.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|x64.Build.0 = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|x86.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|x64.Build.0 = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322}.Release|x86.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|x64.Build.0 = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|x86.Build.0 = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|x64.Build.0 = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|x86.Build.0 = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|x64.Build.0 = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|x86.Build.0 = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|x64.Build.0 = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|x86.Build.0 = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|x64.Build.0 = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|x86.Build.0 = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|x64.Build.0 = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF}.Release|x86.Build.0 = Release|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|x64.Build.0 = Release|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|x86.Build.0 = Release|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|x64.Build.0 = Release|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}\n\t\t{73509F44-3566-4B79-BB47-C7C6E2AA2351} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{476EE43E-E93B-4019-B8B7-AD52C4216456} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{ACD26013-5730-4CAF-9468-3BAAE867A8A2} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{63486463-8AEE-483E-862A-7720CD62B4DF} = {F2A58A8B-F174-48E0-BE84-F221C705CE27}\n\t\t{5B5871CA-AD66-4B5E-B097-B7144CF1B570} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}\n\t\t{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {5765210B-8045-485C-9F8A-F32B3D24A405}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "NuGetPackages/Content.Pipeline.Builder.Windows.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd\">\n  <metadata>\n    <id>nkast.Xna.Framework.Content.Pipeline.Builder.Windows</id>\n    <version>$version$</version>\n    <title>nkast.Xna.Framework.Content.Pipeline.Builder.Windows</title>\n    <authors>Kastellanos Nikos</authors>\n    <owners>Kastellanos Nikos</owners>\n    <licenseUrl>https://github.com/kniEngine/kni/blob/develop/LICENSE.txt</licenseUrl>\n    <!--<LicenseExpression>MS-PL</LicenseExpression>-->\n    <projectUrl>https://github.com/kniEngine/kni</projectUrl>\n    <!--<Icon>Images\\Icon.png</Icon>-->\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>KNI Framework Content Pipeline Builder (WinForms, WPF and DirectX11 backend).</description>\n    <summary>MSBuild task to build content for KNI (Windows).</summary>\n    <copyright>©2024 Kastellanos Nikos</copyright>\n    <language>en-US</language>\n    \n  </metadata>\n  <files>\n    <file src=\"NuGetPackages\\build\\Builder\\nkast.Xna.Framework.Content.Pipeline.Builder.targets\" target=\"build\\nkast.Xna.Framework.Content.Pipeline.Builder.targets\" />\n\n    <!-- tools -->    \n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0-windows\\*.exe\" target=\"tools\" />\n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0-windows\\*.runtimeconfig.json\" target=\"tools\" />\n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0-windows\\*.dll\" target=\"tools\" />\n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0-windows\\*.dll.config\" target=\"tools\" />\n    <!--\n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0-windows\\runtimes\\win7-x64\\native\\*.dll\" target=\"tools\\runtimes\\win7-x64\\native\" />\n    -->\n    \n    <!-- Nuget Icon -->\n    <file src=\"Images\\Icon.png\" target=\"\\\" />\n  </files>\n</package>\n"
  },
  {
    "path": "NuGetPackages/Content.Pipeline.Builder.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd\">\n  <metadata>\n    <id>nkast.Xna.Framework.Content.Pipeline.Builder</id>\n    <version>$version$</version>\n    <title>nkast.Xna.Framework.Content.Pipeline.Builder</title>\n    <authors>Kastellanos Nikos</authors>\n    <owners>Kastellanos Nikos</owners>\n    <licenseUrl>https://github.com/kniEngine/kni/blob/develop/LICENSE.txt</licenseUrl>\n    <!--<LicenseExpression>MS-PL</LicenseExpression>-->\n    <projectUrl>https://github.com/kniEngine/kni</projectUrl>\n    <!--<Icon>Images\\Icon.png</Icon>-->\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>KNI Framework Content Pipeline Builder</description>\n    <summary>MSBuild task to build content for KNI.</summary>\n    <copyright>©2024 Kastellanos Nikos</copyright>\n    <language>en-US</language>\n    \n  </metadata>\n  <files>\n    <file src=\"NuGetPackages\\build\\Builder\\nkast.Xna.Framework.Content.Pipeline.Builder.targets\" target=\"build\\nkast.Xna.Framework.Content.Pipeline.Builder.targets\" />\n\n    <!-- tools -->\n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0\\*.exe\" target=\"tools\" />\n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0\\*.runtimeconfig.json\" target=\"tools\" />\n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0\\*.dll\" target=\"tools\" />\n    <file src=\"Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Release\\net8.0\\*.dll.config\" target=\"tools\" />\n    \n    <!-- Nuget Icon -->\n    <file src=\"Images\\Icon.png\" target=\"\\\" />\n  </files>\n</package>\n"
  },
  {
    "path": "NuGetPackages/MonoGame.Framework.WindowsUniversal.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd\">\n    <metadata>\n        <id>nkast.Kni.Platform.UAP.DX11</id>\n        <version>0.0.0.0</version>\n        <title>nkast.Kni.Platform.UAP.DX11</title>\n        <authors>Kastellanos Nikos, MonoGame Team</authors>\n        <owners>Kastellanos Nikos</owners>\n        <licenseUrl>https://github.com/kniEngine/kni/blob/develop/LICENSE.txt</licenseUrl>\n        <projectUrl>https://github.com/kniEngine/kni</projectUrl>\n        <requireLicenseAcceptance>false</requireLicenseAcceptance>\n        <description>\n          This is a custom build of MonoGame framework. Includes bugfixes, performance improvements, less memory garbage per frame, and better memory management.\n\n          This package provides you with MonoGame Framework that works on Windows 10, Windows Phone 10 and Xbox One using UWP(Universal Windows Platform).</description>\n        <summary>This package provides you with MonoGame Framework that works on Windows 10, Windows Phone 10 and Xbox One using UWP(Universal Windows Platform).</summary>\n        <copyright>©2013-2025 Kastellanos Nikos,\n\t\t            ©2009-2022 The MonoGame Team</copyright>\n        <language>en-US</language>\n\n        <dependencies>\n            <group targetFramework=\".NETCore0.0\">\n                <dependency id=\"nkast.Xna.Framework\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.Content\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.Graphics\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.Audio\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.Media\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.Input\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.Game\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.Devices\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.Storage\" version=\"4.2.9001\" />\n                <dependency id=\"nkast.Xna.Framework.XR\" version=\"4.2.9001\" />\n                <dependency id=\"SharpDX\" version=\"4.2.0\" />\n                <dependency id=\"SharpDX.Direct2D1\" version=\"4.2.0\" />\n                <dependency id=\"SharpDX.Direct3D11\" version=\"4.2.0\" />\n                <dependency id=\"SharpDX.DXGI\" version=\"4.2.0\" />\n                <dependency id=\"SharpDX.XAudio2\" version=\"4.2.0\" />\n                <dependency id=\"SharpDX.MediaFoundation\" version=\"4.2.0\" />\n                <dependency id=\"SharpDX.XInput\" version=\"4.2.0\" />\n            </group>\n        </dependencies>\n\n    </metadata>\n    <files>\n        <file src=\"Platforms\\build\\.UAP\\nkast.Kni.Platform.UAP.DX11.targets\" target=\"build\\nkast.Kni.Platform.UAP.DX11.targets\" />\n                \n        <file src=\"Platforms\\bin\\WindowsUniversal\\AnyCPU\\Release\\Kni.Platform.dll\"                       target=\"lib\\netcore\\Kni.Platform.dll\" />\n        <file src=\"Platforms\\bin\\WindowsUniversal\\AnyCPU\\Release\\Kni.Platform.pri\"                       target=\"lib\\netcore\\Kni.Platform.pri\" />\n        <file src=\"Platforms\\bin\\WindowsUniversal\\AnyCPU\\Release\\Kni.Platform.xml\"                       target=\"lib\\netcore\\Kni.Platform.xml\" />\n        \n        <!-- Nuget Icon -->\n        <file src=\"Images\\Icon.png\" target=\"\\\" />\n    </files>\n</package>\n"
  },
  {
    "path": "NuGetPackages/MonoGame.Templates.nuspec1",
    "content": "<?xml version=\"1.0\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd\">\n    <metadata>\n        <id>MonoGame.Templates</id>\n        <title>MonoGame Template Pack</title>\n        <version>0.0.0.0</version>\n        <authors>MonoGameTeam</authors>\n        <description>Templates for building MonoGame based games.</description>\n        <licenseUrl>https://github.com/mono/MonoGame/blob/develop/LICENSE.txt</licenseUrl>\n        <projectUrl>http://monogame.net/</projectUrl>\n        <requireLicenseAcceptance>false</requireLicenseAcceptance>\n        <copyright>Copyright 2013-2017</copyright>\n        <packageTypes>\n            <packageType name=\"Template\" />\n        </packageTypes>\n    </metadata>\n    <files>\n        <file src=\"..\\Templates\\DotNetTemplate\\content\\**\" target=\"content\" exclude=\"**\\.DS_Store\" />\n        \n        <!-- Nuget Icon -->\n        <file src=\"Images\\Icon.png\" target=\"\\\" />\n    </files>\n</package>\n"
  },
  {
    "path": "NuGetPackages/RegisterLocalNuget.bat",
    "content": "set username=username\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework                           4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Design                    4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Content                   4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Audio                     4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Graphics                  4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Media                     4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Input                     4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Game                      4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Devices                   4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Storage                   4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.XR                        4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Content.Pipeline          4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Content.Pipeline.Audio    4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Content.Pipeline.Graphics 4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Content.Pipeline.Media    4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Content.Pipeline.Builder  4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"   -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Xna.Framework.Content.Pipeline.Builder.Windows  4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"   -NonInteractive\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Kni.Platform.Blazor.GL                  4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Kni.Platform.WinForms.DX11              4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Kni.Platform.UAP.DX11                   4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Kni.Platform.SDL2.GL                    4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Kni.Platform.Android.GL                 4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Kni.Platform.Oculus.GL                  4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" delete nkast.Kni.Platform.WinForms.DX11.OculusOVR    4.2.9001 -Source \"C:\\Users\\%username%\\.nuget\\localPackages\" -NonInteractive\n\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.4.2.9001.nupkg                           -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Design.4.2.9001.nupkg                    -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Content.4.2.9001.nupkg                   -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Audio.4.2.9001.nupkg                     -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Graphics.4.2.9001.nupkg                  -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Media.4.2.9001.nupkg                     -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Input.4.2.9001.nupkg                     -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Game.4.2.9001.nupkg                      -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Devices.4.2.9001.nupkg                   -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Storage.4.2.9001.nupkg                   -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.XR.4.2.9001.nupkg                        -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Content.Pipeline.4.2.9001.nupkg          -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Content.Pipeline.Audio.4.2.9001.nupkg    -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Content.Pipeline.Graphics.4.2.9001.nupkg -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Content.Pipeline.Media.4.2.9001.nupkg    -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Content.Pipeline.Builder.4.2.9001.nupkg  -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Xna.Framework.Content.Pipeline.Builder.Windows.4.2.9001.nupkg -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Kni.Platform.Blazor.GL.4.2.9001.nupkg             -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Kni.Platform.WinForms.DX11.4.2.9001.nupkg         -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Kni.Platform.UAP.DX11.4.2.9001.nupkg              -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Kni.Platform.SDL2.GL.4.2.9001.nupkg               -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Kni.Platform.Android.GL.4.2.9001.nupkg            -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Kni.Platform.Oculus.GL.4.2.9001.nupkg             -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\n\"C:\\Program Files (x86)\\nuget\\nuget.exe\" add output\\nkast.Kni.Platform.WinForms.DX11.OculusOVR.4.2.9001.nupkg -Source \"C:\\Users\\%username%\\.nuget\\localPackages\"\n\n\n@pause"
  },
  {
    "path": "NuGetPackages/build/Builder/nkast.Xna.Framework.Content.Pipeline.Builder.targets",
    "content": "<Project>\n\n  <!-- Add KniContentReference to item type selection in Visual Studio -->\n  <ItemGroup>\n    <AvailableItemName Include=\"KniContentReference\" />\n  </ItemGroup>\n\n  <!-- This disables the IDE feature that skips executing msbuild in some build situations. -->\n  <PropertyGroup>\n    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>\n  </PropertyGroup>\n\n  <!--\n    Target flow\n      1. CollectContentReferences\n      2. PrepareContentBuilder\n      3. RunContentBuilder\n      4. IncludeContent\n  -->\n\n  <!--\n    ========================\n    CollectContentReferences\n    ========================\n\n    Converts KniContentReference items to ContentReference items, deriving the necessary metadata.\n\n    Outputs:\n      - ContentReference: references to .mgcb files that can be built with MGCB\n        - FullDir: the absolute path of the folder containing the .mgcb file\n        - ContentDir: the relative path of the resource folder to contain the content files\n        - ContentOutputDir: the absolute path of the bin folder containing final built content\n        - ContentIntermediateOutputDir: the absolute path of the obj folder containing intermediate content\n\n    Example:\n      - Given the following file setup:\n        - C:\\Game\\Game.Shared\\SharedContent.mgcb\n        - C:\\Game\\Game.DesktopGL\\Game.DesktopGL.csproj\n          - KniContentReference: ..\\Game.Shared\\SharedContent.mgcb\n      - Output:\n        - ContentReference\n          - FullDir: C:/Game/Game.Shared/\n          - ContentDir: Game.Shared/\n          - ContentOutputDir: C:/Game/Game.Shared/bin/DesktopGL/\n          - ContentIntermediateOutputDir: C:/Game/Game.Shared/obj/DesktopGL/\n  -->\n  <Target Name=\"CollectContentReferences\">\n    \n    <ItemGroup >\n      <KniContentReference Include=\"**/*.mgcb\" />\n    </ItemGroup>\n\n    <ItemGroup>\n\n      <!-- Start with existing metadata. -->\n      <ContentReference Include=\"@(KniContentReference)\">\n        <Link>%(KniContentReference.Link)</Link>\n        <FullDir>%(KniContentReference.RootDir)%(KniContentReference.Directory)</FullDir>\n        <ContentFolder>%(KniContentReference.ContentFolder)</ContentFolder>\n      </ContentReference>\n\n      <!--\n        Process intermediate metadata.\n        Switch all back-slashes to forward-slashes so the MGCB command doesn't think it's trying to escape characters or quotes.\n        ContentFolder will be the name of the containing folder (using the Link if it exists) so the directory structure of the included content mimics that of the source content.\n      -->\n      <ContentReference>\n        <FullDir>$([System.String]::Copy(\"%(FullDir)\").Replace('\\','/'))</FullDir>\n        <ContentFolder Condition=\"'%(ContentFolder)' == '' AND '%(Link)' != ''\">$([System.IO.Path]::GetDirectoryName(%(Link)))</ContentFolder>\n        <ContentFolder Condition=\"'%(ContentFolder)' == '' AND '%(Link)' == '' AND '%(RelativeDir)' != ''\">$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName(%(RelativeDir)))))</ContentFolder>\n      </ContentReference>\n\n      <!-- Assemble final metadata. -->\n      <ContentReference>\n        <ContentDir>%(ContentFolder)/</ContentDir>\n        <ContentOutputDir Condition=\"'$(KniPlatform)' != 'BlazorGL'\">%(FullDir)bin/$(KniPlatform)/</ContentOutputDir>\n        <ContentOutputDir Condition=\"'$(KniPlatform)' == 'BlazorGL'\">$(MSBuildProjectDirectory)/wwwroot/%(ContentFolder)/</ContentOutputDir>\n        <ContentIntermediateOutputDir>%(FullDir)obj/$(KniPlatform)/</ContentIntermediateOutputDir>\n      </ContentReference>\n\n    </ItemGroup>\n\n  </Target>\n\n  <!--\n    =====================\n    PrepareContentBuilder\n    =====================\n\n    Set and validate properties, and create folders for content output.\n\n    Outputs:\n      - PlatformResourcePrefix: the platform-specific prefix for included content paths\n      - KniContentBuilderArguments: extra arguments to add to the MGCB call\n  -->\n  <Target Name=\"PrepareContentBuilder\" DependsOnTargets=\"CollectContentReferences\">\n\n    <PropertyGroup>\n      <PlatformResourcePrefix Condition=\"'$(KniPlatform)' == 'MacOSX'\">$(MonoMacResourcePrefix)</PlatformResourcePrefix>\n      <PlatformResourcePrefix Condition=\"'$(KniPlatform)' == 'iOS'\">$(IPhoneResourcePrefix)</PlatformResourcePrefix>\n      <PlatformResourcePrefix Condition=\"'$(KniPlatform)' == 'Android'\">$(MonoAndroidAssetsPrefix)</PlatformResourcePrefix>\n      <PlatformResourcePrefix Condition=\"'$(KniPlatform)' == 'BlazorGL'\"></PlatformResourcePrefix>\n      <PlatformResourcePrefix Condition=\"'$(PlatformResourcePrefix)' != '' And !HasTrailingSlash('$(PlatformResourcePrefix)')\">$(PlatformResourcePrefix)\\</PlatformResourcePrefix>\n      <PlatformResourcePrefix Condition=\"'$(PlatformResourcePrefix)' == ''\"></PlatformResourcePrefix>\n      <KniContentBuilderArguments Condition=\"'$(KniContentBuilderArguments)' == ''\">/quiet</KniContentBuilderArguments>\n    </PropertyGroup>\n\n    <Error\n      Text=\"The KniPlatform property was not defined in the project!\"\n      Condition=\"'$(KniPlatform)' == ''\" />\n\n    <Warning\n      Text=\"No Content References Found. Please make sure your .mgcb file has a build action of KniContentReference\"\n      Condition=\"'%(ContentReference.FullPath)' == ''\" />\n\n    <Warning\n      Text=\"Content Reference output directory contains '..' which may cause content to be placed outside of the output directory. Please set ContentFolder on your KniContentReference '%(ContentReference.Filename)' to enforce the correct content output location.\"\n      Condition=\"$([System.String]::Copy('%(ContentReference.ContentDir)').Contains('..'))\" />\n\n    <MakeDir Directories=\"%(ContentReference.ContentOutputDir)\"/>\n    <MakeDir Directories=\"%(ContentReference.ContentIntermediateOutputDir)\"/>\n\n  </Target>\n\n  <!--\n    =================\n    RunContentBuilder\n    =================\n\n    Run MGCB to build content and include it as ExtraContent.\n\n    Outputs:\n      - ExtraContent: built content files\n        - ContentDir: the relative path of the embedded folder to contain the content files\n  -->\n  <Target Name=\"RunContentBuilder\" DependsOnTargets=\"PrepareContentBuilder\">\n  \n    <PropertyGroup>\n      <KniContentBuilderExe Condition=\"'$(KniContentBuilderExe)' == ''\">$(MSBuildThisFileDirectory)..\\tools\\MGCB.dll</KniContentBuilderExe>\n      <KniContentBuilderCmd>dotnet &quot;$(KniContentBuilderExe)&quot;</KniContentBuilderCmd>\n    </PropertyGroup>\n    \n    <!-- Execute MGCB from the project directory so we use the correct manifest. -->\n    <Exec\n      Condition=\"'%(ContentReference.FullPath)' != ''\"\n      Command=\"$(KniContentBuilderCmd) $(KniContentBuilderArguments) /@:&quot;%(ContentReference.FullPath)&quot; /platform:$(KniPlatform) /outputDir:&quot;%(ContentReference.ContentOutputDir)&quot; /intermediateDir:&quot;%(ContentReference.ContentIntermediateOutputDir)&quot; /workingDir:&quot;%(ContentReference.FullDir)&quot;\"\n      WorkingDirectory=\"$(MSBuildProjectDirectory)\" />\n\n    <ItemGroup>\n      <ExtraContent\n        Condition=\"'%(ContentReference.ContentOutputDir)' != ''\"\n        Include=\"%(ContentReference.ContentOutputDir)\\**\\*.*\">\n        <ContentDir>%(ContentReference.ContentDir)</ContentDir>\n      </ExtraContent>\n    </ItemGroup>\n\n  </Target>\n\n  <!--\n    ==============\n    IncludeContent\n    ==============\n\n    Include ExtraContent as platform-specific content in the project output.\n\n    Outputs:\n      - AndroidAsset: built content files if Android\n      - BundleResource: built content files if MacOSX or iOS\n      - Content: built content files for all other platforms\n  -->\n  <Target\n    Name=\"IncludeContent\"\n    DependsOnTargets=\"RunContentBuilder\"\n    Condition=\"'@(KniContentReference)' != ''\"\n    Outputs=\"%(ExtraContent.RecursiveDir)%(ExtraContent.Filename)%(ExtraContent.Extension)\"\n    BeforeTargets=\"BeforeBuild\">\n\n    <!-- Call CreateItem on each piece of ExtraContent so it's easy to switch the item type by platform. -->\n    <CreateItem\n      Include=\"%(ExtraContent.FullPath)\"\n      AdditionalMetadata=\"Link=$(PlatformResourcePrefix)%(ExtraContent.ContentDir)%(ExtraContent.RecursiveDir)%(ExtraContent.Filename)%(ExtraContent.Extension);CopyToOutputDirectory=PreserveNewest\"\n      Condition=\"'%(ExtraContent.Filename)' != ''\">\n      <Output TaskParameter=\"Include\" ItemName=\"Content\" Condition=\"'$(KniPlatform)' != 'Android' And '$(KniPlatform)' != 'iOS' And '$(KniPlatform)' != 'MacOSX'\" />\n      <Output TaskParameter=\"Include\" ItemName=\"BundleResource\" Condition=\"'$(KniPlatform)' == 'MacOSX' Or '$(KniPlatform)' == 'iOS'\" />\n      <Output TaskParameter=\"Include\" ItemName=\"AndroidAsset\" Condition=\"'$(KniPlatform)' == 'Android'\" />\n    </CreateItem>\n\n  </Target>\n\n</Project>\n"
  },
  {
    "path": "Platforms/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n[assembly:InternalsVisibleTo(\"Kni.Tests\")]\n\n"
  },
  {
    "path": "Platforms/Audio/Android/ConcreteAudioFactory.cs",
    "content": "﻿// Copyright (C)2022-2025 Nick Kastellanos\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteAudioFactory : AudioFactory\n    {\n        public override AudioServiceStrategy CreateAudioServiceStrategy()\n        {\n            return new ConcreteAudioServiceDroid();\n        }\n\n        public override MicrophoneStrategy CreateMicrophoneStrategy()\n        {\n#if !XAMARIN\n            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M)\n            {\n                return new ConcreteMicrophoneDroid();\n            }\n#endif\n\n            // falback to OpenAL Mic\n            return new ConcreteMicrophone();\n        }\n\n        public override SoundEffectStrategy CreateSoundEffectStrategy()\n        {\n            return new ConcreteSoundEffect();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Android/ConcreteAudioServiceDroid.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Platform.Audio.OpenAL;\nusing Microsoft.Xna.Platform.Utilities;\nusing Android.Content.PM;\nusing Android.Content;\nusing Android.Media;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    internal class ConcreteAudioServiceDroid: ConcreteAudioService\n    {\n    \n        internal ConcreteAudioServiceDroid() : base()\n        {\n        }\n\n        public override void PlatformPopulateCaptureDevices(List<Microphone> microphones, ref Microphone defaultMicrophone)\n        {\n#if !XAMARIN\n            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M)\n            {\n                Context appContext = Android.App.Application.Context;\n\n                AudioManager audioManager = appContext.GetSystemService(Context.AudioService) as AudioManager;\n                if (audioManager != null)\n                {\n                    AudioDeviceInfo[] devices = audioManager.GetDevices(GetDevicesTargets.Inputs);\n                    foreach (var device in devices)\n                    {\n                        if (device.Type == AudioDeviceType.BuiltinMic\n                        ||  device.Type == AudioDeviceType.WiredHeadset\n                        ||  device.Type == AudioDeviceType.UsbDevice\n                        ||  device.Type == AudioDeviceType.BluetoothSco\n                        )\n                        {\n                            string deviceIdentifier = device.ProductName;\n                            if (!String.IsNullOrWhiteSpace(device.Address))\n                                deviceIdentifier = deviceIdentifier + \"_\" + device.Address;\n                            Microphone microphone = base.CreateMicrophone(deviceIdentifier);\n                            microphones.Add(microphone);\n                        }\n                    }\n                }\n\n                // set the default Microphone\n                if (microphones.Count > 0)\n                {\n                    defaultMicrophone = base.CreateMicrophone(\"DefaultMicrophone\");\n                    microphones.Insert(0, defaultMicrophone);\n                }\n                return;\n            }            \n#endif\n\n            // falback to OpenAL Mic\n            base.PlatformPopulateCaptureDevices(microphones, ref defaultMicrophone);\n        }\n\n        public override int PlatformGetMaxPlayingInstances()\n        {\n            return 32;\n        }\n\n        public override void Suspend()\n        {\n            // Pause all currently playing sounds by pausing the mixer\n            OpenAL.ALC.DevicePause(base.ALDevice);\n        }\n\n        public override void Resume()\n        {\n            // Resume all sounds that were playing when the activity was paused\n            OpenAL.ALC.DeviceResume(base.ALDevice);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/Android/ConcreteMicrophoneDroid.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework.Audio;\nusing Android.Media;\nusing Android.Runtime;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    /// <summary>\n    /// Provides microphones capture features.\n    /// </summary>\n    public sealed class ConcreteMicrophoneDroid : MicrophoneStrategy\n    {\n        private AudioRecord _audioRecord;\n        private int _bufferSize;\n\n        private const ChannelIn ChannelConfig = ChannelIn.Mono;\n        private const Encoding AudioFormat = Encoding.Pcm16bit;\n        private const int AUDIORECORD_ERROR_BAD_VALUE = -2;\n        private const int AUDIORECORD_ERROR = -1;\n\n\n        public override TimeSpan BufferDuration\n        {\n            get { return base.BufferDuration; }\n            set { base.BufferDuration = value; }\n        }\n\n        public override MicrophoneState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public ConcreteMicrophoneDroid() : base()\n        {\n        }\n\n        public override void PlatformStart(string deviceName)\n        {\n#if !XAMARIN\n            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M)\n            {\n                // Calculate the buffer size\n                int minBufferSize = AudioRecord.GetMinBufferSize(SampleRate, ChannelConfig, AudioFormat);\n                if (minBufferSize == AUDIORECORD_ERROR_BAD_VALUE || minBufferSize == AUDIORECORD_ERROR)\n                    throw new InvalidOperationException(\"GetMinBufferSize failed with error \"+ minBufferSize + \".\");\n                \n                _bufferSize = base.GetSampleSizeInBytes(base.BufferDuration);\n                if (_bufferSize <= minBufferSize)\n                    throw new Exception(\"Invalid buffer size for AudioRecord!\");\n\n                if (deviceName == \"DefaultMicrophone\")\n                {\n                    // Create AudioRecord instance\n                    _audioRecord = new AudioRecord(\n                        AudioSource.Mic, // Microphone as the audio source\n                        SampleRate,\n                        ChannelConfig,\n                        AudioFormat,\n                        _bufferSize * 2\n                    );\n                }\n                else\n                {\n                    throw new NotImplementedException();\n                }\n\n                if (_audioRecord.State != Android.Media.State.Initialized)\n                    throw new Exception(\"AudioRecord initialization failed!\");\n\n                _audioRecord.SetNotificationMarkerPosition(_bufferSize);\n                _audioRecord.MarkerReached += _audioRecord_MarkerReached;\n\n                _audioRecord.StartRecording();\n            }\n            else\n            {\n                throw new InvalidOperationException();\n            }\n#endif\n        }\n\n        public override void PlatformStop()\n        {\n            _audioRecord.MarkerReached -= _audioRecord_MarkerReached;\n            _audioRecord.Stop();\n            _audioRecord.Release();\n        }\n\n        public override bool PlatformIsHeadset()\n        {\n            throw new NotImplementedException();\n        }\n\n        int _notifications = 0;\n        private void _audioRecord_MarkerReached(object sender, AudioRecord.MarkerReachedEventArgs e)\n        {\n            AudioRecord audioRecord = (AudioRecord)sender;\n\n            _audioRecord.SetNotificationMarkerPosition(_bufferSize);\n\n            _notifications++;\n            return;\n        }\n\n        public override bool PlatformUpdate()\n        {\n            int notifications = _notifications;\n            _notifications = Math.Max(0, _notifications-1);\n\n            return (notifications > 0);\n        }\n\n        public override int PlatformGetData(byte[] buffer, int offset, int count)\n        {\n            count = Math.Min(count, _bufferSize);\n            int bytesRead = _audioRecord.Read(buffer, offset, count);\n            return bytesRead;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Blazor/AudioLoader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    internal static class AudioLoader\n    {\n        internal const int FormatPcm = 1;\n        internal const int FormatMsAdpcm = 2;\n        internal const int FormatIeee = 3;\n        internal const int FormatIma4 = 17;\n\n\n        // Converts block alignment in bytes to sample alignment, primarily for compressed formats\n        // Calculation of sample alignment from http://kcat.strangesoft.net/openal-extensions/SOFT_block_alignment.txt\n        public static int SampleAlignment(int audioFormat, int channels, int bitsPerSample, int blockAlignment)\n        {\n            switch (audioFormat)\n            {\n                case FormatPcm:\n                    // PCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\"+ channels + \") is not supported.\");\n                    return 0;\n                case FormatIeee:\n                    // IEEE Float\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n                    return 0;\n                case FormatMsAdpcm:\n                    // Microsoft ADPCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n                    return (blockAlignment / channels - 7) * 2 + 2;\n                case FormatIma4:\n                    // IMA4 ADPCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n                    return (blockAlignment / channels - 4) / 4 * 8 + 1;\n\n                default:\n                    throw new NotSupportedException(\"The specified sound format (\" + audioFormat.ToString() + \") is not supported.\");\n            }\n        }\n\n        /// <summary>\n        /// Load a WAV file from stream.\n        /// </summary>\n        /// <param name=\"stream\">The stream positioned at the start of the WAV file.</param>\n        /// <param name=\"audioFormat\">Gets the audio format value.</param>\n        /// <param name=\"frequency\">Gets the frequency or sample rate.</param>\n        /// <param name=\"channels\">Gets the number of channels.</param>\n        /// <param name=\"blockAlignment\">Gets the block alignment, important for compressed sounds.</param>\n        /// <param name=\"bitsPerSample\">Gets the number of bits per sample.</param>\n        /// <param name=\"samplesPerBlock\">Gets the number of samples per block.</param>\n        /// <param name=\"sampleCount\">Gets the total number of samples.</param>\n        /// <returns>The byte buffer containing the waveform data or compressed blocks.</returns>\n        public static byte[] Load(Stream stream, out int audioFormat, out int frequency, out int channels, out int blockAlignment, out int bitsPerSample, out int samplesPerBlock, out int sampleCount)\n        {\n            using (BinaryReader reader = new BinaryReader(stream))\n            {\n                byte[] audioData = null;\n\n                //header\n                string signature = new string(reader.ReadChars(4));\n                if (signature != \"RIFF\")\n                    throw new ArgumentException(\"Specified stream is not a wave file.\");\n                reader.ReadInt32(); // riff_chunk_size\n\n                string wformat = new string(reader.ReadChars(4));\n                if (wformat != \"WAVE\")\n                    throw new ArgumentException(\"Specified stream is not a wave file.\");\n\n                audioFormat = 0;\n                channels = 0;\n                bitsPerSample = 0;\n                frequency = 0;\n                blockAlignment = 0;\n                samplesPerBlock = 0;\n                sampleCount = 0;\n\n                // WAVE header\n                while (audioData == null)\n                {\n                    string chunkType = new string(reader.ReadChars(4));\n                    int chunkSize = reader.ReadInt32();\n                    switch (chunkType)\n                    {\n                        case \"fmt \":\n                            {\n                                audioFormat = reader.ReadInt16(); // 2\n                                channels = reader.ReadInt16(); // 4\n                                frequency = reader.ReadInt32();  // 8\n                                int byteRate = reader.ReadInt32();    // 12\n                                blockAlignment = (int)reader.ReadInt16();  // 14\n                                bitsPerSample = reader.ReadInt16(); // 16\n\n                                // Read extra data if present\n                                if (chunkSize > 16)\n                                {\n                                    int extraDataSize = reader.ReadInt16();\n                                    if (audioFormat == FormatIma4)\n                                    {\n                                        samplesPerBlock = reader.ReadInt16();\n                                        extraDataSize -= 2;\n                                    }\n                                    if (extraDataSize > 0)\n                                    {\n                                        if (reader.BaseStream.CanSeek)\n                                            reader.BaseStream.Seek(extraDataSize, SeekOrigin.Current);\n                                        else\n                                        {\n                                            for (int i = 0; i < extraDataSize; ++i)\n                                                reader.ReadByte();\n                                        }\n                                    }\n                                }\n                            }\n                            break;\n                        case \"fact\":\n                            if (audioFormat == FormatIma4)\n                            {\n                                sampleCount = reader.ReadInt32() * channels;\n                                chunkSize -= 4;\n                            }\n                            // Skip any remaining chunk data\n                            if (chunkSize > 0)\n                            {\n                                if (reader.BaseStream.CanSeek)\n                                    reader.BaseStream.Seek(chunkSize, SeekOrigin.Current);\n                                else\n                                {\n                                    for (int i = 0; i < chunkSize; ++i)\n                                        reader.ReadByte();\n                                }\n                            }\n                            break;\n                        case \"data\":\n                            audioData = reader.ReadBytes(chunkSize);\n                            break;\n                        default:\n                            // Skip this chunk\n                            if (reader.BaseStream.CanSeek)\n                                reader.BaseStream.Seek(chunkSize, SeekOrigin.Current);\n                            else\n                            {\n                                for (int i = 0; i < chunkSize; ++i)\n                                    reader.ReadByte();\n                            }\n                            break;\n                    }\n                }\n\n                // Calculate fields we didn't read from the file\n\n                if (samplesPerBlock == 0)\n                {\n                    samplesPerBlock = SampleAlignment(audioFormat, channels, bitsPerSample, blockAlignment);\n                }\n\n                if (sampleCount == 0)\n                {\n                    switch (audioFormat)\n                    {\n                        case FormatPcm:\n                        case FormatIeee:\n                            sampleCount = audioData.Length / ((channels * bitsPerSample) / 8);\n                            break;\n\n                        case FormatIma4:\n                        case FormatMsAdpcm:\n                            sampleCount = ((audioData.Length / blockAlignment) * samplesPerBlock) + SampleAlignment(audioFormat, channels, bitsPerSample, audioData.Length % blockAlignment);\n                            break;\n\n                        default:\n                            throw new InvalidDataException(\"Unhandled WAV format \" + audioFormat.ToString());\n                    }\n                }\n\n                return audioData;\n            }\n        }\n\n        // Convert buffer containing 24-bit signed PCM wav data to a 16-bit signed PCM buffer\n        internal static unsafe byte[] Convert24To16(byte[] data, int offset, int count)\n        {\n            if ((offset + count > data.Length) || ((count % 3) != 0))\n                throw new ArgumentException(\"Invalid 24-bit PCM data received\");\n            // Sample count includes both channels if stereo\n            int sampleCount = count / 3;\n            byte[] outData = new byte[sampleCount * sizeof(short)];\n            fixed (byte* src = &data[offset])\n            {\n                fixed (byte* dst = &outData[0])\n                {\n                    int srcIndex = 0;\n                    int dstIndex = 0;\n                    for (int i = 0; i < sampleCount; ++i)\n                    {\n                        // Drop the least significant byte from the 24-bit sample to get the 16-bit sample\n                        dst[dstIndex] = src[srcIndex + 1];\n                        dst[dstIndex + 1] = src[srcIndex + 2];\n                        dstIndex += 2;\n                        srcIndex += 3;\n                    }\n                }\n            }\n            return outData;\n        }\n\n        // Convert buffer containing IEEE 32-bit float wav data to a 16-bit signed PCM buffer\n        internal static unsafe byte[] ConvertFloatTo16(byte[] data, int offset, int count)\n        {\n            if ((offset + count > data.Length) || ((count % 4) != 0))\n                throw new ArgumentException(\"Invalid 32-bit float PCM data received\");\n            // Sample count includes both channels if stereo\n            int sampleCount = count / 4;\n            byte[] outData = new byte[sampleCount * sizeof(short)];\n            fixed (byte* src = &data[offset])\n            {\n                float* f = (float*)src;\n                fixed (byte* dst = &outData[0])\n                {\n                    byte* d = dst;\n                    for (int i = 0; i < sampleCount; ++i)\n                    {\n                        short s = (short)(*f * 32767.0f);\n                        *d++ = (byte)(s & 0xff);\n                        *d++ = (byte)(s >> 8);\n                        ++f;\n                    }\n                }\n            }\n            return outData;\n        }\n\n        #region IMA4 decoding\n\n        // Step table\n        static int[] stepTable = new int[]\n        {\n            7, 8, 9, 10, 11, 12, 13, 14,\n            16, 17, 19, 21, 23, 25, 28, 31,\n            34, 37, 41, 45, 50, 55, 60, 66,\n            73, 80, 88, 97, 107, 118, 130, 143,\n            157, 173, 190, 209, 230, 253, 279, 307,\n            337, 371, 408, 449, 494, 544, 598, 658,\n            724, 796, 876, 963, 1060, 1166, 1282, 1411,\n            1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024,\n            3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484,\n            7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,\n            15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,\n            32767\n        };\n\n        // Step index tables\n        static int[] indexTable = new int[]\n        {\n            // ADPCM data size is 4\n            -1, -1, -1, -1, 2, 4, 6, 8,\n            -1, -1, -1, -1, 2, 4, 6, 8\n        };\n\n        struct ImaState\n        {\n            public int predictor;\n            public int stepIndex;\n        }\n\n        static int AdpcmImaWavExpandNibble(ref ImaState channel, int nibble)\n        {\n            int diff = stepTable[channel.stepIndex] >> 3;\n            if ((nibble & 0x04) != 0)\n                diff += stepTable[channel.stepIndex];\n            if ((nibble & 0x02) != 0)\n                diff += stepTable[channel.stepIndex] >> 1;\n            if ((nibble & 0x01) != 0)\n                diff += stepTable[channel.stepIndex] >> 2;\n            if ((nibble & 0x08) != 0)\n                channel.predictor -= diff;\n            else\n                channel.predictor += diff;\n\n            if (channel.predictor < -32768)\n                channel.predictor = -32768;\n            else if (channel.predictor > 32767)\n                channel.predictor = 32767;\n\n            channel.stepIndex += indexTable[nibble];\n\n            if (channel.stepIndex < 0)\n                channel.stepIndex = 0;\n            else if (channel.stepIndex > 88)\n                channel.stepIndex = 88;\n\n            return channel.predictor;\n        }\n\n        // Convert buffer containing IMA/ADPCM wav data to a 16-bit signed PCM buffer\n        internal static byte[] ConvertIma4ToPcm(byte[] buffer, int offset, int count, int channels, int blockAlignment)\n        {\n            ImaState channel0 = new ImaState();\n            ImaState channel1 = new ImaState();\n\n            int sampleCountFullBlock = ((blockAlignment / channels) - 4) / 4 * 8 + 1;\n            int sampleCountLastBlock = 0;\n            if ((count % blockAlignment) > 0)\n                sampleCountLastBlock = (((count % blockAlignment) / channels) - 4) / 4 * 8 + 1;\n            int sampleCount = ((count / blockAlignment) * sampleCountFullBlock) + sampleCountLastBlock;\n            byte[] samples = new byte[sampleCount * sizeof(short) * channels];\n            int sampleOffset = 0;\n\n            while (count > 0)\n            {\n                int blockSize = blockAlignment;\n                if (count < blockSize)\n                    blockSize = count;\n                count -= blockAlignment;\n\n                channel0.predictor = buffer[offset++];\n                channel0.predictor |= buffer[offset++] << 8;\n                if ((channel0.predictor & 0x8000) != 0)\n                    channel0.predictor -= 0x10000;\n                channel0.stepIndex = buffer[offset++];\n                if (channel0.stepIndex > 88)\n                    channel0.stepIndex = 88;\n                offset++;\n                int index = sampleOffset * 2;\n                samples[index] = (byte)channel0.predictor;\n                samples[index + 1] = (byte)(channel0.predictor >> 8);\n                ++sampleOffset;\n\n                if (channels == 2)\n                {\n                    channel1.predictor = buffer[offset++];\n                    channel1.predictor |= buffer[offset++] << 8;\n                    if ((channel1.predictor & 0x8000) != 0)\n                        channel1.predictor -= 0x10000;\n                    channel1.stepIndex = buffer[offset++];\n                    if (channel1.stepIndex > 88)\n                        channel1.stepIndex = 88;\n                    offset++;\n                    index = sampleOffset * 2;\n                    samples[index] = (byte)channel1.predictor;\n                    samples[index + 1] = (byte)(channel1.predictor >> 8);\n                    ++sampleOffset;\n                }\n\n                if (channels == 2)\n                {\n                    for (int nibbles = 2 * (blockSize - 8); nibbles > 0; nibbles -= 16)\n                    {\n                        for (int i = 0; i < 4; i++)\n                        {\n                            index = (sampleOffset + i * 4) * 2;\n                            int sample = AdpcmImaWavExpandNibble(ref channel0, buffer[offset + i] & 0x0f);\n                            samples[index] = (byte)sample;\n                            samples[index + 1] = (byte)(sample >> 8);\n\n                            index = (sampleOffset + i * 4 + 2) * 2;\n                            sample = AdpcmImaWavExpandNibble(ref channel0, buffer[offset + i] >> 4);\n                            samples[index] = (byte)sample;\n                            samples[index + 1] = (byte)(sample >> 8);\n                        }\n                        offset += 4;\n\n                        for (int i = 0; i < 4; i++)\n                        {\n                            index = (sampleOffset + i * 4 + 1) * 2;\n                            int sample = AdpcmImaWavExpandNibble(ref channel1, buffer[offset + i] & 0x0f);\n                            samples[index] = (byte)sample;\n                            samples[index + 1] = (byte)(sample >> 8);\n\n                            index = (sampleOffset + i * 4 + 3) * 2;\n                            sample = AdpcmImaWavExpandNibble(ref channel1, buffer[offset + i] >> 4);\n                            samples[index] = (byte)sample;\n                            samples[index + 1] = (byte)(sample >> 8);\n                        }\n                        offset += 4;\n                        sampleOffset += 16;\n                    }\n                }\n                else\n                {\n                    for (int nibbles = 2 * (blockSize - 4); nibbles > 0; nibbles -= 2)\n                    {\n                        index = (sampleOffset * 2);\n                        int b = buffer[offset];\n                        int sample = AdpcmImaWavExpandNibble(ref channel0, b & 0x0f);\n                        samples[index] = (byte)sample;\n                        samples[index + 1] = (byte)(sample >> 8);\n                        index += 2;\n                        sample = AdpcmImaWavExpandNibble(ref channel0, b >> 4);\n                        samples[index] = (byte)sample;\n                        samples[index + 1] = (byte)(sample >> 8);\n\n                        sampleOffset += 2;\n                        ++offset;\n                    }\n                }\n            }\n\n            return samples;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Blazor/ConcreteAudioFactory.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteAudioFactory : AudioFactory\n    {\n        public override AudioServiceStrategy CreateAudioServiceStrategy()\n        {\n            return new ConcreteAudioService();\n        }\n\n        public override MicrophoneStrategy CreateMicrophoneStrategy()\n        {\n            return new ConcreteMicrophone();\n        }\n\n        public override SoundEffectStrategy CreateSoundEffectStrategy()\n        {\n            return new ConcreteSoundEffect();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Blazor/ConcreteAudioService.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\nusing nkast.Wasm.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    internal class ConcreteAudioService : AudioServiceStrategy\n    {\n        internal AudioContext Context { get; private set; }\n\n\n        internal ConcreteAudioService()\n        {\n            Context = new AudioContext();\n        }\n\n        public override SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy sfxStrategy)\n        {\n            return new ConcreteSoundEffectInstance(this, sfxStrategy);\n        }\n\n        public override IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels)\n        {\n            return new ConcreteDynamicSoundEffectInstance(this, sampleRate, channels);\n        }\n\n        public override void PlatformPopulateCaptureDevices(List<Microphone> microphones, ref Microphone defaultMicrophone)\n        {\n            // set the default Microphone\n            defaultMicrophone = base.CreateMicrophone(\"DefaultMicrophone\");\n            microphones.Insert(0, defaultMicrophone);\n        }\n\n        public override int PlatformGetMaxPlayingInstances()\n        {\n            // These platforms are only limited by memory.\n            return int.MaxValue;\n        }\n\n        public override void PlatformSetReverbSettings(ReverbSettings reverbSettings)\n        {\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                // TODO: dispose managed state (managed objects).\n                Context.Dispose();\n            }\n\n            // TODO: free unmanaged resources (unmanaged objects)\n            // TODO: set large fields to null.\n\n            Context = null;\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/Blazor/ConcreteDynamicSoundEffectInstance.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Audio;\nusing nkast.Wasm.Audio;\nusing nkast.Wasm.ChannelMessaging;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteDynamicSoundEffectInstance : ConcreteSoundEffectInstance\n        , IDynamicSoundEffectInstanceStrategy\n    {\n        private int _sampleRate;\n        private int _channels;\n\n        AudioWorkletNode _streamSource;\n        private bool _isStreamSourceInitialized;\n        private int _pendingBuffers;\n\n\n        private readonly WeakReference _dynamicSoundEffectInstanceRef = new WeakReference(null);\n        DynamicSoundEffectInstance IDynamicSoundEffectInstanceStrategy.DynamicSoundEffectInstance\n        {\n            get { return _dynamicSoundEffectInstanceRef.Target as DynamicSoundEffectInstance; }\n            set { _dynamicSoundEffectInstanceRef.Target = value; }\n        }\n\n        public override float Pitch\n        {\n            get { return base.Pitch; }\n            set\n            {\n                if (value != 0)\n                    throw new NotSupportedException(\"DynamicSoundEffectInstance does not support Pitch.\");\n\n                base.Pitch = value;\n            }\n        }\n\n        internal ConcreteDynamicSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, int sampleRate, int channels)\n            : base(audioServiceStrategy, null)\n        {\n            _sampleRate = sampleRate;\n            _channels = channels;\n\n            AudioContext context = ConcreteAudioService.Context;\n\n            // TODO: implement resampling.\n            if (_sampleRate != context.SampleRate)\n                throw new NotImplementedException($\"Sample rate {_sampleRate} does not match AudioContext sample rate {context.SampleRate}.\");\n            // TODO: implement Stereo.\n            if (_channels != 1)\n                throw new NotImplementedException($\"Channels {_channels} is not implemented.\");\n        }\n\n        public int BuffersNeeded { get; set; }\n\n        public int DynamicPlatformGetPendingBufferCount()\n        {\n            return _tmpBuffers.Count + _pendingBuffers;\n        }\n\n        public override void PlatformPause()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformPlay(bool isLooped)\n        {\n            AudioContext context = ConcreteAudioService.Context;\n\n            float masterVolume = SoundEffect.MasterVolume;\n            _gainNode.Gain.SetTargetAtTime(this.Volume * masterVolume, 0, 0);\n            _stereoPannerNode.Pan.SetTargetAtTime(this.Pan, 0, 0);\n\n            InitStreamSourceAsync();\n        }\n\n        private async Task InitStreamSourceAsync()\n        {\n            AudioContext context = ConcreteAudioService.Context;\n\n            await context.AudioWorklet.AddModuleAsync(\"js/streamProcessor.js\");\n            _streamSource = context.CreateWorklet(\"stream-processor\");\n            _streamSource.Port.Message += StreamSource_OnMessage;\n            _streamSource.Connect(_sourceTarget);\n\n            _isStreamSourceInitialized = true;\n\n            // Submit any pending buffers that were added before the AudioWorklet was initialized.\n            while (_tmpBuffers.Count > 0)\n            {\n                byte[] tmpBuffer = _tmpBuffers.Dequeue();\n                _streamSource.Port.PostMessage(tmpBuffer, 0, tmpBuffer.Length);\n                _pendingBuffers++;\n            }\n        }\n\n        private void ReleaseMicrophoneDevice()\n        {\n            if (_streamSource != null)\n            {\n                _streamSource.Disconnect(_sourceTarget);\n                _streamSource.Dispose();\n                _streamSource = null;\n            }\n            _isStreamSourceInitialized = false;\n            _pendingBuffers = 0;\n            _tmpBuffers.Clear();\n\n\n        }\n\n        private void StreamSource_OnMessage(object sender, MessageEventArgs e)\n        {\n            if (e.DataByteArray != null)\n            {\n                \n            }\n            else\n            {\n                var msg = e.DataFloat64;\n                \n                if (msg == 1) // buffer is proccessed\n                {\n                    _pendingBuffers--;\n                }\n            }\n        }\n\n        public override void PlatformResume(bool isLooped)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformStop()\n        {\n            ReleaseMicrophoneDevice();\n        }\n\n        public override void PlatformRelease(bool isLooped)\n        {\n            System.Diagnostics.Debug.Assert(isLooped == false);\n\n            throw new NotImplementedException();\n        }\n\n        private readonly Queue<byte[]> _tmpBuffers = new Queue<byte[]>();\n\n        public void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state)\n        {\n            if (_isStreamSourceInitialized == false)\n            {\n                // store pending buffers until the AudioWorklet is initialized\n                byte[] tmpBuffer = new byte[count];\n                Buffer.BlockCopy(buffer, offset, tmpBuffer, 0, count);\n                _tmpBuffers.Enqueue(tmpBuffer);\n            }\n            else\n            {\n                _streamSource.Port.PostMessage(buffer, offset, count);\n                _pendingBuffers++;\n            }\n        }\n\n        public void DynamicPlatformUpdateBuffers()\n        {\n        }\n\n        public void DynamicPlatformClearBuffers()\n        {\n            _pendingBuffers = 0;\n            _tmpBuffers.Clear();\n            _streamSource.Port.PostMessage(2); // 2 = clear buffers\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Blazor/ConcreteMicrophone.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Audio;\nusing nkast.Wasm.Audio;\nusing nkast.Wasm.ChannelMessaging;\nusing nkast.Wasm.Dom;\nusing nkast.Wasm.Media;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    /// <summary>\n    /// Provides microphones capture features.\n    /// </summary>\n    public sealed class ConcreteMicrophone : MicrophoneStrategy\n    {\n        AudioContext _ac;\n        private CancellationTokenSource _micInitCts;\n        MediaStream _micStream;\n        MediaStreamSourceNode _micNode;\n        AudioWorkletNode _micWorkletNode;\n\n        byte[] _dataBuffer;\n        private int _dataBufferBegin = 0;\n        private int _dataBufferEnd = 0;\n\n\n        public override TimeSpan BufferDuration\n        {\n            get { return base.BufferDuration; }\n            set { base.BufferDuration = value; }\n        }\n\n        public override MicrophoneState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n\n        internal ConcreteMicrophone()\n            : base()\n        {\n            using (AudioContext ac = new AudioContext())\n            {\n                base.SampleRate = ac.SampleRate;\n\n                int bufferSize = base.SampleRate * 1 * sizeof(short) * 2;\n                _dataBuffer = new byte[bufferSize];\n            }\n        }\n\n        public override void PlatformStart(string deviceName)\n        {\n            InitMicrophoneDeviceAsync();\n        }\n\n        public override void PlatformStop()\n        {\n            ReleaseMicrophoneDevice();\n        }\n\n        public override bool PlatformIsHeadset()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override bool PlatformUpdate()\n        {\n            if (_dataBufferEnd != _dataBufferBegin)\n                return true;\n\n            return false;\n        }\n\n        public override int PlatformGetData(byte[] buffer, int offset, int count)\n        {\n            int availableDataSize = (_dataBufferEnd - _dataBufferBegin);\n            if (availableDataSize < 0)\n                availableDataSize = availableDataSize + _dataBuffer.Length;\n\n            count = Math.Min(count, availableDataSize);\n            if (count > 0)\n            {\n                int firstBlockSize = Math.Min(count, _dataBuffer.Length - _dataBufferBegin);\n                Buffer.BlockCopy(_dataBuffer, _dataBufferBegin, buffer, offset, firstBlockSize);\n                if (count > firstBlockSize)\n                    Buffer.BlockCopy(_dataBuffer, 0, buffer, offset + firstBlockSize, (count - firstBlockSize));\n                _dataBufferBegin = (_dataBufferBegin + count) % _dataBuffer.Length;\n            }\n\n            return count;\n        }\n\n        private void OnMicMessage(object sender, MessageEventArgs e)\n        {\n            if (e.DataByteArray != null)\n            {\n                JSUInt8Array data = e.DataByteArray;\n\n                int count = data.Count;\n\n                if (count > _dataBuffer.Length / 2)\n                    throw new InvalidOperationException(\"_dataBuffer must be at least twice as large as data length.\");\n\n                if (count <= (_dataBuffer.Length - _dataBufferEnd))\n                {\n                    data.CopyTo(0, _dataBuffer, _dataBufferEnd, count);\n                }\n                else\n                {\n                    int firstBlockSize = (_dataBuffer.Length - _dataBufferEnd);\n                    data.CopyTo(0, _dataBuffer, _dataBufferEnd, firstBlockSize);\n                    data.CopyTo(firstBlockSize, _dataBuffer, 0, count - firstBlockSize);\n                }\n                _dataBufferEnd = (_dataBufferEnd + count) % _dataBuffer.Length;\n\n                data.Dispose();\n            }\n            else\n            {\n                double msg = e.DataFloat64;\n\n            }\n        }\n\n        private async Task InitMicrophoneDeviceAsync()\n        {\n            _micInitCts = new CancellationTokenSource();\n            CancellationToken token = _micInitCts.Token;\n\n            try\n            {\n                _ac = new AudioContext();\n\n                // init micProcessor AudioWorklet\n                await _ac.AudioWorklet.AddModuleAsync(\"js/micProcessor.js\");\n                if (token.IsCancellationRequested) return;\n\n                _micWorkletNode = _ac.CreateWorklet(\"mic-processor\");\n                _micWorkletNode.Port.Message += OnMicMessage;\n\n                // init and start Microphone\n                MediaDevices md = MediaDevices.FromNavigator(Window.Current.Navigator);\n                _micStream = await md.GetUserMediaAsync(new UserMediaConstraints() { Audio = true });\n                if (token.IsCancellationRequested) return;\n                _micNode = _ac.CreateMediaStreamSource(_micStream);\n                _micNode.Connect(_micWorkletNode);\n            }\n            catch (Exception ex)\n            {\n            }\n        }\n\n        private void ReleaseMicrophoneDevice()\n        {\n            if (_micInitCts != null)\n            {\n                _micInitCts.Cancel();\n                _micInitCts = null;\n            }\n\n            if (_micNode != null)\n            {\n                _micNode.Disconnect(_micWorkletNode);\n                _micNode.Dispose();\n                _micNode = null;\n            }\n\n            if (_micStream != null)\n            {\n                _micStream.Dispose();\n                _micStream = null;\n            }\n\n            if (_micWorkletNode != null)\n            {\n                _micWorkletNode.Port.Message-= OnMicMessage;\n                _micWorkletNode.Dispose();\n                _micWorkletNode = null;\n            }\n\n            if (_ac != null)\n            {\n                _ac.Dispose();\n                _ac = null;\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Blazor/ConcreteSoundEffect.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Platform.Audio.Utilities;\nusing nkast.Wasm.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    class ConcreteSoundEffect : SoundEffectStrategy\n    {\n        private AudioBuffer _audioBuffer;\n\n\n        internal const int FormatPcm = 1;\n        internal const int FormatMsAdpcm = 2;\n        internal const int FormatIeee = 3;\n        internal const int FormatIma4 = 17;\n\n        #region Initialization\n\n        public override void PlatformLoadAudioStream(Stream stream, out TimeSpan duration)\n        {\n            byte[] buffer;\n\n            int audioFormat;\n            int freq;\n            int channels;\n            int blockAlignment;\n            int bitsPerSample;\n            int samplesPerBlock;\n            int sampleCount;\n\n            buffer = AudioLoader.Load(stream, out audioFormat, out freq, out channels, out blockAlignment, out bitsPerSample, out samplesPerBlock, out sampleCount);\n\n            duration = TimeSpan.FromSeconds((float)sampleCount / (float)freq);\n\n            PlatformInitializeBuffer(buffer, 0, buffer.Length, audioFormat, channels, freq, blockAlignment, bitsPerSample, 0, sampleCount / channels);\n        }\n\n        private void PlatformInitializeBuffer(byte[] buffer, int bufferOffset, int bufferSize, int audioFormat, int channels, int sampleRate, int blockAlignment, int bitsPerSample, int loopStart, int loopLength)\n        {\n            ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete<ConcreteAudioService>();\n\n            switch (audioFormat)\n            {\n                case AudioLoader.FormatPcm:\n                    // PCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n                    PlatformInitializePcm(buffer, bufferOffset, bufferSize, bitsPerSample, sampleRate, channels, loopStart, loopLength);\n                    break;\n                case AudioLoader.FormatIeee:\n                    // IEEE Float\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n\n                    {\n                        InitializeIeeeFloat(buffer, bufferOffset, bufferSize, bitsPerSample, sampleRate, channels, loopStart, loopLength);\n                    }\n                    break;\n                case AudioLoader.FormatMsAdpcm:\n                    // Microsoft ADPCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n\n                    {\n                        // If MS-ADPCM is not supported, convert to 16-bit signed PCM\n                        buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, bufferOffset, bufferSize, channels, blockAlignment);\n                        PlatformInitializePcm(buffer, 0, buffer.Length, 16, sampleRate, channels, loopStart, loopLength);\n                    }\n                    break;\n                case AudioLoader.FormatIma4:\n                    // IMA4 ADPCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n\n                    {\n                        // If IMA/ADPCM is not supported, convert to 16-bit signed PCM\n                        buffer = AudioLoader.ConvertIma4ToPcm(buffer, bufferOffset, bufferSize, channels, blockAlignment);\n                        PlatformInitializePcm(buffer, 0, buffer.Length, 16, sampleRate, channels, loopStart, loopLength);\n                    }\n                    break;\n\n                default:\n                    throw new NotSupportedException(\"The specified sound format (\" + audioFormat.ToString() + \") is not supported.\");\n            }\n        }\n\n\n        public override void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength)\n        {\n            short format = BitConverter.ToInt16(header, 0);\n            short channels = BitConverter.ToInt16(header, 2);\n            int sampleRate = BitConverter.ToInt32(header, 4);\n            short blockAlignment = BitConverter.ToInt16(header, 12);\n            short bitsPerSample = BitConverter.ToInt16(header, 14);\n\n            switch (format)\n            {\n                case FormatPcm:\n                    {\n                        this.PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength);\n                    }\n                    break;\n\n                case FormatMsAdpcm:\n                    {\n                        buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, 0, buffer.Length, channels, blockAlignment);\n                        PlatformInitializePcm(buffer, 0, buffer.Length, 16, sampleRate, channels, loopStart, loopLength);\n                    }\n                    break;\n\n                case FormatIeee:\n                    {\n                        this.InitializeIeeeFloat(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength);\n                    }\n                    break;\n\n                default:\n                    throw new NotImplementedException();\n            }\n        }\n\n        public override void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength)\n        {\n            ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete<ConcreteAudioService>();\n\n            if (index != 0)\n                throw new NotImplementedException();\n            if (loopStart != 0)\n                throw new NotImplementedException();\n\n            int numOfChannels = (int)channels;\n            \n            _audioBuffer = concreteAudioService.Context.CreateBuffer(numOfChannels, loopLength, sampleRate);\n\n            // convert buffer to float (-1,+1) and set data for each channel.\n            unsafe\n            {\n                fixed (void* pBuffer = buffer)\n                {\n                    switch (sampleBits)\n                    {\n                        case 16: // PCM 16bit\n                            short* pBuffer16 = (short*)pBuffer;\n                            float[] dest = new float[loopLength];\n                            for (int c = 0; c < numOfChannels; c++)\n                            {\n                                for (int i = 0; i < loopLength; i++)\n                                {\n                                    dest[i] = (float)pBuffer16[i * numOfChannels] / (float)short.MaxValue;\n                                }\n                                _audioBuffer.CopyToChannel(dest, c);\n                            }                           \n                            break;\n\n                        default:\n                            throw new NotImplementedException();\n                    }\n                }\n            }\n\n        }\n\n        public void InitializeIeeeFloat(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength)\n        {\n            ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete<ConcreteAudioService>();\n\n            if (index != 0)\n                throw new NotImplementedException();\n            if (loopStart != 0)\n                throw new NotImplementedException();\n\n            int numOfChannels = (int)channels;\n            \n            _audioBuffer = concreteAudioService.Context.CreateBuffer(numOfChannels, loopLength, sampleRate);\n\n            // set data for each channel.\n            unsafe\n            {\n                fixed (void* pBuffer = buffer)\n                {\n                    switch (sampleBits)\n                    {\n                        case 32:\n                            float* pBuffer32f = (float*)pBuffer;\n                            float[] dest = new float[loopLength];\n                            for (int c = 0; c < numOfChannels; c++)\n                            {\n                                for (int i = 0; i < loopLength; i++)\n                                {\n                                    dest[i] = pBuffer32f[i * numOfChannels];\n                                }\n                                _audioBuffer.CopyToChannel(dest, c);\n                            }                           \n                            break;\n\n                        default:\n                            throw new NotImplementedException();\n                    }\n                }\n            }\n\n        }\n\n        public override void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength)\n        {\n            ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete<ConcreteAudioService>();\n\n        }\n\n        #endregion\n\n        internal AudioBuffer GetAudioBuffer()\n        {\n            return _audioBuffer;\n        }\n\n#region IDisposable Members\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _audioBuffer.Dispose();\n            }\n\n            _audioBuffer = null;\n        }\n\n#endregion\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/Blazor/ConcreteSoundEffectInstance.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing nkast.Wasm.Audio;\nusing AudioListener = Microsoft.Xna.Framework.Audio.AudioListener;\nusing WebAudioListener = nkast.Wasm.Audio.AudioListener;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public class ConcreteSoundEffectInstance : SoundEffectInstanceStrategy\n    {\n        private AudioServiceStrategy _audioServiceStrategy;\n        private ConcreteSoundEffect _concreteSoundEffect;\n        internal ConcreteAudioService ConcreteAudioService { get { return (ConcreteAudioService)_audioServiceStrategy; } }\n\n        AudioBufferSourceNode _bufferSource;\n        bool _ended;\n        protected StereoPannerNode _stereoPannerNode;\n        protected GainNode _gainNode;\n        protected AudioNode _sourceTarget;\n\n        public override bool IsXAct\n        {\n            get { return base.IsXAct; }\n            set { base.IsXAct = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override float Pan\n        {\n            get { return base.Pan; }\n            set\n            {\n                base.Pan = value;\n\n                if (_stereoPannerNode != null)\n                {\n                    _stereoPannerNode.Pan.SetTargetAtTime(value, 0, 0.05f);\n                }\n            }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n\n                // XAct sound effects are not tied to the SoundEffect master volume.\n                float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f;\n\n                if (_gainNode != null)\n                {\n                    _gainNode.Gain.SetTargetAtTime(value * masterVolume, 0, 0.05f);\n                }\n            }\n        }\n\n        public override float Pitch\n        {\n            get { return base.Pitch; }\n            set\n            {\n                base.Pitch = value;\n\n                if (_bufferSource != null)\n                {\n                    float wapitch = (float)Math.Pow(2, value);\n                    //TODO: implement Pitch\n                    //_bufferSource.PlaybackRate.SetTargetAtTime(wapitch, 0, 0.05f);\n                }\n            }\n        }\n\n        #region Initialization\n\n        internal ConcreteSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy)\n            : base(audioServiceStrategy, sfxStrategy)\n        {\n            _audioServiceStrategy = audioServiceStrategy;\n            _concreteSoundEffect = (ConcreteSoundEffect)sfxStrategy;\n\n            AudioContext context = ConcreteAudioService.Context;\n\n            _stereoPannerNode = ConcreteAudioService.Context.CreateStereoPanner();\n            _gainNode = ConcreteAudioService.Context.CreateGain();\n\n            _sourceTarget = context.Destination;\n            _stereoPannerNode.Connect(_sourceTarget); _sourceTarget = _stereoPannerNode;\n            _gainNode.Connect(_sourceTarget); _sourceTarget = _gainNode;\n\n            this.Volume = 1.0f;\n            this.Pan = 0.0f;\n            this.Pitch = 0.0f;\n        }\n\n        #endregion // Initialization\n\n        public override void PlatformApply3D(AudioListener listener, AudioEmitter emitter)\n        {\n        }\n\n        public override void PlatformPause()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformPlay(bool isLooped)\n        {\n            AudioContext context = ConcreteAudioService.Context;\n\n            _bufferSource = context.CreateBufferSource();\n            _bufferSource.Loop = isLooped;\n            _bufferSource.Buffer = _concreteSoundEffect.GetAudioBuffer();\n            _bufferSource.Connect(_sourceTarget);\n\n            // XAct sound effects are not tied to the SoundEffect master volume.\n            float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f;\n            _gainNode.Gain.SetTargetAtTime(base.Volume * masterVolume, 0, 0);\n            _stereoPannerNode.Pan.SetTargetAtTime(base.Pan, 0, 0);\n\n            _bufferSource.OnEnded += _bufferSource_OnEnded;\n            _bufferSource.Start();\n        }\n\n        public override void PlatformResume(bool isLooped)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformStop()\n        {\n            AudioContext context = ConcreteAudioService.Context;\n\n            _bufferSource.OnEnded -= _bufferSource_OnEnded;\n            _ended = false;\n\n            _bufferSource.Stop();\n            _bufferSource.Disconnect(_sourceTarget);\n            _bufferSource.Dispose();\n            _bufferSource = null;\n        }\n\n        public override void PlatformRelease(bool isLooped)\n        {\n        }\n\n        public override bool PlatformUpdateState(ref SoundState state)\n        {\n            if (state != SoundState.Stopped && _ended)\n            {\n                _ended = false;\n                state = SoundState.Stopped;\n\n                _bufferSource.Disconnect(_sourceTarget);\n                _bufferSource.Dispose();\n                _bufferSource = null;\n\n                return true;\n            }\n\n            return false;\n        }\n\n        public override void PlatformSetIsLooped(bool isLooped, SoundState state)\n        {\n            if (_bufferSource != null)\n            {\n                _bufferSource.Loop = isLooped;\n            }\n        }\n\n        public override void PlatformSetReverbMix(SoundState state, float mix, float pan)\n        {\n        }\n\n        public override void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency)\n        {\n        }\n\n        public override void PlatformClearFilter()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_bufferSource != null)\n                    _bufferSource.Dispose();\n\n                _gainNode.Dispose();\n                _stereoPannerNode.Dispose();\n            }\n\n            _bufferSource = null;\n            _gainNode = null;\n            _stereoPannerNode = null;\n        }\n\n        private void _bufferSource_OnEnded(object sender, EventArgs e)\n        {\n            _ended = true;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/OpenAL/AudioLoader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    internal static class AudioLoader\n    {\n        internal const int FormatPcm = 1;\n        internal const int FormatMsAdpcm = 2;\n        internal const int FormatIeee = 3;\n        internal const int FormatIma4 = 17;\n\n\n        // Converts block alignment in bytes to sample alignment, primarily for compressed formats\n        // Calculation of sample alignment from http://kcat.strangesoft.net/openal-extensions/SOFT_block_alignment.txt\n        public static int SampleAlignment(int audioFormat, int channels, int bitsPerSample, int blockAlignment)\n        {\n            switch (audioFormat)\n            {\n                case FormatPcm:\n                    // PCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\"+ channels + \") is not supported.\");\n                    return 0;\n                case FormatIeee:\n                    // IEEE Float\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n                    return 0;\n                case FormatMsAdpcm:\n                    // Microsoft ADPCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n                    return (blockAlignment / channels - 7) * 2 + 2;\n                case FormatIma4:\n                    // IMA4 ADPCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n                    return (blockAlignment / channels - 4) / 4 * 8 + 1;\n\n                default:\n                    throw new NotSupportedException(\"The specified sound format (\" + audioFormat.ToString() + \") is not supported.\");\n            }\n        }\n\n        /// <summary>\n        /// Load a WAV file from stream.\n        /// </summary>\n        /// <param name=\"stream\">The stream positioned at the start of the WAV file.</param>\n        /// <param name=\"audioFormat\">Gets the audio format value.</param>\n        /// <param name=\"frequency\">Gets the frequency or sample rate.</param>\n        /// <param name=\"channels\">Gets the number of channels.</param>\n        /// <param name=\"blockAlignment\">Gets the block alignment, important for compressed sounds.</param>\n        /// <param name=\"bitsPerSample\">Gets the number of bits per sample.</param>\n        /// <param name=\"samplesPerBlock\">Gets the number of samples per block.</param>\n        /// <param name=\"sampleCount\">Gets the total number of samples.</param>\n        /// <returns>The byte buffer containing the waveform data or compressed blocks.</returns>\n        public static byte[] Load(Stream stream, out int audioFormat, out int frequency, out int channels, out int blockAlignment, out int bitsPerSample, out int samplesPerBlock, out int sampleCount)\n        {\n            using (BinaryReader reader = new BinaryReader(stream))\n            {\n                byte[] audioData = null;\n\n                //header\n                string signature = new string(reader.ReadChars(4));\n                if (signature != \"RIFF\")\n                    throw new ArgumentException(\"Specified stream is not a wave file.\");\n                reader.ReadInt32(); // riff_chunk_size\n\n                string wformat = new string(reader.ReadChars(4));\n                if (wformat != \"WAVE\")\n                    throw new ArgumentException(\"Specified stream is not a wave file.\");\n\n                audioFormat = 0;\n                channels = 0;\n                bitsPerSample = 0;\n                frequency = 0;\n                blockAlignment = 0;\n                samplesPerBlock = 0;\n                sampleCount = 0;\n\n                // WAVE header\n                while (audioData == null)\n                {\n                    string chunkType = new string(reader.ReadChars(4));\n                    int chunkSize = reader.ReadInt32();\n                    switch (chunkType)\n                    {\n                        case \"fmt \":\n                            {\n                                audioFormat = reader.ReadInt16(); // 2\n                                channels = reader.ReadInt16(); // 4\n                                frequency = reader.ReadInt32();  // 8\n                                int byteRate = reader.ReadInt32();    // 12\n                                blockAlignment = (int)reader.ReadInt16();  // 14\n                                bitsPerSample = reader.ReadInt16(); // 16\n\n                                // Read extra data if present\n                                if (chunkSize > 16)\n                                {\n                                    int extraDataSize = reader.ReadInt16();\n                                    if (audioFormat == FormatIma4)\n                                    {\n                                        samplesPerBlock = reader.ReadInt16();\n                                        extraDataSize -= 2;\n                                    }\n                                    if (extraDataSize > 0)\n                                    {\n                                        if (reader.BaseStream.CanSeek)\n                                            reader.BaseStream.Seek(extraDataSize, SeekOrigin.Current);\n                                        else\n                                        {\n                                            for (int i = 0; i < extraDataSize; ++i)\n                                                reader.ReadByte();\n                                        }\n                                    }\n                                }\n                            }\n                            break;\n                        case \"fact\":\n                            if (audioFormat == FormatIma4)\n                            {\n                                sampleCount = reader.ReadInt32() * channels;\n                                chunkSize -= 4;\n                            }\n                            // Skip any remaining chunk data\n                            if (chunkSize > 0)\n                            {\n                                if (reader.BaseStream.CanSeek)\n                                    reader.BaseStream.Seek(chunkSize, SeekOrigin.Current);\n                                else\n                                {\n                                    for (int i = 0; i < chunkSize; ++i)\n                                        reader.ReadByte();\n                                }\n                            }\n                            break;\n                        case \"data\":\n                            audioData = reader.ReadBytes(chunkSize);\n                            break;\n                        default:\n                            // Skip this chunk\n                            if (reader.BaseStream.CanSeek)\n                                reader.BaseStream.Seek(chunkSize, SeekOrigin.Current);\n                            else\n                            {\n                                for (int i = 0; i < chunkSize; ++i)\n                                    reader.ReadByte();\n                            }\n                            break;\n                    }\n                }\n\n                // Calculate fields we didn't read from the file\n\n                if (samplesPerBlock == 0)\n                {\n                    samplesPerBlock = SampleAlignment(audioFormat, channels, bitsPerSample, blockAlignment);\n                }\n\n                if (sampleCount == 0)\n                {\n                    switch (audioFormat)\n                    {\n                        case FormatPcm:\n                        case FormatIeee:\n                            sampleCount = audioData.Length / ((channels * bitsPerSample) / 8);\n                            break;\n\n                        case FormatIma4:\n                        case FormatMsAdpcm:\n                            sampleCount = ((audioData.Length / blockAlignment) * samplesPerBlock) + SampleAlignment(audioFormat, channels, bitsPerSample, audioData.Length % blockAlignment);\n                            break;\n\n                        default:\n                            throw new InvalidDataException(\"Unhandled WAV format \" + audioFormat.ToString());\n                    }\n                }\n\n                return audioData;\n            }\n        }\n\n        // Convert buffer containing 24-bit signed PCM wav data to a 16-bit signed PCM buffer\n        internal static unsafe byte[] Convert24To16(byte[] data, int offset, int count)\n        {\n            if ((offset + count > data.Length) || ((count % 3) != 0))\n                throw new ArgumentException(\"Invalid 24-bit PCM data received\");\n            // Sample count includes both channels if stereo\n            int sampleCount = count / 3;\n            byte[] outData = new byte[sampleCount * sizeof(short)];\n            fixed (byte* src = &data[offset])\n            {\n                fixed (byte* dst = &outData[0])\n                {\n                    int srcIndex = 0;\n                    int dstIndex = 0;\n                    for (int i = 0; i < sampleCount; ++i)\n                    {\n                        // Drop the least significant byte from the 24-bit sample to get the 16-bit sample\n                        dst[dstIndex] = src[srcIndex + 1];\n                        dst[dstIndex + 1] = src[srcIndex + 2];\n                        dstIndex += 2;\n                        srcIndex += 3;\n                    }\n                }\n            }\n            return outData;\n        }\n\n        // Convert buffer containing IEEE 32-bit float wav data to a 16-bit signed PCM buffer\n        internal static unsafe byte[] ConvertFloatTo16(byte[] data, int offset, int count)\n        {\n            if ((offset + count > data.Length) || ((count % 4) != 0))\n                throw new ArgumentException(\"Invalid 32-bit float PCM data received\");\n            // Sample count includes both channels if stereo\n            int sampleCount = count / 4;\n            byte[] outData = new byte[sampleCount * sizeof(short)];\n            fixed (byte* src = &data[offset])\n            {\n                float* f = (float*)src;\n                fixed (byte* dst = &outData[0])\n                {\n                    byte* d = dst;\n                    for (int i = 0; i < sampleCount; ++i)\n                    {\n                        short s = (short)(*f * 32767.0f);\n                        *d++ = (byte)(s & 0xff);\n                        *d++ = (byte)(s >> 8);\n                        ++f;\n                    }\n                }\n            }\n            return outData;\n        }\n\n        #region IMA4 decoding\n\n        // Step table\n        static int[] stepTable = new int[]\n        {\n            7, 8, 9, 10, 11, 12, 13, 14,\n            16, 17, 19, 21, 23, 25, 28, 31,\n            34, 37, 41, 45, 50, 55, 60, 66,\n            73, 80, 88, 97, 107, 118, 130, 143,\n            157, 173, 190, 209, 230, 253, 279, 307,\n            337, 371, 408, 449, 494, 544, 598, 658,\n            724, 796, 876, 963, 1060, 1166, 1282, 1411,\n            1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024,\n            3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484,\n            7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,\n            15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,\n            32767\n        };\n\n        // Step index tables\n        static int[] indexTable = new int[]\n        {\n            // ADPCM data size is 4\n            -1, -1, -1, -1, 2, 4, 6, 8,\n            -1, -1, -1, -1, 2, 4, 6, 8\n        };\n\n        struct ImaState\n        {\n            public int predictor;\n            public int stepIndex;\n        }\n\n        static int AdpcmImaWavExpandNibble(ref ImaState channel, int nibble)\n        {\n            int diff = stepTable[channel.stepIndex] >> 3;\n            if ((nibble & 0x04) != 0)\n                diff += stepTable[channel.stepIndex];\n            if ((nibble & 0x02) != 0)\n                diff += stepTable[channel.stepIndex] >> 1;\n            if ((nibble & 0x01) != 0)\n                diff += stepTable[channel.stepIndex] >> 2;\n            if ((nibble & 0x08) != 0)\n                channel.predictor -= diff;\n            else\n                channel.predictor += diff;\n\n            if (channel.predictor < -32768)\n                channel.predictor = -32768;\n            else if (channel.predictor > 32767)\n                channel.predictor = 32767;\n\n            channel.stepIndex += indexTable[nibble];\n\n            if (channel.stepIndex < 0)\n                channel.stepIndex = 0;\n            else if (channel.stepIndex > 88)\n                channel.stepIndex = 88;\n\n            return channel.predictor;\n        }\n\n        // Convert buffer containing IMA/ADPCM wav data to a 16-bit signed PCM buffer\n        internal static byte[] ConvertIma4ToPcm(byte[] buffer, int offset, int count, int channels, int blockAlignment)\n        {\n            ImaState channel0 = new ImaState();\n            ImaState channel1 = new ImaState();\n\n            int sampleCountFullBlock = ((blockAlignment / channels) - 4) / 4 * 8 + 1;\n            int sampleCountLastBlock = 0;\n            if ((count % blockAlignment) > 0)\n                sampleCountLastBlock = (((count % blockAlignment) / channels) - 4) / 4 * 8 + 1;\n            int sampleCount = ((count / blockAlignment) * sampleCountFullBlock) + sampleCountLastBlock;\n            byte[] samples = new byte[sampleCount * sizeof(short) * channels];\n            int sampleOffset = 0;\n\n            while (count > 0)\n            {\n                int blockSize = blockAlignment;\n                if (count < blockSize)\n                    blockSize = count;\n                count -= blockAlignment;\n\n                channel0.predictor = buffer[offset++];\n                channel0.predictor |= buffer[offset++] << 8;\n                if ((channel0.predictor & 0x8000) != 0)\n                    channel0.predictor -= 0x10000;\n                channel0.stepIndex = buffer[offset++];\n                if (channel0.stepIndex > 88)\n                    channel0.stepIndex = 88;\n                offset++;\n                int index = sampleOffset * 2;\n                samples[index] = (byte)channel0.predictor;\n                samples[index + 1] = (byte)(channel0.predictor >> 8);\n                ++sampleOffset;\n\n                if (channels == 2)\n                {\n                    channel1.predictor = buffer[offset++];\n                    channel1.predictor |= buffer[offset++] << 8;\n                    if ((channel1.predictor & 0x8000) != 0)\n                        channel1.predictor -= 0x10000;\n                    channel1.stepIndex = buffer[offset++];\n                    if (channel1.stepIndex > 88)\n                        channel1.stepIndex = 88;\n                    offset++;\n                    index = sampleOffset * 2;\n                    samples[index] = (byte)channel1.predictor;\n                    samples[index + 1] = (byte)(channel1.predictor >> 8);\n                    ++sampleOffset;\n                }\n\n                if (channels == 2)\n                {\n                    for (int nibbles = 2 * (blockSize - 8); nibbles > 0; nibbles -= 16)\n                    {\n                        for (int i = 0; i < 4; i++)\n                        {\n                            index = (sampleOffset + i * 4) * 2;\n                            int sample = AdpcmImaWavExpandNibble(ref channel0, buffer[offset + i] & 0x0f);\n                            samples[index] = (byte)sample;\n                            samples[index + 1] = (byte)(sample >> 8);\n\n                            index = (sampleOffset + i * 4 + 2) * 2;\n                            sample = AdpcmImaWavExpandNibble(ref channel0, buffer[offset + i] >> 4);\n                            samples[index] = (byte)sample;\n                            samples[index + 1] = (byte)(sample >> 8);\n                        }\n                        offset += 4;\n\n                        for (int i = 0; i < 4; i++)\n                        {\n                            index = (sampleOffset + i * 4 + 1) * 2;\n                            int sample = AdpcmImaWavExpandNibble(ref channel1, buffer[offset + i] & 0x0f);\n                            samples[index] = (byte)sample;\n                            samples[index + 1] = (byte)(sample >> 8);\n\n                            index = (sampleOffset + i * 4 + 3) * 2;\n                            sample = AdpcmImaWavExpandNibble(ref channel1, buffer[offset + i] >> 4);\n                            samples[index] = (byte)sample;\n                            samples[index + 1] = (byte)(sample >> 8);\n                        }\n                        offset += 4;\n                        sampleOffset += 16;\n                    }\n                }\n                else\n                {\n                    for (int nibbles = 2 * (blockSize - 4); nibbles > 0; nibbles -= 2)\n                    {\n                        index = (sampleOffset * 2);\n                        int b = buffer[offset];\n                        int sample = AdpcmImaWavExpandNibble(ref channel0, b & 0x0f);\n                        samples[index] = (byte)sample;\n                        samples[index + 1] = (byte)(sample >> 8);\n                        index += 2;\n                        sample = AdpcmImaWavExpandNibble(ref channel0, b >> 4);\n                        samples[index] = (byte)sample;\n                        samples[index + 1] = (byte)(sample >> 8);\n\n                        sampleOffset += 2;\n                        ++offset;\n                    }\n                }\n            }\n\n            return samples;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/OpenAL/ConcreteAudioFactory.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteAudioFactory : AudioFactory\n    {\n        public override AudioServiceStrategy CreateAudioServiceStrategy()\n        {\n            return new ConcreteAudioService();\n        }\n\n        public override MicrophoneStrategy CreateMicrophoneStrategy()\n        {\n            return new ConcreteMicrophone();\n        }\n\n        public override SoundEffectStrategy CreateSoundEffectStrategy()\n        {\n            return new ConcreteSoundEffect();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/OpenAL/ConcreteAudioService.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Platform.Audio.OpenAL;\nusing Microsoft.Xna.Platform.Utilities;\n\n#if ANDROID\nusing Microsoft.Xna.Framework;\nusing System.Globalization;\nusing Android.Content.PM;\nusing Android.Content;\nusing Android.Media;\n#endif\n\n#if IOS || TVOS\nusing Microsoft.Xna.Framework;\nusing AudioToolbox;\nusing AudioUnit;\nusing AVFoundation;\n#endif\n\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    internal class ConcreteAudioService : AudioServiceStrategy\n    {\n        private IntPtr _device;\n        private IntPtr _context;\n        IntPtr NullContext = IntPtr.Zero;\n\n#if ANDROID\n        private const int DEFAULT_FREQUENCY = 48000;\n        private const int DEFAULT_UPDATE_SIZE = 512;\n        private const int DEFAULT_UPDATE_BUFFER_COUNT = 2;\n#endif\n        private Stack<int> _alSourcesPool = new Stack<int>(32);\n        bool _isDisposed;\n\n        // supported formats\n        public bool SupportsIma4 { get; private set; }\n        public bool SupportsAdpcm { get; private set; }\n        public bool SupportsIeee { get; private set; } // Ieee Float32\n        //supported extensions\n        public bool SupportsEfx { get; private set; }\n        \n        internal int ReverbSlot = 0;\n        internal int ReverbEffect = 0;\n        \n        public int Filter { get; private set; }\n\n        internal AL OpenAL { get { return AL.Current; } }\n\n        protected IntPtr ALDevice { get {return _device; } }\n\n        internal ConcreteAudioService()\n        {\n            if (OpenAL.NativeLibrary == IntPtr.Zero)\n                throw new DllNotFoundException(\"Couldn't initialize OpenAL because the native binaries couldn't be found.\");\n\n            if (!OpenSoundDevice())\n                throw new NoAudioHardwareException(\"OpenAL device could not be initialized, see console output for details.\");\n\n            // We have hardware here and it is ready\n            Filter = 0;\n            if (OpenAL.Efx.IsInitialized)\n            {\n                Filter = OpenAL.Efx.GenFilter();\n            }\n        }\n\n\n        public override SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy sfxStrategy)\n        {\n            return new ConcreteSoundEffectInstance(this, sfxStrategy);\n        }\n\n        public override IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels)\n        {\n            return new ConcreteDynamicSoundEffectInstance(this, sampleRate, channels);\n        }\n\n\n        /// <summary>\n        /// Open the sound device, sets up an audio context, and makes the new context\n        /// the current context. Note that this method will stop the playback of\n        /// music that was running prior to the game start. If any error occurs, then\n        /// the state of the controller is reset.\n        /// </summary>\n        /// <returns>True if the sound device was setup, and false if not.</returns>\n        private bool OpenSoundDevice()\n        {\n            try\n            {\n                _device = OpenAL.ALC.OpenDevice(string.Empty);\n                OpenAL.Efx.Initialize(_device);\n            }\n            catch (Exception ex)\n            {\n                throw new NoAudioHardwareException(\"OpenAL device could not be initialized.\", ex);\n            }\n\n            OpenAL.ALC.CheckError(\"Could not open OpenAL device\");\n\n            if (_device != IntPtr.Zero)\n            {\n#if ANDROID\n                // Query the device for the ideal frequency and update buffer size so\n                // we can get the low latency sound path.\n\n                /*\n                The recommended sequence is:\n\n                Check for feature \"android.hardware.audio.low_latency\" using code such as this:\n                import android.content.pm.PackageManager;\n                ...\n                PackageManager pm = getContext().getPackageManager();\n                boolean claimsFeature = pm.hasSystemFeature(PackageManager.FEATURE_AUDIO_LOW_LATENCY);\n                Check for API level 17 or higher, to confirm use of android.media.AudioManager.getProperty().\n                Get the native or optimal output sample rate and buffer size for this device's primary output stream, using code such as this:\n                import android.media.AudioManager;\n                ...\n                AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);\n                String sampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));\n                String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER));\n                Note that sampleRate and framesPerBuffer are Strings. First check for null and then convert to int using Integer.parseInt().\n                Now use OpenSL ES to create an AudioPlayer with PCM buffer queue data locator.\n\n                See http://stackoverflow.com/questions/14842803/low-latency-audio-playback-on-android\n                */\n\n                int frequency = DEFAULT_FREQUENCY;\n                int updateSize = DEFAULT_UPDATE_SIZE;\n                int updateBuffers = DEFAULT_UPDATE_BUFFER_COUNT;\n                if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.JellyBeanMr1)\n                {\n                    var appContext = Android.App.Application.Context;\n                    Android.Util.Log.Debug(\"OAL\", appContext.PackageManager.HasSystemFeature(PackageManager.FeatureAudioLowLatency) ? \"Supports low latency audio playback.\" : \"Does not support low latency audio playback.\");\n\n                    AudioManager audioManager = appContext.GetSystemService(Context.AudioService) as AudioManager;\n                    if (audioManager != null)\n                    {\n                        string frequencyStr = audioManager.GetProperty(AudioManager.PropertyOutputSampleRate);\n                        if (!string.IsNullOrEmpty(frequencyStr))\n                            frequency = int.Parse(frequencyStr, CultureInfo.InvariantCulture);\n                        string updateSizeStr = audioManager.GetProperty(AudioManager.PropertyOutputFramesPerBuffer);\n                        if (!string.IsNullOrEmpty(updateSizeStr))\n                            updateSize = int.Parse(updateSizeStr, CultureInfo.InvariantCulture);\n                    }\n\n                    // If 4.4 or higher, then we don't need to double buffer on the application side.\n                    // See http://stackoverflow.com/a/15006327\n                    if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat)\n                    {\n                        updateBuffers = 1;\n                    }\n                }\n                else\n                {\n                    Android.Util.Log.Debug(\"OAL\", \"Android 4.2 or higher required for low latency audio playback.\");\n                }\n                Android.Util.Log.Debug(\"OAL\", \"Using sample rate \" + frequency + \"Hz and \" + updateBuffers + \" buffers of \" + updateSize + \" frames.\");\n\n                // These are missing and non-standard ALC constants\n                const int AlcFrequency = 0x1007;\n                const int AlcUpdateSize = 0x1014;\n                const int AlcUpdateBuffers = 0x1015;\n\n                int[] attribute = new[]\n                {\n                    AlcFrequency, frequency,\n                    AlcUpdateSize, updateSize,\n                    AlcUpdateBuffers, updateBuffers,\n                    0\n                };\n#elif IOS || TVOS\n                AVAudioSession.SharedInstance().Init();\n\n                // NOTE: Do not override AVAudioSessionCategory set by the game developer:\n                //       see https://github.com/MonoGame/MonoGame/issues/6595\n\n                EventHandler<AVAudioSessionInterruptionEventArgs> handler = delegate(object sender, AVAudioSessionInterruptionEventArgs e) {\n                    switch (e.InterruptionType)\n                    {\n                        case AVAudioSessionInterruptionType.Began:\n                            AVAudioSession.SharedInstance().SetActive(false);\n                            OpenAL.ALC.MakeContextCurrent(IntPtr.Zero);\n                            OpenAL.ALC.SuspendContext(_context);\n                            break;\n                        case AVAudioSessionInterruptionType.Ended:\n                            AVAudioSession.SharedInstance().SetActive(true);\n                            OpenAL.ALC.MakeContextCurrent(_context);\n                            OpenAL.ALC.ProcessContext(_context);\n                            break;\n                    }\n                };\n\n                AVAudioSession.Notifications.ObserveInterruption(handler);\n\n                // Activate the instance or else the interruption handler will not be called.\n                AVAudioSession.SharedInstance().SetActive(true);\n\n                int[] attribute = new int[0];\n#else\n                int[] attribute = new int[0];\n#endif\n\n                _context = OpenAL.ALC.CreateContext(_device, attribute);\n\n                OpenAL.ALC.CheckError(\"Could not create OpenAL context\");\n\n                if (_context != NullContext)\n                {\n                    OpenAL.ALC.MakeContextCurrent(_context);\n                    OpenAL.ALC.CheckError(\"Could not make OpenAL context current\");\n\n                    SupportsIma4 = OpenAL.IsExtensionPresent(\"AL_EXT_IMA4\");\n                    SupportsAdpcm = OpenAL.IsExtensionPresent(\"AL_SOFT_MSADPCM\");\n                    SupportsIeee = OpenAL.IsExtensionPresent(\"AL_EXT_float32\");\n\n                    SupportsEfx = OpenAL.IsExtensionPresent(\"AL_EXT_EFX\");\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        public override void PlatformPopulateCaptureDevices(List<Microphone> microphones, ref Microphone defaultMicrophone)\n        {\n            if (!OpenAL.ALC.IsExtensionPresent(_device, \"ALC_EXT_CAPTURE\"))\n            {\n                return;\n            }\n\n            // default device\n            string defaultDevice = OpenAL.ALC.GetString(_device, AlcGetString.CaptureDefaultDeviceSpecifier);\n\n            // enumerating capture devices\n            IntPtr deviceList = OpenAL.ALC.alcGetString(IntPtr.Zero, (int)AlcGetString.CaptureDeviceSpecifier);\n\n            // Marshal native UTF-8 character array to .NET string\n            // The native string is a null-char separated list of known capture device specifiers ending with an empty string\n\n            while (true)\n            {\n                string deviceIdentifier = InteropHelpers.Utf8ToString(deviceList);\n\n                if (string.IsNullOrEmpty(deviceIdentifier))\n                    break;\n\n                Microphone microphone = base.CreateMicrophone(deviceIdentifier);\n                microphones.Add(microphone);\n                if (deviceIdentifier == defaultDevice)\n                    defaultMicrophone = microphone;\n\n                // increase the offset, add one extra for the terminator\n                deviceList += deviceIdentifier.Length + 1;\n            }\n\n            // set the default Microphone if defaultDevice was Empty.\n            if (defaultMicrophone == null && microphones.Count > 0)\n                defaultMicrophone = microphones[0];\n\n#if (false)\n            // Xamarin platforms don't provide an handle to alGetString that allow to marshal string arrays\n            // so we're basically only adding the default microphone\n            Microphone microphone = base.CreateMicrophone(defaultDevice);\n            microphones.Add(microphone);\n            defaultMicrophone = microphone;\n#endif\n        }\n\n        public override int PlatformGetMaxPlayingInstances()\n        {\n#if DESKTOPGL\n            // MacOS & Linux shares a limit of 256.\n            return 256;\n#elif IOS || TVOS\n            // Reference: http://stackoverflow.com/questions/3894044/maximum-number-of-openal-sound-buffers-on-iphone\n            return 32;\n#else\n            throw new InvalidOperationException();\n#endif\n        }\n\n        public override void PlatformSetReverbSettings(ReverbSettings reverbSettings)\n        {\n            if (!OpenAL.Efx.IsInitialized)\n                return;\n\n            if (ReverbEffect != 0)\n                return;\n\n            EffectsExtension efx = OpenAL.Efx;\n            efx.GenAuxiliaryEffectSlots(1, out ReverbSlot);\n            efx.GenEffect(out ReverbEffect);\n            efx.Effect(ReverbEffect, EfxEffecti.EffectType, (int)EfxEffectType.Reverb);\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbReflectionsDelay, reverbSettings.ReflectionsDelayMs / 1000.0f);\n            efx.Effect(ReverbEffect, EfxEffectf.LateReverbDelay, reverbSettings.ReverbDelayMs / 1000.0f);\n            // map these from range 0-15 to 0-1\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbDiffusion, reverbSettings.EarlyDiffusion / 15f);\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbDiffusion, reverbSettings.LateDiffusion / 15f);\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbGainLF, Math.Min(XactHelpers.ParseVolumeFromDecibels(reverbSettings.LowEqGain - 8f), 1.0f));\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbLFReference, (reverbSettings.LowEqCutoff * 50f) + 50f);\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbGainHF, XactHelpers.ParseVolumeFromDecibels(reverbSettings.HighEqGain - 8f));\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbHFReference, (reverbSettings.HighEqCutoff * 500f) + 1000f);\n            // According to Xamarin docs EaxReverbReflectionsGain Unit: Linear gain Range [0.0f .. 3.16f] Default: 0.05f\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbReflectionsGain, Math.Min(XactHelpers.ParseVolumeFromDecibels(reverbSettings.ReflectionsGainDb), 3.16f));\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbGain, Math.Min(XactHelpers.ParseVolumeFromDecibels(reverbSettings.ReverbGainDb), 1.0f));\n            // map these from 0-100 down to 0-1\n            efx.Effect(ReverbEffect, EfxEffectf.EaxReverbDensity, reverbSettings.DensityPct / 100f);\n            efx.AuxiliaryEffectSlot(ReverbSlot, EfxEffectSlotf.EffectSlotGain, reverbSettings.WetDryMixPct / 200f);\n\n            // Dont know what to do with these EFX has no mapping for them. Just ignore for now\n            // we can enable them as we go. \n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.PositionLeft, reverbSettings.PositionLeft);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.PositionRight, reverbSettings.PositionRight);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.PositionLeftMatrix, reverbSettings.PositionLeftMatrix);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.PositionRightMatrix, reverbSettings.PositionRightMatrix);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RearDelayMs);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RoomFilterFrequencyHz);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RoomFilterMainDb);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RoomFilterHighFrequencyDb);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.DecayTimeSec);\n            //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RoomSizeFeet);\n\n            efx.BindEffectToAuxiliarySlot(ReverbSlot, ReverbEffect);\n        }\n\n\n        /// <summary>\n        /// Reserves a sound buffer and return its identifier. If there are no available sources\n        /// or the controller was not able to setup the hardware then an\n        /// <see cref=\"InstancePlayLimitException\"/> is thrown.\n        /// </summary>\n        /// <returns>The source number of the reserved sound buffer.</returns>\n        public int ReserveSource()\n        {\n            if (_alSourcesPool.Count > 0)\n                return _alSourcesPool.Pop();\n\n            int src = OpenAL.GenSource();\n            OpenAL.CheckError(\"Failed to generate source.\");\n            return src;\n        }\n\n        public void RecycleSource(int sourceId)\n        {\n            OpenAL.Source(sourceId, ALSourcei.Buffer, 0);\n            OpenAL.CheckError(\"Failed to free source from buffers.\");\n\n            _alSourcesPool.Push(sourceId);\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (ReverbEffect != 0)\n            {\n                OpenAL.Efx.DeleteAuxiliaryEffectSlot(ReverbSlot);\n                OpenAL.Efx.DeleteEffect((int)ReverbEffect);\n            }\n\n            while (_alSourcesPool.Count > 0)\n            {\n                OpenAL.DeleteSource(_alSourcesPool.Pop());\n                OpenAL.CheckError(\"Failed to delete source.\");\n            }\n\n            if (Filter != 0 && OpenAL.Efx.IsInitialized)\n            {\n                OpenAL.Efx.DeleteFilter(Filter);\n            }\n            \n            // CleanUpOpenAL\n            OpenAL.ALC.MakeContextCurrent(NullContext);\n\n            if (_context != NullContext)\n            {\n                OpenAL.ALC.DestroyContext(_context);\n            }\n\n            if (_device != IntPtr.Zero)\n            {\n                OpenAL.ALC.CloseDevice(_device);\n            }\n\n            _context = NullContext;\n            _device = IntPtr.Zero;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/OpenAL/ConcreteDynamicSoundEffectInstance.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Platform.Audio.OpenAL;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteDynamicSoundEffectInstance : ConcreteSoundEffectInstance\n        , IDynamicSoundEffectInstanceStrategy\n    {\n        private int _sampleRate;\n        private int _channels;\n        private ALFormat _alFormat;\n        private int _queuedBuffersCount;\n\n        private int _lastalBuffer = 0;\n        private Queue<MarkerInfo> _markerQueue = new Queue<MarkerInfo>();\n\n        public event MarkerHandler Marker;\n\n\n        public delegate void MarkerHandler(object sender, int markerId);\n        struct MarkerInfo\n        {\n            public readonly int alBuffer;\n            public readonly int Marker;\n\n            public MarkerInfo(int lastBufferId, int marker) : this()\n            {\n                this.alBuffer = lastBufferId;\n                this.Marker = marker;\n            }\n\n            public override string ToString()\n            {\n                return string.Format(\"{{ alBuffer: {0}, Marker: {1} }}\", alBuffer, Marker);\n            }\n        }\n\n        private readonly WeakReference _dynamicSoundEffectInstanceRef = new WeakReference(null);\n        DynamicSoundEffectInstance IDynamicSoundEffectInstanceStrategy.DynamicSoundEffectInstance\n        {\n            get { return _dynamicSoundEffectInstanceRef.Target as DynamicSoundEffectInstance; }\n            set { _dynamicSoundEffectInstanceRef.Target = value; }\n        }\n\n        internal ConcreteDynamicSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, int sampleRate, int channels)\n            : base(audioServiceStrategy, null)\n        {\n            _sampleRate = sampleRate;\n            _channels = channels;\n\n            _alFormat = channels == 1 ? ALFormat.Mono16 : ALFormat.Stereo16;\n\n            _sourceId = ConcreteAudioService.ReserveSource();\n        }\n\n        public int BuffersNeeded { get; set; }\n\n        public int DynamicPlatformGetPendingBufferCount()\n        {\n            return _queuedBuffersCount;\n        }\n\n        public override void PlatformPause()\n        {\n            ConcreteAudioService.OpenAL.SourcePause(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to pause the source.\");\n        }\n\n        public override void PlatformPlay(bool isLooped)\n        {\n            // Ensure that the source is not looped (due to source recycling)\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSourceb.Looping, false);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to set source loop state.\");\n\n            ConcreteAudioService.OpenAL.SourcePlay(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to play the source.\");\n        }\n\n        public override void PlatformResume(bool isLooped)\n        {\n            ConcreteAudioService.OpenAL.SourcePlay(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to play the source.\");\n        }\n\n        public override void PlatformStop()\n        {\n            ConcreteAudioService.OpenAL.SourceStop(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to stop the source.\");\n\n            DynamicPlatformClearBuffers();\n        }\n\n        public override void PlatformRelease(bool isLooped)\n        {\n            System.Diagnostics.Debug.Assert(isLooped == false);\n\n            // TODO: remove queued buffers except for the current one that is still playing.\n            throw new NotImplementedException();\n        }\n\n        public void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state)\n        {\n            // Get a buffer\n            int alBuffer = ConcreteAudioService.OpenAL.GenBuffer();\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to generate OpenAL data buffer.\");\n            \n            // Bind the data\n            ConcreteAudioService.OpenAL.BufferData(alBuffer, _alFormat, buffer, offset, count, _sampleRate, 0);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to fill buffer.\");\n\n            // Queue the buffer\n            _queuedBuffersCount++;\n            _lastalBuffer = alBuffer;\n            ConcreteAudioService.OpenAL.SourceQueueBuffer(_sourceId, alBuffer);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to queue the buffer.\");\n\n            // If the source has run out of buffers, restart it\n            ALSourceState sourceState = ConcreteAudioService.OpenAL.GetSourceState(_sourceId);\n            if (state == SoundState.Playing && sourceState == ALSourceState.Stopped)\n            {\n                ConcreteAudioService.OpenAL.SourcePlay(_sourceId);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to resume source playback.\");\n            }\n        }\n\n        internal void SubmitMarker(int markerId)\n        {\n            lock (AudioService.SyncHandle)\n            {\n                if (_lastalBuffer == 0)\n                    throw new InvalidOperationException(\"No buffer submitted to associate marker with.\");\n\n                MarkerInfo markerInfo = new MarkerInfo(_lastalBuffer, markerId);\n                _markerQueue.Enqueue(markerInfo);\n            }\n        }\n\n        unsafe public void DynamicPlatformUpdateBuffers()\n        {\n            // Get the processed buffers\n            ConcreteAudioService.OpenAL.GetSource(_sourceId, ALGetSourcei.BuffersProcessed, out int processedBuffers);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to get processed buffer count.\");\n\n            // Unqueue and release buffers\n            if (processedBuffers > 0)\n            {\n                int* pProcessedBuffers = stackalloc int[processedBuffers];\n                ConcreteAudioService.OpenAL.alSourceUnqueueBuffers(_sourceId, processedBuffers, pProcessedBuffers);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to unqueue buffers.\");\n\n                ConcreteAudioService.OpenAL.alDeleteBuffers(processedBuffers, pProcessedBuffers);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to delete buffers.\");\n\n                for (int i = 0; i < processedBuffers; i++)\n                {\n                    _queuedBuffersCount--;\n                    int alBuffer = pProcessedBuffers[i];\n                    while (_markerQueue.Count > 0 && _markerQueue.Peek().alBuffer == alBuffer)\n                    {\n                        MarkerInfo markerInfo = _markerQueue.Dequeue();\n\n                        var handler = Marker;\n                        if (handler != null)\n                            handler(this, markerInfo.Marker);\n                    }\n                }\n\n                // Raise the event for each removed buffer\n                this.BuffersNeeded+= processedBuffers;\n            }\n        }\n\n        unsafe public void DynamicPlatformClearBuffers()\n        {\n            // Get the queued buffers\n            ConcreteAudioService.OpenAL.GetSource(_sourceId, ALGetSourcei.BuffersQueued, out int queuedBuffers);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to get processed buffer count.\");\n\n            // Remove all queued buffers\n            if (queuedBuffers > 0)\n            {\n                int* pQueuedBuffers = stackalloc int[queuedBuffers];\n                ConcreteAudioService.OpenAL.alSourceUnqueueBuffers(_sourceId, queuedBuffers, pQueuedBuffers);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to unqueue buffers.\");\n\n                ConcreteAudioService.OpenAL.alDeleteBuffers(queuedBuffers, pQueuedBuffers);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to delete buffers.\");\n\n                _queuedBuffersCount-= queuedBuffers;\n            }\n\n            _lastalBuffer = 0;\n            _markerQueue.Clear();\n        }\n\n\n        protected unsafe override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            ALSourceState sourceState = ConcreteAudioService.OpenAL.GetSourceState(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to get state.\");\n            if (sourceState != ALSourceState.Stopped)\n            {\n                ConcreteAudioService.OpenAL.SourceStop(_sourceId);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to stop source.\");\n            }\n\n            // Get the queued buffers\n            ConcreteAudioService.OpenAL.GetSource(_sourceId, ALGetSourcei.BuffersQueued, out int queuedBuffers);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to get processed buffer count.\");\n\n            // Remove all queued buffers\n            if (queuedBuffers > 0)\n            {\n                int* pQueuedBuffers = stackalloc int[queuedBuffers];\n                ConcreteAudioService.OpenAL.alSourceUnqueueBuffers(_sourceId, queuedBuffers, pQueuedBuffers);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to unqueue buffers.\");\n\n                ConcreteAudioService.OpenAL.alDeleteBuffers(queuedBuffers, pQueuedBuffers);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to delete buffers.\");\n                \n                _queuedBuffersCount-= queuedBuffers;\n            }\n\n            _lastalBuffer = 0;\n            _markerQueue.Clear();\n\n            ConcreteAudioService.RecycleSource(_sourceId);\n            _sourceId = 0;\n\n            //base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/OpenAL/ConcreteMicrophone.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Platform.Audio.OpenAL;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    /// <summary>\n    /// Provides microphones capture features.\n    /// </summary>\n    public sealed class ConcreteMicrophone : MicrophoneStrategy\n    {\n        private IntPtr _captureDevice = IntPtr.Zero;\n\n        internal AL OpenAL { get { return AL.Current; } }\n\n        public override TimeSpan BufferDuration\n        {\n            get { return base.BufferDuration; }\n            set { base.BufferDuration = value; }\n        }\n\n        public override MicrophoneState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n\n        internal ConcreteMicrophone()\n            : base()\n        {\n        }\n\n        private void CheckALCError(string operation)\n        {\n            AlcError error = OpenAL.ALC.GetErrorForDevice(_captureDevice);\n            if (error != AlcError.NoError)\n            {\n                string msg = String.Format(\"{0} - OpenAL Error: {1}\", operation, error);\n                throw new NoMicrophoneConnectedException(msg);\n            }\n        }\n\n        public override void PlatformStart(string deviceName)\n        {\n            int sampleSizeInBytes = GetSampleSizeInBytes(BufferDuration) * 2;\n            _captureDevice = OpenAL.ALC.CaptureOpenDevice(deviceName, checked((uint)SampleRate), ALFormat.Mono16, sampleSizeInBytes);\n            if (_captureDevice == IntPtr.Zero)\n            {\n                CheckALCError(\"Failed to open capture device '\"+ deviceName + \"'.\");\n                throw new NoMicrophoneConnectedException(\"Failed to open capture device'\"+ deviceName + \"'.\");\n            }\n\n            OpenAL.ALC.CaptureStart(_captureDevice);\n            CheckALCError(\"Failed to start capture.\");\n        }\n\n        public override void PlatformStop()\n        {\n            OpenAL.ALC.CaptureStop(_captureDevice);\n            CheckALCError(\"Failed to stop capture.\");\n            OpenAL.ALC.CaptureCloseDevice(_captureDevice);\n            CheckALCError(\"Failed to close capture device.\");\n            _captureDevice = IntPtr.Zero;\n        }\n\n        private int GetQueuedSampleCount()\n        {\n            int sampleCount = OpenAL.ALC.GetInteger(_captureDevice, AlcGetInteger.CaptureSamples);\n            CheckALCError(\"Failed to query capture samples.\");\n            return sampleCount;\n        }\n\n        public override bool PlatformIsHeadset()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override bool PlatformUpdate()\n        {\n            int sampleCount = GetQueuedSampleCount();\n            return (sampleCount > 0);\n        }\n\n        public override int PlatformGetData(byte[] buffer, int offset, int count)\n        {\n            int sampleCount = GetQueuedSampleCount();\n            sampleCount = Math.Min(count / 2, sampleCount); // 16bit adjust\n\n            if (sampleCount > 0)\n            {\n                GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);\n                try\n                {\n                    OpenAL.ALC.CaptureSamples(_captureDevice, handle.AddrOfPinnedObject() + offset, sampleCount);\n                    CheckALCError(\"Failed to capture samples.\");\n                }\n                finally\n                {\n                    handle.Free();\n                }\n\n                return sampleCount * 2; // 16bit adjust\n            }\n\n            return 0;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/OpenAL/ConcreteSoundEffect.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Platform.Audio.OpenAL;\nusing Microsoft.Xna.Platform.Audio.Utilities;\n\n#if IOS || TVOS\nusing AudioToolbox;\nusing AudioUnit;\n#endif\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    class ConcreteSoundEffect : SoundEffectStrategy\n    {\n        private AudioService _audioService;\n        private int _bufferId;\n        private bool _isBufferDisposed;\n\n\n        #region Initialization\n\n        public override void PlatformLoadAudioStream(Stream stream, out TimeSpan duration)\n        {\n            byte[] buffer;\n\n            int audioFormat;\n            int freq;\n            int channels;\n            int blockAlignment;\n            int bitsPerSample;\n            int samplesPerBlock;\n            int sampleCount;\n\n            buffer = AudioLoader.Load(stream, out audioFormat, out freq, out channels, out blockAlignment, out bitsPerSample, out samplesPerBlock, out sampleCount);\n\n            duration = TimeSpan.FromSeconds((float)sampleCount / (float)freq);\n\n            PlatformInitializeBuffer(buffer, 0, buffer.Length, audioFormat, channels, freq, blockAlignment, bitsPerSample, 0, 0);\n        }\n\n        public override void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength)\n        {\n            short audioFormat = BitConverter.ToInt16(header, 0);\n            short channels = BitConverter.ToInt16(header, 2);\n            int sampleRate = BitConverter.ToInt32(header, 4);\n            short blockAlignment = BitConverter.ToInt16(header, 12);\n            short bitsPerSample = BitConverter.ToInt16(header, 14);\n\n            PlatformInitializeBuffer(buffer, index, count, audioFormat, channels, sampleRate, blockAlignment, bitsPerSample, loopStart, loopLength);\n        }\n\n        private void PlatformInitializeBuffer(byte[] buffer, int index, int count, int audioFormat, int channels, int sampleRate, int blockAlignment, int bitsPerSample, int loopStart, int loopLength)\n        {\n            AudioService audioService = AudioService.Current;\n            ConcreteAudioService concreteAudioService = ((IPlatformAudioService)audioService).Strategy.ToConcrete<ConcreteAudioService>();\n\n            switch (audioFormat)\n            {\n                case AudioLoader.FormatPcm:\n                    // PCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n\n                    PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength);\n                    break;\n\n                case AudioLoader.FormatIeee:\n                    // IEEE Float\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n\n                    if (!concreteAudioService.SupportsIeee)\n                    {\n                        // If 32-bit IEEE float is not supported, convert to 16-bit signed PCM\n                        buffer = AudioLoader.ConvertFloatTo16(buffer, index, count);\n                        index = 0;\n                        count = buffer.Length;\n                        bitsPerSample = 16;\n                        PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength);\n                    }\n                    else\n                    {\n                        InitializeIeeeFloat(concreteAudioService, buffer, index, count, sampleRate, channels, loopStart, loopLength);\n                    }\n                    break;\n\n                case AudioLoader.FormatMsAdpcm:\n                    // Microsoft ADPCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n\n                    if (!concreteAudioService.SupportsAdpcm)\n                    {\n                        // If MS-ADPCM is not supported, convert to 16-bit signed PCM\n                        buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, index, count, channels, blockAlignment);\n                        index = 0;\n                        count = buffer.Length;\n                        bitsPerSample = 16;\n                        PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength);\n                    }\n                    else\n                    {\n                        InitializeAdpcm(concreteAudioService, buffer, index, count, sampleRate, channels, blockAlignment, loopStart, loopLength);\n                    }\n                    break;\n                case AudioLoader.FormatIma4:\n                    // IMA4 ADPCM\n                    if (channels < 1 || 2 < channels)\n                        throw new NotSupportedException(\"The specified channel count (\" + channels + \") is not supported.\");\n\n                    if (!concreteAudioService.SupportsIma4)\n                    {\n                        // If IMA/ADPCM is not supported, convert to 16-bit signed PCM\n                        buffer = AudioLoader.ConvertIma4ToPcm(buffer, index, count, channels, blockAlignment);\n                        index = 0;\n                        count = buffer.Length;\n                        bitsPerSample = 16;\n                        PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength);\n                    }\n                    else\n                    {\n                        InitializeIma4(concreteAudioService, buffer, index, count, sampleRate, channels, blockAlignment, loopStart, loopLength);\n                    }\n                    break;\n\n                default:\n                    throw new NotSupportedException(\"The specified sound format (\" + audioFormat.ToString() + \") is not supported.\");\n            }\n        }\n\n        public override void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength)\n        {\n            ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete<ConcreteAudioService>();\n\n            if (sampleBits == 24)\n            {\n                // Convert 24-bit signed PCM to 16-bit signed PCM\n                buffer = AudioLoader.Convert24To16(buffer, index, count);\n                index = 0;\n                count = buffer.Length;\n                sampleBits = 16;\n            }\n\n            int sampleAlignment = 0;\n            ALFormat alFormat;\n            switch (channels)\n            {\n                case 1: alFormat = (sampleBits == 8) ? ALFormat.Mono8 : ALFormat.Mono16; break;\n                case 2: alFormat = (sampleBits == 8) ? ALFormat.Stereo8 : ALFormat.Stereo16; break;\n                default: throw new NotSupportedException(\"The specified channel count is not supported.\");\n            }\n\n            CreateBuffer(concreteAudioService, buffer, index, count, alFormat, sampleRate, sampleAlignment);\n        }\n\n        public override void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength)\n        {\n            ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete<ConcreteAudioService>();\n\n            if (!concreteAudioService.SupportsAdpcm)\n            {\n                // If MS-ADPCM is not supported, convert to 16-bit signed PCM\n                buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, index, count, channels, blockAlignment);\n                index = 0;\n                count = buffer.Length;\n                int sampleBits = 16;\n                PlatformInitializePcm(buffer, index, count, sampleBits, sampleRate, channels, loopStart, loopLength);\n            }\n            else\n            {\n                InitializeAdpcm(concreteAudioService, buffer, index, count, sampleRate, channels, (blockAlignment + 22) * channels, loopStart, loopLength);\n            }\n        }\n\n        private void InitializeIeeeFloat(ConcreteAudioService concreteAudioService, byte[] buffer, int index, int count, int sampleRate, int channels, int loopStart, int loopLength)\n        {\n            int sampleAlignment = 0;\n            ALFormat alFormat;\n            switch (channels)\n            {\n                case 1: alFormat = ALFormat.MonoFloat32; break;\n                case 2: alFormat = ALFormat.StereoFloat32; break;\n                default: throw new NotSupportedException(\"The specified channel count is not supported.\");\n            }\n\n            CreateBuffer(concreteAudioService, buffer, index, count, alFormat, sampleRate, sampleAlignment);\n        }\n\n        private void InitializeAdpcm(ConcreteAudioService concreteAudioService, byte[] buffer, int index, int count, int sampleRate, int channels, int blockAlignment, int loopStart, int loopLength)\n        {           \n            int sampleAlignment = AudioLoader.SampleAlignment(AudioLoader.FormatMsAdpcm, channels, 0, blockAlignment);\n            // Buffer length must be aligned with the block alignment\n            count = count - (count % blockAlignment);\n            ALFormat alFormat;\n            switch (channels)\n            {\n                case 1: alFormat = ALFormat.MonoMSAdpcm; break;\n                case 2: alFormat = ALFormat.StereoMSAdpcm; break;\n                default: throw new NotSupportedException(\"The specified channel count is not supported.\");\n            }\n\n            CreateBuffer(concreteAudioService, buffer, index, count, alFormat, sampleRate, sampleAlignment);\n        }\n\n        private void InitializeIma4(ConcreteAudioService concreteAudioService, byte[] buffer, int index, int count, int sampleRate, int channels, int blockAlignment, int loopStart, int loopLength)\n        {\n            int sampleAlignment = AudioLoader.SampleAlignment(AudioLoader.FormatIma4, channels, 0, blockAlignment);\n            ALFormat alFormat;\n            switch (channels)\n            {\n                case 1: alFormat = ALFormat.MonoIma4; break;\n                case 2: alFormat = ALFormat.StereoIma4; break;\n                default: throw new NotSupportedException(\"The specified channel count is not supported.\");\n            }\n\n            CreateBuffer(concreteAudioService, buffer, index, count, alFormat, sampleRate, sampleAlignment);\n        }\n\n\n        private void CreateBuffer(ConcreteAudioService concreteAudioService, byte[] buffer, int index, int count, ALFormat alFormat, int sampleRate, int sampleAlignment)\n        {\n            _audioService = AudioService.Current;\n            _audioService.Disposing += _audioService_Disposing;\n\n            _bufferId = concreteAudioService.OpenAL.GenBuffer();\n            concreteAudioService.OpenAL.CheckError(\"Failed to generate OpenAL data buffer.\");\n      \n            concreteAudioService.OpenAL.BufferData(_bufferId, alFormat, buffer, index, count, sampleRate, sampleAlignment);\n            concreteAudioService.OpenAL.CheckError(\"Failed to fill buffer.\");\n        }\n\n        internal void _audioService_Disposing(object sender, EventArgs e)\n        {\n            DeleteBuffer();\n        }\n\n        private void DeleteBuffer()\n        {\n            if (!_isBufferDisposed)\n            {\n                ConcreteAudioService concreteAudioService = ((IPlatformAudioService)_audioService).Strategy.ToConcrete<ConcreteAudioService>();\n\n                concreteAudioService.OpenAL.DeleteBuffer(_bufferId);\n                concreteAudioService.OpenAL.CheckError(\"Failed to delete buffer.\");\n                _isBufferDisposed = true;\n                _bufferId = 0;\n\n                _audioService.Disposing -= _audioService_Disposing;\n                _audioService = null;\n            }\n\n            _audioService = null;\n        }\n\n\n        #endregion\n\n        internal int GetALBufferId()\n        {\n            return _bufferId;\n        }\n\n        #region IDisposable Members\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            DeleteBuffer();\n        }\n\n#endregion\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/OpenAL/ConcreteSoundEffectInstance.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Platform.Audio.OpenAL;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public class ConcreteSoundEffectInstance : SoundEffectInstanceStrategy\n    {\n        private AudioServiceStrategy _audioServiceStrategy;\n        private ConcreteSoundEffect _concreteSoundEffect;\n        internal ConcreteAudioService ConcreteAudioService { get { return (ConcreteAudioService)_audioServiceStrategy; } }\n\n        protected int _sourceId;\n        float reverb;\n        bool applyFilter = false;\n        EfxFilterType filterType;\n        float filterQ;\n        float frequency;\n\n        // emmiter's position/velocity relative to the listener\n        Vector3 _relativePosition;\n        Vector3 _relativeVelocity;\n\n        public override bool IsXAct\n        {\n            get { return base.IsXAct; }\n            set { base.IsXAct = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override float Pan\n        {\n            get { return base.Pan; }\n            set\n            {\n                base.Pan = value;\n\n                // OpenAL doesn't support Panning. We emulate it using 3D audio.\n                // If the user set both Pan and Apply3D(), only the last call takes effect.\n                _relativePosition.X = (float)Math.Sin(value * MathHelper.PiOver2) * SoundEffect.DistanceScale;\n                _relativePosition.Y = (float)Math.Cos(value * MathHelper.PiOver2) * SoundEffect.DistanceScale;\n                _relativePosition.Z = 0f;\n\n                if (_sourceId != 0)\n                {\n                    ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Position, ref _relativePosition);\n                    ConcreteAudioService.OpenAL.CheckError(\"Failed to set source pan.\");\n                }\n            }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n\n                if (_sourceId != 0)\n                {\n                    // XAct sound effects are not tied to the SoundEffect master volume.\n                    float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f;\n                    ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.Gain, value * masterVolume);\n                    ConcreteAudioService.OpenAL.CheckError(\"Failed to set source volume.\");\n                }\n            }\n        }\n\n        public override float Pitch\n        {\n            get { return base.Pitch; }\n            set\n            {\n                base.Pitch = value;\n\n                if (_sourceId != 0)\n                {\n                    ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.Pitch, XnaPitchToAlPitch(value));\n                    ConcreteAudioService.OpenAL.CheckError(\"Failed to set source pitch.\");\n                }\n            }\n        }\n\n        #region Initialization\n\n        internal ConcreteSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy)\n            : base(audioServiceStrategy, sfxStrategy)\n        {\n            _audioServiceStrategy = audioServiceStrategy;\n            _concreteSoundEffect = (ConcreteSoundEffect)sfxStrategy;\n\n            this.Pan = 0.0f;\n            this.Volume = 1.0f;\n            this.Pitch = 0.0f;\n        }\n\n        #endregion // Initialization\n\n        /// <summary>\n        /// Converts the XNA [-1, 1] pitch range to OpenAL pitch (0, INF).\n        /// <param name=\"xnaPitch\">The pitch of the sound in the Microsoft XNA range.</param>\n        /// </summary>\n        private static float XnaPitchToAlPitch(float xnaPitch)\n        {\n            return (float)Math.Pow(2, xnaPitch);\n        }\n\n        internal int GetSamplePosition()\n        {\n            ConcreteAudioService.OpenAL.GetSource(_sourceId, ALGetSourcei.SampleOffset, out int samplePosition);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to get sample offset.\");\n            return samplePosition;\n        }\n\n        public override void PlatformApply3D(AudioListener listener, AudioEmitter emitter)\n        {\n            // set up matrix to transform world space coordinates to listener space coordinates\n            Matrix worldSpaceToListenerSpace = Matrix.Invert(Matrix.CreateWorld(listener.Position, listener.Forward, listener.Up));\n            // set up our final position and velocity according to orientation of listener\n            _relativePosition = emitter.Position;\n            Vector3.Transform(ref _relativePosition, ref worldSpaceToListenerSpace, out _relativePosition);\n            _relativeVelocity = emitter.Velocity - listener.Velocity;\n            Vector3.TransformNormal(ref _relativeVelocity, ref worldSpaceToListenerSpace, out _relativeVelocity);\n\n            if (_sourceId != 0)\n            {\n                // set the position based on relative position\n                ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Position, ref _relativePosition);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set source position.\");\n                ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Velocity, ref _relativeVelocity);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set source velocity.\");\n                ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.ReferenceDistance, SoundEffect.DistanceScale);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set source distance scale.\");\n                ConcreteAudioService.OpenAL.DopplerFactor(SoundEffect.DopplerScale);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set Doppler scale.\");\n            }\n        }\n\n        public override void PlatformPause()\n        {\n            ConcreteAudioService.OpenAL.SourcePause(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to pause source.\");\n        }\n\n        public override void PlatformPlay(bool isLooped)\n        {\n            _sourceId = ConcreteAudioService.ReserveSource();\n\n            // bind buffer to source\n            int bufferId = _concreteSoundEffect.GetALBufferId();\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcei.Buffer, bufferId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to bind buffer to source.\");\n\n            // Send the position, gain, looping, pitch, and distance model to the OpenAL driver.\n\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcei.SourceRelative, 1);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed set source relative.\");\n            // Distance Model\n            ConcreteAudioService.OpenAL.DistanceModel(ALDistanceModel.InverseDistanceClamped);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed set source distance.\");\n            // Position/Pan\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Position, ref _relativePosition);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to set source position/pan.\");\n            // Velocity\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Velocity, ref _relativeVelocity);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to set source pan.\");\n            // Distance Scale\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.ReferenceDistance, SoundEffect.DistanceScale);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to set source distance scale.\");\n            // Doppler Scale\n            ConcreteAudioService.OpenAL.DopplerFactor(SoundEffect.DopplerScale);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to set Doppler scale.\");\n            // Volume\n            // XAct sound effects are not tied to the SoundEffect master volume.\n            float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f;\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.Gain, base.Volume * masterVolume);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to set source volume.\");\n            // Looping\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSourceb.Looping, isLooped);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to set source loop state.\");\n            // Pitch\n            ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.Pitch, XnaPitchToAlPitch(base.Pitch));\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to set source pitch.\");\n\n            ApplyReverb();\n            ApplyFilter();\n\n            ConcreteAudioService.OpenAL.SourcePlay(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to play source.\");\n        }\n\n        public override void PlatformResume(bool isLooped)\n        {\n            ConcreteAudioService.OpenAL.SourcePlay(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to play source.\");\n        }\n\n        public override void PlatformStop()\n        {\n            ConcreteAudioService.OpenAL.SourceStop(_sourceId);\n            ConcreteAudioService.OpenAL.CheckError(\"Failed to stop source.\");\n\n            // Reset the SendFilter to 0 if we are NOT using reverb since\n            // sources are recycled\n            if (ConcreteAudioService.SupportsEfx)\n            {\n                ConcreteAudioService.OpenAL.Efx.BindSourceToAuxiliarySlot(_sourceId, 0, 0, 0);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to unset reverb.\");\n                ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcei.EfxDirectFilter, 0);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to unset filter.\");\n            }\n\n            ConcreteAudioService.RecycleSource(_sourceId);\n            _sourceId = 0;\n        }\n\n        public override void PlatformRelease(bool isLooped)\n        {\n            if (isLooped)\n            {\n                ConcreteAudioService.OpenAL.Source(_sourceId, ALSourceb.Looping, false);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set source loop state.\");\n            }\n        }\n\n        public override bool PlatformUpdateState(ref SoundState state)\n        {\n            // check if the sound has stopped\n            if (state == SoundState.Playing)\n            {\n                ALSourceState alState = ConcreteAudioService.OpenAL.GetSourceState(_sourceId);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to get source state.\");\n\n                if (alState == ALSourceState.Stopped)\n                {\n                    // update instance\n                    PlatformStop();\n                    state = SoundState.Stopped;\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        public override void PlatformSetIsLooped(bool isLooped, SoundState state)\n        {\n            if (_sourceId != 0)\n            {\n                ConcreteAudioService.OpenAL.Source(_sourceId, ALSourceb.Looping, isLooped);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set source loop state.\");\n            }\n        }\n\n        public override void PlatformSetReverbMix(SoundState state, float mix, float pan)\n        {\n            if (!ConcreteAudioService.OpenAL.Efx.IsInitialized)\n                return;\n\n            reverb = mix;\n\n            if (state == SoundState.Playing)\n            {\n                ApplyReverb();\n                reverb = 0f;\n            }\n        }\n\n        void ApplyReverb()\n        {\n            if (reverb > 0f && ConcreteAudioService.ReverbSlot != 0)\n            {\n                ConcreteAudioService.OpenAL.Efx.BindSourceToAuxiliarySlot(_sourceId, ConcreteAudioService.ReverbSlot, 0, 0);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set reverb.\");\n            }\n        }\n\n        void ApplyFilter()\n        {\n            if (applyFilter && ConcreteAudioService.Filter > 0)\n            {\n                float freq = frequency / 20000f;\n                float lf = 1.0f - freq;\n                EffectsExtension efx = ConcreteAudioService.OpenAL.Efx;\n                efx.Filter(ConcreteAudioService.Filter, EfxFilteri.FilterType, (int)filterType);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set filter.\");\n                switch (filterType)\n                {\n                case EfxFilterType.Lowpass:\n                    efx.Filter(ConcreteAudioService.Filter, EfxFilterf.LowpassGainHF, freq);\n                        ConcreteAudioService.OpenAL.CheckError(\"Failed to set LowpassGainHF.\");\n                    break;\n                case EfxFilterType.Highpass:\n                    efx.Filter(ConcreteAudioService.Filter, EfxFilterf.HighpassGainLF, freq);\n                        ConcreteAudioService.OpenAL.CheckError(\"Failed to set HighpassGainLF.\");\n                    break;\n                case EfxFilterType.Bandpass:\n                    efx.Filter(ConcreteAudioService.Filter, EfxFilterf.BandpassGainHF, freq);\n                        ConcreteAudioService.OpenAL.CheckError(\"Failed to set BandpassGainHF.\");\n                    efx.Filter(ConcreteAudioService.Filter, EfxFilterf.BandpassGainLF, lf);\n                        ConcreteAudioService.OpenAL.CheckError(\"Failed to set BandpassGainLF.\");\n                    break;\n                }\n                ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcei.EfxDirectFilter, ConcreteAudioService.Filter);\n                ConcreteAudioService.OpenAL.CheckError(\"Failed to set DirectFilter.\");\n            }\n        }\n\n        public override void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency)\n        {\n            if (!ConcreteAudioService.OpenAL.Efx.IsInitialized)\n                return;\n\n            applyFilter = true;\n            switch (mode)\n            {\n            case FilterMode.BandPass:\n                filterType = EfxFilterType.Bandpass;\n                break;\n                case FilterMode.LowPass:\n                filterType = EfxFilterType.Lowpass;\n                break;\n                case FilterMode.HighPass:\n                filterType = EfxFilterType.Highpass;\n                break;\n            }\n\n            this.filterQ = filterQ;\n            this.frequency = frequency;\n\n            if (state == SoundState.Playing)\n            {\n                ApplyFilter();\n                applyFilter = false;\n            }\n        }\n\n        public override void PlatformClearFilter()\n        {\n            if (!ConcreteAudioService.OpenAL.Efx.IsInitialized)\n                return;\n\n            applyFilter = false;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/OpenAL/OpenAL.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\nusing System;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Utilities;\n\n#if ANDROID\nusing System.IO;\n#endif\n\n\nnamespace Microsoft.Xna.Platform.Audio.OpenAL\n{\n    internal enum ALFormat\n    {\n        Mono8 = 0x1100,\n        Mono16 = 0x1101,\n        Stereo8 = 0x1102,\n        Stereo16 = 0x1103,\n        MonoIma4 = 0x1300,\n        StereoIma4 = 0x1301,\n        MonoMSAdpcm = 0x1302,\n        StereoMSAdpcm = 0x1303,\n        MonoFloat32 = 0x10010,\n        StereoFloat32 = 0x10011,\n    }\n\n    internal enum ALError\n    {\n        NoError = 0,\n        InvalidName = 0xA001,\n        InvalidEnum = 0xA002,\n        InvalidValue = 0xA003,\n        InvalidOperation = 0xA004,\n        OutOfMemory = 0xA005,\n    }\n\n    internal enum ALGetString\n    {\n        Extensions = 0xB004,\n    }\n\n    internal enum ALBufferi\n    {\n        UnpackBlockAlignmentSoft = 0x200C,\n        LoopSoftPointsExt = 0x2015,\n    }\n\n    internal enum ALGetBufferi\n    {\n        Bits = 0x2002,\n        Channels = 0x2003,\n        Size = 0x2004,\n    }\n\n    internal enum ALSourceb\n    {\n        Looping = 0x1007,\n    }\n\n    internal enum ALSourcei\n    {\n        SourceRelative = 0x202,\n        Buffer = 0x1009,\n        EfxDirectFilter = 0x20005,\n        EfxAuxilarySendFilter = 0x20006,\n    }\n\n    internal enum ALSourcef\n    {\n        Pitch = 0x1003,\n        Gain = 0x100A,\n        ReferenceDistance = 0x1020,\n    }\n\n    internal enum ALGetSourcei\n    {\n        SampleOffset = 0x1025,\n        SourceState = 0x1010,\n        BuffersQueued = 0x1015,\n        BuffersProcessed = 0x1016,\n    }\n\n    internal enum ALSourceState\n    {\n        Initial = 0x1011,\n        Playing = 0x1012,\n        Paused = 0x1013,\n        Stopped = 0x1014,\n    }\n\n    internal enum ALListener3f\n    {\n        Position = 0x1004,\n    }\n\n    internal enum ALSource3f\n    {\n        Position = 0x1004,\n        Velocity = 0x1006,\n    }\n\n    internal enum ALDistanceModel\n    {\n        None = 0,\n        InverseDistanceClamped = 0xD002,\n    }\n\n    internal enum AlcError\n    {\n        NoError        = 0,\n        InvalidDevice  = 0xA001,\n        InvalidContext = 0xA002,\n        InvalidEnum    = 0xA003,\n        InvalidValue   = 0xA004,\n        OutOfMemory    = 0xA005,\n    }\n\n    internal enum AlcGetString\n    {\n        CaptureDeviceSpecifier = 0x0310,\n        CaptureDefaultDeviceSpecifier = 0x0311,\n        Extensions = 0x1006,\n    }\n\n    internal enum AlcGetInteger\n    {\n        CaptureSamples = 0x0312,\n    }\n\n    internal enum EfxFilteri\n    {\n        FilterType = 0x8001,\n    }\n\n    internal enum EfxFilterf\n    {\n        LowpassGain = 0x0001,\n        LowpassGainHF = 0x0002,\n        HighpassGain = 0x0001,\n        HighpassGainLF = 0x0002,\n        BandpassGain = 0x0001,\n        BandpassGainLF = 0x0002,\n        BandpassGainHF = 0x0003,\n    }\n\n    internal enum EfxFilterType\n    {\n        None = 0x0000,\n        Lowpass = 0x0001,\n        Highpass = 0x0002,\n        Bandpass = 0x0003,\n    }\n\n    internal enum EfxEffecti\n    {\n        EffectType = 0x8001,\n        SlotEffect = 0x0001,\n    }\n\n    internal enum EfxEffectSlotf\n    {\n        EffectSlotGain = 0x0002,\n    }\n\n    internal enum EfxEffectf\n    {\n        EaxReverbDensity = 0x0001,\n        EaxReverbDiffusion = 0x0002,\n        EaxReverbGain = 0x0003,\n        EaxReverbGainHF = 0x0004,\n        EaxReverbGainLF = 0x0005,\n        DecayTime = 0x0006,\n        DecayHighFrequencyRatio = 0x0007,\n        DecayLowFrequencyRation = 0x0008,\n        EaxReverbReflectionsGain = 0x0009,\n        EaxReverbReflectionsDelay = 0x000A,\n        ReflectionsPain = 0x000B,\n        LateReverbGain = 0x000C,\n        LateReverbDelay = 0x000D,\n        LateRevertPain = 0x000E,\n        EchoTime = 0x000F,\n        EchoDepth = 0x0010,\n        ModulationTime = 0x0011,\n        ModulationDepth = 0x0012,\n        AirAbsorbsionHighFrequency = 0x0013,\n        EaxReverbHFReference = 0x0014,\n        EaxReverbLFReference = 0x0015,\n        RoomRolloffFactor = 0x0016,\n        DecayHighFrequencyLimit = 0x0017,\n    }\n\n    internal enum EfxEffectType\n    {\n        Reverb = 0x8000,\n    }\n\n    internal class AL\n    {\n        public IntPtr NativeLibrary { get; private set; }\n        public Alc ALC { get; private set; }\n        public EffectsExtension Efx { get; private set; }\n\n    private static AL _current;\n\n        public static AL Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                if (_current == null)\n                    _current = new AL();\n\n                return _current;\n            }\n        }\n\n        public AL()\n        {\n            NativeLibrary = GetNativeLibrary();\n            LoadEntryPoints(NativeLibrary);\n\n            ALC = new Alc(NativeLibrary);\n            Efx = new EffectsExtension(this);\n        }\n\n        private IntPtr GetNativeLibrary()\n        {\n#if DESKTOPGL\n            if (CurrentPlatform.OS == OS.Windows)\n                return FuncLoader.LoadLibraryExt(\"soft_oal.dll\");\n            else if (CurrentPlatform.OS == OS.Linux)\n                return FuncLoader.LoadLibraryExt(\"libopenal.so.1\");\n            else if (CurrentPlatform.OS == OS.MacOSX)\n                return FuncLoader.LoadLibraryExt(\"libopenal.1.dylib\");\n            else\n                return FuncLoader.LoadLibraryExt(\"openal\");\n#elif ANDROID\n            IntPtr ret = FuncLoader.LoadLibrary(\"libopenal.so\");\n            if (ret != IntPtr.Zero)\n                return ret;\n            \n            string appFilesDir = Environment.GetFolderPath(Environment.SpecialFolder.Personal);\n            string appDir = Path.GetDirectoryName(appFilesDir);\n            string lib = Path.Combine(appDir, \"lib\", \"libopenal.so\");\n            return FuncLoader.LoadLibrary(lib);\n#elif IOS || TVOS\n            return FuncLoader.LoadLibrary(\"/System/Library/Frameworks/OpenAL.framework/OpenAL\");\n#else\n            throw new PlatformNotSupportedException();\n#endif\n        }\n\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alenable(int cap);\n        internal d_alenable Enable;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal unsafe delegate void d_albufferdata(int buffer, int format, byte* data, int size, int freq);\n        internal d_albufferdata alBufferData;\n\n        internal unsafe void BufferData(int buffer, ALFormat alFormat, byte[] data, int index, int count, int freq, int sampleAlignment)\n        {\n            if (sampleAlignment > 0)\n            {\n                Bufferi(buffer, ALBufferi.UnpackBlockAlignmentSoft, sampleAlignment);\n                this.CheckError(\"Failed to fill buffer.\");\n            }\n\n            fixed(byte* pData = data)\n            {\n                alBufferData(buffer, (int)alFormat, (pData + index), count, freq);\n            }\n        }\n\n        internal unsafe void BufferData(int buffer, ALFormat alFormat, short[] data, int count, int freq)\n        {\n            fixed (void* pData = data)\n            {\n                alBufferData(buffer, (int)alFormat, (byte*)pData, count, freq);\n            }\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal unsafe delegate void d_aldeletebuffers(int n, int* pbuffers);\n        internal d_aldeletebuffers alDeleteBuffers;\n\n        internal unsafe void DeleteBuffers(int[] buffers)\n        {\n            fixed (int* pbuffers = buffers)\n            {\n                alDeleteBuffers(buffers.Length, pbuffers);\n            }\n        }\n\n        internal unsafe void DeleteBuffer(int buffer)\n        {\n            alDeleteBuffers(1, &buffer);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_albufferi(int buffer, ALBufferi param, int value);\n        internal d_albufferi Bufferi;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_algetbufferi(int buffer, ALGetBufferi param, out int value);\n        internal d_algetbufferi GetBufferi;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_albufferiv(int buffer, ALBufferi param, int[] values);\n        internal d_albufferiv Bufferiv;\n\n        internal void GetBuffer(int buffer, ALGetBufferi param, out int value)\n        {\n            GetBufferi(buffer, param, out value);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal unsafe delegate void d_algenbuffers(int count, int* pbuffers);\n        internal d_algenbuffers alGenBuffers;\n\n        internal unsafe void GenBuffers(int[] buffers)\n        {\n            fixed (int* pbuffers = buffers)\n            {\n                alGenBuffers(buffers.Length, pbuffers);\n            }\n        }\n\n        internal unsafe int GenBuffer()\n        {\n            int buffer;\n            alGenBuffers(1, &buffer);\n            return buffer;\n        }\n\n        internal float GetDuration(int buffer, int sampleRate)\n        {\n            int samples = GetSamples(buffer);\n            return (float)samples / (float)sampleRate;\n        }\n\n        internal int GetSamples(int buffer)\n        {\n            int bits, channels, unpackedSize;\n            GetBuffer(buffer, ALGetBufferi.Bits, out bits);\n            this.CheckError(\"Failed to get buffer bits\");\n            GetBuffer(buffer, ALGetBufferi.Channels, out channels);\n            this.CheckError(\"Failed to get buffer channels\");\n            GetBuffer(buffer, ALGetBufferi.Size, out unpackedSize);\n            this.CheckError(\"Failed to get buffer size\");\n            return (unpackedSize / ((bits / 8) * channels));\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal unsafe delegate void d_algensources(int n, int* sources);\n        internal d_algensources alGenSources;\n\n        internal unsafe void GenSources(int[] sources)\n        {\n            fixed (int* psources = sources)\n            {\n                alGenSources(sources.Length, psources);\n            }\n        }\n\n        internal unsafe int GenSource()\n        {\n            int source;\n            alGenSources(1, &source);\n            return source;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate ALError d_algeterror();\n        internal d_algeterror GetError;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate bool d_alisbuffer(int buffer);\n        internal d_alisbuffer alIsBuffer;\n\n        internal bool IsBuffer(int buffer)\n        {\n            return alIsBuffer(buffer);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alsourcepause(int source);\n        internal d_alsourcepause alSourcePause;\n\n        internal void SourcePause(int source)\n        {\n            alSourcePause(source);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alsourceplay(int source);\n        internal d_alsourceplay alSourcePlay;\n\n        internal void SourcePlay(int source)\n        {\n            alSourcePlay(source);\n        }\n\n        internal static string GetErrorString(ALError errorCode)\n        {\n            return errorCode.ToString();\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate bool d_alissource(int source);\n        internal d_alissource IsSource;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal unsafe delegate void d_aldeletesources(int n, int* psources);\n        internal d_aldeletesources alDeleteSources;\n\n        internal unsafe void DeleteSource(int source)\n        {\n            alDeleteSources(1, &source);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alsourcestop(int source);\n        internal d_alsourcestop SourceStop;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alsourcei(int source, int param, int value);\n        internal d_alsourcei alSourcei;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alsource3i(int source, ALSourcei param, int a, int b, int c);\n        internal d_alsource3i alSource3i;\n\n        internal void Source(int source, ALSourcei param, int value)\n        {\n            alSourcei(source, (int)param, value);\n        }\n\n        internal void Source(int source, ALSourceb param, bool value)\n        {\n            alSourcei(source, (int)param, value ? 1 : 0);\n        }\n\n        internal void Source(int source, ALSource3f param, float x, float y, float z)\n        {\n            alSource3f(source, param, x, y, z);\n        }\n\n        internal void Source(int source, ALSource3f param, ref Vector3 value)\n        {\n            alSource3f(source, param, value.X, value.Y, value.Z);\n        }\n\n        internal void Source(int source, ALSourcef param, float value)\n        {\n            alSourcef(source, param, value);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alsourcef(int source, ALSourcef param, float value);\n        internal d_alsourcef alSourcef;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alsource3f(int source, ALSource3f param, float x, float y, float z);\n        internal d_alsource3f alSource3f;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_algetsourcei(int source, ALGetSourcei param, out int value);\n        internal d_algetsourcei GetSource;\n\n        internal ALSourceState GetSourceState(int source)\n        {\n            int state;\n            GetSource(source, ALGetSourcei.SourceState, out state);\n            return (ALSourceState)state;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_algetlistener3f(ALListener3f param, out float value1, out float value2, out float value3);\n        internal d_algetlistener3f GetListener;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_aldistancemodel(ALDistanceModel model);\n        internal d_aldistancemodel DistanceModel;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_aldopplerfactor(float value);\n        internal d_aldopplerfactor DopplerFactor;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal unsafe delegate void d_alsourcequeuebuffers(int source, int numEntries, int* pbuffers);\n        internal d_alsourcequeuebuffers alSourceQueueBuffers;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal unsafe delegate void d_alsourceunqueuebuffers(int source, int numEntries, int* pbuffers);\n        internal d_alsourceunqueuebuffers alSourceUnqueueBuffers;\n\n        internal unsafe void SourceQueueBuffers(int source, int numEntries, int[] buffers)\n        {\n            fixed (int* pbuffers = buffers)\n            {\n                alSourceQueueBuffers(source, numEntries, pbuffers);\n            }\n        }\n\n        internal unsafe void SourceQueueBuffer(int source, int buffer)\n        {\n            alSourceQueueBuffers(source, 1, &buffer);\n        }\n\n        internal unsafe void SourceUnqueueBuffers(int source, int numEntries, int[] buffers)\n        {\n            fixed (int* pbuffers = buffers)\n            {\n                alSourceUnqueueBuffers(source, numEntries, pbuffers);\n            }\n        }\n\n        internal unsafe int SourceUnqueueBuffer(int source)\n        {\n            int buffer;\n            alSourceUnqueueBuffers(source, 1, &buffer);\n            return buffer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate int d_algetenumvalue(string enumName);\n        internal d_algetenumvalue alGetEnumValue;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate bool d_alisextensionpresent(string extensionName);\n        internal d_alisextensionpresent IsExtensionPresent;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_algetprocaddress(string functionName);\n        internal d_algetprocaddress alGetProcAddress;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_algetstring(int p);\n        private d_algetstring alGetString;\n\n        internal string GetString(int p)\n        {\n            return Marshal.PtrToStringAnsi(alGetString(p));\n        }\n\n        internal string Get(ALGetString p)\n        {\n            return GetString((int)p);\n        }\n\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            Enable = FuncLoader.LoadFunctionOrNull<d_alenable>(library, \"alEnable\");\n            alBufferData = FuncLoader.LoadFunctionOrNull<d_albufferdata>(library, \"alBufferData\");\n            alDeleteBuffers = FuncLoader.LoadFunctionOrNull<d_aldeletebuffers>(library, \"alDeleteBuffers\");\n            Bufferi = FuncLoader.LoadFunctionOrNull<d_albufferi>(library, \"alBufferi\");\n            GetBufferi = FuncLoader.LoadFunctionOrNull<d_algetbufferi>(library, \"alGetBufferi\");\n            Bufferiv = FuncLoader.LoadFunctionOrNull<d_albufferiv>(library, \"alBufferiv\");\n            alGenBuffers = FuncLoader.LoadFunctionOrNull<d_algenbuffers>(library, \"alGenBuffers\");\n            alGenSources = FuncLoader.LoadFunctionOrNull<d_algensources>(library, \"alGenSources\");\n            GetError = FuncLoader.LoadFunctionOrNull<d_algeterror>(library, \"alGetError\");\n            alIsBuffer = FuncLoader.LoadFunctionOrNull<d_alisbuffer>(library, \"alIsBuffer\");\n            alSourcePause = FuncLoader.LoadFunctionOrNull<d_alsourcepause>(library, \"alSourcePause\");\n            alSourcePlay = FuncLoader.LoadFunctionOrNull<d_alsourceplay>(library, \"alSourcePlay\");\n            IsSource = FuncLoader.LoadFunctionOrNull<d_alissource>(library, \"alIsSource\");\n            alDeleteSources = FuncLoader.LoadFunctionOrNull<d_aldeletesources>(library, \"alDeleteSources\");\n            SourceStop = FuncLoader.LoadFunctionOrNull<d_alsourcestop>(library, \"alSourceStop\");\n            alSourcei = FuncLoader.LoadFunctionOrNull<d_alsourcei>(library, \"alSourcei\");\n            alSource3i = FuncLoader.LoadFunctionOrNull<d_alsource3i>(library, \"alSource3i\");\n            alSourcef = FuncLoader.LoadFunctionOrNull<d_alsourcef>(library, \"alSourcef\");\n            alSource3f = FuncLoader.LoadFunctionOrNull<d_alsource3f>(library, \"alSource3f\");\n            GetSource = FuncLoader.LoadFunctionOrNull<d_algetsourcei>(library, \"alGetSourcei\");\n            GetListener = FuncLoader.LoadFunctionOrNull<d_algetlistener3f>(library, \"alGetListener3f\");\n            DistanceModel = FuncLoader.LoadFunctionOrNull<d_aldistancemodel>(library, \"alDistanceModel\");\n            DopplerFactor = FuncLoader.LoadFunctionOrNull<d_aldopplerfactor>(library, \"alDopplerFactor\");\n            alSourceQueueBuffers = FuncLoader.LoadFunctionOrNull<d_alsourcequeuebuffers>(library, \"alSourceQueueBuffers\");\n            alSourceUnqueueBuffers = FuncLoader.LoadFunctionOrNull<d_alsourceunqueuebuffers>(library, \"alSourceUnqueueBuffers\");\n            alGetEnumValue = FuncLoader.LoadFunctionOrNull<d_algetenumvalue>(library, \"alGetEnumValue\");\n            IsExtensionPresent = FuncLoader.LoadFunctionOrNull<d_alisextensionpresent>(library, \"alIsExtensionPresent\");\n            alGetProcAddress = FuncLoader.LoadFunctionOrNull<d_algetprocaddress>(library, \"alGetProcAddress\");\n            alGetString = FuncLoader.LoadFunctionOrNull<d_algetstring>(library, \"alGetString\");\n        }\n    }\n\n    internal class Alc\n    {\n        public Alc(IntPtr library)\n        {\n            LoadEntryPoints(library);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_alccreatecontext(IntPtr device, int[] attributes);\n        internal d_alccreatecontext CreateContext;\n\n        internal AlcError GetError()\n        {\n            return GetErrorForDevice(IntPtr.Zero);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate AlcError d_alcgeterror(IntPtr device);\n        internal d_alcgeterror GetErrorForDevice;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal unsafe delegate void d_alcgetintegerv(IntPtr device, int param, int size, int* value);\n        internal d_alcgetintegerv alcGetIntegerv;\n\n        internal unsafe int GetInteger(IntPtr device, AlcGetInteger param)\n        {\n            int value;\n            alcGetIntegerv(device, (int)param, 1, &value);\n            return value;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_alcgetcurrentcontext();\n        internal d_alcgetcurrentcontext GetCurrentContext;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alcmakecontextcurrent(IntPtr context);\n        internal d_alcmakecontextcurrent MakeContextCurrent;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alcdestroycontext(IntPtr context);\n        internal d_alcdestroycontext DestroyContext;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alcclosedevice(IntPtr device);\n        internal d_alcclosedevice CloseDevice;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_alcopendevice(string device);\n        internal d_alcopendevice OpenDevice;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_alccaptureopendevice(string device, uint sampleRate, int format, int sampleSize);\n        internal d_alccaptureopendevice alcCaptureOpenDevice;\n\n        internal IntPtr CaptureOpenDevice(string device, uint sampleRate, ALFormat alFormat, int sampleSize)\n        {\n            return alcCaptureOpenDevice(device, sampleRate, (int)alFormat, sampleSize);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_alccapturestart(IntPtr device);\n        internal d_alccapturestart CaptureStart;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alccapturesamples(IntPtr device, IntPtr buffer, int samples);\n        internal d_alccapturesamples CaptureSamples;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_alccapturestop(IntPtr device);\n        internal d_alccapturestop CaptureStop;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_alccaptureclosedevice(IntPtr device);\n        internal d_alccaptureclosedevice CaptureCloseDevice;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate bool d_alcisextensionpresent(IntPtr device, string extensionName);\n        internal d_alcisextensionpresent IsExtensionPresent;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate IntPtr d_alcgetstring(IntPtr device, int p);\n        internal d_alcgetstring alcGetString;\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            CreateContext = FuncLoader.LoadFunctionOrNull<d_alccreatecontext>(library, \"alcCreateContext\");\n            GetErrorForDevice = FuncLoader.LoadFunctionOrNull<d_alcgeterror>(library, \"alcGetError\");\n            alcGetIntegerv = FuncLoader.LoadFunctionOrNull<d_alcgetintegerv>(library, \"alcGetIntegerv\");\n            GetCurrentContext = FuncLoader.LoadFunctionOrNull<d_alcgetcurrentcontext>(library, \"alcGetCurrentContext\");\n            MakeContextCurrent = FuncLoader.LoadFunctionOrNull<d_alcmakecontextcurrent>(library, \"alcMakeContextCurrent\");\n            DestroyContext = FuncLoader.LoadFunctionOrNull<d_alcdestroycontext>(library, \"alcDestroyContext\");\n            CloseDevice = FuncLoader.LoadFunctionOrNull<d_alcclosedevice>(library, \"alcCloseDevice\");\n            OpenDevice = FuncLoader.LoadFunctionOrNull<d_alcopendevice>(library, \"alcOpenDevice\");\n            alcCaptureOpenDevice = FuncLoader.LoadFunctionOrNull<d_alccaptureopendevice>(library, \"alcCaptureOpenDevice\");\n            CaptureStart = FuncLoader.LoadFunctionOrNull<d_alccapturestart>(library, \"alcCaptureStart\");\n            CaptureSamples = FuncLoader.LoadFunctionOrNull<d_alccapturesamples>(library, \"alcCaptureSamples\");\n            CaptureStop = FuncLoader.LoadFunctionOrNull<d_alccapturestop>(library, \"alcCaptureStop\");\n            CaptureCloseDevice = FuncLoader.LoadFunctionOrNull<d_alccaptureclosedevice>(library, \"alcCaptureCloseDevice\");\n            IsExtensionPresent = FuncLoader.LoadFunctionOrNull<d_alcisextensionpresent>(library, \"alcIsExtensionPresent\");\n            alcGetString = FuncLoader.LoadFunctionOrNull<d_alcgetstring>(library, \"alcGetString\");\n\n#if IOS || TVOS\n            SuspendContext = FuncLoader.LoadFunctionOrNull<d_alcsuspendcontext>(library, \"alcSuspendContext\");\n            ProcessContext = FuncLoader.LoadFunctionOrNull<d_alcprocesscontext>(library, \"alcProcessContext\");\n#endif\n\n#if ANDROID\n            DevicePause = FuncLoader.LoadFunctionOrNull<d_alcdevicepausesoft>(library, \"alcDevicePauseSOFT\");\n            DeviceResume = FuncLoader.LoadFunctionOrNull<d_alcdeviceresumesoft>(library, \"alcDeviceResumeSOFT\");\n#endif\n        }\n\n        internal string GetString(IntPtr device, int p)\n        {\n            return Marshal.PtrToStringAnsi(alcGetString(device, p));\n        }\n\n        internal string GetString(IntPtr device, AlcGetString p)\n        {\n            return GetString(device, (int)p);\n        }\n\n#if IOS || TVOS\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alcsuspendcontext(IntPtr context);\n        internal d_alcsuspendcontext SuspendContext;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alcprocesscontext(IntPtr context);\n        internal d_alcprocesscontext ProcessContext;\n#endif\n\n#if ANDROID\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alcdevicepausesoft(IntPtr device);\n        internal d_alcdevicepausesoft DevicePause;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        internal delegate void d_alcdeviceresumesoft(IntPtr device);\n        internal d_alcdeviceresumesoft DeviceResume;\n#endif\n    }\n\n    internal class XRamExtension\n    {\n        internal enum XRamStorage\n        {\n            Automatic,\n            Hardware,\n            Accessible\n        }\n\n        private int RamSize;\n        private int RamFree;\n        private int StorageAuto;\n        private int StorageHardware;\n        private int StorageAccessible;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate bool SetBufferModeDelegate(int n, ref int buffers, int value);\n        private SetBufferModeDelegate setBufferMode;\n\n        internal bool IsInitialized { get; private set; }\n        private AL _openAL;\n\n        internal XRamExtension(AL openAL)\n        {\n            _openAL = openAL;\n            Initialize();\n        }\n\n        private void Initialize()\n        {\n            IsInitialized = false;\n\n            if (_openAL.IsExtensionPresent(\"EAX-RAM\"))\n            {\n                RamSize = _openAL.alGetEnumValue(\"AL_EAX_RAM_SIZE\");\n                RamFree = _openAL.alGetEnumValue(\"AL_EAX_RAM_FREE\");\n                StorageAuto = _openAL.alGetEnumValue(\"AL_STORAGE_AUTOMATIC\");\n                StorageHardware = _openAL.alGetEnumValue(\"AL_STORAGE_HARDWARE\");\n                StorageAccessible = _openAL.alGetEnumValue(\"AL_STORAGE_ACCESSIBLE\");\n\n                if (RamSize == 0 || RamFree == 0 || StorageAuto == 0 || StorageHardware == 0 || StorageAccessible == 0)\n                {\n                    return;\n                }\n\n                try\n                {\n                    LoadEntryPoints();\n                }\n                catch (Exception)\n                {\n                    return;\n                }\n\n                IsInitialized = true;\n            }\n        }\n\n        private void LoadEntryPoints()\n        {\n            setBufferMode = InteropHelpers.GetDelegateForFunctionPointer<XRamExtension.SetBufferModeDelegate>(_openAL.alGetProcAddress(\"EAXSetBufferMode\"));\n        }\n\n        internal bool SetBufferMode(int n, ref int buffer, XRamStorage storage)\n        {\n            if (storage == XRamExtension.XRamStorage.Accessible)\n            {\n                return setBufferMode(n, ref buffer, StorageAccessible);\n            }\n            if (storage != XRamExtension.XRamStorage.Hardware)\n            {\n                return setBufferMode(n, ref buffer, StorageAuto);\n            }\n            return setBufferMode(n, ref buffer, StorageHardware);\n        }\n    }\n\n    internal class EffectsExtension\n    {\n        /* Effect API */\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alGenEffectsDelegate(int n, out int effect);\n        private alGenEffectsDelegate alGenEffects;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alDeleteEffectsDelegate(int n, ref int effect);\n        private alDeleteEffectsDelegate alDeleteEffects;\n\n        //[UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        //private delegate bool alIsEffectDelegate(int effect);\n        //private alIsEffectDelegate alIsEffect;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alEffectfDelegate(int effect, EfxEffectf param, float value);\n        private alEffectfDelegate alEffectf;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alEffectiDelegate(int effect, EfxEffecti param, int value);\n        private alEffectiDelegate alEffecti;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alGenAuxiliaryEffectSlotsDelegate(int n, out int effectslots);\n        private alGenAuxiliaryEffectSlotsDelegate alGenAuxiliaryEffectSlots;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alDeleteAuxiliaryEffectSlotsDelegate(int n, ref int effectslots);\n        private alDeleteAuxiliaryEffectSlotsDelegate alDeleteAuxiliaryEffectSlots;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alAuxiliaryEffectSlotiDelegate(int slot, EfxEffecti type, int effect);\n        private alAuxiliaryEffectSlotiDelegate alAuxiliaryEffectSloti;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alAuxiliaryEffectSlotfDelegate(int slot, EfxEffectSlotf param, float value);\n        private alAuxiliaryEffectSlotfDelegate alAuxiliaryEffectSlotf;\n\n        /* Filter API */\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private unsafe delegate void alGenFiltersDelegate(int n, [Out] int* pfilters);\n        private alGenFiltersDelegate alGenFilters;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alFilteriDelegate(int filter, EfxFilteri param, int value);\n        private alFilteriDelegate alFilteri;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate void alFilterfDelegate(int filter, EfxFilterf param, float value);\n        private alFilterfDelegate alFilterf;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private unsafe delegate void alDeleteFiltersDelegate(int n, [In] int* pfilters);\n        private alDeleteFiltersDelegate alDeleteFilters;\n\n\n        internal bool IsInitialized { get; private set; }\n        private AL _openAL;\n\n\n        public EffectsExtension(AL openAL)\n        {\n            _openAL = openAL;\n        }\n\n        internal void Initialize(IntPtr device)\n        {\n            IsInitialized = false;\n\n            if (_openAL.ALC.IsExtensionPresent(device, \"ALC_EXT_EFX\"))\n            {\n                LoadEntryPoints();\n                IsInitialized = true;\n            }\n        }\n\n        private void LoadEntryPoints()\n        {\n            alGenEffects = InteropHelpers.GetDelegateForFunctionPointer<alGenEffectsDelegate>(_openAL.alGetProcAddress(\"alGenEffects\"));\n            alDeleteEffects = InteropHelpers.GetDelegateForFunctionPointer<alDeleteEffectsDelegate>(_openAL.alGetProcAddress(\"alDeleteEffects\"));\n            alEffectf = InteropHelpers.GetDelegateForFunctionPointer<alEffectfDelegate>(_openAL.alGetProcAddress(\"alEffectf\"));\n            alEffecti = InteropHelpers.GetDelegateForFunctionPointer<alEffectiDelegate>(_openAL.alGetProcAddress(\"alEffecti\"));\n            alGenAuxiliaryEffectSlots = InteropHelpers.GetDelegateForFunctionPointer<alGenAuxiliaryEffectSlotsDelegate>(_openAL.alGetProcAddress(\"alGenAuxiliaryEffectSlots\"));\n            alDeleteAuxiliaryEffectSlots = InteropHelpers.GetDelegateForFunctionPointer<alDeleteAuxiliaryEffectSlotsDelegate>(_openAL.alGetProcAddress(\"alDeleteAuxiliaryEffectSlots\"));\n            alAuxiliaryEffectSloti = InteropHelpers.GetDelegateForFunctionPointer<alAuxiliaryEffectSlotiDelegate>(_openAL.alGetProcAddress(\"alAuxiliaryEffectSloti\"));\n            alAuxiliaryEffectSlotf = InteropHelpers.GetDelegateForFunctionPointer<alAuxiliaryEffectSlotfDelegate>(_openAL.alGetProcAddress(\"alAuxiliaryEffectSlotf\"));\n\n            alGenFilters = InteropHelpers.GetDelegateForFunctionPointer<alGenFiltersDelegate>(_openAL.alGetProcAddress(\"alGenFilters\"));\n            alFilteri = InteropHelpers.GetDelegateForFunctionPointer<alFilteriDelegate>(_openAL.alGetProcAddress(\"alFilteri\"));\n            alFilterf = InteropHelpers.GetDelegateForFunctionPointer<alFilterfDelegate>(_openAL.alGetProcAddress(\"alFilterf\"));\n            alDeleteFilters = InteropHelpers.GetDelegateForFunctionPointer<alDeleteFiltersDelegate>(_openAL.alGetProcAddress(\"alDeleteFilters\"));\n        }\n\n        /*\n            alEffecti(effect, EfxEffecti.FilterType, (int)EfxEffectType.Reverb);\n            ALHelper.CheckError(\"Failed to set Filter Type.\");\n        */\n\n        internal void GenAuxiliaryEffectSlots(int count, out int slot)\n        {\n            this.alGenAuxiliaryEffectSlots(count, out slot);\n            _openAL.CheckError(\"Failed to Genereate Aux slot\");\n        }\n\n        internal void GenEffect(out int effect)\n        {\n            this.alGenEffects(1, out effect);\n            _openAL.CheckError(\"Failed to Generate Effect.\");\n        }\n\n        internal void DeleteAuxiliaryEffectSlot(int slot)\n        {\n            alDeleteAuxiliaryEffectSlots(1, ref slot);\n        }\n\n        internal void DeleteEffect(int effect)\n        {\n            alDeleteEffects(1, ref effect);\n        }\n\n        internal void BindEffectToAuxiliarySlot(int slot, int effect)\n        {\n            alAuxiliaryEffectSloti(slot, EfxEffecti.SlotEffect, effect);\n            _openAL.CheckError(\"Failed to bind Effect\");\n        }\n\n        internal void AuxiliaryEffectSlot(int slot, EfxEffectSlotf param, float value)\n        {\n            alAuxiliaryEffectSlotf(slot, param, value);\n            _openAL.CheckError(\"Failes to set \" + param + \" \" + value);\n        }\n\n        internal void BindSourceToAuxiliarySlot(int source, int slot, int slotnumber, int filter)\n        {\n            _openAL.alSource3i(source, ALSourcei.EfxAuxilarySendFilter, slot, slotnumber, filter);\n        }\n\n        internal void Effect(int effect, EfxEffectf param, float value)\n        {\n            alEffectf(effect, param, value);\n            _openAL.CheckError(\"Failed to set \" + param + \" \" + value);\n        }\n\n        internal void Effect(int effect, EfxEffecti param, int value)\n        {\n            alEffecti(effect, param, value);\n            _openAL.CheckError(\"Failed to set \" + param + \" \" + value);\n        }\n\n        internal unsafe int GenFilter()\n        {\n            int filter = 0;\n            this.alGenFilters(1, &filter);\n            return filter;\n        }\n        internal void Filter(int filter, EfxFilteri param, int EfxFilterType)\n        {\n            this.alFilteri(filter, param, EfxFilterType);\n        }\n        internal void Filter(int filter, EfxFilterf param, float EfxFilterType)\n        {\n            this.alFilterf(filter, param, EfxFilterType);\n        }\n        internal void BindFilterToSource(int source, int filter)\n        {\n            _openAL.Source(source, ALSourcei.EfxDirectFilter, filter);\n        }\n        internal unsafe void DeleteFilter(int filter)\n        {\n            alDeleteFilters(1, &filter);\n        }\n    }\n\n    internal static class ALHelper\n    {\n        [System.Diagnostics.Conditional(\"DEBUG\")]\n        [System.Diagnostics.DebuggerHidden]\n        internal static void CheckError(this AL openAL, string message)\n        {\n            System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(message));\n\n            ALError error = openAL.GetError();\n            if (error != ALError.NoError)\n            {\n                throw new InvalidOperationException(message + \" (Reason: \" + AL.GetErrorString(error) + \")\");\n            }\n        }\n\n        [System.Diagnostics.Conditional(\"DEBUG\")]\n        [System.Diagnostics.DebuggerHidden]\n        internal static void CheckError(this AL openAL, string message, params object[] args)\n        {\n            System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(message));\n\n            ALError error = openAL.GetError();\n            if (error != ALError.NoError)\n            {\n                message = String.Format(message, args);\n                throw new InvalidOperationException(message + \" (Reason: \" + AL.GetErrorString(error) + \")\");\n            }\n        }\n\n        public static bool IsStereoFormat(ALFormat alFormat)\n        {\n            return (alFormat == ALFormat.Stereo8\n                ||  alFormat == ALFormat.Stereo16\n                ||  alFormat == ALFormat.StereoFloat32\n                ||  alFormat == ALFormat.StereoIma4\n                ||  alFormat == ALFormat.StereoMSAdpcm);\n        }\n    }\n\n    internal static class AlcHelper\n    {\n        [System.Diagnostics.Conditional(\"DEBUG\")]\n        [System.Diagnostics.DebuggerHidden]\n        internal static void CheckError(this Alc alc, string message)\n        {\n            System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(message));\n\n            AlcError error = alc.GetError();\n            if (error != AlcError.NoError)\n            {\n                throw new InvalidOperationException(message + \" (Reason: \" + error.ToString() + \")\");\n            }\n        }\n\n        [System.Diagnostics.Conditional(\"DEBUG\")]\n        [System.Diagnostics.DebuggerHidden]\n        internal static void CheckError(this Alc alc, string message, params object[] args)\n        {\n            System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(message));\n\n            AlcError error = alc.GetError();\n            if (error != AlcError.NoError)\n            {\n                message = String.Format(message, args);\n                throw new InvalidOperationException(message + \" (Reason: \" + error.ToString() + \")\");\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Audio/Ref/ConcreteAudioFactory.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteAudioFactory : AudioFactory\n    {\n        public override AudioServiceStrategy CreateAudioServiceStrategy()\n        {\n            return new ConcreteAudioService();\n        }\n\n        public override MicrophoneStrategy CreateMicrophoneStrategy()\n        {\n            return new ConcreteMicrophone();\n        }\n\n        public override SoundEffectStrategy CreateSoundEffectStrategy()\n        {\n            return new ConcreteSoundEffect();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Ref/ConcreteAudioService.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    internal class ConcreteAudioService : AudioServiceStrategy\n    {\n\n        internal ConcreteAudioService()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy sfxStrategy)\n        {\n            return new ConcreteSoundEffectInstance(this, sfxStrategy);\n        }\n\n        public override IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels)\n        {\n            return new ConcreteDynamicSoundEffectInstance(this, sampleRate, channels);\n        }\n\n        public override void PlatformPopulateCaptureDevices(List<Microphone> microphones, ref Microphone defaultMicrophone)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override int PlatformGetMaxPlayingInstances()\n        {\n            return int.MaxValue;\n        }\n\n        public override void PlatformSetReverbSettings(ReverbSettings reverbSettings)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/Ref/ConcreteDynamicSoundEffectInstance.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteDynamicSoundEffectInstance : ConcreteSoundEffectInstance\n        , IDynamicSoundEffectInstanceStrategy\n    {\n        private readonly WeakReference _dynamicSoundEffectInstanceRef = new WeakReference(null);\n        DynamicSoundEffectInstance IDynamicSoundEffectInstanceStrategy.DynamicSoundEffectInstance\n        {\n            get { return _dynamicSoundEffectInstanceRef.Target as DynamicSoundEffectInstance; }\n            set { _dynamicSoundEffectInstanceRef.Target = value; }\n        }\n\n        internal ConcreteDynamicSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, int sampleRate, int channels)\n            : base(audioServiceStrategy, null)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public int BuffersNeeded { get; set; }\n\n        public int DynamicPlatformGetPendingBufferCount()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformPause()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformPlay(bool isLooped)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformResume(bool isLooped)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformStop()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformRelease(bool isLooped)\n        {\n            System.Diagnostics.Debug.Assert(isLooped == false);\n\n            throw new PlatformNotSupportedException();\n        }\n\n        public void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public void DynamicPlatformUpdateBuffers()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public void DynamicPlatformClearBuffers()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Ref/ConcreteMicrophone.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    /// <summary>\n    /// Provides microphones capture features.\n    /// </summary>\n    public sealed class ConcreteMicrophone : MicrophoneStrategy\n    {\n\n        public override TimeSpan BufferDuration\n        {\n            get { return base.BufferDuration; }\n            set { base.BufferDuration = value; }\n        }\n\n        public override MicrophoneState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n\n        internal ConcreteMicrophone()\n            : base()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformStart(string deviceName)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformStop()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool PlatformIsHeadset()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool PlatformUpdate()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override int PlatformGetData(byte[] buffer, int offset, int count)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/Ref/ConcreteSoundEffect.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    class ConcreteSoundEffect : SoundEffectStrategy\n    {\n\n        #region Initialization\n\n        public override void PlatformLoadAudioStream(Stream stream, out TimeSpan duration)\n        {\n            duration = TimeSpan.Zero;\n\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        #endregion\n\n\n#region IDisposable Members\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n#endregion\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/Ref/ConcreteSoundEffectInstance.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing AudioListener = Microsoft.Xna.Framework.Audio.AudioListener;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public class ConcreteSoundEffectInstance : SoundEffectInstanceStrategy\n    {\n        public override bool IsXAct\n        {\n            get { return base.IsXAct; }\n            set { base.IsXAct = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override float Pan\n        {\n            get { return base.Pan; }\n            set\n            {\n                base.Pan = value;\n\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n        public override float Pitch\n        {\n            get { return base.Pitch; }\n            set\n            {\n                base.Pitch = value;\n\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n        #region Initialization\n\n        internal ConcreteSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy)\n            : base(audioServiceStrategy, sfxStrategy)\n        {\n            throw new PlatformNotSupportedException();\n\n        }\n\n        #endregion // Initialization\n\n        public override void PlatformApply3D(AudioListener listener, AudioEmitter emitter)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformPause()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformPlay(bool isLooped)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformResume(bool isLooped)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformStop()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformRelease(bool isLooped)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool PlatformUpdateState(ref SoundState state)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformSetIsLooped(bool isLooped, SoundState state)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformSetReverbMix(SoundState state, float mix, float pan)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformClearFilter()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/XAudio/ConcreteAudioFactory.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteAudioFactory : AudioFactory\n    {\n        public override AudioServiceStrategy CreateAudioServiceStrategy()\n        {\n            return new ConcreteAudioService();\n        }\n\n        public override MicrophoneStrategy CreateMicrophoneStrategy()\n        {\n            return new ConcreteMicrophone();\n        }\n\n        public override SoundEffectStrategy CreateSoundEffectStrategy()\n        {\n            return new ConcreteSoundEffect();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/XAudio/ConcreteAudioService.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\nusing SharpDX;\nusing SharpDX.XAudio2;\nusing SharpDX.Multimedia;\nusing SharpDX.X3DAudio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    internal class ConcreteAudioService : AudioServiceStrategy\n    {\n        internal XAudio2 Device { get; private set; }\n        internal MasteringVoice MasterVoice { get; private set; }\n\n        private X3DAudio _device3D;\n        private bool _device3DDirty = true;\n        private Speakers _speakers = Speakers.FrontLeft | Speakers.FrontRight; // Stereo\n\n\n        // XNA does not expose this, but it exists in X3DAudio.\n        // TODO: move to SoundEngine.\n        //[CLSCompliant(false)]\n        public Speakers Speakers\n        {\n            get { return _speakers; }\n\n            set\n            {\n                if (_speakers == value)\n                    return;\n\n                _speakers = value;\n                _device3DDirty = true;\n            }\n        }\n\n        internal X3DAudio Device3D\n        {\n            get\n            {\n                if (_device3DDirty)\n                {\n                    _device3DDirty = false;\n                    _device3D = new X3DAudio(_speakers);\n                }\n\n                return _device3D;\n            }\n        }\n\n        private SubmixVoice _reverbVoice;\n\n\n        internal ConcreteAudioService()\n        {\n            try\n            {\n                if (Device == null)\n                {\n#if WINDOWSDX\n                    AppDomain.CurrentDomain.ProcessExit += (sender, e) => { AudioService.Shutdown(); };\n#endif\n\n#if DEBUG && !(UAP || WINUI)\n                    try\n                    {\n                        //Fails if the XAudio2 SDK is not installed\n                        Device = new XAudio2(XAudio2Flags.DebugEngine, ProcessorSpecifier.DefaultProcessor);\n                        Device.StartEngine();\n                    }\n                    catch\n#endif\n                    {\n                        Device = new XAudio2(XAudio2Flags.None, ProcessorSpecifier.DefaultProcessor);\n                        Device.StartEngine();\n                    }\n                }\n\n                // Just use the default device.\n#if (UAP || WINUI)\n                string deviceId = null;\n#else\n                const int deviceId = 0;\n#endif\n\n                if (MasterVoice == null)\n                {\n                    // Let windows autodetect number of channels and sample rate.\n                    MasterVoice = new MasteringVoice(Device, XAudio2.DefaultChannels, XAudio2.DefaultSampleRate);\n                }\n\n                // The autodetected value of MasterVoice.ChannelMask corresponds to the speaker layout.\n#if (UAP || WINUI)\n                Speakers = (Speakers)MasterVoice.ChannelMask;\n#else\n                Speakers = Device.Version == XAudio2Version.Version27\n                    ? Device.GetDeviceDetails(deviceId).OutputFormat.ChannelMask\n                    : (Speakers)MasterVoice.ChannelMask;\n#endif\n            }\n            catch\n            {\n                // Release the device and null it as\n                // we have no audio support.\n                if (Device != null)\n                {\n                    Device.Dispose();\n                    Device = null;\n                }\n\n                MasterVoice = null;\n            }\n        }\n\n        public override SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy sfxStrategy)\n        {\n            return new ConcreteSoundEffectInstance(this, sfxStrategy);\n        }\n\n        public override IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels)\n        {\n            return new ConcreteDynamicSoundEffectInstance(this, sampleRate, channels);\n        }\n\n        public override void PlatformPopulateCaptureDevices(List<Microphone> microphones, ref Microphone defaultMicrophone)\n        {\n        }\n\n        internal SubmixVoice ReverbVoice\n        {\n            get\n            {\n                if (_reverbVoice == null)\n                {\n                    VoiceDetails details = MasterVoice.VoiceDetails;\n                    _reverbVoice = new SubmixVoice(Device, details.InputChannelCount, details.InputSampleRate);\n\n#if SHARPDX263\n                    var reverb = new SharpDX.XAudio2.Fx.Reverb();\n#else\n                    var reverb = new SharpDX.XAudio2.Fx.Reverb(Device);\n#endif\n                    EffectDescriptor desc = new EffectDescriptor(reverb);\n                    desc.InitialState = true;\n                    desc.OutputChannelCount = details.InputChannelCount;\n                    _reverbVoice.SetEffectChain(desc);\n                }\n\n                return _reverbVoice;\n            }\n        }\n\n        public override int PlatformGetMaxPlayingInstances()\n        {\n            // These platforms are only limited by memory.\n            return int.MaxValue;\n        }\n\n        public override void PlatformSetReverbSettings(ReverbSettings reverbSettings)\n        {\n             // All parameters related to sampling rate or time are relative to a 48kHz \n            // voice and must be scaled for use with other sampling rates.\n            float timeScale = 48000.0f / ReverbVoice.VoiceDetails.InputSampleRate;\n\n            var settings = new SharpDX.XAudio2.Fx.ReverbParameters\n            {\n                ReflectionsGain = reverbSettings.ReflectionsGainDb,\n                ReverbGain = reverbSettings.ReverbGainDb,\n                DecayTime = reverbSettings.DecayTimeSec,\n                ReflectionsDelay = (byte)(reverbSettings.ReflectionsDelayMs * timeScale),\n                ReverbDelay = (byte)(reverbSettings.ReverbDelayMs * timeScale),\n                RearDelay = (byte)(reverbSettings.RearDelayMs * timeScale),\n                RoomSize = reverbSettings.RoomSizeFeet,\n                Density = reverbSettings.DensityPct,\n                LowEQGain = (byte)reverbSettings.LowEqGain,\n                LowEQCutoff = (byte)reverbSettings.LowEqCutoff,\n                HighEQGain = (byte)reverbSettings.HighEqGain,\n                HighEQCutoff = (byte)reverbSettings.HighEqCutoff,\n                PositionLeft = (byte)reverbSettings.PositionLeft,\n                PositionRight = (byte)reverbSettings.PositionRight,\n                PositionMatrixLeft = (byte)reverbSettings.PositionLeftMatrix,\n                PositionMatrixRight = (byte)reverbSettings.PositionRightMatrix,\n                EarlyDiffusion = (byte)reverbSettings.EarlyDiffusion,\n                LateDiffusion = (byte)reverbSettings.LateDiffusion,\n                RoomFilterMain = reverbSettings.RoomFilterMainDb,\n                RoomFilterFreq = reverbSettings.RoomFilterFrequencyHz * timeScale,\n                RoomFilterHF = reverbSettings.RoomFilterHighFrequencyDb,\n                WetDryMix = reverbSettings.WetDryMixPct\n            };\n\n            ReverbVoice.SetEffectParameters(0, settings);\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_reverbVoice != null)\n                {\n                    _reverbVoice.DestroyVoice();\n                    _reverbVoice.Dispose();\n                    _reverbVoice = null;\n                }\n\n                if (MasterVoice != null)\n                {\n                    MasterVoice.Dispose();\n                    MasterVoice = null;\n                }\n\n                if (Device != null)\n                {\n                    Device.StopEngine();\n                    Device.Dispose();\n                    Device = null;\n                }\n            }\n\n            _device3DDirty = true;\n            _speakers = Speakers.FrontLeft | Speakers.FrontRight; // Stereo\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/XAudio/ConcreteDynamicSoundEffectInstance.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\nusing SharpDX;\nusing SharpDX.Multimedia;\nusing SharpDX.XAudio2;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed class ConcreteDynamicSoundEffectInstance : ConcreteSoundEffectInstance\n        , IDynamicSoundEffectInstanceStrategy\n    {\n\n        private static ByteBufferPool _bufferPool = new ByteBufferPool();\n\n        private int _sampleRate;\n        private int _channels;\n        private List<QueuedBuffer> _queuedBuffers = new List<QueuedBuffer>();\n        private int _uid;\n\n        private readonly WeakReference _dynamicSoundEffectInstanceRef = new WeakReference(null);\n        DynamicSoundEffectInstance IDynamicSoundEffectInstanceStrategy.DynamicSoundEffectInstance\n        {\n            get { return _dynamicSoundEffectInstanceRef.Target as DynamicSoundEffectInstance; }\n            set { _dynamicSoundEffectInstanceRef.Target = value; }\n        }\n\n        internal ConcreteDynamicSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, int sampleRate, int channels)\n            : base(audioServiceStrategy, null)\n        {\n            _sampleRate = sampleRate;\n            _channels = channels;\n            WaveFormat format = new WaveFormat(sampleRate, channels);\n\n            _voice = new SourceVoice(ConcreteAudioService.Device, format, true);\n            _voice.BufferEnd += OnBufferEnd;\n        }\n\n        public int BuffersNeeded { get; set; }\n\n        public int DynamicPlatformGetPendingBufferCount()\n        {\n            return _queuedBuffers.Count;\n        }\n\n        public override void PlatformPause()\n        {\n            _voice.Stop();\n        }\n\n        public override void PlatformPlay(bool isLooped)\n        {\n            _voice.Start();\n        }\n\n        public override void PlatformResume(bool isLooped)\n        {\n            _voice.Start();\n        }\n\n        public override void PlatformStop()\n        {\n            _voice.Stop();\n        }\n\n        public override void PlatformRelease(bool isLooped)\n        {\n            System.Diagnostics.Debug.Assert(isLooped == false);\n\n            // Dequeue all the submitted buffers\n            _voice.FlushSourceBuffers();\n\n        }\n\n        public void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state)\n        {\n            // we need to copy so datastream does not pin the buffer that the user might modify later\n            byte[] dataBuffer = _bufferPool.Get(count);\n            Buffer.BlockCopy(buffer, offset, dataBuffer, 0, count);\n\n            DataStream stream = DataStream.Create(dataBuffer, true, false, 0, true);\n            AudioBuffer audioBuffer = new AudioBuffer(stream);\n            audioBuffer.AudioBytes = count;\n            audioBuffer.Context = new IntPtr(unchecked(_uid++));\n\n            _voice.SubmitSourceBuffer(audioBuffer, null);\n\n            _queuedBuffers.Add(new QueuedBuffer(dataBuffer, audioBuffer));\n        }\n\n        public void DynamicPlatformUpdateBuffers()\n        {\n            // The XAudio implementation utilizes callbacks, so no work here.\n        }\n\n        public void DynamicPlatformClearBuffers()\n        {\n            // Dequeue all the submitted buffers\n            _voice.FlushSourceBuffers();\n\n            for (int i = _queuedBuffers.Count - 1; i >= 0; i--)\n            {\n                QueuedBuffer queuedBuffer = _queuedBuffers[i];\n                _queuedBuffers.RemoveAt(i);\n\n                queuedBuffer.AudioBuffer.Stream.Dispose();\n                _bufferPool.Return(queuedBuffer.DataBuffer);\n            }\n        }\n\n        private void OnBufferEnd(IntPtr context)\n        {\n            lock (AudioService.SyncHandle)\n            {\n                // Release the queued buffer\n                for (int i = 0; i < _queuedBuffers.Count; i++)\n                {\n                    if (_queuedBuffers[i].AudioBuffer.Context == context)\n                    {\n                        QueuedBuffer queuedBuffer = _queuedBuffers[i];\n                        _queuedBuffers.RemoveAt(i);\n\n                        queuedBuffer.AudioBuffer.Stream.Dispose();\n                        _bufferPool.Return(queuedBuffer.DataBuffer);\n                        break;\n                    }\n                }\n\n                // Raise the event\n                lock (AudioService.SyncHandle)\n                {\n                    this.BuffersNeeded++;\n                }\n            }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                for (int i = _queuedBuffers.Count - 1; i >= 0; i--)\n                {\n                    QueuedBuffer queuedBuffer = _queuedBuffers[i];\n                    _queuedBuffers.RemoveAt(i);\n\n                    queuedBuffer.AudioBuffer.Stream.Dispose();\n                    _bufferPool.Return(queuedBuffer.DataBuffer);\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n\n        struct QueuedBuffer\n        {\n            public byte[] DataBuffer;\n            public AudioBuffer AudioBuffer;\n\n            public QueuedBuffer(byte[] dataBuffer, AudioBuffer audioBuffer)\n            {\n                this.DataBuffer = dataBuffer;\n                this.AudioBuffer = audioBuffer;\n            }\n        }\n\n        class ByteBufferPool\n        {\n            private const int _minBufferSize = 0;\n            private const int _maxBuffers = int.MaxValue;\n\n            private readonly List<byte[]> _bufferPool = new List<byte[]>();\n\n            public ByteBufferPool()\n            {\n            }\n\n            /// <summary>\n            /// Get a buffer that is at least as big as size.\n            /// </summary>\n            public byte[] Get(int size)\n            {\n                if (size < _minBufferSize)\n                    size = _minBufferSize;\n\n                lock (_bufferPool)\n                {\n                    int index = FirstLargerThan(size);\n\n                    if (index == -1)\n                    {\n                        if (_bufferPool.Count > 0)\n                            _bufferPool.RemoveAt(_bufferPool.Count - 1);\n\n#if NET8_0_OR_GREATER\n                        return GC.AllocateUninitializedArray<byte>(size);\n#else\n                        return new byte[size];\n#endif\n                    }\n                    else\n                    {\n                        byte[] result = _bufferPool[index];\n                        _bufferPool.RemoveAt(index);\n                        return result;\n                    }\n                }\n            }\n\n            /// <summary>\n            /// Return the given buffer to the pool.\n            /// </summary>\n            public void Return(byte[] buffer)\n            {\n                lock (_bufferPool)\n                {\n                    if (_bufferPool.Count >= _maxBuffers)\n                        return;\n                    int index = FirstLargerThan(buffer.Length);\n                    if (index == -1)\n                        _bufferPool.Add(buffer);\n                    else\n                        _bufferPool.Insert(index, buffer);\n                }\n            }\n\n            // Find the smallest buffer that is larger than or equally large as size or -1 if none exist\n            private int FirstLargerThan(int size)\n            {\n                if (_bufferPool.Count == 0) return -1;\n\n                int l = 0;\n                int r = _bufferPool.Count - 1;\n\n                while (l <= r)\n                {\n                    int m = (l + r) / 2;\n                    byte[] buffer = _bufferPool[m];\n                    if (buffer.Length < size)\n                    {\n                        l = m + 1;\n                    }\n                    else if (buffer.Length > size)\n                    {\n                        r = m;\n                        if (l == r) return l;\n                    }\n                    else\n                    {\n                        return m;\n                    }\n                }\n\n                return -1;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/XAudio/ConcreteMicrophone.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    /// <summary>\n    /// Provides microphones capture features.\n    /// </summary>\n    public sealed class ConcreteMicrophone : MicrophoneStrategy\n    {\n\n        public override TimeSpan BufferDuration\n        {\n            get { return base.BufferDuration; }\n            set { base.BufferDuration = value; }\n        }\n\n        public override MicrophoneState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n\n        internal ConcreteMicrophone()\n            : base()\n        {\n        }\n\n        public override void PlatformStart(string deviceName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformStop()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override bool PlatformIsHeadset()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override bool PlatformUpdate()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override int PlatformGetData(byte[] buffer, int offset, int count)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Audio/XAudio/ConcreteSoundEffect.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Platform.Audio.Utilities;\nusing SharpDX;\nusing SharpDX.XAudio2;\nusing SharpDX.Multimedia;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    class ConcreteSoundEffect : SoundEffectStrategy\n    {\n        private DataStream _dataStream;\n        private AudioBuffer _buffer;\n        private AudioBuffer _loopedBuffer;\n        internal WaveFormat _format;\n\n        #region Initialization\n\n        public override void PlatformLoadAudioStream(Stream stream, out TimeSpan duration)\n        {\n            SoundStream soundStream = null;\n            try\n            {\n                soundStream = new SoundStream(stream);\n            }\n            catch (InvalidOperationException ex)\n            {\n                throw new ArgumentException(\"Ensure that the specified stream contains valid PCM or IEEE Float wave data.\", ex);\n            }\n\n            DataStream dataStream = soundStream.ToDataStream();\n            int sampleCount = 0;\n            switch (soundStream.Format.Encoding)\n            {\n                case WaveFormatEncoding.Adpcm:\n                    {\n                        int samplesPerBlock = (soundStream.Format.BlockAlign / soundStream.Format.Channels - 7) * 2 + 2;\n                        sampleCount = ((int)dataStream.Length / soundStream.Format.BlockAlign) * samplesPerBlock;\n                    }\n                    break;\n                case WaveFormatEncoding.Pcm:\n                case WaveFormatEncoding.IeeeFloat:\n                    sampleCount = (int)(dataStream.Length / ((soundStream.Format.Channels * soundStream.Format.BitsPerSample) / 8));\n                    break;\n                default:\n                    throw new ArgumentException(\"Ensure that the specified stream contains valid PCM, MS-ADPCM or IEEE Float wave data.\");\n            }\n\n            duration = TimeSpan.FromSeconds((float)sampleCount / (float)soundStream.Format.SampleRate);\n\n            CreateBuffers(soundStream.Format, dataStream, 0, sampleCount);\n        }\n\n        public override void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength)\n        {\n            short format = BitConverter.ToInt16(header, 0);\n            short channels = BitConverter.ToInt16(header, 2);\n            int sampleRate = BitConverter.ToInt32(header, 4);\n            short blockAlignment = BitConverter.ToInt16(header, 12);\n            short bitsPerSample = BitConverter.ToInt16(header, 14);\n\n            WaveFormat waveFormat;\n            switch (format)\n            {\n                case 1:\n                    {\n                        waveFormat = new WaveFormat(sampleRate, bitsPerSample, channels);\n                    }\n                    break;\n                case 2:\n                    if (blockAlignment == 1024)\n                    {\n                        // If MS-ADPCM is not supported, convert to 16-bit signed PCM\n                        buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, index, count, channels, blockAlignment);\n                        index = 0;\n                        count = buffer.Length;\n\n                        format = 1;\n                        bitsPerSample = 16;\n                        waveFormat = new WaveFormat(sampleRate, bitsPerSample, channels);\n                    }\n                    else\n                    {\n                        waveFormat = new WaveFormatAdpcm(sampleRate, channels, blockAlignment);\n                    }\n                    break;\n                case 3:\n                    {\n                        waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels);\n                    }\n                    break;\n\n                default:\n                    throw new NotSupportedException(\"Unsupported wave format!\");\n            }\n\n            // We make a copy because old versions of \n            // DataStream.Create(...) didn't work correctly for offsets.\n            byte[] bufferCopy = new byte[count];\n            Buffer.BlockCopy(buffer, index, bufferCopy, 0, count);\n\n            DataStream dataStream = DataStream.Create(bufferCopy, true, false);\n\n            CreateBuffers(  waveFormat,\n                            dataStream,\n                            loopStart,\n                            loopLength);\n        }\n\n        public override void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength)\n        {\n            WaveFormat waveFormat = new WaveFormat(sampleRate, sampleBits, channels);\n\n            // We make a copy because old versions of \n            // DataStream.Create(...) didn't work correctly for offsets.\n            byte[] bufferCopy = new byte[count];\n            Buffer.BlockCopy(buffer, index, bufferCopy, 0, count);\n\n            DataStream dataStream = DataStream.Create(bufferCopy, true, false);\n\n            CreateBuffers(  waveFormat,\n                            dataStream,\n                            loopStart,\n                            loopLength);\n        }\n\n        public override void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength)\n        {\n            WaveFormat waveFormat = new WaveFormatAdpcm(sampleRate, channels, (blockAlignment + 22) * channels);\n\n            // We make a copy because old versions of \n            // DataStream.Create(...) didn't work correctly for offsets.\n            byte[] bufferCopy = new byte[count];\n            Buffer.BlockCopy(buffer, index, bufferCopy, 0, count);\n\n            DataStream dataStream = DataStream.Create(bufferCopy, true, false);\n\n            CreateBuffers(  waveFormat,\n                            dataStream,\n                            loopStart,\n                            loopLength);\n        }\n\n        private void CreateBuffers(WaveFormat format, DataStream dataStream, int loopStart, int loopLength)\n        {\n            _format = format;\n            _dataStream = dataStream;\n\n            _buffer = new AudioBuffer\n            {\n                Stream = _dataStream,\n                AudioBytes = (int)_dataStream.Length,\n                Flags = BufferFlags.EndOfStream,\n                PlayBegin = loopStart,\n                PlayLength = loopLength,\n                Context = new IntPtr(42),\n            };\n\n            _loopedBuffer = new AudioBuffer\n            {\n                Stream = _dataStream,\n                AudioBytes = (int)_dataStream.Length,\n                Flags = BufferFlags.EndOfStream,\n                LoopBegin = loopStart,\n                LoopLength = loopLength,\n                LoopCount = AudioBuffer.LoopInfinite,\n                Context = new IntPtr(42),\n            };\n        }\n\n        #endregion\n\n        internal AudioBuffer GetDXDataBuffer(bool isLooped)\n        {\n            return isLooped\n                ? _loopedBuffer\n                : _buffer;\n        }\n\n#region IDisposable Members\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_dataStream != null)\n                {\n                    _dataStream.Dispose();\n                    _dataStream = null;\n                }\n\n            }\n        }\n\n#endregion\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Audio/XAudio/ConcreteSoundEffectInstance.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing SharpDX.XAudio2;\nusing SharpDX.X3DAudio;\nusing SharpDX.Mathematics.Interop;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public class ConcreteSoundEffectInstance : SoundEffectInstanceStrategy\n    {\n        private AudioServiceStrategy _audioServiceStrategy;\n        private ConcreteSoundEffect _concreteSoundEffect;\n        internal ConcreteAudioService ConcreteAudioService { get { return (ConcreteAudioService)_audioServiceStrategy; } }\n\n        protected SourceVoice _voice;\n        private SharpDX.XAudio2.Fx.Reverb _reverb;\n        private float _reverbMix;\n\n        private static float[] _defaultChannelAzimuths = new float[] { 0f, 0f };\n        private static readonly float[] _outputMatrix = new float[16];\n\n        public override bool IsXAct\n        {\n            get { return base.IsXAct; }\n            set { base.IsXAct = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override float Pan\n        {\n            get { return base.Pan; }\n            set\n            {\n                base.Pan = value;\n\n                if (_voice != null && ConcreteAudioService.MasterVoice != null)\n                {\n                    UpdateOutputMatrix(value);\n                }\n            }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n\n\n                if (_voice != null && ConcreteAudioService.MasterVoice != null)\n                {\n                    // XAct sound effects are not tied to the SoundEffect master volume.\n                    float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f;\n                    _voice.SetVolume(value * masterVolume, XAudio2.CommitNow);\n                }\n            }\n        }\n\n        public override float Pitch\n        {\n            get { return base.Pitch; }\n            set\n            {\n                base.Pitch = value;\n\n                if (_voice != null && ConcreteAudioService.MasterVoice != null)\n                {\n                    // NOTE: This is copy of what XAudio2.SemitonesToFrequencyRatio() does\n                    // which avoids the native call and is actually more accurate.\n                    float xapitch = (float)Math.Pow(2.0, value);\n                    _voice.SetFrequencyRatio(xapitch);\n                }\n            }\n        }\n\n        #region Initialization\n\n        internal ConcreteSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy)\n            : base(audioServiceStrategy, sfxStrategy)\n        {\n            _audioServiceStrategy = audioServiceStrategy;\n            _concreteSoundEffect = (ConcreteSoundEffect)sfxStrategy;\n\n            if (_concreteSoundEffect!=null)\n            {\n                _voice = new SourceVoice(ConcreteAudioService.Device, _concreteSoundEffect._format, VoiceFlags.UseFilter, XAudio2.MaximumFrequencyRatio);\n                UpdateOutputMatrix(0); // Ensure the output matrix is set for this new voice\n            }\n\n            this.Volume = 1.0f;\n            this.Pan = 0.0f;\n            this.Pitch = 0.0f;\n        }\n\n        #endregion // Initialization\n\n        public override void PlatformApply3D(AudioListener listener, AudioEmitter emitter)\n        {\n            // If we have no voice then nothing to do.\n            if (_voice == null || ConcreteAudioService.MasterVoice == null)\n                return;\n\n            // Convert from XNA Emitter to a SharpDX Emitter\n            Emitter e = ToDXEmitter(emitter);\n            e.CurveDistanceScaler = SoundEffect.DistanceScale;\n            e.DopplerScaler = SoundEffect.DopplerScale;\n            e.ChannelCount = _concreteSoundEffect._format.Channels;\n\n            //stereo channel\n            if (e.ChannelCount > 1)\n            {\n                e.ChannelRadius = 0;\n                e.ChannelAzimuths = _defaultChannelAzimuths;\n            }\n\n            // Convert from XNA Listener to a SharpDX Listener\n            Listener l = ToDXListener(listener);\n\n            // Number of channels in the sound being played.\n            // Not actually sure if XNA supported 3D attenuation of sterio sounds, but X3DAudio does.\n            int srcChannelCount = _concreteSoundEffect._format.Channels;\n\n            // Number of output channels.\n            int dstChannelCount = ConcreteAudioService.MasterVoice.VoiceDetails.InputChannelCount;\n\n            // XNA supports distance attenuation and doppler.            \n            DspSettings dpsSettings = ConcreteAudioService.Device3D.Calculate(l, e, CalculateFlags.Matrix | CalculateFlags.Doppler, srcChannelCount, dstChannelCount);\n\n            // Apply Volume settings (from distance attenuation) ...\n            _voice.SetOutputMatrix(ConcreteAudioService.MasterVoice, srcChannelCount, dstChannelCount, dpsSettings.MatrixCoefficients, 0);\n\n            // Apply Pitch settings (from doppler) ...\n            _voice.SetFrequencyRatio(dpsSettings.DopplerFactor);\n        }\n\n        private Emitter _dxEmitter;\n        private Listener _dxListener;\n\n        private Emitter ToDXEmitter(AudioEmitter emitter)\n        {\n            // Pulling out Vector properties for efficiency.\n            Vector3 pos = emitter.Position;\n            Vector3 vel = emitter.Velocity;\n            Vector3 forward = emitter.Forward;\n            Vector3 up = emitter.Up;\n\n            // From MSDN:\n            //  X3DAudio uses a left-handed Cartesian coordinate system, \n            //  with values on the x-axis increasing from left to right, on the y-axis from bottom to top, \n            //  and on the z-axis from near to far. \n            //  Azimuths are measured clockwise from a given reference direction. \n            //\n            // From MSDN:\n            //  The XNA Framework uses a right-handed coordinate system, \n            //  with the positive z-axis pointing toward the observer when the positive x-axis is pointing to the right, \n            //  and the positive y-axis is pointing up. \n            //\n            // Programmer Notes:         \n            //  According to this description the z-axis (forward vector) is inverted between these two coordinate systems.\n            //  Therefore, we need to negate the z component of any position/directions/velocity values.\n\n            forward.Z *= -1.0f;\n            up.Z *= -1.0f;\n            pos.Z *= -1.0f;\n            vel.Z *= -1.0f;\n\n            if (_dxEmitter == null)\n                _dxEmitter = new Emitter();\n\n            _dxEmitter.Position = new RawVector3(pos.X, pos.Y, pos.Z);\n            _dxEmitter.Velocity = new RawVector3(vel.X, vel.Y, vel.Z);\n            _dxEmitter.OrientFront = new RawVector3(forward.X, forward.Y, forward.Z);\n            _dxEmitter.OrientTop = new RawVector3(up.X, up.Y, up.Z);\n            _dxEmitter.DopplerScaler = emitter.DopplerScale;\n            return _dxEmitter;\n        }\n\n        private Listener ToDXListener(AudioListener listener)\n        {\n            // Pulling out Vector properties for efficiency.\n            Vector3 pos = listener.Position;\n            Vector3 vel = listener.Velocity;\n            Vector3 forward = listener.Forward;\n            Vector3 up = listener.Up;\n\n            // From MSDN:\n            //  X3DAudio uses a left-handed Cartesian coordinate system, \n            //  with values on the x-axis increasing from left to right, on the y-axis from bottom to top, \n            //  and on the z-axis from near to far. \n            //  Azimuths are measured clockwise from a given reference direction. \n            //\n            // From MSDN:\n            //  The XNA Framework uses a right-handed coordinate system, \n            //  with the positive z-axis pointing toward the observer when the positive x-axis is pointing to the right, \n            //  and the positive y-axis is pointing up. \n            //\n            // Programmer Notes:         \n            //  According to this description the z-axis (forward vector) is inverted between these two coordinate systems.\n            //  Therefore, we need to negate the z component of any position/directions/velocity values.\n\n            forward.Z *= -1.0f;\n            up.Z *= -1.0f;\n            pos.Z *= -1.0f;\n            vel.Z *= -1.0f;\n\n            if (_dxListener == null)\n                _dxListener = new Listener();\n\n            _dxListener.Position = new RawVector3 { X = pos.X, Y = pos.Y, Z = pos.Z };\n            _dxListener.Velocity = new RawVector3 { X = vel.X, Y = vel.Y, Z = vel.Z };\n            _dxListener.OrientFront = new RawVector3 { X = forward.X, Y = forward.Y, Z = forward.Z };\n            _dxListener.OrientTop = new RawVector3 { X = up.X, Y = up.Y, Z = up.Z };\n            return _dxListener;\n        }\n\n        public override void PlatformPause()\n        {\n            _voice.Stop();\n        }\n\n        public override void PlatformPlay(bool isLooped)\n        {\n            // Choose the correct buffer depending on if we are looped.\n            AudioBuffer buffer = _concreteSoundEffect.GetDXDataBuffer(isLooped);\n\n            if (_voice.State.BuffersQueued > 0)\n            {\n                _voice.Stop();\n                _voice.FlushSourceBuffers();\n            }\n\n            _voice.SubmitSourceBuffer(buffer, null);\n            _voice.Start();\n        }\n\n        public override void PlatformResume(bool isLooped)\n        {\n            // Restart the sound if (and only if) it stopped playing\n            if (!isLooped)\n            {\n                if (_voice.State.BuffersQueued == 0)\n                {\n                    _voice.Stop();\n                    _voice.FlushSourceBuffers();\n                    AudioBuffer buffer = _concreteSoundEffect.GetDXDataBuffer(false);\n                    _voice.SubmitSourceBuffer(buffer, null);\n                }\n            }\n            _voice.Start();\n        }\n\n        public override void PlatformStop()\n        {\n            _voice.Stop();\n            _voice.FlushSourceBuffers();\n        }\n\n        public override void PlatformRelease(bool isLooped)\n        {\n            if (isLooped)\n                _voice.ExitLoop();\n            else\n                _voice.Stop((int)PlayFlags.Tails);\n        }\n\n        public override bool PlatformUpdateState(ref SoundState state)\n        {\n            // check if the sound has stopped\n            if (state == SoundState.Playing)\n            {\n                // If no voice or no buffers queued the sound is stopped.\n                if (ConcreteAudioService.MasterVoice == null || _voice.State.BuffersQueued == 0)\n                {\n                    // update instance\n                    state = SoundState.Stopped;\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        public override void PlatformSetIsLooped(bool isLooped, SoundState state)\n        {\n            if (state == SoundState.Playing)\n            {\n                if (isLooped)\n                {\n                    // enable loop while sound is playing\n                    AudioBuffer loopedBuffer = _concreteSoundEffect.GetDXDataBuffer(true);\n                    _voice.SubmitSourceBuffer(loopedBuffer, null);\n                }\n                else\n                {\n                    // release loop while sound is playing\n                    _voice.ExitLoop();\n                }\n            }\n        }\n\n        private void UpdateOutputMatrix(float pan)\n        {\n            int srcChannelCount = _voice.VoiceDetails.InputChannelCount;\n            int dstChannelCount = ConcreteAudioService.MasterVoice.VoiceDetails.InputChannelCount;\n\n            // Set the pan on the correct channels based on the reverb mix.\n            if (!(_reverbMix > 0.0f))\n                _voice.SetOutputMatrix(srcChannelCount, dstChannelCount, CalculateOutputMatrix(pan, 1.0f, srcChannelCount));\n            else\n            {\n                _voice.SetOutputMatrix(ConcreteAudioService.ReverbVoice, srcChannelCount, dstChannelCount, CalculateOutputMatrix(pan, _reverbMix, srcChannelCount));\n                _voice.SetOutputMatrix(ConcreteAudioService.MasterVoice, srcChannelCount, dstChannelCount, CalculateOutputMatrix(pan, 1.0f - Math.Min(_reverbMix, 1.0f), srcChannelCount));\n            }\n        }\n\n        internal static float[] CalculateOutputMatrix(float pan, float scale, int inputChannels)\n        {\n            // XNA only ever outputs to the front left/right speakers (channels 0 and 1)\n            // Assumes there are at least 2 speaker channels to output to\n\n            // Clear all the channels.\n            float[] outputMatrix = _outputMatrix;\n            Array.Clear(outputMatrix, 0, outputMatrix.Length);\n\n            if (inputChannels == 1) // Mono source\n            {\n                // Left/Right output levels:\n                //   Pan -1.0: L = 1.0, R = 0.0\n                //   Pan  0.0: L = 1.0, R = 1.0\n                //   Pan +1.0: L = 0.0, R = 1.0\n                outputMatrix[0] = (pan > 0f) ? ((1f - pan) * scale) : scale; // Front-left output\n                outputMatrix[1] = (pan < 0f) ? ((1f + pan) * scale) : scale; // Front-right output\n            }\n            else if (inputChannels == 2) // Stereo source\n            {\n                // Left/Right input (Li/Ri) mix for Left/Right outputs (Lo/Ro):\n                //   Pan -1.0: Lo = 0.5Li + 0.5Ri, Ro = 0.0Li + 0.0Ri\n                //   Pan  0.0: Lo = 1.0Li + 0.0Ri, Ro = 0.0Li + 1.0Ri\n                //   Pan +1.0: Lo = 0.0Li + 0.0Ri, Ro = 0.5Li + 0.5Ri\n                if (pan <= 0f)\n                {\n                    outputMatrix[0] = (1f + pan * 0.5f) * scale; // Front-left output, Left input\n                    outputMatrix[1] = (-pan * 0.5f) * scale; // Front-left output, Right input\n                    outputMatrix[2] = 0f; // Front-right output, Left input\n                    outputMatrix[3] = (1f + pan) * scale; // Front-right output, Right input\n                }\n                else\n                {\n                    outputMatrix[0] = (1f - pan) * scale; // Front-left output, Left input\n                    outputMatrix[1] = 0f; // Front-left output, Right input\n                    outputMatrix[2] = (pan * 0.5f) * scale; // Front-right output, Left input\n                    outputMatrix[3] = (1f - pan * 0.5f) * scale; // Front-right output, Right input\n                }\n            }\n\n            return outputMatrix;\n        }\n\n        public override void PlatformSetReverbMix(SoundState state, float mix, float pan)\n        {\n            // At least for XACT we can't go over 2x the volume on the mix.\n            _reverbMix = MathHelper.Clamp(mix, 0, 2);\n\n            // If we have no voice then nothing more to do.\n            if (_voice == null || ConcreteAudioService.MasterVoice == null)\n                return;\n\n            if (!(_reverbMix > 0.0f))\n                _voice.SetOutputVoices(new VoiceSendDescriptor(ConcreteAudioService.MasterVoice));\n            else\n            {\n                _voice.SetOutputVoices(new VoiceSendDescriptor(ConcreteAudioService.ReverbVoice),\n                                        new VoiceSendDescriptor(ConcreteAudioService.MasterVoice));\n            }\n\n            UpdateOutputMatrix(pan);\n        }\n\n        public override void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency)\n        {\n            if (_voice == null || ConcreteAudioService.MasterVoice == null)\n                return;\n\n            FilterParameters filter = new FilterParameters\n            {\n                Frequency = XAudio2.CutoffFrequencyToRadians(frequency, _voice.VoiceDetails.InputSampleRate),\n                OneOverQ = 1.0f / filterQ,\n                Type = (FilterType)mode\n            };\n            _voice.SetFilterParameters(filter);\n        }\n\n        public override void PlatformClearFilter()\n        {\n            if (_voice == null || ConcreteAudioService.MasterVoice == null)\n                return;\n\n            FilterParameters filter = new FilterParameters { Frequency = 1.0f, OneOverQ = 1.0f, Type = FilterType.LowPassFilter };\n            _voice.SetFilterParameters(filter);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_reverb != null)\n                {\n                    _reverb.Dispose();\n                    _reverb = null;\n                }\n\n                if (ConcreteAudioService.MasterVoice != null)\n                {\n                    _voice.DestroyVoice(); // TODO: _voice.Dispose() should also destroy voice\n                    _voice.Dispose();\n                    _voice = null;\n                }\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Content/.Android/ConcreteTitleContainer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteTitleContainer : TitleContainerStrategy\n    {\n        private TitlePlatform _platform = TitlePlatform.Android;\n\n        public override string Location { get { return string.Empty; } }\n\n        public override TitlePlatform Platform { get { return _platform; } }\n\n        public ConcreteTitleContainer() : base()\n        {\n        }\n\n        public override Stream PlatformOpenStream(string name)\n        {\n            Stream stream = Android.App.Application.Context.Assets.Open(name, Android.Content.Res.Access.Random);\n\n            // This results in a ~50% reduction in load times on Android due to slow Android asset streams.\n            stream = new BufferedStream(stream);\n\n            return stream;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Content/.Android/ConcreteTitleContainerFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteTitleContainerFactory : TitleContainerFactory\n    {\n        public override TitleContainerStrategy CreateTitleContainerStrategy()\n        {\n            return new ConcreteTitleContainer();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Content/.Blazor/ConcreteTitleContainer.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing nkast.Wasm.XHR;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteTitleContainer : TitleContainerStrategy\n    {\n        private TitlePlatform _platform = TitlePlatform.BlazorWASM;\n\n        public override string Location { get { return string.Empty; } }\n\n        public override TitlePlatform Platform { get { return _platform; } }\n\n        public ConcreteTitleContainer() : base()\n        {\n        }\n\n        public override Stream PlatformOpenStream(string name)\n        {\n            XMLHttpRequest request = new XMLHttpRequest();\n\n            request.Open(\"GET\", name, false);\n            request.OverrideMimeType(\"text/plain; charset=x-user-defined\");\n            request.Send();\n\n            if (request.Status == 200)\n            {\n                string responseText = request.ResponseText;\n\n                byte[] buffer = new byte[responseText.Length];\n                for (int i = 0; i < responseText.Length; i++)\n                    buffer[i] = (byte)(responseText[i] & 0xff);\n\n                Stream ms = new MemoryStream(buffer);\n\n                return ms;\n            }\n            else\n            {\n                throw new IOException(\"HTTP request failed. Status:\" + request.Status);\n            }\n        }\n\n        public override Stream DecompressBrotliStream(Stream stream, uint compressedDataSize, uint decompressedDataSize)\n        {\n            try\n            {\n                Stream decompressedStream = base.DecompressBrotliStream(stream, compressedDataSize, decompressedDataSize);\n                return decompressedStream;\n            }\n            catch (PlatformNotSupportedException e)\n            {\n                byte[] compressedBuffer = new byte[compressedDataSize];\n                stream.Read(compressedBuffer);\n\n                byte[] decompressedBuffer = new byte[decompressedDataSize];\n\n                var xhr = new nkast.Wasm.XHR.XMLHttpRequest();\n                xhr.DecompressBrotliStream(\n                    compressedBuffer, compressedDataSize,\n                    decompressedBuffer, decompressedDataSize);\n\n                Stream decompressedStream = new MemoryStream(decompressedBuffer);\n                return decompressedStream;\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Content/.Blazor/ConcreteTitleContainerFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteTitleContainerFactory : TitleContainerFactory\n    {\n        public override TitleContainerStrategy CreateTitleContainerStrategy()\n        {\n            return new ConcreteTitleContainer();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Content/.Ref/ConcreteTitleContainer.cs",
    "content": "// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteTitleContainer : TitleContainerStrategy\n    {\n        public override string Location { get { throw new PlatformNotSupportedException(); } }\n\n        public override TitlePlatform Platform { get { throw new PlatformNotSupportedException(); } }\n\n        public ConcreteTitleContainer() : base()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override Stream PlatformOpenStream(string name)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Content/.Ref/ConcreteTitleContainerFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteTitleContainerFactory : TitleContainerFactory\n    {\n        public override TitleContainerStrategy CreateTitleContainerStrategy()\n        {\n            return new ConcreteTitleContainer();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Content/.SDL2/ConcreteTitleContainer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteTitleContainer : TitleContainerStrategy\n    {\n        private string _location = string.Empty;\n\n        private TitlePlatform _platform = TitlePlatform.SDL;\n\n        public override string Location { get { return _location; } }\n\n        public override TitlePlatform Platform { get { return _platform; } }\n\n        public ConcreteTitleContainer() : base()\n        {\n            // Check for the package Resources Folder first. This is where the assets\n            // will be bundled.\n            if (CurrentPlatform.OS == OS.MacOSX)\n                _location = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"..\", \"Resources\");\n            if (!Directory.Exists(_location))\n                _location = AppDomain.CurrentDomain.BaseDirectory;\n        }\n\n        public override Stream PlatformOpenStream(string name)\n        {\n            string absolutePath = Path.Combine(_location, name);\n\n            return File.OpenRead(absolutePath);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Content/.SDL2/ConcreteTitleContainerFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteTitleContainerFactory : TitleContainerFactory\n    {\n        public override TitleContainerStrategy CreateTitleContainerStrategy()\n        {\n            return new ConcreteTitleContainer();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Content/.UAP/ConcreteTitleContainer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteTitleContainer : TitleContainerStrategy\n    {\n        private string _location = string.Empty;\n\n        private TitlePlatform _platform = TitlePlatform.UAP;\n\n        public override string Location { get { return _location; } }\n\n        public override TitlePlatform Platform { get { return _platform; } }\n\n        public ConcreteTitleContainer() : base()\n        {\n            _location = Windows.ApplicationModel.Package.Current.InstalledLocation.Path;\n        }\n\n        public override Stream PlatformOpenStream(string name)\n        {\n            return Task.Run(() => PlatformOpenStreamAsync(name).Result).Result;\n        }\n\n        private async Task<Stream> PlatformOpenStreamAsync(string name)\n        {\n            try\n            {\n                Windows.Storage.StorageFile file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri(\"ms-appx:///\" + name));\n                var randomAccessStream = await file.OpenReadAsync();\n                return randomAccessStream.AsStreamForRead();\n            }\n            catch (IOException)\n            {\n                // The file must not exist... return a null stream.\n                return null;\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Content/.UAP/ConcreteTitleContainerFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteTitleContainerFactory : TitleContainerFactory\n    {\n        public override TitleContainerStrategy CreateTitleContainerStrategy()\n        {\n            return new ConcreteTitleContainer();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Content/.WindowsDX11/ConcreteTitleContainer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteTitleContainer : TitleContainerStrategy\n    {\n        private string _location = string.Empty;\n\n        private TitlePlatform _platform = TitlePlatform.Windows;\n\n        public override string Location { get { return _location; } }\n\n        public override TitlePlatform Platform { get { return _platform; } }\n\n        public ConcreteTitleContainer() : base()\n        {\n            _location = AppDomain.CurrentDomain.BaseDirectory;\n        }\n\n        public override Stream PlatformOpenStream(string name)\n        {\n            string absolutePath = Path.Combine(_location, name);\n\n            return File.OpenRead(absolutePath);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Content/.WindowsDX11/ConcreteTitleContainerFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteTitleContainerFactory : TitleContainerFactory\n    {\n        public override TitleContainerStrategy CreateTitleContainerStrategy()\n        {\n            return new ConcreteTitleContainer();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Content/.iOS/ConcreteTitleContainer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Foundation;\nusing Microsoft.Xna.Framework;\nusing UIKit;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteTitleContainer : TitleContainerStrategy\n    {\n        private string _location = string.Empty;\n\n        private TitlePlatform _platform = TitlePlatform.iOS;\n\n        public override string Location { get { return _location; } }\n\n        public override TitlePlatform Platform { get { return _platform; } }\n\n        private bool _supportRetina;\n        private int _retinaScale;\n\n        public ConcreteTitleContainer() : base()\n        {\n            _location = NSBundle.MainBundle.ResourcePath;\n\n            _supportRetina = UIScreen.MainScreen.Scale >= 2.0f;\n            _retinaScale = (int)Math.Round(UIScreen.MainScreen.Scale);\n        }\n\n        public override Stream PlatformOpenStream(string name)\n        {\n            string absolutePath = Path.Combine(_location, name);\n\n            if (_supportRetina)\n            {\n                for (int scale = _retinaScale; scale >= 2; scale--)\n                {\n                    // Insert the @#x immediately prior to the extension. If this file exists\n                    // and we are on a Retina device, return this file instead.\n                    string absolutePathX = Path.Combine(Path.GetDirectoryName(absolutePath),\n                                                        Path.GetFileNameWithoutExtension(absolutePath)\n                                                        + \"@\" + scale + \"x\" + Path.GetExtension(absolutePath));\n                    if (File.Exists(absolutePathX))\n                        return File.OpenRead(absolutePathX);\n                }\n            }\n\n            return File.OpenRead(absolutePath);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Content/.iOS/ConcreteTitleContainerFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteTitleContainerFactory : TitleContainerFactory\n    {\n        public override TitleContainerStrategy CreateTitleContainerStrategy()\n        {\n            return new ConcreteTitleContainer();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Content/.macOS/ConcreteTitleContainer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteTitleContainer : TitleContainerStrategy\n    {\n        private string _location = string.Empty;\n\n        private TitlePlatform _platform = TitlePlatform.MacOS;\n\n        public override string Location { get { return _location; } }\n\n        public override TitlePlatform Platform { get { return _platform; } }\n\n        public ConcreteTitleContainer() : base()\n        {\n            _location = NSBundle.MainBundle.ResourcePath;\n        }\n\n        public override Stream PlatformOpenStream(string name)\n        {\n            string absolutePath = Path.Combine(_location, name);\n\n            return File.OpenRead(absolutePath);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Content/.macOS/ConcreteTitleContainerFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteTitleContainerFactory : TitleContainerFactory\n    {\n        public override TitleContainerStrategy CreateTitleContainerStrategy()\n        {\n            return new ConcreteTitleContainer();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Android/ConcreteDevicesFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteDevicesFactory : DevicesFactory\n    {\n\n        public override HapticsStrategy CreateConcreteHapticsStrategy()\n        {\n            return new ConcreteHaptics();\n        }\n\n        public override SensorServiceStrategy CreateSensorServiceStrategy()\n        {\n            return new ConcreteSensorService();\n        }\n\n        public override AccelerometerStrategy CreateAccelerometerStrategy()\n        {\n            return new ConcreteAccelerometer();\n        }\n\n        public override CompassStrategy CreateCompassStrategy()\n        {\n            return new ConcreteCompass();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Android/ConcreteHaptics.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteHaptics : HapticsStrategy\n    {\n        Android.OS.Vibrator _nativeVibrator;\n        private bool _hasVibrator = true;\n\n        public ConcreteHaptics()\n        {\n            _nativeVibrator = (Android.OS.Vibrator)Android.App.Application.Context.GetSystemService(Android.Content.Context.VibratorService);\n            try\n            {\n                _hasVibrator = _nativeVibrator.HasVibrator;\n            }\n            catch { /* ignore */ }\n        }\n\n        public override void Vibrate(TimeSpan duration)\n        {\n            if (_hasVibrator)\n            {\n                try\n                {\n                    _nativeVibrator.Vibrate((long)duration.TotalMilliseconds);\n                }\n                catch { /* ignore */ }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Android/Sensors/ConcreteAccelerometer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\nusing Android.Content;\nusing Android.Hardware;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteAccelerometer : AccelerometerStrategy\n    {\n        internal static SensorManager _sensorManager;\n        internal static Sensor _sensorAccelerometer;\n        static int _instanceCount;\n\n        SensorListener _sensorListener;\n\n        private SensorReadingEventArgs<AccelerometerReading> _eventArgs = new SensorReadingEventArgs<AccelerometerReading>(default(AccelerometerReading));\n\n\n        public override SensorState State\n        {\n            get\n            {\n                if (_sensorManager == null)\n                {\n                    ConcreteAccelerometer.Initialize();\n                    base.State = (_sensorAccelerometer != null)\n                               ? SensorState.Initializing \n                               : SensorState.NotSupported;\n                }\n\n                return base.State;\n            }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set\n            {\n                if (base.ReportInterval != value)\n                {\n                    base.ReportInterval = value;\n                    // TODO: implement ReportInterval for Android\n                }\n            }\n        }\n\n        public override AccelerometerReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteAccelerometer()\n        {\n            _instanceCount++;\n\n            base.State = (_sensorAccelerometer != null)\n                       ? SensorState.Initializing \n                       : SensorState.NotSupported;\n\n            _sensorListener = new SensorListener();\n            _sensorListener.AccuracyChanged += _sensorListener_AccuracyChanged;\n            _sensorListener.SensorChanged += _sensorListener_SensorChanged;\n        }\n\n        static internal void Initialize()\n        {\n            _sensorManager = (SensorManager)AndroidGameWindow.Activity.GetSystemService(Context.SensorService);\n            _sensorAccelerometer = _sensorManager.GetDefaultSensor(SensorType.Accelerometer);\n        }\n\n        public override void Start()\n        {\n            if (this.State == SensorState.Ready)\n                throw base.CreateAccelerometerFailedException(\"Failed to start accelerometer data acquisition. Data acquisition already started.\", -1);\n\n            if (_sensorManager == null)\n                ConcreteAccelerometer.Initialize();\n\n            if ((_sensorManager == null || _sensorAccelerometer == null))\n                throw base.CreateAccelerometerFailedException(\"Failed to start accelerometer data acquisition. No default sensor found.\", -1);\n\n            _sensorManager.RegisterListener(_sensorListener, _sensorAccelerometer, SensorDelay.Game);\n            // So the system can pause and resume the sensor when the activity is paused\n            AndroidGameWindow.Activity.Paused += _activity_Paused;\n            AndroidGameWindow.Activity.Resumed += _activity_Resumed;\n            base.State = SensorState.Ready;\n        }\n\n        public override void Stop()\n        {\n            if (this.State == SensorState.Ready)\n            {\n                if (_sensorManager != null && _sensorAccelerometer != null)\n                {\n                    AndroidGameWindow.Activity.Paused -= _activity_Paused;\n                    AndroidGameWindow.Activity.Resumed -= _activity_Resumed;\n                    _sensorManager.UnregisterListener(_sensorListener, _sensorAccelerometer);\n                }\n            }\n            base.State = SensorState.Disabled;\n        }\n\n        void _activity_Paused(object sender, EventArgs eventArgs)\n        {\n            _sensorManager.UnregisterListener(_sensorListener, _sensorAccelerometer);\n        }\n\n        void _activity_Resumed(object sender, EventArgs eventArgs)\n        {\n            _sensorManager.RegisterListener(_sensorListener, _sensorAccelerometer, SensorDelay.Game);\n        }\n\n        private void _sensorListener_AccuracyChanged(object sender, EventArgs eventArgs)\n        {\n            //do nothing\n        }\n\n        private void _sensorListener_SensorChanged(object sender, SensorListener.SensorChangedEventArgs eventArgs)\n        {\n            try\n            {\n                SensorEvent e = eventArgs.Event;\n                if (e != null && e.Sensor.Type == SensorType.Accelerometer)\n                {\n                    IList<float> values = e.Values;\n                    try\n                    {\n                        AccelerometerReading reading = new AccelerometerReading();\n                        base.IsDataValid = (values != null && values.Count == 3);\n                        if (base.IsDataValid)\n                        {\n                            const float gravity = SensorManager.GravityEarth;\n                            reading = base.CreateAccelerometerReading(\n                                acceleration: new Vector3(values[0], values[1], values[2]) / gravity,\n                                timestamp: DateTime.UtcNow\n                            );\n                        }\n\n                        base.CurrentReading = reading;\n\n                        _eventArgs.SensorReading = base.CurrentReading;\n                        base.OnReadingChanged(_eventArgs);\n                    }\n                    finally\n                    {\n                        IDisposable d = values as IDisposable;\n                        if (d != null)\n                            d.Dispose();\n                    }\n                }\n            }\n            catch (NullReferenceException)\n            {\n                //Occassionally an NullReferenceException is thrown when accessing e.Values??\n                // mono    : Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object\n                // mono    :   at Android.Runtime.JNIEnv.GetObjectField (IntPtr jobject, IntPtr jfieldID) [0x00000] in <filename unknown>:0 \n                // mono    :   at Android.Hardware.SensorEvent.get_Values () [0x00000] in <filename unknown>:0\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (this.State == SensorState.Ready)\n                Stop();\n\n            _instanceCount--;\n            if (_instanceCount == 0)\n            {\n                _sensorAccelerometer = null;\n                _sensorManager = null;\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Devices/.Android/Sensors/ConcreteCompass.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\nusing Android.Content;\nusing Android.Hardware;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteCompass : CompassStrategy\n    {\n        internal static SensorManager _sensorManager;\n        internal static Sensor _sensorMagneticField;\n        static Sensor _sensorAccelerometer;\n        static int _instanceCount;\n\n        SensorListener _sensorListener;\n\n        float[] _valuesAccelerometer;\n        float[] _valuesMagenticField;\n        float[] _matrixR;\n        float[] _matrixI;\n        float[] _matrixValues;\n        \n        private SensorReadingEventArgs<CompassReading> _eventArgs = new SensorReadingEventArgs<CompassReading>(default(CompassReading));\n\n\n        public override SensorState State\n        {\n            get\n            {\n                if (_sensorManager == null)\n                {\n                    ConcreteCompass.Initialize();\n                }\n\n                return base.State;\n            }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set \n            {\n                if (base.ReportInterval != value)\n                {\n                    base.ReportInterval = value;\n                    // TODO: implement ReportInterval for Android\n                }\n            }\n        }\n\n        public override CompassReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteCompass()\n        {\n            _instanceCount++;\n\n            base.State = (_sensorMagneticField != null)\n                       ? SensorState.Initializing \n                       : SensorState.NotSupported;\n\n            _valuesAccelerometer = new float[3];\n            _valuesMagenticField = new float[3];\n            _matrixR = new float[9];\n            _matrixI = new float[9];\n            _matrixValues = new float[3];\n            _sensorListener = new SensorListener();\n            _sensorListener.AccuracyChanged += _sensorListener_AccuracyChanged;\n            _sensorListener.SensorChanged += _sensorListener_SensorChanged;\n        }\n\n        static internal void Initialize()\n        {\n            _sensorManager = (SensorManager)AndroidGameWindow.Activity.GetSystemService(Context.SensorService);\n            _sensorMagneticField = _sensorManager.GetDefaultSensor(SensorType.MagneticField);\n            _sensorAccelerometer = _sensorManager.GetDefaultSensor(SensorType.Accelerometer);\n        }\n\n        public override void Start()\n        {\n            if (this.State == SensorState.Ready)\n                throw base.CreateSensorFailedException(\"Failed to start compass data acquisition. Data acquisition already started.\");\n\n            if (_sensorManager == null)\n                ConcreteCompass.Initialize();\n\n            if ((_sensorManager == null || _sensorMagneticField == null || _sensorAccelerometer == null))\n                throw base.CreateSensorFailedException(\"Failed to start compass data acquisition. No default sensor found.\");\n\n            _sensorManager.RegisterListener(_sensorListener, _sensorMagneticField, SensorDelay.Game);\n            _sensorManager.RegisterListener(_sensorListener, _sensorAccelerometer, SensorDelay.Game);\n            base.State = SensorState.Ready;\n        }\n\n        public override void Stop()\n        {\n            if (this.State == SensorState.Ready)\n            {\n                if (_sensorManager != null && _sensorMagneticField != null && _sensorAccelerometer != null)\n                {\n                    _sensorManager.UnregisterListener(_sensorListener, _sensorAccelerometer);\n                    _sensorManager.UnregisterListener(_sensorListener, _sensorMagneticField);\n                }\n            }\n            base.State = SensorState.Disabled;\n        }\n\n        void _activity_Paused(object sender, EventArgs eventArgs)\n        {\n            _sensorManager.UnregisterListener(_sensorListener, _sensorMagneticField);\n            _sensorManager.UnregisterListener(_sensorListener, _sensorAccelerometer);\n        }\n\n        void _activity_Resumed(object sender, EventArgs eventArgs)\n        {\n            _sensorManager.RegisterListener(_sensorListener, _sensorAccelerometer, SensorDelay.Game);\n            _sensorManager.RegisterListener(_sensorListener, _sensorMagneticField, SensorDelay.Game);\n        }\n\n        private void _sensorListener_AccuracyChanged(object sender, EventArgs eventArgs)\n        {\n            //do nothing\n        }\n\n        private void _sensorListener_SensorChanged(object sender, SensorListener.SensorChangedEventArgs eventArgs)\n        {\n            try\n            {\n                SensorEvent e = eventArgs.Event;\n                switch (e.Sensor.Type)\n                {\n                    case SensorType.Accelerometer:\n                        _valuesAccelerometer[0] = e.Values[0];\n                        _valuesAccelerometer[1] = e.Values[1];\n                        _valuesAccelerometer[2] = e.Values[2];\n                        break;\n\n                    case SensorType.MagneticField:\n                        _valuesMagenticField[0] = e.Values[0];\n                        _valuesMagenticField[1] = e.Values[1];\n                        _valuesMagenticField[2] = e.Values[2];\n                        break;\n                }\n\n                base.IsDataValid = SensorManager.GetRotationMatrix(_matrixR, _matrixI, _valuesAccelerometer, _valuesMagenticField);\n                if (base.IsDataValid)\n                {\n                    SensorManager.GetOrientation(_matrixR, _matrixValues);\n\n                    double headingAccuracy = 0; // Not implemented.\n                    double magneticHeading = _matrixValues[0];\n                    Vector3 magnetometerReading = new Vector3(_valuesMagenticField[0], _valuesMagenticField[1], _valuesMagenticField[2]);\n                    // We need the magnetic declination from true north to calculate the true heading from the magnetic heading.\n                    // On Android, this is available through Android.Hardware.GeomagneticField, but this requires your geo position.\n                    double trueHeading = magneticHeading; // Not implemented, fallback to magneticHeading.\n\n                    CompassReading reading = base.CreateCompassReading(\n                        headingAccuracy: headingAccuracy,\n                        magneticHeading: magneticHeading,\n                        magnetometerReading: magnetometerReading,\n                        timestamp: DateTime.UtcNow,\n                        trueHeading: trueHeading\n                        );\n\n                    base.CurrentReading = reading;\n\n                    _eventArgs.SensorReading = base.CurrentReading;\n                    base.OnReadingChanged(_eventArgs);\n                }\n            }\n            catch (NullReferenceException)\n            {\n                //Occassionally an NullReferenceException is thrown when accessing e.Values??\n                // mono    : Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object\n                // mono    :   at Android.Runtime.JNIEnv.GetObjectField (IntPtr jobject, IntPtr jfieldID) [0x00000] in <filename unknown>:0 \n                // mono    :   at Android.Hardware.SensorEvent.get_Values () [0x00000] in <filename unknown>:0\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (this.State == SensorState.Ready)\n                Stop();\n\n            _instanceCount--;\n            if (_instanceCount == 0)\n            {\n                _sensorAccelerometer = null;\n                _sensorMagneticField = null;\n                _sensorManager = null;\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Devices/.Android/Sensors/ConcreteSensorService.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\nusing Android.Hardware;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteSensorService : SensorServiceStrategy\n    {\n\n        internal ConcreteSensorService()\n        {\n        }\n\n        public override bool PlatformIsAccelerometerSupported()\n        {\n            if (ConcreteAccelerometer._sensorManager == null)\n                ConcreteAccelerometer.Initialize();\n            return ConcreteAccelerometer._sensorAccelerometer != null;\n        }\n\n        public override bool PlatformIsCompassSupported()\n        {\n            if (ConcreteCompass._sensorManager == null)\n                ConcreteCompass.Initialize();\n            return ConcreteCompass._sensorMagneticField != null;\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Devices/.Android/Sensors/SensorListener.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Android.Hardware;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal class SensorListener : Java.Lang.Object, ISensorEventListener\n    {\n        public event EventHandler<EventArgs> AccuracyChanged;\n        public event EventHandler<SensorListener.SensorChangedEventArgs> SensorChanged;\n\n        public SensorListener()\n        {\n        }\n\n        void ISensorEventListener.OnAccuracyChanged(Sensor sensor, SensorStatus accuracy)\n        {\n            var handler = AccuracyChanged;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        void ISensorEventListener.OnSensorChanged(SensorEvent e)\n        {\n            var handler = SensorChanged;\n            if (handler != null)\n                handler(this, new SensorListener.SensorChangedEventArgs(e));\n        }\n\n        public class SensorChangedEventArgs : EventArgs\n        {\n            public readonly SensorEvent Event;\n\n            internal SensorChangedEventArgs(SensorEvent sensorEvent)\n            {\n                this.Event = sensorEvent;\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Devices/.Blazor/ConcreteDevicesFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteDevicesFactory : DevicesFactory\n    {\n\n        public override HapticsStrategy CreateConcreteHapticsStrategy()\n        {\n            return new ConcreteHaptics();\n        }\n\n        public override SensorServiceStrategy CreateSensorServiceStrategy()\n        {\n            return new ConcreteSensorService();\n        }\n\n        public override AccelerometerStrategy CreateAccelerometerStrategy()\n        {\n            return new ConcreteAccelerometer();\n        }\n\n        public override CompassStrategy CreateCompassStrategy()\n        {\n            return new ConcreteCompass();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Blazor/ConcreteHaptics.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\nusing nkast.Wasm.Dom;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteHaptics : HapticsStrategy\n    {\n\n        public ConcreteHaptics()\n        {\n        }\n\n        public override void Vibrate(TimeSpan duration)\n        {\n            Window.Current.Navigator.Vibrate(duration);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Blazor/Sensors/ConcreteAccelerometer.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteAccelerometer : AccelerometerStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override AccelerometerReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteAccelerometer()\n        {\n            base.State = SensorState.NotSupported;\n\n        }\n\n        public override void Start()\n        {\n        }\n\n        public override void Stop()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Blazor/Sensors/ConcreteCompass.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteCompass : CompassStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override CompassReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteCompass()\n        {\n            base.State = SensorState.NotSupported;\n\n        }\n\n        public override void Start()\n        {\n        }\n\n        public override void Stop()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Blazor/Sensors/ConcreteSensorService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteSensorService : SensorServiceStrategy\n    {\n\n        internal ConcreteSensorService()\n        {\n        }\n\n        public override bool PlatformIsAccelerometerSupported()\n        {\n            return false;\n        }\n\n        public override bool PlatformIsCompassSupported()\n        {\n            return false;\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Ref/ConcreteDevicesFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteDevicesFactory : DevicesFactory\n    {\n\n        public override HapticsStrategy CreateConcreteHapticsStrategy()\n        {\n            return new ConcreteHaptics();\n        }\n\n        public override SensorServiceStrategy CreateSensorServiceStrategy()\n        {\n            return new ConcreteSensorService();\n        }\n\n        public override AccelerometerStrategy CreateAccelerometerStrategy()\n        {\n            return new ConcreteAccelerometer();\n        }\n\n        public override CompassStrategy CreateCompassStrategy()\n        {\n            return new ConcreteCompass();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Ref/ConcreteHaptics.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteHaptics : HapticsStrategy\n    {\n\n        public ConcreteHaptics()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Vibrate(TimeSpan duration)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Ref/Sensors/ConcreteAccelerometer.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteAccelerometer : AccelerometerStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override AccelerometerReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteAccelerometer()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Start()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Stop()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Ref/Sensors/ConcreteCompass.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteCompass : CompassStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override CompassReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteCompass()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Start()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Stop()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.Ref/Sensors/ConcreteSensorService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteSensorService : SensorServiceStrategy\n    {\n\n        internal ConcreteSensorService()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool PlatformIsAccelerometerSupported()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool PlatformIsCompassSupported()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Suspend()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Resume()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.SDL2/ConcreteDevicesFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteDevicesFactory : DevicesFactory\n    {\n\n        public override HapticsStrategy CreateConcreteHapticsStrategy()\n        {\n            return new ConcreteHaptics();\n        }\n\n        public override SensorServiceStrategy CreateSensorServiceStrategy()\n        {\n            return new ConcreteSensorService();\n        }\n\n        public override AccelerometerStrategy CreateAccelerometerStrategy()\n        {\n            return new ConcreteAccelerometer();\n        }\n\n        public override CompassStrategy CreateCompassStrategy()\n        {\n            return new ConcreteCompass();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.SDL2/ConcreteHaptics.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteHaptics : HapticsStrategy\n    {\n\n        public ConcreteHaptics()\n        {\n        }\n\n        public override void Vibrate(TimeSpan duration)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.SDL2/Sensors/ConcreteAccelerometer.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteAccelerometer : AccelerometerStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override AccelerometerReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteAccelerometer()\n        {\n            base.State = SensorState.NotSupported;\n\n        }\n\n        public override void Start()\n        {\n        }\n\n        public override void Stop()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.SDL2/Sensors/ConcreteCompass.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteCompass : CompassStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override CompassReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteCompass()\n        {\n            base.State = SensorState.NotSupported;\n\n        }\n\n        public override void Start()\n        {\n        }\n\n        public override void Stop()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.SDL2/Sensors/ConcreteSensorService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteSensorService : SensorServiceStrategy\n    {\n\n        internal ConcreteSensorService()\n        {\n        }\n\n        public override bool PlatformIsAccelerometerSupported()\n        {\n            return false;\n        }\n\n        public override bool PlatformIsCompassSupported()\n        {\n            return false;\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.UAP/ConcreteDevicesFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteDevicesFactory : DevicesFactory\n    {\n\n        public override HapticsStrategy CreateConcreteHapticsStrategy()\n        {\n            return new ConcreteHaptics();\n        }\n\n        public override SensorServiceStrategy CreateSensorServiceStrategy()\n        {\n            return new ConcreteSensorService();\n        }\n\n        public override AccelerometerStrategy CreateAccelerometerStrategy()\n        {\n            return new ConcreteAccelerometer();\n        }\n\n        public override CompassStrategy CreateCompassStrategy()\n        {\n            return new ConcreteCompass();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.UAP/ConcreteHaptics.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteHaptics : HapticsStrategy\n    {\n\n        public ConcreteHaptics()\n        {\n        }\n\n        public override void Vibrate(TimeSpan duration)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.UAP/Sensors/ConcreteAccelerometer.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\nusing WinSensors = Windows.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteAccelerometer : AccelerometerStrategy\n    {\n        internal WinSensors.Accelerometer _waccelerometer;\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set\n            {\n                base.ReportInterval = value;\n                _waccelerometer.ReportInterval = (uint)value.TotalMilliseconds;\n            }\n        }\n\n        public override AccelerometerReading CurrentReading\n        {\n            get\n            {\n                WinSensors.AccelerometerReading wreading = _waccelerometer.GetCurrentReading();\n                if (wreading == null)\n                {\n                    base.IsDataValid = false;\n                    return new AccelerometerReading();\n                }\n\n                AccelerometerReading reading = base.CreateAccelerometerReading(\n                    acceleration: new Vector3((float)wreading.AccelerationX, (float)wreading.AccelerationY, (float)wreading.AccelerationZ),\n                    // timestamp: war.Timestamp //cause Memory garbage\n                    timestamp: DateTimeOffset.MinValue\n                );\n                base.IsDataValid = true;\n                return reading;\n            }\n            set { base.CurrentReading = value; }\n        }\n\n        public ConcreteAccelerometer()\n        {\n            _waccelerometer = WinSensors.Accelerometer.GetDefault();\n            if (_waccelerometer == null)\n            {\n                base.State = SensorState.NotSupported;\n                return;\n            }\n\n            base.State = SensorState.Disabled;\n        }\n\n        public override void Start()\n        {\n            if (this.State != SensorState.Ready)\n            {\n                _waccelerometer.ReadingChanged += _waccelerometer_ReadingChanged;\n\n                base.State = SensorState.Ready;\n            }\n        }\n\n        public override void Stop()\n        {\n            if (this.State == SensorState.Ready)\n            {\n                _waccelerometer.ReadingChanged -= _waccelerometer_ReadingChanged;\n\n\n                base.State = SensorState.Disabled;\n            }\n        }\n\n        private void _waccelerometer_ReadingChanged(WinSensors.Accelerometer sender, WinSensors.AccelerometerReadingChangedEventArgs args)\n        {\n            WinSensors.AccelerometerReading wreading = args.Reading;\n\n            if (wreading == null)\n            {\n                base.IsDataValid = false;\n                return;\n            }\n\n            AccelerometerReading reading = base.CreateAccelerometerReading(\n                   acceleration: new Vector3((float)wreading.AccelerationX, (float)wreading.AccelerationY, (float)wreading.AccelerationZ),\n                   // timestamp: war.Timestamp //cause Memory garbage\n                   timestamp: DateTimeOffset.MinValue\n               );\n            base.IsDataValid = true;\n\n            base.CurrentReading = reading;\n\n            var eventArgs = new SensorReadingEventArgs<AccelerometerReading>(reading);\n            base.OnReadingChanged(eventArgs);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (this.State == SensorState.Ready)\n                Stop();\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.UAP/Sensors/ConcreteCompass.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteCompass : CompassStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override CompassReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteCompass()\n        {\n            base.State = SensorState.NotSupported;\n\n        }\n\n        public override void Start()\n        {\n        }\n\n        public override void Stop()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.UAP/Sensors/ConcreteSensorService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\nusing WinSensors = Windows.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteSensorService : SensorServiceStrategy\n    {\n        bool _isAccelerometerSupported;\n\n        internal ConcreteSensorService()\n        {\n            WinSensors.Accelerometer waccelerometer = WinSensors.Accelerometer.GetDefault();\n            _isAccelerometerSupported = (waccelerometer != null);\n        }\n\n        public override bool PlatformIsAccelerometerSupported()\n        {\n            return _isAccelerometerSupported;\n        }\n\n        public override bool PlatformIsCompassSupported()\n        {\n            return false;\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.WindowsDX/ConcreteDevicesFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteDevicesFactory : DevicesFactory\n    {\n\n        public override HapticsStrategy CreateConcreteHapticsStrategy()\n        {\n            return new ConcreteHaptics();\n        }\n\n        public override SensorServiceStrategy CreateSensorServiceStrategy()\n        {\n            return new ConcreteSensorService();\n        }\n\n        public override AccelerometerStrategy CreateAccelerometerStrategy()\n        {\n            return new ConcreteAccelerometer();\n        }\n\n        public override CompassStrategy CreateCompassStrategy()\n        {\n            return new ConcreteCompass();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.WindowsDX/ConcreteHaptics.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteHaptics : HapticsStrategy\n    {\n\n        public ConcreteHaptics()\n        {\n        }\n\n        public override void Vibrate(TimeSpan duration)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.WindowsDX/Sensors/ConcreteAccelerometer.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteAccelerometer : AccelerometerStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override AccelerometerReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteAccelerometer()\n        {\n            base.State = SensorState.NotSupported;\n\n        }\n\n        public override void Start()\n        {\n        }\n\n        public override void Stop()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.WindowsDX/Sensors/ConcreteCompass.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteCompass : CompassStrategy\n    {\n\n        public override SensorState State\n        {\n            get { return base.State; }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set { base.ReportInterval = value; }\n        }\n\n        public override CompassReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteCompass()\n        {\n            base.State = SensorState.NotSupported;\n\n        }\n\n        public override void Start()\n        {\n        }\n\n        public override void Stop()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.WindowsDX/Sensors/ConcreteSensorService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteSensorService : SensorServiceStrategy\n    {\n\n        internal ConcreteSensorService()\n        {\n        }\n\n        public override bool PlatformIsAccelerometerSupported()\n        {\n            return false;\n        }\n\n        public override bool PlatformIsCompassSupported()\n        {\n            return false;\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.iOS/ConcreteDevicesFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteDevicesFactory : DevicesFactory\n    {\n\n        public override HapticsStrategy CreateConcreteHapticsStrategy()\n        {\n            return new ConcreteHaptics();\n        }\n\n        public override SensorServiceStrategy CreateSensorServiceStrategy()\n        {\n            return new ConcreteSensorService();\n        }\n\n        public override AccelerometerStrategy CreateAccelerometerStrategy()\n        {\n            return new ConcreteAccelerometer();\n        }\n\n        public override CompassStrategy CreateCompassStrategy()\n        {\n            return new ConcreteCompass();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.iOS/ConcreteHaptics.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public sealed class ConcreteHaptics : HapticsStrategy\n    {\n\n        public ConcreteHaptics()\n        {\n        }\n\n        public override void Vibrate(TimeSpan duration)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Devices/.iOS/Sensors/ConcreteAccelerometer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\nusing CoreMotion;\nusing Foundation;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteAccelerometer : AccelerometerStrategy\n    {\n        static int _instanceCount;\n        private static SensorState _state = (((IPlatformSensorService)SensorService.Current).Strategy.PlatformIsAccelerometerSupported())\n                                          ? SensorState.Initializing\n                                          : SensorState.NotSupported;\n\n        internal static readonly CoreMotion.CMMotionManager _motionManager = new CoreMotion.CMMotionManager();\n\n        private static event CMAccelerometerHandler readingChanged;\n\n        private SensorReadingEventArgs<AccelerometerReading> _eventArgs = new SensorReadingEventArgs<AccelerometerReading>(default(AccelerometerReading));\n\n\n        public override SensorState State\n        {\n            get\n            {\n                return _state;\n                //return base.State;\n            }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set\n            {\n                if (base.ReportInterval != value)\n                {\n                    base.ReportInterval = value;\n                    ConcreteAccelerometer._motionManager.AccelerometerUpdateInterval = this.ReportInterval.TotalSeconds;\n                }\n            }\n        }\n\n        public override AccelerometerReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteAccelerometer()\n        {\n            if (!((IPlatformSensorService)SensorService.Current).Strategy.PlatformIsAccelerometerSupported())\n                throw base.CreateAccelerometerFailedException(\"Failed to start accelerometer data acquisition. No default sensor found.\", -1);\n\n            _instanceCount++;\n\n            readingChanged += ReadingChangedHandler;\n        }\n\n        public override void Start()\n        {\n            if (this.State == SensorState.Ready)\n                throw base.CreateAccelerometerFailedException(\"Failed to start accelerometer data acquisition. Data acquisition already started.\", -1);\n\n            ConcreteAccelerometer._motionManager.StartAccelerometerUpdates(NSOperationQueue.CurrentQueue, AccelerometerHandler);\n            _state = SensorState.Ready;\n        }\n\n        public override void Stop()\n        {\n            ConcreteAccelerometer._motionManager.StopAccelerometerUpdates();\n            _state = SensorState.Disabled;\n        }\n\n        private void AccelerometerHandler(CMAccelerometerData data, NSError error)\n        {\n            readingChanged(data, error);\n        }\n\n        private void ReadingChangedHandler(CMAccelerometerData data, NSError error)\n        {\n            AccelerometerReading reading = new AccelerometerReading();\n            base.IsDataValid = (error == null);\n            if (base.IsDataValid)\n            {\n                reading = base.CreateAccelerometerReading(\n                    acceleration: new Vector3((float)data.Acceleration.X, (float)data.Acceleration.Y, (float)data.Acceleration.Z),\n                    timestamp: DateTime.UtcNow\n                );\n\n                base.CurrentReading = reading;\n\n                _eventArgs.SensorReading = base.CurrentReading;\n                base.OnReadingChanged(_eventArgs);\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (this.State == SensorState.Ready)\n                Stop();\n\n            _instanceCount--;\n\n            base.Dispose(disposing);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Devices/.iOS/Sensors/ConcreteCompass.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\nusing CoreMotion;\nusing Foundation;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteCompass : CompassStrategy\n    {\n        static int _instanceCount;\n        private static SensorState _state = (((IPlatformSensorService)SensorService.Current).Strategy.PlatformIsCompassSupported())\n                                          ? SensorState.Initializing \n                                          : SensorState.NotSupported;\n        private bool _calibrate = false;\n\n        private static event CMDeviceMotionHandler readingChanged;\n\n        private SensorReadingEventArgs<CompassReading> _eventArgs = new SensorReadingEventArgs<CompassReading>(default(CompassReading));\n\n\n        public override SensorState State\n        {\n            get\n            {\n                return _state;\n                //return base.State;\n            }\n            set { base.State = value; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return base.IsDataValid; }\n            set { base.IsDataValid = value; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return base.ReportInterval; }\n            set \n            {\n                if (base.ReportInterval != value)\n                {\n                    base.ReportInterval = value;\n                    ConcreteAccelerometer._motionManager.MagnetometerUpdateInterval = this.ReportInterval.TotalSeconds;\n                }\n            }\n        }\n\n        public override CompassReading CurrentReading\n        {\n            get { return base.CurrentReading; }\n            set { base.CurrentReading = value; }\n        }\n\n\n        public ConcreteCompass()\n        {\n            if (!((IPlatformSensorService)SensorService.Current).Strategy.PlatformIsCompassSupported())\n                throw base.CreateSensorFailedException(\"Failed to start compass data acquisition. No default sensor found.\");\n\n            _instanceCount++;\n\n            readingChanged += ReadingChangedHandler;\n        }\n\n        public override void Start()\n        {\n            if (this.State == SensorState.Ready)\n                throw base.CreateSensorFailedException(\"Failed to start compass data acquisition. Data acquisition already started.\");\n\n            // For true north use CMAttitudeReferenceFrame.XTrueNorthZVertical, but be aware that it requires location service\n            ConcreteAccelerometer._motionManager.StartDeviceMotionUpdates(CMAttitudeReferenceFrame.XMagneticNorthZVertical, NSOperationQueue.CurrentQueue, MagnetometerHandler);\n            _state = SensorState.Ready;\n        }\n\n        public override void Stop()\n        {\n            ConcreteAccelerometer._motionManager.StopDeviceMotionUpdates();\n            _state = SensorState.Disabled;\n        }\n\n        private void MagnetometerHandler(CMDeviceMotion magnetometerData, NSError error)\n        {\n            readingChanged(magnetometerData, error);\n        }\n\n        private void ReadingChangedHandler(CMDeviceMotion data, NSError error)\n        {\n            base.IsDataValid = (error == null);\n            if (base.IsDataValid)\n            {\n                double headingAccuracy = 0;\n                switch (data.MagneticField.Accuracy)\n                {\n                    case CMMagneticFieldCalibrationAccuracy.High:\n                        headingAccuracy = 5d;\n                        break;\n                    case CMMagneticFieldCalibrationAccuracy.Medium:\n                        headingAccuracy = 30d;\n                        break;\n                    case CMMagneticFieldCalibrationAccuracy.Low:\n                        headingAccuracy = 45d;\n                        break;\n                }\n\n                double magneticHeading = Math.Atan2(-data.MagneticField.Field.X, data.MagneticField.Field.Y) / Math.PI * 180;\n                Vector3 magnetometerReading = new Vector3((float)data.MagneticField.Field.Y, (float)-data.MagneticField.Field.X, (float)data.MagneticField.Field.Z);\n                double trueHeading = magneticHeading; // Not implemented, fallback to magneticHeading.\n\n                CompassReading reading = base.CreateCompassReading(\n                    headingAccuracy: headingAccuracy,\n                    magneticHeading: magneticHeading,\n                    magnetometerReading: magnetometerReading,\n                    timestamp: DateTime.UtcNow,\n                    trueHeading: trueHeading\n                );\n\n                // Send calibrate event if needed\n                if (data.MagneticField.Accuracy == CMMagneticFieldCalibrationAccuracy.Uncalibrated)\n                {\n                    if (this._calibrate == false)\n                    {\n                        base.OnCalibrate(CalibrationEventArgs.Empty);\n                    }\n                    this._calibrate = true;\n                }\n                else if (this._calibrate == true)\n                    this._calibrate = false;\n\n                base.CurrentReading = reading;\n\n                _eventArgs.SensorReading = base.CurrentReading;\n                base.OnReadingChanged(_eventArgs);\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (this.State == SensorState.Ready)\n                Stop();\n\n            _instanceCount--;\n\n            base.Dispose(disposing);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Devices/.iOS/Sensors/ConcreteSensorService.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    internal sealed class ConcreteSensorService : SensorServiceStrategy\n    {\n\n        internal ConcreteSensorService()\n        {\n        }\n\n        public override bool PlatformIsAccelerometerSupported()\n        {\n            return ConcreteAccelerometer._motionManager.AccelerometerAvailable;\n        }\n\n        public override bool PlatformIsCompassSupported()\n        {\n            return ConcreteAccelerometer._motionManager.DeviceMotionAvailable;\n        }\n\n        public override void Suspend()\n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Directory.Build.props",
    "content": "<Project>\n\n    <PropertyGroup>\n        <BaseIntermediateOutputPath>obj\\$(MSBuildProjectName)\\</BaseIntermediateOutputPath>\n    </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Platforms/Game/.Android/AndroidCompatibility.cs",
    "content": "using System;\nusing System.Linq;\nusing Android.App;\nusing Android.Content.Res;\nusing Android.OS;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Properties that change from how XNA works by default\n    /// </summary>\n    public class AndroidCompatibility\n    {\n        private static AndroidCompatibility _current;\n\n        /// <summary>\n        /// Because the Kindle Fire devices default orientation is fliped by 180 degrees from all the other android devices\n        /// on the market we need to do some special processing to make sure that LandscapeLeft is the correct way round.\n        /// This list contains all the Build.Model strings of the effected devices, it should be added to if and when\n        /// more devices exhibit the same issues.\n        /// </summary>\n        private readonly string[] Kindles = new[] { \"KFTT\", \"KFJWI\", \"KFJWA\", \"KFSOWI\", \"KFTHWA\", \"KFTHWI\", \"KFAPWA\", \"KFAPWI\" };\n\n        public bool FlipLandscape { get; private set; }\n\n        [CLSCompliant(false)]\n        public Orientation NaturalOrientation { get; private set; }\n\n\n        [CLSCompliant(false)]\n        public static AndroidCompatibility Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n                else\n                    throw new InvalidOperationException(\"Not initialized.\");\n            }\n        }\n\n        internal static void Initialize(Activity activity)\n        {\n            if (_current == null)\n                _current = new AndroidCompatibility(activity);\n        }\n\n        private AndroidCompatibility(Activity activity)\n        {\n            FlipLandscape = Kindles.Contains(Build.Model);\n            NaturalOrientation = GetDeviceNaturalOrientation(activity);\n        }\n\n        private Orientation GetDeviceNaturalOrientation(Activity activity)\n        {\n            // check if MainActivity setup is correct. \n            Android.Content.PM.ScreenOrientation screenOrientation = activity.RequestedOrientation;\n            if (screenOrientation != Android.Content.PM.ScreenOrientation.FullSensor)\n                throw new InvalidOperationException(\"NaturalOrientation detection failed. Set ScreenOrientation in MainActivity to FullSensor.\");\n\n            Orientation orientation = activity.Resources.Configuration.Orientation;\n            SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation;\n\n            switch (orientation)\n            {\n                case Orientation.Portrait:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Portrait;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Landscape;\n\n                            default:\n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n\n                case Orientation.Landscape:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Landscape;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Portrait;\n\n                            default:\n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n\n                default:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Portrait;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Portrait;\n\n                            default: \n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n            }\n        }\n\n        /// <summary>\n        /// Get the absolute orientation of the device, accounting for platform differences.\n        /// </summary>\n        /// <returns></returns>\n        [CLSCompliant(false)]\n        public DisplayOrientation GetAbsoluteOrientation(Activity activity)\n        {\n            Orientation orientation = activity.Resources.Configuration.Orientation;\n            SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation;\n\n            switch (orientation)\n            {\n                case Orientation.Portrait:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            default:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                return DisplayOrientation.Portrait;\n                            case SurfaceOrientation.Rotation180:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                return DisplayOrientation.PortraitDown;\n                            case SurfaceOrientation.Rotation90:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                return DisplayOrientation.PortraitDown;\n                            case SurfaceOrientation.Rotation270:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                return DisplayOrientation.Portrait;\n                        }\n                    }\n                    break;\n\n                case Orientation.Landscape:\n                default:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            default:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeRight;\n                                return DisplayOrientation.LandscapeLeft;\n                            case SurfaceOrientation.Rotation180:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeLeft;\n                                return DisplayOrientation.LandscapeRight;\n                            case SurfaceOrientation.Rotation90:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeRight;\n                                return DisplayOrientation.LandscapeLeft;\n                            case SurfaceOrientation.Rotation270:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeLeft;\n                                return DisplayOrientation.LandscapeRight;\n                        }\n                    }\n                    break;\n            }\n        }\n\n        internal DisplayOrientation GetAbsoluteOrientation(int degrees)\n        {\n            // Orientation is reported by the device in degrees compared to the natural orientation\n            // Some tablets have a natural landscape orientation, which we need to account for\n            if (NaturalOrientation == Orientation.Landscape)\n                degrees += 270;\n\n            // Round orientation into one of 8 positions, either 0, 45, 90, 135, 180, 225, 270, 315. \n            degrees = ( ((degrees + 22) / 45) * 45) % 360;\n\n            // Surprisingly 90 degree is landscape right, except on Kindle devices\n            switch (degrees)\n            {\n                case 0:\n                    return DisplayOrientation.Portrait;\n                case 180:\n                    return DisplayOrientation.PortraitDown;\n                case 90:\n                    if (FlipLandscape)\n                        return DisplayOrientation.LandscapeLeft;\n                    return DisplayOrientation.LandscapeRight;\n                case 270:\n                    if (FlipLandscape)\n                        return DisplayOrientation.LandscapeRight;\n                    return DisplayOrientation.LandscapeLeft;\n\n                default:\n                    return DisplayOrientation.Unknown;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/AndroidGameActivity.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Android.App;\nusing Android.Content;\nusing Android.OS;\nusing Android.Views;\nusing Microsoft.Xna.Platform;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    [CLSCompliant(false)]\n    public class AndroidGameActivity : Activity\n    {\n        public bool AutoPauseAndResumeMediaPlayer = true;\n\n\n        internal event EventHandler WindowFocused;\n        internal event EventHandler WindowUnfocused;\n\n        public event EventHandler Paused;\n        public event EventHandler Resumed;\n        internal event EventHandler Destroyed;\n\n\n        /// <summary>\n        /// OnCreate called when the activity is launched from cold or after the app\n        /// has been killed due to a higher priority app needing the memory\n        /// </summary>\n        /// <param name='savedInstanceState'>\n        /// Saved instance state.\n        /// </param>\n        protected override void OnCreate(Bundle savedInstanceState)\n        {\n            // Detection of NaturalOrientation. This must happend as soon as possible at start up.\n            AndroidCompatibility.Initialize(this);\n            \n            RequestWindowFeature(WindowFeatures.NoTitle);\n            base.OnCreate(savedInstanceState);\n\n            AndroidGameWindow.Activity = this;\n        }\n\n        private bool _isActivityActive = false;\n        internal bool IsActivityActive { get { return _isActivityActive; } }\n\n\n        public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig)\n        {\n            base.OnConfigurationChanged(newConfig);\n        }\n\n        protected override void OnPause()\n        {\n            base.OnPause();\n\n            _isActivityActive = false;\n\n            var handler = Paused;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected override void OnResume()\n        {\n            base.OnResume();\n\n            _isActivityActive = true;\n\n            var handler = Resumed;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        public override void OnWindowFocusChanged(bool hasFocus)\n        {\n            base.OnWindowFocusChanged(hasFocus);\n\n            var handler = (hasFocus) ? WindowFocused : WindowUnfocused;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected override void OnDestroy()\n        {\n            var handler = Destroyed;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n\n            base.OnDestroy();\n        }\n    }\n\n    [CLSCompliant(false)]\n    public static class ActivityExtensions\n    {\n        public static ActivityAttribute GetActivityAttribute(this AndroidGameActivity obj)\n        {\t\t\t\n            var attr = obj.GetType().GetCustomAttributes(typeof(ActivityAttribute), true);\n            if (attr != null)\n            {\n                return ((ActivityAttribute)attr[0]);\n            }\n            return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/AndroidGameWindow.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Input.Touch;\nusing Android.Content;\nusing Android.Content.PM;\nusing Android.OS;\nusing Android.Views;\nusing Android.Util;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    [CLSCompliant(false)]\n    public class AndroidGameWindow : GameWindow, IDisposable\n    {\n        // What is the state of the app.\n        internal enum AppState\n        {\n            Paused,\n            Resumed,\n            Exited,\n        }\n\n        private static Dictionary<IntPtr, AndroidGameWindow> _instances = new Dictionary<IntPtr, AndroidGameWindow>();\n\n        internal static AndroidGameWindow FromHandle(IntPtr windowHandle)\n        {\n            return _instances[windowHandle];\n        }\n\n        internal static AndroidGameActivity Activity { get; set; }\n\n        internal AndroidSurfaceView GameView { get; private set; }\n\n        internal RunnableObject _runner;\n\n        internal AndroidGameActivity _activity;\n        internal readonly Game _game;\n        private bool _isActivated = false;\n        private AndroidGameWindow.AppState _appState = AndroidGameWindow.AppState.Exited;\n        MediaState _mediaPlayer_PrevState = MediaState.Stopped;\n\n        private Rectangle _clientBounds;\n        private DisplayOrientation _currentOrientation;\n\n        private OrientationListener _orientationListener;\n        internal ScreenReceiver _screenReceiver;\n        private TouchEventListener _touchEventListener;\n\n        public override IntPtr Handle { get { return GameView.Handle; } }\n\n        public AndroidGameWindow(AndroidGameActivity activity, Game game)\n        {\n            _activity = activity;\n            _game = game;\n\n            _activity.Paused += Activity_Paused;\n            _activity.Resumed += Activity_Resumed;\n            _activity.Destroyed += Activity_Destroyed;\n\n            _activity.WindowFocused += Activity_WindowFocused;\n            _activity.WindowUnfocused += Activity_WindowUnfocused;\n\n            Point size;\n            // GetRealSize() was defined in JellyBeanMr1 / API 17 / Android 4.2\n            if (Build.VERSION.SdkInt < BuildVersionCodes.JellyBeanMr1)\n            {\n                size.X = activity.Resources.DisplayMetrics.WidthPixels;\n                size.Y = activity.Resources.DisplayMetrics.HeightPixels;\n            }\n            else\n            {\n                Android.Graphics.Point p = new Android.Graphics.Point();\n                activity.WindowManager.DefaultDisplay.GetRealSize(p);\n                size.X = p.X;\n                size.Y = p.Y;\n            }\n\n            _clientBounds = new Rectangle(0, 0, size.X, size.Y);\n\n            // init _currentOrientation\n            DisplayOrientation currentOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(activity);\n            // Android 2.3 and above support reverse orientations\n            int sdkVer = (int)Android.OS.Build.VERSION.SdkInt;\n            if (sdkVer < 10)\n            {\n                if (currentOrientation == DisplayOrientation.LandscapeRight)\n                    currentOrientation = DisplayOrientation.LandscapeLeft;\n                if (currentOrientation == DisplayOrientation.PortraitDown)\n                    currentOrientation = DisplayOrientation.PortraitDown;\n            }\n            _currentOrientation = currentOrientation;\n            _activity.RequestedOrientation = XnaOrientationToAndroid(currentOrientation);\n            \n            GameView = new AndroidSurfaceView(activity);\n            GameView.LayoutChange += GameView_LayoutChange;\n            _runner = new RunnableObject();\n            _runner.Tick += OnTick;\n\n            GameView.RequestFocus();\n            GameView.FocusableInTouchMode = true;\n\n            _instances.Add(this.Handle, this);\n\n            _orientationListener = new OrientationListener(this, _activity);\n\n            IntentFilter filter = new IntentFilter();\n            filter.AddAction(Intent.ActionScreenOff);\n            filter.AddAction(Intent.ActionScreenOn);\n            filter.AddAction(Intent.ActionUserPresent);\n            filter.AddAction(Android.Telephony.TelephonyManager.ActionPhoneStateChanged);\n            _screenReceiver = new ScreenReceiver(_activity);\n            _activity.RegisterReceiver(_screenReceiver, filter);\n            _screenReceiver.Unlocked += ScreenReceiver_Unlocked;\n            _screenReceiver.Locked += ScreenReceiver_Locked;\n\n            _touchEventListener = new TouchEventListener();\n            _touchEventListener.SetTouchListener(this);\n\n            if (Mouse.WindowHandle == IntPtr.Zero)\n                Mouse.WindowHandle = this.Handle;\n            if (TouchPanel.WindowHandle == IntPtr.Zero)\n                TouchPanel.WindowHandle = this.Handle;\n        }\n\n        private void ScreenReceiver_Unlocked(object sender, EventArgs e)\n        {\n            MediaPlayer.IsMuted = false;\n\n            _appState = AndroidGameWindow.AppState.Resumed;\n            this._runner.RequestFrame();\n\n            try\n            {\n                if (!this.GameView.IsFocused)\n                    this.GameView.RequestFocus();\n            }\n            catch (Exception ex)\n            {\n                Log.Verbose(\"RequestFocus()\", ex.ToString());\n            }\n        }\n\n        private void ScreenReceiver_Locked(object sender, EventArgs e)\n        {\n            MediaPlayer.IsMuted = true;\n        }\n\n        void Activity_Resumed(object sender, EventArgs e)\n        {\n            if (!_isActivated)\n            {\n                _isActivated = true;\n                OnActivated();\n            }\n\n            _appState = AndroidGameWindow.AppState.Resumed;\n            _runner.RequestFrame();\n            try\n            {\n                if (!GameView.IsFocused)\n                    GameView.RequestFocus();\n            }\n            catch (Exception ex)\n            {\n                Log.Verbose(\"RequestFocus()\", ex.ToString());\n            }\n            Microsoft.Xna.Platform.Audio.AudioService.Resume();\n            if (_mediaPlayer_PrevState == MediaState.Playing && _activity.AutoPauseAndResumeMediaPlayer)\n                MediaPlayer.Resume();\n            if (!this.GameView.IsFocused)\n                this.GameView.RequestFocus();\n\n            if (_game != null)\n            {\n                IGraphicsDeviceManager deviceManager = (IGraphicsDeviceManager)_game.Services.GetService(typeof(IGraphicsDeviceManager));\n                if (deviceManager != null)\n                {\n                    // TODO: Set fullscreen in ApplyChanges()\n                    GraphicsDeviceManager gdm = (GraphicsDeviceManager)deviceManager;\n                    this.ForceSetFullScreen(gdm.IsFullScreen);\n                }\n            }\n\n            if (_game != null)\n            {\n                if (_orientationListener.CanDetectOrientation())\n                    _orientationListener.Enable();\n            }\n        }\n\n        void Activity_Paused(object sender, EventArgs e)\n        {\n            if (_isActivated)\n            {\n                _isActivated = false;\n                OnDeactivated();\n            }\n\n            _mediaPlayer_PrevState = MediaPlayer.State;\n            _appState = AndroidGameWindow.AppState.Paused;\n            this.GameView.ClearFocus();\n            Microsoft.Xna.Platform.Audio.AudioService.Suspend();\n            if (_activity.AutoPauseAndResumeMediaPlayer)\n                MediaPlayer.Pause();\n\n            if (_orientationListener.CanDetectOrientation())\n                _orientationListener.Disable();\n        }\n\n        void Activity_Destroyed(object sender, EventArgs e)\n        {\n            _screenReceiver.Unlocked -= ScreenReceiver_Unlocked;\n            _screenReceiver.Locked -= ScreenReceiver_Locked;\n            _activity.UnregisterReceiver(_screenReceiver);\n            _screenReceiver.IsScreenLocked = false;\n\n            _orientationListener = null;\n\n            if (_game != null)\n            {\n                _game.Dispose();\n            }\n\n        }\n\n        private void Activity_WindowFocused(object sender, EventArgs e)\n        {\n            if (!_isActivated)\n            {\n                _isActivated = true;\n                OnActivated();\n            }\n        }\n\n        private void Activity_WindowUnfocused(object sender, EventArgs e)\n        {\n            if (_isActivated)\n            {\n                _isActivated = false;\n                OnDeactivated();\n            }\n        }\n\n        internal void ForceSetFullScreen(bool _isFullScreen)\n        {\n            if (_isFullScreen)\n            {\n                _activity.Window.ClearFlags(WindowManagerFlags.ForceNotFullscreen);\n                _activity.Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen);\n            }\n            else\n            {\n                _activity.Window.SetFlags(WindowManagerFlags.ForceNotFullscreen, WindowManagerFlags.ForceNotFullscreen);\n            }\n        }\n\n        /// <summary>\n        /// Updates the screen orientation. Filters out requests for unsupported orientations.\n        /// </summary>\n        internal void SetOrientation(DisplayOrientation newOrientation, DisplayOrientation supported)\n        {\n            // If the new orientation is not supported, force a supported orientation\n            if ((newOrientation & supported) == 0)\n            {\n                if ((supported & DisplayOrientation.LandscapeLeft) != 0)\n                    newOrientation = DisplayOrientation.LandscapeLeft;\n                else if ((supported & DisplayOrientation.LandscapeRight) != 0)\n                    newOrientation = DisplayOrientation.LandscapeRight;\n                else if ((supported & DisplayOrientation.Portrait) != 0)\n                    newOrientation = DisplayOrientation.Portrait;\n                else if ((supported & DisplayOrientation.PortraitDown) != 0)\n                    newOrientation = DisplayOrientation.PortraitDown;\n            }\n\n            if (newOrientation != _currentOrientation)\n            {\n                // Android 2.3 and above support reverse orientations\n                int sdkVer = (int)Android.OS.Build.VERSION.SdkInt;\n                if (sdkVer < 10)\n                {\n                    if (newOrientation == DisplayOrientation.LandscapeRight)\n                        newOrientation = DisplayOrientation.LandscapeLeft;\n                    if (newOrientation == DisplayOrientation.PortraitDown)\n                        newOrientation = DisplayOrientation.PortraitDown;\n                }\n\n                if ((newOrientation & supported) != 0)\n                {\n                    _currentOrientation = newOrientation;\n                    _activity.RequestedOrientation = XnaOrientationToAndroid(newOrientation);\n\n                    OnOrientationChanged();\n                }\n            }\n        }\n\n        public override string ScreenDeviceName\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n\n        public override Rectangle ClientBounds\n        {\n            get\n            {\n                return _clientBounds;\n            }\n        }\n\n\n        private void GameView_LayoutChange(object sender, View.LayoutChangeEventArgs e)\n        {\n            Rectangle bounds = new Rectangle(\n                GameView.Left, GameView.Top,\n                GameView.Width, GameView.Height);\n\n            if (bounds != _clientBounds)\n            {\n                _clientBounds = bounds;\n                OnClientSizeChanged();\n\n                Android.Util.Log.Debug(\"Kni\", \"GameWindow.ChangeClientBounds: newClientBounds=\" + this.ClientBounds.Width + \",\" + this.ClientBounds.Height);\n\n                // Set the new display size on the touch panel.\n                TouchPanel.DisplayWidth = this.ClientBounds.Width;\n                TouchPanel.DisplayHeight = this.ClientBounds.Height;\n            }\n        }\n\n        public override bool AllowUserResizing\n        {\n            get { return false; }\n            set { /* Ignore */ }\n        }\n\n        // A copy of ScreenOrientation from Android 2.3\n        // This allows us to continue to support 2.2 whilst\n        // utilising the 2.3 improved orientation support.\n        enum ScreenOrientationAll\n        {\n            Unspecified = -1,\n            Landscape = 0,\n            Portrait = 1,\n            User = 2,\n            Behind = 3,\n            Sensor = 4,\n            Nosensor = 5,\n            SensorLandscape = 6,\n            SensorPortrait = 7,\n            ReverseLandscape = 8,\n            ReversePortrait = 9,\n            FullSensor = 10,\n        }\n\n        public override DisplayOrientation CurrentOrientation\n        {\n            get\n            {\n                return _currentOrientation;\n            }\n        }\n\n        private static ScreenOrientation XnaOrientationToAndroid(DisplayOrientation value)\n        {\n            switch (value)\n            {\n                case DisplayOrientation.LandscapeLeft:\n                    return (ScreenOrientation)ScreenOrientationAll.Landscape;\n                case DisplayOrientation.LandscapeRight:\n                    return (ScreenOrientation)ScreenOrientationAll.ReverseLandscape;\n                case DisplayOrientation.Portrait:\n                    return (ScreenOrientation)ScreenOrientationAll.Portrait;\n                case DisplayOrientation.PortraitDown:\n                    return (ScreenOrientation)ScreenOrientationAll.ReversePortrait;\n\n                default:\n                    return ScreenOrientation.Unspecified;\n            }\n        }\n\n        public void Dispose()\n        {\n            if (_activity != null)\n            {\n                _activity.Paused -= Activity_Paused;\n                _activity.Resumed -= Activity_Resumed;\n                _activity.Destroyed -= Activity_Destroyed;\n\n                _activity.WindowFocused -= Activity_WindowFocused;\n                _activity.WindowUnfocused -= Activity_WindowUnfocused;\n\n                _activity = null;\n            }\n\n            _appState = AndroidGameWindow.AppState.Exited;\n\n            if (GameView != null)\n            {\n                if (Mouse.WindowHandle == this.Handle)\n                    Mouse.WindowHandle = IntPtr.Zero;\n                if (TouchPanel.WindowHandle == this.Handle)\n                    TouchPanel.WindowHandle = IntPtr.Zero;\n\n                GameView.LayoutChange -= GameView_LayoutChange;\n\n                GameView.Dispose();\n                GameView = null;\n            }\n            \n            _instances.Remove(this.Handle);\n        }\n\n        protected override void SetTitle(string title)\n        {\n        }\n\n        internal void StartGameLoop()\n        {\n            _runner.InitLoopHandler();\n            _runner.RequestFrame();\n        }\n\n        internal void OnTick(object sender, EventArgs args)\n        {\n            try\n            {\n                RunStep(); // tick\n            }\n            finally\n            {\n                // request next tick\n                if (_appState == AndroidGameWindow.AppState.Resumed)\n                    _runner.RequestFrame();\n            }\n        }\n\n        private void RunStep()\n        {\n            switch (_appState)\n            {\n                case AndroidGameWindow.AppState.Resumed:\n                    if (GameView._isAndroidSurfaceAvailable) // do not run game if surface is not available\n                    {\n                        _orientationListener.Update();\n\n                        if (!_screenReceiver.IsScreenLocked) // do not run game if Screen is Locked\n                        {\n                            if (_game != null)\n                            {\n                                ((IPlatformGame)_game).GetStrategy<ConcreteGame>().OnFrameTick();\n                            }\n                        }\n                    }\n                    break;\n\n                case AndroidGameWindow.AppState.Paused:\n                    break;\n\n                case AndroidGameWindow.AppState.Exited:\n                    break;\n\n                default:\n                    throw new InvalidOperationException(\"currentState\");\n            }\n\n            return;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/AndroidSurfaceView.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Input;\nusing Android.Content;\nusing Android.Media;\nusing Android.Util;\nusing Android.Views;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    [CLSCompliant(false)]\n    public class AndroidSurfaceView : SurfaceView\n        , ISurfaceView\n        , ISurfaceHolderCallback\n    {\n        ISurfaceHolder _surfaceHolder;\n\n        internal bool _isAndroidSurfaceAvailable = false;\n\n\n        public AndroidSurfaceView(Context context)\n            : base(context)\n        {\n            // default\n            _surfaceHolder = Holder;\n            // Add callback to get the SurfaceCreated etc events\n            _surfaceHolder.AddCallback((ISurfaceHolderCallback)this);\n\n            // Holder.SetType is deprecated. The SurfaceType value is ignored.\n            if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Honeycomb)\n                _surfaceHolder.SetType(SurfaceType.Gpu);\n        }\n\n        void ISurfaceHolderCallback.SurfaceCreated(ISurfaceHolder holder)\n        {\n            Log.Debug(\"AndroidSurfaceView\", \"SurfaceCreated\");\n\n            _isAndroidSurfaceAvailable = true;\n\n            var handler = _surfaceCreatedEvent;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        void ISurfaceHolderCallback.SurfaceChanged(ISurfaceHolder holder, global::Android.Graphics.Format format, int width, int height)\n        {\n            Log.Debug(\"AndroidSurfaceView\", \"SurfaceChanged: width=\" + width + \", height=\" + height + \", format=\" + format.ToString());\n\n            var handler = _surfaceChangedEvent;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n\n        void ISurfaceHolderCallback.SurfaceDestroyed(ISurfaceHolder holder)\n        {\n            Log.Debug(\"AndroidSurfaceView\", \"SurfaceDestroyed\");\n\n            _isAndroidSurfaceAvailable = false;\n\n            var handler = _surfaceDestroyedEvent;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n        #region Key and Motion\n\n        public override bool OnKeyDown(Keycode keyCode, KeyEvent e)\n        {\n            bool handled = false;\n            if (((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().OnKeyDown(keyCode, e))\n                return true;\n\n            handled = ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().KeyDown(keyCode);\n\n            // we need to handle the Back key here because it doesn't work any other way\n            if (keyCode == Keycode.Back)\n            {\n                ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().Back = true;\n                handled = true;\n            }\n\n            if (keyCode == Keycode.VolumeUp)\n            {\n                AudioManager audioManager = (AudioManager)Context.GetSystemService(Context.AudioService);\n                audioManager.AdjustStreamVolume(Stream.Music, Adjust.Raise, VolumeNotificationFlags.ShowUi);\n                return true;\n            }\n\n            if (keyCode == Keycode.VolumeDown)\n            {\n                AudioManager audioManager = (AudioManager)Context.GetSystemService(Context.AudioService);\n                audioManager.AdjustStreamVolume(Stream.Music, Adjust.Lower, VolumeNotificationFlags.ShowUi);\n                return true;\n            }\n\n            return handled;\n        }\n\n        public override bool OnKeyUp(Keycode keyCode, KeyEvent e)\n        {\n            if (keyCode == Keycode.Back)\n                ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().Back = false;\n            if (((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().OnKeyUp(keyCode, e))\n                return true;\n            return ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().KeyUp(keyCode);\n        }\n\n        public override bool OnGenericMotionEvent(MotionEvent e)\n        {\n            if (((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().OnGenericMotionEvent(e))\n                return true;\n\n            if ((e.Source & InputSourceType.Mouse) == InputSourceType.Mouse)\n            {\n                if (((IPlatformMouse)Mouse.Current).GetStrategy<ConcreteMouse>().OnGenericMotionEvent(e))\n                    return true;\n            }\n\n            return base.OnGenericMotionEvent(e);\n        }\n\n        #endregion\n\n\n        #region ISurfaceView\n\n        private event EventHandler<EventArgs> _surfaceCreatedEvent;\n        private event EventHandler<EventArgs> _surfaceChangedEvent;\n        private event EventHandler<EventArgs> _surfaceDestroyedEvent;\n\n        event EventHandler<EventArgs> ISurfaceView.SurfaceCreated\n        {\n            add { _surfaceCreatedEvent += value; }\n            remove { _surfaceCreatedEvent -= value; }\n        }\n\n        event EventHandler<EventArgs> ISurfaceView.SurfaceChanged\n        {\n            add { _surfaceChangedEvent += value; }\n            remove { _surfaceChangedEvent -= value; }\n        }\n\n        event EventHandler<EventArgs> ISurfaceView.SurfaceDestroyed\n        {\n            add { _surfaceDestroyedEvent += value; }\n            remove { _surfaceDestroyedEvent -= value; }\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/ConcreteGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Media;\nusing Android.Views;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    sealed class ConcreteGame : GameStrategy\n    {\n        private static ConcreteGame _concreteGameInstance = null;\n        internal static ConcreteGame GameConcreteInstance { get { return ConcreteGame._concreteGameInstance; } }\n\n        private AndroidGameWindow _gameWindow;\n\n        public ConcreteGame(Game game) : base(game)\n        {\n            ConcreteGame._concreteGameInstance = this;\n\n            System.Diagnostics.Debug.Assert(AndroidGameWindow.Activity != null, \"Must set Game.Activity before creating the Game instance\");\n            this.Services.AddService(typeof(Android.App.Activity), AndroidGameWindow.Activity);\n\n            _gameWindow = new AndroidGameWindow(AndroidGameWindow.Activity, game);\n            base.Window = _gameWindow;\n            base.SetWindowListeners();\n\n            Services.AddService(typeof(View), _gameWindow.GameView);\n\n            ConcreteMediaLibraryStrategy.Context = AndroidGameWindow.Activity;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            AndroidGameWindow.Activity = null;\n\n            base.Dispose(disposing);\n        }\n\n\n        public override void Exit()\n        {\n            throw new PlatformNotSupportedException(\"Android platform does not allow programmatically closing.\");\n        }\n\n        public override void TickExiting()\n        {\n            // Android games do not \"exit\" or shut down.\n            throw new PlatformNotSupportedException();\n        }\n        \n        protected override void Run()\n        {\n            StartGameLoop();\n            // Prevent the default run loop from starting.\n            // We will run the loop from the GameView's IRunnable.Run().\n            return;\n\n            // StartRunLoop\n            //_gameWindow.GameView.Resume();\n\n            //this.CallEndRun();\n            //this.DoExiting();\n        }\n\n        private void StartGameLoop()\n        {\n            _gameWindow.StartGameLoop();\n        }\n\n        private void OnFrameTickBegin()\n        {\n            this.CallInitialize();\n            this.CallBeginRun();\n            // XNA runs one Update even before showing the window\n            this.CallUpdate(new GameTime());\n        }\n\n        bool _isReadyToRun = false;\n        internal void OnFrameTick()\n        {\n            if (_isReadyToRun == false)\n            {\n                OnFrameTickBegin();\n                _isReadyToRun = true;\n            }\n\n            if (AndroidGameWindow.Activity.IsActivityActive)\n            {\n                this.Game.Tick();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/ConcreteGameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteGameFactory : GameFactory\n    {\n\n        public override GameStrategy CreateGameStrategy(Game game)\n        {\n            return new ConcreteGame(game);\n        }\n\n        public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game)\n        {\n            return new ConcreteGraphicsDeviceManager(game);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Game/.Android/ConcreteGraphicsDeviceManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Graphics;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy\n    {\n        public ConcreteGraphicsDeviceManager(Game game) : base(game)\n        {\n            var clientBounds = base.Game.Window.ClientBounds;\n            // Preferred buffer width/height is used to determine default supported orientations,\n            // so set the default values to match Xna behaviour of landscape only by default.\n            // Note also that it's using the device window dimensions.\n            base.PreferredBackBufferWidth = Math.Max(clientBounds.Width, clientBounds.Height);\n            base.PreferredBackBufferHeight = Math.Min(clientBounds.Height, clientBounds.Width);\n\n            this.Game.Window.OrientationChanged += GameWindow_OrientationChanged;\n\n        }\n\n        public override bool PreferHalfPixelOffset\n        {\n            get { return base.PreferHalfPixelOffset; }\n            set\n            {\n                //TODO: move the check in ApplyChanges\n                if (base.GraphicsDevice != null)\n                    throw new InvalidOperationException(\"Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice.\");\n\n                base.PreferHalfPixelOffset = value;\n            }\n        }\n\n        public override bool IsFullScreen\n        {\n            get\n            {\n                if (base.GraphicsDevice != null)\n                    return base.GraphicsDevice.PresentationParameters.IsFullScreen;\n\n                return base.IsFullScreen;\n            }\n            set\n            {\n                base.IsFullScreen = value;\n\n                if (base.GraphicsDevice != null)\n                    base.GraphicsDevice.PresentationParameters.IsFullScreen = value;\n\n                if (base.GraphicsDevice != null)\n                {\n                    // TODO: Set fullscreen in ApplyChanges()\n                    IntPtr windowHandle = base.GraphicsDevice.PresentationParameters.DeviceWindowHandle;\n                    AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(windowHandle);\n                    gameWindow.ForceSetFullScreen(base.IsFullScreen);\n                }\n            }\n        }\n\n        public override DisplayOrientation SupportedOrientations\n        {\n            get { return base.SupportedOrientations; }\n            set { base.SupportedOrientations = value; }\n        }\n\n        public override void ToggleFullScreen()\n        {\n            this.IsFullScreen = !this.IsFullScreen;\n            //ApplyChanges();\n        }\n\n        public override void CreateDevice()\n        {\n            PresentationParameters pp = new PresentationParameters();\n            pp.MultiSampleCount = (this.PreferMultiSampling) ? 4 : 1;\n            pp.BackBufferFormat = this.PreferredBackBufferFormat;\n            pp.DepthStencilFormat = this.PreferredDepthStencilFormat;\n            pp.BackBufferWidth = 800;\n            pp.BackBufferHeight = 480;\n\n            // force \"full screen\" as default on Android\n            pp.IsFullScreen = true;\n            \n            pp.DeviceWindowHandle = this.Game.Window.Handle;\n\n            GraphicsDeviceInformation gdi = new GraphicsDeviceInformation();\n            gdi.GraphicsProfile = this.GraphicsProfile;\n            gdi.Adapter = GraphicsAdapter.DefaultAdapter;\n            gdi.PresentationParameters = pp;\n            var pe = new PreparingDeviceSettingsEventArgs(gdi);\n\n            this.OnPreparingDeviceSettings(pe);\n\n            pp = gdi.PresentationParameters;\n            this.GraphicsProfile = gdi.GraphicsProfile;\n\n            AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window;\n            View surfaceView = androidGameWindow.GameView;\n\n            pp.DisplayOrientation = base.Game.Window.CurrentOrientation;\n\n            pp.BackBufferWidth = surfaceView.Width;\n            pp.BackBufferHeight = surfaceView.Height;\n\n            this.GraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile, this.PreferHalfPixelOffset, pp);\n\n            // ApplyChanges\n            {\n                TouchPanel.DisplayWidth = base.GraphicsDevice.PresentationParameters.BackBufferWidth;\n                TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight;\n            }\n\n            // TODO: In XNA this seems to be done as part of the GraphicsDevice.DeviceReset event...\n            //       we need to get those working.\n            TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation;\n\n            this.OnDeviceCreated(EventArgs.Empty);\n\n\n            Android.App.Activity activity = AndroidGameWindow.Activity;\n            DisplayOrientation currentOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(activity);\n            DisplayOrientation supported2 = this.SupportedOrientations;\n            if (supported2 == DisplayOrientation.Default)\n            {\n                if (this.PreferredBackBufferWidth <= this.PreferredBackBufferHeight)\n                    supported2 = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown);\n                else\n                    supported2 = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight);\n            }\n            androidGameWindow.SetOrientation(currentOrientation, supported2);\n\n        }\n\n        private void GameWindow_OrientationChanged(object sender, EventArgs e)\n        {\n            if (GraphicsDevice != null)\n            {\n                AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window;\n                View surfaceView = androidGameWindow.GameView;\n\n                base.GraphicsDevice.PresentationParameters.DisplayOrientation = base.Game.Window.CurrentOrientation;\n\n                base.GraphicsDevice.PresentationParameters.BackBufferWidth = surfaceView.Width;\n                base.GraphicsDevice.PresentationParameters.BackBufferHeight = surfaceView.Height;\n\n                if (!((IPlatformGraphicsContext)((IPlatformGraphicsDevice)base.GraphicsDevice).Strategy.MainContext).Strategy.IsRenderTargetBound)\n                {\n                    PresentationParameters pp = this.GraphicsDevice.PresentationParameters;\n                    base.GraphicsDevice.Viewport = new Viewport(0, 0, pp.BackBufferWidth, pp.BackBufferHeight);\n                    base.GraphicsDevice.ScissorRectangle = new Rectangle(0, 0, pp.BackBufferWidth, pp.BackBufferHeight);\n                }\n\n                TouchPanel.DisplayWidth  = base.GraphicsDevice.PresentationParameters.BackBufferWidth;\n                TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight;\n                TouchPanel.DisplayOrientation = base.GraphicsDevice.PresentationParameters.DisplayOrientation;\n            }\n\n        }\n\n        public override void ApplyChanges()\n        {\n            if (base.GraphicsDevice == null)\n            {\n                // TODO: Calling ApplyChanges() before Game.Initialize() should create the device.\n                System.Diagnostics.Debug.Assert(false);\n                //this.CreateDevice();\n                return;\n            }\n\n            AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window;\n            View surfaceView = androidGameWindow.GameView;\n\n            // Trigger a change in orientation in case the supported orientations have changed\n            DisplayOrientation supported = this.SupportedOrientations;\n            if (supported == DisplayOrientation.Default)\n            {\n                if (this.PreferredBackBufferWidth <= this.PreferredBackBufferHeight)\n                    supported = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown);\n                else\n                    supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight);\n            }\n            androidGameWindow.SetOrientation(base.Game.Window.CurrentOrientation, supported);\n\n        }\n\n\n        #region IGraphicsDeviceManager strategy\n\n        public override bool BeginDraw()\n        {\n            //return base.BeginDraw();\n\n            return true;\n        }\n\n        public override void EndDraw()\n        {\n#if OCULUS\n            return; // On Oculus, do not Present() the backbuffer.\n#endif\n\n            //base.EndDraw();\n\n            GraphicsDevice device = this.GraphicsDevice;\n            if (device != null)\n            {\n                device.Present();\n            }\n        }\n\n        #endregion IGraphicsDeviceManager strategy\n\n\n        protected override void Dispose(bool disposing)\n        {\n            base.Dispose(disposing);\n\n            if (disposing)\n            {\n                if (base.Game != null && base.Game.Window != null)\n                {\n                    base.Game.Window.OrientationChanged -= GameWindow_OrientationChanged;\n                }\n\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/ISurfaceView.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Javax.Microedition.Khronos.Egl;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    interface ISurfaceView\n    {\n\n        public event EventHandler<EventArgs> SurfaceCreated;\n        public event EventHandler<EventArgs> SurfaceChanged;\n        public event EventHandler<EventArgs> SurfaceDestroyed;\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/OrientationListener.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform;\nusing Android.App;\nusing Android.Content;\nusing Android.Hardware;\nusing Android.Views;\nusing Android.Provider;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    internal class OrientationListener : OrientationEventListener\n    {\n        private AndroidGameWindow _gameWindow;\n\n        internal DisplayOrientation targetOrientation = DisplayOrientation.Unknown;\n        DateTime prevTickTime = DateTime.Now;\n        TimeSpan elapsed = TimeSpan.Zero;\n\n        /// <summary>\n        /// Constructor. SensorDelay.Ui is passed to the base class as this orientation listener \n        /// is just used for flipping the screen orientation, therefore high frequency data is not required.\n        /// </summary>\n        public OrientationListener(AndroidGameWindow gameWindow, Context context)\n            : base(context, SensorDelay.Ui)\n        {\n            this._gameWindow = gameWindow;\n        }\n\n        public override void OnOrientationChanged(int orientation)\n        {\n            if (orientation == OrientationEventListener.OrientationUnknown)\n            {                \n                targetOrientation = DisplayOrientation.Unknown;\n                elapsed = TimeSpan.Zero;\n                return;\n            }\n\n            // Avoid changing orientation whilst the screen is locked\n            if (_gameWindow._screenReceiver.IsScreenLocked)\n                return;\n\n            DisplayOrientation absOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(orientation);\n\n            GraphicsDeviceManager deviceManager = (_gameWindow._game.Services.GetService(typeof(IGraphicsDeviceManager)) as GraphicsDeviceManager);\n            if (deviceManager != null)\n            {\n                DisplayOrientation supported = deviceManager.SupportedOrientations;\n                if (supported == DisplayOrientation.Default)\n                {\n                    if (deviceManager.PreferredBackBufferWidth <= deviceManager.PreferredBackBufferHeight)\n                        supported = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown);\n                    else\n                        supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight);\n                }\n\n                if ((supported & absOrientation) == 0)\n                {\n                    targetOrientation = DisplayOrientation.Unknown;\n                    elapsed = TimeSpan.Zero;\n                    return;\n                }\n            }\n\n            if (absOrientation == _gameWindow.CurrentOrientation\n            ||  absOrientation == DisplayOrientation.Unknown\n               )\n            {\n                targetOrientation = DisplayOrientation.Unknown;\n                elapsed = TimeSpan.Zero;\n                return;\n            }\n\n            // Delay changing of Orientation. Filter random shocks.\n            if (targetOrientation != absOrientation)\n            {\n                targetOrientation = absOrientation;\n                elapsed = TimeSpan.Zero;\n            }\n\n            return;\n        }\n        \n        internal void Update()\n        {\n            DateTime currTickTime = DateTime.Now;\n            TimeSpan elapsedTime = TimeSpan.Zero;\n            if (prevTickTime.Ticks != 0)\n            {\n                elapsedTime = (currTickTime - prevTickTime);\n                if (elapsedTime.TotalMilliseconds < 0)\n                    elapsedTime = TimeSpan.Zero;\n            }\n            prevTickTime = currTickTime;\n\n            try\n            {\n                if (targetOrientation != DisplayOrientation.Unknown)\n                {\n                    elapsed += elapsedTime;\n                    // orientation must be stable for 0.5 seconds before changing.\n                    if (elapsed.TotalSeconds > 0.5)\n                    {\n                        GraphicsDeviceManager deviceManager = (_gameWindow._game.Services.GetService(typeof(IGraphicsDeviceManager)) as GraphicsDeviceManager);\n                        if (deviceManager != null)\n                        {\n                            DisplayOrientation supported = deviceManager.SupportedOrientations;\n                            if (supported == DisplayOrientation.Default)\n                            {\n                                if (deviceManager.PreferredBackBufferWidth <= deviceManager.PreferredBackBufferHeight)\n                                    supported = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown);\n                                else\n                                    supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight);\n                            }\n                            _gameWindow.SetOrientation(targetOrientation, supported);\n\n                            targetOrientation = DisplayOrientation.Unknown;\n                            elapsed = TimeSpan.Zero;\n                        }\n                        else\n                        {\n                            DisplayOrientation supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight)\n                                                         | (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown)\n                                                         ;\n                            _gameWindow.SetOrientation(targetOrientation, supported);\n\n                            targetOrientation = DisplayOrientation.Unknown;\n                            elapsed = TimeSpan.Zero;\n                        }\n                    }\n                }\n            }\n            catch (Exception) { /* ignore */ }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/RunnableObject.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal class RunnableObject : Java.Lang.Object\n        , Java.Lang.IRunnable\n    {\n        private Android.OS.Handler _handler;\n        private int _frameRequests = 0;\n\n        public event EventHandler Tick;\n\n        public RunnableObject() : base()\n        {\n        }\n\n        public void InitLoopHandler()\n        {\n            Android.OS.Looper looper = Android.OS.Looper.MainLooper;\n            _handler = new Android.OS.Handler(looper);\n        }\n\n        public void RequestFrame()\n        {\n            if (_frameRequests == 0)\n            {\n                _handler.Post((Java.Lang.IRunnable)this);\n                _frameRequests++;\n            }\n        }\n\n        void Java.Lang.IRunnable.Run()\n        {\n            _frameRequests--;\n\n            var handler = Tick;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Android/ScreenReceiver.cs",
    "content": "using System;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform;\nusing Android.App;\nusing Android.Content;\nusing Android.Util;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    internal class ScreenReceiver : BroadcastReceiver\n    {\n        private AndroidGameActivity _activity;\n        private bool _isScreenLocked;\n\n\n        public event EventHandler Locked;\n        public event EventHandler Unlocked;\n\n\n        public bool IsScreenLocked\n        {\n            get { return _isScreenLocked; }\n            internal set { _isScreenLocked = value; }\n        }\n\n        public ScreenReceiver(AndroidGameActivity activity)\n        {\n            this._activity = activity;\n        }\n\n        public override void OnReceive(Context context, Intent intent)\n        {\n            Android.Util.Log.Info(\"Kni\", intent.Action.ToString());\n            if(intent.Action == Intent.ActionScreenOff)\n            {\n                OnLocked();\n            }\n            else if(intent.Action == Intent.ActionScreenOn)\n            {\n                // If the user turns the screen on just after it has automatically turned off, \n                // the keyguard will not have had time to activate and the ActionUserPreset intent\n                // will not be broadcast. We need to check if the lock is currently active\n                // and if not re-enable the game related functions.\n                // http://stackoverflow.com/questions/4260794/how-to-tell-if-device-is-sleeping\n                KeyguardManager keyguard = (KeyguardManager)context.GetSystemService(Context.KeyguardService);\n                if (!keyguard.InKeyguardRestrictedInputMode())\n                    OnUnlocked();\n            }\n            else if(intent.Action == Intent.ActionUserPresent)\n            {\n                // This intent is broadcast when the user unlocks the phone\n                OnUnlocked();\n            }\n\n            if (intent.Action == Android.Telephony.TelephonyManager.ActionPhoneStateChanged)\n            {\n                if (intent.Extras != null)\n                {\n                    string state = intent.GetStringExtra(Android.Telephony.TelephonyManager.ExtraState);\n                    if (state == Android.Telephony.TelephonyManager.ExtraStateRinging)\n                    {\n                        // TODO: Find a way to set Game.IsActive = false during a call.\n                        // View.ClearFocus() doesn't have any affect. \n                        // The best we can do currently is to sent the game to foreground.\n                        _activity.MoveTaskToBack(true);\n                    }\n                }\n            }\n        }\n\n        private void OnLocked()\n        {\n            _isScreenLocked = true;\n\n            var handler = Locked;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        private void OnUnlocked()\n        {\n            _isScreenLocked = false;\n\n            var handler = Locked;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Game/.Android/TouchEventListener.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    class TouchEventListener : Java.Lang.Object\n        , View.IOnTouchListener\n    {\n        public void SetTouchListener(GameWindow window)\n        {\n            GameWindow gameWindow = window;\n\n            AndroidGameWindow androidGameWindow = (AndroidGameWindow)gameWindow;\n            androidGameWindow.GameView.SetOnTouchListener(this);\n        }\n\n        bool View.IOnTouchListener.OnTouch(View v, MotionEvent e)\n        {\n            Vector2 position = Vector2.Zero;\n            position.X = e.GetX(e.ActionIndex);\n            position.Y = e.GetY(e.ActionIndex);\n            int id = e.GetPointerId(e.ActionIndex);\n\n            if ((e.Source & InputSourceType.Mouse) == InputSourceType.Mouse)\n            {\n                ((IPlatformMouse)Framework.Input.Mouse.Current).GetStrategy<ConcreteMouse>().OnTouchEvent(e);\n            }\n\n            switch (e.ActionMasked)\n            {\n                // DOWN\n                case MotionEventActions.Down:\n                case MotionEventActions.PointerDown:\n                    ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddPressedEvent(id, position);\n                    break;\n\n                // MOVE\n                case MotionEventActions.Move:\n                    for (int i = 0; i < e.PointerCount; i++)\n                    {\n                        id = e.GetPointerId(i);\n                        position.X = e.GetX(i);\n                        position.Y = e.GetY(i);\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddMovedEvent(id, position);\n                    }\n                    break;\n\n                // UP\n                case MotionEventActions.Up:\n                case MotionEventActions.PointerUp:\n                    ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddReleasedEvent(id, position);\n                    break;\n\n                // OUTSIDE\n                case MotionEventActions.Outside:\n                    for (int i = 0; i < e.PointerCount; i++)\n                    {\n                        id = e.GetPointerId(i);\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddReleasedEvent(id, position);\n                    }\n                    break;\n\n                // CANCEL\n                case MotionEventActions.Cancel:\n                    for (int i = 0; i < e.PointerCount; i++)\n                    {\n                        id = e.GetPointerId(i);\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddCanceledEvent(id, position);\n                    }\n                    break;\n            }\n\n            return true;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Blazor/BlazorGameWindow.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform;\nusing nkast.Wasm.Canvas;\nusing nkast.Wasm.Dom;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Framework\n{\n    // TODO: BlazorGameWindow should be internal\n    public class BlazorGameWindow : GameWindow, IDisposable\n    {\n        private static Dictionary<IntPtr, BlazorGameWindow> _instances = new Dictionary<IntPtr, BlazorGameWindow>();\n\n        internal static BlazorGameWindow FromHandle(IntPtr handle)\n        {\n            return _instances[handle];\n        }\n\n        private Window _window;\n        private ConcreteGame _concreteGame;\n\n        private bool _isResizable;\n        private bool _isBorderless;\n        private bool _isMouseHidden;\n        private bool _isMouseInBounds;\n\n        private readonly List<Keys> _keys = new List<Keys>();\n\n        private Point _locationBeforeFullScreen;\n\n        // flag to indicate that we're switching to/from full screen and should ignore resize events\n        private bool _switchingFullScreen;\n\n\n\n\n        #region Internal Properties\n\n\n        #endregion\n\n        #region Public Properties\n\n        public override IntPtr Handle { get { return new IntPtr(_window.Uid); } }\n\n        public override string ScreenDeviceName { get { return String.Empty; } }\n\n        public override Rectangle ClientBounds\n        {\n            get\n            {\n                return new Rectangle(0, 0, _canvas.Width, _canvas.Height);\n            }\n        }\n\n        public override bool AllowUserResizing\n        {\n            get { return _isResizable; }\n            set\n            {\n                if (_isResizable == value)\n                    return;\n\n                _isResizable = value;\n\n                if (!_isBorderless)\n                {\n                }\n            }\n        }\n\n        public override bool IsBorderless\n        {\n            get { return _isBorderless; }\n            set\n            {\n                if (_isBorderless == value)\n                    return;\n\n                _isBorderless = value;\n\n                if (!_isBorderless)\n                {\n                }\n            }\n        }\n\n        public override DisplayOrientation CurrentOrientation\n        {\n            get { return DisplayOrientation.Default; }\n        }\n\n\n        public bool IsFullScreen { get; private set; }\n        public bool HardwareModeSwitch { get; private set; }\n\n        #endregion\n\n        internal Canvas _canvas { get; private set; }\n        internal Window wasmWindow { get { return _window; } }\n\n        internal BlazorGameWindow(ConcreteGame concreteGame)\n        {\n            _concreteGame = concreteGame;\n\n            _window = Window.Current;\n            _canvas = _window.Document.GetElementById<Canvas>(\"theCanvas\");\n            _instances.Add(this.Handle, this);\n\n            ChangeClientSize(GraphicsDeviceManager.DefaultBackBufferWidth, GraphicsDeviceManager.DefaultBackBufferHeight);\n\n            SetIcon();\n\n            // Capture mouse events.\n            if (Mouse.WindowHandle == IntPtr.Zero)\n                Mouse.WindowHandle = this.Handle;\n            //Form.MouseEnter += OnMouseEnter;\n            //Form.MouseLeave += OnMouseLeave;\n\n            // Capture touch events.\n            if (TouchPanel.WindowHandle == IntPtr.Zero)\n                TouchPanel.WindowHandle = this.Handle;\n            _window.OnTouchStart += (object sender, float x, float y, int identifier) =>\n            {\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddPressedEvent(identifier, new Vector2(x, y));\n            };\n            _window.OnTouchMove += (object sender, float x, float y, int identifier) =>\n            {\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddMovedEvent(identifier, new Vector2(x, y));\n            };\n            _window.OnTouchEnd += (object sender, float x, float y, int identifier) =>\n            {\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddReleasedEvent(identifier, new Vector2(x, y));\n            };\n            _window.OnTouchCancel += (object sender) =>\n            {\n                // TODO: Implement TouchEvent.ChangedTouches and call TouchPanelStrategy.AddCanceledEvent(...)\n                //       instead of InvalidateTouches().\n                //       see: https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/changedTouches\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().BlazorCancelAllTouches();\n            };\n\n            // keyboard events\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().SetKeys(_keys);\n            _window.OnKeyDown += (object sender, char key, int keyCode, int location) =>\n            {\n                Keys xnakey = (Keys)keyCode;\n\n                // map special keys\n                switch (keyCode)\n                {\n                    case 16:\n                        xnakey = (location == 2) ? Keys.RightShift: Keys.LeftShift;\n                        break;\n                    case 17:\n                        xnakey = (location == 2) ? Keys.RightControl : Keys.LeftControl;\n                        break;\n                    case 18:\n                        xnakey = (location == 2) ? Keys.RightAlt : Keys.LeftAlt;\n                        break;\n                }\n\n                if (!_keys.Contains(xnakey))\n                    _keys.Add(xnakey);\n\n                OnKeyDown(xnakey);\n\n                if (IsTextInputAttached())\n                {\n                    bool controlKeyBlocksTextInput = false;\n                    for (int i = 0; i < _keys.Count; i++)\n                    {\n                        Keys keyToCheck = _keys[i];\n                        if (keyToCheck == Keys.LeftControl || keyToCheck == Keys.RightControl || keyToCheck == Keys.LeftAlt)\n                        {\n                            controlKeyBlocksTextInput = true;\n                            break;\n                        }\n                    }\n\n                    if (key != '\\0' && !controlKeyBlocksTextInput)\n                        OnTextInput(key, xnakey);\n                }\n            };\n            _window.OnKeyUp += (object sender, char key, int keyCode, int location) =>\n            {\n                Keys xnakey = (Keys)keyCode;\n                \n                // map special keys\n                switch (keyCode)\n                {\n                    case 16:\n                        xnakey = (location == 2) ? Keys.RightShift: Keys.LeftShift;\n                        break;\n                    case 17:\n                        xnakey = (location == 2) ? Keys.RightControl : Keys.LeftControl;\n                        break;\n                    case 18:\n                        xnakey = (location == 2) ? Keys.RightAlt : Keys.LeftAlt;\n                        break;\n                }\n\n                if (_keys.Contains(xnakey))\n                    _keys.Remove(xnakey);\n\n                OnKeyUp(xnakey);\n            };\n\n            _window.OnFocus += OnActivated;\n            _window.OnBlur += OnDeactivated;\n            // Form.Resize += OnResize;\n            //  Form.ResizeBegin += OnResizeBegin;\n            //  Form.ResizeEnd += OnResizeEnd;\n            _window.OnResize += OnResize;\n\n           // Form.KeyPress += OnKeyPress;\n        }\n\n        private void SetIcon()\n        {\n          \n        }\n\n        ~BlazorGameWindow()\n        {\n            Dispose(false);\n        }\n\n        private void OnActivated(object sender)\n        {\n            base.OnActivated();\n            //Keyboard.SetActive(true);\n        }\n\n        private void OnDeactivated(object sender)\n        {\n            _keys.Clear();\n\n            base.OnDeactivated();\n        }\n\n        private void OnMouseEnter(object sender, EventArgs e)\n        {\n            _isMouseInBounds = true;\n            if (!_concreteGame.IsMouseVisible && !_isMouseHidden)\n            {\n                _isMouseHidden = true;\n                //Cursor.Hide();\n            }\n        }\n\n        private void OnMouseLeave(object sender, EventArgs e)\n        {\n            _isMouseInBounds = false;\n            if (_isMouseHidden)\n            {\n                _isMouseHidden = false;\n                //Cursor.Show();\n            }\n        }\n\n        internal void OnResize(object sender)\n        {\n\n            UpdateBackBufferSize();\n\n            OnClientSizeChanged();\n        }\n\n        // TODO: move UpdateBackBufferSize() in graphicsDeviceManager\n        private void UpdateBackBufferSize()\n        {\n            GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager;\n            if (gdm != null)\n            {\n                if (gdm.GraphicsDevice == null)\n                    return;\n\n                _canvas.Width = _window.InnerWidth;\n                _canvas.Height = _window.InnerHeight;\n\n                int newWidth  = _canvas.Width;\n                int newHeight = _canvas.Height;\n                if (newWidth  != gdm.PreferredBackBufferWidth\n                ||  newHeight != gdm.PreferredBackBufferHeight)\n                {\n                    // Set the default new back buffer size\n                    gdm.PreferredBackBufferWidth = newWidth;\n                    gdm.PreferredBackBufferHeight = newHeight;\n                    gdm.ApplyChanges();\n                }\n            }\n        }\n\n        protected override void SetTitle(string title)\n        {\n            _window.Document.Title = title;\n        }\n\n        internal void ChangeClientSize(int width, int height)\n        {\n\n        }\n\n        #region Public Methods\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n               \n            }\n\n            if (Mouse.WindowHandle == this.Handle)\n                Mouse.WindowHandle = IntPtr.Zero;\n            if (TouchPanel.WindowHandle == this.Handle)\n                TouchPanel.WindowHandle = IntPtr.Zero;\n\n            _instances.Remove(this.Handle);\n            _canvas = null;\n\n            _concreteGame = null;\n        }\n\n        public void MouseVisibleToggled()\n        {\n            if (_concreteGame.IsMouseVisible)\n            {\n                if (_isMouseHidden)\n                {\n                    //Cursor.Show();\n                    _isMouseHidden = false;\n                }\n            }\n            else if (!_isMouseHidden && _isMouseInBounds)\n            {\n                //Cursor.Hide();\n                _isMouseHidden = true;\n            }\n        }\n\n        internal void OnPresentationChanged(PresentationParameters pp)\n        {\n            var raiseClientSizeChanged = false;\n            if (pp.IsFullScreen && pp.HardwareModeSwitch && IsFullScreen && HardwareModeSwitch)\n            {\n                if(_concreteGame.IsActive)\n                {\n                    // stay in hardware full screen, need to call ResizeTargets so the displaymode can be switched\n                   // _concreteGame.GraphicsDevice.ResizeTargets();\n                }\n                else\n                {\n                    // This needs to be called in case the user presses the Windows key while the focus is on the second monitor,\n                    //\twhich (sometimes) causes the window to exit fullscreen mode, but still keeps it visible\n                    MinimizeFullScreen();\n                }\n            }\n            else if (pp.IsFullScreen && (!IsFullScreen || pp.HardwareModeSwitch != HardwareModeSwitch))\n            {\n                EnterFullScreen(pp);\n                raiseClientSizeChanged = true;\n            }\n            else if (!pp.IsFullScreen && IsFullScreen)\n            {\n                ExitFullScreen();\n                raiseClientSizeChanged = true;\n            }\n\n            if (raiseClientSizeChanged)\n                OnClientSizeChanged();\n        }\n\n        #endregion\n\n        internal void EnterFullScreen(PresentationParameters pp)\n        {\n\n        }\n\n\n        private void ExitFullScreen()\n        {\n\n        }\n\n        private void MinimizeFullScreen()\n        {\n\n        }\n\n        internal void InitFocus()\n        {\n            if (this.wasmWindow.Document.HasFocus())\n                OnActivated();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Game/.Blazor/ConcreteGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    sealed class ConcreteGame : GameStrategy\n    {\n        //internal static string LaunchParameters;\n\n        private BlazorGameWindow _gameWindow;\n\n        // this disable the Tick(), when we are in WebXR mode\n        // and running under XRSession.RequestAnimationFrame.\n        internal bool _suppressTick;\n\n        public ConcreteGame(Game game) : base(game)\n        {\n            _gameWindow = new BlazorGameWindow(this);\n            base.Window = _gameWindow;\n            base.SetWindowListeners();\n        }\n\n        protected override void Run()\n        {\n            this.CallInitialize();\n            this.CallBeginRun();\n            // XNA runs one Update even before showing the window\n            this.CallUpdate(new GameTime());\n\n            _gameWindow.InitFocus();\n\n            StartGameLoop();\n            return;\n\n            //this.CallEndRun();\n            //this.DoExiting();\n        }\n\n        private void StartGameLoop()\n        {\n            // request next frame\n        }\n\n        public override bool IsMouseVisible\n        {\n            get { return base.IsMouseVisible; }\n            set\n            {\n                if (base.IsMouseVisible != value)\n                {\n                    base.IsMouseVisible = value;\n                    _gameWindow.MouseVisibleToggled();\n                }\n            }\n        }\n        public override void Tick()\n        {\n            if (_suppressTick)\n                return;\n\n            base.Tick();\n        }\n\n        public override void Exit()\n        {\n            throw new PlatformNotSupportedException(\"BlazorGL platform does not allow programmatically closing.\");\n        }\n        \n        public override void TickExiting()\n        {\n            // BlazorGL games do not \"exit\" or shut down.\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_gameWindow != null)\n                {\n                    _gameWindow.Dispose();\n                    _gameWindow = null;\n                    Window = null;\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Blazor/ConcreteGameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteGameFactory : GameFactory\n    {\n\n        public override GameStrategy CreateGameStrategy(Game game)\n        {\n            return new ConcreteGame(game);\n        }\n\n        public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game)\n        {\n            return new ConcreteGraphicsDeviceManager(game);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Game/.Blazor/ConcreteGraphicsDeviceManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy\n    {\n\n        public ConcreteGraphicsDeviceManager(Game game) : base(game)\n        {\n            var clientBounds = base.Game.Window.ClientBounds;\n            base.PreferredBackBufferWidth = clientBounds.Width;\n            base.PreferredBackBufferHeight = clientBounds.Height;\n\n        }\n\n        public override bool PreferHalfPixelOffset\n        {\n            get { return base.PreferHalfPixelOffset; }\n            set\n            {\n                //TODO: move the check in ApplyChanges\n                if (base.GraphicsDevice != null)\n                    throw new InvalidOperationException(\"Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice.\");\n\n                base.PreferHalfPixelOffset = value;\n            }\n        }\n\n        public override bool IsFullScreen\n        {\n            get { return base.IsFullScreen; }\n            set { base.IsFullScreen = value; }\n        }\n\n        public override DisplayOrientation SupportedOrientations\n        {\n            get { return base.SupportedOrientations; }\n            set { base.SupportedOrientations = value; }\n        }\n\n        public override void ToggleFullScreen()\n        {\n            base.IsFullScreen = !base.IsFullScreen;\n            ApplyChanges();\n        }\n\n        public override void ApplyChanges()\n        {\n            if (this.GraphicsDevice == null)\n            {\n                this.CreateDevice();\n            }\n\n            // populates a gdi with settings in this gdm and allows users to override them with\n            // PrepareDeviceSettings event this information should be applied to the GraphicsDevice\n            var gdi = this.DoPreparingDeviceSettings();\n\n            if (gdi.GraphicsProfile != GraphicsDevice.GraphicsProfile)\n            {\n                // if the GraphicsProfile changed we need to create a new GraphicsDevice\n                this.GraphicsDevice.Dispose();\n                this.GraphicsDevice = null;\n\n                this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters);\n\n                // update the touchpanel display size when the graphicsdevice is reset\n                this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel;\n                ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform;\n\n                this.OnDeviceCreated(EventArgs.Empty);\n            }\n            else\n            {\n                GraphicsDevice.Reset(gdi.PresentationParameters);\n            }\n        }\n\n        /// <summary>\n        /// This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to\n        /// allow users to change the settings. Then returns that GraphicsDeviceInformation.\n        /// Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null.\n        /// </summary>\n        internal GraphicsDeviceInformation DoPreparingDeviceSettings()\n        {\n            var gdi = new GraphicsDeviceInformation();\n            gdi.Adapter = GraphicsAdapter.DefaultAdapter;\n            gdi.GraphicsProfile = GraphicsProfile;\n\n            PresentationParameters pp = new PresentationParameters();\n            pp.DepthStencilFormat = this.PreferredDepthStencilFormat;\n            pp.BackBufferFormat = this.PreferredBackBufferFormat;\n            pp.BackBufferWidth = this.PreferredBackBufferWidth;\n            pp.BackBufferHeight = this.PreferredBackBufferHeight;\n            pp.IsFullScreen = this.IsFullScreen;\n            pp.HardwareModeSwitch = this.HardwareModeSwitch;\n            pp.PresentationInterval = this.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate;\n            pp.DisplayOrientation = this.Game.Window.CurrentOrientation;\n            pp.DeviceWindowHandle = this.Game.Window.Handle;\n\n            // always initialize MultiSampleCount to the maximum, if users want to overwrite\n            // this they have to respond to the PreparingDeviceSettingsEvent and modify\n            // args.GraphicsDeviceInformation.PresentationParameters.MultiSampleCount\n            int maxMultiSampleCount = 0;\n            if (this.PreferMultiSampling)\n            {\n                if (GraphicsDevice != null)\n                {\n                    maxMultiSampleCount = ((IPlatformGraphicsDevice)GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)GraphicsDevice).Strategy.PresentationParameters.BackBufferFormat);\n                }\n                else\n                {\n                    maxMultiSampleCount = 32;\n                }\n            }\n            pp.MultiSampleCount = maxMultiSampleCount;\n\n            gdi.PresentationParameters = pp;\n            var args = new PreparingDeviceSettingsEventArgs(gdi);\n            this.OnPreparingDeviceSettings(args);\n\n            if (gdi.PresentationParameters == null || gdi.Adapter == null)\n                throw new NullReferenceException(\"Members should not be set to null in PreparingDeviceSettingsEventArgs\");\n\n            return gdi;\n        }\n\n        public override void CreateDevice()\n        {\n            if (this.GraphicsDevice != null)\n                return;\n\n            var gdi = this.DoPreparingDeviceSettings();\n\n            this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters);\n\n            // Set the new display size on the touch panel.\n            TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth;\n            TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight;\n            TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation;\n\n            // update the touchpanel display size when the graphicsdevice is reset\n            this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel;\n            ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform;\n\n            this.OnDeviceCreated(EventArgs.Empty);\n\n            PresentationParameters pp = this.GraphicsDevice.PresentationParameters;\n\n            BlazorGameWindow gameWindow = (BlazorGameWindow)Game.Window;\n\n            gameWindow.ChangeClientSize(pp.BackBufferWidth, pp.BackBufferHeight);\n\n            if (pp.IsFullScreen)\n            {\n                gameWindow.EnterFullScreen(pp);\n\n                if (!pp.HardwareModeSwitch)\n                {\n                    ConcreteGraphicsDevice cgd = ((IPlatformGraphicsDevice)this.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>();\n                    ((IPlatformGraphicsContext)cgd.MainContext).Strategy.ApplyRenderTargets(null);\n                }\n            }\n        }\n\n        private void GraphicsDevice_DeviceReset_UpdateTouchPanel(object sender, EventArgs eventArgs)\n        {\n            TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth;\n            TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight;\n            TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation;\n        }\n\n        private void GraphicsDevice_PresentationChanged_UpdateGamePlatform(object sender, PresentationEventArgs args)\n        {\n            PresentationParameters pp = args.PresentationParameters;\n\n            ((BlazorGameWindow)this.Game.Window).OnPresentationChanged(pp);\n        }\n\n\n        #region IGraphicsDeviceManager strategy\n\n        public override bool BeginDraw()\n        {\n            //return base.BeginDraw();\n\n            return true;\n        }\n\n        public override void EndDraw()\n        {\n            //base.EndDraw();\n\n            GraphicsDevice device = this.GraphicsDevice;\n            if (device != null)\n            {\n                device.Present();\n            }\n        }\n\n        #endregion IGraphicsDeviceManager strategy\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.CardboardLegacy/AndroidCompatibility.cs",
    "content": "using System;\nusing System.Linq;\nusing Android.App;\nusing Android.Content.Res;\nusing Android.OS;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Properties that change from how XNA works by default\n    /// </summary>\n    public class AndroidCompatibility\n    {\n        private static AndroidCompatibility _current;\n\n        /// <summary>\n        /// Because the Kindle Fire devices default orientation is fliped by 180 degrees from all the other android devices\n        /// on the market we need to do some special processing to make sure that LandscapeLeft is the correct way round.\n        /// This list contains all the Build.Model strings of the effected devices, it should be added to if and when\n        /// more devices exhibit the same issues.\n        /// </summary>\n        private readonly string[] Kindles = new[] { \"KFTT\", \"KFJWI\", \"KFJWA\", \"KFSOWI\", \"KFTHWA\", \"KFTHWI\", \"KFAPWA\", \"KFAPWI\" };\n\n        public bool FlipLandscape { get; private set; }\n\n        [CLSCompliant(false)]\n        public Orientation NaturalOrientation { get; private set; }\n\n\n        [CLSCompliant(false)]\n        public static AndroidCompatibility Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n                else\n                    throw new InvalidOperationException(\"Not initialized.\");\n            }\n        }\n\n        internal static void Initialize(Activity activity)\n        {\n            if (_current == null)\n                _current = new AndroidCompatibility(activity);\n        }\n\n        private AndroidCompatibility(Activity activity)\n        {\n            FlipLandscape = Kindles.Contains(Build.Model);\n            NaturalOrientation = GetDeviceNaturalOrientation(activity);\n        }\n\n        private Orientation GetDeviceNaturalOrientation(Activity activity)\n        {\n            // check if MainActivity setup is correct. \n            Android.Content.PM.ScreenOrientation screenOrientation = activity.RequestedOrientation;\n            if (screenOrientation != Android.Content.PM.ScreenOrientation.Landscape)\n                throw new InvalidOperationException(\"NaturalOrientation detection failed. Set ScreenOrientation in MainActivity to Landscape.\");\n\n            Orientation orientation = activity.Resources.Configuration.Orientation;\n            SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation;\n\n            switch (orientation)\n            {\n                case Orientation.Portrait:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Portrait;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Landscape;\n\n                            default:\n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n\n                case Orientation.Landscape:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Landscape;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Portrait;\n\n                            default:\n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n\n                default:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Portrait;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Portrait;\n\n                            default: \n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n            }\n        }\n\n        /// <summary>\n        /// Get the absolute orientation of the device, accounting for platform differences.\n        /// </summary>\n        /// <returns></returns>\n        [CLSCompliant(false)]\n        public DisplayOrientation GetAbsoluteOrientation(Activity activity)\n        {\n            Orientation orientation = activity.Resources.Configuration.Orientation;\n            SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation;\n\n            switch (orientation)\n            {\n                case Orientation.Portrait:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            default:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                return DisplayOrientation.Portrait;\n                            case SurfaceOrientation.Rotation180:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                return DisplayOrientation.PortraitDown;\n                            case SurfaceOrientation.Rotation90:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                return DisplayOrientation.PortraitDown;\n                            case SurfaceOrientation.Rotation270:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                return DisplayOrientation.Portrait;\n                        }\n                    }\n                    break;\n\n                case Orientation.Landscape:\n                default:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            default:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeRight;\n                                return DisplayOrientation.LandscapeLeft;\n                            case SurfaceOrientation.Rotation180:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeLeft;\n                                return DisplayOrientation.LandscapeRight;\n                            case SurfaceOrientation.Rotation90:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeRight;\n                                return DisplayOrientation.LandscapeLeft;\n                            case SurfaceOrientation.Rotation270:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeLeft;\n                                return DisplayOrientation.LandscapeRight;\n                        }\n                    }\n                    break;\n            }\n        }\n\n        internal DisplayOrientation GetAbsoluteOrientation(int degrees)\n        {\n            // Orientation is reported by the device in degrees compared to the natural orientation\n            // Some tablets have a natural landscape orientation, which we need to account for\n            if (NaturalOrientation == Orientation.Landscape)\n                degrees += 270;\n\n            // Round orientation into one of 8 positions, either 0, 45, 90, 135, 180, 225, 270, 315. \n            degrees = ( ((degrees + 22) / 45) * 45) % 360;\n\n            // Surprisingly 90 degree is landscape right, except on Kindle devices\n            switch (degrees)\n            {\n                case 0:\n                    return DisplayOrientation.Portrait;\n                case 180:\n                    return DisplayOrientation.PortraitDown;\n                case 90:\n                    if (FlipLandscape)\n                        return DisplayOrientation.LandscapeLeft;\n                    return DisplayOrientation.LandscapeRight;\n                case 270:\n                    if (FlipLandscape)\n                        return DisplayOrientation.LandscapeRight;\n                    return DisplayOrientation.LandscapeLeft;\n\n                default:\n                    return DisplayOrientation.Unknown;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.CardboardLegacy/AndroidGameActivity.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform;\nusing Android.App;\nusing Android.Content;\nusing Android.OS;\nusing Android.Views;\nusing VRCardboard = Com.Google.Vrtoolkit.Cardboard;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    [CLSCompliant(false)]\n    public class AndroidGameActivity : VRCardboard.CardboardActivity\n    {\n        public bool AutoPauseAndResumeMediaPlayer = true;\n\n\n        internal event EventHandler WindowFocused;\n        internal event EventHandler WindowUnfocused;\n\n        public event EventHandler Paused;\n        public event EventHandler Resumed;\n        internal event EventHandler Destroyed;\n\n\n        /// <summary>\n        /// OnCreate called when the activity is launched from cold or after the app\n        /// has been killed due to a higher priority app needing the memory\n        /// </summary>\n        /// <param name='savedInstanceState'>\n        /// Saved instance state.\n        /// </param>\n        protected override void OnCreate(Bundle savedInstanceState)\n        {\n            // Detection of NaturalOrientation. This must happend as soon as possible at start up.\n            AndroidCompatibility.Initialize(this);\n            \n            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.P)\n            {\n                // Enable drawing over the camera cutoff. Cardboard renderer requires the entire screen.\n                // fixes: [CardboardView] Surface size 2340x1036 does not match the expected screen size 2340x1080. Rendering is disabled.\n                Window.Attributes.LayoutInDisplayCutoutMode |= Android.Views.LayoutInDisplayCutoutMode.ShortEdges;\n            }\n            \n            RequestWindowFeature(WindowFeatures.NoTitle);\n            base.OnCreate(savedInstanceState);\n\n            AndroidGameWindow.Activity = this;\n        }\n\n        private bool _isActivityActive = false;\n        internal bool IsActivityActive { get { return _isActivityActive; } }\n\n\n        public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig)\n        {\n            base.OnConfigurationChanged(newConfig);\n        }\n\n        protected override void OnPause()\n        {\n            base.OnPause();\n\n            _isActivityActive = false;\n\n            var handler = Paused;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected override void OnResume()\n        {\n            base.OnResume();\n\n            _isActivityActive = true;\n\n            var handler = Resumed;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        public override void OnWindowFocusChanged(bool hasFocus)\n        {\n            base.OnWindowFocusChanged(hasFocus);\n\n            var handler = (hasFocus) ? WindowFocused : WindowUnfocused;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected override void OnDestroy()\n        {\n            var handler = Destroyed;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n\n            base.OnDestroy();\n        }\n    }\n\n    [CLSCompliant(false)]\n    public static class ActivityExtensions\n    {\n        public static ActivityAttribute GetActivityAttribute(this AndroidGameActivity obj)\n        {\t\t\t\n            var attr = obj.GetType().GetCustomAttributes(typeof(ActivityAttribute), true);\n            if (attr != null)\n            {\n                return ((ActivityAttribute)attr[0]);\n            }\n            return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Game/.CardboardLegacy/AndroidGameWindow.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Input.Touch;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\nusing VRCardboard = Com.Google.Vrtoolkit.Cardboard;\nusing Android.Content;\nusing Android.Content.PM;\nusing Android.OS;\nusing Android.Views;\nusing Android.Util;\nusing Android.Runtime;\nusing Javax.Microedition.Khronos.Egl;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    [CLSCompliant(false)]\n    public class AndroidGameWindow : GameWindow, IDisposable\n    {\n        // What is the state of the app.\n        internal enum AppState\n        {\n            Paused,\n            Resumed,\n            Exited,\n        }\n\n        private static Dictionary<IntPtr, AndroidGameWindow> _instances = new Dictionary<IntPtr, AndroidGameWindow>();\n\n        internal static AndroidGameWindow FromHandle(IntPtr windowHandle)\n        {\n            return _instances[windowHandle];\n        }\n\n        internal static AndroidGameActivity Activity { get; set; }\n\n        internal AndroidSurfaceView GameView { get; private set; }\n\n        internal AndroidGameActivity _activity;\n        internal readonly Game _game;\n        private bool _isActivated = false;\n        private AndroidGameWindow.AppState _appState = AndroidGameWindow.AppState.Exited;\n        MediaState _mediaPlayer_PrevState = MediaState.Stopped;\n\n        private Rectangle _clientBounds;\n        private DisplayOrientation _currentOrientation;\n\n        private OrientationListener _orientationListener;\n        internal ScreenReceiver _screenReceiver;\n        private TouchEventListener _touchEventListener;\n\n        public override IntPtr Handle { get { return GameView.Handle; } }\n\n        public AndroidGameWindow(AndroidGameActivity activity, Game game)\n        {\n            _activity = activity;\n            _game = game;\n\n            _activity.Paused += Activity_Paused;\n            _activity.Resumed += Activity_Resumed;\n            _activity.Destroyed += Activity_Destroyed;\n\n            _activity.WindowFocused += Activity_WindowFocused;\n            _activity.WindowUnfocused += Activity_WindowUnfocused;\n\n            Point size;\n            // GetRealSize() was defined in JellyBeanMr1 / API 17 / Android 4.2\n            if (Build.VERSION.SdkInt < BuildVersionCodes.JellyBeanMr1)\n            {\n                size.X = activity.Resources.DisplayMetrics.WidthPixels;\n                size.Y = activity.Resources.DisplayMetrics.HeightPixels;\n            }\n            else\n            {\n                Android.Graphics.Point p = new Android.Graphics.Point();\n                activity.WindowManager.DefaultDisplay.GetRealSize(p);\n                size.X = p.X;\n                size.Y = p.Y;\n            }\n\n            _clientBounds = new Rectangle(0, 0, size.X, size.Y);\n\n            // init _currentOrientation\n            DisplayOrientation currentOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(activity);\n            // Android 2.3 and above support reverse orientations\n            int sdkVer = (int)Android.OS.Build.VERSION.SdkInt;\n            if (sdkVer < 10)\n            {\n                if (currentOrientation == DisplayOrientation.LandscapeRight)\n                    currentOrientation = DisplayOrientation.LandscapeLeft;\n                if (currentOrientation == DisplayOrientation.PortraitDown)\n                    currentOrientation = DisplayOrientation.PortraitDown;\n            }\n            _currentOrientation = currentOrientation;\n            _activity.RequestedOrientation = XnaOrientationToAndroid(currentOrientation);\n            \n            GameView = new AndroidSurfaceView(activity, this);\n            GameView.LayoutChange += GameView_LayoutChange;\n\n            GameView.RequestFocus();\n            GameView.FocusableInTouchMode = true;\n\n            _instances.Add(this.Handle, this);\n\n            _orientationListener = new OrientationListener(this, _activity);\n\n            IntentFilter filter = new IntentFilter();\n            filter.AddAction(Intent.ActionScreenOff);\n            filter.AddAction(Intent.ActionScreenOn);\n            filter.AddAction(Intent.ActionUserPresent);\n            filter.AddAction(Android.Telephony.TelephonyManager.ActionPhoneStateChanged);\n            _screenReceiver = new ScreenReceiver(_activity);\n            _activity.RegisterReceiver(_screenReceiver, filter);\n            _screenReceiver.Unlocked += ScreenReceiver_Unlocked;\n            _screenReceiver.Locked += ScreenReceiver_Locked;\n\n            _touchEventListener = new TouchEventListener();\n            _touchEventListener.SetTouchListener(this);\n\n            if (Mouse.WindowHandle == IntPtr.Zero)\n                Mouse.WindowHandle = this.Handle;\n            if (TouchPanel.WindowHandle == IntPtr.Zero)\n                TouchPanel.WindowHandle = this.Handle;\n        }\n\n        private void ScreenReceiver_Unlocked(object sender, EventArgs e)\n        {\n            MediaPlayer.IsMuted = false;\n\n            _appState = AndroidGameWindow.AppState.Resumed;\n\n            try\n            {\n                if (!this.GameView.IsFocused)\n                    this.GameView.RequestFocus();\n            }\n            catch (Exception ex)\n            {\n                Log.Verbose(\"RequestFocus()\", ex.ToString());\n            }\n        }\n\n        private void ScreenReceiver_Locked(object sender, EventArgs e)\n        {\n            MediaPlayer.IsMuted = true;\n        }\n\n        void Activity_Resumed(object sender, EventArgs e)\n        {\n            if (!_isActivated)\n            {\n                _isActivated = true;\n                OnActivated();\n            }\n\n            _appState = AndroidGameWindow.AppState.Resumed;\n            try\n            {\n                if (!GameView.IsFocused)\n                    GameView.RequestFocus();\n            }\n            catch (Exception ex)\n            {\n                Log.Verbose(\"RequestFocus()\", ex.ToString());\n            }\n            Microsoft.Xna.Platform.Audio.AudioService.Resume();\n            if (_mediaPlayer_PrevState == MediaState.Playing && _activity.AutoPauseAndResumeMediaPlayer)\n                MediaPlayer.Resume();\n            if (!this.GameView.IsFocused)\n                this.GameView.RequestFocus();\n\n            if (_game != null)\n            {\n                IGraphicsDeviceManager deviceManager = (IGraphicsDeviceManager)_game.Services.GetService(typeof(IGraphicsDeviceManager));\n                if (deviceManager != null)\n                {\n                    // TODO: Set fullscreen in ApplyChanges()\n                    GraphicsDeviceManager gdm = (GraphicsDeviceManager)deviceManager;\n                    this.ForceSetFullScreen(gdm.IsFullScreen);\n                }\n            }\n\n            if (_game != null)\n            {\n                if (_orientationListener.CanDetectOrientation())\n                    _orientationListener.Enable();\n            }\n        }\n\n        void Activity_Paused(object sender, EventArgs e)\n        {\n            if (_isActivated)\n            {\n                _isActivated = false;\n                OnDeactivated();\n            }\n\n            _mediaPlayer_PrevState = MediaPlayer.State;\n            _appState = AndroidGameWindow.AppState.Paused;\n            this.GameView.ClearFocus();\n            Microsoft.Xna.Platform.Audio.AudioService.Suspend();\n            if (_activity.AutoPauseAndResumeMediaPlayer)\n                MediaPlayer.Pause();\n\n            if (_orientationListener.CanDetectOrientation())\n                _orientationListener.Disable();\n        }\n\n        void Activity_Destroyed(object sender, EventArgs e)\n        {\n            _screenReceiver.Unlocked -= ScreenReceiver_Unlocked;\n            _screenReceiver.Locked -= ScreenReceiver_Locked;\n            _activity.UnregisterReceiver(_screenReceiver);\n            _screenReceiver.IsScreenLocked = false;\n\n            _orientationListener = null;\n\n            if (_game != null)\n            {\n                _game.Dispose();\n            }\n\n        }\n\n        private void Activity_WindowFocused(object sender, EventArgs e)\n        {\n            if (!_isActivated)\n            {\n                _isActivated = true;\n                OnActivated();\n            }\n        }\n\n        private void Activity_WindowUnfocused(object sender, EventArgs e)\n        {\n            if (_isActivated)\n            {\n                _isActivated = false;\n                OnDeactivated();\n            }\n        }\n\n        internal void ForceSetFullScreen(bool _isFullScreen)\n        {\n            if (_isFullScreen)\n            {\n                _activity.Window.ClearFlags(WindowManagerFlags.ForceNotFullscreen);\n                _activity.Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen);\n            }\n            else\n            {\n                _activity.Window.SetFlags(WindowManagerFlags.ForceNotFullscreen, WindowManagerFlags.ForceNotFullscreen);\n            }\n        }\n\n        /// <summary>\n        /// Updates the screen orientation. Filters out requests for unsupported orientations.\n        /// </summary>\n        internal void SetOrientation(DisplayOrientation newOrientation, DisplayOrientation supported)\n        {\n            // If the new orientation is not supported, force a supported orientation\n            if ((newOrientation & supported) == 0)\n            {\n                if ((supported & DisplayOrientation.LandscapeLeft) != 0)\n                    newOrientation = DisplayOrientation.LandscapeLeft;\n                else if ((supported & DisplayOrientation.LandscapeRight) != 0)\n                    newOrientation = DisplayOrientation.LandscapeRight;\n                else if ((supported & DisplayOrientation.Portrait) != 0)\n                    newOrientation = DisplayOrientation.Portrait;\n                else if ((supported & DisplayOrientation.PortraitDown) != 0)\n                    newOrientation = DisplayOrientation.PortraitDown;\n            }\n\n            if (newOrientation != _currentOrientation)\n            {\n                // Android 2.3 and above support reverse orientations\n                int sdkVer = (int)Android.OS.Build.VERSION.SdkInt;\n                if (sdkVer < 10)\n                {\n                    if (newOrientation == DisplayOrientation.LandscapeRight)\n                        newOrientation = DisplayOrientation.LandscapeLeft;\n                    if (newOrientation == DisplayOrientation.PortraitDown)\n                        newOrientation = DisplayOrientation.PortraitDown;\n                }\n\n                if ((newOrientation & supported) != 0)\n                {\n                    _currentOrientation = newOrientation;\n                    _activity.RequestedOrientation = XnaOrientationToAndroid(newOrientation);\n\n                    OnOrientationChanged();\n                }\n            }\n        }\n\n        public override string ScreenDeviceName\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n\n        public override Rectangle ClientBounds\n        {\n            get\n            {\n                return _clientBounds;\n            }\n        }\n\n\n        private void GameView_LayoutChange(object sender, View.LayoutChangeEventArgs e)\n        {\n            Rectangle bounds = new Rectangle(\n                GameView.Left, GameView.Top,\n                GameView.Width, GameView.Height);\n\n            if (bounds != _clientBounds)\n            {\n                _clientBounds = bounds;\n                OnClientSizeChanged();\n\n                Android.Util.Log.Debug(\"Kni\", \"GameWindow.ChangeClientBounds: newClientBounds=\" + this.ClientBounds.Width + \",\" + this.ClientBounds.Height);\n\n                // Set the new display size on the touch panel.\n                TouchPanel.DisplayWidth = this.ClientBounds.Width;\n                TouchPanel.DisplayHeight = this.ClientBounds.Height;\n            }\n        }\n\n        public override bool AllowUserResizing\n        {\n            get { return false; }\n            set { /* Ignore */ }\n        }\n\n        // A copy of ScreenOrientation from Android 2.3\n        // This allows us to continue to support 2.2 whilst\n        // utilising the 2.3 improved orientation support.\n        enum ScreenOrientationAll\n        {\n            Unspecified = -1,\n            Landscape = 0,\n            Portrait = 1,\n            User = 2,\n            Behind = 3,\n            Sensor = 4,\n            Nosensor = 5,\n            SensorLandscape = 6,\n            SensorPortrait = 7,\n            ReverseLandscape = 8,\n            ReversePortrait = 9,\n            FullSensor = 10,\n        }\n\n        public override DisplayOrientation CurrentOrientation\n        {\n            get\n            {\n                return _currentOrientation;\n            }\n        }\n\n        private static ScreenOrientation XnaOrientationToAndroid(DisplayOrientation value)\n        {\n            switch (value)\n            {\n                case DisplayOrientation.LandscapeLeft:\n                    return (ScreenOrientation)ScreenOrientationAll.Landscape;\n                case DisplayOrientation.LandscapeRight:\n                    return (ScreenOrientation)ScreenOrientationAll.ReverseLandscape;\n                case DisplayOrientation.Portrait:\n                    return (ScreenOrientation)ScreenOrientationAll.Portrait;\n                case DisplayOrientation.PortraitDown:\n                    return (ScreenOrientation)ScreenOrientationAll.ReversePortrait;\n\n                default:\n                    return ScreenOrientation.Unspecified;\n            }\n        }\n\n        public void Dispose()\n        {\n            if (_activity != null)\n            {\n                _activity.Paused -= Activity_Paused;\n                _activity.Resumed -= Activity_Resumed;\n                _activity.Destroyed -= Activity_Destroyed;\n\n                _activity.WindowFocused -= Activity_WindowFocused;\n                _activity.WindowUnfocused -= Activity_WindowUnfocused;\n\n                _activity = null;\n            }\n\n            _appState = AndroidGameWindow.AppState.Exited;\n\n            if (GameView != null)\n            {\n                if (Mouse.WindowHandle == this.Handle)\n                    Mouse.WindowHandle = IntPtr.Zero;\n                if (TouchPanel.WindowHandle == this.Handle)\n                    TouchPanel.WindowHandle = IntPtr.Zero;\n\n                GameView.LayoutChange -= GameView_LayoutChange;\n\n                GameView.Dispose();\n                GameView = null;\n            }\n            \n            _instances.Remove(this.Handle);\n        }\n\n        protected override void SetTitle(string title)\n        {\n        }\n\n        internal void StartGameLoop()\n        {\n            // Cardboard:\n            _isStarted = true;\n            return;\n        }\n\n        private void RunFrame()\n        {\n            try\n            {\n                RunStep(); // tick\n            }\n            catch (Exception ex) { /* ignore */ }\n        }\n\n        private void RunStep()\n        {\n            switch (_appState)\n            {\n                case AndroidGameWindow.AppState.Resumed:\n                    if (GameView._isAndroidSurfaceAvailable) // do not run game if surface is not available\n                    {\n                        _orientationListener.Update();\n\n                        if (!_screenReceiver.IsScreenLocked) // do not run game if Screen is Locked\n                        {\n                            if (_game != null)\n                            {\n                                ((IPlatformGame)_game).GetStrategy<ConcreteGame>().OnFrameTick();\n                            }\n                        }\n                    }\n                    break;\n\n                case AndroidGameWindow.AppState.Paused:\n                    break;\n\n                case AndroidGameWindow.AppState.Exited:\n                    break;\n\n                default:\n                    throw new InvalidOperationException(\"currentState\");\n            }\n\n            return;\n        }\n\n        private EGLConfig _eglConfig;\n        internal EGLConfig EglConfig { get { return _eglConfig; } }\n\n\n\n        Microsoft.Xna.Framework.XR.CardboardHeadsetState _hsState;\n        private void UpdateLocalHeadsetState(VRCardboard.HeadTransform headTransform, VRCardboard.EyeParams eyeParams1, VRCardboard.EyeParams eyeParams2)\n        {\n            Viewport2XNA(eyeParams1.Viewport, ref _hsState.LeftEye.Viewport);\n            Matrix2XNA(eyeParams1.Transform.GetEyeView(), ref _hsState.LeftEye.View);\n            Matrix2XNA(eyeParams1.Transform.GetPerspective(), ref _hsState.LeftEye.Projection);\n\n            if (eyeParams2 == null)\n            {\n                _hsState.RightEye.Viewport = new Viewport();\n                _hsState.RightEye.View = Microsoft.Xna.Framework.Matrix.Identity;\n                _hsState.RightEye.Projection = Microsoft.Xna.Framework.Matrix.Identity;\n            }\n            else\n            {\n                Viewport2XNA(eyeParams2.Viewport, ref _hsState.RightEye.Viewport);\n                Matrix2XNA(eyeParams2.Transform.GetEyeView(), ref _hsState.RightEye.View);\n                Matrix2XNA(eyeParams2.Transform.GetPerspective(), ref _hsState.RightEye.Projection);\n            }\n        }\n\n        private void Viewport2XNA(VRCardboard.Viewport viewport, ref Viewport result)\n        {\n            result.X = viewport.X;\n            result.Y = viewport.Y;\n            result.Width = viewport.Width;\n            result.Height = viewport.Height;\n            result.MinDepth = 0f;\n            result.MaxDepth = 1f;\n        }\n\n        private void Matrix2XNA(float[] matrix, ref Matrix result)\n        {\n            result.M11 = matrix[0];\n            result.M12 = matrix[1];\n            result.M13 = matrix[2];\n            result.M14 = matrix[3];\n            result.M21 = matrix[4];\n            result.M22 = matrix[5];\n            result.M23 = matrix[6];\n            result.M24 = matrix[7];\n            result.M31 = matrix[8];\n            result.M32 = matrix[9];\n            result.M33 = matrix[10];\n            result.M34 = matrix[11];\n            result.M41 = matrix[12];\n            result.M42 = matrix[13];\n            result.M43 = matrix[14];\n            result.M44 = matrix[15];\n        }\n\n        internal void UpdateHeadsetState(out Microsoft.Xna.Framework.XR.CardboardHeadsetState state)\n        {\n            state = _hsState;\n        }\n\n\n        #region CardboardView.IRenderer\n\n        volatile bool _isStarted = false;\n\n        private int _glFramebuffer; // the current frame buffer\n        private int[] _parameterFramebufferBinding = new int[3];\n\n\n        private void GLGetRenderBufferSize(out int w, out int h)\n        {\n            var device = _game.GraphicsDevice;\n\n            GraphicsContext graphicsContext = ((IPlatformGraphicsDevice)device).Strategy.CurrentContext;\n            var GL = ((IPlatformGraphicsContext)graphicsContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            int[] renderbufferParameters = new int[2];\n\n            GL.BindFramebuffer(FramebufferTarget.Framebuffer, _glFramebuffer);\n            GL.CheckGLError();\n            GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, _glFramebuffer);\n            GL.CheckGLError();\n\n            Android.Opengl.GLES20.GlGetRenderbufferParameteriv(\n                (int)RenderbufferTarget.Renderbuffer,\n                Android.Opengl.GLES20.GlRenderbufferWidth,\n                renderbufferParameters, 0\n                );\n            Android.Opengl.GLES20.GlGetRenderbufferParameteriv(\n                (int)RenderbufferTarget.Renderbuffer,\n                Android.Opengl.GLES20.GlRenderbufferHeight,\n                renderbufferParameters, 1\n                );\n\n            w = renderbufferParameters[0];\n            h = renderbufferParameters[1];\n\n            renderbufferParameters = new int[10];\n            Android.Opengl.GLES20.GlGetRenderbufferParameteriv(\n                (int)RenderbufferTarget.Renderbuffer,\n                Android.Opengl.GLES20.GlRenderbufferInternalFormat,\n                renderbufferParameters, 0\n                );\n            int internalFormat = renderbufferParameters[0];\n\n            renderbufferParameters = new int[10];\n            Android.Opengl.GLES20.GlGetRenderbufferParameteriv(\n                (int)RenderbufferTarget.Renderbuffer,\n                Android.Opengl.GLES20.GlRenderbufferRedSize,\n                renderbufferParameters, 0\n                );\n            int redSize = renderbufferParameters[0];\n\n            renderbufferParameters = new int[10];\n            Android.Opengl.GLES20.GlGetRenderbufferParameteriv(\n                (int)RenderbufferTarget.Renderbuffer,\n                Android.Opengl.GLES20.GlRenderbufferDepthSize,\n                renderbufferParameters, 0\n                );\n            int depthSize = renderbufferParameters[0];\n\n            renderbufferParameters = new int[10];\n            Android.Opengl.GLES20.GlGetRenderbufferParameteriv(\n                (int)RenderbufferTarget.Renderbuffer,\n                Android.Opengl.GLES20.GlRenderbufferStencilSize,\n                renderbufferParameters, 0\n                );\n            int stencilSize = renderbufferParameters[0];\n        }\n\n\n        internal void VrRendererOnDrawFrame(VRCardboard.HeadTransform headTransform, VRCardboard.EyeParams eyeParams1, VRCardboard.EyeParams eyeParams2)\n        {\n            if (!_isStarted)\n                return;\n\n            this.UpdateLocalHeadsetState(headTransform, eyeParams1, eyeParams2);\n\n            // If distortion correction is enabled the GL context will be set to draw into a framebuffer backed \n            // by a texture at the time of this call. If an implementor needs to change the current framebuffer, \n            // it must be reset back afterwards to the one obtained viaglGetIntegerv(GL_FRAMEBUFFER_BINDING, ...) \n            // at the beginning of this call.\n            Android.Opengl.GLES20.GlGetIntegerv(Android.Opengl.GLES20.GlFramebufferBinding, _parameterFramebufferBinding, 0);\n            _glFramebuffer = _parameterFramebufferBinding[0];\n\n            if (_game.GraphicsDevice != null)\n            {\n                ((IPlatformGraphicsDevice)_game.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>()._glDefaultFramebuffer = _glFramebuffer;\n\n                // GL Context is modified by cardboard. We have to reset your cached state.\n                GraphicsContext mainContext = ((IPlatformGraphicsDevice)_game.GraphicsDevice).Strategy.MainContext;\n                ((IPlatformGraphicsContext)mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().Cardboard_ResetContext();\n            }\n\n            if (_game.GraphicsDevice != null)\n            {\n                //int w, h;\n                //GLGetRenderBufferSize(out w, out h);\n                //_game.GraphicsDevice.Viewport = new Viewport(0,0,w,h);\n            }\n\n            this.RunFrame();\n\n            Android.Opengl.GLES20.GlGetIntegerv(Android.Opengl.GLES20.GlFramebufferBinding, _parameterFramebufferBinding, 1);\n            System.Diagnostics.Debug.Assert(_glFramebuffer == _parameterFramebufferBinding[1],\n                \"framebuffer must be restored back to the one set at the beggining of CardboardView.IRenderer.OnDrawFrame()\");\n\n        }\n\n        internal void VrRendererOnFinishFrame(VRCardboard.Viewport viewport)\n        {\n            Android.Opengl.GLES20.GlGetIntegerv(Android.Opengl.GLES20.GlFramebufferBinding, _parameterFramebufferBinding, 2);\n            _glFramebuffer = _parameterFramebufferBinding[2];\n        }\n\n        internal void VrRendererOnRendererShutdown()\n        {\n        }\n\n        internal void VrRendererOnSurfaceChanged(int width, int height)\n        {\n        }\n\n        internal void VrRendererOnSurfaceCreated(EGLConfig config)\n        {\n            _eglConfig = config;\n\n#if DEBUG\n            IEGL10 egl10 = Javax.Microedition.Khronos.Egl.EGLContext.EGL.JavaCast<IEGL10>();\n            _eglDisplay = egl10.EglGetDisplay(EGL10.EglDefaultDisplay);\n            _eglSurface = egl10.EglGetCurrentSurface(EGL10.EglDraw);\n            _eglContext = egl10.EglGetCurrentContext();\n            if (_eglDisplay == EGL10.EglNoDisplay)\n                _eglDisplay = null;\n            if (_eglSurface == EGL10.EglNoSurface)\n                _eglSurface = null;\n            if (_eglContext == EGL10.EglNoContext)\n                _eglContext = null;\n#endif\n        }\n\n#if DEBUG\n        private EGLDisplay _eglDisplay;\n        private EGLSurface _eglSurface;\n        private EGLContext _eglContext;\n#endif\n\n        #endregion CardboardView.IRenderer\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.CardboardLegacy/AndroidSurfaceView.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Input;\nusing Android.Content;\nusing Android.Media;\nusing Android.Util;\nusing Android.Views;\nusing Javax.Microedition.Khronos.Egl;\nusing VRCardboard = Com.Google.Vrtoolkit.Cardboard;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    [CLSCompliant(false)]\n    public class AndroidSurfaceView : VRCardboard.CardboardView\n        , ISurfaceView\n        , VRCardboard.CardboardView.IRenderer\n    {\n\n        internal bool _isAndroidSurfaceAvailable = false;\n\n        private readonly AndroidGameWindow _gameWindow;\n\n        public AndroidSurfaceView(Context context, AndroidGameWindow gameWindow)\n            : base(context)\n        {\n            _gameWindow = gameWindow;\n\n            // Holder.SetType is deprecated. The SurfaceType value is ignored.\n            if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Honeycomb)\n                Holder.SetType(SurfaceType.Gpu);\n\n            this.Holder.SetFormat(Android.Graphics.Format.Rgba8888);\n\n            ((VRCardboard.CardboardActivity)context).CardboardView = this;\n            ((Android.App.Activity)context).SetContentView(this);\n\n            this.SetRenderer(this);\n            //gameView.DistortionCorrectionEnabled = false;\n            //gameView.SetVRModeEnabled(false);\n        }\n\n        public override void SurfaceCreated(ISurfaceHolder holder)\n        {\n            Log.Debug(\"AndroidSurfaceView\", \"SurfaceCreated\");\n\n            _isAndroidSurfaceAvailable = true;\n\n            var handler = _surfaceCreatedEvent;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n\n            base.SurfaceCreated(holder);\n        }\n\n        public override void SurfaceChanged(ISurfaceHolder holder, global::Android.Graphics.Format format, int width, int height)\n        {\n            Log.Debug(\"AndroidSurfaceView\", \"SurfaceChanged: width=\" + width + \", height=\" + height + \", format=\" + format.ToString());\n\n            var handler = _surfaceChangedEvent;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n\n            base.SurfaceChanged(holder, format, width, height);\n        }\n\n        public override void SurfaceDestroyed(ISurfaceHolder holder)\n        {\n            Log.Debug(\"AndroidSurfaceView\", \"SurfaceDestroyed\");\n\n            _isAndroidSurfaceAvailable = false;\n\n            var handler = _surfaceDestroyedEvent;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n\n            base.SurfaceDestroyed(holder);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n        #region Key and Motion\n\n        public override bool OnKeyDown(Keycode keyCode, KeyEvent e)\n        {\n            bool handled = false;\n            if (((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().OnKeyDown(keyCode, e))\n                return true;\n\n            handled = ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().KeyDown(keyCode);\n\n            // we need to handle the Back key here because it doesn't work any other way\n            if (keyCode == Keycode.Back)\n            {\n                ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().Back = true;\n                handled = true;\n            }\n\n            if (keyCode == Keycode.VolumeUp)\n            {\n                AudioManager audioManager = (AudioManager)Context.GetSystemService(Context.AudioService);\n                audioManager.AdjustStreamVolume(Stream.Music, Adjust.Raise, VolumeNotificationFlags.ShowUi);\n                return true;\n            }\n\n            if (keyCode == Keycode.VolumeDown)\n            {\n                AudioManager audioManager = (AudioManager)Context.GetSystemService(Context.AudioService);\n                audioManager.AdjustStreamVolume(Stream.Music, Adjust.Lower, VolumeNotificationFlags.ShowUi);\n                return true;\n            }\n\n            return handled;\n        }\n\n        public override bool OnKeyUp(Keycode keyCode, KeyEvent e)\n        {\n            if (keyCode == Keycode.Back)\n                ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().Back = false;\n            if (((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().OnKeyUp(keyCode, e))\n                return true;\n            return ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().KeyUp(keyCode);\n        }\n\n        public override bool OnGenericMotionEvent(MotionEvent e)\n        {\n            if (((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().OnGenericMotionEvent(e))\n                return true;\n\n            if ((e.Source & InputSourceType.Mouse) == InputSourceType.Mouse)\n            {\n                if (((IPlatformMouse)Mouse.Current).GetStrategy<ConcreteMouse>().OnGenericMotionEvent(e))\n                    return true;\n            }\n\n            return base.OnGenericMotionEvent(e);\n        }\n\n        #endregion\n\n\n        #region ISurfaceView\n\n        private event EventHandler<EventArgs> _surfaceCreatedEvent;\n        private event EventHandler<EventArgs> _surfaceChangedEvent;\n        private event EventHandler<EventArgs> _surfaceDestroyedEvent;\n\n        event EventHandler<EventArgs> ISurfaceView.SurfaceCreated\n        {\n            add { _surfaceCreatedEvent += value; }\n            remove { _surfaceCreatedEvent -= value; }\n        }\n\n        event EventHandler<EventArgs> ISurfaceView.SurfaceChanged\n        {\n            add { _surfaceChangedEvent += value; }\n            remove { _surfaceChangedEvent -= value; }\n        }\n\n        event EventHandler<EventArgs> ISurfaceView.SurfaceDestroyed\n        {\n            add { _surfaceDestroyedEvent += value; }\n            remove { _surfaceDestroyedEvent -= value; }\n        }\n\n        #endregion\n\n        #region CardboardView.IRenderer\n\n        void IRenderer.OnDrawFrame(VRCardboard.HeadTransform headTransform, VRCardboard.EyeParams eyeParams1, VRCardboard.EyeParams eyeParams2)\n        {\n            _gameWindow.VrRendererOnDrawFrame(headTransform, eyeParams1, eyeParams2);\n        }\n\n        void IRenderer.OnFinishFrame(VRCardboard.Viewport viewport)\n        {\n            _gameWindow.VrRendererOnFinishFrame(viewport);\n        }\n\n        void IRenderer.OnRendererShutdown()\n        {\n            _gameWindow.VrRendererOnRendererShutdown();\n        }\n\n        void IRenderer.OnSurfaceChanged(int width, int height)\n        {\n            _gameWindow.VrRendererOnSurfaceChanged(width, height);\n        }\n\n        void IRenderer.OnSurfaceCreated(EGLConfig config)\n        {\n            _gameWindow.VrRendererOnSurfaceCreated(config);\n        }\n\n\n        #endregion CardboardView.IRenderer\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.CardboardLegacy/ConcreteGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Media;\nusing Android.Views;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    sealed class ConcreteGame : GameStrategy\n    {\n        private static ConcreteGame _concreteGameInstance = null;\n        internal static ConcreteGame GameConcreteInstance { get { return ConcreteGame._concreteGameInstance; } }\n\n        private AndroidGameWindow _gameWindow;\n\n        public ConcreteGame(Game game) : base(game)\n        {\n            ConcreteGame._concreteGameInstance = this;\n\n            System.Diagnostics.Debug.Assert(AndroidGameWindow.Activity != null, \"Must set Game.Activity before creating the Game instance\");\n            this.Services.AddService(typeof(Android.App.Activity), AndroidGameWindow.Activity);\n\n            _gameWindow = new AndroidGameWindow(AndroidGameWindow.Activity, game);\n            base.Window = _gameWindow;\n            base.SetWindowListeners();\n\n            Services.AddService(typeof(View), _gameWindow.GameView);\n\n            ConcreteMediaLibraryStrategy.Context = AndroidGameWindow.Activity;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            AndroidGameWindow.Activity = null;\n\n            base.Dispose(disposing);\n        }\n\n\n        public override void Exit()\n        {\n            throw new PlatformNotSupportedException(\"Android platform does not allow programmatically closing.\");\n        }\n\n        public override void TickExiting()\n        {\n            // Android games do not \"exit\" or shut down.\n            throw new PlatformNotSupportedException();\n        }\n        \n        protected override void Run()\n        {\n            StartGameLoop();\n            // Prevent the default run loop from starting.\n            // We will run the loop from the GameView's IRunnable.Run().\n            return;\n\n            // StartRunLoop\n            //_gameWindow.GameView.Resume();\n\n            //this.CallEndRun();\n            //this.DoExiting();\n        }\n\n        private void StartGameLoop()\n        {\n            _gameWindow.StartGameLoop();\n        }\n\n        private void OnFrameTickBegin()\n        {\n            this.CallInitialize();\n            this.CallBeginRun();\n            // XNA runs one Update even before showing the window\n            this.CallUpdate(new GameTime());\n        }\n\n        bool _isReadyToRun = false;\n        internal void OnFrameTick()\n        {\n            if (_isReadyToRun == false)\n            {\n                OnFrameTickBegin();\n                _isReadyToRun = true;\n            }\n\n            if (AndroidGameWindow.Activity.IsActivityActive)\n            {\n                this.Game.Tick();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.CardboardLegacy/ConcreteGameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteGameFactory : GameFactory\n    {\n\n        public override GameStrategy CreateGameStrategy(Game game)\n        {\n            return new ConcreteGame(game);\n        }\n\n        public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game)\n        {\n            return new ConcreteGraphicsDeviceManager(game);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Game/.CardboardLegacy/ConcreteGraphicsDeviceManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Graphics;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy\n    {\n        public ConcreteGraphicsDeviceManager(Game game) : base(game)\n        {\n            var clientBounds = base.Game.Window.ClientBounds;\n            // Preferred buffer width/height is used to determine default supported orientations,\n            // so set the default values to match Xna behaviour of landscape only by default.\n            // Note also that it's using the device window dimensions.\n            base.PreferredBackBufferWidth = Math.Max(clientBounds.Width, clientBounds.Height);\n            base.PreferredBackBufferHeight = Math.Min(clientBounds.Height, clientBounds.Width);\n\n            this.Game.Window.OrientationChanged += GameWindow_OrientationChanged;\n\n        }\n\n        public override bool PreferHalfPixelOffset\n        {\n            get { return base.PreferHalfPixelOffset; }\n            set\n            {\n                //TODO: move the check in ApplyChanges\n                if (base.GraphicsDevice != null)\n                    throw new InvalidOperationException(\"Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice.\");\n\n                base.PreferHalfPixelOffset = value;\n            }\n        }\n\n        public override bool IsFullScreen\n        {\n            get\n            {\n                if (base.GraphicsDevice != null)\n                    return base.GraphicsDevice.PresentationParameters.IsFullScreen;\n\n                return base.IsFullScreen;\n            }\n            set\n            {\n                base.IsFullScreen = value;\n\n                if (base.GraphicsDevice != null)\n                    base.GraphicsDevice.PresentationParameters.IsFullScreen = value;\n\n                if (base.GraphicsDevice != null)\n                {\n                    // TODO: Set fullscreen in ApplyChanges()\n                    IntPtr windowHandle = base.GraphicsDevice.PresentationParameters.DeviceWindowHandle;\n                    AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(windowHandle);\n                    gameWindow.ForceSetFullScreen(base.IsFullScreen);\n                }\n            }\n        }\n\n        public override DisplayOrientation SupportedOrientations\n        {\n            get { return base.SupportedOrientations; }\n            set { base.SupportedOrientations = value; }\n        }\n\n        public override void ToggleFullScreen()\n        {\n            this.IsFullScreen = !this.IsFullScreen;\n            //ApplyChanges();\n        }\n\n        public override void CreateDevice()\n        {\n            PresentationParameters pp = new PresentationParameters();\n            pp.MultiSampleCount = (this.PreferMultiSampling) ? 4 : 1;\n            pp.BackBufferFormat = this.PreferredBackBufferFormat;\n            pp.DepthStencilFormat = this.PreferredDepthStencilFormat;\n            pp.BackBufferWidth = 800;\n            pp.BackBufferHeight = 480;\n\n            // force \"full screen\" as default on Android\n            pp.IsFullScreen = true;\n            \n            pp.DeviceWindowHandle = this.Game.Window.Handle;\n\n            GraphicsDeviceInformation gdi = new GraphicsDeviceInformation();\n            gdi.GraphicsProfile = this.GraphicsProfile;\n            gdi.Adapter = GraphicsAdapter.DefaultAdapter;\n            gdi.PresentationParameters = pp;\n            var pe = new PreparingDeviceSettingsEventArgs(gdi);\n\n            this.OnPreparingDeviceSettings(pe);\n\n            pp = gdi.PresentationParameters;\n            this.GraphicsProfile = gdi.GraphicsProfile;\n\n            AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window;\n            View surfaceView = androidGameWindow.GameView;\n\n            pp.DisplayOrientation = base.Game.Window.CurrentOrientation;\n\n            pp.BackBufferWidth = surfaceView.Width;\n            pp.BackBufferHeight = surfaceView.Height;\n\n            this.GraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile, this.PreferHalfPixelOffset, pp);\n\n            // ApplyChanges\n            {\n                TouchPanel.DisplayWidth = base.GraphicsDevice.PresentationParameters.BackBufferWidth;\n                TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight;\n            }\n\n            // TODO: In XNA this seems to be done as part of the GraphicsDevice.DeviceReset event...\n            //       we need to get those working.\n            TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation;\n\n            this.OnDeviceCreated(EventArgs.Empty);\n\n\n            Android.App.Activity activity = AndroidGameWindow.Activity;\n            DisplayOrientation currentOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(activity);\n            DisplayOrientation supported2 = this.SupportedOrientations;\n            if (supported2 == DisplayOrientation.Default)\n            {\n                if (this.PreferredBackBufferWidth <= this.PreferredBackBufferHeight)\n                    supported2 = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown);\n                else\n                    supported2 = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight);\n            }\n            androidGameWindow.SetOrientation(currentOrientation, supported2);\n\n        }\n\n        private void GameWindow_OrientationChanged(object sender, EventArgs e)\n        {\n            if (GraphicsDevice != null)\n            {\n                AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window;\n                View surfaceView = androidGameWindow.GameView;\n\n                base.GraphicsDevice.PresentationParameters.DisplayOrientation = base.Game.Window.CurrentOrientation;\n\n                base.GraphicsDevice.PresentationParameters.BackBufferWidth = surfaceView.Width;\n                base.GraphicsDevice.PresentationParameters.BackBufferHeight = surfaceView.Height;\n\n                if (!((IPlatformGraphicsContext)((IPlatformGraphicsDevice)base.GraphicsDevice).Strategy.MainContext).Strategy.IsRenderTargetBound)\n                {\n                    PresentationParameters pp = this.GraphicsDevice.PresentationParameters;\n                    base.GraphicsDevice.Viewport = new Viewport(0, 0, pp.BackBufferWidth, pp.BackBufferHeight);\n                    base.GraphicsDevice.ScissorRectangle = new Rectangle(0, 0, pp.BackBufferWidth, pp.BackBufferHeight);\n                }\n\n                TouchPanel.DisplayWidth  = base.GraphicsDevice.PresentationParameters.BackBufferWidth;\n                TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight;\n                TouchPanel.DisplayOrientation = base.GraphicsDevice.PresentationParameters.DisplayOrientation;\n            }\n\n        }\n\n        public override void ApplyChanges()\n        {\n            if (base.GraphicsDevice == null)\n            {\n                // TODO: Calling ApplyChanges() before Game.Initialize() should create the device.\n                System.Diagnostics.Debug.Assert(false);\n                //this.CreateDevice();\n                return;\n            }\n\n            AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window;\n            View surfaceView = androidGameWindow.GameView;\n\n            // Trigger a change in orientation in case the supported orientations have changed\n            DisplayOrientation supported = this.SupportedOrientations;\n            if (supported == DisplayOrientation.Default)\n            {\n                if (this.PreferredBackBufferWidth <= this.PreferredBackBufferHeight)\n                    supported = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown);\n                else\n                    supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight);\n            }\n            androidGameWindow.SetOrientation(base.Game.Window.CurrentOrientation, supported);\n\n        }\n\n\n        #region IGraphicsDeviceManager strategy\n\n        public override bool BeginDraw()\n        {\n            //return base.BeginDraw();\n\n            return true;\n        }\n\n        public override void EndDraw()\n        {\n#if CARDBOARD\n            return; // On Cardboard, surface is presented by IRenderer.OnFinishFrame(...).\n#endif\n\n            //base.EndDraw();\n\n            GraphicsDevice device = this.GraphicsDevice;\n            if (device != null)\n            {\n                device.Present();\n            }\n        }\n\n        #endregion IGraphicsDeviceManager strategy\n\n\n        protected override void Dispose(bool disposing)\n        {\n            base.Dispose(disposing);\n\n            if (disposing)\n            {\n                if (base.Game != null && base.Game.Window != null)\n                {\n                    base.Game.Window.OrientationChanged -= GameWindow_OrientationChanged;\n                }\n\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Oculus/AndroidCompatibility.cs",
    "content": "using System;\nusing System.Linq;\nusing Android.App;\nusing Android.Content.Res;\nusing Android.OS;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Properties that change from how XNA works by default\n    /// </summary>\n    public class AndroidCompatibility\n    {\n        private static AndroidCompatibility _current;\n\n        /// <summary>\n        /// Because the Kindle Fire devices default orientation is fliped by 180 degrees from all the other android devices\n        /// on the market we need to do some special processing to make sure that LandscapeLeft is the correct way round.\n        /// This list contains all the Build.Model strings of the effected devices, it should be added to if and when\n        /// more devices exhibit the same issues.\n        /// </summary>\n        private readonly string[] Kindles = new[] { \"KFTT\", \"KFJWI\", \"KFJWA\", \"KFSOWI\", \"KFTHWA\", \"KFTHWI\", \"KFAPWA\", \"KFAPWI\" };\n\n        public bool FlipLandscape { get; private set; }\n\n        [CLSCompliant(false)]\n        public Orientation NaturalOrientation { get; private set; }\n\n\n        [CLSCompliant(false)]\n        public static AndroidCompatibility Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n                else\n                    throw new InvalidOperationException(\"Not initialized.\");\n            }\n        }\n\n        internal static void Initialize(Activity activity)\n        {\n            if (_current == null)\n                _current = new AndroidCompatibility(activity);\n        }\n\n        private AndroidCompatibility(Activity activity)\n        {\n            FlipLandscape = Kindles.Contains(Build.Model);\n            NaturalOrientation = GetDeviceNaturalOrientation(activity);\n        }\n\n        private Orientation GetDeviceNaturalOrientation(Activity activity)\n        {\n            // check if MainActivity setup is correct. \n            Android.Content.PM.ScreenOrientation screenOrientation = activity.RequestedOrientation;\n            if (screenOrientation != Android.Content.PM.ScreenOrientation.Landscape)\n                throw new InvalidOperationException(\"Invalid orientation. Set ScreenOrientation in MainActivity to Landscape.\");\n\n            Orientation orientation = activity.Resources.Configuration.Orientation;\n            SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation;\n\n            switch (orientation)\n            {\n                case Orientation.Portrait:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Portrait;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Landscape;\n\n                            default:\n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n\n                case Orientation.Landscape:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Landscape;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Portrait;\n\n                            default:\n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n\n                default:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            case SurfaceOrientation.Rotation180:\n                                return Orientation.Portrait;\n\n                            case SurfaceOrientation.Rotation90:\n                            case SurfaceOrientation.Rotation270:\n                                return Orientation.Portrait;\n\n                            default: \n                                return Orientation.Portrait;\n                        }\n                    }\n                    break;\n            }\n        }\n\n        /// <summary>\n        /// Get the absolute orientation of the device, accounting for platform differences.\n        /// </summary>\n        /// <returns></returns>\n        [CLSCompliant(false)]\n        public DisplayOrientation GetAbsoluteOrientation(Activity activity)\n        {\n            Orientation orientation = activity.Resources.Configuration.Orientation;\n            SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation;\n\n            switch (orientation)\n            {\n                case Orientation.Portrait:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            default:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                return DisplayOrientation.Portrait;\n                            case SurfaceOrientation.Rotation180:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                return DisplayOrientation.PortraitDown;\n                            case SurfaceOrientation.Rotation90:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                return DisplayOrientation.PortraitDown;\n                            case SurfaceOrientation.Rotation270:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                return DisplayOrientation.Portrait;\n                        }\n                    }\n                    break;\n\n                case Orientation.Landscape:\n                default:\n                    {\n                        switch (rotation)\n                        {\n                            case SurfaceOrientation.Rotation0:\n                            default:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeRight;\n                                return DisplayOrientation.LandscapeLeft;\n                            case SurfaceOrientation.Rotation180:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeLeft;\n                                return DisplayOrientation.LandscapeRight;\n                            case SurfaceOrientation.Rotation90:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeRight;\n                                return DisplayOrientation.LandscapeLeft;\n                            case SurfaceOrientation.Rotation270:\n                                System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape);\n                                if (AndroidCompatibility.Current.FlipLandscape)\n                                    return DisplayOrientation.LandscapeLeft;\n                                return DisplayOrientation.LandscapeRight;\n                        }\n                    }\n                    break;\n            }\n        }\n\n        internal DisplayOrientation GetAbsoluteOrientation(int degrees)\n        {\n            // Orientation is reported by the device in degrees compared to the natural orientation\n            // Some tablets have a natural landscape orientation, which we need to account for\n            if (NaturalOrientation == Orientation.Landscape)\n                degrees += 270;\n\n            // Round orientation into one of 8 positions, either 0, 45, 90, 135, 180, 225, 270, 315. \n            degrees = ( ((degrees + 22) / 45) * 45) % 360;\n\n            // Surprisingly 90 degree is landscape right, except on Kindle devices\n            switch (degrees)\n            {\n                case 0:\n                    return DisplayOrientation.Portrait;\n                case 180:\n                    return DisplayOrientation.PortraitDown;\n                case 90:\n                    if (FlipLandscape)\n                        return DisplayOrientation.LandscapeLeft;\n                    return DisplayOrientation.LandscapeRight;\n                case 270:\n                    if (FlipLandscape)\n                        return DisplayOrientation.LandscapeRight;\n                    return DisplayOrientation.LandscapeLeft;\n\n                default:\n                    return DisplayOrientation.Unknown;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Ref/ConcreteGame.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    sealed class ConcreteGame : GameStrategy\n    {\n        public ConcreteGame(Game game) : base(game)\n        {\n\n        }\n\n        protected override void RunGameLoop()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void TickExiting()\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.Ref/ConcreteGameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteGameFactory : GameFactory\n    {\n\n        public override GameStrategy CreateGameStrategy(Game game)\n        {\n            return new ConcreteGame(game);\n        }\n\n        public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game)\n        {\n            return new ConcreteGraphicsDeviceManager(game);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Game/.Ref/ConcreteGraphicsDeviceManager.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy\n    {\n\n        public ConcreteGraphicsDeviceManager(Game game) : base(game)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool PreferHalfPixelOffset\n        {\n            get { return base.PreferHalfPixelOffset; }\n            set { base.PreferHalfPixelOffset = value; }\n        }\n\n        public override bool IsFullScreen\n        {\n            get { return base.IsFullScreen; }\n            set { base.IsFullScreen = value; }\n        }\n\n        public override DisplayOrientation SupportedOrientations\n        {\n            get { return base.SupportedOrientations; }\n            set { base.SupportedOrientations = value; }\n        }\n\n        public override void ToggleFullScreen()\n        {\n            base.ToggleFullScreen();\n        }\n\n        public override void ApplyChanges()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        #region IGraphicsDeviceManager strategy\n\n        public override void CreateDevice()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool BeginDraw()\n        {\n            //return base.BeginDraw();\n\n            return true;\n        }\n\n        public override void EndDraw()\n        {\n            base.EndDraw();\n        }\n\n        #endregion IGraphicsDeviceManager strategy\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.SDL2/ConcreteGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    sealed class ConcreteGame : GameStrategy\n    {\n        private SdlGameWindow _gameWindow;\n\n        private Sdl SDL { get { return Sdl.Current; } }\n\n        protected override void RunGameLoop()\n        {\n            SDL.WINDOW.Show(Window.Handle);\n\n            while (true)\n            {\n                bool isExiting = _gameWindow.SdlRunLoop();\n                _isExiting |= isExiting;\n\n                if (!_isExiting)\n                    Game.Tick();\n                else\n                    break;\n            }\n        }\n\n        private bool _isExiting;\n\n        public ConcreteGame(Game game) : base(game)\n        {\n            var minVersion = new Sdl.Version(2,0,5);\n\n            if (SDL.version < minVersion)\n                Debug.WriteLine(\"Please use SDL \" + minVersion + \" or higher.\");\n\n            // Needed so VS can debug the project on Windows\n            if (SDL.version >= minVersion && CurrentPlatform.OS == OS.Windows && Debugger.IsAttached)\n                SDL.SetHint(\"SDL_WINDOWS_DISABLE_THREAD_NAMING\", \"1\");\n\n            SDL.Init(Sdl.InitFlags.Video\n            );\n\n            SDL.DisableScreenSaver();\n\n            _gameWindow = new SdlGameWindow(Game);\n            base.Window = _gameWindow;\n            base.SetWindowListeners();\n        }\n\n        public override bool IsMouseVisible\n        {\n            get { return base.IsMouseVisible; }\n            set\n            {\n                if (base.IsMouseVisible != value)\n                {\n                    base.IsMouseVisible = value;\n                    _gameWindow.SetCursorVisible(Game.IsMouseVisible);\n                }\n            }\n        }\n\n        public override void TickExiting()\n        {\n            _isExiting = true;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (_gameWindow != null)\n            {\n                _gameWindow.Dispose();\n                _gameWindow = null;\n\n                SDL.Quit();\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.SDL2/ConcreteGameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteGameFactory : GameFactory\n    {\n\n        public override GameStrategy CreateGameStrategy(Game game)\n        {\n            return new ConcreteGame(game);\n        }\n\n        public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game)\n        {\n            return new ConcreteGraphicsDeviceManager(game);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Game/.SDL2/ConcreteGraphicsDeviceManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Graphics;\nusing ColorFormat = Microsoft.Xna.Platform.Graphics.OpenGL.ColorFormat;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy\n    {\n        private Sdl SDL { get { return Sdl.Current; } }\n\n        public ConcreteGraphicsDeviceManager(Game game) : base(game)\n        {\n            var clientBounds = base.Game.Window.ClientBounds;\n            base.PreferredBackBufferWidth = clientBounds.Width;\n            base.PreferredBackBufferHeight = clientBounds.Height;\n\n        }\n\n        public override bool PreferHalfPixelOffset\n        {\n            get { return base.PreferHalfPixelOffset; }\n            set\n            {\n                //TODO: move the check in ApplyChanges\n                if (base.GraphicsDevice != null)\n                    throw new InvalidOperationException(\"Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice.\");\n\n                base.PreferHalfPixelOffset = value;\n            }\n        }\n\n        public override bool IsFullScreen\n        {\n            get { return base.IsFullScreen; }\n            set { base.IsFullScreen = value; }\n        }\n\n        public override DisplayOrientation SupportedOrientations\n        {\n            get { return base.SupportedOrientations; }\n            set { base.SupportedOrientations = value; }\n        }\n\n        public override void ToggleFullScreen()\n        {\n            base.IsFullScreen = !base.IsFullScreen;\n            ApplyChanges();\n        }\n\n        public override void ApplyChanges()\n        {\n            if (this.GraphicsDevice == null)\n            {\n                this.CreateDevice();\n            }\n\n            // populates a gdi with settings in this gdm and allows users to override them with\n            // PrepareDeviceSettings event this information should be applied to the GraphicsDevice\n            var gdi = this.DoPreparingDeviceSettings();\n\n            if (gdi.GraphicsProfile != GraphicsDevice.GraphicsProfile)\n            {\n                // if the GraphicsProfile changed we need to create a new GraphicsDevice\n                this.GraphicsDevice.Dispose();\n                this.GraphicsDevice = null;\n\n                this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters);\n\n                // update the touchpanel display size when the graphicsdevice is reset\n                this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel;\n                ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform;\n\n                this.OnDeviceCreated(EventArgs.Empty);\n            }\n            else\n            {\n                GraphicsDevice.Reset(gdi.PresentationParameters);\n            }\n        }\n\n        /// <summary>\n        /// This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to\n        /// allow users to change the settings. Then returns that GraphicsDeviceInformation.\n        /// Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null.\n        /// </summary>\n        internal GraphicsDeviceInformation DoPreparingDeviceSettings()\n        {\n            var gdi = new GraphicsDeviceInformation();\n            gdi.Adapter = GraphicsAdapter.DefaultAdapter;\n            gdi.GraphicsProfile = GraphicsProfile;\n\n            PresentationParameters pp = new PresentationParameters();\n            pp.BackBufferFormat = this.PreferredBackBufferFormat;\n            pp.DepthStencilFormat = this.PreferredDepthStencilFormat;\n            pp.BackBufferWidth = this.PreferredBackBufferWidth;\n            pp.BackBufferHeight = this.PreferredBackBufferHeight;\n            pp.IsFullScreen = this.IsFullScreen;\n            pp.HardwareModeSwitch = this.HardwareModeSwitch;\n            pp.PresentationInterval = this.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate;\n            pp.DisplayOrientation = this.Game.Window.CurrentOrientation;\n            pp.DeviceWindowHandle = this.Game.Window.Handle;\n\n            int maxMultiSampleCount = 0;\n            if (this.PreferMultiSampling)\n            {\n                if (GraphicsDevice != null)\n                {\n                    maxMultiSampleCount = ((IPlatformGraphicsDevice)GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)GraphicsDevice).Strategy.PresentationParameters.BackBufferFormat);\n                }\n            }\n            pp.MultiSampleCount = maxMultiSampleCount;\n\n            gdi.PresentationParameters = pp;\n            var args = new PreparingDeviceSettingsEventArgs(gdi);\n            this.OnPreparingDeviceSettings(args);\n\n            if (gdi.PresentationParameters == null || gdi.Adapter == null)\n                throw new NullReferenceException(\"Members should not be set to null in PreparingDeviceSettingsEventArgs\");\n\n            return gdi;\n        }\n\n        private void PlatformInitialize(PresentationParameters presentationParameters)\n        {\n            var surfaceFormat = ToGLColorFormat(this.PreferredBackBufferFormat);\n            var depthStencilFormat = this.PreferredDepthStencilFormat;\n\n            // TODO Need to get this data from the Presentation Parameters\n            SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.RedSize, surfaceFormat.R);\n            SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.GreenSize, surfaceFormat.G);\n            SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.BlueSize, surfaceFormat.B);\n            SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.AlphaSize, surfaceFormat.A);\n\n            switch (depthStencilFormat)\n            {\n                case DepthFormat.None:\n                    SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DepthSize, 0);\n                    SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.StencilSize, 0);\n                    break;\n                case DepthFormat.Depth16:\n                    SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DepthSize, 16);\n                    SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.StencilSize, 0);\n                    break;\n                case DepthFormat.Depth24:\n                    SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DepthSize, 24);\n                    SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.StencilSize, 0);\n                    break;\n                case DepthFormat.Depth24Stencil8:\n                    SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DepthSize, 24);\n                    SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.StencilSize, 8);\n                    break;\n            }\n\n            SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DoubleBuffer, 1);\n            SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextMajorVersion, 2);\n            SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextMinorVersion, 1);\n\n            if (presentationParameters.MultiSampleCount > 0)\n            {\n                SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.MultiSampleBuffers, 1);\n                SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.MultiSampleSamples, presentationParameters.MultiSampleCount);\n            }\n\n            ((SdlGameWindow)Game.Window).CreateWindow();\n            presentationParameters.DeviceWindowHandle = Game.Window.Handle;\n        }\n\n        /// <summary>\n        /// Convert a <see cref=\"SurfaceFormat\"/> to an GL ColorFormat.\n        /// This is used for setting up the backbuffer format of the OpenGL context.\n        /// </summary>\n        /// <returns>A GL ColorFormat instance.</returns>\n        /// <param name=\"format\">The <see cref=\"SurfaceFormat\"/> to convert.</param>\n        private static ColorFormat ToGLColorFormat(SurfaceFormat format)\n        {\n            switch (format)\n            {\n                case SurfaceFormat.Alpha8:\n                    return new ColorFormat(0, 0, 0, 8);\n                case SurfaceFormat.Bgr565:\n                    return new ColorFormat(5, 6, 5, 0);\n                case SurfaceFormat.Bgra4444:\n                    return new ColorFormat(4, 4, 4, 4);\n                case SurfaceFormat.Bgra5551:\n                    return new ColorFormat(5, 5, 5, 1);\n                case SurfaceFormat.Bgr32:\n                    return new ColorFormat(8, 8, 8, 0);\n                case SurfaceFormat.Bgra32:\n                case SurfaceFormat.Color:\n                case SurfaceFormat.ColorSRgb:\n                case SurfaceFormat.ColorSRgba:\n                    return new ColorFormat(8, 8, 8, 8);\n                case SurfaceFormat.Rgba1010102:\n                    return new ColorFormat(10, 10, 10, 2);\n\n                default:\n                    // Floating point backbuffers formats could be implemented\n                    // but they are not typically used on the backbuffer. In\n                    // those cases it is better to create a render target instead.\n                    throw new NotSupportedException();\n            }\n        }\n\n        public override void CreateDevice()\n        {\n            if (this.GraphicsDevice != null)\n                return;\n\n            var gdi = this.DoPreparingDeviceSettings();\n\n            this.PlatformInitialize(gdi.PresentationParameters);\n\n            this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters);\n\n            // update the touchpanel display size when the graphicsdevice is reset\n            this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel;\n            ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform;\n\n            this.OnDeviceCreated(EventArgs.Empty);\n\n            PresentationParameters gdpp = this.GraphicsDevice.PresentationParameters;\n            this.GraphicsDevice.Viewport = new Viewport(0, 0, gdpp.BackBufferWidth, gdpp.BackBufferHeight);\n\n            ((SdlGameWindow)this.Game.Window).EndScreenDeviceChange(string.Empty, gdpp.BackBufferWidth, gdpp.BackBufferHeight, gdpp.IsFullScreen);\n        }\n\n        private void GraphicsDevice_DeviceReset_UpdateTouchPanel(object sender, EventArgs eventArgs)\n        {\n            TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth;\n            TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight;\n            TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation;\n        }\n\n        private void GraphicsDevice_PresentationChanged_UpdateGamePlatform(object sender, PresentationEventArgs args)\n        {\n            PresentationParameters pp = args.PresentationParameters;\n\n            int displayIndex = SDL.WINDOW.GetDisplayIndex(Game.Window.Handle);\n            string displayName = SDL.DISPLAY.GetDisplayName(displayIndex);\n            ((SdlGameWindow)this.Game.Window).EndScreenDeviceChange(displayName, pp.BackBufferWidth, pp.BackBufferHeight, pp.IsFullScreen);\n        }\n\n\n        #region IGraphicsDeviceManager strategy\n\n        public override bool BeginDraw()\n        {\n            //return base.BeginDraw();\n\n            return true;\n        }\n\n        public override void EndDraw()\n        {\n            //base.EndDraw();\n\n            GraphicsDevice device = this.GraphicsDevice;\n            if (device != null)\n            {\n                device.Present();\n            }\n        }\n\n        #endregion IGraphicsDeviceManager strategy\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.SDL2/SDL2.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Runtime.InteropServices;\nusing System.Diagnostics;\nusing Microsoft.Xna.Platform.Utilities;\n\ninternal class Sdl\n{\n    private static Sdl _current;\n\n    public IntPtr NativeLibrary { get; private set; }\n    public Window WINDOW { get; private set; }\n    public Display DISPLAY { get; private set; }\n    public GL OpenGL { get; private set; }\n    public Mouse MOUSE { get; private set; }\n    public Keyboard KEYBOARD { get; private set; }\n    public Joystick JOYSTICK { get; private set; }\n    public GameController GAMECONTROLLER { get; private set; }\n    public Haptic HAPTIC { get; private set; }\n\n    public readonly Version version;\n\n    public static Sdl Current\n    {\n        get\n        {\n            if (_current != null)\n                return _current;\n\n            if (_current == null)\n                _current = new Sdl();\n\n            return _current;\n        }\n    }\n\n    public Sdl()\n    {\n        NativeLibrary = GetNativeLibrary();\n        LoadEntryPoints(NativeLibrary);\n\n        GetVersion(out version);\n\n        WINDOW = new Window(this, NativeLibrary);\n        DISPLAY = new Display(this, NativeLibrary);\n        OpenGL = new GL(this, NativeLibrary);\n        MOUSE = new Mouse(this, NativeLibrary);\n        KEYBOARD = new Keyboard(this, NativeLibrary);\n        JOYSTICK = new Joystick(this, NativeLibrary);\n        GAMECONTROLLER = new GameController(this, NativeLibrary);\n        HAPTIC = new Haptic(this, NativeLibrary);\n    }\n\n    private IntPtr GetNativeLibrary()\n    {\n        if (CurrentPlatform.OS == OS.Windows)\n            return FuncLoader.LoadLibraryExt(\"SDL2.dll\");\n        else if (CurrentPlatform.OS == OS.Linux)\n            return FuncLoader.LoadLibraryExt(\"libSDL2-2.0.so.0\");\n        else if (CurrentPlatform.OS == OS.MacOSX)\n            return FuncLoader.LoadLibraryExt(\"libSDL2.dylib\");\n        else\n            return FuncLoader.LoadLibraryExt(\"sdl2\");\n    }\n\n\n    [Flags]\n    public enum InitFlags : int\n    {\n        Video          = 0x00000020,\n        Joystick       = 0x00000200,\n        Haptic         = 0x00001000,\n        GameController = 0x00002000,\n    }\n\n    public enum EventType : uint\n    {\n        First = 0,\n\n        Quit = 0x100,\n\n        WindowEvent = 0x200,\n        SysWM = 0x201,\n\n        KeyDown = 0x300,\n        KeyUp = 0x301,\n        TextEditing = 0x302,\n        TextInput = 0x303,\n\n        MouseMotion = 0x400,\n        MouseButtonDown = 0x401,\n        MouseButtonup = 0x402,\n        MouseWheel = 0x403,\n\n        JoyAxisMotion = 0x600,\n        JoyBallMotion = 0x601,\n        JoyHatMotion = 0x602,\n        JoyButtonDown = 0x603,\n        JoyButtonUp   = 0x604,\n        JoyDeviceAdded   = 0x605,\n        JoyDeviceRemoved = 0x606,\n\n        ControllerAxisMotion = 0x650,\n        ControllerButtonDown = 0x651,\n        ControllerButtonUp   = 0x652,\n        ControllerDeviceAdded    = 0x653,\n        ControllerDeviceRemoved  = 0x654,\n        ControllerDeviceRemapped = 0x655,\n\n        FingerDown = 0x700,\n        FingerUp = 0x701,\n        FingerMotion = 0x702,\n\n        DollarGesture = 0x800,\n        DollarRecord = 0x801,\n        MultiGesture = 0x802,\n\n        ClipboardUpdate = 0x900,\n\n        DropFile = 0x1000,\n        DropText = 0x1001,\n        DropBegin = 0x1002,\n        DropComplete = 0x1003,\n\n        AudioDeviceAdded = 0x1100,\n        AudioDeviceRemoved = 0x1101,\n\n        RenderTargetsReset = 0x2000,\n        RenderDeviceReset = 0x2001,\n\n        UserEvent = 0x8000,\n\n        Last = 0xFFFF\n    }\n\n    public enum EventAction\n    {\n        AddEvent = 0x0,\n        PeekEvent = 0x1,\n        GetEvent = 0x2,\n    }\n\n    [StructLayout(LayoutKind.Explicit, Size = 56)]\n    public struct Event\n    {\n        [FieldOffset(0)]\n        public EventType Type;\n        [FieldOffset(0)]\n        public Window.Event Window;\n        [FieldOffset(0)]\n        public Keyboard.Event Key;\n        [FieldOffset(0)]\n        public Mouse.MotionEvent Motion;\n        [FieldOffset(0)]\n        public Keyboard.TextEditingEvent Edit;\n        [FieldOffset(0)]\n        public Keyboard.TextInputEvent Text;\n        [FieldOffset(0)]\n        public Mouse.WheelEvent Wheel;\n        [FieldOffset(0)]\n        public Joystick.DeviceEvent JoystickDevice;\n        [FieldOffset(0)]\n        public GameController.DeviceEvent ControllerDevice;\n        [FieldOffset(0)]\n        public Drop.Event Drop;\n    }\n\n    public struct Rectangle\n    {\n        public int X;\n        public int Y;\n        public int Width;\n        public int Height;\n    }\n\n    public struct Version\n    {\n        public byte Major;\n        public byte Minor;\n        public byte Patch;\n\n        public int PackedValue { get { return (Major << 16 | Minor << 8 | Patch); } }\n\n        public Version(byte major, byte minor, byte patch) : this()\n        {\n            this.Major = major;\n            this.Minor = minor;\n            this.Patch = patch;\n        }\n\n        public static bool operator <(Version l, Version r)\n        {\n            return l.PackedValue < r.PackedValue;\n        }\n\n        public static bool operator >(Version l, Version r)\n        {\n            return l.PackedValue > r.PackedValue;\n        }\n\n        public static bool operator <=(Version l, Version r)\n        {\n            return l.PackedValue <= r.PackedValue;\n        }\n\n        public static bool operator >=(Version l, Version r)\n        {\n            return l.PackedValue >= r.PackedValue;\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{0}.{1}.{2}\",Major, Minor, Patch);\n        }\n    }\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate int d_sdl_init(InitFlags flags);\n    public d_sdl_init SDL_Init;\n\n    public void Init(InitFlags flags)\n    {\n        int res = SDL_Init(flags);\n        GetError(res);\n    }\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate int d_sdl_InitSubSystem(InitFlags flags);\n    public d_sdl_InitSubSystem SDL_InitSubSystem;\n\n    public void InitSubSystem(InitFlags flags)\n    {\n        int res = SDL_InitSubSystem(flags);\n        GetError(res);\n    }\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void d_sdl_QuitSubSystem(InitFlags flags);\n    public d_sdl_QuitSubSystem QuitSubSystem;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate int d_sdl_WasInit(InitFlags flags);\n    public d_sdl_init WasInit;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void d_sdl_quit();\n    public d_sdl_quit Quit;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void d_sdl_disablescreensaver();\n    public d_sdl_disablescreensaver DisableScreenSaver;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void d_sdl_getversion(out Version version);\n    public d_sdl_getversion GetVersion;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate int d_sdl_pollevent([Out] out Event _event);\n    public d_sdl_pollevent PollEvent;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate int d_sdl_pumpevents();\n    public d_sdl_pumpevents PumpEvents;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    private delegate IntPtr d_sdl_creatergbsurfacefrom(IntPtr pixels, int width, int height, int depth, int pitch, uint rMask, uint gMask, uint bMask, uint aMask);\n    private d_sdl_creatergbsurfacefrom SDL_CreateRGBSurfaceFrom;\n\n    public IntPtr CreateRGBSurfaceFrom(byte[] pixels, int width, int height, int depth, int pitch, uint rMask, uint gMask, uint bMask, uint aMask)\n    {\n        var handle = GCHandle.Alloc(pixels, GCHandleType.Pinned);\n        try\n        {\n            return SDL_CreateRGBSurfaceFrom(handle.AddrOfPinnedObject(), width, height, depth, pitch, rMask, gMask, bMask, aMask);\n        }\n        finally\n        {\n            handle.Free();\n        }\n    }\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void d_sdl_freesurface(IntPtr surface);\n    public d_sdl_freesurface FreeSurface;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    private delegate IntPtr d_sdl_geterror();\n    private d_sdl_geterror SDL_GetError;\n\n    public string GetError()\n    {\n        return InteropHelpers.Utf8ToString(SDL_GetError());\n    }\n\n    public void GetError(int res)\n    {\n        if (res < 0)\n            Debug.WriteLine(GetError());\n    }\n\n    public void GetError(IntPtr pointer)\n    {\n        if (pointer == IntPtr.Zero)\n            Debug.WriteLine(GetError());\n    }\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void d_sdl_clearerror();\n    public d_sdl_clearerror ClearError;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate IntPtr d_sdl_gethint(string name);\n    public d_sdl_gethint SDL_GetHint;\n\n    public string GetHint(string name)\n    {\n        return InteropHelpers.Utf8ToString(SDL_GetHint(name));\n    }\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    private delegate IntPtr d_sdl_loadbmp_rw(IntPtr src, int freesrc);\n    private d_sdl_loadbmp_rw SDL_LoadBMP_RW;\n\n    public IntPtr LoadBMP_RW(IntPtr src, int freesrc)\n    {\n        IntPtr pointer = SDL_LoadBMP_RW(src, freesrc);\n        GetError(pointer);\n        return pointer;\n    }\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    private delegate IntPtr d_sdl_rwfrommem(byte[] mem, int size);\n    private d_sdl_rwfrommem SDL_RWFromMem;\n\n    public IntPtr RwFromMem(byte[] mem, int size)\n    {\n        IntPtr pointer = SDL_RWFromMem(mem, size);\n        GetError(pointer);\n        return pointer;\n    }\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate int d_sdl_sethint(string name, string value);\n    public d_sdl_sethint SetHint;\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void d_sdl_free(IntPtr ptr);\n    public d_sdl_free SDL_Free;\n\n\n    private void LoadEntryPoints(IntPtr library)\n    {\n        SDL_Init = FuncLoader.LoadFunctionOrNull<d_sdl_init>(library, \"SDL_Init\");\n        SDL_InitSubSystem = FuncLoader.LoadFunctionOrNull<d_sdl_InitSubSystem>(library, \"SDL_InitSubSystem\");\n        QuitSubSystem = FuncLoader.LoadFunctionOrNull<d_sdl_QuitSubSystem>(library, \"SDL_QuitSubSystem\");\n        WasInit = FuncLoader.LoadFunctionOrNull<d_sdl_init>(library, \"SDL_WasInit\");\n        Quit = FuncLoader.LoadFunctionOrNull<d_sdl_quit>(library, \"SDL_Quit\");\n        DisableScreenSaver = FuncLoader.LoadFunctionOrNull<d_sdl_disablescreensaver>(library, \"SDL_DisableScreenSaver\");\n        GetVersion = FuncLoader.LoadFunctionOrNull<d_sdl_getversion>(library, \"SDL_GetVersion\");\n        PollEvent = FuncLoader.LoadFunctionOrNull<d_sdl_pollevent>(library, \"SDL_PollEvent\");\n        PumpEvents = FuncLoader.LoadFunctionOrNull<d_sdl_pumpevents>(library, \"SDL_PumpEvents\");\n        SDL_CreateRGBSurfaceFrom = FuncLoader.LoadFunctionOrNull<d_sdl_creatergbsurfacefrom>(library, \"SDL_CreateRGBSurfaceFrom\");\n        FreeSurface = FuncLoader.LoadFunctionOrNull<d_sdl_freesurface>(library, \"SDL_FreeSurface\");\n        SDL_GetError = FuncLoader.LoadFunctionOrNull<d_sdl_geterror>(library, \"SDL_GetError\");\n        ClearError = FuncLoader.LoadFunctionOrNull<d_sdl_clearerror>(library, \"SDL_ClearError\");\n        SDL_GetHint = FuncLoader.LoadFunctionOrNull<d_sdl_gethint>(library, \"SDL_GetHint\");\n        SDL_LoadBMP_RW = FuncLoader.LoadFunctionOrNull<d_sdl_loadbmp_rw>(library, \"SDL_LoadBMP_RW\");\n        SDL_RWFromMem = FuncLoader.LoadFunctionOrNull<d_sdl_rwfrommem>(library, \"SDL_RWFromMem\");\n        SetHint = FuncLoader.LoadFunctionOrNull<d_sdl_sethint>(library, \"SDL_SetHint\");\n        SDL_Free = FuncLoader.LoadFunctionOrNull<d_sdl_free>(library, \"SDL_free\");\n    }\n\n\n    public class Window\n    {\n        private Sdl _sdl;\n\n        public const int PosUndefined = 0x1FFF0000;\n        public const int PosCentered = 0x2FFF0000;\n\n        public enum EventId : byte\n        {\n            None,\n            Shown,\n            Hidden,\n            Exposed,\n            Moved,\n            Resized,\n            SizeChanged,\n            Minimized,\n            Maximized,\n            Restored,\n            Enter,\n            Leave,\n            FocusGained,\n            FocusLost,\n            Close,\n        }\n\n\n        public Window(Sdl sdl, IntPtr library)\n        {\n            _sdl = sdl;\n            LoadEntryPoints(library);\n        }\n\n        public enum State : int\n        {\n            Fullscreen      = 0x00000001,\n            OpenGL          = 0x00000002,\n            Shown           = 0x00000004,\n            Hidden          = 0x00000008,\n            Borderless      = 0x00000010,\n            Resizable       = 0x00000020,\n            Minimized       = 0x00000040,\n            Maximized       = 0x00000080,\n            Grabbed         = 0x00000100,\n            InputFocus      = 0x00000200,\n            MouseFocus      = 0x00000400,\n            Foreign         = 0x00000800,\n            FullscreenDesktop = 0x00001001,\n            AllowHighDPI    = 0x00002000,\n            MouseCapture    = 0x00004000,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Event\n        {\n            public EventType Type;\n            public uint TimeStamp;\n            public uint WindowID;\n            public EventId EventID;\n            private byte padding1;\n            private byte padding2;\n            private byte padding3;\n            public int Data1;\n            public int Data2;\n        }\n\n        public enum SysWMType\n        {\n            Unknow,\n            Windows,\n            X11,\n            Directfb,\n            Cocoa,\n            UiKit,\n            Wayland,\n            Mir,\n            WinRt,\n            Android\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct SDL_SysWMinfo\n        {\n            public Version version;\n            public SysWMType subsystem;\n            public IntPtr window;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_createwindow(string title, int x, int y, int w, int h, int flags);\n        private d_sdl_createwindow SDL_CreateWindow;\n\n        public IntPtr Create(string title, int x, int y, int w, int h, Sdl.Window.State flags)\n        {\n            IntPtr pointer = SDL_CreateWindow(title, x, y, w, h, (int)flags);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_destroywindow(IntPtr window);\n        public d_sdl_destroywindow Destroy;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate uint d_sdl_getwindowid(IntPtr window);\n        public d_sdl_getwindowid GetWindowId;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_getwindowdisplayindex(IntPtr window);\n        private d_sdl_getwindowdisplayindex SDL_GetWindowDisplayIndex;\n\n        public int GetDisplayIndex(IntPtr window)\n        {\n            int res = SDL_GetWindowDisplayIndex(window);\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_getwindowflags(IntPtr window);\n        public d_sdl_getwindowflags GetWindowFlags;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_setwindowicon(IntPtr window, IntPtr icon);\n        public d_sdl_setwindowicon SetIcon;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_getwindowposition(IntPtr window, out int x, out int y);\n        public d_sdl_getwindowposition GetPosition;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_getwindowsize(IntPtr window, out int w, out int h);\n        public d_sdl_getwindowsize GetSize;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_setwindowbordered(IntPtr window, int bordered);\n        public d_sdl_setwindowbordered SetBordered;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_setwindowfullscreen(IntPtr window, int flags);\n        private d_sdl_setwindowfullscreen SDL_SetWindowFullscreen;\n\n        public void SetFullscreen(IntPtr window, Sdl.Window.State flags)\n        {\n            int res = SDL_SetWindowFullscreen(window, (int)flags);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_setwindowposition(IntPtr window, int x, int y);\n        public d_sdl_setwindowposition SetPosition;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_setwindowresizable(IntPtr window, bool resizable);\n        public d_sdl_setwindowresizable SetResizable;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_setwindowsize(IntPtr window, int w, int h);\n        public d_sdl_setwindowsize SetSize;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private unsafe delegate void d_sdl_setwindowtitle(IntPtr window, byte* value);\n        private d_sdl_setwindowtitle SDL_SetWindowTitle;\n\n        public unsafe void SetTitle(IntPtr handle, string title)\n        {\n            byte[] str = Encoding.UTF8.GetBytes(title+'\\0');\n\n            fixed (byte* pStr = str)\n            {\n                SDL_SetWindowTitle(handle, pStr);\n            }\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_showwindow(IntPtr window);\n        public d_sdl_showwindow Show;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate bool d_sdl_getwindowwminfo(IntPtr window, ref SDL_SysWMinfo sysWMinfo);\n        public d_sdl_getwindowwminfo GetWindowWMInfo;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_getwindowborderssize(IntPtr window, out int top, out int left, out int right, out int bottom);\n        public d_sdl_getwindowborderssize GetBorderSize;\n\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            SDL_CreateWindow = FuncLoader.LoadFunctionOrNull<d_sdl_createwindow>(library, \"SDL_CreateWindow\");\n            Destroy = FuncLoader.LoadFunctionOrNull<d_sdl_destroywindow>(library, \"SDL_DestroyWindow\");\n            GetWindowId = FuncLoader.LoadFunctionOrNull<d_sdl_getwindowid>(library, \"SDL_GetWindowID\");\n            SDL_GetWindowDisplayIndex = FuncLoader.LoadFunctionOrNull<d_sdl_getwindowdisplayindex>(library, \"SDL_GetWindowDisplayIndex\");\n            GetWindowFlags = FuncLoader.LoadFunctionOrNull<d_sdl_getwindowflags>(library, \"SDL_GetWindowFlags\");\n            SetIcon = FuncLoader.LoadFunctionOrNull<d_sdl_setwindowicon>(library, \"SDL_SetWindowIcon\");\n            GetPosition = FuncLoader.LoadFunctionOrNull<d_sdl_getwindowposition>(library, \"SDL_GetWindowPosition\");\n            GetSize = FuncLoader.LoadFunctionOrNull<d_sdl_getwindowsize>(library, \"SDL_GetWindowSize\");\n            SetBordered = FuncLoader.LoadFunctionOrNull<d_sdl_setwindowbordered>(library, \"SDL_SetWindowBordered\");\n            SDL_SetWindowFullscreen = FuncLoader.LoadFunctionOrNull<d_sdl_setwindowfullscreen>(library, \"SDL_SetWindowFullscreen\");\n            SetPosition = FuncLoader.LoadFunctionOrNull<d_sdl_setwindowposition>(library, \"SDL_SetWindowPosition\");\n            SetResizable = FuncLoader.LoadFunctionOrNull<d_sdl_setwindowresizable>(library, \"SDL_SetWindowResizable\");\n            SetSize = FuncLoader.LoadFunctionOrNull<d_sdl_setwindowsize>(library, \"SDL_SetWindowSize\");\n            SDL_SetWindowTitle = FuncLoader.LoadFunctionOrNull<d_sdl_setwindowtitle>(library, \"SDL_SetWindowTitle\");\n            Show = FuncLoader.LoadFunctionOrNull<d_sdl_showwindow>(library, \"SDL_ShowWindow\");\n            GetWindowWMInfo = FuncLoader.LoadFunctionOrNull<d_sdl_getwindowwminfo>(library, \"SDL_GetWindowWMInfo\");\n            GetBorderSize = FuncLoader.LoadFunctionOrNull<d_sdl_getwindowborderssize>(library, \"SDL_GetWindowBordersSize\");\n        }\n    }\n\n    public class Display\n    {\n        private Sdl _sdl;\n\n        public struct Mode\n        {\n            public uint Format;\n            public int Width;\n            public int Height;\n            public int RefreshRate;\n            public IntPtr DriverData;\n        }\n\n        public Display(Sdl sdl, IntPtr library)\n        {\n            _sdl = sdl;\n            LoadEntryPoints(library);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_getdisplaybounds(int displayIndex, out Rectangle rect);\n        private d_sdl_getdisplaybounds SDL_GetDisplayBounds;\n\n        public void GetBounds(int displayIndex, out Rectangle rect)\n        {\n            int res = SDL_GetDisplayBounds(displayIndex, out rect);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_getcurrentdisplaymode(int displayIndex, out Mode mode);\n        private d_sdl_getcurrentdisplaymode SDL_GetCurrentDisplayMode;\n\n        public void GetCurrentDisplayMode(int displayIndex, out Mode mode)\n        {\n            int res = SDL_GetCurrentDisplayMode(displayIndex, out mode);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_getdisplaymode(int displayIndex, int modeIndex, out Mode mode);\n        private d_sdl_getdisplaymode SDL_GetDisplayMode;\n\n        public void GetDisplayMode(int displayIndex, int modeIndex, out Mode mode)\n        {\n            int res = SDL_GetDisplayMode(displayIndex, modeIndex, out mode);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_getclosestdisplaymode(int displayIndex, Mode mode, out Mode closest);\n        private d_sdl_getclosestdisplaymode SDL_GetClosestDisplayMode;\n\n        public void GetClosestDisplayMode(int displayIndex, Mode mode, out Mode closest)\n        {\n            int res = SDL_GetClosestDisplayMode(displayIndex, mode, out closest);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_getdisplayname(int index);\n        private d_sdl_getdisplayname SDL_GetDisplayName;\n\n        public string GetDisplayName(int index)\n        {\n            IntPtr pointer = SDL_GetDisplayName(index);\n            _sdl.GetError(pointer);\n            return InteropHelpers.Utf8ToString(pointer);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_getnumdisplaymodes(int displayIndex);\n        private d_sdl_getnumdisplaymodes SDL_GetNumDisplayModes;\n\n        public int GetNumDisplayModes(int displayIndex)\n        {\n            int res = SDL_GetNumDisplayModes(displayIndex);\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_getnumvideodisplays();\n        private d_sdl_getnumvideodisplays SDL_GetNumVideoDisplays;\n\n        public int GetNumVideoDisplays()\n        {\n            int res = SDL_GetNumVideoDisplays();\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_getwindowdisplayindex(IntPtr window);\n        private d_sdl_getwindowdisplayindex SDL_GetWindowDisplayIndex;\n\n        public int GetWindowDisplayIndex(IntPtr window)\n        {\n            int res = SDL_GetWindowDisplayIndex(window);\n            _sdl.GetError(res);\n            return res;\n        }\n\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            SDL_GetDisplayBounds = FuncLoader.LoadFunctionOrNull<d_sdl_getdisplaybounds>(library, \"SDL_GetDisplayBounds\");\n            SDL_GetCurrentDisplayMode = FuncLoader.LoadFunctionOrNull<d_sdl_getcurrentdisplaymode>(library, \"SDL_GetCurrentDisplayMode\");\n            SDL_GetDisplayMode = FuncLoader.LoadFunctionOrNull<d_sdl_getdisplaymode>(library, \"SDL_GetDisplayMode\");\n            SDL_GetClosestDisplayMode = FuncLoader.LoadFunctionOrNull<d_sdl_getclosestdisplaymode>(library, \"SDL_GetClosestDisplayMode\");\n            SDL_GetDisplayName = FuncLoader.LoadFunctionOrNull<d_sdl_getdisplayname>(library, \"SDL_GetDisplayName\");\n            SDL_GetNumDisplayModes = FuncLoader.LoadFunctionOrNull<d_sdl_getnumdisplaymodes>(library, \"SDL_GetNumDisplayModes\");\n            SDL_GetNumVideoDisplays = FuncLoader.LoadFunctionOrNull<d_sdl_getnumvideodisplays>(library, \"SDL_GetNumVideoDisplays\");\n            SDL_GetWindowDisplayIndex = FuncLoader.LoadFunctionOrNull<d_sdl_getwindowdisplayindex>(library, \"SDL_GetWindowDisplayIndex\");\n        }\n    }\n\n    public class GL\n    {\n        private Sdl _sdl;\n\n        public enum Attribute\n        {\n            RedSize,\n            GreenSize,\n            BlueSize,\n            AlphaSize,\n            BufferSize,\n            DoubleBuffer,\n            DepthSize,\n            StencilSize,\n            AccumRedSize,\n            AccumGreenSize,\n            AccumBlueSize,\n            AccumAlphaSize,\n            Stereo,\n            MultiSampleBuffers,\n            MultiSampleSamples,\n            AcceleratedVisual,\n            RetainedBacking,\n            ContextMajorVersion,\n            ContextMinorVersion,\n            ContextEgl,\n            ContextFlags,\n            ContextProfileMask,\n            ShareWithCurrentContext,\n            FramebufferSRGBCapable,\n            ContextReleaseBehaviour,\n        }\n\n        public enum ContextProfile : int\n        {\n            /// <summary>leaves the choice of profile up to SDL</summary>\n            Default = 0,\n            Core = 1,\n            Compatibility = 2,\n            ES = 3,\n        }\n\n        [Flags]\n        public enum ContextFlag : int\n        {\n            Debug             = 1,\n            ForwardCompatible = 2,\n            RobustAccess      = 4,\n            ResetIsolation    = 8,\n        }\n\n        public enum ContextReleaseBehaviour : int\n        {\n            None  = 0,\n            Flush = 1,\n        }\n\n        public GL(Sdl sdl, IntPtr library)\n        {\n            _sdl = sdl;\n            LoadEntryPoints(library);\n        }\n\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_gl_createcontext(IntPtr window);\n        private d_sdl_gl_createcontext SDL_GL_CreateContext;\n\n        public IntPtr CreateGLContext(IntPtr window)\n        {\n            IntPtr pointer = SDL_GL_CreateContext(window);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_gl_deletecontext(IntPtr context);\n        public d_sdl_gl_deletecontext DeleteContext;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_gl_getcurrentcontext();\n        private d_sdl_gl_getcurrentcontext SDL_GL_GetCurrentContext;\n\n        public IntPtr GetCurrentContext()\n        {\n            IntPtr pointer = SDL_GL_GetCurrentContext();\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate IntPtr d_sdl_gl_getprocaddress(string proc);\n        public d_sdl_gl_getprocaddress GetProcAddress;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_gl_getswapinterval();\n        public d_sdl_gl_getswapinterval GetSwapInterval;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_gl_makecurrent(IntPtr window, IntPtr context);\n        public d_sdl_gl_makecurrent MakeCurrent;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_gl_setattribute(Attribute attr, int value);\n        private d_sdl_gl_setattribute SDL_GL_SetAttribute;\n\n        public int SetAttribute(Attribute attr, int value)\n        {\n            int res = SDL_GL_SetAttribute(attr, value);\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_gl_setswapinterval(int interval);\n        public d_sdl_gl_setswapinterval SetSwapInterval;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_gl_swapwindow(IntPtr window);\n        public d_sdl_gl_swapwindow SwapWindow;\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            SDL_GL_CreateContext = FuncLoader.LoadFunctionOrNull<d_sdl_gl_createcontext>(library, \"SDL_GL_CreateContext\");\n            DeleteContext = FuncLoader.LoadFunctionOrNull<d_sdl_gl_deletecontext>(library, \"SDL_GL_DeleteContext\");\n            SDL_GL_GetCurrentContext = FuncLoader.LoadFunctionOrNull<d_sdl_gl_getcurrentcontext>(library, \"SDL_GL_GetCurrentContext\");\n            GetProcAddress = FuncLoader.LoadFunctionOrNull<d_sdl_gl_getprocaddress>(library, \"SDL_GL_GetProcAddress\");\n            GetSwapInterval = FuncLoader.LoadFunctionOrNull<d_sdl_gl_getswapinterval>(library, \"SDL_GL_GetSwapInterval\");\n            MakeCurrent = FuncLoader.LoadFunctionOrNull<d_sdl_gl_makecurrent>(library, \"SDL_GL_MakeCurrent\");\n            SDL_GL_SetAttribute = FuncLoader.LoadFunctionOrNull<d_sdl_gl_setattribute>(library, \"SDL_GL_SetAttribute\");\n            SetSwapInterval = FuncLoader.LoadFunctionOrNull<d_sdl_gl_setswapinterval>(library, \"SDL_GL_SetSwapInterval\");\n            SwapWindow = FuncLoader.LoadFunctionOrNull<d_sdl_gl_swapwindow>(library, \"SDL_GL_SwapWindow\");\n        }\n    }\n\n    public class Mouse\n    {\n        private Sdl _sdl;\n\n        [Flags]\n        public enum Button\n        {\n            Left = 1 << 0,\n            Middle = 1 << 1,\n            Right = 1 << 2,\n            X1Mask = 1 << 3,\n            X2Mask = 1 << 4\n        }\n\n        public enum SystemCursor\n        {\n            Arrow,\n            IBeam,\n            Wait,\n            Crosshair,\n            WaitArrow,\n            SizeNWSE,\n            SizeNESW,\n            SizeWE,\n            SizeNS,\n            SizeAll,\n            No,\n            Hand\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct MotionEvent\n        {\n            public EventType Type;\n            public uint Timestamp;\n            public uint WindowID;\n            public uint Which;\n            public byte State;\n            private byte _padding1;\n            private byte _padding2;\n            private byte _padding3;\n            public int X;\n            public int Y;\n            public int Xrel;\n            public int Yrel;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct WheelEvent\n        {\n            public EventType Type;\n            public uint TimeStamp;\n            public uint WindowId;\n            public uint Which;\n            public int X;\n            public int Y;\n            public uint Direction;\n        }\n\n        public Mouse(Sdl sdl, IntPtr library)\n        {\n            _sdl = sdl;\n            LoadEntryPoints(library);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_createcolorcursor(IntPtr surface, int x, int y);\n        private d_sdl_createcolorcursor SDL_CreateColorCursor;\n\n        public IntPtr CreateColorCursor(IntPtr surface, int x, int y)\n        {\n            IntPtr pointer = SDL_CreateColorCursor(surface, x, y);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_createsystemcursor(SystemCursor id);\n        private d_sdl_createsystemcursor SDL_CreateSystemCursor;\n\n        public IntPtr CreateSystemCursor(SystemCursor id)\n        {\n            IntPtr pointer = SDL_CreateSystemCursor(id);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_freecursor(IntPtr cursor);\n        public d_sdl_freecursor FreeCursor;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate Button d_sdl_getglobalmousestate(out int x, out int y);\n        public d_sdl_getglobalmousestate GetGlobalState;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate Button d_sdl_getmousestate(out int x, out int y);\n        public d_sdl_getmousestate GetState;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_setcursor(IntPtr cursor);\n        public d_sdl_setcursor SetCursor;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_showcursor(int toggle);\n        public d_sdl_showcursor ShowCursor;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_warpmouseinwindow(IntPtr window, int x, int y);\n        public d_sdl_warpmouseinwindow WarpInWindow;\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            SDL_CreateColorCursor = FuncLoader.LoadFunctionOrNull<d_sdl_createcolorcursor>(library, \"SDL_CreateColorCursor\");\n            SDL_CreateSystemCursor = FuncLoader.LoadFunctionOrNull<d_sdl_createsystemcursor>(library, \"SDL_CreateSystemCursor\");\n            FreeCursor = FuncLoader.LoadFunctionOrNull<d_sdl_freecursor>(library, \"SDL_FreeCursor\");\n            GetGlobalState = FuncLoader.LoadFunctionOrNull<d_sdl_getglobalmousestate>(library, \"SDL_GetGlobalMouseState\");\n            GetState = FuncLoader.LoadFunctionOrNull<d_sdl_getmousestate>(library, \"SDL_GetMouseState\");\n            SetCursor = FuncLoader.LoadFunctionOrNull<d_sdl_setcursor>(library, \"SDL_SetCursor\");\n            ShowCursor = FuncLoader.LoadFunctionOrNull<d_sdl_showcursor>(library, \"SDL_ShowCursor\");\n            WarpInWindow = FuncLoader.LoadFunctionOrNull<d_sdl_warpmouseinwindow>(library, \"SDL_WarpMouseInWindow\");\n        }\n    }\n\n    public class Keyboard\n    {\n        private Sdl _sdl;\n\n        public struct Keysym\n        {\n            public int Scancode;\n            public int Sym;\n            public Keymod Mod;\n            public uint Unicode;\n        }\n\n        [Flags]\n        public enum Keymod : ushort\n        {\n            None = 0x0000,\n            LeftShift = 0x0001,\n            RightShift = 0x0002,\n            LeftCtrl = 0x0040,\n            RightCtrl = 0x0080,\n            LeftAlt = 0x0100,\n            RightAlt = 0x0200,\n            LeftGui = 0x0400,\n            RightGui = 0x0800,\n            NumLock = 0x1000,\n            CapsLock = 0x2000,\n            AltGr = 0x4000,\n            Reserved = 0x8000,\n            Ctrl = (LeftCtrl | RightCtrl),\n            Shift = (LeftShift | RightShift),\n            Alt = (LeftAlt | RightAlt),\n            Gui = (LeftGui | RightGui)\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Event\n        {\n            public EventType Type;\n            public uint TimeStamp;\n            public uint WindowId;\n            public byte State;\n            public byte Repeat;\n            private byte padding2;\n            private byte padding3;\n            public Keysym Keysym;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public unsafe struct TextEditingEvent\n        {\n            public EventType Type;\n            public uint Timestamp;\n            public uint WindowId;\n            public fixed byte Text[32];\n            public int Start;\n            public int Length;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public unsafe struct TextInputEvent\n        {\n            public EventType Type;\n            public uint Timestamp;\n            public uint WindowId;\n            public fixed byte Text[32];\n        }\n\n\n        public Keyboard(Sdl sdl, IntPtr library)\n        {\n            _sdl = sdl;\n            LoadEntryPoints(library);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate Keymod d_sdl_getmodstate();\n        public d_sdl_getmodstate GetModState;\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            GetModState = FuncLoader.LoadFunctionOrNull<d_sdl_getmodstate>(library, \"SDL_GetModState\");\n        }\n    }\n\n    public class Joystick\n    {\n        private Sdl _sdl;\n\n        [Flags]\n        public enum Hat : byte\n        {\n            Centered = 0,\n\n            Up    = 1 << 0,\n            Right = 1 << 1,\n            Down  = 1 << 2,\n            Left  = 1 << 3\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct DeviceEvent\n        {\n            public EventType Type;\n            public uint TimeStamp;\n            public int Which;\n        }\n\n        public Joystick(Sdl sdl, IntPtr library)\n        {\n            _sdl = sdl;\n            LoadEntryPoints(library);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_joystickclose(IntPtr joystick);\n        public d_sdl_joystickclose Close;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_joystickfrominstanceid(int joyid);\n        private d_sdl_joystickfrominstanceid SDL_JoystickFromInstanceID;\n\n        public IntPtr FromInstanceID(int joyid)\n        {\n            IntPtr pointer = SDL_JoystickFromInstanceID(joyid);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate short d_sdl_joystickgetaxis(IntPtr joystick, int axis);\n        public d_sdl_joystickgetaxis GetAxis;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate byte d_sdl_joystickgetbutton(IntPtr joystick, int button);\n        public d_sdl_joystickgetbutton GetButton;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_joystickname(IntPtr joystick);\n        private d_sdl_joystickname JoystickName;\n\n        public string GetJoystickName(IntPtr joystick)\n        {\n            return InteropHelpers.Utf8ToString(JoystickName(joystick));\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate Guid d_sdl_joystickgetguid(IntPtr joystick);\n        public d_sdl_joystickgetguid GetGUID;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate Hat d_sdl_joystickgethat(IntPtr joystick, int hat);\n        public d_sdl_joystickgethat GetHat;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_joystickinstanceid(IntPtr joystick);\n        public d_sdl_joystickinstanceid InstanceID;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_joystickopen(int deviceIndex);\n        private d_sdl_joystickopen SDL_JoystickOpen;\n\n        public IntPtr Open(int deviceIndex)\n        {\n            IntPtr pointer = SDL_JoystickOpen(deviceIndex);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_joysticknumaxes(IntPtr joystick);\n        private d_sdl_joysticknumaxes SDL_JoystickNumAxes;\n\n        public int NumAxes(IntPtr joystick)\n        {\n            int res = SDL_JoystickNumAxes(joystick);\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_joysticknumbuttons(IntPtr joystick);\n        private d_sdl_joysticknumbuttons SDL_JoystickNumButtons;\n\n        public int NumButtons(IntPtr joystick)\n        {\n            int res = SDL_JoystickNumButtons(joystick);\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_joysticknumhats(IntPtr joystick);\n        private d_sdl_joysticknumhats SDL_JoystickNumHats;\n\n        public int NumHats(IntPtr joystick)\n        {\n            int res = SDL_JoystickNumHats(joystick);\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_numjoysticks();\n        private d_sdl_numjoysticks SDL_NumJoysticks;\n\n        public int NumJoysticks()\n        {\n            int res = SDL_NumJoysticks();\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_JoystickUpdate();\n        public d_sdl_JoystickUpdate JoystickUpdate;\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            Close = FuncLoader.LoadFunctionOrNull<d_sdl_joystickclose>(library, \"SDL_JoystickClose\");\n            SDL_JoystickFromInstanceID = FuncLoader.LoadFunctionOrNull<d_sdl_joystickfrominstanceid>(library, \"SDL_JoystickFromInstanceID\");\n            GetAxis = FuncLoader.LoadFunctionOrNull<d_sdl_joystickgetaxis>(library, \"SDL_JoystickGetAxis\");\n            GetButton = FuncLoader.LoadFunctionOrNull<d_sdl_joystickgetbutton>(library, \"SDL_JoystickGetButton\");\n            JoystickName = FuncLoader.LoadFunctionOrNull<d_sdl_joystickname>(library, \"SDL_JoystickName\");\n            GetGUID = FuncLoader.LoadFunctionOrNull<d_sdl_joystickgetguid>(library, \"SDL_JoystickGetGUID\");\n            GetHat = FuncLoader.LoadFunctionOrNull<d_sdl_joystickgethat>(library, \"SDL_JoystickGetHat\");\n            InstanceID = FuncLoader.LoadFunctionOrNull<d_sdl_joystickinstanceid>(library, \"SDL_JoystickInstanceID\");\n            SDL_JoystickOpen = FuncLoader.LoadFunctionOrNull<d_sdl_joystickopen>(library, \"SDL_JoystickOpen\");\n            SDL_JoystickNumAxes = FuncLoader.LoadFunctionOrNull<d_sdl_joysticknumaxes>(library, \"SDL_JoystickNumAxes\");\n            SDL_JoystickNumButtons = FuncLoader.LoadFunctionOrNull<d_sdl_joysticknumbuttons>(library, \"SDL_JoystickNumButtons\");\n            SDL_JoystickNumHats = FuncLoader.LoadFunctionOrNull<d_sdl_joysticknumhats>(library, \"SDL_JoystickNumHats\");\n            SDL_NumJoysticks = FuncLoader.LoadFunctionOrNull<d_sdl_numjoysticks>(library, \"SDL_NumJoysticks\");\n            JoystickUpdate = FuncLoader.LoadFunctionOrNull<d_sdl_JoystickUpdate>(library, \"SDL_JoystickUpdate\");\n        }\n    }\n\n    public class GameController\n    {\n        private Sdl _sdl;\n\n        public enum Axis\n        {\n            Invalid = -1,\n            LeftX,\n            LeftY,\n            RightX,\n            RightY,\n            TriggerLeft,\n            TriggerRight,\n            Max,\n        }\n\n        public enum Button\n        {\n            Invalid = -1,\n            A,\n            B,\n            X,\n            Y,\n            Back,\n            Guide,\n            Start,\n            LeftStick,\n            RightStick,\n            LeftShoulder,\n            RightShoulder,\n            DpadUp,\n            DpadDown,\n            DpadLeft,\n            DpadRight,\n            Max,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct DeviceEvent\n        {\n            public EventType Type;\n            public uint TimeStamp;\n            public int Which;\n        }\n\n        public GameController(Sdl sdl, IntPtr library)\n        {\n            _sdl = sdl;\n            LoadEntryPoints(library);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_gamecontrolleraddmapping(string mappingString);\n        public d_sdl_gamecontrolleraddmapping AddMapping;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_gamecontrolleraddmappingsfromrw(IntPtr rw, int freew);\n        public d_sdl_gamecontrolleraddmappingsfromrw AddMappingFromRw;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_gamecontrollerclose(IntPtr gamecontroller);\n        public d_sdl_gamecontrollerclose Close;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_joystickfrominstanceid(int joyid);\n        private d_sdl_joystickfrominstanceid SDL_GameControllerFromInstanceID;\n\n        public IntPtr FromInstanceID(int joyid)\n        {\n            IntPtr pointer = SDL_GameControllerFromInstanceID(joyid);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate short d_sdl_gamecontrollergetaxis(IntPtr gamecontroller, Axis axis);\n        public d_sdl_gamecontrollergetaxis GetAxis;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate byte d_sdl_gamecontrollergetbutton(IntPtr gamecontroller, Button button);\n        public d_sdl_gamecontrollergetbutton GetButton;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_gamecontrollergetjoystick(IntPtr gamecontroller);\n        private d_sdl_gamecontrollergetjoystick SDL_GameControllerGetJoystick;\n\n        public IntPtr GetJoystick(IntPtr gamecontroller)\n        {\n            IntPtr pointer = SDL_GameControllerGetJoystick(gamecontroller);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate byte d_sdl_isgamecontroller(int joystickIndex);\n        public d_sdl_isgamecontroller IsGameController;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate IntPtr d_sdl_gamecontrollermapping(IntPtr gamecontroller);\n        public d_sdl_gamecontrollermapping SDL_GameControllerMapping;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_gamecontrolleropen(int joystickIndex);\n        private d_sdl_gamecontrolleropen SDL_GameControllerOpen;\n\n        public IntPtr Open(int joystickIndex)\n        {\n            IntPtr pointer = SDL_GameControllerOpen(joystickIndex);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_gamecontrollername(IntPtr gamecontroller);\n        private d_sdl_gamecontrollername SDL_GameControllerName;\n\n        public string GetName(IntPtr gamecontroller)\n        {\n            return InteropHelpers.Utf8ToString(SDL_GameControllerName(gamecontroller));\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_gamecontrollerrumble(IntPtr gamecontroller, ushort left, ushort right, uint duration);\n        public d_sdl_gamecontrollerrumble Rumble;\n        public d_sdl_gamecontrollerrumble RumbleTriggers;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate byte d_sdl_gamecontrollerhasrumble(IntPtr gamecontroller);\n        public d_sdl_gamecontrollerhasrumble HasRumble;\n        public d_sdl_gamecontrollerhasrumble HasRumbleTriggers;\n\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_GameControllerUpdate();\n        public d_sdl_GameControllerUpdate GameControllerUpdate;\n\n        private void LoadEntryPoints(IntPtr library)\n        {            \n            AddMapping = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrolleraddmapping>(library, \"SDL_GameControllerAddMapping\");\n            AddMappingFromRw = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrolleraddmappingsfromrw>(library, \"SDL_GameControllerAddMappingsFromRW\");\n            Close = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollerclose>(library, \"SDL_GameControllerClose\");\n            SDL_GameControllerFromInstanceID = FuncLoader.LoadFunctionOrNull<d_sdl_joystickfrominstanceid>(library, \"SDL_JoystickFromInstanceID\");\n            GetAxis = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollergetaxis>(library, \"SDL_GameControllerGetAxis\");\n            GetButton = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollergetbutton>(library, \"SDL_GameControllerGetButton\");\n            SDL_GameControllerGetJoystick = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollergetjoystick>(library, \"SDL_GameControllerGetJoystick\");\n            IsGameController = FuncLoader.LoadFunctionOrNull<d_sdl_isgamecontroller>(library, \"SDL_IsGameController\");\n            SDL_GameControllerMapping = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollermapping>(library, \"SDL_GameControllerMapping\");\n            SDL_GameControllerOpen = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrolleropen>(library, \"SDL_GameControllerOpen\");\n            SDL_GameControllerName = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollername>(library, \"SDL_GameControllerName\");\n            Rumble = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollerrumble>(library, \"SDL_GameControllerRumble\");\n            RumbleTriggers = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollerrumble>(library, \"SDL_GameControllerRumbleTriggers\");\n            HasRumble = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollerhasrumble>(library, \"SDL_GameControllerHasRumble\");\n            HasRumbleTriggers = FuncLoader.LoadFunctionOrNull<d_sdl_gamecontrollerhasrumble>(library, \"SDL_GameControllerHasRumbleTriggers\");\n            GameControllerUpdate = FuncLoader.LoadFunctionOrNull<d_sdl_GameControllerUpdate>(library, \"SDL_GameControllerUpdate\");\n        }\n    }\n\n    public class Haptic\n    {\n        private Sdl _sdl;\n\n        // For some reason, different game controllers support different maximum values\n        // Also, the closer a given res is to the maximum, the more likely the res will be ignored\n        // Hence, we're setting an arbitrary safe res as a maximum\n        public const uint Infinity = 1000000U;\n\n        public enum EffectId : ushort\n        {\n            LeftRight = (1 << 2),\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct LeftRight\n        {\n            public EffectId Type;\n            public uint Length;\n            public ushort LargeMagnitude;\n            public ushort SmallMagnitude;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct Effect\n        {\n            [FieldOffset(0)] public EffectId type;\n            [FieldOffset(0)] public LeftRight leftright;\n        }\n\n        public Haptic(Sdl sdl, IntPtr library)\n        {\n            _sdl = sdl;\n            LoadEntryPoints(library);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate void d_sdl_hapticclose(IntPtr haptic);\n        public d_sdl_hapticclose Close;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_hapticeffectsupported(IntPtr haptic, ref Effect effect);\n        public d_sdl_hapticeffectsupported EffectSupported;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate int d_sdl_joystickishaptic(IntPtr joystick);\n        public d_sdl_joystickishaptic IsHaptic;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_hapticneweffect(IntPtr haptic, ref Effect effect);\n        private d_sdl_hapticneweffect SDL_HapticNewEffect;\n\n        public void NewEffect(IntPtr haptic, ref Effect effect)\n        {\n            int res = SDL_HapticNewEffect(haptic, ref effect);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        public delegate IntPtr d_sdl_hapticopen(int device_index);\n        public d_sdl_hapticopen Open;\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate IntPtr d_sdl_hapticopenfromjoystick(IntPtr joystick);\n        private d_sdl_hapticopenfromjoystick SDL_HapticOpenFromJoystick;\n\n        public IntPtr OpenFromJoystick(IntPtr joystick)\n        {\n            IntPtr pointer = SDL_HapticOpenFromJoystick(joystick);\n            _sdl.GetError(pointer);\n            return pointer;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_hapticrumbleinit(IntPtr haptic);\n        private d_sdl_hapticrumbleinit SDL_HapticRumbleInit;\n\n        public void RumbleInit(IntPtr haptic)\n        {\n            int res = SDL_HapticRumbleInit(haptic);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_hapticrumbleplay(IntPtr haptic, float strength, uint length);\n        private d_sdl_hapticrumbleplay SDL_HapticRumblePlay;\n\n        public void RumblePlay(IntPtr haptic, float strength, uint length)\n        {\n            int res = SDL_HapticRumblePlay(haptic, strength, length);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_hapticrumblesupported(IntPtr haptic);\n        private d_sdl_hapticrumblesupported SDL_HapticRumbleSupported;\n\n        public int RumbleSupported(IntPtr haptic)\n        {\n            int res = SDL_HapticRumbleSupported(haptic);\n            _sdl.GetError(res);\n            return res;\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_hapticruneffect(IntPtr haptic, int effect, uint iterations);\n        private d_sdl_hapticruneffect SDL_HapticRunEffect;\n\n        public void RunEffect(IntPtr haptic, int effect, uint iterations)\n        {\n            int res = SDL_HapticRunEffect(haptic, effect, iterations);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_hapticstopall(IntPtr haptic);\n        private d_sdl_hapticstopall SDL_HapticStopAll;\n\n        public void StopAll(IntPtr haptic)\n        {\n            int res = SDL_HapticStopAll(haptic);\n            _sdl.GetError(res);\n        }\n\n        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n        private delegate int d_sdl_hapticupdateeffect(IntPtr haptic, int effect, ref Effect data);\n        private d_sdl_hapticupdateeffect SDL_HapticUpdateEffect;\n\n        public void UpdateEffect(IntPtr haptic, int effect, ref Effect data)\n        {\n            int res = SDL_HapticUpdateEffect(haptic, effect, ref data);\n            _sdl.GetError(res);\n        }\n\n        private void LoadEntryPoints(IntPtr library)\n        {\n            Close = FuncLoader.LoadFunctionOrNull<d_sdl_hapticclose>(library, \"SDL_HapticClose\");\n            EffectSupported = FuncLoader.LoadFunctionOrNull<d_sdl_hapticeffectsupported>(library, \"SDL_HapticEffectSupported\");\n            IsHaptic = FuncLoader.LoadFunctionOrNull<d_sdl_joystickishaptic>(library, \"SDL_JoystickIsHaptic\");\n            SDL_HapticNewEffect = FuncLoader.LoadFunctionOrNull<d_sdl_hapticneweffect>(library, \"SDL_HapticNewEffect\");\n            Open = FuncLoader.LoadFunctionOrNull<d_sdl_hapticopen>(library, \"SDL_HapticOpen\");\n            SDL_HapticOpenFromJoystick = FuncLoader.LoadFunctionOrNull<d_sdl_hapticopenfromjoystick>(library, \"SDL_HapticOpenFromJoystick\");\n            SDL_HapticRumbleInit = FuncLoader.LoadFunctionOrNull<d_sdl_hapticrumbleinit>(library, \"SDL_HapticRumbleInit\");\n            SDL_HapticRumblePlay = FuncLoader.LoadFunctionOrNull<d_sdl_hapticrumbleplay>(library, \"SDL_HapticRumblePlay\");\n            SDL_HapticRumbleSupported = FuncLoader.LoadFunctionOrNull<d_sdl_hapticrumblesupported>(library, \"SDL_HapticRumbleSupported\");\n            SDL_HapticRunEffect = FuncLoader.LoadFunctionOrNull<d_sdl_hapticruneffect>(library, \"SDL_HapticRunEffect\");\n            SDL_HapticStopAll = FuncLoader.LoadFunctionOrNull<d_sdl_hapticstopall>(library, \"SDL_HapticStopAll\");\n            SDL_HapticUpdateEffect = FuncLoader.LoadFunctionOrNull<d_sdl_hapticupdateeffect>(library, \"SDL_HapticUpdateEffect\");\n        }\n    }\n\n    public class Drop\n    {\n        [StructLayout(LayoutKind.Sequential)]\n        public unsafe struct Event\n        {\n            public EventType Type;\n            public uint TimeStamp;\n            public IntPtr File;\n            public uint WindowId;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.SDL2/SDLGameWindow.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    internal class SdlGameWindow : GameWindow, IDisposable\n    {\n        private static Dictionary<IntPtr, SdlGameWindow> _instances = new Dictionary<IntPtr, SdlGameWindow>();\n\n        internal static SdlGameWindow FromHandle(IntPtr handle)\n        {\n            return _instances[handle];\n        }\n\n\n        internal Sdl SDL { get { return Sdl.Current; } }\n\n        public override bool AllowUserResizing\n        {\n            get { return _isResizable && !_isBorderless; }\n            set\n            {\n                _isResizable = value;\n\n                Sdl.Version nonResizeableVersion = new Sdl.Version(2, 0, 4);\n                if (SDL.version <= nonResizeableVersion)\n                    throw new Exception(\"SDL \" + nonResizeableVersion + \" does not support changing resizable parameter of the window after it's already been created, please use a newer version of it.\");\n                \n                SDL.WINDOW.SetResizable(_handle, _isResizable);\n\n                if (!_isBorderless)\n                {\n                }\n            }\n        }\n\n        public override bool IsBorderless\n        {\n            get { return _isBorderless; }\n            set\n            {\n                _isBorderless = value;\n\n                if (!_isBorderless)\n                {\n                    SDL.WINDOW.SetBordered(_handle, 1);\n                }\n                else\n                {\n                    SDL.WINDOW.SetBordered(_handle, 0);\n                }\n            }\n        }\n\n        public override Rectangle ClientBounds\n        {\n            get\n            {\n                int x = 0, y = 0;\n                SDL.WINDOW.GetPosition(Handle, out x, out y);\n                return new Rectangle(x, y, _width, _height);\n            }\n        }\n\n        public override DisplayOrientation CurrentOrientation\n        {\n            get { return DisplayOrientation.Default; }\n        }\n\n        public override IntPtr Handle\n        {\n            get { return _handle; }\n        }\n\n        public override string ScreenDeviceName\n        {\n            get { return _screenDeviceName; }\n        }\n\n\n        public static GameWindow Instance;\n        public uint? Id;\n        public bool IsFullScreen;\n\n        internal readonly Game _game;\n        private IntPtr _handle;\n        private IntPtr _pIcon;\n        private bool _disposed;\n        private bool _isResizable, _isBorderless;\n        private bool _mouseVisible, _hardwareSwitch;\n        private string _screenDeviceName;\n        private int _width, _height;\n        private bool _wasMoved, _supressMoved;\n\n        private readonly List<Keys> _keys;\n        private readonly List<string> _dropList;\n\n        public SdlGameWindow(Game game)\n        {\n            _game = game;\n            _screenDeviceName = \"\";\n\n            Instance = this;\n\n            _keys = new List<Keys>();\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().SetKeys(_keys);\n            _dropList = new List<string>();\n\n            _width = GraphicsDeviceManager.DefaultBackBufferWidth;\n            _height = GraphicsDeviceManager.DefaultBackBufferHeight;\n\n            SDL.SetHint(\"SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS\", \"0\");\n            SDL.SetHint(\"SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS\", \"1\");\n\n            _pIcon = LoadAppIcon();\n\n            _handle = SDL.WINDOW.Create(\"\", 0, 0,\n                GraphicsDeviceManager.DefaultBackBufferWidth, GraphicsDeviceManager.DefaultBackBufferHeight,\n                Sdl.Window.State.Hidden | Sdl.Window.State.FullscreenDesktop);\n            _instances.Add(this.Handle, this);\n\n            Title = AssemblyHelper.GetDefaultWindowTitle();\n\n            if (Mouse.WindowHandle == IntPtr.Zero)\n                Mouse.WindowHandle = this.Handle;\n            if (TouchPanel.WindowHandle == IntPtr.Zero)\n                TouchPanel.WindowHandle = this.Handle;\n        }\n\n        private IntPtr LoadAppIcon()\n        {\n            Stream stream = null;\n            Assembly entryAssembly = Assembly.GetEntryAssembly();\n            if (entryAssembly != null) // when running NUnit tests entry assembly can be null\n            {\n                stream = entryAssembly.GetManifestResourceStream(entryAssembly.GetName().Name + \".Icon.bmp\");\n                if (stream == null)\n                    stream = entryAssembly.GetManifestResourceStream(\"Icon.bmp\");\n            }\n            if (stream == null)\n                stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(\"Kni.bmp\");\n\n            try\n            {\n                if (stream != null)\n                {\n                    using (stream)\n                    {\n                        byte[] data = new byte[stream.Length];\n                        stream.Read(data, 0, data.Length);\n                        GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);\n                        try\n                        {\n                            IntPtr pRWops = SDL.RwFromMem(data, data.Length);\n                            IntPtr pIcon = SDL.LoadBMP_RW(pRWops, 1);\n                            return pIcon;\n                        }\n                        finally\n                        {\n                            handle.Free();\n                        }\n                    }\n                }\n            }\n            catch { }\n\n            return IntPtr.Zero;\n        }\n\n        internal void CreateWindow()\n        {\n            Sdl.Window.State initflags =\n                Sdl.Window.State.OpenGL |\n                Sdl.Window.State.Hidden |\n                Sdl.Window.State.InputFocus |\n                Sdl.Window.State.MouseFocus;\n\n            if (_handle != IntPtr.Zero)\n            {\n                if (Mouse.WindowHandle == _handle)\n                    Mouse.WindowHandle = IntPtr.Zero;\n                if (TouchPanel.WindowHandle == _handle)\n                    TouchPanel.WindowHandle = IntPtr.Zero;\n\n                _instances.Remove(this.Handle);\n                SDL.WINDOW.Destroy(_handle);\n                _handle = IntPtr.Zero;\n            }\n\n            int winx = Sdl.Window.PosCentered;\n            int winy = Sdl.Window.PosCentered;\n\n            // if we are on Linux, start on the current screen\n            if (CurrentPlatform.OS == OS.Linux)\n            {\n                winx |= GetMouseDisplay();\n                winy |= GetMouseDisplay();\n            }\n\n            _width = GraphicsDeviceManager.DefaultBackBufferWidth;\n            _height = GraphicsDeviceManager.DefaultBackBufferHeight;\n\n            _handle = SDL.WINDOW.Create(Title, winx, winy, _width, _height, initflags);\n            _instances.Add(this.Handle, this);\n\n            Id = SDL.WINDOW.GetWindowId(_handle);\n\n            if (Mouse.WindowHandle == IntPtr.Zero)\n                Mouse.WindowHandle = _handle;\n            if (TouchPanel.WindowHandle == IntPtr.Zero)\n                TouchPanel.WindowHandle = _handle;\n\n            if (_pIcon != IntPtr.Zero)\n                SDL.WINDOW.SetIcon(_handle, _pIcon);\n\n            SDL.WINDOW.SetBordered(_handle, _isBorderless ? 0 : 1);\n            SDL.WINDOW.SetResizable(_handle, _isResizable);\n\n            SetCursorVisible(_mouseVisible);\n        }\n\n\n        internal bool SdlRunLoop()\n        {\n            bool isExiting = false;\n\n            Sdl.Event ev;\n\n            while (SDL.PollEvent(out ev) == 1)\n            {\n                switch (ev.Type)\n                {\n                    case Sdl.EventType.Quit:\n                        isExiting = true;\n                        break;\n                    case Sdl.EventType.JoyDeviceAdded:\n                        ((IPlatformJoystick)Joystick.Current).GetStrategy<ConcreteJoystick>().AddDevice(ev.JoystickDevice.Which);\n                        break;\n                    case Sdl.EventType.JoyDeviceRemoved:\n                        ((IPlatformJoystick)Joystick.Current).GetStrategy<ConcreteJoystick>().RemoveDevice(ev.JoystickDevice.Which);\n                        break;\n                    case Sdl.EventType.ControllerDeviceAdded:\n                        ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().AddDevice(ev.ControllerDevice.Which);\n                        break;\n                    case Sdl.EventType.ControllerDeviceRemapped:\n                        ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().RemapDevice(ev.ControllerDevice.Which);\n                        break;\n                    case Sdl.EventType.ControllerDeviceRemoved:\n                        ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().RemoveDevice(ev.ControllerDevice.Which);\n                        break;\n                    case Sdl.EventType.ControllerButtonUp:\n                    case Sdl.EventType.ControllerButtonDown:\n                    case Sdl.EventType.ControllerAxisMotion:\n                        ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().UpdatePacketInfo(ev.ControllerDevice.Which, ev.ControllerDevice.TimeStamp);\n                        break;\n                    case Sdl.EventType.MouseMotion:\n                        unchecked\n                        {\n                            ((IPlatformMouse)Mouse.Current).GetStrategy<ConcreteMouse>().RawX += ev.Motion.Xrel;\n                            ((IPlatformMouse)Mouse.Current).GetStrategy<ConcreteMouse>().RawY += ev.Motion.Yrel;\n                        }\n                        break;\n                    case Sdl.EventType.MouseWheel:\n                        unchecked\n                        {\n                            const int wheelDelta = 120;\n                            ((IPlatformMouse)Mouse.Current).GetStrategy<ConcreteMouse>().ScrollY += ev.Wheel.Y * wheelDelta;\n                            ((IPlatformMouse)Mouse.Current).GetStrategy<ConcreteMouse>().ScrollX += ev.Wheel.X * wheelDelta;\n                        }\n                        break;\n                    case Sdl.EventType.KeyDown:\n                    {\n                        Keys key = KeyboardUtil.ToXna(ev.Key.Keysym.Sym);\n                        if (!_keys.Contains(key))\n                                _keys.Add(key);\n                        char character = (char)ev.Key.Keysym.Sym;\n                        this.OnKeyDown(key);\n                        if (char.IsControl(character))\n                                this.OnTextInput(character, key);\n                        break;\n                    }\n                    case Sdl.EventType.KeyUp:\n                    {\n                            Keys key = KeyboardUtil.ToXna(ev.Key.Keysym.Sym);\n                        _keys.Remove(key);\n                        this.OnKeyUp(key);\n                        break;\n                    }\n                    case Sdl.EventType.TextInput:\n                        if (this.IsTextInputAttached())\n                        {\n                            int len = 0;\n                            int utf8character = 0; // using an int to encode multibyte characters longer than 2 bytes\n                            byte currentByte = 0;\n                            int charByteSize = 0; // UTF8 char length to decode\n                            int remainingShift = 0;\n                            unsafe\n                            {\n                                while ((currentByte = Marshal.ReadByte((IntPtr)ev.Text.Text, len)) != 0)\n                                {\n                                    // we're reading the first UTF8 byte, we need to check if it's multibyte\n                                    if (charByteSize == 0)\n                                    {\n                                        if (currentByte < 192)\n                                            charByteSize = 1;\n                                        else if (currentByte < 224)\n                                            charByteSize = 2;\n                                        else if (currentByte < 240)\n                                            charByteSize = 3;\n                                        else\n                                            charByteSize = 4;\n\n                                        utf8character = 0;\n                                        remainingShift = 4;\n                                    }\n\n                                    // assembling the character\n                                    utf8character <<= 8;\n                                    utf8character |= currentByte;\n\n                                    charByteSize--;\n                                    remainingShift--;\n\n                                    if (charByteSize == 0) // finished decoding the current character\n                                    {\n                                        utf8character <<= remainingShift * 8; // shifting it to full UTF8 scope\n\n                                        // SDL returns UTF8-encoded characters while C# char type is UTF16-encoded (and limited to the 0-FFFF range / does not support surrogate pairs)\n                                        // so we need to convert it to Unicode codepoint and check if it's within the supported range\n                                        int codepoint = UTF8ToUnicode(utf8character);\n\n                                        if (codepoint >= 0 && codepoint < 0xFFFF)\n                                        {\n                                            this.OnTextInput((char)codepoint, KeyboardUtil.ToXna(codepoint));\n                                            // UTF16 characters beyond 0xFFFF are not supported (and would require a surrogate encoding that is not supported by the char type)\n                                        }\n                                    }\n\n                                    len++;\n                                }\n                            }\n                        }\n                        break;\n                    case Sdl.EventType.WindowEvent:\n\n                        // If the ID is not the same as our main window ID\n                        // that means that we received an event from the\n                        // dummy window, so don't process the event.\n                        if (ev.Window.WindowID != this.Id)\n                            break;\n\n                        switch (ev.Window.EventID)\n                        {\n                            case Sdl.Window.EventId.Resized:\n                            case Sdl.Window.EventId.SizeChanged:\n                                ClientResize(ev.Window.Data1, ev.Window.Data2);\n                                break;\n                            case Sdl.Window.EventId.FocusGained:\n                                base.OnActivated();\n                                break;\n                            case Sdl.Window.EventId.FocusLost:\n                                base.OnDeactivated();\n                                break;\n                            case Sdl.Window.EventId.Moved:\n                                if (!_supressMoved)\n                                    _wasMoved = true;\n                                _supressMoved = false;\n                                break;\n                            case Sdl.Window.EventId.Close:\n                                isExiting = true;\n                                break;\n                        }\n                        break;\n\n                    case Sdl.EventType.DropFile:\n                        if (ev.Drop.WindowId != this.Id)\n                            break;\n\n                        string path = InteropHelpers.Utf8ToString(ev.Drop.File);\n                        SDL.SDL_Free(ev.Drop.File);\n                        _dropList.Add(path);\n\n                        break;\n\n                    case Sdl.EventType.DropComplete:\n                        if (ev.Drop.WindowId != this.Id)\n                            break;\n\n                        if (_dropList.Count > 0)\n                        {\n                            OnFileDrop(new FileDropEventArgs(_dropList.ToArray()));\n                            _dropList.Clear();\n                        }\n\n                        break;\n                }\n            }\n\n            return isExiting;\n        }\n\n        internal int UTF8ToUnicode(int utf8)\n        {\n            int\n                byte4 = utf8 & 0xFF,\n                byte3 = (utf8 >> 8) & 0xFF,\n                byte2 = (utf8 >> 16) & 0xFF,\n                byte1 = (utf8 >> 24) & 0xFF;\n\n            if (byte1 < 0x80)\n                return byte1;\n            else if (byte1 < 0xC0)\n                return -1;\n            else if (byte1 < 0xE0 && byte2 >= 0x80 && byte2 < 0xC0)\n                return (byte1 % 0x20) * 0x40 + (byte2 % 0x40);\n            else if (byte1 < 0xF0 && byte2 >= 0x80 && byte2 < 0xC0 && byte3 >= 0x80 && byte3 < 0xC0)\n                return (byte1 % 0x10) * 0x40 * 0x40 + (byte2 % 0x40) * 0x40 + (byte3 % 0x40);\n            else if (byte1 < 0xF8 && byte2 >= 0x80 && byte2 < 0xC0 && byte3 >= 0x80 && byte3 < 0xC0 && byte4 >= 0x80 && byte4 < 0xC0)\n                return (byte1 % 0x8) * 0x40 * 0x40 * 0x40 + (byte2 % 0x40) * 0x40 * 0x40 + (byte3 % 0x40) * 0x40 + (byte4 % 0x40);\n            else\n                return -1;\n        }\n\n        ~SdlGameWindow()\n        {\n            Dispose(false);\n        }\n\n        private int GetMouseDisplay()\n        {\n            int x, y;\n            SDL.MOUSE.GetGlobalState(out x, out y);\n\n            int displayCount = SDL.DISPLAY.GetNumVideoDisplays();\n            for (int i = 0; i < displayCount; i++)\n            {\n                Sdl.Rectangle rect;\n                SDL.DISPLAY.GetBounds(i, out rect);\n\n                if (x >= rect.X && x < rect.X + rect.Width &&\n                    y >= rect.Y && y < rect.Y + rect.Height)\n                {\n                    return i;\n                }\n            }\n\n            return 0;\n        }\n\n        public void SetCursorVisible(bool visible)\n        {\n            _mouseVisible = visible;\n            SDL.MOUSE.ShowCursor(visible ? 1 : 0);\n        }\n\n        internal void EndScreenDeviceChange(string screenDeviceName, int clientWidth, int clientHeight, bool willBeFullScreen)\n        {\n            _screenDeviceName = screenDeviceName;\n\n            Rectangle prevBounds = ClientBounds;\n            int displayIndex = SDL.WINDOW.GetDisplayIndex(Handle);\n\n            Sdl.Rectangle displayRect;\n            SDL.DISPLAY.GetBounds(displayIndex, out displayRect);\n\n            GraphicsDeviceManager gdm = ((IPlatformGame)_game).GetStrategy<GameStrategy>().GraphicsDeviceManager;\n            if (willBeFullScreen != IsFullScreen || _hardwareSwitch != gdm.HardwareModeSwitch)\n            {\n                Sdl.Window.State fullscreenFlag = gdm.HardwareModeSwitch ? Sdl.Window.State.Fullscreen : Sdl.Window.State.FullscreenDesktop;\n                SDL.WINDOW.SetFullscreen(Handle, (willBeFullScreen) ? fullscreenFlag : (Sdl.Window.State)0);\n                _hardwareSwitch = gdm.HardwareModeSwitch;\n            }\n            // If going to exclusive full-screen mode, force the window to minimize on focus loss (Windows only)\n            if (CurrentPlatform.OS == OS.Windows)\n            {\n                SDL.SetHint(\"SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS\", willBeFullScreen && _hardwareSwitch ? \"1\" : \"0\");\n            }\n\n            if (!willBeFullScreen || gdm.HardwareModeSwitch)\n            {\n                SDL.WINDOW.SetSize(Handle, clientWidth, clientHeight);\n                _width = clientWidth;\n                _height = clientHeight;\n            }\n            else\n            {\n                _width = displayRect.Width;\n                _height = displayRect.Height;\n            }\n\n            int ignore, minx = 0, miny = 0;\n            SDL.WINDOW.GetBorderSize(_handle, out miny, out minx, out ignore, out ignore);\n\n            int centerX = Math.Max(prevBounds.X + ((prevBounds.Width - clientWidth) / 2), minx);\n            int centerY = Math.Max(prevBounds.Y + ((prevBounds.Height - clientHeight) / 2), miny);\n\n            if (IsFullScreen && !willBeFullScreen)\n            {\n                // We need to get the display information again in case\n                // the resolution of it was changed.\n                SDL.DISPLAY.GetBounds(displayIndex, out displayRect);\n\n                // This centering only occurs when exiting fullscreen\n                // so it should center the window on the current display.\n                centerX = displayRect.X + displayRect.Width / 2 - clientWidth / 2;\n                centerY = displayRect.Y + displayRect.Height / 2 - clientHeight / 2;\n            }\n\n            // If this window is resizable, there is a bug in SDL 2.0.4 where\n            // after the window gets resized, window position information\n            // becomes wrong (for me it always returned 10 8). Solution is\n            // to not try and set the window position because it will be wrong.\n            Sdl.Version nonResizeableVersion = new Sdl.Version(2, 0, 4);\n            if ((SDL.version > nonResizeableVersion || !AllowUserResizing) && !_wasMoved)\n                SDL.WINDOW.SetPosition(Handle, centerX, centerY);\n\n            if (IsFullScreen != willBeFullScreen)\n                OnClientSizeChanged();\n\n            IsFullScreen = willBeFullScreen;\n\n            _supressMoved = true;\n        }\n\n        public void ClientResize(int width, int height)\n        {\n            GraphicsDevice device = _game.GraphicsDevice;\n\n            // SDL reports many resize events even if the Size didn't change.\n            // Only call the code below if it actually changed.\n            if (device.PresentationParameters.BackBufferWidth  != width\n            ||  device.PresentationParameters.BackBufferHeight != height)\n            {\n                device.PresentationParameters.BackBufferWidth = width;\n                device.PresentationParameters.BackBufferHeight = height;\n\n                if (!((IPlatformGraphicsContext)((IPlatformGraphicsDevice)device).Strategy.MainContext).Strategy.IsRenderTargetBound)\n                {\n                    device.Viewport = new Viewport(0, 0, width, height);\n                    device.ScissorRectangle = new Rectangle(0, 0, width, height);\n                }\n\n                SDL.WINDOW.GetSize(Handle, out _width, out _height);\n\n                OnClientSizeChanged();\n            }\n        }\n\n        protected override void SetTitle(string title)\n        {\n            SDL.WINDOW.SetTitle(_handle, title);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (_disposed)\n                return;\n\n            if (Mouse.WindowHandle == this.Handle)\n                Mouse.WindowHandle = IntPtr.Zero;\n            if (TouchPanel.WindowHandle == this.Handle)\n                TouchPanel.WindowHandle = IntPtr.Zero;\n\n            _instances.Remove(this.Handle);\n            SDL.WINDOW.Destroy(_handle);\n            _handle = IntPtr.Zero;\n\n            if (_pIcon != IntPtr.Zero)\n                SDL.FreeSurface(_pIcon);\n\n            _disposed = true;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.UAP/ConcreteGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.ApplicationModel.Core;\nusing Windows.UI.Core;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input;\n\n\n#if UAP\nusing Windows.UI.Xaml;\n#endif\n\n#if WINUI\nusing Microsoft.UI.Xaml;\n#endif\n\nnamespace Microsoft.Xna.Platform\n{\n    sealed class ConcreteGame : GameStrategy\n    {\n        internal static string LaunchParameters;\n\n        [CLSCompliant(false)]\n        public static ApplicationExecutionState PreviousExecutionState { get; internal set; }\n\n        private static ConcreteGame _concreteGameInstance = null;\n        internal static ConcreteGame ConcreteGameInstance { get { return ConcreteGame._concreteGameInstance; } }\n\n        public ConcreteGame(Game game) : base(game)\n        {\n            ConcreteGame._concreteGameInstance = this;\n\n            UAPGameWindow uapGameWindow = UAPGameWindow.Instance;\n            base.Window = uapGameWindow;\n            uapGameWindow.Game = game;\n            base.SetWindowListeners();\n            if (Mouse.WindowHandle == IntPtr.Zero)\n                Mouse.WindowHandle = base.Window.Handle;\n            if (TouchPanel.WindowHandle == IntPtr.Zero)\n                TouchPanel.WindowHandle = base.Window.Handle;\n\n            // Register the CoreWindow with the services registry\n            Services.AddService(typeof(CoreWindow), uapGameWindow.CoreWindow);\n\n            // Setup the launch parameters.\n            // - Parameters can optionally start with a forward slash.\n            // - Keys can be separated from values by a colon or equals sign\n            // - Double quotes can be used to enclose spaces in a key or value.\n            int pos = 0;\n            int paramStart = 0;\n            bool inQuotes = false;\n            var keySeperators = new char[] { ':', '=' };\n\n            while (pos <= LaunchParameters.Length)\n            {\n                string arg = string.Empty;\n                if (pos < LaunchParameters.Length)\n                {\n                    char c = LaunchParameters[pos];\n                    if (c == '\"')\n                        inQuotes = !inQuotes;\n                    else if ((c == ' ') && !inQuotes)\n                    {\n                        arg = LaunchParameters.Substring(paramStart, pos - paramStart).Replace(\"\\\"\", \"\");\n                        paramStart = pos + 1;\n                    }\n                }\n                else\n                {\n                    arg = LaunchParameters.Substring(paramStart).Replace(\"\\\"\", \"\");\n                }\n                ++pos;\n\n                if (string.IsNullOrWhiteSpace(arg))\n                    continue;\n\n                string key = string.Empty;\n                string value = string.Empty;\n                int keyStart = 0;\n\n                if (arg.StartsWith(\"/\"))\n                    keyStart = 1;\n\n                if (arg.Length > keyStart)\n                {\n                    int keyEnd = arg.IndexOfAny(keySeperators, keyStart);\n\n                    if (keyEnd >= 0)\n                    {\n                        key = arg.Substring(keyStart, keyEnd - keyStart);\n                        int valueStart = keyEnd + 1;\n                        if (valueStart < arg.Length)\n                            value = arg.Substring(valueStart);\n                    }\n                    else\n                    {\n                        key = arg.Substring(keyStart);\n                    }\n\n                    Game.LaunchParameters.Add(key, value);\n                }\n            }\n\n            CoreApplication.Suspending += this.CoreApplication_Suspending;\n            CoreApplication.Resuming += this.CoreApplication_Resuming;\n        }\n\n        private void CoreApplication_Suspending(object sender, SuspendingEventArgs e)\n        {\n            _enableRunLoop = false;\n\n            GraphicsDeviceManager gdm = this.GraphicsDeviceManager;\n            {\n                if (gdm.GraphicsDevice != null)\n                    ((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().Trim();\n            }\n        }\n\n        private void CoreApplication_Resuming(object sender, Object e)\n        {\n            if (!_enableRunLoop)\n            {\n                _enableRunLoop = true;\n                ((UAPGameWindow)Window).CoreWindow.Dispatcher.RunIdleAsync(OnRenderFrame);\n            }\n        }\n\n        internal void Internal_SetIsVisible(bool isVisible)\n        {\n            base.IsVisible = isVisible;\n        }\n\n        protected override void Run()\n        {\n            this.CallInitialize();\n            this.CallBeginRun();\n            // XNA runs one Update even before showing the window\n            this.CallUpdate(new GameTime());\n\n            StartGameLoop();\n            return;\n\n            //this.CallEndRun();\n            //this.DoExiting();\n        }\n\n        bool _enableRunLoop = false;\n        private void StartGameLoop()\n        {\n            if (!_enableRunLoop)\n            {\n                _enableRunLoop = true;\n                CoreWindow coreWindow = ((UAPGameWindow)Window).CoreWindow;\n                coreWindow.Dispatcher.RunIdleAsync(OnRenderFrame);\n            }\n        }\n        \n        private void OnRenderFrame(IdleDispatchedHandlerArgs e)\n        {\n            if (_enableRunLoop)\n                OnRenderFrame(e.IsDispatcherIdle);\n        }\n\n        private void OnRenderFrame()\n        {\n            if (_enableRunLoop)\n            {\n                CoreWindow coreWindow = ((UAPGameWindow)Window).CoreWindow;\n                if (coreWindow.Dispatcher.ShouldYield(CoreDispatcherPriority.Idle))\n                    coreWindow.Dispatcher.RunIdleAsync(OnRenderFrame);\n                else\n                    OnRenderFrame(true);\n            }\n        }\n\n        private void OnRenderFrame(bool isQueueEmpty)\n        {\n            ((UAPGameWindow)Window).Tick();\n            ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().Back = false;\n\n            // Request next frame\n            CoreWindow coreWindow = ((UAPGameWindow)Window).CoreWindow;\n            if (isQueueEmpty)\n                coreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low, OnRenderFrame);\n            else\n                coreWindow.Dispatcher.RunIdleAsync(OnRenderFrame);\n        }\n\n        public override void TickExiting()\n        {\n            if (!((UAPGameWindow)Window).IsExiting)\n            {\n                ((UAPGameWindow)Window).IsExiting = true;\n                Application.Current.Exit();\n            }\n        }\n\n        public override bool IsMouseVisible\n        {\n            get { return base.IsMouseVisible; }\n            set\n            {\n                if (base.IsMouseVisible != value)\n                {\n                    base.IsMouseVisible = value;\n                    ((UAPGameWindow)Window).SetCursor(Game.IsMouseVisible);\n                }\n                else base.IsMouseVisible = value;\n            }\n        }\n        \n        protected override void Dispose(bool disposing)\n        {\n            // Make sure we dispose the graphics system.\n            var gdm = this.GraphicsDeviceManager;\n            if (gdm != null)\n                gdm.Dispose();\n\n            if (Mouse.WindowHandle == Window.Handle)\n                Mouse.WindowHandle = IntPtr.Zero;\n            if (TouchPanel.WindowHandle == Window.Handle)\n                TouchPanel.WindowHandle = IntPtr.Zero;\n\n            ((UAPGameWindow)Window).Dispose();\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.UAP/ConcreteGameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteGameFactory : GameFactory\n    {\n\n        public override GameStrategy CreateGameStrategy(Game game)\n        {\n            return new ConcreteGame(game);\n        }\n\n        public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game)\n        {\n            return new ConcreteGraphicsDeviceManager(game);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Game/.UAP/ConcreteGraphicsDeviceManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Graphics;\n\n#if UAP\nusing Windows.UI.Xaml.Controls;\nusing NativeDisplayOrientation = Windows.Graphics.Display.DisplayOrientations;\nusing NativeDisplayInformation = Windows.Graphics.Display.DisplayInformation;\n#endif\n\n#if WINUI\nusing Microsoft.UI.Xaml.Controls;\nusing NativeDisplayOrientation = Microsoft.Graphics.Display.DisplayOrientations;\nusing NativeDisplayInformation = Microsoft.Graphics.Display.DisplayInformation;\n#endif\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy\n    {\n        public SwapChainPanel SwapChainPanel { get; set; }\n\n        private DisplayOrientation _uapGameSupportedOrientations;\n\n        public ConcreteGraphicsDeviceManager(Game game) : base(game)\n        {\n            var clientBounds = base.Game.Window.ClientBounds;\n            base.PreferredBackBufferWidth = clientBounds.Width;\n            base.PreferredBackBufferHeight = clientBounds.Height;\n\n            base.IsFullScreen = ((UAPGameWindow)game.Window).AppView.IsFullScreenMode;\n        }\n\n        public override bool PreferHalfPixelOffset\n        {\n            get { return base.PreferHalfPixelOffset; }\n            set\n            {\n                //TODO: move the check in ApplyChanges\n                if (base.GraphicsDevice != null)\n                    throw new InvalidOperationException(\"Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice.\");\n\n                base.PreferHalfPixelOffset = value;\n            }\n        }\n\n        public override bool IsFullScreen\n        {\n            get { return base.IsFullScreen; }\n            set { base.IsFullScreen = value; }\n        }\n\n        public override DisplayOrientation SupportedOrientations\n        {\n            get { return base.SupportedOrientations; }\n            set { base.SupportedOrientations = value; }\n        }\n\n        public override void ToggleFullScreen()\n        {\n            base.IsFullScreen = !base.IsFullScreen;\n            ApplyChanges();\n        }\n\n        public override void ApplyChanges()\n        {\n            if (this.GraphicsDevice == null)\n            {\n                // TODO: Calling ApplyChanges() before Game Initialize should create the device.\n                //this.CreateDevice();\n                return;\n            }\n\n            // We don't want to trigger orientation changes \n            // when no preference is being changed.\n            if (_uapGameSupportedOrientations != this.SupportedOrientations)\n            {\n                _uapGameSupportedOrientations = this.SupportedOrientations;\n\n                DisplayOrientation supported =this.SupportedOrientations;\n                if (this.SupportedOrientations == DisplayOrientation.Default)\n                {\n                    // Make the decision based on the preferred backbuffer dimensions.\n                    if (this.PreferredBackBufferWidth > this.PreferredBackBufferHeight)\n                        supported = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n                    else\n                        supported = DisplayOrientation.Portrait | DisplayOrientation.PortraitDown;\n                }\n\n                NativeDisplayInformation.AutoRotationPreferences = FromOrientation(supported);\n            }\n\n\n            // UAP PlatformApplyChanges\n            ((UAPGameWindow)base.Game.Window).SetClientSize(base.PreferredBackBufferWidth, base.PreferredBackBufferHeight);\n\n            // populates a gdi with settings in this gdm and allows users to override them with\n            // PrepareDeviceSettings event this information should be applied to the GraphicsDevice\n            var gdi = this.DoPreparingDeviceSettings();\n\n            if (gdi.GraphicsProfile != GraphicsDevice.GraphicsProfile)\n            {\n                // if the GraphicsProfile changed we need to create a new GraphicsDevice\n                this.GraphicsDevice.Dispose();\n                this.GraphicsDevice = null;\n\n                this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters);\n\n                // update the touchpanel display size when the graphicsdevice is reset\n                this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel;\n                ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform;\n\n                this.OnDeviceCreated(EventArgs.Empty);\n            }\n            else\n            {\n                GraphicsDevice.Reset(gdi.PresentationParameters);\n            }\n        }\n\n        private static NativeDisplayOrientation FromOrientation(DisplayOrientation orientation)\n        {\n            NativeDisplayOrientation result = NativeDisplayOrientation.None;\n\n            if ((orientation & DisplayOrientation.LandscapeLeft) != 0)\n                result |= NativeDisplayOrientation.Landscape;\n            if ((orientation & DisplayOrientation.LandscapeRight) != 0)\n                result |= NativeDisplayOrientation.LandscapeFlipped;\n            if ((orientation & DisplayOrientation.Portrait) != 0)\n                result |= NativeDisplayOrientation.Portrait;\n            if ((orientation & DisplayOrientation.PortraitDown) != 0)\n                result |= NativeDisplayOrientation.PortraitFlipped;\n\n            return result;\n        }\n\n        /// <summary>\n        /// This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to\n        /// allow users to change the settings. Then returns that GraphicsDeviceInformation.\n        /// Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null.\n        /// </summary>\n        internal GraphicsDeviceInformation DoPreparingDeviceSettings()\n        {\n            var gdi = new GraphicsDeviceInformation();\n            gdi.Adapter = GraphicsAdapter.DefaultAdapter;\n            gdi.GraphicsProfile = GraphicsProfile;\n\n            PresentationParameters pp = new PresentationParameters();\n            pp.BackBufferFormat = this.PreferredBackBufferFormat;\n            pp.DepthStencilFormat = this.PreferredDepthStencilFormat;\n            pp.BackBufferWidth = this.PreferredBackBufferWidth;\n            pp.BackBufferHeight = this.PreferredBackBufferHeight;\n            pp.IsFullScreen = this.IsFullScreen;\n            pp.HardwareModeSwitch = this.HardwareModeSwitch;\n            pp.PresentationInterval = this.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate;\n            pp.DisplayOrientation = this.Game.Window.CurrentOrientation;\n            pp.DeviceWindowHandle = this.Game.Window.Handle;\n\n            // always initialize MultiSampleCount to the maximum, if users want to overwrite\n            // this they have to respond to the PreparingDeviceSettingsEvent and modify\n            // args.GraphicsDeviceInformation.PresentationParameters.MultiSampleCount\n            int maxMultiSampleCount = 0;\n            if (this.PreferMultiSampling)\n            {\n                if (GraphicsDevice != null)\n                {\n                    maxMultiSampleCount = ((IPlatformGraphicsDevice)GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)GraphicsDevice).Strategy.PresentationParameters.BackBufferFormat);\n                }\n                else\n                {\n                    maxMultiSampleCount = 32;\n                }\n            }\n            pp.MultiSampleCount = maxMultiSampleCount;\n\n            gdi.PresentationParameters = pp;\n            var args = new PreparingDeviceSettingsEventArgs(gdi);\n            this.OnPreparingDeviceSettings(args);\n\n            if (gdi.PresentationParameters == null || gdi.Adapter == null)\n                throw new NullReferenceException(\"Members should not be set to null in PreparingDeviceSettingsEventArgs\");\n\n            return gdi;\n        }\n\n        public override void CreateDevice()\n        {\n            if (this.GraphicsDevice != null)\n                return;\n\n            // We don't want to trigger orientation changes \n            // when no preference is being changed.\n            if (_uapGameSupportedOrientations != this.SupportedOrientations)\n            {\n                _uapGameSupportedOrientations = this.SupportedOrientations;\n\n                DisplayOrientation supported = this.SupportedOrientations;\n                if (supported == DisplayOrientation.Default)\n                {\n                    // Make the decision based on the preferred backbuffer dimensions.\n                    if (this.PreferredBackBufferWidth > this.PreferredBackBufferHeight)\n                        supported = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n                    else\n                        supported = DisplayOrientation.Portrait | DisplayOrientation.PortraitDown;\n                }\n\n                NativeDisplayInformation.AutoRotationPreferences = FromOrientation(supported);\n            }\n\n            var gdi = this.DoPreparingDeviceSettings();\n\n            this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters);\n\n            // update the touchpanel display size when the graphicsdevice is reset\n            this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel;\n            ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform;\n\n            this.OnDeviceCreated(EventArgs.Empty);\n        }\n\n        private void GraphicsDevice_DeviceReset_UpdateTouchPanel(object sender, EventArgs eventArgs)\n        {\n            TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth;\n            TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight;\n            TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation;\n        }\n\n        private void GraphicsDevice_PresentationChanged_UpdateGamePlatform(object sender, PresentationEventArgs args)\n        {\n            PresentationParameters pp = args.PresentationParameters;\n\n            if (pp.IsFullScreen)\n            {\n                // Enter FullScreen\n                if (((UAPGameWindow)Game.Window).AppView.TryEnterFullScreenMode())\n                {\n                    Windows.UI.ViewManagement.ApplicationView.PreferredLaunchWindowingMode = Windows.UI.ViewManagement.ApplicationViewWindowingMode.FullScreen;\n                }\n            }\n            else\n            {\n                // Exit FullScreen\n                ((UAPGameWindow)Game.Window).AppView.ExitFullScreenMode();\n\n                Windows.UI.ViewManagement.ApplicationView.PreferredLaunchWindowingMode = Windows.UI.ViewManagement.ApplicationViewWindowingMode.Auto;\n            }\n        }\n\n\n        #region IGraphicsDeviceManager strategy\n\n        public override bool BeginDraw()\n        {\n            //return base.BeginDraw();\n\n            GraphicsDevice device = this.GraphicsDevice;\n            if (device != null)\n            {\n                // For a UAP app we need to re-apply the\n                // render target before every draw.\n                // I guess the OS changes it and doesn't restore it?\n                ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)device).Strategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().UAP_ResetRenderTargets();\n            }\n\n            return true;\n        }\n\n        public override void EndDraw()\n        {\n            //base.EndDraw();\n\n            GraphicsDevice device = this.GraphicsDevice;\n            if (device != null)\n            {\n                device.Present();\n            }\n        }\n\n        #endregion IGraphicsDeviceManager strategy\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.UAP/GameFrameworkViewSource.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Windows.ApplicationModel.Core;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    public class GameFrameworkViewSource<T> : IFrameworkViewSource\n        where T : Game, new()\n    {\n        public GameFrameworkViewSource()\n        {\n        }\n\n        IFrameworkView IFrameworkViewSource.CreateView()\n        {\n            return new UAPFrameworkView<T>();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.UAP/InputEvents.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Windows.Devices.Input;\nusing Windows.System.Threading;\nusing Windows.UI.Core;\nusing Microsoft.Xna.Platform.Input;\nusing Microsoft.Xna.Platform.Input.Touch;\n\n\n#if UAP\nusing Windows.Graphics.Display;\nusing Windows.UI.Input;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\n#endif\n\n#if WINUI\nusing Microsoft.Graphics.Display;\nusing Microsoft.UI.Input;\nusing Microsoft.UI.Xaml;\nusing Microsoft.UI.Xaml.Controls;\nusing Microsoft.UI.Xaml.Input;\nusing Microsoft.UI.Windowing;\n#endif\n\nnamespace Microsoft.Xna.Framework\n{\n    internal class InputEvents\n    {\n        internal struct KeyChar\n        {\n            public char Character;\n\n            public Keys Key;\n        }\n\n        private readonly UAPGameWindow _gameWindow;\n\n        public readonly ConcurrentQueue<KeyChar> TextQueue = new ConcurrentQueue<KeyChar>();\n        private KeyChar _lastEnqueuedKeyChar;\n\n        // To convert from DIPs (device independent pixels) to actual screen resolution pixels.\n        private static float _currentDipFactor;\n\n        private CoreIndependentInputSource _coreIndependentInputSource;\n\n\n        public InputEvents(UAPGameWindow gameWindow, CoreWindow window, UIElement inputElement)\n        {\n            this._gameWindow = gameWindow;\n\n            // The key events are always tied to the window as those will\n            // only arrive here if some other control hasn't gotten it.\n            window.KeyDown += CoreWindow_KeyDown;\n            window.KeyUp += CoreWindow_KeyUp;\n            window.CharacterReceived += Window_CharacterReceived;\n            window.VisibilityChanged += CoreWindow_VisibilityChanged;\n            window.Activated += CoreWindow_Activated;\n            window.SizeChanged += CoreWindow_SizeChanged;\n\n            DisplayInformation.GetForCurrentView().DpiChanged += InputEvents_DpiChanged;\n            _currentDipFactor = DisplayInformation.GetForCurrentView().LogicalDpi / 96.0f;\n\n            if (inputElement is SwapChainPanel)\n            {\n                // Create a thread to process input events.\n                WorkItemHandler workItemHandler = new WorkItemHandler( (action) =>\n                {\n                    CoreInputDeviceTypes inputDevices = CoreInputDeviceTypes.Mouse | CoreInputDeviceTypes.Touch | CoreInputDeviceTypes.Pen;\n\n                    // We subscribe only to Pen. Touch & Mouse is still processed from inputElement.\n                    // Currently PointerVisualizationSettings don't apply to CreateCoreIndependentInputSource \n                    // and ContactFeedback is always visible when we create a coreIndependentInputSource for Touch.\n                    // If this bug get fixed we can add the Touch InputDeviceTypes.\n                    // Mouse still has a race contition.\n                    inputDevices &= ~CoreInputDeviceTypes.Touch;\n                    inputDevices &= ~CoreInputDeviceTypes.Mouse;\n\n                    _coreIndependentInputSource = ((SwapChainPanel)inputElement).CreateCoreIndependentInputSource(inputDevices);\n\n                    _coreIndependentInputSource.PointerPressed += CoreWindow_PointerPressed;\n                    _coreIndependentInputSource.PointerMoved += CoreWindow_PointerMoved;\n                    _coreIndependentInputSource.PointerReleased += CoreWindow_PointerReleased;\n                    _coreIndependentInputSource.PointerWheelChanged += CoreWindow_PointerWheelChanged;\n\n                    _coreIndependentInputSource.Dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessUntilQuit);\n                });\n                var inputWorker = ThreadPool.RunAsync(workItemHandler, WorkItemPriority.High, WorkItemOptions.TimeSliced);\n            }\n\n            if (inputElement != null)\n            {\n                // If we have an input UIElement then we bind input events\n                // to it else we'll get events for overlapping XAML controls.\n                inputElement.PointerPressed += UIElement_PointerPressed;\n                inputElement.PointerMoved += UIElement_PointerMoved;\n                inputElement.PointerReleased += UIElement_PointerReleased;\n                inputElement.PointerCanceled += UIElement_PointerCanceled;\n                inputElement.PointerWheelChanged += UIElement_PointerWheelChanged;\n            }\n            else // (inputElement == null)\n            {\n                // If we only have a CoreWindow then use it for input events.\n                window.PointerPressed += CoreWindow_PointerPressed;\n                window.PointerMoved += CoreWindow_PointerMoved;\n                window.PointerReleased += CoreWindow_PointerReleased;\n                window.PointerWheelChanged += CoreWindow_PointerWheelChanged;\n            }\n        }\n\n        private void InputEvents_DpiChanged(DisplayInformation sender, object args)\n        {\n            _currentDipFactor = DisplayInformation.GetForCurrentView().LogicalDpi / 96.0f;\n        }\n\n        #region UIElement Events\n\n        private void UIElement_PointerPressed(object sender, PointerRoutedEventArgs args)\n        {\n            //Capture this pointer so we continue getting events even if it is dragged off us\n            ((UIElement)sender).CapturePointer(args.Pointer);\n\n            var pointerPoint = args.GetCurrentPoint(null);\n            PointerPressed(pointerPoint, sender as UIElement, args.Pointer);\n            args.Handled = true;\n        }\n\n        private void UIElement_PointerMoved(object sender, PointerRoutedEventArgs args)\n        {\n            var pointerPoint = args.GetCurrentPoint(null);\n            PointerMoved(pointerPoint);\n            args.Handled = true;\n        }\n\n        private void UIElement_PointerReleased(object sender, PointerRoutedEventArgs args)\n        {\n            ((UIElement)sender).ReleasePointerCapture(args.Pointer);\n\n            var pointerPoint = args.GetCurrentPoint(null);\n            PointerReleased(pointerPoint, sender as UIElement, args.Pointer);\n            args.Handled = true;\n        }\n\n        private void UIElement_PointerCanceled(object sender, PointerRoutedEventArgs args)\n        {\n            ((UIElement)sender).ReleasePointerCapture(args.Pointer);\n\n            var pointerPoint = args.GetCurrentPoint(null);\n            PointerCanceled(pointerPoint, sender as UIElement, args.Pointer);\n            args.Handled = true;\n        }\n\n        private void UIElement_PointerWheelChanged(object sender, PointerRoutedEventArgs args)\n        {\n            var pointerPoint = args.GetCurrentPoint(null);\n            UpdateMouse(pointerPoint);\n            args.Handled = true;\n        }\n\n        #endregion // UIElement Events\n\n        #region CoreWindow Events\n\n        private void CoreWindow_PointerPressed(object sender, PointerEventArgs args)\n        {\n            PointerPressed(args.CurrentPoint, null, null);\n            args.Handled = true;\n        }\n\n        private void CoreWindow_PointerMoved(object sender, PointerEventArgs args)\n        {\n            PointerMoved(args.CurrentPoint);\n            args.Handled = true;\n        }\n\n        private void CoreWindow_PointerReleased(object sender, PointerEventArgs args)\n        {\n            PointerReleased(args.CurrentPoint, null, null);\n            args.Handled = true;\n        }\n\n        private void CoreWindow_PointerWheelChanged(object sender, PointerEventArgs args)\n        {\n            UpdateMouse(args.CurrentPoint);\n            args.Handled = true;\n        }\n\n        #endregion // CoreWindow Events\n\n        private void PointerPressed(PointerPoint pointerPoint, UIElement target, Pointer pointer)\n        {\n            Vector2 pos = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y) * _currentDipFactor;\n\n            bool isTouch = pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch;\n\n            if (isTouch)\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddPressedEvent((int)pointerPoint.PointerId, pos);\n\n            if (!isTouch)\n            {\n                // Mouse or stylus event.\n                UpdateMouse(pointerPoint);\n\n                // Capture future pointer events until a release.\t\t\n                if (target != null)\n                    target.CapturePointer(pointer);\n            }\n        }\n\n        private void PointerMoved(PointerPoint pointerPoint)\n        {\n            Vector2 pos = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y) * _currentDipFactor;\n\n            bool isTouch = pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch;\n            bool touchIsDown = pointerPoint.IsInContact;\n\n            if (isTouch && touchIsDown)\n            {\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddMovedEvent((int)pointerPoint.PointerId, pos);\n            }\n\n            if (!isTouch)\n            {\n                // Mouse or stylus event.\n                UpdateMouse(pointerPoint);\n            }\n        }\n\n        private void PointerReleased(PointerPoint pointerPoint, UIElement target, Pointer pointer)\n        {\n            Vector2 pos = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y) * _currentDipFactor;\n\n            bool isTouch = pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch;\n\n            if (isTouch) \n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddReleasedEvent((int)pointerPoint.PointerId, pos);\n\n            if (!isTouch)\n            {\n                // Mouse or stylus event.\n                UpdateMouse(pointerPoint);\n\n                // Release the captured pointer.\n                if (target != null)\n                    target.ReleasePointerCapture(pointer);\n            }\n        }\n\n        private void PointerCanceled(PointerPoint pointerPoint, UIElement target, Pointer pointer)\n        {\n            Vector2 pos = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y) * _currentDipFactor;\n\n            bool isTouch = pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch;\n\n            if (isTouch)\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddCanceledEvent((int)pointerPoint.PointerId, pos);\n\n            if (!isTouch)\n            {\n                // Mouse or stylus event.\n                UpdateMouse(pointerPoint);\n\n                // Release the captured pointer.\n                if (target != null)\n                    target.ReleasePointerCapture(pointer);\n            }\n        }\n\n        private void UpdateMouse(PointerPoint point)\n        {\n            var x = (int)(point.Position.X * _currentDipFactor);\n            var y = (int)(point.Position.Y * _currentDipFactor);\n\n            var state = point.Properties;\n\n            int verticalScrollDelta = 0;\n            int horizontalScrollDelta = 0;\n\n            if (state.IsHorizontalMouseWheel)\n                horizontalScrollDelta = state.MouseWheelDelta;\n            else\n                verticalScrollDelta = state.MouseWheelDelta;\n\n            _gameWindow._mouseState = new MouseState(x, y,\n                _gameWindow._mouseState.ScrollWheelValue + verticalScrollDelta,\n                _gameWindow._mouseState.HorizontalScrollWheelValue + horizontalScrollDelta,\n                0, 0,\n                state.IsLeftButtonPressed ? ButtonState.Pressed : ButtonState.Released,\n                state.IsMiddleButtonPressed ? ButtonState.Pressed : ButtonState.Released,\n                state.IsRightButtonPressed ? ButtonState.Pressed : ButtonState.Released,\n                state.IsXButton1Pressed ? ButtonState.Pressed : ButtonState.Released,\n                state.IsXButton2Pressed ? ButtonState.Pressed : ButtonState.Released);\n        }\n\n        public void UpdateState()\n        {\n            // Update the keyboard state.\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().UpdateState();\n        }\n\n        internal static Keys KeyTranslate(Windows.System.VirtualKey inkey, CorePhysicalKeyStatus keyStatus)\n        {\n            switch (inkey)\n            {\n                // WinRT does not distinguish between left/right keys\n                // We have to check for special keys such as control/shift/alt/ etc\n                case Windows.System.VirtualKey.Control:\n                    // we can detect right Control by checking the IsExtendedKey value.\n                    return (keyStatus.IsExtendedKey) ? Keys.RightControl : Keys.LeftControl;\n                case Windows.System.VirtualKey.Shift:\n                    // we can detect right shift by checking the scancode value.\n                    // left shift is 0x2A, right shift is 0x36. IsExtendedKey is always false.\n                    return (keyStatus.ScanCode == 0x36) ? Keys.RightShift : Keys.LeftShift;\n                // Note that the Alt key is now referred to as Menu.\n                // ALT key doesn't get fired by KeyUp/KeyDown events.\n                // One solution could be to check CoreWindow.GetKeyState(...) on every tick.\n                case Windows.System.VirtualKey.Menu:\n                    return Keys.LeftAlt;\n\n                default:\n                    return (Keys)inkey;\n            }\n        }\n\n        private void CoreWindow_KeyUp(object sender, KeyEventArgs args)\n        {\n            var xnaKey = KeyTranslate(args.VirtualKey, args.KeyStatus);\n\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().ResetKey(xnaKey);\n        }\n\n        private void CoreWindow_KeyDown(object sender, KeyEventArgs args)\n        {\n            var xnaKey = KeyTranslate(args.VirtualKey, args.KeyStatus);\n\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().SetKey(xnaKey);\n\n            _lastEnqueuedKeyChar = new KeyChar();\n            _lastEnqueuedKeyChar.Key = xnaKey;\n        }\n\n        private void Window_CharacterReceived(CoreWindow sender, CharacterReceivedEventArgs args)\n        {\n            _lastEnqueuedKeyChar.Character = (char)args.KeyCode;\n            TextQueue.Enqueue(_lastEnqueuedKeyChar);\n        }\n\n        private void CoreWindow_SizeChanged(CoreWindow sender, WindowSizeChangedEventArgs args)\n        {\n            // If the window is resized then also \n            // drop any current key states.\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().ResetKeys();\n\n            // required of input can stop working if we change focus\n            WakeupKeyboardInput();\n        }\n\n        private void CoreWindow_Activated(CoreWindow sender, WindowActivatedEventArgs args)\n        {\n            // Forget about the held keys when we lose focus as we don't\n            // receive key events for them while we are in the background\n            if (args.WindowActivationState == CoreWindowActivationState.Deactivated)\n                ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().ResetKeys();\n\n            // required of input can stop working if we change focus\n            WakeupKeyboardInput();\n        }\n\n        private void CoreWindow_VisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args)\n        {\n            // Forget about the held keys when we disappear as we don't\n            // receive key events for them while we are in the background\n            if (!args.Visible)\n                ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().ResetKeys();\n\n            // required of input can stop working if we change focus\n            WakeupKeyboardInput();\n        }\n\n        private static void WakeupKeyboardInput()\n        {\n#if UAP\n            Window window = Window.Current;\n#elif WINUI\n            Window window = App.Window;\n#endif\n            if (window != null)\n                window.CoreWindow.IsInputEnabled = true;\n\n#if UAP\n            CoreWindow coreWindow = CoreWindow.GetForCurrentThread();\n            coreWindow.IsInputEnabled = true;\n#elif WINUI\n            AppWindow appWindow = AppWindow.Create();\n            appWindow.IsInputEnabled = true;\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.UAP/UAPFrameworkView.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Windows.ApplicationModel.Core;\nusing Windows.UI.Core;\nusing Windows.ApplicationModel.Activation;\n\nnamespace Microsoft.Xna.Platform\n{\n    class UAPFrameworkView<T> : IFrameworkView\n        where T : Game, new()\n    {\n        private CoreApplicationView _applicationView;\n        private T _game;\n\n        public UAPFrameworkView()\n        {\n        }\n\n        void IFrameworkView.Initialize(CoreApplicationView applicationView)\n        {\n            _applicationView = applicationView;\n\n            _applicationView.Activated += ApplicationView_Activated;\n        }\n\n        private void ApplicationView_Activated(CoreApplicationView sender, IActivatedEventArgs args)\n        {\n            if (args.Kind == ActivationKind.Launch)\n            {\n                // Save any launch parameters to be parsed by the platform.\n                ConcreteGame.LaunchParameters = ((LaunchActivatedEventArgs)args).Arguments;\n                ConcreteGame.PreviousExecutionState = ((LaunchActivatedEventArgs)args).PreviousExecutionState;\n\n                // Construct the game.\n                _game = new T();\n            }\n            else if (args.Kind == ActivationKind.Protocol)\n            {\n                // Save any protocol launch parameters to be parsed by the platform.\n                var protocolArgs = args as ProtocolActivatedEventArgs;\n                ConcreteGame.LaunchParameters = protocolArgs.Uri.AbsoluteUri;\n                ConcreteGame.PreviousExecutionState = protocolArgs.PreviousExecutionState;\n\n                // Construct the game if it does not exist\n                // Protocol can be used to reactivate a suspended game\n                if (_game == null)\n                {\n                    _game = new T();\n                }\n            }\n        }\n\n        void IFrameworkView.Load(string entryPoint)\n        {\n        }\n\n        void IFrameworkView.Run()\n        {\n            // Initialize and run the game.\n            _game.Run();\n        }\n\n        void IFrameworkView.SetWindow(CoreWindow window)\n        {\n            // Initialize the singleton window.\n            UAPGameWindow.Instance.Initialize(window, null);\n        }\n\n        void IFrameworkView.Uninitialize()\n        {\n            // TODO: I have no idea when and if this is\n            // called... as of Win8 build 8250 this seems \n            // like its never called.\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.UAP/UAPGameWindow.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform;\n\nusing Windows.UI.Core;\nusing Windows.UI.ViewManagement;\nusing Windows.Phone.UI.Input;\nusing Microsoft.Xna.Platform.Input;\n\n\n#if UAP\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.Graphics.Display;\n#endif\n\n#if WINUI\nusing Microsoft.UI.Xaml;\nusing Microsoft.UI.Xaml.Controls;\nusing Microsoft.Graphics.Display;\nusing Microsoft.UI.Windowing;\n#endif\n\nnamespace Microsoft.Xna.Framework\n{\n    partial class UAPGameWindow : GameWindow\n    {\n        private static Dictionary<IntPtr, UAPGameWindow> _instances = new Dictionary<IntPtr, UAPGameWindow>();\n\n        internal static UAPGameWindow FromHandle(IntPtr handle)\n        {\n            return _instances[handle];\n        }\n\n        private DisplayOrientation _orientation;\n        private CoreWindow _coreWindow;\n        private DisplayInformation _dinfo;\n        private Rectangle _viewBounds;\n\n        internal MouseState _mouseState;\n        private InputEvents _inputEvents;\n        private bool _backPressed = false;\n\n        private ApplicationView _appView;\n\n        #region Internal Properties\n        \n        public ApplicationView AppView { get { return _appView; } }\n\n        internal CoreWindow CoreWindow { get { return _coreWindow; } }\n\n        internal Game Game { get; set; }\n\n        internal bool IsExiting { get; set; }\n\n        #endregion\n\n        #region Public Properties\n\n        public override IntPtr Handle { get { return Marshal.GetIUnknownForObject(_coreWindow); } }\n\n        public override string ScreenDeviceName { get { return String.Empty; } } // window.Title\n\n        public override Rectangle ClientBounds { get { return _viewBounds; } }\n\n        public override bool AllowUserResizing\n        {\n            get { return false; }\n            set\n            {\n                // You cannot resize a Metro window!\n            }\n        }\n\n        public override DisplayOrientation CurrentOrientation\n        {\n            get { return _orientation; }\n        }\n\n        private GameStrategy GameStrategy { get { return ConcreteGame.ConcreteGameInstance; } }\n\n        #endregion\n\n        static public UAPGameWindow Instance { get; private set; }\n\n        static UAPGameWindow()\n        {\n            Instance = new UAPGameWindow();\n        }\n\n        internal UAPGameWindow()\n        {\n\n        }\n\n        internal SwapChainPanel SwapChainPanel { get; private set; }\n\n        public void Initialize(CoreWindow coreWindow, SwapChainPanel swapChainPanel = null)\n        {\n            _coreWindow = coreWindow;\n            _instances.Add(this.Handle, this);\n\n            this.SwapChainPanel = swapChainPanel;\n            _inputEvents = new InputEvents(this, _coreWindow, this.SwapChainPanel);\n\n            _dinfo = DisplayInformation.GetForCurrentView();\n\n            _appView = ApplicationView.GetForCurrentView();\n\n            _orientation = ToOrientation(_dinfo.CurrentOrientation);\n            _dinfo.OrientationChanged += DisplayProperties_OrientationChanged;\n\n            _coreWindow.SizeChanged += Window_SizeChanged;\n\n            _coreWindow.Closed += Window_Closed;\n            _coreWindow.Activated += Window_FocusChanged;\n            _coreWindow.VisibilityChanged += Window_VisibilityChanged;\n            _coreWindow.Dispatcher.AcceleratorKeyActivated += Dispatcher_AcceleratorKeyActivated;\n\n            if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent(\"Windows.Phone.UI.Input.HardwareButtons\"))\n            {\n                Windows.Phone.UI.Input.HardwareButtons.BackPressed += this.HardwareButtons_BackPressed;\n            }\n            else\n            {\n                SystemNavigationManager.GetForCurrentView().BackRequested += this.BackRequested;\n            }\n\n            SetViewBounds(_appView.VisibleBounds.Width, _appView.VisibleBounds.Height);\n\n            SetCursor(false);\n        }\n\n        void Window_VisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args)\n        {\n            ((ConcreteGame)this.GameStrategy).Internal_SetIsVisible(args.Visible);\n        }\n\n        private void Window_FocusChanged(CoreWindow sender, WindowActivatedEventArgs args)\n        {\n            switch (args.WindowActivationState)\n            {\n                case CoreWindowActivationState.Deactivated:\n                    base.OnDeactivated();\n                    break;\n\n                case CoreWindowActivationState.PointerActivated:\n                case CoreWindowActivationState.CodeActivated:\n                    base.OnActivated();\n                    break;\n\n                default:\n#if DEBUG\n                    throw new InvalidOperationException();\n#endif\n                    break;\n            }\n        }\n\n        private void Window_Closed(CoreWindow sender, CoreWindowEventArgs args)\n        {\n            Game.SuppressDraw();\n            ((IPlatformGame)Game).GetStrategy<GameStrategy>().TickExiting();\n        }\n\n        private void SetViewBounds(double width, double height)\n        {\n            int pixelWidth = Math.Max(1, (int)Math.Round(width * _dinfo.RawPixelsPerViewPixel));\n            int pixelHeight = Math.Max(1, (int)Math.Round(height * _dinfo.RawPixelsPerViewPixel));\n            _viewBounds = new Rectangle(0, 0, pixelWidth, pixelHeight);\n        }\n\n        private void Window_SizeChanged(object sender, WindowSizeChangedEventArgs args)\n        {\n            int pixelWidth  = Math.Max(1, (int)Math.Round(args.Size.Width * _dinfo.RawPixelsPerViewPixel));\n            int pixelHeight = Math.Max(1, (int)Math.Round(args.Size.Height * _dinfo.RawPixelsPerViewPixel));\n\n            // Set the new client bounds.\n            _viewBounds = new Rectangle(0, 0, pixelWidth, pixelHeight);\n\n            // Set the default new back buffer size and viewport, but this\n            // can be overloaded by the two events below.\n\n            GraphicsDeviceManager gdm = ((IPlatformGame)Game).GetStrategy<GameStrategy>().GraphicsDeviceManager;\n            gdm.IsFullScreen = _appView.IsFullScreenMode;\n            gdm.PreferredBackBufferWidth = _viewBounds.Width;\n            gdm.PreferredBackBufferHeight = _viewBounds.Height;\n            gdm.ApplyChanges();\n\n            // Set the new view state which will trigger the \n            // Game.ApplicationViewChanged event and signal\n            // the client size changed event.\n            OnClientSizeChanged();\n        }\n\n        private void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args)\n        {\n            // NOTE: Dispatcher event is used because KeyDown event doesn't handle Alt key\n            var key = InputEvents.KeyTranslate(args.VirtualKey, args.KeyStatus);\n            switch (args.EventType)\n            {\n                case CoreAcceleratorKeyEventType.KeyDown:\n                case CoreAcceleratorKeyEventType.SystemKeyDown:\n                    this.OnKeyDown(key);\n                    break;\n                case CoreAcceleratorKeyEventType.KeyUp:\n                case CoreAcceleratorKeyEventType.SystemKeyUp:\n                    this.OnKeyUp(key);\n                    break;\n                default:\n                    break;\n            }\n        }\n        \n        private static DisplayOrientation ToOrientation(DisplayOrientations orientations)\n        {\n            var result = DisplayOrientation.Default;\n            if ((orientations & DisplayOrientations.Landscape) != 0)\n                result |= DisplayOrientation.LandscapeLeft;\n            if ((orientations & DisplayOrientations.LandscapeFlipped) != 0)\n                result |= DisplayOrientation.LandscapeRight;\n            if ((orientations & DisplayOrientations.Portrait) != 0)\n                result |= DisplayOrientation.Portrait;\n            if ((orientations & DisplayOrientations.PortraitFlipped) != 0)\n                result |= DisplayOrientation.PortraitDown;\n\n            return result;\n        }\n\n        internal void SetClientSize(int width, int height)\n        {\n            if (_appView.IsFullScreenMode)\n                return;\n\n            if (_viewBounds.Width == width &&\n                _viewBounds.Height == height)\n                return;\n\n            double rawPixelsPerViewPixel = 1.0d;\n            CoreWindow coreWindow = CoreWindow.GetForCurrentThread();\n            if (coreWindow != null)\n            {\n                rawPixelsPerViewPixel = _dinfo.RawPixelsPerViewPixel;\n            }\n            else\n            {\n                Task.Run(async () =>\n                {\n                    await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(\n                        CoreDispatcherPriority.Normal, () => { rawPixelsPerViewPixel = _dinfo.RawPixelsPerViewPixel; });\n                }).Wait();\n            }\n            var viewSize = new Windows.Foundation.Size(width / rawPixelsPerViewPixel, height / rawPixelsPerViewPixel);\n\n            //_appView.SetPreferredMinSize(viewSize);\n            if (!_appView.TryResizeView(viewSize))\n            {\n                // TODO: What now?\n            }\n        }\n\n        private void DisplayProperties_OrientationChanged(DisplayInformation dinfo, object sender)\n        {\n            // Set the new orientation.\n            _orientation = ToOrientation(dinfo.CurrentOrientation);\n\n            // Call the user callback.\n            OnOrientationChanged();\n\n            // If we have a valid client bounds then update the graphics device.\n            if (_viewBounds.Width > 0 && _viewBounds.Height > 0)\n            {\n                GraphicsDeviceManager gdm = ((IPlatformGame)Game).GetStrategy<GameStrategy>().GraphicsDeviceManager;\n                gdm.ApplyChanges();\n            }\n        }\n\n        private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)\n        {\n            // We need to manually hide the keyboard input UI when the back button is pressed\n            if (KeyboardInput.IsVisible)\n                KeyboardInput.Cancel(null);\n            else\n                _backPressed = true;\n\n            e.Handled = true;\n        }\n\n        private void BackRequested(object sender, BackRequestedEventArgs e)\n        {\n            // Prevent Xbox from suspending the app when the user press 'B' button.\n            e.Handled = true;\n        }\n\n        private void UpdateBackButton()\n        {\n            ((IPlatformGamePad)GamePad.Current).GetStrategy<ConcreteGamePad>().Back = _backPressed;\n            _backPressed = false;\n        }\n\n        protected override void SetTitle(string title)\n        {\n            Debug.WriteLine(\"WARNING: GameWindow.Title has no effect under UWP.\");\n        }\n\n        internal void SetCursor(bool visible)\n        {\n            if ( _coreWindow == null )\n                return;\n\n            var asyncResult = _coreWindow.Dispatcher.RunIdleAsync( (e) =>\n            {\n                if (visible)\n                    _coreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0);\n                else\n                    _coreWindow.PointerCursor = null;\n            });\n        }\n\n        internal void Tick()\n        {\n            // Update input\n            _inputEvents.UpdateState();\n\n            // Update TextInput\n            if (!_inputEvents.TextQueue.IsEmpty)\n            {\n                InputEvents.KeyChar ch;\n                while (_inputEvents.TextQueue.TryDequeue(out ch))\n                {\n                    this.OnTextInput(ch.Character, ch.Key);\n                }\n            }\n\n            // Update back button\n            UpdateBackButton();\n\n            // Update and render the game.\n            if (Game != null)\n                Game.Tick();\n        }\n\n        #region Public Methods\n\n        public void Dispose()\n        {\n            //window.Dispose();\n\n            _instances.Remove(this.Handle);\n        }\n\n        #endregion\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Game/.UAP/XamlGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Windows.UI.Core;\nusing Microsoft.Xna.Framework;\n\n#if UAP\nusing Windows.UI.Xaml.Controls;\n#endif\n\n#if WINUI\nusing Microsoft.UI.Xaml.Controls;\n#endif\n\nnamespace Microsoft.Xna.Platform\n{\n    /// <summary>\n    /// Static class for initializing a Game object for a XAML application.\n    /// </summary>\n    /// <typeparam name=\"T\">A class derived from Game with a public parameterless constructor.</typeparam>\n    [CLSCompliant(false)]\n    public static class XamlGame<T>\n        where T : Game, new()\n    {\n        /// <summary>\n        /// Creates your Game class initializing it to work within a XAML application window.\n        /// </summary>\n        /// <param name=\"launchParameters\">The command line arguments from launch.</param>\n        /// <param name=\"window\">The core window object.</param>\n        /// <param name=\"swapChainPanel\">The XAML SwapChainPanel to which we render the scene and receive input events.</param>\n        /// <returns>Returns an instance of T generated with default parameterless T constructor</returns>\n        static public T Create(string launchParameters, CoreWindow window, SwapChainPanel swapChainPanel)\n        {\n            if (launchParameters == null)\n                throw new NullReferenceException(\"The launch parameters cannot be null!\");\n            if (window == null)\n                throw new NullReferenceException(\"The window cannot be null!\");\n            if (swapChainPanel == null)\n                throw new NullReferenceException(\"The swap chain panel cannot be null!\");\n\n            // Save any launch parameters to be parsed by the platform.\n            ConcreteGame.LaunchParameters = launchParameters;\n\n            // Setup the window class.\n            UAPGameWindow.Instance.Initialize(window, swapChainPanel);\n\n            // Construct the game.\n            T game = new T();\n\n            // Set the swap chain panel on the graphics mananger.\n            GraphicsDeviceManager gdm = ((IPlatformGame)game).GetStrategy<GameStrategy>().GraphicsDeviceManager;\n            if (gdm == null)\n                throw new NullReferenceException(\"You must create the GraphicsDeviceManager in the Game constructor!\");\n\n            // set swapChainPanel\n            ((IPlatformGraphicsDeviceManager)gdm).GetStrategy<ConcreteGraphicsDeviceManager>().SwapChainPanel = swapChainPanel;\n         \n            // Start running the game.\n            game.Run();\n\n            // Return the created game object.\n            return game;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.WindowsDX11/ConcreteGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    sealed class ConcreteGame : GameStrategy\n    {\n        //internal static string LaunchParameters;\n\n        private WinFormsGameWindow _gameWindow;\n\n        public ConcreteGame(Game game) : base(game)\n        {\n            _gameWindow = new WinFormsGameWindow(this);\n            base.Window = _gameWindow;\n            base.SetWindowListeners();\n        }\n\n        protected override void RunGameLoop()\n        {\n            _gameWindow.RunGameLoop();\n        }\n\n        public override bool IsMouseVisible\n        {\n            get { return base.IsMouseVisible; }\n            set\n            {\n                if (base.IsMouseVisible != value)\n                {\n                    base.IsMouseVisible = value;\n                    _gameWindow.MouseVisibleToggled();\n                }\n            }\n        }\n        \n        public override void TickExiting()\n        {\n            if (_gameWindow != null)\n                _gameWindow.Dispose();\n\n            _gameWindow = null;\n            Window = null;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_gameWindow != null)\n                {\n                    _gameWindow.Dispose();\n                    _gameWindow = null;\n                    Window = null;\n                }\n                \n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.WindowsDX11/ConcreteGameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteGameFactory : GameFactory\n    {\n\n        public override GameStrategy CreateGameStrategy(Game game)\n        {\n            return new ConcreteGame(game);\n        }\n\n        public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game)\n        {\n            return new ConcreteGraphicsDeviceManager(game);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Game/.WindowsDX11/ConcreteGraphicsDeviceManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy\n    {\n\n        public ConcreteGraphicsDeviceManager(Game game) : base(game)\n        {\n            var clientBounds = base.Game.Window.ClientBounds;\n            base.PreferredBackBufferWidth = clientBounds.Width;\n            base.PreferredBackBufferHeight = clientBounds.Height;\n\n        }\n\n        public override bool PreferHalfPixelOffset\n        {\n            get { return base.PreferHalfPixelOffset; }\n            set\n            {\n                //TODO: move the check in ApplyChanges\n                if (base.GraphicsDevice != null)\n                    throw new InvalidOperationException(\"Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice.\");\n\n                base.PreferHalfPixelOffset = value;\n            }\n        }\n\n        public override bool IsFullScreen\n        {\n            get { return base.IsFullScreen; }\n            set { base.IsFullScreen = value; }\n        }\n\n        public override DisplayOrientation SupportedOrientations\n        {\n            get { return base.SupportedOrientations; }\n            set { base.SupportedOrientations = value; }\n        }\n\n        public override void ToggleFullScreen()\n        {\n            base.IsFullScreen = !base.IsFullScreen;\n            ApplyChanges();\n        }\n\n        public override void ApplyChanges()\n        {\n            if (this.GraphicsDevice == null)\n            {\n                this.CreateDevice();\n            }\n\n            // populates a gdi with settings in this gdm and allows users to override them with\n            // PrepareDeviceSettings event this information should be applied to the GraphicsDevice\n            var gdi = this.DoPreparingDeviceSettings();\n\n            if (gdi.GraphicsProfile != GraphicsDevice.GraphicsProfile)\n            {\n                // if the GraphicsProfile changed we need to create a new GraphicsDevice\n                this.GraphicsDevice.Dispose();\n                this.GraphicsDevice = null;\n\n                this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters);\n\n                // update the touchpanel display size when the graphicsdevice is reset\n                this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel;\n                ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform;\n\n                this.OnDeviceCreated(EventArgs.Empty);\n            }\n            else\n            {\n                GraphicsDevice.Reset(gdi.PresentationParameters);\n            }\n        }\n\n        /// <summary>\n        /// This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to\n        /// allow users to change the settings. Then returns that GraphicsDeviceInformation.\n        /// Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null.\n        /// </summary>\n        internal GraphicsDeviceInformation DoPreparingDeviceSettings()\n        {\n            var gdi = new GraphicsDeviceInformation();\n            gdi.Adapter = GraphicsAdapter.DefaultAdapter;\n            gdi.GraphicsProfile = GraphicsProfile;\n\n            PresentationParameters pp = new PresentationParameters();\n            pp.DepthStencilFormat = this.PreferredDepthStencilFormat;\n            pp.BackBufferFormat = this.PreferredBackBufferFormat;\n            pp.BackBufferWidth = this.PreferredBackBufferWidth;\n            pp.BackBufferHeight = this.PreferredBackBufferHeight;\n            pp.IsFullScreen = this.IsFullScreen;\n            pp.HardwareModeSwitch = this.HardwareModeSwitch;\n            pp.PresentationInterval = this.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate;\n            pp.DisplayOrientation = this.Game.Window.CurrentOrientation;\n            pp.DeviceWindowHandle = this.Game.Window.Handle;\n\n            // always initialize MultiSampleCount to the maximum, if users want to overwrite\n            // this they have to respond to the PreparingDeviceSettingsEvent and modify\n            // args.GraphicsDeviceInformation.PresentationParameters.MultiSampleCount\n            int maxMultiSampleCount = 0;\n            if (this.PreferMultiSampling)\n            {\n                if (GraphicsDevice != null)\n                {\n                    maxMultiSampleCount = ((IPlatformGraphicsDevice)GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)GraphicsDevice).Strategy.PresentationParameters.BackBufferFormat);\n                }\n                else\n                {\n                    maxMultiSampleCount = 32;\n                }\n            }\n            pp.MultiSampleCount = maxMultiSampleCount;\n\n            gdi.PresentationParameters = pp;\n            var args = new PreparingDeviceSettingsEventArgs(gdi);\n            this.OnPreparingDeviceSettings(args);\n\n            if (gdi.PresentationParameters == null || gdi.Adapter == null)\n                throw new NullReferenceException(\"Members should not be set to null in PreparingDeviceSettingsEventArgs\");\n\n            return gdi;\n        }\n\n        public override void CreateDevice()\n        {\n            if (this.GraphicsDevice != null)\n                return;\n\n            var gdi = this.DoPreparingDeviceSettings();\n\n            this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters);\n\n            // update the touchpanel display size when the graphicsdevice is reset\n            this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel;\n            ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform;\n\n            this.OnDeviceCreated(EventArgs.Empty);\n\n            PresentationParameters pp = this.GraphicsDevice.PresentationParameters;\n\n            WinFormsGameWindow gameWindow = (WinFormsGameWindow)Game.Window;\n\n            gameWindow.ChangeClientSize(pp.BackBufferWidth, pp.BackBufferHeight);\n\n            if (pp.IsFullScreen)\n            {\n                gameWindow.EnterFullScreen(pp);\n\n                if (!pp.HardwareModeSwitch)\n                {\n                    ConcreteGraphicsDevice cgd = ((IPlatformGraphicsDevice)this.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>();\n                    cgd.Internal_CreateSizeDependentResources();\n                    ((IPlatformGraphicsContext)cgd.MainContext).Strategy.ApplyRenderTargets(null);\n                }\n            }\n        }\n\n        private void GraphicsDevice_DeviceReset_UpdateTouchPanel(object sender, EventArgs eventArgs)\n        {\n            TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth;\n            TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight;\n            TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation;\n        }\n\n        private void GraphicsDevice_PresentationChanged_UpdateGamePlatform(object sender, PresentationEventArgs args)\n        {\n            PresentationParameters pp = args.PresentationParameters;\n\n            ((WinFormsGameWindow)this.Game.Window).OnPresentationChanged(pp);\n        }\n\n        internal void UpdateBackBufferSize(Rectangle clientBounds)\n        {\n            if (this.GraphicsDevice != null)\n            {\n                if (clientBounds.Width  != this.PreferredBackBufferWidth\n                ||  clientBounds.Height != this.PreferredBackBufferHeight)\n                {\n                    // Set the default new back buffer size\n                    this.PreferredBackBufferWidth  = clientBounds.Width;\n                    this.PreferredBackBufferHeight = clientBounds.Height;\n                    this.ApplyChanges();\n                }\n            }\n        }\n\n        #region IGraphicsDeviceManager strategy\n\n        public override bool BeginDraw()\n        {\n            //return base.BeginDraw();\n\n            return true;\n        }\n\n        public override void EndDraw()\n        {\n            //base.EndDraw();\n\n            GraphicsDevice device = this.GraphicsDevice;\n            if (device != null)\n            {\n                device.Present();\n            }\n        }\n\n        #endregion IGraphicsDeviceManager strategy\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.WindowsDX11/KeysHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal static class KeysHelper\n    {\n        static HashSet<int> _keyMaps = new HashSet<int>();\n\n        static KeysHelper()\n        {\n            Keys[] allKeys = (Keys[])Enum.GetValues(typeof(Keys));\n            foreach (Keys key in allKeys)\n                _keyMaps.Add((int)key);\n        }\n\n        /// <summary>\n        /// Checks if specified value is valid Key.\n        /// </summary>\n        /// <param name=\"value\">Keys base value</param>\n        /// <returns>Returns true if value is valid Key, false otherwise</returns>\n        public static bool IsKey(int value)\n        {\n            return _keyMaps.Contains(value);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.WindowsDX11/TimerHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Runtime.InteropServices;\nusing System.Threading;\n\nnamespace Microsoft.Xna.Platform.Utilities\n{\n    internal static class TimerHelper\n    {\n        [DllImport(\"ntdll.dll\", SetLastError = true)]\n        private static extern int NtQueryTimerResolution(out uint MinimumResolution, out uint MaximumResolution, out uint CurrentResolution);\n\n        private static readonly double LowestSleepThreshold;\n\n        static TimerHelper()\n        {\n            uint min, max, current;\n            NtQueryTimerResolution(out min, out max, out current);\n            LowestSleepThreshold = 1.0 + (max / 10000.0);\n        }\n\n        /// <summary>\n        /// Returns the current timer resolution in milliseconds\n        /// </summary>\n        public static double GetCurrentResolution()\n        {\n            uint min, max, current;\n            NtQueryTimerResolution(out min, out max, out current);\n            return current / 10000.0;\n        }\n\n        /// <summary>\n        /// Sleeps as long as possible without exceeding the specified period\n        /// </summary>\n        public static void SleepForNoMoreThan(double milliseconds)\n        {\n            // Assumption is that Thread.Sleep(t) will sleep for at least (t), and at most (t + timerResolution)\n            if (milliseconds < LowestSleepThreshold)\n                return;\n            var sleepTime = (int)(milliseconds - GetCurrentResolution());\n            if (sleepTime > 0)\n                Thread.Sleep(sleepTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.WindowsDX11/WinFormsGameForm.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Windows.Forms;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Input.Touch;\n\n\nnamespace Microsoft.Xna.Framework.Windows\n{\n    internal static class MessageExtensions\n    {     \n        public static int GetPointerId(this Message msg)\n        {\n            return (short)msg.WParam;\n        }\n\n        public static System.Drawing.Point GetPointerLocation(this Message msg)\n        {\n            var lowword = msg.LParam.ToInt32();\n\n            return new System.Drawing.Point()\n                       {\n                           X = (short)(lowword),\n                           Y = (short)(lowword >> 16),\n                       };\n        }\n    }\n\n    [System.ComponentModel.DesignerCategory(\"Code\")]\n    internal class WinFormsGameForm : Form\n        , IMessageFilter\n    {\n        private readonly WinFormsGameWindow _window;\n\n        public const int WM_QUIT       = 0x0012;\n        public const int WM_ERASEBKGND = 0x0014;\n\n        public const int WM_KEYDOWN    = 0x0100;\n        public const int WM_KEYUP      = 0x0101;\n        public const int WM_CHAR       = 0x0102;\n        public const int WM_SYSKEYDOWN = 0x0104;\n        public const int WM_SYSKEYUP   = 0x0105;\n        public const int WM_UNICHAR    = 0x0109;\n        public const int WM_SYSCOMMAND = 0x0112;\n\n        public const int WM_MOUSEMOVE   = 0x0200;\n        public const int WM_MOUSEWHEEL  = 0x020A;\n        public const int WM_MOUSEHWHEEL = 0x020E;\n\n        public const int WM_ENTERSIZEMOVE = 0x0231;\n        public const int WM_EXITSIZEMOVE  = 0x0232;\n        public const int WM_DROPFILES = 0x0233;\n        public const int WM_POINTERUPDATE = 0x0245;\n        public const int WM_POINTERDOWN   = 0x0246;\n        public const int WM_POINTERUP     = 0x0247;\n        public const int WM_TABLET_QUERYSYSTEMGESTURESTA = (0x02C0 + 12);\n\n\n        internal bool IsResizing { get; set; }\n\n        public WinFormsGameForm(WinFormsGameWindow window)\n        {\n            _window = window;\n            Application.AddMessageFilter(this);\n            base.Disposed += WinFormsGameForm_Disposed;\n        }\n\n        private void WinFormsGameForm_Disposed(object sender, EventArgs e)\n        {\n            base.Disposed -= WinFormsGameForm_Disposed;\n            Application.RemoveMessageFilter(this);\n        }\n\n        // TNC: handle keyboard messages internally to avoid garbage from EventArgs\n        // we need to handle those early in a IMessageFilter to skip OnPreviewKeyDown(PreviewKeyDownEventArgs)\n        bool IMessageFilter.PreFilterMessage(ref Message m)\n        {            \n            if (m.HWnd != this.Handle)\n                return false;\n            \n            switch (m.Msg)\n            {\n                case WM_KEYDOWN:\n                case WM_KEYUP:\n                case WM_CHAR:\n                case WM_UNICHAR:\n                    var c = m.WParam.ToInt32();\n                    if (c == 0x5B && c == 0x5C) return false; // let Left/Right Windows Key through\n                    if (_window.Platform_IsTextInputAttached())  return false; // let keys through if user subscribed to TextInput\n                    if (_window.Platform_IsKeyUpDownAttached())  return false; // let keys through if user subscribed to KeyUp/KeyDown\n                    return true; // skip message\n                default:\n                    return false;\n            }\n        }\n\n        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = \"FullTrust\")]\n        protected override void WndProc(ref Message m)\n        {\n            switch (m.Msg)\n            {\n                case WM_ERASEBKGND:\n                    return; // skip repaint of the control under the swapchain (PaintEventArgs)\n\n                // we handle those messages internally, skip WinForms EventArgs to avoid garbage\n                case WM_MOUSEWHEEL:\n                    return;\n                case WM_MOUSEHWHEEL:\n                    return;\n                case WM_MOUSEMOVE:\n                    return;\n            }\n\n            switch (m.Msg)\n            {\n                case WM_TABLET_QUERYSYSTEMGESTURESTA:\n                    {\n                        // This disables the windows touch helpers, popups, and \n                        // guides that get in the way of touch gameplay.\n                        const int flags = 0x00000001 | // TABLET_DISABLE_PRESSANDHOLD\n                                          0x00000008 | // TABLET_DISABLE_PENTAPFEEDBACK\n                                          0x00000010 | // TABLET_DISABLE_PENBARRELFEEDBACK\n                                          0x00000100 | // TABLET_DISABLE_TOUCHUIFORCEON\n                                          0x00000200 | // TABLET_DISABLE_TOUCHUIFORCEOFF\n                                          0x00008000 | // TABLET_DISABLE_TOUCHSWITCH\n                                          0x00010000 | // TABLET_DISABLE_FLICKS\n                                          0x00080000 | // TABLET_DISABLE_SMOOTHSCROLLING \n                                          0x00100000; // TABLET_DISABLE_FLICKFALLBACKKEYS\n                        m.Result = new IntPtr(flags);\n                        return;\n                    }\n\n                case WM_KEYDOWN:\n                    HandleKeyMessage(ref m);\n                    switch (m.WParam.ToInt32())\n                    {\n                        case 0x5B:  // Left Windows Key\n                        case 0x5C: // Right Windows Key\n\n                            if (_window.IsFullScreen && _window.HardwareModeSwitch)\n                                this.WindowState = FormWindowState.Minimized;\n\n                            break;\n                    }\n                    break;\n                case WM_SYSKEYDOWN:\n                    HandleKeyMessage(ref m);\n                    break;\n                case WM_KEYUP:\n                case WM_SYSKEYUP:\n                    HandleKeyMessage(ref m);\n                    break;\n\n                case WM_DROPFILES:\n                    HandleDropMessage(ref m);\n                    break;\n\n                case WM_SYSCOMMAND:\n\n                    int wParam = m.WParam.ToInt32();\n\n                    if (wParam == 0xF060) // SC_CLOSE\n                    {\n                        bool disableAltF4 = !_window.AllowAltF4;\n                        if (!disableAltF4 && m.LParam.ToInt32() == 0 && Focused)\n                        {\n                            m.Result = IntPtr.Zero;\n                            return;\n                        }\n                    }\n\n                    // Disable the system menu from being toggled by\n                    // keyboard input so we can own the ALT key.\n                    if (wParam == 0xF100) // SC_KEYMENU\n                    {\n                        m.Result = IntPtr.Zero;\n                        return;\n                    }\n                    break;\n\n                case WM_POINTERDOWN:\n                    {\n                        int id = m.GetPointerId();\n                        var position = m.GetPointerLocation();\n                        position = PointToClient(position);\n                        Vector2 vec = new Vector2(position.X, position.Y);\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddPressedEvent(id, vec);\n                    }\n                    break;\n                case WM_POINTERUPDATE:\n                    {\n                        int id = m.GetPointerId();\n                        var position = m.GetPointerLocation();\n                        position = PointToClient(position);\n                        Vector2 vec = new Vector2(position.X, position.Y);\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddMovedEvent(id, vec);\n                    }\n                    break;\n                case WM_POINTERUP:\n                    {\n                        int id = m.GetPointerId();\n                        var position = m.GetPointerLocation();\n                        position = PointToClient(position);\n                        Vector2 vec = new Vector2(position.X, position.Y);\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<ConcreteTouchPanel>().AddReleasedEvent(id, vec);\n                    }\n                    break;\n\n                case WM_ENTERSIZEMOVE:\n                    IsResizing = true;\n                    break;\n                case WM_EXITSIZEMOVE:\n                    IsResizing = false;\n                    break;\n            }\n\n            base.WndProc(ref m);\n        }\n\n        void HandleKeyMessage(ref Message m)\n        {\n            long virtualKeyCode = m.WParam.ToInt64();\n            bool extended = (m.LParam.ToInt64() & 0x01000000) != 0;\n            long scancode = (m.LParam.ToInt64() & 0x00ff0000) >> 16;\n            var key = KeyCodeTranslate(\n                (System.Windows.Forms.Keys)virtualKeyCode,\n                extended,\n                scancode);\n            if (Microsoft.Xna.Platform.KeysHelper.IsKey((int)key))\n            {\n                switch (m.Msg)\n                {\n                    case WM_KEYDOWN:\n                    case WM_SYSKEYDOWN:\n                        _window.Platform_OnKeyDown(key);\n                        break;\n                    case WM_KEYUP:\n                    case WM_SYSKEYUP:\n\n                        _window.Platform_OnKeyUp(key);\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n        }\n\n        [DllImport(\"shell32.dll\", CharSet = CharSet.Unicode)]\n        private static extern uint DragQueryFile(IntPtr hDrop, uint iFile,\n            [Out] StringBuilder lpszFile, uint cch);\n\n        void HandleDropMessage(ref Message m)\n        {\n            IntPtr hdrop = m.WParam;\n\n            uint count = DragQueryFile(hdrop, uint.MaxValue, null, 0);\n\n            string[] files = new string[count];\n            for (uint i = 0; i < count; i++)\n            {\n                uint buffSize = DragQueryFile(hdrop, i, null, int.MaxValue);\n                StringBuilder builder = new StringBuilder((int)buffSize);\n                DragQueryFile(hdrop, i, builder, buffSize);\n                files[i] = builder.ToString();\n            }\n\n            _window.Platform_OnFileDrop(new FileDropEventArgs(files));\n            m.Result = IntPtr.Zero;\n        }\n\n        private static Microsoft.Xna.Framework.Input.Keys KeyCodeTranslate(\n            System.Windows.Forms.Keys keyCode, bool extended, long scancode)\n        {\n            switch (keyCode)\n            {\n                // WinForms does not distinguish between left/right keys\n                // We have to check for special keys such as control/shift/alt/ etc\n                case System.Windows.Forms.Keys.ControlKey:\n                    return extended\n                        ? Microsoft.Xna.Framework.Input.Keys.RightControl\n                        : Microsoft.Xna.Framework.Input.Keys.LeftControl;\n                case System.Windows.Forms.Keys.ShiftKey:\n                    // left shift is 0x2A, right shift is 0x36. IsExtendedKey is always false.\n                    return ((scancode & 0x1FF) == 0x36)\n                               ? Microsoft.Xna.Framework.Input.Keys.RightShift\n                                : Microsoft.Xna.Framework.Input.Keys.LeftShift;\n                // Note that the Alt key is now referred to as Menu.\n                case System.Windows.Forms.Keys.Menu:\n                case System.Windows.Forms.Keys.Alt:\n                    return extended\n                        ? Microsoft.Xna.Framework.Input.Keys.RightAlt\n                        : Microsoft.Xna.Framework.Input.Keys.LeftAlt;\n\n                default:\n                    return (Microsoft.Xna.Framework.Input.Keys)keyCode;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.WindowsDX11/WinFormsGameWindow.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Threading;\nusing System.Windows.Forms;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Framework.Windows;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Utilities;\nusing SysDrawing = System.Drawing;\nusing Keys = Microsoft.Xna.Framework.Input.Keys;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    class WinFormsGameWindow : GameWindow, IDisposable\n    {\n        private static Dictionary<IntPtr, WinFormsGameWindow> _instances = new Dictionary<IntPtr, WinFormsGameWindow>();\n\n        internal static WinFormsGameWindow FromHandle(IntPtr handle)\n        {\n            return _instances[handle];\n        }\n\n        private IntPtr _handle;\n        private WinFormsGameForm Form;\n\n        private ConcreteGame _concreteGame;\n        private Game _game;\n\n        private bool _isResizable;\n        private bool _isBorderless;\n        private bool _isMouseHidden;\n        private bool _isMouseInBounds;\n\n        private SysDrawing.Point _locationBeforeFullScreen;\n        // flag to indicate that we're switching to/from full screen and should ignore resize events\n        private bool _switchingFullScreen;\n\n        // true if window position was moved either through code or by dragging/resizing the form\n        private bool _wasMoved;\n\n        #region Internal Properties\n\n\n        #endregion\n\n        #region Public Properties\n\n        public override IntPtr Handle { get { return _handle; } }\n\n        public override string ScreenDeviceName { get { return String.Empty; } }\n\n        public override Rectangle ClientBounds\n        {\n            get\n            {\n                SysDrawing.Point position = Form.PointToScreen(SysDrawing.Point.Empty);\n                SysDrawing.Size size = Form.ClientSize;\n                return new Rectangle(position.X, position.Y, size.Width, size.Height);\n            }\n        }\n\n        public override bool AllowUserResizing\n        {\n            get { return _isResizable; }\n            set\n            {\n                if (_isResizable == value)\n                    return;\n\n                _isResizable = value;\n                Form.MaximizeBox = _isResizable;\n\n                if (!_isBorderless)\n                {\n                    Form.FormBorderStyle = (_isResizable)\n                                            ? FormBorderStyle.Sizable\n                                            : FormBorderStyle.FixedSingle;\n                }\n            }\n        }\n\n        public override bool IsBorderless\n        {\n            get { return _isBorderless; }\n            set\n            {\n                if (_isBorderless == value)\n                    return;\n\n                _isBorderless = value;\n\n                if (!_isBorderless)\n                {\n                    Form.FormBorderStyle = (_isResizable)\n                                            ? FormBorderStyle.Sizable\n                                            : FormBorderStyle.FixedSingle;\n                }\n                else\n                {\n                    Form.FormBorderStyle = FormBorderStyle.None;\n                }\n            }\n        }\n\n        public override DisplayOrientation CurrentOrientation\n        {\n            get { return DisplayOrientation.Default; }\n        }\n\n        public bool IsFullScreen { get; private set; }\n        public bool HardwareModeSwitch { get; private set; }\n\n        #endregion\n\n        internal WinFormsGameWindow(ConcreteGame concreteGame)\n        {\n            _concreteGame = concreteGame;\n            _game = concreteGame.Game;\n\n            Form = new WinFormsGameForm(this);\n            _handle = Form.Handle;\n            _instances.Add(this.Handle, this);\n\n            SysDrawing.Size newClientSize = new SysDrawing.Size(GraphicsDeviceManager.DefaultBackBufferWidth, GraphicsDeviceManager.DefaultBackBufferHeight);\n            if (this.Form.ClientSize != newClientSize)\n                this.Form.ClientSize = newClientSize;\n            CenterOnPrimaryMonitor();\n\n            SetIcon();\n            Title = AssemblyHelper.GetDefaultWindowTitle();\n\n            Form.MaximizeBox = false;\n            Form.FormBorderStyle = FormBorderStyle.FixedSingle;\n            Form.StartPosition = FormStartPosition.Manual;\n\n            // Capture mouse events.\n            if (Mouse.WindowHandle == IntPtr.Zero)\n                Mouse.WindowHandle = this.Handle;\n            Form.MouseEnter += OnMouseEnter;\n            Form.MouseLeave += OnMouseLeave;\n\n            // Capture touch events.\n            if (TouchPanel.WindowHandle == IntPtr.Zero)\n                TouchPanel.WindowHandle = this.Handle;\n\n            // disable Keyboard input until the window is activated.\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().SetActive(false);\n\n            Form.Activated += OnActivated;\n            Form.Deactivate += OnDeactivate;\n            Form.ResizeBegin += OnResizeBegin;\n            Form.Resize += OnResize;\n            Form.ResizeEnd += OnResizeEnd;\n\n            Form.KeyPress += OnKeyPress;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        internal struct POINTSTRUCT\n        {\n            public int X;\n            public int Y;\n        }\n\n        [DllImport(\"shell32.dll\", CharSet = CharSet.Auto, BestFitMapping = false)]\n        private static extern IntPtr ExtractIcon(IntPtr hInst, string exeFileName, int iconIndex);\n        \n        [DllImport(\"user32.dll\", ExactSpelling=true, CharSet=CharSet.Auto)]\n        [return: MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]\n        internal static extern bool GetCursorPos(out POINTSTRUCT pt);\n        \n        [DllImport(\"user32.dll\", ExactSpelling=true, CharSet=CharSet.Auto)]\n        internal static extern int MapWindowPoints(HandleRef hWndFrom, HandleRef hWndTo, out POINTSTRUCT pt, int cPoints);\n\n        [DllImport(\"shell32.dll\")]\n        private static extern void DragAcceptFiles(IntPtr hwnd, bool fAccept);\n\n        private void SetIcon()\n        {\n            // When running unit tests this can return null.\n            var assembly = Assembly.GetEntryAssembly();\n            if (assembly == null)\n                return;\n            var handle = ExtractIcon(IntPtr.Zero, assembly.Location, 0);\n            if (handle != IntPtr.Zero)\n                Form.Icon = SysDrawing.Icon.FromHandle(handle);\n        }\n\n        ~WinFormsGameWindow()\n        {\n            Dispose(false);\n        }\n\n        private void OnActivated(object sender, EventArgs eventArgs)\n        {\n            base.OnActivated();\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().SetActive(true);\n\n            DragAcceptFiles(Handle, true); //allows drag and dropping\n        }\n\n        private void OnDeactivate(object sender, EventArgs eventArgs)\n        {\n            // If in exclusive mode full-screen, force it out of exclusive mode and minimize the window\n            if( IsFullScreen && _concreteGame.GraphicsDevice.PresentationParameters.HardwareModeSwitch)\n            {\n                // This is true when the user presses the Windows key while game window has focus\n                if( Form.WindowState == FormWindowState.Minimized)\n                    MinimizeFullScreen();\t\t\t\t\n            }\n            base.OnDeactivated();\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().SetActive(false);\n        }\n\n        private void OnMouseEnter(object sender, EventArgs e)\n        {\n            _isMouseInBounds = true;\n            if (!_concreteGame.IsMouseVisible && !_isMouseHidden)\n            {\n                _isMouseHidden = true;\n                Cursor.Hide();\n            }\n        }\n\n        private void OnMouseLeave(object sender, EventArgs e)\n        {\n            _isMouseInBounds = false;\n            if (_isMouseHidden)\n            {\n                _isMouseHidden = false;\n                Cursor.Show();\n            }\n        }\n\n        [DllImport(\"user32.dll\")]\n        private static extern short VkKeyScanEx(char ch, IntPtr dwhkl);\n\n        private void OnKeyPress(object sender, KeyPressEventArgs e)\n        {\n            var key = (Keys) (VkKeyScanEx(e.KeyChar, InputLanguage.CurrentInputLanguage.Handle) & 0xff);\n            this.OnTextInput(e.KeyChar, key);\n        }\n\n        private FormWindowState _lastFormState;\n\n        private void OnResizeBegin(object sender, EventArgs e)\n        {\n        }\n\n        private void OnResize(object sender, EventArgs eventArgs)\n        {\n            if (_switchingFullScreen || Form.IsResizing)\n            {   \n                // Repaint the window while resizing.\n                // gameloop is paused during windows resize.\n                try \n                {\n                    GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager;\n                    if (gdm != null)\n                    {\n                        if (!((IPlatformGraphicsContext)((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.MainContext).Strategy.IsRenderTargetBound)\n                        {\n                            ((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.Present();\n                        }\n                        else\n                        {\n                            // We cannot present with a RT set on the device.\n                        }\n                    }\n                }\n                catch (Exception ex)\n                {\n#if DEBUG \n                    throw ex;\n#endif\n                }\n                return;\n            }\n\n            // this event can be triggered when moving the window through Windows hotkeys\n            // in that case we should no longer center the window after resize\n            if (_lastFormState == Form.WindowState)\n                _wasMoved = true;\n\n            if (_concreteGame.Window == this && Form.WindowState != FormWindowState.Minimized)\n            {\n                GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager;\n                if (gdm != null)\n                {\n                    // we may need to restore full screen when coming back from a minimized window\n                    if (_lastFormState == FormWindowState.Minimized)\n                        ((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().SetHardwareFullscreen();\n\n                    ((IPlatformGraphicsDeviceManager)gdm).GetStrategy<ConcreteGraphicsDeviceManager>().UpdateBackBufferSize(this.ClientBounds);\n                }\n            }\n\n            _lastFormState = Form.WindowState;\n            OnClientSizeChanged();\n        }\n\n        private void OnResizeEnd(object sender, EventArgs eventArgs)\n        {\n            _wasMoved = true;\n            if (_concreteGame.Window == this)\n            {\n                // the display that the window is on might have changed, so we need to\n                // check and possibly update the Adapter of the GraphicsDevice\n                GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager;\n                if (gdm != null)\n                {\n                    ((IPlatformGraphicsDeviceManager)gdm).GetStrategy<ConcreteGraphicsDeviceManager>().UpdateBackBufferSize(this.ClientBounds);\n\n                    if (_concreteGame.GraphicsDevice != null)\n                        ((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().RefreshAdapter();\n                }\n            }\n\n            OnClientSizeChanged();\n        }\n\n        protected override void SetTitle(string title)\n        {\n            Form.Text = title;\n        }\n\n        internal void RunGameLoop()\n        {\n            Application.Idle += Application_Idle;\n            Application.Run(Form);\n            Application.Idle -= Application_Idle;\n\n            // We need to remove the WM_QUIT message in the message \n            // pump as it will keep us from restarting on this \n            // same thread.\n            //\n            // This is critical for some NUnit runners which\n            // typically will run all the tests on the same\n            // process/thread.\n            var msg = new NativeMessage();\n            do\n            {\n                if (msg.msg == WinFormsGameForm.WM_QUIT)\n                    break;\n\n                Thread.Sleep(100);\n            } \n            while (PeekMessage(out msg, IntPtr.Zero, 0, 1 << 5, 1));\n        }\n\n        // Run game loop when the app becomes Idle.\n        private void Application_Idle(object sender, EventArgs e)\n        {\n            NativeMessage nativeMsg = default(NativeMessage);\n            while (true)\n            {\n                _game.Tick();\n                \n                if (PeekMessage(out nativeMsg, IntPtr.Zero, 0, 0, 0))\n                    break;\n\n                if (Form == null || Form.IsDisposed)\n                    break;\n            }\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct NativeMessage\n        {\n            public IntPtr handle;\n            public int msg;\n            public IntPtr wParam;\n            public IntPtr lParam;\n            public uint time;\n            public System.Drawing.Point p;\n        }\n\n        internal void ChangeClientSize(int width, int height)\n        {\n            bool prevIsResizing = Form.IsResizing;\n            // make sure we don't see the events from this as a user resize\n            Form.IsResizing = true;\n\n            SysDrawing.Size newClientSize = new SysDrawing.Size(width, height);\n            if (this.Form.ClientSize != newClientSize)\n                this.Form.ClientSize = newClientSize;\n\n            // if the window wasn't moved manually and it's resized, it should be centered\n            if (!_wasMoved)\n                CenterOnPrimaryMonitor();\n\n            Form.IsResizing = prevIsResizing;\n        }\n\n        internal void CenterOnPrimaryMonitor()\n        {\n            Form.Location = new System.Drawing.Point(\n                 (Screen.PrimaryScreen.WorkingArea.Width  - Form.Width ) / 2,\n                 (Screen.PrimaryScreen.WorkingArea.Height - Form.Height) / 2);\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously\n        [DllImport(\"User32.dll\", CharSet = CharSet.Auto)]\n        private static extern bool PeekMessage(out NativeMessage msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags);\n\n        #region Public Methods\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        void Dispose(bool disposing)\n        {\n            if (Mouse.WindowHandle == this.Handle)\n                Mouse.WindowHandle = IntPtr.Zero;\n            if (TouchPanel.WindowHandle == this.Handle)\n                TouchPanel.WindowHandle = IntPtr.Zero;\n\n            // re-enable keyboard input.\n            ((IPlatformKeyboard)Keyboard.Current).GetStrategy<ConcreteKeyboard>().SetActive(true);\n\n            _instances.Remove(this.Handle);\n            _handle = IntPtr.Zero;\n\n            if (disposing)\n            {\n                if (Form != null)\n                {\n                    Form.Dispose();\n                    Form = null;\n                }\n            }\n            _concreteGame = null;\n            _game = null;\n        }\n\n        public void MouseVisibleToggled()\n        {\n            if (_concreteGame.IsMouseVisible)\n            {\n                if (_isMouseHidden)\n                {\n                    Cursor.Show();\n                    _isMouseHidden = false;\n                }\n            }\n            else if (!_isMouseHidden && _isMouseInBounds)\n            {\n                Cursor.Hide();\n                _isMouseHidden = true;\n            }\n        }\n\n        internal void OnPresentationChanged(PresentationParameters pp)\n        {\n            var raiseClientSizeChanged = false;\n            if (pp.IsFullScreen && pp.HardwareModeSwitch && IsFullScreen && HardwareModeSwitch)\n            {\n                if(_concreteGame.IsActive)\n                {\n                    // stay in hardware full screen, need to call ResizeTargets so the displaymode can be switched\n                    ((IPlatformGraphicsDevice)_concreteGame.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().ResizeTargets();\n                }\n                else\n                {\n                    // This needs to be called in case the user presses the Windows key while the focus is on the second monitor,\n                    //\twhich (sometimes) causes the window to exit fullscreen mode, but still keeps it visible\n                    MinimizeFullScreen();\n                }\n            }\n            else if (pp.IsFullScreen && (!IsFullScreen || pp.HardwareModeSwitch != HardwareModeSwitch))\n            {\n                EnterFullScreen(pp);\n                raiseClientSizeChanged = true;\n            }\n            else if (!pp.IsFullScreen && IsFullScreen)\n            {\n                ExitFullScreen();\n                raiseClientSizeChanged = true;\n            }\n\n            ChangeClientSize(pp.BackBufferWidth, pp.BackBufferHeight);\n\n            if (raiseClientSizeChanged)\n                OnClientSizeChanged();\n        }\n\n        #endregion\n\n        internal void EnterFullScreen(PresentationParameters pp)\n        {\n            _switchingFullScreen = true;\n\n            // store the location of the window so we can restore it later\n            if (!IsFullScreen)\n                _locationBeforeFullScreen = Form.Location;\n\n            ((IPlatformGraphicsDevice)_concreteGame.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().SetHardwareFullscreen();\n\n            if (!pp.HardwareModeSwitch)\n            {\n                // FIXME: setting the WindowState to Maximized when the form is not shown will not update the ClientBounds\n                // this causes the back buffer to be the wrong size when initializing in soft full screen\n                // we show the form to bypass the issue\n                Form.Show();\n                IsBorderless = true;\n                Form.WindowState = FormWindowState.Maximized;\n                _lastFormState = FormWindowState.Maximized;\n            }\n\n            IsFullScreen = true;\n            HardwareModeSwitch = pp.HardwareModeSwitch;\n\n            _switchingFullScreen = false;\n        }\n\n\n        [DllImport(\"user32.dll\")]\n        static extern bool RedrawWindow(IntPtr hWnd, IntPtr lprcUpdate, IntPtr hrgnUpdate, uint flags);\n\n        private void ExitFullScreen()\n        {\n            _switchingFullScreen = true;\n\n            ((IPlatformGraphicsDevice)_concreteGame.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().ClearHardwareFullscreen();\n\n            IsBorderless = false;\n            Form.WindowState = FormWindowState.Normal;\n            _lastFormState = FormWindowState.Normal;\n            Form.Location = _locationBeforeFullScreen;\n            IsFullScreen = false;\n\n            // Windows does not always correctly redraw the desktop when exiting soft full screen, so force a redraw\n            if (!HardwareModeSwitch)\n                RedrawWindow(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 1);\n\n            _switchingFullScreen = false;\n        }\n\n        private void MinimizeFullScreen()\n        {\n            _switchingFullScreen = true;\n\n            ((IPlatformGraphicsDevice)_concreteGame.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().ClearHardwareFullscreen();\n\n            IsBorderless = false;\n            Form.WindowState = FormWindowState.Minimized;\n            _lastFormState = FormWindowState.Minimized;\n            Form.Location = _locationBeforeFullScreen;\n            IsFullScreen = false;\n\n            // Windows does not always correctly redraw the desktop when exiting soft full screen, so force a redraw\n            if (!HardwareModeSwitch)\n                RedrawWindow(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 1);\n\n            _switchingFullScreen = false;\n        }\n\n        internal void Platform_OnFileDrop(FileDropEventArgs e)\n        {\n            this.OnFileDrop(e);\n        }\n\n        internal void Platform_OnKeyDown(Keys key)\n        {\n            this.OnKeyDown(key);\n        }\n\n        internal void Platform_OnKeyUp(Keys key)\n        {\n            this.OnKeyUp(key);\n        }\n\n        internal bool Platform_IsTextInputAttached()\n        {\n            return this.IsTextInputAttached();\n        }\n\n        internal bool Platform_IsKeyUpDownAttached()\n        {\n            return this.IsKeyUpDownAttached();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Game/.iOS/ConcreteGame.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\n\nusing Foundation;\nusing UIKit;\nusing CoreAnimation;\nusing ObjCRuntime;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    sealed class ConcreteGame : GameStrategy\n    {\n        private NSObject WillTerminateHolder;\n        private CADisplayLink _displayLink;\n\n        private iOSGameWindow _gameWindow;\n\n\n        public ConcreteGame(Game game) : base(game)\n        {\n            this.Services.AddService(typeof(ConcreteGame), this);\n\n            string appLocation = ((ITitleContainer)TitleContainer.Current).Location;\n            Directory.SetCurrentDirectory(appLocation);\n\n            _gameWindow = new iOSGameWindow(this);\n            base.Window = _gameWindow;\n            base.SetWindowListeners();\n            if (TouchPanel.WindowHandle == IntPtr.Zero)\n                TouchPanel.WindowHandle = base.Window.Handle;\n\n            _gameWindow.UIWindow.Add(_gameWindow.ViewController.View);\n\n            _gameWindow.ViewController.InterfaceOrientationChanged += ViewController_InterfaceOrientationChanged;\n\n            //(SJ) Why is this called here when it's not in any other project\n            //Guide.Initialise(game);\n        }\n\n        public override TimeSpan TargetElapsedTime\n        {\n            get { return base.TargetElapsedTime; }\n            set\n            {\n                if (base.TargetElapsedTime != value)\n                {\n                    base.TargetElapsedTime = value;\n                    CreateDisplayLink();\n                }\n            }\n        }\n\n        private void CreateDisplayLink()\n        {\n            if (_displayLink != null)\n                _displayLink.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoopMode.Default);\n\n            _displayLink = UIScreen.MainScreen.CreateDisplayLink(_gameWindow.ViewController.View as iOSGameView, new Selector(\"doTick\"));\n\n            // FrameInterval represents how many frames must pass before the selector\n            // is called again. We calculate this by dividing our target elapsed time by\n            // the duration of a frame on iOS (Which is 1/60.0f at the time of writing this).\n            _displayLink.FrameInterval = (int)Math.Round(60f * Game.TargetElapsedTime.TotalSeconds);\n\n            _displayLink.AddToRunLoop(NSRunLoop.Main, NSRunLoopMode.Default);\n        }\n\n        protected override void Run()\n        {\n            this.CallInitialize();\n            this.CallBeginRun();\n            // XNA runs one Update even before showing the window\n            this.CallUpdate(new GameTime());\n\n            StartGameLoop();\n            return;\n\n            //this.CallEndRun();\n            //this.DoExiting();\n        }\n\n        private void StartGameLoop()\n        {\n            // Show the window\n            _gameWindow.UIWindow.MakeKeyAndVisible();\n\n            // In iOS 8+ we need to set the root view controller *after* Window MakeKey\n            // This ensures that the viewController's supported interface orientations\n            // will be respected at launch\n            _gameWindow.UIWindow.RootViewController = _gameWindow.ViewController;\n\n            _gameWindow.BeginObservingUIApplication();\n            BeginObservingUIApplicationExit();\n\n            _gameWindow.ViewController.View.BecomeFirstResponder();\n            CreateDisplayLink();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (Window != null)\n            {\n                if (TouchPanel.WindowHandle == Window.Handle)\n                    TouchPanel.WindowHandle = IntPtr.Zero;\n            }\n            \n            base.Dispose(disposing);\n\n            if (disposing)\n            {\n                if (_gameWindow != null)\n                {\n                    _gameWindow.Dispose();\n                }\n            }\n            \n        }\n\n        internal void iOSTick()\n        {\n            if (!Game.IsActive)\n                return;\n\n            // FIXME: Remove this call, and the whole Tick method, once\n            //        GraphicsDevice is where platform-specific Present\n            //        functionality is actually implemented.  At that\n            //        point, it should be possible to pass Game.Tick\n            //        directly to NSTimer.CreateRepeatingTimer.\n            _gameWindow.ViewController.View.MakeCurrent();\n            Game.Tick();\n\n            GraphicsDeviceManager gdm = this.GraphicsDeviceManager;\n            {\n                if (gdm.GraphicsDevice != null)\n                    gdm.GraphicsDevice.Present();\n            }\n\n            _gameWindow.ViewController.View.Present();\n        }\n\n        public override void Exit()\n        {\n            throw new PlatformNotSupportedException(\"iOS platform does not allow programmatically closing.\");\n        }\n\n        public override void TickExiting()\n        {\n            // iOS games do not \"exit\" or shut down.\n            throw new PlatformNotSupportedException();\n        }\n\n        private void BeginObservingUIApplicationExit()\n        {\n            WillTerminateHolder = NSNotificationCenter.DefaultCenter.AddObserver(\n                    UIApplication.WillTerminateNotification,\n                    new Action<NSNotification>(Application_WillTerminate));\n        }\n\n        #region Notification Handling\n\n        private void Application_WillTerminate(NSNotification notification)\n        {\n            // FIXME: Cleanly end the run loop.\n            if (Game != null)\n            {\n                // TODO MonoGameGame.Terminate();\n            }\n        }\n\n        #endregion Notification Handling\n\n        #region Helper Property\n\n        private DisplayOrientation CurrentOrientation\n        {\n            get\n            {\n                #if TVOS\n                return DisplayOrientation.LandscapeLeft;\n                #else\n                return OrientationConverter.ToDisplayOrientation(_gameWindow.ViewController.InterfaceOrientation);\n                #endif\n            }\n        }\n\n        #endregion\n\n        private void ViewController_InterfaceOrientationChanged(object sender, EventArgs e)\n        {\n            var orientation = CurrentOrientation;\n\n            // FIXME: The presentation parameters for the GraphicsDevice should\n            //            be managed by the GraphicsDevice itself.  Not by ConcreteGame.\n            var gdm = (GraphicsDeviceManager)Game.Services.GetService(typeof(IGraphicsDeviceManager));\n\n            TouchPanel.DisplayOrientation = orientation;\n\n            if (gdm != null)\n            {\n                PresentationParameters presentParams = gdm.GraphicsDevice.PresentationParameters;\n                presentParams.BackBufferWidth  = gdm.PreferredBackBufferWidth;\n                presentParams.BackBufferHeight = gdm.PreferredBackBufferHeight;\n\n                presentParams.DisplayOrientation = orientation;\n\n                // Recalculate our views.\n                _gameWindow.ViewController.View.LayoutSubviews();\n                \n                gdm.ApplyChanges();\n            }\n            \n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.iOS/ConcreteGameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform\n{\n    public sealed class ConcreteGameFactory : GameFactory\n    {\n\n        public override GameStrategy CreateGameStrategy(Game game)\n        {\n            return new ConcreteGame(game);\n        }\n\n        public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game)\n        {\n            return new ConcreteGraphicsDeviceManager(game);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Game/.iOS/ConcreteGraphicsDeviceManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace Microsoft.Xna.Platform\n{\n    internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy\n    {\n        public ConcreteGraphicsDeviceManager(Game game) : base(game)\n        {\n            var clientBounds = base.Game.Window.ClientBounds;\n            // Preferred buffer width/height is used to determine default supported orientations,\n            // so set the default values to match Xna behaviour of landscape only by default.\n            // Note also that it's using the device window dimensions.\n            base.PreferredBackBufferWidth = Math.Max(clientBounds.Width, clientBounds.Height);\n            base.PreferredBackBufferHeight = Math.Min(clientBounds.Height, clientBounds.Width);\n\n        }\n\n        public override bool PreferHalfPixelOffset\n        {\n            get { return base.PreferHalfPixelOffset; }\n            set\n            {\n                //TODO: move the check in ApplyChanges\n                if (base.GraphicsDevice != null)\n                    throw new InvalidOperationException(\"Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice.\");\n\n                base.PreferHalfPixelOffset = value;\n            }\n        }\n\n        public override bool IsFullScreen\n        {\n            get\n            {\n                if (base.GraphicsDevice != null)\n                    return base.GraphicsDevice.PresentationParameters.IsFullScreen;\n\n                return base.IsFullScreen;\n            }\n            set\n            {\n                base.IsFullScreen = value;\n\n                if (base.GraphicsDevice != null)\n                {\n                    base.GraphicsDevice.PresentationParameters.IsFullScreen = value;\n                    UIKit.UIApplication.SharedApplication.StatusBarHidden = base.GraphicsDevice.PresentationParameters.IsFullScreen;\n                }\n            }\n        }\n\n        public override DisplayOrientation SupportedOrientations\n        {\n            get { return base.SupportedOrientations; }\n            set\n            {\n                base.SupportedOrientations = value;\n\n                if (base.Game.Window != null)\n                    ((iOSGameWindow)base.Game.Window).ViewController.SupportedOrientations = value;\n            }\n        }\n\n        public override void ToggleFullScreen()\n        {\n            this.IsFullScreen = !this.IsFullScreen;\n            //ApplyChanges();\n        }\n\n        public override void CreateDevice()\n        {\n            PresentationParameters pp = new PresentationParameters();\n            pp.DepthStencilFormat = DepthFormat.Depth24;\n\n            {\n                // Mainscreen.Bounds does not account for the device's orientation. it ALWAYS assumes portrait\n                int width = (int)(UIKit.UIScreen.MainScreen.Bounds.Width * UIKit.UIScreen.MainScreen.Scale);\n                int height = (int)(UIKit.UIScreen.MainScreen.Bounds.Height * UIKit.UIScreen.MainScreen.Scale);\n\n                // Flip the dimensions if we need to.\n                if (TouchPanel.DisplayOrientation == DisplayOrientation.LandscapeLeft\n                ||  TouchPanel.DisplayOrientation == DisplayOrientation.LandscapeRight)\n                {\n                    width = height;\n                    height = (int)(UIKit.UIScreen.MainScreen.Bounds.Width * UIKit.UIScreen.MainScreen.Scale);\n                }\n\n                pp.BackBufferWidth = width;\n                pp.BackBufferHeight = height;\n            }\n\n            // force \"full screen\" as default on iOS\n            pp.IsFullScreen = true;\n            UIKit.UIApplication.SharedApplication.StatusBarHidden = pp.IsFullScreen;\n\n            GraphicsDeviceInformation gdi = new GraphicsDeviceInformation();\n            gdi.GraphicsProfile = this.GraphicsProfile; // Microsoft defaults this to Reach.\n            gdi.Adapter = GraphicsAdapter.DefaultAdapter;\n            gdi.PresentationParameters = pp;\n            var pe = new PreparingDeviceSettingsEventArgs(gdi);\n\n            this.OnPreparingDeviceSettings(pe);\n\n            pp = gdi.PresentationParameters;\n            this.GraphicsProfile = gdi.GraphicsProfile;\n\n            this.GraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile, this.PreferHalfPixelOffset, pp);\n\n            // ApplyChanges\n            {\n                base.GraphicsDevice.PresentationParameters.DisplayOrientation = base.Game.Window.CurrentOrientation;\n\n                bool isLandscape = ((base.Game.Window.CurrentOrientation & (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight)) != 0);\n                int w = PreferredBackBufferWidth;\n                int h = PreferredBackBufferHeight;\n\n                base.GraphicsDevice.PresentationParameters.BackBufferWidth = isLandscape ? Math.Max(w, h) : Math.Min(w, h);\n                base.GraphicsDevice.PresentationParameters.BackBufferHeight = isLandscape ? Math.Min(w, h) : Math.Max(w, h);\n            }\n\n            // TODO: In XNA this seems to be done as part of the GraphicsDevice.DeviceReset event...\n            //       we need to get those working.\n            TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth;\n            TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight;\n            TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation;\n\n            this.OnDeviceCreated(EventArgs.Empty);\n\n            ((iOSGameWindow)Game.Window).ViewController.View.LayoutSubviews();\n\n            PresentationParameters pp3 = this.GraphicsDevice.PresentationParameters;\n            this.GraphicsDevice.Viewport = new Viewport(0, 0, pp3.BackBufferWidth, pp3.BackBufferHeight);\n        }\n\n        public override void ApplyChanges()\n        {\n            if (base.GraphicsDevice == null)\n            {\n                // TODO: Calling ApplyChanges() before Game.Initialize() should create the device.\n                System.Diagnostics.Debug.Assert(false);\n                //this.CreateDevice();\n                return;\n            }\n\n            base.GraphicsDevice.PresentationParameters.DisplayOrientation = base.Game.Window.CurrentOrientation;\n\n            bool isLandscape = ((base.Game.Window.CurrentOrientation & (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight)) != 0);\n            int w = PreferredBackBufferWidth;\n            int h = PreferredBackBufferHeight;\n\n            base.GraphicsDevice.PresentationParameters.BackBufferWidth = isLandscape ? Math.Max(w, h) : Math.Min(w, h);\n            base.GraphicsDevice.PresentationParameters.BackBufferHeight = isLandscape ? Math.Min(w, h) : Math.Max(w, h);\n\n            // TODO: In XNA this seems to be done as part of the GraphicsDevice.DeviceReset event...\n            //       we need to get those working.\n            TouchPanel.DisplayWidth = base.GraphicsDevice.PresentationParameters.BackBufferWidth;\n            TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight;\n        }\n\n\n        #region IGraphicsDeviceManager strategy\n\n        public override bool BeginDraw()\n        {\n            //return base.BeginDraw();\n\n            return true;\n        }\n\n        public override void EndDraw()\n        {\n            //base.EndDraw();\n\n        }\n\n        #endregion IGraphicsDeviceManager strategy\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.iOS/IPlatformBackButton.tvOS.cs",
    "content": "using System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Allows for platform specific handling of the Back button. \n    /// </summary>\n    public interface IPlatformBackButton\n    {\n        /// <summary>\n        /// Return true if your game has handled the back button event\n        /// return false if you want the operating system to handle it.\n        /// </summary>\n        bool Handled();\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.iOS/OrientationConverter.cs",
    "content": "#region License\n/*\nMicrosoft Public License (Ms-PL)\nMonoGame - Copyright © 2009-2011 The MonoGame Team\n\nAll rights reserved.\n\nThis license governs use of the accompanying software. If you use the software,\nyou accept this license. If you do not accept the license, do not use the\nsoftware.\n\n1. Definitions\n\nThe terms \"reproduce,\" \"reproduction,\" \"derivative works,\" and \"distribution\"\nhave the same meaning here as under U.S. copyright law.\n\nA \"contribution\" is the original software, or any additions or changes to the\nsoftware.\n\nA \"contributor\" is any person that distributes its contribution under this\nlicense.\n\n\"Licensed patents\" are a contributor's patent claims that read directly on its\ncontribution.\n\n2. Grant of Rights\n\n(A) Copyright Grant- Subject to the terms of this license, including the\nlicense conditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free copyright license to reproduce its\ncontribution, prepare derivative works of its contribution, and distribute its\ncontribution or any derivative works that you create.\n\n(B) Patent Grant- Subject to the terms of this license, including the license\nconditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free license under its licensed patents to\nmake, have made, use, sell, offer for sale, import, and/or otherwise dispose of\nits contribution in the software or derivative works of the contribution in the\nsoftware.\n\n3. Conditions and Limitations\n\n(A) No Trademark License- This license does not grant you rights to use any\ncontributors' name, logo, or trademarks.\n\n(B) If you bring a patent claim against any contributor over patents that you\nclaim are infringed by the software, your patent license from such contributor\nto the software ends automatically.\n\n(C) If you distribute any portion of the software, you must retain all\ncopyright, patent, trademark, and attribution notices that are present in the\nsoftware.\n\n(D) If you distribute any portion of the software in source code form, you may\ndo so only under this license by including a complete copy of this license with\nyour distribution. If you distribute any portion of the software in compiled or\nobject code form, you may only do so under a license that complies with this\nlicense.\n\n(E) The software is licensed \"as-is.\" You bear the risk of using it. The\ncontributors give no express warranties, guarantees or conditions. You may have\nadditional consumer rights under your local laws which this license cannot\nchange. To the extent permitted under your local laws, the contributors exclude\nthe implied warranties of merchantability, fitness for a particular purpose and\nnon-infringement.\n*/\n#endregion\n\nusing System;\nusing UIKit;\n\nnamespace Microsoft.Xna.Framework\n{\n    public static class OrientationConverter\n    {\n        [CLSCompliant(false)]\n        public static DisplayOrientation UIDeviceOrientationToDisplayOrientation(UIDeviceOrientation orientation)\n        {\n            switch (orientation)\n            {\n            case UIDeviceOrientation.FaceDown: return DisplayOrientation.Unknown;\n            case UIDeviceOrientation.FaceUp: return DisplayOrientation.Unknown;\n            default:\n            // NOTE: in XNA, Orientation Left is a 90 degree rotation counterclockwise, while on iOS\n            // it is a 90 degree rotation CLOCKWISE. They are BACKWARDS! \n            case UIDeviceOrientation.LandscapeLeft: return DisplayOrientation.LandscapeRight;\n            case UIDeviceOrientation.LandscapeRight: return DisplayOrientation.LandscapeLeft;\n            case UIDeviceOrientation.Portrait: return DisplayOrientation.Portrait;\n            case UIDeviceOrientation.PortraitUpsideDown: return DisplayOrientation.PortraitDown;\n            }\n        }\n\n        [CLSCompliant(false)]\n        public static DisplayOrientation ToDisplayOrientation(UIInterfaceOrientation orientation)\n        {\n            switch (orientation)\n            {\n            default:\n            // NOTE: in XNA, Orientation Left is a 90 degree rotation counterclockwise, while on iOS\n            // it is a 90 degree rotation CLOCKWISE. They are BACKWARDS! \n            case UIInterfaceOrientation.LandscapeLeft: return DisplayOrientation.LandscapeRight;\n            case UIInterfaceOrientation.LandscapeRight: return DisplayOrientation.LandscapeLeft;\n            case UIInterfaceOrientation.Portrait: return DisplayOrientation.Portrait;\n            case UIInterfaceOrientation.PortraitUpsideDown: return DisplayOrientation.PortraitDown;\n            }\n        }\n\n        [CLSCompliant(false)]\n        public static UIInterfaceOrientationMask ToUIInterfaceOrientationMask(DisplayOrientation orientation)\n        {\n            switch (Normalize(orientation))\n            {\n                case((DisplayOrientation)0):\n                case((DisplayOrientation)3):\n                    return UIInterfaceOrientationMask.Landscape;\n                // NOTE: in XNA, Orientation Left is a 90 degree rotation counterclockwise, while on iOS\n        // it is a 90 degree rotation CLOCKWISE. They are BACKWARDS! \n                case((DisplayOrientation)2):\n                    return UIInterfaceOrientationMask.LandscapeLeft;\n                case((DisplayOrientation)1):\n                    return UIInterfaceOrientationMask.LandscapeRight;\n                case((DisplayOrientation)4):\n                    return UIInterfaceOrientationMask.Portrait;\n                case((DisplayOrientation)8):\n                    return UIInterfaceOrientationMask.PortraitUpsideDown;\n                case((DisplayOrientation)7):\n                    return UIInterfaceOrientationMask.AllButUpsideDown;\n                default:\n                    return UIInterfaceOrientationMask.All;\n            }\n        }\n\n        public static DisplayOrientation Normalize(DisplayOrientation orientation)\n        {\n            var normalized = orientation;\n            \n            // Xna's \"default\" displayorientation is Landscape Left/Right.\n            if (normalized == DisplayOrientation.Default)\n            {\n                normalized |= DisplayOrientation.LandscapeLeft;\n                normalized |= DisplayOrientation.LandscapeRight;\n                normalized &= ~DisplayOrientation.Default;\n            }\n            return normalized;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.iOS/iOSGameView.cs",
    "content": "﻿#region License\n/*\nMicrosoft Public License (Ms-PL)\nMonoGame - Copyright © 2009-2012 The MonoGame Team\n\nAll rights reserved.\n\nThis license governs use of the accompanying software. If you use the software,\nyou accept this license. If you do not accept the license, do not use the\nsoftware.\n\n1. Definitions\n\nThe terms \"reproduce,\" \"reproduction,\" \"derivative works,\" and \"distribution\"\nhave the same meaning here as under U.S. copyright law.\n\nA \"contribution\" is the original software, or any additions or changes to the\nsoftware.\n\nA \"contributor\" is any person that distributes its contribution under this\nlicense.\n\n\"Licensed patents\" are a contributor's patent claims that read directly on its\ncontribution.\n\n2. Grant of Rights\n\n(A) Copyright Grant- Subject to the terms of this license, including the\nlicense conditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free copyright license to reproduce its\ncontribution, prepare derivative works of its contribution, and distribute its\ncontribution or any derivative works that you create.\n\n(B) Patent Grant- Subject to the terms of this license, including the license\nconditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free license under its licensed patents to\nmake, have made, use, sell, offer for sale, import, and/or otherwise dispose of\nits contribution in the software or derivative works of the contribution in the\nsoftware.\n\n3. Conditions and Limitations\n\n(A) No Trademark License- This license does not grant you rights to use any\ncontributors' name, logo, or trademarks.\n\n(B) If you bring a patent claim against any contributor over patents that you\nclaim are infringed by the software, your patent license from such contributor\nto the software ends automatically.\n\n(C) If you distribute any portion of the software, you must retain all\ncopyright, patent, trademark, and attribution notices that are present in the\nsoftware.\n\n(D) If you distribute any portion of the software in source code form, you may\ndo so only under this license by including a complete copy of this license with\nyour distribution. If you distribute any portion of the software in compiled or\nobject code form, you may only do so under a license that complies with this\nlicense.\n\n(E) The software is licensed \"as-is.\" You bear the risk of using it. The\ncontributors give no express warranties, guarantees or conditions. You may have\nadditional consumer rights under your local laws which this license cannot\nchange. To the extent permitted under your local laws, the contributors exclude\nthe implied warranties of merchantability, fitness for a particular purpose and\nnon-infringement.\n*/\n\n\n#endregion License\n\nusing System;\nusing System.Drawing;\n\nusing CoreAnimation;\nusing Foundation;\nusing ObjCRuntime;\nusing OpenGLES;\nusing UIKit;\nusing CoreGraphics;\n\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework\n{\n\n    [Register(\"iOSGameView\")]\n    partial class iOSGameView : UIView\n    {\n        private readonly ConcreteGame _concreteGame;\n        private int _colorbuffer;\n        private int _depthbuffer;\n        private int _framebuffer;\n\n        #region Construction/Destruction\n        public iOSGameView(ConcreteGame concreteGame, CGRect frame) : base(frame)\n        {\n            if (concreteGame == null)\n                throw new ArgumentNullException(\"concreteGame\");\n\n            _concreteGame = concreteGame;\n\n            #if !TVOS\n            MultipleTouchEnabled = true;\n            #endif\n\n            Opaque = true;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_eaglContext != null)\n                {\n                    AssertNotDisposed();\n\n                    _eaglContext.Dispose();\n                    _eaglContext = null;\n                    _glapi = null;\n                }\n            }\n\n            base.Dispose(disposing);\n            _isDisposed = true;\n        }\n\n        #endregion Construction/Destruction\n\n        #region Properties\n\n        private bool _isDisposed;\n\n        public bool IsDisposed { get { return _isDisposed; } }\n\n        #endregion Properties\n\n        [Export(\"layerClass\")]\n        public static Class GetLayerClass()\n        {\n            return new Class(typeof(CAEAGLLayer));\n        }\n\n        public override bool CanBecomeFirstResponder\n        {\n            get { return true; }\n        }\n\n        private new CAEAGLLayer Layer\n        {\n            get { return base.Layer as CAEAGLLayer; }\n        }\n\n        //TODO: Move _eaglContext into an iOS-specific GraphicsContext\n        internal EAGLContext _eaglContext;\n        private OGL _glapi;\n\n        private void CreateGLContext()\n        {\n            AssertNotDisposed();\n\n            // RetainedBacking controls if the content of the colorbuffer should be preserved after being displayed\n            // This is the XNA equivalent to set PreserveContent when initializing the GraphicsDevice\n            // (should be false by default for better performance)\n            Layer.DrawableProperties = NSDictionary.FromObjectsAndKeys(\n                new NSObject[]\n                {\n                    NSNumber.FromBoolean(false),\n                    EAGLColorFormat.RGBA8\n                },\n                new NSObject[]\n                {\n                    EAGLDrawableProperty.RetainedBacking,\n                    EAGLDrawableProperty.ColorFormat\n                });\n\n            Layer.ContentsScale = Window.Screen.Scale;\n\n            //var strVersion = OpenTK.Graphics.ES11.GL.GetString(OpenTK.Graphics.ES11.All.Version);\n            //strVersion = OpenTK.Graphics.ES20.GL.GetString(OpenTK.Graphics.ES20.All.Version);\n            //var version = Version.Parse(strVersion);\n\n            try \n            {\n                try\n                {\n                    _eaglContext = new EAGLContext(EAGLRenderingAPI.OpenGLES3);\n                }\n                catch\n                {\n                    // Fall back to GLES 2.0\n                    _eaglContext = new EAGLContext(EAGLRenderingAPI.OpenGLES2);\n                }\n                //new GraphicsContext(null, null, 2, 0, GraphicsContextFlags.Embedded)\n            } \n            catch (Exception ex)\n            {\n                throw new Exception(\"Device not Supported. GLES 2.0 or above is required!\");\n            }\n\n            this.MakeCurrent();\n\n            OGL_IOS.Initialize();\n            OGL_IOS.Current.InitExtensions();\n            _glapi = OGL.Current;\n        }\n\n        [Export(\"doTick\")]\n        void DoTick()\n        {\n            _concreteGame.iOSTick();\n        }\n\n        private void CreateFramebuffer()\n        {\n            this.MakeCurrent();\n            \n            var GL = OGL.Current;\n\n            // HACK:  GraphicsDevice itself should be calling\n            //        glViewport, so we shouldn't need to do it\n            //        here and then force the state into\n            //        GraphicsDevice.  However, that change is a\n            //        ways off, yet.\n            int viewportHeight = (int)Math.Round(Layer.Bounds.Size.Height * Layer.ContentsScale);\n            int viewportWidth = (int)Math.Round(Layer.Bounds.Size.Width * Layer.ContentsScale);\n\n            _framebuffer = _glapi.GenFramebuffer();\n            _glapi.BindFramebuffer(FramebufferTarget.Framebuffer, _framebuffer);\n\n            // Create our Depth buffer. Color buffer must be the last one bound\n            GraphicsDeviceManager gdm = _concreteGame.Services.GetService(typeof(IGraphicsDeviceManager)) as GraphicsDeviceManager;\n            if (gdm != null)\n            {\n                DepthFormat preferredDepthFormat = gdm.PreferredDepthStencilFormat;\n                if (preferredDepthFormat != DepthFormat.None)\n                {\n                    _depthbuffer = GL.GenRenderbuffer();\n                    GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, _depthbuffer);\n                    RenderbufferStorage internalFormat = RenderbufferStorage.DepthComponent16;\n                    if (preferredDepthFormat == DepthFormat.Depth24)\n                        internalFormat = RenderbufferStorage.DepthComponent24oes;\n                    else if (preferredDepthFormat == DepthFormat.Depth24Stencil8)\n                        internalFormat = RenderbufferStorage.Depth24Stencil8oes;\n                    GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, internalFormat, viewportWidth, viewportHeight);\n                    GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, RenderbufferTarget.Renderbuffer, _depthbuffer);\n                    if (preferredDepthFormat == DepthFormat.Depth24Stencil8)\n                        GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.StencilAttachment, RenderbufferTarget.Renderbuffer, _depthbuffer);\n                }\n            }\n\n            _colorbuffer = _glapi.GenRenderbuffer();\n            _glapi.BindRenderbuffer(RenderbufferTarget.Renderbuffer, _colorbuffer);\n\n            // TODO: EAGLContext.RenderBufferStorage returns false\n            //       on all but the first call.  Nevertheless, it\n            //       works.  Still, it would be nice to know why it\n            //       claims to have failed.\n            _eaglContext.RenderBufferStorage((uint)RenderbufferTarget.Renderbuffer, Layer);\n            \n            _glapi.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, RenderbufferTarget.Renderbuffer, _colorbuffer);\n\n            FramebufferErrorCode status = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer);\n            if (status != FramebufferErrorCode.FramebufferComplete)\n                throw new InvalidOperationException(\"Framebuffer was not created correctly: \" + status);\n\n            _glapi.Viewport(0, 0, viewportWidth, viewportHeight);\n            _glapi.Scissor(0, 0, viewportWidth, viewportHeight);\n\n            IGraphicsDeviceService gds = _concreteGame.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n            if (gds != null && gds.GraphicsDevice != null)\n            {\n                PresentationParameters pp = gds.GraphicsDevice.PresentationParameters;\n                int height = viewportHeight;\n                int width = viewportWidth;\n\n                if (this.NextResponder is iOSGameViewController)\n                {\n                    DisplayOrientation displayOrientation = _concreteGame.Game.Window.CurrentOrientation;\n                    if (displayOrientation == DisplayOrientation.LandscapeLeft || displayOrientation == DisplayOrientation.LandscapeRight)\n                    {\n                        height = Math.Min(viewportHeight, viewportWidth);\n                        width = Math.Max(viewportHeight, viewportWidth);\n                    }\n                    else\n                    {\n                        height = Math.Max(viewportHeight, viewportWidth);\n                        width = Math.Min(viewportHeight, viewportWidth);\n                    }\n                }\n\n                pp.BackBufferWidth = width;\n                pp.BackBufferHeight = height;\n\n                gds.GraphicsDevice.Viewport = new Viewport(0, 0, pp.BackBufferWidth, pp.BackBufferHeight);\n                \n                ((IPlatformGraphicsDevice)gds.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>()._glDefaultFramebuffer = _framebuffer;\n            }\n        }\n\n        private void DestroyFramebuffer()\n        {\n            AssertNotDisposed();\n            AssertValidContext();\n\n            if (!EAGLContext.SetCurrentContext(_eaglContext))\n                throw new InvalidOperationException(\"Unable to change current EAGLContext.\");\n\n            _glapi.DeleteFramebuffer(_framebuffer);\n            _framebuffer = 0;\n\n            _glapi.DeleteRenderbuffer(_colorbuffer);\n            _colorbuffer = 0;\n            \n            if (_depthbuffer != 0)\n            {\n                _glapi.DeleteRenderbuffer(_depthbuffer);\n                _depthbuffer = 0;\n            }\n        }\n\n        private static readonly FramebufferAttachment[] attachements = new FramebufferAttachment[]\n        {\n            FramebufferAttachment.DepthAttachment, \n            FramebufferAttachment.StencilAttachment \n        };\n\n        // FIXME: This logic belongs in GraphicsDevice.Present, not\n        //        here.  If it can someday be moved there, then the\n        //        normal call to Present in Game.Tick should cover\n        //        this.  For now, ConcreteGame will call Present\n        //        in the Draw/Update loop handler.\n        public void Present()\n        {\n            var GL = OGL.Current;\n\n            AssertNotDisposed();\n            AssertValidContext();\n\n            this.MakeCurrent();\n            GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, this._colorbuffer);\n            GL.InvalidateFramebuffer(FramebufferTarget.Framebuffer, 2, attachements);\n\n            if (!_eaglContext.PresentRenderBuffer(36161u))\n                throw new InvalidOperationException(\"EAGLContext.PresentRenderbuffer failed.\");\n        }\n\n        // FIXME: This functionality belongs in GraphicsDevice.\n        public void MakeCurrent()\n        {\n            AssertNotDisposed();\n            AssertValidContext();\n\n            if (EAGLContext.CurrentContext != _eaglContext)\n            {\n                if (!EAGLContext.SetCurrentContext(_eaglContext))\n                    throw new InvalidOperationException(\"Unable to change current EAGLContext.\");\n            }\n        }\n\n        public override void LayoutSubviews()\n        {\n            base.LayoutSubviews();\n\n            IGraphicsDeviceService gds = _concreteGame.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n            if (gds != null && gds.GraphicsDevice != null)\n            {\n                if (_framebuffer != 0)\n                    DestroyFramebuffer();\n                if (_eaglContext == null)\n                    CreateGLContext();\n\n                CreateFramebuffer();\n            }\n        }\n\n        #region UIWindow Notifications\n\n        [Export(\"didMoveToWindow\")]\n        public virtual void DidMoveToWindow()\n        {\n            if (Window != null) \n            {\n                if (_eaglContext == null)\n                    CreateGLContext();\n                if (_framebuffer == 0)\n                    CreateFramebuffer();\n            }\n        }\n\n        #endregion UIWindow Notifications\n\n        private void AssertNotDisposed()\n        {\n            if (_isDisposed)\n                throw new ObjectDisposedException(GetType().Name);\n        }\n\n        private void AssertValidContext()\n        {\n            if (_eaglContext == null)\n                throw new InvalidOperationException(\"_eaglContext must be created for this operation to succeed.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.iOS/iOSGameViewController.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nusing UIKit;\nusing Foundation;\nusing CoreGraphics;\nusing ObjCRuntime;\nusing Microsoft.Xna.Framework;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    class iOSGameViewController : \n    #if TVOS\n        GameController.GCEventViewController\n    #else\n        UIViewController\n    #endif\n    {\n        ConcreteGame _concreteGame;\n        #if TVOS\n        IPlatformBackButton platformBackButton;\n        #endif\n\n        public iOSGameViewController(ConcreteGame concreteGame)\n        {\n            if (concreteGame == null)\n                throw new ArgumentNullException(\"concreteGame\");\n            _concreteGame = concreteGame;\n            SupportedOrientations = \n                DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight \n                | DisplayOrientation.Portrait | DisplayOrientation.PortraitDown;\n        }\n\n        public event EventHandler<EventArgs> InterfaceOrientationChanged;\n\n        public DisplayOrientation SupportedOrientations { get; set; }\n\n        public override void LoadView()\n        {\n            CGRect frame;\n            if (ParentViewController != null && ParentViewController.View != null)\n            {\n                frame = new CGRect(CGPoint.Empty, ParentViewController.View.Frame.Size);\n            }\n            else\n            {\n                UIScreen screen = UIScreen.MainScreen;\n\n                #if !TVOS\n                // iOS 7 and older reverses width/height in landscape mode when reporting resolution,\n                // iOS 8+ reports resolution correctly in all cases\n                if (InterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || InterfaceOrientation == UIInterfaceOrientation.LandscapeRight)\n                {\n                    frame = new CGRect(0, 0, (double)Math.Max(screen.Bounds.Width, screen.Bounds.Height), (double)Math.Min(screen.Bounds.Width, screen.Bounds.Height));\n                }\n                else\n                {\n                    frame = new CGRect(0, 0, screen.Bounds.Width, screen.Bounds.Height);\n                }\n                #else\n                frame = new CGRect(0, 0, screen.Bounds.Width, screen.Bounds.Height);\n                #endif\n            }\n\n            base.View = new iOSGameView(_concreteGame, frame);\n\n            // Need to set resize mask to ensure a view resize (which in iOS 8+ corresponds with a rotation) adjusts\n            // the view and underlying CALayer correctly\n            View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;\n            #if TVOS\n            ControllerUserInteractionEnabled = false;\n            #endif\n        }\n\n        public new iOSGameView View\n        {\n            get { return (iOSGameView)base.View; }\n        }\n        #if !TVOS\n\n        #region Autorotation for iOS 5 or older\n        public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation)\n        {\n            DisplayOrientation supportedOrientations = OrientationConverter.Normalize(SupportedOrientations);\n            var toOrientation = OrientationConverter.ToDisplayOrientation(toInterfaceOrientation);\n            return (toOrientation & supportedOrientations) == toOrientation;\n        }\n        #endregion\n\n        #region Autorotation for iOS 6 or newer\n        public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()\n        {\n            return OrientationConverter.ToUIInterfaceOrientationMask(this.SupportedOrientations);\n        }\n\n        public override bool ShouldAutorotate()\n        {\n            return true;\n        }\n        #endregion\n\n        public override void DidRotate(UIInterfaceOrientation fromInterfaceOrientation)\n        {\n            base.DidRotate(fromInterfaceOrientation);\n\n            var handler = InterfaceOrientationChanged;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        #region Hide statusbar for iOS 7 or newer\n        public override bool PrefersStatusBarHidden()\n        {\n            GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager;\n            return gdm.IsFullScreen;\n        }\n        #endregion\n\n\n        #region iOS 8 or newer\n\n        public override void ViewWillTransitionToSize(CGSize toSize, IUIViewControllerTransitionCoordinator coordinator)\n        {\n            CGSize oldSize = View.Bounds.Size;\n\n            if (oldSize != toSize)\n            {\n                UIInterfaceOrientation prevOrientation = InterfaceOrientation;\n\n                // In iOS 8+ DidRotate is no longer called after a rotation\n                // But we need to notify ConcreteGame to update back buffer so we explicitly call it \n\n                // We do this within the animateAlongside action, which at the point of calling\n                // will have the new InterfaceOrientation set\n                coordinator.AnimateAlongsideTransition((context) =>\n                    {\n                        DidRotate(prevOrientation);\n                    }, (context) => \n                    {\n                    });\n\n            }\n\n            base.ViewWillTransitionToSize(toSize, coordinator);\n        }\n\n        #endregion\n\n        #region iOS 11 or newer\n\n        /// <summary>\n        /// Defer system gestures on all screen edges in full screen mode.\n        /// </summary>\n        public override UIRectEdge PreferredScreenEdgesDeferringSystemGestures\n        {\n            get\n            {\n                GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager;\n                return gdm.IsFullScreen ? UIRectEdge.All : base.PreferredScreenEdgesDeferringSystemGestures;\n            }\n        }\n\n        #endregion\n\n#endif\n\n#if TVOS\n\n        public override UIView PreferredFocusedView\n        {\n            get\n            {\n                return this.View;\n            }\n        }\n\n        public override void PressesBegan(NSSet<UIPress> presses, UIPressesEvent evt)\n        {\n            if (presses.Count == 0)\n                return;\n            foreach (UIPress press in presses)\n            {\n                if (press.Type == UIPressType.Menu)\n                {\n                    if (platformBackButton == null)\n                        platformBackButton = _concreteGame.Services.GetService<IPlatformBackButton>();\n                    if (platformBackButton != null)\n                    {\n                        if (!platformBackButton.Handled())\n                        {\n                            ControllerUserInteractionEnabled = true;\n                        }\n                        else\n                        {\n                            Microsoft.Xna.Framework.Input.GamePad.MenuPressed = true;\n                        }\n                    }\n                    else\n                    {\n                        ControllerUserInteractionEnabled = true;\n                    }\n                }\n            }\n            if (ControllerUserInteractionEnabled)\n                base.PressesBegan(presses, evt);\n        }\n\n        public override void PressesEnded(NSSet<UIPress> presses, UIPressesEvent evt)\n        {\n            if (ControllerUserInteractionEnabled)\n                base.PressesEnded(presses, evt);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.iOS/iOSGameView_Touch.cs",
    "content": "﻿#region License\n/*\nMicrosoft Public License (Ms-PL)\nMonoGame - Copyright © 2009-2012 The MonoGame Team\n\nAll rights reserved.\n\nThis license governs use of the accompanying software. If you use the software,\nyou accept this license. If you do not accept the license, do not use the\nsoftware.\n\n1. Definitions\n\nThe terms \"reproduce,\" \"reproduction,\" \"derivative works,\" and \"distribution\"\nhave the same meaning here as under U.S. copyright law.\n\nA \"contribution\" is the original software, or any additions or changes to the\nsoftware.\n\nA \"contributor\" is any person that distributes its contribution under this\nlicense.\n\n\"Licensed patents\" are a contributor's patent claims that read directly on its\ncontribution.\n\n2. Grant of Rights\n\n(A) Copyright Grant- Subject to the terms of this license, including the\nlicense conditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free copyright license to reproduce its\ncontribution, prepare derivative works of its contribution, and distribute its\ncontribution or any derivative works that you create.\n\n(B) Patent Grant- Subject to the terms of this license, including the license\nconditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free license under its licensed patents to\nmake, have made, use, sell, offer for sale, import, and/or otherwise dispose of\nits contribution in the software or derivative works of the contribution in the\nsoftware.\n\n3. Conditions and Limitations\n\n(A) No Trademark License- This license does not grant you rights to use any\ncontributors' name, logo, or trademarks.\n\n(B) If you bring a patent claim against any contributor over patents that you\nclaim are infringed by the software, your patent license from such contributor\nto the software ends automatically.\n\n(C) If you distribute any portion of the software, you must retain all\ncopyright, patent, trademark, and attribution notices that are present in the\nsoftware.\n\n(D) If you distribute any portion of the software in source code form, you may\ndo so only under this license by including a complete copy of this license with\nyour distribution. If you distribute any portion of the software in compiled or\nobject code form, you may only do so under a license that complies with this\nlicense.\n\n(E) The software is licensed \"as-is.\" You bear the risk of using it. The\ncontributors give no express warranties, guarantees or conditions. You may have\nadditional consumer rights under your local laws which this license cannot\nchange. To the extent permitted under your local laws, the contributors exclude\nthe implied warranties of merchantability, fitness for a particular purpose and\nnon-infringement.\n*/\n#endregion License\n\nusing System;\nusing System.Collections.Generic;\nusing System.Drawing;\n\nusing Foundation;\nusing ObjCRuntime;\nusing UIKit;\n\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Framework\n{\n    partial class iOSGameView\n    {\n        \n        static GestureType EnabledGestures\n        {\n            get { return TouchPanel.EnabledGestures; }\n        }\n        \n        #region Touches\n\n        public override void TouchesBegan(NSSet touches, UIEvent evt)\n        {\n            base.TouchesBegan(touches, evt);\n            FillTouchCollection(touches);\n        }\n\n        public override void TouchesEnded(NSSet touches, UIEvent evt)\n        {\n            base.TouchesEnded(touches, evt);\n            FillTouchCollection(touches);\n        }\n\n        public override void TouchesMoved(NSSet touches, UIEvent evt)\n        {\n            base.TouchesMoved(touches, evt);\n            FillTouchCollection(touches);\n        }\n\n        public override void TouchesCancelled(NSSet touches, UIEvent evt)\n        {\n            base.TouchesCancelled(touches, evt);\n            FillTouchCollection(touches);\n        }\n        \n        // TODO: Review FillTouchCollection\n        private void FillTouchCollection(NSSet touches)\n        {\n            if ((long)touches.Count == 0)\n                return;\n\n            var touchesArray = touches.ToArray<UITouch>();\n            for (int i = 0; i < touchesArray.Length; ++i)\n            {\n                var touch = touchesArray [i];\n\n                //Get position touch\n                var location = touch.LocationInView(touch.View);\n                var position = GetOffsetPosition(new Vector2 ((float)location.X, (float)location.Y), true);\n                var id = (int)(long)(IntPtr)touch.Handle;\n\n                switch (touch.Phase) \n                {\n                    case UITouchPhase.Began:\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(id, position);\n                        break;\n                    //case UITouchPhase.Stationary:\n                    case UITouchPhase.Moved:\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(id, position);\t\t\t\t\t\n                        break;\n                    case UITouchPhase.Ended:\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(id, position);\n                        break;\n                    case UITouchPhase.Cancelled:\n                        ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddCanceledEvent(id, position);\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n        \n        // TODO: Review GetOffsetPosition, hopefully it can be removed now.\n        public Vector2 GetOffsetPosition(Vector2 position, bool useScale)\n        {\n            if (useScale)\n                return position * (float)Layer.ContentsScale;\n            return position;\n        }\n\n        #endregion Touches\n    }\n}\n"
  },
  {
    "path": "Platforms/Game/.iOS/iOSGameWindow.cs",
    "content": "#region License\n/*\nMicrosoft Public License (Ms-PL)\nMonoGame - Copyright © 2009-2012 The MonoGame Team\n\nAll rights reserved.\n\nThis license governs use of the accompanying software. If you use the software,\nyou accept this license. If you do not accept the license, do not use the\nsoftware.\n\n1. Definitions\n\nThe terms \"reproduce,\" \"reproduction,\" \"derivative works,\" and \"distribution\"\nhave the same meaning here as under U.S. copyright law.\n\nA \"contribution\" is the original software, or any additions or changes to the\nsoftware.\n\nA \"contributor\" is any person that distributes its contribution under this\nlicense.\n\n\"Licensed patents\" are a contributor's patent claims that read directly on its\ncontribution.\n\n2. Grant of Rights\n\n(A) Copyright Grant- Subject to the terms of this license, including the\nlicense conditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free copyright license to reproduce its\ncontribution, prepare derivative works of its contribution, and distribute its\ncontribution or any derivative works that you create.\n\n(B) Patent Grant- Subject to the terms of this license, including the license\nconditions and limitations in section 3, each contributor grants you a\nnon-exclusive, worldwide, royalty-free license under its licensed patents to\nmake, have made, use, sell, offer for sale, import, and/or otherwise dispose of\nits contribution in the software or derivative works of the contribution in the\nsoftware.\n\n3. Conditions and Limitations\n\n(A) No Trademark License- This license does not grant you rights to use any\ncontributors' name, logo, or trademarks.\n\n(B) If you bring a patent claim against any contributor over patents that you\nclaim are infringed by the software, your patent license from such contributor\nto the software ends automatically.\n\n(C) If you distribute any portion of the software, you must retain all\ncopyright, patent, trademark, and attribution notices that are present in the\nsoftware.\n\n(D) If you distribute any portion of the software in source code form, you may\ndo so only under this license by including a complete copy of this license with\nyour distribution. If you distribute any portion of the software in compiled or\nobject code form, you may only do so under a license that complies with this\nlicense.\n\n(E) The software is licensed \"as-is.\" You bear the risk of using it. The\ncontributors give no express warranties, guarantees or conditions. You may have\nadditional consumer rights under your local laws which this license cannot\nchange. To the extent permitted under your local laws, the contributors exclude\nthe implied warranties of merchantability, fitness for a particular purpose and\nnon-infringement.\n*/\n#endregion License\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform;\n\nusing Foundation;\nusing UIKit;\n\nnamespace Microsoft.Xna.Framework\n{\n    class iOSGameWindow : GameWindow, IDisposable\n    {\n        private static Dictionary<IntPtr, iOSGameWindow> _instances = new Dictionary<IntPtr, iOSGameWindow>();\n\n        internal static iOSGameWindow FromHandle(IntPtr windowHandle)\n        {\n            return _instances[windowHandle];\n        }\n\n        private iOSGameViewController _viewController;\n        private UIWindow _uiWindow;\n\n        internal iOSGameViewController ViewController { get { return _viewController; } }\n        internal UIWindow UIWindow { get { return _uiWindow; } }\n\n        private NSObject DidBecomeActiveHolder;\n        private NSObject WillResignActiveHolder;\n\n\n        public iOSGameWindow(ConcreteGame concreteGame)\n        {\n#if !TVOS\n            UIApplication.SharedApplication.SetStatusBarHidden(true, UIStatusBarAnimation.Fade);\n#endif\n\n            // Create a full-screen window\n            _uiWindow = new UIWindow(UIScreen.MainScreen.Bounds);\n            //_uiKitWindow.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions;\n            concreteGame.Services.AddService(typeof(UIWindow), _uiWindow);\n\n            _viewController = new iOSGameViewController(concreteGame);\n            concreteGame.Services.AddService(typeof(UIViewController), _viewController);\n\n            _viewController.InterfaceOrientationChanged += HandleInterfaceOrientationChanged;\n\n            _instances.Add(this.Handle, this);\n        }\n\n        ~iOSGameWindow()\n        {\n            Dispose(false);\n        }\n\n        void HandleInterfaceOrientationChanged(object sender, EventArgs e)\n        {\n            OnOrientationChanged();\n        }\n\n        #region GameWindow Members\n\n        public override bool AllowUserResizing\n        {\n            get { return false; }\n            set { /* Ignore */ }\n        }\n\n        public override Rectangle ClientBounds\n        {\n            get\n            {\n                var bounds = _viewController.View.Bounds;\n                var scale = _viewController.View.ContentScaleFactor;\n\n                // TODO: Calculate this only when dirty.\n                if (_viewController is iOSGameViewController)\n                {\n\n                    var currentOrientation = CurrentOrientation;\n\n                    int width;\n                    int height;\n\n                    if (currentOrientation == DisplayOrientation.LandscapeLeft || \n                        currentOrientation == DisplayOrientation.LandscapeRight)\n                    {\n                        width = (int)Math.Max(bounds.Width, bounds.Height);\n                        height = (int)Math.Min(bounds.Width, bounds.Height);\n\n                    }\n                    else\n                    {\n                        width = (int)Math.Min(bounds.Width, bounds.Height);\n                        height = (int)Math.Max(bounds.Width, bounds.Height);\n                    }\n\n                    width *= (int)scale;\n                    height *= (int)scale;\n\n                    return new Rectangle( (int)(bounds.X * scale), (int)(bounds.Y * scale), width, height);\n                }\n\n                return new Rectangle(\n                    (int)(bounds.X * scale), (int)(bounds.Y * scale),\n                    (int)(bounds.Width * scale), (int)(bounds.Height * scale));\n            }\n        }\n\n        public override DisplayOrientation CurrentOrientation\n        {\n            get\n            {\n                #if TVOS\n                return DisplayOrientation.LandscapeLeft;\n                #else\n                return OrientationConverter.ToDisplayOrientation(_viewController.InterfaceOrientation);\n                #endif\n            }\n        }\n\n        public override IntPtr Handle\n        {\n            get \n            {\n                // TODO: Verify that View.Handle is a sensible\n                //       value to return here.\n                return _viewController.View.Handle;\n            }\n        }\n\n        public override string ScreenDeviceName \n        {\n            get \n            {\n                var screen = _viewController.View.Window.Screen;\n                if (screen == UIScreen.MainScreen)\n                    return \"Main Display\";\n                else\n                    return \"External Display\";\n            }\n        }\n\n        protected override void SetTitle(string title)\n        {\n            _viewController.Title = title;\n        }\n\n        #endregion GameWindow Members\n\n\n        internal void BeginObservingUIApplication()\n        {\n            DidBecomeActiveHolder = NSNotificationCenter.DefaultCenter.AddObserver(\n                    UIApplication.DidBecomeActiveNotification,\n                    new Action<NSNotification>(Application_DidBecomeActive));\n            WillResignActiveHolder = NSNotificationCenter.DefaultCenter.AddObserver(\n                    UIApplication.WillResignActiveNotification,\n                    new Action<NSNotification>(Application_WillResignActive));\n        }\n\n\n        #region Notification Handling\n\n        private void Application_DidBecomeActive(NSNotification notification)\n        {\n            OnActivated();\n\n#if TVOS\n            _viewController.ControllerUserInteractionEnabled = false;\n#endif\n            //TouchPanel.Reset();\n        }\n\n        private void Application_WillResignActive(NSNotification notification)\n        {\n            OnDeactivated();\n        }\n\n        #endregion Notification Handling\n\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_viewController != null)\n                {\n                    _viewController.View.RemoveFromSuperview();\n                    _viewController.RemoveFromParentViewController();\n                    _viewController.Dispose();\n                    _viewController = null;\n                }\n\n                if (_uiWindow != null)\n                {\n                    _uiWindow.Dispose();\n                    _uiWindow = null;\n                }\n            }\n            \n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteGraphicsAdapter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas;\nusing nkast.Wasm.Canvas.WebGL;\nusing nkast.Wasm.Dom;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy\n    {\n        private DisplayModeCollection _supportedDisplayModes;\n        private DisplayMode _currentDisplayMode;\n        private string _description = string.Empty;\n\n        public override string Platform_DeviceName\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override string Platform_Description\n        {\n            get { return _description; }\n            set { _description = value; }\n        }\n\n        public override int Platform_DeviceId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_Revision\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_VendorId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_SubSystemId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override IntPtr Platform_MonitorHandle\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool Platform_IsDefaultAdapter\n        {\n            get { return base.Platform_IsDefaultAdapter; }\n            set { base.Platform_IsDefaultAdapter = value; }\n        }\n\n        public override DisplayModeCollection Platform_SupportedDisplayModes\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override DisplayMode Platform_CurrentDisplayMode\n        {\n            get { return _currentDisplayMode; }\n        }\n\n        public override bool Platform_IsWideScreen\n        {\n            // Common non-widescreen modes: 4:3, 5:4, 1:1\n            // Common widescreen modes: 16:9, 16:10, 2:1\n            // XNA does not appear to account for rotated displays on the desktop\n            get { return Platform_CurrentDisplayMode.AspectRatio > (4.0f / 3.0f); }\n        }\n\n        public override GraphicsBackend Backend\n        {\n            get { return GraphicsBackend.WebGL; }\n        }\n\n        public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend)\n        {\n            switch (shaderBackend)\n            {\n                case GraphicsBackend.GLES:\n                //case GraphicsBackend.WebGL:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile)\n        {\n            switch (shaderProfile)\n            {\n                case ShaderProfileType.OpenGL_Mojo:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        internal ConcreteGraphicsAdapter()\n        {\n            _currentDisplayMode = base.CreateDisplayMode(800, 600, SurfaceFormat.Color);\n        }\n\n        public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile)\n        {\n            if (GraphicsAdapter.UseReferenceDevice)\n                return true;\n\n            switch (graphicsProfile)\n            {\n                case GraphicsProfile.Reach:\n                    return true;\n                case GraphicsProfile.HiDef:\n                    using (OffscreenCanvas oc = new OffscreenCanvas(1, 1))\n                    {\n                        IWebGL2RenderingContext webgl2 = oc.GetContext<IWebGL2RenderingContext>();\n                        return (webgl2 != null);\n                    }\n                case GraphicsProfile.FL10_0:\n                    using (OffscreenCanvas oc = new OffscreenCanvas(1, 1))\n                    {\n                        IWebGL2RenderingContext webgl2 = oc.GetContext<IWebGL2RenderingContext>();\n                        if (webgl2 == null) return false;\n                        int maxTextureSize = webgl2.GetParameter(WebGL2PNameInteger.MAX_TEXTURE_SIZE);\n                        if (maxTextureSize < 8192) return false;\n                        return true;\n                    }\n                case GraphicsProfile.FL10_1:\n                    return false;\n                case GraphicsProfile.FL11_0:\n                    return false;\n                case GraphicsProfile.FL11_1:\n                    return false;\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        public override bool Platform_QueryBackBufferFormat(\n             GraphicsProfile graphicsProfile,\n             SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n             out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override bool Platform_QueryRenderTargetFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            selectedFormat = format;\n            selectedDepthFormat = depthFormat;\n            selectedMultiSampleCount = multiSampleCount;\n\n            // fallback for unsupported renderTarget surface formats.\n            if (selectedFormat == SurfaceFormat.Alpha8 ||\n                selectedFormat == SurfaceFormat.NormalizedByte2 ||\n                selectedFormat == SurfaceFormat.NormalizedByte4 ||\n                selectedFormat == SurfaceFormat.Dxt1 ||\n                selectedFormat == SurfaceFormat.Dxt3 ||\n                selectedFormat == SurfaceFormat.Dxt5 ||\n                selectedFormat == SurfaceFormat.Dxt1a ||\n                selectedFormat == SurfaceFormat.Dxt1SRgb ||\n                selectedFormat == SurfaceFormat.Dxt3SRgb ||\n                selectedFormat == SurfaceFormat.Dxt5SRgb)\n                selectedFormat = SurfaceFormat.Color;\n\n            // fallback for unsupported renderTarget surface formats on Reach profile.\n            if (graphicsProfile == GraphicsProfile.Reach)\n            {\n                if (selectedFormat == SurfaceFormat.HalfSingle ||\n                    selectedFormat == SurfaceFormat.HalfVector2 ||\n                    selectedFormat == SurfaceFormat.HalfVector4 ||\n                    selectedFormat == SurfaceFormat.HdrBlendable ||\n                    selectedFormat == SurfaceFormat.Rg32 ||\n                    selectedFormat == SurfaceFormat.Rgba1010102 ||\n                    selectedFormat == SurfaceFormat.Rgba64 ||\n                    selectedFormat == SurfaceFormat.Single ||\n                    selectedFormat == SurfaceFormat.Vector2 ||\n                    selectedFormat == SurfaceFormat.Vector4)\n                    selectedFormat = SurfaceFormat.Color;\n            }\n\n            return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteGraphicsAdaptersProvider.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy\n    {\n        private ReadOnlyCollection<GraphicsAdapter> _adapters;\n\n        public ConcreteGraphicsAdaptersProvider()\n        {\n            List<GraphicsAdapter> adapterList = CreateAdapterList();\n            _adapters = new ReadOnlyCollection<GraphicsAdapter>(adapterList);\n        }\n\n        private List<GraphicsAdapter> CreateAdapterList()\n        {\n            List<GraphicsAdapter> adapterList = new List<GraphicsAdapter>(1);\n\n            ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter();\n            GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy);\n\n            adapterList.Add(adapter);\n\n            // The first adapter is considered the default.\n            ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true;\n\n            return adapterList;\n        }\n\n        public override ReadOnlyCollection<GraphicsAdapter> Platform_Adapters\n        {\n            get { return _adapters; }\n        }\n\n        public override GraphicsAdapter Platform_DefaultAdapter\n        {\n            get { return _adapters[0]; }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteGraphicsCapabilities.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsCapabilities : GraphicsCapabilities\n    {\n        private int _maxDrawBuffers;\n\n        internal int MaxDrawBuffers { get { return _maxDrawBuffers; } }\n\n        internal void PlatformInitialize(ConcreteGraphicsContext cgraphicsContext, GraphicsDeviceStrategy deviceStrategy)\n        {\n            IWebGLRenderingContext GL = cgraphicsContext.GL;\n\n            GraphicsProfile profile = deviceStrategy.GraphicsProfile;\n\n            _maxTextureSize = 2048;\n            if (profile == GraphicsProfile.HiDef)\n                _maxTextureSize = 4096;\n            if (profile == GraphicsProfile.FL10_0)\n                _maxTextureSize = 8192;\n            if (profile == GraphicsProfile.FL10_1)\n                _maxTextureSize = 8192;\n            if (profile == GraphicsProfile.FL11_0)\n                _maxTextureSize = 16384;\n            if (profile == GraphicsProfile.FL11_1)\n                _maxTextureSize = 16384;\n\n            SupportsTextureFilterAnisotropic = false; // TODO: check for TEXTURE_MAX_ANISOTROPY_EXT\n\n            SupportsDepth24 = false;\n            SupportsPackedDepthStencil = false;\n            SupportsDepthNonLinear = false;\n            SupportsTextureMaxLevel = false;\n\n            // 16bit textures\n            SupportsBgra5551 = false;\n            SupportsBgra4444 = false;\n            SupportsAbgr5551 = true;\n            SupportsAbgr4444 = true;\n\n            // Texture compression\n            SupportsS3tc = GL.GetExtension(\"WEBGL_compressed_texture_s3tc\");\n            SupportsDxt1 = GL.GetExtension(\"WEBGL_compressed_texture_s3tc\");\n\n            SupportsSRgb = true;\n\n            SupportsTextureArrays = profile >= GraphicsProfile.HiDef;\n            //SupportsDepthClamp = profile >= GraphicsProfile.HiDef;\n            SupportsFloatTextures = (profile >= GraphicsProfile.HiDef)\n                ? GL.GetExtension(\"EXT_color_buffer_float\") \n                : false;\n            SupportsHalfFloatTextures = profile >= GraphicsProfile.HiDef;\n            SupportsNormalized = profile >= GraphicsProfile.HiDef;\n            \n            _maxTextureSlots = 8;\n            _maxVertexTextureSlots = 0;\n            // fix for bad GL drivers\n            int maxCombinedTextureImageUnits;\n            maxCombinedTextureImageUnits = 8;\n            _maxTextureSlots = Math.Min(_maxTextureSlots, maxCombinedTextureImageUnits);\n            _maxVertexTextureSlots = Math.Min(_maxVertexTextureSlots, maxCombinedTextureImageUnits);\n            // limit texture slots to Reach profile limit until we implement profile detection.\n            _maxTextureSlots = Math.Min(_maxTextureSlots, 16);\n            _maxVertexTextureSlots = Math.Min(_maxTextureSlots, 0); // disable vertex textures until we implement it in WebGL.\n\n            _maxVertexBufferSlots = (profile >= GraphicsProfile.FL10_1) ? 32 : 16;\n\n            SupportsInstancing = profile >= GraphicsProfile.HiDef;\n            //TNC: TODO: detect suport based on feture level\n            SupportsBaseIndexInstancing = false;\n            SupportsSeparateBlendStates = true;\n\n            MaxTextureAnisotropy = (profile == GraphicsProfile.Reach) ? 2 : 16;\n\n            if (profile >= GraphicsProfile.HiDef)\n                _maxDrawBuffers = 4;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteGraphicsContext.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsContext : GraphicsContextStrategy\n    {\n        private IWebGLRenderingContext _glContext;\n\n        private WebGL2DrawBufferAttachmentPoint[] _drawBuffers;\n\n        // Keeps track of last applied state to avoid redundant OpenGL calls\n        internal BlendState _lastBlendState = new BlendState();\n        internal bool _lastBlendEnable = false;\n        internal DepthStencilState _lastDepthStencilState = new DepthStencilState();\n        internal RasterizerState _lastRasterizerState = new RasterizerState();\n\n        internal ShaderProgram _shaderProgram = null;\n\n        private Vector4 _posFixup;\n\n        internal BufferBindingInfo[] _bufferBindingInfos;\n        private int _activeBufferBindingInfosCount;\n        internal bool[] _newEnabledVertexAttributes;\n        private readonly HashSet<int> _enabledVertexAttributesSet = new HashSet<int>();\n        private int _lastVertexAttribs; // 0 = dirty, 1 = last set by PlatformApplyVertexBuffers, 2 = last set by PlatformApplyUserVertexData\n\n        private DepthStencilState _clearDepthStencilState = new DepthStencilState { StencilEnable = true };\n\n        // FBO cache, we create 1 FBO per RenderTargetBinding combination\n        internal Dictionary<RenderTargetBinding[], WebGLFramebuffer> _glFramebuffers = new Dictionary<RenderTargetBinding[], WebGLFramebuffer>(new RenderTargetBindingArrayComparer());\n        // FBO cache used to resolve MSAA rendertargets, we create 1 FBO per RenderTargetBinding combination\n        internal Dictionary<RenderTargetBinding[], WebGLFramebuffer> _glResolveFramebuffers = new Dictionary<RenderTargetBinding[], WebGLFramebuffer>(new RenderTargetBindingArrayComparer());\n\n        internal bool FramebufferRequireFlippedY { get { return (base.RenderTargetCount > 0); } }\n\n        internal IWebGLRenderingContext GlContext { get { return _glContext; } }\n        internal IWebGLRenderingContext GL { get { return _glContext; } }\n\n        public override Viewport Viewport\n        {\n            get { return base.Viewport; }\n            set\n            {\n                base.Viewport = value;\n                PlatformApplyViewport();\n            }\n        }\n\n        internal ConcreteGraphicsContext(GraphicsContext context, IWebGLRenderingContext glContext)\n            : base(context)\n        {\n            _glContext = glContext;\n            //_glContext = new LogContent(_glContext);\n\n            base._capabilities = new ConcreteGraphicsCapabilities();\n            ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize(\n                this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy\n                );\n\n            base.Initialize(this.Capabilities);\n\n            this.PlatformSetup();\n        }\n\n        public override void PlatformSetup()\n        {\n\n            this._newEnabledVertexAttributes = new bool[base.Capabilities.MaxVertexBufferSlots];\n\n            this._bufferBindingInfos = new BufferBindingInfo[base.Capabilities.MaxVertexBufferSlots];\n            for (int i = 0; i < this._bufferBindingInfos.Length; i++)\n                this._bufferBindingInfos[i] = new BufferBindingInfo(null, null, IntPtr.Zero, 0);\n\n            // Force resetting states\n            ((IPlatformBlendState)base._actualBlendState).GetStrategy<ConcreteBlendState>().PlatformApplyState(this, true);\n            ((IPlatformDepthStencilState)base._actualDepthStencilState).GetStrategy<ConcreteDepthStencilState>().PlatformApplyState(this, true);\n            ((IPlatformRasterizerState)base._actualRasterizerState).GetStrategy<ConcreteRasterizerState>().PlatformApplyState(this, true);\n\n\n            // Initialize draw buffer attachment array\n            this._drawBuffers = new WebGL2DrawBufferAttachmentPoint[((ConcreteGraphicsCapabilities)base.Capabilities).MaxDrawBuffers];\n            for (int i = 0; i < this._drawBuffers.Length; i++)\n                this._drawBuffers[i] = (WebGL2DrawBufferAttachmentPoint)(WebGL2DrawBufferAttachmentPoint.COLOR_ATTACHMENT0 + i);\n        }\n\n        public override void Clear(ClearOptions options, Vector4 color, float depth, int stencil)\n        {\n            // TODO: We need to figure out how to detect if we have a\n            // depth stencil buffer or not, and clear options relating\n            // to them if not attached.\n\n            // Unlike with XNA and DirectX...  GL.Clear() obeys several\n            // different render states:\n            //\n            //  - The color write flags.\n            //  - The scissor rectangle.\n            //  - The depth/stencil state.\n            //\n            // So overwrite these states with what is needed to perform\n            // the clear correctly and restore it afterwards.\n            //\n            DepthStencilState prevDepthStencilState = this.DepthStencilState;\n            BlendState prevBlendState = this.BlendState;\n            // DepthStencilState.Default has the Stencil Test disabled; \n            // make sure stencil test is enabled before we clear since\n            // some drivers won't clear with stencil test disabled\n            this.DepthStencilState = _clearDepthStencilState;\n            this.BlendState = BlendState.Opaque;\n            PlatformApplyState();\n\n            if (_lastRasterizerState.ScissorTestEnable)\n            {\n                GL.Disable(WebGLCapability.SCISSOR_TEST);\n                GL.CheckGLError();\n                _lastRasterizerState.ScissorTestEnable = false;\n                _rasterizerStateDirty = true;\n            }\n\n            WebGLBufferBits bb = default(WebGLBufferBits);\n            if ((options & ClearOptions.Target) != 0)\n            {\n                GL.ClearColor(color.X, color.Y, color.Z, color.W);\n                GL.CheckGLError();\n                bb |= WebGLBufferBits.COLOR;\n            }\n            if ((options & ClearOptions.DepthBuffer) != 0)\n            {\n                GL.ClearDepth(depth);\n                GL.CheckGLError();\n                bb |= WebGLBufferBits.DEPTH;\n            }\n            if ((options & ClearOptions.Stencil) != 0)\n            {\n                GL.ClearStencil(stencil);\n                GL.CheckGLError();\n                bb |= WebGLBufferBits.STENCIL;\n            }\n\n            GL.Clear(bb);\n            GL.CheckGLError();\n\n            base.Metrics_AddClearCount();\n\n            // Restore the previous render state.\n            DepthStencilState = prevDepthStencilState;\n            BlendState = prevBlendState;\n        }\n\n        private void PlatformApplyState()\n        {\n            //this.EnsureContextCurrentThread();\n\n            {\n                PlatformApplyBlend();\n            }\n\n            if (_depthStencilStateDirty)\n            {\n                ((IPlatformDepthStencilState)_actualDepthStencilState).GetStrategy<ConcreteDepthStencilState>().PlatformApplyState(this);\n                _depthStencilStateDirty = false;\n            }\n\n            if (_rasterizerStateDirty)\n            {\n                ((IPlatformRasterizerState)_actualRasterizerState).GetStrategy<ConcreteRasterizerState>().PlatformApplyState(this);\n                _rasterizerStateDirty = false;\n            }\n\n            if (_scissorRectangleDirty)\n            {\n                PlatformApplyScissorRectangle();\n                _scissorRectangleDirty = false;\n            }\n        }\n\n        private void PlatformApplyBlend()\n        {\n            if (_blendStateDirty)\n            {\n                ((IPlatformBlendState)_actualBlendState).GetStrategy<ConcreteBlendState>().PlatformApplyState(this);\n                _blendStateDirty = false;\n            }\n\n            if (_blendFactorDirty)\n            {\n                GL.BlendColor(\n                    this.BlendFactor.R / 255.0f,\n                    this.BlendFactor.G / 255.0f,\n                    this.BlendFactor.B / 255.0f,\n                    this.BlendFactor.A / 255.0f);\n                GL.CheckGLError();\n                _blendFactorDirty = false;\n            }\n        }\n\n        private void PlatformApplyScissorRectangle()\n        {\n            if (this.FramebufferRequireFlippedY)\n            {\n                GL.Scissor(_scissorRectangle.X, _scissorRectangle.Y, _scissorRectangle.Width, _scissorRectangle.Height);\n                GL.CheckGLError();\n            }\n            else if (this.IsRenderTargetBound)\n            {\n                int backBufferHeight = ((IRenderTarget)CurrentRenderTargetBindings[0].RenderTarget).Height;\n                GL.Scissor(_scissorRectangle.X, backBufferHeight - (_scissorRectangle.Y + _scissorRectangle.Height), _scissorRectangle.Width, _scissorRectangle.Height);\n                GL.CheckGLError();\n            }\n            else\n            {\n                int backBufferHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight;\n                GL.Scissor(_scissorRectangle.X, backBufferHeight - (_scissorRectangle.Y + _scissorRectangle.Height), _scissorRectangle.Width, _scissorRectangle.Height);\n                GL.CheckGLError();\n            }\n\n        }\n\n        internal void PlatformApplyViewport()\n        {\n            if (this.FramebufferRequireFlippedY)\n            {\n                GL.Viewport(_viewport.X, _viewport.Y, _viewport.Width, _viewport.Height);\n                GL.CheckGLError(); // GL.LogGLError(\"GraphicsDevice.Viewport_set() GL.Viewport\");\n            }\n            else if (this.IsRenderTargetBound)\n            {\n                int backBufferHeight = ((IRenderTarget)CurrentRenderTargetBindings[0].RenderTarget).Height;\n                GL.Viewport(_viewport.X, backBufferHeight - (_viewport.Y + _viewport.Height), _viewport.Width, _viewport.Height);\n                GL.CheckGLError(); // GL.LogGLError(\"GraphicsDevice.Viewport_set() GL.Viewport\");\n            }\n            else\n            {\n                int backBufferHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight;\n                GL.Viewport(_viewport.X, backBufferHeight - (_viewport.Y + _viewport.Height), _viewport.Width, _viewport.Height);\n                GL.CheckGLError(); // GL.LogGLError(\"GraphicsDevice.Viewport_set() GL.Viewport\");\n            }\n\n            GL.DepthRange(_viewport.MinDepth, _viewport.MaxDepth);\n            //GL.CheckGLError(); // GL.LogGLError(\"GraphicsDevice.Viewport_set() GL.DepthRange\");\n\n            // In OpenGL we have to re-apply the special \"_posFixup\"\n            // vertex shader uniform if the viewport changes.\n            _vertexShaderDirty = true;\n        }\n\n        private void PlatformApplyIndexBuffer()\n        {\n            if (_indexBufferDirty)\n            {\n                GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().GLIndexBuffer);\n                GL.CheckGLError();\n                _indexBufferDirty = false;\n            }\n        }\n\n        private void PlatformApplyShaders()\n        {\n            ConcreteVertexShader cvertexShader = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete<ConcreteVertexShader>();\n            ConcretePixelShader  cpixelShader  = ((IPlatformShader)this.PixelShader).Strategy.ToConcrete<ConcretePixelShader>();\n\n            if (_vertexShaderDirty || _pixelShaderDirty)\n            {\n                ActivateShaderProgram(cvertexShader, cpixelShader);\n                ApplyPosFixup(_shaderProgram);\n\n                if (_vertexShaderDirty)\n                {\n                    base.Metrics_AddVertexShaderCount();\n                }\n\n                if (_pixelShaderDirty)\n                {\n                    base.Metrics_AddPixelShaderCount();\n                }\n\n                _vertexShaderDirty = false;\n                _pixelShaderDirty = false;\n            }\n\n\n            // Apply Constant Buffers\n            PlatformApplyConstantBuffers(cvertexShader, _shaderProgram,\n                ((IPlatformConstantBufferCollection)_vertexConstantBuffers).Strategy.ToConcrete<ConcreteConstantBufferCollection>());\n            PlatformApplyConstantBuffers(cpixelShader, _shaderProgram,\n                ((IPlatformConstantBufferCollection)_pixelConstantBuffers).Strategy.ToConcrete<ConcreteConstantBufferCollection>());\n\n            // Apply Shader Texture and Samplers\n            PlatformApplyTexturesAndSamplers(cvertexShader,\n                ((IPlatformTextureCollection)this.VertexTextures).Strategy.ToConcrete<ConcreteTextureCollection>(),\n                ((IPlatformSamplerStateCollection)this.VertexSamplerStates).Strategy.ToConcrete<ConcreteSamplerStateCollection>());\n            PlatformApplyTexturesAndSamplers(cpixelShader,\n                ((IPlatformTextureCollection)this.Textures).Strategy.ToConcrete<ConcreteTextureCollection>(),\n                ((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.ToConcrete<ConcreteSamplerStateCollection>());\n        }\n\n        private void PlatformApplyConstantBuffers(ConcreteShader shaderStrategy, ShaderProgram shaderProgram, ConcreteConstantBufferCollection cconstantBufferCollection)\n        {\n            uint validMask = cconstantBufferCollection.InternalValid;\n\n            for (int slot = 0; validMask != 0 && slot < cconstantBufferCollection.Length; slot++)\n            {\n                uint mask = ((uint)1) << slot;\n\n                ConstantBuffer constantBuffer = cconstantBufferCollection[slot];\n                if (constantBuffer != null && !constantBuffer.IsDisposed)\n                {\n                    ConcreteConstantBuffer constantBufferStrategy = ((IPlatformConstantBuffer)constantBuffer).Strategy.ToConcrete<ConcreteConstantBuffer>();\n\n                    constantBufferStrategy.PlatformApply(this, shaderProgram, slot);\n                }\n\n                // clear buffer bit\n                validMask &= ~mask;\n            }\n        }\n        private void PlatformApplyTexturesAndSamplers(ConcreteShader cshader, ConcreteTextureCollection ctextureCollection, ConcreteSamplerStateCollection csamplerStateCollection)\n        {\n            int texturesCount = ctextureCollection.Length;\n\n            // Apply Textures\n            for (int slot = 0; ctextureCollection.InternalDirty != 0 && slot < texturesCount; slot++)\n            {\n                uint mask = ((uint)1) << slot;\n                if ((ctextureCollection.InternalDirty & mask) != 0)\n                {\n                    Texture texture = ctextureCollection[slot];\n                    if (texture != null)\n                    {\n                        ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy<ConcreteTexture>();\n\n                        // Clear the previous binding if the target is different from the new one.\n                        WebGLTextureTarget prevTarget = ctextureCollection._targets[slot];\n                        if (prevTarget != 0 && prevTarget != ctexture._glTarget)\n                        {\n                            GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + slot);\n                            GL.CheckGLError();\n                            GL.BindTexture(prevTarget, null);\n                            ctextureCollection._targets[slot] = 0;\n                            GL.CheckGLError();\n                        }\n\n                        GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + slot);\n                        GL.CheckGLError();\n                        ctextureCollection._targets[slot] = ctexture._glTarget;\n                        GL.BindTexture(ctexture._glTarget, ctexture._glTexture);\n                        GL.CheckGLError();\n\n                        this.Metrics_AddTextureCount();\n                    }\n                    else // (texture == null)\n                    {\n                        // Clear the previous binding if the target is different from the new one.\n                        WebGLTextureTarget prevTarget = ctextureCollection._targets[slot];\n                        if (prevTarget != 0)\n                        {\n                            GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + slot);\n                            GL.CheckGLError();\n                            GL.BindTexture(prevTarget, null);\n                            ctextureCollection._targets[slot] = 0;\n                            GL.CheckGLError();\n                        }\n                    }\n\n                    // clear texture bit\n                    ctextureCollection.InternalDirty &= ~mask;\n                }\n            }\n\n            // Check Samplers\n            GraphicsProfile graphicsProfile = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.GraphicsProfile;\n            if (graphicsProfile == GraphicsProfile.Reach)\n            {\n                for (int i = 0; i < cshader.Samplers.Length; i++)\n                {\n                    int textureSlot = cshader.Samplers[i].textureSlot;\n                    int samplerSlot = cshader.Samplers[i].samplerSlot;\n\n                    Texture2D texture2D = ctextureCollection[textureSlot] as Texture2D;\n                    if (texture2D != null)\n                    {\n                        if (this.SamplerStates[samplerSlot].AddressU != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Width)\n                        ||  this.SamplerStates[samplerSlot].AddressV != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Height))\n                            throw new NotSupportedException(\"Reach profile support only Clamp mode for non-power of two Textures.\");\n                    }\n                }\n            }\n\n            // Apply Samplers\n            for (int slot = 0; slot < texturesCount; slot++)\n            {\n                Texture texture = ctextureCollection[slot];\n                if (texture != null)\n                {\n                    ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy<ConcreteTexture>();\n\n                    SamplerState sampler = csamplerStateCollection.InternalActualSamplers[slot];\n                    if (sampler != null)\n                    {\n                        if (sampler != ctexture._glLastSamplerState)\n                        {\n                            // TODO: Avoid doing this redundantly.\n                            //       Merge the two loops 'Apply Textures' and 'Apply Samplers'.\n                            //       Use information from 'cshader.Samplers' to find active samplers.\n                            GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + slot);\n                            GL.CheckGLError();\n\n                            // NOTE: We don't have to bind the texture here because it is already bound in the loop above.\n                            // GL.BindTexture(ctexture._glTarget, texture._glTexture);\n                            // GL.CheckGLError();\n\n                            ConcreteSamplerState csamplerState = ((IPlatformSamplerState)sampler).GetStrategy<ConcreteSamplerState>();\n\n                            csamplerState.PlatformApplyState(this, ctexture._glTarget, ctexture.LevelCount > 1);\n                            ctexture._glLastSamplerState = sampler;\n                        }\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Activates the Current Vertex/Pixel shader pair into a program.         \n        /// </summary>\n        private unsafe void ActivateShaderProgram(ConcreteVertexShader cvertexShader, ConcretePixelShader cpixelShader)\n        {\n            ConcreteGraphicsDevice deviceStrategy = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>();\n\n            // Lookup the shader program.\n            ShaderProgram shaderProgram;\n            int shaderProgramHash = (cvertexShader.GetHashCode() ^ cpixelShader.GetHashCode());\n            if (!deviceStrategy.ProgramCache.TryGetValue(shaderProgramHash, out shaderProgram))\n            {\n                // the key does not exist so we need to link the programs\n                shaderProgram = CreateProgram(cvertexShader, cpixelShader);\n                deviceStrategy.ProgramCache.Add(shaderProgramHash, shaderProgram);\n            }\n\n            if (shaderProgram.Program == null)\n                return;\n\n            // Set the new program if it has changed.\n            if (_shaderProgram != shaderProgram)\n            {\n                GL.UseProgram(shaderProgram.Program);\n                GL.CheckGLError();\n\n                _shaderProgram = shaderProgram;\n            }\n\n        }\n\n        private void ApplyPosFixup(ShaderProgram shaderProgram)\n        {\n            WebGLUniformLocation posFixupLoc = this.GetUniformLocation(shaderProgram, \"posFixup\");\n            if (posFixupLoc == null)\n                return;\n\n            // Apply vertex shader fix:\n            // The following two lines are appended to the end of vertex shaders\n            // to account for rendering differences between OpenGL and DirectX:\n            //\n            // gl_Position.y = gl_Position.y * posFixup.y;\n            // gl_Position.xy += posFixup.zw * gl_Position.ww;\n            //\n            // (the following paraphrased from wine, wined3d/state.c and wined3d/glsl_shader.c)\n            //\n            // - We need to flip along the y-axis in case of offscreen rendering.\n            // - D3D coordinates refer to pixel centers while GL coordinates refer\n            //   to pixel corners.\n            // - D3D has a top-left filling convention. We need to maintain this\n            //   even after the y-flip mentioned above.\n            // In order to handle the last two points, we translate by\n            // (63.0 / 128.0) / VPw and (63.0 / 128.0) / VPh. This is equivalent to\n            // translating slightly less than half a pixel. We want the difference to\n            // be large enough that it doesn't get lost due to rounding inside the\n            // driver, but small enough to prevent it from interfering with any\n            // anti-aliasing.\n            //\n            // OpenGL coordinates specify the center of the pixel while d3d coords specify\n            // the corner. The offsets are stored in z and w in posFixup. posFixup.y contains\n            // 1.0 or -1.0 to turn the rendering upside down for offscreen rendering. PosFixup.x\n            // contains 1.0 to allow a mad.\n\n            _posFixup.X = 1.0f;\n            _posFixup.Y = 1.0f;\n            if (!((IPlatformGraphicsContext)this.Context).DeviceStrategy.UseHalfPixelOffset)\n            {\n                _posFixup.Z = 0f;\n                _posFixup.W = 0f;\n            }\n            else\n            {\n                _posFixup.Z =  (63.0f/64.0f)/Viewport.Width;\n                _posFixup.W = -(63.0f/64.0f)/Viewport.Height;\n            }\n\n            //If we have a render target bound (rendering offscreen)\n            if (this.FramebufferRequireFlippedY)\n            {\n                //flip vertically\n                _posFixup.Y = -_posFixup.Y;\n                _posFixup.W = -_posFixup.W;\n            }\n            \n            GL.Uniform4f(posFixupLoc, _posFixup.X, _posFixup.Y, _posFixup.Z, _posFixup.W);\n            GL.CheckGLError();\n        }\n\n        private ShaderProgram CreateProgram(ConcreteVertexShader cvertexShader, ConcretePixelShader cpixelShader)\n        {\n            WebGLProgram program = GL.CreateProgram();\n            GL.CheckGLError();\n\n            WebGLShader vertexShaderHandle = cvertexShader.ShaderHandle;\n            GL.AttachShader(program, vertexShaderHandle);\n            GL.CheckGLError();\n\n            WebGLShader pixelShaderHandle = cpixelShader.ShaderHandle;\n            GL.AttachShader(program, pixelShaderHandle);\n            GL.CheckGLError();\n\n            //vertexShader.BindVertexAttributes(program);\n\n            GL.LinkProgram(program);\n            GL.CheckGLError();\n\n            bool linkStatus;\n            linkStatus = GL.GetProgramParameter(program, WebGLProgramStatus.LINK);\n            if (linkStatus == false)\n            {\n                string log = GL.GetProgramInfoLog(program);\n                //vertexShaderHandle.Dispose();\n                //pixelShaderHandle.Dispose();\n                program.Dispose();\n\n                throw new InvalidOperationException(\"Unable to link effect program.\"\n                    + Environment.NewLine + log);\n            }\n\n            GL.UseProgram(program);\n            GL.CheckGLError();\n\n            // Get Vertex AttributeLocations\n            for (int i = 0; i < cvertexShader.Attributes.Length; i++)\n            {\n                int attribloc = GL.GetAttribLocation(program, cvertexShader.Attributes[i].name);\n                GL.CheckGLError();\n                cvertexShader.Attributes[i].location = attribloc;\n            }\n\n            // Apply Pixel Sampler TextureUnits\n            // Assign the texture unit index to the sampler uniforms.\n            for (int i = 0; i < cpixelShader.Samplers.Length; i++)\n            {\n                WebGLUniformLocation loc = GL.GetUniformLocation(program, cpixelShader.Samplers[i].GLsamplerName);\n                GL.CheckGLError();\n                if (loc != null)\n                {\n                    GL.Uniform1i(loc, cpixelShader.Samplers[i].textureSlot);\n                    GL.CheckGLError();\n                }\n            }\n\n            return new ShaderProgram(program);\n        }\n\n        public WebGLUniformLocation GetUniformLocation(ShaderProgram shaderProgram, string name)\n        {\n            WebGLUniformLocation location;\n            if (shaderProgram._uniformLocationCache.TryGetValue(name, out location))\n                return location;\n\n            location = GL.GetUniformLocation(shaderProgram.Program, name);\n            GL.CheckGLError();\n\n            shaderProgram._uniformLocationCache[name] = location;\n            return location;\n        }\n\n        private void PlatformApplyVertexBuffers(int baseVertex)\n        {\n            ConcreteVertexShader vertexShaderStrategy = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete<ConcreteVertexShader>();\n            bool bindingsChanged = false;\n\n            for (int slot = 0; slot < _vertexBuffers.Count; slot++)\n            {\n                VertexBufferBinding vertexBufferBinding = _vertexBuffers.Get(slot);\n\n                VertexDeclaration vertexDeclaration = vertexBufferBinding.VertexBuffer.VertexDeclaration;\n                int vertexStride = vertexDeclaration.VertexStride;\n                IntPtr vertexOffset = (IntPtr)(vertexStride * (baseVertex + vertexBufferBinding.VertexOffset));\n\n                VertexDeclarationAttributeInfo vertexAttribInfo = vertexShaderStrategy.GetVertexAttribInfo(this, vertexDeclaration);\n\n                if (_lastVertexAttribs != 1\n                ||  _bufferBindingInfos[slot].VertexBuffer != vertexBufferBinding.VertexBuffer\n                ||  _bufferBindingInfos[slot].VertexOffset != vertexOffset\n                ||  _bufferBindingInfos[slot].InstanceFrequency != vertexBufferBinding.InstanceFrequency\n                ||  !ReferenceEquals(_bufferBindingInfos[slot].AttributeInfo, vertexAttribInfo)\n                ||  slot >= _activeBufferBindingInfosCount)\n                {\n                    bindingsChanged = true;\n\n                    GL.BindBuffer(WebGLBufferType.ARRAY, ((IPlatformVertexBuffer)vertexBufferBinding.VertexBuffer).Strategy.ToConcrete<ConcreteVertexBuffer>().GLVertexBuffer);\n                    GL.CheckGLError();\n\n                    for (int e = 0; e < vertexAttribInfo.Elements.Count; e++)\n                    {\n                        VertexDeclarationAttributeInfoElement element = vertexAttribInfo.Elements[e];\n                        GL.VertexAttribPointer(element.AttributeLocation,\n                            element.NumberOfElements,\n                            element.VertexAttribPointerType,\n                            element.Normalized,\n                            vertexStride,\n                            (vertexOffset + element.Offset).ToInt32());\n                        GL.CheckGLError();\n\n                        // only set the divisor if instancing is supported\n                        if (base.Capabilities.SupportsInstancing)\n                        {\n                            ((IWebGL2RenderingContext)GL).VertexAttribDivisor(element.AttributeLocation, vertexBufferBinding.InstanceFrequency);\n                            GL.CheckGLError();\n                        }\n                        else // If instancing is not supported, but InstanceFrequency of the buffer is not zero, throw an exception\n                        {\n                            if (vertexBufferBinding.InstanceFrequency > 0)\n                                throw new PlatformNotSupportedException(\"Instanced geometry drawing requires at least OpenGL 3.2 or GLES 3.2.\");\n                        }\n                    }\n\n                    _bufferBindingInfos[slot].VertexBuffer = vertexBufferBinding.VertexBuffer;\n                    _bufferBindingInfos[slot].AttributeInfo = vertexAttribInfo;\n                    _bufferBindingInfos[slot].VertexOffset = vertexOffset;\n                    _bufferBindingInfos[slot].InstanceFrequency = vertexBufferBinding.InstanceFrequency;\n                }\n            }\n\n            if (bindingsChanged)\n            {\n                for (int eva = 0; eva < _newEnabledVertexAttributes.Length; eva++)\n                    _newEnabledVertexAttributes[eva] = false;\n\n                for (int slot = 0; slot < _vertexBuffers.Count; slot++)\n                {\n                    for (int e = 0; e < _bufferBindingInfos[slot].AttributeInfo.Elements.Count; e++)\n                    {\n                        VertexDeclarationAttributeInfoElement element = _bufferBindingInfos[slot].AttributeInfo.Elements[e];\n                        _newEnabledVertexAttributes[element.AttributeLocation] = true;\n                    }\n                }\n                _activeBufferBindingInfosCount = _vertexBuffers.Count;\n            }\n\n            // SetVertexAttributeArray\n            if (bindingsChanged || _lastVertexAttribs != 1)\n            {\n                for (int x = 0; x < _newEnabledVertexAttributes.Length; x++)\n                {\n                    if (_newEnabledVertexAttributes[x] == true)\n                    {\n                        if (_enabledVertexAttributesSet.Add(x))\n                        {\n                            GL.EnableVertexAttribArray(x);\n                            GL.CheckGLError();\n                        }\n                    }\n                    else // (_newEnabledVertexAttributes[x] == false)\n                    {\n                        if (_enabledVertexAttributesSet.Remove(x))\n                        {\n                            GL.DisableVertexAttribArray(x);\n                            GL.CheckGLError();\n                        }\n                    }\n                }\n            }\n            _lastVertexAttribs = 1;\n        }\n\n        internal void PlatformApplyUserVertexData(VertexDeclaration vertexDeclaration)\n        {\n            ConcreteVertexShader vertexShaderStrategy = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete<ConcreteVertexShader>();\n\n            int vertexStride = vertexDeclaration.VertexStride;\n\n            VertexDeclarationAttributeInfo vertexAttribInfo = vertexShaderStrategy.GetVertexAttribInfo(this, vertexDeclaration);\n           \n            for (int e = 0; e < vertexAttribInfo.Elements.Count; e++)\n            {\n                VertexDeclarationAttributeInfoElement element = vertexAttribInfo.Elements[e];\n                GL.VertexAttribPointer(element.AttributeLocation,\n                    element.NumberOfElements,\n                    element.VertexAttribPointerType,\n                    element.Normalized,\n                    vertexStride,\n                    element.Offset);\n                GL.CheckGLError();\n\n                if (base.Capabilities.SupportsInstancing)\n                {\n                    ((IWebGL2RenderingContext)GL).VertexAttribDivisor(element.AttributeLocation, 0);\n                    GL.CheckGLError();\n                }\n            }\n\n            // SetVertexAttributeArray\n            {\n                for (int x = 0; x < vertexAttribInfo.EnabledAttributes.Length; x++)\n                {\n                    if (vertexAttribInfo.EnabledAttributes[x] == true)\n                    {\n                        if (_enabledVertexAttributesSet.Add(x))\n                        {\n                            GL.EnableVertexAttribArray(x);\n                            GL.CheckGLError();\n                        }\n                    }\n                    else // (vertexAttribInfo.EnabledAttributes[x] == false)\n                    {\n                        if (_enabledVertexAttributesSet.Remove(x))\n                        {\n                            GL.DisableVertexAttribArray(x);\n                            GL.CheckGLError();\n                        }\n                    }\n                }\n            }\n            _lastVertexAttribs = 2;\n        }\n\n        private static WebGLPrimitiveType PrimitiveTypeGL(PrimitiveType primitiveType)\n        {\n            switch (primitiveType)\n            {\n                case PrimitiveType.PointList:\n                    throw new NotSupportedException();\n                case PrimitiveType.LineList:\n                    return WebGLPrimitiveType.LINES;\n                case PrimitiveType.LineStrip:\n                    return WebGLPrimitiveType.LINE_STRIP;\n                case PrimitiveType.TriangleList:\n                    return WebGLPrimitiveType.TRIANGLES;\n                case PrimitiveType.TriangleStrip:\n                    return WebGLPrimitiveType.TRIANGLE_STRIP;\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        public override void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount)\n        {\n            PlatformApplyState();\n            //PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            PlatformApplyVertexBuffers(0);\n\n            if (vertexStart < 0)\n                vertexStart = 0;\n\n            GL.DrawArrays(ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType),\n                          vertexStart,\n                          vertexCount);\n            GL.CheckGLError();\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount)\n        {\n            PlatformApplyState();\n            PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            WebGLDataType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().DrawElementsType;\n            int indexOffsetInBytes = (startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes);\n            int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            PlatformApplyVertexBuffers(baseVertex);\n\n            GL.DrawElements(target,\n                            indexElementCount,\n                            indexElementType,\n                            indexOffsetInBytes);\n            GL.CheckGLError();\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)\n        {\n            PlatformApplyState();\n            PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            WebGLDataType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().DrawElementsType;\n            int indexOffsetInBytes = (startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes);\n            int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            PlatformApplyVertexBuffers(baseVertex);\n\n            if (GL is IWebGL2RenderingContext)\n            {\n                ((IWebGL2RenderingContext)GL).DrawRangeElements(target,\n                                    minVertexIndex,\n                                    minVertexIndex + numVertices - 1,\n                                    indexElementCount,\n                                    indexElementType,\n                                    indexOffsetInBytes);\n                GL.CheckGLError();\n            }\n            else\n            {\n                GL.DrawElements(target,\n                                indexElementCount,\n                                indexElementType,\n                                indexOffsetInBytes);\n                GL.CheckGLError();\n            }\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount)\n        {\n            if (!base.Capabilities.SupportsInstancing)\n                throw new PlatformNotSupportedException(\"Instanced geometry drawing requires at least OpenGL 3.2 or GLES 3.2.\");\n\n            PlatformApplyState();\n            PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            WebGLDataType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().DrawElementsType;\n            int indexOffsetInBytes = (startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes);\n            int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            PlatformApplyVertexBuffers(baseVertex);\n\n            ((IWebGL2RenderingContext)GL).DrawElementsInstanced(target,\n                                                                indexElementCount,\n                                                                indexElementType,\n                                                                indexOffsetInBytes,\n                                                                instanceCount);\n            GL.CheckGLError();\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount * instanceCount);\n        }\n\n        public override void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount)\n            //where T : struct\n        {\n            PlatformApplyState();\n            //PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            // TODO: reimplement without creating new buffers\n\n            // create and bind vertexBuffer\n            WebGLBuffer vbo = GL.CreateBuffer();\n            GL.CheckGLError();\n            GL.BindBuffer(WebGLBufferType.ARRAY, vbo);\n            GL.CheckGLError();\n            GL.BufferData(WebGLBufferType.ARRAY,\n                          (vertexDeclaration.VertexStride * vertexData.Length),\n                          (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW);\n            GL.CheckGLError();\n            // mark the default Vertex buffers for rebinding\n            _vertexBuffersDirty = true;\n\n            //set vertex data\n            GL.BufferSubData<T>(WebGLBufferType.ARRAY, 0, vertexData, vertexOffset, vertexCount);\n            GL.CheckGLError();\n\n            // Setup the vertex declaration to point at the VB data.\n            PlatformApplyUserVertexData(vertexDeclaration);\n\n            WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            GL.DrawArrays(ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType),\n                          0,\n                          vertexCount);\n            GL.CheckGLError();\n\n            //GL.BindBuffer(WebGLBufferType.ARRAY, null);\n            //GL.CheckGLError();\n            //GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, null);\n            //GL.CheckGLError();\n\n            vbo.Dispose();\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration)\n            //where T : struct\n        {\n            PlatformApplyState();\n            //PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            // TODO: reimplement without creating new buffers\n\n            // create and bind vertexBuffer\n            WebGLBuffer vbo = GL.CreateBuffer();\n            GL.CheckGLError();\n            GL.BindBuffer(WebGLBufferType.ARRAY, vbo);\n            GL.CheckGLError();\n            GL.BufferData(WebGLBufferType.ARRAY,\n                          (vertexDeclaration.VertexStride * vertexData.Length),\n                          (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW);\n            GL.CheckGLError();\n            // mark the default Vertex buffers for rebinding\n            _vertexBuffersDirty = true;\n\n            //set vertex data\n            GL.BufferSubData<T>(WebGLBufferType.ARRAY, 0, vertexData, vertexOffset, numVertices);\n            GL.CheckGLError();\n\n            // create and bind index buffer\n            WebGLBuffer ibo = GL.CreateBuffer();\n            GL.CheckGLError();\n            GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, ibo);\n            GL.CheckGLError();\n            GL.BufferData(WebGLBufferType.ELEMENT_ARRAY,\n                          (indexData.Length * sizeof(short)),\n                          (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW);\n            GL.CheckGLError();\n            // mark the default index buffer for rebinding\n            _indexBufferDirty = true;\n\n            // set index buffer\n            GL.BufferSubData<short>(WebGLBufferType.ELEMENT_ARRAY, 0, indexData, indexData.Length);\n            GL.CheckGLError();\n\n            // Setup the vertex declaration to point at the VB data.\n            PlatformApplyUserVertexData(vertexDeclaration);\n\n\n            int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            int indexOffsetInBytes = (indexOffset * sizeof(short));\n            WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            GL.DrawElements(target,\n                            indexElementCount,\n                            WebGLDataType.USHORT,\n                            indexOffsetInBytes);\n            GL.CheckGLError();\n\n            //GL.BindBuffer(WebGLBufferType.ARRAY, null);\n            //GL.CheckGLError();\n            //GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, null);\n            //GL.CheckGLError();\n\n            ibo.Dispose();\n            vbo.Dispose();\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration)\n            //where T : struct\n        {\n            PlatformApplyState();\n            //PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            // TODO: reimplement without creating new buffers\n\n            // create and bind vertexBuffer\n            WebGLBuffer vbo = GL.CreateBuffer();\n            GL.CheckGLError();\n            GL.BindBuffer(WebGLBufferType.ARRAY, vbo);\n            GL.CheckGLError();\n            GL.BufferData(WebGLBufferType.ARRAY,\n                          (vertexDeclaration.VertexStride * vertexData.Length),\n                          (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW);\n            GL.CheckGLError();\n            // mark the default Vertex buffers for rebinding\n            _vertexBuffersDirty = true;\n\n            //set vertex data\n            GL.BufferSubData<T>(WebGLBufferType.ARRAY, 0, vertexData, vertexOffset, numVertices);\n            GL.CheckGLError();\n\n            // create and bind index buffer\n            WebGLBuffer ibo = GL.CreateBuffer();\n            GL.CheckGLError();\n            GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, ibo);\n            GL.CheckGLError();\n            GL.BufferData(WebGLBufferType.ELEMENT_ARRAY,\n                          (indexData.Length * sizeof(int)),\n                          (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW);\n            GL.CheckGLError();\n            // mark the default index buffer for rebinding\n            _indexBufferDirty = true;\n\n            // set index buffer\n            ((IWebGL2RenderingContext)GL).BufferSubData<int>(WebGLBufferType.ELEMENT_ARRAY, 0, indexData, indexData.Length);\n            GL.CheckGLError();\n\n            // Setup the vertex declaration to point at the VB data.\n            PlatformApplyUserVertexData(vertexDeclaration);\n\n\n            int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            int indexOffsetInBytes = (indexOffset * sizeof(int));\n            WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            GL.DrawElements(target,\n                            indexElementCount,\n                            WebGLDataType.UINT,\n                            indexOffsetInBytes);\n            GL.CheckGLError();\n\n            //GL.BindBuffer(WebGLBufferType.ARRAY, null);\n            //GL.CheckGLError();\n            //GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, null);\n            //GL.CheckGLError();\n\n            ibo.Dispose();\n            vbo.Dispose();\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void Flush()\n        {\n            GL.Flush();\n        }\n\n\n        public override OcclusionQueryStrategy CreateOcclusionQueryStrategy()\n        {\n            return new ConcreteOcclusionQuery(this);\n        }\n\n        public override GraphicsDebugStrategy CreateGraphicsDebugStrategy()\n        {\n            return new ConcreteGraphicsDebug(this);\n        }\n\n        public override ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity)\n        {\n            return new ConcreteConstantBufferCollection(capacity);\n        }\n\n        public override TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity)\n        {\n            return new ConcreteTextureCollection(this, capacity);\n        }\n\n        public override SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity)\n        {\n            return new ConcreteSamplerStateCollection(this, capacity);\n        }\n\n        public override ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared)\n        {\n            return new ConcreteTexture2D(this, width, height, mipMap, format, arraySize, shared);\n        }\n\n        public override ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            return new ConcreteTexture3D(this, width, height, depth, mipMap, format);\n        }\n\n        public override ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format)\n        {\n            return new ConcreteTextureCube(this, size, mipMap, format);\n        }\n\n        public override IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTarget2D(this, width, height, mipMap, arraySize, shared, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount,\n                                              surfaceType: TextureSurfaceType.RenderTarget);\n        }\n\n        public override IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTarget3D(this, width, height, depth, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount);\n        }\n\n        public override IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTargetCube(this, size, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount);\n        }\n\n        public override ITexture2DStrategy CreateTexture2DStrategy(Stream stream)\n        {\n            return new ConcreteTexture2D(this, stream);\n        }\n\n        public override ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n        {\n            return new ConcreteVertexShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n        }\n        public override ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n        {\n            return new ConcretePixelShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n        }\n        public override ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats)\n        {\n            return new ConcreteConstantBuffer(this, name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats);\n        }\n\n        public override IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n        {\n            return new ConcreteIndexBuffer(this, indexElementSize, indexCount, usage);\n        }\n        public override VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n        {\n            return new ConcreteVertexBuffer(this, vertexDeclaration, vertexCount, usage);\n        }\n        public override IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n        {\n            return new ConcreteDynamicIndexBuffer(this, indexElementSize, indexCount, usage);\n        }\n        public override VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n        {\n            return new ConcreteDynamicVertexBuffer(this, vertexDeclaration, vertexCount, usage);\n        }\n\n        public override IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source)\n        {\n            return new ConcreteBlendState(this, source);\n        }\n        public override IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source)\n        {\n            return new ConcreteDepthStencilState(this, source);\n        }\n        public override IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy source)\n        {\n            return new ConcreteRasterizerState(this, source);\n        }\n        public override ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source)\n        {\n            return new ConcreteSamplerState(this, source);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n        static readonly WebGLFramebufferAttachmentPoint[] InvalidateFramebufferAttachements =\n        {\n            //WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0,\n            WebGLFramebufferAttachmentPoint.DEPTH_ATTACHMENT,\n            WebGLFramebufferAttachmentPoint.STENCIL_ATTACHMENT,\n        };\n\n        protected override void PlatformResolveRenderTargets()\n        {\n            if (!this.IsRenderTargetBound)\n                return;\n\n            RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[0];\n            IRenderTarget renderTarget = renderTargetBinding.RenderTarget as IRenderTarget;\n            if (renderTarget.MultiSampleCount > 0)\n            {\n                WebGLFramebuffer glResolveFramebuffer = null;\n                if (!_glResolveFramebuffers.TryGetValue(base.CurrentRenderTargetBindings, out glResolveFramebuffer))\n                {\n                    glResolveFramebuffer = GL.CreateFramebuffer();\n                    GL.CheckGLError();\n                    GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glResolveFramebuffer);\n                    GL.CheckGLError();\n\n                    for (int i = 0; i < base.RenderTargetCount; i++)\n                    {\n                        IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IRenderTarget)base.CurrentRenderTargetBindings[i].RenderTarget).RenderTargetStrategy;\n\n                        WebGLFramebufferAttachmentPoint attachment = WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0 + i;\n                        WebGLTextureTarget target = renderTargetGL.GetFramebufferTarget(renderTargetBinding.ArraySlice);\n                        ((IWebGL2RenderingContext)GL).FramebufferTexture2D(WebGL2FramebufferType.DRAW_FRAMEBUFFER, attachment, target, renderTargetGL.GLTexture);\n                        GL.CheckGLError();\n                    }\n                    _glResolveFramebuffers.Add((RenderTargetBinding[])base.CurrentRenderTargetBindings.Clone(), glResolveFramebuffer);\n                }\n                else\n                {\n                    ((IWebGL2RenderingContext)GL).BindFramebuffer(WebGL2FramebufferType.DRAW_FRAMEBUFFER, glResolveFramebuffer);\n                    GL.CheckGLError();\n                }\n\n                // The only fragment operations which affect the resolve are the pixel ownership test, the scissor test, and dithering.\n                if (_lastRasterizerState.ScissorTestEnable)\n                {\n                    GL.Disable(WebGLCapability.SCISSOR_TEST);\n                    GL.CheckGLError();\n                }\n\n                WebGLFramebuffer glFramebuffer = _glFramebuffers[base.CurrentRenderTargetBindings];\n                ((IWebGL2RenderingContext)GL).BindFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, glFramebuffer);\n                GL.CheckGLError();\n\n                for (int i = 0; i < base.RenderTargetCount; i++)\n                {\n                    renderTargetBinding = base.CurrentRenderTargetBindings[i];\n                    renderTarget = renderTargetBinding.RenderTarget as IRenderTarget;\n\n                    ((IWebGL2RenderingContext)GL).ReadBuffer(WebGL2DrawBufferAttachmentPoint.COLOR_ATTACHMENT0 + i);\n                    GL.CheckGLError();\n                    ((IWebGL2RenderingContext)GL).DrawBuffer(WebGL2DrawBufferAttachmentPoint.COLOR_ATTACHMENT0 + i);\n                    GL.CheckGLError();\n                    ((IWebGL2RenderingContext)GL).BlitFramebuffer(\n                        0, 0, renderTarget.Width, renderTarget.Height,\n                        0, 0, renderTarget.Width, renderTarget.Height,\n                        WebGLBufferBits.COLOR, WebGLTexParam.NEAREST);\n                    GL.CheckGLError();\n\n                    if (renderTarget.RenderTargetUsage == RenderTargetUsage.DiscardContents)\n                    {\n                        if (i == 0)\n                        {\n                            ((IWebGL2RenderingContext)GL).InvalidateFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, InvalidateFramebufferAttachements);\n                            GL.CheckGLError();\n                        }\n                    }\n                }\n\n                if (_lastRasterizerState.ScissorTestEnable)\n                {\n                    GL.Enable(WebGLCapability.SCISSOR_TEST);\n                    GL.CheckGLError();\n                }\n            }\n\n            for (int i = 0; i < base.RenderTargetCount; i++)\n            {\n                renderTargetBinding = base.CurrentRenderTargetBindings[i];\n\n                renderTarget = renderTargetBinding.RenderTarget as RenderTarget2D;\n                if (renderTarget != null)\n                {\n                    ((IRenderTarget)renderTarget).RenderTargetStrategy.ResolveSubresource(this);\n                }\n\n                if (renderTargetBinding.RenderTarget.LevelCount > 1)\n                {\n                    IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>();\n                    GL.BindTexture(renderTargetGL.GLTarget, renderTargetGL.GLTexture);\n                    GL.CheckGLError();\n                    GL.GenerateMipmap(renderTargetGL.GLTarget);\n                    GL.CheckGLError();\n                }\n            }\n        }\n\n        protected override void PlatformApplyDefaultRenderTarget()\n        {\n            GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER,((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>()._glDefaultFramebuffer);\n            GL.CheckGLError();\n\n            // Reset the raster state because we flip vertices\n            // when rendering offscreen and hence the cull direction.\n            _rasterizerStateDirty = true;\n\n            // Textures will need to be rebound to render correctly in the new render target.\n            ((IPlatformTextureCollection)this.Textures).Strategy.Dirty();\n        }\n\n        protected override IRenderTarget PlatformApplyRenderTargets()\n        {\n            WebGLFramebuffer glFramebuffer = null;\n            if (!_glFramebuffers.TryGetValue(base.CurrentRenderTargetBindings, out glFramebuffer))\n            {\n                glFramebuffer = GL.CreateFramebuffer();\n                GL.CheckGLError();\n                GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glFramebuffer);\n                GL.CheckGLError();\n                RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[0];\n                IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>();\n\n                if (renderTargetGL.GLDepthBuffer != renderTargetGL.GLStencilBuffer)\n                {\n                    GL.FramebufferRenderbuffer(WebGLFramebufferType.FRAMEBUFFER, WebGLFramebufferAttachmentPoint.DEPTH_ATTACHMENT, WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLDepthBuffer);\n                    GL.CheckGLError();\n                    //GL.FramebufferRenderbuffer(WebGLFramebufferType.FRAMEBUFFER, WebGLFramebufferAttachmentPoint.STENCIL_ATTACHMENT, WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLStencilBuffer);\n                    //GL.CheckGLError();\n                }\n                else\n                {\n                    GL.FramebufferRenderbuffer(WebGLFramebufferType.FRAMEBUFFER, WebGLFramebufferAttachmentPoint.DEPTH_STENCIL_ATTACHMENT, WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLDepthBuffer);\n                    GL.CheckGLError();\n                }\n\n                for (int i = 0; i < base.RenderTargetCount; i++)\n                {\n                    renderTargetBinding = base.CurrentRenderTargetBindings[i];\n                    renderTargetGL = ((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>() as IRenderTargetStrategyGL;\n                    WebGLFramebufferAttachmentPoint attachement = (WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0 + i);\n\n                    if (renderTargetGL.GLColorBuffer != null)\n                    {\n                        GL.FramebufferRenderbuffer(WebGLFramebufferType.FRAMEBUFFER, attachement, WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLColorBuffer);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        WebGLTextureTarget target = renderTargetGL.GetFramebufferTarget(renderTargetBinding.ArraySlice);\n                        GL.FramebufferTexture2D(WebGLFramebufferType.FRAMEBUFFER, attachement, target, renderTargetGL.GLTexture);\n                        GL.CheckGLError();\n                    }\n                }\n\n                CheckFramebufferStatus();\n\n                _glFramebuffers.Add((RenderTargetBinding[])base.CurrentRenderTargetBindings.Clone(), glFramebuffer);\n            }\n            else\n            {\n                GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glFramebuffer);\n                GL.CheckGLError();\n            }\n\n#if DESKTOPGL\n            //GL.DrawBuffers(base.RenderTargetCount, _drawBuffers);\n#endif\n            var GL2 = GL as IWebGL2RenderingContext;\n            if (GL2 != null)\n                GL2.DrawBuffers(this.ToConcrete<ConcreteGraphicsContext>()._drawBuffers, 0, base.RenderTargetCount);\n\n            // Reset the raster state because we flip vertices\n            // when rendering offscreen and hence the cull direction.\n            _rasterizerStateDirty = true;\n\n            // Textures will need to be rebound to render correctly in the new render target.\n            ((IPlatformTextureCollection)this.Textures).Strategy.Dirty();\n\n            return base.CurrentRenderTargetBindings[0].RenderTarget as IRenderTarget;\n        }\n\n        internal void PlatformUnbindRenderTarget(IRenderTargetStrategyGL renderTargetStrategy)\n        {\n            var bindingsToDelete = new List<RenderTargetBinding[]>();\n            foreach (RenderTargetBinding[] bindings in _glFramebuffers.Keys)\n            {\n                foreach (RenderTargetBinding renderTargetBinding in bindings)\n                {\n                    if (renderTargetBinding.RenderTarget != null && ((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>() == renderTargetStrategy)\n                    {\n                        bindingsToDelete.Add(bindings);\n                        break;\n                    }\n                }\n            }\n\n            foreach (RenderTargetBinding[] bindings in bindingsToDelete)\n            {\n                WebGLFramebuffer fbo = null;\n                if (_glFramebuffers.TryGetValue(bindings, out fbo))\n                {\n                    fbo.Dispose();\n                    GL.CheckGLError();\n                    _glFramebuffers.Remove(bindings);\n                }\n                if (_glResolveFramebuffers.TryGetValue(bindings, out fbo))\n                {\n                    fbo.Dispose();\n                    GL.CheckGLError();\n\n                    _glResolveFramebuffers.Remove(bindings);\n                }\n            }\n        }\n\n\n        [Conditional(\"DEBUG\")]\n        public void CheckFramebufferStatus()\n        {\n            WebGLFramebufferStatus status = GL.CheckFramebufferStatus(WebGLFramebufferType.FRAMEBUFFER);\n            switch (status)\n            {\n                case WebGLFramebufferStatus.FRAMEBUFFER_COMPLETE:\n                    return;\n                case WebGLFramebufferStatus.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n                    throw new InvalidOperationException(\"Not all framebuffer attachment points are framebuffer attachment complete.\");\n                case WebGLFramebufferStatus.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n                    throw new InvalidOperationException(\"No images are attached to the framebuffer.\");\n                case WebGLFramebufferStatus.FRAMEBUFFER_UNSUPPORTED:\n                    throw new InvalidOperationException(\"The combination of internal formats of the attached images violates an implementation-dependent set of restrictions.\");\n                case WebGLFramebufferStatus.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n                    throw new InvalidOperationException(\"Not all attached images have the same dimensions.\");\n\n                default:\n                    throw new InvalidOperationException(\"Framebuffer Incomplete.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteGraphicsDebug.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDebug : GraphicsDebugStrategy\n    {\n\n        internal ConcreteGraphicsDebug(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n        }\n\n\n        public override bool TryDequeueMessage(out GraphicsDebugMessage message)\n        {\n            message = null;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteGraphicsDevice.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDevice : GraphicsDeviceStrategy\n    {\n        private readonly Dictionary<int, ShaderProgram> _programCache = new Dictionary<int, ShaderProgram>();\n\n        internal Dictionary<int, ShaderProgram> ProgramCache { get { return _programCache; } }\n\n        internal WebGLFramebuffer _glDefaultFramebuffer = null;\n\n\n        internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n            : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters)\n        {\n        }\n\n\n        public override void Reset()\n        {\n            PlatformReset(this.PresentationParameters);\n        }\n\n        public override void Reset(PresentationParameters presentationParameters)\n        {\n            PlatformReset(presentationParameters);\n        }\n\n        private void PlatformReset(PresentationParameters presentationParameters)\n        {\n            this.PresentationParameters = presentationParameters;\n\n            ((IPlatformGraphicsContext)_mainContext).Strategy.ApplyRenderTargets(null);\n        }\n\n        public override void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void Present()\n        {\n            base.Present();\n        }\n\n        public override void GetBackBufferData<T>(Rectangle? rect, T[] data, int startIndex, int elementCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void PlatformInitialize()\n        {\n            // set actual backbuffer size\n            PresentationParameters.BackBufferWidth = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GlContext.Canvas.Width;\n            PresentationParameters.BackBufferHeight = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GlContext.Canvas.Height;\n        }\n\n\n        private void ClearProgramCache()\n        {\n            foreach (ShaderProgram shaderProgram in ProgramCache.Values)\n            {\n                shaderProgram.Program.Dispose();\n            }\n            ProgramCache.Clear();\n        }\n\n        internal int GetMaxMultiSampleCount(SurfaceFormat surfaceFormat)\n        {\n            switch (surfaceFormat)\n            {\n                case SurfaceFormat.Color:\n                case SurfaceFormat.Bgr565:\n                case SurfaceFormat.Bgra4444:\n                case SurfaceFormat.Bgra5551:\n                case SurfaceFormat.Single:\n                case SurfaceFormat.HalfSingle:\n                case SurfaceFormat.Vector2:\n                case SurfaceFormat.HalfVector2:\n                case SurfaceFormat.Vector4:\n                case SurfaceFormat.HalfVector4:\n                    // See: PlatformCreateRenderTarget(...)\n                    // for the supported surface types.\n                    break;\n\n                default:\n                    return 0;\n            }\n\n            var GL = ((IPlatformGraphicsContext)CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            int maxMultiSampleCount = 0;\n            if (GL is IWebGL2RenderingContext)\n                maxMultiSampleCount = ((IWebGL2RenderingContext)GL).GetParameter(WebGL2PNameInteger.MAX_SAMPLES);\n\n            return maxMultiSampleCount;\n        }\n\n\n        public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context)\n        {\n            IntPtr handle = PresentationParameters.DeviceWindowHandle;\n            GameWindow gameWindow = BlazorGameWindow.FromHandle(handle);\n            Canvas canvas = ((BlazorGameWindow)gameWindow)._canvas;\n\n            ContextAttributes contextAttributes = new ContextAttributes();\n            contextAttributes.PowerPreference = ContextAttributes.PowerPreferenceType.HighPerformance;\n\n            contextAttributes.Antialias = (PresentationParameters.MultiSampleCount > 0);\n\n            switch (PresentationParameters.DepthStencilFormat)\n            {\n                case DepthFormat.None:\n                    contextAttributes.Depth = false;\n                    contextAttributes.Stencil = false;\n                    break;\n\n                case DepthFormat.Depth16:\n                case DepthFormat.Depth24:\n                    contextAttributes.Depth = true;\n                    contextAttributes.Stencil = false;\n                    break;\n\n                case DepthFormat.Depth24Stencil8:\n                    contextAttributes.Depth = true;\n                    contextAttributes.Stencil = true;\n                    break;\n            }\n\n            switch (PresentationParameters.RenderTargetUsage)\n            {\n                case RenderTargetUsage.PreserveContents:\n                    contextAttributes.PreserveDrawingBuffer = true;\n                    break;\n\n                case RenderTargetUsage.DiscardContents:\n                    contextAttributes.PreserveDrawingBuffer = false;\n                    break;\n\n                case RenderTargetUsage.PlatformContents:\n                    break;\n            }\n\n            IWebGLRenderingContext glContext = null;\n            switch (this.GraphicsProfile)\n            {\n                case GraphicsProfile.Reach:\n                    glContext = canvas.GetContext<IWebGLRenderingContext>(contextAttributes);\n                    break;\n                case GraphicsProfile.HiDef:\n                    glContext = canvas.GetContext<IWebGL2RenderingContext>(contextAttributes);\n                    break;\n                case GraphicsProfile.FL10_0:\n                    glContext = canvas.GetContext<IWebGL2RenderingContext>(contextAttributes);\n                    break;\n\n                default:\n                    throw new NotSupportedException(\"GraphicsProfile \"+ this.GraphicsProfile);\n            }\n\n            return new ConcreteGraphicsContext(context, glContext);\n        }\n\n        public override System.Reflection.Assembly ConcreteAssembly\n        {\n            get { return ReflectionHelpers.GetAssembly(typeof(ConcreteGraphicsDevice)); }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteGraphicsFactory.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcreteGraphicsFactory : GraphicsFactory\n    {\n        public override GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy()\n        {\n            return new ConcreteGraphicsAdaptersProvider();\n        }\n\n        public override GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n        {\n            return new ConcreteGraphicsDevice(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters);\n        }\n\n        public override SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity)\n        {\n            return new SpriteBatcher(graphicsDevice, capacity);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteOcclusionQuery.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteOcclusionQuery : OcclusionQueryStrategy\n    {\n        \n        public override int PixelCount { get { throw new NotImplementedException(); } }\n\n        public override bool IsComplete { get { throw new NotImplementedException(); } }\n\n        internal ConcreteOcclusionQuery(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n        }\n\n        public override void PlatformBegin()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformEnd()\n        {\n            throw new NotImplementedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteRenderTarget2D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTarget2D : ConcreteTexture2D, IRenderTarget2DStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyGL\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n        \n\n        internal ConcreteRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,\n              TextureSurfaceType surfaceType)\n            : base(contextStrategy, width, height, mipMap, preferredSurfaceFormat, arraySize, shared,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            if (surfaceType == TextureSurfaceType.RenderTargetSwapChain)\n            {\n                // Texture will be created by the RenderTargetSwapChain.\n                return;\n            }\n\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, shared);\n\n            PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, _multiSampleCount, shared);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public virtual void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n        WebGLRenderbuffer _glColorBuffer;\n        WebGLRenderbuffer _glDepthBuffer;\n        WebGLRenderbuffer _glStencilBuffer;\n\n        #region IRenderTargetStrategyGL\n        WebGLTexture IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } }\n        WebGLTextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLColorBuffer\n        {\n            get { return _glColorBuffer; }\n            set { _glColorBuffer = value; }\n        }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLDepthBuffer\n        {\n            get { return _glDepthBuffer; }\n            set { _glDepthBuffer = value; }\n        }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLStencilBuffer\n        {\n            get { return _glStencilBuffer; }\n            set { _glStencilBuffer = value; }\n        }\n\n        WebGLTextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice)\n        {\n            if (arraySlice != 0)\n                throw new NotImplementedException(\"arraySlice is not implemented for Texture2D\");\n\n            return _glTarget;\n        }\n        #endregion IRenderTargetStrategyGL\n\n\n        private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared)\n        {\n            base.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared);\n        }\n\n        private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount, bool shared)\n        {\n            ConcreteTexture.PlatformCreateRenderTarget((IRenderTargetStrategyGL)this, contextStrategy, width, height, mipMap, this.Format, preferredDepthFormat, multiSampleCount);\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new NotImplementedException();\n\n            base.PlatformGraphicsContextLost();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy);\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteRenderTarget3D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTarget3D : ConcreteTexture3D, IRenderTarget3DStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyGL\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n\n\n        internal ConcreteRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            : base(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTexture3D_rt(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat);\n\n            // If we don't need a depth buffer then we're done.\n            if (preferredDepthFormat != DepthFormat.None)\n                PlatformConstructRenderTarget3D(contextStrategy, width, height, depth, mipMap, preferredDepthFormat, _multiSampleCount);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n        WebGLRenderbuffer _glColorBuffer;\n        WebGLRenderbuffer _glDepthBuffer;\n        WebGLRenderbuffer _glStencilBuffer;\n\n        #region IRenderTargetStrategyGL\n        WebGLTexture IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } }\n        WebGLTextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLColorBuffer\n        {\n            get { return _glColorBuffer; }\n            set { _glColorBuffer = value; }\n        }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLDepthBuffer\n        {\n            get { return _glDepthBuffer; }\n            set { _glDepthBuffer = value; }\n        }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLStencilBuffer\n        {\n            get { return _glStencilBuffer; }\n            set { _glStencilBuffer = value; }\n        }\n\n        WebGLTextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice)\n        {\n            return _glTarget;\n        }\n        #endregion IRenderTargetStrategyGL\n\n\n        private void PlatformConstructTexture3D_rt(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            base.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format);\n        }\n\n        private void PlatformConstructRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                \n            }\n\n            ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy);\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteRenderTargetCube.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTargetCube : ConcreteTextureCube, IRenderTargetCubeStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyGL\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n\n\n        internal ConcreteRenderTargetCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            : base(contextStrategy, size, mipMap, preferredSurfaceFormat,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTextureCube_rt(contextStrategy, size, mipMap, preferredSurfaceFormat);\n\n            PlatformConstructRenderTargetCube(contextStrategy, mipMap, preferredDepthFormat, _multiSampleCount);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n        WebGLRenderbuffer _glColorBuffer;\n        WebGLRenderbuffer _glDepthBuffer;\n        WebGLRenderbuffer _glStencilBuffer;\n\n        #region IRenderTargetStrategyGL\n        WebGLTexture IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } }\n        WebGLTextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLColorBuffer\n        {\n            get { return _glColorBuffer; }\n            set { _glColorBuffer = value; }\n        }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLDepthBuffer\n        {\n            get { return _glDepthBuffer; }\n            set { _glDepthBuffer = value; }\n        }\n        WebGLRenderbuffer IRenderTargetStrategyGL.GLStencilBuffer\n        {\n            get { return _glStencilBuffer; }\n            set { _glStencilBuffer = value; }\n        }\n\n        WebGLTextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice)\n        {\n            return WebGLTextureTarget.TEXTURE_CUBE_MAP_POSITIVE_X + arraySlice;\n        }\n        #endregion IRenderTargetStrategyGL\n\n\n        private void PlatformConstructTextureCube_rt(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n        {\n            base.PlatformConstructTextureCube(contextStrategy, size, mipMap, format);\n        }\n\n        private void PlatformConstructRenderTargetCube(GraphicsContextStrategy contextStrategy, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy);\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteSamplerStateCollection.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteSamplerStateCollection : SamplerStateCollectionStrategy\n    {\n\n        internal SamplerState[] InternalActualSamplers { get { return base._actualSamplers; } }\n\n\n        internal ConcreteSamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity)\n            : base(contextStrategy, capacity)\n        {\n        }\n\n\n        public override SamplerState this[int index]\n        {\n            get { return base[index]; }\n            set\n            {\n                base[index] = value;\n            }\n        }\n\n        public override void Clear()\n        {\n            base.Clear();\n        }\n\n        public override void Dirty()\n        {\n            base.Dirty();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteTexture.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTexture : GraphicsResourceStrategy, ITextureStrategy\n    {\n        private readonly GraphicsContextStrategy _contextStrategy;\n        private readonly SurfaceFormat _format;        \n        private readonly int _levelCount;\n\n        internal ConcreteTexture(GraphicsContextStrategy contextStrategy, SurfaceFormat format, int levelCount)\n            : base(contextStrategy)\n        {\n            this._contextStrategy = contextStrategy;\n            this._format = format;\n            this._levelCount = levelCount;\n        }\n\n\n        #region ITextureStrategy\n        public SurfaceFormat Format { get { return _format; } }\n        public int LevelCount { get { return _levelCount; } }\n        #endregion ITextureStrategy\n\n\n        internal WebGLTexture _glTexture;\n        internal WebGLTextureTarget _glTarget;\n        internal WebGLInternalFormat _glInternalFormat;\n        internal WebGLFormat _glFormat;\n        internal WebGLTexelType _glType;\n        internal bool _glIsCompressedTexture;\n        internal SamplerState _glLastSamplerState;\n\n        internal static void ToGLSurfaceFormat(SurfaceFormat format,\n                GraphicsContextStrategy contextStrategy,\n                out WebGLInternalFormat glInternalFormat,\n                out WebGLFormat glFormat,\n                out WebGLTexelType glType,\n                out bool glIsCompressedTexture)\n        {\n            bool supportsS3tc = contextStrategy.Capabilities.SupportsS3tc;\n            //bool isGLES2 = GL.BoundApi == GL.RenderApi.ES && graphicsDevice._glMajorVersion == 2;\n            bool supportsFloat = contextStrategy.Capabilities.SupportsFloatTextures;\n\n            switch (format)\n            {\n                case SurfaceFormat.Color:\n                    glInternalFormat      = WebGLInternalFormat.RGBA;\n                    glFormat              = WebGLFormat.RGBA;\n                    glType                = WebGLTexelType.UNSIGNED_BYTE;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Bgr565:\n                    glInternalFormat      = WebGLInternalFormat.RGB;\n                    glFormat              = WebGLFormat.RGB;\n                    glType                = WebGLTexelType.UNSIGNED_SHORT_5_6_5;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Bgra4444:\n\t\t\t\t    glInternalFormat      = WebGLInternalFormat.RGBA;\n                    glFormat              = WebGLFormat.RGBA;\n                    glType                = WebGLTexelType.UNSIGNED_SHORT_4_4_4_4;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Bgra5551:\n                    glInternalFormat      = WebGLInternalFormat.RGBA;\n                    glFormat              = WebGLFormat.RGBA;\n                    glType                = WebGLTexelType.UNSIGNED_SHORT_5_5_5_1;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Alpha8:\n                    glInternalFormat      = WebGLInternalFormat.LUMINANCE;\n                    glFormat              = WebGLFormat.LUMINANCE;\n                    glType                = WebGLTexelType.UNSIGNED_BYTE;\n                    glIsCompressedTexture = false;\n                    break;\n\n                case SurfaceFormat.Dxt1:\n                    if (!supportsS3tc) goto default;\n                    glInternalFormat      = WebGLInternalFormat.COMPRESSED_RGB_S3TC_DXT1_EXT;\n                    glFormat              = (WebGLFormat)glInternalFormat;\n                    glType                = WebGLTexelType.UNSIGNED_BYTE;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Dxt3:\n                    if (!supportsS3tc) goto default;\n                    glInternalFormat      = WebGLInternalFormat.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n                    glFormat              = (WebGLFormat)glInternalFormat;\n                    glType                = WebGLTexelType.UNSIGNED_BYTE;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Dxt5:\n                    if (!supportsS3tc) goto default;\n                    glInternalFormat      = WebGLInternalFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n                    glFormat              = (WebGLFormat)glInternalFormat;\n                    glType                = WebGLTexelType.UNSIGNED_BYTE;\n                    glIsCompressedTexture = true;\n                    break;\n\n                // float formats\n                case SurfaceFormat.HalfSingle:\n                    if (!supportsFloat) goto default;\n                    glInternalFormat      = WebGLInternalFormat.R16F;\n                    glFormat              = WebGLFormat.RED;\n                    glType                = WebGLTexelType.HALF_FLOAT;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Single:\n                    if (!supportsFloat) goto default;\n                    glInternalFormat      = WebGLInternalFormat.R32F;\n                    glFormat              = WebGLFormat.RED;\n                    glType                = WebGLTexelType.FLOAT;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.HalfVector2:\n                    if (!supportsFloat) goto default;\n                    glInternalFormat      = WebGLInternalFormat.RG16F;\n                    glFormat              = WebGLFormat.RG;\n                    glType                = WebGLTexelType.HALF_FLOAT;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Vector2:\n                    if (!supportsFloat) goto default;\n                    glInternalFormat      = WebGLInternalFormat.RG32F;\n                    glFormat              = WebGLFormat.RG;\n                    glType                = WebGLTexelType.FLOAT;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.HalfVector4:\n                    if (!supportsFloat) goto default;\n                    glInternalFormat      = WebGLInternalFormat.RGBA16F;\n                    glFormat              = WebGLFormat.RGBA;\n                    glType                = WebGLTexelType.HALF_FLOAT;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Vector4:\n                    if (!supportsFloat) goto default;\n                    glInternalFormat      = WebGLInternalFormat.RGBA32F;\n                    glFormat              = WebGLFormat.RGBA;\n                    glType                = WebGLTexelType.FLOAT;\n                    glIsCompressedTexture = false;\n                    break;\n\n                default:\n                    throw new PlatformNotSupportedException(string.Format(\"The requested SurfaceFormat `{0}` is not supported.\", format));\n            }\n        }\n\n        internal static void PlatformCreateRenderTarget(IRenderTargetStrategyGL renderTargetGL, GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int multiSampleCount)\n        {\n            //contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().EnsureContextCurrentThread();\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                if (multiSampleCount > 0)\n                {\n                    WebGL2RenderbufferInternalFormat colorInternalFormat = default;\n                    switch (preferredFormat)\n                    {\n                        case SurfaceFormat.Color:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.RGBA8;\n                            break;\n                        case SurfaceFormat.Bgr565:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.RGB565;\n                            break;\n                        case SurfaceFormat.Bgra4444:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.RGBA4;\n                            break;\n                        case SurfaceFormat.Bgra5551:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.RGB5_A1;\n                            break;\n                        case SurfaceFormat.Single:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.R32F;\n                            break;\n                        case SurfaceFormat.HalfSingle:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.R16F;\n                            break;\n                        case SurfaceFormat.Vector2:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.RG32F;\n                            break;\n                        case SurfaceFormat.HalfVector2:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.RG16F;\n                            break;\n                        case SurfaceFormat.Vector4:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.RGBA32F;\n                            break;\n                        case SurfaceFormat.HalfVector4:\n                            colorInternalFormat = WebGL2RenderbufferInternalFormat.RGBA16F;\n                            break;\n\n                        default:\n                            throw new InvalidOperationException(\"format\");\n                    }\n\n                    renderTargetGL.GLColorBuffer = GL.CreateRenderbuffer();\n                    GL.CheckGLError();\n                    GL.BindRenderbuffer(WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLColorBuffer);\n                    GL.CheckGLError();\n\n                    System.Diagnostics.Debug.Assert(GL is IWebGL2RenderingContext); // (GL.RenderbufferStorageMultisample == null)\n                    ((IWebGL2RenderingContext)GL).RenderbufferStorageMultisample(WebGLRenderbufferType.RENDERBUFFER, multiSampleCount, colorInternalFormat, width, height);\n                    GL.CheckGLError();\n                }\n\n                if (preferredDepthFormat != DepthFormat.None)\n                {\n                    WebGL2RenderbufferInternalFormat depthInternalFormat2 = default;\n                    WebGLRenderbufferInternalFormat depthInternalFormat = default;\n                    WebGLRenderbufferInternalFormat stencilInternalFormat = default;\n                    switch (preferredDepthFormat)\n                    {\n                        case DepthFormat.None:\n                            break;\n\n                        case DepthFormat.Depth16:\n                            depthInternalFormat2 = WebGL2RenderbufferInternalFormat.DEPTH_COMPONENT16;\n                            depthInternalFormat = WebGLRenderbufferInternalFormat.DEPTH_COMPONENT16;\n                            break;\n\n                        case DepthFormat.Depth24:\n                            depthInternalFormat2 = WebGL2RenderbufferInternalFormat.DEPTH_COMPONENT24;\n                            depthInternalFormat = WebGLRenderbufferInternalFormat.DEPTH_COMPONENT16;\n                            break;\n\n                        case DepthFormat.Depth24Stencil8:\n                            depthInternalFormat2 = WebGL2RenderbufferInternalFormat.DEPTH24_STENCIL8;\n                            depthInternalFormat = WebGLRenderbufferInternalFormat.DEPTH_STENCIL;\n                            break;\n\n                        default:\n                            throw new InvalidOperationException(\"preferredDepthFormat\");\n                    }\n\n                    if (depthInternalFormat != 0)\n                    {\n                        renderTargetGL.GLDepthBuffer = GL.CreateRenderbuffer();\n                        GL.CheckGLError();\n                        GL.BindRenderbuffer(WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLDepthBuffer);\n                        GL.CheckGLError();\n                        if (multiSampleCount > 0)\n                        {\n                            System.Diagnostics.Debug.Assert(GL is IWebGL2RenderingContext); // (GL.RenderbufferStorageMultisample == null)\n                            ((IWebGL2RenderingContext)GL).RenderbufferStorageMultisample(WebGLRenderbufferType.RENDERBUFFER, multiSampleCount, depthInternalFormat2, width, height);\n                            GL.CheckGLError();\n                        }\n                        else\n                        {\n                            if (GL is IWebGL2RenderingContext)\n                            {\n                                ((IWebGL2RenderingContext)GL).RenderbufferStorage(WebGLRenderbufferType.RENDERBUFFER, depthInternalFormat2, width, height);\n                                GL.CheckGLError();\n                            }\n                            else\n                            {\n                                GL.RenderbufferStorage(WebGLRenderbufferType.RENDERBUFFER, depthInternalFormat, width, height);\n                                GL.CheckGLError();\n                            }\n                        }\n\n                        if (preferredDepthFormat == DepthFormat.Depth24Stencil8)\n                        {\n                            renderTargetGL.GLStencilBuffer = renderTargetGL.GLDepthBuffer;\n                        }\n                    }\n                }\n            }\n            return;\n        }\n\n        internal static void PlatformDeleteRenderTarget(IRenderTargetStrategyGL renderTargetGL, GraphicsContextStrategy contextStrategy)\n        {\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            {\n                if (renderTargetGL.GLColorBuffer != null)\n                {\n                    renderTargetGL.GLColorBuffer.Dispose();\n                    GL.CheckGLError();\n                }\n                if (renderTargetGL.GLStencilBuffer != null && renderTargetGL.GLStencilBuffer != renderTargetGL.GLDepthBuffer)\n                {\n                    renderTargetGL.GLStencilBuffer.Dispose();\n                    GL.CheckGLError();\n                }\n                if (renderTargetGL.GLDepthBuffer != null)\n                {\n                    renderTargetGL.GLDepthBuffer.Dispose();\n                    GL.CheckGLError();\n                }\n\n                contextStrategy.ToConcrete<ConcreteGraphicsContext>().PlatformUnbindRenderTarget(renderTargetGL);\n            }\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            if (_glTexture != null)\n            {\n                _glTexture.Dispose();\n            }\n            _glTexture = null;\n            _glLastSamplerState = null;\n\n            base.PlatformGraphicsContextLost();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_glTexture != null)\n                    _glTexture.Dispose();\n                _glTexture = null;\n                _glLastSamplerState = null;\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteTexture2D.Stream.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\nusing StbImageSharp;\nusing StbImageWriteSharp;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal partial class ConcreteTexture2D\n    {\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, Stream stream)\n            : base(contextStrategy, SurfaceFormat.Color, 1)\n        {\n            this._arraySize = 1;\n\n            // Rewind stream if it is at end\n            if (stream.CanSeek && stream.Length == stream.Position)\n                stream.Seek(0, SeekOrigin.Begin);\n\n            if (stream.CanSeek)\n            {\n                PlatformFromStream_ImageSharp(contextStrategy, stream, out this._width, out this._height);\n            }\n            else\n            {\n                // If stream doesn't provide seek functionality, use MemoryStream instead\n                using (Stream ms = new MemoryStream())\n                {\n                    stream.CopyTo(ms);\n                    ms.Seek(0, SeekOrigin.Begin);\n                    PlatformFromStream_ImageSharp(contextStrategy, ms, out this._width, out this._height);\n                }\n            }\n        }\n\n        private unsafe void PlatformFromStream_ImageSharp(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height)\n        {\n            StbImageSharp.ImageResult result = StbImageSharp.ImageResult.FromStream(stream, StbImageSharp.ColorComponents.RedGreenBlueAlpha);\n            width = result.Width;\n            height = result.Height;\n            ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height);\n\n            this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false);\n            this.SetData<byte>(0, result.Data, 0, result.Data.Length);\n        }\n\n        private static unsafe void ValidateBounds(GraphicsDeviceStrategy deviceStrategy, int width, int height)\n        {\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && (width > 2048 || height > 2048))\n                throw new NotSupportedException(\"Reach profile supports a maximum Texture2D size of 2048\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && (width > 4096 || height > 4096))\n                throw new NotSupportedException(\"HiDef profile supports a maximum Texture2D size of 4096\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 8192 || height > 8192))\n                throw new NotSupportedException(\"FL10_0 profile supports a maximum Texture2D size of 8192\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 8192 || height > 8192))\n                throw new NotSupportedException(\"FL10_1 profile supports a maximum Texture2D size of 8192\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 16384 || height > 16384))\n                throw new NotSupportedException(\"FL11_0 profile supports a maximum Texture2D size of 16384\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 16384 || height > 16384))\n                throw new NotSupportedException(\"FL11_1 profile supports a maximum Texture2D size of 16384\");\n        }\n\n        public unsafe void SaveAsPng(Stream stream, int width, int height)\n        {\n            if (stream == null)\n                throw new ArgumentNullException(\"stream\", \"'stream' cannot be null\");\n            if (width <= 0)\n                throw new ArgumentOutOfRangeException(\"width\", width, \"'width' cannot be less than or equal to zero\");\n            if (height <= 0)\n                throw new ArgumentOutOfRangeException(\"height\", height, \"'height' cannot be less than or equal to zero\");\n\n            Color[] data = TextureHelpers.GetColorData(this);\n            fixed (Color* pData = data)\n            {\n                ImageWriter writer = new ImageWriter();\n                writer.WritePng(pData, width, height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream);\n            }\n        }\n\n        public unsafe void SaveAsJpeg(Stream stream, int width, int height)\n        {\n            if (stream == null)\n                throw new ArgumentNullException(\"stream\", \"'stream' cannot be null\");\n            if (width <= 0)\n                throw new ArgumentOutOfRangeException(\"width\", width, \"'width' cannot be less than or equal to zero\");\n            if (height <= 0)\n                throw new ArgumentOutOfRangeException(\"height\", height, \"'height' cannot be less than or equal to zero\");\n\n            Color[] data = TextureHelpers.GetColorData(this);\n            fixed (Color* pData = data)\n            {\n                ImageWriter writer = new ImageWriter();\n                writer.WriteJpg(pData, width, height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream, 90);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteTexture2D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal partial class ConcreteTexture2D : ConcreteTexture, ITexture2DStrategy\n    {\n        private readonly int _width;\n        private readonly int _height;\n        private readonly int _arraySize;\n\n\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared,\n                                   bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height))\n        {\n            this._width  = width;\n            this._height = height;\n            this._arraySize = arraySize;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height))\n        {\n            this._width  = width;\n            this._height = height;\n            this._arraySize = arraySize;\n\n            this.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared);\n        }\n\n\n        #region ITexture2DStrategy\n        public int Width { get { return _width; } }\n        public int Height { get { return _height; } }\n        public int ArraySize { get { return _arraySize; } }\n\n        public Rectangle Bounds\n        {\n            get { return new Rectangle(0, 0, this._width, this._height); }\n        }\n\n        public IntPtr GetSharedHandle()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void SetData<T>(int level, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                int w, h;\n                TextureHelpers.GetSizeForLevel(Width, Height, level, out w, out h);\n\n                if (startIndex != 0 && !_glIsCompressedTexture)\n                    throw new NotImplementedException(\"startIndex\");\n\n                System.Diagnostics.Debug.Assert(_glTexture != null);\n                ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(WebGLTextureTarget.TEXTURE_2D, _glTexture);\n                GL.CheckGLError();\n\n                GL.PixelStore(WebGLPixelParameter.UNPACK_ALIGNMENT, Math.Min(this.Format.GetSize(), 8));\n                GL.CheckGLError();\n\n                if (_glIsCompressedTexture)\n                {\n                    GL.CompressedTexImage2D(\n                            WebGLTextureTarget.TEXTURE_2D, level, _glInternalFormat, w, h, data, startIndex, elementCount);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    GL.TexImage2D(WebGLTextureTarget.TEXTURE_2D, level, _glInternalFormat, w, h, _glFormat, _glType, data);\n                    GL.CheckGLError();\n                }\n            }\n        }\n\n        public void SetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                if (startIndex != 0)\n                    throw new NotImplementedException(\"startIndex\");\n\n                System.Diagnostics.Debug.Assert(_glTexture != null);\n                ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(WebGLTextureTarget.TEXTURE_2D, _glTexture);\n                GL.CheckGLError();\n\n                GL.PixelStore(WebGLPixelParameter.UNPACK_ALIGNMENT, Math.Min(this.Format.GetSize(), 8));\n\n                if (_glIsCompressedTexture)\n                {\n                    throw new NotImplementedException();\n                }\n                else\n                {\n                    GL.TexSubImage2D(\n                        WebGLTextureTarget.TEXTURE_2D, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height,\n                        _glFormat, _glType, data);\n                    GL.CheckGLError();\n                }\n            }\n        }\n\n        public void GetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                // TODO: check for non renderable formats (formats that can't be attached to FBO)\n\n                WebGLFramebuffer glFramebuffer;\n                glFramebuffer = GL.CreateFramebuffer();\n                GL.CheckGLError();\n                GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glFramebuffer);\n                GL.CheckGLError();\n                GL.FramebufferTexture2D(WebGLFramebufferType.FRAMEBUFFER, WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0, WebGLTextureTarget.TEXTURE_2D, _glTexture);\n                GL.CheckGLError();\n\n                GL.ReadPixels(checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, data);\n                GL.CheckGLError();\n                glFramebuffer.Dispose();\n            }\n        }\n\n        public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect)\n        {\n            int blockWidth, blockHeight;\n            Format.GetBlockSize(out blockWidth, out blockHeight);\n            int blockWidthMinusOne = blockWidth - 1;\n            int blockHeightMinusOne = blockHeight - 1;\n            // round x and y down to next multiple of block size; width and height up to next multiple of block size\n            int roundedWidth = (rect.Width + blockWidthMinusOne) & ~blockWidthMinusOne;\n            int roundedHeight = (rect.Height + blockHeightMinusOne) & ~blockHeightMinusOne;\n            checkedRect = new Rectangle(rect.X & ~blockWidthMinusOne, rect.Y & ~blockHeightMinusOne,\n#if OPENGL\n                    // OpenGL only: The last two mip levels require the width and height to be\n                    // passed as 2x2 and 1x1, but there needs to be enough data passed to occupy\n                    // a full block.\n                    (rect.Width < blockWidth && textureBounds.Width < blockWidth) ? textureBounds.Width : roundedWidth,\n                    (rect.Height < blockHeight && textureBounds.Height < blockHeight) ? textureBounds.Height : roundedHeight);\n#else\n                                        roundedWidth, roundedHeight);\n#endif\n            if (Format == SurfaceFormat.RgbPvrtc2Bpp || Format == SurfaceFormat.RgbaPvrtc2Bpp)\n            {\n                return (Math.Max(checkedRect.Width, 16) * Math.Max(checkedRect.Height, 8) * 2 + 7) / 8;\n            }\n            else if (Format == SurfaceFormat.RgbPvrtc4Bpp || Format == SurfaceFormat.RgbaPvrtc4Bpp)\n            {\n                return (Math.Max(checkedRect.Width, 8) * Math.Max(checkedRect.Height, 8) * 4 + 7) / 8;\n            }\n            else\n            {\n                return roundedWidth * roundedHeight * fSize / (blockWidth * blockHeight);\n            }\n        }\n        #endregion ITexture2DStrategy\n\n\n        internal void PlatformConstructTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared)\n        {\n            _glTarget = WebGLTextureTarget.TEXTURE_2D;\n            ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy,\n                out _glInternalFormat,\n                out _glFormat,\n                out _glType,\n                out _glIsCompressedTexture);\n\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                System.Diagnostics.Debug.Assert(_glTexture == null);\n                _glTexture = GL.CreateTexture();\n                GL.CheckGLError();\n\n                ((IPlatformTextureCollection)contextStrategy.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(WebGLTextureTarget.TEXTURE_2D, _glTexture);\n                GL.CheckGLError();\n\n                // Set mipMap levels\n                //GL2.TexParameter(WebGLTextureTarget.TEXTURE_2D, WebGL2TexParamName.TEXTURE_BASE_LEVEL, 0);\n                //GL.CheckGLError();\n\n\n                int w = width;\n                int h = height;\n                int level = 0;\n                while (true)\n                {\n                    if (_glIsCompressedTexture)\n                    {\n                        int imageSize = 0;\n                        // PVRTC has explicit calculations for imageSize\n                        // https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt\n                        if (format == SurfaceFormat.RgbPvrtc2Bpp || format == SurfaceFormat.RgbaPvrtc2Bpp)\n                        {\n                            imageSize = (Math.Max(w, 16) * Math.Max(h, 8) * 2 + 7) / 8;\n                        }\n                        else if (format == SurfaceFormat.RgbPvrtc4Bpp || format == SurfaceFormat.RgbaPvrtc4Bpp)\n                        {\n                            imageSize = (Math.Max(w, 8) * Math.Max(h, 8) * 4 + 7) / 8;\n                        }\n                        else\n                        {\n                            int blockSize = format.GetSize();\n                            int blockWidth, blockHeight;\n                            format.GetBlockSize(out blockWidth, out blockHeight);\n                            int wBlocks = (w + (blockWidth - 1)) / blockWidth;\n                            int hBlocks = (h + (blockHeight - 1)) / blockHeight;\n                            imageSize = wBlocks * hBlocks * blockSize;\n                        }\n                        byte[] data = new byte[imageSize]; // WebGL CompressedTexImage2D requires data.\n                        GL.CompressedTexImage2D(WebGLTextureTarget.TEXTURE_2D, level, _glInternalFormat, w, h, data);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        GL.TexImage2D(WebGLTextureTarget.TEXTURE_2D, level, _glInternalFormat, w, h, _glFormat, _glType);\n                        GL.CheckGLError();\n                    }\n\n                    if ((w == 1 && h == 1) || !mipMap)\n                        break;\n                    if (w > 1)\n                        w = w / 2;\n                    if (h > 1)\n                        h = h / 2;\n                    ++level;\n                }\n            }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteTexture3D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTexture3D : ConcreteTexture, ITexture3DStrategy\n    {\n        private readonly int _width;\n        private readonly int _height;\n        private readonly int _depth;\n\n\n        internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format,\n                                   bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth))\n        {\n            this._width = width;\n            this._height = height;\n            this._depth = depth;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth))\n        {\n            this._width = width;\n            this._height = height;\n            this._depth = depth;\n\n            this.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format);\n        }\n\n\n        #region ITexture3DStrategy\n        public int Width { get { return _width; } }\n        public int Height { get { return _height; } }\n        public int Depth { get { return _depth; } }\n\n        public void SetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            int width = right - left;\n            int height = bottom - top;\n            int depth = back - front;\n\n            throw new NotImplementedException();\n        }\n\n        public void GetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n             where T : struct\n        {\n            throw new NotImplementedException();\n        }\n        #endregion ITexture3DStrategy\n\n        internal void PlatformConstructTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                \n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteTextureCollection.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteTextureCollection : TextureCollectionStrategy\n    {\n        internal WebGLTextureTarget[] _targets;\n\n        internal uint InternalDirty\n        {\n            get { return base._dirty; }\n            set { base._dirty = value; }\n        }\n\n\n        internal ConcreteTextureCollection(GraphicsContextStrategy contextStrategy, int capacity)\n            : base(contextStrategy, capacity)\n        {\n            _targets = new WebGLTextureTarget[capacity];\n            for (int i = 0; i < _targets.Length; i++)\n                _targets[i] = 0;\n        }\n\n\n        public override void Clear()\n        {\n            base.Clear();\n            for (int i = 0; i < _targets.Length; i++)\n                _targets[i] = 0;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/ConcreteTextureCube.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTextureCube : ConcreteTexture, ITextureCubeStrategy\n    {\n        private readonly int _size;\n\n\n        internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format,\n                                     bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size))\n        {\n            this._size = size;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size))\n        {\n            this._size = size;\n\n            this.PlatformConstructTextureCube(contextStrategy, size, mipMap, format);\n        }\n\n\n        #region ITextureCubeStrategy\n        public int Size { get { return _size; } }\n\n        public void SetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                if (startIndex != 0 && !_glIsCompressedTexture)\n                    throw new NotImplementedException(\"startIndex\");\n\n                ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(WebGLTextureTarget.TEXTURE_CUBE_MAP, _glTexture);\n                GL.CheckGLError();\n\n                WebGLTextureTarget target = ConcreteTextureCube.GetGLCubeFace(face);\n                if (_glIsCompressedTexture)\n                {\n                    throw new NotImplementedException();\n                }\n                else\n                {\n                    GL.TexSubImage2D(target, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, data);\n                    GL.CheckGLError();\n                }\n            }\n        }\n\n        public void GetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            throw new NotImplementedException();\n        }\n\n        public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect)\n        {\n            // round x and y down to next multiple of four; width and height up to next multiple of four\n            int roundedWidth = (rect.Width + 3) & ~0x3;\n            int roundedHeight = (rect.Height + 3) & ~0x3;\n            checkedRect = new Rectangle(rect.X & ~0x3, rect.Y & ~0x3,\n#if OPENGL\n                    // OpenGL only: The last two mip levels require the width and height to be\n                    // passed as 2x2 and 1x1, but there needs to be enough data passed to occupy\n                    // a 4x4 block.\n                    (rect.Width < 4 && textureBounds.Width < 4) ? textureBounds.Width : roundedWidth,\n                    (rect.Height < 4 && textureBounds.Height < 4) ? textureBounds.Height : roundedHeight);\n#else\n                                        roundedWidth, roundedHeight);\n#endif\n            return (roundedWidth * roundedHeight * fSize / 16);\n        }\n        #endregion ITextureCubeStrategy\n\n\n        internal static WebGLTextureTarget GetGLCubeFace(CubeMapFace face)\n        {\n            switch (face)\n            {\n                case CubeMapFace.PositiveX:\n                    return WebGLTextureTarget.TEXTURE_CUBE_MAP_POSITIVE_X;\n                case CubeMapFace.NegativeX:\n                    return WebGLTextureTarget.TEXTURE_CUBE_MAP_NEGATIVE_X;\n                case CubeMapFace.PositiveY:\n                    return WebGLTextureTarget.TEXTURE_CUBE_MAP_POSITIVE_Y;\n                case CubeMapFace.NegativeY:\n                    return WebGLTextureTarget.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n                case CubeMapFace.PositiveZ:\n                    return WebGLTextureTarget.TEXTURE_CUBE_MAP_POSITIVE_Z;\n                case CubeMapFace.NegativeZ:\n                    return WebGLTextureTarget.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        internal void PlatformConstructTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n        {\n            _glTarget = WebGLTextureTarget.TEXTURE_CUBE_MAP;\n\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                _glTexture = GL.CreateTexture();\n                GL.CheckGLError();\n\n                ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(WebGLTextureTarget.TEXTURE_CUBE_MAP, _glTexture);\n                GL.CheckGLError();\n\n                ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy,\n                    out _glInternalFormat,\n                    out _glFormat,\n                    out _glType, \n                    out _glIsCompressedTexture\n                    );\n\n\n                for (int i = 0; i < 6; i++)\n                {\n                    WebGLTextureTarget target = ConcreteTextureCube.GetGLCubeFace((CubeMapFace)i);\n\n                    if (_glIsCompressedTexture)\n                    {\n                         throw new NotImplementedException();\n                    }\n                    else\n                    {\n                        GL.TexImage2D(target, 0, _glInternalFormat, size, size, _glFormat, _glType);\n                        GL.CheckGLError();\n                    }\n                }\n\n                if (mipMap)\n                {\n                    GL.GenerateMipmap(WebGLTextureTarget.TEXTURE_CUBE_MAP);\n                    GL.CheckGLError();\n                }\n            }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/GLExtensions.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    static class GLExtensions\n    {\n        public static WebGLDepthComparisonFunc ToGLComparisonFunction(this CompareFunction compare)\n        {\n            switch (compare)\n            {\n                case CompareFunction.Always:\n                    return WebGLDepthComparisonFunc.ALWAYS;\n                case CompareFunction.Equal:\n                    return WebGLDepthComparisonFunc.EQUAL;\n                case CompareFunction.Greater:\n                    return WebGLDepthComparisonFunc.GREATER;\n                case CompareFunction.GreaterEqual:\n                    return WebGLDepthComparisonFunc.GEQUAL;\n                case CompareFunction.Less:\n                    return WebGLDepthComparisonFunc.LESS;\n                case CompareFunction.LessEqual:\n                    return WebGLDepthComparisonFunc.LEQUAL;\n                case CompareFunction.Never:\n                    return WebGLDepthComparisonFunc.NEVER;\n                case CompareFunction.NotEqual:\n                    return WebGLDepthComparisonFunc.NOTEQUAL;\n\n                default:\n                    throw new ArgumentOutOfRangeException(\"compare\");\n            }\n        }\n\n        internal static int ToGLNumberOfElements(this VertexElementFormat elementFormat)\n        {\n            switch (elementFormat)\n            {\n                case VertexElementFormat.Single:\n                    return 1;\n                case VertexElementFormat.Vector2:\n                    return 2;\n                case VertexElementFormat.Vector3:\n                    return 3;\n                case VertexElementFormat.Vector4:\n                    return 4;\n                case VertexElementFormat.Color:\n                    return 4;\n                case VertexElementFormat.Byte4:\n                    return 4;\n                case VertexElementFormat.Short2:\n                    return 2;\n                case VertexElementFormat.Short4:\n                    return 4;\n\n                case VertexElementFormat.NormalizedShort2:\n                    return 2;\n                case VertexElementFormat.NormalizedShort4:\n                    return 4;\n\n                case VertexElementFormat.HalfVector2:\n                    return 2;\n                case VertexElementFormat.HalfVector4:\n                    return 4;\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        internal static WebGLDataType ToGLVertexAttribPointerType(this VertexElementFormat elementFormat)\n        {\n            switch (elementFormat)\n            {\n                case VertexElementFormat.Single:\n                    return WebGLDataType.FLOAT;\n                case VertexElementFormat.Vector2:\n                    return WebGLDataType.FLOAT;\n                case VertexElementFormat.Vector3:\n                    return WebGLDataType.FLOAT;\n                case VertexElementFormat.Vector4:\n                    return WebGLDataType.FLOAT;\n                case VertexElementFormat.Color:\n                    return WebGLDataType.UBYTE;\n                case VertexElementFormat.Byte4:\n                    return WebGLDataType.UBYTE;\n                case VertexElementFormat.Short2:\n                    return WebGLDataType.SHORT;\n                case VertexElementFormat.Short4:\n                    return WebGLDataType.SHORT;\n                case VertexElementFormat.NormalizedShort2:\n                    return WebGLDataType.SHORT;\n                case VertexElementFormat.NormalizedShort4:\n                    return WebGLDataType.SHORT;\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        internal static bool ToGLVertexAttribNormalized(this VertexElement element)\n        {\n            // TODO: This may or may not be the right behavor.  \n            //\n            // For instance the VertexElementFormat.Byte4 format is not supposed\n            // to be normalized, but this line makes it so.\n            //\n            // The question is in MS XNA are types normalized based on usage or\n            // normalized based to their format?\n            //\n            if (element.VertexElementUsage == VertexElementUsage.Color)\n                return true;\n\n            switch (element.VertexElementFormat)\n            {\n                case VertexElementFormat.NormalizedShort2:\n                case VertexElementFormat.NormalizedShort4:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n\n        [Conditional(\"DEBUG\")]\n        internal static void CheckGLError(this IWebGLRenderingContext GL)\n        {\n            WebGLErrorCode error = GL.GetError();\n            if (error == WebGLErrorCode.NO_ERROR)\n                return;\n\n            string errorMsg = String.Format(\"GL_ERROR: {0} ({1:X4})\", error, (int)error);\n            Console.WriteLine(errorMsg);\n            throw new InvalidOperationException(\"GL.GetError() returned \" + errorMsg);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/IRenderTargetStrategyGL.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing nkast.Wasm.Canvas.WebGL;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal interface IRenderTargetStrategyGL\n    {\n        WebGLTexture GLTexture { get; }\n        WebGLTextureTarget GLTarget { get; }\n        WebGLRenderbuffer GLColorBuffer { get; set; }\n        WebGLRenderbuffer GLDepthBuffer { get; set; }\n        WebGLRenderbuffer GLStencilBuffer { get; set; }\n\n        WebGLTextureTarget GetFramebufferTarget(int arraySlice);\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Shader/ConcreteConstantBuffer.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    internal sealed class ConcreteConstantBuffer : ConstantBufferStrategy\n    {\n        private ShaderProgram _shaderProgram = null;\n        private WebGLUniformLocation _location;\n\n        static ConcreteConstantBuffer _lastConstantBufferApplied = null;\n\n\n        public ConcreteConstantBuffer(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats)\n            : base(contextStrategy, name, parameters, offsets, sizeInBytes, integersAsFloats)\n        {\n\n        }\n\n        private ConcreteConstantBuffer(ConcreteConstantBuffer source)\n            : base(source)\n        {\n        \n        }\n\n        public override object Clone()\n        {\n            return new ConcreteConstantBuffer(this);\n        }\n\n        internal unsafe void PlatformApply(ConcreteGraphicsContext ccontextStrategy, ShaderProgram shaderProgram, int slot)\n        {\n            System.Diagnostics.Debug.Assert(slot == 0);\n\n            bool isSameShaderProgram = _shaderProgram == shaderProgram;\n            if (!isSameShaderProgram)\n            {\n                // If the program changed then lookup the uniform location again.\n                WebGLUniformLocation location = ccontextStrategy.GetUniformLocation(shaderProgram, Name);\n                if (location == null)\n                    return;\n\n                _shaderProgram = shaderProgram;\n                _location = location;\n            }\n\n            if (base.Dirty\n            // If the shader program changed then apply the buffer.\n            ||  !isSameShaderProgram\n            // If the shader program is the same, the effect may still be different and have different values in the buffer\n            ||  !Object.ReferenceEquals(this, ConcreteConstantBuffer._lastConstantBufferApplied)\n            )\n            {\n                var GL = ccontextStrategy.GL;\n\n                fixed (void* bytePtr = this.BufferData)\n                {\n                    // TODO: We need to know the type of buffer float/int/bool\n                    // and cast this correctly... else it doesn't work as i guess\n                    // GL is checking the type of the uniform.\n\n                    System.Diagnostics.Debug.Assert((this.BufferData.Length % 16) == 0);\n                    GL.Uniform4fv(_location, this.BufferData);\n                    GL.CheckGLError();\n                }\n\n                base.Dirty = false;\n                ConcreteConstantBuffer._lastConstantBufferApplied = this;\n            }\n        }\n\n        public override void PlatformContextLost()\n        {\n            // Force the uniform location to be looked up again\n            _shaderProgram = null;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Shader/ConcreteConstantBufferCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteConstantBufferCollection : ConstantBufferCollectionStrategy\n    {\n        private uint _valid;\n\n        internal uint InternalValid { get { return this._valid; } }\n\n        internal ConcreteConstantBufferCollection(int capacity)\n            : base(capacity)\n        {\n            // hard limit of 32 because of _valid flags being 32bits.\n            if (capacity > 32)\n                throw new ArgumentOutOfRangeException(\"capacity\");\n\n            _valid = 0;\n        }\n\n        public override ConstantBuffer this[int index]\n        {\n            get { return base[index]; }\n            set\n            {\n                if (base[index] != value)\n                {\n                    uint mask = ((uint)1) << index;\n                    base[index] = value;\n\n                    if (value != null)\n                        _valid |= mask;\n                    else\n                        _valid &= ~mask;\n                }\n            }\n        }\n\n        public override void Clear()\n        {\n            for (int slot = 0; slot < base.Length; slot++)\n                base[slot] = null;\n\n            _valid = 0;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Shader/ConcretePixelShader.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcretePixelShader : ConcreteShader\n    {\n\n        internal ConcretePixelShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            base.CreateShader(contextStrategy, WebGLShaderType.FRAGMENT, shaderVersion, shaderBytecode);\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n\n            base.PlatformGraphicsContextLost();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Shader/ConcreteShader.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Text.RegularExpressions;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class ConcreteShader : ShaderStrategy\n    {\n        // The shader handle.\n        private WebGLShader _shaderHandle = null;\n\n        internal WebGLShader ShaderHandle { get { return _shaderHandle; } }\n\n        internal ConcreteShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            GraphicsProfile graphicsProfile = this.GraphicsDeviceStrategy.GraphicsProfile;\n            ShaderVersion maxVersion = MaxShaderVersions[graphicsProfile];\n            if (shaderVersion != default\n            &&  shaderVersion > maxVersion)\n            {\n                throw new NotSupportedException(\n                    $\"Shader model {shaderVersion} is not supported by the current graphics profile '{graphicsProfile}'.\");\n            }\n\n        }\n\n        internal void CreateShader(GraphicsContextStrategy contextStrategy, WebGLShaderType shaderType, ShaderVersion shaderVersion, byte[] shaderBytecode)\n        {\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                _shaderHandle = GL.CreateShader(shaderType);\n                GL.CheckGLError();\n\n                if (shaderVersion == default) // Handle legacy MGFX\n                {\n                    if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.WebGL\n                    &&  this.GraphicsDevice.GraphicsProfile >= GraphicsProfile.HiDef)\n                    {\n                        string glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode);\n                        // GLES 3.00 is required for dFdx/dFdy\n                        string glsl300esCode = ConvertGLSLToGLSL300es(shaderType, glslCode);\n\n                        GL.ShaderSource(_shaderHandle, glsl300esCode);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        string glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode);\n                        GL.ShaderSource(_shaderHandle, glslCode);\n                        GL.CheckGLError();\n                    }\n                }\n                else // Handle KNIFX\n                {\n                    int bytecodeOffset;\n\n                    if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.GLES\n                    ||  this.GraphicsDevice.Adapter.Backend == GraphicsBackend.WebGL)\n                    {\n                        if (this.GraphicsDevice.GraphicsProfile >= GraphicsProfile.HiDef)\n                        {\n                            bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 3, minor: 0, es: true);\n                        }\n                        else\n                        {\n                            bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 1, minor: 0, es: false);\n                        }\n                    }\n                    else //if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.OpenGL)\n                    {\n                        bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 1, minor: 1, es: false);\n                    }\n\n                    int bytecodeLength = BitConverter.ToInt32(shaderBytecode, bytecodeOffset); bytecodeOffset += 4;\n                    string glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode, bytecodeOffset, bytecodeLength);\n                    GL.ShaderSource(_shaderHandle, glslCode);\n                    GL.CheckGLError();\n                }\n\n                GL.CompileShader(_shaderHandle);\n                GL.CheckGLError();\n                bool compiled = false;\n                compiled = GL.GetShaderParameter(_shaderHandle, WebGLShaderStatus.COMPILE);\n                GL.CheckGLError();\n                if (compiled != true)\n                {\n                    string log = GL.GetShaderInfoLog(_shaderHandle);\n                    _shaderHandle.Dispose();\n                    _shaderHandle = null;\n\n                    throw new InvalidOperationException(\"Shader Compilation Failed.\"\n                        + Environment.NewLine + log);\n                }\n            }\n        }\n\n        private int FindShaderByteCode(byte[] shaderBytecode, int major, int minor, bool es)\n        {\n            int pos = 0;\n            \n            short reserved0 = BitConverter.ToInt16(shaderBytecode, pos); pos += 2;\n            if (reserved0 != 0)\n                throw new Exception(\"Invalid shader bytecode\");\n\n            short count = BitConverter.ToInt16(shaderBytecode, pos); pos += 2;\n\n            for (int i = 0; i < count; i++)\n            {\n                int major0 = shaderBytecode[pos]; pos += 1;\n                int minor0 = shaderBytecode[pos]; pos += 1;\n                bool es0 = BitConverter.ToBoolean(shaderBytecode, pos); pos += 1;\n                int bytecodeOffset0 = BitConverter.ToInt32(shaderBytecode, pos); pos += 4;\n\n                if (major == major0\n                &&  minor == minor0\n                &&  es == es0)\n                {\n                    return bytecodeOffset0;\n                }\n            }\n\n            throw new InvalidOperationException(\"GLSL bytecode not found.\");\n        }\n\n        static Regex rgxOES = new Regex(\n                @\"^#extension GL_OES_standard_derivatives : enable\\n\", RegexOptions.Multiline);\n        static Regex rgxPrecision = new Regex(\n                @\"precision mediump (float|int);\", RegexOptions.Multiline);\n        static Regex rgxAttribute = new Regex(\n                @\"^attribute(?=\\s)\", RegexOptions.Multiline);\n        static Regex rgxVarying = new Regex(\n                @\"^varying(?=\\s)\", RegexOptions.Multiline);\n        static Regex rgxFragColor = new Regex(\n                @\"^#define (\\w+) gl_FragColor\", RegexOptions.Multiline);\n        static Regex rgxFragData = new Regex(\n                @\"^#define (\\w+) gl_FragData\\[(\\d+)\\]\", RegexOptions.Multiline);\n        static Regex rgxTexture = new Regex(\n                @\"texture(2D|3D|Cube)(?=\\()\", RegexOptions.Multiline);\n\n        private string ConvertGLSLToGLSL300es(WebGLShaderType shaderType, string glslCode)\n        {\n            switch (shaderType)\n            {\n                case WebGLShaderType.VERTEX:\n                    {\n                        glslCode = rgxVarying.Replace(glslCode, \"out\");\n                    }\n                    break;\n\n                case WebGLShaderType.FRAGMENT:\n                    {\n                        glslCode = rgxOES.Replace(glslCode, \"\");\n                        glslCode = rgxVarying.Replace(glslCode, \"in\");\n                        glslCode = rgxFragColor.Replace(glslCode, \"out vec4 $1;\");\n                        glslCode = rgxFragData .Replace(glslCode, \"layout(location=$2) out vec4 $1;\");\n                    }\n                    break;\n            }\n\n            glslCode = rgxPrecision.Replace(glslCode, \"precision highp $1;\");\n            glslCode = rgxAttribute.Replace(glslCode, \"in\");\n            glslCode = rgxTexture.Replace(glslCode, \"texture\");\n\n            glslCode = \"#version 300 es\\n\"\n                     + glslCode;\n\n            return glslCode;\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            if (_shaderHandle != null)\n            {\n                _shaderHandle.Dispose();\n                _shaderHandle = null;\n            }\n\n            base.PlatformGraphicsContextLost();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_shaderHandle != null)\n                {\n                    _shaderHandle.Dispose();\n                    _shaderHandle = null;\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Shader/ConcreteVertexShader.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcreteVertexShader : ConcreteShader\n    {\n        private readonly Dictionary<VertexElement[], VertexDeclarationAttributeInfo> _vertexAttribInfoCache = new Dictionary<VertexElement[], VertexDeclarationAttributeInfo>();\n\n        internal ConcreteVertexShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            base.CreateShader(contextStrategy, WebGLShaderType.VERTEX, shaderVersion, shaderBytecode);\n        }\n\n        private int GetAttributeLocation(VertexElementUsage usage, int index)\n        {\n            for (int i = 0; i < Attributes.Length; i++)\n            {\n                if ((Attributes[i].usage == usage) && (Attributes[i].index == index))\n                    return Attributes[i].location;\n            }\n            return -1;\n        }\n\n        internal VertexDeclarationAttributeInfo GetVertexAttribInfo(ConcreteGraphicsContext concreteGraphicsContext, VertexDeclaration vertexDeclaration)\n        {\n            VertexElement[] vertexElements = ((IPlatformVertexDeclaration)vertexDeclaration).InternalVertexElements;\n\n            VertexDeclarationAttributeInfo vertexAttribInfo;\n            if (_vertexAttribInfoCache.TryGetValue(vertexElements, out vertexAttribInfo))\n                return vertexAttribInfo;\n\n            int maxVertexBufferSlots = concreteGraphicsContext.Capabilities.MaxVertexBufferSlots;\n            vertexAttribInfo = ConcreteVertexShader.CreateVertexAttribInfo(this, vertexElements, maxVertexBufferSlots);\n            _vertexAttribInfoCache.Add(vertexElements, vertexAttribInfo);\n            return vertexAttribInfo;\n        }\n\n        private static VertexDeclarationAttributeInfo CreateVertexAttribInfo(ConcreteVertexShader vertexShaderStrategy, VertexElement[] vertexElements, int maxVertexBufferSlots)\n        {\n            // Get the vertex attribute info and cache it\n            VertexDeclarationAttributeInfo attrInfo = new VertexDeclarationAttributeInfo(maxVertexBufferSlots);\n\n            for (int v = 0; v < vertexElements.Length; v++)\n            {\n                int attributeLocation = vertexShaderStrategy.GetAttributeLocation(vertexElements[v].VertexElementUsage, vertexElements[v].UsageIndex);\n                // XNA appears to ignore usages it can't find a match for, so we will do the same\n                if (attributeLocation < 0)\n                    continue;\n\n                VertexDeclarationAttributeInfoElement vertexAttribInfoElement = new VertexDeclarationAttributeInfoElement();\n                vertexAttribInfoElement.NumberOfElements = vertexElements[v].VertexElementFormat.ToGLNumberOfElements();\n                vertexAttribInfoElement.VertexAttribPointerType = vertexElements[v].VertexElementFormat.ToGLVertexAttribPointerType();\n                vertexAttribInfoElement.Normalized = vertexElements[v].ToGLVertexAttribNormalized();\n                vertexAttribInfoElement.Offset = vertexElements[v].Offset;\n                vertexAttribInfoElement.AttributeLocation = attributeLocation;\n\n                attrInfo.Elements.Add(vertexAttribInfoElement);\n                attrInfo.EnabledAttributes[vertexAttribInfoElement.AttributeLocation] = true;\n            }\n\n            return attrInfo;\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n\n            base.PlatformGraphicsContextLost();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Shader/ShaderProgram.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ShaderProgram\n    {\n        public readonly WebGLProgram Program;\n\n        internal readonly Dictionary<string, WebGLUniformLocation> _uniformLocationCache = new Dictionary<string, WebGLUniformLocation>();\n\n        public ShaderProgram(WebGLProgram program)\n        {\n            Program = program;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/States/ConcreteBlendState.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteBlendState : ResourceBlendStateStrategy\n    {\n\n        internal ConcreteBlendState(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n        internal void PlatformApplyState(ConcreteGraphicsContext context, bool force = false)\n        {\n            var GL = context.GL;\n\n            bool blendEnabled = !(this.ColorSourceBlend == Blend.One &&\n                                  this.ColorDestinationBlend == Blend.Zero &&\n                                  this.AlphaSourceBlend == Blend.One &&\n                                  this.AlphaDestinationBlend == Blend.Zero);\n\n            if (force ||\n                blendEnabled != context._lastBlendEnable)\n            {\n                if (blendEnabled)\n                    GL.Enable(WebGLCapability.BLEND);\n                else\n                    GL.Disable(WebGLCapability.BLEND);\n                GL.CheckGLError();\n                context._lastBlendEnable = blendEnabled;\n            }\n\n            if (!this.IndependentBlendEnable)\n            {\n                if (force ||\n                    this.ColorBlendFunction != context._lastBlendState.ColorBlendFunction ||\n                    this.AlphaBlendFunction != context._lastBlendState.AlphaBlendFunction)\n                {\n                    GL.BlendEquationSeparate(\n                        ToGLBlendEquationMode(this.ColorBlendFunction),\n                        ToGLBlendEquationMode(this.AlphaBlendFunction));\n                    GL.CheckGLError();\n                    for (int i = 0; i < 4; i++)\n                    {\n                        context._lastBlendState[i].ColorBlendFunction = this.ColorBlendFunction;\n                        context._lastBlendState[i].AlphaBlendFunction = this.AlphaBlendFunction;\n                    }\n                }\n\n                if (force ||\n                    this.ColorSourceBlend != context._lastBlendState.ColorSourceBlend ||\n                    this.ColorDestinationBlend != context._lastBlendState.ColorDestinationBlend ||\n                    this.AlphaSourceBlend != context._lastBlendState.AlphaSourceBlend ||\n                    this.AlphaDestinationBlend != context._lastBlendState.AlphaDestinationBlend)\n                {\n                    GL.BlendFuncSeparate(\n                        ToGLBlendFunc(this.ColorSourceBlend),\n                        ToGLBlendFunc(this.ColorDestinationBlend),\n                        ToGLBlendFunc(this.AlphaSourceBlend),\n                        ToGLBlendFunc(this.AlphaDestinationBlend));\n                    GL.CheckGLError();\n                    for (int i = 0; i < 4; i++)\n                    {\n                        context._lastBlendState[i].ColorSourceBlend = this.ColorSourceBlend;\n                        context._lastBlendState[i].ColorDestinationBlend = this.ColorDestinationBlend;\n                        context._lastBlendState[i].AlphaSourceBlend = this.AlphaSourceBlend;\n                        context._lastBlendState[i].AlphaDestinationBlend = this.AlphaDestinationBlend;\n                    }\n                }\n            }\n            else // _strategy.IndependentBlendEnable == true\n            {\n                throw new NotImplementedException();\n            }\n\n            if (force ||\n                this.ColorWriteChannels != context._lastBlendState.ColorWriteChannels)\n            {\n                GL.ColorMask(\n                    (this.ColorWriteChannels & ColorWriteChannels.Red) != 0,\n                    (this.ColorWriteChannels & ColorWriteChannels.Green) != 0,\n                    (this.ColorWriteChannels & ColorWriteChannels.Blue) != 0,\n                    (this.ColorWriteChannels & ColorWriteChannels.Alpha) != 0);\n                GL.CheckGLError();\n                context._lastBlendState.ColorWriteChannels = this.ColorWriteChannels;\n            }\n        }\n\n        private static WebGLEquationFunc ToGLBlendEquationMode(BlendFunction function)\n        {\n            switch (function)\n            {\n                case BlendFunction.Add:\n                    return WebGLEquationFunc.ADD;\n                case BlendFunction.ReverseSubtract:\n                    return WebGLEquationFunc.REVERSE_SUBTRACT;\n                case BlendFunction.Subtract:\n                    return WebGLEquationFunc.SUBTRACT;\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        private static WebGLBlendFunc ToGLBlendFunc(Blend blend)\n        {\n            switch (blend)\n            {\n                case Blend.Zero:\n                    return WebGLBlendFunc.ZERO;\n                case Blend.One:\n                    return WebGLBlendFunc.ONE;\n                case Blend.BlendFactor:\n                    return WebGLBlendFunc.CONSTANT_COLOR;\n                case Blend.DestinationAlpha:\n                    return WebGLBlendFunc.DST_ALPHA;\n                case Blend.DestinationColor:\n                    return WebGLBlendFunc.DST_COLOR;\n                case Blend.InverseBlendFactor:\n                    return WebGLBlendFunc.ONE_MINUS_CONSTANT_COLOR;\n                case Blend.InverseDestinationAlpha:\n                    return WebGLBlendFunc.ONE_MINUS_DST_ALPHA;\n                case Blend.InverseDestinationColor:\n                    return WebGLBlendFunc.ONE_MINUS_DST_COLOR;\n                case Blend.InverseSourceAlpha:\n                    return WebGLBlendFunc.ONE_MINUS_SRC_ALPHA;\n                case Blend.InverseSourceColor:\n                    return WebGLBlendFunc.ONE_MINUS_SRC_COLOR;\n                case Blend.SourceAlpha:\n                    return WebGLBlendFunc.SRC_ALPHA;\n                case Blend.SourceAlphaSaturation:\n                    return WebGLBlendFunc.SRC_ALPHA_SATURATE;\n                case Blend.SourceColor:\n                    return WebGLBlendFunc.SRC_COLOR;\n\n                default:\n                    throw new ArgumentOutOfRangeException(\"blend\", \"The specified blend function is not implemented.\");\n            }\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/States/ConcreteDepthStencilState.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteDepthStencilState : ResourceDepthStencilStateStrategy\n    {\n\n        internal ConcreteDepthStencilState(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n\n        internal void PlatformApplyState(ConcreteGraphicsContext context, bool force = false)\n        {\n            var GL = context.GL;\n\n            if (force ||\n                this.DepthBufferEnable != context._lastDepthStencilState.DepthBufferEnable)\n            {\n                if (!DepthBufferEnable)\n                {\n                    GL.Disable(WebGLCapability.DEPTH_TEST);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    // enable Depth Buffer\n                    GL.Enable(WebGLCapability.DEPTH_TEST);\n                    GL.CheckGLError();\n                }\n                context._lastDepthStencilState.DepthBufferEnable = this.DepthBufferEnable;\n            }\n\n            if (force ||\n                this.DepthBufferFunction != context._lastDepthStencilState.DepthBufferFunction)\n            {\n                GL.DepthFunc(DepthBufferFunction.ToGLComparisonFunction());\n                GL.CheckGLError();\n                context._lastDepthStencilState.DepthBufferFunction = this.DepthBufferFunction;\n            }\n\n            if (force ||\n                this.DepthBufferWriteEnable != context._lastDepthStencilState.DepthBufferWriteEnable)\n            {\n                GL.DepthMask(DepthBufferWriteEnable);\n                GL.CheckGLError();\n                context._lastDepthStencilState.DepthBufferWriteEnable = this.DepthBufferWriteEnable;\n            }\n\n            if (force ||\n                this.StencilEnable != context._lastDepthStencilState.StencilEnable)\n            {\n                if (!StencilEnable)\n                {\n                    GL.Disable(WebGLCapability.STENCIL_TEST);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    // enable Stencil\n                    GL.Enable(WebGLCapability.STENCIL_TEST);\n                    GL.CheckGLError();\n                }\n                context._lastDepthStencilState.StencilEnable = this.StencilEnable;\n            }\n\n            // set function\n            if (this.TwoSidedStencilMode)\n            {\n                throw new NotImplementedException();\n            }\n            else\n            {\n                if (force ||\n\t\t\t\t\tthis.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode ||\n\t\t\t\t\tthis.StencilFunction != context._lastDepthStencilState.StencilFunction ||\n\t\t\t\t\tthis.ReferenceStencil != context._lastDepthStencilState.ReferenceStencil ||\n\t\t\t\t\tthis.StencilMask != context._lastDepthStencilState.StencilMask)\n\t\t\t\t{\n                    GL.StencilFunc(this.StencilFunction.ToGLComparisonFunction(), ReferenceStencil, StencilMask);\n                    GL.CheckGLError();\n                    context._lastDepthStencilState.StencilFunction = this.StencilFunction;\n                    context._lastDepthStencilState.ReferenceStencil = this.ReferenceStencil;\n                    context._lastDepthStencilState.StencilMask = this.StencilMask;\n                }\n\n                if (force ||\n                    this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode ||\n                    this.StencilFail != context._lastDepthStencilState.StencilFail ||\n                    this.StencilDepthBufferFail != context._lastDepthStencilState.StencilDepthBufferFail ||\n                    this.StencilPass != context._lastDepthStencilState.StencilPass)\n                {\n                    GL.StencilOp(ToGLStencilOp(StencilFail),\n                                 ToGLStencilOp(StencilDepthBufferFail),\n                                 ToGLStencilOp(StencilPass));\n                    GL.CheckGLError();\n                    context._lastDepthStencilState.StencilFail = this.StencilFail;\n                    context._lastDepthStencilState.StencilDepthBufferFail = this.StencilDepthBufferFail;\n                    context._lastDepthStencilState.StencilPass = this.StencilPass;\n                }\n            }\n\n            context._lastDepthStencilState.TwoSidedStencilMode = this.TwoSidedStencilMode;\n\n            if (force ||\n                this.StencilWriteMask != context._lastDepthStencilState.StencilWriteMask)\n            {\n                GL.StencilMask(this.StencilWriteMask);\n                GL.CheckGLError();\n                context._lastDepthStencilState.StencilWriteMask = this.StencilWriteMask;\n            }\n        }\n\n        private static WebGLStencilOpFunc ToGLStencilOp(StencilOperation operation)\n        {\n            switch (operation)\n            {\n                case StencilOperation.Keep:\n                    return WebGLStencilOpFunc.KEEP;\n                case StencilOperation.Decrement:\n                    return WebGLStencilOpFunc.DECR_WRAP;\n                case StencilOperation.DecrementSaturation:\n                    return WebGLStencilOpFunc.DECR;\n                case StencilOperation.IncrementSaturation:\n                    return WebGLStencilOpFunc.INCR;\n                case StencilOperation.Increment:\n                    return WebGLStencilOpFunc.INCR_WRAP;\n                case StencilOperation.Invert:\n                    return WebGLStencilOpFunc.INVERT;\n                case StencilOperation.Replace:\n                    return WebGLStencilOpFunc.REPLACE;\n                case StencilOperation.Zero:\n                    return WebGLStencilOpFunc.ZERO;\n\n                default:\n                    throw new ArgumentOutOfRangeException(\"operation\");\n            }\n        }\n  \n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/States/ConcreteRasterizerState.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRasterizerState : ResourceRasterizerStateStrategy\n    {\n\n        internal ConcreteRasterizerState(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n\n        internal void PlatformApplyState(ConcreteGraphicsContext context, bool force = false)\n        {\n            var GL = context.GL;\n\n            if (force)\n            {\n                // Turn off dithering to make sure data returned by Texture.GetData is accurate\n                GL.Disable(WebGLCapability.DITHER);\n            }\n\n            // When rendering offscreen the faces change order.\n            bool offscreen = context.FramebufferRequireFlippedY;\n\n            switch (CullMode)\n            {\n                case CullMode.None:\n                    GL.Disable(WebGLCapability.CULL_FACE);\n                    GL.CheckGLError();\n                    break;\n\n                case CullMode.CullClockwiseFace:\n                    GL.Enable(WebGLCapability.CULL_FACE);\n                    GL.CheckGLError();\n                    GL.CullFace(WebGLCullFaceMode.BACK);\n                    GL.CheckGLError();\n                    if (offscreen)\n                        GL.FrontFace(WebGLWinding.CW);\n                    else\n                        GL.FrontFace(WebGLWinding.CCW);\n                    GL.CheckGLError();\n                    break;\n\n                case CullMode.CullCounterClockwiseFace:\n                    GL.Enable(WebGLCapability.CULL_FACE);\n                    GL.CheckGLError();\n                    GL.CullFace(WebGLCullFaceMode.BACK);\n                    GL.CheckGLError();\n                    if (offscreen)\n                        GL.FrontFace(WebGLWinding.CCW);\n                    else\n                        GL.FrontFace(WebGLWinding.CW);\n                    GL.CheckGLError();\n                    break;\n\n                default:\n                    throw new InvalidOperationException(\"CullMode\");\n            }\n\n            if (FillMode == FillMode.WireFrame)\n                throw new PlatformNotSupportedException();\n\n            if (force ||\n                this.ScissorTestEnable != context._lastRasterizerState.ScissorTestEnable)\n\t\t\t{\n\t\t\t    if (ScissorTestEnable)\n\t\t\t\t    GL.Enable(WebGLCapability.SCISSOR_TEST);\n\t\t\t    else\n\t\t\t\t    GL.Disable(WebGLCapability.SCISSOR_TEST);\n                GL.CheckGLError();\n                context._lastRasterizerState.ScissorTestEnable = this.ScissorTestEnable;\n            }\n\n            if (force || \n                this.DepthBias != context._lastRasterizerState.DepthBias ||\n                this.SlopeScaleDepthBias != context._lastRasterizerState.SlopeScaleDepthBias)\n            {\n                if (this.DepthBias != 0 || this.SlopeScaleDepthBias != 0)\n                {\n                    // from the docs it seems this works the same as for Direct3D\n                    // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml\n                    // explanation for Direct3D is  in https://github.com/MonoGame/MonoGame/issues/4826\n                    DepthFormat activeDepthFormat;\n                    if (context.IsRenderTargetBound)\n                        activeDepthFormat = ((IRenderTarget)context.CurrentRenderTargetBindings[0].RenderTarget).DepthStencilFormat;\n                    else\n                        activeDepthFormat = base.GraphicsDeviceStrategy.PresentationParameters.DepthStencilFormat;\n\n                    int depthMul;\n                    switch (activeDepthFormat)\n                    {\n                        case DepthFormat.None:\n                            depthMul = 0;\n                            break;\n                        case DepthFormat.Depth16:\n                            depthMul = 1 << 16 - 1;\n                            break;\n                        case DepthFormat.Depth24:\n                        case DepthFormat.Depth24Stencil8:\n                            depthMul = 1 << 24 - 1;\n                            break;\n\n                        default:\n                            throw new ArgumentOutOfRangeException();\n                    }\n                    GL.Enable(WebGLCapability.POLYGON_OFFSET_FILL);\n                    GL.CheckGLError();\n                    GL.PolygonOffset(this.SlopeScaleDepthBias, this.DepthBias * depthMul);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    GL.Disable(WebGLCapability.POLYGON_OFFSET_FILL);\n                    GL.CheckGLError();\n                }\n                context._lastRasterizerState.DepthBias = this.DepthBias;\n                context._lastRasterizerState.SlopeScaleDepthBias = this.SlopeScaleDepthBias;\n            }\n\n            if (context.Capabilities.SupportsDepthClamp &&\n                (force ||\n                 this.DepthClipEnable != context._lastRasterizerState.DepthClipEnable))\n            {\n                throw new PlatformNotSupportedException();\n                context._lastRasterizerState.DepthClipEnable = this.DepthClipEnable;\n            }\n\n            // TODO: Implement MultiSampleAntiAlias\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/States/ConcreteSamplerState.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteSamplerState : ResourceSamplerStateStrategy\n    {\n\n        internal ConcreteSamplerState(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n\n      internal void PlatformApplyState(ConcreteGraphicsContext cgraphicsContext, WebGLTextureTarget target, bool useMipmaps = false)\n        {\n            Debug.Assert(GraphicsDevice == ((IPlatformGraphicsContext)cgraphicsContext.Context).DeviceStrategy.Device, \"The state was created for a different device!\");\n\n            var GL = cgraphicsContext.GL;\n\n            // texture filtering\n            float textureMaxAnisotropy;\n            WebGLTexParam textureMinFilter;\n            WebGLTexParam textureMaxFilter; \n            switch (Filter)\n            {\n                case TextureFilter.Point:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.NEAREST_MIPMAP_NEAREST : WebGLTexParam.NEAREST);\n                    textureMaxFilter = WebGLTexParam.NEAREST;\n                    break;\n                case TextureFilter.Linear:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_LINEAR : WebGLTexParam.LINEAR);\n                    textureMaxFilter = WebGLTexParam.LINEAR;\n                    break;\n                case TextureFilter.Anisotropic:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_LINEAR : WebGLTexParam.LINEAR);\n                    textureMaxFilter = WebGLTexParam.LINEAR;\n                    break;\n                case TextureFilter.PointMipLinear:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.NEAREST_MIPMAP_LINEAR : WebGLTexParam.NEAREST);\n                    textureMaxFilter = WebGLTexParam.NEAREST;\n                    break;\n                case TextureFilter.LinearMipPoint:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_NEAREST : WebGLTexParam.LINEAR);\n                    textureMaxFilter = WebGLTexParam.LINEAR;\n                    break;\n                case TextureFilter.MinLinearMagPointMipLinear:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_LINEAR : WebGLTexParam.LINEAR);\n                    textureMaxFilter = WebGLTexParam.NEAREST;\n                    break;\n                case TextureFilter.MinLinearMagPointMipPoint:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_NEAREST : WebGLTexParam.LINEAR);\n                    textureMaxFilter = WebGLTexParam.NEAREST;\n                    break;\n                case TextureFilter.MinPointMagLinearMipLinear:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.NEAREST_MIPMAP_LINEAR : WebGLTexParam.NEAREST);\n                    textureMaxFilter = WebGLTexParam.LINEAR;\n                    break;\n                case TextureFilter.MinPointMagLinearMipPoint:\n                    textureMinFilter = (useMipmaps ? WebGLTexParam.NEAREST_MIPMAP_NEAREST : WebGLTexParam.NEAREST);\n                    textureMaxFilter = WebGLTexParam.LINEAR;\n                    break;\n\n                default:\n                    throw new NotSupportedException();\n            }\n            if (cgraphicsContext.Capabilities.SupportsTextureFilterAnisotropic)\n            {\n                throw new NotImplementedException();\n            }\n            GL.TexParameter(target, WebGLTexParamName.TEXTURE_MIN_FILTER, textureMinFilter);\n            GL.CheckGLError();\n            GL.TexParameter(target, WebGLTexParamName.TEXTURE_MAG_FILTER, textureMaxFilter);\n            GL.CheckGLError();\n\n            // Set up texture addressing.\n            GL.TexParameter(target, WebGLTexParamName.TEXTURE_WRAP_S, ToGLTextureAddressMode(AddressU));\n            GL.CheckGLError();\n            GL.TexParameter(target, WebGLTexParamName.TEXTURE_WRAP_T, ToGLTextureAddressMode(AddressV));\n            GL.CheckGLError();\n\n            // TextureMaxLevel\n            if (cgraphicsContext.Capabilities.SupportsTextureMaxLevel)\n            {\n                int textureMaxLevel = 1000;\n                if (this.MaxMipLevel > 0)\n                    textureMaxLevel = this.MaxMipLevel;\n                throw new NotImplementedException();\n            }\n        }\n\n        private WebGLTexParam ToGLTextureAddressMode(TextureAddressMode textureAddressMode)\n        {\n            switch (textureAddressMode)\n            {\n                case TextureAddressMode.Clamp:\n                    return WebGLTexParam.CLAMP_TO_EDGE;\n                case TextureAddressMode.Wrap:\n                    return WebGLTexParam.REPEAT;\n                case TextureAddressMode.Mirror:\n                    return WebGLTexParam.MIRRORED_REPEAT;\n                case TextureAddressMode.Border:\n                    throw new NotImplementedException();\n\n                default:\n                    throw new ArgumentException(\"No support for \" + textureAddressMode);\n            }\n        }\n \n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Vertices/ConcreteDynamicIndexBuffer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteDynamicIndexBuffer : ConcreteIndexBuffer, IDynamicIndexBufferStrategy\n    {\n        private bool _isContentLost;\n\n        internal ConcreteDynamicIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic:true)\n        {\n            PlatformConstructDynamicIndexBuffer(contextStrategy);\n        }\n        \n        private void PlatformConstructDynamicIndexBuffer(GraphicsContextStrategy contextStrategy)\n        {\n            base.PlatformConstructIndexBuffer(contextStrategy);\n        }\n\n\n        #region IDynamicIndexBufferStrategy\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n        #endregion IDynamicIndexBufferStrategy\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Vertices/ConcreteDynamicVertexBuffer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteDynamicVertexBuffer : ConcreteVertexBuffer, IDynamicVertexBufferStrategy\n    {\n        private bool _isContentLost;\n\n        internal ConcreteDynamicVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic:true)\n        {\n            PlatformConstructDynamicVertexBuffer(contextStrategy);\n        }\n\n        private void PlatformConstructDynamicVertexBuffer(GraphicsContextStrategy contextStrategy)\n        {\n            base.PlatformConstructVertexBuffer(contextStrategy);\n        }\n\n\n        #region IDynamicVertexBufferStrategy\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n        #endregion IDynamicVertexBufferStrategy\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Vertices/ConcreteIndexBuffer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteIndexBuffer : IndexBufferStrategy\n    {\n        private readonly WebGLBufferUsageHint _usageHint;\n        private readonly WebGLDataType _drawElementsType;\n        private WebGLBuffer _ibo;\n\n        internal WebGLDataType DrawElementsType { get { return _drawElementsType; } }\n        internal WebGLBuffer GLIndexBuffer { get { return _ibo; } }\n\n        internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n            Debug.Assert(isDynamic == true);\n            _usageHint= WebGLBufferUsageHint.DYNAMIC_DRAW;\n\n            switch (indexElementSize)\n            {\n                case IndexElementSize.SixteenBits:   this._drawElementsType = WebGLDataType.USHORT; break;\n                case IndexElementSize.ThirtyTwoBits: this._drawElementsType = WebGLDataType.UINT; break;\n                default: throw new InvalidOperationException();\n            }\n        }\n\n        internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n            _usageHint = WebGLBufferUsageHint.STATIC_DRAW;\n\n            switch (indexElementSize)\n            {\n                case IndexElementSize.SixteenBits: this._drawElementsType = WebGLDataType.USHORT; break;\n                case IndexElementSize.ThirtyTwoBits: this._drawElementsType = WebGLDataType.UINT; break;\n                default: throw new InvalidOperationException();\n            }\n\n            PlatformConstructIndexBuffer(contextStrategy);\n        }\n\n        internal void PlatformConstructIndexBuffer(GraphicsContextStrategy contextStrategy)\n        {\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                Debug.Assert(_ibo == null);\n\n                int sizeInBytes = this.IndexCount * base.ElementSizeInBytes;\n\n                _ibo = GL.CreateBuffer();\n                GL.CheckGLError();\n                GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, _ibo);\n                GL.CheckGLError();\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true;\n\n                GL.BufferData(WebGLBufferType.ELEMENT_ARRAY,\n                              sizeInBytes, _usageHint);\n                GL.CheckGLError();\n            }\n        }\n\n        public unsafe override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options)\n        {\n            {\n                Debug.Assert(GLIndexBuffer != null);\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                int elementSizeInByte = sizeof(T);\n                int sizeInBytes = elementSizeInByte * elementCount;\n\n                int bufferSize = IndexCount * base.ElementSizeInBytes;\n\n                GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, GLIndexBuffer);\n                GL.CheckGLError();\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true;\n\n                if (options == SetDataOptions.Discard)\n                {\n                    // By assigning NULL data to the buffer this gives a hint\n                    // to the device to discard the previous content.\n                    GL.BufferData(\n                        WebGLBufferType.ELEMENT_ARRAY,\n                        bufferSize,\n                        _usageHint);\n                }\n\n                GL.BufferSubData<T>(WebGLBufferType.ELEMENT_ARRAY, offsetInBytes, data, startIndex, elementCount);\n                GL.CheckGLError();\n            }\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount)\n        {\n            {\n                Debug.Assert(GLIndexBuffer != null);\n\n                // IWebGL2RenderingContext is required.\n                if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                    throw new NotSupportedException(\"GetData() on BlazorGL require HiDef profile or higher.\");\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, GLIndexBuffer);\n                GL.CheckGLError();\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true;\n\n                int elementSizeInByte = sizeof(T);\n\n                ((IWebGL2RenderingContext)GL).GetBufferSubData<T>(WebGLBufferType.ELEMENT_ARRAY,\n                    offsetInBytes, data, startIndex, elementCount);\n\n                GL.CheckGLError();\n            }\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new NotImplementedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_ibo != null)\n                {\n                    _ibo.Dispose();\n                    _ibo = null;\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Vertices/ConcreteVertexBuffer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteVertexBuffer : VertexBufferStrategy\n    {\n        private readonly WebGLBufferUsageHint _usageHint;\n        internal WebGLBuffer _vbo;\n\n        internal WebGLBuffer GLVertexBuffer { get { return _vbo; } }\n\n        internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n            Debug.Assert(isDynamic == true);\n            _usageHint = WebGLBufferUsageHint.DYNAMIC_DRAW;\n        }\n\n        internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n            _usageHint = WebGLBufferUsageHint.STATIC_DRAW;\n\n            PlatformConstructVertexBuffer(contextStrategy);\n        }\n\n        internal void PlatformConstructVertexBuffer(GraphicsContextStrategy contextStrategy)\n        {\n            {\n                Debug.Assert(_vbo == null);\n\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                _vbo = GL.CreateBuffer();\n                GL.CheckGLError();\n                GL.BindBuffer(WebGLBufferType.ARRAY, _vbo);\n                GL.CheckGLError();\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n\n                GL.BufferData(WebGLBufferType.ARRAY,\n                              (this.VertexDeclaration.VertexStride * this.VertexCount),\n                              _usageHint);\n                GL.CheckGLError();\n            }\n        }\n\n\n        public override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes)\n        {\n            {\n                Debug.Assert(GLVertexBuffer != null);\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                GL.BindBuffer(WebGLBufferType.ARRAY, GLVertexBuffer);\n                GL.CheckGLError();\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n\n                if (options == SetDataOptions.Discard)\n                {\n                    // By assigning NULL data to the buffer this gives a hint\n                    // to the device to discard the previous content.\n                    GL.BufferData(\n                        WebGLBufferType.ARRAY,\n                        bufferSize,\n                        _usageHint);\n                    GL.CheckGLError();\n                }\n\n                if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0)\n                {\n                    // there are no gaps so we can copy in one go\n                    GL.BufferSubData<T>(WebGLBufferType.ARRAY, offsetInBytes, data, startIndex, elementCount);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    // else we must copy each element separately\n                    int dstOffset = offsetInBytes;\n\n                    for (int i = 0; i < elementCount; i++)\n                    {\n                        GL.BufferSubData<T>(WebGLBufferType.ARRAY, dstOffset, data, startIndex+i, 1);\n                        GL.CheckGLError();\n\n                        dstOffset += vertexStride;\n                    }\n                }\n            }\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride)\n        {\n            {\n                Debug.Assert(GLVertexBuffer != null);\n\n                // IWebGL2RenderingContext is required.\n                if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                    throw new NotSupportedException(\"GetData() on BlazorGL require HiDef profile or higher.\");\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                GL.BindBuffer(WebGLBufferType.ARRAY, GLVertexBuffer);\n                GL.CheckGLError();\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n\n                int elementSizeInByte = sizeof(T);\n\n                if (elementSizeInByte == vertexStride || elementSizeInByte % vertexStride == 0)\n                {\n                    ((IWebGL2RenderingContext)GL).GetBufferSubData<T>(WebGLBufferType.ARRAY, \n                        offsetInBytes, data, startIndex, elementCount);\n                }\n                else\n                {\n                    for (int i = 0; i < elementCount; i++)\n                    {\n                        ((IWebGL2RenderingContext)GL).GetBufferSubData<T>(WebGLBufferType.ARRAY,\n                             offsetInBytes + (i*vertexStride), data, startIndex+i, 1);\n                    }\n                }\n            }\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new NotImplementedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_vbo != null)\n                {\n                    _vbo.Dispose();\n                    _vbo = null;\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.BlazorGL/Vertices/VertexDeclarationAttributeInfo.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\nusing nkast.Wasm.Canvas.WebGL;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    // Holds information for caching\n    internal class BufferBindingInfo\n    {\n        private WeakReference _vertexBufferStrategyRef = new WeakReference(null);\n\n        public VertexDeclarationAttributeInfo AttributeInfo;\n\n        public VertexBuffer VertexBuffer\n        {\n            get { return (VertexBuffer)_vertexBufferStrategyRef.Target; }\n            set { _vertexBufferStrategyRef.Target = value; }\n        }\n        public IntPtr VertexOffset;\n        public int InstanceFrequency;\n\n\n        public BufferBindingInfo(VertexDeclarationAttributeInfo attributeInfo, VertexBuffer vertexBuffer, IntPtr vertexOffset, int instanceFrequency)\n        {\n            AttributeInfo = attributeInfo;\n\n            VertexBuffer = vertexBuffer;\n            VertexOffset = vertexOffset;\n            InstanceFrequency = instanceFrequency;\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{VertexBuffer: {0}, VertexOffset: {1}, InstanceFrequency: {2}}}\",\n                VertexBuffer, VertexOffset, InstanceFrequency);\n        }\n    }\n\n    internal class RenderTargetBindingArrayComparer : IEqualityComparer<RenderTargetBinding[]>\n    {\n        public bool Equals(RenderTargetBinding[] first, RenderTargetBinding[] second)\n        {\n            if (object.ReferenceEquals(first, second))\n                return true;\n\n            if (first == null || second == null)\n                return false;\n\n            if (first.Length != second.Length)\n                return false;\n\n            for (int i = 0; i < first.Length; i++)\n            {\n                if ((first[i].RenderTarget != second[i].RenderTarget) || (first[i].ArraySlice != second[i].ArraySlice))\n                {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        public int GetHashCode(RenderTargetBinding[] array)\n        {\n            if (array != null)\n            {\n                unchecked\n                {\n                    int hash = 17;\n                    foreach (RenderTargetBinding item in array)\n                    {\n                        if (item.RenderTarget != null)\n                            hash = hash * 23 + item.RenderTarget.GetHashCode();\n                        hash = hash * 23 + item.ArraySlice.GetHashCode();\n                    }\n                    return hash;\n                }\n            }\n            return 0;\n        }\n    }\n\n    /// <summary>\n    /// Vertex attribute information for a particular shader/vertex declaration combination.\n    /// </summary>\n    internal class VertexDeclarationAttributeInfo\n    {\n        internal bool[] EnabledAttributes;\n        internal List<VertexDeclarationAttributeInfoElement> Elements;\n\n        internal VertexDeclarationAttributeInfo(int maxVertexAttributes)\n        {\n            EnabledAttributes = new bool[maxVertexAttributes];\n            Elements = new List<VertexDeclarationAttributeInfoElement>();\n        }\n    }\n\n    internal class VertexDeclarationAttributeInfoElement\n    {\n        public int AttributeLocation;\n        public int NumberOfElements;\n        public WebGLDataType VertexAttribPointerType;\n        public bool Normalized;\n        public int Offset;\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Common/SpriteBatcher.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    /// <summary>\n    /// This class handles the queueing of batch items into the GPU by creating the triangle tesselations\n    /// that are used to draw the sprite textures. This class supports int.MaxValue number of sprites to be\n    /// batched and will process them into short.MaxValue groups (strided by 6 for the number of vertices\n    /// sent to the GPU). \n    /// </summary>\n    internal sealed class SpriteBatcher : SpriteBatcherStrategy\n    {\n        /// <summary>\n        /// Initialization size for the batch item list and queue.\n        /// </summary>\n        private const int InitialBatchSize = 256;\n        /// <summary>\n        /// The maximum number of batch items that can be processed per iteration\n        /// </summary>\n        // the upper limit is the range of 16bit indices, (ushort.MaxValue+1)/4 = 16384 vertices per quad.\n        // or (short.MaxValue+1)/4 = 8192 if we are using shorts instead of usigned shorts.\n        private const int MaxBatchSize = 4096;\n\n        /// <summary>\n        /// The list of batch items to process.\n        /// </summary>\n        private SpriteBatchItem[] _batchItemList;\n        /// <summary>\n        /// Index pointer to the next available SpriteBatchItem in _batchItemList.\n        /// </summary>\n        private int _batchItemCount;\n\n        /// <summary>\n        /// The target graphics device.\n        /// </summary>\n        private readonly GraphicsDevice _device;\n\n        /// <summary>\n        /// Vertex index array. The values in this array never change.\n        /// </summary>\n        private short[] _index;\n\n        private VertexPositionColorTexture[] _vertexArray;\n        private int _baseQuad;\n        private DynamicVertexBuffer _vertexBuffer;\n        private IndexBuffer _indexBuffer;\n\n        SetDataOptions _defaultVertexBufferSetDataMode = SetDataOptions.NoOverwrite;\n\n        public override int BatchItemCount { get { return _batchItemCount; } }\n\n        public SpriteBatcher(GraphicsDevice device, int capacity = 0)\n        {\n            _device = device;\n\n            if (capacity <= 0)\n                capacity = InitialBatchSize;\n            else\n                capacity = (capacity + 63) & (~63); // ensure chunks of 64.\n\n            _batchItemList = new SpriteBatchItem[capacity];\n            _batchItemCount = 0;\n\n            for (int i = 0; i < capacity; i++)\n                _batchItemList[i] = new SpriteBatchItem();\n\n            EnsureArrayCapacity(capacity);\n\n            switch (_device.Adapter.Backend)\n            {\n                case GraphicsBackend.OpenGL:\n                case GraphicsBackend.GLES:\n                case GraphicsBackend.WebGL:\n                    // NoOverwrite is not implemented in GL.\n                    _defaultVertexBufferSetDataMode = SetDataOptions.Discard;\n                    break;\n            }\n\n        }\n\n        /// <summary>\n        /// Reuse a previously allocated SpriteBatchItem from the item pool. \n        /// if there is none available grow the pool and initialize new items.\n        /// </summary>\n        /// <returns></returns>\n        public override SpriteBatchItem CreateBatchItem()\n        {\n            if (_batchItemCount < _batchItemList.Length)\n            {\n                return _batchItemList[_batchItemCount++];\n            }\n            else\n            {\n                int oldSize = _batchItemList.Length;\n                int newSize = oldSize + oldSize / 2; // grow by x1.5\n                newSize = (newSize + 63) & (~63); // grow in chunks of 64.\n                Array.Resize(ref _batchItemList, newSize);\n                for (int i = oldSize; i < newSize; i++)\n                    _batchItemList[i] = new SpriteBatchItem();\n\n                EnsureArrayCapacity(Math.Min(newSize, MaxBatchSize));\n                return _batchItemList[_batchItemCount++];\n            }\n        }\n\n        /// <summary>\n        /// Resize and recreate the missing indices for the index and vertex position color buffers.\n        /// </summary>\n        /// <param name=\"numBatchItems\"></param>\n        private unsafe void EnsureArrayCapacity(int numBatchItems)\n        {\n            int neededCapacity = 6 * numBatchItems;\n            if (_index != null && neededCapacity <= _index.Length)\n            {\n                // Short circuit out of here because we have enough capacity.\n                return;\n            }\n            short[] newIndex = new short[6 * numBatchItems];\n            int start = 0;\n            if (_index != null)\n            {\n                _index.CopyTo(newIndex, 0);\n                start = _index.Length / 6;\n            }\n            fixed (short* indexFixedPtr = newIndex)\n            {\n                short* indexPtr = indexFixedPtr + (start * 6);\n                for (int i = start; i < numBatchItems; i++, indexPtr += 6)\n                {\n                    /*\n                     *  TL    TR\n                     *   0----1 0,1,2,3 = index offsets for vertex indices\n                     *   |   /| TL,TR,BL,BR are vertex references in SpriteBatchItem.\n                     *   |  / |\n                     *   | /  |\n                     *   |/   |\n                     *   2----3\n                     *  BL    BR\n                     */\n                    // Triangle 1\n                    *(indexPtr + 0) = (short)(i * 4);\n                    *(indexPtr + 1) = (short)(i * 4 + 1);\n                    *(indexPtr + 2) = (short)(i * 4 + 2);\n                    // Triangle 2\n                    *(indexPtr + 3) = (short)(i * 4 + 1);\n                    *(indexPtr + 4) = (short)(i * 4 + 3);\n                    *(indexPtr + 5) = (short)(i * 4 + 2);\n                }\n            }\n            _index = newIndex;\n\n            _vertexArray = new VertexPositionColorTexture[4 * numBatchItems];\n\n            if (_vertexBuffer != null) _vertexBuffer.Dispose();\n            int quadCount = (4 * numBatchItems);\n            quadCount = quadCount * 4; //ensure vertex used 4 times before reset/Discard.\n            _vertexBuffer = new DynamicVertexBuffer(_device, VertexPositionColorTexture.VertexDeclaration, quadCount, BufferUsage.WriteOnly);\n            _baseQuad = 0;\n            if (_indexBuffer != null) _indexBuffer.Dispose();\n            _indexBuffer = new IndexBuffer(_device, IndexElementSize.SixteenBits, newIndex.Length, BufferUsage.WriteOnly);\n            _indexBuffer.SetData(newIndex);\n        }\n\n        /// <summary>\n        /// Sorts the batch items\n        /// </summary>\n        /// <param name=\"sortMode\">The type of depth sorting desired for the rendering.</param>\n        public override void SortBatch(SpriteSortMode sortMode)\n        {\n            switch (sortMode)\n            {\n                case SpriteSortMode.Texture:\n                case SpriteSortMode.FrontToBack:\n                case SpriteSortMode.BackToFront:\n                    Array.Sort(_batchItemList, 0, _batchItemCount);\n                    break;\n            }\n        }\n\n        /// <summary>\n        /// Groups batch drawing into maximal allowed batch sets that do not\n        /// overflow the 16 bit array indices for vertices.\n        /// </summary>\n        /// <param name=\"effect\">The custom effect to apply to the drawn geometry</param>\n        public unsafe override void DrawBatch(Effect effect)\n        {\n            if (effect != null && effect.IsDisposed)\n                throw new ObjectDisposedException(\"effect\");\n\n            // Determine how many iterations through the drawing code we need to make\n            int batchIndex = 0;\n            int batchCount = _batchItemCount;\n\n            ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy.Metrics_AddSpriteCount(batchCount);\n\n            // Iterate through the batches, doing short.MaxValue sets of vertices only.\n            while (batchCount > 0)\n            {\n                int spriteCount = 0;\n                Texture2D tex = null;\n\n                int numBatchesToProcess = batchCount;\n                if (numBatchesToProcess > MaxBatchSize)\n                {\n                    numBatchesToProcess = MaxBatchSize;\n                }\n\n                _device.SetVertexBuffer(_vertexBuffer);\n                _device.Indices = _indexBuffer;\n\n                // Avoid the array checking overhead by using pointer indexing!\n                fixed (VertexPositionColorTexture* vertexArrayFixedPtr = _vertexArray)\n                {\n                    VertexPositionColorTexture* vertexArrayPtr = vertexArrayFixedPtr;\n\n                    SetDataOptions mode = _defaultVertexBufferSetDataMode;\n                    if (mode == SetDataOptions.Discard\n                    || (_baseQuad + numBatchesToProcess) * 4 > _vertexBuffer.VertexCount)\n                    {\n                        mode = SetDataOptions.Discard;\n                        _baseQuad = 0;\n                    }\n\n                    // create batch\n                    for (int i = 0; i < numBatchesToProcess; i++, vertexArrayPtr += 4)\n                    {\n                        SpriteBatchItem item = _batchItemList[batchIndex + i];\n\n                        // store the SpriteBatchItem data in our vertexArray\n                        *(vertexArrayPtr + 0) = item.vertexTL;\n                        *(vertexArrayPtr + 1) = item.vertexTR;\n                        *(vertexArrayPtr + 2) = item.vertexBL;\n                        *(vertexArrayPtr + 3) = item.vertexBR;\n                    }\n\n                    int stride = VertexPositionColorTexture.VertexDeclaration.VertexStride;\n                    _vertexBuffer.SetData(_baseQuad * 4 * stride,\n                        _vertexArray, 0, numBatchesToProcess * 4,\n                        stride, mode);\n                }\n\n                // draw batch\n                for (int i = 0; i < numBatchesToProcess; i++, spriteCount++)\n                {\n                    SpriteBatchItem item = _batchItemList[batchIndex++];\n\n                    // if the texture changed, we need to flush and bind the new texture\n                    bool shouldFlush = !ReferenceEquals(item.Texture, tex);\n                    if (shouldFlush)\n                    {\n                        if (spriteCount > 0)\n                            FlushVertexArray(_baseQuad, spriteCount, effect, tex);\n\n                        _baseQuad += spriteCount;\n                        spriteCount = 0;\n                        tex = item.Texture;\n                    }\n\n                    // Release the texture.\n                    item.Texture = null;\n                }\n                // flush the remaining vertexArray data\n                if (spriteCount > 0)\n                    FlushVertexArray(_baseQuad, spriteCount, effect, tex);\n                _baseQuad += spriteCount;\n\n                // Update our batch count to continue the process of culling down\n                // large batches\n                batchCount -= numBatchesToProcess;\n            }\n            // return items to the pool.\n            _batchItemCount = 0;\n        }\n\n        /// <summary>\n        /// Sends the triangle list to the graphics device. Here is where the actual drawing starts.\n        /// </summary>\n        /// <param name=\"spriteCount\">The number of sprites to draw.</param>\n        /// <param name=\"effect\">The custom effect to apply to the geometry.</param>\n        /// <param name=\"texture\">The texture to draw.</param>\n        private void FlushVertexArray(int baseQuad, int spriteCount, Effect effect, Texture texture)\n        {\n            int baseVertex = baseQuad * 4;\n            int minVertexIndex = 0;\n            int numVertices = spriteCount * 4;\n            int startIndex = 0;\n            int primitiveCount = spriteCount * 2;\n\n            GraphicsContextStrategy contextStrategy = ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy;\n\n            if (effect == null) // If no custom effect is defined, then simply render.\n            {\n                contextStrategy.Textures[0] = texture;\n\n                // call GraphicsContextStrategy.DrawIndexedPrimitives() directly, bypassing checks.\n                contextStrategy.DrawIndexedPrimitives(\n                    PrimitiveType.TriangleList,\n                    baseVertex,\n                    minVertexIndex, numVertices,\n                    startIndex, primitiveCount);\n            }\n            else // If the effect is not null, then apply each pass and render the geometry\n            {\n                EffectPassCollection passes = effect.CurrentTechnique.Passes;\n                foreach (EffectPass pass in passes)\n                {\n                    pass.Apply();\n\n                    // We have to set the texture again on each pass,\n                    // because pass.Apply() might have set a texture from the effect.\n                    contextStrategy.Textures[0] = texture;\n\n                    // call GraphicsContextStrategy.DrawIndexedPrimitives() directly, bypassing checks.\n                    contextStrategy.DrawIndexedPrimitives(\n                        PrimitiveType.TriangleList,\n                        baseVertex,\n                        minVertexIndex, numVertices,\n                        startIndex, primitiveCount);\n                }\n            }\n        }\n\n        #region IDisposable Members\n\n        private bool _isDisposed = false;\n        protected override void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    _vertexBuffer.Dispose();\n                    _indexBuffer.Dispose();\n\n                    _vertexBuffer = null;\n                    _indexBuffer = null;\n                    _batchItemList = null;\n                    _vertexArray = null;\n                    _index = null;\n                }\n                _isDisposed = true;\n            }\n        }\n\n        #endregion IDisposable Members\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteGraphicsAdapter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D = SharpDX.Direct3D;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy\n    {\n        private DXGI.Adapter1 _dxAdapter;\n        private DisplayModeCollection _supportedDisplayModes;\n        private DisplayMode _currentDisplayMode;\n\n        public override DisplayModeCollection Platform_SupportedDisplayModes\n        {\n            get { return _supportedDisplayModes; }\n        }\n\n        public override DisplayMode Platform_CurrentDisplayMode\n        {\n            get { return _currentDisplayMode; }\n        }\n\n        public override bool Platform_IsWideScreen\n        {\n            // Seems like XNA treats aspect ratios above 16:10 as wide screen.\n            get { return Platform_CurrentDisplayMode.AspectRatio >= (16.0f / 10.0f); }\n        }\n\n        public override GraphicsBackend Backend\n        {\n            get { return GraphicsBackend.DirectX11; }\n        }\n\n        public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend)\n        {\n            switch (shaderBackend)\n            {\n                case GraphicsBackend.DirectX11:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile)\n        {\n            switch (shaderProfile)\n            {\n                case ShaderProfileType.DirectX_11:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        private static readonly Dictionary<DXGI.Format, SurfaceFormat> FormatTranslations = new Dictionary<DXGI.Format, SurfaceFormat>\n        {\n            { DXGI.Format.R8G8B8A8_UNorm, SurfaceFormat.Color },\n            { DXGI.Format.B8G8R8A8_UNorm, SurfaceFormat.Color },\n            { DXGI.Format.B5G6R5_UNorm, SurfaceFormat.Bgr565 },\n        };\n\n        internal ConcreteGraphicsAdapter(DXGI.Adapter1 dxAdapter, DXGI.Output dxMonitor)\n        {\n            _dxAdapter = dxAdapter;\n\n            this.Platform_DeviceName = dxMonitor.Description.DeviceName.TrimEnd(new char[] { '\\0' });\n            this.Platform_Description = dxAdapter.Description1.Description.TrimEnd(new char[] { '\\0' });\n            this.Platform_DeviceId = dxAdapter.Description1.DeviceId;\n            this.Platform_Revision = dxAdapter.Description1.Revision;\n            this.Platform_VendorId = dxAdapter.Description1.VendorId;\n            this.Platform_SubSystemId = dxAdapter.Description1.SubsystemId;\n            this.Platform_MonitorHandle = dxMonitor.Description.MonitorHandle;\n\n            int desktopWidth  = dxMonitor.Description.DesktopBounds.Right  - dxMonitor.Description.DesktopBounds.Left;\n            int desktopHeight = dxMonitor.Description.DesktopBounds.Bottom - dxMonitor.Description.DesktopBounds.Top;\n\n            List<DisplayMode> modes = new List<DisplayMode>();\n\n            foreach (KeyValuePair<DXGI.Format, SurfaceFormat> formatTranslation in FormatTranslations)\n            {\n                DXGI.ModeDescription[] displayModes;\n\n                // This can fail on headless machines, so just assume the desktop size\n                // is a valid mode and return that... so at least our unit tests work.\n                try\n                {\n                    displayModes = dxMonitor.GetDisplayModeList(formatTranslation.Key, 0);\n                }\n                catch (DX.SharpDXException)\n                {\n                    DisplayMode mode = base.CreateDisplayMode(desktopWidth, desktopHeight, SurfaceFormat.Color);\n\n                    modes.Add(mode);\n                    _currentDisplayMode = mode;\n                    break;\n                }\n\n\n                foreach (DXGI.ModeDescription dxModeDesc in displayModes)\n                {\n                    DisplayMode mode = base.CreateDisplayMode(dxModeDesc.Width, dxModeDesc.Height, formatTranslation.Value);\n\n                    // Skip duplicate modes with the same width/height/formats.\n                    if (modes.Contains(mode))\n                        continue;\n\n                    modes.Add(mode);\n\n                    if (_currentDisplayMode == null)\n                    {\n                        if (mode.Width == desktopWidth && mode.Height == desktopHeight && mode.Format == SurfaceFormat.Color)\n                            _currentDisplayMode = mode;\n                    }\n                }\n            }\n\n            _supportedDisplayModes = base.CreateDisplayModeCollection(modes);\n\n            if (_currentDisplayMode == null) //(i.e. desktop mode wasn't found in the available modes)\n            {\n#if DEBUG\n                throw new Exception(\n                    \"Unable to determine the current display mode.  This can indicate that the \" +\n                    \"game is not configured to be HiDPI aware under Windows 10 or later.  See \" +\n                    \"https://github.com/MonoGame/MonoGame/issues/5040 for more information.\");\n#endif\n\n                _currentDisplayMode = base.CreateDisplayMode(desktopWidth, desktopHeight, SurfaceFormat.Color);\n            }\n\n            return;\n        }\n\n        public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile)\n        {\n            if (GraphicsAdapter.UseReferenceDevice)\n                return true;\n\n            D3D.FeatureLevel highestSupportedLevel;\n            try\n            {\n                highestSupportedLevel = D3D11.Device.GetSupportedFeatureLevel(_dxAdapter);\n            }\n            catch (DX.SharpDXException ex)\n            {\n                if (ex.ResultCode == DXGI.ResultCode.Unsupported) // No supported feature levels!\n                    return false;\n                throw;\n            }\n\n            switch (graphicsProfile)\n            {\n                case GraphicsProfile.Reach:\n                    return (highestSupportedLevel >= D3D.FeatureLevel.Level_9_1);\n                case GraphicsProfile.HiDef:\n                    return (highestSupportedLevel >= D3D.FeatureLevel.Level_9_3);\n                case GraphicsProfile.FL10_0:\n                    return (highestSupportedLevel >= D3D.FeatureLevel.Level_10_0);\n                case GraphicsProfile.FL10_1:\n                    return (highestSupportedLevel >= D3D.FeatureLevel.Level_10_1);\n                case GraphicsProfile.FL11_0:\n                    return (highestSupportedLevel >= D3D.FeatureLevel.Level_11_0);\n                case GraphicsProfile.FL11_1:\n                    return (highestSupportedLevel >= D3D.FeatureLevel.Level_11_1);\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        public override bool Platform_QueryBackBufferFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override bool Platform_QueryRenderTargetFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            selectedFormat = format;\n            selectedDepthFormat = depthFormat;\n            selectedMultiSampleCount = multiSampleCount;\n\n            // fallback for unsupported renderTarget surface formats.\n            if (selectedFormat == SurfaceFormat.Alpha8 ||\n                selectedFormat == SurfaceFormat.NormalizedByte2 ||\n                selectedFormat == SurfaceFormat.NormalizedByte4 ||\n                selectedFormat == SurfaceFormat.Dxt1 ||\n                selectedFormat == SurfaceFormat.Dxt3 ||\n                selectedFormat == SurfaceFormat.Dxt5 ||\n                selectedFormat == SurfaceFormat.Dxt1a ||\n                selectedFormat == SurfaceFormat.Dxt1SRgb ||\n                selectedFormat == SurfaceFormat.Dxt3SRgb ||\n                selectedFormat == SurfaceFormat.Dxt5SRgb)\n                selectedFormat = SurfaceFormat.Color;\n\n            // fallback for unsupported renderTarget surface formats on Reach profile.\n            if (graphicsProfile == GraphicsProfile.Reach)\n            {\n                if (selectedFormat == SurfaceFormat.HalfSingle ||\n                    selectedFormat == SurfaceFormat.HalfVector2 ||\n                    selectedFormat == SurfaceFormat.HalfVector4 ||\n                    selectedFormat == SurfaceFormat.HdrBlendable ||\n                    selectedFormat == SurfaceFormat.Rg32 ||\n                    selectedFormat == SurfaceFormat.Rgba1010102 ||\n                    selectedFormat == SurfaceFormat.Rgba64 ||\n                    selectedFormat == SurfaceFormat.Single ||\n                    selectedFormat == SurfaceFormat.Vector2 ||\n                    selectedFormat == SurfaceFormat.Vector4)\n                    selectedFormat = SurfaceFormat.Color;\n            }\n\n            return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteGraphicsAdaptersProvider.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D = SharpDX.Direct3D;\nusing DXGI = SharpDX.DXGI;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy\n    {\n        private ReadOnlyCollection<GraphicsAdapter> _adapters;\n\n        public ConcreteGraphicsAdaptersProvider()\n        {\n            List<GraphicsAdapter> adapterList = CreateAdapterList();\n            _adapters = new ReadOnlyCollection<GraphicsAdapter>(adapterList);\n        }\n\n        private List<GraphicsAdapter> CreateAdapterList()\n        {\n            // NOTE: An adapter is a monitor+device combination, so we expect\n            // at lease one adapter per connected monitor.\n\n            using (DXGI.Factory1 factory = new DXGI.Factory1())\n            {\n                int adapterCount = factory.GetAdapterCount();\n                List<GraphicsAdapter> adapterList = new List<GraphicsAdapter>(adapterCount);\n\n                for (int i = 0; i < adapterCount; i++)\n                {\n                    DXGI.Adapter1 dxAdapter = factory.GetAdapter1(i);\n\n                    int monitorCount = dxAdapter.GetOutputCount();\n                    for (int j = 0; j < monitorCount; j++)\n                    {\n                        DXGI.Output dxMonitor;\n                        using (dxMonitor = dxAdapter.GetOutput(j))\n                        {\n                            ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter(dxAdapter, dxMonitor);\n                            GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy);\n\n                            adapterList.Add(adapter);\n                        }\n                    }\n                }\n\n                // The first adapter is considered the default.\n                ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true;\n\n                return adapterList;\n            }\n        }\n\n        public override ReadOnlyCollection<GraphicsAdapter> Platform_Adapters\n        {\n            get { return _adapters; }\n        }\n\n        public override GraphicsAdapter Platform_DefaultAdapter\n        {\n            get { return _adapters[0]; }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteGraphicsCapabilities.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsCapabilities : GraphicsCapabilities\n    {\n\n        internal void PlatformInitialize(ConcreteGraphicsContext cgraphicsContext, GraphicsDeviceStrategy deviceStrategy)\n        {\n            GraphicsProfile profile = deviceStrategy.GraphicsProfile;\n\n            _maxTextureSize = 2048;\n            if (profile == GraphicsProfile.HiDef)\n                _maxTextureSize = 4096;\n            if (profile == GraphicsProfile.FL10_0)\n                _maxTextureSize = 8192;\n            if (profile == GraphicsProfile.FL10_1)\n                _maxTextureSize = 8192;\n            if (profile == GraphicsProfile.FL11_0)\n                _maxTextureSize = 16384;\n            if (profile == GraphicsProfile.FL11_1)\n                _maxTextureSize = 16384;\n\n            SupportsTextureFilterAnisotropic = true;\n\n            SupportsDepth24 = false;\n            SupportsPackedDepthStencil = false;\n            SupportsDepthNonLinear = false;\n            SupportsTextureMaxLevel = false;\n\n            // 16bit textures\n            SupportsBgra5551 = true;\n            SupportsBgra4444 = true;\n            SupportsAbgr5551 = false;\n            SupportsAbgr4444 = false;\n\n            // Texture compression\n            SupportsDxt1 = true;\n            SupportsS3tc = true;\n\n            SupportsSRgb = true;\n\n            SupportsTextureArrays = profile >= GraphicsProfile.FL10_0;\n            SupportsDepthClamp = profile >= GraphicsProfile.HiDef;\n\n            _maxTextureSlots = 16;\n            _maxVertexTextureSlots = (profile >= GraphicsProfile.FL10_0) ? 16 : 0;\n\n            _maxVertexBufferSlots = (profile >= GraphicsProfile.FL10_1) ? 32 : 16;\n\n            SupportsFloatTextures = profile >= GraphicsProfile.HiDef;\n            SupportsHalfFloatTextures = profile >= GraphicsProfile.HiDef;\n            SupportsNormalized = profile >= GraphicsProfile.HiDef;\n\n            SupportsInstancing = true;\n            //TNC: TODO: detect suport based on feture level\n            SupportsBaseIndexInstancing = false;\n            SupportsSeparateBlendStates = true;\n\n            MaxTextureAnisotropy = (profile == GraphicsProfile.Reach) ? 2 : 16;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteGraphicsContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing SharpDX.Mathematics.Interop;\nusing D3D = SharpDX.Direct3D;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsContext : GraphicsContextStrategy\n    {\n        private D3D11.DeviceContext _d3dContext;\n        internal int _vertexBufferSlotsUsed;\n\n        VertexInputLayoutKey _vertexInputLayoutKey = new VertexInputLayoutKey();\n\n        private PrimitiveType _lastPrimitiveType = (PrimitiveType)(-1);\n\n        // The active render targets.\n        internal readonly D3D11.RenderTargetView[] _currentRenderTargets = new D3D11.RenderTargetView[8];\n\n        // The active depth view.\n        internal D3D11.DepthStencilView _currentDepthStencilView;\n\n        private readonly Dictionary<VertexDeclaration, UserVertexBuffer> _userVertexBuffers = new Dictionary<VertexDeclaration, UserVertexBuffer>();\n        private readonly UserIndexBuffer _userIndexBuffer16 = new UserIndexBuffer(IndexElementSize.SixteenBits);\n        private readonly UserIndexBuffer _userIndexBuffer32 = new UserIndexBuffer(IndexElementSize.ThirtyTwoBits);\n\n\n        private class UserVertexBuffer\n        {\n            public int Count;\n            public int Offset;\n            public DynamicVertexBuffer Buffer;\n            public int Stride;\n\n            public UserVertexBuffer(int vertexStride)\n            {\n                this.Count = -1;\n                this.Offset = 0;\n                this.Buffer = null;\n                this.Stride = vertexStride;\n            }\n        }\n\n        private class UserIndexBuffer\n        {\n            public int Count;\n            public int Offset;\n            public DynamicIndexBuffer Buffer;\n            public readonly IndexElementSize ElementSize;\n\n            public UserIndexBuffer(IndexElementSize indexElementSize)\n            {\n                this.Count =-1;\n                this.Offset = 0;\n                this.Buffer = null;\n                this.ElementSize = indexElementSize;\n            }\n        }\n\n\n        internal D3D11.DeviceContext D3dContext { get { return _d3dContext; } }\n\n        public override Viewport Viewport\n        {\n            get { return base.Viewport; }\n            set\n            {\n                base.Viewport = value;\n                PlatformApplyViewport();\n            }\n        }\n\n        internal ConcreteGraphicsContext(GraphicsContext context, D3D11.DeviceContext d3dContext)\n            : base(context)\n        {\n            _d3dContext = d3dContext;\n\n#if WINDOWSDX\n            GraphicsDebug = base.CreateGraphicsDebug();\n#endif\n\n            base._capabilities = new ConcreteGraphicsCapabilities();\n            ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize(\n                this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy);\n\n            base.Initialize(this.Capabilities);\n\n            this.PlatformSetup();\n        }\n\n        public override void PlatformSetup()\n        {\n        }\n\n        public override void Clear(ClearOptions options, Vector4 color, float depth, int stencil)\n        {\n            // Clear options for depth/stencil buffer if not attached.\n            if (_currentDepthStencilView != null)\n            {\n                if (_currentDepthStencilView.Description.Format != DXGI.Format.D24_UNorm_S8_UInt)\n                    options &= ~ClearOptions.Stencil;\n            }\n            else\n            {\n                options &= ~ClearOptions.DepthBuffer;\n                options &= ~ClearOptions.Stencil;\n            }\n\n            lock (this.SyncHandle)\n            {\n                // Clear the diffuse render buffer.\n                if ((options & ClearOptions.Target) == ClearOptions.Target)\n                {\n                    foreach (D3D11.RenderTargetView view in _currentRenderTargets)\n                    {\n                        if (view != null)\n                            this.D3dContext.ClearRenderTargetView(view, color.ToRawColor4());\n                    }\n                }\n\n                // Clear the depth/stencil render buffer.\n                D3D11.DepthStencilClearFlags flags = 0;\n                if ((options & ClearOptions.DepthBuffer) == ClearOptions.DepthBuffer)\n                    flags |= D3D11.DepthStencilClearFlags.Depth;\n                if ((options & ClearOptions.Stencil) == ClearOptions.Stencil)\n                    flags |= D3D11.DepthStencilClearFlags.Stencil;\n\n                if (flags != 0)\n                    this.D3dContext.ClearDepthStencilView(_currentDepthStencilView, flags, depth, (byte)stencil);\n\n                base.Metrics_AddClearCount();\n            }\n        }\n\n        private void PlatformApplyState()\n        {\n            Debug.Assert(this.D3dContext != null, \"The d3d context is null!\");\n\n            // NOTE: We make the assumption here that the caller has locked the d3dContext for us to use.\n\n            {\n                PlatformApplyBlend();\n            }\n\n            if (_depthStencilStateDirty)\n            {\n                D3D11.DepthStencilState depthStencilState = ((IPlatformDepthStencilState)_actualDepthStencilState).GetStrategy<ConcreteDepthStencilState>().GetDxState();\n                this.D3dContext.OutputMerger.SetDepthStencilState(depthStencilState, _actualDepthStencilState.ReferenceStencil);\n                _depthStencilStateDirty = false;\n            }\n\n            if (_rasterizerStateDirty)\n            {\n                D3D11.RasterizerState rasterizerState = ((IPlatformRasterizerState)_actualRasterizerState).GetStrategy<ConcreteRasterizerState>().GetDxState(this);\n                this.D3dContext.Rasterizer.State = rasterizerState;\n                _rasterizerStateDirty = false;\n            }\n\n            if (_scissorRectangleDirty)\n            {\n                PlatformApplyScissorRectangle();\n                _scissorRectangleDirty = false;\n            }\n        }\n\n        private void PlatformApplyBlend()\n        {\n            if (_blendStateDirty || _blendFactorDirty)\n            {\n                D3D11.BlendState blendState = ((IPlatformBlendState)_actualBlendState).GetStrategy<ConcreteBlendState>().GetDxState();\n                RawColor4 blendFactor = BlendFactor.ToRawColor4();\n                this.D3dContext.OutputMerger.SetBlendState(blendState, blendFactor);\n\n                _blendStateDirty = false;\n                _blendFactorDirty = false;\n            }\n        }\n\n        private void PlatformApplyScissorRectangle()\n        {\n            // NOTE: This code assumes CurrentD3DContext has been locked by the caller.\n\n            this.D3dContext.Rasterizer.SetScissorRectangle(\n                _scissorRectangle.X,\n                _scissorRectangle.Y,\n                _scissorRectangle.Right,\n                _scissorRectangle.Bottom);\n            _scissorRectangleDirty = false;\n        }\n\n        internal void PlatformApplyViewport()\n        {\n            lock (this.SyncHandle)\n            {\n                if (this.D3dContext != null)\n                {\n                    RawViewportF viewport = _viewport.ToRawViewportF();\n                    this.D3dContext.Rasterizer.SetViewport(viewport);\n                }\n            }\n        }\n\n        private void PlatformApplyIndexBuffer()\n        {\n            // NOTE: This code assumes CurrentD3DContext has been locked by the caller.\n\n            if (_indexBufferDirty)\n            {\n                this.D3dContext.InputAssembler.SetIndexBuffer(\n                    ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().DXIndexBuffer,\n                    ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().DrawElementsType,\n                    0);\n                _indexBufferDirty = false;\n            }\n        }\n\n        private void PlatformApplyVertexBuffers()\n        {\n            // NOTE: This code assumes CurrentD3DContext has been locked by the caller.\n\n            if (_vertexBuffersDirty)\n            {\n                for (int slot = 0; slot < _vertexBuffers.Count; slot++)\n                {\n                    VertexBufferBinding vertexBufferBinding = _vertexBuffers.Get(slot);\n                    VertexBuffer vertexBuffer = vertexBufferBinding.VertexBuffer;\n                    VertexDeclaration vertexDeclaration = vertexBuffer.VertexDeclaration;\n                    int vertexStride = vertexDeclaration.VertexStride;\n                    int vertexOffsetInBytes = vertexBufferBinding.VertexOffset * vertexStride;\n                    this.D3dContext.InputAssembler.SetVertexBuffers(\n                        slot, new D3D11.VertexBufferBinding(((IPlatformVertexBuffer)vertexBuffer).Strategy.ToConcrete<ConcreteVertexBuffer>().DXVertexBuffer, vertexStride, vertexOffsetInBytes));\n                }\n\n                // TODO: do we need to reset the previously set slots?\n                //for (int slot = _vertexBuffers.Count; slot < _vertexBufferSlotsUsed; slot++)\n                //{\n                //    this.D3dContext.InputAssembler.SetVertexBuffers(slot, new D3D11.VertexBufferBinding());\n                //}\n\n                _vertexBufferSlotsUsed = _vertexBuffers.Count;\n            }\n        }\n\n        private void PlatformApplyShaders()\n        {\n            // NOTE: This code assumes CurrentD3DContext has been locked by the caller.\n\n            ConcreteVertexShader cvertexShader = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete<ConcreteVertexShader>();\n            ConcretePixelShader  cpixelShader  = ((IPlatformShader)this.PixelShader).Strategy.ToConcrete<ConcretePixelShader>();\n\n            if (_vertexShaderDirty)\n            {\n                this.D3dContext.VertexShader.Set(cvertexShader.DXVertexShader);\n\n                base.Metrics_AddVertexShaderCount();\n            }\n            if (_vertexShaderDirty || _vertexBuffersDirty)\n            {\n                _vertexInputLayoutKey.Set(_vertexBuffers.VertexDeclarations, _vertexBuffers.InstanceFrequencies, _vertexBuffers.Count);\n                this.D3dContext.InputAssembler.InputLayout = cvertexShader.InputLayouts.GetOrCreate(_vertexInputLayoutKey, _vertexBuffers);\n                _vertexShaderDirty = false;\n                _vertexBuffersDirty = false;\n            }\n\n            if (_pixelShaderDirty)\n            {\n                this.D3dContext.PixelShader.Set(cpixelShader.DXPixelShader);\n                _pixelShaderDirty = false;\n\n                base.Metrics_AddPixelShaderCount();\n            }\n\n\n            // Apply Constant Buffers\n            PlatformApplyConstantBuffers(cvertexShader, this.D3dContext.VertexShader,\n                ((IPlatformConstantBufferCollection)_vertexConstantBuffers).Strategy.ToConcrete<ConcreteConstantBufferCollection>());\n            PlatformApplyConstantBuffers(cpixelShader, this.D3dContext.PixelShader,\n                ((IPlatformConstantBufferCollection)_pixelConstantBuffers).Strategy.ToConcrete<ConcreteConstantBufferCollection>());\n  \n            // Apply Shader Texture and SamplersSamplers\n            PlatformApplyTexturesAndSamplers(cvertexShader, this.D3dContext.VertexShader,\n                ((IPlatformTextureCollection)this.VertexTextures).Strategy.ToConcrete<ConcreteTextureCollection>(),\n                ((IPlatformSamplerStateCollection)this.VertexSamplerStates).Strategy.ToConcrete<ConcreteSamplerStateCollection>());\n            PlatformApplyTexturesAndSamplers(cpixelShader, this.D3dContext.PixelShader,\n                ((IPlatformTextureCollection)this.Textures).Strategy.ToConcrete<ConcreteTextureCollection>(),\n                ((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.ToConcrete<ConcreteSamplerStateCollection>());\n        }\n\n        private void PlatformApplyConstantBuffers(ConcreteShader shaderStrategy, D3D11.CommonShaderStage shaderStage, ConcreteConstantBufferCollection cconstantBufferCollection)\n        {\n            // NOTE: We make the assumption here that the caller has\n            // locked the CurrentD3DContext for us to use.\n\n            uint validMask = cconstantBufferCollection.InternalValid;\n\n            for (int slot = 0; validMask != 0 && slot < cconstantBufferCollection.Length; slot++)\n            {\n                uint mask = ((uint)1) << slot;\n\n                ConstantBuffer constantBuffer = cconstantBufferCollection[slot];\n                if (constantBuffer != null && !constantBuffer.IsDisposed)\n                {\n                    ConcreteConstantBuffer constantBufferStrategy = ((IPlatformConstantBuffer)constantBuffer).Strategy.ToConcrete<ConcreteConstantBuffer>();\n\n                    // Update the hardware buffer.\n                    if (constantBufferStrategy.Dirty)\n                    {\n                        this.D3dContext.UpdateSubresource(constantBufferStrategy.BufferData, constantBufferStrategy.DXcbuffer);\n\n                        constantBufferStrategy.Dirty = false;\n                    }\n\n                    // Set the buffer to the shader stage.\n                    if ((cconstantBufferCollection.InternalDirty & mask) != 0)\n                    {\n                        shaderStage.SetConstantBuffer(slot, constantBufferStrategy.DXcbuffer);\n                        cconstantBufferCollection.InternalDirty &= ~mask;\n                    }\n                }\n\n                // clear buffer bit\n                validMask &= ~mask;\n            }\n        }\n\n        private void PlatformApplyTexturesAndSamplers(ConcreteShader cshader, D3D11.CommonShaderStage dxShaderStage, ConcreteTextureCollection ctextureCollection, ConcreteSamplerStateCollection csamplerStateCollection)\n        {\n            // NOTE: We make the assumption here that the caller has locked the d3dContext for us to use.\n\n            GraphicsProfile graphicsProfile = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.GraphicsProfile;\n\n            for (int i = 0; i < cshader.Samplers.Length; i++)\n            {\n                int textureSlot = cshader.Samplers[i].textureSlot;\n                int samplerSlot = cshader.Samplers[i].samplerSlot;\n\n                // Debug.Assert(samplerSlot != 255);\n                if (samplerSlot == 255)\n                    samplerSlot = textureSlot;\n\n                // Check Samplers\n                if (graphicsProfile == GraphicsProfile.Reach)\n                {\n                    Texture texture = ctextureCollection[textureSlot];\n                    SamplerState samplerState = csamplerStateCollection.InternalActualSamplers[samplerSlot];\n\n                    Texture2D texture2D = texture as Texture2D;\n                    if (texture2D != null)\n                    {\n                        if (samplerState.AddressU != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Width)\n                        ||  samplerState.AddressV != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Height))\n                            throw new NotSupportedException(\"Reach profile support only Clamp mode for non-power of two Textures.\");\n                    }\n                }\n\n                // Apply Samplers\n                uint samplerMask = ((uint)1) << samplerSlot;\n                if ((csamplerStateCollection.InternalD3dDirty & samplerMask) != 0)\n                {\n                    SamplerState samplerState = csamplerStateCollection.InternalActualSamplers[samplerSlot];\n                    if (samplerState != null)\n                    {\n                        Debug.Assert(samplerState.GraphicsDevice == ((IPlatformGraphicsContext)this.Context).DeviceStrategy.Device, \"The state was created for a different device!\");\n\n                        ConcreteSamplerState csamplerState = ((IPlatformSamplerState)samplerState).GetStrategy<ConcreteSamplerState>();\n                        dxShaderStage.SetSampler(samplerSlot, csamplerState.GetDxState());\n                        csamplerStateCollection.InternalD3dDirty &= ~samplerMask;\n                    }\n                    else\n                    {\n                        dxShaderStage.SetSampler(samplerSlot, null);\n                        csamplerStateCollection.InternalD3dDirty &= ~samplerMask;\n                    }\n                }\n\n                // Apply Textures\n                uint textureMask = ((uint)1) << textureSlot;\n                if ((ctextureCollection.InternalDirty & textureMask) != 0)\n                {\n                    Texture texture = ctextureCollection[textureSlot];\n                    if (texture != null && !texture.IsDisposed)\n                    {\n                        ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy<ConcreteTexture>();\n                        dxShaderStage.SetShaderResource(textureSlot, ctexture.GetShaderResourceView());\n                        ctextureCollection.InternalDirty &= ~textureMask;\n\n                        this.Metrics_AddTextureCount();\n                    }\n                    else\n                    {\n                        dxShaderStage.SetShaderResource(textureSlot, null);\n                        ctextureCollection.InternalDirty &= ~textureMask;\n                    }\n                }\n            }\n\n            int texturesCount = ctextureCollection.Length;\n\n            // Clear unused Samplers\n            for (int samplerSlot = 0; csamplerStateCollection.InternalD3dDirty != 0 && samplerSlot < texturesCount; samplerSlot++)\n            {\n                uint samplerMask = ((uint)1) << samplerSlot;\n                if ((csamplerStateCollection.InternalD3dDirty & samplerMask) != 0)\n                {\n                    SamplerState samplerState = csamplerStateCollection.InternalActualSamplers[samplerSlot];\n                    if (samplerState == null)\n                    {\n                        dxShaderStage.SetSampler(samplerSlot, null);\n                        csamplerStateCollection.InternalD3dDirty &= ~samplerMask;\n                    }\n                }\n            }\n\n            // Clear unused  Textures\n            for (int textureSlot = 0; ctextureCollection.InternalDirty != 0 && textureSlot < texturesCount; textureSlot++)\n            {\n                uint textureMask = ((uint)1) << textureSlot;\n                if ((ctextureCollection.InternalDirty & textureMask) != 0)\n                {\n                    Texture texture = ctextureCollection[textureSlot];\n                    if (texture == null || texture.IsDisposed)\n                    {\n                        dxShaderStage.SetShaderResource(textureSlot, null);\n                        ctextureCollection.InternalDirty &= ~textureMask;\n                    }\n                }\n            }\n        }\n\n        private void PlatformApplyPrimitiveType(PrimitiveType primitiveType)\n        {\n            if (_lastPrimitiveType == primitiveType)\n                return;\n\n            this.D3dContext.InputAssembler.PrimitiveTopology = ConcreteGraphicsContext.ToPrimitiveTopology(primitiveType);\n            _lastPrimitiveType = primitiveType;\n        }\n\n        private static D3D.PrimitiveTopology ToPrimitiveTopology(PrimitiveType primitiveType)\n        {\n            switch (primitiveType)\n            {\n                case PrimitiveType.LineList:\n                    return D3D.PrimitiveTopology.LineList;\n                case PrimitiveType.LineStrip:\n                    return D3D.PrimitiveTopology.LineStrip;\n                case PrimitiveType.TriangleList:\n                    return D3D.PrimitiveTopology.TriangleList;\n                case PrimitiveType.TriangleStrip:\n                    return D3D.PrimitiveTopology.TriangleStrip;\n                case PrimitiveType.PointList:\n                    return D3D.PrimitiveTopology.PointList;\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        public override void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount)\n        {\n            lock (this.SyncHandle)\n            {\n                PlatformApplyState();\n                //PlatformApplyIndexBuffer();\n                PlatformApplyVertexBuffers();\n                PlatformApplyShaders();\n\n                PlatformApplyPrimitiveType(primitiveType);\n                this.D3dContext.Draw(vertexCount, vertexStart);\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount)\n        {\n            lock (this.SyncHandle)\n            {\n                PlatformApplyState();\n                PlatformApplyIndexBuffer();\n                PlatformApplyVertexBuffers();\n                PlatformApplyShaders();\n\n                PlatformApplyPrimitiveType(primitiveType);\n                int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n                this.D3dContext.DrawIndexed(indexCount, startIndex, baseVertex);\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)\n        {\n            lock (this.SyncHandle)\n            {\n                PlatformApplyState();\n                PlatformApplyIndexBuffer();\n                PlatformApplyVertexBuffers();\n                PlatformApplyShaders();\n\n                PlatformApplyPrimitiveType(primitiveType);\n                int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n                this.D3dContext.DrawIndexed(indexCount, startIndex, baseVertex);\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public override void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex,\n            int primitiveCount, int baseInstance, int instanceCount)\n        {\n            lock (this.SyncHandle)\n            {\n                PlatformApplyState();\n                PlatformApplyIndexBuffer();\n                PlatformApplyVertexBuffers();\n                PlatformApplyShaders();\n\n                PlatformApplyPrimitiveType(primitiveType);\n                int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n\n                if (baseInstance > 0)\n                {\n                    if (!this.Capabilities.SupportsBaseIndexInstancing)\n                        throw new PlatformNotSupportedException(\"Instanced geometry drawing with base instance not supported.\");\n\n                    this.D3dContext.DrawIndexedInstanced(indexCount, instanceCount, startIndex, baseVertex, baseInstance);\n                }\n                else\n                {\n                    this.D3dContext.DrawIndexedInstanced(indexCount, instanceCount, startIndex, baseVertex, 0);\n                }\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount * instanceCount);\n            }\n        }\n\n        private int SetUserVertexBuffer<T>(T[] vertexData, int vertexOffset, int vertexCount, VertexDeclaration vertexDeclaration)\n            where T : struct\n        {\n            UserVertexBuffer userVertexBuffer;\n            if (!_userVertexBuffers.TryGetValue(vertexDeclaration, out userVertexBuffer))\n            {\n                userVertexBuffer = new UserVertexBuffer(vertexDeclaration.VertexStride);\n                _userVertexBuffers[vertexDeclaration] = userVertexBuffer;\n            }\n\n            if (userVertexBuffer.Count < vertexCount)\n            {\n                if (userVertexBuffer.Buffer != null)\n                    userVertexBuffer.Buffer.Dispose();\n\n                int requiredVertexCount = Math.Max(vertexCount, 4 * 256);\n                requiredVertexCount = (requiredVertexCount + 255) & (~255); // grow in chunks of 256.\n                userVertexBuffer.Buffer = new DynamicVertexBuffer(((IPlatformGraphicsContext)this.Context).DeviceStrategy.Device, vertexDeclaration, requiredVertexCount, BufferUsage.WriteOnly);\n                userVertexBuffer.Count = userVertexBuffer.Buffer.VertexCount;\n            }\n\n            int startVertex = userVertexBuffer.Offset;\n\n            SetDataOptions setDataOptions = SetDataOptions.NoOverwrite;\n            if ((startVertex + vertexCount) >= userVertexBuffer.Count)\n            {\n                setDataOptions = SetDataOptions.Discard;\n                startVertex = 0;\n            }\n\n            userVertexBuffer.Buffer.SetData(startVertex * userVertexBuffer.Stride, vertexData, vertexOffset, vertexCount, userVertexBuffer.Stride, setDataOptions);\n            userVertexBuffer.Offset = startVertex + vertexCount;\n\n            SetVertexBuffer(userVertexBuffer.Buffer);\n            return startVertex;\n        }\n\n        private int SetUserIndexBuffer<T>(UserIndexBuffer userIndexBuffer, T[] indexData, int indexOffset, int indexCount)\n            where T : struct\n        {\n            Debug.Assert(indexCount >= 0);\n            if (userIndexBuffer.Count < indexCount)\n            {\n                if (userIndexBuffer.Buffer != null)\n                    userIndexBuffer.Buffer.Dispose();\n\n                int requiredIndexCount = Math.Max(indexCount, 6 * 512);\n                requiredIndexCount = (requiredIndexCount + 511) & (~511); // grow in chunks of 512.\n                userIndexBuffer.Buffer = new DynamicIndexBuffer(((IPlatformGraphicsContext)this.Context).DeviceStrategy.Device, userIndexBuffer.ElementSize, requiredIndexCount, BufferUsage.WriteOnly);\n                userIndexBuffer.Count = userIndexBuffer.Buffer.IndexCount;\n            }\n\n            int startIndex = userIndexBuffer.Offset;\n\n            SetDataOptions setDataOptions = SetDataOptions.NoOverwrite;\n            if ((startIndex + indexCount) >= userIndexBuffer.Count)\n            {\n                setDataOptions = SetDataOptions.Discard;\n                startIndex = 0;\n            }\n\n            userIndexBuffer.Buffer.SetData<T>(startIndex * ((IPlatformIndexBuffer)userIndexBuffer.Buffer).Strategy.ElementSizeInBytes, indexData, indexOffset, indexCount, setDataOptions);\n            userIndexBuffer.Offset = startIndex + indexCount;\n\n            Indices = userIndexBuffer.Buffer;\n            return startIndex;\n        }\n\n        public override void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount)\n            //where T : struct\n        {\n            // TODO: Do not set public VertexBuffers.\n            //       Bind directly to d3dContext and set dirty flags.\n            int startVertex = SetUserVertexBuffer(vertexData, vertexOffset, vertexCount, vertexDeclaration);\n\n            lock (this.SyncHandle)\n            {\n                PlatformApplyState();\n                //PlatformApplyIndexBuffer();\n                PlatformApplyVertexBuffers(); // SetUserVertexBuffer() overwrites the vertexBuffer\n                PlatformApplyShaders();\n\n                PlatformApplyPrimitiveType(primitiveType);\n                this.D3dContext.Draw(vertexCount, startVertex);\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public override void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration)\n            //where T : struct\n        {\n            // TODO: Do not set public VertexBuffers and Indices.\n            //       Bind directly to d3dContext and set dirty flags.\n            int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            int startVertex = SetUserVertexBuffer(vertexData, vertexOffset, numVertices, vertexDeclaration);\n            int startIndex = SetUserIndexBuffer(_userIndexBuffer16, indexData, indexOffset, indexCount);\n\n            lock (this.SyncHandle)\n            {\n                PlatformApplyState();\n                PlatformApplyIndexBuffer(); // SetUserIndexBuffer() overwrites the indexbuffer\n                PlatformApplyVertexBuffers(); // SetUserVertexBuffer() overwrites the vertexBuffer\n                PlatformApplyShaders();\n\n                PlatformApplyPrimitiveType(primitiveType);\n                this.D3dContext.DrawIndexed(indexCount, startIndex, startVertex);\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public override void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration)\n            //where T : struct\n        {\n            // TODO: Do not set public VertexBuffers and Indices.\n            //       Bind directly to d3dContext and set dirty flags.\n            int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            int startVertex = SetUserVertexBuffer(vertexData, vertexOffset, numVertices, vertexDeclaration);\n            int startIndex = SetUserIndexBuffer(_userIndexBuffer32, indexData, indexOffset, indexCount);\n\n            lock (this.SyncHandle)\n            {\n                PlatformApplyState();\n                PlatformApplyIndexBuffer(); // SetUserIndexBuffer() overwrites the indexbuffer\n                PlatformApplyVertexBuffers(); // SetUserVertexBuffer() overwrites the vertexBuffer\n                PlatformApplyShaders();\n\n                PlatformApplyPrimitiveType(primitiveType);\n                this.D3dContext.DrawIndexed(indexCount, startIndex, startVertex);\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public override void Flush()\n        {\n            this.D3dContext.Flush();\n        }\n\n\n        public override OcclusionQueryStrategy CreateOcclusionQueryStrategy()\n        {\n            return new ConcreteOcclusionQuery(this);\n        }\n\n        public override GraphicsDebugStrategy CreateGraphicsDebugStrategy()\n        {\n            return new ConcreteGraphicsDebug(this);\n        }\n\n        public override ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity)\n        {\n            return new ConcreteConstantBufferCollection(capacity);\n        }\n\n        public override TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity)\n        {\n            return new ConcreteTextureCollection(this, capacity);\n        }\n\n        public override SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity)\n        {\n            return new ConcreteSamplerStateCollection(this, capacity);\n        }\n\n        public override ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared)\n        {\n            return new ConcreteTexture2D(this, width, height, mipMap, format, arraySize, shared);\n        }\n\n        public override ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            return new ConcreteTexture3D(this, width, height, depth, mipMap, format);\n        }\n\n        public override ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format)\n        {\n            return new ConcreteTextureCube(this, size, mipMap, format);\n        }\n\n        public override IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTarget2D(this, width, height, mipMap, arraySize, shared, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount,\n                                              surfaceType: TextureSurfaceType.RenderTarget);\n        }\n\n        public override IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTarget3D(this, width, height, depth, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount);\n        }\n\n        public override IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTargetCube(this, size, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount);\n        }\n\n        public override ITexture2DStrategy CreateTexture2DStrategy(Stream stream)\n        {\n            return new ConcreteTexture2D(this, stream);\n        }\n\n        public override ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n        {\n            return new ConcreteVertexShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n        }\n        public override ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n        {\n            return new ConcretePixelShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n        }\n        public override ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats)\n        {\n            return new ConcreteConstantBuffer(this, name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats);\n        }\n\n        public override IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n        {\n            return new ConcreteIndexBuffer(this, indexElementSize, indexCount, usage);\n        }\n        public override VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n        {\n            return new ConcreteVertexBuffer(this, vertexDeclaration, vertexCount, usage);\n        }\n        public override IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n        {\n            return new ConcreteDynamicIndexBuffer(this, indexElementSize, indexCount, usage);\n        }\n        public override VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n        {\n            return new ConcreteDynamicVertexBuffer(this, vertexDeclaration, vertexCount, usage);\n        }\n\n        public override IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source)\n        {\n            return new ConcreteBlendState(this, source);\n        }\n        public override IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source)\n        {\n            return new ConcreteDepthStencilState(this, source);\n        }\n        public override IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy source)\n        {\n            return new ConcreteRasterizerState(this, source);\n        }\n        public override ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source)\n        {\n            return new ConcreteSamplerState(this, source);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_userIndexBuffer16.Buffer != null)\n                    _userIndexBuffer16.Buffer.Dispose();\n                _userIndexBuffer16.Buffer = null;\n                if (_userIndexBuffer32.Buffer != null)\n                    _userIndexBuffer32.Buffer.Dispose();\n                _userIndexBuffer32.Buffer = null;\n\n                foreach (UserVertexBuffer uvb in _userVertexBuffers.Values)\n                {\n                    uvb.Buffer.Dispose();\n                    uvb.Buffer = null;\n                }\n\n                if (_d3dContext != null)\n                    _d3dContext.Dispose();\n                _d3dContext = null;\n            }\n\n            base.Dispose(disposing);\n        }\n\n        protected override void PlatformResolveRenderTargets()\n        {\n            for (int i = 0; i < base.RenderTargetCount; i++)\n            {\n                RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[i];\n\n                // Resolve MSAA render targets\n                RenderTarget2D renderTarget = renderTargetBinding.RenderTarget as RenderTarget2D;\n                if (renderTarget != null)\n                {\n                    ((IRenderTarget)renderTarget).RenderTargetStrategy.ResolveSubresource(this);\n                }\n\n                // Generate mipmaps.\n                if (renderTargetBinding.RenderTarget.LevelCount > 1)\n                {\n                    lock (this.SyncHandle)\n                    {\n                        this.D3dContext.GenerateMips(((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ConcreteTexture>().GetShaderResourceView());\n                    }\n                }\n            }\n        }\n\n        protected override void PlatformApplyDefaultRenderTarget()\n        {\n            // Set the default swap chain.\n            Array.Clear(_currentRenderTargets, 0, _currentRenderTargets.Length);\n            _currentRenderTargets[0] = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>()._renderTargetView;\n            _currentDepthStencilView = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>()._depthStencilView;\n\n            lock (this.SyncHandle)\n            {\n                this.D3dContext.OutputMerger.SetTargets(_currentDepthStencilView, _currentRenderTargets);\n            }\n        }\n\n        protected override IRenderTarget PlatformApplyRenderTargets()\n        {\n            // Clear the current render targets.\n            Array.Clear(_currentRenderTargets, 0, _currentRenderTargets.Length);\n            _currentDepthStencilView = null;\n\n            // Make sure none of the new targets are bound\n            // to the device as a texture resource.\n            lock (this.SyncHandle)\n            {\n                ((IPlatformTextureCollection)this.VertexTextures).Strategy.ToConcrete<ConcreteTextureCollection>().ClearTargets(base.CurrentRenderTargetBindings, this.D3dContext.VertexShader);\n                ((IPlatformTextureCollection)this.Textures).Strategy.ToConcrete<ConcreteTextureCollection>().ClearTargets(base.CurrentRenderTargetBindings, this.D3dContext.PixelShader);\n            }\n\n            for (int i = 0; i < base.RenderTargetCount; i++)\n            {\n                RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[i];\n                IRenderTargetStrategyDX11 targetDX = (IRenderTargetStrategyDX11)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>();\n                _currentRenderTargets[i] = targetDX.GetRenderTargetView(renderTargetBinding.ArraySlice);\n            }\n\n            // Use the depth from the first target.\n            IRenderTargetStrategyDX11 renderTargetDX = (IRenderTargetStrategyDX11)((IPlatformTexture)base.CurrentRenderTargetBindings[0].RenderTarget).GetTextureStrategy<ITextureStrategy>();\n            _currentDepthStencilView = renderTargetDX.GetDepthStencilView(base.CurrentRenderTargetBindings[0].ArraySlice);\n\n            // Set the targets.\n            lock (this.SyncHandle)\n            {\n                this.D3dContext.OutputMerger.SetTargets(_currentDepthStencilView, _currentRenderTargets);\n            }\n\n            return (IRenderTarget)base.CurrentRenderTargetBindings[0].RenderTarget;\n        }\n\n        internal void ClearCurrentRenderTargets()\n        {\n            _currentDepthStencilView = null;\n            Array.Clear(_currentRenderTargets, 0, _currentRenderTargets.Length);\n            Array.Clear(base.CurrentRenderTargetBindings, 0, base.CurrentRenderTargetBindings.Length);\n            base._currentRenderTargetCount = 0;\n        }\n\n\n#if UAP || WINUI\n        internal void UAP_ResetRenderTargets()\n        {\n            PlatformApplyViewport();\n                        \n            lock (this.SyncHandle)\n                    this.D3dContext.OutputMerger.SetTargets(_currentDepthStencilView, _currentRenderTargets);\n\n            ((IPlatformTextureCollection)this.Textures).Strategy.Dirty();\n            ((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.Dirty();\n            _depthStencilStateDirty = true;\n            _blendStateDirty = true;\n            _indexBufferDirty = true;\n            _vertexBuffersDirty = true;\n            _pixelShaderDirty = true;\n            _vertexShaderDirty = true;\n            _rasterizerStateDirty = true;\n            _scissorRectangleDirty = true;\n        }\n#endif\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteGraphicsDebug.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDebug : GraphicsDebugStrategy\n    {\n        private readonly D3D11.InfoQueue _infoQueue;\n        private readonly Queue<GraphicsDebugMessage> _cachedMessages;\n        private bool _hasPushedFilters = false;\n\n\n        internal ConcreteGraphicsDebug(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n            D3D11.DeviceContext d3dContext = contextStrategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n            _infoQueue = d3dContext.QueryInterfaceOrNull<D3D11.InfoQueue>();\n            _cachedMessages = new Queue<GraphicsDebugMessage>();\n\n            if (_infoQueue != null)\n            {\n                _infoQueue.PushEmptyRetrievalFilter();\n                _infoQueue.PushEmptyStorageFilter();\n                _hasPushedFilters = true;\n            }\n        }\n\n\n        public override bool TryDequeueMessage(out GraphicsDebugMessage message)\n        {\n            if (_infoQueue == null)\n            {\n                message = null;\n                return false;\n            }\n\n            if (!_hasPushedFilters)\n            {\n                _infoQueue.PushEmptyRetrievalFilter();\n                _infoQueue.PushEmptyStorageFilter();\n                _hasPushedFilters = true;\n            }\n\n            if (_cachedMessages.Count > 0)\n            {\n                message = _cachedMessages.Dequeue();\n                return true;\n            }\n\n            if (_infoQueue.NumStoredMessagesAllowedByRetrievalFilter > 0)\n            {\n                // Grab all current messages and put them in the cached messages queue.\n                for (int i = 0; i < _infoQueue.NumStoredMessagesAllowedByRetrievalFilter; i++)\n                {\n                    D3D11.Message dxMessage = _infoQueue.GetMessage(i);\n                    GraphicsDebugMessage debugMsg = new GraphicsDebugMessage();\n                    debugMsg.Message = dxMessage.Description;\n                    debugMsg.Id = (int)dxMessage.Id;\n                    debugMsg.IdName = dxMessage.Id.ToString();\n                    debugMsg.Severity = dxMessage.Severity.ToString();\n                    debugMsg.Category = dxMessage.Category.ToString();\n                    _cachedMessages.Enqueue(debugMsg);\n                }\n\n                _infoQueue.ClearStoredMessages();\n            }\n            \n            if (_cachedMessages.Count > 0)\n            {\n                message = _cachedMessages.Dequeue();\n                return true;\n            }\n            \n            // No messages to grab from DirectX.\n            message = null;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteGraphicsDevice.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing DX = SharpDX;\nusing DXGI = SharpDX.DXGI;\nusing D2D = SharpDX.Direct2D1;\nusing D3D = SharpDX.Direct3D;\nusing D3D11 = SharpDX.Direct3D11;\n\n#if UAP || WINUI\nusing System.Runtime.InteropServices;\nusing Windows.Graphics.Display;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml.Controls;\nusing SharpDX.Mathematics.Interop;\n#endif\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDevice : GraphicsDeviceStrategy\n    {\n        // Core Direct3D Objects\n        internal D3D11.Device _d3dDevice;\n        internal D3D11.RenderTargetView _renderTargetView;\n        internal D3D11.DepthStencilView _depthStencilView;\n\n#if WINDOWSDX\n        internal DXGI.SwapChain _swapChain;\n#endif\n\n#if UAP || WINUI\n        // The swap chain resources.\n        internal DXGI.SwapChain1 _swapChain;\n        internal D2D.Bitmap1 _bitmapTarget;\n\n        internal SwapChainPanel _swapChainPanel;\n\n        // Declare Direct2D Objects\n        internal D2D.Factory1 _d2dFactory;\n        internal D2D.Device _d2dDevice;\n        internal D2D.DeviceContext _d2dContext;\n\n        // Declare DirectWrite & Windows Imaging Component Objects\n        internal SharpDX.DirectWrite.Factory _dwriteFactory;\n        internal SharpDX.WIC.ImagingFactory2 _wicFactory;\n\n        // Tearing (disabling V-Sync) support\n        internal bool _isTearingSupported;\n\n        internal float _dpi;\n#endif\n\n        internal D3D11.Device D3DDevice { get { return _d3dDevice; } }\n   \n\n        internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n            : base(device, adapter, graphicsProfile, false, presentationParameters)\n        {\n            CreateDeviceIndependentResources();\n\n            // Windows requires BGRA support out of DX.\n            D3D11.DeviceCreationFlags creationFlags = D3D11.DeviceCreationFlags.BgraSupport;\n\n            if (presentationParameters.UseDebugLayers)\n                creationFlags |= D3D11.DeviceCreationFlags.Debug;\n\n#if DEBUG && (UAP || WINUI)\n            creationFlags |= D3D11.DeviceCreationFlags.Debug;\n#endif\n\n            // Pass the preferred feature levels based on the\n            // target profile that may have been set by the user.\n            D3D.FeatureLevel[] featureLevels;\n            List<D3D.FeatureLevel> featureLevelsList = new List<D3D.FeatureLevel>();\n            // create device with the highest available profile\n            featureLevelsList.Add(D3D.FeatureLevel.Level_11_1);\n            featureLevelsList.Add(D3D.FeatureLevel.Level_11_0);\n            featureLevelsList.Add(D3D.FeatureLevel.Level_10_1);\n            featureLevelsList.Add(D3D.FeatureLevel.Level_10_0);\n            featureLevelsList.Add(D3D.FeatureLevel.Level_9_3);\n            featureLevelsList.Add(D3D.FeatureLevel.Level_9_2);\n            featureLevelsList.Add(D3D.FeatureLevel.Level_9_1);\n#if DEBUG\n            featureLevelsList.Clear();\n            // create device specific to profile\n            if (GraphicsProfile == GraphicsProfile.FL11_1) featureLevelsList.Add(D3D.FeatureLevel.Level_11_1);\n            if (GraphicsProfile == GraphicsProfile.FL11_0) featureLevelsList.Add(D3D.FeatureLevel.Level_11_0);\n            if (GraphicsProfile == GraphicsProfile.FL10_1) featureLevelsList.Add(D3D.FeatureLevel.Level_10_1);\n            if (GraphicsProfile == GraphicsProfile.FL10_0) featureLevelsList.Add(D3D.FeatureLevel.Level_10_0);\n            if (GraphicsProfile == GraphicsProfile.HiDef) featureLevelsList.Add(D3D.FeatureLevel.Level_9_3);\n            if (GraphicsProfile == GraphicsProfile.Reach) featureLevelsList.Add(D3D.FeatureLevel.Level_9_1);\n#endif\n            featureLevels = featureLevelsList.ToArray();\n\n            D3D.DriverType driverType = D3D.DriverType.Hardware;   //Default value\n\n#if WINDOWSDX\n            switch (presentationParameters.UseDriverType)\n            {\n                case PresentationParameters.DriverType.Reference:\n                    driverType = D3D.DriverType.Reference;\n                    break;\n\n                case PresentationParameters.DriverType.FastSoftware:\n                    driverType = D3D.DriverType.Warp;\n                    break;\n            }\n#endif\n\n#if UAP || WINUI\n            driverType = GraphicsAdapter.UseReferenceDevice\n                       ? D3D.DriverType.Reference\n                       : D3D.DriverType.Hardware;\n#endif\n\n            try\n            {\n                // Create the Direct3D device.\n                using (D3D11.Device defaultDevice = new D3D11.Device(driverType, creationFlags, featureLevels))\n                {\n#if WINDOWSDX\n                    _d3dDevice = defaultDevice.QueryInterface<D3D11.Device>();\n#endif\n#if UAP || WINUI\n                    _d3dDevice = defaultDevice.QueryInterface<D3D11.Device1>();\n#endif\n                }\n\n#if UAP || WINUI\n                // Necessary to enable video playback\n                D3D.DeviceMultithread multithread = _d3dDevice.QueryInterface<D3D.DeviceMultithread>();\n                multithread.SetMultithreadProtected(true);\n#endif\n            }\n            catch (DX.SharpDXException)\n            {\n                // Try again without the debug flag.  This allows debug builds to run\n                // on machines that don't have the debug runtime installed.\n                creationFlags &= ~D3D11.DeviceCreationFlags.Debug;\n                using (D3D11.Device defaultDevice = new D3D11.Device(driverType, creationFlags, featureLevels))\n                {\n#if WINDOWSDX\n                    _d3dDevice = defaultDevice.QueryInterface<D3D11.Device>();\n#endif\n#if UAP || WINUI\n                    _d3dDevice = defaultDevice.QueryInterface<D3D11.Device1>();\n#endif\n                }\n            }\n\n#if UAP || WINUI\n            // Create the Direct2D device.\n            using (DXGI.Device dxgiDevice = _d3dDevice.QueryInterface<DXGI.Device>())\n                _d2dDevice = new D2D.Device(_d2dFactory, dxgiDevice);\n\n            // Create Direct2D context\n            _d2dContext = new D2D.DeviceContext(_d2dDevice, D2D.DeviceContextOptions.None);\n\n            this.Dpi = DisplayInformation.GetForCurrentView().LogicalDpi;\n#endif\n        }\n\n        public override void Reset()\n        {\n            PlatformReset(this.PresentationParameters);\n        }\n\n        public override void Reset(PresentationParameters presentationParameters)\n        {\n            PlatformReset(presentationParameters);\n        }\n\n        private void PlatformReset(PresentationParameters presentationParameters)\n        {\n            this.PresentationParameters = presentationParameters;\n\n#if WINDOWSDX\n            if (this.PresentationParameters.IsFullScreen)\n            {\n                int width, height;\n                if (!this.PresentationParameters.HardwareModeSwitch)\n                {\n                    DisplayMode displayMode = Adapter.CurrentDisplayMode;\n                    width = displayMode.Width;\n                    height = displayMode.Height;\n                }\n                else\n                {\n                    int preferredWidth = this.PresentationParameters.BackBufferWidth;\n                    int preferredHeight = this.PresentationParameters.BackBufferHeight;\n                    SurfaceFormat preferredFormat = this.PresentationParameters.BackBufferFormat;\n                    GetClosestBackBufferSize(preferredWidth, preferredHeight, preferredFormat, out width, out height);\n                }\n                this.PresentationParameters.BackBufferWidth = width;\n                this.PresentationParameters.BackBufferHeight = height;\n            }\n#endif\n\n            if (this.PresentationParameters.DeviceWindowHandle == IntPtr.Zero)\n                throw new ArgumentException(\"PresentationParameters.DeviceWindowHandle must not be null.\");\n\n            CreateSizeDependentResources();\n            ((IPlatformGraphicsContext)_mainContext).Strategy.ApplyRenderTargets(null);\n        }\n\n        public override void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void Present()\n        {\n            base.Present();\n\n            try\n            {\n                lock (((IPlatformGraphicsContext)_mainContext).Strategy.SyncHandle)\n                {\n                    int syncInterval = 0;\n                    DXGI.PresentFlags presentFlags = DXGI.PresentFlags.None;\n\n#if WINDOWSDX\n                    // The first argument instructs DXGI to block n VSyncs before presenting.\n                    syncInterval = PresentationParameters.PresentationInterval.ToDXSwapInterval();\n#endif\n\n#if UAP || WINUI\n                    // The first argument instructs DXGI to block until VSync, putting the application\n                    // to sleep until the next VSync. This ensures we don't waste any cycles rendering\n                    // frames that will never be displayed to the screen.\n                    if (_isTearingSupported && PresentationParameters.PresentationInterval == PresentInterval.Immediate)\n                    {\n                        syncInterval = 0;\n                        presentFlags = DXGI.PresentFlags.AllowTearing;\n                    }\n                    else\n                    {\n                        syncInterval = 1;\n                    }\n#endif\n\n                    _swapChain.Present(syncInterval, presentFlags);\n                }\n            }\n            catch (DX.SharpDXException ex)\n            {\n                // TODO: How should we deal with a device lost case here?\n\n#if UAP || WINUI\n                /*               \n                // If the device was removed either by a disconnect or a driver upgrade, we \n                // must completely reinitialize the renderer.\n                if (ex.ResultCode == DXGI.DXGIError.DeviceRemoved ||\n                    ex.ResultCode == DXGI.DXGIError.DeviceReset)\n                    this.Initialize();\n                else\n                    throw;\n                */\n#endif\n            }\n        }\n\n        public unsafe override void GetBackBufferData<T>(Rectangle? rect, T[] data, int startIndex, int elementCount)\n        {\n            // TODO share code with Texture2D.GetData\n            // first set up a staging texture\n            const SurfaceFormat format = SurfaceFormat.Color;\n            //You can't Map the BackBuffer surface, so we copy to another texture\n            using (D3D11.Texture2D backBufferTexture = D3D11.Resource.FromSwapChain<D3D11.Texture2D>(_swapChain, 0))\n            {\n                D3D11.Texture2DDescription texture2DDesc = backBufferTexture.Description;\n                texture2DDesc.SampleDescription = new DXGI.SampleDescription(1, 0);\n                texture2DDesc.BindFlags = D3D11.BindFlags.None;\n                texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read;\n                texture2DDesc.Usage = D3D11.ResourceUsage.Staging;\n                texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n                using (D3D11.Texture2D stagingTexture = new D3D11.Texture2D(this.D3DDevice, texture2DDesc))\n                {\n                    lock (((IPlatformGraphicsContext)_mainContext).Strategy.SyncHandle)\n                    {\n                        // Copy the data from the GPU to the staging texture.\n                        // if MSAA is enabled we need to first copy to a resource without MSAA\n                        if (backBufferTexture.Description.SampleDescription.Count > 1)\n                        {\n                            texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n                            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n                            using (D3D11.Texture2D noMsTex = new D3D11.Texture2D(this.D3DDevice, texture2DDesc))\n                            {\n                                ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.ResolveSubresource(backBufferTexture, 0, noMsTex, 0, texture2DDesc.Format);\n                                if (rect.HasValue)\n                                {\n                                    Rectangle r = rect.Value;\n                                    ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.CopySubresourceRegion(noMsTex, 0,\n                                        new D3D11.ResourceRegion(r.Left, r.Top, 0, r.Right, r.Bottom, 1), stagingTexture,\n                                        0);\n                                }\n                                else\n                                    ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.CopyResource(noMsTex, stagingTexture);\n                            }\n                        }\n                        else\n                        {\n                            if (rect.HasValue)\n                            {\n                                Rectangle r = rect.Value;\n                                ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.CopySubresourceRegion(backBufferTexture, 0,\n                                    new D3D11.ResourceRegion(r.Left, r.Top, 0, r.Right, r.Bottom, 1), stagingTexture, 0);\n                            }\n                            else\n                                ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.CopyResource(backBufferTexture, stagingTexture);\n                        }\n\n                        // Copy the data to the array.\n                        DX.DataStream stream = null;\n                        DX.DataBox dataBox = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.MapSubresource(stagingTexture, 0, D3D11.MapMode.Read, D3D11.MapFlags.None, out stream);\n                        try\n                        {\n                            int elementsInRow, rows;\n                            if (rect.HasValue)\n                            {\n                                elementsInRow = rect.Value.Width;\n                                rows = rect.Value.Height;\n                            }\n                            else\n                            {\n                                elementsInRow = stagingTexture.Description.Width;\n                                rows = stagingTexture.Description.Height;\n                            }\n                            int elementSize = format.GetSize();\n                            int rowSize = elementSize * elementsInRow;\n                            if (rowSize == dataBox.RowPitch)\n                                stream.ReadRange(data, startIndex, elementCount);\n                            else\n                            {\n                                // Some drivers may add pitch to rows.\n                                // We need to copy each row separately and skip trailing zeroes.\n                                stream.Seek(0, SeekOrigin.Begin);\n\n                                int elementSizeInByte = sizeof(T);\n                                for (int row = 0; row < rows; row++)\n                                {\n                                    int i;\n                                    for (i = row * rowSize / elementSizeInByte; i < (row + 1) * rowSize / elementSizeInByte; i++)\n                                        data[i + startIndex] = stream.Read<T>();\n\n                                    if (i >= elementCount)\n                                        break;\n\n                                    stream.Seek(dataBox.RowPitch - rowSize, SeekOrigin.Current);\n                                }\n                            }\n                        }\n                        finally\n                        {\n                            DX.Utilities.Dispose( ref stream);\n\n                            ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.UnmapSubresource(stagingTexture, 0);\n                        }\n                    }\n                }\n            }\n\n        }\n\n        /// <summary>\n        /// Creates resources not tied the active graphics device.\n        /// </summary>\n        private void CreateDeviceIndependentResources()\n        {\n#if UAP || WINUI\n\n            D2D.DebugLevel debugLevel = D2D.DebugLevel.None;\n\n#if DEBUG && (UAP || WINUI)\n            debugLevel |= D2D.DebugLevel.Information;\n#endif\n\n            // Allocate new references\n            _d2dFactory = new D2D.Factory1(D2D.FactoryType.SingleThreaded, debugLevel);\n            _dwriteFactory = new SharpDX.DirectWrite.Factory(SharpDX.DirectWrite.FactoryType.Shared);\n            _wicFactory = new SharpDX.WIC.ImagingFactory2();\n#endif\n        }\n\n        protected override void PlatformInitialize()\n        {\n#if WINDOWSDX\n            if (this.PresentationParameters.IsFullScreen)\n            {\n                int width, height;\n                if (!this.PresentationParameters.HardwareModeSwitch)\n                {\n                    DisplayMode displayMode = Adapter.CurrentDisplayMode;\n                    width = displayMode.Width;\n                    height = displayMode.Height;\n                }\n                else\n                {\n                    int preferredWidth = this.PresentationParameters.BackBufferWidth;\n                    int preferredHeight = this.PresentationParameters.BackBufferHeight;\n                    SurfaceFormat preferredFormat = this.PresentationParameters.BackBufferFormat;\n                    GetClosestBackBufferSize(preferredWidth, preferredHeight, preferredFormat, out width, out height);\n                }\n                this.PresentationParameters.BackBufferWidth = width;\n                this.PresentationParameters.BackBufferHeight = height;\n            }\n#endif\n            CreateSizeDependentResources();\n        }\n\n#if WINDOWSDX\n        private void GetClosestBackBufferSize(int preferredWidth, int preferredHeight, SurfaceFormat preferredFormat,\n             out int width, out int height)\n        {\n            width = preferredWidth;\n            height = preferredHeight;\n\n            // TODO: we can get a matching DisplayMode from this.Adapter.SupportedDisplayModes\n\n            DXGI.Output output = null;\n            if (_swapChain != null)\n            {\n                try { output = _swapChain.ContainingOutput; }\n                catch (DX.SharpDXException) { /* ContainingOutput fails on a headless device */ }\n            }\n            else\n            {\n                // get the primary output\n                // TODO: GetAdapter1(0) here is wrong. Get the DXGI.Adapter1 from ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>()._dxAdapter.\n                using (DXGI.Factory1 factory = new DXGI.Factory1())\n                using (DXGI.Adapter1 adapter = factory.GetAdapter1(0))\n                    output = adapter.Outputs[0];\n            }\n\n            if (output != null)\n            {\n                using (output)\n                {\n                    DXGI.ModeDescription targetModeDesc = new DXGI.ModeDescription();\n                    targetModeDesc.Scaling = DXGI.DisplayModeScaling.Unspecified;\n                    targetModeDesc.Width = preferredWidth;\n                    targetModeDesc.Height = preferredHeight;\n                    targetModeDesc.Format = preferredFormat.ToDXFormat();\n\n                    DXGI.ModeDescription closestMode;\n                    output.GetClosestMatchingMode(this.D3DDevice, targetModeDesc, out closestMode);\n                    width = closestMode.Width;\n                    height = closestMode.Height;\n                }\n            }\n        }\n\n#endif\n\n#if WINDOWSDX\n        internal void SetHardwareFullscreen()\n        {\n            _swapChain.SetFullscreenState(PresentationParameters.IsFullScreen && PresentationParameters.HardwareModeSwitch, null);\n        }\n\n        internal void ClearHardwareFullscreen()\n        {\n            _swapChain.SetFullscreenState(false, null);\n        }\n#endif\n\n\n#if WINDOWSDX\n        internal void ResizeTargets()\n        {\n            DXGI.Format format = PresentationParameters.BackBufferFormat.ToDXFormat();\n            DXGI.ModeDescription modeDesc = new DXGI.ModeDescription();\n            modeDesc.Format = format;\n            modeDesc.Scaling = DXGI.DisplayModeScaling.Unspecified;\n            modeDesc.Width = PresentationParameters.BackBufferWidth;\n            modeDesc.Height = PresentationParameters.BackBufferHeight;\n\n            _swapChain.ResizeTarget(ref modeDesc);\n        }\n#endif\n\n#if WINDOWSDX\n        internal void RefreshAdapter()\n        {\n            if (_swapChain == null)\n                return;\n\n            DXGI.Output output = null;\n            try { output = _swapChain.ContainingOutput; }\n            catch (DX.SharpDXException) { /* ContainingOutput fails on a headless device */ }\n\n            if (output != null)\n            {\n                using (output)\n                {\n                    foreach (GraphicsAdapter adapter in GraphicsAdapter.Adapters)\n                    {\n                        if (adapter.DeviceName == output.Description.DeviceName)\n                        {\n                            Adapter = adapter;\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n#endif\n\n#if UAP || WINUI\n        internal void SetMultiSamplingToMaximum(PresentationParameters presentationParameters, out int quality)\n        {\n            quality = (int)D3D11.StandardMultisampleQualityLevels.StandardMultisamplePattern;\n        }\n#endif\n\n        internal void Internal_CreateSizeDependentResources()\n        {\n            this.CreateSizeDependentResources();\n        }\n\n        private void CreateSizeDependentResources()\n        {\n            // Clamp MultiSampleCount\n            int maxMultiSampleCount = GetMaxMultiSampleCount(this.PresentationParameters.BackBufferFormat);\n            PresentationParameters.MultiSampleCount = TextureHelpers.GetClampedMultiSampleCount(PresentationParameters.BackBufferFormat, PresentationParameters.MultiSampleCount, maxMultiSampleCount);\n\n            ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.OutputMerger.SetTargets((D3D11.DepthStencilView)null,\n                                                                                                (D3D11.RenderTargetView)null);\n\n            if (_renderTargetView != null)\n            {\n                _renderTargetView.Dispose();\n                _renderTargetView = null;\n            }\n            if (_depthStencilView != null)\n            {\n                _depthStencilView.Dispose();\n                _depthStencilView = null;\n            }\n\n#if UAP || WINUI\n            if (_bitmapTarget != null)\n            {\n                _bitmapTarget.Dispose();\n                _bitmapTarget = null;\n            }\n            _d2dContext.Target = null;\n#endif\n\n            // Clear the current render targets.\n            ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().ClearCurrentRenderTargets();\n\n            // Make sure all pending rendering commands are flushed.\n            ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext.Flush();\n\n            // We need presentation parameters to continue here.\n            if (PresentationParameters == null || PresentationParameters.DeviceWindowHandle == IntPtr.Zero)\n            {\n                if (_swapChain != null)\n                {\n                    _swapChain.Dispose();\n                    _swapChain = null;\n                }\n\n                return;\n            }\n\n            DXGI.Format format = PresentationParameters.BackBufferFormat.ToDXFormat();\n            DXGI.SampleDescription multisampleDesc = GetSupportedSampleDescription(\n                format,\n                PresentationParameters.MultiSampleCount);\n\n            DXGI.SwapChainFlags swapChainFlags = DXGI.SwapChainFlags.None;\n\n#if WINDOWSDX\n\n            swapChainFlags = DXGI.SwapChainFlags.AllowModeSwitch;\n\n            // If the swap chain already exists... update it.\n            if (_swapChain != null\n                // check if multisampling hasn't changed\n            && _swapChain.Description.SampleDescription.Count == multisampleDesc.Count\n            && _swapChain.Description.SampleDescription.Quality == multisampleDesc.Quality\n               )\n            {\n                _swapChain.ResizeBuffers(2,\n                                         PresentationParameters.BackBufferWidth,\n                                         PresentationParameters.BackBufferHeight,\n                                         format,\n                                         swapChainFlags);\n            }            \n            else // Otherwise, create a new swap chain.\n            {\n                bool wasFullScreen = false;\n                // Dispose of old swap chain if exists\n                if (_swapChain != null)\n                {\n                    wasFullScreen = _swapChain.IsFullScreen;\n                    // Before releasing a swap chain, first switch to windowed mode\n                    _swapChain.SetFullscreenState(false, null);\n                    _swapChain.Dispose();\n                }\n\n                // SwapChain description\n                DXGI.SwapChainDescription swapChainDesc = new DXGI.SwapChainDescription();\n                swapChainDesc.ModeDescription.Format = format;\n                swapChainDesc.ModeDescription.Scaling = DXGI.DisplayModeScaling.Unspecified;\n                swapChainDesc.ModeDescription.Width = PresentationParameters.BackBufferWidth;\n                swapChainDesc.ModeDescription.Height = PresentationParameters.BackBufferHeight;\n\n                swapChainDesc.OutputHandle = PresentationParameters.DeviceWindowHandle;\n                swapChainDesc.IsWindowed = true;\n\n                swapChainDesc.SampleDescription = multisampleDesc;\n                swapChainDesc.Usage = DXGI.Usage.RenderTargetOutput;\n                swapChainDesc.BufferCount = 2;\n                swapChainDesc.SwapEffect = PresentationParameters.PresentationInterval.ToDXSwapEffect();\n                swapChainDesc.Flags = swapChainFlags;\n\n                // Once the desired swap chain description is configured, it must be created on the same adapter as our D3D Device\n\n                // First, retrieve the underlying DXGI Device from the D3D Device.\n                // Creates the swap chain \n                using (DXGI.Device1 dxgiDevice = this.D3DDevice.QueryInterface<DXGI.Device1>())\n                using (DXGI.Adapter dxgiAdapter = dxgiDevice.Adapter)\n                using (DXGI.Factory1 dxgiFactory = dxgiAdapter.GetParent<DXGI.Factory1>())\n                {\n                    _swapChain = new DXGI.SwapChain(dxgiFactory, dxgiDevice, swapChainDesc);\n                    RefreshAdapter();\n                    dxgiFactory.MakeWindowAssociation(PresentationParameters.DeviceWindowHandle, DXGI.WindowAssociationFlags.IgnoreAll);\n                    // To reduce latency, ensure that DXGI does not queue more than one frame at a time.\n                    // Docs: https://msdn.microsoft.com/en-us/library/windows/desktop/ff471334(v=vs.85).aspx\n                    dxgiDevice.MaximumFrameLatency = 1;\n                }\n                // Preserve full screen state, after swap chain is re-created \n                if (PresentationParameters.HardwareModeSwitch\n                    && wasFullScreen)\n                    SetHardwareFullscreen();\n            }\n#endif\n\n\n#if UAP || WINUI\n\n            _isTearingSupported = IsTearingSupported();\n            if (_isTearingSupported)\n            {\n                swapChainFlags = DXGI.SwapChainFlags.AllowTearing;\n            }\n\n            // If the swap chain already exists... update it.\n            if (_swapChain != null\n               )\n            {\n                _swapChain.ResizeBuffers(2,\n                                         PresentationParameters.BackBufferWidth,\n                                         PresentationParameters.BackBufferHeight,\n                                         format,\n                                         swapChainFlags);\n            }            \n            else // Otherwise, create a new swap chain.\n            {\n                // SwapChain description\n                DXGI.SwapChainDescription1 swapChainDesc = new DXGI.SwapChainDescription1();\n                // Automatic sizing\n                swapChainDesc.Width = PresentationParameters.BackBufferWidth;\n                swapChainDesc.Height = PresentationParameters.BackBufferHeight;\n                swapChainDesc.Format = format;\n                swapChainDesc.Stereo = false;\n                // By default we scale the backbuffer to the window \n                // rectangle to function more like a WP7 game.\n                swapChainDesc.Scaling = DXGI.Scaling.Stretch;\n\n                swapChainDesc.SampleDescription = multisampleDesc;\n                swapChainDesc.Usage = DXGI.Usage.RenderTargetOutput;\n                swapChainDesc.BufferCount = 2;\n                swapChainDesc.SwapEffect = PresentationParameters.PresentationInterval.ToDXSwapEffect();\n                swapChainDesc.Flags = swapChainFlags;\n\n                // Once the desired swap chain description is configured, it must be created on the same adapter as our D3D Device\n\n                // First, retrieve the underlying DXGI Device from the D3D Device.\n                // Creates the swap chain \n                using (DXGI.Device2 dxgiDevice2 = this.D3DDevice.QueryInterface<DXGI.Device2>())\n                using (DXGI.Adapter dxgiAdapter = dxgiDevice2.Adapter)\n                using (DXGI.Factory2 dxgiFactory2 = dxgiAdapter.GetParent<DXGI.Factory2>())\n                {\n                    _swapChainPanel = UAPGameWindow.FromHandle(PresentationParameters.DeviceWindowHandle).SwapChainPanel;\n                    if (_swapChainPanel != null)\n                    {\n                        using (DXGI.ISwapChainPanelNative nativePanel = DX.ComObject.As<DXGI.ISwapChainPanelNative>(_swapChainPanel))\n                        {\n                            _swapChain = new DXGI.SwapChain1(dxgiFactory2, dxgiDevice2, ref swapChainDesc, null);\n                            nativePanel.SwapChain = _swapChain;\n\n                            // update swapChain2.MatrixTransform on SizeChanged of SwapChainPanel\n                            // sometimes window.SizeChanged and SwapChainPanel.SizeChanged are not synced\n                            _swapChainPanel.SizeChanged += (sender, e) =>\n                            {\n                                try\n                                {\n                                    using (DXGI.SwapChain2 swapChain2 = _swapChain.QueryInterface<DXGI.SwapChain2>())\n                                    {\n                                        RawMatrix3x2 inverseScale = new RawMatrix3x2();\n                                        inverseScale.M11 = (float)_swapChainPanel.ActualWidth / PresentationParameters.BackBufferWidth;\n                                        inverseScale.M22 = (float)_swapChainPanel.ActualHeight / PresentationParameters.BackBufferHeight;\n                                        swapChain2.MatrixTransform = inverseScale;\n                                    };\n                                }\n                                catch (Exception) { }\n                            };\n                        }\n                    }\n                    else // (PresentationParameters.DeviceWindowHandle != IntPtr.Zero)\n                    {\n                        // Creates a SwapChain from a CoreWindow pointer.\n                        CoreWindow coreWindow = Marshal.GetObjectForIUnknown(PresentationParameters.DeviceWindowHandle) as CoreWindow;\n                        using (DX.ComObject comWindow = new DX.ComObject(coreWindow))\n                            _swapChain = new DXGI.SwapChain1(dxgiFactory2, dxgiDevice2, comWindow, ref swapChainDesc);\n                    }\n\n                    // Ensure that DXGI does not queue more than one frame at a time. This both reduces \n                    // latency and ensures that the application will only render after each VSync, minimizing \n                    // power consumption.\n                    dxgiDevice2.MaximumFrameLatency = 1;\n                }\n            }\n\n            _swapChain.Rotation = DXGI.DisplayModeRotation.Identity;\n\n            // Counter act the composition scale of the render target as \n            // we already handle this in the platform window code.\n            if (_swapChainPanel != null)\n            {\n                Windows.Foundation.IAsyncAction asyncResult = _swapChainPanel.Dispatcher.RunIdleAsync((e) =>\n                {\n                    RawMatrix3x2 inverseScale = new RawMatrix3x2();\n                    inverseScale.M11 = (float)_swapChainPanel.ActualWidth  / PresentationParameters.BackBufferWidth;\n                    inverseScale.M22 = (float)_swapChainPanel.ActualHeight / PresentationParameters.BackBufferHeight;\n                    using (DXGI.SwapChain2 swapChain2 = _swapChain.QueryInterface<DXGI.SwapChain2>())\n                        swapChain2.MatrixTransform = inverseScale;\n                });\n            }\n#endif\n\n            // Obtain the backbuffer for this window which will be the final 3D rendertarget.\n            Point targetSize;\n            using (D3D11.Texture2D backBuffer = D3D11.Texture2D.FromSwapChain<D3D11.Texture2D>(_swapChain, 0))\n            {\n                // Create a view interface on the rendertarget to use on bind.\n                _renderTargetView = new D3D11.RenderTargetView(this.D3DDevice, backBuffer);\n\n                // Get the rendertarget dimensions for later.\n                D3D11.Texture2DDescription backBufferDesc = backBuffer.Description;\n                targetSize = new Point(backBufferDesc.Width, backBufferDesc.Height);\n            }\n\n            // Create the depth buffer if we need it.\n            if (PresentationParameters.DepthStencilFormat != DepthFormat.None)\n            {\n                DXGI.Format depthFormat = PresentationParameters.DepthStencilFormat.ToDXFormat();\n\n                // Allocate a 2-D surface as the depth/stencil buffer.\n                D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n                texture2DDesc.Format = depthFormat;\n                texture2DDesc.ArraySize = 1;\n                texture2DDesc.MipLevels = 1;\n                texture2DDesc.Width = targetSize.X;\n                texture2DDesc.Height = targetSize.Y;\n                texture2DDesc.SampleDescription = multisampleDesc;\n                texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n                texture2DDesc.BindFlags = D3D11.BindFlags.DepthStencil;\n                using (D3D11.Texture2D depthBuffer = new D3D11.Texture2D(this.D3DDevice, texture2DDesc))\n                {\n                    // Create a DepthStencil view on this surface to use on bind.\n                    _depthStencilView = new D3D11.DepthStencilView(this.D3DDevice, depthBuffer);\n                }\n\n            }\n\n            // Set the current viewport.\n            _mainContext.Viewport = new Viewport\n            {\n                X = 0,\n                Y = 0,\n                Width = targetSize.X,\n                Height = targetSize.Y,\n                MinDepth = 0.0f,\n                MaxDepth = 1.0f\n            };\n\n#if UAP || WINUI\n            // Now we set up the Direct2D render target bitmap linked to the swapchain. \n            // Whenever we render to this bitmap, it will be directly rendered to the \n            // swapchain associated with the window.\n            D2D.BitmapProperties1 bitmapProperties = new D2D.BitmapProperties1(\n                new D2D.PixelFormat(format, D2D.AlphaMode.Premultiplied),\n                _dpi, _dpi,\n                D2D.BitmapOptions.Target | D2D.BitmapOptions.CannotDraw);\n\n            // Direct2D needs the dxgi version of the backbuffer surface pointer.\n            // Get a D2D surface from the DXGI back buffer to use as the D2D render target.\n            using (DXGI.Surface dxgiBackBuffer = _swapChain.GetBackBuffer<DXGI.Surface>(0))\n                _bitmapTarget = new D2D.Bitmap1(_d2dContext, dxgiBackBuffer, bitmapProperties);\n\n            // So now we can set the Direct2D render target.\n            _d2dContext.Target = _bitmapTarget;\n\n            // Set D2D text anti-alias mode to Grayscale to \n            // ensure proper rendering of text on intermediate surfaces.\n            _d2dContext.TextAntialiasMode = D2D.TextAntialiasMode.Grayscale;\n#endif\n        }\n\n        internal int GetMaxMultiSampleCount(SurfaceFormat surfaceFormat)\n        {\n            DXGI.Format format = surfaceFormat.ToDXFormat();\n\n            // Find the maximum supported level starting with the game's requested multisampling level\n            // and halving each time until reaching 0 (meaning no multisample support).\n            int qualityLevels = 0;\n            int maxLevel = 32; // The highest possible multisampling level\n            while (maxLevel > 0)\n            {\n                qualityLevels = this.D3DDevice.CheckMultisampleQualityLevels(format, maxLevel);\n                if (qualityLevels > 0)\n                    break;\n                maxLevel /= 2;\n            }\n            return maxLevel;\n        }\n\n        /// <summary>\n        /// Get highest multisample quality level for specified format and multisample count.\n        /// Returns 0 if multisampling is not supported for input parameters.\n        /// </summary>\n        /// <param name=\"format\">The texture format.</param>\n        /// <param name=\"multiSampleCount\">The number of samples during multisampling.</param>\n        /// <returns>\n        /// Higher than zero if multiSampleCount is supported. \n        /// Zero if multiSampleCount is not supported.\n        /// </returns>\n        private int GetMultiSamplingQuality(DXGI.Format format, int multiSampleCount)\n        {\n            // The valid range is between zero and one less than the level returned by CheckMultisampleQualityLevels\n            // https://msdn.microsoft.com/en-us/library/windows/desktop/bb173072(v=vs.85).aspx\n            int qualityLevels = this.D3DDevice.CheckMultisampleQualityLevels(format, multiSampleCount) - 1;\n\n            return Math.Max(qualityLevels, 0); // clamp minimum to 0\n        }\n\n        internal DXGI.SampleDescription GetSupportedSampleDescription(DXGI.Format format, int multiSampleCount)\n        {\n            DXGI.SampleDescription multisampleDesc = new DXGI.SampleDescription(1, 0);\n\n            if (multiSampleCount > 1)\n            {\n                int quality = GetMultiSamplingQuality(format, multiSampleCount);\n\n                multisampleDesc.Count = multiSampleCount;\n                multisampleDesc.Quality = quality;\n            }\n\n            return multisampleDesc;\n        }\n\n\n#if UAP || WINUI\n\n        internal void Trim()\n        {\n            using (DXGI.Device3 dxgiDevice3 = this.D3DDevice.QueryInterface<DXGI.Device3>())\n                dxgiDevice3.Trim();\n        }\n\n        internal float Dpi\n        {\n            get { return _dpi; }\n            set\n            {\n                if (_dpi == value)\n                    return;\n\n                _dpi = value;\n                _d2dContext.DotsPerInch = new DX.Size2F(_dpi, _dpi);\n\n                //if (OnDpiChanged != null)\n                //    OnDpiChanged(this);\n            }\n        }\n\n        internal bool IsTearingSupported()\n        {\n            RawBool allowTearing;\n            using (DXGI.Factory2 dxgiFactory2 = new DXGI.Factory2())\n            {\n                unsafe\n                {\n                    DXGI.Factory5 factory5 = dxgiFactory2.QueryInterface<DXGI.Factory5>();\n                    try\n                    {\n                        factory5.CheckFeatureSupport(DXGI.Feature.PresentAllowTearing, new IntPtr(&allowTearing), sizeof(RawBool));\n\n                        return allowTearing;\n                    }\n                    catch (DX.SharpDXException ex)\n                    {\n                        // can't request feature\n                    }\n                }\n            }\n\n            return false;\n        }\n\n#endif\n\n\n        public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context)\n        {\n            // Get Direct3D 11.1 context\n#if WINDOWSDX\n            D3D11.DeviceContext d3dContext = _d3dDevice.ImmediateContext.QueryInterface<D3D11.DeviceContext>();\n#endif\n#if UAP || WINUI\n            D3D11.DeviceContext1 d3dContext = _d3dDevice.ImmediateContext.QueryInterface<D3D11.DeviceContext1>();\n#endif\n\n            return new ConcreteGraphicsContext(context, d3dContext);\n        }\n\n        public override System.Reflection.Assembly ConcreteAssembly\n        {\n            get { return ReflectionHelpers.GetAssembly(typeof(ConcreteGraphicsDevice)); }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                // make sure to release full screen or this might cause issues on exit\n                if (_swapChain != null && _swapChain.IsFullScreen)\n                    _swapChain.SetFullscreenState(false, null);\n\n                DX.Utilities.Dispose(ref _renderTargetView);\n                DX.Utilities.Dispose(ref _depthStencilView);\n\n\n                DX.Utilities.Dispose(ref _swapChain);\n\n#if UAP || WINUI\n                if (_bitmapTarget != null)\n                {\n                    _bitmapTarget.Dispose();\n                    _depthStencilView = null;\n                }\n                if (_d2dDevice != null)\n                {\n                    _d2dDevice.Dispose();\n                    _d2dDevice = null;\n                }\n                if (_d2dContext != null)\n                {\n                    _d2dContext.Target = null;\n                    _d2dContext.Dispose();\n                    _d2dContext = null;\n                }\n                if (_d2dFactory != null)\n                {\n                    _d2dFactory.Dispose();\n                    _d2dFactory = null;\n                }\n                if (_dwriteFactory != null)\n                {\n                    _dwriteFactory.Dispose();\n                    _dwriteFactory = null;\n                }\n                if (_wicFactory != null)\n                {\n                    _wicFactory.Dispose();\n                    _wicFactory = null;\n                }\n#endif\n\n                DX.Utilities.Dispose(ref _d3dDevice);\n\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteGraphicsFactory.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcreteGraphicsFactory : GraphicsFactory\n    {\n        public override GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy()\n        {\n            return new ConcreteGraphicsAdaptersProvider();\n        }\n\n        public override GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n        {\n            return new ConcreteGraphicsDevice(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters);\n        }\n\n        public override SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity)\n        {\n            return new SpriteBatcher(graphicsDevice, capacity);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteOcclusionQuery.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing D3D = SharpDX.Direct3D;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteOcclusionQuery : OcclusionQueryStrategy\n    {\n        private bool _inBeginEndPair;  // true if Begin was called and End was not yet called.\n        private bool _queryPerformed;  // true if Begin+End were called at least once.\n        private bool _isComplete;      // true if the result is available in _pixelCount.\n        private int _pixelCount;       // The query result.\n\n        private D3D11.Query _query;\n\n\n        public override int PixelCount { get { return _pixelCount; } }\n\n        public override bool IsComplete\n        {\n            get\n            {\n                if (_isComplete)\n                    return true;\n\n                if (!_queryPerformed || _inBeginEndPair)\n                    return false;\n\n                return PlatformGetResult();\n\n                return _isComplete;\n            }\n        }\n\n\n        internal ConcreteOcclusionQuery(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n            //if (graphicsDevice.D3DDevice.FeatureLevel == D3D.FeatureLevel.Level_9_1)\n            //    throw new NotSupportedException(\"The Reach profile does not support occlusion queries.\");\n\n            D3D11.QueryDescription queryDesc = new D3D11.QueryDescription();\n            queryDesc.Flags = D3D11.QueryFlags.None;\n            queryDesc.Type = D3D11.QueryType.Occlusion;\n            _query = new D3D11.Query(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, queryDesc);\n        }\n\n        public override void PlatformBegin()\n        {\n            if (_inBeginEndPair)\n                throw new InvalidOperationException(\"End() must be called before calling Begin() again.\");\n\n            _inBeginEndPair = true;\n            _isComplete = false;\n\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                d3dContext.Begin(_query);\n            }\n        }\n\n        public override void PlatformEnd()\n        {\n            if (!_inBeginEndPair)\n                throw new InvalidOperationException(\"Begin() must be called before calling End().\");\n\n            _inBeginEndPair = false;\n            _queryPerformed = true;\n\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                d3dContext.End(_query);\n            }\n        }\n\n        private bool PlatformGetResult()\n        {\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                ulong count;\n                _isComplete = d3dContext.GetData(_query, out count);\n                _pixelCount = (int)count;\n            }\n\n            return _isComplete;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _query.Dispose();\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteRenderTarget2D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTarget2D : ConcreteTexture2D, IRenderTarget2DStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyDX11\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n\n\n        internal ConcreteRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,\n              TextureSurfaceType surfaceType)\n            : base(contextStrategy, width, height, mipMap, preferredSurfaceFormat, arraySize, shared,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            if (surfaceType == TextureSurfaceType.RenderTargetSwapChain)\n            {\n                // Texture will be created by the RenderTargetSwapChain.\n                return;\n            }\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n\n            PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, shared);\n\n            PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, _multiSampleCount, shared);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public virtual void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n                lock (graphicsContextStrategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = graphicsContextStrategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    System.Diagnostics.Debug.Assert(_msTexture != null);\n\n                    d3dContext.ResolveSubresource(\n                        _msTexture,\n                        0,\n                        this.GetTexture(),\n                        0,\n                        this.Format.ToDXFormat());\n                }\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n        internal D3D11.RenderTargetView[] _renderTargetViews;\n        internal D3D11.DepthStencilView[] _depthStencilViews;\n\n\n        D3D11.RenderTargetView IRenderTargetStrategyDX11.GetRenderTargetView(int arraySlice)\n        {\n            return _renderTargetViews[arraySlice];\n        }\n\n        D3D11.DepthStencilView IRenderTargetStrategyDX11.GetDepthStencilView(int arraySlice)\n        {\n            return _depthStencilViews[0];\n        }\n\n\n        private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared)\n        {\n            DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0);\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Width = this.Width;\n            texture2DDesc.Height = this.Height;\n            texture2DDesc.MipLevels = this.LevelCount;\n            texture2DDesc.ArraySize = this.ArraySize;\n            texture2DDesc.Format = this.Format.ToDXFormat();\n            texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource;\n            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            texture2DDesc.SampleDescription = sampleDesc;\n            texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n            texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            if (_shared)\n                texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.Shared;\n            if (MultiSampleCount == 0 || _shared)\n                texture2DDesc.BindFlags |= D3D11.BindFlags.RenderTarget;\n            if (_mipMap)\n                texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.GenerateMipMaps;\n\n            System.Diagnostics.Debug.Assert(_texture == null);\n            D3D11.Resource texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc);\n            _texture = texture;\n            _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture);\n        }\n\n        internal D3D11.Texture2D _msTexture;\n        private DXGI.SampleDescription _msSampleDescription;\n\n        private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount, bool shared)\n        {\n            D3D11.Device d3dDevice = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice;\n\n            _msSampleDescription = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetSupportedSampleDescription(this.Format.ToDXFormat(), multiSampleCount);\n\n            _renderTargetViews = new D3D11.RenderTargetView[this.ArraySize];\n            _depthStencilViews = new D3D11.DepthStencilView[1];\n\n            if (multiSampleCount > 1)\n                _msTexture = CreateMSTexture();\n\n            CreateRenderTargetView(d3dDevice, width, height);\n            if (DepthStencilFormat != DepthFormat.None)\n                CreateDepthStencilView(d3dDevice, width, height);\n        }\n\n        private void CreateRenderTargetView(D3D11.Device d3dDevice, int width, int height)\n        {\n            D3D11.Resource viewTex = (MultiSampleCount > 1)\n                                   ? _msTexture\n                                   : _texture;\n\n            System.Diagnostics.Debug.Assert(viewTex != null);\n\n            // Create a view interface on the rendertarget to use on bind.\n            if (this.ArraySize > 1)\n            {\n                for (int i = 0; i < this.ArraySize; i++)\n                {\n                    D3D11.RenderTargetViewDescription renderTargetViewDescription = new D3D11.RenderTargetViewDescription();\n                    if (MultiSampleCount > 1)\n                    {\n                        renderTargetViewDescription.Dimension = D3D11.RenderTargetViewDimension.Texture2DMultisampledArray;\n                        renderTargetViewDescription.Texture2DMSArray.ArraySize = 1;\n                        renderTargetViewDescription.Texture2DMSArray.FirstArraySlice = i;\n                    }\n                    else\n                    {\n                        renderTargetViewDescription.Dimension = D3D11.RenderTargetViewDimension.Texture2DArray;\n                        renderTargetViewDescription.Texture2DArray.ArraySize = 1;\n                        renderTargetViewDescription.Texture2DArray.FirstArraySlice = i;\n                        renderTargetViewDescription.Texture2DArray.MipSlice = 0;\n                    }\n                    _renderTargetViews[i] = new D3D11.RenderTargetView(d3dDevice, viewTex, renderTargetViewDescription);\n                }\n            }\n            else\n            {\n                _renderTargetViews[0] = new D3D11.RenderTargetView(d3dDevice, viewTex);\n            }\n        }\n\n        private void CreateDepthStencilView(D3D11.Device d3dDevice, int width, int height)\n        {\n            // The depth stencil view's multisampling configuration must strictly\n            // match the texture's multisampling configuration.  Ignore whatever parameters\n            // were provided and use the texture's configuration so that things are\n            // guarenteed to work.\n            DXGI.SampleDescription multisampleDesc = _msSampleDescription;\n\n            // Create a descriptor for the depth/stencil buffer.\n            // Allocate a 2-D surface as the depth/stencil buffer.\n            // Create a DepthStencil view on this surface to use on bind.\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Format = DepthStencilFormat.ToDXFormat();\n            texture2DDesc.ArraySize = 1;\n            texture2DDesc.MipLevels = 1;\n            texture2DDesc.Width = width;\n            texture2DDesc.Height = height;\n            texture2DDesc.SampleDescription = multisampleDesc;\n            texture2DDesc.BindFlags = D3D11.BindFlags.DepthStencil;\n\n            using (D3D11.Texture2D depthBuffer = new D3D11.Texture2D(d3dDevice, texture2DDesc))\n            {\n                // Create the view for binding to the device.\n                D3D11.DepthStencilViewDescription depthStencilViewDesc = new D3D11.DepthStencilViewDescription();\n                depthStencilViewDesc.Format = DepthStencilFormat.ToDXFormat();\n                depthStencilViewDesc.Dimension = (MultiSampleCount > 1)\n                                               ? D3D11.DepthStencilViewDimension.Texture2DMultisampled\n                                               : D3D11.DepthStencilViewDimension.Texture2D;\n                _depthStencilViews[0] = new D3D11.DepthStencilView(d3dDevice, depthBuffer, depthStencilViewDesc);\n            }\n        }\n\n        private D3D11.Texture2D CreateMSTexture()\n        {\n            System.Diagnostics.Debug.Assert(_msTexture == null);\n\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Width = this.Width;\n            texture2DDesc.Height = this.Height;\n            texture2DDesc.MipLevels = 1; // mip mapping is applied to the resolved texture, not the multisampled texture;\n            texture2DDesc.ArraySize = this.ArraySize;\n            texture2DDesc.Format = this.Format.ToDXFormat();\n            texture2DDesc.BindFlags = D3D11.BindFlags.RenderTarget; // ~BindFlags.ShaderResource, the multi sampled texture can never be bound directly.\n            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            texture2DDesc.SampleDescription = _msSampleDescription;\n            texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n            texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            return new D3D11.Texture2D(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc);\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            if (_renderTargetViews != null)\n            {\n                for (int i = 0; i < _renderTargetViews.Length; i++)\n                    _renderTargetViews[i].Dispose();\n                _renderTargetViews = null;\n            }\n            if (_depthStencilViews != null)\n            {\n                for (int i = 0; i < _depthStencilViews.Length; i++)\n                    DX.Utilities.Dispose(ref _depthStencilViews[i]);\n                _depthStencilViews = null;\n            }\n\n            base.PlatformGraphicsContextLost();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_renderTargetViews != null)\n                {\n                    for (int i = 0; i < _renderTargetViews.Length; i++)\n                        _renderTargetViews[i].Dispose();\n                    _renderTargetViews = null;\n                }\n                if (_depthStencilViews != null)\n                {\n                    for (int i = 0; i < _depthStencilViews.Length; i++)\n                        DX.Utilities.Dispose(ref _depthStencilViews[i]);\n                    _depthStencilViews = null;\n                }\n                DX.Utilities.Dispose(ref _msTexture);\n            }\n\n            base.Dispose(disposing);\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteRenderTarget3D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTarget3D : ConcreteTexture3D, IRenderTarget3DStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyDX11\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n\n\n        internal ConcreteRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            : base(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTexture3D_rt(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat);\n\n            // If we don't need a depth buffer then we're done.\n            if (preferredDepthFormat != DepthFormat.None)\n                PlatformConstructRenderTarget3D(contextStrategy, width, height, depth, mipMap, preferredDepthFormat, _multiSampleCount);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n\n        internal D3D11.RenderTargetView[] _renderTargetViews;\n        internal D3D11.DepthStencilView[] _depthStencilViews;\n        internal int _currentSlice;\n\n        D3D11.RenderTargetView IRenderTargetStrategyDX11.GetRenderTargetView(int arraySlice)\n\t    {\n\t        return _renderTargetViews[arraySlice];\n\t    }\n\n        D3D11.DepthStencilView IRenderTargetStrategyDX11.GetDepthStencilView(int arraySlice)\n\t    {\n\t        return _depthStencilViews[0];\n\t    }\n\n\n        private void PlatformConstructTexture3D_rt(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            D3D11.Texture3DDescription texture3DDesc = new D3D11.Texture3DDescription();\n            texture3DDesc.Width = this.Width;\n            texture3DDesc.Height = this.Height;\n            texture3DDesc.Depth = this.Depth;\n            texture3DDesc.MipLevels = this.LevelCount;\n            texture3DDesc.Format = this.Format.ToDXFormat();\n            texture3DDesc.BindFlags = D3D11.BindFlags.RenderTarget | D3D11.BindFlags.ShaderResource;\n            texture3DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            texture3DDesc.Usage = D3D11.ResourceUsage.Default;\n            texture3DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            if (_mipMap)\n            {\n                // Note: XNA 4 does not have a method Texture.GenerateMipMaps() \n                // because generation of mipmaps is not supported on the Xbox 360.\n                // TODO: New method Texture.GenerateMipMaps() required.\n                texture3DDesc.OptionFlags |= D3D11.ResourceOptionFlags.GenerateMipMaps;\n            }\n\n            System.Diagnostics.Debug.Assert(_texture == null);\n            D3D11.Resource texture = new D3D11.Texture3D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture3DDesc);\n            _texture = texture;\n            _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture);\n        }\n\n        private void PlatformConstructRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount)\n        {\n            _renderTargetViews = new D3D11.RenderTargetView[depth];\n            _depthStencilViews = new D3D11.DepthStencilView[1];\n\n            // Setup the multisampling description.\n            DXGI.SampleDescription multisampleDesc = new DXGI.SampleDescription(1, 0);\n            if (multiSampleCount > 1)\n            {\n                multisampleDesc.Count = multiSampleCount;\n                multisampleDesc.Quality = (int)D3D11.StandardMultisampleQualityLevels.StandardMultisamplePattern;\n            }\n\n            D3D11.Device d3dDevice = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice;\n\n            CreateRenderTargetView(d3dDevice, width, height, depth);\n            CreateDepthStencilView(d3dDevice, width, height, depth, preferredDepthFormat, multisampleDesc);\n        }\n\n        private void CreateRenderTargetView(D3D11.Device d3dDevice, int width, int height, int depth)\n        {\n            D3D11.Resource viewTex = this.GetTexture();\n\n            for (int i = 0; i < depth; i++)\n            {\n                D3D11.RenderTargetViewDescription renderTargetViewDesc = new D3D11.RenderTargetViewDescription();\n                renderTargetViewDesc.Format = this.Format.ToDXFormat();\n                renderTargetViewDesc.Dimension = D3D11.RenderTargetViewDimension.Texture3D;\n                renderTargetViewDesc.Texture3D.DepthSliceCount = -1;\n                renderTargetViewDesc.Texture3D.FirstDepthSlice = i;\n                renderTargetViewDesc.Texture3D.MipSlice = 0;\n\n                _renderTargetViews[i] = new D3D11.RenderTargetView(d3dDevice, viewTex, renderTargetViewDesc);\n            }\n        }\n\n        private void CreateDepthStencilView(D3D11.Device d3dDevice, int width, int height, int depth, DepthFormat preferredDepthFormat, DXGI.SampleDescription multisampleDesc)\n        {\n\n            // Create a descriptor for the depth/stencil buffer.\n            // Allocate a 2-D surface as the depth/stencil buffer.\n            // Create a DepthStencil view on this surface to use on bind.\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Format = preferredDepthFormat.ToDXFormat();\n            texture2DDesc.ArraySize = 1;\n            texture2DDesc.MipLevels = 1;\n            texture2DDesc.Width = width;\n            texture2DDesc.Height = height;\n            texture2DDesc.SampleDescription = multisampleDesc;\n            texture2DDesc.BindFlags = D3D11.BindFlags.DepthStencil;\n\n            using (D3D11.Texture2D depthBuffer = new D3D11.Texture2D(d3dDevice, texture2DDesc))\n            {\n                D3D11.DepthStencilViewDescription depthStencilViewDesc = new D3D11.DepthStencilViewDescription();\n                depthStencilViewDesc.Format = preferredDepthFormat.ToDXFormat();\n                depthStencilViewDesc.Dimension = D3D11.DepthStencilViewDimension.Texture2D;\n                // Create the view for binding to the device.\n                _depthStencilViews[0] = new D3D11.DepthStencilView(d3dDevice, depthBuffer, depthStencilViewDesc);\n            }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_renderTargetViews != null)\n                {\n                    for (int i = 0; i < _renderTargetViews.Length; i++)\n                        DX.Utilities.Dispose(ref _renderTargetViews[i]);\n                    _renderTargetViews = null;\n                }\n                if (_depthStencilViews != null)\n                {\n                    for (int i = 0; i < _depthStencilViews.Length; i++)\n                        DX.Utilities.Dispose(ref _depthStencilViews[i]);\n                    _depthStencilViews = null;\n                }                \n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteRenderTargetCube.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D = SharpDX.Direct3D;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTargetCube : ConcreteTextureCube, IRenderTargetCubeStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyDX11\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n\n\n        internal ConcreteRenderTargetCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            : base(contextStrategy, size, mipMap, preferredSurfaceFormat,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTextureCube_rt(contextStrategy, size, mipMap, preferredSurfaceFormat);\n\n            PlatformConstructRenderTargetCube(contextStrategy, mipMap, preferredDepthFormat, _multiSampleCount);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n        internal D3D11.RenderTargetView[] _renderTargetViews;\n        internal D3D11.DepthStencilView[] _depthStencilViews;\n        internal D3D11.Resource _depthTarget;\n\n\n        D3D11.RenderTargetView IRenderTargetStrategyDX11.GetRenderTargetView(int arraySlice)\n        {\n            return _renderTargetViews[arraySlice];\n        }\n\n        D3D11.DepthStencilView IRenderTargetStrategyDX11.GetDepthStencilView(int arraySlice)\n        {\n            return _depthStencilViews[arraySlice];\n        }\n\n\n        private void PlatformConstructTextureCube_rt(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n        {\n            DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0);\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Width = this.Size;\n            texture2DDesc.Height = this.Size;\n            texture2DDesc.MipLevels = this.LevelCount;\n            texture2DDesc.ArraySize = 6; // A texture cube is a 2D texture array with 6 textures.\n            texture2DDesc.Format = this.Format.ToDXFormat();\n            texture2DDesc.BindFlags = D3D11.BindFlags.RenderTarget | D3D11.BindFlags.ShaderResource;\n            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            texture2DDesc.SampleDescription = sampleDesc;\n            texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n            texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.TextureCube;\n\n            if (_mipMap)\n                texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.GenerateMipMaps;\n\n            System.Diagnostics.Debug.Assert(_texture == null);\n            D3D11.Resource texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc);\n            _texture = texture;\n            _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture);\n        }\n\n        private void PlatformConstructRenderTargetCube(GraphicsContextStrategy contextStrategy, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount)\n        {\n            _renderTargetViews = new D3D11.RenderTargetView[6];\n            _depthStencilViews = new D3D11.DepthStencilView[6];\n\n            // Create one render target view per cube map face.          \n            for (int i = 0; i < _renderTargetViews.Length; i++)\n            {\n                D3D11.RenderTargetViewDescription renderTargetViewDesc = new D3D11.RenderTargetViewDescription();\n                renderTargetViewDesc.Dimension = D3D11.RenderTargetViewDimension.Texture2DArray;\n                renderTargetViewDesc.Format = this.Format.ToDXFormat();\n                renderTargetViewDesc.Texture2DArray.ArraySize = 1;\n                renderTargetViewDesc.Texture2DArray.FirstArraySlice = i;\n                renderTargetViewDesc.Texture2DArray.MipSlice = 0;\n                _renderTargetViews[i] = new D3D11.RenderTargetView(\n                    ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice,\n                    this.GetTexture(),\n                    renderTargetViewDesc);\n            }\n\n\n            // If we don't need a depth buffer then we're done.\n            if (preferredDepthFormat == DepthFormat.None)\n                return;\n\n            DXGI.SampleDescription sampleDescription = new DXGI.SampleDescription(1, 0);\n            if (multiSampleCount > 1)\n            {\n                sampleDescription.Count = multiSampleCount;\n                sampleDescription.Quality = (int)D3D11.StandardMultisampleQualityLevels.StandardMultisamplePattern;\n            }\n\n            D3D11.Texture2DDescription depthStencilDesc = new D3D11.Texture2DDescription();\n            depthStencilDesc.Format = preferredDepthFormat.ToDXFormat();\n            depthStencilDesc.ArraySize = 1;\n            depthStencilDesc.MipLevels = 1;\n            depthStencilDesc.Width = this.Size;\n            depthStencilDesc.Height = this.Size;\n            depthStencilDesc.SampleDescription = sampleDescription;\n            depthStencilDesc.BindFlags = D3D11.BindFlags.DepthStencil;\n\n            if (((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice.FeatureLevel >= D3D.FeatureLevel.Level_10_0)\n            {\n                // for feature Level_10_0 the depth buffer is required to be defined as TextureCube with six slices,\n                // and the depth view is required to be Texture2DArray.\n\n                depthStencilDesc.ArraySize = 6;\n                depthStencilDesc.OptionFlags = D3D11.ResourceOptionFlags.TextureCube;\n\n                _depthTarget = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, depthStencilDesc);\n\n                for (int i = 0; i < _renderTargetViews.Length; i++)\n                {\n                    D3D11.DepthStencilViewDescription depthStencilViewDesc = new D3D11.DepthStencilViewDescription();\n                    depthStencilViewDesc.Format = preferredDepthFormat.ToDXFormat();\n                    depthStencilViewDesc.Dimension = D3D11.DepthStencilViewDimension.Texture2DArray;\n                    depthStencilViewDesc.Texture2DArray.ArraySize = 1;\n                    depthStencilViewDesc.Texture2DArray.FirstArraySlice = i;\n                    _depthStencilViews[i] = new D3D11.DepthStencilView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, _depthTarget, depthStencilViewDesc);\n                }\n            }\n            else\n            {\n                // Create one depth target view per cube map face.\n                // feature Level_9_x doesn't support Texture2DArray.\n\n                for (int i = 0; i < _renderTargetViews.Length; i++)\n                {\n                    _depthTarget = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, depthStencilDesc);\n\n                    D3D11.DepthStencilViewDescription depthStencilViewDesc = new D3D11.DepthStencilViewDescription();\n                    depthStencilViewDesc.Format = preferredDepthFormat.ToDXFormat();\n                    depthStencilViewDesc.Dimension = D3D11.DepthStencilViewDimension.Texture2D;\n                    _depthStencilViews[i] = new D3D11.DepthStencilView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, _depthTarget, depthStencilViewDesc);\n                }\n            }\n\n            return;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_renderTargetViews != null)\n                {\n                    for (int i = 0; i < _renderTargetViews.Length; i++)\n                        _renderTargetViews[i].Dispose();\n                    _renderTargetViews = null;\n                }\n\n                if (_depthStencilViews != null)\n                {\n                    for (int i = 0; i < _depthStencilViews.Length; i++)\n                        if (_depthStencilViews[i] != null)\n                            _depthStencilViews[i].Dispose();\n                    _depthStencilViews = null;\n                }\n\n                DX.Utilities.Dispose(ref _depthTarget);\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteRenderTargetSwapChain.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTargetSwapChain : ConcreteRenderTarget2D,\n        IRenderTargetStrategyDX11\n    {\n        internal IntPtr _windowHandle;\n        internal PresentInterval _presentInterval;\n\n        internal DXGI.SwapChain _swapChain;\n        internal D3D11.Texture2D _backBuffer;\n        //internal D3D11.Texture2D _depthBuffer;\n\n\n        internal ConcreteRenderTargetSwapChain(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, RenderTargetUsage usage,\n            IntPtr windowHandle, PresentInterval presentInterval,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            :base(contextStrategy, width, height, mipMap, 1, false, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount,\n                  TextureSurfaceType.RenderTargetSwapChain)\n        {\n            _windowHandle = windowHandle;\n            _presentInterval = presentInterval;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            _multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n\n            ((ConcreteRenderTarget2D)this)._renderTargetViews = new D3D11.RenderTargetView[1];\n            ((ConcreteRenderTarget2D)this)._depthStencilViews = new D3D11.DepthStencilView[1];\n\n            DXGI.Format dxgiFormat = (preferredSurfaceFormat == SurfaceFormat.Color)\n                                   ? DXGI.Format.B8G8R8A8_UNorm\n                                   : preferredSurfaceFormat.ToDXFormat();\n\n            DXGI.SampleDescription multisampleDesc = base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetSupportedSampleDescription(dxgiFormat, MultiSampleCount);\n\n            D3D11.Device d3dDevice = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice;\n\n            CreateSwapChainTexture(d3dDevice, width, height, multisampleDesc, dxgiFormat);\n            if (preferredDepthFormat != DepthFormat.None)\n            {\n                DXGI.Format dxgiDepthFormat = preferredDepthFormat.ToDXFormat();\n                CreateSwapChainDepthBuffer(d3dDevice, width, height, multisampleDesc, dxgiDepthFormat);\n            }\n        }\n\n\n        D3D11.RenderTargetView IRenderTargetStrategyDX11.GetRenderTargetView(int arraySlice)\n        {\n            return _renderTargetViews[arraySlice];\n        }\n\n        D3D11.DepthStencilView IRenderTargetStrategyDX11.GetDepthStencilView(int arraySlice)\n        {\n            return _depthStencilViews[0];\n        }\n\n        private void CreateSwapChainTexture(D3D11.Device d3dDevice, int width, int height, DXGI.SampleDescription multisampleDesc, DXGI.Format dxgiFormat)\n        {\n            DXGI.SwapChainDescription swapChainDesc = new DXGI.SwapChainDescription();\n            swapChainDesc.ModeDescription.Width = width;\n            swapChainDesc.ModeDescription.Height = height;\n            swapChainDesc.ModeDescription.Format = dxgiFormat;\n            swapChainDesc.ModeDescription.Scaling = DXGI.DisplayModeScaling.Stretched;\n            swapChainDesc.OutputHandle = _windowHandle;\n            swapChainDesc.SampleDescription = multisampleDesc;\n            swapChainDesc.Usage = DXGI.Usage.RenderTargetOutput;\n            swapChainDesc.BufferCount = 2;\n            swapChainDesc.SwapEffect = _presentInterval.ToDXSwapEffect();\n            swapChainDesc.IsWindowed = true;\n            \n            // First, retrieve the underlying DXGI Device from the D3D Device.\n            // Creates the swap chain \n            using (DXGI.Device1 dxgiDevice = d3dDevice.QueryInterface<DXGI.Device1>())\n            using (DXGI.Adapter dxgiAdapter = dxgiDevice.Adapter)\n            using (DXGI.Factory1 dxgiFactory = dxgiAdapter.GetParent<DXGI.Factory1>())\n            {\n                _swapChain = new DXGI.SwapChain(dxgiFactory, dxgiDevice, swapChainDesc);\n                // Obtain the backbuffer for this window which will be the final 3D rendertarget.\n                _backBuffer = D3D11.Resource.FromSwapChain<D3D11.Texture2D>(_swapChain, 0);\n                // Create a view interface on the rendertarget to use on bind.\n                ((ConcreteRenderTarget2D)this)._renderTargetViews[0] = new D3D11.RenderTargetView(d3dDevice, _backBuffer);\n            }\n        }\n\n        private void CreateSwapChainDepthBuffer(D3D11.Device d3dDevice, int width, int height, DXGI.SampleDescription multisampleDesc, DXGI.Format dxgiDepthFormat)\n        {\n            // Allocate a 2-D surface as the depth/stencil buffer.\n            D3D11.Texture2DDescription textureDescription = new D3D11.Texture2DDescription()\n            {\n                Format = dxgiDepthFormat,\n                ArraySize = 1,\n                MipLevels = 1,\n                Width = width,\n                Height = height,\n                SampleDescription = multisampleDesc,\n                Usage = D3D11.ResourceUsage.Default,\n                BindFlags = D3D11.BindFlags.DepthStencil,\n            };\n\n            using (D3D11.Texture2D depthBuffer = new D3D11.Texture2D(d3dDevice, textureDescription))\n            {\n                // Create a DepthStencil view on this surface to use on bind.\n                ((ConcreteRenderTarget2D)this)._depthStencilViews[0] = new D3D11.DepthStencilView(d3dDevice, depthBuffer);\n            }\n        }\n\n        private D3D11.Resource CreateTexture(GraphicsContextStrategy contextStrategy)\n        {\n            if (MultiSampleCount > 1)\n            {\n                DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0);\n                D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n                texture2DDesc.Width = this.Width;\n                texture2DDesc.Height = this.Height;\n                texture2DDesc.MipLevels = this.LevelCount;\n                texture2DDesc.ArraySize = this.ArraySize;\n                texture2DDesc.Format = this.Format.ToDXFormat();\n                texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource;\n                texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n                texture2DDesc.SampleDescription = sampleDesc;\n                texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n                texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n                if (_shared)\n                    texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.Shared;\n                if (MultiSampleCount == 0 || _shared)\n                    texture2DDesc.BindFlags |= D3D11.BindFlags.RenderTarget;\n                if (_mipMap)\n                    texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.GenerateMipMaps;\n\n                return new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc);\n            }\n            else\n            {\n                System.Diagnostics.Debug.Assert(_backBuffer != null);\n                return _backBuffer;\n            }\n        }\n\n        public void Present()\n        {\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                try\n                {\n                    _swapChain.Present(_presentInterval.ToDXSwapInterval(), DXGI.PresentFlags.None);\n                }\n                catch (DX.SharpDXException)\n                {\n                }\n            }\n        }\n\n        public override void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            // Using a multisampled SwapChainRenderTarget as a source Texture is not supported.\n            //base.ResolveSubresource(contextStrategy);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                //DX.Utilities.Dispose(ref _backBuffer);\n                //DX.Utilities.Dispose(ref _depthBuffer);\n                DX.Utilities.Dispose(ref _swapChain);\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteSamplerStateCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteSamplerStateCollection : SamplerStateCollectionStrategy\n    {\n        private uint _d3dDirty;\n\n        internal SamplerState[] InternalActualSamplers { get { return base._actualSamplers; } }\n\n        internal uint InternalD3dDirty\n        {\n            get { return _d3dDirty; }\n            set { _d3dDirty = value; }\n        }\n\n\n        internal ConcreteSamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity)\n            : base(contextStrategy, capacity)\n        {\n        }\n\n\n        public override SamplerState this[int index]\n        {\n            get { return base[index]; }\n            set\n            {\n                base[index] = value;\n\n                uint mask = ((uint)1) << index;\n                _d3dDirty |= mask;\n            }\n        }\n\n        public override void Clear()\n        {\n            base.Clear();\n            for (int i = 0; i < _actualSamplers.Length; i++)\n                _d3dDirty |= (((uint)1) << i);\n        }\n\n        public override void Dirty()\n        {\n            base.Dirty();\n            for (int i = 0; i < _actualSamplers.Length; i++)\n                _d3dDirty |= (((uint)1) << i);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteTexture.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTexture : GraphicsResourceStrategy, ITextureStrategy\n    {\n        private readonly GraphicsContextStrategy _contextStrategy;\n        private readonly SurfaceFormat _format;        \n        private readonly int _levelCount;\n\n        internal ConcreteTexture(GraphicsContextStrategy contextStrategy, SurfaceFormat format, int levelCount)\n            : base(contextStrategy)\n        {\n            this._contextStrategy = contextStrategy;\n            this._format = format;\n            this._levelCount = levelCount;\n        }\n\n\n        #region ITextureStrategy\n        public SurfaceFormat Format { get { return _format; } }\n        public int LevelCount { get { return _levelCount; } }\n        #endregion ITextureStrategy\n\n\n        internal D3D11.Resource _texture;\n        internal D3D11.ShaderResourceView _resourceView;\n\n        internal D3D11.Resource GetTexture()\n        {\n            System.Diagnostics.Debug.Assert(_texture != null);\n\n            return _texture;\n        }\n\n        internal D3D11.ShaderResourceView GetShaderResourceView()\n        {\n            System.Diagnostics.Debug.Assert(_resourceView != null);\n\n            return _resourceView;\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            DX.Utilities.Dispose(ref _resourceView);\n            DX.Utilities.Dispose(ref _texture);\n\n            base.PlatformGraphicsContextLost();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                DX.Utilities.Dispose(ref _resourceView);\n                DX.Utilities.Dispose(ref _texture);\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteTexture2D.Stream.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Graphics.Utilities.Png;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\nusing WIC = SharpDX.WIC;\n\n#if UAP || WINUI\nusing Windows.Graphics.Imaging;\nusing Windows.Storage.Streams;\nusing System.Threading.Tasks;\n#endif\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal partial class ConcreteTexture2D\n    {\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, Stream stream)\n            : base(contextStrategy, SurfaceFormat.Color, 1)\n        {\n            this._arraySize = 1;\n            \n            // Rewind stream if it is at end\n            if (stream.CanSeek && stream.Length == stream.Position)\n                stream.Seek(0, SeekOrigin.Begin);\n\n            if (stream.CanSeek)\n            {\n                PlatformFromStream_DX(contextStrategy, stream, out this._width, out this._height);\n            }\n            else\n            {\n                // If stream doesn't provide seek functionality, use MemoryStream instead\n                using (Stream ms = new MemoryStream())\n                {\n                    stream.CopyTo(ms);\n                    ms.Seek(0, SeekOrigin.Begin);\n                    PlatformFromStream_ImageSharp(contextStrategy, ms, out this._width, out this._height);\n                 }\n            }\n        }\n\n        private unsafe void PlatformFromStream_ImageSharp(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height)\n        {\n            // The data returned is always four channel BGRA\n            StbImageSharp.ImageResult result = StbImageSharp.ImageResult.FromStream(stream, StbImageSharp.ColorComponents.RedGreenBlueAlpha);\n            width = result.Width;\n            height = result.Height;\n            ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height);\n\n            this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false);\n            this.SetData<byte>(0, result.Data, 0, result.Data.Length);\n        }\n\n        private static WIC.BitmapSource LoadBitmap_DX(Stream stream, out WIC.BitmapDecoder decoder)\n        {\n            using (WIC.ImagingFactory imgfactory = new WIC.ImagingFactory())\n            {\n                decoder = new WIC.BitmapDecoder(imgfactory, stream, WIC.DecodeOptions.CacheOnDemand);\n\n                WIC.FormatConverter fconv = new WIC.FormatConverter(imgfactory);\n\n                using (WIC.BitmapFrameDecode frame = decoder.GetFrame(0))\n                {\n                    fconv.Initialize(\n                        frame,\n                        WIC.PixelFormat.Format32bppRGBA,\n                        WIC.BitmapDitherType.None,\n                        null,\n                        0.0,\n                        WIC.BitmapPaletteType.Custom);\n                }\n                return fconv;\n            }\n        }\n\n        private unsafe void PlatformFromStream_DX(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height)\n        {\n            // For reference this implementation was ultimately found through this post:\n            // http://stackoverflow.com/questions/9602102/loading-textures-with-sharpdx-in-metro \n\n            WIC.BitmapDecoder decoder;\n            using (WIC.BitmapSource bmpSource = LoadBitmap_DX(stream, out decoder))\n            using (decoder)\n            {\n                width = bmpSource.Size.Width;\n                height = bmpSource.Size.Height;\n                ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height);\n\n                // TODO: use texture.SetData(...)\n                D3D11.Texture2DDescription texture2DDesc;\n                texture2DDesc.Width = width;\n                texture2DDesc.Height = height;\n                texture2DDesc.ArraySize = 1;\n                texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource;\n                texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n                texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n                texture2DDesc.Format = DXGI.Format.R8G8B8A8_UNorm;\n                texture2DDesc.MipLevels = 1;\n                texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n                texture2DDesc.SampleDescription.Count = 1;\n                texture2DDesc.SampleDescription.Quality = 0;\n\n                using (DX.DataStream dataStream = new DX.DataStream(bmpSource.Size.Height * bmpSource.Size.Width * 4, true, true))\n                {\n                    bmpSource.CopyPixels(bmpSource.Size.Width * 4, dataStream);\n                    DX.DataRectangle rect = new DX.DataRectangle(dataStream.DataPointer, bmpSource.Size.Width * 4);\n                    _texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc, rect);\n                    _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, _texture);\n                }\n            }\n        }\n\n        private static unsafe void ValidateBounds(GraphicsDeviceStrategy deviceStrategy, int width, int height)\n        {\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && (width > 2048 || height > 2048))\n                throw new NotSupportedException(\"Reach profile supports a maximum Texture2D size of 2048\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && (width > 4096 || height > 4096))\n                throw new NotSupportedException(\"HiDef profile supports a maximum Texture2D size of 4096\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 8192 || height > 8192))\n                throw new NotSupportedException(\"FL10_0 profile supports a maximum Texture2D size of 8192\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 8192 || height > 8192))\n                throw new NotSupportedException(\"FL10_1 profile supports a maximum Texture2D size of 8192\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 16384 || height > 16384))\n                throw new NotSupportedException(\"FL11_0 profile supports a maximum Texture2D size of 16384\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 16384 || height > 16384))\n                throw new NotSupportedException(\"FL11_1 profile supports a maximum Texture2D size of 16384\");\n        }\n\n        public void SaveAsPng(Stream stream, int width, int height)\n        {\n            PngWriter pngWriter = new PngWriter();\n            pngWriter.Write(this, stream);\n        }\n\n        public void SaveAsJpeg(Stream stream, int width, int height)\n        {\n#if UAP || WINUI\n            Task result = SaveAsImageAsync_UAP(Windows.Graphics.Imaging.BitmapEncoder.JpegEncoderId, stream, width, height);\n            result.Wait();\n#else\n            // We assume non-premultiplied pixel format.\n            Guid sourceFormat = WIC.PixelFormat.Format32bppRGBA;\n            int sourceStride = WIC.PixelFormat.GetStride(sourceFormat, this.Width);\n\n            Color[] pixelData = TextureHelpers.GetColorData(this);\n            GCHandle gCHandle = GCHandle.Alloc(pixelData, GCHandleType.Pinned);\n            try\n            {\n                IntPtr pPixelData = gCHandle.AddrOfPinnedObject();\n                DX.DataRectangle dataRectangle = new DX.DataRectangle(pPixelData, sourceStride);\n\n                using (WIC.ImagingFactory factory = new WIC.ImagingFactory())\n                using (WIC.Bitmap bitmap = new WIC.Bitmap(factory, this.Width, this.Height, sourceFormat, dataRectangle))\n                using (WIC.BitmapScaler scaler = new WIC.BitmapScaler(factory))\n                using (WIC.FormatConverter converter = new WIC.FormatConverter(factory))\n                using (WIC.JpegBitmapEncoder encoder = new WIC.JpegBitmapEncoder(factory, stream))\n                using (WIC.BitmapFrameEncode frame = new WIC.BitmapFrameEncode(encoder))\n                {\n                    scaler.Initialize(bitmap, width, height, WIC.BitmapInterpolationMode.Linear);\n\n                    // Convert bitmap to BGRA. JpegBitmapEncoder doesn't work with Format32bppRGBA.\n                    Guid targetFormat = WIC.PixelFormat.Format32bppBGRA;\n                    converter.Initialize(scaler, targetFormat);\n\n                    frame.Initialize();\n                    frame.SetPixelFormat(ref targetFormat);\n                    frame.WriteSource(converter);\n                    frame.Commit();\n\n                    encoder.Commit();\n                }\n            }\n            finally\n            {\n                gCHandle.Free();\n            }\n#endif\n        }\n\n#if UAP || WINUI\n        private async Task SaveAsImageAsync_UAP(Guid encoderId, Stream stream, int width, int height)\n        {\n            byte[] pixelData = new byte[Width * Height * Format.GetSize()];\n            GetData(0,0, Bounds, pixelData, 0, pixelData.Length);\n\n            // TODO: We need to convert from Format to R8G8B8A8!\n\n            // Create a temporary memory stream for writing the png.\n            InMemoryRandomAccessStream memstream = new InMemoryRandomAccessStream();\n\n            // Write the png.\n            BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, memstream);\n            encoder.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Ignore, (uint)width, (uint)height, 96, 96, pixelData);\n            await encoder.FlushAsync();\n\n            // Copy the memory stream into the real output stream.\n            memstream.Seek(0);\n            memstream.AsStreamForRead().CopyTo(stream);\n        }\n#endif\n\n        //Converts Pixel Data from BGRA to RGBA\n        private static void ConvertToRGBA(int pixelHeight, int pixelWidth, byte[] pixels)\n        {\n            int offset = 0;\n\n            for (int row = 0; row < (uint)pixelHeight; row++)\n            {\n                int rowxPixelWidth = row * pixelWidth * 4;\n                for (int col = 0; col < (uint)pixelWidth; col++)\n                {\n                    offset = rowxPixelWidth + (col * 4);\n\n                    byte B = pixels[offset];\n                    byte R = pixels[offset + 2];\n\n                    pixels[offset] = R;\n                    pixels[offset + 2] = B;\n                }\n            }\n        }\n\n        static unsafe D3D11.Texture2D CreateTex2DFromBitmap(WIC.BitmapSource bsource, GraphicsDevice device)\n        {\n            D3D11.Texture2DDescription texture2DDesc;\n            texture2DDesc.Width = bsource.Size.Width;\n            texture2DDesc.Height = bsource.Size.Height;\n            texture2DDesc.ArraySize = 1;\n            texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource;\n            texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            texture2DDesc.Format = DXGI.Format.R8G8B8A8_UNorm;\n            texture2DDesc.MipLevels = 1;\n            texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n            texture2DDesc.SampleDescription.Count = 1;\n            texture2DDesc.SampleDescription.Quality = 0;\n\n            using (DX.DataStream s = new DX.DataStream(bsource.Size.Height * bsource.Size.Width * 4, true, true))\n            {\n                bsource.CopyPixels(bsource.Size.Width * 4, s);\n\n                // XNA blacks out any pixels with an alpha of zero.\n                /* TNC: Disable XNA behavior.\n                // TNC: We either preserve the original data or premultiply the entire image.\n                byte* data = (byte*)s.DataPointer;\n                for (int i = 0; i < s.Length; i+=4)\n                {\n                    if (data[i + 3] == 0)\n                    {\n                        data[i + 0] = 0;\n                        data[i + 1] = 0;\n                        data[i + 2] = 0;\n                    }\n                }\n                */\n\n                DX.DataRectangle rect = new DX.DataRectangle(s.DataPointer, bsource.Size.Width * 4);\n\n                return new D3D11.Texture2D(((IPlatformGraphicsDevice)device).Strategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc, rect);\n            }\n        }\n\n        static WIC.ImagingFactory imgfactory;\n        private static WIC.BitmapSource LoadBitmap(Stream stream, out SharpDX.WIC.BitmapDecoder decoder)\n        {\n            if (imgfactory == null)\n            {\n                imgfactory = new WIC.ImagingFactory();\n            }\n\n            decoder = new SharpDX.WIC.BitmapDecoder(\n                imgfactory,\n                stream,\n                WIC.DecodeOptions.CacheOnDemand\n                );\n\n            WIC.FormatConverter fconv = new WIC.FormatConverter(imgfactory);\n\n            using (WIC.BitmapFrameDecode frame = decoder.GetFrame(0))\n            {\n                fconv.Initialize(\n                    frame,\n                    WIC.PixelFormat.Format32bppRGBA,\n                    WIC.BitmapDitherType.None,\n                    null,\n                    0.0,\n                    WIC.BitmapPaletteType.Custom);\n            }\n            return fconv;\n        }    \n    \n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteTexture2D.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal partial class ConcreteTexture2D : ConcreteTexture, ITexture2DStrategy\n    {\n        private readonly int _width;\n        private readonly int _height;\n        private readonly int _arraySize;\n\n        internal readonly bool _mipMap;\n        internal readonly bool _shared;\n\n\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared,\n                                   bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height))\n        {\n            this._width  = width;\n            this._height = height;\n            this._arraySize = arraySize;\n\n            this._mipMap = mipMap;\n            this._shared = shared;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height))\n        {\n            this._width  = width;\n            this._height = height;\n            this._arraySize = arraySize;\n\n            this._mipMap = mipMap;\n            this._shared = shared;\n\n            this.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared);\n        }\n\n\n        #region ITexture2DStrategy\n        public int Width { get { return _width; } }\n        public int Height { get { return _height; } }\n        public int ArraySize { get { return _arraySize; } }\n\n        public Rectangle Bounds\n        {\n            get { return new Rectangle(0, 0, this._width, this._height); }\n        }\n\n        public IntPtr GetSharedHandle()\n        {\n            using (DXGI.Resource resource = GetTexture().QueryInterface<DXGI.Resource>())\n            {\n                return resource.SharedHandle;\n            }\n        }\n\n        public unsafe void SetData<T>(int level, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            int w, h;\n            TextureHelpers.GetSizeForLevel(Width, Height, level, out w, out h);\n\n            // For DXT compressed formats the width and height must be\n            // a multiple of 4 for the complete mip level to be set.\n            if (this.Format.IsCompressedFormat())\n            {\n                w = (w + 3) & ~3;\n                h = (h + 3) & ~3;\n            }\n\n            int elementSizeInByte = sizeof(T);\n            fixed (T* pData = &data[0])\n            {\n                IntPtr dataPtr = (IntPtr)pData;\n                dataPtr = dataPtr + startIndex * elementSizeInByte;\n\n                D3D11.ResourceRegion region = new D3D11.ResourceRegion();\n                region.Top = 0;\n                region.Front = 0;\n                region.Back = 1;\n                region.Bottom = h;\n                region.Left = 0;\n                region.Right = w;\n\n                // TODO: We need to deal with threaded contexts here!\n                int arraySlice = 0;\n                int subresourceIndex = arraySlice * this.LevelCount + level;\n                lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    d3dContext.UpdateSubresource(this.GetTexture(), subresourceIndex, region, dataPtr, this.Format.GetPitch(w), 0);\n                }\n            }\n        }\n\n        public unsafe void SetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            int elementSizeInByte = sizeof(T);\n            fixed (T* pData = &data[0])\n            {\n                IntPtr dataPtr = (IntPtr)pData;\n                dataPtr = dataPtr + startIndex * elementSizeInByte;\n\n                D3D11.ResourceRegion region = new D3D11.ResourceRegion();\n                region.Top = checkedRect.Top;\n                region.Front = 0;\n                region.Back = 1;\n                region.Bottom = checkedRect.Bottom;\n                region.Left = checkedRect.Left;\n                region.Right = checkedRect.Right;\n\n\n                // TODO: We need to deal with threaded contexts here!\n                int subresourceIndex = arraySlice * this.LevelCount + level;\n                lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    d3dContext.UpdateSubresource(this.GetTexture(), subresourceIndex, region, dataPtr, this.Format.GetPitch(checkedRect.Width), 0);\n                }\n            }\n        }\n\n        public unsafe void GetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            // Create a temp staging resource for copying the data.\n            //\n            int min = this.Format.IsCompressedFormat() ? 4 : 1;\n            int levelWidth = Math.Max(this.Width >> level, min);\n            int levelHeight = Math.Max(this.Height >> level, min);\n\n            DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0);\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Width = levelWidth;\n            texture2DDesc.Height = levelHeight;\n            texture2DDesc.MipLevels = 1;\n            texture2DDesc.ArraySize = 1;\n            texture2DDesc.Format = this.Format.ToDXFormat();\n            texture2DDesc.BindFlags = D3D11.BindFlags.None;\n            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read;\n            texture2DDesc.SampleDescription = sampleDesc;\n            texture2DDesc.Usage = D3D11.ResourceUsage.Staging;\n            texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            D3D11.Texture2D stagingTexture = new D3D11.Texture2D(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc);\n\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                int subresourceIndex = arraySlice * this.LevelCount + level;\n\n                // Copy the data from the GPU to the staging texture.\n                int elementsInRow = checkedRect.Width;\n                int rows = checkedRect.Height;\n                D3D11.ResourceRegion region = new D3D11.ResourceRegion(checkedRect.Left, checkedRect.Top, 0, checkedRect.Right, checkedRect.Bottom, 1);\n                d3dContext.CopySubresourceRegion(this.GetTexture(), subresourceIndex, region, stagingTexture, 0);\n\n                // Copy the data to the array.\n                DX.DataStream stream = null;\n                DX.DataBox dataBox = d3dContext.MapSubresource(stagingTexture, 0, D3D11.MapMode.Read, D3D11.MapFlags.None, out stream);\n                try\n                {\n                    int elementSize = this.Format.GetSize();\n                    if (this.Format.IsCompressedFormat())\n                    {\n                        // for 4x4 block compression formats an element is one block, so elementsInRow\n                        // and number of rows are 1/4 of number of pixels in width and height of the rectangle\n                        elementsInRow /= 4;\n                        rows /= 4;\n                    }\n                    int rowSize = elementSize * elementsInRow;\n                    if (rowSize == dataBox.RowPitch)\n                        stream.ReadRange(data, startIndex, elementCount);\n                    else if (level == 0 && arraySlice == 0 &&\n                             checkedRect.X == 0 && checkedRect.Y == 0 &&\n                             checkedRect.Width == this.Width && checkedRect.Height == this.Height &&\n                             startIndex == 0 && elementCount == data.Length)\n                    {\n                        // TNC: optimized PlatformGetData() that reads multiple elements in a row when texture has rowPitch\n                        int elementSize2 = sizeof(T);\n                        if (elementSize2 == 1) // byte[]\n                            elementsInRow = elementsInRow * elementSize;\n\n                        int currentIndex = 0;\n                        for (int row = 0; row < rows; row++)\n                        {\n                            stream.ReadRange(data, currentIndex, elementsInRow);\n                            stream.Seek((dataBox.RowPitch - rowSize), SeekOrigin.Current);\n                            currentIndex += elementsInRow;\n                        }\n                    }\n                    else\n                    {\n                        // Some drivers may add pitch to rows.\n                        // We need to copy each row separatly and skip trailing zeros.\n                        stream.Seek(0, SeekOrigin.Begin);\n\n                        int elementSizeInByte = sizeof(T);\n                        for (int row = 0; row < rows; row++)\n                        {\n                            int i;\n                            int maxElements =  (row + 1) * rowSize / elementSizeInByte;\n                            for (i = row * rowSize / elementSizeInByte; i < maxElements; i++)\n                                data[i + startIndex] = stream.Read<T>();\n\n                            if (i >= elementCount)\n                                break;\n\n                            stream.Seek(dataBox.RowPitch - rowSize, SeekOrigin.Current);\n                        }\n                    }\n                }\n                finally\n                {\n                    DX.Utilities.Dispose( ref stream);\n\n                    d3dContext.UnmapSubresource(stagingTexture, 0);                    \n                    DX.Utilities.Dispose(ref stagingTexture);\n                }\n            }\n        }\n\n        public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect)\n        {\n            int blockWidth, blockHeight;\n            Format.GetBlockSize(out blockWidth, out blockHeight);\n            int blockWidthMinusOne = blockWidth - 1;\n            int blockHeightMinusOne = blockHeight - 1;\n            // round x and y down to next multiple of block size; width and height up to next multiple of block size\n            int roundedWidth = (rect.Width + blockWidthMinusOne) & ~blockWidthMinusOne;\n            int roundedHeight = (rect.Height + blockHeightMinusOne) & ~blockHeightMinusOne;\n            checkedRect = new Rectangle(rect.X & ~blockWidthMinusOne, rect.Y & ~blockHeightMinusOne,\n                                        roundedWidth, roundedHeight);\n            if (Format == SurfaceFormat.RgbPvrtc2Bpp || Format == SurfaceFormat.RgbaPvrtc2Bpp)\n            {\n                return (Math.Max(checkedRect.Width, 16) * Math.Max(checkedRect.Height, 8) * 2 + 7) / 8;\n            }\n            else if (Format == SurfaceFormat.RgbPvrtc4Bpp || Format == SurfaceFormat.RgbaPvrtc4Bpp)\n            {\n                return (Math.Max(checkedRect.Width, 8) * Math.Max(checkedRect.Height, 8) * 4 + 7) / 8;\n            }\n            else\n            {\n                return roundedWidth * roundedHeight * fSize / (blockWidth * blockHeight);\n            }\n        }\n        #endregion ITexture2DStrategy\n\n\n        internal void PlatformConstructTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared)\n        {\n            DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0);\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Width = this.Width;\n            texture2DDesc.Height = this.Height;\n            texture2DDesc.MipLevels = this.LevelCount;\n            texture2DDesc.ArraySize = this.ArraySize;\n            texture2DDesc.Format = this.Format.ToDXFormat();\n            texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource;\n            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            texture2DDesc.SampleDescription = sampleDesc;\n            texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n            texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            if (this._shared)\n                texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.Shared;\n\n            System.Diagnostics.Debug.Assert(_texture == null);\n            D3D11.Resource texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc);\n            _texture = texture;\n            _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteTexture3D.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTexture3D : ConcreteTexture, ITexture3DStrategy\n    {\n        private readonly int _width;\n        private readonly int _height;\n        private readonly int _depth;\n\n        internal readonly bool _mipMap;\n\n\n        internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format,\n                                   bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth))\n        {\n            this._width = width;\n            this._height = height;\n            this._depth = depth;\n\n            this._mipMap = mipMap;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth))\n        {\n            this._width = width;\n            this._height = height;\n            this._depth = depth;\n\n            this._mipMap = mipMap;\n\n            this.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format);\n        }\n\n\n        #region ITexture3DStrategy\n        public int Width { get { return _width; } }\n        public int Height { get { return _height; } }\n        public int Depth { get { return _depth; } }\n\n        public unsafe void SetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            int width = right - left;\n            int height = bottom - top;\n            int depth = back - front;\n\n            int elementSizeInByte = sizeof(T);\n            fixed (T* pData = &data[0])\n            {\n                IntPtr dataPtr = (IntPtr)pData;\n                dataPtr = dataPtr + startIndex * elementSizeInByte;\n\n                int rowPitch = this.Format.GetPitch(width);\n                int slicePitch = rowPitch * height; // For 3D texture: Size of 2D image.\n                DX.DataBox dataBox = new DX.DataBox(dataPtr, rowPitch, slicePitch);\n\n                int subresourceIndex = level;\n\n                D3D11.ResourceRegion region = new D3D11.ResourceRegion(left, top, front, right, bottom, back);\n\n                lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    d3dContext.UpdateSubresource(dataBox, this.GetTexture(), subresourceIndex, region);\n                }\n            }\n        }\n\n        public void GetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n             where T : struct\n        {\n            // Create a temp staging resource for copying the data.\n            //\n            D3D11.Texture3DDescription texture3DDesc = new D3D11.Texture3DDescription();\n            texture3DDesc.Width = this.Width;\n            texture3DDesc.Height = this.Height;\n            texture3DDesc.Depth = this.Depth;\n            texture3DDesc.MipLevels = 1;\n            texture3DDesc.Format = this.Format.ToDXFormat();\n            texture3DDesc.BindFlags = D3D11.BindFlags.None;\n            texture3DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read;\n            texture3DDesc.Usage = D3D11.ResourceUsage.Staging;\n            texture3DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            using (D3D11.Texture3D stagingTexture = new D3D11.Texture3D(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture3DDesc))\n            {\n                lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    // Copy the data from the GPU to the staging texture.\n                    d3dContext.CopySubresourceRegion(this.GetTexture(), level, new D3D11.ResourceRegion(left, top, front, right, bottom, back), stagingTexture, 0);\n\n                    // Copy the data to the array.\n                    DX.DataStream stream = null;\n                    DX.DataBox dataBox = d3dContext.MapSubresource(stagingTexture, 0, D3D11.MapMode.Read, D3D11.MapFlags.None, out stream);\n                    try\n                    {\n                        // Some drivers may add pitch to rows or slices.\n                        // We need to copy each row separatly and skip trailing zeros.\n                        int currentIndex = startIndex;\n                        int elementSize = this.Format.GetSize();\n                        int elementsInRow = right - left;\n                        int rowsInSlice = bottom - top;\n                        for (int slice = front; slice < back; slice++)\n                        {\n                            for (int row = top; row < bottom; row++)\n                            {\n                                stream.ReadRange(data, currentIndex, elementsInRow);\n                                stream.Seek(dataBox.RowPitch - (elementSize * elementsInRow), SeekOrigin.Current);\n                                currentIndex += elementsInRow;\n                            }\n                            stream.Seek(dataBox.SlicePitch - (dataBox.RowPitch * rowsInSlice), SeekOrigin.Current);\n                        }\n                    }\n                    finally\n                    {\n                        DX.Utilities.Dispose(ref stream);\n\n                        d3dContext.UnmapSubresource(stagingTexture, 0);\n                    }\n                }\n            }\n\n        }\n        #endregion ITexture3DStrategy\n\n        internal void PlatformConstructTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            D3D11.Texture3DDescription texture3DDesc = new D3D11.Texture3DDescription();\n            texture3DDesc.Width = this.Width;\n            texture3DDesc.Height = this.Height;\n            texture3DDesc.Depth = this.Depth;\n            texture3DDesc.MipLevels = this.LevelCount;\n            texture3DDesc.Format = this.Format.ToDXFormat();\n            texture3DDesc.BindFlags = D3D11.BindFlags.ShaderResource;\n            texture3DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            texture3DDesc.Usage = D3D11.ResourceUsage.Default;\n            texture3DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            System.Diagnostics.Debug.Assert(_texture == null);\n            D3D11.Resource texture = new D3D11.Texture3D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture3DDesc);\n            _texture = texture;\n            _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteTextureCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteTextureCollection : TextureCollectionStrategy\n    {\n\n        internal uint InternalDirty\n        {\n            get { return base._dirty; }\n            set { base._dirty = value; }\n        }\n\n\n        internal ConcreteTextureCollection(GraphicsContextStrategy contextStrategy, int capacity)\n            : base(contextStrategy, capacity)\n        {\n        }\n\n\n        public override void Clear()\n        {\n            base.Clear();\n        }\n\n        internal void ClearTargets(RenderTargetBinding[] targets, D3D11.CommonShaderStage shaderStage)\n        {\n            // NOTE: We make the assumption here that the caller has\n            // locked the d3dContext for us to use.\n\n            // Make one pass across all the texture slots.\n            for (int i = 0; i < _textures.Length; i++)\n            {\n                if (_textures[i] == null)\n                    continue;\n\n                for (int k = 0; k < targets.Length; k++)\n                {\n                    if (_textures[i] == targets[k].RenderTarget)\n                    {\n                        uint mask = ((uint)1) << i;\n                        // clear texture bit\n                        _dirty &= ~mask;\n                        _textures[i] = null;\n                        shaderStage.SetShaderResource(i, null);\n                        break;\n                    }\n                }\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/ConcreteTextureCube.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTextureCube : ConcreteTexture, ITextureCubeStrategy\n    {\n        private readonly int _size;\n\n        internal readonly bool _mipMap;\n\n\n        internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format,\n                                     bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size))\n        {\n            this._size = size;\n\n            this._mipMap = mipMap;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size))\n        {\n            this._size = size;\n\n            this._mipMap = mipMap;\n\n            this.PlatformConstructTextureCube(contextStrategy, size, mipMap, format);\n        }\n\n\n        #region ITextureCubeStrategy\n        public int Size { get { return _size; } }\n\n        public unsafe void SetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            int elementSizeInByte = sizeof(T);\n            fixed (T* pData = &data[0])\n            {\n                IntPtr dataPtr = (IntPtr)pData;\n                dataPtr = dataPtr + startIndex * elementSizeInByte;\n\n                DX.DataBox dataBox = new DX.DataBox(dataPtr, this.Format.GetPitch(checkedRect.Width), 0);\n\n                int subresourceIndex = (int)face * this.LevelCount + level;\n\n                D3D11.ResourceRegion region = new D3D11.ResourceRegion\n                {\n                    Top = checkedRect.Top,\n                    Front = 0,\n                    Back = 1,\n                    Bottom = checkedRect.Bottom,\n                    Left = checkedRect.Left,\n                    Right = checkedRect.Right\n                };\n\n                lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    d3dContext.UpdateSubresource(dataBox, this.GetTexture(), subresourceIndex, region);\n                }\n            }\n        }\n\n        public unsafe void GetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            // Create a temp staging resource for copying the data.\n            //\n            int min = this.Format.IsCompressedFormat() ? 4 : 1;\n            int levelSize = Math.Max(this.Size >> level, min);\n\n            DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0);\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Width = levelSize;\n            texture2DDesc.Height = levelSize;\n            texture2DDesc.MipLevels = 1;\n            texture2DDesc.ArraySize = 1;\n            texture2DDesc.Format = this.Format.ToDXFormat();\n            texture2DDesc.SampleDescription = sampleDesc;\n            texture2DDesc.BindFlags = D3D11.BindFlags.None;\n            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read;\n            texture2DDesc.Usage = D3D11.ResourceUsage.Staging;\n            texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            using (D3D11.Texture2D stagingTexture = new D3D11.Texture2D(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc))\n            {\n                lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    // Copy the data from the GPU to the staging texture.\n                    int subresourceIndex = (int)face * this.LevelCount + level;\n                    int elementsInRow = checkedRect.Width;\n                    int rows = checkedRect.Height;\n                    D3D11.ResourceRegion region = new D3D11.ResourceRegion(checkedRect.Left, checkedRect.Top, 0, checkedRect.Right, checkedRect.Bottom, 1);\n                    d3dContext.CopySubresourceRegion(this.GetTexture(), subresourceIndex, region, stagingTexture, 0);\n\n                    // Copy the data to the array.\n                    DX.DataStream stream = null;\n                    DX.DataBox dataBox = d3dContext.MapSubresource(stagingTexture, 0, D3D11.MapMode.Read, D3D11.MapFlags.None, out stream);\n                    try\n                    {\n                        int elementSize = this.Format.GetSize();\n                        if (this.Format.IsCompressedFormat())\n                        {\n                            // for 4x4 block compression formats an element is one block, so elementsInRow\n                            // and number of rows are 1/4 of number of pixels in width and height of the rectangle\n                            elementsInRow /= 4;\n                            rows /= 4;\n                        }\n                        int rowSize = elementSize * elementsInRow;\n                        if (rowSize == dataBox.RowPitch)\n                            stream.ReadRange(data, startIndex, elementCount);\n                        else\n                        {\n                            // Some drivers may add pitch to rows.\n                            // We need to copy each row separatly and skip trailing zeros.\n                            stream.Seek(0, SeekOrigin.Begin);\n\n                            int elementSizeInByte = sizeof(T);\n                            for (int row = 0; row < rows; row++)\n                            {\n                                int i;\n                                for (i = row * rowSize / elementSizeInByte; i < (row + 1) * rowSize / elementSizeInByte; i++)\n                                    data[i + startIndex] = stream.Read<T>();\n\n                                if (i >= elementCount)\n                                    break;\n\n                                stream.Seek(dataBox.RowPitch - rowSize, SeekOrigin.Current);\n                            }\n                        }\n                    }\n                    finally\n                    {\n                        DX.Utilities.Dispose(ref stream);\n\n                        d3dContext.UnmapSubresource(stagingTexture, 0);\n                    }\n                }\n            }\n\n        }\n\n        public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect)\n        {\n            // round x and y down to next multiple of four; width and height up to next multiple of four\n            int roundedWidth = (rect.Width + 3) & ~0x3;\n            int roundedHeight = (rect.Height + 3) & ~0x3;\n            checkedRect = new Rectangle(rect.X & ~0x3, rect.Y & ~0x3,\n                                        roundedWidth, roundedHeight);\n            return (roundedWidth * roundedHeight * fSize / 16);\n        }\n        #endregion ITextureCubeStrategy\n\n        internal void PlatformConstructTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n        {\n            DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0);\n            D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription();\n            texture2DDesc.Width = this.Size;\n            texture2DDesc.Height = this.Size;\n            texture2DDesc.MipLevels = this.LevelCount;\n            texture2DDesc.ArraySize = 6; // A texture cube is a 2D texture array with 6 textures.\n            texture2DDesc.Format = this.Format.ToDXFormat();\n            texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource;\n            texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            texture2DDesc.SampleDescription = sampleDesc;\n            texture2DDesc.Usage = D3D11.ResourceUsage.Default;\n            texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.TextureCube;\n\n            System.Diagnostics.Debug.Assert(_texture == null);\n            D3D11.Resource texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture2DDesc);\n            _texture = texture;\n            _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, texture);\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/GraphicsSharpDXExtensions.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\nusing D3D11 = SharpDX.Direct3D11;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    static public class GraphicsSharpDXExtensions\n    {\n        /// <summary>\n        /// Returns a handle to internal device object. Valid only on DirectX platforms.\n        /// For usage, convert this to SharpDX.Direct3D11.Device.\n        /// </summary>\n        public static object GetD3D11Device(this GraphicsDevice device)\n        {\n            D3D11.Device d3dDevice = ((IPlatformGraphicsDevice)device).Strategy.ToConcrete<ConcreteGraphicsDevice>()._d3dDevice;\n            return d3dDevice;\n        }\n\n        /// <summary>\n        /// Returns a handle to internal device object. Valid only on DirectX platforms.\n        /// For usage, convert this to SharpDX.Direct3D11.Resource.\n        /// </summary>\n        public static object GetD3D11Resource(this Texture texture)\n        {\n            D3D11.Resource d3dResource = ((IPlatformTexture)texture).GetTextureStrategy<ConcreteTexture>().GetTexture();\n            return d3dResource;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/IRenderTargetStrategyDX11.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing D3D11 = SharpDX.Direct3D11;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal interface IRenderTargetStrategyDX11\n    {\n        /// <summary>\n        /// Gets the <see cref=\"SharpDX.Direct3D11.RenderTargetView\"/> for the specified array slice.\n        /// </summary>\n        /// <param name=\"arraySlice\">The array slice.</param>\n        /// <returns>The <see cref=\"SharpDX.Direct3D11.RenderTargetView\"/>.</returns>\n        /// <remarks>\n        /// For texture cubes: The array slice is the index of the cube map face.\n        /// </remarks>\n        D3D11.RenderTargetView GetRenderTargetView(int arraySlice);\n\n        /// <summary>\n        /// Gets the <see cref=\"SharpDX.Direct3D11.DepthStencilView\"/>.\n        /// </summary>\n        /// <param name=\"arraySlice\">The array slice.</param>\n        /// <returns>The <see cref=\"SharpDX.Direct3D11.DepthStencilView\"/>. Can be <see langword=\"null\"/>.</returns>\n        D3D11.DepthStencilView GetDepthStencilView(int arraySlice);\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Shader/ConcreteConstantBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    internal sealed class ConcreteConstantBuffer : ConstantBufferStrategy\n    {\n        private D3D11.Buffer _cbuffer;\n\n        internal D3D11.Buffer DXcbuffer { get { return _cbuffer; } }\n\n\n        public ConcreteConstantBuffer(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats)\n            : base(contextStrategy, name, parameters, offsets, sizeInBytes, integersAsFloats)\n        {\n            _cbuffer = CreateD3D11Buffer();\n        }\n\n        private ConcreteConstantBuffer(ConcreteConstantBuffer source)\n            : base(source)\n        {\n            _cbuffer = CreateD3D11Buffer();\n        }\n\n        public override object Clone()\n        {\n            return new ConcreteConstantBuffer(this);\n        }\n\n        private D3D11.Buffer CreateD3D11Buffer()\n        {\n            // Allocate the hardware constant buffer.\n            D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription();\n            bufferDesc.Usage = D3D11.ResourceUsage.Default;\n            bufferDesc.BindFlags = D3D11.BindFlags.ConstantBuffer;\n            bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            bufferDesc.SizeInBytes = this.BufferData.Length;\n\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                return new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, bufferDesc);\n            }\n        }\n\n        public override void PlatformContextLost()\n        {\n            DX.Utilities.Dispose(ref _cbuffer);\n            Dirty = true;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                DX.Utilities.Dispose(ref _cbuffer);\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Shader/ConcreteConstantBufferCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteConstantBufferCollection : ConstantBufferCollectionStrategy\n    {\n        private uint _valid;\n        private uint _dirty;\n\n        internal uint InternalValid { get { return this._valid; } }\n\n        internal uint InternalDirty\n        {\n            get { return this._dirty; }\n            set { this._dirty = value; }\n        }\n\n        internal ConcreteConstantBufferCollection(int capacity)\n            : base(capacity)\n        {\n            // hard limit of 32 because of _valid flags being 32bits.\n            if (capacity > 32)\n                throw new ArgumentOutOfRangeException(\"capacity\");\n\n            _valid = 0;\n        }\n\n        public override ConstantBuffer this[int index]\n        {\n            get { return base[index]; }\n            set\n            {\n                if (base[index] != value)\n                {\n                    uint mask = ((uint)1) << index;\n                    base[index] = value;\n\n                    if (value != null)\n                        _valid |= mask;\n                    else\n                        _valid &= ~mask;\n\n                    _dirty |= mask;\n                }\n            }\n        }\n\n        public override void Clear()\n        {\n            for (int slot = 0; slot < base.Length; slot++)\n                base[slot] = null;\n\n            _valid = 0;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Shader/ConcretePixelShader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcretePixelShader : ConcreteShader\n    {\n        private D3D11.PixelShader _pixelShader;\n\n        internal D3D11.PixelShader DXPixelShader { get { return _pixelShader; } }\n\n\n        internal ConcretePixelShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            CreatePixelShader();\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            DX.Utilities.Dispose(ref _pixelShader);\n\n            base.PlatformGraphicsContextLost();\n        }\n\n        private void CreatePixelShader()\n        {\n            _pixelShader = new D3D11.PixelShader(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, ShaderBytecode);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                DX.Utilities.Dispose(ref _pixelShader);\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Shader/ConcreteShader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class ConcreteShader : ShaderStrategy\n    {\n        private byte[] _shaderBytecode;\n\n        internal byte[] ShaderBytecode { get { return _shaderBytecode; } }\n\n\n        internal ConcreteShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            GraphicsProfile graphicsProfile = this.GraphicsDeviceStrategy.GraphicsProfile;\n            ShaderVersion maxVersion = MaxShaderVersions[graphicsProfile];\n            if (shaderVersion != default\n            && shaderVersion > maxVersion)\n            {\n                throw new NotSupportedException(\n                    $\"Shader model {shaderVersion} is not supported by the current graphics profile '{graphicsProfile}'.\");\n            }\n            // We need the bytecode later for allocating the\n            // input layout from the vertex declaration.\n            _shaderBytecode = shaderBytecode;\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n\n            base.PlatformGraphicsContextLost();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Shader/ConcreteVertexShader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcreteVertexShader : ConcreteShader\n    {\n        private D3D11.VertexShader _vertexShader;\n        // Caches the DirectX input layouts for this vertex shader.\n        private InputLayoutCache _inputLayouts;\n\n        internal InputLayoutCache InputLayouts { get { return _inputLayouts; } }\n        internal D3D11.VertexShader DXVertexShader { get { return _vertexShader; } }\n\n\n        internal ConcreteVertexShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n                CreateVertexShader();\n        }\n\n        private void CreateVertexShader()\n        {\n            _vertexShader = new D3D11.VertexShader(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, ShaderBytecode, null);\n            _inputLayouts = new InputLayoutCache(base.GraphicsDeviceStrategy, ShaderBytecode);\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            DX.Utilities.Dispose(ref _inputLayouts);\n            DX.Utilities.Dispose(ref _vertexShader);\n\n            base.PlatformGraphicsContextLost();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                DX.Utilities.Dispose(ref _inputLayouts);\n                DX.Utilities.Dispose(ref _vertexShader);\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/SharpDXExtensions.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing SharpDX.Mathematics.Interop;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    static class SharpDXExtensions\n    {\n        static public int ToDXSwapInterval(this PresentInterval interval)\n        {\n            switch (interval)\n            {\n                case PresentInterval.Immediate:\n                    return 0;\n                case PresentInterval.Two:\n                    return 2;\n\n                default:\n                    return 1;\n            }\n        }\n\n        static public DXGI.SwapEffect ToDXSwapEffect(this PresentInterval presentInterval)\n        {\n            DXGI.SwapEffect effect;\n\n            switch (presentInterval)\n            {\n                case PresentInterval.One:\n                case PresentInterval.Two:\n#if UAP || WINUI\n                    effect = DXGI.SwapEffect.FlipSequential;\n#else\n                    effect = DXGI.SwapEffect.Discard;\n#endif\n                    break;\n\n                case PresentInterval.Immediate:\n#if UAP || WINUI\n                    effect = DXGI.SwapEffect.FlipSequential;\n#else\n                    effect = DXGI.SwapEffect.Sequential;\n#endif\n                    break;\n\n\n                default:\n#if UAP || WINUI\n                    effect = DXGI.SwapEffect.FlipSequential;\n#else\n                    effect = DXGI.SwapEffect.Discard;\n#endif\n                    break;\n\n            }\n\n            //if (present.RenderTargetUsage != RenderTargetUsage.PreserveContents && present.MultiSampleCount == 0)\n            //effect = DXGI.SwapEffect.Discard;\n\n            return effect;\n        }\n\n        static public string ToDXSemanticName(this VertexElementUsage vertexElementUsage)\n        {\n            switch (vertexElementUsage)\n            {\n                case VertexElementUsage.Position:\n                    return \"POSITION\";\n                case VertexElementUsage.Color:\n                    return \"COLOR\";\n                case VertexElementUsage.Normal:\n                    return \"NORMAL\";\n                case VertexElementUsage.TextureCoordinate:\n                    return \"TEXCOORD\";\n                case VertexElementUsage.BlendIndices:\n                    return \"BLENDINDICES\";\n                case VertexElementUsage.BlendWeight:\n                    return \"BLENDWEIGHT\";\n                case VertexElementUsage.Binormal:\n                    return \"BINORMAL\";\n                case VertexElementUsage.Tangent:\n                    return \"TANGENT\";\n                case VertexElementUsage.PointSize:\n                    return \"PSIZE\";\n\n                default:\n                    throw new NotSupportedException(\"Unknown vertex element usage!\");\n            }\n        }\n\n        static public DXGI.Format ToDXFormat(this VertexElementFormat vertexElementFormat)\n        {\n            switch (vertexElementFormat)\n            {\n                case VertexElementFormat.Single:\n                    return DXGI.Format.R32_Float;\n                case VertexElementFormat.Vector2:\n                    return DXGI.Format.R32G32_Float;\n                case VertexElementFormat.Vector3:\n                    return DXGI.Format.R32G32B32_Float;\n                case VertexElementFormat.Vector4:\n                    return DXGI.Format.R32G32B32A32_Float;\n                case VertexElementFormat.Color:\n                    return DXGI.Format.R8G8B8A8_UNorm;\n                case VertexElementFormat.Byte4:\n                    return DXGI.Format.R8G8B8A8_UInt;\n                case VertexElementFormat.Short2:\n                    return DXGI.Format.R16G16_SInt;\n                case VertexElementFormat.Short4:\n                    return DXGI.Format.R16G16B16A16_SInt;\n                case VertexElementFormat.NormalizedShort2:\n                    return DXGI.Format.R16G16_SNorm;\n                case VertexElementFormat.NormalizedShort4:\n                    return DXGI.Format.R16G16B16A16_SNorm;\n                case VertexElementFormat.HalfVector2:\n                    return DXGI.Format.R16G16_Float;\n                case VertexElementFormat.HalfVector4:\n                    return DXGI.Format.R16G16B16A16_Float;\n\n                default:\n                    throw new NotSupportedException(\"Unknown vertex element format!\");\n            }\n        }\n\n        static public DXGI.Format ToDXFormat(this DepthFormat format)\n        {\n            switch (format)\n            {\n                case DepthFormat.None:\n                    return DXGI.Format.Unknown;\n                case DepthFormat.Depth16:\n                    return DXGI.Format.D16_UNorm;\n                case DepthFormat.Depth24:\n                case DepthFormat.Depth24Stencil8:\n                    return DXGI.Format.D24_UNorm_S8_UInt;\n                    \n                default:\n                    return DXGI.Format.Unknown;\n            }\n        }\n\n        static public DXGI.Format ToDXFormat(this SurfaceFormat format)\n        {\n            switch (format)\n            {\n                case SurfaceFormat.Color:\n                    return DXGI.Format.R8G8B8A8_UNorm;\n                case SurfaceFormat.Bgr565:\n                    return DXGI.Format.B5G6R5_UNorm;\n                case SurfaceFormat.Bgra5551:\n                    return DXGI.Format.B5G5R5A1_UNorm;\n                case SurfaceFormat.Bgra4444:\n#if UAP || WINUI\n                    return DXGI.Format.B4G4R4A4_UNorm;\n#else\n                    return (DXGI.Format)115;\n#endif\n                case SurfaceFormat.Dxt1:\n                    return DXGI.Format.BC1_UNorm;\n                case SurfaceFormat.Dxt3:\n                    return DXGI.Format.BC2_UNorm;\n                case SurfaceFormat.Dxt5:\n                    return DXGI.Format.BC3_UNorm;\n                case SurfaceFormat.NormalizedByte2:\n                    return DXGI.Format.R8G8_SNorm;\n                case SurfaceFormat.NormalizedByte4:\n                    return DXGI.Format.R8G8B8A8_SNorm;\n                case SurfaceFormat.Rgba1010102:\n                    return DXGI.Format.R10G10B10A2_UNorm;\n                case SurfaceFormat.Rg32:\n                    return DXGI.Format.R16G16_UNorm;\n                case SurfaceFormat.Rgba64:\n                    return DXGI.Format.R16G16B16A16_UNorm;\n                case SurfaceFormat.Alpha8:\n                    return DXGI.Format.A8_UNorm;\n                case SurfaceFormat.Single:\n                    return DXGI.Format.R32_Float;\n                case SurfaceFormat.HalfSingle:\n                    return DXGI.Format.R16_Float;\n                case SurfaceFormat.HalfVector2:\n                    return DXGI.Format.R16G16_Float;\n                case SurfaceFormat.Vector2:\n                    return DXGI.Format.R32G32_Float;\n                case SurfaceFormat.Vector4:\n                    return DXGI.Format.R32G32B32A32_Float;\n                case SurfaceFormat.HalfVector4:\n                    return DXGI.Format.R16G16B16A16_Float;\n                case SurfaceFormat.HdrBlendable:\n                    // TODO: This needs to check the graphics device and \n                    // return the best hdr blendable format for the device.\n                    return DXGI.Format.R16G16B16A16_Float;\n                case SurfaceFormat.Bgr32:\n                    return DXGI.Format.B8G8R8X8_UNorm;\n                case SurfaceFormat.Bgra32:\n                    return DXGI.Format.B8G8R8A8_UNorm;\n                case SurfaceFormat.ColorSRgb:\n                    return DXGI.Format.R8G8B8A8_UNorm_SRgb;\n                case SurfaceFormat.ColorSRgba:\n                    return DXGI.Format.R8G8B8A8_UNorm_SRgb;\n                case SurfaceFormat.Bgr32SRgb:\n                    return DXGI.Format.B8G8R8X8_UNorm_SRgb;\n                case SurfaceFormat.Bgra32SRgb:\n                    return DXGI.Format.B8G8R8A8_UNorm_SRgb;\n                case SurfaceFormat.Dxt1SRgb:\n                    return DXGI.Format.BC1_UNorm_SRgb;\n                case SurfaceFormat.Dxt3SRgb:\n                    return DXGI.Format.BC2_UNorm_SRgb;\n                case SurfaceFormat.Dxt5SRgb:\n                    return DXGI.Format.BC3_UNorm_SRgb;\n                    \n                default:\n                    return DXGI.Format.R8G8B8A8_UNorm;\n            }\n        }\n\n        static public int GetPitch(this SurfaceFormat format, int width)\n        {\n            Debug.Assert(width > 0, \"The width is negative!\");\n\n            switch (format)\n            {\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1SRgb:\n                case SurfaceFormat.Dxt1a:\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                case SurfaceFormat.RgbEtc1:\n                case SurfaceFormat.Rgb8Etc2:\n                case SurfaceFormat.Srgb8Etc2:\n                case SurfaceFormat.Rgb8A1Etc2:\n                case SurfaceFormat.Srgb8A1Etc2:\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt3SRgb:\n                case SurfaceFormat.Dxt5:\n                case SurfaceFormat.Dxt5SRgb:\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                    return ((width + 3) / 4) * format.GetSize();\n\n                default:\n                    return width * format.GetSize();\n            };\n        }\n\n        static public D3D11.Comparison ToDXComparisonFunction(this CompareFunction compare)\n        {\n            switch (compare)\n            {\n                case CompareFunction.Always:\n                    return D3D11.Comparison.Always;\n                case CompareFunction.Equal:\n                    return D3D11.Comparison.Equal;\n                case CompareFunction.Greater:\n                    return D3D11.Comparison.Greater;\n                case CompareFunction.GreaterEqual:\n                    return D3D11.Comparison.GreaterEqual;\n                case CompareFunction.Less:\n                    return D3D11.Comparison.Less;\n                case CompareFunction.LessEqual:\n                    return D3D11.Comparison.LessEqual;\n                case CompareFunction.Never:\n                    return D3D11.Comparison.Never;\n                case CompareFunction.NotEqual:\n                    return D3D11.Comparison.NotEqual;\n\n                default:\n                    throw new ArgumentException(\"Invalid comparison!\");\n            }\n        }\n\n        static public RawVector2 ToRawVector2(this Vector2 vec)\n        {\n            return new RawVector2(vec.X, vec.Y);\n        }\n\n        static public RawVector3 ToRawVector3(this Vector3 vec)\n        {\n            return new RawVector3(vec.X, vec.Y, vec.Z);\n        }\n\n        static public RawVector4 ToRawVector4(this Vector4 vec)\n        {\n            return new RawVector4(vec.X, vec.Y, vec.Z, vec.W);\n        }\n\n        static public RawColor4 ToRawColor4(this Vector4 color)\n        {\n            return new RawColor4(color.X, color.Y, color.Z, color.W);\n        }\n\n        static public RawColor4 ToRawColor4(this Color color)\n        {\n            return new RawColor4(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f, color.A / 255.0f);\n        }\n\n        static public RawViewportF ToRawViewportF(this Viewport viewport)\n        {\n            return new RawViewportF\n            {\n                X = viewport.X,\n                Y = viewport.Y,\n                Width = viewport.Width,\n                Height = viewport.Height,\n                MinDepth = viewport.MinDepth,\n                MaxDepth = viewport.MaxDepth\n            };\n        }\n\n        \n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/SpriteBatcher.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    /// <summary>\n    /// This class handles the queueing of batch items into the GPU by creating the triangle tesselations\n    /// that are used to draw the sprite textures. This class supports int.MaxValue number of sprites to be\n    /// batched and will process them into short.MaxValue groups (strided by 6 for the number of vertices\n    /// sent to the GPU). \n    /// </summary>\n    internal sealed class SpriteBatcher : SpriteBatcherStrategy\n    {\n        /// <summary>\n        /// Initialization size for the batch item list and queue.\n        /// </summary>\n        private const int InitialBatchSize = 256;\n        /// <summary>\n        /// The maximum number of batch items that can be processed per iteration\n        /// </summary>\n        // the upper limit is the range of 16bit indices, (ushort.MaxValue+1)/4 = 16384 vertices per quad.\n        // or (short.MaxValue+1)/4 = 8192 if we are using shorts instead of usigned shorts.\n        private const int MaxBatchSize = 4096;\n\n        /// <summary>\n        /// The list of batch items to process.\n        /// </summary>\n        private SpriteBatchItem[] _batchItemList;\n        /// <summary>\n        /// Index pointer to the next available SpriteBatchItem in _batchItemList.\n        /// </summary>\n        private int _batchItemCount;\n\n        /// <summary>\n        /// The target graphics device.\n        /// </summary>\n        private readonly GraphicsDevice _device;\n\n        /// <summary>\n        /// Vertex index array. The values in this array never change.\n        /// </summary>\n        private short[] _index;\n\n        private int _baseQuad;\n        private DynamicVertexBuffer _vertexBuffer;\n        private IndexBuffer _indexBuffer;\n\n        public override int BatchItemCount { get { return _batchItemCount; } }\n\n        public SpriteBatcher(GraphicsDevice device, int capacity = 0)\n        {\n            _device = device;\n            _device.DeviceReset += _device_DeviceReset;\n\n            if (capacity <= 0)\n                capacity = InitialBatchSize;\n            else\n                capacity = (capacity + 63) & (~63); // ensure chunks of 64.\n\n            _batchItemList = new SpriteBatchItem[capacity];\n            _batchItemCount = 0;\n\n            for (int i = 0; i < capacity; i++)\n                _batchItemList[i] = new SpriteBatchItem();\n\n            EnsureArrayCapacity(capacity);\n        }\n\n        void _device_DeviceReset(object sender, EventArgs e)\n        {\n            // recreate index array\n            _index = null;\n            EnsureArrayCapacity(Math.Min(_batchItemList.Length, MaxBatchSize));\n        }\n\n        /// <summary>\n        /// Reuse a previously allocated SpriteBatchItem from the item pool. \n        /// if there is none available grow the pool and initialize new items.\n        /// </summary>\n        /// <returns></returns>\n        public override SpriteBatchItem CreateBatchItem()\n        {\n            if (_batchItemCount < _batchItemList.Length)\n            {\n                return _batchItemList[_batchItemCount++];\n            }\n            else\n            {\n                int oldSize = _batchItemList.Length;\n                int newSize = oldSize + oldSize / 2; // grow by x1.5\n                newSize = (newSize + 63) & (~63); // grow in chunks of 64.\n                Array.Resize(ref _batchItemList, newSize);\n                for (int i = oldSize; i < newSize; i++)\n                    _batchItemList[i] = new SpriteBatchItem();\n\n                EnsureArrayCapacity(Math.Min(newSize, MaxBatchSize));\n                return _batchItemList[_batchItemCount++];\n            }\n        }\n\n        /// <summary>\n        /// Resize and recreate the missing indices for the index and vertex position color buffers.\n        /// </summary>\n        /// <param name=\"numBatchItems\"></param>\n        private unsafe void EnsureArrayCapacity(int numBatchItems)\n        {\n            int neededCapacity = 6 * numBatchItems;\n            if (_index != null && neededCapacity <= _index.Length)\n            {\n                // Short circuit out of here because we have enough capacity.\n                return;\n            }\n            short[] newIndex = new short[6 * numBatchItems];\n            int start = 0;\n            if (_index != null)\n            {\n                _index.CopyTo(newIndex, 0);\n                start = _index.Length / 6;\n            }\n            fixed (short* indexFixedPtr = newIndex)\n            {\n                short* indexPtr = indexFixedPtr + (start * 6);\n                for (int i = start; i < numBatchItems; i++, indexPtr += 6)\n                {\n                    /*\n                     *  TL    TR\n                     *   0----1 0,1,2,3 = index offsets for vertex indices\n                     *   |   /| TL,TR,BL,BR are vertex references in SpriteBatchItem.\n                     *   |  / |\n                     *   | /  |\n                     *   |/   |\n                     *   2----3\n                     *  BL    BR\n                     */\n                    // Triangle 1\n                    *(indexPtr + 0) = (short)(i * 4);\n                    *(indexPtr + 1) = (short)(i * 4 + 1);\n                    *(indexPtr + 2) = (short)(i * 4 + 2);\n                    // Triangle 2\n                    *(indexPtr + 3) = (short)(i * 4 + 1);\n                    *(indexPtr + 4) = (short)(i * 4 + 3);\n                    *(indexPtr + 5) = (short)(i * 4 + 2);\n                }\n            }\n            _index = newIndex;\n\n            if (_vertexBuffer != null) _vertexBuffer.Dispose();\n            int quadCount = (4 * numBatchItems);\n            quadCount = quadCount * 4; //ensure vertex used 4 times before reset/Discard.\n            _vertexBuffer = new DynamicVertexBuffer(_device, VertexPositionColorTexture.VertexDeclaration, quadCount, BufferUsage.WriteOnly);\n            _baseQuad = 0;\n            if (_indexBuffer != null) _indexBuffer.Dispose();\n            _indexBuffer = new IndexBuffer(_device, IndexElementSize.SixteenBits, newIndex.Length, BufferUsage.WriteOnly);\n            _indexBuffer.SetData(newIndex);\n        }\n\n        /// <summary>\n        /// Sorts the batch items\n        /// </summary>\n        /// <param name=\"sortMode\">The type of depth sorting desired for the rendering.</param>\n        public override void SortBatch(SpriteSortMode sortMode)\n        {\n            switch (sortMode)\n            {\n                case SpriteSortMode.Texture:\n                case SpriteSortMode.FrontToBack:\n                case SpriteSortMode.BackToFront:\n                    Array.Sort(_batchItemList, 0, _batchItemCount);\n                    break;\n            }\n        }\n\n        /// <summary>\n        /// Groups batch drawing into maximal allowed batch sets that do not\n        /// overflow the 16 bit array indices for vertices.\n        /// </summary>\n        /// <param name=\"effect\">The custom effect to apply to the drawn geometry</param>\n        public unsafe override void DrawBatch(Effect effect)\n        {\n            // Determine how many iterations through the drawing code we need to make\n            int batchIndex = 0;\n            int batchCount = _batchItemCount;\n\n            ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy.Metrics_AddSpriteCount(batchCount);\n\n            // Iterate through the batches, doing short.MaxValue sets of vertices only.\n            while (batchCount > 0)\n            {\n                int spriteCount = 0;\n                Texture2D tex = null;\n\n                int numBatchesToProcess = batchCount;\n                if (numBatchesToProcess > MaxBatchSize)\n                {\n                    numBatchesToProcess = MaxBatchSize;\n                }\n\n                _device.SetVertexBuffer(_vertexBuffer);\n                _device.Indices = _indexBuffer;\n\n                lock (((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    //map vertexBaffer\n                    D3D11.MapMode mode = D3D11.MapMode.WriteNoOverwrite;\n                    if ((_baseQuad + numBatchesToProcess) * 4 > _vertexBuffer.VertexCount)\n                    {\n                        mode = D3D11.MapMode.WriteDiscard;\n                        _baseQuad = 0;\n                    }\n                    DX.DataBox dataBox = d3dContext.MapSubresource(((IPlatformVertexBuffer)_vertexBuffer).Strategy.ToConcrete<ConcreteVertexBuffer>().DXVertexBuffer, 0, mode, D3D11.MapFlags.None);\n                    try\n                    {\n                        VertexPositionColorTexture* vertexArrayPtr = (VertexPositionColorTexture*)dataBox.DataPointer.ToPointer();\n\n                        // create batch\n                        vertexArrayPtr += _baseQuad * 4;\n                        for (int i = 0; i < numBatchesToProcess; i++, vertexArrayPtr += 4)\n                        {\n                            SpriteBatchItem item = _batchItemList[batchIndex + i];\n\n                            // store the SpriteBatchItem data in our vertexArray\n                            *(vertexArrayPtr + 0) = item.vertexTL;\n                            *(vertexArrayPtr + 1) = item.vertexTR;\n                            *(vertexArrayPtr + 2) = item.vertexBL;\n                            *(vertexArrayPtr + 3) = item.vertexBR;\n                        }\n                    }\n                    finally\n                    {\n                        d3dContext.UnmapSubresource(((IPlatformVertexBuffer)_vertexBuffer).Strategy.ToConcrete<ConcreteVertexBuffer>().DXVertexBuffer, 0);\n                    }\n                }\n\n                // draw batch\n                for (int i = 0; i < numBatchesToProcess; i++, spriteCount++)\n                {\n                    SpriteBatchItem item = _batchItemList[batchIndex++];\n\n                    // if the texture changed, we need to flush and bind the new texture\n                    bool shouldFlush = !ReferenceEquals(item.Texture, tex);\n                    if (shouldFlush)\n                    {\n                        if (spriteCount > 0)\n                            FlushVertexArray(_baseQuad, spriteCount, effect, tex);\n\n                        _baseQuad += spriteCount;\n                        spriteCount = 0;\n                        tex = item.Texture;\n                    }\n\n                    // Release the texture.\n                    item.Texture = null;\n                }\n                // flush the remaining vertexArray data\n                if (spriteCount > 0)\n                    FlushVertexArray(_baseQuad, spriteCount, effect, tex);\n                _baseQuad += spriteCount;\n\n                // Update our batch count to continue the process of culling down\n                // large batches\n                batchCount -= numBatchesToProcess;\n            }\n            // return items to the pool.\n            _batchItemCount = 0;\n        }\n\n        /// <summary>\n        /// Sends the triangle list to the graphics device. Here is where the actual drawing starts.\n        /// </summary>\n        /// <param name=\"spriteCount\">The number of sprites to draw.</param>\n        /// <param name=\"effect\">The custom effect to apply to the geometry.</param>\n        /// <param name=\"texture\">The texture to draw.</param>\n        private void FlushVertexArray(int baseQuad, int spriteCount, Effect effect, Texture texture)\n        {\n            int baseVertex = baseQuad * 4;\n            int minVertexIndex = 0;\n            int numVertices = spriteCount * 4;\n            int startIndex = 0;\n            int primitiveCount = spriteCount * 2;\n\n            GraphicsContextStrategy contextStrategy = ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy;\n\n            if (effect == null) // If no custom effect is defined, then simply render.\n            {\n                contextStrategy.Textures[0] = texture;\n\n                // call GraphicsContextStrategy.DrawIndexedPrimitives() directly, bypassing checks.\n                contextStrategy.DrawIndexedPrimitives(\n                    PrimitiveType.TriangleList,\n                    baseVertex,\n                    minVertexIndex, numVertices,\n                    startIndex, primitiveCount);\n            }\n            else // If the effect is not null, then apply each pass and render the geometry\n            {\n                EffectPassCollection passes = effect.CurrentTechnique.Passes;\n                foreach (EffectPass pass in passes)\n                {\n                    pass.Apply();\n\n                    // We have to set the texture again on each pass,\n                    // because pass.Apply() might have set a texture from the effect.\n                    contextStrategy.Textures[0] = texture;\n\n                    // call GraphicsContextStrategy.DrawIndexedPrimitives() directly, bypassing checks.\n                    contextStrategy.DrawIndexedPrimitives(\n                        PrimitiveType.TriangleList,\n                        baseVertex,\n                        minVertexIndex, numVertices,\n                        startIndex, primitiveCount);\n                }\n            }\n        }\n\n        #region IDisposable Members\n\n        private bool _isDisposed = false;\n        protected override void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    _vertexBuffer.Dispose();\n                    _indexBuffer.Dispose();\n\n                    _vertexBuffer = null;\n                    _indexBuffer = null;\n                }\n                _isDisposed = true;\n            }\n        }\n\n        #endregion IDisposable Members\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/States/ConcreteBlendState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteBlendState : ResourceBlendStateStrategy\n    {\n        private D3D11.BlendState _state;\n\n        internal ConcreteBlendState(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source)\n            : base(contextStrategy, source)\n        {\n            _state = CreateDXState(base.GraphicsDeviceStrategy);\n        }\n\n        internal D3D11.BlendState GetDxState()\n        {\n            return _state;\n        }\n\n        internal D3D11.BlendState CreateDXState(GraphicsDeviceStrategy deviceStrategy)\n        {\n            // Build the description.\n            D3D11.BlendStateDescription blendStateDesc = new D3D11.BlendStateDescription();\n            ConcreteBlendState.GetDXBlendDescription(this.Targets[0], ref blendStateDesc.RenderTarget[0]);\n            ConcreteBlendState.GetDXBlendDescription(this.Targets[1], ref blendStateDesc.RenderTarget[1]);\n            ConcreteBlendState.GetDXBlendDescription(this.Targets[2], ref blendStateDesc.RenderTarget[2]);\n            ConcreteBlendState.GetDXBlendDescription(this.Targets[3], ref blendStateDesc.RenderTarget[3]);\n            blendStateDesc.IndependentBlendEnable = this.IndependentBlendEnable;\n\n            // This is a new DX11 feature we should consider \n            // exposing as part of the extended MonoGame API.\n            blendStateDesc.AlphaToCoverageEnable = false;\n\n            // Create the state.\n            return new D3D11.BlendState(deviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, blendStateDesc);\n        }\n\n        static private void GetDXBlendDescription(TargetBlendState blendStateTarget, ref D3D11.RenderTargetBlendDescription desc)\n        {\n            // We're blending if we're not in the opaque state.\n            desc.IsBlendEnabled = !(blendStateTarget.ColorSourceBlend == Blend.One &&\n                                    blendStateTarget.ColorDestinationBlend == Blend.Zero &&\n                                    blendStateTarget.AlphaSourceBlend == Blend.One &&\n                                    blendStateTarget.AlphaDestinationBlend == Blend.Zero);\n\n            desc.BlendOperation = GetDXBlendOperation(blendStateTarget.ColorBlendFunction);\n            desc.SourceBlend = GetDXBlendOption(blendStateTarget.ColorSourceBlend, false);\n            desc.DestinationBlend = GetDXBlendOption(blendStateTarget.ColorDestinationBlend, false);\n\n            desc.AlphaBlendOperation = GetDXBlendOperation(blendStateTarget.AlphaBlendFunction);\n            desc.SourceAlphaBlend = GetDXBlendOption(blendStateTarget.AlphaSourceBlend, true);\n            desc.DestinationAlphaBlend = GetDXBlendOption(blendStateTarget.AlphaDestinationBlend, true);\n\n            desc.RenderTargetWriteMask = GetDXColorWriteMaskFlags(blendStateTarget.ColorWriteChannels);\n        }\n\n        static private D3D11.BlendOperation GetDXBlendOperation(BlendFunction blend)\n        {\n            switch (blend)\n            {\n                case BlendFunction.Add:\n                    return D3D11.BlendOperation.Add;\n                case BlendFunction.Max:\n                    return D3D11.BlendOperation.Maximum;\n                case BlendFunction.Min:\n                    return D3D11.BlendOperation.Minimum;\n                case BlendFunction.ReverseSubtract:\n                    return D3D11.BlendOperation.ReverseSubtract;\n                case BlendFunction.Subtract:\n                    return D3D11.BlendOperation.Subtract;\n\n                default:\n                    throw new ArgumentException(\"Invalid blend function!\");\n            }\n        }\n\n        static private D3D11.BlendOption GetDXBlendOption(Blend blend, bool alpha)\n        {\n            switch (blend)\n            {\n                case Blend.BlendFactor:\n                    return D3D11.BlendOption.BlendFactor;\n                case Blend.DestinationAlpha:\n                    return D3D11.BlendOption.DestinationAlpha;\n                case Blend.DestinationColor:\n                    return alpha ? D3D11.BlendOption.DestinationAlpha : D3D11.BlendOption.DestinationColor;\n                case Blend.InverseBlendFactor:\n                    return D3D11.BlendOption.InverseBlendFactor;\n                case Blend.InverseDestinationAlpha:\n                    return D3D11.BlendOption.InverseDestinationAlpha;\n                case Blend.InverseDestinationColor:\n                    return alpha ? D3D11.BlendOption.InverseDestinationAlpha : D3D11.BlendOption.InverseDestinationColor;\n                case Blend.InverseSourceAlpha:\n                    return D3D11.BlendOption.InverseSourceAlpha;\n                case Blend.InverseSourceColor:\n                    return alpha ? D3D11.BlendOption.InverseSourceAlpha : D3D11.BlendOption.InverseSourceColor;\n                case Blend.One:\n                    return D3D11.BlendOption.One;\n                case Blend.SourceAlpha:\n                    return D3D11.BlendOption.SourceAlpha;\n                case Blend.SourceAlphaSaturation:\n                    return D3D11.BlendOption.SourceAlphaSaturate;\n                case Blend.SourceColor:\n                    return alpha ? D3D11.BlendOption.SourceAlpha : D3D11.BlendOption.SourceColor;\n                case Blend.Zero:\n                    return D3D11.BlendOption.Zero;\n\n                default:\n                    throw new ArgumentException(\"Invalid blend!\");\n            }\n        }\n\n        static private D3D11.ColorWriteMaskFlags GetDXColorWriteMaskFlags(ColorWriteChannels mask)\n        {\n            return ((mask & ColorWriteChannels.Red)   != 0 ? D3D11.ColorWriteMaskFlags.Red : 0) |\n                   ((mask & ColorWriteChannels.Green) != 0 ? D3D11.ColorWriteMaskFlags.Green : 0) |\n                   ((mask & ColorWriteChannels.Blue)  != 0 ? D3D11.ColorWriteMaskFlags.Blue : 0) |\n                   ((mask & ColorWriteChannels.Alpha) != 0 ? D3D11.ColorWriteMaskFlags.Alpha : 0);\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            DX.Utilities.Dispose(ref _state);\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/States/ConcreteDepthStencilState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteDepthStencilState : ResourceDepthStencilStateStrategy\n    {\n        private D3D11.DepthStencilState _state;\n\n        internal ConcreteDepthStencilState(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source)\n            : base(contextStrategy, source)\n        {\n            _state = CreateDXState(base.GraphicsDeviceStrategy);\n        }\n\n        internal D3D11.DepthStencilState GetDxState()\n        {\n            return _state;\n        }\n\n        internal D3D11.DepthStencilState CreateDXState(GraphicsDeviceStrategy deviceStrategy)\n        {\n            // Build the description.\n            D3D11.DepthStencilStateDescription depthStencilStateDesc = new D3D11.DepthStencilStateDescription();\n\n            depthStencilStateDesc.IsDepthEnabled = DepthBufferEnable;\n            depthStencilStateDesc.DepthComparison = DepthBufferFunction.ToDXComparisonFunction();\n\n            if (DepthBufferWriteEnable)\n                depthStencilStateDesc.DepthWriteMask = D3D11.DepthWriteMask.All;\n            else\n                depthStencilStateDesc.DepthWriteMask = D3D11.DepthWriteMask.Zero;\n\n            depthStencilStateDesc.IsStencilEnabled = StencilEnable;\n            depthStencilStateDesc.StencilReadMask = (byte)StencilMask; // TODO: Should this instead grab the upper 8bits?\n            depthStencilStateDesc.StencilWriteMask = (byte)StencilWriteMask;\n\n            if (TwoSidedStencilMode)\n            {\n                depthStencilStateDesc.BackFace.Comparison = CounterClockwiseStencilFunction.ToDXComparisonFunction();\n                depthStencilStateDesc.BackFace.DepthFailOperation = ToDXStencilOp(CounterClockwiseStencilDepthBufferFail);\n                depthStencilStateDesc.BackFace.FailOperation = ToDXStencilOp(CounterClockwiseStencilFail);\n                depthStencilStateDesc.BackFace.PassOperation = ToDXStencilOp(CounterClockwiseStencilPass);\n            }\n            else\n            {   //use same settings as frontFace \n                depthStencilStateDesc.BackFace.Comparison = StencilFunction.ToDXComparisonFunction();\n                depthStencilStateDesc.BackFace.DepthFailOperation = ToDXStencilOp(StencilDepthBufferFail);\n                depthStencilStateDesc.BackFace.FailOperation = ToDXStencilOp(StencilFail);\n                depthStencilStateDesc.BackFace.PassOperation = ToDXStencilOp(StencilPass);\n            }\n\n            depthStencilStateDesc.FrontFace.Comparison = StencilFunction.ToDXComparisonFunction();\n            depthStencilStateDesc.FrontFace.DepthFailOperation = ToDXStencilOp(StencilDepthBufferFail);\n            depthStencilStateDesc.FrontFace.FailOperation = ToDXStencilOp(StencilFail);\n            depthStencilStateDesc.FrontFace.PassOperation = ToDXStencilOp(StencilPass);\n\n            // Create the state.\n            return new D3D11.DepthStencilState(deviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, depthStencilStateDesc);\n        }\n\n        static private D3D11.StencilOperation ToDXStencilOp(StencilOperation operation)\n        {\n            switch (operation)\n            {\n                case StencilOperation.Decrement:\n                    return D3D11.StencilOperation.Decrement;\n                case StencilOperation.DecrementSaturation:\n                    return D3D11.StencilOperation.DecrementAndClamp;\n                case StencilOperation.Increment:\n                    return D3D11.StencilOperation.Increment;\n                case StencilOperation.IncrementSaturation:\n                    return D3D11.StencilOperation.IncrementAndClamp;\n                case StencilOperation.Invert:\n                    return D3D11.StencilOperation.Invert;\n                case StencilOperation.Keep:\n                    return D3D11.StencilOperation.Keep;\n                case StencilOperation.Replace:\n                    return D3D11.StencilOperation.Replace;\n                case StencilOperation.Zero:\n                    return D3D11.StencilOperation.Zero;\n\n                default:\n                    throw new ArgumentException(\"Invalid stencil operation!\");\n            }\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            DX.Utilities.Dispose(ref _state);\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/States/ConcreteRasterizerState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRasterizerState : ResourceRasterizerStateStrategy\n    {\n        private D3D11.RasterizerState _state;\n\n        internal ConcreteRasterizerState(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source)\n            : base(contextStrategy, source)\n        {\n            // discussion and explanation in https://github.com/MonoGame/MonoGame/issues/4826\n            // TODO: Need fixing. We create the rasterizerStateDesc based on\n            // the DepthFormat of the current rendertarget. When the user set\n            // a new rendertarget the DepthBias will be wrong.\n            DepthFormat activeDepthFormat;\n            if (contextStrategy.IsRenderTargetBound)\n                activeDepthFormat = ((IRenderTarget)contextStrategy.CurrentRenderTargetBindings[0].RenderTarget).DepthStencilFormat;\n            else\n                activeDepthFormat = base.GraphicsDeviceStrategy.PresentationParameters.DepthStencilFormat;\n\n            _state = CreateDXState(base.GraphicsDeviceStrategy, activeDepthFormat);\n        }\n\n        internal D3D11.RasterizerState GetDxState(ConcreteGraphicsContext contextStrategy)\n        {\n            DepthFormat activeDepthFormat;\n            if (contextStrategy.IsRenderTargetBound)\n                activeDepthFormat = ((IRenderTarget)contextStrategy.CurrentRenderTargetBindings[0].RenderTarget).DepthStencilFormat;\n            else\n                activeDepthFormat = base.GraphicsDeviceStrategy.PresentationParameters.DepthStencilFormat;\n\n            return _state;\n        }\n\n        internal D3D11.RasterizerState CreateDXState(GraphicsDeviceStrategy deviceStrategy, DepthFormat activeDepthFormat)\n        {\n            // Build the description.\n            D3D11.RasterizerStateDescription rasterizerStateDesc = new D3D11.RasterizerStateDescription();\n\n            switch (CullMode)\n            {\n                case CullMode.None:\n                    rasterizerStateDesc.CullMode = D3D11.CullMode.None;\n                    break;\n                case CullMode.CullClockwiseFace:\n                    rasterizerStateDesc.CullMode = D3D11.CullMode.Front;\n                    break;\n                case CullMode.CullCounterClockwiseFace:\n                    rasterizerStateDesc.CullMode = D3D11.CullMode.Back;\n                    break;\n\n                default:\n                    throw new InvalidOperationException(\"CullMode\");\n            }\n\n            rasterizerStateDesc.IsScissorEnabled = ScissorTestEnable;\n            rasterizerStateDesc.IsMultisampleEnabled = MultiSampleAntiAlias;\n\n            int depthMul;\n            switch (activeDepthFormat)\n            {\n                case DepthFormat.None:\n                    depthMul = 0;\n                    break;\n                case DepthFormat.Depth16:\n                    depthMul = (1 << 16) - 1;\n                    break;\n                case DepthFormat.Depth24:\n                case DepthFormat.Depth24Stencil8:\n                    depthMul = (1 << 24) - 1;\n                    break;\n\n                default:\n                    throw new ArgumentOutOfRangeException();\n            }\n\n            rasterizerStateDesc.DepthBias = (int)(DepthBias * depthMul);\n            rasterizerStateDesc.SlopeScaledDepthBias = SlopeScaleDepthBias;\n\n            if (FillMode == FillMode.WireFrame)\n                rasterizerStateDesc.FillMode = D3D11.FillMode.Wireframe;\n            else\n                rasterizerStateDesc.FillMode = D3D11.FillMode.Solid;\n\n            rasterizerStateDesc.IsDepthClipEnabled = DepthClipEnable;\n\n            // These are new DX11 features we should consider exposing\n            // as part of the extended MonoGame API.\n            rasterizerStateDesc.IsFrontCounterClockwise = false;\n            rasterizerStateDesc.IsAntialiasedLineEnabled = false;\n\n            // To support feature level 9.1 these must \n            // be set to these exact values.\n            rasterizerStateDesc.DepthBiasClamp = 0.0f;\n\n            // Create the state.\n            return new D3D11.RasterizerState(deviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, rasterizerStateDesc);\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            DX.Utilities.Dispose(ref _state);\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/States/ConcreteSamplerState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteSamplerState : ResourceSamplerStateStrategy\n    {\n        private D3D11.SamplerState _state;\n\n        internal ConcreteSamplerState(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source)\n            : base(contextStrategy, source)\n        {\n            _state = CreateDXState(contextStrategy, base.GraphicsDeviceStrategy);\n        }\n\n        internal D3D11.SamplerState GetDxState()\n        {\n            return _state;\n        }\n\n        internal D3D11.SamplerState CreateDXState(GraphicsContextStrategy contextStrategy, GraphicsDeviceStrategy deviceStrategy)\n        {\n            // Build the description.\n            D3D11.SamplerStateDescription samplerStateDesc = new D3D11.SamplerStateDescription();\n            samplerStateDesc.AddressU = ToDXTextureAddressMode(AddressU);\n            samplerStateDesc.AddressV = ToDXTextureAddressMode(AddressV);\n            samplerStateDesc.AddressW = ToDXTextureAddressMode(AddressW);\n\n#if UAP || WINUI\n            samplerStateDesc.BorderColor = new SharpDX.Mathematics.Interop.RawColor4(\n                BorderColor.R / 255.0f,\n                BorderColor.G / 255.0f,\n                BorderColor.B / 255.0f,\n                BorderColor.A / 255.0f);\n#else\n            samplerStateDesc.BorderColor = BorderColor.ToRawColor4();\n#endif\n\n            samplerStateDesc.Filter = ToDXTextureFilter(Filter, FilterMode);\n            samplerStateDesc.MaximumAnisotropy = Math.Min(MaxAnisotropy, contextStrategy.Capabilities.MaxTextureAnisotropy);\n            samplerStateDesc.MipLodBias = MipMapLevelOfDetailBias;\n            samplerStateDesc.ComparisonFunction = ComparisonFunction.ToDXComparisonFunction();\n\n            // TODO: How do i do this?\n            samplerStateDesc.MinimumLod = 0.0f;\n\n            // To support feature level 9.1 these must \n            // be set to these exact values.\n            samplerStateDesc.MaximumLod = float.MaxValue;\n\n            // Create the state.\n            return new D3D11.SamplerState(deviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, samplerStateDesc);\n        }\n\n        private static D3D11.Filter ToDXTextureFilter(TextureFilter filter, TextureFilterMode mode)\n        {\n            switch (mode)\n            {\n                case TextureFilterMode.Comparison:\n                    switch (filter)\n                    {\n                        case TextureFilter.Anisotropic:\n                            return D3D11.Filter.ComparisonAnisotropic;\n                        case TextureFilter.Linear:\n                            return D3D11.Filter.ComparisonMinMagMipLinear;\n                        case TextureFilter.LinearMipPoint:\n                            return D3D11.Filter.ComparisonMinMagLinearMipPoint;\n                        case TextureFilter.MinLinearMagPointMipLinear:\n                            return D3D11.Filter.ComparisonMinLinearMagPointMipLinear;\n                        case TextureFilter.MinLinearMagPointMipPoint:\n                            return D3D11.Filter.ComparisonMinLinearMagMipPoint;\n                        case TextureFilter.MinPointMagLinearMipLinear:\n                            return D3D11.Filter.ComparisonMinPointMagMipLinear;\n                        case TextureFilter.MinPointMagLinearMipPoint:\n                            return D3D11.Filter.ComparisonMinPointMagLinearMipPoint;\n                        case TextureFilter.Point:\n                            return D3D11.Filter.ComparisonMinMagMipPoint;\n                        case TextureFilter.PointMipLinear:\n                            return D3D11.Filter.ComparisonMinMagPointMipLinear;\n\n                        default:\n                            throw new ArgumentException(\"Invalid texture filter!\");\n                    }\n                case TextureFilterMode.Default:\n                    switch (filter)\n                    {\n                        case TextureFilter.Anisotropic:\n                            return D3D11.Filter.Anisotropic;\n                        case TextureFilter.Linear:\n                            return D3D11.Filter.MinMagMipLinear;\n                        case TextureFilter.LinearMipPoint:\n                            return D3D11.Filter.MinMagLinearMipPoint;\n                        case TextureFilter.MinLinearMagPointMipLinear:\n                            return D3D11.Filter.MinLinearMagPointMipLinear;\n                        case TextureFilter.MinLinearMagPointMipPoint:\n                            return D3D11.Filter.MinLinearMagMipPoint;\n                        case TextureFilter.MinPointMagLinearMipLinear:\n                            return D3D11.Filter.MinPointMagMipLinear;\n                        case TextureFilter.MinPointMagLinearMipPoint:\n                            return D3D11.Filter.MinPointMagLinearMipPoint;\n                        case TextureFilter.Point:\n                            return D3D11.Filter.MinMagMipPoint;\n                        case TextureFilter.PointMipLinear:\n                            return D3D11.Filter.MinMagPointMipLinear;\n\n                        default:\n                            throw new ArgumentException(\"Invalid texture filter!\");\n                    }\n                default:\n                    throw new ArgumentException(\"Invalid texture filter mode!\");\n            }\n        }\n\n        private static D3D11.TextureAddressMode ToDXTextureAddressMode(TextureAddressMode mode)\n        {\n            switch (mode)\n            {\n                case TextureAddressMode.Clamp:\n                    return D3D11.TextureAddressMode.Clamp;\n                case TextureAddressMode.Mirror:\n                    return D3D11.TextureAddressMode.Mirror;\n                case TextureAddressMode.Wrap:\n                    return D3D11.TextureAddressMode.Wrap;\n                case TextureAddressMode.Border:\n                    return D3D11.TextureAddressMode.Border;\n\n                default:\n                    throw new ArgumentException(\"Invalid texture address mode!\");\n            }\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            DX.Utilities.Dispose(ref _state);\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Vertices/ConcreteDynamicIndexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Utilities;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteDynamicIndexBuffer : ConcreteIndexBuffer, IDynamicIndexBufferStrategy\n    {\n        private bool _isContentLost;\n\n        internal ConcreteDynamicIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic:true)\n        {\n            PlatformConstructDynamicIndexBuffer();\n        }\n        \n        private void PlatformConstructDynamicIndexBuffer()\n        {\n            Debug.Assert(_buffer == null);\n\n            int sizeInBytes = this.IndexCount * base.ElementSizeInBytes;\n\n            D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription();\n            bufferDesc.SizeInBytes = sizeInBytes;\n            bufferDesc.Usage = D3D11.ResourceUsage.Dynamic;\n            bufferDesc.BindFlags = D3D11.BindFlags.IndexBuffer;\n            bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Write;\n            bufferDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n            bufferDesc.StructureByteStride = 0;// StructureSizeInBytes\n\n            _buffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, bufferDesc);\n        }\n\n\n        public unsafe override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options)\n        {\n            Debug.Assert(_buffer != null);\n\n            D3D11.MapMode mode;\n            switch (options)\n            {\n                case SetDataOptions.None:\n                    // MapSubresource doesn't work with MapMode.Write on Dynamic buffers.\n                    // And the base SetData<>() using UpdateSubresource(...) doesn't seem to set the data.\n                    // We have to use Discard.\n                    mode = D3D11.MapMode.WriteDiscard;\n                    break;\n                case SetDataOptions.Discard:\n                    mode = D3D11.MapMode.WriteDiscard;\n                    break;\n                case SetDataOptions.NoOverwrite:\n                    mode = D3D11.MapMode.WriteNoOverwrite;\n                    break;\n\n                default:\n                    throw new InvalidOperationException(\"options\");\n            }\n\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                DX.DataBox dataBox = d3dContext.MapSubresource(_buffer, 0, mode, D3D11.MapFlags.None);\n                try\n                {\n                    int TsizeInBytes = sizeof(T);\n                    fixed (T* pData = &data[0])\n                    {\n                        IntPtr dataPtr = (IntPtr)pData;\n                        dataPtr = dataPtr + startIndex * TsizeInBytes;\n\n                        IntPtr dstPtr = dataBox.DataPointer + offsetInBytes;\n                        MemCopyHelper.MemoryCopy(\n                            dataPtr,\n                            dstPtr,\n                            elementCount * TsizeInBytes);\n                    }\n                }\n                finally\n                {\n                    d3dContext.UnmapSubresource(_buffer, 0);\n                }\n            }\n        }\n\n        public override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount)\n        {\n            Debug.Assert(_buffer != null);\n\n            throw new NotImplementedException();\n        }\n\n\n        #region IDynamicIndexBufferStrategy\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n        #endregion IDynamicIndexBufferStrategy\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Vertices/ConcreteDynamicVertexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Utilities;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteDynamicVertexBuffer : ConcreteVertexBuffer, IDynamicVertexBufferStrategy\n    {\n        private bool _isContentLost;\n\n        internal ConcreteDynamicVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic:true)\n        {\n            PlatformConstructDynamicVertexBuffer();\n        }\n\n        private void PlatformConstructDynamicVertexBuffer()\n        {\n            Debug.Assert(_buffer == null);\n\n            D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription();\n            bufferDesc.SizeInBytes = this.VertexDeclaration.VertexStride * this.VertexCount;\n            bufferDesc.Usage = D3D11.ResourceUsage.Dynamic;\n            bufferDesc.BindFlags = D3D11.BindFlags.VertexBuffer;\n            bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Write;\n            bufferDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n            bufferDesc.StructureByteStride = 0;// StructureSizeInBytes\n\n            _buffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, bufferDesc);\n        }\n\n        public unsafe override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes)\n        {\n            Debug.Assert(_buffer != null);\n\n            D3D11.MapMode mode;\n            switch (options)\n            {\n                case SetDataOptions.None:\n                    // MapSubresource doesn't work with MapMode.Write on Dynamic buffers.\n                    // And the base SetData<>() using UpdateSubresource(...) doesn't seem to set the data.\n                    // We have to use Discard.\n                    mode = D3D11.MapMode.WriteDiscard;\n                    break;\n                case SetDataOptions.Discard:\n                    mode = D3D11.MapMode.WriteDiscard;\n                    break;\n                case SetDataOptions.NoOverwrite:\n                    mode = D3D11.MapMode.WriteNoOverwrite;\n                    break;\n\n                default:\n                    throw new InvalidOperationException(\"options\");\n            }\n\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                DX.DataBox dataBox = d3dContext.MapSubresource(_buffer, 0, mode, D3D11.MapFlags.None);\n                try\n                {\n                    fixed (T* pData = &data[0])\n                    {\n                        IntPtr dataPtr = (IntPtr)pData;\n                        dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                        IntPtr dstPtr = dataBox.DataPointer + offsetInBytes;\n                        if (vertexStride == elementSizeInBytes)\n                        {\n                            MemCopyHelper.MemoryCopy(\n                                dataPtr,\n                                dstPtr,\n                                elementCount * elementSizeInBytes);\n                        }\n                        else\n                        {\n                            for (int i = 0; i < elementCount; i++)\n                                MemCopyHelper.MemoryCopy(\n                                    dataPtr + i * elementSizeInBytes,\n                                    dstPtr + i * vertexStride,\n                                    elementSizeInBytes);\n                        }\n                    }\n                }\n                finally\n                {\n                    d3dContext.UnmapSubresource(_buffer, 0);\n                }\n            }\n        }\n\n        public override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride)\n        {\n            Debug.Assert(_buffer != null);\n\n            throw new NotImplementedException();\n        }\n\n\n        #region IDynamicVertexBufferStrategy\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n        #endregion IDynamicVertexBufferStrategy\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Vertices/ConcreteIndexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Utilities;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteIndexBuffer : IndexBufferStrategy\n    {\n        private readonly DXGI.Format _drawElementsType;\n        internal D3D11.Buffer _buffer;\n\n        internal DXGI.Format DrawElementsType { get { return _drawElementsType; } }\n        internal D3D11.Buffer DXIndexBuffer\n        {\n            get\n            {\n                Debug.Assert(_buffer != null);\n                return _buffer;\n            }\n        }\n\n        internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n            Debug.Assert(isDynamic == true);\n\n            switch (indexElementSize)\n            {\n                case IndexElementSize.SixteenBits: _drawElementsType = DXGI.Format.R16_UInt; break;\n                case IndexElementSize.ThirtyTwoBits: _drawElementsType = DXGI.Format.R32_UInt; break;\n                default: throw new InvalidOperationException();\n            }\n        }\n\n        internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n            switch (indexElementSize)\n            {\n                case IndexElementSize.SixteenBits: _drawElementsType = DXGI.Format.R16_UInt; break;\n                case IndexElementSize.ThirtyTwoBits: _drawElementsType = DXGI.Format.R32_UInt; break;\n                default: throw new InvalidOperationException();\n            }\n\n            PlatformConstructIndexBuffer();\n        }\n\n        internal void PlatformConstructIndexBuffer()\n        {\n            Debug.Assert(_buffer == null);\n\n            int sizeInBytes = this.IndexCount * base.ElementSizeInBytes;\n\n            D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription();\n            bufferDesc.SizeInBytes = sizeInBytes;\n            bufferDesc.Usage = D3D11.ResourceUsage.Default;\n            bufferDesc.BindFlags = D3D11.BindFlags.IndexBuffer;\n            bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            bufferDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n            bufferDesc.StructureByteStride = 0;// StructureSizeInBytes\n\n            _buffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, bufferDesc);\n        }\n\n\n        public unsafe override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options)\n        {\n            Debug.Assert(_buffer != null);\n\n            int elementSizeInBytes = sizeof(T);\n            fixed (T* pData = &data[0])\n            {\n                IntPtr dataPtr = (IntPtr)pData;\n                dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                DX.DataBox dataBox = new DX.DataBox(dataPtr, elementCount * elementSizeInBytes, 0);\n\n                D3D11.ResourceRegion region = new D3D11.ResourceRegion();\n                region.Top = 0;\n                region.Front = 0;\n                region.Back = 1;\n                region.Bottom = 1;\n                region.Left = offsetInBytes;\n                region.Right = offsetInBytes + (elementCount * elementSizeInBytes);\n\n                lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    d3dContext.UpdateSubresource(dataBox, _buffer, 0, region);\n                }\n            }\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount)\n        {\n            Debug.Assert(_buffer != null);\n\n            // Copy the texture to a staging resource\n            D3D11.BufferDescription stagingDesc = _buffer.Description;\n            stagingDesc.BindFlags = D3D11.BindFlags.None;\n            stagingDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read | D3D11.CpuAccessFlags.Write;\n            stagingDesc.Usage = D3D11.ResourceUsage.Staging;\n            stagingDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n            using (D3D11.Buffer stagingBuffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, stagingDesc))\n            {\n                lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                {\n                    D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                    d3dContext.CopyResource(_buffer, stagingBuffer);\n                }\n\n                int TsizeInBytes = sizeof(T);\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * TsizeInBytes;\n\n                    lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                    {\n                        D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                        DX.DataBox dataBox = d3dContext.MapSubresource(stagingBuffer, 0, D3D11.MapMode.Read, D3D11.MapFlags.None);\n                        try\n                        {\n                            IntPtr srcPtr = dataBox.DataPointer + offsetInBytes;\n                            MemCopyHelper.MemoryCopy(\n                                srcPtr,\n                                dataPtr,\n                                elementCount * TsizeInBytes);\n                        }\n                        finally\n                        {\n                            d3dContext.UnmapSubresource(stagingBuffer, 0);\n                        }\n                    }\n                }\n            }\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            DX.Utilities.Dispose(ref _buffer);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                DX.Utilities.Dispose(ref _buffer);\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Vertices/ConcreteVertexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Utilities;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteVertexBuffer : VertexBufferStrategy\n    {\n        internal D3D11.Buffer _buffer;\n\n        internal D3D11.Buffer DXVertexBuffer\n        {\n            get\n            {\n                Debug.Assert(_buffer != null);\n                return _buffer;\n            }\n        }\n\n        internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n            Debug.Assert(isDynamic == true);\n        }\n\n        internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n            PlatformConstructVertexBuffer();\n        }\n\n\n        internal void PlatformConstructVertexBuffer()\n        {\n            Debug.Assert(_buffer == null);\n\n            D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription();\n            bufferDesc.SizeInBytes = this.VertexDeclaration.VertexStride * this.VertexCount;\n            bufferDesc.Usage = D3D11.ResourceUsage.Default;\n            bufferDesc.BindFlags = D3D11.BindFlags.VertexBuffer;\n            bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None;\n            bufferDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n            bufferDesc.StructureByteStride = 0;// StructureSizeInBytes\n\n            _buffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, bufferDesc);\n        }\n\n        internal D3D11.Buffer CreateStagingBuffer()\n        {\n            D3D11.BufferDescription stagingDesc = _buffer.Description;\n            stagingDesc.BindFlags = D3D11.BindFlags.None;\n            stagingDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read | D3D11.CpuAccessFlags.Write;\n            stagingDesc.Usage = D3D11.ResourceUsage.Staging;\n            stagingDesc.OptionFlags = D3D11.ResourceOptionFlags.None;\n\n            return new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, stagingDesc);\n        }\n\n        public unsafe override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes)\n        {\n            Debug.Assert(_buffer != null);\n\n            fixed (T* pData = &data[0])\n            {\n                IntPtr dataPtr = (IntPtr)pData;\n                dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                if (vertexStride == elementSizeInBytes)\n                {\n                    DX.DataBox dataBox = new DX.DataBox(dataPtr, elementCount * elementSizeInBytes, 0);\n\n                    D3D11.ResourceRegion region = new D3D11.ResourceRegion();\n                    region.Top = 0;\n                    region.Front = 0;\n                    region.Back = 1;\n                    region.Bottom = 1;\n                    region.Left = offsetInBytes;\n                    region.Right = offsetInBytes + (elementCount * elementSizeInBytes);\n\n                    lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                    {\n                        D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                        d3dContext.UpdateSubresource(dataBox, _buffer, 0, region);\n                    }\n                }\n                else\n                {\n                    using (D3D11.Buffer stagingBuffer = CreateStagingBuffer())\n                        lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                        {\n                            D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                            d3dContext.CopyResource(_buffer, stagingBuffer);\n\n                            DX.DataBox dataBox = d3dContext.MapSubresource(stagingBuffer, 0, D3D11.MapMode.Read, D3D11.MapFlags.None);\n                            try\n                            {\n                                IntPtr dstPtr = dataBox.DataPointer + offsetInBytes;\n                                for (int i = 0; i < elementCount; i++)\n                                    MemCopyHelper.MemoryCopy(\n                                        dataPtr + i * elementSizeInBytes,\n                                        dstPtr  + i * vertexStride,\n                                        elementSizeInBytes);\n                            }\n                            finally\n                            {\n                                d3dContext.UnmapSubresource(stagingBuffer, 0);\n                            }\n\n                            // Copy back from staging resource to real buffer.\n                            d3dContext.CopyResource(stagingBuffer, _buffer);\n                        }\n                }\n            }\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride)\n        {\n            Debug.Assert(_buffer != null);\n\n            int TsizeInBytes = sizeof(T);\n\n            fixed (T* pData = &data[0])\n            {\n                IntPtr dataPtr = (IntPtr)pData;\n                dataPtr = dataPtr + startIndex * TsizeInBytes;\n\n                using (D3D11.Buffer stagingBuffer = CreateStagingBuffer())\n                    lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n                    {\n                        D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().D3dContext;\n\n                        d3dContext.CopyResource(_buffer, stagingBuffer);\n\n                        DX.DataBox dataBox = d3dContext.MapSubresource(stagingBuffer, 0, D3D11.MapMode.Read, D3D11.MapFlags.None);\n                        try\n                        {\n                            IntPtr srcPtr = dataBox.DataPointer + offsetInBytes;\n                            if (vertexStride == TsizeInBytes)\n                            {\n                                MemCopyHelper.MemoryCopy(\n                                    srcPtr,\n                                    dataPtr,\n                                    vertexStride * elementCount);\n                            }\n                            else\n                            {\n                                for (int i = 0; i < elementCount; i++)\n                                    MemCopyHelper.MemoryCopy(\n                                        srcPtr  + i * vertexStride,\n                                        dataPtr + i * TsizeInBytes,\n                                        TsizeInBytes);\n                            }\n                        }\n                        finally\n                        {\n                            d3dContext.UnmapSubresource(stagingBuffer, 0);\n                        }\n                    }\n            }\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            DX.Utilities.Dispose(ref _buffer);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                DX.Utilities.Dispose(ref _buffer);\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Vertices/InputLayoutCache.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing Microsoft.Xna.Platform.Graphics;\nusing DX = SharpDX;\nusing D3D11 = SharpDX.Direct3D11;\nusing DXGI = SharpDX.DXGI;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Caches DirectX input layouts for the input assembler stage.\n    /// </summary>\n    internal class InputLayoutCache : IDisposable\n    {\n#if DEBUG\n        // Flag to print warning only once per shader.\n        private bool _printWarning = true;\n#endif\n        private readonly GraphicsDeviceStrategy _graphicsDeviceStrategy;\n        private readonly byte[] _shaderByteCode;\n        private readonly Dictionary<VertexInputLayoutKey, D3D11.InputLayout> _cache;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InputLayoutCache\"/> class.\n        /// </summary>\n        /// <param name=\"graphicsDeviceStrategy\">The graphics device strategy.</param>\n        /// <param name=\"shaderByteCode\">The byte code of the vertex shader.</param>\n        public InputLayoutCache(GraphicsDeviceStrategy graphicsDeviceStrategy, byte[] shaderByteCode)\n        {\n            Debug.Assert(graphicsDeviceStrategy != null);\n            Debug.Assert(shaderByteCode != null);\n\n            _graphicsDeviceStrategy = graphicsDeviceStrategy;\n            _shaderByteCode = shaderByteCode;\n            _cache = new Dictionary<VertexInputLayoutKey, D3D11.InputLayout>();\n        }\n\n        /// <summary>\n        /// Releases all resources used by an instance of the <see cref=\"InputLayoutCache\"/> class.\n        /// </summary>\n        /// <remarks>\n        /// This method calls the virtual <see cref=\"Dispose(bool)\"/> method, passing in\n        /// <see langword=\"true\"/>, and then suppresses finalization of the instance.\n        /// </remarks>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases the unmanaged resources used by an instance of the\n        /// <see cref=\"InputLayoutCache\"/> class and optionally releases the managed resources.\n        /// </summary>\n        /// <param name=\"disposing\">\n        /// <see langword=\"true\"/> to release both managed and unmanaged resources;\n        /// <see langword=\"false\"/> to release only unmanaged resources.\n        /// </param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                // Dispose managed resources.\n                foreach (var entry in _cache)\n                    entry.Value.Dispose();\n\n                _cache.Clear();\n            }\n        }\n\n        /// <summary>\n        /// Gets or create the DirectX input layout for the specified vertex buffers.\n        /// </summary>\n        /// <param name=\"vertexBuffers\">The vertex buffers.</param>\n        /// <returns>The DirectX input layout.</returns>\n        public D3D11.InputLayout GetOrCreate(VertexInputLayoutKey vertexInputLayoutKey, VertexBufferCollection vertexBuffers)\n        {\n            D3D11.InputLayout inputLayout;\n            if (_cache.TryGetValue(vertexInputLayoutKey, out inputLayout))\n                return inputLayout;\n\n            ImmutableVertexInputLayoutKey immutableVertexInputLayout = vertexInputLayoutKey.CreateImmutable();\n\n            // Get inputElements\n            D3D11.InputElement[] inputElements;\n            {\n                List<D3D11.InputElement> list = new List<D3D11.InputElement>();\n                for (int i = 0; i < vertexBuffers.Count; i++)\n                {\n                    VertexBufferBinding vertexBufferBinding = vertexBuffers.Get(i);\n\n                    VertexElement[] vertexElements = ((IPlatformVertexDeclaration)vertexBufferBinding.VertexBuffer.VertexDeclaration).InternalVertexElements;\n\n                    for (int v = 0; v < vertexElements.Length; v++)\n                    {\n                        D3D11.InputElement inputElement = new D3D11.InputElement();\n                        inputElement.SemanticName = vertexElements[v].VertexElementUsage.ToDXSemanticName();\n                        inputElement.SemanticIndex = vertexElements[v].UsageIndex;\n                        inputElement.Format = vertexElements[v].VertexElementFormat.ToDXFormat();\n                        inputElement.Slot = i;\n                        inputElement.AlignedByteOffset = vertexElements[v].Offset;\n                        // Note that instancing is only supported in feature level 9.3 and above.\n                        inputElement.Classification = (vertexBufferBinding.InstanceFrequency == 0)\n                                                    ? D3D11.InputClassification.PerVertexData\n                                                    : D3D11.InputClassification.PerInstanceData;\n                        inputElement.InstanceDataStepRate = vertexInputLayoutKey.InstanceFrequencies[i];\n\n                        list.Add(inputElement);\n                    }\n                }\n                inputElements = list.ToArray();\n\n                // Fix semantics indices. (If there are more vertex declarations with, for example, \n                // POSITION0, the indices are changed to POSITION1/2/3/...)\n                for (int i = 1; i < inputElements.Length; i++)\n                {\n                    string semanticName = inputElements[i].SemanticName;\n                    int semanticIndex = inputElements[i].SemanticIndex;\n                    for (int j = 0; j < i; j++)\n                    {\n                        if (inputElements[j].SemanticName == semanticName && inputElements[j].SemanticIndex == semanticIndex)\n                        {\n                            // Semantic index already used.\n                            semanticIndex++;\n                        }\n                    }\n\n                    inputElements[i].SemanticIndex = semanticIndex;\n                }\n            }\n\n            try\n            {\n                inputLayout = new D3D11.InputLayout(_graphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, _shaderByteCode, inputElements);\n            }\n            catch (DX.SharpDXException ex)\n            {\n                if (ex.Descriptor != DX.Result.InvalidArg)\n                    throw;\n\n                // If InputLayout ctor fails with InvalidArg then it's most likely because the \n                // vertex declaration doesn't match the vertex shader. \n                // Shader probably used the semantic \"SV_Position\" in the vertex shader input.\n                // Background information:\n                // \"SV_Position\" is a \"system-value semantic\" which is interpreted by the\n                // rasterizer stage. This means it needs to be used in the vertex shader output\n                // or the pixel shader input. (See\n                // https://msdn.microsoft.com/en-us/library/windows/desktop/bb509647.aspx)\n                //\n                // However, some effects (notably the original XNA stock effects) use\n                // \"SV_Position\" for the vertex shader input. This is technically allowed, but\n                // rather uncommon and causes problems:\n                // - XNA/MonoGame only has VertexElementUsage.Position, so there is no way to\n                //   distinguish between \"POSITION\" and \"SV_Position\".\n                // - \"SV_Position\" cannot be used with any index other than 0, i.e. the DirectX\n                //   FX compiler does not accept \"SV_Position1\", \"SV_Position2\", ...\n                //   This is a problem when using multiple vertex streams, e.g. for blend shape\n                //   animations. It makes it impossible to correctly match the vertex\n                //   declaration with the vertex shader signature.\n                //\n                // Conclusion:\n                // - MonoGame needs to translate VertexElementUsage.Position to \"POSITION\".\n                // - MonoGame effects should always use \"POSITION\" for vertex shader inputs.\n\n                // Here is a workaround (\"hack\") for old vertex shaders which haven't been\n                // updated: Rename \"POSITION0\" to \"SV_Position\" and try again.\n                bool retry = false;\n                for (int i = 0; i < inputElements.Length; i++)\n                {\n                    if (inputElements[i].SemanticIndex == 0 && inputElements[i].SemanticName.Equals(\"POSITION\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        inputElements[i].SemanticName = \"SV_Position\";\n                        retry = true;\n                        break;\n                    }\n                }\n\n                if (!retry)\n                    throw new InvalidOperationException(GetInvalidArgMessage(inputElements), ex);\n\n                try\n                {\n                    inputLayout = new D3D11.InputLayout(_graphicsDeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice, _shaderByteCode, inputElements);\n\n                    // Workaround succeeded? This means that there is a vertex shader that needs\n                    // to be updated.\n#if DEBUG\n                    if (_printWarning)\n                    {\n                        Debug.WriteLine(\n                            \"Warning: Vertex shader uses semantic 'SV_Position' for input register. \" +\n                            \"Please update the shader and use the semantic 'POSITION0' instead. The \" +\n                            \"semantic 'SV_Position' should only be used for the vertex shader output or \" +\n                            \"pixel shader input!\");\n                        _printWarning = false;\n                    }\n#endif\n                }\n                catch (DX.SharpDXException)\n                {\n                    // Workaround failed.\n                    throw new InvalidOperationException(GetInvalidArgMessage(inputElements), ex);\n                }\n            }\n\n            _cache.Add(immutableVertexInputLayout, inputLayout);\n\n            return inputLayout;\n        }\n\n        /// <summary>\n        /// Gets a more helpful message for the SharpDX invalid arg error.\n        /// </summary>\n        /// <param name=\"inputElements\">The input elements.</param>\n        /// <returns>The exception message.</returns>\n        private static string GetInvalidArgMessage(D3D11.InputElement[] inputElements)\n        {\n            string elements = string.Join(\", \", inputElements.Select(x => x.SemanticName + x.SemanticIndex));\n            return \"An error occurred while preparing to draw. \"\n                   + \"This is probably because the current vertex declaration does not include all the elements \"\n                   + \"required by the current vertex shader. The current vertex declaration includes these elements: \"\n                   + elements + \".\";\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.DX11/Vertices/VertexInputLayoutKey.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class VertexInputLayoutKey : IEquatable<VertexInputLayoutKey>\n    {\n        public int Count { get; protected set; }\n        public VertexDeclaration[] VertexDeclarations { get; protected set; }\n        public int[] InstanceFrequencies { get; protected set; }\n\n        internal VertexInputLayoutKey()\n        {\n            Count = 0;\n            VertexDeclarations = null;\n            InstanceFrequencies = null;\n        }\n\n\n        internal void Set(VertexDeclaration[] vertexDeclarations, int[] instanceFrequencies, int count)\n        {\n            this.VertexDeclarations = vertexDeclarations;\n            this.InstanceFrequencies = instanceFrequencies;\n            this.Count = count;\n        }\n\n        public override bool Equals(object obj)\n        {\n            return Equals(obj as VertexInputLayoutKey);\n        }\n\n        public bool Equals(VertexInputLayoutKey other)\n        {\n            if (ReferenceEquals(null, other))\n                return false;\n            if (ReferenceEquals(this, other))\n                return true;\n\n            if (Count != other.Count)\n                return false;\n\n            for (int i = 0; i < Count; i++)\n            {\n                Debug.Assert(VertexDeclarations[i] != null);\n                if (!VertexDeclarations[i].Equals(other.VertexDeclarations[i]))\n                    return false;\n            }\n\n            for (int i = 0; i < Count; i++)\n            {\n                if (!InstanceFrequencies[i].Equals(other.InstanceFrequencies[i]))\n                    return false;\n            }\n\n            return true;\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int hashCode = 0;\n                if (Count > 0)\n                {\n                    hashCode = VertexDeclarations[0].GetHashCode();\n                    hashCode = (hashCode * 397) ^ InstanceFrequencies[0];\n                    for (int i = 1; i < Count; i++)\n                    {\n                        hashCode = (hashCode * 397) ^ VertexDeclarations[i].GetHashCode();\n                        hashCode = (hashCode * 397) ^ InstanceFrequencies[i];\n                    }\n                }\n                return hashCode;\n            }\n        }\n\n        /// <summary>\n        /// Create an 'ImmutableVertexInputLayout' that can be used as a key in the 'InputLayoutCache'.\n        /// </summary>\n        /// <returns></returns>\n        internal ImmutableVertexInputLayoutKey CreateImmutable()\n        {\n            VertexDeclaration[] vertexDeclarations = new VertexDeclaration[this.Count];\n            int[] instanceFrequencies = new int[this.Count];\n\n            Array.Copy(this.VertexDeclarations, vertexDeclarations, vertexDeclarations.Length);\n            Array.Copy(this.InstanceFrequencies, instanceFrequencies, instanceFrequencies.Length);\n\n            return new ImmutableVertexInputLayoutKey(vertexDeclarations, instanceFrequencies, this.Count);\n        }\n\n        public static bool operator ==(VertexInputLayoutKey left, VertexInputLayoutKey right)\n        {\n            return Equals(left, right);\n        }\n\n        public static bool operator !=(VertexInputLayoutKey left, VertexInputLayoutKey right)\n        {\n            return !Equals(left, right);\n        }\n    }\n\n\n    internal sealed class ImmutableVertexInputLayoutKey : VertexInputLayoutKey\n    {\n        private readonly int _hashCode;\n\n        internal ImmutableVertexInputLayoutKey(VertexDeclaration[] vertexDeclarations, int[] instanceFrequencies, int count)\n        {\n            Debug.Assert(vertexDeclarations != null);\n            Debug.Assert(instanceFrequencies != null);\n            Debug.Assert(count >= 0);\n            Debug.Assert(vertexDeclarations.Length == count);\n            Debug.Assert(vertexDeclarations.Length == instanceFrequencies.Length);\n\n            Count = count;\n            VertexDeclarations = vertexDeclarations;\n            InstanceFrequencies = instanceFrequencies;\n\n            // Pre-calculate hash code for fast lookup in dictionary.\n            _hashCode = base.GetHashCode();\n        }\n\n        public override int GetHashCode()\n        {\n            return _hashCode;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteGraphicsCapabilities.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing GetParamName = Microsoft.Xna.Platform.Graphics.OpenGL.GetPName;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsCapabilities : GraphicsCapabilities\n    {\n        /// <summary>\n        /// True, if GL_ARB_framebuffer_object is supported; false otherwise.\n        /// </summary>\n        internal bool SupportsFramebufferObjectARB { get; private set; }\n\n        /// <summary>\n        /// True, if GL_EXT_framebuffer_object is supported; false otherwise.\n        /// </summary>\n        internal bool SupportsFramebufferObjectEXT { get; private set; }\n\n        /// <summary>\n        /// True, if GL_IMG_multisampled_render_to_texture is supported; false otherwise.\n        /// </summary>\n        internal bool SupportsFramebufferObjectIMG { get; private set; }\n\n        internal bool SupportsBaseVertex { get; private set; }\n        internal bool SupportsDrawRangeElements { get; private set; }\n        internal bool SupportsMapBufferRange { get; private set; }\n\n        private int _maxDrawBuffers;\n\n        internal int MaxDrawBuffers { get { return _maxDrawBuffers; } }\n\n\n        internal void PlatformInitialize(ConcreteGraphicsContextGL cgraphicsContext, GraphicsDeviceStrategy deviceStrategy, GLVersion version)\n        {\n            var GL = cgraphicsContext.GL;\n\n            GraphicsProfile profile = deviceStrategy.GraphicsProfile;\n\n            GL.GetInteger(GetParamName.MaxTextureSize, out _maxTextureSize);\n            GL.CheckGLError();\n\n            SupportsTextureFilterAnisotropic = GL.Extensions.Contains(\"GL_EXT_texture_filter_anisotropic\");\n\n#if GLES\n\t\t\tSupportsDepth24 = GL.Extensions.Contains(\"GL_OES_depth24\");\n\t\t\tSupportsPackedDepthStencil = GL.Extensions.Contains(\"GL_OES_packed_depth_stencil\");\n\t\t\tSupportsDepthNonLinear = GL.Extensions.Contains(\"GL_NV_depth_nonlinear\");\n            SupportsTextureMaxLevel = GL.Extensions.Contains(\"GL_APPLE_texture_max_level\");\n#elif DESKTOPGL\n            SupportsDepth24 = true;\n            SupportsPackedDepthStencil = true;\n            SupportsDepthNonLinear = false;\n            SupportsTextureMaxLevel = true;\n#endif\n\n            // 16bit textures\n            SupportsBgra5551 = false;\n            SupportsBgra4444 = false;\n            SupportsAbgr5551 = true;\n            SupportsAbgr4444 = true;\n\n            // Texture compression\n            SupportsS3tc = GL.Extensions.Contains(\"GL_EXT_texture_compression_s3tc\") ||\n                           GL.Extensions.Contains(\"GL_OES_texture_compression_S3TC\") ||\n                           GL.Extensions.Contains(\"GL_EXT_texture_compression_dxt3\") ||\n                           GL.Extensions.Contains(\"GL_EXT_texture_compression_dxt5\");\n            SupportsDxt1 = SupportsS3tc || GL.Extensions.Contains(\"GL_EXT_texture_compression_dxt1\");\n            SupportsPvrtc = GL.Extensions.Contains(\"GL_IMG_texture_compression_pvrtc\");\n            SupportsEtc1 = GL.Extensions.Contains(\"GL_OES_compressed_ETC1_RGB8_texture\");\n            SupportsAtitc = GL.Extensions.Contains(\"GL_ATI_texture_compression_atitc\") ||\n                            GL.Extensions.Contains(\"GL_AMD_compressed_ATC_texture\");\n\n            if (GL.BoundApi == OGL.RenderApi.ES)\n            {\n                SupportsEtc2 = version >= new GLVersion(3, 0);\n            }\n\n\n            // Framebuffer objects\n#if GLES\n            SupportsFramebufferObjectARB = GL.BoundApi == OGL.RenderApi.ES && (version >= new GLVersion(2, 0) || GL.Extensions.Contains(\"GL_ARB_framebuffer_object\")); // always supported on GLES 2.0+\n            SupportsFramebufferObjectEXT = GL.Extensions.Contains(\"GL_EXT_framebuffer_object\");;\n            SupportsFramebufferObjectIMG = GL.Extensions.Contains(\"GL_IMG_multisampled_render_to_texture\") |\n                                                 GL.Extensions.Contains(\"GL_APPLE_framebuffer_multisample\") |\n                                                 GL.Extensions.Contains(\"GL_EXT_multisampled_render_to_texture\") |\n                                                 GL.Extensions.Contains(\"GL_NV_framebuffer_multisample\");\n#elif DESKTOPGL\n            // if we're on GL 3.0+, frame buffer extensions are guaranteed to be present, but extensions may be missing\n            // it is then safe to assume that GL_ARB_framebuffer_object is present so that the standard function are loaded\n            SupportsFramebufferObjectARB = version >= new GLVersion(3, 0) || GL.Extensions.Contains(\"GL_ARB_framebuffer_object\");\n            SupportsFramebufferObjectEXT = GL.Extensions.Contains(\"GL_EXT_framebuffer_object\");\n#endif\n            // Anisotropic filtering\n            int anisotropy = 0;\n            if (SupportsTextureFilterAnisotropic)\n            {\n                GL.GetInteger(GetParamName.MaxTextureMaxAnisotropyExt, out anisotropy);\n                GL.CheckGLError();\n            }\n            MaxTextureAnisotropy = anisotropy;\n\n            // sRGB\n#if GLES\n            SupportsSRgb              = GL.Extensions.Contains(\"GL_EXT_sRGB\");\n            SupportsFloatTextures     = GL.BoundApi == OGL.RenderApi.ES && (version >= new GLVersion(3,0) || GL.Extensions.Contains(\"GL_EXT_color_buffer_float\"));\n            SupportsHalfFloatTextures = GL.BoundApi == OGL.RenderApi.ES && (version >= new GLVersion(3,0) || GL.Extensions.Contains(\"GL_EXT_color_buffer_half_float\"));\n            SupportsNormalized        = GL.BoundApi == OGL.RenderApi.ES && (version >= new GLVersion(3,0) && GL.Extensions.Contains(\"GL_EXT_texture_norm16\"));\n#elif DESKTOPGL\n            SupportsSRgb = GL.Extensions.Contains(\"GL_EXT_texture_sRGB\") && GL.Extensions.Contains(\"GL_EXT_framebuffer_sRGB\");\n            SupportsFloatTextures = GL.BoundApi == OGL.RenderApi.GL && (version >= new GLVersion(3,0) || GL.Extensions.Contains(\"GL_ARB_texture_float\"));\n            SupportsHalfFloatTextures = GL.BoundApi == OGL.RenderApi.GL && (version >= new GLVersion(3,0) || GL.Extensions.Contains(\"GL_ARB_half_float_pixel\"));;\n            SupportsNormalized = GL.BoundApi == OGL.RenderApi.GL && (version >= new GLVersion(3,0) || GL.Extensions.Contains(\"GL_EXT_texture_norm16\"));;\n#endif\n\n            // TODO: Implement OpenGL support for texture arrays\n            // once we can author shaders that use texture arrays.\n            SupportsTextureArrays = false;\n\n            SupportsDepthClamp = GL.Extensions.Contains(\"GL_ARB_depth_clamp\");\n\n            GL.GetInteger(GetParamName.MaxTextureImageUnits, out _maxTextureSlots);\n            GL.CheckGLError();\n            GL.GetInteger(GetParamName.MaxVertexTextureImageUnits, out _maxVertexTextureSlots);\n            GL.CheckGLError();\n            // fix for bad GL drivers\n            int maxCombinedTextureImageUnits;\n            GL.GetInteger(GetParamName.MaxCombinedTextureImageUnits, out maxCombinedTextureImageUnits);\n            _maxTextureSlots = Math.Min(_maxTextureSlots, maxCombinedTextureImageUnits);\n            _maxVertexTextureSlots = Math.Min(_maxVertexTextureSlots, maxCombinedTextureImageUnits);\n            // limit texture slots to Reach profile limit until we implement profile detection.\n            _maxTextureSlots = Math.Min(_maxTextureSlots, 16);\n            _maxVertexTextureSlots = Math.Min(_maxTextureSlots, 0); // disable vertex textures until we implement it in WebGL.\n\n            int maxVertexAttribs;\n            GL.GetInteger(GetParamName.MaxVertexAttribs, out maxVertexAttribs);\n            GL.CheckGLError();\n            _maxVertexBufferSlots = (profile >= GraphicsProfile.FL10_1) ? 32 : 16;\n            _maxVertexBufferSlots = Math.Min(_maxVertexBufferSlots, maxVertexAttribs);\n\n            SupportsInstancing = GL.VertexAttribDivisor != null;\n\n            SupportsBaseIndexInstancing = GL.DrawElementsInstancedBaseInstance != null;\n\n#if GLES\n            SupportsSeparateBlendStates = false;\n#elif DESKTOPGL\n            SupportsSeparateBlendStates = version >= new GLVersion(4,0) || GL.Extensions.Contains(\"GL_ARB_draw_buffers_blend\");\n#endif\n\n            SupportsBaseVertex = version >= new GLVersion(3,2) || GL.Extensions.Contains(\"GL_ARB_draw_elements_base_vertex\");\n            SupportsDrawRangeElements = (GL.BoundApi == OGL.RenderApi.GL && version >= new GLVersion(2, 0))\n                                     || (GL.BoundApi == OGL.RenderApi.ES && version >= new GLVersion(3, 0));\n\n            SupportsMapBufferRange = (GL.BoundApi == OGL.RenderApi.GL && version >= new GLVersion(2, 0))\n                                  || (GL.BoundApi == OGL.RenderApi.ES && version >= new GLVersion(3, 0));\n\n            GL.GetInteger(GetParamName.MaxDrawBuffers, out _maxDrawBuffers);\n            GL.CheckGLError();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteGraphicsContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n#if ANDROID //FromStream\n//using Android.Graphics;\n#endif\n\n#if IOS || TVOS //FromStream\nusing UIKit;\nusing CoreGraphics;\nusing Foundation;\n#endif\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal abstract class ConcreteGraphicsContextGL : GraphicsContextStrategy\n    {\n        private DrawBufferMode[] _drawBuffers;\n\n        // Keeps track of last applied state to avoid redundant OpenGL calls\n        internal BlendState _lastBlendState = new BlendState();\n        internal bool _lastBlendEnable = false;\n        internal DepthStencilState _lastDepthStencilState = new DepthStencilState();\n        internal RasterizerState _lastRasterizerState = new RasterizerState();\n\n        internal ShaderProgram _shaderProgram = null;\n\n        private Vector4 _posFixup;\n\n        internal BufferBindingInfo[] _bufferBindingInfos;\n        private int _activeBufferBindingInfosCount;\n        internal bool[] _newEnabledVertexAttributes;\n        private readonly HashSet<int> _enabledVertexAttributesSet = new HashSet<int>();\n        private int _lastVertexAttribs; // 0 = dirty, 1 = last set by PlatformApplyVertexBuffers, 2 = last set by PlatformApplyUserVertexData\n\n        // Keeps track of last applied state to avoid redundant OpenGL calls\n        private Vector4 _lastClearColor = Vector4.Zero;\n        private float _lastClearDepth = 1.0f;\n        private int _lastClearStencil = 0;\n\n        private DepthStencilState _clearDepthStencilState = new DepthStencilState { StencilEnable = true };\n\n        // FBO cache, we create 1 FBO per RenderTargetBinding combination\n        internal Dictionary<RenderTargetBinding[], int> _glFramebuffers = new Dictionary<RenderTargetBinding[], int>(new RenderTargetBindingArrayComparer());\n        // FBO cache used to resolve MSAA rendertargets, we create 1 FBO per RenderTargetBinding combination\n        internal Dictionary<RenderTargetBinding[], int> _glResolveFramebuffers = new Dictionary<RenderTargetBinding[], int>(new RenderTargetBindingArrayComparer());\n\n        internal bool _supportsInvalidateFramebuffer;\n        internal bool _supportsBlitFramebuffer;\n\n        internal bool FramebufferRequireFlippedY { get { return (base.RenderTargetCount > 0 && !(CurrentRenderTargetBindings[0].RenderTarget is RenderTargetSwapChain)); } }\n\n        internal GLVersion _glVersion;\n\n\n        public override Viewport Viewport\n        {\n            get { return base.Viewport; }\n            set\n            {\n                base.Viewport = value;\n                PlatformApplyViewport();\n            }\n        }\n\n        internal OGL GL { get { return OGL.Current; } }\n\n        internal ConcreteGraphicsContextGL(GraphicsContext context)\n            : base(context)\n        {\n\n        }\n\n        public override void PlatformSetup()\n        {\n            this._newEnabledVertexAttributes = new bool[base.Capabilities.MaxVertexBufferSlots];\n\n            if (!((ConcreteGraphicsCapabilities)base.Capabilities).SupportsFramebufferObjectARB\n            &&  !((ConcreteGraphicsCapabilities)base.Capabilities).SupportsFramebufferObjectEXT)\n            {\n                throw new PlatformNotSupportedException(\n                    \"GraphicsDevice requires either ARB_framebuffer_object or EXT_framebuffer_object.\");\n            }\n\n            this._supportsBlitFramebuffer = GL.BlitFramebuffer != null;\n            this._supportsInvalidateFramebuffer = GL.InvalidateFramebuffer != null;\n\n            this._bufferBindingInfos = new BufferBindingInfo[base.Capabilities.MaxVertexBufferSlots];\n            for (int i = 0; i < this._bufferBindingInfos.Length; i++)\n                this._bufferBindingInfos[i] = new BufferBindingInfo(null, null, IntPtr.Zero, 0);\n\n            // Force resetting states\n            ((IPlatformBlendState)base._actualBlendState).GetStrategy<ConcreteBlendState>().PlatformApplyState((ConcreteGraphicsContextGL)this, true);\n            ((IPlatformDepthStencilState)base._actualDepthStencilState).GetStrategy<ConcreteDepthStencilState>().PlatformApplyState((ConcreteGraphicsContextGL)this, true);\n            ((IPlatformRasterizerState)base._actualRasterizerState).GetStrategy<ConcreteRasterizerState>().PlatformApplyState((ConcreteGraphicsContextGL)this, true);\n    \n        \n            // Initialize draw buffer attachment array\n            this._drawBuffers = new DrawBufferMode[((ConcreteGraphicsCapabilities)base.Capabilities).MaxDrawBuffers];\n            for (int i = 0; i < this._drawBuffers.Length; i++)\n                this._drawBuffers[i] = (DrawBufferMode)(DrawBufferMode.ColorAttachment0 + i);\n        }\n\n        protected int ManagedThreadId()\n        {\n#if NET6_0_OR_GREATER || NETSTANDARD2_0\n            return Environment.CurrentManagedThreadId;\n#else\n            return System.Threading.Thread.CurrentThread.ManagedThreadId;\n#endif\n        }\n\n        /// <summary>\n        /// Throws an exception if the code is not currently running on the current thread.\n        /// </summary>\n        /// <exception cref=\"InvalidOperationException\">Thrown if the code is not currently running on the current thread.</exception>\n        internal abstract void EnsureContextCurrentThread();\n        public abstract void BindDisposeContext();\n        public abstract void UnbindDisposeContext();\n\n        /// <returns>\n        /// <c>true</c> if the SharedContext is succesfully bound to the thread; \n        /// <c>false</c> if MainContext is allready bound to the current thread.\n        /// </returns>\n        /// <remarks>\n        /// Call <see cref=\"UnbindSharedContext\"/> immediately after completing all Context operations.\n        /// Nested calls to binding or unbinding methods are not supported.\n        /// </remarks>\n        public abstract bool BindSharedContext();\n        public abstract void UnbindSharedContext();\n\n\n        public override void Clear(ClearOptions options, Vector4 color, float depth, int stencil)\n        {\n            // TODO: We need to figure out how to detect if we have a\n            // depth stencil buffer or not, and clear options relating\n            // to them if not attached.\n\n            // Unlike with XNA and DirectX...  GL.Clear() obeys several\n            // different render states:\n            //\n            //  - The color write flags.\n            //  - The scissor rectangle.\n            //  - The depth/stencil state.\n            //\n            // So overwrite these states with what is needed to perform\n            // the clear correctly and restore it afterwards.\n            //\n            DepthStencilState prevDepthStencilState = this.DepthStencilState;\n            BlendState prevBlendState = this.BlendState;\n            // DepthStencilState.Default has the Stencil Test disabled; \n            // make sure stencil test is enabled before we clear since\n            // some drivers won't clear with stencil test disabled\n            this.DepthStencilState = _clearDepthStencilState;\n            this.BlendState = BlendState.Opaque;\n            PlatformApplyState();\n\n            if (_lastRasterizerState.ScissorTestEnable)\n            {\n                GL.Disable(EnableCap.ScissorTest);\n                GL.CheckGLError();\n                _lastRasterizerState.ScissorTestEnable = false;\n                _rasterizerStateDirty = true;\n            }\n\n            ClearBufferMask bufferMask = 0;\n            if ((options & ClearOptions.Target) == ClearOptions.Target)\n            {\n                if (color != _lastClearColor)\n                {\n                    GL.ClearColor(color.X, color.Y, color.Z, color.W);\n                    GL.CheckGLError();\n                    _lastClearColor = color;\n                }\n                bufferMask = bufferMask | ClearBufferMask.ColorBufferBit;\n            }\n            if ((options & ClearOptions.Stencil) == ClearOptions.Stencil)\n            {\n                if (stencil != _lastClearStencil)\n                {\n                    GL.ClearStencil(stencil);\n                    GL.CheckGLError();\n                    _lastClearStencil = stencil;\n                }\n                bufferMask = bufferMask | ClearBufferMask.StencilBufferBit;\n            }\n\n            if ((options & ClearOptions.DepthBuffer) == ClearOptions.DepthBuffer)\n            {\n                if (depth != _lastClearDepth)\n                {\n                    GL.ClearDepth(depth);\n                    GL.CheckGLError();\n                    _lastClearDepth = depth;\n                }\n                bufferMask = bufferMask | ClearBufferMask.DepthBufferBit;\n            }\n\n#if IOS || TVOS\n            if (GL.CheckFramebufferStatus(FramebufferTarget.FramebufferExt) == FramebufferErrorCode.FramebufferComplete)\n            {\n#endif\n            GL.Clear(bufferMask);\n            GL.CheckGLError();\n#if IOS || TVOS\n            }\n#endif\n\n            base.Metrics_AddClearCount();\n\n            // Restore the previous render state.\n            DepthStencilState = prevDepthStencilState;\n            BlendState = prevBlendState;\n        }\n\n        private void PlatformApplyState()\n        {\n            this.EnsureContextCurrentThread();\n\n            {\n                PlatformApplyBlend();\n            }\n\n            if (_depthStencilStateDirty)\n            {\n                ((IPlatformDepthStencilState)_actualDepthStencilState).GetStrategy<ConcreteDepthStencilState>().PlatformApplyState(this);\n                _depthStencilStateDirty = false;\n            }\n\n            if (_rasterizerStateDirty)\n            {\n                ((IPlatformRasterizerState)_actualRasterizerState).GetStrategy<ConcreteRasterizerState>().PlatformApplyState(this);\n                _rasterizerStateDirty = false;\n            }\n\n            if (_scissorRectangleDirty)\n            {\n                PlatformApplyScissorRectangle();\n                _scissorRectangleDirty = false;\n            }\n        }\n\n        private void PlatformApplyBlend()\n        {\n            if (_blendStateDirty)\n            {\n                ((IPlatformBlendState)_actualBlendState).GetStrategy<ConcreteBlendState>().PlatformApplyState(this);\n                _blendStateDirty = false;\n            }\n\n            if (_blendFactorDirty)\n            {\n                GL.BlendColor(\n                    this.BlendFactor.R/255.0f,\n                    this.BlendFactor.G/255.0f,\n                    this.BlendFactor.B/255.0f,\n                    this.BlendFactor.A/255.0f);\n                GL.CheckGLError();\n                _blendFactorDirty = false;\n            }\n        }\n\n        private void PlatformApplyScissorRectangle()\n        {\n            if (this.FramebufferRequireFlippedY)\n            {\n                GL.Scissor(_scissorRectangle.X, _scissorRectangle.Y, _scissorRectangle.Width, _scissorRectangle.Height);\n                GL.CheckGLError();\n            }\n            else if (this.IsRenderTargetBound)\n            {\n                int backBufferHeight = ((IRenderTarget)CurrentRenderTargetBindings[0].RenderTarget).Height;\n                GL.Scissor(_scissorRectangle.X, backBufferHeight - (_scissorRectangle.Y + _scissorRectangle.Height), _scissorRectangle.Width, _scissorRectangle.Height);\n                GL.CheckGLError();\n            }\n            else\n            {\n                int backBufferHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight;\n                GL.Scissor(_scissorRectangle.X, backBufferHeight - (_scissorRectangle.Y + _scissorRectangle.Height), _scissorRectangle.Width, _scissorRectangle.Height);\n                GL.CheckGLError();\n            }\n\n            _scissorRectangleDirty = false;\n        }\n\n        internal void PlatformApplyViewport()\n        {\n            if (this.FramebufferRequireFlippedY)\n            {\n                GL.Viewport(_viewport.X, _viewport.Y, _viewport.Width, _viewport.Height);\n                GL.LogGLError(\"GraphicsDevice.Viewport_set() GL.Viewport\");\n            }\n            else if (this.IsRenderTargetBound)\n            {\n                int backBufferHeight = ((IRenderTarget)CurrentRenderTargetBindings[0].RenderTarget).Height;\n                GL.Viewport(_viewport.X, backBufferHeight - (_viewport.Y + _viewport.Height), _viewport.Width, _viewport.Height);\n                GL.LogGLError(\"GraphicsDevice.Viewport_set() GL.Viewport\");\n            }\n            else\n            {\n                int backBufferHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight;\n                GL.Viewport(_viewport.X, backBufferHeight - (_viewport.Y + _viewport.Height), _viewport.Width, _viewport.Height);\n                GL.LogGLError(\"GraphicsDevice.Viewport_set() GL.Viewport\");\n            }\n\n            GL.DepthRange(_viewport.MinDepth, _viewport.MaxDepth);\n            GL.LogGLError(\"GraphicsDevice.Viewport_set() GL.DepthRange\");\n\n            // In OpenGL we have to re-apply the special \"_posFixup\"\n            // vertex shader uniform if the viewport changes.\n            _vertexShaderDirty = true;\n        }\n\n        private void PlatformApplyIndexBuffer()\n        {\n            if (_indexBufferDirty)\n            {\n                GL.BindBuffer(BufferTarget.ElementArrayBuffer, ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().GLIndexBuffer);\n                GL.CheckGLError();\n                _indexBufferDirty = false;\n            }\n        }\n\n        private void PlatformApplyShaders()\n        {\n            ConcreteVertexShader cvertexShader = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete<ConcreteVertexShader>();\n            ConcretePixelShader  cpixelShader  = ((IPlatformShader)this.PixelShader).Strategy.ToConcrete<ConcretePixelShader>();\n\n            if (_vertexShaderDirty || _pixelShaderDirty)\n            {\n                ActivateShaderProgram(cvertexShader, cpixelShader);\n                ApplyPosFixup(_shaderProgram);\n\n                if (_vertexShaderDirty)\n                {\n                    base.Metrics_AddVertexShaderCount();\n                }\n\n                if (_pixelShaderDirty)\n                {\n                    base.Metrics_AddPixelShaderCount();\n                }\n\n                _vertexShaderDirty = false;\n                _pixelShaderDirty = false;\n            }\n\n\n            // Apply Constant Buffers\n            PlatformApplyConstantBuffers(cvertexShader, _shaderProgram,\n                ((IPlatformConstantBufferCollection)_vertexConstantBuffers).Strategy.ToConcrete<ConcreteConstantBufferCollection>());\n            PlatformApplyConstantBuffers(cpixelShader, _shaderProgram,\n                ((IPlatformConstantBufferCollection)_pixelConstantBuffers).Strategy.ToConcrete<ConcreteConstantBufferCollection>());\n\n            // Apply Shader Texture and Samplers\n            PlatformApplyTexturesAndSamplers(cvertexShader,\n                ((IPlatformTextureCollection)this.VertexTextures).Strategy.ToConcrete<ConcreteTextureCollection>(),\n                ((IPlatformSamplerStateCollection)this.VertexSamplerStates).Strategy.ToConcrete<ConcreteSamplerStateCollection>());\n            PlatformApplyTexturesAndSamplers(cpixelShader,\n                ((IPlatformTextureCollection)this.Textures).Strategy.ToConcrete<ConcreteTextureCollection>(),\n                ((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.ToConcrete<ConcreteSamplerStateCollection>());\n        }\n\n        private void PlatformApplyConstantBuffers(ConcreteShader shaderStrategy, ShaderProgram shaderProgram, ConcreteConstantBufferCollection cconstantBufferCollection)\n        {\n            uint validMask = cconstantBufferCollection.InternalValid;\n\n            for (int slot = 0; validMask != 0 && slot < cconstantBufferCollection.Length; slot++)\n            {\n                uint mask = ((uint)1) << slot;\n\n                ConstantBuffer constantBuffer = cconstantBufferCollection[slot];\n                if (constantBuffer != null && !constantBuffer.IsDisposed)\n                {\n                    ConcreteConstantBuffer constantBufferStrategy = ((IPlatformConstantBuffer)constantBuffer).Strategy.ToConcrete<ConcreteConstantBuffer>();\n\n                    constantBufferStrategy.PlatformApply(this, shaderProgram, slot);\n                }\n\n                // clear buffer bit\n                validMask &= ~mask;\n            }\n        }\n\n        private void PlatformApplyTexturesAndSamplers(ConcreteShader cshader, ConcreteTextureCollection ctextureCollection, ConcreteSamplerStateCollection csamplerStateCollection)\n        {\n            int texturesCount = ctextureCollection.Length;\n\n            // Apply Textures\n            for (int slot = 0; ctextureCollection.InternalDirty != 0 && slot < texturesCount; slot++)\n            {\n                uint mask = ((uint)1) << slot;\n                if ((ctextureCollection.InternalDirty & mask) != 0)\n                {\n                    Texture texture = ctextureCollection[slot];\n                    if (texture != null)\n                    {\n                        ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy<ConcreteTexture>();\n\n                        // Clear the previous binding if the target is different from the new one.\n                        TextureTarget prevTarget = ctextureCollection._targets[slot];\n                        if (prevTarget != 0 && prevTarget != ctexture._glTarget)\n                        {\n                            GL.ActiveTexture(TextureUnit.Texture0 + slot);\n                            GL.CheckGLError();\n                            GL.BindTexture(prevTarget, 0);\n                            ctextureCollection._targets[slot] = 0;\n                            GL.CheckGLError();\n                        }\n\n                        GL.ActiveTexture(TextureUnit.Texture0 + slot);\n                        GL.CheckGLError();\n                        ctextureCollection._targets[slot] = ctexture._glTarget;\n                        GL.BindTexture(ctexture._glTarget, ctexture._glTexture);\n                        GL.CheckGLError();\n\n                        this.Metrics_AddTextureCount();\n                    }\n                    else // (texture == null)\n                    {\n                        // Clear the previous binding if the target is different from the new one.\n                        TextureTarget prevTarget = ctextureCollection._targets[slot];\n                        if (prevTarget != 0)\n                        {\n                            GL.ActiveTexture(TextureUnit.Texture0 + slot);\n                            GL.CheckGLError();\n                            GL.BindTexture(prevTarget, 0);\n                            ctextureCollection._targets[slot] = 0;\n                            GL.CheckGLError();\n                        }\n                    }\n\n                    // clear texture bit\n                    ctextureCollection.InternalDirty &= ~mask;\n                }\n            }\n\n            // Check Samplers\n            GraphicsProfile graphicsProfile = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.GraphicsProfile;\n            if (graphicsProfile == GraphicsProfile.Reach)\n            {\n                for (int i = 0; i < cshader.Samplers.Length; i++)\n                {\n                    int textureSlot = cshader.Samplers[i].textureSlot;\n                    int samplerSlot = cshader.Samplers[i].samplerSlot;\n\n                    Texture2D texture2D = ctextureCollection[textureSlot] as Texture2D;\n                    if (texture2D != null)\n                    {\n                        if (this.SamplerStates[samplerSlot].AddressU != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Width)\n                        ||  this.SamplerStates[samplerSlot].AddressV != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Height))\n                            throw new NotSupportedException(\"Reach profile support only Clamp mode for non-power of two Textures.\");\n                    }\n                }\n            }\n\n            // Apply Samplers\n            for (int slot = 0; slot < texturesCount; slot++)\n            {\n                Texture texture = ctextureCollection[slot];\n                if (texture != null)\n                {\n                    ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy<ConcreteTexture>();\n\n                    SamplerState sampler = csamplerStateCollection.InternalActualSamplers[slot];\n                    if (sampler != null)\n                    {\n                        if (sampler != ctexture._glLastSamplerState)\n                        {\n                            // TODO: Avoid doing this redundantly.\n                            //       Merge the two loops 'Apply Textures' and 'Apply Samplers'.\n                            //       Use information from 'cshader.Samplers' to find active samplers.\n                            GL.ActiveTexture(TextureUnit.Texture0 + slot);\n                            GL.CheckGLError();\n\n                            // NOTE: We don't have to bind the texture here because it is already bound in the loop above.\n                            // GL.BindTexture(ctexture._glTarget, texture._glTexture);\n                            // GL.CheckGLError();\n\n                            ConcreteSamplerState csamplerState = ((IPlatformSamplerState)sampler).GetStrategy<ConcreteSamplerState>();\n\n                            csamplerState.PlatformApplyState(this, ctexture._glTarget, ctexture.LevelCount > 1);\n                            ctexture._glLastSamplerState = sampler;\n                        }\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Activates the Current Vertex/Pixel shader pair into a program.         \n        /// </summary>\n        private unsafe void ActivateShaderProgram(ConcreteVertexShader cvertexShader, ConcretePixelShader cpixelShader)\n        {\n            ConcreteGraphicsDevice deviceStrategy = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>();\n\n            // Lookup the shader program.\n            ShaderProgram shaderProgram;\n            int shaderProgramHash = (cvertexShader.GetHashCode() ^ cpixelShader.GetHashCode());\n            if (!deviceStrategy.ProgramCache.TryGetValue(shaderProgramHash, out shaderProgram))\n            {\n                // the key does not exist so we need to link the programs\n                shaderProgram = CreateProgram(cvertexShader, cpixelShader);\n                deviceStrategy.ProgramCache.Add(shaderProgramHash, shaderProgram);\n            }\n\n            if (shaderProgram.Program == -1)\n                return;\n\n            // Set the new program if it has changed.\n            if (_shaderProgram != shaderProgram)\n            {\n                GL.UseProgram(shaderProgram.Program);\n                GL.CheckGLError();\n                _shaderProgram = shaderProgram;\n            }\n\n        }\n\n        private void ApplyPosFixup(ShaderProgram shaderProgram)\n        {\n            int posFixupLoc = this.GetUniformLocation(shaderProgram, \"posFixup\");\n            if (posFixupLoc == -1)\n                return;\n\n            // Apply vertex shader fix:\n            // The following two lines are appended to the end of vertex shaders\n            // to account for rendering differences between OpenGL and DirectX:\n            //\n            // gl_Position.y = gl_Position.y * posFixup.y;\n            // gl_Position.xy += posFixup.zw * gl_Position.ww;\n            //\n            // (the following paraphrased from wine, wined3d/state.c and wined3d/glsl_shader.c)\n            //\n            // - We need to flip along the y-axis in case of offscreen rendering.\n            // - D3D coordinates refer to pixel centers while GL coordinates refer\n            //   to pixel corners.\n            // - D3D has a top-left filling convention. We need to maintain this\n            //   even after the y-flip mentioned above.\n            // In order to handle the last two points, we translate by\n            // (63.0 / 128.0) / VPw and (63.0 / 128.0) / VPh. This is equivalent to\n            // translating slightly less than half a pixel. We want the difference to\n            // be large enough that it doesn't get lost due to rounding inside the\n            // driver, but small enough to prevent it from interfering with any\n            // anti-aliasing.\n            //\n            // OpenGL coordinates specify the center of the pixel while d3d coords specify\n            // the corner. The offsets are stored in z and w in posFixup. posFixup.y contains\n            // 1.0 or -1.0 to turn the rendering upside down for offscreen rendering. PosFixup.x\n            // contains 1.0 to allow a mad.\n\n            _posFixup.X = 1.0f;\n            _posFixup.Y = 1.0f;\n            if (!((IPlatformGraphicsContext)this.Context).DeviceStrategy.UseHalfPixelOffset)\n            {\n                _posFixup.Z = 0f;\n                _posFixup.W = 0f;\n            }\n            else\n            {\n                _posFixup.Z =  (63.0f/64.0f)/Viewport.Width;\n                _posFixup.W = -(63.0f/64.0f)/Viewport.Height;\n            }\n\n            //If we have a render target bound (rendering offscreen)\n            if (this.FramebufferRequireFlippedY)\n            {\n                //flip vertically\n                _posFixup.Y = -_posFixup.Y;\n                _posFixup.W = -_posFixup.W;\n            }\n            \n            GL.Uniform4(posFixupLoc, _posFixup);\n            GL.CheckGLError();\n        }\n\n        private ShaderProgram CreateProgram(ConcreteVertexShader cvertexShader, ConcretePixelShader cpixelShader)\n        {\n            int program = GL.CreateProgram();\n            GL.CheckGLError();\n\n            int vertexShaderHandle = cvertexShader.ShaderHandle;\n            GL.AttachShader(program, vertexShaderHandle);\n            GL.CheckGLError();\n\n            int pixelShaderHandle = cpixelShader.ShaderHandle;\n            GL.AttachShader(program, pixelShaderHandle);\n            GL.CheckGLError();\n\n            //vertexShader.BindVertexAttributes(program);\n\n            GL.LinkProgram(program);\n            GL.CheckGLError();\n\n            int linkStatus;\n            GL.GetProgram(program, GetProgramParameterName.LinkStatus, out linkStatus);\n            GL.LogGLError(\"VertexShaderCache.Link(), GL.GetProgram\");\n            if (linkStatus == (int)Bool.False)\n            {\n                string log = GL.GetProgramInfoLog(program);\n                GL.DetachShader(program, vertexShaderHandle);\n                GL.DetachShader(program, pixelShaderHandle);\n\n                if (GL.IsProgram(program))\n                {\n                    GL.DeleteProgram(program);\n                    GL.CheckGLError();\n                }\n                throw new InvalidOperationException(\"Unable to link effect program.\"\n                    + Environment.NewLine + log);\n            }\n\n            GL.UseProgram(program);\n            GL.CheckGLError();\n\n            // Get Vertex AttributeLocations\n            for (int i = 0; i < cvertexShader.Attributes.Length; i++)\n            {\n                int attribloc = GL.GetAttribLocation(program, cvertexShader.Attributes[i].name);\n                GL.CheckGLError();\n                cvertexShader.Attributes[i].location = attribloc;\n            }\n\n            // Apply Pixel Sampler TextureUnits\n            // Assign the texture unit index to the sampler uniforms.\n            for (int i = 0; i < cpixelShader.Samplers.Length; i++)\n            {\n                int loc = GL.GetUniformLocation(program, cpixelShader.Samplers[i].GLsamplerName);\n                GL.CheckGLError();\n                if (loc != -1)\n                {\n                    GL.Uniform1(loc, cpixelShader.Samplers[i].textureSlot);\n                    GL.CheckGLError();\n                }\n            }\n\n\n            return new ShaderProgram(program);\n        }\n\n        internal int GetUniformLocation(ShaderProgram shaderProgram, string name)\n        {\n            int location;\n            if (shaderProgram._uniformLocationCache.TryGetValue(name, out location))\n                return location;\n\n            location = GL.GetUniformLocation(shaderProgram.Program, name);\n            GL.CheckGLError();\n\n            shaderProgram._uniformLocationCache[name] = location;\n            return location;\n        }\n\n        private void PlatformApplyVertexBuffers(int baseVertex)\n        {\n            ConcreteVertexShader vertexShaderStrategy = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete<ConcreteVertexShader>();\n\n            bool bindingsChanged = false;\n\n            for (int slot = 0; slot < _vertexBuffers.Count; slot++)\n            {\n                VertexBufferBinding vertexBufferBinding = _vertexBuffers.Get(slot);\n\n                VertexDeclaration vertexDeclaration = vertexBufferBinding.VertexBuffer.VertexDeclaration;\n                int vertexStride = vertexDeclaration.VertexStride;\n                IntPtr vertexOffset = (IntPtr)(vertexStride * (baseVertex + vertexBufferBinding.VertexOffset));\n\n                VertexDeclarationAttributeInfo vertexAttribInfo = vertexShaderStrategy.GetVertexAttribInfo(this, vertexDeclaration);\n\n                if (_lastVertexAttribs != 1\n                ||  _bufferBindingInfos[slot].VertexBuffer != vertexBufferBinding.VertexBuffer\n                ||  _bufferBindingInfos[slot].VertexOffset != vertexOffset\n                ||  _bufferBindingInfos[slot].InstanceFrequency != vertexBufferBinding.InstanceFrequency\n                ||  !ReferenceEquals(_bufferBindingInfos[slot].AttributeInfo, vertexAttribInfo)\n                ||  slot >= _activeBufferBindingInfosCount)\n                {\n                    bindingsChanged = true;\n\n                    GL.BindBuffer(BufferTarget.ArrayBuffer, ((IPlatformVertexBuffer)vertexBufferBinding.VertexBuffer).Strategy.ToConcrete<ConcreteVertexBuffer>().GLVertexBuffer);\n                    GL.CheckGLError();\n\n                    for (int e = 0; e < vertexAttribInfo.Elements.Count; e++)\n                    {\n                        VertexDeclarationAttributeInfoElement element = vertexAttribInfo.Elements[e];\n                        GL.VertexAttribPointer(element.AttributeLocation,\n                            element.NumberOfElements,\n                            element.VertexAttribPointerType,\n                            element.Normalized,\n                            vertexStride,\n                            vertexOffset + element.Offset);\n                        GL.CheckGLError();\n\n                        // only set the divisor if instancing is supported\n                        if (base.Capabilities.SupportsInstancing)\n                        {\n                            GL.VertexAttribDivisor(element.AttributeLocation, vertexBufferBinding.InstanceFrequency);\n                            GL.CheckGLError();\n                        }\n                        else // If instancing is not supported, but InstanceFrequency of the buffer is not zero, throw an exception\n                        {\n                            if (vertexBufferBinding.InstanceFrequency > 0)\n                                throw new PlatformNotSupportedException(\"Instanced geometry drawing requires at least OpenGL 3.2 or GLES 3.2.\");\n                        }\n                    }\n\n                    _bufferBindingInfos[slot].VertexBuffer = vertexBufferBinding.VertexBuffer;\n                    _bufferBindingInfos[slot].AttributeInfo = vertexAttribInfo;\n                    _bufferBindingInfos[slot].VertexOffset = vertexOffset;\n                    _bufferBindingInfos[slot].InstanceFrequency = vertexBufferBinding.InstanceFrequency;\n                }\n            }\n\n            if (bindingsChanged)\n            {\n                for (int eva = 0; eva < _newEnabledVertexAttributes.Length; eva++)\n                    _newEnabledVertexAttributes[eva] = false;\n\n                for (int slot = 0; slot < _vertexBuffers.Count; slot++)\n                {\n                    for (int e = 0; e < _bufferBindingInfos[slot].AttributeInfo.Elements.Count; e++)\n                    {\n                        VertexDeclarationAttributeInfoElement element = _bufferBindingInfos[slot].AttributeInfo.Elements[e];\n                        _newEnabledVertexAttributes[element.AttributeLocation] = true;\n                    }\n                }\n                _activeBufferBindingInfosCount = _vertexBuffers.Count;\n            }\n\n            // SetVertexAttributeArray\n            if (bindingsChanged || _lastVertexAttribs != 1)\n            {\n                for (int x = 0; x < _newEnabledVertexAttributes.Length; x++)\n                {\n                    if (_newEnabledVertexAttributes[x] == true)\n                    {\n                        if (_enabledVertexAttributesSet.Add(x))\n                        {\n                            GL.EnableVertexAttribArray(x);\n                            GL.CheckGLError();\n                        }\n                    }\n                    else // (_newEnabledVertexAttributes[x] == false)\n                    {\n                        if (_enabledVertexAttributesSet.Remove(x))\n                        {\n                            GL.DisableVertexAttribArray(x);\n                            GL.CheckGLError();\n                        }\n                    }\n                }\n            }\n            _lastVertexAttribs = 1;\n        }\n\n        internal void PlatformApplyUserVertexData(VertexDeclaration vertexDeclaration, IntPtr baseVertex)\n        {\n            ConcreteVertexShader vertexShaderStrategy = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete<ConcreteVertexShader>();\n\n            int vertexStride = vertexDeclaration.VertexStride;\n            IntPtr vertexOffset = baseVertex;\n\n            VertexDeclarationAttributeInfo vertexAttribInfo = vertexShaderStrategy.GetVertexAttribInfo(this, vertexDeclaration);\n\n            for (int e = 0; e < vertexAttribInfo.Elements.Count; e++)\n            {\n                VertexDeclarationAttributeInfoElement element = vertexAttribInfo.Elements[e];\n                GL.VertexAttribPointer(element.AttributeLocation,\n                    element.NumberOfElements,\n                    element.VertexAttribPointerType,\n                    element.Normalized,\n                    vertexStride,\n                    vertexOffset + element.Offset);\n                GL.CheckGLError();\n\n#if DESKTOPGL\n                if (base.Capabilities.SupportsInstancing)\n                {\n                    GL.VertexAttribDivisor(element.AttributeLocation, 0);\n                    GL.CheckGLError();\n                }\n#endif\n            }\n\n            // SetVertexAttributeArray\n            {\n                for (int x = 0; x < vertexAttribInfo.EnabledAttributes.Length; x++)\n                {\n                    if (vertexAttribInfo.EnabledAttributes[x] == true)\n                    {\n                        if (_enabledVertexAttributesSet.Add(x))\n                        {\n                            GL.EnableVertexAttribArray(x);\n                            GL.CheckGLError();\n                        }\n                    }\n                    else // (vertexAttribInfo.EnabledAttributes[x] == false)\n                    {\n                        if (_enabledVertexAttributesSet.Remove(x))\n                        {\n                            GL.DisableVertexAttribArray(x);\n                            GL.CheckGLError();\n                        }\n                    }\n                }\n            }\n            _lastVertexAttribs = 2;\n        }\n\n        private static GLPrimitiveType PrimitiveTypeGL(PrimitiveType primitiveType)\n        {\n            switch (primitiveType)\n            {\n                case PrimitiveType.PointList:\n                    return GLPrimitiveType.Points;\n                case PrimitiveType.LineList:\n                    return GLPrimitiveType.Lines;\n                case PrimitiveType.LineStrip:\n                    return GLPrimitiveType.LineStrip;\n                case PrimitiveType.TriangleList:\n                    return GLPrimitiveType.Triangles;\n                case PrimitiveType.TriangleStrip:\n                    return GLPrimitiveType.TriangleStrip;\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        public override void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount)\n        {\n            PlatformApplyState();\n            //PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            PlatformApplyVertexBuffers(0);\n\n            if (vertexStart < 0)\n                vertexStart = 0;\n\n            GL.DrawArrays(ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType),\n                          vertexStart,\n                          vertexCount);\n            GL.CheckGLError();\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount)\n        {\n            PlatformApplyState();\n            PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            DrawElementsType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().DrawElementsType;\n            IntPtr indexOffsetInBytes = (IntPtr)(startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes);\n            int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            GLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            if (((ConcreteGraphicsCapabilities)this.Capabilities).SupportsBaseVertex)\n            {\n                PlatformApplyVertexBuffers(0);\n\n                GL.DrawElementsBaseVertex(target,\n                                  indexElementCount,\n                                  indexElementType,\n                                  indexOffsetInBytes,\n                                  baseVertex);\n                GL.CheckGLError();\n            }\n            else\n            {\n                PlatformApplyVertexBuffers(baseVertex);\n\n                GL.DrawElements(target,\n                                indexElementCount,\n                                indexElementType,\n                                indexOffsetInBytes);\n                GL.CheckGLError();\n            }\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)\n        {\n            PlatformApplyState();\n            PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            DrawElementsType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().DrawElementsType;\n            IntPtr indexOffsetInBytes = (IntPtr)(startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes);\n            int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            GLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            if (baseVertex > 0 && ((ConcreteGraphicsCapabilities)this.Capabilities).SupportsBaseVertex)\n            {\n                PlatformApplyVertexBuffers(0);\n\n                GL.DrawRangeElementsBaseVertex(target,\n                                  minVertexIndex,\n                                  minVertexIndex + numVertices - 1,\n                                  indexElementCount,\n                                  indexElementType,\n                                  indexOffsetInBytes,\n                                  baseVertex);\n                GL.CheckGLError();\n            }\n            else if (((ConcreteGraphicsCapabilities)this.Capabilities).SupportsDrawRangeElements)\n            {\n                PlatformApplyVertexBuffers(baseVertex);\n\n                GL.DrawRangeElements(target,\n                                minVertexIndex,\n                                minVertexIndex + numVertices - 1,\n                                indexElementCount,\n                                indexElementType,\n                                indexOffsetInBytes);\n                GL.CheckGLError();\n            }\n            else\n            {\n                PlatformApplyVertexBuffers(baseVertex);\n\n                GL.DrawElements(target,\n                                indexElementCount,\n                                indexElementType,\n                                indexOffsetInBytes);\n                GL.CheckGLError();\n            }\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount);\n        }\n\n        public override void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount)\n        {\n            if (!base.Capabilities.SupportsInstancing)\n                throw new PlatformNotSupportedException(\"Instanced geometry drawing requires at least OpenGL 3.2 or GLES 3.2.\");\n\n            PlatformApplyState();\n            PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            DrawElementsType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete<ConcreteIndexBuffer>().DrawElementsType;\n            IntPtr indexOffsetInBytes = (IntPtr)(startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes);\n            int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n            GLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType);\n\n            if (baseInstance > 0)\n            {\n                if (!base.Capabilities.SupportsBaseIndexInstancing)\n                    throw new PlatformNotSupportedException(\"Instanced geometry drawing with base instance requires at least OpenGL 4.2.\");\n\n                PlatformApplyVertexBuffers(baseVertex);\n\n                GL.DrawElementsInstancedBaseInstance(target,\n                                                     indexElementCount,\n                                                     indexElementType,\n                                                     indexOffsetInBytes,\n                                                     instanceCount,\n                                                     baseInstance);\n            }\n            else\n            {\n                PlatformApplyVertexBuffers(baseVertex);\n\n                GL.DrawElementsInstanced(target,\n                                         indexElementCount,\n                                         indexElementType,\n                                         indexOffsetInBytes,\n                                         instanceCount);\n            }\n\n            GL.CheckGLError();\n\n            base.Metrics_AddDrawCount();\n            base.Metrics_AddPrimitiveCount(primitiveCount * instanceCount);\n        }\n\n        public unsafe override void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount)\n            //where T : struct\n        {\n            PlatformApplyState();\n            //PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            // Unbind current VBOs.\n            GL.BindBuffer(BufferTarget.ArrayBuffer, 0);\n            GL.CheckGLError();\n            _vertexBuffersDirty = true;\n\n            fixed (T* pVertexData = &vertexData[0])\n            {\n                IntPtr vertexAddr = (IntPtr)pVertexData;\n\n                // Setup the vertex declaration to point at the VB data.\n                PlatformApplyUserVertexData(vertexDeclaration, vertexAddr);\n\n                //Draw\n                GL.DrawArrays(ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType),\n                              vertexOffset,\n                              vertexCount);\n                GL.CheckGLError();\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public unsafe override void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration)\n            //where T : struct\n        {\n            PlatformApplyState();\n            //PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            // Unbind current VBOs.\n            GL.BindBuffer(BufferTarget.ArrayBuffer, 0);\n            GL.CheckGLError();\n            _vertexBuffersDirty = true;\n            GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);\n            GL.CheckGLError();\n            _indexBufferDirty = true;\n\n            fixed (T* pVertexData = &vertexData[0])\n            fixed (short* pIndexData = &indexData[0])\n            {\n                IntPtr vertexAddr = (IntPtr)pVertexData;\n                vertexAddr = vertexAddr + vertexDeclaration.VertexStride * vertexOffset;\n\n                // Setup the vertex declaration to point at the VB data.\n                PlatformApplyUserVertexData(vertexDeclaration, vertexAddr);\n\n                //Draw\n                GL.DrawElements(\n                    ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType),\n                    GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount),\n                    DrawElementsType.UnsignedShort,\n                    (IntPtr)pIndexData + (indexOffset * sizeof(short)));\n                GL.CheckGLError();\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public unsafe override void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration)\n            //where T : struct\n        {\n            PlatformApplyState();\n            //PlatformApplyIndexBuffer();\n            PlatformApplyShaders();\n\n            // Unbind current VBOs.\n            GL.BindBuffer(BufferTarget.ArrayBuffer, 0);\n            GL.CheckGLError();\n            _vertexBuffersDirty = true;\n            GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);\n            GL.CheckGLError();\n            _indexBufferDirty = true;\n\n            fixed (T* pVertexData = &vertexData[0])\n            fixed (int* pIndexData = &indexData[0])\n            {\n                IntPtr vertexAddr = (IntPtr)pVertexData;\n                vertexAddr = vertexAddr + vertexDeclaration.VertexStride * vertexOffset;\n\n                // Setup the vertex declaration to point at the VB data.\n                PlatformApplyUserVertexData(vertexDeclaration, vertexAddr);\n\n                //Draw\n                GL.DrawElements(\n                    ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType),\n                    GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount),\n                    DrawElementsType.UnsignedInt,\n                    (IntPtr)pIndexData + (indexOffset * sizeof(int)));\n                GL.CheckGLError();\n\n                base.Metrics_AddDrawCount();\n                base.Metrics_AddPrimitiveCount(primitiveCount);\n            }\n        }\n\n        public override void Flush()\n        {\n            GL.Flush();\n        }\n\n\n        public override OcclusionQueryStrategy CreateOcclusionQueryStrategy()\n        {\n            return new ConcreteOcclusionQuery(this);\n        }\n\n        public override GraphicsDebugStrategy CreateGraphicsDebugStrategy()\n        {\n            return new ConcreteGraphicsDebug(this);\n        }\n\n        public override ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity)\n        {\n            return new ConcreteConstantBufferCollection(capacity);\n        }\n\n        public override TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity)\n        {\n            return new ConcreteTextureCollection(this, capacity);\n        }\n\n        public override SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity)\n        {\n            return new ConcreteSamplerStateCollection(this, capacity);\n        }\n\n        public override ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared)\n        {\n            return new ConcreteTexture2D(this, width, height, mipMap, format, arraySize, shared);\n        }\n\n        public override ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            return new ConcreteTexture3D(this, width, height, depth, mipMap, format);\n        }\n\n        public override ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format)\n        {\n            return new ConcreteTextureCube(this, size, mipMap, format);\n        }\n\n        public override IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTarget2D(this, width, height, mipMap, arraySize, shared, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount,\n                                              surfaceType: TextureSurfaceType.RenderTarget);\n        }\n\n        public override IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTarget3D(this, width, height, depth, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount);\n        }\n\n        public override IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            return new ConcreteRenderTargetCube(this, size, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount);\n        }\n\n        public override ITexture2DStrategy CreateTexture2DStrategy(Stream stream)\n        {\n            return new ConcreteTexture2D(this, stream);\n        }\n\n        public override ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n        {\n            return new ConcreteVertexShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n        }\n        public override ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n        {\n            return new ConcretePixelShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n        }\n        public override ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats)\n        {\n            return new ConcreteConstantBuffer(this, name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats);\n        }\n\n        public override IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n        {\n            return new ConcreteIndexBuffer(this, indexElementSize, indexCount, usage);\n        }\n        public override VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n        {\n            return new ConcreteVertexBuffer(this, vertexDeclaration, vertexCount, usage);\n        }\n        public override IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n        {\n            return new ConcreteDynamicIndexBuffer(this, indexElementSize, indexCount, usage);\n        }\n        public override VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n        {\n            return new ConcreteDynamicVertexBuffer(this, vertexDeclaration, vertexCount, usage);\n        }\n\n        public override IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source)\n        {\n            return new ConcreteBlendState(this, source);\n        }\n        public override IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source)\n        {\n            return new ConcreteDepthStencilState(this, source);\n        }\n        public override IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy source)\n        {\n            return new ConcreteRasterizerState(this, source);\n        }\n        public override ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source)\n        {\n            return new ConcreteSamplerState(this, source);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n        static readonly FramebufferAttachment[] InvalidateFramebufferAttachements =\n        {\n            //FramebufferAttachment.ColorAttachment0,\n            FramebufferAttachment.DepthAttachment,\n            FramebufferAttachment.StencilAttachment,\n        };\n\n        protected override void PlatformResolveRenderTargets()\n        {\n            if (!this.IsRenderTargetBound)\n                return;\n\n            RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[0];\n            IRenderTarget renderTarget = renderTargetBinding.RenderTarget as IRenderTarget;\n            if (renderTarget.MultiSampleCount > 0)\n            {\n                int glResolveFramebuffer = 0;\n                if (!_glResolveFramebuffers.TryGetValue(base.CurrentRenderTargetBindings, out glResolveFramebuffer))\n                {\n                    glResolveFramebuffer = GL.GenFramebuffer();\n                    GL.CheckGLError();\n                    GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, glResolveFramebuffer);\n                    GL.CheckGLError();\n\n                    for (int i = 0; i < base.RenderTargetCount; i++)\n                    {\n                        IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IRenderTarget)base.CurrentRenderTargetBindings[i].RenderTarget).RenderTargetStrategy;\n\n                        FramebufferAttachment attachement = (FramebufferAttachment.ColorAttachment0 + i);\n                        TextureTarget target = renderTargetGL.GetFramebufferTarget(renderTargetBinding.ArraySlice);\n                        GL.FramebufferTexture2D(FramebufferTarget.DrawFramebuffer, attachement, target, renderTargetGL.GLTexture, 0);\n                        GL.CheckGLError();\n                    }\n                    _glResolveFramebuffers.Add((RenderTargetBinding[])base.CurrentRenderTargetBindings.Clone(), glResolveFramebuffer);\n                }\n                else\n                {\n                    GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, glResolveFramebuffer);\n                    GL.CheckGLError();\n                }\n\n                // The only fragment operations which affect the resolve are the pixel ownership test, the scissor test, and dithering.\n                if (_lastRasterizerState.ScissorTestEnable)\n                {\n                    GL.Disable(EnableCap.ScissorTest);\n                    GL.CheckGLError();\n                }\n\n                int glFramebuffer = _glFramebuffers[base.CurrentRenderTargetBindings];\n                GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, glFramebuffer);\n                GL.CheckGLError();\n\n                for (int i = 0; i < base.RenderTargetCount; i++)\n                {\n                    renderTargetBinding = base.CurrentRenderTargetBindings[i];\n                    renderTarget = renderTargetBinding.RenderTarget as IRenderTarget;\n\n                    GL.ReadBuffer(ReadBufferMode.ColorAttachment0 + i);\n                    GL.CheckGLError();\n                    GL.DrawBuffer(DrawBufferMode.ColorAttachment0 + i);\n                    GL.CheckGLError();\n                    Debug.Assert(this._supportsBlitFramebuffer);\n                    GL.BlitFramebuffer(0, 0, renderTarget.Width, renderTarget.Height,\n                                       0, 0, renderTarget.Width, renderTarget.Height,\n                                       ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Nearest);\n                    GL.CheckGLError();\n\n                    if (renderTarget.RenderTargetUsage == RenderTargetUsage.DiscardContents\n                    &&  this._supportsInvalidateFramebuffer)\n                    {\n                        if (i == 0)\n                        {\n                            Debug.Assert(this._supportsInvalidateFramebuffer);\n                            GL.InvalidateFramebuffer(FramebufferTarget.Framebuffer,\n                                InvalidateFramebufferAttachements.Length, InvalidateFramebufferAttachements);\n                            GL.CheckGLError();\n                        }\n                    }\n                }\n\n                if (_lastRasterizerState.ScissorTestEnable)\n                {\n                    GL.Enable(EnableCap.ScissorTest);\n                    GL.CheckGLError();\n                }\n            }\n\n            for (int i = 0; i < base.RenderTargetCount; i++)\n            {\n                renderTargetBinding = base.CurrentRenderTargetBindings[i];\n\n                renderTarget = renderTargetBinding.RenderTarget as RenderTarget2D;\n                if (renderTarget != null)\n                {\n                    ((IRenderTarget)renderTarget).RenderTargetStrategy.ResolveSubresource(this);\n                }\n\n                if (renderTargetBinding.RenderTarget.LevelCount > 1)\n                {\n                    IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>();\n                    GL.BindTexture(renderTargetGL.GLTarget, renderTargetGL.GLTexture);\n                    GL.CheckGLError();\n                    GL.GenerateMipmap(renderTargetGL.GLTarget);\n                    GL.CheckGLError();\n                }\n            }\n        }\n\n        protected override void PlatformApplyDefaultRenderTarget()\n        {\n            GL.BindFramebuffer(FramebufferTarget.Framebuffer,((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>()._glDefaultFramebuffer);\n            GL.CheckGLError();\n\n            // Reset the raster state because we flip vertices\n            // when rendering offscreen and hence the cull direction.\n            _rasterizerStateDirty = true;\n\n            // Textures will need to be rebound to render correctly in the new render target.\n            ((IPlatformTextureCollection)this.Textures).Strategy.Dirty();\n        }\n\n        protected override IRenderTarget PlatformApplyRenderTargets()\n        {\n            int glFramebuffer = 0;\n            if (!_glFramebuffers.TryGetValue(base.CurrentRenderTargetBindings, out glFramebuffer))\n            {\n                glFramebuffer = GL.GenFramebuffer();\n                GL.CheckGLError();\n                GL.BindFramebuffer(FramebufferTarget.Framebuffer, glFramebuffer);\n                GL.CheckGLError();\n                RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[0];\n                IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>();\n\n                GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, RenderbufferTarget.Renderbuffer, renderTargetGL.GLDepthBuffer);\n                GL.CheckGLError();\n                GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.StencilAttachment, RenderbufferTarget.Renderbuffer, renderTargetGL.GLStencilBuffer);\n                GL.CheckGLError();\n\n                for (int i = 0; i < base.RenderTargetCount; i++)\n                {\n                    renderTargetBinding = base.CurrentRenderTargetBindings[i];\n                    renderTargetGL = ((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>() as IRenderTargetStrategyGL;\n                    FramebufferAttachment attachement = (FramebufferAttachment.ColorAttachment0 + i);\n\n                    if (renderTargetGL.GLColorBuffer != 0)\n                    {\n                        GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, attachement, RenderbufferTarget.Renderbuffer, renderTargetGL.GLColorBuffer);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        TextureTarget target = renderTargetGL.GetFramebufferTarget(renderTargetBinding.ArraySlice);\n                        GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, attachement, target, renderTargetGL.GLTexture, 0);\n                        GL.CheckGLError();\n                    }\n                }\n\n                CheckFramebufferStatus();\n\n                _glFramebuffers.Add((RenderTargetBinding[])base.CurrentRenderTargetBindings.Clone(), glFramebuffer);\n            }\n            else\n            {\n                GL.BindFramebuffer(FramebufferTarget.Framebuffer, glFramebuffer);\n                GL.CheckGLError();\n            }\n\n#if DESKTOPGL\n            GL.DrawBuffers(base.RenderTargetCount, this.ToConcrete<ConcreteGraphicsContext>()._drawBuffers);\n#endif\n#if GLES\n            if (GL.DrawBuffers!=null)\n                GL.DrawBuffers(base.RenderTargetCount, this.ToConcrete<ConcreteGraphicsContext>()._drawBuffers);\n#endif\n\n            // Reset the raster state because we flip vertices\n            // when rendering offscreen and hence the cull direction.\n            _rasterizerStateDirty = true;\n\n            // Textures will need to be rebound to render correctly in the new render target.\n            ((IPlatformTextureCollection)this.Textures).Strategy.Dirty();\n\n            return base.CurrentRenderTargetBindings[0].RenderTarget as IRenderTarget;\n        }\n\n        internal void PlatformUnbindRenderTarget(IRenderTargetStrategyGL renderTargetStrategy)\n        {\n            var bindingsToDelete = new List<RenderTargetBinding[]>();\n            foreach (RenderTargetBinding[] bindings in _glFramebuffers.Keys)\n            {\n                foreach (RenderTargetBinding renderTargetBinding in bindings)\n                {\n                    if (renderTargetBinding.RenderTarget != null && ((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy<ITextureStrategy>() == renderTargetStrategy)\n                    {\n                        bindingsToDelete.Add(bindings);\n                        break;\n                    }\n                }\n            }\n\n            foreach (RenderTargetBinding[] bindings in bindingsToDelete)\n            {\n                int fbo = 0;\n                if (_glFramebuffers.TryGetValue(bindings, out fbo))\n                {\n                    GL.DeleteFramebuffer(fbo);\n                    GL.CheckGLError();\n                    _glFramebuffers.Remove(bindings);\n                }\n                if (_glResolveFramebuffers.TryGetValue(bindings, out fbo))\n                {\n                    GL.DeleteFramebuffer(fbo);\n                    GL.CheckGLError();\n                    _glResolveFramebuffers.Remove(bindings);\n                }\n            }\n        }\n\n\n        [Conditional(\"DEBUG\")]\n        public void CheckFramebufferStatus()\n        {\n            FramebufferErrorCode status = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer);\n            switch (status)\n            {\n                case FramebufferErrorCode.FramebufferComplete:\n                    return;\n                case FramebufferErrorCode.FramebufferIncompleteAttachment:\n                    throw new InvalidOperationException(\"Not all framebuffer attachment points are framebuffer attachment complete.\");\n                case FramebufferErrorCode.FramebufferIncompleteMissingAttachment:\n                    throw new InvalidOperationException(\"No images are attached to the framebuffer.\");\n                case FramebufferErrorCode.FramebufferUnsupported:\n                    throw new InvalidOperationException(\"The combination of internal formats of the attached images violates an implementation-dependent set of restrictions.\");\n                case FramebufferErrorCode.FramebufferIncompleteMultisample:\n                    throw new InvalidOperationException(\"Not all attached images have the same number of samples.\");\n\n                default:\n                    throw new InvalidOperationException(\"Framebuffer Incomplete.\");\n            }\n        }\n\n        internal void Cardboard_ResetContext()\n        {\n            // invalidate clearColor\n            _lastClearColor.X = float.MaxValue;\n            _lastClearDepth = float.MaxValue;\n            _lastClearStencil = int.MaxValue;\n\n            // clear states\n            _depthStencilStateDirty = true;\n            _rasterizerStateDirty = true;\n\n            // clear states (GL)\n            _lastRasterizerState = new RasterizerState();\n            _lastDepthStencilState = new DepthStencilState();\n            _lastBlendState = new BlendState();\n            _lastBlendEnable = false;\n\n            //invalidate scissor\n            _scissorRectangleDirty = true;\n\n            //invalidate vertex and index buffer\n            _lastVertexAttribs = 0;\n            _indexBufferDirty = true;\n\n            //invalidate shaders\n            _vertexShaderDirty = true;\n            _pixelShaderDirty = true;\n            _shaderProgram = null;\n\n            //invalidate VertexAttributes\n            _enabledVertexAttributesSet.Clear();\n\n            //invalidate textures\n            ((IPlatformTextureCollection)this.Textures).Strategy.Clear();\n\n            //_blendStateDirty = true; \n            //_blendFactorDirty = true;\n\n            //_vertexBuffersDirty = true;\n\n            //_vertexShader = null;\n            //_pixelShader = null;\n\n            //((IPlatformConstantBufferCollection)_vertexConstantBuffers).Strategy.Dirty();\n            //((IPlatformConstantBufferCollection)_pixelConstantBuffers).Strategy.Dirty();\n\n            //ConcreteConstantBuffer._lastConstantBufferApplied = null;\n\n            //((IPlatformTextureCollection)this.Textures).Strategy.Dirty();\n            //((IPlatformTextureCollection)this.VertexTextures).Strategy.Dirty();\n            //((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.Dirty();\n            //((IPlatformSamplerStateCollection)this.VertexSamplerStates).Strategy.Dirty();\n        }\n    }\n\n\n    internal class OpenGLException : Exception\n    {\n        public OpenGLException(string message)\n            : base(message)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteGraphicsDebug.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDebug : GraphicsDebugStrategy\n    {\n\n        internal ConcreteGraphicsDebug(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n        }\n\n\n        public override bool TryDequeueMessage(out GraphicsDebugMessage message)\n        {\n            message = null;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteGraphicsDevice.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal abstract class ConcreteGraphicsDeviceGL : GraphicsDeviceStrategy\n    {\n        private readonly Dictionary<int, ShaderProgram> _programCache = new Dictionary<int, ShaderProgram>();\n\n        internal Dictionary<int, ShaderProgram> ProgramCache { get { return _programCache; } }\n\n        internal int _glDefaultFramebuffer = 0;\n\n\n        internal ConcreteGraphicsDeviceGL(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n            : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters)\n        {\n        }\n\n\n        public override void Reset()\n        {\n            PlatformReset(this.PresentationParameters);\n        }\n\n        public override void Reset(PresentationParameters presentationParameters)\n        {\n            PlatformReset(presentationParameters);\n        }\n\n        private void PlatformReset(PresentationParameters presentationParameters)\n        {\n            this.PresentationParameters = presentationParameters;\n\n#if DESKTOPGL\n            ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().MakeCurrent(this.PresentationParameters.DeviceWindowHandle);\n            int swapInterval = ConcreteGraphicsContext.ToGLSwapInterval(this.PresentationParameters.PresentationInterval);\n            Sdl.Current.OpenGL.SetSwapInterval(swapInterval);\n#endif\n\n            ((IPlatformGraphicsContext)_mainContext).Strategy.ApplyRenderTargets(null);\n        }\n\n        public override void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle)\n        {\n            throw new NotImplementedException();\n        }\n\n        public unsafe override void GetBackBufferData<T>(Rectangle? rect, T[] data, int startIndex, int elementCount)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)this.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                Rectangle srcRect = rect ?? new Rectangle(0, 0, PresentationParameters.BackBufferWidth, PresentationParameters.BackBufferHeight);\n                int fSize = PresentationParameters.BackBufferFormat.GetSize();\n                int tSize = sizeof(T);\n                int flippedY = PresentationParameters.BackBufferHeight - srcRect.Y - srcRect.Height;\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    GL.ReadPixels(srcRect.X, flippedY, srcRect.Width, srcRect.Height, PixelFormat.Rgba, PixelType.UnsignedByte, dataPtr);\n\n                    // buffer is returned upside down, so we swap the rows around when copying over\n                    int rowSize = srcRect.Width * fSize / tSize;\n\n                    T[] row = new T[rowSize];\n\n                    for (int dy = 0; dy < srcRect.Height / 2; dy++)\n                    {\n                        int topRow = startIndex + dy * rowSize;\n                        int bottomRow = startIndex + (srcRect.Height - dy - 1) * rowSize;\n\n                        // copy the bottom row to buffer\n                        Array.Copy(data, bottomRow, row, 0, rowSize);\n\n                        // copy top row to bottom row\n                        Array.Copy(data, topRow, data, bottomRow, rowSize);\n\n                        // copy buffer to top row\n                        Array.Copy(row, 0, data, topRow, rowSize);\n\n                        elementCount -= rowSize;\n                    }\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)this.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public override System.Reflection.Assembly ConcreteAssembly\n        {\n            get { return ReflectionHelpers.GetAssembly(typeof(ConcreteGraphicsDevice)); }\n        }\n\n        protected override void PlatformInitialize()\n        {\n        }\n\n        private void ClearProgramCache()\n        {\n            var GL = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            foreach (ShaderProgram shaderProgram in ProgramCache.Values)\n            {\n                if (GL.IsProgram(shaderProgram.Program))\n                {\n                    GL.DeleteProgram(shaderProgram.Program);\n                    GL.CheckGLError();\n                }\n            }\n            ProgramCache.Clear();\n        }\n\n        internal int GetMaxMultiSampleCount(SurfaceFormat surfaceFormat)\n        {\n            switch (surfaceFormat)\n            {\n                case SurfaceFormat.Color:\n                case SurfaceFormat.Bgr565:\n                case SurfaceFormat.Bgra4444:\n                case SurfaceFormat.Bgra5551:\n                case SurfaceFormat.Single:\n                case SurfaceFormat.HalfSingle:\n                case SurfaceFormat.Vector2:\n                case SurfaceFormat.HalfVector2:\n                case SurfaceFormat.Vector4:\n                case SurfaceFormat.HalfVector4:\n                    // See: PlatformCreateRenderTarget(...)\n                    // for the supported surface types.\n                    break;\n\n                default:\n                    return 0;\n            }\n\n            var contextStrategy = ((IPlatformGraphicsContext)this.MainContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>();\n            var GL = contextStrategy.GL;\n\n            if (!contextStrategy._supportsBlitFramebuffer\n            ||  GL.RenderbufferStorageMultisample == null)\n                return 0;\n\n            int maxMultiSampleCount = 0;\n            GL.GetInteger(GetPName.MaxSamples, out maxMultiSampleCount);\n            return maxMultiSampleCount;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            // Free all the cached shader programs.\n            ClearProgramCache();\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteGraphicsFactory.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcreteGraphicsFactory : GraphicsFactory\n    {\n        public override GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy()\n        {\n            return new ConcreteGraphicsAdaptersProvider();\n        }\n\n        public override GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n        {\n            return new ConcreteGraphicsDevice(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters);\n        }\n\n        public override SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity)\n        {\n            return new SpriteBatcher(graphicsDevice, capacity);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteOcclusionQuery.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteOcclusionQuery : OcclusionQueryStrategy\n    {\n        private bool _inBeginEndPair;  // true if Begin was called and End was not yet called.\n        private bool _queryPerformed;  // true if Begin+End were called at least once.\n        private bool _isComplete;      // true if the result is available in _pixelCount.\n        private int _pixelCount;       // The query result.\n\n        private int _glQueryId = -1;\n\n        public override int PixelCount { get { return _pixelCount; } }\n\n        public override bool IsComplete\n        {\n            get\n            {\n                if (_isComplete)\n                    return true;\n\n                if (!_queryPerformed || _inBeginEndPair)\n                    return false;\n\n                return PlatformGetResult();\n\n                return _isComplete;\n            }\n        }\n\n        internal ConcreteOcclusionQuery(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            _glQueryId = GL.GenQuery();\n            GL.CheckGLError();\n        }\n\n        public override void PlatformBegin()\n        {\n            if (_inBeginEndPair)\n                throw new InvalidOperationException(\"End() must be called before calling Begin() again.\");\n\n            var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            _inBeginEndPair = true;\n            _isComplete = false;\n\n            GL.BeginQuery(QueryTarget.SamplesPassed, _glQueryId);\n            GL.CheckGLError();\n        }\n\n        public override void PlatformEnd()\n        {\n            if (!_inBeginEndPair)\n                throw new InvalidOperationException(\"Begin() must be called before calling End().\");\n\n            var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            _inBeginEndPair = false;\n            _queryPerformed = true;\n\n            GL.EndQuery(QueryTarget.SamplesPassed);\n            GL.CheckGLError();\n        }\n\n        private bool PlatformGetResult()\n        {\n            var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            int resultReady = 0;\n            GL.GetQueryObject(_glQueryId, GetQueryObjectParam.QueryResultAvailable, out resultReady);\n            GL.CheckGLError();\n\n            if (resultReady == 0)\n            {\n                _pixelCount = 0;\n                _isComplete = false;\n            }\n            else\n            {\n                GL.GetQueryObject(_glQueryId, GetQueryObjectParam.QueryResult, out _pixelCount);\n                GL.CheckGLError();\n                _isComplete = true;\n            }\n\n            return _isComplete;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (_glQueryId > -1)\n            {\n                if (!GraphicsDevice.IsDisposed)\n                {\n                    _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindDisposeContext();\n                    try\n                    {\n                        var GL = _contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                        GL.DeleteQuery(_glQueryId);\n                        GL.CheckGLError();\n                    }\n                    finally\n                    {\n                        _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindDisposeContext();\n                    }\n                }\n                _glQueryId = -1;\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteRenderTarget2D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTarget2D : ConcreteTexture2D, IRenderTarget2DStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyGL\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n\n\n        internal ConcreteRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,\n              TextureSurfaceType surfaceType)\n            : base(contextStrategy, width, height, mipMap, preferredSurfaceFormat, arraySize, shared,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            if (surfaceType == TextureSurfaceType.RenderTargetSwapChain)\n            {\n                // Texture will be created by the RenderTargetSwapChain.\n                return;\n            }\n\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, shared);\n\n            PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, _multiSampleCount, shared);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public virtual void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n        int _glColorBuffer;\n        int _glDepthBuffer;\n        int _glStencilBuffer;\n\n        #region IRenderTargetStrategyGL\n        int IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } }\n        TextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } }\n        int IRenderTargetStrategyGL.GLColorBuffer\n        {\n            get { return _glColorBuffer; }\n            set { _glColorBuffer = value; }\n        }\n        int IRenderTargetStrategyGL.GLDepthBuffer\n        {\n            get { return _glDepthBuffer; }\n            set { _glDepthBuffer = value; }\n        }\n        int IRenderTargetStrategyGL.GLStencilBuffer\n        {\n            get { return _glStencilBuffer; }\n            set { _glStencilBuffer = value; }\n        }\n\n        TextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice)\n        {\n            if (arraySlice != 0)\n                throw new NotImplementedException(\"arraySlice is not implemented for Texture2D\");\n\n            return _glTarget;\n        }\n        #endregion IRenderTargetStrategyGL\n\n\n        private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared)\n        {\n            base.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared);\n        }\n\n        private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount, bool shared)\n        {\n            ConcreteTexture.PlatformCreateRenderTarget((IRenderTargetStrategyGL)this, contextStrategy, width, height, mipMap, this.Format, preferredDepthFormat, multiSampleCount);\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n\n            base.PlatformGraphicsContextLost();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy);\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteRenderTarget3D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTarget3D : ConcreteTexture3D, IRenderTarget3DStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyGL\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n\n\n        internal ConcreteRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            : base(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTexture3D_rt(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat);\n\n            // If we don't need a depth buffer then we're done.\n            if (preferredDepthFormat != DepthFormat.None)\n                PlatformConstructRenderTarget3D(contextStrategy, width, height, depth, mipMap, preferredDepthFormat, _multiSampleCount);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n        int _glColorBuffer;\n        int _glDepthBuffer;\n        int _glStencilBuffer;\n\n        #region IRenderTargetStrategyGL\n        int IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } }\n        TextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } }\n        int IRenderTargetStrategyGL.GLColorBuffer\n        {\n            get { return _glColorBuffer; }\n            set { _glColorBuffer = value; }\n        }\n        int IRenderTargetStrategyGL.GLDepthBuffer\n        {\n            get { return _glDepthBuffer; }\n            set { _glDepthBuffer = value; }\n        }\n        int IRenderTargetStrategyGL.GLStencilBuffer\n        {\n            get { return _glStencilBuffer; }\n            set { _glStencilBuffer = value; }\n        }\n\n        TextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice)\n        {\n            if (arraySlice != 0)\n                throw new NotImplementedException(\"arraySlice is not implemented for Texture2D\");\n\n            return _glTarget;\n        }\n        #endregion IRenderTargetStrategyGL\n\n\n        private void PlatformConstructTexture3D_rt(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            base.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format);\n        }\n\n        private void PlatformConstructRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy);\n\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteRenderTargetCube.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTargetCube : ConcreteTextureCube, IRenderTargetCubeStrategy, IRenderTargetStrategy,\n        IRenderTargetStrategyGL\n    {\n        private readonly DepthFormat _depthStencilFormat;\n        internal int _multiSampleCount;\n        private readonly RenderTargetUsage _renderTargetUsage;\n        private bool _isContentLost;\n\n\n        internal ConcreteRenderTargetCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            : base(contextStrategy, size, mipMap, preferredSurfaceFormat,\n                   isRenderTarget: true)\n        {\n            this._renderTargetUsage = usage;\n            this._depthStencilFormat = preferredDepthFormat;\n\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTextureCube_rt(contextStrategy, size, mipMap, preferredSurfaceFormat);\n\n            PlatformConstructRenderTargetCube(contextStrategy, mipMap, preferredDepthFormat, _multiSampleCount);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n        }\n\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n        }\n\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n\n        public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            if (this.MultiSampleCount > 1)\n            {\n            }\n        }\n        #endregion IRenderTargetStrategy\n\n\n        int _glColorBuffer;\n        int _glDepthBuffer;\n        int _glStencilBuffer;\n\n        #region IRenderTargetStrategyGL\n        int IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } }\n        TextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } }\n        int IRenderTargetStrategyGL.GLColorBuffer\n        {\n            get { return _glColorBuffer; }\n            set { _glColorBuffer = value; }\n        }\n        int IRenderTargetStrategyGL.GLDepthBuffer\n        {\n            get { return _glDepthBuffer; }\n            set { _glDepthBuffer = value; }\n        }\n        int IRenderTargetStrategyGL.GLStencilBuffer\n        {\n            get { return _glStencilBuffer; }\n            set { _glStencilBuffer = value; }\n        }\n\n        TextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice)\n        {\n            return TextureTarget.TextureCubeMapPositiveX + arraySlice;\n        }\n        #endregion IRenderTargetStrategyGL\n\n\n        private void PlatformConstructTextureCube_rt(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n        {\n            base.PlatformConstructTextureCube(contextStrategy, size, mipMap, format);\n        }\n\n        private void PlatformConstructRenderTargetCube(GraphicsContextStrategy contextStrategy, bool mipMap,\n            DepthFormat preferredDepthFormat, int multiSampleCount)\n        {\n            ConcreteTexture.PlatformCreateRenderTarget((IRenderTargetStrategyGL)this, contextStrategy, this.Size, this.Size, mipMap, this.Format, preferredDepthFormat, multiSampleCount);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy);\n\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteRenderTargetSwapChain.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTargetSwapChain : ConcreteRenderTarget2D\n        //,\n    {\n        internal IntPtr _glTextureHandle;\n        internal PresentInterval _presentInterval;\n\n\n        internal ConcreteRenderTargetSwapChain(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, RenderTargetUsage usage,\n            IntPtr glTextureHandle, PresentInterval presentInterval,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            :base(contextStrategy, width, height, mipMap, 1, false, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount,\n                  TextureSurfaceType.RenderTargetSwapChain)\n        {\n            _glTextureHandle = glTextureHandle;\n            _presentInterval = presentInterval;\n\n            _glTarget = TextureTarget.Texture2D;\n            ConcreteTexture.ToGLSurfaceFormat(preferredSurfaceFormat, contextStrategy,\n                out _glInternalFormat,\n                out _glFormat,\n                out _glType,\n                out _glIsCompressedTexture);\n\n            int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete<ConcreteGraphicsDevice>().GetMaxMultiSampleCount(preferredSurfaceFormat);\n            this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount);\n\n            PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, false);\n\n            PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, _multiSampleCount, false);\n        }\n\n        private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat preferredSurfaceFormat, object shared)\n        {\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            _glTarget = TextureTarget.Texture2D;\n            _glTexture = _glTextureHandle.ToInt32();\n\n            TextureTarget colorTextureTarget = TextureTarget.Texture2D;\n            GL.BindTexture(colorTextureTarget, _glTexture);\n            GL.CheckGLError();\n            GL.TexParameteri(colorTextureTarget, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge);\n            GL.CheckGLError();\n            GL.TexParameteri(colorTextureTarget, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge);\n            GL.CheckGLError();\n            GL.TexParameteri(colorTextureTarget, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);\n            GL.CheckGLError();\n            GL.TexParameteri(colorTextureTarget, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);\n            GL.CheckGLError();\n            GL.BindTexture(colorTextureTarget, 0);\n            GL.CheckGLError();\n\n        }\n\n        private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount, object shared)\n        {\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)this;\n\n            if (multiSampleCount > 1)\n            {\n                RenderbufferStorage colorInternalFormat = RenderbufferStorage.RGBA8;\n\n                renderTargetGL.GLColorBuffer = GL.GenRenderbuffer();\n                GL.CheckGLError();\n                GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLColorBuffer);\n                GL.CheckGLError();\n                if (multiSampleCount > 0)\n                {\n                    System.Diagnostics.Debug.Assert(GL.RenderbufferStorageMultisample != null);\n                    GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, colorInternalFormat, width, height);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, colorInternalFormat, width, height);\n                    GL.CheckGLError();\n                }\n            }\n\n            if (preferredDepthFormat != DepthFormat.None)\n            {\n                RenderbufferStorage depthInternalFormat = RenderbufferStorage.DepthComponent16;\n                RenderbufferStorage stencilInternalFormat = (RenderbufferStorage)0;\n                switch (preferredDepthFormat)\n                {\n                    case DepthFormat.None:\n                        break;\n\n                    case DepthFormat.Depth16:\n                        depthInternalFormat = RenderbufferStorage.DepthComponent16;\n                        break;\n\n#if GLES\n                    case DepthFormat.Depth24:\n                        if (contextStrategy.Capabilities.SupportsDepth24)\n                            depthInternalFormat = RenderbufferStorage.DepthComponent24oes;\n                        else if (contextStrategy.Capabilities.SupportsDepthNonLinear)\n                            depthInternalFormat = RenderbufferStorage.DepthComponent16NonlinearNv;\n                        else\n                            depthInternalFormat = RenderbufferStorage.DepthComponent16;\n                        break;\n\n                    case DepthFormat.Depth24Stencil8:\n                        if (contextStrategy.Capabilities.SupportsPackedDepthStencil)\n                            depthInternalFormat = RenderbufferStorage.Depth24Stencil8oes;\n                        else\n                        {\n                            if (contextStrategy.Capabilities.SupportsDepth24)\n                                depthInternalFormat = RenderbufferStorage.DepthComponent24oes;\n                            else if (contextStrategy.Capabilities.SupportsDepthNonLinear)\n                                depthInternalFormat = RenderbufferStorage.DepthComponent16NonlinearNv;\n                            else\n                                depthInternalFormat = RenderbufferStorage.DepthComponent16;\n                            stencilInternalFormat = RenderbufferStorage.StencilIndex8;\n                        }\n                        break;\n\n#else\n                    case DepthFormat.Depth24:\n                        depthInternalFormat = RenderbufferStorage.DepthComponent24;\n                        break;\n\n                    case DepthFormat.Depth24Stencil8:\n                        depthInternalFormat = RenderbufferStorage.Depth24Stencil8;\n                        break;\n#endif\n\n                    default:\n                        throw new InvalidOperationException(\"preferredDepthFormat\");\n                }\n\n                if (depthInternalFormat != 0)\n                {\n                    // Create depth buffer.\n                    renderTargetGL.GLDepthBuffer = GL.GenRenderbuffer();\n                    GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLDepthBuffer);\n                    GL.CheckGLError();\n                    if (multiSampleCount > 1)\n                    {\n                        GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, depthInternalFormat, width, height);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, depthInternalFormat, width, height);\n                        GL.CheckGLError();\n                    }\n                    GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, 0);\n                    GL.CheckGLError();\n\n                    if (preferredDepthFormat == DepthFormat.Depth24Stencil8)\n                    {\n                        renderTargetGL.GLStencilBuffer = renderTargetGL.GLDepthBuffer;\n                        if (stencilInternalFormat != 0)\n                        {\n                            renderTargetGL.GLStencilBuffer = GL.GenRenderbuffer();\n                            GL.CheckGLError();\n                            GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLStencilBuffer);\n                            GL.CheckGLError();\n                            if (multiSampleCount > 1)\n                            {\n                                System.Diagnostics.Debug.Assert(GL.RenderbufferStorageMultisample != null);\n                                GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, stencilInternalFormat, width, height);\n                                GL.CheckGLError();\n                            }\n                            else\n                            {\n                                GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, stencilInternalFormat, width, height);\n                                GL.CheckGLError();\n                            }\n                        }\n                    }\n\n                    // Create the frame buffer.\n                    //uint framebufferId = (uint)GL.GenFramebuffer();\n                    //GL.BindFramebuffer(FramebufferTarget.Framebuffer, (int)framebufferId);\n                    //GL.CheckGLError();\n\n                    //GL.FramebufferRenderbuffer(\n                    //    FramebufferTarget.Framebuffer,\n                    //    FramebufferAttachment.DepthAttachment,\n                    //    RenderbufferTarget.Renderbuffer,\n                    //    renderTargetGL.GLDepthBuffer);\n                    //GL.CheckGLError();\n\n                    //GL.FramebufferTexture2D(\n                    //    FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, _glTexture, 0);\n                    //GL.CheckGLError();\n                    //FramebufferErrorCode renderFramebufferStatus = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer);\n\n                    //GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);\n                    //GL.CheckGLError();\n                    //if (renderFramebufferStatus != FramebufferErrorCode.FramebufferComplete)\n                    //{\n                    //    Console.WriteLine(\n                    //        \"Incomplete frame buffer object: {0}\",\n                    //        \"\" //GL.FrameBufferStatusString(renderFramebufferStatus)\n                    //        );\n                    //    throw new Exception(\"Incomplete frame buffer\");\n                    //}\n\n                    //GL.DeleteFramebuffer((int)framebufferId);\n                }\n\n            }\n\n        }\n\n        public void Present()\n        {\n            lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle)\n            {\n                throw new NotSupportedException();\n            }\n        }\n\n        static readonly FramebufferAttachment[] InvalidateFramebufferAttachements =\n        {\n            FramebufferAttachment.DepthAttachment,\n        };\n\n        public override void ResolveSubresource(GraphicsContextStrategy contextStrategy)\n        {\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            // Discard the depth buffer, so the tiler won't need to write it back out to memory.\n            GL.InvalidateFramebuffer(FramebufferTarget.Framebuffer, 1, InvalidateFramebufferAttachements);\n            GL.CheckGLError();\n            // We now let the resolve happen implicitly.\n\n            // Using a multisampled SwapChainRenderTarget as a source Texture is not supported.\n            //base.ResolveSubresource(contextStrategy);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                // ...\n            }\n\n            var contextStrategy = ((IPlatformGraphicsContext)this.GraphicsDeviceStrategy.MainContext).Strategy;\n\n            contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindDisposeContext();\n            try\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                IRenderTargetStrategyGL renderTargetGL = ((IRenderTargetStrategyGL)this);\n\n                if (renderTargetGL.GLStencilBuffer != 0 && renderTargetGL.GLStencilBuffer != renderTargetGL.GLDepthBuffer)\n                {\n                    GL.DeleteRenderbuffer(renderTargetGL.GLStencilBuffer);\n                    GL.CheckGLError();\n                }\n                if (renderTargetGL.GLDepthBuffer != 0)\n                {\n                    GL.DeleteRenderbuffer(renderTargetGL.GLDepthBuffer);\n                    GL.CheckGLError();\n                }\n\n                contextStrategy.ToConcrete<ConcreteGraphicsContext>().PlatformUnbindRenderTarget(renderTargetGL);\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindDisposeContext();\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteSamplerStateCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteSamplerStateCollection : SamplerStateCollectionStrategy\n    {\n\n        internal SamplerState[] InternalActualSamplers { get { return base._actualSamplers; } }\n\n\n        internal ConcreteSamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity)\n            : base(contextStrategy, capacity)\n        {\n        }\n\n\n        public override SamplerState this[int index]\n        {\n            get { return base[index]; }\n            set\n            {\n                base[index] = value;\n            }\n        }\n\n        public override void Clear()\n        {\n            base.Clear();\n        }\n\n        public override void Dirty()\n        {\n            base.Dirty();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteTexture.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTexture : GraphicsResourceStrategy, ITextureStrategy\n    {\n        private readonly GraphicsContextStrategy _contextStrategy;\n        private readonly SurfaceFormat _format;        \n        private readonly int _levelCount;\n\n        internal ConcreteTexture(GraphicsContextStrategy contextStrategy, SurfaceFormat format, int levelCount)\n            : base(contextStrategy)\n        {\n            this._contextStrategy = contextStrategy;\n            this._format = format;\n            this._levelCount = levelCount;\n        }\n\n\n        #region ITextureStrategy\n        public SurfaceFormat Format { get { return _format; } }\n        public int LevelCount { get { return _levelCount; } }\n        #endregion ITextureStrategy\n\n\n\n        internal int _glTexture = -1;\n        internal TextureTarget _glTarget;\n        internal TextureUnit _glTextureUnit = TextureUnit.Texture0;\n        internal PixelInternalFormat _glInternalFormat;\n        internal PixelFormat _glFormat;\n        internal PixelType _glType;\n        internal bool _glIsCompressedTexture;\n        internal SamplerState _glLastSamplerState;\n\n        internal static void ToGLSurfaceFormat(SurfaceFormat format,\n            GraphicsContextStrategy contextStrategy,\n            out PixelInternalFormat glInternalFormat,\n            out PixelFormat glFormat,\n            out PixelType glType,\n            out bool glIsCompressedTexture)\n        {\n            var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            bool supportsSRgb = contextStrategy.Capabilities.SupportsSRgb;\n            bool supportsS3tc = contextStrategy.Capabilities.SupportsS3tc;\n            bool supportsPvrtc = contextStrategy.Capabilities.SupportsPvrtc;\n            bool supportsEtc1 = contextStrategy.Capabilities.SupportsEtc1;\n            bool supportsEtc2 = contextStrategy.Capabilities.SupportsEtc2;\n            bool supportsAtitc = contextStrategy.Capabilities.SupportsAtitc;\n            bool supportsFloat = contextStrategy.Capabilities.SupportsFloatTextures;\n            bool supportsHalfFloat = contextStrategy.Capabilities.SupportsHalfFloatTextures;\n            bool supportsNormalized = contextStrategy.Capabilities.SupportsNormalized;\n            bool isGLES2 = GL.BoundApi == OGL.RenderApi.ES && ((ConcreteGraphicsContextGL)contextStrategy)._glVersion.Major == 2;\n\n            switch (format)\n            {\n                case SurfaceFormat.Color:\n                    glInternalFormat      = PixelInternalFormat.Rgba;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.ColorSRgb:\n                    if (!supportsSRgb)\n                        goto case SurfaceFormat.Color;\n                    glInternalFormat      = PixelInternalFormat.Srgb;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.ColorSRgba:\n                    if (!supportsSRgb)\n                        goto case SurfaceFormat.Color;\n                    glInternalFormat      = PixelInternalFormat.Srgba;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = false;\n                    break;\n\n                case SurfaceFormat.Bgr565:\n                    glInternalFormat      = PixelInternalFormat.Rgb;\n                    glFormat              = PixelFormat.Rgb;\n                    glType                = PixelType.UnsignedShort565;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Bgra4444:\n#if IOS || TVOS || ANDROID\n                    glInternalFormat      = PixelInternalFormat.Rgba;\n#else\n                    glInternalFormat      = PixelInternalFormat.Rgba4;\n#endif\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.UnsignedShort4444;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Bgra5551:\n                    glInternalFormat      = PixelInternalFormat.Rgba;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.UnsignedShort5551;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Alpha8:\n                    glInternalFormat      = PixelInternalFormat.Luminance;\n                    glFormat              = PixelFormat.Luminance;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Dxt1:\n                    if (!supportsS3tc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.CompressedRgbS3tcDxt1Ext;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Dxt1SRgb:\n                    if (!supportsSRgb)\n                        goto case SurfaceFormat.Dxt1;\n                    glInternalFormat      = PixelInternalFormat.CompressedSrgbS3tcDxt1Ext;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Dxt1a:\n                    if (!supportsS3tc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.CompressedRgbaS3tcDxt1Ext;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Dxt3:\n                    if (!supportsS3tc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.CompressedRgbaS3tcDxt3Ext;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Dxt3SRgb:\n                    if (!supportsSRgb)\n                        goto case SurfaceFormat.Dxt3;\n                    glInternalFormat      = PixelInternalFormat.CompressedSrgbAlphaS3tcDxt3Ext;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Dxt5:\n                    if (!supportsS3tc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.CompressedRgbaS3tcDxt5Ext;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Dxt5SRgb:\n                    if (!supportsSRgb)\n                        goto case SurfaceFormat.Dxt5;\n                    glInternalFormat      = PixelInternalFormat.CompressedSrgbAlphaS3tcDxt5Ext;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n#if !IOS && !TVOS && !ANDROID\n                case SurfaceFormat.Rgba1010102:\n                    glInternalFormat      = PixelInternalFormat.Rgb10A2ui;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.UnsignedInt1010102;\n                    glIsCompressedTexture = false;\n                    break;\n#endif\n\n                // float formats\n                case SurfaceFormat.HalfSingle:\n                    if (!supportsHalfFloat) goto case default;\n                    glInternalFormat      = PixelInternalFormat.R16f;\n                    glFormat              = PixelFormat.Red;\n                    glType                = isGLES2 ? PixelType.HalfFloatOES : PixelType.HalfFloat;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Single:\n                    if (!supportsFloat) goto case default;\n                    glInternalFormat      = PixelInternalFormat.R32f;\n                    glFormat              = PixelFormat.Red;\n                    glType                = PixelType.Float;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.HalfVector2:\n                    if (!supportsHalfFloat) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Rg16f;\n                    glFormat              = PixelFormat.Rg;\n                    glType                = PixelType.HalfFloat;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Vector2:\n                    if (!supportsFloat) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Rg32f;\n                    glFormat              = PixelFormat.Rg;\n                    glType                = PixelType.Float;\n                    glIsCompressedTexture = false;\n                    break;\n                // HdrBlendable implemented as HalfVector4 (see http://blogs.msdn.com/b/shawnhar/archive/2010/07/09/surfaceformat-hdrblendable.aspx)\n                case SurfaceFormat.HdrBlendable:\n                case SurfaceFormat.HalfVector4:\n                    if (!supportsHalfFloat) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Rgba16f;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.HalfFloat;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.Vector4:\n                    if (!supportsFloat) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Rgba32f;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.Float;\n                    glIsCompressedTexture = false;\n                    break;\n\n                case SurfaceFormat.NormalizedByte2:\n                    glInternalFormat      = PixelInternalFormat.Rg8i;\n                    glFormat              = PixelFormat.Rg;\n                    glType                = PixelType.Byte;\n                    glIsCompressedTexture = false;\n                    break;\n\n                case SurfaceFormat.NormalizedByte4:\n                    glInternalFormat      = PixelInternalFormat.Rgba8i;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.Byte;\n                    glIsCompressedTexture = false;\n                    break;\n\n                case SurfaceFormat.Rg32:\n                    if (!supportsNormalized) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Rg16ui;\n                    glFormat              = PixelFormat.Rg;\n                    glType                = PixelType.UnsignedShort;\n                    glIsCompressedTexture = false;\n                    break;\n\n                case SurfaceFormat.Rgba64:\n                    if (!supportsNormalized) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Rgba16;\n                    glFormat              = PixelFormat.Rgba;\n                    glType                = PixelType.UnsignedShort;\n                    glIsCompressedTexture = false;\n                    break;\n                case SurfaceFormat.RgbaAtcExplicitAlpha:\n                    if (!supportsAtitc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.AtcRgbaExplicitAlphaAmd;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.RgbaAtcInterpolatedAlpha:\n                    if (!supportsAtitc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.AtcRgbaInterpolatedAlphaAmd;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.RgbEtc1:\n                    if (!supportsEtc1) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Etc1; // GL_ETC1_RGB8_OES\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Rgb8Etc2:\n                    if (!supportsEtc2) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Etc2Rgb8; // GL_COMPRESSED_RGB8_ETC2\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Srgb8Etc2:\n                    if (!supportsEtc2) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Etc2Srgb8; // GL_COMPRESSED_SRGB8_ETC2\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Rgb8A1Etc2:\n                    if (!supportsEtc2) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Etc2Rgb8A1; // GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Srgb8A1Etc2:\n                    if (!supportsEtc2) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Etc2Srgb8A1; // GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.Rgba8Etc2:\n                    if (!supportsEtc2) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Etc2Rgba8Eac; // GL_COMPRESSED_RGBA8_ETC2_EAC\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.SRgb8A8Etc2:\n                    if (!supportsEtc2) goto case default;\n                    glInternalFormat      = PixelInternalFormat.Etc2SRgb8A8Eac; // GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                    if (!supportsPvrtc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.CompressedRgbPvrtc2Bppv1Img;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                    if (!supportsPvrtc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.CompressedRgbPvrtc4Bppv1Img;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                    if (!supportsPvrtc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.CompressedRgbaPvrtc2Bppv1Img;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                    if (!supportsPvrtc) goto case default;\n                    glInternalFormat      = PixelInternalFormat.CompressedRgbaPvrtc4Bppv1Img;\n                    glFormat              = (PixelFormat)glInternalFormat;\n                    glType                = PixelType.UnsignedByte;\n                    glIsCompressedTexture = true;\n                    break;\n\n                default:\n                    throw new NotSupportedException(string.Format(\"The requested SurfaceFormat `{0}` is not supported.\", format));\n            }\n        }\n\n        internal static void PlatformCreateRenderTarget(IRenderTargetStrategyGL renderTargetGL, GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int multiSampleCount)\n        {\n            bool isSharedContext = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                if (multiSampleCount > 0)\n                {\n                    RenderbufferStorage colorInternalFormat = default;\n                    switch (preferredFormat)\n                    {\n                        case SurfaceFormat.Color:\n                            colorInternalFormat = RenderbufferStorage.RGBA8;\n                            break;\n                        case SurfaceFormat.Bgr565:\n                            colorInternalFormat = RenderbufferStorage.RGB565;\n                            break;\n                        case SurfaceFormat.Bgra4444:\n                            colorInternalFormat = RenderbufferStorage.RGBA4;\n                            break;\n                        case SurfaceFormat.Bgra5551:\n                            colorInternalFormat = RenderbufferStorage.RGB5_A1;\n                            break;\n                        case SurfaceFormat.Single:\n                            colorInternalFormat = RenderbufferStorage.R32F;\n                            break;\n                        case SurfaceFormat.HalfSingle:\n                            colorInternalFormat = RenderbufferStorage.R16F;\n                            break;\n                        case SurfaceFormat.Vector2:\n                            colorInternalFormat = RenderbufferStorage.RG32F;\n                            break;\n                        case SurfaceFormat.HalfVector2:\n                            colorInternalFormat = RenderbufferStorage.RG16F;\n                            break;\n                        case SurfaceFormat.Vector4:\n                            colorInternalFormat = RenderbufferStorage.RGBA32F;\n                            break;\n                        case SurfaceFormat.HalfVector4:\n                            colorInternalFormat = RenderbufferStorage.RGBA16F;\n                            break;\n\n                        default:\n                            break;\n                    }\n\n                    renderTargetGL.GLColorBuffer = GL.GenRenderbuffer();\n                    GL.CheckGLError();\n                    GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLColorBuffer);\n                    GL.CheckGLError();\n\n                    System.Diagnostics.Debug.Assert(GL.RenderbufferStorageMultisample != null);\n                    GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, colorInternalFormat, width, height);\n                    GL.CheckGLError();\n                }\n\n                if (preferredDepthFormat != DepthFormat.None)\n                {\n                    RenderbufferStorage depthInternalFormat = RenderbufferStorage.DepthComponent16;\n                    RenderbufferStorage stencilInternalFormat = (RenderbufferStorage)0;\n                    switch (preferredDepthFormat)\n                    {\n                        case DepthFormat.None:\n                            break;\n\n                        case DepthFormat.Depth16:\n                            depthInternalFormat = RenderbufferStorage.DepthComponent16;\n                            break;\n\n#if GLES\n                        case DepthFormat.Depth24:\n                            if (contextStrategy.Capabilities.SupportsDepth24)\n                                depthInternalFormat = RenderbufferStorage.DepthComponent24oes;\n                            else if (contextStrategy.Capabilities.SupportsDepthNonLinear)\n                                depthInternalFormat = RenderbufferStorage.DepthComponent16NonlinearNv;\n                            else\n                                depthInternalFormat = RenderbufferStorage.DepthComponent16;\n                            break;\n\n                        case DepthFormat.Depth24Stencil8:\n                            if (contextStrategy.Capabilities.SupportsPackedDepthStencil)\n                                depthInternalFormat = RenderbufferStorage.Depth24Stencil8oes;\n                            else\n                            {\n                                if (contextStrategy.Capabilities.SupportsDepth24)\n                                    depthInternalFormat = RenderbufferStorage.DepthComponent24oes;\n                                else if (contextStrategy.Capabilities.SupportsDepthNonLinear)\n                                    depthInternalFormat = RenderbufferStorage.DepthComponent16NonlinearNv;\n                                else\n                                    depthInternalFormat = RenderbufferStorage.DepthComponent16;\n                                stencilInternalFormat = RenderbufferStorage.StencilIndex8;\n                            }\n                            break;\n\n#else\n                        case DepthFormat.Depth24:\n                            depthInternalFormat = RenderbufferStorage.DepthComponent24;\n                            break;\n\n                        case DepthFormat.Depth24Stencil8:\n                            depthInternalFormat = RenderbufferStorage.Depth24Stencil8;\n                            break;\n#endif\n\n                        default:\n                            throw new InvalidOperationException(\"preferredDepthFormat\");\n                    }\n\n                    if (depthInternalFormat != 0)\n                    {\n                        renderTargetGL.GLDepthBuffer = GL.GenRenderbuffer();\n                        GL.CheckGLError();\n                        GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLDepthBuffer);\n                        GL.CheckGLError();\n                        if (multiSampleCount > 0)\n                        {\n                            GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, depthInternalFormat, width, height);\n                            GL.CheckGLError();\n                        }\n                        else\n                        {\n                            GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, depthInternalFormat, width, height);\n                            GL.CheckGLError();\n                        }\n                        if (preferredDepthFormat == DepthFormat.Depth24Stencil8)\n                        {\n                            renderTargetGL.GLStencilBuffer = renderTargetGL.GLDepthBuffer;\n                            if (stencilInternalFormat != 0)\n                            {\n                                renderTargetGL.GLStencilBuffer = GL.GenRenderbuffer();\n                                GL.CheckGLError();\n                                GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLStencilBuffer);\n                                GL.CheckGLError();\n                                if (multiSampleCount > 0)\n                                {\n                                    System.Diagnostics.Debug.Assert(GL.RenderbufferStorageMultisample != null);\n                                    GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, stencilInternalFormat, width, height);\n                                    GL.CheckGLError();\n                                }\n                                else\n                                {\n                                    GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, stencilInternalFormat, width, height);\n                                    GL.CheckGLError();\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n            return;\n        }\n\n        internal static void PlatformDeleteRenderTarget(IRenderTargetStrategyGL renderTargetGL, GraphicsContextStrategy contextStrategy)\n        {\n            contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindDisposeContext();\n            try\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                if (renderTargetGL.GLColorBuffer != 0)\n                {\n                    GL.DeleteRenderbuffer(renderTargetGL.GLColorBuffer);\n                    GL.CheckGLError();\n                }\n                if (renderTargetGL.GLStencilBuffer != 0 && renderTargetGL.GLStencilBuffer != renderTargetGL.GLDepthBuffer)\n                {\n                    GL.DeleteRenderbuffer(renderTargetGL.GLStencilBuffer);\n                    GL.CheckGLError();\n                }\n                if (renderTargetGL.GLDepthBuffer != 0)\n                {\n                    GL.DeleteRenderbuffer(renderTargetGL.GLDepthBuffer);\n                    GL.CheckGLError();\n                }\n\n                contextStrategy.ToConcrete<ConcreteGraphicsContext>().PlatformUnbindRenderTarget(renderTargetGL);\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindDisposeContext();\n            }\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            if (_glTexture > 0)\n            {\n                if (!GraphicsDevice.IsDisposed)\n                {\n                    var GL = _contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                    GL.DeleteTexture(_glTexture);\n                    GL.CheckGLError();\n                }\n            }\n            _glTexture = -1;\n            _glLastSamplerState = null; \n\n            base.PlatformGraphicsContextLost();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n            \n            if (_glTexture > 0)\n            {\n                _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindDisposeContext();\n                try\n                {\n                    var GL = _contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                    GL.DeleteTexture(_glTexture);\n                    GL.CheckGLError();\n                }\n                finally\n                {\n                    _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindDisposeContext();\n                }\n            }\n            _glTexture = -1;\n\n            _glLastSamplerState = null;\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteTexture2D.Stream.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\n#if DESKTOPGL\nusing StbImageWriteSharp;\n#endif\n\n#if ANDROID\nusing Android.Graphics;\n#endif\n\n#if IOS || TVOS\nusing UIKit;\nusing CoreGraphics;\nusing Foundation;\nusing Microsoft.Xna.Platform.Graphics.Utilities.Png;\n#endif\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal partial class ConcreteTexture2D\n    {\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, Stream stream)\n            : base(contextStrategy, SurfaceFormat.Color, 1)\n        {\n            this._arraySize = 1;\n            \n            // Rewind stream if it is at end\n            if (stream.CanSeek && stream.Length == stream.Position)\n                stream.Seek(0, SeekOrigin.Begin);\n\n#if DESKTOPGL && (NET40 || NET40_OR_GREATER)\n            PlatformFromStream_DESKTOPGL(contextStrategy, stream, out this._width, out this._height);\n#elif ANDROID\n            PlatformFromStream_ANDROID(contextStrategy, stream, out this._width, out this._height);\n#elif IOS || TVOS\n            PlatformFromStream_IOS(contextStrategy, stream, out this._width, out this._height);\n#else\n            if (stream.CanSeek)\n            {\n                PlatformFromStream_ImageSharp(contextStrategy, stream, out this._width, out this._height);\n            }\n            else\n            {\n                // If stream doesn't provide seek functionality, use MemoryStream instead\n                using (Stream ms = new MemoryStream())\n                {\n                    stream.CopyTo(ms);\n                    ms.Seek(0, SeekOrigin.Begin);\n                    PlatformFromStream_ImageSharp(contextStrategy, ms, out this._width, out this._height);\n                }\n            }\n\n#endif\n        }\n\n        private unsafe void PlatformFromStream_ImageSharp(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height)\n        {\n            // The data returned is always four channel BGRA\n            StbImageSharp.ImageResult result = StbImageSharp.ImageResult.FromStream(stream, StbImageSharp.ColorComponents.RedGreenBlueAlpha);\n            width = result.Width;\n            height = result.Height;\n            ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height);\n\n            this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false);\n            this.SetData<byte>(0, result.Data, 0, result.Data.Length);\n        }\n\n        #region DESKTOPGL \n#if DESKTOPGL && (NET40 || NET40_OR_GREATER)\n        private unsafe void PlatformFromStream_DESKTOPGL(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height)\n        {\n            System.Drawing.Bitmap image = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromStream(stream);\n            try\n            {\n                if ((image.PixelFormat & System.Drawing.Imaging.PixelFormat.Indexed) != 0)\n                    image = new System.Drawing.Bitmap(image.Width, image.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);\n\n                width = image.Width;\n                height = image.Height;\n                ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height);\n\n                byte[] data = new byte[width * height * 4];\n\n                System.Drawing.Imaging.BitmapData bitmapData = null;\n                try\n                {\n                    bitmapData = image.LockBits(new System.Drawing.Rectangle(0, 0, image.Width, image.Height),\n                        System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);\n\n                    if (bitmapData.Stride != image.Width * 4)\n                        throw new NotImplementedException();\n\n                    Marshal.Copy(bitmapData.Scan0, data, 0, data.Length);\n                }\n                finally\n                {\n                    image.UnlockBits(bitmapData);\n                }\n                \n                // Convert from ARGB to ABGR\n                ConvertToABGR_DESKTOPGL(width, height, data);\n\n                this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false);\n                this.SetData<byte>(0, data, 0, data.Length);\n            }\n            finally\n            {\n                image.Dispose();\n            }\n        }\n        \n        private unsafe static void ConvertToABGR_DESKTOPGL(int pixelWidth, int pixelHeight, byte[] data)\n        {            \n            int pixelCount = pixelWidth * pixelHeight;\n            fixed (byte* pData = data)\n            {\n                for (int i = 0; i < pixelCount; i++)\n                {\n                    byte t = pData[i * 4 + 0];\n                    pData[i * 4 + 0] = pData[i * 4 + 2];\n                    pData[i * 4 + 2] = t;\n                }\n            }\n        }\n#endif\n        #endregion DESKTOPGL\n\n        #region ANDROID\n#if ANDROID\n        private unsafe void PlatformFromStream_ANDROID(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height)\n        {\n            using (Android.Graphics.Bitmap image = Android.Graphics.BitmapFactory.DecodeStream(stream, null,\n                new Android.Graphics.BitmapFactory.Options\n                {\n                    InScaled = false,\n                    InDither = false,\n                    InJustDecodeBounds = false,\n                    InPurgeable = true,\n                    InInputShareable = true,\n                    InPremultiplied = false,\n                }))\n            {\n                width = image.Width;\n                height = image.Height;\n                ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height);\n\n                int[] data = new int[width * height];\n                if ((width != image.Width) || (height != image.Height))\n                {\n                    using (Android.Graphics.Bitmap imagePadded = Android.Graphics.Bitmap.CreateBitmap(width, height, Android.Graphics.Bitmap.Config.Argb8888))\n                    {\n                        Android.Graphics.Canvas canvas = new Android.Graphics.Canvas(imagePadded);\n                        canvas.DrawARGB(0, 0, 0, 0);\n                        canvas.DrawBitmap(image, 0, 0, null);\n                        imagePadded.GetPixels(data, 0, width, 0, 0, width, height);\n                        imagePadded.Recycle();\n                    }\n                }\n                else\n                {\n                    image.GetPixels(data, 0, width, 0, 0, width, height);\n                }\n                image.Recycle();\n\n                // Convert from ARGB to ABGR\n                ConvertToABGR_ANDROID(width, height, data);\n\n                this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false);\n                this.SetData<int>(0, data, 0, data.Length);\n            }\n        }\n\n        //Converts Pixel Data from ARGB to ABGR\n        private void ConvertToABGR_ANDROID(int pixelWidth, int pixelHeight, int[] pixels)\n        {\n            int pixelCount = pixelWidth * pixelHeight;\n            for (int i = 0; i < pixelCount; i++)\n            {\n                uint pixel = (uint)pixels[i];\n                pixels[i] = (int)((pixel & 0xFF00FF00) | ((pixel & 0x00FF0000) >> 16) | ((pixel & 0x000000FF) << 16));\n            }\n        }\n#endif\n        #endregion ANDROID\n\n        #region IOS || TVOS\n#if IOS || TVOS\n        private unsafe void PlatformFromStream_IOS(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height)\n        {\n            using (UIImage uiImage = UIImage.LoadFromData(NSData.FromStream(stream)))\n            {\n                CGImage cgImage = uiImage.CGImage;\n                width = (int)cgImage.Width;\n                height = (int)cgImage.Height;\n                ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height);\n                \n                byte[] data = new byte[width * height * 4];\n\n                CGColorSpace colorSpace = CGColorSpace.CreateDeviceRGB();\n                CGBitmapContext bitmapContext = new CGBitmapContext(data, width, height, 8, width * 4, colorSpace,\n                    CGBitmapFlags.Last // CGBitmapFlags.PremultipliedLast\n                    );\n\n                bitmapContext.DrawImage(new System.Drawing.RectangleF(0, 0, width, height), cgImage);\n                bitmapContext.Dispose();\n                colorSpace.Dispose();\n\n                this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false);\n                this.SetData<byte>(0, data, 0, data.Length);\n            }\n        }\n#endif\n        #endregion IOS || TVOS\n\n\n        private static unsafe void ValidateBounds(GraphicsDeviceStrategy deviceStrategy, int width, int height)\n        {\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && (width > 2048 || height > 2048))\n                throw new NotSupportedException(\"Reach profile supports a maximum Texture2D size of 2048\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && (width > 4096 || height > 4096))\n                throw new NotSupportedException(\"HiDef profile supports a maximum Texture2D size of 4096\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 8192 || height > 8192))\n                throw new NotSupportedException(\"FL10_0 profile supports a maximum Texture2D size of 8192\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 8192 || height > 8192))\n                throw new NotSupportedException(\"FL10_1 profile supports a maximum Texture2D size of 8192\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 16384 || height > 16384))\n                throw new NotSupportedException(\"FL11_0 profile supports a maximum Texture2D size of 16384\");\n            if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 16384 || height > 16384))\n                throw new NotSupportedException(\"FL11_1 profile supports a maximum Texture2D size of 16384\");\n        }\n\n        public unsafe void SaveAsPng(Stream stream, int width, int height)\n        {\n\t        if (stream == null)\n\t\t          throw new ArgumentNullException(\"stream\", \"'stream' cannot be null\");\n\t        if (width <= 0)\n\t\t          throw new ArgumentOutOfRangeException(\"width\", width, \"'width' cannot be less than or equal to zero\");\n\t        if (height <= 0)\n\t\t          throw new ArgumentOutOfRangeException(\"height\", height, \"'height' cannot be less than or equal to zero\");\n\n#if DESKTOPGL\n            Color[] data = TextureHelpers.GetColorData(this);\n            fixed (Color* pData = data)\n            {\n                ImageWriter writer = new ImageWriter();\n                writer.WritePng(pData, width, height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream);\n            }\n#elif ANDROID\n            SaveAsImage(stream, width, height, Bitmap.CompressFormat.Png);\n#else\n            PngWriter pngWriter = new PngWriter();\n            pngWriter.Write(this, stream);\n#endif\n        }\n\n        public unsafe void SaveAsJpeg(Stream stream, int width, int height)\n        {\n            if (stream == null)\n                throw new ArgumentNullException(\"stream\", \"'stream' cannot be null\");\n            if (width <= 0)\n                throw new ArgumentOutOfRangeException(\"width\", width, \"'width' cannot be less than or equal to zero\");\n            if (height <= 0)\n                throw new ArgumentOutOfRangeException(\"height\", height, \"'height' cannot be less than or equal to zero\");\n\n#if DESKTOPGL\n            Color[] data = TextureHelpers.GetColorData(this);\n            fixed (Color* pData = data)\n            {\n                ImageWriter writer = new ImageWriter();\n                writer.WriteJpg(pData, width, height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream, 90);\n            }\n#elif ANDROID\n            SaveAsImage(stream, width, height, Bitmap.CompressFormat.Jpeg);\n#else\n            throw new NotImplementedException();\n#endif\n        }\n\n#if ANDROID\n        private void SaveAsImage(Stream stream, int width, int height, Bitmap.CompressFormat format)\n        {\n            int[] data = new int[width * height];\n            GetData<int>(0, 0, Bounds, data, 0, data.Length);\n            \n            // internal structure is BGR while bitmap expects RGB\n            for (int i = 0; i < data.Length; i++)\n            {\n                uint pixel = (uint)data[i];\n                data[i] = (int)((pixel & 0xFF00FF00) | ((pixel & 0x00FF0000) >> 16) | ((pixel & 0x000000FF) << 16));\n            }\n            \n            using (Bitmap bitmap = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888))\n            {\n                bitmap.SetPixels(data, 0, width, 0, 0, width, height);\n                bitmap.Compress(format, 100, stream);\n                bitmap.Recycle();\n            }\n        }\n#endif\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteTexture2D.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Utilities;\nusing GLPixelFormat = Microsoft.Xna.Platform.Graphics.OpenGL.PixelFormat;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal partial class ConcreteTexture2D : ConcreteTexture, ITexture2DStrategy\n    {\n        private readonly int _width;\n        private readonly int _height;\n        private readonly int _arraySize;\n\n        protected readonly bool _shared;\n\n\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared,\n                                   bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height))\n        {\n            this._width  = width;\n            this._height = height;\n            this._arraySize = arraySize;\n\n            this._shared = shared;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height))\n        {\n            this._width  = width;\n            this._height = height;\n            this._arraySize = arraySize;\n\n            this._shared = shared;\n\n            this.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared);\n        }\n\n\n        #region ITexture2DStrategy\n        public int Width { get { return _width; } }\n        public int Height { get { return _height; } }\n        public int ArraySize { get { return _arraySize; } }\n\n        public Rectangle Bounds\n        {\n            get { return new Rectangle(0, 0, this._width, this._height); }\n        }\n\n        public IntPtr GetSharedHandle()\n        {\n            if (this._shared)\n                return new IntPtr(this._glTexture);\n\n            throw new InvalidOperationException();\n        }\n\n        public unsafe void SetData<T>(int level, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                int w, h;\n                TextureHelpers.GetSizeForLevel(Width, Height, level, out w, out h);\n                int fSize = this.Format.GetSize();\n                int elementSizeInByte = sizeof(T);\n\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInByte;\n\n                    System.Diagnostics.Debug.Assert(_glTexture >= 0);\n                    if (!isSharedContext)\n                        ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                    GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                    GL.CheckGLError();\n                    GL.BindTexture(TextureTarget.Texture2D, _glTexture);\n                    GL.CheckGLError();\n\n                    GL.PixelStore(PixelStoreParameter.UnpackAlignment, Math.Min(fSize, 8));\n\n                    if (_glIsCompressedTexture)\n                    {\n                        GL.CompressedTexImage2D(\n                            TextureTarget.Texture2D, level, _glInternalFormat, w, h, 0, elementCount * elementSizeInByte, dataPtr);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        GL.TexImage2D(\n                            TextureTarget.Texture2D, level, _glInternalFormat, w, h, 0, _glFormat, _glType, dataPtr);\n                        GL.CheckGLError();\n                    }\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public unsafe void SetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                int fSize = this.Format.GetSize();\n                int elementSizeInByte = sizeof(T);\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInByte;\n\n                    System.Diagnostics.Debug.Assert(_glTexture >= 0);\n                    if (!isSharedContext)\n                        ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                    GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                    GL.CheckGLError();\n                    GL.BindTexture(TextureTarget.Texture2D, _glTexture);\n                    GL.CheckGLError();\n\n                    GL.PixelStore(PixelStoreParameter.UnpackAlignment, Math.Min(fSize, 8));\n\n                    if (_glIsCompressedTexture)\n                    {\n                        GL.CompressedTexSubImage2D(\n                            TextureTarget.Texture2D, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height,\n                            _glInternalFormat, elementCount * elementSizeInByte, dataPtr);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        GL.TexSubImage2D(\n                            TextureTarget.Texture2D, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height,\n                            _glFormat, _glType, dataPtr);\n                        GL.CheckGLError();\n                    }\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public unsafe void GetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n#if GLES\n                // TODO: check for non renderable formats (formats that can't be attached to FBO)\n\n                int framebufferId = 0;\n                framebufferId = GL.GenFramebuffer();\n                GL.CheckGLError();\n                GL.BindFramebuffer(FramebufferTarget.Framebuffer, framebufferId);\n                GL.CheckGLError();\n                GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, _glTexture, 0);\n                GL.CheckGLError();\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    GL.ReadPixels(checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, dataPtr);\n                    GL.CheckGLError();\n                }\n                GL.DeleteFramebuffer(framebufferId);\n#else\n                // Note: for compressed format Format.GetSize() returns the size of a 4x4 block\n                int fSize = this.Format.GetSize();\n                int w = Math.Max(this.Width >> level, 1);\n                int h = Math.Max(this.Height >> level, 1);\n                int TsizeInBytes = sizeof(T);\n\n                if (!isSharedContext)\n                    ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(TextureTarget.Texture2D, _glTexture);\n                GL.PixelStore(PixelStoreParameter.PackAlignment, Math.Min(TsizeInBytes, 8));\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * TsizeInBytes;\n\n                    if (_glIsCompressedTexture)\n                    {\n                        w = w / 4;\n                        h = h / 4;\n                        int bytes = w * h * fSize;\n                        IntPtr pTemp = Marshal.AllocHGlobal(bytes);\n                        try\n                        {\n                            GL.GetCompressedTexImage(TextureTarget.Texture2D, level, pTemp);\n                            GL.CheckGLError();\n\n                            IntPtr tempPtr = (IntPtr)pTemp;\n                            tempPtr = tempPtr + checkedRect.X / 4 * fSize + checkedRect.Top / 4 * w * fSize;\n                            int fWidthSize = w * fSize;\n                            int tRectWidthSize = checkedRect.Width / 4 * fSize;\n                            int rowCount = checkedRect.Height / 4;\n                            for (int r = 0; r < rowCount; r++)\n                            {\n                                MemCopyHelper.MemoryCopy(\n                                    tempPtr + r * fWidthSize,\n                                    dataPtr + r * tRectWidthSize,\n                                    tRectWidthSize);\n                            }\n                        }\n                        finally\n                        {\n                            Marshal.FreeHGlobal(pTemp);\n                        }\n                    }\n                    else\n                    {\n                        if (level == 0\n                        &&  checkedRect.X == 0 && checkedRect.Y == 0\n                        &&  checkedRect.Width == this.Width && checkedRect.Height == this.Height\n                        &&  startIndex == 0 && elementCount == data.Length)\n                        {\n                            GL.GetTexImage(TextureTarget.Texture2D, level, _glFormat, _glType, dataPtr);\n                            GL.CheckGLError();\n                        }\n                        else\n                        {\n                            int bytes = w * h * fSize;\n                            IntPtr pTemp = Marshal.AllocHGlobal(bytes);\n                            try\n                            {\n                                GL.GetTexImage(TextureTarget.Texture2D, level, _glFormat, _glType, pTemp);\n                                GL.CheckGLError();\n\n                                IntPtr tempPtr = (IntPtr)pTemp;\n                                tempPtr = tempPtr + checkedRect.X * fSize + checkedRect.Top * w * fSize;\n                                int fWidthSize = w * fSize;\n                                int tRectWidthSize = checkedRect.Width * fSize;\n                                int rowCount = checkedRect.Height;\n                                for (int r = 0; r < rowCount; r++)\n                                {\n                                    MemCopyHelper.MemoryCopy(\n                                        tempPtr + r * fWidthSize,\n                                        dataPtr + r * tRectWidthSize,\n                                        tRectWidthSize);\n                                }\n                            }\n                            finally\n                            {\n                                Marshal.FreeHGlobal(pTemp);\n                            }\n                        }\n                    }\n                }\n#endif\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect)\n        {\n            int blockWidth, blockHeight;\n            Format.GetBlockSize(out blockWidth, out blockHeight);\n            int blockWidthMinusOne = blockWidth - 1;\n            int blockHeightMinusOne = blockHeight - 1;\n            // round x and y down to next multiple of block size; width and height up to next multiple of block size\n            int roundedWidth = (rect.Width + blockWidthMinusOne) & ~blockWidthMinusOne;\n            int roundedHeight = (rect.Height + blockHeightMinusOne) & ~blockHeightMinusOne;\n            // OpenGL only: The last two mip levels require the width and height to be passed\n            // as 2x2 and 1x1, but there needs to be enough data passed to occupy a full block.\n            checkedRect = new Rectangle(rect.X & ~blockWidthMinusOne, rect.Y & ~blockHeightMinusOne,\n                                        (rect.Width < blockWidth && textureBounds.Width < blockWidth) ? textureBounds.Width : roundedWidth,\n                                        (rect.Height < blockHeight && textureBounds.Height < blockHeight) ? textureBounds.Height : roundedHeight);\n            if (Format == SurfaceFormat.RgbPvrtc2Bpp || Format == SurfaceFormat.RgbaPvrtc2Bpp)\n            {\n                return (Math.Max(checkedRect.Width, 16) * Math.Max(checkedRect.Height, 8) * 2 + 7) / 8;\n            }\n            else if (Format == SurfaceFormat.RgbPvrtc4Bpp || Format == SurfaceFormat.RgbaPvrtc4Bpp)\n            {\n                return (Math.Max(checkedRect.Width, 8) * Math.Max(checkedRect.Height, 8) * 4 + 7) / 8;\n            }\n            else\n            {\n                return roundedWidth * roundedHeight * fSize / (blockWidth * blockHeight);\n            }\n        }\n        #endregion ITexture2DStrategy\n\n\n        internal void PlatformConstructTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared)\n        {\n            _glTarget = TextureTarget.Texture2D;\n            ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy,\n                out _glInternalFormat,\n                out _glFormat,\n                out _glType,\n                out _glIsCompressedTexture);\n\n            bool isSharedContext = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                System.Diagnostics.Debug.Assert(_glTexture < 0);\n                _glTexture = GL.GenTexture();\n                GL.CheckGLError();\n\n                if (!isSharedContext)\n                    ((IPlatformTextureCollection)contextStrategy.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(TextureTarget.Texture2D, _glTexture);\n                GL.CheckGLError();\n\n                // Set mipMap levels\n#if !GLES\n                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBaseLevel, 0);\n                GL.CheckGLError();\n#endif\n\n\n                int w = width;\n                int h = height;\n                int level = 0;\n                while (true)\n                {\n                    if (_glIsCompressedTexture)\n                    {\n                        int imageSize = 0;\n                        // PVRTC has explicit calculations for imageSize\n                        // https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt\n                        if (format == SurfaceFormat.RgbPvrtc2Bpp || format == SurfaceFormat.RgbaPvrtc2Bpp)\n                        {\n                            imageSize = (Math.Max(w, 16) * Math.Max(h, 8) * 2 + 7) / 8;\n                        }\n                        else if (format == SurfaceFormat.RgbPvrtc4Bpp || format == SurfaceFormat.RgbaPvrtc4Bpp)\n                        {\n                            imageSize = (Math.Max(w, 8) * Math.Max(h, 8) * 4 + 7) / 8;\n                        }\n                        else\n                        {\n                            int blockSize = format.GetSize();\n                            int blockWidth, blockHeight;\n                            format.GetBlockSize(out blockWidth, out blockHeight);\n                            int wBlocks = (w + (blockWidth - 1)) / blockWidth;\n                            int hBlocks = (h + (blockHeight - 1)) / blockHeight;\n                            imageSize = wBlocks * hBlocks * blockSize;\n                        }\n                        GL.CompressedTexImage2D(TextureTarget.Texture2D, level, _glInternalFormat, w, h, 0, imageSize, IntPtr.Zero);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        GL.TexImage2D(TextureTarget.Texture2D, level, _glInternalFormat, w, h, 0, _glFormat, _glType, IntPtr.Zero);\n                        GL.CheckGLError();\n                    }\n\n                    if ((w == 1 && h == 1) || !mipMap)\n                        break;\n                    if (w > 1)\n                        w = w / 2;\n                    if (h > 1)\n                        h = h / 2;\n                    ++level;\n                }\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteTexture3D.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTexture3D : ConcreteTexture, ITexture3DStrategy\n    {\n        private readonly int _width;\n        private readonly int _height;\n        private readonly int _depth;\n\n\n        internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format,\n                                   bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth))\n        {\n            this._width = width;\n            this._height = height;\n            this._depth = depth;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth))\n        {\n            this._width = width;\n            this._height = height;\n            this._depth = depth;\n\n            this.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format);\n        }\n\n\n        #region ITexture3DStrategy\n        public int Width { get { return _width; } }\n        public int Height { get { return _height; } }\n        public int Depth { get { return _depth; } }\n\n        public unsafe void SetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            int width = right - left;\n            int height = bottom - top;\n            int depth = back - front;\n\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                int elementSizeInByte = sizeof(T);\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInByte;\n\n                    if (!isSharedContext)\n                        ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                    GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                    GL.CheckGLError();\n                    GL.BindTexture(_glTarget, _glTexture);\n                    GL.CheckGLError();\n\n                    GL.TexSubImage3D(_glTarget, level, left, top, front, width, height, depth, _glFormat, _glType, dataPtr);\n                    GL.CheckGLError();\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public void GetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n             where T : struct\n        {\n            throw new NotImplementedException();\n        }\n        #endregion ITexture3DStrategy\n\n\n        internal void PlatformConstructTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            _glTarget = TextureTarget.Texture3D;\n\n            bool isSharedContext = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                _glTexture = GL.GenTexture();\n                GL.CheckGLError();\n\n                if (!isSharedContext)\n                    ((IPlatformTextureCollection)contextStrategy.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(_glTarget, _glTexture);\n                GL.CheckGLError();\n\n                ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy,\n                    out _glInternalFormat,\n                    out _glFormat,\n                    out _glType,\n                    out _glIsCompressedTexture);\n\n                GL.TexImage3D(_glTarget, 0, _glInternalFormat, width, height, depth, 0, _glFormat, _glType, IntPtr.Zero);\n                GL.CheckGLError();\n\n                if (mipMap)\n                    throw new NotImplementedException(\"Texture3D does not yet support mipmaps.\");\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteTextureCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteTextureCollection : TextureCollectionStrategy\n    {\n        internal TextureTarget[] _targets;\n\n        internal uint InternalDirty\n        {\n            get { return base._dirty; }\n            set { base._dirty = value; }\n        }\n\n\n        internal ConcreteTextureCollection(GraphicsContextStrategy contextStrategy, int capacity)\n            : base(contextStrategy, capacity)\n        {\n            _targets = new TextureTarget[capacity];\n            for (int i = 0; i < _targets.Length; i++)\n                _targets[i] = 0;\n        }\n\n\n        public override void Clear()\n        {\n            base.Clear();\n            for (int i = 0; i < _targets.Length; i++)\n                _targets[i] = 0;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/ConcreteTextureCube.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Utilities;\nusing GLPixelFormat = Microsoft.Xna.Platform.Graphics.OpenGL.PixelFormat;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTextureCube : ConcreteTexture, ITextureCubeStrategy\n    {\n        private readonly int _size;\n\n\n        internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format,\n                                     bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size))\n        {\n            this._size = size;\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size))\n        {\n            this._size = size;\n\n            this.PlatformConstructTextureCube(contextStrategy, size, mipMap, format);\n        }\n\n\n        #region ITextureCubeStrategy\n        public int Size { get { return _size; } }\n\n        public unsafe void SetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                int elementSizeInBytes = sizeof(T);\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                    if (!isSharedContext)\n                        ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                    GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                    GL.CheckGLError();\n                    GL.BindTexture(TextureTarget.TextureCubeMap, _glTexture);\n                    GL.CheckGLError();\n\n                    TextureTarget target = ConcreteTextureCube.GetGLCubeFace(face);\n                    if (_glIsCompressedTexture)\n                    {\n                        GL.CompressedTexSubImage2D(\n                            target, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height,\n                            _glInternalFormat, elementCount * elementSizeInBytes, dataPtr);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        GL.TexSubImage2D(\n                            target, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, dataPtr);\n                        GL.CheckGLError();\n                    }\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public unsafe void GetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n#if OPENGL && DESKTOPGL\n                TextureTarget target = ConcreteTextureCube.GetGLCubeFace(face);\n                // Note: for compressed format Format.GetSize() returns the size of a 4x4 block\n                int fSize = this.Format.GetSize();\n                int w = Math.Max(this.Size >> level, 1);\n                int h = Math.Max(this.Size >> level, 1);\n                int TsizeInBytes = sizeof(T);\n\n                if (!isSharedContext)\n                    ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(TextureTarget.TextureCubeMap, _glTexture);\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * TsizeInBytes;\n\n                    if (_glIsCompressedTexture)\n                    {\n                        w = w / 4;\n                        h = h / 4;\n                        int bytes = w * h * fSize;\n                        IntPtr pTemp = Marshal.AllocHGlobal(bytes);\n                        try\n                        {\n                            GL.GetCompressedTexImage(target, level, pTemp);\n                            GL.CheckGLError();\n\n                            IntPtr tempPtr = (IntPtr)pTemp;\n                            tempPtr = tempPtr + checkedRect.X / 4 * fSize + checkedRect.Top / 4 * w * fSize;\n                            int fWidthSize = w * fSize;\n                            int tRectWidthSize = checkedRect.Width / 4 * fSize;\n                            int rowCount = checkedRect.Height / 4;\n                            for (int r = 0; r < rowCount; r++)\n                            {\n                                MemCopyHelper.MemoryCopy(\n                                    tempPtr + r * fWidthSize,\n                                    dataPtr + r * tRectWidthSize,\n                                    tRectWidthSize);\n                            }\n                        }\n                        finally\n                        {\n                            Marshal.FreeHGlobal(pTemp);\n                        }\n                    }\n                    else\n                    {\n                        if (level == 0\n                        && checkedRect.X == 0 && checkedRect.Y == 0\n                        && checkedRect.Width == this.Size && checkedRect.Height == this.Size\n                        && startIndex == 0 && elementCount == data.Length)\n                        {\n                            GL.GetTexImage(target, level, _glFormat, _glType, dataPtr);\n                            GL.CheckGLError();\n                        }\n                        else\n                        {\n                            int bytes = w * h * fSize;\n                            IntPtr pTemp = Marshal.AllocHGlobal(bytes);\n                            try\n                            {\n                                GL.GetTexImage(target, level, _glFormat, _glType, pTemp);\n                                GL.CheckGLError();\n\n                                IntPtr tempPtr = (IntPtr)pTemp;\n                                tempPtr = tempPtr + checkedRect.X * fSize + checkedRect.Top * w * fSize;\n                                int fWidthSize = w * fSize;\n                                int tRectWidthSize = checkedRect.Width * fSize;\n                                int rowCount = checkedRect.Height;\n                                for (int r = 0; r < rowCount; r++)\n                                {\n                                    MemCopyHelper.MemoryCopy(\n                                        tempPtr + r * fWidthSize,\n                                        dataPtr + r * tRectWidthSize,\n                                        tRectWidthSize);\n                                }\n                            }\n                            finally\n                            {\n                                Marshal.FreeHGlobal(pTemp);\n                            }\n                        }\n                    }\n                }\n#else\n                throw new NotImplementedException();\n#endif\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect)\n        {\n            // round x and y down to next multiple of four; width and height up to next multiple of four\n            int roundedWidth = (rect.Width + 3) & ~0x3;\n            int roundedHeight = (rect.Height + 3) & ~0x3;\n            // OpenGL only: The last two mip levels require the width and height to be passed\n            // as 2x2 and 1x1, but there needs to be enough data passed to occupy a 4x4 block.\n            checkedRect = new Rectangle(rect.X & ~0x3, rect.Y & ~0x3,\n                                        (rect.Width < 4 && textureBounds.Width < 4) ? textureBounds.Width : roundedWidth,\n                                        (rect.Height < 4 && textureBounds.Height < 4) ? textureBounds.Height : roundedHeight);\n            return (roundedWidth * roundedHeight * fSize / 16);\n        }\n        #endregion ITextureCubeStrategy\n\n\n\n        internal static TextureTarget GetGLCubeFace(CubeMapFace face)\n        {\n            switch (face)\n            {\n                case CubeMapFace.PositiveX:\n                    return TextureTarget.TextureCubeMapPositiveX;\n                case CubeMapFace.NegativeX:\n                    return TextureTarget.TextureCubeMapNegativeX;\n                case CubeMapFace.PositiveY:\n                    return TextureTarget.TextureCubeMapPositiveY;\n                case CubeMapFace.NegativeY:\n                    return TextureTarget.TextureCubeMapNegativeY;\n                case CubeMapFace.PositiveZ:\n                    return TextureTarget.TextureCubeMapPositiveZ;\n                case CubeMapFace.NegativeZ:\n                    return TextureTarget.TextureCubeMapNegativeZ;\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n\n        internal void PlatformConstructTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n        {\n            _glTarget = TextureTarget.TextureCubeMap;\n\n            bool isSharedContext = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                _glTexture = GL.GenTexture();\n                GL.CheckGLError();\n\n                if (!isSharedContext)\n                    ((IPlatformTextureCollection)contextStrategy.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(TextureUnit.Texture0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(TextureTarget.TextureCubeMap, _glTexture);\n                GL.CheckGLError();\n\n                ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy,\n                    out _glInternalFormat,\n                    out _glFormat,\n                    out _glType,\n                    out _glIsCompressedTexture);\n\n                for (int i = 0; i < 6; i++)\n                {\n                    TextureTarget target = ConcreteTextureCube.GetGLCubeFace((CubeMapFace)i);\n\n                    if (_glIsCompressedTexture)\n                    {\n                        int imageSize = 0;\n                        switch (format)\n                        {\n                            case SurfaceFormat.RgbPvrtc2Bpp:\n                            case SurfaceFormat.RgbaPvrtc2Bpp:\n                                imageSize = (Math.Max(size, 16) * Math.Max(size, 8) * 2 + 7) / 8;\n                                break;\n                            case SurfaceFormat.RgbPvrtc4Bpp:\n                            case SurfaceFormat.RgbaPvrtc4Bpp:\n                                imageSize = (Math.Max(size, 8) * Math.Max(size, 8) * 4 + 7) / 8;\n                                break;\n                            case SurfaceFormat.Dxt1:\n                            case SurfaceFormat.Dxt1a:\n                            case SurfaceFormat.Dxt1SRgb:\n                            case SurfaceFormat.Dxt3:\n                            case SurfaceFormat.Dxt3SRgb:\n                            case SurfaceFormat.Dxt5:\n                            case SurfaceFormat.Dxt5SRgb:\n                            case SurfaceFormat.RgbEtc1:\n                            case SurfaceFormat.Rgb8Etc2:\n                            case SurfaceFormat.Srgb8Etc2:\n                            case SurfaceFormat.Rgb8A1Etc2:\n                            case SurfaceFormat.Srgb8A1Etc2:\n                            case SurfaceFormat.Rgba8Etc2:\n                            case SurfaceFormat.SRgb8A8Etc2:\n                            case SurfaceFormat.RgbaAtcExplicitAlpha:\n                            case SurfaceFormat.RgbaAtcInterpolatedAlpha:\n                                imageSize = (size + 3) / 4 * ((size + 3) / 4) * format.GetSize();\n                                break;\n                            default:\n                                throw new NotSupportedException();\n                        }\n                        GL.CompressedTexImage2D(target, 0, _glInternalFormat, size, size, 0, imageSize, IntPtr.Zero);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        GL.TexImage2D(target, 0, _glInternalFormat, size, size, 0, _glFormat, _glType, IntPtr.Zero);\n                        GL.CheckGLError();\n                    }\n                }\n\n                if (mipMap)\n                {\n                    System.Diagnostics.Debug.Assert(TextureTarget.TextureCubeMap == _glTarget);\n#if IOS || TVOS || ANDROID\n                    GL.GenerateMipmap(TextureTarget.TextureCubeMap);\n                    GL.CheckGLError();\n#else\n                    GL.GenerateMipmap(_glTarget);\n                    GL.CheckGLError();\n                    // This updates the mipmaps after a change in the base texture\n                    GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.GenerateMipmap, (int)Bool.True);\n#endif\n                }\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/GLExtensions.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    static class GLExtensions\n    {\n        public static ComparisonFunc ToGLComparisonFunction(this CompareFunction compare)\n        {\n            switch (compare)\n            {\n                case CompareFunction.Always:\n                    return ComparisonFunc.Always;\n                case CompareFunction.Equal:\n                    return ComparisonFunc.Equal;\n                case CompareFunction.Greater:\n                    return ComparisonFunc.Greater;\n                case CompareFunction.GreaterEqual:\n                    return ComparisonFunc.Gequal;\n                case CompareFunction.Less:\n                    return ComparisonFunc.Less;\n                case CompareFunction.LessEqual:\n                    return ComparisonFunc.Lequal;\n                case CompareFunction.Never:\n                    return ComparisonFunc.Never;\n                case CompareFunction.NotEqual:\n                    return ComparisonFunc.Notequal;\n\n                default:\n                    return ComparisonFunc.Always;\n            }\n        }\n\n        internal static int ToGLNumberOfElements(this VertexElementFormat elementFormat)\n        {\n            switch (elementFormat)\n            {\n                case VertexElementFormat.Single:\n                    return 1;\n                case VertexElementFormat.Vector2:\n                    return 2;\n                case VertexElementFormat.Vector3:\n                    return 3;\n                case VertexElementFormat.Vector4:\n                    return 4;\n                case VertexElementFormat.Color:\n                    return 4;\n                case VertexElementFormat.Byte4:\n                    return 4;\n                case VertexElementFormat.Short2:\n                    return 2;\n                case VertexElementFormat.Short4:\n                    return 4;\n\n                case VertexElementFormat.NormalizedShort2:\n                    return 2;\n                case VertexElementFormat.NormalizedShort4:\n                    return 4;\n\n                case VertexElementFormat.HalfVector2:\n                    return 2;\n                case VertexElementFormat.HalfVector4:\n                    return 4;\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        internal static VertexAttribPointerType ToGLVertexAttribPointerType(this VertexElementFormat elementFormat)\n        {\n            switch (elementFormat)\n            {\n                case VertexElementFormat.Single:\n                    return VertexAttribPointerType.Float;\n                case VertexElementFormat.Vector2:\n                    return VertexAttribPointerType.Float;\n                case VertexElementFormat.Vector3:\n                    return VertexAttribPointerType.Float;\n                case VertexElementFormat.Vector4:\n                    return VertexAttribPointerType.Float;\n                case VertexElementFormat.Color:\n                    return VertexAttribPointerType.UnsignedByte;\n                case VertexElementFormat.Byte4:\n                    return VertexAttribPointerType.UnsignedByte;\n                case VertexElementFormat.Short2:\n                    return VertexAttribPointerType.Short;\n                case VertexElementFormat.Short4:\n                    return VertexAttribPointerType.Short;\n\n                case VertexElementFormat.NormalizedShort2:\n                    return VertexAttribPointerType.Short; // UnsignedShort?\n                case VertexElementFormat.NormalizedShort4:\n                    return VertexAttribPointerType.Short; // UnsignedShort?\n\n#if DESKTOPGL // HiDef?\n                case VertexElementFormat.HalfVector2:\n                    return VertexAttribPointerType.HalfFloat;\n                case VertexElementFormat.HalfVector4:\n                    return VertexAttribPointerType.HalfFloat;\n#endif\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        internal static bool ToGLVertexAttribNormalized(this VertexElement element)\n        {\n            // TODO: This may or may not be the right behavor.  \n            //\n            // For instance the VertexElementFormat.Byte4 format is not supposed\n            // to be normalized, but this line makes it so.\n            //\n            // The question is in MS XNA are types normalized based on usage or\n            // normalized based to their format?\n            //\n            if (element.VertexElementUsage == VertexElementUsage.Color)\n                return true;\n\n            switch (element.VertexElementFormat)\n            {\n                case VertexElementFormat.NormalizedShort2:\n                case VertexElementFormat.NormalizedShort4:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n    }\n        \n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/GLVersion.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [StructLayout(LayoutKind.Explicit)]\n    internal struct GLVersion\n    {\n        [FieldOffset(0)]\n        public short Major;\n        [FieldOffset(2)]\n        public short Minor;\n\n        [FieldOffset(0)]\n        public int PackedValue;\n\n        public GLVersion(short major, short minor) : this()\n        {\n            this.Major = major;\n            this.Minor = minor;\n        }\n\n        public GLVersion(int major, int minor) : this()\n        {\n            this.Major = (short)major;\n            this.Minor = (short)minor;\n        }\n\n        public static bool operator <(GLVersion l, GLVersion r)\n        {\n            return l.PackedValue < r.PackedValue;\n        }\n\n        public static bool operator >(GLVersion l, GLVersion r)\n        {\n            return l.PackedValue > r.PackedValue;\n        }\n\n        public static bool operator <=(GLVersion l, GLVersion r)\n        {\n            return l.PackedValue <= r.PackedValue;\n        }\n\n        public static bool operator >=(GLVersion l, GLVersion r)\n        {\n            return l.PackedValue >= r.PackedValue;\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{0}.{1}\", Major, Minor);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/IRenderTargetStrategyGL.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal interface IRenderTargetStrategyGL\n    {\n        int GLTexture { get; }\n        TextureTarget GLTarget { get; }\n        int GLColorBuffer { get; set; }\n        int GLDepthBuffer { get; set; }\n        int GLStencilBuffer { get; set; }\n\n        TextureTarget GetFramebufferTarget(int arraySlice);\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/OpenGL.Common.cs",
    "content": "﻿using System;\n\nnamespace Microsoft.Xna.Platform.Graphics.OpenGL\n{\n    // Required to allow platforms other than iOS use the same code.\n    // just don't include this on iOS\n    [AttributeUsage(AttributeTargets.Delegate)]\n    internal sealed class MonoNativeFunctionWrapper : Attribute\n    {\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Graphics/.GL/OpenGL.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Runtime.CompilerServices;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Vector2 = Microsoft.Xna.Framework.Vector2;\nusing Vector3 = Microsoft.Xna.Framework.Vector3;\nusing Vector4 = Microsoft.Xna.Framework.Vector4;\nusing Matrix = Microsoft.Xna.Framework.Matrix;\n\n#if __IOS__ || __TVOS__\nusing ObjCRuntime;\n#endif\n\n\nnamespace Microsoft.Xna.Platform.Graphics.OpenGL\n{\n    internal enum BufferAccess\n    {\n        ReadOnly  = 0x88B8,\n        WriteOnly = 0x88B9,\n        ReadWrite = 0x88BA,\n    }\n\n    public enum BufferRangeAccess\n    {\n        Read  = 0x0001,\n        Write = 0x0002,\n\n        InvalidateRange  = 0x0004,\n        InvalidateBuffer = 0x0008,\n        FlushExplicit    = 0x0010,\n        Unsynchronized   = 0x0020,\n    }\n\n    internal enum BufferUsageHint\n    {\n        StreamDraw  = 0x88E0,\n        StaticDraw  = 0x88E4,\n        DynamicDraw = 0x88E8,\n    }\n\n    internal enum StencilFace\n    {\n        Front = 0x0404,\n        Back  = 0x0405,\n    }\n\n    internal enum ShaderType\n    {\n        VertexShader   = 0x8B31,\n        FragmentShader = 0x8B30,\n    }\n\n    internal enum ShaderParameter\n    {\n        LogLength     = 0x8B84,\n        CompileStatus = 0x8B81,\n        SourceLength  = 0x8B88,\n    }\n\n    internal enum GetProgramParameterName\n    {\n        LogLength  = 0x8B84,\n        LinkStatus = 0x8B82,\n    }\n\n    internal enum DrawElementsType\n    {\n        UnsignedShort = 0x1403,\n        UnsignedInt   = 0x1405,\n    }\n\n    internal enum QueryTarget\n    {\n        SamplesPassed    = 0x8914,\n        SamplesPassedExt = 0x8C2F,\n    }\n\n    internal enum GetQueryObjectParam\n    {\n        QueryResultAvailable = 0x8867,\n        QueryResult = 0x8866,\n    }\n\n    internal enum BlitFramebufferFilter\n    {\n        Nearest = 0x2600,\n    }\n\n    internal enum ReadBufferMode\n    {\n        ColorAttachment0 = 0x8CE0,\n    }\n\n    internal enum DrawBufferMode\n    {\n        None             = 0x0000,\n        Back             = 0x0405,\n        ColorAttachment0 = 0x8CE0,\n    }\n\n    internal enum FramebufferErrorCode\n    {\n        FramebufferUndefined = 0x8219,\n        FramebufferComplete = 0x8CD5,\n        FramebufferCompleteExt = 0x8CD5,\n        FramebufferIncompleteAttachment = 0x8CD6,\n        FramebufferIncompleteAttachmentExt = 0x8CD6,\n        FramebufferIncompleteMissingAttachment = 0x8CD7,\n        FramebufferIncompleteMissingAttachmentExt = 0x8CD7,\n        FramebufferIncompleteDimensionsExt = 0x8CD9,\n        FramebufferIncompleteFormatsExt = 0x8CDA,\n        FramebufferIncompleteDrawBuffer = 0x8CDB,\n        FramebufferIncompleteDrawBufferExt = 0x8CDB,\n        FramebufferIncompleteReadBuffer = 0x8CDC,\n        FramebufferIncompleteReadBufferExt = 0x8CDC,\n        FramebufferUnsupported = 0x8CDD,\n        FramebufferUnsupportedExt = 0x8CDD,\n        FramebufferIncompleteMultisample = 0x8D56,\n        FramebufferIncompleteLayerTargets = 0x8DA8,\n        FramebufferIncompleteLayerCount = 0x8DA9,\n    }\n\n    internal enum BufferTarget\n    {\n        ArrayBuffer        = 0x8892,\n        ElementArrayBuffer = 0x8893,\n    }\n\n    internal enum RenderbufferTarget\n    {\n        Renderbuffer = 0x8D41,\n    }\n\n    internal enum FramebufferTarget\n    {\n        Framebuffer     = 0x8D40,\n        FramebufferExt  = 0x8D40,\n        ReadFramebuffer = 0x8CA8,\n        DrawFramebuffer = 0x8CA9,\n    }\n\n    internal enum RenderbufferStorage\n    {\n        DepthComponent16 = 0x81A5,\n        DepthComponent24 = 0x81A6,\n        Depth24Stencil8  = 0x88F0,\n\n        // GLES Values\n        DepthComponent24oes = 0x81A6,\n        Depth24Stencil8oes  = 0x88F0,\n        StencilIndex8 = 0x8D48,\n\n        DepthComponent16NonlinearNv = 0x8E2C,\n\n        RGBA8 = 0x8058,\n        RGBA4 = 0x8056,\n        RGB5_A1 = 0x8057,\n        RGB565 = 0x8D62,\n\n        R32F = 0x822E,\n        RG32F = 0x8230,\n        RGBA32F = 0x8814,\n\n        R16F = 0x822D,\n        RG16F = 0x822F,\n        RGBA16F = 0x881A,\n    }\n\n    internal enum EnableCap : int\n    {\n        PointSmooth = 0x0B10,\n        LineSmooth = 0x0B20,\n        CullFace = 0x0B44,\n        Lighting = 0x0B50,\n        ColorMaterial = 0x0B57,\n        Fog = 0x0B60,\n        DepthTest = 0x0B71,\n        StencilTest = 0x0B90,\n        Normalize = 0x0BA1,\n        AlphaTest = 0x0BC0,\n        Dither = 0x0BD0,\n        Blend = 0x0BE2,\n        ColorLogicOp = 0x0BF2,\n        ScissorTest = 0x0C11,\n        Texture2D = 0x0DE1,\n        PolygonOffsetFill = 0x8037,\n        RescaleNormal = 0x803A,\n        VertexArray = 0x8074,\n        NormalArray = 0x8075,\n        ColorArray = 0x8076,\n        TextureCoordArray = 0x8078,\n        Multisample = 0x809D,\n        SampleAlphaToCoverage = 0x809E,\n        SampleAlphaToOne = 0x809F,\n        SampleCoverage = 0x80A0,\n        DebugOutputSynchronous = 0x8242,\n        DepthClamp = 0x864F,\n        DebugOutput = 0x92E0,\n        FramebufferSRGB = 0x8DB9,\n    }\n\n    internal enum VertexAttribPointerType\n    {\n        Byte = 0x1400,\n        UnsignedByte = 0x1401,\n        Short = 0x1402,\n        UnsignedShort = 0x1403,\n        Float = 0x1406,\n        HalfFloat = 0x140B,\n    }\n\n    internal enum CullFaceMode\n    {\n        Back  = 0x0405,\n        Front = 0x0404,\n    }\n\n    internal enum FrontFaceDirection\n    {\n        Cw  = 0x0900,\n        Ccw = 0x0901,\n    }\n\n    internal enum MaterialFace\n    {\n        FrontAndBack = 0x0408,\n    }\n\n    internal enum PolygonMode\n    {\n        Fill = 0x1B02,\n        Line = 0x1B01,\n    }\n\n    internal enum BlendEquationMode\n    {\n        FuncAdd = 0x8006,\n        Max = 0x8008,  // ios MaxExt\n        Min = 0x8007,  // ios MinExt\n        FuncReverseSubtract = 0x800B,\n        FuncSubtract = 0x800A,\n    }\n\n    internal enum BlendingFunc\n    {\n        Zero = 0,\n        SrcColor = 0x0300,\n        OneMinusSrcColor = 0x0301,\n        SrcAlpha = 0x0302,\n        OneMinusSrcAlpha = 0x0303,\n        DstAlpha = 0x0304,\n        OneMinusDstAlpha = 0x0305,\n        DstColor = 0x0306,\n        OneMinusDstColor = 0x0307,\n        SrcAlphaSaturate = 0x0308,\n        ConstantColor = 0x8001,\n        OneMinusConstantColor = 0x8002,\n        ConstantAlpha = 0x8003,\n        OneMinusConstantAlpha = 0x8004,\n        One = 1,\n    }\n\n    internal enum ComparisonFunc\n    {\n        Never    = 0x0200,\n        Less     = 0x0201,\n        Equal    = 0x0202,\n        Greater  = 0x0204,\n\n        Lequal   = 0x0203, // Less | Equal\n        Notequal = 0x0205, // Less | Greater\n        Gequal   = 0x0206, // Equal | Greater\n        Always   = 0x0207, // Less | Equal | Greater\n    }\n\n    internal enum GetPName : int\n    {\n        MajorVersion = 0x821B,\n        MinorVersion = 0x821C,\n        ArrayBufferBinding = 0x8894,\n        MaxTextureImageUnits = 0x8872,\n        MaxVertexTextureImageUnits = 0x8B4C,\n        MaxCombinedTextureImageUnits = 0x8B4D,\n        MaxVertexAttribs = 0x8869,\n        MaxTextureSize = 0x0D33,\n        MaxDrawBuffers = 0x8824,\n        TextureBinding2D = 0x8069,\n        MaxTextureMaxAnisotropyExt = 0x84FF,\n        MaxSamples = 0x8D57,\n        MaxElementsVertices = 0x80E8,\n        MaxElementsIndices  = 0x80E9,\n\n        CompressedTextureFormats = 0x86A3,\n    }\n\n    internal enum StringName\n    {\n        Vendor     = 0x1F00,\n        Renderer   = 0x1F01,\n        Version    = 0x1F02,\n        Extensions = 0x1F03,\n    }\n\n    internal enum FramebufferAttachment\n    {\n        ColorAttachment0     = 0x8CE0,\n        DepthAttachment      = 0x8D00,\n        StencilAttachment    = 0x8D20,\n        ColorAttachmentExt   = 0x1800,\n        DepthAttachementExt  = 0x1801,\n        StencilAttachmentExt = 0x1802,\n    }\n\n    internal enum GLPrimitiveType\n    {\n        Points    = 0x0000,\n        Lines     = 0x0001,\n        LineStrip = 0x0003,\n        Triangles = 0x0004,\n        TriangleStrip = 0x0005,\n    }\n\n    [Flags]\n    internal enum ClearBufferMask\n    {\n        DepthBufferBit   = 0x00000100,\n        StencilBufferBit = 0x00000400,\n        ColorBufferBit   = 0x00004000,\n    }\n\n    internal enum ErrorCode\n    {\n        NO_ERROR          = 0x0000,\n        INVALID_ENUM      = 0x0500,\n        INVALID_VALUE     = 0x0501,\n        INVALID_OPERATION = 0x0502,\n        STACK_OVERFLOW    = 0x0503,\n        STACK_UNDERFLOW   = 0x0504,\n        OUT_OF_MEMORY     = 0x0505,\n        INVALID_FRAMEBUFFER_OPERATION = 0x0506,\n        CONTEXT_LOST      = 0x0507, //(with OpenGL 4.5 or ARB_KHR_robustness)\n    }\n\n    internal enum TextureUnit\n    {\n        Texture0 = 0x84C0,\n    }\n\n    internal enum TextureTarget\n    {\n        Texture1D = 0x0DE0,\n        Texture2D = 0x0DE1,\n        Texture3D = 0x806F,\n        TextureCubeMap = 0x8513,\n        Texture1DArray = 0x8C18,\n        Texture2DArray = 0x8C1A,\n        Texture2DMultisample = 0x9100,\n        Texture2DMultisampleArray = 0x9102,\n\n        TextureCubeMapPositiveX = 0x8515,\n        TextureCubeMapNegativeX = 0x8516,\n        TextureCubeMapPositiveY = 0x8517,\n        TextureCubeMapNegativeY = 0x8518,\n        TextureCubeMapPositiveZ = 0x8519,\n        TextureCubeMapNegativeZ = 0x851A,\n    }\n\n    internal enum PixelInternalFormat\n    {\n        Rgb  = 0x1907,\n        Rgba = 0x1908,\n        Rgba4 = 0x8056,\n        Luminance = 0x1909,\n        CompressedRgbS3tcDxt1Ext  = 0x83F0,\n        CompressedRgbaS3tcDxt1Ext = 0x83F1,\n        CompressedRgbaS3tcDxt3Ext = 0x83F2,\n        CompressedRgbaS3tcDxt5Ext = 0x83F3,\n        CompressedSrgbS3tcDxt1Ext = 0x8C4C,\n        CompressedSrgbAlphaS3tcDxt3Ext = 0x8C4E,\n        CompressedSrgbAlphaS3tcDxt5Ext = 0x8C4F,\n        R32f  = 0x822E,\n        Rg16f = 0x822F,\n        Rgba16f = 0x881A,\n        R16f = 0x822D,\n        Rg32f = 0x8230,\n        Rgba32f = 0x8814,\n        Rg8i = 0x8237,\n        Rgba8i = 0x8D8E,\n        Rg16ui = 0x823A,\n        Rgba16ui = 0x8D76,\n        Rgb10A2ui = 0x906F,\n        Rgba16 = 0x805B,\n\n        // sRGB\n        Srgb  = 0x8C40,\n        Srgba = 0x8C43,\n\n        // PVRTC\n        CompressedRgbPvrtc2Bppv1Img = 0x8C01,\n        CompressedRgbPvrtc4Bppv1Img = 0x8C00,\n        CompressedRgbaPvrtc2Bppv1Img = 0x8C03,\n        CompressedRgbaPvrtc4Bppv1Img = 0x8C02,\n        // ATITC\n        AtcRgbaExplicitAlphaAmd = 0x8C93,\n        AtcRgbaInterpolatedAlphaAmd = 0x87EE,\n\n        // ETC1\n        Etc1 = 0x8D64,\n        // ETC2 RGB8A1\n        Etc2Rgb8  = 0x9274,\n        Etc2Srgb8 = 0x9275,\n        Etc2Rgb8A1  = 0x9276,\n        Etc2Srgb8A1 = 0x9277,\n        Etc2Rgba8Eac   = 0x9278,\n        Etc2SRgb8A8Eac = 0x9279,\n    }\n\n    internal enum PixelFormat\n    {\n        Rgba = 0x1908,\n        Rgb = 0x1907,\n        Luminance = 0x1909,\n        Red = 0x1903,\n        Rg = 0x8227,\n    }\n\n    internal enum PixelType\n    {\n        UnsignedByte = 0x1401,\n        UnsignedShort565 = 0x8363,\n        UnsignedShort4444 = 0x8033,\n        UnsignedShort5551 = 0x8034,\n        Float = 0x1406,\n        HalfFloat = 0x140B,\n        HalfFloatOES = 0x8D61,\n        Byte = 0x1400,\n        UnsignedShort = 0x1403,\n        UnsignedInt1010102 = 0x8036,\n    }\n\n    internal enum PixelStoreParameter\n    {\n        UnpackAlignment = 0x0CF5,\n        PackAlignment   = 0x0D05,\n    }\n\n    internal enum StencilOp\n    {\n        Keep = 0x1E00,\n        DecrWrap = 0x8508,\n        Decr = 0x1E03,\n        Incr = 0x1E02,\n        IncrWrap = 0x8507,\n        Invert = 0x150A,\n        Replace = 0x1E01,\n        Zero = 0,\n    }\n\n    internal enum TextureParameterName\n    {\n        TextureMaxAnisotropyExt = 0x84FE,\n        TextureBaseLevel = 0x813C,\n        TextureMaxLevel = 0x813D,\n        TextureMinFilter = 0x2801,\n        TextureMagFilter = 0x2800,\n        TextureWrapS = 0x2802,\n        TextureWrapT = 0x2803,\n        TextureBorderColor = 0x1004,\n        TextureLodBias = 0x8501,\n        TextureCompareMode = 0x884C,\n        TextureCompareFunc = 0x884D,\n        GenerateMipmap = 0x8191,\n    }\n\n    internal enum Bool\n    {\n        True = 1,\n        False = 0,\n    }\n\n    internal enum TextureMinFilter\n    {\n        LinearMipmapNearest = 0x2701,\n        NearestMipmapLinear = 0x2702,\n        LinearMipmapLinear = 0x2703,\n        Linear = 0x2601,\n        NearestMipmapNearest = 0x2700,\n        Nearest = 0x2600,\n    }\n\n    internal enum TextureMagFilter\n    {\n        Linear  = 0x2601,\n        Nearest = 0x2600,\n    }\n\n    internal enum TextureCompareMode\n    {\n        CompareRefToTexture = 0x884E,\n        None = 0,\n    }\n\n    internal enum TextureWrapMode\n    {\n        ClampToEdge = 0x812F,\n        Repeat = 0x2901,\n        MirroredRepeat = 0x8370,\n        //GLES\n        ClampToBorder = 0x812D,\n    }\n\n    internal struct ColorFormat\n    {\n        internal readonly int R;\n        internal readonly int G;\n        internal readonly int B;\n        internal readonly int A;\n\n        internal ColorFormat(int r, int g, int b, int a)\n        {\n            R = r;\n            G = g;\n            B = b;\n            A = a;\n        }\n    }\n\n    internal abstract class OGL\n    {\n        internal enum RenderApi\n        {\n            ES = 12448,\n            GL = 12450,\n        }\n\n        internal RenderApi BoundApi = RenderApi.GL;\n        private const CallingConvention callingConvention = CallingConvention.Winapi;\n\n        protected static OGL _current;\n\n        internal static OGL Current { get { return _current; } }\n\n        protected OGL()\n        {\n            GetNativeLibrary();\n            LoadEntryPoints();\n        }\n\n        protected abstract IntPtr GetNativeLibrary();\n        protected abstract T LoadFunction<T>(string function);\n        protected abstract T LoadFunctionOrNull<T>(string function);\n        \n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void EnableVertexAttribArrayDelegate(int attrib);\n        internal EnableVertexAttribArrayDelegate EnableVertexAttribArray;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DisableVertexAttribArrayDelegate(int attrib);\n        internal DisableVertexAttribArrayDelegate DisableVertexAttribArray;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void MakeCurrentDelegate(IntPtr window);\n        internal MakeCurrentDelegate MakeCurrent;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GetIntegerDelegate(int param, [Out] int* data);\n        internal GetIntegerDelegate GetIntegerv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate IntPtr GetStringDelegate(StringName param);\n        internal GetStringDelegate GetStringInternal;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ClearDepthDelegate(float depth);\n        internal ClearDepthDelegate ClearDepth;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DepthRangedDelegate(double min, double max);\n        internal DepthRangedDelegate DepthRanged;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DepthRangefDelegate(float min, float max);\n        internal DepthRangefDelegate DepthRangef;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ClearDelegate(ClearBufferMask mask);\n        internal ClearDelegate Clear;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ClearColorDelegate(float red, float green, float blue, float alpha);\n        internal ClearColorDelegate ClearColor;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ClearStencilDelegate(int stencil);\n        internal ClearStencilDelegate ClearStencil;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ViewportDelegate(int x, int y, int w, int h);\n        internal ViewportDelegate Viewport;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate ErrorCode GetErrorDelegate();\n        internal GetErrorDelegate GetError;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void FlushDelegate();\n        internal FlushDelegate Flush;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GenTexturesDelegate(int count, int* ptextures);\n        internal GenTexturesDelegate GenTextures;\n\n        internal unsafe int GenTexture()\n        {\n            int texture;\n            this.GenTextures(1, &texture);\n            return texture;\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BindTextureDelegate(TextureTarget target, int id);\n        internal BindTextureDelegate BindTexture;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate int EnableDelegate(EnableCap cap);\n        internal EnableDelegate Enable;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate int DisableDelegate(EnableCap cap);\n        internal DisableDelegate Disable;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void CullFaceDelegate(CullFaceMode mode);\n        internal CullFaceDelegate CullFace;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void FrontFaceDelegate(FrontFaceDirection direction);\n        internal FrontFaceDelegate FrontFace;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void PolygonModeDelegate(MaterialFace face, PolygonMode mode);\n        internal PolygonModeDelegate PolygonMode;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void PolygonOffsetDelegate(float slopeScaleDepthBias, float depthbias);\n        internal PolygonOffsetDelegate PolygonOffset;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void UseProgramDelegate(int program);\n        internal UseProgramDelegate UseProgram;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void Uniform1iDelegate(int location, int value);\n        internal Uniform1iDelegate Uniform1i;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void Uniform1fDelegate(int location, float value);\n        internal Uniform1fDelegate Uniform1f;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void Uniform1ivDelegate(int location, int count, int* values);\n        internal Uniform1ivDelegate Uniform1iv;\n        \n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void Uniform1fvDelegate(int location, int count, float* values);\n        internal Uniform1fvDelegate Uniform1fv;\n        \n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void Uniform2fvDelegate(int location, int count, Vector2* values);\n        internal Uniform2fvDelegate Uniform2fv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void Uniform3fvDelegate(int location, int count, Vector3* values);\n        internal Uniform3fvDelegate Uniform3fv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void Uniform4fvDelegate(int location, int count, Vector4* values);\n        internal Uniform4fvDelegate Uniform4fv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void UniformMatrix2fvDelegate(int location, int count, bool transpose, float* values);\n        internal UniformMatrix2fvDelegate UniformMatrix2fv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void UniformMatrix3fvDelegate(int location, int count, bool transpose, float* values);\n        internal UniformMatrix3fvDelegate UniformMatrix3fv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void UniformMatrix4fvDelegate(int location, int count, bool transpose, Matrix* values);\n        internal UniformMatrix4fvDelegate UniformMatrix4fv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ScissorDelegate(int x, int y, int width, int height);\n        internal ScissorDelegate Scissor;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ReadPixelsDelegate(int x, int y, int width, int height, PixelFormat format, PixelType type, IntPtr data);\n        internal ReadPixelsDelegate ReadPixels;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BindBufferDelegate(BufferTarget target, int buffer);\n        internal BindBufferDelegate BindBuffer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawElementsDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType, IntPtr offset);\n        internal DrawElementsDelegate DrawElements;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawRangeElementsDelegate(GLPrimitiveType primitiveType, int start, int end, int count, DrawElementsType elementType, IntPtr offset);\n        internal DrawRangeElementsDelegate DrawRangeElements; // OpenGL 2.0, GLES 3.0\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawElementsBaseVertexDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType, IntPtr offset, int baseVertex);\n        internal DrawElementsBaseVertexDelegate DrawElementsBaseVertex; // OpenGL 3.2, GLES 3.2, or GL_ARB_draw_elements_base_vertex\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawRangeElementsBaseVertexDelegate(GLPrimitiveType primitiveType, int start, int end, int count, DrawElementsType elementType, IntPtr offset, int baseVertex);\n        internal DrawRangeElementsBaseVertexDelegate DrawRangeElementsBaseVertex; // OpenGL 3.2, GLES 3.2, or GL_ARB_draw_elements_base_vertex\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawArraysDelegate(GLPrimitiveType primitiveType, int offset, int count);\n        internal DrawArraysDelegate DrawArrays;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GenRenderbuffersDelegate(int count, int* prenderBuffers);\n        internal GenRenderbuffersDelegate GenRenderbuffers;\n\n        internal unsafe int GenRenderbuffer()\n        {\n            int renderBuffer;\n            this.GenRenderbuffers(1, &renderBuffer);\n            return renderBuffer;\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BindRenderbufferDelegate(RenderbufferTarget target, int buffer);\n        internal BindRenderbufferDelegate BindRenderbuffer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void DeleteRenderbuffersDelegate(int count, int* pbuffers);\n        internal DeleteRenderbuffersDelegate DeleteRenderbuffers;\n\n        internal unsafe void DeleteRenderbuffer(int renderBuffer)\n        {\n            DeleteRenderbuffers(1, &renderBuffer);\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void RenderbufferStorageMultisampleDelegate(RenderbufferTarget target, int sampleCount,\n            RenderbufferStorage storage, int width, int height);\n        internal RenderbufferStorageMultisampleDelegate RenderbufferStorageMultisample;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GenFramebuffersDelegate(int count, int* pframeBuffers);\n        internal GenFramebuffersDelegate GenFramebuffers;\n\n        internal unsafe int GenFramebuffer()\n        {\n            int frameBuffer;\n            this.GenFramebuffers(1, &frameBuffer);\n            return frameBuffer;\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BindFramebufferDelegate(FramebufferTarget target, int buffer);\n        internal BindFramebufferDelegate BindFramebuffer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void DeleteFramebuffersDelegate(int count, int* pbuffers);\n        internal DeleteFramebuffersDelegate DeleteFramebuffers;\n\n        internal unsafe void DeleteFramebuffer(int frameBuffer)\n        {\n            DeleteFramebuffers(1, &frameBuffer);\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void InvalidateFramebufferDelegate(FramebufferTarget target, int numAttachments, FramebufferAttachment[] attachments);\n        internal InvalidateFramebufferDelegate InvalidateFramebuffer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void FramebufferTexture2DDelegate(FramebufferTarget target, FramebufferAttachment attachement,\n            TextureTarget textureTarget, int texture, int level);\n        internal FramebufferTexture2DDelegate FramebufferTexture2D;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void FramebufferTexture2DMultiSampleDelegate(FramebufferTarget target, FramebufferAttachment attachement,\n            TextureTarget textureTarget, int texture, int level, int samples);\n        internal FramebufferTexture2DMultiSampleDelegate FramebufferTexture2DMultiSample;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void FramebufferRenderbufferDelegate(FramebufferTarget target, FramebufferAttachment attachement,\n            RenderbufferTarget renderBufferTarget, int buffer);\n        internal FramebufferRenderbufferDelegate FramebufferRenderbuffer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void RenderbufferStorageDelegate(RenderbufferTarget target, RenderbufferStorage storage, int width, int hegiht);\n        internal RenderbufferStorageDelegate RenderbufferStorage;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void GenerateMipmapDelegate(TextureTarget target);\n        internal GenerateMipmapDelegate GenerateMipmap;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ReadBufferDelegate(ReadBufferMode buffer);\n        internal ReadBufferDelegate ReadBuffer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawBufferDelegate(DrawBufferMode buffer);\n        internal DrawBufferDelegate DrawBufferInternal; // OpenGL 2.0, GLES N/A.\n\n        internal unsafe void DrawBuffer(DrawBufferMode buffer)\n        {\n            DrawBuffersInternal(1, &buffer);\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void DrawBuffersDelegate(int count, DrawBufferMode* pbuffers);\n        internal DrawBuffersDelegate DrawBuffersInternal; // OpenGL 2.0, GLES 3.0.\n\n        internal unsafe void DrawBuffers(int count, DrawBufferMode[] buffers)\n        {\n            fixed (DrawBufferMode* pbuffers = buffers)\n            {\n                DrawBuffersInternal(count, pbuffers);\n            }\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BlitFramebufferDelegate(int srcX0,\n            int srcY0,\n            int srcX1,\n            int srcY1,\n            int dstX0,\n            int dstY0,\n            int dstX1,\n            int dstY1,\n            ClearBufferMask mask,\n            BlitFramebufferFilter filter);\n        internal BlitFramebufferDelegate BlitFramebuffer; // OpenGL 3.0, GLES 3.0.\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate FramebufferErrorCode CheckFramebufferStatusDelegate(FramebufferTarget target);\n        internal CheckFramebufferStatusDelegate CheckFramebufferStatus;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void TexParameterFloatDelegate(TextureTarget target, TextureParameterName name, float value);\n        internal TexParameterFloatDelegate TexParameterf;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void TexParameterFloatArrayDelegate(TextureTarget target, TextureParameterName name, float* values);\n        internal TexParameterFloatArrayDelegate TexParameterfv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void TexParameterIntDelegate(TextureTarget target, TextureParameterName name, int value);\n        internal TexParameterIntDelegate TexParameteri;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GenQueriesDelegate(int count, int* pqueries);\n        internal GenQueriesDelegate GenQueries;\n\n        internal unsafe int GenQuery()\n        {\n            int query;\n            this.GenQueries(1, &query);\n            return query;\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BeginQueryDelegate(QueryTarget target, int queryId);\n        internal BeginQueryDelegate BeginQuery;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void EndQueryDelegate(QueryTarget target);\n        internal EndQueryDelegate EndQuery;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void GetQueryObjectDelegate(int queryId, GetQueryObjectParam getparam, [Out] out int ready);\n        internal GetQueryObjectDelegate GetQueryObject;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void DeleteQueriesDelegate(int count, int* pqueries);\n        internal DeleteQueriesDelegate DeleteQueries;\n\n        internal unsafe void DeleteQuery(int query)\n        {\n            DeleteQueries(1, &query);\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ActiveTextureDelegate(TextureUnit textureUnit);\n        internal ActiveTextureDelegate ActiveTexture;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate int CreateShaderDelegate(ShaderType type);\n        internal CreateShaderDelegate CreateShader;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void ShaderSourceDelegate(int shaderId, int count, IntPtr code, int* length);\n        internal ShaderSourceDelegate ShaderSourceInternal;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void CompileShaderDelegate(int shaderId);\n        internal CompileShaderDelegate CompileShader;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GetShaderDelegate(int shaderId, int parameter, int* value);\n        internal GetShaderDelegate GetShaderiv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void GetShaderInfoLogDelegate(int shader, int bufSize, IntPtr length, StringBuilder infoLog);\n        internal GetShaderInfoLogDelegate GetShaderInfoLogInternal;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate bool IsShaderDelegate(int shaderId);\n        internal IsShaderDelegate IsShader;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DeleteShaderDelegate(int shaderId);\n        internal DeleteShaderDelegate DeleteShader;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate int GetAttribLocationDelegate(int programId, string name);\n        internal GetAttribLocationDelegate GetAttribLocation;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate int GetUniformLocationDelegate(int programId, string name);\n        internal GetUniformLocationDelegate GetUniformLocation;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate bool IsProgramDelegate(int programId);\n        internal IsProgramDelegate IsProgram;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DeleteProgramDelegate(int programId);\n        internal DeleteProgramDelegate DeleteProgram;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate int CreateProgramDelegate();\n        internal CreateProgramDelegate CreateProgram;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void AttachShaderDelegate(int programId, int shaderId);\n        internal AttachShaderDelegate AttachShader;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void LinkProgramDelegate(int programId);\n        internal LinkProgramDelegate LinkProgram;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GetProgramDelegate(int programId, int name, int* linked);\n        internal GetProgramDelegate GetProgramiv;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void GetProgramInfoLogDelegate(int program, int bufSize, IntPtr length, StringBuilder infoLog);\n        internal GetProgramInfoLogDelegate GetProgramInfoLogInternal;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DetachShaderDelegate(int programId, int shaderId);\n        internal DetachShaderDelegate DetachShader;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BlendColorDelegate(float r, float g, float b, float a);\n        internal BlendColorDelegate BlendColor;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BlendEquationSeparateDelegate(BlendEquationMode colorMode, BlendEquationMode alphaMode);\n        internal BlendEquationSeparateDelegate BlendEquationSeparate;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BlendEquationSeparateiDelegate(int buffer, BlendEquationMode colorMode, BlendEquationMode alphaMode);\n        internal BlendEquationSeparateiDelegate BlendEquationSeparatei;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BlendFuncSeparateDelegate(BlendingFunc colorSrc, BlendingFunc colorDst,\n            BlendingFunc alphaSrc, BlendingFunc alphaDst);\n        internal BlendFuncSeparateDelegate BlendFuncSeparate;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BlendFuncSeparateiDelegate(int buffer, BlendingFunc colorSrc, BlendingFunc colorDst,\n            BlendingFunc alphaSrc, BlendingFunc alphaDst);\n        internal BlendFuncSeparateiDelegate BlendFuncSeparatei;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void ColorMaskDelegate(bool r, bool g, bool b, bool a);\n        internal ColorMaskDelegate ColorMask;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DepthFuncDelegate(ComparisonFunc function);\n        internal DepthFuncDelegate DepthFunc;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DepthMaskDelegate(bool enabled);\n        internal DepthMaskDelegate DepthMask;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void StencilFuncSeparateDelegate(StencilFace face, ComparisonFunc function, int referenceStencil, int mask);\n        internal StencilFuncSeparateDelegate StencilFuncSeparate;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void StencilOpSeparateDelegate(StencilFace face, StencilOp stencilfail, StencilOp depthFail, StencilOp pass);\n        internal StencilOpSeparateDelegate StencilOpSeparate;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void StencilFuncDelegate(ComparisonFunc function, int referenceStencil, int mask);\n        internal StencilFuncDelegate StencilFunc;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void StencilOpDelegate(StencilOp stencilfail, StencilOp depthFail, StencilOp pass);\n        internal StencilOpDelegate StencilOp;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void StencilMaskDelegate(int mask);\n        internal StencilMaskDelegate StencilMask;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void CompressedTexImage2DDelegate(TextureTarget target, int level, PixelInternalFormat internalFormat,\n            int width, int height, int border, int size, IntPtr data);\n        internal CompressedTexImage2DDelegate CompressedTexImage2D;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void TexImage2DDelegate(TextureTarget target, int level, PixelInternalFormat internalFormat,\n            int width, int height, int border, PixelFormat format, PixelType pixelType, IntPtr data);\n        internal TexImage2DDelegate TexImage2D;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void CompressedTexSubImage2DDelegate(TextureTarget target, int level,\n            int x, int y, int width, int height, PixelInternalFormat format, int size, IntPtr data);\n        internal CompressedTexSubImage2DDelegate CompressedTexSubImage2D;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void TexSubImage2DDelegate(TextureTarget target, int level,\n            int x, int y, int width, int height, PixelFormat format, PixelType pixelType, IntPtr data);\n        internal TexSubImage2DDelegate TexSubImage2D;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void PixelStoreDelegate(PixelStoreParameter parameter, int size);\n        internal PixelStoreDelegate PixelStore;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void FinishDelegate();\n        internal FinishDelegate Finish;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void GetTexImageDelegate(TextureTarget target, int level, PixelFormat format, PixelType type, [Out] IntPtr pixels);\n        internal GetTexImageDelegate GetTexImage;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void GetCompressedTexImageDelegate(TextureTarget target, int level, [Out] IntPtr pixels);\n        internal GetCompressedTexImageDelegate GetCompressedTexImage;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void TexImage3DDelegate(TextureTarget target, int level, PixelInternalFormat internalFormat,\n            int width, int height, int depth, int border, PixelFormat format, PixelType pixelType, IntPtr data);\n        internal TexImage3DDelegate TexImage3D;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void TexSubImage3DDelegate(TextureTarget target, int level,\n            int x, int y, int z, int width, int height, int depth, PixelFormat format, PixelType pixelType, IntPtr data);\n        internal TexSubImage3DDelegate TexSubImage3D;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void DeleteTexturesDelegate(int count, int* ptextures);\n        internal DeleteTexturesDelegate DeleteTextures;\n\n        internal unsafe void DeleteTexture(int texture)\n        {\n            DeleteTextures(1, &texture);\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GenBuffersDelegate(int count, int* pbuffers);\n        internal GenBuffersDelegate GenBuffers;\n\n        internal unsafe int GenBuffer()\n        {\n            int buffer;\n            this.GenBuffers(1, &buffer);\n            return buffer;\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BufferDataDelegate(BufferTarget target, IntPtr size, IntPtr n, BufferUsageHint usage);\n        internal BufferDataDelegate BufferData;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate IntPtr MapBufferDelegate(BufferTarget target, BufferAccess access);\n        internal MapBufferDelegate MapBuffer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate IntPtr MapBufferRangeDelegate(BufferTarget target, IntPtr offset, IntPtr length, BufferRangeAccess access);\n        internal MapBufferRangeDelegate MapBufferRange; // OpenGL 2.0, GLES 3.0\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate bool UnmapBufferDelegate(BufferTarget target);\n        internal UnmapBufferDelegate UnmapBuffer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void BufferSubDataDelegate(BufferTarget target, IntPtr offset, IntPtr size, IntPtr data);\n        internal BufferSubDataDelegate BufferSubData;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void DeleteBuffersDelegate(int count, int* pbuffers);\n        internal DeleteBuffersDelegate DeleteBuffers;\n\n        internal unsafe void DeleteBuffer(int buffer)\n        {\n            DeleteBuffers(1, &buffer);\n\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void VertexAttribPointerDelegate(int location, int elementCount, VertexAttribPointerType type, bool normalize,\n            int stride, IntPtr data);\n        internal VertexAttribPointerDelegate VertexAttribPointer;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawElementsInstancedDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType,\n            IntPtr offset, int instanceCount);\n        internal DrawElementsInstancedDelegate DrawElementsInstanced;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawElementsInstancedBaseVertexDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType,\n            IntPtr offset, int instanceCount, int baseVertex);\n        internal DrawElementsInstancedBaseVertexDelegate DrawElementsInstancedBaseVertex; // OpenGL 3.2, GLES 3.2.\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void DrawElementsInstancedBaseInstanceDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType,\n            IntPtr offset, int instanceCount, int baseInstance);\n        internal DrawElementsInstancedBaseInstanceDelegate DrawElementsInstancedBaseInstance;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal delegate void VertexAttribDivisorDelegate(int location, int frequency);\n        internal VertexAttribDivisorDelegate VertexAttribDivisor;\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void GenVertexArraysDelegate(int count, uint* pVertexArrays);\n        internal GenVertexArraysDelegate GenVertexArrays; // OpenGL 3.0, GLES 3.0.\n\n        internal unsafe uint GenVertexArray()\n        {\n            uint VertexArray;\n            this.GenVertexArrays(1, &VertexArray);\n            return VertexArray;\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void BindVertexArrayDelegate(uint vertexArray);\n        internal BindVertexArrayDelegate BindVertexArray; // OpenGL 3.0, GLES 3.0.\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void BindAttribLocationDelegate(uint programId, uint index, void* name);\n        internal BindAttribLocationDelegate BindAttribLocationInternal; // OpenGL 2.0, GLES 2.0.\n\n        internal unsafe void BindAttribLocation(uint programId, uint AttributeLocation, string name)\n        {\n            fixed (void* pData = name)\n            {\n                BindAttribLocationInternal(programId, AttributeLocation, pData);\n            }\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate uint GetUniformBlockIndexDelegate(uint programId, void* name);\n        internal GetUniformBlockIndexDelegate GetUniformBlockIndexInternal; // OpenGL 3.1, GLES 3.0.\n\n        internal unsafe uint GetUniformBlockIndex(uint programId, string name)\n        {\n            fixed (void* pData = name)\n            {\n                uint index =  GetUniformBlockIndexInternal(programId, pData);\n                return index;\n            }\n        }\n\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [UnmanagedFunctionPointer(callingConvention)]\n        [MonoNativeFunctionWrapper]\n        internal unsafe delegate void UniformBlockBindingDelegate(uint programId, uint uniformBlockIndex, uint uniformBlockBinding);\n        internal UniformBlockBindingDelegate UniformBlockBinding; // OpenGL 3.1, GLES 3.0.\n\n\n#if DEBUG\n        [UnmanagedFunctionPointer(CallingConvention.StdCall)]\n        delegate void DebugMessageCallbackProc(int source, int type, int id, int severity, int length, IntPtr message, IntPtr userParam);\n        static DebugMessageCallbackProc DebugProc;\n        [System.Security.SuppressUnmanagedCodeSecurity()]\n        [MonoNativeFunctionWrapper]\n        delegate void DebugMessageCallbackDelegate(DebugMessageCallbackProc callback, IntPtr userParam);\n        static DebugMessageCallbackDelegate DebugMessageCallback;\n\n        internal delegate void ErrorDelegate(string message);\n        internal static event ErrorDelegate OnError;\n\n        static void DebugMessageCallbackHandler(int source, int type, int id, int severity, int length, IntPtr message, IntPtr userParam)\n        {\n            string errorMessage = Marshal.PtrToStringAnsi(message);\n            System.Diagnostics.Debug.WriteLine(errorMessage);\n            if (OnError != null)\n                OnError(errorMessage);\n        }\n#endif\n\n        internal int SwapInterval { get; set; }\n\n        private void LoadEntryPoints()\n        {\n\n            if (Viewport == null)\n                Viewport = LoadFunctionOrNull<ViewportDelegate>(\"glViewport\");\n            if (Scissor == null)\n                Scissor = LoadFunctionOrNull<ScissorDelegate>(\"glScissor\");\n            if (MakeCurrent == null)\n                MakeCurrent = LoadFunctionOrNull<MakeCurrentDelegate>(\"glMakeCurrent\");\n\n            GetError = LoadFunctionOrNull<GetErrorDelegate>(\"glGetError\");\n\n            TexParameterf = LoadFunctionOrNull<TexParameterFloatDelegate>(\"glTexParameterf\");\n            TexParameterfv = LoadFunctionOrNull<TexParameterFloatArrayDelegate>(\"glTexParameterfv\");\n            TexParameteri = LoadFunctionOrNull<TexParameterIntDelegate>(\"glTexParameteri\");\n\n            EnableVertexAttribArray = LoadFunctionOrNull<EnableVertexAttribArrayDelegate>(\"glEnableVertexAttribArray\");\n            DisableVertexAttribArray = LoadFunctionOrNull<DisableVertexAttribArrayDelegate>(\"glDisableVertexAttribArray\");\n            GetIntegerv = LoadFunctionOrNull<GetIntegerDelegate>(\"glGetIntegerv\");\n            GetStringInternal = LoadFunctionOrNull<GetStringDelegate>(\"glGetString\");\n            ClearDepth = LoadFunctionOrNull<ClearDepthDelegate>(\"glClearDepth\");\n            if (ClearDepth == null)\n                ClearDepth = LoadFunctionOrNull<ClearDepthDelegate>(\"glClearDepthf\");\n            DepthRanged = LoadFunctionOrNull<DepthRangedDelegate>(\"glDepthRange\");\n            DepthRangef = LoadFunctionOrNull<DepthRangefDelegate>(\"glDepthRangef\");\n            Clear = LoadFunctionOrNull<ClearDelegate>(\"glClear\");\n            ClearColor = LoadFunctionOrNull<ClearColorDelegate>(\"glClearColor\");\n            ClearStencil = LoadFunctionOrNull<ClearStencilDelegate>(\"glClearStencil\");\n            Flush = LoadFunctionOrNull<FlushDelegate>(\"glFlush\");\n            GenTextures = LoadFunctionOrNull<GenTexturesDelegate>(\"glGenTextures\");\n            BindTexture = LoadFunctionOrNull<BindTextureDelegate>(\"glBindTexture\");\n\n            Enable = LoadFunctionOrNull<EnableDelegate>(\"glEnable\");\n            Disable = LoadFunctionOrNull<DisableDelegate>(\"glDisable\");\n            CullFace = LoadFunctionOrNull<CullFaceDelegate>(\"glCullFace\");\n            FrontFace = LoadFunctionOrNull<FrontFaceDelegate>(\"glFrontFace\");\n            PolygonMode = LoadFunctionOrNull<PolygonModeDelegate>(\"glPolygonMode\");\n            PolygonOffset = LoadFunctionOrNull<PolygonOffsetDelegate>(\"glPolygonOffset\");\n\n            BindBuffer = LoadFunctionOrNull<BindBufferDelegate>(\"glBindBuffer\");\n            ReadBuffer = LoadFunctionOrNull<ReadBufferDelegate>(\"glReadBuffer\");\n            DrawBufferInternal = LoadFunctionOrNull<DrawBufferDelegate>(\"glDrawBuffer\");\n            DrawBuffersInternal = LoadFunctionOrNull<DrawBuffersDelegate>(\"glDrawBuffers\");\n            DrawElements = LoadFunctionOrNull<DrawElementsDelegate>(\"glDrawElements\");\n            DrawArrays = LoadFunctionOrNull<DrawArraysDelegate>(\"glDrawArrays\");\n\n            // OpenGL >= 2.0, GLES >= 3.0\n            DrawRangeElements = LoadFunctionOrNull<DrawRangeElementsDelegate>(\"glDrawRangeElements\");\n\n            // OpenGL >= 3.2, GLES >= 3.2 or GL_ARB_draw_elements_base_vertex\n            DrawElementsBaseVertex = LoadFunctionOrNull<DrawElementsBaseVertexDelegate>(\"glDrawElementsBaseVertex\");\n            DrawRangeElementsBaseVertex = LoadFunctionOrNull<DrawRangeElementsBaseVertexDelegate>(\"glDrawRangeElementsBaseVertex\");\n\n            // uniforms OpenGL Version >= 2.0\n            Uniform1i = LoadFunctionOrNull<Uniform1iDelegate>(\"glUniform1i\");\n            Uniform1f = LoadFunctionOrNull<Uniform1fDelegate>(\"glUniform1f\");\n            Uniform1iv = LoadFunctionOrNull<Uniform1ivDelegate>(\"glUniform1iv\");\n            Uniform1fv = LoadFunctionOrNull<Uniform1fvDelegate>(\"glUniform1fv\");\n            Uniform2fv = LoadFunctionOrNull<Uniform2fvDelegate>(\"glUniform2fv\");\n            Uniform3fv = LoadFunctionOrNull<Uniform3fvDelegate>(\"glUniform3fv\");\n            Uniform4fv = LoadFunctionOrNull<Uniform4fvDelegate>(\"glUniform4fv\");\n            UniformMatrix2fv = LoadFunctionOrNull<UniformMatrix2fvDelegate>(\"glUniformMatrix2fv\");\n            UniformMatrix3fv = LoadFunctionOrNull<UniformMatrix3fvDelegate>(\"glUniformMatrix3fv\");\n            UniformMatrix4fv = LoadFunctionOrNull<UniformMatrix4fvDelegate>(\"glUniformMatrix4fv\");\n            ReadPixels = LoadFunctionOrNull<ReadPixelsDelegate>(\"glReadPixels\");\n            // uniforms OpenGL Version >= 2.1\n            // ... UniformMatrix 2x3,2x4, 3x2, 3x4, 4x2, 4x3\n            // uniforms OpenGL Version >= 3.0\n            // ... Uniform 1ui,1uiv,2ui,2uiv,2ui,2uiv,2ui,2uiv\n\n\n            // Render Target Support. These might be null if they are not supported\n            GenRenderbuffers = LoadFunctionOrNull<GenRenderbuffersDelegate>(\"glGenRenderbuffers\");\n            BindRenderbuffer = LoadFunctionOrNull<BindRenderbufferDelegate>(\"glBindRenderbuffer\");\n            DeleteRenderbuffers = LoadFunctionOrNull<DeleteRenderbuffersDelegate>(\"glDeleteRenderbuffers\");\n            GenFramebuffers = LoadFunctionOrNull<GenFramebuffersDelegate>(\"glGenFramebuffers\");\n            BindFramebuffer = LoadFunctionOrNull<BindFramebufferDelegate>(\"glBindFramebuffer\");\n            DeleteFramebuffers = LoadFunctionOrNull<DeleteFramebuffersDelegate>(\"glDeleteFramebuffers\");\n            FramebufferTexture2D = LoadFunctionOrNull<FramebufferTexture2DDelegate>(\"glFramebufferTexture2D\");\n            FramebufferRenderbuffer = LoadFunctionOrNull<FramebufferRenderbufferDelegate>(\"glFramebufferRenderbuffer\");\n            RenderbufferStorage = LoadFunctionOrNull<RenderbufferStorageDelegate>(\"glRenderbufferStorage\");\n            RenderbufferStorageMultisample = LoadFunctionOrNull<RenderbufferStorageMultisampleDelegate>(\"glRenderbufferStorageMultisample\");\n            GenerateMipmap = LoadFunctionOrNull<GenerateMipmapDelegate>(\"glGenerateMipmap\");\n            BlitFramebuffer = LoadFunctionOrNull<BlitFramebufferDelegate>(\"glBlitFramebuffer\");\n            CheckFramebufferStatus = LoadFunctionOrNull<CheckFramebufferStatusDelegate>(\"glCheckFramebufferStatus\");\n\n            GenQueries = LoadFunctionOrNull<GenQueriesDelegate>(\"glGenQueries\");\n            BeginQuery = LoadFunctionOrNull<BeginQueryDelegate>(\"glBeginQuery\");\n            EndQuery = LoadFunctionOrNull<EndQueryDelegate>(\"glEndQuery\");\n            GetQueryObject = LoadFunctionOrNull<GetQueryObjectDelegate>(\"glGetQueryObjectuiv\");\n            if (GetQueryObject == null)\n                GetQueryObject = LoadFunctionOrNull<GetQueryObjectDelegate>(\"glGetQueryObjectivARB\");\n            if (GetQueryObject == null)\n                GetQueryObject = LoadFunctionOrNull<GetQueryObjectDelegate>(\"glGetQueryObjectiv\");\n            DeleteQueries = LoadFunctionOrNull<DeleteQueriesDelegate>(\"glDeleteQueries\");\n\n            ActiveTexture = LoadFunctionOrNull<ActiveTextureDelegate>(\"glActiveTexture\");\n            CreateShader = LoadFunctionOrNull<CreateShaderDelegate>(\"glCreateShader\");\n            ShaderSourceInternal = LoadFunctionOrNull<ShaderSourceDelegate>(\"glShaderSource\");\n            CompileShader = LoadFunctionOrNull<CompileShaderDelegate>(\"glCompileShader\");\n            GetShaderiv = LoadFunctionOrNull<GetShaderDelegate>(\"glGetShaderiv\");\n            GetShaderInfoLogInternal = LoadFunctionOrNull<GetShaderInfoLogDelegate>(\"glGetShaderInfoLog\");\n            IsShader = LoadFunctionOrNull<IsShaderDelegate>(\"glIsShader\");\n            DeleteShader = LoadFunctionOrNull<DeleteShaderDelegate>(\"glDeleteShader\");\n            GetAttribLocation = LoadFunctionOrNull<GetAttribLocationDelegate>(\"glGetAttribLocation\");\n            GetUniformLocation = LoadFunctionOrNull<GetUniformLocationDelegate>(\"glGetUniformLocation\");\n\n            IsProgram = LoadFunctionOrNull<IsProgramDelegate>(\"glIsProgram\");\n            DeleteProgram = LoadFunctionOrNull<DeleteProgramDelegate>(\"glDeleteProgram\");\n            CreateProgram = LoadFunctionOrNull<CreateProgramDelegate>(\"glCreateProgram\");\n            AttachShader = LoadFunctionOrNull<AttachShaderDelegate>(\"glAttachShader\");\n            UseProgram = LoadFunctionOrNull<UseProgramDelegate>(\"glUseProgram\");\n            LinkProgram = LoadFunctionOrNull<LinkProgramDelegate>(\"glLinkProgram\");\n            GetProgramiv = LoadFunctionOrNull<GetProgramDelegate>(\"glGetProgramiv\");\n            GetProgramInfoLogInternal = LoadFunctionOrNull<GetProgramInfoLogDelegate>(\"glGetProgramInfoLog\");\n            DetachShader = LoadFunctionOrNull<DetachShaderDelegate>(\"glDetachShader\");\n\n            BlendColor = LoadFunctionOrNull<BlendColorDelegate>(\"glBlendColor\");\n            BlendEquationSeparate = LoadFunctionOrNull<BlendEquationSeparateDelegate>(\"glBlendEquationSeparate\");\n            BlendEquationSeparatei = LoadFunctionOrNull<BlendEquationSeparateiDelegate>(\"glBlendEquationSeparatei\");\n            BlendFuncSeparate = LoadFunctionOrNull<BlendFuncSeparateDelegate>(\"glBlendFuncSeparate\");\n            BlendFuncSeparatei = LoadFunctionOrNull<BlendFuncSeparateiDelegate>(\"glBlendFuncSeparatei\");\n            ColorMask = LoadFunctionOrNull<ColorMaskDelegate>(\"glColorMask\");\n            DepthFunc = LoadFunctionOrNull<DepthFuncDelegate>(\"glDepthFunc\");\n            DepthMask = LoadFunctionOrNull<DepthMaskDelegate>(\"glDepthMask\");\n            StencilFuncSeparate = LoadFunctionOrNull<StencilFuncSeparateDelegate>(\"glStencilFuncSeparate\");\n            StencilOpSeparate = LoadFunctionOrNull<StencilOpSeparateDelegate>(\"glStencilOpSeparate\");\n            StencilFunc = LoadFunctionOrNull<StencilFuncDelegate>(\"glStencilFunc\");\n            StencilOp = LoadFunctionOrNull<StencilOpDelegate>(\"glStencilOp\");\n            StencilMask = LoadFunctionOrNull<StencilMaskDelegate>(\"glStencilMask\");\n\n            CompressedTexImage2D = LoadFunctionOrNull<CompressedTexImage2DDelegate>(\"glCompressedTexImage2D\");\n            TexImage2D = LoadFunctionOrNull<TexImage2DDelegate>(\"glTexImage2D\");\n            CompressedTexSubImage2D = LoadFunctionOrNull<CompressedTexSubImage2DDelegate>(\"glCompressedTexSubImage2D\");\n            TexSubImage2D = LoadFunctionOrNull<TexSubImage2DDelegate>(\"glTexSubImage2D\");\n            PixelStore = LoadFunctionOrNull<PixelStoreDelegate>(\"glPixelStorei\");\n            Finish = LoadFunctionOrNull<FinishDelegate>(\"glFinish\");\n            GetTexImage = LoadFunctionOrNull<GetTexImageDelegate>(\"glGetTexImage\");\n            GetCompressedTexImage = LoadFunctionOrNull<GetCompressedTexImageDelegate>(\"glGetCompressedTexImage\");\n            TexImage3D = LoadFunctionOrNull<TexImage3DDelegate>(\"glTexImage3D\");\n            TexSubImage3D = LoadFunctionOrNull<TexSubImage3DDelegate>(\"glTexSubImage3D\");\n            DeleteTextures = LoadFunctionOrNull<DeleteTexturesDelegate>(\"glDeleteTextures\");\n\n            GenBuffers = LoadFunctionOrNull<GenBuffersDelegate>(\"glGenBuffers\");\n            BufferData = LoadFunctionOrNull<BufferDataDelegate>(\"glBufferData\");\n            MapBuffer = LoadFunctionOrNull<MapBufferDelegate>(\"glMapBuffer\");\n            UnmapBuffer = LoadFunctionOrNull<UnmapBufferDelegate>(\"glUnmapBuffer\");\n            BufferSubData = LoadFunctionOrNull<BufferSubDataDelegate>(\"glBufferSubData\");\n            DeleteBuffers = LoadFunctionOrNull<DeleteBuffersDelegate>(\"glDeleteBuffers\");\n\n            // OpenGL >= 2.0, GLES >= 3.0\n            MapBufferRange = LoadFunctionOrNull<MapBufferRangeDelegate>(\"glMapBufferRange\");\n\n            VertexAttribPointer = LoadFunctionOrNull<VertexAttribPointerDelegate>(\"glVertexAttribPointer\");\n\n            GenVertexArrays = LoadFunctionOrNull<GenVertexArraysDelegate>(\"glGenVertexArrays\");\n            BindVertexArray = LoadFunctionOrNull<BindVertexArrayDelegate>(\"glBindVertexArray\");\n            BindAttribLocationInternal = LoadFunctionOrNull<BindAttribLocationDelegate>(\"glBindAttribLocation\");\n            GetUniformBlockIndexInternal = LoadFunctionOrNull<GetUniformBlockIndexDelegate>(\"glGetUniformBlockIndex\");\n            UniformBlockBinding = LoadFunctionOrNull<UniformBlockBindingDelegate>(\"glUniformBlockBinding\");\n\n            // Instanced drawing requires GL 3.2 or up, if the either of the following entry points can not be loaded\n            // this will get flagged by setting SupportsInstancing in GraphicsCapabilities to false.\n            try\n            {\n                DrawElementsInstanced = LoadFunctionOrNull<DrawElementsInstancedDelegate>(\"glDrawElementsInstanced\");\n                VertexAttribDivisor = LoadFunctionOrNull<VertexAttribDivisorDelegate>(\"glVertexAttribDivisor\");\n                DrawElementsInstancedBaseInstance = LoadFunctionOrNull<DrawElementsInstancedBaseInstanceDelegate>(\"glDrawElementsInstancedBaseInstance\");\n            }\n            catch (EntryPointNotFoundException)\n            {\n                // this will be detected in the initialization of GraphicsCapabilities\n            }\n\n#if DEBUG\n            try\n            {\n                DebugMessageCallback = LoadFunctionOrNull<DebugMessageCallbackDelegate>(\"glDebugMessageCallback\");\n                if (DebugMessageCallback != null)\n                {\n                    DebugProc = DebugMessageCallbackHandler;\n                    DebugMessageCallback(DebugProc, IntPtr.Zero);\n                    Enable(EnableCap.DebugOutput);\n                    Enable(EnableCap.DebugOutputSynchronous);\n                }\n            }\n            catch (EntryPointNotFoundException)\n            {\n                // Ignore the debug message callback if the entry point can not be found\n            }\n#endif\n\n            if (BoundApi == RenderApi.ES)\n            {\n                InvalidateFramebuffer = LoadFunctionOrNull<InvalidateFramebufferDelegate>(\"glDiscardFramebufferEXT\");\n            }\n\n        }\n\n        private HashSet<string> _extensions;\n        internal HashSet<string> Extensions { get { return _extensions; } }\n\n        internal bool ContainsExtension(string extension)\n        {\n            return Extensions.Contains(extension);\n        }\n\n        [Conditional(\"DEBUG\")]\n        void LogExtensions(string extstring, HashSet<string> extensions)\n        {\n#if __ANDROID__\n            Android.Util.Log.Verbose(\"GL\",\"Supported Extensions\");\n            foreach (string ext in extensions)\n                Android.Util.Log.Verbose(\"GL\", \"   \" + ext);\n#else\n            System.Diagnostics.Debug.WriteLine(\"Supported GL Extensions\");\n            System.Diagnostics.Debug.WriteLine(\"   \" + extstring.Replace(\" \", \"\\n   \"));\n#endif\n        }\n\n        internal void InitExtensions()\n        {\n            if (Extensions != null)\n                throw new InvalidOperationException(\"Extensions allready initialized.\");\n\n            string extstring = this.GetString(StringName.Extensions);\n            ErrorCode error = this.GetError();\n            if (error != ErrorCode.NO_ERROR || string.IsNullOrEmpty(extstring))\n                return;\n\n            string[] extList = extstring.Split(' ');\n            _extensions = new HashSet<string>(extList);\n            LogExtensions(extstring, _extensions);\n\n            if (GenRenderbuffers == null && Extensions.Contains(\"GL_EXT_framebuffer_object\"))\n            {\n                GenRenderbuffers = LoadFunctionOrNull<GenRenderbuffersDelegate>(\"glGenRenderbuffersEXT\");\n                BindRenderbuffer = LoadFunctionOrNull<BindRenderbufferDelegate>(\"glBindRenderbufferEXT\");\n                DeleteRenderbuffers = LoadFunctionOrNull<DeleteRenderbuffersDelegate>(\"glDeleteRenderbuffersEXT\");\n                GenFramebuffers = LoadFunctionOrNull<GenFramebuffersDelegate>(\"glGenFramebuffersEXT\");\n                BindFramebuffer = LoadFunctionOrNull<BindFramebufferDelegate>(\"glBindFramebufferEXT\");\n                DeleteFramebuffers = LoadFunctionOrNull<DeleteFramebuffersDelegate>(\"glDeleteFramebuffersEXT\");\n                FramebufferTexture2D = LoadFunctionOrNull<FramebufferTexture2DDelegate>(\"glFramebufferTexture2DEXT\");\n                FramebufferRenderbuffer = LoadFunctionOrNull<FramebufferRenderbufferDelegate>(\"glFramebufferRenderbufferEXT\");\n                RenderbufferStorage = LoadFunctionOrNull<RenderbufferStorageDelegate>(\"glRenderbufferStorageEXT\");\n                RenderbufferStorageMultisample = LoadFunctionOrNull<RenderbufferStorageMultisampleDelegate>(\"glRenderbufferStorageMultisampleEXT\");\n                GenerateMipmap = LoadFunctionOrNull<GenerateMipmapDelegate>(\"glGenerateMipmapEXT\");\n                BlitFramebuffer = LoadFunctionOrNull<BlitFramebufferDelegate>(\"glBlitFramebufferEXT\");\n                CheckFramebufferStatus = LoadFunctionOrNull<CheckFramebufferStatusDelegate>(\"glCheckFramebufferStatusEXT\");\n            }\n\n            if (RenderbufferStorageMultisample == null)\n            {                \n                if (Extensions.Contains(\"GL_APPLE_framebuffer_multisample\"))\n                {\n                    RenderbufferStorageMultisample = LoadFunctionOrNull<OGL.RenderbufferStorageMultisampleDelegate>(\"glRenderbufferStorageMultisampleAPPLE\");\n                    BlitFramebuffer = LoadFunctionOrNull<OGL.BlitFramebufferDelegate>(\"glResolveMultisampleFramebufferAPPLE\");\n                }\n                else if (Extensions.Contains(\"GL_EXT_multisampled_render_to_texture\"))\n                {\n                    RenderbufferStorageMultisample = LoadFunctionOrNull<OGL.RenderbufferStorageMultisampleDelegate>(\"glRenderbufferStorageMultisampleEXT\");\n                    FramebufferTexture2DMultiSample = LoadFunctionOrNull<OGL.FramebufferTexture2DMultiSampleDelegate>(\"glFramebufferTexture2DMultisampleEXT\");\n                }\n                else if (Extensions.Contains(\"GL_IMG_multisampled_render_to_texture\"))\n                {\n                    RenderbufferStorageMultisample = LoadFunctionOrNull<OGL.RenderbufferStorageMultisampleDelegate>(\"glRenderbufferStorageMultisampleIMG\");\n                    FramebufferTexture2DMultiSample = LoadFunctionOrNull<OGL.FramebufferTexture2DMultiSampleDelegate>(\"glFramebufferTexture2DMultisampleIMG\");\n                }\n                else if (Extensions.Contains(\"GL_NV_framebuffer_multisample\"))\n                {\n                    RenderbufferStorageMultisample = LoadFunctionOrNull<OGL.RenderbufferStorageMultisampleDelegate>(\"glRenderbufferStorageMultisampleNV\");\n                    BlitFramebuffer = LoadFunctionOrNull<OGL.BlitFramebufferDelegate>(\"glBlitFramebufferNV\");\n                }\n            }\n\n            if (BlendFuncSeparatei == null && Extensions.Contains(\"GL_ARB_draw_buffers_blend\"))\n                BlendFuncSeparatei = LoadFunctionOrNull<OGL.BlendFuncSeparateiDelegate>(\"BlendFuncSeparateiARB\");\n\n            if (BlendEquationSeparatei == null && Extensions.Contains(\"GL_ARB_draw_buffers_blend\"))\n                BlendEquationSeparatei = LoadFunctionOrNull<OGL.BlendEquationSeparateiDelegate>(\"BlendEquationSeparateiARB\");\n\n            if (DrawElementsBaseVertex == null && Extensions.Contains(\"GL_ARB_draw_elements_base_vertex\"))\n                DrawElementsBaseVertex = LoadFunctionOrNull<DrawElementsBaseVertexDelegate>(\"glDrawElementsBaseVertex\");\n            if (DrawRangeElementsBaseVertex == null && Extensions.Contains(\"GL_ARB_draw_elements_base_vertex\"))\n                DrawRangeElementsBaseVertex = LoadFunctionOrNull<DrawRangeElementsBaseVertexDelegate>(\"glDrawRangeElementsBaseVertex\");\n        }\n\n\n        /* Helper Functions */\n\n        internal void DepthRange(float min, float max)\n        {\n            if (BoundApi == RenderApi.ES)\n                DepthRangef(min, max);\n            else\n                DepthRanged(min, max);\n        }\n\n        internal void Uniform1(int location, int value)\n        {\n            Uniform1i(location, value);\n        }\n        \n        internal unsafe void Uniform4(int location, Vector4 value)\n        {\n            Uniform4fv(location, 1, &value);\n        }\n\n        internal void Uniform1(int location, float value)\n        {\n            Uniform1f(location, value);\n        }\n\n        internal unsafe void Uniform1(int location, int count, int* value)\n        {\n            Uniform1iv(location, count, value);\n        }\n\n        internal unsafe void Uniform1(int location, int count, float* value)\n        {\n            Uniform1fv(location, count, value);\n        }\n\n        internal unsafe void Uniform2(int location, int count, Vector2* value)\n        {\n            Uniform2fv(location, count, value);\n        }\n\n        internal unsafe void Uniform3(int location, int count, Vector3* value)\n        {\n            Uniform3fv(location, count, value);\n        }\n\n        internal unsafe void Uniform4(int location, int count, Vector4* value)\n        {\n            Uniform4fv(location, count, value);\n        }\n\n        internal unsafe void UniformMatrix2x2(int location, int count, bool transpose, float* value)\n        {\n            UniformMatrix2fv(location, count, transpose, value);\n        }\n\n        internal unsafe void UniformMatrix3x3(int location, int count, bool transpose, float* value)\n        {\n            UniformMatrix3fv(location, count, transpose, value);\n        }\n\n        internal unsafe void UniformMatrix4x4(int location, int count, bool transpose, Matrix* value)\n        {\n            UniformMatrix4fv(location, count, transpose, value);\n        }\n\n        internal string GetString(StringName name)\n        {\n            IntPtr pStr = GetStringInternal(name);\n            return Marshal.PtrToStringAnsi(pStr);\n        }\n\n        internal string GetProgramInfoLog(int programId)\n        {\n            int length = 0;\n            GetProgram(programId, GetProgramParameterName.LogLength, out length);\n            StringBuilder sb = new StringBuilder(length, Math.Max(length, 1));\n            GetProgramInfoLogInternal(programId, length, IntPtr.Zero, sb);\n            return sb.ToString();\n        }\n\n        internal string GetShaderInfoLog(int shaderId)\n        {\n            int length = 0;\n            GetShader(shaderId, ShaderParameter.LogLength, out length);\n            StringBuilder sb = new StringBuilder(length, Math.Max(length, 1));\n            GetShaderInfoLogInternal(shaderId, length, IntPtr.Zero, sb);\n            return sb.ToString();\n        }\n\n        internal void ShaderSource(int shaderId, byte[] shaderBytecode)\n        {\n            ShaderSource(shaderId, shaderBytecode, 0, shaderBytecode.Length);\n        }\n\n        internal unsafe void ShaderSource(int shaderId, byte[] shaderBytecode, int index, int count)\n        {\n            fixed (void* pData = &shaderBytecode[index])\n            {\n                void** ppData = &pData;\n                ShaderSourceInternal(shaderId, 1, new IntPtr(&pData), &count);\n            }\n        }\n\n        internal unsafe void GetShader(int shaderId, ShaderParameter name, out int result)\n        {\n            fixed (int* ptr = &result)\n            {\n                GetShaderiv(shaderId, (int)name, ptr);\n            }\n        }\n\n        internal unsafe void GetProgram(int programId, GetProgramParameterName name, out int result)\n        {\n            fixed (int* ptr = &result)\n            {\n                GetProgramiv(programId, (int)name, ptr);\n            }\n        }\n\n        internal unsafe void GetInteger(GetPName name, out int value)\n        {\n            fixed (int* ptr = &value)\n            {\n                GetIntegerv((int)name, ptr);\n            }\n        }\n\n        internal unsafe void GetInteger(int name, out int value)\n        {\n            fixed (int* ptr = &value)\n            {\n                GetIntegerv(name, ptr);\n            }\n        }\n\n        internal void TexParameter(TextureTarget target, TextureParameterName name, float value)\n        {\n            TexParameterf(target, name, value);\n        }\n\n        internal unsafe void TexParameter(TextureTarget target, TextureParameterName name, float[] values)\n        {\n            fixed (float* ptr = &values[0])\n            {\n                TexParameterfv(target, name, ptr);\n            }\n        }\n\n        internal void TexParameter(TextureTarget target, TextureParameterName name, int value)\n        {\n            TexParameteri(target, name, value);\n        }\n\n\n        [Conditional(\"DEBUG\")]\n        [DebuggerHidden]\n        public void CheckGLError()\n        {\n            ErrorCode error = this.GetError();\n            if (error == ErrorCode.NO_ERROR)\n                return;\n\n            string errorMsg = String.Format(\"GL_ERROR: {0} (0x{1:X4})\", error, (int)error);\n            //Console.WriteLine(errorMsg);\n            throw new OpenGLException(\"GL.GetError() returned \" + errorMsg);\n        }\n\n        [Conditional(\"DEBUG\")]\n        public void LogGLError(string location)\n        {\n            try\n            {\n                this.CheckGLError();\n            }\n            catch (OpenGLException ex)\n            {\n#if ANDROID\n                // Todo: Add generic logging interface\n                Android.Util.Log.Debug(\"KNI\", \"OpenGLException at \" + location + \" - \" + ex.Message);\n#else\n                Debug.WriteLine(\"OpenGLException at \" + location + \" - \" + ex.Message);\n#endif\n            }\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Shader/ConcreteConstantBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    internal sealed class ConcreteConstantBuffer : ConstantBufferStrategy\n    {\n        private ShaderProgram _shaderProgram = null;\n        private int _location;\n\n        static ConcreteConstantBuffer _lastConstantBufferApplied = null;\n\n\n        public ConcreteConstantBuffer(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats)\n            : base(contextStrategy, name, parameters, offsets, sizeInBytes, integersAsFloats)\n        {\n\n        }\n\n        private ConcreteConstantBuffer(ConcreteConstantBuffer source)\n            : base(source)\n        {\n        }\n\n        public override object Clone()\n        {\n            return new ConcreteConstantBuffer(this);\n        }\n\n        internal unsafe void PlatformApply(ConcreteGraphicsContextGL ccontextStrategy, ShaderProgram shaderProgram, int slot)\n        {\n            System.Diagnostics.Debug.Assert(slot == 0);\n\n            bool isSameShaderProgram = _shaderProgram == shaderProgram;\n            if (!isSameShaderProgram)\n            {\n                // If the program changed then lookup the uniform location again.\n                int location = ccontextStrategy.GetUniformLocation(shaderProgram, Name);\n                if (location == -1)\n                    return;\n\n                _shaderProgram = shaderProgram;\n                _location = location;\n            }\n\n            if (base.Dirty\n            // If the shader program changed then apply the buffer.\n            ||  !isSameShaderProgram\n            // If the shader program is the same, the effect may still be different and have different values in the buffer\n            ||  !Object.ReferenceEquals(this, ConcreteConstantBuffer._lastConstantBufferApplied)\n            )\n            {\n                var GL = ccontextStrategy.GL;\n\n                fixed (void* bytePtr = this.BufferData)\n                {\n                    // TODO: We need to know the type of buffer float/int/bool\n                    // and cast this correctly... else it doesn't work as i guess\n                    // GL is checking the type of the uniform.\n\n                    System.Diagnostics.Debug.Assert((this.BufferData.Length % 16) == 0);\n                    GL.Uniform4(_location, this.BufferData.Length >> 4, (Vector4*)bytePtr);\n                    GL.CheckGLError();\n                }\n\n               base.Dirty = false;\n                ConcreteConstantBuffer._lastConstantBufferApplied = this;\n            }\n        }\n\n        public override void PlatformContextLost()\n        {\n            // Force the uniform location to be looked up again\n            _shaderProgram = null;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Shader/ConcreteConstantBufferCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteConstantBufferCollection : ConstantBufferCollectionStrategy\n    {\n        private uint _valid;\n\n        internal uint InternalValid { get { return this._valid; } }\n\n        internal ConcreteConstantBufferCollection(int capacity)\n            : base(capacity)\n        {\n            // hard limit of 32 because of _valid flags being 32bits.\n            if (capacity > 32)\n                throw new ArgumentOutOfRangeException(\"capacity\");\n\n            _valid = 0;\n        }\n\n        public override ConstantBuffer this[int index]\n        {\n            get { return base[index]; }\n            set\n            {\n                if (base[index] != value)\n                {\n                    uint mask = ((uint)1) << index;\n                    base[index] = value;\n\n                    if (value != null)\n                        _valid |= mask;\n                    else\n                        _valid &= ~mask;\n                }\n            }\n        }\n\n        public override void Clear()\n        {\n            for (int slot = 0; slot < base.Length; slot++)\n                base[slot] = null;\n\n            _valid = 0;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Shader/ConcretePixelShader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcretePixelShader : ConcreteShader\n    {\n\n        internal ConcretePixelShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            base.CreateShader(contextStrategy, ShaderType.FragmentShader, shaderVersion, shaderBytecode);\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n\n            base.PlatformGraphicsContextLost();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Shader/ConcreteShader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Text.RegularExpressions;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class ConcreteShader : ShaderStrategy\n    {\n        // The shader handle.\n        private int _shaderHandle = -1;\n\n        internal int ShaderHandle { get { return _shaderHandle; } }\n\n\n        internal ConcreteShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            GraphicsProfile graphicsProfile = this.GraphicsDeviceStrategy.GraphicsProfile;\n            ShaderVersion maxVersion = MaxShaderVersions[graphicsProfile];\n            if (shaderVersion != default\n            &&  shaderVersion > maxVersion)\n            {\n                throw new NotSupportedException(\n                    $\"Shader model {shaderVersion} is not supported by the current graphics profile '{graphicsProfile}'.\");\n            }\n\n        }\n\n        internal void CreateShader(GraphicsContextStrategy contextStrategy, ShaderType shaderType, ShaderVersion shaderVersion, byte[] shaderBytecode)\n        {\n            bool isSharedContext = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                _shaderHandle = GL.CreateShader(shaderType);\n                GL.CheckGLError();\n\n                if (shaderVersion == default) // Handle legacy MGFX\n                {\n                    if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.GLES\n                    &&  this.GraphicsDevice.GraphicsProfile >= GraphicsProfile.HiDef)\n                    {\n                        string glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode);\n                        // GLES 3.00 is required for gl_FragData\n                        string glsl300esCode = ConvertGLSLToGLSL300es(shaderType, glslCode);\n                        shaderBytecode = System.Text.Encoding.ASCII.GetBytes(glsl300esCode);\n\n                        GL.ShaderSource(_shaderHandle, shaderBytecode);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        GL.ShaderSource(_shaderHandle, shaderBytecode);\n                        GL.CheckGLError();\n                    }\n                }\n                else // Handle KNIFX\n                {\n                    int bytecodeOffset;\n\n                    if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.GLES\n                    ||  this.GraphicsDevice.Adapter.Backend == GraphicsBackend.WebGL)\n                    {\n                        if (this.GraphicsDevice.GraphicsProfile >= GraphicsProfile.HiDef)\n                        {\n                            bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 3, minor: 0, es: true);\n                        }\n                        else\n                        {\n                            bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 1, minor: 0, es: false);\n                        }\n                    }\n                    else //if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.OpenGL)\n                    {\n                        bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 1, minor: 1, es: false);\n                    }\n\n                    int bytecodeLength = BitConverter.ToInt32(shaderBytecode, bytecodeOffset); bytecodeOffset += 4;\n                    GL.ShaderSource(_shaderHandle, shaderBytecode, bytecodeOffset, bytecodeLength);\n                    GL.CheckGLError();\n                }\n\n                GL.CompileShader(_shaderHandle);\n                GL.CheckGLError();\n                int compiled = 0;\n                GL.GetShader(_shaderHandle, ShaderParameter.CompileStatus, out compiled);\n                GL.CheckGLError();\n                if (compiled != (int)Bool.True)\n                {\n                    string log = GL.GetShaderInfoLog(_shaderHandle);\n                    Debug.WriteLine(log);\n\n                    if (!GraphicsDevice.IsDisposed)\n                    {\n                        if (GL.IsShader(_shaderHandle))\n                        {\n                            GL.DeleteShader(_shaderHandle);\n                            GL.CheckGLError();\n                        }\n                    }\n                    _shaderHandle = -1;\n\n                    throw new InvalidOperationException(\"Shader Compilation Failed.\"\n                        + Environment.NewLine + log);\n                }\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        private int FindShaderByteCode(byte[] shaderBytecode, int major, int minor, bool es)\n        {\n            int pos = 0;\n            \n            short reserved0 = BitConverter.ToInt16(shaderBytecode, pos); pos += 2;\n            if (reserved0 != 0)\n                throw new Exception(\"Invalid shader bytecode\");\n\n            short count = BitConverter.ToInt16(shaderBytecode, pos); pos += 2;\n\n            for (int i = 0; i < count; i++)\n            {\n                int major0 = shaderBytecode[pos]; pos += 1;\n                int minor0 = shaderBytecode[pos]; pos += 1;\n                bool es0 = BitConverter.ToBoolean(shaderBytecode, pos); pos += 1;\n                int bytecodeOffset0 = BitConverter.ToInt32(shaderBytecode, pos); pos += 4;\n\n                if (major == major0\n                &&  minor == minor0\n                &&  es == es0)\n                {\n                    return bytecodeOffset0;\n                }\n            }\n\n            throw new InvalidOperationException(\"GLSL bytecode not found.\");\n        }\n\n        static Regex rgxOES = new Regex(\n                @\"^#extension GL_OES_standard_derivatives : enable\\n\", RegexOptions.Multiline);\n        static Regex rgxPrecision = new Regex(\n                @\"precision mediump (float|int);\", RegexOptions.Multiline);\n        static Regex rgxAttribute = new Regex(\n                @\"^attribute(?=\\s)\", RegexOptions.Multiline);\n        static Regex rgxVarying = new Regex(\n                @\"^varying(?=\\s)\", RegexOptions.Multiline);\n        static Regex rgxFragColor = new Regex(\n                @\"^#define (\\w+) gl_FragColor\", RegexOptions.Multiline);\n        static Regex rgxFragData = new Regex(\n                @\"^#define (\\w+) gl_FragData\\[(\\d+)\\]\", RegexOptions.Multiline);\n        static Regex rgxTexture = new Regex(\n                @\"texture(2D|3D|Cube)(?=\\()\", RegexOptions.Multiline);\n\n        private string ConvertGLSLToGLSL300es(ShaderType shaderType, string glslCode)\n        {\n            switch (shaderType)\n            {\n                case ShaderType.VertexShader:\n                    {\n                        glslCode = rgxVarying.Replace(glslCode, \"out\");\n                    }\n                    break;\n\n                case ShaderType.FragmentShader:\n                    {\n                        glslCode = rgxOES.Replace(glslCode, \"\");\n                        glslCode = rgxVarying.Replace(glslCode, \"in\");\n                        glslCode = rgxFragColor.Replace(glslCode, \"out vec4 $1;\");\n                        glslCode = rgxFragData .Replace(glslCode, \"layout(location=$2) out vec4 $1;\");\n                    }\n                    break;\n            }\n\n            glslCode = rgxPrecision.Replace(glslCode, \"precision highp $1;\");\n            glslCode = rgxAttribute.Replace(glslCode, \"in\");\n            glslCode = rgxTexture.Replace(glslCode, \"texture\");\n\n            glslCode = \"#version 300 es\\n\"\n                     + glslCode;\n\n            return glslCode;\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            var GL = _contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            if (_shaderHandle != -1)\n            {\n                if (GL.IsShader(_shaderHandle))\n                {\n                    GL.DeleteShader(_shaderHandle);\n                    GL.CheckGLError();\n                }\n                _shaderHandle = -1;\n            }\n\n            base.PlatformGraphicsContextLost();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (_shaderHandle != -1)\n            {\n                _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindDisposeContext();\n                try\n                {\n                    var GL = _contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                    if (GL.IsShader(_shaderHandle))\n                    {\n                        GL.DeleteShader(_shaderHandle);\n                        GL.CheckGLError();\n                    }\n                }\n                finally\n                {\n                    _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindDisposeContext();\n                }\n            }\n\n            _shaderHandle = -1;\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Shader/ConcreteVertexShader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcreteVertexShader : ConcreteShader\n    {\n        private readonly Dictionary<VertexElement[], VertexDeclarationAttributeInfo> _vertexAttribInfoCache = new Dictionary<VertexElement[], VertexDeclarationAttributeInfo>();\n\n        internal ConcreteVertexShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            base.CreateShader(contextStrategy, ShaderType.VertexShader, shaderVersion, shaderBytecode);\n        }\n\n        private int GetAttributeLocation(VertexElementUsage usage, int index)\n        {\n            for (int i = 0; i < Attributes.Length; i++)\n            {\n                if ((Attributes[i].usage == usage) && (Attributes[i].index == index))\n                    return Attributes[i].location;\n            }\n            return -1;\n        }\n\n        internal VertexDeclarationAttributeInfo GetVertexAttribInfo(ConcreteGraphicsContextGL concreteGraphicsContextGL, VertexDeclaration vertexDeclaration)\n        {\n            VertexElement[] vertexElements = ((IPlatformVertexDeclaration)vertexDeclaration).InternalVertexElements;\n\n            VertexDeclarationAttributeInfo vertexAttribInfo;\n            if (_vertexAttribInfoCache.TryGetValue(vertexElements, out vertexAttribInfo))\n                return vertexAttribInfo;\n\n            int maxVertexBufferSlots = concreteGraphicsContextGL.Capabilities.MaxVertexBufferSlots;\n            vertexAttribInfo = ConcreteVertexShader.CreateVertexAttribInfo(this, vertexElements, maxVertexBufferSlots);\n            _vertexAttribInfoCache.Add(vertexElements, vertexAttribInfo);\n            return vertexAttribInfo;\n        }\n\n        private static VertexDeclarationAttributeInfo CreateVertexAttribInfo(ConcreteVertexShader vertexShaderStrategy, VertexElement[] vertexElements, int maxVertexBufferSlots)\n        {\n            // Get the vertex attribute info and cache it\n            VertexDeclarationAttributeInfo attrInfo = new VertexDeclarationAttributeInfo(maxVertexBufferSlots);\n\n            for (int v = 0; v < vertexElements.Length; v++)\n            {\n                int attributeLocation = vertexShaderStrategy.GetAttributeLocation(vertexElements[v].VertexElementUsage, vertexElements[v].UsageIndex);\n                // XNA appears to ignore usages it can't find a match for, so we will do the same\n                if (attributeLocation < 0)\n                    continue;\n\n                VertexDeclarationAttributeInfoElement vertexAttribInfoElement = new VertexDeclarationAttributeInfoElement();\n                vertexAttribInfoElement.NumberOfElements = vertexElements[v].VertexElementFormat.ToGLNumberOfElements();\n                vertexAttribInfoElement.VertexAttribPointerType = vertexElements[v].VertexElementFormat.ToGLVertexAttribPointerType();\n                vertexAttribInfoElement.Normalized = vertexElements[v].ToGLVertexAttribNormalized();\n                vertexAttribInfoElement.Offset = vertexElements[v].Offset;\n                vertexAttribInfoElement.AttributeLocation = attributeLocation;\n\n                attrInfo.Elements.Add(vertexAttribInfoElement);\n                attrInfo.EnabledAttributes[vertexAttribInfoElement.AttributeLocation] = true;\n            }\n\n            return attrInfo;\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n\n            base.PlatformGraphicsContextLost();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Shader/ShaderProgram.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ShaderProgram\n    {\n        public readonly int Program;\n\n        internal readonly Dictionary<string, int> _uniformLocationCache = new Dictionary<string, int>();\n\n        public ShaderProgram(int program)\n        {\n            Program = program;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/States/ConcreteBlendState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteBlendState : ResourceBlendStateStrategy\n    {\n\n        internal ConcreteBlendState(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n        internal void PlatformApplyState(ConcreteGraphicsContextGL context, bool force = false)\n        {\n            var GL = context.GL;\n\n            bool blendEnabled = !(this.ColorSourceBlend == Blend.One &&\n                                  this.ColorDestinationBlend == Blend.Zero &&\n                                  this.AlphaSourceBlend == Blend.One &&\n                                  this.AlphaDestinationBlend == Blend.Zero);\n\n            if (force ||\n                blendEnabled != context._lastBlendEnable)\n            {\n                if (blendEnabled)\n                    GL.Enable(EnableCap.Blend);\n                else\n                    GL.Disable(EnableCap.Blend);\n                GL.CheckGLError();\n                context._lastBlendEnable = blendEnabled;\n            }\n\n            if (!this.IndependentBlendEnable)\n            {\n                if (force ||\n                    this.ColorBlendFunction != context._lastBlendState.ColorBlendFunction ||\n                    this.AlphaBlendFunction != context._lastBlendState.AlphaBlendFunction)\n                {\n                    GL.BlendEquationSeparate(\n                        ToGLBlendEquationMode(this.ColorBlendFunction),\n                        ToGLBlendEquationMode(this.AlphaBlendFunction));\n                    GL.CheckGLError();\n                    for (int i = 0; i < 4; i++)\n                    {\n                        context._lastBlendState[i].ColorBlendFunction = this.ColorBlendFunction;\n                        context._lastBlendState[i].AlphaBlendFunction = this.AlphaBlendFunction;\n                    }\n                }\n\n                if (force ||\n                    this.ColorSourceBlend != context._lastBlendState.ColorSourceBlend ||\n                    this.ColorDestinationBlend != context._lastBlendState.ColorDestinationBlend ||\n                    this.AlphaSourceBlend != context._lastBlendState.AlphaSourceBlend ||\n                    this.AlphaDestinationBlend != context._lastBlendState.AlphaDestinationBlend)\n                {\n                    GL.BlendFuncSeparate(\n                        ToGLBlendFunc(this.ColorSourceBlend),\n                        ToGLBlendFunc(this.ColorDestinationBlend),\n                        ToGLBlendFunc(this.AlphaSourceBlend),\n                        ToGLBlendFunc(this.AlphaDestinationBlend));\n                    GL.CheckGLError();\n                    for (int i = 0; i < 4; i++)\n                    {\n                        context._lastBlendState[i].ColorSourceBlend = this.ColorSourceBlend;\n                        context._lastBlendState[i].ColorDestinationBlend = this.ColorDestinationBlend;\n                        context._lastBlendState[i].AlphaSourceBlend = this.AlphaSourceBlend;\n                        context._lastBlendState[i].AlphaDestinationBlend = this.AlphaDestinationBlend;\n                    }\n                }\n            }\n            else // (_strategy.IndependentBlendEnable == true)\n            {\n                for (int i = 0; i < 4; i++)\n                {\n                    if (force ||\n                        this.Targets[i].ColorBlendFunction != context._lastBlendState[i].ColorBlendFunction ||\n                        this.Targets[i].AlphaBlendFunction != context._lastBlendState[i].AlphaBlendFunction)\n                    {\n                        GL.BlendEquationSeparatei(i,\n                            ToGLBlendEquationMode(this.Targets[i].ColorBlendFunction),\n                            ToGLBlendEquationMode(this.Targets[i].AlphaBlendFunction));\n                        GL.CheckGLError();\n                        context._lastBlendState[i].ColorBlendFunction = this.Targets[i].ColorBlendFunction;\n                        context._lastBlendState[i].AlphaBlendFunction = this.Targets[i].AlphaBlendFunction;\n                    }\n\n                    if (force ||\n                        this.Targets[i].ColorSourceBlend != context._lastBlendState[i].ColorSourceBlend ||\n                        this.Targets[i].ColorDestinationBlend != context._lastBlendState[i].ColorDestinationBlend ||\n                        this.Targets[i].AlphaSourceBlend != context._lastBlendState[i].AlphaSourceBlend ||\n                        this.Targets[i].AlphaDestinationBlend != context._lastBlendState[i].AlphaDestinationBlend)\n                    {\n                        GL.BlendFuncSeparatei(i,\n                            ToGLBlendFunc(this.Targets[i].ColorSourceBlend),\n                            ToGLBlendFunc(this.Targets[i].ColorDestinationBlend),\n                            ToGLBlendFunc(this.Targets[i].AlphaSourceBlend),\n                            ToGLBlendFunc(this.Targets[i].AlphaDestinationBlend));\n                        GL.CheckGLError();\n                        context._lastBlendState[i].ColorSourceBlend = this.Targets[i].ColorSourceBlend;\n                        context._lastBlendState[i].ColorDestinationBlend = this.Targets[i].ColorDestinationBlend;\n                        context._lastBlendState[i].AlphaSourceBlend = this.Targets[i].AlphaSourceBlend;\n                        context._lastBlendState[i].AlphaDestinationBlend = this.Targets[i].AlphaDestinationBlend;\n                    }\n                }\n            }\n\n            if (force ||\n                this.ColorWriteChannels != context._lastBlendState.ColorWriteChannels)\n            {\n                GL.ColorMask(\n                    (this.ColorWriteChannels & ColorWriteChannels.Red) != 0,\n                    (this.ColorWriteChannels & ColorWriteChannels.Green) != 0,\n                    (this.ColorWriteChannels & ColorWriteChannels.Blue) != 0,\n                    (this.ColorWriteChannels & ColorWriteChannels.Alpha) != 0);\n                GL.CheckGLError();\n                context._lastBlendState.ColorWriteChannels = this.ColorWriteChannels;\n            }\n        }\n\n        private static BlendEquationMode ToGLBlendEquationMode(BlendFunction function)\n        {\n            switch (function)\n            {\n                case BlendFunction.Add:\n                    return BlendEquationMode.FuncAdd;\n                case BlendFunction.ReverseSubtract:\n                    return BlendEquationMode.FuncReverseSubtract;\n                case BlendFunction.Subtract:\n                    return BlendEquationMode.FuncSubtract;\n\n#if DESKTOPGL || IOS || TVOS\n                case BlendFunction.Max:\n                    return BlendEquationMode.Max;\n                case BlendFunction.Min:\n                    return BlendEquationMode.Min;\n#endif\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        private static BlendingFunc ToGLBlendFunc(Blend blend)\n        {\n            switch (blend)\n            {\n                case Blend.Zero:\n                    return BlendingFunc.Zero;\n                case Blend.One:\n                    return BlendingFunc.One;\n                case Blend.BlendFactor:\n                    return BlendingFunc.ConstantColor;\n                case Blend.DestinationAlpha:\n                    return BlendingFunc.DstAlpha;\n                case Blend.DestinationColor:\n                    return BlendingFunc.DstColor;\n                case Blend.InverseBlendFactor:\n                    return BlendingFunc.OneMinusConstantColor;\n                case Blend.InverseDestinationAlpha:\n                    return BlendingFunc.OneMinusDstAlpha;\n                case Blend.InverseDestinationColor:\n                    return BlendingFunc.OneMinusDstColor;\n                case Blend.InverseSourceAlpha:\n                    return BlendingFunc.OneMinusSrcAlpha;\n                case Blend.InverseSourceColor:\n                    return BlendingFunc.OneMinusSrcColor;\n                case Blend.SourceAlpha:\n                    return BlendingFunc.SrcAlpha;\n                case Blend.SourceAlphaSaturation:\n                    return BlendingFunc.SrcAlphaSaturate;\n                case Blend.SourceColor:\n                    return BlendingFunc.SrcColor;\n\n                default:\n                    throw new ArgumentOutOfRangeException(\"blend\", \"The specified blend function is not implemented.\");\n            }\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/States/ConcreteDepthStencilState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteDepthStencilState : ResourceDepthStencilStateStrategy\n    {\n\n        internal ConcreteDepthStencilState(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n\n        internal void PlatformApplyState(ConcreteGraphicsContextGL context, bool force = false)\n        {\n            var GL = context.GL;\n\n            if (force ||\n                this.DepthBufferEnable != context._lastDepthStencilState.DepthBufferEnable)\n            {\n                if (!DepthBufferEnable)\n                {\n                    GL.Disable(EnableCap.DepthTest);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    // enable Depth Buffer\n                    GL.Enable(EnableCap.DepthTest);\n                    GL.CheckGLError();\n                }\n                context._lastDepthStencilState.DepthBufferEnable = this.DepthBufferEnable;\n            }\n\n            if (force || \n                this.DepthBufferFunction != context._lastDepthStencilState.DepthBufferFunction)\n            {\n                GL.DepthFunc(DepthBufferFunction.ToGLComparisonFunction());\n                GL.CheckGLError();\n                context._lastDepthStencilState.DepthBufferFunction = this.DepthBufferFunction;\n            }\n\n            if (force || \n                this.DepthBufferWriteEnable != context._lastDepthStencilState.DepthBufferWriteEnable)\n            {\n                GL.DepthMask(DepthBufferWriteEnable);\n                GL.CheckGLError();\n                context._lastDepthStencilState.DepthBufferWriteEnable = this.DepthBufferWriteEnable;\n            }\n\n            if (force ||\n                this.StencilEnable != context._lastDepthStencilState.StencilEnable)\n            {\n                if (!StencilEnable)\n                {\n                    GL.Disable(EnableCap.StencilTest);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    // enable Stencil\n                    GL.Enable(EnableCap.StencilTest);\n                    GL.CheckGLError();\n                }\n                context._lastDepthStencilState.StencilEnable = this.StencilEnable;\n            }\n\n            // set function\n            if (this.TwoSidedStencilMode)\n            {\n                StencilFace cullFaceModeFront = StencilFace.Front;\n                StencilFace cullFaceModeBack = StencilFace.Back;\n                StencilFace stencilFaceFront = StencilFace.Front;\n                StencilFace stencilFaceBack = StencilFace.Back;\n\n                if (force ||\n\t\t\t\t\tthis.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode ||\n\t\t\t\t\tthis.StencilFunction != context._lastDepthStencilState.StencilFunction ||\n\t\t\t\t\tthis.ReferenceStencil != context._lastDepthStencilState.ReferenceStencil ||\n\t\t\t\t\tthis.StencilMask != context._lastDepthStencilState.StencilMask)\n\t\t\t\t{\n                    GL.StencilFuncSeparate(cullFaceModeFront, this.StencilFunction.ToGLComparisonFunction(),\n                                           this.ReferenceStencil, this.StencilMask);\n                    GL.CheckGLError();\n                    context._lastDepthStencilState.StencilFunction = this.StencilFunction;\n                    context._lastDepthStencilState.ReferenceStencil = this.ReferenceStencil;\n                    context._lastDepthStencilState.StencilMask = this.StencilMask;\n                }\n\n                if (force ||\n                    this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode ||\n                    this.CounterClockwiseStencilFunction != context._lastDepthStencilState.CounterClockwiseStencilFunction ||\n                    this.ReferenceStencil != context._lastDepthStencilState.ReferenceStencil ||\n                    this.StencilMask != context._lastDepthStencilState.StencilMask)\n\t\t\t    {\n                    GL.StencilFuncSeparate(cullFaceModeBack, this.CounterClockwiseStencilFunction.ToGLComparisonFunction(),\n                                           this.ReferenceStencil, this.StencilMask);\n                    GL.CheckGLError();\n                    context._lastDepthStencilState.CounterClockwiseStencilFunction = this.CounterClockwiseStencilFunction;\n                    context._lastDepthStencilState.ReferenceStencil = this.ReferenceStencil;\n                    context._lastDepthStencilState.StencilMask = this.StencilMask;\n                }\n\n                \n                if (force ||\n\t\t\t\t\tthis.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode ||\n\t\t\t\t\tthis.StencilFail != context._lastDepthStencilState.StencilFail ||\n\t\t\t\t\tthis.StencilDepthBufferFail != context._lastDepthStencilState.StencilDepthBufferFail ||\n\t\t\t\t\tthis.StencilPass != context._lastDepthStencilState.StencilPass)\n                {\n                    GL.StencilOpSeparate(stencilFaceFront, ToGLStencilOp(this.StencilFail),\n                                         ToGLStencilOp(this.StencilDepthBufferFail),\n                                         ToGLStencilOp(this.StencilPass));\n                    GL.CheckGLError();\n                    context._lastDepthStencilState.StencilFail = this.StencilFail;\n                    context._lastDepthStencilState.StencilDepthBufferFail = this.StencilDepthBufferFail;\n                    context._lastDepthStencilState.StencilPass = this.StencilPass;\n                }\n\n                if (force ||\n                    this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode ||\n                    this.CounterClockwiseStencilFail != context._lastDepthStencilState.CounterClockwiseStencilFail ||\n                    this.CounterClockwiseStencilDepthBufferFail != context._lastDepthStencilState.CounterClockwiseStencilDepthBufferFail ||\n                    this.CounterClockwiseStencilPass != context._lastDepthStencilState.CounterClockwiseStencilPass)\n\t\t\t    {\n                    GL.StencilOpSeparate(stencilFaceBack, ToGLStencilOp(this.CounterClockwiseStencilFail),\n                                         ToGLStencilOp(this.CounterClockwiseStencilDepthBufferFail),\n                                         ToGLStencilOp(this.CounterClockwiseStencilPass));\n                    GL.CheckGLError();\n                    context._lastDepthStencilState.CounterClockwiseStencilFail = this.CounterClockwiseStencilFail;\n                    context._lastDepthStencilState.CounterClockwiseStencilDepthBufferFail = this.CounterClockwiseStencilDepthBufferFail;\n                    context._lastDepthStencilState.CounterClockwiseStencilPass = this.CounterClockwiseStencilPass;\n                }\n            }\n            else\n            {\n                if (force ||\n\t\t\t\t\tthis.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode ||\n\t\t\t\t\tthis.StencilFunction != context._lastDepthStencilState.StencilFunction ||\n\t\t\t\t\tthis.ReferenceStencil != context._lastDepthStencilState.ReferenceStencil ||\n\t\t\t\t\tthis.StencilMask != context._lastDepthStencilState.StencilMask)\n\t\t\t\t{\n                    GL.StencilFunc(this.StencilFunction.ToGLComparisonFunction(), ReferenceStencil, StencilMask);\n                    GL.CheckGLError();\n                    context._lastDepthStencilState.StencilFunction = this.StencilFunction;\n                    context._lastDepthStencilState.ReferenceStencil = this.ReferenceStencil;\n                    context._lastDepthStencilState.StencilMask = this.StencilMask;\n                }\n\n                if (force ||\n                    this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode ||\n                    this.StencilFail != context._lastDepthStencilState.StencilFail ||\n                    this.StencilDepthBufferFail != context._lastDepthStencilState.StencilDepthBufferFail ||\n                    this.StencilPass != context._lastDepthStencilState.StencilPass)\n                {\n                    GL.StencilOp(ToGLStencilOp(StencilFail),\n                                 ToGLStencilOp(StencilDepthBufferFail),\n                                 ToGLStencilOp(StencilPass));\n                    GL.CheckGLError();\n                    context._lastDepthStencilState.StencilFail = this.StencilFail;\n                    context._lastDepthStencilState.StencilDepthBufferFail = this.StencilDepthBufferFail;\n                    context._lastDepthStencilState.StencilPass = this.StencilPass;\n                }\n            }\n\n            context._lastDepthStencilState.TwoSidedStencilMode = this.TwoSidedStencilMode;\n\n            if (force ||\n                this.StencilWriteMask != context._lastDepthStencilState.StencilWriteMask)\n            {\n                GL.StencilMask(this.StencilWriteMask);\n                GL.CheckGLError();\n                context._lastDepthStencilState.StencilWriteMask = this.StencilWriteMask;\n            }\n        }\n\n        private static StencilOp ToGLStencilOp(StencilOperation operation)\n        {\n            switch (operation)\n            {\n                case StencilOperation.Keep:\n                    return StencilOp.Keep;\n                case StencilOperation.Decrement:\n                    return StencilOp.DecrWrap;\n                case StencilOperation.DecrementSaturation:\n                    return StencilOp.Decr;\n                case StencilOperation.IncrementSaturation:\n                    return StencilOp.Incr;\n                case StencilOperation.Increment:\n                    return StencilOp.IncrWrap;\n                case StencilOperation.Invert:\n                    return StencilOp.Invert;\n                case StencilOperation.Replace:\n                    return StencilOp.Replace;\n                case StencilOperation.Zero:\n                    return StencilOp.Zero;\n\n                default:\n                    return StencilOp.Keep;\n            }\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/States/ConcreteRasterizerState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRasterizerState : ResourceRasterizerStateStrategy\n    {\n\n        internal ConcreteRasterizerState(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n\n        internal void PlatformApplyState(ConcreteGraphicsContextGL context, bool force = false)\n        {\n            var GL = context.GL;\n\n            if (force)\n            {\n                // Turn off dithering to make sure data returned by Texture.GetData is accurate\n                GL.Disable(EnableCap.Dither);\n            }\n\n            // When rendering offscreen the faces change order.\n            bool offscreen = context.FramebufferRequireFlippedY;\n\n            switch (CullMode)\n            {\n                case CullMode.None:\n                    GL.Disable(EnableCap.CullFace);\n                    GL.CheckGLError();\n                    break;\n\n                case CullMode.CullClockwiseFace:\n                    GL.Enable(EnableCap.CullFace);\n                    GL.CheckGLError();\n                    GL.CullFace(CullFaceMode.Back);\n                    GL.CheckGLError();\n                    if (offscreen)\n                        GL.FrontFace(FrontFaceDirection.Cw);\n                    else\n                        GL.FrontFace(FrontFaceDirection.Ccw);\n                    GL.CheckGLError();\n                    break;\n\n                case CullMode.CullCounterClockwiseFace:\n                    GL.Enable(EnableCap.CullFace);\n                    GL.CheckGLError();\n                    GL.CullFace(CullFaceMode.Back);\n                    GL.CheckGLError();\n                    if (offscreen)\n                        GL.FrontFace(FrontFaceDirection.Ccw);\n                    else\n                        GL.FrontFace(FrontFaceDirection.Cw);\n                    GL.CheckGLError();\n                    break;\n\n                default:\n                    throw new InvalidOperationException(\"CullMode\");\n            }\n\n#if DESKTOPGL\n            if (FillMode == FillMode.WireFrame)\n                GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line);\n            else // FillMode.Solid\n                GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);\n#else\n            if (FillMode == FillMode.WireFrame)\n                throw new NotImplementedException();\n#endif\n\n            if (force ||\n                this.ScissorTestEnable != context._lastRasterizerState.ScissorTestEnable)\n\t\t\t{\n\t\t\t    if (ScissorTestEnable)\n\t\t\t\t    GL.Enable(EnableCap.ScissorTest);\n\t\t\t    else\n\t\t\t\t    GL.Disable(EnableCap.ScissorTest);\n                GL.CheckGLError();\n                context._lastRasterizerState.ScissorTestEnable = this.ScissorTestEnable;\n            }\n\n            if (force || \n                this.DepthBias != context._lastRasterizerState.DepthBias ||\n                this.SlopeScaleDepthBias != context._lastRasterizerState.SlopeScaleDepthBias)\n            {\n                if (this.DepthBias != 0 || this.SlopeScaleDepthBias != 0)\n                {\n                    // from the docs it seems this works the same as for Direct3D\n                    // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml\n                    // explanation for Direct3D is  in https://github.com/MonoGame/MonoGame/issues/4826\n                    DepthFormat activeDepthFormat;\n                    if (context.IsRenderTargetBound)\n                        activeDepthFormat = ((IRenderTarget)context.CurrentRenderTargetBindings[0].RenderTarget).DepthStencilFormat;\n                    else\n                        activeDepthFormat = base.GraphicsDeviceStrategy.PresentationParameters.DepthStencilFormat;\n\n                    int depthMul;\n                    switch (activeDepthFormat)\n                    {\n                        case DepthFormat.None:\n                            depthMul = 0;\n                            break;\n                        case DepthFormat.Depth16:\n                            depthMul = 1 << 16 - 1;\n                            break;\n                        case DepthFormat.Depth24:\n                        case DepthFormat.Depth24Stencil8:\n                            depthMul = 1 << 24 - 1;\n                            break;\n\n                        default:\n                            throw new ArgumentOutOfRangeException();\n                    }\n                    GL.Enable(EnableCap.PolygonOffsetFill);\n                    GL.PolygonOffset(this.SlopeScaleDepthBias, this.DepthBias * depthMul);\n                    GL.CheckGLError();\n                }\n                else\n                {\n                    GL.Disable(EnableCap.PolygonOffsetFill);\n                    GL.CheckGLError();\n                }\n                context._lastRasterizerState.DepthBias = this.DepthBias;\n                context._lastRasterizerState.SlopeScaleDepthBias = this.SlopeScaleDepthBias;\n            }\n\n            if (context.Capabilities.SupportsDepthClamp &&\n                (force ||\n                 this.DepthClipEnable != context._lastRasterizerState.DepthClipEnable))\n            {\n                if (!DepthClipEnable)\n                    GL.Enable(EnableCap.DepthClamp);\n                else\n                    GL.Disable(EnableCap.DepthClamp);\n                GL.CheckGLError();\n                context._lastRasterizerState.DepthClipEnable = this.DepthClipEnable;\n            }\n\n            // TODO: Implement MultiSampleAntiAlias\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/States/ConcreteSamplerState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteSamplerState : ResourceSamplerStateStrategy\n    {\n        private readonly float[] _openGLBorderColor = new float[4];\n\n        internal ConcreteSamplerState(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n\n        internal void PlatformApplyState(ConcreteGraphicsContextGL cgraphicsContext, TextureTarget target, bool useMipmaps = false)\n        {\n            Debug.Assert(GraphicsDevice == ((IPlatformGraphicsContext)cgraphicsContext.Context).DeviceStrategy.Device, \"The state was created for a different device!\");\n\n            var GL = cgraphicsContext.GL;\n\n            // texture filtering\n            float textureMaxAnisotropy;\n            TextureMinFilter textureMinFilter = default(TextureMinFilter);\n            TextureMagFilter textureMaxFilter;\n            switch (Filter)\n            {\n                case TextureFilter.Point:\n                    textureMaxAnisotropy = 1.0f;\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.NearestMipmapNearest : TextureMinFilter.Nearest);\n                    textureMaxFilter = TextureMagFilter.Nearest;\n                    break;\n                case TextureFilter.Linear:\n                    textureMaxAnisotropy = 1.0f;\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.Linear);\n                    textureMaxFilter = TextureMagFilter.Linear;\n                    break;\n                case TextureFilter.Anisotropic:\n                    textureMaxAnisotropy = MathHelper.Clamp(this.MaxAnisotropy, 1.0f, cgraphicsContext.Capabilities.MaxTextureAnisotropy);\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.Linear);\n                    textureMaxFilter = TextureMagFilter.Linear;\n                    break;\n                case TextureFilter.PointMipLinear:\n                    textureMaxAnisotropy = 1.0f;\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.NearestMipmapLinear : TextureMinFilter.Nearest);\n                    textureMaxFilter = TextureMagFilter.Nearest;\n                    break;\n                case TextureFilter.LinearMipPoint:\n                    textureMaxAnisotropy = 1.0f;\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapNearest : TextureMinFilter.Linear);\n                    textureMaxFilter = TextureMagFilter.Linear;\n                    break;\n                case TextureFilter.MinLinearMagPointMipLinear:\n                    textureMaxAnisotropy = 1.0f;\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.Linear);\n                    textureMaxFilter = TextureMagFilter.Nearest;\n                    break;\n                case TextureFilter.MinLinearMagPointMipPoint:\n                    textureMaxAnisotropy = 1.0f;\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapNearest : TextureMinFilter.Linear);\n                    textureMaxFilter = TextureMagFilter.Nearest;\n                    break;\n                case TextureFilter.MinPointMagLinearMipLinear:\n                    textureMaxAnisotropy = 1.0f;\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.NearestMipmapLinear : TextureMinFilter.Nearest);\n                    textureMaxFilter = TextureMagFilter.Linear;\n                    break;\n                case TextureFilter.MinPointMagLinearMipPoint:\n                    textureMaxAnisotropy = 1.0f;\n                    textureMinFilter = (useMipmaps ? TextureMinFilter.NearestMipmapNearest : TextureMinFilter.Nearest);\n                    textureMaxFilter = TextureMagFilter.Linear;\n                    break;\n\n                default:\n                    throw new NotSupportedException();\n            }\n            if (cgraphicsContext.Capabilities.SupportsTextureFilterAnisotropic)\n            {\n                GL.TexParameter(target, TextureParameterName.TextureMaxAnisotropyExt, textureMaxAnisotropy);\n                GL.CheckGLError();\n            }\n            GL.TexParameter(target, TextureParameterName.TextureMinFilter, (int)textureMinFilter);\n            GL.CheckGLError();\n            GL.TexParameter(target, TextureParameterName.TextureMagFilter, (int)textureMaxFilter);\n            GL.CheckGLError();\n\n            // Set up texture addressing.\n            GL.TexParameter(target, TextureParameterName.TextureWrapS, (int)ToGLTextureAddressMode(AddressU));\n            GL.CheckGLError();\n            GL.TexParameter(target, TextureParameterName.TextureWrapT, (int)ToGLTextureAddressMode(AddressV));\n            GL.CheckGLError();\n\n#if !GLES\n            // Border color is not supported by glTexParameter in OpenGL ES 2.0\n            _openGLBorderColor[0] = BorderColor.R / 255.0f;\n            _openGLBorderColor[1] = BorderColor.G / 255.0f;\n            _openGLBorderColor[2] = BorderColor.B / 255.0f;\n            _openGLBorderColor[3] = BorderColor.A / 255.0f;\n            GL.TexParameter(target, TextureParameterName.TextureBorderColor, _openGLBorderColor);\n            GL.CheckGLError();\n            // LOD bias is not supported by glTexParameter in OpenGL ES 2.0\n            GL.TexParameter(target, TextureParameterName.TextureLodBias, MipMapLevelOfDetailBias);\n            GL.CheckGLError();\n            // Comparison samplers are not supported in OpenGL ES 2.0 (without an extension, anyway)\n            switch (FilterMode)\n            {\n                case TextureFilterMode.Comparison:\n                    GL.TexParameter(target, TextureParameterName.TextureCompareMode, (int)TextureCompareMode.CompareRefToTexture);\n                    GL.CheckGLError();\n                    GL.TexParameter(target, TextureParameterName.TextureCompareFunc, (int)ComparisonFunction.ToGLComparisonFunction());\n                    GL.CheckGLError();\n                    break;\n                case TextureFilterMode.Default:\n                    GL.TexParameter(target, TextureParameterName.TextureCompareMode, (int)TextureCompareMode.None);\n                    GL.CheckGLError();\n                    break;\n                default:\n                    throw new InvalidOperationException(\"Invalid filter mode!\");\n            }\n#endif\n\n            // TextureMaxLevel\n            if (cgraphicsContext.Capabilities.SupportsTextureMaxLevel)\n            {\n                int textureMaxLevel = 1000;\n                if (this.MaxMipLevel > 0)\n                    textureMaxLevel = this.MaxMipLevel;\n                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMaxLevel, textureMaxLevel);\n                GL.CheckGLError();\n            }\n        }\n\n        private int ToGLTextureAddressMode(TextureAddressMode textureAddressMode)\n        {\n            switch (textureAddressMode)\n            {\n                case TextureAddressMode.Clamp:\n                    return (int)TextureWrapMode.ClampToEdge;\n                case TextureAddressMode.Wrap:\n                    return (int)TextureWrapMode.Repeat;\n                case TextureAddressMode.Mirror:\n                    return (int)TextureWrapMode.MirroredRepeat;\n\n#if !GLES\n                case TextureAddressMode.Border:\n                    return (int)TextureWrapMode.ClampToBorder;\n#endif\n\n                default:\n                    throw new ArgumentException(\"No support for \" + textureAddressMode);\n            }\n        }\n \n\n        protected override void PlatformGraphicsContextLost()\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Vertices/ConcreteDynamicIndexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteDynamicIndexBuffer : ConcreteIndexBuffer, IDynamicIndexBufferStrategy\n    {\n        private bool _isContentLost;\n\n        internal ConcreteDynamicIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic:true)\n        {\n            PlatformConstructDynamicIndexBuffer(contextStrategy);\n        }\n        \n        private void PlatformConstructDynamicIndexBuffer(GraphicsContextStrategy contextStrategy)\n        {\n            base.PlatformConstructIndexBuffer(contextStrategy);\n        }\n\n\n        #region IDynamicIndexBufferStrategy\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n        #endregion IDynamicIndexBufferStrategy\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Vertices/ConcreteDynamicVertexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteDynamicVertexBuffer : ConcreteVertexBuffer, IDynamicVertexBufferStrategy\n    {\n        private bool _isContentLost;\n\n        internal ConcreteDynamicVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic:true)\n        {\n            PlatformConstructDynamicVertexBuffer(contextStrategy);\n        }\n\n        private void PlatformConstructDynamicVertexBuffer(GraphicsContextStrategy contextStrategy)\n        {\n            base.PlatformConstructVertexBuffer(contextStrategy);\n        }\n\n\n        #region IDynamicVertexBufferStrategy\n        public bool IsContentLost\n        {\n            get { return _isContentLost; }\n        }\n        #endregion IDynamicVertexBufferStrategy\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Vertices/ConcreteIndexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class ConcreteIndexBufferGL : IndexBufferStrategy\n    {\n        private readonly BufferUsageHint _usageHint;\n        private readonly DrawElementsType _drawElementsType;\n        private int _ibo;\n\n\n        internal DrawElementsType DrawElementsType { get { return _drawElementsType; } }\n        internal int GLIndexBuffer { get { return _ibo; } }\n\n        internal ConcreteIndexBufferGL(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n            Debug.Assert(isDynamic == true);\n            _usageHint = BufferUsageHint.DynamicDraw;\n\n            switch (indexElementSize)\n            {\n                case IndexElementSize.SixteenBits:   this._drawElementsType = DrawElementsType.UnsignedShort; break;\n                case IndexElementSize.ThirtyTwoBits: this._drawElementsType = DrawElementsType.UnsignedInt; break;\n                default: throw new InvalidOperationException();\n            }\n        }\n\n        internal ConcreteIndexBufferGL(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n            _usageHint = BufferUsageHint.StaticDraw;\n\n            switch (indexElementSize)\n            {\n                case IndexElementSize.SixteenBits: this._drawElementsType = DrawElementsType.UnsignedShort; break;\n                case IndexElementSize.ThirtyTwoBits: this._drawElementsType = DrawElementsType.UnsignedInt; break;\n                default: throw new InvalidOperationException();\n            }\n\n            PlatformConstructIndexBuffer(contextStrategy);\n        }\n\n        internal void PlatformConstructIndexBuffer(GraphicsContextStrategy contextStrategy)\n        {\n            bool isSharedContext = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(_ibo == 0);\n\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                int sizeInBytes = this.IndexCount * base.ElementSizeInBytes;\n\n                _ibo = GL.GenBuffer();\n                GL.CheckGLError();\n                GL.BindBuffer(BufferTarget.ElementArrayBuffer, _ibo);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    contextStrategy._indexBufferDirty = true;\n\n                GL.BufferData(BufferTarget.ElementArrayBuffer,\n                              (IntPtr)sizeInBytes, IntPtr.Zero, _usageHint);\n                GL.CheckGLError();\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public unsafe override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(GLIndexBuffer != 0);\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                int elementSizeInByte = sizeof(T);\n                int sizeInBytes = elementSizeInByte * elementCount;\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInByte;\n\n                    int bufferSize = IndexCount * base.ElementSizeInBytes;\n\n                    GL.BindBuffer(BufferTarget.ElementArrayBuffer, GLIndexBuffer);\n                    GL.CheckGLError();\n                    if (isSharedContext)\n                        ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true;\n\n                    if (options == SetDataOptions.Discard)\n                    {\n                        // By assigning NULL data to the buffer this gives a hint\n                        // to the device to discard the previous content.\n                        GL.BufferData(\n                            BufferTarget.ElementArrayBuffer,\n                            (IntPtr)bufferSize,\n                            IntPtr.Zero,\n                            _usageHint);\n                        GL.CheckGLError();\n                    }\n\n                    GL.BufferSubData(BufferTarget.ElementArrayBuffer, (IntPtr)offsetInBytes, (IntPtr)sizeInBytes, dataPtr);\n                    GL.CheckGLError();\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            _ibo = 0;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (_ibo != 0)\n            {\n                if (GraphicsDevice != null && !GraphicsDevice.IsDisposed)\n                {\n                    _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindDisposeContext();\n                    try\n                    {\n                        var GL = _contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                        GL.DeleteBuffer(_ibo);\n                        GL.CheckGLError();\n                        _ibo = 0;\n                    }\n                    finally\n                    {\n                        _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindDisposeContext();\n                    }\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Vertices/ConcreteVertexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class ConcreteVertexBufferGL : VertexBufferStrategy\n    {\n        private readonly BufferUsageHint _usageHint;\n        //private uint _vao;\n        private int _vbo;\n\n        internal int GLVertexBuffer { get { return _vbo; } }\n\n        internal ConcreteVertexBufferGL(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n            Debug.Assert(isDynamic == true);\n            _usageHint = BufferUsageHint.DynamicDraw;\n        }\n\n        internal ConcreteVertexBufferGL(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n            _usageHint = BufferUsageHint.StaticDraw;\n\n            PlatformConstructVertexBuffer(contextStrategy);\n        }\n\n        internal void PlatformConstructVertexBuffer(GraphicsContextStrategy contextStrategy)\n        {\n            bool isSharedContext = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(_vbo == 0);\n\n                var GL = contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                //this._vao = GLExt.Oes.GenVertexArray();\n                //GLExt.Oes.BindVertexArray(this._vao);\n                this._vbo = GL.GenBuffer();\n                GL.CheckGLError();\n                GL.BindBuffer(BufferTarget.ArrayBuffer, this._vbo);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    contextStrategy._vertexBuffersDirty = true;\n\n                GL.BufferData(BufferTarget.ArrayBuffer,\n                              new IntPtr(this.VertexDeclaration.VertexStride * this.VertexCount), IntPtr.Zero,\n                             _usageHint);\n                GL.CheckGLError();\n            }\n            finally\n            {\n                contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        public unsafe override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(GLVertexBuffer != 0);\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                GL.BindBuffer(BufferTarget.ArrayBuffer, GLVertexBuffer);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n\n                if (options == SetDataOptions.Discard)\n                {\n                    // By assigning NULL data to the buffer this gives a hint\n                    // to the device to discard the previous content.\n                    GL.BufferData(\n                        BufferTarget.ArrayBuffer,\n                        (IntPtr)bufferSize,\n                        IntPtr.Zero,\n                        _usageHint);\n                    GL.CheckGLError();\n                }\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                    if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0)\n                    {\n                        // there are no gaps so we can copy in one go\n                        GL.BufferSubData(BufferTarget.ArrayBuffer, \n                            (IntPtr)offsetInBytes,\n                            (IntPtr)(elementSizeInBytes * elementCount),\n                            dataPtr);\n                        GL.CheckGLError();\n                    }\n                    else\n                    {\n                        // else we must copy each element separately\n                        for (int i = 0; i < elementCount; i++)\n                        {\n                            GL.BufferSubData(BufferTarget.ArrayBuffer,\n                                (IntPtr)offsetInBytes + i*vertexStride,\n                                (IntPtr)elementSizeInBytes,\n                                dataPtr + i*elementSizeInBytes);\n                            GL.CheckGLError();\n                        }\n                    }\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            _vbo = 0;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (_vbo != 0)\n            {\n                if (GraphicsDevice != null && !GraphicsDevice.IsDisposed)\n                {\n                    _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().BindDisposeContext();\n                    try\n                    {\n                        var GL = _contextStrategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                        GL.DeleteBuffer(_vbo);\n                        GL.CheckGLError();\n                        _vbo = 0;\n                    }\n                    finally\n                    {\n                        _contextStrategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindDisposeContext();\n                    }\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL/Vertices/VertexDeclarationAttributeInfo.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    // Holds information for caching\n    internal class BufferBindingInfo\n    {\n        private WeakReference _vertexBufferStrategyRef = new WeakReference(null);\n\n        public VertexDeclarationAttributeInfo AttributeInfo;\n\n        public VertexBuffer VertexBuffer\n        {\n            get { return (VertexBuffer)_vertexBufferStrategyRef.Target; }\n            set { _vertexBufferStrategyRef.Target = value; }\n        }\n        public IntPtr VertexOffset;\n        public int InstanceFrequency;\n\n\n        public BufferBindingInfo(VertexDeclarationAttributeInfo attributeInfo, VertexBuffer vertexBuffer, IntPtr vertexOffset, int instanceFrequency)\n        {\n            AttributeInfo = attributeInfo;\n\n            VertexBuffer = vertexBuffer;\n            VertexOffset = vertexOffset;\n            InstanceFrequency = instanceFrequency;\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{VertexBuffer: {0}, VertexOffset: {1}, InstanceFrequency: {2}}}\",\n                VertexBuffer, VertexOffset, InstanceFrequency);\n        }\n    }\n\n    internal class RenderTargetBindingArrayComparer : IEqualityComparer<RenderTargetBinding[]>\n    {\n        public bool Equals(RenderTargetBinding[] first, RenderTargetBinding[] second)\n        {\n            if (object.ReferenceEquals(first, second))\n                return true;\n\n            if (first == null || second == null)\n                return false;\n\n            if (first.Length != second.Length)\n                return false;\n\n            for (int i = 0; i < first.Length; i++)\n            {\n                if ((first[i].RenderTarget != second[i].RenderTarget) || (first[i].ArraySlice != second[i].ArraySlice))\n                {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        public int GetHashCode(RenderTargetBinding[] array)\n        {\n            if (array != null)\n            {\n                unchecked\n                {\n                    int hash = 17;\n                    foreach (RenderTargetBinding item in array)\n                    {\n                        if (item.RenderTarget != null)\n                            hash = hash * 23 + item.RenderTarget.GetHashCode();\n                        hash = hash * 23 + item.ArraySlice.GetHashCode();\n                    }\n                    return hash;\n                }\n            }\n            return 0;\n        }\n    }\n\n    /// <summary>\n    /// Vertex attribute information for a particular shader/vertex declaration combination.\n    /// </summary>\n    internal class VertexDeclarationAttributeInfo\n    {\n        internal bool[] EnabledAttributes;\n        internal List<VertexDeclarationAttributeInfoElement> Elements;\n\n        internal VertexDeclarationAttributeInfo(int maxVertexAttributes)\n        {\n            EnabledAttributes = new bool[maxVertexAttributes];\n            Elements = new List<VertexDeclarationAttributeInfoElement>();\n        }\n    }\n\n    internal class VertexDeclarationAttributeInfoElement\n    {\n        public int AttributeLocation;\n        public int NumberOfElements;\n        public VertexAttribPointerType VertexAttribPointerType;\n        public bool Normalized;\n        public int Offset;\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.Android/ConcreteGraphicsAdapter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing GetParamName = Microsoft.Xna.Platform.Graphics.OpenGL.GetPName;\nusing Android.Views;\nusing Android.Runtime;\nusing Android.Util;\nusing Javax.Microedition.Khronos.Egl;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy\n    {\n        private DisplayModeCollection _supportedDisplayModes;\n        private DisplayMode _currentDisplayMode;\n        private string _description = string.Empty;\n\n\n\n        public override string Platform_DeviceName\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override string Platform_Description\n        {\n            get { return _description; }\n            set { _description = value; }\n       }\n\n        public override int Platform_DeviceId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_Revision\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_VendorId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_SubSystemId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override IntPtr Platform_MonitorHandle\n        {\n            get { return _eglDisplay.Handle; }\n        }\n\n        public override bool Platform_IsDefaultAdapter\n        {\n            get { return base.Platform_IsDefaultAdapter; }\n            set { base.Platform_IsDefaultAdapter = value; }\n        }\n\n        public override DisplayModeCollection Platform_SupportedDisplayModes\n        {\n            get\n            {\n                bool displayChanged = false;\n                if (_supportedDisplayModes == null || displayChanged)\n                {\n                    var modes = new List<DisplayMode>(new[] { Platform_CurrentDisplayMode, });\n\n                    modes.Sort(delegate (DisplayMode a, DisplayMode b)\n                    {\n                        if (a == b) return 0;\n                        if (a.Format <= b.Format && a.Width <= b.Width && a.Height <= b.Height) return -1;\n                        else return 1;\n                    });\n                    _supportedDisplayModes = base.CreateDisplayModeCollection(modes);\n                }\n\n                return _supportedDisplayModes;\n            }\n        }\n\n        public override DisplayMode Platform_CurrentDisplayMode\n        {\n            get\n            {\n                View view = ((AndroidGameWindow)ConcreteGame.GameConcreteInstance.Window).GameView;\n                _currentDisplayMode = base.CreateDisplayMode(view.Width, view.Height, SurfaceFormat.Color);\n\n                return _currentDisplayMode;\n            }\n        }\n\n        public override bool Platform_IsWideScreen\n        {\n            // Common non-widescreen modes: 4:3, 5:4, 1:1\n            // Common widescreen modes: 16:9, 16:10, 2:1\n            // XNA does not appear to account for rotated displays on the desktop\n            get { return Platform_CurrentDisplayMode.AspectRatio > (4.0f / 3.0f); }\n        }\n\n        public override GraphicsBackend Backend\n        {\n            get { return GraphicsBackend.GLES; }\n        }\n\n        public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend)\n        {\n            switch (shaderBackend)\n            {\n                case GraphicsBackend.GLES:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile)\n        {\n            switch (shaderProfile)\n            {\n                case ShaderProfileType.OpenGL_Mojo:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        OGL_DROID _ogl;\n        EGLDisplay _eglDisplay;\n        EGLConfig[] _eglConfigs;\n\n        GLVersion _eglVersion;\n        int _maxTextureSize;\n        int _maxVertexBufferSlots;\n        int _maxMultiSampleCount;\n\n        internal OGL_DROID Ogl { get { return _ogl; } }\n        internal EGLDisplay EglDisplay { get { return _eglDisplay; } }\n        internal EGLConfig[] EglConfig { get { return _eglConfigs; } }\n\n\n        internal ConcreteGraphicsAdapter()\n        {\n            if (OGL_DROID.Current == null)\n                OGL_DROID.Initialize();\n\n            _ogl = (OGL_DROID)OGL.Current;\n\n#if CARDBOARD\n            _eglDisplay = _ogl.Egl.EglGetCurrentDisplay();\n\n            _ogl.GetInteger(GetParamName.MajorVersion, out int eglMajorVersion);\n            _ogl.CheckGLError();\n            _ogl.GetInteger(GetParamName.MinorVersion, out int eglMinorVersion);\n            _ogl.CheckGLError();\n            _eglVersion = new GLVersion(eglMajorVersion, eglMinorVersion);\n\n            _ogl.GetInteger(GetParamName.MaxTextureSize, out _maxTextureSize);\n            _ogl.CheckGLError();\n            _ogl.GetInteger(GetParamName.MaxVertexAttribs, out _maxVertexBufferSlots);\n            _ogl.CheckGLError();\n            _ogl.GetInteger(GetParamName.MaxSamples, out _maxMultiSampleCount);\n#else\n            _eglDisplay = _ogl.Egl.EglGetDisplay(EGL10.EglDefaultDisplay);\n            if (_eglDisplay == EGL10.EglNoDisplay)\n                throw new Exception(\"Could not get EGL display\" + _ogl.GetEglErrorAsString());\n\n            int[] version = new int[2];\n            if (!_ogl.Egl.EglInitialize(_eglDisplay, version))\n                throw new Exception(\"Could not initialize EGL display\" + _ogl.GetEglErrorAsString());\n\n            InitConfigs();\n\n            // create a temporary context to query GLES version\n            EGLContext eglContext = null;\n            try\n            {\n                int[] configAttribs = new int[]\n                {\n                    EGL11.EglRenderableType, SurfaceConfig.EGL_OPENGL_ES2_BIT,\n                    EGL11.EglNone\n                };\n                EGLConfig config;\n                int[] numConfigs = new int[] { 0 };\n                EGLConfig[] results = new EGLConfig[1];\n                _ogl.Egl.EglChooseConfig(EglDisplay, configAttribs, results, 1, numConfigs);\n                config = results[0];\n\n                int[] contextAttribs = new int[]\n                {\n                    GLESVersion.EglContextClientVersion, 2,\n                    EGL10.EglNone\n                };\n                eglContext = _ogl.Egl.EglCreateContext(EglDisplay, config, EGL10.EglNoContext, contextAttribs);\n                _ogl.CheckGLError();\n\n                _ogl.Egl.EglMakeCurrent(EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, eglContext);\n                _ogl.CheckGLError();\n\n                _ogl.GetInteger(GetParamName.MajorVersion, out int eglMajorVersion);\n                _ogl.CheckGLError();\n                _ogl.GetInteger(GetParamName.MinorVersion, out int eglMinorVersion);\n                _ogl.CheckGLError();\n                _eglVersion = new GLVersion(eglMajorVersion, eglMinorVersion);\n\n                _ogl.GetInteger(GetParamName.MaxTextureSize, out _maxTextureSize);\n                _ogl.CheckGLError();\n                _ogl.GetInteger(GetParamName.MaxVertexAttribs, out _maxVertexBufferSlots);\n                _ogl.CheckGLError();\n                _ogl.GetInteger(GetParamName.MaxSamples, out _maxMultiSampleCount);\n\n                _ogl.Egl.EglMakeCurrent(EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext);\n                _ogl.CheckGLError();\n            }\n            finally\n            {\n                if (eglContext != null)\n                    _ogl.Egl.EglDestroyContext(this.EglDisplay, eglContext);\n            }\n#endif\n        }\n\n\n\n        ~ConcreteGraphicsAdapter()\n        {\n#if CARDBOARD\n#else\n            if (_eglDisplay != null)\n            {\n                if (!_ogl.Egl.EglTerminate(_eglDisplay))\n                    throw new Exception(\"Could not terminate EGL connection\" + _ogl.GetEglErrorAsString());\n            }\n            _eglDisplay = null;\n#endif\n        }\n\n        private void InitConfigs()\n        {\n            int[] numConfigs = new int[1];\n            if (!_ogl.Egl.EglGetConfigs(_eglDisplay, null, 0, numConfigs))\n                throw new Exception(\"Could not get config count. \" + _ogl.GetEglErrorAsString());\n\n            _eglConfigs = new EGLConfig[numConfigs[0]];\n            _ogl.Egl.EglGetConfigs(_eglDisplay, _eglConfigs, numConfigs[0], numConfigs);\n\n            Log.Verbose(\"AndroidGameView\", \"Device Supports\");\n            foreach (EGLConfig eglConfig in _eglConfigs)\n            {\n                Log.Verbose(\"AndroidGameView\", string.Format(\" {0}\", SurfaceConfig.FromEGLConfig(eglConfig, _ogl.Egl, _eglDisplay)));\n            }\n\n        }\n\n        public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile)\n        {\n            if (GraphicsAdapter.UseReferenceDevice)\n                return true;\n\n            switch (graphicsProfile)\n            {\n                case GraphicsProfile.Reach:\n                    return true;\n                case GraphicsProfile.HiDef:                   \n                    if (_maxTextureSize >= 4096) return true;\n                    return false;\n                case GraphicsProfile.FL10_0:                  \n                    if (_maxTextureSize >= 8192) return true;\n                    return false;\n                case GraphicsProfile.FL10_1:\n                    if (_maxVertexBufferSlots >= 32) return true;\n                    return false;\n                case GraphicsProfile.FL11_0:                  \n                    if (_maxTextureSize >= 16384) return true;\n                    return false;\n                case GraphicsProfile.FL11_1:\n                    return false;\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        public override bool Platform_QueryBackBufferFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n        \n        public override bool Platform_QueryRenderTargetFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            selectedFormat = format;\n            selectedDepthFormat = depthFormat;\n            selectedMultiSampleCount = multiSampleCount;\n\n            // fallback for unsupported renderTarget surface formats.\n            if (selectedFormat == SurfaceFormat.Alpha8 ||\n                selectedFormat == SurfaceFormat.NormalizedByte2 ||\n                selectedFormat == SurfaceFormat.NormalizedByte4 ||\n                selectedFormat == SurfaceFormat.Dxt1 ||\n                selectedFormat == SurfaceFormat.Dxt3 ||\n                selectedFormat == SurfaceFormat.Dxt5 ||\n                selectedFormat == SurfaceFormat.Dxt1a ||\n                selectedFormat == SurfaceFormat.Dxt1SRgb ||\n                selectedFormat == SurfaceFormat.Dxt3SRgb ||\n                selectedFormat == SurfaceFormat.Dxt5SRgb)\n                selectedFormat = SurfaceFormat.Color;\n\n            // fallback for unsupported renderTarget surface formats on Reach profile.\n            if (graphicsProfile == GraphicsProfile.Reach)\n            {\n                if (selectedFormat == SurfaceFormat.HalfSingle ||\n                    selectedFormat == SurfaceFormat.HalfVector2 ||\n                    selectedFormat == SurfaceFormat.HalfVector4 ||\n                    selectedFormat == SurfaceFormat.HdrBlendable ||\n                    selectedFormat == SurfaceFormat.Rg32 ||\n                    selectedFormat == SurfaceFormat.Rgba1010102 ||\n                    selectedFormat == SurfaceFormat.Rgba64 ||\n                    selectedFormat == SurfaceFormat.Single ||\n                    selectedFormat == SurfaceFormat.Vector2 ||\n                    selectedFormat == SurfaceFormat.Vector4)\n                    selectedFormat = SurfaceFormat.Color;\n            }\n\n            return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.Android/ConcreteGraphicsAdaptersProvider.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Android.Views;\nusing Android.Runtime;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy\n    {\n        private ReadOnlyCollection<GraphicsAdapter> _adapters;\n\n        public ConcreteGraphicsAdaptersProvider()\n        {\n            List<GraphicsAdapter> adapterList = CreateAdapterList();\n            _adapters = new ReadOnlyCollection<GraphicsAdapter>(adapterList);\n        }\n\n        private List<GraphicsAdapter> CreateAdapterList()\n        {\n            List<GraphicsAdapter> adapterList = new List<GraphicsAdapter>(1);\n\n            ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter();\n            GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy);\n\n            adapterList.Add(adapter);\n\n            // The first adapter is considered the default.\n            ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true;\n\n            return adapterList;\n        }\n\n        public override ReadOnlyCollection<GraphicsAdapter> Platform_Adapters\n        {\n            get { return _adapters; }\n        }\n\n        public override GraphicsAdapter Platform_DefaultAdapter\n        {\n            get { return _adapters[0]; }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.Android/ConcreteGraphicsContext.Android.cs",
    "content": "﻿// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Javax.Microedition.Khronos.Egl;\nusing Android.Runtime;\nusing Log = Android.Util.Log;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsContext : ConcreteGraphicsContextGL\n    {\n        private int _glContextCurrentThreadId = -1;\n\n        private GLESVersion _glesVersion;\n        private EGLContext _eglContext;\n        private EGLContext _glDisposeContext;\n        SemaphoreSlim _sharedContextLock = new SemaphoreSlim(1, 1);\n        private EGLContext _glSharedContext;\n\n        internal GLESVersion GLesVersion { get { return _glesVersion; } }\n        internal EGLContext EglContext { get { return _eglContext; } }\n\n        internal ConcreteGraphicsContext(GraphicsContext context)\n            : base(context)\n        {\n            var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy;\n            var cgd = gd.ToConcrete<ConcreteGraphicsDevice>();\n            var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n            AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(gd.PresentationParameters.DeviceWindowHandle);\n\n\n            // create context\n\n            ISurfaceView surfaceView = gameWindow.GameView;\n            surfaceView.SurfaceCreated += SurfaceView_SurfaceCreated;\n            surfaceView.SurfaceChanged += SurfaceView_SurfaceChanged;\n            surfaceView.SurfaceDestroyed += SurfaceView_SurfaceDestroyed;\n\n            cgd.GLChooseConfig();\n\n            this.GLCreateContext();\n\n            cgd.GLCreateSurface();\n\n            if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, cgd.EglSurface, cgd.EglSurface, this.EglContext))\n                throw new Exception(\"Could not make EGL current\" + GL.GetEglErrorAsString());\n            _glContextCurrentThreadId = base.ManagedThreadId();\n\n            // OGL.InitExtensions() must be called while we have a current gl context.\n            if (OGL_DROID.Current.Extensions == null)\n                OGL_DROID.Current.InitExtensions();\n\n\n            // create _glDisposeContext for Disposing GL objects from GC Finalizer thread.\n            int[] attribs = this.GLesVersion.GetAttributes();\n            _glDisposeContext = GL.Egl.EglCreateContext(EGL10.EglNoDisplay, cgd.EglConfig, this.EglContext, attribs);\n            if (_glDisposeContext != null && _glDisposeContext != EGL10.EglNoContext)\n                    throw new Exception(\"Could not create _glDisposeContext\" + GL.GetEglErrorAsString());\n\n            // create _glSharedContext for creating and setting data on buffers and textures from threads.\n            _glSharedContext = GL.Egl.EglCreateContext(EGL10.EglNoDisplay, cgd.EglConfig, this.EglContext, attribs);\n            if (_glSharedContext != null && _glSharedContext != EGL10.EglNoContext)\n                    throw new Exception(\"Could not create _glSharedContext\" + GL.GetEglErrorAsString());\n\n\n            // try getting the context version\n            // GL_MAJOR_VERSION and GL_MINOR_VERSION are GL 3.0+ only, so we need to rely on GL_VERSION string\n            try\n            {\n                string version = GL.GetString(StringName.Version);\n                if (string.IsNullOrEmpty(version))\n                    throw new NoSuitableGraphicsDeviceException(\"Unable to retrieve OpenGL version\");\n\n                // for GLES, the GL_VERSION string is formatted as:\n                //     OpenGL<space>ES<space><version number><space><vendor-specific information>\n                if (version.StartsWith(\"OpenGL ES \"))\n                    version = version.Split(' ')[2];\n                else // if it fails, we assume to be on a 1.1 context\n                    version = \"1.1\";\n\n                _glVersion.Major = Convert.ToInt16(version.Substring(0, 1));\n                _glVersion.Minor = Convert.ToInt16(version.Substring(2, 1));\n            }\n            catch (FormatException)\n            {\n                // if it fails, we assume to be on a 1.1 context\n                _glVersion = new GLVersion(1,1);\n            }\n\n            base._capabilities = new ConcreteGraphicsCapabilities();\n            ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize(\n                 this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy,\n                _glVersion);\n\n            base.Initialize(this.Capabilities);\n\n            this.PlatformSetup();\n        }\n\n\n        private void GLCreateContext()\n        {\n            var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy;\n            var cgd = gd.ToConcrete<ConcreteGraphicsDevice>();\n            var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n#if CARDBOARD\n            // Cardboard: EglSurface and EglContext was created by GLSurfaceView.\n            _eglContext = GL.Egl.EglGetCurrentContext();\n            if (this.EglContext == EGL10.EglNoContext)\n                _eglContext = null;\n#else\n            foreach (GLESVersion ver in ((OGL_DROID)OGL.Current).GetSupportedGLESVersions())\n            {\n                Log.Verbose(\"ConcreteGraphicsContext\", \"Creating GLES {0} Context\", ver);\n\n                _eglContext = GL.Egl.EglCreateContext(adapter.EglDisplay, cgd.EglConfig, EGL10.EglNoContext, ver.GetAttributes());\n\n                if (this.EglContext == null || this.EglContext == EGL10.EglNoContext)\n                {\n                    this._eglContext = null;\n                    Log.Verbose(\"ConcreteGraphicsContext\", string.Format(\"GLES {0} Not Supported. {1}\", ver, GL.GetEglErrorAsString()));\n                    continue;\n                }\n                _glesVersion = ver;\n                break;\n            }\n\n            if (this.EglContext == EGL10.EglNoContext) this._eglContext = null;\n            if (this.EglContext == null)\n                throw new Exception(\"Could not create EGL context\" + GL.GetEglErrorAsString());\n\n            Log.Verbose(\"ConcreteGraphicsContext\", \"Created GLES {0} Context\", this.GLesVersion);\n#endif\n        }\n\n        internal EGLSurface GLCreatePBufferSurface(EGLConfig config, int[] attribList)\n        {\n            var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy;\n            var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n            EGLSurface result = GL.Egl.EglCreatePbufferSurface(adapter.EglDisplay, config, attribList);\n\n            if (result == EGL10.EglNoSurface)\n                result = null;\n\n            if (result == null)\n                throw new Exception(\"EglCreatePBufferSurface\");\n\n            return result;\n        }\n\n\n        internal override void EnsureContextCurrentThread()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            throw new InvalidOperationException(\"Operation not called on main thread.\");\n        }\n\n        public override void BindDisposeContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy;\n            var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n            if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, _glDisposeContext))\n                throw new Exception(\"Could not Bind DisposeContext\" + GL.GetEglErrorAsString());\n        }\n\n        public override void UnbindDisposeContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy;\n            var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n            if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext))\n                throw new Exception(\"Could not Unbind DisposeContext\" + GL.GetEglErrorAsString());\n        }\n\n        public override bool BindSharedContext()\n        {\n#if !ENABLE_SHARED_GL_CONTEXT\n            EnsureContextCurrentThread();\n#endif\n\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return false;\n\n            var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy;\n            var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n            _sharedContextLock.Wait();\n            if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, _glSharedContext))\n                throw new Exception(\"Could not Bind SharedContext\" + GL.GetEglErrorAsString());\n\n            return true;\n        }\n\n        public override void UnbindSharedContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy;\n            var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n            if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext))\n                throw new Exception(\"Could not Unbind SharedContext\" + GL.GetEglErrorAsString());\n            _sharedContextLock.Release();\n        }\n\n\n        private void SurfaceView_SurfaceCreated(object sender, EventArgs e)\n        {\n            ISurfaceView surfaceView = (ISurfaceView)sender;\n\n        }\n\n        private void SurfaceView_SurfaceChanged(object sender, EventArgs e)\n        {\n            ISurfaceView surfaceView = (ISurfaceView)sender;\n\n            GraphicsDeviceStrategy gds = ((IPlatformGraphicsContext)Context).DeviceStrategy;\n            var cgd = gds.ToConcrete<ConcreteGraphicsDevice>();\n            AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(gds.PresentationParameters.DeviceWindowHandle);\n\n            if (cgd.EglSurface != null)\n            {\n                ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)gds.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n                var GL = adapter.Ogl;\n\n                // unbind Context and Surface\n                if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext))\n                    Log.Verbose(\"ConcreteGraphicsContext\", \"Could not unbind EGL surface\" + GL.GetEglErrorAsString());\n\n                // destroy the old _eglSurface\n                cgd.GlDestroySurface();\n            }\n\n            // recreate EglSurface and bind the context to the thread\n            {\n                ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)gds.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n                var GL = adapter.Ogl;\n\n#if CARDBOARD\n                // Cardboard: EglSurface and EglContext was created by GLSurfaceView.\n                _glContextCurrentThreadId = base.ManagedThreadId();\n#else\n                cgd.GLCreateSurface();\n\n                if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, cgd.EglSurface, cgd.EglSurface, this.EglContext))\n                {\n                    throw new Exception(\"Could not make EGL current\" + GL.GetEglErrorAsString());\n                }\n                _glContextCurrentThreadId = base.ManagedThreadId();\n#endif\n\n                // Update BackBuffer bounds\n                int w = gameWindow.GameView.Width;\n                int h = gameWindow.GameView.Height;\n                gds.PresentationParameters.BackBufferWidth  = w;\n                gds.PresentationParameters.BackBufferHeight = h;\n\n                if (!((IPlatformGraphicsContext)gds.MainContext).Strategy.IsRenderTargetBound)\n                {\n                    gds.MainContext.Viewport = new Viewport(0, 0, w, h);\n                    gds.MainContext.ScissorRectangle = new Rectangle(0, 0, w, h);\n                }\n            }\n        }\n\n        private void SurfaceView_SurfaceDestroyed(object sender, EventArgs e)\n        {\n            GraphicsDeviceStrategy gds = ((IPlatformGraphicsContext)Context).DeviceStrategy;\n            var cgd = gds.ToConcrete<ConcreteGraphicsDevice>();\n\n            if (cgd.EglSurface != null)\n            {\n                var adapter = ((IPlatformGraphicsAdapter)gds.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n                var GL = adapter.Ogl;\n\n                // unbind Context and Surface\n                if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext))\n                    Log.Verbose(\"ConcreteGraphicsContext\", \"Could not unbind EGL surface\" + GL.GetEglErrorAsString());\n\n                // destroy the old _eglSurface\n                cgd.GlDestroySurface();\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                ThrowIfDisposed();\n\n            }\n\n            if (_glDisposeContext != null)\n            {\n                //_egl.EglDestroyContext(_eglDisplay, _glDisposeContext);\n            }\n            _glDisposeContext = null;\n\n            if (_glSharedContext != null)\n            {\n                //_egl.EglDestroyContext(_eglDisplay, _glSharedContext);\n            }\n            _glSharedContext = null;\n\n\n            var gds = ((IPlatformGraphicsContext)this.Context).DeviceStrategy;\n            var cgd = gds.ToConcrete<ConcreteGraphicsDevice>();\n            var adapter = ((IPlatformGraphicsAdapter)gds.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n            AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(gds.PresentationParameters.DeviceWindowHandle);\n            ISurfaceView surfaceView = gameWindow.GameView;\n            surfaceView.SurfaceCreated -= SurfaceView_SurfaceCreated;\n            surfaceView.SurfaceChanged -= SurfaceView_SurfaceChanged;\n            surfaceView.SurfaceDestroyed -= SurfaceView_SurfaceDestroyed;\n\n            if (cgd.EglSurface != null)\n            {\n                if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext))\n                    Log.Verbose(\"ConcreteGraphicsContext\", \"Could not unbind EGL surface\" + GL.GetEglErrorAsString());\n\n                cgd.GlDestroySurface();\n            }\n\n            if (this.EglContext != null)\n            {\n                if (this.EglContext != null)\n                {\n                    if (!GL.Egl.EglDestroyContext(adapter.EglDisplay, this.EglContext))\n                        throw new Exception(\"Could not destroy EGL context\" + GL.GetEglErrorAsString());\n                }\n                this._eglContext = null;\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.Android/ConcreteGraphicsDevice.Android.cs",
    "content": "﻿// Copyright (C)2023-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Javax.Microedition.Khronos.Egl;\nusing Log = Android.Util.Log;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDevice : ConcreteGraphicsDeviceGL\n    {\n\n        private EGLConfig _eglConfig;\n        private EGLSurface _eglSurface;\n\n        internal EGLConfig EglConfig { get { return _eglConfig; } }\n        internal EGLSurface EglSurface { get { return _eglSurface; } }\n\n\n        internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n            : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters)\n        {\n        }\n\n\n        internal void GLChooseConfig()\n        {\n#if CARDBOARD\n            // Cardboard: EglConfig was created by GLSurfaceView.            \n            AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(this.PresentationParameters.DeviceWindowHandle);\n            _eglConfig = gameWindow.EglConfig;\n            return;\n#endif\n\n            var adapter = ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n            int depth = 0;\n            int stencil = 0;\n            int sampleBuffers = 0;\n            int samples = 0;\n            switch (this.PresentationParameters.DepthStencilFormat)\n            {\n                case DepthFormat.Depth16:\n                    depth = 16;\n                    break;\n                case DepthFormat.Depth24:\n                    depth = 24;\n                    break;\n                case DepthFormat.Depth24Stencil8:\n                    depth = 24;\n                    stencil = 8;\n                    break;\n                case DepthFormat.None:\n                    break;\n            }\n\n            if (this.PresentationParameters.MultiSampleCount > 1)\n            {\n                sampleBuffers = 1;\n                samples = 4;\n            }\n\n            List<SurfaceConfig> surfaceConfigs = new List<SurfaceConfig>();\n            if (depth > 0)\n            {\n                surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8, Depth = depth, Stencil = stencil, SampleBuffers = sampleBuffers, Samples = samples });\n                surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8, Depth = depth, Stencil = stencil });\n                surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5, Depth = depth, Stencil = stencil });\n                surfaceConfigs.Add(new SurfaceConfig() { Depth = depth, Stencil = stencil });\n                if (depth > 16)\n                {\n                    surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8, Depth = 16 });\n                    surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5, Depth = 16 });\n                    surfaceConfigs.Add(new SurfaceConfig() { Depth = 16 });\n                }\n                surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8 });\n                surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5 });\n            }\n            else\n            {\n                surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8, SampleBuffers = sampleBuffers, Samples = samples });\n                surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8 });\n                surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5 });\n            }\n            surfaceConfigs.Add(new SurfaceConfig() { Red = 4, Green = 4, Blue = 4 });\n            EGLConfig[] results = new EGLConfig[1];\n\n            bool found = false;\n            int[] numConfigs = new int[] { 0 };\n            foreach (SurfaceConfig surfaceConfig in surfaceConfigs)\n            {\n                Log.Verbose(\"AndroidGameView\", string.Format(\"Checking Config : {0}\", surfaceConfig));\n                found = GL.Egl.EglChooseConfig(adapter.EglDisplay, surfaceConfig.ToConfigAttribs(), results, 1, numConfigs);\n                Log.Verbose(\"AndroidGameView\", \"EglChooseConfig returned {0} and {1}\", found, numConfigs[0]);\n                if (!found || numConfigs[0] <= 0)\n                {\n                    Log.Verbose(\"AndroidGameView\", \"Config not supported\");\n                    continue;\n                }\n                Log.Verbose(\"AndroidGameView\", string.Format(\"Selected Config : {0}\", surfaceConfig));\n                break;\n            }\n\n            if (!found || numConfigs[0] <= 0)\n                throw new Exception(\"No valid EGL configs found\" + GL.GetEglErrorAsString());\n            _eglConfig = results[0];\n        }\n\n        internal void GLCreateSurface()\n        {\n            ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            IntPtr windowHandle = this.PresentationParameters.DeviceWindowHandle;\n            AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(windowHandle);\n\n            System.Diagnostics.Debug.Assert(this.EglSurface == null);\n\n            OGL_DROID GL = adapter.Ogl;\n\n#if CARDBOARD\n            // Cardboard: EglSurface and EglContext was created by GLSurfaceView.\n            _eglSurface = GL.Egl.EglGetCurrentSurface(EGL10.EglDraw);\n            if (this.EglSurface == EGL10.EglNoSurface)\n                _eglSurface = null;\n            return;\n#endif\n\n            _eglSurface = GL.Egl.EglCreateWindowSurface(adapter.EglDisplay, this.EglConfig, (Java.Lang.Object)gameWindow.GameView.Holder, null);\n            if (this.EglSurface == EGL10.EglNoSurface)\n                _eglSurface = null;\n\n            if (this.EglSurface == null)\n                throw new Exception(\"Could not create EGL window surface\" + GL.GetEglErrorAsString());\n        }\n\n        internal void GlDestroySurface()\n        {\n            ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n\n            System.Diagnostics.Debug.Assert(this.EglSurface != null);\n\n            OGL_DROID GL = adapter.Ogl;\n\n            if (!GL.Egl.EglDestroySurface(adapter.EglDisplay, this.EglSurface))\n                Log.Verbose(\"AndroidGameWindow\", \"Could not destroy EGL surface\" + GL.GetEglErrorAsString());\n            _eglSurface = null;\n        }\n\n        public override void Present()\n        {\n            base.Present();\n\n            var adapter = ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n            bool SwapBuffersResult = GL.Egl.EglSwapBuffers(adapter.EglDisplay, this.EglSurface);\n            if (!SwapBuffersResult)\n            {\n                int eglError = GL.Egl.EglGetError();\n                System.Diagnostics.Debug.WriteLine(\"SwapBuffers failed.\" + GL.GetEglErrorAsString());\n            }\n        }\n\n\n        public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context)\n        {\n            return new ConcreteGraphicsContext(context);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.Android/OpenGL.Android.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Utilities;\nusing Android.Opengl;\nusing Android.Runtime;\nusing Javax.Microedition.Khronos.Egl;\n\nnamespace Microsoft.Xna.Platform.Graphics.OpenGL\n{\n    internal sealed class OGL_DROID : OGL\n    {\n\t\t// internal for Android is not used on other platforms\n\t\t// it allows us to use either GLES or Full GL (if the GPU supports it)\n\t\tinternal delegate bool BindAPIDelegate(RenderApi api);\n\t\tinternal BindAPIDelegate BindAPI;\n\n        public IntPtr Library;\n        public IntPtr libES1 = FuncLoader.LoadLibrary(\"libGLESv1_CM.so\");\n        public IntPtr libES2 = FuncLoader.LoadLibrary(\"libGLESv2.so\");\n        public IntPtr libES3 = FuncLoader.LoadLibrary(\"libGLESv3.so\");\n        public IntPtr libGL = FuncLoader.LoadLibrary(\"libGL.so\");\n\n        private IEGL10 _egl;\n\n        public IEGL10 Egl { get { return _egl; } }\n\n        public static void Initialize()\n        {\n            System.Diagnostics.Debug.Assert(OGL._current == null);\n            OGL._current = new OGL_DROID();\n\n        }\n\n        private OGL_DROID() : base()\n        {\n            _egl = Javax.Microedition.Khronos.Egl.EGLContext.EGL.JavaCast<IEGL10>();\n        }\n\n\n        protected override IntPtr GetNativeLibrary()\n        {\n            Android.Util.Log.Verbose(\"GL\", \"Loading Entry Points\");\n\n            BindAPI = FuncLoader.LoadFunctionOrNull<BindAPIDelegate>(libGL, \"eglBindAPI\");\n\n            if (BindAPI != null)\n            {\n                if (BindAPI(RenderApi.GL))\n                    BoundApi = RenderApi.GL;\n                else if (BindAPI(RenderApi.ES))\n                    BoundApi = RenderApi.ES;\n                else\n                    BoundApi = RenderApi.ES;\n            }\n            else\n            {\n                BoundApi = RenderApi.ES;\n            }\n                \n            Android.Util.Log.Verbose(\"GL\", \"Bound {0}\", BoundApi);\n\n            if (BoundApi == RenderApi.ES)\n            {\n                if (libES3 != IntPtr.Zero)\n                    Library = libES3;\n                if (libES2 != IntPtr.Zero)\n                    Library = libES2;\n            }\n            else if (BoundApi == RenderApi.GL)\n            {\n                if (libGL != IntPtr.Zero)\n                    Library = libGL;\n            }\n\n            return Library;\n        }\n\n        protected override T LoadFunction<T>(string function)\n        {\n            return FuncLoader.LoadFunction<T>(Library, function);\n        }\n\n        protected override T LoadFunctionOrNull<T>(string function)\n        {\n            return FuncLoader.LoadFunctionOrNull<T>(Library, function);\n        }\n\n        internal IEnumerable<GLESVersion> GetSupportedGLESVersions()\n        {\n            if (this.libES3 != IntPtr.Zero)\n            {\n                yield return new GLESVersion { Major = 3, Minor = 2 };\n                yield return new GLESVersion { Major = 3, Minor = 1 };\n                yield return new GLESVersion { Major = 3, Minor = 0 };\n            }\n            if (this.libES2 != IntPtr.Zero)\n            {\n                // We pass -1 because when requesting a GLES 2.0 context we\n                // dont provide the Minor version.\n                yield return new GLESVersion { Major = 2, Minor = -1 };\n            }\n            yield return new GLESVersion();\n        }\n\n        internal string GetEglErrorAsString()\n        {\n            int err = _egl.EglGetError();\n            switch (err)\n            {\n                case EGL10.EglSuccess:\n                    return \"Success\";\n\n                case EGL10.EglNotInitialized:\n                    return \"Not Initialized\";\n\n                case EGL10.EglBadAccess:\n                    return \"Bad Access\";\n                case EGL10.EglBadAlloc:\n                    return \"Bad Allocation\";\n                case EGL10.EglBadAttribute:\n                    return \"Bad Attribute\";\n                case EGL10.EglBadConfig:\n                    return \"Bad Config\";\n                case EGL10.EglBadContext:\n                    return \"Bad Context\";\n                case EGL10.EglBadCurrentSurface:\n                    return \"Bad Current Surface\";\n                case EGL10.EglBadDisplay:\n                    return \"Bad Display\";\n                case EGL10.EglBadMatch:\n                    return \"Bad Match\";\n                case EGL10.EglBadNativePixmap:\n                    return \"Bad Native Pixmap\";\n                case EGL10.EglBadNativeWindow:\n                    return \"Bad Native Window\";\n                case EGL10.EglBadParameter:\n                    return \"Bad Parameter\";\n                case EGL10.EglBadSurface:\n                    return \"Bad Surface\";\n\n                default:\n                    return \"Unknown EGL Error \" + err;\n            }\n        }\n    }\n\n    struct GLESVersion\n    {\n        public const int EglContextClientVersion = 0x3098;\n        public const int EglContextMinorVersion  = 0x30FB;\n\n        public int Major;\n        public int Minor;\n\n        internal int[] GetAttributes()\n        {\n            int minor = Minor > -1 ? EglContextMinorVersion : EGL10.EglNone;\n            return new int[] { EglContextClientVersion, Major, minor, Minor, EGL10.EglNone };\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"{0}.{1}\", Major, Minor == -1 ? 0 : Minor);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.Android/SurfaceConfig.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Javax.Microedition.Khronos.Egl;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal struct SurfaceConfig\n    {\n        public const int EGL_OPENGL_ES2_BIT = 0x0004;\n\n        public int Red;\n        public int Green;\n        public int Blue;\n        public int Alpha;\n\n        public int Depth;\n        public int Stencil;\n\n        public int SampleBuffers;\n        public int Samples;\n\n        public int[] ToConfigAttribs()\n        {\n            List<int> attribs = new List<int>();\n            if (Red != 0)\n            {\n                attribs.Add(EGL11.EglRedSize);\n                attribs.Add(Red);\n            }\n            if (Green != 0)\n            {\n                attribs.Add(EGL11.EglGreenSize);\n                attribs.Add(Green);\n            }\n            if (Blue != 0)\n            {\n                attribs.Add(EGL11.EglBlueSize);\n                attribs.Add(Blue);\n            }\n            if (Alpha != 0)\n            {\n                attribs.Add(EGL11.EglAlphaSize);\n                attribs.Add(Alpha);\n            }\n            if (Depth != 0)\n            {\n                attribs.Add(EGL11.EglDepthSize);\n                attribs.Add(Depth);\n            }\n            if (Stencil != 0)\n            {\n                attribs.Add(EGL11.EglStencilSize);\n                attribs.Add(Stencil);\n            }\n            if (SampleBuffers != 0)\n            {\n                attribs.Add(EGL11.EglSampleBuffers);\n                attribs.Add(SampleBuffers);\n            }\n            if (Samples != 0)\n            {\n                attribs.Add(EGL11.EglSamples);\n                attribs.Add(Samples);\n            }\n            attribs.Add(EGL11.EglRenderableType);\n            attribs.Add(EGL_OPENGL_ES2_BIT);\n            attribs.Add(EGL11.EglNone);\n\n            return attribs.ToArray();\n        }\n\n        static int[] data = new int[1];\n\n        static int GetAttribute(EGLConfig config, IEGL10 egl, EGLDisplay eglDisplay,int attribute)\n        {\n            egl.EglGetConfigAttrib(eglDisplay, config, attribute, data);\n            return data[0];\n        }\n\n        public static SurfaceConfig FromEGLConfig(EGLConfig config, IEGL10 egl, EGLDisplay eglDisplay)\n        {\n            lock (data)\n            {\n                return new SurfaceConfig()\n                {\n                    Red = GetAttribute(config, egl, eglDisplay, EGL11.EglRedSize),\n                    Green = GetAttribute(config, egl, eglDisplay, EGL11.EglGreenSize),\n                    Blue = GetAttribute(config, egl, eglDisplay, EGL11.EglBlueSize),\n                    Alpha = GetAttribute(config, egl, eglDisplay, EGL11.EglAlphaSize),\n                    Depth = GetAttribute(config, egl, eglDisplay, EGL11.EglDepthSize),\n                    Stencil = GetAttribute(config, egl, eglDisplay, EGL11.EglStencilSize),\n                    SampleBuffers = GetAttribute(config, egl, eglDisplay, EGL11.EglSampleBuffers),\n                    Samples = GetAttribute(config, egl, eglDisplay, EGL11.EglSamples)\n                };\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Red:{0} Green:{1} Blue:{2} Alpha:{3} Depth:{4} Stencil:{5} SampleBuffers:{6} Samples:{7}\", Red, Green, Blue, Alpha, Depth, Stencil, SampleBuffers, Samples);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.Android/Vertices/ConcreteIndexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteIndexBuffer : ConcreteIndexBufferGL\n    {\n        public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic)\n        {\n        }\n\n        public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(GLIndexBuffer != 0);\n\n                // Buffers are write-only on OpenGL ES 1.1 and 2.0.  See the GL_OES_mapbuffer extension for more information.\n                // http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt\n                if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                    throw new NotSupportedException(\"Index buffers are write-only on OpenGL ES platforms\");\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                GL.BindBuffer(BufferTarget.ElementArrayBuffer, GLIndexBuffer);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n                \n                int elementSizeInBytes = sizeof(T);\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                    // there are no gaps so we can copy in one go\n                    IntPtr srcPtr = GL.MapBufferRange(\n                        BufferTarget.ElementArrayBuffer,\n                        (IntPtr)offsetInBytes,\n                        (IntPtr)(elementSizeInBytes * elementCount),\n                        BufferRangeAccess.Read);\n                    if (srcPtr == IntPtr.Zero)\n                        throw new InvalidOperationException(\"glMapBufferRange failed.\");\n\n                    MemCopyHelper.MemoryCopy(\n                        srcPtr,\n                        dataPtr,\n                        elementSizeInBytes * elementCount);\n\n                    GL.UnmapBuffer(BufferTarget.ElementArrayBuffer);\n                    GL.CheckGLError();\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.Android/Vertices/ConcreteVertexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteVertexBuffer : ConcreteVertexBufferGL\n    {\n        public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic)\n        {\n        }\n\n        public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(GLVertexBuffer != 0);\n\n                // Buffers are write-only on OpenGL ES 1.1 and 2.0.  See the GL_OES_mapbuffer extension for more information.\n                // http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt\n                if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                    throw new NotSupportedException(\"Vertex buffers are write-only on OpenGL ES platforms\");\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                GL.BindBuffer(BufferTarget.ArrayBuffer, GLVertexBuffer);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n                \n                int elementSizeInBytes = sizeof(T);\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                    IntPtr srcPtr = GL.MapBufferRange(\n                            BufferTarget.ArrayBuffer,\n                            (IntPtr)offsetInBytes,\n                            (IntPtr)(vertexStride * elementCount),\n                            BufferRangeAccess.Read);\n                    if (srcPtr == IntPtr.Zero)\n                        throw new InvalidOperationException(\"glMapBufferRange failed.\");\n\n                    if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0)\n                    {\n                        // there are no gaps so we can copy in one go\n                        MemCopyHelper.MemoryCopy(\n                            srcPtr,\n                            dataPtr,\n                            vertexStride * elementCount);\n                    }\n                    else\n                    {\n                        for (int i = 0; i < elementCount; i++)\n                        {\n                            MemCopyHelper.MemoryCopy(\n                               srcPtr + i * vertexStride,\n                               dataPtr + i * elementSizeInBytes,\n                               elementSizeInBytes);\n                        }\n                    }\n\n                    GL.UnmapBuffer(BufferTarget.ArrayBuffer);\n                    GL.CheckGLError();\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.SDL/ConcreteGraphicsAdapter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing GetParamName = Microsoft.Xna.Platform.Graphics.OpenGL.GetPName;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy\n    {\n        private Sdl SDL { get { return Sdl.Current; } }\n\n        private DisplayModeCollection _supportedDisplayModes;\n        private DisplayMode _currentDisplayMode;\n        private string _description = string.Empty;\n\n        int _displayIndex;\n\n\n        public override string Platform_DeviceName\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override string Platform_Description\n        {\n            get { return _description; }\n            set { }\n        }\n\n        public override int Platform_DeviceId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_Revision\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_VendorId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_SubSystemId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override IntPtr Platform_MonitorHandle\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool Platform_IsDefaultAdapter\n        {\n            get { return base.Platform_IsDefaultAdapter; }\n            set { base.Platform_IsDefaultAdapter = value; }\n        }\n\n        public override DisplayModeCollection Platform_SupportedDisplayModes\n        {\n            get\n            {\n                bool displayChanged = false;\n                var displayIndex = SDL.DISPLAY.GetWindowDisplayIndex(SdlGameWindow.Instance.Handle);\n                displayChanged = displayIndex != _displayIndex;\n\n                if (_supportedDisplayModes == null || displayChanged)\n                {\n                    var modes = new List<DisplayMode>(new[] { Platform_CurrentDisplayMode, });\n                    \n                    _displayIndex = displayIndex;\n                    modes.Clear();\n\n                    var modeCount = SDL.DISPLAY.GetNumDisplayModes(displayIndex);\n\n                    for (int i = 0; i < modeCount; i++)\n                    {\n                        Sdl.Display.Mode mode;\n                        SDL.DISPLAY.GetDisplayMode(displayIndex, i, out mode);\n\n                        // We are only using one format, Color\n                        // mode.Format gets the Color format from SDL\n                        var displayMode = base.CreateDisplayMode(mode.Width, mode.Height, SurfaceFormat.Color);\n                        if (!modes.Contains(displayMode))\n                            modes.Add(displayMode);\n                    }\n                    modes.Sort(delegate (DisplayMode a, DisplayMode b)\n                    {\n                        if (a == b) return 0;\n                        if (a.Format <= b.Format && a.Width <= b.Width && a.Height <= b.Height) return -1;\n                        else return 1;\n                    });\n                    _supportedDisplayModes = base.CreateDisplayModeCollection(modes);\n                }\n\n                return _supportedDisplayModes;\n            }\n        }\n\n        public override DisplayMode Platform_CurrentDisplayMode\n        {\n            get\n            {\n                int displayIndex = SDL.DISPLAY.GetWindowDisplayIndex(SdlGameWindow.Instance.Handle);\n\n                Sdl.Display.Mode mode;\n                SDL.DISPLAY.GetCurrentDisplayMode(displayIndex, out mode);\n\n                _currentDisplayMode = base.CreateDisplayMode(mode.Width, mode.Height, SurfaceFormat.Color);\n\n                return _currentDisplayMode;\n            }\n        }\n\n        public override bool Platform_IsWideScreen\n        {\n            // Common non-widescreen modes: 4:3, 5:4, 1:1\n            // Common widescreen modes: 16:9, 16:10, 2:1\n            // XNA does not appear to account for rotated displays on the desktop\n            get { return Platform_CurrentDisplayMode.AspectRatio > (4.0f / 3.0f); }\n        }\n\n        public override GraphicsBackend Backend\n        {\n            get { return GraphicsBackend.OpenGL; }\n        }\n\n        public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend)\n        {\n            switch (shaderBackend)\n            {\n                case GraphicsBackend.OpenGL:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile)\n        {\n            switch (shaderProfile)\n            {\n                case ShaderProfileType.OpenGL_Mojo:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        private OGL _gl;\n        private string _version;\n        private GLVersion _glVersion;\n\n        int _capMaxTextureSize;\n        int _capMaxMultiSampleCount;\n        int _capMaxTextureSlots;\n        int _capMaxVertexTextureSlots;\n        int _capMaxVertexAttribs;\n        int _capMaxDrawBuffers;\n\n        internal OGL GL { get { return _gl; } }\n        internal GLVersion glVersion { get { return _glVersion; } }\n\n\n        internal ConcreteGraphicsAdapter()\n        {\n            IntPtr glWindowHandle = IntPtr.Zero;\n            IntPtr glContext = IntPtr.Zero;\n            try\n            {\n                SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextMajorVersion, 2);\n                SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextMinorVersion, 0);\n\n                glWindowHandle = SDL.WINDOW.Create(\"KnisDefaultAdapterWindow\", 0, 0, 0, 0,\n                    Sdl.Window.State.Hidden | Sdl.Window.State.OpenGL);\n                glContext = SDL.OpenGL.CreateGLContext(glWindowHandle);\n\n                try\n                {\n                    // OGL.Initialize() must be called while we have a gl context,\n                    // because of OGL.LoadEntryPoints() & and OGL.InitExtensions().\n                    OGL_SDL.Initialize();\n                    OGL_SDL.Current.InitExtensions();\n                    _gl = OGL.Current;\n                }\n                catch (EntryPointNotFoundException epnfex)\n                {\n                    throw new PlatformNotSupportedException(\n                        epnfex.Message + \"\\n\" +\n                        \"KNI requires OpenGL 3.0 compatible drivers, or either ARB_framebuffer_object or EXT_framebuffer_object extensions.\");\n                }\n\n                // try getting the context version\n                // GL_MAJOR_VERSION and GL_MINOR_VERSION are GL 3.0+ only, so we need to rely on GL_VERSION string.\n                try\n                {\n                    _version = _gl.GetString(StringName.Version);\n                    if (string.IsNullOrEmpty(_version))\n                        throw new NoSuitableGraphicsDeviceException(\"Unable to retrieve OpenGL version\");\n\n                    // for OpenGL, the GL_VERSION string always starts with the version number in the \"major.minor\" format,\n                    // optionally followed by multiple vendor specific characters\n                    _glVersion.Major = Convert.ToInt16(_version.Substring(0, 1));\n                    _glVersion.Minor = Convert.ToInt16(_version.Substring(2, 1));\n                }\n                catch (FormatException)\n                {\n                    // if it fails, we assume to be on a 1.1 context\n                    _glVersion = new GLVersion(1, 1);\n                }\n\n                _description = _gl.GetString(StringName.Renderer);\n\n                // get adapter caps.\n                _gl.GetInteger(GetParamName.MaxTextureSize, out _capMaxTextureSize);\n                _gl.CheckGLError();\n                _gl.GetInteger(GetParamName.MaxSamples, out _capMaxMultiSampleCount);\n                _gl.CheckGLError();\n                _gl.GetInteger(GetParamName.MaxTextureImageUnits, out _capMaxTextureSlots);\n                _gl.CheckGLError();\n                _gl.GetInteger(GetParamName.MaxVertexTextureImageUnits, out _capMaxVertexTextureSlots);\n                _gl.CheckGLError();\n                _gl.GetInteger(GetParamName.MaxVertexAttribs, out _capMaxVertexAttribs);\n                _gl.CheckGLError();\n                _gl.GetInteger(GetParamName.MaxDrawBuffers, out _capMaxDrawBuffers);\n                _gl.CheckGLError();\n\n                int maxCombinedTextureImageUnits;\n                _gl.GetInteger(GetParamName.MaxCombinedTextureImageUnits, out maxCombinedTextureImageUnits);\n                _gl.CheckGLError();\n                _capMaxTextureSlots = Math.Min(_capMaxTextureSlots, maxCombinedTextureImageUnits);\n                _capMaxVertexTextureSlots = Math.Min(_capMaxVertexTextureSlots, maxCombinedTextureImageUnits);\n\n            }\n            finally\n            {\n                if (glContext != IntPtr.Zero)\n                    SDL.OpenGL.DeleteContext(glContext);\n                if (glWindowHandle != IntPtr.Zero)\n                    SDL.WINDOW.Destroy(glWindowHandle);\n            }\n        }\n\n        public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile)\n        {\n            if (GraphicsAdapter.UseReferenceDevice)\n                return true;\n\n            switch (graphicsProfile)\n            {\n                case GraphicsProfile.Reach:\n                    return true;\n                case GraphicsProfile.HiDef:\n                    if (_capMaxTextureSize >= 4096) return true;\n                    return false;\n                case GraphicsProfile.FL10_0:\n                    if (_capMaxTextureSize >= 8192) return true;\n                    return false;\n                case GraphicsProfile.FL10_1:\n                case GraphicsProfile.FL11_0:\n                    if (_capMaxTextureSize >= 16384) return true;\n                    return false;\n                case GraphicsProfile.FL11_1:\n                    return false;\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        public override bool Platform_QueryBackBufferFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n        \n        public override bool Platform_QueryRenderTargetFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            selectedFormat = format;\n            selectedDepthFormat = depthFormat;\n            selectedMultiSampleCount = multiSampleCount;\n\n            // fallback for unsupported renderTarget surface formats.\n            if (selectedFormat == SurfaceFormat.Alpha8 ||\n                selectedFormat == SurfaceFormat.NormalizedByte2 ||\n                selectedFormat == SurfaceFormat.NormalizedByte4 ||\n                selectedFormat == SurfaceFormat.Dxt1 ||\n                selectedFormat == SurfaceFormat.Dxt3 ||\n                selectedFormat == SurfaceFormat.Dxt5 ||\n                selectedFormat == SurfaceFormat.Dxt1a ||\n                selectedFormat == SurfaceFormat.Dxt1SRgb ||\n                selectedFormat == SurfaceFormat.Dxt3SRgb ||\n                selectedFormat == SurfaceFormat.Dxt5SRgb)\n                selectedFormat = SurfaceFormat.Color;\n\n            // fallback for unsupported renderTarget surface formats on Reach profile.\n            if (graphicsProfile == GraphicsProfile.Reach)\n            {\n                if (selectedFormat == SurfaceFormat.HalfSingle ||\n                    selectedFormat == SurfaceFormat.HalfVector2 ||\n                    selectedFormat == SurfaceFormat.HalfVector4 ||\n                    selectedFormat == SurfaceFormat.HdrBlendable ||\n                    selectedFormat == SurfaceFormat.Rg32 ||\n                    selectedFormat == SurfaceFormat.Rgba1010102 ||\n                    selectedFormat == SurfaceFormat.Rgba64 ||\n                    selectedFormat == SurfaceFormat.Single ||\n                    selectedFormat == SurfaceFormat.Vector2 ||\n                    selectedFormat == SurfaceFormat.Vector4)\n                    selectedFormat = SurfaceFormat.Color;\n            }\n\n            return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.SDL/ConcreteGraphicsAdaptersProvider.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy\n    {\n        private ReadOnlyCollection<GraphicsAdapter> _adapters;\n\n        public ConcreteGraphicsAdaptersProvider()\n        {\n            List<GraphicsAdapter> adapterList = CreateAdapterList();\n            _adapters = new ReadOnlyCollection<GraphicsAdapter>(adapterList);\n        }\n\n        private List<GraphicsAdapter> CreateAdapterList()\n        {\n            List<GraphicsAdapter> adapterList = new List<GraphicsAdapter>(1);\n\n            ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter();\n            GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy);\n\n            adapterList.Add(adapter);\n\n            // The first adapter is considered the default.\n            ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true;\n\n            return adapterList;\n        }\n\n        public override ReadOnlyCollection<GraphicsAdapter> Platform_Adapters\n        {\n            get { return _adapters; }\n        }\n\n        public override GraphicsAdapter Platform_DefaultAdapter\n        {\n            get { return _adapters[0]; }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.SDL/ConcreteGraphicsContext.SDL.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsContext : ConcreteGraphicsContextGL\n    {\n        private Sdl SDL { get { return Sdl.Current; } }\n\n        private IntPtr _glContext;\n\n        private int _glContextCurrentThreadId = -1;\n        private IntPtr _glDisposeContext;\n        private IntPtr _glDisposeContextWindowHandle;\n        SemaphoreSlim _sharedContextLock = new SemaphoreSlim(1, 1);\n        private IntPtr _glSharedContext;\n        private IntPtr _glSharedContextWindowHandle;\n\n\n        internal IntPtr GlContext { get { return _glContext; } }\n\n        internal ConcreteGraphicsContext(GraphicsContext context)\n            : base(context)\n        {\n            _glContext = SDL.OpenGL.CreateGLContext(((IPlatformGraphicsContext)context).DeviceStrategy.PresentationParameters.DeviceWindowHandle);\n\n            // create _glDisposeContext for Disposing GL objects from GC Finalizer thread.\n            Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextReleaseBehaviour, (int)Sdl.GL.ContextReleaseBehaviour.None);\n            Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ShareWithCurrentContext, 1);\n            _glDisposeContextWindowHandle = SDL.WINDOW.Create(\"\", 0, 0, 0, 0, Sdl.Window.State.Hidden | Sdl.Window.State.OpenGL);\n            _glDisposeContext = SDL.OpenGL.CreateGLContext(_glDisposeContextWindowHandle);\n\n           // create _glSharedContext for creating GL objects from working threads.\n            Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextReleaseBehaviour, (int)Sdl.GL.ContextReleaseBehaviour.None);\n            Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ShareWithCurrentContext, 1);\n            _glSharedContextWindowHandle = SDL.WINDOW.Create(\"\", 0, 0, 0, 0, Sdl.Window.State.Hidden | Sdl.Window.State.OpenGL);\n            _glSharedContext = SDL.OpenGL.CreateGLContext(_glSharedContextWindowHandle);\n\n            MakeCurrent(((IPlatformGraphicsContext)context).DeviceStrategy.PresentationParameters.DeviceWindowHandle);\n            int swapInterval = ConcreteGraphicsContext.ToGLSwapInterval(((IPlatformGraphicsContext)context).DeviceStrategy.PresentationParameters.PresentationInterval);\n            SDL.OpenGL.SetSwapInterval(swapInterval);\n\n\n            // get the GL version.\n            _glVersion = ((IPlatformGraphicsAdapter)GraphicsAdapter.DefaultAdapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>().glVersion;\n\n            base._capabilities = new ConcreteGraphicsCapabilities();\n            ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize(\n                this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy,\n                _glVersion);\n\n            base.Initialize(this.Capabilities);\n\n            this.PlatformSetup();\n        }\n\n        public void MakeCurrent(IntPtr winHandle)\n        {\n            SDL.OpenGL.MakeCurrent(winHandle, _glContext);\n            _glContextCurrentThreadId = base.ManagedThreadId();\n        }\n        \n        internal override void EnsureContextCurrentThread()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            throw new InvalidOperationException(\"Operation not called on main thread.\");\n\n        }\n\n        public override void BindDisposeContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            Sdl.Current.OpenGL.MakeCurrent(this._glDisposeContextWindowHandle, this._glDisposeContext);\n        }\n\n        public override void UnbindDisposeContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            Sdl.Current.OpenGL.MakeCurrent(IntPtr.Zero, IntPtr.Zero);\n        }\n\n        public override bool BindSharedContext()\n        {\n#if !ENABLE_SHARED_GL_CONTEXT\n            EnsureContextCurrentThread();\n#endif\n\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return false;\n\n            _sharedContextLock.Wait();\n            Sdl.Current.OpenGL.MakeCurrent(this._glSharedContextWindowHandle, this._glSharedContext);\n\n            return true;\n        }\n\n        public override void UnbindSharedContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            Sdl.Current.OpenGL.MakeCurrent(IntPtr.Zero, IntPtr.Zero);\n            _sharedContextLock.Release();\n        }\n\n        /// <summary>\n        /// Converts <see cref=\"PresentInterval\"/> to OpenGL swap interval.\n        /// </summary>\n        /// <returns>A value according to EXT_swap_control</returns>\n        /// <param name=\"interval\">The <see cref=\"PresentInterval\"/> to convert.</param>\n        internal static int ToGLSwapInterval(PresentInterval interval)\n        {\n            // See http://www.opengl.org/registry/specs/EXT/swap_control.txt\n            // and https://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt\n            // OpenTK checks for EXT_swap_control_tear:\n            // if supported, a swap interval of -1 enables adaptive vsync;\n            // otherwise -1 is converted to 1 (vsync enabled.)\n\n            switch (interval)\n            {\n                case PresentInterval.Immediate:\n                    return 0;\n                case PresentInterval.One:\n                    return 1;\n                case PresentInterval.Two:\n                    return 2;\n                case PresentInterval.Default:\n\n                default:\n                    return -1;\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                ThrowIfDisposed();\n\n            }\n\n            if (_glDisposeContext != IntPtr.Zero)\n                SDL.OpenGL.DeleteContext(_glDisposeContext);\n            _glDisposeContext = IntPtr.Zero;\n\n            if (_glDisposeContextWindowHandle != IntPtr.Zero)\n                SDL.WINDOW.Destroy(_glDisposeContextWindowHandle);\n            _glDisposeContextWindowHandle = IntPtr.Zero;\n\n            if (_glSharedContext != IntPtr.Zero)\n                SDL.OpenGL.DeleteContext(_glSharedContext);\n            _glSharedContext = IntPtr.Zero;\n\n            if (_glSharedContextWindowHandle != IntPtr.Zero)\n                SDL.WINDOW.Destroy(_glSharedContextWindowHandle);\n            _glSharedContextWindowHandle = IntPtr.Zero;\n\n            if (_glContext != IntPtr.Zero)\n                SDL.OpenGL.DeleteContext(_glContext);\n            _glContext = IntPtr.Zero;\n\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.SDL/ConcreteGraphicsDevice.SDL.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDevice : ConcreteGraphicsDeviceGL\n    {\n\n        internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n            : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters)\n        {\n        }\n\n\n        internal void GetModeSwitchedSize(out int width, out int height)\n        {\n            var mode = new Sdl.Display.Mode\n            {\n                Width = PresentationParameters.BackBufferWidth,\n                Height = PresentationParameters.BackBufferHeight,\n                Format = 0,\n                RefreshRate = 0,\n                DriverData = IntPtr.Zero\n            };\n            Sdl.Display.Mode closest;\n            Sdl.Current.DISPLAY.GetClosestDisplayMode(0, mode, out closest);\n            width = closest.Width;\n            height = closest.Height;\n        }\n\n        internal void GetDisplayResolution(out int width, out int height)\n        {\n            Sdl.Display.Mode mode;\n            Sdl.Current.DISPLAY.GetCurrentDisplayMode(0, out mode);\n            width = mode.Width;\n            height = mode.Height;\n        }\n\n\n        public override void Present()\n        {\n            base.Present();\n\n            var GL = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n            Sdl.Current.OpenGL.SwapWindow(this.PresentationParameters.DeviceWindowHandle);\n            GL.CheckGLError();\n        }\n\n\n        public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context)\n        {\n#if DEBUG\n            // create debug context, so we get better error messages (glDebugMessageCallback)\n            Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextFlags, (int)Sdl.GL.ContextFlag.Debug);\n#endif\n\n            return new ConcreteGraphicsContext(context);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.SDL/OpenGL.SDL.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace Microsoft.Xna.Platform.Graphics.OpenGL\n{\n    internal sealed class OGL_SDL : OGL\n    {\n        public static void Initialize()\n        {\n            System.Diagnostics.Debug.Assert(OGL._current == null);\n            OGL._current = new OGL_SDL();\n        }\n\n        private OGL_SDL() : base()\n        {\n        }\n\n\n        protected override IntPtr GetNativeLibrary()\n        {\n            BoundApi = RenderApi.GL;\n\n            return IntPtr.Zero;\n        }\n\n        protected override T LoadFunction<T>(string function)\n        {\n            IntPtr funcAddress = Sdl.Current.OpenGL.GetProcAddress(function);\n\n            if (funcAddress != IntPtr.Zero)\n                return InteropHelpers.GetDelegateForFunctionPointer<T>(funcAddress);\n\n            throw new EntryPointNotFoundException(\"Entry point not found for function '\" + function + \"'.\");\n        }\n\n        protected override T LoadFunctionOrNull<T>(string function)\n        {\n            IntPtr funcAddress = Sdl.Current.OpenGL.GetProcAddress(function);\n\n            if (funcAddress != IntPtr.Zero)\n                return InteropHelpers.GetDelegateForFunctionPointer<T>(funcAddress);\n\n            return default(T);\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Graphics/.GL.SDL/Vertices/ConcreteIndexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteIndexBuffer : ConcreteIndexBufferGL\n    {\n        public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic)\n        {\n        }\n\n\n        public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(GLIndexBuffer != 0);\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                int elementSizeInBytes = sizeof(T);\n                int sizeInBytes = elementCount * elementSizeInBytes;\n\n                GL.BindBuffer(BufferTarget.ElementArrayBuffer, GLIndexBuffer);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true;\n\n                IntPtr srcPtr = GL.MapBuffer(BufferTarget.ElementArrayBuffer, BufferAccess.ReadOnly);\n                GL.CheckGLError();\n                try\n                {\n                    srcPtr = srcPtr + offsetInBytes;\n\n                    fixed (T* pData = &data[0])\n                    {\n                        IntPtr dataPtr = (IntPtr)pData;\n                        dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                        MemCopyHelper.MemoryCopy(\n                            srcPtr,\n                            dataPtr,\n                            sizeInBytes);\n                    }\n                }\n                finally\n                {\n                    GL.UnmapBuffer(BufferTarget.ElementArrayBuffer);\n                    GL.CheckGLError();\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.SDL/Vertices/ConcreteVertexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteVertexBuffer : ConcreteVertexBufferGL\n    {\n        public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic)\n        {\n        }\n\n        public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(GLVertexBuffer != 0);\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                int elementSizeInBytes = sizeof(T);\n                int sizeInBytes = elementCount * elementSizeInBytes;\n\n                GL.BindBuffer(BufferTarget.ArrayBuffer, GLVertexBuffer);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n\n                IntPtr srcPtr = GL.MapBuffer(BufferTarget.ArrayBuffer, BufferAccess.ReadOnly);\n                GL.CheckGLError();\n                try\n                {\n                    srcPtr = srcPtr + offsetInBytes;\n\n                    fixed (T* pData = &data[0])\n                    {\n                        IntPtr dataPtr = (IntPtr)pData;\n                        dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                        if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0)\n                        {\n                            MemCopyHelper.MemoryCopy(\n                               srcPtr,\n                               dataPtr,\n                               sizeInBytes);\n                        }\n                        else\n                        {\n                            for (int i = 0; i < elementCount; i++)\n                            {\n                                MemCopyHelper.MemoryCopy(\n                                   srcPtr + i * vertexStride,\n                                   dataPtr + i * elementSizeInBytes,\n                                   elementSizeInBytes);\n                            }\n                        }\n                    }\n                }\n                finally\n                {\n                    GL.UnmapBuffer(BufferTarget.ArrayBuffer);\n                    GL.CheckGLError();\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.iOS/ConcreteGraphicsAdapter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing UIKit;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy\n    {\n        private DisplayModeCollection _supportedDisplayModes;\n        private DisplayMode _currentDisplayMode;\n        private string _description = string.Empty;\n\n        private UIScreen _screen;\n\n\n        public override string Platform_DeviceName\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override string Platform_Description\n        {\n            get { return _description; }\n            set { _description = value; }\n       }\n\n        public override int Platform_DeviceId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_Revision\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_VendorId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override int Platform_SubSystemId\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override IntPtr Platform_MonitorHandle\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool Platform_IsDefaultAdapter\n        {\n            get { return base.Platform_IsDefaultAdapter; }\n            set { base.Platform_IsDefaultAdapter = value; }\n        }\n\n        public override DisplayModeCollection Platform_SupportedDisplayModes\n        {\n            get\n            {\n                bool displayChanged = false;\n                if (_supportedDisplayModes == null || displayChanged)\n                {\n                    var modes = new List<DisplayMode>(new[] { Platform_CurrentDisplayMode, });\n\n                    modes.Sort(delegate (DisplayMode a, DisplayMode b)\n                    {\n                        if (a == b) return 0;\n                        if (a.Format <= b.Format && a.Width <= b.Width && a.Height <= b.Height) return -1;\n                        else return 1;\n                    });\n                    _supportedDisplayModes = base.CreateDisplayModeCollection(modes);\n                }\n\n                return _supportedDisplayModes;\n            }\n        }\n\n        public override DisplayMode Platform_CurrentDisplayMode\n        {\n            get\n            {\n                int screenWidth  = (int)(_screen.Bounds.Width  * _screen.Scale);\n                int screenHeight = (int)(_screen.Bounds.Height * _screen.Scale);\n                _currentDisplayMode = base.CreateDisplayMode(screenWidth, screenHeight, SurfaceFormat.Color);\n\n                return _currentDisplayMode;\n            }\n        }\n\n        public override bool Platform_IsWideScreen\n        {\n            // Common non-widescreen modes: 4:3, 5:4, 1:1\n            // Common widescreen modes: 16:9, 16:10, 2:1\n            // XNA does not appear to account for rotated displays on the desktop\n            get { return Platform_CurrentDisplayMode.AspectRatio > (4.0f / 3.0f); }\n        }\n\n        public override GraphicsBackend Backend\n        {\n            get { return GraphicsBackend.GLES; }\n        }\n\n        public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend)\n        {\n            switch (shaderBackend)\n            {\n                case GraphicsBackend.GLES:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile)\n        {\n            switch (shaderProfile)\n            {\n                case ShaderProfileType.OpenGL_Mojo:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        internal ConcreteGraphicsAdapter(UIScreen mainScreen)\n        {\n            this._screen = mainScreen;\n\n        }\n\n        public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile)\n        {\n            if (GraphicsAdapter.UseReferenceDevice)\n                return true;\n\n            switch (graphicsProfile)\n            {\n                case GraphicsProfile.Reach:\n                    return true;\n                case GraphicsProfile.HiDef:\n                    return false;\n                case GraphicsProfile.FL10_0:\n                    return false;\n                case GraphicsProfile.FL10_1:\n                    return false;\n                case GraphicsProfile.FL11_0:\n                    return false;\n                case GraphicsProfile.FL11_1:\n                    return false;\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        public override bool Platform_QueryBackBufferFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n        \n        public override bool Platform_QueryRenderTargetFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            selectedFormat = format;\n            selectedDepthFormat = depthFormat;\n            selectedMultiSampleCount = multiSampleCount;\n\n            // fallback for unsupported renderTarget surface formats.\n            if (selectedFormat == SurfaceFormat.Alpha8 ||\n                selectedFormat == SurfaceFormat.NormalizedByte2 ||\n                selectedFormat == SurfaceFormat.NormalizedByte4 ||\n                selectedFormat == SurfaceFormat.Dxt1 ||\n                selectedFormat == SurfaceFormat.Dxt3 ||\n                selectedFormat == SurfaceFormat.Dxt5 ||\n                selectedFormat == SurfaceFormat.Dxt1a ||\n                selectedFormat == SurfaceFormat.Dxt1SRgb ||\n                selectedFormat == SurfaceFormat.Dxt3SRgb ||\n                selectedFormat == SurfaceFormat.Dxt5SRgb)\n                selectedFormat = SurfaceFormat.Color;\n\n            // fallback for unsupported renderTarget surface formats on Reach profile.\n            if (graphicsProfile == GraphicsProfile.Reach)\n            {\n                if (selectedFormat == SurfaceFormat.HalfSingle ||\n                    selectedFormat == SurfaceFormat.HalfVector2 ||\n                    selectedFormat == SurfaceFormat.HalfVector4 ||\n                    selectedFormat == SurfaceFormat.HdrBlendable ||\n                    selectedFormat == SurfaceFormat.Rg32 ||\n                    selectedFormat == SurfaceFormat.Rgba1010102 ||\n                    selectedFormat == SurfaceFormat.Rgba64 ||\n                    selectedFormat == SurfaceFormat.Single ||\n                    selectedFormat == SurfaceFormat.Vector2 ||\n                    selectedFormat == SurfaceFormat.Vector4)\n                    selectedFormat = SurfaceFormat.Color;\n            }\n\n            return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.iOS/ConcreteGraphicsAdaptersProvider.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing UIKit;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy\n    {\n        private ReadOnlyCollection<GraphicsAdapter> _adapters;\n\n        public ConcreteGraphicsAdaptersProvider()\n        {\n            List<GraphicsAdapter> adapterList = CreateAdapterList();\n            _adapters = new ReadOnlyCollection<GraphicsAdapter>(adapterList);\n        }\n\n        private List<GraphicsAdapter> CreateAdapterList()\n        {\n            List<GraphicsAdapter> adapterList = new List<GraphicsAdapter>(1);\n\n            ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter(UIScreen.MainScreen);\n            GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy);\n\n            adapterList.Add(adapter);\n\n            // The first adapter is considered the default.\n            ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true;\n\n            return adapterList;\n        }\n\n        public override ReadOnlyCollection<GraphicsAdapter> Platform_Adapters\n        {\n            get { return _adapters; }\n        }\n\n        public override GraphicsAdapter Platform_DefaultAdapter\n        {\n            get { return _adapters[0]; }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.iOS/ConcreteGraphicsContext.iOS.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsContext : ConcreteGraphicsContextGL\n    {\n        private int _glContextCurrentThreadId = -1;\n        OpenGLES.EAGLContext _glDisposeContext;\n        SemaphoreSlim _sharedContextLock = new SemaphoreSlim(1, 1);\n        OpenGLES.EAGLContext _glSharedContext;\n\n        internal ConcreteGraphicsContext(GraphicsContext context)\n            : base(context)\n        {\n            _glContextCurrentThreadId = base.ManagedThreadId();\n\n            iOSGameWindow gameWindow = iOSGameWindow.FromHandle(((IPlatformGraphicsContext)context).DeviceStrategy.PresentationParameters.DeviceWindowHandle);\n            iOSGameViewController viewController = gameWindow.ViewController;\n            iOSGameView view = viewController.View;\n\n\n            // create _glDisposeContext for Disposing GL objects from GC Finalizer thread.\n            try\n            {\n                _glDisposeContext = new OpenGLES.EAGLContext(OpenGLES.EAGLRenderingAPI.OpenGLES3, viewController.View._eaglContext.ShareGroup);\n            }\n            catch\n            {\n                // Fall back to GLES 2.0\n                _glDisposeContext = new OpenGLES.EAGLContext(OpenGLES.EAGLRenderingAPI.OpenGLES2, viewController.View._eaglContext.ShareGroup);\n            }\n\n            // create _glSharedContext for creating GL objects from working threads.\n            try\n            {\n                _glSharedContext = new OpenGLES.EAGLContext(OpenGLES.EAGLRenderingAPI.OpenGLES3, viewController.View._eaglContext.ShareGroup);\n            }\n            catch\n            {\n                // Fall back to GLES 2.0\n                _glSharedContext = new OpenGLES.EAGLContext(OpenGLES.EAGLRenderingAPI.OpenGLES2, viewController.View._eaglContext.ShareGroup);\n            }\n\n\n            // try getting the context version\n            // GL_MAJOR_VERSION and GL_MINOR_VERSION are GL 3.0+ only, so we need to rely on GL_VERSION string\n            try\n            {\n                string version = GL.GetString(StringName.Version);\n                if (string.IsNullOrEmpty(version))\n                    throw new NoSuitableGraphicsDeviceException(\"Unable to retrieve OpenGL version\");\n\n                // for GLES, the GL_VERSION string is formatted as:\n                //     OpenGL<space>ES<space><version number><space><vendor-specific information>\n                if (version.StartsWith(\"OpenGL ES \"))\n                    version = version.Split(' ')[2];\n                else // if it fails, we assume to be on a 1.1 context\n                    version = \"1.1\";\n\n                _glVersion.Major = Convert.ToInt16(version.Substring(0, 1));\n                _glVersion.Minor = Convert.ToInt16(version.Substring(2, 1));\n            }\n            catch (FormatException)\n            {\n                // if it fails, we assume to be on a 1.1 context\n                _glVersion = new GLVersion(1,1);\n            }\n\n            base._capabilities = new ConcreteGraphicsCapabilities();\n            ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize(\n                this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy,\n                _glVersion);\n\n            base.Initialize(this.Capabilities);\n\n            this.PlatformSetup();\n        }\n        \n        internal override void EnsureContextCurrentThread()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            throw new InvalidOperationException(\"Operation not called on main thread.\");\n        }\n\n        public override void BindDisposeContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            OpenGLES.EAGLContext.SetCurrentContext(_glDisposeContext);\n        }\n\n        public override void UnbindDisposeContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            OpenGLES.EAGLContext.SetCurrentContext(null);\n        }\n\n        public override bool BindSharedContext()\n        {\n#if !ENABLE_SHARED_GL_CONTEXT\n            EnsureContextCurrentThread();\n#endif\n\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return false;\n\n            _sharedContextLock.Wait();\n            OpenGLES.EAGLContext.SetCurrentContext(_glSharedContext);\n\n            return true;\n        }\n\n        public override void UnbindSharedContext()\n        {\n            if (_glContextCurrentThreadId == base.ManagedThreadId())\n                return;\n\n            OpenGLES.EAGLContext.SetCurrentContext(null);\n            _sharedContextLock.Release();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                ThrowIfDisposed();\n\n                if (_glDisposeContext != null)\n                {\n                    _glDisposeContext.Dispose();\n                    _glDisposeContext = null;\n                }\n\n                if (_glSharedContext != null)\n                {\n                    _glSharedContext.Dispose();\n                    _glSharedContext = null;\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.iOS/ConcreteGraphicsDevice.iOS.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDevice : ConcreteGraphicsDeviceGL\n    {\n\n        internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n            : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters)\n        {\n        }\n\n\n        public override void Present()\n        {\n            base.Present();\n        }\n\n        \n        public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context)\n        {\n            return new ConcreteGraphicsContext(context);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.iOS/OpenGL.iOS.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform.Utilities;\nusing OpenGLES;\n\nnamespace Microsoft.Xna.Platform.Graphics.OpenGL\n{\n    internal sealed class OGL_IOS : OGL\n\t{\n        public IntPtr Library = FuncLoader.LoadLibrary(\"/System/Library/Frameworks/OpenGLES.framework/OpenGLES\");\n\n        public static void Initialize()\n        {\n            System.Diagnostics.Debug.Assert(OGL._current == null);\n            OGL._current = new OGL_IOS();\n        }\n\n        private OGL_IOS() : base()\n        {\n        }\n\n\n        protected override IntPtr GetNativeLibrary()\n\t\t{\n\t\t\tBoundApi = RenderApi.ES;\n\n            return IntPtr.Zero;\n        }\n\n        protected override T LoadFunction<T>(string function)\n        {\n            return FuncLoader.LoadFunction<T>(Library, function);\n        }\n\n        protected override T LoadFunctionOrNull<T>(string function)\n        {\n            return FuncLoader.LoadFunctionOrNull<T>(Library, function);\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Graphics/.GL.iOS/Vertices/ConcreteIndexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteIndexBuffer : ConcreteIndexBufferGL\n    {\n        public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic)\n        {\n        }\n\n        public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(GLIndexBuffer != 0);\n\n                // Buffers are write-only on OpenGL ES 1.1 and 2.0.  See the GL_OES_mapbuffer extension for more information.\n                // http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt\n                if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                    throw new NotSupportedException(\"Index buffers are write-only on OpenGL ES platforms\");\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                GL.BindBuffer(BufferTarget.ElementArrayBuffer, GLIndexBuffer);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n                \n                int elementSizeInBytes = sizeof(T);\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                    // there are no gaps so we can copy in one go\n                    IntPtr srcPtr = GL.MapBufferRange(\n                        BufferTarget.ElementArrayBuffer,\n                        (IntPtr)offsetInBytes,\n                        (IntPtr)(elementSizeInBytes * elementCount),\n                        BufferRangeAccess.Read);\n                    if (srcPtr == IntPtr.Zero)\n                        throw new InvalidOperationException(\"glMapBufferRange failed.\");\n\n                    MemCopyHelper.MemoryCopy(\n                        srcPtr,\n                        dataPtr,\n                        elementSizeInBytes * elementCount);\n\n                    GL.UnmapBuffer(BufferTarget.ElementArrayBuffer);\n                    GL.CheckGLError();\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.GL.iOS/Vertices/ConcreteVertexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteVertexBuffer : ConcreteVertexBufferGL\n    {\n        public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic)\n        {\n        }\n\n        public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n        }\n\n        public unsafe override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride)\n        {\n            bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().BindSharedContext();\n            try\n            {\n                Debug.Assert(GLVertexBuffer != 0);\n\n                // Buffers are write-only on OpenGL ES 1.1 and 2.0.  See the GL_OES_mapbuffer extension for more information.\n                // http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt\n                if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                    throw new NotSupportedException(\"Vertex buffers are write-only on OpenGL ES platforms\");\n\n                var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().GL;\n\n                GL.BindBuffer(BufferTarget.ArrayBuffer, GLVertexBuffer);\n                GL.CheckGLError();\n                if (!isSharedContext)\n                    ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true;\n                \n                int elementSizeInBytes = sizeof(T);\n\n                fixed (T* pData = &data[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    dataPtr = dataPtr + startIndex * elementSizeInBytes;\n\n                    IntPtr srcPtr = GL.MapBufferRange(\n                            BufferTarget.ArrayBuffer,\n                            (IntPtr)offsetInBytes,\n                            (IntPtr)(vertexStride * elementCount),\n                            BufferRangeAccess.Read);\n                    if (srcPtr == IntPtr.Zero)\n                        throw new InvalidOperationException(\"glMapBufferRange failed.\");\n\n                    if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0)\n                    {\n                        // there are no gaps so we can copy in one go\n                        MemCopyHelper.MemoryCopy(\n                            srcPtr,\n                            dataPtr,\n                            vertexStride * elementCount);\n                    }\n                    else\n                    {\n                        for (int i = 0; i < elementCount; i++)\n                        {\n                            MemCopyHelper.MemoryCopy(\n                               srcPtr + i * vertexStride,\n                               dataPtr + i * elementSizeInBytes,\n                               elementSizeInBytes);\n                        }\n                    }\n\n                    GL.UnmapBuffer(BufferTarget.ArrayBuffer);\n                    GL.CheckGLError();\n                }\n            }\n            finally\n            {\n                ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContextGL>().UnbindSharedContext();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteGraphicsAdapter.cs",
    "content": "// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy\n    {\n        public override string Platform_DeviceName\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override string Platform_Description\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int Platform_DeviceId\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int Platform_Revision\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int Platform_VendorId\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int Platform_SubSystemId\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override IntPtr Platform_MonitorHandle\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool Platform_IsDefaultAdapter\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override DisplayModeCollection Platform_SupportedDisplayModes\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override DisplayMode Platform_CurrentDisplayMode\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool Platform_IsWideScreen\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override GraphicsBackend Backend\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        internal ConcreteGraphicsAdapter()\n        {\n        }\n\n        public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool Platform_QueryBackBufferFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool Platform_QueryRenderTargetFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteGraphicsAdaptersProvider.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy\n    {\n\n        public ConcreteGraphicsAdaptersProvider()\n        {\n            throw new PlatformNotSupportedException();\n            return;\n        }\n\n        public override ReadOnlyCollection<GraphicsAdapter> Platform_Adapters\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override GraphicsAdapter Platform_DefaultAdapter\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteGraphicsCapabilities.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsCapabilities : GraphicsCapabilities\n    {\n\n        internal void PlatformInitialize(GraphicsDeviceStrategy deviceStrategy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteGraphicsContext.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsContext : GraphicsContextStrategy\n    {\n\n        public override Viewport Viewport\n        {\n            get { return base.Viewport; }\n            set\n            {\n                base.Viewport = value;\n                PlatformApplyViewport();\n            }\n        }\n\n        internal ConcreteGraphicsContext(GraphicsContext context)\n            : base(context)\n        {\n\n        }\n\n        public override void PlatformSetup()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Clear(ClearOptions options, Vector4 color, float depth, int stencil)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        internal void PlatformApplyViewport()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void PlatformResolveRenderTargets()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void PlatformApplyDefaultRenderTarget()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override IRenderTarget PlatformApplyRenderTargets()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount)\n            //where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration)\n            //where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration)\n            //where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Flush()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        public override OcclusionQueryStrategy CreateOcclusionQueryStrategy()\n        {\n            return new ConcreteOcclusionQuery(this);\n        }\n\n        public override GraphicsDebugStrategy CreateGraphicsDebugStrategy()\n        {\n            return new ConcreteGraphicsDebug(this);\n        }\n\n        public override ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity)\n        {\n            return new ConcreteConstantBufferCollection(capacity);\n        }\n\n        public override TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity)\n        {\n            return new ConcreteTextureCollection(this, capacity);\n        }\n\n        public override SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity)\n        {\n            return new ConcreteSamplerStateCollection(this, capacity);\n        }\n\n        public override ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override ITexture2DStrategy CreateTexture2DStrategy(Stream stream)\n        {\n            return new ConcreteTexture2D(this, stream);\n        }\n\n        public override ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n        {\n            return new ConcreteVertexShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n        }\n        public override ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n        {\n            return new ConcretePixelShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n        }\n        public override ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats)\n        {\n            return new ConcreteConstantBuffer(this, name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats);\n        }\n\n        public override IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n        {\n            return new ConcreteIndexBuffer(this, indexElementSize, indexCount, usage);\n        }\n        public override VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n        {\n            return new ConcreteVertexBuffer(this, vertexDeclaration, vertexCount, usage);\n        }\n        public override IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n        {\n            return new ConcreteDynamicIndexBuffer(this, indexElementSize, indexCount, usage);\n        }\n        public override VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n        {\n            return new ConcreteDynamicVertexBuffer(this, vertexDeclaration, vertexCount, usage);\n        }\n\n        public override IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source)\n        {\n            return new ConcreteBlendState(this, source);\n        }\n        public override IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source)\n        {\n            return new ConcreteDepthStencilState(this, source);\n        }\n        public override IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy source)\n        {\n            return new ConcreteRasterizerState(this, source);\n        }\n        public override ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source)\n        {\n            return new ConcreteSamplerState(this, source);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteGraphicsDebug.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDebug : GraphicsDebugStrategy\n    {\n\n        internal ConcreteGraphicsDebug(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n        }\n\n\n        public override bool TryDequeueMessage(out GraphicsDebugMessage message)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteGraphicsDevice.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteGraphicsDevice : GraphicsDeviceStrategy\n    {\n\n        internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n            : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters)\n        {\n        }\n\n\n        public override void Reset()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Reset(PresentationParameters presentationParameters)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Present()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void GetBackBufferData<T>(Rectangle? rect, T[] data, int startIndex, int elementCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void PlatformInitialize()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context)\n        {\n            return new ConcreteGraphicsContext(context);\n        }\n\n        public override System.Reflection.Assembly ConcreteAssembly\n        {\n            get { return ReflectionHelpers.GetAssembly(typeof(ConcreteGraphicsDevice)); }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteGraphicsFactory.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcreteGraphicsFactory : GraphicsFactory\n    {\n        public override GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy()\n        {\n            return new ConcreteGraphicsAdaptersProvider();\n        }\n\n        public override GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n        {\n            return new ConcreteGraphicsDevice(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters);\n        }\n\n        public override SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity)\n        {\n            return new SpriteBatcher(graphicsDevice, capacity);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteOcclusionQuery.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteOcclusionQuery : OcclusionQueryStrategy\n    {\n\n        public override int PixelCount { get { throw new PlatformNotSupportedException(); } }\n\n        public override bool IsComplete { get { throw new PlatformNotSupportedException(); } }\n\n        internal ConcreteOcclusionQuery(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformBegin()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformEnd()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteRenderTarget2D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTarget2D : ConcreteTexture2D, IRenderTarget2DStrategy, IRenderTargetStrategy\n    {\n        internal int _multiSampleCount;\n\n        internal ConcreteRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,\n              TextureSurfaceType surfaceType)\n            : base(contextStrategy, width, height, mipMap, preferredSurfaceFormat, arraySize, shared,\n                   isRenderTarget: true)\n        {\n\n            if (surfaceType == TextureSurfaceType.RenderTargetSwapChain)\n            {\n                // Texture will be created by the RenderTargetSwapChain.\n                return;\n            }\n\n            PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, shared);\n\n            PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, preferredMultiSampleCount, shared);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public int MultiSampleCount\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public bool IsContentLost\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public virtual void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n        #endregion IRenderTargetStrategy\n\n\n        private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared)\n        {\n            base.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared);\n        }\n\n        private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap,\n            DepthFormat preferredDepthFormat, int preferredMultiSampleCount, bool shared)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new PlatformNotSupportedException();\n\n            base.PlatformGraphicsContextLost();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }            \n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteRenderTarget3D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTarget3D : ConcreteTexture3D, IRenderTarget3DStrategy, IRenderTargetStrategy\n    {\n        internal ConcreteRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            : base(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat,\n                   isRenderTarget: true)\n        {\n\n            PlatformConstructTexture3D_rt(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat);\n\n            // If we don't need a depth buffer then we're done.\n            if (preferredDepthFormat != DepthFormat.None)\n                PlatformConstructRenderTarget3D(contextStrategy, width, height, depth, mipMap, preferredDepthFormat, preferredMultiSampleCount);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public int MultiSampleCount\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public bool IsContentLost\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n        #endregion IRenderTargetStrategy\n\n\n        private void PlatformConstructTexture3D_rt(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            base.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format);\n        }\n\n        private void PlatformConstructRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap,\n            DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n        \n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }            \n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteRenderTargetCube.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRenderTargetCube : ConcreteTextureCube, IRenderTargetCubeStrategy, IRenderTargetStrategy\n    {\n        internal ConcreteRenderTargetCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, RenderTargetUsage usage,\n            SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n            : base(contextStrategy, size, mipMap, preferredSurfaceFormat,\n                   isRenderTarget: true)\n        {\n\n            PlatformConstructTextureCube_rt(contextStrategy, size, mipMap, preferredSurfaceFormat);\n\n            PlatformConstructRenderTargetCube(contextStrategy, mipMap, preferredDepthFormat, preferredMultiSampleCount);\n        }\n\n\n        #region IRenderTargetStrategy\n        public DepthFormat DepthStencilFormat\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public int MultiSampleCount\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public bool IsContentLost\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n        #endregion IRenderTargetStrategy\n\n\n        private void PlatformConstructTextureCube_rt(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n        {\n            base.PlatformConstructTextureCube(contextStrategy, size, mipMap, format);\n        }\n\n        private void PlatformConstructRenderTargetCube(GraphicsContextStrategy contextStrategy, bool mipMap,\n            DepthFormat preferredDepthFormat, int preferredMultiSampleCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n        \n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }            \n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteSamplerStateCollection.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteSamplerStateCollection : SamplerStateCollectionStrategy\n    {\n\n        internal ConcreteSamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity)\n            : base(contextStrategy, capacity)\n        {\n        }\n\n\n        public override SamplerState this[int index]\n        {\n            get { return base[index]; }\n            set\n            {\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n        public override void Clear()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void Dirty()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        internal void PlatformApply()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteTexture.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTexture : GraphicsResourceStrategy, ITextureStrategy\n    {\n\n        internal ConcreteTexture(GraphicsContextStrategy contextStrategy, SurfaceFormat format, int levelCount)\n            : base(contextStrategy)\n        {\n        \n        }\n\n\n        #region ITextureStrategy\n        public SurfaceFormat Format { get { throw new PlatformNotSupportedException(); } }\n        public int LevelCount { get { throw new PlatformNotSupportedException(); } }\n        #endregion ITextureStrategy\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new PlatformNotSupportedException();\n\n            base.PlatformGraphicsContextLost();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }            \n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteTexture2D.Stream.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal partial class ConcreteTexture2D\n    {\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, Stream stream)\n            : base(contextStrategy, SurfaceFormat.Color, 1)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        public void SaveAsPng(Stream stream, int width, int height)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public void SaveAsJpeg(Stream stream, int width, int height)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteTexture2D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal partial class ConcreteTexture2D : ConcreteTexture, ITexture2DStrategy\n    {\n\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared,\n                                   bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height))\n        {\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height))\n        {\n\n            this.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared);\n        }\n\n\n        #region ITexture2DStrategy\n        public int Width\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public int Height\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public int ArraySize\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public Rectangle Bounds\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public IntPtr GetSharedHandle()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public void SetData<T>(int level, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public void SetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public void GetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect)\n        {\n            throw new PlatformNotSupportedException();\n        }\n        #endregion ITexture2DStrategy\n\n\n        internal void PlatformConstructTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteTexture3D.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTexture3D : ConcreteTexture, ITexture3DStrategy\n    {\n        internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format,\n                                   bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth))\n        {\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth))\n        {\n\n            this.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format);\n        }\n\n\n        #region ITexture3DStrategy\n        public int Width\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public int Height\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public int Depth\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public void SetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public void GetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n             where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n        #endregion ITexture3DStrategy\n\n        internal void PlatformConstructTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteTextureCollection.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteTextureCollection : TextureCollectionStrategy\n    {\n\n        internal ConcreteTextureCollection(GraphicsContextStrategy contextStrategy, int capacity)\n            : base(contextStrategy, capacity)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        public override void Clear()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        internal void PlatformApply()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/ConcreteTextureCube.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteTextureCube : ConcreteTexture, ITextureCubeStrategy\n    {\n\n        internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format,\n                                     bool isRenderTarget)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size))\n        {\n\n            System.Diagnostics.Debug.Assert(isRenderTarget);\n        }\n\n        internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n            : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size))\n        {\n\n            this.PlatformConstructTextureCube(contextStrategy, size, mipMap, format);\n        }\n\n\n        #region ITextureCubeStrategy\n        public int Size\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n        public void SetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public void GetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect)\n        {\n            throw new PlatformNotSupportedException();\n        }\n        #endregion ITextureCubeStrategy\n\n\n        internal void PlatformConstructTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Shader/ConcreteConstantBuffer.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    internal sealed class ConcreteConstantBuffer : ConstantBufferStrategy\n    {\n        public ConcreteConstantBuffer(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats)\n            : base(contextStrategy, name, parameters, offsets, sizeInBytes, integersAsFloats)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        private ConcreteConstantBuffer(ConcreteConstantBuffer source)\n            : base(source)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override object Clone()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        internal unsafe void PlatformApply(ConcreteGraphicsContext ccontextStrategy, int slot)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformContextLost()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Shader/ConcreteConstantBufferCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal sealed class ConcreteConstantBufferCollection : ConstantBufferCollectionStrategy\n    {\n        private uint _valid;\n\n        internal uint InternalValid { get { return this._valid; } }\n\n        internal ConcreteConstantBufferCollection(int capacity)\n            : base(capacity)\n        {\n            // hard limit of 32 because of _valid flags being 32bits.\n            if (capacity > 32)\n                throw new ArgumentOutOfRangeException(\"capacity\");\n\n            _valid = 0;\n        }\n\n        public override ConstantBuffer this[int index]\n        {\n            get { return base[index]; }\n            set\n            {\n                if (base[index] != value)\n                {\n                    uint mask = ((uint)1) << index;\n                    base[index] = value;\n\n                    if (value != null)\n                        _valid |= mask;\n                    else\n                        _valid &= ~mask;\n                }\n            }\n        }\n\n        public override void Clear()\n        {\n            for (int slot = 0; slot < base.Length; slot++)\n                base[slot] = null;\n\n            _valid = 0;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Shader/ConcretePixelShader.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcretePixelShader : ConcreteShader\n    {\n\n        internal ConcretePixelShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Shader/ConcreteShader.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class ConcreteShader : ShaderStrategy\n    {\n    \n        internal ConcreteShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n            throw new PlatformNotSupportedException();\n\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Shader/ConcreteVertexShader.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConcreteVertexShader : ConcreteShader\n    {\n\n        internal ConcreteVertexShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes)\n        {\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/States/ConcreteBlendState.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteBlendState : ResourceBlendStateStrategy\n    {\n\n        internal ConcreteBlendState(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source)\n            : base(contextStrategy, source)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/States/ConcreteDepthStencilState.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteDepthStencilState : ResourceDepthStencilStateStrategy\n    {\n\n        internal ConcreteDepthStencilState(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source)\n            : base(contextStrategy, source)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/States/ConcreteRasterizerState.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteRasterizerState : ResourceRasterizerStateStrategy\n    {\n\n        internal ConcreteRasterizerState(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source)\n            : base(contextStrategy, source)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/States/ConcreteSamplerState.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ConcreteSamplerState : ResourceSamplerStateStrategy\n    {\n\n        internal ConcreteSamplerState(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source)\n            : base(contextStrategy, source)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Vertices/ConcreteDynamicIndexBuffer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteDynamicIndexBuffer : ConcreteIndexBuffer, IDynamicIndexBufferStrategy\n    {\n\n        internal ConcreteDynamicIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic:true)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        #region IDynamicIndexBufferStrategy\n        public bool IsContentLost\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n        #endregion IDynamicIndexBufferStrategy\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Vertices/ConcreteDynamicVertexBuffer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteDynamicVertexBuffer : ConcreteVertexBuffer, IDynamicVertexBufferStrategy\n    {\n\n        internal ConcreteDynamicVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic:true)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        #region IDynamicVertexBufferStrategy\n        public bool IsContentLost\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n        #endregion IDynamicVertexBufferStrategy\n\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Vertices/ConcreteIndexBuffer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteIndexBuffer : IndexBufferStrategy\n    {\n\n        internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n            Debug.Assert(isDynamic == true);\n            throw new PlatformNotSupportedException();\n        }\n\n        internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy, indexElementSize, indexCount, usage)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/.Ref/Vertices/ConcreteVertexBuffer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConcreteVertexBuffer : VertexBufferStrategy\n    {\n\n        internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n            Debug.Assert(isDynamic == true);\n            throw new PlatformNotSupportedException();\n        }\n\n        internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy, vertexDeclaration, vertexCount, usage)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        public override void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void PlatformGraphicsContextLost()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/AlphaTestEffect.fx",
    "content": "//-----------------------------------------------------------------------------\n// AlphaTestEffect.fx\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n#include \"Macros.fxh\"\n\n\nTexture2D<float4> Texture : register(t0);\nsampler TextureSampler : register(s0);\n\n\ncbuffer Parameters : register(b0)\n{\n    float4 DiffuseColor     _vs(c0) _cb(c0);\n    float4 AlphaTest        _ps(c0) _cb(c1);\n    float3 FogColor         _ps(c1) _cb(c2);\n    float4 FogVector        _vs(c5) _cb(c3);\n\n\n    float4x4 WorldViewProj  _vs(c1) _cb(c0);\n};\n\n\n#include \"Structures.fxh\"\n#include \"Common.fxh\"\n\n\n// Vertex shader: basic.\nVSOutputTxFog VSAlphaTestFog(VSInputTx vin)\n{\n    VSOutputTxFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: no fog.\nVSOutputTx VSAlphaTest(VSInputTx vin)\n{\n    VSOutputTx vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParams;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: vertex color.\nVSOutputTxFog VSAlphaTestVcFog(VSInputTxVc vin)\n{\n    VSOutputTxFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: vertex color, no fog.\nVSOutputTx VSAlphaTestVc(VSInputTxVc vin)\n{\n    VSOutputTx vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParams;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Pixel shader: less/greater compare function.\nfloat4 PSAlphaTestLtGtFog(VSOutputTxFog pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n\n    clip((color.a < AlphaTest.x) ? AlphaTest.z : AlphaTest.w);\n\n    ApplyFog(color, pin.Specular.w);\n\n    return color;\n}\n\n\n// Pixel shader: less/greater compare function, no fog.\nfloat4 PSAlphaTestLtGt(VSOutputTx pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    clip((color.a < AlphaTest.x) ? AlphaTest.z : AlphaTest.w);\n\n    return color;\n}\n\n\n// Pixel shader: equal/notequal compare function.\nfloat4 PSAlphaTestEqNeFog(VSOutputTxFog pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    clip((abs(color.a - AlphaTest.x) < AlphaTest.y) ? AlphaTest.z : AlphaTest.w);\n\n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: equal/notequal compare function, no fog.\nfloat4 PSAlphaTestEqNe(VSOutputTx pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    clip((abs(color.a - AlphaTest.x) < AlphaTest.y) ? AlphaTest.z : AlphaTest.w);\n\n    return color;\n}\n\n\n// NOTE: The order of the techniques here are\n// defined to match the indexing in AlphaTestEffect.cs.\n\nTECHNIQUE_SM2(AlphaTestEffect_LTGT, VSAlphaTest, PSAlphaTestLtGt);\nTECHNIQUE_SM2(AlphaTestEffect_LTGT_Fog, VSAlphaTestFog, PSAlphaTestLtGtFog);\nTECHNIQUE_SM2(AlphaTestEffect_LTGT_VertexColor, VSAlphaTestVc, PSAlphaTestLtGt);\nTECHNIQUE_SM2(AlphaTestEffect_LTGT_VertexColor_Fog, VSAlphaTestVcFog, PSAlphaTestLtGtFog);\n\nTECHNIQUE_SM2(AlphaTestEffect_EQNE, VSAlphaTest, PSAlphaTestEqNe);\nTECHNIQUE_SM2(AlphaTestEffect_EQNE_Fog, VSAlphaTestFog, PSAlphaTestEqNeFog);\nTECHNIQUE_SM2(AlphaTestEffect_EQNE_VertexColor, VSAlphaTestVc, PSAlphaTestEqNe);\nTECHNIQUE_SM2(AlphaTestEffect_EQNE_VertexColor_Fog, VSAlphaTestVcFog, PSAlphaTestEqNeFog);\n\n\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/BasicEffect.fx",
    "content": "//-----------------------------------------------------------------------------\n// BasicEffect.fx\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n#include \"Macros.fxh\"\n\n\nTexture2D<float4> Texture : register(t0);\nsampler TextureSampler : register(s0);\n\n\ncbuffer Parameters : register(b0)\n{\n    float4 DiffuseColor             _vs(c0)  _ps(c1)  _cb(c0);\n    float3 EmissiveColor            _vs(c1)  _ps(c2)  _cb(c1);\n    float3 SpecularColor            _vs(c2)  _ps(c3)  _cb(c2);\n    float  SpecularPower            _vs(c3)  _ps(c4)  _cb(c2.w);\n\n    float3 DirLight0Direction       _vs(c4)  _ps(c5)  _cb(c3);\n    float3 DirLight0DiffuseColor    _vs(c5)  _ps(c6)  _cb(c4);\n    float3 DirLight0SpecularColor   _vs(c6)  _ps(c7)  _cb(c5);\n\n    float3 DirLight1Direction       _vs(c7)  _ps(c8)  _cb(c6);\n    float3 DirLight1DiffuseColor    _vs(c8)  _ps(c9)  _cb(c7);\n    float3 DirLight1SpecularColor   _vs(c9)  _ps(c10) _cb(c8);\n\n    float3 DirLight2Direction       _vs(c10) _ps(c11) _cb(c9);\n    float3 DirLight2DiffuseColor    _vs(c11) _ps(c12) _cb(c10);\n    float3 DirLight2SpecularColor   _vs(c12) _ps(c13) _cb(c11);\n\n    float3 EyePosition              _vs(c13) _ps(c14) _cb(c12);\n\n    float3 FogColor                          _ps(c0)  _cb(c13);\n    float4 FogVector                _vs(c14)          _cb(c14);\n\n    float4x4 World                  _vs(c19)          _cb(c15);\n    float3x3 WorldInverseTranspose  _vs(c23)          _cb(c19);\n\n\n    float4x4 WorldViewProj          _vs(c15)          _cb(c0);\n};\n\n\n#include \"Structures.fxh\"\n#include \"Common.fxh\"\n#include \"Lighting.fxh\"\n\n\n// Vertex shader: basic.\nVSOutputFog VSBasicFog(VSInput vin)\n{\n    VSOutputFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParamsFog;\n    \n    return vout;\n}\n\n\n// Vertex shader: no fog.\nVSOutput VSBasic(VSInput vin)\n{\n    VSOutput vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParams;\n    \n    return vout;\n}\n\n\n// Vertex shader: vertex color.\nVSOutputFog VSBasicVcFog(VSInputVc vin)\n{\n    VSOutputFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParamsFog;\n    \n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: vertex color, no fog.\nVSOutput VSBasicVc(VSInputVc vin)\n{\n    VSOutput vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParams;\n    \n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: texture.\nVSOutputTxFog VSBasicTxFog(VSInputTx vin)\n{\n    VSOutputTxFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: texture, no fog.\nVSOutputTx VSBasicTx(VSInputTx vin)\n{\n    VSOutputTx vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParams;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: texture + vertex color.\nVSOutputTxFog VSBasicTxVcFog(VSInputTxVc vin)\n{\n    VSOutputTxFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: texture + vertex color, no fog.\nVSOutputTx VSBasicTxVc(VSInputTxVc vin)\n{\n    VSOutputTx vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParams;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: vertex lighting.\nVSOutputFog VSBasicVertexLighting(VSInputNm vin)\n{\n    VSOutputFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3);\n    SetCommonVSOutputParamsFog;\n    \n    return vout;\n}\n\n\n// Vertex shader: vertex lighting + vertex color.\nVSOutputFog VSBasicVertexLightingVc(VSInputNmVc vin)\n{\n    VSOutputFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3);\n    SetCommonVSOutputParamsFog;\n    \n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: vertex lighting + texture.\nVSOutputTxFog VSBasicVertexLightingTx(VSInputNmTx vin)\n{\n    VSOutputTxFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: vertex lighting + texture + vertex color.\nVSOutputTxFog VSBasicVertexLightingTxVc(VSInputNmTxVc vin)\n{\n    VSOutputTxFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: one light.\nVSOutputFog VSBasicOneLight(VSInputNm vin)\n{\n    VSOutputFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1);\n    SetCommonVSOutputParamsFog;\n    \n    return vout;\n}\n\n\n// Vertex shader: one light + vertex color.\nVSOutputFog VSBasicOneLightVc(VSInputNmVc vin)\n{\n    VSOutputFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1);\n    SetCommonVSOutputParamsFog;\n    \n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: one light + texture.\nVSOutputTxFog VSBasicOneLightTx(VSInputNmTx vin)\n{\n    VSOutputTxFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: one light + texture + vertex color.\nVSOutputTxFog VSBasicOneLightTxVc(VSInputNmTxVc vin)\n{\n    VSOutputTxFog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: pixel lighting.\nVSOutputPixelLighting VSBasicPixelLighting(VSInputNm vin)\n{\n    VSOutputPixelLighting vout;\n    \n    CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal);\n    SetCommonVSOutputParamsPixelLightingFog;\n\n    vout.Diffuse = float4(1, 1, 1, DiffuseColor.a);\n    \n    return vout;\n}\n\n\n// Vertex shader: pixel lighting + vertex color.\nVSOutputPixelLighting VSBasicPixelLightingVc(VSInputNmVc vin)\n{\n    VSOutputPixelLighting vout;\n    \n    CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal);\n    SetCommonVSOutputParamsPixelLightingFog;\n    \n    vout.Diffuse.rgb = vin.Color.rgb;\n    vout.Diffuse.a = vin.Color.a * DiffuseColor.a;\n    \n    return vout;\n}\n\n\n// Vertex shader: pixel lighting + texture.\nVSOutputPixelLightingTx VSBasicPixelLightingTx(VSInputNmTx vin)\n{\n    VSOutputPixelLightingTx vout;\n    \n    CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal);\n    SetCommonVSOutputParamsPixelLightingFog;\n    \n    vout.Diffuse = float4(1, 1, 1, DiffuseColor.a);\n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: pixel lighting + texture + vertex color.\nVSOutputPixelLightingTx VSBasicPixelLightingTxVc(VSInputNmTxVc vin)\n{\n    VSOutputPixelLightingTx vout;\n    \n    CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal);\n    SetCommonVSOutputParamsPixelLightingFog;\n    \n    vout.Diffuse.rgb = vin.Color.rgb;\n    vout.Diffuse.a = vin.Color.a * DiffuseColor.a;\n    vout.TexCoord = vin.TexCoord;\n    \n    return vout;\n}\n\n\n// Pixel shader: basic.\nfloat4 PSBasicFog(VSOutputFog pin) : SV_Target0\n{\n    float4 color = pin.Diffuse;\n    \n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: no fog.\nfloat4 PSBasic(VSOutput pin) : SV_Target0\n{\n    return pin.Diffuse;\n}\n\n\n// Pixel shader: texture.\nfloat4 PSBasicTxFog(VSOutputTxFog pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: texture, no fog.\nfloat4 PSBasicTx(VSOutputTx pin) : SV_Target0\n{\n    return Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n}\n\n\n// Pixel shader: vertex lighting.\nfloat4 PSBasicVertexLightingFog(VSOutputFog pin) : SV_Target0\n{\n    float4 color = pin.Diffuse;\n\n    AddSpecular(color, pin.Specular.rgb);\n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: vertex lighting, no fog.\nfloat4 PSBasicVertexLighting(VSOutputFog pin) : SV_Target0\n{\n    float4 color = pin.Diffuse;\n    \n    AddSpecular(color, pin.Specular.rgb);\n    \n    return color;\n}\n\n\n// Pixel shader: vertex lighting + texture.\nfloat4 PSBasicVertexLightingTxFog(VSOutputTxFog pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    AddSpecular(color, pin.Specular.rgb);\n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: vertex lighting + texture, no fog.\nfloat4 PSBasicVertexLightingTx(VSOutputTxFog pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    AddSpecular(color, pin.Specular.rgb);\n    \n    return color;\n}\n\n\n// Pixel shader: pixel lighting.\nfloat4 PSBasicPixelLighting(VSOutputPixelLighting pin) : SV_Target0\n{\n    float4 color = pin.Diffuse;\n\n    float3 eyeVector = normalize(EyePosition - pin.PositionWS.xyz);\n    float3 worldNormal = normalize(pin.NormalWS);\n    \n    ColorPair lightResult = ComputeLights(eyeVector, worldNormal, 3);\n\n    color.rgb *= lightResult.Diffuse;\n    \n    AddSpecular(color, lightResult.Specular);\n    ApplyFog(color, pin.PositionWS.w);\n    \n    return color;\n}\n\n\n// Pixel shader: pixel lighting + texture.\nfloat4 PSBasicPixelLightingTx(VSOutputPixelLightingTx pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    float3 eyeVector = normalize(EyePosition - pin.PositionWS.xyz);\n    float3 worldNormal = normalize(pin.NormalWS);\n    \n    ColorPair lightResult = ComputeLights(eyeVector, worldNormal, 3);\n    \n    color.rgb *= lightResult.Diffuse;\n\n    AddSpecular(color, lightResult.Specular);\n    ApplyFog(color, pin.PositionWS.w);\n    \n    return color;\n}\n\n\n// NOTE: The order of the techniques here are\n// defined to match the indexing in BasicEffect.cs.\n\nTECHNIQUE_SM2( BasicEffect,\t\t\t\t\t\t\tVSBasic,\t\tPSBasic );\nTECHNIQUE_SM2( BasicEffect_Fog,\t\t\t\t\t\tVSBasicFog,\t\t\tPSBasicFog );\nTECHNIQUE_SM2( BasicEffect_VertexColor,\t\t\t\tVSBasicVc,\t\tPSBasic );\nTECHNIQUE_SM2( BasicEffect_VertexColor_Fog,\t\t\tVSBasicVcFog,\t\tPSBasicFog );\n\nTECHNIQUE_SM2( BasicEffect_Texture,\t\t\t\t\tVSBasicTx,\t\tPSBasicTx );\nTECHNIQUE_SM2( BasicEffect_Texture_Fog,\t\t\t\tVSBasicTxFog,\t\tPSBasicTxFog );\nTECHNIQUE_SM2( BasicEffect_Texture_VertexColor,\t\tVSBasicTxVc,\tPSBasicTx );\nTECHNIQUE_SM2( BasicEffect_Texture_VertexColor_Fog,\tVSBasicTxVcFog,\t\tPSBasicTxFog );\n\nTECHNIQUE_SM2( BasicEffect_VertexLighting,\t\t\t\t\t\t\tVSBasicVertexLighting,\t\tPSBasicVertexLighting );\nTECHNIQUE_SM2( BasicEffect_VertexLighting_Fog,\t\t\t\t\t\tVSBasicVertexLighting,\t\tPSBasicVertexLightingFog );\nTECHNIQUE_SM2( BasicEffect_VertexLighting_VertexColor,\t\t\t\tVSBasicVertexLightingVc,\tPSBasicVertexLighting );\nTECHNIQUE_SM2( BasicEffect_VertexLighting_VertexColor_Fog,\t\t\tVSBasicVertexLightingVc,\tPSBasicVertexLightingFog );\n\nTECHNIQUE_SM2( BasicEffect_VertexLighting_Texture,\t\t\t\t\tVSBasicVertexLightingTx,\tPSBasicVertexLightingTx );\nTECHNIQUE_SM2( BasicEffect_VertexLighting_Texture_Fog,\t\t\t\tVSBasicVertexLightingTx,\tPSBasicVertexLightingTxFog );\nTECHNIQUE_SM2( BasicEffect_VertexLighting_Texture_VertexColor,\t\tVSBasicVertexLightingTxVc,\tPSBasicVertexLightingTx );\nTECHNIQUE_SM2( BasicEffect_VertexLighting_Texture_VertexColor_Fog,\tVSBasicVertexLightingTxVc,\tPSBasicVertexLightingTxFog );\n\nTECHNIQUE_SM2( BasicEffect_OneLight,\t\t\t\t\t\t\tVSBasicOneLight,\t\tPSBasicVertexLighting );\nTECHNIQUE_SM2( BasicEffect_OneLight_Fog,\t\t\t\t\t\tVSBasicOneLight,\t\tPSBasicVertexLightingFog );\nTECHNIQUE_SM2( BasicEffect_OneLight_VertexColor,\t\t\t\tVSBasicOneLightVc,\t\tPSBasicVertexLighting );\nTECHNIQUE_SM2( BasicEffect_OneLight_VertexColor_Fog,\t\t\tVSBasicOneLightVc,\t\tPSBasicVertexLightingFog );\n\nTECHNIQUE_SM2( BasicEffect_OneLight_Texture,\t\t\t\t\tVSBasicOneLightTx,\t\tPSBasicVertexLightingTx );\nTECHNIQUE_SM2( BasicEffect_OneLight_Texture_Fog,\t\t\t\tVSBasicOneLightTx,\t\tPSBasicVertexLightingTxFog );\nTECHNIQUE_SM2( BasicEffect_OneLight_Texture_VertexColor,\t\tVSBasicOneLightTxVc,\tPSBasicVertexLightingTx );\nTECHNIQUE_SM2( BasicEffect_OneLight_Texture_VertexColor_Fog,\tVSBasicOneLightTxVc,\tPSBasicVertexLightingTxFog );\n\nTECHNIQUE_SM2( BasicEffect_PixelLighting,\t\t\t\t\t\t\tVSBasicPixelLighting,\t\tPSBasicPixelLighting );\nTECHNIQUE_SM2( BasicEffect_PixelLighting_Fog,\t\t\t\t\t\tVSBasicPixelLighting,\t\tPSBasicPixelLighting );\nTECHNIQUE_SM2( BasicEffect_PixelLighting_VertexColor,\t\t\t\tVSBasicPixelLightingVc,\t\tPSBasicPixelLighting );\nTECHNIQUE_SM2( BasicEffect_PixelLighting_VertexColor_Fog,\t\t\tVSBasicPixelLightingVc,\t\tPSBasicPixelLighting );\n\nTECHNIQUE_SM2( BasicEffect_PixelLighting_Texture,\t\t\t\t\tVSBasicPixelLightingTx,\t\tPSBasicPixelLightingTx );\nTECHNIQUE_SM2( BasicEffect_PixelLighting_Texture_Fog,\t\t\t\tVSBasicPixelLightingTx,\t\tPSBasicPixelLightingTx );\nTECHNIQUE_SM2( BasicEffect_PixelLighting_Texture_VertexColor,\t\tVSBasicPixelLightingTxVc,\tPSBasicPixelLightingTx );\nTECHNIQUE_SM2( BasicEffect_PixelLighting_Texture_VertexColor_Fog,\tVSBasicPixelLightingTxVc,\tPSBasicPixelLightingTx );\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/BuildShaders.bat",
    "content": "@echo off\nsetlocal\n\nSET KNIFXC=\"..\\..\\..\\..\\Tools\\EffectCompiler\\bin\\Windows\\AnyCPU\\Release\\net8.0\\KNIFXC.exe\"\n\n@for /f %%f IN ('dir /b *.fx') do (\n\n  echo %%~nf.fx\n  \n  call %KNIFXC% %%~nf.fx ..\\Resources\\%%~nf.dx11.fxo /Backend:DirectX11\n\n  call %KNIFXC% %%~nf.fx ..\\Resources\\%%~nf.ogl.fxo /Backend:OpenGL\n    \n  call %KNIFXC% %%~nf.fx ..\\Resources\\%%~nf.gles.fxo /Backend:GLES\n\n)\n\nendlocal\npause\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/Common.fxh",
    "content": "//-----------------------------------------------------------------------------\n// Common.fxh\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n\nfloat ComputeFogFactor(float4 position)\n{\n    return saturate(dot(position, FogVector));\n}\n\n\nvoid ApplyFog(inout float4 color, float fogFactor)\n{\n    color.rgb = lerp(color.rgb, FogColor * color.a, fogFactor);\n}\n\n\nvoid AddSpecular(inout float4 color, float3 specular)\n{\n    color.rgb += specular * color.a;\n}\n\n\nstruct CommonVSOutput\n{\n    float4 Pos_ps;\n    float4 Diffuse;\n    float3 Specular;\n    float  FogFactor;\n};\n\n\nCommonVSOutput ComputeCommonVSOutput(float4 position)\n{\n    CommonVSOutput vout;\n    \n    vout.Pos_ps = mul(position, WorldViewProj);\n    vout.Diffuse = DiffuseColor;\n    vout.Specular = 0;\n    vout.FogFactor = ComputeFogFactor(position);\n    \n    return vout;\n}\n\n\n#define SetCommonVSOutputParams \\\n    vout.PositionPS = cout.Pos_ps; \\\n    vout.Diffuse = cout.Diffuse;\n\n\n#define SetCommonVSOutputParamsFog \\\n    vout.PositionPS = cout.Pos_ps; \\\n    vout.Diffuse = cout.Diffuse; \\\n    vout.Specular = float4(cout.Specular, cout.FogFactor);\n\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/DualTextureEffect.fx",
    "content": "//-----------------------------------------------------------------------------\n// DualTextureEffect_Fog.fx\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n#include \"Macros.fxh\"\n\n\nTexture2D<float4> Texture : register(t0);\nsampler TextureSampler : register(s0);\nTexture2D<float4> Texture2 : register(t1);\nsampler Texture2Sampler : register(s1);\n\n\ncbuffer Parameters : register(b0)\n{\n    float4 DiffuseColor     _vs(c0) _cb(c0);\n    float3 FogColor         _ps(c0) _cb(c1);\n    float4 FogVector        _vs(c5) _cb(c2);\n\n\n    float4x4 WorldViewProj  _vs(c1) _cb(c0);\n};\n\n\n#include \"Structures.fxh\"\n#include \"Common.fxh\"\n\n\n// Vertex shader: basic.\nVSOutputTx2Fog VSDualTextureFog(VSInputTx2 vin)\n{\n    VSOutputTx2Fog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.TexCoord2 = vin.TexCoord2;\n\n    return vout;\n}\n\n\n// Vertex shader: no fog.\nVSOutputTx2 VSDualTexture(VSInputTx2 vin)\n{\n    VSOutputTx2 vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParams;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.TexCoord2 = vin.TexCoord2;\n\n    return vout;\n}\n\n\n// Vertex shader: vertex color.\nVSOutputTx2Fog VSDualTextureVcFog(VSInputTx2Vc vin)\n{\n    VSOutputTx2Fog vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.TexCoord2 = vin.TexCoord2;\n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Vertex shader: vertex color, no fog.\nVSOutputTx2 VSDualTextureVc(VSInputTx2Vc vin)\n{\n    VSOutputTx2 vout;\n    \n    CommonVSOutput cout = ComputeCommonVSOutput(vin.Position);\n    SetCommonVSOutputParams;\n    \n    vout.TexCoord = vin.TexCoord;\n    vout.TexCoord2 = vin.TexCoord2;\n    vout.Diffuse *= vin.Color;\n    \n    return vout;\n}\n\n\n// Pixel shader: basic.\nfloat4 PSDualTextureFog(VSOutputTx2Fog pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord);\n    float4 overlay = Texture2.Sample(Texture2Sampler, pin.TexCoord2);\n\n    color.rgb *= 2;    \n    color *= overlay * pin.Diffuse;\n    \n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: no fog.\nfloat4 PSDualTexture(VSOutputTx2 pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord);\n    float4 overlay = Texture2.Sample(Texture2Sampler, pin.TexCoord2);\n    \n    color.rgb *= 2;    \n    color *= overlay * pin.Diffuse;\n    \n    return color;\n}\n\n\n// NOTE: The order of the techniques here are\n// defined to match the indexing in DualTextureEffect_Fog.cs.\n\nTECHNIQUE_SM2( DualTextureEffect,\t\t\t\t\tVSDualTexture,\t\tPSDualTexture );\nTECHNIQUE_SM2( DualTextureEffect_Fog,\t\t\t\tVSDualTextureFog,\t\tPSDualTextureFog );\nTECHNIQUE_SM2( DualTextureEffect_VertexColor,\t\tVSDualTextureVc,\tPSDualTexture );\nTECHNIQUE_SM2( DualTextureEffect_VertexColor_Fog,\tVSDualTextureVcFog,\t\tPSDualTextureFog );\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/EnvironmentMapEffect.fx",
    "content": "//-----------------------------------------------------------------------------\n// EnvironmentMapEffect.fx\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n#include \"Macros.fxh\"\n\n\nTexture2D<float4> Texture : register(t0);\nsampler TextureSampler : register(s0);\nTextureCube<float4> EnvironmentMap : register(t1);\nsampler EnvironmentMapSampler : register(s1);\n\n\ncbuffer Parameters : register(b0)\n{\n    float3 EnvironmentMapSpecular   _ps(c0)  _cb(c0);\n    float  FresnelFactor            _vs(c0)  _cb(c0.w);\n    float  EnvironmentMapAmount     _vs(c1)  _cb(c2.w);\n\n    float4 DiffuseColor             _vs(c2)  _cb(c1);\n    float3 EmissiveColor            _vs(c3)  _cb(c2);\n\n    float3 DirLight0Direction       _vs(c4)  _cb(c3);\n    float3 DirLight0DiffuseColor    _vs(c5)  _cb(c4);\n\n    float3 DirLight1Direction       _vs(c6)  _cb(c5);\n    float3 DirLight1DiffuseColor    _vs(c7)  _cb(c6);\n\n    float3 DirLight2Direction       _vs(c8)  _cb(c7);\n    float3 DirLight2DiffuseColor    _vs(c9)  _cb(c8);\n\n    float3 EyePosition              _vs(c10) _cb(c9);\n\n    float3 FogColor                 _ps(c1)  _cb(c10);\n    float4 FogVector                _vs(c11) _cb(c11);\n\n    float4x4 World                  _vs(c16) _cb(c12);\n    float3x3 WorldInverseTranspose  _vs(c19) _cb(c16);\n\n\n    float4x4 WorldViewProj          _vs(c12) _cb(c0);\n};\n\n\n// We don't use these parameters, but Lighting.fxh won't compile without them.\n#define SpecularPower           0\n#define SpecularColor           float3(0, 0, 0)\n#define DirLight0SpecularColor  float3(0, 0, 0)\n#define DirLight1SpecularColor  float3(0, 0, 0)\n#define DirLight2SpecularColor  float3(0, 0, 0)\n\n\n#include \"Structures.fxh\"\n#include \"Common.fxh\"\n#include \"Lighting.fxh\"\n\n\nfloat ComputeFresnelFactor(float3 eyeVector, float3 worldNormal)\n{\n    float viewAngle = dot(eyeVector, worldNormal);\n    \n    return pow(max(1 - abs(viewAngle), 0), FresnelFactor) * EnvironmentMapAmount;\n}\n\n\nVSOutputTxEnvMap ComputeEnvMapVSOutput(VSInputNmTx vin, uniform bool useFresnel, uniform int numLights)\n{\n    VSOutputTxEnvMap vout;\n    \n    float4 pos_ws = mul(vin.Position, World);\n    float3 eyeVector = normalize(EyePosition - pos_ws.xyz);\n    float3 worldNormal = normalize(mul(vin.Normal, WorldInverseTranspose));\n\n    ColorPair lightResult = ComputeLights(eyeVector, worldNormal, numLights);\n    \n    vout.PositionPS = mul(vin.Position, WorldViewProj);\n    vout.Diffuse = float4(lightResult.Diffuse, DiffuseColor.a);\n    \n    if (useFresnel)\n        vout.Specular.rgb = ComputeFresnelFactor(eyeVector, worldNormal);\n    else\n        vout.Specular.rgb = EnvironmentMapAmount;\n    \n    vout.Specular.a = ComputeFogFactor(vin.Position);\n    vout.TexCoord = vin.TexCoord;\n    vout.EnvCoord = reflect(-eyeVector, worldNormal);\n\n    return vout;\n}\n\n\n// Vertex shader: basic.\nVSOutputTxEnvMap VSEnvMap(VSInputNmTx vin)\n{\n    return ComputeEnvMapVSOutput(vin, false, 3);\n}\n\n\n// Vertex shader: fresnel.\nVSOutputTxEnvMap VSEnvMapFresnel(VSInputNmTx vin)\n{\n    return ComputeEnvMapVSOutput(vin, true, 3);\n}\n\n\n// Vertex shader: one light.\nVSOutputTxEnvMap VSEnvMapOneLight(VSInputNmTx vin)\n{\n    return ComputeEnvMapVSOutput(vin, false, 1);\n}\n\n\n// Vertex shader: one light, fresnel.\nVSOutputTxEnvMap VSEnvMapOneLightFresnel(VSInputNmTx vin)\n{\n    return ComputeEnvMapVSOutput(vin, true, 1);\n}\n\n\n// Pixel shader: basic.\nfloat4 PSEnvMapFog(VSOutputTxEnvMap pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    float4 envmap = EnvironmentMap.Sample(EnvironmentMapSampler, pin.EnvCoord) * color.a;\n\n    color.rgb = lerp(color.rgb, envmap.rgb, pin.Specular.rgb);\n    \n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: no fog.\nfloat4 PSEnvMap(VSOutputTxEnvMap pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    float4 envmap = EnvironmentMap.Sample(EnvironmentMapSampler, pin.EnvCoord) * color.a;\n\n    color.rgb = lerp(color.rgb, envmap.rgb, pin.Specular.rgb);\n    \n    return color;\n}\n\n\n// Pixel shader: specular.\nfloat4 PSEnvMapSpecularFog(VSOutputTxEnvMap pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    float4 envmap = EnvironmentMap.Sample(EnvironmentMapSampler, pin.EnvCoord) * color.a;\n\n    color.rgb = lerp(color.rgb, envmap.rgb, pin.Specular.rgb);\n    color.rgb += EnvironmentMapSpecular * envmap.a;\n    \n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: specular, no fog.\nfloat4 PSEnvMapSpecular(VSOutputTxEnvMap pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    float4 envmap = EnvironmentMap.Sample(EnvironmentMapSampler, pin.EnvCoord) * color.a;\n\n    color.rgb = lerp(color.rgb, envmap.rgb, pin.Specular.rgb);\n    color.rgb += EnvironmentMapSpecular * envmap.a;\n    \n    return color;\n}\n\n\n// NOTE: The order of the techniques here are\n// defined to match the indexing in EnvironmentMapEffect.cs.\n\nTECHNIQUE_SM2( EnvironmentMapEffect,\t\t\t\t\t\tVSEnvMap,\t\t\tPSEnvMap );\nTECHNIQUE_SM2( EnvironmentMapEffect_Fog,\t\t\t\t\tVSEnvMap,\t\t\tPSEnvMapFog );\nTECHNIQUE_SM2( EnvironmentMapEffect_Fresnel,\t\t\t\tVSEnvMapFresnel,\tPSEnvMap );\nTECHNIQUE_SM2( EnvironmentMapEffect_Fresnel_Fog,\t\t\tVSEnvMapFresnel,\tPSEnvMapFog );\n\nTECHNIQUE_SM2( EnvironmentMapEffect_Specular,\t\t\t\tVSEnvMap,\t\t\tPSEnvMapSpecular );\nTECHNIQUE_SM2( EnvironmentMapEffect_Specular_Fog,\t\t\tVSEnvMap,\t\t\tPSEnvMapSpecularFog );\nTECHNIQUE_SM2( EnvironmentMapEffect_Fresnel_Specular,\t\tVSEnvMapFresnel,\tPSEnvMapSpecular );\nTECHNIQUE_SM2( EnvironmentMapEffect_Fresnel_Specular_Fog,\tVSEnvMapFresnel,\tPSEnvMapSpecularFog );\n\nTECHNIQUE_SM2( EnvironmentMapEffect_OneLight,\t\t\t\t\t\tVSEnvMapOneLight,\t\t\tPSEnvMap );\nTECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fog,\t\t\t\t\tVSEnvMapOneLight,\t\t\tPSEnvMapFog );\nTECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fresnel,\t\t\t\tVSEnvMapOneLightFresnel,\tPSEnvMap );\nTECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fresnel_Fog,\t\t\tVSEnvMapOneLightFresnel,\tPSEnvMapFog );\n\nTECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Specular,\t\t\t\tVSEnvMapOneLight,\t\t\tPSEnvMapSpecular );\nTECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Specular_Fog,\t\t\tVSEnvMapOneLight,\t\t\tPSEnvMapSpecularFog );\nTECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fresnel_Specular,\t\tVSEnvMapOneLightFresnel,\tPSEnvMapSpecular );\nTECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fresnel_Specular_Fog,\tVSEnvMapOneLightFresnel,\tPSEnvMapSpecularFog );\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/Lighting.fxh",
    "content": "//-----------------------------------------------------------------------------\n// Lighting.fxh\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n\nstruct ColorPair\n{\n    float3 Diffuse;\n    float3 Specular;\n};\n\n\nColorPair ComputeLights(float3 eyeVector, float3 worldNormal, uniform int numLights)\n{\n    float3x3 lightDirections = 0;\n    float3x3 lightDiffuse = 0;\n    float3x3 lightSpecular = 0;\n    float3x3 halfVectors = 0;\n    \n    [unroll]\n    for (int i = 0; i < numLights; i++)\n    {\n        lightDirections[i] = float3x3(DirLight0Direction,     DirLight1Direction,     DirLight2Direction)    [i];\n        lightDiffuse[i]    = float3x3(DirLight0DiffuseColor,  DirLight1DiffuseColor,  DirLight2DiffuseColor) [i];\n        lightSpecular[i]   = float3x3(DirLight0SpecularColor, DirLight1SpecularColor, DirLight2SpecularColor)[i];\n        \n        halfVectors[i] = normalize(eyeVector - lightDirections[i]);\n    }\n\n    float3 dotL = mul(-lightDirections, worldNormal);\n    float3 dotH = mul(halfVectors, worldNormal);\n    \n    float3 zeroL = step(float3(0,0,0), dotL);\n\n    float3 diffuse  = zeroL * dotL;\n    float3 specular = pow(max(dotH, 0) * zeroL, SpecularPower);\n\n    ColorPair result;\n    \n    result.Diffuse  = mul(diffuse,  lightDiffuse)  * DiffuseColor.rgb + EmissiveColor;\n    result.Specular = mul(specular, lightSpecular) * SpecularColor;\n\n    return result;\n}\n\n\nCommonVSOutput ComputeCommonVSOutputWithLighting(float4 position, float3 normal, uniform int numLights)\n{\n    CommonVSOutput vout;\n    \n    float4 pos_ws = mul(position, World);\n    float3 eyeVector = normalize(EyePosition - pos_ws.xyz);\n    float3 worldNormal = normalize(mul(normal, WorldInverseTranspose));\n\n    ColorPair lightResult = ComputeLights(eyeVector, worldNormal, numLights);\n    \n    vout.Pos_ps = mul(position, WorldViewProj);\n    vout.Diffuse = float4(lightResult.Diffuse, DiffuseColor.a);\n    vout.Specular = lightResult.Specular;\n    vout.FogFactor = ComputeFogFactor(position);\n    \n    return vout;\n}\n\n\nstruct CommonVSOutputPixelLighting\n{\n    float4 Pos_ps;\n    float3 Pos_ws;\n    float3 Normal_ws;\n    float  FogFactor;\n};\n\n\nCommonVSOutputPixelLighting ComputeCommonVSOutputPixelLighting(float4 position, float3 normal)\n{\n    CommonVSOutputPixelLighting vout;\n    \n    vout.Pos_ps = mul(position, WorldViewProj);\n    vout.Pos_ws = mul(position, World).xyz;\n    vout.Normal_ws = normalize(mul(normal, WorldInverseTranspose));\n    vout.FogFactor = ComputeFogFactor(position);\n    \n    return vout;\n}\n\n\n#define SetCommonVSOutputParamsPixelLightingFog \\\n    vout.PositionPS = cout.Pos_ps; \\\n    vout.PositionWS = float4(cout.Pos_ws, cout.FogFactor); \\\n    vout.NormalWS = cout.Normal_ws;\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/Macros.fxh",
    "content": "//-----------------------------------------------------------------------------\n// Macros.fxh\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n\n#define TECHNIQUE_SM2(name, vsname, psname ) \\\n\ttechnique name { pass { \\\n                            VertexShader = compile vs_4_0_level_9_1 vsname(); \\\n                            PixelShader  = compile ps_4_0_level_9_1 psname(); \\\n                          } }\n\n#define TECHNIQUE_SM3(name, vsname, psname ) \\\n\ttechnique name { pass { \\\n                            VertexShader = compile vs_4_0_level_9_3 vsname(); \\\n                            PixelShader = compile ps_4_0_level_9_3 psname(); \\\n                          } }\n\n\n#ifdef __KNIFX__\n\n\n// HLSL Shader Model 4.0 macros (for targeting KNI)\n\n#define _vs(r)\n#define _ps(r)\n#define _cb(r)\n\n#else\n\n\n// HLSL Shader Model 2.0 & 3.0 macros (for targeting XNA)\n\n#define _vs(r)  : register(vs, r)\n#define _ps(r)  : register(ps, r)\n#define _cb(r)\n\n#endif\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/Microsoft_Permissive_License.rtf",
    "content": "{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff1\\deff0\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1033\\deflangfe1033\\themelang1033\\themelangfe0\\themelangcs0{\\fonttbl{\\f0\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f1\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\n{\\f34\\fbidi \\froman\\fcharset1\\fprq2{\\*\\panose 02040503050406030204}Cambria Math;}{\\f36\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria;}{\\f38\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604030504040204}Tahoma;}\n{\\f40\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604030504040204}Verdana;}{\\flomajor\\f31500\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\n{\\fdbmajor\\f31501\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\fhimajor\\f31502\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria;}\n{\\fbimajor\\f31503\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\flominor\\f31504\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\n{\\fdbminor\\f31505\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\fhiminor\\f31506\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020f0502020204030204}Calibri;}\n{\\fbiminor\\f31507\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f41\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f42\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}\n{\\f44\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f45\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f46\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\f47\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}\n{\\f48\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\f49\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}{\\f51\\fbidi \\fswiss\\fcharset238\\fprq2 Arial CE;}{\\f52\\fbidi \\fswiss\\fcharset204\\fprq2 Arial Cyr;}\n{\\f54\\fbidi \\fswiss\\fcharset161\\fprq2 Arial Greek;}{\\f55\\fbidi \\fswiss\\fcharset162\\fprq2 Arial Tur;}{\\f56\\fbidi \\fswiss\\fcharset177\\fprq2 Arial (Hebrew);}{\\f57\\fbidi \\fswiss\\fcharset178\\fprq2 Arial (Arabic);}\n{\\f58\\fbidi \\fswiss\\fcharset186\\fprq2 Arial Baltic;}{\\f59\\fbidi \\fswiss\\fcharset163\\fprq2 Arial (Vietnamese);}{\\f401\\fbidi \\froman\\fcharset238\\fprq2 Cambria CE;}{\\f402\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}\n{\\f404\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\f405\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}{\\f408\\fbidi \\froman\\fcharset186\\fprq2 Cambria Baltic;}{\\f421\\fbidi \\fswiss\\fcharset238\\fprq2 Tahoma CE;}\n{\\f422\\fbidi \\fswiss\\fcharset204\\fprq2 Tahoma Cyr;}{\\f424\\fbidi \\fswiss\\fcharset161\\fprq2 Tahoma Greek;}{\\f425\\fbidi \\fswiss\\fcharset162\\fprq2 Tahoma Tur;}{\\f426\\fbidi \\fswiss\\fcharset177\\fprq2 Tahoma (Hebrew);}\n{\\f427\\fbidi \\fswiss\\fcharset178\\fprq2 Tahoma (Arabic);}{\\f428\\fbidi \\fswiss\\fcharset186\\fprq2 Tahoma Baltic;}{\\f429\\fbidi \\fswiss\\fcharset163\\fprq2 Tahoma (Vietnamese);}{\\f430\\fbidi \\fswiss\\fcharset222\\fprq2 Tahoma (Thai);}\n{\\f441\\fbidi \\fswiss\\fcharset238\\fprq2 Verdana CE;}{\\f442\\fbidi \\fswiss\\fcharset204\\fprq2 Verdana Cyr;}{\\f444\\fbidi \\fswiss\\fcharset161\\fprq2 Verdana Greek;}{\\f445\\fbidi \\fswiss\\fcharset162\\fprq2 Verdana Tur;}\n{\\f448\\fbidi \\fswiss\\fcharset186\\fprq2 Verdana Baltic;}{\\f449\\fbidi \\fswiss\\fcharset163\\fprq2 Verdana (Vietnamese);}{\\flomajor\\f31508\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}\n{\\flomajor\\f31509\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\flomajor\\f31511\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\flomajor\\f31512\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}\n{\\flomajor\\f31513\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\flomajor\\f31514\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\flomajor\\f31515\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}\n{\\flomajor\\f31516\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}{\\fdbmajor\\f31518\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\fdbmajor\\f31519\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}\n{\\fdbmajor\\f31521\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\fdbmajor\\f31522\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\fdbmajor\\f31523\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}\n{\\fdbmajor\\f31524\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\fdbmajor\\f31525\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\fdbmajor\\f31526\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}\n{\\fhimajor\\f31528\\fbidi \\froman\\fcharset238\\fprq2 Cambria CE;}{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}\n{\\fhimajor\\f31535\\fbidi \\froman\\fcharset186\\fprq2 Cambria Baltic;}{\\fbimajor\\f31538\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\fbimajor\\f31539\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}\n{\\fbimajor\\f31541\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\fbimajor\\f31542\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\fbimajor\\f31543\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}\n{\\fbimajor\\f31544\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\fbimajor\\f31545\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\fbimajor\\f31546\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}\n{\\flominor\\f31548\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\flominor\\f31549\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\flominor\\f31551\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}\n{\\flominor\\f31552\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\flominor\\f31553\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\flominor\\f31554\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}\n{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}{\\fdbminor\\f31558\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}\n{\\fdbminor\\f31559\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\fdbminor\\f31561\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\fdbminor\\f31562\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}\n{\\fdbminor\\f31563\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\fdbminor\\f31564\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\fdbminor\\f31565\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}\n{\\fdbminor\\f31566\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}{\\fhiminor\\f31568\\fbidi \\fswiss\\fcharset238\\fprq2 Calibri CE;}{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}\n{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}{\\fhiminor\\f31575\\fbidi \\fswiss\\fcharset186\\fprq2 Calibri Baltic;}\n{\\fbiminor\\f31578\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\fbiminor\\f31579\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\fbiminor\\f31581\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}\n{\\fbiminor\\f31582\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\fbiminor\\f31583\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\fbiminor\\f31584\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}\n{\\fbiminor\\f31585\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\fbiminor\\f31586\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;\\red0\\green255\\blue255;\\red0\\green255\\blue0;\n\\red255\\green0\\blue255;\\red255\\green0\\blue0;\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;\\red128\\green128\\blue0;\\red128\\green128\\blue128;\n\\red192\\green192\\blue192;}{\\*\\defchp }{\\*\\defpap \\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 }\\noqfpromote {\\stylesheet{\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \n\\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\sqformat \\spriority0 Normal;}{\\s1\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\outlinelevel0\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \n\\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 \\slink15 \\sqformat \\spriority9 heading 1;}{\\s2\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\outlinelevel1\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \n\\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 \\slink16 \\sqformat \\spriority9 heading 2;}{\\*\\cs10 \\additive \\ssemihidden Default Paragraph Font;}{\\*\n\\ts11\\tsrowd\\trftsWidthB3\\trpaddl108\\trpaddr108\\trpaddfl3\\trpaddft3\\trpaddfb3\\trpaddfr3\\trcbpat1\\trcfpat1\\tblind0\\tblindtype3\\tscellwidthfts0\\tsvertalt\\tsbrdrt\\tsbrdrl\\tsbrdrb\\tsbrdrr\\tsbrdrdgl\\tsbrdrdgr\\tsbrdrh\\tsbrdrv \n\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs20\\alang1025 \\ltrch\\fcs0 \\fs20\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\snext11 \\ssemihidden \\sunhideused \\sqformat Normal Table;}{\\*\\cs15 \n\\additive \\rtlch\\fcs1 \\ab\\af0\\afs32 \\ltrch\\fcs0 \\b\\f36\\fs32\\kerning32 \\sbasedon10 \\slink1 \\slocked \\spriority9 Heading 1 Char;}{\\*\\cs16 \\additive \\rtlch\\fcs1 \\ab\\ai\\af0\\afs28 \\ltrch\\fcs0 \\b\\i\\f36\\fs28 \\sbasedon10 \\slink2 \\slocked \\spriority9 \nHeading 2 Char;}{\\s17\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af38\\afs16\\alang1025 \\ltrch\\fcs0 \\f38\\fs16\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext17 \\slink18 \\ssemihidden \\sunhideused \\styrsid7424395 Balloon Text;}{\\*\\cs18 \\additive \\rtlch\\fcs1 \\af38\\afs16 \\ltrch\\fcs0 \\f38\\fs16 \\sbasedon10 \\slink17 \\slocked \\ssemihidden \\styrsid7424395 Balloon Text Char;}{\\*\\cs19 \\additive \n\\rtlch\\fcs1 \\af0\\afs16 \\ltrch\\fcs0 \\fs16 \\sbasedon10 \\ssemihidden \\sunhideused \\styrsid4538388 annotation reference;}{\\s20\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs20\\alang1025 \\ltrch\\fcs0 \n\\f1\\fs20\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext20 \\slink21 \\ssemihidden \\sunhideused \\styrsid4538388 annotation text;}{\\*\\cs21 \\additive \\rtlch\\fcs1 \\af1 \\ltrch\\fcs0 \\f1 \n\\sbasedon10 \\slink20 \\slocked \\ssemihidden \\styrsid4538388 Comment Text Char;}{\\s22\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af1\\afs20\\alang1025 \\ltrch\\fcs0 \\b\\f1\\fs20\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon20 \\snext20 \\slink23 \\ssemihidden \\sunhideused \\styrsid4538388 annotation subject;}{\\*\\cs23 \\additive \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\b\\f1 \\sbasedon21 \\slink22 \\slocked \\ssemihidden \\styrsid4538388 Comment Subject Char;}}{\\*\\rsidtbl \\rsid213160\n\\rsid284417\\rsid417145\\rsid481196\\rsid551334\\rsid723397\\rsid786968\\rsid1382437\\rsid1390003\\rsid1521043\\rsid1530955\\rsid1708989\\rsid1783212\\rsid1903779\\rsid2431884\\rsid3165084\\rsid3416120\\rsid3419781\\rsid3754103\\rsid3768194\\rsid3831520\\rsid4538130\n\\rsid4538388\\rsid4552277\\rsid4680449\\rsid4729674\\rsid4865270\\rsid4987534\\rsid5128131\\rsid5186068\\rsid5864350\\rsid6186044\\rsid6311778\\rsid6384507\\rsid6434687\\rsid6561471\\rsid6910344\\rsid6947552\\rsid7033180\\rsid7424395\\rsid7682010\\rsid7690850\\rsid7744081\n\\rsid8151618\\rsid8196281\\rsid8198206\\rsid8342723\\rsid8350925\\rsid8722561\\rsid8852349\\rsid8934457\\rsid8944153\\rsid9573035\\rsid9635349\\rsid9638545\\rsid9724918\\rsid10044820\\rsid10095979\\rsid10228618\\rsid10449644\\rsid10494075\\rsid11166278\\rsid11166751\n\\rsid11285353\\rsid11366513\\rsid11494815\\rsid11932529\\rsid12061202\\rsid12533699\\rsid12536400\\rsid12916885\\rsid13264736\\rsid13322831\\rsid13440556\\rsid13455614\\rsid13597357\\rsid13768671\\rsid14097590\\rsid14157399\\rsid14229900\\rsid14305025\\rsid14314735\n\\rsid14436896\\rsid14565916\\rsid14572556\\rsid14688892\\rsid14752433\\rsid14904394\\rsid15086147\\rsid15749945\\rsid15814398\\rsid15927751\\rsid16071312\\rsid16126175\\rsid16279402\\rsid16391569\\rsid16404661\\rsid16452939\\rsid16537688\\rsid16606866\\rsid16674896}\n{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\\mlMargin0\\mrMargin0\\mdefJc1\\mwrapIndent1440\\mintLim0\\mnaryLim1}{\\info{\\title Microsoft Permissive License (Ms-PL)}{\\author Jonr}{\\operator Dean Johnson}{\\creatim\\yr2007\\mo2\\dy23\\hr15\\min10}\n{\\revtim\\yr2007\\mo2\\dy23\\hr15\\min10}{\\printim\\yr2006\\mo9\\dy28\\hr8\\min46}{\\version2}{\\edmins1}{\\nofpages1}{\\nofwords404}{\\nofchars2221}{\\*\\company Microsoft}{\\nofcharsws2620}{\\vern32859}{\\*\\saveprevpict}}{\\*\\userprops {\\propname _NewReviewCycle}\\proptype30\n{\\staticval }}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}{\\xmlns2 urn:schemas-microsoft-com:office:smarttags}}\\paperw12240\\paperh15840\\margl1440\\margr1440\\margt1440\\margb1440\\gutter0\\ltrsect \n\\widowctrl\\ftnbj\\aenddoc\\trackmoves0\\trackformatting1\\donotembedsysfont0\\relyonvml0\\donotembedlingdata1\\grfdocevents0\\validatexml0\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\\showxmlerrors0\\hyphcaps0\\horzdoc\\dghspace120\\dgvspace120\n\\dghorigin1701\\dgvorigin1984\\dghshow0\\dgvshow3\\jcompress\\viewkind1\\viewscale100\\splytwnine\\ftnlytwnine\\htmautsp\\useltbaln\\alntblind\\lytcalctblwd\\lyttblrtgr\\lnbrkrule\\nobrkwrptbl\\snaptogridincell\\allowfieldendsel\\wrppunct\\asianbrkrule\\rsidroot10494075\n\\newtblstyruls\\nogrowautofit\\utinl \\fet0{\\*\\wgrffmtfilter 2450}\\ilfomacatclnup0\\ltrpar \\sectd \\ltrsect\\linex0\\sectdefaultcl\\sftnbj {\\*\\pnseclvl1\\pnucrm\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl2\\pnucltr\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}\n{\\*\\pnseclvl3\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxta )}}{\\*\\pnseclvl5\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}\n{\\pntxta )}}{\\*\\pnseclvl7\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\\pard\\plain \\ltrpar\n\\s1\\ql \\li0\\ri0\\sb180\\nowidctlpar\\wrapdefault\\faauto\\outlinelevel0\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af1\\afs31 \\ltrch\\fcs0 \n\\fs31\\cf1\\kerning36\\insrsid10494075\\charrsid14688892 Microsoft}{\\rtlch\\fcs1 \\af1\\afs31 \\ltrch\\fcs0 \\fs31\\cf1\\kerning36\\insrsid10494075  Permissive}{\\rtlch\\fcs1 \\af1\\afs31 \\ltrch\\fcs0 \\fs31\\cf1\\kerning36\\insrsid14688892  }{\\rtlch\\fcs1 \\af1\\afs31 \n\\ltrch\\fcs0 \\fs31\\cf1\\kerning36\\insrsid10494075 License (Ms-PL}{\\rtlch\\fcs1 \\af1\\afs31 \\ltrch\\fcs0 \\fs31\\cf1\\kerning36\\insrsid4552277 )}{\\rtlch\\fcs1 \\af1\\afs31 \\ltrch\\fcs0 \\fs31\\cf1\\kerning36\\insrsid10494075 \n\\par }\\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sl336\\slmult1\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab\\af40\\afs17 \\ltrch\\fcs0 \n\\b\\f40\\fs17\\insrsid10494075 \n\\par This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\n\\par }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid6910344 \n\\par }\\pard\\plain \\ltrpar\\s2\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\outlinelevel1\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab\\af40\\afs23 \\ltrch\\fcs0 \n\\b\\f40\\fs23\\insrsid10494075 1. Definitions\n\\par }\\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sl336\\slmult1\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid10494075 The terms \\'93reproduce,\\'94 \\'93reproduction}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid7744081 ,}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 \\'94 }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid551334 \\'93derivative works,\\'94}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid7744081\\charrsid7744081  }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 and \\'93distribution\\'94 have the same meaning here as under \n{\\*\\xmlopen\\xmlns2{\\factoidname country-region}}{\\*\\xmlopen\\xmlns2{\\factoidname place}}U.S.{\\*\\xmlclose}{\\*\\xmlclose} copyright law.\n\\par }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid12536400 A \\'93contribution\\'94 is the original software}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid4865270 ,}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid12536400  }{\\rtlch\\fcs1 \n\\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid11932529 or}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid12536400  any additions or changes to the software.\n\\par }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid551334 A \\'93c}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid551334\\charrsid551334 ontributor\\'94 }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid12536400 is}{\\rtlch\\fcs1 \\af40\\afs17 \n\\ltrch\\fcs0 \\f40\\fs17\\insrsid12536400\\charrsid551334  }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid551334\\charrsid551334 any person that }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid12536400 \ndistributes its contribution under this license.}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 \n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0\\pararsid14229900 {\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid4729674\\delrsid4729674  }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 \\'93Licensed patents\n\\'94 }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid12536400 are }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid3831520 a contributor\\rquote s }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 patent claims }{\\rtlch\\fcs1 \n\\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid3831520 that }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 read directly on }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid3831520 its contribution.}{\\rtlch\\fcs1 \\af1 \\ltrch\\fcs0 \n\\insrsid14229900\\charrsid14229900 \n\\par }\\pard\\plain \\ltrpar\\s2\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\outlinelevel1\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab\\af40\\afs23 \\ltrch\\fcs0 \n\\b\\f40\\fs23\\insrsid5186068 \n\\par }{\\rtlch\\fcs1 \\ab\\af40\\afs23 \\ltrch\\fcs0 \\b\\f40\\fs23\\insrsid10494075 2. Grant of Rights\n\\par }\\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sl336\\slmult1\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid10494075 (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid3754103 each contributor }{\\rtlch\\fcs1 \\af40\\afs17 \n\\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid3754103 its contribution}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid10494075 , prepare derivative works of }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid3754103 its contribution}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid12536400 ,}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid10494075  and distribute }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid3754103 its contribution}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075  or any derivative works that you create.\n\\par (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid9724918 each contributor }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid10494075 grants you a non-exclusive, worldwide, royalty-free license under }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid15814398 its }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 licensed patents\n to make, have made, use, sell, offer for sale, }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid1390003 import, }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 and/or otherwise dispose of }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid8944153 its contribution in }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 the software or derivative works of }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid8944153 the contribution in }{\\rtlch\\fcs1 \\af40\\afs17 \n\\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 the software.\n\\par }\\pard\\plain \\ltrpar\\s2\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\outlinelevel1\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab\\af40\\afs23 \\ltrch\\fcs0 \n\\b\\f40\\fs23\\insrsid5186068 \n\\par }{\\rtlch\\fcs1 \\ab\\af40\\afs23 \\ltrch\\fcs0 \\b\\f40\\fs23\\insrsid10494075 3. Conditions and Limitations\n\\par }\\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sl336\\slmult1\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\f1\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid1530955  }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 (A) No Trademark License- This license does not grant you rights to use }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid1708989 any contributors\\rquote  }{\n\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 name, logo, or trademarks.\n\\par (B) If you }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid8934457 bring a patent claim against }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10095979 any contributor}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 \n over patents that you }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid6947552 claim }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid7682010 are }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid6947552 infringe}{\\rtlch\\fcs1 \n\\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid7682010 d by}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075  the software, your }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid7682010 patent }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid10494075 license}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid7682010  from such contributor}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075  to the software ends automatically.\n\\par (C) If you distribute }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid3165084 any portion of }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 \nthe software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\n\\par (D) If you distribute }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid15749945 any portion of the }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 software in source code form}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid14904394 ,}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075  you may do so only under this license}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid6384507  }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid14904394 by including }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 a complete copy of this license with your distribution}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid6384507 .}{\\rtlch\\fcs1 \\af40\\afs17 \n\\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075  }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid6384507 I}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 f you distribute }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid15749945 \nany portion of }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 the software in compiled or object code form}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid16452939 ,}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 \n you may only do so under a license that complies with this license.\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sl336\\slmult1\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0\\pararsid14572556 {\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 (E) The software is licensed \\'93as-is.\\'94 You bear the risk of using it. }{\n\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid284417 The contributors }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 \ngive no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid1783212 the contributors }{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \\f40\\fs17\\insrsid10494075 exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.}{\\rtlch\\fcs1 \\af40\\afs17 \\ltrch\\fcs0 \n\\f40\\fs17\\insrsid10494075\\charrsid14572556 \n\\par }{\\*\\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8\n72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7\n2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b\n44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7\n065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000\n00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08\n84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc\n52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353\nbd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468\n656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c\n070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7\n29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65\n312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8\na5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04\n98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c\n94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471\n7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671\n9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1\ne4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5\n193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1\n17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2\n8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6\n6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a\n668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847\nbd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e\n16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b\n5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0\n8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2\nc00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966\n0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b\n7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb\n9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0\n088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf\n8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26\nade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0\n28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6\n345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93\nb65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30\n254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74\n68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24\n51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198\n720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528\na2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000\n000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000\n002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468\n656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000\n00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000\n00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000}\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\n{\\*\\latentstyles\\lsdstimax267\\lsdlockeddef0\\lsdsemihiddendef1\\lsdunhideuseddef1\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 2;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 3;\n\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 4;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 5;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 6;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 7;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 8;\n\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 9;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 1;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 2;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 3;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 4;\n\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 5;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 6;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 7;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 8;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 toc 9;\n\\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority59 \\lsdlocked0 Table Grid;\n\\lsdunhideused0 \\lsdlocked0 Placeholder Text;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 1;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\\lsdunhideused0 \\lsdlocked0 Revision;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 1;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 1;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 2;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 2;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 2;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 3;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 3;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 3;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 4;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 4;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 4;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 5;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 5;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 5;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 6;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 6;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 6;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdpriority37 \\lsdlocked0 Bibliography;\n\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;}}{\\*\\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nfffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000d070\na7c59f57c701feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000\n00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/SkinnedEffect.fx",
    "content": "//-----------------------------------------------------------------------------\n// SkinnedEffect.fx\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n#include \"Macros.fxh\"\n\n#define SKINNED_EFFECT_MAX_BONES   72\n\n\nTexture2D<float4> Texture : register(t0);\nsampler TextureSampler : register(s0);\n\n\ncbuffer Parameters : register(b0)\n{\n    float4 DiffuseColor                         _vs(c0)  _ps(c1)  _cb(c0);\n    float3 EmissiveColor                        _vs(c1)  _ps(c2)  _cb(c1);\n    float3 SpecularColor                        _vs(c2)  _ps(c3)  _cb(c2);\n    float  SpecularPower                        _vs(c3)  _ps(c4)  _cb(c2.w);\n\n    float3 DirLight0Direction                   _vs(c4)  _ps(c5)  _cb(c3);\n    float3 DirLight0DiffuseColor                _vs(c5)  _ps(c6)  _cb(c4);\n    float3 DirLight0SpecularColor               _vs(c6)  _ps(c7)  _cb(c5);\n\n    float3 DirLight1Direction                   _vs(c7)  _ps(c8)  _cb(c6);\n    float3 DirLight1DiffuseColor                _vs(c8)  _ps(c9)  _cb(c7);\n    float3 DirLight1SpecularColor               _vs(c9)  _ps(c10) _cb(c8);\n\n    float3 DirLight2Direction                   _vs(c10) _ps(c11) _cb(c9);\n    float3 DirLight2DiffuseColor                _vs(c11) _ps(c12) _cb(c10);\n    float3 DirLight2SpecularColor               _vs(c12) _ps(c13) _cb(c11);\n\n    float3 EyePosition                          _vs(c13) _ps(c14) _cb(c12);\n\n    float3 FogColor                                      _ps(c0)  _cb(c13);\n    float4 FogVector                            _vs(c14)          _cb(c14);\n\n    float4x4 World                              _vs(c19)          _cb(c15);\n    float3x3 WorldInverseTranspose              _vs(c23)          _cb(c19);\n    \n    float4x3 Bones[SKINNED_EFFECT_MAX_BONES]    _vs(c26)          _cb(c22);\n\n\n    float4x4 WorldViewProj                      _vs(c15)          _cb(c0);\n};\n\n\n#include \"Structures.fxh\"\n#include \"Common.fxh\"\n#include \"Lighting.fxh\"\n\n\nvoid Skin(inout VSInputNmTxWeights vin, uniform int boneCount)\n{\n    float4x3 skinning = 0;\n\n    [unroll]\n    for (int i = 0; i < boneCount; i++)\n    {\n        skinning += Bones[vin.Indices[i]] * vin.Weights[i];\n    }\n\n    vin.Position.xyz = mul(vin.Position, skinning);\n    vin.Normal = mul(vin.Normal, (float3x3)skinning);\n}\n\n\n// Vertex shader: vertex lighting, one bone.\nVSOutputTxFog VSSkinnedVertexLightingOneBone(VSInputNmTxWeights vin)\n{\n    VSOutputTxFog vout;\n    \n    Skin(vin, 1);\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: vertex lighting, two bones.\nVSOutputTxFog VSSkinnedVertexLightingTwoBones(VSInputNmTxWeights vin)\n{\n    VSOutputTxFog vout;\n    \n    Skin(vin, 2);\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: vertex lighting, four bones.\nVSOutputTxFog VSSkinnedVertexLightingFourBones(VSInputNmTxWeights vin)\n{\n    VSOutputTxFog vout;\n    \n    Skin(vin, 4);\n    \n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: one light, one bone.\nVSOutputTxFog VSSkinnedOneLightOneBone(VSInputNmTxWeights vin)\n{\n    VSOutputTxFog vout;\n    \n    Skin(vin, 1);\n\n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: one light, two bones.\nVSOutputTxFog VSSkinnedOneLightTwoBones(VSInputNmTxWeights vin)\n{\n    VSOutputTxFog vout;\n    \n    Skin(vin, 2);\n\n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: one light, four bones.\nVSOutputTxFog VSSkinnedOneLightFourBones(VSInputNmTxWeights vin)\n{\n    VSOutputTxFog vout;\n    \n    Skin(vin, 4);\n\n    CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1);\n    SetCommonVSOutputParamsFog;\n    \n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: pixel lighting, one bone.\nVSOutputPixelLightingTx VSSkinnedPixelLightingOneBone(VSInputNmTxWeights vin)\n{\n    VSOutputPixelLightingTx vout;\n    \n    Skin(vin, 1);\n\n    CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal);\n    SetCommonVSOutputParamsPixelLightingFog;\n    \n    vout.Diffuse = float4(1, 1, 1, DiffuseColor.a);\n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: pixel lighting, two bones.\nVSOutputPixelLightingTx VSSkinnedPixelLightingTwoBones(VSInputNmTxWeights vin)\n{\n    VSOutputPixelLightingTx vout;\n    \n    Skin(vin, 2);\n\n    CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal);\n    SetCommonVSOutputParamsPixelLightingFog;\n    \n    vout.Diffuse = float4(1, 1, 1, DiffuseColor.a);\n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Vertex shader: pixel lighting, four bones.\nVSOutputPixelLightingTx VSSkinnedPixelLightingFourBones(VSInputNmTxWeights vin)\n{\n    VSOutputPixelLightingTx vout;\n    \n    Skin(vin, 4);\n\n    CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal);\n    SetCommonVSOutputParamsPixelLightingFog;\n    \n    vout.Diffuse = float4(1, 1, 1, DiffuseColor.a);\n    vout.TexCoord = vin.TexCoord;\n\n    return vout;\n}\n\n\n// Pixel shader: vertex lighting.\nfloat4 PSSkinnedVertexLightingFog(VSOutputTxFog pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    AddSpecular(color, pin.Specular.rgb);\n    ApplyFog(color, pin.Specular.w);\n    \n    return color;\n}\n\n\n// Pixel shader: vertex lighting, no fog.\nfloat4 PSSkinnedVertexLighting(VSOutputTxFog pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    AddSpecular(color, pin.Specular.rgb);\n    \n    return color;\n}\n\n\n// Pixel shader: pixel lighting.\nfloat4 PSSkinnedPixelLighting(VSOutputPixelLightingTx pin) : SV_Target0\n{\n    float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse;\n    \n    float3 eyeVector = normalize(EyePosition - pin.PositionWS.xyz);\n    float3 worldNormal = normalize(pin.NormalWS);\n    \n    ColorPair lightResult = ComputeLights(eyeVector, worldNormal, 3);\n    \n    color.rgb *= lightResult.Diffuse;\n\n    AddSpecular(color, lightResult.Specular);\n    ApplyFog(color, pin.PositionWS.w);\n    \n    return color;\n}\n\n\n// NOTE: The order of the techniques here are\n// defined to match the indexing in SkinnedEffect.cs.\n\nTECHNIQUE_SM2( SkinnedEffect_VertexLighting_OneBone,\t\tVSSkinnedVertexLightingOneBone,\t\tPSSkinnedVertexLighting );\nTECHNIQUE_SM2( SkinnedEffect_VertexLighting_OneBone_Fog,\tVSSkinnedVertexLightingOneBone,\t\tPSSkinnedVertexLightingFog );\nTECHNIQUE_SM2( SkinnedEffect_VertexLighting_TwoBone,\t\tVSSkinnedVertexLightingTwoBones,\tPSSkinnedVertexLighting );\nTECHNIQUE_SM2( SkinnedEffect_VertexLighting_TwoBone_Fog,\tVSSkinnedVertexLightingTwoBones,\tPSSkinnedVertexLightingFog );\nTECHNIQUE_SM2( SkinnedEffect_VertexLighting_FourBone,\t\tVSSkinnedVertexLightingFourBones,\tPSSkinnedVertexLighting );\nTECHNIQUE_SM2( SkinnedEffect_VertexLighting_FourBone_Fog,\tVSSkinnedVertexLightingFourBones,\tPSSkinnedVertexLightingFog );\n\nTECHNIQUE_SM2( SkinnedEffect_OneLight_OneBone,\t\t\tVSSkinnedOneLightOneBone,\tPSSkinnedVertexLighting );\nTECHNIQUE_SM2( SkinnedEffect_OneLight_OneBone_Fog,\t\tVSSkinnedOneLightOneBone,\tPSSkinnedVertexLightingFog );\nTECHNIQUE_SM2( SkinnedEffect_OneLight_TwoBone,\t\t\tVSSkinnedOneLightTwoBones,\tPSSkinnedVertexLighting );\nTECHNIQUE_SM2( SkinnedEffect_OneLight_TwoBone_Fog,\t\tVSSkinnedOneLightTwoBones,\tPSSkinnedVertexLightingFog );\nTECHNIQUE_SM2( SkinnedEffect_OneLight_FourBone,\t\t\tVSSkinnedOneLightFourBones,\tPSSkinnedVertexLighting );\nTECHNIQUE_SM2( SkinnedEffect_OneLight_FourBone_Fog,\t\tVSSkinnedOneLightFourBones,\tPSSkinnedVertexLightingFog );\n\nTECHNIQUE_SM2( SkinnedEffect_PixelLighting_OneBone,\t\t\tVSSkinnedPixelLightingOneBone,\t\tPSSkinnedPixelLighting );\nTECHNIQUE_SM2( SkinnedEffect_PixelLighting_OneBone_Fog,\t\tVSSkinnedPixelLightingOneBone,\t\tPSSkinnedPixelLighting );\nTECHNIQUE_SM2( SkinnedEffect_PixelLighting_TwoBone,\t\t\tVSSkinnedPixelLightingTwoBones,\t\tPSSkinnedPixelLighting );\nTECHNIQUE_SM2( SkinnedEffect_PixelLighting_TwoBone_Fog,\t\tVSSkinnedPixelLightingTwoBones,\t\tPSSkinnedPixelLighting );\nTECHNIQUE_SM2( SkinnedEffect_PixelLighting_FourBone,\t\tVSSkinnedPixelLightingFourBones,\tPSSkinnedPixelLighting );\nTECHNIQUE_SM2( SkinnedEffect_PixelLighting_FourBone_Fog,\tVSSkinnedPixelLightingFourBones,\tPSSkinnedPixelLighting );\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/SpriteEffect.fx",
    "content": "//-----------------------------------------------------------------------------\n// SpriteEffect.fx\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n#include \"Macros.fxh\"\n\n\nTexture2D<float4> Texture : register(t0);\nsampler TextureSampler : register(s0);\n\n\ncbuffer Parameters : register(b0)\n{\n\n    float4x4 MatrixTransform    _vs(c0) _cb(c0);\n};\n\n\nstruct VSOutputFog\n{\n\tfloat4 position\t\t: SV_Position;\n\tfloat4 color\t\t: COLOR0;\n    float2 texCoord\t\t: TEXCOORD0;\n};\n\nVSOutputFog SpriteVertexShader(\tfloat4 position\t: POSITION0,\n\t\t\t\t\t\t\t\tfloat4 color\t: COLOR0,\n\t\t\t\t\t\t\t\tfloat2 texCoord\t: TEXCOORD0)\n{\n\tVSOutputFog output;\n    output.position = mul(position, MatrixTransform);\n\toutput.color = color;\n\toutput.texCoord = texCoord;\n\treturn output;\n}\n\n\nfloat4 SpritePixelShader(VSOutputFog input) : SV_Target0\n{\n    return Texture.Sample(TextureSampler, input.texCoord) * input.color;\n}\n\nTECHNIQUE_SM2( SpriteBatch, SpriteVertexShader, SpritePixelShader );\n"
  },
  {
    "path": "Platforms/Graphics/Effect/Shaders/Structures.fxh",
    "content": "//-----------------------------------------------------------------------------\n// Structurs.fxh\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n\n\n// Vertex shader input structures.\n\nstruct VSInput\n{\n    float4 Position : POSITION;\n};\n\nstruct VSInputVc\n{\n    float4 Position : POSITION;\n    float4 Color    : COLOR;\n};\n\nstruct VSInputTx\n{\n    float4 Position : POSITION;\n    float2 TexCoord : TEXCOORD;\n};\n\nstruct VSInputTxVc\n{\n    float4 Position : POSITION;\n    float2 TexCoord : TEXCOORD;\n    float4 Color    : COLOR;\n};\n\nstruct VSInputNm\n{\n    float4 Position : POSITION;\n    float3 Normal   : NORMAL;\n};\n\nstruct VSInputNmVc\n{\n    float4 Position : POSITION;\n    float3 Normal   : NORMAL;\n    float4 Color    : COLOR;\n};\n\nstruct VSInputNmTx\n{\n    float4 Position : POSITION;\n    float3 Normal   : NORMAL;\n    float2 TexCoord : TEXCOORD;\n};\n\nstruct VSInputNmTxVc\n{\n    float4 Position : POSITION;\n    float3 Normal   : NORMAL;\n    float2 TexCoord : TEXCOORD;\n    float4 Color    : COLOR;\n};\n\nstruct VSInputTx2\n{\n    float4 Position  : POSITION0;\n    float2 TexCoord  : TEXCOORD0;\n    float2 TexCoord2 : TEXCOORD1;\n};\n\nstruct VSInputTx2Vc\n{\n    float4 Position  : POSITION0;\n    float2 TexCoord  : TEXCOORD0;\n    float2 TexCoord2 : TEXCOORD1;\n    float4 Color     : COLOR;\n};\n\nstruct VSInputNmTxWeights\n{\n    float4 Position : POSITION0;\n    float3 Normal   : NORMAL0;\n    float2 TexCoord : TEXCOORD0;\n    uint4  Indices  : BLENDINDICES0;\n    float4 Weights  : BLENDWEIGHT0;\n};\n\n\n\n// Vertex shader output structures.\n\nstruct VSOutput\n{\n    float4 PositionPS : SV_Position;\n    float4 Diffuse    : COLOR0;\n};\n\nstruct VSOutputFog\n{\n    float4 PositionPS : SV_Position;\n    float4 Diffuse    : COLOR0;\n    float4 Specular   : COLOR1;\n};\n\nstruct VSOutputTx\n{\n    float4 PositionPS : SV_Position;\n    float4 Diffuse    : COLOR0;\n    float2 TexCoord   : TEXCOORD0;\n};\n\nstruct VSOutputTxFog\n{\n    float4 PositionPS : SV_Position;\n    float4 Diffuse    : COLOR0;\n    float4 Specular   : COLOR1;\n    float2 TexCoord   : TEXCOORD0;\n};\n\nstruct VSOutputPixelLighting\n{\n    float4 PositionPS : SV_Position;\n    float4 PositionWS : TEXCOORD0;\n    float3 NormalWS   : TEXCOORD1;\n    float4 Diffuse    : COLOR0;\n};\n\nstruct VSOutputPixelLightingTx\n{\n    float4 PositionPS : SV_Position;\n    float2 TexCoord   : TEXCOORD0;\n    float4 PositionWS : TEXCOORD1;\n    float3 NormalWS   : TEXCOORD2;\n    float4 Diffuse    : COLOR0;\n};\n\nstruct VSOutputTx2\n{\n    float4 PositionPS : SV_Position;\n    float4 Diffuse    : COLOR0;\n    float2 TexCoord   : TEXCOORD0;\n    float2 TexCoord2  : TEXCOORD1;\n};\n\nstruct VSOutputTx2Fog\n{\n    float4 PositionPS : SV_Position;\n    float4 Diffuse    : COLOR0;\n    float4 Specular   : COLOR1;\n    float2 TexCoord   : TEXCOORD0;\n    float2 TexCoord2  : TEXCOORD1;\n};\n\nstruct VSOutputTxEnvMap\n{\n    float4 PositionPS : SV_Position;\n    float4 Diffuse    : COLOR0;\n    float4 Specular   : COLOR1;\n    float2 TexCoord   : TEXCOORD0;\n    float3 EnvCoord   : TEXCOORD1;\n};\n\n"
  },
  {
    "path": "Platforms/Graphics/RenderTargetSwapChain.OpenGL.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// A RenderTarget used for rendering to a swap chain.\n    /// </summary>\n    /// <remarks>\n    /// This is an extension and not part of stock XNA.\n    /// </remarks>\n    internal class RenderTargetSwapChain : RenderTarget2D\n    {\n        internal ConcreteRenderTargetSwapChain _strategyRenderTargetSwapChain;\n        public readonly PresentInterval PresentInterval;\n\n        public RenderTargetSwapChain(GraphicsDevice graphicsDevice,\n                                     IntPtr glTextureHandle,\n                                     int width, int height,\n                                     bool mipMap,\n                                     SurfaceFormat preferredFormat,\n                                     DepthFormat preferredDepthFormat,\n                                     int preferredMultiSampleCount,\n                                     RenderTargetUsage usage,\n                                     PresentInterval presentInterval)\n            : base(graphicsDevice, width, height, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), false, 1, true)\n        {\n\n            SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat);\n            _strategyRenderTargetSwapChain = new ConcreteRenderTargetSwapChain(((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.MainContext).Strategy, width, height, mipMap, usage,\n                glTextureHandle, presentInterval,\n                format, preferredDepthFormat, preferredMultiSampleCount);\n            _strategyRenderTarget2D = _strategyRenderTargetSwapChain;\n            _strategyTexture2D = _strategyRenderTarget2D;\n            _strategyTexture = _strategyTexture2D;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D);\n\n            this.PresentInterval = presentInterval;\n        }\n\n        /// <summary>\n        /// Displays the contents of the active back buffer to the screen.\n        /// </summary>\n        public void Present()\n        {\n            _strategyRenderTargetSwapChain.Present();\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Graphics/SwapChainRenderTarget.DirectX.cs",
    "content": "﻿\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// A swap chain used for rendering to a secondary GameWindow.\n    /// </summary>\n    /// <remarks>\n    /// This is an extension and not part of stock XNA.\n    /// It is currently implemented for Windows and DirectX only.\n    /// </remarks>\n    public class SwapChainRenderTarget : RenderTarget2D\n    {\n        internal ConcreteRenderTargetSwapChain _strategyRenderTargetSwapChain;\n        public readonly PresentInterval PresentInterval;\n\n        public SwapChainRenderTarget(GraphicsDevice graphicsDevice, IntPtr windowHandle, int width, int height)\n            : this(graphicsDevice, windowHandle, width, height,\n                   false, SurfaceFormat.Bgra32, DepthFormat.Depth24, 0, RenderTargetUsage.DiscardContents,\n                   PresentInterval.Default)\n        {\n        }\n\n        public SwapChainRenderTarget(GraphicsDevice graphicsDevice,\n                                     IntPtr windowHandle,\n                                     int width, int height,\n                                     bool mipMap,\n                                     SurfaceFormat preferredFormat,\n                                     DepthFormat preferredDepthFormat,\n                                     int preferredMultiSampleCount,\n                                     RenderTargetUsage usage,\n                                     PresentInterval presentInterval)\n            : base(graphicsDevice, width, height, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), false, 1, true)\n        {\n            SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat);\n            _strategyRenderTargetSwapChain = new ConcreteRenderTargetSwapChain(((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.MainContext).Strategy, width, height, mipMap, usage,\n                windowHandle, presentInterval,\n                format, preferredDepthFormat, preferredMultiSampleCount);\n            _strategyRenderTarget2D = _strategyRenderTargetSwapChain;\n            _strategyTexture2D = _strategyRenderTarget2D;\n            _strategyTexture = _strategyTexture2D;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D);\n\n            this.PresentInterval = presentInterval;\n        }\n\n        // TODO: We need to expose the other Present() overloads\n        // for passing source/dest rectangles.\n\n        /// <summary>\n        /// Displays the contents of the active back buffer to the screen.\n        /// </summary>\n        public void Present()\n        {\n            _strategyRenderTargetSwapChain.Present();\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "Platforms/ILLink.Descriptors.xml",
    "content": "<linker>\n  <assembly fullname=\"Kni.Platform\" >\n    <type fullname=\"Microsoft.Xna.Platform.Audio.ConcreteAudioFactory\" >\n      <method name=\".ctor\" />\n    </type>\n    <type fullname=\"Microsoft.Xna.Platform.ConcreteTitleContainerFactory\" >\n      <method name=\".ctor\" />\n    </type>\n    <type fullname=\"Microsoft.Xna.Platform.Devices.ConcreteDevicesFactory\">\n      <method name=\".ctor\" />\n    </type>\n    <type fullname=\"Microsoft.Xna.Platform.ConcreteGameFactory\">\n      <method name=\".ctor\" />\n    </type>\n    <type fullname=\"Microsoft.Xna.Platform.Graphics.ConcreteGraphicsFactory\" >\n      <method name=\".ctor\" />\n    </type>\n    <type fullname=\"Microsoft.Xna.Platform.Input.ConcreteInputFactory\">\n      <method name=\".ctor\" />\n    </type>\n    <type fullname=\"Microsoft.Xna.Platform.Media.ConcreteMediaFactory\">\n      <method name=\".ctor\" />\n    </type>\n    <type fullname=\"Microsoft.Xna.Platform.Storage.ConcreteStorageFactory\">\n      <method name=\".ctor\" />\n    </type>\n    <type fullname=\"Microsoft.Xna.Platform.XR.ConcreteXRFactory\">\n      <method name=\".ctor\" />\n    </type>\n  </assembly>\n</linker>\n\n"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteGamePad.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    // TODO: move GamePadDevice to Framework.Input library\n    public abstract class GamePadDevice\n    {\n        public GamePadCapabilities Capabilities;\n\n        public GamePadDevice()\n        {\n\n        }\n    }\n\n    public sealed class ConcreteGamePad : GamePadStrategy\n    {\n        const int MaxNumberOfGamePads = 4;\n\n        // we will support up to 4 local controllers\n        private readonly AndroidGamePadDevice[] _gamepads = new AndroidGamePadDevice[MaxNumberOfGamePads];\n        // support the back button when we don't have a gamepad connected\n        internal bool Back;\n\n        // Default & SDL Xbox Controller dead zones\n        // Based on the XInput constants\n        public override float LeftThumbDeadZone { get { return 0.24f; } }\n        public override float RightThumbDeadZone { get { return 0.265f; } }\n\n        public override int PlatformGetMaxNumberOfGamePads()\n        {\n            return MaxNumberOfGamePads;\n        }\n\n        public override GamePadCapabilities PlatformGetCapabilities(int index)\n        {\n            AndroidGamePadDevice gamePad = _gamepads[index];\n            if (gamePad != null)\n                return gamePad.Capabilities;\n\n            // we need to add the default \"no gamepad connected but the user hit back\"\n            // behaviour here\n            return base.CreateGamePadCapabilities(\n                    gamePadType: GamePadType.Unknown,\n                    displayName: null,\n                    identifier: null,\n                    isConnected: false,\n                    buttons: Buttons.Back,\n                    hasLeftVibrationMotor: false,\n                    hasRightVibrationMotor: false,\n                    hasVoiceSupport: false\n                );\n        }\n\n        public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            AndroidGamePadDevice gamePad = _gamepads[index];\n            GamePadState state = new GamePadState();\n            if (gamePad != null && gamePad._isConnected)\n            {\n                // Check if the device was disconnected\n                InputDevice dvc = InputDevice.GetDevice(gamePad._deviceId);\n                if (dvc == null)\n                {\n                    Android.Util.Log.Debug(\"MonoGame\", \"Detected controller disconnect [\" + index + \"] \");\n                    gamePad._isConnected = false;\n                    return state;\n                }\n\n                GamePadThumbSticks thumbSticks = base.CreateGamePadThumbSticks(gamePad._leftStick, gamePad._rightStick, leftDeadZoneMode, rightDeadZoneMode);\n\n                state = base.CreateGamePadState(\n                    thumbSticks,\n                    new GamePadTriggers(gamePad._leftTrigger, gamePad._rightTrigger),\n                    new GamePadButtons(gamePad._buttons),\n                     base.CreateGamePadDPad(gamePad._buttons));\n            }\n            // we need to add the default \"no gamepad connected but the user hit back\"\n            // behaviour here\n            else\n            {\n                if (index == 0 && Back)\n                {\n                    // Consume state\n                    state = base.CreateGamePadState(new GamePadThumbSticks(), new GamePadTriggers(), new GamePadButtons(Buttons.Back), new GamePadDPad(),\n                        isConnected: false);\n                }\n                else\n                    state = new GamePadState();\n            }\n\n            return state;\n        }\n\n        public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            AndroidGamePadDevice gamePad = _gamepads[index];\n            if (gamePad == null)\n                return false;\n\n            Android.OS.Vibrator vibrator = gamePad._device.Vibrator;\n            if (!vibrator.HasVibrator)\n                return false;\n            vibrator.Vibrate(500);\n            return true;\n        }\n\n        internal AndroidGamePadDevice GetGamePad(InputDevice device)\n        {\n            if (device == null || (device.Sources & InputSourceType.Gamepad) != InputSourceType.Gamepad)\n                return null;\n\n            int firstDisconnectedPadId = -1;\n            for (int i = 0; i < _gamepads.Length; i++)\n            {\n                AndroidGamePadDevice pad = _gamepads[i];\n                if (pad != null && pad._isConnected && pad._deviceId == device.Id)\n                {\n                    return pad;\n                }\n                else if (pad != null && !pad._isConnected && pad._descriptor == device.Descriptor)\n                {\n                    Android.Util.Log.Debug(\"MonoGame\", \"Found previous controller [\" + i + \"] \" + device.Name);\n                    pad._deviceId = device.Id;\n                    pad._isConnected = true;\n                    return pad;\n                }\n                else if (pad == null)\n                {\n                    Android.Util.Log.Debug(\"MonoGame\", \"Found new controller [\" + i + \"] \" + device.Name);\n                    GamePadCapabilities caps = CapabilitiesOfDevice(device);\n                    pad = new AndroidGamePadDevice(device, caps);\n                    _gamepads[i] = pad;\n                    return pad;\n                }\n                else if (!pad._isConnected && firstDisconnectedPadId < 0)\n                {\n                    firstDisconnectedPadId = i;\n                }\n            }\n\n            // If we get here, we failed to find a game pad or an empty slot to create one.\n            // If we're holding onto a disconnected pad, overwrite it with this one\n            if (firstDisconnectedPadId >= 0)\n            {\n                Android.Util.Log.Debug(\"MonoGame\", \"Found new controller in place of disconnected controller [\" + firstDisconnectedPadId + \"] \" + device.Name);\n                GamePadCapabilities caps = CapabilitiesOfDevice(device);\n                AndroidGamePadDevice pad = new AndroidGamePadDevice(device, caps);\n                _gamepads[firstDisconnectedPadId] = pad;\n                return pad;\n            }\n\n            // All pad slots are taken so ignore further devices.\n            return null;\n        }\n\n        internal bool OnKeyDown(Keycode keyCode, KeyEvent e)\n        {\n            AndroidGamePadDevice gamePad = GetGamePad(e.Device);\n            if (gamePad == null)\n                return false;\n\n            gamePad.DPadButtons |= e.KeyCode == Keycode.DpadLeft ||\n                                   e.KeyCode == Keycode.DpadUp || \n                                   e.KeyCode == Keycode.DpadRight || \n                                   e.KeyCode == Keycode.DpadDown;\n            gamePad._buttons |= ButtonForKeyCode(keyCode);\n\n            return true;\n        }\n\n        internal bool OnKeyUp(Keycode keyCode, KeyEvent e)\n        {\n            AndroidGamePadDevice gamePad = GetGamePad(e.Device);\n            if (gamePad == null)\n                return false;\n\n            gamePad._buttons &= ~ButtonForKeyCode(keyCode);\n            return true;\n        }\n\n        internal bool OnGenericMotionEvent(MotionEvent e)\n        {\n            AndroidGamePadDevice gamePad = GetGamePad(e.Device);\n            if (gamePad == null)\n                return false;\n\n            if (e.Action != MotionEventActions.Move)\n                return false;\n\n            gamePad._leftStick = new Vector2(e.GetAxisValue(Axis.X), -e.GetAxisValue(Axis.Y));\n            gamePad._rightStick = new Vector2(e.GetAxisValue(Axis.Z), -e.GetAxisValue(Axis.Rz));\n            gamePad._leftTrigger = e.GetAxisValue(Axis.Ltrigger);\n            gamePad._rightTrigger = e.GetAxisValue(Axis.Rtrigger);\n            if (gamePad._leftTrigger == 0)\n                gamePad._leftTrigger = e.GetAxisValue(Axis.Brake);\n            if (gamePad._rightTrigger == 0)\n                gamePad._rightTrigger = e.GetAxisValue(Axis.Gas);\n\n            if(!gamePad.DPadButtons)\n            {\n                if(e.GetAxisValue(Axis.HatX) < 0)\n                {\n                    gamePad._buttons |= Buttons.DPadLeft;\n                    gamePad._buttons &= ~Buttons.DPadRight;\n                }\n                else if(e.GetAxisValue(Axis.HatX) > 0)\n                {\n                    gamePad._buttons &= ~Buttons.DPadLeft;\n                    gamePad._buttons |= Buttons.DPadRight;\n                }\n                else\n                {\n                    gamePad._buttons &= ~Buttons.DPadLeft;\n                    gamePad._buttons &= ~Buttons.DPadRight;\n                }\n\n                if(e.GetAxisValue(Axis.HatY) < 0)\n                {\n                    gamePad._buttons |= Buttons.DPadUp;\n                    gamePad._buttons &= ~Buttons.DPadDown;\n                }\n                else if(e.GetAxisValue(Axis.HatY) > 0)\n                {\n                    gamePad._buttons &= ~Buttons.DPadUp;\n                    gamePad._buttons |= Buttons.DPadDown;\n                }\n                else\n                {\n                    gamePad._buttons &= ~Buttons.DPadUp;\n                    gamePad._buttons &= ~Buttons.DPadDown;\n                }\n            }\n\n            return true;\n        }\n\n        private Buttons ButtonForKeyCode(Keycode keyCode)\n        {\n            switch (keyCode)\n            {\n                case Keycode.ButtonA:\n                    return Buttons.A;\n                case Keycode.ButtonX:\n                    return Buttons.X;\n                case Keycode.ButtonY:\n                    return Buttons.Y;\n                case Keycode.ButtonB:\n                    return Buttons.B;\n\n                case Keycode.ButtonL1:\n                    return Buttons.LeftShoulder;\n                case Keycode.ButtonL2:\n                    return Buttons.LeftTrigger;\n                case Keycode.ButtonR1:\n                    return Buttons.RightShoulder;\n                case Keycode.ButtonR2:\n                    return Buttons.RightTrigger;\n\n                case Keycode.ButtonThumbl:\n                    return Buttons.LeftStick;\n                case Keycode.ButtonThumbr:\n                    return Buttons.RightStick;\n\n                case Keycode.DpadUp:\n                    return Buttons.DPadUp;\n                case Keycode.DpadDown:\n                    return Buttons.DPadDown;\n                case Keycode.DpadLeft:\n                    return Buttons.DPadLeft;\n                case Keycode.DpadRight:\n                    return Buttons.DPadRight;\n\n                case Keycode.ButtonStart:\n                    return Buttons.Start;\n                case Keycode.Back:\n                    return Buttons.Back;\n\n                default:\n                    return 0;\n            }\n        }\n\n        internal void Initialize()\n        {\n            //Iterate and 'connect' any detected gamepads\n            foreach (int deviceId in InputDevice.GetDeviceIds())\n            {\n                GetGamePad(InputDevice.GetDevice(deviceId));\n            }\n        }\n\n        private GamePadCapabilities CapabilitiesOfDevice(InputDevice device)\n        {\n            //--\n            GamePadType gamePadType = GamePadType.Unknown;\n            string displayName = String.Empty;\n            string identifier = String.Empty;\n            bool isConnected;\n            Buttons buttons = (Buttons)0;\n            bool hasLeftVibrationMotor = false;\n            bool hasRightVibrationMotor = false;\n            bool hasVoiceSupport = false;\n            //--\n\n            isConnected = true;\n            gamePadType = GamePadType.GamePad;\n            hasLeftVibrationMotor = hasRightVibrationMotor = device.Vibrator.HasVibrator;\n\n            // build out supported inputs from what the gamepad exposes\n            int[] keyMap = new int[16];\n            keyMap[0] = (int)Keycode.ButtonA;\n            keyMap[1] = (int)Keycode.ButtonB;\n            keyMap[2] = (int)Keycode.ButtonX;\n            keyMap[3] = (int)Keycode.ButtonY;\n\n            keyMap[4] = (int)Keycode.ButtonThumbl;\n            keyMap[5] = (int)Keycode.ButtonThumbr;\n\n            keyMap[6] = (int)Keycode.ButtonL1;\n            keyMap[7] = (int)Keycode.ButtonR1;\n            keyMap[8] = (int)Keycode.ButtonL2;\n            keyMap[9] = (int)Keycode.ButtonR2;\n\n            keyMap[10] = (int)Keycode.DpadDown;\n            keyMap[11] = (int)Keycode.DpadLeft;\n            keyMap[12] = (int)Keycode.DpadRight;\n            keyMap[13] = (int)Keycode.DpadUp;\n\n            keyMap[14] = (int)Keycode.ButtonStart;\n            keyMap[15] = (int)Keycode.Back;\n\n            // get a bool[] with indices matching the keyMap\n            bool[] hasMap = new bool[16];\n            // HasKeys() was defined in Kitkat / API19 / Android 4.4\n            if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Kitkat)\n            {\n                Keycode[] keyMap2 = new Keycode[keyMap.Length];\n                for (int i = 0; i < keyMap.Length; i++)\n                    keyMap2[i] = (Keycode)keyMap[i];\n                hasMap = KeyCharacterMap.DeviceHasKeys(keyMap2);\n            }\n            else\n            {\n                hasMap = device.HasKeys(keyMap);\n            }\n\n            buttons |= hasMap[0] ? Buttons.A : (Buttons)0;\n            buttons |= hasMap[1] ? Buttons.B : (Buttons)0;\n            buttons |= hasMap[2] ? Buttons.X : (Buttons)0;\n            buttons |= hasMap[3] ? Buttons.Y : (Buttons)0;\n\n            // we only check for the thumb button to see if we have 2 thumbsticks\n            // if ever a controller doesn't support buttons on the thumbsticks,\n            // this will need fixing\n            buttons |= hasMap[4] ? Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight : (Buttons)0;\n            buttons |= hasMap[4] ? Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp : (Buttons)0;\n            buttons |= hasMap[5] ? Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight : (Buttons)0;\n            buttons |= hasMap[5] ? Buttons.RightThumbstickDown | Buttons.RightThumbstickUp : (Buttons)0;\n\n            buttons |= hasMap[6] ? Buttons.LeftShoulder : (Buttons)0;\n            buttons |= hasMap[7] ? Buttons.RightShoulder : (Buttons)0;\n            buttons |= hasMap[8] ? Buttons.LeftTrigger : (Buttons)0;\n            buttons |= hasMap[9] ? Buttons.RightTrigger : (Buttons)0;\n\n            buttons |= hasMap[10] ? Buttons.DPadDown : (Buttons)0;\n            buttons |= hasMap[11] ? Buttons.DPadLeft : (Buttons)0;\n            buttons |= hasMap[12] ? Buttons.DPadRight : (Buttons)0;\n            buttons |= hasMap[13] ? Buttons.DPadUp : (Buttons)0;\n\n            buttons |= hasMap[14] ? Buttons.Start : (Buttons)0;\n            buttons |= hasMap[15] ? Buttons.Back : (Buttons)0;\n\n            return base.CreateGamePadCapabilities(\n                    gamePadType: gamePadType,\n                    displayName: displayName,\n                    identifier: identifier,\n                    isConnected: isConnected,\n                    buttons: buttons,\n                    hasLeftVibrationMotor: hasLeftVibrationMotor,\n                    hasRightVibrationMotor: hasRightVibrationMotor,\n                    hasVoiceSupport: hasVoiceSupport\n                );\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteGamePadDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    internal class AndroidGamePadDevice : GamePadDevice\n    {\n        public InputDevice _device;\n        public int _deviceId;\n        public string _descriptor;\n        public bool _isConnected;\n        public bool DPadButtons;\n\n        public Buttons _buttons;\n        public float _leftTrigger, _rightTrigger;\n        public Vector2 _leftStick, _rightStick;\n\n        public AndroidGamePadDevice(InputDevice device, GamePadCapabilities caps)\n            : base()\n        {\n            _device = device;\n            _deviceId = device.Id;\n            _descriptor = device.Descriptor;\n            _isConnected = true;\n            Capabilities = caps;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteInputFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteInputFactory : InputFactory\n    {\n\n        public override GamePadStrategy CreateGamePadStrategy()\n        {\n            return new ConcreteGamePad();\n        }\n\n        public override JoystickStrategy CreateJoystickStrategy()\n        {\n            return new ConcreteJoystick();\n        }\n\n        public override KeyboardStrategy CreateKeyboardStrategy()\n        {\n            return new ConcreteKeyboard();\n        }\n\n        public override MouseStrategy CreateMouseStrategy()\n        {\n            return new ConcreteMouse();\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            return new ConcreteMouseCursor(cursorType);\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy)\n        {\n            return new ConcreteMouseCursor(data, w, h, originx, originy);\n        }\n\n        public override TouchPanelStrategy CreateTouchPanelStrategy()\n        {\n            return new ConcreteTouchPanel();\n        }\n\n        public override KeyboardInputStrategy CreateKeyboardInputStrategy()\n        {\n            return new ConcreteKeyboardInput();\n        }\n\n        public override MessageBoxStrategy CreateMessageBoxStrategy()\n        {\n            return new ConcreteMessageBox();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteJoystick.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteJoystick : JoystickStrategy\n    {\n        public override bool PlatformIsSupported\n        {\n            get { return false; }\n        }\n\n        public override int PlatformLastConnectedIndex\n        {\n            get { return -1; }\n        }\n\n        public override JoystickCapabilities PlatformGetCapabilities(int index)\n        {\n            return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0);\n        }\n\n        public override JoystickState PlatformGetState(int index)\n        {\n            return JoystickStrategy.DefaultJoystickState;\n        }\n\n\n        public override void PlatformGetState(int index, ref JoystickState joystickState)\n        {\n\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteKeyboard.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Input;\nusing DroidKeycode = Android.Views.Keycode;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboard : KeyboardStrategy\n    {\n        private List<Keys> _keys;\n        private readonly IDictionary<DroidKeycode, Keys> _keyMap;\n\n        public ConcreteKeyboard()\n        {\n            _keys = new List<Keys>();\n            _keyMap = LoadKeyMap();\n        }\n\n        public override KeyboardState PlatformGetState()\n        {\n            return base.CreateKeyboardState(_keys);\n        }\n\n        internal bool KeyDown(DroidKeycode keyCode)\n        {\n            Keys key;\n            if (_keyMap.TryGetValue(keyCode, out key) && key != Keys.None)\n            {\n                if (!_keys.Contains(key))\n                    _keys.Add(key);\n                return true;\n            }\n            return false;\n        }\n\n        internal bool KeyUp(DroidKeycode keyCode)\n        {\n            Keys key;\n            if (_keyMap.TryGetValue(keyCode, out key) && key != Keys.None)\n            {\n                if (_keys.Contains(key))\n                    _keys.Remove(key);\n                return true;\n            }\n            return false;\n        }\n\n        private IDictionary<DroidKeycode, Keys> LoadKeyMap()\n        {\n            // create a map for every Keycode and default it to none so that every possible key is mapped\n            Dictionary<DroidKeycode, Keys> maps = Enum.GetValues(typeof(DroidKeycode))\n                .Cast<DroidKeycode>()\n                .ToDictionary(key => key, key => Keys.None);\n\n            // then update it with the actual mappings\n            maps[DroidKeycode.DpadLeft] = Keys.Left;\n            maps[DroidKeycode.DpadRight] = Keys.Right;\n            maps[DroidKeycode.DpadUp] = Keys.Up;\n            maps[DroidKeycode.DpadDown] = Keys.Down;\n            maps[DroidKeycode.DpadCenter] = Keys.Enter;\n            maps[DroidKeycode.Num0] = Keys.D0;\n            maps[DroidKeycode.Num1] = Keys.D1;\n            maps[DroidKeycode.Num2] = Keys.D2;\n            maps[DroidKeycode.Num3] = Keys.D3;\n            maps[DroidKeycode.Num4] = Keys.D4;\n            maps[DroidKeycode.Num5] = Keys.D5;\n            maps[DroidKeycode.Num6] = Keys.D6;\n            maps[DroidKeycode.Num7] = Keys.D7;\n            maps[DroidKeycode.Num8] = Keys.D8;\n            maps[DroidKeycode.Num9] = Keys.D9;\n            maps[DroidKeycode.A] = Keys.A;\n            maps[DroidKeycode.B] = Keys.B;\n            maps[DroidKeycode.C] = Keys.C;\n            maps[DroidKeycode.D] = Keys.D;\n            maps[DroidKeycode.E] = Keys.E;\n            maps[DroidKeycode.F] = Keys.F;\n            maps[DroidKeycode.G] = Keys.G;\n            maps[DroidKeycode.H] = Keys.H;\n            maps[DroidKeycode.I] = Keys.I;\n            maps[DroidKeycode.J] = Keys.J;\n            maps[DroidKeycode.K] = Keys.K;\n            maps[DroidKeycode.L] = Keys.L;\n            maps[DroidKeycode.M] = Keys.M;\n            maps[DroidKeycode.N] = Keys.N;\n            maps[DroidKeycode.O] = Keys.O;\n            maps[DroidKeycode.P] = Keys.P;\n            maps[DroidKeycode.Q] = Keys.Q;\n            maps[DroidKeycode.R] = Keys.R;\n            maps[DroidKeycode.S] = Keys.S;\n            maps[DroidKeycode.T] = Keys.T;\n            maps[DroidKeycode.U] = Keys.U;\n            maps[DroidKeycode.V] = Keys.V;\n            maps[DroidKeycode.W] = Keys.W;\n            maps[DroidKeycode.X] = Keys.X;\n            maps[DroidKeycode.Y] = Keys.Y;\n            maps[DroidKeycode.Z] = Keys.Z;\n            maps[DroidKeycode.Space] = Keys.Space;\n            maps[DroidKeycode.Escape] = Keys.Escape;\n            maps[DroidKeycode.Back] = Keys.Back;\n            maps[DroidKeycode.Home] = Keys.Home;\n            maps[DroidKeycode.Enter] = Keys.Enter;\n            maps[DroidKeycode.Period] = Keys.OemPeriod;\n            maps[DroidKeycode.Comma] = Keys.OemComma;\n            maps[DroidKeycode.Menu] = Keys.Help;\n            maps[DroidKeycode.Search] = Keys.BrowserSearch;\n            maps[DroidKeycode.VolumeUp] = Keys.VolumeUp;\n            maps[DroidKeycode.VolumeDown] = Keys.VolumeDown;\n            maps[DroidKeycode.MediaPause] = Keys.Pause;\n            maps[DroidKeycode.MediaPlayPause] = Keys.MediaPlayPause;\n            maps[DroidKeycode.MediaStop] = Keys.MediaStop;\n            maps[DroidKeycode.MediaNext] = Keys.MediaNextTrack;\n            maps[DroidKeycode.MediaPrevious] = Keys.MediaPreviousTrack;\n            maps[DroidKeycode.Mute] = Keys.VolumeMute;\n            maps[DroidKeycode.AltLeft] = Keys.LeftAlt;\n            maps[DroidKeycode.AltRight] = Keys.RightAlt;\n            maps[DroidKeycode.ShiftLeft] = Keys.LeftShift;\n            maps[DroidKeycode.ShiftRight] = Keys.RightShift;\n            maps[DroidKeycode.Tab] = Keys.Tab;\n            maps[DroidKeycode.Del] = Keys.Delete;\n            maps[DroidKeycode.Minus] = Keys.OemMinus;\n            maps[DroidKeycode.LeftBracket] = Keys.OemOpenBrackets;\n            maps[DroidKeycode.RightBracket] = Keys.OemCloseBrackets;\n            maps[DroidKeycode.Backslash] = Keys.OemBackslash;\n            maps[DroidKeycode.Semicolon] = Keys.OemSemicolon;\n            maps[DroidKeycode.PageUp] = Keys.PageUp;\n            maps[DroidKeycode.PageDown] = Keys.PageDown;\n            maps[DroidKeycode.CtrlLeft] = Keys.LeftControl;\n            maps[DroidKeycode.CtrlRight] = Keys.RightControl;\n            maps[DroidKeycode.CapsLock] = Keys.CapsLock;\n            maps[DroidKeycode.ScrollLock] = Keys.Scroll;\n            maps[DroidKeycode.NumLock] = Keys.NumLock;\n            maps[DroidKeycode.Insert] = Keys.Insert;\n            maps[DroidKeycode.F1] = Keys.F1;\n            maps[DroidKeycode.F2] = Keys.F2;\n            maps[DroidKeycode.F3] = Keys.F3;\n            maps[DroidKeycode.F4] = Keys.F4;\n            maps[DroidKeycode.F5] = Keys.F5;\n            maps[DroidKeycode.F6] = Keys.F6;\n            maps[DroidKeycode.F7] = Keys.F7;\n            maps[DroidKeycode.F8] = Keys.F8;\n            maps[DroidKeycode.F9] = Keys.F9;\n            maps[DroidKeycode.F10] = Keys.F10;\n            maps[DroidKeycode.F11] = Keys.F11;\n            maps[DroidKeycode.F12] = Keys.F12;\n            maps[DroidKeycode.NumpadDivide] = Keys.Divide;\n            maps[DroidKeycode.NumpadMultiply] = Keys.Multiply;\n            maps[DroidKeycode.NumpadSubtract] = Keys.Subtract;\n            maps[DroidKeycode.NumpadAdd] = Keys.Add;\n\n            return maps;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteKeyboardInput.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Android.App;\nusing Android.Content;\nusing Android.Widget;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboardInput : KeyboardInputStrategy\n    {\n        private TaskCompletionSource<string> tcs;\n        private AlertDialog alert;\n\n        public override Task<string> PlatformShow(string title, string description, string defaultText, bool usePasswordMode)\n        {\n            tcs = new TaskCompletionSource<string>();\n\n            AndroidGameWindow.Activity.RunOnUiThread(() =>\n            {\n                alert = new AlertDialog.Builder(AndroidGameWindow.Activity).Create();\n\n                alert.SetTitle(title);\n                alert.SetMessage(description);\n\n                EditText input = new EditText(AndroidGameWindow.Activity) { Text = defaultText };\n\n                if (defaultText != null)\n                    input.SetSelection(defaultText.Length);\n\n                if (usePasswordMode)\n                    input.InputType = Android.Text.InputTypes.ClassText | Android.Text.InputTypes.TextVariationPassword;\n\n                alert.SetView(input);\n\n                alert.SetButton((int)DialogButtonType.Positive, \"Ok\", (sender, args) =>\n                {\n                    if (!tcs.Task.IsCompleted)\n                        tcs.SetResult(input.Text);\n                });\n\n                alert.SetButton((int)DialogButtonType.Negative, \"Cancel\", (sender, args) =>\n                {\n                    if (!tcs.Task.IsCompleted)\n                        tcs.SetResult(null);\n                });\n\n                alert.CancelEvent += (sender, args) =>\n                {\n                    if (!tcs.Task.IsCompleted)\n                        tcs.SetResult(null);\n                };\n\n                alert.Show();\n            });\n\n            return tcs.Task;\n        }\n\n        public override void PlatformCancel(string result)\n        {\n            alert.Dismiss();\n            tcs.SetResult(result);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteMessageBox.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework;\nusing Android.App;\nusing Android.Content;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMessageBox : MessageBoxStrategy\n    {\n        private TaskCompletionSource<int?> tcs;\n        private AlertDialog alert;\n\n        public override Task<int?> PlatformShow(string title, string description, List<string> buttons)\n        {\n            tcs = new TaskCompletionSource<int?>();\n            AndroidGameWindow.Activity.RunOnUiThread(() =>\n            {\n                alert = new AlertDialog.Builder(AndroidGameWindow.Activity).Create();\n\n                alert.SetTitle(title);\n                alert.SetMessage(description);\n\n                alert.SetButton((int)DialogButtonType.Positive, buttons[0], (sender, args) =>\n                {\n                    if (!tcs.Task.IsCompleted)\n                        tcs.SetResult(0);\n                });\n\n                if (buttons.Count > 1)\n                {\n                    alert.SetButton((int)DialogButtonType.Negative, buttons[1], (sender, args) =>\n                    {\n                        if (!tcs.Task.IsCompleted)\n                            tcs.SetResult(1);\n                    });\n                }\n\n                if (buttons.Count > 2)\n                {\n                    alert.SetButton((int)DialogButtonType.Neutral, buttons[2], (sender, args) =>\n                    {\n                        if (!tcs.Task.IsCompleted)\n                            tcs.SetResult(2);\n                    });\n                }\n\n                alert.CancelEvent += (sender, args) =>\n                {\n                    if (!tcs.Task.IsCompleted)\n                        tcs.SetResult(null);\n                };\n\n                alert.Show();\n            });\n\n            return tcs.Task;\n        }\n\n        public override void PlatformCancel(int? result)\n        {\n            alert.Dismiss();\n            tcs.SetResult(result);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteMouse.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouse : MouseStrategy\n    {\n        private IntPtr _wndHandle = IntPtr.Zero;\n\n        private Point _pos;\n        private int _scrollX, _scrollY;\n        private int _rawX, _rawY;\n        private ButtonState _leftButton, _rightButton, _middleButton;\n        private ButtonState _xButton1, _xButton2;\n\n\n        public override IntPtr PlatformGetWindowHandle()\n        {\n            return _wndHandle;\n        }\n\n        public override void PlatformSetWindowHandle(IntPtr windowHandle)\n        {\n            _wndHandle = windowHandle;\n        }\n\n        public override bool PlatformIsRawInputAvailable()\n        {\n            return false;\n        }\n\n        public override MouseState PlatformGetState()\n        {\n            MouseState mouseState = new MouseState(\n                    x: _pos.X, y: _pos.Y,\n                    scrollWheel: _scrollY, horizontalScrollWheel: _scrollX,\n                    rawX: _rawX, rawY: _rawY,\n                    leftButton: _leftButton,\n                    middleButton: _middleButton,\n                    rightButton: _rightButton,\n                    xButton1: _xButton1,\n                    xButton2: _xButton2\n                    );\n\n            return mouseState;\n        }\n\n        internal bool OnGenericMotionEvent(MotionEvent e)\n        {\n            switch (e.ActionMasked)\n            {\n                case MotionEventActions.HoverMove:\n                    {\n                        _pos.X = (int)e.GetX();\n                        _pos.Y = (int)e.GetY();\n                    }\n                    return true;\n\n                case MotionEventActions.Scroll:\n                    {\n                        _pos.X = (int)e.GetX();\n                        _pos.Y = (int)e.GetY();\n\n                        float vScroll = e.GetAxisValue(Axis.Vscroll);\n                        float hScroll = e.GetAxisValue(Axis.Hscroll);\n                        _scrollY += (int)vScroll;\n                        _scrollX += (int)hScroll;\n                    }\n                    return true;\n            }\n\n            return false;\n        }\n\n        internal bool OnTouchEvent(MotionEvent e)\n        {\n            switch (e.ActionMasked)\n            {\n                case MotionEventActions.Down:\n                case MotionEventActions.Move:\n                case MotionEventActions.Up:\n                    {\n                        MotionEventButtonState buttonState = e.ButtonState;\n\n#if !XAMARIN\n                        _leftButton   = e.IsButtonPressed(MotionEventButtonState.Primary) \n                                      ? ButtonState.Pressed : ButtonState.Released;\n                        _rightButton  = e.IsButtonPressed(MotionEventButtonState.Secondary)\n                                      ? ButtonState.Pressed : ButtonState.Released;\n                        _middleButton = e.IsButtonPressed(MotionEventButtonState.Tertiary)\n                                      ? ButtonState.Pressed : ButtonState.Released;\n#endif\n                    }\n                    return true;\n\n            }\n\n            return false;\n        }\n\n        public override void PlatformSetPosition(int x, int y)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformSetCursor(MouseCursor cursor)\n        {\n#if !XAMARIN\n            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.N)\n            {\n                if (_wndHandle != IntPtr.Zero)\n                {\n                    AndroidGameWindow droidWindow = AndroidGameWindow.FromHandle(_wndHandle);\n                    View view = droidWindow.GameView;\n\n                    PointerIcon pointerIcon = null;\n                    if (cursor != null)\n                    {\n                        pointerIcon = ((IPlatformMouseCursor)cursor).GetStrategy<ConcreteMouseCursor>().PointerIcon;\n                    }\n\n                    if (view.PointerIcon != pointerIcon)\n                        view.PointerIcon = pointerIcon;\n                }\n                return;\n            }\n#endif\n\n            if (cursor != null)\n                throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Android/ConcreteMouseCursor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\nusing Android.Content;\nusing Android.Views;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouseCursor : MouseCursorStrategy\n    {\n#if !XAMARIN\n        PointerIconType _androidCursor;\n        PointerIcon _pointerIcon;\n\n        internal PointerIcon PointerIcon\n        {\n            get\n            {\n                if (_pointerIcon == null)\n                {\n                    if (_cursorType != MouseCursorType.User)\n                    {\n                        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.N)\n                        {\n                            Context appContext = Android.App.Application.Context;\n                            _pointerIcon = PointerIcon.GetSystemIcon(appContext, _androidCursor);\n                        }\n                    }\n                    else\n                    {\n                        throw new NotImplementedException();\n                    }\n                }\n\n                return _pointerIcon;\n            }\n        }\n#endif\n\n        public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            this._cursorType = cursorType;\n            this._handle = IntPtr.Zero;\n\n#if !XAMARIN\n            _androidCursor = CursorTypeToAndroidCursor(cursorType);\n#endif\n        }\n\n#if !XAMARIN\n        private PointerIconType CursorTypeToAndroidCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.N)\n            {\n                switch (cursorType)\n                {\n                    case MouseCursorStrategy.MouseCursorType.Arrow:\n                        return PointerIconType.Arrow;\n                    case MouseCursorStrategy.MouseCursorType.IBeam:\n                        return PointerIconType.Text;\n                    case MouseCursorStrategy.MouseCursorType.Wait:\n                        return PointerIconType.Wait;\n                    case MouseCursorStrategy.MouseCursorType.Crosshair:\n                        return PointerIconType.Crosshair;\n                    case MouseCursorStrategy.MouseCursorType.WaitArrow:\n                        return PointerIconType.Arrow;\n                    case MouseCursorStrategy.MouseCursorType.SizeNWSE:\n                        return PointerIconType.TopRightDiagonalDoubleArrow;\n                    case MouseCursorStrategy.MouseCursorType.SizeNESW:\n                        return PointerIconType.TopLeftDiagonalDoubleArrow;\n                    case MouseCursorStrategy.MouseCursorType.SizeWE:\n                        return PointerIconType.HorizontalDoubleArrow;\n                    case MouseCursorStrategy.MouseCursorType.SizeNS:\n                        return PointerIconType.VerticalDoubleArrow;\n                    case MouseCursorStrategy.MouseCursorType.SizeAll:\n                        return PointerIconType.AllScroll;\n                    case MouseCursorStrategy.MouseCursorType.No:\n                        return PointerIconType.NoDrop;\n                    case MouseCursorStrategy.MouseCursorType.Hand:\n                        return PointerIconType.Hand;\n\n                    default:\n                        throw new InvalidOperationException(\"cursorType\");\n                }\n            }\n            else\n            {\n                return (PointerIconType)0;\n            }\n        }\n#endif\n\n        public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n            }\n\n            base.Dispose(dispose);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Android/Touch/ConcreteTouchPanel.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Android.Content.PM;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public sealed class ConcreteTouchPanel : TouchPanelStrategy\n    {\n\n        public override IntPtr WindowHandle\n        {\n            get { return base.WindowHandle; }\n            set { base.WindowHandle = value; }\n        }\n\n        public override int DisplayWidth\n        {\n            get { return base.DisplayWidth; }\n            set { base.DisplayWidth = value; }\n        }\n\n        public override int DisplayHeight\n        {\n            get { return base.DisplayHeight; }\n            set { base.DisplayHeight = value; }\n        }\n\n        public override DisplayOrientation DisplayOrientation\n        {\n            get { return base.DisplayOrientation; }\n            set { base.DisplayOrientation = value; }\n        }\n\n        public override GestureType EnabledGestures\n        {\n            get { return base.EnabledGestures; }\n            set { base.EnabledGestures = value; }\n        }\n\n\n        public override bool IsGestureAvailable\n        {\n            get { return base.IsGestureAvailable; }\n        }\n\n        public ConcreteTouchPanel()\n            : base()\n        {\n            // Initialize Capabilities\n            int maximumTouchCount = 0;\n            bool isConnected = false;\n            bool hasPressure = false;\n            // http://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_TOUCHSCREEN\n            PackageManager pm = AndroidGameWindow.Activity.PackageManager;\n            isConnected = pm.HasSystemFeature(PackageManager.FeatureTouchscreen);\n            if (pm.HasSystemFeature(PackageManager.FeatureTouchscreenMultitouchJazzhand))\n                maximumTouchCount = 5;\n            else if (pm.HasSystemFeature(PackageManager.FeatureTouchscreenMultitouchDistinct))\n                maximumTouchCount = 2;\n            else\n                maximumTouchCount = 1;\n\n            _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure);\n        }\n\n        public override TouchPanelCapabilities GetCapabilities()\n        {\n            return _capabilities;\n        }\n\n        public override TouchCollection GetState()\n        {\n            return base.GetState();\n        }\n\n        public override GestureSample ReadGesture()\n        {\n            return base.ReadGesture();\n        }\n\n        public override void AddPressedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = AndroidGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddPressedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddMovedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = AndroidGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddMovedEvent(nativeTouchId, position, winSize);\n            }\n        }\n    \n        public override void AddReleasedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = AndroidGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddCanceledEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = AndroidGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteGamePad.cs",
    "content": "﻿// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing nkast.Wasm.Dom;\nusing nkast.Wasm.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    // TODO: move GamePadDevice to Framework.Input library\n    public abstract class GamePadDevice\n    {\n        public GamePadCapabilities Capabilities;\n\n        public GamePadDevice()\n        {\n\n        }\n    }\n\n    public sealed class ConcreteGamePad : GamePadStrategy\n    {\n        const int MaxNumberOfGamePads = 4;\n\n        private readonly BlazorGamePadDevice[] _gamepads = new BlazorGamePadDevice[MaxNumberOfGamePads];\n\n        // map native indices -> gamepad indices (PlayerIndex)\n        private readonly Dictionary<int, int> _indicesMap = new Dictionary<int, int>();\n\n        // Default & SDL Xbox Controller dead zones\n        // Based on the XInput constants\n        public override float LeftThumbDeadZone { get { return 0.24f; } }\n        public override float RightThumbDeadZone { get { return 0.265f; } }\n\n        public ConcreteGamePad()\n        {\n            try\n            {\n                Gamepad[] gamepads = Window.Current.Navigator.GetGamepads();\n                for (int deviceIndex = 0; deviceIndex < _gamepads.Length && deviceIndex < gamepads.Length; deviceIndex++)\n                {\n                    if (_gamepads[deviceIndex] != null)\n                    {\n                        Gamepad gamepad = gamepads[deviceIndex];\n                        AddDevice(deviceIndex, gamepad);\n                    }\n                }\n\n                Window.Current.OnGamepadConnected += Window_OnGamepadConnected;\n                Window.Current.OnGamepadDisconnected += Window_OnGamepadDisconnected;\n            }\n            catch\n            {\n            }\n        }\n\n        internal void Window_OnGamepadConnected(object sender, int deviceIndex)\n        {\n            Gamepad[] gamepads = Window.Current.Navigator.GetGamepads();\n            Gamepad gamepad = gamepads[deviceIndex];\n            AddDevice(deviceIndex, gamepad);\n        }\n\n        internal void Window_OnGamepadDisconnected(object sender, int deviceIndex)\n        {\n            RemoveDevice(deviceIndex);\n        }\n\n        private void AddDevice(int deviceIndex, Gamepad gamepad)\n        {\n            if (gamepad.Mapping == \"standard\")\n            {\n                if (_indicesMap.ContainsKey(deviceIndex))\n                    return;\n\n                int index = 0;\n                while (index < MaxNumberOfGamePads && _gamepads[index] != null)\n                    index++;\n\n                if (index >= MaxNumberOfGamePads)\n                    return;\n\n                _gamepads[index] = new BlazorGamePadDevice(deviceIndex);\n                _gamepads[index].Capabilities = CreateCapabilities(gamepad);\n\n                _indicesMap[deviceIndex] = index;\n            }\n        }\n\n        private void RemoveDevice(int deviceIndex)\n        {\n            int index = -1;\n            if (_indicesMap.TryGetValue(deviceIndex, out index))\n            {\n                BlazorGamePadDevice gamepad = _gamepads[index];\n\n                _gamepads[index] = null;\n                _indicesMap.Remove(deviceIndex);\n            }\n        }\n\n        public override int PlatformGetMaxNumberOfGamePads()\n        {\n            return MaxNumberOfGamePads;\n        }\n\n        public override GamePadCapabilities PlatformGetCapabilities(int index)\n        {\n            BlazorGamePadDevice gamepadDevice = _gamepads[index];\n\n            if (gamepadDevice == null)\n                return GetDefaultCapabilities();\n\n            return gamepadDevice.Capabilities;\n        }\n\n\n        public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            BlazorGamePadDevice gamepadDevice = _gamepads[index];\n            GamePadState state = new GamePadState();\n\n            if (gamepadDevice != null)\n            {\n                Gamepad[] gamepads = Window.Current.Navigator.GetGamepads();\n                Gamepad gamepad = gamepads[gamepadDevice.DeviceIndex];\n\n                if (gamepad != null)\n                {\n                    state = CreateGamePadState(gamepad, leftDeadZoneMode, rightDeadZoneMode);\n                    return state;\n                }\n            }\n\n            state = base.CreateGamePadState(new GamePadThumbSticks(), new GamePadTriggers(), new GamePadButtons(), new GamePadDPad(),\n                    isConnected: false);\n\n            return state;\n        }\n\n        public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            BlazorGamePadDevice gamepadDevice = _gamepads[index];\n\n            if (gamepadDevice != null)\n            {\n                Gamepad[] gamepads = Window.Current.Navigator.GetGamepads();\n                Gamepad gamepad = gamepads[gamepadDevice.DeviceIndex];\n\n                if (gamepad != null)\n                {\n                    GamepadHapticActuator va = gamepad.VibrationActuator;\n                    if (va != null)\n                    {\n                        float maxMotor = Math.Max(leftMotor, rightMotor);\n\n                        bool pulseResult = va.Pulse(maxMotor, 500);\n\n                        if (pulseResult)\n                            return true;\n\n                        GamepadHapticActuatorParams actuatorParams = new GamepadHapticActuatorParams();\n                        actuatorParams.Duration = 500;\n                        actuatorParams.StrongMagnitude = maxMotor;\n\n                        bool playEffectResult = va.PlayEffect(\"dual-rumble\", actuatorParams);\n                        return playEffectResult;\n                    }\n                }\n            }\n\n            return false;\n        }\n\n        private GamePadState CreateGamePadState(Gamepad gamepad, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            GamePadState state;\n            GamepadButton[] gpbuttons = gamepad.Buttons;\n            float[] axes = gamepad.Axes;\n\n            Vector2 leftStick  = new Vector2(axes[0], -axes[1]);\n            Vector2 rightStick = new Vector2(axes[2], -axes[3]);\n\n            GamePadThumbSticks thumbSticks = base.CreateGamePadThumbSticks(leftStick, rightStick, leftDeadZoneMode, rightDeadZoneMode);\n\n            GamePadTriggers triggers = new GamePadTriggers(\n                gpbuttons[6].Value, // LeftTrigger\n                gpbuttons[7].Value  // RightTrigger\n            );\n\n            Buttons buttons = (Buttons)0;\n            if (gpbuttons[0].Pressed)\n                buttons |= Buttons.A;\n            if (gpbuttons[1].Pressed)\n                buttons |= Buttons.B;\n            if (gpbuttons[2].Pressed)\n                buttons |= Buttons.X;\n            if (gpbuttons[3].Pressed)\n                buttons |= Buttons.Y;\n            if (gpbuttons[4].Pressed)\n                buttons |= Buttons.LeftShoulder;\n            if (gpbuttons[5].Pressed)\n                buttons |= Buttons.RightShoulder;\n            if (gpbuttons[6].Pressed)\n                buttons |= Buttons.LeftTrigger;\n            if (gpbuttons[7].Pressed)\n                buttons |= Buttons.RightTrigger;\n            if (gpbuttons[8].Pressed)\n                buttons |= Buttons.Back;\n            if (gpbuttons[9].Pressed)\n                buttons |= Buttons.Start;\n            if (gpbuttons[10].Pressed)\n                buttons |= Buttons.LeftStick;\n            if (gpbuttons[11].Pressed)\n                buttons |= Buttons.RightStick;\n            if (gpbuttons[16].Pressed)\n                buttons |= Buttons.BigButton;\n\n            GamePadDPad dPad = new GamePadDPad(\n                (gpbuttons[12].Pressed) ? ButtonState.Pressed : ButtonState.Released, // DPadUp\n                (gpbuttons[13].Pressed) ? ButtonState.Pressed : ButtonState.Released, // DpadDown\n                (gpbuttons[14].Pressed) ? ButtonState.Pressed : ButtonState.Released, // DpadLeft\n                (gpbuttons[15].Pressed) ? ButtonState.Pressed : ButtonState.Released  // DpadRight\n            );\n\n            int packetNumber = gamepad.Timestamp;\n\n\n            state = base.CreateGamePadState(thumbSticks, triggers, new GamePadButtons(buttons), dPad,\n                                                       packetNumber: packetNumber);\n            return state;\n        }\n\n        private GamePadCapabilities CreateCapabilities(Gamepad gamepad)\n        {\n            //--\n            GamePadType gamePadType = GamePadType.Unknown;\n            string displayName = String.Empty;\n            string identifier = String.Empty;\n            bool isConnected = false;\n            Buttons buttons = (Buttons)0;\n            bool hasLeftVibrationMotor = false;\n            bool hasRightVibrationMotor = false;\n            bool hasVoiceSupport = false;\n            //--\n\n            {\n                displayName = gamepad.Id;\n\n                isConnected = true;\n                if (gamepad.Mapping == \"standard\")\n                    gamePadType = GamePadType.GamePad;\n                buttons |= Buttons.A;\n                buttons |= Buttons.B;\n                buttons |= Buttons.X;\n                buttons |= Buttons.Y;\n                buttons |= Buttons.LeftShoulder;\n                buttons |= Buttons.RightShoulder;\n                buttons |= Buttons.LeftTrigger;\n                buttons |= Buttons.RightTrigger;\n                buttons |= Buttons.Back;\n                buttons |= Buttons.Start;\n                buttons |= Buttons.LeftStick;\n                buttons |= Buttons.RightStick;\n                buttons |= Buttons.DPadUp;\n                buttons |= Buttons.DPadDown;\n                buttons |= Buttons.DPadLeft;\n                buttons |= Buttons.DPadRight;\n                buttons |= Buttons.BigButton;\n            }\n\n            return base.CreateGamePadCapabilities(\n                    gamePadType: gamePadType,\n                    displayName: displayName,\n                    identifier: identifier,\n                    isConnected: isConnected,\n                    buttons: buttons,\n                    hasLeftVibrationMotor: hasLeftVibrationMotor,\n                    hasRightVibrationMotor: hasRightVibrationMotor,\n                    hasVoiceSupport: hasVoiceSupport\n                );\n        }\n\n        private GamePadCapabilities GetDefaultCapabilities()\n        {\n            return base.CreateGamePadCapabilities(\n                    gamePadType: GamePadType.Unknown,\n                    displayName: null,\n                    identifier: null,\n                    isConnected: false,\n                    buttons: (Buttons)0,\n                    hasLeftVibrationMotor: false,\n                    hasRightVibrationMotor: false,\n                    hasVoiceSupport: false\n                );\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteGamePadDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing nkast.Wasm.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    internal class BlazorGamePadDevice : GamePadDevice\n    {\n        public int DeviceIndex { get; private set; }\n\n        public BlazorGamePadDevice(int deviceIndex)\n            : base()\n        {\n            DeviceIndex = deviceIndex;\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteInputFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteInputFactory : InputFactory\n    {\n\n        public override GamePadStrategy CreateGamePadStrategy()\n        {\n            return new ConcreteGamePad();\n        }\n\n        public override JoystickStrategy CreateJoystickStrategy()\n        {\n            return new ConcreteJoystick();\n        }\n\n        public override KeyboardStrategy CreateKeyboardStrategy()\n        {\n            return new ConcreteKeyboard();\n        }\n\n        public override MouseStrategy CreateMouseStrategy()\n        {\n            return new ConcreteMouse();\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            return new ConcreteMouseCursor(cursorType);\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy)\n        {\n            return new ConcreteMouseCursor(data, w, h, originx, originy);\n        }\n\n        public override TouchPanelStrategy CreateTouchPanelStrategy()\n        {\n            return new ConcreteTouchPanel();\n        }\n\n        public override KeyboardInputStrategy CreateKeyboardInputStrategy()\n        {\n            return new ConcreteKeyboardInput();\n        }\n\n        public override MessageBoxStrategy CreateMessageBoxStrategy()\n        {\n            return new ConcreteMessageBox();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteJoystick.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteJoystick : JoystickStrategy\n    {\n        public override bool PlatformIsSupported\n        {\n            get { return false; }\n        }\n\n        public override int PlatformLastConnectedIndex\n        {\n            get { return -1; }\n        }\n\n        public override JoystickCapabilities PlatformGetCapabilities(int index)\n        {\n            return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0);\n        }\n\n        public override JoystickState PlatformGetState(int index)\n        {\n            return JoystickStrategy.DefaultJoystickState;\n        }\n\n\n        public override void PlatformGetState(int index, ref JoystickState joystickState)\n        {\n\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteKeyboard.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboard : KeyboardStrategy\n    {\n        private List<Keys> _keys;\n\n        public override KeyboardState PlatformGetState()\n        {\n            return base.CreateKeyboardState(_keys);\n        }\n\n        internal void SetKeys(List<Keys> keys)\n        {\n            _keys = keys;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteKeyboardInput.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboardInput : KeyboardInputStrategy\n    {\n        public override Task<string> PlatformShow(string title, string description, string defaultText, bool usePasswordMode)\n        {\n            throw new NotImplementedException(\"KeyboardInput is not implemented on this platform.\");\n        }\n\n        public override void PlatformCancel(string result)\n        {\n            throw new NotImplementedException(\"KeyboardInput is not implemented on this platform.\");\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteMessageBox.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMessageBox : MessageBoxStrategy\n    {\n        public override Task<int?> PlatformShow(string title, string description, List<string> buttons)\n        {\n            throw new NotImplementedException(\"MessageBox is not implemented on this platform.\");\n        }\n\n        public override void PlatformCancel(int? result)\n        {\n            throw new NotImplementedException(\"MessageBox is not implemented on this platform.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteMouse.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouse : MouseStrategy\n    {\n        private IntPtr _wndHandle = IntPtr.Zero;\n        private nkast.Wasm.Dom.Window _domWindow;\n\n        private Point _pos;\n        private int _scrollX, _scrollY;\n        private int _rawX, _rawY;\n        private ButtonState _leftButton, _rightButton, _middleButton;\n\n\n        public override IntPtr PlatformGetWindowHandle()\n        {\n            return _wndHandle;\n        }\n\n        public override void PlatformSetWindowHandle(IntPtr windowHandle)\n        {\n            _wndHandle = windowHandle;\n\n            // Unregister old window\n            if (_domWindow != null)\n            {\n                _pos = default(Point);\n                _scrollX = 0;\n                _scrollY = 0;\n                _leftButton = default(ButtonState);\n                _rightButton = default(ButtonState);\n                _middleButton = default(ButtonState);\n\n                _domWindow.OnMouseMove -= OnMouseMove;\n                _domWindow.OnMouseDown -= OnMouseDown;\n                _domWindow.OnMouseUp -= OnMouseUp;\n                _domWindow.OnMouseWheel -= OnMouseWheel;\n            }\n\n            BlazorGameWindow gameWindow = BlazorGameWindow.FromHandle(windowHandle);\n            _domWindow = gameWindow.wasmWindow;\n\n            _domWindow.OnMouseMove += OnMouseMove;\n            _domWindow.OnMouseDown += OnMouseDown;\n            _domWindow.OnMouseUp += OnMouseUp;\n            _domWindow.OnMouseWheel += OnMouseWheel;\n        }\n\n        public override bool PlatformIsRawInputAvailable()\n        {\n            return false;\n        }\n\n        public override MouseState PlatformGetState()\n        {\n            MouseState mouseState = new MouseState(\n                    x: _pos.X, y: _pos.Y,\n                    scrollWheel: _scrollY, horizontalScrollWheel: _scrollX,\n                    rawX: _rawX, rawY: _rawY,\n                    leftButton: _leftButton,\n                    middleButton: _middleButton,\n                    rightButton: _rightButton,\n                    xButton1: ButtonState.Released,\n                    xButton2: ButtonState.Released\n                    );\n\n            return mouseState;\n        }\n\n        public override void PlatformSetPosition(int x, int y)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformSetCursor(MouseCursor cursor)\n        {\n            BlazorGameWindow gameWindow = BlazorGameWindow.FromHandle(_wndHandle);\n            gameWindow._canvas.Style[\"cursor\"] = ((IPlatformMouseCursor)cursor).GetStrategy<ConcreteMouseCursor>().CursorCSSPropertyValue;\n        }\n\n\n        private void OnMouseMove(object sender, int x, int y)\n        {\n            _pos.X = x;\n            _pos.Y = y;\n        }\n\n        private void OnMouseDown(object sender, int x, int y, int buttons)\n        {\n            _pos.X = x;\n            _pos.Y = y;\n            _leftButton   = ((buttons & 1) != 0) ? ButtonState.Pressed : ButtonState.Released;\n            _rightButton  = ((buttons & 2) != 0) ? ButtonState.Pressed : ButtonState.Released;\n            _middleButton = ((buttons & 4) != 0) ? ButtonState.Pressed : ButtonState.Released;\n        }\n\n        private void OnMouseUp(object sender, int x, int y, int buttons)\n        {\n            _pos.X = x;\n            _pos.Y = y;\n            _leftButton   = ((buttons & 1) != 0) ? ButtonState.Pressed : ButtonState.Released;\n            _rightButton  = ((buttons & 2) != 0) ? ButtonState.Pressed : ButtonState.Released;\n            _middleButton = ((buttons & 4) != 0) ? ButtonState.Pressed : ButtonState.Released;\n        }\n\n        public void OnMouseWheel(object sender, int deltaX, int deltaY, int deltaZ, int deltaMode)\n        {\n            _scrollX -= deltaX;\n            _scrollY -= deltaY;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Blazor/ConcreteMouseCursor.cs",
    "content": "﻿// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouseCursor : MouseCursorStrategy\n    {\n        string _cursorCSSPropertyValue;\n\n        internal string CursorCSSPropertyValue { get { return _cursorCSSPropertyValue; } }\n\n        public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            this._cursorType = cursorType;\n            this._handle = IntPtr.Zero;\n\n            _cursorCSSPropertyValue = CursorTypeToCSSPropertyValue(cursorType);\n        }\n\n        private string CursorTypeToCSSPropertyValue(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            switch (cursorType)\n            {\n                case MouseCursorStrategy.MouseCursorType.Arrow:\n                    return \"default\";\n                case MouseCursorStrategy.MouseCursorType.IBeam:\n                    return \"text\";\n                case MouseCursorStrategy.MouseCursorType.Wait:\n                    return \"wait\";\n                case MouseCursorStrategy.MouseCursorType.Crosshair:\n                    return \"crosshair\";\n                case MouseCursorStrategy.MouseCursorType.WaitArrow:\n                    return \"progress\";\n                case MouseCursorStrategy.MouseCursorType.SizeNWSE:\n                    return \"nwse-resize\";\n                case MouseCursorStrategy.MouseCursorType.SizeNESW:\n                    return \"nesw-resize\";\n                case MouseCursorStrategy.MouseCursorType.SizeWE:\n                    return \"ew-resize\";\n                case MouseCursorStrategy.MouseCursorType.SizeNS:\n                    return \"ns-resize\";\n                case MouseCursorStrategy.MouseCursorType.SizeAll:\n                    return \"move\";\n                case MouseCursorStrategy.MouseCursorType.No:\n                    return \"not-allowed\";\n                case MouseCursorStrategy.MouseCursorType.Hand:\n                    return \"pointer\";\n\n                default:\n                    throw new InvalidOperationException(\"cursorType\");\n            }\n        }\n\n        public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n            }\n\n            base.Dispose(dispose);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Blazor/Touch/ConcreteTouchPanel.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing nkast.Wasm.Dom;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public sealed class ConcreteTouchPanel : TouchPanelStrategy\n    {\n\n        public override IntPtr WindowHandle\n        {\n            get { return base.WindowHandle; }\n            set { base.WindowHandle = value; }\n        }\n\n        public override int DisplayWidth\n        {\n            get { return base.DisplayWidth; }\n            set { base.DisplayWidth = value; }\n        }\n\n        public override int DisplayHeight\n        {\n            get { return base.DisplayHeight; }\n            set { base.DisplayHeight = value; }\n        }\n\n        public override DisplayOrientation DisplayOrientation\n        {\n            get { return base.DisplayOrientation; }\n            set { base.DisplayOrientation = value; }\n        }\n\n        public override GestureType EnabledGestures\n        {\n            get { return base.EnabledGestures; }\n            set { base.EnabledGestures = value; }\n        }\n\n\n        public override bool IsGestureAvailable\n        {\n            get { return base.IsGestureAvailable; }\n        }\n\n        public ConcreteTouchPanel()\n            : base()\n        {\n            // Initialize Capabilities\n            int maximumTouchCount = Window.Current.Navigator.MaxTouchPoints;\n            bool isConnected = maximumTouchCount > 0;\n            bool hasPressure = false;\n            _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure);\n        }\n\n        public override TouchPanelCapabilities GetCapabilities()\n        {\n            return _capabilities;\n        }\n\n        public override TouchCollection GetState()\n        {\n            return base.GetState();\n        }\n\n        public override GestureSample ReadGesture()\n        {\n            return base.ReadGesture();\n        }\n\n        public override void AddPressedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = BlazorGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddPressedEvent(nativeTouchId, position, winSize);\n            }\n        }\n        \n        public override void AddMovedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = BlazorGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddMovedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddReleasedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = BlazorGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n        public override void AddCanceledEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = BlazorGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Input/.Blazor/XR/ConcreteTouchController.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Framework.XR;\nusing nkast.Wasm;\n\nnamespace Microsoft.Xna.Platform.Input.XR\n{\n    public sealed class ConcreteTouchController : ITouchControllerInput\n    {\n        private ConcreteXRDevice _xrDevice;\n\n        unsafe void ITouchControllerInput.GetCapabilities(TouchControllerType controllerType,\n            ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected,\n            ref Buttons buttons,\n            ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor,\n            ref bool hasVoiceSupport\n            )\n        {\n            var device = _xrDevice;\n            if (device != null)\n                device.GetCapabilities(controllerType,\n                    ref gamePadType, ref displayName, ref identifier, ref isConnected,\n                    ref buttons,\n                    ref hasLeftVibrationMotor, ref hasRightVibrationMotor,\n                    ref hasVoiceSupport);\n        }\n\n        internal ConcreteTouchController(ConcreteXRDevice xrDevice)\n        {\n            this._xrDevice = xrDevice;\n        }\n\n        GamePadState ITouchControllerInput.GetState(TouchControllerType controllerType)\n        {\n            var device = _xrDevice;\n            if (device != null)\n                return device.GetGamePadState(controllerType);\n\n            return new GamePadState();\n        }\n\n        bool ITouchControllerInput.SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            var device = _xrDevice;\n            if (device != null)\n                return device.SetVibration(controllerType, amplitude);\n\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.LibOVR/XR/ConcreteTouchControllerStrategy.cs",
    "content": "﻿// Copyright (C)2022-24 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Framework.XR;\nusing Microsoft.Xna.Platform.XR;\nusing Microsoft.Xna.Platform.XR.LibOVR;\nusing nkast.LibOVR;\n\nnamespace Microsoft.Xna.Platform.Input.XR.LibOVR\n{\n    public sealed class ConcreteTouchControllerStrategy : ITouchControllerInput\n    {\n        private ConcreteXRDevice _xrDevice;\n\n        void ITouchControllerInput.GetCapabilities(TouchControllerType controllerType,\n            ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected,\n            ref Buttons buttons,\n            ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor,\n            ref bool hasVoiceSupport\n            )\n        {\n            var session = _xrDevice.Session;\n            if (session == null)\n            {\n                gamePadType = GamePadType.Unknown;\n                displayName = String.Empty;\n                identifier = String.Empty;\n                isConnected = false;\n                buttons = (Buttons)0;\n                hasLeftVibrationMotor = false;\n                hasRightVibrationMotor = false;\n                hasVoiceSupport = false;\n            }\n\n            OvrControllerType ovrControllerType = (OvrControllerType)controllerType;\n            OvrControllerType connectedControllerTypes = session.GetConnectedControllerTypes();\n\n            isConnected = ((int)connectedControllerTypes & (int)ovrControllerType) != 0;\n\n            connectedControllerTypes =(OvrControllerType)((int)connectedControllerTypes & (int)ovrControllerType);\n\n            if (((int)connectedControllerTypes & (int)OvrControllerType.LTouch) == (int)OvrControllerType.LTouch)\n            {\n                buttons |= Buttons.X;\n                buttons |= Buttons.Y;\n                buttons |= Buttons.LeftThumbstickLeft & Buttons.LeftThumbstickRight;\n                buttons |= Buttons.LeftThumbstickDown & Buttons.LeftThumbstickUp;\n                buttons |= Buttons.LeftTrigger & Buttons.LeftGrip;\n                //buttons |= Buttons.LeftStick;\n                //buttons |= Buttons.Start;\n            }\n\n            if (((int)connectedControllerTypes & (int)OvrControllerType.RTouch) == (int)OvrControllerType.RTouch)\n            {\n                buttons |= Buttons.A;\n                buttons |= Buttons.B;\n                buttons |= Buttons.RightThumbstickLeft & Buttons.RightThumbstickRight;\n                buttons |= Buttons.RightThumbstickDown & Buttons.RightThumbstickUp;\n                buttons |= Buttons.RightTrigger & Buttons.RightGrip;\n                //buttons |= Buttons.RightStick;\n                //buttons |= Buttons.Back;\n            }\n\n        }\n\n        Buttons _virtualButtons;\n\n        internal ConcreteTouchControllerStrategy(ConcreteXRDevice xrDevice)\n        {\n            this._xrDevice = xrDevice;\n        }\n\n        GamePadState ITouchControllerInput.GetState(TouchControllerType controllerType)\n        {\n            var session = _xrDevice.Session;\n            if (session == null)\n                return new GamePadState();\n\n            OvrControllerType ovrControllerType = (OvrControllerType)controllerType;\n\n            OvrControllerType connectedControllerTypes = session.GetConnectedControllerTypes();\n            var isConnected = ((int)connectedControllerTypes & (int)ovrControllerType) != 0;\n            if (!isConnected)\n                return new GamePadState();\n\n            OvrInputState ovrInputState;\n            var ovrResult = session.GetInputState(ovrControllerType, out ovrInputState);\n\n            GamePadThumbSticks thumbSticks = default(GamePadThumbSticks);\n            GamePadTriggers triggers = default(GamePadTriggers);\n            GamePadTriggers grips = default(GamePadTriggers);\n            Buttons buttons = default(Buttons);\n            Buttons touches = default(Buttons);\n\n            thumbSticks = new GamePadThumbSticks(\n                leftPosition:  new Vector2(ovrInputState.Thumbstick[0].X, ovrInputState.Thumbstick[0].Y),\n                rightPosition: new Vector2(ovrInputState.Thumbstick[1].X, ovrInputState.Thumbstick[1].Y));\n\n            triggers = new GamePadTriggers(\n                    leftTrigger: ovrInputState.IndexTrigger[0],\n                    rightTrigger: ovrInputState.IndexTrigger[1]);\n\n            grips = new GamePadTriggers(\n                    leftTrigger: ovrInputState.HandTrigger[0],\n                    rightTrigger: ovrInputState.HandTrigger[1]);\n\n            // left buttons\n            if (((int)ovrInputState.Buttons & (int)OvrButton.X) != 0)\n                buttons |= Buttons.X;\n            if (((int)ovrInputState.Buttons & (int)OvrButton.Y) != 0)\n                buttons |= Buttons.Y;\n            if (((int)ovrInputState.Buttons & (int)OvrButton.LThumb) != 0)\n                buttons |= Buttons.LeftStick;\n            if (((int)ovrInputState.Buttons & (int)OvrButton.Enter) != 0) // Menu\n                buttons |= Buttons.Start;\n\n            // right buttons\n            if (((int)ovrInputState.Buttons & (int)OvrButton.A) != 0)\n                buttons |= Buttons.A;\n            if (((int)ovrInputState.Buttons & (int)OvrButton.B) != 0)\n                buttons |= Buttons.B;\n            if (((int)ovrInputState.Buttons & (int)OvrButton.RThumb) != 0)\n                buttons |= Buttons.RightStick;\n            if (((int)ovrInputState.Buttons & (int)OvrButton.Home) != 0) // Oculus button\n                buttons |= Buttons.Back;\n\n            float TriggerThresholdOn = 0.6f;\n            float TriggerThresholdOff = 0.7f;\n            float ThumbstickThresholdOn = 0.5f;\n            float ThumbstickThresholdOff = 0.4f;\n            // virtual trigger buttons\n            if (ovrInputState.IndexTrigger[0] > TriggerThresholdOn && (_virtualButtons & Buttons.LeftTrigger) == 0)\n                _virtualButtons |= Buttons.LeftTrigger;\n            else if (ovrInputState.IndexTrigger[0] < TriggerThresholdOff && (_virtualButtons & Buttons.LeftTrigger) != 0)\n                _virtualButtons &= ~Buttons.LeftTrigger;\n            if (ovrInputState.IndexTrigger[1] > TriggerThresholdOn && (_virtualButtons & Buttons.RightTrigger) == 0)\n                _virtualButtons |= Buttons.RightTrigger;\n            else if (ovrInputState.IndexTrigger[1] < TriggerThresholdOff && (_virtualButtons & Buttons.RightTrigger) != 0)\n                _virtualButtons &= ~Buttons.RightTrigger;\n            // virtual grip buttons\n            if (ovrInputState.HandTriggerRaw[0] > TriggerThresholdOn && (_virtualButtons & Buttons.LeftGrip) == 0)\n                _virtualButtons |= Buttons.LeftGrip;\n            else if (ovrInputState.HandTriggerRaw[0] < TriggerThresholdOff && (_virtualButtons & Buttons.LeftGrip) != 0)\n                _virtualButtons &= ~Buttons.LeftGrip;\n            if (ovrInputState.HandTriggerRaw[1] > TriggerThresholdOn && (_virtualButtons & Buttons.RightGrip) == 0)\n                _virtualButtons |= Buttons.RightGrip;\n            else if (ovrInputState.HandTriggerRaw[1] < TriggerThresholdOff && (_virtualButtons & Buttons.RightGrip) != 0)\n                _virtualButtons &= ~Buttons.RightGrip;\n            // virtual thumbstick buttons\n            if (ovrInputState.Thumbstick[0].X < -ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickLeft) == 0)\n                _virtualButtons |= Buttons.LeftThumbstickLeft;\n            else if (ovrInputState.Thumbstick[0].X > -ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickLeft) != 0)\n                _virtualButtons &= ~Buttons.LeftThumbstickLeft;\n            if (ovrInputState.Thumbstick[1].X < -ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickLeft) == 0)\n                _virtualButtons |= Buttons.RightThumbstickLeft;\n            else if (ovrInputState.Thumbstick[1].X > -ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickLeft) != 0)\n                _virtualButtons &= ~Buttons.RightThumbstickLeft;\n            if (ovrInputState.Thumbstick[0].X > ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickRight) == 0)\n                _virtualButtons |= Buttons.LeftThumbstickRight;\n            else if (ovrInputState.Thumbstick[0].X < ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickRight) != 0)\n                _virtualButtons &= ~Buttons.LeftThumbstickRight;\n            if (ovrInputState.Thumbstick[1].X > ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickRight) == 0)\n                _virtualButtons |= Buttons.RightThumbstickRight;\n            else if (ovrInputState.Thumbstick[1].X < ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickRight) != 0)\n                _virtualButtons &= ~Buttons.RightThumbstickRight;\n            if (ovrInputState.Thumbstick[0].Y < -ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickDown) == 0)\n                _virtualButtons |= Buttons.LeftThumbstickDown;\n            else if (ovrInputState.Thumbstick[0].Y > -ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickDown) != 0)\n                _virtualButtons &= ~Buttons.LeftThumbstickDown;\n            if (ovrInputState.Thumbstick[1].Y < -ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickDown) == 0)\n                _virtualButtons |= Buttons.RightThumbstickDown;\n            else if (ovrInputState.Thumbstick[1].Y > -ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickDown) != 0)\n                _virtualButtons &= ~Buttons.RightThumbstickDown;\n            if (ovrInputState.Thumbstick[0].Y > ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickUp) == 0)\n                _virtualButtons |= Buttons.LeftThumbstickUp;\n            else if (ovrInputState.Thumbstick[0].Y < ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickUp) != 0)\n                _virtualButtons &= ~Buttons.LeftThumbstickUp;\n            if (ovrInputState.Thumbstick[1].Y > ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickUp) == 0)\n                _virtualButtons |= Buttons.RightThumbstickUp;\n            else if (ovrInputState.Thumbstick[1].Y < ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickUp) != 0)\n                _virtualButtons &= ~Buttons.RightThumbstickUp;\n\n            buttons |= _virtualButtons;\n\n            // left touches\n            if (((int)ovrInputState.Touches & (int)OvrTouch.A) != 0)\n                touches |= Buttons.A;\n            if (((int)ovrInputState.Touches & (int)OvrTouch.B) != 0)\n                touches |= Buttons.B;\n            if (((int)ovrInputState.Touches & (int)OvrTouch.LThumb) != 0)\n                touches |= Buttons.LeftStick;\n            if (((int)ovrInputState.Touches & (int)OvrTouch.LIndexTrigger) != 0)\n                touches |= Buttons.LeftTrigger;\n\n            // right touches\n            if (((int)ovrInputState.Touches & (int)OvrTouch.X) != 0)\n                touches |= Buttons.X;\n            if (((int)ovrInputState.Touches & (int)OvrTouch.Y) != 0)\n                touches |= Buttons.Y;\n            if (((int)ovrInputState.Touches & (int)OvrTouch.RThumb) != 0)\n                touches |= Buttons.RightStick;\n            if (((int)ovrInputState.Touches & (int)OvrTouch.RIndexTrigger) != 0)\n                touches |= Buttons.RightTrigger;\n\n\n            GamePadState state = new GamePadState(\n                thumbSticks: thumbSticks,\n                triggers: triggers,\n                grips: grips,\n                touchButtons: new GamePadTouchButtons(buttons, touches),\n                dPad: default(GamePadDPad)\n                );\n\n            return state;\n        }\n\n        bool ITouchControllerInput.SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            var session = _xrDevice.Session;\n            if (session == null)\n                return false;\n\n            int result = session.SetControllerVibration((OvrControllerType)controllerType, 0.5f, amplitude);\n            if (result < 0)\n                return false;\n            \n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.OpenXR/XR/ConcreteTouchControllerStrategy.cs",
    "content": "﻿// Copyright (C)2022-24 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Framework.XR;\nusing Microsoft.Xna.Platform.XR;\nusing nkast.LibOXR;\nusing Silk.NET.OpenXR;\nusing XrAction = Silk.NET.OpenXR.Action;\n\nnamespace Microsoft.Xna.Platform.Input.XR\n{\n    public sealed class ConcreteTouchControllerStrategy : ITouchControllerInput\n    {\n        private ConcreteXRDevice _xrDevice;\n\n        unsafe void ITouchControllerInput.GetCapabilities(TouchControllerType controllerType,\n            ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected,\n            ref Buttons buttons,\n            ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor,\n            ref bool hasVoiceSupport\n            )\n        {\n            var session = _xrDevice.Session;\n            if (session == null)\n            {\n                gamePadType = GamePadType.Unknown;\n                displayName = String.Empty;\n                identifier = String.Empty;\n                isConnected = false;\n                buttons = (Buttons)0;\n                hasLeftVibrationMotor = false;\n                hasRightVibrationMotor = false;\n                hasVoiceSupport = false;\n            }\n\n            //OvrControllerType connectedControllerTypes = session.GetConnectedControllerTypes();\n            TouchControllerType connectedControllerTypes = default;\n\n            Result xrResult;\n\n            ActionPath leftHandPath, rightHandPath;\n            _xrDevice.Instance.StringToPath(\"/user/hand/left\", out leftHandPath);\n            _xrDevice.Instance.StringToPath(\"/user/hand/right\", out rightHandPath);\n\n            ActionPath oculusTouchProfilePath;\n            _xrDevice.Instance.StringToPath(\"/interaction_profiles/oculus/touch_controller\", out oculusTouchProfilePath);\n\n            session.GetCurrentInteractionProfile(leftHandPath, out InteractionProfileState leftProfileState);\n            session.GetCurrentInteractionProfile(rightHandPath, out InteractionProfileState rightProfileState);\n\n            if (leftProfileState.InteractionProfile == oculusTouchProfilePath.Handle)\n                connectedControllerTypes |= TouchControllerType.LTouch;\n\n            if (rightProfileState.InteractionProfile == oculusTouchProfilePath.Handle)\n                connectedControllerTypes |= TouchControllerType.RTouch;\n\n\n            isConnected = ((int)connectedControllerTypes & (int)controllerType) != 0;\n\n            connectedControllerTypes = (TouchControllerType)((int)connectedControllerTypes & (int)controllerType);\n\n            if (((int)connectedControllerTypes & (int)TouchControllerType.LTouch) == (int)TouchControllerType.LTouch)\n            {\n                buttons |= Buttons.X;\n                buttons |= Buttons.Y;\n                buttons |= Buttons.LeftThumbstickLeft & Buttons.LeftThumbstickRight;\n                buttons |= Buttons.LeftThumbstickDown & Buttons.LeftThumbstickUp;\n                buttons |= Buttons.LeftTrigger & Buttons.LeftGrip;\n                //buttons |= Buttons.LeftStick;\n                //buttons |= Buttons.Start;\n            }\n\n            if (((int)connectedControllerTypes & (int)TouchControllerType.RTouch) == (int)TouchControllerType.RTouch)\n            {\n                buttons |= Buttons.A;\n                buttons |= Buttons.B;\n                buttons |= Buttons.RightThumbstickLeft & Buttons.RightThumbstickRight;\n                buttons |= Buttons.RightThumbstickDown & Buttons.RightThumbstickUp;\n                buttons |= Buttons.RightTrigger & Buttons.RightGrip;\n                //buttons |= Buttons.RightStick;\n                //buttons |= Buttons.Back;\n            }\n\n        }\n\n        Buttons _virtualButtons;\n\n        internal ConcreteTouchControllerStrategy(ConcreteXRDevice xrDevice)\n        {\n            this._xrDevice = xrDevice;\n        }\n\n        GamePadState ITouchControllerInput.GetState(TouchControllerType controllerType)\n        {\n            var session = _xrDevice.Session;\n            if (session == null)\n                return new GamePadState();\n\n\n            //OvrControllerType connectedControllerTypes = session.GetConnectedControllerTypes();\n            TouchControllerType connectedControllerTypes = default;\n\n            Result xrResult;\n\n            ActionPath leftHandPath, rightHandPath;\n            _xrDevice.Instance.StringToPath(\"/user/hand/left\", out leftHandPath);\n            _xrDevice.Instance.StringToPath(\"/user/hand/right\", out rightHandPath);\n\n            ActionPath oculusTouchProfilePath;\n            _xrDevice.Instance.StringToPath(\"/interaction_profiles/oculus/touch_controller\", out oculusTouchProfilePath);\n\n            session.GetCurrentInteractionProfile(leftHandPath, out InteractionProfileState leftProfileState);\n            session.GetCurrentInteractionProfile(rightHandPath, out InteractionProfileState rightProfileState);\n\n            if (leftProfileState.InteractionProfile == oculusTouchProfilePath.Handle)\n                connectedControllerTypes |= TouchControllerType.LTouch;\n\n            if (rightProfileState.InteractionProfile == oculusTouchProfilePath.Handle)\n                connectedControllerTypes |= TouchControllerType.RTouch;\n\n\n            var isConnected = ((int)connectedControllerTypes & (int)controllerType) != 0;\n            if (!isConnected)\n                return new GamePadState();\n\n            //OvrInputState ovrInputState;\n            //var ovrResult = session.GetInputState(ovrControllerType, out ovrInputState);\n\n            GamePadThumbSticks thumbSticks = default(GamePadThumbSticks);\n            GamePadTriggers triggers = default(GamePadTriggers);\n            GamePadTriggers grips = default(GamePadTriggers);\n            Buttons buttons = default(Buttons);\n            Buttons touches = default(Buttons);\n\n\n            ActionStateVector2f ThumbStickL = session.GetActionStateVector2(_xrDevice._moveOnJoystickActionL);\n            ActionStateVector2f ThumbStickR = session.GetActionStateVector2(_xrDevice._moveOnJoystickActionR);\n         \n            thumbSticks = new GamePadThumbSticks(\n                leftPosition:  new Vector2(ThumbStickL.CurrentState.X, ThumbStickL.CurrentState.Y),\n                rightPosition: new Vector2(ThumbStickR.CurrentState.X, ThumbStickR.CurrentState.Y));\n\n            ActionStateFloat moveYStateL = session.GetActionStateFloat(_xrDevice._moveOnYActionL);\n            ActionStateFloat moveYStateR = session.GetActionStateFloat(_xrDevice._moveOnYActionR);\n\n            triggers = new GamePadTriggers(\n                    leftTrigger:  moveYStateL.CurrentState,\n                    rightTrigger: moveYStateR.CurrentState);\n\n            ActionStateFloat moveXStateL = session.GetActionStateFloat(_xrDevice._moveOnXActionL);\n            ActionStateFloat moveXStateR = session.GetActionStateFloat(_xrDevice._moveOnXActionR);\n\n            grips = new GamePadTriggers(\n                    leftTrigger:  moveXStateL.CurrentState,\n                    rightTrigger: moveXStateR.CurrentState);\n\n            //// left buttons\n            ActionStateBoolean _stateButtonX = session.GetActionStateBoolean(_xrDevice._actionButtonX);\n            ActionStateBoolean _stateButtonY = session.GetActionStateBoolean(_xrDevice._actionButtonY);\n            ActionStateBoolean _stateButtonLTS = session.GetActionStateBoolean(_xrDevice._actionButtonLeftThumbstick);\n\n            if (_stateButtonX.CurrentState != 0)\n                buttons |= Buttons.X;\n            if (_stateButtonY.CurrentState != 0)\n                buttons |= Buttons.Y;\n            if (_stateButtonLTS.CurrentState != 0)\n                buttons |= Buttons.LeftStick;\n            //if (((int)ovrInputState.Buttons & (int)OvrButton.Enter) != 0) // Menu\n            //    buttons |= Buttons.Start;\n\n            //// right buttons\n            ActionStateBoolean _stateButtonA = session.GetActionStateBoolean(_xrDevice._actionButtonA);\n            ActionStateBoolean _stateButtonB = session.GetActionStateBoolean(_xrDevice._actionButtonB);\n            ActionStateBoolean _stateButtonRTS = session.GetActionStateBoolean(_xrDevice._actionButtonRightThumbstick);\n\n            if (_stateButtonA.CurrentState!=0)\n                buttons |= Buttons.A;\n            if (_stateButtonB.CurrentState != 0)\n                buttons |= Buttons.B;\n            if (_stateButtonRTS.CurrentState != 0)\n                buttons |= Buttons.RightStick;\n            //if (((int)ovrInputState.Buttons & (int)OvrButton.Home) != 0) // Oculus button\n            //    buttons |= Buttons.Back;\n\n            float TriggerThresholdOn = 0.6f;\n            float TriggerThresholdOff = 0.7f;\n            float ThumbstickThresholdOn = 0.5f;\n            float ThumbstickThresholdOff = 0.4f;\n            //// virtual trigger buttons\n            if (triggers.Left > TriggerThresholdOn && (_virtualButtons & Buttons.LeftTrigger) == 0)\n                _virtualButtons |= Buttons.LeftTrigger;\n            else if (triggers.Left < TriggerThresholdOff && (_virtualButtons & Buttons.LeftTrigger) != 0)\n                _virtualButtons &= ~Buttons.LeftTrigger;\n            if (triggers.Right > TriggerThresholdOn && (_virtualButtons & Buttons.RightTrigger) == 0)\n                _virtualButtons |= Buttons.RightTrigger;\n            else if (triggers.Right < TriggerThresholdOff && (_virtualButtons & Buttons.RightTrigger) != 0)\n                _virtualButtons &= ~Buttons.RightTrigger;\n            //// virtual grip buttons\n            if (grips.Left > TriggerThresholdOn && (_virtualButtons & Buttons.LeftGrip) == 0)\n                _virtualButtons |= Buttons.LeftGrip;\n            else if (grips.Left < TriggerThresholdOff && (_virtualButtons & Buttons.LeftGrip) != 0)\n                _virtualButtons &= ~Buttons.LeftGrip;\n            if (grips.Right > TriggerThresholdOn && (_virtualButtons & Buttons.RightGrip) == 0)\n                _virtualButtons |= Buttons.RightGrip;\n            else if (grips.Right < TriggerThresholdOff && (_virtualButtons & Buttons.RightGrip) != 0)\n                _virtualButtons &= ~Buttons.RightGrip;\n            //// virtual thumbstick buttons\n            if (ThumbStickL.CurrentState.X < -ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickLeft) == 0)\n                _virtualButtons |= Buttons.LeftThumbstickLeft;\n            else if (ThumbStickL.CurrentState.X > -ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickLeft) != 0)\n                _virtualButtons &= ~Buttons.LeftThumbstickLeft;\n            if (ThumbStickR.CurrentState.X < -ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickLeft) == 0)\n                _virtualButtons |= Buttons.RightThumbstickLeft;\n            else if (ThumbStickR.CurrentState.X > -ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickLeft) != 0)\n                _virtualButtons &= ~Buttons.RightThumbstickLeft;\n            if (ThumbStickL.CurrentState.X > ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickRight) == 0)\n                _virtualButtons |= Buttons.LeftThumbstickRight;\n            else if (ThumbStickL.CurrentState.X < ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickRight) != 0)\n                _virtualButtons &= ~Buttons.LeftThumbstickRight;\n            if (ThumbStickR.CurrentState.X > ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickRight) == 0)\n                _virtualButtons |= Buttons.RightThumbstickRight;\n            else if (ThumbStickR.CurrentState.X < ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickRight) != 0)\n                _virtualButtons &= ~Buttons.RightThumbstickRight;\n\n            if (ThumbStickL.CurrentState.Y < -ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickDown) == 0)\n                _virtualButtons |= Buttons.LeftThumbstickDown;\n            else if (ThumbStickL.CurrentState.Y > -ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickDown) != 0)\n                _virtualButtons &= ~Buttons.LeftThumbstickDown;\n            if (ThumbStickR.CurrentState.Y < -ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickDown) == 0)\n                _virtualButtons |= Buttons.RightThumbstickDown;\n            else if (ThumbStickR.CurrentState.Y > -ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickDown) != 0)\n                _virtualButtons &= ~Buttons.RightThumbstickDown;\n            if (ThumbStickL.CurrentState.Y > ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickUp) == 0)\n                _virtualButtons |= Buttons.LeftThumbstickUp;\n            else if (ThumbStickL.CurrentState.Y < ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickUp) != 0)\n                _virtualButtons &= ~Buttons.LeftThumbstickUp;\n            if (ThumbStickR.CurrentState.Y > ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickUp) == 0)\n                _virtualButtons |= Buttons.RightThumbstickUp;\n            else if (ThumbStickR.CurrentState.Y < ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickUp) != 0)\n                _virtualButtons &= ~Buttons.RightThumbstickUp;\n\n            buttons |= _virtualButtons;\n\n            //// left touches\n            ActionStateBoolean _stateButtonXtouch = session.GetActionStateBoolean(_xrDevice._actionButtonXtouch);\n            ActionStateBoolean _stateButtonYtouch = session.GetActionStateBoolean(_xrDevice._actionButtonYtouch);\n            ActionStateBoolean _stateButtonLTStouch = session.GetActionStateBoolean(_xrDevice._actionButtonLeftThumbsticktouch);\n            ActionStateFloat _stateTriggerLTouch = session.GetActionStateFloat(_xrDevice._actionTriggerLeftTouch);\n            // BUG: Grip touch doesn't work on native OpenXR.\n            // https://communityforums.atmeta.com/t5/OpenXR-Development/unable-to-get-grip-button-input-on-quest-1-getting-path/td-p/833021\n            //ActionStateFloat _stateGripLTouch = session.GetActionStateFloat(_xrDevice._actionGripLeftTouch);\n\n            if (_stateButtonXtouch.CurrentState != 0)\n                touches |= Buttons.X;\n            if (_stateButtonYtouch.CurrentState != 0)\n                touches |= Buttons.Y;\n            if (_stateButtonLTStouch.CurrentState != 0)\n                touches |= Buttons.LeftStick;\n            //if (((int)ovrInputState.Buttons & (int)OvrButton.Enter) != 0) // Menu\n            //    touches |= Buttons.Start;\n            if (_stateTriggerLTouch.CurrentState != 0)\n                touches |= Buttons.LeftTrigger;\n            //if (_stateGripLTouch.CurrentState != 0)\n            //    touches |= Buttons.LeftGrip;\n\n            //// right touches\n            ActionStateBoolean _stateButtonAtouch = session.GetActionStateBoolean(_xrDevice._actionButtonAtouch);\n            ActionStateBoolean _stateButtonBtouch = session.GetActionStateBoolean(_xrDevice._actionButtonBtouch);\n            ActionStateBoolean _stateButtonRTStouch = session.GetActionStateBoolean(_xrDevice._actionButtonRightThumbsticktouch);\n            ActionStateFloat _stateTriggerRTouch = session.GetActionStateFloat(_xrDevice._actionTriggerRightTouch);\n            // BUG: Grip touch doesn't work on native OpenXR.\n            // https://communityforums.atmeta.com/t5/OpenXR-Development/unable-to-get-grip-button-input-on-quest-1-getting-path/td-p/833021\n            //ActionStateFloat _stateGripRTouch = session.GetActionStateFloat(_xrDevice._actionGripRightTouch);\n\n            if (_stateButtonAtouch.CurrentState != 0)\n                touches |= Buttons.A;\n            if (_stateButtonBtouch.CurrentState != 0)\n                touches |= Buttons.B;\n            if (_stateButtonRTStouch.CurrentState != 0)\n                touches |= Buttons.RightStick;\n            //if (((int)ovrInputState.Buttons & (int)OvrButton.Home) != 0) // Oculus button\n            //    touches |= Buttons.Back;\n            if (_stateTriggerRTouch.CurrentState != 0)\n                touches |= Buttons.RightTrigger;\n            //if (_stateGripRTouch.CurrentState != 0)\n            //    touches |= Buttons.RightGrip;\n\n\n            var state = new GamePadState(\n                thumbSticks: thumbSticks,\n                triggers: triggers,\n                grips: grips,\n                touchButtons: new GamePadTouchButtons(buttons, touches),\n                dPad: default(GamePadDPad)\n                );\n\n            return state;\n        }\n\n        const int XR_MIN_HAPTIC_DURATION = -1;\n\n        private long ToXrTime(double sec)\n        {\n            return (long)(sec * 1000 * 1000 * 1000); //nSec\n        }\n\n        bool ITouchControllerInput.SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            var session = _xrDevice.Session;\n            if (session == null)\n                return false;\n\n            if ((controllerType & TouchControllerType.LTouch) == TouchControllerType.LTouch)\n            {\n                Result xrResult = session.ApplyHapticFeedback(\n                        _xrDevice._vibrateLeftFeedback, amplitude: amplitude, frequency: 3000f, duration: ToXrTime(0.5));\n                if (xrResult != Result.Success)\n                    return false;\n            }\n\n            if ((controllerType & TouchControllerType.RTouch) == TouchControllerType.RTouch)\n            {\n                Result xrResult = session.ApplyHapticFeedback(\n                        _xrDevice._vibrateRightFeedback, amplitude: amplitude, frequency: 3000f, duration: ToXrTime(0.5));\n                if (xrResult != Result.Success)\n                    return false;\n            }\n\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteGamePad.cs",
    "content": "﻿// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    // TODO: move GamePadDevice to Framework.Input library\n    public abstract class GamePadDevice\n    {\n        public GamePadCapabilities Capabilities;\n\n        public GamePadDevice()\n        {\n\n        }\n    }\n\n    public sealed class ConcreteGamePad : GamePadStrategy\n    {\n\n        // Default & SDL Xbox Controller dead zones\n        // Based on the XInput constants\n        public override float LeftThumbDeadZone { get { throw new PlatformNotSupportedException(); } }\n        public override float RightThumbDeadZone { get { throw new PlatformNotSupportedException(); } }\n\n        public override int PlatformGetMaxNumberOfGamePads()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override GamePadCapabilities PlatformGetCapabilities(int index)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteGamePadDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    internal class ConcreteGamePadDevice : GamePadDevice\n    {\n\n        public ConcreteGamePadDevice()\n            : base()\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteInputFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteInputFactory : InputFactory\n    {\n\n        public override GamePadStrategy CreateGamePadStrategy()\n        {\n            return new ConcreteGamePad();\n        }\n\n        public override JoystickStrategy CreateJoystickStrategy()\n        {\n            return new ConcreteJoystick();\n        }\n\n        public override KeyboardStrategy CreateKeyboardStrategy()\n        {\n            return new ConcreteKeyboard();\n        }\n\n        public override MouseStrategy CreateMouseStrategy()\n        {\n            return new ConcreteMouse();\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            return new ConcreteMouseCursor(cursorType);\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy)\n        {\n            return new ConcreteMouseCursor(data, w, h, originx, originy);\n        }\n\n        public override TouchPanelStrategy CreateTouchPanelStrategy()\n        {\n            return new ConcreteTouchPanel();\n        }\n\n        public override KeyboardInputStrategy CreateKeyboardInputStrategy()\n        {\n            return new ConcreteKeyboardInput();\n        }\n\n        public override MessageBoxStrategy CreateMessageBoxStrategy()\n        {\n            return new ConcreteMessageBox();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteJoystick.cs",
    "content": "﻿// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteJoystick : JoystickStrategy\n    {\n        public override bool PlatformIsSupported\n        {\n            get { return false; }\n        }\n\n        public override int PlatformLastConnectedIndex\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override JoystickCapabilities PlatformGetCapabilities(int index)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override JoystickState PlatformGetState(int index)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformGetState(int index, ref JoystickState joystickState)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteKeyboard.cs",
    "content": "﻿// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboard : KeyboardStrategy\n    {\n\n        public override KeyboardState PlatformGetState()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteKeyboardInput.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboardInput : KeyboardInputStrategy\n    {\n        public override Task<string> PlatformShow(string title, string description, string defaultText, bool usePasswordMode)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformCancel(string result)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteMessageBox.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMessageBox : MessageBoxStrategy\n    {\n        public override Task<int?> PlatformShow(string title, string description, List<string> buttons)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformCancel(int? result)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteMouse.cs",
    "content": "// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouse : MouseStrategy\n    {\n        public override IntPtr PlatformGetWindowHandle()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformSetWindowHandle(IntPtr windowHandle)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool PlatformIsRawInputAvailable()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override MouseState PlatformGetState()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformSetPosition(int x, int y)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformSetCursor(MouseCursor cursor)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Ref/ConcreteMouseCursor.cs",
    "content": "﻿// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouseCursor : MouseCursorStrategy\n    {\n\n        public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n            }\n\n            base.Dispose(dispose);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.Ref/Touch/ConcreteTouchPanel.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public sealed class ConcreteTouchPanel : TouchPanelStrategy\n    {\n\n        public override IntPtr WindowHandle\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int DisplayWidth\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int DisplayHeight\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n        public override DisplayOrientation DisplayOrientation\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n        public override GestureType EnabledGestures\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n\n        public override bool IsGestureAvailable\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override TouchPanelCapabilities GetCapabilities()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override TouchCollection GetState()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override GestureSample ReadGesture()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void AddPressedEvent(int nativeTouchId, Vector2 position)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void AddMovedEvent(int nativeTouchId, Vector2 position)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void AddReleasedEvent(int nativeTouchId, Vector2 position)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void AddCanceledEvent(int nativeTouchId, Vector2 position)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteGamePad.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    // TODO: move GamePadDevice to Framework.Input library\n    public abstract class GamePadDevice\n    {\n        public GamePadCapabilities Capabilities;\n\n        public GamePadDevice()\n        {\n        }\n    }\n\n    public sealed class ConcreteGamePad : GamePadStrategy\n    {\n        private Sdl SDL { get { return Sdl.Current; } }\n\n\n        // map GamePad indices (PlayerIndex) -> GamePadDevices\n        private readonly Dictionary<int, SdlGamePadDevice> _gamepads = new Dictionary<int, SdlGamePadDevice>();\n        // map Joystick instanceIDs -> gamepad indices (PlayerIndex)\n        private readonly Dictionary<int, int> _indicesMap = new Dictionary<int, int>();\n\n        // Default & SDL Xbox Controller dead zones\n        // Based on the XInput constants\n        public override float LeftThumbDeadZone { get { return 0.24f; } }\n        public override float RightThumbDeadZone { get { return 0.265f; } }\n\n        const Sdl.InitFlags SdlSubSystems = Sdl.InitFlags.GameController\n                                          | Sdl.InitFlags.Haptic\n                                          ;\n\n        public ConcreteGamePad()\n        {\n            Sdl.Current.InitSubSystem(SdlSubSystems);;\n            InitDatabase();\n            InitDevices();\n        }\n\n        ~ConcreteGamePad()\n        {\n            foreach (SdlGamePadDevice sdlGamepad in _gamepads.Values)\n                SDL.GAMECONTROLLER.Close(sdlGamepad.Handle);\n\n            _gamepads.Clear();\n            _indicesMap.Clear();\n\n            Sdl.Current.QuitSubSystem(SdlSubSystems);\n\n        }\n\n        public override int PlatformGetMaxNumberOfGamePads()\n        {\n            return 16;\n        }\n\n        public override GamePadCapabilities PlatformGetCapabilities(int index)\n        {\n            if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad))\n                return sdlGamepad.Capabilities;\n                        \n            return base.CreateGamePadCapabilities(\n                    gamePadType: GamePadType.Unknown,\n                    displayName: null,\n                    identifier: null,\n                    isConnected: false,\n                    buttons: (Buttons)0,\n                    hasLeftVibrationMotor: false,\n                    hasRightVibrationMotor: false,\n                    hasVoiceSupport: false\n                );\n        }\n\n        private GamePadCapabilities InternalGetCapabilities(IntPtr handle)\n        {\n            GamePadType gamePadType = GamePadType.GamePad;\n            string displayName = SDL.GAMECONTROLLER.GetName(handle);\n            string identifier = SDL.JOYSTICK.GetGUID(SDL.GAMECONTROLLER.GetJoystick(handle)).ToString();\n            bool isConnected = true;\n            bool hasLeftVibrationMotor  = SDL.GAMECONTROLLER.HasRumble(handle) != 0;\n            bool hasRightVibrationMotor = SDL.GAMECONTROLLER.HasRumble(handle) != 0;\n            bool hasVoiceSupport = false;\n\n            Buttons buttons = (Buttons)0;\n            ParseCapabilities(handle, ref buttons);\n\n            return base.CreateGamePadCapabilities(\n                    gamePadType: gamePadType,\n                    displayName: displayName,\n                    identifier: identifier,\n                    isConnected: isConnected,\n                    buttons: buttons,\n                    hasLeftVibrationMotor: hasLeftVibrationMotor,\n                    hasRightVibrationMotor: hasRightVibrationMotor,\n                    hasVoiceSupport: hasVoiceSupport\n                );\n        }\n\n        private void ParseCapabilities(IntPtr gamecontroller, ref Buttons buttons)\n        {\n            IntPtr pStrMappings = IntPtr.Zero;\n            try\n            {\n                pStrMappings = SDL.GAMECONTROLLER.SDL_GameControllerMapping(gamecontroller);\n                if (pStrMappings == IntPtr.Zero)\n                    return;\n\n                string mappings = InteropHelpers.Utf8ToString(pStrMappings);\n\n                for (int idx = 0; idx < mappings.Length;)\n                {\n                    if (MatchKey(\"a\", mappings, ref idx))\n                        buttons |= Buttons.A;\n                    else\n                    if (MatchKey(\"b\", mappings, ref idx))\n                        buttons |= Buttons.B;\n                    else\n                    if (MatchKey(\"x\", mappings, ref idx))\n                        buttons |= Buttons.X;\n                    else\n                    if (MatchKey(\"y\", mappings, ref idx))\n                        buttons |= Buttons.Y;\n                    else\n                    if (MatchKey(\"back\", mappings, ref idx))\n                        buttons |= Buttons.Back;\n                    else\n                    if (MatchKey(\"guide\", mappings, ref idx))\n                        buttons |= Buttons.BigButton;\n                    else\n                    if (MatchKey(\"start\", mappings, ref idx))\n                        buttons |= Buttons.Start;\n                    else\n                    if (MatchKey(\"dpleft\", mappings, ref idx))\n                        buttons |= Buttons.DPadLeft;\n                    else\n                    if (MatchKey(\"dpdown\", mappings, ref idx))\n                        buttons |= Buttons.DPadDown;\n                    else\n                    if (MatchKey(\"dpright\", mappings, ref idx))\n                        buttons |= Buttons.DPadRight;\n                    else\n                    if (MatchKey(\"dpup\", mappings, ref idx))\n                        buttons |= Buttons.DPadUp;\n                    else\n                    if (MatchKey(\"leftshoulder\", mappings, ref idx))\n                        buttons |= Buttons.LeftShoulder;\n                    else\n                    if (MatchKey(\"lefttrigger\", mappings, ref idx))\n                        buttons |= Buttons.LeftTrigger;\n                    else\n                    if (MatchKey(\"rightshoulder\", mappings, ref idx))\n                        buttons |= Buttons.RightShoulder;\n                    else\n                    if (MatchKey(\"righttrigger\", mappings, ref idx))\n                        buttons |= Buttons.RightTrigger;\n                    else\n                    if (MatchKey(\"leftstick\", mappings, ref idx))\n                        buttons |= Buttons.LeftStick;\n                    else\n                    if (MatchKey(\"rightstick\", mappings, ref idx))\n                        buttons |= Buttons.RightStick;\n                    else\n                    if (MatchKey(\"leftx\", mappings, ref idx))\n                        buttons |= Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight;\n                    else\n                    if (MatchKey(\"lefty\", mappings, ref idx))\n                        buttons |= Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp;\n                    else\n                    if (MatchKey(\"rightx\", mappings, ref idx))\n                        buttons |= Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight;\n                    else\n                    if (MatchKey(\"righty\", mappings, ref idx))\n                        buttons |= Buttons.RightThumbstickDown | Buttons.RightThumbstickUp;\n\n                    if (idx < mappings.Length)\n                    {\n                        int nidx = mappings.IndexOf(',', idx);\n                        if (nidx != -1)\n                        {\n                            idx = nidx + 1;\n                            continue;\n                        }\n                    }\n                    break;\n                }\n            }\n            finally\n            {\n                if (pStrMappings != IntPtr.Zero)\n                    SDL.SDL_Free(pStrMappings);\n            }\n        }\n\n        private bool MatchKey(string match, string input, ref int startIndex)\n        {\n            int nIndex = startIndex;\n            if (!Match(match, input, ref nIndex))\n                return false;\n            if (!Match(\":\", input, ref nIndex))\n                return false;\n\n            startIndex = nIndex;\n            return true;\n        }\n\n        private bool Match(string match, string input, ref int startIndex)\n        {\n            if (input.Length - startIndex < match.Length)\n                return false;\n\n            int matchIndex = input.IndexOf(match, startIndex, match.Length);\n            if (matchIndex != startIndex)\n                return false;\n\n            startIndex += match.Length;\n            return true;\n        }\n\n        private float GetFromSdlAxis(int axis)\n        {\n            // SDL Axis ranges from -32768 to 32767, so we need to divide with different numbers depending on if it's positive\n            if (axis < 0)\n                return axis / 32768f;\n\n            return axis / 32767f;\n        }\n\n        public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad))\n            {\n                // Y gamepad axis is rotate between SDL and XNA\n                GamePadThumbSticks thumbSticks =\n                    base.CreateGamePadThumbSticks(\n                        new Vector2(\n                            GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.LeftX)),\n                            GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.LeftY)) * -1f\n                        ),\n                        new Vector2(\n                            GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.RightX)),\n                            GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.RightY)) * -1f\n                        ),\n                        leftDeadZoneMode,\n                        rightDeadZoneMode\n                    );\n\n                GamePadTriggers triggers = new GamePadTriggers(\n                    GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.TriggerLeft)),\n                    GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.TriggerRight))\n                );\n\n                GamePadButtons buttons =\n                    new GamePadButtons(\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.A) == 1) ? Buttons.A : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.B) == 1) ? Buttons.B : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.Back) == 1) ? Buttons.Back : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.Guide) == 1) ? Buttons.BigButton : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.LeftShoulder) == 1) ? Buttons.LeftShoulder : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.RightShoulder) == 1) ? Buttons.RightShoulder : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.LeftStick) == 1) ? Buttons.LeftStick : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.RightStick) == 1) ? Buttons.RightStick : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.Start) == 1) ? Buttons.Start : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.X) == 1) ? Buttons.X : 0) |\n                        ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.Y) == 1) ? Buttons.Y : 0) |\n                        ((triggers.Left > 0f) ? Buttons.LeftTrigger : 0) |\n                        ((triggers.Right > 0f) ? Buttons.RightTrigger : 0)\n                    );\n\n                GamePadDPad dPad =\n                    new GamePadDPad(\n                        (SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.DpadUp) == 1) ? ButtonState.Pressed : ButtonState.Released,\n                        (SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.DpadDown) == 1) ? ButtonState.Pressed : ButtonState.Released,\n                        (SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.DpadLeft) == 1) ? ButtonState.Pressed : ButtonState.Released,\n                        (SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.DpadRight) == 1) ? ButtonState.Pressed : ButtonState.Released\n                    );\n\n                sdlGamepad.State = base.CreateGamePadState(thumbSticks, triggers, buttons, dPad,\n                                                           packetNumber: sdlGamepad.PacketNumber);\n\n                return sdlGamepad.State;\n            }\n\n            return new GamePadState();\n        }\n\n        public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad))\n            {\n                return SDL.GAMECONTROLLER.Rumble(sdlGamepad.Handle, (ushort)(65535f * leftMotor),\n                           (ushort)(65535f * rightMotor), uint.MaxValue) == 0 &&\n                       SDL.GAMECONTROLLER.RumbleTriggers(sdlGamepad.Handle, (ushort)(65535f * leftTrigger),\n                           (ushort)(65535f * rightTrigger), uint.MaxValue) == 0;\n            }\n\n            return false;\n        }\n\n        private void InitDatabase()\n        {\n            using (Stream stream = typeof(ConcreteGamePad).Assembly.GetManifestResourceStream(\"gamecontrollerdb.txt\"))\n            {\n                if (stream != null)\n                {\n                    try\n                    {\n                        byte[] data = new byte[stream.Length];\n                        stream.Read(data, 0, data.Length);\n                        GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);\n                        try\n                        {\n                            IntPtr pRWops = SDL.RwFromMem(data, data.Length);\n                            SDL.GAMECONTROLLER.AddMappingFromRw(pRWops, 1);\n                        }\n                        finally\n                        {\n                            handle.Free();\n                        }\n                    }\n                    catch { }\n                }\n            }\n        }\n\n        private void InitDevices()\n        {\n            int numJoysticks = SDL.JOYSTICK.NumJoysticks();\n            for (int deviceIndex = 0; deviceIndex < numJoysticks; deviceIndex++)\n            {\n                if (SDL.GAMECONTROLLER.IsGameController(deviceIndex) == 1)\n                    AddDevice(deviceIndex);\n            }\n        }\n\n        internal void AddDevice(int deviceIndex)\n        {\n            IntPtr handle = SDL.GAMECONTROLLER.Open(deviceIndex);\n            IntPtr joystickHandle = SDL.GAMECONTROLLER.GetJoystick(handle);\n            int instanceID = SDL.JOYSTICK.InstanceID(joystickHandle);\n\n            if (_indicesMap.ContainsKey(instanceID))\n                return;\n\n            int index = 0;\n            while (_gamepads.ContainsKey(index))\n                index++;\n\n            SdlGamePadDevice sdlGamepad = new SdlGamePadDevice(instanceID, handle);\n            sdlGamepad.Capabilities = InternalGetCapabilities(handle);\n\n            _gamepads.Add(index, sdlGamepad);\n\n            _indicesMap[instanceID] = index;\n        }\n\n        internal void RemapDevice(int instanceID)\n        {\n        }\n\n        internal void RemoveDevice(int instanceID)\n        {\n            if (_indicesMap.TryGetValue(instanceID, out int index))\n            {\n                if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad))\n                {\n                    _gamepads.Remove(index);\n                    SDL.GAMECONTROLLER.Close(sdlGamepad.Handle);\n\n                    _indicesMap.Remove(instanceID);\n                }\n            }\n        }\n\n        internal void UpdatePacketInfo(int instanceID, uint packetNumber)\n        {\n            if (_indicesMap.TryGetValue(instanceID, out int index))\n            {\n                if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad))\n                {\n                    sdlGamepad.PacketNumber = (packetNumber < int.MaxValue)\n                                            ? (int)packetNumber\n                                            : (int)(packetNumber - (uint)int.MaxValue);\n                }\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteGamePadDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    internal class SdlGamePadDevice : GamePadDevice\n    {\n        public int InstanceID { get; private set; }\n        public IntPtr Handle { get; private set; }\n\n        internal GamePadState State;\n        public int PacketNumber;\n\n        public SdlGamePadDevice(int instanceID, IntPtr handle)\n            : base()\n        {\n            this.InstanceID = instanceID;\n            this.Handle = handle;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteInputFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteInputFactory : InputFactory\n    {\n\n        public override GamePadStrategy CreateGamePadStrategy()\n        {\n            return new ConcreteGamePad();\n        }\n\n        public override JoystickStrategy CreateJoystickStrategy()\n        {\n            return new ConcreteJoystick();\n        }\n\n        public override KeyboardStrategy CreateKeyboardStrategy()\n        {\n            return new ConcreteKeyboard();\n        }\n\n        public override MouseStrategy CreateMouseStrategy()\n        {\n            return new ConcreteMouse();\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            return new ConcreteMouseCursor(cursorType);\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy)\n        {\n            return new ConcreteMouseCursor(data, w, h, originx, originy);\n        }\n\n        public override TouchPanelStrategy CreateTouchPanelStrategy()\n        {\n            return new ConcreteTouchPanel();\n        }\n\n        public override KeyboardInputStrategy CreateKeyboardInputStrategy()\n        {\n            return new ConcreteKeyboardInput();\n        }\n\n        public override MessageBoxStrategy CreateMessageBoxStrategy()\n        {\n            return new ConcreteMessageBox();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteJoystick.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteJoystick : JoystickStrategy\n    {\n        private Sdl SDL { get { return Sdl.Current; } }\n\n        // map Joystick indices (PlayerIndex) -> JoystickDevices\n        private Dictionary<int, SdlJoystickDevice> _sdlJoysticks = new Dictionary<int, SdlJoystickDevice>();\n        // map Joystick instanceIDs -> gamepad indices (PlayerIndex)\n        private readonly Dictionary<int, int> _indicesMap = new Dictionary<int, int>();\n\n        private int _maxConnectedIndex = -1;\n\n        public override bool PlatformIsSupported\n        {\n            get { return true; }\n        }\n\n        public override int PlatformLastConnectedIndex\n        {\n            get { return _maxConnectedIndex; }\n        }\n\n        const Sdl.InitFlags SdlSubSystems = Sdl.InitFlags.Joystick\n                                          ;\n       \n        public ConcreteJoystick()\n        {\n            Sdl.Current.InitSubSystem(SdlSubSystems);\n            InitDevices();\n        }\n\n        ~ConcreteJoystick()\n        {\n            foreach (SdlJoystickDevice sdlJoystick in _sdlJoysticks.Values)\n                SDL.JOYSTICK.Close(sdlJoystick.Handle);\n\n            _sdlJoysticks.Clear();\n            _indicesMap.Clear();\n\n            Sdl.Current.QuitSubSystem(SdlSubSystems);\n        }\n\n        public override JoystickCapabilities PlatformGetCapabilities(int index)\n        {\n            if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick))\n                return sdlJoystick.Capabilities;\n\n            return base.CreateJoystickCapabilities(false, string.Empty, string.Empty, false, 0, 0, 0);\n        }\n\n        public override JoystickState PlatformGetState(int index)\n        {\n            if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick))\n            {\n                JoystickCapabilities caps = sdlJoystick.Capabilities;\n\n                int[] axes = new int[caps.AxisCount];\n                for (int i = 0; i < axes.Length; i++)\n                    axes[i] = SDL.JOYSTICK.GetAxis(sdlJoystick.Handle, i);\n\n                ButtonState[] buttons = new ButtonState[caps.ButtonCount];\n                for (int i = 0; i < buttons.Length; i++)\n                    buttons[i] = (SDL.JOYSTICK.GetButton(sdlJoystick.Handle, i) == 0) ? ButtonState.Released : ButtonState.Pressed;\n\n                JoystickHat[] hats = new JoystickHat[caps.HatCount];\n                for (int i = 0; i < hats.Length; i++)\n                {\n                    Sdl.Joystick.Hat hatstate = SDL.JOYSTICK.GetHat(sdlJoystick.Handle, i);\n                    Buttons dPadButtons = SDLToXnaDPadButtons(hatstate);\n\n                    hats[i] = base.CreateJoystickHat(dPadButtons);\n                }\n\n                sdlJoystick.State = base.CreateJoystickState(\n                                            isConnected: true,\n                                            axes: axes,\n                                            buttons: buttons,\n                                            hats: hats\n                                        );\n\n                return sdlJoystick.State;\n            }\n\n            return JoystickStrategy.DefaultJoystickState;\n\n        }\n\n        public override void PlatformGetState(int index, ref JoystickState joystickState)\n        {\n            bool isConnected = false;\n            int[] axes = joystickState.Axes;\n            ButtonState[] buttons = joystickState.Buttons;\n            JoystickHat[] hats = joystickState.Hats;\n\n            if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick))\n            {\n                JoystickCapabilities caps = sdlJoystick.Capabilities;\n\n                //Resize each array if the length is less than the count returned by the capabilities\n                if (axes.Length < caps.AxisCount)\n                    axes = new int[caps.AxisCount];\n\n                if (buttons.Length < caps.ButtonCount)\n                    buttons = new ButtonState[caps.ButtonCount];\n\n                if (hats.Length < caps.HatCount)\n                    hats = new JoystickHat[caps.HatCount];\n\n                for (int i = 0; i < caps.AxisCount; i++)\n                    axes[i] = SDL.JOYSTICK.GetAxis(sdlJoystick.Handle, i);\n\n                for (int i = 0; i < caps.ButtonCount; i++)\n                    buttons[i] = (SDL.JOYSTICK.GetButton(sdlJoystick.Handle, i) == 0) ? ButtonState.Released : ButtonState.Pressed;\n\n                for (int i = 0; i < caps.HatCount; i++)\n                {\n                    Sdl.Joystick.Hat hatstate = SDL.JOYSTICK.GetHat(sdlJoystick.Handle, i);\n                    Buttons dPadButtons = SDLToXnaDPadButtons(hatstate);\n\n                    hats[i] = base.CreateJoystickHat(dPadButtons);\n                }\n\n                isConnected = true;\n            }\n\n            joystickState = base.CreateJoystickState(isConnected, axes, buttons, hats);\n        }\n\n\n        private void InitDevices()\n        {\n            int numJoysticks = SDL.JOYSTICK.NumJoysticks();\n            for (int deviceIndex = 0; deviceIndex < numJoysticks; deviceIndex++)\n                AddDevice(deviceIndex);\n        }\n\n        internal void AddDevice(int deviceIndex)\n        {\n            IntPtr handle = SDL.JOYSTICK.Open(deviceIndex);\n            int instanceID = SDL.JOYSTICK.InstanceID(handle);\n\n            if (_indicesMap.ContainsKey(instanceID))\n                    return;\n\n            int index = 0;\n            while (_sdlJoysticks.ContainsKey(index))\n                index++;\n\n            _maxConnectedIndex = Math.Max(_maxConnectedIndex, index);\n\n            SdlJoystickDevice sdlJoystick = new SdlJoystickDevice(instanceID, handle);\n            sdlJoystick.Capabilities = base.CreateJoystickCapabilities(\n                    isConnected: true,\n                    displayName: SDL.JOYSTICK.GetJoystickName(handle),\n                    identifier:  SDL.JOYSTICK.GetGUID(handle).ToString(),\n                    isGamepad:   (SDL.GAMECONTROLLER.IsGameController(deviceIndex) == 1),\n                    axisCount:   SDL.JOYSTICK.NumAxes(handle),\n                    buttonCount: SDL.JOYSTICK.NumButtons(handle),\n                    hatCount:    SDL.JOYSTICK.NumHats(handle)\n                );\n\n            _sdlJoysticks.Add(index, sdlJoystick);\n\n            _indicesMap[instanceID] = index;\n        }\n\n        internal void RemoveDevice(int instanceID)\n        {\n            if (_indicesMap.TryGetValue(instanceID, out int index))\n            {\n                if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick))\n                {\n                    SDL.JOYSTICK.Close(sdlJoystick.Handle);\n                    _sdlJoysticks.Remove(index);\n\n                    if (_maxConnectedIndex == index)\n                        _maxConnectedIndex = CalculateMaxConnectedIndex();\n\n                    _indicesMap.Remove(instanceID);\n                }\n            }\n        }\n\n        private int CalculateMaxConnectedIndex()\n        {\n            int maxConnectedIndex = -1;\n            foreach (int index in _sdlJoysticks.Keys)\n                maxConnectedIndex = Math.Max(maxConnectedIndex, index);\n\n            return maxConnectedIndex;\n        }\n\n        private Buttons SDLToXnaDPadButtons(Sdl.Joystick.Hat hatstate)\n        {\n            Buttons dPadButtons = (Buttons)0;\n            dPadButtons |= (Buttons)((int)(hatstate & Sdl.Joystick.Hat.Up));\n            dPadButtons |= (Buttons)((int)(hatstate & Sdl.Joystick.Hat.Down) >> 1);\n            dPadButtons |= (Buttons)((int)(hatstate & Sdl.Joystick.Hat.Left) >> 1);\n            dPadButtons |= (Buttons)((int)(hatstate & Sdl.Joystick.Hat.Right) << 2);\n\n            return dPadButtons;\n        }\n\n    }\n\n    public class SdlJoystickDevice : JoystickDevice\n    {\n        public int InstanceID { get; private set; }\n        public IntPtr Handle { get; private set; }\n\n        internal JoystickState State;\n\n\n        public SdlJoystickDevice(int instanceID, IntPtr handle)\n            : base()\n        {\n            this.InstanceID = instanceID;\n            this.Handle = handle;\n        }\n    }\n\n    public class JoystickDevice\n    {\n        public JoystickCapabilities Capabilities;\n\n        public JoystickDevice()\n        {\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteKeyboard.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboard : KeyboardStrategy\n    {\n        private Sdl SDL { get { return Sdl.Current; } }\n\n        private List<Keys> _keys;\n\n        public override KeyboardState PlatformGetState()\n        {\n            Sdl.Keyboard.Keymod modifiers = SDL.KEYBOARD.GetModState();\n\n            return base.CreateKeyboardState(_keys,\n                                            (modifiers & Sdl.Keyboard.Keymod.CapsLock) == Sdl.Keyboard.Keymod.CapsLock,\n                                            (modifiers & Sdl.Keyboard.Keymod.NumLock) == Sdl.Keyboard.Keymod.NumLock);\n        }\n\n        internal void SetKeys(List<Keys> keys)\n        {\n            _keys = keys;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteKeyboardInput.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboardInput : KeyboardInputStrategy\n    {\n        public override Task<string> PlatformShow(string title, string description, string defaultText, bool usePasswordMode)\n        {\n            throw new NotImplementedException(\"KeyboardInput is not implemented on this platform.\");\n        }\n\n        public override void PlatformCancel(string result)\n        {\n            throw new NotImplementedException(\"KeyboardInput is not implemented on this platform.\");\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteMessageBox.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMessageBox : MessageBoxStrategy\n    {\n        public override Task<int?> PlatformShow(string title, string description, List<string> buttons)\n        {\n            throw new NotImplementedException(\"MessageBox is not implemented on this platform.\");\n        }\n\n        public override void PlatformCancel(int? result)\n        {\n            throw new NotImplementedException(\"MessageBox is not implemented on this platform.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteMouse.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouse : MouseStrategy\n    {\n        private IntPtr _wndHandle = IntPtr.Zero;\n\n        private Sdl SDL { get { return Sdl.Current; } }\n\n        internal int ScrollX;\n        internal int ScrollY;\n        internal int RawX;\n        internal int RawY;\n\n        public override IntPtr PlatformGetWindowHandle()\n        {\n            return _wndHandle;\n        }\n\n        public override void PlatformSetWindowHandle(IntPtr windowHandle)\n        {\n            _wndHandle = windowHandle;\n        }\n\n        public override bool PlatformIsRawInputAvailable()\n        {\n            return true;\n        }\n\n        public override MouseState PlatformGetState()\n        {\n            IntPtr wndHandle = _wndHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                SdlGameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle);\n\n                int winFlags = SDL.WINDOW.GetWindowFlags(wndHandle);\n\n                Point pos, windowPos;\n                Sdl.Mouse.Button state = SDL.MOUSE.GetGlobalState(out pos.X, out pos.Y);\n                SDL.WINDOW.GetPosition(wndHandle, out windowPos.X, out windowPos.Y);\n                Point clientPos = pos - windowPos;\n\n                MouseState mouseState = new MouseState(\n                    x: clientPos.X, y: clientPos.Y,\n                    scrollWheel: ScrollY, horizontalScrollWheel: ScrollX,\n                    rawX: RawX, rawY: RawY,\n                    leftButton: (state & Sdl.Mouse.Button.Left) != 0 ? ButtonState.Pressed : ButtonState.Released,\n                    middleButton: (state & Sdl.Mouse.Button.Middle) != 0 ? ButtonState.Pressed : ButtonState.Released,\n                    rightButton: (state & Sdl.Mouse.Button.Right) != 0 ? ButtonState.Pressed : ButtonState.Released,\n                    xButton1: (state & Sdl.Mouse.Button.X1Mask) != 0 ? ButtonState.Pressed : ButtonState.Released,\n                    xButton2: (state & Sdl.Mouse.Button.X2Mask) != 0 ? ButtonState.Pressed : ButtonState.Released\n                    );\n\n                return mouseState;\n            }\n            else\n                return new MouseState();\n        }\n\n        public override void PlatformSetPosition(int x, int y)\n        {\n            SdlGameWindow gameWindow = SdlGameWindow.FromHandle(_wndHandle);\n\n            SDL.MOUSE.WarpInWindow(gameWindow.Handle, x, y);\n        }\n\n        public override void PlatformSetCursor(MouseCursor cursor)\n        {\n            SDL.MOUSE.SetCursor(cursor.Handle);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.SDL2/ConcreteMouseCursor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouseCursor : MouseCursorStrategy\n    {\n        private static Sdl SDL { get { return Sdl.Current; } }\n\n        public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            this._cursorType = cursorType;\n\n            Sdl.Mouse.SystemCursor cursor = CursorTypeToSDLCursor(cursorType);\n            this._handle = SDL.MOUSE.CreateSystemCursor(cursor);\n        }\n\n        private Sdl.Mouse.SystemCursor CursorTypeToSDLCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            switch (cursorType)\n            {\n                case MouseCursorStrategy.MouseCursorType.Arrow:\n                    return Sdl.Mouse.SystemCursor.Arrow;\n                case MouseCursorStrategy.MouseCursorType.IBeam:\n                    return Sdl.Mouse.SystemCursor.IBeam;\n                case MouseCursorStrategy.MouseCursorType.Wait:\n                    return Sdl.Mouse.SystemCursor.Wait;\n                case MouseCursorStrategy.MouseCursorType.Crosshair:\n                    return Sdl.Mouse.SystemCursor.Crosshair;\n                case MouseCursorStrategy.MouseCursorType.WaitArrow:\n                    return Sdl.Mouse.SystemCursor.WaitArrow;\n                case MouseCursorStrategy.MouseCursorType.SizeNWSE:\n                    return Sdl.Mouse.SystemCursor.SizeNWSE;\n                case MouseCursorStrategy.MouseCursorType.SizeNESW:\n                    return Sdl.Mouse.SystemCursor.SizeNESW;\n                case MouseCursorStrategy.MouseCursorType.SizeWE:\n                    return Sdl.Mouse.SystemCursor.SizeWE;\n                case MouseCursorStrategy.MouseCursorType.SizeNS:\n                    return Sdl.Mouse.SystemCursor.SizeNS;\n                case MouseCursorStrategy.MouseCursorType.SizeAll:\n                    return Sdl.Mouse.SystemCursor.SizeAll;\n                case MouseCursorStrategy.MouseCursorType.No:\n                    return Sdl.Mouse.SystemCursor.No;\n                case MouseCursorStrategy.MouseCursorType.Hand:\n                    return Sdl.Mouse.SystemCursor.Hand;\n\n                default:\n                    throw new InvalidOperationException(\"cursorType\");\n            }\n        }\n\n\n        public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy)\n        {\n            IntPtr surface = IntPtr.Zero;\n\n            try\n            {\n                surface = SDL.CreateRGBSurfaceFrom(data, w, h, 32, w * 4, 0x000000ff, 0x0000FF00, 0x00FF0000, 0xFF000000);\n                if (surface == IntPtr.Zero)\n                    throw new InvalidOperationException(\"Failed to create surface for mouse cursor: \" + SDL.GetError());\n\n                IntPtr handle = SDL.MOUSE.CreateColorCursor(surface, originx, originy);\n                if (handle == IntPtr.Zero)\n                    throw new InvalidOperationException(\"Failed to set surface for mouse cursor: \" + SDL.GetError());\n\n                this._cursorType = MouseCursorStrategy.MouseCursorType.User;\n                this._handle = handle;\n            }\n            finally\n            {\n                if (surface != IntPtr.Zero)\n                    SDL.FreeSurface(surface);\n            }\n        }\n\n        protected override void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n            }\n\n            if (this.Handle != IntPtr.Zero)\n                SDL.MOUSE.FreeCursor(this.Handle);\n\n            base.Dispose(dispose);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.SDL2/KeyboardUtil.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    internal static class KeyboardUtil\n    {\n        static Dictionary<int, Keys> _map;\n\n        static KeyboardUtil()\n        {\n            _map = new Dictionary<int, Keys>();\n            _map.Add(8, Keys.Back);\n            _map.Add(9, Keys.Tab);\n            _map.Add(13, Keys.Enter);\n            _map.Add(27, Keys.Escape);\n            _map.Add(32, Keys.Space);\n            _map.Add(39, Keys.OemQuotes);\n            _map.Add(43, Keys.Add);\n            _map.Add(44, Keys.OemComma);\n            _map.Add(45, Keys.OemMinus);\n            _map.Add(46, Keys.OemPeriod);\n            _map.Add(47, Keys.OemQuestion);\n            _map.Add(48, Keys.D0);\n            _map.Add(49, Keys.D1);\n            _map.Add(50, Keys.D2);\n            _map.Add(51, Keys.D3);\n            _map.Add(52, Keys.D4);\n            _map.Add(53, Keys.D5);\n            _map.Add(54, Keys.D6);\n            _map.Add(55, Keys.D7);\n            _map.Add(56, Keys.D8);\n            _map.Add(57, Keys.D9);\n            _map.Add(59, Keys.OemSemicolon);\n            _map.Add(60, Keys.OemBackslash);\n            _map.Add(61, Keys.OemPlus);\n            _map.Add(91, Keys.OemOpenBrackets);\n            _map.Add(92, Keys.OemPipe);\n            _map.Add(93, Keys.OemCloseBrackets);\n            _map.Add(96, Keys.OemTilde);\n            _map.Add(97, Keys.A);\n            _map.Add(98, Keys.B);\n            _map.Add(99, Keys.C);\n            _map.Add(100, Keys.D);\n            _map.Add(101, Keys.E);\n            _map.Add(102, Keys.F);\n            _map.Add(103, Keys.G);\n            _map.Add(104, Keys.H);\n            _map.Add(105, Keys.I);\n            _map.Add(106, Keys.J);\n            _map.Add(107, Keys.K);\n            _map.Add(108, Keys.L);\n            _map.Add(109, Keys.M);\n            _map.Add(110, Keys.N);\n            _map.Add(111, Keys.O);\n            _map.Add(112, Keys.P);\n            _map.Add(113, Keys.Q);\n            _map.Add(114, Keys.R);\n            _map.Add(115, Keys.S);\n            _map.Add(116, Keys.T);\n            _map.Add(117, Keys.U);\n            _map.Add(118, Keys.V);\n            _map.Add(119, Keys.W);\n            _map.Add(120, Keys.X);\n            _map.Add(121, Keys.Y);\n            _map.Add(122, Keys.Z);\n            _map.Add(127, Keys.Delete);\n            _map.Add(1073741881, Keys.CapsLock);\n            _map.Add(1073741882, Keys.F1);\n            _map.Add(1073741883, Keys.F2);\n            _map.Add(1073741884, Keys.F3);\n            _map.Add(1073741885, Keys.F4);\n            _map.Add(1073741886, Keys.F5);\n            _map.Add(1073741887, Keys.F6);\n            _map.Add(1073741888, Keys.F7);\n            _map.Add(1073741889, Keys.F8);\n            _map.Add(1073741890, Keys.F9);\n            _map.Add(1073741891, Keys.F10);\n            _map.Add(1073741892, Keys.F11);\n            _map.Add(1073741893, Keys.F12);\n            _map.Add(1073741894, Keys.PrintScreen);\n            _map.Add(1073741895, Keys.Scroll);\n            _map.Add(1073741896, Keys.Pause);\n            _map.Add(1073741897, Keys.Insert);\n            _map.Add(1073741898, Keys.Home);\n            _map.Add(1073741899, Keys.PageUp);\n            _map.Add(1073741901, Keys.End);\n            _map.Add(1073741902, Keys.PageDown);\n            _map.Add(1073741903, Keys.Right);\n            _map.Add(1073741904, Keys.Left);\n            _map.Add(1073741905, Keys.Down);\n            _map.Add(1073741906, Keys.Up);\n            _map.Add(1073741907, Keys.NumLock);\n            _map.Add(1073741908, Keys.Divide);\n            _map.Add(1073741909, Keys.Multiply);\n            _map.Add(1073741910, Keys.Subtract);\n            _map.Add(1073741911, Keys.Add);\n            _map.Add(1073741912, Keys.Enter);\n            _map.Add(1073741913, Keys.NumPad1);\n            _map.Add(1073741914, Keys.NumPad2);\n            _map.Add(1073741915, Keys.NumPad3);\n            _map.Add(1073741916, Keys.NumPad4);\n            _map.Add(1073741917, Keys.NumPad5);\n            _map.Add(1073741918, Keys.NumPad6);\n            _map.Add(1073741919, Keys.NumPad7);\n            _map.Add(1073741920, Keys.NumPad8);\n            _map.Add(1073741921, Keys.NumPad9);\n            _map.Add(1073741922, Keys.NumPad0);\n            _map.Add(1073741923, Keys.Decimal);\n            _map.Add(1073741925, Keys.Apps);\n            _map.Add(1073741928, Keys.F13);\n            _map.Add(1073741929, Keys.F14);\n            _map.Add(1073741930, Keys.F15);\n            _map.Add(1073741931, Keys.F16);\n            _map.Add(1073741932, Keys.F17);\n            _map.Add(1073741933, Keys.F18);\n            _map.Add(1073741934, Keys.F19);\n            _map.Add(1073741935, Keys.F20);\n            _map.Add(1073741936, Keys.F21);\n            _map.Add(1073741937, Keys.F22);\n            _map.Add(1073741938, Keys.F23);\n            _map.Add(1073741939, Keys.F24);\n            _map.Add(1073741951, Keys.VolumeMute);\n            _map.Add(1073741952, Keys.VolumeUp);\n            _map.Add(1073741953, Keys.VolumeDown);\n            _map.Add(1073742040, Keys.OemClear);\n            _map.Add(1073742044, Keys.Decimal);\n            _map.Add(1073742048, Keys.LeftControl);\n            _map.Add(1073742049, Keys.LeftShift);\n            _map.Add(1073742050, Keys.LeftAlt);\n            _map.Add(1073742051, Keys.LeftWindows);\n            _map.Add(1073742052, Keys.RightControl);\n            _map.Add(1073742053, Keys.RightShift);\n            _map.Add(1073742054, Keys.RightAlt);\n            _map.Add(1073742055, Keys.RightWindows);\n            _map.Add(1073742082, Keys.MediaNextTrack);\n            _map.Add(1073742083, Keys.MediaPreviousTrack);\n            _map.Add(1073742084, Keys.MediaStop);\n            _map.Add(1073742085, Keys.MediaPlayPause);\n            _map.Add(1073742086, Keys.VolumeMute);\n            _map.Add(1073742087, Keys.SelectMedia);\n            _map.Add(1073742089, Keys.LaunchMail);\n            _map.Add(1073742092, Keys.BrowserSearch);\n            _map.Add(1073742093, Keys.BrowserHome);\n            _map.Add(1073742094, Keys.BrowserBack);\n            _map.Add(1073742095, Keys.BrowserForward);\n            _map.Add(1073742096, Keys.BrowserStop);\n            _map.Add(1073742097, Keys.BrowserRefresh);\n            _map.Add(1073742098, Keys.BrowserFavorites);\n            _map.Add(1073742106, Keys.Sleep);\n        }\n\n        public static Keys ToXna(int key)\n        {\n            Keys xnaKey;\n            if (_map.TryGetValue(key, out xnaKey))\n                return xnaKey;\n\n            return Keys.None;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Input/.SDL2/Touch/ConcreteTouchPanel.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public sealed class ConcreteTouchPanel : TouchPanelStrategy\n    {\n\n        public override IntPtr WindowHandle\n        {\n            get { return base.WindowHandle; }\n            set { base.WindowHandle = value; }\n        }\n\n        public override int DisplayWidth\n        {\n            get { return base.DisplayWidth; }\n            set { base.DisplayWidth = value; }\n        }\n\n        public override int DisplayHeight\n        {\n            get { return base.DisplayHeight; }\n            set { base.DisplayHeight = value; }\n        }\n\n        public override DisplayOrientation DisplayOrientation\n        {\n            get { return base.DisplayOrientation; }\n            set { base.DisplayOrientation = value; }\n        }\n\n        public override GestureType EnabledGestures\n        {\n            get { return base.EnabledGestures; }\n            set { base.EnabledGestures = value; }\n        }\n\n\n        public override bool IsGestureAvailable\n        {\n            get { return base.IsGestureAvailable; }\n        }\n\n        public ConcreteTouchPanel()\n            : base()\n        {\n            // Initialize Capabilities\n            int maximumTouchCount = 0;\n            bool isConnected = false;\n            bool hasPressure = false;\n            _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure);\n        }\n\n        public override TouchPanelCapabilities GetCapabilities()\n        {\n            return _capabilities;\n        }\n\n        public override TouchCollection GetState()\n        {\n            return base.GetState();\n        }\n\n        public override GestureSample ReadGesture()\n        {\n            return base.ReadGesture();\n        }\n\n        public override void AddPressedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddPressedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddMovedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddMovedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddReleasedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n        public override void AddCanceledEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteGamePad.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing WGI = Windows.Gaming.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    // TODO: move GamePadDevice to Framework.Input library\n    public abstract class GamePadDevice\n    {\n        public GamePadCapabilities Capabilities;\n\n        public GamePadDevice()\n        {\n\n        }\n    }\n\n    public sealed class ConcreteGamePad : GamePadStrategy\n    {\n        // Attempts to mimic SharpDX.XInput.Gamepad which defines the trigger threshold as 30 with a range of 0 to 255. \n        // The trigger here has a range of 0.0 to 1.0. So, 30 / 255 = 0.11765.\n        private const double TriggerThreshold = 0.11765;\n\n        const int MaxNumberOfGamePads = 16;\n\n        internal bool Back;\n\n        private WGIGamePadDevice[] _gamepads;\n        private int _initGamepadsCount;\n\n        // Default & SDL Xbox Controller dead zones\n        // Based on the XInput constants\n        public override float LeftThumbDeadZone { get { return 0.24f; } }\n        public override float RightThumbDeadZone { get { return 0.265f; } }\n\n        public ConcreteGamePad()\n        {\n            _gamepads = new WGIGamePadDevice[MaxNumberOfGamePads];\n            IReadOnlyList<WGI.Gamepad> gamepadsTmp = WGI.Gamepad.Gamepads;\n            _initGamepadsCount = gamepadsTmp.Count; // workaround UAP bug. first call to 'WGI.Gamepad.Gamepads' returns an empty instance.\n            IReadOnlyList<WGI.Gamepad> gamepads = WGI.Gamepad.Gamepads;\n            for (int i = 0; i < _gamepads.Length && i < gamepads.Count; i++)\n            {\n                _gamepads[i] = new WGIGamePadDevice(gamepads[i]);\n                _gamepads[i].Capabilities = CreateCapabilities(_gamepads[i]);\n            }\n\n            WGI.Gamepad.GamepadAdded += WGIGamepad_GamepadAdded;\n            WGI.Gamepad.GamepadRemoved += WGIGamepad_GamepadRemoved;\n        }\n\n        private void WGIGamepad_GamepadAdded(object sender, WGI.Gamepad device)\n        {\n            for (int i = 0; i < _gamepads.Length; i++)\n            {\n                if (_gamepads[i] == null)\n                {\n                    _gamepads[i] = new WGIGamePadDevice(device);\n                    _gamepads[i].Capabilities = CreateCapabilities(_gamepads[i]);\n                    break;\n                }\n            }\n        }\n\n        private void WGIGamepad_GamepadRemoved(object sender, WGI.Gamepad device)\n        {\n            for (int i = 0; i < _gamepads.Length; i++)\n            {\n                if (_gamepads[i]._device == device)\n                {\n                    _gamepads[i] = null;\n                    break;\n                }\n            }\n        }\n\n        public override int PlatformGetMaxNumberOfGamePads()\n        {\n            return MaxNumberOfGamePads;\n        }\n\n        private GamePadCapabilities GetDefaultCapabilities()\n        {\n            return base.CreateGamePadCapabilities(\n                    gamePadType: GamePadType.Unknown,\n                    displayName: null,\n                    identifier: null,\n                    isConnected: false,\n                    buttons: (Buttons)0,\n                    hasLeftVibrationMotor: false,\n                    hasRightVibrationMotor: false,\n                    hasVoiceSupport: false\n                );\n        }\n\n        public override GamePadCapabilities PlatformGetCapabilities(int index)\n        {\n            WGIGamePadDevice gamepadDevice = _gamepads[index];\n            if (gamepadDevice == null)\n                return GetDefaultCapabilities();\n\n            return gamepadDevice.Capabilities;\n        }\n\n        private GamePadCapabilities CreateCapabilities(WGIGamePadDevice gamepadDevice)\n        {\n            //--\n            GamePadType gamePadType = GamePadType.Unknown;\n            string displayName = String.Empty;\n            string identifier = String.Empty;\n            bool isConnected;\n            Buttons buttons = (Buttons)0;\n            bool hasLeftVibrationMotor = false;\n            bool hasRightVibrationMotor = false;\n            bool hasVoiceSupport = false;\n            //--\n\n            // we can't check gamepad capabilities for most stuff with Windows.Gaming.Input.Gamepad\n            {\n                isConnected = true;\n                gamePadType = GamePadType.GamePad;\n                buttons |= Buttons.A;\n                buttons |= Buttons.B;\n                buttons |= Buttons.X;\n                buttons |= Buttons.Y;\n                buttons |= Buttons.Back;\n                buttons |= Buttons.Start;\n                buttons |= Buttons.DPadDown;\n                buttons |= Buttons.DPadLeft;\n                buttons |= Buttons.DPadRight;\n                buttons |= Buttons.DPadUp;\n                buttons |= Buttons.LeftShoulder;\n                buttons |= Buttons.RightShoulder;\n                buttons |= Buttons.LeftStick;\n                buttons |= Buttons.RightStick;\n                buttons |= Buttons.LeftTrigger;\n                buttons |= Buttons.RightTrigger;\n                buttons |= Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight;\n                buttons |= Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp;\n                buttons |= Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight;\n                buttons |= Buttons.RightThumbstickDown | Buttons.RightThumbstickUp;\n                hasLeftVibrationMotor = true;\n                hasRightVibrationMotor = true;\n                hasVoiceSupport = (gamepadDevice._device.Headset != null && !string.IsNullOrEmpty(gamepadDevice._device.Headset.CaptureDeviceId));\n            };\n\n            return base.CreateGamePadCapabilities(\n                    gamePadType: gamePadType,\n                    displayName: displayName,\n                    identifier: identifier,\n                    isConnected: isConnected,\n                    buttons: buttons,\n                    hasLeftVibrationMotor: hasLeftVibrationMotor,\n                    hasRightVibrationMotor: hasRightVibrationMotor,\n                    hasVoiceSupport: hasVoiceSupport\n                );\n        }\n\n        private GamePadState GetDefaultState()\n        {\n            GamePadButtons buttons = new GamePadButtons((Back) ? Buttons.Back : 0);\n            return base.CreateGamePadState(default(GamePadThumbSticks), default(GamePadTriggers), buttons, default(GamePadDPad),\n                        isConnected: false);\n        }\n\n        public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            WGIGamePadDevice gamepadDevice = _gamepads[index];\n            if (gamepadDevice == null)\n            {\n                if (index == 0)\n                    return GetDefaultState(); // emulate Back button\n                else\n                    return new GamePadState();\n            }\n\n            WGI.GamepadReading state = gamepadDevice._device.GetCurrentReading();\n\n            GamePadThumbSticks sticks = base.CreateGamePadThumbSticks(\n                    new Vector2((float)state.LeftThumbstickX, (float)state.LeftThumbstickY),\n                    new Vector2((float)state.RightThumbstickX, (float)state.RightThumbstickY),\n                    leftDeadZoneMode,\n                    rightDeadZoneMode\n                );\n\n            GamePadTriggers triggers = new GamePadTriggers(\n                    (float)state.LeftTrigger,\n                    (float)state.RightTrigger\n                );\n\n            Buttons buttonStates =\n                (state.Buttons.HasFlag(WGI.GamepadButtons.A) ? Buttons.A : 0) |\n                (state.Buttons.HasFlag(WGI.GamepadButtons.B) ? Buttons.B : 0) |\n                ((state.Buttons.HasFlag(WGI.GamepadButtons.View) || Back) ? Buttons.Back : 0) |\n                0 | //BigButton is unavailable by Windows.Gaming.Input.Gamepad\n                (state.Buttons.HasFlag(WGI.GamepadButtons.LeftShoulder) ? Buttons.LeftShoulder : 0) |\n                (state.Buttons.HasFlag(WGI.GamepadButtons.LeftThumbstick) ? Buttons.LeftStick : 0) |\n                (state.Buttons.HasFlag(WGI.GamepadButtons.RightShoulder) ? Buttons.RightShoulder : 0) |\n                (state.Buttons.HasFlag(WGI.GamepadButtons.RightThumbstick) ? Buttons.RightStick : 0) |\n                (state.Buttons.HasFlag(WGI.GamepadButtons.Menu) ? Buttons.Start : 0) |\n                (state.Buttons.HasFlag(WGI.GamepadButtons.X) ? Buttons.X : 0) |\n                (state.Buttons.HasFlag(WGI.GamepadButtons.Y) ? Buttons.Y : 0) |\n                0;\n\n            // Check triggers\n            if (triggers.Left > TriggerThreshold)\n                buttonStates |= Buttons.LeftTrigger;\n            if (triggers.Right > TriggerThreshold)\n                buttonStates |= Buttons.RightTrigger;\n\n            GamePadButtons buttons = new GamePadButtons(buttonStates);\n\n            GamePadDPad dpad = new GamePadDPad(\n                    state.Buttons.HasFlag(WGI.GamepadButtons.DPadUp)   ? ButtonState.Pressed : ButtonState.Released,\n                    state.Buttons.HasFlag(WGI.GamepadButtons.DPadDown) ? ButtonState.Pressed : ButtonState.Released,\n                    state.Buttons.HasFlag(WGI.GamepadButtons.DPadLeft)  ? ButtonState.Pressed : ButtonState.Released,\n                    state.Buttons.HasFlag(WGI.GamepadButtons.DPadRight) ? ButtonState.Pressed : ButtonState.Released\n                );\n\n            return base.CreateGamePadState(sticks, triggers, buttons, dpad,\n                                           packetNumber: (int)state.Timestamp);\n        }\n\n        public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            WGIGamePadDevice gamepadDevice = _gamepads[index];\n            if (gamepadDevice == null)\n                return false;\n\n            WGI.GamepadVibration gamepadVibration = new WGI.GamepadVibration();\n            gamepadVibration.LeftMotor = leftMotor;\n            gamepadVibration.LeftTrigger = leftTrigger;\n            gamepadVibration.RightMotor = rightMotor;\n            gamepadVibration.RightTrigger = rightTrigger;\n\n            gamepadDevice._device.Vibration = gamepadVibration;\n\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteGamePadDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing WGI = Windows.Gaming.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    internal class WGIGamePadDevice : GamePadDevice\n    {\n        public WGI.Gamepad _device;\n\n        public WGIGamePadDevice(WGI.Gamepad device)\n            : base()\n        {\n            _device = device;\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteInputFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteInputFactory : InputFactory\n    {\n\n        public override GamePadStrategy CreateGamePadStrategy()\n        {\n            return new ConcreteGamePad();\n        }\n\n        public override JoystickStrategy CreateJoystickStrategy()\n        {\n            return new ConcreteJoystick();\n        }\n\n        public override KeyboardStrategy CreateKeyboardStrategy()\n        {\n            return new ConcreteKeyboard();\n        }\n\n        public override MouseStrategy CreateMouseStrategy()\n        {\n            return new ConcreteMouse();\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            return new ConcreteMouseCursor(cursorType);\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy)\n        {\n            return new ConcreteMouseCursor(data, w, h, originx, originy);\n        }\n\n        public override TouchPanelStrategy CreateTouchPanelStrategy()\n        {\n            return new ConcreteTouchPanel();\n        }\n\n        public override KeyboardInputStrategy CreateKeyboardInputStrategy()\n        {\n            return new ConcreteKeyboardInput();\n        }\n\n        public override MessageBoxStrategy CreateMessageBoxStrategy()\n        {\n            return new ConcreteMessageBox();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteJoystick.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteJoystick : JoystickStrategy\n    {\n        public override bool PlatformIsSupported\n        {\n            get { return false; }\n        }\n\n        public override int PlatformLastConnectedIndex\n        {\n            get { return -1; }\n        }\n\n        public override JoystickCapabilities PlatformGetCapabilities(int index)\n        {\n            return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0);\n        }\n\n        public override JoystickState PlatformGetState(int index)\n        {\n            return JoystickStrategy.DefaultJoystickState;\n        }\n\n\n        public override void PlatformGetState(int index, ref JoystickState joystickState)\n        {\n\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteKeyboard.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboard : KeyboardStrategy\n    {\n        private KeyboardState _keyboardState;\n        private KeyboardState _nextKeyboardState;\n\n        public override KeyboardState PlatformGetState()\n        {\n            return _keyboardState;\n        }\n\n        internal void UpdateState()\n        {\n            _keyboardState = _nextKeyboardState;\n        }\n\n        internal void SetKey(Keys key)\n        {\n            base.InternalSetKey(ref _nextKeyboardState, key);\n        }\n\n        internal void ResetKey(Keys key)\n        {\n            base.InternalResetKey(ref _nextKeyboardState, key);\n        }\n                \n        internal void ResetKeys()\n        {\n            base.InternalResetKeys(ref _nextKeyboardState);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteKeyboardInput.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Input;\nusing Windows.ApplicationModel.Core;\nusing Windows.UI.Core;\nusing Windows.UI.ViewManagement;\n\n#if UAP\nusing Windows.System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Media.Animation;\n#endif\n\n#if WINUI\nusing Microsoft.Windows.System;\nusing Microsoft.UI.Xaml;\nusing Microsoft.UI.Xaml.Controls;\nusing Microsoft.UI.Xaml.Controls.Primitives;\nusing Microsoft.UI.Xaml.Input;\nusing Microsoft.UI.Xaml.Media;\nusing Microsoft.UI.Xaml.Media.Animation;\n#endif\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboardInput : KeyboardInputStrategy\n    {\n        private readonly CoreDispatcher _dispatcher;\n\n        private TaskCompletionSource<string> _tcs;\n        private InputDialog _inputDialog;\n\n        public ConcreteKeyboardInput()\n        {\n            _dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;\n        }\n\n        public override Task<string> PlatformShow(string title, string description, string defaultText, bool usePasswordMode)\n        {\n            _tcs = new TaskCompletionSource<string>();\n\n            _dispatcher.RunAsync(CoreDispatcherPriority.Normal,\n                async () =>\n                {\n                    _inputDialog = new InputDialog();\n                    string result = await _inputDialog.ShowAsync(title, description, defaultText, usePasswordMode);\n\n                    if (!_tcs.Task.IsCompleted)\n                        _tcs.SetResult(result);\n                });\n\n            return _tcs.Task;\n        }\n\n        public override void PlatformCancel(string result)\n        {\n            _dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => await _inputDialog.CloseAsync());\n\n            _tcs.SetResult(result);\n        }\n    }\n\n    #region Keyboard Input UI\n    [TemplatePart(Name = LayoutRootPanelName, Type = typeof(Panel))]\n    [TemplatePart(Name = ContentBorderName, Type = typeof(Border))]\n    [TemplatePart(Name = InputTextBoxName, Type = typeof(TextBox))]\n    [TemplatePart(Name = TitleTextBlockName, Type = typeof(TextBlock))]\n    [TemplatePart(Name = TextTextBlockName, Type = typeof(TextBlock))]\n    [TemplatePart(Name = ButtonsPanelName, Type = typeof(Panel))]\n    [TemplateVisualState(GroupName = PopupStatesGroupName, Name = OpenPopupStateName)]\n    [TemplateVisualState(GroupName = PopupStatesGroupName, Name = ClosedPopupStateName)]\n    [StyleTypedProperty(Property = \"ButtonStyle\", StyleTargetType = typeof(ButtonBase))]\n    [StyleTypedProperty(Property = \"TitleStyle\", StyleTargetType = typeof(TextBlock))]\n    [StyleTypedProperty(Property = \"TextStyle\", StyleTargetType = typeof(TextBlock))]\n    [StyleTypedProperty(Property = \"InputTextStyle\", StyleTargetType = typeof(TextBox))]\n    [StyleTypedProperty(Property = \"InputPasswordStyle\", StyleTargetType = typeof(PasswordBox))]\n    sealed class InputDialog : Control\n    {\n        private const string PopupStatesGroupName = \"PopupStates\";\n        private const string OpenPopupStateName = \"OpenPopupState\";\n        private const string ClosedPopupStateName = \"ClosedPopupState\";\n\n        private const string LayoutRootPanelName = \"LayoutRoot\";\n        private const string ContentBorderName = \"ContentBorder\";\n        private const string InputTextBoxName = \"InputTextBox\";\n        private const string InputPasswordBoxName = \"InputPasswordBox\";\n        private const string TitleTextBlockName = \"TitleTextBlock\";\n        private const string TextTextBlockName = \"TextTextBlock\";\n        private const string ButtonsPanelName = \"ButtonsPanel\";\n\n        private const string VirtualKeyboardSlideStoryBoardName = \"VirtualKeyboardSlideStoryBoard\";\n        private const string VirtualKeyboardAnimationName = \"VirtualKeyboardAnimation\";\n        private const string BlackStripeTransformName = \"BlackStripeTransform\";\n\n        private Panel _layoutRoot;\n        private Border _contentBorder;\n        private TextBox _inputTextBox;\n        private PasswordBox _inputPasswordBox;\n        private TextBlock _titleTextBlock;\n        private TextBlock _textTextBlock;\n        private Panel _buttonsPanel;\n\n        private bool _usePasswordMode;\n        private bool _shown;\n        private TaskCompletionSource<string> _dismissTaskSource;\n        private List<ButtonBase> _buttons;\n\n        private Popup _dialogPopup;\n        private Panel _parentPanel;\n        private Panel _temporaryParentPanel;\n        private ContentControl _parentContentControl;\n\n        private TranslateTransform _blackStripeTransform;\n\n        private Storyboard _virtualKeyboardSlideStoryboard;\n\n        private DoubleAnimation _virtualKeyboardSlideAnimation;\n\n        public static readonly DependencyProperty ButtonStyleProperty =\n            DependencyProperty.Register(\n                \"ButtonStyle\",\n                typeof(Style),\n                typeof(InputDialog),\n                new PropertyMetadata(null));\n\n        public Style ButtonStyle\n        {\n            get { return (Style)GetValue(ButtonStyleProperty); }\n            set { SetValue(ButtonStyleProperty, value); }\n        }\n\n        public static readonly DependencyProperty InputTextProperty =\n            DependencyProperty.Register(\n                \"InputText\",\n                typeof(string),\n                typeof(InputDialog),\n                new PropertyMetadata(\"\", OnInputTextChanged));\n\n        private string InputText\n        {\n            get { return (string)GetValue(InputTextProperty); }\n            set { SetValue(InputTextProperty, value); }\n        }\n\n        private static void OnInputTextChanged(\n            DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            InputDialog target = (InputDialog)d;\n            string newInputText = target.InputText;\n            target.OnInputTextChanged(newInputText);\n        }\n\n        private void OnInputTextChanged(string newInputText)\n        {\n            if (_inputTextBox != null)\n            {\n                _inputTextBox.Text = newInputText;\n            }\n            if (_inputPasswordBox != null)\n            {\n                _inputPasswordBox.Password = newInputText;\n            }\n        }\n\n        public static readonly DependencyProperty BackgroundScreenBrushProperty =\n            DependencyProperty.Register(\n                \"BackgroundScreenBrush\",\n                typeof(Brush),\n                typeof(InputDialog),\n                new PropertyMetadata(null));\n\n        public Brush BackgroundScreenBrush\n        {\n            get { return (Brush)GetValue(BackgroundScreenBrushProperty); }\n            set { SetValue(BackgroundScreenBrushProperty, value); }\n        }\n\n        public static readonly DependencyProperty BackgroundStripeBrushProperty =\n            DependencyProperty.Register(\n                \"BackgroundStripeBrush\",\n                typeof(Brush),\n                typeof(InputDialog),\n                new PropertyMetadata(null));\n\n        public Brush BackgroundStripeBrush\n        {\n            get { return (Brush)GetValue(BackgroundStripeBrushProperty); }\n            set { SetValue(BackgroundStripeBrushProperty, value); }\n        }\n\n        public static readonly DependencyProperty TitleStyleProperty =\n            DependencyProperty.Register(\n                \"TitleStyle\",\n                typeof(Style),\n                typeof(InputDialog),\n                new PropertyMetadata(null));\n\n        public Style TitleStyle\n        {\n            get { return (Style)GetValue(TitleStyleProperty); }\n            set { SetValue(TitleStyleProperty, value); }\n        }\n\n        public static readonly DependencyProperty TextStyleProperty =\n            DependencyProperty.Register(\n                \"TextStyle\",\n                typeof(Style),\n                typeof(InputDialog),\n                new PropertyMetadata(null, OnTextStyleChanged));\n\n        public Style TextStyle\n        {\n            get { return (Style)GetValue(TextStyleProperty); }\n            set { SetValue(TextStyleProperty, value); }\n        }\n\n        private static void OnTextStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            InputDialog target = (InputDialog)d;\n            Style oldTextStyle = (Style)e.OldValue;\n            Style newTextStyle = target.TextStyle;\n            target.OnTextStyleChanged(oldTextStyle, newTextStyle);\n        }\n\n        private void OnTextStyleChanged(Style oldTextStyle, Style newTextStyle)\n        {\n        }\n\n        public static readonly DependencyProperty InputTextStyleProperty =\n            DependencyProperty.Register(\n                \"InputTextStyle\",\n                typeof(Style),\n                typeof(InputDialog),\n                new PropertyMetadata(null));\n\n        public Style InputTextStyle\n        {\n            get { return (Style)GetValue(InputTextStyleProperty); }\n            set { SetValue(InputTextStyleProperty, value); }\n        }\n\n        public static readonly DependencyProperty InputPasswordStyleProperty =\n            DependencyProperty.Register(\n                \"InputPasswordStyle\",\n                typeof(Style),\n                typeof(InputDialog),\n                new PropertyMetadata(null));\n\n        public Style InputPasswordStyle\n        {\n            get { return (Style)GetValue(InputPasswordStyleProperty); }\n            set { SetValue(InputPasswordStyleProperty, value); }\n        }\n\n        public static readonly DependencyProperty IsLightDismissEnabledProperty =\n            DependencyProperty.Register(\n                \"IsLightDismissEnabled\",\n                typeof(bool),\n                typeof(InputDialog),\n                new PropertyMetadata(false));\n\n        public bool IsLightDismissEnabled\n        {\n            get { return (bool)GetValue(IsLightDismissEnabledProperty); }\n            set { SetValue(IsLightDismissEnabledProperty, value); }\n        }\n\n        public static readonly DependencyProperty AwaitsCloseTransitionProperty =\n            DependencyProperty.Register(\n                \"AwaitsCloseTransition\",\n                typeof(bool),\n                typeof(InputDialog),\n                new PropertyMetadata(true));\n\n        public bool AwaitsCloseTransition\n        {\n            get { return (bool)GetValue(AwaitsCloseTransitionProperty); }\n            set { SetValue(AwaitsCloseTransitionProperty, value); }\n        }\n\n        public static readonly DependencyProperty ButtonsPanelOrientationProperty =\n            DependencyProperty.Register(\n                \"ButtonsPanelOrientation\",\n                typeof(Orientation),\n                typeof(InputDialog),\n                new PropertyMetadata(Orientation.Horizontal));\n\n        public Orientation ButtonsPanelOrientation\n        {\n            get { return (Orientation)GetValue(ButtonsPanelOrientationProperty); }\n            set { SetValue(ButtonsPanelOrientationProperty, value); }\n        }\n\n        public InputDialog()\n        {\n            DefaultStyleKey = typeof(InputDialog);\n\n            Visibility = Visibility.Collapsed;\n        }\n\n        protected override void OnApplyTemplate()\n        {\n            base.OnApplyTemplate();\n            _layoutRoot = GetTemplateChild(LayoutRootPanelName) as Panel;\n            _contentBorder = GetTemplateChild(ContentBorderName) as Border;\n\n            _inputTextBox = GetTemplateChild(InputTextBoxName) as TextBox;\n            _inputPasswordBox = GetTemplateChild(InputPasswordBoxName) as PasswordBox;\n            _titleTextBlock = GetTemplateChild(TitleTextBlockName) as TextBlock;\n            _textTextBlock = GetTemplateChild(TextTextBlockName) as TextBlock;\n            _buttonsPanel = GetTemplateChild(ButtonsPanelName) as Panel;\n\n            _virtualKeyboardSlideStoryboard = GetTemplateChild(VirtualKeyboardSlideStoryBoardName) as Storyboard;\n            _virtualKeyboardSlideAnimation = GetTemplateChild(VirtualKeyboardAnimationName) as DoubleAnimation;\n            _blackStripeTransform = this.GetTemplateChild(BlackStripeTransformName) as TranslateTransform;\n\n            if (_layoutRoot != null)\n                _layoutRoot.Tapped += OnLayoutRootTapped;\n            if (_inputTextBox != null && _inputPasswordBox != null)\n            {\n                _inputTextBox.Text = InputText;\n                _inputTextBox.IsTextPredictionEnabled = false;\n                _inputTextBox.TextChanged += OnInputTextBoxTextChanged;\n                _inputTextBox.KeyUp += OnInputTextBoxKeyUp;\n\n                _inputPasswordBox.Password = InputText;\n                _inputPasswordBox.PasswordChanged += OnInputPasswordBoxTextChanged;\n                _inputPasswordBox.KeyUp += OnInputTextBoxKeyUp;\n\n                if (_usePasswordMode)\n                {\n                    _inputTextBox.Visibility = Visibility.Collapsed;\n                    _inputTextBox = null;\n                    _inputPasswordBox.Visibility = Visibility.Visible;\n                }\n                else\n                {\n                    _inputTextBox.Visibility = Visibility.Visible;\n                    _inputPasswordBox.Visibility = Visibility.Collapsed;\n                    _inputPasswordBox = null;\n                }\n            }\n            if (_contentBorder != null)\n                _contentBorder.Tapped += OnContentBorderTapped;\n        }\n\n        private void OnGlobalKeyUp(object sender, KeyRoutedEventArgs e)\n        {\n            if (e.Key == VirtualKey.Escape)\n            {\n                DismissDialog();\n                e.Handled = true;\n            }\n        }\n\n        private void OnLayoutRootTapped(object sender, TappedRoutedEventArgs e)\n        {\n            _buttons[0].Focus(FocusState.Programmatic); // Hide input panel\n\n            if (e.OriginalSource == sender &&\n                IsLightDismissEnabled)\n            {\n                _dismissTaskSource.TrySetResult(null);\n                e.Handled = true;\n            }\n        }\n\n        private void OnContentBorderTapped(object sender, TappedRoutedEventArgs e)\n        {\n            if (e.OriginalSource == sender)\n            {\n                _buttons[0].Focus(FocusState.Programmatic);\n                e.Handled = true;\n            }\n        }\n\n        private void OnInputTextBoxTextChanged(object sender, TextChangedEventArgs e)\n        {\n            InputText = _inputTextBox.Text;\n        }\n\n        private void OnInputPasswordBoxTextChanged(object sender, RoutedEventArgs e)\n        {\n            InputText = _inputPasswordBox.Password;\n        }\n\n        public async Task<string> ShowAsync(string title, string text, string defaultText, bool usePasswordMode)\n        {\n            _usePasswordMode = usePasswordMode;\n            if (_shown)\n            {\n                throw new InvalidOperationException(\"The dialog is already shown.\");\n            }\n\n            Visibility = Visibility.Visible;\n            _shown = true;\n\n#if UAP\n            Window window = Window.Current;\n#elif WINUI\n            Window window = App.Window;\n#endif\n            window.Content.KeyUp += OnGlobalKeyUp;\n            _dismissTaskSource = new TaskCompletionSource<string>();\n\n            _parentPanel = Parent as Panel;\n            _parentContentControl = Parent as ContentControl;\n\n            if (_parentPanel != null)\n            {\n                _parentPanel.Children.Remove(this);\n            }\n\n            if (_parentContentControl != null)\n            {\n                _parentContentControl.Content = null;\n            }\n\n            _dialogPopup = new Popup { Child = this };\n\n            if (_parentPanel != null)\n            {\n                _parentPanel.Children.Add(_dialogPopup);\n                _parentPanel.SizeChanged += OnParentSizeChanged;\n            }\n            else if (_parentContentControl != null)\n            {\n                _parentContentControl.Content = _dialogPopup;\n                _parentContentControl.SizeChanged += OnParentSizeChanged;\n            }\n            else\n            {\n                _temporaryParentPanel = GetDescendants(window.Content).OfType<Panel>().FirstOrDefault();\n\n                if (_temporaryParentPanel != null)\n                {\n                    _temporaryParentPanel.Children.Add(_dialogPopup);\n                    _temporaryParentPanel.SizeChanged += OnParentSizeChanged;\n                }\n            }\n\n            _dialogPopup.IsOpen = true;\n\n            await WaitForLayoutUpdateAsync(this);\n\n            _titleTextBlock.Text = title;\n            _textTextBlock.Text = text;\n            InputText = defaultText;\n\n            _buttons = new List<ButtonBase>();\n\n            // Button OK\n            Button btnOK = new Button();\n            if (ButtonStyle != null)\n                btnOK.Style = ButtonStyle;\n            btnOK.Content = \"OK\";\n            btnOK.Tag = 0;\n            btnOK.Click += OnButtonClick;\n            btnOK.KeyUp += OnGlobalKeyUp;\n            _buttons.Add(btnOK);\n            _buttonsPanel.Children.Add(btnOK);\n\n            // Button Cancel\n            Button btnCancel = new Button();\n            if (ButtonStyle != null)\n                btnCancel.Style = ButtonStyle;\n            btnCancel.Content = \"Cancel\";\n            btnCancel.Tag = 1;\n            btnCancel.Click += OnButtonClick;\n            btnCancel.KeyUp += OnGlobalKeyUp;\n            _buttons.Add(btnCancel);\n            _buttonsPanel.Children.Add(btnCancel);\n\n#if UAP\n            InputPane inputPane = InputPane.GetForCurrentView();\n#elif WINUI\n            InputPane inputPane = InputPaneInterop.GetForWindow();\n#endif\n            inputPane.Showing += InputDialog_Showing;\n            inputPane.Hiding += InputDialod_Hiding;\n\n            if (_inputTextBox != null)\n                _inputTextBox.Focus(FocusState.Programmatic);\n            if (_inputPasswordBox != null)\n                _inputPasswordBox.Focus(FocusState.Programmatic);\n\n            ResizeLayoutRoot();\n\n            // Show dialog\n            await GoToVisualStateAsync(this, _layoutRoot, PopupStatesGroupName, OpenPopupStateName);\n\n            // Wait for button click\n            string result = await _dismissTaskSource.Task;\n\n            // Hide dialog\n            if (AwaitsCloseTransition)\n            {\n                await CloseAsync();\n            }\n            else\n            {\n#pragma warning disable 4014\n                CloseAsync();\n#pragma warning restore 4014\n            }\n\n            inputPane.Showing -= InputDialog_Showing;\n            inputPane.Hiding -= InputDialod_Hiding;\n\n            window.Content.KeyUp -= OnGlobalKeyUp;\n\n            return result;\n        }\n\n        private void InputDialod_Hiding(InputPane sender, InputPaneVisibilityEventArgs args)\n        {\n            TranslateStripeTo(0);\n        }\n\n        void InputDialog_Showing(Windows.UI.ViewManagement.InputPane sender, Windows.UI.ViewManagement.InputPaneVisibilityEventArgs args)\n        {\n            TranslateStripeTo(args.OccludedRect.Height / -2);\n        }\n\n        private void TranslateStripeTo(double value)\n        {\n            if (_virtualKeyboardSlideAnimation == null || _virtualKeyboardSlideStoryboard == null)\n                return;\n\n            _blackStripeTransform.Y = value;\n            //_virtualKeyboardSlideAnimation.To = value;\n            //_virtualKeyboardSlideStoryboard.Begin();\n        }\n\n        static async Task WaitForLayoutUpdateAsync(FrameworkElement frameworkElement)\n        {\n            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n            EventHandler<object> eventHandler = (sender, args) => tcs.SetResult(true);\n            frameworkElement.LayoutUpdated += eventHandler;\n            await tcs.Task;\n            frameworkElement.LayoutUpdated -= eventHandler;\n        }\n\n        static IEnumerable<DependencyObject> GetDescendants(DependencyObject start)\n        {\n            Queue<DependencyObject> queue = new Queue<DependencyObject>();\n\n            Popup popup = start as Popup;\n\n            if (popup != null)\n            {\n                if (popup.Child != null)\n                {\n                    queue.Enqueue(popup.Child);\n                    yield return popup.Child;\n                }\n            }\n            else\n            {\n                int count = VisualTreeHelper.GetChildrenCount(start);\n\n                for (int i = 0; i < count; i++)\n                {\n                    DependencyObject child = VisualTreeHelper.GetChild(start, i);\n                    queue.Enqueue(child);\n                    yield return child;\n                }\n            }\n\n            while (queue.Count > 0)\n            {\n                DependencyObject parent = queue.Dequeue();\n\n                popup = parent as Popup;\n\n                if (popup != null)\n                {\n                    if (popup.Child != null)\n                    {\n                        queue.Enqueue(popup.Child);\n                        yield return popup.Child;\n                    }\n                }\n                else\n                {\n                    int count = VisualTreeHelper.GetChildrenCount(parent);\n\n                    for (int i = 0; i < count; i++)\n                    {\n                        DependencyObject child = VisualTreeHelper.GetChild(parent, i);\n                        yield return child;\n                        queue.Enqueue(child);\n                    }\n                }\n            }\n        }\n\n        private void ResizeLayoutRoot()\n        {\n            FrameworkElement root =\n                                _parentPanel ??\n                                _parentContentControl ??\n                                _temporaryParentPanel as FrameworkElement;\n            _layoutRoot.Width = root.ActualWidth;\n            _layoutRoot.Height = root.ActualHeight;\n        }\n\n        private void OnParentSizeChanged(object sender, SizeChangedEventArgs sizeChangedEventArgs)\n        {\n            ResizeLayoutRoot();\n        }\n\n        public async Task CloseAsync()\n        {\n            if (!_shown)\n            {\n                throw new InvalidOperationException(\"The dialog isn't shown, so it can't be closed.\");\n            }\n\n            await GoToVisualStateAsync(this, _layoutRoot, PopupStatesGroupName, ClosedPopupStateName);\n            _dialogPopup.IsOpen = false;\n            _buttonsPanel.Children.Clear();\n\n            foreach (ButtonBase button in _buttons)\n            {\n                button.Click -= OnButtonClick;\n                button.KeyUp -= OnGlobalKeyUp;\n            }\n\n            _buttons.Clear();\n\n            _dialogPopup.Child = null;\n\n            if (_parentPanel != null)\n            {\n                _parentPanel.Children.Remove(_dialogPopup);\n                _parentPanel.Children.Add(this);\n                _parentPanel.SizeChanged -= OnParentSizeChanged;\n                _parentPanel = null;\n            }\n\n            if (_parentContentControl != null)\n            {\n                _parentContentControl.Content = this;\n                _parentContentControl.SizeChanged -= OnParentSizeChanged;\n                _parentContentControl = null;\n            }\n\n            if (_temporaryParentPanel != null)\n            {\n                _temporaryParentPanel.Children.Remove(_dialogPopup);\n                _temporaryParentPanel.SizeChanged -= OnParentSizeChanged;\n                _temporaryParentPanel = null;\n            }\n\n            _dialogPopup = null;\n            Visibility = Visibility.Collapsed;\n            _shown = false;\n        }\n\n        private static async Task GoToVisualStateAsync(Control control,\n            FrameworkElement visualStatesHost,\n            string stateGroupName,\n            string stateName)\n        {\n            TaskCompletionSource<Storyboard> tcs = new TaskCompletionSource<Storyboard>();\n\n            Storyboard storyboard =\n                GetStoryboardForVisualState(visualStatesHost, stateGroupName, stateName);\n\n            if (storyboard != null)\n            {\n                EventHandler<object> eh = null;\n\n                eh = (s, e) =>\n                {\n                    storyboard.Completed -= eh;\n                    tcs.SetResult(storyboard);\n                };\n\n                storyboard.Completed += eh;\n            }\n\n            VisualStateManager.GoToState(control, stateName, true);\n\n            if (storyboard == null)\n            {\n                return;\n            }\n\n            await tcs.Task;\n        }\n\n        private static Storyboard GetStoryboardForVisualState(\n            FrameworkElement visualStatesHost,\n            string stateGroupName,\n            string stateName)\n        {\n            Storyboard storyboard = null;\n\n            IList<VisualStateGroup> stateGroups = VisualStateManager.GetVisualStateGroups(visualStatesHost);\n            VisualStateGroup stateGroup = null;\n\n            if (!string.IsNullOrEmpty(stateGroupName))\n            {\n                stateGroup = stateGroups.FirstOrDefault(g => g.Name == stateGroupName);\n            }\n\n            VisualState state = null;\n\n            if (stateGroup != null)\n            {\n                state = stateGroup.States.FirstOrDefault(s => s.Name == stateName);\n            }\n\n            if (state == null)\n            {\n                foreach (VisualStateGroup group in stateGroups)\n                {\n                    state = group.States.FirstOrDefault(s => s.Name == stateName);\n\n                    if (state != null)\n                    {\n                        break;\n                    }\n                }\n            }\n\n            if (state != null)\n            {\n                storyboard = state.Storyboard;\n            }\n\n            return storyboard;\n        }\n\n        private void OnButtonClick(object sender, RoutedEventArgs e)\n        {\n            ButtonBase clickedButton = (ButtonBase)sender;\n            _dismissTaskSource.TrySetResult((int)clickedButton.Tag == 0 ? (_inputTextBox != null ? _inputTextBox.Text : _inputPasswordBox.Password) : null);\n\n            if (_buttons.Count > 0)\n            {\n                Button button = (Button)_buttons[0];\n                button.Focus(FocusState.Programmatic);\n            }\n        }\n\n        private void OnInputTextBoxKeyUp(object sender, KeyRoutedEventArgs e)\n        {\n            if (_inputTextBox != null)\n                InputText = _inputTextBox.Text;\n            if (_inputPasswordBox != null)\n                InputText = _inputPasswordBox.Password;\n\n            if (e.Key == VirtualKey.Enter)\n            {\n                OnButtonClick(_buttons[0], new RoutedEventArgs());\n                e.Handled = true;\n                return;\n            }\n\n            if (e.Key == VirtualKey.Escape)\n            {\n                OnButtonClick(_buttons[1], new RoutedEventArgs());\n                e.Handled = true;\n            }\n        }\n\n        private void DismissDialog()\n        {\n            _dismissTaskSource.TrySetResult(null);\n\n            if (_buttons.Count > 0)\n            {\n                Button button = (Button)_buttons[0];\n                button.Focus(FocusState.Programmatic);\n            }\n        }\n    }\n    #endregion\n}\n"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteMessageBox.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Windows.ApplicationModel.Core;\nusing Windows.Foundation;\nusing Windows.UI.Core;\nusing Windows.UI.Popups;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMessageBox : MessageBoxStrategy\n    {\n        private readonly CoreDispatcher _dispatcher;\n        private TaskCompletionSource<int?> _tcs;\n        private IAsyncOperation<IUICommand> _dialogResult;\n\n        public ConcreteMessageBox()\n        {\n            _dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;\n        }\n\n        public override Task<int?> PlatformShow(string title, string description, List<string> buttons)\n        {\n            // TODO: MessageDialog only supports two buttons\n            if (buttons.Count == 3)\n                throw new NotSupportedException(\"This platform does not support three buttons\");\n\n            _tcs = new TaskCompletionSource<int?>();\n\n            MessageDialog dialog = new MessageDialog(description, title);\n            foreach (string button in buttons)\n                dialog.Commands.Add(new UICommand(button, null, dialog.Commands.Count));\n\n            _dispatcher.RunAsync(CoreDispatcherPriority.Normal,\n                async () =>\n                {\n                    try\n                    {\n                        // PlatformSetResult will cancel the task, resulting in an exception\n                        _dialogResult = dialog.ShowAsync();\n                        IUICommand result = await _dialogResult;\n                        if (!_tcs.Task.IsCompleted)\n                            _tcs.SetResult(result == null ? null : (int?)result.Id);\n                    }\n                    catch (TaskCanceledException)\n                    {\n                        if (!_tcs.Task.IsCompleted)\n                            _tcs.SetResult(null);\n                    }\n                });\n\n            return _tcs.Task;\n        }\n\n        public override void PlatformCancel(int? result)\n        {\n            // TODO: MessageDialog doesn't hide on Windows Phone 8.1\n            _tcs.SetResult(result);\n            _dialogResult.Cancel();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteMouse.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouse : MouseStrategy\n    {\n        private IntPtr _wndHandle = IntPtr.Zero;\n\n        public override IntPtr PlatformGetWindowHandle()\n        {\n            return _wndHandle;\n        }\n\n        public override void PlatformSetWindowHandle(IntPtr windowHandle)\n        {\n            _wndHandle = windowHandle;\n        }\n\n        public override bool PlatformIsRawInputAvailable()\n        {\n            return false;\n        }\n\n        public override MouseState PlatformGetState()\n        {\n\n            IntPtr wndHandle = this._wndHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                UAPGameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle);\n            \n                return gameWindow._mouseState;\n            }\n            else\n                return new MouseState();\n        }\n\n        public override void PlatformSetPosition(int x, int y)\n        {\n            UAPGameWindow gameWindow = UAPGameWindow.FromHandle(this._wndHandle);\n\n            MouseState mouseState = gameWindow._mouseState;\n\n            gameWindow._mouseState = new MouseState(\n                    x: x,\n                    y: y,\n                    scrollWheel: mouseState.ScrollWheelValue,\n                    horizontalScrollWheel: mouseState.HorizontalScrollWheelValue,\n                    rawX: mouseState.RawX,\n                    rawY: mouseState.RawY,\n                    leftButton: mouseState.LeftButton,\n                    middleButton: mouseState.MiddleButton,\n                    rightButton: mouseState.RightButton,\n                    xButton1: mouseState.XButton1,\n                    xButton2: mouseState.XButton2 \n                );\n        }\n\n        public override void PlatformSetCursor(MouseCursor cursor)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.UAP/ConcreteMouseCursor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouseCursor : MouseCursorStrategy\n    {\n\n        public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            this._cursorType = cursorType;\n            this._handle = IntPtr.Zero;\n        }\n\n\n        public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n            }\n\n            base.Dispose(dispose);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.UAP/Touch/ConcreteTouchPanel.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing WinInput = Windows.Devices.Input;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public sealed class ConcreteTouchPanel : TouchPanelStrategy\n    {\n\n        public override IntPtr WindowHandle\n        {\n            get { return base.WindowHandle; }\n            set { base.WindowHandle = value; }\n        }\n\n        public override int DisplayWidth\n        {\n            get { return base.DisplayWidth; }\n            set { base.DisplayWidth = value; }\n        }\n\n        public override int DisplayHeight\n        {\n            get { return base.DisplayHeight; }\n            set { base.DisplayHeight = value; }\n        }\n\n        public override DisplayOrientation DisplayOrientation\n        {\n            get { return base.DisplayOrientation; }\n            set { base.DisplayOrientation = value; }\n        }\n\n        public override GestureType EnabledGestures\n        {\n            get { return base.EnabledGestures; }\n            set { base.EnabledGestures = value; }\n        }\n\n\n        public override bool IsGestureAvailable\n        {\n            get { return base.IsGestureAvailable; }\n        }\n\n        public ConcreteTouchPanel()\n            : base()\n        {\n            // Initialize Capabilities\n            int maximumTouchCount = 0;\n            bool isConnected = false;\n            bool hasPressure = false;\n            IReadOnlyList<WinInput.PointerDevice> pointerDevices = WinInput.PointerDevice.GetPointerDevices();\n            // Iterate through all pointer devices and find the maximum number of concurrent touches possible\n            foreach (WinInput.PointerDevice pointerDevice in pointerDevices)\n            {\n                maximumTouchCount = Math.Max(maximumTouchCount, (int)pointerDevice.MaxContacts);\n\n                if (pointerDevice.PointerDeviceType == WinInput.PointerDeviceType.Touch)\n                    isConnected = true;\n            }\n            _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure);\n        }\n\n        public override TouchPanelCapabilities GetCapabilities()\n        {\n            return _capabilities;\n        }\n\n        public override TouchCollection GetState()\n        {\n            return base.GetState();\n        }\n\n        public override GestureSample ReadGesture()\n        {\n            return base.ReadGesture();\n        }\n\n        public override void AddPressedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddPressedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddMovedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddMovedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddReleasedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddCanceledEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteGamePad.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing XInput = SharpDX.XInput;\nusing GPBF = SharpDX.XInput.GamepadButtonFlags;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    // TODO: move GamePadDevice to Framework.Input library\n    public abstract class GamePadDevice\n    {\n        public GamePadCapabilities Capabilities;\n\n        public GamePadDevice()\n        {\n\n        }\n    }\n\n    public sealed class ConcreteGamePad : GamePadStrategy\n    {\n        const int DeviceNotConnectedHResult = unchecked((int)0x8007048f);\n        const int MaxNumberOfGamePads = 4;\n\n        internal bool Back;\n\n        private static readonly XInput.Controller[] _controllers = new[]\n        {\n            new XInput.Controller(XInput.UserIndex.One),\n            new XInput.Controller(XInput.UserIndex.Two),\n            new XInput.Controller(XInput.UserIndex.Three),\n            new XInput.Controller(XInput.UserIndex.Four),\n        };\n\n        private readonly bool[] _isConnected = new bool[MaxNumberOfGamePads];\n        private readonly DateTime[] _lastDisconnectTime = new DateTime[MaxNumberOfGamePads];\n        private readonly TimeSpan TimeoutTicks = TimeSpan.FromSeconds(1);\n\n        // XInput Xbox Controller dead zones\n        // Dead zones are slightly different between left and right sticks, this may come from Microsoft usability tests\n        public override float LeftThumbDeadZone { get { return XInput.Gamepad.LeftThumbDeadZone / (float)short.MaxValue; } }\n        public override float RightThumbDeadZone { get { return XInput.Gamepad.RightThumbDeadZone / (float)short.MaxValue; } }\n\n        public override int PlatformGetMaxNumberOfGamePads()\n        {\n            return MaxNumberOfGamePads;\n        }\n\n        private GamePadCapabilities GetDefaultCapabilities()\n        {\n            return base.CreateGamePadCapabilities(\n                    gamePadType: GamePadType.Unknown,\n                    displayName: null,\n                    identifier: null,\n                    isConnected: false,\n                    buttons: (Buttons)0,\n                    hasLeftVibrationMotor: false,\n                    hasRightVibrationMotor: false,\n                    hasVoiceSupport: false\n                );\n        }\n\n        public override GamePadCapabilities PlatformGetCapabilities(int index)\n        {\n            DateTime utcNow = DateTime.UtcNow;\n\n            // If the device was disconnected then wait for\n            // the timeout to elapsed before we test it again.\n            if (_isConnected[index] == false)\n            {\n                if (_lastDisconnectTime[index] + TimeoutTicks > utcNow)\n                {\n                    return GetDefaultCapabilities();\n                }\n            }\n\n            // Check to see if the device is connected.\n            bool isControllerConnected = _controllers[index].IsConnected;\n            if (isControllerConnected == false)\n            {\n                // If the device is disconnected retry it after the\n                // timeout period has elapsed to avoid the overhead.\n                _isConnected[index] = false;\n                _lastDisconnectTime[index] = utcNow;\n                return GetDefaultCapabilities();\n            }\n            else\n            {\n                _isConnected[index] = true;\n            }\n\n            XInput.Capabilities xCapabilities;\n            try\n            {\n                xCapabilities = _controllers[index].GetCapabilities(XInput.DeviceQueryType.Any);\n            }\n            catch (SharpDX.SharpDXException ex)\n            {\n                if (ex.ResultCode.Code == DeviceNotConnectedHResult)\n                {\n                    _isConnected[index] = false;\n                    _lastDisconnectTime[index] = utcNow;\n                    return GetDefaultCapabilities();\n                }\n                throw;\n            }\n\n            //--\n            GamePadType gamePadType = GamePadType.Unknown;\n            string displayName = String.Empty;\n            string identifier = String.Empty;\n            bool isConnected;\n            Buttons buttons = (Buttons)0;\n            bool hasLeftVibrationMotor = false;\n            bool hasRightVibrationMotor = false;\n            bool hasVoiceSupport = false;\n            //--\n\n            gamePadType = XInputToXnaGamePadType(xCapabilities.SubType);\n\n            XInput.Gamepad xgamepad = xCapabilities.Gamepad;\n\n            // digital buttons\n            XInput.GamepadButtonFlags xbuttons = xgamepad.Buttons;\n            buttons |= ((xbuttons & GPBF.A) == GPBF.A) ? Buttons.A : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.Back) == GPBF.Back) ? Buttons.Back : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.B) == GPBF.B) ? Buttons.B : (Buttons)0;\n            buttons |= (false) ? Buttons.BigButton : (Buttons)0; // TODO: what IS this? Is it related to GamePadType.BigGamePad?\n            buttons |= ((xbuttons & GPBF.DPadDown) == GPBF.DPadDown) ? Buttons.DPadDown : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.DPadLeft) == GPBF.DPadLeft) ? Buttons.DPadLeft : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.DPadRight) == GPBF.DPadRight) ? Buttons.DPadRight : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.DPadUp) == GPBF.DPadUp) ? Buttons.DPadUp : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.LeftShoulder) == GPBF.LeftShoulder) ? Buttons.LeftShoulder : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.LeftThumb) == GPBF.LeftThumb) ? Buttons.LeftStick : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.RightShoulder) == GPBF.RightShoulder) ? Buttons.RightShoulder : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.RightThumb) == GPBF.RightThumb) ? Buttons.RightStick : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.Start) == GPBF.Start) ? Buttons.Start : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.X) == GPBF.X) ? Buttons.X : (Buttons)0;\n            buttons |= ((xbuttons & GPBF.Y) == GPBF.Y) ? Buttons.Y : (Buttons)0;\n\n            // analog controls\n            buttons |= (xgamepad.LeftTrigger > 0) ? Buttons.LeftTrigger : (Buttons)0;\n            buttons |= (xgamepad.LeftThumbX != 0) ? Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight : (Buttons)0;\n            buttons |= (xgamepad.LeftThumbY != 0) ? Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp : (Buttons)0;\n            buttons |= (xgamepad.RightTrigger > 0) ? Buttons.RightTrigger : (Buttons)0;\n            buttons |= (xgamepad.RightThumbX != 0) ? Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight : (Buttons)0;\n            buttons |= (xgamepad.RightThumbY != 0) ? Buttons.RightThumbstickDown | Buttons.RightThumbstickUp : (Buttons)0;\n\n            // vibration\n#if DIRECTX11_1\n            bool hasForceFeedback = (xCapabilities.Flags & XInput.CapabilityFlags.FfbSupported) == XInput.CapabilityFlags.FfbSupported;\n            hasLeftVibrationMotor = hasForceFeedback && xCapabilities.Vibration.LeftMotorSpeed > 0;\n            hasRightVibrationMotor = hasForceFeedback && xCapabilities.Vibration.RightMotorSpeed > 0;\n#else\n            hasLeftVibrationMotor = (xCapabilities.Vibration.LeftMotorSpeed > 0);\n            hasRightVibrationMotor = (xCapabilities.Vibration.RightMotorSpeed > 0);\n#endif\n\n            // other\n            isConnected = _controllers[index].IsConnected;\n            hasVoiceSupport = (xCapabilities.Flags & XInput.CapabilityFlags.VoiceSupported) == XInput.CapabilityFlags.VoiceSupported;\n            \n            return base.CreateGamePadCapabilities(\n                    gamePadType: gamePadType,\n                    displayName: displayName,\n                    identifier: identifier,\n                    isConnected: isConnected,\n                    buttons: buttons,\n                    hasLeftVibrationMotor: hasLeftVibrationMotor,\n                    hasRightVibrationMotor: hasRightVibrationMotor,\n                    hasVoiceSupport: hasVoiceSupport\n                );\n        }\n\n        private GamePadType XInputToXnaGamePadType(XInput.DeviceSubType subType)\n        {\n            switch (subType)\n            {\n#if DIRECTX11_1\n                case XInput.DeviceSubType.ArcadePad:\n                    Debug.WriteLine(\"XInput's DeviceSubType.ArcadePad is not supported in XNA\");\n                    return GamePadType.Unknown; // TODO: Should this be BigButtonPad?\n                case XInput.DeviceSubType.FlightStick:\n                    return GamePadType.FlightStick;\n                case XInput.DeviceSubType.GuitarAlternate:\n                    return GamePadType.AlternateGuitar;\n                case XInput.DeviceSubType.GuitarBass:\n                    // Note: XNA doesn't distinguish between Guitar and GuitarBass, but \n                    // GuitarBass is identical to Guitar in XInput, distinguished only\n                    // to help setup for those controllers. \n                    return GamePadType.Guitar;\n                case XInput.DeviceSubType.Unknown:\n                    return GamePadType.Unknown;\n#endif\n\n                case XInput.DeviceSubType.ArcadeStick:\n                    return GamePadType.ArcadeStick;\n                case XInput.DeviceSubType.DancePad:\n                    return GamePadType.DancePad;\n                case XInput.DeviceSubType.DrumKit:\n                    return GamePadType.DrumKit;\n\n                case XInput.DeviceSubType.Gamepad:\n                    return GamePadType.GamePad;\n                case XInput.DeviceSubType.Guitar:\n                    return GamePadType.Guitar;\n                case XInput.DeviceSubType.Wheel:\n                    return GamePadType.Wheel;\n\n                default:\n                    Debug.WriteLine(\"unexpected XInput DeviceSubType: {0}\", subType.ToString());\n                    return GamePadType.Unknown;\n            }\n        }\n\n        private GamePadState GetDefaultState()\n        {\n            GamePadButtons buttons = new GamePadButtons((Back) ? Buttons.Back : 0);\n            return base.CreateGamePadState(default(GamePadThumbSticks), default(GamePadTriggers), buttons, default(GamePadDPad),\n                        isConnected: false);\n        }\n\n        public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            DateTime utcNow = DateTime.UtcNow;\n\n            // If the device was disconnected then wait for \n            // the timeout to elapsed before we test it again.\n            if (_isConnected[index] == false)\n            {\n                if (_lastDisconnectTime[index] + TimeoutTicks > utcNow)\n                {\n                    return GetDefaultState();\n                }\n            }\n\n            int packetNumber = 0;\n\n            // Try to get the controller state.\n            XInput.Gamepad gamepad = new XInput.Gamepad();\n            try\n            {\n                XInput.State xistate;\n                bool isControllerConnected = _controllers[index].GetState(out xistate);\n                if (isControllerConnected == false)\n                {\n                    _isConnected[index] = false;\n                }\n                else\n                {\n                    _isConnected[index] = true;\n                }\n                packetNumber = xistate.PacketNumber;\n                gamepad = xistate.Gamepad;\n            }\n            catch (Exception)\n            {\n            }\n\n            // If the device is disconnected retry it after the\n            // timeout period has elapsed to avoid the overhead.\n            if (_isConnected[index] == false)\n            {\n                _lastDisconnectTime[index] = utcNow;\n                return GetDefaultState();\n            }\n\n            GamePadThumbSticks thumbSticks = base.CreateGamePadThumbSticks(\n                leftPosition: new Vector2(gamepad.LeftThumbX, gamepad.LeftThumbY) / (float)short.MaxValue,\n                rightPosition: new Vector2(gamepad.RightThumbX, gamepad.RightThumbY) / (float)short.MaxValue,\n                    leftDeadZoneMode: leftDeadZoneMode,\n                    rightDeadZoneMode: rightDeadZoneMode);\n\n            GamePadTriggers triggers = new GamePadTriggers(\n                    leftTrigger: gamepad.LeftTrigger / (float)byte.MaxValue,\n                    rightTrigger: gamepad.RightTrigger / (float)byte.MaxValue);\n\n            GamePadDPad dpadState = new GamePadDPad(\n                upValue: ConvertToButtonState(gamepad.Buttons, XInput.GamepadButtonFlags.DPadUp),\n                downValue: ConvertToButtonState(gamepad.Buttons, XInput.GamepadButtonFlags.DPadDown),\n                leftValue: ConvertToButtonState(gamepad.Buttons, XInput.GamepadButtonFlags.DPadLeft),\n                rightValue: ConvertToButtonState(gamepad.Buttons, XInput.GamepadButtonFlags.DPadRight));\n\n            GamePadButtons buttons = ConvertToButtons(\n                buttonFlags: gamepad.Buttons,\n                leftTrigger: gamepad.LeftTrigger,\n                rightTrigger: gamepad.RightTrigger);\n\n            return base.CreateGamePadState(\n                thumbSticks: thumbSticks,\n                triggers: triggers,\n                buttons: buttons,\n                dPad: dpadState,\n                packetNumber: packetNumber);\n        }\n\n        private ButtonState ConvertToButtonState(\n            XInput.GamepadButtonFlags buttonFlags,\n            XInput.GamepadButtonFlags desiredButton)\n        {\n            return ((buttonFlags & desiredButton) == desiredButton) ? ButtonState.Pressed : ButtonState.Released;\n        }\n\n        private Buttons AddButtonIfPressed(\n            XInput.GamepadButtonFlags buttonFlags,\n            XInput.GamepadButtonFlags xInputButton,\n            Buttons xnaButton)\n        {\n            ButtonState buttonState = ((buttonFlags & xInputButton) == xInputButton) ? ButtonState.Pressed : ButtonState.Released;\n            return buttonState == ButtonState.Pressed ? xnaButton : 0;\n        }\n\n        private GamePadButtons ConvertToButtons(XInput.GamepadButtonFlags buttonFlags,\n            byte leftTrigger,\n            byte rightTrigger)\n        {\n            Buttons ret = (Buttons)0;\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.A, Buttons.A);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.B, Buttons.B);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.Back, Buttons.Back);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.DPadDown, Buttons.DPadDown);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.DPadLeft, Buttons.DPadLeft);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.DPadRight, Buttons.DPadRight);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.DPadUp, Buttons.DPadUp);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.LeftShoulder, Buttons.LeftShoulder);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.RightShoulder, Buttons.RightShoulder);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.LeftThumb, Buttons.LeftStick);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.RightThumb, Buttons.RightStick);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.Start, Buttons.Start);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.X, Buttons.X);\n            ret |= AddButtonIfPressed(buttonFlags, GPBF.Y, Buttons.Y);\n\n            if (leftTrigger >= XInput.Gamepad.TriggerThreshold)\n                ret |= Buttons.LeftTrigger;\n\n            if (rightTrigger >= XInput.Gamepad.TriggerThreshold)\n                ret |= Buttons.RightTrigger;\n\n            // Check for the hardware back button.\n            if (Back)\n                ret |= Buttons.Back;\n\n            return new GamePadButtons(ret);\n        }\n\n        public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            DateTime utcNow = DateTime.UtcNow;\n\n            if (_isConnected[index] == false)\n            {\n                if (_lastDisconnectTime[index] + TimeoutTicks > utcNow)\n                    return false;\n\n                bool isControllerConnected = _controllers[index].IsConnected;\n                if (isControllerConnected == false)\n                {\n                    _lastDisconnectTime[index] = utcNow;\n                    return false;\n                }\n                else\n                {\n                    _isConnected[index] = true;\n                }\n            }\n\n            SharpDX.Result result;\n            try\n            {\n                XInput.Vibration vibration = new XInput.Vibration();\n                vibration.LeftMotorSpeed = (ushort)(leftMotor * ushort.MaxValue);\n                vibration.RightMotorSpeed = (ushort)(rightMotor * ushort.MaxValue);\n                result = _controllers[index].SetVibration(vibration);\n            }\n            catch (SharpDX.SharpDXException ex)\n            {\n                if (ex.ResultCode.Code == DeviceNotConnectedHResult)\n                {\n                    _isConnected[index] = false;\n                    _lastDisconnectTime[index] = utcNow;\n                    return false;\n                }\n                throw;\n            }\n\n            return result == SharpDX.Result.Ok;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteGamePadDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing XInput = SharpDX.XInput;\nusing GPBF = SharpDX.XInput.GamepadButtonFlags;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    internal class XInputGamePadDevice : GamePadDevice\n    {\n\n        public XInputGamePadDevice()\n            : base()\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteInputFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteInputFactory : InputFactory\n    {\n\n        public override GamePadStrategy CreateGamePadStrategy()\n        {\n            return new ConcreteGamePad();\n        }\n\n        public override JoystickStrategy CreateJoystickStrategy()\n        {\n            return new ConcreteJoystick();\n        }\n\n        public override KeyboardStrategy CreateKeyboardStrategy()\n        {\n            return new ConcreteKeyboard();\n        }\n\n        public override MouseStrategy CreateMouseStrategy()\n        {\n            return new ConcreteMouse();\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            return new ConcreteMouseCursor(cursorType);\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy)\n        {\n            return new ConcreteMouseCursor(data, w, h, originx, originy);\n        }\n\n        public override TouchPanelStrategy CreateTouchPanelStrategy()\n        {\n            return new ConcreteTouchPanel();\n        }\n\n        public override KeyboardInputStrategy CreateKeyboardInputStrategy()\n        {\n            return new ConcreteKeyboardInput();\n        }\n\n        public override MessageBoxStrategy CreateMessageBoxStrategy()\n        {\n            return new ConcreteMessageBox();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteJoystick.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteJoystick : JoystickStrategy\n    {\n        public override bool PlatformIsSupported\n        {\n            get { return false; }\n        }\n\n        public override int PlatformLastConnectedIndex\n        {\n            get { return -1; }\n        }\n\n        public override JoystickCapabilities PlatformGetCapabilities(int index)\n        {\n            return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0);\n        }\n\n        public override JoystickState PlatformGetState(int index)\n        {\n            return JoystickStrategy.DefaultJoystickState;\n        }\n\n\n        public override void PlatformGetState(int index, ref JoystickState joystickState)\n        {\n\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteKeyboard.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboard : KeyboardStrategy\n    {\n        private readonly Keys[] DefinedKeyCodes;\n\n        private readonly byte[] _keyState = new byte[256];\n        bool _isCapsLocked;\n        bool _isNumLocked;\n\n\n        private readonly List<Keys> _keys = new List<Keys>(10);\n\n        private bool _isActive = true;\n\n        [DllImport(\"user32.dll\")]\n        private static extern bool GetKeyboardState(byte[] lpKeyState);\n\n        public ConcreteKeyboard()\n        {\n            Array definedKeys = Enum.GetValues(typeof(Keys));\n            List<Keys> keyCodes = new List<Keys>(Math.Min(definedKeys.Length, 255));\n            foreach (object key in definedKeys)\n            {\n                int keyCode = (int)key;\n                if ((keyCode >= 1) && (keyCode <= 255))\n                    keyCodes.Add((Keys)keyCode);\n            }\n            DefinedKeyCodes = keyCodes.ToArray();\n        }\n\n        public override KeyboardState PlatformGetState()\n        {\n            if (_isActive == false)\n            {\n                // return the cleared _keys, if _isActive == false\n                // TODO: should we return false for toggled keys?\n                _isCapsLocked = Console.CapsLock;\n                _isNumLocked = Console.NumberLock;\n                return base.CreateKeyboardState(_keys, _isCapsLocked, _isNumLocked);\n            }\n\n            bool isKeyStateValid = GetKeyboardState(_keyState);\n            if (isKeyStateValid == false)\n            {\n                // return the previous state of _keys, if GetKeyboardState fails\n                // TODO: should we return the previous state of toggled keys?\n                _isCapsLocked = Console.CapsLock;\n                _isNumLocked = Console.NumberLock;\n                return base.CreateKeyboardState(_keys, _isCapsLocked, _isNumLocked);\n            }\n\n            // remove released keys\n            _keys.RemoveAll((key) => !IsKeyPressed(key));\n\n            // add pressed keys\n            foreach (Keys key in DefinedKeyCodes)\n            {\n                if (!IsKeyPressed(key))\n                    continue;\n\n                if (!_keys.Contains(key))\n                    _keys.Add(key);\n            }\n\n            // TODO: should we get toggled keys from IsKeyToggled(...)?\n            _isCapsLocked = Console.CapsLock;\n            _isNumLocked = Console.NumberLock;\n            return base.CreateKeyboardState(_keys, _isCapsLocked, _isNumLocked);\n        }\n\n        private bool IsKeyPressed(Keys key)\n        {\n            return ((_keyState[(int)key] & 0x80) != 0);\n        }\n\n        private bool IsKeyToggled(Keys key)\n        {\n            return ((_keyState[(int)key] & 0x01) != 0);\n        }\n\n        internal void SetActive(bool isActive)\n        {\n            _isActive = isActive;\n\n            // clear _keys, if _isActive == false\n            if (_isActive == false)\n                _keys.Clear();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteKeyboardInput.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Drawing;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboardInput : KeyboardInputStrategy\n    {\n        private Form _dialog;\n        private TaskCompletionSource<string> _tcs;\n        \n        public override Task<string> PlatformShow(string title, string description, string defaultText, bool usePasswordMode)\n        {\n            _tcs = new TaskCompletionSource<string>();\n\n            Form parent = Application.OpenForms[0];\n\n            parent.Invoke(new MethodInvoker(() =>\n            {\n                Form dialog = _dialog = new Form();\n                dialog.Text = title;\n                dialog.FormBorderStyle = FormBorderStyle.FixedDialog;\n                dialog.MinimizeBox = false;\n                dialog.MaximizeBox = false;\n                dialog.ControlBox = false;\n                dialog.StartPosition = FormStartPosition.CenterParent;\n\n                Label desc = new Label();\n                desc.Text = description;\n                desc.Parent = dialog;\n                desc.Top = 25;\n                desc.TextAlign = ContentAlignment.MiddleCenter;\n                desc.AutoSize = true;\n                desc.Margin = new Padding(25, 0, 25, 0);\n                desc.Left = (desc.Parent.ClientSize.Width - desc.Width) / 2;\n\n                TextBox input = new TextBox();\n                input.Text = defaultText;\n                input.Parent = dialog;\n                input.Top = desc.Bottom + 15;\n                input.UseSystemPasswordChar = usePasswordMode;\n                input.AutoSize = true;\n                input.Margin = new Padding(25, 0, 25, 0);\n                input.Left = 25;\n                input.Width = input.Parent.ClientSize.Width - 25;\n                input.TabIndex = 0;\n\n                FlowLayoutPanel bgroup = new FlowLayoutPanel();\n                bgroup.FlowDirection = FlowDirection.LeftToRight;\n                bgroup.Parent = dialog;\n                bgroup.Top = input.Bottom + 15;\n                bgroup.AutoSize = true;\n                bgroup.Margin = new Padding(15);\n                bgroup.AutoSizeMode = AutoSizeMode.GrowAndShrink;\n\n                Button acceptButton = new Button();\n                acceptButton.Text = \"&Ok\";\n                acceptButton.DialogResult = DialogResult.OK;\n                acceptButton.Parent = bgroup;\n                acceptButton.TabIndex = 1;\n                dialog.AcceptButton = acceptButton;\n\n                Button cancelButton = new Button();\n                cancelButton.Text = \"&Cancel\";\n                cancelButton.DialogResult = DialogResult.Cancel;\n                cancelButton.Parent = bgroup;\n                cancelButton.TabIndex = 2;\n                dialog.CancelButton = cancelButton;\n\n                bgroup.Left = (bgroup.Parent.ClientSize.Width - bgroup.Width) / 2;\n                dialog.AutoSizeMode = AutoSizeMode.GrowAndShrink;\n                dialog.AutoSize = true;\n\n                DialogResult result = dialog.ShowDialog(parent);\n                _dialog = null;\n\n                if (_tcs.Task.IsCompleted)\n                    return;\n\n                if (result == DialogResult.OK)\n                    _tcs.SetResult(input.Text);\n                else\n                    _tcs.SetResult(null);\n\n            }));\n\n            return _tcs.Task;\n        }\n\n        public override void PlatformCancel(string result)\n        {\n            if (_dialog != null)\n                _dialog.Close();\n            _tcs.SetResult(result);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteMessageBox.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMessageBox : MessageBoxStrategy\n    {\n        private Form _dialog;\n        private TaskCompletionSource<int?> _tcs;\n\n        public override Task<int?> PlatformShow(string title, string description, List<string> buttons)\n        {\n            _tcs = new TaskCompletionSource<int?>();\n\n            Form parent = Application.OpenForms[0];\n\n            parent.Invoke(new MethodInvoker(() =>\n            {\n                Form dialog = _dialog = new Form();\n                dialog.Text = title;\n                dialog.FormBorderStyle = FormBorderStyle.FixedDialog;\n                dialog.MinimizeBox = false;\n                dialog.MaximizeBox = false;\n                dialog.ControlBox = false;\n                dialog.StartPosition = FormStartPosition.CenterParent;\n\n                Label desc = new Label();\n                desc.Text = description;\n                desc.Parent = dialog;\n                desc.Top = 25;\n                desc.TextAlign = ContentAlignment.MiddleCenter;\n                desc.AutoSize = true;\n                desc.Margin = new Padding(25, 0, 25, 0);\n                desc.Left = (desc.Parent.ClientSize.Width - desc.Width) / 2;\n\n                FlowLayoutPanel bgroup = new FlowLayoutPanel();\n                bgroup.FlowDirection = FlowDirection.LeftToRight;\n                bgroup.Parent = dialog;\n                bgroup.Top = desc.Bottom + 25;\n                bgroup.AutoSize = true;\n                bgroup.Margin = new Padding(15);\n                bgroup.AutoSizeMode = AutoSizeMode.GrowAndShrink;\n\n                for (int i = 0; i < buttons.Count; i++)\n                {\n                    string btext = buttons[i];\n                    Button button = new Button();\n                    button.Text = btext;\n                    button.DialogResult = (DialogResult)i+1;\n                    button.Parent = bgroup;\n                    if (i == 0)\n                        dialog.AcceptButton = button;\n                }\n\n                bgroup.Left = (bgroup.Parent.ClientSize.Width - bgroup.Width) / 2;\n                dialog.AutoSizeMode = AutoSizeMode.GrowAndShrink;\n                dialog.AutoSize = true;\n\n                int result = (int)dialog.ShowDialog(parent);\n                _dialog = null;\n\n                if (_tcs.Task.IsCompleted)\n                    return;\n\n                _tcs.SetResult(result-1);\n            }));\n\n            return _tcs.Task;\n        }\n\n        public override void PlatformCancel(int? result)\n        {\n            if (_dialog != null)\n                _dialog.Close();\n            _tcs.SetResult(result);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteMouse.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing WinForms = System.Windows.Forms;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouse : MouseStrategy\n    {\n        private IntPtr _wndHandle = IntPtr.Zero;\n\n        [DllImportAttribute(\"user32.dll\", EntryPoint = \"SetCursorPos\")]\n        [return: MarshalAsAttribute(UnmanagedType.Bool)]\n        private static extern bool SetCursorPos(int X, int Y);\n        \n        [StructLayout(LayoutKind.Sequential)]\n        internal struct POINTSTRUCT\n        {\n            public int X;\n            public int Y;\n        }\n\n        [DllImport(\"user32.dll\", ExactSpelling=true, CharSet=CharSet.Auto)]\n        [return: MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]\n        internal static extern bool GetCursorPos(out POINTSTRUCT pt);\n        \n        [DllImport(\"user32.dll\", ExactSpelling=true, CharSet=CharSet.Auto)]\n        internal static extern int MapWindowPoints(HandleRef hWndFrom, HandleRef hWndTo, out POINTSTRUCT pt, int cPoints);\n\n        private static WinForms.Control _window;\n        private static MouseInputWnd _mouseInputWnd = new MouseInputWnd();\n\n        public override IntPtr PlatformGetWindowHandle()\n        {\n            return _wndHandle;\n        }\n\n        public override void PlatformSetWindowHandle(IntPtr windowHandle)\n        {\n            // Unregister old window\n            if (_mouseInputWnd.Handle != IntPtr.Zero)\n                _mouseInputWnd.ReleaseHandle();\n\n            _wndHandle = windowHandle;\n            _window = WinForms.Control.FromHandle(windowHandle);\n            _mouseInputWnd.AssignHandle(windowHandle);\n        }\n\n        public override bool PlatformIsRawInputAvailable()\n        {\n            return _mouseInputWnd.IsRawInputAvailable;\n        }\n\n        public override MouseState PlatformGetState()\n        {\n            POINTSTRUCT pos;\n            GetCursorPos(out pos);\n\n            // map screen position to window position. If no window is set return the screen position.\n            if (_window != null)\n                MapWindowPoints(new HandleRef(null, IntPtr.Zero), new HandleRef(_window, _window.Handle), out pos, 1);\n\n            Point clientPos = new Point(pos.X, pos.Y);\n            WinForms.MouseButtons buttons = WinForms.Control.MouseButtons;\n            \n            return new MouseState(\n                clientPos.X,\n                clientPos.Y,\n                _mouseInputWnd.ScrollWheelValue,\n                _mouseInputWnd.HorizontalScrollWheelValue,\n                _mouseInputWnd.RawX,\n                _mouseInputWnd.RawY,\n                (buttons & WinForms.MouseButtons.Left)   == WinForms.MouseButtons.Left ? ButtonState.Pressed : ButtonState.Released,\n                (buttons & WinForms.MouseButtons.Middle) == WinForms.MouseButtons.Middle ? ButtonState.Pressed : ButtonState.Released,\n                (buttons & WinForms.MouseButtons.Right)  == WinForms.MouseButtons.Right ? ButtonState.Pressed : ButtonState.Released,\n                (buttons & WinForms.MouseButtons.XButton1) == WinForms.MouseButtons.XButton1 ? ButtonState.Pressed : ButtonState.Released,\n                (buttons & WinForms.MouseButtons.XButton2) == WinForms.MouseButtons.XButton2 ? ButtonState.Pressed : ButtonState.Released\n                );\n        }\n\n        public override void PlatformSetPosition(int x, int y)\n        {\n            System.Drawing.Point pt = new System.Drawing.Point(x, y);\n\n            // map window position to screen position. If no window is set assume input was in screen position.\n            if (_window != null)\n                pt = _window.PointToScreen(pt);\n\n            SetCursorPos(pt.X, pt.Y);\n        }\n\n        public override void PlatformSetCursor(MouseCursor cursor)\n        {\n            if (_window != null)\n            {\n                _window.Cursor = ((IPlatformMouseCursor)cursor).GetStrategy<ConcreteMouseCursor>().WinFormsCursor;\n            }\n        }\n\n        #region Nested class MouseInputWnd\n        /// <remarks>\n        /// Subclass WindowHandle to read WM_MOUSEHWHEEL messages\n        /// </remarks>\n        class MouseInputWnd : System.Windows.Forms.NativeWindow\n        {\n            const int WM_MOUSEMOVE   = 0x0200;\n            const int WM_LBUTTONDOWN = 0x0201;\n            const int WM_LBUTTONUP   = 0x0202;\n            const int WM_RBUTTONDOWN = 0x0204;\n            const int WM_RBUTTONUP   = 0x0205;\n            const int WM_MBUTTONDOWN = 0x0207;\n            const int WM_MBUTTONUP   = 0x0208;\n            const int WM_MOUSEWHEEL  = 0x020A;\n            const int WM_MOUSEHWHEEL = 0x020E;\n            const int WM_INPUT       = 0x00FF;\n            \n            public int ScrollWheelValue = 0;\n            public int HorizontalScrollWheelValue = 0;\n            public int RawX = 0;\n            public int RawY = 0;\n\n            protected override void WndProc(ref WinForms.Message m)\n            {\n                switch (m.Msg)\n                {\n                    case WM_MOUSEWHEEL:\n                        short delta = (short)(((ulong)m.WParam >> 16) & 0xffff);\n                        ScrollWheelValue += delta;\n                        break;\n                    case WM_MOUSEHWHEEL:\n                        short deltaH = (short)(((ulong)m.WParam >> 16) & 0xffff);\n                        HorizontalScrollWheelValue += deltaH;\n                        break;\n                    case WM_INPUT:\n                        HandleRawInput(ref m);\n                        break;\n                }\n\n                base.WndProc(ref m);\n            }\n\n            internal bool IsRawInputAvailable { get; private set; }\n\n            protected override void OnHandleChange()\n            {                \n                base.OnHandleChange();\n\n                // Register RawInput\n                if (Handle != IntPtr.Zero)\n                {\n                    RAWINPUTDEVICE rid;\n                    rid.UsagePage = 0x01;\n                    rid.Usage = 0x02;\n                    rid.Flags = RIDEV_INPUTSINK;\n                    rid.hwndTarget = Handle;\n                    bool hr = RegisterRawInputDevices(ref rid, 1, (uint)Marshal.SizeOf(typeof(RAWINPUTDEVICE)));\n                    IsRawInputAvailable = hr;\n                }\n            }\n\n            public override void ReleaseHandle()\n            {\n                // Unregister RawInput\n                RAWINPUTDEVICE rid;\n                rid.UsagePage = 0x01;\n                rid.Usage = 0x02;\n                rid.Flags = RIDEV_REMOVE;\n                rid.hwndTarget = IntPtr.Zero;\n                bool hr = RegisterRawInputDevices(ref rid, 1, (uint)Marshal.SizeOf(typeof(RAWINPUTDEVICE)));\n                IsRawInputAvailable = false;\n\n                base.ReleaseHandle();\n            }\n            \n            \n            [StructLayout(LayoutKind.Sequential)]\n            internal struct RAWINPUTDEVICE\n            {\n                internal ushort UsagePage;\n                internal ushort Usage;\n                internal int Flags;\n                internal IntPtr hwndTarget;\n            }\n\n            [DllImport(\"user32.dll\", SetLastError = true)]\n            static extern bool RegisterRawInputDevices(ref RAWINPUTDEVICE pRawInputDevice, uint numberDevices, uint size);\n\n            private const int RIDEV_REMOVE    = 0x00000001;\n            private const int RIDEV_NOLEGACY  = 0x00000030;\n            private const int RIDEV_INPUTSINK = 0x00000100;\n            \n\n            [StructLayout(LayoutKind.Sequential)]\n            internal struct RAWMOUSE\n            {\n                public ushort Flags;\n                public ushort ButtonFlags;\n                public ushort ButtonData;\n\n                public uint RawButtons;\n                public int LastX;\n                public int LastY;\n                public uint ExtraInformation;\n            }\n            \n            [StructLayout(LayoutKind.Explicit)]\n            public struct RAWINPUTDATA\n            {\n                [FieldOffset(0)]\n                public RAWMOUSE mouse;\n                //[FieldOffset(0)]\n                //internal Rawkeyboard keyboard;\n                //[FieldOffset(0)]\n                //internal Rawhid hid;\n            }\n\n            [StructLayout(LayoutKind.Sequential)]\n            public struct RAWINPUTHEADER\n            {\n                public int Type;                     // Type of raw input (RIM_TYPEHID 2, RIM_TYPEKEYBOARD 1, RIM_TYPEMOUSE 0)\n                public int Size;                     // Size in bytes of the entire input packet of data. This includes RAWINPUT plus possible extra input reports in the RAWHID variable length array. \n                public IntPtr hDevice;               // A handle to the device generating the raw input data. \n                public IntPtr wParam;                // RIM_INPUT 0 if input occurred while application was in the foreground else RIM_INPUTSINK 1 if it was not.\n            }\n\n            [StructLayout(LayoutKind.Sequential)]\n            public struct RAWINPUT\n            {\n                public RAWINPUTHEADER header;           // 64 bit header size is 24  32 bit the header size is 16\n                public RAWINPUTDATA data;               // Creating the rest in a struct allows the header size to align correctly for 32 or 64 bit\n            }\n\n            [DllImport(\"User32.dll\")]\n            internal static extern int GetRawInputData( IntPtr hRawInput, uint command, \n                                                        IntPtr pData, ref uint size, int sizeHeader);\n            \n            private const uint RID_INPUT  = 0x10000003;\n            private const uint RID_HEADER = 0x10000005;\n\n            private const uint RIM_TYPEMOUSE    = 0x00;\n            private const uint RIM_TYPEKEYBOARD = 0x01;\n            private const uint RIM_TYPEHID      = 0x02;            \n\n            private const uint MOUSE_MOVE_RELATIVE      = 0x00;\n            private const uint MOUSE_MOVE_ABSOLUTE      = 0x01;\n            private const uint MOUSE_VIRTUAL_DESKTOP    = 0x02;\n            private const uint MOUSE_ATTRIBUTES_CHANGED = 0x04;\n\n            private const uint RI_MOUSE_WHEEL = 0x0400;\n\n            private unsafe void HandleRawInput(ref WinForms.Message message)\n            {\n                int hr;\n                uint dataSize = 0;\n                hr = GetRawInputData(message.LParam, RID_INPUT, IntPtr.Zero, ref dataSize, sizeof(RAWINPUTHEADER));\n\n                // the RAWINPUT struct we pass in as &ri should be the same size as the available data size\n                if (dataSize != sizeof(RAWINPUT))\n                    return;\n\n                RAWINPUT ri;\n                hr = GetRawInputData(message.LParam, RID_INPUT, new IntPtr(&ri), ref dataSize, sizeof(RAWINPUTHEADER));\n\n                if (ri.header.Type == RIM_TYPEMOUSE)\n                {\n                    RAWMOUSE* mi = &ri.data.mouse;\n\n                    if ((mi->Flags & MOUSE_MOVE_ABSOLUTE) != 0)\n                    {\n                        // handle absolute position here\n                    }\n                    else // MOUSE_MOVE_RELATIVE\n                    {\n                        unchecked\n                        {\n                            RawX += mi->LastX;\n                            RawY += mi->LastY;\n                        }\n                    }\n                    //if ((mi->ButtonFlags & RI_MOUSE_WHEEL) != 0)\n                    //{\n                    //    // handle wheel here.\n                    //    // Wheel delta is in mi->ButtonData\n                    //}\n                }\n\n                return;\n            }\n        }\n        #endregion Nested class MouseInputWnd\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.WindowsDX/ConcreteMouseCursor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework.Input;\nusing WinFormsCursor = System.Windows.Forms.Cursor;\nusing WinFormsCursors = System.Windows.Forms.Cursors;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouseCursor : MouseCursorStrategy\n    {\n        WinFormsCursor _winFormsCursor;\n\n        internal WinFormsCursor WinFormsCursor { get { return _winFormsCursor; } }\n\n\n        public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            this._cursorType = cursorType;\n            this._handle = IntPtr.Zero;\n\n            _winFormsCursor = CursorTypeToWinFormsCursor(cursorType);\n        }\n\n        private WinFormsCursor CursorTypeToWinFormsCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            switch (cursorType)\n            {\n                case MouseCursorStrategy.MouseCursorType.Arrow:\n                    return WinFormsCursors.Arrow;\n                case MouseCursorStrategy.MouseCursorType.IBeam:\n                    return WinFormsCursors.IBeam;\n                case MouseCursorStrategy.MouseCursorType.Wait:\n                    return WinFormsCursors.WaitCursor;\n                case MouseCursorStrategy.MouseCursorType.Crosshair:\n                    return WinFormsCursors.Cross;\n                case MouseCursorStrategy.MouseCursorType.WaitArrow:\n                    return WinFormsCursors.AppStarting;\n                case MouseCursorStrategy.MouseCursorType.SizeNWSE:\n                    return WinFormsCursors.SizeNWSE;\n                case MouseCursorStrategy.MouseCursorType.SizeNESW:\n                    return WinFormsCursors.SizeNESW;\n                case MouseCursorStrategy.MouseCursorType.SizeWE:\n                    return WinFormsCursors.SizeWE;\n                case MouseCursorStrategy.MouseCursorType.SizeNS:\n                    return WinFormsCursors.SizeNS;\n                case MouseCursorStrategy.MouseCursorType.SizeAll:\n                    return WinFormsCursors.SizeAll;\n                case MouseCursorStrategy.MouseCursorType.No:\n                    return WinFormsCursors.No;\n                case MouseCursorStrategy.MouseCursorType.Hand:\n                    return WinFormsCursors.Hand;\n\n                default:\n                    throw new InvalidOperationException(\"cursorType\");\n            }\n        }\n\n\n        public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy)\n        {\n            // convert ABGR to ARGB\n            for (int i = 0; i < data.Length; i += 4)\n            {\n                byte r = data[i];\n                data[i + 0] = data[i + 2];\n                data[i + 2] = r;\n            }\n\n            GCHandle gcHandle = GCHandle.Alloc(data, GCHandleType.Pinned);\n            try\n            {\n                IntPtr dataPtr = gcHandle.AddrOfPinnedObject();\n                using (Bitmap bitmap = new Bitmap(w, h, h * 4, PixelFormat.Format32bppArgb, dataPtr))\n                {\n                    IconInfo iconInfo = default(IconInfo);\n                    IntPtr hIcon = bitmap.GetHicon();\n                    GetIconInfo(hIcon, out iconInfo);\n                    iconInfo.xHotspot = originx;\n                    iconInfo.yHotspot = originy;\n                    iconInfo.fIcon = false;\n                    IntPtr handle = CreateIconIndirect(ref iconInfo);\n                    DeleteObject(iconInfo.ColorBitmap);\n                    DeleteObject(iconInfo.MaskBitmap);\n                    DestroyIcon(hIcon);\n\n                    this._cursorType = MouseCursorStrategy.MouseCursorType.User;\n                    this._handle = handle;\n\n                    _winFormsCursor = new WinFormsCursor(handle);\n                }\n            }\n            finally\n            {\n                gcHandle.Free();\n            }\n        }\n\n        protected override void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n                if (_winFormsCursor != null)\n                    _winFormsCursor.Dispose();\n                _winFormsCursor = null;\n            }\n\n            if (this.Handle != IntPtr.Zero)\n                DestroyIcon(this.Handle);\n\n            base.Dispose(dispose);\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct IconInfo\n        {\n            public bool fIcon;\n            public int xHotspot;\n            public int yHotspot;\n            public IntPtr MaskBitmap;\n            public IntPtr ColorBitmap;\n        };\n\n        [DllImport(\"user32.dll\")]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        static extern bool GetIconInfo(IntPtr hIcon, out IconInfo pIconInfo);\n\n        [DllImport(\"gdi32.dll\")]\n        static extern bool DeleteObject(IntPtr hObject);\n\n        [DllImport(\"user32.dll\")]\n        static extern IntPtr CreateIconIndirect([In] ref IconInfo iconInfo);\n\n        [DllImport(\"user32.dll\")]\n        static extern bool DestroyIcon(IntPtr handle);\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.WindowsDX/Touch/ConcreteTouchPanel.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public sealed class ConcreteTouchPanel : TouchPanelStrategy\n    {\n        public override IntPtr WindowHandle\n        {\n            get { return base.WindowHandle; }\n            set { base.WindowHandle = value; }\n        }\n\n        public override int DisplayWidth\n        {\n            get { return base.DisplayWidth; }\n            set { base.DisplayWidth = value; }\n        }\n\n        public override int DisplayHeight\n        {\n            get { return base.DisplayHeight; }\n            set { base.DisplayHeight = value; }\n        }\n\n        public override DisplayOrientation DisplayOrientation\n        {\n            get { return base.DisplayOrientation; }\n            set { base.DisplayOrientation = value; }\n        }\n\n        public override GestureType EnabledGestures\n        {\n            get { return base.EnabledGestures; }\n            set { base.EnabledGestures = value; }\n        }\n\n\n        public override bool IsGestureAvailable\n        {\n            get { return base.IsGestureAvailable; }\n        }\n\n        public ConcreteTouchPanel()\n            : base()\n        {\n            // Initialize Capabilities\n            int maximumTouchCount = GetSystemMetrics(SM_MAXIMUMTOUCHES);\n            bool isConnected = (maximumTouchCount > 0);\n            bool hasPressure = false;\n            _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure);\n\n            \n        }\n\n        public override TouchPanelCapabilities GetCapabilities()\n        {\n            return _capabilities;\n        }\n\n        public override TouchCollection GetState()\n        {\n            return base.GetState();\n        }\n\n        public override GestureSample ReadGesture()\n        {\n            return base.ReadGesture();\n        }\n\n        public override void AddPressedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = WinFormsGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddPressedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddMovedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = WinFormsGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddMovedEvent(nativeTouchId, position, winSize);\n            }\n        }\n   \n        public override void AddReleasedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = WinFormsGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        public override void AddCanceledEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = WinFormsGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n        const int SM_MAXIMUMTOUCHES = 95;\n\n        [System.Runtime.InteropServices.DllImport(\"user32.dll\", CharSet = System.Runtime.InteropServices.CharSet.Auto, ExactSpelling = true)]\n        static extern int GetSystemMetrics(int nIndex);\n\n    }\n}"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteGamePad.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing GameController;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    // TODO: move GamePadDevice to Framework.Input library\n    public abstract class GamePadDevice\n    {\n        public GamePadCapabilities Capabilities;\n\n        public GamePadDevice()\n        {\n\n        }\n    }\n\n    public sealed class ConcreteGamePad : GamePadStrategy\n    {\n        const int MaxNumberOfGamePads = 4;\n\n        // Default & SDL Xbox Controller dead zones\n        // Based on the XInput constants\n        public override float LeftThumbDeadZone { get { return 0.24f; } }\n        public override float RightThumbDeadZone { get { return 0.265f; } }\n\n        public override int PlatformGetMaxNumberOfGamePads()\n        {\n            return MaxNumberOfGamePads;\n        }\n\n        private GamePadCapabilities GetDefaultCapabilities()\n        {\n            return base.CreateGamePadCapabilities(\n                    gamePadType: GamePadType.Unknown,\n                    displayName: null,\n                    identifier: null,\n                    isConnected: false,\n                    buttons: (Buttons)0,\n                    hasLeftVibrationMotor: false,\n                    hasRightVibrationMotor: false,\n                    hasVoiceSupport: false\n                );\n        }\n\n        public override GamePadCapabilities PlatformGetCapabilities(int index)\n        {\n            GCControllerPlayerIndex gcindex = (GCControllerPlayerIndex)index;\n            GCController gccontroller = FindGCController(gcindex);\n\n            if (gccontroller == null)\n                return GetDefaultCapabilities();\n\n            return GetCapabilities(gccontroller);\n        }\n\n\n        private GamePadCapabilities GetCapabilities(GCController controller)\n        {\n            //--\n            GamePadType gamePadType = GamePadType.Unknown;\n            string displayName = String.Empty;\n            string identifier = String.Empty;\n            bool isConnected;\n            Buttons buttons = (Buttons)0;\n            bool hasLeftVibrationMotor = false;\n            bool hasRightVibrationMotor = false;\n            bool hasVoiceSupport = false;\n            //--\n\n            //All iOS controllers have these basics\n            isConnected = false;\n            gamePadType = GamePadType.GamePad;\n\n            if (controller.ExtendedGamepad != null)\n            {\n                buttons |= Buttons.A;\n                buttons |= Buttons.B;\n                buttons |= Buttons.X;\n                buttons |= Buttons.Y;\n                buttons |= Buttons.Back;\n                buttons |= Buttons.Start;\n                buttons |= Buttons.DPadUp;\n                buttons |= Buttons.DPadDown;\n                buttons |= Buttons.DPadLeft;\n                buttons |= Buttons.DPadRight;\n                buttons |= Buttons.LeftShoulder;\n                buttons |= Buttons.RightShoulder;\n                buttons |= Buttons.LeftTrigger;\n                buttons |= Buttons.RightTrigger;\n                buttons |= Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight;       \n                buttons |= Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp;\n                buttons |= Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight;\n                buttons |= Buttons.RightThumbstickDown | Buttons.RightThumbstickUp;\n            }\n            else if (controller.Gamepad != null)\n            {\n                buttons |= Buttons.A;\n                buttons |= Buttons.B;\n                buttons |= Buttons.X;\n                buttons |= Buttons.Y;\n                buttons |= Buttons.DPadUp;\n                buttons |= Buttons.DPadDown;\n                buttons |= Buttons.DPadLeft;\n                buttons |= Buttons.DPadRight;\n                buttons |= Buttons.LeftShoulder;\n                buttons |= Buttons.RightShoulder;\n            }\n\n            return base.CreateGamePadCapabilities(\n                    gamePadType: gamePadType,\n                    displayName: displayName,\n                    identifier: identifier,\n                    isConnected: isConnected,\n                    buttons: buttons,\n                    hasLeftVibrationMotor: hasLeftVibrationMotor,\n                    hasRightVibrationMotor: hasRightVibrationMotor,\n                    hasVoiceSupport: hasVoiceSupport\n                );\n        }\n\n        public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            GCControllerPlayerIndex gcindex = (GCControllerPlayerIndex)index;\n            GCController gccontroller = FindGCController(gcindex);\n\n            if (gccontroller == null)\n            {\n                return base.CreateGamePadState(\n                    base.CreateGamePadThumbSticks(Vector2.Zero, Vector2.Zero, leftDeadZoneMode, rightDeadZoneMode),\n                    new GamePadTriggers(0, 0),\n                    new GamePadButtons((Buttons)0),\n                    new GamePadDPad(ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released),\n                    isConnected: false);\n            }\n            \n            Buttons buttons = 0;\n            bool connected = false;\n            ButtonState Up = ButtonState.Released;\n            ButtonState Down = ButtonState.Released;\n            ButtonState Left = ButtonState.Released;\n            ButtonState Right = ButtonState.Released;\n\n            Vector2 leftThumbStickPosition = Vector2.Zero;\n            Vector2 rightThumbStickPosition = Vector2.Zero;\n\n            float leftTriggerValue = 0;\n            float rightTriggerValue = 0;\n\n            connected = true;\n\n            if (gccontroller.ExtendedGamepad != null)\n            {\n                if (gccontroller.ExtendedGamepad.ButtonA.IsPressed)\n                    buttons |= Buttons.A;\n                if (gccontroller.ExtendedGamepad.ButtonB.IsPressed)\n                    buttons |= Buttons.B;\n                if (gccontroller.ExtendedGamepad.ButtonX.IsPressed)\n                    buttons |= Buttons.X;\n                if (gccontroller.ExtendedGamepad.ButtonY.IsPressed)\n                    buttons |= Buttons.Y;\n\n                if (gccontroller.ExtendedGamepad.LeftShoulder.IsPressed)\n                    buttons |= Buttons.LeftShoulder;\n                if (gccontroller.ExtendedGamepad.RightShoulder.IsPressed)\n                    buttons |= Buttons.RightShoulder;\n\n                if (gccontroller.ExtendedGamepad.LeftTrigger.IsPressed)\n                    buttons |= Buttons.LeftTrigger;\n                if (gccontroller.ExtendedGamepad.RightTrigger.IsPressed)\n                    buttons |= Buttons.RightTrigger;\n\n                if (gccontroller.ExtendedGamepad.ButtonMenu.IsPressed)\n                    buttons |= Buttons.Start;\n                if (gccontroller.ExtendedGamepad.ButtonOptions != null &&\n                    gccontroller.ExtendedGamepad.ButtonOptions.IsPressed)\n                    buttons |= Buttons.Back;\n\n                if (gccontroller.ExtendedGamepad.DPad.Up.IsPressed)\n                {\n                    Up = ButtonState.Pressed;\n                    buttons |= Buttons.DPadUp;\n                }\n                if (gccontroller.ExtendedGamepad.DPad.Down.IsPressed)\n                {\n                    Down = ButtonState.Pressed;\n                    buttons |= Buttons.DPadDown;\n                }\n                if (gccontroller.ExtendedGamepad.DPad.Left.IsPressed)\n                {\n                    Left = ButtonState.Pressed;\n                    buttons |= Buttons.DPadLeft;\n                }\n                if (gccontroller.ExtendedGamepad.DPad.Right.IsPressed)\n                {\n                    Right = ButtonState.Pressed;\n                    buttons |= Buttons.DPadRight;\n                }\n\n                leftThumbStickPosition.X = gccontroller.ExtendedGamepad.LeftThumbstick.XAxis.Value;\n                leftThumbStickPosition.Y = gccontroller.ExtendedGamepad.LeftThumbstick.YAxis.Value;\n                rightThumbStickPosition.X = gccontroller.ExtendedGamepad.RightThumbstick.XAxis.Value;\n                rightThumbStickPosition.Y = gccontroller.ExtendedGamepad.RightThumbstick.YAxis.Value;\n                leftTriggerValue = gccontroller.ExtendedGamepad.LeftTrigger.Value;\n                rightTriggerValue = gccontroller.ExtendedGamepad.RightTrigger.Value;\n            }\n            else if (gccontroller.Gamepad != null)\n            {\n                if (gccontroller.Gamepad.ButtonA.IsPressed)\n                    buttons |= Buttons.A;\n                if (gccontroller.Gamepad.ButtonB.IsPressed)\n                    buttons |= Buttons.B;\n                if (gccontroller.Gamepad.ButtonX.IsPressed)\n                    buttons |= Buttons.X;\n                if (gccontroller.Gamepad.ButtonY.IsPressed)\n                    buttons |= Buttons.Y;\n\n                if (gccontroller.Gamepad.DPad.Up.IsPressed)\n                {\n                    Up = ButtonState.Pressed;\n                    buttons |= Buttons.DPadUp;\n                }\n                if (gccontroller.Gamepad.DPad.Down.IsPressed)\n                {\n                    Down = ButtonState.Pressed;\n                    buttons |= Buttons.DPadDown;\n                }\n                if (gccontroller.Gamepad.DPad.Left.IsPressed)\n                {\n                    Left = ButtonState.Pressed;\n                    buttons |= Buttons.DPadLeft;\n                }\n                if (gccontroller.Gamepad.DPad.Right.IsPressed)\n                {\n                    Right = ButtonState.Pressed;\n                    buttons |= Buttons.DPadRight;\n                }\n            }\n\n            GamePadState state = base.CreateGamePadState(\n                base.CreateGamePadThumbSticks(leftThumbStickPosition, rightThumbStickPosition, leftDeadZoneMode, rightDeadZoneMode),\n                new GamePadTriggers(leftTriggerValue, rightTriggerValue),\n                new GamePadButtons(buttons),\n                new GamePadDPad(Up, Down, Left, Right),\n                isConnected: connected);\n            return state;\n        }\n\n\n        public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            return false;\n        }\n\n        private GCController FindGCController(GCControllerPlayerIndex gcindex)\n        {\n            GCController[] controllers = GCController.Controllers;\n\n            // index is used ?\n            foreach (GCController controller in controllers)\n            {\n                if ((long)controller.PlayerIndex == (long)gcindex)\n                    return controller;\n            }\n\n            // assing index\n            foreach (GCController controller in controllers)\n            {\n                if ((long)controller.PlayerIndex == (long)GCControllerPlayerIndex.Unset)\n                {\n#if XAMARINIOS\n                    controller.PlayerIndex = (System.nint)(long)gcindex;\n#else\n                    controller.PlayerIndex = gcindex;\n#endif\n                    return controller;\n                }\n            }\n\n            return null;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteGamePad.tvOS.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing GameController;\nusing UIKit;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteGamePad : GamePadStrategy\n    {\n        internal bool MenuPressed = false;\n\n        public override int PlatformGetMaxNumberOfGamePads()\n        {\n            return 4;\n        }\n\n        private bool IndexIsUsed(GCControllerPlayerIndex index)\n        {\n            foreach (var ctrl in GCController.Controllers)\n                if (ctrl.PlayerIndex==(int)index) return true;\n\n            return false;\n        }\n\n        private void AssingIndex(GCControllerPlayerIndex index)\n        {\n            if (IndexIsUsed(index))\n                return;\n\n            foreach (var controller in GCController.Controllers)\n            {\n                if (controller.PlayerIndex == (int)index)\n                    break;\n                if (controller.PlayerIndex == (int)GCControllerPlayerIndex.Unset)\n                {\n                    controller.PlayerIndex = (int)index;\n                    break;\n                }\n            }\n        }\n\n        public override GamePadCapabilities PlatformGetCapabilities(int index)\n        {\n            GCControllerPlayerIndex ind = (GCControllerPlayerIndex)index;\n\n            AssingIndex(ind);\n\n            foreach (var controller in GCController.Controllers)\n            {\n                if (controller == null)\n                    continue;\n                if (controller.PlayerIndex == (int)ind)\n                    return GetCapabilities(controller);\n            }\n\n            return base.CreateGamePadCapabilities(\n                    gamePadType: GamePadType.Unknown,\n                    displayName: null,\n                    identifier: null,\n                    isConnected: false,\n                    buttons: (Buttons)0,\n                    hasLeftVibrationMotor: false,\n                    hasRightVibrationMotor: false,\n                    hasVoiceSupport: false\n                );\n        }\n\n        private GamePadCapabilities GetCapabilities(GCController controller)\n        {\n            //--\n            GamePadType gamePadType = GamePadType.Unknown;\n            string displayName = String.Empty;\n            string identifier = String.Empty;\n            bool isConnected;\n            Buttons buttons = (Buttons)0;\n            bool hasLeftVibrationMotor = false;\n            bool hasRightVibrationMotor = false;\n            bool hasVoiceSupport = false;\n            //--\n\n            //All iOS controllers have these basics\n            isConnected = false;\n            gamePadType = GamePadType.GamePad;\n\n            if (controller.ExtendedGamepad != null)\n            {\n                buttons |= Buttons.A;\n                buttons |= Buttons.B;\n                buttons |= Buttons.X;\n                buttons |= Buttons.Y;\n                buttons |= Buttons.Back;\n                buttons |= Buttons.DPadUp;\n                buttons |= Buttons.DPadDown;\n                buttons |= Buttons.DPadLeft;\n                buttons |= Buttons.DPadRight;\n                buttons |= Buttons.LeftShoulder;\n                buttons |= Buttons.RightShoulder;\n                buttons |= Buttons.LeftTrigger;\n                buttons |= Buttons.RightTrigger;\n                buttons |= Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight;       \n                buttons |= Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp;\n                buttons |= Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight;\n                buttons |= Buttons.RightThumbstickDown | Buttons.RightThumbstickUp;\n            }\n            else if (controller.Gamepad != null)\n            {\n                buttons |= Buttons.A;\n                buttons |= Buttons.B;\n                buttons |= Buttons.X;\n                buttons |= Buttons.Y;\n                capabilities.HasBackButton = true;\n                buttons |= Buttons.DPadUp;\n                buttons |= Buttons.DPadDown;\n                buttons |= Buttons.DPadLeft;\n                buttons |= Buttons.DPadRight;\n                buttons |= Buttons.LeftShoulder;\n                buttons |= Buttons.RightShoulder;\n            }\n            else if (controller.MicroGamepad != null)\n            {\n                buttons |= Buttons.A;\n                buttons |= Buttons.X;\n                capabilities.HasBackButton = true;\n                buttons |= Buttons.DPadUp;\n                buttons |= Buttons.DPadDown;\n                buttons |= Buttons.DPadLeft;\n                buttons |= Buttons.DPadRight;\n            }\n\n            return base.CreateGamePadCapabilities(\n                    gamePadType: gamePadType,\n                    displayName: displayName,\n                    identifier: identifier,\n                    isConnected: isConnected,\n                    buttons: buttons,\n                    hasLeftVibrationMotor: hasLeftVibrationMotor,\n                    hasRightVibrationMotor: hasRightVibrationMotor,\n                    hasVoiceSupport: hasVoiceSupport\n                );\n        }\n\n        public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            GCControllerPlayerIndex ind = (GCControllerPlayerIndex)index;\n\n\n            List<Buttons> buttons = new List<Buttons>();\n            bool connected = false;\n            ButtonState Up = ButtonState.Released;\n            ButtonState Down = ButtonState.Released;\n            ButtonState Left = ButtonState.Released;\n            ButtonState Right = ButtonState.Released;\n\n            Vector2 leftThumbStickPosition = Vector2.Zero;\n            Vector2 rightThumbStickPosition = Vector2.Zero;\n\n            float leftTriggerValue = 0;\n            float rightTriggerValue = 0;\n\n            AssingIndex(ind);\n\n            foreach (var controller in GCController.Controllers)\n            {\n                if (controller == null)\n                    continue;\n\n                if (controller.PlayerIndex != (int)ind)\n                    continue;\n\n                connected = true;\n                if (MenuPressed)\n                {\n                    buttons.Add(Buttons.Back);\n                    MenuPressed = false;\n                }\n\n                if (controller.ExtendedGamepad != null)\n                {\n                    if (controller.ExtendedGamepad.ButtonA.IsPressed == true && !buttons.Contains(Buttons.A))\n                        buttons.Add(Buttons.A);\n                    if (controller.ExtendedGamepad.ButtonB.IsPressed == true && !buttons.Contains(Buttons.B))\n                        buttons.Add(Buttons.B);\n                    if (controller.ExtendedGamepad.ButtonX.IsPressed == true && !buttons.Contains(Buttons.X))\n                        buttons.Add(Buttons.X);\n                    if (controller.ExtendedGamepad.ButtonY.IsPressed == true && !buttons.Contains(Buttons.Y))\n                        buttons.Add(Buttons.Y);\n\n                    if (controller.ExtendedGamepad.LeftShoulder.IsPressed == true && !buttons.Contains(Buttons.LeftShoulder))\n                        buttons.Add(Buttons.LeftShoulder);\n                    if (controller.ExtendedGamepad.RightShoulder.IsPressed == true && !buttons.Contains(Buttons.RightShoulder))\n                        buttons.Add(Buttons.RightShoulder);\n\n                    Up = controller.ExtendedGamepad.DPad.Up.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Down = controller.ExtendedGamepad.DPad.Down.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Left = controller.ExtendedGamepad.DPad.Left.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Right = controller.ExtendedGamepad.DPad.Right.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n\n                    leftThumbStickPosition.X = controller.ExtendedGamepad.LeftThumbstick.XAxis.Value;\n                    leftThumbStickPosition.Y = controller.ExtendedGamepad.LeftThumbstick.YAxis.Value;\n                    rightThumbStickPosition.X = controller.ExtendedGamepad.RightThumbstick.XAxis.Value;\n                    rightThumbStickPosition.Y = controller.ExtendedGamepad.RightThumbstick.YAxis.Value;\n                    leftTriggerValue = controller.ExtendedGamepad.LeftTrigger.Value;\n                    rightTriggerValue = controller.ExtendedGamepad.RightTrigger.Value;\n                }\n                else if (controller.Gamepad != null)\n                {\n                    if (controller.Gamepad.ButtonA.IsPressed == true && !buttons.Contains(Buttons.A))\n                        buttons.Add(Buttons.A);\n                    if (controller.Gamepad.ButtonB.IsPressed == true && !buttons.Contains(Buttons.B))\n                        buttons.Add(Buttons.B);\n                    if (controller.Gamepad.ButtonX.IsPressed == true && !buttons.Contains(Buttons.X))\n                        buttons.Add(Buttons.X);\n                    if (controller.Gamepad.ButtonY.IsPressed == true && !buttons.Contains(Buttons.Y))\n                        buttons.Add(Buttons.Y);\n                    Up = controller.Gamepad.DPad.Up.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Down = controller.Gamepad.DPad.Down.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Left = controller.Gamepad.DPad.Left.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Right = controller.Gamepad.DPad.Right.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n\n                }\n                else if (controller.MicroGamepad != null)\n                {\n                    if (controller.MicroGamepad.ButtonA.IsPressed == true && !buttons.Contains(Buttons.A))\n                        buttons.Add(Buttons.A);\n                    if (controller.MicroGamepad.ButtonX.IsPressed == true && !buttons.Contains(Buttons.X))\n                        buttons.Add(Buttons.X);\n                    Up = controller.MicroGamepad.Dpad.Up.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Down = controller.MicroGamepad.Dpad.Down.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Left = controller.MicroGamepad.Dpad.Left.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                    Right = controller.MicroGamepad.Dpad.Right.IsPressed ? ButtonState.Pressed : ButtonState.Released;\n                }\n            }\n            GamePadState state = new GamePadState(\n                new GamePadThumbSticks(leftThumbStickPosition, rightThumbStickPosition, leftDeadZoneMode, rightDeadZoneMode),\n                new GamePadTriggers(leftTriggerValue, rightTriggerValue),\n                new GamePadButtons(buttons.ToArray()),\n                new GamePadDPad(Up, Down, Left, Right));\n            state.IsConnected = connected;\n            return state;\n        }\n\n        public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteGamePadDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing GameController;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    internal class IOSGamePadDevice : GamePadDevice\n    {\n\n        public IOSGamePadDevice()\n            : base()\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteInputFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteInputFactory : InputFactory\n    {\n\n        public override GamePadStrategy CreateGamePadStrategy()\n        {\n            return new ConcreteGamePad();\n        }\n\n        public override JoystickStrategy CreateJoystickStrategy()\n        {\n            return new ConcreteJoystick();\n        }\n\n        public override KeyboardStrategy CreateKeyboardStrategy()\n        {\n            return new ConcreteKeyboard();\n        }\n\n        public override MouseStrategy CreateMouseStrategy()\n        {\n            return new ConcreteMouse();\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            return new ConcreteMouseCursor(cursorType);\n        }\n\n        public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy)\n        {\n            return new ConcreteMouseCursor(data, w, h, originx, originy);\n        }\n\n        public override TouchPanelStrategy CreateTouchPanelStrategy()\n        {\n            return new ConcreteTouchPanel();\n        }\n\n        public override KeyboardInputStrategy CreateKeyboardInputStrategy()\n        {\n            return new ConcreteKeyboardInput();\n        }\n\n        public override MessageBoxStrategy CreateMessageBoxStrategy()\n        {\n            return new ConcreteMessageBox();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteJoystick.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteJoystick : JoystickStrategy\n    {\n        public override bool PlatformIsSupported\n        {\n            get { return false; }\n        }\n\n        public override int PlatformLastConnectedIndex\n        {\n            get { return -1; }\n        }\n\n        public override JoystickCapabilities PlatformGetCapabilities(int index)\n        {\n            return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0);\n        }\n\n        public override JoystickState PlatformGetState(int index)\n        {\n            return JoystickStrategy.DefaultJoystickState;\n        }\n\n\n        public override void PlatformGetState(int index, ref JoystickState joystickState)\n        {\n\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteKeyboard.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboard : KeyboardStrategy\n    {\n        private List<Keys> _keys;\n\n        public override KeyboardState PlatformGetState()\n        {\n            return base.CreateKeyboardState(_keys);\n        }\n\n        internal void SetKeys(List<Keys> keys)\n        {\n            _keys = keys;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteKeyboardInput.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Input;\nusing UIKit;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteKeyboardInput : KeyboardInputStrategy\n    {\n        private TaskCompletionSource<string> tcs;\n        private UIAlertView alert;\n\n        public override Task<string> PlatformShow(string title, string description, string defaultText, bool usePasswordMode)\n        {\n            tcs = new TaskCompletionSource<string>();\n\n            UIApplication.SharedApplication.InvokeOnMainThread(delegate\n            {\n                alert = new UIAlertView();\n                alert.Title = title;\n                alert.Message = description;\n                alert.AlertViewStyle = usePasswordMode ? UIAlertViewStyle.SecureTextInput : UIAlertViewStyle.PlainTextInput;\n                alert.AddButton(\"Cancel\");\n                alert.AddButton(\"Ok\");\n                UITextField alertTextField = alert.GetTextField(0);\n                alertTextField.KeyboardType = UIKeyboardType.ASCIICapable;\n                alertTextField.AutocorrectionType = UITextAutocorrectionType.No;\n                alertTextField.AutocapitalizationType = UITextAutocapitalizationType.Sentences;\n                alertTextField.Text = defaultText;\n                alert.Dismissed += (sender, e) =>\n                {\n                    if (!tcs.Task.IsCompleted)\n                        tcs.SetResult((int)e.ButtonIndex == 0 ? null : alert.GetTextField(0).Text);\n                };\n\n                // UIAlertView's textfield does not show keyboard in iOS8\n                // http://stackoverflow.com/questions/25563108/uialertviews-textfield-does-not-show-keyboard-in-ios8\n                if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))\n                    alert.Presented += (sender, args) => alertTextField.SelectAll(alert);\n\n                alert.Show();\n            });\n\n            return tcs.Task;\n        }\n\n        public override void PlatformCancel(string result)\n        {\n            if (!tcs.Task.IsCompleted)\n                tcs.SetResult(result);\n\n            UIApplication.SharedApplication.InvokeOnMainThread(delegate\n            {\n                alert.DismissWithClickedButtonIndex(0, true);\n            });\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteMessageBox.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing UIKit;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMessageBox : MessageBoxStrategy\n    {\n        private TaskCompletionSource<int?> tcs;\n        private UIAlertView alert;\n\n        public override Task<int?> PlatformShow(string title, string description, List<string> buttons)\n        {\n            tcs = new TaskCompletionSource<int?>();\n            UIApplication.SharedApplication.InvokeOnMainThread(delegate\n            {\n                alert = new UIAlertView();\n                alert.Title = title;\n                alert.Message = description;\n                foreach (string button in buttons)\n                    alert.AddButton(button);\n                alert.Dismissed += (sender, e) =>\n                {\n                    if (!tcs.Task.IsCompleted)\n\t\t\t\t\t    tcs.SetResult((int)e.ButtonIndex);\n                };\n                alert.Show();\n            });\n\n            return tcs.Task;\n        }\n\n        public override void PlatformCancel(int? result)\n        {\n            if (!tcs.Task.IsCompleted)\n                tcs.SetResult(result);\n\n            UIApplication.SharedApplication.InvokeOnMainThread(delegate\n            {\n                alert.DismissWithClickedButtonIndex(0, true);\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteMouse.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouse : MouseStrategy\n    {\n        private IntPtr _wndHandle = IntPtr.Zero;\n\n        private Point _pos;\n        private int _scrollX, _scrollY;\n        private int _rawX, _rawY;\n        private ButtonState _leftButton, _rightButton, _middleButton;\n\n        public override IntPtr PlatformGetWindowHandle()\n        {\n            return _wndHandle;\n        }\n\n        public override void PlatformSetWindowHandle(IntPtr windowHandle)\n        {\n            _wndHandle = windowHandle;\n        }\n\n        public override bool PlatformIsRawInputAvailable()\n        {\n            return false;\n        }\n\n        public override MouseState PlatformGetState()\n        {\n            MouseState mouseState = new MouseState(\n                    x: _pos.X, y: _pos.Y,\n                    scrollWheel: _scrollY, horizontalScrollWheel: _scrollX,\n                    rawX: _rawX, rawY: _rawY,\n                    leftButton: _leftButton,\n                    middleButton: _middleButton,\n                    rightButton: _rightButton,\n                    xButton1: ButtonState.Released,\n                    xButton2: ButtonState.Released\n                    );\n\n            return mouseState;\n        }\n\n        public override void PlatformSetPosition(int x, int y)\n        {\n            _pos.X = x;\n            _pos.Y = y;\n        }\n\n        public override void PlatformSetCursor(MouseCursor cursor)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.iOS/ConcreteMouseCursor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public sealed class ConcreteMouseCursor : MouseCursorStrategy\n    {\n\n        public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            this._cursorType = cursorType;\n            this._handle = IntPtr.Zero;\n        }\n\n\n        public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n            }\n\n            base.Dispose(dispose);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Input/.iOS/Touch/ConcreteTouchPanel.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing UIKit;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public sealed class ConcreteTouchPanel : TouchPanelStrategy\n    {\n        public override IntPtr WindowHandle\n        {\n            get { return base.WindowHandle; }\n            set { base.WindowHandle = value; }\n        }\n\n        public override int DisplayWidth\n        {\n            get { return base.DisplayWidth; }\n            set { base.DisplayWidth = value; }\n        }\n\n        public override int DisplayHeight\n        {\n            get { return base.DisplayHeight; }\n            set { base.DisplayHeight = value; }\n        }\n\n        public override DisplayOrientation DisplayOrientation\n        {\n            get { return base.DisplayOrientation; }\n            set { base.DisplayOrientation = value; }\n        }\n\n        public override GestureType EnabledGestures\n        {\n            get { return base.EnabledGestures; }\n            set { base.EnabledGestures = value; }\n        }\n\n\n        public override bool IsGestureAvailable\n        {\n            get { return base.IsGestureAvailable; }\n        }\n\n        public ConcreteTouchPanel()\n            : base()\n        {\n            // Initialize Capabilities\n            int maximumTouchCount = 0;\n            bool isConnected = false;\n            bool hasPressure = false;\n            // iPhone supports 5, iPad 11\n            isConnected = true;\n            switch (UIDevice.CurrentDevice.UserInterfaceIdiom)\n            {\n                case UIUserInterfaceIdiom.Phone:\n                    maximumTouchCount = 5;\n                    break;\n\n                default:\n                    maximumTouchCount = 11;\n                    break;\n            }\n\n            _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure);\n        }\n\n        public override TouchPanelCapabilities GetCapabilities()\n        {\n            return _capabilities;\n        }\n\n        public override TouchCollection GetState()\n        {\n            return base.GetState();\n        }\n\n        public override GestureSample ReadGesture()\n        {\n            return base.ReadGesture();\n        }\n\n        public override void AddPressedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = iOSGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddPressedEvent(nativeTouchId, position, winSize);\n            }\n        }\n  \n        public override void AddMovedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = iOSGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                base.AddMovedEvent(nativeTouchId, position, winSize);\n            }\n        }\n   \n        public override void AddReleasedEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = iOSGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                 base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n        public override void AddCanceledEvent(int nativeTouchId, Vector2 position)\n        {\n            IntPtr wndHandle = this.WindowHandle;\n            if (wndHandle != IntPtr.Zero)\n            {\n                GameWindow gameWindow = iOSGameWindow.FromHandle(wndHandle);\n                Rectangle windowsBounds = gameWindow.ClientBounds;\n                Point winSize = new Point(windowsBounds.Width, windowsBounds.Height);\n\n                 base.AddReleasedEvent(nativeTouchId, position, winSize);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Kni.Platform.Android.GL.Xamarin.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{BA9476CF-99BA-4D03-92F2-73D2C5E58883}</ProjectGuid>\n    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <TargetFrameworkVersion>v4.4</TargetFrameworkVersion>\n    <TargetFrameworkProfile />\n    <LangVersion>Default</LangVersion>\n    <FileAlignment>512</FileAlignment>\n    <AndroidSupportedAbis>armeabi-v7a,x86</AndroidSupportedAbis>\n    <AndroidStoreUncompressedFileExtensions />\n    <MandroidI18n />\n    <DeployExternal>False</DeployExternal>\n    <AndroidResgenFile>Resources\\Resource.designer.cs</AndroidResgenFile>\n    <AndroidResgenClass>Resource</AndroidResgenClass>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <Optimize>false</Optimize>\n    <DebugType>full</DebugType>\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n    <OutputPath>bin\\Android\\AnyCPU\\Debug</OutputPath>\n    <IntermediateOutputPath>obj\\Android\\AnyCPU\\Debug</IntermediateOutputPath>\n    <DocumentationFile>bin\\Android\\AnyCPU\\Debug\\Kni.Platform.xml</DocumentationFile>\n    <DefineConstants>DEBUG;OPENGL;OPENAL;TRACE;ANDROID;XAMARIN;GLES;STBSHARP_INTERNAL</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n    <MonoDroidLinkMode>None</MonoDroidLinkMode>\n    <AndroidLinkMode>None</AndroidLinkMode>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <Optimize>true</Optimize>\n    <DebugType>none</DebugType>\n    <OutputPath>bin\\Android\\AnyCPU\\Release</OutputPath>\n    <IntermediateOutputPath>obj\\Android\\AnyCPU\\Release</IntermediateOutputPath>\n    <DocumentationFile>bin\\Android\\AnyCPU\\Release\\Kni.Platform.xml</DocumentationFile>\n    <DefineConstants>OPENGL;OPENAL;TRACE;ANDROID;XAMARIN;GLES;STBSHARP_INTERNAL</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n    <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>\n    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"Mono.Android\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Android\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\Android\\ConcreteAudioServiceDroid.cs\" />\n    <Compile Include=\"Audio\\Android\\ConcreteMicrophoneDroid.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\AudioLoader.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\OpenAL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\.Android\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.Android\\ConcreteTitleContainerFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ShaderProgram.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteSamplerState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\VertexDeclarationAttributeInfo.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetSwapChain.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLExtensions.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLVersion.cs\" />\n    <Compile Include=\"Graphics\\.GL\\IRenderTargetStrategyGL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.cs\" />\n    <Compile Include=\"Graphics\\RenderTargetSwapChain.OpenGL.cs\" />\n\n    <Compile Include=\"Graphics\\.GL.Android\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsContext.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsDevice.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\OpenGL.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\SurfaceConfig.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.Common.cs\" />\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n\n    <Compile Include=\"Input\\.Android\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteVideo.cs\" />\n\n    <Compile Include=\"Game\\.Android\\AndroidCompatibility.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidGameActivity.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidGameWindow.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidSurfaceView.cs\" />\n\n    <Compile Include=\"Devices\\.Android\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.Android\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteSensorService.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\SensorListener.cs\" />\n\n    <Compile Include=\"Game\\.Android\\TouchEventListener.cs\" />\n    <Compile Include=\"Game\\.Android\\ISurfaceView.cs\" />\n    <Compile Include=\"Game\\.Android\\OrientationListener.cs\" />\n    <Compile Include=\"Game\\.Android\\RunnableObject.cs\" />\n    <Compile Include=\"Game\\.Android\\ScreenReceiver.cs\" />\n\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageService.cs\" />\n\n    <Compile Include=\"XR\\.Android\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.Android\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\.Android\\FuncLoader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\InteropHelpers.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\AnimatedFrameResult.cs\">\n      <Link>Utilities\\StbImageSharp\\AnimatedFrameResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ColorComponents.cs\">\n      <Link>Utilities\\StbImageSharp\\ColorComponents.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\CRuntime.cs\">\n      <Link>Utilities\\StbImageSharp\\CRuntime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageInfo.cs\">\n      <Link>Utilities\\StbImageSharp\\ImageResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageResult.cs\">\n      <Link>Utilities\\StbImageSharp\\ImageResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageResultFloat.cs\">\n      <Link>Utilities\\StbImageSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\MemoryStats.cs\">\n      <Link>Utilities\\StbImageSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Bmp.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Bmp.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Common.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Common.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Gif.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Gif.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Hdr.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Gif.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Jpg.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Jpg.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Png.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Png.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Psd.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Psd.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Tga.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Tga.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Zlib.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Zlib.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\ColorComponents.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\ColorComponents.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\CRuntime.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\CRuntime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\ImageWriter.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\ImageWriter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\MemoryStats.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\StbImageWrite.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\StbImageWrite.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\StbImageWrite.Generated.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\StbImageWrite.Generated.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.Android.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-arm\\native\\libopenal.so\">\n      <Link>libs\\armeabi-v7a\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-arm64\\native\\libopenal.so\">\n      <Link>libs\\arm64-v8a\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-x86\\native\\libopenal.so\">\n      <Link>libs\\x86\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-x64\\native\\libopenal.so\">\n      <Link>libs\\x86_64\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.gles.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.gles.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.gles.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.gles.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.gles.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.gles.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Novell\\Novell.MonoDroid.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.Android.GL.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\Android</BaseOutputPath>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0-android</TargetFramework>\n    <LangVersion>Default</LangVersion>\n    <IsTrimmable>True</IsTrimmable>\n    <ProjectGuid>{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}</ProjectGuid>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants>ANDROID;OPENAL;OPENGL;GLES;STBSHARP_INTERNAL</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI backend for Android platform (GLES).</Description>\n    <PackageTags>KNI;monogame;.net core;core;.net standard;standard;android</PackageTags>\n    <PackageId>nkast.Kni.Platform.Android.GL</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Android\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\Android\\ConcreteAudioServiceDroid.cs\" />\n    <Compile Include=\"Audio\\Android\\ConcreteMicrophoneDroid.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\AudioLoader.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\OpenAL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL.Android\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsContext.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsDevice.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\OpenGL.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\SurfaceConfig.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.Common.cs\" />\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Game\\.Android\\AndroidCompatibility.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidGameActivity.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidGameWindow.cs\" />\n\n    <Compile Include=\"Devices\\.Android\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.Android\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteSensorService.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\SensorListener.cs\" />\n\n    <Compile Include=\"Game\\.Android\\TouchEventListener.cs\" />\n    <Compile Include=\"Game\\.Android\\ISurfaceView.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidSurfaceView.cs\" />\n    <Compile Include=\"Game\\.Android\\OrientationListener.cs\" />\n    <Compile Include=\"Game\\.Android\\RunnableObject.cs\" />\n    <Compile Include=\"Game\\.Android\\ScreenReceiver.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ShaderProgram.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteSamplerState.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\VertexDeclarationAttributeInfo.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetSwapChain.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLExtensions.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLVersion.cs\" />\n    <Compile Include=\"Graphics\\.GL\\IRenderTargetStrategyGL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.cs\" />\n\n    <Compile Include=\"Graphics\\RenderTargetSwapChain.OpenGL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\.Android\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteVideo.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteVideoPlayer.cs\" />\n\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageService.cs\" />\n\n    <Compile Include=\"XR\\.Android\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.Android\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\.Android\\FuncLoader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\InteropHelpers.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\.Android\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.Android\\ConcreteTitleContainerFactory.cs\" />\n\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageSharp\" />\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageWriteSharp\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"build\\.Android\\nkast.Kni.Platform.Android.GL.targets\" PackagePath=\"build\\\" Pack=\"true\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-arm\\native\\libopenal.so\">\n      <Link>libs\\armeabi-v7a\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-arm64\\native\\libopenal.so\">\n      <Link>libs\\arm64-v8a\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-x86\\native\\libopenal.so\">\n      <Link>libs\\x86\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-x64\\native\\libopenal.so\">\n      <Link>libs\\x86_64\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.gles.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.gles.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.gles.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.gles.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.gles.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.gles.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.Blazor.GL.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\Blazor\\</BaseOutputPath>\n\n    <DefineConstants>BLAZORGL;STBSHARP_INTERNAL</DefineConstants>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net8.0</TargetFrameworks>\n    <LangVersion>Default</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants>$(DefineConstants);BLAZORGL;STBSHARP_INTERNAL</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI backend for WebAssembly platform (WebGL).</Description>\n    <PackageTags>KNI;monogame;.net core;core;.net standard;standard;Blazor;webassembly</PackageTags>\n    <PackageId>nkast.Kni.Platform.Blazor.GL</PackageId>\n    <Product>Xna.Framework</Product>\n    <Company>MonoGame Team, Kastellanos Nikos</Company>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Blazor\\AudioLoader.cs\" />\n    <Compile Include=\"Audio\\Blazor\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\Blazor\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\Blazor\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\Blazor\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\Blazor\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\Blazor\\ConcreteSoundEffectInstance.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Devices\\.Blazor\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.Blazor\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.Blazor\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.Blazor\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.Blazor\\Sensors\\ConcreteSensorService.cs\" />\n\n    <Compile Include=\"Game\\.Blazor\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.Blazor\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.Blazor\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.Blazor\\BlazorGameWindow.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.BlazorGL\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Shader\\ShaderProgram.cs\" />\n\n    <Compile Include=\"Graphics\\.BlazorGL\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\States\\ConcreteSamplerState.cs\" />\n\n    <Compile Include=\"Graphics\\.BlazorGL\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\Vertices\\VertexDeclarationAttributeInfo.cs\" />\n\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\GLExtensions.cs\" />\n    <Compile Include=\"Graphics\\.BlazorGL\\IRenderTargetStrategyGL.cs\" />\n\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>        \n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageSharp\" />\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageWriteSharp\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\.Blazor\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.Blazor\\XR\\ConcreteTouchController.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.Blazor\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Media\\Blazor\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\Blazor\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\Blazor\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\Blazor\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\Blazor\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\Blazor\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Media\\Blazor\\ConcreteVideo.cs\" />\n    <Compile Include=\"Content\\.Blazor\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.Blazor\\ConcreteTitleContainerFactory.cs\" />\n\n    <Compile Include=\"Storage\\.Blazor\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.Blazor\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.Blazor\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.Blazor\\ConcreteStorageService.cs\" />\n\n    <Compile Include=\"XR\\.BlazorGL\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.BlazorGL\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.Blazor.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.gles.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.gles.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.gles.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.gles.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.gles.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.gles.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Wasm.JSInterop\" Version=\"8.0.11\"  />\n    <PackageReference Include=\"nkast.Wasm.Audio\" Version=\"8.0.11\"  />\n    <PackageReference Include=\"nkast.Wasm.Canvas\" Version=\"8.0.11\"  />\n    <PackageReference Include=\"nkast.Wasm.Dom\" Version=\"8.0.11\"  />\n    <PackageReference Include=\"nkast.Wasm.XHR\" Version=\"8.0.11\"  />\n    <PackageReference Include=\"nkast.Wasm.XR\" Version=\"8.0.11\"  />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.Cardboard.GL.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\Cardboard</BaseOutputPath>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n\t  <!-- By setting TargetPlatformVersionSupported\n\t       we disable _CheckForInvalidTargetPlatformVersion check.\n\t       This let us target android SDK 32 under .net9.\n\t  -->\n    <TargetPlatformVersionSupported>true</TargetPlatformVersionSupported>\n  </PropertyGroup>\n\t\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0-android30</TargetFramework>\n    <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>\n    <LangVersion>Default</LangVersion>\n    <IsTrimmable>True</IsTrimmable>\n    <ProjectGuid>{BF257928-8B5D-4371-BD03-C18DA71918C3}</ProjectGuid>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants>ANDROID;CARDBOARD;OPENAL;OPENGL;GLES;STBSHARP_INTERNAL</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI backend for Cardboard Android.\n    \n    This is an experiment port of Google Cardboard on KNI/XNA framework.\n    \n    Example:\n    GraphicsDevice.Clear(Color.CornflowerBlue);\n    var vrstate = Microsoft.Xna.Framework.Input.Cardboard.Headset.GetState();\n    \n    var leftEye = vrstate.LeftEye;\n    GraphicsDevice.Viewport = leftEye.Viewport;\n    // draw with leftEye.View, leftEye.Projection.\n    \n    var rightEye = vrstate.RightEye;\n    GraphicsDevice.Viewport = rightEye.Viewport;    \n    // draw with rightEye.View, rightEye.Projection.\n    \n    </Description>\n    <PackageTags>KNI;android</PackageTags>\n    <PackageId>nkast.Kni.Platform.Cardboard.GL</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Android\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\Android\\ConcreteAudioServiceDroid.cs\" />\n    <Compile Include=\"Audio\\Android\\ConcreteMicrophoneDroid.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\AudioLoader.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\OpenAL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL.Android\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsContext.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsDevice.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\OpenGL.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\SurfaceConfig.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.Common.cs\" />\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\.Android\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteVideo.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Content\\.Android\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.Android\\ConcreteTitleContainerFactory.cs\" />\n\n    <Compile Include=\"Devices\\.Android\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.Android\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteSensorService.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\SensorListener.cs\" />\n\n    <Compile Include=\"Game\\.Android\\TouchEventListener.cs\" />\n    <Compile Include=\"Game\\.CardboardLegacy\\AndroidCompatibility.cs\" />\n    <Compile Include=\"Game\\.CardboardLegacy\\AndroidGameActivity.cs\" />\n    <Compile Include=\"Game\\.CardboardLegacy\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.CardboardLegacy\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.CardboardLegacy\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.CardboardLegacy\\AndroidGameWindow.cs\" />\n    <Compile Include=\"Game\\.CardboardLegacy\\AndroidSurfaceView.cs\" />\n    <Compile Include=\"Game\\.Android\\ISurfaceView.cs\" />\n    <Compile Include=\"Game\\.Android\\OrientationListener.cs\" />\n    <Compile Include=\"Game\\.Android\\ScreenReceiver.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ShaderProgram.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteSamplerState.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\VertexDeclarationAttributeInfo.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetSwapChain.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLExtensions.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLVersion.cs\" />\n    <Compile Include=\"Graphics\\.GL\\IRenderTargetStrategyGL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.cs\" />\n\n    <Compile Include=\"Graphics\\RenderTargetSwapChain.OpenGL.cs\" />\n\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageService.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n\t<ProjectReference Include=\"XR\\.CardboardLegacy\\GoogleCardboard\\GoogleCardboard.csproj\">\n\t</ProjectReference>\n    <Compile Include=\"XR\\.CardboardLegacy\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.CardboardLegacy\\CardboardHeadsetState.cs\" />\n    <Compile Include=\"XR\\.CardboardLegacy\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\.Android\\FuncLoader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\InteropHelpers.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageSharp\" />\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageWriteSharp\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"build\\.Android\\nkast.Kni.Platform.Android.GL.targets\" PackagePath=\"build\\\" Pack=\"true\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-arm\\native\\libopenal.so\">\n      <Link>libs\\armeabi-v7a\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-arm64\\native\\libopenal.so\">\n      <Link>libs\\arm64-v8a\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-x86\\native\\libopenal.so\">\n      <Link>libs\\x86\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-x64\\native\\libopenal.so\">\n      <Link>libs\\x86_64\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.gles.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.gles.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.gles.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.gles.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.gles.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.gles.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.Oculus.GL.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\Oculus</BaseOutputPath>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n      <!-- By setting TargetPlatformVersionSupported\n           we disable _CheckForInvalidTargetPlatformVersion check.\n           This let us target android SDK 32 under .net9.\n      -->\n    <TargetPlatformVersionSupported>true</TargetPlatformVersionSupported>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0-android32.0</TargetFramework>\n    <LangVersion>Default</LangVersion>\n    <IsTrimmable>True</IsTrimmable>\n    <ProjectGuid>{3472997A-CD26-4D0D-B64A-795F913E6777}</ProjectGuid>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants>ANDROID;OCULUS;OPENAL;OPENGL;GLES;STBSHARP_INTERNAL</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI backend for Oculus platform (GLES).</Description>\n    <PackageTags>KNI;monogame;.net core;core;.net standard;standard;android</PackageTags>\n    <PackageId>nkast.Kni.Platform.Oculus.GL</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Android\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\Android\\ConcreteAudioServiceDroid.cs\" />\n    <Compile Include=\"Audio\\Android\\ConcreteMicrophoneDroid.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\AudioLoader.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\OpenAL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL.Android\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsContext.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\ConcreteGraphicsDevice.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\OpenGL.Android.cs\" />\n    <Compile Include=\"Graphics\\.GL.Android\\SurfaceConfig.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.Common.cs\" />\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Game\\.Oculus\\AndroidCompatibility.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidGameActivity.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.Android\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidGameWindow.cs\" />\n\n    <Compile Include=\"Devices\\.Android\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.Android\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\ConcreteSensorService.cs\" />\n    <Compile Include=\"Devices\\.Android\\Sensors\\SensorListener.cs\" />\n\n    <Compile Include=\"Game\\.Android\\TouchEventListener.cs\" />\n    <Compile Include=\"Game\\.Android\\ISurfaceView.cs\" />\n    <Compile Include=\"Game\\.Android\\AndroidSurfaceView.cs\" />\n    <Compile Include=\"Game\\.Android\\OrientationListener.cs\" />\n    <Compile Include=\"Game\\.Android\\RunnableObject.cs\" />\n    <Compile Include=\"Game\\.Android\\ScreenReceiver.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ShaderProgram.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteSamplerState.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\VertexDeclarationAttributeInfo.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetSwapChain.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLExtensions.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLVersion.cs\" />\n    <Compile Include=\"Graphics\\.GL\\IRenderTargetStrategyGL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.cs\" />\n\n    <Compile Include=\"Graphics\\RenderTargetSwapChain.OpenGL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\.Android\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.Android\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteVideo.cs\" />\n    <Compile Include=\"Media\\Android\\ConcreteVideoPlayer.cs\" />\n\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.Android\\ConcreteStorageService.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\.OpenXR\\XR\\ConcreteTouchControllerStrategy.cs\" />\n    <Compile Include=\"XR\\.Oculus\\ConcreteOxrSwapChainData.cs\" />\n    <Compile Include=\"XR\\.Oculus\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.Oculus\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.LibOXR\" Version=\"1.0.0\" />\n    <PackageReference Include=\"Silk.NET.OpenXR\" Version=\"2.22.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedNativeLibrary Include=\"XR\\.Oculus\\lib\\arm64-v8a\\libopenxr_loader.so\" abi=\"arm64-v8a\">\n      <Link>libs\\arm64-v8a\\libopenxr_loader.so</Link>\n    </EmbeddedNativeLibrary>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\.Android\\FuncLoader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\InteropHelpers.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\.Android\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.Android\\ConcreteTitleContainerFactory.cs\" />\n\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageSharp\" />\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageWriteSharp\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"build\\.Android\\nkast.Kni.Platform.Android.GL.targets\" PackagePath=\"build\\\" Pack=\"true\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-arm\\native\\libopenal.so\">\n      <Link>libs\\armeabi-v7a\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-arm64\\native\\libopenal.so\">\n      <Link>libs\\arm64-v8a\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-x86\\native\\libopenal.so\">\n      <Link>libs\\x86\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n    <EmbeddedNativeLibrary Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.24.3\\runtimes\\android-x64\\native\\libopenal.so\">\n      <Link>libs\\x86_64\\libopenal.so</Link>\n    </EmbeddedNativeLibrary>\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.gles.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.gles.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.gles.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.gles.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.gles.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.gles.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.Ref.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\Ref</BaseOutputPath>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants>REF</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>Reference KNI backend for libraries.</Description>\n    <PackageTags>KNI;monogame;.net core;core;.net standard;standard;Reference;</PackageTags>\n    <PackageId>nkast.Kni.Platform.Ref</PackageId>\n    <Product>Xna.Framework</Product>\n    <Company>MonoGame Team, Kastellanos Nikos</Company>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Remove=\"P:\\MonoGame\\Images\\Icon.png\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Ref\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\Ref\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\Ref\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\Ref\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\Ref\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\Ref\\ConcreteSoundEffectInstance.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"Devices\\.Ref\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.Ref\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.Ref\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.Ref\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.Ref\\Sensors\\ConcreteSensorService.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Game\\.Ref\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.Ref\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.Ref\\ConcreteGraphicsDeviceManager.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.Ref\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\Shader\\ConcretePixelShader.cs\" />\n\n    <Compile Include=\"Graphics\\.Ref\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\States\\ConcreteSamplerState.cs\" />\n\n    <Compile Include=\"Graphics\\.Ref\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.Ref\\ConcreteTextureCollection.cs\" />\n\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\.Ref\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.Ref\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Media\\Ref\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\Ref\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\Ref\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\Ref\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\Ref\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\Ref\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Media\\Ref\\ConcreteVideo.cs\" />\n    <Compile Include=\"Content\\.Ref\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.Ref\\ConcreteTitleContainerFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"Storage\\.Ref\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.Ref\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.Ref\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.Ref\\ConcreteStorageService.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"XR\\.Ref\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.Ref\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.Ref.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.SDL2.GL.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <ProjectGuid>{6D75E618-19CA-4C51-9546-F10965FBC0B8}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\DesktopGL\\</BaseOutputPath>\n    <IntermediateOutputPath>obj\\SdlGL\\$(Platform)\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>$(DefineConstants);OPENGL;OPENAL;DESKTOPGL;SUPPORTS_EFX;STBSHARP_INTERNAL</DefineConstants>\n    <Description>KNI backend for SDL Desktop Platforms (OpenGL)</Description>\n    <PackageTags>KNI;</PackageTags>\n    <PackageId>nkast.Kni.Platform.SDL2.GL</PackageId>\n    <Product>Xna.Framework</Product>\n    <Company>Kastellanos Nikos</Company>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4b8d3f73-bbd2-4057-b86b-8b73b957dc0f}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\AudioLoader.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\OpenAL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\.SDL2\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.SDL2\\ConcreteTitleContainerFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ShaderProgram.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteSamplerState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\VertexDeclarationAttributeInfo.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetSwapChain.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLExtensions.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLVersion.cs\" />\n    <Compile Include=\"Graphics\\.GL\\IRenderTargetStrategyGL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.cs\" />\n    <Compile Include=\"Graphics\\RenderTargetSwapChain.OpenGL.cs\" />\n\n    <Compile Include=\"Graphics\\.GL.SDL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\ConcreteGraphicsContext.SDL.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\ConcreteGraphicsDevice.SDL.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\OpenGL.SDL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.Common.cs\" />\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n\n    <Compile Include=\"Input\\.SDL2\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Input\\.SDL2\\KeyboardUtil.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteVideo.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"Devices\\.SDL2\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.SDL2\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.SDL2\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.SDL2\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.SDL2\\Sensors\\ConcreteSensorService.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Game\\.SDL2\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.SDL2\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.SDL2\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.SDL2\\SDLGameWindow.cs\" />\n    <Compile Include=\"Game\\.SDL2\\SDL2.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"Storage\\.SDL2\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.SDL2\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.SDL2\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.SDL2\\ConcreteStorageService.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"XR\\.SDL2\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.SDL2\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\.SDL2\\FuncLoader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\AssemblyHelper.cs\" />\n    <Compile Include=\"Utilities\\CurrentPlatform.cs\" />\n    <Compile Include=\"Utilities\\InteropHelpers.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\AnimatedFrameResult.cs\">\n      <Link>Utilities\\StbImageSharp\\AnimatedFrameResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ColorComponents.cs\">\n      <Link>Utilities\\StbImageSharp\\ColorComponents.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\CRuntime.cs\">\n      <Link>Utilities\\StbImageSharp\\CRuntime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageInfo.cs\">\n      <Link>Utilities\\StbImageSharp\\ImageResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageResult.cs\">\n      <Link>Utilities\\StbImageSharp\\ImageResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageResultFloat.cs\">\n      <Link>Utilities\\StbImageSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\MemoryStats.cs\">\n      <Link>Utilities\\StbImageSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Bmp.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Bmp.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Common.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Common.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Gif.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Gif.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Hdr.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Gif.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Jpg.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Jpg.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Png.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Png.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Psd.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Psd.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Tga.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Tga.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Zlib.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Zlib.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\ColorComponents.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\ColorComponents.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\CRuntime.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\CRuntime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\ImageWriter.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\ImageWriter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\MemoryStats.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\StbImageWrite.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\StbImageWrite.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\StbImageWrite.Generated.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\StbImageWrite.Generated.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\BufferedReadStream.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\BufferedReadStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\DataPacket.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\DataPacket.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\Huffman.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\Huffman.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\IContainerReader.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\IContainerReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\IPacketProvider.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\IPacketProvider.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\IVorbisStreamStatus.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\IVorbisStreamStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\Mdct.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\Mdct.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\NewStreamEventArgs.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\NewStreamEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\ParameterChangeEventArgs.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\ParameterChangeEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\RingBuffer.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\RingBuffer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\StreamReadBuffer.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\StreamReadBuffer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\Utils.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\Utils.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\VorbisCodebook.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\VorbisCodebook.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\VorbisFloor.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\VorbisFloor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\VorbisMapping.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\VorbisMapping.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\VorbisMode.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\VorbisMode.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\VorbisReader.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\VorbisReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\VorbisResidue.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\VorbisResidue.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\VorbisStreamDecoder.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\VorbisStreamDecoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\VorbisTime.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\VorbisTime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\Ogg\\OggContainerReader.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\Ogg\\OggContainerReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\Ogg\\OggCrc.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\Ogg\\OggCrc.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\Ogg\\OggPacket.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\Ogg\\OggPacket.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\Ogg\\OggPacketReader.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\Ogg\\OggPacketReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\Ogg\\OggPageFlags.cs\">\n      <Link>Platform\\Utilities\\NVorbis\\Ogg\\OggPageFlags.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.DesktopGL.cs\" />  \n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <None Include=\"Kni.Platform.SDL2.GL.dll.config\">\n      <Link>Kni.Platform.dll.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\ThirdParty\\Dependencies\\SDL\\Windows\\x86\\SDL2.dll\" Pack=\"true\">\n      <Link>x86\\SDL2.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\win-x86\\native\\SDL2.dll</PackagePath>\n    </None>\n    <None Include=\"..\\ThirdParty\\Dependencies\\SDL\\Windows\\x64\\SDL2.dll\" Pack=\"true\">\n      <Link>x64\\SDL2.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\win-x64\\native\\SDL2.dll</PackagePath>\n    </None>\n    <None Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\win-x86\\native\\soft_oal.dll\" Pack=\"true\">\n      <Link>x86\\soft_oal.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\win-x86\\native\\soft_oal.dll</PackagePath>\n    </None>\n    <None Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\win-x64\\native\\soft_oal.dll\" Pack=\"true\">\n      <Link>x64\\soft_oal.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\win-x64\\native\\soft_oal.dll</PackagePath>\n    </None>\n<!--\n    <None Include=\"..\\ThirdParty\\Dependencies\\\\SDL\\Linux\\x86\\libSDL2-2.0.so.0\" Pack=\"true\">\n      <Link>x86\\libSDL2-2.0.so.0</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\linux-x86\\native\\libSDL2-2.0.so.0</PackagePath>\n    </None>\n-->\t  \n    <None Include=\"..\\ThirdParty\\Dependencies\\SDL\\Linux\\x64\\libSDL2-2.0.so.0\" Pack=\"true\">\n      <Link>x64\\libSDL2-2.0.so.0</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\linux-x64\\native\\libSDL2-2.0.so.0</PackagePath>\n    </None>\n    <None Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\linux-x86\\native\\libopenal.so.1\" Pack=\"true\">\n      <Link>x86\\libopenal.so.1</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\linux-x86\\native\\libopenal.so.1</PackagePath>\n    </None>\n    <None Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\linux-x64\\native\\libopenal.so.1\" Pack=\"true\">\n      <Link>x64\\libopenal.so.1</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\linux-x64\\native\\libopenal.so.1</PackagePath>\n    </None>\n    <None Include=\"..\\ThirdParty\\Dependencies\\SDL\\MacOS\\Universal\\libSDL2.dylib\" Pack=\"true\">\n      <Link>libSDL2.dylib</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\osx\\native\\libSDL2.dylib</PackagePath>\n    </None>\n    <None Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\osx\\native\\libopenal.1.dylib\" Pack=\"true\">\n      <Link>libopenal.1.dylib</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Always</CopyToPublishDirectory>\n      <PackagePath>runtimes\\osx\\native\\libopenal.1.dylib</PackagePath>\n    </None>\n    <None Include=\"build\\.SDL2\\nkast.Kni.Platform.SDL2.GL.targets\" PackagePath=\"build\\\" Pack=\"true\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Kni.bmp\">\n      <LogicalName>Kni.bmp</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"..\\ThirdParty\\SDL_GameControllerDB\\gamecontrollerdb.txt\">\n      <LogicalName>gamecontrollerdb.txt</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.ogl.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.ogl.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.ogl.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.ogl.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.ogl.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.ogl.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.SDL2.GL.dll.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n\t<dllmap dll=\"SDL2.dll\" os=\"osx\" target=\"libSDL2-2.0.0.dylib\"/>\n\t<dllmap dll=\"soft_oal.dll\" os=\"osx\" target=\"libopenal.1.dylib\" />\n\t<dllmap dll=\"SDL2.dll\" os=\"linux\" cpu=\"x86\" target=\"./x86/libSDL2-2.0.so.0\"/>\n\t<dllmap dll=\"soft_oal.dll\" os=\"linux\" cpu=\"x86\" target=\"./x86/libopenal.so.1\" />\n\t<dllmap dll=\"SDL2.dll\" os=\"linux\" cpu=\"x86-64\" target=\"./x64/libSDL2-2.0.so.0\"/>\n\t<dllmap dll=\"soft_oal.dll\" os=\"linux\" cpu=\"x86-64\" target=\"./x64/libopenal.so.1\" />\n</configuration>\n"
  },
  {
    "path": "Platforms/Kni.Platform.UAP.DX11.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <FileAlignment>512</FileAlignment>\n    <ProjectGuid>{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}</ProjectGuid>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion>10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <RuntimeIdentifiers>win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot</RuntimeIdentifiers>\n    <LangVersion>Default</LangVersion>\n    <DefaultLanguage>en-US</DefaultLanguage>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <Optimize>false</Optimize>\n    <DebugType>full</DebugType>\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n    <OutputPath>bin\\WindowsUniversal\\AnyCPU\\Debug</OutputPath>\n    <IntermediateOutputPath>obj\\WindowsUniversal\\AnyCPU\\Debug</IntermediateOutputPath>\n    <DocumentationFile>bin\\WindowsUniversal\\AnyCPU\\Debug\\Kni.Platform.xml</DocumentationFile>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP;DIRECTX;DIRECTX11_1;WINDOWS_MEDIA_ENGINE;STBSHARP_INTERNAL</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <Optimize>true</Optimize>\n    <DebugType>none</DebugType>\n    <OutputPath>bin\\WindowsUniversal\\AnyCPU\\Release</OutputPath>\n    <IntermediateOutputPath>obj\\WindowsUniversal\\AnyCPU\\Release</IntermediateOutputPath>\n    <DocumentationFile>bin\\WindowsUniversal\\AnyCPU\\Release\\Kni.Platform.xml</DocumentationFile>\n    <DefineConstants>TRACE;NETFX_CORE;UAP;DIRECTX;DIRECTX11_1;WINDOWS_MEDIA_ENGINE;STBSHARP_INTERNAL</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"SharpDX\">\n      <HintPath>..\\ThirdParty\\Dependencies\\SharpDX\\4.2.0\\uap10.0\\SharpDX.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SharpDX.Direct2D1\">\n      <HintPath>..\\ThirdParty\\Dependencies\\SharpDX\\4.2.0\\uap10.0\\SharpDX.Direct2D1.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SharpDX.Direct3D11\">\n      <HintPath>..\\ThirdParty\\Dependencies\\SharpDX\\4.2.0\\uap10.0\\SharpDX.Direct3D11.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SharpDX.DXGI\">\n      <HintPath>..\\ThirdParty\\Dependencies\\SharpDX\\4.2.0\\uap10.0\\SharpDX.DXGI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SharpDX.MediaFoundation\">\n      <HintPath>..\\ThirdParty\\Dependencies\\SharpDX\\4.2.0\\uap10.0\\SharpDX.MediaFoundation.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SharpDX.XAudio2\">\n      <HintPath>..\\ThirdParty\\Dependencies\\SharpDX\\4.2.0\\uap10.0\\SharpDX.XAudio2.dll</HintPath>\n    </Reference>\n    <SDKReference Include=\"WindowsMobile, Version=10.0.22621.0\">\n      <Name>Windows Mobile Extensions for the UWP</Name>\n    </SDKReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Audio\\XAudio\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteSoundEffectInstance.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Content\\.UAP\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.UAP\\ConcreteTitleContainerFactory.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\States\\ConcreteSamplerState.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\InputLayoutCache.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\VertexInputLayoutKey.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\GraphicsSharpDXExtensions.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\IRenderTargetStrategyDX11.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\SharpDXExtensions.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\SpriteBatcher.cs\" />\n    <Compile Include=\"Input\\.UAP\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.UAP\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Media\\WME\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\WME\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\WME\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\WME\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\WME\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\WME\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Media\\WME\\ConcreteVideo.cs\" />\n    <Compile Include=\"Media\\WME\\MusicProperties.cs\" />\n\n    <Compile Include=\"Devices\\.UAP\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.UAP\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.UAP\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.UAP\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.UAP\\Sensors\\ConcreteSensorService.cs\" />\n    <Compile Include=\"Game\\.UAP\\GameFrameworkViewSource.cs\" />\n    <Compile Include=\"Game\\.UAP\\UAPFrameworkView.cs\" />\n    <Compile Include=\"Game\\.UAP\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.UAP\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.UAP\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.UAP\\UAPGameWindow.cs\" />\n    <Compile Include=\"Game\\.UAP\\XamlGame.cs\" />\n    <Compile Include=\"Game\\.UAP\\InputEvents.cs\" />\n    <Compile Include=\"Storage\\.UAP\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.UAP\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.UAP\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.UAP\\ConcreteStorageService.cs\" />\n\n    <Compile Include=\"XR\\.UAP\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.UAP\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\AnimatedFrameResult.cs\">\n      <Link>Utilities\\StbImageSharp\\AnimatedFrameResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ColorComponents.cs\">\n      <Link>Utilities\\StbImageSharp\\ColorComponents.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\CRuntime.cs\">\n      <Link>Utilities\\StbImageSharp\\CRuntime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageInfo.cs\">\n      <Link>Utilities\\StbImageSharp\\ImageResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageResult.cs\">\n      <Link>Utilities\\StbImageSharp\\ImageResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageResultFloat.cs\">\n      <Link>Utilities\\StbImageSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\MemoryStats.cs\">\n      <Link>Utilities\\StbImageSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Bmp.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Bmp.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Common.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Common.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Gif.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Gif.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Hdr.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Gif.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Jpg.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Jpg.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Png.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Png.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Psd.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Psd.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Tga.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Tga.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Zlib.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Zlib.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\ColorComponents.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\ColorComponents.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\CRuntime.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\CRuntime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\ImageWriter.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\ImageWriter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\MemoryStats.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\StbImageWrite.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\StbImageWrite.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\StbImageWrite.Generated.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\StbImageWrite.Generated.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.UWP.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.dx11.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.dx11.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.dx11.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.dx11.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.dx11.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.dx11.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.WinForms.DX11.OculusOVR.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\OculusOvrDX11</BaseOutputPath>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net48;net8.0-windows</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <AssemblyName>Kni.Platform.WindowsDX11.OculusOVR</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants>OVR;DIRECTX11;</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>Ovr Oculus library for the KNI Framework (DirectX 11).</Description>\n    <PackageTags>KNI;XNA;MonoGame</PackageTags>\n    <PackageId>nkast.Kni.Platform.WinForms.DX11.OculusOVR</PackageId>\n    <PackageOutputPath>..\\NuGetPackages\\Output</PackageOutputPath>\n  </PropertyGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Input\\.LibOVR\\XR\\ConcreteTouchControllerStrategy.cs\" />\n    <Compile Include=\"XR\\.LibOVR\\ConcreteOvrSwapChainData.cs\" />\n    <Compile Include=\"XR\\.LibOVR\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.LibOVR\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <ProjectReference Include=\"..\\src\\XNA.Framework\\XNA.Framework.csproj\">\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"Kni.Platform.WinForms.DX11.csproj\">\n      <Private>False</Private>\n    </ProjectReference>\n    <PackageReference Include=\"nkast.LibOVR\" Version=\"2.2.0\" />\n    <PackageReference Include=\"SharpDX\" Version=\"4.2.0\" />\n    <PackageReference Include=\"SharpDX.DXGI\" Version=\"4.2.0\" />\n    <PackageReference Include=\"SharpDX.Direct3D11\" Version=\"4.2.0\" />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.WinForms.DX11.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>\n    <TargetFrameworks>net40;net48;net8.0-windows</TargetFrameworks>\n    <UseWindowsForms>true</UseWindowsForms>\n    <LangVersion>7.3</LangVersion>\n    <ProjectGuid>{7DE47032-A904-4C29-BD22-2D235E8D91BA}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\WindowsDX\\</BaseOutputPath>\n    <IntermediateOutputPath>obj\\Windows\\$(Platform)\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>$(DefineConstants);WINDOWSDX;DIRECTX;WINDOWS_MEDIA_SESSION;STBSHARP_INTERNAL</DefineConstants>\n    <Description>KNI backend for Windows Desktop platform (DirectX11).</Description>\n    <PackageTags>KNI;</PackageTags>\n    <PackageId>nkast.Kni.Platform.WinForms.DX11</PackageId>\n    <Product>Xna.Framework</Product>\n    <Company>Kastellanos Nikos</Company>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX\" />\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX.Direct2D1\" />\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX.Direct3D11\" />\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX.DXGI\" />\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX.MediaFoundation\" />\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX.XAudio2\" />\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX.XInput\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\XAudio\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\XAudio\\ConcreteSoundEffectInstance.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\.WindowsDX11\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.WindowsDX11\\ConcreteTitleContainerFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Shader\\ConcretePixelShader.cs\" />\n\n    <Compile Include=\"Graphics\\.DX11\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\States\\ConcreteSamplerState.cs\" />\n\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\InputLayoutCache.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\Vertices\\VertexInputLayoutKey.cs\" />\n\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteRenderTargetSwapChain.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\GraphicsSharpDXExtensions.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\IRenderTargetStrategyDX11.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\SharpDXExtensions.cs\" />\n    <Compile Include=\"Graphics\\.DX11\\SpriteBatcher.cs\" />\n\n    <Compile Include=\"Graphics\\SwapChainRenderTarget.DirectX.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\.WindowsDX\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.WindowsDX\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Media\\WMS\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\WMS\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\WMS\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\WMS\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\WMS\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\WMS\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Media\\WMS\\ConcreteVideo.cs\" />\n    <Compile Include=\"Media\\WMS\\VideoSampleGrabber.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"Devices\\.WindowsDX\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.WindowsDX\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.WindowsDX\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.WindowsDX\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.WindowsDX\\Sensors\\ConcreteSensorService.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Game\\.WindowsDX11\\WinFormsGameWindow.cs\" />\n    <Compile Include=\"Game\\.WindowsDX11\\WinFormsGameForm.cs\" />\n    <Compile Include=\"Game\\.WindowsDX11\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.WindowsDX11\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.WindowsDX11\\KeysHelper.cs\" />\n    <Compile Include=\"Game\\.WindowsDX11\\TimerHelper.cs\" />\n    <Compile Include=\"Game\\.WindowsDX11\\ConcreteGraphicsDeviceManager.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"Storage\\.WindowsDX\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.WindowsDX\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.WindowsDX\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.WindowsDX\\ConcreteStorageService.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' != 'net40' \">\n    <Compile Include=\"XR\\.WindowsDX\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.WindowsDX\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\AssemblyHelper.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\AnimatedFrameResult.cs\">\n      <Link>Utilities\\StbImageSharp\\AnimatedFrameResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ColorComponents.cs\">\n      <Link>Utilities\\StbImageSharp\\ColorComponents.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\CRuntime.cs\">\n      <Link>Utilities\\StbImageSharp\\CRuntime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageInfo.cs\">\n      <Link>Utilities\\StbImageSharp\\ImageResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageResult.cs\">\n      <Link>Utilities\\StbImageSharp\\ImageResult.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\ImageResultFloat.cs\">\n      <Link>Utilities\\StbImageSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\MemoryStats.cs\">\n      <Link>Utilities\\StbImageSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Bmp.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Bmp.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Common.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Common.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Gif.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Gif.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Hdr.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Gif.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Jpg.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Jpg.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Png.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Png.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Psd.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Psd.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Tga.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Tga.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\StbImage.Generated.Zlib.cs\">\n      <Link>Utilities\\StbImageSharp\\StbImage.Generated.Zlib.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\ColorComponents.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\ColorComponents.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\CRuntime.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\CRuntime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\ImageWriter.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\ImageWriter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\MemoryStats.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\MemoryStats.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\StbImageWrite.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\StbImageWrite.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\StbImageWrite.Generated.cs\">\n      <Link>Utilities\\StbImageWriteSharp\\StbImageWrite.Generated.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.Windows.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"build\\.WindowsDX\\nkast.Kni.Platform.WinForms.DX11.targets\" PackagePath=\"build\\\" Pack=\"true\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.dx11.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.dx11.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.dx11.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.dx11.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.dx11.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.dx11.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Kni.Platform.iOS.GL.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\iOS</BaseOutputPath>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0-ios</TargetFramework>\n    <SupportedOSPlatformVersion>11.2</SupportedOSPlatformVersion>\n    <LangVersion>Default</LangVersion>\n    <IsTrimmable>True</IsTrimmable>\n    <ProjectGuid>{D93291EF-3419-412E-BC56-376BD6A02224}</ProjectGuid>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants>IOS;OPENAL;OPENGL;GLES;STBSHARP_INTERNAL</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI backend for iOS platform (GLES).</Description>\n    <PackageTags>KNI;monogame;.net core;core;.net standard;standard;ios</PackageTags>\n    <PackageId>nkast.Kni.Platform.iOS.GL</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\AudioLoader.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\OpenAL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Devices\\.iOS\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.iOS\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.iOS\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.iOS\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.iOS\\Sensors\\ConcreteSensorService.cs\" />\n    <Compile Include=\"Game\\.iOS\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.iOS\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.iOS\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.iOS\\iOSGameView.cs\" />\n    <Compile Include=\"Game\\.iOS\\iOSGameViewController.cs\" />\n    <Compile Include=\"Game\\.iOS\\iOSGameView_Touch.cs\" />\n    <Compile Include=\"Game\\.iOS\\iOSGameWindow.cs\" />\n    <Compile Include=\"Game\\.iOS\\OrientationConverter.cs\" />\n\n    <Compile Include=\"Graphics\\.GL.iOS\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.iOS\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.iOS\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.GL.iOS\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.GL.iOS\\ConcreteGraphicsContext.iOS.cs\" />\n    <Compile Include=\"Graphics\\.GL.iOS\\ConcreteGraphicsDevice.iOS.cs\" />\n    <Compile Include=\"Graphics\\.GL.iOS\\OpenGL.iOS.cs\" />\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ShaderProgram.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteBlendState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteDepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteRasterizerState.cs\" />\n    <Compile Include=\"Graphics\\.GL\\States\\ConcreteSamplerState.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\VertexDeclarationAttributeInfo.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetSwapChain.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLExtensions.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLVersion.cs\" />\n    <Compile Include=\"Graphics\\.GL\\IRenderTargetStrategyGL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.cs\" />\n\n    <Compile Include=\"Graphics\\RenderTargetSwapChain.OpenGL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\.iOS\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.iOS\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Media\\iOS\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\iOS\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\iOS\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\iOS\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\iOS\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\iOS\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Media\\iOS\\ConcreteVideo.cs\" />\n\n    <Compile Include=\"Storage\\.iOS\\ConcreteStorageContainer.cs\" />\n    <Compile Include=\"Storage\\.iOS\\ConcreteStorageDevice.cs\" />\n    <Compile Include=\"Storage\\.iOS\\ConcreteStorageFactory.cs\" />\n    <Compile Include=\"Storage\\.iOS\\ConcreteStorageService.cs\" />\n\n    <Compile Include=\"XR\\.iOS\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.iOS\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Utilities\\.iOS\\FuncLoader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\InteropHelpers.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\.iOS\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.iOS\\ConcreteTitleContainerFactory.cs\" />\n\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageSharp\" />\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageWriteSharp\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"build\\.iOS\\nkast.Kni.Platform.iOS.GL.targets\" PackagePath=\"build\\\" Pack=\"true\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.gles.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.gles.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.gles.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.gles.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.gles.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.gles.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Media/Android/ConcreteAlbum.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\nusing Android.Graphics;\nusing Android.Provider;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteAlbumStrategy : AlbumStrategy\n    {\n        private string _name;\n        private Artist _artist;\n        private Genre _genre;\n        private SongCollection _songs;\n\n        private Android.Net.Uri _thumbnail;\n\n        public override string Name\n        {\n            get { return this._name; }\n        }\n\n        public override Artist Artist\n        {\n            get { return this._artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return this._genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool HasArt\n        {\n            get { return this._thumbnail != null; }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return this._songs; }\n        }\n\n\n        internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection,\n                                     Android.Net.Uri thumbnail)\n        {\n            this._name = name;\n            this._artist = artist;\n            this._genre = genre;\n            this._songs = songCollection;\n\n            this._thumbnail = thumbnail;\n        }\n\n\n        public override Stream GetAlbumArt()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Stream GetThumbnail()\n        {\n            throw new NotImplementedException();\n        }\n\n\n        [CLSCompliant(false)]\n        public Bitmap Platform_GetAlbumArt(int width = 0, int height = 0)\n        {\n            Bitmap albumArt = MediaStore.Images.Media.GetBitmap(ConcreteMediaLibraryStrategy.Context.ContentResolver, this._thumbnail);\n            if (width == 0 || height == 0)\n                return albumArt;\n\n            Bitmap scaledAlbumArt = Bitmap.CreateScaledBitmap(albumArt, width, height, true);\n            albumArt.Dispose();\n            return scaledAlbumArt;\n        }\n\n        [CLSCompliant(false)]\n        public Bitmap Platform_GetThumbnail()\n        {\n            return this.Platform_GetAlbumArt(220, 220);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Android/ConcreteMediaFactory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public sealed class ConcreteMediaFactory : MediaFactory\n    {\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy()\n        {\n            return new ConcreteMediaLibraryStrategy();\n        }\n\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource)\n        {\n            return new ConcreteMediaLibraryStrategy(mediaSource);\n        }\n\n        public override MediaPlayerStrategy CreateMediaPlayerStrategy()\n        {\n            return new ConcreteMediaPlayerStrategy();\n        }\n\n        public override SongStrategy CreateSongStrategy(string name, Uri streamSource)\n        {\n            return new ConcreteSongStrategy(name, streamSource);\n        }\n\n        public override VideoPlayerStrategy CreateVideoPlayerStrategy()\n        {\n            return new ConcreteVideoPlayerStrategy();\n        }\n\n        public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan)\n        {\n            return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan);\n        }\n\n        public override IList<MediaSource> GetAvailableMediaSources()\n        {\n            MediaSource[] result = { base.CreateMediaSource(\"DummpMediaSource\", MediaSourceType.LocalDevice) };\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Android/ConcreteMediaLibrary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\nusing Android.Content;\nusing Android.Provider;\nusing Uri = Android.Net.Uri;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy\n    {\n        private static AlbumCollection _albumCollection;\n        private static SongCollection _songCollection;\n\n        private static readonly TimeSpan MinimumSongDuration = TimeSpan.FromSeconds(3);\n        internal static Context Context { get; set; }\n\n\n        public override MediaSource MediaSource\n        {\n            get { return base.MediaSource; }\n        }\n\n        public override AlbumCollection Albums\n        {\n            get { return _albumCollection; }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return _songCollection; }\n        }\n\n        public override PlaylistCollection Playlists\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        //public override ArtistCollection Artists\n        //{\n        //    get { return base.Artists; }\n        //}\n\n        //public override GenreCollection Genres\n        //{\n        //    get { return base.Genres; }\n        //}\n\n\n        internal ConcreteMediaLibraryStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteMediaLibraryStrategy(MediaSource mediaSource)\n            : base(mediaSource)\n        {\n            throw new NotSupportedException(\"Initializing from MediaSource is not supported\");\n        }\n\n        public override void Load(Action<int> progressCallback = null)\n        {\n\n\n            List<Song> songList = new List<Song>();\n            List<Album> albumList = new List<Album>();\n\n            using (Android.Database.ICursor musicCursor = Context.ContentResolver.Query(MediaStore.Audio.Media.ExternalContentUri, null, null, null, null))\n            {\n                if (musicCursor != null)\n                {\n                    Dictionary<string, Artist> artists = new Dictionary<string, Artist>();\n                    Dictionary<string, Album> albums = new Dictionary<string, Album>();\n                    Dictionary<string, Genre> genres = new Dictionary<string, Genre>();\n\n                    // Note: Grabbing album art using MediaStore.Audio.AlbumColumns.AlbumArt and\n                    // MediaStore.Audio.AudioColumns.AlbumArt is broken\n                    // See: https://code.google.com/p/android/issues/detail?id=1630\n                    // Workaround: http://stackoverflow.com/questions/1954434/cover-art-on-android\n\n                    int albumNameColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.Album);\n                    int albumArtistColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.Artist);\n                    int albumIdColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.AlbumId);\n                    int genreColumn = musicCursor.GetColumnIndex(MediaStore.Audio.GenresColumns.Name); // Also broken :(\n\n                    int artistColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Artist);\n                    int titleColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Title);\n                    int durationColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Duration);\n                    int assetIdColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Id);\n\n                    if (titleColumn == -1 || durationColumn == -1 || assetIdColumn == -1)\n                    {\n                        Debug.WriteLine(\"Missing essential properties from music library. Returning empty library.\");\n                        _albumCollection = base.CreateAlbumCollection(albumList);\n                        _songCollection = base.CreateSongCollection(songList);\n                        return;\n                    }\n\n                    for (musicCursor.MoveToFirst(); !musicCursor.IsAfterLast; musicCursor.MoveToNext())\n                        try\n                        {\n                            long durationProperty = musicCursor.GetLong(durationColumn);\n                            TimeSpan duration = TimeSpan.FromMilliseconds(durationProperty);\n\n                            // Exclude sound effects\n                            if (duration < MinimumSongDuration)\n                                continue;\n\n                            string albumNameProperty = (albumNameColumn > -1 ? musicCursor.GetString(albumNameColumn) : null) ?? \"Unknown Album\";\n                            string albumArtistProperty = (albumArtistColumn > -1 ? musicCursor.GetString(albumArtistColumn) : null) ?? \"Unknown Artist\";\n                            string genreProperty = (genreColumn > -1 ? musicCursor.GetString(genreColumn) : null) ?? \"Unknown Genre\";\n                            string artistProperty = (artistColumn > -1 ? musicCursor.GetString(artistColumn) : null) ?? \"Unknown Artist\";\n                            string titleProperty = musicCursor.GetString(titleColumn);\n\n                            long assetId = musicCursor.GetLong(assetIdColumn);\n                            Uri assetUri = ContentUris.WithAppendedId(MediaStore.Audio.Media.ExternalContentUri, assetId);\n                            long albumId = albumIdColumn > -1 ? musicCursor.GetInt(albumIdColumn) : -1;\n                            Uri albumArtUri = albumId > -1 ? ContentUris.WithAppendedId(Uri.Parse(\"content://media/external/audio/albumart\"), albumId) : null;\n\n                            Artist artist;\n                            if (!artists.TryGetValue(artistProperty, out artist))\n                            {\n                                artist = new Artist(artistProperty);\n                                artists.Add(artist.Name, artist);\n                            }\n\n                            Artist albumArtist;\n                            if (!artists.TryGetValue(albumArtistProperty, out albumArtist))\n                            {\n                                albumArtist = new Artist(albumArtistProperty);\n                                artists.Add(albumArtist.Name, albumArtist);\n                            }\n\n                            Genre genre;\n                            if (!genres.TryGetValue(genreProperty, out genre))\n                            {\n                                genre = new Genre(genreProperty);\n                                genres.Add(genre.Name, genre);\n                            }\n\n                            Album album;\n                            if (!albums.TryGetValue(albumNameProperty, out album))\n                            {\n                                AlbumStrategy albumStrategy = new ConcreteAlbumStrategy(albumNameProperty, albumArtist, genre, base.CreateSongCollection(new List<Song>()), albumArtUri);\n                                album = base.CreateAlbum(albumStrategy);\n                                albums.Add(album.Name, album);\n                                albumList.Add(album);\n                            }\n\n                            ConcreteSongStrategy songStrategy = new ConcreteSongStrategy();\n                            songStrategy.Album = album;\n                            songStrategy.Artist = artist;\n                            songStrategy.Genre = genre;\n                            songStrategy.Name = titleProperty;\n                            songStrategy.Duration = duration;\n                            songStrategy._assetUri = assetUri;\n                            Song song = base.CreateSong(songStrategy);\n\n                            song.Album.Songs.Add(song);\n                            songList.Add(song);\n                        }\n                        catch (Exception e)\n                        {\n                            Debug.WriteLine(\"MediaLibrary exception: \" + e.Message);\n                        }\n                }\n\n                musicCursor.Close();\n            }\n\n            _albumCollection = base.CreateAlbumCollection(albumList);\n            _songCollection = base.CreateSongCollection(songList);\n        }\n\n        public override void SavePicture(string name, byte[] imageBuffer)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SavePicture(string name, Stream source)\n        {\n            throw new NotImplementedException();\n        }\n\n        \n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Android/ConcreteMediaPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy\n    {\n        private Android.Media.MediaPlayer _androidPlayer;\n        private Song _playingSong;\n\n        internal ConcreteMediaPlayerStrategy()\n        {\n            this._androidPlayer = new Android.Media.MediaPlayer();\n            this._androidPlayer.Completion += AndroidPlayer_Completion;\n        }\n\n        #region Properties\n\n        public override float PlatformVolume\n        {\n            get { return base.PlatformVolume; }\n            set\n            {\n                base.PlatformVolume = value;\n\n                if (base.Queue.ActiveSong != null)\n                    SetChannelVolumes();\n            }\n        }\n\n        public override bool PlatformIsMuted\n        {\n            get { return base.PlatformIsMuted; }\n            set\n            {\n                base.PlatformIsMuted = value;\n\n                if (base.Queue.Count > 0)\n                    SetChannelVolumes();\n            }\n        }\n\n        public override bool PlatformIsRepeating\n        {\n            get { return base.PlatformIsRepeating; }\n            set\n            {\n                base.PlatformIsRepeating = value;\n            }\n        }\n\n        public override bool PlatformIsShuffled\n        {\n            get { return base.PlatformIsShuffled; }\n            set { base.PlatformIsShuffled = value; }\n        }\n\n        public override bool PlatformGameHasControl\n        {\n            get { return true; }\n        }\n\n        public override TimeSpan PlatformPlayPosition\n        {\n            get\n            {\n                Song activeSong = base.Queue.ActiveSong;\n                if (activeSong == null)\n                    return TimeSpan.Zero;\n\n                if (_playingSong == activeSong && _androidPlayer.IsPlaying)\n                    return TimeSpan.FromMilliseconds(_androidPlayer.CurrentPosition);\n                else\n                    return TimeSpan.Zero;\n            }\n        }\n\n        protected override bool PlatformUpdateState(ref MediaState state)\n        {\n            return false;\n        }\n\n        #endregion\n\n        private void SetChannelVolumes()\n        {\n            float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume;\n\n            for (int i = 0; i < base.Queue.Count; i++)\n            {\n                Song queuedSong = base.Queue[i];\n\n                _androidPlayer.SetVolume(innerVolume, innerVolume);\n            }\n        }\n        \n        public override void PlatformPlaySong(Song song)\n        {\n            if (base.Queue.ActiveSong != null)\n            {\n                float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume;\n\n                _androidPlayer.SetVolume(innerVolume, innerVolume);\n\n                // Prepare the player\n                _androidPlayer.Reset();\n\n                if (((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().AssetUri != null)\n                {\n                    _androidPlayer.SetDataSource(Android.App.Application.Context,\n                                                 ((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().AssetUri);\n                }\n                else\n                {\n                    Android.Content.Res.AssetFileDescriptor afd = Android.App.Application.Context.Assets.OpenFd(\n                        ((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().StreamSource.OriginalString);\n                    if (afd == null)\n                        return;\n\n                    _androidPlayer.SetDataSource(afd.FileDescriptor, afd.StartOffset, afd.Length);\n                    afd.Close();\n                }\n\n                _androidPlayer.Prepare();\n                _playingSong = song;\n\n                _androidPlayer.Start();\n                ((IPlatformSong)song).Strategy.PlayCount++;\n            }\n        }\n\n        public override void PlatformPause()\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                _androidPlayer.Pause();\n            }\n        }\n\n        public override void PlatformResume()\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                _androidPlayer.Start();\n            }\n        }\n\n        public override void PlatformStop()\n        {\n            for (int i = 0; i < base.Queue.Count; i++)\n            {\n                Song queuedSong = base.Queue[i];\n\n                Song activeSong = base.Queue.ActiveSong;\n                _androidPlayer.Stop();\n                _playingSong = null;\n                ((IPlatformSong)activeSong).Strategy.PlayCount = 0;\n            }\n        }\n\n        protected override void PlatformClearQueue()\n        {\n            while (base.Queue.Count > 0)\n            {\n                Song song = base.Queue[0];\n\n                _androidPlayer.Stop();\n                _playingSong = null;\n                ((IPlatformSong)song).Strategy.PlayCount = 0;\n\n                base.RemoveQueuedSong(song);\n            }\n\n            _numSongsInQueuePlayed = 0;\n            //base.ClearQueue();\n        }\n\n        private void AndroidPlayer_Completion(object sender, EventArgs e)\n        {\n            if (_playingSong != null)\n            {\n                _playingSong = null;\n                base.OnSongFinishedPlaying();\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Android/ConcreteSong.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteSongStrategy : SongStrategy\n    {\n        private Uri _streamSource;\n        internal Android.Net.Uri _assetUri;\n\n        internal Uri StreamSource { get { return _streamSource; } }\n\n        [CLSCompliant(false)]\n        public Android.Net.Uri AssetUri { get { return this._assetUri; } }\n\n\n        internal ConcreteSongStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteSongStrategy(string name, Uri streamSource)\n            : base()\n        {\n            this.Name = name;\n            this._streamSource = streamSource;\n        }\n\n        public override Album Album\n        {\n            get { return base.Album; }\n        }\n\n        public override Artist Artist\n        {\n            get { return base.Artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return base.Genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { return base.Duration; }\n        }\n\n        public override bool IsProtected\n        {\n            get { return base.IsProtected; }\n        }\n\n        public override bool IsRated\n        {\n            get { return base.IsRated; }\n        }\n\n        public override string Filename\n        {\n            get\n            {\n                if (this._assetUri != null)\n                    return this.Name;\n\n                return StreamSource.OriginalString;\n            }\n        }\n\n        public override string Name\n        {\n            get { return base.Name; }\n        }\n\n        public override int PlayCount\n        {\n            get { return base.PlayCount; }\n        }\n\n        public override int Rating\n        {\n            get { return base.Rating; }\n        }\n\n        public override int TrackNumber\n        {\n            get { return base.TrackNumber; }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Platforms/Media/Android/ConcreteVideo.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoStrategy : VideoStrategy\n    {\n\n\n        internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n            : base(graphicsDevice, fileName, duration)\n        {\n\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Platforms/Media/Android/ConcreteVideoPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\nusing GLPixelFormat = Microsoft.Xna.Platform.Graphics.OpenGL.PixelFormat;\nusing Android.Views;\nusing Android.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy\n    {\n        private const int GL_TEXTURE_EXTERNAL_OES = (0x00008D65);\n        \n        private Android.Media.MediaPlayer _player;\n\n        private SurfaceTexture _surfaceTexture;\n        private Surface _surface;\n        private GraphicsDeviceStrategy _graphicsDeviceStrategy;\n        private int _glVideoSurfaceTexture;\n\n        private bool _frameAvailable;\n        private byte[] _frameData;\n        private Texture2D _lastFrame;\n\n        public override MediaState State\n        {\n            get { return base.State; }\n            protected set { base.State = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set\n            {\n                base.IsLooped = value;\n                _player.Looping = value;\n            }\n        }\n\n        public override bool IsMuted\n        {\n            get { return base.IsMuted; }\n            set\n            {\n                base.IsMuted = value;\n                throw new NotImplementedException();\n            }\n        }\n\n        public override TimeSpan PlayPosition\n        {\n            get { return TimeSpan.FromMilliseconds(_player.CurrentPosition); }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n                \n                PlatformSetVolume();\n            }\n        }\n\n        public override Video Video\n        {\n            get { return base.Video; }\n            protected set\n            {\n                base.Video = value;\n                if (value != null)\n                    CreateGLVideoSurfaceTexture(((IPlatformGraphicsDevice)((IPlatformVideo)value).Strategy.GraphicsDevice).Strategy);\n            }\n        }\n\n\n        internal ConcreteVideoPlayerStrategy()\n        {\n            _player = new Android.Media.MediaPlayer();\n\n        }\n        \n        private void CreateGLVideoSurfaceTexture(GraphicsDeviceStrategy graphicsDeviceStrategy)\n        {\n            if (_graphicsDeviceStrategy != null)\n            {\n                if (_graphicsDeviceStrategy != graphicsDeviceStrategy)\n                    throw new InvalidOperationException();\n\n                return;\n            }\n\n            _graphicsDeviceStrategy = graphicsDeviceStrategy;\n\n            var GL = ((IPlatformGraphicsContext)_graphicsDeviceStrategy.MainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n\n            _glVideoSurfaceTexture = GL.GenTexture();\n            GL.CheckGLError();\n            ((IPlatformTextureCollection)_graphicsDeviceStrategy.MainContext.Textures).Strategy.Dirty(0);\n            GL.ActiveTexture(TextureUnit.Texture0 + 0);\n            GL.CheckGLError();\n            GL.BindTexture((TextureTarget)GL_TEXTURE_EXTERNAL_OES, _glVideoSurfaceTexture);\n            GL.CheckGLError();\n            GL.TexParameter((TextureTarget)GL_TEXTURE_EXTERNAL_OES, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);\n            GL.CheckGLError();\n            GL.TexParameter((TextureTarget)GL_TEXTURE_EXTERNAL_OES, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);\n            GL.CheckGLError();\n            GL.TexParameter((TextureTarget)GL_TEXTURE_EXTERNAL_OES, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge);\n            GL.CheckGLError();\n            GL.TexParameter((TextureTarget)GL_TEXTURE_EXTERNAL_OES, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge);\n            GL.CheckGLError();\n\n            _surfaceTexture = new SurfaceTexture(_glVideoSurfaceTexture);\n            _surface = new Surface(_surfaceTexture);\n\n            _player.SetSurface(_surface);\n            _surfaceTexture.FrameAvailable += _surfaceTexture_FrameAvailable;\n        }\n\n        public unsafe override Texture2D PlatformGetTexture()\n        {\n            if (_lastFrame != null)\n            {\n                if (_lastFrame.Width != this.Video.Width || _lastFrame.Height != this.Video.Height)\n                {\n                    _lastFrame.Dispose();\n                    _lastFrame = null;\n                }\n            }\n            if (_lastFrame == null)\n                _lastFrame = new Texture2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, this.Video.Width, this.Video.Height, false, SurfaceFormat.Color);\n\n            var GL = ((IPlatformGraphicsContext)_graphicsDeviceStrategy.MainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            if (_frameAvailable)\n            {\n                _frameAvailable = false;\n\n                // Calculate the buffer size for RGBA format\n                int frameBufferSize = this.Video.Width * this.Video.Height * 4;\n\n                // Allocate memory for the frame data if needed\n                if (_frameData == null || _frameData.Length != frameBufferSize)\n                    _frameData = new byte[frameBufferSize];\n\n                // Update the surface texture\n                _surfaceTexture.UpdateTexImage();\n\n                // Create a framebuffer\n                int framebuffer = GL.GenFramebuffer();\n                GL.CheckGLError();\n\n                GL.BindFramebuffer(FramebufferTarget.Framebuffer, framebuffer);\n                GL.CheckGLError();\n\n                // Attach the texture to the framebuffer\n                GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, (TextureTarget)GL_TEXTURE_EXTERNAL_OES, _glVideoSurfaceTexture, 0);\n                GL.CheckGLError();\n\n                // Read the pixel data from the framebuffer\n                fixed (byte* pData = &_frameData[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n                    GL.ReadPixels(0, 0, this.Video.Width, this.Video.Height, GLPixelFormat.Rgba, PixelType.UnsignedByte, dataPtr);\n                    GL.CheckGLError();\n                }\n\n                // Dettach framebuffer\n                GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);\n                GL.CheckGLError();\n\n                // cleanup\n                GL.DeleteFramebuffer(framebuffer);\n                GL.CheckGLError();\n\n                _lastFrame.SetData(_frameData, 0, frameBufferSize);\n            }\n\n            return _lastFrame;\n        }\n        \n        protected override void PlatformUpdateState(ref MediaState state)\n        {\n        }\n\n\n        public override void PlatformPlay(Video video)\n        {\n            MediaState state = State;\n            if (state == MediaState.Playing || state == MediaState.Paused)\n            {\n                _player.Stop();\n                _player.Reset();\n            }\n\n            this.Video = video;\n\n            Android.Content.Res.AssetFileDescriptor afd = Android.App.Application.Context.Assets.OpenFd(((IPlatformVideo)this.Video).Strategy.FileName);\n            if (afd == null)\n                return;\n\n            _player.SetDataSource(afd.FileDescriptor, afd.StartOffset, afd.Length);\n            afd.Close();\n            _player.Prepare();\n\n            _player.Start();\n\n            State = MediaState.Playing;\n        }\n\n        private void _surfaceTexture_FrameAvailable(object sender, SurfaceTexture.FrameAvailableEventArgs e)\n        {\n            _frameAvailable = true;\n        }\n\n        public override void PlatformPause()\n        {\n            _player.Pause();\n            State = MediaState.Paused;\n        }\n\n        public override void PlatformResume()\n        {\n            _player.Start();\n            State = MediaState.Playing;\n        }\n\n        public override void PlatformStop()\n        {\n            _player.Stop();\n            _player.Reset();\n\n            State = MediaState.Stopped;\n        }\n\n        private void PlatformSetVolume()\n        {\n            float logVolume = (float)Math.Pow(Volume, 2);\n            _player.SetVolume(logVolume, logVolume);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n\n            if (disposing)\n            {\n                if (_lastFrame != null)\n                    _lastFrame.Dispose();\n                _lastFrame = null;\n\n                if (_player != null)\n                    _player.Dispose();\n                _player = null;\n\n                if (_surfaceTexture != null)\n                {\n                    _surfaceTexture.FrameAvailable -= _surfaceTexture_FrameAvailable;\n                    _surfaceTexture.Dispose();\n                }\n                _surfaceTexture = null;\n\n                if (_surface != null)\n                    _surface.Dispose();\n                _surface = null;\n            }\n\n            if (_graphicsDeviceStrategy != null)\n            {\n                var GL = ((IPlatformGraphicsContext)_graphicsDeviceStrategy.MainContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                if (_glVideoSurfaceTexture != 0)\n                {\n                    GL.DeleteTexture(_glVideoSurfaceTexture);\n                    _glVideoSurfaceTexture = 0;\n                }\n            }\n            _graphicsDeviceStrategy = null;\n\n            base.Dispose(disposing);\n        }\n    }    \n}\n"
  },
  {
    "path": "Platforms/Media/Blazor/ConcreteAlbum.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteAlbumStrategy : AlbumStrategy\n    {\n        private string _name;\n        private Artist _artist;\n        private Genre _genre;\n        private SongCollection _songs;\n\n\n        public override string Name\n        {\n            get { return this._name; }\n        }\n\n        public override Artist Artist\n        {\n            get { return this._artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return this._genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool HasArt\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return this._songs; }\n        }\n\n\n        internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection)\n        {\n            this._name = name;\n            this._artist = artist;\n            this._genre = genre;\n            this._songs = songCollection;\n        }\n\n\n        public override Stream GetAlbumArt()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Stream GetThumbnail()\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Blazor/ConcreteMediaFactory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public sealed class ConcreteMediaFactory : MediaFactory\n    {\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy()\n        {\n            return new ConcreteMediaLibraryStrategy();\n        }\n\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource)\n        {\n            return new ConcreteMediaLibraryStrategy(mediaSource);\n        }\n\n        public override MediaPlayerStrategy CreateMediaPlayerStrategy()\n        {\n            return new ConcreteMediaPlayerStrategy();\n        }\n\n        public override SongStrategy CreateSongStrategy(string name, Uri streamSource)\n        {\n            return new ConcreteSongStrategy(name, streamSource);\n        }\n\n        public override VideoPlayerStrategy CreateVideoPlayerStrategy()\n        {\n            return new ConcreteVideoPlayerStrategy();\n        }\n\n        public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan)\n        {\n            return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan);\n        }\n\n        public override IList<MediaSource> GetAvailableMediaSources()\n        {\n            MediaSource[] result = { base.CreateMediaSource(\"DummpMediaSource\", MediaSourceType.LocalDevice) };\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Blazor/ConcreteMediaLibrary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy\n    {\n        public override MediaSource MediaSource\n        {\n            get { return base.MediaSource; }\n        }\n\n        public override AlbumCollection Albums\n        {\n            get { return null; }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return null; }\n        }\n\n        public override PlaylistCollection Playlists\n        {\n            get { return null; }\n        }\n\n        //public override ArtistCollection Artists\n        //{\n        //    get { return base.Artists; }\n        //}\n\n        //public override GenreCollection Genres\n        //{\n        //    get { return base.Genres; }\n        //}\n\n\n        internal ConcreteMediaLibraryStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteMediaLibraryStrategy(MediaSource mediaSource)\n            : base(mediaSource)\n        {\n            throw new NotSupportedException(\"Initializing from MediaSource is not supported\");\n        }\n\n        public override void Load(Action<int> progressCallback = null)\n        {\n            \n        }\n\n        public override void SavePicture(string name, byte[] imageBuffer)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SavePicture(string name, Stream source)\n        {\n            throw new NotImplementedException();\n        }\n\n        \n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Blazor/ConcreteMediaPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\nusing WasmDom = nkast.Wasm.Dom;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy\n    {\n        WasmDom.Audio _webPlayer;\n        private Song _playingSong;\n        bool _isFirstLoop;\n        TimeSpan _prevCurrentTime;\n\n        internal ConcreteMediaPlayerStrategy()\n        {\n            _webPlayer = new WasmDom.Audio();\n            _webPlayer.OnEnded += WebPlayer_OnEnded;\n            _webPlayer.OnPlaying += WebPlayer_OnPlaying;\n            _webPlayer.OnTimeUpdate += _webPlayer_OnTimeUpdate;\n        }\n\n        #region Properties\n\n        public override float PlatformVolume\n        {\n            get { return base.PlatformVolume; }\n            set\n            {\n                base.PlatformVolume = value;\n\n                _webPlayer.Volume = value;\n            }\n        }\n\n        public override bool PlatformIsMuted\n        {\n            get { return base.PlatformIsMuted; }\n            set\n            {\n                base.PlatformIsMuted = value;\n\n                _webPlayer.Muted = value;\n            }\n        }\n\n        public override bool PlatformIsRepeating\n        {\n            get { return base.PlatformIsRepeating; }\n            set\n            {\n                base.PlatformIsRepeating = value;\n\n                _webPlayer.Loop = value;\n            }\n        }\n\n        public override bool PlatformIsShuffled\n        {\n            get { return base.PlatformIsShuffled; }\n            set { base.PlatformIsShuffled = value; }\n        }\n\n        public override bool PlatformGameHasControl\n        {\n            get { return true; }\n        }\n\n        public override TimeSpan PlatformPlayPosition\n        {\n            get\n            {\n                return _webPlayer.CurrentTime; \n            }\n        }\n\n        protected override bool PlatformUpdateState(ref MediaState state)\n        {\n            return false;\n        }\n\n        #endregion\n\n        public override void PlatformPlaySong(Song song)\n        {\n            if (base.Queue.ActiveSong != null)\n            {\n                _webPlayer.Src = ((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().StreamSource.OriginalString;\n                _webPlayer.Load();\n\n                _webPlayer.Volume = this.PlatformVolume;\n                _webPlayer.Muted = this.PlatformIsMuted;\n                _webPlayer.Loop = this.PlatformIsRepeating;\n                _playingSong = song;\n\n                _isFirstLoop = true;\n                _prevCurrentTime = TimeSpan.Zero;\n                _webPlayer.Play();\n                ((IPlatformSong)song).Strategy.PlayCount++;\n            }\n        }\n\n        public override void PlatformPause()\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                _webPlayer.Pause();\n            }\n        }\n\n        public override void PlatformResume()\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                _webPlayer.Play();\n            }\n        }\n\n        public override void PlatformStop()\n        {\n            for (int i = 0; i < base.Queue.Count; i++)\n            {\n                Song queuedSong = base.Queue[i];\n\n                Song activeSong = base.Queue.ActiveSong;\n                _webPlayer.Pause();\n                _webPlayer.Src = \"\";\n                _playingSong = null;\n                ((IPlatformSong)activeSong).Strategy.PlayCount = 0;\n            }\n        }\n\n        private void WebPlayer_OnPlaying(object sender, EventArgs e)\n        {\n            WasmDom.Audio webPlayer = (WasmDom.Audio)sender;\n\n            if (_isFirstLoop)\n            {\n                // ignore first OnPlaying event.\n                _isFirstLoop = false;\n                return;\n            }\n\n            // detect looping.\n            if (this.PlatformIsRepeating)\n            {\n                if (this.State == MediaState.Playing)\n                {\n                    // ignore OnPlaying event due to streaming pause.\n                    if (_prevCurrentTime != TimeSpan.Zero)\n                        return;\n\n                    Song activeSong = this.Queue.ActiveSong;\n\n                    ((IPlatformSong)_playingSong).Strategy.PlayCount++;\n\n                    base.OnPlatformMediaStateChanged();\n                    // check if user changed the state during the MediaStateChanged event.\n                    if (this.State != MediaState.Playing\n                    ||  this.Queue.ActiveSong != activeSong)\n                    {\n                        return;\n                    }\n\n                    base.OnPlatformActiveSongChanged();\n                }\n            }\n        }\n\n        private void WebPlayer_OnEnded(object sender, EventArgs e)\n        {\n            if (_playingSong != null)\n            {\n                _playingSong = null;\n                base.OnSongFinishedPlaying();\n            }\n        }\n\n        private void _webPlayer_OnTimeUpdate(object sender, EventArgs e)\n        {\n            WasmDom.Audio webPlayer = (WasmDom.Audio)sender;\n            TimeSpan currentTime = webPlayer.CurrentTime;\n\n            _prevCurrentTime = currentTime;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _webPlayer.OnPlaying -= WebPlayer_OnPlaying;\n                _webPlayer.OnEnded -= WebPlayer_OnEnded;\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Blazor/ConcreteSong.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteSongStrategy : SongStrategy\n    {\n        private Uri _streamSource;\n\n        internal Uri StreamSource { get { return _streamSource; } }\n\n        internal ConcreteSongStrategy(string name, Uri streamSource)\n            : base()\n        {\n            this.Name = name;\n            this._streamSource = streamSource;\n        }\n\n        public override Album Album\n        {\n            get { return base.Album; }\n        }\n\n        public override Artist Artist\n        {\n            get { return base.Artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return base.Genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { return base.Duration; }\n        }\n\n        public override bool IsProtected\n        {\n            get { return base.IsProtected; }\n        }\n\n        public override bool IsRated\n        {\n            get { return base.IsRated; }\n        }\n\n        public override string Filename\n        {\n            get { return StreamSource.OriginalString; }\n        }\n\n        public override string Name\n        {\n            get { return base.Name; }\n        }\n\n        public override int PlayCount\n        {\n            get { return base.PlayCount; }\n        }\n\n        public override int Rating\n        {\n            get { return base.Rating; }\n        }\n\n        public override int TrackNumber\n        {\n            get { return base.TrackNumber; }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Media/Blazor/ConcreteVideo.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\n// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoStrategy : VideoStrategy\n    {\n\n        internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n            : base(graphicsDevice, fileName, duration)\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Blazor/ConcreteVideoPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing nkast.Wasm.Canvas.WebGL;\nusing WasmDom = nkast.Wasm.Dom;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy\n    {\n        private WasmDom.Video _player;\n\n        private bool _isPlaying = false;\n        private bool _frameAvailable;\n        private Texture2D _lastFrame;\n\n        public override MediaState State\n        {\n            get { return base.State; }\n            protected set { base.State = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set\n            {\n                base.IsLooped = value;\n                _player.Loop = value;\n\n            }\n        }\n\n        public override bool IsMuted\n        {\n            get { return base.IsMuted; }\n            set\n            {\n                base.IsMuted = value;\n                _player.Muted = value;\n            }\n        }\n\n        public override TimeSpan PlayPosition\n        {\n            get { return _player.CurrentTime; }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n                PlatformSetVolume();\n            }\n        }\n\n        internal ConcreteVideoPlayerStrategy()\n        {\n            _player = new WasmDom.Video();\n            _player.OnPlaying += Player_OnPlaying;\n            _player.OnTimeUpdate += Player_OnTimeUpdate;\n            _player.OnEnded += Player_OnEnded;\n\n            return;\n        }\n\n\n        public override Texture2D PlatformGetTexture()\n        {\n            if (_lastFrame != null)\n            {\n                if (_lastFrame.Width != base.Video.Width || _lastFrame.Height != base.Video.Height)\n                {\n                    _lastFrame.Dispose();\n                    _lastFrame = null;\n                }\n            }\n            if (_lastFrame == null)\n                _lastFrame = new Texture2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, base.Video.Width, base.Video.Height, false, SurfaceFormat.Color);\n\n            if (_isPlaying && _frameAvailable)\n            {\n                var GL = ((IPlatformGraphicsContext) ((IPlatformGraphicsDevice)((IPlatformVideo)base.Video).Strategy.GraphicsDevice).Strategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                ConcreteTexture2D texture2D = ((IPlatformTexture)_lastFrame).GetTextureStrategy<ConcreteTexture2D>();\n\n                System.Diagnostics.Debug.Assert(texture2D._glTexture != null);\n                ((IPlatformTextureCollection)texture2D.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0);\n                GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0);\n                GL.CheckGLError();\n                GL.BindTexture(WebGLTextureTarget.TEXTURE_2D, texture2D._glTexture);\n                GL.CheckGLError();\n\n                GL.PixelStore(WebGLPixelParameter.UNPACK_ALIGNMENT, Math.Min(texture2D.Format.GetSize(), 8));\n                GL.CheckGLError();\n\n                GL.TexImage2D(WebGLTextureTarget.TEXTURE_2D, 0,\n                    texture2D._glInternalFormat, texture2D._glFormat, texture2D._glType,\n                    _player);\n                GL.CheckGLError();\n\n                //GL.Finish();\n                //GL.CheckGLError();\n            }\n\n            return _lastFrame;\n        }\n\n\n        protected override void PlatformUpdateState(ref MediaState state)\n        {\n        }\n\n        public override void PlatformPlay(Video video)\n        {\n            _player.Pause();\n            _player.Src = \"\";\n\n            _isPlaying = false;\n            _frameAvailable = false;\n\n            base.Video = video;\n\n            ConcreteVideoStrategy videoStrategy = ((IPlatformVideo)video).Strategy.ToConcrete<ConcreteVideoStrategy>();\n\n            _player.Src = videoStrategy.FileName;\n            _player.Load();\n            _player.Play();\n\n            State = MediaState.Playing;\n        }\n\n        public override void PlatformPause()\n        {\n            _player.Pause();\n            _isPlaying = false;\n            _frameAvailable = false;\n\n            State = MediaState.Paused;\n        }\n\n        public override void PlatformResume()\n        {\n            _player.Play();\n\n            State = MediaState.Playing;\n        }\n        \n        public override void PlatformStop()\n        {\n            _player.Pause();\n            _player.Src = \"\";\n\n            _isPlaying = false;\n            _frameAvailable = false;\n\n            State = MediaState.Stopped;\n        }\n\n        private void PlatformSetVolume()\n        {\n            _player.Volume = Volume;\n        }\n\n        private void Player_OnPlaying(object sender, EventArgs e)\n        {\n            _isPlaying = true;\n        }\n\n        private void Player_OnTimeUpdate(object sender, EventArgs e)\n        {\n            _frameAvailable = true;\n        }\n\n        private void Player_OnEnded(object sender, EventArgs e)\n        {\n            _isPlaying = false;\n            _frameAvailable = false;\n\n            State = MediaState.Stopped;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _player.OnPlaying -= Player_OnPlaying;\n                _player.OnTimeUpdate -= Player_OnTimeUpdate;\n                _player.OnEnded -= Player_OnEnded;\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/DesktopGL/ConcreteAlbum.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteAlbumStrategy : AlbumStrategy\n    {\n        private string _name;\n        private Artist _artist;\n        private Genre _genre;\n        private SongCollection _songs;\n\n\n        public override string Name\n        {\n            get { return this._name; }\n        }\n\n        public override Artist Artist\n        {\n            get { return this._artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return this._genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool HasArt\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return this._songs; }\n        }\n\n\n        internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection)\n        {\n            this._name = name;\n            this._artist = artist;\n            this._genre = genre;\n            this._songs = songCollection;\n        }\n\n\n        public override Stream GetAlbumArt()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Stream GetThumbnail()\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/DesktopGL/ConcreteMediaFactory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public sealed class ConcreteMediaFactory : MediaFactory\n    {\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy()\n        {\n            return new ConcreteMediaLibraryStrategy();\n        }\n\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource)\n        {\n            return new ConcreteMediaLibraryStrategy(mediaSource);\n        }\n\n        public override MediaPlayerStrategy CreateMediaPlayerStrategy()\n        {\n            return new ConcreteMediaPlayerStrategy();\n        }\n\n        public override SongStrategy CreateSongStrategy(string name, Uri streamSource)\n        {\n            return new ConcreteSongStrategy(name, streamSource);\n        }\n\n        public override VideoPlayerStrategy CreateVideoPlayerStrategy()\n        {\n            return new ConcreteVideoPlayerStrategy();\n        }\n\n        public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan)\n        {\n            return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan);\n        }\n\n        public override IList<MediaSource> GetAvailableMediaSources()\n        {\n            MediaSource[] result = { base.CreateMediaSource(\"DummpMediaSource\", MediaSourceType.LocalDevice) };\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/DesktopGL/ConcreteMediaLibrary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy\n    {\n        public override MediaSource MediaSource\n        {\n            get { return base.MediaSource; }\n        }\n\n        public override AlbumCollection Albums\n        {\n            get { return null; }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return null; }\n        }\n\n        public override PlaylistCollection Playlists\n        {\n            get { return null; }\n        }\n\n        //public override ArtistCollection Artists\n        //{\n        //    get { return base.Artists; }\n        //}\n\n        //public override GenreCollection Genres\n        //{\n        //    get { return base.Genres; }\n        //}\n\n\n        internal ConcreteMediaLibraryStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteMediaLibraryStrategy(MediaSource mediaSource)\n            : base(mediaSource)\n        {\n            throw new NotSupportedException(\"Initializing from MediaSource is not supported\");\n        }\n\n        public override void Load(Action<int> progressCallback = null)\n        {\n            \n        }\n\n        public override void SavePicture(string name, byte[] imageBuffer)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SavePicture(string name, Stream source)\n        {\n            throw new NotImplementedException();\n        }\n\n        \n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/DesktopGL/ConcreteMediaPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform.Audio;\nusing NVorbis;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy\n    {\n        private DynamicSoundEffectInstance _soundPlayer;\n        private VorbisReader _reader;\n        private float[] _sampleBuffer;\n        private byte[] _dataBuffer;\n\n        private Dictionary<int, BufferInfo> _bufferInfoMap = new Dictionary<int, BufferInfo>();\n        private int _lastMarker = 0;\n        private TimeSpan _consumedBufferDuration = TimeSpan.Zero;\n\n        internal ConcreteMediaPlayerStrategy()\n        {\n        }\n\n        #region Properties\n\n        public override float PlatformVolume\n        {\n            get { return base.PlatformVolume; }\n            set\n            {\n                base.PlatformVolume = value;\n\n                if (base.Queue.ActiveSong != null)\n                    SetChannelVolumes();\n            }\n        }\n\n        public override bool PlatformIsMuted\n        {\n            get { return base.PlatformIsMuted; }\n            set\n            {\n                base.PlatformIsMuted = value;\n\n                if (base.Queue.Count > 0)\n                    SetChannelVolumes();\n            }\n        }\n\n        public override bool PlatformIsRepeating\n        {\n            get { return base.PlatformIsRepeating; }\n            set\n            {\n                base.PlatformIsRepeating = value;\n            }\n        }\n\n        public override bool PlatformIsShuffled\n        {\n            get { return base.PlatformIsShuffled; }\n            set { base.PlatformIsShuffled = value; }\n        }\n\n        public override bool PlatformGameHasControl\n        {\n            get { return true; }\n        }\n\n        public override TimeSpan PlatformPlayPosition\n        {\n            get\n            {\n                Song activeSong = base.Queue.ActiveSong;\n                if (activeSong == null)\n                    return TimeSpan.Zero;\n\n                if (_reader == null)\n                    return TimeSpan.Zero;\n\n                ConcreteSoundEffectInstance soundEffectInstanceStrategy = ((IPlatformSoundEffectInstance)_soundPlayer).GetStrategy<ConcreteSoundEffectInstance>();\n                int sampleOffset = soundEffectInstanceStrategy.GetSamplePosition();\n                TimeSpan time = _consumedBufferDuration + _soundPlayer.GetSampleDuration(sampleOffset * _reader.Channels * sizeof(short));\n                return time;\n            }\n        }\n\n        protected override bool PlatformUpdateState(ref MediaState state)\n        {\n            return false;\n        }\n\n        #endregion\n\n        private void SetChannelVolumes()\n        {\n            float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume;\n\n            if (_soundPlayer != null)\n                _soundPlayer.Volume = innerVolume;\n        }\n\n        public override void PlatformPlaySong(Song song)\n        {\n            if (base.Queue.ActiveSong != null)\n            {\n                float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume;\n\n                if (_soundPlayer != null)\n                    _soundPlayer.Volume = innerVolume;\n\n                this.CreatePlayer(((IPlatformSong)song).Strategy);\n\n                SoundState state = _soundPlayer.State;\n                switch (state)\n                {\n                    case SoundState.Playing:\n                        return;\n                    case SoundState.Paused:\n                        _soundPlayer.Resume();\n                        return;\n                    case SoundState.Stopped:\n                        _consumedBufferDuration = TimeSpan.Zero;\n\n                        _soundPlayer.Volume = innerVolume;\n                        _soundPlayer.Play();\n                        ((IPlatformSong)song).Strategy.PlayCount++;\n                        return;\n                }\n            }\n\n        }\n\n        public override void PlatformPause()\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                if (_soundPlayer != null)\n                    _soundPlayer.Pause();\n            }\n        }\n\n        public override void PlatformResume()\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                if (_soundPlayer != null)\n                    _soundPlayer.Resume();\n            }\n        }\n\n        public override void PlatformStop()\n        {\n            for (int i = 0; i < base.Queue.Count; i++)\n            {\n                Song queuedSong = base.Queue[i];\n\n                Song activeSong = base.Queue.ActiveSong;\n\n                if (_soundPlayer != null)\n                {\n                    _soundPlayer.Stop();\n                    this.DestroyPlayer();\n                }\n            }\n        }\n\n        protected override void PlatformClearQueue()\n        {\n            while (base.Queue.Count > 0)\n            {\n                Song song = base.Queue[0];\n\n                if (_soundPlayer != null)\n                {\n                    _soundPlayer.Stop();\n                    this.DestroyPlayer();\n                }\n\n                base.RemoveQueuedSong(song);\n            }\n\n            _numSongsInQueuePlayed = 0;\n            //base.ClearQueue();\n        }\n\n\n        struct BufferInfo\n        {\n            public readonly int SizeInBytes;\n            public readonly TimeSpan Duration;\n            public readonly int Marker;\n            public readonly bool IsLast;\n\n            public BufferInfo(int sizeInBytes, TimeSpan duration, int marker, bool isLast)\n            {\n                this.SizeInBytes = sizeInBytes;\n                this.Duration = duration;\n                this.Marker = marker;\n                this.IsLast = isLast;\n            }\n\n            public override string ToString()\n            {\n                return string.Format(\"{{ Marker: {0}, Size: {1}, Duration: {2} }}\", Marker, SizeInBytes, Duration);\n            }\n        }\n\n        internal unsafe void sfxi_BufferNeeded(object sender, EventArgs e)\n        {\n            DynamicSoundEffectInstance sfxi = (DynamicSoundEffectInstance)sender;\n\n            // Submit Buffer\n            int count = _reader.ReadSamples(_sampleBuffer, 0, _sampleBuffer.Length);\n            if (count > 0)\n            {\n                fixed (float* pSampleBuffer = _sampleBuffer)\n                fixed (byte*  pDataBuffer = _dataBuffer)\n                {\n                    ConcreteMediaPlayerStrategy.ConvertFloat32ToInt16(pSampleBuffer, (short*)pDataBuffer, count);\n                }\n\n                int sizeInBytes = count * sizeof(short);\n                sfxi.SubmitBuffer(_dataBuffer, 0, sizeInBytes);\n\n                //submit BufferInfo Marker\n                unchecked { _lastMarker = (_lastMarker+1); }\n                ConcreteDynamicSoundEffectInstance cdsei = ((IPlatformSoundEffectInstance)sfxi).GetStrategy<ConcreteDynamicSoundEffectInstance>();\n                cdsei.SubmitMarker(_lastMarker);\n\n                bool isLastBuffer = _reader.DecodedPosition == _reader.TotalSamples;\n                BufferInfo bufferInfo = new BufferInfo(sizeInBytes, _soundPlayer.GetSampleDuration(sizeInBytes), _lastMarker, isLastBuffer);\n                _bufferInfoMap.Add(_lastMarker, bufferInfo);\n            }\n\n            if (this.PlatformIsRepeating && base.Queue.Count == 1) // single song repeat\n            {\n                if (_reader.DecodedPosition == _reader.TotalSamples)\n                {\n                    _reader.DecodedPosition = 0; // reset reader\n                }\n            }\n        }\n\n        private void sfxi_Marker(object sender, int markerId)\n        {\n            BufferInfo currBufferInfo = _bufferInfoMap[markerId];\n            _bufferInfoMap.Remove(markerId);\n\n            _consumedBufferDuration += currBufferInfo.Duration;\n\n            if (currBufferInfo.IsLast) // song finished\n            {\n                if (PlatformIsRepeating && base.Queue.Count == 1) // single song repeat\n                {\n                    Song activeSong = this.Queue.ActiveSong;\n                    long decodedPosition = _reader.DecodedPosition;\n                    VorbisReader reader = _reader;\n\n                    ((IPlatformSong)activeSong).Strategy.PlayCount++;\n\n                    OnPlatformMediaStateChanged();\n                    // check if user changed the state during the MediaStateChanged event.\n                    if (this.State != MediaState.Playing\n                    ||  this.Queue.Count != 1\n                    ||  this.Queue.ActiveSong != activeSong\n                    ||  _reader != reader\n                    ||  decodedPosition != _reader.DecodedPosition)\n                        return;\n\n                    _consumedBufferDuration = TimeSpan.Zero;\n                    OnPlatformActiveSongChanged();\n                }\n                else\n                {\n                    base.OnSongFinishedPlaying();\n                }\n            }\n        }\n\n        internal void CreatePlayer(SongStrategy strategy)\n        {\n            if (_soundPlayer == null)\n            {\n                _reader = new VorbisReader(strategy.Filename);\n                strategy.Duration = _reader.TotalTime;\n\n                _soundPlayer = new DynamicSoundEffectInstance(_reader.SampleRate, (AudioChannels)_reader.Channels);\n                _soundPlayer.BufferNeeded += this.sfxi_BufferNeeded;\n                ConcreteDynamicSoundEffectInstance cdsei = ((IPlatformSoundEffectInstance)_soundPlayer).GetStrategy<ConcreteDynamicSoundEffectInstance>();\n                cdsei.Marker += this.sfxi_Marker;\n            }\n\n            int samples = (_reader.SampleRate * _reader.Channels) / 2;\n            if (_sampleBuffer == null || _sampleBuffer.Length != samples)\n            {\n                _sampleBuffer = new float[samples];\n                _dataBuffer = new byte[samples * sizeof(short)];\n            }\n        }\n\n        internal void DestroyPlayer()\n        {\n            if (_soundPlayer != null)\n            {\n                ConcreteDynamicSoundEffectInstance cdsei = ((IPlatformSoundEffectInstance)_soundPlayer).GetStrategy<ConcreteDynamicSoundEffectInstance>();\n                cdsei.Marker -= this.sfxi_Marker;\n                _soundPlayer.BufferNeeded -= this.sfxi_BufferNeeded;\n                _soundPlayer.Dispose();\n            }\n            _soundPlayer = null;\n\n            if (_reader != null)\n                _reader.Dispose();\n            _reader = null;\n        }\n\n        static unsafe void ConvertFloat32ToInt16(float* fbuffer, short* outBuffer, int samples)\n        {\n            for (int i = samples - 1; i >= 0; i--)\n            {\n                float val = fbuffer[i];\n                if (val >= -1f)\n                {\n                    if (val <= 1f)\n                        outBuffer[i] = (short)(val * short.MaxValue);\n                    else\n                        outBuffer[i] = short.MaxValue;\n                }\n                else\n                    outBuffer[i] = -short.MaxValue;\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_soundPlayer != null)\n                {\n                    ConcreteDynamicSoundEffectInstance cdsei = ((IPlatformSoundEffectInstance)_soundPlayer).GetStrategy<ConcreteDynamicSoundEffectInstance>();\n                    cdsei.Marker -= this.sfxi_Marker;\n                    _soundPlayer.BufferNeeded -= this.sfxi_BufferNeeded;\n                    _soundPlayer.Dispose();\n                }\n                _soundPlayer = null;\n\n                if (_reader != null)\n                    _reader.Dispose();\n                _reader = null;\n\n                _sampleBuffer = null;\n                _dataBuffer = null;\n\n                _bufferInfoMap = null;\n                _lastMarker = 0;\n                _consumedBufferDuration = TimeSpan.Zero;\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/DesktopGL/ConcreteSong.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteSongStrategy : SongStrategy\n    {\n        private Uri _streamSource;\n\n\n        internal Uri StreamSource { get { return _streamSource; } }\n\n\n        public override Album Album\n        {\n            get { return null; }\n        }\n\n        public override Artist Artist\n        {\n            get { return null; }\n        }\n\n        public override Genre Genre\n        {\n            get { return null; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { return base.Duration; }\n        }\n\n        public override bool IsProtected\n        {\n            get { return base.IsProtected; }\n        }\n\n        public override bool IsRated\n        {\n            get { return base.IsRated; }\n        }\n\n        public override string Filename\n        {\n            get { return StreamSource.OriginalString; }\n        }\n\n        public override string Name\n        {\n            get { return base.Name; }\n        }\n\n        public override int PlayCount\n        {\n            get { return base.PlayCount; }\n        }\n\n        public override int Rating\n        {\n            get { return base.Rating; }\n        }\n\n        public override int TrackNumber\n        {\n            get { return base.TrackNumber; }\n        }\n\n        internal ConcreteSongStrategy(string name, Uri streamSource)\n            : base()\n        {\n            this.Name = name;\n            this._streamSource = streamSource;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Media/DesktopGL/ConcreteVideo.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoStrategy : VideoStrategy\n    {\n\n        internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n            : base(graphicsDevice, fileName, duration)\n        {\n\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/DesktopGL/ConcreteVideoPlayer.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy\n    {\n        private Texture2D _lastFrame;\n\n        private DynamicSoundEffectInstance _soundPlayer;\n\n        public override MediaState State\n        {\n            get { return base.State; }\n            protected set { base.State = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override bool IsMuted\n        {\n            get { return base.IsMuted; }\n            set\n            {\n                base.IsMuted = value;\n                PlatformSetVolume();\n            }\n        }\n\n        public override TimeSpan PlayPosition\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n                PlatformSetVolume();\n            }\n        }\n\n        internal ConcreteVideoPlayerStrategy()\n        {\n\n        }\n\n        public override Texture2D PlatformGetTexture()\n        {\n            if (_lastFrame != null)\n            {\n                if (_lastFrame.Width != base.Video.Width || _lastFrame.Height != base.Video.Height)\n                {\n                    _lastFrame.Dispose();\n                    _lastFrame = null;\n                }\n            }\n            if (_lastFrame == null)\n                _lastFrame = new Texture2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, base.Video.Width, base.Video.Height, false, SurfaceFormat.Color);\n\n            throw new NotImplementedException();\n        }\n\n        protected override void PlatformUpdateState(ref MediaState state)\n        {\n            \n        }\n\n        public override void PlatformPlay(Video video)\n        {\n            base.Video = video;\n\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformPause()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformResume()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformStop()\n        {\n\n            throw new NotImplementedException();\n        }\n\n        private void PlatformSetVolume()\n        {\n           float volume = base.Volume;\n           if (IsMuted)\n                volume = 0.0f;\n\n           if (_soundPlayer != null)\n              _soundPlayer.Volume = volume;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_soundPlayer != null)\n                {\n                    _soundPlayer.Dispose();\n                    _soundPlayer = null;\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/MacOS/ConcreteMediaFactory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public sealed class ConcreteMediaFactory : MediaFactory\n    {\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy()\n        {\n            return new ConcreteMediaLibraryStrategy();\n        }\n\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource)\n        {\n            return new ConcreteMediaLibraryStrategy(mediaSource);\n        }\n\n        public override MediaPlayerStrategy CreateMediaPlayerStrategy()\n        {\n            return new ConcreteMediaPlayerStrategy();\n        }\n\n        public override SongStrategy CreateSongStrategy(string name, Uri streamSource)\n        {\n            return new ConcreteSongStrategy(name, streamSource);\n        }\n\n        public override VideoPlayerStrategy CreateVideoPlayerStrategy()\n        {\n            return new ConcreteVideoPlayerStrategy();\n        }\n\n        public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan)\n        {\n            return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan);\n        }\n\n        public override IList<MediaSource> GetAvailableMediaSources()\n        {\n            MediaSource[] result = { base.CreateMediaSource(\"DummpMediaSource\", MediaSourceType.LocalDevice) };\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/MacOS/ConcreteVideo.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoStrategy : VideoStrategy\n    {\n        internal VideoPlatformStream _videoPlatformStream;\n        \n        internal TimeSpan CurrentPosition\n        {\n            get { return new TimeSpan(_movie.CurrentTime.Value); }\n        }\n\n        internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n            : base(graphicsDevice, fileName, duration)\n        {\n            this._videoPlatformStream = new VideoPlatformStream(this.FileName);\n\n        }\n\n        internal VideoPlatformStream GetVideoPlatformStream()\n        {\n            return _videoPlatformStream;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_videoPlatformStream != null)\n                {\n                    _videoPlatformStream.Dispose();\n                    _videoPlatformStream = null;\n                }\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Platforms/Media/MacOS/ConcreteVideoPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform;\nusing Foundation;\nusing AVFoundation;\nusing AppKit;\nusing CoreAnimation;\nusing ObjCRuntime;\nusing RectF = CoreGraphics.CGRect;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy\n    {\n        NSSDLWindow nsWindow;\n        AVPlayerLayer layer;\n        NSView view;\n\n        public override MediaState State\n        {\n            get { return base.State; }\n            protected set { base.State = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override bool IsMuted\n        {\n            get { return base.IsMuted; }\n            set\n            {\n                base.IsMuted = value;\n                throw new NotImplementedException();\n            }\n        }\n\n        public override TimeSpan PlayPosition\n        {\n            get { return base.Video.CurrentPosition; }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n                if (base.Video != null)\n                    PlatformSetVolume();\n            }\n        }\n\n        internal ConcreteVideoPlayerStrategy()\n        {\n            Sdl.Window.SDL_SysWMinfo sys = new Sdl.Window.SDL_SysWMinfo();\n            Sdl.Window.GetWindowWMInfo(ConcreteGame.ConcreteGameInstance.Window.Handle, ref sys);\n            nsWindow = new NSSDLWindow(sys.window);\n        }\n\n        public override Texture2D PlatformGetTexture()\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void PlatformUpdateState(ref MediaState state)\n        {\n        }\n\n        public override void PlatformPlay(Video video)\n        {\n            base.Video = video;\n\n            layer = AVPlayerLayer.FromPlayer(base.Video.Player);\n            view = new NSView(nsWindow.ContentView.Frame);\n            view.WantsLayer = true;\n            view.Layer = layer;\n            layer.Frame = nsWindow.ContentView.Bounds;\n            nsWindow.ContentView.AddSubview(view);\n           \n            NSNotificationCenter.DefaultCenter.AddObserver(AVPlayerItem.DidPlayToEndTimeNotification,\n                                                           notification =>\n            {\n                Stop();\n\n                if (IsLooped)\n                    PlatformPlay();\n\n            });\n\n            base.Video.Volume = _volume;\n            base.Video.Player.Play();\n\n            State = MediaState.Playing;\n        }\n\n        public override void PlatformPause()\n        {\n            base.Video.Player.Pause();\n            State = MediaState.Paused;\n        }\n\n        public override void PlatformResume()\n        {\n            base.Video.Volume = _volume;\n            base.Video.Player.Play();\n            State = MediaState.Playing;\n        }\n        \n        public override void PlatformStop()\n        {\n            var movieView = base.Video.Player;\n            movieView.Pause();\n            movieView.Seek(CoreMedia.CMTime.Zero);\n\n            nsWindow.ContentView.WillRemoveSubview(view);\n            view.RemoveFromSuperview();\n            view.Dispose();\n            view = null;\n            layer.Dispose();\n            layer = null;\n\n            State = MediaState.Stopped;\n        }\n\n        private void PlatformSetVolume()\n        {\n            base.Video.Volume = _volume;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n    internal class NSSDLWindow : AppKit.NSWindow\n    {\n        public NSSDLWindow(IntPtr handle) : base(handle)\n        {\n        }\n    }\n\n    internal sealed class VideoPlatformStream : IDisposable\n    {\n        private AVPlayer _player;\n        private AVPlayerItem _movie;\n\n        internal AVPlayer Player { get { return _player; } }\n\n        internal float Volume\n        {\n            get { return Player.Volume; }\n            set\n            {\n                // TODO When Xamarain fix the set Volume mMovie.Volume = value;\n            }\n        }\n\n        internal VideoPlatformStream(string filename)\n        {\n            NSError err = new NSError();\n\n            _movie = AVPlayerItem.FromUrl(NSUrl.FromFilename(FileName));\n            _player = new AVPlayer(_movie);\n        }\n\n\n        #region IDisposable\n        ~VideoPlatformStream()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_player != null)\n                {\n                    _player.Dispose();\n                    _player = null;\n                }\n\n                if (_movie != null)\n                {\n                    _movie.Dispose();\n                    _movie = null;\n                }\n\n            }\n\n            //base.Dispose(disposing);\n\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Ref/ConcreteAlbum.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteAlbumStrategy : AlbumStrategy\n    {\n\n        public override string Name\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override Artist Artist\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override Genre Genre\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool HasArt\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override SongCollection Songs\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n\n        internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        public override Stream GetAlbumArt()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override Stream GetThumbnail()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Ref/ConcreteMediaFactory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public sealed class ConcreteMediaFactory : MediaFactory\n    {\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy()\n        {\n            return new ConcreteMediaLibraryStrategy();\n        }\n\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource)\n        {\n            return new ConcreteMediaLibraryStrategy(mediaSource);\n        }\n\n        public override MediaPlayerStrategy CreateMediaPlayerStrategy()\n        {\n            return new ConcreteMediaPlayerStrategy();\n        }\n\n        public override SongStrategy CreateSongStrategy(string name, Uri streamSource)\n        {\n            return new ConcreteSongStrategy(name, streamSource);\n        }\n\n        public override VideoPlayerStrategy CreateVideoPlayerStrategy()\n        {\n            return new ConcreteVideoPlayerStrategy();\n        }\n\n        public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan)\n        {\n            return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan);\n        }\n\n        public override IList<MediaSource> GetAvailableMediaSources()\n        {\n            MediaSource[] result = { base.CreateMediaSource(\"DummpMediaSource\", MediaSourceType.LocalDevice) };\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Ref/ConcreteMediaLibrary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy\n    {\n        public override MediaSource MediaSource\n        {\n            get { return base.MediaSource; }\n        }\n\n        public override AlbumCollection Albums\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override SongCollection Songs\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override PlaylistCollection Playlists\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        //public override ArtistCollection Artists\n        //{\n        //    get { return base.Artists; }\n        //}\n\n        //public override GenreCollection Genres\n        //{\n        //    get { return base.Genres; }\n        //}\n\n\n        internal ConcreteMediaLibraryStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteMediaLibraryStrategy(MediaSource mediaSource)\n            : base(mediaSource)\n        {\n            throw new NotSupportedException(\"Initializing from MediaSource is not supported\");\n        }\n\n        public override void Load(Action<int> progressCallback = null)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void SavePicture(string name, byte[] imageBuffer)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SavePicture(string name, Stream source)\n        {\n            throw new NotImplementedException();\n        }\n\n        \n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Ref/ConcreteMediaPlayer.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy\n    {\n\n        internal ConcreteMediaPlayerStrategy()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        #region Properties\n\n        public override float PlatformVolume\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool PlatformIsMuted\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool PlatformIsRepeating\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool PlatformIsShuffled\n        {\n            get { throw new PlatformNotSupportedException(); }\n            set { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool PlatformGameHasControl\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override TimeSpan PlatformPlayPosition\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        protected override bool PlatformUpdateState(ref MediaState state)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        #endregion\n\n        public override void PlatformPlaySong(Song song)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformPause()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformResume()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformStop()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Ref/ConcreteSong.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteSongStrategy : SongStrategy\n    {\n\n        internal ConcreteSongStrategy(string name, Uri streamSource)\n            : base()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override Album Album\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override Artist Artist\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override Genre Genre\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool IsProtected\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool IsRated\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override string Filename\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override string Name\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int PlayCount\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int Rating\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override int TrackNumber\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n            \n            //base.Dispose(disposing);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Media/Ref/ConcreteVideo.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoStrategy : VideoStrategy\n    {\n\n        internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n            : base(graphicsDevice, fileName, duration)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/Ref/ConcreteVideoPlayer.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy\n    {\n\n        public override MediaState State\n        {\n            get { return base.State; }\n            protected set { base.State = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set\n            {\n                base.IsLooped = value;\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n        public override bool IsMuted\n        {\n            get { return base.IsMuted; }\n            set\n            {\n                base.IsMuted = value;\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n        public override TimeSpan PlayPosition\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n                if (base.Video != null)\n                    PlatformSetVolume();\n            }\n        }\n\n        internal ConcreteVideoPlayerStrategy()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override Texture2D PlatformGetTexture()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void PlatformUpdateState(ref MediaState state)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformPlay(Video video)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformPause()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformResume()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void PlatformStop()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        private void PlatformSetVolume()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WME/ConcreteAlbum.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\nusing WinFileProperties = Windows.Storage.FileProperties;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteAlbumStrategy : AlbumStrategy\n    {\n        private string _name;\n        private Artist _artist;\n        private Genre _genre;\n        private SongCollection _songs;\n\n        private WinFileProperties.StorageItemThumbnail _thumbnail;\n\n\n        public override string Name\n        {\n            get { return this._name; }\n        }\n\n        public override Artist Artist\n        {\n            get { return this._artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return this._genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool HasArt\n        {\n            get { return this._thumbnail != null; }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return this._songs; }\n        }\n\n\n        internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection,\n                                     WinFileProperties.StorageItemThumbnail thumbnail)\n        {\n            this._name = name;\n            this._artist = artist;\n            this._genre = genre;\n            this._songs = songCollection;\n\n            this._thumbnail = thumbnail;\n        }\n\n\n        public override Stream GetAlbumArt()\n        {\n            if (this.HasArt)\n                return this._thumbnail.AsStream();\n            return null;\n        }\n\n        public override Stream GetThumbnail()\n        {\n            if (this.HasArt)\n                return this._thumbnail.AsStream();\n\n            return null;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (this._thumbnail != null)\n                    this._thumbnail.Dispose();\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WME/ConcreteMediaFactory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public sealed class ConcreteMediaFactory : MediaFactory\n    {\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy()\n        {\n            return new ConcreteMediaLibraryStrategy();\n        }\n\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource)\n        {\n            return new ConcreteMediaLibraryStrategy(mediaSource);\n        }\n\n        public override MediaPlayerStrategy CreateMediaPlayerStrategy()\n        {\n            return new ConcreteMediaPlayerStrategy();\n        }\n\n        public override SongStrategy CreateSongStrategy(string name, Uri streamSource)\n        {\n            return new ConcreteSongStrategy(name, streamSource);\n        }\n\n        public override VideoPlayerStrategy CreateVideoPlayerStrategy()\n        {\n            return new ConcreteVideoPlayerStrategy();\n        }\n\n        public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan)\n        {\n            return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan);\n        }\n\n        public override IList<MediaSource> GetAvailableMediaSources()\n        {\n            MediaSource[] result = { base.CreateMediaSource(\"DummpMediaSource\", MediaSourceType.LocalDevice) };\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WME/ConcreteMediaLibrary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Windows.Storage;\nusing WinFileProperties = Windows.Storage.FileProperties;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy\n    {\n        private static AlbumCollection _albumCollection;\n        private static SongCollection _songCollection;\n\n        private const string CacheFile = \"MediaLibrary.cache\";\n\n        private static StorageFolder _musicFolder;\n\n        public override MediaSource MediaSource\n        {\n            get { return base.MediaSource; }\n        }\n\n        public override AlbumCollection Albums\n        {\n            get { return _albumCollection; }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return _songCollection; }\n        }\n\n        public override PlaylistCollection Playlists\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        //public override ArtistCollection Artists\n        //{\n        //    get { return base.Artists; }\n        //}\n\n        //public override GenreCollection Genres\n        //{\n        //    get { return base.Genres; }\n        //}\n\n\n        internal ConcreteMediaLibraryStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteMediaLibraryStrategy(MediaSource mediaSource)\n            : base(mediaSource)\n        {\n            throw new NotSupportedException(\"Initializing from MediaSource is not supported\");\n        }\n\n        public override void Load(Action<int> progressCallback = null)\n        {\n            Task.Run(async () =>\n            {\n                if (_musicFolder == null)\n                {\n                    try\n                    {\n                        _musicFolder = KnownFolders.MusicLibrary;\n                    }\n                    catch (Exception e)\n                    {\n                        Debug.WriteLine(\"Failed to access Music Library: \" + e.Message);\n                        _albumCollection = base.CreateAlbumCollection(new List<Album>());\n                        _songCollection = base.CreateSongCollection(new List<Song>());\n                        return;\n                    }\n                }\n\n\n                List<StorageFile> files = new List<StorageFile>();\n                await this.GetAllFiles(_musicFolder, files);\n\n                List<Song> songList = new List<Song>();\n                List<Album> albumList = new List<Album>();\n\n                Dictionary<string,Artist> artists = new Dictionary<string, Artist>();\n                Dictionary<string,Album> albums = new Dictionary<string, Album>();\n                Dictionary<string,Genre> genres = new Dictionary<string, Genre>();\n\n                Dictionary<string, MusicProperties> cache = new Dictionary<string, MusicProperties>();\n\n                // Read cache\n                StorageFile cacheFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(CacheFile, CreationCollisionOption.OpenIfExists);\n                using (Stream baseStream = await cacheFile.OpenStreamForReadAsync())\n                using (BinaryReader stream = new BinaryReader(baseStream))\n                    try\n                    {\n                        for (; baseStream.Position < baseStream.Length;)\n                        {\n                            MusicProperties entry = MusicProperties.Deserialize(stream);\n                            cache.Add(entry.Path, entry);\n                        }\n                    }\n                    catch { }\n\n                // Write cache\n                cacheFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(CacheFile, CreationCollisionOption.ReplaceExisting);\n                using (BinaryWriter stream = new BinaryWriter(await cacheFile.OpenStreamForWriteAsync()))\n                {\n                    int prevProgress = 0;\n\n                    for (int i = 0; i < files.Count; i++)\n                    {\n                        StorageFile file = files[i];\n                        try\n                        {\n                            MusicProperties properties;\n                            if (!(cache.TryGetValue(file.Path, out properties) && properties.TryMatch(file)))\n                                properties = new MusicProperties(file);\n                            properties.Serialize(stream);\n\n                            if (string.IsNullOrWhiteSpace(properties.Title))\n                                continue;\n\n                            Artist artist;\n                            if (!artists.TryGetValue(properties.Artist, out artist))\n                            {\n                                artist = new Artist(properties.Artist);\n                                artists.Add(artist.Name, artist);\n                            }\n\n                            Artist albumArtist;\n                            if (!artists.TryGetValue(properties.AlbumArtist, out albumArtist))\n                            {\n                                albumArtist = new Artist(properties.AlbumArtist);\n                                artists.Add(albumArtist.Name, albumArtist);\n                            }\n\n                            Genre genre;\n                            if (!genres.TryGetValue(properties.Genre, out genre))\n                            {\n                                genre = new Genre(properties.Genre);\n                                genres.Add(genre.Name, genre);\n                            }\n\n                            Album album;\n                            if (!albums.TryGetValue(properties.Album, out album))\n                            {\n                                WinFileProperties.StorageItemThumbnail thumbnail = Task.Run(async () => await properties.File.GetThumbnailAsync(WinFileProperties.ThumbnailMode.MusicView, 300, WinFileProperties.ThumbnailOptions.ResizeThumbnail)).Result;\n                                AlbumStrategy albumStrategy = new ConcreteAlbumStrategy(properties.Album, albumArtist, genre, base.CreateSongCollection(new List<Song>()), thumbnail.Type == WinFileProperties.ThumbnailType.Image ? thumbnail : null);\n                                album = base.CreateAlbum(albumStrategy);\n                                albums.Add(album.Name, album);\n                                albumList.Add(album);\n                            }\n\n                            ConcreteSongStrategy songStrategy = new ConcreteSongStrategy();\n                            songStrategy.Album = album;\n                            songStrategy.Artist = artist;\n                            songStrategy.Genre = genre;\n                            songStrategy._musicProperties = properties;\n                            Song song = base.CreateSong(songStrategy);\n\n                            song.Album.Songs.Add(song);\n                            songList.Add(song);\n                        }\n                        catch (Exception e)\n                        {\n                            Debug.WriteLine(\"MediaLibrary exception: \" + e.Message);\n                        }\n\n                        int progress = 100 * i / files.Count;\n                        if (progress > prevProgress)\n                        {\n                            prevProgress = progress;\n                            if (progressCallback != null)\n                                progressCallback.Invoke(progress);\n                        }\n                    }\n                }\n\n                if (progressCallback != null)\n                    progressCallback.Invoke(100);\n\n                _albumCollection = base.CreateAlbumCollection(albumList);\n                _songCollection = base.CreateSongCollection(songList);\n            }).Wait();\n        }\n\n        public override void SavePicture(string name, byte[] imageBuffer)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SavePicture(string name, Stream source)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        private async Task GetAllFiles(StorageFolder storageFolder, List<StorageFile> musicFiles)\n        {\n            foreach (IStorageItem item in await storageFolder.GetItemsAsync())\n                if (item is StorageFile)\n                {\n                    StorageFile file = item as StorageFile;\n                    if (file.ContentType.StartsWith(\"audio\") && !file.ContentType.EndsWith(\"url\"))\n                        musicFiles.Add(file);\n                }\n                else\n                {\n                    StorageFolder folder = item as StorageFolder;\n                    await this.GetAllFiles(folder, musicFiles);\n                }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WME/ConcreteMediaPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Windows.ApplicationModel.Core;\nusing Windows.UI.Core;\nusing Microsoft.Xna.Framework.Media;\nusing SharpDX.Multimedia;\nusing MediaFoundation = SharpDX.MediaFoundation;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy\n    {\n        // RAYB: This needs to be turned back into a readonly.\n        private MediaFoundation.MediaEngine _mediaEngineEx;\n\n        private CoreDispatcher _dispatcher;\n\n        private enum SessionState { Stopped, Started, Paused }\n        private SessionState _sessionState = SessionState.Stopped;\n\n        internal ConcreteMediaPlayerStrategy()\n        {\n            MediaFoundation.MediaManager.Startup(true);\n            using (MediaFoundation.MediaEngineClassFactory factory = new MediaFoundation.MediaEngineClassFactory())\n            using (MediaFoundation.MediaEngineAttributes attributes = new MediaFoundation.MediaEngineAttributes { AudioCategory = AudioStreamCategory.GameMedia })\n            {\n                MediaFoundation.MediaEngineCreateFlags creationFlags = MediaFoundation.MediaEngineCreateFlags.AudioOnly;\n\n                MediaFoundation.MediaEngine mediaEngine = new MediaFoundation.MediaEngine(factory, attributes, creationFlags, MediaEngineExOnPlaybackEvent);\n                _mediaEngineEx = mediaEngine.QueryInterface<MediaFoundation.MediaEngineEx>();\n            }\n\n            _dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;\n        }\n\n        private void MediaEngineExOnPlaybackEvent(MediaFoundation.MediaEngineEvent mediaEvent, long param1, int param2)\n        {\n            if (mediaEvent == MediaFoundation.MediaEngineEvent.LoadedData)\n            {\n                if (_sessionState == SessionState.Started)\n                    _mediaEngineEx.Play();\n            }\n            if (mediaEvent == MediaFoundation.MediaEngineEvent.Ended)\n            {\n                _sessionState = SessionState.Stopped;\n\n                _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => base.OnSongFinishedPlaying()).AsTask();\n            }\n        }\n\n        #region Properties\n\n        public override float PlatformVolume\n        {\n            get { return base.PlatformVolume; }\n            set\n            {\n                base.PlatformVolume = value;\n\n                _mediaEngineEx.Volume = value;\n            }\n        }\n\n        public override bool PlatformIsMuted\n        {\n            get { return base.PlatformIsMuted; }\n            set\n            {\n                base.PlatformIsMuted = value;\n\n                _mediaEngineEx.Muted = value;\n            }\n        }\n\n        public override bool PlatformIsRepeating\n        {\n            get { return base.PlatformIsRepeating; }\n            set\n            {\n                base.PlatformIsRepeating = value;\n\n                _mediaEngineEx.Loop = value;\n            }\n        }\n\n        public override bool PlatformIsShuffled\n        {\n            get { return base.PlatformIsShuffled; }\n            set { base.PlatformIsShuffled = value; }\n        }\n\n        public override bool PlatformGameHasControl\n        {\n            get { return true; }\n        }\n\n        public override TimeSpan PlatformPlayPosition\n        {\n            get { return TimeSpan.FromSeconds(_mediaEngineEx.CurrentTime); }\n        }\n        protected override bool PlatformUpdateState(ref MediaState state)\n        {\n            return false;\n        }\n\n        #endregion\n\n        public override void PlatformPlaySong(Song song)\n        {\n            _mediaEngineEx.Source = ((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().StreamSource.OriginalString;\n            _mediaEngineEx.Load();\n            _sessionState = SessionState.Started;\n\n            //We start playing when we get a LoadedData event in MediaEngineExOnPlaybackEvent\n        }\n\n        public override void PlatformPause()\n        {\n            if (_sessionState == SessionState.Started)\n            {\n                _sessionState = SessionState.Paused;\n                _mediaEngineEx.Pause();\n            }\n        }\n\n        public override void PlatformResume()\n        {\n            if (_sessionState == SessionState.Paused)\n            {\n                _mediaEngineEx.Play();\n            }\n        }\n\n        public override void PlatformStop()\n        {\n            if (_sessionState != SessionState.Stopped)\n            {\n                _mediaEngineEx.Source = null;\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WME/ConcreteSong.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Windows.Storage;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteSongStrategy : SongStrategy\n    {\n        private Uri _streamSource;\n        internal MusicProperties _musicProperties;\n\n        internal Uri StreamSource { get { return _streamSource; } }\n\n        [CLSCompliant(false)]\n        public StorageFile StorageFile\n        {\n            get { return this._musicProperties.File; }\n        }\n\n        internal ConcreteSongStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteSongStrategy(string name, Uri streamSource)\n            : base()\n        {\n            this.Name = name;\n            this._streamSource = streamSource;\n        }\n\n        public override Album Album\n        {\n            get { return base.Album; }\n        }\n\n        public override Artist Artist\n        {\n            get { return base.Artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return base.Genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get\n            {\n                if (this._musicProperties != null)\n                    return this._musicProperties.Duration;\n\n                return base.Duration;\n            }\n        }\n\n        public override bool IsProtected\n        {\n            get\n            {\n                if (this._musicProperties != null)\n                    return this._musicProperties.IsProtected;\n\n                return base.IsProtected;\n            }\n        }\n\n        public override bool IsRated\n        {\n            get\n            {\n                if (this._musicProperties != null)\n                    return this._musicProperties.Rating != 0;\n\n                return base.IsRated;\n            }\n        }\n\n        public override string Filename\n        {\n            get\n            {\n                if (this._musicProperties != null)\n                    return this._musicProperties.Title;\n\n                return StreamSource.OriginalString;\n            }\n        }\n\n        public override string Name\n        {\n            get\n            {\n                if (this._musicProperties != null)\n                    return this._musicProperties.Title;\n\n                return base.Name;\n            }\n        }\n\n        public override int PlayCount\n        {\n            get { return base.PlayCount; }\n        }\n\n        public override int Rating\n        {\n            get\n            {\n                if (this._musicProperties != null)\n                    return this._musicProperties.Rating;\n\n                return base.Rating;\n            }\n        }\n\n        public override int TrackNumber\n        {\n            get\n            {\n                if (this._musicProperties != null)\n                    return this._musicProperties.TrackNumber;\n\n                return base.TrackNumber;\n            }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Media/WME/ConcreteVideo.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoStrategy : VideoStrategy\n    {\n\n        internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n            : base(graphicsDevice, fileName, duration)\n        {\n\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WME/ConcreteVideoPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform.Graphics;\nusing DX = SharpDX;\nusing DXGI = SharpDX.DXGI;\nusing DXRaw = SharpDX.Mathematics.Interop;\nusing MediaFoundation = SharpDX.MediaFoundation;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy\n    {\n        MediaFoundation.DXGIDeviceManager _devManager;\n        private MediaFoundation.MediaEngine _mediaEngine;\n\n        private Texture2D _lastFrame;\n\n        public override MediaState State\n        {\n            get { return base.State; }\n            protected set { base.State = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override bool IsMuted\n        {\n            get { return base.IsMuted; }\n            set\n            {\n                base.IsMuted = value;\n                throw new NotImplementedException();\n            }\n        }\n\n        public override TimeSpan PlayPosition\n        {\n            get { return TimeSpan.FromSeconds(_mediaEngine.CurrentTime); }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n                if (base.Video != null)\n                    _mediaEngine.Volume = value;\n            }\n        }\n\n        internal ConcreteVideoPlayerStrategy()\n        {\n            MediaFoundation.MediaManager.Startup();\n\n            _devManager = new MediaFoundation.DXGIDeviceManager();\n            _devManager.ResetDevice(((IPlatformGraphicsDevice)ConcreteGame.ConcreteGameInstance.GraphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>().D3DDevice);\n\n            using (MediaFoundation.MediaEngineClassFactory factory = new MediaFoundation.MediaEngineClassFactory())\n            using (MediaFoundation.MediaEngineAttributes attributes = new MediaFoundation.MediaEngineAttributes\n            {\n                VideoOutputFormat = (int)DXGI.Format.B8G8R8A8_UNorm,\n                DxgiManager = _devManager\n            })\n            {\n                _mediaEngine = new MediaFoundation.MediaEngine(factory, attributes, MediaFoundation.MediaEngineCreateFlags.None, OnMediaEngineEvent);\n            }\n        }\n\n        #region IAsyncCallback\n\n        private void OnMediaEngineEvent(MediaFoundation.MediaEngineEvent mediaEvent, long param1, int param2)\n        {\n            if (!_mediaEngine.HasVideo())\n                return;\n\n            switch (mediaEvent)\n            {\n                case MediaFoundation.MediaEngineEvent.Play:\n                    break;\n                \n                case MediaFoundation.MediaEngineEvent.Ended:\n                    if (IsLooped)\n                    {\n                        PlatformPlay(base.Video);\n                        return;\n                    }\n                    State = MediaState.Stopped;\n                    break;\n            }\n        }\n\n        #endregion IAsyncCallback\n\n        public override Texture2D PlatformGetTexture()\n        {\n            if (_lastFrame != null)\n            {\n                if (_lastFrame.Width != base.Video.Width || _lastFrame.Height != base.Video.Height)\n                {\n                    _lastFrame.Dispose();\n                    _lastFrame = null;\n                }\n            }\n            if (_lastFrame == null)\n                _lastFrame = new RenderTarget2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, base.Video.Width, base.Video.Height, false, SurfaceFormat.Bgra32, DepthFormat.None);\n\n\n            if (base.State == MediaState.Playing)\n            {\n                long pts;\n                if (_mediaEngine.HasVideo() && _mediaEngine.OnVideoStreamTick(out pts) && _mediaEngine.ReadyState >= 2)\n                {\n                    DXRaw.RawRectangle region = new DXRaw.RawRectangle(0, 0, base.Video.Width, base.Video.Height);\n                    DX.ComObject dstSurfRef = (DX.ComObject)_lastFrame.GetD3D11Resource();\n                    _mediaEngine.TransferVideoFrame(dstSurfRef, null, region, null);\n                }\n            }\n\n            return _lastFrame;\n        }\n\n        protected override void PlatformUpdateState(ref MediaState state)\n        {\n        }\n\n        public override void PlatformPlay(Video video)\n        {\n            base.Video = video;\n\n            string assetsLocationFullPath = ((ITitleContainer)TitleContainer.Current).Location;\n            _mediaEngine.Source = System.IO.Path.Combine(assetsLocationFullPath, ((IPlatformVideo)base.Video).Strategy.FileName);\n            _mediaEngine.Play();\n\n            State = MediaState.Playing;\n        }\n\n        public override void PlatformPause()\n        {\n            _mediaEngine.Pause();\n            State = MediaState.Paused;\n        }\n\n        public override void PlatformResume()\n        {\n            _mediaEngine.Play();\n            State = MediaState.Playing;\n        }\n\n        public override void PlatformStop()\n        {\n            _mediaEngine.Pause();\n            _mediaEngine.CurrentTime = 0.0;\n\n            State = MediaState.Stopped;\n        }\n\n        private void PlatformSetVolume()\n        {\n            _mediaEngine.Volume = base.Volume;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WME/MusicProperties.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Windows.Storage;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    class MusicProperties\n    {\n        public StorageFile File { get; private set; }\n        public string Path { get; private set; }\n        public DateTimeOffset DateCreated { get; private set; }\n\n        public string Album { get; private set; }\n        public string AlbumArtist { get; private set; }\n        public string Artist { get; private set; }\n        public TimeSpan Duration { get; private set; }\n        public string Genre { get; private set; }\n        public bool IsProtected { get; private set; }\n        public int Rating { get; private set; }\n        public string Title { get; private set; }\n        public int TrackNumber { get; private set; }\n\n        private MusicProperties() { }\n\n        public MusicProperties(StorageFile file)\n        {\n            this.File = file;\n            this.Path = this.File.Path;\n            this.DateCreated = this.File.DateCreated;\n\n            IDictionary<string,object> properties = Task.Run(async () => await file.Properties.RetrievePropertiesAsync(new String[]\n                {\n                    \"System.Music.AlbumTitle\",\n                    \"System.Music.AlbumArtist\",\n                    \"System.Music.Artist\",\n                    \"System.Media.Duration\",\n                    \"System.Music.Genre\",\n                    \"System.DRM.IsProtected\",\n                    \"System.Rating\",\n                    \"System.Title\",\n                    \"System.Music.TrackNumber\"\n                })).Result;\n\n            object property;\n            this.Album = (properties.TryGetValue(\"System.Music.AlbumTitle\", out property) ? (string)property : (string)null) ?? \"\";\n            this.Artist = (properties.TryGetValue(\"System.Music.Artist\", out property) ? ((string[])property)[0] : (string)null) ?? \"Unknown Artist\";\n            this.AlbumArtist = (properties.TryGetValue(\"System.Music.AlbumArtist\", out property) ? (string)property : (string)null) ?? this.Artist;\n            this.Duration = properties.TryGetValue(\"System.Media.Duration\", out property) ? new TimeSpan((long)(ulong)property) : TimeSpan.Zero;\n            this.Genre = (properties.TryGetValue(\"System.Music.Genre\", out property) ? ((string[])property)[0] : (string)null) ?? \"\";\n            this.IsProtected = properties.TryGetValue(\"System.DRM.IsProtected\", out property) ? (bool)property : false;\n            this.Rating = properties.TryGetValue(\"System.Rating\", out property) ? (int)(uint)property : 0;\n            this.Title = (properties.TryGetValue(\"System.Title\", out property) ? (string)property : (string)null) ?? \"\";\n            this.TrackNumber = properties.TryGetValue(\"System.Music.TrackNumber\", out property) ? (int)(uint)property : 0;\n        }\n\n        public bool TryMatch(StorageFile file)\n        {\n            if (file != null && file.Path == this.Path && file.DateCreated == this.DateCreated)\n            {\n                this.File = file;\n                return true;\n            }\n\n            return false;\n        }\n\n        public static MusicProperties Deserialize(BinaryReader stream)\n        {\n            MusicProperties instance = new MusicProperties();\n            instance.Path = stream.ReadString();\n            instance.DateCreated = new DateTimeOffset(stream.ReadInt64(), new TimeSpan(stream.ReadInt64()));\n\n            instance.Album = stream.ReadString();\n            instance.AlbumArtist = stream.ReadString();\n            instance.Artist = stream.ReadString();\n            instance.Duration = new TimeSpan(stream.ReadInt64());\n            instance.Genre = stream.ReadString();\n            instance.IsProtected = stream.ReadBoolean();\n            instance.Rating = stream.ReadInt32();\n            instance.Title = stream.ReadString();\n            instance.TrackNumber = stream.ReadInt32();\n\n            return instance;\n        }\n\n        public void Serialize(BinaryWriter stream)\n        {\n            stream.Write(this.Path);\n            stream.Write(this.DateCreated.Ticks);\n            stream.Write(this.DateCreated.Offset.Ticks);\n\n            stream.Write(this.Album);\n            stream.Write(this.AlbumArtist);\n            stream.Write(this.Artist);\n            stream.Write(this.Duration.Ticks);\n            stream.Write(this.Genre);\n            stream.Write(this.IsProtected);\n            stream.Write(this.Rating);\n            stream.Write(this.Title);\n            stream.Write(this.TrackNumber);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WMS/ConcreteAlbum.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteAlbumStrategy : AlbumStrategy\n    {\n        private string _name;\n        private Artist _artist;\n        private Genre _genre;\n        private SongCollection _songs;\n\n\n        public override string Name\n        {\n            get { return this._name; }\n        }\n\n        public override Artist Artist\n        {\n            get { return this._artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return this._genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool HasArt\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return this._songs; }\n        }\n\n\n        internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection)\n        {\n            this._name = name;\n            this._artist = artist;\n            this._genre = genre;\n            this._songs = songCollection;\n        }\n\n\n        public override Stream GetAlbumArt()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Stream GetThumbnail()\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WMS/ConcreteMediaFactory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public sealed class ConcreteMediaFactory : MediaFactory\n    {\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy()\n        {\n            return new ConcreteMediaLibraryStrategy();\n        }\n\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource)\n        {\n            return new ConcreteMediaLibraryStrategy(mediaSource);\n        }\n\n        public override MediaPlayerStrategy CreateMediaPlayerStrategy()\n        {\n            return new ConcreteMediaPlayerStrategy();\n        }\n\n        public override SongStrategy CreateSongStrategy(string name, Uri streamSource)\n        {\n            return new ConcreteSongStrategy(name, streamSource);\n        }\n\n        public override VideoPlayerStrategy CreateVideoPlayerStrategy()\n        {\n            return new ConcreteVideoPlayerStrategy();\n        }\n\n        public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan)\n        {\n            return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan);\n        }\n\n        public override IList<MediaSource> GetAvailableMediaSources()\n        {\n            MediaSource[] result = { base.CreateMediaSource(\"DummpMediaSource\", MediaSourceType.LocalDevice) };\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WMS/ConcreteMediaLibrary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy\n    {\n        public override MediaSource MediaSource\n        {\n            get { return base.MediaSource; }\n        }\n\n        public override AlbumCollection Albums\n        {\n            get { return null; }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return null; }\n        }\n\n        public override PlaylistCollection Playlists\n        {\n            get { return null; }\n        }\n\n        //public override ArtistCollection Artists\n        //{\n        //    get { return base.Artists; }\n        //}\n\n        //public override GenreCollection Genres\n        //{\n        //    get { return base.Genres; }\n        //}\n\n\n        internal ConcreteMediaLibraryStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteMediaLibraryStrategy(MediaSource mediaSource)\n            : base(mediaSource)\n        {\n            throw new NotSupportedException(\"Initializing from MediaSource is not supported\");\n        }\n\n        public override void Load(Action<int> progressCallback = null)\n        {\n            \n        }\n\n        public override void SavePicture(string name, byte[] imageBuffer)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SavePicture(string name, Stream source)\n        {\n            throw new NotImplementedException();\n        }\n        \n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WMS/ConcreteMediaPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework.Media;\nusing SharpDX.Win32;\nusing DX = SharpDX;\nusing DXRaw = SharpDX.Mathematics.Interop;\nusing MediaFoundation = SharpDX.MediaFoundation;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy\n    {\n        private MediaFoundation.MediaSession _session;\n        private MediaFoundation.AudioStreamVolume _volumeController;\n        private readonly object _volumeLock = new object();\n        private MediaFoundation.PresentationClock _clock;\n\n        private Song _nextSong;\n        private Song _currentSong;\n\n        private enum SessionState { Stopped, Stopping, Started, Paused, Ended }\n        private SessionState _sessionState = SessionState.Stopped;\n\n        private Guid _audioStreamVolumeGuid;\n\n        private readonly Variant _positionCurrent = new Variant();\n        private readonly Variant _positionBeginning = new Variant { ElementType = VariantElementType.Long, Value = 0L };\n\n        private Callback _callback;\n\n        internal sealed class Callback : MediaFoundation.AsyncCallbackBase\n        {\n            private readonly ConcreteMediaPlayerStrategy _player;\n\n            public Callback(ConcreteMediaPlayerStrategy concreteMediaPlayer)\n            {\n                this._player = concreteMediaPlayer;\n            }\n\n            public override void Invoke(MediaFoundation.AsyncResult asyncResult)\n            {\n                _player.Invoke(asyncResult);\n            }\n        }\n\n\n        internal ConcreteMediaPlayerStrategy()\n        {\n            // The GUID is specified in a GuidAttribute attached to the class\n            _audioStreamVolumeGuid = Guid.Parse(((GuidAttribute)typeof(MediaFoundation.AudioStreamVolume).GetCustomAttributes(typeof(GuidAttribute), false)[0]).Value);\n\n            MediaFoundation.MediaManager.Startup(true);\n            MediaFoundation.MediaFactory.CreateMediaSession(null, out _session);\n\n            _callback = new Callback(this);\n            _session.BeginGetEvent(_callback, null);\n\n            _clock = _session.Clock.QueryInterface<MediaFoundation.PresentationClock>();\n        }\n\n        #region IAsyncCallback\n\n        internal void Invoke(MediaFoundation.AsyncResult asyncResult)\n        {\n            using (MediaFoundation.MediaEvent mediaEvent = _session.EndGetEvent(asyncResult))\n            {\n                switch (mediaEvent.TypeInfo)\n                {\n                    case MediaFoundation.MediaEventTypes.SessionTopologySet:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionTopologyStatus:\n                        if (mediaEvent.Get(MediaFoundation.EventAttributeKeys.TopologyStatus) == MediaFoundation.TopologyStatus.Ready)\n                            OnTopologyReady();\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionNotifyPresentationTime:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionStarted:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionEnded:\n                        _sessionState = SessionState.Ended;\n                        base.OnSongFinishedPlaying();\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionStopped:\n                        OnSessionStopped();\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionCapabilitiesChanged:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.EndOfPresentation:\n                        break;\n                }\n\n                IDisposable evValue = mediaEvent.Value.Value as IDisposable;\n                if (evValue != null)\n                    evValue.Dispose();\n            }\n\n            _session.BeginGetEvent(_callback, null);\n        }\n\n        #endregion IAsyncCallback\n\n        #region Properties\n\n        public override float PlatformVolume\n        {\n            get { return base.PlatformVolume; }\n            set\n            {\n                base.PlatformVolume = value;\n\n                SetChannelVolumes();\n            }\n        }\n\n        public override bool PlatformIsMuted\n        {\n            get { return base.PlatformIsMuted; }\n            set\n            {\n                base.PlatformIsMuted = value;\n\n                SetChannelVolumes();\n            }\n        }\n\n        public override bool PlatformIsRepeating\n        {\n            get { return base.PlatformIsRepeating; }\n            set\n            {\n                base.PlatformIsRepeating = value;\n            }\n        }\n\n        public override bool PlatformIsShuffled\n        {\n            get { return base.PlatformIsShuffled; }\n            set { base.PlatformIsShuffled = value; }\n        }\n\n        public override bool PlatformGameHasControl\n        {\n            get { return true; }\n        }\n\n        public override TimeSpan PlatformPlayPosition\n        {\n            get\n            {\n                SessionState sessionState = _sessionState;\n                switch (sessionState)\n                {\n                    case SessionState.Started:\n                        return TimeSpan.Zero;\n\n                    case SessionState.Paused:\n                        return TimeSpan.Zero;\n\n                    case SessionState.Stopping:\n                    case SessionState.Stopped:\n                        {\n                            try\n                            {\n                                return TimeSpan.FromTicks(_clock.Time);\n                            }\n                            catch (DX.SharpDXException)\n                            {\n                                // The presentation clock is most likely not quite ready yet\n                                return TimeSpan.Zero;\n                            }\n                        }\n\n                    case SessionState.Ended:\n                        return TimeSpan.Zero;\n\n                    default:\n                        throw new InvalidOperationException();\n                }\n            }\n        }\n\n        protected override bool PlatformUpdateState(ref MediaState state)\n        {\n            return false;\n        }\n\n        #endregion\n\n        private void SetChannelVolumes()\n        {\n            lock (_volumeLock)\n            {\n                if (_volumeController == null)\n                    return;\n\n                float volume = base.PlatformIsMuted ? 0f : base.PlatformVolume;\n                for (int i = 0; i < _volumeController.ChannelCount; i++)\n                {\n                    _volumeController.SetChannelVolume(i, volume);\n                }\n            }\n        }\n\n        public override void PlatformPlaySong(Song song)\n        {\n            SessionState sessionState = _sessionState;\n            switch (sessionState)\n            {\n                case SessionState.Started:\n                    {\n                        if (_currentSong == song)\n                        {\n                            _sessionState = SessionState.Started;\n                            _session.Start(null, _positionBeginning);\n                        }\n                        else\n                        {\n                            // The new song will be started after the SessionStopped event is received\n                            _nextSong = song;\n                            // The session needs to be stopped to reset the play position\n                            _sessionState = SessionState.Stopping;\n                            _session.Stop();\n                        }\n                    }\n                    break;\n\n                case SessionState.Paused:\n                    {\n                        if (_currentSong == song)\n                        {\n                            _sessionState = SessionState.Started;\n                            _session.Start(null, _positionBeginning);\n                        }\n                        else\n                        {\n                            // The new song will be started after the SessionStopped event is received\n                            _nextSong = song;\n                            // The session needs to be stopped to reset the play position\n                            _sessionState = SessionState.Stopping;\n                            _session.Stop();\n                        }\n                    }\n                    break;\n\n                case SessionState.Stopping:\n                    {\n                        // The song will be started after the SessionStopped event is received\n                        _nextSong = song;\n                    }\n                    break;\n\n                case SessionState.Stopped:\n                    {\n                        if (_currentSong != song)\n                            StartNewSong(song);\n                        _sessionState = SessionState.Started;\n                        _session.Start(null, _positionBeginning);\n                    }\n                    break;\n\n                case SessionState.Ended:\n                    {\n                        if (_currentSong == song)\n                        {\n                            _sessionState = SessionState.Started;\n                            _session.Start(null, _positionBeginning);\n                        }\n                        else\n                        {\n                            // The new song will be started after the SessionStopped event is received\n                            _nextSong = song;\n                            // The session needs to be stopped to reset the play position\n                            _sessionState = SessionState.Stopping;\n                            // The play position needs to be reset before stopping otherwise the next song may not start playing\n                            _session.Start(null, _positionBeginning);\n                            _session.Stop();\n                        }\n                    }\n                    break;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        public override void PlatformPause()\n        {\n            SessionState sessionState = _sessionState;\n            switch (sessionState)\n            {\n                case SessionState.Started:\n                    {\n                        _sessionState = SessionState.Paused;\n                        _session.Pause();\n                    }\n                    break;\n\n                case SessionState.Paused:\n                    break;\n\n                case SessionState.Stopping:\n                    break;\n\n                case SessionState.Stopped:\n                    break;\n\n                case SessionState.Ended:\n                    break;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        public override void PlatformResume()\n        {\n            SessionState sessionState = _sessionState;\n            switch (sessionState)\n            {\n                case SessionState.Started:\n                    break;\n\n                case SessionState.Paused:\n                    {\n                        _sessionState = SessionState.Started;\n                        _session.Start(null, _positionCurrent);\n                    }\n                    break;\n\n                case SessionState.Stopping:\n                    break;\n\n                case SessionState.Stopped:\n                    break;\n\n                case SessionState.Ended:\n                    break;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        public override void PlatformStop()\n        {\n            SessionState sessionState = _sessionState;\n            switch (sessionState)\n            {\n                case SessionState.Started:\n                    {\n                        _sessionState = SessionState.Stopping;\n                        _session.Stop();\n                    }\n                    break;\n\n                case SessionState.Paused:\n                    {\n                        _sessionState = SessionState.Stopping;\n                        _session.Stop();\n                    }\n                    break;\n\n                case SessionState.Stopping:\n                    {\n                    }\n                    break;\n\n                case SessionState.Stopped:\n                    {\n                    }\n                    break;\n\n                case SessionState.Ended:\n                    {\n                        _sessionState = SessionState.Stopping;\n                        // The play position needs to be reset before stopping otherwise the next song may not start playing\n                        _session.Start(null, _positionBeginning);\n                        _session.Stop();\n                    }\n                    break;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        private void StartNewSong(Song song)\n        {\n            lock (_volumeLock)\n            {\n                if (_volumeController != null)\n                {\n                    _volumeController.Dispose();\n                    _volumeController = null;\n                }\n            }\n\n            _currentSong = song;\n            MediaPlatformStream mediaPlatformStream = ((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n           _session.SetTopology(MediaFoundation.SessionSetTopologyFlags.Immediate, mediaPlatformStream.Topology);\n\n            // The volume service won't be available until the session topology\n            // is ready, so we now need to wait for the event indicating this\n        }\n\n        private void OnTopologyReady()\n        {\n            lock (_volumeLock)\n            {\n                IntPtr volumeObjectPtr;\n                MediaFoundation.MediaFactory.GetService(_session, MediaFoundation.MediaServiceKeys.StreamVolume, _audioStreamVolumeGuid, out volumeObjectPtr);\n                _volumeController = DX.CppObject.FromPointer<MediaFoundation.AudioStreamVolume>(volumeObjectPtr);\n            }\n\n            SetChannelVolumes();\n        }\n\n        private void OnSessionStopped()\n        {\n            _sessionState = SessionState.Stopped;\n            if (_nextSong != null)\n            {\n                if (_nextSong != _currentSong)\n                    StartNewSong(_nextSong);\n                _sessionState = SessionState.Started;\n                _session.Start(null, _positionBeginning);\n\n                _nextSong = null;\n            }\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            MediaFoundation.MediaManager.Shutdown();\n\n            base.Dispose(disposing);\n        }\n    }\n\n    internal sealed class MediaPlatformStream : IDisposable\n    {\n        private MediaFoundation.Topology _topology;\n\n        internal MediaFoundation.Topology Topology { get { return _topology; } }\n\n        internal MediaPlatformStream(Uri streamSource)\n        {\n            MediaFoundation.MediaManager.Startup(true);\n            this._topology = CreateTopology(streamSource);\n        }\n\n        private MediaFoundation.Topology CreateTopology(Uri streamSource)\n        {\n            MediaFoundation.Topology topology;\n            MediaFoundation.MediaFactory.CreateTopology(out topology);\n\n            SharpDX.MediaFoundation.MediaSource mediaSource;\n            {\n                string filename = streamSource.OriginalString;\n\n                MediaFoundation.SourceResolver resolver = new MediaFoundation.SourceResolver();\n                DX.ComObject source = (DX.ComObject)resolver.CreateObjectFromURL(filename, MediaFoundation.SourceResolverFlags.MediaSource);\n                mediaSource = source.QueryInterface<SharpDX.MediaFoundation.MediaSource>();\n                resolver.Dispose();\n                source.Dispose();\n            }\n\n            MediaFoundation.PresentationDescriptor presDesc;\n            mediaSource.CreatePresentationDescriptor(out presDesc);\n\n            for (int i = 0; i < presDesc.StreamDescriptorCount; i++)\n            {\n                DXRaw.RawBool selected;\n                MediaFoundation.StreamDescriptor desc;\n                presDesc.GetStreamDescriptorByIndex(i, out selected, out desc);\n\n                if (selected)\n                {\n                    MediaFoundation.TopologyNode sourceNode;\n                    MediaFoundation.MediaFactory.CreateTopologyNode(MediaFoundation.TopologyType.SourceStreamNode, out sourceNode);\n\n                    sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.Source, mediaSource);\n                    sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.PresentationDescriptor, presDesc);\n                    sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.StreamDescriptor, desc);\n\n                    MediaFoundation.TopologyNode outputNode;\n                    MediaFoundation.MediaFactory.CreateTopologyNode(MediaFoundation.TopologyType.OutputNode, out outputNode);\n\n                    var typeHandler = desc.MediaTypeHandler;\n                    Guid majorType = typeHandler.MajorType;\n                    if (majorType != MediaFoundation.MediaTypeGuids.Audio)\n                        throw new NotSupportedException(\"The song contains video data!\");\n\n                    MediaFoundation.Activate activate;\n                    MediaFoundation.MediaFactory.CreateAudioRendererActivate(out activate);\n                    outputNode.Object = activate;\n\n                    topology.AddNode(sourceNode);\n                    topology.AddNode(outputNode);\n                    sourceNode.ConnectOutput(0, outputNode, 0);\n\n                    sourceNode.Dispose();\n                    outputNode.Dispose();\n                    typeHandler.Dispose();\n                    activate.Dispose();\n                }\n\n                desc.Dispose();\n            }\n\n            presDesc.Dispose();\n            mediaSource.Dispose();\n\n            return topology;\n        }\n\n\n        #region IDisposable\n        ~MediaPlatformStream()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_topology != null)\n                {\n                    _topology.Dispose();\n                    _topology = null;\n                }\n            }\n\n            MediaFoundation.MediaManager.Shutdown();\n\n            //base.Dispose(disposing);\n\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WMS/ConcreteSong.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteSongStrategy : SongStrategy\n    {\n        internal MediaPlatformStream _mediaPlatformStream;\n\n        private Uri _streamSource;\n\n        internal Uri StreamSource { get { return _streamSource; } }\n\n\n\n        internal ConcreteSongStrategy(string name, Uri streamSource)\n            : base()\n        {\n            this.Name = name;\n            this._streamSource = streamSource;\n\n            this._mediaPlatformStream = new MediaPlatformStream(this._streamSource);\n        }\n\n        internal MediaPlatformStream GetMediaPlatformStream()\n        {\n            return _mediaPlatformStream;\n        }\n\n\n        public override Album Album\n        {\n            get { return null; }\n        }\n\n        public override Artist Artist\n        {\n            get { return null; }\n        }\n\n        public override Genre Genre\n        {\n            get { return null; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { return base.Duration; }\n        }\n\n        public override bool IsProtected\n        {\n            get { return base.IsProtected; }\n        }\n\n        public override bool IsRated\n        {\n            get { return base.IsRated; }\n        }\n\n        public override string Filename\n        {\n            get { return StreamSource.OriginalString; }\n        }\n\n        public override string Name\n        {\n            get { return base.Name; }\n        }\n\n        public override int PlayCount\n        {\n            get { return base.PlayCount; }\n        }\n\n        public override int Rating\n        {\n            get { return base.Rating; }\n        }\n\n        public override int TrackNumber\n        {\n            get { return base.TrackNumber; }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_mediaPlatformStream != null)\n                {\n                    _mediaPlatformStream.Dispose();\n                    _mediaPlatformStream = null;\n                }\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n\n}\n\n"
  },
  {
    "path": "Platforms/Media/WMS/ConcreteVideo.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoStrategy : VideoStrategy\n    {\n        internal VideoPlatformStream _videoPlatformStream;\n\n        internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n            : base(graphicsDevice, fileName, duration)\n        {\n\n            this._videoPlatformStream = new VideoPlatformStream(this.FileName);\n        }\n\n        internal VideoPlatformStream GetVideoPlatformStream()\n        {\n            return _videoPlatformStream;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_videoPlatformStream != null)\n                {\n                    _videoPlatformStream.Dispose();\n                    _videoPlatformStream = null;\n                }\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WMS/ConcreteVideoPlayer.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Diagnostics;\nusing System.Threading;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\nusing DX = SharpDX;\nusing SharpDX.Win32;\nusing DXRaw = SharpDX.Mathematics.Interop;\nusing MediaFoundation = SharpDX.MediaFoundation;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy\n    {\n        private MediaFoundation.MediaSession _session;\n        private MediaFoundation.AudioStreamVolume _volumeController;\n        private MediaFoundation.PresentationClock _clock;\n\n        private Texture2D _lastFrame;\n\n        private readonly Variant _positionCurrent = new Variant();\n        private readonly Variant _positionBeginning = new Variant { ElementType = VariantElementType.Long, Value = 0L };\n\n        private Callback _callback;\n\n        private class Callback : MediaFoundation.AsyncCallbackBase\n        {\n            private ConcreteVideoPlayerStrategy _player;\n\n            public Callback(ConcreteVideoPlayerStrategy player)\n            {\n                _player = player;\n            }\n\n            public override void Invoke(MediaFoundation.AsyncResult asyncResult)\n            {\n                _player.Invoke(asyncResult);\n            }\n        }\n\n        public override MediaState State\n        {\n            get { return base.State; }\n            protected set { base.State = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override bool IsMuted\n        {\n            get { return base.IsMuted; }\n            set\n            {\n                base.IsMuted = value;\n                if (_volumeController != null)\n                    SetChannelVolumes();\n            }\n        }\n\n        public override TimeSpan PlayPosition\n        {\n            get { return TimeSpan.FromTicks(_clock.Time); }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n                if (base.Video != null)\n                    if (_volumeController != null)\n                        SetChannelVolumes();\n            }\n        }\n\n        internal ConcreteVideoPlayerStrategy()\n        {\n            MediaFoundation.MediaManager.Startup(true);\n            MediaFoundation.MediaFactory.CreateMediaSession(null, out _session);\n        }\n\n        #region IAsyncCallback\n\n        internal void Invoke(MediaFoundation.AsyncResult asyncResult)\n        {\n            using (MediaFoundation.MediaEvent mediaEvent = _session.EndGetEvent(asyncResult))\n            {\n                switch (mediaEvent.TypeInfo)\n                {\n                    case MediaFoundation.MediaEventTypes.SessionTopologySet:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionTopologyStatus:\n                        MediaFoundation.TopologyStatus topologyStatus = mediaEvent.Get(MediaFoundation.EventAttributeKeys.TopologyStatus);\n                        if (topologyStatus == MediaFoundation.TopologyStatus.Ready)\n                            OnTopologyReady();\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionNotifyPresentationTime:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionStarted:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionEnded:\n                        if (IsLooped)\n                        {\n                            _session.Start(null, _positionBeginning);\n                        }\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionStopped:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.SessionCapabilitiesChanged:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.EndOfPresentation:\n                        break;\n\n                    case MediaFoundation.MediaEventTypes.Error:\n                        DX.Result status = mediaEvent.Status;\n                        break;\n                }\n\n                IDisposable evValue = mediaEvent.Value.Value as IDisposable;\n                if (evValue != null)\n                    evValue.Dispose();\n            }\n\n            _session.BeginGetEvent(_callback, null);\n        }\n\n        #endregion IAsyncCallback\n\n        public override Texture2D PlatformGetTexture()\n        {\n            if (_lastFrame != null)\n            {\n                if (_lastFrame.Width != base.Video.Width || _lastFrame.Height != base.Video.Height)\n                {\n                    _lastFrame.Dispose();\n                    _lastFrame = null;\n                }\n            }\n            if (_lastFrame == null)\n                _lastFrame = new Texture2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, base.Video.Width, base.Video.Height, false, SurfaceFormat.Bgr32);\n\n            VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete<ConcreteVideoStrategy>().GetVideoPlatformStream();\n            byte[] texData = _videoPlatformStream.SampleGrabber.TextureData;\n            if (texData != null)\n                _lastFrame.SetData(texData);\n            \n            return _lastFrame;\n        }\n\n        protected override void PlatformUpdateState(ref MediaState state)\n        {\n            if (_clock != null)\n            {\n                MediaFoundation.ClockState clockState;\n                _clock.GetState(0, out clockState);\n\n                switch (clockState)\n                {\n                    case MediaFoundation.ClockState.Running:\n                        state = MediaState.Playing;\n                        return;\n\n                    case MediaFoundation.ClockState.Paused:\n                        state = MediaState.Paused;\n                        return;\n                }\n            }\n\n            state = MediaState.Stopped;\n        }\n\n        public override void PlatformPlay(Video video)\n        {\n            base.Video = video;\n\n            // Cleanup the last video first.\n            if (State != MediaState.Stopped)\n            {\n                _session.Stop();\n                _session.ClearTopologies();\n                _session.Close();\n                if (_volumeController != null)\n                {\n                    _volumeController.Dispose();\n                    _volumeController = null;\n                }\n                _clock.Dispose();\n            }\n\n            //create the callback if it hasn't been created yet\n            if (_callback == null)\n            {\n                _callback = new Callback(this);\n                _session.BeginGetEvent(_callback, null);\n            }\n\n            // Set the new video.\n            VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete<ConcreteVideoStrategy>().GetVideoPlatformStream();\n            _session.SetTopology(MediaFoundation.SessionSetTopologyFlags.Immediate, _videoPlatformStream.Topology);\n\n            // Get the clock.\n            _clock = _session.Clock.QueryInterface<MediaFoundation.PresentationClock>();\n\n            // Start playing.\n            _session.Start(null, _positionCurrent);\n\n            State = MediaState.Playing;\n\n\n            // XNA doesn't return until the video is playing\n            const int timeOutMs = 500;\n            Stopwatch timer = Stopwatch.StartNew();\n            while (State != MediaState.Playing)\n            {\n                Thread.Sleep(0);\n                if (timer.ElapsedMilliseconds > timeOutMs)\n                {\n                    timer.Stop();\n\n                    // attempt to stop to fix any bad state\n                    if (base.Video != null)\n                        PlatformStop();\n\n                    throw new InvalidOperationException(\"cannot start video\");\n                }\n            }\n            timer.Stop();\n\n        }\n\n        public override void PlatformPause()\n        {\n            _session.Pause();\n            State = MediaState.Paused;\n        }\n\n        public override void PlatformResume()\n        {\n            _session.Start(null, _positionCurrent);\n            State = MediaState.Playing;\n        }\n\n        public override void PlatformStop()\n        {\n            _session.ClearTopologies();\n            _session.Stop();\n            _session.Close();\n            if (_volumeController != null)\n            {\n                _volumeController.Dispose();\n                _volumeController = null;\n            }\n            if (_clock != null)\n            {\n                _clock.Dispose();\n            }\n            _clock = null;\n\n            State = MediaState.Stopped;\n        }\n\n        private void SetChannelVolumes()\n        {\n            if (_volumeController != null && !_volumeController.IsDisposed)\n            {\n                float volume = base.Volume;\n                if (IsMuted)\n                    volume = 0.0f;\n\n                for (int i = 0; i < _volumeController.ChannelCount; i++)\n                {\n                    _volumeController.SetChannelVolume(i, volume);\n                }\n            }\n        }\n\n        private void OnTopologyReady()\n        {\n            if (_session.IsDisposed)\n                return;\n\n            // HACK: Need SharpDX to fix this.\n            // The GUID is specified in a GuidAttribute attached to the class\n            Type audioStreamVolumeType = typeof(MediaFoundation.AudioStreamVolume);\n            GuidAttribute audioStreamVolumeGuidAttrib = (GuidAttribute)audioStreamVolumeType.GetCustomAttributes(typeof(GuidAttribute), false)[0];\n            Guid audioStreamVolumeGuid = Guid.Parse(audioStreamVolumeGuidAttrib.Value); \n\n            // Get the volume interface.\n            IntPtr volumeObjectPtr;\n            MediaFoundation.MediaFactory.GetService(_session, MediaFoundation.MediaServiceKeys.StreamVolume, audioStreamVolumeGuid, out volumeObjectPtr);\n            _volumeController = DX.CppObject.FromPointer<MediaFoundation.AudioStreamVolume>(volumeObjectPtr);\n\n            SetChannelVolumes();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_lastFrame != null)\n                    _lastFrame.Dispose();\n                _lastFrame = null;\n            }\n\n            MediaFoundation.MediaManager.Shutdown();\n\n            base.Dispose(disposing);\n        }\n    }\n\n\n    internal sealed class VideoPlatformStream : IDisposable\n    {\n        private MediaFoundation.Topology _topology;\n        private VideoSampleGrabber _sampleGrabber;\n        MediaFoundation.MediaType _mediaType;\n\n        internal MediaFoundation.Topology Topology { get { return _topology; } }\n        internal VideoSampleGrabber SampleGrabber { get { return _sampleGrabber; } }\n\n        internal VideoPlatformStream(string filename)\n        {\n            MediaFoundation.MediaManager.Startup(true);\n\n            MediaFoundation.MediaFactory.CreateTopology(out _topology);\n\n            MediaFoundation.MediaSource mediaSource;\n            {\n                MediaFoundation.SourceResolver resolver = new MediaFoundation.SourceResolver();\n\n                MediaFoundation.ObjectType otype;\n                DX.ComObject source = (DX.ComObject)resolver.CreateObjectFromURL(filename, MediaFoundation.SourceResolverFlags.MediaSource, null, out otype);\n                mediaSource = source.QueryInterface<MediaFoundation.MediaSource>();\n                resolver.Dispose();\n                source.Dispose();\n            }\n\n            MediaFoundation.PresentationDescriptor presDesc;\n            mediaSource.CreatePresentationDescriptor(out presDesc);\n\n            for (int i = 0; i < presDesc.StreamDescriptorCount; i++)\n            {\n                DXRaw.RawBool selected;\n                MediaFoundation.StreamDescriptor desc;\n                presDesc.GetStreamDescriptorByIndex(i, out selected, out desc);\n\n                if (selected)\n                {\n                    MediaFoundation.TopologyNode sourceNode;\n                    MediaFoundation.MediaFactory.CreateTopologyNode(MediaFoundation.TopologyType.SourceStreamNode, out sourceNode);\n\n                    sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.Source, mediaSource);\n                    sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.PresentationDescriptor, presDesc);\n                    sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.StreamDescriptor, desc);\n\n                    MediaFoundation.TopologyNode outputNode;\n                    MediaFoundation.MediaFactory.CreateTopologyNode(MediaFoundation.TopologyType.OutputNode, out outputNode);\n\n                    Guid majorType = desc.MediaTypeHandler.MajorType;\n                    if (majorType == MediaFoundation.MediaTypeGuids.Video)\n                    {\n                        _mediaType = new MediaFoundation.MediaType();\n                        _mediaType.Set(MediaFoundation.MediaTypeAttributeKeys.MajorType, MediaFoundation.MediaTypeGuids.Video);\n                        // Specify that we want the data to come in as RGB32.\n                        _mediaType.Set(MediaFoundation.MediaTypeAttributeKeys.Subtype, new Guid(\"00000016-0000-0010-8000-00AA00389B71\"));\n\n                        _sampleGrabber = new VideoSampleGrabber();\n                        MediaFoundation.Activate activate = CreateSampleGrabberSinkActivate(_mediaType, _sampleGrabber);\n                        outputNode.Object = activate;\n                    }\n\n                    if (majorType == MediaFoundation.MediaTypeGuids.Audio)\n                    {\n                        MediaFoundation.Activate activate;\n                        MediaFoundation.MediaFactory.CreateAudioRendererActivate(out activate);\n                        outputNode.Object = activate;\n                    }\n\n                    _topology.AddNode(sourceNode);\n                    _topology.AddNode(outputNode);\n                    sourceNode.ConnectOutput(0, outputNode, 0);\n\n                    sourceNode.Dispose();\n                    outputNode.Dispose();\n                }\n\n                desc.Dispose();\n            }\n\n            presDesc.Dispose();\n            mediaSource.Dispose();\n        }\n\n        [DllImport(\"mf.dll\", CallingConvention = CallingConvention.StdCall, EntryPoint = \"MFCreateSampleGrabberSinkActivate\")]\n        private unsafe static extern int MFCreateSampleGrabberSinkActivate(void* pMediaType, void* pCallback, void* pActivateOut);\n\n        private unsafe static MediaFoundation.Activate CreateSampleGrabberSinkActivate(MediaFoundation.MediaType mediaType, MediaFoundation.SampleGrabberSinkCallback callback)\n        {\n            MediaFoundation.Activate activate = null;\n            IntPtr activatePtr = IntPtr.Zero;\n            IntPtr callbackPtr = DX.CppObject.ToCallbackPtr<MediaFoundation.SampleGrabberSinkCallback>(callback);\n\n            // CreateSampleGrabberSinkActivate(...) was removed in 'Use SharpGenTools.Sdk for Codegen #988'\n            // https://github.com/sharpdx/SharpDX/pull/988\n            //MediaFoundation.MediaFactory.CreateSampleGrabberSinkActivate(_mediaType, _sampleGrabber, out activate);\n            DX.Result result = MFCreateSampleGrabberSinkActivate(\n                (void*)mediaType.NativePointer,\n                (void*)callbackPtr,\n                &activatePtr);\n\n            if (activatePtr != IntPtr.Zero)\n                activate = new MediaFoundation.Activate(activatePtr);\n\n            result.CheckError();\n\n            return activate;\n        }\n\n\n        #region IDisposable\n        ~VideoPlatformStream()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_topology != null)\n                {\n                    _topology.Dispose();\n                    _topology = null;\n                }\n\n                if (_sampleGrabber != null)\n                {\n                    _sampleGrabber.Dispose();\n                    _sampleGrabber = null;\n                }\n\n            }\n\n            MediaFoundation.MediaManager.Shutdown();\n\n            //base.Dispose(disposing);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/WMS/VideoSampleGrabber.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\nusing SharpDX.MediaFoundation;\nusing DX = SharpDX;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class VideoSampleGrabber : DX.CallbackBase, SampleGrabberSinkCallback\n    {\n        internal byte[] TextureData { get; private set; }\n\n        public void OnProcessSample(Guid guidMajorMediaType, int dwSampleFlags, long llSampleTime, long llSampleDuration, IntPtr sampleBufferRef, int dwSampleSize)\n        {\n            if (TextureData == null || TextureData.Length != dwSampleSize)\n                TextureData = new byte[dwSampleSize];\n\n            Marshal.Copy(sampleBufferRef, TextureData, 0, dwSampleSize);\n        }\n\n        public void OnSetPresentationClock(PresentationClock presentationClockRef)\n        {\n\n        }\n\n        public void OnShutdown()\n        {\n\n        }\n\n        public void OnClockPause(long systemTime)\n        {\n\n        }\n\n        public void OnClockRestart(long systemTime)\n        {\n\n        }\n\n        public void OnClockSetRate(long systemTime, float flRate)\n        {\n\n        }\n\n        public void OnClockStart(long systemTime, long llClockStartOffset)\n        {\n\n        }\n\n        public void OnClockStop(long hnsSystemTime)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/iOS/ConcreteAlbum.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\nusing CoreGraphics;\nusing MediaPlayer;\nusing UIKit;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteAlbumStrategy : AlbumStrategy\n    {\n        private string _name;\n        private Artist _artist;\n        private Genre _genre;\n        private SongCollection _songs;\n\n        private MPMediaItemArtwork _thumbnail;\n\n        public override string Name\n        {\n            get { return this._name; }\n        }\n\n        public override Artist Artist\n        {\n            get { return this._artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return this._genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override bool HasArt\n        {\n            get\n            {\n                // If album art is missing the bounds will be: Infinity, Infinity, 0, 0\n                return this._thumbnail != null && this._thumbnail.Bounds.Width != 0;\n            }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return this._songs; }\n        }\n\n\n        internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection,\n                                     MPMediaItemArtwork thumbnail)\n        {\n            this._name = name;\n            this._artist = artist;\n            this._genre = genre;\n            this._songs = songCollection;\n\n            this._thumbnail = thumbnail;\n        }\n\n\n        public override Stream GetAlbumArt()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Stream GetThumbnail()\n        {\n            throw new NotImplementedException();\n        }\n\n\n        [CLSCompliant(false)]\n        public UIImage Platform_GetAlbumArt(int width = 0, int height = 0)\n        {\n            if (width == 0)\n                width = (int)this._thumbnail.Bounds.Width;\n            if (height == 0)\n                height = (int)this._thumbnail.Bounds.Height;\n\n            return this._thumbnail.ImageWithSize(new CGSize(width, height));\n        }\n\n        [CLSCompliant(false)]\n        public UIImage Platform_GetThumbnail()\n        {\n            return this.Platform_GetAlbumArt(220, 220);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/iOS/ConcreteMediaFactory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\nusing UIKit;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public sealed class ConcreteMediaFactory : MediaFactory\n    {\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy()\n        {\n            return new ConcreteMediaLibraryStrategy();\n        }\n\n        public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource)\n        {\n            return new ConcreteMediaLibraryStrategy(mediaSource);\n        }\n\n        public override MediaPlayerStrategy CreateMediaPlayerStrategy()\n        {\n            return new ConcreteMediaPlayerStrategy();\n        }\n\n        public override SongStrategy CreateSongStrategy(string name, Uri streamSource)\n        {\n            return new ConcreteSongStrategy(name, streamSource);\n        }\n\n        public override VideoPlayerStrategy CreateVideoPlayerStrategy()\n        {\n            return new ConcreteVideoPlayerStrategy();\n        }\n\n        public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan)\n        {\n            return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan);\n        }\n\n        public override IList<MediaSource> GetAvailableMediaSources()\n        {\n            MediaSource[] result = { base.CreateMediaSource(UIDevice.CurrentDevice.SystemName, MediaSourceType.LocalDevice) };\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/iOS/ConcreteMediaLibrary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\nusing Foundation;\nusing MediaPlayer;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy\n    {\n        private static AlbumCollection _albumCollection;\n        private static SongCollection _songCollection;\n\n        //private static readonly NSString MPMediaPlaylistPropertyName = new NSString(MPMediaPlaylistProperty.Name);\n\n\n        public override MediaSource MediaSource\n        {\n            get { return base.MediaSource; }\n        }\n\n        public override AlbumCollection Albums\n        {\n            get { return _albumCollection; }\n        }\n\n        public override SongCollection Songs\n        {\n            get { return _songCollection; }\n        }\n\n        public override PlaylistCollection Playlists\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        //public override ArtistCollection Artists\n        //{\n        //    get { return base.Artists; }\n        //}\n\n        //public override GenreCollection Genres\n        //{\n        //    get { return base.Genres; }\n        //}\n\n\n        internal ConcreteMediaLibraryStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteMediaLibraryStrategy(MediaSource mediaSource)\n            : base(mediaSource)\n        {\n            throw new NotSupportedException(\"Initializing from MediaSource is not supported\");\n        }\n\n        public override void Load(Action<int> progressCallback = null)\n        {\n\n            List<Song> songList = new List<Song>();\n            List<Album> albumList = new List<Album>();\n\n            foreach (MPMediaItemCollection collection in MPMediaQuery.AlbumsQuery.Collections)\n            {\n                NSObject nsAlbumArtist = collection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumArtistProperty);\n                NSObject nsAlbumName = collection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumTitleProperty);\n                NSObject nsAlbumGenre = collection.RepresentativeItem.ValueForProperty(MPMediaItem.GenreProperty);\n                string albumArtist = nsAlbumArtist == null ? \"Unknown Artist\" : nsAlbumArtist.ToString();\n                string albumName = nsAlbumName == null ? \"Unknown Album\" : nsAlbumName.ToString();\n                string albumGenre = nsAlbumGenre == null ? \"Unknown Genre\" : nsAlbumGenre.ToString();\n                MPMediaItemArtwork thumbnail = collection.RepresentativeItem.ValueForProperty(MPMediaItem.ArtworkProperty) as MPMediaItemArtwork;\n\n                List<Song> albumSongs = new List<Song>((int)collection.Count);\n                AlbumStrategy albumStrategy = new ConcreteAlbumStrategy(albumName, new Artist(albumArtist), new Genre(albumGenre), base.CreateSongCollection(albumSongs), thumbnail);\n                Album album = base.CreateAlbum(albumStrategy);\n                albumList.Add(album);\n\n                foreach (MPMediaItem item in collection.Items)\n                {\n                    NSObject nsArtist = item.ValueForProperty(MPMediaItem.ArtistProperty);\n                    NSObject nsTitle = item.ValueForProperty(MPMediaItem.TitleProperty);\n                    NSObject nsGenre = item.ValueForProperty(MPMediaItem.GenreProperty);\n                    NSUrl assetUrl = item.ValueForProperty(MPMediaItem.AssetURLProperty) as NSUrl;\n\n                    if (nsTitle == null || assetUrl == null) // The Asset URL check will exclude iTunes match items from the Media Library that are not downloaded, but show up in the music app\n                        continue;\n\n                    string artist = nsArtist == null ? \"Unknown Artist\" : nsArtist.ToString();\n                    string title = nsTitle.ToString();\n                    string genre = nsGenre == null ? \"Unknown Genre\" : nsGenre.ToString();\n                    TimeSpan duration = TimeSpan.FromSeconds(((NSNumber)item.ValueForProperty(MPMediaItem.PlaybackDurationProperty)).FloatValue);\n\n                    ConcreteSongStrategy songStrategy = new ConcreteSongStrategy();\n                    songStrategy.Album = album;\n                    songStrategy.Artist = new Artist(artist);\n                    songStrategy.Genre = new Genre(genre);\n                    songStrategy.Name = title;\n                    songStrategy.Duration = duration;\n#if TVOS\n                    ((ConcreteSongStrategy)songStrategy)._assetUrl = assetUrl;\n#endif\n                    ((ConcreteSongStrategy)songStrategy)._mediaItem = item;\n                    Song song = base.CreateSong(songStrategy);\n\n                    albumSongs.Add(song);\n                    songList.Add(song);\n                }\n            }\n\n            _albumCollection = base.CreateAlbumCollection(albumList);\n            _songCollection = base.CreateSongCollection(songList);\n\n            /*_playLists = new PlaylistCollection();\n                    \n            MPMediaQuery playlists = new MPMediaQuery();\n            playlists.GroupingType = MPMediaGrouping.Playlist;\n            for (int i = 0; i < playlists.Collections.Length; i++)\n            {\n                MPMediaItemCollection item = playlists.Collections[i];\n                Playlist list = new Playlist();\n                list.Name = playlists.Items[i].ValueForProperty(MPMediaPlaylistPropertyName).ToString();\n                for (int k = 0; k < item.Items.Length; k++)\n                {\n                    TimeSpan time = TimeSpan.Parse(item.Items[k].ValueForProperty(MPMediaItem.PlaybackDurationProperty).ToString());\n                    list.Duration += time;\n                }\n                _playLists.Add(list);\n            }*/\n        }\n\n        public override void SavePicture(string name, byte[] imageBuffer)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SavePicture(string name, Stream source)\n        {\n            throw new NotImplementedException();\n        }\n\n        \n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/iOS/ConcreteMediaPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\nusing AudioToolbox;\nusing AVFoundation;\nusing CoreMedia;\nusing Foundation;\nusing MediaPlayer;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy\n    {\n\n        internal ConcreteMediaPlayerStrategy()\n        {\n        }\n\n        #region Properties\n\n        public override float PlatformVolume\n        {\n            get { return base.PlatformVolume; }\n            set\n            {\n                base.PlatformVolume = value;\n\n                if (base.Queue.ActiveSong != null)\n                    SetChannelVolumes();\n            }\n        }\n\n        public override bool PlatformIsMuted\n        {\n            get { return base.PlatformIsMuted; }\n            set\n            {\n                base.PlatformIsMuted = value;\n\n                if (base.Queue.Count > 0)\n                    SetChannelVolumes();\n            }\n        }\n\n        public override bool PlatformIsRepeating\n        {\n            get { return base.PlatformIsRepeating; }\n            set\n            {\n                base.PlatformIsRepeating = value;\n            }\n        }\n\n        public override bool PlatformIsShuffled\n        {\n            get { return base.PlatformIsShuffled; }\n            set { base.PlatformIsShuffled = value; }\n        }\n\n        public override bool PlatformGameHasControl\n        {\n            get { return !AVAudioSession.SharedInstance().OtherAudioPlaying; }\n        }\n\n        public override TimeSpan PlatformPlayPosition\n        {\n            get\n            {\n                Song activeSong = base.Queue.ActiveSong;\n                if (activeSong != null)\n                {\n                    MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n                    AVPlayer player = mediaPlatformStream.Player;\n                    return TimeSpan.FromSeconds(player.CurrentTime.Seconds);\n                }\n\n                return TimeSpan.Zero;\n            }\n        }\n\n        internal void PlatformSetPlayPosition(TimeSpan value)\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n                AVPlayer player = mediaPlatformStream.Player;\n                player.Seek(CMTime.FromSeconds(value.TotalSeconds, 1000));\n            }\n        }\n\n        protected override bool PlatformUpdateState(ref MediaState state)\n        {\n            return false;\n        }\n\n        #endregion\n\n        private void SetChannelVolumes()\n        {\n            float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume;\n\n            for (int i = 0; i < base.Queue.Count; i++)\n            {\n                Song queuedSong = base.Queue[i];\n\n                MediaPlatformStream mediaPlatformStream = ((IPlatformSong)queuedSong).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n                if (mediaPlatformStream.Player != null)\n                {\n                    AVPlayer player = mediaPlatformStream.Player;\n                    if (player.Volume != innerVolume)\n                        player.Volume = innerVolume;\n                }\n            }\n        }\n\n        public override void PlatformPlaySong(Song song)\n        {\n            if (base.Queue.ActiveSong != null)\n            {\n                MediaPlatformStream mediaPlatformStream = ((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n                mediaPlatformStream.SetEventHandler(OnSongFinishedPlaying);\n\n                float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume;\n\n                if (mediaPlatformStream.Player != null)\n                {\n                    AVPlayer player = mediaPlatformStream.Player;\n                    if (player.Volume != innerVolume)\n                        player.Volume = innerVolume;\n                }\n\n                if (mediaPlatformStream.Player == null)\n                {\n                    // MediaLibrary items are lazy loaded\n                    if (((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().AssetUrl != null)\n                        mediaPlatformStream.CreatePlayer(((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().AssetUrl);\n                    else\n                        return;\n                }\n\n                AVPlayer player2 = mediaPlatformStream.Player;\n                player2.Seek(CMTime.Zero); // Seek to start to ensure playback at the start.\n                player2.Play();\n\n                ((IPlatformSong)song).Strategy.PlayCount++;\n            }\n        }\n\n        public override void PlatformPause()\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n                if (mediaPlatformStream.Player != null)\n                {\n                    AVPlayer player = mediaPlatformStream.Player;\n                    player.Pause();\n                }\n            }\n        }\n\n        public override void PlatformResume()\n        {\n            Song activeSong = base.Queue.ActiveSong;\n            if (activeSong != null)\n            {\n                MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n                if (mediaPlatformStream.Player != null)\n                {\n                    AVPlayer player = mediaPlatformStream.Player;\n                    player.Play();\n                }\n            }\n        }\n\n        public override void PlatformStop()\n        {\n            for (int i = 0; i < base.Queue.Count; i++)\n            {\n                Song queuedSong = base.Queue[i];\n\n                Song activeSong = base.Queue.ActiveSong;\n\n                MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n                if (mediaPlatformStream.Player != null)\n                {\n                    AVPlayer player = mediaPlatformStream.Player;\n                    player.Pause();\n                    ((IPlatformSong)activeSong).Strategy.PlayCount = 0;\n                }\n            }\n        }\n\n        protected override void PlatformClearQueue()\n        {\n            while (base.Queue.Count > 0)\n            {\n                Song song = base.Queue[0];\n\n                MediaPlatformStream mediaPlatformStream = ((IPlatformSong)song).Strategy.ToConcrete<ConcreteSongStrategy>().GetMediaPlatformStream();\n                if (mediaPlatformStream.Player != null)\n                {\n                    AVPlayer player = mediaPlatformStream.Player;\n                    player.Pause();\n                    ((IPlatformSong)song).Strategy.PlayCount = 0;\n                }\n\n                base.RemoveQueuedSong(song);\n            }\n\n            _numSongsInQueuePlayed = 0;\n            //base.ClearQueue();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n    internal sealed class MediaPlatformStream : IDisposable\n    {\n        private AVPlayer _player; // TODO: Move _player to MediaPlayer\n        private NSObject _playToEndObserver;\n        private AVPlayerItem _sound;\n\n        internal AVPlayer Player { get { return _player; } }\n\n\n        internal MediaPlatformStream(Uri streamSource)\n        {\n            NSUrl nsUrl = NSUrl.FromFilename(streamSource.OriginalString);\n            this.CreatePlayer(nsUrl);\n        }\n\n        internal void CreatePlayer(NSUrl url)\n        {\n            _sound = AVPlayerItem.FromUrl(url);\n            _player = AVPlayer.FromPlayerItem(_sound);\n            _playToEndObserver = AVPlayerItem.Notifications.ObserveDidPlayToEndTime(OnFinishedPlaying);\n        }\n\n        internal delegate void FinishedPlayingHandler();\n        event FinishedPlayingHandler DonePlaying;\n\n        private void OnFinishedPlaying(object sender, NSNotificationEventArgs args)\n        {\n            FinishedPlayingHandler handler = DonePlaying;\n            if (handler != null)\n                handler();\n        }\n\n        /// <summary>\n        /// Set the event handler for \"Finished Playing\". Done this way to prevent multiple bindings.\n        /// </summary>\n        internal void SetEventHandler(FinishedPlayingHandler handler)\n        {\n            if (DonePlaying == null)\n                DonePlaying += handler;\n        }\n\n\n        #region IDisposable\n        ~MediaPlatformStream()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_sound != null)\n                {\n                    _playToEndObserver.Dispose();\n                    _sound.Dispose();\n                    _player.Dispose();\n                }\n\n                _playToEndObserver = null;\n                _sound = null;\n                _player = null;\n\n            }\n\n            //base.Dispose(disposing);\n\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Platforms/Media/iOS/ConcreteSong.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\nusing Foundation;\nusing MediaPlayer;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteSongStrategy : SongStrategy\n    {\n        internal MediaPlatformStream _mediaPlatformStream;\n\n        private Uri _streamSource;\n\n        #if !TVOS\n        internal MPMediaItem _mediaItem;\n        #endif\n        internal NSUrl _assetUrl;\n\n\n        internal Uri StreamSource { get { return _streamSource; } }\n\n        [CLSCompliant(false)]\n        public NSUrl AssetUrl { get { return this._assetUrl; } }\n\n        internal ConcreteSongStrategy()\n            : base()\n        {\n        }\n\n        internal ConcreteSongStrategy(string name, Uri streamSource)\n            : base()\n        {\n            this.Name = name;\n            this._streamSource = streamSource;\n\n            this._mediaPlatformStream = new MediaPlatformStream(this._streamSource);\n\n        }\n\n        internal MediaPlatformStream GetMediaPlatformStream()\n        {\n            return _mediaPlatformStream;\n        }\n\n\n        public override Album Album\n        {\n            get { return base.Album; }\n        }\n\n        public override Artist Artist\n        {\n            get { return base.Artist; }\n        }\n\n        public override Genre Genre\n        {\n            get { return base.Genre; }\n        }\n\n        public override TimeSpan Duration\n        {\n            get { return base.Duration; }\n        }\n\n        public override bool IsProtected\n        {\n            get { return base.IsProtected; }\n        }\n\n        public override bool IsRated\n        {\n            get { return base.IsRated; }\n        }\n\n        public override string Filename\n        {\n            get\n            {\n                if (this.StreamSource == null)\n                    return this.Name;\n\n                return StreamSource.OriginalString;\n            }\n        }\n\n        public override string Name\n        {\n            get { return base.Name; }\n        }\n\n        public override int PlayCount\n        {\n            get { return base.PlayCount; }\n        }\n\n        public override int Rating\n        {\n            get { return base.Rating; }\n        }\n\n        public override int TrackNumber\n        {\n            get { return base.TrackNumber; }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_mediaPlatformStream != null)\n                {\n                    _mediaPlatformStream.Dispose();\n                    _mediaPlatformStream = null;\n                }\n            }\n\n            //base.Dispose(disposing);\n        }\n    }\n    \n}\n\n"
  },
  {
    "path": "Platforms/Media/iOS/ConcreteVideo.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\n// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoStrategy : VideoStrategy\n    {\n        internal VideoPlatformStream _videoPlatformStream;\n\n\n        internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n            : base(graphicsDevice, fileName, duration)\n        {\n            this._videoPlatformStream = new VideoPlatformStream(this.FileName);\n\n        }\n\n\n        internal VideoPlatformStream GetVideoPlatformStream()\n        {\n            return _videoPlatformStream;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_videoPlatformStream != null)\n                {\n                    _videoPlatformStream.Dispose();\n                    _videoPlatformStream = null;\n                }\n\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Platforms/Media/iOS/ConcreteVideoPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\nusing MediaPlayer;\nusing Foundation;\nusing UIKit;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy\n    {\n        private NSObject _playbackDidFinishObserver;\n\n        public override MediaState State\n        {\n            get { return base.State; }\n            protected set { base.State = value; }\n        }\n\n        public override bool IsLooped\n        {\n            get { return base.IsLooped; }\n            set { base.IsLooped = value; }\n        }\n\n        public override bool IsMuted\n        {\n            get { return base.IsMuted; }\n            set\n            {\n                base.IsMuted = value;\n                throw new NotImplementedException();\n            }\n        }\n\n        public override TimeSpan PlayPosition\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override float Volume\n        {\n            get { return base.Volume; }\n            set\n            {\n                base.Volume = value;\n                if (base.Video != null)\n                    PlatformSetVolume();\n            }\n        }\n\n        internal ConcreteVideoPlayerStrategy()\n        {\n\n        }\n\n        public override Texture2D PlatformGetTexture()\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void PlatformUpdateState(ref MediaState state)\n        {\n        }\n\n        public override void PlatformPlay(Video video)\n        {\n            base.Video = video;\n\n            _playbackDidFinishObserver = NSNotificationCenter.DefaultCenter.AddObserver(\n                MPMoviePlayerController.PlaybackDidFinishNotification, OnStop);\n\n            VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete<ConcreteVideoStrategy>().GetVideoPlatformStream();\n            _videoPlatformStream.MovieView.MoviePlayer.RepeatMode = IsLooped ? MPMovieRepeatMode.One : MPMovieRepeatMode.None;\n\n            GraphicsDevice graphicsDevice = ((IPlatformVideo)base.Video).Strategy.ToConcrete<ConcreteVideoStrategy>().GraphicsDevice;\n            iOSGameWindow gameWindow = iOSGameWindow.FromHandle(graphicsDevice.PresentationParameters.DeviceWindowHandle);\n\n            gameWindow.ViewController.PresentViewController(_videoPlatformStream.MovieView, false, null);\n            _videoPlatformStream.MovieView.MoviePlayer.Play();\n\n            State = MediaState.Playing;\n        }\n        \n        public override void PlatformPause()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void PlatformResume()\n        {\n            VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete<ConcreteVideoStrategy>().GetVideoPlatformStream();\n            _videoPlatformStream.MovieView.MoviePlayer.Play();\n            State = MediaState.Playing;\n        }\n\n        public override void PlatformStop()\n        {\n            if (_playbackDidFinishObserver != null)\n            {\n                NSNotificationCenter.DefaultCenter.RemoveObserver(_playbackDidFinishObserver);\n                _playbackDidFinishObserver = null;\n            }\n\n            GraphicsDevice graphicsDevice = ((IPlatformVideo)base.Video).Strategy.ToConcrete<ConcreteVideoStrategy>().GraphicsDevice;\n            iOSGameWindow gameWindow = iOSGameWindow.FromHandle(graphicsDevice.PresentationParameters.DeviceWindowHandle);\n\n            VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete<ConcreteVideoStrategy>().GetVideoPlatformStream();\n            _videoPlatformStream.MovieView.MoviePlayer.Stop();\n            gameWindow.ViewController.DismissViewController(false, null);\n\n            State = MediaState.Stopped;\n        }\n\n        private void PlatformSetVolume()\n        {\n            throw new NotImplementedException();\n        }\n\n        private void OnStop(NSNotification e)\n        {\n            if (base.Video != null)\n                PlatformStop();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n\n    internal sealed class VideoPlatformStream : IDisposable\n    {\n        private MPMoviePlayerViewController _movieView;\n\n        internal MPMoviePlayerViewController MovieView { get { return _movieView; } }\n\n\n        internal VideoPlatformStream(string filename)\n        {\n            NSUrl url = NSUrl.FromFilename(Path.GetFullPath(filename));\n            _movieView = CreateMovieView(url);\n        }\n\n        private MPMoviePlayerViewController CreateMovieView(NSUrl url)\n        {\n            MPMoviePlayerViewController movieView = new MPMoviePlayerViewController(url);\n            MovieView.MoviePlayer.ScalingMode = MPMovieScalingMode.AspectFill;\n            MovieView.MoviePlayer.ControlStyle = MPMovieControlStyle.None;\n            MovieView.MoviePlayer.PrepareToPlay();\n            return movieView;\n        }\n\n\n        #region IDisposable\n        ~VideoPlatformStream()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_movieView != null)\n                {\n                    _movieView.Dispose();\n                    _movieView = null;\n                }\n\n            }\n\n            //base.Dispose(disposing);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Platforms/MonoGame.Framework.DesktopGL.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\Artifacts\\Platforms\\DesktopGL</BaseOutputPath>\n    <AppendTargetFrameworkToOutputPath>True</AppendTargetFrameworkToOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <LangVersion>7.3</LangVersion>\n    <AssemblyName>Kni.Platform</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants>LINUX;DESKTOPGL;OPENAL;OPENGL;SUPPORTS_EFX;NETSTANDARD;STBSHARP_INTERNAL</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The MonoGame runtime supporting Windows, Linux and macOS using SDL2 and OpenGL.</Description>\n    <PackageTags>monogame;.net core;core;.net standard;standard;desktopgl</PackageTags>\n    <PackageId>MonoGame.Framework.DesktopGL</PackageId>\n    <CopyContentFiles>True</CopyContentFiles>\n  </PropertyGroup>\n\n  <!-- NETFX reference assemblies let us target .NET Framework on Mac/Linux without Mono -->\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioFactory.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteAudioService.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteDynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteMicrophone.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffect.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\ConcreteSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\AudioLoader.cs\" />\n    <Compile Include=\"Audio\\OpenAL\\OpenAL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL.SDL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\ConcreteGraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\ConcreteGraphicsAdaptersProvider.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\ConcreteGraphicsContext.SDL.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\ConcreteGraphicsDevice.SDL.cs\" />\n    <Compile Include=\"Graphics\\.GL.SDL\\OpenGL.SDL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.Common.cs\" />\n    <Compile Include=\"Graphics\\.Common\\SpriteBatcher.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\.SDL2\\ConcreteTitleContainer.cs\" />\n    <Compile Include=\"Content\\.SDL2\\ConcreteTitleContainerFactory.cs\" />\n\n    <Compile Include=\"Devices\\.SDL2\\ConcreteDevicesFactory.cs\" />\n    <Compile Include=\"Devices\\.SDL2\\ConcreteHaptics.cs\" />\n    <Compile Include=\"Devices\\.SDL2\\Sensors\\ConcreteAccelerometer.cs\" />\n    <Compile Include=\"Devices\\.SDL2\\Sensors\\ConcreteCompass.cs\" />\n    <Compile Include=\"Devices\\.SDL2\\Sensors\\ConcreteSensorService.cs\" />\n\n    <Compile Include=\"Game\\.SDL2\\SDL2.cs\" />\n    <Compile Include=\"Game\\.SDL2\\ConcreteGame.cs\" />\n    <Compile Include=\"Game\\.SDL2\\ConcreteGameFactory.cs\" />\n    <Compile Include=\"Game\\.SDL2\\ConcreteGraphicsDeviceManager.cs\" />\n    <Compile Include=\"Game\\.SDL2\\SDLGameWindow.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcreteVertexShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ConcretePixelShader.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Shader\\ShaderProgram.cs\" />\n\n\t<Compile Include=\"Graphics\\.GL\\States\\ConcreteBlendState.cs\" />\n\t<Compile Include=\"Graphics\\.GL\\States\\ConcreteDepthStencilState.cs\" />\n\t<Compile Include=\"Graphics\\.GL\\States\\ConcreteRasterizerState.cs\" />\n\t<Compile Include=\"Graphics\\.GL\\States\\ConcreteSamplerState.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteDynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\ConcreteVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\.GL\\Vertices\\VertexDeclarationAttributeInfo.cs\" />\n\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteGraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteOcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteRenderTargetSwapChain.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture2D.Stream.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTexture3D.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCube.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteSamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\ConcreteTextureCollection.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLExtensions.cs\" />\n    <Compile Include=\"Graphics\\.GL\\GLVersion.cs\" />\n    <Compile Include=\"Graphics\\.GL\\IRenderTargetStrategyGL.cs\" />\n    <Compile Include=\"Graphics\\.GL\\OpenGL.cs\" />\n\n    <Compile Include=\"Graphics\\RenderTargetSwapChain.OpenGL.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Media\\DesktopGL\\ConcreteAlbum.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteMediaFactory.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteMediaLibrary.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteMediaPlayer.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteSong.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteVideo.cs\" />\n    <Compile Include=\"Media\\DesktopGL\\ConcreteVideoPlayer.cs\" />\n    <Compile Include=\"Input\\.SDL2\\Touch\\ConcreteTouchPanel.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteGamePad.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteGamePadDevice.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteInputFactory.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteJoystick.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteKeyboard.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteMouse.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteMouseCursor.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteKeyboardInput.cs\" />\n    <Compile Include=\"Input\\.SDL2\\ConcreteMessageBox.cs\" />\n    <Compile Include=\"Input\\.SDL2\\KeyboardUtil.cs\" />\n\n    <Compile Include=\"XR\\.SDL2\\ConcreteXRDevice.cs\" />\n    <Compile Include=\"XR\\.SDL2\\ConcreteXRFactory.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Utilities\\.SDL2\\FuncLoader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngCommon.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngReader.cs\" />\n    <Compile Include=\"Utilities\\Png\\PngWriter.cs\" />\n    <Compile Include=\"Utilities\\Png\\ZLibStream.cs\" />\n    <Compile Include=\"Utilities\\AssemblyHelper.cs\" />\n    <Compile Include=\"Utilities\\CurrentPlatform.cs\" />\n    <Compile Include=\"Utilities\\InteropHelpers.cs\" />\n    <Compile Include=\"Utilities\\MemCopyHelper.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\ThirdParty\\StbImageSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageSharp\" />\n    <Compile Include=\"..\\ThirdParty\\StbImageWriteSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageWriteSharp\" />\n\n    <Compile Include=\"..\\ThirdParty\\NVorbis\\NVorbis\\**\\*.cs\" LinkBase=\"ThirdParty\\NVorbis\" />\n    <Compile Remove=\"..\\ThirdParty\\NVorbis\\NVorbis\\Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Kni.bmp\">\n      <LogicalName>Kni.bmp</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"..\\ThirdParty\\SDL_GameControllerDB\\gamecontrollerdb.txt\">\n      <LogicalName>gamecontrollerdb.txt</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup Condition=\"'$(CopyContentFiles)' == 'True'\">\n    <Content Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\win-x86\\native\\soft_oal.dll\">\n      <Link>x86\\soft_oal.dll</Link>\n      <PackagePath>runtimes\\win-x86\\native</PackagePath>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\ThirdParty\\Dependencies\\SDL\\Windows\\x86\\SDL2.dll\">\n      <Link>x86\\SDL2.dll</Link>\n      <PackagePath>runtimes\\win-x86\\native</PackagePath>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n\n    <Content Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\win-x64\\native\\soft_oal.dll\">\n      <Link>x64\\soft_oal.dll</Link>\n      <PackagePath>runtimes\\win-x64\\native</PackagePath>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\ThirdParty\\Dependencies\\SDL\\Windows\\x64\\SDL2.dll\">\n      <Link>x64\\SDL2.dll</Link>\n      <PackagePath>runtimes\\win-x64\\native</PackagePath>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n\n    <Content Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\linux-x64\\native\\libopenal.so.1\">\n      <Link>x64\\libopenal.so.1</Link>\n      <PackagePath>runtimes\\linux-x64\\native</PackagePath>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\ThirdParty\\Dependencies\\SDL\\Linux\\x64\\libSDL2-2.0.so.0\">\n      <Link>x64\\libSDL2-2.0.so.0</Link>\n      <PackagePath>runtimes\\linux-x64\\native</PackagePath>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n\n    <Content Include=\"..\\ThirdParty\\Dependencies\\openal-soft\\1.16.0\\runtimes\\osx\\native\\libopenal.1.dylib\">\n      <Link>libopenal.1.dylib</Link>\n      <PackagePath>runtimes\\osx\\native</PackagePath>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\ThirdParty\\Dependencies\\SDL\\MacOS\\Universal\\libSDL2.dylib\">\n      <Link>libSDL2.dylib</Link>\n      <PackagePath>runtimes\\osx\\native</PackagePath>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n\n    <Content Include=\"build\\.SDL2\\MonoGame.Framework.DesktopGL.targets\" PackagePath=\"build\\\" Pack=\"true\" />\n  </ItemGroup>\n\n  <ItemGroup>\n\t<EmbeddedResource Include=\"Graphics\\Effect\\Resources\\AlphaTestEffect.ogl.fxo\">\n      <LogicalName>Resources.AlphaTestEffect.fxo</LogicalName>\n\t</EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\BasicEffect.ogl.fxo\">\n      <LogicalName>Resources.BasicEffect.fxo</LogicalName>\n\t</EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\DualTextureEffect.ogl.fxo\">\n      <LogicalName>Resources.DualTextureEffect.fxo</LogicalName>\n\t</EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\EnvironmentMapEffect.ogl.fxo\">\n      <LogicalName>Resources.EnvironmentMapEffect.fxo</LogicalName>\n\t</EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SkinnedEffect.ogl.fxo\">\n      <LogicalName>Resources.SkinnedEffect.fxo</LogicalName>\n\t</EmbeddedResource>\n    <EmbeddedResource Include=\"Graphics\\Effect\\Resources\\SpriteEffect.ogl.fxo\">\n      <LogicalName>Resources.SpriteEffect.fxo</LogicalName>\n\t</EmbeddedResource>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/Properties/AssemblyInfo.Android.cs",
    "content": "﻿using System.Reflection;\n\n// Specific platform information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n[assembly: AssemblyTitle(\"KNI backend for Android platform (GLES)\")]\n\n// Version information for the assembly which is automatically\n// set by our automated build process.\n[assembly: AssemblyVersion(\"4.2.9001.0\")]\n[assembly: AssemblyFileVersion(\"4.2.9001.0\")]"
  },
  {
    "path": "Platforms/Properties/AssemblyInfo.Blazor.cs",
    "content": "﻿using System.Reflection;\n\n// Specific platform information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n//[assembly: AssemblyTitle(\"KNI backend for WebAssembly platform (WebGL)\")]\n\n\n"
  },
  {
    "path": "Platforms/Properties/AssemblyInfo.DesktopGL.cs",
    "content": "﻿using System.Reflection;\n\n// Specific platform information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n[assembly: AssemblyTitle(\"KNI backend for SDL Desktop Platforms (OpenGL)\")]\n"
  },
  {
    "path": "Platforms/Properties/AssemblyInfo.Ref.cs",
    "content": "﻿using System.Reflection;\n\n// Specific platform information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n//[assembly: AssemblyTitle(\"Reference KNI backend for libraries\")]\n\n\n"
  },
  {
    "path": "Platforms/Properties/AssemblyInfo.UWP.cs",
    "content": "﻿using System.Reflection;\n\n// Specific platform information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n[assembly: AssemblyTitle(\"KNI for Universal Windows Platform (DirectX11)\")]\n\n// Version information for the assembly which is automatically\n// set by our automated build process.\n[assembly: AssemblyVersion(\"4.2.9001.0\")]\n[assembly: AssemblyFileVersion(\"4.2.9001.0\")]"
  },
  {
    "path": "Platforms/Properties/AssemblyInfo.Windows.cs",
    "content": "﻿using System.Reflection;\n\n// Specific platform information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n[assembly: AssemblyTitle(\"KNI backend for Windows Desktop platform (DirectX11)\")]\n"
  },
  {
    "path": "Platforms/Properties/AssemblyInfo.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// Common information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Kni.Platform\")]\n[assembly: AssemblyCopyright(\"Copyright ©2009-2022 MonoGame Team, ©2025 Nick Kastellanos\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Mark the assembly as CLS compliant so it can be safely used in other .NET languages\n[assembly: CLSCompliant(true)]\n\n// Allow the content pipeline assembly to access\n// some of our internal helper methods that it needs.\n//[assembly: InternalsVisibleTo(\"Xna.Framework.Content.Pipeline\")]\n[assembly: InternalsVisibleTo(\"Xna.Framework.Net\")]\n\n//Tests projects need access too\n[assembly: InternalsVisibleTo(\"Kni.Tests\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"81119db2-82a6-45fb-a366-63a08437b485\")]\n\n// This was needed in WinRT releases to inform the system that we\n// don't need to load any language specific resources.\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n"
  },
  {
    "path": "Platforms/Properties/AssemblyInfo.iOS.cs",
    "content": "﻿using System.Reflection;\n\n// Specific platform information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n[assembly: AssemblyTitle(\"KNI backend for iOS platform (GLES)\")]\n\n// Version information for the assembly which is automatically\n// set by our automated build process.\n[assembly: AssemblyVersion(\"4.2.9001.0\")]\n[assembly: AssemblyFileVersion(\"4.2.9001.0\")]"
  },
  {
    "path": "Platforms/Resources/Resource.designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"Microsoft.Xna.Framework.Resource\", IsApplication=false)]\n\nnamespace Microsoft.Xna.Framework\n{\n\t\n\t\n\t[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"13.2.2.120\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "Platforms/Storage/.Android/ConcreteStorageContainer.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageContainer : StorageContainerStrategy\n    {\n        public override string DisplayName\n        {\n            get { return base.DisplayName; }\n        }\n\n        internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name)\n        {\n            string saved = \"\";\n\n            string root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n            saved = Path.Combine(root,\"SavedGames\");\n            StoragePath = Path.Combine(saved, name);\n\n            string playerSave = string.Empty;\n            if (playerIndex.HasValue)\n                playerSave = Path.Combine(StoragePath, \"Player\" + (int)playerIndex.Value);\n            \n            if (!string.IsNullOrEmpty(playerSave))\n                StoragePath = Path.Combine(StoragePath, \"Player\" + (int)playerIndex);\n\n            if (!Directory.Exists(StoragePath))\n                Directory.CreateDirectory(StoragePath);\n        }\n\n\n        public override void CreateDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            if (!Directory.Exists(dirPath))\n            {\n                Directory.CreateDirectory(dirPath);\n            }\n        }\n\n        public override Stream CreateFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // return A new file with read/write access.\n            return File.Create(filePath);\n        }\n\n        public override void DeleteDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            // Now let's try to delete it\n            Directory.Delete(dirPath);\n        }\n\n        public override void DeleteFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // Now let's try to delete it\n            File.Delete(filePath);\n        }\n\n        public override bool DirectoryExists(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            return Directory.Exists(dirPath);\n        }\n\n        public override bool FileExists(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // return A new file with read/write access.\n            return File.Exists(filePath);\n        }\n\n        public override string[] GetDirectoryNames()\n        {\n            return Directory.GetDirectories(StoragePath);\n        }\n\n        public override string[] GetDirectoryNames(string searchPattern)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetFileNames()\n        {\n            return Directory.GetFiles(StoragePath);\n        }\n\n        public override string[] GetFileNames(string searchPattern)\n        {\n            return Directory.GetFiles(StoragePath, searchPattern);\n        }\n\n        public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            return File.Open(filePath, fileMode, fileAccess, fileShare);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.Android/ConcreteStorageDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageDevice : StorageDeviceStrategy\n    {\n\n        public override long FreeSpace\n        {\n            get\n            {\n                return new DriveInfo(GetDevicePath).AvailableFreeSpace;\n            }\n        }\n\n        public override bool IsConnected\n        {\n            get\n            {\n                return new DriveInfo(GetDevicePath).IsReady;\n            }\n        }\n\n        public override long TotalSpace\n        {\n            get\n            {\n                // Not sure if this should be TotalSize or TotalFreeSize\n                return new DriveInfo(GetDevicePath).TotalSize;\n            }\n        }\n\n        public override string GetDevicePath\n        {\n            get\n            {\n                // We may not need to store the StorageContainer in the future\n                // when we get DeviceChanged events working.\n                if (StorageContainer == null)\n                {\n                    return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n                }\n                else\n                {\n                    return ((IPlatformStorageContainer)StorageContainer).GetStrategy<StorageContainerStrategy>().StoragePath;\n                }\n            }\n        }\n\n\n        internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount)\n        {\n        }\n\n\n        public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state)\n        {\n            TaskCompletionSource<StorageContainer> tcs = new TaskCompletionSource<StorageContainer>(state);\n            Task<StorageContainer> task = Task.Run<StorageContainer>(() => Open(storageDevice, displayName));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n        }\n\n        public override StorageContainer EndOpenContainer(IAsyncResult result)\n        {\n            try\n            {\n                return ((Task<StorageContainer>)result).Result;\n            }\n            catch (AggregateException ex)\n            {\n                throw;\n            }\n        }\n\n        public override void DeleteContainer(string titleName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override StorageContainer Open(StorageDevice storageDevice, string displayName)\n        {\n            StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player);\n            StorageContainer = storageContainer;\n\n            return storageContainer;\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.Android/ConcreteStorageFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageFactory : StorageFactory\n    {\n\n        public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex)\n        {\n            return new ConcreteStorageContainer(name, playerIndex);\n        }\n\n        public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount)\n        {\n            return new ConcreteStorageDevice(player, directoryCount);\n        }\n\n        public override StorageServiceStrategy CreateStorageServiceStrategy()\n        {\n            return new ConcreteStorageService();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.Android/ConcreteStorageService.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nusing System.Threading.Tasks;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageService : StorageServiceStrategy\n    {\n\n        internal ConcreteStorageService()\n        {\n        }\n\n        public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            TaskCompletionSource<StorageDevice> tcs = new TaskCompletionSource<StorageDevice>(state);\n            Task<StorageDevice> task = Task.Run<StorageDevice>(() => Show(player, sizeInBytes, directoryCount));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n        }\n\n        public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            TaskCompletionSource<StorageDevice> tcs = new TaskCompletionSource<StorageDevice>(state);\n            Task<StorageDevice> task = Task.Run<StorageDevice>(() => Show(sizeInBytes, directoryCount));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n        }\n\n        public override StorageDevice EndShowSelector(IAsyncResult result)\n        {\n            try\n            {\n                return ((Task<StorageDevice>)result).Result;\n            }\n            catch (AggregateException ex)\n            {\n                throw;\n            }\n        }\n\n        // The MonoTouch AOT cannot deal with nullable types in a delegate\n        // (or at least not the straightforward implementation), so we\n        // define two delegate types.\n        public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount);\n        public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount);\n\n        public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName);\n\n\n        private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(player, sizeInBytes, directoryCount);\n        }\n\n        private StorageDevice Show(int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(null, sizeInBytes, directoryCount);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.Blazor/ConcreteStorageContainer.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageContainer : StorageContainerStrategy\n    {\n        public override string DisplayName\n        {\n            get { return base.DisplayName; }\n        }\n\n        internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        public override void CreateDirectory(string directory)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Stream CreateFile(string file)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void DeleteDirectory(string directory)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void DeleteFile(string file)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override bool DirectoryExists(string directory)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override bool FileExists(string file)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetDirectoryNames()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetDirectoryNames(string searchPattern)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetFileNames()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetFileNames(string searchPattern)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)\n        {\n            throw new NotImplementedException();\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.Blazor/ConcreteStorageDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageDevice : StorageDeviceStrategy\n    {\n\n        public override long FreeSpace\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public override bool IsConnected\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        public override long TotalSpace\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public override string GetDevicePath\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n\n        internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount)\n        {\n        }\n\n\n        public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state)\n        {\n\n            throw new NotImplementedException();\n        }\n\n        public override StorageContainer EndOpenContainer(IAsyncResult result)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void DeleteContainer(string titleName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override StorageContainer Open(StorageDevice storageDevice, string displayName)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.Blazor/ConcreteStorageFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageFactory : StorageFactory\n    {\n\n        public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex)\n        {\n            return new ConcreteStorageContainer(name, playerIndex);\n        }\n\n        public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount)\n        {\n            return new ConcreteStorageDevice(player, directoryCount);\n        }\n\n        public override StorageServiceStrategy CreateStorageServiceStrategy()\n        {\n            return new ConcreteStorageService();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.Blazor/ConcreteStorageService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageService : StorageServiceStrategy\n    {\n\n        internal ConcreteStorageService()\n        {\n        }\n\n        public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override StorageDevice EndShowSelector(IAsyncResult result)\n        {\n            throw new NotImplementedException();\n        }\n\n        private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount)\n        {\n            throw new NotImplementedException();\n        }\n\n        private StorageDevice Show(int sizeInBytes, int directoryCount)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.Ref/ConcreteStorageContainer.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageContainer : StorageContainerStrategy\n    {\n        public override string DisplayName\n        {\n            get { return base.DisplayName; }\n        }\n\n        internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        public override void CreateDirectory(string directory)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override Stream CreateFile(string file)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DeleteDirectory(string directory)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DeleteFile(string file)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool DirectoryExists(string directory)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override bool FileExists(string file)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override string[] GetDirectoryNames()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override string[] GetDirectoryNames(string searchPattern)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override string[] GetFileNames()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override string[] GetFileNames(string searchPattern)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.Ref/ConcreteStorageDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageDevice : StorageDeviceStrategy\n    {\n\n        public override long FreeSpace\n        {\n            get\n            {\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n        public override bool IsConnected\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        public override long TotalSpace\n        {\n            get\n            {\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n        public override string GetDevicePath\n        {\n            get\n            {\n                throw new PlatformNotSupportedException();\n            }\n        }\n\n\n        internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount)\n        {\n        }\n\n\n        public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state)\n        {\n\n            throw new PlatformNotSupportedException();\n        }\n\n        public override StorageContainer EndOpenContainer(IAsyncResult result)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void DeleteContainer(string titleName)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override StorageContainer Open(StorageDevice storageDevice, string displayName)\n        {\n            throw new PlatformNotSupportedException();\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.Ref/ConcreteStorageFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageFactory : StorageFactory\n    {\n\n        public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex)\n        {\n            return new ConcreteStorageContainer(name, playerIndex);\n        }\n\n        public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount)\n        {\n            return new ConcreteStorageDevice(player, directoryCount);\n        }\n\n        public override StorageServiceStrategy CreateStorageServiceStrategy()\n        {\n            return new ConcreteStorageService();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.Ref/ConcreteStorageService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageService : StorageServiceStrategy\n    {\n\n        internal ConcreteStorageService()\n        {\n        }\n\n        public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override StorageDevice EndShowSelector(IAsyncResult result)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        private StorageDevice Show(int sizeInBytes, int directoryCount)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.SDL2/ConcreteStorageContainer.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageContainer : StorageContainerStrategy\n    {\n        public override string DisplayName\n        {\n            get { return base.DisplayName; }\n        }\n\n        internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name)\n        {\n            string saved = \"\";\n\n            switch (CurrentPlatform.OS)\n            {\n                case OS.Windows:\n                    {\n                        saved = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n                        saved = Path.Combine(saved, \"SavedGames\");\n                    }\n                    break;\n                case OS.Linux:\n                    {\n                        saved = Environment.GetEnvironmentVariable(\"XDG_DATA_HOME\");\n                        if (String.IsNullOrEmpty(saved))\n                        {\n                            saved = Environment.GetEnvironmentVariable(\"HOME\");\n                            if (!String.IsNullOrEmpty(saved))\n                                saved += \"/.local/share\";\n                            else\n                                saved = \".\";\n                        }\n                    }\n                    break;\n                case OS.MacOSX:\n                    {\n                        saved = Environment.GetEnvironmentVariable(\"HOME\");\n                        if (!String.IsNullOrEmpty(saved))\n                            saved += \"/Library/Application Support\";\n                        else\n                            saved = \".\";\n                    }\n                    break;\n\n                default:\n                    throw new Exception(\"Unexpected platform.\");\n            }\n            StoragePath = Path.Combine(saved, name);\n\n            string playerSave = string.Empty;\n            if (playerIndex.HasValue)\n                playerSave = Path.Combine(StoragePath, \"Player\" + (int)playerIndex.Value);\n            \n            if (!string.IsNullOrEmpty(playerSave))\n                StoragePath = Path.Combine(StoragePath, \"Player\" + (int)playerIndex);\n\n            if (!Directory.Exists(StoragePath))\n                Directory.CreateDirectory(StoragePath);\n        }\n\n\n        public override void CreateDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            if (!Directory.Exists(dirPath))\n            {\n                Directory.CreateDirectory(dirPath);\n            }\n        }\n\n        public override Stream CreateFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // return A new file with read/write access.\n            return File.Create(filePath);\n        }\n\n        public override void DeleteDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            // Now let's try to delete it\n            Directory.Delete(dirPath);\n        }\n\n        public override void DeleteFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // Now let's try to delete it\n            File.Delete(filePath);\n        }\n\n        public override bool DirectoryExists(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            return Directory.Exists(dirPath);\n        }\n\n        public override bool FileExists(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // return A new file with read/write access.\n            return File.Exists(filePath);\n        }\n\n        public override string[] GetDirectoryNames()\n        {\n            return Directory.GetDirectories(StoragePath);\n        }\n\n        public override string[] GetDirectoryNames(string searchPattern)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetFileNames()\n        {\n            return Directory.GetFiles(StoragePath);\n        }\n\n        public override string[] GetFileNames(string searchPattern)\n        {\n            return Directory.GetFiles(StoragePath, searchPattern);\n        }\n\n        public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            return File.Open(filePath, fileMode, fileAccess, fileShare);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.SDL2/ConcreteStorageDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageDevice : StorageDeviceStrategy\n    {\n\n        public override long FreeSpace\n        {\n            get\n            {\n                return new DriveInfo(GetDevicePath).AvailableFreeSpace;\n            }\n        }\n\n        public override bool IsConnected\n        {\n            get\n            {\n                return new DriveInfo(GetDevicePath).IsReady;\n            }\n        }\n\n        public override long TotalSpace\n        {\n            get\n            {\n                // Not sure if this should be TotalSize or TotalFreeSize\n                return new DriveInfo(GetDevicePath).TotalSize;\n            }\n        }\n\n        public override string GetDevicePath\n        {\n            get\n            {\n                // We may not need to store the StorageContainer in the future\n                // when we get DeviceChanged events working.\n                if (StorageContainer == null)\n                {\n                    switch (CurrentPlatform.OS)\n                    {\n                        case OS.Windows:\n                            {\n                                return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n                            }\n                        case OS.Linux:\n                            {\n                                string osConfigDir = Environment.GetEnvironmentVariable(\"XDG_DATA_HOME\");\n                                if (String.IsNullOrEmpty(osConfigDir))\n                                {\n                                    osConfigDir = Environment.GetEnvironmentVariable(\"HOME\");\n                                    if (!String.IsNullOrEmpty(osConfigDir))\n                                        osConfigDir += \"/.local/share\";\n                                    else\n                                        osConfigDir = \".\";\n                                }\n                                return osConfigDir;\n                            }\n                        case OS.MacOSX:\n                            {\n                                string osConfigDir = Environment.GetEnvironmentVariable(\"HOME\");\n                                if (!String.IsNullOrEmpty(osConfigDir))\n                                    osConfigDir += \"/Library/Application Support\";\n                                else\n                                    osConfigDir = \".\";\n\n                                return osConfigDir;\n                            }\n                        default:\n                            throw new Exception(\"Unexpected platform.\");\n                    }\n                }\n                else\n                {\n                    return ((IPlatformStorageContainer)StorageContainer).GetStrategy<StorageContainerStrategy>().StoragePath;\n                }\n            }\n        }\n\n\n        internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount)\n        {\n        }\n\n\n        public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state)\n        {\n            try\n            {\n                ConcreteStorageService.OpenContainerAsynchronous AsynchronousOpen = new ConcreteStorageService.OpenContainerAsynchronous(Open);\n                return AsynchronousOpen.BeginInvoke(storageDevice, displayName, callback, state);\n            }\n            finally\n            {\n            }\n        }\n\n        public override StorageContainer EndOpenContainer(IAsyncResult result)\n        {\n            StorageContainer returnValue = null;\n            try\n            {\n#if NET4_0_OR_GREATER\n                // Retrieve the delegate.\n                AsyncResult asyncResult = result as AsyncResult;\n                if (asyncResult != null)\n                {\n                    ConcreteStorageService.OpenContainerAsynchronous asyncDelegate = asyncResult.AsyncDelegate as ConcreteStorageService.OpenContainerAsynchronous;\n\n                    // Wait for the WaitHandle to become signaled.\n                    result.AsyncWaitHandle.WaitOne();\n\n                    // Call EndInvoke to retrieve the results.\n                    if (asyncDelegate != null)\n                        returnValue = asyncDelegate.EndInvoke(result);\n                }\n#else // NET6_0_OR_GREATER\n                throw new NotImplementedException();\n#endif\n            }\n            finally\n            {\n                // Close the wait handle.\n                result.AsyncWaitHandle.Dispose();\n            }\n            \n            return returnValue;\n        }\n\n        public override void DeleteContainer(string titleName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override StorageContainer Open(StorageDevice storageDevice, string displayName)\n        {\n            StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player);\n            StorageContainer = storageContainer;\n\n            return storageContainer;\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.SDL2/ConcreteStorageFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageFactory : StorageFactory\n    {\n\n        public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex)\n        {\n            return new ConcreteStorageContainer(name, playerIndex);\n        }\n\n        public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount)\n        {\n            return new ConcreteStorageDevice(player, directoryCount);\n        }\n\n        public override StorageServiceStrategy CreateStorageServiceStrategy()\n        {\n            return new ConcreteStorageService();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.SDL2/ConcreteStorageService.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageService : StorageServiceStrategy\n    {\n\n        internal ConcreteStorageService()\n        {\n        }\n\n        public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            ShowSelectorAsynchronousShow del = new ShowSelectorAsynchronousShow(Show);\n            return del.BeginInvoke(player, sizeInBytes, directoryCount, callback, state);\n        }\n\n        public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            ShowSelectorAsynchronousShow2 del = new ShowSelectorAsynchronousShow2(Show);\n            return del.BeginInvoke(sizeInBytes, directoryCount, callback, state);\n        }\n\n        public override StorageDevice EndShowSelector(IAsyncResult result)\n        {\n            if (!result.IsCompleted)\n            {\n                try\n                {\n                    result.AsyncWaitHandle.WaitOne();\n                }\n                finally\n                {\n                }\n            }\n\n  #if NET4_0_OR_GREATER\n            // Retrieve the delegate.\n            AsyncResult asyncResult = (AsyncResult)result;\n            object del = asyncResult.AsyncDelegate;\n  #else // NET6_0_OR_GREATER\n            object del;\n            throw new NotImplementedException();\n  #endif\n\n            if (del is ShowSelectorAsynchronousShow)\n                return (del as ShowSelectorAsynchronousShow).EndInvoke(result);\n            else if (del is ShowSelectorAsynchronousShow2)\n                return (del as ShowSelectorAsynchronousShow2).EndInvoke(result);\n            else\n                throw new ArgumentException(\"result\");\n        }\n\n        // The MonoTouch AOT cannot deal with nullable types in a delegate\n        // (or at least not the straightforward implementation), so we\n        // define two delegate types.\n        public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount);\n        public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount);\n\n        public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName);\n\n\n        private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(player, sizeInBytes, directoryCount);\n        }\n\n        private StorageDevice Show(int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(null, sizeInBytes, directoryCount);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.UAP/ConcreteStorageContainer.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nusing System.Linq;\nusing Windows.Storage;\nusing Windows.Storage.Search;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    //\tImplementation on Windows\n    //\t\n    //\tUser storage is in the My Documents folder of the user who is currently logged in, in the SavedGames folder. \n    //\tA subfolder is created for each game according to the titleName passed to the BeginOpenContainer method. \n    //\tWhen no PlayerIndex is specified, content is saved in the AllPlayers folder. When a PlayerIndex is specified, \n    //\tthe content is saved in the Player1, Player2, Player3, or Player4 folder, depending on which PlayerIndex \n    //\twas passed to BeginShowSelector.\n\n    internal sealed class ConcreteStorageContainer : StorageContainerStrategy\n    {\n        public override string DisplayName\n        {\n            get { return base.DisplayName; }\n        }\n\n        internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name)\n        {\n            string saved = \"\";\n\n            string root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n            saved = Path.Combine(root,\"SavedGames\");\n\n            StoragePath = Path.Combine(saved, name);\n\n            string playerSave = string.Empty;\n            if (playerIndex.HasValue)\n                playerSave = Path.Combine(StoragePath, \"Player\" + (int)playerIndex.Value);\n            \n            if (!string.IsNullOrEmpty(playerSave))\n                StoragePath = Path.Combine(StoragePath, \"Player\" + (int)playerIndex);\n\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            var task = folder.CreateFolderAsync(StoragePath, CreationCollisionOption.OpenIfExists);\n            task.AsTask().Wait();\n        }\n\n\n        public override void CreateDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            var task = folder.CreateFolderAsync(dirPath, CreationCollisionOption.OpenIfExists);\n            task.AsTask().Wait();\n        }\n\n        public override Stream CreateFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            var awaiter = folder.OpenStreamForWriteAsync(filePath, CreationCollisionOption.ReplaceExisting).GetAwaiter();\n            return awaiter.GetResult();\n        }\n\n        public override void DeleteDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            // Now let's try to delete it\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            var deleteFolder = folder.GetFolderAsync(dirPath).AsTask().GetAwaiter().GetResult();\n            deleteFolder.DeleteAsync().AsTask().Wait();\n        }\n\n        public override void DeleteFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            StorageFile deleteFile = folder.GetFileAsync(filePath).AsTask().GetAwaiter().GetResult();\n            deleteFile.DeleteAsync().AsTask().Wait();\n        }\n\n        public override bool DirectoryExists(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n\n            try\n            {\n                StorageFolder result = folder.GetFolderAsync(dirPath).GetResults();\n                return result != null;\n            }\n            catch\n            {\n                return false;\n            }\n        }\n\n        public override bool FileExists(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            // GetFile returns an exception if the file doesn't exist, so we catch it here and return the boolean.\n            try\n            {\n                StorageFile existsFile = folder.GetFileAsync(filePath).GetAwaiter().GetResult();\n                return existsFile != null;\n            }\n            catch\n            {\n                return false;\n            }\n        }\n\n        public override string[] GetDirectoryNames()\n        {\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            IReadOnlyList<StorageFolder> results = folder.GetFoldersAsync().AsTask().GetAwaiter().GetResult();\n            return results.Select<StorageFolder, string>(e => e.Name).ToArray();\n        }\n\n        public override string[] GetDirectoryNames(string searchPattern)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetFileNames()\n        {\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            var results = folder.GetFilesAsync().AsTask().GetAwaiter().GetResult();\n            return results.Select<StorageFile, string>(e => e.Name).ToArray();\n        }\n\n        public override string[] GetFileNames(string searchPattern)\n        {\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            QueryOptions options = new QueryOptions( CommonFileQuery.DefaultQuery, new [] { searchPattern } );\n            StorageFileQueryResult query = folder.CreateFileQueryWithOptions(options);\n            IReadOnlyList<StorageFile> files = query.GetFilesAsync().AsTask().GetAwaiter().GetResult();\n            return files.Select<StorageFile, string>(e => e.Name).ToArray();\n        }\n\n        public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            StorageFolder folder = ApplicationData.Current.LocalFolder;\n            if (fileMode == FileMode.Create || fileMode == FileMode.CreateNew)\n            {\n                return folder.OpenStreamForWriteAsync(filePath, CreationCollisionOption.ReplaceExisting).GetAwaiter().GetResult();\n            }\n            else if (fileMode == FileMode.OpenOrCreate)\n            {\n                if (fileAccess == FileAccess.Read && FileExists(file))\n                    return folder.OpenStreamForReadAsync(filePath).GetAwaiter().GetResult();\n                else\n                {\n                    // Not using OpenStreamForReadAsync because the stream position is placed at the end of the file, instead of the beginning\n                    StorageFile f = folder.CreateFileAsync(filePath, CreationCollisionOption.OpenIfExists).AsTask().GetAwaiter().GetResult();\n                    return f.OpenAsync(FileAccessMode.ReadWrite).AsTask().GetAwaiter().GetResult().AsStream();\n                }\n            }\n            else if (fileMode == FileMode.Truncate)\n            {\n                return folder.OpenStreamForWriteAsync(filePath, CreationCollisionOption.ReplaceExisting).GetAwaiter().GetResult();\n            }\n            else\n            {\n                //if (fileMode == FileMode.Append)\n                // Not using OpenStreamForReadAsync because the stream position is placed at the end of the file, instead of the beginning\n                folder.CreateFileAsync(filePath, CreationCollisionOption.OpenIfExists).AsTask().GetAwaiter().GetResult().OpenAsync(FileAccessMode.ReadWrite).AsTask().GetAwaiter().GetResult().AsStream();\n                StorageFile f = folder.CreateFileAsync(filePath, CreationCollisionOption.OpenIfExists).AsTask().GetAwaiter().GetResult();\n                return f.OpenAsync(FileAccessMode.ReadWrite).AsTask().GetAwaiter().GetResult().AsStream();\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.UAP/ConcreteStorageDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nusing Windows.Storage;\n\n#if NETFX_CORE\nusing System.Threading.Tasks;\n#endif\n\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageDevice : StorageDeviceStrategy\n    {\n\n        public override long FreeSpace\n        {\n            get\n            {\n                return long.MaxValue;\n            }\n        }\n\n        public override bool IsConnected\n        {\n            get\n            {\n                return true;\n            }\n        }\n\n        public override long TotalSpace\n        {\n            get\n            {\n                return long.MaxValue;\n            }\n        }\n\n        public override string GetDevicePath\n        {\n            get\n            {\n                // We may not need to store the StorageContainer in the future\n                // when we get DeviceChanged events working.\n                if (StorageContainer == null)\n                {\n                    return ApplicationData.Current.LocalFolder.Path;\n                }\n                else\n                {\n                    return ((IPlatformStorageContainer)StorageContainer).GetStrategy<StorageContainerStrategy>().StoragePath;\n                }\n            }\n        }\n\n\n        internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount)\n        {\n        }\n\n\n        public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state)\n        {\n#if NETFX_CORE\n            TaskCompletionSource<StorageContainer> tcs = new TaskCompletionSource<StorageContainer>(state);\n            Task<StorageContainer> task = Task.Run<StorageContainer>(() => Open(storageDevice, displayName));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n#else\n            try\n            {\n                ConcreteStorageService.OpenContainerAsynchronous AsynchronousOpen = new ConcreteStorageService.OpenContainerAsynchronous(Open);\n#if (UAP || WINUI)\n                _containerDelegate = AsynchronousOpen;\n#endif\n                return AsynchronousOpen.BeginInvoke(storageDevice, displayName, callback, state);\n            }\n            finally\n            {\n            }\n#endif\n        }\n\n        public override StorageContainer EndOpenContainer(IAsyncResult result)\n        {\n#if NETFX_CORE\n            try\n            {\n                return ((Task<StorageContainer>)result).Result;\n            }\n            catch (AggregateException ex)\n            {\n                throw;\n            }\n#else\n            StorageContainer returnValue = null;\n            try\n            {\n#if (UAP || WINUI)\n                // AsyncResult does not exist in WinRT\n                ConcreteStorageService.OpenContainerAsynchronous asyncResult = _containerDelegate as ConcreteStorageService.OpenContainerAsynchronous;\n                if (asyncResult != null)\n                {\n                    // Wait for the WaitHandle to become signaled.\n                    result.AsyncWaitHandle.WaitOne();\n\n                    // Call EndInvoke to retrieve the results.\n                    returnValue = asyncResult.EndInvoke(result);\n                }\n                _containerDelegate = null;\n#elif NET4_0_OR_GREATER\n                // Retrieve the delegate.\n                AsyncResult asyncResult = result as AsyncResult;\n                if (asyncResult != null)\n                {\n                    ConcreteStorageService.OpenContainerAsynchronous asyncDelegate = asyncResult.AsyncDelegate as ConcreteStorageService.OpenContainerAsynchronous;\n\n                    // Wait for the WaitHandle to become signaled.\n                    result.AsyncWaitHandle.WaitOne();\n\n                    // Call EndInvoke to retrieve the results.\n                    if (asyncDelegate != null)\n                        returnValue = asyncDelegate.EndInvoke(result);\n                }\n#else // NET6_0_OR_GREATER\n                throw new NotImplementedException();\n#endif\n            }\n            finally\n            {\n                // Close the wait handle.\n                result.AsyncWaitHandle.Dispose();\n            }\n            \n            return returnValue;\n#endif\n        }\n\n        public override void DeleteContainer(string titleName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override StorageContainer Open(StorageDevice storageDevice, string displayName)\n        {\n            StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player);\n            StorageContainer = storageContainer;\n\n            return storageContainer;\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.UAP/ConcreteStorageFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageFactory : StorageFactory\n    {\n\n        public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex)\n        {\n            return new ConcreteStorageContainer(name, playerIndex);\n        }\n\n        public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount)\n        {\n            return new ConcreteStorageDevice(player, directoryCount);\n        }\n\n        public override StorageServiceStrategy CreateStorageServiceStrategy()\n        {\n            return new ConcreteStorageService();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.UAP/ConcreteStorageService.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\n#if NETFX_CORE\nusing System.Threading.Tasks;\n#endif\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageService : StorageServiceStrategy\n    {\n\n#if (UAP || WINUI)\n        // Dirty trick to avoid the need to get the delegate from the IAsyncResult (can't be done in WinRT)\n        static Delegate _showDelegate;\n        static Delegate _containerDelegate;\n#endif\n\n\n        internal ConcreteStorageService()\n        {\n        }\n\n        public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n#if NETFX_CORE\n            TaskCompletionSource<StorageDevice> tcs = new TaskCompletionSource<StorageDevice>(state);\n            Task<StorageDevice> task = Task.Run<StorageDevice>(() => Show(player, sizeInBytes, directoryCount));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n#else\n            ShowSelectorAsynchronousShow del = new ShowSelectorAsynchronousShow(Show);\n  #if (UAP || WINUI)\n            _showDelegate = del;\n  #endif\n            return del.BeginInvoke(player, sizeInBytes, directoryCount, callback, state);\n#endif\n        }\n\n        public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n#if NETFX_CORE\n            TaskCompletionSource<StorageDevice> tcs = new TaskCompletionSource<StorageDevice>(state);\n            Task<StorageDevice> task = Task.Run<StorageDevice>(() => Show(sizeInBytes, directoryCount));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n#else\n            ShowSelectorAsynchronousShow2 del = new ShowSelectorAsynchronousShow2(Show);\n\n  #if (UAP || WINUI)\n            _showDelegate = del;\n  #endif\n            return del.BeginInvoke(sizeInBytes, directoryCount, callback, state);\n#endif\n        }\n\n        public override StorageDevice EndShowSelector(IAsyncResult result)\n        {\n#if NETFX_CORE\n            try\n            {\n                return ((Task<StorageDevice>)result).Result;\n            }\n            catch (AggregateException ex)\n            {\n                throw;\n            }\n#else\n            if (!result.IsCompleted)\n            {\n                try\n                {\n                    result.AsyncWaitHandle.WaitOne();\n                }\n                finally\n                {\n  #if !(UAP || WINUI)\n                    result.AsyncWaitHandle.Close();\n  #endif\n                }\n            }\n\n  #if (UAP || WINUI)\n            var del = _showDelegate;\n            _showDelegate = null;\n  #elif NET4_0_OR_GREATER\n            // Retrieve the delegate.\n            AsyncResult asyncResult = (AsyncResult)result;\n\n            object del = asyncResult.AsyncDelegate;\n  #else // NET6_0_OR_GREATER\n            object del;\n            throw new NotImplementedException();\n  #endif\n\n            if (del is ShowSelectorAsynchronousShow)\n                return (del as ShowSelectorAsynchronousShow).EndInvoke(result);\n            else if (del is ShowSelectorAsynchronousShow2)\n                return (del as ShowSelectorAsynchronousShow2).EndInvoke(result);\n            else\n                throw new ArgumentException(\"result\");\n#endif\n        }\n\n        // The MonoTouch AOT cannot deal with nullable types in a delegate\n        // (or at least not the straightforward implementation), so we\n        // define two delegate types.\n        public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount);\n        public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount);\n\n        public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName);\n\n\n        private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(player, sizeInBytes, directoryCount);\n        }\n\n        private StorageDevice Show(int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(null, sizeInBytes, directoryCount);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.WindowsDX/ConcreteStorageContainer.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    //\tImplementation on Windows\n    //\t\n    //\tUser storage is in the My Documents folder of the user who is currently logged in, in the SavedGames folder. \n    //\tA subfolder is created for each game according to the titleName passed to the BeginOpenContainer method. \n    //\tWhen no PlayerIndex is specified, content is saved in the AllPlayers folder. When a PlayerIndex is specified, \n    //\tthe content is saved in the Player1, Player2, Player3, or Player4 folder, depending on which PlayerIndex \n    //\twas passed to BeginShowSelector.\n\n    internal sealed class ConcreteStorageContainer : StorageContainerStrategy\n    {\n        public override string DisplayName\n        {\n            get { return base.DisplayName; }\n        }\n\n        internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name)\n        {\n            string saved = \"\";\n\n            string root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n            saved = Path.Combine(root,\"SavedGames\");\n\n            StoragePath = Path.Combine(saved, name);\n\n            string playerSave = string.Empty;\n            if (playerIndex.HasValue)\n                playerSave = Path.Combine(StoragePath, \"Player\" + (int)playerIndex.Value);\n            \n            if (!string.IsNullOrEmpty(playerSave))\n                StoragePath = Path.Combine(StoragePath, \"Player\" + (int)playerIndex);\n\n            if (!Directory.Exists(StoragePath))\n                Directory.CreateDirectory(StoragePath);\n        }\n\n\n        public override void CreateDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            if (!Directory.Exists(dirPath))\n            {\n                Directory.CreateDirectory(dirPath);\n            }\n        }\n\n        public override Stream CreateFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // return A new file with read/write access.\n            return File.Create(filePath);\n        }\n\n        public override void DeleteDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            // Now let's try to delete it\n            Directory.Delete(dirPath);\n        }\n\n        public override void DeleteFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // Now let's try to delete it\n            File.Delete(filePath);\n        }\n\n        public override bool DirectoryExists(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            return Directory.Exists(dirPath);\n        }\n\n        public override bool FileExists(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // return A new file with read/write access.\n            return File.Exists(filePath);\n        }\n\n        public override string[] GetDirectoryNames()\n        {\n            return Directory.GetDirectories(StoragePath);\n        }\n\n        public override string[] GetDirectoryNames(string searchPattern)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetFileNames()\n        {\n            return Directory.GetFiles(StoragePath);\n        }\n\n        public override string[] GetFileNames(string searchPattern)\n        {\n            return Directory.GetFiles(StoragePath, searchPattern);\n        }\n\n        public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            return File.Open(filePath, fileMode, fileAccess, fileShare);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.WindowsDX/ConcreteStorageDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageDevice : StorageDeviceStrategy\n    {\n\n        public override long FreeSpace\n        {\n            get\n            {\n                return new DriveInfo(GetDevicePath).AvailableFreeSpace;\n            }\n        }\n\n        public override bool IsConnected\n        {\n            get\n            {\n                return new DriveInfo(GetDevicePath).IsReady;\n            }\n        }\n\n        public override long TotalSpace\n        {\n            get\n            {\n                // Not sure if this should be TotalSize or TotalFreeSize\n                return new DriveInfo(GetDevicePath).TotalSize;\n            }\n        }\n\n        public override string GetDevicePath\n        {\n            get\n            {\n                // We may not need to store the StorageContainer in the future\n                // when we get DeviceChanged events working.\n                if (StorageContainer == null)\n                {\n                    return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n                }\n                else\n                {\n                    return ((IPlatformStorageContainer)StorageContainer).GetStrategy<StorageContainerStrategy>().StoragePath;\n                }\n            }\n        }\n\n\n        internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount)\n        {\n        }\n\n\n        public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state)\n        {\n            try\n            {\n                ConcreteStorageService.OpenContainerAsynchronous AsynchronousOpen = new ConcreteStorageService.OpenContainerAsynchronous(Open);\n                return AsynchronousOpen.BeginInvoke(storageDevice, displayName, callback, state);\n            }\n            finally\n            {\n            }\n        }\n\n        public override StorageContainer EndOpenContainer(IAsyncResult result)\n        {\n            StorageContainer returnValue = null;\n            try\n            {\n#if NET4_0_OR_GREATER\n                // Retrieve the delegate.\n                AsyncResult asyncResult = result as AsyncResult;\n                if (asyncResult != null)\n                {\n                    ConcreteStorageService.OpenContainerAsynchronous asyncDelegate = asyncResult.AsyncDelegate as ConcreteStorageService.OpenContainerAsynchronous;\n\n                    // Wait for the WaitHandle to become signaled.\n                    result.AsyncWaitHandle.WaitOne();\n\n                    // Call EndInvoke to retrieve the results.\n                    if (asyncDelegate != null)\n                        returnValue = asyncDelegate.EndInvoke(result);\n                }\n#else // NET6_0_OR_GREATER\n                throw new NotImplementedException();\n#endif\n            }\n            finally\n            {\n                // Close the wait handle.\n                result.AsyncWaitHandle.Dispose();\n            }\n            \n            return returnValue;\n        }\n\n        public override void DeleteContainer(string titleName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override StorageContainer Open(StorageDevice storageDevice, string displayName)\n        {\n            StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player);\n            StorageContainer = storageContainer;\n\n            return storageContainer;\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.WindowsDX/ConcreteStorageFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageFactory : StorageFactory\n    {\n\n        public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex)\n        {\n            return new ConcreteStorageContainer(name, playerIndex);\n        }\n\n        public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount)\n        {\n            return new ConcreteStorageDevice(player, directoryCount);\n        }\n\n        public override StorageServiceStrategy CreateStorageServiceStrategy()\n        {\n            return new ConcreteStorageService();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.WindowsDX/ConcreteStorageService.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageService : StorageServiceStrategy\n    {\n\n        internal ConcreteStorageService()\n        {\n        }\n\n        public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            ShowSelectorAsynchronousShow del = new ShowSelectorAsynchronousShow(Show);\n            return del.BeginInvoke(player, sizeInBytes, directoryCount, callback, state);\n        }\n\n        public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            ShowSelectorAsynchronousShow2 del = new ShowSelectorAsynchronousShow2(Show);\n            return del.BeginInvoke(sizeInBytes, directoryCount, callback, state);\n        }\n\n        public override StorageDevice EndShowSelector(IAsyncResult result)\n        {\n            if (!result.IsCompleted)\n            {\n                try\n                {\n                    result.AsyncWaitHandle.WaitOne();\n                }\n                finally\n                {\n                }\n            }\n\n  #if NET4_0_OR_GREATER\n            // Retrieve the delegate.\n            AsyncResult asyncResult = (AsyncResult)result;\n            object del = asyncResult.AsyncDelegate;\n  #else // NET6_0_OR_GREATER\n            object del;\n            throw new NotImplementedException();\n  #endif\n\n            if (del is ShowSelectorAsynchronousShow)\n                return (del as ShowSelectorAsynchronousShow).EndInvoke(result);\n            else if (del is ShowSelectorAsynchronousShow2)\n                return (del as ShowSelectorAsynchronousShow2).EndInvoke(result);\n            else\n                throw new ArgumentException(\"result\");\n        }\n\n        // The MonoTouch AOT cannot deal with nullable types in a delegate\n        // (or at least not the straightforward implementation), so we\n        // define two delegate types.\n        public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount);\n        public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount);\n\n        public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName);\n\n\n        private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(player, sizeInBytes, directoryCount);\n        }\n\n        private StorageDevice Show(int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(null, sizeInBytes, directoryCount);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.iOS/ConcreteStorageContainer.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageContainer : StorageContainerStrategy\n    {\n        public override string DisplayName\n        {\n            get { return base.DisplayName; }\n        }\n\n        internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name)\n        {\n            string saved = \"\";\n\n            string root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n            saved = Path.Combine(root,\"SavedGames\");\n            StoragePath = Path.Combine(saved, name);\n\n            string playerSave = string.Empty;\n            if (playerIndex.HasValue)\n                playerSave = Path.Combine(StoragePath, \"Player\" + (int)playerIndex.Value);\n            \n            if (!string.IsNullOrEmpty(playerSave))\n                StoragePath = Path.Combine(StoragePath, \"Player\" + (int)playerIndex);\n\n            if (!Directory.Exists(StoragePath))\n                Directory.CreateDirectory(StoragePath);\n        }\n\n\n        public override void CreateDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            if (!Directory.Exists(dirPath))\n            {\n                Directory.CreateDirectory(dirPath);\n            }\n        }\n\n        public override Stream CreateFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // return A new file with read/write access.\n            return File.Create(filePath);\n        }\n\n        public override void DeleteDirectory(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            // Now let's try to delete it\n            Directory.Delete(dirPath);\n        }\n\n        public override void DeleteFile(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // Now let's try to delete it\n            File.Delete(filePath);\n        }\n\n        public override bool DirectoryExists(string directory)\n        {\n            // relative so combine with our path\n            string dirPath = Path.Combine(StoragePath, directory);\n\n            return Directory.Exists(dirPath);\n        }\n\n        public override bool FileExists(string file)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            // return A new file with read/write access.\n            return File.Exists(filePath);\n        }\n\n        public override string[] GetDirectoryNames()\n        {\n            return Directory.GetDirectories(StoragePath);\n        }\n\n        public override string[] GetDirectoryNames(string searchPattern)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string[] GetFileNames()\n        {\n            return Directory.GetFiles(StoragePath);\n        }\n\n        public override string[] GetFileNames(string searchPattern)\n        {\n            return Directory.GetFiles(StoragePath, searchPattern);\n        }\n\n        public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)\n        {\n            // relative so combine with our path\n            string filePath = Path.Combine(StoragePath, file);\n\n            return File.Open(filePath, fileMode, fileAccess, fileShare);\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.iOS/ConcreteStorageDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageDevice : StorageDeviceStrategy\n    {\n\n        public override long FreeSpace\n        {\n            get\n            {\n                return new DriveInfo(GetDevicePath).AvailableFreeSpace;\n            }\n        }\n\n        public override bool IsConnected\n        {\n            get\n            {\n                return new DriveInfo(GetDevicePath).IsReady;\n            }\n        }\n\n        public override long TotalSpace\n        {\n            get\n            {\n                // Not sure if this should be TotalSize or TotalFreeSize\n                return new DriveInfo(GetDevicePath).TotalSize;\n            }\n        }\n\n        public override string GetDevicePath\n        {\n            get\n            {\n                // We may not need to store the StorageContainer in the future\n                // when we get DeviceChanged events working.\n                if (StorageContainer == null)\n                {\n                    return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\n                }\n                else\n                {\n                    return ((IPlatformStorageContainer)StorageContainer).GetStrategy<StorageContainerStrategy>().StoragePath;\n                }\n            }\n        }\n\n\n        internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount)\n        {\n        }\n\n\n        public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state)\n        {\n            TaskCompletionSource<StorageContainer> tcs = new TaskCompletionSource<StorageContainer>(state);\n            Task<StorageContainer> task = Task.Run<StorageContainer>(() => Open(storageDevice, displayName));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n        }\n\n        public override StorageContainer EndOpenContainer(IAsyncResult result)\n        {\n            try\n            {\n                return ((Task<StorageContainer>)result).Result;\n            }\n            catch (AggregateException ex)\n            {\n                throw;\n            }\n        }\n\n        public override void DeleteContainer(string titleName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override StorageContainer Open(StorageDevice storageDevice, string displayName)\n        {\n            StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player);\n            StorageContainer = storageContainer;\n\n            return storageContainer;\n        }\n    }\n}"
  },
  {
    "path": "Platforms/Storage/.iOS/ConcreteStorageFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageFactory : StorageFactory\n    {\n\n        public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex)\n        {\n            return new ConcreteStorageContainer(name, playerIndex);\n        }\n\n        public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount)\n        {\n            return new ConcreteStorageDevice(player, directoryCount);\n        }\n\n        public override StorageServiceStrategy CreateStorageServiceStrategy()\n        {\n            return new ConcreteStorageService();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Storage/.iOS/ConcreteStorageService.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nusing System.Threading.Tasks;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    internal sealed class ConcreteStorageService : StorageServiceStrategy\n    {\n\n        internal ConcreteStorageService()\n        {\n        }\n\n        public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            TaskCompletionSource<StorageDevice> tcs = new TaskCompletionSource<StorageDevice>(state);\n            Task<StorageDevice> task = Task.Run<StorageDevice>(() => Show(player, sizeInBytes, directoryCount));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n        }\n\n        public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            TaskCompletionSource<StorageDevice> tcs = new TaskCompletionSource<StorageDevice>(state);\n            Task<StorageDevice> task = Task.Run<StorageDevice>(() => Show(sizeInBytes, directoryCount));\n            task.ContinueWith((t) =>\n            {\n                // Copy the task result into the returned task.\n                if (t.IsFaulted)\n                    tcs.TrySetException(t.Exception.InnerExceptions);\n                else if (t.IsCanceled)\n                    tcs.TrySetCanceled();\n                else\n                    tcs.TrySetResult(t.Result);\n\n                // Invoke the user callback if necessary.\n                if (callback != null)\n                    callback(tcs.Task);\n            });\n            return tcs.Task;\n        }\n\n        public override StorageDevice EndShowSelector(IAsyncResult result)\n        {\n            try\n            {\n                return ((Task<StorageDevice>)result).Result;\n            }\n            catch (AggregateException ex)\n            {\n                throw;\n            }\n        }\n\n        // The MonoTouch AOT cannot deal with nullable types in a delegate\n        // (or at least not the straightforward implementation), so we\n        // define two delegate types.\n        public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount);\n        public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount);\n\n        public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName);\n\n\n        private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(player, sizeInBytes, directoryCount);\n        }\n\n        private StorageDevice Show(int sizeInBytes, int directoryCount)\n        {\n            return base.CreateStorageDevice(null, sizeInBytes, directoryCount);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/.Android/FuncLoader.cs",
    "content": "using System;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Android.App;\n\nnamespace Microsoft.Xna.Platform.Utilities\n{\n    internal class FuncLoader\n    {\n        [DllImport(\"dl\")]\n        public static extern IntPtr dlopen(string path, int flags);\n\n        [DllImport(\"dl\")]\n        public static extern IntPtr dlsym(IntPtr handle, string symbol);\n\n        private const int RTLD_LAZY = 0x0001;\n\n        public static IntPtr LoadLibrary(string libname)\n        {\n            // Let the OS search for the library by default.\n            IntPtr lib = dlopen(libname, RTLD_LAZY);\n            if (lib != IntPtr.Zero)\n            {\n                Console.WriteLine(\"FuncLoader.LoadLibrary {0}\", libname);\n                return lib;\n            }\n\n            // Some Android devices won't search the native library path\n            // for the library, so we have to do it manually here.\n            var nlibpath = Application.Context.ApplicationInfo.NativeLibraryDir;\n            var libpath = Path.Combine(nlibpath, libname);\n            lib = dlopen(libpath, RTLD_LAZY);\n            if (lib != IntPtr.Zero)\n            {\t\n                Console.WriteLine(\"FuncLoader.LoadLibrary {0}\", libpath);\n                return lib;\n            }\n\n            Console.WriteLine(\"FuncLoader.LoadLibrary {0} Not Found!\", libname);\n            return IntPtr.Zero;\n        }\n\n        public static T LoadFunction<T>(IntPtr library, string function)\n        {\n            IntPtr funcAddress = dlsym(library, function);\n\n            if (funcAddress != IntPtr.Zero)\n                return InteropHelpers.GetDelegateForFunctionPointer<T>(funcAddress);\n\n            throw new EntryPointNotFoundException(\"Entry point not found for function '\" + function + \"'.\");\n        }\n\n        public static T LoadFunctionOrNull<T>(IntPtr library, string function)\n        {\n            IntPtr funcAddress = dlsym(library, function);\n\n            if (funcAddress != IntPtr.Zero)\n                return InteropHelpers.GetDelegateForFunctionPointer<T>(funcAddress);\n\n            return default(T);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/.SDL2/FuncLoader.cs",
    "content": "using System;\nusing System.IO;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Platform.Utilities\n{\n    internal class FuncLoader\n    {\n        private class Windows\n        {\n            [DllImport(\"kernel32\", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]\n            public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);\n\n            [DllImport(\"kernel32\", SetLastError = true, CharSet = CharSet.Unicode)]\n            public static extern IntPtr LoadLibraryW(string lpszLib);\n        }\n\n        private class Linux\n        {\n            [DllImport(\"libdl.so.2\")]\n            public static extern IntPtr dlopen(string path, int flags);\n\n            [DllImport(\"libdl.so.2\")]\n            public static extern IntPtr dlsym(IntPtr handle, string symbol);\n        }\n\n        private class OSX\n        {\n            [DllImport(\"/usr/lib/libSystem.dylib\")]\n            public static extern IntPtr dlopen(string path, int flags);\n\n            [DllImport(\"/usr/lib/libSystem.dylib\")]\n            public static extern IntPtr dlsym(IntPtr handle, string symbol);\n        }\n        \n        private const int RTLD_LAZY = 0x0001;\n\n        public static IntPtr LoadLibraryExt(string libname)\n        {\n            IntPtr ret = IntPtr.Zero;\n\n#if NET40 || NET45 || NET40_OR_GREATER\n            string appDirectory = typeof(FuncLoader).Assembly.Location;\n#else // NETSTANDARD2_0_OR_GREATER || NET6_0_OR_GREATER\n            string appDirectory = AppContext.BaseDirectory;\n#endif\n            appDirectory = Path.GetDirectoryName(appDirectory);\n            appDirectory = appDirectory ?? \"./\";\n\n            // Try .NET Framework / mono locations\n            if (CurrentPlatform.OS == OS.MacOSX)\n            {\n                ret = LoadLibrary(Path.Combine(appDirectory, libname));\n\n                // Look in Frameworks for .app bundles\n                if (ret == IntPtr.Zero)\n                    ret = LoadLibrary(Path.Combine(appDirectory, \"..\", \"Frameworks\", libname));\n            }\n            else\n            {\n                if (Environment.Is64BitProcess)\n                    ret = LoadLibrary(Path.Combine(appDirectory, \"x64\", libname));\n                else\n                    ret = LoadLibrary(Path.Combine(appDirectory, \"x86\", libname));\n            }\n\n            // Try .NET Core development locations\n            if (ret == IntPtr.Zero)\n                ret = LoadLibrary(Path.Combine(appDirectory, \"runtimes\", CurrentPlatform.Rid, \"native\", libname));\n\n            // Try current folder (.NET Core will copy it there after publish)\n            if (ret == IntPtr.Zero)\n                ret = LoadLibrary(Path.Combine(appDirectory, libname));\n\n            // Try alternate way of checking current folder\n            // assemblyLocation is null if we are inside macOS app bundle\n            if (ret == IntPtr.Zero)\n                ret = LoadLibrary(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, libname));\n\n            // Try loading system library\n            if (ret == IntPtr.Zero)\n                ret = LoadLibrary(libname);\n\n            // Welp, all failed, PANIC!!!\n            if (ret == IntPtr.Zero)\n                throw new Exception(\"Failed to load library: \" + libname);\n\n            return ret;\n        }\n\n        public static IntPtr LoadLibrary(string libname)\n        {\n            if (CurrentPlatform.OS == OS.Windows)\n                return Windows.LoadLibraryW(libname);\n\n            if (CurrentPlatform.OS == OS.MacOSX)\n                return OSX.dlopen(libname, RTLD_LAZY);\n\n            return Linux.dlopen(libname, RTLD_LAZY);\n        }\n\n        public static T LoadFunction<T>(IntPtr library, string function)\n        {\n            IntPtr funcAddress = IntPtr.Zero;\n\n            if (CurrentPlatform.OS == OS.Windows)\n                funcAddress = Windows.GetProcAddress(library, function);\n            else if (CurrentPlatform.OS == OS.MacOSX)\n                funcAddress = OSX.dlsym(library, function);\n            else\n                funcAddress = Linux.dlsym(library, function);\n\n            if (funcAddress != IntPtr.Zero)\n                return InteropHelpers.GetDelegateForFunctionPointer<T>(funcAddress);\n\n            throw new EntryPointNotFoundException(\"Entry point not found for function '\" + function + \"'.\");\n        }\n\n        public static T LoadFunctionOrNull<T>(IntPtr library, string function)\n        {\n            IntPtr funcAddress = IntPtr.Zero;\n\n            if (CurrentPlatform.OS == OS.Windows)\n                funcAddress = Windows.GetProcAddress(library, function);\n            else if (CurrentPlatform.OS == OS.MacOSX)\n                funcAddress = OSX.dlsym(library, function);\n            else\n                funcAddress = Linux.dlsym(library, function);\n\n            if (funcAddress != IntPtr.Zero)\n                return InteropHelpers.GetDelegateForFunctionPointer<T>(funcAddress);\n\n            return default(T);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/.iOS/FuncLoader.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\nusing ObjCRuntime;\n\nnamespace Microsoft.Xna.Platform.Utilities\n{\n    internal class FuncLoader\n    {\n        public static IntPtr LoadLibrary(string libname)\n        {\n            return Dlfcn.dlopen(libname, 0);\n        }\n\n        public static T LoadFunction<T>(IntPtr library, string function)\n        {\n            IntPtr funcAddress = Dlfcn.dlsym(library, function);\n\n            if (funcAddress != IntPtr.Zero)\n                return InteropHelpers.GetDelegateForFunctionPointer<T>(funcAddress);\n\n            throw new EntryPointNotFoundException(\"Entry point not found for function '\" + function + \"'.\");\n        }\n\n        public static T LoadFunctionOrNull<T>(IntPtr library, string function)\n        {\n            IntPtr funcAddress = Dlfcn.dlsym(library, function);\n\n            if (funcAddress != IntPtr.Zero)\n                return InteropHelpers.GetDelegateForFunctionPointer<T>(funcAddress);\n\n            return default(T);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/AssemblyHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Reflection;\n\nnamespace Microsoft.Xna.Platform.Utilities\n{\n    internal static class AssemblyHelper\n    {\n        public static string GetDefaultWindowTitle()\n        {\n            // When running NUnit tests entry assembly can return null.\n            var entryAssembly = Assembly.GetEntryAssembly();\n            if (entryAssembly != null)\n            {\n                // Use the Title attribute of the Assembly if possible.\n                try\n                {\n                    AssemblyTitleAttribute assemblyTitleAttrib = ((AssemblyTitleAttribute)Attribute.GetCustomAttribute(entryAssembly, typeof(AssemblyTitleAttribute)));\n                    if (assemblyTitleAttrib != null)\n                    {\n                        if (!string.IsNullOrEmpty(assemblyTitleAttrib.Title))\n                            return assemblyTitleAttrib.Title;\n                    }\n                }\n                catch { /* Nope, wasn't possible */ }\n\n                // Otherwise, fallback to the Name of the assembly.\n                return entryAssembly.GetName().Name;\n            }\n\n            return string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/CurrentPlatform.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Runtime.InteropServices;\nusing System;\n\nnamespace Microsoft.Xna.Platform.Utilities\n{\n    internal enum OS\n    {\n        Windows,\n        Linux,\n        MacOSX,\n        Unknown\n    }\n\n    internal static class CurrentPlatform\n    {\n        private static bool _init = false;\n        private static OS _os;\n\n        [DllImport(\"libc\")]\n        static extern int uname(IntPtr buf);\n\n        private static void Init()\n        {\n            if (_init)\n                return;\n\n            var pid = Environment.OSVersion.Platform;\n\n            switch (pid)\n            {\n                case PlatformID.Win32NT:\n                case PlatformID.Win32S:\n                case PlatformID.Win32Windows:\n                case PlatformID.WinCE:\n                    _os = OS.Windows;\n                    break;\n                case PlatformID.MacOSX:\n                    _os = OS.MacOSX;\n                    break;\n                case PlatformID.Unix:\n                    _os = OS.MacOSX;\n\n                    var buf = IntPtr.Zero;\n                    \n                    try\n                    {\n                        buf = Marshal.AllocHGlobal(8192);\n\n                        if (uname(buf) == 0 && Marshal.PtrToStringAnsi(buf) == \"Linux\")\n                            _os = OS.Linux;\n                    }\n                    catch\n                    {\n                    }\n                    finally\n                    {\n                        if (buf != IntPtr.Zero)\n                            Marshal.FreeHGlobal(buf);\n                    }\n\n                    break;\n                default:\n                    _os = OS.Unknown;\n                    break;\n            }\n\n            _init = true;\n        }\n\n        public static OS OS\n        {\n            get\n            {\n                Init();\n                return _os;\n            }\n        }\n\n        public static string Rid\n        {\n            get\n            {\n                if (CurrentPlatform.OS == OS.Windows && Environment.Is64BitProcess)\n                    return \"win-x64\";\n                else if (CurrentPlatform.OS == OS.Windows && !Environment.Is64BitProcess)\n                    return \"win-x86\";\n                else if (CurrentPlatform.OS == OS.Linux)\n                    return \"linux-x64\";\n                else if (CurrentPlatform.OS == OS.MacOSX)\n                    return \"osx\";\n                else\n                    return \"unknown\";\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/Utilities/InteropHelpers.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Text;\n\nnamespace Microsoft.Xna.Platform.Utilities\n{\n    internal static class InteropHelpers\n    {\n        /// <summary>\n        /// Convert a pointer to a Utf8 null-terminated string to a .NET System.String\n        /// </summary>\n        public static unsafe string Utf8ToString(IntPtr handle)\n        {\n            if (handle == IntPtr.Zero)\n                return string.Empty;\n\n            var ptr = (byte*) handle;\n            while (*ptr != 0)\n                ptr++;\n\n            var len = ptr - (byte*) handle;\n            if (len == 0)\n                return string.Empty;\n\n            var bytes = new byte[len];\n            Marshal.Copy(handle, bytes, 0, bytes.Length);\n\n            return Encoding.UTF8.GetString(bytes);\n        }\n\n        internal static TDelegate GetDelegateForFunctionPointer<TDelegate>(IntPtr ptr)\n        {\n#if NET40 || NET45 || NET40_OR_GREATER\n            return (TDelegate)(object)Marshal.GetDelegateForFunctionPointer(ptr, typeof(TDelegate));\n#else\n            return Marshal.GetDelegateForFunctionPointer<TDelegate>(ptr);\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/MemCopyHelper.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Platform.Utilities\n{\n    internal static class MemCopyHelper\n    {\n\n#if WINDOWSDX\n        [DllImport(\"kernel32.dll\", EntryPoint = \"RtlMoveMemory\", SetLastError = false)]\n        static extern void RtlMoveMemory(IntPtr destination, IntPtr source, uint count);\n#endif\n\n        public unsafe static void MemoryCopy<T>(T[] data, IntPtr dstPtr, int startIndex, int count) where T : struct\n        {\n            int elementSizeInBytes = sizeof(T);\n\n            fixed (T* pData = &data[0])\n            {\n                IntPtr srcPtr = (IntPtr)pData;\n                srcPtr = srcPtr + startIndex * elementSizeInBytes;\n\n                int sizeInBytes = count * elementSizeInBytes;\n\n                MemoryCopy(srcPtr, dstPtr, sizeInBytes);\n            }\n        }\n\n        unsafe public static void MemoryCopy(IntPtr srcPtr, IntPtr dstPtr, int count)\n        {\n#if NET6_0_OR_GREATER || NETSTANDARD2_0\n               Buffer.MemoryCopy((void*)srcPtr, (void*)dstPtr, count, count);\n#else\n\n#if WINDOWSDX\n            if (count >= 64)\n            {\n                RtlMoveMemory(dstPtr, srcPtr, (uint)count);\n                return;\n            }\n#endif\n\n            byte* dst = (byte*)dstPtr;\n            byte* src = (byte*)srcPtr;\n            int len = count;\n\n            while (len >= 8)\n            {\n                *((long*)dst) = *((long*)src);\n                dst += 8; src += 8;\n                len -= 8;\n            }\n            while (len >= 4)\n            {\n                *((int*)dst) = *((int*)src);\n                dst += 4; src += 4;\n                len -= 4;\n            }\n            while (len > 0)\n            {\n                *((byte*)dst) = *((byte*)src);\n                dst += 1; src += 1;\n                len -= 1;\n            }\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/Png/PngCommon.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform.Graphics.Utilities.Png\n{\n    internal class Palette\n    {\n        private IList<Color> _colors;\n\n        internal Palette()\n        {\n            _colors = new List<Color>();\n        }\n\n        internal Color this[int index]\n        {\n            get\n            {\n                return _colors[index];\n            }\n        }\n\n        internal void AddColor(Color color)\n        {\n            _colors.Add(color);\n        }\n\n        internal void AddAlphaToColorAtIndex(int colorIndex, byte alpha)\n        {\n            var oldColor = _colors[colorIndex];\n\n            _colors[colorIndex] = new Color(oldColor.R, oldColor.G, oldColor.B, alpha);\n        }\n\n        internal void AddAlphaToColors(IList<byte> alphas)\n        {\n            for (int i = 0; i < alphas.Count; i++)\n            {\n                AddAlphaToColorAtIndex(i, alphas[i]);\n            }\n        }\n    }\n\n    #region Chunks\n\n    internal class PngChunk\n    {\n        internal PngChunk()\n        {\n            this.Data = new byte[0];\n        }\n\n        /// <summary>\n        /// Length of Data field\n        /// </summary>\n        internal uint Length\n        {\n            get;\n            set;\n        }\n\n        internal string Type\n        {\n            get;\n            set;\n        }\n\n        private bool Ancillary\n        {\n            get;\n            set;\n        }\n\n        private bool Private\n        {\n            get;\n            set;\n        }\n\n        private bool Reserved\n        {\n            get;\n            set;\n        }\n\n        private bool SafeToCopy\n        {\n            get;\n            set;\n        }\n\n        internal byte[] Data\n        {\n            get;\n            set;\n        }\n\n        /// <summary>\n        /// CRC of both Type and Data fields, but not Length field\n        /// </summary>\n        internal uint Crc\n        {\n            get;\n            set;\n        }\n\n        internal virtual void Decode(byte[] chunkBytes)\n        {\n            var chunkBytesList = chunkBytes.ToList();\n\n            this.Length = chunkBytesList.GetRange(0, 4).ToArray().ToUInt();\n            DecodeType(chunkBytesList.GetRange(4, 4).ToArray());\n            this.Data = chunkBytesList.GetRange(8, (int)this.Length).ToArray();\n            this.Crc = chunkBytesList.GetRange((int)(8 + this.Length), 4).ToArray().ToUInt();\n\n            if (CrcCheck() == false)\n            {\n                throw new Exception(\"CRC check failed.\");\n            }\n        }\n\n        internal virtual byte[] Encode()\n        {\n            var result = new List<byte>();\n\n            uint dataLength = (uint)this.Data.Length;\n            uint dataCrc = PngCrc.Calculate(InputToCrcCheck());\n\n            result.AddRange(dataLength.ToByteArray());\n            result.AddRange(GetChunkTypeBytes(this.Type));\n            result.AddRange(this.Data);\n            result.AddRange(dataCrc.ToByteArray());\n\n            return result.ToArray();\n        }\n\n        private void DecodeType(byte[] typeBytes)\n        {\n            this.Type = PngChunk.GetChunkTypeString(typeBytes);\n\n            var bitArray = new BitArray(typeBytes);\n\n            this.Ancillary = bitArray[4];\n            this.Private = bitArray[9];\n            this.Reserved = bitArray[14];\n            this.SafeToCopy = bitArray[19];\n        }\n\n        private bool CrcCheck()\n        {\n            var crcInputBytes = InputToCrcCheck();\n\n            return (PngCrc.Calculate(crcInputBytes) == this.Crc);\n        }\n\n        private byte[] InputToCrcCheck()\n        {\n            byte[] chunkTypeBytes = GetChunkTypeBytes(this.Type);\n            return chunkTypeBytes.Concat(this.Data).ToArray();\n        }\n\n        internal static string GetChunkTypeString(byte[] chunkTypeBytes)\n        {\n            return Encoding.UTF8.GetString(chunkTypeBytes, 0, chunkTypeBytes.Length);\n        }\n\n        private static byte[] GetChunkTypeBytes(string chunkTypeString)\n        {\n            return Encoding.UTF8.GetBytes(chunkTypeString);\n        }\n    }\n\n    internal class HeaderChunk : PngChunk\n    {\n        private static byte[] pngSignature = new byte[] { 137, 80, 78, 71, 13, 10, 26, 10 };\n        \n        internal HeaderChunk()\n        {\n            base.Type = \"IHDR\";\n        }\n\n        internal uint Width\n        {\n            get;\n            set;\n        }\n\n        internal uint Height\n        {\n            get;\n            set;\n        }\n\n        internal byte BitDepth\n        {\n            get;\n            set;\n        }\n\n        internal ColorType ColorType\n        {\n            get;\n            set;\n        }\n\n        internal byte CompressionMethod\n        {\n            get;\n            set;\n        }\n\n        internal byte FilterMethod\n        {\n            get;\n            set;\n        }\n\n        internal byte InterlaceMethod\n        {\n            get;\n            set;\n        }\n\n        internal static byte[] PngSignature\n        {\n            get { return pngSignature; }\n        }\n\n        internal override void Decode(byte[] chunkBytes)\n        {\n            base.Decode(chunkBytes);\n            var chunkData = base.Data;\n\n            this.Width = chunkData.Take(4).ToArray().ToUInt();\n            this.Height = chunkData.Skip(4).Take(4).ToArray().ToUInt();\n            this.BitDepth = chunkData.Skip(8).First();\n            this.ColorType = (ColorType)chunkData.Skip(9).First();\n            this.CompressionMethod = chunkData.Skip(10).First();\n            this.FilterMethod = chunkData.Skip(11).First();\n            this.InterlaceMethod = chunkData.Skip(12).First();\n\n            if (this.BitDepth < 8)\n            {\n                throw new Exception(String.Format(\"Bit depth less than 8 bits per sample is unsupported.  Image bit depth is {0} bits per sample.\", this.BitDepth));\n            }\n        }\n\n        internal override byte[] Encode()\n        {\n            var chunkData = new List<byte>();\n\n            chunkData.AddRange(this.Width.ToByteArray().ToList());\n            chunkData.AddRange(this.Height.ToByteArray().ToList());\n            chunkData.Add(this.BitDepth);\n            chunkData.Add((byte)this.ColorType);\n            chunkData.Add(this.CompressionMethod);\n            chunkData.Add(this.FilterMethod);\n            chunkData.Add(this.InterlaceMethod);\n\n            base.Data = chunkData.ToArray();\n\n            return base.Encode();\n        }\n    }\n\n    internal class PaletteChunk : PngChunk\n    {\n        internal PaletteChunk()\n        {\n            base.Type = \"PLTE\";\n            this.Palette = new Palette();\n        }\n\n        internal Palette Palette\n        {\n            get;\n            set;\n        }\n\n        internal override void Decode(byte[] chunkBytes)\n        {\n            base.Decode(chunkBytes);\n            var chunkData = base.Data;\n\n            if (chunkData.Length % 3 != 0)\n            {\n                throw new Exception(\"Malformed palette chunk - length not multiple of 3.\");\n            }\n\n            for (int i = 0; i < chunkData.Length / 3; i++)\n            {\n                byte red = chunkData.Skip(3 * i).Take(1).First();\n                byte green = chunkData.Skip((3 * i) + 1).Take(1).First();\n                byte blue = chunkData.Skip((3 * i) + 2).Take(1).First();\n\n                this.Palette.AddColor(new Color(red, green, blue));\n            }\n        }\n    }\n\n    internal class TransparencyChunk : PngChunk\n    {\n        internal TransparencyChunk()\n        {\n            base.Type = \"tRNS\";\n            this.PaletteTransparencies = new List<byte>();\n        }\n\n        internal IList<byte> PaletteTransparencies\n        {\n            get;\n            set;\n        }\n\n        internal override void Decode(byte[] chunkBytes)\n        {\n            base.Decode(chunkBytes);\n            var chunkData = base.Data;\n\n            this.PaletteTransparencies = chunkData.ToArray();\n        }\n\n        internal override byte[] Encode()\n        {\n            var chunkData = new List<byte>();\n\n\n            base.Data = chunkData.ToArray();\n\n            return base.Encode();\n        }\n    }\n\n    internal class DataChunk : PngChunk\n    {\n        internal DataChunk()\n        {\n            base.Type = \"IDAT\";\n        }\n    }\n\n    internal class EndChunk : PngChunk\n    {\n        internal EndChunk()\n        {\n            base.Type = \"IEND\";\n        }\n    }\n\n    #endregion\n    \n    #region Enumerations\n\n    internal enum ColorType\n    {\n        Grayscale = 0,\n        Rgb = 2,\n        Palette = 3,\n        GrayscaleWithAlpha = 4,\n        RgbWithAlpha = 6\n    }\n\n    internal enum FilterType\n    {\n        None = 0,\n        Sub = 1,\n        Up = 2,\n        Average = 3,\n        Paeth = 4\n    }\n\n    #endregion\n\n    #region Filters\n\n    internal static class NoneFilter\n    {\n        internal static byte[] Decode(byte[] scanline)\n        {\n            return scanline;\n        }\n\n        internal static byte[] Encode(byte[] scanline)\n        {\n            var encodedScanline = new byte[scanline.Length + 1];\n\n            encodedScanline[0] = (byte)FilterType.None;\n            scanline.CopyTo(encodedScanline, 1);\n\n            return encodedScanline;\n        }\n    }\n\n    internal static class SubFilter\n    {\n        internal static byte[] Decode(byte[] scanline, int bytesPerPixel)\n        {\n            byte[] result = new byte[scanline.Length];\n\n            for (int x = 1; x < scanline.Length; x++)\n            {\n                byte priorRawByte = (x - bytesPerPixel < 1) ? (byte)0 : result[x - bytesPerPixel];\n\n                result[x] = (byte)((scanline[x] + priorRawByte) % 256);\n            }\n\n            return result;\n        }\n\n        internal static byte[] Encode(byte[] scanline, int bytesPerPixel)\n        {\n            var encodedScanline = new byte[scanline.Length + 1];\n\n            encodedScanline[0] = (byte)FilterType.Sub;\n\n            for (int x = 0; x < scanline.Length; x++)\n            {\n                byte priorRawByte = (x - bytesPerPixel < 0) ? (byte)0 : scanline[x - bytesPerPixel];\n\n                encodedScanline[x + 1] = (byte)((scanline[x] - priorRawByte) % 256);\n            }\n\n            return encodedScanline;\n        }\n    }\n\n    internal static class UpFilter\n    {\n        internal static byte[] Decode(byte[] scanline, byte[] previousScanline)\n        {\n            byte[] result = new byte[scanline.Length];\n\n            for (int x = 1; x < scanline.Length; x++)\n            {\n                byte above = previousScanline[x];\n\n                result[x] = (byte)((scanline[x] + above) % 256);\n            }\n\n            return result;\n        }\n\n        internal static byte[] Encode(byte[] scanline, byte[] previousScanline)\n        {\n            var encodedScanline = new byte[scanline.Length + 1];\n\n            encodedScanline[0] = (byte)FilterType.Up;\n\n            for (int x = 0; x < scanline.Length; x++)\n            {\n                byte above = previousScanline[x];\n\n                encodedScanline[x + 1] = (byte)((scanline[x] - above) % 256);\n            }\n\n            return encodedScanline;\n        }\n    }\n\n    internal static class AverageFilter\n    {\n        internal static byte[] Decode(byte[] scanline, byte[] previousScanline, int bytesPerPixel)\n        {\n            byte[] result = new byte[scanline.Length];\n\n            for (int x = 1; x < scanline.Length; x++)\n            {\n                byte left = (x - bytesPerPixel < 1) ? (byte)0 : result[x - bytesPerPixel];\n                byte above = previousScanline[x];\n\n                result[x] = (byte)((scanline[x] + Average(left, above)) % 256);\n            }\n\n            return result;\n        }\n\n        internal static byte[] Encode(byte[] scanline, byte[] previousScanline, int bytesPerPixel)\n        {\n            var encodedScanline = new byte[scanline.Length + 1];\n\n            encodedScanline[0] = (byte)FilterType.Average;\n\n            for (int x = 0; x < scanline.Length; x++)\n            {\n                byte left = (x - bytesPerPixel < 0) ? (byte)0 : scanline[x - bytesPerPixel];\n                byte above = previousScanline[x];\n\n                encodedScanline[x + 1] = (byte)((scanline[x] - Average(left, above)) % 256);\n            }\n\n            return encodedScanline;\n        }\n\n        private static int Average(byte left, byte above)\n        {\n            return Convert.ToInt32(Math.Floor((left + above) / 2.0));\n        }\n    }\n\n    internal static class PaethFilter\n    {\n        internal static byte[] Decode(byte[] scanline, byte[] previousScanline, int bytesPerPixel)\n        {\n            byte[] result = new byte[scanline.Length];\n\n            for (int x = 1; x < scanline.Length; x++)\n            {\n                byte left = (x - bytesPerPixel < 1) ? (byte)0 : result[x - bytesPerPixel];\n                byte above = previousScanline[x];\n                byte upperLeft = (x - bytesPerPixel < 1) ? (byte)0 : previousScanline[x - bytesPerPixel];\n\n                result[x] = (byte)((scanline[x] + PaethPredictor(left, above, upperLeft)) % 256);\n            }\n\n            return result;\n        }\n\n        internal static byte[] Encode(byte[] scanline, byte[] previousScanline, int bytesPerPixel)\n        {\n            var encodedScanline = new byte[scanline.Length + 1];\n\n            encodedScanline[0] = (byte)FilterType.Paeth;\n\n            for (int x = 0; x < scanline.Length; x++)\n            {\n                byte left = (x - bytesPerPixel < 0) ? (byte)0 : scanline[x - bytesPerPixel];\n                byte above = previousScanline[x];\n                byte upperLeft = (x - bytesPerPixel < 0) ? (byte)0 : previousScanline[x - bytesPerPixel];\n\n                encodedScanline[x + 1] = (byte)((scanline[x] - PaethPredictor(left, above, upperLeft)) % 256);\n            }\n\n            return encodedScanline;\n        }\n\n        private static int PaethPredictor(int a, int b, int c)\n        {\n            int p = a + b - c;\n            int pa = Math.Abs(p - a);\n            int pb = Math.Abs(p - b);\n            int pc = Math.Abs(p - c);\n\n            if ((pa <= pb) && (pa <= pc))\n            {\n                return a;\n            }\n            else\n            {\n                if (pb <= pc)\n                {\n                    return b;\n                }\n                else\n                {\n                    return c;\n                }\n            }\n        }\n    }\n\n    #endregion\n\n    internal static class PngCrc\n    {\n        // table of CRCs of all 8-bit messages\n        private static uint[] crcTable = null;\n\n        static PngCrc()\n        {\n            BuildCrcTable();\n        }\n\n        /// <summary>\n        /// Build CRC lookup table for performance (once-off)\n        /// </summary>\n        private static void BuildCrcTable()\n        {\n            crcTable = new uint[256];\n\n            uint c, n, k;\n\n            for (n = 0; n < 256; n++)\n            {\n                c = n;\n\n                for (k = 0; k < 8; k++)\n                {\n                    if ((c & 1) > 0)\n                    {\n                        c = 0xedb88320 ^ (c >> 1);\n                    }\n                    else\n                    {\n                        c = c >> 1;\n                    }\n                }\n\n                crcTable[n] = c;\n            }\n        }\n\n        internal static uint Calculate(byte[] bytes)\n        {\n            uint c = 0xffffffff;\n\n            int n;\n\n            if (crcTable == null)\n            {\n                BuildCrcTable();\n            }\n\n            for (n = 0; n < bytes.Length; n++)\n            {\n                c = crcTable[(c ^ bytes[n]) & 0xff] ^ (c >> 8);\n            }\n\n            return c ^ 0xffffffff;\n        }\n    }\n\n    internal static class Extensions\n    {\n        internal static uint ToUInt(this byte[] bytes)\n        {\n            byte[] input;\n\n            if (BitConverter.IsLittleEndian)\n            {\n                input = ReverseByteArray(bytes);\n            }\n            else\n            {\n                input = bytes;\n            }\n\n            return BitConverter.ToUInt32(input, 0);\n        }\n\n        internal static byte[] ToByteArray(this uint integer)\n        {\n            byte[] output = BitConverter.GetBytes(integer);\n\n            if (BitConverter.IsLittleEndian)\n            {\n                return ReverseByteArray(output);\n            }\n            else\n            {\n                return output;\n            }\n        }\n\n        private static byte[] ReverseByteArray(byte[] byteArray)\n        {\n            byte[] reversed = new byte[byteArray.Length];\n            for (int i = 0; i < byteArray.Length; i++)\n                reversed[byteArray.Length-1 -i] = byteArray[i];\n\n            return reversed;\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/Png/PngReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Utilities.Deflate;\n\nnamespace Microsoft.Xna.Platform.Graphics.Utilities.Png\n{\n    public class PngReader\n    {\n        private int _width;\n        private int _height;\n        private int _bitsPerSample;\n        private int _bytesPerSample;\n        private int _bytesPerPixel;\n        private int _bytesPerScanline;\n        private IList<PngChunk> _chunks;\n        private IList<PngChunk> _dataChunks;\n        private ColorType _colorType;\n        private Palette _palette;\n        private Texture2D _texture;\n        private Color[] _data;\n        \n        public PngReader()\n        {\n            _chunks = new List<PngChunk>();\n            _dataChunks = new List<PngChunk>();\n        }\n\n        public Texture2D Read(Stream inputStream, GraphicsDevice graphicsDevice)\n        {\n            if (IsPngImage(inputStream) == false)\n            {\n                throw new Exception(\"File does not have PNG signature.\");\n            }\n\n            inputStream.Position = 8;\n\n            while (inputStream.Position != inputStream.Length)\n            {\n                byte[] chunkDataLengthBytes = new byte[4];\n                inputStream.Read(chunkDataLengthBytes, 0, 4);\n                uint chunkDataLength = chunkDataLengthBytes.ToUInt();\n\n                inputStream.Position -= 4;\n\n                byte[] chunkBytes = new byte[12 + chunkDataLength];\n                inputStream.Read(chunkBytes, 0, (int)(12 + chunkDataLength));\n\n                ProcessChunk(chunkBytes);\n            }\n\n            UnpackDataChunks();\n\n            _texture = new Texture2D(graphicsDevice, _width, _height, false, SurfaceFormat.Color);\n            _texture.SetData<Color>(_data);\n\n            return _texture;\n        }\n\n        public static bool IsPngImage(Stream stream)\n        {\n            stream.Position = 0;\n            \n            byte[] signature = new byte[8];\n            stream.Read(signature, 0, 8);\n\n            bool result = signature.SequenceEqual(HeaderChunk.PngSignature);\n\n            stream.Position = 0;\n\n            return result;\n        }\n\n        private void ProcessChunk(byte[] chunkBytes)\n        {\n            string chunkType = PngChunk.GetChunkTypeString(chunkBytes.Skip(4).Take(4).ToArray());\n\n            switch (chunkType)\n            {\n                case \"IHDR\":\n\n                    var headerChunk = new HeaderChunk();\n                    headerChunk.Decode(chunkBytes);\n                    _width = (int)headerChunk.Width;\n                    _height = (int)headerChunk.Height;\n                    _bitsPerSample = (int)headerChunk.BitDepth;\n                    _colorType = headerChunk.ColorType;\n                    _chunks.Add(headerChunk);\n\n                    break;\n\n                case \"PLTE\":\n\n                    var paletteChunk = new PaletteChunk();\n                    paletteChunk.Decode(chunkBytes);\n                    _palette = paletteChunk.Palette;\n                    _chunks.Add(paletteChunk);\n\n                    break;\n\n                case \"tRNS\":\n\n                    var transparencyChunk = new TransparencyChunk();\n                    transparencyChunk.Decode(chunkBytes);\n                    _palette.AddAlphaToColors(transparencyChunk.PaletteTransparencies);\n                    break;\n\n                case \"IDAT\":\n\n                    var dataChunk = new DataChunk();\n                    dataChunk.Decode(chunkBytes);\n                    _dataChunks.Add(dataChunk);\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n\n        private void UnpackDataChunks()\n        {\n            var dataByteList = new List<byte>();\n\n            foreach (var dataChunk in _dataChunks)\n            {\n                if (dataChunk.Type == \"IDAT\")\n                {\n                    dataByteList.AddRange(dataChunk.Data);\n                }\n            }\n\n            var compressedStream = new MemoryStream(dataByteList.ToArray());\n            var decompressedStream = new MemoryStream();\n\n            try\n            {\n                using (var deflateStream = new ZlibStream(compressedStream, CompressionMode.Decompress))\n                {\n                    deflateStream.CopyTo(decompressedStream);\n                }\n            }\n            catch (Exception exception)\n            {\n                throw new Exception(\"An error occurred during DEFLATE decompression.\", exception);\n            }\n\n            var decompressedBytes = decompressedStream.ToArray();\n            var pixelData = DeserializePixelData(decompressedBytes);\n\n            DecodePixelData(pixelData);\n        }\n\n        private byte[][] DeserializePixelData(byte[] pixelData)\n        {\n            _bytesPerPixel = CalculateBytesPerPixel();\n            _bytesPerSample = _bitsPerSample / 8;\n            _bytesPerScanline = (_bytesPerPixel * _width) + 1;\n            int scanlineCount = pixelData.Length / _bytesPerScanline;\n\n            if (pixelData.Length % _bytesPerScanline != 0)\n            {\n                throw new Exception(\"Malformed pixel data - total length of pixel data not multiple of ((bytesPerPixel * width) + 1)\");\n            }\n\n            var result = new byte[scanlineCount][];\n\n            for (int y = 0; y < scanlineCount; y++)\n            {\n                result[y] = new byte[_bytesPerScanline];\n                \n                for (int x = 0; x < _bytesPerScanline; x++)\n                {\n                    result[y][x] = pixelData[y * _bytesPerScanline + x];\n                }\n            }\n            \n            return result;\n        }\n\n        private void DecodePixelData(byte[][] pixelData)\n        {\n            _data = new Color[_width * _height];\n            \n            byte[] previousScanline = new byte[_bytesPerScanline];\n\n            for (int y = 0; y < _height; y++)\n            {\n                var scanline = pixelData[y];\n\n                FilterType filterType = (FilterType)scanline[0];\n                byte[] defilteredScanline;\n\n                switch (filterType)\n                {\n                    case FilterType.None:\n\n                        defilteredScanline = NoneFilter.Decode(scanline);\n\n                        break;\n\n                    case FilterType.Sub:\n\n                        defilteredScanline = SubFilter.Decode(scanline, _bytesPerPixel);\n\n                        break;\n\n                    case FilterType.Up:\n\n                        defilteredScanline = UpFilter.Decode(scanline, previousScanline);\n\n                        break;\n\n                    case FilterType.Average:\n\n                        defilteredScanline = AverageFilter.Decode(scanline, previousScanline, _bytesPerPixel);\n\n                        break;\n\n                    case FilterType.Paeth:\n\n                        defilteredScanline = PaethFilter.Decode(scanline, previousScanline, _bytesPerPixel);\n\n                        break;\n\n                    default:\n                        throw new Exception(\"Unknown filter type.\");\n                }\n\n                previousScanline = defilteredScanline;\n                ProcessDefilteredScanline(defilteredScanline, y);\n            }\n        }\n\n        private void ProcessDefilteredScanline(byte[] defilteredScanline, int y)\n        {\n            switch (_colorType)\n            {\n                case ColorType.Grayscale:\n\n                    for (int x = 0; x < _width; x++)\n                    {\n                        int offset = 1 + (x * _bytesPerPixel);\n\n                        byte intensity = defilteredScanline[offset];\n\n                        _data[(y * _width) + x] = new Color(intensity, intensity, intensity);\n                    }\n\n                    break;\n\n                case ColorType.GrayscaleWithAlpha:\n\n                    for (int x = 0; x < _width; x++)\n                    {\n                        int offset = 1 + (x * _bytesPerPixel);\n\n                        byte intensity = defilteredScanline[offset];\n                        byte alpha = defilteredScanline[offset + _bytesPerSample];\n\n                        _data[(y * _width) + x] = new Color(intensity, intensity, intensity, alpha);\n                    }\n\n                    break;\n\n                case ColorType.Palette:\n\n                    for (int x = 0; x < _width; x++)\n                    {\n                        var pixelColor = _palette[defilteredScanline[x + 1]];\n\n                        _data[(y * _width) + x] = pixelColor;\n                    }\n\n                    break;\n\n                case ColorType.Rgb:\n\n                    for (int x = 0; x < _width; x++)\n                    {\n                        int offset = 1 + (x * _bytesPerPixel);\n                        \n                        int red = defilteredScanline[offset];\n                        int green = defilteredScanline[offset + _bytesPerSample];\n                        int blue = defilteredScanline[offset + 2 * _bytesPerSample];\n\n                        _data[(y * _width) + x] = new Color(red, green, blue);\n                    }\n\n                    break;\n\n                case ColorType.RgbWithAlpha:\n\n                    for (int x = 0; x < _width; x++)\n                    {\n                        int offset = 1 + (x * _bytesPerPixel);\n\n                        int red = defilteredScanline[offset];\n                        int green = defilteredScanline[offset + _bytesPerSample];\n                        int blue = defilteredScanline[offset + 2 * _bytesPerSample];\n                        int alpha = defilteredScanline[offset + 3 * _bytesPerSample];\n\n                        _data[(y * _width) + x] = new Color(red, green, blue, alpha);\n                    }\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n\n        private int CalculateBytesPerPixel()\n        {\n            switch (_colorType)\n            {\n                case ColorType.Grayscale:\n                    return _bitsPerSample / 8;\n\n                case ColorType.GrayscaleWithAlpha:\n                    return (2 * _bitsPerSample) / 8;\n\n                case ColorType.Palette:\n                    return _bitsPerSample / 8;\n\n                case ColorType.Rgb:\n                    return (3 * _bitsPerSample) / 8;\n\n                case ColorType.RgbWithAlpha:\n                    return (4 * _bitsPerSample) / 8;\n\n                default:\n                    throw new Exception(\"Unknown color type.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/Png/PngWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Utilities.Deflate;\n\nnamespace Microsoft.Xna.Platform.Graphics.Utilities.Png\n{\n    public class PngWriter\n    {\n        private const int _bitsPerSample = 8;\n        private ColorType _colorType;\n        private Color[] _colorData;\n        private int _width;\n        private int _height;\n\n        public PngWriter()\n        {\n            _colorType = ColorType.RgbWithAlpha;\n        }\n\n        public void Write(ITexture2DStrategy texture2D, Stream outputStream)\n        {\n            _width = texture2D.Width;\n            _height = texture2D.Height;\n\n            _colorData = TextureHelpers.GetColorData(texture2D);\n\n            // write PNG signature\n            outputStream.Write(HeaderChunk.PngSignature, 0, HeaderChunk.PngSignature.Length);\n\n            // write header chunk\n            var headerChunk = new HeaderChunk();\n            headerChunk.Width = (uint)texture2D.Width;\n            headerChunk.Height = (uint)texture2D.Height;\n            headerChunk.BitDepth = 8;\n            headerChunk.ColorType = _colorType;\n            headerChunk.CompressionMethod = 0;\n            headerChunk.FilterMethod = 0;\n            headerChunk.InterlaceMethod = 0;\n\n            var headerChunkBytes = headerChunk.Encode();\n            outputStream.Write(headerChunkBytes, 0, headerChunkBytes.Length);\n\n            // write data chunks\n            var encodedPixelData = EncodePixelData();\n            var compressedPixelData = new MemoryStream();\n\n            try\n            {\n                using (var deflateStream = new ZlibStream(new MemoryStream(encodedPixelData), CompressionMode.Compress))\n                {\n                    deflateStream.CopyTo(compressedPixelData);\n                }\n            }\n            catch (Exception exception)\n            {\n                throw new Exception(\"An error occurred during DEFLATE compression.\", exception);\n            }\n            \n            var dataChunk = new DataChunk();\n            dataChunk.Data = compressedPixelData.ToArray();\n            var dataChunkBytes = dataChunk.Encode();\n            outputStream.Write(dataChunkBytes, 0, dataChunkBytes.Length);\n\n            // write end chunk\n            var endChunk = new EndChunk();\n            var endChunkBytes = endChunk.Encode();\n            outputStream.Write(endChunkBytes, 0, endChunkBytes.Length);\n        }\n\n        private byte[] EncodePixelData()\n        {\n            List<byte[]> filteredScanlines = new List<byte[]>();\n\n            int bytesPerPixel = CalculateBytesPerPixel();\n            byte[] previousScanline = new byte[_width * bytesPerPixel];\n\n            for (int y = 0; y < _height; y++)\n            {\n                var rawScanline = GetRawScanline(y);\n\n                var filteredScanline = GetOptimalFilteredScanline(rawScanline, previousScanline, bytesPerPixel);\n\n                filteredScanlines.Add(filteredScanline);\n\n                previousScanline = rawScanline;\n            }\n\n            List<byte> result = new List<byte>();\n\n            foreach (var encodedScanline in filteredScanlines)\n            {\n                result.AddRange(encodedScanline);\n            }\n\n            return result.ToArray();\n        }\n\n        /// <summary>\n        /// Applies all PNG filters to the given scanline and returns the filtered scanline that is deemed\n        /// to be most compressible, using lowest total variation as proxy for compressibility.\n        /// </summary>\n        /// <param name=\"rawScanline\"></param>\n        /// <param name=\"previousScanline\"></param>\n        /// <param name=\"bytesPerPixel\"></param>\n        /// <returns></returns>\n        private byte[] GetOptimalFilteredScanline(byte[] rawScanline, byte[] previousScanline, int bytesPerPixel)\n        {\n            var candidates = new List<Tuple<byte[], int>>();\n            \n            var sub = SubFilter.Encode(rawScanline, bytesPerPixel);\n            candidates.Add(new Tuple<byte[], int>(sub, CalculateTotalVariation(sub)));\n\n            var up = UpFilter.Encode(rawScanline, previousScanline);\n            candidates.Add(new Tuple<byte[], int>(up, CalculateTotalVariation(up)));\n\n            var average = AverageFilter.Encode(rawScanline, previousScanline, bytesPerPixel);\n            candidates.Add(new Tuple<byte[], int>(average, CalculateTotalVariation(average)));\n\n            var paeth = PaethFilter.Encode(rawScanline, previousScanline, bytesPerPixel);\n            candidates.Add(new Tuple<byte[], int>(paeth, CalculateTotalVariation(paeth)));\n\n            int lowestTotalVariation = Int32.MaxValue;\n            int lowestTotalVariationIndex = 0;\n\n            for (int i = 0; i < candidates.Count; i++)\n            {\n                if (candidates[i].Item2 < lowestTotalVariation)\n                {\n                    lowestTotalVariationIndex = i;\n                    lowestTotalVariation = candidates[i].Item2;\n                }\n            }\n\n            return candidates[lowestTotalVariationIndex].Item1;\n        }\n\n        /// <summary>\n        /// Calculates the total variation of given byte array.  Total variation is the sum of the absolute values of\n        /// neighbour differences.\n        /// </summary>\n        /// <param name=\"input\"></param>\n        /// <returns></returns>\n        private int CalculateTotalVariation(byte[] input)\n        {\n            int totalVariation = 0;\n\n            for (int i = 1; i < input.Length; i++)\n            {\n                totalVariation += Math.Abs(input[i] - input[i - 1]);\n            }\n\n            return totalVariation;\n        }\n\n        private byte[] GetRawScanline(int y)\n        {\n            var rawScanline = new byte[4 * _width];\n            \n            for (int x = 0; x < _width; x++)\n            {\n                var color = _colorData[(y * _width) + x];\n\n                rawScanline[4 * x] = color.R;\n                rawScanline[(4 * x) + 1] = color.G;\n                rawScanline[(4 * x) + 2] = color.B;\n                rawScanline[(4 * x) + 3] = color.A;\n            }\n\n            return rawScanline;\n        }\n\n        private int CalculateBytesPerPixel()\n        {\n            switch (_colorType)\n            {\n                case ColorType.Grayscale:\n                    return _bitsPerSample / 8;\n\n                case ColorType.GrayscaleWithAlpha:\n                    return (2 * _bitsPerSample) / 8;\n\n                case ColorType.Palette:\n                    return _bitsPerSample / 8;\n\n                case ColorType.Rgb:\n                    return (3 * _bitsPerSample) / 8;\n\n                case ColorType.RgbWithAlpha:\n                    return (4 * _bitsPerSample) / 8;\n\n                default:\n                    return -1;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/Utilities/Png/ZLibStream.cs",
    "content": "// ZlibStream.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs):\n// Time-stamp: <2011-July-31 14:53:33>\n//\n// ------------------------------------------------------------------\n//\n// This module defines the ZlibStream class, which is similar in idea to\n// the System.IO.Compression.DeflateStream and\n// System.IO.Compression.GZipStream classes in the .NET BCL.\n//\n// ------------------------------------------------------------------\n\n// The following notice applies to jzlib:\n// -----------------------------------------------------------------------------\n\n// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in\n// the documentation and/or other materials provided with the distribution.\n\n// 3. The names of the authors may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n\n// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// -----------------------------------------------------------------------------\n\n// jzlib is based on zlib-1.1.3.\n\n// The following notice applies to zlib:\n\n// -----------------------------------------------------------------------------\n\n// Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler\n\n// The ZLIB software is provided 'as-is', without any express or implied\n// warranty.  In no event will the authors be held liable for any damages\n// arising from the use of this software.\n\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n\n// 1. The origin of this software must not be misrepresented; you must not\n//    claim that you wrote the original software. If you use this software\n//    in a product, an acknowledgment in the product documentation would be\n//    appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//    misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Jean-loup Gailly jloup@gzip.org\n// Mark Adler madler@alumni.caltech.edu\n\n\n//------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\n\nnamespace Microsoft.Xna.Platform.Utilities.Deflate\n{\n\n    /// <summary>\n    /// Represents a Zlib stream for compression or decompression.\n    /// </summary>\n    /// <remarks>\n    ///\n    /// <para>\n    /// The ZlibStream is a <see\n    /// href=\"http://en.wikipedia.org/wiki/Decorator_pattern\">Decorator</see> on a <see\n    /// cref=\"System.IO.Stream\"/>.  It adds ZLIB compression or decompression to any\n    /// stream.\n    /// </para>\n    ///\n    /// <para> Using this stream, applications can compress or decompress data via\n    /// stream <c>Read()</c> and <c>Write()</c> operations.  Either compression or\n    /// decompression can occur through either reading or writing. The compression\n    /// format used is ZLIB, which is documented in <see\n    /// href=\"http://www.ietf.org/rfc/rfc1950.txt\">IETF RFC 1950</see>, \"ZLIB Compressed\n    /// Data Format Specification version 3.3\". This implementation of ZLIB always uses\n    /// DEFLATE as the compression method.  (see <see\n    /// href=\"http://www.ietf.org/rfc/rfc1951.txt\">IETF RFC 1951</see>, \"DEFLATE\n    /// Compressed Data Format Specification version 1.3.\") </para>\n    ///\n    /// <para>\n    /// The ZLIB format allows for varying compression methods, window sizes, and dictionaries.\n    /// This implementation always uses the DEFLATE compression method, a preset dictionary,\n    /// and 15 window bits by default.\n    /// </para>\n    ///\n    /// <para>\n    /// This class is similar to DeflateStream, except that it adds the\n    /// RFC1950 header and trailer bytes to a compressed stream when compressing, or expects\n    /// the RFC1950 header and trailer bytes when decompressing.  It is also similar to the\n    /// <see cref=\"GZipStream\"/>.\n    /// </para>\n    /// </remarks>\n    /// <seealso cref=\"GZipStream\" />\n    internal class ZlibStream : Stream\n    {\n        internal ZlibBaseStream _baseStream;\n        bool _disposed;\n\n        /// <summary>\n        /// Create a <c>ZlibStream</c> using the specified <c>CompressionMode</c>.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Compress</c>, the <c>ZlibStream</c>\n        ///   will use the default compression level. The \"captive\" stream will be\n        ///   closed when the <c>ZlibStream</c> is closed.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        /// This example uses a <c>ZlibStream</c> to compress a file, and writes the\n        /// compressed data to another file.\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(fileToCompress + \".zlib\"))\n        ///     {\n        ///         using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(fileToCompress &amp; \".zlib\")\n        ///     Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress)\n        ///         Dim buffer As Byte() = New Byte(4096) {}\n        ///         Dim n As Integer = -1\n        ///         Do While (n &lt;&gt; 0)\n        ///             If (n &gt; 0) Then\n        ///                 compressor.Write(buffer, 0, n)\n        ///             End If\n        ///             n = input.Read(buffer, 0, buffer.Length)\n        ///         Loop\n        ///     End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        ///\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        /// <param name=\"mode\">Indicates whether the ZlibStream will compress or decompress.</param>\n        public ZlibStream(System.IO.Stream stream, CompressionMode mode)\n            : this(stream, mode, CompressionLevel.Default, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>ZlibStream</c> using the specified <c>CompressionMode</c> and\n        ///   the specified <c>CompressionLevel</c>.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Decompress</c>, the level parameter is ignored.\n        ///   The \"captive\" stream will be closed when the <c>ZlibStream</c> is closed.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///   This example uses a <c>ZlibStream</c> to compress data from a file, and writes the\n        ///   compressed data to another file.\n        ///\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(fileToCompress + \".zlib\"))\n        ///     {\n        ///         using (Stream compressor = new ZlibStream(raw,\n        ///                                                   CompressionMode.Compress,\n        ///                                                   CompressionLevel.BestCompression))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(fileToCompress &amp; \".zlib\")\n        ///         Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        ///\n        /// <param name=\"stream\">The stream to be read or written while deflating or inflating.</param>\n        /// <param name=\"mode\">Indicates whether the ZlibStream will compress or decompress.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        public ZlibStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level)\n            : this(stream, mode, level, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>ZlibStream</c> using the specified <c>CompressionMode</c>, and\n        ///   explicitly specify whether the captive stream should be left open after\n        ///   Deflation or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Compress</c>, the <c>ZlibStream</c> will use\n        ///   the default compression level.\n        /// </para>\n        ///\n        /// <para>\n        ///   This constructor allows the application to request that the captive stream\n        ///   remain open after the deflation or inflation occurs.  By default, after\n        ///   <c>Close()</c> is called on the stream, the captive stream is also\n        ///   closed. In some cases this is not desired, for example if the stream is a\n        ///   <see cref=\"System.IO.MemoryStream\"/> that will be re-read after\n        ///   compression.  Specify true for the <paramref name=\"leaveOpen\"/> parameter to leave the stream\n        ///   open.\n        /// </para>\n        ///\n        /// <para>\n        /// See the other overloads of this constructor for example code.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <param name=\"stream\">The stream which will be read or written. This is called the\n        /// \"captive\" stream in other places in this documentation.</param>\n        /// <param name=\"mode\">Indicates whether the ZlibStream will compress or decompress.</param>\n        /// <param name=\"leaveOpen\">true if the application would like the stream to remain\n        /// open after inflation/deflation.</param>\n        public ZlibStream(System.IO.Stream stream, CompressionMode mode, bool leaveOpen)\n            : this(stream, mode, CompressionLevel.Default, leaveOpen)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>ZlibStream</c> using the specified <c>CompressionMode</c>\n        ///   and the specified <c>CompressionLevel</c>, and explicitly specify\n        ///   whether the stream should be left open after Deflation or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   This constructor allows the application to request that the captive\n        ///   stream remain open after the deflation or inflation occurs.  By\n        ///   default, after <c>Close()</c> is called on the stream, the captive\n        ///   stream is also closed. In some cases this is not desired, for example\n        ///   if the stream is a <see cref=\"System.IO.MemoryStream\"/> that will be\n        ///   re-read after compression.  Specify true for the <paramref\n        ///   name=\"leaveOpen\"/> parameter to leave the stream open.\n        /// </para>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Decompress</c>, the level parameter is\n        ///   ignored.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///\n        /// This example shows how to use a ZlibStream to compress the data from a file,\n        /// and store the result into another file. The filestream remains open to allow\n        /// additional data to be written to it.\n        ///\n        /// <code>\n        /// using (var output = System.IO.File.Create(fileToCompress + \".zlib\"))\n        /// {\n        ///     using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        ///     {\n        ///         using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        ///     // can write additional data to the output stream here\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Using output As FileStream = File.Create(fileToCompress &amp; \".zlib\")\n        ///     Using input As Stream = File.OpenRead(fileToCompress)\n        ///         Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        ///     ' can write additional data to the output stream here.\n        /// End Using\n        /// </code>\n        /// </example>\n        ///\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        ///\n        /// <param name=\"mode\">Indicates whether the ZlibStream will compress or decompress.</param>\n        ///\n        /// <param name=\"leaveOpen\">\n        /// true if the application would like the stream to remain open after\n        /// inflation/deflation.\n        /// </param>\n        ///\n        /// <param name=\"level\">\n        /// A tuning knob to trade speed for effectiveness. This parameter is\n        /// effective only when mode is <c>CompressionMode.Compress</c>.\n        /// </param>\n        public ZlibStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen)\n        {\n            _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.ZLIB, leaveOpen);\n        }\n\n        #region Zlib properties\n\n        /// <summary>\n        /// This property sets the flush behavior on the stream.\n        /// Sorry, though, not sure exactly how to describe all the various settings.\n        /// </summary>\n        virtual public FlushType FlushMode\n        {\n            get { return (this._baseStream._flushMode); }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n                this._baseStream._flushMode = value;\n            }\n        }\n\n        /// <summary>\n        ///   The size of the working buffer for the compression codec.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   The working buffer is used for all stream operations.  The default size is\n        ///   1024 bytes. The minimum size is 128 bytes. You may get better performance\n        ///   with a larger buffer.  Then again, you might not.  You would have to test\n        ///   it.\n        /// </para>\n        ///\n        /// <para>\n        ///   Set this before the first call to <c>Read()</c> or <c>Write()</c> on the\n        ///   stream. If you try to set it afterwards, it will throw.\n        /// </para>\n        /// </remarks>\n        public int BufferSize\n        {\n            get\n            {\n                return this._baseStream._bufferSize;\n            }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n                if (this._baseStream._workingBuffer != null)\n                    throw new ZlibException(\"The working buffer is already set.\");\n                if (value < ZlibConstants.WorkingBufferSizeMin)\n                    throw new ZlibException(String.Format(\"Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.\", value, ZlibConstants.WorkingBufferSizeMin));\n                this._baseStream._bufferSize = value;\n            }\n        }\n\n        /// <summary> Returns the total number of bytes input so far.</summary>\n        virtual public long TotalIn\n        {\n            get { return this._baseStream._z.TotalBytesIn; }\n        }\n\n        /// <summary> Returns the total number of bytes output so far.</summary>\n        virtual public long TotalOut\n        {\n            get { return this._baseStream._z.TotalBytesOut; }\n        }\n\n        #endregion\n\n        #region System.IO.Stream methods\n\n        /// <summary>\n        ///   Dispose the stream.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This may or may not result in a <c>Close()</c> call on the captive\n        ///     stream.  See the constructors that have a <c>leaveOpen</c> parameter\n        ///     for more information.\n        ///   </para>\n        ///   <para>\n        ///     This method may be invoked in two distinct scenarios.  If disposing\n        ///     == true, the method has been called directly or indirectly by a\n        ///     user's code, for example via the public Dispose() method. In this\n        ///     case, both managed and unmanaged resources can be referenced and\n        ///     disposed.  If disposing == false, the method has been called by the\n        ///     runtime from inside the object finalizer and this method should not\n        ///     reference other objects; in that case only unmanaged resources must\n        ///     be referenced or disposed.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"disposing\">\n        ///   indicates whether the Dispose method was invoked by user code.\n        /// </param>\n        protected override void Dispose(bool disposing)\n        {\n            try\n            {\n                if (!_disposed)\n                {\n                    if (disposing && (this._baseStream != null))\n                        this._baseStream.Dispose();\n                    _disposed = true;\n                }\n            }\n            finally\n            {\n                base.Dispose(disposing);\n            }\n        }\n\n\n        /// <summary>\n        /// Indicates whether the stream can be read.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports reading.\n        /// </remarks>\n        public override bool CanRead\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n                return _baseStream._stream.CanRead;\n            }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports Seek operations.\n        /// </summary>\n        /// <remarks>\n        /// Always returns false.\n        /// </remarks>\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream can be written.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports writing.\n        /// </remarks>\n        public override bool CanWrite\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n                return _baseStream._stream.CanWrite;\n            }\n        }\n\n        /// <summary>\n        /// Flush the stream.\n        /// </summary>\n        public override void Flush()\n        {\n            if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n            _baseStream.Flush();\n        }\n\n        /// <summary>\n        /// Reading this property always throws a <see cref=\"NotSupportedException\"/>.\n        /// </summary>\n        public override long Length\n        {\n            get { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        ///   The position of the stream pointer.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Setting this property always throws a <see\n        ///   cref=\"NotSupportedException\"/>. Reading will return the total bytes\n        ///   written out, if used in writing, or the total bytes read in, if used in\n        ///   reading.  The count may refer to compressed bytes or uncompressed bytes,\n        ///   depending on how you've used the stream.\n        /// </remarks>\n        public override long Position\n        {\n            get\n            {\n                if (this._baseStream._streamMode == ZlibBaseStream.StreamMode.Writer)\n                    return this._baseStream._z.TotalBytesOut;\n                if (this._baseStream._streamMode == ZlibBaseStream.StreamMode.Reader)\n                    return this._baseStream._z.TotalBytesIn;\n                return 0;\n            }\n\n            set { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        /// Read data from the stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   If you wish to use the <c>ZlibStream</c> to compress data while reading,\n        ///   you can create a <c>ZlibStream</c> with <c>CompressionMode.Compress</c>,\n        ///   providing an uncompressed data stream.  Then call <c>Read()</c> on that\n        ///   <c>ZlibStream</c>, and the data read will be compressed.  If you wish to\n        ///   use the <c>ZlibStream</c> to decompress data while reading, you can create\n        ///   a <c>ZlibStream</c> with <c>CompressionMode.Decompress</c>, providing a\n        ///   readable compressed data stream.  Then call <c>Read()</c> on that\n        ///   <c>ZlibStream</c>, and the data will be decompressed as it is read.\n        /// </para>\n        ///\n        /// <para>\n        ///   A <c>ZlibStream</c> can be used for <c>Read()</c> or <c>Write()</c>, but\n        ///   not both.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <param name=\"buffer\">\n        /// The buffer into which the read data should be placed.</param>\n        ///\n        /// <param name=\"offset\">\n        /// the offset within that data array to put the first byte read.</param>\n        ///\n        /// <param name=\"count\">the number of bytes to read.</param>\n        ///\n        /// <returns>the number of bytes read</returns>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n            return _baseStream.Read(buffer, offset, count);\n        }\n\n        /// <summary>\n        /// Calling this method always throws a <see cref=\"NotSupportedException\"/>.\n        /// </summary>\n        /// <param name=\"offset\">\n        ///   The offset to seek to....\n        ///   IF THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        /// <param name=\"origin\">\n        ///   The reference specifying how to apply the offset....  IF\n        ///   THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        ///\n        /// <returns>nothing. This method always throws.</returns>\n        public override long Seek(long offset, System.IO.SeekOrigin origin)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Calling this method always throws a <see cref=\"NotSupportedException\"/>.\n        /// </summary>\n        /// <param name=\"value\">\n        ///   The new value for the stream length....  IF\n        ///   THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        public override void SetLength(long value)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Write data to the stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   If you wish to use the <c>ZlibStream</c> to compress data while writing,\n        ///   you can create a <c>ZlibStream</c> with <c>CompressionMode.Compress</c>,\n        ///   and a writable output stream.  Then call <c>Write()</c> on that\n        ///   <c>ZlibStream</c>, providing uncompressed data as input.  The data sent to\n        ///   the output stream will be the compressed form of the data written.  If you\n        ///   wish to use the <c>ZlibStream</c> to decompress data while writing, you\n        ///   can create a <c>ZlibStream</c> with <c>CompressionMode.Decompress</c>, and a\n        ///   writable output stream.  Then call <c>Write()</c> on that stream,\n        ///   providing previously compressed data. The data sent to the output stream\n        ///   will be the decompressed form of the data written.\n        /// </para>\n        ///\n        /// <para>\n        ///   A <c>ZlibStream</c> can be used for <c>Read()</c> or <c>Write()</c>, but not both.\n        /// </para>\n        /// </remarks>\n        /// <param name=\"buffer\">The buffer holding data to write to the stream.</param>\n        /// <param name=\"offset\">the offset within that data array to find the first byte to write.</param>\n        /// <param name=\"count\">the number of bytes to write.</param>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n            _baseStream.Write(buffer, offset, count);\n        }\n        #endregion\n\n\n        /// <summary>\n        ///   Compress a string into a byte array using ZLIB.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"ZlibStream.UncompressString(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"ZlibStream.UncompressString(byte[])\"/>\n        /// <seealso cref=\"ZlibStream.CompressBuffer(byte[])\"/>\n        /// <seealso cref=\"GZipStream.CompressString(string)\"/>\n        ///\n        /// <param name=\"s\">\n        ///   A string to compress.  The string will first be encoded\n        ///   using UTF8, then compressed.\n        /// </param>\n        ///\n        /// <returns>The string in compressed form</returns>\n        public static byte[] CompressString(String s)\n        {\n            using (var ms = new MemoryStream())\n            {\n                Stream compressor =\n                    new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression);\n                ZlibBaseStream.CompressString(s, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Compress a byte array into a new byte array using ZLIB.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"ZlibStream.UncompressBuffer(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"ZlibStream.CompressString(string)\"/>\n        /// <seealso cref=\"ZlibStream.UncompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"b\">\n        /// A buffer to compress.\n        /// </param>\n        ///\n        /// <returns>The data in compressed form</returns>\n        public static byte[] CompressBuffer(byte[] b)\n        {\n            using (var ms = new MemoryStream())\n            {\n                Stream compressor =\n                    new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression);\n\n                ZlibBaseStream.CompressBuffer(b, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a ZLIB-compressed byte array into a single string.\n        /// </summary>\n        ///\n        /// <seealso cref=\"ZlibStream.CompressString(String)\"/>\n        /// <seealso cref=\"ZlibStream.UncompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing ZLIB-compressed data.\n        /// </param>\n        ///\n        /// <returns>The uncompressed string</returns>\n        public static String UncompressString(byte[] compressed)\n        {\n            using (var input = new MemoryStream(compressed))\n            {\n                Stream decompressor =\n                    new ZlibStream(input, CompressionMode.Decompress);\n\n                return ZlibBaseStream.UncompressString(compressed, decompressor);\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a ZLIB-compressed byte array into a byte array.\n        /// </summary>\n        ///\n        /// <seealso cref=\"ZlibStream.CompressBuffer(byte[])\"/>\n        /// <seealso cref=\"ZlibStream.UncompressString(byte[])\"/>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing ZLIB-compressed data.\n        /// </param>\n        ///\n        /// <returns>The data in uncompressed form</returns>\n        public static byte[] UncompressBuffer(byte[] compressed)\n        {\n            using (var input = new MemoryStream(compressed))\n            {\n                Stream decompressor =\n                    new ZlibStream(input, CompressionMode.Decompress);\n\n                return ZlibBaseStream.UncompressBuffer(compressed, decompressor);\n            }\n        }\n\n    }\n\n    /// <summary>\n    /// A bunch of constants used in the Zlib interface.\n    /// </summary>\n    internal static class ZlibConstants\n    {\n        /// <summary>\n        /// The maximum number of window bits for the Deflate algorithm.\n        /// </summary>\n        internal const int WindowBitsMax = 15; // 32K LZ77 window\n\n        /// <summary>\n        /// The default number of window bits for the Deflate algorithm.\n        /// </summary>\n        internal const int WindowBitsDefault = WindowBitsMax;\n\n        /// <summary>\n        /// indicates everything is A-OK\n        /// </summary>\n        internal const int Z_OK = 0;\n\n        /// <summary>\n        /// Indicates that the last operation reached the end of the stream.\n        /// </summary>\n        internal const int Z_STREAM_END = 1;\n\n        /// <summary>\n        /// The operation ended in need of a dictionary. \n        /// </summary>\n        internal const int Z_NEED_DICT = 2;\n\n        /// <summary>\n        /// There was an error with the stream - not enough data, not open and readable, etc.\n        /// </summary>\n        internal const int Z_STREAM_ERROR = -2;\n\n        /// <summary>\n        /// There was an error with the data - not enough data, bad data, etc.\n        /// </summary>\n        internal const int Z_DATA_ERROR = -3;\n\n        /// <summary>\n        /// There was an error with the working buffer.\n        /// </summary>\n        internal const int Z_BUF_ERROR = -5;\n\n        /// <summary>\n        /// The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes.\n        /// </summary>\n#if NETCF        \n        internal const int WorkingBufferSizeDefault = 8192;\n#else\n        internal const int WorkingBufferSizeDefault = 16384;\n#endif\n        /// <summary>\n        /// The minimum size of the working buffer used in the ZlibCodec class.  Currently it is 128 bytes.\n        /// </summary>\n        internal const int WorkingBufferSizeMin = 1024;\n    }\n\n    /// <summary>\n    /// Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951).\n    /// </summary>\n    ///\n    /// <remarks>\n    /// This class compresses and decompresses data according to the Deflate algorithm\n    /// and optionally, the ZLIB format, as documented in <see\n    /// href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC 1950 - ZLIB</see> and <see\n    /// href=\"http://www.ietf.org/rfc/rfc1951.txt\">RFC 1951 - DEFLATE</see>.\n    /// </remarks>\n\n    sealed internal class ZlibCodec\n    {\n        /// <summary>\n        /// The buffer from which data is taken.\n        /// </summary>\n        internal byte[] InputBuffer;\n\n        /// <summary>\n        /// An index into the InputBuffer array, indicating where to start reading. \n        /// </summary>\n        internal int NextIn;\n\n        /// <summary>\n        /// The number of bytes available in the InputBuffer, starting at NextIn. \n        /// </summary>\n        /// <remarks>\n        /// Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. \n        /// The class will update this number as calls to Inflate/Deflate are made.\n        /// </remarks>\n        internal int AvailableBytesIn;\n\n        /// <summary>\n        /// Total number of bytes read so far, through all calls to Inflate()/Deflate().\n        /// </summary>\n        internal long TotalBytesIn;\n\n        /// <summary>\n        /// Buffer to store output data.\n        /// </summary>\n        internal byte[] OutputBuffer;\n\n        /// <summary>\n        /// An index into the OutputBuffer array, indicating where to start writing. \n        /// </summary>\n        internal int NextOut;\n\n        /// <summary>\n        /// The number of bytes available in the OutputBuffer, starting at NextOut. \n        /// </summary>\n        /// <remarks>\n        /// Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. \n        /// The class will update this number as calls to Inflate/Deflate are made.\n        /// </remarks>\n        internal int AvailableBytesOut;\n\n        /// <summary>\n        /// Total number of bytes written to the output so far, through all calls to Inflate()/Deflate().\n        /// </summary>\n        internal long TotalBytesOut;\n\n        /// <summary>\n        /// used for diagnostics, when something goes wrong!\n        /// </summary>\n        internal System.String Message;\n\n        internal DeflateManager dstate;\n        internal InflateManager istate;\n\n        internal uint _Adler32;\n\n        /// <summary>\n        /// The compression level to use in this codec.  Useful only in compression mode.\n        /// </summary>\n        internal CompressionLevel CompressLevel = CompressionLevel.Default;\n\n        /// <summary>\n        /// The number of Window Bits to use.  \n        /// </summary>\n        /// <remarks>\n        /// This gauges the size of the sliding window, and hence the \n        /// compression effectiveness as well as memory consumption. It's best to just leave this \n        /// setting alone if you don't know what it is.  The maximum value is 15 bits, which implies\n        /// a 32k window.  \n        /// </remarks>\n        internal int WindowBits = ZlibConstants.WindowBitsDefault;\n\n        /// <summary>\n        /// The compression strategy to use.\n        /// </summary>\n        /// <remarks>\n        /// This is only effective in compression.  The theory offered by ZLIB is that different\n        /// strategies could potentially produce significant differences in compression behavior\n        /// for different data sets.  Unfortunately I don't have any good recommendations for how\n        /// to set it differently.  When I tested changing the strategy I got minimally different\n        /// compression performance. It's best to leave this property alone if you don't have a\n        /// good feel for it.  Or, you may want to produce a test harness that runs through the\n        /// different strategy options and evaluates them on different file types. If you do that,\n        /// let me know your results.\n        /// </remarks>\n        internal CompressionStrategy Strategy = CompressionStrategy.Default;\n\n\n        /// <summary>\n        /// The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this.\n        /// </summary>\n        internal int Adler32 { get { return (int)_Adler32; } }\n\n\n        /// <summary>\n        /// Create a ZlibCodec.\n        /// </summary>\n        /// <remarks>\n        /// If you use this default constructor, you will later have to explicitly call \n        /// InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress \n        /// or decompress. \n        /// </remarks>\n        internal ZlibCodec() { }\n\n        /// <summary>\n        /// Create a ZlibCodec that either compresses or decompresses.\n        /// </summary>\n        /// <param name=\"mode\">\n        /// Indicates whether the codec should compress (deflate) or decompress (inflate).\n        /// </param>\n        internal ZlibCodec(CompressionMode mode)\n        {\n            if (mode == CompressionMode.Compress)\n            {\n                int rc = InitializeDeflate();\n                if (rc != ZlibConstants.Z_OK) throw new ZlibException(\"Cannot initialize for deflate.\");\n            }\n            else if (mode == CompressionMode.Decompress)\n            {\n                int rc = InitializeInflate();\n                if (rc != ZlibConstants.Z_OK) throw new ZlibException(\"Cannot initialize for inflate.\");\n            }\n            else throw new ZlibException(\"Invalid ZlibStreamFlavor.\");\n        }\n\n        /// <summary>\n        /// Initialize the inflation state. \n        /// </summary>\n        /// <remarks>\n        /// It is not necessary to call this before using the ZlibCodec to inflate data; \n        /// It is implicitly called when you call the constructor.\n        /// </remarks>\n        /// <returns>Z_OK if everything goes well.</returns>\n        internal int InitializeInflate()\n        {\n            return InitializeInflate(this.WindowBits);\n        }\n\n        /// <summary>\n        /// Initialize the inflation state with an explicit flag to\n        /// govern the handling of RFC1950 header bytes.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// By default, the ZLIB header defined in <see\n        /// href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC 1950</see> is expected.  If\n        /// you want to read a zlib stream you should specify true for\n        /// expectRfc1950Header.  If you have a deflate stream, you will want to specify\n        /// false. It is only necessary to invoke this initializer explicitly if you\n        /// want to specify false.\n        /// </remarks>\n        ///\n        /// <param name=\"expectRfc1950Header\">whether to expect an RFC1950 header byte\n        /// pair when reading the stream of data to be inflated.</param>\n        ///\n        /// <returns>Z_OK if everything goes well.</returns>\n        internal int InitializeInflate(bool expectRfc1950Header)\n        {\n            return InitializeInflate(this.WindowBits, expectRfc1950Header);\n        }\n\n        /// <summary>\n        /// Initialize the ZlibCodec for inflation, with the specified number of window bits. \n        /// </summary>\n        /// <param name=\"windowBits\">The number of window bits to use. If you need to ask what that is, \n        /// then you shouldn't be calling this initializer.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int InitializeInflate(int windowBits)\n        {\n            this.WindowBits = windowBits;\n            return InitializeInflate(windowBits, true);\n        }\n\n        /// <summary>\n        /// Initialize the inflation state with an explicit flag to govern the handling of\n        /// RFC1950 header bytes. \n        /// </summary>\n        ///\n        /// <remarks>\n        /// If you want to read a zlib stream you should specify true for\n        /// expectRfc1950Header. In this case, the library will expect to find a ZLIB\n        /// header, as defined in <see href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC\n        /// 1950</see>, in the compressed stream.  If you will be reading a DEFLATE or\n        /// GZIP stream, which does not have such a header, you will want to specify\n        /// false.\n        /// </remarks>\n        ///\n        /// <param name=\"expectRfc1950Header\">whether to expect an RFC1950 header byte pair when reading \n        /// the stream of data to be inflated.</param>\n        /// <param name=\"windowBits\">The number of window bits to use. If you need to ask what that is, \n        /// then you shouldn't be calling this initializer.</param>\n        /// <returns>Z_OK if everything goes well.</returns>\n        internal int InitializeInflate(int windowBits, bool expectRfc1950Header)\n        {\n            this.WindowBits = windowBits;\n            if (dstate != null) throw new ZlibException(\"You may not call InitializeInflate() after calling InitializeDeflate().\");\n            istate = new InflateManager(expectRfc1950Header);\n            return istate.Initialize(this, windowBits);\n        }\n\n        /// <summary>\n        /// Inflate the data in the InputBuffer, placing the result in the OutputBuffer.\n        /// </summary>\n        /// <remarks>\n        /// You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and \n        /// AvailableBytesOut  before calling this method.\n        /// </remarks>\n        /// <example>\n        /// <code>\n        /// private void InflateBuffer()\n        /// {\n        ///     int bufferSize = 1024;\n        ///     byte[] buffer = new byte[bufferSize];\n        ///     ZlibCodec decompressor = new ZlibCodec();\n        /// \n        ///     Console.WriteLine(\"\\n============================================\");\n        ///     Console.WriteLine(\"Size of Buffer to Inflate: {0} bytes.\", CompressedBytes.Length);\n        ///     MemoryStream ms = new MemoryStream(DecompressedBytes);\n        /// \n        ///     int rc = decompressor.InitializeInflate();\n        /// \n        ///     decompressor.InputBuffer = CompressedBytes;\n        ///     decompressor.NextIn = 0;\n        ///     decompressor.AvailableBytesIn = CompressedBytes.Length;\n        /// \n        ///     decompressor.OutputBuffer = buffer;\n        /// \n        ///     // pass 1: inflate \n        ///     do\n        ///     {\n        ///         decompressor.NextOut = 0;\n        ///         decompressor.AvailableBytesOut = buffer.Length;\n        ///         rc = decompressor.Inflate(FlushType.None);\n        /// \n        ///         if (rc != ZlibConstants.Z_OK &amp;&amp; rc != ZlibConstants.Z_STREAM_END)\n        ///             throw new Exception(\"inflating: \" + decompressor.Message);\n        /// \n        ///         ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut);\n        ///     }\n        ///     while (decompressor.AvailableBytesIn &gt; 0 || decompressor.AvailableBytesOut == 0);\n        /// \n        ///     // pass 2: finish and flush\n        ///     do\n        ///     {\n        ///         decompressor.NextOut = 0;\n        ///         decompressor.AvailableBytesOut = buffer.Length;\n        ///         rc = decompressor.Inflate(FlushType.Finish);\n        /// \n        ///         if (rc != ZlibConstants.Z_STREAM_END &amp;&amp; rc != ZlibConstants.Z_OK)\n        ///             throw new Exception(\"inflating: \" + decompressor.Message);\n        /// \n        ///         if (buffer.Length - decompressor.AvailableBytesOut &gt; 0)\n        ///             ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut);\n        ///     }\n        ///     while (decompressor.AvailableBytesIn &gt; 0 || decompressor.AvailableBytesOut == 0);\n        /// \n        ///     decompressor.EndInflate();\n        /// }\n        ///\n        /// </code>\n        /// </example>\n        /// <param name=\"flush\">The flush to use when inflating.</param>\n        /// <returns>Z_OK if everything goes well.</returns>\n        internal int Inflate(FlushType flush)\n        {\n            if (istate == null)\n                throw new ZlibException(\"No Inflate State!\");\n            return istate.Inflate(flush);\n        }\n\n\n        /// <summary>\n        /// Ends an inflation session. \n        /// </summary>\n        /// <remarks>\n        /// Call this after successively calling Inflate().  This will cause all buffers to be flushed. \n        /// After calling this you cannot call Inflate() without a intervening call to one of the\n        /// InitializeInflate() overloads.\n        /// </remarks>\n        /// <returns>Z_OK if everything goes well.</returns>\n        internal int EndInflate()\n        {\n            if (istate == null)\n                throw new ZlibException(\"No Inflate State!\");\n            int ret = istate.End();\n            istate = null;\n            return ret;\n        }\n\n        /// <summary>\n        /// I don't know what this does!\n        /// </summary>\n        /// <returns>Z_OK if everything goes well.</returns>\n        internal int SyncInflate()\n        {\n            if (istate == null)\n                throw new ZlibException(\"No Inflate State!\");\n            return istate.Sync();\n        }\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation.\n        /// </summary>\n        /// <remarks>\n        /// The codec will use the MAX window bits and the default level of compression.\n        /// </remarks>\n        /// <example>\n        /// <code>\n        ///  int bufferSize = 40000;\n        ///  byte[] CompressedBytes = new byte[bufferSize];\n        ///  byte[] DecompressedBytes = new byte[bufferSize];\n        ///  \n        ///  ZlibCodec compressor = new ZlibCodec();\n        ///  \n        ///  compressor.InitializeDeflate(CompressionLevel.Default);\n        ///  \n        ///  compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress);\n        ///  compressor.NextIn = 0;\n        ///  compressor.AvailableBytesIn = compressor.InputBuffer.Length;\n        ///  \n        ///  compressor.OutputBuffer = CompressedBytes;\n        ///  compressor.NextOut = 0;\n        ///  compressor.AvailableBytesOut = CompressedBytes.Length;\n        ///  \n        ///  while (compressor.TotalBytesIn != TextToCompress.Length &amp;&amp; compressor.TotalBytesOut &lt; bufferSize)\n        ///  {\n        ///    compressor.Deflate(FlushType.None);\n        ///  }\n        ///  \n        ///  while (true)\n        ///  {\n        ///    int rc= compressor.Deflate(FlushType.Finish);\n        ///    if (rc == ZlibConstants.Z_STREAM_END) break;\n        ///  }\n        ///  \n        ///  compressor.EndDeflate();\n        ///   \n        /// </code>\n        /// </example>\n        /// <returns>Z_OK if all goes well. You generally don't need to check the return code.</returns>\n        internal int InitializeDeflate()\n        {\n            return _InternalInitializeDeflate(true);\n        }\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel.\n        /// </summary>\n        /// <remarks>\n        /// The codec will use the maximum window bits (15) and the specified\n        /// CompressionLevel.  It will emit a ZLIB stream as it compresses.\n        /// </remarks>\n        /// <param name=\"level\">The compression level for the codec.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int InitializeDeflate(CompressionLevel level)\n        {\n            this.CompressLevel = level;\n            return _InternalInitializeDeflate(true);\n        }\n\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, \n        /// and the explicit flag governing whether to emit an RFC1950 header byte pair.\n        /// </summary>\n        /// <remarks>\n        /// The codec will use the maximum window bits (15) and the specified CompressionLevel.\n        /// If you want to generate a zlib stream, you should specify true for\n        /// wantRfc1950Header. In this case, the library will emit a ZLIB\n        /// header, as defined in <see href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC\n        /// 1950</see>, in the compressed stream.  \n        /// </remarks>\n        /// <param name=\"level\">The compression level for the codec.</param>\n        /// <param name=\"wantRfc1950Header\">whether to emit an initial RFC1950 byte pair in the compressed stream.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int InitializeDeflate(CompressionLevel level, bool wantRfc1950Header)\n        {\n            this.CompressLevel = level;\n            return _InternalInitializeDeflate(wantRfc1950Header);\n        }\n\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, \n        /// and the specified number of window bits. \n        /// </summary>\n        /// <remarks>\n        /// The codec will use the specified number of window bits and the specified CompressionLevel.\n        /// </remarks>\n        /// <param name=\"level\">The compression level for the codec.</param>\n        /// <param name=\"bits\">the number of window bits to use.  If you don't know what this means, don't use this method.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int InitializeDeflate(CompressionLevel level, int bits)\n        {\n            this.CompressLevel = level;\n            this.WindowBits = bits;\n            return _InternalInitializeDeflate(true);\n        }\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation, using the specified\n        /// CompressionLevel, the specified number of window bits, and the explicit flag\n        /// governing whether to emit an RFC1950 header byte pair.\n        /// </summary>\n        ///\n        /// <param name=\"level\">The compression level for the codec.</param>\n        /// <param name=\"wantRfc1950Header\">whether to emit an initial RFC1950 byte pair in the compressed stream.</param>\n        /// <param name=\"bits\">the number of window bits to use.  If you don't know what this means, don't use this method.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int InitializeDeflate(CompressionLevel level, int bits, bool wantRfc1950Header)\n        {\n            this.CompressLevel = level;\n            this.WindowBits = bits;\n            return _InternalInitializeDeflate(wantRfc1950Header);\n        }\n\n        private int _InternalInitializeDeflate(bool wantRfc1950Header)\n        {\n            if (istate != null) throw new ZlibException(\"You may not call InitializeDeflate() after calling InitializeInflate().\");\n            dstate = new DeflateManager();\n            dstate.WantRfc1950HeaderBytes = wantRfc1950Header;\n\n            return dstate.Initialize(this, this.CompressLevel, this.WindowBits, this.Strategy);\n        }\n\n        /// <summary>\n        /// Deflate one batch of data.\n        /// </summary>\n        /// <remarks>\n        /// You must have set InputBuffer and OutputBuffer before calling this method.\n        /// </remarks>\n        /// <example>\n        /// <code>\n        /// private void DeflateBuffer(CompressionLevel level)\n        /// {\n        ///     int bufferSize = 1024;\n        ///     byte[] buffer = new byte[bufferSize];\n        ///     ZlibCodec compressor = new ZlibCodec();\n        /// \n        ///     Console.WriteLine(\"\\n============================================\");\n        ///     Console.WriteLine(\"Size of Buffer to Deflate: {0} bytes.\", UncompressedBytes.Length);\n        ///     MemoryStream ms = new MemoryStream();\n        /// \n        ///     int rc = compressor.InitializeDeflate(level);\n        /// \n        ///     compressor.InputBuffer = UncompressedBytes;\n        ///     compressor.NextIn = 0;\n        ///     compressor.AvailableBytesIn = UncompressedBytes.Length;\n        /// \n        ///     compressor.OutputBuffer = buffer;\n        /// \n        ///     // pass 1: deflate \n        ///     do\n        ///     {\n        ///         compressor.NextOut = 0;\n        ///         compressor.AvailableBytesOut = buffer.Length;\n        ///         rc = compressor.Deflate(FlushType.None);\n        /// \n        ///         if (rc != ZlibConstants.Z_OK &amp;&amp; rc != ZlibConstants.Z_STREAM_END)\n        ///             throw new Exception(\"deflating: \" + compressor.Message);\n        /// \n        ///         ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut);\n        ///     }\n        ///     while (compressor.AvailableBytesIn &gt; 0 || compressor.AvailableBytesOut == 0);\n        /// \n        ///     // pass 2: finish and flush\n        ///     do\n        ///     {\n        ///         compressor.NextOut = 0;\n        ///         compressor.AvailableBytesOut = buffer.Length;\n        ///         rc = compressor.Deflate(FlushType.Finish);\n        /// \n        ///         if (rc != ZlibConstants.Z_STREAM_END &amp;&amp; rc != ZlibConstants.Z_OK)\n        ///             throw new Exception(\"deflating: \" + compressor.Message);\n        /// \n        ///         if (buffer.Length - compressor.AvailableBytesOut &gt; 0)\n        ///             ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut);\n        ///     }\n        ///     while (compressor.AvailableBytesIn &gt; 0 || compressor.AvailableBytesOut == 0);\n        /// \n        ///     compressor.EndDeflate();\n        /// \n        ///     ms.Seek(0, SeekOrigin.Begin);\n        ///     CompressedBytes = new byte[compressor.TotalBytesOut];\n        ///     ms.Read(CompressedBytes, 0, CompressedBytes.Length);\n        /// }\n        /// </code>\n        /// </example>\n        /// <param name=\"flush\">whether to flush all data as you deflate. Generally you will want to \n        /// use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to \n        /// flush everything. \n        /// </param>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int Deflate(FlushType flush)\n        {\n            if (dstate == null)\n                throw new ZlibException(\"No Deflate State!\");\n            return dstate.Deflate(flush);\n        }\n\n        /// <summary>\n        /// End a deflation session.\n        /// </summary>\n        /// <remarks>\n        /// Call this after making a series of one or more calls to Deflate(). All buffers are flushed.\n        /// </remarks>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int EndDeflate()\n        {\n            if (dstate == null)\n                throw new ZlibException(\"No Deflate State!\");\n            // TODO: dinoch Tue, 03 Nov 2009  15:39 (test this)\n            //int ret = dstate.End();\n            dstate = null;\n            return ZlibConstants.Z_OK; //ret;\n        }\n\n        /// <summary>\n        /// Reset a codec for another deflation session.\n        /// </summary>\n        /// <remarks>\n        /// Call this to reset the deflation state.  For example if a thread is deflating\n        /// non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first\n        /// block and before the next Deflate(None) of the second block.\n        /// </remarks>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal void ResetDeflate()\n        {\n            if (dstate == null)\n                throw new ZlibException(\"No Deflate State!\");\n            dstate.Reset();\n        }\n\n\n        /// <summary>\n        /// Set the CompressionStrategy and CompressionLevel for a deflation session.\n        /// </summary>\n        /// <param name=\"level\">the level of compression to use.</param>\n        /// <param name=\"strategy\">the strategy to use for compression.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int SetDeflateParams(CompressionLevel level, CompressionStrategy strategy)\n        {\n            if (dstate == null)\n                throw new ZlibException(\"No Deflate State!\");\n            return dstate.SetParams(level, strategy);\n        }\n\n\n        /// <summary>\n        /// Set the dictionary to be used for either Inflation or Deflation.\n        /// </summary>\n        /// <param name=\"dictionary\">The dictionary bytes to use.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        internal int SetDictionary(byte[] dictionary)\n        {\n            if (istate != null)\n                return istate.SetDictionary(dictionary);\n\n            if (dstate != null)\n                return dstate.SetDictionary(dictionary);\n\n            throw new ZlibException(\"No Inflate or Deflate state!\");\n        }\n\n        // Flush as much pending output as possible. All deflate() output goes\n        // through this function so some applications may wish to modify it\n        // to avoid allocating a large strm->next_out buffer and copying into it.\n        // (See also read_buf()).\n        internal void flush_pending()\n        {\n            int len = dstate.pendingCount;\n\n            if (len > AvailableBytesOut)\n                len = AvailableBytesOut;\n            if (len == 0)\n                return;\n\n            if (dstate.pending.Length <= dstate.nextPending ||\n                OutputBuffer.Length <= NextOut ||\n                dstate.pending.Length < (dstate.nextPending + len) ||\n                OutputBuffer.Length < (NextOut + len))\n            {\n                throw new ZlibException(String.Format(\"Invalid State. (pending.Length={0}, pendingCount={1})\",\n                    dstate.pending.Length, dstate.pendingCount));\n            }\n\n            Array.Copy(dstate.pending, dstate.nextPending, OutputBuffer, NextOut, len);\n\n            NextOut += len;\n            dstate.nextPending += len;\n            TotalBytesOut += len;\n            AvailableBytesOut -= len;\n            dstate.pendingCount -= len;\n            if (dstate.pendingCount == 0)\n            {\n                dstate.nextPending = 0;\n            }\n        }\n\n        // Read a new buffer from the current input stream, update the adler32\n        // and total number of bytes read.  All deflate() input goes through\n        // this function so some applications may wish to modify it to avoid\n        // allocating a large strm->next_in buffer and copying from it.\n        // (See also flush_pending()).\n        internal int read_buf(byte[] buf, int start, int size)\n        {\n            int len = AvailableBytesIn;\n\n            if (len > size)\n                len = size;\n            if (len == 0)\n                return 0;\n\n            AvailableBytesIn -= len;\n\n            if (dstate.WantRfc1950HeaderBytes)\n            {\n                _Adler32 = Adler.Adler32(_Adler32, InputBuffer, NextIn, len);\n            }\n            Array.Copy(InputBuffer, NextIn, buf, start, len);\n            NextIn += len;\n            TotalBytesIn += len;\n            return len;\n        }\n\n    }\n\n    internal enum ZlibStreamFlavor { ZLIB = 1950, DEFLATE = 1951, GZIP = 1952 }\n\n    internal class ZlibBaseStream : System.IO.Stream\n    {\n        protected internal ZlibCodec _z = null; // deferred init... new ZlibCodec();\n\n        protected internal StreamMode _streamMode = StreamMode.Undefined;\n        protected internal FlushType _flushMode;\n        protected internal ZlibStreamFlavor _flavor;\n        protected internal CompressionMode _compressionMode;\n        protected internal CompressionLevel _level;\n        protected internal bool _leaveOpen;\n        protected internal byte[] _workingBuffer;\n        protected internal int _bufferSize = ZlibConstants.WorkingBufferSizeDefault;\n        protected internal byte[] _buf1 = new byte[1];\n\n        protected internal System.IO.Stream _stream;\n        protected internal CompressionStrategy Strategy = CompressionStrategy.Default;\n\n        // workitem 7159\n        CRC32 crc;\n        protected internal string _GzipFileName;\n        protected internal string _GzipComment;\n        protected internal DateTime _GzipMtime;\n        protected internal int _gzipHeaderByteCount;\n\n        internal int Crc32 { get { if (crc == null) return 0; return crc.Crc32Result; } }\n\n        internal ZlibBaseStream(System.IO.Stream stream,\n                              CompressionMode compressionMode,\n                              CompressionLevel level,\n                              ZlibStreamFlavor flavor,\n                              bool leaveOpen)\n            : base()\n        {\n            this._flushMode = FlushType.None;\n            //this._workingBuffer = new byte[WORKING_BUFFER_SIZE_DEFAULT];\n            this._stream = stream;\n            this._leaveOpen = leaveOpen;\n            this._compressionMode = compressionMode;\n            this._flavor = flavor;\n            this._level = level;\n            // workitem 7159\n            if (flavor == ZlibStreamFlavor.GZIP)\n            {\n                this.crc = new CRC32();\n            }\n        }\n\n\n        protected internal bool _wantCompress\n        {\n            get\n            {\n                return (this._compressionMode == CompressionMode.Compress);\n            }\n        }\n\n        private ZlibCodec z\n        {\n            get\n            {\n                if (_z == null)\n                {\n                    bool wantRfc1950Header = (this._flavor == ZlibStreamFlavor.ZLIB);\n                    _z = new ZlibCodec();\n                    if (this._compressionMode == CompressionMode.Decompress)\n                    {\n                        _z.InitializeInflate(wantRfc1950Header);\n                    }\n                    else\n                    {\n                        _z.Strategy = Strategy;\n                        _z.InitializeDeflate(this._level, wantRfc1950Header);\n                    }\n                }\n                return _z;\n            }\n        }\n\n\n\n        private byte[] workingBuffer\n        {\n            get\n            {\n                if (_workingBuffer == null)\n                    _workingBuffer = new byte[_bufferSize];\n                return _workingBuffer;\n            }\n        }\n\n        public override void Write(System.Byte[] buffer, int offset, int count)\n        {\n            // workitem 7159\n            // calculate the CRC on the unccompressed data  (before writing)\n            if (crc != null)\n                crc.SlurpBlock(buffer, offset, count);\n\n            if (_streamMode == StreamMode.Undefined)\n                _streamMode = StreamMode.Writer;\n            else if (_streamMode != StreamMode.Writer)\n                throw new ZlibException(\"Cannot Write after Reading.\");\n\n            if (count == 0)\n                return;\n\n            // first reference of z property will initialize the private var _z\n            z.InputBuffer = buffer;\n            _z.NextIn = offset;\n            _z.AvailableBytesIn = count;\n            bool done = false;\n            do\n            {\n                _z.OutputBuffer = workingBuffer;\n                _z.NextOut = 0;\n                _z.AvailableBytesOut = _workingBuffer.Length;\n                int rc = (_wantCompress)\n                    ? _z.Deflate(_flushMode)\n                    : _z.Inflate(_flushMode);\n                if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END)\n                    throw new ZlibException((_wantCompress ? \"de\" : \"in\") + \"flating: \" + _z.Message);\n\n                //if (_workingBuffer.Length - _z.AvailableBytesOut > 0)\n                _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut);\n\n                done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0;\n\n                // If GZIP and de-compress, we're done when 8 bytes remain.\n                if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress)\n                    done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0);\n\n            }\n            while (!done);\n        }\n\n\n\n        private void finish()\n        {\n            if (_z == null) return;\n\n            if (_streamMode == StreamMode.Writer)\n            {\n                bool done = false;\n                do\n                {\n                    _z.OutputBuffer = workingBuffer;\n                    _z.NextOut = 0;\n                    _z.AvailableBytesOut = _workingBuffer.Length;\n                    int rc = (_wantCompress)\n                        ? _z.Deflate(FlushType.Finish)\n                        : _z.Inflate(FlushType.Finish);\n\n                    if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK)\n                    {\n                        string verb = (_wantCompress ? \"de\" : \"in\") + \"flating\";\n                        if (_z.Message == null)\n                            throw new ZlibException(String.Format(\"{0}: (rc = {1})\", verb, rc));\n                        else\n                            throw new ZlibException(verb + \": \" + _z.Message);\n                    }\n\n                    if (_workingBuffer.Length - _z.AvailableBytesOut > 0)\n                    {\n                        _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut);\n                    }\n\n                    done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0;\n                    // If GZIP and de-compress, we're done when 8 bytes remain.\n                    if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress)\n                        done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0);\n\n                }\n                while (!done);\n\n                Flush();\n\n                // workitem 7159\n                if (_flavor == ZlibStreamFlavor.GZIP)\n                {\n                    if (_wantCompress)\n                    {\n                        // Emit the GZIP trailer: CRC32 and  size mod 2^32\n                        int c1 = crc.Crc32Result;\n                        _stream.Write(BitConverter.GetBytes(c1), 0, 4);\n                        int c2 = (Int32)(crc.TotalBytesRead & 0x00000000FFFFFFFF);\n                        _stream.Write(BitConverter.GetBytes(c2), 0, 4);\n                    }\n                    else\n                    {\n                        throw new ZlibException(\"Writing with decompression is not supported.\");\n                    }\n                }\n            }\n            // workitem 7159\n            else if (_streamMode == StreamMode.Reader)\n            {\n                if (_flavor == ZlibStreamFlavor.GZIP)\n                {\n                    if (!_wantCompress)\n                    {\n                        // workitem 8501: handle edge case (decompress empty stream)\n                        if (_z.TotalBytesOut == 0L)\n                            return;\n\n                        // Read and potentially verify the GZIP trailer:\n                        // CRC32 and size mod 2^32\n                        byte[] trailer = new byte[8];\n\n                        // workitems 8679 & 12554\n                        if (_z.AvailableBytesIn < 8)\n                        {\n                            // Make sure we have read to the end of the stream\n                            Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, _z.AvailableBytesIn);\n                            int bytesNeeded = 8 - _z.AvailableBytesIn;\n                            int bytesRead = _stream.Read(trailer,\n                                                         _z.AvailableBytesIn,\n                                                         bytesNeeded);\n                            if (bytesNeeded != bytesRead)\n                            {\n                                throw new ZlibException(String.Format(\"Missing or incomplete GZIP trailer. Expected 8 bytes, got {0}.\",\n                                                                      _z.AvailableBytesIn + bytesRead));\n                            }\n                        }\n                        else\n                        {\n                            Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, trailer.Length);\n                        }\n\n                        Int32 crc32_expected = BitConverter.ToInt32(trailer, 0);\n                        Int32 crc32_actual = crc.Crc32Result;\n                        Int32 isize_expected = BitConverter.ToInt32(trailer, 4);\n                        Int32 isize_actual = (Int32)(_z.TotalBytesOut & 0x00000000FFFFFFFF);\n\n                        if (crc32_actual != crc32_expected)\n                            throw new ZlibException(String.Format(\"Bad CRC32 in GZIP trailer. (actual({0:X8})!=expected({1:X8}))\", crc32_actual, crc32_expected));\n\n                        if (isize_actual != isize_expected)\n                            throw new ZlibException(String.Format(\"Bad size in GZIP trailer. (actual({0})!=expected({1}))\", isize_actual, isize_expected));\n\n                    }\n                    else\n                    {\n                        throw new ZlibException(\"Reading with compression is not supported.\");\n                    }\n                }\n            }\n        }\n\n\n        private void end()\n        {\n            if (z == null)\n                return;\n            if (_wantCompress)\n            {\n                _z.EndDeflate();\n            }\n            else\n            {\n                _z.EndInflate();\n            }\n            _z = null;\n        }\n\n        public override void Flush()\n        {\n            _stream.Flush();\n        }\n\n        public override System.Int64 Seek(System.Int64 offset, System.IO.SeekOrigin origin)\n        {\n            throw new NotImplementedException();\n            //_outStream.Seek(offset, origin);\n        }\n        public override void SetLength(System.Int64 value)\n        {\n            _stream.SetLength(value);\n        }\n\n\n#if NOT\n        internal int Read()\n        {\n            if (Read(_buf1, 0, 1) == 0)\n                return 0;\n            // calculate CRC after reading\n            if (crc!=null)\n                crc.SlurpBlock(_buf1,0,1);\n            return (_buf1[0] & 0xFF);\n        }\n#endif\n\n        private bool nomoreinput = false;\n\n\n\n        private string ReadZeroTerminatedString()\n        {\n            var list = new System.Collections.Generic.List<byte>();\n            bool done = false;\n            do\n            {\n                // workitem 7740\n                int n = _stream.Read(_buf1, 0, 1);\n                if (n != 1)\n                    throw new ZlibException(\"Unexpected EOF reading GZIP header.\");\n                else\n                {\n                    if (_buf1[0] == 0)\n                        done = true;\n                    else\n                        list.Add(_buf1[0]);\n                }\n            } while (!done);\n            byte[] a = list.ToArray();\n            return GZipStream.iso8859dash1.GetString(a, 0, a.Length);\n        }\n\n\n        private int _ReadAndValidateGzipHeader()\n        {\n            int totalBytesRead = 0;\n            // read the header on the first read\n            byte[] header = new byte[10];\n            int n = _stream.Read(header, 0, header.Length);\n\n            // workitem 8501: handle edge case (decompress empty stream)\n            if (n == 0)\n                return 0;\n\n            if (n != 10)\n                throw new ZlibException(\"Not a valid GZIP stream.\");\n\n            if (header[0] != 0x1F || header[1] != 0x8B || header[2] != 8)\n                throw new ZlibException(\"Bad GZIP header.\");\n\n            Int32 timet = BitConverter.ToInt32(header, 4);\n            _GzipMtime = GZipStream._unixEpoch.AddSeconds(timet);\n            totalBytesRead += n;\n            if ((header[3] & 0x04) == 0x04)\n            {\n                // read and discard extra field\n                n = _stream.Read(header, 0, 2); // 2-byte length field\n                totalBytesRead += n;\n\n                Int16 extraLength = (Int16)(header[0] + header[1] * 256);\n                byte[] extra = new byte[extraLength];\n                n = _stream.Read(extra, 0, extra.Length);\n                if (n != extraLength)\n                    throw new ZlibException(\"Unexpected end-of-file reading GZIP header.\");\n                totalBytesRead += n;\n            }\n            if ((header[3] & 0x08) == 0x08)\n                _GzipFileName = ReadZeroTerminatedString();\n            if ((header[3] & 0x10) == 0x010)\n                _GzipComment = ReadZeroTerminatedString();\n            if ((header[3] & 0x02) == 0x02)\n                Read(_buf1, 0, 1); // CRC16, ignore\n\n            return totalBytesRead;\n        }\n\n\n\n        public override System.Int32 Read(System.Byte[] buffer, System.Int32 offset, System.Int32 count)\n        {\n            // According to MS documentation, any implementation of the IO.Stream.Read function must:\n            // (a) throw an exception if offset & count reference an invalid part of the buffer,\n            //     or if count < 0, or if buffer is null\n            // (b) return 0 only upon EOF, or if count = 0\n            // (c) if not EOF, then return at least 1 byte, up to <count> bytes\n\n            if (_streamMode == StreamMode.Undefined)\n            {\n                if (!this._stream.CanRead) throw new ZlibException(\"The stream is not readable.\");\n                // for the first read, set up some controls.\n                _streamMode = StreamMode.Reader;\n                // (The first reference to _z goes through the private accessor which\n                // may initialize it.)\n                z.AvailableBytesIn = 0;\n                if (_flavor == ZlibStreamFlavor.GZIP)\n                {\n                    _gzipHeaderByteCount = _ReadAndValidateGzipHeader();\n                    // workitem 8501: handle edge case (decompress empty stream)\n                    if (_gzipHeaderByteCount == 0)\n                        return 0;\n                }\n            }\n\n            if (_streamMode != StreamMode.Reader)\n                throw new ZlibException(\"Cannot Read after Writing.\");\n\n            if (count == 0) return 0;\n            if (nomoreinput && _wantCompress) return 0;  // workitem 8557\n            if (buffer == null) throw new ArgumentNullException(\"buffer\");\n            if (count < 0) throw new ArgumentOutOfRangeException(\"count\");\n            if (offset < buffer.GetLowerBound(0)) throw new ArgumentOutOfRangeException(\"offset\");\n            if ((offset + count) > buffer.GetLength(0)) throw new ArgumentOutOfRangeException(\"count\");\n\n            int rc = 0;\n\n            // set up the output of the deflate/inflate codec:\n            _z.OutputBuffer = buffer;\n            _z.NextOut = offset;\n            _z.AvailableBytesOut = count;\n\n            // This is necessary in case _workingBuffer has been resized. (new byte[])\n            // (The first reference to _workingBuffer goes through the private accessor which\n            // may initialize it.)\n            _z.InputBuffer = workingBuffer;\n\n            do\n            {\n                // need data in _workingBuffer in order to deflate/inflate.  Here, we check if we have any.\n                if ((_z.AvailableBytesIn == 0) && (!nomoreinput))\n                {\n                    // No data available, so try to Read data from the captive stream.\n                    _z.NextIn = 0;\n                    _z.AvailableBytesIn = _stream.Read(_workingBuffer, 0, _workingBuffer.Length);\n                    if (_z.AvailableBytesIn == 0)\n                        nomoreinput = true;\n\n                }\n                // we have data in InputBuffer; now compress or decompress as appropriate\n                rc = (_wantCompress)\n                    ? _z.Deflate(_flushMode)\n                    : _z.Inflate(_flushMode);\n\n                if (nomoreinput && (rc == ZlibConstants.Z_BUF_ERROR))\n                    return 0;\n\n                if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END)\n                    throw new ZlibException(String.Format(\"{0}flating:  rc={1}  msg={2}\", (_wantCompress ? \"de\" : \"in\"), rc, _z.Message));\n\n                if ((nomoreinput || rc == ZlibConstants.Z_STREAM_END) && (_z.AvailableBytesOut == count))\n                    break; // nothing more to read\n            }\n            //while (_z.AvailableBytesOut == count && rc == ZlibConstants.Z_OK);\n            while (_z.AvailableBytesOut > 0 && !nomoreinput && rc == ZlibConstants.Z_OK);\n\n\n            // workitem 8557\n            // is there more room in output?\n            if (_z.AvailableBytesOut > 0)\n            {\n                if (rc == ZlibConstants.Z_OK && _z.AvailableBytesIn == 0)\n                {\n                    // deferred\n                }\n\n                // are we completely done reading?\n                if (nomoreinput)\n                {\n                    // and in compression?\n                    if (_wantCompress)\n                    {\n                        // no more input data available; therefore we flush to\n                        // try to complete the read\n                        rc = _z.Deflate(FlushType.Finish);\n\n                        if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END)\n                            throw new ZlibException(String.Format(\"Deflating:  rc={0}  msg={1}\", rc, _z.Message));\n                    }\n                }\n            }\n\n\n            rc = (count - _z.AvailableBytesOut);\n\n            // calculate CRC after reading\n            if (crc != null)\n                crc.SlurpBlock(buffer, offset, rc);\n\n            return rc;\n        }\n\n\n\n        public override System.Boolean CanRead\n        {\n            get { return this._stream.CanRead; }\n        }\n\n        public override System.Boolean CanSeek\n        {\n            get { return this._stream.CanSeek; }\n        }\n\n        public override System.Boolean CanWrite\n        {\n            get { return this._stream.CanWrite; }\n        }\n\n        public override System.Int64 Length\n        {\n            get { return _stream.Length; }\n        }\n\n        public override long Position\n        {\n            get { throw new NotImplementedException(); }\n            set { throw new NotImplementedException(); }\n        }\n\n        internal enum StreamMode\n        {\n            Writer,\n            Reader,\n            Undefined,\n        }\n\n\n        internal static void CompressString(String s, Stream compressor)\n        {\n            byte[] uncompressed = System.Text.Encoding.UTF8.GetBytes(s);\n            using (compressor)\n            {\n                compressor.Write(uncompressed, 0, uncompressed.Length);\n            }\n        }\n\n        internal static void CompressBuffer(byte[] b, Stream compressor)\n        {\n            // workitem 8460\n            using (compressor)\n            {\n                compressor.Write(b, 0, b.Length);\n            }\n        }\n\n        internal static String UncompressString(byte[] compressed, Stream decompressor)\n        {\n            // workitem 8460\n            byte[] working = new byte[1024];\n            var encoding = System.Text.Encoding.UTF8;\n            using (var output = new MemoryStream())\n            {\n                using (decompressor)\n                {\n                    int n;\n                    while ((n = decompressor.Read(working, 0, working.Length)) != 0)\n                    {\n                        output.Write(working, 0, n);\n                    }\n                }\n\n                // reset to allow read from start\n                output.Seek(0, SeekOrigin.Begin);\n                var sr = new StreamReader(output, encoding);\n                return sr.ReadToEnd();\n            }\n        }\n\n        internal static byte[] UncompressBuffer(byte[] compressed, Stream decompressor)\n        {\n            // workitem 8460\n            byte[] working = new byte[1024];\n            using (var output = new MemoryStream())\n            {\n                using (decompressor)\n                {\n                    int n;\n                    while ((n = decompressor.Read(working, 0, working.Length)) != 0)\n                    {\n                        output.Write(working, 0, n);\n                    }\n                }\n                return output.ToArray();\n            }\n        }\n\n    }\n\n    /// <summary>\n    /// Describes how to flush the current deflate operation.\n    /// </summary>\n    /// <remarks>\n    /// The different FlushType values are useful when using a Deflate in a streaming application.\n    /// </remarks>\n    internal enum FlushType\n    {\n        /// <summary>No flush at all.</summary>\n        None = 0,\n\n        /// <summary>Closes the current block, but doesn't flush it to\n        /// the output. Used internally only in hypothetical\n        /// scenarios.  This was supposed to be removed by Zlib, but it is\n        /// still in use in some edge cases.\n        /// </summary>\n        Partial,\n\n        /// <summary>\n        /// Use this during compression to specify that all pending output should be\n        /// flushed to the output buffer and the output should be aligned on a byte\n        /// boundary.  You might use this in a streaming communication scenario, so that\n        /// the decompressor can get all input data available so far.  When using this\n        /// with a ZlibCodec, <c>AvailableBytesIn</c> will be zero after the call if\n        /// enough output space has been provided before the call.  Flushing will\n        /// degrade compression and so it should be used only when necessary.\n        /// </summary>\n        Sync,\n\n        /// <summary>\n        /// Use this during compression to specify that all output should be flushed, as\n        /// with <c>FlushType.Sync</c>, but also, the compression state should be reset\n        /// so that decompression can restart from this point if previous compressed\n        /// data has been damaged or if random access is desired.  Using\n        /// <c>FlushType.Full</c> too often can significantly degrade the compression.\n        /// </summary>\n        Full,\n\n        /// <summary>Signals the end of the compression/decompression stream.</summary>\n        Finish,\n    }\n\n\n    /// <summary>\n    /// The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress.\n    /// </summary>\n    public enum CompressionLevel\n    {\n        /// <summary>\n        /// None means that the data will be simply stored, with no change at all.\n        /// If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None\n        /// cannot be opened with the default zip reader. Use a different CompressionLevel.\n        /// </summary>\n        None = 0,\n        /// <summary>\n        /// Same as None.\n        /// </summary>\n        Level0 = 0,\n\n        /// <summary>\n        /// The fastest but least effective compression.\n        /// </summary>\n        BestSpeed = 1,\n\n        /// <summary>\n        /// A synonym for BestSpeed.\n        /// </summary>\n        Level1 = 1,\n\n        /// <summary>\n        /// A little slower, but better, than level 1.\n        /// </summary>\n        Level2 = 2,\n\n        /// <summary>\n        /// A little slower, but better, than level 2.\n        /// </summary>\n        Level3 = 3,\n\n        /// <summary>\n        /// A little slower, but better, than level 3.\n        /// </summary>\n        Level4 = 4,\n\n        /// <summary>\n        /// A little slower than level 4, but with better compression.\n        /// </summary>\n        Level5 = 5,\n\n        /// <summary>\n        /// The default compression level, with a good balance of speed and compression efficiency.\n        /// </summary>\n        Default = 6,\n        /// <summary>\n        /// A synonym for Default.\n        /// </summary>\n        Level6 = 6,\n\n        /// <summary>\n        /// Pretty good compression!\n        /// </summary>\n        Level7 = 7,\n\n        /// <summary>\n        ///  Better compression than Level7!\n        /// </summary>\n        Level8 = 8,\n\n        /// <summary>\n        /// The \"best\" compression, where best means greatest reduction in size of the input data stream.\n        /// This is also the slowest compression.\n        /// </summary>\n        BestCompression = 9,\n\n        /// <summary>\n        /// A synonym for BestCompression.\n        /// </summary>\n        Level9 = 9,\n    }\n\n    /// <summary>\n    /// Describes options for how the compression algorithm is executed.  Different strategies\n    /// work better on different sorts of data.  The strategy parameter can affect the compression\n    /// ratio and the speed of compression but not the correctness of the compresssion.\n    /// </summary>\n    internal enum CompressionStrategy\n    {\n        /// <summary>\n        /// The default strategy is probably the best for normal data.\n        /// </summary>\n        Default = 0,\n\n        /// <summary>\n        /// The <c>Filtered</c> strategy is intended to be used most effectively with data produced by a\n        /// filter or predictor.  By this definition, filtered data consists mostly of small\n        /// values with a somewhat random distribution.  In this case, the compression algorithm\n        /// is tuned to compress them better.  The effect of <c>Filtered</c> is to force more Huffman\n        /// coding and less string matching; it is a half-step between <c>Default</c> and <c>HuffmanOnly</c>.\n        /// </summary>\n        Filtered = 1,\n\n        /// <summary>\n        /// Using <c>HuffmanOnly</c> will force the compressor to do Huffman encoding only, with no\n        /// string matching.\n        /// </summary>\n        HuffmanOnly = 2,\n    }\n\n\n    /// <summary>\n    /// An enum to specify the direction of transcoding - whether to compress or decompress.\n    /// </summary>\n    internal enum CompressionMode\n    {\n        /// <summary>\n        /// Used to specify that the stream should compress the data.\n        /// </summary>\n        Compress = 0,\n        /// <summary>\n        /// Used to specify that the stream should decompress the data.\n        /// </summary>\n        Decompress = 1,\n    }\n\n\n    /// <summary>\n    /// A general purpose exception class for exceptions in the Zlib library.\n    /// </summary>\n    internal class ZlibException : System.Exception\n    {\n        /// <summary>\n        /// The ZlibException class captures exception information generated\n        /// by the Zlib library.\n        /// </summary>\n        internal ZlibException()\n            : base()\n        {\n        }\n\n        /// <summary>\n        /// This ctor collects a message attached to the exception.\n        /// </summary>\n        /// <param name=\"s\">the message for the exception.</param>\n        internal ZlibException(System.String s)\n            : base(s)\n        {\n        }\n    }\n\n\n    internal class SharedUtils\n    {\n        /// <summary>\n        /// Performs an unsigned bitwise right shift with the specified number\n        /// </summary>\n        /// <param name=\"number\">Number to operate on</param>\n        /// <param name=\"bits\">Ammount of bits to shift</param>\n        /// <returns>The resulting number from the shift operation</returns>\n        internal static int URShift(int number, int bits)\n        {\n            return (int)((uint)number >> bits);\n        }\n\n#if NOT\n        /// <summary>\n        /// Performs an unsigned bitwise right shift with the specified number\n        /// </summary>\n        /// <param name=\"number\">Number to operate on</param>\n        /// <param name=\"bits\">Ammount of bits to shift</param>\n        /// <returns>The resulting number from the shift operation</returns>\n        internal static long URShift(long number, int bits)\n        {\n            return (long) ((UInt64)number >> bits);\n        }\n#endif\n\n        /// <summary>\n        ///   Reads a number of characters from the current source TextReader and writes\n        ///   the data to the target array at the specified index.\n        /// </summary>\n        ///\n        /// <param name=\"sourceTextReader\">The source TextReader to read from</param>\n        /// <param name=\"target\">Contains the array of characteres read from the source TextReader.</param>\n        /// <param name=\"start\">The starting index of the target array.</param>\n        /// <param name=\"count\">The maximum number of characters to read from the source TextReader.</param>\n        ///\n        /// <returns>\n        ///   The number of characters read. The number will be less than or equal to\n        ///   count depending on the data available in the source TextReader. Returns -1\n        ///   if the end of the stream is reached.\n        /// </returns>\n        internal static System.Int32 ReadInput(System.IO.TextReader sourceTextReader, byte[] target, int start, int count)\n        {\n            // Returns 0 bytes if not enough space in target\n            if (target.Length == 0) return 0;\n\n            char[] charArray = new char[target.Length];\n            int bytesRead = sourceTextReader.Read(charArray, start, count);\n\n            // Returns -1 if EOF\n            if (bytesRead == 0) return -1;\n\n            for (int index = start; index < start + bytesRead; index++)\n                target[index] = (byte)charArray[index];\n\n            return bytesRead;\n        }\n\n\n        internal static byte[] ToByteArray(System.String sourceString)\n        {\n            return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString);\n        }\n\n\n        internal static char[] ToCharArray(byte[] byteArray)\n        {\n            return System.Text.UTF8Encoding.UTF8.GetChars(byteArray);\n        }\n    }\n\n    internal static class InternalConstants\n    {\n        internal static readonly int MAX_BITS = 15;\n        internal static readonly int BL_CODES = 19;\n        internal static readonly int D_CODES = 30;\n        internal static readonly int LITERALS = 256;\n        internal static readonly int LENGTH_CODES = 29;\n        internal static readonly int L_CODES = (LITERALS + 1 + LENGTH_CODES);\n\n        // Bit length codes must not exceed MAX_BL_BITS bits\n        internal static readonly int MAX_BL_BITS = 7;\n\n        // repeat previous bit length 3-6 times (2 bits of repeat count)\n        internal static readonly int REP_3_6 = 16;\n\n        // repeat a zero length 3-10 times  (3 bits of repeat count)\n        internal static readonly int REPZ_3_10 = 17;\n\n        // repeat a zero length 11-138 times  (7 bits of repeat count)\n        internal static readonly int REPZ_11_138 = 18;\n\n    }\n\n    internal sealed class StaticTree\n    {\n        internal static readonly short[] lengthAndLiteralsTreeCodes = new short[] {\n            12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8,\n            28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8,\n             2, 8, 130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8,\n            18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8,\n            10, 8, 138, 8, 74, 8, 202, 8, 42, 8, 170, 8, 106, 8, 234, 8,\n            26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8,\n             6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8,\n            22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8,\n            14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8,\n            30, 8, 158, 8, 94, 8, 222, 8, 62, 8, 190, 8, 126, 8, 254, 8,\n             1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8,\n            17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113, 8, 241, 8,\n             9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8,\n            25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8,\n             5, 8, 133, 8, 69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8,\n            21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8,\n            13, 8, 141, 8, 77, 8, 205, 8, 45, 8, 173, 8, 109, 8, 237, 8,\n            29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8,\n            19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9,\n            51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9,\n            11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9,\n            43, 9, 299, 9, 171, 9, 427, 9, 107, 9, 363, 9, 235, 9, 491, 9,\n            27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9,\n            59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379, 9, 251, 9, 507, 9,\n             7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9,\n            39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9,\n            23, 9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9,\n            55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9,\n            15, 9, 271, 9, 143, 9, 399, 9, 79, 9, 335, 9, 207, 9, 463, 9,\n            47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9,\n            31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9, 223, 9, 479, 9,\n            63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9,\n             0, 7, 64, 7, 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7,\n             8, 7, 72, 7, 40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7,\n             4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7,\n             3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8, 99, 8, 227, 8\n        };\n\n        internal static readonly short[] distTreeCodes = new short[] {\n            0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5,\n            2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5,\n            1, 5, 17, 5, 9, 5, 25, 5, 5, 5, 21, 5, 13, 5, 29, 5,\n            3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5 };\n\n        internal static readonly StaticTree Literals;\n        internal static readonly StaticTree Distances;\n        internal static readonly StaticTree BitLengths;\n\n        internal short[] treeCodes; // static tree or null\n        internal int[] extraBits;   // extra bits for each code or null\n        internal int extraBase;     // base index for extra_bits\n        internal int elems;         // max number of elements in the tree\n        internal int maxLength;     // max bit length for the codes\n\n        private StaticTree(short[] treeCodes, int[] extraBits, int extraBase, int elems, int maxLength)\n        {\n            this.treeCodes = treeCodes;\n            this.extraBits = extraBits;\n            this.extraBase = extraBase;\n            this.elems = elems;\n            this.maxLength = maxLength;\n        }\n        static StaticTree()\n        {\n            Literals = new StaticTree(lengthAndLiteralsTreeCodes, Tree.ExtraLengthBits, InternalConstants.LITERALS + 1, InternalConstants.L_CODES, InternalConstants.MAX_BITS);\n            Distances = new StaticTree(distTreeCodes, Tree.ExtraDistanceBits, 0, InternalConstants.D_CODES, InternalConstants.MAX_BITS);\n            BitLengths = new StaticTree(null, Tree.extra_blbits, 0, InternalConstants.BL_CODES, InternalConstants.MAX_BL_BITS);\n        }\n    }\n\n\n\n    /// <summary>\n    /// Computes an Adler-32 checksum.\n    /// </summary>\n    /// <remarks>\n    /// The Adler checksum is similar to a CRC checksum, but faster to compute, though less\n    /// reliable.  It is used in producing RFC1950 compressed streams.  The Adler checksum\n    /// is a required part of the \"ZLIB\" standard.  Applications will almost never need to\n    /// use this class directly.\n    /// </remarks>\n    ///\n    /// <exclude/>\n    internal sealed class Adler\n    {\n        // largest prime smaller than 65536\n        private static readonly uint BASE = 65521;\n        // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1\n        private static readonly int NMAX = 5552;\n\n\n#pragma warning disable 3001\n#pragma warning disable 3002\n\n        /// <summary>\n        ///   Calculates the Adler32 checksum.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This is used within ZLIB.  You probably don't need to use this directly.\n        ///   </para>\n        /// </remarks>\n        /// <example>\n        ///    To compute an Adler32 checksum on a byte array:\n        ///  <code>\n        ///    var adler = Adler.Adler32(0, null, 0, 0);\n        ///    adler = Adler.Adler32(adler, buffer, index, length);\n        ///  </code>\n        /// </example>\n        internal static uint Adler32(uint adler, byte[] buf, int index, int len)\n        {\n            if (buf == null)\n                return 1;\n\n            uint s1 = (uint)(adler & 0xffff);\n            uint s2 = (uint)((adler >> 16) & 0xffff);\n\n            while (len > 0)\n            {\n                int k = len < NMAX ? len : NMAX;\n                len -= k;\n                while (k >= 16)\n                {\n                    //s1 += (buf[index++] & 0xff); s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    k -= 16;\n                }\n                if (k != 0)\n                {\n                    do\n                    {\n                        s1 += buf[index++];\n                        s2 += s1;\n                    }\n                    while (--k != 0);\n                }\n                s1 %= BASE;\n                s2 %= BASE;\n            }\n            return (uint)((s2 << 16) | s1);\n        }\n#pragma warning restore 3001\n#pragma warning restore 3002\n\n    }\n\n    sealed class Tree\n    {\n        private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1);\n\n        // extra bits for each length code\n        internal static readonly int[] ExtraLengthBits = new int[]\n        {\n            0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n            3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0\n        };\n\n        // extra bits for each distance code\n        internal static readonly int[] ExtraDistanceBits = new int[]\n        {\n            0, 0, 0, 0, 1, 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,\n            7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13\n        };\n\n        // extra bits for each bit length code\n        internal static readonly int[] extra_blbits = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7 };\n\n        internal static readonly sbyte[] bl_order = new sbyte[] { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };\n\n\n        // The lengths of the bit length codes are sent in order of decreasing\n        // probability, to avoid transmitting the lengths for unused bit\n        // length codes.\n\n        internal const int Buf_size = 8 * 2;\n\n        // see definition of array dist_code below\n        //internal const int DIST_CODE_LEN = 512;\n\n        private static readonly sbyte[] _dist_code = new sbyte[]\n        {\n            0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7, \n            8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,\n            10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, \n            11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, \n            12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, \n            12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, \n            13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, \n            13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, \n            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, \n            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, \n            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, \n            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, \n            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \n            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \n            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \n            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \n            0,   0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, \n            22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, \n            24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, \n            25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, \n            26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, \n            26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, \n            27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, \n            27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, \n            28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, \n            28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, \n            28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, \n            28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, \n            29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, \n            29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, \n            29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, \n            29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29\n        };\n\n        internal static readonly sbyte[] LengthCode = new sbyte[]\n        {\n            0,   1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11,\n            12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n            16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17,\n            18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19,\n            20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\n            21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n            22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n            23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n            24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n            24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n            25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n            25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n            26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n            26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n            27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n            27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28\n        };\n\n\n        internal static readonly int[] LengthBase = new int[]\n        {\n            0,   1,  2,  3,  4,  5,  6,   7,   8,  10,  12,  14, 16, 20, 24, 28,\n            32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0\n        };\n\n\n        internal static readonly int[] DistanceBase = new int[]\n        {\n            0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192,\n            256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576\n        };\n\n\n        /// <summary>\n        /// Map from a distance to a distance code.\n        /// </summary>\n        /// <remarks> \n        /// No side effects. _dist_code[256] and _dist_code[257] are never used.\n        /// </remarks>\n        internal static int DistanceCode(int dist)\n        {\n            return (dist < 256)\n                ? _dist_code[dist]\n                : _dist_code[256 + SharedUtils.URShift(dist, 7)];\n        }\n\n        internal short[] dyn_tree; // the dynamic tree\n        internal int max_code; // largest code with non zero frequency\n        internal StaticTree staticTree; // the corresponding static tree\n\n        // Compute the optimal bit lengths for a tree and update the total bit length\n        // for the current block.\n        // IN assertion: the fields freq and dad are set, heap[heap_max] and\n        //    above are the tree nodes sorted by increasing frequency.\n        // OUT assertions: the field len is set to the optimal bit length, the\n        //     array bl_count contains the frequencies for each bit length.\n        //     The length opt_len is updated; static_len is also updated if stree is\n        //     not null.\n        internal void gen_bitlen(DeflateManager s)\n        {\n            short[] tree = dyn_tree;\n            short[] stree = staticTree.treeCodes;\n            int[] extra = staticTree.extraBits;\n            int base_Renamed = staticTree.extraBase;\n            int max_length = staticTree.maxLength;\n            int h; // heap index\n            int n, m; // iterate over the tree elements\n            int bits; // bit length\n            int xbits; // extra bits\n            short f; // frequency\n            int overflow = 0; // number of elements with bit length too large\n\n            for (bits = 0; bits <= InternalConstants.MAX_BITS; bits++)\n                s.bl_count[bits] = 0;\n\n            // In a first pass, compute the optimal bit lengths (which may\n            // overflow in the case of the bit length tree).\n            tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap\n\n            for (h = s.heap_max + 1; h < HEAP_SIZE; h++)\n            {\n                n = s.heap[h];\n                bits = tree[tree[n * 2 + 1] * 2 + 1] + 1;\n                if (bits > max_length)\n                {\n                    bits = max_length; overflow++;\n                }\n                tree[n * 2 + 1] = (short)bits;\n                // We overwrite tree[n*2+1] which is no longer needed\n\n                if (n > max_code)\n                    continue; // not a leaf node\n\n                s.bl_count[bits]++;\n                xbits = 0;\n                if (n >= base_Renamed)\n                    xbits = extra[n - base_Renamed];\n                f = tree[n * 2];\n                s.opt_len += f * (bits + xbits);\n                if (stree != null)\n                    s.static_len += f * (stree[n * 2 + 1] + xbits);\n            }\n            if (overflow == 0)\n                return;\n\n            // This happens for example on obj2 and pic of the Calgary corpus\n            // Find the first bit length which could increase:\n            do\n            {\n                bits = max_length - 1;\n                while (s.bl_count[bits] == 0)\n                    bits--;\n                s.bl_count[bits]--; // move one leaf down the tree\n                s.bl_count[bits + 1] = (short)(s.bl_count[bits + 1] + 2); // move one overflow item as its brother\n                s.bl_count[max_length]--;\n                // The brother of the overflow item also moves one step up,\n                // but this does not affect bl_count[max_length]\n                overflow -= 2;\n            }\n            while (overflow > 0);\n\n            for (bits = max_length; bits != 0; bits--)\n            {\n                n = s.bl_count[bits];\n                while (n != 0)\n                {\n                    m = s.heap[--h];\n                    if (m > max_code)\n                        continue;\n                    if (tree[m * 2 + 1] != bits)\n                    {\n                        s.opt_len = (int)(s.opt_len + ((long)bits - (long)tree[m * 2 + 1]) * (long)tree[m * 2]);\n                        tree[m * 2 + 1] = (short)bits;\n                    }\n                    n--;\n                }\n            }\n        }\n\n        // Construct one Huffman tree and assigns the code bit strings and lengths.\n        // Update the total bit length for the current block.\n        // IN assertion: the field freq is set for all tree elements.\n        // OUT assertions: the fields len and code are set to the optimal bit length\n        //     and corresponding code. The length opt_len is updated; static_len is\n        //     also updated if stree is not null. The field max_code is set.\n        internal void build_tree(DeflateManager s)\n        {\n            short[] tree = dyn_tree;\n            short[] stree = staticTree.treeCodes;\n            int elems = staticTree.elems;\n            int n, m;            // iterate over heap elements\n            int max_code = -1;  // largest code with non zero frequency\n            int node;            // new node being created\n\n            // Construct the initial heap, with least frequent element in\n            // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n            // heap[0] is not used.\n            s.heap_len = 0;\n            s.heap_max = HEAP_SIZE;\n\n            for (n = 0; n < elems; n++)\n            {\n                if (tree[n * 2] != 0)\n                {\n                    s.heap[++s.heap_len] = max_code = n;\n                    s.depth[n] = 0;\n                }\n                else\n                {\n                    tree[n * 2 + 1] = 0;\n                }\n            }\n\n            // The pkzip format requires that at least one distance code exists,\n            // and that at least one bit should be sent even if there is only one\n            // possible code. So to avoid special checks later on we force at least\n            // two codes of non zero frequency.\n            while (s.heap_len < 2)\n            {\n                node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n                tree[node * 2] = 1;\n                s.depth[node] = 0;\n                s.opt_len--;\n                if (stree != null)\n                    s.static_len -= stree[node * 2 + 1];\n                // node is 0 or 1 so it does not have extra bits\n            }\n            this.max_code = max_code;\n\n            // The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n            // establish sub-heaps of increasing lengths:\n\n            for (n = s.heap_len / 2; n >= 1; n--)\n                s.pqdownheap(tree, n);\n\n            // Construct the Huffman tree by repeatedly combining the least two\n            // frequent nodes.\n\n            node = elems; // next internal node of the tree\n            do\n            {\n                // n = node of least frequency\n                n = s.heap[1];\n                s.heap[1] = s.heap[s.heap_len--];\n                s.pqdownheap(tree, 1);\n                m = s.heap[1]; // m = node of next least frequency\n\n                s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency\n                s.heap[--s.heap_max] = m;\n\n                // Create a new node father of n and m\n                tree[node * 2] = unchecked((short)(tree[n * 2] + tree[m * 2]));\n                s.depth[node] = (sbyte)(System.Math.Max((byte)s.depth[n], (byte)s.depth[m]) + 1);\n                tree[n * 2 + 1] = tree[m * 2 + 1] = (short)node;\n\n                // and insert the new node in the heap\n                s.heap[1] = node++;\n                s.pqdownheap(tree, 1);\n            }\n            while (s.heap_len >= 2);\n\n            s.heap[--s.heap_max] = s.heap[1];\n\n            // At this point, the fields freq and dad are set. We can now\n            // generate the bit lengths.\n\n            gen_bitlen(s);\n\n            // The field len is now set, we can generate the bit codes\n            gen_codes(tree, max_code, s.bl_count);\n        }\n\n        // Generate the codes for a given tree and bit counts (which need not be\n        // optimal).\n        // IN assertion: the array bl_count contains the bit length statistics for\n        // the given tree and the field len is set for all tree elements.\n        // OUT assertion: the field code is set for all tree elements of non\n        //     zero code length.\n        internal static void gen_codes(short[] tree, int max_code, short[] bl_count)\n        {\n            short[] next_code = new short[InternalConstants.MAX_BITS + 1]; // next code value for each bit length\n            short code = 0; // running code value\n            int bits; // bit index\n            int n; // code index\n\n            // The distribution counts are first used to generate the code values\n            // without bit reversal.\n            for (bits = 1; bits <= InternalConstants.MAX_BITS; bits++)\n                unchecked\n                {\n                    next_code[bits] = code = (short)((code + bl_count[bits - 1]) << 1);\n                }\n\n            // Check that the bit counts in bl_count are consistent. The last code\n            // must be all ones.\n            //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n            //        \"inconsistent bit counts\");\n            //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n            for (n = 0; n <= max_code; n++)\n            {\n                int len = tree[n * 2 + 1];\n                if (len == 0)\n                    continue;\n                // Now reverse the bits\n                tree[n * 2] = unchecked((short)(bi_reverse(next_code[len]++, len)));\n            }\n        }\n\n        // Reverse the first len bits of a code, using straightforward code (a faster\n        // method would use a table)\n        // IN assertion: 1 <= len <= 15\n        internal static int bi_reverse(int code, int len)\n        {\n            int res = 0;\n            do\n            {\n                res |= code & 1;\n                code >>= 1; //SharedUtils.URShift(code, 1);\n                res <<= 1;\n            }\n            while (--len > 0);\n            return res >> 1;\n        }\n    }\n\n    sealed class InfTree\n    {\n\n        private const int MANY = 1440;\n\n        private const int Z_OK = 0;\n        private const int Z_STREAM_END = 1;\n        private const int Z_NEED_DICT = 2;\n        private const int Z_ERRNO = -1;\n        private const int Z_STREAM_ERROR = -2;\n        private const int Z_DATA_ERROR = -3;\n        private const int Z_MEM_ERROR = -4;\n        private const int Z_BUF_ERROR = -5;\n        private const int Z_VERSION_ERROR = -6;\n\n        internal const int fixed_bl = 9;\n        internal const int fixed_bd = 5;\n\n        //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_tl'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n        internal static readonly int[] fixed_tl = new int[]{96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, \n                        0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, \n                        14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255};\n        //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_td'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n        internal static readonly int[] fixed_td = new int[] { 80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577 };\n\n        // Tables for deflate from PKZIP's appnote.txt.\n        //UPGRADE_NOTE: Final was removed from the declaration of 'cplens'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n        internal static readonly int[] cplens = new int[] { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 };\n\n        // see note #13 above about 258\n        //UPGRADE_NOTE: Final was removed from the declaration of 'cplext'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n        internal static readonly int[] cplext = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 };\n\n        //UPGRADE_NOTE: Final was removed from the declaration of 'cpdist'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n        internal static readonly int[] cpdist = new int[] { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 };\n\n        //UPGRADE_NOTE: Final was removed from the declaration of 'cpdext'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n        internal static readonly int[] cpdext = new int[] { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 };\n\n        // If BMAX needs to be larger than 16, then h and x[] should be uLong.\n        internal const int BMAX = 15; // maximum bit length of any code\n\n        internal int[] hn = null; // hufts used in space\n        internal int[] v = null; // work area for huft_build \n        internal int[] c = null; // bit length count table\n        internal int[] r = null; // table entry for structure assignment\n        internal int[] u = null; // table stack\n        internal int[] x = null; // bit offsets, then code stack\n\n        private int huft_build(int[] b, int bindex, int n, int s, int[] d, int[] e, int[] t, int[] m, int[] hp, int[] hn, int[] v)\n        {\n            // Given a list of code lengths and a maximum table size, make a set of\n            // tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR\n            // if the given code set is incomplete (the tables are still built in this\n            // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of\n            // lengths), or Z_MEM_ERROR if not enough memory.\n\n            int a; // counter for codes of length k\n            int f; // i repeats in table every f entries\n            int g; // maximum code length\n            int h; // table level\n            int i; // counter, current code\n            int j; // counter\n            int k; // number of bits in current code\n            int l; // bits per table (returned in m)\n            int mask; // (1 << w) - 1, to avoid cc -O bug on HP\n            int p; // pointer into c[], b[], or v[]\n            int q; // points to current table\n            int w; // bits before this table == (l * h)\n            int xp; // pointer into x\n            int y; // number of dummy codes added\n            int z; // number of entries in current table\n\n            // Generate counts for each bit length\n\n            p = 0; i = n;\n            do\n            {\n                c[b[bindex + p]]++; p++; i--; // assume all entries <= BMAX\n            }\n            while (i != 0);\n\n            if (c[0] == n)\n            {\n                // null input--all zero length codes\n                t[0] = -1;\n                m[0] = 0;\n                return Z_OK;\n            }\n\n            // Find minimum and maximum length, bound *m by those\n            l = m[0];\n            for (j = 1; j <= BMAX; j++)\n                if (c[j] != 0)\n                    break;\n            k = j; // minimum code length\n            if (l < j)\n            {\n                l = j;\n            }\n            for (i = BMAX; i != 0; i--)\n            {\n                if (c[i] != 0)\n                    break;\n            }\n            g = i; // maximum code length\n            if (l > i)\n            {\n                l = i;\n            }\n            m[0] = l;\n\n            // Adjust last length count to fill out codes, if needed\n            for (y = 1 << j; j < i; j++, y <<= 1)\n            {\n                if ((y -= c[j]) < 0)\n                {\n                    return Z_DATA_ERROR;\n                }\n            }\n            if ((y -= c[i]) < 0)\n            {\n                return Z_DATA_ERROR;\n            }\n            c[i] += y;\n\n            // Generate starting offsets into the value table for each length\n            x[1] = j = 0;\n            p = 1; xp = 2;\n            while (--i != 0)\n            {\n                // note that i == g from above\n                x[xp] = (j += c[p]);\n                xp++;\n                p++;\n            }\n\n            // Make a table of values in order of bit lengths\n            i = 0; p = 0;\n            do\n            {\n                if ((j = b[bindex + p]) != 0)\n                {\n                    v[x[j]++] = i;\n                }\n                p++;\n            }\n            while (++i < n);\n            n = x[g]; // set n to length of v\n\n            // Generate the Huffman codes and for each, make the table entries\n            x[0] = i = 0; // first Huffman code is zero\n            p = 0; // grab values in bit order\n            h = -1; // no tables yet--level -1\n            w = -l; // bits decoded == (l * h)\n            u[0] = 0; // just to keep compilers happy\n            q = 0; // ditto\n            z = 0; // ditto\n\n            // go through the bit lengths (k already is bits in shortest code)\n            for (; k <= g; k++)\n            {\n                a = c[k];\n                while (a-- != 0)\n                {\n                    // here i is the Huffman code of length k bits for value *p\n                    // make tables up to required level\n                    while (k > w + l)\n                    {\n                        h++;\n                        w += l; // previous table always l bits\n                        // compute minimum size table less than or equal to l bits\n                        z = g - w;\n                        z = (z > l) ? l : z; // table size upper limit\n                        if ((f = 1 << (j = k - w)) > a + 1)\n                        {\n                            // try a k-w bit table\n                            // too few codes for k-w bit table\n                            f -= (a + 1); // deduct codes from patterns left\n                            xp = k;\n                            if (j < z)\n                            {\n                                while (++j < z)\n                                {\n                                    // try smaller tables up to z bits\n                                    if ((f <<= 1) <= c[++xp])\n                                        break; // enough codes to use up j bits\n                                    f -= c[xp]; // else deduct codes from patterns\n                                }\n                            }\n                        }\n                        z = 1 << j; // table entries for j-bit table\n\n                        // allocate new table\n                        if (hn[0] + z > MANY)\n                        {\n                            // (note: doesn't matter for fixed)\n                            return Z_DATA_ERROR; // overflow of MANY\n                        }\n                        u[h] = q = hn[0]; // DEBUG\n                        hn[0] += z;\n\n                        // connect to last table, if there is one\n                        if (h != 0)\n                        {\n                            x[h] = i; // save pattern for backing up\n                            r[0] = (sbyte)j; // bits in this table\n                            r[1] = (sbyte)l; // bits to dump before this table\n                            j = SharedUtils.URShift(i, (w - l));\n                            r[2] = (int)(q - u[h - 1] - j); // offset to this table\n                            Array.Copy(r, 0, hp, (u[h - 1] + j) * 3, 3); // connect to last table\n                        }\n                        else\n                        {\n                            t[0] = q; // first table is returned result\n                        }\n                    }\n\n                    // set up table entry in r\n                    r[1] = (sbyte)(k - w);\n                    if (p >= n)\n                    {\n                        r[0] = 128 + 64; // out of values--invalid code\n                    }\n                    else if (v[p] < s)\n                    {\n                        r[0] = (sbyte)(v[p] < 256 ? 0 : 32 + 64); // 256 is end-of-block\n                        r[2] = v[p++]; // simple code is just the value\n                    }\n                    else\n                    {\n                        r[0] = (sbyte)(e[v[p] - s] + 16 + 64); // non-simple--look up in lists\n                        r[2] = d[v[p++] - s];\n                    }\n\n                    // fill code-like entries with r\n                    f = 1 << (k - w);\n                    for (j = SharedUtils.URShift(i, w); j < z; j += f)\n                    {\n                        Array.Copy(r, 0, hp, (q + j) * 3, 3);\n                    }\n\n                    // backwards increment the k-bit code i\n                    for (j = 1 << (k - 1); (i & j) != 0; j = SharedUtils.URShift(j, 1))\n                    {\n                        i ^= j;\n                    }\n                    i ^= j;\n\n                    // backup over finished tables\n                    mask = (1 << w) - 1; // needed on HP, cc -O bug\n                    while ((i & mask) != x[h])\n                    {\n                        h--; // don't need to update q\n                        w -= l;\n                        mask = (1 << w) - 1;\n                    }\n                }\n            }\n            // Return Z_BUF_ERROR if we were given an incomplete table\n            return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;\n        }\n\n        internal int inflate_trees_bits(int[] c, int[] bb, int[] tb, int[] hp, ZlibCodec z)\n        {\n            int result;\n            initWorkArea(19);\n            hn[0] = 0;\n            result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v);\n\n            if (result == Z_DATA_ERROR)\n            {\n                z.Message = \"oversubscribed dynamic bit lengths tree\";\n            }\n            else if (result == Z_BUF_ERROR || bb[0] == 0)\n            {\n                z.Message = \"incomplete dynamic bit lengths tree\";\n                result = Z_DATA_ERROR;\n            }\n            return result;\n        }\n\n        internal int inflate_trees_dynamic(int nl, int nd, int[] c, int[] bl, int[] bd, int[] tl, int[] td, int[] hp, ZlibCodec z)\n        {\n            int result;\n\n            // build literal/length tree\n            initWorkArea(288);\n            hn[0] = 0;\n            result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v);\n            if (result != Z_OK || bl[0] == 0)\n            {\n                if (result == Z_DATA_ERROR)\n                {\n                    z.Message = \"oversubscribed literal/length tree\";\n                }\n                else if (result != Z_MEM_ERROR)\n                {\n                    z.Message = \"incomplete literal/length tree\";\n                    result = Z_DATA_ERROR;\n                }\n                return result;\n            }\n\n            // build distance tree\n            initWorkArea(288);\n            result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v);\n\n            if (result != Z_OK || (bd[0] == 0 && nl > 257))\n            {\n                if (result == Z_DATA_ERROR)\n                {\n                    z.Message = \"oversubscribed distance tree\";\n                }\n                else if (result == Z_BUF_ERROR)\n                {\n                    z.Message = \"incomplete distance tree\";\n                    result = Z_DATA_ERROR;\n                }\n                else if (result != Z_MEM_ERROR)\n                {\n                    z.Message = \"empty distance tree with lengths\";\n                    result = Z_DATA_ERROR;\n                }\n                return result;\n            }\n\n            return Z_OK;\n        }\n\n        internal static int inflate_trees_fixed(int[] bl, int[] bd, int[][] tl, int[][] td, ZlibCodec z)\n        {\n            bl[0] = fixed_bl;\n            bd[0] = fixed_bd;\n            tl[0] = fixed_tl;\n            td[0] = fixed_td;\n            return Z_OK;\n        }\n\n        private void initWorkArea(int vsize)\n        {\n            if (hn == null)\n            {\n                hn = new int[1];\n                v = new int[vsize];\n                c = new int[BMAX + 1];\n                r = new int[3];\n                u = new int[BMAX];\n                x = new int[BMAX + 1];\n            }\n            else\n            {\n                if (v.Length < vsize)\n                {\n                    v = new int[vsize];\n                }\n                Array.Clear(v, 0, vsize);\n                Array.Clear(c, 0, BMAX + 1);\n                r[0] = 0; r[1] = 0; r[2] = 0;\n                //  for(int i=0; i<BMAX; i++){u[i]=0;}\n                //Array.Copy(c, 0, u, 0, BMAX);\n                Array.Clear(u, 0, BMAX);\n                //  for(int i=0; i<BMAX+1; i++){x[i]=0;}\n                //Array.Copy(c, 0, x, 0, BMAX + 1);\n                Array.Clear(x, 0, BMAX + 1);\n            }\n        }\n    }\n\n    sealed class InflateBlocks\n    {\n        private const int MANY = 1440;\n\n        // Table for deflate from PKZIP's appnote.txt.\n        internal static readonly int[] border = new int[] { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };\n\n        private enum InflateBlockMode\n        {\n            TYPE = 0,                     // get type bits (3, including end bit)\n            LENS = 1,                     // get lengths for stored\n            STORED = 2,                     // processing stored block\n            TABLE = 3,                     // get table lengths\n            BTREE = 4,                     // get bit lengths tree for a dynamic block\n            DTREE = 5,                     // get length, distance trees for a dynamic block\n            CODES = 6,                     // processing fixed or dynamic block\n            DRY = 7,                     // output remaining window bytes\n            DONE = 8,                     // finished last block, done\n            BAD = 9,                     // ot a data error--stuck here\n        }\n\n        private InflateBlockMode mode;                    // current inflate_block mode\n\n        internal int left;                                // if STORED, bytes left to copy\n\n        internal int table;                               // table lengths (14 bits)\n        internal int index;                               // index into blens (or border)\n        internal int[] blens;                             // bit lengths of codes\n        internal int[] bb = new int[1];                   // bit length tree depth\n        internal int[] tb = new int[1];                   // bit length decoding tree\n\n        internal InflateCodes codes = new InflateCodes(); // if CODES, current state\n\n        internal int last;                                // true if this block is the last block\n\n        internal ZlibCodec _codec;                        // pointer back to this zlib stream\n\n        // mode independent information\n        internal int bitk;                                // bits in bit buffer\n        internal int bitb;                                // bit buffer\n        internal int[] hufts;                             // single malloc for tree space\n        internal byte[] window;                           // sliding window\n        internal int end;                                 // one byte after sliding window\n        internal int readAt;                              // window read pointer\n        internal int writeAt;                             // window write pointer\n        internal System.Object checkfn;                   // check function\n        internal uint check;                              // check on output\n\n        internal InfTree inftree = new InfTree();\n\n        internal InflateBlocks(ZlibCodec codec, System.Object checkfn, int w)\n        {\n            _codec = codec;\n            hufts = new int[MANY * 3];\n            window = new byte[w];\n            end = w;\n            this.checkfn = checkfn;\n            mode = InflateBlockMode.TYPE;\n            Reset();\n        }\n\n        internal uint Reset()\n        {\n            uint oldCheck = check;\n            mode = InflateBlockMode.TYPE;\n            bitk = 0;\n            bitb = 0;\n            readAt = writeAt = 0;\n\n            if (checkfn != null)\n                _codec._Adler32 = check = Adler.Adler32(0, null, 0, 0);\n            return oldCheck;\n        }\n\n\n        internal int Process(int r)\n        {\n            int t; // temporary storage\n            int b; // bit buffer\n            int k; // bits in bit buffer\n            int p; // input data pointer\n            int n; // bytes available there\n            int q; // output window write pointer\n            int m; // bytes to end of window or read pointer\n\n            // copy input/output information to locals (UPDATE macro restores)\n\n            p = _codec.NextIn;\n            n = _codec.AvailableBytesIn;\n            b = bitb;\n            k = bitk;\n\n            q = writeAt;\n            m = (int)(q < readAt ? readAt - q - 1 : end - q);\n\n\n            // process input based on current state\n            while (true)\n            {\n                switch (mode)\n                {\n                    case InflateBlockMode.TYPE:\n\n                        while (k < (3))\n                        {\n                            if (n != 0)\n                            {\n                                r = ZlibConstants.Z_OK;\n                            }\n                            else\n                            {\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                            }\n\n                            n--;\n                            b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n                        t = (int)(b & 7);\n                        last = t & 1;\n\n                        switch ((uint)t >> 1)\n                        {\n                            case 0:  // stored\n                                b >>= 3; k -= (3);\n                                t = k & 7; // go to byte boundary\n                                b >>= t; k -= t;\n                                mode = InflateBlockMode.LENS; // get length of stored block\n                                break;\n\n                            case 1:  // fixed\n                                int[] bl = new int[1];\n                                int[] bd = new int[1];\n                                int[][] tl = new int[1][];\n                                int[][] td = new int[1][];\n                                InfTree.inflate_trees_fixed(bl, bd, tl, td, _codec);\n                                codes.Init(bl[0], bd[0], tl[0], 0, td[0], 0);\n                                b >>= 3; k -= 3;\n                                mode = InflateBlockMode.CODES;\n                                break;\n\n                            case 2:  // dynamic\n                                b >>= 3; k -= 3;\n                                mode = InflateBlockMode.TABLE;\n                                break;\n\n                            case 3:  // illegal\n                                b >>= 3; k -= 3;\n                                mode = InflateBlockMode.BAD;\n                                _codec.Message = \"invalid block type\";\n                                r = ZlibConstants.Z_DATA_ERROR;\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                        }\n                        break;\n\n                    case InflateBlockMode.LENS:\n\n                        while (k < (32))\n                        {\n                            if (n != 0)\n                            {\n                                r = ZlibConstants.Z_OK;\n                            }\n                            else\n                            {\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                            }\n                            ;\n                            n--;\n                            b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        if ((((~b) >> 16) & 0xffff) != (b & 0xffff))\n                        {\n                            mode = InflateBlockMode.BAD;\n                            _codec.Message = \"invalid stored block lengths\";\n                            r = ZlibConstants.Z_DATA_ERROR;\n\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n                        left = (b & 0xffff);\n                        b = k = 0; // dump bits\n                        mode = left != 0 ? InflateBlockMode.STORED : (last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE);\n                        break;\n\n                    case InflateBlockMode.STORED:\n                        if (n == 0)\n                        {\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n\n                        if (m == 0)\n                        {\n                            if (q == end && readAt != 0)\n                            {\n                                q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q);\n                            }\n                            if (m == 0)\n                            {\n                                writeAt = q;\n                                r = Flush(r);\n                                q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q);\n                                if (q == end && readAt != 0)\n                                {\n                                    q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q);\n                                }\n                                if (m == 0)\n                                {\n                                    bitb = b; bitk = k;\n                                    _codec.AvailableBytesIn = n;\n                                    _codec.TotalBytesIn += p - _codec.NextIn;\n                                    _codec.NextIn = p;\n                                    writeAt = q;\n                                    return Flush(r);\n                                }\n                            }\n                        }\n                        r = ZlibConstants.Z_OK;\n\n                        t = left;\n                        if (t > n)\n                            t = n;\n                        if (t > m)\n                            t = m;\n                        Array.Copy(_codec.InputBuffer, p, window, q, t);\n                        p += t; n -= t;\n                        q += t; m -= t;\n                        if ((left -= t) != 0)\n                            break;\n                        mode = last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE;\n                        break;\n\n                    case InflateBlockMode.TABLE:\n\n                        while (k < (14))\n                        {\n                            if (n != 0)\n                            {\n                                r = ZlibConstants.Z_OK;\n                            }\n                            else\n                            {\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                            }\n\n                            n--;\n                            b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        table = t = (b & 0x3fff);\n                        if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)\n                        {\n                            mode = InflateBlockMode.BAD;\n                            _codec.Message = \"too many length or distance symbols\";\n                            r = ZlibConstants.Z_DATA_ERROR;\n\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n                        t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);\n                        if (blens == null || blens.Length < t)\n                        {\n                            blens = new int[t];\n                        }\n                        else\n                        {\n                            Array.Clear(blens, 0, t);\n                            // for (int i = 0; i < t; i++)\n                            // {\n                            //     blens[i] = 0;\n                            // }\n                        }\n\n                        b >>= 14;\n                        k -= 14;\n\n\n                        index = 0;\n                        mode = InflateBlockMode.BTREE;\n                        goto case InflateBlockMode.BTREE;\n\n                    case InflateBlockMode.BTREE:\n                        while (index < 4 + (table >> 10))\n                        {\n                            while (k < (3))\n                            {\n                                if (n != 0)\n                                {\n                                    r = ZlibConstants.Z_OK;\n                                }\n                                else\n                                {\n                                    bitb = b; bitk = k;\n                                    _codec.AvailableBytesIn = n;\n                                    _codec.TotalBytesIn += p - _codec.NextIn;\n                                    _codec.NextIn = p;\n                                    writeAt = q;\n                                    return Flush(r);\n                                }\n\n                                n--;\n                                b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                                k += 8;\n                            }\n\n                            blens[border[index++]] = b & 7;\n\n                            b >>= 3; k -= 3;\n                        }\n\n                        while (index < 19)\n                        {\n                            blens[border[index++]] = 0;\n                        }\n\n                        bb[0] = 7;\n                        t = inftree.inflate_trees_bits(blens, bb, tb, hufts, _codec);\n                        if (t != ZlibConstants.Z_OK)\n                        {\n                            r = t;\n                            if (r == ZlibConstants.Z_DATA_ERROR)\n                            {\n                                blens = null;\n                                mode = InflateBlockMode.BAD;\n                            }\n\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n\n                        index = 0;\n                        mode = InflateBlockMode.DTREE;\n                        goto case InflateBlockMode.DTREE;\n\n                    case InflateBlockMode.DTREE:\n                        while (true)\n                        {\n                            t = table;\n                            if (!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f)))\n                            {\n                                break;\n                            }\n\n                            int i, j, c;\n\n                            t = bb[0];\n\n                            while (k < t)\n                            {\n                                if (n != 0)\n                                {\n                                    r = ZlibConstants.Z_OK;\n                                }\n                                else\n                                {\n                                    bitb = b; bitk = k;\n                                    _codec.AvailableBytesIn = n;\n                                    _codec.TotalBytesIn += p - _codec.NextIn;\n                                    _codec.NextIn = p;\n                                    writeAt = q;\n                                    return Flush(r);\n                                }\n\n                                n--;\n                                b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                                k += 8;\n                            }\n\n                            t = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 1];\n                            c = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 2];\n\n                            if (c < 16)\n                            {\n                                b >>= t; k -= t;\n                                blens[index++] = c;\n                            }\n                            else\n                            {\n                                // c == 16..18\n                                i = c == 18 ? 7 : c - 14;\n                                j = c == 18 ? 11 : 3;\n\n                                while (k < (t + i))\n                                {\n                                    if (n != 0)\n                                    {\n                                        r = ZlibConstants.Z_OK;\n                                    }\n                                    else\n                                    {\n                                        bitb = b; bitk = k;\n                                        _codec.AvailableBytesIn = n;\n                                        _codec.TotalBytesIn += p - _codec.NextIn;\n                                        _codec.NextIn = p;\n                                        writeAt = q;\n                                        return Flush(r);\n                                    }\n\n                                    n--;\n                                    b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                                    k += 8;\n                                }\n\n                                b >>= t; k -= t;\n\n                                j += (b & InternalInflateConstants.InflateMask[i]);\n\n                                b >>= i; k -= i;\n\n                                i = index;\n                                t = table;\n                                if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1))\n                                {\n                                    blens = null;\n                                    mode = InflateBlockMode.BAD;\n                                    _codec.Message = \"invalid bit length repeat\";\n                                    r = ZlibConstants.Z_DATA_ERROR;\n\n                                    bitb = b; bitk = k;\n                                    _codec.AvailableBytesIn = n;\n                                    _codec.TotalBytesIn += p - _codec.NextIn;\n                                    _codec.NextIn = p;\n                                    writeAt = q;\n                                    return Flush(r);\n                                }\n\n                                c = (c == 16) ? blens[i - 1] : 0;\n                                do\n                                {\n                                    blens[i++] = c;\n                                }\n                                while (--j != 0);\n                                index = i;\n                            }\n                        }\n\n                        tb[0] = -1;\n                        {\n                            int[] bl = new int[] { 9 };  // must be <= 9 for lookahead assumptions\n                            int[] bd = new int[] { 6 }; // must be <= 9 for lookahead assumptions\n                            int[] tl = new int[1];\n                            int[] td = new int[1];\n\n                            t = table;\n                            t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl, bd, tl, td, hufts, _codec);\n\n                            if (t != ZlibConstants.Z_OK)\n                            {\n                                if (t == ZlibConstants.Z_DATA_ERROR)\n                                {\n                                    blens = null;\n                                    mode = InflateBlockMode.BAD;\n                                }\n                                r = t;\n\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                            }\n                            codes.Init(bl[0], bd[0], hufts, tl[0], hufts, td[0]);\n                        }\n                        mode = InflateBlockMode.CODES;\n                        goto case InflateBlockMode.CODES;\n\n                    case InflateBlockMode.CODES:\n                        bitb = b; bitk = k;\n                        _codec.AvailableBytesIn = n;\n                        _codec.TotalBytesIn += p - _codec.NextIn;\n                        _codec.NextIn = p;\n                        writeAt = q;\n\n                        r = codes.Process(this, r);\n                        if (r != ZlibConstants.Z_STREAM_END)\n                        {\n                            return Flush(r);\n                        }\n\n                        r = ZlibConstants.Z_OK;\n                        p = _codec.NextIn;\n                        n = _codec.AvailableBytesIn;\n                        b = bitb;\n                        k = bitk;\n                        q = writeAt;\n                        m = (int)(q < readAt ? readAt - q - 1 : end - q);\n\n                        if (last == 0)\n                        {\n                            mode = InflateBlockMode.TYPE;\n                            break;\n                        }\n                        mode = InflateBlockMode.DRY;\n                        goto case InflateBlockMode.DRY;\n\n                    case InflateBlockMode.DRY:\n                        writeAt = q;\n                        r = Flush(r);\n                        q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q);\n                        if (readAt != writeAt)\n                        {\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n                        mode = InflateBlockMode.DONE;\n                        goto case InflateBlockMode.DONE;\n\n                    case InflateBlockMode.DONE:\n                        r = ZlibConstants.Z_STREAM_END;\n                        bitb = b;\n                        bitk = k;\n                        _codec.AvailableBytesIn = n;\n                        _codec.TotalBytesIn += p - _codec.NextIn;\n                        _codec.NextIn = p;\n                        writeAt = q;\n                        return Flush(r);\n\n                    case InflateBlockMode.BAD:\n                        r = ZlibConstants.Z_DATA_ERROR;\n\n                        bitb = b; bitk = k;\n                        _codec.AvailableBytesIn = n;\n                        _codec.TotalBytesIn += p - _codec.NextIn;\n                        _codec.NextIn = p;\n                        writeAt = q;\n                        return Flush(r);\n\n\n                    default:\n                        r = ZlibConstants.Z_STREAM_ERROR;\n\n                        bitb = b; bitk = k;\n                        _codec.AvailableBytesIn = n;\n                        _codec.TotalBytesIn += p - _codec.NextIn;\n                        _codec.NextIn = p;\n                        writeAt = q;\n                        return Flush(r);\n                }\n            }\n        }\n\n\n        internal void Free()\n        {\n            Reset();\n            window = null;\n            hufts = null;\n        }\n\n        internal void SetDictionary(byte[] d, int start, int n)\n        {\n            Array.Copy(d, start, window, 0, n);\n            readAt = writeAt = n;\n        }\n\n        // Returns true if inflate is currently at the end of a block generated\n        // by Z_SYNC_FLUSH or Z_FULL_FLUSH.\n        internal int SyncPoint()\n        {\n            return mode == InflateBlockMode.LENS ? 1 : 0;\n        }\n\n        // copy as much as possible from the sliding window to the output area\n        internal int Flush(int r)\n        {\n            int nBytes;\n\n            for (int pass = 0; pass < 2; pass++)\n            {\n                if (pass == 0)\n                {\n                    // compute number of bytes to copy as far as end of window\n                    nBytes = (int)((readAt <= writeAt ? writeAt : end) - readAt);\n                }\n                else\n                {\n                    // compute bytes to copy\n                    nBytes = writeAt - readAt;\n                }\n\n                // workitem 8870\n                if (nBytes == 0)\n                {\n                    if (r == ZlibConstants.Z_BUF_ERROR)\n                        r = ZlibConstants.Z_OK;\n                    return r;\n                }\n\n                if (nBytes > _codec.AvailableBytesOut)\n                    nBytes = _codec.AvailableBytesOut;\n\n                if (nBytes != 0 && r == ZlibConstants.Z_BUF_ERROR)\n                    r = ZlibConstants.Z_OK;\n\n                // update counters\n                _codec.AvailableBytesOut -= nBytes;\n                _codec.TotalBytesOut += nBytes;\n\n                // update check information\n                if (checkfn != null)\n                    _codec._Adler32 = check = Adler.Adler32(check, window, readAt, nBytes);\n\n                // copy as far as end of window\n                Array.Copy(window, readAt, _codec.OutputBuffer, _codec.NextOut, nBytes);\n                _codec.NextOut += nBytes;\n                readAt += nBytes;\n\n                // see if more to copy at beginning of window\n                if (readAt == end && pass == 0)\n                {\n                    // wrap pointers\n                    readAt = 0;\n                    if (writeAt == end)\n                        writeAt = 0;\n                }\n                else pass++;\n            }\n\n            // done\n            return r;\n        }\n    }\n\n\n    internal static class InternalInflateConstants\n    {\n        // And'ing with mask[n] masks the lower n bits\n        internal static readonly int[] InflateMask = new int[] {\n            0x00000000, 0x00000001, 0x00000003, 0x00000007,\n            0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,\n            0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,\n            0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff };\n    }\n\n\n    sealed class InflateCodes\n    {\n        // waiting for \"i:\"=input,\n        //             \"o:\"=output,\n        //             \"x:\"=nothing\n        private const int START = 0; // x: set up for LEN\n        private const int LEN = 1; // i: get length/literal/eob next\n        private const int LENEXT = 2; // i: getting length extra (have base)\n        private const int DIST = 3; // i: get distance next\n        private const int DISTEXT = 4; // i: getting distance extra\n        private const int COPY = 5; // o: copying bytes in window, waiting for space\n        private const int LIT = 6; // o: got literal, waiting for output space\n        private const int WASH = 7; // o: got eob, possibly still output waiting\n        private const int END = 8; // x: got eob and all data flushed\n        private const int BADCODE = 9; // x: got error\n\n        internal int mode;        // current inflate_codes mode\n\n        // mode dependent information\n        internal int len;\n\n        internal int[] tree;      // pointer into tree\n        internal int tree_index = 0;\n        internal int need;        // bits needed\n\n        internal int lit;\n\n        // if EXT or COPY, where and how much\n        internal int bitsToGet;   // bits to get for extra\n        internal int dist;        // distance back to copy from\n\n        internal byte lbits;      // ltree bits decoded per branch\n        internal byte dbits;      // dtree bits decoder per branch\n        internal int[] ltree;     // literal/length/eob tree\n        internal int ltree_index; // literal/length/eob tree\n        internal int[] dtree;     // distance tree\n        internal int dtree_index; // distance tree\n\n        internal InflateCodes()\n        {\n        }\n\n        internal void Init(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index)\n        {\n            mode = START;\n            lbits = (byte)bl;\n            dbits = (byte)bd;\n            ltree = tl;\n            ltree_index = tl_index;\n            dtree = td;\n            dtree_index = td_index;\n            tree = null;\n        }\n\n        internal int Process(InflateBlocks blocks, int r)\n        {\n            int j;      // temporary storage\n            int tindex; // temporary pointer\n            int e;      // extra bits or operation\n            int b = 0;  // bit buffer\n            int k = 0;  // bits in bit buffer\n            int p = 0;  // input data pointer\n            int n;      // bytes available there\n            int q;      // output window write pointer\n            int m;      // bytes to end of window or read pointer\n            int f;      // pointer to copy strings from\n\n            ZlibCodec z = blocks._codec;\n\n            // copy input/output information to locals (UPDATE macro restores)\n            p = z.NextIn;\n            n = z.AvailableBytesIn;\n            b = blocks.bitb;\n            k = blocks.bitk;\n            q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n            // process input and output based on current state\n            while (true)\n            {\n                switch (mode)\n                {\n                    // waiting for \"i:\"=input, \"o:\"=output, \"x:\"=nothing\n                    case START:  // x: set up for LEN\n                        if (m >= 258 && n >= 10)\n                        {\n                            blocks.bitb = b; blocks.bitk = k;\n                            z.AvailableBytesIn = n;\n                            z.TotalBytesIn += p - z.NextIn;\n                            z.NextIn = p;\n                            blocks.writeAt = q;\n                            r = InflateFast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, blocks, z);\n\n                            p = z.NextIn;\n                            n = z.AvailableBytesIn;\n                            b = blocks.bitb;\n                            k = blocks.bitk;\n                            q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n                            if (r != ZlibConstants.Z_OK)\n                            {\n                                mode = (r == ZlibConstants.Z_STREAM_END) ? WASH : BADCODE;\n                                break;\n                            }\n                        }\n                        need = lbits;\n                        tree = ltree;\n                        tree_index = ltree_index;\n\n                        mode = LEN;\n                        goto case LEN;\n\n                    case LEN:  // i: get length/literal/eob next\n                        j = need;\n\n                        while (k < j)\n                        {\n                            if (n != 0)\n                                r = ZlibConstants.Z_OK;\n                            else\n                            {\n                                blocks.bitb = b; blocks.bitk = k;\n                                z.AvailableBytesIn = n;\n                                z.TotalBytesIn += p - z.NextIn;\n                                z.NextIn = p;\n                                blocks.writeAt = q;\n                                return blocks.Flush(r);\n                            }\n                            n--;\n                            b |= (z.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3;\n\n                        b >>= (tree[tindex + 1]);\n                        k -= (tree[tindex + 1]);\n\n                        e = tree[tindex];\n\n                        if (e == 0)\n                        {\n                            // literal\n                            lit = tree[tindex + 2];\n                            mode = LIT;\n                            break;\n                        }\n                        if ((e & 16) != 0)\n                        {\n                            // length\n                            bitsToGet = e & 15;\n                            len = tree[tindex + 2];\n                            mode = LENEXT;\n                            break;\n                        }\n                        if ((e & 64) == 0)\n                        {\n                            // next table\n                            need = e;\n                            tree_index = tindex / 3 + tree[tindex + 2];\n                            break;\n                        }\n                        if ((e & 32) != 0)\n                        {\n                            // end of block\n                            mode = WASH;\n                            break;\n                        }\n                        mode = BADCODE; // invalid code\n                        z.Message = \"invalid literal/length code\";\n                        r = ZlibConstants.Z_DATA_ERROR;\n\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n;\n                        z.TotalBytesIn += p - z.NextIn;\n                        z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n\n\n                    case LENEXT:  // i: getting length extra (have base)\n                        j = bitsToGet;\n\n                        while (k < j)\n                        {\n                            if (n != 0)\n                                r = ZlibConstants.Z_OK;\n                            else\n                            {\n                                blocks.bitb = b; blocks.bitk = k;\n                                z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                blocks.writeAt = q;\n                                return blocks.Flush(r);\n                            }\n                            n--; b |= (z.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        len += (b & InternalInflateConstants.InflateMask[j]);\n\n                        b >>= j;\n                        k -= j;\n\n                        need = dbits;\n                        tree = dtree;\n                        tree_index = dtree_index;\n                        mode = DIST;\n                        goto case DIST;\n\n                    case DIST:  // i: get distance next\n                        j = need;\n\n                        while (k < j)\n                        {\n                            if (n != 0)\n                                r = ZlibConstants.Z_OK;\n                            else\n                            {\n                                blocks.bitb = b; blocks.bitk = k;\n                                z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                blocks.writeAt = q;\n                                return blocks.Flush(r);\n                            }\n                            n--; b |= (z.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3;\n\n                        b >>= tree[tindex + 1];\n                        k -= tree[tindex + 1];\n\n                        e = (tree[tindex]);\n                        if ((e & 0x10) != 0)\n                        {\n                            // distance\n                            bitsToGet = e & 15;\n                            dist = tree[tindex + 2];\n                            mode = DISTEXT;\n                            break;\n                        }\n                        if ((e & 64) == 0)\n                        {\n                            // next table\n                            need = e;\n                            tree_index = tindex / 3 + tree[tindex + 2];\n                            break;\n                        }\n                        mode = BADCODE; // invalid code\n                        z.Message = \"invalid distance code\";\n                        r = ZlibConstants.Z_DATA_ERROR;\n\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n\n\n                    case DISTEXT:  // i: getting distance extra\n                        j = bitsToGet;\n\n                        while (k < j)\n                        {\n                            if (n != 0)\n                                r = ZlibConstants.Z_OK;\n                            else\n                            {\n                                blocks.bitb = b; blocks.bitk = k;\n                                z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                blocks.writeAt = q;\n                                return blocks.Flush(r);\n                            }\n                            n--; b |= (z.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        dist += (b & InternalInflateConstants.InflateMask[j]);\n\n                        b >>= j;\n                        k -= j;\n\n                        mode = COPY;\n                        goto case COPY;\n\n                    case COPY:  // o: copying bytes in window, waiting for space\n                        f = q - dist;\n                        while (f < 0)\n                        {\n                            // modulo window size-\"while\" instead\n                            f += blocks.end; // of \"if\" handles invalid distances\n                        }\n                        while (len != 0)\n                        {\n                            if (m == 0)\n                            {\n                                if (q == blocks.end && blocks.readAt != 0)\n                                {\n                                    q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n                                }\n                                if (m == 0)\n                                {\n                                    blocks.writeAt = q; r = blocks.Flush(r);\n                                    q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n                                    if (q == blocks.end && blocks.readAt != 0)\n                                    {\n                                        q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n                                    }\n\n                                    if (m == 0)\n                                    {\n                                        blocks.bitb = b; blocks.bitk = k;\n                                        z.AvailableBytesIn = n;\n                                        z.TotalBytesIn += p - z.NextIn;\n                                        z.NextIn = p;\n                                        blocks.writeAt = q;\n                                        return blocks.Flush(r);\n                                    }\n                                }\n                            }\n\n                            blocks.window[q++] = blocks.window[f++]; m--;\n\n                            if (f == blocks.end)\n                                f = 0;\n                            len--;\n                        }\n                        mode = START;\n                        break;\n\n                    case LIT:  // o: got literal, waiting for output space\n                        if (m == 0)\n                        {\n                            if (q == blocks.end && blocks.readAt != 0)\n                            {\n                                q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n                            }\n                            if (m == 0)\n                            {\n                                blocks.writeAt = q; r = blocks.Flush(r);\n                                q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n                                if (q == blocks.end && blocks.readAt != 0)\n                                {\n                                    q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n                                }\n                                if (m == 0)\n                                {\n                                    blocks.bitb = b; blocks.bitk = k;\n                                    z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                    blocks.writeAt = q;\n                                    return blocks.Flush(r);\n                                }\n                            }\n                        }\n                        r = ZlibConstants.Z_OK;\n\n                        blocks.window[q++] = (byte)lit; m--;\n\n                        mode = START;\n                        break;\n\n                    case WASH:  // o: got eob, possibly more output\n                        if (k > 7)\n                        {\n                            // return unused byte, if any\n                            k -= 8;\n                            n++;\n                            p--; // can always return one\n                        }\n\n                        blocks.writeAt = q; r = blocks.Flush(r);\n                        q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n                        if (blocks.readAt != blocks.writeAt)\n                        {\n                            blocks.bitb = b; blocks.bitk = k;\n                            z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                            blocks.writeAt = q;\n                            return blocks.Flush(r);\n                        }\n                        mode = END;\n                        goto case END;\n\n                    case END:\n                        r = ZlibConstants.Z_STREAM_END;\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n\n                    case BADCODE:  // x: got error\n\n                        r = ZlibConstants.Z_DATA_ERROR;\n\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n\n                    default:\n                        r = ZlibConstants.Z_STREAM_ERROR;\n\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n                }\n            }\n        }\n\n\n        // Called with number of bytes left to write in window at least 258\n        // (the maximum string length) and number of input bytes available\n        // at least ten.  The ten bytes are six bytes for the longest length/\n        // distance pair plus four bytes for overloading the bit buffer.\n\n        internal int InflateFast(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index, InflateBlocks s, ZlibCodec z)\n        {\n            int t;        // temporary pointer\n            int[] tp;     // temporary pointer\n            int tp_index; // temporary pointer\n            int e;        // extra bits or operation\n            int b;        // bit buffer\n            int k;        // bits in bit buffer\n            int p;        // input data pointer\n            int n;        // bytes available there\n            int q;        // output window write pointer\n            int m;        // bytes to end of window or read pointer\n            int ml;       // mask for literal/length tree\n            int md;       // mask for distance tree\n            int c;        // bytes to copy\n            int d;        // distance back to copy from\n            int r;        // copy source pointer\n\n            int tp_index_t_3; // (tp_index+t)*3\n\n            // load input, output, bit values\n            p = z.NextIn; n = z.AvailableBytesIn; b = s.bitb; k = s.bitk;\n            q = s.writeAt; m = q < s.readAt ? s.readAt - q - 1 : s.end - q;\n\n            // initialize masks\n            ml = InternalInflateConstants.InflateMask[bl];\n            md = InternalInflateConstants.InflateMask[bd];\n\n            // do until not enough input or output space for fast loop\n            do\n            {\n                // assume called with m >= 258 && n >= 10\n                // get literal/length code\n                while (k < (20))\n                {\n                    // max bits for literal/length code\n                    n--;\n                    b |= (z.InputBuffer[p++] & 0xff) << k; k += 8;\n                }\n\n                t = b & ml;\n                tp = tl;\n                tp_index = tl_index;\n                tp_index_t_3 = (tp_index + t) * 3;\n                if ((e = tp[tp_index_t_3]) == 0)\n                {\n                    b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]);\n\n                    s.window[q++] = (byte)tp[tp_index_t_3 + 2];\n                    m--;\n                    continue;\n                }\n                do\n                {\n\n                    b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]);\n\n                    if ((e & 16) != 0)\n                    {\n                        e &= 15;\n                        c = tp[tp_index_t_3 + 2] + ((int)b & InternalInflateConstants.InflateMask[e]);\n\n                        b >>= e; k -= e;\n\n                        // decode distance base of block to copy\n                        while (k < 15)\n                        {\n                            // max bits for distance code\n                            n--;\n                            b |= (z.InputBuffer[p++] & 0xff) << k; k += 8;\n                        }\n\n                        t = b & md;\n                        tp = td;\n                        tp_index = td_index;\n                        tp_index_t_3 = (tp_index + t) * 3;\n                        e = tp[tp_index_t_3];\n\n                        do\n                        {\n\n                            b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]);\n\n                            if ((e & 16) != 0)\n                            {\n                                // get extra bits to add to distance base\n                                e &= 15;\n                                while (k < e)\n                                {\n                                    // get extra bits (up to 13)\n                                    n--;\n                                    b |= (z.InputBuffer[p++] & 0xff) << k; k += 8;\n                                }\n\n                                d = tp[tp_index_t_3 + 2] + (b & InternalInflateConstants.InflateMask[e]);\n\n                                b >>= e; k -= e;\n\n                                // do the copy\n                                m -= c;\n                                if (q >= d)\n                                {\n                                    // offset before dest\n                                    //  just copy\n                                    r = q - d;\n                                    if (q - r > 0 && 2 > (q - r))\n                                    {\n                                        s.window[q++] = s.window[r++]; // minimum count is three,\n                                        s.window[q++] = s.window[r++]; // so unroll loop a little\n                                        c -= 2;\n                                    }\n                                    else\n                                    {\n                                        Array.Copy(s.window, r, s.window, q, 2);\n                                        q += 2; r += 2; c -= 2;\n                                    }\n                                }\n                                else\n                                {\n                                    // else offset after destination\n                                    r = q - d;\n                                    do\n                                    {\n                                        r += s.end; // force pointer in window\n                                    }\n                                    while (r < 0); // covers invalid distances\n                                    e = s.end - r;\n                                    if (c > e)\n                                    {\n                                        // if source crosses,\n                                        c -= e; // wrapped copy\n                                        if (q - r > 0 && e > (q - r))\n                                        {\n                                            do\n                                            {\n                                                s.window[q++] = s.window[r++];\n                                            }\n                                            while (--e != 0);\n                                        }\n                                        else\n                                        {\n                                            Array.Copy(s.window, r, s.window, q, e);\n                                            q += e; r += e; e = 0;\n                                        }\n                                        r = 0; // copy rest from start of window\n                                    }\n                                }\n\n                                // copy all or what's left\n                                if (q - r > 0 && c > (q - r))\n                                {\n                                    do\n                                    {\n                                        s.window[q++] = s.window[r++];\n                                    }\n                                    while (--c != 0);\n                                }\n                                else\n                                {\n                                    Array.Copy(s.window, r, s.window, q, c);\n                                    q += c; r += c; c = 0;\n                                }\n                                break;\n                            }\n                            else if ((e & 64) == 0)\n                            {\n                                t += tp[tp_index_t_3 + 2];\n                                t += (b & InternalInflateConstants.InflateMask[e]);\n                                tp_index_t_3 = (tp_index + t) * 3;\n                                e = tp[tp_index_t_3];\n                            }\n                            else\n                            {\n                                z.Message = \"invalid distance code\";\n\n                                c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3);\n\n                                s.bitb = b; s.bitk = k;\n                                z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                s.writeAt = q;\n\n                                return ZlibConstants.Z_DATA_ERROR;\n                            }\n                        }\n                        while (true);\n                        break;\n                    }\n\n                    if ((e & 64) == 0)\n                    {\n                        t += tp[tp_index_t_3 + 2];\n                        t += (b & InternalInflateConstants.InflateMask[e]);\n                        tp_index_t_3 = (tp_index + t) * 3;\n                        if ((e = tp[tp_index_t_3]) == 0)\n                        {\n                            b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]);\n                            s.window[q++] = (byte)tp[tp_index_t_3 + 2];\n                            m--;\n                            break;\n                        }\n                    }\n                    else if ((e & 32) != 0)\n                    {\n                        c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3);\n\n                        s.bitb = b; s.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        s.writeAt = q;\n\n                        return ZlibConstants.Z_STREAM_END;\n                    }\n                    else\n                    {\n                        z.Message = \"invalid literal/length code\";\n\n                        c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3);\n\n                        s.bitb = b; s.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        s.writeAt = q;\n\n                        return ZlibConstants.Z_DATA_ERROR;\n                    }\n                }\n                while (true);\n            }\n            while (m >= 258 && n >= 10);\n\n            // not enough input or output--restore pointers and return\n            c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3);\n\n            s.bitb = b; s.bitk = k;\n            z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n            s.writeAt = q;\n\n            return ZlibConstants.Z_OK;\n        }\n    }\n\n\n    internal sealed class InflateManager\n    {\n        // preset dictionary flag in zlib header\n        private const int PRESET_DICT = 0x20;\n\n        private const int Z_DEFLATED = 8;\n\n        private enum InflateManagerMode\n        {\n            METHOD = 0,  // waiting for method byte\n            FLAG = 1,  // waiting for flag byte\n            DICT4 = 2,  // four dictionary check bytes to go\n            DICT3 = 3,  // three dictionary check bytes to go\n            DICT2 = 4,  // two dictionary check bytes to go\n            DICT1 = 5,  // one dictionary check byte to go\n            DICT0 = 6,  // waiting for inflateSetDictionary\n            BLOCKS = 7,  // decompressing blocks\n            CHECK4 = 8,  // four check bytes to go\n            CHECK3 = 9,  // three check bytes to go\n            CHECK2 = 10, // two check bytes to go\n            CHECK1 = 11, // one check byte to go\n            DONE = 12, // finished check, done\n            BAD = 13, // got an error--stay here\n        }\n\n        private InflateManagerMode mode; // current inflate mode\n        internal ZlibCodec _codec; // pointer back to this zlib stream\n\n        // mode dependent information\n        internal int method; // if FLAGS, method byte\n\n        // if CHECK, check values to compare\n        internal uint computedCheck; // computed check value\n        internal uint expectedCheck; // stream check value\n\n        // if BAD, inflateSync's marker bytes count\n        internal int marker;\n\n        // mode independent information\n        //internal int nowrap; // flag for no wrapper\n        private bool _handleRfc1950HeaderBytes = true;\n        internal bool HandleRfc1950HeaderBytes\n        {\n            get { return _handleRfc1950HeaderBytes; }\n            set { _handleRfc1950HeaderBytes = value; }\n        }\n        internal int wbits; // log2(window size)  (8..15, defaults to 15)\n\n        internal InflateBlocks blocks; // current inflate_blocks state\n\n        internal InflateManager() { }\n\n        internal InflateManager(bool expectRfc1950HeaderBytes)\n        {\n            _handleRfc1950HeaderBytes = expectRfc1950HeaderBytes;\n        }\n\n        internal int Reset()\n        {\n            _codec.TotalBytesIn = _codec.TotalBytesOut = 0;\n            _codec.Message = null;\n            mode = HandleRfc1950HeaderBytes ? InflateManagerMode.METHOD : InflateManagerMode.BLOCKS;\n            blocks.Reset();\n            return ZlibConstants.Z_OK;\n        }\n\n        internal int End()\n        {\n            if (blocks != null)\n                blocks.Free();\n            blocks = null;\n            return ZlibConstants.Z_OK;\n        }\n\n        internal int Initialize(ZlibCodec codec, int w)\n        {\n            _codec = codec;\n            _codec.Message = null;\n            blocks = null;\n\n            // handle undocumented nowrap option (no zlib header or check)\n            //nowrap = 0;\n            //if (w < 0)\n            //{\n            //    w = - w;\n            //    nowrap = 1;\n            //}\n\n            // set window size\n            if (w < 8 || w > 15)\n            {\n                End();\n                throw new ZlibException(\"Bad window size.\");\n\n                //return ZlibConstants.Z_STREAM_ERROR;\n            }\n            wbits = w;\n\n            blocks = new InflateBlocks(codec,\n                HandleRfc1950HeaderBytes ? this : null,\n                1 << w);\n\n            // reset state\n            Reset();\n            return ZlibConstants.Z_OK;\n        }\n\n\n        internal int Inflate(FlushType flush)\n        {\n            int b;\n\n            if (_codec.InputBuffer == null)\n                throw new ZlibException(\"InputBuffer is null. \");\n\n            //             int f = (flush == FlushType.Finish)\n            //                 ? ZlibConstants.Z_BUF_ERROR\n            //                 : ZlibConstants.Z_OK;\n\n            // workitem 8870\n            int f = ZlibConstants.Z_OK;\n            int r = ZlibConstants.Z_BUF_ERROR;\n\n            while (true)\n            {\n                switch (mode)\n                {\n                    case InflateManagerMode.METHOD:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        if (((method = _codec.InputBuffer[_codec.NextIn++]) & 0xf) != Z_DEFLATED)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            _codec.Message = String.Format(\"unknown compression method (0x{0:X2})\", method);\n                            marker = 5; // can't try inflateSync\n                            break;\n                        }\n                        if ((method >> 4) + 8 > wbits)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            _codec.Message = String.Format(\"invalid window size ({0})\", (method >> 4) + 8);\n                            marker = 5; // can't try inflateSync\n                            break;\n                        }\n                        mode = InflateManagerMode.FLAG;\n                        break;\n\n\n                    case InflateManagerMode.FLAG:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        b = (_codec.InputBuffer[_codec.NextIn++]) & 0xff;\n\n                        if ((((method << 8) + b) % 31) != 0)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            _codec.Message = \"incorrect header check\";\n                            marker = 5; // can't try inflateSync\n                            break;\n                        }\n\n                        mode = ((b & PRESET_DICT) == 0)\n                            ? InflateManagerMode.BLOCKS\n                            : InflateManagerMode.DICT4;\n                        break;\n\n                    case InflateManagerMode.DICT4:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000);\n                        mode = InflateManagerMode.DICT3;\n                        break;\n\n                    case InflateManagerMode.DICT3:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000);\n                        mode = InflateManagerMode.DICT2;\n                        break;\n\n                    case InflateManagerMode.DICT2:\n\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00);\n                        mode = InflateManagerMode.DICT1;\n                        break;\n\n\n                    case InflateManagerMode.DICT1:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--; _codec.TotalBytesIn++;\n                        expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff);\n                        _codec._Adler32 = expectedCheck;\n                        mode = InflateManagerMode.DICT0;\n                        return ZlibConstants.Z_NEED_DICT;\n\n\n                    case InflateManagerMode.DICT0:\n                        mode = InflateManagerMode.BAD;\n                        _codec.Message = \"need dictionary\";\n                        marker = 0; // can try inflateSync\n                        return ZlibConstants.Z_STREAM_ERROR;\n\n\n                    case InflateManagerMode.BLOCKS:\n                        r = blocks.Process(r);\n                        if (r == ZlibConstants.Z_DATA_ERROR)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            marker = 0; // can try inflateSync\n                            break;\n                        }\n\n                        if (r == ZlibConstants.Z_OK) r = f;\n\n                        if (r != ZlibConstants.Z_STREAM_END)\n                            return r;\n\n                        r = f;\n                        computedCheck = blocks.Reset();\n                        if (!HandleRfc1950HeaderBytes)\n                        {\n                            mode = InflateManagerMode.DONE;\n                            return ZlibConstants.Z_STREAM_END;\n                        }\n                        mode = InflateManagerMode.CHECK4;\n                        break;\n\n                    case InflateManagerMode.CHECK4:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000);\n                        mode = InflateManagerMode.CHECK3;\n                        break;\n\n                    case InflateManagerMode.CHECK3:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--; _codec.TotalBytesIn++;\n                        expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000);\n                        mode = InflateManagerMode.CHECK2;\n                        break;\n\n                    case InflateManagerMode.CHECK2:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00);\n                        mode = InflateManagerMode.CHECK1;\n                        break;\n\n                    case InflateManagerMode.CHECK1:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--; _codec.TotalBytesIn++;\n                        expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff);\n                        if (computedCheck != expectedCheck)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            _codec.Message = \"incorrect data check\";\n                            marker = 5; // can't try inflateSync\n                            break;\n                        }\n                        mode = InflateManagerMode.DONE;\n                        return ZlibConstants.Z_STREAM_END;\n\n                    case InflateManagerMode.DONE:\n                        return ZlibConstants.Z_STREAM_END;\n\n                    case InflateManagerMode.BAD:\n                        throw new ZlibException(String.Format(\"Bad state ({0})\", _codec.Message));\n\n                    default:\n                        throw new ZlibException(\"Stream error.\");\n\n                }\n            }\n        }\n\n\n\n        internal int SetDictionary(byte[] dictionary)\n        {\n            int index = 0;\n            int length = dictionary.Length;\n            if (mode != InflateManagerMode.DICT0)\n                throw new ZlibException(\"Stream error.\");\n\n            if (Adler.Adler32(1, dictionary, 0, dictionary.Length) != _codec._Adler32)\n            {\n                return ZlibConstants.Z_DATA_ERROR;\n            }\n\n            _codec._Adler32 = Adler.Adler32(0, null, 0, 0);\n\n            if (length >= (1 << wbits))\n            {\n                length = (1 << wbits) - 1;\n                index = dictionary.Length - length;\n            }\n            blocks.SetDictionary(dictionary, index, length);\n            mode = InflateManagerMode.BLOCKS;\n            return ZlibConstants.Z_OK;\n        }\n\n\n        private static readonly byte[] mark = new byte[] { 0, 0, 0xff, 0xff };\n\n        internal int Sync()\n        {\n            int n; // number of bytes to look at\n            int p; // pointer to bytes\n            int m; // number of marker bytes found in a row\n            long r, w; // temporaries to save total_in and total_out\n\n            // set up\n            if (mode != InflateManagerMode.BAD)\n            {\n                mode = InflateManagerMode.BAD;\n                marker = 0;\n            }\n            if ((n = _codec.AvailableBytesIn) == 0)\n                return ZlibConstants.Z_BUF_ERROR;\n            p = _codec.NextIn;\n            m = marker;\n\n            // search\n            while (n != 0 && m < 4)\n            {\n                if (_codec.InputBuffer[p] == mark[m])\n                {\n                    m++;\n                }\n                else if (_codec.InputBuffer[p] != 0)\n                {\n                    m = 0;\n                }\n                else\n                {\n                    m = 4 - m;\n                }\n                p++; n--;\n            }\n\n            // restore\n            _codec.TotalBytesIn += p - _codec.NextIn;\n            _codec.NextIn = p;\n            _codec.AvailableBytesIn = n;\n            marker = m;\n\n            // return no joy or set up to restart on a new block\n            if (m != 4)\n            {\n                return ZlibConstants.Z_DATA_ERROR;\n            }\n            r = _codec.TotalBytesIn;\n            w = _codec.TotalBytesOut;\n            Reset();\n            _codec.TotalBytesIn = r;\n            _codec.TotalBytesOut = w;\n            mode = InflateManagerMode.BLOCKS;\n            return ZlibConstants.Z_OK;\n        }\n\n\n        // Returns true if inflate is currently at the end of a block generated\n        // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP\n        // implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH\n        // but removes the length bytes of the resulting empty stored block. When\n        // decompressing, PPP checks that at the end of input packet, inflate is\n        // waiting for these length bytes.\n        internal int SyncPoint(ZlibCodec z)\n        {\n            return blocks.SyncPoint();\n        }\n    }\n\n    /// <summary>\n    ///   A class for compressing and decompressing GZIP streams.\n    /// </summary>\n    /// <remarks>\n    ///\n    /// <para>\n    ///   The <c>GZipStream</c> is a <see\n    ///   href=\"http://en.wikipedia.org/wiki/Decorator_pattern\">Decorator</see> on a\n    ///   <see cref=\"Stream\"/>. It adds GZIP compression or decompression to any\n    ///   stream.\n    /// </para>\n    ///\n    /// <para>\n    ///   Like the <c>System.IO.Compression.GZipStream</c> in the .NET Base Class Library, the\n    ///   <c>Ionic.Zlib.GZipStream</c> can compress while writing, or decompress while\n    ///   reading, but not vice versa.  The compression method used is GZIP, which is\n    ///   documented in <see href=\"http://www.ietf.org/rfc/rfc1952.txt\">IETF RFC\n    ///   1952</see>, \"GZIP file format specification version 4.3\".</para>\n    ///\n    /// <para>\n    ///   A <c>GZipStream</c> can be used to decompress data (through <c>Read()</c>) or\n    ///   to compress data (through <c>Write()</c>), but not both.\n    /// </para>\n    ///\n    /// <para>\n    ///   If you wish to use the <c>GZipStream</c> to compress data, you must wrap it\n    ///   around a write-able stream. As you call <c>Write()</c> on the <c>GZipStream</c>, the\n    ///   data will be compressed into the GZIP format.  If you want to decompress data,\n    ///   you must wrap the <c>GZipStream</c> around a readable stream that contains an\n    ///   IETF RFC 1952-compliant stream.  The data will be decompressed as you call\n    ///   <c>Read()</c> on the <c>GZipStream</c>.\n    /// </para>\n    ///\n    /// <para>\n    ///   Though the GZIP format allows data from multiple files to be concatenated\n    ///   together, this stream handles only a single segment of GZIP format, typically\n    ///   representing a single file.\n    /// </para>\n    ///\n    ///\n    /// </remarks>\n    internal class GZipStream : Stream\n    {\n        // GZip format\n        // source: http://tools.ietf.org/html/rfc1952\n        //\n        //  header id:           2 bytes    1F 8B\n        //  compress method      1 byte     8= DEFLATE (none other supported)\n        //  flag                 1 byte     bitfield (See below)\n        //  mtime                4 bytes    time_t (seconds since jan 1, 1970 UTC of the file.\n        //  xflg                 1 byte     2 = max compress used , 4 = max speed (can be ignored)\n        //  OS                   1 byte     OS for originating archive. set to 0xFF in compression.\n        //  extra field length   2 bytes    optional - only if FEXTRA is set.\n        //  extra field          varies\n        //  filename             varies     optional - if FNAME is set.  zero terminated. ISO-8859-1.\n        //  file comment         varies     optional - if FCOMMENT is set. zero terminated. ISO-8859-1.\n        //  crc16                1 byte     optional - present only if FHCRC bit is set\n        //  compressed data      varies\n        //  CRC32                4 bytes\n        //  isize                4 bytes    data size modulo 2^32\n        //\n        //     FLG (FLaGs)\n        //                bit 0   FTEXT - indicates file is ASCII text (can be safely ignored)\n        //                bit 1   FHCRC - there is a CRC16 for the header immediately following the header\n        //                bit 2   FEXTRA - extra fields are present\n        //                bit 3   FNAME - the zero-terminated filename is present. encoding; ISO-8859-1.\n        //                bit 4   FCOMMENT  - a zero-terminated file comment is present. encoding: ISO-8859-1\n        //                bit 5   reserved\n        //                bit 6   reserved\n        //                bit 7   reserved\n        //\n        // On consumption:\n        // Extra field is a bunch of nonsense and can be safely ignored.\n        // Header CRC and OS, likewise.\n        //\n        // on generation:\n        // all optional fields get 0, except for the OS, which gets 255.\n        //\n\n\n\n        /// <summary>\n        ///   The comment on the GZIP stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   The GZIP format allows for each file to optionally have an associated\n        ///   comment stored with the file.  The comment is encoded with the ISO-8859-1\n        ///   code page.  To include a comment in a GZIP stream you create, set this\n        ///   property before calling <c>Write()</c> for the first time on the\n        ///   <c>GZipStream</c>.\n        /// </para>\n        ///\n        /// <para>\n        ///   When using <c>GZipStream</c> to decompress, you can retrieve this property\n        ///   after the first call to <c>Read()</c>.  If no comment has been set in the\n        ///   GZIP bytestream, the Comment property will return <c>null</c>\n        ///   (<c>Nothing</c> in VB).\n        /// </para>\n        /// </remarks>\n        internal String Comment\n        {\n            get\n            {\n                return _Comment;\n            }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                _Comment = value;\n            }\n        }\n\n        /// <summary>\n        ///   The FileName for the GZIP stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   The GZIP format optionally allows each file to have an associated\n        ///   filename.  When compressing data (through <c>Write()</c>), set this\n        ///   FileName before calling <c>Write()</c> the first time on the <c>GZipStream</c>.\n        ///   The actual filename is encoded into the GZIP bytestream with the\n        ///   ISO-8859-1 code page, according to RFC 1952. It is the application's\n        ///   responsibility to insure that the FileName can be encoded and decoded\n        ///   correctly with this code page.\n        /// </para>\n        ///\n        /// <para>\n        ///   When decompressing (through <c>Read()</c>), you can retrieve this value\n        ///   any time after the first <c>Read()</c>.  In the case where there was no filename\n        ///   encoded into the GZIP bytestream, the property will return <c>null</c> (<c>Nothing</c>\n        ///   in VB).\n        /// </para>\n        /// </remarks>\n        internal String FileName\n        {\n            get { return _FileName; }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                _FileName = value;\n                if (_FileName == null) return;\n                if (_FileName.IndexOf(\"/\") != -1)\n                {\n                    _FileName = _FileName.Replace(\"/\", \"\\\\\");\n                }\n                if (_FileName.EndsWith(\"\\\\\"))\n                    throw new Exception(\"Illegal filename\");\n                if (_FileName.IndexOf(\"\\\\\") != -1)\n                {\n                    // trim any leading path\n                    _FileName = Path.GetFileName(_FileName);\n                }\n            }\n        }\n\n        /// <summary>\n        ///   The last modified time for the GZIP stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   GZIP allows the storage of a last modified time with each GZIP entry.\n        ///   When compressing data, you can set this before the first call to\n        ///   <c>Write()</c>.  When decompressing, you can retrieve this value any time\n        ///   after the first call to <c>Read()</c>.\n        /// </remarks>\n        internal DateTime? LastModified;\n\n        /// <summary>\n        /// The CRC on the GZIP stream.\n        /// </summary>\n        /// <remarks>\n        /// This is used for internal error checking. You probably don't need to look at this property.\n        /// </remarks>\n        internal int Crc32 { get { return _Crc32; } }\n\n        private int _headerByteCount;\n        internal ZlibBaseStream _baseStream;\n        bool _disposed;\n        bool _firstReadDone;\n        string _FileName;\n        string _Comment;\n        int _Crc32;\n\n\n        /// <summary>\n        ///   Create a <c>GZipStream</c> using the specified <c>CompressionMode</c>.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Compress</c>, the <c>GZipStream</c> will use the\n        ///   default compression level.\n        /// </para>\n        ///\n        /// <para>\n        ///   As noted in the class documentation, the <c>CompressionMode</c> (Compress\n        ///   or Decompress) also establishes the \"direction\" of the stream.  A\n        ///   <c>GZipStream</c> with <c>CompressionMode.Compress</c> works only through\n        ///   <c>Write()</c>.  A <c>GZipStream</c> with\n        ///   <c>CompressionMode.Decompress</c> works only through <c>Read()</c>.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///   This example shows how to use a GZipStream to compress data.\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(outputFile))\n        ///     {\n        ///         using (Stream compressor = new GZipStream(raw, CompressionMode.Compress))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Dim outputFile As String = (fileToCompress &amp; \".compressed\")\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(outputFile)\n        ///     Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress)\n        ///         Dim buffer As Byte() = New Byte(4096) {}\n        ///         Dim n As Integer = -1\n        ///         Do While (n &lt;&gt; 0)\n        ///             If (n &gt; 0) Then\n        ///                 compressor.Write(buffer, 0, n)\n        ///             End If\n        ///             n = input.Read(buffer, 0, buffer.Length)\n        ///         Loop\n        ///     End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        ///\n        /// <example>\n        /// This example shows how to use a GZipStream to uncompress a file.\n        /// <code>\n        /// private void GunZipFile(string filename)\n        /// {\n        ///     if (!filename.EndsWith(\".gz))\n        ///         throw new ArgumentException(\"filename\");\n        ///     var DecompressedFile = filename.Substring(0,filename.Length-3);\n        ///     byte[] working = new byte[WORKING_BUFFER_SIZE];\n        ///     int n= 1;\n        ///     using (System.IO.Stream input = System.IO.File.OpenRead(filename))\n        ///     {\n        ///         using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true))\n        ///         {\n        ///             using (var output = System.IO.File.Create(DecompressedFile))\n        ///             {\n        ///                 while (n !=0)\n        ///                 {\n        ///                     n= decompressor.Read(working, 0, working.Length);\n        ///                     if (n > 0)\n        ///                     {\n        ///                         output.Write(working, 0, n);\n        ///                     }\n        ///                 }\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Private Sub GunZipFile(ByVal filename as String)\n        ///     If Not (filename.EndsWith(\".gz)) Then\n        ///         Throw New ArgumentException(\"filename\")\n        ///     End If\n        ///     Dim DecompressedFile as String = filename.Substring(0,filename.Length-3)\n        ///     Dim working(WORKING_BUFFER_SIZE) as Byte\n        ///     Dim n As Integer = 1\n        ///     Using input As Stream = File.OpenRead(filename)\n        ///         Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True)\n        ///             Using output As Stream = File.Create(UncompressedFile)\n        ///                 Do\n        ///                     n= decompressor.Read(working, 0, working.Length)\n        ///                     If n > 0 Then\n        ///                         output.Write(working, 0, n)\n        ///                     End IF\n        ///                 Loop While (n  > 0)\n        ///             End Using\n        ///         End Using\n        ///     End Using\n        /// End Sub\n        /// </code>\n        /// </example>\n        ///\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        /// <param name=\"mode\">Indicates whether the GZipStream will compress or decompress.</param>\n        internal GZipStream(Stream stream, CompressionMode mode)\n            : this(stream, mode, CompressionLevel.Default, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>GZipStream</c> using the specified <c>CompressionMode</c> and\n        ///   the specified <c>CompressionLevel</c>.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   The <c>CompressionMode</c> (Compress or Decompress) also establishes the\n        ///   \"direction\" of the stream.  A <c>GZipStream</c> with\n        ///   <c>CompressionMode.Compress</c> works only through <c>Write()</c>.  A\n        ///   <c>GZipStream</c> with <c>CompressionMode.Decompress</c> works only\n        ///   through <c>Read()</c>.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///\n        /// This example shows how to use a <c>GZipStream</c> to compress a file into a .gz file.\n        ///\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(fileToCompress + \".gz\"))\n        ///     {\n        ///         using (Stream compressor = new GZipStream(raw,\n        ///                                                   CompressionMode.Compress,\n        ///                                                   CompressionLevel.BestCompression))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(fileToCompress &amp; \".gz\")\n        ///         Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        /// <param name=\"stream\">The stream to be read or written while deflating or inflating.</param>\n        /// <param name=\"mode\">Indicates whether the <c>GZipStream</c> will compress or decompress.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        internal GZipStream(Stream stream, CompressionMode mode, CompressionLevel level)\n            : this(stream, mode, level, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>GZipStream</c> using the specified <c>CompressionMode</c>, and\n        ///   explicitly specify whether the stream should be left open after Deflation\n        ///   or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   This constructor allows the application to request that the captive stream\n        ///   remain open after the deflation or inflation occurs.  By default, after\n        ///   <c>Close()</c> is called on the stream, the captive stream is also\n        ///   closed. In some cases this is not desired, for example if the stream is a\n        ///   memory stream that will be re-read after compressed data has been written\n        ///   to it.  Specify true for the <paramref name=\"leaveOpen\"/> parameter to leave\n        ///   the stream open.\n        /// </para>\n        ///\n        /// <para>\n        ///   The <see cref=\"CompressionMode\"/> (Compress or Decompress) also\n        ///   establishes the \"direction\" of the stream.  A <c>GZipStream</c> with\n        ///   <c>CompressionMode.Compress</c> works only through <c>Write()</c>.  A <c>GZipStream</c>\n        ///   with <c>CompressionMode.Decompress</c> works only through <c>Read()</c>.\n        /// </para>\n        ///\n        /// <para>\n        ///   The <c>GZipStream</c> will use the default compression level. If you want\n        ///   to specify the compression level, see <see cref=\"GZipStream(Stream,\n        ///   CompressionMode, CompressionLevel, bool)\"/>.\n        /// </para>\n        ///\n        /// <para>\n        ///   See the other overloads of this constructor for example code.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <param name=\"stream\">\n        ///   The stream which will be read or written. This is called the \"captive\"\n        ///   stream in other places in this documentation.\n        /// </param>\n        ///\n        /// <param name=\"mode\">Indicates whether the GZipStream will compress or decompress.\n        /// </param>\n        ///\n        /// <param name=\"leaveOpen\">\n        ///   true if the application would like the base stream to remain open after\n        ///   inflation/deflation.\n        /// </param>\n        internal GZipStream(Stream stream, CompressionMode mode, bool leaveOpen)\n            : this(stream, mode, CompressionLevel.Default, leaveOpen)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>GZipStream</c> using the specified <c>CompressionMode</c> and the\n        ///   specified <c>CompressionLevel</c>, and explicitly specify whether the\n        ///   stream should be left open after Deflation or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   This constructor allows the application to request that the captive stream\n        ///   remain open after the deflation or inflation occurs.  By default, after\n        ///   <c>Close()</c> is called on the stream, the captive stream is also\n        ///   closed. In some cases this is not desired, for example if the stream is a\n        ///   memory stream that will be re-read after compressed data has been written\n        ///   to it.  Specify true for the <paramref name=\"leaveOpen\"/> parameter to\n        ///   leave the stream open.\n        /// </para>\n        ///\n        /// <para>\n        ///   As noted in the class documentation, the <c>CompressionMode</c> (Compress\n        ///   or Decompress) also establishes the \"direction\" of the stream.  A\n        ///   <c>GZipStream</c> with <c>CompressionMode.Compress</c> works only through\n        ///   <c>Write()</c>.  A <c>GZipStream</c> with <c>CompressionMode.Decompress</c> works only\n        ///   through <c>Read()</c>.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///   This example shows how to use a <c>GZipStream</c> to compress data.\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(outputFile))\n        ///     {\n        ///         using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Dim outputFile As String = (fileToCompress &amp; \".compressed\")\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(outputFile)\n        ///     Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True)\n        ///         Dim buffer As Byte() = New Byte(4096) {}\n        ///         Dim n As Integer = -1\n        ///         Do While (n &lt;&gt; 0)\n        ///             If (n &gt; 0) Then\n        ///                 compressor.Write(buffer, 0, n)\n        ///             End If\n        ///             n = input.Read(buffer, 0, buffer.Length)\n        ///         Loop\n        ///     End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        /// <param name=\"mode\">Indicates whether the GZipStream will compress or decompress.</param>\n        /// <param name=\"leaveOpen\">true if the application would like the stream to remain open after inflation/deflation.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        internal GZipStream(Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen)\n        {\n            _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.GZIP, leaveOpen);\n        }\n\n        #region Zlib properties\n\n        /// <summary>\n        /// This property sets the flush behavior on the stream.\n        /// </summary>\n        virtual internal FlushType FlushMode\n        {\n            get { return (this._baseStream._flushMode); }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                this._baseStream._flushMode = value;\n            }\n        }\n\n        /// <summary>\n        ///   The size of the working buffer for the compression codec.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   The working buffer is used for all stream operations.  The default size is\n        ///   1024 bytes.  The minimum size is 128 bytes. You may get better performance\n        ///   with a larger buffer.  Then again, you might not.  You would have to test\n        ///   it.\n        /// </para>\n        ///\n        /// <para>\n        ///   Set this before the first call to <c>Read()</c> or <c>Write()</c> on the\n        ///   stream. If you try to set it afterwards, it will throw.\n        /// </para>\n        /// </remarks>\n        internal int BufferSize\n        {\n            get\n            {\n                return this._baseStream._bufferSize;\n            }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                if (this._baseStream._workingBuffer != null)\n                    throw new ZlibException(\"The working buffer is already set.\");\n                if (value < ZlibConstants.WorkingBufferSizeMin)\n                    throw new ZlibException(String.Format(\"Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.\", value, ZlibConstants.WorkingBufferSizeMin));\n                this._baseStream._bufferSize = value;\n            }\n        }\n\n\n        /// <summary> Returns the total number of bytes input so far.</summary>\n        virtual internal long TotalIn\n        {\n            get\n            {\n                return this._baseStream._z.TotalBytesIn;\n            }\n        }\n\n        /// <summary> Returns the total number of bytes output so far.</summary>\n        virtual internal long TotalOut\n        {\n            get\n            {\n                return this._baseStream._z.TotalBytesOut;\n            }\n        }\n\n        #endregion\n\n        #region Stream methods\n\n        /// <summary>\n        ///   Dispose the stream.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This may or may not result in a <c>Close()</c> call on the captive\n        ///     stream.  See the constructors that have a <c>leaveOpen</c> parameter\n        ///     for more information.\n        ///   </para>\n        ///   <para>\n        ///     This method may be invoked in two distinct scenarios.  If disposing\n        ///     == true, the method has been called directly or indirectly by a\n        ///     user's code, for example via the internal Dispose() method. In this\n        ///     case, both managed and unmanaged resources can be referenced and\n        ///     disposed.  If disposing == false, the method has been called by the\n        ///     runtime from inside the object finalizer and this method should not\n        ///     reference other objects; in that case only unmanaged resources must\n        ///     be referenced or disposed.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"disposing\">\n        ///   indicates whether the Dispose method was invoked by user code.\n        /// </param>\n        protected override void Dispose(bool disposing)\n        {\n            try\n            {\n                if (!_disposed)\n                {\n                    if (disposing && (this._baseStream != null))\n                    {\n                        this._baseStream.Dispose();\n                        this._Crc32 = _baseStream.Crc32;\n                    }\n                    _disposed = true;\n                }\n            }\n            finally\n            {\n                base.Dispose(disposing);\n            }\n        }\n\n\n        /// <summary>\n        /// Indicates whether the stream can be read.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports reading.\n        /// </remarks>\n        public override bool CanRead\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                return _baseStream._stream.CanRead;\n            }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports Seek operations.\n        /// </summary>\n        /// <remarks>\n        /// Always returns false.\n        /// </remarks>\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n\n        /// <summary>\n        /// Indicates whether the stream can be written.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports writing.\n        /// </remarks>\n        public override bool CanWrite\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                return _baseStream._stream.CanWrite;\n            }\n        }\n\n        /// <summary>\n        /// Flush the stream.\n        /// </summary>\n        public override void Flush()\n        {\n            if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n            _baseStream.Flush();\n        }\n\n        /// <summary>\n        /// Reading this property always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        public override long Length\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        ///   The position of the stream pointer.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Setting this property always throws a <see\n        ///   cref=\"NotImplementedException\"/>. Reading will return the total bytes\n        ///   written out, if used in writing, or the total bytes read in, if used in\n        ///   reading.  The count may refer to compressed bytes or uncompressed bytes,\n        ///   depending on how you've used the stream.\n        /// </remarks>\n        public override long Position\n        {\n            get\n            {\n                if (this._baseStream._streamMode == ZlibBaseStream.StreamMode.Writer)\n                    return this._baseStream._z.TotalBytesOut + _headerByteCount;\n                if (this._baseStream._streamMode == ZlibBaseStream.StreamMode.Reader)\n                    return this._baseStream._z.TotalBytesIn + this._baseStream._gzipHeaderByteCount;\n                return 0;\n            }\n\n            set { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        ///   Read and decompress data from the source stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   With a <c>GZipStream</c>, decompression is done through reading.\n        /// </remarks>\n        ///\n        /// <example>\n        /// <code>\n        /// byte[] working = new byte[WORKING_BUFFER_SIZE];\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile))\n        /// {\n        ///     using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true))\n        ///     {\n        ///         using (var output = System.IO.File.Create(_DecompressedFile))\n        ///         {\n        ///             int n;\n        ///             while ((n= decompressor.Read(working, 0, working.Length)) !=0)\n        ///             {\n        ///                 output.Write(working, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// </example>\n        /// <param name=\"buffer\">The buffer into which the decompressed data should be placed.</param>\n        /// <param name=\"offset\">the offset within that data array to put the first byte read.</param>\n        /// <param name=\"count\">the number of bytes to read.</param>\n        /// <returns>the number of bytes actually read</returns>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n            int n = _baseStream.Read(buffer, offset, count);\n\n            // Console.WriteLine(\"GZipStream::Read(buffer, off({0}), c({1}) = {2}\", offset, count, n);\n            // Console.WriteLine( Util.FormatByteArray(buffer, offset, n) );\n\n            if (!_firstReadDone)\n            {\n                _firstReadDone = true;\n                FileName = _baseStream._GzipFileName;\n                Comment = _baseStream._GzipComment;\n            }\n            return n;\n        }\n\n\n\n        /// <summary>\n        ///   Calling this method always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        /// <param name=\"offset\">irrelevant; it will always throw!</param>\n        /// <param name=\"origin\">irrelevant; it will always throw!</param>\n        /// <returns>irrelevant!</returns>\n        public override long Seek(long offset, SeekOrigin origin)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        ///   Calling this method always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        /// <param name=\"value\">irrelevant; this method will always throw!</param>\n        public override void SetLength(long value)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        ///   Write data to the stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   If you wish to use the <c>GZipStream</c> to compress data while writing,\n        ///   you can create a <c>GZipStream</c> with <c>CompressionMode.Compress</c>, and a\n        ///   writable output stream.  Then call <c>Write()</c> on that <c>GZipStream</c>,\n        ///   providing uncompressed data as input.  The data sent to the output stream\n        ///   will be the compressed form of the data written.\n        /// </para>\n        ///\n        /// <para>\n        ///   A <c>GZipStream</c> can be used for <c>Read()</c> or <c>Write()</c>, but not\n        ///   both. Writing implies compression.  Reading implies decompression.\n        /// </para>\n        ///\n        /// </remarks>\n        /// <param name=\"buffer\">The buffer holding data to write to the stream.</param>\n        /// <param name=\"offset\">the offset within that data array to find the first byte to write.</param>\n        /// <param name=\"count\">the number of bytes to write.</param>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n            if (_baseStream._streamMode == ZlibBaseStream.StreamMode.Undefined)\n            {\n                //Console.WriteLine(\"GZipStream: First write\");\n                if (_baseStream._wantCompress)\n                {\n                    // first write in compression, therefore, emit the GZIP header\n                    _headerByteCount = EmitHeader();\n                }\n                else\n                {\n                    throw new InvalidOperationException();\n                }\n            }\n\n            _baseStream.Write(buffer, offset, count);\n        }\n        #endregion\n\n\n        internal static readonly System.DateTime _unixEpoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);\n        internal static readonly System.Text.Encoding iso8859dash1 = new Iso88591Encoding();\n\n        private int EmitHeader()\n        {\n            byte[] commentBytes = (Comment == null) ? null : iso8859dash1.GetBytes(Comment);\n            byte[] filenameBytes = (FileName == null) ? null : iso8859dash1.GetBytes(FileName);\n\n            int cbLength = (Comment == null) ? 0 : commentBytes.Length + 1;\n            int fnLength = (FileName == null) ? 0 : filenameBytes.Length + 1;\n\n            int bufferLength = 10 + cbLength + fnLength;\n            byte[] header = new byte[bufferLength];\n            int i = 0;\n            // ID\n            header[i++] = 0x1F;\n            header[i++] = 0x8B;\n\n            // compression method\n            header[i++] = 8;\n            byte flag = 0;\n            if (Comment != null)\n                flag ^= 0x10;\n            if (FileName != null)\n                flag ^= 0x8;\n\n            // flag\n            header[i++] = flag;\n\n            // mtime\n            if (!LastModified.HasValue) LastModified = DateTime.Now;\n            System.TimeSpan delta = LastModified.Value - _unixEpoch;\n            Int32 timet = (Int32)delta.TotalSeconds;\n            Array.Copy(BitConverter.GetBytes(timet), 0, header, i, 4);\n            i += 4;\n\n            // xflg\n            header[i++] = 0;    // this field is totally useless\n            // OS\n            header[i++] = 0xFF; // 0xFF == unspecified\n\n            // extra field length - only if FEXTRA is set, which it is not.\n            //header[i++]= 0;\n            //header[i++]= 0;\n\n            // filename\n            if (fnLength != 0)\n            {\n                Array.Copy(filenameBytes, 0, header, i, fnLength - 1);\n                i += fnLength - 1;\n                header[i++] = 0; // terminate\n            }\n\n            // comment\n            if (cbLength != 0)\n            {\n                Array.Copy(commentBytes, 0, header, i, cbLength - 1);\n                i += cbLength - 1;\n                header[i++] = 0; // terminate\n            }\n\n            _baseStream._stream.Write(header, 0, header.Length);\n\n            return header.Length; // bytes written\n        }\n\n\n\n        /// <summary>\n        ///   Compress a string into a byte array using GZip.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"GZipStream.UncompressString(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"GZipStream.UncompressString(byte[])\"/>\n        /// <seealso cref=\"GZipStream.CompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"s\">\n        ///   A string to compress. The string will first be encoded\n        ///   using UTF8, then compressed.\n        /// </param>\n        ///\n        /// <returns>The string in compressed form</returns>\n        internal static byte[] CompressString(String s)\n        {\n            using (var ms = new MemoryStream())\n            {\n                System.IO.Stream compressor =\n                    new GZipStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression);\n                ZlibBaseStream.CompressString(s, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Compress a byte array into a new byte array using GZip.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"GZipStream.UncompressBuffer(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"GZipStream.CompressString(string)\"/>\n        /// <seealso cref=\"GZipStream.UncompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"b\">\n        ///   A buffer to compress.\n        /// </param>\n        ///\n        /// <returns>The data in compressed form</returns>\n        internal static byte[] CompressBuffer(byte[] b)\n        {\n            using (var ms = new MemoryStream())\n            {\n                System.IO.Stream compressor =\n                    new GZipStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression);\n\n                ZlibBaseStream.CompressBuffer(b, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a GZip'ed byte array into a single string.\n        /// </summary>\n        ///\n        /// <seealso cref=\"GZipStream.CompressString(String)\"/>\n        /// <seealso cref=\"GZipStream.UncompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing GZIP-compressed data.\n        /// </param>\n        ///\n        /// <returns>The uncompressed string</returns>\n        internal static String UncompressString(byte[] compressed)\n        {\n            using (var input = new MemoryStream(compressed))\n            {\n                Stream decompressor = new GZipStream(input, CompressionMode.Decompress);\n                return ZlibBaseStream.UncompressString(compressed, decompressor);\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a GZip'ed byte array into a byte array.\n        /// </summary>\n        ///\n        /// <seealso cref=\"GZipStream.CompressBuffer(byte[])\"/>\n        /// <seealso cref=\"GZipStream.UncompressString(byte[])\"/>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing data that has been compressed with GZip.\n        /// </param>\n        ///\n        /// <returns>The data in uncompressed form</returns>\n        internal static byte[] UncompressBuffer(byte[] compressed)\n        {\n            using (var input = new System.IO.MemoryStream(compressed))\n            {\n                System.IO.Stream decompressor =\n                    new GZipStream(input, CompressionMode.Decompress);\n\n                return ZlibBaseStream.UncompressBuffer(compressed, decompressor);\n            }\n        }\n\n\n    }\n\n    internal enum BlockState\n    {\n        NeedMore = 0,       // block not completed, need more input or more output\n        BlockDone,          // block flush performed\n        FinishStarted,              // finish started, need only more output at next deflate\n        FinishDone          // finish done, accept no more input or output\n    }\n\n    internal enum DeflateFlavor\n    {\n        Store,\n        Fast,\n        Slow\n    }\n\n    internal sealed class DeflateManager\n    {\n        private static readonly int MEM_LEVEL_MAX = 9;\n        private static readonly int MEM_LEVEL_DEFAULT = 8;\n\n        internal delegate BlockState CompressFunc(FlushType flush);\n\n        internal class Config\n        {\n            // Use a faster search when the previous match is longer than this\n            internal int GoodLength; // reduce lazy search above this match length\n\n            // Attempt to find a better match only when the current match is\n            // strictly smaller than this value. This mechanism is used only for\n            // compression levels >= 4.  For levels 1,2,3: MaxLazy is actually\n            // MaxInsertLength. (See DeflateFast)\n\n            internal int MaxLazy;    // do not perform lazy search above this match length\n\n            internal int NiceLength; // quit search above this match length\n\n            // To speed up deflation, hash chains are never searched beyond this\n            // length.  A higher limit improves compression ratio but degrades the speed.\n\n            internal int MaxChainLength;\n\n            internal DeflateFlavor Flavor;\n\n            private Config(int goodLength, int maxLazy, int niceLength, int maxChainLength, DeflateFlavor flavor)\n            {\n                this.GoodLength = goodLength;\n                this.MaxLazy = maxLazy;\n                this.NiceLength = niceLength;\n                this.MaxChainLength = maxChainLength;\n                this.Flavor = flavor;\n            }\n\n            internal static Config Lookup(CompressionLevel level)\n            {\n                return Table[(int)level];\n            }\n\n\n            static Config()\n            {\n                Table = new Config[] {\n                    new Config(0, 0, 0, 0, DeflateFlavor.Store),\n                    new Config(4, 4, 8, 4, DeflateFlavor.Fast),\n                    new Config(4, 5, 16, 8, DeflateFlavor.Fast),\n                    new Config(4, 6, 32, 32, DeflateFlavor.Fast),\n\n                    new Config(4, 4, 16, 16, DeflateFlavor.Slow),\n                    new Config(8, 16, 32, 32, DeflateFlavor.Slow),\n                    new Config(8, 16, 128, 128, DeflateFlavor.Slow),\n                    new Config(8, 32, 128, 256, DeflateFlavor.Slow),\n                    new Config(32, 128, 258, 1024, DeflateFlavor.Slow),\n                    new Config(32, 258, 258, 4096, DeflateFlavor.Slow),\n                };\n            }\n\n            private static readonly Config[] Table;\n        }\n\n\n        private CompressFunc DeflateFunction;\n\n        private static readonly System.String[] _ErrorMessage = new System.String[]\n        {\n            \"need dictionary\",\n            \"stream end\",\n            \"\",\n            \"file error\",\n            \"stream error\",\n            \"data error\",\n            \"insufficient memory\",\n            \"buffer error\",\n            \"incompatible version\",\n            \"\"\n        };\n\n        // preset dictionary flag in zlib header\n        private static readonly int PRESET_DICT = 0x20;\n\n        private static readonly int INIT_STATE = 42;\n        private static readonly int BUSY_STATE = 113;\n        private static readonly int FINISH_STATE = 666;\n\n        // The deflate compression method\n        private static readonly int Z_DEFLATED = 8;\n\n        private static readonly int STORED_BLOCK = 0;\n        private static readonly int STATIC_TREES = 1;\n        private static readonly int DYN_TREES = 2;\n\n        // The three kinds of block type\n        private static readonly int Z_BINARY = 0;\n        private static readonly int Z_ASCII = 1;\n        private static readonly int Z_UNKNOWN = 2;\n\n        private static readonly int Buf_size = 8 * 2;\n\n        private static readonly int MIN_MATCH = 3;\n        private static readonly int MAX_MATCH = 258;\n\n        private static readonly int MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\n        private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1);\n\n        private static readonly int END_BLOCK = 256;\n\n        internal ZlibCodec _codec; // the zlib encoder/decoder\n        internal int status;       // as the name implies\n        internal byte[] pending;   // output still pending - waiting to be compressed\n        internal int nextPending;  // index of next pending byte to output to the stream\n        internal int pendingCount; // number of bytes in the pending buffer\n\n        internal sbyte data_type;  // UNKNOWN, BINARY or ASCII\n        internal int last_flush;   // value of flush param for previous deflate call\n\n        internal int w_size;       // LZ77 window size (32K by default)\n        internal int w_bits;       // log2(w_size)  (8..16)\n        internal int w_mask;       // w_size - 1\n\n        //internal byte[] dictionary;\n        internal byte[] window;\n\n        // Sliding window. Input bytes are read into the second half of the window,\n        // and move to the first half later to keep a dictionary of at least wSize\n        // bytes. With this organization, matches are limited to a distance of\n        // wSize-MAX_MATCH bytes, but this ensures that IO is always\n        // performed with a length multiple of the block size.\n        //\n        // To do: use the user input buffer as sliding window.\n\n        internal int window_size;\n        // Actual size of window: 2*wSize, except when the user input buffer\n        // is directly used as sliding window.\n\n        internal short[] prev;\n        // Link to older string with same hash index. To limit the size of this\n        // array to 64K, this link is maintained only for the last 32K strings.\n        // An index in this array is thus a window index modulo 32K.\n\n        internal short[] head;  // Heads of the hash chains or NIL.\n\n        internal int ins_h;     // hash index of string to be inserted\n        internal int hash_size; // number of elements in hash table\n        internal int hash_bits; // log2(hash_size)\n        internal int hash_mask; // hash_size-1\n\n        // Number of bits by which ins_h must be shifted at each input\n        // step. It must be such that after MIN_MATCH steps, the oldest\n        // byte no longer takes part in the hash key, that is:\n        // hash_shift * MIN_MATCH >= hash_bits\n        internal int hash_shift;\n\n        // Window position at the beginning of the current output block. Gets\n        // negative when the window is moved backwards.\n\n        internal int block_start;\n\n        Config config;\n        internal int match_length;    // length of best match\n        internal int prev_match;      // previous match\n        internal int match_available; // set if previous match exists\n        internal int strstart;        // start of string to insert into.....????\n        internal int match_start;     // start of matching string\n        internal int lookahead;       // number of valid bytes ahead in window\n\n        // Length of the best match at previous step. Matches not greater than this\n        // are discarded. This is used in the lazy match evaluation.\n        internal int prev_length;\n\n        // Insert new strings in the hash table only if the match length is not\n        // greater than this length. This saves time but degrades compression.\n        // max_insert_length is used only for compression levels <= 3.\n\n        internal CompressionLevel compressionLevel; // compression level (1..9)\n        internal CompressionStrategy compressionStrategy; // favor or force Huffman coding\n\n\n        internal short[] dyn_ltree;         // literal and length tree\n        internal short[] dyn_dtree;         // distance tree\n        internal short[] bl_tree;           // Huffman tree for bit lengths\n\n        internal Tree treeLiterals = new Tree();  // desc for literal tree\n        internal Tree treeDistances = new Tree();  // desc for distance tree\n        internal Tree treeBitLengths = new Tree(); // desc for bit length tree\n\n        // number of codes at each bit length for an optimal tree\n        internal short[] bl_count = new short[InternalConstants.MAX_BITS + 1];\n\n        // heap used to build the Huffman trees\n        internal int[] heap = new int[2 * InternalConstants.L_CODES + 1];\n\n        internal int heap_len;              // number of elements in the heap\n        internal int heap_max;              // element of largest frequency\n\n        // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n        // The same heap array is used to build all trees.\n\n        // Depth of each subtree used as tie breaker for trees of equal frequency\n        internal sbyte[] depth = new sbyte[2 * InternalConstants.L_CODES + 1];\n\n        internal int _lengthOffset;                 // index for literals or lengths\n\n\n        // Size of match buffer for literals/lengths.  There are 4 reasons for\n        // limiting lit_bufsize to 64K:\n        //   - frequencies can be kept in 16 bit counters\n        //   - if compression is not successful for the first block, all input\n        //     data is still in the window so we can still emit a stored block even\n        //     when input comes from standard input.  (This can also be done for\n        //     all blocks if lit_bufsize is not greater than 32K.)\n        //   - if compression is not successful for a file smaller than 64K, we can\n        //     even emit a stored file instead of a stored block (saving 5 bytes).\n        //     This is applicable only for zip (not gzip or zlib).\n        //   - creating new Huffman trees less frequently may not provide fast\n        //     adaptation to changes in the input data statistics. (Take for\n        //     example a binary file with poorly compressible code followed by\n        //     a highly compressible string table.) Smaller buffer sizes give\n        //     fast adaptation but have of course the overhead of transmitting\n        //     trees more frequently.\n\n        internal int lit_bufsize;\n\n        internal int last_lit;     // running index in l_buf\n\n        // Buffer for distances. To simplify the code, d_buf and l_buf have\n        // the same number of elements. To use different lengths, an extra flag\n        // array would be necessary.\n\n        internal int _distanceOffset;        // index into pending; points to distance data??\n\n        internal int opt_len;      // bit length of current block with optimal trees\n        internal int static_len;   // bit length of current block with static trees\n        internal int matches;      // number of string matches in current block\n        internal int last_eob_len; // bit length of EOB code for last block\n\n        // Output buffer. bits are inserted starting at the bottom (least\n        // significant bits).\n        internal short bi_buf;\n\n        // Number of valid bits in bi_buf.  All bits above the last valid bit\n        // are always zero.\n        internal int bi_valid;\n\n\n        internal DeflateManager()\n        {\n            dyn_ltree = new short[HEAP_SIZE * 2];\n            dyn_dtree = new short[(2 * InternalConstants.D_CODES + 1) * 2]; // distance tree\n            bl_tree = new short[(2 * InternalConstants.BL_CODES + 1) * 2]; // Huffman tree for bit lengths\n        }\n\n\n        // lm_init\n        private void _InitializeLazyMatch()\n        {\n            window_size = 2 * w_size;\n\n            // clear the hash - workitem 9063\n            Array.Clear(head, 0, hash_size);\n            //for (int i = 0; i < hash_size; i++) head[i] = 0;\n\n            config = Config.Lookup(compressionLevel);\n            SetDeflater();\n\n            strstart = 0;\n            block_start = 0;\n            lookahead = 0;\n            match_length = prev_length = MIN_MATCH - 1;\n            match_available = 0;\n            ins_h = 0;\n        }\n\n        // Initialize the tree data structures for a new zlib stream.\n        private void _InitializeTreeData()\n        {\n            treeLiterals.dyn_tree = dyn_ltree;\n            treeLiterals.staticTree = StaticTree.Literals;\n\n            treeDistances.dyn_tree = dyn_dtree;\n            treeDistances.staticTree = StaticTree.Distances;\n\n            treeBitLengths.dyn_tree = bl_tree;\n            treeBitLengths.staticTree = StaticTree.BitLengths;\n\n            bi_buf = 0;\n            bi_valid = 0;\n            last_eob_len = 8; // enough lookahead for inflate\n\n            // Initialize the first block of the first file:\n            _InitializeBlocks();\n        }\n\n        internal void _InitializeBlocks()\n        {\n            // Initialize the trees.\n            for (int i = 0; i < InternalConstants.L_CODES; i++)\n                dyn_ltree[i * 2] = 0;\n            for (int i = 0; i < InternalConstants.D_CODES; i++)\n                dyn_dtree[i * 2] = 0;\n            for (int i = 0; i < InternalConstants.BL_CODES; i++)\n                bl_tree[i * 2] = 0;\n\n            dyn_ltree[END_BLOCK * 2] = 1;\n            opt_len = static_len = 0;\n            last_lit = matches = 0;\n        }\n\n        // Restore the heap property by moving down the tree starting at node k,\n        // exchanging a node with the smallest of its two sons if necessary, stopping\n        // when the heap property is re-established (each father smaller than its\n        // two sons).\n        internal void pqdownheap(short[] tree, int k)\n        {\n            int v = heap[k];\n            int j = k << 1; // left son of k\n            while (j <= heap_len)\n            {\n                // Set j to the smallest of the two sons:\n                if (j < heap_len && _IsSmaller(tree, heap[j + 1], heap[j], depth))\n                {\n                    j++;\n                }\n                // Exit if v is smaller than both sons\n                if (_IsSmaller(tree, v, heap[j], depth))\n                    break;\n\n                // Exchange v with the smallest son\n                heap[k] = heap[j]; k = j;\n                // And continue down the tree, setting j to the left son of k\n                j <<= 1;\n            }\n            heap[k] = v;\n        }\n\n        internal static bool _IsSmaller(short[] tree, int n, int m, sbyte[] depth)\n        {\n            short tn2 = tree[n * 2];\n            short tm2 = tree[m * 2];\n            return (tn2 < tm2 || (tn2 == tm2 && depth[n] <= depth[m]));\n        }\n\n\n        // Scan a literal or distance tree to determine the frequencies of the codes\n        // in the bit length tree.\n        internal void scan_tree(short[] tree, int max_code)\n        {\n            int n; // iterates over all tree elements\n            int prevlen = -1; // last emitted length\n            int curlen; // length of current code\n            int nextlen = (int)tree[0 * 2 + 1]; // length of next code\n            int count = 0; // repeat count of the current code\n            int max_count = 7; // max repeat count\n            int min_count = 4; // min repeat count\n\n            if (nextlen == 0)\n            {\n                max_count = 138; min_count = 3;\n            }\n            tree[(max_code + 1) * 2 + 1] = (short)0x7fff; // guard //??\n\n            for (n = 0; n <= max_code; n++)\n            {\n                curlen = nextlen; nextlen = (int)tree[(n + 1) * 2 + 1];\n                if (++count < max_count && curlen == nextlen)\n                {\n                    continue;\n                }\n                else if (count < min_count)\n                {\n                    bl_tree[curlen * 2] = (short)(bl_tree[curlen * 2] + count);\n                }\n                else if (curlen != 0)\n                {\n                    if (curlen != prevlen)\n                        bl_tree[curlen * 2]++;\n                    bl_tree[InternalConstants.REP_3_6 * 2]++;\n                }\n                else if (count <= 10)\n                {\n                    bl_tree[InternalConstants.REPZ_3_10 * 2]++;\n                }\n                else\n                {\n                    bl_tree[InternalConstants.REPZ_11_138 * 2]++;\n                }\n                count = 0; prevlen = curlen;\n                if (nextlen == 0)\n                {\n                    max_count = 138; min_count = 3;\n                }\n                else if (curlen == nextlen)\n                {\n                    max_count = 6; min_count = 3;\n                }\n                else\n                {\n                    max_count = 7; min_count = 4;\n                }\n            }\n        }\n\n        // Construct the Huffman tree for the bit lengths and return the index in\n        // bl_order of the last bit length code to send.\n        internal int build_bl_tree()\n        {\n            int max_blindex; // index of last bit length code of non zero freq\n\n            // Determine the bit length frequencies for literal and distance trees\n            scan_tree(dyn_ltree, treeLiterals.max_code);\n            scan_tree(dyn_dtree, treeDistances.max_code);\n\n            // Build the bit length tree:\n            treeBitLengths.build_tree(this);\n            // opt_len now includes the length of the tree representations, except\n            // the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n\n            // Determine the number of bit length codes to send. The pkzip format\n            // requires that at least 4 bit length codes be sent. (appnote.txt says\n            // 3 but the actual value used is 4.)\n            for (max_blindex = InternalConstants.BL_CODES - 1; max_blindex >= 3; max_blindex--)\n            {\n                if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] != 0)\n                    break;\n            }\n            // Update opt_len to include the bit length tree and counts\n            opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n\n            return max_blindex;\n        }\n\n\n        // Send the header for a block using dynamic Huffman trees: the counts, the\n        // lengths of the bit length codes, the literal tree and the distance tree.\n        // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n        internal void send_all_trees(int lcodes, int dcodes, int blcodes)\n        {\n            int rank; // index in bl_order\n\n            send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt\n            send_bits(dcodes - 1, 5);\n            send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt\n            for (rank = 0; rank < blcodes; rank++)\n            {\n                send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3);\n            }\n            send_tree(dyn_ltree, lcodes - 1); // literal tree\n            send_tree(dyn_dtree, dcodes - 1); // distance tree\n        }\n\n        // Send a literal or distance tree in compressed form, using the codes in\n        // bl_tree.\n        internal void send_tree(short[] tree, int max_code)\n        {\n            int n;                           // iterates over all tree elements\n            int prevlen = -1;              // last emitted length\n            int curlen;                      // length of current code\n            int nextlen = tree[0 * 2 + 1]; // length of next code\n            int count = 0;               // repeat count of the current code\n            int max_count = 7;               // max repeat count\n            int min_count = 4;               // min repeat count\n\n            if (nextlen == 0)\n            {\n                max_count = 138; min_count = 3;\n            }\n\n            for (n = 0; n <= max_code; n++)\n            {\n                curlen = nextlen; nextlen = tree[(n + 1) * 2 + 1];\n                if (++count < max_count && curlen == nextlen)\n                {\n                    continue;\n                }\n                else if (count < min_count)\n                {\n                    do\n                    {\n                        send_code(curlen, bl_tree);\n                    }\n                    while (--count != 0);\n                }\n                else if (curlen != 0)\n                {\n                    if (curlen != prevlen)\n                    {\n                        send_code(curlen, bl_tree); count--;\n                    }\n                    send_code(InternalConstants.REP_3_6, bl_tree);\n                    send_bits(count - 3, 2);\n                }\n                else if (count <= 10)\n                {\n                    send_code(InternalConstants.REPZ_3_10, bl_tree);\n                    send_bits(count - 3, 3);\n                }\n                else\n                {\n                    send_code(InternalConstants.REPZ_11_138, bl_tree);\n                    send_bits(count - 11, 7);\n                }\n                count = 0; prevlen = curlen;\n                if (nextlen == 0)\n                {\n                    max_count = 138; min_count = 3;\n                }\n                else if (curlen == nextlen)\n                {\n                    max_count = 6; min_count = 3;\n                }\n                else\n                {\n                    max_count = 7; min_count = 4;\n                }\n            }\n        }\n\n        // Output a block of bytes on the stream.\n        // IN assertion: there is enough room in pending_buf.\n        private void put_bytes(byte[] p, int start, int len)\n        {\n            Array.Copy(p, start, pending, pendingCount, len);\n            pendingCount += len;\n        }\n\n#if NOTNEEDED\n        private void put_byte(byte c)\n        {\n            pending[pendingCount++] = c;\n        }\n        internal void put_short(int b)\n        {\n            unchecked\n            {\n                pending[pendingCount++] = (byte)b;\n                pending[pendingCount++] = (byte)(b >> 8);\n            }\n        }\n        internal void putShortMSB(int b)\n        {\n            unchecked\n            {\n                pending[pendingCount++] = (byte)(b >> 8);\n                pending[pendingCount++] = (byte)b;\n            }\n        }\n#endif\n\n        internal void send_code(int c, short[] tree)\n        {\n            int c2 = c * 2;\n            send_bits((tree[c2] & 0xffff), (tree[c2 + 1] & 0xffff));\n        }\n\n        internal void send_bits(int value, int length)\n        {\n            int len = length;\n            unchecked\n            {\n                if (bi_valid > (int)Buf_size - len)\n                {\n                    //int val = value;\n                    //      bi_buf |= (val << bi_valid);\n\n                    bi_buf |= (short)((value << bi_valid) & 0xffff);\n                    //put_short(bi_buf);\n                    pending[pendingCount++] = (byte)bi_buf;\n                    pending[pendingCount++] = (byte)(bi_buf >> 8);\n\n\n                    bi_buf = (short)((uint)value >> (Buf_size - bi_valid));\n                    bi_valid += len - Buf_size;\n                }\n                else\n                {\n                    //      bi_buf |= (value) << bi_valid;\n                    bi_buf |= (short)((value << bi_valid) & 0xffff);\n                    bi_valid += len;\n                }\n            }\n        }\n\n        // Send one empty static block to give enough lookahead for inflate.\n        // This takes 10 bits, of which 7 may remain in the bit buffer.\n        // The current inflate code requires 9 bits of lookahead. If the\n        // last two codes for the previous block (real code plus EOB) were coded\n        // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode\n        // the last real code. In this case we send two empty static blocks instead\n        // of one. (There are no problems if the previous block is stored or fixed.)\n        // To simplify the code, we assume the worst case of last real code encoded\n        // on one bit only.\n        internal void _tr_align()\n        {\n            send_bits(STATIC_TREES << 1, 3);\n            send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes);\n\n            bi_flush();\n\n            // Of the 10 bits for the empty block, we have already sent\n            // (10 - bi_valid) bits. The lookahead for the last real code (before\n            // the EOB of the previous block) was thus at least one plus the length\n            // of the EOB plus what we have just sent of the empty static block.\n            if (1 + last_eob_len + 10 - bi_valid < 9)\n            {\n                send_bits(STATIC_TREES << 1, 3);\n                send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes);\n                bi_flush();\n            }\n            last_eob_len = 7;\n        }\n\n\n        // Save the match info and tally the frequency counts. Return true if\n        // the current block must be flushed.\n        internal bool _tr_tally(int dist, int lc)\n        {\n            pending[_distanceOffset + last_lit * 2] = unchecked((byte)((uint)dist >> 8));\n            pending[_distanceOffset + last_lit * 2 + 1] = unchecked((byte)dist);\n            pending[_lengthOffset + last_lit] = unchecked((byte)lc);\n            last_lit++;\n\n            if (dist == 0)\n            {\n                // lc is the unmatched char\n                dyn_ltree[lc * 2]++;\n            }\n            else\n            {\n                matches++;\n                // Here, lc is the match length - MIN_MATCH\n                dist--; // dist = match distance - 1\n                dyn_ltree[(Tree.LengthCode[lc] + InternalConstants.LITERALS + 1) * 2]++;\n                dyn_dtree[Tree.DistanceCode(dist) * 2]++;\n            }\n\n            if ((last_lit & 0x1fff) == 0 && (int)compressionLevel > 2)\n            {\n                // Compute an upper bound for the compressed length\n                int out_length = last_lit << 3;\n                int in_length = strstart - block_start;\n                int dcode;\n                for (dcode = 0; dcode < InternalConstants.D_CODES; dcode++)\n                {\n                    out_length = (int)(out_length + (int)dyn_dtree[dcode * 2] * (5L + Tree.ExtraDistanceBits[dcode]));\n                }\n                out_length >>= 3;\n                if ((matches < (last_lit / 2)) && out_length < in_length / 2)\n                    return true;\n            }\n\n            return (last_lit == lit_bufsize - 1) || (last_lit == lit_bufsize);\n            // dinoch - wraparound?\n            // We avoid equality with lit_bufsize because of wraparound at 64K\n            // on 16 bit machines and because stored blocks are restricted to\n            // 64K-1 bytes.\n        }\n\n\n\n        // Send the block data compressed using the given Huffman trees\n        internal void send_compressed_block(short[] ltree, short[] dtree)\n        {\n            int distance; // distance of matched string\n            int lc;       // match length or unmatched char (if dist == 0)\n            int lx = 0;   // running index in l_buf\n            int code;     // the code to send\n            int extra;    // number of extra bits to send\n\n            if (last_lit != 0)\n            {\n                do\n                {\n                    int ix = _distanceOffset + lx * 2;\n                    distance = ((pending[ix] << 8) & 0xff00) |\n                        (pending[ix + 1] & 0xff);\n                    lc = (pending[_lengthOffset + lx]) & 0xff;\n                    lx++;\n\n                    if (distance == 0)\n                    {\n                        send_code(lc, ltree); // send a literal byte\n                    }\n                    else\n                    {\n                        // literal or match pair\n                        // Here, lc is the match length - MIN_MATCH\n                        code = Tree.LengthCode[lc];\n\n                        // send the length code\n                        send_code(code + InternalConstants.LITERALS + 1, ltree);\n                        extra = Tree.ExtraLengthBits[code];\n                        if (extra != 0)\n                        {\n                            // send the extra length bits\n                            lc -= Tree.LengthBase[code];\n                            send_bits(lc, extra);\n                        }\n                        distance--; // dist is now the match distance - 1\n                        code = Tree.DistanceCode(distance);\n\n                        // send the distance code\n                        send_code(code, dtree);\n\n                        extra = Tree.ExtraDistanceBits[code];\n                        if (extra != 0)\n                        {\n                            // send the extra distance bits\n                            distance -= Tree.DistanceBase[code];\n                            send_bits(distance, extra);\n                        }\n                    }\n\n                    // Check that the overlay between pending and d_buf+l_buf is ok:\n                }\n                while (lx < last_lit);\n            }\n\n            send_code(END_BLOCK, ltree);\n            last_eob_len = ltree[END_BLOCK * 2 + 1];\n        }\n\n\n\n        // Set the data type to ASCII or BINARY, using a crude approximation:\n        // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.\n        // IN assertion: the fields freq of dyn_ltree are set and the total of all\n        // frequencies does not exceed 64K (to fit in an int on 16 bit machines).\n        internal void set_data_type()\n        {\n            int n = 0;\n            int ascii_freq = 0;\n            int bin_freq = 0;\n            while (n < 7)\n            {\n                bin_freq += dyn_ltree[n * 2]; n++;\n            }\n            while (n < 128)\n            {\n                ascii_freq += dyn_ltree[n * 2]; n++;\n            }\n            while (n < InternalConstants.LITERALS)\n            {\n                bin_freq += dyn_ltree[n * 2]; n++;\n            }\n            data_type = (sbyte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII);\n        }\n\n\n\n        // Flush the bit buffer, keeping at most 7 bits in it.\n        internal void bi_flush()\n        {\n            if (bi_valid == 16)\n            {\n                pending[pendingCount++] = (byte)bi_buf;\n                pending[pendingCount++] = (byte)(bi_buf >> 8);\n                bi_buf = 0;\n                bi_valid = 0;\n            }\n            else if (bi_valid >= 8)\n            {\n                //put_byte((byte)bi_buf);\n                pending[pendingCount++] = (byte)bi_buf;\n                bi_buf >>= 8;\n                bi_valid -= 8;\n            }\n        }\n\n        // Flush the bit buffer and align the output on a byte boundary\n        internal void bi_windup()\n        {\n            if (bi_valid > 8)\n            {\n                pending[pendingCount++] = (byte)bi_buf;\n                pending[pendingCount++] = (byte)(bi_buf >> 8);\n            }\n            else if (bi_valid > 0)\n            {\n                //put_byte((byte)bi_buf);\n                pending[pendingCount++] = (byte)bi_buf;\n            }\n            bi_buf = 0;\n            bi_valid = 0;\n        }\n\n        // Copy a stored block, storing first the length and its\n        // one's complement if requested.\n        internal void copy_block(int buf, int len, bool header)\n        {\n            bi_windup(); // align on byte boundary\n            last_eob_len = 8; // enough lookahead for inflate\n\n            if (header)\n                unchecked\n                {\n                    //put_short((short)len);\n                    pending[pendingCount++] = (byte)len;\n                    pending[pendingCount++] = (byte)(len >> 8);\n                    //put_short((short)~len);\n                    pending[pendingCount++] = (byte)~len;\n                    pending[pendingCount++] = (byte)(~len >> 8);\n                }\n\n            put_bytes(window, buf, len);\n        }\n\n        internal void flush_block_only(bool eof)\n        {\n            _tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof);\n            block_start = strstart;\n            _codec.flush_pending();\n        }\n\n        // Copy without compression as much as possible from the input stream, return\n        // the current block state.\n        // This function does not insert new strings in the dictionary since\n        // uncompressible data is probably not useful. This function is used\n        // only for the level=0 compression option.\n        // NOTE: this function should be optimized to avoid extra copying from\n        // window to pending_buf.\n        internal BlockState DeflateNone(FlushType flush)\n        {\n            // Stored blocks are limited to 0xffff bytes, pending is limited\n            // to pending_buf_size, and each stored block has a 5 byte header:\n\n            int max_block_size = 0xffff;\n            int max_start;\n\n            if (max_block_size > pending.Length - 5)\n            {\n                max_block_size = pending.Length - 5;\n            }\n\n            // Copy as much as possible from input to output:\n            while (true)\n            {\n                // Fill the window as much as possible:\n                if (lookahead <= 1)\n                {\n                    _fillWindow();\n                    if (lookahead == 0 && flush == FlushType.None)\n                        return BlockState.NeedMore;\n                    if (lookahead == 0)\n                        break; // flush the current block\n                }\n\n                strstart += lookahead;\n                lookahead = 0;\n\n                // Emit a stored block if pending will be full:\n                max_start = block_start + max_block_size;\n                if (strstart == 0 || strstart >= max_start)\n                {\n                    // strstart == 0 is possible when wraparound on 16-bit machine\n                    lookahead = (int)(strstart - max_start);\n                    strstart = (int)max_start;\n\n                    flush_block_only(false);\n                    if (_codec.AvailableBytesOut == 0)\n                        return BlockState.NeedMore;\n                }\n\n                // Flush if we may have to slide, otherwise block_start may become\n                // negative and the data will be gone:\n                if (strstart - block_start >= w_size - MIN_LOOKAHEAD)\n                {\n                    flush_block_only(false);\n                    if (_codec.AvailableBytesOut == 0)\n                        return BlockState.NeedMore;\n                }\n            }\n\n            flush_block_only(flush == FlushType.Finish);\n            if (_codec.AvailableBytesOut == 0)\n                return (flush == FlushType.Finish) ? BlockState.FinishStarted : BlockState.NeedMore;\n\n            return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone;\n        }\n\n\n        // Send a stored block\n        internal void _tr_stored_block(int buf, int stored_len, bool eof)\n        {\n            send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type\n            copy_block(buf, stored_len, true); // with header\n        }\n\n        // Determine the best encoding for the current block: dynamic trees, static\n        // trees or store, and output the encoded block to the zip file.\n        internal void _tr_flush_block(int buf, int stored_len, bool eof)\n        {\n            int opt_lenb, static_lenb; // opt_len and static_len in bytes\n            int max_blindex = 0; // index of last bit length code of non zero freq\n\n            // Build the Huffman trees unless a stored block is forced\n            if (compressionLevel > 0)\n            {\n                // Check if the file is ascii or binary\n                if (data_type == Z_UNKNOWN)\n                    set_data_type();\n\n                // Construct the literal and distance trees\n                treeLiterals.build_tree(this);\n\n                treeDistances.build_tree(this);\n\n                // At this point, opt_len and static_len are the total bit lengths of\n                // the compressed block data, excluding the tree representations.\n\n                // Build the bit length tree for the above two trees, and get the index\n                // in bl_order of the last bit length code to send.\n                max_blindex = build_bl_tree();\n\n                // Determine the best encoding. Compute first the block length in bytes\n                opt_lenb = (opt_len + 3 + 7) >> 3;\n                static_lenb = (static_len + 3 + 7) >> 3;\n\n                if (static_lenb <= opt_lenb)\n                    opt_lenb = static_lenb;\n            }\n            else\n            {\n                opt_lenb = static_lenb = stored_len + 5; // force a stored block\n            }\n\n            if (stored_len + 4 <= opt_lenb && buf != -1)\n            {\n                // 4: two words for the lengths\n                // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n                // Otherwise we can't have processed more than WSIZE input bytes since\n                // the last block flush, because compression would have been\n                // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n                // transform a block into a stored block.\n                _tr_stored_block(buf, stored_len, eof);\n            }\n            else if (static_lenb == opt_lenb)\n            {\n                send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3);\n                send_compressed_block(StaticTree.lengthAndLiteralsTreeCodes, StaticTree.distTreeCodes);\n            }\n            else\n            {\n                send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3);\n                send_all_trees(treeLiterals.max_code + 1, treeDistances.max_code + 1, max_blindex + 1);\n                send_compressed_block(dyn_ltree, dyn_dtree);\n            }\n\n            // The above check is made mod 2^32, for files larger than 512 MB\n            // and uLong implemented on 32 bits.\n\n            _InitializeBlocks();\n\n            if (eof)\n            {\n                bi_windup();\n            }\n        }\n\n        // Fill the window when the lookahead becomes insufficient.\n        // Updates strstart and lookahead.\n        //\n        // IN assertion: lookahead < MIN_LOOKAHEAD\n        // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n        //    At least one byte has been read, or avail_in == 0; reads are\n        //    performed for at least two bytes (required for the zip translate_eol\n        //    option -- not supported here).\n        private void _fillWindow()\n        {\n            int n, m;\n            int p;\n            int more; // Amount of free space at the end of the window.\n\n            do\n            {\n                more = (window_size - lookahead - strstart);\n\n                // Deal with !@#$% 64K limit:\n                if (more == 0 && strstart == 0 && lookahead == 0)\n                {\n                    more = w_size;\n                }\n                else if (more == -1)\n                {\n                    // Very unlikely, but possible on 16 bit machine if strstart == 0\n                    // and lookahead == 1 (input done one byte at time)\n                    more--;\n\n                    // If the window is almost full and there is insufficient lookahead,\n                    // move the upper half to the lower one to make room in the upper half.\n                }\n                else if (strstart >= w_size + w_size - MIN_LOOKAHEAD)\n                {\n                    Array.Copy(window, w_size, window, 0, w_size);\n                    match_start -= w_size;\n                    strstart -= w_size; // we now have strstart >= MAX_DIST\n                    block_start -= w_size;\n\n                    // Slide the hash table (could be avoided with 32 bit values\n                    // at the expense of memory usage). We slide even when level == 0\n                    // to keep the hash table consistent if we switch back to level > 0\n                    // later. (Using level 0 permanently is not an optimal usage of\n                    // zlib, so we don't care about this pathological case.)\n\n                    n = hash_size;\n                    p = n;\n                    do\n                    {\n                        m = (head[--p] & 0xffff);\n                        head[p] = (short)((m >= w_size) ? (m - w_size) : 0);\n                    }\n                    while (--n != 0);\n\n                    n = w_size;\n                    p = n;\n                    do\n                    {\n                        m = (prev[--p] & 0xffff);\n                        prev[p] = (short)((m >= w_size) ? (m - w_size) : 0);\n                        // If n is not on any hash chain, prev[n] is garbage but\n                        // its value will never be used.\n                    }\n                    while (--n != 0);\n                    more += w_size;\n                }\n\n                if (_codec.AvailableBytesIn == 0)\n                    return;\n\n                // If there was no sliding:\n                //    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n                //    more == window_size - lookahead - strstart\n                // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n                // => more >= window_size - 2*WSIZE + 2\n                // In the BIG_MEM or MMAP case (not yet supported),\n                //   window_size == input_size + MIN_LOOKAHEAD  &&\n                //   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n                // Otherwise, window_size == 2*WSIZE so more >= 2.\n                // If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n\n                n = _codec.read_buf(window, strstart + lookahead, more);\n                lookahead += n;\n\n                // Initialize the hash value now that we have some input:\n                if (lookahead >= MIN_MATCH)\n                {\n                    ins_h = window[strstart] & 0xff;\n                    ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask;\n                }\n                // If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n                // but this is not important since only literal bytes will be emitted.\n            }\n            while (lookahead < MIN_LOOKAHEAD && _codec.AvailableBytesIn != 0);\n        }\n\n        // Compress as much as possible from the input stream, return the current\n        // block state.\n        // This function does not perform lazy evaluation of matches and inserts\n        // new strings in the dictionary only for unmatched strings or for short\n        // matches. It is used only for the fast compression options.\n        internal BlockState DeflateFast(FlushType flush)\n        {\n            //    short hash_head = 0; // head of the hash chain\n            int hash_head = 0; // head of the hash chain\n            bool bflush; // set if current block must be flushed\n\n            while (true)\n            {\n                // Make sure that we always have enough lookahead, except\n                // at the end of the input file. We need MAX_MATCH bytes\n                // for the next match, plus MIN_MATCH bytes to insert the\n                // string following the next match.\n                if (lookahead < MIN_LOOKAHEAD)\n                {\n                    _fillWindow();\n                    if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None)\n                    {\n                        return BlockState.NeedMore;\n                    }\n                    if (lookahead == 0)\n                        break; // flush the current block\n                }\n\n                // Insert the string window[strstart .. strstart+2] in the\n                // dictionary, and set hash_head to the head of the hash chain:\n                if (lookahead >= MIN_MATCH)\n                {\n                    ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n\n                    //  prev[strstart&w_mask]=hash_head=head[ins_h];\n                    hash_head = (head[ins_h] & 0xffff);\n                    prev[strstart & w_mask] = head[ins_h];\n                    head[ins_h] = unchecked((short)strstart);\n                }\n\n                // Find the longest match, discarding those <= prev_length.\n                // At this point we have always match_length < MIN_MATCH\n\n                if (hash_head != 0L && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD)\n                {\n                    // To simplify the code, we prevent matches with the string\n                    // of window index 0 (in particular we have to avoid a match\n                    // of the string with itself at the start of the input file).\n                    if (compressionStrategy != CompressionStrategy.HuffmanOnly)\n                    {\n                        match_length = longest_match(hash_head);\n                    }\n                    // longest_match() sets match_start\n                }\n                if (match_length >= MIN_MATCH)\n                {\n                    //        check_match(strstart, match_start, match_length);\n\n                    bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH);\n\n                    lookahead -= match_length;\n\n                    // Insert new strings in the hash table only if the match length\n                    // is not too large. This saves time but degrades compression.\n                    if (match_length <= config.MaxLazy && lookahead >= MIN_MATCH)\n                    {\n                        match_length--; // string at strstart already in hash table\n                        do\n                        {\n                            strstart++;\n\n                            ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n                            //      prev[strstart&w_mask]=hash_head=head[ins_h];\n                            hash_head = (head[ins_h] & 0xffff);\n                            prev[strstart & w_mask] = head[ins_h];\n                            head[ins_h] = unchecked((short)strstart);\n\n                            // strstart never exceeds WSIZE-MAX_MATCH, so there are\n                            // always MIN_MATCH bytes ahead.\n                        }\n                        while (--match_length != 0);\n                        strstart++;\n                    }\n                    else\n                    {\n                        strstart += match_length;\n                        match_length = 0;\n                        ins_h = window[strstart] & 0xff;\n\n                        ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask;\n                        // If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n                        // matter since it will be recomputed at next deflate call.\n                    }\n                }\n                else\n                {\n                    // No match, output a literal byte\n\n                    bflush = _tr_tally(0, window[strstart] & 0xff);\n                    lookahead--;\n                    strstart++;\n                }\n                if (bflush)\n                {\n                    flush_block_only(false);\n                    if (_codec.AvailableBytesOut == 0)\n                        return BlockState.NeedMore;\n                }\n            }\n\n            flush_block_only(flush == FlushType.Finish);\n            if (_codec.AvailableBytesOut == 0)\n            {\n                if (flush == FlushType.Finish)\n                    return BlockState.FinishStarted;\n                else\n                    return BlockState.NeedMore;\n            }\n            return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone;\n        }\n\n        // Same as above, but achieves better compression. We use a lazy\n        // evaluation for matches: a match is finally adopted only if there is\n        // no better match at the next window position.\n        internal BlockState DeflateSlow(FlushType flush)\n        {\n            //    short hash_head = 0;    // head of hash chain\n            int hash_head = 0; // head of hash chain\n            bool bflush; // set if current block must be flushed\n\n            // Process the input block.\n            while (true)\n            {\n                // Make sure that we always have enough lookahead, except\n                // at the end of the input file. We need MAX_MATCH bytes\n                // for the next match, plus MIN_MATCH bytes to insert the\n                // string following the next match.\n\n                if (lookahead < MIN_LOOKAHEAD)\n                {\n                    _fillWindow();\n                    if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None)\n                        return BlockState.NeedMore;\n\n                    if (lookahead == 0)\n                        break; // flush the current block\n                }\n\n                // Insert the string window[strstart .. strstart+2] in the\n                // dictionary, and set hash_head to the head of the hash chain:\n\n                if (lookahead >= MIN_MATCH)\n                {\n                    ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n                    //  prev[strstart&w_mask]=hash_head=head[ins_h];\n                    hash_head = (head[ins_h] & 0xffff);\n                    prev[strstart & w_mask] = head[ins_h];\n                    head[ins_h] = unchecked((short)strstart);\n                }\n\n                // Find the longest match, discarding those <= prev_length.\n                prev_length = match_length;\n                prev_match = match_start;\n                match_length = MIN_MATCH - 1;\n\n                if (hash_head != 0 && prev_length < config.MaxLazy &&\n                    ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD)\n                {\n                    // To simplify the code, we prevent matches with the string\n                    // of window index 0 (in particular we have to avoid a match\n                    // of the string with itself at the start of the input file).\n\n                    if (compressionStrategy != CompressionStrategy.HuffmanOnly)\n                    {\n                        match_length = longest_match(hash_head);\n                    }\n                    // longest_match() sets match_start\n\n                    if (match_length <= 5 && (compressionStrategy == CompressionStrategy.Filtered ||\n                                              (match_length == MIN_MATCH && strstart - match_start > 4096)))\n                    {\n\n                        // If prev_match is also MIN_MATCH, match_start is garbage\n                        // but we will ignore the current match anyway.\n                        match_length = MIN_MATCH - 1;\n                    }\n                }\n\n                // If there was a match at the previous step and the current\n                // match is not better, output the previous match:\n                if (prev_length >= MIN_MATCH && match_length <= prev_length)\n                {\n                    int max_insert = strstart + lookahead - MIN_MATCH;\n                    // Do not insert strings in hash table beyond this.\n\n                    //          check_match(strstart-1, prev_match, prev_length);\n\n                    bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH);\n\n                    // Insert in hash table all strings up to the end of the match.\n                    // strstart-1 and strstart are already inserted. If there is not\n                    // enough lookahead, the last two strings are not inserted in\n                    // the hash table.\n                    lookahead -= (prev_length - 1);\n                    prev_length -= 2;\n                    do\n                    {\n                        if (++strstart <= max_insert)\n                        {\n                            ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n                            //prev[strstart&w_mask]=hash_head=head[ins_h];\n                            hash_head = (head[ins_h] & 0xffff);\n                            prev[strstart & w_mask] = head[ins_h];\n                            head[ins_h] = unchecked((short)strstart);\n                        }\n                    }\n                    while (--prev_length != 0);\n                    match_available = 0;\n                    match_length = MIN_MATCH - 1;\n                    strstart++;\n\n                    if (bflush)\n                    {\n                        flush_block_only(false);\n                        if (_codec.AvailableBytesOut == 0)\n                            return BlockState.NeedMore;\n                    }\n                }\n                else if (match_available != 0)\n                {\n\n                    // If there was no match at the previous position, output a\n                    // single literal. If there was a match but the current match\n                    // is longer, truncate the previous match to a single literal.\n\n                    bflush = _tr_tally(0, window[strstart - 1] & 0xff);\n\n                    if (bflush)\n                    {\n                        flush_block_only(false);\n                    }\n                    strstart++;\n                    lookahead--;\n                    if (_codec.AvailableBytesOut == 0)\n                        return BlockState.NeedMore;\n                }\n                else\n                {\n                    // There is no previous match to compare with, wait for\n                    // the next step to decide.\n\n                    match_available = 1;\n                    strstart++;\n                    lookahead--;\n                }\n            }\n\n            if (match_available != 0)\n            {\n                bflush = _tr_tally(0, window[strstart - 1] & 0xff);\n                match_available = 0;\n            }\n            flush_block_only(flush == FlushType.Finish);\n\n            if (_codec.AvailableBytesOut == 0)\n            {\n                if (flush == FlushType.Finish)\n                    return BlockState.FinishStarted;\n                else\n                    return BlockState.NeedMore;\n            }\n\n            return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone;\n        }\n\n\n        internal int longest_match(int cur_match)\n        {\n            int chain_length = config.MaxChainLength; // max hash chain length\n            int scan = strstart;              // current string\n            int match;                                // matched string\n            int len;                                  // length of current match\n            int best_len = prev_length;           // best match length so far\n            int limit = strstart > (w_size - MIN_LOOKAHEAD) ? strstart - (w_size - MIN_LOOKAHEAD) : 0;\n\n            int niceLength = config.NiceLength;\n\n            // Stop when cur_match becomes <= limit. To simplify the code,\n            // we prevent matches with the string of window index 0.\n\n            int wmask = w_mask;\n\n            int strend = strstart + MAX_MATCH;\n            byte scan_end1 = window[scan + best_len - 1];\n            byte scan_end = window[scan + best_len];\n\n            // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n            // It is easy to get rid of this optimization if necessary.\n\n            // Do not waste too much time if we already have a good match:\n            if (prev_length >= config.GoodLength)\n            {\n                chain_length >>= 2;\n            }\n\n            // Do not look for matches beyond the end of the input. This is necessary\n            // to make deflate deterministic.\n            if (niceLength > lookahead)\n                niceLength = lookahead;\n\n            do\n            {\n                match = cur_match;\n\n                // Skip to next match if the match length cannot increase\n                // or if the match length is less than 2:\n                if (window[match + best_len] != scan_end ||\n                    window[match + best_len - 1] != scan_end1 ||\n                    window[match] != window[scan] ||\n                    window[++match] != window[scan + 1])\n                    continue;\n\n                // The check at best_len-1 can be removed because it will be made\n                // again later. (This heuristic is not always a win.)\n                // It is not necessary to compare scan[2] and match[2] since they\n                // are always equal when the other bytes match, given that\n                // the hash keys are equal and that HASH_BITS >= 8.\n                scan += 2; match++;\n\n                // We check for insufficient lookahead only every 8th comparison;\n                // the 256th check will be made at strstart+258.\n                do\n                {\n                }\n                while (window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] && scan < strend);\n\n                len = MAX_MATCH - (int)(strend - scan);\n                scan = strend - MAX_MATCH;\n\n                if (len > best_len)\n                {\n                    match_start = cur_match;\n                    best_len = len;\n                    if (len >= niceLength)\n                        break;\n                    scan_end1 = window[scan + best_len - 1];\n                    scan_end = window[scan + best_len];\n                }\n            }\n            while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length != 0);\n\n            if (best_len <= lookahead)\n                return best_len;\n            return lookahead;\n        }\n\n\n        private bool Rfc1950BytesEmitted = false;\n        private bool _WantRfc1950HeaderBytes = true;\n        internal bool WantRfc1950HeaderBytes\n        {\n            get { return _WantRfc1950HeaderBytes; }\n            set { _WantRfc1950HeaderBytes = value; }\n        }\n\n\n        internal int Initialize(ZlibCodec codec, CompressionLevel level)\n        {\n            return Initialize(codec, level, ZlibConstants.WindowBitsMax);\n        }\n\n        internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits)\n        {\n            return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, CompressionStrategy.Default);\n        }\n\n        internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits, CompressionStrategy compressionStrategy)\n        {\n            return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, compressionStrategy);\n        }\n\n        internal int Initialize(ZlibCodec codec, CompressionLevel level, int windowBits, int memLevel, CompressionStrategy strategy)\n        {\n            _codec = codec;\n            _codec.Message = null;\n\n            // validation\n            if (windowBits < 9 || windowBits > 15)\n                throw new ZlibException(\"windowBits must be in the range 9..15.\");\n\n            if (memLevel < 1 || memLevel > MEM_LEVEL_MAX)\n                throw new ZlibException(String.Format(\"memLevel must be in the range 1.. {0}\", MEM_LEVEL_MAX));\n\n            _codec.dstate = this;\n\n            w_bits = windowBits;\n            w_size = 1 << w_bits;\n            w_mask = w_size - 1;\n\n            hash_bits = memLevel + 7;\n            hash_size = 1 << hash_bits;\n            hash_mask = hash_size - 1;\n            hash_shift = ((hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n            window = new byte[w_size * 2];\n            prev = new short[w_size];\n            head = new short[hash_size];\n\n            // for memLevel==8, this will be 16384, 16k\n            lit_bufsize = 1 << (memLevel + 6);\n\n            // Use a single array as the buffer for data pending compression,\n            // the output distance codes, and the output length codes (aka tree).\n            // orig comment: This works just fine since the average\n            // output size for (length,distance) codes is <= 24 bits.\n            pending = new byte[lit_bufsize * 4];\n            _distanceOffset = lit_bufsize;\n            _lengthOffset = (1 + 2) * lit_bufsize;\n\n            // So, for memLevel 8, the length of the pending buffer is 65536. 64k.\n            // The first 16k are pending bytes.\n            // The middle slice, of 32k, is used for distance codes.\n            // The final 16k are length codes.\n\n            this.compressionLevel = level;\n            this.compressionStrategy = strategy;\n\n            Reset();\n            return ZlibConstants.Z_OK;\n        }\n\n\n        internal void Reset()\n        {\n            _codec.TotalBytesIn = _codec.TotalBytesOut = 0;\n            _codec.Message = null;\n            //strm.data_type = Z_UNKNOWN;\n\n            pendingCount = 0;\n            nextPending = 0;\n\n            Rfc1950BytesEmitted = false;\n\n            status = (WantRfc1950HeaderBytes) ? INIT_STATE : BUSY_STATE;\n            _codec._Adler32 = Adler.Adler32(0, null, 0, 0);\n\n            last_flush = (int)FlushType.None;\n\n            _InitializeTreeData();\n            _InitializeLazyMatch();\n        }\n\n\n        internal int End()\n        {\n            if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE)\n            {\n                return ZlibConstants.Z_STREAM_ERROR;\n            }\n            // Deallocate in reverse order of allocations:\n            pending = null;\n            head = null;\n            prev = null;\n            window = null;\n            // free\n            // dstate=null;\n            return status == BUSY_STATE ? ZlibConstants.Z_DATA_ERROR : ZlibConstants.Z_OK;\n        }\n\n\n        private void SetDeflater()\n        {\n            switch (config.Flavor)\n            {\n                case DeflateFlavor.Store:\n                    DeflateFunction = DeflateNone;\n                    break;\n                case DeflateFlavor.Fast:\n                    DeflateFunction = DeflateFast;\n                    break;\n                case DeflateFlavor.Slow:\n                    DeflateFunction = DeflateSlow;\n                    break;\n            }\n        }\n\n\n        internal int SetParams(CompressionLevel level, CompressionStrategy strategy)\n        {\n            int result = ZlibConstants.Z_OK;\n\n            if (compressionLevel != level)\n            {\n                Config newConfig = Config.Lookup(level);\n\n                // change in the deflate flavor (Fast vs slow vs none)?\n                if (newConfig.Flavor != config.Flavor && _codec.TotalBytesIn != 0)\n                {\n                    // Flush the last buffer:\n                    result = _codec.Deflate(FlushType.Partial);\n                }\n\n                compressionLevel = level;\n                config = newConfig;\n                SetDeflater();\n            }\n\n            // no need to flush with change in strategy?  Really?\n            compressionStrategy = strategy;\n\n            return result;\n        }\n\n\n        internal int SetDictionary(byte[] dictionary)\n        {\n            if (dictionary == null || status != INIT_STATE)\n                throw new ZlibException(\"Stream error.\");\n\n            int length = dictionary.Length;\n            int index = 0;\n\n            _codec._Adler32 = Adler.Adler32(_codec._Adler32, dictionary, 0, dictionary.Length);\n\n            if (length < MIN_MATCH)\n                return ZlibConstants.Z_OK;\n            if (length > w_size - MIN_LOOKAHEAD)\n            {\n                length = w_size - MIN_LOOKAHEAD;\n                index = dictionary.Length - length; // use the tail of the dictionary\n            }\n            Array.Copy(dictionary, index, window, 0, length);\n            strstart = length;\n            block_start = length;\n\n            // Insert all strings in the hash table (except for the last two bytes).\n            // s->lookahead stays null, so s->ins_h will be recomputed at the next\n            // call of fill_window.\n\n            ins_h = window[0] & 0xff;\n            ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask;\n\n            for (int n = 0; n <= length - MIN_MATCH; n++)\n            {\n                ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n                prev[n & w_mask] = head[ins_h];\n                head[ins_h] = (short)n;\n            }\n            return ZlibConstants.Z_OK;\n        }\n\n\n\n        internal int Deflate(FlushType flush)\n        {\n            int old_flush;\n\n            if (_codec.OutputBuffer == null ||\n                (_codec.InputBuffer == null && _codec.AvailableBytesIn != 0) ||\n                (status == FINISH_STATE && flush != FlushType.Finish))\n            {\n                _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_STREAM_ERROR)];\n                throw new ZlibException(String.Format(\"Something is fishy. [{0}]\", _codec.Message));\n            }\n            if (_codec.AvailableBytesOut == 0)\n            {\n                _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)];\n                throw new ZlibException(\"OutputBuffer is full (AvailableBytesOut == 0)\");\n            }\n\n            old_flush = last_flush;\n            last_flush = (int)flush;\n\n            // Write the zlib (rfc1950) header bytes\n            if (status == INIT_STATE)\n            {\n                int header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8;\n                int level_flags = (((int)compressionLevel - 1) & 0xff) >> 1;\n\n                if (level_flags > 3)\n                    level_flags = 3;\n                header |= (level_flags << 6);\n                if (strstart != 0)\n                    header |= PRESET_DICT;\n                header += 31 - (header % 31);\n\n                status = BUSY_STATE;\n                //putShortMSB(header);\n                unchecked\n                {\n                    pending[pendingCount++] = (byte)(header >> 8);\n                    pending[pendingCount++] = (byte)header;\n                }\n                // Save the adler32 of the preset dictionary:\n                if (strstart != 0)\n                {\n                    pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24);\n                    pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16);\n                    pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8);\n                    pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF);\n                }\n                _codec._Adler32 = Adler.Adler32(0, null, 0, 0);\n            }\n\n            // Flush as much pending output as possible\n            if (pendingCount != 0)\n            {\n                _codec.flush_pending();\n                if (_codec.AvailableBytesOut == 0)\n                {\n                    //System.out.println(\"  avail_out==0\");\n                    // Since avail_out is 0, deflate will be called again with\n                    // more output space, but possibly with both pending and\n                    // avail_in equal to zero. There won't be anything to do,\n                    // but this is not an error situation so make sure we\n                    // return OK instead of BUF_ERROR at next call of deflate:\n                    last_flush = -1;\n                    return ZlibConstants.Z_OK;\n                }\n\n                // Make sure there is something to do and avoid duplicate consecutive\n                // flushes. For repeated and useless calls with Z_FINISH, we keep\n                // returning Z_STREAM_END instead of Z_BUFF_ERROR.\n            }\n            else if (_codec.AvailableBytesIn == 0 &&\n                     (int)flush <= old_flush &&\n                     flush != FlushType.Finish)\n            {\n                // workitem 8557\n                //\n                // Not sure why this needs to be an error.  pendingCount == 0, which\n                // means there's nothing to deflate.  And the caller has not asked\n                // for a FlushType.Finish, but...  that seems very non-fatal.  We\n                // can just say \"OK\" and do nothing.\n\n                // _codec.Message = z_errmsg[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)];\n                // throw new ZlibException(\"AvailableBytesIn == 0 && flush<=old_flush && flush != FlushType.Finish\");\n\n                return ZlibConstants.Z_OK;\n            }\n\n            // User must not provide more input after the first FINISH:\n            if (status == FINISH_STATE && _codec.AvailableBytesIn != 0)\n            {\n                _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)];\n                throw new ZlibException(\"status == FINISH_STATE && _codec.AvailableBytesIn != 0\");\n            }\n\n            // Start a new block or continue the current one.\n            if (_codec.AvailableBytesIn != 0 || lookahead != 0 || (flush != FlushType.None && status != FINISH_STATE))\n            {\n                BlockState bstate = DeflateFunction(flush);\n\n                if (bstate == BlockState.FinishStarted || bstate == BlockState.FinishDone)\n                {\n                    status = FINISH_STATE;\n                }\n                if (bstate == BlockState.NeedMore || bstate == BlockState.FinishStarted)\n                {\n                    if (_codec.AvailableBytesOut == 0)\n                    {\n                        last_flush = -1; // avoid BUF_ERROR next call, see above\n                    }\n                    return ZlibConstants.Z_OK;\n                    // If flush != Z_NO_FLUSH && avail_out == 0, the next call\n                    // of deflate should use the same flush parameter to make sure\n                    // that the flush is complete. So we don't have to output an\n                    // empty block here, this will be done at next call. This also\n                    // ensures that for a very small output buffer, we emit at most\n                    // one empty block.\n                }\n\n                if (bstate == BlockState.BlockDone)\n                {\n                    if (flush == FlushType.Partial)\n                    {\n                        _tr_align();\n                    }\n                    else\n                    {\n                        // FlushType.Full or FlushType.Sync\n                        _tr_stored_block(0, 0, false);\n                        // For a full flush, this empty block will be recognized\n                        // as a special marker by inflate_sync().\n                        if (flush == FlushType.Full)\n                        {\n                            // clear hash (forget the history)\n                            for (int i = 0; i < hash_size; i++)\n                                head[i] = 0;\n                        }\n                    }\n                    _codec.flush_pending();\n                    if (_codec.AvailableBytesOut == 0)\n                    {\n                        last_flush = -1; // avoid BUF_ERROR at next call, see above\n                        return ZlibConstants.Z_OK;\n                    }\n                }\n            }\n\n            if (flush != FlushType.Finish)\n                return ZlibConstants.Z_OK;\n\n            if (!WantRfc1950HeaderBytes || Rfc1950BytesEmitted)\n                return ZlibConstants.Z_STREAM_END;\n\n            // Write the zlib trailer (adler32)\n            pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24);\n            pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16);\n            pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8);\n            pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF);\n            //putShortMSB((int)(SharedUtils.URShift(_codec._Adler32, 16)));\n            //putShortMSB((int)(_codec._Adler32 & 0xffff));\n\n            _codec.flush_pending();\n\n            // If avail_out is zero, the application will call deflate again\n            // to flush the rest.\n\n            Rfc1950BytesEmitted = true; // write the trailer only once!\n\n            return pendingCount != 0 ? ZlibConstants.Z_OK : ZlibConstants.Z_STREAM_END;\n        }\n\n    }\n\n    /// <summary>\n    ///   Computes a CRC-32. The CRC-32 algorithm is parameterized - you\n    ///   can set the polynomial and enable or disable bit\n    ///   reversal. This can be used for GZIP, BZip2, or ZIP.\n    /// </summary>\n    /// <remarks>\n    ///   This type is used internally by DotNetZip; it is generally not used\n    ///   directly by applications wishing to create, read, or manipulate zip\n    ///   archive files.\n    /// </remarks>\n\n    internal class CRC32\n    {\n        /// <summary>\n        ///   Indicates the total number of bytes applied to the CRC.\n        /// </summary>\n        internal Int64 TotalBytesRead\n        {\n            get\n            {\n                return _TotalBytesRead;\n            }\n        }\n\n        /// <summary>\n        /// Indicates the current CRC for all blocks slurped in.\n        /// </summary>\n        internal Int32 Crc32Result\n        {\n            get\n            {\n                return unchecked((Int32)(~_register));\n            }\n        }\n\n        /// <summary>\n        /// Returns the CRC32 for the specified stream.\n        /// </summary>\n        /// <param name=\"input\">The stream over which to calculate the CRC32</param>\n        /// <returns>the CRC32 calculation</returns>\n        internal Int32 GetCrc32(System.IO.Stream input)\n        {\n            return GetCrc32AndCopy(input, null);\n        }\n\n        /// <summary>\n        /// Returns the CRC32 for the specified stream, and writes the input into the\n        /// output stream.\n        /// </summary>\n        /// <param name=\"input\">The stream over which to calculate the CRC32</param>\n        /// <param name=\"output\">The stream into which to deflate the input</param>\n        /// <returns>the CRC32 calculation</returns>\n        internal Int32 GetCrc32AndCopy(System.IO.Stream input, System.IO.Stream output)\n        {\n            if (input == null)\n                throw new Exception(\"The input stream must not be null.\");\n\n            unchecked\n            {\n                byte[] buffer = new byte[BUFFER_SIZE];\n                int readSize = BUFFER_SIZE;\n\n                _TotalBytesRead = 0;\n                int count = input.Read(buffer, 0, readSize);\n                if (output != null) output.Write(buffer, 0, count);\n                _TotalBytesRead += count;\n                while (count > 0)\n                {\n                    SlurpBlock(buffer, 0, count);\n                    count = input.Read(buffer, 0, readSize);\n                    if (output != null) output.Write(buffer, 0, count);\n                    _TotalBytesRead += count;\n                }\n\n                return (Int32)(~_register);\n            }\n        }\n\n\n        /// <summary>\n        ///   Get the CRC32 for the given (word,byte) combo.  This is a\n        ///   computation defined by PKzip for PKZIP 2.0 (weak) encryption.\n        /// </summary>\n        /// <param name=\"W\">The word to start with.</param>\n        /// <param name=\"B\">The byte to combine it with.</param>\n        /// <returns>The CRC-ized result.</returns>\n        internal Int32 ComputeCrc32(Int32 W, byte B)\n        {\n            return _InternalComputeCrc32((UInt32)W, B);\n        }\n\n        internal Int32 _InternalComputeCrc32(UInt32 W, byte B)\n        {\n            return (Int32)(crc32Table[(W ^ B) & 0xFF] ^ (W >> 8));\n        }\n\n\n        /// <summary>\n        /// Update the value for the running CRC32 using the given block of bytes.\n        /// This is useful when using the CRC32() class in a Stream.\n        /// </summary>\n        /// <param name=\"block\">block of bytes to slurp</param>\n        /// <param name=\"offset\">starting point in the block</param>\n        /// <param name=\"count\">how many bytes within the block to slurp</param>\n        internal void SlurpBlock(byte[] block, int offset, int count)\n        {\n            if (block == null)\n                throw new Exception(\"The data buffer must not be null.\");\n\n            // bzip algorithm\n            for (int i = 0; i < count; i++)\n            {\n                int x = offset + i;\n                byte b = block[x];\n                if (this.reverseBits)\n                {\n                    UInt32 temp = (_register >> 24) ^ b;\n                    _register = (_register << 8) ^ crc32Table[temp];\n                }\n                else\n                {\n                    UInt32 temp = (_register & 0x000000FF) ^ b;\n                    _register = (_register >> 8) ^ crc32Table[temp];\n                }\n            }\n            _TotalBytesRead += count;\n        }\n\n\n        /// <summary>\n        ///   Process one byte in the CRC.\n        /// </summary>\n        /// <param name = \"b\">the byte to include into the CRC .  </param>\n        internal void UpdateCRC(byte b)\n        {\n            if (this.reverseBits)\n            {\n                UInt32 temp = (_register >> 24) ^ b;\n                _register = (_register << 8) ^ crc32Table[temp];\n            }\n            else\n            {\n                UInt32 temp = (_register & 0x000000FF) ^ b;\n                _register = (_register >> 8) ^ crc32Table[temp];\n            }\n        }\n\n        /// <summary>\n        ///   Process a run of N identical bytes into the CRC.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This method serves as an optimization for updating the CRC when a\n        ///     run of identical bytes is found. Rather than passing in a buffer of\n        ///     length n, containing all identical bytes b, this method accepts the\n        ///     byte value and the length of the (virtual) buffer - the length of\n        ///     the run.\n        ///   </para>\n        /// </remarks>\n        /// <param name = \"b\">the byte to include into the CRC.  </param>\n        /// <param name = \"n\">the number of times that byte should be repeated. </param>\n        internal void UpdateCRC(byte b, int n)\n        {\n            while (n-- > 0)\n            {\n                if (this.reverseBits)\n                {\n                    uint temp = (_register >> 24) ^ b;\n                    _register = (_register << 8) ^ crc32Table[(temp >= 0)\n                                                              ? temp\n                                                              : (temp + 256)];\n                }\n                else\n                {\n                    UInt32 temp = (_register & 0x000000FF) ^ b;\n                    _register = (_register >> 8) ^ crc32Table[(temp >= 0)\n                                                              ? temp\n                                                              : (temp + 256)];\n\n                }\n            }\n        }\n\n\n\n        private static uint ReverseBits(uint data)\n        {\n            unchecked\n            {\n                uint ret = data;\n                ret = (ret & 0x55555555) << 1 | (ret >> 1) & 0x55555555;\n                ret = (ret & 0x33333333) << 2 | (ret >> 2) & 0x33333333;\n                ret = (ret & 0x0F0F0F0F) << 4 | (ret >> 4) & 0x0F0F0F0F;\n                ret = (ret << 24) | ((ret & 0xFF00) << 8) | ((ret >> 8) & 0xFF00) | (ret >> 24);\n                return ret;\n            }\n        }\n\n        private static byte ReverseBits(byte data)\n        {\n            unchecked\n            {\n                uint u = (uint)data * 0x00020202;\n                uint m = 0x01044010;\n                uint s = u & m;\n                uint t = (u << 2) & (m << 1);\n                return (byte)((0x01001001 * (s + t)) >> 24);\n            }\n        }\n\n\n\n        private void GenerateLookupTable()\n        {\n            crc32Table = new UInt32[256];\n            unchecked\n            {\n                UInt32 dwCrc;\n                byte i = 0;\n                do\n                {\n                    dwCrc = i;\n                    for (byte j = 8; j > 0; j--)\n                    {\n                        if ((dwCrc & 1) == 1)\n                        {\n                            dwCrc = (dwCrc >> 1) ^ dwPolynomial;\n                        }\n                        else\n                        {\n                            dwCrc >>= 1;\n                        }\n                    }\n                    if (reverseBits)\n                    {\n                        crc32Table[ReverseBits(i)] = ReverseBits(dwCrc);\n                    }\n                    else\n                    {\n                        crc32Table[i] = dwCrc;\n                    }\n                    i++;\n                } while (i != 0);\n            }\n\n#if VERBOSE\n            Console.WriteLine();\n            Console.WriteLine(\"private static readonly UInt32[] crc32Table = {\");\n            for (int i = 0; i < crc32Table.Length; i+=4)\n            {\n                Console.Write(\"   \");\n                for (int j=0; j < 4; j++)\n                {\n                    Console.Write(\" 0x{0:X8}U,\", crc32Table[i+j]);\n                }\n                Console.WriteLine();\n            }\n            Console.WriteLine(\"};\");\n            Console.WriteLine();\n#endif\n        }\n\n\n        private uint gf2_matrix_times(uint[] matrix, uint vec)\n        {\n            uint sum = 0;\n            int i = 0;\n            while (vec != 0)\n            {\n                if ((vec & 0x01) == 0x01)\n                    sum ^= matrix[i];\n                vec >>= 1;\n                i++;\n            }\n            return sum;\n        }\n\n        private void gf2_matrix_square(uint[] square, uint[] mat)\n        {\n            for (int i = 0; i < 32; i++)\n                square[i] = gf2_matrix_times(mat, mat[i]);\n        }\n\n\n\n        /// <summary>\n        ///   Combines the given CRC32 value with the current running total.\n        /// </summary>\n        /// <remarks>\n        ///   This is useful when using a divide-and-conquer approach to\n        ///   calculating a CRC.  Multiple threads can each calculate a\n        ///   CRC32 on a segment of the data, and then combine the\n        ///   individual CRC32 values at the end.\n        /// </remarks>\n        /// <param name=\"crc\">the crc value to be combined with this one</param>\n        /// <param name=\"length\">the length of data the CRC value was calculated on</param>\n        internal void Combine(int crc, int length)\n        {\n            uint[] even = new uint[32];     // even-power-of-two zeros operator\n            uint[] odd = new uint[32];      // odd-power-of-two zeros operator\n\n            if (length == 0)\n                return;\n\n            uint crc1 = ~_register;\n            uint crc2 = (uint)crc;\n\n            // put operator for one zero bit in odd\n            odd[0] = this.dwPolynomial;  // the CRC-32 polynomial\n            uint row = 1;\n            for (int i = 1; i < 32; i++)\n            {\n                odd[i] = row;\n                row <<= 1;\n            }\n\n            // put operator for two zero bits in even\n            gf2_matrix_square(even, odd);\n\n            // put operator for four zero bits in odd\n            gf2_matrix_square(odd, even);\n\n            uint len2 = (uint)length;\n\n            // apply len2 zeros to crc1 (first square will put the operator for one\n            // zero byte, eight zero bits, in even)\n            do\n            {\n                // apply zeros operator for this bit of len2\n                gf2_matrix_square(even, odd);\n\n                if ((len2 & 1) == 1)\n                    crc1 = gf2_matrix_times(even, crc1);\n                len2 >>= 1;\n\n                if (len2 == 0)\n                    break;\n\n                // another iteration of the loop with odd and even swapped\n                gf2_matrix_square(odd, even);\n                if ((len2 & 1) == 1)\n                    crc1 = gf2_matrix_times(odd, crc1);\n                len2 >>= 1;\n\n\n            } while (len2 != 0);\n\n            crc1 ^= crc2;\n\n            _register = ~crc1;\n\n            //return (int) crc1;\n            return;\n        }\n\n\n        /// <summary>\n        ///   Create an instance of the CRC32 class using the default settings: no\n        ///   bit reversal, and a polynomial of 0xEDB88320.\n        /// </summary>\n        internal CRC32()\n            : this(false)\n        {\n        }\n\n        /// <summary>\n        ///   Create an instance of the CRC32 class, specifying whether to reverse\n        ///   data bits or not.\n        /// </summary>\n        /// <param name='reverseBits'>\n        ///   specify true if the instance should reverse data bits.\n        /// </param>\n        /// <remarks>\n        ///   <para>\n        ///     In the CRC-32 used by BZip2, the bits are reversed. Therefore if you\n        ///     want a CRC32 with compatibility with BZip2, you should pass true\n        ///     here. In the CRC-32 used by GZIP and PKZIP, the bits are not\n        ///     reversed; Therefore if you want a CRC32 with compatibility with\n        ///     those, you should pass false.\n        ///   </para>\n        /// </remarks>\n        internal CRC32(bool reverseBits) :\n            this(unchecked((int)0xEDB88320), reverseBits)\n        {\n        }\n\n\n        /// <summary>\n        ///   Create an instance of the CRC32 class, specifying the polynomial and\n        ///   whether to reverse data bits or not.\n        /// </summary>\n        /// <param name='polynomial'>\n        ///   The polynomial to use for the CRC, expressed in the reversed (LSB)\n        ///   format: the highest ordered bit in the polynomial value is the\n        ///   coefficient of the 0th power; the second-highest order bit is the\n        ///   coefficient of the 1 power, and so on. Expressed this way, the\n        ///   polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320.\n        /// </param>\n        /// <param name='reverseBits'>\n        ///   specify true if the instance should reverse data bits.\n        /// </param>\n        ///\n        /// <remarks>\n        ///   <para>\n        ///     In the CRC-32 used by BZip2, the bits are reversed. Therefore if you\n        ///     want a CRC32 with compatibility with BZip2, you should pass true\n        ///     here for the <c>reverseBits</c> parameter. In the CRC-32 used by\n        ///     GZIP and PKZIP, the bits are not reversed; Therefore if you want a\n        ///     CRC32 with compatibility with those, you should pass false for the\n        ///     <c>reverseBits</c> parameter.\n        ///   </para>\n        /// </remarks>\n        internal CRC32(int polynomial, bool reverseBits)\n        {\n            this.reverseBits = reverseBits;\n            this.dwPolynomial = (uint)polynomial;\n            this.GenerateLookupTable();\n        }\n\n        /// <summary>\n        ///   Reset the CRC-32 class - clear the CRC \"remainder register.\"\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Use this when employing a single instance of this class to compute\n        ///     multiple, distinct CRCs on multiple, distinct data blocks.\n        ///   </para>\n        /// </remarks>\n        internal void Reset()\n        {\n            _register = 0xFFFFFFFFU;\n        }\n\n        // private member vars\n        private UInt32 dwPolynomial;\n        private Int64 _TotalBytesRead;\n        private bool reverseBits;\n        private UInt32[] crc32Table;\n        private const int BUFFER_SIZE = 8192;\n        private UInt32 _register = 0xFFFFFFFFU;\n    }\n\n\n    /// <summary>\n    /// A Stream that calculates a CRC32 (a checksum) on all bytes read,\n    /// or on all bytes written.\n    /// </summary>\n    ///\n    /// <remarks>\n    /// <para>\n    /// This class can be used to verify the CRC of a ZipEntry when\n    /// reading from a stream, or to calculate a CRC when writing to a\n    /// stream.  The stream should be used to either read, or write, but\n    /// not both.  If you intermix reads and writes, the results are not\n    /// defined.\n    /// </para>\n    ///\n    /// <para>\n    /// This class is intended primarily for use internally by the\n    /// DotNetZip library.\n    /// </para>\n    /// </remarks>\n    internal class CrcCalculatorStream : System.IO.Stream, System.IDisposable\n    {\n        private static readonly Int64 UnsetLengthLimit = -99;\n\n        internal System.IO.Stream _innerStream;\n        private CRC32 _Crc32;\n        private Int64 _lengthLimit = -99;\n        private bool _leaveOpen;\n\n        /// <summary>\n        /// The default constructor.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Instances returned from this constructor will leave the underlying\n        ///     stream open upon Close().  The stream uses the default CRC32\n        ///     algorithm, which implies a polynomial of 0xEDB88320.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        internal CrcCalculatorStream(System.IO.Stream stream)\n            : this(true, CrcCalculatorStream.UnsetLengthLimit, stream, null)\n        {\n        }\n\n        /// <summary>\n        ///   The constructor allows the caller to specify how to handle the\n        ///   underlying stream at close.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The stream uses the default CRC32 algorithm, which implies a\n        ///     polynomial of 0xEDB88320.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        /// <param name=\"leaveOpen\">true to leave the underlying stream\n        /// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>\n        internal CrcCalculatorStream(System.IO.Stream stream, bool leaveOpen)\n            : this(leaveOpen, CrcCalculatorStream.UnsetLengthLimit, stream, null)\n        {\n        }\n\n        /// <summary>\n        ///   A constructor allowing the specification of the length of the stream\n        ///   to read.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The stream uses the default CRC32 algorithm, which implies a\n        ///     polynomial of 0xEDB88320.\n        ///   </para>\n        ///   <para>\n        ///     Instances returned from this constructor will leave the underlying\n        ///     stream open upon Close().\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        /// <param name=\"length\">The length of the stream to slurp</param>\n        internal CrcCalculatorStream(System.IO.Stream stream, Int64 length)\n            : this(true, length, stream, null)\n        {\n            if (length < 0)\n                throw new ArgumentException(\"length\");\n        }\n\n        /// <summary>\n        ///   A constructor allowing the specification of the length of the stream\n        ///   to read, as well as whether to keep the underlying stream open upon\n        ///   Close().\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The stream uses the default CRC32 algorithm, which implies a\n        ///     polynomial of 0xEDB88320.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        /// <param name=\"length\">The length of the stream to slurp</param>\n        /// <param name=\"leaveOpen\">true to leave the underlying stream\n        /// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>\n        internal CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen)\n            : this(leaveOpen, length, stream, null)\n        {\n            if (length < 0)\n                throw new ArgumentException(\"length\");\n        }\n\n        /// <summary>\n        ///   A constructor allowing the specification of the length of the stream\n        ///   to read, as well as whether to keep the underlying stream open upon\n        ///   Close(), and the CRC32 instance to use.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The stream uses the specified CRC32 instance, which allows the\n        ///     application to specify how the CRC gets calculated.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        /// <param name=\"length\">The length of the stream to slurp</param>\n        /// <param name=\"leaveOpen\">true to leave the underlying stream\n        /// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>\n        /// <param name=\"crc32\">the CRC32 instance to use to calculate the CRC32</param>\n        internal CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen,\n                                   CRC32 crc32)\n            : this(leaveOpen, length, stream, crc32)\n        {\n            if (length < 0)\n                throw new ArgumentException(\"length\");\n        }\n\n\n        // This ctor is private - no validation is done here.  This is to allow the use\n        // of a (specific) negative value for the _lengthLimit, to indicate that there\n        // is no length set.  So we validate the length limit in those ctors that use an\n        // explicit param, otherwise we don't validate, because it could be our special\n        // value.\n        private CrcCalculatorStream\n            (bool leaveOpen, Int64 length, System.IO.Stream stream, CRC32 crc32)\n            : base()\n        {\n            _innerStream = stream;\n            _Crc32 = crc32 ?? new CRC32();\n            _lengthLimit = length;\n            _leaveOpen = leaveOpen;\n        }\n\n\n        /// <summary>\n        ///   Gets the total number of bytes run through the CRC32 calculator.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   This is either the total number of bytes read, or the total number of\n        ///   bytes written, depending on the direction of this stream.\n        /// </remarks>\n        internal Int64 TotalBytesSlurped\n        {\n            get { return _Crc32.TotalBytesRead; }\n        }\n\n        /// <summary>\n        ///   Provides the current CRC for all blocks slurped in.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The running total of the CRC is kept as data is written or read\n        ///     through the stream.  read this property after all reads or writes to\n        ///     get an accurate CRC for the entire stream.\n        ///   </para>\n        /// </remarks>\n        internal Int32 Crc\n        {\n            get { return _Crc32.Crc32Result; }\n        }\n\n        /// <summary>\n        ///   Indicates whether the underlying stream will be left open when the\n        ///   <c>CrcCalculatorStream</c> is Closed.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Set this at any point before calling <see cref=\"Stream.Close\"/>.\n        ///   </para>\n        /// </remarks>\n        internal bool LeaveOpen\n        {\n            get { return _leaveOpen; }\n            set { _leaveOpen = value; }\n        }\n\n        /// <summary>\n        /// Read from the stream\n        /// </summary>\n        /// <param name=\"buffer\">the buffer to read</param>\n        /// <param name=\"offset\">the offset at which to start</param>\n        /// <param name=\"count\">the number of bytes to read</param>\n        /// <returns>the number of bytes actually read</returns>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            int bytesToRead = count;\n\n            // Need to limit the # of bytes returned, if the stream is intended to have\n            // a definite length.  This is especially useful when returning a stream for\n            // the uncompressed data directly to the application.  The app won't\n            // necessarily read only the UncompressedSize number of bytes.  For example\n            // wrapping the stream returned from OpenReader() into a StreadReader() and\n            // calling ReadToEnd() on it, We can \"over-read\" the zip data and get a\n            // corrupt string.  The length limits that, prevents that problem.\n\n            if (_lengthLimit != CrcCalculatorStream.UnsetLengthLimit)\n            {\n                if (_Crc32.TotalBytesRead >= _lengthLimit) return 0; // EOF\n                Int64 bytesRemaining = _lengthLimit - _Crc32.TotalBytesRead;\n                if (bytesRemaining < count) bytesToRead = (int)bytesRemaining;\n            }\n            int n = _innerStream.Read(buffer, offset, bytesToRead);\n            if (n > 0) _Crc32.SlurpBlock(buffer, offset, n);\n            return n;\n        }\n\n        /// <summary>\n        /// Write to the stream.\n        /// </summary>\n        /// <param name=\"buffer\">the buffer from which to write</param>\n        /// <param name=\"offset\">the offset at which to start writing</param>\n        /// <param name=\"count\">the number of bytes to write</param>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            if (count > 0) _Crc32.SlurpBlock(buffer, offset, count);\n            _innerStream.Write(buffer, offset, count);\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports reading.\n        /// </summary>\n        public override bool CanRead\n        {\n            get { return _innerStream.CanRead; }\n        }\n\n        /// <summary>\n        ///   Indicates whether the stream supports seeking.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Always returns false.\n        ///   </para>\n        /// </remarks>\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports writing.\n        /// </summary>\n        public override bool CanWrite\n        {\n            get { return _innerStream.CanWrite; }\n        }\n\n        /// <summary>\n        /// Flush the stream.\n        /// </summary>\n        public override void Flush()\n        {\n            _innerStream.Flush();\n        }\n\n        /// <summary>\n        ///   Returns the length of the underlying stream.\n        /// </summary>\n        public override long Length\n        {\n            get\n            {\n                if (_lengthLimit == CrcCalculatorStream.UnsetLengthLimit)\n                    return _innerStream.Length;\n                else return _lengthLimit;\n            }\n        }\n\n        /// <summary>\n        ///   The getter for this property returns the total bytes read.\n        ///   If you use the setter, it will throw\n        /// <see cref=\"NotSupportedException\"/>.\n        /// </summary>\n        public override long Position\n        {\n            get { return _Crc32.TotalBytesRead; }\n            set { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        /// Seeking is not supported on this stream. This method always throws\n        /// <see cref=\"NotSupportedException\"/>\n        /// </summary>\n        /// <param name=\"offset\">N/A</param>\n        /// <param name=\"origin\">N/A</param>\n        /// <returns>N/A</returns>\n        public override long Seek(long offset, System.IO.SeekOrigin origin)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// This method always throws\n        /// <see cref=\"NotSupportedException\"/>\n        /// </summary>\n        /// <param name=\"value\">N/A</param>\n        public override void SetLength(long value)\n        {\n            throw new NotSupportedException();\n        }\n\n\n        void IDisposable.Dispose()\n        {\n            base.Dispose();\n        }\n    }\n\n    /// <summary>\n    /// A custom encoding class that provides encoding capabilities for the\n    /// 'Western European (ISO)' encoding under Silverlight.<br/>\n    /// This class was generated by a tool. For more information, visit\n    /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator\n    /// </summary>\n    internal class Iso88591Encoding : Encoding\n    {\n        /// <summary>\n        /// Gets the name registered with the\n        /// Internet Assigned Numbers Authority (IANA) for the current encoding.\n        /// </summary>\n        /// <returns>\n        /// The IANA name for the current <see cref=\"System.Text.Encoding\"/>.\n        /// </returns>\n        public override string WebName\n        {\n            get\n            {\n                return \"iso-8859-1\";\n            }\n        }\n\n\n        private char? fallbackCharacter;\n\n        /// <summary>\n        /// A character that can be set in order to make the encoding class\n        /// more fault tolerant. If this property is set, the encoding class will\n        /// use this property instead of throwing an exception if an unsupported\n        /// byte value is being passed for decoding.\n        /// </summary>\n        public char? FallbackCharacter\n        {\n            get { return fallbackCharacter; }\n            set\n            {\n                fallbackCharacter = value;\n\n                if (value.HasValue && !charToByte.ContainsKey(value.Value))\n                {\n                    string msg = \"Cannot use the character [{0}] (int value {1}) as fallback value \"\n                    + \"- the fallback character itself is not supported by the encoding.\";\n                    msg = String.Format(msg, value.Value, (int)value.Value);\n                    throw new EncoderFallbackException(msg);\n                }\n\n                FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null;\n            }\n        }\n\n        /// <summary>\n        /// A byte value that corresponds to the <see cref=\"FallbackCharacter\"/>.\n        /// It is used in encoding scenarios in case an unsupported character is\n        /// being passed for encoding.\n        /// </summary>\n        public byte? FallbackByte { get; private set; }\n\n\n        public Iso88591Encoding()\n        {\n            FallbackCharacter = '?';\n        }\n\n        /// <summary>\n        /// Encodes a set of characters from the specified character array into the specified byte array.\n        /// </summary>\n        /// <returns>\n        /// The actual number of bytes written into <paramref name=\"bytes\"/>.\n        /// </returns>\n        /// <param name=\"chars\">The character array containing the set of characters to encode. \n        /// </param><param name=\"charIndex\">The index of the first character to encode. \n        /// </param><param name=\"charCount\">The number of characters to encode. \n        /// </param><param name=\"bytes\">The byte array to contain the resulting sequence of bytes.\n        /// </param><param name=\"byteIndex\">The index at which to start writing the resulting sequence of bytes. \n        /// </param>\n        public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)\n        {\n            return FallbackByte.HasValue\n                     ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex)\n                     : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex);\n        }\n\n\n        private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)\n        {\n            for (int i = 0; i < charCount; i++)\n            {\n                var character = chars[i + charIndex];\n                byte byteValue;\n                bool status = charToByte.TryGetValue(character, out byteValue);\n\n                bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value;\n            }\n\n            return charCount;\n        }\n\n        private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)\n        {\n            for (int i = 0; i < charCount; i++)\n            {\n                var character = chars[i + charIndex];\n                byte byteValue;\n                bool status = charToByte.TryGetValue(character, out byteValue);\n\n                if (!status)\n                {\n                    //throw exception\n                    string msg =\n                      \"The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead.\";\n                    msg = String.Format(msg, WebName, character, (int)character);\n                    throw new EncoderFallbackException(msg);\n                }\n\n                bytes[byteIndex + i] = byteValue;\n            }\n\n            return charCount;\n        }\n\n\n\n        /// <summary>\n        /// Decodes a sequence of bytes from the specified byte array into the specified character array.\n        /// </summary>\n        /// <returns>\n        /// The actual number of characters written into <paramref name=\"chars\"/>.\n        /// </returns>\n        /// <param name=\"bytes\">The byte array containing the sequence of bytes to decode. \n        /// </param><param name=\"byteIndex\">The index of the first byte to decode. \n        /// </param><param name=\"byteCount\">The number of bytes to decode. \n        /// </param><param name=\"chars\">The character array to contain the resulting set of characters. \n        /// </param><param name=\"charIndex\">The index at which to start writing the resulting set of characters. \n        /// </param>\n        public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)\n        {\n            return FallbackCharacter.HasValue\n                     ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex)\n                     : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex);\n        }\n\n\n        private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)\n        {\n            for (int i = 0; i < byteCount; i++)\n            {\n                byte lookupIndex = bytes[i + byteIndex];\n\n                //if the byte value is not in our lookup array, fall back to default character\n                char result = lookupIndex >= byteToChar.Length\n                                ? FallbackCharacter.Value\n                                : byteToChar[lookupIndex];\n\n                chars[charIndex + i] = result;\n            }\n\n            return byteCount;\n        }\n\n\n\n        private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)\n        {\n            for (int i = 0; i < byteCount; i++)\n            {\n                byte lookupIndex = bytes[i + byteIndex];\n                if (lookupIndex >= byteToChar.Length)\n                {\n                    //throw exception\n                    string msg = \"The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead.\";\n                    msg = String.Format(msg, WebName, lookupIndex);\n                    throw new EncoderFallbackException(msg);\n                }\n\n\n                chars[charIndex + i] = byteToChar[lookupIndex];\n            }\n\n            return byteCount;\n        }\n\n\n\n        /// <summary>\n        /// Calculates the number of bytes produced by encoding a set of characters\n        /// from the specified character array.\n        /// </summary>\n        /// <returns>\n        /// The number of bytes produced by encoding the specified characters. This class\n        /// always returns the value of <paramref name=\"count\"/>.\n        /// </returns>\n        public override int GetByteCount(char[] chars, int index, int count)\n        {\n            return count;\n        }\n\n\n        /// <summary>\n        /// Calculates the number of characters produced by decoding a sequence\n        /// of bytes from the specified byte array.\n        /// </summary>\n        /// <returns>\n        /// The number of characters produced by decoding the specified sequence of bytes. This class\n        /// always returns the value of <paramref name=\"count\"/>. \n        /// </returns>\n        public override int GetCharCount(byte[] bytes, int index, int count)\n        {\n            return count;\n        }\n\n\n        /// <summary>\n        /// Calculates the maximum number of bytes produced by encoding the specified number of characters.\n        /// </summary>\n        /// <returns>\n        /// The maximum number of bytes produced by encoding the specified number of characters. This\n        /// class always returns the value of <paramref name=\"charCount\"/>.\n        /// </returns>\n        /// <param name=\"charCount\">The number of characters to encode. \n        /// </param>\n        public override int GetMaxByteCount(int charCount)\n        {\n            return charCount;\n        }\n\n        /// <summary>\n        /// Calculates the maximum number of characters produced by decoding the specified number of bytes.\n        /// </summary>\n        /// <returns>\n        /// The maximum number of characters produced by decoding the specified number of bytes. This class\n        /// always returns the value of <paramref name=\"byteCount\"/>.\n        /// </returns>\n        /// <param name=\"byteCount\">The number of bytes to decode.</param> \n        public override int GetMaxCharCount(int byteCount)\n        {\n            return byteCount;\n        }\n\n\n        /// <summary>\n        /// Gets the number of characters that are supported by this encoding.\n        /// This property returns a maximum value of 256, as the encoding class\n        /// only supports single byte encodings (1 byte == 256 possible values).\n        /// </summary>\n        public static int CharacterCount\n        {\n            get { return byteToChar.Length; }\n        }\n\n        #region Character Table\n\n        /// <summary>\n        /// This table contains characters in an array. The index within the\n        /// array corresponds to the encoding's mapping of bytes to characters\n        /// (e.g. if a byte value of 5 is used to encode the character 'x', this\n        /// character will be stored at the array index 5.\n        /// </summary>\n        private static char[] byteToChar = new char[]\n        {\n          (char)0 /* byte 0 */  ,\n          (char)1 /* byte 1 */  ,\n          (char)2 /* byte 2 */  ,\n          (char)3 /* byte 3 */  ,\n          (char)4 /* byte 4 */  ,\n          (char)5 /* byte 5 */  ,\n          (char)6 /* byte 6 */  ,\n          (char)7 /* byte 7 */  ,\n          (char)8 /* byte 8 */  ,\n          (char)9 /* byte 9 */  ,\n          (char)10 /* byte 10 */  ,\n          (char)11 /* byte 11 */  ,\n          (char)12 /* byte 12 */  ,\n          (char)13 /* byte 13 */  ,\n          (char)14 /* byte 14 */  ,\n          (char)15 /* byte 15 */  ,\n          (char)16 /* byte 16 */  ,\n          (char)17 /* byte 17 */  ,\n          (char)18 /* byte 18 */  ,\n          (char)19 /* byte 19 */  ,\n          (char)20 /* byte 20 */  ,\n          (char)21 /* byte 21 */  ,\n          (char)22 /* byte 22 */  ,\n          (char)23 /* byte 23 */  ,\n          (char)24 /* byte 24 */  ,\n          (char)25 /* byte 25 */  ,\n          (char)26 /* byte 26 */  ,\n          (char)27 /* byte 27 */  ,\n          (char)28 /* byte 28 */  ,\n          (char)29 /* byte 29 */  ,\n          (char)30 /* byte 30 */  ,\n          (char)31 /* byte 31 */  ,\n          (char)32 /* byte 32 */  ,\n          (char)33 /* byte 33 */  ,\n          (char)34 /* byte 34 */  ,\n          (char)35 /* byte 35 */  ,\n          (char)36 /* byte 36 */  ,\n          (char)37 /* byte 37 */  ,\n          (char)38 /* byte 38 */  ,\n          (char)39 /* byte 39 */  ,\n          (char)40 /* byte 40 */  ,\n          (char)41 /* byte 41 */  ,\n          (char)42 /* byte 42 */  ,\n          (char)43 /* byte 43 */  ,\n          (char)44 /* byte 44 */  ,\n          (char)45 /* byte 45 */  ,\n          (char)46 /* byte 46 */  ,\n          (char)47 /* byte 47 */  ,\n          (char)48 /* byte 48 */  ,\n          (char)49 /* byte 49 */  ,\n          (char)50 /* byte 50 */  ,\n          (char)51 /* byte 51 */  ,\n          (char)52 /* byte 52 */  ,\n          (char)53 /* byte 53 */  ,\n          (char)54 /* byte 54 */  ,\n          (char)55 /* byte 55 */  ,\n          (char)56 /* byte 56 */  ,\n          (char)57 /* byte 57 */  ,\n          (char)58 /* byte 58 */  ,\n          (char)59 /* byte 59 */  ,\n          (char)60 /* byte 60 */  ,\n          (char)61 /* byte 61 */  ,\n          (char)62 /* byte 62 */  ,\n          (char)63 /* byte 63 */  ,\n          (char)64 /* byte 64 */  ,\n          (char)65 /* byte 65 */  ,\n          (char)66 /* byte 66 */  ,\n          (char)67 /* byte 67 */  ,\n          (char)68 /* byte 68 */  ,\n          (char)69 /* byte 69 */  ,\n          (char)70 /* byte 70 */  ,\n          (char)71 /* byte 71 */  ,\n          (char)72 /* byte 72 */  ,\n          (char)73 /* byte 73 */  ,\n          (char)74 /* byte 74 */  ,\n          (char)75 /* byte 75 */  ,\n          (char)76 /* byte 76 */  ,\n          (char)77 /* byte 77 */  ,\n          (char)78 /* byte 78 */  ,\n          (char)79 /* byte 79 */  ,\n          (char)80 /* byte 80 */  ,\n          (char)81 /* byte 81 */  ,\n          (char)82 /* byte 82 */  ,\n          (char)83 /* byte 83 */  ,\n          (char)84 /* byte 84 */  ,\n          (char)85 /* byte 85 */  ,\n          (char)86 /* byte 86 */  ,\n          (char)87 /* byte 87 */  ,\n          (char)88 /* byte 88 */  ,\n          (char)89 /* byte 89 */  ,\n          (char)90 /* byte 90 */  ,\n          (char)91 /* byte 91 */  ,\n          (char)92 /* byte 92 */  ,\n          (char)93 /* byte 93 */  ,\n          (char)94 /* byte 94 */  ,\n          (char)95 /* byte 95 */  ,\n          (char)96 /* byte 96 */  ,\n          (char)97 /* byte 97 */  ,\n          (char)98 /* byte 98 */  ,\n          (char)99 /* byte 99 */  ,\n          (char)100 /* byte 100 */  ,\n          (char)101 /* byte 101 */  ,\n          (char)102 /* byte 102 */  ,\n          (char)103 /* byte 103 */  ,\n          (char)104 /* byte 104 */  ,\n          (char)105 /* byte 105 */  ,\n          (char)106 /* byte 106 */  ,\n          (char)107 /* byte 107 */  ,\n          (char)108 /* byte 108 */  ,\n          (char)109 /* byte 109 */  ,\n          (char)110 /* byte 110 */  ,\n          (char)111 /* byte 111 */  ,\n          (char)112 /* byte 112 */  ,\n          (char)113 /* byte 113 */  ,\n          (char)114 /* byte 114 */  ,\n          (char)115 /* byte 115 */  ,\n          (char)116 /* byte 116 */  ,\n          (char)117 /* byte 117 */  ,\n          (char)118 /* byte 118 */  ,\n          (char)119 /* byte 119 */  ,\n          (char)120 /* byte 120 */  ,\n          (char)121 /* byte 121 */  ,\n          (char)122 /* byte 122 */  ,\n          (char)123 /* byte 123 */  ,\n          (char)124 /* byte 124 */  ,\n          (char)125 /* byte 125 */  ,\n          (char)126 /* byte 126 */  ,\n          (char)127 /* byte 127 */  ,\n          (char)128 /* byte 128 */  ,\n          (char)129 /* byte 129 */  ,\n          (char)130 /* byte 130 */  ,\n          (char)131 /* byte 131 */  ,\n          (char)132 /* byte 132 */  ,\n          (char)133 /* byte 133 */  ,\n          (char)134 /* byte 134 */  ,\n          (char)135 /* byte 135 */  ,\n          (char)136 /* byte 136 */  ,\n          (char)137 /* byte 137 */  ,\n          (char)138 /* byte 138 */  ,\n          (char)139 /* byte 139 */  ,\n          (char)140 /* byte 140 */  ,\n          (char)141 /* byte 141 */  ,\n          (char)142 /* byte 142 */  ,\n          (char)143 /* byte 143 */  ,\n          (char)144 /* byte 144 */  ,\n          (char)145 /* byte 145 */  ,\n          (char)146 /* byte 146 */  ,\n          (char)147 /* byte 147 */  ,\n          (char)148 /* byte 148 */  ,\n          (char)149 /* byte 149 */  ,\n          (char)150 /* byte 150 */  ,\n          (char)151 /* byte 151 */  ,\n          (char)152 /* byte 152 */  ,\n          (char)153 /* byte 153 */  ,\n          (char)154 /* byte 154 */  ,\n          (char)155 /* byte 155 */  ,\n          (char)156 /* byte 156 */  ,\n          (char)157 /* byte 157 */  ,\n          (char)158 /* byte 158 */  ,\n          (char)159 /* byte 159 */  ,\n          (char)160 /* byte 160 */  ,\n          (char)161 /* byte 161 */  ,\n          (char)162 /* byte 162 */  ,\n          (char)163 /* byte 163 */  ,\n          (char)164 /* byte 164 */  ,\n          (char)165 /* byte 165 */  ,\n          (char)166 /* byte 166 */  ,\n          (char)167 /* byte 167 */  ,\n          (char)168 /* byte 168 */  ,\n          (char)169 /* byte 169 */  ,\n          (char)170 /* byte 170 */  ,\n          (char)171 /* byte 171 */  ,\n          (char)172 /* byte 172 */  ,\n          (char)173 /* byte 173 */  ,\n          (char)174 /* byte 174 */  ,\n          (char)175 /* byte 175 */  ,\n          (char)176 /* byte 176 */  ,\n          (char)177 /* byte 177 */  ,\n          (char)178 /* byte 178 */  ,\n          (char)179 /* byte 179 */  ,\n          (char)180 /* byte 180 */  ,\n          (char)181 /* byte 181 */  ,\n          (char)182 /* byte 182 */  ,\n          (char)183 /* byte 183 */  ,\n          (char)184 /* byte 184 */  ,\n          (char)185 /* byte 185 */  ,\n          (char)186 /* byte 186 */  ,\n          (char)187 /* byte 187 */  ,\n          (char)188 /* byte 188 */  ,\n          (char)189 /* byte 189 */  ,\n          (char)190 /* byte 190 */  ,\n          (char)191 /* byte 191 */  ,\n          (char)192 /* byte 192 */  ,\n          (char)193 /* byte 193 */  ,\n          (char)194 /* byte 194 */  ,\n          (char)195 /* byte 195 */  ,\n          (char)196 /* byte 196 */  ,\n          (char)197 /* byte 197 */  ,\n          (char)198 /* byte 198 */  ,\n          (char)199 /* byte 199 */  ,\n          (char)200 /* byte 200 */  ,\n          (char)201 /* byte 201 */  ,\n          (char)202 /* byte 202 */  ,\n          (char)203 /* byte 203 */  ,\n          (char)204 /* byte 204 */  ,\n          (char)205 /* byte 205 */  ,\n          (char)206 /* byte 206 */  ,\n          (char)207 /* byte 207 */  ,\n          (char)208 /* byte 208 */  ,\n          (char)209 /* byte 209 */  ,\n          (char)210 /* byte 210 */  ,\n          (char)211 /* byte 211 */  ,\n          (char)212 /* byte 212 */  ,\n          (char)213 /* byte 213 */  ,\n          (char)214 /* byte 214 */  ,\n          (char)215 /* byte 215 */  ,\n          (char)216 /* byte 216 */  ,\n          (char)217 /* byte 217 */  ,\n          (char)218 /* byte 218 */  ,\n          (char)219 /* byte 219 */  ,\n          (char)220 /* byte 220 */  ,\n          (char)221 /* byte 221 */  ,\n          (char)222 /* byte 222 */  ,\n          (char)223 /* byte 223 */  ,\n          (char)224 /* byte 224 */  ,\n          (char)225 /* byte 225 */  ,\n          (char)226 /* byte 226 */  ,\n          (char)227 /* byte 227 */  ,\n          (char)228 /* byte 228 */  ,\n          (char)229 /* byte 229 */  ,\n          (char)230 /* byte 230 */  ,\n          (char)231 /* byte 231 */  ,\n          (char)232 /* byte 232 */  ,\n          (char)233 /* byte 233 */  ,\n          (char)234 /* byte 234 */  ,\n          (char)235 /* byte 235 */  ,\n          (char)236 /* byte 236 */  ,\n          (char)237 /* byte 237 */  ,\n          (char)238 /* byte 238 */  ,\n          (char)239 /* byte 239 */  ,\n          (char)240 /* byte 240 */  ,\n          (char)241 /* byte 241 */  ,\n          (char)242 /* byte 242 */  ,\n          (char)243 /* byte 243 */  ,\n          (char)244 /* byte 244 */  ,\n          (char)245 /* byte 245 */  ,\n          (char)246 /* byte 246 */  ,\n          (char)247 /* byte 247 */  ,\n          (char)248 /* byte 248 */  ,\n          (char)249 /* byte 249 */  ,\n          (char)250 /* byte 250 */  ,\n          (char)251 /* byte 251 */  ,\n          (char)252 /* byte 252 */  ,\n          (char)253 /* byte 253 */  ,\n          (char)254 /* byte 254 */  ,\n          (char)255 /* byte 255 */  \n        };\n\n        #endregion\n\n        #region Byte Lookup Dictionary\n\n        /// <summary>\n        /// This dictionary is used to resolve byte values for a given character.\n        /// </summary>\n        private static Dictionary<char, byte> charToByte = new Dictionary<char, byte>\n        {\n          { (char)0, 0 },\n          { (char)1, 1 },\n          { (char)2, 2 },\n          { (char)3, 3 },\n          { (char)4, 4 },\n          { (char)5, 5 },\n          { (char)6, 6 },\n          { (char)7, 7 },\n          { (char)8, 8 },\n          { (char)9, 9 },\n          { (char)10, 10 },\n          { (char)11, 11 },\n          { (char)12, 12 },\n          { (char)13, 13 },\n          { (char)14, 14 },\n          { (char)15, 15 },\n          { (char)16, 16 },\n          { (char)17, 17 },\n          { (char)18, 18 },\n          { (char)19, 19 },\n          { (char)20, 20 },\n          { (char)21, 21 },\n          { (char)22, 22 },\n          { (char)23, 23 },\n          { (char)24, 24 },\n          { (char)25, 25 },\n          { (char)26, 26 },\n          { (char)27, 27 },\n          { (char)28, 28 },\n          { (char)29, 29 },\n          { (char)30, 30 },\n          { (char)31, 31 },\n          { (char)32, 32 },\n          { (char)33, 33 },\n          { (char)34, 34 },\n          { (char)35, 35 },\n          { (char)36, 36 },\n          { (char)37, 37 },\n          { (char)38, 38 },\n          { (char)39, 39 },\n          { (char)40, 40 },\n          { (char)41, 41 },\n          { (char)42, 42 },\n          { (char)43, 43 },\n          { (char)44, 44 },\n          { (char)45, 45 },\n          { (char)46, 46 },\n          { (char)47, 47 },\n          { (char)48, 48 },\n          { (char)49, 49 },\n          { (char)50, 50 },\n          { (char)51, 51 },\n          { (char)52, 52 },\n          { (char)53, 53 },\n          { (char)54, 54 },\n          { (char)55, 55 },\n          { (char)56, 56 },\n          { (char)57, 57 },\n          { (char)58, 58 },\n          { (char)59, 59 },\n          { (char)60, 60 },\n          { (char)61, 61 },\n          { (char)62, 62 },\n          { (char)63, 63 },\n          { (char)64, 64 },\n          { (char)65, 65 },\n          { (char)66, 66 },\n          { (char)67, 67 },\n          { (char)68, 68 },\n          { (char)69, 69 },\n          { (char)70, 70 },\n          { (char)71, 71 },\n          { (char)72, 72 },\n          { (char)73, 73 },\n          { (char)74, 74 },\n          { (char)75, 75 },\n          { (char)76, 76 },\n          { (char)77, 77 },\n          { (char)78, 78 },\n          { (char)79, 79 },\n          { (char)80, 80 },\n          { (char)81, 81 },\n          { (char)82, 82 },\n          { (char)83, 83 },\n          { (char)84, 84 },\n          { (char)85, 85 },\n          { (char)86, 86 },\n          { (char)87, 87 },\n          { (char)88, 88 },\n          { (char)89, 89 },\n          { (char)90, 90 },\n          { (char)91, 91 },\n          { (char)92, 92 },\n          { (char)93, 93 },\n          { (char)94, 94 },\n          { (char)95, 95 },\n          { (char)96, 96 },\n          { (char)97, 97 },\n          { (char)98, 98 },\n          { (char)99, 99 },\n          { (char)100, 100 },\n          { (char)101, 101 },\n          { (char)102, 102 },\n          { (char)103, 103 },\n          { (char)104, 104 },\n          { (char)105, 105 },\n          { (char)106, 106 },\n          { (char)107, 107 },\n          { (char)108, 108 },\n          { (char)109, 109 },\n          { (char)110, 110 },\n          { (char)111, 111 },\n          { (char)112, 112 },\n          { (char)113, 113 },\n          { (char)114, 114 },\n          { (char)115, 115 },\n          { (char)116, 116 },\n          { (char)117, 117 },\n          { (char)118, 118 },\n          { (char)119, 119 },\n          { (char)120, 120 },\n          { (char)121, 121 },\n          { (char)122, 122 },\n          { (char)123, 123 },\n          { (char)124, 124 },\n          { (char)125, 125 },\n          { (char)126, 126 },\n          { (char)127, 127 },\n          { (char)128, 128 },\n          { (char)129, 129 },\n          { (char)130, 130 },\n          { (char)131, 131 },\n          { (char)132, 132 },\n          { (char)133, 133 },\n          { (char)134, 134 },\n          { (char)135, 135 },\n          { (char)136, 136 },\n          { (char)137, 137 },\n          { (char)138, 138 },\n          { (char)139, 139 },\n          { (char)140, 140 },\n          { (char)141, 141 },\n          { (char)142, 142 },\n          { (char)143, 143 },\n          { (char)144, 144 },\n          { (char)145, 145 },\n          { (char)146, 146 },\n          { (char)147, 147 },\n          { (char)148, 148 },\n          { (char)149, 149 },\n          { (char)150, 150 },\n          { (char)151, 151 },\n          { (char)152, 152 },\n          { (char)153, 153 },\n          { (char)154, 154 },\n          { (char)155, 155 },\n          { (char)156, 156 },\n          { (char)157, 157 },\n          { (char)158, 158 },\n          { (char)159, 159 },\n          { (char)160, 160 },\n          { (char)161, 161 },\n          { (char)162, 162 },\n          { (char)163, 163 },\n          { (char)164, 164 },\n          { (char)165, 165 },\n          { (char)166, 166 },\n          { (char)167, 167 },\n          { (char)168, 168 },\n          { (char)169, 169 },\n          { (char)170, 170 },\n          { (char)171, 171 },\n          { (char)172, 172 },\n          { (char)173, 173 },\n          { (char)174, 174 },\n          { (char)175, 175 },\n          { (char)176, 176 },\n          { (char)177, 177 },\n          { (char)178, 178 },\n          { (char)179, 179 },\n          { (char)180, 180 },\n          { (char)181, 181 },\n          { (char)182, 182 },\n          { (char)183, 183 },\n          { (char)184, 184 },\n          { (char)185, 185 },\n          { (char)186, 186 },\n          { (char)187, 187 },\n          { (char)188, 188 },\n          { (char)189, 189 },\n          { (char)190, 190 },\n          { (char)191, 191 },\n          { (char)192, 192 },\n          { (char)193, 193 },\n          { (char)194, 194 },\n          { (char)195, 195 },\n          { (char)196, 196 },\n          { (char)197, 197 },\n          { (char)198, 198 },\n          { (char)199, 199 },\n          { (char)200, 200 },\n          { (char)201, 201 },\n          { (char)202, 202 },\n          { (char)203, 203 },\n          { (char)204, 204 },\n          { (char)205, 205 },\n          { (char)206, 206 },\n          { (char)207, 207 },\n          { (char)208, 208 },\n          { (char)209, 209 },\n          { (char)210, 210 },\n          { (char)211, 211 },\n          { (char)212, 212 },\n          { (char)213, 213 },\n          { (char)214, 214 },\n          { (char)215, 215 },\n          { (char)216, 216 },\n          { (char)217, 217 },\n          { (char)218, 218 },\n          { (char)219, 219 },\n          { (char)220, 220 },\n          { (char)221, 221 },\n          { (char)222, 222 },\n          { (char)223, 223 },\n          { (char)224, 224 },\n          { (char)225, 225 },\n          { (char)226, 226 },\n          { (char)227, 227 },\n          { (char)228, 228 },\n          { (char)229, 229 },\n          { (char)230, 230 },\n          { (char)231, 231 },\n          { (char)232, 232 },\n          { (char)233, 233 },\n          { (char)234, 234 },\n          { (char)235, 235 },\n          { (char)236, 236 },\n          { (char)237, 237 },\n          { (char)238, 238 },\n          { (char)239, 239 },\n          { (char)240, 240 },\n          { (char)241, 241 },\n          { (char)242, 242 },\n          { (char)243, 243 },\n          { (char)244, 244 },\n          { (char)245, 245 },\n          { (char)246, 246 },\n          { (char)247, 247 },\n          { (char)248, 248 },\n          { (char)249, 249 },\n          { (char)250, 250 },\n          { (char)251, 251 },\n          { (char)252, 252 },\n          { (char)253, 253 },\n          { (char)254, 254 },\n          { (char)255, 255 }\n        };\n\n            #endregion\n        }\n}\n"
  },
  {
    "path": "Platforms/XR/.Android/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input.XR;\nusing Microsoft.Xna.Platform.XR;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n        IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        bool _isTrackFloorLevelEnabled = false;\n\n        HandsState _handsState;\n        HeadsetState _headsetState;\n\n\n        public override bool IsVRSupported\n        {\n            get { return false; }\n        }\n\n        public override bool IsARSupported\n        {\n            get { return false; }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return XRDeviceState.Disabled; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return _isTrackFloorLevelEnabled; }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n            : this(applicationName, game.Services)\n        {\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (graphics == null)\n                throw new ArgumentNullException(\"graphics\");\n\n            this._graphics = graphics;\n\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            return -1;\n        }\n\n        public override int BeginFrame()\n        {\n            return 0;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            return _headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            yield return XREye.None;\n        }\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            return null;\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            switch (eye)\n            {\n                case XREye.None:\n                case XREye.Left:\n                case XREye.Right:\n                    throw new NotImplementedException();\n\n                default: \n                    throw new ArgumentException(\"Eye\");\n            }\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            Debug.Assert(null == rt);\n\n            return;\n        }\n\n        public override int EndFrame()\n        {\n            return 0;\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return _handsState;\n        }\n\n        public override void EndSessionAsync()\n        {\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            if (enable == true)\n            {\n                throw new NotImplementedException();\n            }\n            else\n            {\n                _isTrackFloorLevelEnabled = enable;\n            }\n        }\n\n\n        internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport)\n        {\n            controllerType = (TouchControllerType)0;\n            gamePadType = GamePadType.Unknown;\n            displayName = String.Empty;\n            identifier = String.Empty;\n            isConnected = false;\n\n            buttons = default(Buttons);\n            hasLeftVibrationMotor = false;\n            hasRightVibrationMotor = false;\n            hasVoiceSupport = false;\n        }\n\n        internal GamePadState GetGamePadState(TouchControllerType controllerType)\n        {\n            return default(GamePadState);\n        }\n\n        internal bool SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            bool result = false;\n\n            return result;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/XR/.Android/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.BlazorGL/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input.XR;\nusing Microsoft.Xna.Platform.XR;\nusing nkast.Wasm.Canvas.WebGL;\nusing nkast.Wasm.Dom;\nusing nkast.Wasm.Input;\nusing nkast.Wasm.XR;\nusing WebXREye = nkast.Wasm.XR.XREye;\nusing SysNumerics = System.Numerics;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n        Game _game;\n        IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        XRDeviceState _deviceState;\n        bool _isTrackFloorLevelEnabled = false;\n\n        private bool? _isVRSupported;\n        private bool? _isARSupported;\n\n        XRSystem _xr;\n        XRSession _xrsession;\n        XRReferenceSpace _localSpace;\n        XRReferenceSpace _localFloorSpace;\n        Task<XRReferenceSpace> _createLocalFloorSpaceTask;\n        XRWebGLLayer _glLayer;\n\n        int _xrAnimationHandle;\n        bool _xrInAnimationFrame;\n\n        HandsState _handsState;\n\n        public override bool IsVRSupported\n        {\n            get { return _isVRSupported.GetValueOrDefault(); }\n        }\n\n        public override bool IsARSupported\n        {\n            get { return _isARSupported.GetValueOrDefault(); }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return _deviceState; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return (_isTrackFloorLevelEnabled && _localFloorSpace != null); }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n        {\n            if (game == null)\n                throw new ArgumentNullException(\"game\");\n\n            IGraphicsDeviceService graphics = game.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (graphics == null)\n                throw new ArgumentNullException(\"graphics\");\n\n            this._game = game;\n            this._graphics = graphics;\n\n            this._xr = XRSystem.FromNavigator(Window.Current.Navigator);\n            if (this._xr == null)\n            {\n                _deviceState = XRDeviceState.Disabled;\n                return;\n            }\n\n            this._deviceState = XRDeviceState.InitializingDevice;\n            InitXRDeviceAsync();\n        }\n\n        private async void InitXRDeviceAsync()\n        {\n            this._isVRSupported = await _xr.IsSessionSupportedAsync(ModeToString(XRSessionMode.VR));\n            this._isARSupported = await _xr.IsSessionSupportedAsync(ModeToString(XRSessionMode.AR));\n                        \n            this._deviceState = XRDeviceState.Disabled;\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            throw new PlatformNotSupportedException(\"WebXR requires a Game reference.\");\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            if (this.DeviceState != XRDeviceState.Disabled\n            &&  this.DeviceState != XRDeviceState.NoPermissions)\n            {\n                return -1;\n            }\n\n            switch (sessionMode)\n            {\n                case XRSessionMode.VR:\n                    if (_isVRSupported == false)\n                        return -1; //throw new NotSupportedException(\"VR\");\n                    _deviceState = XRDeviceState.InitializingSession;\n                    InitXRSessionAsync(XRSessionMode.VR);\n                    break;\n\n                case XRSessionMode.AR:\n                    if (_isARSupported == false)\n                        return -1; //throw new NotSupportedException(\"AR\");\n                    _deviceState = XRDeviceState.InitializingSession;\n                    InitXRSessionAsync(XRSessionMode.AR);\n                    break;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n\n            return 0;\n        }\n\n        public override int BeginFrame()\n        {\n            return 0;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            return _headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            if (_currentXRFrame != null)\n            {\n                using (XRViewerPose viewerPose = _currentXRFrame.GetViewerPose(_localSpace))\n                {\n                    if (viewerPose != null)\n                    {\n                        foreach (XRView xrView in viewerPose.Views)\n                        {\n                            XREye viewEye = (XREye)xrView.Eye;\n                            yield return viewEye;\n                        }\n                        yield break;\n                    }\n                }\n            }\n\n            yield return XREye.None;\n        }\n\n\n        RenderTarget2D[] _rt = new RenderTarget2D[2];\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            RenderTarget2D rt;\n            int w = 0, h = 0;\n\n            XRWebGLLayer glLayer = _currentRenderState.BaseLayer;\n\n            using (XRViewerPose viewerPose = _currentXRFrame.GetViewerPose(_localSpace))\n            {\n                if (viewerPose != null)\n                {\n                    foreach (XRView xrView in viewerPose.Views)\n                    {\n                        if (eye == (XREye)xrView.Eye)\n                        {\n                            XRViewport xrViewport = glLayer.GetViewport(xrView);\n                            w = xrViewport.Width;\n                            h = xrViewport.Height;\n                        }\n                    }\n                }\n            }\n\n            if (w == 0)\n                return null;\n\n            int eyeIndex = (int)eye - 1;\n            if (eyeIndex == -1)\n                eyeIndex = 0;\n\n            if (_rt[eyeIndex] != null\n            && (_rt[eyeIndex].Width != w || _rt[eyeIndex].Height != h)\n            )\n            {\n                _rt[eyeIndex].Dispose();\n                _rt[eyeIndex] = null;\n            }\n\n            if (_rt[eyeIndex] == null)\n            {\n                _rt[eyeIndex] = new RenderTarget2D(_graphics.GraphicsDevice, w, h, false,\n                                              SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 4, RenderTargetUsage.PreserveContents);\n            }\n\n            return _rt[eyeIndex];\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            switch (eye)\n            {\n                case XREye.None: return CreateProjection(_lproj, znear, zfar);\n                case XREye.Left: return CreateProjection(_lproj, znear, zfar);\n                case XREye.Right: return CreateProjection(_rproj, znear, zfar);\n                default: throw new ArgumentException(\"Eye\");\n            }\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            int eyeIndex = (int)eye - 1;\n            if (eyeIndex == -1)\n                eyeIndex = 0;\n\n            Debug.Assert(_rt[eyeIndex] == rt);\n\n            return;\n        }\n\n        public override int EndFrame()\n        {\n            var graphicsDevice = _graphics.GraphicsDevice;\n            var GL = (IWebGL2RenderingContext)((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            XRWebGLLayer glLayer = _currentRenderState.BaseLayer;\n\n\n            using (XRViewerPose viewerPose = _currentXRFrame.GetViewerPose(_localSpace))\n            {\n                if (viewerPose != null)\n                {\n                    WebGLFramebuffer glFramebuffer = glLayer.Framebuffer;\n                    WebGLFramebuffer glDefaultFramebuffer = ((IPlatformGraphicsDevice)graphicsDevice).Strategy.ToConcrete<ConcreteGraphicsDevice>()._glDefaultFramebuffer;\n\n                    foreach (XRView xrView in viewerPose.Views)\n                    {\n                        WebXREye viewEye = xrView.Eye;\n                        int eye = (int)viewEye - 1;\n                        if (eye == -1)\n                            eye = 0;\n\n                        XRViewport xrViewport = glLayer.GetViewport(xrView);\n                        if (xrViewport.Width == 0)\n                            return 0;\n                        if (_rt[eye] == null)\n                            return 0;\n\n                        ConcreteTexture concreteTexture = ((IPlatformTexture)_rt[eye]).GetTextureStrategy<ConcreteTexture>();\n\n                        // copy rendertarget to glFramebuffer\n                        using (WebGLFramebuffer sourceFramebuffer = GL.CreateFramebuffer())\n                        {\n                            //unbind glDefaultFramebuffer \n                            GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, null);\n                            //GL.CheckGLError();\n\n                            if (glFramebuffer != null)\n                            {\n                                // bind DrawFramebuffer\n                                GL.BindFramebuffer(WebGL2FramebufferType.DRAW_FRAMEBUFFER, glFramebuffer);\n                                //GL.CheckGLError();\n                            }\n                            else\n                            {\n                                // bind DrawFramebuffer\n                                GL.BindFramebuffer(WebGL2FramebufferType.DRAW_FRAMEBUFFER, glDefaultFramebuffer);\n                                //GL.CheckGLError();\n                            }\n\n                            GL.BindFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, sourceFramebuffer);\n                            //GL.CheckGLError();\n\n                            GL.FramebufferTexture2D(\n                                WebGL2FramebufferType.READ_FRAMEBUFFER,\n                                WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0,\n                                WebGLTextureTarget.TEXTURE_2D,\n                                concreteTexture._glTexture);\n                            //GL.CheckGLError();\n\n                            //CheckFramebufferStatus(WebGL2FramebufferType.DRAW_FRAMEBUFFER);\n                            //CheckFramebufferStatus(WebGL2FramebufferType.READ_FRAMEBUFFER);\n\n                            // copy and y-flip\n                            GL.BlitFramebuffer(0, 0, _rt[eye].Width, _rt[eye].Height,\n                                                xrViewport.X, xrViewport.Y + xrViewport.Height,\n                                                xrViewport.X + xrViewport.Width, xrViewport.Y,\n                                                WebGLBufferBits.COLOR, WebGLTexParam.NEAREST);\n                            //GL.CheckGLError();\n\n                            //GL.BindFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, sourceFramebuffer);\n                            GL.BindFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, null);\n                            //GL.CheckGLError();\n\n                            // unbind DrawFramebuffer\n                            GL.BindFramebuffer(WebGL2FramebufferType.DRAW_FRAMEBUFFER, null);\n                            //GL.CheckGLError();\n\n                            //rebind glDefaultFramebuffer \n                            GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glDefaultFramebuffer);\n                            //GL.CheckGLError();\n\n                            //CheckFramebufferStatus(WebGL2FramebufferType.DRAW_FRAMEBUFFER);\n                        }\n                    }\n                }\n            }\n\n            return 0;\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return _handsState;\n        }\n\n        public override void EndSessionAsync()\n        {\n            _xrsession.End();\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            if (enable == true)\n            {\n                _isTrackFloorLevelEnabled = enable;\n\n                if (_localFloorSpace == null)\n                {\n                    // create _localFloorSpace\n                    if (_createLocalFloorSpaceTask == null)\n                    {\n                        try\n                        {\n                            _createLocalFloorSpaceTask = _currentXRSession.RequestReferenceSpaceAsync(\"local-floor\");\n                            _createLocalFloorSpaceTask.ContinueWith((t) =>\n                            {\n                                if (_createLocalFloorSpaceTask.IsCompletedSuccessfully)\n                                {\n                                    _localFloorSpace = _createLocalFloorSpaceTask.Result;\n                                }\n                                _createLocalFloorSpaceTask = null;\n                            });\n                        }\n                        catch\n                        {\n                            /* local-floor not supported */\n                            _createLocalFloorSpaceTask = null;\n                        }\n                    }\n                }\n            }\n            else\n            {\n                _isTrackFloorLevelEnabled = enable;\n            }\n        }\n\n        private string ModeToString(XRSessionMode mode)\n        {\n            switch (mode)\n            {\n                case XRSessionMode.VR:\n                    return \"immersive-vr\";\n                case XRSessionMode.AR:\n                    return \"immersive-ar\";\n\n                default:\n                    throw new ArgumentException(\"mode\");\n            }\n            throw new NotImplementedException();\n        }\n\n        private async void InitXRSessionAsync(XRSessionMode mode)\n        {\n            try\n            {\n                var graphicsDevice = _graphics.GraphicsDevice;\n                var GL = (IWebGL2RenderingContext) ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n                XRSessionOptions sessionOptions = default;\n                sessionOptions.RequiredFeatures |= XRSessionFeatures.Local;\n                sessionOptions.OptionalFeatures |= XRSessionFeatures.LocalFloor;\n                _xrsession = await _xr.RequestSessionAsync(ModeToString(mode), sessionOptions);\n                _xrsession.Ended += _xrsession_Ended;\n                _xrsession.InputSourcesChanged += _xrsession_InputSourcesChanged;\n                await GL.MakeXRCompatibleAsync();\n                _localSpace = await _xrsession.RequestReferenceSpaceAsync(\"local\");\n\n                XRWebGLLayerOptions glLayerOptions = new XRWebGLLayerOptions();\n                glLayerOptions.Antialias = false;\n                //glLayerOptions.Depth = true;\n                //glLayerOptions.IgnoreDepthValues = false;\n                _glLayer = new XRWebGLLayer(_xrsession, GL, glLayerOptions);\n\n                RenderStateAttributes attribs = new RenderStateAttributes();\n                attribs.BaseLayer = _glLayer;\n                _xrsession.UpdateRenderState(attribs);\n\n                TouchController.DeviceHandle = new ConcreteTouchController(this);\n\n                _sessionMode = mode;\n                _deviceState = XRDeviceState.Enabled;\n                ((IPlatformGame)_game).GetStrategy<ConcreteGame>()._suppressTick = true;\n                _xrAnimationHandle = _xrsession.RequestAnimationFrame(this.AnimationFrameCallback);\n            }\n            catch (UnauthorizedAccessException ex)\n            {\n                Console.WriteLine(\"InitXRSessionAsync failed with UnauthorizedAccessException. \" + ex.Message);\n                _deviceState = XRDeviceState.NoPermissions;\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine(\"InitXRSessionAsync failed. \" + ex.Message);\n                _deviceState = XRDeviceState.Disabled;\n                //throw;\n            }\n        }\n\n        private void _xrsession_Ended(object sender, EventArgs e)\n        {\n            XRSession xrSession = (XRSession)sender;\n            Debug.Assert(xrSession == _xrsession);\n\n            Console.WriteLine(\"_xrsession_Ended\");\n            _xrsession.CancelAnimationFrame(_xrAnimationHandle);\n            ((IPlatformGame)_game).GetStrategy<ConcreteGame>()._suppressTick = false;\n            _deviceState = XRDeviceState.Disabled;\n\n            TouchController.DeviceHandle = null;\n            _xrsession = null;\n            _localSpace = null;\n            _glLayer = null;\n        }\n\n        private void _xrsession_InputSourcesChanged(object sender, InputSourcesChangedEventArgs e)\n        {\n            Console.WriteLine(\"_xrsession_InputSourcesChanged\");\n        }\n\n        XRFrame _currentXRFrame;\n        XRSession _currentXRSession;\n        XRRenderState _currentRenderState;\n        \n        private HeadsetState _headsetState;\n        private Matrix _lproj;\n        private Matrix _rproj;\n\n        private void AnimationFrameCallback(TimeSpan time, XRFrame frame)\n        {\n            //Console.WriteLine(\"AnimationFrameCallback \" + time.TotalSeconds.ToString());\n\n            try\n            {\n                _currentXRFrame = frame;\n                _currentXRSession = _currentXRFrame.Session;\n                _currentRenderState = _currentXRSession.RenderState;\n\n                XRReferenceSpace referenceSpace = _localSpace;\n                if (_isTrackFloorLevelEnabled == true && _localFloorSpace != null)\n                    referenceSpace = _localFloorSpace;\n\n                // save Gamepad state\n                _lbuttons = null;\n                _laxes = null;\n                _rbuttons = null;\n                _raxes = null;\n                foreach (XRInputSource inputSource in _xrsession.InputSources)\n                {\n                    XRHandedness hand = inputSource.Handedness;\n                    Gamepad gamepad = inputSource.Gamepad;\n\n                    if (gamepad != null)\n                    {\n                        switch (hand)\n                        {\n                            case XRHandedness.Left:\n                                {\n                                    _lbuttons = gamepad.Buttons;\n                                    _laxes = gamepad.Axes;\n                                }\n                                break;\n                            case XRHandedness.Right:\n                                {\n                                    _rbuttons = gamepad.Buttons;\n                                    _raxes = gamepad.Axes;\n                                }\n                                break;\n                        }\n                    }\n\n                    XRRigidTransform gripPose = default;\n                    XRRigidTransform pointerPose = default;\n                    Vector4 pointerLinearVelocity = default;\n\n                    XRSpace gripSpace = inputSource.GripSpace;\n                    if (gripSpace != null)\n                    {\n                        using (XRPose grip = _currentXRFrame.GetPose(gripSpace, referenceSpace))\n                        {\n                            if (grip != null)\n                            {\n                                gripPose = grip.Transform;\n                            }\n                        }\n                    }\n\n                    XRSpace pointerSpace = inputSource.TargetRaySpace;\n                    if (pointerSpace != null)\n                    {\n                        using (XRPose pointer = _currentXRFrame.GetPose(pointerSpace, referenceSpace))\n                        {\n                            if (pointer != null)\n                            {\n                                pointerPose = pointer.Transform;\n                                pointerLinearVelocity = (Vector4)pointer.LinearVelocity.GetValueOrDefault();\n                            }\n                        }\n                    }\n\n                    switch (hand)\n                    {\n                        case XRHandedness.Left:\n                            {\n                                _handsState.LGripPose = gripPose.ToPose3();\n                                _handsState.LHandPose = pointerPose.ToPose3();\n                                _handsState.LHandLinearVelocity = new Vector3(pointerLinearVelocity.X, pointerLinearVelocity.Y, pointerLinearVelocity.Z);\n                            }\n                            break;\n                        case XRHandedness.Right:\n                            {\n                                _handsState.RGripPose = gripPose.ToPose3();\n                                _handsState.RHandPose = pointerPose.ToPose3();\n                                _handsState.RHandLinearVelocity = new Vector3(pointerLinearVelocity.X, pointerLinearVelocity.Y, pointerLinearVelocity.Z);\n                            }\n                            break;\n                    }\n                }\n\n                using (XRViewerPose xrViewerPose = _currentXRFrame.GetViewerPose(referenceSpace))\n                {\n                    if (xrViewerPose != null)\n                    {\n                        bool emulatedPosition = xrViewerPose.EmulatedPosition;\n                        SysNumerics.Vector4? angularVelocity = xrViewerPose.AngularVelocity;\n                        SysNumerics.Vector4? linearVelocity = xrViewerPose.LinearVelocity;\n                        XRRigidTransform viewerPose = xrViewerPose.Transform;\n\n                        XRWebGLLayer glLayer = _currentRenderState.BaseLayer;\n                        float? depthNear = _currentRenderState.DepthNear;\n                        float? depthFar = _currentRenderState.DepthFar;\n                        int w = glLayer.FramebufferWidth;\n                        int h = glLayer.FramebufferHeight;\n                        bool ign = glLayer.IgnoreDepthValues;\n                        bool antialias = glLayer.Antialias;\n\n                        foreach (XRView xrView in xrViewerPose.Views)\n                        {\n                            WebXREye eye = xrView.Eye;\n\n                            XRViewport xrViewport = glLayer.GetViewport(xrView);\n\n                            float aspect = (float)xrViewport.Width / (float)xrViewport.Height;\n\n                            XRRigidTransform viewPose = xrView.Transform;\n\n                            _headsetState.HeadPose = viewerPose.ToPose3();\n\n                            switch (eye)\n                            {\n                                case WebXREye.None:\n                                    {\n                                        _lproj = (Matrix)xrView.ProjectionMatrix;\n                                        _headsetState.HeadPose = viewPose.ToPose3();\n                                    }\n                                    break;\n                                case WebXREye.Left:\n                                    {\n                                        _lproj = (Matrix)xrView.ProjectionMatrix;\n                                        _headsetState.LEyePose = viewPose.ToPose3();\n                                    }\n                                    break;\n                                case WebXREye.Right:\n                                    {\n                                        _rproj = (Matrix)xrView.ProjectionMatrix;\n                                        _headsetState.REyePose = viewPose.ToPose3();\n                                    }\n                                    break;\n                            }\n\n                            xrView.Dispose();\n                        }\n\n                        _xrInAnimationFrame = true;\n                        try\n                        {\n                            ((IPlatformGame)_game).GetStrategy<ConcreteGame>()._suppressTick = false;\n\n                            _game.Tick();\n                        }\n                        catch (Exception ex)\n                        {\n                            Console.WriteLine(\"XR AnimationFrameCallback: exception: \"+ex.Message);\n                            Console.WriteLine(ex.StackTrace);\n                            throw;\n                        }\n                        finally\n                        {\n                            ((IPlatformGame)_game).GetStrategy<ConcreteGame>()._suppressTick = true;\n                            _xrInAnimationFrame = false;\n                        }\n\n                    }\n                }\n\n            }\n            finally\n            {\n                _currentXRFrame = null;\n                _currentXRSession = null;\n                _currentRenderState = null;\n\n                // Request next frame\n                _xrAnimationHandle = _xrsession.RequestAnimationFrame(this.AnimationFrameCallback);\n            }\n        }\n        \n        [Conditional(\"DEBUG\")]\n        public void CheckFramebufferStatus(WebGL2FramebufferType framebuffer)\n        {\n            var graphicsDevice = _graphics.GraphicsDevice;\n            var GL = (IWebGL2RenderingContext)((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            WebGL2FramebufferStatus status = GL.CheckFramebufferStatus(framebuffer);\n            switch (status)\n            {\n                case WebGL2FramebufferStatus.FRAMEBUFFER_COMPLETE:\n                    return;\n                case WebGL2FramebufferStatus.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n                    throw new InvalidOperationException(\"Not all framebuffer attachment points are framebuffer attachment complete.\");\n                case WebGL2FramebufferStatus.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n                    throw new InvalidOperationException(\"No images are attached to the framebuffer.\");\n                case WebGL2FramebufferStatus.FRAMEBUFFER_UNSUPPORTED:\n                    throw new InvalidOperationException(\"The combination of internal formats of the attached images violates an implementation-dependent set of restrictions.\");\n                case WebGL2FramebufferStatus.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n                    throw new InvalidOperationException(\"Not all attached images have the same dimensions.\");\n                case WebGL2FramebufferStatus.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n                    throw new InvalidOperationException(\"The values of RENDERBUFFER_SAMPLES are different among attached renderbuffers, or are non-zero if the attached images are a mix of renderbuffers and textures.\");\n\n                default:\n                    throw new InvalidOperationException(\"Framebuffer Incomplete.\");\n            }\n        }\n\n        private Matrix CreateProjection(Matrix xrproj, float nearZ, float farZ)\n        {\n            // extract FOV from the xrView.ProjectionMatrix\n            float tanAngleLeft   = (1 + xrproj.M31) / xrproj.M11;\n            float tanAngleRight  = (1 - xrproj.M31) / xrproj.M11;\n            float tanAngleBottom = (1 + xrproj.M32) / xrproj.M22;\n            float tanAngleTop    = (1 - xrproj.M32) / xrproj.M22;\n\n            // create projection with nearZ/farZ\n            GraphicsBackend graphicsBackend = _graphics.GraphicsDevice.Adapter.Backend;\n            if (farZ == float.PositiveInfinity)\n                return CreateInfiniteProjection(graphicsBackend, tanAngleLeft, tanAngleRight, tanAngleBottom, tanAngleTop, nearZ);\n            else\n                return CreateProjection(graphicsBackend, tanAngleLeft, tanAngleRight, tanAngleBottom, tanAngleTop, nearZ, farZ);\n        }\n\n        static unsafe Matrix CreateProjection(GraphicsBackend graphicsBackend,\n                                                 float tanAngleLeft, float tanAngleRight, \n                                                 float tanAngleBottom, float tanAngleTop,\n                                                 float nearZ, float farZ)\n        {\n            float tanAngleWidth  = tanAngleLeft + tanAngleRight;\n            float tanAngleHeight = tanAngleBottom + tanAngleTop;\n\n            // Set offsetZ to zero  for a [ 0,+1] Z clip space (D3D / Metal / Vulkan).\n            // Set offsetZ to nearZ for a [-1,+1] Z clip space (OpenGL / GLES / WebGL).\n            //float offsetZ = (graphicsBackend == GraphicsBackend.OpenGL || graphicsBackend == GraphicsBackend.GLES || graphicsBackend == GraphicsBackend.WebGL) \n            //              ? nearZ \n            //              : 0;\n            const float offsetZ = 0;\n\n            Matrix result;\n\n            // normal projection\n            result.M11 = (2f) / tanAngleWidth;\n            result.M12 = result.M13 = result.M14 = 0;\n\n            result.M22 = (2f) / tanAngleHeight;\n            result.M21 = result.M23 = result.M24 = 0;\n\n            result.M31 = -(tanAngleRight - tanAngleLeft) / tanAngleWidth;\n            result.M32 = -(tanAngleTop - tanAngleBottom) / tanAngleHeight;\n            result.M33 = (float)((farZ + (double)offsetZ) / ((double)nearZ - farZ));\n            result.M34 = -1;\n\n            result.M43 = (float)((farZ * ((double)nearZ + offsetZ)) / ((double)nearZ - farZ));\n            result.M41 = result.M42 = result.M44 = 0;\n\n            return result;\n        }\n\n        static unsafe Matrix CreateInfiniteProjection(GraphicsBackend graphicsBackend,\n                                                 float tanAngleLeft, float tanAngleRight,\n                                                 float tanAngleBottom, float tanAngleTop,\n                                                 float nearZ)\n        {\n            float tanAngleWidth = tanAngleLeft + tanAngleRight;\n            float tanAngleHeight = tanAngleBottom + tanAngleTop;\n\n            // Set offsetZ to zero  for a [ 0,+1] Z clip space (D3D / Metal / Vulkan).\n            // Set offsetZ to nearZ for a [-1,+1] Z clip space (OpenGL / GLES / WebGL).\n            //float offsetZ = (graphicsBackend == GraphicsBackend.OpenGL || graphicsBackend == GraphicsBackend.GLES || graphicsBackend == GraphicsBackend.WebGL) \n            //              ? nearZ \n            //              : 0;\n            const float offsetZ = 0;\n\n            Matrix result;\n\n            // place the far plane at infinity\n            result.M11 = 2.0f / tanAngleWidth;\n            result.M12 = 0.0f;\n            result.M13 = 0.0f;\n            result.M14 = 0.0f;\n\n            result.M21 = 0.0f;\n            result.M22 = 2.0f / tanAngleHeight;\n            result.M23 = 0.0f;\n            result.M24 = 0.0f;\n\n            result.M31 = -(tanAngleRight - tanAngleLeft) / tanAngleWidth;\n            result.M32 = -(tanAngleTop - tanAngleBottom) / tanAngleHeight;\n            result.M33 = -1.0f;\n            result.M34 = -1.0f;\n\n            result.M41 = 0.0f;\n            result.M42 = 0.0f;\n            result.M43 = -(nearZ + offsetZ);\n            result.M44 = 0.0f;\n\n            return result;\n        }\n\n\n\n\n        private GamePadState _gamePadState;\n        GamepadButton[] _lbuttons;\n        float[] _laxes;\n        GamepadButton[] _rbuttons;\n        float[] _raxes;\n\n        internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport)\n        {\n            gamePadType = GamePadType.GamePad;\n\n            if (controllerType == TouchControllerType.LTouch)\n            {\n                if (_lbuttons != null)\n                {\n                    isConnected = true;\n\n                    //// left buttons\n                    if (_lbuttons != null && _lbuttons.Length > 4)\n                        buttons |= Buttons.X;\n                    if (_lbuttons != null && _lbuttons.Length > 5)\n                        buttons |= Buttons.Y;\n                    if (_lbuttons != null && _lbuttons.Length > 3)\n                        buttons |= Buttons.LeftStick;\n                    if (_lbuttons != null && _lbuttons.Length > 0)\n                        buttons |= Buttons.LeftTrigger;\n                    if (_lbuttons != null && _lbuttons.Length > 1)\n                        buttons |= Buttons.LeftGrip;\n                }\n            }\n\n            if (controllerType == TouchControllerType.RTouch)\n            {\n                if (_rbuttons != null)\n                {\n                    isConnected = true;\n\n                    //// right buttons  \n                    if (_rbuttons != null && _rbuttons.Length > 4)\n                        buttons |= Buttons.A;\n                    if (_rbuttons != null && _rbuttons.Length > 5)\n                        buttons |= Buttons.B;\n                    if (_rbuttons != null && _rbuttons.Length > 3)\n                        buttons |= Buttons.RightStick;\n                    if (_rbuttons != null && _rbuttons.Length > 0)\n                        buttons |= Buttons.RightTrigger;\n                    if (_rbuttons != null && _rbuttons.Length > 1)\n                        buttons |= Buttons.RightGrip;\n                }\n            }\n\n            if (controllerType == TouchControllerType.Touch)\n            {\n                if (_lbuttons != null && _rbuttons != null)\n                {\n                    isConnected = true;\n\n                    //// left buttons\n                    if (_lbuttons != null && _lbuttons.Length > 4)\n                        buttons |= Buttons.X;\n                    if (_lbuttons != null && _lbuttons.Length > 5)\n                        buttons |= Buttons.Y;\n                    if (_lbuttons != null && _lbuttons.Length > 3)\n                        buttons |= Buttons.LeftStick;\n                    if (_lbuttons != null && _lbuttons.Length > 0)\n                        buttons |= Buttons.LeftTrigger;\n                    if (_lbuttons != null && _lbuttons.Length > 1)\n                        buttons |= Buttons.LeftGrip;\n\n                    //// right buttons  \n                    if (_rbuttons != null && _rbuttons.Length > 4)\n                        buttons |= Buttons.A;\n                    if (_rbuttons != null && _rbuttons.Length > 5)\n                        buttons |= Buttons.B;\n                    if (_rbuttons != null && _rbuttons.Length > 3)\n                        buttons |= Buttons.RightStick;\n                    if (_rbuttons != null && _rbuttons.Length > 0)\n                        buttons |= Buttons.RightTrigger;\n                    if (_rbuttons != null && _rbuttons.Length > 1)\n                        buttons |= Buttons.RightGrip;\n                }\n            }\n\n\n            foreach (XRInputSource inputSource in _xrsession.InputSources)\n            {\n                XRHandedness hand = inputSource.Handedness;\n                Gamepad gamepad = inputSource.Gamepad;\n\n                if (gamepad != null)\n                {\n                    switch (hand)\n                    {\n                        case XRHandedness.Left:\n                            {\n                                if (controllerType == TouchControllerType.LTouch\n                                || controllerType == TouchControllerType.Touch)\n                                {\n                                    if (gamepad.VibrationActuator != null)\n                                        hasLeftVibrationMotor = true;\n                                }\n                            }\n                            break;\n                        case XRHandedness.Right:\n                            {\n                                if (controllerType == TouchControllerType.RTouch\n                                || controllerType == TouchControllerType.Touch)\n                                {\n                                    if (gamepad.VibrationActuator != null)\n                                        hasRightVibrationMotor = true;\n                                }\n                            }\n                            break;\n                    }\n                }\n            }\n        }\n\n        internal GamePadState GetGamePadState(TouchControllerType controllerType)\n        {\n            Vector2 leftStick = default;\n            Vector2 rightStick = default;\n\n            if (_laxes != null && _laxes.Length >= 4)\n                leftStick = new Vector2(_laxes[2], -_laxes[3]);\n            if (_raxes != null && _raxes.Length >= 4)\n                rightStick = new Vector2(_raxes[2], -_raxes[3]);\n\n            GamePadThumbSticks thumbSticks = new GamePadThumbSticks(\n                leftStick,\n                rightStick);\n\n            float leftTrigger = 0;\n            float rightTrigger = 0;\n\n            if (_lbuttons != null && _lbuttons.Length > 0)\n                leftTrigger = _lbuttons[0].Value;\n            if (_rbuttons != null && _rbuttons.Length > 0)\n                rightTrigger = _rbuttons[0].Value;\n\n            GamePadTriggers triggers = new GamePadTriggers(\n                leftTrigger, // LeftTrigger\n                rightTrigger  // RightTrigger\n            );\n\n            GamePadTriggers grips = default(GamePadTriggers);\n            Buttons buttons = default(Buttons);\n            Buttons touches = default(Buttons);\n\n            float leftGrip = 0;\n            float rightGrip = 0;\n\n            if (_lbuttons != null && _lbuttons.Length > 1)\n                leftGrip = _lbuttons[1].Value;\n            if (_rbuttons != null && _rbuttons.Length > 1)\n                rightGrip = _rbuttons[1].Value;\n\n            grips = new GamePadTriggers(\n                    leftTrigger: leftGrip,\n                    rightTrigger: rightGrip);\n\n            //// left buttons\n            if (_lbuttons != null && _lbuttons.Length > 4 && _lbuttons[4].Pressed)\n                buttons |= Buttons.X;\n            if (_lbuttons != null && _lbuttons.Length > 5 && _lbuttons[5].Pressed)\n                buttons |= Buttons.Y;\n            if (_lbuttons != null && _lbuttons.Length > 3 && _lbuttons[3].Pressed)\n                buttons |= Buttons.LeftStick;\n            if (_lbuttons != null && _lbuttons.Length > 0 && _lbuttons[0].Pressed)\n                buttons |= Buttons.LeftTrigger;\n            if (_lbuttons != null && _lbuttons.Length > 1 && _lbuttons[1].Pressed)\n                buttons |= Buttons.LeftGrip;\n\n            //// right buttons  \n            if (_rbuttons != null && _rbuttons.Length > 4 && _rbuttons[4].Pressed)\n                buttons |= Buttons.A;\n            if (_rbuttons != null && _rbuttons.Length > 5 && _rbuttons[5].Pressed)\n                buttons |= Buttons.B;\n            if (_rbuttons != null && _rbuttons.Length > 3 && _rbuttons[3].Pressed)\n                buttons |= Buttons.RightStick;\n            if (_rbuttons != null && _rbuttons.Length > 0 && _rbuttons[0].Pressed)\n                buttons |= Buttons.RightTrigger;\n            if (_rbuttons != null && _rbuttons.Length > 1 && _rbuttons[1].Pressed)\n                buttons |= Buttons.RightGrip;\n\n            float TriggerThresholdOn = 0.6f;\n            float TriggerThresholdOff = 0.7f;\n            float ThumbstickThresholdOn = 0.5f;\n            float ThumbstickThresholdOff = 0.4f;\n            //// virtual trigger buttons\n\n            //buttons |= _virtualButtons;\n\n            // left touches\n\n            if (_lbuttons != null && _lbuttons.Length > 4 && _lbuttons[4].Touched)\n                touches |= Buttons.X;\n            if (_lbuttons != null && _lbuttons.Length > 5 && _lbuttons[5].Touched)\n                touches |= Buttons.Y;\n            if (_lbuttons != null && _lbuttons.Length > 3 && _lbuttons[3].Touched)\n                touches |= Buttons.LeftStick;\n            if (_lbuttons != null && _lbuttons.Length > 0 && _lbuttons[0].Touched)\n                touches |= Buttons.LeftTrigger;\n            if (_lbuttons != null && _lbuttons.Length > 1 && _lbuttons[1].Touched)\n                touches |= Buttons.LeftGrip;\n\n            // right touches\n            if (_rbuttons != null && _rbuttons.Length > 4 && _rbuttons[4].Touched)\n                touches |= Buttons.A;\n            if (_rbuttons != null && _rbuttons.Length > 5 && _rbuttons[5].Touched)\n                touches |= Buttons.B;\n            if (_rbuttons != null && _rbuttons.Length > 3 && _rbuttons[3].Touched)\n                touches |= Buttons.RightStick;\n            if (_rbuttons != null && _rbuttons.Length > 0 && _rbuttons[0].Touched)\n                touches |= Buttons.RightTrigger;\n            if (_rbuttons != null && _rbuttons.Length > 1 && _rbuttons[1].Touched)\n                touches |= Buttons.RightGrip;\n\n            _gamePadState = new GamePadState(\n                thumbSticks: thumbSticks,\n                triggers: triggers,\n                grips: grips,\n                touchButtons: new GamePadTouchButtons(buttons, touches),\n                dPad: default(GamePadDPad)\n                );\n\n            return _gamePadState;\n        }\n\n        internal bool SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n\n            bool result = false;\n\n            foreach (XRInputSource inputSource in _xrsession.InputSources)\n            {\n                XRHandedness hand = inputSource.Handedness;\n                Gamepad gamepad = inputSource.Gamepad;\n\n                if (gamepad != null)\n                {\n                    switch (hand)\n                    {\n                        case XRHandedness.Left:\n                            {\n                                if (controllerType == TouchControllerType.LTouch\n                                || controllerType == TouchControllerType.Touch)\n                                {\n                                    if (gamepad.VibrationActuator != null)\n                                        result |= gamepad.VibrationActuator.Pulse(amplitude, 400);\n                                }\n                            }\n                            break;\n                        case XRHandedness.Right:\n                            {\n                                if (controllerType == TouchControllerType.RTouch\n                                || controllerType == TouchControllerType.Touch)\n                                {\n                                    if (gamepad.VibrationActuator != null)\n                                        result |= gamepad.VibrationActuator.Pulse(amplitude, 400);\n                                }\n                            }\n                            break;\n                    }\n                }\n            }\n\n            return result;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n\n\n    internal static class OvrExtensions\n    {\n        public static Pose3 ToPose3(this XRRigidTransform ovrPosef)\n        {\n            return new Pose3(\n                        (Quaternion)ovrPosef.Orientation,\n                        new Vector3(ovrPosef.Position.X, ovrPosef.Position.Y, ovrPosef.Position.Z)\n                );\n        }\n    }\n\n}"
  },
  {
    "path": "Platforms/XR/.BlazorGL/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.CardboardLegacy/CardboardHeadsetState.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal struct CardboardHeadsetState\n    {\n        public CardboardEyeState LeftEye;\n        public CardboardEyeState RightEye;\n    }\n\n    internal struct CardboardEyeState\n    {\n        public Matrix View;\n        \n        public Matrix Projection;\n        public Viewport Viewport;\n    }\n}"
  },
  {
    "path": "Platforms/XR/.CardboardLegacy/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.XR;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n        Game _game;\n        IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        XRDeviceState _deviceState;\n        bool _isTrackFloorLevelEnabled = false;\n\n        GameWindow _gameWindow;\n\n\n\n        public override bool IsVRSupported\n        {\n            get { return true; }\n        }\n\n        public override bool IsARSupported\n        {\n            get { return false; }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return _deviceState; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return _isTrackFloorLevelEnabled; }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n        {\n            if (game == null)\n                throw new ArgumentNullException(\"game\");\n\n            IGraphicsDeviceService graphics = game.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (graphics == null)\n                throw new ArgumentNullException(\"graphics\");\n\n            this._game = game;\n            this._graphics = graphics;\n\n            this._deviceState = XRDeviceState.Disabled;\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            throw new PlatformNotSupportedException(\"Cardboard requires a Game reference.\");\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            if (sessionMode != XRSessionMode.VR)\n                throw new ArgumentException(\"mode\");\n\n            this._sessionMode = sessionMode;\n            _gameWindow = _game.Window;\n\n            _deviceState = XRDeviceState.Enabled;\n            return 0;\n        }\n\n        CardboardHeadsetState _headsetState;\n\n        public override int BeginFrame()\n        {\n            var window = _gameWindow as AndroidGameWindow;\n            window.UpdateHeadsetState(out _headsetState);\n\n            return 0;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            HeadsetState headsetState = default;\n\n            if (_headsetState.LeftEye.View == default(Matrix))\n                return default(HeadsetState);\n\n            //TODO: get HeadPose from VrRendererOnDrawFrame(VRCardboard.HeadTransform headTransform, ...)\n            headsetState.HeadPose = Pose3.Identity;\n\n            Matrix LEyeTransform = Matrix.Invert(_headsetState.LeftEye.View);\n            Matrix REyeTransform = Matrix.Invert(_headsetState.RightEye.View);\n            Pose3 LEyePose = default;\n            Pose3 REyePose = default;\n            LEyeTransform.Decompose(out _, out LEyePose.Orientation, out LEyePose.Translation);\n            REyeTransform.Decompose(out _, out REyePose.Orientation, out REyePose.Translation);\n            headsetState.LEyePose = LEyePose;\n            headsetState.REyePose = REyePose;\n\n            return headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            yield return XREye.Left;\n            yield return XREye.Right;\n        }\n\n        RenderTarget2D[] _rt = new RenderTarget2D[2];\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye xreye)\n        {\n            int eye = (int)xreye - 1;\n\n            Viewport vp = default;\n            switch (xreye)\n            {\n                case XREye.Left: vp = _headsetState.LeftEye.Viewport; break;\n                case XREye.Right: vp = _headsetState.RightEye.Viewport; break;\n            }\n            int w = vp.Width;\n            int h = vp.Height;\n\n\n            var gd = _graphics.GraphicsDevice;\n\n            if (_rt[eye] != null\n            && (_rt[eye].Width != w || _rt[eye].Height != h)\n            )\n            {\n                _rt[eye].Dispose();\n                _rt[eye] = null;\n            }\n\n            if (_rt[eye] == null)\n            {\n                _rt[eye] = new RenderTarget2D(_graphics.GraphicsDevice, w, h, false,\n                                              SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 4, RenderTargetUsage.PreserveContents);\n            }\n\n            return _rt[eye];\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            Matrix proj;\n\n            switch (eye)\n            {\n                case XREye.None:\n                    throw new NotImplementedException();\n                case XREye.Left:\n                    proj = _headsetState.LeftEye.Projection;\n                    break;\n                case XREye.Right:\n                    proj = _headsetState.RightEye.Projection;\n                    break;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n\n            // extract FOV from the proj Matrix\n            float tanAngleLeft   = (1 + proj.M31) / proj.M11;\n            float tanAngleRight  = (1 - proj.M31) / proj.M11;\n            float tanAngleBottom = (1 + proj.M32) / proj.M22;\n            float tanAngleTop    = (1 - proj.M32) / proj.M22;\n\n            //TODO: Get FOV from VRCardboard.EyeParams and create projection with znear/zfar\n            //proj = CreateProjection(tanAngleLeft, tanAngleRight, tanAngleBottom, tanAngleTop, znear, zfar);\n\n            return proj;\n        }\n\n        public override void CommitRenderTarget(XREye xreye, RenderTarget2D rt)\n        {\n            int eye = (int)xreye - 1;\n\n            Debug.Assert(_rt[eye] == rt);\n        }\n\n\n        SpriteBatch _sb;\n        public override int EndFrame()\n        {\n            var gd = _graphics.GraphicsDevice;\n\n            if (_sb == null)\n                _sb = new SpriteBatch(_graphics.GraphicsDevice);\n\n            Viewport vp = default;\n\n            _sb.Begin();\n             vp = _headsetState.LeftEye.Viewport;\n            _sb.Draw(_rt[0], new Rectangle(vp.X, vp.Y, vp.Width, vp.Height), Color.White);\n            vp = _headsetState.RightEye.Viewport; \n            _sb.Draw(_rt[1], new Rectangle(vp.X, vp.Y, vp.Width, vp.Height), Color.White);\n            _sb.End();\n\n            return 0;\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return default(HandsState);\n        }\n\n        public override void EndSessionAsync()\n        {\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            if (enable == true)\n            {\n                throw new NotImplementedException();\n            }\n            else\n            {\n                _isTrackFloorLevelEnabled = enable;\n            }\n        }\n\n\n        static unsafe Matrix CreateProjection(   float tanAngleLeft, float tanAngleRight,\n                                                 float tanAngleBottom, float tanAngleTop,\n                                                 float nearZ, float farZ)\n        {\n            float tanAngleWidth = tanAngleLeft + tanAngleRight;\n            float tanAngleHeight = tanAngleBottom + tanAngleTop;\n\n            Matrix result;\n            \n            result.M11 = (2f) / tanAngleWidth;\n            result.M12 = result.M13 = result.M14 = 0;\n            result.M22 = (2f) / tanAngleHeight;\n            result.M21 = result.M23 = result.M24 = 0;\n            result.M31 = -(tanAngleRight - tanAngleLeft) / tanAngleWidth;\n            result.M32 = -(tanAngleTop - tanAngleBottom) / tanAngleHeight;\n            result.M33 = (float)((farZ) / ((double)nearZ - farZ));\n            result.M34 = -1;\n            result.M43 = (float)((farZ * ((double)nearZ)) / ((double)nearZ - farZ));\n            result.M41 = result.M42 = result.M44 = 0;\n            return result;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n    }\n}"
  },
  {
    "path": "Platforms/XR/.CardboardLegacy/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.CardboardLegacy/GoogleCardboard/Additions/AboutAdditions.txt",
    "content": "Additions allow you to add arbitrary C# to the generated classes\nbefore they are compiled.  This can be helpful for providing convenience\nmethods or adding pure C# classes.\n\n== Adding Methods to Generated Classes ==\n\nLet's say the library being bound has a Rectangle class with a constructor\nthat takes an x and y position, and a width and length size.  It will look like\nthis:\n\npublic partial class Rectangle\n{\n    public Rectangle (int x, int y, int width, int height)\n    {\n        // JNI bindings\n    }\n}\n\nImagine we want to add a constructor to this class that takes a Point and\nSize structure instead of 4 ints.  We can add a new file called Rectangle.cs\nwith a partial class containing our new method:\n\npublic partial class Rectangle\n{\n    public Rectangle (Point location, Size size) :\n        this (location.X, location.Y, size.Width, size.Height)\n    {\n    }\n}\n\nAt compile time, the additions class will be added to the generated class\nand the final assembly will a Rectangle class with both constructors.\n\n\n== Adding C# Classes ==\n\nAnother thing that can be done is adding fully C# managed classes to the\ngenerated library.  In the above example, let's assume that there isn't a\nPoint class available in Java or our library.  The one we create doesn't need\nto interact with Java, so we'll create it like a normal class in C#.\n\nBy adding a Point.cs file with this class, it will end up in the binding library:\n\npublic class Point\n{\n    public int X { get; set; }\n    public int Y { get; set; }\n}"
  },
  {
    "path": "Platforms/XR/.CardboardLegacy/GoogleCardboard/GoogleCardboard.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0-android30</TargetFramework>\n    <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>\n  </PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<!-- By setting TargetPlatformVersionSupported\n\t       we disable _CheckForInvalidTargetPlatformVersion check.\n\t       This let us target android SDK 32 under .net9.\n\t  -->\n\t\t<TargetPlatformVersionSupported>true</TargetPlatformVersionSupported>\n\t</PropertyGroup>\n\t\n  <ItemGroup>\n    <AndroidLibrary Include=\"Jars\\cardboard.jar\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <TransformFile Include=\"Transforms\\EnumFields.xml\" />\n    <TransformFile Include=\"Transforms\\EnumMethods.xml\" />\n    <TransformFile Include=\"Transforms\\Metadata.xml\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Remove=\"Additions\\AboutAdditions.txt\" />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Platforms/XR/.CardboardLegacy/GoogleCardboard/Transforms/EnumFields.xml",
    "content": "﻿<enum-field-mappings>\n  <!--\n  This example converts the constants Fragment_id, Fragment_name,\n  and Fragment_tag from android.support.v4.app.FragmentActivity.FragmentTag\n  to an enum called Android.Support.V4.App.FragmentTagType with values\n  Id, Name, and Tag.\n  \n  <mapping jni-class=\"android/support/v4/app/FragmentActivity$FragmentTag\" clr-enum-type=\"Android.Support.V4.App.FragmentTagType\">\n    <field jni-name=\"Fragment_name\" clr-name=\"Name\" value=\"0\" />\n    <field jni-name=\"Fragment_id\" clr-name=\"Id\" value=\"1\" />\n    <field jni-name=\"Fragment_tag\" clr-name=\"Tag\" value=\"2\" />\n  </mapping>\n  -->\n</enum-field-mappings>"
  },
  {
    "path": "Platforms/XR/.CardboardLegacy/GoogleCardboard/Transforms/EnumMethods.xml",
    "content": "﻿<enum-method-mappings>\n  <!--\n  This example changes the Java method:\n    android.support.v4.app.Fragment.SavedState.writeToParcel (int flags)\n  to be:\n    android.support.v4.app.Fragment.SavedState.writeToParcel (Android.OS.ParcelableWriteFlags flags)\n  when bound in C#.\n  \n  <mapping jni-class=\"android/support/v4/app/Fragment.SavedState\">\n    <method jni-name=\"writeToParcel\" parameter=\"flags\" clr-enum-type=\"Android.OS.ParcelableWriteFlags\" />\n  </mapping>\n  -->\n</enum-method-mappings>"
  },
  {
    "path": "Platforms/XR/.CardboardLegacy/GoogleCardboard/Transforms/Metadata.xml",
    "content": "﻿<metadata>\n\t<attr path=\"/api/package[@name='com.google.vrtoolkit.cardboard']\" name=\"managedName\">Com.Google.Vrtoolkit.Cardboard</attr>\n\t<attr path=\"/api/package[@name='com.google.vrtoolkit.cardboard.sensors']\" name=\"managedName\">Com.Google.Vrtoolkit.Cardboard.Sensors</attr>\n\t<remove-node path=\"/api/package[@name='com.google.vrtoolkit.cardboard.sensors.internal']\" />\n\n  <!--\n  This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask:\n  <remove-node path=\"/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']\" />\n  \n  This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground:\n  <remove-node path=\"/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']\" />\n  -->\n</metadata>\n"
  },
  {
    "path": "Platforms/XR/.LibOVR/ConcreteOvrSwapChainData.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.XR;\nusing Microsoft.Xna.Platform.XR;\nusing Microsoft.Xna.Platform.XR.LibOVR;\nusing nkast.LibOVR;\nusing D3D11 = SharpDX.Direct3D11;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    // Concrete SharpDX.Direct3D11 \n    internal sealed class ConcreteOvrSwapChainData : ConcreteXRDevice.OvrSwapChainDataBase\n    {\n        public readonly static Guid IID_IUnknown = new Guid(0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);\n        public readonly static Guid IID_ID3D11DeviceChild = new Guid(0x1841e5c8, 0x16b0, 0x489b, 0xbc, 0xc8, 0x44, 0xcf, 0xb0, 0xd5, 0xde, 0xae);\n        public readonly static Guid IID_ID3D11Resource = new Guid(0xdc8e63f3, 0xd12b, 0x4952, 0xb4, 0x7b, 0x5e, 0x45, 0x02, 0x6a, 0x86, 0x2d);\n        public readonly static Guid IID_ID3D11Texture2D = new Guid(0x6f15aaf2, 0xd208, 0x4e89, 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c);\n\n        private OvrTextureSwapChain _swapChain;\n        public D3D11.Texture2D[] _buckBuffers;\n        private RenderTarget2D _renderTarget;\n\n        internal override OvrTextureSwapChain SwapChain { get { return _swapChain; } }\n\n        internal static int CreateSwapChain(\n            GraphicsDevice graphicsDevice, OvrSession ovrSession,\n            int w, int h,\n            SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,\n            out ConcreteXRDevice.OvrSwapChainDataBase outSwapChainData)\n        {\n            int ovrResult = 0;\n\n            outSwapChainData = null;\n            ConcreteOvrSwapChainData swapChainData = new ConcreteOvrSwapChainData();\n\n            OvrTextureSwapChainDesc desc = default(OvrTextureSwapChainDesc);\n            desc.Type = OvrTextureType.Texture2D;\n            desc.Format = OvrTextureFormat.R8G8B8A8_UNORM_SRGB;\n            //desc.Format = OVR_FORMAT_R8G8B8A8_UNORM;\n            desc.ArraySize = 1;\n            desc.Width = w;\n            desc.Height = h;\n            desc.MipLevels = 1;\n            desc.SampleCount = 1;\n            desc.SampleCount = 1;\n            desc.StaticImage = OvrBool.False;\n            desc.MiscFlags = OvrTextureMiscFlags.None;\n            desc.BindFlags = OvrTextureBindFlags.DX_RenderTarget;\n\n            OvrTextureSwapChain swapChain;\n\n            D3D11.Device d3dDevice = (D3D11.Device)graphicsDevice.GetD3D11Device();\n            ovrResult = ovrSession.CreateTextureSwapChainDX(d3dDevice.NativePointer, desc, out swapChain);\n            if (ovrResult < 0)\n                return ovrResult;\n            swapChainData._swapChain = swapChain;\n\n            // create backBuffers\n            int texSwapChainCount;\n            ovrResult = swapChain.GetTextureSwapChainLength(out texSwapChainCount);\n\n            swapChainData._renderTarget = new RenderTarget2D(\n                graphicsDevice, w, h, false,\n                preferredFormat, preferredDepthFormat, preferredMultiSampleCount,\n                RenderTargetUsage.DiscardContents);\n\n            swapChainData._buckBuffers = new D3D11.Texture2D[texSwapChainCount];\n            for (int i = 0; i < texSwapChainCount; i++)\n            {\n                IntPtr pDxTexture3D;\n                ovrResult = swapChain.GetTextureSwapChainBufferDX(i, IID_ID3D11Texture2D, out pDxTexture3D);\n                swapChainData._buckBuffers[i] = new D3D11.Texture2D(pDxTexture3D);\n            }\n\n            outSwapChainData = swapChainData;\n\n            return 0;\n        }\n\n        internal override RenderTarget2D GetRenderTarget(int index)\n        {\n            return _renderTarget;\n        }\n\n        internal override int SubmitRenderTarget(GraphicsDevice graphicsDevice, RenderTarget2D rt)\n        {   \n            int ovrResult;\n            ovrResult = SwapChain.GetCurrentIndex(out int index);\n            if (ovrResult < 0)\n                return ovrResult;\n\n            D3D11.Texture2D dstResource = _buckBuffers[index];\n            D3D11.Resource srcResource  = (D3D11.Resource)rt.GetD3D11Resource();\n\n            D3D11.Device d3dDevice  = (D3D11.Device)graphicsDevice.GetD3D11Device();\n            D3D11.DeviceContext d3dContext = d3dDevice.ImmediateContext;\n\n            d3dContext.CopyResource(srcResource, dstResource);\n\n            return 0;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/XR/.LibOVR/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Framework.XR;\nusing Microsoft.Xna.Platform.Input.XR;\nusing nkast.LibOVR;\n\nnamespace Microsoft.Xna.Platform.XR.LibOVR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n        //Game _game;\n        IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        XRDeviceState _deviceState;\n\n        OvrClient _ovrClient;\n        OvrSession _ovrSession;\n\n        long _frameIndex = 0;\n\n        private HeadsetState _headsetState;\n        private HandsState _handsState;\n\n        internal OvrSession Session { get { return _ovrSession; } }\n\n        OvrPosef[] _hmdToEyePose = new OvrPosef[2];\n        OvrLayerEyeFov _layer;\n\n        OvrStatusBits _statusFlags;\n\n\n        OvrSwapChainDataBase[] _swapChainData = new OvrSwapChainDataBase[2];\n\n\n        public override bool IsVRSupported\n        {\n            get { return true; }\n        }\n\n        public override bool IsARSupported\n        {\n            get { return false; }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return _deviceState; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return _ovrSession.GetTrackingOriginType() == OvrTrackingOrigin.FloorLevel; }\n        }\n\n        public ConcreteXRDevice(string applicationName, Game game)\n            : this(applicationName, game.Services)\n        {\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (graphics == null)\n                throw new ArgumentNullException(\"graphics\");\n\n            //this._game = game;\n            this._graphics = graphics;\n\n\n            _graphics = graphics;\n            _graphics.DeviceResetting += GraphicsDeviceResetting;\n            _graphics.DeviceReset += GraphicsDeviceReset;\n            _graphics.DeviceDisposing += GraphicsDeviceDisposing;\n\n            this._deviceState = XRDeviceState.Disabled;\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            if (sessionMode != XRSessionMode.VR)\n                throw new ArgumentException(\"mode\");\n\n            this._sessionMode = sessionMode;\n\n            GraphicsDevice graphicsDevice = _graphics.GraphicsDevice;\n            if (graphicsDevice == null)\n            {\n                throw new ArgumentNullException(\"graphics.GraphicsDevice\");\n                //_graphics.DeviceCreated += GraphicsDeviceCreated;\n            }\n            else\n            {\n                return Initialize(graphicsDevice);\n            }\n        }\n\n        public unsafe override int BeginFrame()\n        {\n            //_frameIndex++; // next frame\n\n            bool notVisible;\n            int ovrResult = 0;\n\n            try\n            {\n                ovrResult = _ovrSession.WaitToBeginFrame(_frameIndex);\n                notVisible = (ovrResult == 1000);\n\n                ovrResult = _ovrSession.BeginFrame(_frameIndex);\n            }\n            catch (OvrException ovre)\n            {\n                switch (ovre.OvrResult)\n                {\n                    case -6000:\n                        OnDisplayLost();\n                        return ovre.OvrResult;\n                    case -1015: // InvalidOperation\n                        throw;\n                    default:\n                        throw;\n                }\n            }\n\n            double time = _ovrSession.GetPredictedDisplayTime(_frameIndex);\n\n            OvrTrackingState trackingState = _ovrSession.GetTrackingState(time, OvrBool.True);\n\n            OvrPosef* eyePoses = stackalloc OvrPosef[2];\n            double sensorSampleTime;\n\n            fixed (OvrPosef* phmdToEyePose = _hmdToEyePose)\n            {\n                _ovrSession.ovr_GetEyePoses(_frameIndex, OvrBool.True, phmdToEyePose, eyePoses, out sensorSampleTime);\n            }\n\n            //layer.SensorSampleTime = sensorSampleTime;\n            _layer.RenderPose[0] = eyePoses[0];\n            _layer.RenderPose[1] = eyePoses[1];\n\n            _statusFlags = trackingState.StatusFlags;\n            _headsetState.HeadPose = trackingState.HeadPose.ThePose.ToPose3();\n            _headsetState.LEyePose = eyePoses[0].ToPose3();\n            _headsetState.REyePose = eyePoses[1].ToPose3();\n\n            _handsState.LHandPose = trackingState.HandPoses[0].ThePose.ToPose3();\n            _handsState.RHandPose = trackingState.HandPoses[1].ThePose.ToPose3();\n\n            return ovrResult;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            return _headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            yield return XREye.Left;\n            yield return XREye.Right;\n            yield return XREye.None; // the default backbuffer on the Desktop app.\n        }\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            if (eye == XREye.None)\n            {\n                return null;\n            }\n\n            int eyeIndex = (int)eye - 1;\n\n            int ovrResult = _swapChainData[eyeIndex].SwapChain.GetCurrentIndex(out int index);\n            return _swapChainData[eyeIndex].GetRenderTarget(index);\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            if (eye == XREye.None)\n            {\n                Viewport vp = _graphics.GraphicsDevice.Viewport;\n                return Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(60), vp.AspectRatio, znear, zfar);\n            }\n\n            int eyeIndex = (int)eye - 1;\n\n            OvrFovPort fov = _layer.Fov[eyeIndex];\n            Matrix proj;\n\n            //OvrMatrix4f orvProj = OvrMatrix4f.CreateProjection(fov, znear, zfar, OvrProjectionModifier.None);\n            //Matrix proj1 = orvProj.ToTransposedMatrix();\n\n            //Matrix proj2 = Matrix.CreatePerspectiveOffCenter(-fov.LeftTan * znear, fov.RightTan * znear, -fov.DownTan * znear, fov.UpTan * znear, znear, zfar);\n\n            CreatePerspectiveFieldOfView(fov.LeftTan, fov.RightTan, fov.DownTan, fov.UpTan, znear, zfar, out proj);\n\n            return proj;\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            if (eye == XREye.None)\n            {\n                if (rt != null)\n                    throw new InvalidOperationException();\n\n                return;\n            }\n\n            int ovrResult = 0;\n\n            int eyeIndex = (int)eye - 1;\n\n            // SubmitRenderTarget\n            ovrResult = _swapChainData[eyeIndex].SubmitRenderTarget(_graphics.GraphicsDevice, rt);\n\n            // commit\n            ovrResult = _swapChainData[eyeIndex].SwapChain.Commit();\n\n            return;\n        }\n\n        public unsafe override int EndFrame()\n        {\n            int ovrResult = 0;\n\n            OvrLayerHeader** layerPtrList = stackalloc OvrLayerHeader*[1];\n            fixed (OvrLayerHeader* pLayerHeader = &_layer.Header)\n            {\n                layerPtrList[0] = pLayerHeader;\n                try\n                {\n                    ovrResult = _ovrSession.EndFrame(_frameIndex, IntPtr.Zero, layerPtrList, 1);\n                }\n                catch (OvrException ovre)\n                {\n                    switch (ovre.OvrResult)\n                    {\n                        case -6000:\n                            OnDisplayLost();\n                            return ovre.OvrResult;\n                        default:\n                            throw;\n                    }\n                }\n\n                return ovrResult;\n            }\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return _handsState;\n        }\n\n        public override void EndSessionAsync()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            _ovrSession.SetTrackingOriginType(enable ? OvrTrackingOrigin.FloorLevel : OvrTrackingOrigin.EyeLevel);\n        }\n\n\n        private void GraphicsDeviceCreated(object sender, EventArgs e)\n        {\n        }\n        private void GraphicsDeviceResetting(object sender, EventArgs e)\n        {\n        }\n        private void GraphicsDeviceReset(object sender, EventArgs e)\n        {\n        }\n        private void GraphicsDeviceDisposing(object sender, EventArgs e)\n        {\n            this.Dispose();\n        }\n\n        private int Initialize(GraphicsDevice graphicsDevice)\n        {\n            // check supported feature level\n            switch (graphicsDevice.Adapter.Backend)\n            {\n                case GraphicsBackend.DirectX11:\n                    if (graphicsDevice.GraphicsProfile < GraphicsProfile.FL11_0)\n                        throw new InvalidOperationException(\"GraphicsProfile must be FL11_0 or higher.\");\n                    break;\n            }\n\n            int ovrResult = 0;\n\n            OvrDetectResult detectResults = OvrClient.Detect(0);\n            if (detectResults.IsServiceRunning != OvrBool.True || detectResults.IsHMDConnected != OvrBool.True)\n                return -1;\n\n            if (_ovrClient == null)\n            {\n                ovrResult = OvrClient.TryInitialize(out _ovrClient);\n                if ((ovrResult) < 0)\n                    return ovrResult;\n            }\n\n            ovrResult = _ovrClient.TryCreateSession(out _ovrSession);\n            if ((ovrResult) < 0)\n                return ovrResult;\n\n            CreateDefaultLayer(graphicsDevice,\n                SurfaceFormat.Color,\n                DepthFormat.Depth24Stencil8,\n                4, 1,\n                out _layer);\n\n            TouchController.DeviceHandle = new Input.XR.LibOVR.ConcreteTouchControllerStrategy(this);\n            this._deviceState = XRDeviceState.Enabled;\n\n            return 0;\n        }\n\n        private int CreateDefaultLayer(GraphicsDevice graphicsDevice,\n            SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,\n            int pixelsPerDisplayPixel,\n            out OvrLayerEyeFov layer)\n        {\n            int ovrResult = 0;\n\n            OvrHmdDesc HmdDesc = _ovrSession.GetHmdDesc();\n\n\n            // create layer\n            layer = default(OvrLayerEyeFov);\n            layer.Header.Type = OvrLayerType.EyeFov;\n            layer.Header.Flags = 0;\n\n            for (int eye = 0; eye < 2; eye++)\n            {\n                OvrFovPort fov = HmdDesc.DefaultEyeFov[eye];\n                OvrSizei texRes = _ovrSession.GetFovTextureSize((OvrEyeType)eye, fov, pixelsPerDisplayPixel);\n                layer.Viewport[eye] = new OvrRecti(0, 0, texRes.W, texRes.H);\n\n                ovrResult = ConcreteOvrSwapChainData.CreateSwapChain(\n                    graphicsDevice, _ovrSession,\n                    texRes.W, texRes.H,\n                    preferredFormat, preferredDepthFormat, preferredMultiSampleCount,\n                    out _swapChainData[eye]);\n                layer.ColorTexture[eye] = _swapChainData[eye].SwapChain.NativePtr;\n\n                OvrEyeRenderDesc renderDesc = _ovrSession.GetRenderDesc((OvrEyeType)eye, fov);\n                layer.Fov[eye] = renderDesc.Fov;\n                _hmdToEyePose[eye] = renderDesc.HmdToEyePose;\n            }\n\n            return 0;\n        }\n\n        private unsafe void OnDisplayLost()\n        {\n            OvrGraphicsLuid prevGraphicsLuid = _ovrSession.GraphicsLuid;\n\n            // destroy session\n            _ovrSession.Dispose();\n            _ovrSession = null;\n            _ovrClient.Dispose();\n            _ovrClient = null;\n\n            _deviceState = XRDeviceState.Disabled;\n        }\n\n        private static void CreatePerspectiveFieldOfView(float leftTan, float rightTan, float bottomTan, float topTan, float nearPlaneDistance, float farPlaneDistance, out Matrix result)\n        {\n            if (nearPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"nearPlaneDistance <= 0\");\n            }\n            if (farPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"farPlaneDistance <= 0\");\n            }\n            if (nearPlaneDistance >= farPlaneDistance)\n            {\n                throw new ArgumentException(\"nearPlaneDistance >= farPlaneDistance\");\n            }\n\n            result.M11 = (2f) / (leftTan + rightTan);\n            result.M12 = result.M13 = result.M14 = 0;\n\n            result.M22 = (2f) / (topTan + bottomTan);\n            result.M21 = result.M23 = result.M24 = 0;\n\n            result.M31 = (rightTan - leftTan) / (leftTan + rightTan);\n            result.M32 = (topTan - bottomTan) / (bottomTan + topTan);\n            result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);\n            result.M34 = -1;\n\n            result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance);\n            result.M41 = result.M42 = result.M44 = 0;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_ovrSession != null)\n                    _ovrSession.Dispose();\n                if (_ovrClient != null)\n                    _ovrClient.Dispose();\n            }\n\n            _ovrSession = null;\n            _ovrClient = null;\n        }\n\n\n        internal abstract class OvrSwapChainDataBase\n        {\n            internal abstract OvrTextureSwapChain SwapChain { get; }\n            internal abstract RenderTarget2D GetRenderTarget(int index);\n            internal abstract int SubmitRenderTarget(GraphicsDevice graphicsDevice, RenderTarget2D rt);\n        }\n    }\n\n\n    internal static class OvrExtensions\n    {\n        public static Matrix ToMatrix(this OvrMatrix4f ovrMatrix4f)\n        {\n            return new Matrix(\n                    ovrMatrix4f.M11, ovrMatrix4f.M12, ovrMatrix4f.M13, ovrMatrix4f.M14,\n                    ovrMatrix4f.M21, ovrMatrix4f.M22, ovrMatrix4f.M23, ovrMatrix4f.M24,\n                    ovrMatrix4f.M31, ovrMatrix4f.M32, ovrMatrix4f.M33, ovrMatrix4f.M34,\n                    ovrMatrix4f.M41, ovrMatrix4f.M42, ovrMatrix4f.M43, ovrMatrix4f.M44\n                );\n        }\n\n        public static Matrix ToTransposedMatrix(this OvrMatrix4f ovrMatrix4f)\n        {\n            return new Matrix(\n                    ovrMatrix4f.M11, ovrMatrix4f.M21, ovrMatrix4f.M31, ovrMatrix4f.M41,\n                    ovrMatrix4f.M12, ovrMatrix4f.M22, ovrMatrix4f.M32, ovrMatrix4f.M42,\n                    ovrMatrix4f.M13, ovrMatrix4f.M23, ovrMatrix4f.M33, ovrMatrix4f.M43,\n                    ovrMatrix4f.M14, ovrMatrix4f.M24, ovrMatrix4f.M34, ovrMatrix4f.M44\n                );\n        }\n\n        public static Quaternion ToQuaternion(this OvrQuatf ovrQuatf)\n        {\n            return new Quaternion(ovrQuatf.X, ovrQuatf.Y, ovrQuatf.Z, ovrQuatf.W);\n        }\n\n        public static Vector3 ToVector3(this OvrVector3f ovrVector3f)\n        {\n            return new Vector3(ovrVector3f.X, ovrVector3f.Y, ovrVector3f.Z);\n        }\n\n        public static Pose3 ToPose3(this OvrPosef ovrPosef)\n        {\n            return new Pose3(\n                        ovrPosef.Orientation.ToQuaternion(),\n                        ovrPosef.Position.ToVector3()\n                );\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/XR/.LibOVR/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR.LibOVR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.Oculus/ConcreteOxrSwapChainData.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.XR;\nusing Microsoft.Xna.Platform.XR;\nusing Silk.NET.OpenXR;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    // Concrete SharpDX.Direct3D11 \n    internal sealed class ConcreteOxrSwapChainData : ConcreteXRDevice.OxrSwapChainDataBase\n    {\n\n        //private OvrTextureSwapChain _swapChain;\n        //public D3D11.Texture2D[] _buckBuffers;\n        private RenderTarget2D _renderTarget;\n\n        //internal override OvrTextureSwapChain SwapChain { get { return _swapChain; } }\n\n        internal override RenderTarget2D GetRenderTarget(int eye)\n        {\n            return _renderTarget;\n        }\n\n        //internal static int CreateSwapChain(\n        //    GraphicsDevice graphicsDevice, OvrSession ovrSession,\n        //    int w, int h,\n        //    SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,\n        //    out OvrDevice.OvrSwapChainDataBase outSwapChainData)\n        //{\n        //    int ovrResult = 0;\n\n        //    outSwapChainData = null;\n        //    ConcreteOvrSwapChainData swapChainData = new ConcreteOvrSwapChainData();\n\n        //    OvrTextureSwapChainDesc desc = default(OvrTextureSwapChainDesc);\n        //    desc.Type = OvrTextureType.Texture2D;\n        //    desc.Format = OvrTextureFormat.R8G8B8A8_UNORM_SRGB;\n        //    //desc.Format = OVR_FORMAT_R8G8B8A8_UNORM;\n        //    desc.ArraySize = 1;\n        //    desc.Width = w;\n        //    desc.Height = h;\n        //    desc.MipLevels = 1;\n        //    desc.SampleCount = 1;\n        //    desc.SampleCount = 1;\n        //    desc.StaticImage = OvrBool.False;\n        //    desc.MiscFlags = OvrTextureMiscFlags.None;\n        //    desc.BindFlags = OvrTextureBindFlags.DX_RenderTarget;\n\n        //    OvrTextureSwapChain swapChain;\n\n        //    D3D11.Device d3dDevice = (D3D11.Device)graphicsDevice.GetD3D11Device();\n        //    ovrResult = ovrSession.CreateTextureSwapChainDX(d3dDevice.NativePointer, desc, out swapChain);\n        //    if (ovrResult < 0)\n        //        return ovrResult;\n        //    swapChainData._swapChain = swapChain;\n\n        //    // create backBuffers\n        //    int texSwapChainCount;\n        //    ovrResult = swapChain.GetTextureSwapChainLength(out texSwapChainCount);\n\n        //    swapChainData._renderTarget = new RenderTarget2D(\n        //        graphicsDevice, w, h, false,\n        //        preferredFormat, preferredDepthFormat, preferredMultiSampleCount,\n        //        RenderTargetUsage.DiscardContents);\n\n        //    swapChainData._buckBuffers = new D3D11.Texture2D[texSwapChainCount];\n        //    for (int i = 0; i < texSwapChainCount; i++)\n        //    {\n        //        IntPtr pDxTexture3D;\n        //        ovrResult = swapChain.GetTextureSwapChainBufferDX(i, IID_ID3D11Texture2D, out pDxTexture3D);\n        //        swapChainData._buckBuffers[i] = new D3D11.Texture2D(pDxTexture3D);\n        //    }\n\n        //    outSwapChainData = swapChainData;\n\n        //    return 0;\n        //}\n\n        internal override int SubmitRenderTarget(GraphicsDevice graphicsDevice, RenderTarget2D rt)\n        {   \n            int ovrResult;\n            int index = 0;\n            //ovrResult = SwapChain.GetCurrentIndex(out index);\n            //if (ovrResult < 0)\n            //    return ovrResult;\n\n            //D3D11.Texture2D dstResource = _buckBuffers[index];\n            //D3D11.Resource srcResource  = (D3D11.Resource)rt.GetD3D11Resource();\n//\n            //D3D11.Device d3dDevice  = (D3D11.Device)graphicsDevice.GetD3D11Device();\n            //D3D11.DeviceContext d3dContext = d3dDevice.ImmediateContext;\n            //\n            //d3dContext.CopyResource(srcResource, dstResource);\n\n            return 0;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Platforms/XR/.Oculus/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Input.XR;\nusing Microsoft.Xna.Framework.XR;\nusing nkast.LibOXR;\nusing Silk.NET.Core;\nusing Silk.NET.OpenXR;\nusing SilkXR = Silk.NET.OpenXR.XR;\nusing XrAction = Silk.NET.OpenXR.Action;\n//using OpenGL = Microsoft.Xna.Platform.Graphics.OpenGL;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public interface IOculusDeviceStrategy\n    {\n        SessionState SessionState { get; }\n    }\n\n    internal class ConcreteXRDevice : XRDeviceStrategy\n        , IOculusDeviceStrategy\n    {\n        const string _engineName = \"KNI Engine\";\n\n        private string _applicationName;\n        private IServiceProvider _services;\n        private IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        XRDeviceState _deviceState;\n        bool _isTrackFloorLevelEnabled = false;\n\n        OxrAPI _xrAPI;\n        IList<string> _extensions;\n        OxrInstance _oxrInstance;\n        OxrSession _oxrSession;\n\n        int _CpuLevel;\n        int _GpuLevel;\n\n        float[] _SupportedDisplayRefreshRates;\n        uint _RequestedDisplayRefreshRateIndex;\n        uint _NumSupportedDisplayRefreshRates;\n        xrGetDisplayRefreshRateFB _pfnxrGetDisplayRefreshRateFB;\n        xrRequestDisplayRefreshRateFB _pfnxrRequestDisplayRefreshRateFB;\n\n        OxrSpace _HeadSpace;\n\n        OxrSpace _LocalSpace;\n        OxrSpace _LocalFloorSpace;\n        OxrSpace _FakeStageSpace;\n        OxrSpace _StageSpace;\n\n        bool _isLocalFloorSupported;\n        bool _isStageSupported;\n        OxrSpace _CurrentStageSpace;\n\n        OxrPassthroughFB _passthroughFB;\n        OxrPassthroughLayerFB _passthroughLayerFB;\n\n        bool _useSimpleProfile;\n\n        OxrActionSet _runningActionSet;\n        public XrAction _actionButtonA;\n        public XrAction _actionButtonB;\n        public XrAction _actionButtonRightThumbstick;\n        public XrAction _actionButtonX;\n        public XrAction _actionButtonY;\n        public XrAction _actionButtonLeftThumbstick;\n\n        public XrAction _actionButtonAtouch;\n        public XrAction _actionButtonBtouch;\n        public XrAction _actionButtonRightThumbsticktouch;\n        public XrAction _actionButtonXtouch;\n        public XrAction _actionButtonYtouch;\n        public XrAction _actionButtonLeftThumbsticktouch;\n\n        public XrAction _moveOnXActionL;\n        public XrAction _moveOnXActionR;\n        public XrAction _moveOnYActionL;\n        public XrAction _moveOnYActionR;\n        public XrAction _moveOnJoystickActionL;\n        public XrAction _moveOnJoystickActionR;\n\n        public XrAction _actionTriggerLeftTouch;\n        public XrAction _actionTriggerRightTouch;\n        // BUG: Grip touch doesn't work on native OpenXR.\n        // https://communityforums.atmeta.com/t5/OpenXR-Development/unable-to-get-grip-button-input-on-quest-1-getting-path/td-p/833021\n        //public XrAction _actionGripLeftTouch;\n        //public XrAction _actionGripRightTouch;\n\n        public XrAction _vibrateLeftFeedback;\n        public XrAction _vibrateRightFeedback;\n\n        XrAction _aimPoseAction;\n        XrAction _gripPoseAction;\n        ActionPath _leftHandPath;\n        ActionPath _rightHandPath;\n\n        OxrSpace _leftControllerAimSpace;\n        OxrSpace _rightControllerAimSpace;\n        OxrSpace _leftControllerGripSpace;\n        OxrSpace _rightControllerGripSpace;\n\n\n        const int FRAMEBUFFER_SRGB = 0x8DB9;\n        const long SRGB8_ALPHA8 = (long)Graphics.OpenGL.PixelInternalFormat.Srgba;\n\n        long _frameIndex = 0;\n\n        private HeadsetState _headsetState;\n        private HandsState _handsState;\n\n        OxrSwapChainDataBase[] _swapChainData = new OxrSwapChainDataBase[2];\n\n        Posef _xfLocalFromHead;\n        Posef _xfLocalFloorFromHead;\n        Posef _xfStageFromHead;\n        Posef _xfStageFromLocal;\n        View[] _projections = new View[ovrMaxNumEyes];\n\n        Pose3[] _viewTransform = new Pose3[ovrMaxNumEyes];\n\n        FrameState _frameState;\n        ovrRenderer _Renderer = new ovrRenderer();\n\n        ovrCompositorLayer_Union[] _Layers = new ovrCompositorLayer_Union[ovrMaxLayerCount];\n\n        internal OxrSession Session { get { return _oxrSession; } }\n\n        public OxrInstance Instance { get { return _oxrInstance; } }\n\n        //OvrPosef[] _hmdToEyePose = new OvrPosef[2];\n        //OvrLayerEyeFov _layer;\n\n        //OvrStatusBits _statusFlags;\n\n        public override bool IsVRSupported\n        {\n            get { return true; }\n        }\n\n        public override bool IsARSupported\n        {\n            get\n            {\n                if (_extensions.Contains(nameof(OxrExtensions.XR_FB_passthrough)))\n                    return true;\n\n                return false;\n            }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return _deviceState; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return _isTrackFloorLevelEnabled; }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n            : this(applicationName, game.Services)\n        {\n        }\n\n        public unsafe ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            this._applicationName = applicationName;\n            this._services = services;\n\n            _graphics = _services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (_graphics == null)\n                throw new ArgumentNullException(\"IGraphicsDeviceService not found in services.\");\n\n            _graphics.DeviceResetting += GraphicsDeviceResetting;\n            _graphics.DeviceReset += GraphicsDeviceReset;\n            _graphics.DeviceDisposing += GraphicsDeviceDisposing;\n\n\n            Android.App.Activity activity = _services.GetService(typeof(Android.App.Activity)) as Android.App.Activity;\n            if (activity == null)\n                throw new InvalidOperationException(\"Activity not found in services.\");\n\n            LoaderInitInfoAndroidKHR loaderInitInfo = new LoaderInitInfoAndroidKHR(\n                                applicationVM: (void*)Java.Interop.JniRuntime.CurrentRuntime.InvocationPointer,\n                                applicationContext: (void*)Android.Runtime.JNIEnv.ToJniHandle(activity)\n                                );\n            Result xrResult;\n\n            xrResult = OxrAPI.InitializeLoader((LoaderInitInfoBaseHeaderKHR*)(&loaderInitInfo), out _xrAPI);\n            if (xrResult != Result.Success)\n            {\n                Console.WriteLine($\"Failed to initialize OpenXR Loader: {xrResult}\");\n                this._deviceState = XRDeviceState.NoPermissions;\n            }\n            else\n                Console.WriteLine(\"OpenXR Loader initialized successfully.\");\n\n            // Log available layers.\n            {\n                IList<string> layers = _xrAPI.GetLayers();\n                foreach (string layerName in layers)\n                {\n                    Console.WriteLine(\"Found layer {0}\", layerName);\n                }\n            }\n\n            // Log available extensions.\n            _extensions = _xrAPI.GetExtensions();\n            for (int i = 0; i < _extensions.Count; i++)\n            {\n                string extensionName = _extensions[i];\n                Console.WriteLine(\"Extension {0} = {1}\", i, extensionName);\n            }\n\n            this._deviceState = XRDeviceState.Disabled;\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            if (sessionMode == XRSessionMode.AR)\n            {\n                if (!this.IsARSupported)\n                    throw new ArgumentException(\"mode\");\n            }\n\n            _sessionMode = sessionMode;\n\n            GraphicsDevice graphicsDevice = _graphics.GraphicsDevice;\n            if (graphicsDevice == null)\n            {\n                throw new ArgumentNullException(\"graphics.GraphicsDevice\");\n                //_graphics.DeviceCreated += GraphicsDeviceCreated;\n            }\n\n            int result = Initialize(graphicsDevice);\n            if (result == 0)\n            {\n                ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate += ovrApp_HandleXrEvents;\n            }\n\n            return result;\n        }\n\n        bool stageBoundsDirty = true;\n        public unsafe override int BeginFrame()\n        {\n            ovrApp_HandleXrEvents();\n\n            bool notVisible;\n\n            if (_SessionActive == false)\n            {\n                //return -1;\n            }\n\n            Result xrResult;\n\n            if (_leftControllerAimSpace == null)\n            {\n                _leftControllerAimSpace = _oxrSession.CreateActionSpace(_aimPoseAction, _leftHandPath);\n            }\n            if (_rightControllerAimSpace == null)\n            {\n                _rightControllerAimSpace = _oxrSession.CreateActionSpace(_aimPoseAction, _rightHandPath);\n            }\n            if (_leftControllerGripSpace == null)\n            {\n                _leftControllerGripSpace = _oxrSession.CreateActionSpace(_gripPoseAction, _leftHandPath);\n            }\n            if (_rightControllerGripSpace == null)\n            {\n                _rightControllerGripSpace = _oxrSession.CreateActionSpace(_gripPoseAction, _rightHandPath);\n            }\n\n            // Create the scene if not yet created.\n            // The scene is created here to be able to show a loading icon.\n            if (!ovrScene_IsCreated(ref _Scene))\n            {\n                ovrScene_Create(ref _Scene);\n            }\n\n            if (stageBoundsDirty)\n            {\n                UpdateStageBounds();\n                stageBoundsDirty = false;\n            }\n\n            // NOTE: OpenXR does not use the concept of frame indices. Instead,\n            // XrWaitFrame returns the predicted display time.\n\n            //return 0;\n\n            xrResult = _oxrSession.WaitFrame(out FrameWaitInfo waitFrameInfo, out _frameState);\n            Debug.Assert(xrResult == Result.Success, \"WaitFrame\");\n\n            // Get the HMD pose, predicted for the middle of the time period during which\n            // the new eye images will be displayed. The number of frames predicted ahead\n            // depends on the pipeline depth of the engine and the synthesis rate.\n            // The better the prediction, the less black will be pulled in at the edges.\n            xrResult = _oxrSession.BeginFrame(out FrameBeginInfo beginFrameDesc);\n            Debug.Assert(xrResult == Result.Success, \"WaitFrame\");\n\n            long time = _frameState.PredictedDisplayTime;\n            //double time = _ovrSession.GetPredictedDisplayTime(_frameIndex);\n\n            xrResult = _oxrInstance.LocateSpace(\n                _HeadSpace, _LocalSpace, _frameState.PredictedDisplayTime, out _xfLocalFromHead, out SpaceLocationFlags localLocationFlags);\n            Debug.Assert(xrResult == Result.Success, \"LocateSpace\");\n\n            if (_LocalFloorSpace != null)\n            {\n                xrResult = _oxrInstance.LocateSpace(\n                    _HeadSpace, _LocalFloorSpace, _frameState.PredictedDisplayTime, out _xfLocalFloorFromHead, out SpaceLocationFlags localFloorLocationFlags);\n                Debug.Assert(xrResult == Result.Success, \"LocateSpace\");\n            }\n\n            xrResult = _oxrInstance.LocateSpace(\n                _HeadSpace, _CurrentStageSpace, _frameState.PredictedDisplayTime, out _xfStageFromHead, out SpaceLocationFlags stageLocationFlags);\n            Debug.Assert(xrResult == Result.Success, \"LocateSpace\");\n\n            xrResult = _oxrInstance.LocateSpace(\n                _LocalSpace, _CurrentStageSpace, _frameState.PredictedDisplayTime, out _xfStageFromLocal, out SpaceLocationFlags stage2LocationFlags);\n            Debug.Assert(xrResult == Result.Success, \"LocateSpace\");\n\n            uint projectionCapacityInput = ovrMaxNumEyes;\n            uint projectionCountOutput = projectionCapacityInput;\n\n            xrResult = _oxrSession.LocateView(\n                _viewportConfig.ViewConfigurationType,\n                _frameState.PredictedDisplayTime,\n                _HeadSpace,\n                out ViewState viewState,\n                projectionCapacityInput,\n                out projectionCountOutput,\n                _projections);\n            Debug.Assert(xrResult == Result.Success, \"xrLocateView\");\n\n\n            Pose3 HeadPose = (_isTrackFloorLevelEnabled) ? _xfLocalFloorFromHead.ToPose3() : _xfLocalFromHead.ToPose3();\n            _headsetState.HeadPose = HeadPose;\n\n            for (int eye = 0; eye < ovrMaxNumEyes; eye++)\n            {\n                Pose3 xfHeadFromEye   = _projections[eye].Pose.ToPose3();\n                Pose3 xfStageFromEye  = xfHeadFromEye * HeadPose;\n\n                _viewTransform[eye]   = xfStageFromEye;\n\n                switch (eye)\n                {\n                    case 0:\n                        _headsetState.LEyePose = _viewTransform[eye];\n                        break;\n                    case 1:\n                        _headsetState.REyePose = _viewTransform[eye];\n                        break;\n                }\n            }\n\n            // update input information\n            XrAction[] controller = new XrAction[] {_aimPoseAction, _gripPoseAction, _aimPoseAction, _gripPoseAction};\n            ActionPath[] subactionPath = new ActionPath[] { _leftHandPath, _leftHandPath, _rightHandPath, _rightHandPath };\n            OxrSpace[] controllerSpace = new OxrSpace[]\n            {\n                _leftControllerAimSpace,\n                _leftControllerGripSpace,\n                _rightControllerAimSpace,\n                _rightControllerGripSpace,\n            };\n\n            for (int i = 0; i < 4; i++)\n            {\n                // ActionPoseIsActive\n                xrResult = _oxrSession.GetActionStatePose(controller[i], subactionPath[i], out ActionStatePose state);\n                Debug.Assert(xrResult == Result.Success, \"GetActionStatePose\");\n                if (state.IsActive != 0)\n                {\n                    //Console.WriteLine(\"Controller {0} is active.\" + i);\n\n                    LocVel lv = GetSpaceLocVel(controllerSpace[i], _frameState.PredictedDisplayTime);\n                    _Scene.TrackedController[i].Active =\n                        (lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0;\n                    _Scene.TrackedController[i].Pose = lv.Pose;\n                    _Scene.TrackedController[i].LinearVelocity = lv.LinearVelocity;\n\n                    if (i == 0)\n                    {\n                        if ((lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0)\n                        {\n                            _handsState.LHandPose = _Scene.TrackedController[i].Pose;\n                            _handsState.LHandLinearVelocity = _Scene.TrackedController[i].LinearVelocity;\n                        }\n                        else\n                        {\n                            _handsState.LHandPose = Pose3.Identity;\n                            _handsState.LHandLinearVelocity = Vector3.Zero;\n                        }\n                    }\n                    if (i == 1)\n                    {\n                        if ((lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0)\n                        {\n                            _handsState.LGripPose = _Scene.TrackedController[i].Pose;\n                        }\n                        else\n                        {\n                            _handsState.LGripPose = Pose3.Identity;\n                        }\n                    }\n                    if (i == 2)\n                    {\n                        if ((lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0)\n                        {\n                            _handsState.RHandPose = _Scene.TrackedController[i].Pose;\n                            _handsState.RHandLinearVelocity = _Scene.TrackedController[i].LinearVelocity;\n                        }\n                        else\n                        {\n                            _handsState.RHandPose = Pose3.Identity;\n                            _handsState.RHandLinearVelocity = Vector3.Zero;\n                        }\n                    }\n                    if (i == 3)\n                    {\n                        if ((lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0)\n                        {\n                            _handsState.RGripPose = _Scene.TrackedController[i].Pose;\n                        }\n                        else\n                        {\n                            _handsState.RGripPose = Pose3.Identity;\n                        }\n                    }\n\n\n                    float dt = 0.01f; // use 0.2f for testing velocity vectors\n                    {\n                        _Scene.TrackedController[i].Pose.Translation += lv.LinearVelocity * dt;\n                    }\n                }\n                else\n                {\n                    //Console.WriteLine(\"Controller {0} is inactive.\"+i);\n\n                    _Scene.TrackedController[i].Clear();\n                }\n            }\n\n            // OpenXR input\n            {\n                // sync action data\n                xrResult = _oxrSession.SyncActions(_runningActionSet, 0);\n                if (xrResult != Result.SessionNotFocused)\n                    Debug.Assert(xrResult == Result.Success, \"SyncActions\");\n\n                // query input action states\n                ActionStateGetInfo getInfo = new ActionStateGetInfo(StructureType.ActionStateGetInfo);\n                getInfo.SubactionPath = 0;\n\n                ActionStateBoolean thumbstickLClickState = _oxrSession.GetActionStateBoolean(_actionButtonLeftThumbstick);\n                ActionStateBoolean thumbstickRClickState = _oxrSession.GetActionStateBoolean(_actionButtonRightThumbstick);\n\n                // Update app logic based on input\n                if ((thumbstickLClickState.ChangedSinceLastSync != 0 \n                  && thumbstickLClickState.CurrentState != 0) \n                ||  (thumbstickRClickState.ChangedSinceLastSync != 0\n                  && thumbstickRClickState.CurrentState != 0)\n                )\n                {\n                    float currentRefreshRate = 0.0f;\n                    xrResult = _pfnxrGetDisplayRefreshRateFB(_oxrSession.Session, &currentRefreshRate);\n                    Debug.Assert(xrResult == Result.Success, \"_pfnxrGetDisplayRefreshRateFB\");\n                    Console.WriteLine(\"Current Display Refresh Rate: {0}\", currentRefreshRate);\n\n                    int requestedRateIndex = (int) (_RequestedDisplayRefreshRateIndex++ %\n                        _NumSupportedDisplayRefreshRates);\n\n                    float requestRefreshRate =\n                        _SupportedDisplayRefreshRates[requestedRateIndex];\n                    Console.WriteLine(\"Requesting Display Refresh Rate: {0}\", requestRefreshRate);\n                    xrResult = _pfnxrRequestDisplayRefreshRateFB(_oxrSession.Session, requestRefreshRate);\n                    Debug.Assert(xrResult == Result.Success, \"_pfnxrRequestDisplayRefreshRateFB\");\n                }\n\n                // The KHR simple profile doesn't have these actions, so the getters will fail\n                // and flood the log with errors.\n                if (_useSimpleProfile == false)\n                {\n                    ActionStateFloat moveXStateL = _oxrSession.GetActionStateFloat(_moveOnXActionL);\n                    ActionStateFloat moveXStateR = _oxrSession.GetActionStateFloat(_moveOnXActionR);\n\n                    ActionStateFloat moveYStateL = _oxrSession.GetActionStateFloat(_moveOnYActionL);\n                    ActionStateFloat moveYStateR = _oxrSession.GetActionStateFloat(_moveOnYActionR);\n\n                    if (moveXStateL.ChangedSinceLastSync != 0)\n                    {\n                        //appQuadPositionX = moveYStateL.CurrentState; \n                        Console.WriteLine(\"L Grip \" + moveXStateL.CurrentState);\n                    }\n                    if (moveYStateR.ChangedSinceLastSync != 0)\n                    {\n                        //appQuadPositionX = moveXStateR.CurrentState;\n                        Console.WriteLine(\"R Grip \" + moveXStateR.CurrentState);\n                    }\n\n                    if (moveYStateL.ChangedSinceLastSync != 0)\n                    {\n                        //appQuadPositionY = moveYStateL.CurrentState; \n                        Console.WriteLine(\"L Trigger \" + moveYStateL.CurrentState);\n                    }\n                    if (moveYStateR.ChangedSinceLastSync != 0)\n                    {\n                        //appQuadPositionY = moveYStateR.CurrentState;\n                        Console.WriteLine(\"R Trigger \" + moveYStateR.CurrentState);\n                    }\n\n                    ActionStateVector2f moveJoystickStateL =\n                    _oxrSession.GetActionStateVector2(_moveOnJoystickActionL);\n                    if (moveJoystickStateL.ChangedSinceLastSync!=0)\n                    {\n                        //appCylPositionX = moveJoystickStateL.currentState.x;\n                        //appCylPositionY = moveJoystickStateL.currentState.y;\n                        //Console.WriteLine(\"L ThumpStick \" + moveJoystickStateL.CurrentState.X + \" , \" + moveJoystickStateL.CurrentState.Y);\n                    }\n\n                    ActionStateVector2f moveJoystickStateR =\n                    _oxrSession.GetActionStateVector2(_moveOnJoystickActionR);\n                    if (moveJoystickStateR.ChangedSinceLastSync != 0)\n                    {\n                        //appCylPositionX = moveJoystickStateR.currentState.x;\n                        //appCylPositionY = moveJoystickStateR.currentState.y;\n                        //Console.WriteLine(\"R ThumpStick \"+ moveJoystickStateR.CurrentState.X +\" , \"+ moveJoystickStateR.CurrentState.Y);\n                    }\n                }\n            }\n\n            return 0;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            return _headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            yield return XREye.Left;\n            yield return XREye.Right;\n        }\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            int eyeIndex = (int)eye - 1;\n            RenderTarget2D rt = _Renderer.FrameBuffer[eyeIndex].RenderTarget;\n            return rt;\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            int eyeIndex = (int)eye - 1;\n\n            GraphicsBackend graphicsBackend = _graphics.GraphicsDevice.Adapter.Backend;\n\n            Fovf fov = _projections[eyeIndex].Fov;\n            float tanLeft = (float)Math.Tan(fov.AngleLeft);\n            float tanRight = (float)Math.Tan(fov.AngleRight);\n            float tanDown = (float)Math.Tan(fov.AngleDown);\n            float tanUp = (float)Math.Tan(fov.AngleUp);\n\n            Matrix proj = XrMatrixf_CreateProjection(graphicsBackend, tanLeft, tanRight, tanUp, tanDown, znear, zfar);\n            return proj;\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            int eyeIndex = (int)eye - 1;\n\n            GraphicsDevice device = this._graphics.GraphicsDevice;\n            device.SetRenderTarget(null);\n\n            ovrRenderer_RenderFrame_Acquire(ref _Renderer.FrameBuffer[eyeIndex]);\n\n            uint textureIndex = _Renderer.FrameBuffer[eyeIndex].TextureSwapChainIndex;\n\n            uint txSC = _Renderer.FrameBuffer[eyeIndex].ColorSwapChainImage[textureIndex].Image;\n\n            //ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)_graphics.GraphicsDevice.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            //var GL = adapter.Ogl;\n\n            // bind DrawFramebuffer\n            Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlDrawFramebuffer, _Renderer.FrameBuffer[eyeIndex].FrameBuffers[textureIndex]);\n            //GL.BindFramebuffer(OpenGL.FramebufferTarget.DrawFramebuffer, _Renderer.FrameBuffer[eyeIndex].FrameBuffers[textureIndex]);\n            //GL.CheckGLError();\n\n            // fix oversaturation\n            Android.Opengl.GLES30.GlDisable(FRAMEBUFFER_SRGB);\n\n            // copy rendertarget to texture\n            {\n                int[] sourceFramebuffer = new int[1];\n                Android.Opengl.GLES30.GlGenFramebuffers(sourceFramebuffer.Length, sourceFramebuffer, 0);\n                //int sourceFramebuffer = GL.GenFramebuffer();\n                //GL.CheckGLError();\n\n                Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlReadFramebuffer, sourceFramebuffer[0]);\n                //GL.BindFramebuffer(OpenGL.FramebufferTarget.ReadFramebuffer, sourceFramebuffer);\n                //GL.CheckGLError();\n\n                Android.Opengl.GLES30.GlFramebufferTexture2D(\n                    Android.Opengl.GLES30.GlReadFramebuffer,\n                    Android.Opengl.GLES30.GlColorAttachment0,\n                    Android.Opengl.GLES30.GlTexture2d, (int)rt.GetSharedHandle(), 0);\n                //GL.FramebufferTexture2D(\n                //    OpenGL.FramebufferTarget.ReadFramebuffer,\n                //    OpenGL.FramebufferAttachment.ColorAttachment0,\n                //    OpenGL.TextureTarget.Texture2D, (int)rt.GetSharedHandle(), 0\n                //);\n                //GL.CheckGLError();\n\n                // copy and y-flip\n                Android.Opengl.GLES30.GlBlitFramebuffer(0, 0, rt.Width, rt.Height,\n                                   0, _Renderer.FrameBuffer[eyeIndex].Height - 1, _Renderer.FrameBuffer[eyeIndex].Width, 0,\n                                   Android.Opengl.GLES30.GlColorBufferBit, Android.Opengl.GLES30.GlNearest);\n                //GL.BlitFramebuffer(0, 0, rt.Width, rt.Height,\n                //                   0, _Renderer.FrameBuffer[eyeIndex].Height - 1, _Renderer.FrameBuffer[eyeIndex].Width, 0,\n                //                   OpenGL.ClearBufferMask.ColorBufferBit, OpenGL.BlitFramebufferFilter.Nearest);\n                //GL.CheckGLError();\n\n                Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlReadFramebuffer, sourceFramebuffer[0]);\n                //GL.BindFramebuffer(OpenGL.FramebufferTarget.ReadFramebuffer, 0);\n                //GL.CheckGLError();\n\n                Android.Opengl.GLES30.GlDeleteFramebuffers(sourceFramebuffer.Length, sourceFramebuffer, 0);\n                //GL.DeleteFramebuffer(sourceFramebuffer);\n                //GL.CheckGLError();\n            }\n\n            ovrRenderer_RenderFrame_Release(ref _Renderer, eyeIndex);\n\n            // unbind DrawFramebuffer\n            Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlDrawFramebuffer, 0);\n            //GL.BindFramebuffer(OpenGL.FramebufferTarget.DrawFramebuffer, 0);\n            //GL.CheckGLError();\n        }\n\n        public unsafe override int EndFrame()\n        {\n            Result xrResult;\n            \n            OxrSpace currentSpace = (_isTrackFloorLevelEnabled) ? _LocalFloorSpace : _LocalSpace;\n\n            // Set-up the compositor layers for this frame.\n            // NOTE: Multiple independent layers are allowed, but they need to be added\n            // in a depth consistent order.\n\n\n            uint LayerCount = 0;\n            _Layers = new ovrCompositorLayer_Union[ovrMaxLayerCount];\n\n            if (this.SessionMode == XRSessionMode.AR)\n            {\n                CompositionLayerPassthroughFB passthroughLayer = default;\n                passthroughLayer.Type = StructureType.CompositionLayerPassthroughFB;\n                passthroughLayer.LayerHandle = _passthroughLayerFB.PassthroughLayerFB;\n                passthroughLayer.Space = default;\n                passthroughLayer.Flags = CompositionLayerFlags.BlendTextureSourceAlphaBit;\n\n                _Layers[LayerCount++].PassthroughFB = passthroughLayer;\n            }\n\n            CompositionLayerProjectionView[] projection_layer_elements = new CompositionLayerProjectionView[]\n            {\n                new CompositionLayerProjectionView(StructureType.CompositionLayerProjectionView),\n                new CompositionLayerProjectionView(StructureType.CompositionLayerProjectionView),\n            };\n\n            {\n                fixed (CompositionLayerProjectionView* pprojection_layer_elements = projection_layer_elements)\n                {\n                    CompositionLayerProjection projection_layer = new CompositionLayerProjection(StructureType.CompositionLayerProjection);\n                    projection_layer.LayerFlags = CompositionLayerFlags.BlendTextureSourceAlphaBit;\n                    projection_layer.LayerFlags |= CompositionLayerFlags.CorrectChromaticAberrationBit;\n                    projection_layer.Space = currentSpace.Space;\n                    projection_layer.ViewCount = ovrMaxNumEyes;\n                    projection_layer.Views = pprojection_layer_elements;\n\n                    for (int eye = 0; eye < ovrMaxNumEyes; eye++)\n                    {\n                        projection_layer_elements[eye] = new CompositionLayerProjectionView(StructureType.CompositionLayerProjectionView);\n                        \n                        projection_layer_elements[eye].Pose = _viewTransform[eye].ToPosef();\n                        projection_layer_elements[eye].Fov = _projections[eye].Fov;\n\n                        projection_layer_elements[eye].SubImage = new SwapchainSubImage();\n                        projection_layer_elements[eye].SubImage.Swapchain =\n                                _Renderer.FrameBuffer[eye].ColorSwapChain.Swapchain;\n                        projection_layer_elements[eye].SubImage.ImageRect.Offset.X = 0;\n                        projection_layer_elements[eye].SubImage.ImageRect.Offset.Y = 0;\n                        projection_layer_elements[eye].SubImage.ImageRect.Extent.Width =\n                                (int)_Renderer.FrameBuffer[eye].ColorSwapChain.Width;\n                        projection_layer_elements[eye].SubImage.ImageRect.Extent.Height =\n                                (int)_Renderer.FrameBuffer[eye].ColorSwapChain.Height;\n                        projection_layer_elements[eye].SubImage.ImageArrayIndex = 0;\n                    }\n\n                    _Layers[LayerCount++].Projection = projection_layer;\n                }\n            }\n\n            // Build the cylinder layer\n            if (false)\n            {\n                float appCylPositionX = 0.0f;\n                float appCylPositionY = 0.0f;\n\n                CompositionLayerCylinderKHR cylinder_layer = new CompositionLayerCylinderKHR(StructureType.CompositionLayerCylinderKhr);\n                cylinder_layer.LayerFlags = CompositionLayerFlags.BlendTextureSourceAlphaBit;\n                cylinder_layer.Space = _LocalSpace.Space;\n                cylinder_layer.EyeVisibility = EyeVisibility.Both;\n                cylinder_layer.SubImage = new SwapchainSubImage();\n                cylinder_layer.SubImage.Swapchain = _Scene.CylinderSwapChain.Swapchain;\n                cylinder_layer.SubImage.ImageRect.Offset.X = 0;\n                cylinder_layer.SubImage.ImageRect.Offset.Y = 0;\n                cylinder_layer.SubImage.ImageRect.Extent.Width  = (int)_Scene.CylinderSwapChain.Width;\n                cylinder_layer.SubImage.ImageRect.Extent.Height = (int) _Scene.CylinderSwapChain.Height;\n                cylinder_layer.SubImage.ImageArrayIndex = 0;\n                Vector3f axis = new Vector3f(0.0f, 1.0f, 0.0f);\n                Vector3f pos = new Vector3f(appCylPositionX, appCylPositionY, 0.0f);\n                cylinder_layer.Pose.Orientation = XrQuaternionf_CreateFromAxisAngle(axis, -45.0f * (float)(Math.PI / 180.0f));\n                cylinder_layer.Pose.Position = pos;\n                cylinder_layer.Radius = 2.0f;\n\n                cylinder_layer.CentralAngle = (float)(Math.PI / 4.0);\n                cylinder_layer.AspectRatio = 2.0f;\n\n                _Layers[LayerCount++].Cylinder = cylinder_layer;\n            }\n\n            // Compose the layers for this frame.\n            CompositionLayerBaseHeader*[] layers = new CompositionLayerBaseHeader*[ovrMaxLayerCount];\n            fixed (ovrCompositorLayer_Union* p_Layers = _Layers)\n            for (int i = 0; i < LayerCount; i++)\n            {\n                layers[i] = &p_Layers[i].BaseHeader;\n            }\n\n            // end frame\n            fixed (CompositionLayerBaseHeader** players = layers)\n            {\n                FrameEndInfo endFrameInfo = new FrameEndInfo(StructureType.FrameEndInfo);\n                endFrameInfo.DisplayTime = _frameState.PredictedDisplayTime;\n                endFrameInfo.EnvironmentBlendMode = EnvironmentBlendMode.Opaque;\n                endFrameInfo.LayerCount = LayerCount;\n                endFrameInfo.Layers = (CompositionLayerBaseHeader**)players;\n\n                xrResult = _oxrSession.EndFrame(ref endFrameInfo);\n                Debug.Assert(xrResult == Result.Success, \"EndFrame\");\n            }\n\n            return 0;\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return _handsState;\n        }\n\n        public override void EndSessionAsync()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            if (enable == true)\n            {\n                if (!_isLocalFloorSupported)\n                    throw new NotImplementedException();\n            }\n\n            _isTrackFloorLevelEnabled = enable;\n        }\n\n        private void GraphicsDeviceCreated(object sender, EventArgs e)\n        {            \n        }\n        private void GraphicsDeviceResetting(object sender, EventArgs e)\n        {\n        }\n        private void GraphicsDeviceReset(object sender, EventArgs e)\n        {\n        }\n        private void GraphicsDeviceDisposing(object sender, EventArgs e)\n        {\n            this.Dispose();\n        }\n\n        private unsafe int Initialize(GraphicsDevice graphicsDevice)\n        {\n            // check supported feature level\n            switch (graphicsDevice.Adapter.Backend)\n            {\n                case GraphicsBackend.DirectX11:\n                case GraphicsBackend.DirectX12:\n                    //if (graphicsDevice.GraphicsProfile < GraphicsProfile.FL10_0)\n                    //    throw new InvalidOperationException(\"GraphicsProfile must be FL10_0 or higher.\");\n                    break;\n                case GraphicsBackend.OpenGL:\n                case GraphicsBackend.GLES:\n                    if (graphicsDevice.GraphicsProfile < GraphicsProfile.HiDef)\n                        throw new InvalidOperationException(\"GraphicsProfile must be HiDef or higher.\");\n                    break;\n            }\n            \n            Result xrResult;\n\n            // Check that the extensions required are present.\n            List<string> requiredExtensionNames = new List<string>();\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_EXT_local_floor));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_opengl_es_enable));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_EXT_performance_settings));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_android_thread_settings));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_composition_layer_cube));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_composition_layer_cylinder));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_composition_layer_equirect2));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_display_refresh_rate));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_color_space));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_swapchain_update_state));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_swapchain_update_state_opengl_es));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_foveation));\n            requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_foveation_configuration));\n\n            if (this.SessionMode == XRSessionMode.AR)\n                requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_passthrough));\n\n            // Check the list of required extensions against what is supported by the runtime.\n            uint numRequiredExtensions = (uint)requiredExtensionNames.Count;\n            for (int i = 0; i < numRequiredExtensions; i++)\n            {\n                if (_extensions.Contains(requiredExtensionNames[i]))\n                {\n                    Console.WriteLine(\"Found required extension {0}\", requiredExtensionNames[i]);\n                }\n                else\n                {\n                    Console.WriteLine(\"Failed to find required extension {0}\", requiredExtensionNames[i]);\n                    //throw new Exception();\n                }\n            }\n\n\n            // Create the OpenXR instance.\n            xrResult = _xrAPI.CreateInstance(_applicationName, _engineName,\n                                             requiredExtensionNames, out _oxrInstance);\n            if (xrResult != Result.Success)\n            {\n                Console.WriteLine(\"Failed to create XR instance: {0}.\", xrResult);\n                return (int)xrResult;\n            }\n            Console.WriteLine(\"OpenXR Instance initialized successfully. {0}.\", _oxrInstance.Instance.Handle);\n\n            Console.WriteLine(\"Runtime: {0}.\", _oxrInstance.RuntimeName);\n            Console.WriteLine(\"Version: {0}.\", _oxrInstance.RuntimeVersion);\n            \n            if (xrResult == Result.ErrorFormFactorUnavailable)\n            {\n                Console.WriteLine(\"Failed to get system; the specified form factor is not available. Is your headset connected?\");\n                return (int)xrResult;\n            }\n            if (xrResult != Result.Success)\n            {\n                Console.WriteLine(\"xrGetSystem failed, error {0}\", xrResult);\n                return (int)xrResult;\n            }\n            Console.WriteLine(\"systemId. {0}.\", _oxrInstance.SystemId);\n\n            SystemColorSpacePropertiesFB colorSpacePropertiesFB = new SystemColorSpacePropertiesFB(StructureType.SystemColorSpacePropertiesFB);\n\n            xrResult = _oxrInstance.GetSystemProperties(&colorSpacePropertiesFB, out SystemProperties systemProperties);\n            Debug.Assert(xrResult == Result.Success, \"GetSystemProperties\");\n\n            string systemName = Encoding.ASCII.GetString(systemProperties.SystemName, (int)SilkXR.MaxSystemNameSize);\n            systemName = systemName.TrimEnd('\\0');\n            Console.WriteLine(\"System Properties: Name={0} VendorId={1}\",\n               systemName,\n               systemProperties.VendorId);\n            Console.WriteLine(\"System Graphics Properties: MaxWidth={0} MaxHeight={1} MaxLayers={2}\",\n                systemProperties.GraphicsProperties.MaxSwapchainImageWidth,\n                systemProperties.GraphicsProperties.MaxSwapchainImageHeight,\n                systemProperties.GraphicsProperties.MaxLayerCount);\n            Console.WriteLine(\"System Tracking Properties: OrientationTracking={0} PositionTracking={1}\",\n                systemProperties.TrackingProperties.OrientationTracking != 0 ? \"True\" : \"False\",\n                systemProperties.TrackingProperties.PositionTracking != 0 ? \"True\" : \"False\");\n\n            Console.WriteLine(\"System Color Space Properties: colorspace={0}\", colorSpacePropertiesFB.ColorSpace);\n\n            Debug.Assert(ovrMaxLayerCount <= systemProperties.GraphicsProperties.MaxLayerCount);\n\n            // Get the graphics requirements.\n\n            xrResult = _oxrInstance.GetInstanceProcAddr<xrGetOpenGLESGraphicsRequirementsKHRDelegate>(\"xrGetOpenGLESGraphicsRequirementsKHR\",\n                out xrGetOpenGLESGraphicsRequirementsKHRDelegate Fun_xrGetOpenGLESGraphicsRequirementsKHR);\n            Debug.Assert(xrResult == Result.Success, \"GetInstanceProcAddr\");\n\n            GraphicsRequirementsOpenGLESKHR graphicsRequirements = new GraphicsRequirementsOpenGLESKHR(StructureType.GraphicsRequirementsOpenglESKhr);\n\n            xrResult = Fun_xrGetOpenGLESGraphicsRequirementsKHR(_oxrInstance.Instance, _oxrInstance.SystemId, &graphicsRequirements);\n            Debug.Assert(xrResult == Result.Success, \"Fun_xrGetOpenGLESGraphicsRequirementsKHR\");\n            OxrVersion minApiVersionSupported = new OxrVersion(graphicsRequirements.MinApiVersionSupported);\n            OxrVersion maxApiVersionSupported = new OxrVersion(graphicsRequirements.MaxApiVersionSupported);\n            Console.WriteLine(\"GLES MinApiVersionSupported {0}, MaxApiVersionSupported {1} \", minApiVersionSupported, maxApiVersionSupported);\n   \n            /*\n            var adapter = ((IPlatformGraphicsAdapter)_graphics.GraphicsDevice.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            var GL = adapter.Ogl;\n\n            // Check the graphics requirements.\n            int eglMajor = 0;\n            int eglMinor = 0;\n            GL.GetInteger(OpenGL.GetPName.MajorVersion, out eglMajor);\n            GL.CheckGLError();\n            GL.GetInteger(OpenGL.GetPName.MinorVersion, out eglMinor);\n            GL.CheckGLError();\n            OxrVersion eglVersion = new OxrVersion((short)eglMajor, (short)eglMinor, 0);\n            if (eglVersion.Packed < minApiVersionSupported.Packed\n            || eglVersion.Packed > maxApiVersionSupported.Packed)\n            {\n                Console.WriteLine(\"GLES version {0} not supported\", eglVersion);\n                return (int)xrResult;\n            }\n            */\n\n            _CpuLevel = CPU_LEVEL;\n            _GpuLevel = GPU_LEVEL;\n\n            Android.Opengl.EGLDisplay display = Android.Opengl.EGL14.EglGetCurrentDisplay();\n            Android.Opengl.EGLContext context = Android.Opengl.EGL14.EglGetCurrentContext();\n            int[] currentConfig = new int[1];\n            Android.Opengl.EGL14.EglQueryContext(display, context, Android.Opengl.EGL14.EglConfigId, currentConfig, 0);\n            int eglConfig = currentConfig[0];\n\n            // Create the OpenXR Session.\n            GraphicsBindingOpenGLESAndroidKHR graphicsBindingAndroidGLES = new GraphicsBindingOpenGLESAndroidKHR(StructureType.GraphicsBindingOpenglESAndroidKhr);\n            graphicsBindingAndroidGLES.Display = display.Handle;\n            graphicsBindingAndroidGLES.Context = context.Handle;\n            graphicsBindingAndroidGLES.Config = eglConfig;\n\n            //AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(_graphics.GraphicsDevice.PresentationParameters.DeviceWindowHandle);\n            //graphicsBindingAndroidGLES.Display = _graphics.GraphicsDevice.Adapter.MonitorHandle;\n            //graphicsBindingAndroidGLES.Context = gameWindow.EglContext.Handle;\n            //graphicsBindingAndroidGLES.Config = gameWindow.EglConfig.Handle;\n\n\n            xrResult = _oxrInstance.CreateSession(&graphicsBindingAndroidGLES, out _oxrSession);\n            if (xrResult != Result.Success)\n            {\n                Console.WriteLine(\"Failed to create XR session: {0}.\", xrResult);\n                return (int)xrResult;\n            }\n            Console.WriteLine(\"XR session created successfully.\");\n\n\n            // App only supports the primary stereo view config.\n            const ViewConfigurationType supportedViewConfigType = ViewConfigurationType.PrimaryStereo;\n\n            // Enumerate the viewport configurations.\n            xrResult = _oxrInstance.EnumerateViewConfiguration(out ViewConfigurationType[] viewportConfigurationTypes);\n            Console.WriteLine(\"Available Viewport Configuration Types: {0}\", viewportConfigurationTypes.Length);\n\n            ViewConfigurationView[] ViewConfigurationView = new ViewConfigurationView[ovrMaxNumEyes];\n\n            for (uint i = 0; i < viewportConfigurationTypes.Length; i++)\n            {\n                ViewConfigurationType viewportConfigType = viewportConfigurationTypes[i];\n\n                Console.WriteLine(\n                    \"Viewport configuration type {0} : {1}\",\n                    viewportConfigType,\n                    viewportConfigType == supportedViewConfigType ? \"Selected\" : \"\");\n\n                xrResult = _oxrInstance.GetViewConfigurationProperties(viewportConfigType, out _viewportConfig);\n                Debug.Assert(xrResult == Result.Success, \"GetViewConfigurationProperties\");\n\n                Console.WriteLine(\n                    \"FovMutable={0} ConfigurationType {0}\",\n                    _viewportConfig.FovMutable != 0 ? \"true\" : \"false\",\n                    _viewportConfig.ViewConfigurationType);\n\n                xrResult = _oxrInstance.EnumerateViewConfigurationView(viewportConfigType, out ViewConfigurationView[] elements);\n\n                if (elements.Length > 0)\n                {\n                    // Log the view config info for each view type for debugging purposes.\n                    for (uint e = 0; e < elements.Length; e++)\n                    {\n                        ViewConfigurationView element = elements[e];\n\n                        Console.WriteLine(\n                            \"Viewport [{0}]: Recommended Width={1} Height={2} SampleCount={3}\",\n                            e,\n                            element.RecommendedImageRectWidth,\n                            element.RecommendedImageRectHeight,\n                            element.RecommendedSwapchainSampleCount);\n\n                        Console.WriteLine(\n                            \"Viewport [{0}]: Max Width={1} Height={2} SampleCount={3}\",\n                            e,\n                            element.MaxImageRectWidth,\n                            element.MaxImageRectHeight,\n                            element.MaxSwapchainSampleCount);\n                    }\n\n                    // Cache the view config properties for the selected config type.\n                    if (viewportConfigType == supportedViewConfigType)\n                    {\n                        Debug.Assert(elements.Length == ovrMaxNumEyes);\n                        for (uint e = 0; e < elements.Length; e++)\n                        {\n                            ViewConfigurationView[e] = elements[e];\n                        }\n                    }\n                }\n                else\n                {\n                    Console.WriteLine(\"Empty viewport configuration type: {0}\", elements.Length);\n                }\n            }\n\n            // Get the viewport configuration info for the chosen viewport configuration type.\n            xrResult = _oxrInstance.GetViewConfigurationProperties(supportedViewConfigType, out ViewConfigurationProperties ViewportConfig);\n            Debug.Assert(xrResult == Result.Success, \"GetViewConfigurationProperties\");\n\n            // Enumerate the supported color space options for the system.\n            {\n                xrResult = _oxrInstance.GetInstanceProcAddr<xrEnumerateColorSpacesFB>(\"xrEnumerateColorSpacesFB\",\n                    out xrEnumerateColorSpacesFB Fun_xrEnumerateColorSpacesFB);\n                Debug.Assert(xrResult == Result.Success, \"xrGetInstanceProcAddr\");\n\n                uint colorSpaceCountOutput = 0;\n                xrResult = Fun_xrEnumerateColorSpacesFB(_oxrSession.Session, 0, &colorSpaceCountOutput, null);\n                Debug.Assert(xrResult == Result.Success, \"Fun_xrEnumerateColorSpacesFB\");\n\n                ColorSpaceFB[] colorSpaces = new ColorSpaceFB[colorSpaceCountOutput];\n\n                fixed (ColorSpaceFB* pcolorSpaces = colorSpaces)\n                    xrResult = Fun_xrEnumerateColorSpacesFB(_oxrSession.Session, colorSpaceCountOutput, &colorSpaceCountOutput, pcolorSpaces);\n                Debug.Assert(xrResult == Result.Success, \"Fun_xrEnumerateColorSpacesFB\");\n         \n                Console.WriteLine(\"Supported ColorSpaces:\");\n                for (uint i = 0; i < colorSpaceCountOutput; i++)\n                {\n                    Console.WriteLine(\"{0}:{1}\", i, colorSpaces[i]);\n                }\n\n                ColorSpaceFB requestColorSpace = ColorSpaceFB.AdobeRgbFB;\n\n                xrResult = _oxrInstance.GetInstanceProcAddr<xrSetColorSpaceFB>(\"xrSetColorSpaceFB\",\n                    out xrSetColorSpaceFB Fun_xrSetColorSpaceFB);\n                Debug.Assert(xrResult == Result.Success, \"xrGetInstanceProcAddr\");\n\n                xrResult = Fun_xrSetColorSpaceFB(_oxrSession.Session, requestColorSpace);\n                Debug.Assert(xrResult == Result.Success, \"Fun_xrEnumerateColorSpacesFB\");\n            }\n\n            // Get the supported display refresh rates for the system.\n            {\n                _oxrInstance.GetInstanceProcAddr<xrEnumerateDisplayRefreshRatesFB>(\"xrEnumerateDisplayRefreshRatesFB\",\n                    out xrEnumerateDisplayRefreshRatesFB pfnxrEnumerateDisplayRefreshRatesFB);\n\n                _NumSupportedDisplayRefreshRates = 0;\n                xrResult = pfnxrEnumerateDisplayRefreshRatesFB(_oxrSession.Session, 0, ref _NumSupportedDisplayRefreshRates, null);\n                Debug.Assert(xrResult == Result.Success, \"pfnxrEnumerateDisplayRefreshRatesFB\");\n\n                _SupportedDisplayRefreshRates = new float[_NumSupportedDisplayRefreshRates];\n                \n                fixed (float* pSupportedDisplayRefreshRates = _SupportedDisplayRefreshRates)\n                    xrResult = pfnxrEnumerateDisplayRefreshRatesFB(_oxrSession.Session, _NumSupportedDisplayRefreshRates, ref _NumSupportedDisplayRefreshRates, pSupportedDisplayRefreshRates);\n                Debug.Assert(xrResult == Result.Success, \"pfnxrEnumerateDisplayRefreshRatesFB\");\n              \n                Console.WriteLine(\"Supported Refresh Rates:\");\n                for (uint i = 0; i < _NumSupportedDisplayRefreshRates; i++)\n                {\n                    Console.WriteLine(\"{0}:{1}\", i, _SupportedDisplayRefreshRates[i]);\n                }\n\n                _oxrInstance.GetInstanceProcAddr<xrGetDisplayRefreshRateFB>(\"xrGetDisplayRefreshRateFB\",\n                    out _pfnxrGetDisplayRefreshRateFB);\n\n                float currentDisplayRefreshRate = 0.0f;\n                xrResult = _pfnxrGetDisplayRefreshRateFB(_oxrSession.Session, &currentDisplayRefreshRate);\n                Debug.Assert(xrResult == Result.Success, \"pfnxrGetDisplayRefreshRateFB\");\n                Console.WriteLine(\"Current System Display Refresh Rate: {0}\", currentDisplayRefreshRate);\n\n                _oxrInstance.GetInstanceProcAddr<xrRequestDisplayRefreshRateFB>(\"xrRequestDisplayRefreshRateFB\",\n                    out _pfnxrRequestDisplayRefreshRateFB);\n\n                // Test requesting the system default.\n                xrResult = _pfnxrRequestDisplayRefreshRateFB(_oxrSession.Session, 0.0f);\n                Debug.Assert(xrResult == Result.Success, \"pfnRequestDisplayRefreshRate\");\n                Console.WriteLine(\"Requesting system default display refresh rate\");\n            }\n\n            xrResult = _oxrSession.EnumerateReferenceSpaces(out ReferenceSpaceType[] referenceSpaces);\n            Debug.Assert(xrResult == Result.Success, \"EnumerateReferenceSpaces\");\n\n            for (uint i = 0; i < referenceSpaces.Length; i++)\n            {\n                if (referenceSpaces[i] == ReferenceSpaceType.LocalFloor)\n                    _isLocalFloorSupported = true;\n                if (referenceSpaces[i] == ReferenceSpaceType.Stage)\n                    _isStageSupported = true;\n            }\n\n            // Create a space to the first path\n            xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.View, XrPosef_CreateIdentity(), out _HeadSpace);\n            Debug.Assert(xrResult == Result.Success, \"CreateReferenceSpace\");\n\n            xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.Local, XrPosef_CreateIdentity(), out _LocalSpace);\n            Debug.Assert(xrResult == Result.Success, \"CreateReferenceSpace\");\n\n            if (_isLocalFloorSupported)\n            {\n                xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.LocalFloor, XrPosef_CreateIdentity(), out _LocalFloorSpace);\n                Debug.Assert(xrResult == Result.Success, \"CreateReferenceSpace\");\n                Console.WriteLine(\"Created local floor space\");\n            }\n\n            // Create a default stage space to use if SPACE_TYPE_STAGE is not\n            // supported, or calls to xrGetReferenceSpaceBoundsRect fail.\n            {\n                Posef poseInReferenceSpace = XrPosef_CreateIdentity();\n                poseInReferenceSpace.Position.Y = -1.6750f;\n                xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.Local, poseInReferenceSpace, out _FakeStageSpace);\n                Debug.Assert(xrResult == Result.Success, \"CreateReferenceSpace\");\n                Console.WriteLine(\"Created fake stage space from local space with offset\");\n                _CurrentStageSpace = _FakeStageSpace;\n            }\n\n            if (_isStageSupported)\n            {\n                xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.Stage, XrPosef_CreateIdentity(), out _StageSpace);\n                Debug.Assert(xrResult == Result.Success, \"CreateReferenceSpace\");\n                Console.WriteLine(\"Created stage space\");\n                _CurrentStageSpace = _StageSpace;\n            }\n\n            for (int eye = 0; eye < ovrMaxNumEyes; eye++)\n            {\n                _projections[eye].Type = StructureType.View;\n            }\n\n            // setup passthrough\n            if (this.SessionMode == XRSessionMode.AR)\n            {\n                _passthroughFB = _oxrSession.CreatePassthroughFB(default(PassthroughFlagsFB), _oxrInstance);\n                _passthroughLayerFB = _oxrSession.CreatePassthroughLayerFB(_passthroughFB, PassthroughLayerPurposeFB.ReconstructionFB, default(PassthroughFlagsFB), _oxrInstance);\n\n                xrResult = _passthroughFB.Start();\n                xrResult = _passthroughLayerFB.Resume();\n            }\n\n            // Actions\n            _runningActionSet =\n                _oxrInstance.CreateActionSet(1, \"running_action_set\", \"Action Set used on main loop\");\n\n            _actionButtonX = _runningActionSet.CreateAction(ActionType.BooleanInput, \"x_button\", \"Button X\", 0, null);\n            _actionButtonY = _runningActionSet.CreateAction(ActionType.BooleanInput, \"y_button\", \"Button Y\", 0, null);\n            _actionButtonLeftThumbstick = _runningActionSet.CreateAction(ActionType.BooleanInput, \"left_thumbstick_click\", \"Button LeftThumbstick\", 0, null);\n\n            _actionButtonA = _runningActionSet.CreateAction(ActionType.BooleanInput, \"a_button\", \"Button A\", 0, null);\n            _actionButtonB = _runningActionSet.CreateAction(ActionType.BooleanInput, \"b_button\", \"Button B\", 0, null);\n            _actionButtonRightThumbstick = _runningActionSet.CreateAction(ActionType.BooleanInput, \"right_thumbstick_click\", \"Button RightThumbstick\", 0, null);\n\n            _actionButtonXtouch = _runningActionSet.CreateAction(ActionType.BooleanInput, \"x_touch\", \"Touch  X\", 0, null);\n            _actionButtonYtouch = _runningActionSet.CreateAction(ActionType.BooleanInput, \"y_touch\", \"Touch  Y\", 0, null);\n            _actionButtonLeftThumbsticktouch = _runningActionSet.CreateAction(ActionType.BooleanInput, \"left_thumbstick_touch\", \"Touch LeftThumbstick\", 0, null);\n\n            _actionButtonAtouch = _runningActionSet.CreateAction(ActionType.BooleanInput, \"a_touch\", \"Touch  A\", 0, null);\n            _actionButtonBtouch = _runningActionSet.CreateAction(ActionType.BooleanInput, \"b_touch\", \"Touch  B\", 0, null);\n            _actionButtonRightThumbsticktouch = _runningActionSet.CreateAction(ActionType.BooleanInput, \"right_thumbstick_touch\", \"Touch RightThumbstick\", 0, null);\n\n            /*\n             Right Hand: right_menu_click\n                left_menu_click\n\n            Select Button (Often associated with the A or X buttons, depending on the controller):\n                right_select_click or right_a_click\n                left_select_click or left_x_click\n\n            Trigger Button:\n                right_trigger_click\n                left_trigger_click\n            Grip Button (Squeeze):\n                right_grip_click or right_squeeze_click\n                left_grip_click or left_squeeze_click\n            \n             */\n\n            _moveOnXActionL = _runningActionSet.CreateAction(\n                 ActionType.FloatInput, \"left_move_on_x\", \"Move on Left X\", 0, null);\n            _moveOnXActionR = _runningActionSet.CreateAction(\n                 ActionType.FloatInput, \"right_move_on_x\", \"Move on Right X\", 0, null);\n\n            _moveOnYActionL = _runningActionSet.CreateAction(\n                ActionType.FloatInput, \"left_move_on_y\", \"Move on Left Y\", 0, null);\n            _moveOnYActionR = _runningActionSet.CreateAction(\n                ActionType.FloatInput, \"right_move_on_y\", \"Move on Right Y\", 0, null);\n\n            _actionTriggerLeftTouch = _runningActionSet.CreateAction(\n                ActionType.FloatInput, \"left_trigger_touch\", \"Left Trigger Touch\", 0, null);\n            _actionTriggerRightTouch = _runningActionSet.CreateAction(\n                ActionType.FloatInput, \"right_trigger_touch\", \"Right Trigger Touch\", 0, null);\n\n            //_actionGripLeftTouch = _runningActionSet.CreateAction(\n            //    ActionType.FloatInput, \"left_squeeze_touch\", \"Left Squeeze Touch\", 0, null);\n            //_actionGripRightTouch = _runningActionSet.CreateAction(\n            //    ActionType.FloatInput, \"right_squeeze_touch\", \"Right Squeeze Touch\", 0, null);\n\n            _moveOnJoystickActionL = _runningActionSet.CreateAction(\n                ActionType.Vector2fInput, \"left_move_on_joy\", \"Move on Left Joy\", 0, null);\n            _moveOnJoystickActionR = _runningActionSet.CreateAction(\n                ActionType.Vector2fInput, \"right_move_on_joy\", \"Move on Right Joy\", 0, null);\n\n            _vibrateLeftFeedback = _runningActionSet.CreateAction(\n                ActionType.VibrationOutput,\n                \"vibrate_left_feedback\",\n                \"Vibrate Left Controller Feedback\",\n                0,\n                null);\n            _vibrateRightFeedback = _runningActionSet.CreateAction(\n                ActionType.VibrationOutput,\n                \"vibrate_right_feedback\",\n                \"Vibrate Right Controller Feedback\",\n                0,\n                null);\n\n            xrResult = _oxrInstance.StringToPath(\"/user/hand/left\", out _leftHandPath);\n            Debug.Assert(xrResult == Result.Success, \"StringToPath\");\n            xrResult = _oxrInstance.StringToPath(\"/user/hand/right\", out _rightHandPath);\n            Debug.Assert(xrResult == Result.Success, \"StringToPath\");\n            ActionPath[] handSubactionPaths = new ActionPath[] { _leftHandPath, _rightHandPath };\n\n            _aimPoseAction = _runningActionSet.CreateAction(\n                ActionType.PoseInput, \"aim_pose\", null, 2, handSubactionPaths);\n            _gripPoseAction = _runningActionSet.CreateAction(\n                ActionType.PoseInput, \"grip_pose\", null, 2, handSubactionPaths);\n\n            ActionPath interactionProfilePath = default;\n            ActionPath interactionProfilePathTouch = default;\n            ActionPath interactionProfilePathKHRSimple = default;\n\n            xrResult = _oxrInstance.StringToPath(\"/interaction_profiles/oculus/touch_controller\", out interactionProfilePathTouch);\n            Debug.Assert(xrResult == Result.Success, \"StringToPath\");\n            xrResult = _oxrInstance.StringToPath(\"/interaction_profiles/khr/simple_controller\", out interactionProfilePathKHRSimple);\n            Debug.Assert(xrResult == Result.Success, \"StringToPath\");\n\n            // Toggle this to force simple as a first choice, otherwise use it as a last resort\n            _useSimpleProfile = false; /// true;\n            if (_useSimpleProfile)\n            {\n                Console.WriteLine(\"xrSuggestInteractionProfileBindings found bindings for Khronos SIMPLE controller\");\n                interactionProfilePath = interactionProfilePathKHRSimple;\n            }\n            else\n            {\n                // Query Set\n                OxrActionSet queryActionSet =\n                    _oxrInstance.CreateActionSet(1, \"query_action_set\", \"Action Set used to query device caps\");\n                XrAction dummyAction = queryActionSet.CreateAction(\n                    ActionType.BooleanInput, \"dummy_action\", \"Dummy Action\", 0, null);\n\n                // Map bindings\n                ActionSuggestedBinding[] bindings = new ActionSuggestedBinding[1];\n                bindings[0] = _oxrInstance.ActionSuggestedBinding(dummyAction, \"/user/hand/right/input/system/click\");\n\n                // Try all\n                Result suggestTouchResult =\n                        _oxrInstance.SuggestInteractionProfileBinding(interactionProfilePathTouch, bindings);\n                    Debug.Assert(suggestTouchResult == Result.Success, \"StringToPath\");\n\n                if (Result.Success == suggestTouchResult)\n                {\n                    Console.WriteLine(\"xrSuggestInteractionProfileBindings found bindings for QUEST controller\");\n                    interactionProfilePath = interactionProfilePathTouch;\n                }\n                \n                if (interactionProfilePath.Handle == 0)\n                {   \n                    // Simple as a fallback\n                    bindings[0] = _oxrInstance.ActionSuggestedBinding(dummyAction, \"/user/hand/right/input/select/click\");\n\n                    Result suggestKHRSimpleResult =\n                        _oxrInstance.SuggestInteractionProfileBinding(interactionProfilePathKHRSimple, bindings);\n                    Debug.Assert(suggestKHRSimpleResult == Result.Success, \"xrSuggestInteractionProfileBindings\");\n\n                    if (Result.Success == suggestKHRSimpleResult)\n                    {\n                        Console.WriteLine(\n                            \"xrSuggestInteractionProfileBindings found bindings for Khronos SIMPLE controller\");\n                        interactionProfilePath = interactionProfilePathKHRSimple;\n                    }\n                    else\n                    {\n                        Console.WriteLine(\"xrSuggestInteractionProfileBindings did NOT find any bindings.\");\n                        Debug.Assert(false);\n                    }\n                }\n            }\n\n            // Action creation\n            {\n                // Map bindings\n                ActionSuggestedBinding[] bindings = null;\n                if (interactionProfilePath == interactionProfilePathTouch)\n                {\n                    bindings = new ActionSuggestedBinding[]\n                    {\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonX, \"/user/hand/left/input/x/click\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonY, \"/user/hand/left/input/y/click\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonLeftThumbstick, \"/user/hand/left/input/thumbstick/click\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonA, \"/user/hand/right/input/a/click\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonB, \"/user/hand/right/input/b/click\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonRightThumbstick, \"/user/hand/right/input/thumbstick/click\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonXtouch, \"/user/hand/left/input/x/touch\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonYtouch, \"/user/hand/left/input/y/touch\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonLeftThumbsticktouch, \"/user/hand/left/input/thumbstick/touch\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonAtouch, \"/user/hand/right/input/a/touch\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonBtouch, \"/user/hand/right/input/b/touch\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionButtonRightThumbsticktouch, \"/user/hand/right/input/thumbstick/touch\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_moveOnYActionL, \"/user/hand/left/input/trigger/value\"),\n                        _oxrInstance.ActionSuggestedBinding(_moveOnYActionR, \"/user/hand/right/input/trigger/value\"),\n                        _oxrInstance.ActionSuggestedBinding(_moveOnXActionL, \"/user/hand/left/input/squeeze/value\"),\n                        _oxrInstance.ActionSuggestedBinding(_moveOnXActionR, \"/user/hand/right/input/squeeze/value\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_actionTriggerLeftTouch, \"/user/hand/left/input/trigger/touch\"),\n                        _oxrInstance.ActionSuggestedBinding(_actionTriggerRightTouch, \"/user/hand/right/input/trigger/touch\"),\n\n                        // BUG: Grip touch doesn't work on native OpenXR.\n                        // https://communityforums.atmeta.com/t5/OpenXR-Development/unable-to-get-grip-button-input-on-quest-1-getting-path/td-p/833021\n                        //_oxrInstance.ActionSuggestedBinding(_actionGripLeftTouch, \"/user/hand/left/input/squeeze/touch\"),\n                        //_oxrInstance.ActionSuggestedBinding(_actionGripRightTouch, \"/user/hand/right/input/squeeze/touch\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_moveOnJoystickActionL, \"/user/hand/left/input/thumbstick\"),\n                        _oxrInstance.ActionSuggestedBinding(_moveOnJoystickActionR, \"/user/hand/right/input/thumbstick\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_vibrateLeftFeedback, \"/user/hand/left/output/haptic\"),\n                        _oxrInstance.ActionSuggestedBinding(_vibrateRightFeedback, \"/user/hand/right/output/haptic\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_aimPoseAction, \"/user/hand/left/input/aim/pose\"),\n                        _oxrInstance.ActionSuggestedBinding(_aimPoseAction, \"/user/hand/right/input/aim/pose\"),\n                        _oxrInstance.ActionSuggestedBinding(_gripPoseAction, \"/user/hand/left/input/grip/pose\"),\n                        _oxrInstance.ActionSuggestedBinding(_gripPoseAction, \"/user/hand/right/input/grip/pose\"),\n                    };\n                }\n\n                if (interactionProfilePath == interactionProfilePathKHRSimple)\n                {\n                    bindings = new ActionSuggestedBinding[]\n                    {\n                        _oxrInstance.ActionSuggestedBinding(_vibrateLeftFeedback, \"/user/hand/left/output/haptic\"),\n                        _oxrInstance.ActionSuggestedBinding(_vibrateRightFeedback, \"/user/hand/right/output/haptic\"),\n\n                        _oxrInstance.ActionSuggestedBinding(_aimPoseAction, \"/user/hand/left/input/aim/pose\"),\n                        _oxrInstance.ActionSuggestedBinding(_aimPoseAction, \"/user/hand/right/input/aim/pose\"),\n                        _oxrInstance.ActionSuggestedBinding(_gripPoseAction, \"/user/hand/left/input/grip/pose\"),\n                        _oxrInstance.ActionSuggestedBinding(_gripPoseAction, \"/user/hand/right/input/grip/pose\"),\n                    };\n                }\n\n                xrResult = _oxrInstance.SuggestInteractionProfileBinding(interactionProfilePath, bindings);\n                Debug.Assert(xrResult == Result.Success, \"SuggestInteractionProfileBinding\");\n\n                // Attach to session\n                xrResult = _oxrSession.AttachSessionActionSets(_runningActionSet);\n                Debug.Assert(xrResult == Result.Success, \"AttachSessionActionSets\");\n\n\n                // Enumerate actions                    \n                XrAction[] actionsToEnumerate =\n                {\n                    _actionButtonX,\n                    _actionButtonY,\n                    _actionButtonRightThumbstick,\n                    _actionButtonA,\n                    _actionButtonB,\n                    _actionButtonLeftThumbstick,\n\n                    _actionButtonXtouch,\n                    _actionButtonYtouch,\n                    _actionButtonRightThumbsticktouch,\n                    _actionButtonAtouch,\n                    _actionButtonBtouch,\n                    _actionButtonLeftThumbsticktouch,\n\n                    _moveOnXActionL,\n                    _moveOnXActionR,\n                    _moveOnYActionL,\n                    _moveOnYActionR,\n\n                    _actionTriggerLeftTouch,\n                    _actionTriggerRightTouch,\n                    //_actionGripLeftTouch,\n                    //_actionGripRightTouch,\n\n                    _moveOnJoystickActionL,\n                    _moveOnJoystickActionR,\n\n                    _vibrateLeftFeedback,\n                    _vibrateRightFeedback,\n                    _aimPoseAction,\n                    _gripPoseAction,\n                };\n\n                for (int i = 0; i < actionsToEnumerate.Length; i++)\n                {\n                    ulong[] actionPathsBuffer = _oxrSession.EnumerateBoundSourcesForAction(actionsToEnumerate[i]);\n\n                    Console.WriteLine(\n                        \"xrEnumerateBoundSourcesForAction action={0} count={1}\",\n                        actionsToEnumerate[i].Handle,\n                        actionPathsBuffer.Length);\n\n                    for (uint a = 0; a < actionPathsBuffer.Length; a++)\n                    {\n                        InputSourceLocalizedNameGetInfo nameGetInfo = new InputSourceLocalizedNameGetInfo(StructureType.InputSourceLocalizedNameGetInfo);\n                        nameGetInfo.SourcePath = actionPathsBuffer[a];\n                        nameGetInfo.WhichComponents = InputSourceLocalizedNameFlags.UserPathBit\n                                                    | InputSourceLocalizedNameFlags.InteractionProfileBit\n                                                    | InputSourceLocalizedNameFlags.ComponentBit;\n\n                        uint stringCount = 0;\n                        xrResult = _oxrInstance.OXRAPI.Api.GetInputSourceLocalizedName(_oxrSession.Session, &nameGetInfo, 0, &stringCount, (byte*)null);\n                        Debug.Assert(xrResult == Result.Success, \"GetInputSourceLocalizedName\");\n                            \n                        char[] stringBuffer = new char[stringCount];\n                        string localizedName;\n\n                        fixed (void* pstringBuffer = stringBuffer)\n                        {\n                            xrResult = _oxrInstance.OXRAPI.Api.GetInputSourceLocalizedName(_oxrSession.Session, &nameGetInfo, stringCount, &stringCount, (byte*)pstringBuffer);\n                            Debug.Assert(xrResult == Result.Success, \"GetInputSourceLocalizedName\");\n                            localizedName = Encoding.ASCII.GetString((byte*)pstringBuffer, (int)stringCount);\n                            Console.Write(\"Bound source: \" + localizedName);\n                        }\n\n\n                        string strpathStr;\n                        byte[] pathStr = new byte[stringCount];\n                        fixed (byte* ppathStr = pathStr)\n                        {\n                            uint strLen = 0;\n                            xrResult = _oxrInstance.OXRAPI.Api.PathToString(\n                                _oxrInstance.Instance,\n                                actionPathsBuffer[a],\n                                stringCount,\n                                &strLen,\n                                ppathStr);\n\n                            strpathStr = Encoding.ASCII.GetString((byte*)ppathStr, (int)strLen);\n                        }\n\n                        Console.Write(\n                            \"  -> path = {0} `{1}` -> `{2}`\",\n                            actionPathsBuffer[a],\n                            strpathStr,\n                            localizedName //stringBuffer\n                            );\n                    }\n                }\n\n\n                // Create the frame buffers.\n                for (int eye = 0; eye < ovrMaxNumEyes; eye++)\n                {\n                    ovrFramebuffer_Create(\n                        ref _Renderer.FrameBuffer[eye],\n                        SurfaceFormat.ColorSRgba, //SRGB8_ALPHA8\n                        (int)ViewConfigurationView[0].RecommendedImageRectWidth,\n                        (int)ViewConfigurationView[0].RecommendedImageRectHeight,\n                        NUM_MULTI_SAMPLES\n                        );\n                }\n\n                ovrRenderer_SetFoveation(\n                    ref _Renderer,\n                    FoveationLevelFB.HighFB,\n                    0,\n                    FoveationDynamicFB.DisabledFB\n                    );\n\n                //CreateDefaultLayer(graphicsDevice,\n                //    SurfaceFormat.Color,\n                //    DepthFormat.Depth24Stencil8,\n                //    4, 1,\n                //    out _layer);\n\n                TouchController.DeviceHandle = new ConcreteTouchControllerStrategy(this);\n                this._deviceState = XRDeviceState.Enabled;\n\n                return 0;\n            }\n        }\n\n        private unsafe bool ovrFramebuffer_Create(\n            ref ovrFramebuffer frameBuffer,\n            SurfaceFormat colorFormat,\n            int width,\n            int height,\n            int multisamples)\n        {\n            Result xrResult;\n\n            frameBuffer.Width = width;\n            frameBuffer.Height = height;\n            frameBuffer.Multisamples = multisamples;\n\n            // Get the number of supported formats.\n            xrResult = _oxrSession.EnumerateSwapchainFormats(out long[] supportedFormats);\n            Debug.Assert(xrResult == Result.Success, \"EnumerateSwapchainFormats\");\n            Array.Sort<long>(supportedFormats);\n\n            long requestedGLFormat = SRGB8_ALPHA8;\n\n            // Verify the requested format is supported.\n            long selectedFormat = 0;\n            for (uint i = 0; i < supportedFormats.Length; i++)\n            {\n                if (supportedFormats[i] == requestedGLFormat)\n                {\n                    selectedFormat = supportedFormats[i];\n                    break;\n                }\n            }\n            Debug.Assert(selectedFormat != 0, \"requestedGLFormat not supported.\");\n            if (selectedFormat == 0)\n            {\n                Console.WriteLine(\"Format not supported\");\n            }\n\n            SwapchainCreateInfo swapChainCreateInfo = new SwapchainCreateInfo(StructureType.SwapchainCreateInfo);\n            swapChainCreateInfo.UsageFlags = SwapchainUsageFlags.SampledBit\n                                            | SwapchainUsageFlags.ColorAttachmentBit;\n            swapChainCreateInfo.Format = selectedFormat;\n            swapChainCreateInfo.SampleCount = 1;\n            swapChainCreateInfo.Width = (uint)width;\n            swapChainCreateInfo.Height = (uint)height;\n            swapChainCreateInfo.FaceCount = 1;\n            swapChainCreateInfo.ArraySize = 1;\n            swapChainCreateInfo.MipCount = 1;\n\n            // Enable Foveation on this swapchain\n            SwapchainCreateInfoFoveationFB swapChainFoveationCreateInfo = new SwapchainCreateInfoFoveationFB(StructureType.SwapchainCreateInfoFoveationFB);\n            swapChainCreateInfo.Next = &swapChainFoveationCreateInfo;\n\n            // Create the swapchain.\n            xrResult = _oxrSession.CreateSwapchain(ref swapChainCreateInfo, out frameBuffer.ColorSwapChain);\n            Debug.Assert(xrResult == Result.Success, \"CreateSwapchain\");\n            // Get the number of swapchain images.\n            frameBuffer.TextureSwapChainLength = frameBuffer.ColorSwapChain.GetImagesCount();\n\n            // Allocate the swapchain images array.\n            SwapchainImageOpenGLESKHR[] colorSwapChainImage = new SwapchainImageOpenGLESKHR[frameBuffer.TextureSwapChainLength];\n            frameBuffer.ColorSwapChainImage = colorSwapChainImage;\n\n            // Populate the swapchain image array.\n            for (uint i = 0; i < frameBuffer.TextureSwapChainLength; i++)\n            {\n                colorSwapChainImage[i].Type = StructureType.SwapchainImageOpenglESKhr;\n                colorSwapChainImage[i].Next = null;\n            }\n\n            fixed (SwapchainImageOpenGLESKHR* pcolorSwapChainImage = colorSwapChainImage)\n            {\n                xrResult = _oxrInstance.OXRAPI.Api.EnumerateSwapchainImages(\n                    frameBuffer.ColorSwapChain.Swapchain,\n                    frameBuffer.TextureSwapChainLength,\n                    ref frameBuffer.TextureSwapChainLength,\n                    (SwapchainImageBaseHeader*)pcolorSwapChainImage);\n                Debug.Assert(xrResult == Result.Success, \"EnumerateSwapchainImages\");\n            }\n\n            frameBuffer.RenderTarget = new RenderTarget2D(_graphics.GraphicsDevice,\n                        width, height,\n                        false, SurfaceFormat.Color,\n                        DepthFormat.Depth24Stencil8,\n                        4,\n                        RenderTargetUsage.DiscardContents,\n                        true\n                        );\n\n            frameBuffer.FrameBuffers = new int[frameBuffer.TextureSwapChainLength];\n\n            Android.Opengl.GLES30.GlGenFramebuffers((int)frameBuffer.TextureSwapChainLength, frameBuffer.FrameBuffers, 0);\n\n            //ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)_graphics.GraphicsDevice.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n            //var GL = adapter.Ogl;\n\n            for (uint i = 0; i < frameBuffer.TextureSwapChainLength; i++)\n            {\n                // Create the color buffer texture.\n                uint colorTexture = frameBuffer.ColorSwapChainImage[i].Image;\n\n                // create DrawFramebuffer\n                //frameBuffer.FrameBuffers[i] = GL.GenFramebuffer();\n                //GL.CheckGLError();\n\n                Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlDrawFramebuffer, frameBuffer.FrameBuffers[i]);\n                //GL.BindFramebuffer(OpenGL.FramebufferTarget.DrawFramebuffer, frameBuffer.FrameBuffers[i]);\n                //GL.CheckGLError();\n\n                Android.Opengl.GLES30.GlFramebufferTexture2D(\n                    Android.Opengl.GLES30.GlDrawFramebuffer,\n                    Android.Opengl.GLES30.GlColorAttachment0,\n                    Android.Opengl.GLES30.GlTexture2d, (int)colorTexture, 0);\n                //GL.FramebufferTexture2D(\n                //  OpenGL.FramebufferTarget.DrawFramebuffer,\n                //  OpenGL.FramebufferAttachment.ColorAttachment0,\n                //  OpenGL.TextureTarget.Texture2D, (int)colorTexture, 0);\n                //GL.CheckGLError();\n            }\n\n            return true;\n        }\n\n\n        public unsafe delegate Result xrGetOpenGLESGraphicsRequirementsKHRDelegate(Instance xrInstance, ulong systemId, GraphicsRequirementsOpenGLESKHR* graphicsRequirements);\n        public unsafe delegate Result xrEnumerateColorSpacesFB(Session xrSession, uint count, uint* outcount, ColorSpaceFB* colorSpaces);\n        public unsafe delegate Result xrSetColorSpaceFB(Session xrSession, ColorSpaceFB colorSpace);\n\n        public unsafe delegate Result xrEnumerateDisplayRefreshRatesFB(Session xrSession, uint count, ref uint outcount, float* displayRefreshRates);\n        public unsafe delegate Result xrGetDisplayRefreshRateFB(Session xrSession, float* displayRefreshRate);\n        public unsafe delegate Result xrRequestDisplayRefreshRateFB(Session xrSession, float displayRefreshRate);\n\n        public unsafe delegate Result xrPerfSettingsSetPerformanceLevelEXT(Session xrSession, PerfSettingsDomainEXT perfDomain, PerfSettingsLevelEXT perfLevel);\n\n        const int ovrMaxLayerCount = 16;\n        const int ovrMaxNumEyes = 2;\n\n        const int CPU_LEVEL = 2;\n        const int GPU_LEVEL = 3;\n        const int NUM_MULTI_SAMPLES = 4;\n\n        public struct ovrRenderer\n        {\n            public ovrFramebuffer[] FrameBuffer = new ovrFramebuffer[ovrMaxNumEyes];\n\n            public ovrRenderer()\n            {\n            }\n        }\n\n        private long ToXrTime(double sec)\n        {\n            return (long)(sec * 1000 * 1000 * 1000); //nSec\n        }\n\n        private unsafe LocVel GetSpaceLocVel(OxrSpace space, long time)\n        {\n            Result xrResult;\n\n            OxrSpace currentSpace = (_isTrackFloorLevelEnabled) ? _LocalFloorSpace : _LocalSpace;\n\n            SpaceVelocity velocity = new SpaceVelocity(StructureType.SpaceVelocity);\n\n            xrResult = _oxrInstance.LocateSpace(space, currentSpace, time, &velocity,\n                out Posef pose, out SpaceLocationFlags locationFlags);\n            Debug.Assert(xrResult == Result.Success, \"LocateSpace\");\n\n            LocVel lv = new LocVel();\n            lv.LocationFlags = locationFlags;\n            lv.Pose = pose.ToPose3();\n\n            lv.VelocityFlags = velocity.VelocityFlags;\n            lv.LinearVelocity = velocity.LinearVelocity.ToVector3();\n            lv.AngularVelocity = velocity.AngularVelocity.ToVector3();\n\n            return lv;\n        }\n\n        public static void CreatePerspectiveFieldOfView(float leftTan, float rightTan, float bottomTan, float topTan, float nearPlaneDistance, float farPlaneDistance, out Matrix result)\n        {\n            if (nearPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"nearPlaneDistance <= 0\");\n            }\n            if (farPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"farPlaneDistance <= 0\");\n            }\n            if (nearPlaneDistance >= farPlaneDistance)\n            {\n                throw new ArgumentException(\"nearPlaneDistance >= farPlaneDistance\");\n            }\n\n            result.M11 = (2f) / (leftTan + rightTan);\n            result.M12 = result.M13 = result.M14 = 0;\n\n            result.M22 = (2f) / (topTan + bottomTan);\n            result.M21 = result.M23 = result.M24 = 0;\n\n            result.M31 = (rightTan - leftTan) / (leftTan + rightTan);\n            result.M32 = (topTan - bottomTan) / (bottomTan + topTan);\n            result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);\n            result.M34 = -1;\n\n            result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance);\n            result.M41 = result.M42 = result.M44 = 0;\n        }\n\n        public struct LocVel\n        {\n            public SpaceLocationFlags LocationFlags;\n            public Pose3 Pose;\n\n            public SpaceVelocityFlags VelocityFlags;\n            public Vector3 LinearVelocity;\n            public Vector3 AngularVelocity;\n\n        }\n\n        // https://github.com/KhronosGroup/OpenXR-SDK/blob/main/src/common/xr_linear.h\n\n        static unsafe Vector3f XrVector3f_Set(float value)\n        {\n            Vector3f result;\n            result.X = value;\n            result.Y = value;\n            result.Z = value;\n            return result;\n        }\n\n        static unsafe Vector3f XrVector3f_Add(Vector3f a, Vector3f b)\n        {\n            Vector3f result;\n            result.X = a.X + b.X;\n            result.Y = a.Y + b.Y;\n            result.Z = a.Z + b.Z;\n            return result;\n        }\n\n        static unsafe Vector3f XrVector3f_Scale(Vector3f a, float scaleFactor)\n        {\n            Vector3f result;\n            result.X = a.X * scaleFactor;\n            result.Y = a.Y * scaleFactor;\n            result.Z = a.Z * scaleFactor;\n            return result;\n        }\n\n        static unsafe float XrRcpSqrt(float x) \n        {\n            float SMALLEST_NON_DENORMAL = 1.1754943508222875e-038f;  // ( 1U << 23 )\n            float rcp = (x >= SMALLEST_NON_DENORMAL) ? 1.0f / (float)Math.Sqrt(x) : 1.0f;\n            return rcp;\n        }\n\n        static unsafe Quaternionf XrQuaternionf_CreateIdentity()\n        {\n            Quaternionf result;\n            result.X = 0.0f;\n            result.Y = 0.0f;\n            result.Z = 0.0f;\n            result.W = 1.0f;\n            return result;\n        }\n\n        static unsafe Quaternionf XrQuaternionf_CreateFromAxisAngle(Vector3f axis, float angleInRadians) \n        {\n            Quaternionf result;\n            float s = (float)Math.Sin(angleInRadians / 2.0f);\n            float lengthRcp = XrRcpSqrt(axis.X * axis.X + axis.Y * axis.Y + axis.Z * axis.Z);\n            result.X = s * axis.X * lengthRcp;\n            result.Y = s * axis.Y * lengthRcp;\n            result.Z = s * axis.Z * lengthRcp;\n            result.W = (float)Math.Cos(angleInRadians / 2.0f);\n            return result;\n        }\n\n        static unsafe Quaternionf XrQuaternionf_Multiply(Quaternionf a, Quaternionf b)\n        {\n            Quaternionf result;\n            result.X = (b.W * a.X) + (b.X * a.W) + (b.Y * a.Z) - (b.Z * a.Y);\n            result.Y = (b.W * a.Y) - (b.X * a.Z) + (b.Y * a.W) + (b.Z * a.X);\n            result.Z = (b.W * a.Z) + (b.X * a.Y) - (b.Y * a.X) + (b.Z * a.W);\n            result.W = (b.W * a.W) - (b.X * a.X) - (b.Y * a.Y) - (b.Z * a.Z);\n            return result;\n        }\n\n        static unsafe Quaternionf XrQuaternionf_Invert(Quaternionf q)\n        {\n            Quaternionf result;\n            result.X = -q.X;\n            result.Y = -q.Y;\n            result.Z = -q.Z;\n            result.W =  q.W;\n            return result;\n        }\n\n        static unsafe Vector3f XrQuaternionf_RotateVector3f(Quaternionf a, Vector3f v) \n        {\n            Quaternionf q = new Quaternionf(v.X, v.Y, v.Z, 0.0f);\n            Quaternionf aq = XrQuaternionf_Multiply(q, a);\n            Quaternionf aInv = XrQuaternionf_Invert(a);\n            Quaternionf aqaInv = XrQuaternionf_Multiply(aInv, aq);\n\n            Vector3f result;\n            result.X = aqaInv.X;\n            result.Y = aqaInv.Y;\n            result.Z = aqaInv.Z;\n            return result;\n        }\n\n        static unsafe Vector3f XrQuaternionf_RotateVector3f_Opt(Quaternionf q, Vector3f vec)\n        {\n            Vector4f qvec;\n            qvec.X = +(q.W * vec.X) -(q.Z * vec.Y) +(q.Y * vec.Z);\n            qvec.Y = +(q.Z * vec.X) +(q.W * vec.Y) -(q.X * vec.Z);\n            qvec.Z = -(q.Y * vec.X) +(q.X * vec.Y) +(q.W * vec.Z);\n            qvec.W = -(q.X * vec.X) -(q.Y * vec.Y) -(q.Z * vec.Z);\n\n            Vector3f result;\n            result.X = +(qvec.X * q.W) -(qvec.Y * q.Z) +(qvec.Z * q.Y) -(qvec.W * q.X);\n            result.Y = +(qvec.X * q.Z) +(qvec.Y * q.W) -(qvec.Z * q.X) -(qvec.W * q.Y);\n            result.Z = -(qvec.X * q.Y) +(qvec.Y * q.X) +(qvec.Z * q.W) -(qvec.W * q.Z);\n\n            return result;\n        }\n\n        static unsafe Posef XrPosef_CreateIdentity()\n        {\n            Posef result;\n            result.Orientation = XrQuaternionf_CreateIdentity();\n            result.Position = XrVector3f_Set(0);\n            return result;\n        }\n\n        static unsafe Vector3f XrPosef_TransformVector3f(Posef a, Vector3f v)\n        {\n            Vector3f result;\n            Vector3f r0 = XrQuaternionf_RotateVector3f_Opt(a.Orientation, v);\n            result = XrVector3f_Add(r0, a.Position);\n            return result;\n        }\n\n        static unsafe Posef XrPosef_Multiply(Posef a, Posef b)\n        {\n            Posef result;\n            result.Orientation = XrQuaternionf_Multiply(b.Orientation, a.Orientation);\n            result.Position = XrPosef_TransformVector3f(a, b.Position);\n            return result;\n        }\n\n        static unsafe Posef XrPosef_Invert(Posef a)\n        {\n            Posef result;\n            result.Orientation = XrQuaternionf_Invert(a.Orientation);\n            Vector3f aPosNeg = XrVector3f_Scale(a.Position, -1.0f);\n            result.Position = XrQuaternionf_RotateVector3f_Opt(result.Orientation, aPosNeg);\n            return result;\n        }\n\n        // Creates a projection matrix based on the specified FOV.\n        static unsafe Matrix XrMatrixf_CreateProjectionFov(GraphicsBackend graphicsApi, Fovf fov,\n                                                            float nearZ, float farZ)\n        {\n            float tanLeft = (float)Math.Tan(fov.AngleLeft);\n            float tanRight = (float)Math.Tan(fov.AngleRight);\n            float tanDown = (float)Math.Tan(fov.AngleDown);\n            float tanUp = (float)Math.Tan(fov.AngleUp);\n\n\n            Matrix result;\n            result = XrMatrixf_CreateProjection(graphicsApi, tanLeft, tanRight, tanUp, tanDown, nearZ, farZ);\n            return result;\n        }\n\n        // Creates a projection matrix based on the specified dimensions.\n        // The projection matrix transforms -Z=forward, +Y=up, +X=right to the appropriate clip space for the graphics API.\n        // The far plane is placed at infinity if farZ <= nearZ.\n        // An infinite projection matrix is preferred for rasterization because, except for\n        // things *right* up against the near plane, it always provides better precision:\n        //              \"Tightening the Precision of Perspective Rendering\"\n        //              Paul Upchurch, Mathieu Desbrun\n        //              Journal of Graphics Tools, Volume 16, Issue 1, 2012\n        static unsafe Matrix XrMatrixf_CreateProjection(GraphicsBackend graphicsApi, float tanAngleLeft,\n                                                 float tanAngleRight, float tanAngleUp, float tanAngleDown,\n                                                 float nearZ, float farZ)\n        {\n            float tanAngleWidth = tanAngleRight - tanAngleLeft;\n\n            // Set to tanAngleDown - tanAngleUp for a clip space with positive Y down (Vulkan).\n            // Set to tanAngleUp - tanAngleDown for a clip space with positive Y up (OpenGL / D3D / Metal).\n            float tanAngleHeight = graphicsApi == GraphicsBackend.Vulkan ? (tanAngleDown - tanAngleUp) : (tanAngleUp - tanAngleDown);\n\n            // Set to nearZ for a [-1,1] Z clip space (OpenGL / OpenGL ES).\n            // Set to zero for a [0,1] Z clip space (Vulkan / D3D / Metal).\n            float offsetZ = (graphicsApi == GraphicsBackend.OpenGL || graphicsApi == GraphicsBackend.GLES) ? nearZ : 0;\n\n            if (farZ <= nearZ)\n            {\n                Matrix result;\n\n                // place the far plane at infinity\n                result.M11 = 2.0f / tanAngleWidth;\n                result.M12 = 0.0f;\n                result.M13 = 0.0f;\n                result.M14 = 0.0f;\n\n                result.M21 = 0.0f;\n                result.M22 = 2.0f / tanAngleHeight;\n                result.M23 = 0.0f;\n                result.M24 = 0.0f;\n\n                result.M31 = (tanAngleRight + tanAngleLeft) / tanAngleWidth;\n                result.M32 = (tanAngleUp + tanAngleDown) / tanAngleHeight;\n                result.M33 = -1.0f;\n                result.M34 = -1.0f;\n\n                result.M41 = 0.0f;\n                result.M42 = 0.0f;\n                result.M43 = -(nearZ + offsetZ);\n                result.M44 = 0.0f;\n\n                return result;\n            }\n            else\n            {\n                Matrix result;\n\n                // normal projection\n                result.M11 = (2f) / tanAngleWidth;\n                result.M12 = result.M13 = result.M14 = 0;\n\n                result.M22 = (2f) / tanAngleHeight;\n                result.M21 = result.M23 = result.M24 = 0;\n\n                result.M31 = (tanAngleRight + tanAngleLeft) / tanAngleWidth;\n                result.M32 = (tanAngleUp + tanAngleDown) / tanAngleHeight;\n                result.M33 = (farZ + offsetZ) / (nearZ-farZ);\n                result.M34 = -1;\n\n                result.M43 = (farZ * (nearZ + offsetZ)) / (nearZ-farZ);\n                result.M41 = result.M42 = result.M44 = 0;\n\n                return result;\n            }\n        }\n\n\n        private unsafe void ovrRenderer_RenderFrame_Acquire(ref ovrFramebuffer frameBuffer)\n        {\n            Result xrResult;\n\n            // Acquire the swapchain image\n            xrResult = frameBuffer.ColorSwapChain.AcquireSwapchainImage(ref frameBuffer.TextureSwapChainIndex);\n            Debug.Assert(xrResult == Result.Success, \"AcquireSwapchainImage\");\n\n            SwapchainImageWaitInfo waitInfo = new SwapchainImageWaitInfo(StructureType.SwapchainImageWaitInfo);\n            waitInfo.Timeout = 1000000000; /* timeout in nanoseconds */\n            xrResult = frameBuffer.ColorSwapChain.WaitSwapchainImage(ref waitInfo);\n\n            int i = 0;\n            while (xrResult == Result.TimeoutExpired)\n            {\n                xrResult = frameBuffer.ColorSwapChain.WaitSwapchainImage(ref waitInfo);\n                i++;\n                Console.WriteLine(\n                    \" Retry xrWaitSwapchainImage {0} times due to XR_TIMEOUT_EXPIRED (duration {0} seconds)\",\n                    i,\n                    waitInfo.Timeout * (1E-9));\n            }\n        }\n\n        private unsafe void ovrRenderer_RenderFrame_Release(ref ovrRenderer renderer, int eye)\n        {\n            fixed (ovrFramebuffer* frameBuffer = &renderer.FrameBuffer[eye])\n            {\n                Result xrResult;\n\n                xrResult = frameBuffer->ColorSwapChain.ReleaseSwapchainImage();\n            }\n        }\n\n        private void UpdateStageBounds()\n        {\n            Extent2Df stageBounds = default;\n\n            Result xrResult;\n            xrResult = _oxrSession.GetReferenceSpaceBoundsRect(ReferenceSpaceType.Stage, out stageBounds);\n            if (xrResult != Result.Success)\n            {\n                Console.WriteLine(\"Stage bounds query failed: using small defaults\");\n                stageBounds.Width = 1.0f;\n                stageBounds.Height = 1.0f;\n\n                _CurrentStageSpace = _FakeStageSpace;\n            }\n\n            Console.WriteLine(\"Stage bounds: width = {0}, depth {1}\", stageBounds.Width, stageBounds.Height);\n\n            float halfWidth = stageBounds.Width * 0.5f;\n            float halfDepth = stageBounds.Height * 0.5f;\n\n            //ovrGeometry_Destroy(&pappState->Scene.GroundPlane);\n            //ovrGeometry_DestroyVAO(&pappState->Scene.GroundPlane);\n            //ovrGeometry_CreateStagePlane(\n            //    &pappState->Scene.GroundPlane, -halfWidth, -halfDepth, halfWidth, halfDepth);\n            //ovrGeometry_CreateVAO(&pappState->Scene.GroundPlane);\n        }\n\n\n        public struct ovrTrackedController\n        {\n            public bool Active;\n            public Pose3 Pose;\n            internal Vector3 LinearVelocity;\n\n            internal void Clear()\n            {\n                this.Active = false;\n                this.Pose = Pose3.Identity;\n                this.LinearVelocity = Vector3.Zero;\n            }\n        }\n\n        public struct ovrScene\n        {\n            public bool CreatedScene;\n            public ovrTrackedController[] TrackedController = new ovrTrackedController[4]; // left aim, left grip, right aim, right grip\n\n            public OxrSwapChain CylinderSwapChain;\n            public SwapchainImageOpenGLESKHR[] CylinderSwapChainImage;\n            //internal RenderTargetSwapChain CylinderSwapRenderTarget;\n\n            public ovrScene()\n            {\n            }\n        }\n\n        internal abstract class OxrSwapChainDataBase\n        {\n            //internal abstract OvrTextureSwapChain SwapChain { get; }\n\n            internal abstract RenderTarget2D GetRenderTarget(int eye);\n            internal abstract int SubmitRenderTarget(GraphicsDevice graphicsDevice, RenderTarget2D rt);\n        }\n\n\n        ovrScene _Scene = new ovrScene();\n\n        private unsafe bool ovrScene_IsCreated(ref ovrScene scene)\n        {\n            return scene.CreatedScene;\n        }\n\n        private unsafe void ovrScene_Create(ref ovrScene scene)\n        {\n            // Simple ground plane and box geometry.\n            {\n            }\n\n\n            // Simple cubemap loaded from ktx file on the sdcard. NOTE: Currently only\n            // handles texture2d or cubemap types.\n            // CubeMapSwapChain\n            { \n            }\n\n            // Simple checkerboard pattern.\n            //  EquirectSwapChain\n            { \n            }\n\n\n            // Simple checkerboard pattern.\n            // CylinderSwapChain\n            { \n            }\n\n            // Simple checkerboard pattern.\n            // QuadSwapChain\n            if (false)\n            {\n                Result xrResult;\n\n                int CYLINDER_WIDTH = 512;\n                int CYLINDER_HEIGHT = 128;\n\n                SwapchainCreateInfo swapChainCreateInfo = new SwapchainCreateInfo(StructureType.SwapchainCreateInfo);\n                swapChainCreateInfo.CreateFlags = SwapchainCreateFlags.StaticImageBit;\n                swapChainCreateInfo.UsageFlags =\n                     SwapchainUsageFlags.SampledBit | SwapchainUsageFlags.ColorAttachmentBit;\n                swapChainCreateInfo.Format = SRGB8_ALPHA8;\n                swapChainCreateInfo.SampleCount = 1;\n                swapChainCreateInfo.Width = (uint)CYLINDER_WIDTH;\n                swapChainCreateInfo.Height = (uint)CYLINDER_HEIGHT;\n                swapChainCreateInfo.FaceCount = 1;\n                swapChainCreateInfo.ArraySize = 1;\n                swapChainCreateInfo.MipCount = 1;\n\n                // Create the swapchain.\n                xrResult = _oxrSession.CreateSwapchain(ref swapChainCreateInfo, out scene.CylinderSwapChain);\n                Debug.Assert(xrResult == Result.Success, \"CreateSwapchain\");\n                // Get the number of swapchain images.\n                uint length;\n                xrResult = _oxrInstance.OXRAPI.Api.EnumerateSwapchainImages(scene.CylinderSwapChain.Swapchain, 0, &length, null);\n                Debug.Assert(xrResult == Result.Success, \"EnumerateSwapchainImages\");\n\n                SwapchainImageOpenGLESKHR[] cylinderSwapChainImage = new SwapchainImageOpenGLESKHR[length];\n                scene.CylinderSwapChainImage = cylinderSwapChainImage;\n                for (uint i = 0; i < length; i++)\n                {\n                    scene.CylinderSwapChainImage[i].Type = StructureType.SwapchainImageOpenglESKhr;\n                    scene.CylinderSwapChainImage[i].Next = null;\n                }\n                fixed (SwapchainImageOpenGLESKHR* pcylinderSwapChainImage = cylinderSwapChainImage)\n                {\n                    xrResult = _oxrInstance.OXRAPI.Api.EnumerateSwapchainImages(\n                    scene.CylinderSwapChain.Swapchain,\n                    length,\n                    &length,\n                    (SwapchainImageBaseHeader*)pcylinderSwapChainImage);\n                    Debug.Assert(xrResult == Result.Success, \"EnumerateSwapchainImages\");\n                }\n\n                uint[] data = new uint[CYLINDER_WIDTH * CYLINDER_HEIGHT];\n                fixed (uint* texData = data)\n                {\n                    for (int y = 0; y < CYLINDER_HEIGHT; y++)\n                    {\n                        for (int x = 0; x < CYLINDER_WIDTH; x++)\n                        {\n                            texData[y * CYLINDER_WIDTH + x] = ((x ^ y) & 64)!=0 ? 0xFF6464F0 : 0xFFF06464;\n                        }\n                    }\n                    for (int y = 0; y < CYLINDER_HEIGHT; y++)\n                    {\n                        int g = (int)(255.0f * (y / (CYLINDER_HEIGHT - 1.0f)));\n                        texData[y * CYLINDER_WIDTH] = (uint)(0xff000000 | (g << 8));\n                    }\n                    for (int x = 0; x < CYLINDER_WIDTH; x++)\n                    {\n                        int r = (int)(255.0f * (x / (CYLINDER_WIDTH - 1.0f)));\n                        texData[x] = (uint)(0xff000000 | r);\n                    }\n\n                    int texId = (int)scene.CylinderSwapChainImage[0].Image;\n\n                    //scene.CylinderSwapRenderTarget = new RenderTargetSwapChain(_graphics.GraphicsDevice,\n                    //    new IntPtr(texId),\n                    //    CYLINDER_WIDTH,\n                    //    CYLINDER_HEIGHT,\n                    //    false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.DiscardContents,\n                    //    PresentInterval.Default\n                    //    );\n                    //scene.CylinderSwapRenderTarget.SetData<uint>(0, \n                    //    new Rectangle(0,0, CYLINDER_WIDTH, CYLINDER_HEIGHT), \n                    //    data, 0, data.Length);\n\n\n                    //var adapter = ((IPlatformGraphicsAdapter)_graphics.GraphicsDevice.Adapter).Strategy.ToConcrete<ConcreteGraphicsAdapter>();\n                    //var GL = adapter.Ogl;\n\n                    //GL.BindTexture(OpenGL.TextureTarget.Texture2D, texId);\n                    //GL.CheckGLError();\n                    //GL.TexSubImage2D(\n                    //    OpenGL.TextureTarget.Texture2D,\n                    //    0,\n                    //    0,\n                    //    0,\n                    //    CYLINDER_WIDTH,\n                    //    CYLINDER_HEIGHT,\n                    //    OpenGL.PixelFormat.Rgba,\n                    //    OpenGL.PixelType.UnsignedByte,\n                    //    new IntPtr(texData));\n                    //GL.CheckGLError();\n\n                    //GL.TexParameteri(OpenGL.TextureTarget.Texture2D, OpenGL.TextureParameterName.TextureWrapS, (int)OpenGL.TextureWrapMode.ClampToBorder);\n                    //GL.CheckGLError();\n                    //GL.TexParameteri(OpenGL.TextureTarget.Texture2D, OpenGL.TextureParameterName.TextureWrapT, (int)OpenGL.TextureWrapMode.ClampToBorder);\n                    //GL.CheckGLError();\n                    //float[] borderColor = { 0.0f, 0.0f, 0.0f, 0.0f };\n                    //fixed(float* pborderColor = borderColor)\n                    //GL.TexParameterfv(OpenGL.TextureTarget.Texture2D, OpenGL.TextureParameterName.TextureBorderColor, pborderColor);\n                    //GL.CheckGLError();\n\n                    //GL.BindTexture(OpenGL.TextureTarget.Texture2D, 0);\n                    //GL.CheckGLError();\n\n                } // free(texData);\n\n                uint index = 0;\n                xrResult = scene.CylinderSwapChain.AcquireSwapchainImage(ref index);\n                Debug.Assert(xrResult == Result.Success, \"AcquireSwapchainImage\");\n\n                SwapchainImageWaitInfo waitInfo = new SwapchainImageWaitInfo(StructureType.SwapchainImageWaitInfo);\n                xrResult = scene.CylinderSwapChain.WaitSwapchainImage(ref waitInfo);\n                Debug.Assert(xrResult == Result.Success, \"WaitSwapchainImage\");\n\n                xrResult = scene.CylinderSwapChain.ReleaseSwapchainImage();\n                Debug.Assert(xrResult == Result.Success, \"ReleaseSwapchainImage\");\n            }\n\n            scene.CreatedScene = true;\n            return;\n        }\n\n        private unsafe void ovrApp_HandleXrEvents()\n        {\n            Result xrResult;\n\n            EventDataBuffer eventDataBuffer = new EventDataBuffer(StructureType.EventDataBuffer);\n\n            // Poll for events\n            for (; ; )\n            {\n                EventDataBaseHeader* baseEventHeader = (EventDataBaseHeader*)(&eventDataBuffer);\n                baseEventHeader->Type = StructureType.EventDataBuffer;\n                baseEventHeader->Next = null;\n\n                Result r;\n                r = _oxrInstance.PollEvent(ref eventDataBuffer);\n                if (r != Result.Success)\n                    break;\n\n                switch (baseEventHeader->Type)\n                {\n                    case StructureType.EventDataEventsLost:\n                        Console.WriteLine(\"xrPollEvent: received XR_TYPE_EVENT_DATA_EVENTS_LOST event\");\n                        break;\n                    case StructureType.EventDataInstanceLossPending:\n                        {\n                            EventDataInstanceLossPending* instance_loss_pending_event =\n                                (EventDataInstanceLossPending*)(baseEventHeader);\n                            Console.WriteLine(\n                                \"xrPollEvent: received XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING event: time {0}\",\n                                instance_loss_pending_event->LossTime // FromXrTime(instance_loss_pending_event->LossTime)\n                                );\n                        }\n                        break;\n                    case StructureType.EventDataInteractionProfileChanged:\n                        Console.WriteLine(\"xrPollEvent: received XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED event\");\n                        break;\n                    case StructureType.EventDataPerfSettingsExt:\n                        {\n                            EventDataPerfSettingsEXT* perf_settings_event =\n                                (EventDataPerfSettingsEXT*)(baseEventHeader);\n                            Console.WriteLine(\n                                \"xrPollEvent: received XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT event: type {0} subdomain {1} : level {2} -> level {3}\",\n                                perf_settings_event->Type,\n                                perf_settings_event->SubDomain,\n                                perf_settings_event->FromLevel,\n                                perf_settings_event->ToLevel);\n                        }\n                        break;\n                    case StructureType.EventDataDisplayRefreshRateChangedFB:\n                        {\n                            EventDataDisplayRefreshRateChangedFB* refresh_rate_changed_event =\n                                (EventDataDisplayRefreshRateChangedFB*)(baseEventHeader);\n                            Console.WriteLine(\n                                \"xrPollEvent: received XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB event: fromRate {0} -> toRate {1}\",\n                                refresh_rate_changed_event->FromDisplayRefreshRate,\n                                refresh_rate_changed_event->ToDisplayRefreshRate);\n                        }\n                        break;\n                    case StructureType.EventDataReferenceSpaceChangePending:\n                        {\n                            EventDataReferenceSpaceChangePending* ref_space_change_event =\n                                (EventDataReferenceSpaceChangePending*)(baseEventHeader);\n                            Console.WriteLine(\n                                \"xrPollEvent: received XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING event: changed space: {0} for session {1} at time {2}\",\n                                ref_space_change_event->ReferenceSpaceType,\n                                ref_space_change_event->Session.Handle,\n                                ref_space_change_event->ChangeTime //FromXrTime(ref_space_change_event->ChangeTime)\n                                );\n                        }\n                        break;\n\n                    case StructureType.EventDataSessionStateChanged:\n                        {\n                            EventDataSessionStateChanged* session_state_changed_event =\n                                (EventDataSessionStateChanged*)(baseEventHeader);\n                            Console.WriteLine(\n                                 \"xrPollEvent: received XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED: {0} for session {1} at time {2}\",\n                                    session_state_changed_event->State,\n                                    session_state_changed_event->Session.Handle,\n                                    session_state_changed_event->Time //FromXrTime(session_state_changed_event->Time)\n                                    );\n\n                            this._sessionState = session_state_changed_event->State;\n\n                            switch (session_state_changed_event->State)\n                            {\n                                case SessionState.Idle:\n                                    break;\n                                case SessionState.Focused:\n                                    _Focused = true;\n                                    break;\n                                case SessionState.Visible:\n                                    _Focused = false;\n                                    break;\n                                case SessionState.Ready:\n                                    ovrApp_HandleSessionStateChangesReady(session_state_changed_event->State);\n                                    break;\n                                case SessionState.Stopping:\n                                    ovrApp_HandleSessionStateChangesStopping(session_state_changed_event->State);\n                                    break;\n\n                                case SessionState.Synchronized:\n                                    break;\n                                case SessionState.LossPending:\n                                    break;\n                                case SessionState.Exiting:\n                                    break;\n\n                                default:\n                                    Console.WriteLine(\"Unknown State: {0}.\", session_state_changed_event->State);\n                                    break;\n                            }\n                        }\n                        break;\n\n                    default:\n                        Console.WriteLine(\"xrPollEvent: Unknown event {0}.\" , baseEventHeader->Type);\n                        break;\n                }\n            }\n\n        }\n\n        ViewConfigurationProperties _viewportConfig;\n        private bool _Resumed;\n        private bool _Focused;\n        private bool _SessionActive;\n        SessionState _sessionState;\n\n        SessionState IOculusDeviceStrategy.SessionState { get { return _sessionState; } }\n\n        private unsafe void ovrApp_HandleSessionStateChangesReady(SessionState state)\n        {\n            //Debug.Assert(_Resumed);\n            Debug.Assert(_SessionActive == false);\n\n            Result xrResult;\n            xrResult = _oxrSession.BeginSession(_viewportConfig.ViewConfigurationType);\n            Debug.Assert(xrResult == Result.Success, \"BeginSession\");\n\n            _SessionActive = (xrResult == Result.Success);\n\n            // Set session state once we have entered VR mode and have a valid session object.\n            if (_SessionActive)\n            {\n                PerfSettingsLevelEXT cpuPerfLevel = PerfSettingsLevelEXT.SustainedHighExt;\n                switch (_CpuLevel)\n                {\n                    case 0:\n                        cpuPerfLevel = PerfSettingsLevelEXT.PowerSavingsExt;\n                        break;\n                    case 1:\n                        cpuPerfLevel = PerfSettingsLevelEXT.SustainedLowExt;\n                        break;\n                    case 2:\n                        cpuPerfLevel = PerfSettingsLevelEXT.SustainedHighExt;\n                        break;\n                    case 3:\n                        cpuPerfLevel = PerfSettingsLevelEXT.BoostExt;\n                        break;\n                    default:\n                        Console.WriteLine(\"Invalid CPU level {0}\", _CpuLevel);\n                        break;\n                }\n\n                PerfSettingsLevelEXT gpuPerfLevel = PerfSettingsLevelEXT.SustainedHighExt;\n                switch (_GpuLevel)\n                {\n                    case 0:\n                        gpuPerfLevel = PerfSettingsLevelEXT.PowerSavingsExt;\n                        break;\n                    case 1:\n                        gpuPerfLevel = PerfSettingsLevelEXT.SustainedLowExt;\n                        break;\n                    case 2:\n                        gpuPerfLevel = PerfSettingsLevelEXT.SustainedHighExt;\n                        break;\n                    case 3:\n                        gpuPerfLevel = PerfSettingsLevelEXT.BoostExt;\n                        break;\n                    default:\n                        Console.WriteLine(\"Invalid GPU level {0}\", _GpuLevel);\n                        break;\n                }\n\n                xrResult = _oxrInstance.GetInstanceProcAddr<xrPerfSettingsSetPerformanceLevelEXT>(\n                    \"xrPerfSettingsSetPerformanceLevelEXT\",\n                    out xrPerfSettingsSetPerformanceLevelEXT pfnPerfSettingsSetPerformanceLevelEXT);\n                Debug.Assert(xrResult == Result.Success, \"xrPerfSettingsSetPerformanceLevelEXT\");\n\n                xrResult = pfnPerfSettingsSetPerformanceLevelEXT(\n                    _oxrSession.Session, PerfSettingsDomainEXT.CpuExt, cpuPerfLevel);\n                Debug.Assert(xrResult == Result.Success, \"pfnPerfSettingsSetPerformanceLevelEXT\");\n                xrResult = pfnPerfSettingsSetPerformanceLevelEXT(\n                    _oxrSession.Session, PerfSettingsDomainEXT.GpuExt, gpuPerfLevel);\n                Debug.Assert(xrResult == Result.Success, \"pfnPerfSettingsSetPerformanceLevelEXT\");\n            }\n        }\n\n        private void ovrApp_HandleSessionStateChangesStopping(SessionState state)\n        {\n            Debug.Assert(_Resumed == false);\n            Debug.Assert(_SessionActive);\n\n            Result xrResult;\n\n            xrResult = _oxrSession.EndSession();\n            Debug.Assert(xrResult == Result.Success, \"EndSession\");\n            _SessionActive = false;\n        }\n\n        private unsafe void OnDisplayLost()\n        {\n            //OvrGraphicsLuid prevGraphicsLuid = _ovrSession.GraphicsLuid;\n\n            // destroy session\n            //_ovrSession.Dispose();\n            //_ovrSession = null;\n            //_ovrClient.Dispose();\n            //_ovrClient = null;\n\n            _deviceState = XRDeviceState.Disabled;\n        }\n\n        unsafe public struct ovrFramebuffer\n        {\n            public int Width;\n            public int Height;\n            public int Multisamples;\n\n            public uint TextureSwapChainLength;\n            public uint TextureSwapChainIndex;\n            public OxrSwapChain ColorSwapChain;\n\n            public SwapchainImageOpenGLESKHR[] ColorSwapChainImage;\n            public RenderTarget2D RenderTarget;\n            internal int[] FrameBuffers;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct ovrCompositorLayer_Union\n        {\n            [FieldOffset(0)]\n            public CompositionLayerBaseHeader BaseHeader;\n\n            [FieldOffset(0)]\n            public CompositionLayerProjection Projection;\n            [FieldOffset(0)]\n            public CompositionLayerQuad Quad;\n            [FieldOffset(0)]\n            public CompositionLayerCylinderKHR Cylinder;\n            [FieldOffset(0)]\n            public CompositionLayerCubeKHR Cube;\n            [FieldOffset(0)]\n            public CompositionLayerEquirect2KHR Equirect2;\n\n            [FieldOffset(0)]\n            public CompositionLayerPassthroughFB PassthroughFB;\n        }\n\n        public unsafe delegate Result xrCreateFoveationProfileFBDelegate(Session session, FoveationProfileCreateInfoFB* profileCreateInfo, FoveationProfileFB* foveationProfile);\n        public unsafe delegate Result xrDestroyFoveationProfileFBDelegate(FoveationProfileFB* foveationProfile);\n        public unsafe delegate Result xrUpdateSwapchainFBDelegate(Swapchain ColorSwapChainHandle, SwapchainStateBaseHeaderFB* foveationUpdateState);\n\n        private unsafe bool ovrRenderer_SetFoveation(\n            ref ovrRenderer renderer,\n            FoveationLevelFB level,\n            float verticalOffset,\n            FoveationDynamicFB dynamic\n            )\n        {\n            Result xrResult;\n\n            xrResult = _oxrInstance.GetInstanceProcAddr<xrCreateFoveationProfileFBDelegate>(\"xrCreateFoveationProfileFB\",\n                out xrCreateFoveationProfileFBDelegate Fun_pfnCreateFoveationProfileFB);\n            Debug.Assert(xrResult == Result.Success, \"GetInstanceProcAddr\");\n\n            xrResult = _oxrInstance.GetInstanceProcAddr<xrDestroyFoveationProfileFBDelegate>(\"xrDestroyFoveationProfileFB\",\n                out xrDestroyFoveationProfileFBDelegate Fun_pfnDestroyFoveationProfileFB);\n            Debug.Assert(xrResult == Result.Success, \"GetInstanceProcAddr\");\n\n            PfnVoidFunction pfnUpdateSwapchainFB;\n            xrResult = _oxrInstance.GetInstanceProcAddr<xrUpdateSwapchainFBDelegate>(\"xrUpdateSwapchainFB\", \n                out xrUpdateSwapchainFBDelegate Fun_pfnUpdateSwapchainFB);\n            Debug.Assert(xrResult == Result.Success, \"GetInstanceProcAddr\");\n\n            for (int eye = 0; eye < ovrMaxNumEyes; eye++)\n            {\n                FoveationLevelProfileCreateInfoFB levelProfileCreateInfo = new FoveationLevelProfileCreateInfoFB(StructureType.FoveationLevelProfileCreateInfoFB);\n                levelProfileCreateInfo.Level = level;\n                levelProfileCreateInfo.VerticalOffset = verticalOffset;\n                levelProfileCreateInfo.Dynamic = dynamic;\n\n                FoveationProfileCreateInfoFB profileCreateInfo = new FoveationProfileCreateInfoFB(StructureType.FoveationProfileCreateInfoFB);\n                profileCreateInfo.Next = &levelProfileCreateInfo;\n\n                FoveationProfileFB foveationProfile = default;\n                xrResult = Fun_pfnCreateFoveationProfileFB(_oxrSession.Session, &profileCreateInfo, &foveationProfile);\n                Debug.Assert(xrResult == Result.Success, \"Fun_pfnCreateFoveationProfileFB\");\n\n\n                SwapchainStateFoveationFB foveationUpdateState = new SwapchainStateFoveationFB(StructureType.SwapchainStateFoveationFB);\n                foveationUpdateState.Profile = foveationProfile;\n\n                xrResult = Fun_pfnUpdateSwapchainFB(\n                    renderer.FrameBuffer[eye].ColorSwapChain.Swapchain,\n                    (SwapchainStateBaseHeaderFB*)&foveationUpdateState);\n                Debug.Assert(xrResult == Result.Success, \"Fun_pfnUpdateSwapchainFB\");\n\n\n                //xrResult = Fun_pfnDestroyFoveationProfileFB(&foveationProfile);\n                //Debug.Assert(xrResult == Result.Success, \"Fun_pfnDestroyFoveationProfileFB\");\n            }\n\n            return false;\n        }\n\n        private int CreateDefaultLayer(GraphicsDevice graphicsDevice,\n            SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,\n            int pixelsPerDisplayPixel\n            //,\n            //out OvrLayerEyeFov layer\n            )\n        {\n            int ovrResult = 0;\n\n            //OvrHmdDesc HmdDesc = _ovrSession.GetHmdDesc();\n\n            // create layer\n            //layer = default(OvrLayerEyeFov);\n            //layer.Header.Type = OvrLayerType.EyeFov;\n            //layer.Header.Flags = 0;\n\n            for (int eye = 0; eye < 2; eye++)\n            {\n                //OvrFovPort fov = HmdDesc.DefaultEyeFov[eye];\n                //OvrSizei texRes = _ovrSession.GetFovTextureSize((OvrEyeType)eye, fov, pixelsPerDisplayPixel);\n                //layer.Viewport[eye] = new OvrRecti(0, 0, texRes.W, texRes.H);\n\n                //ovrResult = ConcreteOvrSwapChainData.CreateSwapChain(\n                //    graphicsDevice, _ovrSession,\n                //    texRes.W, texRes.H,\n                //    preferredFormat, preferredDepthFormat, preferredMultiSampleCount,\n                //    out _swapChainData[eye]);\n                //layer.ColorTexture[eye] = _swapChainData[eye].SwapChain.NativePtr;\n\n                //OvrEyeRenderDesc renderDesc = _ovrSession.GetRenderDesc((OvrEyeType)eye, fov);\n                //layer.Fov[eye] = renderDesc.Fov;\n                //_hmdToEyePose[eye] = renderDesc.HmdToEyePose;\n            }\n\n            return 0;\n        }\n\n\n\n\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_passthroughFB != null)\n                    _passthroughFB.Dispose();\n                if (_passthroughLayerFB != null)\n                    _passthroughLayerFB.Dispose();\n\n                if (_HeadSpace != null)\n                    _HeadSpace.Dispose();\n                if (_LocalSpace != null)\n                    _LocalSpace.Dispose();\n                if (_LocalFloorSpace != null)\n                    _LocalFloorSpace.Dispose();\n                if (_FakeStageSpace != null)\n                    _FakeStageSpace.Dispose();\n                if (_StageSpace != null)\n                    _StageSpace.Dispose();\n\n                if (_leftControllerAimSpace != null)\n                    _leftControllerAimSpace.Dispose();\n                if (_rightControllerAimSpace != null)\n                    _rightControllerAimSpace.Dispose();\n                if (_leftControllerGripSpace != null)\n                    _leftControllerGripSpace.Dispose();\n                if (_rightControllerGripSpace != null)\n                    _rightControllerGripSpace.Dispose();\n            }\n\n            _passthroughFB = null;\n            _passthroughLayerFB = null;\n\n            _HeadSpace = null;\n            _LocalSpace = null;\n            _LocalFloorSpace = null;\n            _FakeStageSpace = null;\n            _StageSpace = null;\n            _CurrentStageSpace = null;\n\n            _leftControllerAimSpace = null;\n            _rightControllerAimSpace = null;\n            _leftControllerGripSpace = null;\n            _rightControllerGripSpace = null;\n\n        }\n\n    }\n\n\n    internal static class OpenXRExtensions\n    {\n        public static Vector3 ToVector3(this Vector3f value)\n        {\n            return new Vector3(value.X, value.Y, value.Z);\n        }\n\n        public static Quaternion ToQuaternion(this Quaternionf value)\n        {\n            return new Quaternion(value.X, value.Y, value.Z, value.W);\n        }\n\n        public static Pose3 ToPose3(this Posef value)\n        {\n            return new Pose3(\n                        value.Orientation.ToQuaternion(),\n                        value.Position.ToVector3()\n                );\n        }\n\n\n        public static Vector3f ToVector3f(this Vector3 value)\n        {\n            return new Vector3f(value.X, value.Y, value.Z);\n        }\n\n        public static Quaternionf ToQuaternionf(this Quaternion value)\n        {\n            return new Quaternionf(value.X, value.Y, value.Z, value.W);\n        }\n\n        public static Posef ToPosef(this Pose3 value)\n        {\n            return new Posef(\n                        value.Orientation.ToQuaternionf(),\n                        value.Translation.ToVector3f()\n                );\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/XR/.Oculus/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.Ref/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform.XR;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n\n\n        public override bool IsVRSupported\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool IsARSupported\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { throw new PlatformNotSupportedException(); }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n            : this(applicationName, game.Services)\n        {\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override int BeginFrame()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override int EndFrame()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override HandsState GetHandsState()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void EndSessionAsync()\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        internal GamePadState GetGamePadState(TouchControllerType controllerType)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n        internal bool SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            throw new PlatformNotSupportedException();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/XR/.Ref/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.SDL2/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input.XR;\nusing Microsoft.Xna.Platform.XR;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n        IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        bool _isTrackFloorLevelEnabled = false;\n\n        HandsState _handsState;\n        HeadsetState _headsetState;\n\n\n        public override bool IsVRSupported\n        {\n            get { return false; }\n        }\n\n        public override bool IsARSupported\n        {\n            get { return false; }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return XRDeviceState.Disabled; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return _isTrackFloorLevelEnabled; }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n            : this(applicationName, game.Services)\n        {\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (graphics == null)\n                throw new ArgumentNullException(\"graphics\");\n\n            this._graphics = graphics;\n\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            return -1;\n        }\n\n        public override int BeginFrame()\n        {\n            return 0;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            return _headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            yield return XREye.None;\n        }\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            return null;\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            switch (eye)\n            {\n                case XREye.None:\n                case XREye.Left:\n                case XREye.Right:\n                    throw new NotImplementedException();\n\n                default: \n                    throw new ArgumentException(\"Eye\");\n            }\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            Debug.Assert(null == rt);\n\n            return;\n        }\n\n        public override int EndFrame()\n        {\n            return 0;\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return _handsState;\n        }\n\n        public override void EndSessionAsync()\n        {\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            if (enable == true)\n            {\n                throw new NotImplementedException();\n            }\n            else\n            {\n                _isTrackFloorLevelEnabled = enable;\n            }\n        }\n\n\n        internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport)\n        {\n            controllerType = (TouchControllerType)0;\n            gamePadType = GamePadType.Unknown;\n            displayName = String.Empty;\n            identifier = String.Empty;\n            isConnected = false;\n\n            buttons = default(Buttons);\n            hasLeftVibrationMotor = false;\n            hasRightVibrationMotor = false;\n            hasVoiceSupport = false;\n        }\n\n        internal GamePadState GetGamePadState(TouchControllerType controllerType)\n        {\n            return default(GamePadState);\n        }\n\n        internal bool SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            bool result = false;\n\n            return result;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/XR/.SDL2/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.UAP/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input.XR;\nusing Microsoft.Xna.Platform.XR;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n        IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        bool _isTrackFloorLevelEnabled = false;\n\n        HandsState _handsState;\n        HeadsetState _headsetState;\n\n\n        public override bool IsVRSupported\n        {\n            get { return false; }\n        }\n\n        public override bool IsARSupported\n        {\n            get { return false; }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return XRDeviceState.Disabled; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return _isTrackFloorLevelEnabled; }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n            : this(applicationName, game.Services)\n        {\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (graphics == null)\n                throw new ArgumentNullException(\"graphics\");\n\n            this._graphics = graphics;\n\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            return -1;\n        }\n\n        public override int BeginFrame()\n        {\n            return 0;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            return _headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            yield return XREye.None;\n        }\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            return null;\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            switch (eye)\n            {\n                case XREye.None:\n                case XREye.Left:\n                case XREye.Right:\n                    throw new NotImplementedException();\n\n                default: \n                    throw new ArgumentException(\"Eye\");\n            }\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            Debug.Assert(null == rt);\n\n            return;\n        }\n\n        public override int EndFrame()\n        {\n            return 0;\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return _handsState;\n        }\n\n        public override void EndSessionAsync()\n        {\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            if (enable == true)\n            {\n                throw new NotImplementedException();\n            }\n            else\n            {\n                _isTrackFloorLevelEnabled = enable;\n            }\n        }\n\n\n        internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport)\n        {\n            controllerType = (TouchControllerType)0;\n            gamePadType = GamePadType.Unknown;\n            displayName = String.Empty;\n            identifier = String.Empty;\n            isConnected = false;\n\n            buttons = default(Buttons);\n            hasLeftVibrationMotor = false;\n            hasRightVibrationMotor = false;\n            hasVoiceSupport = false;\n        }\n\n        internal GamePadState GetGamePadState(TouchControllerType controllerType)\n        {\n            return default(GamePadState);\n        }\n\n        internal bool SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            bool result = false;\n\n            return result;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/XR/.UAP/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.WindowsDX/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input.XR;\nusing Microsoft.Xna.Platform.XR;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n        IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        bool _isTrackFloorLevelEnabled = false;\n\n        HandsState _handsState;\n        HeadsetState _headsetState;\n\n\n        public override bool IsVRSupported\n        {\n            get { return false; }\n        }\n\n        public override bool IsARSupported\n        {\n            get { return false; }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return XRDeviceState.Disabled; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return _isTrackFloorLevelEnabled; }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n            : this(applicationName, game.Services)\n        {\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (graphics == null)\n                throw new ArgumentNullException(\"graphics\");\n\n            this._graphics = graphics;\n\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            return -1;\n        }\n\n        public override int BeginFrame()\n        {\n            return 0;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            return _headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            yield return XREye.None;\n        }\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            return null;\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            switch (eye)\n            {\n                case XREye.None:\n                case XREye.Left:\n                case XREye.Right:\n                    throw new NotImplementedException();\n\n                default: \n                    throw new ArgumentException(\"Eye\");\n            }\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            Debug.Assert(null == rt);\n\n            return;\n        }\n\n        public override int EndFrame()\n        {\n            return 0;\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return _handsState;\n        }\n\n        public override void EndSessionAsync()\n        {\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            if (enable == true)\n            {\n                throw new NotImplementedException();\n            }\n            else\n            {\n                _isTrackFloorLevelEnabled = enable;\n            }\n        }\n\n\n        internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport)\n        {\n            controllerType = (TouchControllerType)0;\n            gamePadType = GamePadType.Unknown;\n            displayName = String.Empty;\n            identifier = String.Empty;\n            isConnected = false;\n\n            buttons = default(Buttons);\n            hasLeftVibrationMotor = false;\n            hasRightVibrationMotor = false;\n            hasVoiceSupport = false;\n        }\n\n        internal GamePadState GetGamePadState(TouchControllerType controllerType)\n        {\n            return default(GamePadState);\n        }\n\n        internal bool SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            bool result = false;\n\n            return result;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/XR/.WindowsDX/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/XR/.iOS/ConcreteXRDevice.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Input.XR;\nusing Microsoft.Xna.Platform.XR;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    internal class ConcreteXRDevice : XRDeviceStrategy\n    {\n        IGraphicsDeviceService _graphics;\n        XRSessionMode _sessionMode;\n        bool _isTrackFloorLevelEnabled = false;\n\n        HandsState _handsState;\n        HeadsetState _headsetState;\n\n\n        public override bool IsVRSupported\n        {\n            get { return false; }\n        }\n\n        public override bool IsARSupported\n        {\n            get { return false; }\n        }\n\n        public override XRSessionMode SessionMode\n        {\n            get { return _sessionMode; }\n        }\n\n        public override XRDeviceState DeviceState\n        {\n            get { return XRDeviceState.Disabled; }\n        }\n\n        public override bool IsTrackFloorLevelEnabled\n        {\n            get { return _isTrackFloorLevelEnabled; }\n        }\n\n\n        public ConcreteXRDevice(string applicationName, Game game)\n            : this(applicationName, game.Services)\n        {\n        }\n\n        public ConcreteXRDevice(string applicationName, IServiceProvider services)\n        {\n            IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n\n            if (graphics == null)\n                throw new ArgumentNullException(\"graphics\");\n\n            this._graphics = graphics;\n\n        }\n\n        public override int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            return -1;\n        }\n\n        public override int BeginFrame()\n        {\n            return 0;\n        }\n\n        public override HeadsetState GetHeadsetState()\n        {\n            return _headsetState;\n        }\n\n        public override IEnumerable<XREye> GetEyes()\n        {\n            yield return XREye.None;\n        }\n\n        public override RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            return null;\n        }\n\n        public override Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            switch (eye)\n            {\n                case XREye.None:\n                case XREye.Left:\n                case XREye.Right:\n                    throw new NotImplementedException();\n\n                default: \n                    throw new ArgumentException(\"Eye\");\n            }\n        }\n\n        public override void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            Debug.Assert(null == rt);\n\n            return;\n        }\n\n        public override int EndFrame()\n        {\n            return 0;\n        }\n\n        public override HandsState GetHandsState()\n        {\n            return _handsState;\n        }\n\n        public override void EndSessionAsync()\n        {\n        }\n\n        public override void TrackFloorLevelAsync(bool enable)\n        {\n            if (enable == true)\n            {\n                throw new NotImplementedException();\n            }\n            else\n            {\n                _isTrackFloorLevelEnabled = enable;\n            }\n        }\n\n\n        internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport)\n        {\n            controllerType = (TouchControllerType)0;\n            gamePadType = GamePadType.Unknown;\n            displayName = String.Empty;\n            identifier = String.Empty;\n            isConnected = false;\n\n            buttons = default(Buttons);\n            hasLeftVibrationMotor = false;\n            hasRightVibrationMotor = false;\n            hasVoiceSupport = false;\n        }\n\n        internal GamePadState GetGamePadState(TouchControllerType controllerType)\n        {\n            return default(GamePadState);\n        }\n\n        internal bool SetVibration(TouchControllerType controllerType, float amplitude)\n        {\n            bool result = false;\n\n            return result;\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n    }\n}"
  },
  {
    "path": "Platforms/XR/.iOS/ConcreteXRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public sealed class ConcreteXRFactory : XRFactory\n    {\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services)\n        {\n            return new ConcreteXRDevice(applicationName, services);\n        }\n\n        public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game)\n        {\n            return new ConcreteXRDevice(applicationName, game);\n        }\n    }\n}\n"
  },
  {
    "path": "Platforms/build/.Android/nkast.Kni.Platform.Android.GL.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n\t<KniPlatform>Android</KniPlatform>\n    <MonoGamePlatform>Android</MonoGamePlatform>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Platforms/build/.SDL2/MonoGame.Framework.DesktopGL.targets",
    "content": "<Project>\n\n  <PropertyGroup>\n\t<KniPlatform>DesktopGL</KniPlatform>\n    <MonoGamePlatform>DesktopGL</MonoGamePlatform>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Platforms/build/.SDL2/nkast.Kni.Platform.SDL2.GL.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n\t<KniPlatform>DesktopGL</KniPlatform>\n    <MonoGamePlatform>DesktopGL</MonoGamePlatform>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Platforms/build/.UAP/nkast.Kni.Platform.UAP.DX11.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n\t<KniPlatform>WindowsStoreApp</KniPlatform>\n    <MonoGamePlatform>WindowsStoreApp</MonoGamePlatform>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Platforms/build/.WindowsDX/nkast.Kni.Platform.WinForms.DX11.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n\t<KniPlatform>Windows</KniPlatform>\n    <MonoGamePlatform>Windows</MonoGamePlatform>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Platforms/build/.iOS/nkast.Kni.Platform.iOS.GL.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n\t<KniPlatform>iOS</KniPlatform>\n    <MonoGamePlatform>iOS</MonoGamePlatform>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "README.md",
    "content": "﻿# Kni\n\nKni is a simple and powerful .NET framework for creating games for desktop PCs, Mobile devices, Virtual Reality headsets and the Web, using [dotnet](https://dotnet.microsoft.com/) framework & the C# programming language.\n\nIt is an open-source re-implementation of the discontinued [Microsoft's XNA Framework](https://en.wikipedia.org/wiki/Microsoft_XNA).\nKni is a derivative of [MonoGame & XNA Touch](https://github.com/MonoGame/MonoGame).\n\n[![Join the chat at Discord](https://img.shields.io/discord/1350735302011912192?logo=discord&label=KNI&link=https%3A%2F%2Fdiscord.gg%2FaTe3W2J4YF)](https://discord.gg/aTe3W2J4YF)\n\n* [Build Status](#build-status)\n* [Supported Platforms](#supported-platforms)\n* [Support and Contributions](#support-and-contributions)\n* [Source Code](#source-code)\n* [Helpful Links](#helpful-links)\n* [License](#license)\n\n## Supported Platforms\n\nWe support a growing list of platforms across the desktop, mobile, and VR/AR space.  If there is a platform we don't support, please [make a request](https://github.com/MonoGame/MonoGame/issues) or [come help us](CONTRIBUTING.md) add it.\n\n * Windows 8.1 and up (OpenGL & DirectX11)\n * Windows Store Apps (UAP)\n * Oculus VR (OvrPC/DirectX11/meta link)\n * Oculus VR/AR (native/OpenGL)\n * Linux (OpenGL)\n * macOS 10.15 and up (OpenGL)\n * Android 6.0 and up (OpenGL)\n * iPhone/iPad 10.0 and up (OpenGL)\n * Web Browsers & WebXR (WebGL)\n\n## Support and Contributions\n\nIf you think you have found a bug or have a feature request, use our [issue tracker](https://github.com/kniengine/kni/issues). Before opening a new issue, please search to see if your problem has already been reported.  Try to be as detailed as possible in your issue reports.\n\nIf you need help using Kni or have other questions we suggest you post on our [discussions forums](https://github.com/kniEngine/kni/discussions).  Please do not use the GitHub issue tracker for personal support requests.\n\nIf you are interested in contributing fixes or features to Kni, please read our [contributors guide](CONTRIBUTING.md) first.\n\n## Source Code\n\nThe full source code is available here from GitHub:\n\n* Clone the source: `git clone https://github.com/kniengine/kni.git`\n* Set up the submodules: `git submodule update --init`\n* Open the solution for your target platform to build the game framework.\n* Open the Tools solution for your development platform to build the pipeline and content tools.\n\nFor the prerequisites for building from source, please look at the [Requirements](REQUIREMENTS.md) file.\n\nA high level breakdown of the components of the framework:\n\n* The core framework libraries are located in [src](src).\n* The base content pipeline library is located in [src/Xna.Framework.Content.Pipeline](src/Xna.Framework.Content.Pipeline).\n* The Design converters are located in [src/Xna.Framework.Design](src/Xna.Framework.Design).\n* The platform backend implementations are found in [Platforms](Platforms).\n* Project templates are in [Templates](Templates).\n* See [Tests](Tests) for the framework unit tests.\n* See [Tools/Tests](Tools/MonoGame.Tools.Tests) for the content pipeline and other tool tests.\n* [mgcb](Tools/MonoGame.Content.Builder) is the command line tool for content processing.\n* [KNIFXC](Tools/EffectCompiler) is the command line effect compiler tool.\n* The [pipeline-editor](Tools/Content.Pipeline.Editor.WinForms) tool is a GUI frontend for content processing.\n\n## Helpful Links\n\n* Our [issue tracker](https://github.com/kniengine/kni/issues) is on GitHub.\n* Use [discussions forums](https://github.com/kniEngine/kni/discussions) for support questions.\n* You can join the [Discord server](https://discord.gg/aTe3W2J4YF) and chat live with the core developers and other users.\n* Download release and development tools [Releases](https://github.com/kniEngine/kni/releases).\n* The [XNAGameStudio](https://github.com/kniEngine/XNAGameStudio) repo, contain XNA samples ported to KNI.\n* The [MonoGame documentation](http://www.monogame.net/documentation/).\n* Join the [MonoGame Discord server](https://discord.gg/monogame) and the [FNA Discord server](https://discord.gg/fna-xna) and chat live with other users from the community.\n* If you require modern shader features, check out the [MonoGame Compute Fork](https://github.com/cpt-max/MonoGame).\n\n## License\n\nThe Kni project is under the [Microsoft Public License](https://opensource.org/licenses/MS-PL) except for a few portions of the code.  See the [LICENSE.txt](LICENSE.txt) file for more details.  Third-party libraries used by KNI are under their own licenses.  Please refer to those libraries for details on the license they use.\n\n## Sponsors ❤️\n\nWhile KNI is free and open-source, maintaining and expanding the framework requires ongoing effort and resources. We rely on the support of our community to continue delivering top-notch updates, features, and support.\nBy [becoming a Sponsor](https://github.com/sponsors/nkast), you can directly contribute to the growth and sustainability of the KNI Game Framework. \n\n<!-- sponsors --><a href=\"https://github.com/MutsiMutsi\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;MutsiMutsi.png\" width=\"60px\" alt=\"User avatar: Mitchel Disveld\" /></a><a href=\"https://github.com/slyonics\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;slyonics.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/squarebananas\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;squarebananas.png\" width=\"60px\" alt=\"User avatar: \" /></a><!-- sponsors -->\n"
  },
  {
    "path": "REQUIREMENTS.md",
    "content": "Depending on the [platform](Documentation/articles/platforms.md) that you are targeting, MonoGame has different sets of requirements.\n\nFor desktop platforms\n====================\n\nMonoGame requires a .NET 6 SDK installation.\nYou can either install it [independently](https://dotnet.microsoft.com/download/dotnet), or by selecting the .NET workload when installing Visual Studio 2022 (version 17.0 and up required).\n\nIf you are targeting WindowsDX, you are also going to need [the DirectX June 2010 runtime](https://www.microsoft.com/en-us/download/details.aspx?id=8109) for audio and gamepads to work properly.\n\nWhen it comes to IDE, [Visual Studio 2022](https://visualstudio.microsoft.com/vs/), [Visual Studio Code](https://code.visualstudio.com/), and [Visual Studio 2022 for Mac](https://visualstudio.microsoft.com/vs/mac/preview/) are supported (alternatively, you can work directly from the CLI with your code editor of choice). [JetBrains Rider](https://www.jetbrains.com/rider/) should work but isn't officially supported.\n\nDesktop development is possible from any operating system supporting the above mentioned software.\n\nFor UWP platforms\n====================\n\nMonoGame requires the latest Windows 10 SDK.\nYou can install it by selecting the Universal App workload when installing Visual Studio 2022.\nBuilding and publishing for UWP is only supported with Visual Studio 2022.\n\nUWP development is not possible from macOS or Linux.\n\nFor mobile platforms\n====================\n\nMonoGame requires either Xamarin.iOS or Xamarin.Android depending on the target.\n\nIn Visual Studio 2022 you can install both by selecting the \"Mobile development with .NET\" workload.\nIn Visual Studio 2022 for Mac you can install the iOS and Android workload separately.\n\nOnly Visual Studio 2022 or Visual Studio 2022 for Mac are supported in those contexts.\n\nMobile development is not possible from Linux.\n"
  },
  {
    "path": "Templates/Directory.Build.props",
    "content": "<Project>\n  <Import Project=\"..\\kniPackage.props\" />\n</Project>\n\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/MonoGame.Templates.CSharp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\MonoGame.Templates.CSharp</BaseOutputPath>\n    <PackageType>Template</PackageType>\n    <Title>MonoGame project templates</Title>\n    <Description>This package contains a set of C# templates written for the MonoGame framework.</Description>\n    <PackageId>MonoGame.Templates.CSharp</PackageId>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <IncludeContentInPack>true</IncludeContentInPack>\n    <IncludeBuildOutput>false</IncludeBuildOutput>\n    <ContentTargetFolders>content</ContentTargetFolders>\n    <NoWarn>NU5128</NoWarn>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Content Include=\"content\\**\\*\" Exclude=\"content\\**\\.DS_Store;content\\**\\bin;content\\**\\obj\" />\n    <Compile Remove=\"**\\*\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"JsonPoke.MSBuild\" Version=\"1.0.9\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <Target Name=\"SetMGPackageReferenceVersions\" BeforeTargets=\"CoreBuild\">\n    <ItemGroup>\n      <MGProjects Include=\"**\\*.csproj\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <MGToolManifest Include=\"**\\.config\\dotnet-tools.json\" />\n    </ItemGroup>\n\n    <!-- For SDK-style project files -->\n    <XmlPoke\n      XmlInputPath=\"%(MGProjects.Identity)\"\n      Query=\"Project/ItemGroup/PackageReference[starts-with(@Include, &quot;MonoGame&quot;)]/@Version\"\n      Value=\"$(Version)\" />\n    <!-- For old-style project files that set the xml namespace -->\n    <XmlPoke\n      XmlInputPath=\"%(MGProjects.Identity)\"\n      Namespaces=\"&lt;Namespace Prefix='n' Uri='http://schemas.microsoft.com/developer/msbuild/2003' /&gt;\"\n      Query=\"n:Project/n:ItemGroup/n:PackageReference[starts-with(@Include, &quot;MonoGame&quot;)]/@Version\"\n      Value=\"$(Version)\" />\n    <!-- For dotnet tools -->\n    <JsonPoke\n      JsonInputPath=\"%(MGToolManifest.Identity)\"\n      JPath=\"tools.dotnet-mgcb.version\"\n      JValue=\"$(Version)\" />\n    <JsonPoke\n      JsonInputPath=\"%(MGToolManifest.Identity)\"\n      JPath=\"tools.dotnet-mgcb-editor.version\"\n      JValue=\"$(Version)\" />\n    <JsonPoke\n      JsonInputPath=\"%(MGToolManifest.Identity)\"\n      JPath=\"tools.dotnet-mgcb-editor-windows.version\"\n      JValue=\"$(Version)\" />\n    <JsonPoke\n      JsonInputPath=\"%(MGToolManifest.Identity)\"\n      JPath=\"tools.dotnet-mgcb-editor-mac.version\"\n      JValue=\"$(Version)\" />\n    <JsonPoke\n      JsonInputPath=\"%(MGToolManifest.Identity)\"\n      JPath=\"tools.dotnet-mgcb-editor-linux.version\"\n      JValue=\"$(Version)\" />\n  </Target>\n</Project>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/.config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-mgcb\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb\"\n      ]\n    },\n    \"dotnet-mgcb-editor\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor\"\n      ]\n    },\n    \"dotnet-mgcb-editor-linux\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-linux\"\n      ]\n    },\n    \"dotnet-mgcb-editor-windows\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-windows\"\n      ]\n    },\n    \"dotnet-mgcb-editor-mac\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-mac\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/.template.config/template.json",
    "content": "{\n    \"author\": \"MonoGame Team\",\n    \"classifications\": [\n        \"MonoGame\", \"Games\", \"Mobile\", \"Android\"\n    ],\n    \"name\": \"MonoGame Android Application\",\n    \"groupIdentity\": \"MonoGame.Application.Android\",\n    \"identity\": \"MonoGame.Application.Android.CSharp\",\n    \"shortName\": \"mgandroid\",\n    \"tags\": {\n        \"language\": \"C#\",\n        \"type\": \"project\"\n    },\n    \"primaryOutputs\": [\n        {\n            \"path\": \"MGNamespace.csproj\"\n        }\n    ],\n    \"sourceName\": \"MGNamespace\",\n    \"preferNameDirectory\": \"true\",\n    \"description\": \"A MonoGame game project for Android using OpenGL.\"\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/Activity1.cs",
    "content": "using Android.App;\r\nusing Android.Content.PM;\r\nusing Android.OS;\r\nusing Android.Views;\r\nusing Microsoft.Xna.Framework;\r\n\r\nnamespace MGNamespace\r\n{\r\n    [Activity(\r\n        Label = \"@string/app_name\",\r\n        MainLauncher = true,\r\n        Icon = \"@drawable/icon\",\r\n        AlwaysRetainTaskState = true,\r\n        LaunchMode = LaunchMode.SingleInstance,\r\n        ScreenOrientation = ScreenOrientation.FullSensor,\r\n        ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize\r\n    )]\r\n    public class Activity1 : AndroidGameActivity\r\n    {\r\n        private Game1 _game;\r\n        private View _view;\r\n\r\n        protected override void OnCreate(Bundle bundle)\r\n        {\r\n            base.OnCreate(bundle);\r\n\r\n            _game = new Game1();\r\n            _view = _game.Services.GetService(typeof(View)) as View;\r\n\r\n            SetContentView(_view);\r\n            _game.Run();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"MGNamespace.MGNamespace\" android:versionCode=\"1\" android:versionName=\"1.0\">\n  <uses-sdk android:minSdkVersion=\"23\" android:targetSdkVersion=\"31\" />\n  <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" />\n  <application android:label=\"MGNamespace\"></application>\n</manifest>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Android\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/Game1.cs",
    "content": "﻿using Microsoft.Xna.Framework;\r\nusing Microsoft.Xna.Framework.Graphics;\r\nusing Microsoft.Xna.Framework.Input;\r\n\r\nnamespace MGNamespace;\r\n\r\npublic class Game1 : Game\r\n{\r\n    private GraphicsDeviceManager _graphics;\r\n    private SpriteBatch _spriteBatch;\r\n\r\n    public Game1()\r\n    {\r\n        _graphics = new GraphicsDeviceManager(this);\r\n        Content.RootDirectory = \"Content\";\r\n        IsMouseVisible = true;\r\n    }\r\n\r\n    protected override void Initialize()\r\n    {\r\n        // TODO: Add your initialization logic here\r\n\r\n        base.Initialize();\r\n    }\r\n\r\n    protected override void LoadContent()\r\n    {\r\n        _spriteBatch = new SpriteBatch(GraphicsDevice);\r\n\r\n        // TODO: use this.Content to load your game content here\r\n    }\r\n\r\n    protected override void Update(GameTime gameTime)\r\n    {\r\n        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))\r\n            Exit();\r\n\r\n        // TODO: Add your update logic here\r\n\r\n        base.Update(gameTime);\r\n    }\r\n\r\n    protected override void Draw(GameTime gameTime)\r\n    {\r\n        GraphicsDevice.Clear(Color.CornflowerBlue);\r\n\r\n        // TODO: Add your drawing code here\r\n\r\n        base.Draw(gameTime);\r\n    }\r\n}\r\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/MGNamespace.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-android</TargetFramework>\n    <SupportedOSPlatformVersion>23</SupportedOSPlatformVersion>\n    <OutputType>Exe</OutputType>\n    <ApplicationId>com.companyname.MGNamespace</ApplicationId>\n    <ApplicationVersion>1</ApplicationVersion>\n    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1.1-develop\" />\n    <PackageReference Include=\"MonoGame.Framework.Android\" Version=\"3.8.1.1-develop\" />\n  </ItemGroup>\n  <Target Name=\"RestoreDotnetTools\" BeforeTargets=\"Restore\">\n    <Message Text=\"Restoring dotnet tools\" Importance=\"High\" />\n    <Exec Command=\"dotnet tool restore\" />\n  </Target>\n</Project>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <string name=\"app_name\">MGNamespace</string>\n</resources>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/.config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-mgcb\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb\"\n      ]\n    },\n    \"dotnet-mgcb-editor\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor\"\n      ]\n    },\n    \"dotnet-mgcb-editor-linux\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-linux\"\n      ]\n    },\n    \"dotnet-mgcb-editor-windows\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-windows\"\n      ]\n    },\n    \"dotnet-mgcb-editor-mac\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-mac\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/.template.config/template.json",
    "content": "{\n    \"author\": \"MonoGame Team\",\n    \"classifications\": [\n        \"MonoGame\", \"Games\", \"Desktop\", \"Windows\", \"Linux\", \"macOS\"\n    ],\n    \"name\": \"MonoGame Cross-Platform Desktop Application\",\n    \"groupIdentity\": \"MonoGame.Application.DesktopGL\",\n    \"identity\": \"MonoGame.Application.DesktopGL.CSharp\",\n    \"shortName\": \"mgdesktopgl\",\n    \"tags\": {\n        \"language\": \"C#\",\n        \"type\": \"project\"\n    },\n    \"primaryOutputs\": [\n        {\n            \"path\": \"MGNamespace.csproj\"\n        }\n    ],\n    \"sourceName\": \"MGNamespace\",\n    \"preferNameDirectory\": \"true\",\n    \"description\": \"A MonoGame game project for Windows, Linux and macOS using OpenGL.\"\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:DesktopGL\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/Game1.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace MGNamespace;\n\npublic class Game1 : Game\n{\n    private GraphicsDeviceManager _graphics;\n    private SpriteBatch _spriteBatch;\n\n    public Game1()\n    {\n        _graphics = new GraphicsDeviceManager(this);\n        Content.RootDirectory = \"Content\";\n        IsMouseVisible = true;\n    }\n\n    protected override void Initialize()\n    {\n        // TODO: Add your initialization logic here\n\n        base.Initialize();\n    }\n\n    protected override void LoadContent()\n    {\n        _spriteBatch = new SpriteBatch(GraphicsDevice);\n\n        // TODO: use this.Content to load your game content here\n    }\n\n    protected override void Update(GameTime gameTime)\n    {\n        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))\n            Exit();\n\n        // TODO: Add your update logic here\n\n        base.Update(gameTime);\n    }\n\n    protected override void Draw(GameTime gameTime)\n    {\n        GraphicsDevice.Clear(Color.CornflowerBlue);\n\n        // TODO: Add your drawing code here\n\n        base.Draw(gameTime);\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/MGNamespace.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <RollForward>Major</RollForward>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <TieredCompilation>false</TieredCompilation>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\"Icon.ico\" />\n    <None Remove=\"Icon.bmp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n    <EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"MonoGame.Framework.DesktopGL\" Version=\"3.8.1.1-develop\" />\n    <PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1.1-develop\" />\n  </ItemGroup>\n  <Target Name=\"RestoreDotnetTools\" BeforeTargets=\"Restore\">\n    <Message Text=\"Restoring dotnet tools\" Importance=\"High\" />\n    <Exec Command=\"dotnet tool restore\" />\n  </Target>\n</Project>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/Program.cs",
    "content": "﻿\nusing var game = new MGNamespace.Game1();\ngame.Run();\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MGNamespace\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n      <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">permonitorv2,permonitor</dpiAwareness>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/.config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-mgcb\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb\"\n      ]\n    },\n    \"dotnet-mgcb-editor\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor\"\n      ]\n    },\n    \"dotnet-mgcb-editor-linux\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-linux\"\n      ]\n    },\n    \"dotnet-mgcb-editor-windows\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-windows\"\n      ]\n    },\n    \"dotnet-mgcb-editor-mac\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-mac\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/.template.config/template.json",
    "content": "{\n    \"author\": \"MonoGame Team\",\n    \"classifications\": [\n        \"MonoGame\", \"Games\", \"Desktop\", \"Windows\", \"Xbox\", \"UWP\", \"CoreApplication\"\n    ],\n    \"name\": \"MonoGame Windows Universal CoreApp Application\",\n    \"groupIdentity\": \"MonoGame.Application.UWP.CoreApp\",\n    \"identity\": \"MonoGame.Application.UWP.CoreApp.CSharp\",\n    \"shortName\": \"mguwpcore\",\n    \"tags\": {\n        \"language\": \"C#\",\n        \"type\": \"project\"\n    },\n    \"primaryOutputs\": [\n        {\n            \"path\": \"MGNamespace.csproj\"\n        }\n    ],\n    \"sourceName\": \"MGNamespace\",\n    \"preferNameDirectory\": \"true\",\n    \"description\": \"A MonoGame game project for Windows Universal using DirectX and setup as a CoreApplication.\"\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:WindowsStoreApp\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Game1.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace MGNamespace\n{\n    public class Game1 : Game\n    {\n        private GraphicsDeviceManager _graphics;\n        private SpriteBatch _spriteBatch;\n\n        public Game1()\n        {\n            _graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n            IsMouseVisible = true;\n        }\n\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n        }\n\n        protected override void LoadContent()\n        {\n            _spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: use this.Content to load your game content here\n        }\n\n        protected override void Update(GameTime gameTime)\n        {\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/MGNamespace.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>MGNamespace</RootNamespace>\n    <AssemblyName>MGNamespace</AssemblyName>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <ItemGroup>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Game1.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.13</Version>\n    </PackageReference>\n    <PackageReference Include=\"MonoGame.Framework.WindowsUniversal\" Version=\"3.8.1.1-develop\" />\n    <PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1.1-develop\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Target Name=\"RestoreDotnetTools\" BeforeTargets=\"Restore\">\n    <Message Text=\"Restoring dotnet tools\" Importance=\"High\" />\n    <Exec Command=\"dotnet tool restore\" />\n  </Target>\n</Project>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"MGNamespace\"\n    Publisher=\"CN=MGNamespace\"\n    Version=\"1.0.0.0\" />\n  \n  <mp:PhoneIdentity PhoneProductId=\"00000000-0000-0000-0000-000000000000\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>MGNamespace</DisplayName>\n    <PublisherDisplayName>MGNamespace</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.16299.0\" MaxVersionTested=\"10.0.22621.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"MGNamespace.exe\"\n      EntryPoint=\"MGNamespace.App\">\n      <uap:VisualElements\n        DisplayName=\"MGNamespace\"\n        Square150x150Logo=\"Assets\\Logo.png\"\n        Square44x44Logo=\"Assets\\SmallLogo.png\"\n        Description=\"MGNamespace\"\n        BackgroundColor=\"#464646\">\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Program.cs",
    "content": "﻿using System;\n\nnamespace MGNamespace\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main()\n        {\n            var factory = new MonoGame.Framework.GameFrameworkViewSource<Game1>();\n            Windows.ApplicationModel.Core.CoreApplication.Run(factory);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"MGNamespace\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"MGNamespace\")]\n[assembly: AssemblyProduct(\"MGNamespace\")]\n[assembly: AssemblyCopyright(\"Copyright © 2019\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Seralize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/.config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-mgcb\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb\"\n      ]\n    },\n    \"dotnet-mgcb-editor\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor\"\n      ]\n    },\n    \"dotnet-mgcb-editor-linux\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-linux\"\n      ]\n    },\n    \"dotnet-mgcb-editor-windows\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-windows\"\n      ]\n    },\n    \"dotnet-mgcb-editor-mac\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-mac\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/.template.config/template.json",
    "content": "{\n    \"author\": \"MonoGame Team\",\n    \"classifications\": [\n        \"MonoGame\", \"Games\", \"Desktop\", \"Windows\", \"Xbox\", \"UWP\", \"XAML\"\n    ],\n    \"name\": \"MonoGame Windows Universal XAML Application\",\n    \"groupIdentity\": \"MonoGame.Application.UWP.XAML\",\n    \"identity\": \"MonoGame.Application.UWP.XAML.CSharp\",\n    \"shortName\": \"mguwpxaml\",\n    \"tags\": {\n        \"language\": \"C#\",\n        \"type\": \"project\"\n    },\n    \"primaryOutputs\": [\n        {\n            \"path\": \"MGNamespace.csproj\"\n        }\n    ],\n    \"sourceName\": \"MGNamespace\",\n    \"preferNameDirectory\": \"true\",\n    \"description\": \"A MonoGame game project for Windows Universal using DirectX and setup in a XAML page.\"\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/App.xaml",
    "content": "﻿<Application\n    x:Class=\"MGNamespace.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:UwpGame\">\n\n</Application>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/App.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace MGNamespace\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used such as when the application is launched to open a specific file.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (e.PrelaunchActivated == false)\n            {\n                if (rootFrame.Content == null)\n                {\n                    // When the navigation stack isn't restored navigate to the first page,\n                    // configuring the new page by passing required information as a navigation\n                    // parameter\n                    rootFrame.Navigate(typeof(GamePage), e.Arguments);\n                }\n                // Ensure the current window is active\n                Window.Current.Activate();\n            }\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation</param>\n        /// <param name=\"e\">Details about the navigation failure</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:WindowsStoreApp\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Game1.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace MGNamespace\n{\n    public class Game1 : Game\n    {\n        private GraphicsDeviceManager _graphics;\n        private SpriteBatch _spriteBatch;\n\n        public Game1()\n        {\n            _graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n            IsMouseVisible = true;\n        }\n\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n        }\n\n        protected override void LoadContent()\n        {\n            _spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: use this.Content to load your game content here\n        }\n\n        protected override void Update(GameTime gameTime)\n        {\n            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))\n                Exit();\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/GamePage.xaml",
    "content": "﻿<Page\n    x:Class=\"MGNamespace.GamePage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:UwpGame\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <SwapChainPanel x:Name=\"swapChainPanel\"/>\n</Page>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/GamePage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace MGNamespace\n{\n    public sealed partial class GamePage : Page\n    {\n        readonly Game1 _game;\n\n        public GamePage()\n        {\n            this.InitializeComponent();\n\n            // Create the game.\n            var launchArguments = string.Empty;\n            _game = MonoGame.Framework.XamlGame<Game1>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/MGNamespace.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>MGNamespace</RootNamespace>\n    <AssemblyName>MGNamespace</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\WindowsUniversal\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Game1.cs\" />\n    <Compile Include=\"GamePage.xaml.cs\">\n      <DependentUpon>GamePage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"GamePage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.13</Version>\n    </PackageReference>\n    <PackageReference Include=\"MonoGame.Framework.WindowsUniversal\" Version=\"3.8.1.1-develop\" />\n    <PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1.1-develop\" />\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Target Name=\"RestoreDotnetTools\" BeforeTargets=\"Restore\">\n    <Message Text=\"Restoring dotnet tools\" Importance=\"High\" />\n    <Exec Command=\"dotnet tool restore\" />\n  </Target>\n</Project>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"4dfa9039-3fac-47ef-aca5-bc6f8564f920\"\n    Publisher=\"CN=User\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"4dfa9039-3fac-47ef-aca5-bc6f8564f920\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>MGNamespace</DisplayName>\n    <PublisherDisplayName>User</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.16299.0\" MaxVersionTested=\"10.0.22621.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"MGNamespace.exe\"\n      EntryPoint=\"MGNamespace.App\">\n      <uap:VisualElements\n        DisplayName=\"MGNamespace\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"MGNamespace\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"MGNamespace\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"MGNamespace\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Seralize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/.config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-mgcb\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb\"\n      ]\n    },\n    \"dotnet-mgcb-editor\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor\"\n      ]\n    },\n    \"dotnet-mgcb-editor-linux\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-linux\"\n      ]\n    },\n    \"dotnet-mgcb-editor-windows\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-windows\"\n      ]\n    },\n    \"dotnet-mgcb-editor-mac\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-mac\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/.template.config/template.json",
    "content": "{\r\n    \"author\": \"MonoGame Team\",\r\n    \"classifications\": [\r\n        \"MonoGame\", \"Games\", \"Desktop\", \"Windows\", \"Linux\", \"macOS\"\r\n    ],\r\n    \"name\": \"MonoGame Windows Desktop Application\",\r\n    \"groupIdentity\": \"MonoGame.Application.WindowsDX\",\r\n    \"identity\": \"MonoGame.Application.WindowsDX.CSharp\",\r\n    \"shortName\": \"mgwindowsdx\",\r\n    \"tags\": {\r\n        \"language\": \"C#\",\r\n        \"type\": \"project\"\r\n    },\r\n    \"primaryOutputs\": [\r\n        {\r\n            \"path\": \"MGNamespace.csproj\"\r\n        }\r\n    ],\r\n    \"sourceName\": \"MGNamespace\",\r\n    \"preferNameDirectory\": \"true\",\r\n    \"description\": \"A MonoGame game project for Windows using DirectX.\"\r\n}\r\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/Content/Content.mgcb",
    "content": "\r\n#----------------------------- Global Properties ----------------------------#\r\n\r\n/outputDir:bin/$(Platform)\r\n/intermediateDir:obj/$(Platform)\r\n/platform:Windows\r\n/config:\r\n/profile:Reach\r\n/compress:False\r\n\r\n#-------------------------------- References --------------------------------#\r\n\r\n\r\n#---------------------------------- Content ---------------------------------#\r\n\r\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/Game1.cs",
    "content": "﻿using Microsoft.Xna.Framework;\r\nusing Microsoft.Xna.Framework.Graphics;\r\nusing Microsoft.Xna.Framework.Input;\r\n\r\nnamespace MGNamespace;\r\n\r\npublic class Game1 : Game\r\n{\r\n    private GraphicsDeviceManager _graphics;\r\n    private SpriteBatch _spriteBatch;\r\n\r\n    public Game1()\r\n    {\r\n        _graphics = new GraphicsDeviceManager(this);\r\n        Content.RootDirectory = \"Content\";\r\n        IsMouseVisible = true;\r\n    }\r\n\r\n    protected override void Initialize()\r\n    {\r\n        // TODO: Add your initialization logic here\r\n\r\n        base.Initialize();\r\n    }\r\n\r\n    protected override void LoadContent()\r\n    {\r\n        _spriteBatch = new SpriteBatch(GraphicsDevice);\r\n\r\n        // TODO: use this.Content to load your game content here\r\n    }\r\n\r\n    protected override void Update(GameTime gameTime)\r\n    {\r\n        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))\r\n            Exit();\r\n\r\n        // TODO: Add your update logic here\r\n\r\n        base.Update(gameTime);\r\n    }\r\n\r\n    protected override void Draw(GameTime gameTime)\r\n    {\r\n        GraphicsDevice.Clear(Color.CornflowerBlue);\r\n\r\n        // TODO: Add your drawing code here\r\n\r\n        base.Draw(gameTime);\r\n    }\r\n}\r\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/MGNamespace.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <RollForward>Major</RollForward>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <TieredCompilation>false</TieredCompilation>\n    <UseWindowsForms>true</UseWindowsForms>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"MonoGame.Framework.WindowsDX\" Version=\"3.8.1.1-develop\" />\n    <PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1.1-develop\" />\n  </ItemGroup>\n  <Target Name=\"RestoreDotnetTools\" BeforeTargets=\"Restore\">\n    <Message Text=\"Restoring dotnet tools\" Importance=\"High\" />\n    <Exec Command=\"dotnet tool restore\" />\n  </Target>\n</Project>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/Program.cs",
    "content": "﻿\r\nusing var game = new MGNamespace.Game1();\r\ngame.Run();\r\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MGNamespace\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n      <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">permonitorv2,permonitor</dpiAwareness>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/.config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-mgcb\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb\"\n      ]\n    },\n    \"dotnet-mgcb-editor\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor\"\n      ]\n    },\n    \"dotnet-mgcb-editor-linux\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-linux\"\n      ]\n    },\n    \"dotnet-mgcb-editor-windows\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-windows\"\n      ]\n    },\n    \"dotnet-mgcb-editor-mac\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-mac\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/.template.config/template.json",
    "content": "{\n    \"author\": \"MonoGame Team\",\n    \"classifications\": [\n        \"MonoGame\", \"Games\", \"Mobile\", \"iOS\"\n    ],\n    \"name\": \"MonoGame iOS Application\",\n    \"groupIdentity\": \"MonoGame.Application.iOS\",\n    \"identity\": \"MonoGame.Application.iOS.CSharp\",\n    \"shortName\": \"mgios\",\n    \"tags\": {\n        \"language\": \"C#\",\n        \"type\": \"project\"\n    },\n    \"primaryOutputs\": [\n        {\n            \"path\": \"MGNamespace.csproj\"\n        }\n    ],\n    \"sourceName\": \"MGNamespace\",\n    \"preferNameDirectory\": \"true\",\n    \"description\": \"A MonoGame game project for iOS compatible with iPhone and iPad devices.\"\n}"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Content/Content.mgcb",
    "content": "﻿#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:iOS\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Entitlements.plist",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Game1.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace MGNamespace;\n\npublic class Game1 : Game\n{\n    private GraphicsDeviceManager _graphics;\n    private SpriteBatch _spriteBatch;\n\n    public Game1()\n    {\n        _graphics = new GraphicsDeviceManager(this);\n        Content.RootDirectory = \"Content\";\n        IsMouseVisible = true;\n    }\n\n    protected override void Initialize()\n    {\n        // TODO: Add your initialization logic here\n\n        base.Initialize();\n    }\n\n    protected override void LoadContent()\n    {\n        _spriteBatch = new SpriteBatch(GraphicsDevice);\n\n        // TODO: use this.Content to load your game content here\n    }\n\n    protected override void Update(GameTime gameTime)\n    {\n        // TODO: Add your update logic here\n\n        base.Update(gameTime);\n    }\n\n    protected override void Draw(GameTime gameTime)\n    {\n        GraphicsDevice.Clear(Color.CornflowerBlue);\n\n        // TODO: Add your drawing code here\n\n        base.Draw(gameTime);\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDisplayName</key>\n\t<string>MGNamespace</string>\n\t<key>CFBundleIconFiles</key>\n\t<array>\n\t\t<string>GameThumbnail.png</string>\n\t</array>\n\t<key>CFBundleIdentifier</key>\n\t<string>project.MonoGame.MGNamespace</string>\n\t<key>MinimumOSVersion</key>\n\t<string>11.0</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>CFBundleName</key>\n\t<string>MGNamespace</string>\n\t<key>UIRequiresFullScreen</key>\n\t<true/>\n\t<key>UIStatusBarHidden</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIDeviceFamily</key>\n    <array>\n        <integer>1</integer>\n        <integer>2</integer>\n    </array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/LaunchScreen.storyboard",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"9532\" systemVersion=\"15D21\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\" />\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"9530\" />\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\" />\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\" />\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\" />\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\" />\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\" />\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\" />\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\" />\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/MGNamespace.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-ios</TargetFramework>\n    <OutputType>Exe</OutputType>\n    <SupportedOSPlatformVersion>11.2</SupportedOSPlatformVersion>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"MonoGame.Content.Builder.Task\" Version=\"3.8.1.1-develop\" />\n    <PackageReference Include=\"MonoGame.Framework.iOS\" Version=\"3.8.1.1-develop\" />\n  </ItemGroup>\n  <Target Name=\"RestoreDotnetTools\" BeforeTargets=\"Restore\">\n    <Message Text=\"Restoring dotnet tools\" Importance=\"High\" />\n    <Exec Command=\"dotnet tool restore\" />\n  </Target>\n</Project>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Program.cs",
    "content": "﻿using System;\nusing Foundation;\nusing UIKit;\n\nnamespace MGNamespace\n{\n    [Register(\"AppDelegate\")]\n    class Program : UIApplicationDelegate\n    {\n        private static Game1 game;\n\n        internal static void RunGame()\n        {\n            game = new Game1();\n            game.Run();\n        }\n\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main(string[] args)\n        {\n            UIApplication.Main(args, null, typeof(Program));\n        }\n\n        public override void FinishedLaunching(UIApplication app)\n        {\n            RunGame();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/.config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-mgcb\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb\"\n      ]\n    },\n    \"dotnet-mgcb-editor\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor\"\n      ]\n    },\n    \"dotnet-mgcb-editor-linux\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-linux\"\n      ]\n    },\n    \"dotnet-mgcb-editor-windows\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-windows\"\n      ]\n    },\n    \"dotnet-mgcb-editor-mac\": {\n      \"version\": \"3.8.1.1-develop\",\n      \"commands\": [\n        \"mgcb-editor-mac\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/.template.config/template.json",
    "content": "{\n    \"author\": \"MonoGame Team\",\n    \"classifications\": [\n        \"MonoGame\", \"Games\", \"Library\"\n    ],\n    \"name\": \"MonoGame Game Library\",\n    \"groupIdentity\": \"MonoGame.Library\",\n    \"identity\": \"MonoGame.Library.CSharp\",\n    \"shortName\": \"mglib\",\n    \"tags\": {\n        \"language\": \"C#\",\n        \"type\": \"project\"\n    },\n    \"primaryOutputs\": [\n        {\n            \"path\": \"MGNamespace.csproj\"\n        }\n    ],\n    \"sourceName\": \"MGNamespace\",\n    \"preferNameDirectory\": \"true\",\n    \"description\": \"A MonoGame game library project that can be used to share game code between platforms.\"\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:DesktopGL\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/Game1.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace MGNamespace;\n\npublic class Game1 : Game\n{\n    private GraphicsDeviceManager _graphics;\n    private SpriteBatch _spriteBatch;\n\n    public Game1()\n    {\n        _graphics = new GraphicsDeviceManager(this);\n        Content.RootDirectory = \"Content\";\n        IsMouseVisible = true;\n    }\n\n    protected override void Initialize()\n    {\n        // TODO: Add your initialization logic here\n\n        base.Initialize();\n    }\n\n    protected override void LoadContent()\n    {\n        _spriteBatch = new SpriteBatch(GraphicsDevice);\n\n        // TODO: use this.Content to load your game content here\n    }\n\n    protected override void Update(GameTime gameTime)\n    {\n        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))\n            Exit();\n\n        // TODO: Add your update logic here\n\n        base.Update(gameTime);\n    }\n\n    protected override void Draw(GameTime gameTime)\n    {\n        GraphicsDevice.Clear(Color.CornflowerBlue);\n\n        // TODO: Add your drawing code here\n\n        base.Draw(gameTime);\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/MGNamespace.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"MonoGame.Framework.DesktopGL\" Version=\"3.8.1.1-develop\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Pipeline.Extension.CSharp/.template.config/template.json",
    "content": "{\n    \"author\": \"MonoGame Team\",\n    \"classifications\": [\n        \"MonoGame\", \"Games\", \"Extensions\"\n    ],\n    \"name\": \"MonoGame Content Pipeline Extension\",\n    \"groupIdentity\": \"MonoGame.Library.Pipeline\",\n    \"identity\": \"MonoGame.Library.Pipeline.Extension.CSharp\",\n    \"shortName\": \"mgpipeline\",\n    \"tags\": {\n        \"language\": \"C#\",\n        \"type\": \"project\"\n    },\n    \"primaryOutputs\": [\n        {\n            \"path\": \"MGNamespace.csproj\"\n        }\n    ],\n    \"sourceName\": \"MGNamespace\",\n    \"preferNameDirectory\": \"true\",\n    \"description\": \"A MonoGame content pipeline extension library project.\"\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Pipeline.Extension.CSharp/Importer1.cs",
    "content": "﻿using Microsoft.Xna.Framework.Content.Pipeline;\n\nusing TImport = System.String;\n\nnamespace MGNamespace;\n\n[ContentImporter(\".txt\", DisplayName = \"Importer1\", DefaultProcessor = \"Processor1\")]\npublic class Importer1 : ContentImporter<TImport>\n{\n    public override TImport Import(string filename, ContentImporterContext context)\n    {\n        return default(TImport);\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Pipeline.Extension.CSharp/MGNamespace.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"MonoGame.Framework.Content.Pipeline\" Version=\"3.8.1.1-develop\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"MonoGame.Framework.DesktopGL\" Version=\"3.8.1.1-develop\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Pipeline.Extension.CSharp/Processor1.cs",
    "content": "﻿using Microsoft.Xna.Framework.Content.Pipeline;\n\nusing TInput = System.String;\nusing TOutput = System.String;\n\nnamespace MGNamespace;\n\n[ContentProcessor(DisplayName = \"Processor1\")]\nclass Processor1 : ContentProcessor<TInput, TOutput>\n{\n    public override TOutput Process(TInput input, ContentProcessorContext context)\n    {\n        return default(TOutput);\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/.template.config/template.json",
    "content": "{\n    \"author\": \"MonoGame Team\",\n    \"classifications\": [\n        \"MonoGame\", \"Games\", \"Library\"\n    ],\n    \"name\": \"MonoGame Shared Library Project\",\n    \"groupIdentity\": \"MonoGame.Library.Shared\",\n    \"identity\": \"MonoGame.Library.Shared.CSharp\",\n    \"shortName\": \"mgshared\",\n    \"tags\": {\n        \"language\": \"C#\",\n        \"type\": \"project\"\n    },\n    \"primaryOutputs\": [\n        {\n            \"path\": \"MGNamespace.shproj\"\n        }\n    ],\n    \"sourceName\": \"MGNamespace\",\n    \"preferNameDirectory\": \"true\",\n    \"description\": \"A MonoGame shared library project that can be use to share code and content across all targets.\"\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Windows\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/Game1.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace MGNamespace\n{\n    public class Game1 : Game\n    {\n        private GraphicsDeviceManager _graphics;\n        private SpriteBatch _spriteBatch;\n\n        public Game1()\n        {\n            _graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n            IsMouseVisible = true;\n        }\n\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n        }\n\n        protected override void LoadContent()\n        {\n            _spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: use this.Content to load your game content here\n        }\n\n        protected override void Update(GameTime gameTime)\n        {\n            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))\n                Exit();\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/MGNamespace.projitems",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>6efba8a9-a407-4029-bdd0-651d22a87386</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>MGNamespace</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)Game1.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"$(MSBuildThisFileDirectory)Content\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <MonoGameContentReference Include=\"$(MSBuildThisFileDirectory)Content\\Content.mgcb\" />\n    <None Include=\"$(MSBuildThisFileDirectory)Content\\Content.mgcb\" />\n  </ItemGroup>\n </Project>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/MGNamespace.shproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>a0cdbd0e-3a41-42b7-9425-a838bc2c7383</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\r\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\r\n  <PropertyGroup />\r\n  <Import Project=\"MGNamespace.projitems\" Label=\"Shared\" />\r\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "Templates/MonoGame.Templates.VSExtension/MonoGame.Templates.VSExtension.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MinimumVisualStudioVersion>17.0</MinimumVisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectTypeGuids>{82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <ProjectGuid>{9EBC26EB-8412-4723-B715-1F5BCCECD77A}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>MonoGame.Templates.VSExtension</RootNamespace>\n    <AssemblyName>MonoGame.Templates.VSExtension</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <RuntimeIdentifier>win</RuntimeIdentifier>\n    <GeneratePkgDefFile>true</GeneratePkgDefFile>\n    <UseCodebase>true</UseCodebase>\n    <IncludeAssemblyInVSIXContainer>true</IncludeAssemblyInVSIXContainer>\n    <IncludeDebugSymbolsInVSIXContainer>false</IncludeDebugSymbolsInVSIXContainer>\n    <IncludeDebugSymbolsInLocalVSIXDeployment>false</IncludeDebugSymbolsInLocalVSIXDeployment>\n    <CopyBuildOutputToOutputDirectory>true</CopyBuildOutputToOutputDirectory>\n    <CopyOutputSymbolsToOutputDirectory>true</CopyOutputSymbolsToOutputDirectory>\n    <StartAction>Program</StartAction>\n    <StartProgram Condition=\"'$(DevEnvDir)' != ''\">$(DevEnvDir)devenv.exe</StartProgram>\n    <StartArguments>/rootsuffix Exp</StartArguments>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>..\\..\\Artifacts\\MonoGame.Templates.VSExtension\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"MonoGameTemplatesVSExtensionPackage.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"source.extension.vsixmanifest\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.VisualStudio.SDK\" Version=\"17.*\" ExcludeAssets=\"runtime\" />\n    <PackageReference Include=\"Microsoft.VSSDK.BuildTools\" Version=\"17.*\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Templates.pkgdef\">\n      <IncludeInVSIX>true</IncludeInVSIX>\n    </Content>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\VSSDK\\Microsoft.VsSDK.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Target Name=\"PreCreateVsixContainer\" BeforeTargets=\"GetVsixSourceItems\">\n    <ItemGroup>\n      <_TemplatePackage Include=\"..\\..\\Artifacts\\NuGet\\MonoGame.Templates.CSharp.*.nupkg\" />\n    </ItemGroup>\n    <Error Text=\"No template files found.\" Condition=\"@(_TemplatePackage-&gt;Count()) == 0\" />\n    <Message Text=\"Template nuget packages found: @(_TemplatePackage)\" Importance=\"low\" />\n    <ItemGroup>\n      <VSIXSourceItem Include=\"@(_TemplatePackage)\">\n        <VSIXSubPath>ProjectTemplates\\</VSIXSubPath>\n      </VSIXSourceItem>\n    </ItemGroup>\n  </Target>\n</Project>\n"
  },
  {
    "path": "Templates/MonoGame.Templates.VSExtension/MonoGameTemplatesVSExtensionPackage.cs",
    "content": "﻿using Microsoft.VisualStudio;\nusing Microsoft.VisualStudio.Shell;\nusing Microsoft.VisualStudio.Shell.Interop;\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Threading;\nusing System.Diagnostics;\nusing Task = System.Threading.Tasks.Task;\n\nnamespace MonoGame.Templates.VSExtension\n{\n    /// <summary>\n    /// This is the class that implements the package exposed by this assembly.\n    /// </summary>\n    /// <remarks>\n    /// <para>\n    /// The minimum requirement for a class to be considered a valid package for Visual Studio\n    /// is to implement the IVsPackage interface and register itself with the shell.\n    /// This package uses the helper classes defined inside the Managed Package Framework (MPF)\n    /// to do it: it derives from the Package class that provides the implementation of the\n    /// IVsPackage interface and uses the registration attributes defined in the framework to\n    /// register itself and its components with the shell. These attributes tell the pkgdef creation\n    /// utility what data to put into .pkgdef file.\n    /// </para>\n    /// <para>\n    /// To get loaded into VS, the package must be referred by &lt;Asset Type=\"Microsoft.VisualStudio.VsPackage\" ...&gt; in .vsixmanifest file.\n    /// </para>\n    /// </remarks>\n    [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]\n    [Guid(MonoGameTemplatesVSExtensionPackage.PackageGuidString)]\n    [ProvideEditorExtension(typeof(EditorFactory), \".mgcb\", int.MaxValue, DefaultName = \"MGCB Editor\")]\n    public sealed class MonoGameTemplatesVSExtensionPackage : AsyncPackage\n    {\n        /// <summary>\n        /// MonoGameTemplatesPackage GUID string.\n        /// </summary>\n        public const string PackageGuidString = \"618bc6bc-7a4c-4c3f-8b0f-d4479c8e8690\";\n\n    #region Package Members\n\n        /// <summary>\n        /// Initialization of the package; this method is called right after the package is sited, so this is the place\n        /// where you can put all the initialization code that rely on services provided by VisualStudio.\n        /// </summary>\n        /// <param name=\"cancellationToken\">A cancellation token to monitor for initialization cancellation, which can occur when VS is shutting down.</param>\n        /// <param name=\"progress\">A provider for progress updates.</param>\n        /// <returns>A task representing the async work of package initialization, or an already completed task if there is none. Do not return null from this method.</returns>\n        protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)\n        {\n            RegisterEditorFactory(new EditorFactory());\n\n            // When initialized asynchronously, the current thread may be a background thread at this point.\n            // Do any initialization that requires the UI thread after switching to the UI thread.\n            await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);\n        }\n\n    #endregion\n    }\n\n    [Guid(EditorFactory.GUID)]\n    public class EditorFactory : IVsEditorFactory\n    {\n        public const string GUID = \"3ec6cbd1-65bd-4b26-a758-3b207d048872\";\n\n        public int CreateEditorInstance(uint grfCreateDoc, string pszMkDocument, string pszPhysicalView, IVsHierarchy pvHier, uint itemid, IntPtr punkDocDataExisting, out IntPtr ppunkDocView, out IntPtr ppunkDocData, out string pbstrEditorCaption, out Guid pguidCmdUI, out int pgrfCDW)\n        {\n            ppunkDocView = IntPtr.Zero;\n            ppunkDocData = IntPtr.Zero;\n            pguidCmdUI = new Guid(GUID);\n            pgrfCDW = 0;\n            pbstrEditorCaption = null;\n\n            // open MGCB editor here\n            var process = new Process();\n            process.StartInfo.FileName = \"dotnet.exe\";\n            process.StartInfo.Arguments = $\"mgcb-editor \\\"{pszMkDocument}\\\"\";\n            process.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(pszMkDocument);\n            process.StartInfo.CreateNoWindow = true;\n            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;\n            process.StartInfo.UseShellExecute = false;\n            process.StartInfo.RedirectStandardOutput = true;\n\n            process.Start();\n            \n            // this while loop freezes Visual Studio\n            /*\n            while (!process.StandardOutput.EndOfStream)\n            {\n                string str = process.StandardOutput.ReadLine();\n                System.Diagnostics.Debug.WriteLine(str);\n            }\n            */\n            return VSConstants.S_OK;\n        }\n\n        public int SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider psp)\n        {\n            return VSConstants.S_OK;\n        }\n\n        public int Close()\n        {\n            return VSConstants.S_OK;\n        }\n\n        public int MapLogicalView(ref Guid rguidLogicalView, out string pbstrPhysicalView)\n        {\n            pbstrPhysicalView = null;\n\n            return VSConstants.S_OK;\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/MonoGame.Templates.VSExtension/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"MonoGame.Templates.VSExtension\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"MonoGame.Templates.VSExtension\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/MonoGame.Templates.VSExtension/Templates.pkgdef",
    "content": "[$RootKey$\\TemplateEngine\\Templates\\MonoGame.Templates.VSExtension\\3.8.1.1]\n\"InstalledPath\"=\"$PackageFolder$\\ProjectTemplates\"\n"
  },
  {
    "path": "Templates/MonoGame.Templates.VSExtension/source.extension.vsixmanifest",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PackageManifest Version=\"2.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vsx-schema/2011\" xmlns:d=\"http://schemas.microsoft.com/developer/vsx-schema-design/2011\">\n\t<Metadata>\n\t\t<Identity Version=\"3.8.1.1\" Id=\"MonoGame.Templates.VSExtension.03a6f6d5-6ec0-45ff-a4f6-ec098d51464d\" Language=\"en-US\" Publisher=\"MonoGame\" />\n\t\t<DisplayName>MonoGame Framework C# project templates</DisplayName>\n\t\t<Description xml:space=\"preserve\">This extension contains the C# project templates for using the MonoGame Framework</Description>\n\t\t<Tags>.NET,C#,Game development,Templates,Games,Gamedev,Project,Mono,MonoGame</Tags>\n\t</Metadata>\n\t<Installation>\n\t\t<InstallationTarget Id=\"Microsoft.VisualStudio.Community\" Version=\"[17.0, 18.0)\">\n\t\t\t<ProductArchitecture>amd64</ProductArchitecture>\n\t\t</InstallationTarget>\n\t</Installation>\n\t<Dependencies>\n\t\t<Dependency Id=\"Microsoft.Framework.NDP\" DisplayName=\"Microsoft .NET Framework\" d:Source=\"Manual\" Version=\"[4.5,)\" />\n\t</Dependencies>\n\t<Prerequisites>\n\t\t<Prerequisite Id=\"Microsoft.VisualStudio.Component.CoreEditor\" Version=\"[17.0,18.0)\" DisplayName=\"Visual Studio core editor\" />\n\t</Prerequisites>\n\t<Assets>\n\t\t<Asset Type=\"Microsoft.VisualStudio.VsPackage\" d:Source=\"Project\" d:ProjectName=\"%CurrentProject%\" Path=\"|%CurrentProject%;PkgdefProjectOutputGroup|\" />\n\t\t<Asset Type=\"Microsoft.VisualStudio.VsPackage\" d:Source=\"File\" Path=\"Templates.pkgdef\" />\n\t</Assets>\n</PackageManifest>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ItemTemplates/DrawableGameComponent/DrawableGameComponent.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace $rootnamespace$\n{\n    internal class $safeitemname$ : DrawableGameComponent\n    {\n        public $safeitemname$(Game game) : base(game)\n        {\n        }\n\n        /// <summary>Initializes the component. Used to load non-graphical resources.</summary>\n        public override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <summary>Load graphical resources needed by this component.</summary>\n        protected override void LoadContent()\n        {\n        }\n\n        /// <summary>Unload graphical resources needed by this component.</summary>\n        protected override void UnloadContent()\n        {\n        }\n\n        /// <summary>Update the component.</summary>\n        /// <param name=\"gameTime\">GameTime of the Game.</param>\n        public override void Update(GameTime gameTime)\n        {\n        }\n\n        /// <summary>Draw this component.</summary>\n        /// <param name=\"gameTime\">The time elapsed since the last call to Draw.</param>\n        public override void Draw(GameTime gameTime)\n        {\n        }\n\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ItemTemplates/DrawableGameComponent/DrawableGameComponent.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Item\">\n  <TemplateData>\n    <DefaultName>DrawableGameComponent.cs</DefaultName>\n    <Name>DrawableGameComponent item (KNI)</Name>\n    <Description>DrawableGameComponent for KNI</Description>\n    <ProjectType>CSharp</ProjectType>\n    <SortOrder>40010</SortOrder>\n    <Icon>TemplateIcon.png</Icon>\n  </TemplateData>\n  <TemplateContent>\n    <!--\n    <References>\n      <Reference>\n        <Assembly>nkast.Xna.Framework.Game</Assembly>\n      </Reference>\n    </References>\n    -->\n    <ProjectItem\n       TargetFileName=\"$fileinputname$.cs\"\n       ReplaceParameters=\"true\"\n       SubType=\"\" >DrawableGameComponent.cs</ProjectItem>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ItemTemplates/GameComponent/GameComponent.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace $rootnamespace$\n{\n    internal class $safeitemname$ : GameComponent\n    {\n        public $safeitemname$(Game game) : base(game)\n        {\n        }\n\n        /// <summary>Initializes the component. Used to load non-graphical resources.</summary>\n        public override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <summary>Update the component.</summary>\n        /// <param name=\"gameTime\">GameTime of the Game.</param>\n        public override void Update(GameTime gameTime)\n        {\n        }\n\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ItemTemplates/GameComponent/GameComponent.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Item\">\n  <TemplateData>\n    <DefaultName>GameComponent.cs</DefaultName>\n    <Name>GameComponent item (KNI)</Name>\n    <Description>GameComponent for KNI</Description>\n    <ProjectType>CSharp</ProjectType>\n    <SortOrder>40020</SortOrder>\n    <Icon>TemplateIcon.png</Icon>\n  </TemplateData>\n  <TemplateContent>\n    <!--\n    <References>\n      <Reference>\n        <Assembly>nkast.Xna.Framework.Game</Assembly>\n      </Reference>\n    </References>\n    -->\n    <ProjectItem\n       TargetFileName=\"$fileinputname$.cs\"\n       ReplaceParameters=\"true\"\n       SubType=\"\" >GameComponent.cs</ProjectItem>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Activity.cs",
    "content": "using Microsoft.Xna.Framework;\nusing Android.App;\nusing Android.Content.PM;\nusing Android.OS;\nusing Android.Views;\n\nnamespace $safeprojectname$\n{\n    [Activity(Label = \"$projectname$\"\n        , MainLauncher = true\n        , Icon = \"@drawable/icon\"\n        , Theme = \"@style/Theme.Splash\"\n        , AlwaysRetainTaskState = true\n        , LaunchMode = LaunchMode.SingleInstance\n        , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize\n        , ScreenOrientation = ScreenOrientation.FullSensor\n    )]\n    public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity\n    {\n        protected override void OnCreate(Bundle bundle)\n        {\n            base.OnCreate(bundle);\n            Game game = new $safeprojectname$Game();\n            SetContentView((View)game.Services.GetService(typeof(View)));\n            game.Run();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"$safeprojectname$.$safeprojectname$\" android:versionCode=\"1\" android:versionName=\"1.0\">\n\t<application android:label=\"$projectname$\"></application>\n\t<uses-permission android:name=\"android.permission.VIBRATE\" />\n\t<uses-permission android:name=\"android.permission.INTERNET\" />\n\t<uses-permission android:name=\"com.android.vending.BILLING\" />\n</manifest>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Application.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-android</TargetFramework>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <IsTrimmable>True</IsTrimmable>\n    <TrimMode>partial</TrimMode>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);ANDROID</DefineConstants>\n    <KniPlatform>Android</KniPlatform>\n    <ApplicationId>com.companyname.$safeprojectname$</ApplicationId>\n    <ApplicationVersion>1</ApplicationVersion>\n    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n    <AndroidStoreUncompressedFileExtensions>.m4a</AndroidStoreUncompressedFileExtensions>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Android.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"$safeprojectname$Activity.cs\" />\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"AndroidManifest.xml\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Splash.png\" />\n    <AndroidResource Include=\"Resources\\Values\\Strings.xml\" />\n    <AndroidResource Include=\"Resources\\Values\\Styles.xml\" />\n    <Folder Include=\"Resources\\Layout\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with your package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Android\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Game.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.IsFullScreen = true;\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Android Project (.net8)</Name>\n    <Description>A KNI game project for Android.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>android</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>mobile</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43201</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AndroidManifest.xml\">AndroidManifest.xml</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Activity.cs\">Activity.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Assets\" TargetFolderName=\"Assets\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AboutAssets.txt\">AboutAssets.txt</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Resources\" TargetFolderName=\"Resources\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AboutResources.txt\">AboutResources.txt</ProjectItem>\n        <Folder Name=\"Drawable\" TargetFolderName=\"Drawable\">\n          <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.png\">Icon.png</ProjectItem>\n          <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Splash.png\">Splash.png</ProjectItem>\n        </Folder>\n        <Folder Name=\"Layout\" TargetFolderName=\"Layout\" />\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Resource.Designer.cs\">Resource.Designer.cs</ProjectItem>\n        <Folder Name=\"Values\" TargetFolderName=\"Values\">\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Strings.xml\">Strings.xml</ProjectItem>\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Styles.xml\">Styles.xml</ProjectItem>\n        </Folder>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (Main.xml),\nan internationalization string table (Strings.xml) and some icons (drawable/Icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    Drawable/\n        Icon.png\n\n    Layout/\n        Main.axml\n\n    Values/\n        Strings.xml\n\nIn order to get the build system to recognize Android resources, the build action should be set \nto \"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called\n\"Resource\" that contains the tokens for each one of the resources included. For example, \nfor the above Resources layout, this is what the Resource class would expose:\n\npublic class Resource {\n    public class Drawable {\n        public const int Icon = 0x123;\n    }\n\n    public class Layout {\n        public const int Main = 0x456;\n    }\n\n    public class String {\n        public const int FirstString = 0xabc;\n        public const int SecondString = 0xbcd;\n    }\n}\n\nYou would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or \nResource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString\nto reference the first string in the dictionary file Values/Strings.xml."
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Resources/Resource.Designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.269\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace $safeprojectname$\n{\n\t\n\t\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020001\n\t\t\tpublic const int Splash = 2130837505;\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int ApplicationName = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Hello = 2130903040;\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int Theme_Splash = 2130968576;\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ApplicationName\">$safeprojectname$</string>\n</resources>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Resources/Values/Styles.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <style name=\"Theme.Splash\" parent=\"android:Theme\">\n    <item name=\"android:windowBackground\">@drawable/splash</item>\n    <item name=\"android:windowNoTitle\">true</item>\n  </style>\n</resources>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/App.razor",
    "content": "﻿<Router AppAssembly=\"@typeof(App).Assembly\">\n    <Found Context=\"routeData\">\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\n        <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\n    </Found>\n    <NotFound>\n        <PageTitle>Not found</PageTitle>\n        <LayoutView Layout=\"@typeof(MainLayout)\">\n            <p role=\"alert\">Sorry, there's nothing at this address.</p>\n        </LayoutView>\n    </NotFound>\n</Router>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Application.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0</TargetFramework>\n    <Nullable>disable</Nullable>\n    <ImplicitUsings>disable</ImplicitUsings>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefineConstants>$(DefineConstants);BLAZORGL</DefineConstants>\n\t<KniPlatform>BlazorGL</KniPlatform>\n  </PropertyGroup>\n  \n  <PropertyGroup>\n    <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>\n    <!--<InvariantGlobalization>true</InvariantGlobalization>-->\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Pages\\Index.razor.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Blazor.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.17\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.17\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:BlazorGL\n/config:\n/profile:Reach\n/compress:True\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Web browser Platform Project (.net8)</Name>\n    <Description>A KNI game project for Blazor webassembly using WebGL.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>web</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>web</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43300</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"$safeprojectname$Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"_Imports.razor\">_Imports.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"App.razor\">App.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>      \n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"MainLayout.razor\">MainLayout.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"MainLayout.razor.css\">MainLayout.razor.css</ProjectItem>      \n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Pages\" TargetFolderName=\"Pages\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Index.razor\">Index.razor</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Index.razor.cs\">Index.razor.cs</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"launchSettings.json\">launchSettings.json</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"wwwroot\" TargetFolderName=\"wwwroot\">\n        <Folder Name=\"css\" TargetFolderName=\"css\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"app.css\">app.css</ProjectItem>\n            <Folder Name=\"bootstrap\" TargetFolderName=\"bootstrap\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bootstrap.min.css\">bootstrap.min.css</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bootstrap.min.css.map\">bootstrap.min.css.map</ProjectItem>\n            </Folder>\n        </Folder>\n        <Folder Name=\"js\" TargetFolderName=\"js\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"decode.min.js\">decode.min.js</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"streamProcessor.js\">streamProcessor.js</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"micProcessor.js\">micProcessor.js</ProjectItem>\n        </Folder>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"favicon.ico\">favicon.ico</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"kni.png\">kni.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"index.html\">index.html</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/MainLayout.razor",
    "content": "﻿@inherits LayoutComponentBase\n\n<div class=\"page\">\n    <main>\n            @Body\n    </main>\n</div>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/MainLayout.razor.css",
    "content": ".page\n{\n    position: relative;\n    display: flex;\n    flex-direction: column;\n}\n\nmain\n{\n    flex: 1;\n}\n\n.sidebar\n{\n    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);\n}\n\n.top-row\n{\n    background-color: #f7f7f7;\n    border-bottom: 1px solid #d6d5d5;\n    justify-content: flex-end;\n    height: 3.5rem;\n    display: flex;\n    align-items: center;\n}\n\n    .top-row ::deep a, .top-row ::deep .btn-link\n    {\n        white-space: nowrap;\n        margin-left: 1.5rem;\n        text-decoration: none;\n    }\n\n    .top-row ::deep a:hover, .top-row ::deep .btn-link:hover\n    {\n        text-decoration: underline;\n    }\n\n    .top-row ::deep a:first-child\n    {\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n\n@media (max-width: 640.98px)\n{\n    .top-row:not(.auth)\n    {\n        display: none;\n    }\n\n    .top-row.auth\n    {\n        justify-content: space-between;\n    }\n\n    .top-row ::deep a, .top-row ::deep .btn-link\n    {\n        margin-left: 0;\n    }\n}\n\n@media (min-width: 641px)\n{\n    .page\n    {\n        flex-direction: row;\n    }\n\n    .sidebar\n    {\n        width: 250px;\n        height: 100vh;\n        position: sticky;\n        top: 0;\n    }\n\n    .top-row\n    {\n        position: sticky;\n        top: 0;\n        z-index: 1;\n    }\n\n    .top-row.auth ::deep a:first-child\n    {\n        flex: 1;\n        text-align: right;\n        width: 0;\n    }\n\n    .top-row, article\n    {\n        padding-left: 2rem !important;\n        padding-right: 1.5rem !important;\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Pages/Index.razor",
    "content": "﻿@page \"/\"\n@page \"/index.html\"\n@inject IJSRuntime JsRuntime\n@using nkast.Wasm.Canvas\n\n<PageTitle>$projectname$</PageTitle>\n\n<div id=\"canvasHolder\" style=\"\n    background: #000;\n    margin:0%;\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n    width:100vw;\n    height:100vh;\n\">\n    <canvas id=\"theCanvas\" style=\"touch-action:none;\"></canvas>\n</div>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Pages/Index.razor.cs",
    "content": "using System;\nusing Microsoft.JSInterop;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$.Pages\n{\n    public partial class Index\n    {\n        Game _game;\n\n        protected override void OnAfterRender(bool firstRender)\n        {\n            base.OnAfterRender(firstRender);\n\n            if (firstRender)\n            {\n                JsRuntime.InvokeAsync<object>(\"initRenderJS\", DotNetObjectReference.Create(this));\n            }\n        }\n\n        [JSInvokable]\n        public void TickDotNet()\n        {\n            // init game\n            if (_game == null)\n            {\n                _game = new $safeprojectname$Game();\n                _game.Run();\n            }\n\n            // run gameloop\n            _game.Tick();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Program.cs",
    "content": "using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Components.Web;\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace $safeprojectname$\n{\n    internal class Program\n    {\n        private static async Task Main(string[] args)\n        {\n            var builder = WebAssemblyHostBuilder.CreateDefault(args);\n            builder.RootComponents.Add<App>(\"#app\");\n            builder.RootComponents.Add<HeadOutlet>(\"head::after\");\n            builder.Services.AddScoped(sp => new HttpClient()\n            {\n                BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)\n            });\n            await builder.Build().RunAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:56897\",\n      \"sslPort\": 0\n    }\n  },\n  \"profiles\": {\n    \"$safeprojectname$\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": true,\n      \"launchBrowser\": true,\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\",\n      \"applicationUrl\": \"http://localhost:5259\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/_Imports.razor",
    "content": "﻿@using System.Net.Http\n@using System.Net.Http.Json\n@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNetCore.Components.Routing\n@using Microsoft.AspNetCore.Components.Web\n@using Microsoft.AspNetCore.Components.Web.Virtualization\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\n@using Microsoft.JSInterop\n@using nkast.Wasm.Canvas\n@using $safeprojectname$\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/Content/Content.txt",
    "content": ""
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/css/app.css",
    "content": "﻿\nhtml, body\n{\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n\nh1:focus\n{\n    outline: none;\n}\n\na, .btn-link\n{\n    color: #0077cc;\n}\n\n.btn-primary\n{\n    color: #fff;\n    background-color: #1b6ec2;\n    border-color: #1861ac;\n}\n\n.content\n{\n    padding-top: 1.1rem;\n}\n\n.valid.modified:not([type=checkbox])\n{\n    outline: 1px solid #26b050;\n}\n\n.invalid\n{\n    outline: 1px solid red;\n}\n\n.validation-message\n{\n    color: red;\n}\n\n#blazor-error-ui\n{\n    background: lightyellow;\n    bottom: 0;\n    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);\n    display: none;\n    left: 0;\n    padding: 0.6rem 1.25rem 0.7rem 1.25rem;\n    position: fixed;\n    width: 100%;\n    z-index: 1000;\n}\n\n    #blazor-error-ui .dismiss\n    {\n        cursor: pointer;\n        position: absolute;\n        right: 0.75rem;\n        top: 0.5rem;\n    }\n\n.blazor-error-boundary\n{\n    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;\n    padding: 1rem 1rem 1rem 3.7rem;\n    color: white;\n}\n\n    .blazor-error-boundary::after\n    {\n        content: \"An error has occurred.\"\n    }\n\n#theCanvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n\n    /* Disable text highlighting and magnifying glass on iPhone/webkit */\n    -webkit-user-select: none;\n}\n\n\n#canvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/index.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n    <title>$projectname$</title>\n    <base href=\"./\" />\n    <link href=\"css/bootstrap/bootstrap.min.css\" rel=\"stylesheet\" />\n    <link href=\"css/app.css\" rel=\"stylesheet\" />\n    <link href=\"$safeprojectname$.styles.css\" rel=\"stylesheet\" />\n</head>\n\n<body>\n\n    <div id=\"app\">\n        <div id=\"loading\" style=\"display: table-cell; margin: auto; width:100vw; height:100vh; vertical-align: middle; background: #ffcc10;\">\n            <div style=\"display: block; margin: auto; width: 9em; color: white;font-family: 'Segoe UI', sans-serif;\">\n                <div style=\"text-align: center; font-size: 0.85em;\">Made with<br/><a href=\"https://github.com/kniEngine/kni\"><img src=\"kni.png\" border=\"0\" alt=\"Kni\"></a></div>\n                <div style=\"text-align: center; font-size: 1.8em;\">loading&nbsp;<marquee style=\"width:0.9em; vertical-align: bottom;\">.&nbsp;.&nbsp;.&nbsp;&nbsp;&nbsp;</marquee></div>\n            </div>\n        </div>\n    </div>\n\n    <div id=\"blazor-error-ui\">\n        An unhandled error has occurred.\n        <a href=\"\" class=\"reload\">Reload</a>\n        <a class=\"dismiss\">x</a>\n    </div>\n\n    <script src=\"_framework/blazor.webassembly.js\" autostart=\"false\"></script>\n    <script type=\"module\">\n        import { BrotliDecode } from './js/decode.min.js';\n        window.BrotliDecode = BrotliDecode;\n        // Set this to enable Brotli (.br) decompression on static webServers\n        // that don't support content compression and http://.\n        var enableBrotliDecompression = false;\n        Blazor.start({\n            loadBootResource: function (type, name, defaultUri, integrity)\n            {\n                if (enableBrotliDecompression === true && type !== 'dotnetjs' && location.hostname !== 'localhost')\n                {\n                    return (async function()\n                    {\n                        const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });\n                        if (!response.ok)\n                            throw new Error(response.statusText);\n                        const originalResponseBuffer = await response.arrayBuffer();\n                        const originalResponseArray = new Int8Array(originalResponseBuffer);\n                        const contentType = (type === 'dotnetwasm')\n                                          ? 'application/wasm'\n                                          : 'application/octet-stream';\n                        const decompressedResponseArray = BrotliDecode(originalResponseArray);\n                        return new Response(decompressedResponseArray,\n                                            { headers: { 'content-type': contentType }\n                                   });\n                    })();\n                }\n            }\n        });\n    </script>\n\n    <script src=\"_content/nkast.Wasm.JSInterop/js/JSObject.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XR/js/XR.8.0.11.js\"></script>\n\n    <script>\n        function tickJS()\n        {\n            window.theInstance.invokeMethod('TickDotNet');\n            window.requestAnimationFrame(tickJS);\n        }\n\n        window.initRenderJS = (instance) =>\n        {\n            window.theInstance = instance;\n\n            // set initial canvas size\n            var canvas = document.getElementById('theCanvas');\n            var holder = document.getElementById('canvasHolder');\n            canvas.width = holder.clientWidth;\n            canvas.height = holder.clientHeight;\n            // disable context menu on right click\n            canvas.addEventListener(\"contextmenu\", e => e.preventDefault());\n            \n            // begin game loop\n            window.requestAnimationFrame(tickJS);\n        };\n\n        window.addEventListener(\"keydown\", function(event)\n        {\n            // Prevent Arrows Keys and Spacebar scrolling the outer page\n            // when running inside an iframe. e.g: itch.io embedding.\n            if ([32, 37, 38, 39, 40].indexOf(event.keyCode) > -1)\n                event.preventDefault();\n        });\n        window.addEventListener(\"wheel\", function(event)\n        {\n            // Prevent Mousewheel scrolling the outer page\n            // when running inside an iframe. e.g: itch.io embedding.\n            event.preventDefault();\n        }, { passive: false });\n    </script>\n</body>\n\n</html>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/js/decode.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @typedef {!Object} Options\n * @property {?Int8Array} customDictionary\n */\nlet Options;\n\n/**\n * Private scope / static initializer for decoder.\n *\n * @return {function(!Int8Array, ?Options=):!Int8Array}\n */\nlet makeBrotliDecode = () => {\n/* GENERATED CODE BEGIN */\n  /** @type {!Int32Array} */\n  const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\n  /** @type {!Int32Array} */\n  const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\n  /** @type {!Int32Array} */\n  const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\n  /** @type {!Int16Array} */\n  const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\n  /** @type {!Int16Array} */\n  const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\n  /** @type {!Int16Array} */\n  const CMD_LOOKUP = new Int16Array(2816);\n  {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n  /**\n   * @param {number} i\n   * @return {number}\n   */\n  function log2floor(i) {\n    let /** @type {number} */ result = -1;\n    let /** @type {number} */ step = 16;\n    while (step > 0) {\n      if ((i >>> step) !== 0) {\n        result += step;\n        i = i >>> step;\n      }\n      step = step >> 1;\n    }\n    return result + i;\n  }\n  /**\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @param {number} maxndistbits\n   * @return {number}\n   */\n  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {\n    return 16 + ndirect + 2 * (maxndistbits << npostfix);\n  }\n  /**\n   * @param {number} maxDistance\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @return {number}\n   */\n  function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      throw new Error(\"maxDistance is too small\");\n    }\n    const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    const /** @type {number} */ ndistbits = log2floor(offset) - 1;\n    const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n  }\n  /**\n   * @param {!Int16Array} cmdLookup\n   * @return {void}\n   */\n  function unpackCommandLookupTable(cmdLookup) {\n    const /** @type {!Int16Array} */ insertLengthOffsets = new Int16Array(24);\n    const /** @type {!Int16Array} */ copyLengthOffsets = new Int16Array(24);\n    copyLengthOffsets[0] = 2;\n    for (let /** @type {number} */ i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]));\n      copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]));\n    }\n    for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) {\n      let /** @type {number} */ rangeIdx = cmdCode >>> 6;\n      let /** @type {number} */ distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      const /** @type {number} */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7);\n      const /** @type {number} */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode];\n      const /** @type {number} */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2);\n      const /** @type {number} */ index = cmdCode * 4;\n      cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8));\n      cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = distanceContext;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeWindowBits(s) {\n    const /** @type {number} */ largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 0) {\n      return 16;\n    }\n    let /** @type {number} */ n = readFewBits(s, 3);\n    if (n !== 0) {\n      return 17 + n;\n    }\n    n = readFewBits(s, 3);\n    if (n !== 0) {\n      if (n === 1) {\n        if (largeWindowEnabled === 0) {\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        if (readFewBits(s, 1) === 1) {\n          return -1;\n        }\n        n = readFewBits(s, 6);\n        if (n < 10 || n > 30) {\n          return -1;\n        }\n        return n;\n      } else {\n        return 8 + n;\n      }\n    }\n    return 17;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableEagerOutput(s) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    s.isEager = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableLargeWindow(s) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    s.isLargeWindow = 1;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @return {void}\n   */\n  function attachDictionaryChunk(s, data) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    if (s.cdNumChunks === 0) {\n      s.cdChunks = new Array(16);\n      s.cdChunkOffsets = new Int32Array(16);\n      s.cdBlockBits = -1;\n    }\n    if (s.cdNumChunks === 15) {\n      throw new Error(\"Too many dictionary chunks\");\n    }\n    s.cdChunks[s.cdNumChunks] = data;\n    s.cdNumChunks++;\n    s.cdTotalSize += data.length;\n    s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n  }\n  /**\n   * @param {!State} s\n   * @param {!InputStream} input\n   * @return {void}\n   */\n  function initState(s, input) {\n    if (s.runningState !== 0) {\n      throw new Error(\"State MUST be uninitialized\");\n    }\n    s.blockTrees = new Int32Array(3091);\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    const /** @type {number} */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 120);\n    s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n    s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n    s.input = input;\n    initBitReader(s);\n    s.runningState = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function close(s) {\n    if (s.runningState === 0) {\n      throw new Error(\"State MUST be initialized\");\n    }\n    if (s.runningState === 11) {\n      return;\n    }\n    s.runningState = 11;\n    if (s.input !== null) {\n      s.input = null;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeVarLenUnsignedByte(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) !== 0) {\n      const /** @type {number} */ n = readFewBits(s, 3);\n      if (n === 0) {\n        return 1;\n      } else {\n        return readFewBits(s, n) + (1 << n);\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeMetaBlockLength(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.inputEnd = readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) {\n      return;\n    }\n    const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4;\n    if (sizeNibbles === 7) {\n      s.isMetadata = 1;\n      if (readFewBits(s, 1) !== 0) {\n        throw new Error(\"Corrupted reserved bit\");\n      }\n      const /** @type {number} */ sizeBytes = readFewBits(s, 2);\n      if (sizeBytes === 0) {\n        return;\n      }\n      for (let /** @type {number} */ i = 0; i < sizeBytes; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 8);\n        if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) {\n          throw new Error(\"Exuberant nibble\");\n        }\n        s.metaBlockLength |= bits << (i * 8);\n      }\n    } else {\n      for (let /** @type {number} */ i = 0; i < sizeNibbles; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 4);\n        if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) {\n          throw new Error(\"Exuberant nibble\");\n        }\n        s.metaBlockLength |= bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd === 0) {\n      s.isUncompressed = readFewBits(s, 1);\n    }\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSymbol(tableGroup, tableIdx, s) {\n    let /** @type {number} */ offset = tableGroup[tableIdx];\n    const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset);\n    offset += val & 0xFF;\n    const /** @type {number} */ bits = tableGroup[offset] >> 16;\n    const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= 8) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    const /** @type {number} */ mask = (1 << bits) - 1;\n    offset += (val & mask) >>> 8;\n    s.bitOffset += ((tableGroup[offset] >> 16) + 8);\n    return tableGroup[offset] & 0xFFFF;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readBlockLength(tableGroup, tableIdx, s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s);\n    const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n  }\n  /**\n   * @param {!Int32Array} v\n   * @param {number} index\n   * @return {void}\n   */\n  function moveToFront(v, index) {\n    const /** @type {number} */ value = v[index];\n    for (; index > 0; index--) {\n      v[index] = v[index - 1];\n    }\n    v[0] = value;\n  }\n  /**\n   * @param {!Int8Array} v\n   * @param {number} vLen\n   * @return {void}\n   */\n  function inverseMoveToFrontTransform(v, vLen) {\n    const /** @type {!Int32Array} */ mtf = new Int32Array(256);\n    for (let /** @type {number} */ i = 0; i < 256; i++) {\n      mtf[i] = i;\n    }\n    for (let /** @type {number} */ i = 0; i < vLen; i++) {\n      const /** @type {number} */ index = v[i] & 0xFF;\n      v[i] = mtf[index];\n      if (index !== 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n  /**\n   * @param {!Int32Array} codeLengthCodeLengths\n   * @param {number} numSymbols\n   * @param {!Int32Array} codeLengths\n   * @param {!State} s\n   * @return {void}\n   */\n  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {\n    let /** @type {number} */ symbol = 0;\n    let /** @type {number} */ prevCodeLen = 8;\n    let /** @type {number} */ repeat = 0;\n    let /** @type {number} */ repeatCodeLen = 0;\n    let /** @type {number} */ space = 32768;\n    const /** @type {!Int32Array} */ table = new Int32Array(33);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31;\n      s.bitOffset += table[p] >> 16;\n      const /** @type {number} */ codeLen = table[p] & 0xFFFF;\n      if (codeLen < 16) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen !== 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        const /** @type {number} */ extraBits = codeLen - 14;\n        let /** @type {number} */ newLen = 0;\n        if (codeLen === 16) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen !== newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        const /** @type {number} */ oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat <<= extraBits;\n        }\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        repeat += readFewBits(s, extraBits) + 3;\n        const /** @type {number} */ repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          throw new Error(\"symbol + repeatDelta > numSymbols\");\n        }\n        for (let /** @type {number} */ i = 0; i < repeatDelta; i++) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen !== 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space !== 0) {\n      throw new Error(\"Unused space\");\n    }\n    codeLengths.fill(0, symbol, numSymbols);\n  }\n  /**\n   * @param {!Int32Array} symbols\n   * @param {number} length\n   * @return {void}\n   */\n  function checkDupes(symbols, length) {\n    for (let /** @type {number} */ i = 0; i < length - 1; ++i) {\n      for (let /** @type {number} */ j = i + 1; j < length; ++j) {\n        if (symbols[i] === symbols[j]) {\n          throw new Error(\"Duplicate simple Huffman code symbol\");\n        }\n      }\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ symbols = new Int32Array(4);\n    const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1);\n    const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1;\n    for (let /** @type {number} */ i = 0; i < numSymbols; i++) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ symbol = readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        throw new Error(\"Can't readHuffmanCode\");\n      }\n      symbols[i] = symbol;\n    }\n    checkDupes(symbols, numSymbols);\n    let /** @type {number} */ histogramId = numSymbols;\n    if (numSymbols === 4) {\n      histogramId += readFewBits(s, 1);\n    }\n    switch(histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n      case 4:\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n      case 5:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n      default:\n        break;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} skip\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18);\n    let /** @type {number} */ space = 32;\n    let /** @type {number} */ numCodes = 0;\n    for (let /** @type {number} */ i = skip; i < 18 && space > 0; i++) {\n      const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15;\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v !== 0) {\n        space -= (32 >> v);\n        numCodes++;\n      }\n    }\n    if (space !== 0 && numCodes !== 1) {\n      throw new Error(\"Corrupted Huffman code histogram\");\n    }\n    readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2);\n    if (simpleCodeOrSkip === 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    } else {\n      return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n    }\n  }\n  /**\n   * @param {number} contextMapSize\n   * @param {!Int8Array} contextMap\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeContextMap(contextMapSize, contextMap, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1;\n    if (numTrees === 1) {\n      contextMap.fill(0, 0, contextMapSize);\n      return numTrees;\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ useRleForZeros = readFewBits(s, 1);\n    let /** @type {number} */ maxRunLengthPrefix = 0;\n    if (useRleForZeros !== 0) {\n      maxRunLengthPrefix = readFewBits(s, 4) + 1;\n    }\n    const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix;\n    const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    for (let /** @type {number} */ i = 0; i < contextMapSize; ) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ code = readSymbol(table, tableIdx, s);\n      if (code === 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        let /** @type {number} */ reps = (1 << code) + readFewBits(s, code);\n        while (reps !== 0) {\n          if (i >= contextMapSize) {\n            throw new Error(\"Corrupted context map\");\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = (code - maxRunLengthPrefix);\n        i++;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {\n    const /** @type {!Int32Array} */ ringBuffers = s.rings;\n    const /** @type {number} */ offset = 4 + treeType * 2;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n    if (blockType === 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType === 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeLiteralBlockSwitch(s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    const /** @type {number} */ literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << 6;\n    s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n    const /** @type {number} */ contextMode = s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeCommandBlockSwitch(s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeDistanceBlockSwitch(s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function maybeReallocateRingBuffer(s) {\n    let /** @type {number} */ newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      const /** @type {number} */ minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize >>= 1;\n      }\n      if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37;\n    const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack);\n    if (s.ringBuffer.length !== 0) {\n      newBuffer.set(s.ringBuffer.subarray(0, s.ringBufferSize), 0);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readNextMetablockHeader(s) {\n    if (s.inputEnd !== 0) {\n      s.nextRunningState = 10;\n      s.runningState = 12;\n      return;\n    }\n    s.literalTreeGroup = new Int32Array(0);\n    s.commandTreeGroup = new Int32Array(0);\n    s.distanceTreeGroup = new Int32Array(0);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    decodeMetaBlockLength(s);\n    if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) {\n      return;\n    }\n    if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) {\n      jumpToByteBoundary(s);\n      s.runningState = (s.isMetadata !== 0) ? 5 : 6;\n    } else {\n      s.runningState = 3;\n    }\n    if (s.isMetadata !== 0) {\n      return;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function readMetablockPartition(s, treeType, numBlockTypes) {\n    let /** @type {number} */ offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n    const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2;\n    offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    s.blockTrees[2 * treeType + 1] = offset;\n    const /** @type {number} */ blockLengthAlphabetSize = 26;\n    offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    s.blockTrees[2 * treeType + 2] = offset;\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} alphabetSizeLimit\n   * @return {void}\n   */\n  function calculateDistanceLut(s, alphabetSizeLimit) {\n    const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits;\n    const /** @type {!Int32Array} */ distOffset = s.distOffset;\n    const /** @type {number} */ npostfix = s.distancePostfixBits;\n    const /** @type {number} */ ndirect = s.numDirectDistanceCodes;\n    const /** @type {number} */ postfix = 1 << npostfix;\n    let /** @type {number} */ bits = 1;\n    let /** @type {number} */ half = 0;\n    let /** @type {number} */ i = 16;\n    for (let /** @type {number} */ j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n    while (i < alphabetSizeLimit) {\n      const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      for (let /** @type {number} */ j = 0; j < postfix; ++j) {\n        distExtraBits[i] = bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readMetablockHuffmanCodesAndContextMaps(s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.distancePostfixBits = readFewBits(s, 2);\n    s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n    s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n    for (let /** @type {number} */ i = 0; i < s.numLiteralBlockTypes; ) {\n      const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes);\n      for (; i < limit; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        s.contextModes[i] = readFewBits(s, 2);\n      }\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n    }\n    s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6);\n    const /** @type {number} */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s);\n    s.trivialLiteralContext = 1;\n    for (let /** @type {number} */ j = 0; j < s.numLiteralBlockTypes << 6; j++) {\n      if (s.contextMap[j] !== j >> 6) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n    s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n    const /** @type {number} */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n    s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s);\n    s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s);\n    let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n    let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow === 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n      distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n    }\n    s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s);\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function copyUncompressedData(s) {\n    const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    if (s.metaBlockLength <= 0) {\n      reload(s);\n      s.runningState = 2;\n      return;\n    }\n    const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos === s.ringBufferSize) {\n      s.nextRunningState = 6;\n      s.runningState = 12;\n      return;\n    }\n    reload(s);\n    s.runningState = 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function writeRingBuffer(s) {\n    const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    if (toWrite !== 0) {\n      s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n    if (s.outputUsed < s.outputLength) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @param {!State} s\n   * @return {!Int32Array}\n   */\n  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) {\n    const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    const /** @type {!Int32Array} */ group = new Int32Array(n + n * maxTableSize);\n    let /** @type {number} */ next = n;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      group[i] = next;\n      next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n    }\n    return group;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function calculateFence(s) {\n    let /** @type {number} */ result = s.ringBufferSize;\n    if (s.isEager !== 0) {\n      result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {void}\n   */\n  function doUseDictionary(s, fence) {\n    if (s.distance > 0x7FFFFFFC) {\n      throw new Error(\"Invalid backward reference\");\n    }\n    const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n    if (address < 0) {\n      initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n      s.runningState = 14;\n    } else {\n      const /** @type {!ByteBuffer} */ dictionaryData = data;\n      const /** @type {number} */ wordLength = s.copyLength;\n      if (wordLength > 31) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      const /** @type {number} */ shift = sizeBits[wordLength];\n      if (shift === 0) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      let /** @type {number} */ offset = offsets[wordLength];\n      const /** @type {number} */ mask = (1 << shift) - 1;\n      const /** @type {number} */ wordIdx = address & mask;\n      const /** @type {number} */ transformIdx = address >>> shift;\n      offset += wordIdx * wordLength;\n      const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS;\n      if (transformIdx >= transforms.numTransforms) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);\n      s.pos += len;\n      s.metaBlockLength -= len;\n      if (s.pos >= fence) {\n        s.nextRunningState = 4;\n        s.runningState = 12;\n        return;\n      }\n      s.runningState = 4;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initializeCompoundDictionary(s) {\n    s.cdBlockMap = new Int8Array(256);\n    let /** @type {number} */ blockBits = 8;\n    while (((s.cdTotalSize - 1) >>> blockBits) !== 0) {\n      blockBits++;\n    }\n    blockBits -= 8;\n    s.cdBlockBits = blockBits;\n    let /** @type {number} */ cursor = 0;\n    let /** @type {number} */ index = 0;\n    while (cursor < s.cdTotalSize) {\n      while (s.cdChunkOffsets[index + 1] < cursor) {\n        index++;\n      }\n      s.cdBlockMap[cursor >>> blockBits] = index;\n      cursor += 1 << blockBits;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} address\n   * @param {number} length\n   * @return {void}\n   */\n  function initializeCompoundDictionaryCopy(s, address, length) {\n    if (s.cdBlockBits === -1) {\n      initializeCompoundDictionary(s);\n    }\n    let /** @type {number} */ index = s.cdBlockMap[address >>> s.cdBlockBits];\n    while (address >= s.cdChunkOffsets[index + 1]) {\n      index++;\n    }\n    if (s.cdTotalSize > address + length) {\n      throw new Error(\"Invalid backward reference\");\n    }\n    s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n    s.rings[s.distRbIdx] = s.distance;\n    s.metaBlockLength -= length;\n    s.cdBrIndex = index;\n    s.cdBrOffset = address - s.cdChunkOffsets[index];\n    s.cdBrLength = length;\n    s.cdBrCopied = 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {number}\n   */\n  function copyFromCompoundDictionary(s, fence) {\n    let /** @type {number} */ pos = s.pos;\n    const /** @type {number} */ origPos = pos;\n    while (s.cdBrLength !== s.cdBrCopied) {\n      const /** @type {number} */ space = fence - pos;\n      const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n      const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset;\n      let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied;\n      if (length > remChunkLength) {\n        length = remChunkLength;\n      }\n      if (length > space) {\n        length = space;\n      }\n      s.ringBuffer.set(s.cdChunks[s.cdBrIndex].slice(s.cdBrOffset, s.cdBrOffset + length), pos);\n      pos += length;\n      s.cdBrOffset += length;\n      s.cdBrCopied += length;\n      if (length === remChunkLength) {\n        s.cdBrIndex++;\n        s.cdBrOffset = 0;\n      }\n      if (pos >= fence) {\n        break;\n      }\n    }\n    return pos - origPos;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decompress(s) {\n    if (s.runningState === 0) {\n      throw new Error(\"Can't decompress until initialized\");\n    }\n    if (s.runningState === 11) {\n      throw new Error(\"Can't decompress after close\");\n    }\n    if (s.runningState === 1) {\n      const /** @type {number} */ windowBits = decodeWindowBits(s);\n      if (windowBits === -1) {\n        throw new Error(\"Invalid 'windowBits' code\");\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = 2;\n    }\n    let /** @type {number} */ fence = calculateFence(s);\n    let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1;\n    let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    while (s.runningState !== 10) {\n      switch(s.runningState) {\n        case 2:\n          if (s.metaBlockLength < 0) {\n            throw new Error(\"Invalid metablock length\");\n          }\n          readNextMetablockHeader(s);\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n        case 3:\n          readMetablockHuffmanCodesAndContextMaps(s);\n          s.runningState = 4;\n        case 4:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 2;\n            continue;\n          }\n          if (s.halfOffset > 2030) {\n            doReadMoreInput(s);\n          }\n          if (s.commandBlockLength === 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];\n          const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1];\n          const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF;\n          s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8;\n          s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));\n          s.j = 0;\n          s.runningState = 7;\n        case 7:\n          if (s.trivialLiteralContext !== 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          } else {\n            let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n              const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState !== 7) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 4;\n            continue;\n          }\n          let /** @type {number} */ distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.distanceBlockLength === 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < 16) {\n              const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                throw new Error(\"Negative distance\");\n              }\n            } else {\n              const /** @type {number} */ extraBits = s.distExtraBits[distanceCode];\n              let /** @type {number} */ bits;\n              if (s.bitOffset + extraBits <= 32) {\n                bits = readFewBits(s, extraBits);\n              } else {\n                if (s.bitOffset >= 16) {\n                  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                  s.bitOffset -= 16;\n                }\n                bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits);\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n          if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.distance > s.maxDistance) {\n            s.runningState = 9;\n            continue;\n          }\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n          if (s.copyLength > s.metaBlockLength) {\n            throw new Error(\"Invalid backward reference\");\n          }\n          s.j = 0;\n          s.runningState = 8;\n        case 8:\n          let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask;\n          let /** @type {number} */ dst = s.pos;\n          const /** @type {number} */ copyLength = s.copyLength - s.j;\n          const /** @type {number} */ srcEnd = src + copyLength;\n          const /** @type {number} */ dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              for (let /** @type {number} */ k = 0; k < copyLength; k += 4) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              ringBuffer.copyWithin(dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            for (; s.j < s.copyLength; ) {\n              ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 8;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState === 8) {\n            s.runningState = 4;\n          }\n          continue;\n        case 9:\n          doUseDictionary(s, fence);\n          continue;\n        case 14:\n          s.pos += copyFromCompoundDictionary(s, fence);\n          if (s.pos >= fence) {\n            s.nextRunningState = 14;\n            s.runningState = 12;\n            return;\n          }\n          s.runningState = 4;\n          continue;\n        case 5:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = 2;\n          continue;\n        case 6:\n          copyUncompressedData(s);\n          continue;\n        case 12:\n          s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize);\n          s.runningState = 13;\n        case 13:\n          if (writeRingBuffer(s) === 0) {\n            return;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n            }\n            s.pos &= ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n        default:\n          throw new Error(\"Unexpected state \" + valueOf(s.runningState));\n      }\n    }\n    if (s.runningState === 10) {\n      if (s.metaBlockLength < 0) {\n        throw new Error(\"Invalid metablock length\");\n      }\n      jumpToByteBoundary(s);\n      checkHealth(s, 1);\n    }\n  }\n\n  /**\n   * @constructor\n   * @param {number} numTransforms\n   * @param {number} prefixSuffixLen\n   * @param {number} prefixSuffixCount\n   * @struct\n   */\n  function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {\n    /** @type {number} */\n    this.numTransforms = 0;\n    /** @type {!Int32Array} */\n    this.triplets = new Int32Array(0);\n    /** @type {!Int8Array} */\n    this.prefixSuffixStorage = new Int8Array(0);\n    /** @type {!Int32Array} */\n    this.prefixSuffixHeads = new Int32Array(0);\n    /** @type {!Int16Array} */\n    this.params = new Int16Array(0);\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n\n  /** @type {!Transforms} */\n  const RFC_TRANSFORMS = new Transforms(121, 167, 50);\n  /**\n   * @param {!Int8Array} prefixSuffix\n   * @param {!Int32Array} prefixSuffixHeads\n   * @param {!Int32Array} transforms\n   * @param {string} prefixSuffixSrc\n   * @param {string} transformsSrc\n   * @return {void}\n   */\n  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {\n    const /** @type {number} */ n = prefixSuffixSrc.length;\n    let /** @type {number} */ index = 1;\n    let /** @type {number} */ j = 0;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      const /** @type {number} */ c = prefixSuffixSrc.charCodeAt(i);\n      if (c === 35) {\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = c;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 363; ++i) {\n      transforms[i] = transformsSrc.charCodeAt(i) - 32;\n    }\n  }\n  {\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\xC2\\xA0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n  }\n  /**\n   * @param {!Int8Array} dst\n   * @param {number} dstOffset\n   * @param {!Int8Array} src\n   * @param {number} srcOffset\n   * @param {number} len\n   * @param {!Transforms} transforms\n   * @param {number} transformIndex\n   * @return {number}\n   */\n  function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) {\n    let /** @type {number} */ offset = dstOffset;\n    const /** @type {!Int32Array} */ triplets = transforms.triplets;\n    const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage;\n    const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads;\n    const /** @type {number} */ transformOffset = 3 * transformIndex;\n    const /** @type {number} */ prefixIdx = triplets[transformOffset];\n    const /** @type {number} */ transformType = triplets[transformOffset + 1];\n    const /** @type {number} */ suffixIdx = triplets[transformOffset + 2];\n    let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx];\n    const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx];\n    const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n    let /** @type {number} */ omitFirst = transformType - 11;\n    let /** @type {number} */ omitLast = transformType;\n    if (omitFirst < 1 || omitFirst > 9) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > 9) {\n      omitLast = 0;\n    }\n    while (prefix !== prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    srcOffset += omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    let /** @type {number} */ i = len;\n    while (i > 0) {\n      dst[offset++] = src[srcOffset++];\n      i--;\n    }\n    if (transformType === 10 || transformType === 11) {\n      let /** @type {number} */ uppercaseOffset = offset - len;\n      if (transformType === 10) {\n        len = 1;\n      }\n      while (len > 0) {\n        const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) {\n            dst[uppercaseOffset] ^= 32;\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] ^= 32;\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] ^= 5;\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType === 21 || transformType === 22) {\n      let /** @type {number} */ shiftOffset = offset - len;\n      const /** @type {number} */ param = transforms.params[transformIndex];\n      let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        let /** @type {number} */ step = 1;\n        const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          scalar += c0;\n          dst[shiftOffset] = (scalar & 0x7F);\n        } else if (c0 < 0xC0) {\n        } else if (c0 < 0xE0) {\n          if (len >= 2) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F));\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          if (len >= 3) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F));\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          if (len >= 4) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            const /** @type {number} */ c3 = dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F));\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType === 21) {\n          len = 0;\n        }\n      }\n    }\n    while (suffix !== suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n    return offset - dstOffset;\n  }\n\n  /**\n   * @param {number} key\n   * @param {number} len\n   * @return {number}\n   */\n  function getNextKey(key, len) {\n    let /** @type {number} */ step = 1 << (len - 1);\n    while ((key & step) !== 0) {\n      step >>= 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n  /**\n   * @param {!Int32Array} table\n   * @param {number} offset\n   * @param {number} step\n   * @param {number} end\n   * @param {number} item\n   * @return {void}\n   */\n  function replicateValue(table, offset, step, end, item) {\n    do {\n      end -= step;\n      table[offset + end] = item;\n    } while (end > 0);\n  }\n  /**\n   * @param {!Int32Array} count\n   * @param {number} len\n   * @param {number} rootBits\n   * @return {number}\n   */\n  function nextTableBitSize(count, len, rootBits) {\n    let /** @type {number} */ left = 1 << (len - rootBits);\n    while (len < 15) {\n      left -= count[len];\n      if (left <= 0) {\n        break;\n      }\n      len++;\n      left <<= 1;\n    }\n    return len - rootBits;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {number} rootBits\n   * @param {!Int32Array} codeLengths\n   * @param {number} codeLengthsSize\n   * @return {number}\n   */\n  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {\n    const /** @type {number} */ tableOffset = tableGroup[tableIdx];\n    let /** @type {number} */ key;\n    const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize);\n    const /** @type {!Int32Array} */ count = new Int32Array(16);\n    const /** @type {!Int32Array} */ offset = new Int32Array(16);\n    let /** @type {number} */ symbol;\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      count[codeLengths[symbol]]++;\n    }\n    offset[1] = 0;\n    for (let /** @type {number} */ len = 1; len < 15; len++) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      if (codeLengths[symbol] !== 0) {\n        sorted[offset[codeLengths[symbol]]++] = symbol;\n      }\n    }\n    let /** @type {number} */ tableBits = rootBits;\n    let /** @type {number} */ tableSize = 1 << tableBits;\n    let /** @type {number} */ totalSize = tableSize;\n    if (offset[15] === 1) {\n      for (key = 0; key < totalSize; key++) {\n        tableGroup[tableOffset + key] = sorted[0];\n      }\n      return totalSize;\n    }\n    key = 0;\n    symbol = 0;\n    for (let /** @type {number} */ len = 1, /** @type {number} */ step = 2; len <= rootBits; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    const /** @type {number} */ mask = totalSize - 1;\n    let /** @type {number} */ low = -1;\n    let /** @type {number} */ currentOffset = tableOffset;\n    for (let /** @type {number} */ len = rootBits + 1, /** @type {number} */ step = 2; len <= 15; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        if ((key & mask) !== low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    return totalSize;\n  }\n\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function doReadMoreInput(s) {\n    if (s.endOfStreamReached !== 0) {\n      if (halfAvailable(s) >= -2) {\n        return;\n      }\n      throw new Error(\"No more input\");\n    }\n    const /** @type {number} */ readOffset = s.halfOffset << 1;\n    let /** @type {number} */ bytesInBuffer = 4096 - readOffset;\n    s.byteBuffer.copyWithin(0, readOffset, 4096);\n    s.halfOffset = 0;\n    while (bytesInBuffer < 4096) {\n      const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer;\n      const /** @type {number} */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} endOfStream\n   * @return {void}\n   */\n  function checkHealth(s, endOfStream) {\n    if (s.endOfStreamReached === 0) {\n      return;\n    }\n    const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n    if (byteOffset > s.tailBytes) {\n      throw new Error(\"Read after end\");\n    }\n    if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) {\n      throw new Error(\"Unused bytes after end\");\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readFewBits(s, n) {\n    const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return val;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readManyBits(s, n) {\n    const /** @type {number} */ low = readFewBits(s, 16);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initBitReader(s) {\n    s.byteBuffer = new Int8Array(4160);\n    s.accumulator32 = 0;\n    s.shortBuffer = new Int16Array(2080);\n    s.bitOffset = 32;\n    s.halfOffset = 2048;\n    s.endOfStreamReached = 0;\n    prepare(s);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function prepare(s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    checkHealth(s, 0);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function reload(s) {\n    if (s.bitOffset === 32) {\n      prepare(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function jumpToByteBoundary(s) {\n    const /** @type {number} */ padding = (32 - s.bitOffset) & 7;\n    if (padding !== 0) {\n      const /** @type {number} */ paddingBits = readFewBits(s, padding);\n      if (paddingBits !== 0) {\n        throw new Error(\"Corrupted padding bits\");\n      }\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function halfAvailable(s) {\n    let /** @type {number} */ limit = 2048;\n    if (s.endOfStreamReached !== 0) {\n      limit = (s.tailBytes + 1) >> 1;\n    }\n    return limit - s.halfOffset;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @param {number} offset\n   * @param {number} length\n   * @return {void}\n   */\n  function copyRawBytes(s, data, offset, length) {\n    if ((s.bitOffset & 7) !== 0) {\n      throw new Error(\"Unaligned copyBytes\");\n    }\n    while ((s.bitOffset !== 32) && (length !== 0)) {\n      data[offset++] = (s.accumulator32 >>> s.bitOffset);\n      s.bitOffset += 8;\n      length--;\n    }\n    if (length === 0) {\n      return;\n    }\n    const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), length >> 1);\n    if (copyNibbles > 0) {\n      const /** @type {number} */ readOffset = s.halfOffset << 1;\n      const /** @type {number} */ delta = copyNibbles << 1;\n      data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset);\n      offset += delta;\n      length -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (length === 0) {\n      return;\n    }\n    if (halfAvailable(s) > 0) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      while (length !== 0) {\n        data[offset++] = (s.accumulator32 >>> s.bitOffset);\n        s.bitOffset += 8;\n        length--;\n      }\n      checkHealth(s, 0);\n      return;\n    }\n    while (length > 0) {\n      const /** @type {number} */ len = readInput(s.input, data, offset, length);\n      if (len === -1) {\n        throw new Error(\"Unexpected end of input\");\n      }\n      offset += len;\n      length -= len;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} byteLen\n   * @return {void}\n   */\n  function bytesToNibbles(s, byteLen) {\n    const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer;\n    const /** @type {number} */ halfLen = byteLen >> 1;\n    const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer;\n    for (let /** @type {number} */ i = 0; i < halfLen; ++i) {\n      shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8));\n    }\n  }\n\n  /** @type {!Int32Array} */\n  const LOOKUP = new Int32Array(2048);\n  /**\n   * @param {!Int32Array} lookup\n   * @param {string} map\n   * @param {string} rle\n   * @return {void}\n   */\n  function unpackLookupTable(lookup, map, rle) {\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    for (let /** @type {number} */ i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32);\n    }\n    for (let /** @type {number} */ i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    let /** @type {number} */ offset = 1280;\n    for (let /** @type {number} */ k = 0; k < 19; ++k) {\n      const /** @type {number} */ value = k & 3;\n      const /** @type {number} */ rep = rle.charCodeAt(k) - 32;\n      for (let /** @type {number} */ i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n  {\n    unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\x81 @\");\n  }\n\n  /**\n   * @constructor\n   * @struct\n   */\n  function State() {\n    /** @type {!Int8Array} */\n    this.ringBuffer = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextModes = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distContextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distExtraBits = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.output = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.byteBuffer = new Int8Array(0);\n    /** @type {!Int16Array} */\n    this.shortBuffer = new Int16Array(0);\n    /** @type {!Int32Array} */\n    this.intBuffer = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.rings = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.blockTrees = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.literalTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.commandTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distanceTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distOffset = new Int32Array(0);\n    /** @type {number} */\n    this.accumulator64 = 0;\n    /** @type {number} */\n    this.runningState = 0;\n    /** @type {number} */\n    this.nextRunningState = 0;\n    /** @type {number} */\n    this.accumulator32 = 0;\n    /** @type {number} */\n    this.bitOffset = 0;\n    /** @type {number} */\n    this.halfOffset = 0;\n    /** @type {number} */\n    this.tailBytes = 0;\n    /** @type {number} */\n    this.endOfStreamReached = 0;\n    /** @type {number} */\n    this.metaBlockLength = 0;\n    /** @type {number} */\n    this.inputEnd = 0;\n    /** @type {number} */\n    this.isUncompressed = 0;\n    /** @type {number} */\n    this.isMetadata = 0;\n    /** @type {number} */\n    this.literalBlockLength = 0;\n    /** @type {number} */\n    this.numLiteralBlockTypes = 0;\n    /** @type {number} */\n    this.commandBlockLength = 0;\n    /** @type {number} */\n    this.numCommandBlockTypes = 0;\n    /** @type {number} */\n    this.distanceBlockLength = 0;\n    /** @type {number} */\n    this.numDistanceBlockTypes = 0;\n    /** @type {number} */\n    this.pos = 0;\n    /** @type {number} */\n    this.maxDistance = 0;\n    /** @type {number} */\n    this.distRbIdx = 0;\n    /** @type {number} */\n    this.trivialLiteralContext = 0;\n    /** @type {number} */\n    this.literalTreeIdx = 0;\n    /** @type {number} */\n    this.commandTreeIdx = 0;\n    /** @type {number} */\n    this.j = 0;\n    /** @type {number} */\n    this.insertLength = 0;\n    /** @type {number} */\n    this.contextMapSlice = 0;\n    /** @type {number} */\n    this.distContextMapSlice = 0;\n    /** @type {number} */\n    this.contextLookupOffset1 = 0;\n    /** @type {number} */\n    this.contextLookupOffset2 = 0;\n    /** @type {number} */\n    this.distanceCode = 0;\n    /** @type {number} */\n    this.numDirectDistanceCodes = 0;\n    /** @type {number} */\n    this.distancePostfixBits = 0;\n    /** @type {number} */\n    this.distance = 0;\n    /** @type {number} */\n    this.copyLength = 0;\n    /** @type {number} */\n    this.maxBackwardDistance = 0;\n    /** @type {number} */\n    this.maxRingBufferSize = 0;\n    /** @type {number} */\n    this.ringBufferSize = 0;\n    /** @type {number} */\n    this.expectedTotalSize = 0;\n    /** @type {number} */\n    this.outputOffset = 0;\n    /** @type {number} */\n    this.outputLength = 0;\n    /** @type {number} */\n    this.outputUsed = 0;\n    /** @type {number} */\n    this.ringBufferBytesWritten = 0;\n    /** @type {number} */\n    this.ringBufferBytesReady = 0;\n    /** @type {number} */\n    this.isEager = 0;\n    /** @type {number} */\n    this.isLargeWindow = 0;\n    /** @type {number} */\n    this.cdNumChunks = 0;\n    /** @type {number} */\n    this.cdTotalSize = 0;\n    /** @type {number} */\n    this.cdBrIndex = 0;\n    /** @type {number} */\n    this.cdBrOffset = 0;\n    /** @type {number} */\n    this.cdBrLength = 0;\n    /** @type {number} */\n    this.cdBrCopied = 0;\n    /** @type {!Array<?Int8Array>} */\n    this.cdChunks = new Array(0);\n    /** @type {!Int32Array} */\n    this.cdChunkOffsets = new Int32Array(0);\n    /** @type {number} */\n    this.cdBlockBits = 0;\n    /** @type {!Int8Array} */\n    this.cdBlockMap = new Int8Array(0);\n    /** @type {!InputStream|null} */\n    this.input = null;\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n\n  /** @type {!ByteBuffer} */\n  let data = new Int8Array(0);\n  /** @type {!Int32Array} */\n  const offsets = new Int32Array(32);\n  /** @type {!Int32Array} */\n  const sizeBits = new Int32Array(32);\n  /**\n   * @param {!Int8Array} newData\n   * @param {!Int32Array} newSizeBits\n   * @return {void}\n   */\n  function setData(newData, newSizeBits) {\n    if (newSizeBits.length > 31) {\n      throw new Error(\"sizeBits length must be at most \" + valueOf(31));\n    }\n    for (let /** @type {number} */ i = 0; i < 4; ++i) {\n      if (newSizeBits[i] !== 0) {\n        throw new Error(\"first \" + valueOf(4) + \" must be 0\");\n      }\n    }\n    const /** @type {!Int32Array} */ dictionaryOffsets = offsets;\n    const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits;\n    dictionarySizeBits.set(newSizeBits.subarray(0, newSizeBits.length), 0);\n    let /** @type {number} */ pos = 0;\n    const /** @type {number} */ limit = newData.length;\n    for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) {\n      dictionaryOffsets[i] = pos;\n      const /** @type {number} */ bits = dictionarySizeBits[i];\n      if (bits !== 0) {\n        if (bits >= 31) {\n          throw new Error(\"newSizeBits values must be less than 31\");\n        }\n        pos += i << bits;\n        if (pos <= 0 || pos > limit) {\n          throw new Error(\"newSizeBits is inconsistent: overflow\");\n        }\n      }\n    }\n    for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) {\n      dictionaryOffsets[i] = pos;\n    }\n    if (pos !== limit) {\n      throw new Error(\"newSizeBits is inconsistent: underflow\");\n    }\n    data = newData;\n  }\n\n  /**\n   * @param {!Int8Array} dictionary\n   * @param {string} data0\n   * @param {string} data1\n   * @param {string} skipFlip\n   * @param {!Int32Array} sizeBits\n   * @param {string} sizeBitsData\n   * @return {void}\n   */\n  function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) {\n    const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1);\n    if (dict.length !== dictionary.length) {\n      throw new Error(\"Corrupted brotli dictionary\");\n    }\n    let /** @type {number} */ offset = 0;\n    const /** @type {number} */ n = skipFlip.length;\n    for (let /** @type {number} */ i = 0; i < n; i += 2) {\n      const /** @type {number} */ skip = skipFlip.charCodeAt(i) - 36;\n      const /** @type {number} */ flip = skipFlip.charCodeAt(i + 1) - 36;\n      for (let /** @type {number} */ j = 0; j < skip; ++j) {\n        dict[offset] ^= 3;\n        offset++;\n      }\n      for (let /** @type {number} */ j = 0; j < flip; ++j) {\n        dict[offset] ^= 236;\n        offset++;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) {\n      sizeBits[i] = sizeBitsData.charCodeAt(i) - 65;\n    }\n    dictionary.set(dict);\n  }\n  {\n    const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784);\n    const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25);\n    unpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\x0E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\x0E\\t\\x0E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\x7F\\\"+njmfyk9\\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\x0Bwbmhzbqgaltoavpk965YIbub03s{\\t\\x7F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\x0E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\x7F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\x0E\\t\\n\\nabmdwqjnabwk*x\\x0E\\t33s{\\t~*8hl9\\0effpbg=\\x0Ep9,,#X^8wloosovd+*x\\tx\\x0E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\x0E\\t~\\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\x7F\\x7FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\x0E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\x0E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\x7F\\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\\x0E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\x0E\\t?\\\"pwffo#zlv#k1=\\x0E\\telqn#ifpvp233&#nfmv-\\x0E\\t\\n\\x0E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\x0E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\x7F\\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\x7F\\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\x0Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\x0BBl\\bQ\\x7F\\x0BUm\\x05Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\x0BBM\\x0B|j\\x04BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\x05{X\\bTF\\bVV\\bVK\\t\\x7Fm\\x04kF\\t[]\\bPm\\bTv\\nsI\\x0Bpg\\t[I\\bQp\\x04mx\\x0B_W\\n^M\\npe\\x0BQ}\\x0BGu\\nel\\npe\\x04Ch\\x04BV\\bTA\\tSo\\nzk\\x0BGL\\x0BxD\\nd[\\x05Jz\\x05MY\\bQp\\x04li\\nfl\\npC\\x05{B\\x05Nt\\x0BwT\\ti_\\bTg\\x04QQ\\n|p\\x0BXN\\bQS\\x0BxD\\x04QC\\bWZ\\tpD\\x0BVS\\bTW\\x05Nt\\x04Yh\\nzu\\x04Kj\\x05N}\\twr\\tHa\\n_D\\tj`\\x0BQ}\\x0BWp\\nxZ\\x04{c\\tji\\tBU\\nbD\\x04a|\\tTn\\tpV\\nZd\\nmC\\x0BEV\\x05{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\x0Bxs\\nXW\\twR\\x0Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\x05{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\x04Su\\bTF\\x0B_W\\x0BWs\\x0BsI\\x05m\\x7F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\x04MD\\tBe\\tiD\\x0B@@\\bTl\\bPv\\t}t\\x04Sw\\x04M`\\x0BnU\\tkW\\x0Bed\\nqo\\x0BxY\\tA|\\bTz\\x0By`\\x04BR\\x04BM\\tia\\x04XU\\nyu\\x04n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\x7Fm\\tav\\tBN\\x0Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\x0BWc\\x0Byu\\x04Dl\\x04CJ\\x0BWj\\x0BHR\\t`V\\x0BuW\\tQy\\np@\\x0BGu\\x05pl\\x04Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\x05ui\\x05\\x7FR\\nbI\\twQ\\tBZ\\tWV\\x04BR\\npg\\tcg\\x05ti\\x04CW\\n_y\\tRg\\bQa\\x0BQB\\x0BWc\\nYb\\x05le\\ngE\\x04Su\\nL[\\tQ\\x7F\\tea\\tdj\\x0B]W\\nb~\\x04M`\\twL\\bTV\\bVH\\nt\\x7F\\npl\\t|b\\x05s_\\bU|\\bTa\\x04oQ\\x05lv\\x04Sk\\x04M`\\bTv\\x0BK}\\nfl\\tcC\\x04oQ\\x04BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\x0BHR\\bPv\\x0BLx\\x0BEZ\\bT\\x7F\\bTv\\tiD\\x05oD\\x05MU\\x0BwB\\x04Su\\x05k`\\x04St\\ntC\\tPl\\tKg\\noi\\tjY\\x0BxY\\x04h}\\nzk\\bWZ\\t\\x7Fm\\x0Be`\\tTB\\tfE\\nzk\\t`z\\x04Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\x04Kd\\nfy\\x04Yh\\t[I\\x0BDg\\x04Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\x04oQ\\bTW\\x04Jm\\x0BwB\\tea\\x04Yh\\x04BC\\tsb\\tTn\\nzU\\n_y\\x0BxY\\tQ]\\ngw\\x04mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\x0BRb\\twQ\\n]Q\\x04QJ\\bWg\\x0BWa\\bQj\\ntC\\bVH\\nYm\\x0Bxs\\bVK\\nel\\bWI\\x0BxY\\x04Cq\\ntR\\x0BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\x0Bxs\\x0B_W\\td{\\x0BQ}\\tcg\\tTz\\tA|\\tCj\\x0BLm\\x05N}\\x05m\\x7F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\x0BQ}\\bTf\\x05ka\\x04Jm\\x0B@@\\bV`\\tzp\\n@N\\x04Sw\\tiI\\tcg\\noi\\x04Su\\bVw\\x04lo\\x04Cy\\tc}\\x0Bb\\\\\\tsU\\x04BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\x0BbC\\tNo\\x05Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\x05lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\x7Fm\\nLk\\tkj\\n@N\\x04Sb\\x04KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\x04XO\\bWW\\ndz\\x04li\\tBN\\nd[\\bWO\\x04MD\\x0BKC\\tdj\\tI_\\bVV\\ny\\\\\\x0BLm\\x05xl\\txB\\tkV\\x0Bb\\\\\\x0BJW\\x0BVS\\tVx\\x0BxD\\td{\\x04MD\\bTa\\t|`\\x0BPz\\x04R}\\x0BWs\\x04BM\\nsI\\x04CN\\bTa\\x04Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\x0BWh\\x0BWk\\nxS\\x0BAz\\x0BwX\\nbI\\x04oQ\\tfw\\nqI\\nV|\\nun\\x05z\\x7F\\x0Bpg\\td\\\\\\x0BoA\\x05{D\\ti_\\x05xB\\bT\\x7F\\t`V\\x05qr\\tTT\\x04g]\\x04CA\\x0BuR\\tVJ\\tT`\\npw\\x0BRb\\tI_\\nCx\\x04Ro\\x0BsI\\x04Cj\\x04Kh\\tBv\\tWV\\x04BB\\x05oD\\x05{D\\nhc\\x04Km\\x0B^R\\tQE\\n{I\\np@\\nc|\\x05Gt\\tc}\\x04Dl\\nzU\\x05qN\\tsV\\x05k}\\tHh\\x0B|j\\nqo\\x05u|\\tQ]\\x0Bek\\x05\\x7FZ\\x04M`\\x04St\\npe\\tdj\\bVG\\x0BeE\\t\\x7Fm\\x0BWc\\x04|I\\n[W\\tfL\\bT\\x7F\\tBZ\\x04Su\\x0BKa\\x04Cq\\x05Nt\\x04Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\x04B\\\\\\tQy\\x0BBl\\bWg\\x04XD\\x05kc\\x0Bx[\\bVV\\tQ]\\t\\x7Fa\\tPy\\x0BxD\\nfI\\t}f\\x05oD\\tdj\\tSG\\x05ls\\t~D\\x04CN\\n{Z\\t\\\\v\\n_D\\nhc\\x0Bx_\\x04C[\\tAJ\\nLM\\tVx\\x04CI\\tbj\\tc^\\tcF\\ntC\\x04Sx\\twr\\x04XA\\bU\\\\\\t|a\\x0BK\\\\\\bTV\\bVj\\nd|\\tfs\\x04CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\x7F\\x05Nt\\x0BDg\\tVc\\bTl\\x04d@\\npo\\t\\x7FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\x04l`\\bTx\\bWf\\tHE\\x0BF{\\tcO\\tfD\\nlm\\x0BfZ\\nlm\\x0BeU\\tdG\\x04BH\\bTV\\tSi\\x05MW\\nwX\\nz\\\\\\t\\\\c\\x04CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\x7F\\t`i\\ng@\\x05nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\x0BxY\\x04Kj\\tAJ\\x05uN\\ti[\\npe\\x04Sk\\x0BDg\\x0Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\x04Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\x0B_W\\nLk\\x05Nt\\tyj\\tfM\\x04R\\x7F\\tiI\\bTl\\x0BwX\\tsV\\x0BMl\\nyu\\tAJ\\bVj\\x04KO\\tWV\\x0BA}\\x0BW\\x7F\\nrp\\tiD\\x0B|o\\x05lv\\x0BsI\\x04BM\\td~\\tCU\\bVb\\x04eV\\npC\\x0BwT\\tj`\\tc}\\x0Bxs\\x0Bps\\x0Bvh\\tWV\\x0BGg\\x0BAe\\x0BVK\\x0B]W\\trg\\x0BWc\\x05F`\\tBr\\x0Bb\\\\\\tdZ\\bQp\\nqI\\x04kF\\nLk\\x0BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\x05{A\\x05wj\\twN\\x0B@@\\bTe\\ti_\\n_D\\twL\\nAH\\x0BiK\\x0Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\x05Gt\\x0BVK\\npl\\x04S}\\x0BWP\\t|d\\x04MD\\x0BHV\\bT\\x7F\\x04R}\\x04M`\\bTV\\bVH\\x05lv\\x04Ch\\bW[\\x04Ke\\tR{\\x0B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\x04Ke\\tBe\\x04Oi\\tR{\\td\\\\\\x05nB\\bWZ\\tdZ\\tVJ\\x05Os\\t\\x7Fm\\x04uQ\\x0BhZ\\x04Q@\\x04QQ\\nfI\\bW[\\x04B\\\\\\x04li\\nzU\\nMd\\x04M`\\nxS\\bVV\\n\\\\}\\x0BxD\\t\\x7Fm\\bTp\\x04IS\\nc|\\tkV\\x05i~\\tV{\\x0BhZ\\t|b\\bWt\\n@R\\x0BoA\\x0BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\x04BR\\x0BQB\\x05Nj\\tCP\\t[I\\bTv\\t`W\\x05uN\\x0Bpg\\x0Bpg\\x0BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\x0BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\x04m`\\bTv\\nyd\\nrp\\bWf\\tUX\\x04BV\\nzk\\nd}\\twQ\\t}f\\x04Ce\\x0Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\x7F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\x04Kn\\x0BnU\\tAt\\tpD\\x0B^R\\x0BIr\\x04b[\\tR{\\tdE\\x0BxD\\x0BWK\\x0BWA\\bQL\\bW@\\x04Su\\bUd\\nDM\\tPc\\x04CA\\x04Dl\\x04oQ\\tHs\\x05wi\\x04ub\\n\\x7Fa\\bQp\\x05Ob\\nLP\\bTl\\x04Y[\\x0BK}\\tAJ\\bQ\\x7F\\x04n^\\x0BsA\\bSM\\nqM\\bWZ\\n^W\\x0Bz{\\x04S|\\tfD\\bVK\\bTv\\bPv\\x04BB\\tCP\\x04dF\\tid\\x0Bxs\\x04mx\\x0Bws\\tcC\\ntC\\tyc\\x05M`\\x0BW\\x7F\\nrh\\bQp\\x0BxD\\x04\\\\o\\nsI\\x04_k\\nzu\\x04kF\\tfD\\x04Xs\\x04XO\\tjp\\bTv\\x04BS\\x05{B\\tBr\\nzQ\\nbI\\tc{\\x04BD\\x04BV\\x05nO\\bTF\\tca\\x05Jd\\tfL\\tPV\\tI_\\nlK\\x04`o\\twX\\npa\\tgu\\bP}\\x05{^\\bWf\\n{I\\tBN\\npa\\x04Kl\\x0Bpg\\tcn\\tfL\\x0Bvh\\x04Cq\\bTl\\x0BnU\\bSq\\x04Cm\\twR\\bUJ\\npe\\nyd\\nYg\\x04Cy\\x0BKW\\tfD\\nea\\x04oQ\\tj_\\tBv\\x04nM\\x0BID\\bTa\\nzA\\x05pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\x05{X\\x05kk\\x0BxD\\x04|I\\x05xl\\nfy\\x04Ce\\x0BwB\\nLk\\x0Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\x04Hk\\x04OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\x04Oi\\bSB\\x04XA\\x0BeE\\tjp\\nq}\\tiD\\x05qN\\x0B^R\\t\\x7Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\x0BHV\\bTf\\tTn\\x04\\\\N\\x04\\\\N\\nuB\\x05lv\\nyu\\tTd\\bTf\\bPL\\x0B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\x05ia\\bWZ\\tcF\\x04Jm\\n{Z\\bWO\\x04_k\\x04Df\\x04RR\\td\\\\\\bVV\\x0Bxs\\x04BN\\x05ti\\x04lm\\tTd\\t]y\\x0BHV\\tSo\\x0B|j\\x04XX\\tA|\\x0BZ^\\x0BGu\\bTW\\x05M`\\x04kF\\x0BhZ\\x0BVK\\tdG\\x0BBl\\tay\\nxU\\x05qE\\x05nO\\bVw\\nqI\\x04CX\\ne\\x7F\\tPl\\bWO\\x0BLm\\tdL\\x05uH\\x04Cm\\tdT\\x04fn\\x0BwB\\x05ka\\x0BnU\\n@M\\nyT\\tHv\\t\\\\}\\x04Kh\\td~\\x04Yh\\x05k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\x05MY\\npl\\bQ_\\twr\\x0BAx\\tHE\\bTg\\bSq\\x05vp\\x0Bb\\\\\\bWO\\nOl\\nsI\\nfy\\x0BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\x0Bxv\\x04k_\\bWO\\x0B|j\\x0BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\x05k}\\x04ra\\tUT\\x0BJc\\x0Bed\\np@\\tQN\\nd|\\tkj\\tHk\\x04M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\x04BB\\x04BH\\x04Cm\\npl\\tIQ\\bVK\\x0Bxs\\n`e\\x0BiK\\npa\\x04Oi\\tUS\\bTp\\tfD\\nPG\\x05kk\\x04XA\\nz\\\\\\neg\\x0BWh\\twR\\x05qN\\nqS\\tcn\\x04lo\\nxS\\n^W\\tBU\\nt\\x7F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\x0BVK\\x05ls\\tVJ\\bVV\\x0BeE\\x04\\\\o\\nyX\\nYm\\x04M`\\x05lL\\nd|\\nzk\\tA{\\x05sE\\twQ\\x04XT\\nt\\x7F\\tPl\\t]y\\x0BwT\\x05{p\\x04MD\\x0Bb\\\\\\tQ]\\x04Kj\\tJn\\nAH\\x0BRb\\tBU\\tHK\\t\\\\c\\nfI\\x05m\\x7F\\nqM\\n@R\\tSo\\noi\\x04BT\\tHv\\n_y\\x04Kh\\tBZ\\t]i\\bUJ\\tV{\\x04Sr\\nbI\\x0BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\x04S|\\x0BuW\\tiI\\bWI\\nqI\\x0B|j\\x04BV\\bVg\\bWZ\\x04kF\\x0Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\x0Bps\\nAO\\bTa\\x05xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\x0Bw}\\x0BqO\\ti[\\bQ\\x7F\\bTz\\x0BVF\\twN\\x05ts\\tdw\\bTv\\neS\\ngi\\tNr\\x05yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\x0BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\x04nM\\bWQ\\x0BAx\\nMd\\tBr\\x05ui\\x0BxY\\bSM\\x0BWc\\x0B|j\\x0Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\x0BeU\\x04e^\\bTg\\nqI\\tac\\bPv\\tcF\\x04oQ\\tQ\\x7F\\x0BhZ\\x05ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\x04S|\\x04M`\\n{I\\tS{\\x04_O\\tBZ\\x04Zi\\x04Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\x0BGu\\x05yS\\nqA\\t[r\\neK\\x04M`\\tdZ\\x05lL\\bUg\\bTl\\nbD\\tUS\\x0Bb\\\\\\tpV\\ncc\\x04S\\\\\\tct\\t`z\\bPL\\x0BWs\\nA`\\neg\\bSq\\x05uE\\x04CR\\x0BDg\\t`W\\x0Bz{\\x0BWc\\x04Sk\\x04Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\x0BRb\\bTQ\\npl\\x05Gt\\x0BuW\\x05uj\\npF\\nqI\\tfL\\t[I\\tia\\x04XO\\nyu\\x0BDg\\x0Bed\\tq{\\x04VG\\bQ\\x7F\\x05ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\x04]j\\tkV\\toU\\bTp\\nzU\\x05nB\\x0BB]\\ta{\\bV@\\n]n\\x04m`\\tcz\\tR{\\x04m`\\bQa\\x0BwT\\bSM\\x05MY\\x05qN\\tdj\\x05~s\\x0BQ}\\x05MY\\x0BMB\\tBv\\twR\\bRg\\x0BQ}\\tql\\x0BKC\\nrm\\x05xu\\x04CC\\x0BwB\\x0Bvh\\tBq\\x04Xq\\npV\\ti_\\x05Ob\\x05uE\\nbd\\nqo\\x0B{i\\nC~\\tBL\\x0BeE\\x05uH\\bVj\\x04Ey\\x04Gz\\x0BzR\\x0B{i\\tcf\\n{Z\\n]n\\x04XA\\x0BGu\\x0BnU\\thS\\x0BGI\\nCc\\tHE\\bTA\\tHB\\x04BH\\x04Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\x7F\\tc\\\\\\x0BmO\\x0BWX\\nfH\\np@\\x05MY\\bTF\\nlK\\tBt\\nzU\\tTT\\x04Km\\x0BwT\\npV\\ndt\\x0ByI\\tVx\\tQ\\x7F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\x04nM\\tTn\\ndS\\t]g\\nLc\\x0BwB\\t}t\\t[I\\tCP\\x04kX\\x0BFm\\x0BhZ\\x05m\\x7F\\ti[\\np@\\x0BQ}\\x0BW\\x7F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\x0BRb\\tio\\tPy\\x04Y[\\nxU\\tct\\x0B@@\\tww\\bPv\\x04BM\\x04FF\\ntb\\x05v|\\x0BKm\\tBq\\tBq\\x04Kh\\x04`o\\nZd\\x04XU\\ti]\\t|`\\tSt\\x04B\\\\\\bQ\\x7F\\x0B_W\\tTJ\\nqI\\t|a\\tA{\\x0BuP\\x04MD\\tPl\\nxR\\tfL\\x0Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\x05kc\\nd|\\bVV\\ny\\\\\\x05kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\x0BW\\x7F\\nqs\\x05lv\\bSM\\x04Zi\\x0BVK\\x05ia\\x0BQB\\tQ\\x7F\\n{Z\\bPt\\x0BKl\\nlK\\nhs\\ndS\\bVK\\x05mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\x0BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\x0BeU\\nBf\\tdj\\x05Mr\\n|p\\t\\\\g\\t]r\\bVb\\x05{D\\nd[\\x04XN\\tfM\\tO\\\\\\x05s_\\tcf\\tiZ\\x04XN\\x0BWc\\tqv\\n`m\\tU^\\x05oD\\nd|\\x0BGg\\tdE\\x0Bwf\\x04lo\\x04u}\\nd|\\x05oQ\\t`i\\x04Oi\\x0BxD\\ndZ\\nCx\\x04Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\x0Bps\\ntC\\x0BpP\\x0Bqw\\bPu\\bPX\\tDm\\npw\\x05Nj\\tss\\taG\\x0Bxs\\bPt\\noL\\x04Gz\\tOk\\ti@\\ti]\\x04eC\\tIQ\\tii\\tdj\\x0B@J\\t|d\\x05uh\\bWZ\\x0BeU\\x0BnU\\bTa\\tcC\\x04g]\\nzk\\x04Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\x0BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\x05ln\\t|d\\tbs\\nqI\\x05{B\\x0BAx\\np@\\nzk\\x0BRb\\x05Os\\x0BWS\\x04e^\\x0BD_\\tBv\\x0BWd\\bVb\\x0Bxs\\x0BeE\\bRw\\n]n\\n|p\\x0Bg|\\tfw\\x05kc\\bTI\\x05ka\\n\\\\T\\x04Sp\\tju\\x0Bps\\npe\\x05u|\\x0BGr\\bVe\\tCU\\x04]M\\x04XU\\x0BxD\\bTa\\tIQ\\x0BWq\\tCU\\tam\\tdj\\bSo\\x04Sw\\x0BnU\\x04Ch\\tQ]\\x05s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\x04Yc\\tUZ\\bTx\\npe\\x0BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\x0BxD\\x04BR\\nzQ\\tQN\\x04]M\\x04Yh\\nLP\\x0BFm\\x0BLX\\x05vc\\x0Bql\\x05ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\x04oQ\\t`z\\t[I\\tB`\\x0BRb\\tyj\\tsb\\x0BWs\\bTl\\tkV\\x0Bed\\ne\\x7F\\x05lL\\x0BxN\\t\\x7Fm\\nJn\\tjY\\x0BxD\\bVb\\bSq\\x0Byu\\twL\\x0BXL\\bTA\\tpg\\tAt\\tnD\\x04XX\\twR\\npl\\nhw\\x05yS\\nps\\tcO\\bW[\\x0B|j\\x04XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\x05k`\\x05qN\\tdw\\tWV\\tHE\\x0BEV\\x05Jz\\tid\\tB`\\tzh\\x05E]\\tfD\\bTg\\x05qN\\bTa\\tja\\x04Cv\\bSM\\nhc\\bUe\\x05t_\\tie\\x04g]\\twQ\\nPn\\bVB\\tjw\\bVg\\x0BbE\\tBZ\\x0BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\x0BD]\\tBZ\\ti[\\tfD\\x0BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\x04oQ\\x04lo\\x0BLx\\x0BM@\\bWZ\\x04Kn\\x0Bpg\\nTi\\nIv\\n|r\\x0B@}\\x05Jz\\x05Lm\\x05Wh\\x05k}\\x05ln\\x0BxD\\n]s\\x04gc\\x0Bps\\tBr\\bTW\\x0BBM\\x05tZ\\nBY\\x04DW\\tjf\\x0BSW\\x04C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\x05lv\\x04BC\\nzQ\\t[I\\x0Bgl\\nig\\bUs\\x04BT\\x0BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\x0BID\\x0B|j\\x04KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\fHy\\fIk\\fHU\\fId\\fHy\\fIl\\fHT\\fIk\\fHy\\fHR\\fHy\\fIg\\fHx\\fH\\\\\\fHF\\fH\\\\\\fHD\\fIk\\fHc\\fHy\\fHy\\fHS\\fHA\\fIl\\fHk\\fHT\\fHy\\fH\\\\\\fHH\\fIg\\fHU\\fIg\\fHj\\fHF\\fHU\\fIl\\fHC\\fHU\\fHC\\fHR\\fHH\\fHy\\fHI\\fHRibdqbm\\fHj\\fHp\\fHp\\fIg\\fHi\\fH@\\fHJ\\fIg\\fH{\\fHd\\fHp\\fHR\\fH{\\fHc\\fHU\\fHB\\fHk\\fHD\\fHY\\fHU\\fHC\\fIk\\fHI\\fIk\\fHI\\fIl\\fHt\\fH\\\\\\fHp\\fH@\\fHJ\\fIl\\fHy\\fHd\\fHp\\fIl\\fHY\\fIk\\fHD\\fHd\\fHD\\fHc\\fHU\\fH\\\\\\fHe\\fHT\\fHB\\fIk\\fHy\\fHB\\fHY\\fIg\\fH^\\fIk\\fHT\\fH@\\fHB\\fHd\\fHJ\\fIk\\fH\\x7F\\fH\\\\\\fHj\\fHB\\fH@\\fHT\\fHA\\fH\\\\\\fH@\\fHD\\fHv\\fH^\\fHB\\fHD\\fHj\\fH{\\fHT\\fIl\\fH^\\fIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\x0E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\x0E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\x0E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\x0E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\x0E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\x0E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\x0E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\x7F\\x7F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\x0E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\x0E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\x7F\\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\x0E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\x0E\\t\\x0E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\x0E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\x0E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\x0E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\x0E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\x0E\\t\\x0E\\t\\x0E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\x0E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\x0E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\x0E\\t\\x0E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\x0E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\x0E\\t\\\\slsvsp\\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\x0E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\x0BBl\\bQ\\x7F*+\\x0BUm\\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x01\\0\\x07\\x06\\x05\\x04\\x04\\x05\\x06\\x07\\0\\x01\\x02\\x03\\x0B\\n\\t\\b\\x0F\\x0E\\r\\f\\f\\r\\x0E\\x0F\\b\\t\\n\\x0B\\x13\\x12\\x11\\x10\\x17\\x16\\x15\\x14\\x14\\x15\\x16\\x17\\x10\\x11\\x12\\x13\\x1B\\x1A\\x19\\x18\\x1F\\x1E\\x1D\\x1C\\x1C\\x1D\\x1E\\x1F\\x18\\x19\\x1A\\x1B\\x13\\x13\\x13\\x13\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x13\\x13\\x13\\x13\\x02\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\0\\x03\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x03\\x03\\x02\\x03\\x01\\x03\\0\\x03\\x07\\x03\\x06\\x03\\x05\\x03\\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\x0E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\x0E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\x0E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\x0E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\x0E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\fUh\\fT{\\fTN\\n{I\\np@\\x04Fr\\x0BBl\\bQ\\x7F\\tA{\\x0BUm\\x05Gx\\tA{\\x01yp\\x06YA\\0zX\\bTV\\bWl\\bUd\\x04BM\\x0BB{\\npV\\x0B@x\\x04B\\\\\\np@\\x04Db\\x04Gz\\tal\\npa\\tfM\\tuD\\bV~\\x04mx\\x0BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\x05oD\\tkV\\x0Bed\\x0BHR\\nb~\\x04M`\\nJp\\x05oD\\x04|Q\\nLP\\x04Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\x05F`\\x04Cm\\x0BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\x7F\\nZd\\x04XU\\x04li\\tfr\\ti@\\tBH\\x04BD\\x04BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\x0Bxs\\x04Zf\\nqI\\x04Zf\\x0BBM\\x0B|j\\t}t\\bSM\\nmC\\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\fHB\\fIk\\fHn\\fH^\\fHS\\fHc\\fHU\\fId\\fHn\\fH{\\fHC\\fHR\\fHT\\fHR\\fHI\\fHc\\fHY\\fHn\\fH\\\\\\fHU\\fIk\\fHy\\fIg\\fHd\\fHy\\fIm\\fHw\\fH\\\\\\fHU\\fHR\\fH@\\fHR\\fHJ\\fHy\\fHU\\fHR\\fHT\\fHA\\fIl\\fHU\\fIm\\fHc\\fH\\\\\\fHU\\fIl\\fHB\\fId\\fHn\\fHJ\\fHS\\fHD\\fH@\\fHR\\fHHgjsolgl`p\\fHT\\fHB\\fHC\\fH\\\\\\fIn\\fHF\\fHD\\fHR\\fHB\\fHF\\fHH\\fHR\\fHG\\fHS\\fH\\\\\\fHx\\fHT\\fHH\\fHH\\fH\\\\\\fHU\\fH^\\fIg\\fH{\\fHU\\fIm\\fHj\\fH@\\fHR\\fH\\\\\\fHJ\\fIk\\fHZ\\fHU\\fIm\\fHd\\fHz\\fIk\\fH^\\fHC\\fHJ\\fHS\\fHy\\fHR\\fHB\\fHY\\fIk\\fH@\\fHH\\fIl\\fHD\\fH@\\fIl\\fHv\\fHB\\fI`\\fHH\\fHT\\fHR\\fH^\\fH^\\fIk\\fHz\\fHp\\fIe\\fH@\\fHB\\fHJ\\fHJ\\fHH\\fHI\\fHR\\fHD\\fHU\\fIl\\fHZ\\fHU\\fH\\\\\\fHi\\fH^\\fH{\\fHy\\fHA\\fIl\\fHD\\fH{\\fH\\\\\\fHF\\fHR\\fHT\\fH\\\\\\fHR\\fHH\\fHy\\fHS\\fHc\\fHe\\fHT\\fIk\\fH{\\fHC\\fIl\\fHU\\fIn\\fHm\\fHj\\fH{\\fIk\\fHs\\fIl\\fHB\\fHz\\fIg\\fHp\\fHy\\fHR\\fH\\\\\\fHi\\fHA\\fIl\\fH{\\fHC\\fIk\\fHH\\fIm\\fHB\\fHY\\fIg\\fHs\\fHJ\\fIk\\fHn\\fHi\\fH{\\fH\\\\\\fH|\\fHT\\fIk\\fHB\\fIk\\fH^\\fH^\\fH{\\fHR\\fHU\\fHR\\fH^\\fHf\\fHF\\fH\\\\\\fHv\\fHR\\fH\\\\\\fH|\\fHT\\fHR\\fHJ\\fIk\\fH\\\\\\fHp\\fHS\\fHT\\fHJ\\fHS\\fH^\\fH@\\fHn\\fHJ\\fH@\\fHD\\fHR\\fHU\\fIn\\fHn\\fH^\\fHR\\fHz\\fHp\\fIl\\fHH\\fH@\\fHs\\fHD\\fHB\\fHS\\fH^\\fHk\\fHT\\fIk\\fHj\\fHD\\fIk\\fHD\\fHC\\fHR\\fHy\\fIm\\fH^\\fH^\\fIe\\fH{\\fHA\\fHR\\fH{\\fH\\\\\\fIk\\fH^\\fHp\\fH{\\fHU\\fH\\\\\\fHR\\fHB\\fH^\\fH{\\fIk\\fHF\\fIk\\fHp\\fHU\\fHR\\fHI\\fHk\\fHT\\fIl\\fHT\\fHU\\fIl\\fHy\\fH^\\fHR\\fHL\\fIl\\fHy\\fHU\\fHR\\fHm\\fHJ\\fIn\\fH\\\\\\fHH\\fHU\\fHH\\fHT\\fHR\\fHH\\fHC\\fHR\\fHJ\\fHj\\fHC\\fHR\\fHF\\fHR\\fHy\\fHy\\fI`\\fHD\\fHZ\\fHR\\fHB\\fHJ\\fIk\\fHz\\fHC\\fHU\\fIl\\fH\\\\\\fHR\\fHC\\fHz\\fIm\\fHJ\\fH^\\fH{\\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\x0E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\x0E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\x0E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\x0E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\x0E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\x0E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\x0E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\x7Fwkvna\\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\x0E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\x0E\\t?kfbg=\\x0E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\x0E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\x0E\\t?,kfbg=\\x0E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\x0E\\t\\n?,gju=\\x0E\\t\\x0E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\x0E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\x0E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\x0E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\x0E\\t?kfbg=\\x0E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\x0E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\x05Gx\\bTA\\nzk\\x0BBl\\bQ\\x7F\\bTA\\nzk\\x0BUm\\bQ\\x7F\\bTA\\nzk\\npe\\x05u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\x05tS\\x05k`\\t[X\\t[X\\x0BHR\\bPv\\bTW\\bUe\\n\\x7Fa\\bQp\\x0B_W\\x0BWs\\nxS\\x0BAz\\n_y\\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\fHD\\fHU\\fIl\\fHn\\fHy\\fH\\\\\\fHD\\fIk\\fHi\\fHF\\fHD\\fIk\\fHy\\fHS\\fHC\\fHR\\fHy\\fH\\\\\\fIk\\fHn\\fHi\\fHD\\fIa\\fHC\\fHy\\fIa\\fHC\\fHR\\fH{\\fHR\\fHk\\fHM\\fH@\\fHR\\fH\\\\\\fIk\\fHy\\fHS\\fHT\\fIl\\fHJ\\fHS\\fHC\\fHR\\fHF\\fHU\\fH^\\fIk\\fHT\\fHS\\fHn\\fHU\\fHA\\fHR\\fH\\\\\\fHH\\fHi\\fHF\\fHD\\fIl\\fHY\\fHR\\fH^\\fIk\\fHT\\fIk\\fHY\\fHR\\fHy\\fH\\\\\\fHH\\fIk\\fHB\\fIk\\fH\\\\\\fIk\\fHU\\fIg\\fHD\\fIk\\fHT\\fHy\\fHH\\fIk\\fH@\\fHU\\fIm\\fHH\\fHT\\fHR\\fHk\\fHs\\fHU\\fIg\\fH{\\fHR\\fHp\\fHR\\fHD\\fIk\\fHB\\fHS\\fHD\\fHs\\fHy\\fH\\\\\\fHH\\fHR\\fHy\\fH\\\\\\fHD\\fHR\\fHe\\fHD\\fHy\\fIk\\fHC\\fHU\\fHR\\fHm\\fHT\\fH@\\fHT\\fIk\\fHA\\fHR\\fH[\\fHR\\fHj\\fHF\\fHy\\fIk\\fH^\\fHS\\fHC\\fIk\\fHZ\\fIm\\fH\\\\\\fIn\\fHk\\fHT\\fHy\\fIk\\fHt\\fHn\\fHs\\fIk\\fHB\\fIk\\fH\\\\\\fIl\\fHT\\fHy\\fHH\\fHR\\fHB\\fIk\\fH\\\\\\fHR\\fH^\\fIk\\fHy\\fH\\\\\\fHi\\fHK\\fHS\\fHy\\fHi\\fHF\\fHD\\fHR\\fHT\\fHB\\fHR\\fHp\\fHB\\fIm\\fHq\\fIk\\fHy\\fHR\\fH\\\\\\fHO\\fHU\\fIg\\fHH\\fHR\\fHy\\fHM\\fHP\\fIl\\fHC\\fHU\\fHR\\fHn\\fHU\\fIg\\fHs\\fH^\\fHZ\\fH@\\fIa\\fHJ\\fH^\\fHS\\fHC\\fHR\\fHp\\fIl\\fHY\\fHD\\fHp\\fHR\\fHH\\fHR\\fHy\\fId\\fHT\\fIk\\fHj\\fHF\\fHy\\fHR\\fHY\\fHR\\fH^\\fIl\\fHJ\\fIk\\fHD\\fIk\\fHF\\fIn\\fH\\\\\\fIl\\fHF\\fHR\\fHD\\fIl\\fHe\\fHT\\fHy\\fIk\\fHU\\fIg\\fH{\\fIl\\fH@\\fId\\fHL\\fHy\\fHj\\fHF\\fHy\\fIl\\fHY\\fH\\\\\\fIa\\fH[\\fH{\\fHR\\fHn\\fHY\\fHj\\fHF\\fHy\\fIg\\fHp\\fHS\\fH^\\fHR\\fHp\\fHR\\fHD\\fHR\\fHT\\fHU\\fHB\\fHH\\fHU\\fHB\\fIk\\fHn\\fHe\\fHD\\fHy\\fIl\\fHC\\fHR\\fHU\\fIn\\fHJ\\fH\\\\\\fIa\\fHp\\fHT\\fIn\\fHv\\fIl\\fHF\\fHT\\fHn\\fHJ\\fHT\\fHY\\fHR\\fH^\\fHU\\fIg\\fHD\\fHR\\fHU\\fIg\\fHH\\fIl\\fHp\\fId\\fHT\\fIk\\fHY\\fHR\\fHF\\fHT\\fHp\\fHD\\fHH\\fHR\\fHD\\fIk\\fHH\\fHR\\fHp\\fHR\\fH\\\\\\fIl\\fHt\\fHR\\fHC\\fH^\\fHp\\fHS\\fH^\\fIk\\fHD\\fIl\\fHv\\fIk\\fHp\\fHR\\fHn\\fHv\\fHF\\fHH\\fIa\\fH\\\\\\fH{\\fIn\\fH{\\fH^\\fHp\\fHR\\fHH\\fIk\\fH@\\fHR\\fHU\\fH\\\\\\fHj\\fHF\\fHD\\fIk\\fHY\\fHR\\fHU\\fHD\\fHk\\fHT\\fHy\\fHR\\fHT\\fIm\\fH@\\fHU\\fH\\\\\\fHU\\fHD\\fIk\\fHk\\fHT\\fHT\\fIk\\fHT\\fHU\\fHS\\fHH\\fH@\\fHM\\fHP\\fIk\\fHt\\fHs\\fHD\\fHR\\fHH\\fH^\\fHR\\fHZ\\fHF\\fHR\\fHn\\fHv\\fHZ\\fIa\\fH\\\\\\fIl\\fH@\\fHM\\fHP\\fIl\\fHU\\fIg\\fHH\\fIk\\fHT\\fHR\\fHd\\fHs\\fHZ\\fHR\\fHC\\fHJ\\fHT\\fHy\\fHH\\fIl\\fHp\\fHR\\fHH\\fIl\\fHY\\fHR\\fH^\\fHR\\fHU\\fHp\\fHR\\fH\\\\\\fHF\\fHs\\fHD\\fHR\\fH\\\\\\fHz\\fHD\\fIk\\fHT\\fHM\\fHP\\fHy\\fHB\\fHS\\fH^\\fHR\\fHe\\fHT\\fHy\\fIl\\fHy\\fIk\\fHY\\fH^\\fH^\\fH{\\fHH\\fHR\\fHz\\fHR\\fHD\\fHR\\fHi\\fH\\\\\\fIa\\fHI\\fHp\\fHU\\fHR\\fHn\\fHJ\\fIk\\fHz\\fHR\\fHF\\fHU\\fH^\\fIl\\fHD\\fHS\\fHC\\fHB\\fH@\\fHS\\fHD\\fHR\\fH@\\fId\\fHn\\fHy\\fHy\\fHU\\fIl\\fHn\\fHy\\fHU\\fHD\\fHR\\fHJ\\fIk\\fHH\\fHR\\fHU\\fHB\\fH^\\fIk\\fHy\\fHR\\fHG\\fIl\\fHp\\fH@\\fHy\\fHS\\fHH\\fIm\\fH\\\\\\fHH\\fHB\\fHR\\fHn\\fH{\\fHY\\fHU\\fIl\\fHn\\fH\\\\\\fIg\\fHp\\fHP\\fHB\\fHS\\fH^\\fIl\\fHj\\fH\\\\\\fIg\\fHF\\fHT\\fIk\\fHD\\fHR\\fHC\\fHR\\fHJ\\fHY\\fH^\\fIk\\fHD\\fIk\\fHz\\fHR\\fHH\\fHR\\fHy\\fH\\\\\\fIl\\fH@\\fHe\\fHD\\fHy\\fHR\\fHp\\fHY\\fHR\\fH@\\fHF\\fIn\\fH\\\\\\fHR\\fH@\\fHM\\fHP\\fHR\\fHT\\fI`\\fHJ\\fHR\\fHZ\\fIk\\fHC\\fH\\\\\\fHy\\fHS\\fHC\\fIk\\fHy\\fHU\\fHR\\fHn\\fHi\\fHy\\fHT\\fH\\\\\\fH@\\fHD\\fHR\\fHc\\fHY\\fHU\\fHR\\fHn\\fHT\\fIa\\fHI\\fH^\\fHB\\fHS\\fH^\\fIk\\fH^\\fIk\\fHz\\fHy\\fHY\\fHS\\fH[\\fHC\\fHy\\fIa\\fH\\\\\\fHn\\fHT\\fHB\\fIn\\fHU\\fHI\\fHR\\fHD\\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\x0E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\x0E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\x0E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\x0E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\x0E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\x0E\\t?,p`qjsw=\\x0E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\x0E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\x0E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\x0E\\t\\x0E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\x7F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\x7F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\x0E\\t?,p`qjsw=\\x0E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\x0E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\x0E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\x0BBl\\bQ\\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\fHe\\fHF\\fHC\\fIg\\fH{\\fHF\\fIn\\fH\\\\\\fIa\\fHY\\fHU\\fHB\\fHR\\fH\\\\\\fIk\\fH^\\fIg\\fH{\\fIg\\fHn\\fHv\\fIm\\fHD\\fHR\\fHY\\fH^\\fIk\\fHy\\fHS\\fHD\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fHF\\fIm\\fH^\\fHS\\fHT\\fHz\\fIg\\fHp\\fIk\\fHn\\fHv\\fHR\\fHU\\fHS\\fHc\\fHA\\fIk\\fHp\\fIk\\fHn\\fHZ\\fHR\\fHB\\fHS\\fH^\\fHU\\fHB\\fHR\\fH\\\\\\fIl\\fHp\\fHR\\fH{\\fH\\\\\\fHO\\fH@\\fHD\\fHR\\fHD\\fIk\\fHy\\fIm\\fHB\\fHR\\fH\\\\\\fH@\\fIa\\fH^\\fIe\\fH{\\fHB\\fHR\\fH^\\fHS\\fHy\\fHB\\fHU\\fHS\\fH^\\fHR\\fHF\\fIo\\fH[\\fIa\\fHL\\fH@\\fHN\\fHP\\fHH\\fIk\\fHA\\fHR\\fHp\\fHF\\fHR\\fHy\\fIa\\fH^\\fHS\\fHy\\fHs\\fIa\\fH\\\\\\fIk\\fHD\\fHz\\fHS\\fH^\\fHR\\fHG\\fHJ\\fI`\\fH\\\\\\fHR\\fHD\\fHB\\fHR\\fHB\\fH^\\fIk\\fHB\\fHH\\fHJ\\fHR\\fHD\\fH@\\fHR\\fHp\\fHR\\fH\\\\\\fHY\\fHS\\fHy\\fHR\\fHT\\fHy\\fIa\\fHC\\fIg\\fHn\\fHv\\fHR\\fHU\\fHH\\fIk\\fHF\\fHU\\fIm\\fHm\\fHv\\fH@\\fHH\\fHR\\fHC\\fHR\\fHT\\fHn\\fHY\\fHR\\fHJ\\fHJ\\fIk\\fHz\\fHD\\fIk\\fHF\\fHS\\fHw\\fH^\\fIk\\fHY\\fHS\\fHZ\\fIk\\fH[\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHe\\fHH\\fIa\\fHH\\fH\\\\\\fHB\\fIm\\fHn\\fH@\\fHd\\fHJ\\fIg\\fHD\\fIg\\fHn\\fHe\\fHF\\fHy\\fH\\\\\\fHO\\fHF\\fHN\\fHP\\fIk\\fHn\\fHT\\fIa\\fHI\\fHS\\fHH\\fHG\\fHS\\fH^\\fIa\\fHB\\fHB\\fIm\\fHz\\fIa\\fHC\\fHi\\fHv\\fIa\\fHw\\fHR\\fHw\\fIn\\fHs\\fHH\\fIl\\fHT\\fHn\\fH{\\fIl\\fHH\\fHp\\fHR\\fHc\\fH{\\fHR\\fHY\\fHS\\fHA\\fHR\\fH{\\fHt\\fHO\\fIa\\fHs\\fIk\\fHJ\\fIn\\fHT\\fH\\\\\\fIk\\fHJ\\fHS\\fHD\\fIg\\fHn\\fHU\\fHH\\fIa\\fHC\\fHR\\fHT\\fIk\\fHy\\fIa\\fHT\\fH{\\fHR\\fHn\\fHK\\fIl\\fHY\\fHS\\fHZ\\fIa\\fHY\\fH\\\\\\fHR\\fHH\\fIk\\fHn\\fHJ\\fId\\fHs\\fIa\\fHT\\fHD\\fHy\\fIa\\fHZ\\fHR\\fHT\\fHR\\fHB\\fHD\\fIk\\fHi\\fHJ\\fHR\\fH^\\fHH\\fH@\\fHS\\fHp\\fH^\\fIl\\fHF\\fIm\\fH\\\\\\fIn\\fH[\\fHU\\fHS\\fHn\\fHJ\\fIl\\fHB\\fHS\\fHH\\fIa\\fH\\\\\\fHy\\fHY\\fHS\\fHH\\fHR\\fH\\\\\\fIm\\fHF\\fHC\\fIk\\fHT\\fIa\\fHI\\fHR\\fHD\\fHy\\fH\\\\\\fIg\\fHM\\fHP\\fHB\\fIm\\fHy\\fIa\\fHH\\fHC\\fIg\\fHp\\fHD\\fHR\\fHy\\fIo\\fHF\\fHC\\fHR\\fHF\\fIg\\fHT\\fIa\\fHs\\fHt\\fH\\\\\\fIk\\fH^\\fIn\\fHy\\fHR\\fH\\\\\\fIa\\fHC\\fHY\\fHS\\fHv\\fHR\\fH\\\\\\fHT\\fIn\\fHv\\fHD\\fHR\\fHB\\fIn\\fH^\\fIa\\fHC\\fHJ\\fIk\\fHz\\fIk\\fHn\\fHU\\fHB\\fIk\\fHZ\\fHR\\fHT\\fIa\\fHy\\fIn\\fH^\\fHB\\fId\\fHn\\fHD\\fIk\\fHH\\fId\\fHC\\fHR\\fH\\\\\\fHp\\fHS\\fHT\\fHy\\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\x0E\\t?,p`qjsw=\\x0E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\x7Fwkvna\\x7Fofew\\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\x0E\\t?-ip!=?,p`qjsw=\\x0E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\x7Fqjdkw\\x7Fwkvna\\x7F-ip!=?,p`qjsw=\\x0E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\x0E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\x0E\\t?,gju=\\x0E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\x0E\\t?,kwno=\\x0E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\x7Fwkvna\\x7Fqjdkw\\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\x0E\\t?,kwno=\\x0E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\x0E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\fHJ\\fIa\\fHY\\fHR\\fH\\\\\\fHR\\fHB\\fId\\fHD\\fIm\\fHi\\fH^\\fHF\\fIa\\fH\\\\\\fHJ\\fHR\\fHD\\fHA\\fHR\\fH\\\\\\fHH\\fIl\\fHC\\fHi\\fHD\\fIm\\fHJ\\fIk\\fHZ\\fHU\\fHS\\fHD\\fIa\\fHJ\\fIl\\fHk\\fHn\\fHM\\fHS\\fHC\\fHR\\fHJ\\fHS\\fH^\\fIa\\fH^\\fIl\\fHi\\fHK\\fHS\\fHy\\fHR\\fH\\\\\\fHY\\fIl\\fHM\\fHS\\fHC\\fIg\\fHv\\fHS\\fHs\\fIa\\fHL\\fIk\\fHT\\fHB\\fHR\\fHv\\fHR\\fH\\\\\\fHp\\fHn\\fHy\\fIa\\fHZ\\fHD\\fHJ\\fIm\\fHD\\fHS\\fHC\\fHR\\fHF\\fIa\\fH\\\\\\fHC\\fIg\\fH{\\fHi\\fHD\\fIm\\fHT\\fHR\\fH\\\\\\fH}\\fHD\\fH^\\fHR\\fHk\\fHD\\fHF\\fHR\\fH\\\\\\fIa\\fHs\\fIl\\fHZ\\fH\\\\\\fIa\\fHH\\fIg\\fHn\\fH^\\fIg\\fHy\\fHT\\fHA\\fHR\\fHG\\fHP\\fIa\\fH^\\fId\\fHZ\\fHZ\\fH\\\\\\fIa\\fHH\\fIk\\fHn\\fHF\\fIa\\fH\\\\\\fHJ\\fIk\\fHZ\\fHF\\fIa\\fH^\\fIk\\fHC\\fH\\\\\\fHy\\fIk\\fHn\\fHJ\\fIa\\fH\\\\\\fHT\\fIa\\fHI\\fHS\\fHH\\fHS\\fHe\\fHH\\fIa\\fHF\\fHR\\fHJ\\fHe\\fHD\\fIa\\fHU\\fIk\\fHn\\fHv\\fHS\\fHs\\fIa\\fHL\\fHR\\fHC\\fHR\\fHH\\fIa\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHR\\fHJ\\fHR\\fHF\\fIm\\fH\\\\\\fHR\\fHD\\fIk\\fHp\\fIg\\fHM\\fHP\\fIk\\fHn\\fHi\\fHD\\fIm\\fHY\\fHR\\fHJ\\fHZ\\fIa\\fH\\\\\\fIk\\fHO\\fIl\\fHZ\\fHS\\fHy\\fIa\\fH[\\fHR\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH{\\fIa\\fH\\\\\\fHU\\fHF\\fH\\\\\\fHS\\fHO\\fHR\\fHB\\fH@\\fIa\\fH\\\\\\fHR\\fHn\\fHM\\fH@\\fHv\\fIa\\fHv\\fIg\\fHn\\fHe\\fHF\\fH^\\fH@\\fIa\\fHK\\fHB\\fHn\\fHH\\fIa\\fH\\\\\\fIl\\fHT\\fHn\\fHF\\fH\\\\\\fIa\\fHy\\fHe\\fHB\\fIa\\fHB\\fIl\\fHJ\\fHB\\fHR\\fHK\\fIa\\fHC\\fHB\\fHT\\fHU\\fHR\\fHC\\fHH\\fHR\\fHZ\\fH@\\fIa\\fHJ\\fIg\\fHn\\fHB\\fIl\\fHM\\fHS\\fHC\\fHR\\fHj\\fHd\\fHF\\fIl\\fHc\\fH^\\fHB\\fIg\\fH@\\fHR\\fHk\\fH^\\fHT\\fHn\\fHz\\fIa\\fHC\\fHR\\fHj\\fHF\\fH\\\\\\fIk\\fHZ\\fHD\\fHi\\fHD\\fIm\\fH@\\fHn\\fHK\\fH@\\fHR\\fHp\\fHP\\fHR\\fH\\\\\\fHD\\fHY\\fIl\\fHD\\fHH\\fHB\\fHF\\fIa\\fH\\\\\\fHB\\fIm\\fHz\\fHF\\fIa\\fH\\\\\\fHZ\\fIa\\fHD\\fHF\\fH\\\\\\fHS\\fHY\\fHR\\fH\\\\\\fHD\\fIm\\fHy\\fHT\\fHR\\fHD\\fHT\\fHB\\fH\\\\\\fIa\\fHI\\fHD\\fHj\\fHC\\fIg\\fHp\\fHS\\fHH\\fHT\\fIg\\fHB\\fHY\\fHR\\fH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\x0E\\t?,algz=\\x0E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\x0E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\x0E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\x0E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\x0E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\x0E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\x0E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\fTL\\fT^\\fTE\\fT^\\fUh\\fT{\\fTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\x05Gx\\bTA\\nzk#+\\x0BUm\\x05Gx*\\fHD\\fHS\\fH\\\\\\fIa\\fHJ\\fIk\\fHZ\\fHM\\fHR\\fHe\\fHD\\fH^\\fIg\\fHM\\fHy\\fIa\\fH[\\fIk\\fHH\\fIa\\fH\\\\\\fHp\\fHR\\fHD\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH@\\fHn\\fHK\\fHS\\fHH\\fHT\\fIa\\fHI\\fHR\\fHF\\fHD\\fHR\\fHT\\fIa\\fHY\\fIl\\fHy\\fHR\\fH\\\\\\fHT\\fHn\\fHT\\fIa\\fHy\\fH\\\\\\fHO\\fHT\\fHR\\fHB\\fH{\\fIa\\fH\\\\\\fIl\\fHv\\fHS\\fHs\\fIa\\fHL\\fIg\\fHn\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHD\\fHi\\fHB\\fIk\\fH\\\\\\fHS\\fHy\\fHR\\fHY\\fHS\\fHA\\fHS\\fHD\\fIa\\fHD\\fH{\\fHR\\fHM\\fHS\\fHC\\fHR\\fHm\\fHy\\fIa\\fHC\\fIg\\fHn\\fHy\\fHS\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHR\\fHF\\fHU\\fIm\\fHm\\fHv\\fHH\\fIl\\fHF\\fIa\\fH\\\\\\fH@\\fHn\\fHK\\fHD\\fHs\\fHS\\fHF\\fIa\\fHF\\fHO\\fIl\\fHy\\fIa\\fH\\\\\\fHS\\fHy\\fIk\\fHs\\fHF\\fIa\\fH\\\\\\fHR\\fH\\\\\\fHn\\fHA\\fHF\\fIa\\fH\\\\\\fHR\\fHF\\fIa\\fHH\\fHB\\fHR\\fH^\\fHS\\fHy\\fIg\\fHn\\fH\\\\\\fHG\\fHP\\fIa\\fHH\\fHR\\fH\\\\\\fHD\\fHS\\fH\\\\\\fIa\\fHB\\fHR\\fHO\\fH^\\fHS\\fHB\\fHS\\fHs\\fIk\\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\fHF\\fIm\\fHT\\fIa\\fHH\\fHS\\fHy\\fHR\\fHy\\fHR\\fHn\\fH{\\fIa\\fH\\\\\\fIk\\fHT\\fHe\\fHD\\fIa\\fHU\\fIg\\fHn\\fHD\\fIk\\fHY\\fHS\\fHK\\fHR\\fHD\\fHT\\fHA\\fHR\\fHG\\fHS\\fHy\\fIa\\fHT\\fHS\\fHn\\fH{\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHS\\fHH\\fHy\\fIe\\fHF\\fIl\\fH\\\\\\fHR\\fHk\\fHs\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHF\\fHD\\fHy\\fHR\\fH\\\\\\fIa\\fH\\\\\\fHY\\fHR\\fHd\\fHT\\fHy\\fIa\\fH\\\\\\fHS\\fHC\\fHH\\fHR\", \"\\u06F7%\\u018C'T%\\x85'W%\\xD7%O%g%\\xA6&\\u0193%\\u01E5&>&*&'&^&\\x88\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\x82&P&1&\\xB1&3&]&m&u&E&t&C&\\xCF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\x81&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\x9A&>&\\x86&7&]&F&2&>&J&6&n&2&%&?&\\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\x84(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\xC6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\xA8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\");\n    setData(dictionaryData, dictionarySizeBits);\n  }\n\n  /**\n   * @constructor\n   * @param {!Int8Array} data\n   * @struct\n   */\n  function InputStream(data) {\n    /** @type {!Int8Array} */\n    this.data = new Int8Array(0);\n    /** @type {number} */\n    this.offset = 0;\n    this.data = data;\n  }\n\n  /**\n   * @param {number} x\n   * @return {string}\n   */\n  function valueOf(x) {\n    return x.toString();\n  }\n\n  /**\n   * @param {?InputStream} src\n   * @param {!Int8Array} dst\n   * @param {number} offset\n   * @param {number} length\n   * @return {number}\n   */\n  function readInput(src, dst, offset, length) {\n    if (src === null) {\n      return -1;\n    }\n    let /** @type {number} */ end = Math.min(src.offset + length, src.data.length);\n    let /** @type {number} */ bytesRead = end - src.offset;\n    dst.set(src.data.subarray(src.offset, end), offset);\n    src.offset += bytesRead;\n    return bytesRead;\n  }\n  /**\n   * @param {string} src\n   * @return {!Int8Array}\n   */\n  function toUsAsciiBytes(src) {\n    let /** @type {number} */ n = src.length;\n    let /** @type {!Int8Array} */ result = new Int8Array(n);\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n\n/* GENERATED CODE END */\n\n  /** @typedef {!Int8Array} */\n  let ByteBuffer;\n\n  /**\n   * @param {!Int8Array} bytes\n   * @param {?Options=} options\n   * @return {!Int8Array}\n   */\n  function decode(bytes, options) {\n    let /** @type {!State} */ s = new State();\n    initState(s, new InputStream(bytes));\n    if (options) {\n      let customDictionary =\n          /** @type {?Int8Array} */ (options[\"customDictionary\"]);\n      if (customDictionary) attachDictionaryChunk(s, customDictionary);\n    }\n    let /** @type {number} */ totalOutput = 0;\n    let /** @type {!Array<!Int8Array>} */ chunks = [];\n    while (true) {\n      let /** @type {!Int8Array} */ chunk = new Int8Array(16384);\n      chunks.push(chunk);\n      s.output = chunk;\n      s.outputOffset = 0;\n      s.outputLength = 16384;\n      s.outputUsed = 0;\n      decompress(s);\n      totalOutput += s.outputUsed;\n      if (s.outputUsed < 16384) break;\n    }\n    close(s);\n    let /** @type {!Int8Array} */ result = new Int8Array(totalOutput);\n    let /** @type {number} */ offset = 0;\n    for (let /** @type {number} */ i = 0; i < chunks.length; ++i) {\n      let /** @type {!Int8Array} */ chunk = chunks[i];\n      let /** @type {number} */ end = Math.min(totalOutput, offset + 16384);\n      let /** @type {number} */ len = end - offset;\n      if (len < 16384) {\n        result.set(chunk.subarray(0, len), offset);\n      } else {\n        result.set(chunk, offset);\n      }\n      offset += len;\n    }\n    return result;\n  }\n\n  return decode;\n};\n\n/**\n * @type {function(!Int8Array, ?Options=):!Int8Array}\n */\nexport let BrotliDecode = makeBrotliDecode();\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/js/micProcessor.js",
    "content": "//   micProcessor.js\nclass MicProcessor extends AudioWorkletProcessor\n{\n    constructor()\n    {\n        super();\n\n        // global variables for testing\n        var sampleRate = globalThis.sampleRate;\n        var currentFrame = globalThis.currentFrame;\n        var currentTime = globalThis.currentTime;\n        var currentRenderQuantum = globalThis.currentRenderQuantum;\n                \n        this.SampleRate = sampleRate;\n        this.TargetSamples = Math.floor(this.SampleRate * 0.1); // 100ms\n        this.Buffer = new Float32Array(this.TargetSamples);\n        this.BufferIndex = 0;\n\n        this.port.onmessage = (event) =>\n        {\n            var data = event.data;\n\n            if (typeof data === 'number')\n            {\n                //this.port.postMessage(data); // echo back test\n            }\n            if (data instanceof Uint8Array)\n            {\n            }\n        };\n    }\n\n    process(inputs, outputs, parameters)\n    {\n        var inChannel0 = inputs[0][0];\n        if (!inChannel0) return true;\n                \n        let srcIndex = 0;\n        var srcLen = inChannel0.length;\n\n        while (srcIndex < srcLen)\n        {\n            var remaining = this.TargetSamples - this.BufferIndex;\n            var copyCount = Math.min(remaining, srcLen - srcIndex);\n\n            this.Buffer.set(\n                inChannel0.subarray(srcIndex, srcIndex + copyCount),\n                this.BufferIndex);\n\n            this.BufferIndex += copyCount;\n            srcIndex += copyCount;\n\n            if (this.BufferIndex >= this.TargetSamples)\n            {\n                this.SendBuffer();\n                this.BufferIndex = 0;\n            }\n        }\n\n        return true;\n    }\n\n    SendBuffer()\n    {\n        // convert to 16-6bit PCM\n        var int16 = new Int16Array(this.TargetSamples);\n        for (var i = 0; i < this.TargetSamples; i++)\n        {\n            int16[i] = this.Buffer[i] * 32767;\n        }\n\n        var byteArray = new Uint8Array(int16.buffer);\n        this.port.postMessage(byteArray, [byteArray.buffer]);\n    }\n}\n\nregisterProcessor('mic-processor', MicProcessor);"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/js/streamProcessor.js",
    "content": "//   streamProcessor.js\nclass StreamProcessor extends AudioWorkletProcessor\n{\n    constructor()\n    {\n        super();\n        this.queue = [];\n\n        this.port.onmessage = (event) =>\n        {\n            var data = event.data;\n\n            if (typeof data === 'number')\n            {\n                if (data === 2)\n                {                    \n                    this.queue = [];\n                }\n            }\n            if (data instanceof Uint8Array)\n            {\n                const buffer = new Int16Array(data.buffer, data.byteOffset, data.length / 2);\n                buffer.offset = 0;\n                this.queue.push(buffer);\n            }\n        };\n    }\n\n\n    process(inputs, outputs, parameters)\n    {\n        const output = outputs[0];\n        \n        const channelCount = output.length;\n        const sampleCount = output[0].length;\n\n        let written = 0;\n\n        while (written < sampleCount && this.queue.length > 0)\n        {\n            const buffer = this.queue[0];\n            const offset = buffer.offset;\n\n            const available = buffer.length - offset;\n            const needed = sampleCount - written;\n            const copyCount = Math.min(available, needed);\n\n            for (let i = 0; i < copyCount; i++)\n            {\n                for (let c = 0; c < channelCount; c++)\n                {\n                    const channel = output[c];\n                    let value = (buffer[offset+i] / 32767);\n                    channel[written+i] = value;\n                }\n            }\n            \n            written += copyCount;\n            buffer.offset += copyCount;\n\n            if (buffer.offset >= buffer.length)\n            {\n                this.queue.shift();\n                this.port.postMessage(1);\n            }\n        }\n        \n        // Fill remaining samples with silence\n        if (written < sampleCount)\n        {\n            for (let c = 0; c < channelCount; c++)\n            {\n                const channel = output[c];\n\n                for (let i = written; i < sampleCount; i++)\n                {\n                    let value = 0;\n                    channel[i] = value;\n                }\n            }\n        }\n\n        return true;\n    }\n}\n\nregisterProcessor(\"stream-processor\", StreamProcessor);"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/ContentImporter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nusing TInput = System.String;\nusing TOutput = System.String;\n\nnamespace $safeprojectname$\n{\n   /// <summary>\n    /// This class will be instantiated by the XNA Framework Content Pipeline\n    /// to import a file from disk into the specified type, TImport.\n    ///\n    /// This should be part of a Content Pipeline Extension Library project.\n    ///\n    /// TODO: change the ContentImporter attribute to specify the correct file\n    /// extension, display name, and default processor for this importer.\n    /// </summary>\n\n    [ContentImporter(\".xyz\", DisplayName = \"XYZ Importer\", DefaultProcessor = \"ContentProcessor1\")]\n    public class ContentImporter1 : ContentImporter<TInput>\n    {\n\n        public override TInput Import(string filename, ContentImporterContext context)\n        {\n            // TODO: process the input object, and return the modified data.\n            throw new NotImplementedException();\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/ContentPipelineExtension.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{$guid1$}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n      <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" >\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" >\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n      <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n      <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Graphics\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n      <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Audio\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n      <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Media\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"ContentImporter1.cs\" />\n    <Compile Include=\"ContentProcessor1.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/ContentPipelineExtension.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Content Pipeline Extension Project (.NET Framework)</Name>\n    <Description>A KNI project for creating a custom content importer and processor</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <PlatformTag>linux</PlatformTag>\n    <PlatformTag>macos</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>library</ProjectTypeTag>\n    <ProjectTypeTag>extension</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43200</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>KniContentPipelineExtension</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"ContentPipelineExtension.csproj\" File=\"ContentPipelineExtension.csproj\" ReplaceParameters=\"true\">\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"ContentImporter1.cs\">ContentImporter.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"ContentProcessor1.cs\">ContentProcessor.cs</ProjectItem>\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n      </Folder>\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/ContentProcessor.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n// TODO: replace these with the processor input and output types.\nusing TInput = System.String;\nusing TOutput = System.String;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This class will be instantiated by the XNA Framework Content Pipeline\n    /// to apply custom processing to content data, converting an object of\n    /// type TInput to TOutput. The input and output types may be the same if\n    /// the processor wishes to alter data without changing its type.\n    ///\n    /// This should be part of a Content Pipeline Extension Library project.\n    ///\n    /// TODO: change the ContentProcessor attribute to specify the correct\n    /// display name for this processor.\n    /// </summary>\n    [ContentProcessor(DisplayName = \"$safeprojectname$.ContentProcessor1\")]\n    public class ContentProcessor1 : ContentProcessor<TInput, TOutput>\n    {\n        public override TOutput Process(TInput input, ContentProcessorContext context)\n        {\n            // TODO: process the input object, and return the modified data.\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid2$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/ContentImporter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nusing TInput = System.String;\nusing TOutput = System.String;\n\nnamespace $safeprojectname$\n{\n   /// <summary>\n    /// This class will be instantiated by the XNA Framework Content Pipeline\n    /// to import a file from disk into the specified type, TImport.\n    ///\n    /// This should be part of a Content Pipeline Extension Library project.\n    ///\n    /// TODO: change the ContentImporter attribute to specify the correct file\n    /// extension, display name, and default processor for this importer.\n    /// </summary>\n\n    [ContentImporter(\".xyz\", DisplayName = \"XYZ Importer\", DefaultProcessor = \"ContentProcessor1\")]\n    public class ContentImporter1 : ContentImporter<TInput>\n    {\n\n        public override TInput Import(string filename, ContentImporterContext context)\n        {\n            // TODO: process the input object, and return the modified data.\n            throw new NotImplementedException();\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/ContentPipelineExtension.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <ProjectGuid>{$guid1$}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);</DefineConstants>\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\t\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n      <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" >\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" >\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n      <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n      <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Graphics\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n      <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Audio\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n      <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Media\" Version=\"4.2.9001\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"ContentImporter1.cs\" />\n    <Compile Include=\"ContentProcessor1.cs\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/ContentPipelineExtension.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Content Pipeline Extension Project (.NetStandard)</Name>\n    <Description>A KNI project for creating a custom content importer and processor</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <PlatformTag>linux</PlatformTag>\n    <PlatformTag>macos</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>library</ProjectTypeTag>\n    <ProjectTypeTag>extension</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43201</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>KniContentPipelineExtension</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"ContentPipelineExtension.csproj\" File=\"ContentPipelineExtension.csproj\" ReplaceParameters=\"true\">\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"ContentImporter1.cs\">ContentImporter.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"ContentProcessor1.cs\">ContentProcessor.cs</ProjectItem>\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/ContentProcessor.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n// TODO: replace these with the processor input and output types.\nusing TInput = System.String;\nusing TOutput = System.String;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This class will be instantiated by the XNA Framework Content Pipeline\n    /// to apply custom processing to content data, converting an object of\n    /// type TInput to TOutput. The input and output types may be the same if\n    /// the processor wishes to alter data without changing its type.\n    ///\n    /// This should be part of a Content Pipeline Extension Library project.\n    ///\n    /// TODO: change the ContentProcessor attribute to specify the correct\n    /// display name for this processor.\n    /// </summary>\n    [ContentProcessor(DisplayName = \"$safeprojectname$.ContentProcessor1\")]\n    public class ContentProcessor1 : ContentProcessor<TInput, TOutput>\n    {\n        public override TOutput Process(TInput input, ContentProcessorContext context)\n        {\n            // TODO: process the input object, and return the modified data.\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Application.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0</TargetFramework>\n    <RollForward>Major</RollForward>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <PublishTrimmed>True</PublishTrimmed>\n    <PublishAot>True</PublishAot>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DESKTOPGL</DefineConstants>\n    <KniPlatform>DesktopGL</KniPlatform>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.SDL2.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n\t<EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:DesktopGL\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Cross Platform Desktop Project (.net8)</Name>\n    <Description>A KNI game project for Windows, Mac and Linux using OpenGL.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <PlatformTag>linux</PlatformTag>\n    <PlatformTag>macos</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>desktop</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43301</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"DesktopGLApplication.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.ico\">Icon.ico</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.bmp\">Icon.bmp</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"app.manifest\">app.manifest</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Application.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>DesktopGL</KniPlatform>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;DESKTOPGL</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>false</Prefer32Bit>\n\t<WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;DESKTOPGL</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>false</Prefer32Bit>\n\t<WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.SDL2.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n\t<EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:DesktopGL\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Cross Platform Desktop Project (.NET Framework)</Name>\n    <Description>A KNI game project for Windows, Mac and Linux using OpenGL.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <PlatformTag>linux</PlatformTag>\n    <PlatformTag>macos</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>desktop</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43300</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"DesktopGLApplication.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.ico\">Icon.ico</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.bmp\">Icon.bmp</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"app.manifest\">app.manifest</ProjectItem>\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid2$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Activity.cs",
    "content": "using Microsoft.Xna.Framework;\nusing Android.App;\nusing Android.Content.PM;\nusing Android.OS;\nusing Android.Views;\n\nnamespace $ext_safeprojectname$\n{\n    [Activity(Label = \"$ext_safeprojectname$\"\n        , MainLauncher = true\n        , Icon = \"@drawable/icon\"\n        , Theme = \"@style/Theme.Splash\"\n        , AlwaysRetainTaskState = true\n        , LaunchMode = LaunchMode.SingleInstance\n        , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize\n        , ScreenOrientation = ScreenOrientation.FullSensor\n    )]\n    public class $ext_safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity\n    {\n        protected override void OnCreate(Bundle bundle)\n        {\n            base.OnCreate(bundle);\n            Game game = new $ext_safeprojectname$Game();\n            SetContentView((View)game.Services.GetService(typeof(View)));\n            game.Run();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"$ext_safeprojectname$.$ext_safeprojectname$\" android:versionCode=\"1\" android:versionName=\"1.0\">\n\t<application android:label=\"$ext_safeprojectname$\"></application>\n\t<uses-permission android:name=\"android.permission.VIBRATE\" />\n\t<uses-permission android:name=\"android.permission.INTERNET\" />\n\t<uses-permission android:name=\"com.android.vending.BILLING\" />\n</manifest>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Application.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-android</TargetFramework>\n    <ProjectGuid>$guid2$</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <IsTrimmable>True</IsTrimmable>\n\t<TrimMode>partial</TrimMode>\n    <RootNamespace>$ext_safeprojectname$</RootNamespace>\n    <AssemblyName>$ext_safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);ANDROID</DefineConstants>\n    <KniPlatform>Android</KniPlatform>\n    <ApplicationId>com.companyname.$ext_safeprojectname$</ApplicationId>\n    <ApplicationVersion>1</ApplicationVersion>\n    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n    <AndroidStoreUncompressedFileExtensions>.m4a</AndroidStoreUncompressedFileExtensions>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Android.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"$ext_safeprojectname$Activity.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"AndroidManifest.xml\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Splash.png\" />\n    <AndroidResource Include=\"Resources\\Values\\Strings.xml\" />\n    <AndroidResource Include=\"Resources\\Values\\Styles.xml\" />\n    <Folder Include=\"Resources\\Layout\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$ext_safeprojectname$Content\\$ext_safeprojectname$Content.mgcb\">\n      <Link>Content\\$ext_safeprojectname$Content.mgcb</Link>\n    </KniContentReference>\n  </ItemGroup>\n  <Import Project=\"..\\$ext_projectname$.Shared\\$ext_projectname$.Shared.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with your package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Android Project (.net8)</Name>\n    <Description>A KNI game project for Android.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <ProjectSubType>\n    </ProjectSubType>\n    <SortOrder>43200</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AndroidManifest.xml\">AndroidManifest.xml</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$ext_safeprojectname$Activity.cs\">Activity.cs</ProjectItem>\n      \n      <Folder Name=\"Assets\" TargetFolderName=\"Assets\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AboutAssets.txt\">AboutAssets.txt</ProjectItem>\n      </Folder>\n      \n      <Folder Name=\"Resources\" TargetFolderName=\"Resources\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AboutResources.txt\">AboutResources.txt</ProjectItem>\n        <Folder Name=\"Drawable\" TargetFolderName=\"Drawable\">\n          <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.png\">Icon.png</ProjectItem>\n          <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Splash.png\">Splash.png</ProjectItem>\n        </Folder>\n        <Folder Name=\"Layout\" TargetFolderName=\"Layout\" />\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Resource.Designer.cs\">Resource.Designer.cs</ProjectItem>\n        <Folder Name=\"Values\" TargetFolderName=\"Values\">\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Strings.xml\">Strings.xml</ProjectItem>\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Styles.xml\">Styles.xml</ProjectItem>\n        </Folder>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (Main.xml),\nan internationalization string table (Strings.xml) and some icons (drawable/Icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    Drawable/\n        Icon.png\n\n    Layout/\n        Main.axml\n\n    Values/\n        Strings.xml\n\nIn order to get the build system to recognize Android resources, the build action should be set \nto \"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called\n\"Resource\" that contains the tokens for each one of the resources included. For example, \nfor the above Resources layout, this is what the Resource class would expose:\n\npublic class Resource {\n    public class Drawable {\n        public const int Icon = 0x123;\n    }\n\n    public class Layout {\n        public const int Main = 0x456;\n    }\n\n    public class String {\n        public const int FirstString = 0xabc;\n        public const int SecondString = 0xbcd;\n    }\n}\n\nYou would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or \nResource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString\nto reference the first string in the dictionary file Values/Strings.xml."
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Resources/Resource.Designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.269\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace $ext_safeprojectname$\n{\n\t\n\t\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020001\n\t\t\tpublic const int Splash = 2130837505;\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int ApplicationName = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Hello = 2130903040;\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int Theme_Splash = 2130968576;\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ApplicationName\">$ext_safeprojectname$</string>\n</resources>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Resources/Values/Styles.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <style name=\"Theme.Splash\" parent=\"android:Theme\">\n    <item name=\"android:windowBackground\">@drawable/splash</item>\n    <item name=\"android:windowNoTitle\">true</item>\n  </style>\n</resources>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/App.razor",
    "content": "﻿<Router AppAssembly=\"@typeof(App).Assembly\">\n    <Found Context=\"routeData\">\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\n        <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\n    </Found>\n    <NotFound>\n        <PageTitle>Not found</PageTitle>\n        <LayoutView Layout=\"@typeof(MainLayout)\">\n            <p role=\"alert\">Sorry, there's nothing at this address.</p>\n        </LayoutView>\n    </NotFound>\n</Router>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Application.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0</TargetFramework>\n    <Nullable>disable</Nullable>\n    <ImplicitUsings>disable</ImplicitUsings>\n    <ProjectGuid>{$guid7$}</ProjectGuid>\n    <RootNamespace>$ext_safeprojectname$</RootNamespace>\n    <AssemblyName>$ext_safeprojectname$</AssemblyName>\n    <DefineConstants>$(DefineConstants);BLAZORGL</DefineConstants>\n\t<KniPlatform>BlazorGL</KniPlatform>\n  </PropertyGroup>\n  \n  <PropertyGroup>\n    <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>\n    <!--<InvariantGlobalization>true</InvariantGlobalization>-->\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Pages\\Index.razor.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Blazor.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.17\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.17\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$ext_safeprojectname$Content\\$ext_safeprojectname$Content.mgcb\">\n      <Link>Content\\$ext_safeprojectname$Content.mgcb</Link>\n    </KniContentReference>\n  </ItemGroup>\n  <Import Project=\"..\\$ext_projectname$.Shared\\$ext_projectname$.Shared.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:BlazorGL\n/config:\n/profile:Reach\n/compress:True\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Directory.Build.props",
    "content": "<Project>\n  \n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Web browser Platform Project (.net8)</Name>\n    <Description>A KNI game project for Blazor webassembly using WebGL.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <ProjectSubType>\n    </ProjectSubType>\n    <SortOrder>43300</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"_Imports.razor\">_Imports.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"App.razor\">App.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"MainLayout.razor\">MainLayout.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"MainLayout.razor.css\">MainLayout.razor.css</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <Folder Name=\"Pages\" TargetFolderName=\"Pages\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Index.razor\">Index.razor</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Index.razor.cs\">Index.razor.cs</ProjectItem>\n      </Folder>\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"launchSettings.json\">launchSettings.json</ProjectItem>\n      </Folder>\n      <Folder Name=\"wwwroot\" TargetFolderName=\"wwwroot\">\n        <Folder Name=\"css\" TargetFolderName=\"css\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"app.css\">app.css</ProjectItem>\n            <Folder Name=\"bootstrap\" TargetFolderName=\"bootstrap\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bootstrap.min.css\">bootstrap.min.css</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bootstrap.min.css.map\">bootstrap.min.css.map</ProjectItem>\n            </Folder>\n        </Folder>\n        <Folder Name=\"js\" TargetFolderName=\"js\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"decode.min.js\">decode.min.js</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"streamProcessor.js\">streamProcessor.js</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"micProcessor.js\">micProcessor.js</ProjectItem>\n        </Folder>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"favicon.ico\">favicon.ico</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"kni.png\">kni.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"index.html\">index.html</ProjectItem>\n      </Folder>\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/MainLayout.razor",
    "content": "﻿@inherits LayoutComponentBase\n\n<div class=\"page\">\n    <main>\n            @Body\n    </main>\n</div>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/MainLayout.razor.css",
    "content": ".page\n{\n    position: relative;\n    display: flex;\n    flex-direction: column;\n}\n\nmain\n{\n    flex: 1;\n}\n\n.sidebar\n{\n    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);\n}\n\n.top-row\n{\n    background-color: #f7f7f7;\n    border-bottom: 1px solid #d6d5d5;\n    justify-content: flex-end;\n    height: 3.5rem;\n    display: flex;\n    align-items: center;\n}\n\n    .top-row ::deep a, .top-row ::deep .btn-link\n    {\n        white-space: nowrap;\n        margin-left: 1.5rem;\n        text-decoration: none;\n    }\n\n    .top-row ::deep a:hover, .top-row ::deep .btn-link:hover\n    {\n        text-decoration: underline;\n    }\n\n    .top-row ::deep a:first-child\n    {\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n\n@media (max-width: 640.98px)\n{\n    .top-row:not(.auth)\n    {\n        display: none;\n    }\n\n    .top-row.auth\n    {\n        justify-content: space-between;\n    }\n\n    .top-row ::deep a, .top-row ::deep .btn-link\n    {\n        margin-left: 0;\n    }\n}\n\n@media (min-width: 641px)\n{\n    .page\n    {\n        flex-direction: row;\n    }\n\n    .sidebar\n    {\n        width: 250px;\n        height: 100vh;\n        position: sticky;\n        top: 0;\n    }\n\n    .top-row\n    {\n        position: sticky;\n        top: 0;\n        z-index: 1;\n    }\n\n    .top-row.auth ::deep a:first-child\n    {\n        flex: 1;\n        text-align: right;\n        width: 0;\n    }\n\n    .top-row, article\n    {\n        padding-left: 2rem !important;\n        padding-right: 1.5rem !important;\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Pages/Index.razor",
    "content": "﻿@page \"/\"\n@page \"/index.html\"\n@inject IJSRuntime JsRuntime\n@using nkast.Wasm.Canvas\n\n<PageTitle>$ext_safeprojectname$</PageTitle>\n\n<div id=\"canvasHolder\" style=\"\n    background: #000;\n    margin:0%;\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n    width:100vw;\n    height:100vh;\n\">\n    <canvas id=\"theCanvas\" style=\"touch-action:none;\"></canvas>\n</div>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Pages/Index.razor.cs",
    "content": "using System;\nusing Microsoft.JSInterop;\nusing Microsoft.Xna.Framework;\n\nnamespace $ext_safeprojectname$.Pages\n{\n    public partial class Index\n    {\n        Game _game;\n\n        protected override void OnAfterRender(bool firstRender)\n        {\n            base.OnAfterRender(firstRender);\n\n            if (firstRender)\n            {\n                JsRuntime.InvokeAsync<object>(\"initRenderJS\", DotNetObjectReference.Create(this));\n            }\n        }\n\n        [JSInvokable]\n        public void TickDotNet()\n        {\n            // init game\n            if (_game == null)\n            {\n                _game = new $ext_safeprojectname$Game();\n                _game.Run();\n            }\n\n            // run gameloop\n            _game.Tick();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Program.cs",
    "content": "using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Components.Web;\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace $ext_safeprojectname$\n{\n    internal class Program\n    {\n        private static async Task Main(string[] args)\n        {\n            var builder = WebAssemblyHostBuilder.CreateDefault(args);\n            builder.RootComponents.Add<App>(\"#app\");\n            builder.RootComponents.Add<HeadOutlet>(\"head::after\");\n            builder.Services.AddScoped(sp => new HttpClient()\n            {\n                BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)\n            });\n            await builder.Build().RunAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:56897\",\n      \"sslPort\": 0\n    }\n  },\n  \"profiles\": {\n    \"$ext_safeprojectname$\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": true,\n      \"launchBrowser\": true,\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\",\n      \"applicationUrl\": \"http://localhost:5259\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/_Imports.razor",
    "content": "﻿@using System.Net.Http\n@using System.Net.Http.Json\n@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNetCore.Components.Routing\n@using Microsoft.AspNetCore.Components.Web\n@using Microsoft.AspNetCore.Components.Web.Virtualization\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\n@using Microsoft.JSInterop\n@using nkast.Wasm.Canvas\n@using $ext_safeprojectname$\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/Content/Content.txt",
    "content": ""
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/css/app.css",
    "content": "﻿\nhtml, body\n{\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n\nh1:focus\n{\n    outline: none;\n}\n\na, .btn-link\n{\n    color: #0077cc;\n}\n\n.btn-primary\n{\n    color: #fff;\n    background-color: #1b6ec2;\n    border-color: #1861ac;\n}\n\n.content\n{\n    padding-top: 1.1rem;\n}\n\n.valid.modified:not([type=checkbox])\n{\n    outline: 1px solid #26b050;\n}\n\n.invalid\n{\n    outline: 1px solid red;\n}\n\n.validation-message\n{\n    color: red;\n}\n\n#blazor-error-ui\n{\n    background: lightyellow;\n    bottom: 0;\n    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);\n    display: none;\n    left: 0;\n    padding: 0.6rem 1.25rem 0.7rem 1.25rem;\n    position: fixed;\n    width: 100%;\n    z-index: 1000;\n}\n\n    #blazor-error-ui .dismiss\n    {\n        cursor: pointer;\n        position: absolute;\n        right: 0.75rem;\n        top: 0.5rem;\n    }\n\n.blazor-error-boundary\n{\n    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;\n    padding: 1rem 1rem 1rem 3.7rem;\n    color: white;\n}\n\n    .blazor-error-boundary::after\n    {\n        content: \"An error has occurred.\"\n    }\n\n#theCanvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n\n    /* Disable text highlighting and magnifying glass on iPhone/webkit */\n    -webkit-user-select: none;\n}\n\n\n#canvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/index.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n    <title>$ext_safeprojectname$</title>\n    <base href=\"./\" />\n    <link href=\"css/bootstrap/bootstrap.min.css\" rel=\"stylesheet\" />\n    <link href=\"css/app.css\" rel=\"stylesheet\" />\n    <link href=\"$ext_safeprojectname$.styles.css\" rel=\"stylesheet\" />\n</head>\n\n<body>\n\n    <div id=\"app\">\n        <div id=\"loading\" style=\"display: table-cell; margin: auto; width:100vw; height:100vh; vertical-align: middle; background: #ffcc10;\">\n            <div style=\"display: block; margin: auto; width: 9em; color: white;font-family: 'Segoe UI', sans-serif;\">\n                <div style=\"text-align: center; font-size: 0.85em;\">Made with<br/><a href=\"https://github.com/kniEngine/kni\"><img src=\"kni.png\" border=\"0\" alt=\"Kni\"></a></div>\n                <div style=\"text-align: center; font-size: 1.8em;\">loading&nbsp;<marquee style=\"width:0.9em; vertical-align: bottom;\">.&nbsp;.&nbsp;.&nbsp;&nbsp;&nbsp;</marquee></div>\n            </div>\n        </div>\n    </div>\n\n    <div id=\"blazor-error-ui\">\n        An unhandled error has occurred.\n        <a href=\"\" class=\"reload\">Reload</a>\n        <a class=\"dismiss\">x</a>\n    </div>\n\n    <script src=\"_framework/blazor.webassembly.js\" autostart=\"false\"></script>\n    <script type=\"module\">\n        import { BrotliDecode } from './js/decode.min.js';\n        window.BrotliDecode = BrotliDecode;\n        // Set this to enable Brotli (.br) decompression on static webServers\n        // that don't support content compression and http://.\n        var enableBrotliDecompression = false;\n        Blazor.start({\n            loadBootResource: function (type, name, defaultUri, integrity)\n            {\n                if (enableBrotliDecompression === true && type !== 'dotnetjs' && location.hostname !== 'localhost')\n                {\n                    return (async function()\n                    {\n                        const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });\n                        if (!response.ok)\n                            throw new Error(response.statusText);\n                        const originalResponseBuffer = await response.arrayBuffer();\n                        const originalResponseArray = new Int8Array(originalResponseBuffer);\n                        const contentType = (type === 'dotnetwasm')\n                                          ? 'application/wasm'\n                                          : 'application/octet-stream';\n                        const decompressedResponseArray = BrotliDecode(originalResponseArray);\n                        return new Response(decompressedResponseArray,\n                                            { headers: { 'content-type': contentType }\n                                   });\n                    })();\n                }\n            }\n        });\n    </script>\n\n    <script src=\"_content/nkast.Wasm.JSInterop/js/JSObject.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XR/js/XR.8.0.11.js\"></script>\n\n    <script>\n        function tickJS()\n        {\n            window.theInstance.invokeMethod('TickDotNet');\n            window.requestAnimationFrame(tickJS);\n        }\n\n        window.initRenderJS = (instance) =>\n        {\n            window.theInstance = instance;\n\n            // set initial canvas size\n            var canvas = document.getElementById('theCanvas');\n            var holder = document.getElementById('canvasHolder');\n            canvas.width = holder.clientWidth;\n            canvas.height = holder.clientHeight;\n            // disable context menu on right click\n            canvas.addEventListener(\"contextmenu\", e => e.preventDefault());\n            \n            // begin game loop\n            window.requestAnimationFrame(tickJS);\n        };\n\n        window.addEventListener(\"keydown\", function(event)\n        {\n            // Prevent Arrows Keys and Spacebar scrolling the outer page\n            // when running inside an iframe. e.g: itch.io embedding.\n            if ([32, 37, 38, 39, 40].indexOf(event.keyCode) > -1)\n                event.preventDefault();\n        });\n        window.addEventListener(\"wheel\", function(event)\n        {\n            // Prevent Mousewheel scrolling the outer page\n            // when running inside an iframe. e.g: itch.io embedding.\n            event.preventDefault();\n        }, { passive: false });\n    </script>\n</body>\n\n</html>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/js/decode.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @typedef {!Object} Options\n * @property {?Int8Array} customDictionary\n */\nlet Options;\n\n/**\n * Private scope / static initializer for decoder.\n *\n * @return {function(!Int8Array, ?Options=):!Int8Array}\n */\nlet makeBrotliDecode = () => {\n/* GENERATED CODE BEGIN */\n  /** @type {!Int32Array} */\n  const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\n  /** @type {!Int32Array} */\n  const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\n  /** @type {!Int32Array} */\n  const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\n  /** @type {!Int16Array} */\n  const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\n  /** @type {!Int16Array} */\n  const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\n  /** @type {!Int16Array} */\n  const CMD_LOOKUP = new Int16Array(2816);\n  {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n  /**\n   * @param {number} i\n   * @return {number}\n   */\n  function log2floor(i) {\n    let /** @type {number} */ result = -1;\n    let /** @type {number} */ step = 16;\n    while (step > 0) {\n      if ((i >>> step) !== 0) {\n        result += step;\n        i = i >>> step;\n      }\n      step = step >> 1;\n    }\n    return result + i;\n  }\n  /**\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @param {number} maxndistbits\n   * @return {number}\n   */\n  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {\n    return 16 + ndirect + 2 * (maxndistbits << npostfix);\n  }\n  /**\n   * @param {number} maxDistance\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @return {number}\n   */\n  function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      throw new Error(\"maxDistance is too small\");\n    }\n    const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    const /** @type {number} */ ndistbits = log2floor(offset) - 1;\n    const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n  }\n  /**\n   * @param {!Int16Array} cmdLookup\n   * @return {void}\n   */\n  function unpackCommandLookupTable(cmdLookup) {\n    const /** @type {!Int16Array} */ insertLengthOffsets = new Int16Array(24);\n    const /** @type {!Int16Array} */ copyLengthOffsets = new Int16Array(24);\n    copyLengthOffsets[0] = 2;\n    for (let /** @type {number} */ i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]));\n      copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]));\n    }\n    for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) {\n      let /** @type {number} */ rangeIdx = cmdCode >>> 6;\n      let /** @type {number} */ distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      const /** @type {number} */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7);\n      const /** @type {number} */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode];\n      const /** @type {number} */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2);\n      const /** @type {number} */ index = cmdCode * 4;\n      cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8));\n      cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = distanceContext;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeWindowBits(s) {\n    const /** @type {number} */ largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 0) {\n      return 16;\n    }\n    let /** @type {number} */ n = readFewBits(s, 3);\n    if (n !== 0) {\n      return 17 + n;\n    }\n    n = readFewBits(s, 3);\n    if (n !== 0) {\n      if (n === 1) {\n        if (largeWindowEnabled === 0) {\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        if (readFewBits(s, 1) === 1) {\n          return -1;\n        }\n        n = readFewBits(s, 6);\n        if (n < 10 || n > 30) {\n          return -1;\n        }\n        return n;\n      } else {\n        return 8 + n;\n      }\n    }\n    return 17;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableEagerOutput(s) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    s.isEager = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableLargeWindow(s) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    s.isLargeWindow = 1;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @return {void}\n   */\n  function attachDictionaryChunk(s, data) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    if (s.cdNumChunks === 0) {\n      s.cdChunks = new Array(16);\n      s.cdChunkOffsets = new Int32Array(16);\n      s.cdBlockBits = -1;\n    }\n    if (s.cdNumChunks === 15) {\n      throw new Error(\"Too many dictionary chunks\");\n    }\n    s.cdChunks[s.cdNumChunks] = data;\n    s.cdNumChunks++;\n    s.cdTotalSize += data.length;\n    s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n  }\n  /**\n   * @param {!State} s\n   * @param {!InputStream} input\n   * @return {void}\n   */\n  function initState(s, input) {\n    if (s.runningState !== 0) {\n      throw new Error(\"State MUST be uninitialized\");\n    }\n    s.blockTrees = new Int32Array(3091);\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    const /** @type {number} */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 120);\n    s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n    s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n    s.input = input;\n    initBitReader(s);\n    s.runningState = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function close(s) {\n    if (s.runningState === 0) {\n      throw new Error(\"State MUST be initialized\");\n    }\n    if (s.runningState === 11) {\n      return;\n    }\n    s.runningState = 11;\n    if (s.input !== null) {\n      s.input = null;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeVarLenUnsignedByte(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) !== 0) {\n      const /** @type {number} */ n = readFewBits(s, 3);\n      if (n === 0) {\n        return 1;\n      } else {\n        return readFewBits(s, n) + (1 << n);\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeMetaBlockLength(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.inputEnd = readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) {\n      return;\n    }\n    const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4;\n    if (sizeNibbles === 7) {\n      s.isMetadata = 1;\n      if (readFewBits(s, 1) !== 0) {\n        throw new Error(\"Corrupted reserved bit\");\n      }\n      const /** @type {number} */ sizeBytes = readFewBits(s, 2);\n      if (sizeBytes === 0) {\n        return;\n      }\n      for (let /** @type {number} */ i = 0; i < sizeBytes; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 8);\n        if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) {\n          throw new Error(\"Exuberant nibble\");\n        }\n        s.metaBlockLength |= bits << (i * 8);\n      }\n    } else {\n      for (let /** @type {number} */ i = 0; i < sizeNibbles; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 4);\n        if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) {\n          throw new Error(\"Exuberant nibble\");\n        }\n        s.metaBlockLength |= bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd === 0) {\n      s.isUncompressed = readFewBits(s, 1);\n    }\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSymbol(tableGroup, tableIdx, s) {\n    let /** @type {number} */ offset = tableGroup[tableIdx];\n    const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset);\n    offset += val & 0xFF;\n    const /** @type {number} */ bits = tableGroup[offset] >> 16;\n    const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= 8) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    const /** @type {number} */ mask = (1 << bits) - 1;\n    offset += (val & mask) >>> 8;\n    s.bitOffset += ((tableGroup[offset] >> 16) + 8);\n    return tableGroup[offset] & 0xFFFF;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readBlockLength(tableGroup, tableIdx, s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s);\n    const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n  }\n  /**\n   * @param {!Int32Array} v\n   * @param {number} index\n   * @return {void}\n   */\n  function moveToFront(v, index) {\n    const /** @type {number} */ value = v[index];\n    for (; index > 0; index--) {\n      v[index] = v[index - 1];\n    }\n    v[0] = value;\n  }\n  /**\n   * @param {!Int8Array} v\n   * @param {number} vLen\n   * @return {void}\n   */\n  function inverseMoveToFrontTransform(v, vLen) {\n    const /** @type {!Int32Array} */ mtf = new Int32Array(256);\n    for (let /** @type {number} */ i = 0; i < 256; i++) {\n      mtf[i] = i;\n    }\n    for (let /** @type {number} */ i = 0; i < vLen; i++) {\n      const /** @type {number} */ index = v[i] & 0xFF;\n      v[i] = mtf[index];\n      if (index !== 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n  /**\n   * @param {!Int32Array} codeLengthCodeLengths\n   * @param {number} numSymbols\n   * @param {!Int32Array} codeLengths\n   * @param {!State} s\n   * @return {void}\n   */\n  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {\n    let /** @type {number} */ symbol = 0;\n    let /** @type {number} */ prevCodeLen = 8;\n    let /** @type {number} */ repeat = 0;\n    let /** @type {number} */ repeatCodeLen = 0;\n    let /** @type {number} */ space = 32768;\n    const /** @type {!Int32Array} */ table = new Int32Array(33);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31;\n      s.bitOffset += table[p] >> 16;\n      const /** @type {number} */ codeLen = table[p] & 0xFFFF;\n      if (codeLen < 16) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen !== 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        const /** @type {number} */ extraBits = codeLen - 14;\n        let /** @type {number} */ newLen = 0;\n        if (codeLen === 16) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen !== newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        const /** @type {number} */ oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat <<= extraBits;\n        }\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        repeat += readFewBits(s, extraBits) + 3;\n        const /** @type {number} */ repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          throw new Error(\"symbol + repeatDelta > numSymbols\");\n        }\n        for (let /** @type {number} */ i = 0; i < repeatDelta; i++) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen !== 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space !== 0) {\n      throw new Error(\"Unused space\");\n    }\n    codeLengths.fill(0, symbol, numSymbols);\n  }\n  /**\n   * @param {!Int32Array} symbols\n   * @param {number} length\n   * @return {void}\n   */\n  function checkDupes(symbols, length) {\n    for (let /** @type {number} */ i = 0; i < length - 1; ++i) {\n      for (let /** @type {number} */ j = i + 1; j < length; ++j) {\n        if (symbols[i] === symbols[j]) {\n          throw new Error(\"Duplicate simple Huffman code symbol\");\n        }\n      }\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ symbols = new Int32Array(4);\n    const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1);\n    const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1;\n    for (let /** @type {number} */ i = 0; i < numSymbols; i++) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ symbol = readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        throw new Error(\"Can't readHuffmanCode\");\n      }\n      symbols[i] = symbol;\n    }\n    checkDupes(symbols, numSymbols);\n    let /** @type {number} */ histogramId = numSymbols;\n    if (numSymbols === 4) {\n      histogramId += readFewBits(s, 1);\n    }\n    switch(histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n      case 4:\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n      case 5:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n      default:\n        break;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} skip\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18);\n    let /** @type {number} */ space = 32;\n    let /** @type {number} */ numCodes = 0;\n    for (let /** @type {number} */ i = skip; i < 18 && space > 0; i++) {\n      const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15;\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v !== 0) {\n        space -= (32 >> v);\n        numCodes++;\n      }\n    }\n    if (space !== 0 && numCodes !== 1) {\n      throw new Error(\"Corrupted Huffman code histogram\");\n    }\n    readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2);\n    if (simpleCodeOrSkip === 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    } else {\n      return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n    }\n  }\n  /**\n   * @param {number} contextMapSize\n   * @param {!Int8Array} contextMap\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeContextMap(contextMapSize, contextMap, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1;\n    if (numTrees === 1) {\n      contextMap.fill(0, 0, contextMapSize);\n      return numTrees;\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ useRleForZeros = readFewBits(s, 1);\n    let /** @type {number} */ maxRunLengthPrefix = 0;\n    if (useRleForZeros !== 0) {\n      maxRunLengthPrefix = readFewBits(s, 4) + 1;\n    }\n    const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix;\n    const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    for (let /** @type {number} */ i = 0; i < contextMapSize; ) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ code = readSymbol(table, tableIdx, s);\n      if (code === 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        let /** @type {number} */ reps = (1 << code) + readFewBits(s, code);\n        while (reps !== 0) {\n          if (i >= contextMapSize) {\n            throw new Error(\"Corrupted context map\");\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = (code - maxRunLengthPrefix);\n        i++;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {\n    const /** @type {!Int32Array} */ ringBuffers = s.rings;\n    const /** @type {number} */ offset = 4 + treeType * 2;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n    if (blockType === 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType === 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeLiteralBlockSwitch(s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    const /** @type {number} */ literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << 6;\n    s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n    const /** @type {number} */ contextMode = s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeCommandBlockSwitch(s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeDistanceBlockSwitch(s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function maybeReallocateRingBuffer(s) {\n    let /** @type {number} */ newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      const /** @type {number} */ minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize >>= 1;\n      }\n      if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37;\n    const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack);\n    if (s.ringBuffer.length !== 0) {\n      newBuffer.set(s.ringBuffer.subarray(0, s.ringBufferSize), 0);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readNextMetablockHeader(s) {\n    if (s.inputEnd !== 0) {\n      s.nextRunningState = 10;\n      s.runningState = 12;\n      return;\n    }\n    s.literalTreeGroup = new Int32Array(0);\n    s.commandTreeGroup = new Int32Array(0);\n    s.distanceTreeGroup = new Int32Array(0);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    decodeMetaBlockLength(s);\n    if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) {\n      return;\n    }\n    if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) {\n      jumpToByteBoundary(s);\n      s.runningState = (s.isMetadata !== 0) ? 5 : 6;\n    } else {\n      s.runningState = 3;\n    }\n    if (s.isMetadata !== 0) {\n      return;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function readMetablockPartition(s, treeType, numBlockTypes) {\n    let /** @type {number} */ offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n    const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2;\n    offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    s.blockTrees[2 * treeType + 1] = offset;\n    const /** @type {number} */ blockLengthAlphabetSize = 26;\n    offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    s.blockTrees[2 * treeType + 2] = offset;\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} alphabetSizeLimit\n   * @return {void}\n   */\n  function calculateDistanceLut(s, alphabetSizeLimit) {\n    const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits;\n    const /** @type {!Int32Array} */ distOffset = s.distOffset;\n    const /** @type {number} */ npostfix = s.distancePostfixBits;\n    const /** @type {number} */ ndirect = s.numDirectDistanceCodes;\n    const /** @type {number} */ postfix = 1 << npostfix;\n    let /** @type {number} */ bits = 1;\n    let /** @type {number} */ half = 0;\n    let /** @type {number} */ i = 16;\n    for (let /** @type {number} */ j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n    while (i < alphabetSizeLimit) {\n      const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      for (let /** @type {number} */ j = 0; j < postfix; ++j) {\n        distExtraBits[i] = bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readMetablockHuffmanCodesAndContextMaps(s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.distancePostfixBits = readFewBits(s, 2);\n    s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n    s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n    for (let /** @type {number} */ i = 0; i < s.numLiteralBlockTypes; ) {\n      const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes);\n      for (; i < limit; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        s.contextModes[i] = readFewBits(s, 2);\n      }\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n    }\n    s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6);\n    const /** @type {number} */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s);\n    s.trivialLiteralContext = 1;\n    for (let /** @type {number} */ j = 0; j < s.numLiteralBlockTypes << 6; j++) {\n      if (s.contextMap[j] !== j >> 6) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n    s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n    const /** @type {number} */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n    s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s);\n    s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s);\n    let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n    let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow === 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n      distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n    }\n    s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s);\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function copyUncompressedData(s) {\n    const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    if (s.metaBlockLength <= 0) {\n      reload(s);\n      s.runningState = 2;\n      return;\n    }\n    const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos === s.ringBufferSize) {\n      s.nextRunningState = 6;\n      s.runningState = 12;\n      return;\n    }\n    reload(s);\n    s.runningState = 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function writeRingBuffer(s) {\n    const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    if (toWrite !== 0) {\n      s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n    if (s.outputUsed < s.outputLength) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @param {!State} s\n   * @return {!Int32Array}\n   */\n  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) {\n    const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    const /** @type {!Int32Array} */ group = new Int32Array(n + n * maxTableSize);\n    let /** @type {number} */ next = n;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      group[i] = next;\n      next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n    }\n    return group;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function calculateFence(s) {\n    let /** @type {number} */ result = s.ringBufferSize;\n    if (s.isEager !== 0) {\n      result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {void}\n   */\n  function doUseDictionary(s, fence) {\n    if (s.distance > 0x7FFFFFFC) {\n      throw new Error(\"Invalid backward reference\");\n    }\n    const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n    if (address < 0) {\n      initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n      s.runningState = 14;\n    } else {\n      const /** @type {!ByteBuffer} */ dictionaryData = data;\n      const /** @type {number} */ wordLength = s.copyLength;\n      if (wordLength > 31) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      const /** @type {number} */ shift = sizeBits[wordLength];\n      if (shift === 0) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      let /** @type {number} */ offset = offsets[wordLength];\n      const /** @type {number} */ mask = (1 << shift) - 1;\n      const /** @type {number} */ wordIdx = address & mask;\n      const /** @type {number} */ transformIdx = address >>> shift;\n      offset += wordIdx * wordLength;\n      const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS;\n      if (transformIdx >= transforms.numTransforms) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);\n      s.pos += len;\n      s.metaBlockLength -= len;\n      if (s.pos >= fence) {\n        s.nextRunningState = 4;\n        s.runningState = 12;\n        return;\n      }\n      s.runningState = 4;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initializeCompoundDictionary(s) {\n    s.cdBlockMap = new Int8Array(256);\n    let /** @type {number} */ blockBits = 8;\n    while (((s.cdTotalSize - 1) >>> blockBits) !== 0) {\n      blockBits++;\n    }\n    blockBits -= 8;\n    s.cdBlockBits = blockBits;\n    let /** @type {number} */ cursor = 0;\n    let /** @type {number} */ index = 0;\n    while (cursor < s.cdTotalSize) {\n      while (s.cdChunkOffsets[index + 1] < cursor) {\n        index++;\n      }\n      s.cdBlockMap[cursor >>> blockBits] = index;\n      cursor += 1 << blockBits;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} address\n   * @param {number} length\n   * @return {void}\n   */\n  function initializeCompoundDictionaryCopy(s, address, length) {\n    if (s.cdBlockBits === -1) {\n      initializeCompoundDictionary(s);\n    }\n    let /** @type {number} */ index = s.cdBlockMap[address >>> s.cdBlockBits];\n    while (address >= s.cdChunkOffsets[index + 1]) {\n      index++;\n    }\n    if (s.cdTotalSize > address + length) {\n      throw new Error(\"Invalid backward reference\");\n    }\n    s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n    s.rings[s.distRbIdx] = s.distance;\n    s.metaBlockLength -= length;\n    s.cdBrIndex = index;\n    s.cdBrOffset = address - s.cdChunkOffsets[index];\n    s.cdBrLength = length;\n    s.cdBrCopied = 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {number}\n   */\n  function copyFromCompoundDictionary(s, fence) {\n    let /** @type {number} */ pos = s.pos;\n    const /** @type {number} */ origPos = pos;\n    while (s.cdBrLength !== s.cdBrCopied) {\n      const /** @type {number} */ space = fence - pos;\n      const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n      const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset;\n      let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied;\n      if (length > remChunkLength) {\n        length = remChunkLength;\n      }\n      if (length > space) {\n        length = space;\n      }\n      s.ringBuffer.set(s.cdChunks[s.cdBrIndex].slice(s.cdBrOffset, s.cdBrOffset + length), pos);\n      pos += length;\n      s.cdBrOffset += length;\n      s.cdBrCopied += length;\n      if (length === remChunkLength) {\n        s.cdBrIndex++;\n        s.cdBrOffset = 0;\n      }\n      if (pos >= fence) {\n        break;\n      }\n    }\n    return pos - origPos;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decompress(s) {\n    if (s.runningState === 0) {\n      throw new Error(\"Can't decompress until initialized\");\n    }\n    if (s.runningState === 11) {\n      throw new Error(\"Can't decompress after close\");\n    }\n    if (s.runningState === 1) {\n      const /** @type {number} */ windowBits = decodeWindowBits(s);\n      if (windowBits === -1) {\n        throw new Error(\"Invalid 'windowBits' code\");\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = 2;\n    }\n    let /** @type {number} */ fence = calculateFence(s);\n    let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1;\n    let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    while (s.runningState !== 10) {\n      switch(s.runningState) {\n        case 2:\n          if (s.metaBlockLength < 0) {\n            throw new Error(\"Invalid metablock length\");\n          }\n          readNextMetablockHeader(s);\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n        case 3:\n          readMetablockHuffmanCodesAndContextMaps(s);\n          s.runningState = 4;\n        case 4:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 2;\n            continue;\n          }\n          if (s.halfOffset > 2030) {\n            doReadMoreInput(s);\n          }\n          if (s.commandBlockLength === 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];\n          const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1];\n          const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF;\n          s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8;\n          s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));\n          s.j = 0;\n          s.runningState = 7;\n        case 7:\n          if (s.trivialLiteralContext !== 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          } else {\n            let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n              const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState !== 7) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 4;\n            continue;\n          }\n          let /** @type {number} */ distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.distanceBlockLength === 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < 16) {\n              const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                throw new Error(\"Negative distance\");\n              }\n            } else {\n              const /** @type {number} */ extraBits = s.distExtraBits[distanceCode];\n              let /** @type {number} */ bits;\n              if (s.bitOffset + extraBits <= 32) {\n                bits = readFewBits(s, extraBits);\n              } else {\n                if (s.bitOffset >= 16) {\n                  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                  s.bitOffset -= 16;\n                }\n                bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits);\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n          if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.distance > s.maxDistance) {\n            s.runningState = 9;\n            continue;\n          }\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n          if (s.copyLength > s.metaBlockLength) {\n            throw new Error(\"Invalid backward reference\");\n          }\n          s.j = 0;\n          s.runningState = 8;\n        case 8:\n          let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask;\n          let /** @type {number} */ dst = s.pos;\n          const /** @type {number} */ copyLength = s.copyLength - s.j;\n          const /** @type {number} */ srcEnd = src + copyLength;\n          const /** @type {number} */ dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              for (let /** @type {number} */ k = 0; k < copyLength; k += 4) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              ringBuffer.copyWithin(dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            for (; s.j < s.copyLength; ) {\n              ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 8;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState === 8) {\n            s.runningState = 4;\n          }\n          continue;\n        case 9:\n          doUseDictionary(s, fence);\n          continue;\n        case 14:\n          s.pos += copyFromCompoundDictionary(s, fence);\n          if (s.pos >= fence) {\n            s.nextRunningState = 14;\n            s.runningState = 12;\n            return;\n          }\n          s.runningState = 4;\n          continue;\n        case 5:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = 2;\n          continue;\n        case 6:\n          copyUncompressedData(s);\n          continue;\n        case 12:\n          s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize);\n          s.runningState = 13;\n        case 13:\n          if (writeRingBuffer(s) === 0) {\n            return;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n            }\n            s.pos &= ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n        default:\n          throw new Error(\"Unexpected state \" + valueOf(s.runningState));\n      }\n    }\n    if (s.runningState === 10) {\n      if (s.metaBlockLength < 0) {\n        throw new Error(\"Invalid metablock length\");\n      }\n      jumpToByteBoundary(s);\n      checkHealth(s, 1);\n    }\n  }\n\n  /**\n   * @constructor\n   * @param {number} numTransforms\n   * @param {number} prefixSuffixLen\n   * @param {number} prefixSuffixCount\n   * @struct\n   */\n  function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {\n    /** @type {number} */\n    this.numTransforms = 0;\n    /** @type {!Int32Array} */\n    this.triplets = new Int32Array(0);\n    /** @type {!Int8Array} */\n    this.prefixSuffixStorage = new Int8Array(0);\n    /** @type {!Int32Array} */\n    this.prefixSuffixHeads = new Int32Array(0);\n    /** @type {!Int16Array} */\n    this.params = new Int16Array(0);\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n\n  /** @type {!Transforms} */\n  const RFC_TRANSFORMS = new Transforms(121, 167, 50);\n  /**\n   * @param {!Int8Array} prefixSuffix\n   * @param {!Int32Array} prefixSuffixHeads\n   * @param {!Int32Array} transforms\n   * @param {string} prefixSuffixSrc\n   * @param {string} transformsSrc\n   * @return {void}\n   */\n  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {\n    const /** @type {number} */ n = prefixSuffixSrc.length;\n    let /** @type {number} */ index = 1;\n    let /** @type {number} */ j = 0;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      const /** @type {number} */ c = prefixSuffixSrc.charCodeAt(i);\n      if (c === 35) {\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = c;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 363; ++i) {\n      transforms[i] = transformsSrc.charCodeAt(i) - 32;\n    }\n  }\n  {\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\xC2\\xA0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n  }\n  /**\n   * @param {!Int8Array} dst\n   * @param {number} dstOffset\n   * @param {!Int8Array} src\n   * @param {number} srcOffset\n   * @param {number} len\n   * @param {!Transforms} transforms\n   * @param {number} transformIndex\n   * @return {number}\n   */\n  function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) {\n    let /** @type {number} */ offset = dstOffset;\n    const /** @type {!Int32Array} */ triplets = transforms.triplets;\n    const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage;\n    const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads;\n    const /** @type {number} */ transformOffset = 3 * transformIndex;\n    const /** @type {number} */ prefixIdx = triplets[transformOffset];\n    const /** @type {number} */ transformType = triplets[transformOffset + 1];\n    const /** @type {number} */ suffixIdx = triplets[transformOffset + 2];\n    let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx];\n    const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx];\n    const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n    let /** @type {number} */ omitFirst = transformType - 11;\n    let /** @type {number} */ omitLast = transformType;\n    if (omitFirst < 1 || omitFirst > 9) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > 9) {\n      omitLast = 0;\n    }\n    while (prefix !== prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    srcOffset += omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    let /** @type {number} */ i = len;\n    while (i > 0) {\n      dst[offset++] = src[srcOffset++];\n      i--;\n    }\n    if (transformType === 10 || transformType === 11) {\n      let /** @type {number} */ uppercaseOffset = offset - len;\n      if (transformType === 10) {\n        len = 1;\n      }\n      while (len > 0) {\n        const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) {\n            dst[uppercaseOffset] ^= 32;\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] ^= 32;\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] ^= 5;\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType === 21 || transformType === 22) {\n      let /** @type {number} */ shiftOffset = offset - len;\n      const /** @type {number} */ param = transforms.params[transformIndex];\n      let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        let /** @type {number} */ step = 1;\n        const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          scalar += c0;\n          dst[shiftOffset] = (scalar & 0x7F);\n        } else if (c0 < 0xC0) {\n        } else if (c0 < 0xE0) {\n          if (len >= 2) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F));\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          if (len >= 3) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F));\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          if (len >= 4) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            const /** @type {number} */ c3 = dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F));\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType === 21) {\n          len = 0;\n        }\n      }\n    }\n    while (suffix !== suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n    return offset - dstOffset;\n  }\n\n  /**\n   * @param {number} key\n   * @param {number} len\n   * @return {number}\n   */\n  function getNextKey(key, len) {\n    let /** @type {number} */ step = 1 << (len - 1);\n    while ((key & step) !== 0) {\n      step >>= 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n  /**\n   * @param {!Int32Array} table\n   * @param {number} offset\n   * @param {number} step\n   * @param {number} end\n   * @param {number} item\n   * @return {void}\n   */\n  function replicateValue(table, offset, step, end, item) {\n    do {\n      end -= step;\n      table[offset + end] = item;\n    } while (end > 0);\n  }\n  /**\n   * @param {!Int32Array} count\n   * @param {number} len\n   * @param {number} rootBits\n   * @return {number}\n   */\n  function nextTableBitSize(count, len, rootBits) {\n    let /** @type {number} */ left = 1 << (len - rootBits);\n    while (len < 15) {\n      left -= count[len];\n      if (left <= 0) {\n        break;\n      }\n      len++;\n      left <<= 1;\n    }\n    return len - rootBits;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {number} rootBits\n   * @param {!Int32Array} codeLengths\n   * @param {number} codeLengthsSize\n   * @return {number}\n   */\n  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {\n    const /** @type {number} */ tableOffset = tableGroup[tableIdx];\n    let /** @type {number} */ key;\n    const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize);\n    const /** @type {!Int32Array} */ count = new Int32Array(16);\n    const /** @type {!Int32Array} */ offset = new Int32Array(16);\n    let /** @type {number} */ symbol;\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      count[codeLengths[symbol]]++;\n    }\n    offset[1] = 0;\n    for (let /** @type {number} */ len = 1; len < 15; len++) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      if (codeLengths[symbol] !== 0) {\n        sorted[offset[codeLengths[symbol]]++] = symbol;\n      }\n    }\n    let /** @type {number} */ tableBits = rootBits;\n    let /** @type {number} */ tableSize = 1 << tableBits;\n    let /** @type {number} */ totalSize = tableSize;\n    if (offset[15] === 1) {\n      for (key = 0; key < totalSize; key++) {\n        tableGroup[tableOffset + key] = sorted[0];\n      }\n      return totalSize;\n    }\n    key = 0;\n    symbol = 0;\n    for (let /** @type {number} */ len = 1, /** @type {number} */ step = 2; len <= rootBits; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    const /** @type {number} */ mask = totalSize - 1;\n    let /** @type {number} */ low = -1;\n    let /** @type {number} */ currentOffset = tableOffset;\n    for (let /** @type {number} */ len = rootBits + 1, /** @type {number} */ step = 2; len <= 15; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        if ((key & mask) !== low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    return totalSize;\n  }\n\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function doReadMoreInput(s) {\n    if (s.endOfStreamReached !== 0) {\n      if (halfAvailable(s) >= -2) {\n        return;\n      }\n      throw new Error(\"No more input\");\n    }\n    const /** @type {number} */ readOffset = s.halfOffset << 1;\n    let /** @type {number} */ bytesInBuffer = 4096 - readOffset;\n    s.byteBuffer.copyWithin(0, readOffset, 4096);\n    s.halfOffset = 0;\n    while (bytesInBuffer < 4096) {\n      const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer;\n      const /** @type {number} */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} endOfStream\n   * @return {void}\n   */\n  function checkHealth(s, endOfStream) {\n    if (s.endOfStreamReached === 0) {\n      return;\n    }\n    const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n    if (byteOffset > s.tailBytes) {\n      throw new Error(\"Read after end\");\n    }\n    if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) {\n      throw new Error(\"Unused bytes after end\");\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readFewBits(s, n) {\n    const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return val;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readManyBits(s, n) {\n    const /** @type {number} */ low = readFewBits(s, 16);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initBitReader(s) {\n    s.byteBuffer = new Int8Array(4160);\n    s.accumulator32 = 0;\n    s.shortBuffer = new Int16Array(2080);\n    s.bitOffset = 32;\n    s.halfOffset = 2048;\n    s.endOfStreamReached = 0;\n    prepare(s);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function prepare(s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    checkHealth(s, 0);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function reload(s) {\n    if (s.bitOffset === 32) {\n      prepare(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function jumpToByteBoundary(s) {\n    const /** @type {number} */ padding = (32 - s.bitOffset) & 7;\n    if (padding !== 0) {\n      const /** @type {number} */ paddingBits = readFewBits(s, padding);\n      if (paddingBits !== 0) {\n        throw new Error(\"Corrupted padding bits\");\n      }\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function halfAvailable(s) {\n    let /** @type {number} */ limit = 2048;\n    if (s.endOfStreamReached !== 0) {\n      limit = (s.tailBytes + 1) >> 1;\n    }\n    return limit - s.halfOffset;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @param {number} offset\n   * @param {number} length\n   * @return {void}\n   */\n  function copyRawBytes(s, data, offset, length) {\n    if ((s.bitOffset & 7) !== 0) {\n      throw new Error(\"Unaligned copyBytes\");\n    }\n    while ((s.bitOffset !== 32) && (length !== 0)) {\n      data[offset++] = (s.accumulator32 >>> s.bitOffset);\n      s.bitOffset += 8;\n      length--;\n    }\n    if (length === 0) {\n      return;\n    }\n    const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), length >> 1);\n    if (copyNibbles > 0) {\n      const /** @type {number} */ readOffset = s.halfOffset << 1;\n      const /** @type {number} */ delta = copyNibbles << 1;\n      data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset);\n      offset += delta;\n      length -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (length === 0) {\n      return;\n    }\n    if (halfAvailable(s) > 0) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      while (length !== 0) {\n        data[offset++] = (s.accumulator32 >>> s.bitOffset);\n        s.bitOffset += 8;\n        length--;\n      }\n      checkHealth(s, 0);\n      return;\n    }\n    while (length > 0) {\n      const /** @type {number} */ len = readInput(s.input, data, offset, length);\n      if (len === -1) {\n        throw new Error(\"Unexpected end of input\");\n      }\n      offset += len;\n      length -= len;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} byteLen\n   * @return {void}\n   */\n  function bytesToNibbles(s, byteLen) {\n    const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer;\n    const /** @type {number} */ halfLen = byteLen >> 1;\n    const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer;\n    for (let /** @type {number} */ i = 0; i < halfLen; ++i) {\n      shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8));\n    }\n  }\n\n  /** @type {!Int32Array} */\n  const LOOKUP = new Int32Array(2048);\n  /**\n   * @param {!Int32Array} lookup\n   * @param {string} map\n   * @param {string} rle\n   * @return {void}\n   */\n  function unpackLookupTable(lookup, map, rle) {\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    for (let /** @type {number} */ i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32);\n    }\n    for (let /** @type {number} */ i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    let /** @type {number} */ offset = 1280;\n    for (let /** @type {number} */ k = 0; k < 19; ++k) {\n      const /** @type {number} */ value = k & 3;\n      const /** @type {number} */ rep = rle.charCodeAt(k) - 32;\n      for (let /** @type {number} */ i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n  {\n    unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\x81 @\");\n  }\n\n  /**\n   * @constructor\n   * @struct\n   */\n  function State() {\n    /** @type {!Int8Array} */\n    this.ringBuffer = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextModes = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distContextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distExtraBits = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.output = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.byteBuffer = new Int8Array(0);\n    /** @type {!Int16Array} */\n    this.shortBuffer = new Int16Array(0);\n    /** @type {!Int32Array} */\n    this.intBuffer = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.rings = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.blockTrees = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.literalTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.commandTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distanceTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distOffset = new Int32Array(0);\n    /** @type {number} */\n    this.accumulator64 = 0;\n    /** @type {number} */\n    this.runningState = 0;\n    /** @type {number} */\n    this.nextRunningState = 0;\n    /** @type {number} */\n    this.accumulator32 = 0;\n    /** @type {number} */\n    this.bitOffset = 0;\n    /** @type {number} */\n    this.halfOffset = 0;\n    /** @type {number} */\n    this.tailBytes = 0;\n    /** @type {number} */\n    this.endOfStreamReached = 0;\n    /** @type {number} */\n    this.metaBlockLength = 0;\n    /** @type {number} */\n    this.inputEnd = 0;\n    /** @type {number} */\n    this.isUncompressed = 0;\n    /** @type {number} */\n    this.isMetadata = 0;\n    /** @type {number} */\n    this.literalBlockLength = 0;\n    /** @type {number} */\n    this.numLiteralBlockTypes = 0;\n    /** @type {number} */\n    this.commandBlockLength = 0;\n    /** @type {number} */\n    this.numCommandBlockTypes = 0;\n    /** @type {number} */\n    this.distanceBlockLength = 0;\n    /** @type {number} */\n    this.numDistanceBlockTypes = 0;\n    /** @type {number} */\n    this.pos = 0;\n    /** @type {number} */\n    this.maxDistance = 0;\n    /** @type {number} */\n    this.distRbIdx = 0;\n    /** @type {number} */\n    this.trivialLiteralContext = 0;\n    /** @type {number} */\n    this.literalTreeIdx = 0;\n    /** @type {number} */\n    this.commandTreeIdx = 0;\n    /** @type {number} */\n    this.j = 0;\n    /** @type {number} */\n    this.insertLength = 0;\n    /** @type {number} */\n    this.contextMapSlice = 0;\n    /** @type {number} */\n    this.distContextMapSlice = 0;\n    /** @type {number} */\n    this.contextLookupOffset1 = 0;\n    /** @type {number} */\n    this.contextLookupOffset2 = 0;\n    /** @type {number} */\n    this.distanceCode = 0;\n    /** @type {number} */\n    this.numDirectDistanceCodes = 0;\n    /** @type {number} */\n    this.distancePostfixBits = 0;\n    /** @type {number} */\n    this.distance = 0;\n    /** @type {number} */\n    this.copyLength = 0;\n    /** @type {number} */\n    this.maxBackwardDistance = 0;\n    /** @type {number} */\n    this.maxRingBufferSize = 0;\n    /** @type {number} */\n    this.ringBufferSize = 0;\n    /** @type {number} */\n    this.expectedTotalSize = 0;\n    /** @type {number} */\n    this.outputOffset = 0;\n    /** @type {number} */\n    this.outputLength = 0;\n    /** @type {number} */\n    this.outputUsed = 0;\n    /** @type {number} */\n    this.ringBufferBytesWritten = 0;\n    /** @type {number} */\n    this.ringBufferBytesReady = 0;\n    /** @type {number} */\n    this.isEager = 0;\n    /** @type {number} */\n    this.isLargeWindow = 0;\n    /** @type {number} */\n    this.cdNumChunks = 0;\n    /** @type {number} */\n    this.cdTotalSize = 0;\n    /** @type {number} */\n    this.cdBrIndex = 0;\n    /** @type {number} */\n    this.cdBrOffset = 0;\n    /** @type {number} */\n    this.cdBrLength = 0;\n    /** @type {number} */\n    this.cdBrCopied = 0;\n    /** @type {!Array<?Int8Array>} */\n    this.cdChunks = new Array(0);\n    /** @type {!Int32Array} */\n    this.cdChunkOffsets = new Int32Array(0);\n    /** @type {number} */\n    this.cdBlockBits = 0;\n    /** @type {!Int8Array} */\n    this.cdBlockMap = new Int8Array(0);\n    /** @type {!InputStream|null} */\n    this.input = null;\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n\n  /** @type {!ByteBuffer} */\n  let data = new Int8Array(0);\n  /** @type {!Int32Array} */\n  const offsets = new Int32Array(32);\n  /** @type {!Int32Array} */\n  const sizeBits = new Int32Array(32);\n  /**\n   * @param {!Int8Array} newData\n   * @param {!Int32Array} newSizeBits\n   * @return {void}\n   */\n  function setData(newData, newSizeBits) {\n    if (newSizeBits.length > 31) {\n      throw new Error(\"sizeBits length must be at most \" + valueOf(31));\n    }\n    for (let /** @type {number} */ i = 0; i < 4; ++i) {\n      if (newSizeBits[i] !== 0) {\n        throw new Error(\"first \" + valueOf(4) + \" must be 0\");\n      }\n    }\n    const /** @type {!Int32Array} */ dictionaryOffsets = offsets;\n    const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits;\n    dictionarySizeBits.set(newSizeBits.subarray(0, newSizeBits.length), 0);\n    let /** @type {number} */ pos = 0;\n    const /** @type {number} */ limit = newData.length;\n    for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) {\n      dictionaryOffsets[i] = pos;\n      const /** @type {number} */ bits = dictionarySizeBits[i];\n      if (bits !== 0) {\n        if (bits >= 31) {\n          throw new Error(\"newSizeBits values must be less than 31\");\n        }\n        pos += i << bits;\n        if (pos <= 0 || pos > limit) {\n          throw new Error(\"newSizeBits is inconsistent: overflow\");\n        }\n      }\n    }\n    for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) {\n      dictionaryOffsets[i] = pos;\n    }\n    if (pos !== limit) {\n      throw new Error(\"newSizeBits is inconsistent: underflow\");\n    }\n    data = newData;\n  }\n\n  /**\n   * @param {!Int8Array} dictionary\n   * @param {string} data0\n   * @param {string} data1\n   * @param {string} skipFlip\n   * @param {!Int32Array} sizeBits\n   * @param {string} sizeBitsData\n   * @return {void}\n   */\n  function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) {\n    const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1);\n    if (dict.length !== dictionary.length) {\n      throw new Error(\"Corrupted brotli dictionary\");\n    }\n    let /** @type {number} */ offset = 0;\n    const /** @type {number} */ n = skipFlip.length;\n    for (let /** @type {number} */ i = 0; i < n; i += 2) {\n      const /** @type {number} */ skip = skipFlip.charCodeAt(i) - 36;\n      const /** @type {number} */ flip = skipFlip.charCodeAt(i + 1) - 36;\n      for (let /** @type {number} */ j = 0; j < skip; ++j) {\n        dict[offset] ^= 3;\n        offset++;\n      }\n      for (let /** @type {number} */ j = 0; j < flip; ++j) {\n        dict[offset] ^= 236;\n        offset++;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) {\n      sizeBits[i] = sizeBitsData.charCodeAt(i) - 65;\n    }\n    dictionary.set(dict);\n  }\n  {\n    const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784);\n    const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25);\n    unpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\x0E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\x0E\\t\\x0E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\x7F\\\"+njmfyk9\\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\x0Bwbmhzbqgaltoavpk965YIbub03s{\\t\\x7F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\x0E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\x7F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\x0E\\t\\n\\nabmdwqjnabwk*x\\x0E\\t33s{\\t~*8hl9\\0effpbg=\\x0Ep9,,#X^8wloosovd+*x\\tx\\x0E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\x0E\\t~\\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\x7F\\x7FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\x0E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\x0E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\x7F\\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\\x0E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\x0E\\t?\\\"pwffo#zlv#k1=\\x0E\\telqn#ifpvp233&#nfmv-\\x0E\\t\\n\\x0E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\x0E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\x7F\\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\x7F\\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\x0Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\x0BBl\\bQ\\x7F\\x0BUm\\x05Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\x0BBM\\x0B|j\\x04BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\x05{X\\bTF\\bVV\\bVK\\t\\x7Fm\\x04kF\\t[]\\bPm\\bTv\\nsI\\x0Bpg\\t[I\\bQp\\x04mx\\x0B_W\\n^M\\npe\\x0BQ}\\x0BGu\\nel\\npe\\x04Ch\\x04BV\\bTA\\tSo\\nzk\\x0BGL\\x0BxD\\nd[\\x05Jz\\x05MY\\bQp\\x04li\\nfl\\npC\\x05{B\\x05Nt\\x0BwT\\ti_\\bTg\\x04QQ\\n|p\\x0BXN\\bQS\\x0BxD\\x04QC\\bWZ\\tpD\\x0BVS\\bTW\\x05Nt\\x04Yh\\nzu\\x04Kj\\x05N}\\twr\\tHa\\n_D\\tj`\\x0BQ}\\x0BWp\\nxZ\\x04{c\\tji\\tBU\\nbD\\x04a|\\tTn\\tpV\\nZd\\nmC\\x0BEV\\x05{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\x0Bxs\\nXW\\twR\\x0Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\x05{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\x04Su\\bTF\\x0B_W\\x0BWs\\x0BsI\\x05m\\x7F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\x04MD\\tBe\\tiD\\x0B@@\\bTl\\bPv\\t}t\\x04Sw\\x04M`\\x0BnU\\tkW\\x0Bed\\nqo\\x0BxY\\tA|\\bTz\\x0By`\\x04BR\\x04BM\\tia\\x04XU\\nyu\\x04n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\x7Fm\\tav\\tBN\\x0Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\x0BWc\\x0Byu\\x04Dl\\x04CJ\\x0BWj\\x0BHR\\t`V\\x0BuW\\tQy\\np@\\x0BGu\\x05pl\\x04Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\x05ui\\x05\\x7FR\\nbI\\twQ\\tBZ\\tWV\\x04BR\\npg\\tcg\\x05ti\\x04CW\\n_y\\tRg\\bQa\\x0BQB\\x0BWc\\nYb\\x05le\\ngE\\x04Su\\nL[\\tQ\\x7F\\tea\\tdj\\x0B]W\\nb~\\x04M`\\twL\\bTV\\bVH\\nt\\x7F\\npl\\t|b\\x05s_\\bU|\\bTa\\x04oQ\\x05lv\\x04Sk\\x04M`\\bTv\\x0BK}\\nfl\\tcC\\x04oQ\\x04BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\x0BHR\\bPv\\x0BLx\\x0BEZ\\bT\\x7F\\bTv\\tiD\\x05oD\\x05MU\\x0BwB\\x04Su\\x05k`\\x04St\\ntC\\tPl\\tKg\\noi\\tjY\\x0BxY\\x04h}\\nzk\\bWZ\\t\\x7Fm\\x0Be`\\tTB\\tfE\\nzk\\t`z\\x04Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\x04Kd\\nfy\\x04Yh\\t[I\\x0BDg\\x04Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\x04oQ\\bTW\\x04Jm\\x0BwB\\tea\\x04Yh\\x04BC\\tsb\\tTn\\nzU\\n_y\\x0BxY\\tQ]\\ngw\\x04mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\x0BRb\\twQ\\n]Q\\x04QJ\\bWg\\x0BWa\\bQj\\ntC\\bVH\\nYm\\x0Bxs\\bVK\\nel\\bWI\\x0BxY\\x04Cq\\ntR\\x0BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\x0Bxs\\x0B_W\\td{\\x0BQ}\\tcg\\tTz\\tA|\\tCj\\x0BLm\\x05N}\\x05m\\x7F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\x0BQ}\\bTf\\x05ka\\x04Jm\\x0B@@\\bV`\\tzp\\n@N\\x04Sw\\tiI\\tcg\\noi\\x04Su\\bVw\\x04lo\\x04Cy\\tc}\\x0Bb\\\\\\tsU\\x04BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\x0BbC\\tNo\\x05Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\x05lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\x7Fm\\nLk\\tkj\\n@N\\x04Sb\\x04KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\x04XO\\bWW\\ndz\\x04li\\tBN\\nd[\\bWO\\x04MD\\x0BKC\\tdj\\tI_\\bVV\\ny\\\\\\x0BLm\\x05xl\\txB\\tkV\\x0Bb\\\\\\x0BJW\\x0BVS\\tVx\\x0BxD\\td{\\x04MD\\bTa\\t|`\\x0BPz\\x04R}\\x0BWs\\x04BM\\nsI\\x04CN\\bTa\\x04Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\x0BWh\\x0BWk\\nxS\\x0BAz\\x0BwX\\nbI\\x04oQ\\tfw\\nqI\\nV|\\nun\\x05z\\x7F\\x0Bpg\\td\\\\\\x0BoA\\x05{D\\ti_\\x05xB\\bT\\x7F\\t`V\\x05qr\\tTT\\x04g]\\x04CA\\x0BuR\\tVJ\\tT`\\npw\\x0BRb\\tI_\\nCx\\x04Ro\\x0BsI\\x04Cj\\x04Kh\\tBv\\tWV\\x04BB\\x05oD\\x05{D\\nhc\\x04Km\\x0B^R\\tQE\\n{I\\np@\\nc|\\x05Gt\\tc}\\x04Dl\\nzU\\x05qN\\tsV\\x05k}\\tHh\\x0B|j\\nqo\\x05u|\\tQ]\\x0Bek\\x05\\x7FZ\\x04M`\\x04St\\npe\\tdj\\bVG\\x0BeE\\t\\x7Fm\\x0BWc\\x04|I\\n[W\\tfL\\bT\\x7F\\tBZ\\x04Su\\x0BKa\\x04Cq\\x05Nt\\x04Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\x04B\\\\\\tQy\\x0BBl\\bWg\\x04XD\\x05kc\\x0Bx[\\bVV\\tQ]\\t\\x7Fa\\tPy\\x0BxD\\nfI\\t}f\\x05oD\\tdj\\tSG\\x05ls\\t~D\\x04CN\\n{Z\\t\\\\v\\n_D\\nhc\\x0Bx_\\x04C[\\tAJ\\nLM\\tVx\\x04CI\\tbj\\tc^\\tcF\\ntC\\x04Sx\\twr\\x04XA\\bU\\\\\\t|a\\x0BK\\\\\\bTV\\bVj\\nd|\\tfs\\x04CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\x7F\\x05Nt\\x0BDg\\tVc\\bTl\\x04d@\\npo\\t\\x7FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\x04l`\\bTx\\bWf\\tHE\\x0BF{\\tcO\\tfD\\nlm\\x0BfZ\\nlm\\x0BeU\\tdG\\x04BH\\bTV\\tSi\\x05MW\\nwX\\nz\\\\\\t\\\\c\\x04CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\x7F\\t`i\\ng@\\x05nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\x0BxY\\x04Kj\\tAJ\\x05uN\\ti[\\npe\\x04Sk\\x0BDg\\x0Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\x04Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\x0B_W\\nLk\\x05Nt\\tyj\\tfM\\x04R\\x7F\\tiI\\bTl\\x0BwX\\tsV\\x0BMl\\nyu\\tAJ\\bVj\\x04KO\\tWV\\x0BA}\\x0BW\\x7F\\nrp\\tiD\\x0B|o\\x05lv\\x0BsI\\x04BM\\td~\\tCU\\bVb\\x04eV\\npC\\x0BwT\\tj`\\tc}\\x0Bxs\\x0Bps\\x0Bvh\\tWV\\x0BGg\\x0BAe\\x0BVK\\x0B]W\\trg\\x0BWc\\x05F`\\tBr\\x0Bb\\\\\\tdZ\\bQp\\nqI\\x04kF\\nLk\\x0BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\x05{A\\x05wj\\twN\\x0B@@\\bTe\\ti_\\n_D\\twL\\nAH\\x0BiK\\x0Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\x05Gt\\x0BVK\\npl\\x04S}\\x0BWP\\t|d\\x04MD\\x0BHV\\bT\\x7F\\x04R}\\x04M`\\bTV\\bVH\\x05lv\\x04Ch\\bW[\\x04Ke\\tR{\\x0B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\x04Ke\\tBe\\x04Oi\\tR{\\td\\\\\\x05nB\\bWZ\\tdZ\\tVJ\\x05Os\\t\\x7Fm\\x04uQ\\x0BhZ\\x04Q@\\x04QQ\\nfI\\bW[\\x04B\\\\\\x04li\\nzU\\nMd\\x04M`\\nxS\\bVV\\n\\\\}\\x0BxD\\t\\x7Fm\\bTp\\x04IS\\nc|\\tkV\\x05i~\\tV{\\x0BhZ\\t|b\\bWt\\n@R\\x0BoA\\x0BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\x04BR\\x0BQB\\x05Nj\\tCP\\t[I\\bTv\\t`W\\x05uN\\x0Bpg\\x0Bpg\\x0BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\x0BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\x04m`\\bTv\\nyd\\nrp\\bWf\\tUX\\x04BV\\nzk\\nd}\\twQ\\t}f\\x04Ce\\x0Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\x7F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\x04Kn\\x0BnU\\tAt\\tpD\\x0B^R\\x0BIr\\x04b[\\tR{\\tdE\\x0BxD\\x0BWK\\x0BWA\\bQL\\bW@\\x04Su\\bUd\\nDM\\tPc\\x04CA\\x04Dl\\x04oQ\\tHs\\x05wi\\x04ub\\n\\x7Fa\\bQp\\x05Ob\\nLP\\bTl\\x04Y[\\x0BK}\\tAJ\\bQ\\x7F\\x04n^\\x0BsA\\bSM\\nqM\\bWZ\\n^W\\x0Bz{\\x04S|\\tfD\\bVK\\bTv\\bPv\\x04BB\\tCP\\x04dF\\tid\\x0Bxs\\x04mx\\x0Bws\\tcC\\ntC\\tyc\\x05M`\\x0BW\\x7F\\nrh\\bQp\\x0BxD\\x04\\\\o\\nsI\\x04_k\\nzu\\x04kF\\tfD\\x04Xs\\x04XO\\tjp\\bTv\\x04BS\\x05{B\\tBr\\nzQ\\nbI\\tc{\\x04BD\\x04BV\\x05nO\\bTF\\tca\\x05Jd\\tfL\\tPV\\tI_\\nlK\\x04`o\\twX\\npa\\tgu\\bP}\\x05{^\\bWf\\n{I\\tBN\\npa\\x04Kl\\x0Bpg\\tcn\\tfL\\x0Bvh\\x04Cq\\bTl\\x0BnU\\bSq\\x04Cm\\twR\\bUJ\\npe\\nyd\\nYg\\x04Cy\\x0BKW\\tfD\\nea\\x04oQ\\tj_\\tBv\\x04nM\\x0BID\\bTa\\nzA\\x05pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\x05{X\\x05kk\\x0BxD\\x04|I\\x05xl\\nfy\\x04Ce\\x0BwB\\nLk\\x0Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\x04Hk\\x04OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\x04Oi\\bSB\\x04XA\\x0BeE\\tjp\\nq}\\tiD\\x05qN\\x0B^R\\t\\x7Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\x0BHV\\bTf\\tTn\\x04\\\\N\\x04\\\\N\\nuB\\x05lv\\nyu\\tTd\\bTf\\bPL\\x0B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\x05ia\\bWZ\\tcF\\x04Jm\\n{Z\\bWO\\x04_k\\x04Df\\x04RR\\td\\\\\\bVV\\x0Bxs\\x04BN\\x05ti\\x04lm\\tTd\\t]y\\x0BHV\\tSo\\x0B|j\\x04XX\\tA|\\x0BZ^\\x0BGu\\bTW\\x05M`\\x04kF\\x0BhZ\\x0BVK\\tdG\\x0BBl\\tay\\nxU\\x05qE\\x05nO\\bVw\\nqI\\x04CX\\ne\\x7F\\tPl\\bWO\\x0BLm\\tdL\\x05uH\\x04Cm\\tdT\\x04fn\\x0BwB\\x05ka\\x0BnU\\n@M\\nyT\\tHv\\t\\\\}\\x04Kh\\td~\\x04Yh\\x05k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\x05MY\\npl\\bQ_\\twr\\x0BAx\\tHE\\bTg\\bSq\\x05vp\\x0Bb\\\\\\bWO\\nOl\\nsI\\nfy\\x0BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\x0Bxv\\x04k_\\bWO\\x0B|j\\x0BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\x05k}\\x04ra\\tUT\\x0BJc\\x0Bed\\np@\\tQN\\nd|\\tkj\\tHk\\x04M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\x04BB\\x04BH\\x04Cm\\npl\\tIQ\\bVK\\x0Bxs\\n`e\\x0BiK\\npa\\x04Oi\\tUS\\bTp\\tfD\\nPG\\x05kk\\x04XA\\nz\\\\\\neg\\x0BWh\\twR\\x05qN\\nqS\\tcn\\x04lo\\nxS\\n^W\\tBU\\nt\\x7F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\x0BVK\\x05ls\\tVJ\\bVV\\x0BeE\\x04\\\\o\\nyX\\nYm\\x04M`\\x05lL\\nd|\\nzk\\tA{\\x05sE\\twQ\\x04XT\\nt\\x7F\\tPl\\t]y\\x0BwT\\x05{p\\x04MD\\x0Bb\\\\\\tQ]\\x04Kj\\tJn\\nAH\\x0BRb\\tBU\\tHK\\t\\\\c\\nfI\\x05m\\x7F\\nqM\\n@R\\tSo\\noi\\x04BT\\tHv\\n_y\\x04Kh\\tBZ\\t]i\\bUJ\\tV{\\x04Sr\\nbI\\x0BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\x04S|\\x0BuW\\tiI\\bWI\\nqI\\x0B|j\\x04BV\\bVg\\bWZ\\x04kF\\x0Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\x0Bps\\nAO\\bTa\\x05xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\x0Bw}\\x0BqO\\ti[\\bQ\\x7F\\bTz\\x0BVF\\twN\\x05ts\\tdw\\bTv\\neS\\ngi\\tNr\\x05yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\x0BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\x04nM\\bWQ\\x0BAx\\nMd\\tBr\\x05ui\\x0BxY\\bSM\\x0BWc\\x0B|j\\x0Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\x0BeU\\x04e^\\bTg\\nqI\\tac\\bPv\\tcF\\x04oQ\\tQ\\x7F\\x0BhZ\\x05ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\x04S|\\x04M`\\n{I\\tS{\\x04_O\\tBZ\\x04Zi\\x04Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\x0BGu\\x05yS\\nqA\\t[r\\neK\\x04M`\\tdZ\\x05lL\\bUg\\bTl\\nbD\\tUS\\x0Bb\\\\\\tpV\\ncc\\x04S\\\\\\tct\\t`z\\bPL\\x0BWs\\nA`\\neg\\bSq\\x05uE\\x04CR\\x0BDg\\t`W\\x0Bz{\\x0BWc\\x04Sk\\x04Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\x0BRb\\bTQ\\npl\\x05Gt\\x0BuW\\x05uj\\npF\\nqI\\tfL\\t[I\\tia\\x04XO\\nyu\\x0BDg\\x0Bed\\tq{\\x04VG\\bQ\\x7F\\x05ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\x04]j\\tkV\\toU\\bTp\\nzU\\x05nB\\x0BB]\\ta{\\bV@\\n]n\\x04m`\\tcz\\tR{\\x04m`\\bQa\\x0BwT\\bSM\\x05MY\\x05qN\\tdj\\x05~s\\x0BQ}\\x05MY\\x0BMB\\tBv\\twR\\bRg\\x0BQ}\\tql\\x0BKC\\nrm\\x05xu\\x04CC\\x0BwB\\x0Bvh\\tBq\\x04Xq\\npV\\ti_\\x05Ob\\x05uE\\nbd\\nqo\\x0B{i\\nC~\\tBL\\x0BeE\\x05uH\\bVj\\x04Ey\\x04Gz\\x0BzR\\x0B{i\\tcf\\n{Z\\n]n\\x04XA\\x0BGu\\x0BnU\\thS\\x0BGI\\nCc\\tHE\\bTA\\tHB\\x04BH\\x04Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\x7F\\tc\\\\\\x0BmO\\x0BWX\\nfH\\np@\\x05MY\\bTF\\nlK\\tBt\\nzU\\tTT\\x04Km\\x0BwT\\npV\\ndt\\x0ByI\\tVx\\tQ\\x7F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\x04nM\\tTn\\ndS\\t]g\\nLc\\x0BwB\\t}t\\t[I\\tCP\\x04kX\\x0BFm\\x0BhZ\\x05m\\x7F\\ti[\\np@\\x0BQ}\\x0BW\\x7F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\x0BRb\\tio\\tPy\\x04Y[\\nxU\\tct\\x0B@@\\tww\\bPv\\x04BM\\x04FF\\ntb\\x05v|\\x0BKm\\tBq\\tBq\\x04Kh\\x04`o\\nZd\\x04XU\\ti]\\t|`\\tSt\\x04B\\\\\\bQ\\x7F\\x0B_W\\tTJ\\nqI\\t|a\\tA{\\x0BuP\\x04MD\\tPl\\nxR\\tfL\\x0Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\x05kc\\nd|\\bVV\\ny\\\\\\x05kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\x0BW\\x7F\\nqs\\x05lv\\bSM\\x04Zi\\x0BVK\\x05ia\\x0BQB\\tQ\\x7F\\n{Z\\bPt\\x0BKl\\nlK\\nhs\\ndS\\bVK\\x05mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\x0BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\x0BeU\\nBf\\tdj\\x05Mr\\n|p\\t\\\\g\\t]r\\bVb\\x05{D\\nd[\\x04XN\\tfM\\tO\\\\\\x05s_\\tcf\\tiZ\\x04XN\\x0BWc\\tqv\\n`m\\tU^\\x05oD\\nd|\\x0BGg\\tdE\\x0Bwf\\x04lo\\x04u}\\nd|\\x05oQ\\t`i\\x04Oi\\x0BxD\\ndZ\\nCx\\x04Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\x0Bps\\ntC\\x0BpP\\x0Bqw\\bPu\\bPX\\tDm\\npw\\x05Nj\\tss\\taG\\x0Bxs\\bPt\\noL\\x04Gz\\tOk\\ti@\\ti]\\x04eC\\tIQ\\tii\\tdj\\x0B@J\\t|d\\x05uh\\bWZ\\x0BeU\\x0BnU\\bTa\\tcC\\x04g]\\nzk\\x04Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\x0BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\x05ln\\t|d\\tbs\\nqI\\x05{B\\x0BAx\\np@\\nzk\\x0BRb\\x05Os\\x0BWS\\x04e^\\x0BD_\\tBv\\x0BWd\\bVb\\x0Bxs\\x0BeE\\bRw\\n]n\\n|p\\x0Bg|\\tfw\\x05kc\\bTI\\x05ka\\n\\\\T\\x04Sp\\tju\\x0Bps\\npe\\x05u|\\x0BGr\\bVe\\tCU\\x04]M\\x04XU\\x0BxD\\bTa\\tIQ\\x0BWq\\tCU\\tam\\tdj\\bSo\\x04Sw\\x0BnU\\x04Ch\\tQ]\\x05s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\x04Yc\\tUZ\\bTx\\npe\\x0BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\x0BxD\\x04BR\\nzQ\\tQN\\x04]M\\x04Yh\\nLP\\x0BFm\\x0BLX\\x05vc\\x0Bql\\x05ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\x04oQ\\t`z\\t[I\\tB`\\x0BRb\\tyj\\tsb\\x0BWs\\bTl\\tkV\\x0Bed\\ne\\x7F\\x05lL\\x0BxN\\t\\x7Fm\\nJn\\tjY\\x0BxD\\bVb\\bSq\\x0Byu\\twL\\x0BXL\\bTA\\tpg\\tAt\\tnD\\x04XX\\twR\\npl\\nhw\\x05yS\\nps\\tcO\\bW[\\x0B|j\\x04XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\x05k`\\x05qN\\tdw\\tWV\\tHE\\x0BEV\\x05Jz\\tid\\tB`\\tzh\\x05E]\\tfD\\bTg\\x05qN\\bTa\\tja\\x04Cv\\bSM\\nhc\\bUe\\x05t_\\tie\\x04g]\\twQ\\nPn\\bVB\\tjw\\bVg\\x0BbE\\tBZ\\x0BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\x0BD]\\tBZ\\ti[\\tfD\\x0BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\x04oQ\\x04lo\\x0BLx\\x0BM@\\bWZ\\x04Kn\\x0Bpg\\nTi\\nIv\\n|r\\x0B@}\\x05Jz\\x05Lm\\x05Wh\\x05k}\\x05ln\\x0BxD\\n]s\\x04gc\\x0Bps\\tBr\\bTW\\x0BBM\\x05tZ\\nBY\\x04DW\\tjf\\x0BSW\\x04C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\x05lv\\x04BC\\nzQ\\t[I\\x0Bgl\\nig\\bUs\\x04BT\\x0BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\x0BID\\x0B|j\\x04KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\fHy\\fIk\\fHU\\fId\\fHy\\fIl\\fHT\\fIk\\fHy\\fHR\\fHy\\fIg\\fHx\\fH\\\\\\fHF\\fH\\\\\\fHD\\fIk\\fHc\\fHy\\fHy\\fHS\\fHA\\fIl\\fHk\\fHT\\fHy\\fH\\\\\\fHH\\fIg\\fHU\\fIg\\fHj\\fHF\\fHU\\fIl\\fHC\\fHU\\fHC\\fHR\\fHH\\fHy\\fHI\\fHRibdqbm\\fHj\\fHp\\fHp\\fIg\\fHi\\fH@\\fHJ\\fIg\\fH{\\fHd\\fHp\\fHR\\fH{\\fHc\\fHU\\fHB\\fHk\\fHD\\fHY\\fHU\\fHC\\fIk\\fHI\\fIk\\fHI\\fIl\\fHt\\fH\\\\\\fHp\\fH@\\fHJ\\fIl\\fHy\\fHd\\fHp\\fIl\\fHY\\fIk\\fHD\\fHd\\fHD\\fHc\\fHU\\fH\\\\\\fHe\\fHT\\fHB\\fIk\\fHy\\fHB\\fHY\\fIg\\fH^\\fIk\\fHT\\fH@\\fHB\\fHd\\fHJ\\fIk\\fH\\x7F\\fH\\\\\\fHj\\fHB\\fH@\\fHT\\fHA\\fH\\\\\\fH@\\fHD\\fHv\\fH^\\fHB\\fHD\\fHj\\fH{\\fHT\\fIl\\fH^\\fIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\x0E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\x0E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\x0E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\x0E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\x0E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\x0E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\x0E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\x7F\\x7F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\x0E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\x0E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\x7F\\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\x0E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\x0E\\t\\x0E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\x0E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\x0E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\x0E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\x0E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\x0E\\t\\x0E\\t\\x0E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\x0E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\x0E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\x0E\\t\\x0E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\x0E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\x0E\\t\\\\slsvsp\\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\x0E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\x0BBl\\bQ\\x7F*+\\x0BUm\\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x01\\0\\x07\\x06\\x05\\x04\\x04\\x05\\x06\\x07\\0\\x01\\x02\\x03\\x0B\\n\\t\\b\\x0F\\x0E\\r\\f\\f\\r\\x0E\\x0F\\b\\t\\n\\x0B\\x13\\x12\\x11\\x10\\x17\\x16\\x15\\x14\\x14\\x15\\x16\\x17\\x10\\x11\\x12\\x13\\x1B\\x1A\\x19\\x18\\x1F\\x1E\\x1D\\x1C\\x1C\\x1D\\x1E\\x1F\\x18\\x19\\x1A\\x1B\\x13\\x13\\x13\\x13\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x13\\x13\\x13\\x13\\x02\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\0\\x03\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x03\\x03\\x02\\x03\\x01\\x03\\0\\x03\\x07\\x03\\x06\\x03\\x05\\x03\\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\x0E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\x0E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\x0E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\x0E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\x0E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\fUh\\fT{\\fTN\\n{I\\np@\\x04Fr\\x0BBl\\bQ\\x7F\\tA{\\x0BUm\\x05Gx\\tA{\\x01yp\\x06YA\\0zX\\bTV\\bWl\\bUd\\x04BM\\x0BB{\\npV\\x0B@x\\x04B\\\\\\np@\\x04Db\\x04Gz\\tal\\npa\\tfM\\tuD\\bV~\\x04mx\\x0BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\x05oD\\tkV\\x0Bed\\x0BHR\\nb~\\x04M`\\nJp\\x05oD\\x04|Q\\nLP\\x04Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\x05F`\\x04Cm\\x0BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\x7F\\nZd\\x04XU\\x04li\\tfr\\ti@\\tBH\\x04BD\\x04BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\x0Bxs\\x04Zf\\nqI\\x04Zf\\x0BBM\\x0B|j\\t}t\\bSM\\nmC\\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\fHB\\fIk\\fHn\\fH^\\fHS\\fHc\\fHU\\fId\\fHn\\fH{\\fHC\\fHR\\fHT\\fHR\\fHI\\fHc\\fHY\\fHn\\fH\\\\\\fHU\\fIk\\fHy\\fIg\\fHd\\fHy\\fIm\\fHw\\fH\\\\\\fHU\\fHR\\fH@\\fHR\\fHJ\\fHy\\fHU\\fHR\\fHT\\fHA\\fIl\\fHU\\fIm\\fHc\\fH\\\\\\fHU\\fIl\\fHB\\fId\\fHn\\fHJ\\fHS\\fHD\\fH@\\fHR\\fHHgjsolgl`p\\fHT\\fHB\\fHC\\fH\\\\\\fIn\\fHF\\fHD\\fHR\\fHB\\fHF\\fHH\\fHR\\fHG\\fHS\\fH\\\\\\fHx\\fHT\\fHH\\fHH\\fH\\\\\\fHU\\fH^\\fIg\\fH{\\fHU\\fIm\\fHj\\fH@\\fHR\\fH\\\\\\fHJ\\fIk\\fHZ\\fHU\\fIm\\fHd\\fHz\\fIk\\fH^\\fHC\\fHJ\\fHS\\fHy\\fHR\\fHB\\fHY\\fIk\\fH@\\fHH\\fIl\\fHD\\fH@\\fIl\\fHv\\fHB\\fI`\\fHH\\fHT\\fHR\\fH^\\fH^\\fIk\\fHz\\fHp\\fIe\\fH@\\fHB\\fHJ\\fHJ\\fHH\\fHI\\fHR\\fHD\\fHU\\fIl\\fHZ\\fHU\\fH\\\\\\fHi\\fH^\\fH{\\fHy\\fHA\\fIl\\fHD\\fH{\\fH\\\\\\fHF\\fHR\\fHT\\fH\\\\\\fHR\\fHH\\fHy\\fHS\\fHc\\fHe\\fHT\\fIk\\fH{\\fHC\\fIl\\fHU\\fIn\\fHm\\fHj\\fH{\\fIk\\fHs\\fIl\\fHB\\fHz\\fIg\\fHp\\fHy\\fHR\\fH\\\\\\fHi\\fHA\\fIl\\fH{\\fHC\\fIk\\fHH\\fIm\\fHB\\fHY\\fIg\\fHs\\fHJ\\fIk\\fHn\\fHi\\fH{\\fH\\\\\\fH|\\fHT\\fIk\\fHB\\fIk\\fH^\\fH^\\fH{\\fHR\\fHU\\fHR\\fH^\\fHf\\fHF\\fH\\\\\\fHv\\fHR\\fH\\\\\\fH|\\fHT\\fHR\\fHJ\\fIk\\fH\\\\\\fHp\\fHS\\fHT\\fHJ\\fHS\\fH^\\fH@\\fHn\\fHJ\\fH@\\fHD\\fHR\\fHU\\fIn\\fHn\\fH^\\fHR\\fHz\\fHp\\fIl\\fHH\\fH@\\fHs\\fHD\\fHB\\fHS\\fH^\\fHk\\fHT\\fIk\\fHj\\fHD\\fIk\\fHD\\fHC\\fHR\\fHy\\fIm\\fH^\\fH^\\fIe\\fH{\\fHA\\fHR\\fH{\\fH\\\\\\fIk\\fH^\\fHp\\fH{\\fHU\\fH\\\\\\fHR\\fHB\\fH^\\fH{\\fIk\\fHF\\fIk\\fHp\\fHU\\fHR\\fHI\\fHk\\fHT\\fIl\\fHT\\fHU\\fIl\\fHy\\fH^\\fHR\\fHL\\fIl\\fHy\\fHU\\fHR\\fHm\\fHJ\\fIn\\fH\\\\\\fHH\\fHU\\fHH\\fHT\\fHR\\fHH\\fHC\\fHR\\fHJ\\fHj\\fHC\\fHR\\fHF\\fHR\\fHy\\fHy\\fI`\\fHD\\fHZ\\fHR\\fHB\\fHJ\\fIk\\fHz\\fHC\\fHU\\fIl\\fH\\\\\\fHR\\fHC\\fHz\\fIm\\fHJ\\fH^\\fH{\\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\x0E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\x0E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\x0E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\x0E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\x0E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\x0E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\x0E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\x7Fwkvna\\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\x0E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\x0E\\t?kfbg=\\x0E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\x0E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\x0E\\t?,kfbg=\\x0E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\x0E\\t\\n?,gju=\\x0E\\t\\x0E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\x0E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\x0E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\x0E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\x0E\\t?kfbg=\\x0E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\x0E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\x05Gx\\bTA\\nzk\\x0BBl\\bQ\\x7F\\bTA\\nzk\\x0BUm\\bQ\\x7F\\bTA\\nzk\\npe\\x05u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\x05tS\\x05k`\\t[X\\t[X\\x0BHR\\bPv\\bTW\\bUe\\n\\x7Fa\\bQp\\x0B_W\\x0BWs\\nxS\\x0BAz\\n_y\\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\fHD\\fHU\\fIl\\fHn\\fHy\\fH\\\\\\fHD\\fIk\\fHi\\fHF\\fHD\\fIk\\fHy\\fHS\\fHC\\fHR\\fHy\\fH\\\\\\fIk\\fHn\\fHi\\fHD\\fIa\\fHC\\fHy\\fIa\\fHC\\fHR\\fH{\\fHR\\fHk\\fHM\\fH@\\fHR\\fH\\\\\\fIk\\fHy\\fHS\\fHT\\fIl\\fHJ\\fHS\\fHC\\fHR\\fHF\\fHU\\fH^\\fIk\\fHT\\fHS\\fHn\\fHU\\fHA\\fHR\\fH\\\\\\fHH\\fHi\\fHF\\fHD\\fIl\\fHY\\fHR\\fH^\\fIk\\fHT\\fIk\\fHY\\fHR\\fHy\\fH\\\\\\fHH\\fIk\\fHB\\fIk\\fH\\\\\\fIk\\fHU\\fIg\\fHD\\fIk\\fHT\\fHy\\fHH\\fIk\\fH@\\fHU\\fIm\\fHH\\fHT\\fHR\\fHk\\fHs\\fHU\\fIg\\fH{\\fHR\\fHp\\fHR\\fHD\\fIk\\fHB\\fHS\\fHD\\fHs\\fHy\\fH\\\\\\fHH\\fHR\\fHy\\fH\\\\\\fHD\\fHR\\fHe\\fHD\\fHy\\fIk\\fHC\\fHU\\fHR\\fHm\\fHT\\fH@\\fHT\\fIk\\fHA\\fHR\\fH[\\fHR\\fHj\\fHF\\fHy\\fIk\\fH^\\fHS\\fHC\\fIk\\fHZ\\fIm\\fH\\\\\\fIn\\fHk\\fHT\\fHy\\fIk\\fHt\\fHn\\fHs\\fIk\\fHB\\fIk\\fH\\\\\\fIl\\fHT\\fHy\\fHH\\fHR\\fHB\\fIk\\fH\\\\\\fHR\\fH^\\fIk\\fHy\\fH\\\\\\fHi\\fHK\\fHS\\fHy\\fHi\\fHF\\fHD\\fHR\\fHT\\fHB\\fHR\\fHp\\fHB\\fIm\\fHq\\fIk\\fHy\\fHR\\fH\\\\\\fHO\\fHU\\fIg\\fHH\\fHR\\fHy\\fHM\\fHP\\fIl\\fHC\\fHU\\fHR\\fHn\\fHU\\fIg\\fHs\\fH^\\fHZ\\fH@\\fIa\\fHJ\\fH^\\fHS\\fHC\\fHR\\fHp\\fIl\\fHY\\fHD\\fHp\\fHR\\fHH\\fHR\\fHy\\fId\\fHT\\fIk\\fHj\\fHF\\fHy\\fHR\\fHY\\fHR\\fH^\\fIl\\fHJ\\fIk\\fHD\\fIk\\fHF\\fIn\\fH\\\\\\fIl\\fHF\\fHR\\fHD\\fIl\\fHe\\fHT\\fHy\\fIk\\fHU\\fIg\\fH{\\fIl\\fH@\\fId\\fHL\\fHy\\fHj\\fHF\\fHy\\fIl\\fHY\\fH\\\\\\fIa\\fH[\\fH{\\fHR\\fHn\\fHY\\fHj\\fHF\\fHy\\fIg\\fHp\\fHS\\fH^\\fHR\\fHp\\fHR\\fHD\\fHR\\fHT\\fHU\\fHB\\fHH\\fHU\\fHB\\fIk\\fHn\\fHe\\fHD\\fHy\\fIl\\fHC\\fHR\\fHU\\fIn\\fHJ\\fH\\\\\\fIa\\fHp\\fHT\\fIn\\fHv\\fIl\\fHF\\fHT\\fHn\\fHJ\\fHT\\fHY\\fHR\\fH^\\fHU\\fIg\\fHD\\fHR\\fHU\\fIg\\fHH\\fIl\\fHp\\fId\\fHT\\fIk\\fHY\\fHR\\fHF\\fHT\\fHp\\fHD\\fHH\\fHR\\fHD\\fIk\\fHH\\fHR\\fHp\\fHR\\fH\\\\\\fIl\\fHt\\fHR\\fHC\\fH^\\fHp\\fHS\\fH^\\fIk\\fHD\\fIl\\fHv\\fIk\\fHp\\fHR\\fHn\\fHv\\fHF\\fHH\\fIa\\fH\\\\\\fH{\\fIn\\fH{\\fH^\\fHp\\fHR\\fHH\\fIk\\fH@\\fHR\\fHU\\fH\\\\\\fHj\\fHF\\fHD\\fIk\\fHY\\fHR\\fHU\\fHD\\fHk\\fHT\\fHy\\fHR\\fHT\\fIm\\fH@\\fHU\\fH\\\\\\fHU\\fHD\\fIk\\fHk\\fHT\\fHT\\fIk\\fHT\\fHU\\fHS\\fHH\\fH@\\fHM\\fHP\\fIk\\fHt\\fHs\\fHD\\fHR\\fHH\\fH^\\fHR\\fHZ\\fHF\\fHR\\fHn\\fHv\\fHZ\\fIa\\fH\\\\\\fIl\\fH@\\fHM\\fHP\\fIl\\fHU\\fIg\\fHH\\fIk\\fHT\\fHR\\fHd\\fHs\\fHZ\\fHR\\fHC\\fHJ\\fHT\\fHy\\fHH\\fIl\\fHp\\fHR\\fHH\\fIl\\fHY\\fHR\\fH^\\fHR\\fHU\\fHp\\fHR\\fH\\\\\\fHF\\fHs\\fHD\\fHR\\fH\\\\\\fHz\\fHD\\fIk\\fHT\\fHM\\fHP\\fHy\\fHB\\fHS\\fH^\\fHR\\fHe\\fHT\\fHy\\fIl\\fHy\\fIk\\fHY\\fH^\\fH^\\fH{\\fHH\\fHR\\fHz\\fHR\\fHD\\fHR\\fHi\\fH\\\\\\fIa\\fHI\\fHp\\fHU\\fHR\\fHn\\fHJ\\fIk\\fHz\\fHR\\fHF\\fHU\\fH^\\fIl\\fHD\\fHS\\fHC\\fHB\\fH@\\fHS\\fHD\\fHR\\fH@\\fId\\fHn\\fHy\\fHy\\fHU\\fIl\\fHn\\fHy\\fHU\\fHD\\fHR\\fHJ\\fIk\\fHH\\fHR\\fHU\\fHB\\fH^\\fIk\\fHy\\fHR\\fHG\\fIl\\fHp\\fH@\\fHy\\fHS\\fHH\\fIm\\fH\\\\\\fHH\\fHB\\fHR\\fHn\\fH{\\fHY\\fHU\\fIl\\fHn\\fH\\\\\\fIg\\fHp\\fHP\\fHB\\fHS\\fH^\\fIl\\fHj\\fH\\\\\\fIg\\fHF\\fHT\\fIk\\fHD\\fHR\\fHC\\fHR\\fHJ\\fHY\\fH^\\fIk\\fHD\\fIk\\fHz\\fHR\\fHH\\fHR\\fHy\\fH\\\\\\fIl\\fH@\\fHe\\fHD\\fHy\\fHR\\fHp\\fHY\\fHR\\fH@\\fHF\\fIn\\fH\\\\\\fHR\\fH@\\fHM\\fHP\\fHR\\fHT\\fI`\\fHJ\\fHR\\fHZ\\fIk\\fHC\\fH\\\\\\fHy\\fHS\\fHC\\fIk\\fHy\\fHU\\fHR\\fHn\\fHi\\fHy\\fHT\\fH\\\\\\fH@\\fHD\\fHR\\fHc\\fHY\\fHU\\fHR\\fHn\\fHT\\fIa\\fHI\\fH^\\fHB\\fHS\\fH^\\fIk\\fH^\\fIk\\fHz\\fHy\\fHY\\fHS\\fH[\\fHC\\fHy\\fIa\\fH\\\\\\fHn\\fHT\\fHB\\fIn\\fHU\\fHI\\fHR\\fHD\\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\x0E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\x0E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\x0E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\x0E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\x0E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\x0E\\t?,p`qjsw=\\x0E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\x0E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\x0E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\x0E\\t\\x0E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\x7F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\x7F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\x0E\\t?,p`qjsw=\\x0E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\x0E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\x0E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\x0BBl\\bQ\\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\fHe\\fHF\\fHC\\fIg\\fH{\\fHF\\fIn\\fH\\\\\\fIa\\fHY\\fHU\\fHB\\fHR\\fH\\\\\\fIk\\fH^\\fIg\\fH{\\fIg\\fHn\\fHv\\fIm\\fHD\\fHR\\fHY\\fH^\\fIk\\fHy\\fHS\\fHD\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fHF\\fIm\\fH^\\fHS\\fHT\\fHz\\fIg\\fHp\\fIk\\fHn\\fHv\\fHR\\fHU\\fHS\\fHc\\fHA\\fIk\\fHp\\fIk\\fHn\\fHZ\\fHR\\fHB\\fHS\\fH^\\fHU\\fHB\\fHR\\fH\\\\\\fIl\\fHp\\fHR\\fH{\\fH\\\\\\fHO\\fH@\\fHD\\fHR\\fHD\\fIk\\fHy\\fIm\\fHB\\fHR\\fH\\\\\\fH@\\fIa\\fH^\\fIe\\fH{\\fHB\\fHR\\fH^\\fHS\\fHy\\fHB\\fHU\\fHS\\fH^\\fHR\\fHF\\fIo\\fH[\\fIa\\fHL\\fH@\\fHN\\fHP\\fHH\\fIk\\fHA\\fHR\\fHp\\fHF\\fHR\\fHy\\fIa\\fH^\\fHS\\fHy\\fHs\\fIa\\fH\\\\\\fIk\\fHD\\fHz\\fHS\\fH^\\fHR\\fHG\\fHJ\\fI`\\fH\\\\\\fHR\\fHD\\fHB\\fHR\\fHB\\fH^\\fIk\\fHB\\fHH\\fHJ\\fHR\\fHD\\fH@\\fHR\\fHp\\fHR\\fH\\\\\\fHY\\fHS\\fHy\\fHR\\fHT\\fHy\\fIa\\fHC\\fIg\\fHn\\fHv\\fHR\\fHU\\fHH\\fIk\\fHF\\fHU\\fIm\\fHm\\fHv\\fH@\\fHH\\fHR\\fHC\\fHR\\fHT\\fHn\\fHY\\fHR\\fHJ\\fHJ\\fIk\\fHz\\fHD\\fIk\\fHF\\fHS\\fHw\\fH^\\fIk\\fHY\\fHS\\fHZ\\fIk\\fH[\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHe\\fHH\\fIa\\fHH\\fH\\\\\\fHB\\fIm\\fHn\\fH@\\fHd\\fHJ\\fIg\\fHD\\fIg\\fHn\\fHe\\fHF\\fHy\\fH\\\\\\fHO\\fHF\\fHN\\fHP\\fIk\\fHn\\fHT\\fIa\\fHI\\fHS\\fHH\\fHG\\fHS\\fH^\\fIa\\fHB\\fHB\\fIm\\fHz\\fIa\\fHC\\fHi\\fHv\\fIa\\fHw\\fHR\\fHw\\fIn\\fHs\\fHH\\fIl\\fHT\\fHn\\fH{\\fIl\\fHH\\fHp\\fHR\\fHc\\fH{\\fHR\\fHY\\fHS\\fHA\\fHR\\fH{\\fHt\\fHO\\fIa\\fHs\\fIk\\fHJ\\fIn\\fHT\\fH\\\\\\fIk\\fHJ\\fHS\\fHD\\fIg\\fHn\\fHU\\fHH\\fIa\\fHC\\fHR\\fHT\\fIk\\fHy\\fIa\\fHT\\fH{\\fHR\\fHn\\fHK\\fIl\\fHY\\fHS\\fHZ\\fIa\\fHY\\fH\\\\\\fHR\\fHH\\fIk\\fHn\\fHJ\\fId\\fHs\\fIa\\fHT\\fHD\\fHy\\fIa\\fHZ\\fHR\\fHT\\fHR\\fHB\\fHD\\fIk\\fHi\\fHJ\\fHR\\fH^\\fHH\\fH@\\fHS\\fHp\\fH^\\fIl\\fHF\\fIm\\fH\\\\\\fIn\\fH[\\fHU\\fHS\\fHn\\fHJ\\fIl\\fHB\\fHS\\fHH\\fIa\\fH\\\\\\fHy\\fHY\\fHS\\fHH\\fHR\\fH\\\\\\fIm\\fHF\\fHC\\fIk\\fHT\\fIa\\fHI\\fHR\\fHD\\fHy\\fH\\\\\\fIg\\fHM\\fHP\\fHB\\fIm\\fHy\\fIa\\fHH\\fHC\\fIg\\fHp\\fHD\\fHR\\fHy\\fIo\\fHF\\fHC\\fHR\\fHF\\fIg\\fHT\\fIa\\fHs\\fHt\\fH\\\\\\fIk\\fH^\\fIn\\fHy\\fHR\\fH\\\\\\fIa\\fHC\\fHY\\fHS\\fHv\\fHR\\fH\\\\\\fHT\\fIn\\fHv\\fHD\\fHR\\fHB\\fIn\\fH^\\fIa\\fHC\\fHJ\\fIk\\fHz\\fIk\\fHn\\fHU\\fHB\\fIk\\fHZ\\fHR\\fHT\\fIa\\fHy\\fIn\\fH^\\fHB\\fId\\fHn\\fHD\\fIk\\fHH\\fId\\fHC\\fHR\\fH\\\\\\fHp\\fHS\\fHT\\fHy\\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\x0E\\t?,p`qjsw=\\x0E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\x7Fwkvna\\x7Fofew\\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\x0E\\t?-ip!=?,p`qjsw=\\x0E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\x7Fqjdkw\\x7Fwkvna\\x7F-ip!=?,p`qjsw=\\x0E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\x0E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\x0E\\t?,gju=\\x0E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\x0E\\t?,kwno=\\x0E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\x7Fwkvna\\x7Fqjdkw\\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\x0E\\t?,kwno=\\x0E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\x0E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\fHJ\\fIa\\fHY\\fHR\\fH\\\\\\fHR\\fHB\\fId\\fHD\\fIm\\fHi\\fH^\\fHF\\fIa\\fH\\\\\\fHJ\\fHR\\fHD\\fHA\\fHR\\fH\\\\\\fHH\\fIl\\fHC\\fHi\\fHD\\fIm\\fHJ\\fIk\\fHZ\\fHU\\fHS\\fHD\\fIa\\fHJ\\fIl\\fHk\\fHn\\fHM\\fHS\\fHC\\fHR\\fHJ\\fHS\\fH^\\fIa\\fH^\\fIl\\fHi\\fHK\\fHS\\fHy\\fHR\\fH\\\\\\fHY\\fIl\\fHM\\fHS\\fHC\\fIg\\fHv\\fHS\\fHs\\fIa\\fHL\\fIk\\fHT\\fHB\\fHR\\fHv\\fHR\\fH\\\\\\fHp\\fHn\\fHy\\fIa\\fHZ\\fHD\\fHJ\\fIm\\fHD\\fHS\\fHC\\fHR\\fHF\\fIa\\fH\\\\\\fHC\\fIg\\fH{\\fHi\\fHD\\fIm\\fHT\\fHR\\fH\\\\\\fH}\\fHD\\fH^\\fHR\\fHk\\fHD\\fHF\\fHR\\fH\\\\\\fIa\\fHs\\fIl\\fHZ\\fH\\\\\\fIa\\fHH\\fIg\\fHn\\fH^\\fIg\\fHy\\fHT\\fHA\\fHR\\fHG\\fHP\\fIa\\fH^\\fId\\fHZ\\fHZ\\fH\\\\\\fIa\\fHH\\fIk\\fHn\\fHF\\fIa\\fH\\\\\\fHJ\\fIk\\fHZ\\fHF\\fIa\\fH^\\fIk\\fHC\\fH\\\\\\fHy\\fIk\\fHn\\fHJ\\fIa\\fH\\\\\\fHT\\fIa\\fHI\\fHS\\fHH\\fHS\\fHe\\fHH\\fIa\\fHF\\fHR\\fHJ\\fHe\\fHD\\fIa\\fHU\\fIk\\fHn\\fHv\\fHS\\fHs\\fIa\\fHL\\fHR\\fHC\\fHR\\fHH\\fIa\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHR\\fHJ\\fHR\\fHF\\fIm\\fH\\\\\\fHR\\fHD\\fIk\\fHp\\fIg\\fHM\\fHP\\fIk\\fHn\\fHi\\fHD\\fIm\\fHY\\fHR\\fHJ\\fHZ\\fIa\\fH\\\\\\fIk\\fHO\\fIl\\fHZ\\fHS\\fHy\\fIa\\fH[\\fHR\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH{\\fIa\\fH\\\\\\fHU\\fHF\\fH\\\\\\fHS\\fHO\\fHR\\fHB\\fH@\\fIa\\fH\\\\\\fHR\\fHn\\fHM\\fH@\\fHv\\fIa\\fHv\\fIg\\fHn\\fHe\\fHF\\fH^\\fH@\\fIa\\fHK\\fHB\\fHn\\fHH\\fIa\\fH\\\\\\fIl\\fHT\\fHn\\fHF\\fH\\\\\\fIa\\fHy\\fHe\\fHB\\fIa\\fHB\\fIl\\fHJ\\fHB\\fHR\\fHK\\fIa\\fHC\\fHB\\fHT\\fHU\\fHR\\fHC\\fHH\\fHR\\fHZ\\fH@\\fIa\\fHJ\\fIg\\fHn\\fHB\\fIl\\fHM\\fHS\\fHC\\fHR\\fHj\\fHd\\fHF\\fIl\\fHc\\fH^\\fHB\\fIg\\fH@\\fHR\\fHk\\fH^\\fHT\\fHn\\fHz\\fIa\\fHC\\fHR\\fHj\\fHF\\fH\\\\\\fIk\\fHZ\\fHD\\fHi\\fHD\\fIm\\fH@\\fHn\\fHK\\fH@\\fHR\\fHp\\fHP\\fHR\\fH\\\\\\fHD\\fHY\\fIl\\fHD\\fHH\\fHB\\fHF\\fIa\\fH\\\\\\fHB\\fIm\\fHz\\fHF\\fIa\\fH\\\\\\fHZ\\fIa\\fHD\\fHF\\fH\\\\\\fHS\\fHY\\fHR\\fH\\\\\\fHD\\fIm\\fHy\\fHT\\fHR\\fHD\\fHT\\fHB\\fH\\\\\\fIa\\fHI\\fHD\\fHj\\fHC\\fIg\\fHp\\fHS\\fHH\\fHT\\fIg\\fHB\\fHY\\fHR\\fH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\x0E\\t?,algz=\\x0E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\x0E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\x0E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\x0E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\x0E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\x0E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\x0E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\fTL\\fT^\\fTE\\fT^\\fUh\\fT{\\fTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\x05Gx\\bTA\\nzk#+\\x0BUm\\x05Gx*\\fHD\\fHS\\fH\\\\\\fIa\\fHJ\\fIk\\fHZ\\fHM\\fHR\\fHe\\fHD\\fH^\\fIg\\fHM\\fHy\\fIa\\fH[\\fIk\\fHH\\fIa\\fH\\\\\\fHp\\fHR\\fHD\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH@\\fHn\\fHK\\fHS\\fHH\\fHT\\fIa\\fHI\\fHR\\fHF\\fHD\\fHR\\fHT\\fIa\\fHY\\fIl\\fHy\\fHR\\fH\\\\\\fHT\\fHn\\fHT\\fIa\\fHy\\fH\\\\\\fHO\\fHT\\fHR\\fHB\\fH{\\fIa\\fH\\\\\\fIl\\fHv\\fHS\\fHs\\fIa\\fHL\\fIg\\fHn\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHD\\fHi\\fHB\\fIk\\fH\\\\\\fHS\\fHy\\fHR\\fHY\\fHS\\fHA\\fHS\\fHD\\fIa\\fHD\\fH{\\fHR\\fHM\\fHS\\fHC\\fHR\\fHm\\fHy\\fIa\\fHC\\fIg\\fHn\\fHy\\fHS\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHR\\fHF\\fHU\\fIm\\fHm\\fHv\\fHH\\fIl\\fHF\\fIa\\fH\\\\\\fH@\\fHn\\fHK\\fHD\\fHs\\fHS\\fHF\\fIa\\fHF\\fHO\\fIl\\fHy\\fIa\\fH\\\\\\fHS\\fHy\\fIk\\fHs\\fHF\\fIa\\fH\\\\\\fHR\\fH\\\\\\fHn\\fHA\\fHF\\fIa\\fH\\\\\\fHR\\fHF\\fIa\\fHH\\fHB\\fHR\\fH^\\fHS\\fHy\\fIg\\fHn\\fH\\\\\\fHG\\fHP\\fIa\\fHH\\fHR\\fH\\\\\\fHD\\fHS\\fH\\\\\\fIa\\fHB\\fHR\\fHO\\fH^\\fHS\\fHB\\fHS\\fHs\\fIk\\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\fHF\\fIm\\fHT\\fIa\\fHH\\fHS\\fHy\\fHR\\fHy\\fHR\\fHn\\fH{\\fIa\\fH\\\\\\fIk\\fHT\\fHe\\fHD\\fIa\\fHU\\fIg\\fHn\\fHD\\fIk\\fHY\\fHS\\fHK\\fHR\\fHD\\fHT\\fHA\\fHR\\fHG\\fHS\\fHy\\fIa\\fHT\\fHS\\fHn\\fH{\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHS\\fHH\\fHy\\fIe\\fHF\\fIl\\fH\\\\\\fHR\\fHk\\fHs\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHF\\fHD\\fHy\\fHR\\fH\\\\\\fIa\\fH\\\\\\fHY\\fHR\\fHd\\fHT\\fHy\\fIa\\fH\\\\\\fHS\\fHC\\fHH\\fHR\", \"\\u06F7%\\u018C'T%\\x85'W%\\xD7%O%g%\\xA6&\\u0193%\\u01E5&>&*&'&^&\\x88\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\x82&P&1&\\xB1&3&]&m&u&E&t&C&\\xCF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\x81&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\x9A&>&\\x86&7&]&F&2&>&J&6&n&2&%&?&\\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\x84(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\xC6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\xA8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\");\n    setData(dictionaryData, dictionarySizeBits);\n  }\n\n  /**\n   * @constructor\n   * @param {!Int8Array} data\n   * @struct\n   */\n  function InputStream(data) {\n    /** @type {!Int8Array} */\n    this.data = new Int8Array(0);\n    /** @type {number} */\n    this.offset = 0;\n    this.data = data;\n  }\n\n  /**\n   * @param {number} x\n   * @return {string}\n   */\n  function valueOf(x) {\n    return x.toString();\n  }\n\n  /**\n   * @param {?InputStream} src\n   * @param {!Int8Array} dst\n   * @param {number} offset\n   * @param {number} length\n   * @return {number}\n   */\n  function readInput(src, dst, offset, length) {\n    if (src === null) {\n      return -1;\n    }\n    let /** @type {number} */ end = Math.min(src.offset + length, src.data.length);\n    let /** @type {number} */ bytesRead = end - src.offset;\n    dst.set(src.data.subarray(src.offset, end), offset);\n    src.offset += bytesRead;\n    return bytesRead;\n  }\n  /**\n   * @param {string} src\n   * @return {!Int8Array}\n   */\n  function toUsAsciiBytes(src) {\n    let /** @type {number} */ n = src.length;\n    let /** @type {!Int8Array} */ result = new Int8Array(n);\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n\n/* GENERATED CODE END */\n\n  /** @typedef {!Int8Array} */\n  let ByteBuffer;\n\n  /**\n   * @param {!Int8Array} bytes\n   * @param {?Options=} options\n   * @return {!Int8Array}\n   */\n  function decode(bytes, options) {\n    let /** @type {!State} */ s = new State();\n    initState(s, new InputStream(bytes));\n    if (options) {\n      let customDictionary =\n          /** @type {?Int8Array} */ (options[\"customDictionary\"]);\n      if (customDictionary) attachDictionaryChunk(s, customDictionary);\n    }\n    let /** @type {number} */ totalOutput = 0;\n    let /** @type {!Array<!Int8Array>} */ chunks = [];\n    while (true) {\n      let /** @type {!Int8Array} */ chunk = new Int8Array(16384);\n      chunks.push(chunk);\n      s.output = chunk;\n      s.outputOffset = 0;\n      s.outputLength = 16384;\n      s.outputUsed = 0;\n      decompress(s);\n      totalOutput += s.outputUsed;\n      if (s.outputUsed < 16384) break;\n    }\n    close(s);\n    let /** @type {!Int8Array} */ result = new Int8Array(totalOutput);\n    let /** @type {number} */ offset = 0;\n    for (let /** @type {number} */ i = 0; i < chunks.length; ++i) {\n      let /** @type {!Int8Array} */ chunk = chunks[i];\n      let /** @type {number} */ end = Math.min(totalOutput, offset + 16384);\n      let /** @type {number} */ len = end - offset;\n      if (len < 16384) {\n        result.set(chunk.subarray(0, len), offset);\n      } else {\n        result.set(chunk, offset);\n      }\n      offset += len;\n    }\n    return result;\n  }\n\n  return decode;\n};\n\n/**\n * @type {function(!Int8Array, ?Options=):!Int8Array}\n */\nexport let BrotliDecode = makeBrotliDecode();\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/js/micProcessor.js",
    "content": "//   micProcessor.js\nclass MicProcessor extends AudioWorkletProcessor\n{\n    constructor()\n    {\n        super();\n\n        // global variables for testing\n        var sampleRate = globalThis.sampleRate;\n        var currentFrame = globalThis.currentFrame;\n        var currentTime = globalThis.currentTime;\n        var currentRenderQuantum = globalThis.currentRenderQuantum;\n                \n        this.SampleRate = sampleRate;\n        this.TargetSamples = Math.floor(this.SampleRate * 0.1); // 100ms\n        this.Buffer = new Float32Array(this.TargetSamples);\n        this.BufferIndex = 0;\n\n        this.port.onmessage = (event) =>\n        {\n            var data = event.data;\n\n            if (typeof data === 'number')\n            {\n                //this.port.postMessage(data); // echo back test\n            }\n            if (data instanceof Uint8Array)\n            {\n            }\n        };\n    }\n\n    process(inputs, outputs, parameters)\n    {\n        var inChannel0 = inputs[0][0];\n        if (!inChannel0) return true;\n                \n        let srcIndex = 0;\n        var srcLen = inChannel0.length;\n\n        while (srcIndex < srcLen)\n        {\n            var remaining = this.TargetSamples - this.BufferIndex;\n            var copyCount = Math.min(remaining, srcLen - srcIndex);\n\n            this.Buffer.set(\n                inChannel0.subarray(srcIndex, srcIndex + copyCount),\n                this.BufferIndex);\n\n            this.BufferIndex += copyCount;\n            srcIndex += copyCount;\n\n            if (this.BufferIndex >= this.TargetSamples)\n            {\n                this.SendBuffer();\n                this.BufferIndex = 0;\n            }\n        }\n\n        return true;\n    }\n\n    SendBuffer()\n    {\n        // convert to 16-6bit PCM\n        var int16 = new Int16Array(this.TargetSamples);\n        for (var i = 0; i < this.TargetSamples; i++)\n        {\n            int16[i] = this.Buffer[i] * 32767;\n        }\n\n        var byteArray = new Uint8Array(int16.buffer);\n        this.port.postMessage(byteArray, [byteArray.buffer]);\n    }\n}\n\nregisterProcessor('mic-processor', MicProcessor);"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/js/streamProcessor.js",
    "content": "//   streamProcessor.js\nclass StreamProcessor extends AudioWorkletProcessor\n{\n    constructor()\n    {\n        super();\n        this.queue = [];\n\n        this.port.onmessage = (event) =>\n        {\n            var data = event.data;\n\n            if (typeof data === 'number')\n            {\n                if (data === 2)\n                {                    \n                    this.queue = [];\n                }\n            }\n            if (data instanceof Uint8Array)\n            {\n                const buffer = new Int16Array(data.buffer, data.byteOffset, data.length / 2);\n                buffer.offset = 0;\n                this.queue.push(buffer);\n            }\n        };\n    }\n\n\n    process(inputs, outputs, parameters)\n    {\n        const output = outputs[0];\n        \n        const channelCount = output.length;\n        const sampleCount = output[0].length;\n\n        let written = 0;\n\n        while (written < sampleCount && this.queue.length > 0)\n        {\n            const buffer = this.queue[0];\n            const offset = buffer.offset;\n\n            const available = buffer.length - offset;\n            const needed = sampleCount - written;\n            const copyCount = Math.min(available, needed);\n\n            for (let i = 0; i < copyCount; i++)\n            {\n                for (let c = 0; c < channelCount; c++)\n                {\n                    const channel = output[c];\n                    let value = (buffer[offset+i] / 32767);\n                    channel[written+i] = value;\n                }\n            }\n            \n            written += copyCount;\n            buffer.offset += copyCount;\n\n            if (buffer.offset >= buffer.length)\n            {\n                this.queue.shift();\n                this.port.postMessage(1);\n            }\n        }\n        \n        // Fill remaining samples with silence\n        if (written < sampleCount)\n        {\n            for (let c = 0; c < channelCount; c++)\n            {\n                const channel = output[c];\n\n                for (let i = written; i < sampleCount; i++)\n                {\n                    let value = 0;\n                    channel[i] = value;\n                }\n            }\n        }\n\n        return true;\n    }\n}\n\nregisterProcessor(\"stream-processor\", StreamProcessor);"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/Application.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0</TargetFramework>\n    <RollForward>Major</RollForward>\n    <ProjectGuid>$guid4$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <PublishTrimmed>True</PublishTrimmed>\n    <PublishAot>True</PublishAot>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$ext_safeprojectname$</RootNamespace>\n    <AssemblyName>$ext_safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DESKTOPGL</DefineConstants>\n    <KniPlatform>DesktopGL</KniPlatform>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.SDL2.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n    <EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$ext_safeprojectname$Content\\$ext_safeprojectname$Content.mgcb\">\n      <Link>Content\\$ext_safeprojectname$Content.mgcb</Link>\n    </KniContentReference>\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"..\\$ext_projectname$.Shared\\$ext_projectname$.Shared.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Cross Platform Desktop Project (.net8)</Name>\n    <Description>A KNI game project for Windows, Mac and Linux using OpenGL.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <ProjectSubType>\n    </ProjectSubType>\n    <SortOrder>43300</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.ico\">Icon.ico</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.bmp\">Icon.bmp</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"app.manifest\">app.manifest</ProjectItem>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $ext_safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$ext_safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/GameMultiplatform.vstemplate",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"ProjectGroup\">\n  <TemplateData>\n    <Name>KNI Multiplatform Project (.net8)</Name>\n    <Description>A KNI project for multiple platforms with shared content.</Description>\n    <TemplateID>Kni.CS.MultiplatformGame.Net8</TemplateID>\n    <TemplateGroupID>VC-Managed</TemplateGroupID>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>android</PlatformTag>\n    <PlatformTag>windows</PlatformTag>\n    <PlatformTag>linux</PlatformTag>\n    <PlatformTag>macos</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>desktop</ProjectTypeTag>\n    <ProjectTypeTag>mobile</ProjectTypeTag>\n    <ProjectTypeTag>web</ProjectTypeTag>\n    <SortOrder>43101</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <Icon>TemplateIcon.png</Icon>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <NumberOfParentCategoriesToRollUp>2</NumberOfParentCategoriesToRollUp>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n    <ProjectCollection>\n\n      <SolutionFolder Name=\"$projectname$\">\n        <ProjectTemplateLink ProjectName=\"$projectname$.Shared\"    CopyParameters=\"true\">Shared\\Shared.vstemplate</ProjectTemplateLink>\n        <ProjectTemplateLink ProjectName=\"$projectname$.Android\"   CopyParameters=\"true\">Android\\Game.vstemplate</ProjectTemplateLink>\n        <ProjectTemplateLink ProjectName=\"$projectname$.WindowsDX\" CopyParameters=\"true\">WindowsDX\\Game.vstemplate</ProjectTemplateLink>\n        <ProjectTemplateLink ProjectName=\"$projectname$.DesktopGL\" CopyParameters=\"true\">DesktopGL\\Game.vstemplate</ProjectTemplateLink>\n        <ProjectTemplateLink ProjectName=\"$projectname$.BlazorGL\"  CopyParameters=\"true\">BlazorGL\\Game.vstemplate</ProjectTemplateLink>\n      </SolutionFolder>\n\n    </ProjectCollection>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Shared/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $ext_safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $ext_safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n#if (ANDROID || iOS)\n            graphics.IsFullScreen = true;\n#endif\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Shared/Shared.vstemplate",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>$ext_safeprojectname$</Name>\n    <ProjectType>CSharp</ProjectType>\n    <TargetPlatformName>Windows</TargetPlatformName>\n    <CreateNewFolder>true</CreateNewFolder>\n    <LocationField>Enabled</LocationField>\n    <DefaultName>App</DefaultName>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project ReplaceParameters=\"true\" File=\"SharedProject.shproj\">\n\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$projectname$.projitems\">SharedProject.projitems</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$ext_safeprojectname$Game.cs\">Game.cs</ProjectItem>\n\n      <Folder Name=\"..\\Content\" TargetFolderName=\"..\\$ext_safeprojectname$Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$ext_safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Shared/SharedProject.projitems",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>$guid1$</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>$ext_safeprojectname$</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)$ext_safeprojectname$Game.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Shared/SharedProject.shproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>$guid1$</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"$projectname$.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/Application.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <RollForward>Major</RollForward>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ProjectGuid>$guid3$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$ext_safeprojectname$</RootNamespace>\n    <AssemblyName>$ext_safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);WINDOWSDX</DefineConstants>\n    <KniPlatform>Windows</KniPlatform>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Icon.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$ext_safeprojectname$Content\\$ext_safeprojectname$Content.mgcb\">\n      <Link>Content\\$ext_safeprojectname$Content.mgcb</Link>\n    </KniContentReference>\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"..\\$ext_projectname$.Shared\\$ext_projectname$.Shared.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Windows Project (.net8)</Name>\n    <Description>A KNI game project for the Windows desktop using DirectX.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <ProjectSubType>\n    </ProjectSubType>\n    <SortOrder>43100</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.ico\">Icon.ico</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"app.manifest\">app.manifest</ProjectItem>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            // Uncomment this line to enable VR with the nkast.Kni.Platform.WinForms.DX11.OculusOVR package.\n            //Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory());\n\n            using (Game game = new $ext_safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$ext_safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/Application.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>$guid4$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$ext_safeprojectname$</RootNamespace>\n    <AssemblyName>$ext_safeprojectname$</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>DesktopGL</KniPlatform>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;DESKTOPGL</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;DESKTOPGL</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.SDL2.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n    <EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$ext_safeprojectname$Content\\$ext_safeprojectname$Content.mgcb\">\n      <Link>Content\\$ext_safeprojectname$Content.mgcb</Link>\n    </KniContentReference>\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"..\\$ext_projectname$.Shared\\$ext_projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Cross Platform Desktop Project</Name>\n    <Description>A KNI game project for Windows, Mac and Linux using OpenGL.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <ProjectSubType>\n    </ProjectSubType>\n    <SortOrder>43300</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.ico\">Icon.ico</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.bmp\">Icon.bmp</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"app.manifest\">app.manifest</ProjectItem>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $ext_safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyProduct(\"$ext_safeprojectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid4$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$ext_safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/GameMultiplatform.vstemplate",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"ProjectGroup\">\n  <TemplateData>\n    <Name>KNI Multiplatform Project (.NET Framework)</Name>\n    <Description>A KNI project for multiple platforms with shared content.</Description>\n    <TemplateID>Kni.CS.MultiplatformGame</TemplateID>\n    <TemplateGroupID>VC-Managed</TemplateGroupID>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <PlatformTag>linux</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>desktop</ProjectTypeTag>\n    <ProjectTypeTag>uwp</ProjectTypeTag>\n    <SortOrder>43100</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <Icon>TemplateIcon.png</Icon>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <NumberOfParentCategoriesToRollUp>2</NumberOfParentCategoriesToRollUp>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <ProjectCollection>\n\n      <SolutionFolder Name=\"$projectname$\">\n        <ProjectTemplateLink ProjectName=\"$projectname$.Shared\"    CopyParameters=\"true\">Shared\\Shared.vstemplate</ProjectTemplateLink>\n        <ProjectTemplateLink ProjectName=\"$projectname$.WindowsDX\" CopyParameters=\"true\">WindowsDX\\Game.vstemplate</ProjectTemplateLink>\n        <ProjectTemplateLink ProjectName=\"$projectname$.DesktopGL\" CopyParameters=\"true\">DesktopGL\\Game.vstemplate</ProjectTemplateLink>\n        <ProjectTemplateLink ProjectName=\"$projectname$.UWPCore\"   CopyParameters=\"true\">UWPCore\\Game.vstemplate</ProjectTemplateLink>\n        <ProjectTemplateLink ProjectName=\"$projectname$.UWPXaml\"   CopyParameters=\"true\">UWPXaml\\Game.vstemplate</ProjectTemplateLink>\n      </SolutionFolder>\n\n    </ProjectCollection>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Shared/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $ext_safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $ext_safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n#if (ANDROID || iOS)\n            graphics.IsFullScreen = true;\n#endif\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Shared/Shared.vstemplate",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>$ext_safeprojectname$</Name>\n    <ProjectType>CSharp</ProjectType>\n    <TargetPlatformName>Windows</TargetPlatformName>\n    <CreateNewFolder>true</CreateNewFolder>\n    <LocationField>Enabled</LocationField>\n    <DefaultName>App</DefaultName>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project ReplaceParameters=\"true\" File=\"SharedProject.shproj\">\n\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$projectname$.projitems\">SharedProject.projitems</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$ext_safeprojectname$Game.cs\">Game.cs</ProjectItem>\n\n      <Folder Name=\"..\\Content\" TargetFolderName=\"..\\$ext_safeprojectname$Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$ext_safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Shared/SharedProject.projitems",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>$guid1$</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>$ext_safeprojectname$</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)$ext_safeprojectname$Game.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Shared/SharedProject.shproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>$guid1$</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"$projectname$.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Application.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{$guid7$}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$ext_safeprojectname$</RootNamespace>\n    <AssemblyName>$ext_safeprojectname$</AssemblyName>\n    <DefaultLanguage>$currentuiculturename$</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <KniPlatform>WindowsStoreApp</KniPlatform>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.UAP.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$ext_safeprojectname$Content\\$ext_safeprojectname$Content.mgcb\">\n      <Link>Content\\$ext_safeprojectname$Content.mgcb</Link>\n    </KniContentReference>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"..\\$ext_projectname$.Shared\\$ext_projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n\n</Project>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Game.vstemplate",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Windows 10 Universal (Core) Project (.uap10)</Name>\n    <Description>A KNI game project for Windows 10 UWP using the Core Application framework.</Description>\n    <TemplateID>Kni.CS.WinRT.UAPCoreGame</TemplateID>\n    <TemplateGroupID>WinRT-Native-UAP</TemplateGroupID>\n    <ProjectType>CSharp</ProjectType>\n    <SortOrder>43160</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <TargetPlatformName>Windows</TargetPlatformName>\n    <RequiredPlatformVersion>6.1.0</RequiredPlatformVersion>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent PreferedSolutionConfiguration=\"Debug|x86\">\n    <Project File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Package.appxmanifest\">Package.appxmanifest</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"$ext_safeprojectname$_TemporaryKey.pfx\" BlendDoNotCreate=\"true\">Application_TemporaryKey.pfx</ProjectItem>\n\n      <Folder Name=\"Assets\" TargetFolderName=\"Assets\">\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"LockScreenLogo.scale-200.png\">LockScreenLogo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"SplashScreen.scale-200.png\">SplashScreen.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square44x44Logo.scale-200.png\">Square44x44Logo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square44x44Logo.targetsize-24_altform-unplated.png\">Square44x44Logo.targetsize-24_altform-unplated.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square150x150Logo.scale-200.png\">Square150x150Logo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"StoreLogo.png\">StoreLogo.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Wide310x150Logo.scale-200.png\">Wide310x150Logo.scale-200.png</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.rd.xml\">Default.rd.xml</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"$guid8$\"\n    Publisher=\"CN=PublisherDistinguishedName\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"$guid8$\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>$ext_safeprojectname$</DisplayName>\n    <PublisherDisplayName>publisherDisplayName</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$ext_safeprojectname$.App\">\n      <uap:VisualElements\n        DisplayName=\"$ext_safeprojectname$\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"$ext_safeprojectname$\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Program.cs",
    "content": "﻿using System;\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main()\n        {\n            var factory = new Microsoft.Xna.Platform.GameFrameworkViewSource<$ext_safeprojectname$Game>();\n            Windows.ApplicationModel.Core.CoreApplication.Run(factory);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyProduct(\"$ext_safeprojectname$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/App.xaml",
    "content": "﻿<Application\n    x:Class=\"$ext_safeprojectname$.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:$ext_safeprojectname$\"\n    RequestedTheme=\"Light\">\n\n</Application>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/App.xaml.cs",
    "content": "﻿using System;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        static string deviceFamily;\n\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n\n            //API check to ensure the \"RequiresPointerMode\" property exists, ensuring project is running on build 14393 or later\n            if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent(\"Windows.UI.Xaml.Application\", \"RequiresPointerMode\"))\n            {\n                //If running on the Xbox, disable the default on screen pointer\n                if (IsXbox())\n                {\n                    Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Detection code in Windows 10 to identify the platform it is being run on\n        /// This function returns true if the project is running on an XboxOne\n        /// </summary>\n        public static bool IsXbox()\n        {\n            if (deviceFamily == null)\n                deviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily;\n\n            return deviceFamily == \"Windows.Xbox\";\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used such as when the application is launched to open a specific file.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n            // By default we want to fill the entire core window.\n            ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);\n\n#if DEBUG\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                this.DebugSettings.EnableFrameRateCounter = true;\n            }\n#endif\n\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (e.PrelaunchActivated == false)\n            {\n                if (rootFrame.Content == null)\n                {\n                    // When the navigation stack isn't restored navigate to the first page,\n                    // configuring the new page by passing required information as a navigation\n                    // parameter\n                    rootFrame.Navigate(typeof(MainPage), e.Arguments);\n                }\n                // Ensure the current window is active\n                Window.Current.Activate();\n            }\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation</param>\n        /// <param name=\"e\">Details about the navigation failure</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Application.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{$guid5$}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$ext_safeprojectname$</RootNamespace>\n    <AssemblyName>$ext_safeprojectname$</AssemblyName>\n    <DefaultLanguage>$currentuiculturename$</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <KniPlatform>WindowsStoreApp</KniPlatform>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.UAP.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$ext_safeprojectname$Content\\$ext_safeprojectname$Content.mgcb\">\n      <Link>Content\\$ext_safeprojectname$Content.mgcb</Link>\n    </KniContentReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"..\\$ext_projectname$.Shared\\$ext_projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n\n</Project>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Game.vstemplate",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Windows 10 Universal (XAML) Project (.uap10)</Name>\n    <Description>A KNI game project for Windows 10 UWP using XAML controls.</Description>\n    <TemplateID>Kni.CS.WinRT.UAPXamlGame</TemplateID>\n    <TemplateGroupID>WinRT-Native-UAP</TemplateGroupID>\n    <ProjectType>CSharp</ProjectType>\n    <SortOrder>43160</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <TargetPlatformName>Windows</TargetPlatformName>\n    <RequiredPlatformVersion>6.1.0</RequiredPlatformVersion>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent PreferedSolutionConfiguration=\"Debug|x86\">\n    <Project File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"App.xaml\">App.xaml</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" OpenInEditor=\"!blend\" TargetFileName=\"App.xaml.cs\">App.xaml.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" OpenInEditor=\"blend\" TargetFileName=\"MainPage.xaml\">MainPage.xaml</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"MainPage.xaml.cs\">MainPage.xaml.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Package.appxmanifest\">Package.appxmanifest</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"$ext_safeprojectname$_TemporaryKey.pfx\" BlendDoNotCreate=\"true\">Application_TemporaryKey.pfx</ProjectItem>\n\n      <Folder Name=\"Assets\" TargetFolderName=\"Assets\">\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"LockScreenLogo.scale-200.png\">LockScreenLogo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"SplashScreen.scale-200.png\">SplashScreen.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square44x44Logo.scale-200.png\">Square44x44Logo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square44x44Logo.targetsize-24_altform-unplated.png\">Square44x44Logo.targetsize-24_altform-unplated.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square150x150Logo.scale-200.png\">Square150x150Logo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"StoreLogo.png\">StoreLogo.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Wide310x150Logo.scale-200.png\">Wide310x150Logo.scale-200.png</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.rd.xml\">Default.rd.xml</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"$ext_safeprojectname$.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:$ext_safeprojectname$\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <SwapChainPanel x:Name=\"swapChainPanel\" />\n\n</Page>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/MainPage.xaml.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        readonly $ext_safeprojectname$Game _game;\n\n        public MainPage()\n        {\n            this.InitializeComponent();\n\n            // Create the game.\n            string launchArguments = String.Empty;\n            _game = Microsoft.Xna.Platform.XamlGame<$ext_safeprojectname$Game>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"$guid6$\"\n    Publisher=\"CN=PublisherDistinguishedName\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"$guid6$\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>$ext_safeprojectname$</DisplayName>\n    <PublisherDisplayName>publisherDisplayName</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$ext_safeprojectname$.App\">\n      <uap:VisualElements\n        DisplayName=\"$ext_safeprojectname$\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"$ext_safeprojectname$\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyProduct(\"$ext_safeprojectname$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/Application.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>$guid3$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$ext_safeprojectname$</RootNamespace>\n    <AssemblyName>$ext_safeprojectname$</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>Windows</KniPlatform>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;WINDOWSDX</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Icon.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$ext_safeprojectname$Content\\$ext_safeprojectname$Content.mgcb\">\n      <Link>Content\\$ext_safeprojectname$Content.mgcb</Link>\n    </KniContentReference>\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"..\\$ext_projectname$.Shared\\$ext_projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI WindowsDX Project</Name>\n    <Description>A KNI game project for the Windows desktop using DirectX.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <ProjectSubType>\n    </ProjectSubType>\n    <SortOrder>43100</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Hidden>true</Hidden>\n    <PromptForSaveOnCreation>false</PromptForSaveOnCreation>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.ico\">Icon.ico</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"app.manifest\">app.manifest</ProjectItem>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $ext_safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $ext_safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyProduct(\"$ext_safeprojectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid3$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$ext_safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Activity.cs",
    "content": "using Microsoft.Xna.Framework;\nusing Android.App;\nusing Android.Content.PM;\nusing Android.OS;\nusing Android.Views;\n\nnamespace $safeprojectname$\n{\n    [Activity(Label = \"$projectname$\"\n        , MainLauncher = true\n        , Icon = \"@drawable/icon\"\n        , Theme = \"@style/Theme.Splash\"\n        , AlwaysRetainTaskState = true\n        , LaunchMode = LaunchMode.SingleInstance\n        , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize\n                               | ConfigChanges.Density | ConfigChanges.LayoutDirection | ConfigChanges.FontScale\n        , ScreenOrientation = ScreenOrientation.Landscape\n        , ExcludeFromRecents = true\n        , Exported = true\n    )]\n    [IntentFilter(new[] { Android.Content.Intent.ActionMain },\n     Categories = new[]\n     {\n       \"org.khronos.openxr.intent.category.IMMERSIVE_HMD\",\n       \"com.oculus.intent.category.VR\",\n       \"android.intent.category.LAUNCHER\"\n     }\n    )]\n    public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity\n    {\n        protected override void OnCreate(Bundle bundle)\n        {\n            base.OnCreate(bundle);\n            Game game = new $safeprojectname$Game();\n            SetContentView((View)game.Services.GetService(typeof(View)));\n            game.Run();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"$safeprojectname$.$safeprojectname$\" android:versionCode=\"1\" android:versionName=\"1.0\">\n\t<!-- Tell the system this app requires OpenGL ES 3.1. -->\n\t<uses-feature android:glEsVersion=\"0x00030001\" android:required=\"true\" />\n\t<uses-feature android:name=\"android.hardware.vr.headtracking\" android:required=\"true\" />\n    <uses-feature android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"true\" />\n    \n\t<uses-permission android:name=\"android.permission.VIBRATE\" />\n\t<uses-permission android:name=\"android.permission.INTERNET\" />\n\t<uses-permission android:name=\"com.android.vending.BILLING\" />\n\t<application android:label=\"$projectname$\">\n\t    <meta-data android:name=\"com.oculus.vr.focusaware\" android:value=\"true\"/>\n\t</application>\n\t<uses-sdk android:minSdkVersion=\"32\" android:targetSdkVersion=\"32\" />\n</manifest>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Application.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-android</TargetFramework>\n    <SupportedOSPlatformVersion>32.0</SupportedOSPlatformVersion>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <IsTrimmable>True</IsTrimmable>\n    <TrimMode>partial</TrimMode>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);ANDROID</DefineConstants>\n    <KniPlatform>Android</KniPlatform>\n    <ApplicationId>com.companyname.$safeprojectname$</ApplicationId>\n    <ApplicationVersion>1</ApplicationVersion>\n    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n    <AndroidStoreUncompressedFileExtensions>.m4a</AndroidStoreUncompressedFileExtensions>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Oculus.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"$safeprojectname$Activity.cs\" />\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"AndroidManifest.xml\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Splash.png\" />\n    <AndroidResource Include=\"Resources\\Values\\Strings.xml\" />\n    <AndroidResource Include=\"Resources\\Values\\Styles.xml\" />\n    <Folder Include=\"Resources\\Layout\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with your package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Android\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Game.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        XRDevice xrDevice;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.IsFullScreen = true;\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n\n            // OXR requires at least feature level 9.3.\n            graphics.GraphicsProfile = GraphicsProfile.HiDef;\n\n            // Syncronize to the headset refresh rate.\n            graphics.SynchronizeWithVerticalRetrace = true;\n            IsFixedTimeStep = false;\n            // 72Hz Frame rate for oculus.\n            TargetElapsedTime = TimeSpan.FromTicks(138888);\n\n            // We don't care is the main window is Focuses or not\n            // because we render on the XR rendertargets.\n            InactiveSleepTime = TimeSpan.FromSeconds(0);\n\n            xrDevice = new XRDevice(\"$safeprojectname$\", this.Services);\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n            xrDevice.BeginSessionAsync(XRSessionMode.VR);\n            xrDevice.TrackFloorLevelAsync(true);\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n            GamePadState touchControllerState = TouchController.GetState(TouchControllerType.Touch);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            float aspect = GraphicsDevice.Viewport.AspectRatio;\n            Matrix view = Matrix.CreateLookAt(Vector3.Zero, Vector3.Forward, Vector3.Up);\n            Matrix projection = Matrix.CreatePerspectiveFieldOfView(1, aspect, 0.05f, 1000);\n\n            if (xrDevice.DeviceState == XRDeviceState.Enabled)\n            {\n\n                // Draw on XR headset.\n                xrDevice.BeginFrame();\n                try\n                {\n                    HeadsetState headsetState = xrDevice.GetHeadsetState();\n\n                    // Draw each eye on a rendertarget.\n                    foreach (XREye eye in xrDevice.GetEyes())\n                    {\n                        RenderTarget2D rt = xrDevice.GetEyeRenderTarget(eye);\n                        GraphicsDevice.SetRenderTarget(rt);\n\n                        // Get XR view and projection.\n                        view = headsetState.GetEyeView(eye);\n                        projection = xrDevice.CreateProjection(eye, 0.05f, 1000);\n\n                        // TODO: Add your drawing code here\n                        if (xrDevice.SessionMode == XRSessionMode.AR)\n                            GraphicsDevice.Clear(Color.Transparent);\n                        else\n                            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n                        base.Draw(gameTime);\n\n                        // Resolve eye rendertarget.\n                        GraphicsDevice.SetRenderTarget(null);\n                        // Submit eye rendertarget.\n                        xrDevice.CommitRenderTarget(eye, rt);\n                    }\n                }\n                finally\n                {\n                    // Submit XR frame.\n                    int result = xrDevice.EndFrame();\n                }\n                return;\n            }\n\n            // Draw on the backbuffer.\n            GraphicsDevice.SetRenderTarget(null);\n\n            // TODO: Add your drawing code here\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Oculus Project (.net8)</Name>\n    <Description>A KNI game project for Oculus.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>Oculus</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>XR</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43201</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AndroidManifest.xml\">AndroidManifest.xml</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Activity.cs\">Activity.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Assets\" TargetFolderName=\"Assets\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AboutAssets.txt\">AboutAssets.txt</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Resources\" TargetFolderName=\"Resources\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AboutResources.txt\">AboutResources.txt</ProjectItem>\n        <Folder Name=\"Drawable\" TargetFolderName=\"Drawable\">\n          <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.png\">Icon.png</ProjectItem>\n          <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Splash.png\">Splash.png</ProjectItem>\n        </Folder>\n        <Folder Name=\"Layout\" TargetFolderName=\"Layout\" />\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Resource.Designer.cs\">Resource.Designer.cs</ProjectItem>\n        <Folder Name=\"Values\" TargetFolderName=\"Values\">\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Strings.xml\">Strings.xml</ProjectItem>\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Styles.xml\">Styles.xml</ProjectItem>\n        </Folder>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (Main.xml),\nan internationalization string table (Strings.xml) and some icons (drawable/Icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    Drawable/\n        Icon.png\n\n    Layout/\n        Main.axml\n\n    Values/\n        Strings.xml\n\nIn order to get the build system to recognize Android resources, the build action should be set \nto \"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called\n\"Resource\" that contains the tokens for each one of the resources included. For example, \nfor the above Resources layout, this is what the Resource class would expose:\n\npublic class Resource {\n    public class Drawable {\n        public const int Icon = 0x123;\n    }\n\n    public class Layout {\n        public const int Main = 0x456;\n    }\n\n    public class String {\n        public const int FirstString = 0xabc;\n        public const int SecondString = 0xbcd;\n    }\n}\n\nYou would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or \nResource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString\nto reference the first string in the dictionary file Values/Strings.xml."
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Resources/Resource.Designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"$safeprojectname$.Resource\", IsApplication=true)]\n\nnamespace $safeprojectname$\n{\n\t\n\t\n\t[System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"1.0.0.0\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic static void UpdateIdValues()\n\t\t{\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020001\n\t\t\tpublic const int Splash = 2130837505;\n\t\t\t\n\t\t\tstatic Drawable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int ApplicationName = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Hello = 2130903040;\n\t\t\t\n\t\t\tstatic String()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int Theme_Splash = 2130968576;\n\t\t\t\n\t\t\tstatic Style()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ApplicationName\">$safeprojectname$</string>\n</resources>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Resources/Values/Styles.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <style name=\"Theme.Splash\" parent=\"android:Theme\">\n    <item name=\"android:windowBackground\">@drawable/splash</item>\n    <item name=\"android:windowNoTitle\">true</item>\n  </style>\n</resources>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Application.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{$guid1$}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefaultLanguage>$currentuiculturename$</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <KniPlatform>WindowsStoreApp</KniPlatform>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.UAP.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n\n</Project>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:WindowsStoreApp\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Game.vstemplate",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Windows 10 Universal (Core) Project (.uap10)</Name>\n    <Description>A KNI game project for Windows 10 UWP using the Core Application framework.</Description>\n    <Icon>TemplateIcon.png</Icon>\n    <TemplateID>Kni.CS.WinRT.UAPCoreGame</TemplateID>\n    <TemplateGroupID>WinRT-Native-UAP</TemplateGroupID>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <PlatformTag>xbox</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>uwp</ProjectTypeTag>\n    <ProjectTypeTag>desktop</ProjectTypeTag>\n    <ProjectTypeTag>console</ProjectTypeTag>\n    <SortOrder>43160</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <TargetPlatformName>Windows</TargetPlatformName>\n    <RequiredPlatformVersion>6.1.0</RequiredPlatformVersion>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent PreferedSolutionConfiguration=\"Debug|x86\">\n    <Project File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Package.appxmanifest\">Package.appxmanifest</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"$projectname$_TemporaryKey.pfx\" BlendDoNotCreate=\"true\">Application_TemporaryKey.pfx</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Assets\" TargetFolderName=\"Assets\">\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"LockScreenLogo.scale-200.png\">LockScreenLogo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"SplashScreen.scale-200.png\">SplashScreen.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square44x44Logo.scale-200.png\">Square44x44Logo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square44x44Logo.targetsize-24_altform-unplated.png\">Square44x44Logo.targetsize-24_altform-unplated.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square150x150Logo.scale-200.png\">Square150x150Logo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"StoreLogo.png\">StoreLogo.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Wide310x150Logo.scale-200.png\">Wide310x150Logo.scale-200.png</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.rd.xml\">Default.rd.xml</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"$guid9$\"\n    Publisher=\"CN=PublisherDistinguishedName\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"$guid9$\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>$projectname$</DisplayName>\n    <PublisherDisplayName>publisherDisplayName</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$safeprojectname$.App\">\n      <uap:VisualElements\n        DisplayName=\"$projectname$\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"$projectname$\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Program.cs",
    "content": "﻿using System;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main()\n        {\n            var factory = new Microsoft.Xna.Platform.GameFrameworkViewSource<$safeprojectname$Game>();\n            Windows.ApplicationModel.Core.CoreApplication.Run(factory);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/App.xaml",
    "content": "﻿<Application\n    x:Class=\"$safeprojectname$.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:$safeprojectname$\"\n    RequestedTheme=\"Light\">\n\n</Application>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/App.xaml.cs",
    "content": "﻿using System;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        static string deviceFamily;\n\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n\n            //API check to ensure the \"RequiresPointerMode\" property exists, ensuring project is running on build 14393 or later\n            if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent(\"Windows.UI.Xaml.Application\", \"RequiresPointerMode\"))\n            {\n                //If running on the Xbox, disable the default on screen pointer\n                if (IsXbox())\n                {\n                    Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Detection code in Windows 10 to identify the platform it is being run on\n        /// This function returns true if the project is running on an XboxOne\n        /// </summary>\n        public static bool IsXbox()\n        {\n            if (deviceFamily == null)\n                deviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily;\n\n            return deviceFamily == \"Windows.Xbox\";\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used such as when the application is launched to open a specific file.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n            // By default we want to fill the entire core window.\n            ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);\n\n#if DEBUG\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                this.DebugSettings.EnableFrameRateCounter = true;\n            }\n#endif\n\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (e.PrelaunchActivated == false)\n            {\n                if (rootFrame.Content == null)\n                {\n                    // When the navigation stack isn't restored navigate to the first page,\n                    // configuring the new page by passing required information as a navigation\n                    // parameter\n                    rootFrame.Navigate(typeof(MainPage), e.Arguments);\n                }\n                // Ensure the current window is active\n                Window.Current.Activate();\n            }\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation</param>\n        /// <param name=\"e\">Details about the navigation failure</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Application.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{$guid1$}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefaultLanguage>$currentuiculturename$</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <KniPlatform>WindowsStoreApp</KniPlatform>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.UAP.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n\n</Project>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:WindowsStoreApp\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Game.vstemplate",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Windows 10 Universal (XAML) Project (.uap10)</Name>\n    <Description>A KNI game project for Windows 10 UWP using XAML controls.</Description>\n    <Icon>TemplateIcon.png</Icon>\n    <TemplateID>Kni.CS.WinRT.UAPXamlGame</TemplateID>\n    <TemplateGroupID>WinRT-Native-UAP</TemplateGroupID>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <PlatformTag>xbox</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>uwp</ProjectTypeTag>\n    <ProjectTypeTag>desktop</ProjectTypeTag>\n    <ProjectTypeTag>console</ProjectTypeTag>\n    <SortOrder>43160</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <TargetPlatformName>Windows</TargetPlatformName>\n    <RequiredPlatformVersion>6.1.0</RequiredPlatformVersion>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent PreferedSolutionConfiguration=\"Debug|x86\">\n    <Project File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"App.xaml\">App.xaml</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" OpenInEditor=\"!blend\" TargetFileName=\"App.xaml.cs\">App.xaml.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" OpenInEditor=\"blend\" TargetFileName=\"MainPage.xaml\">MainPage.xaml</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"MainPage.xaml.cs\">MainPage.xaml.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Package.appxmanifest\">Package.appxmanifest</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"$projectname$_TemporaryKey.pfx\" BlendDoNotCreate=\"true\">Application_TemporaryKey.pfx</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Assets\" TargetFolderName=\"Assets\">\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"LockScreenLogo.scale-200.png\">LockScreenLogo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"SplashScreen.scale-200.png\">SplashScreen.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square44x44Logo.scale-200.png\">Square44x44Logo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square44x44Logo.targetsize-24_altform-unplated.png\">Square44x44Logo.targetsize-24_altform-unplated.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Square150x150Logo.scale-200.png\">Square150x150Logo.scale-200.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"StoreLogo.png\">StoreLogo.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Wide310x150Logo.scale-200.png\">Wide310x150Logo.scale-200.png</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.rd.xml\">Default.rd.xml</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"$safeprojectname$.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:$safeprojectname$\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <SwapChainPanel x:Name=\"swapChainPanel\" />\n\n</Page>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/MainPage.xaml.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        readonly $safeprojectname$Game _game;\n\n        public MainPage()\n        {\n            this.InitializeComponent();\n\n            // Create the game.\n            string launchArguments = String.Empty;\n            _game = Microsoft.Xna.Platform.XamlGame<$safeprojectname$Game>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"$guid9$\"\n    Publisher=\"CN=PublisherDistinguishedName\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"$guid9$\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>$projectname$</DisplayName>\n    <PublisherDisplayName>publisherDisplayName</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$safeprojectname$.App\">\n      <uap:VisualElements\n        DisplayName=\"$projectname$\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"$projectname$\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Application.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <RollForward>Major</RollForward>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);WINDOWSDX</DefineConstants>\n    <KniPlatform>Windows</KniPlatform>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Icon.ico\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Windows\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Windows Project (.net8)</Name>\n    <Description>A KNI game project for the Windows desktop using DirectX.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>desktop</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43101</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"KniWindowsApplication.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.ico\">Icon.ico</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"app.manifest\">app.manifest</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            // Uncomment this line to enable VR with the nkast.Kni.Platform.WinForms.DX11.OculusOVR package.\n            //Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory());\n\n            using (Game game = new $safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Application.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>Windows</KniPlatform>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n    <Compile Include=\"Program.cs\" />\n\t<Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Icon.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Windows\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Windows Project (.NET Framework)</Name>\n    <Description>A KNI game project for the Windows desktop using DirectX.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>windows</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>desktop</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43100</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"KniWindowsApplication.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.ico\">Icon.ico</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"app.manifest\">app.manifest</ProjectItem>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AssemblyInfo.cs\">AssemblyInfo.cs</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"$registeredorganization$\")]\n[assembly: AssemblyCopyright(\"Copyright © $registeredorganization$ $year$\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid2$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Application.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-ios</TargetFramework>\n    <SupportedOSPlatformVersion>11.2</SupportedOSPlatformVersion>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <IsTrimmable>True</IsTrimmable>\n\t<TrimMode>partial</TrimMode>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)</OutputPath>\n    <DefineConstants>$(DefineConstants);iOS</DefineConstants>\n    <KniPlatform>iOS</KniPlatform>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.iOS.GL\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <BundleResource Include=\"Default.png\" />\n    <BundleResource Include=\"GameThumbnail.png\" />\n    <None Include=\"Entitlements.plist\" />\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Content/Content.mgcb",
    "content": "﻿#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:iOS\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Entitlements.plist",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.IsFullScreen = true;\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI iOS Project (.net8)</Name>\n    <Description>A KNI game project for iOS.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>ios</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>mobile</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43301</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$.csproj\" File=\"Application.csproj\">\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.png\">Default.png</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Entitlements.plist\">Entitlements.plist</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"GameThumbnail.png\">GameThumbnail.png</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Info.plist\">Info.plist</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDisplayName</key>\n  <string>$safeprojectname$</string>\n  <key>CFBundleIconFiles</key>\n  <array>\n    <string>GameThumbnail.png</string>\n  </array>\n  <key>CFBundleIdentifier</key>\n  <string>project.Company.$safeprojectname$</string>\n  <key>MinimumOSVersion</key>\n  <string>11.2</string>\n  <key>UISupportedInterfaceOrientations</key>\n  <array>\n    <string>UIInterfaceOrientationPortrait</string>\n    <string>UIInterfaceOrientationPortraitUpsideDown</string>\n    <string>UIInterfaceOrientationLandscapeLeft</string>\n    <string>UIInterfaceOrientationLandscapeRight</string>\n  </array>\n  <key>CFBundleName</key>\n  <string>$safeprojectname$</string>\n  <key>UIRequiresFullScreen</key>\n  <true/>\n  <key>UIStatusBarHidden</key>\n  <true/>\n  <key>UILaunchStoryboardName</key>\n  <string>LaunchScreen</string>\n  <key>UIDeviceFamily</key>\n  <array>\n      <integer>1</integer>\n      <integer>2</integer>\n  </array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Program.cs",
    "content": "﻿using System;\nusing Foundation;\nusing UIKit;\n\nnamespace $safeprojectname$\n{\n    [Register(\"AppDelegate\")]\n    internal class Program : UIApplicationDelegate\n    {\n        private static $safeprojectname$Game game;\n\n        internal static void RunGame()\n        {\n            game = new $safeprojectname$Game();\n            game.Run();\n        }\n\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main(string[] args)\n        {\n            UIApplication.Main(args, null, \"AppDelegate\");\n        }\n\n        public override void FinishedLaunching(UIApplication app)\n        {\n            RunGame();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/VisualStudio2022/default.build",
    "content": "<?xml version=\"1.0\"?>\n<project name=\"Aurora Ion Build Script\" default=\"build\" basedir=\".\">\n\t<description>Default Ion Automated Build script</description>\n\t<property name=\"os\" value=\"${operating-system::get-platform(environment::get-operating-system())}\" />\n\n\t<target name=\"build\" description=\"Build Visual Studio 2022 Templates\">\n\t\t<delete><fileset><include name=\"*.zip\" /></fileset></delete>\n\t\t<!-- Find any applications that have valid build scripts, configure their references and then build them -->\n\t\t<foreach item=\"Folder\" property=\"folder\" in=\"ProjectTemplates/\">\n\t\t\t<zip zipfile=\"${folder}.zip\">\n\t\t\t  <fileset basedir=\"${folder}\">\t\t\t    \n\t\t\t     <include name=\"**/*\" />\n\t\t\t  </fileset>\n\t\t\t</zip>\n\t\t</foreach>\n\t\t\n\t\t<foreach item=\"Folder\" property=\"folder\" in=\"ItemTemplates/\">\n\t\t\t<zip zipfile=\"${folder}.zip\">\n\t\t\t  <fileset basedir=\"${folder}\">\t\t\t    \n\t\t\t     <include name=\"**/*\" />\n\t\t\t  </fileset>\n\t\t\t</zip>\n\t\t</foreach>\n\t\t\n\t</target>\n\t\n</project>\n"
  },
  {
    "path": "Templates/default.build",
    "content": "<?xml version=\"1.0\"?>\n<project name=\"Aurora Ion Build Script\" default=\"build\" basedir=\".\">\n\t<description>Default Ion Automated Build script</description>\n\t<property name=\"os\" value=\"${operating-system::get-platform(environment::get-operating-system())}\" />\n\n\t<target name=\"checkos\" description=\"check the operating system\">\n\t\t<property name=\"os\" value=\"${operating-system::get-platform(environment::get-operating-system())}\"/>\n\t\t<if test=\"${os == 'Unix'}\">\n\t\t<if test=\"${directory::exists('/Applications') and directory::exists('/Library')}\">\n\t\t\t<property name=\"os\" value=\"MacOS\"/>\n\t\t</if>\n\t\t</if>\n\t\t<echo message=\"Detected : ${os}\"/>\n\t</target>\n\t<target name=\"build\" description=\"Build Nuget Templates\" depends=\"checkos\">\n\t\t<if test=\"${os == 'MacOS'}\">\n\t\t\t<exec program=\"msbuild\" commandline=\" MonoGame.Templates.CSharp/MonoGame.Templates.CSharp.csproj /t:Restore /p:Configuration=Release\" />\n\t\t\t<exec program=\"msbuild\" commandline=\" MonoGame.Templates.CSharp/MonoGame.Templates.CSharp.csproj /t:Clean /p:Configuration=Release\" />\n\t\t\t<exec program=\"msbuild\" commandline=\" MonoGame.Templates.CSharp/MonoGame.Templates.CSharp.csproj /t:Build /p:Configuration=Release\" />\n\t\t\t<exec program=\"msbuild\" commandline=\" MonoGame.Templates.CSharp/MonoGame.Templates.CSharp.csproj /t:Pack /p:Configuration=Release /p:PackageOutputPath=bin /p:AppendTargetFrameworkToOutputPath=false /p:Version=1.0.0\" />\n\t\t</if>\n</target>\n</project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/Install.bat",
    "content": "dotnet new install .\\\n"
  },
  {
    "path": "Templates/dotnetTemplates/README.md",
    "content": "# KNI .NET Templates (`nkast.Kni.Templates`)\n\nThis package provides KNI project templates for `dotnet new`.\n\n## Install\n\n```bash\ndotnet new install nkast.Kni.Templates\n```\n\n## Uninstall\n\n```bash\ndotnet new uninstall nkast.Kni.Templates\n```\n\n## List installed templates\n\n```bash\ndotnet new list kni\n```\n\n## Usage\n\nAfter installation, create a project from one of the installed KNI templates:\n\n```bash\ndotnet new <template-short-name> -n ProjectName\n```\n\n## Available templates\n\n### Project templates\n\n| Short name | Template | Platform | Graphics backend | Audio backend |\n|---|---|---|---|---|\n| `kni-android-gl` | KNI Android Game Project | Android | GL ES | OpenAL |\n| `kni-blazor-gl` | KNI Web Game Project (.net8) | Blazor WebAssembly | WebGL | WebAudio |\n| `kni-ios-gl` | KNI iOS Game Project | iOS | GL ES | OpenAL |\n| `kni-oculus-gl` | KNI Oculus Game Project | Oculus | OpenGL | OpenAL |\n| `kni-sdl2-gl` | KNI Cross Platform Desktop Game Project (.net8) | SDL2 (Windows/Linux/macOS) | OpenGL | OpenAL |\n| `kni-sdl2-gl-netframework` | KNI Cross Platform Desktop Game Project (.NET Framework) | SDL2 (Windows/Linux/macOS) | OpenGL | OpenAL |\n| `kni-winforms-dx11` | KNI Windows Game Project (.net8) | WinForms | DirectX11 | XAudio |\n| `kni-winforms-dx11-netframework` | KNI Windows Game Project (.NET Framework) | WinForms | DirectX11 | XAudio |\n| `kni-uap-core-dx11-netframework` | KNI Windows 10 Universal (Core) Game Project (.uap10) | UWP Core | DirectX11 | XAudio |\n| `kni-uap-xaml-dx11-netframework` | KNI Windows 10 Universal (XAML) Game Project (.uap10) | UWP XAML | DirectX11 | XAudio |\n| `kni-multiplatform` | KNI Multiplatform Game Project (.net8) | Android/Blazor/SDL2/WinForms | GLES/WebGL/OpenGL/DirectX11 | OpenAL/WebAudio/XAudio |\n| `kni-multiplatform-netframework` | KNI Multiplatform Game Project (.NET Framework) | SDL2/WinForms/UWP | DirectX11/OpenGL | XAudio/OpenAL |\n| `kni-ContentPipelineExtension` | KNI Content Pipeline Extension Project (.NetStandard) | - | - | - |\n\n### Item templates\n\n| Short name | Template |\n|---|---|\n| `KniDrawableGameComponent` | KNI DrawableGameComponent Item |\n| `KniGameComponent` | KNI GameComponent Item |\n\n## What is included\n\nThis package includes templates for KNI game projects and related project setups available under the `Templates/dotnetTemplates/content` folder.\n\n## Links\n\n- Repository: https://github.com/kniEngine/kni\n- Issues: https://github.com/kniEngine/kni/issues\n- Discussions: https://github.com/kniEngine/kni/discussions\n"
  },
  {
    "path": "Templates/dotnetTemplates/Uninstall.bat",
    "content": "dotnet new uninstall .\\\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/$projectname$.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-android</TargetFramework>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <IsTrimmable>True</IsTrimmable>\n    <TrimMode>partial</TrimMode>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);ANDROID</DefineConstants>\n    <KniPlatform>Android</KniPlatform>\n    <ApplicationId>com.companyname.$safeprojectname$</ApplicationId>\n    <ApplicationVersion>1</ApplicationVersion>\n    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n    <AndroidStoreUncompressedFileExtensions>.m4a</AndroidStoreUncompressedFileExtensions>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Android.GL\" Version=\"4.2.9001.1\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"$projectname$Activity.cs\" />\n    <Compile Include=\"$projectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"AndroidManifest.xml\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Splash.png\" />\n    <AndroidResource Include=\"Resources\\Values\\Strings.xml\" />\n    <AndroidResource Include=\"Resources\\Values\\Styles.xml\" />\n    <Folder Include=\"Resources\\Layout\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$projectname$Content.mgcb\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/$projectname$Activity.cs",
    "content": "using Microsoft.Xna.Framework;\nusing Android.App;\nusing Android.Content.PM;\nusing Android.OS;\nusing Android.Views;\n\nnamespace $safeprojectname$\n{\n    [Activity(Label = \"$projectname$\"\n        , MainLauncher = true\n        , Icon = \"@drawable/icon\"\n        , Theme = \"@style/Theme.Splash\"\n        , AlwaysRetainTaskState = true\n        , LaunchMode = LaunchMode.SingleInstance\n        , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize\n        , ScreenOrientation = ScreenOrientation.FullSensor\n    )]\n    public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity\n    {\n        protected override void OnCreate(Bundle bundle)\n        {\n            base.OnCreate(bundle);\n            Game game = new $safeprojectname$Game();\n            SetContentView((View)game.Services.GetService(typeof(View)));\n            game.Run();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/$projectname$Game.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.IsFullScreen = true;\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Android\", \"mobile\" ],\n  \"identity\": \"nkast.Kni.Android.GL.Project.CSharp\",\n  \"name\": \"KNI Android Game Project\",\n  \"shortName\": \"kni-android-gl\",\n  \"description\": \"A KNI game project for Android.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"$safeprojectname$.$safeprojectname$\" android:versionCode=\"1\" android:versionName=\"1.0\">\n\t<application android:label=\"$projectname$\"></application>\n\t<uses-permission android:name=\"android.permission.VIBRATE\" />\n\t<uses-permission android:name=\"android.permission.INTERNET\" />\n\t<uses-permission android:name=\"com.android.vending.BILLING\" />\n</manifest>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with your package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Android\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (Main.xml),\nan internationalization string table (Strings.xml) and some icons (drawable/Icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    Drawable/\n        Icon.png\n\n    Layout/\n        Main.axml\n\n    Values/\n        Strings.xml\n\nIn order to get the build system to recognize Android resources, the build action should be set \nto \"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called\n\"Resource\" that contains the tokens for each one of the resources included. For example, \nfor the above Resources layout, this is what the Resource class would expose:\n\npublic class Resource {\n    public class Drawable {\n        public const int Icon = 0x123;\n    }\n\n    public class Layout {\n        public const int Main = 0x456;\n    }\n\n    public class String {\n        public const int FirstString = 0xabc;\n        public const int SecondString = 0xbcd;\n    }\n}\n\nYou would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or \nResource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString\nto reference the first string in the dictionary file Values/Strings.xml."
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/Resources/Resource.Designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.269\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace $safeprojectname$\n{\n\t\n\t\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020001\n\t\t\tpublic const int Splash = 2130837505;\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int ApplicationName = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Hello = 2130903040;\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int Theme_Splash = 2130968576;\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ApplicationName\">$safeprojectname$</string>\n</resources>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Android.NetCore.CSharp/Resources/Values/Styles.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <style name=\"Theme.Splash\" parent=\"android:Theme\">\n    <item name=\"android:windowBackground\">@drawable/splash</item>\n    <item name=\"android:windowNoTitle\">true</item>\n  </style>\n</resources>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/$projectname$.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0</TargetFramework>\n    <Nullable>disable</Nullable>\n    <ImplicitUsings>disable</ImplicitUsings>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefineConstants>$(DefineConstants);BLAZORGL</DefineConstants>\n\t<KniPlatform>BlazorGL</KniPlatform>\n  </PropertyGroup>\n  \n  <PropertyGroup>\n    <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>\n    <!--<InvariantGlobalization>true</InvariantGlobalization>-->\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Pages\\Index.razor.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"$projectname$Game.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Blazor.GL\" Version=\"4.2.9001.2\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.17\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.17\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$projectname$Content.mgcb\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/.template.config/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Web browser Platform Project (.net8)</Name>\n    <Description>A KNI game project for Blazor webassembly using WebGL.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>web</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>web</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43300</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"$safeprojectname$Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"_Imports.razor\">_Imports.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"App.razor\">App.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>      \n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"MainLayout.razor\">MainLayout.razor</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"MainLayout.razor.css\">MainLayout.razor.css</ProjectItem>      \n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Program.cs\">Program.cs</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Pages\" TargetFolderName=\"Pages\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Index.razor\">Index.razor</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Index.razor.cs\">Index.razor.cs</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Properties\" TargetFolderName=\"Properties\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"launchSettings.json\">launchSettings.json</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"wwwroot\" TargetFolderName=\"wwwroot\">\n        <Folder Name=\"css\" TargetFolderName=\"css\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"app.css\">app.css</ProjectItem>\n            <Folder Name=\"bootstrap\" TargetFolderName=\"bootstrap\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bootstrap.min.css\">bootstrap.min.css</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bootstrap.min.css.map\">bootstrap.min.css.map</ProjectItem>\n            </Folder>\n        </Folder>\n        <Folder Name=\"js\" TargetFolderName=\"js\">\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"decode.min.js\">decode.min.js</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"streamProcessor.js\">streamProcessor.js</ProjectItem>\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"micProcessor.js\">micProcessor.js</ProjectItem>\n        </Folder>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"favicon.ico\">favicon.ico</ProjectItem>\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"kni.png\">kni.png</ProjectItem>\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"index.html\">index.html</ProjectItem>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Web\" ],\n  \"identity\": \"nkast.Kni.Blazor.GL.Project.CSharp\",\n  \"name\": \"KNI Web Game Project (.net8)\",\n  \"shortName\": \"kni-blazor-gl\",\n  \"description\": \"A KNI game project for Blazor webassembly using WebGL.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/App.razor",
    "content": "﻿<Router AppAssembly=\"@typeof(App).Assembly\">\n    <Found Context=\"routeData\">\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\n        <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\n    </Found>\n    <NotFound>\n        <PageTitle>Not found</PageTitle>\n        <LayoutView Layout=\"@typeof(MainLayout)\">\n            <p role=\"alert\">Sorry, there's nothing at this address.</p>\n        </LayoutView>\n    </NotFound>\n</Router>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:BlazorGL\n/config:\n/profile:Reach\n/compress:True\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/MainLayout.razor",
    "content": "﻿@inherits LayoutComponentBase\n\n<div class=\"page\">\n    <main>\n            @Body\n    </main>\n</div>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/MainLayout.razor.css",
    "content": ".page\n{\n    position: relative;\n    display: flex;\n    flex-direction: column;\n}\n\nmain\n{\n    flex: 1;\n}\n\n.sidebar\n{\n    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);\n}\n\n.top-row\n{\n    background-color: #f7f7f7;\n    border-bottom: 1px solid #d6d5d5;\n    justify-content: flex-end;\n    height: 3.5rem;\n    display: flex;\n    align-items: center;\n}\n\n    .top-row ::deep a, .top-row ::deep .btn-link\n    {\n        white-space: nowrap;\n        margin-left: 1.5rem;\n        text-decoration: none;\n    }\n\n    .top-row ::deep a:hover, .top-row ::deep .btn-link:hover\n    {\n        text-decoration: underline;\n    }\n\n    .top-row ::deep a:first-child\n    {\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n\n@media (max-width: 640.98px)\n{\n    .top-row:not(.auth)\n    {\n        display: none;\n    }\n\n    .top-row.auth\n    {\n        justify-content: space-between;\n    }\n\n    .top-row ::deep a, .top-row ::deep .btn-link\n    {\n        margin-left: 0;\n    }\n}\n\n@media (min-width: 641px)\n{\n    .page\n    {\n        flex-direction: row;\n    }\n\n    .sidebar\n    {\n        width: 250px;\n        height: 100vh;\n        position: sticky;\n        top: 0;\n    }\n\n    .top-row\n    {\n        position: sticky;\n        top: 0;\n        z-index: 1;\n    }\n\n    .top-row.auth ::deep a:first-child\n    {\n        flex: 1;\n        text-align: right;\n        width: 0;\n    }\n\n    .top-row, article\n    {\n        padding-left: 2rem !important;\n        padding-right: 1.5rem !important;\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Pages/Index.razor",
    "content": "﻿@page \"/\"\n@page \"/index.html\"\n@inject IJSRuntime JsRuntime\n@using nkast.Wasm.Canvas\n\n<PageTitle>$projectname$</PageTitle>\n\n<div id=\"canvasHolder\" style=\"\n    background: #000;\n    margin:0%;\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n    width:100vw;\n    height:100vh;\n\">\n    <canvas id=\"theCanvas\" style=\"touch-action:none;\"></canvas>\n</div>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Pages/Index.razor.cs",
    "content": "using System;\nusing Microsoft.JSInterop;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$.Pages\n{\n    public partial class Index\n    {\n        Game _game;\n\n        protected override void OnAfterRender(bool firstRender)\n        {\n            base.OnAfterRender(firstRender);\n\n            if (firstRender)\n            {\n                JsRuntime.InvokeAsync<object>(\"initRenderJS\", DotNetObjectReference.Create(this));\n            }\n        }\n\n        [JSInvokable]\n        public void TickDotNet()\n        {\n            // init game\n            if (_game == null)\n            {\n                _game = new $safeprojectname$Game();\n                _game.Run();\n            }\n\n            // run gameloop\n            _game.Tick();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Program.cs",
    "content": "using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Components.Web;\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace $safeprojectname$\n{\n    internal class Program\n    {\n        private static async Task Main(string[] args)\n        {\n            var builder = WebAssemblyHostBuilder.CreateDefault(args);\n            builder.RootComponents.Add<App>(\"#app\");\n            builder.RootComponents.Add<HeadOutlet>(\"head::after\");\n            builder.Services.AddScoped(sp => new HttpClient()\n            {\n                BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)\n            });\n            await builder.Build().RunAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:56897\",\n      \"sslPort\": 0\n    }\n  },\n  \"profiles\": {\n    \"$safeprojectname$\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": true,\n      \"launchBrowser\": true,\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\",\n      \"applicationUrl\": \"http://localhost:5259\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/_Imports.razor",
    "content": "﻿@using System.Net.Http\n@using System.Net.Http.Json\n@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNetCore.Components.Routing\n@using Microsoft.AspNetCore.Components.Web\n@using Microsoft.AspNetCore.Components.Web.Virtualization\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\n@using Microsoft.JSInterop\n@using nkast.Wasm.Canvas\n@using $safeprojectname$\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/Content/.gitignore",
    "content": ""
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/css/app.css",
    "content": "﻿\nhtml, body\n{\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n\nh1:focus\n{\n    outline: none;\n}\n\na, .btn-link\n{\n    color: #0077cc;\n}\n\n.btn-primary\n{\n    color: #fff;\n    background-color: #1b6ec2;\n    border-color: #1861ac;\n}\n\n.content\n{\n    padding-top: 1.1rem;\n}\n\n.valid.modified:not([type=checkbox])\n{\n    outline: 1px solid #26b050;\n}\n\n.invalid\n{\n    outline: 1px solid red;\n}\n\n.validation-message\n{\n    color: red;\n}\n\n#blazor-error-ui\n{\n    background: lightyellow;\n    bottom: 0;\n    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);\n    display: none;\n    left: 0;\n    padding: 0.6rem 1.25rem 0.7rem 1.25rem;\n    position: fixed;\n    width: 100%;\n    z-index: 1000;\n}\n\n    #blazor-error-ui .dismiss\n    {\n        cursor: pointer;\n        position: absolute;\n        right: 0.75rem;\n        top: 0.5rem;\n    }\n\n.blazor-error-boundary\n{\n    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;\n    padding: 1rem 1rem 1rem 3.7rem;\n    color: white;\n}\n\n    .blazor-error-boundary::after\n    {\n        content: \"An error has occurred.\"\n    }\n\n#theCanvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n\n    /* Disable text highlighting and magnifying glass on iPhone/webkit */\n    -webkit-user-select: none;\n}\n\n\n#canvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/index.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n    <title>$projectname$</title>\n    <base href=\"./\" />\n    <link href=\"css/bootstrap/bootstrap.min.css\" rel=\"stylesheet\" />\n    <link href=\"css/app.css\" rel=\"stylesheet\" />\n    <link href=\"$projectname$.styles.css\" rel=\"stylesheet\" />\n</head>\n\n<body>\n\n    <div id=\"app\">\n        <div id=\"loading\" style=\"display: table-cell; margin: auto; width:100vw; height:100vh; vertical-align: middle; background: #ffcc10;\">\n            <div style=\"display: block; margin: auto; width: 9em; color: white;font-family: 'Segoe UI', sans-serif;\">\n                <div style=\"text-align: center; font-size: 0.85em;\">Made with<br/><a href=\"https://github.com/kniEngine/kni\"><img src=\"kni.png\" border=\"0\" alt=\"Kni\"></a></div>\n                <div style=\"text-align: center; font-size: 1.8em;\">loading&nbsp;<marquee style=\"width:0.9em; vertical-align: bottom;\">.&nbsp;.&nbsp;.&nbsp;&nbsp;&nbsp;</marquee></div>\n            </div>\n        </div>\n    </div>\n\n    <div id=\"blazor-error-ui\">\n        An unhandled error has occurred.\n        <a href=\"\" class=\"reload\">Reload</a>\n        <a class=\"dismiss\">x</a>\n    </div>\n\n    <script src=\"_framework/blazor.webassembly.js\" autostart=\"false\"></script>\n    <script type=\"module\">\n        import { BrotliDecode } from './js/decode.min.js';\n        window.BrotliDecode = BrotliDecode;\n        // Set this to enable Brotli (.br) decompression on static webServers\n        // that don't support content compression and http://.\n        var enableBrotliDecompression = false;\n        Blazor.start({\n            loadBootResource: function (type, name, defaultUri, integrity)\n            {\n                if (enableBrotliDecompression === true && type !== 'dotnetjs' && location.hostname !== 'localhost')\n                {\n                    return (async function()\n                    {\n                        const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });\n                        if (!response.ok)\n                            throw new Error(response.statusText);\n                        const originalResponseBuffer = await response.arrayBuffer();\n                        const originalResponseArray = new Int8Array(originalResponseBuffer);\n                        const contentType = (type === 'dotnetwasm')\n                                          ? 'application/wasm'\n                                          : 'application/octet-stream';\n                        const decompressedResponseArray = BrotliDecode(originalResponseArray);\n                        return new Response(decompressedResponseArray,\n                                            { headers: { 'content-type': contentType }\n                                   });\n                    })();\n                }\n            }\n        });\n    </script>\n\n    <script src=\"_content/nkast.Wasm.JSInterop/js/JSObject.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XR/js/XR.8.0.11.js\"></script>\n\n    <script>\n        function tickJS()\n        {\n            window.theInstance.invokeMethod('TickDotNet');\n            window.requestAnimationFrame(tickJS);\n        }\n\n        window.initRenderJS = (instance) =>\n        {\n            window.theInstance = instance;\n\n            // set initial canvas size\n            var canvas = document.getElementById('theCanvas');\n            var holder = document.getElementById('canvasHolder');\n            canvas.width = holder.clientWidth;\n            canvas.height = holder.clientHeight;\n            // disable context menu on right click\n            canvas.addEventListener(\"contextmenu\", e => e.preventDefault());\n            \n            // begin game loop\n            window.requestAnimationFrame(tickJS);\n        };\n\n        window.addEventListener(\"keydown\", function(event)\n        {\n            // Prevent Arrows Keys and Spacebar scrolling the outer page\n            // when running inside an iframe. e.g: itch.io embedding.\n            if ([32, 37, 38, 39, 40].indexOf(event.keyCode) > -1)\n                event.preventDefault();\n        });\n        window.addEventListener(\"wheel\", function(event)\n        {\n            // Prevent Mousewheel scrolling the outer page\n            // when running inside an iframe. e.g: itch.io embedding.\n            event.preventDefault();\n        }, { passive: false });\n    </script>\n</body>\n\n</html>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/js/decode.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @typedef {!Object} Options\n * @property {?Int8Array} customDictionary\n */\nlet Options;\n\n/**\n * Private scope / static initializer for decoder.\n *\n * @return {function(!Int8Array, ?Options=):!Int8Array}\n */\nlet makeBrotliDecode = () => {\n/* GENERATED CODE BEGIN */\n  /** @type {!Int32Array} */\n  const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\n  /** @type {!Int32Array} */\n  const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\n  /** @type {!Int32Array} */\n  const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\n  /** @type {!Int16Array} */\n  const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\n  /** @type {!Int16Array} */\n  const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\n  /** @type {!Int16Array} */\n  const CMD_LOOKUP = new Int16Array(2816);\n  {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n  /**\n   * @param {number} i\n   * @return {number}\n   */\n  function log2floor(i) {\n    let /** @type {number} */ result = -1;\n    let /** @type {number} */ step = 16;\n    while (step > 0) {\n      if ((i >>> step) !== 0) {\n        result += step;\n        i = i >>> step;\n      }\n      step = step >> 1;\n    }\n    return result + i;\n  }\n  /**\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @param {number} maxndistbits\n   * @return {number}\n   */\n  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {\n    return 16 + ndirect + 2 * (maxndistbits << npostfix);\n  }\n  /**\n   * @param {number} maxDistance\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @return {number}\n   */\n  function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      throw new Error(\"maxDistance is too small\");\n    }\n    const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    const /** @type {number} */ ndistbits = log2floor(offset) - 1;\n    const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n  }\n  /**\n   * @param {!Int16Array} cmdLookup\n   * @return {void}\n   */\n  function unpackCommandLookupTable(cmdLookup) {\n    const /** @type {!Int16Array} */ insertLengthOffsets = new Int16Array(24);\n    const /** @type {!Int16Array} */ copyLengthOffsets = new Int16Array(24);\n    copyLengthOffsets[0] = 2;\n    for (let /** @type {number} */ i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]));\n      copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]));\n    }\n    for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) {\n      let /** @type {number} */ rangeIdx = cmdCode >>> 6;\n      let /** @type {number} */ distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      const /** @type {number} */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7);\n      const /** @type {number} */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode];\n      const /** @type {number} */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2);\n      const /** @type {number} */ index = cmdCode * 4;\n      cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8));\n      cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = distanceContext;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeWindowBits(s) {\n    const /** @type {number} */ largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 0) {\n      return 16;\n    }\n    let /** @type {number} */ n = readFewBits(s, 3);\n    if (n !== 0) {\n      return 17 + n;\n    }\n    n = readFewBits(s, 3);\n    if (n !== 0) {\n      if (n === 1) {\n        if (largeWindowEnabled === 0) {\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        if (readFewBits(s, 1) === 1) {\n          return -1;\n        }\n        n = readFewBits(s, 6);\n        if (n < 10 || n > 30) {\n          return -1;\n        }\n        return n;\n      } else {\n        return 8 + n;\n      }\n    }\n    return 17;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableEagerOutput(s) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    s.isEager = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableLargeWindow(s) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    s.isLargeWindow = 1;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @return {void}\n   */\n  function attachDictionaryChunk(s, data) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    if (s.cdNumChunks === 0) {\n      s.cdChunks = new Array(16);\n      s.cdChunkOffsets = new Int32Array(16);\n      s.cdBlockBits = -1;\n    }\n    if (s.cdNumChunks === 15) {\n      throw new Error(\"Too many dictionary chunks\");\n    }\n    s.cdChunks[s.cdNumChunks] = data;\n    s.cdNumChunks++;\n    s.cdTotalSize += data.length;\n    s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n  }\n  /**\n   * @param {!State} s\n   * @param {!InputStream} input\n   * @return {void}\n   */\n  function initState(s, input) {\n    if (s.runningState !== 0) {\n      throw new Error(\"State MUST be uninitialized\");\n    }\n    s.blockTrees = new Int32Array(3091);\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    const /** @type {number} */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 120);\n    s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n    s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n    s.input = input;\n    initBitReader(s);\n    s.runningState = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function close(s) {\n    if (s.runningState === 0) {\n      throw new Error(\"State MUST be initialized\");\n    }\n    if (s.runningState === 11) {\n      return;\n    }\n    s.runningState = 11;\n    if (s.input !== null) {\n      s.input = null;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeVarLenUnsignedByte(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) !== 0) {\n      const /** @type {number} */ n = readFewBits(s, 3);\n      if (n === 0) {\n        return 1;\n      } else {\n        return readFewBits(s, n) + (1 << n);\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeMetaBlockLength(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.inputEnd = readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) {\n      return;\n    }\n    const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4;\n    if (sizeNibbles === 7) {\n      s.isMetadata = 1;\n      if (readFewBits(s, 1) !== 0) {\n        throw new Error(\"Corrupted reserved bit\");\n      }\n      const /** @type {number} */ sizeBytes = readFewBits(s, 2);\n      if (sizeBytes === 0) {\n        return;\n      }\n      for (let /** @type {number} */ i = 0; i < sizeBytes; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 8);\n        if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) {\n          throw new Error(\"Exuberant nibble\");\n        }\n        s.metaBlockLength |= bits << (i * 8);\n      }\n    } else {\n      for (let /** @type {number} */ i = 0; i < sizeNibbles; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 4);\n        if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) {\n          throw new Error(\"Exuberant nibble\");\n        }\n        s.metaBlockLength |= bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd === 0) {\n      s.isUncompressed = readFewBits(s, 1);\n    }\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSymbol(tableGroup, tableIdx, s) {\n    let /** @type {number} */ offset = tableGroup[tableIdx];\n    const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset);\n    offset += val & 0xFF;\n    const /** @type {number} */ bits = tableGroup[offset] >> 16;\n    const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= 8) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    const /** @type {number} */ mask = (1 << bits) - 1;\n    offset += (val & mask) >>> 8;\n    s.bitOffset += ((tableGroup[offset] >> 16) + 8);\n    return tableGroup[offset] & 0xFFFF;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readBlockLength(tableGroup, tableIdx, s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s);\n    const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n  }\n  /**\n   * @param {!Int32Array} v\n   * @param {number} index\n   * @return {void}\n   */\n  function moveToFront(v, index) {\n    const /** @type {number} */ value = v[index];\n    for (; index > 0; index--) {\n      v[index] = v[index - 1];\n    }\n    v[0] = value;\n  }\n  /**\n   * @param {!Int8Array} v\n   * @param {number} vLen\n   * @return {void}\n   */\n  function inverseMoveToFrontTransform(v, vLen) {\n    const /** @type {!Int32Array} */ mtf = new Int32Array(256);\n    for (let /** @type {number} */ i = 0; i < 256; i++) {\n      mtf[i] = i;\n    }\n    for (let /** @type {number} */ i = 0; i < vLen; i++) {\n      const /** @type {number} */ index = v[i] & 0xFF;\n      v[i] = mtf[index];\n      if (index !== 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n  /**\n   * @param {!Int32Array} codeLengthCodeLengths\n   * @param {number} numSymbols\n   * @param {!Int32Array} codeLengths\n   * @param {!State} s\n   * @return {void}\n   */\n  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {\n    let /** @type {number} */ symbol = 0;\n    let /** @type {number} */ prevCodeLen = 8;\n    let /** @type {number} */ repeat = 0;\n    let /** @type {number} */ repeatCodeLen = 0;\n    let /** @type {number} */ space = 32768;\n    const /** @type {!Int32Array} */ table = new Int32Array(33);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31;\n      s.bitOffset += table[p] >> 16;\n      const /** @type {number} */ codeLen = table[p] & 0xFFFF;\n      if (codeLen < 16) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen !== 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        const /** @type {number} */ extraBits = codeLen - 14;\n        let /** @type {number} */ newLen = 0;\n        if (codeLen === 16) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen !== newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        const /** @type {number} */ oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat <<= extraBits;\n        }\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        repeat += readFewBits(s, extraBits) + 3;\n        const /** @type {number} */ repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          throw new Error(\"symbol + repeatDelta > numSymbols\");\n        }\n        for (let /** @type {number} */ i = 0; i < repeatDelta; i++) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen !== 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space !== 0) {\n      throw new Error(\"Unused space\");\n    }\n    codeLengths.fill(0, symbol, numSymbols);\n  }\n  /**\n   * @param {!Int32Array} symbols\n   * @param {number} length\n   * @return {void}\n   */\n  function checkDupes(symbols, length) {\n    for (let /** @type {number} */ i = 0; i < length - 1; ++i) {\n      for (let /** @type {number} */ j = i + 1; j < length; ++j) {\n        if (symbols[i] === symbols[j]) {\n          throw new Error(\"Duplicate simple Huffman code symbol\");\n        }\n      }\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ symbols = new Int32Array(4);\n    const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1);\n    const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1;\n    for (let /** @type {number} */ i = 0; i < numSymbols; i++) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ symbol = readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        throw new Error(\"Can't readHuffmanCode\");\n      }\n      symbols[i] = symbol;\n    }\n    checkDupes(symbols, numSymbols);\n    let /** @type {number} */ histogramId = numSymbols;\n    if (numSymbols === 4) {\n      histogramId += readFewBits(s, 1);\n    }\n    switch(histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n      case 4:\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n      case 5:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n      default:\n        break;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} skip\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18);\n    let /** @type {number} */ space = 32;\n    let /** @type {number} */ numCodes = 0;\n    for (let /** @type {number} */ i = skip; i < 18 && space > 0; i++) {\n      const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15;\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v !== 0) {\n        space -= (32 >> v);\n        numCodes++;\n      }\n    }\n    if (space !== 0 && numCodes !== 1) {\n      throw new Error(\"Corrupted Huffman code histogram\");\n    }\n    readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2);\n    if (simpleCodeOrSkip === 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    } else {\n      return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n    }\n  }\n  /**\n   * @param {number} contextMapSize\n   * @param {!Int8Array} contextMap\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeContextMap(contextMapSize, contextMap, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1;\n    if (numTrees === 1) {\n      contextMap.fill(0, 0, contextMapSize);\n      return numTrees;\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ useRleForZeros = readFewBits(s, 1);\n    let /** @type {number} */ maxRunLengthPrefix = 0;\n    if (useRleForZeros !== 0) {\n      maxRunLengthPrefix = readFewBits(s, 4) + 1;\n    }\n    const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix;\n    const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    for (let /** @type {number} */ i = 0; i < contextMapSize; ) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ code = readSymbol(table, tableIdx, s);\n      if (code === 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        let /** @type {number} */ reps = (1 << code) + readFewBits(s, code);\n        while (reps !== 0) {\n          if (i >= contextMapSize) {\n            throw new Error(\"Corrupted context map\");\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = (code - maxRunLengthPrefix);\n        i++;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {\n    const /** @type {!Int32Array} */ ringBuffers = s.rings;\n    const /** @type {number} */ offset = 4 + treeType * 2;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n    if (blockType === 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType === 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeLiteralBlockSwitch(s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    const /** @type {number} */ literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << 6;\n    s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n    const /** @type {number} */ contextMode = s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeCommandBlockSwitch(s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeDistanceBlockSwitch(s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function maybeReallocateRingBuffer(s) {\n    let /** @type {number} */ newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      const /** @type {number} */ minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize >>= 1;\n      }\n      if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37;\n    const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack);\n    if (s.ringBuffer.length !== 0) {\n      newBuffer.set(s.ringBuffer.subarray(0, s.ringBufferSize), 0);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readNextMetablockHeader(s) {\n    if (s.inputEnd !== 0) {\n      s.nextRunningState = 10;\n      s.runningState = 12;\n      return;\n    }\n    s.literalTreeGroup = new Int32Array(0);\n    s.commandTreeGroup = new Int32Array(0);\n    s.distanceTreeGroup = new Int32Array(0);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    decodeMetaBlockLength(s);\n    if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) {\n      return;\n    }\n    if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) {\n      jumpToByteBoundary(s);\n      s.runningState = (s.isMetadata !== 0) ? 5 : 6;\n    } else {\n      s.runningState = 3;\n    }\n    if (s.isMetadata !== 0) {\n      return;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function readMetablockPartition(s, treeType, numBlockTypes) {\n    let /** @type {number} */ offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n    const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2;\n    offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    s.blockTrees[2 * treeType + 1] = offset;\n    const /** @type {number} */ blockLengthAlphabetSize = 26;\n    offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    s.blockTrees[2 * treeType + 2] = offset;\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} alphabetSizeLimit\n   * @return {void}\n   */\n  function calculateDistanceLut(s, alphabetSizeLimit) {\n    const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits;\n    const /** @type {!Int32Array} */ distOffset = s.distOffset;\n    const /** @type {number} */ npostfix = s.distancePostfixBits;\n    const /** @type {number} */ ndirect = s.numDirectDistanceCodes;\n    const /** @type {number} */ postfix = 1 << npostfix;\n    let /** @type {number} */ bits = 1;\n    let /** @type {number} */ half = 0;\n    let /** @type {number} */ i = 16;\n    for (let /** @type {number} */ j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n    while (i < alphabetSizeLimit) {\n      const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      for (let /** @type {number} */ j = 0; j < postfix; ++j) {\n        distExtraBits[i] = bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readMetablockHuffmanCodesAndContextMaps(s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.distancePostfixBits = readFewBits(s, 2);\n    s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n    s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n    for (let /** @type {number} */ i = 0; i < s.numLiteralBlockTypes; ) {\n      const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes);\n      for (; i < limit; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        s.contextModes[i] = readFewBits(s, 2);\n      }\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n    }\n    s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6);\n    const /** @type {number} */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s);\n    s.trivialLiteralContext = 1;\n    for (let /** @type {number} */ j = 0; j < s.numLiteralBlockTypes << 6; j++) {\n      if (s.contextMap[j] !== j >> 6) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n    s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n    const /** @type {number} */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n    s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s);\n    s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s);\n    let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n    let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow === 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n      distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n    }\n    s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s);\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function copyUncompressedData(s) {\n    const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    if (s.metaBlockLength <= 0) {\n      reload(s);\n      s.runningState = 2;\n      return;\n    }\n    const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos === s.ringBufferSize) {\n      s.nextRunningState = 6;\n      s.runningState = 12;\n      return;\n    }\n    reload(s);\n    s.runningState = 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function writeRingBuffer(s) {\n    const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    if (toWrite !== 0) {\n      s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n    if (s.outputUsed < s.outputLength) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @param {!State} s\n   * @return {!Int32Array}\n   */\n  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) {\n    const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    const /** @type {!Int32Array} */ group = new Int32Array(n + n * maxTableSize);\n    let /** @type {number} */ next = n;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      group[i] = next;\n      next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n    }\n    return group;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function calculateFence(s) {\n    let /** @type {number} */ result = s.ringBufferSize;\n    if (s.isEager !== 0) {\n      result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {void}\n   */\n  function doUseDictionary(s, fence) {\n    if (s.distance > 0x7FFFFFFC) {\n      throw new Error(\"Invalid backward reference\");\n    }\n    const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n    if (address < 0) {\n      initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n      s.runningState = 14;\n    } else {\n      const /** @type {!ByteBuffer} */ dictionaryData = data;\n      const /** @type {number} */ wordLength = s.copyLength;\n      if (wordLength > 31) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      const /** @type {number} */ shift = sizeBits[wordLength];\n      if (shift === 0) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      let /** @type {number} */ offset = offsets[wordLength];\n      const /** @type {number} */ mask = (1 << shift) - 1;\n      const /** @type {number} */ wordIdx = address & mask;\n      const /** @type {number} */ transformIdx = address >>> shift;\n      offset += wordIdx * wordLength;\n      const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS;\n      if (transformIdx >= transforms.numTransforms) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);\n      s.pos += len;\n      s.metaBlockLength -= len;\n      if (s.pos >= fence) {\n        s.nextRunningState = 4;\n        s.runningState = 12;\n        return;\n      }\n      s.runningState = 4;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initializeCompoundDictionary(s) {\n    s.cdBlockMap = new Int8Array(256);\n    let /** @type {number} */ blockBits = 8;\n    while (((s.cdTotalSize - 1) >>> blockBits) !== 0) {\n      blockBits++;\n    }\n    blockBits -= 8;\n    s.cdBlockBits = blockBits;\n    let /** @type {number} */ cursor = 0;\n    let /** @type {number} */ index = 0;\n    while (cursor < s.cdTotalSize) {\n      while (s.cdChunkOffsets[index + 1] < cursor) {\n        index++;\n      }\n      s.cdBlockMap[cursor >>> blockBits] = index;\n      cursor += 1 << blockBits;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} address\n   * @param {number} length\n   * @return {void}\n   */\n  function initializeCompoundDictionaryCopy(s, address, length) {\n    if (s.cdBlockBits === -1) {\n      initializeCompoundDictionary(s);\n    }\n    let /** @type {number} */ index = s.cdBlockMap[address >>> s.cdBlockBits];\n    while (address >= s.cdChunkOffsets[index + 1]) {\n      index++;\n    }\n    if (s.cdTotalSize > address + length) {\n      throw new Error(\"Invalid backward reference\");\n    }\n    s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n    s.rings[s.distRbIdx] = s.distance;\n    s.metaBlockLength -= length;\n    s.cdBrIndex = index;\n    s.cdBrOffset = address - s.cdChunkOffsets[index];\n    s.cdBrLength = length;\n    s.cdBrCopied = 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {number}\n   */\n  function copyFromCompoundDictionary(s, fence) {\n    let /** @type {number} */ pos = s.pos;\n    const /** @type {number} */ origPos = pos;\n    while (s.cdBrLength !== s.cdBrCopied) {\n      const /** @type {number} */ space = fence - pos;\n      const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n      const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset;\n      let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied;\n      if (length > remChunkLength) {\n        length = remChunkLength;\n      }\n      if (length > space) {\n        length = space;\n      }\n      s.ringBuffer.set(s.cdChunks[s.cdBrIndex].slice(s.cdBrOffset, s.cdBrOffset + length), pos);\n      pos += length;\n      s.cdBrOffset += length;\n      s.cdBrCopied += length;\n      if (length === remChunkLength) {\n        s.cdBrIndex++;\n        s.cdBrOffset = 0;\n      }\n      if (pos >= fence) {\n        break;\n      }\n    }\n    return pos - origPos;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decompress(s) {\n    if (s.runningState === 0) {\n      throw new Error(\"Can't decompress until initialized\");\n    }\n    if (s.runningState === 11) {\n      throw new Error(\"Can't decompress after close\");\n    }\n    if (s.runningState === 1) {\n      const /** @type {number} */ windowBits = decodeWindowBits(s);\n      if (windowBits === -1) {\n        throw new Error(\"Invalid 'windowBits' code\");\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = 2;\n    }\n    let /** @type {number} */ fence = calculateFence(s);\n    let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1;\n    let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    while (s.runningState !== 10) {\n      switch(s.runningState) {\n        case 2:\n          if (s.metaBlockLength < 0) {\n            throw new Error(\"Invalid metablock length\");\n          }\n          readNextMetablockHeader(s);\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n        case 3:\n          readMetablockHuffmanCodesAndContextMaps(s);\n          s.runningState = 4;\n        case 4:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 2;\n            continue;\n          }\n          if (s.halfOffset > 2030) {\n            doReadMoreInput(s);\n          }\n          if (s.commandBlockLength === 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];\n          const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1];\n          const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF;\n          s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8;\n          s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));\n          s.j = 0;\n          s.runningState = 7;\n        case 7:\n          if (s.trivialLiteralContext !== 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          } else {\n            let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n              const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState !== 7) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 4;\n            continue;\n          }\n          let /** @type {number} */ distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.distanceBlockLength === 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < 16) {\n              const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                throw new Error(\"Negative distance\");\n              }\n            } else {\n              const /** @type {number} */ extraBits = s.distExtraBits[distanceCode];\n              let /** @type {number} */ bits;\n              if (s.bitOffset + extraBits <= 32) {\n                bits = readFewBits(s, extraBits);\n              } else {\n                if (s.bitOffset >= 16) {\n                  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                  s.bitOffset -= 16;\n                }\n                bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits);\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n          if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.distance > s.maxDistance) {\n            s.runningState = 9;\n            continue;\n          }\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n          if (s.copyLength > s.metaBlockLength) {\n            throw new Error(\"Invalid backward reference\");\n          }\n          s.j = 0;\n          s.runningState = 8;\n        case 8:\n          let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask;\n          let /** @type {number} */ dst = s.pos;\n          const /** @type {number} */ copyLength = s.copyLength - s.j;\n          const /** @type {number} */ srcEnd = src + copyLength;\n          const /** @type {number} */ dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              for (let /** @type {number} */ k = 0; k < copyLength; k += 4) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              ringBuffer.copyWithin(dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            for (; s.j < s.copyLength; ) {\n              ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 8;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState === 8) {\n            s.runningState = 4;\n          }\n          continue;\n        case 9:\n          doUseDictionary(s, fence);\n          continue;\n        case 14:\n          s.pos += copyFromCompoundDictionary(s, fence);\n          if (s.pos >= fence) {\n            s.nextRunningState = 14;\n            s.runningState = 12;\n            return;\n          }\n          s.runningState = 4;\n          continue;\n        case 5:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = 2;\n          continue;\n        case 6:\n          copyUncompressedData(s);\n          continue;\n        case 12:\n          s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize);\n          s.runningState = 13;\n        case 13:\n          if (writeRingBuffer(s) === 0) {\n            return;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n            }\n            s.pos &= ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n        default:\n          throw new Error(\"Unexpected state \" + valueOf(s.runningState));\n      }\n    }\n    if (s.runningState === 10) {\n      if (s.metaBlockLength < 0) {\n        throw new Error(\"Invalid metablock length\");\n      }\n      jumpToByteBoundary(s);\n      checkHealth(s, 1);\n    }\n  }\n\n  /**\n   * @constructor\n   * @param {number} numTransforms\n   * @param {number} prefixSuffixLen\n   * @param {number} prefixSuffixCount\n   * @struct\n   */\n  function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {\n    /** @type {number} */\n    this.numTransforms = 0;\n    /** @type {!Int32Array} */\n    this.triplets = new Int32Array(0);\n    /** @type {!Int8Array} */\n    this.prefixSuffixStorage = new Int8Array(0);\n    /** @type {!Int32Array} */\n    this.prefixSuffixHeads = new Int32Array(0);\n    /** @type {!Int16Array} */\n    this.params = new Int16Array(0);\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n\n  /** @type {!Transforms} */\n  const RFC_TRANSFORMS = new Transforms(121, 167, 50);\n  /**\n   * @param {!Int8Array} prefixSuffix\n   * @param {!Int32Array} prefixSuffixHeads\n   * @param {!Int32Array} transforms\n   * @param {string} prefixSuffixSrc\n   * @param {string} transformsSrc\n   * @return {void}\n   */\n  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {\n    const /** @type {number} */ n = prefixSuffixSrc.length;\n    let /** @type {number} */ index = 1;\n    let /** @type {number} */ j = 0;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      const /** @type {number} */ c = prefixSuffixSrc.charCodeAt(i);\n      if (c === 35) {\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = c;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 363; ++i) {\n      transforms[i] = transformsSrc.charCodeAt(i) - 32;\n    }\n  }\n  {\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\xC2\\xA0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n  }\n  /**\n   * @param {!Int8Array} dst\n   * @param {number} dstOffset\n   * @param {!Int8Array} src\n   * @param {number} srcOffset\n   * @param {number} len\n   * @param {!Transforms} transforms\n   * @param {number} transformIndex\n   * @return {number}\n   */\n  function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) {\n    let /** @type {number} */ offset = dstOffset;\n    const /** @type {!Int32Array} */ triplets = transforms.triplets;\n    const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage;\n    const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads;\n    const /** @type {number} */ transformOffset = 3 * transformIndex;\n    const /** @type {number} */ prefixIdx = triplets[transformOffset];\n    const /** @type {number} */ transformType = triplets[transformOffset + 1];\n    const /** @type {number} */ suffixIdx = triplets[transformOffset + 2];\n    let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx];\n    const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx];\n    const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n    let /** @type {number} */ omitFirst = transformType - 11;\n    let /** @type {number} */ omitLast = transformType;\n    if (omitFirst < 1 || omitFirst > 9) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > 9) {\n      omitLast = 0;\n    }\n    while (prefix !== prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    srcOffset += omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    let /** @type {number} */ i = len;\n    while (i > 0) {\n      dst[offset++] = src[srcOffset++];\n      i--;\n    }\n    if (transformType === 10 || transformType === 11) {\n      let /** @type {number} */ uppercaseOffset = offset - len;\n      if (transformType === 10) {\n        len = 1;\n      }\n      while (len > 0) {\n        const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) {\n            dst[uppercaseOffset] ^= 32;\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] ^= 32;\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] ^= 5;\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType === 21 || transformType === 22) {\n      let /** @type {number} */ shiftOffset = offset - len;\n      const /** @type {number} */ param = transforms.params[transformIndex];\n      let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        let /** @type {number} */ step = 1;\n        const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          scalar += c0;\n          dst[shiftOffset] = (scalar & 0x7F);\n        } else if (c0 < 0xC0) {\n        } else if (c0 < 0xE0) {\n          if (len >= 2) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F));\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          if (len >= 3) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F));\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          if (len >= 4) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            const /** @type {number} */ c3 = dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F));\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType === 21) {\n          len = 0;\n        }\n      }\n    }\n    while (suffix !== suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n    return offset - dstOffset;\n  }\n\n  /**\n   * @param {number} key\n   * @param {number} len\n   * @return {number}\n   */\n  function getNextKey(key, len) {\n    let /** @type {number} */ step = 1 << (len - 1);\n    while ((key & step) !== 0) {\n      step >>= 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n  /**\n   * @param {!Int32Array} table\n   * @param {number} offset\n   * @param {number} step\n   * @param {number} end\n   * @param {number} item\n   * @return {void}\n   */\n  function replicateValue(table, offset, step, end, item) {\n    do {\n      end -= step;\n      table[offset + end] = item;\n    } while (end > 0);\n  }\n  /**\n   * @param {!Int32Array} count\n   * @param {number} len\n   * @param {number} rootBits\n   * @return {number}\n   */\n  function nextTableBitSize(count, len, rootBits) {\n    let /** @type {number} */ left = 1 << (len - rootBits);\n    while (len < 15) {\n      left -= count[len];\n      if (left <= 0) {\n        break;\n      }\n      len++;\n      left <<= 1;\n    }\n    return len - rootBits;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {number} rootBits\n   * @param {!Int32Array} codeLengths\n   * @param {number} codeLengthsSize\n   * @return {number}\n   */\n  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {\n    const /** @type {number} */ tableOffset = tableGroup[tableIdx];\n    let /** @type {number} */ key;\n    const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize);\n    const /** @type {!Int32Array} */ count = new Int32Array(16);\n    const /** @type {!Int32Array} */ offset = new Int32Array(16);\n    let /** @type {number} */ symbol;\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      count[codeLengths[symbol]]++;\n    }\n    offset[1] = 0;\n    for (let /** @type {number} */ len = 1; len < 15; len++) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      if (codeLengths[symbol] !== 0) {\n        sorted[offset[codeLengths[symbol]]++] = symbol;\n      }\n    }\n    let /** @type {number} */ tableBits = rootBits;\n    let /** @type {number} */ tableSize = 1 << tableBits;\n    let /** @type {number} */ totalSize = tableSize;\n    if (offset[15] === 1) {\n      for (key = 0; key < totalSize; key++) {\n        tableGroup[tableOffset + key] = sorted[0];\n      }\n      return totalSize;\n    }\n    key = 0;\n    symbol = 0;\n    for (let /** @type {number} */ len = 1, /** @type {number} */ step = 2; len <= rootBits; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    const /** @type {number} */ mask = totalSize - 1;\n    let /** @type {number} */ low = -1;\n    let /** @type {number} */ currentOffset = tableOffset;\n    for (let /** @type {number} */ len = rootBits + 1, /** @type {number} */ step = 2; len <= 15; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        if ((key & mask) !== low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    return totalSize;\n  }\n\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function doReadMoreInput(s) {\n    if (s.endOfStreamReached !== 0) {\n      if (halfAvailable(s) >= -2) {\n        return;\n      }\n      throw new Error(\"No more input\");\n    }\n    const /** @type {number} */ readOffset = s.halfOffset << 1;\n    let /** @type {number} */ bytesInBuffer = 4096 - readOffset;\n    s.byteBuffer.copyWithin(0, readOffset, 4096);\n    s.halfOffset = 0;\n    while (bytesInBuffer < 4096) {\n      const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer;\n      const /** @type {number} */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} endOfStream\n   * @return {void}\n   */\n  function checkHealth(s, endOfStream) {\n    if (s.endOfStreamReached === 0) {\n      return;\n    }\n    const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n    if (byteOffset > s.tailBytes) {\n      throw new Error(\"Read after end\");\n    }\n    if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) {\n      throw new Error(\"Unused bytes after end\");\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readFewBits(s, n) {\n    const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return val;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readManyBits(s, n) {\n    const /** @type {number} */ low = readFewBits(s, 16);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initBitReader(s) {\n    s.byteBuffer = new Int8Array(4160);\n    s.accumulator32 = 0;\n    s.shortBuffer = new Int16Array(2080);\n    s.bitOffset = 32;\n    s.halfOffset = 2048;\n    s.endOfStreamReached = 0;\n    prepare(s);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function prepare(s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    checkHealth(s, 0);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function reload(s) {\n    if (s.bitOffset === 32) {\n      prepare(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function jumpToByteBoundary(s) {\n    const /** @type {number} */ padding = (32 - s.bitOffset) & 7;\n    if (padding !== 0) {\n      const /** @type {number} */ paddingBits = readFewBits(s, padding);\n      if (paddingBits !== 0) {\n        throw new Error(\"Corrupted padding bits\");\n      }\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function halfAvailable(s) {\n    let /** @type {number} */ limit = 2048;\n    if (s.endOfStreamReached !== 0) {\n      limit = (s.tailBytes + 1) >> 1;\n    }\n    return limit - s.halfOffset;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @param {number} offset\n   * @param {number} length\n   * @return {void}\n   */\n  function copyRawBytes(s, data, offset, length) {\n    if ((s.bitOffset & 7) !== 0) {\n      throw new Error(\"Unaligned copyBytes\");\n    }\n    while ((s.bitOffset !== 32) && (length !== 0)) {\n      data[offset++] = (s.accumulator32 >>> s.bitOffset);\n      s.bitOffset += 8;\n      length--;\n    }\n    if (length === 0) {\n      return;\n    }\n    const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), length >> 1);\n    if (copyNibbles > 0) {\n      const /** @type {number} */ readOffset = s.halfOffset << 1;\n      const /** @type {number} */ delta = copyNibbles << 1;\n      data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset);\n      offset += delta;\n      length -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (length === 0) {\n      return;\n    }\n    if (halfAvailable(s) > 0) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      while (length !== 0) {\n        data[offset++] = (s.accumulator32 >>> s.bitOffset);\n        s.bitOffset += 8;\n        length--;\n      }\n      checkHealth(s, 0);\n      return;\n    }\n    while (length > 0) {\n      const /** @type {number} */ len = readInput(s.input, data, offset, length);\n      if (len === -1) {\n        throw new Error(\"Unexpected end of input\");\n      }\n      offset += len;\n      length -= len;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} byteLen\n   * @return {void}\n   */\n  function bytesToNibbles(s, byteLen) {\n    const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer;\n    const /** @type {number} */ halfLen = byteLen >> 1;\n    const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer;\n    for (let /** @type {number} */ i = 0; i < halfLen; ++i) {\n      shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8));\n    }\n  }\n\n  /** @type {!Int32Array} */\n  const LOOKUP = new Int32Array(2048);\n  /**\n   * @param {!Int32Array} lookup\n   * @param {string} map\n   * @param {string} rle\n   * @return {void}\n   */\n  function unpackLookupTable(lookup, map, rle) {\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    for (let /** @type {number} */ i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32);\n    }\n    for (let /** @type {number} */ i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    let /** @type {number} */ offset = 1280;\n    for (let /** @type {number} */ k = 0; k < 19; ++k) {\n      const /** @type {number} */ value = k & 3;\n      const /** @type {number} */ rep = rle.charCodeAt(k) - 32;\n      for (let /** @type {number} */ i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n  {\n    unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\x81 @\");\n  }\n\n  /**\n   * @constructor\n   * @struct\n   */\n  function State() {\n    /** @type {!Int8Array} */\n    this.ringBuffer = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextModes = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distContextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distExtraBits = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.output = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.byteBuffer = new Int8Array(0);\n    /** @type {!Int16Array} */\n    this.shortBuffer = new Int16Array(0);\n    /** @type {!Int32Array} */\n    this.intBuffer = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.rings = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.blockTrees = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.literalTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.commandTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distanceTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distOffset = new Int32Array(0);\n    /** @type {number} */\n    this.accumulator64 = 0;\n    /** @type {number} */\n    this.runningState = 0;\n    /** @type {number} */\n    this.nextRunningState = 0;\n    /** @type {number} */\n    this.accumulator32 = 0;\n    /** @type {number} */\n    this.bitOffset = 0;\n    /** @type {number} */\n    this.halfOffset = 0;\n    /** @type {number} */\n    this.tailBytes = 0;\n    /** @type {number} */\n    this.endOfStreamReached = 0;\n    /** @type {number} */\n    this.metaBlockLength = 0;\n    /** @type {number} */\n    this.inputEnd = 0;\n    /** @type {number} */\n    this.isUncompressed = 0;\n    /** @type {number} */\n    this.isMetadata = 0;\n    /** @type {number} */\n    this.literalBlockLength = 0;\n    /** @type {number} */\n    this.numLiteralBlockTypes = 0;\n    /** @type {number} */\n    this.commandBlockLength = 0;\n    /** @type {number} */\n    this.numCommandBlockTypes = 0;\n    /** @type {number} */\n    this.distanceBlockLength = 0;\n    /** @type {number} */\n    this.numDistanceBlockTypes = 0;\n    /** @type {number} */\n    this.pos = 0;\n    /** @type {number} */\n    this.maxDistance = 0;\n    /** @type {number} */\n    this.distRbIdx = 0;\n    /** @type {number} */\n    this.trivialLiteralContext = 0;\n    /** @type {number} */\n    this.literalTreeIdx = 0;\n    /** @type {number} */\n    this.commandTreeIdx = 0;\n    /** @type {number} */\n    this.j = 0;\n    /** @type {number} */\n    this.insertLength = 0;\n    /** @type {number} */\n    this.contextMapSlice = 0;\n    /** @type {number} */\n    this.distContextMapSlice = 0;\n    /** @type {number} */\n    this.contextLookupOffset1 = 0;\n    /** @type {number} */\n    this.contextLookupOffset2 = 0;\n    /** @type {number} */\n    this.distanceCode = 0;\n    /** @type {number} */\n    this.numDirectDistanceCodes = 0;\n    /** @type {number} */\n    this.distancePostfixBits = 0;\n    /** @type {number} */\n    this.distance = 0;\n    /** @type {number} */\n    this.copyLength = 0;\n    /** @type {number} */\n    this.maxBackwardDistance = 0;\n    /** @type {number} */\n    this.maxRingBufferSize = 0;\n    /** @type {number} */\n    this.ringBufferSize = 0;\n    /** @type {number} */\n    this.expectedTotalSize = 0;\n    /** @type {number} */\n    this.outputOffset = 0;\n    /** @type {number} */\n    this.outputLength = 0;\n    /** @type {number} */\n    this.outputUsed = 0;\n    /** @type {number} */\n    this.ringBufferBytesWritten = 0;\n    /** @type {number} */\n    this.ringBufferBytesReady = 0;\n    /** @type {number} */\n    this.isEager = 0;\n    /** @type {number} */\n    this.isLargeWindow = 0;\n    /** @type {number} */\n    this.cdNumChunks = 0;\n    /** @type {number} */\n    this.cdTotalSize = 0;\n    /** @type {number} */\n    this.cdBrIndex = 0;\n    /** @type {number} */\n    this.cdBrOffset = 0;\n    /** @type {number} */\n    this.cdBrLength = 0;\n    /** @type {number} */\n    this.cdBrCopied = 0;\n    /** @type {!Array<?Int8Array>} */\n    this.cdChunks = new Array(0);\n    /** @type {!Int32Array} */\n    this.cdChunkOffsets = new Int32Array(0);\n    /** @type {number} */\n    this.cdBlockBits = 0;\n    /** @type {!Int8Array} */\n    this.cdBlockMap = new Int8Array(0);\n    /** @type {!InputStream|null} */\n    this.input = null;\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n\n  /** @type {!ByteBuffer} */\n  let data = new Int8Array(0);\n  /** @type {!Int32Array} */\n  const offsets = new Int32Array(32);\n  /** @type {!Int32Array} */\n  const sizeBits = new Int32Array(32);\n  /**\n   * @param {!Int8Array} newData\n   * @param {!Int32Array} newSizeBits\n   * @return {void}\n   */\n  function setData(newData, newSizeBits) {\n    if (newSizeBits.length > 31) {\n      throw new Error(\"sizeBits length must be at most \" + valueOf(31));\n    }\n    for (let /** @type {number} */ i = 0; i < 4; ++i) {\n      if (newSizeBits[i] !== 0) {\n        throw new Error(\"first \" + valueOf(4) + \" must be 0\");\n      }\n    }\n    const /** @type {!Int32Array} */ dictionaryOffsets = offsets;\n    const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits;\n    dictionarySizeBits.set(newSizeBits.subarray(0, newSizeBits.length), 0);\n    let /** @type {number} */ pos = 0;\n    const /** @type {number} */ limit = newData.length;\n    for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) {\n      dictionaryOffsets[i] = pos;\n      const /** @type {number} */ bits = dictionarySizeBits[i];\n      if (bits !== 0) {\n        if (bits >= 31) {\n          throw new Error(\"newSizeBits values must be less than 31\");\n        }\n        pos += i << bits;\n        if (pos <= 0 || pos > limit) {\n          throw new Error(\"newSizeBits is inconsistent: overflow\");\n        }\n      }\n    }\n    for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) {\n      dictionaryOffsets[i] = pos;\n    }\n    if (pos !== limit) {\n      throw new Error(\"newSizeBits is inconsistent: underflow\");\n    }\n    data = newData;\n  }\n\n  /**\n   * @param {!Int8Array} dictionary\n   * @param {string} data0\n   * @param {string} data1\n   * @param {string} skipFlip\n   * @param {!Int32Array} sizeBits\n   * @param {string} sizeBitsData\n   * @return {void}\n   */\n  function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) {\n    const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1);\n    if (dict.length !== dictionary.length) {\n      throw new Error(\"Corrupted brotli dictionary\");\n    }\n    let /** @type {number} */ offset = 0;\n    const /** @type {number} */ n = skipFlip.length;\n    for (let /** @type {number} */ i = 0; i < n; i += 2) {\n      const /** @type {number} */ skip = skipFlip.charCodeAt(i) - 36;\n      const /** @type {number} */ flip = skipFlip.charCodeAt(i + 1) - 36;\n      for (let /** @type {number} */ j = 0; j < skip; ++j) {\n        dict[offset] ^= 3;\n        offset++;\n      }\n      for (let /** @type {number} */ j = 0; j < flip; ++j) {\n        dict[offset] ^= 236;\n        offset++;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) {\n      sizeBits[i] = sizeBitsData.charCodeAt(i) - 65;\n    }\n    dictionary.set(dict);\n  }\n  {\n    const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784);\n    const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25);\n    unpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\x0E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\x0E\\t\\x0E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\x7F\\\"+njmfyk9\\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\x0Bwbmhzbqgaltoavpk965YIbub03s{\\t\\x7F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\x0E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\x7F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\x0E\\t\\n\\nabmdwqjnabwk*x\\x0E\\t33s{\\t~*8hl9\\0effpbg=\\x0Ep9,,#X^8wloosovd+*x\\tx\\x0E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\x0E\\t~\\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\x7F\\x7FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\x0E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\x0E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\x7F\\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\\x0E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\x0E\\t?\\\"pwffo#zlv#k1=\\x0E\\telqn#ifpvp233&#nfmv-\\x0E\\t\\n\\x0E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\x0E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\x7F\\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\x7F\\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\x0Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\x0BBl\\bQ\\x7F\\x0BUm\\x05Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\x0BBM\\x0B|j\\x04BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\x05{X\\bTF\\bVV\\bVK\\t\\x7Fm\\x04kF\\t[]\\bPm\\bTv\\nsI\\x0Bpg\\t[I\\bQp\\x04mx\\x0B_W\\n^M\\npe\\x0BQ}\\x0BGu\\nel\\npe\\x04Ch\\x04BV\\bTA\\tSo\\nzk\\x0BGL\\x0BxD\\nd[\\x05Jz\\x05MY\\bQp\\x04li\\nfl\\npC\\x05{B\\x05Nt\\x0BwT\\ti_\\bTg\\x04QQ\\n|p\\x0BXN\\bQS\\x0BxD\\x04QC\\bWZ\\tpD\\x0BVS\\bTW\\x05Nt\\x04Yh\\nzu\\x04Kj\\x05N}\\twr\\tHa\\n_D\\tj`\\x0BQ}\\x0BWp\\nxZ\\x04{c\\tji\\tBU\\nbD\\x04a|\\tTn\\tpV\\nZd\\nmC\\x0BEV\\x05{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\x0Bxs\\nXW\\twR\\x0Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\x05{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\x04Su\\bTF\\x0B_W\\x0BWs\\x0BsI\\x05m\\x7F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\x04MD\\tBe\\tiD\\x0B@@\\bTl\\bPv\\t}t\\x04Sw\\x04M`\\x0BnU\\tkW\\x0Bed\\nqo\\x0BxY\\tA|\\bTz\\x0By`\\x04BR\\x04BM\\tia\\x04XU\\nyu\\x04n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\x7Fm\\tav\\tBN\\x0Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\x0BWc\\x0Byu\\x04Dl\\x04CJ\\x0BWj\\x0BHR\\t`V\\x0BuW\\tQy\\np@\\x0BGu\\x05pl\\x04Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\x05ui\\x05\\x7FR\\nbI\\twQ\\tBZ\\tWV\\x04BR\\npg\\tcg\\x05ti\\x04CW\\n_y\\tRg\\bQa\\x0BQB\\x0BWc\\nYb\\x05le\\ngE\\x04Su\\nL[\\tQ\\x7F\\tea\\tdj\\x0B]W\\nb~\\x04M`\\twL\\bTV\\bVH\\nt\\x7F\\npl\\t|b\\x05s_\\bU|\\bTa\\x04oQ\\x05lv\\x04Sk\\x04M`\\bTv\\x0BK}\\nfl\\tcC\\x04oQ\\x04BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\x0BHR\\bPv\\x0BLx\\x0BEZ\\bT\\x7F\\bTv\\tiD\\x05oD\\x05MU\\x0BwB\\x04Su\\x05k`\\x04St\\ntC\\tPl\\tKg\\noi\\tjY\\x0BxY\\x04h}\\nzk\\bWZ\\t\\x7Fm\\x0Be`\\tTB\\tfE\\nzk\\t`z\\x04Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\x04Kd\\nfy\\x04Yh\\t[I\\x0BDg\\x04Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\x04oQ\\bTW\\x04Jm\\x0BwB\\tea\\x04Yh\\x04BC\\tsb\\tTn\\nzU\\n_y\\x0BxY\\tQ]\\ngw\\x04mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\x0BRb\\twQ\\n]Q\\x04QJ\\bWg\\x0BWa\\bQj\\ntC\\bVH\\nYm\\x0Bxs\\bVK\\nel\\bWI\\x0BxY\\x04Cq\\ntR\\x0BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\x0Bxs\\x0B_W\\td{\\x0BQ}\\tcg\\tTz\\tA|\\tCj\\x0BLm\\x05N}\\x05m\\x7F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\x0BQ}\\bTf\\x05ka\\x04Jm\\x0B@@\\bV`\\tzp\\n@N\\x04Sw\\tiI\\tcg\\noi\\x04Su\\bVw\\x04lo\\x04Cy\\tc}\\x0Bb\\\\\\tsU\\x04BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\x0BbC\\tNo\\x05Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\x05lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\x7Fm\\nLk\\tkj\\n@N\\x04Sb\\x04KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\x04XO\\bWW\\ndz\\x04li\\tBN\\nd[\\bWO\\x04MD\\x0BKC\\tdj\\tI_\\bVV\\ny\\\\\\x0BLm\\x05xl\\txB\\tkV\\x0Bb\\\\\\x0BJW\\x0BVS\\tVx\\x0BxD\\td{\\x04MD\\bTa\\t|`\\x0BPz\\x04R}\\x0BWs\\x04BM\\nsI\\x04CN\\bTa\\x04Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\x0BWh\\x0BWk\\nxS\\x0BAz\\x0BwX\\nbI\\x04oQ\\tfw\\nqI\\nV|\\nun\\x05z\\x7F\\x0Bpg\\td\\\\\\x0BoA\\x05{D\\ti_\\x05xB\\bT\\x7F\\t`V\\x05qr\\tTT\\x04g]\\x04CA\\x0BuR\\tVJ\\tT`\\npw\\x0BRb\\tI_\\nCx\\x04Ro\\x0BsI\\x04Cj\\x04Kh\\tBv\\tWV\\x04BB\\x05oD\\x05{D\\nhc\\x04Km\\x0B^R\\tQE\\n{I\\np@\\nc|\\x05Gt\\tc}\\x04Dl\\nzU\\x05qN\\tsV\\x05k}\\tHh\\x0B|j\\nqo\\x05u|\\tQ]\\x0Bek\\x05\\x7FZ\\x04M`\\x04St\\npe\\tdj\\bVG\\x0BeE\\t\\x7Fm\\x0BWc\\x04|I\\n[W\\tfL\\bT\\x7F\\tBZ\\x04Su\\x0BKa\\x04Cq\\x05Nt\\x04Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\x04B\\\\\\tQy\\x0BBl\\bWg\\x04XD\\x05kc\\x0Bx[\\bVV\\tQ]\\t\\x7Fa\\tPy\\x0BxD\\nfI\\t}f\\x05oD\\tdj\\tSG\\x05ls\\t~D\\x04CN\\n{Z\\t\\\\v\\n_D\\nhc\\x0Bx_\\x04C[\\tAJ\\nLM\\tVx\\x04CI\\tbj\\tc^\\tcF\\ntC\\x04Sx\\twr\\x04XA\\bU\\\\\\t|a\\x0BK\\\\\\bTV\\bVj\\nd|\\tfs\\x04CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\x7F\\x05Nt\\x0BDg\\tVc\\bTl\\x04d@\\npo\\t\\x7FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\x04l`\\bTx\\bWf\\tHE\\x0BF{\\tcO\\tfD\\nlm\\x0BfZ\\nlm\\x0BeU\\tdG\\x04BH\\bTV\\tSi\\x05MW\\nwX\\nz\\\\\\t\\\\c\\x04CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\x7F\\t`i\\ng@\\x05nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\x0BxY\\x04Kj\\tAJ\\x05uN\\ti[\\npe\\x04Sk\\x0BDg\\x0Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\x04Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\x0B_W\\nLk\\x05Nt\\tyj\\tfM\\x04R\\x7F\\tiI\\bTl\\x0BwX\\tsV\\x0BMl\\nyu\\tAJ\\bVj\\x04KO\\tWV\\x0BA}\\x0BW\\x7F\\nrp\\tiD\\x0B|o\\x05lv\\x0BsI\\x04BM\\td~\\tCU\\bVb\\x04eV\\npC\\x0BwT\\tj`\\tc}\\x0Bxs\\x0Bps\\x0Bvh\\tWV\\x0BGg\\x0BAe\\x0BVK\\x0B]W\\trg\\x0BWc\\x05F`\\tBr\\x0Bb\\\\\\tdZ\\bQp\\nqI\\x04kF\\nLk\\x0BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\x05{A\\x05wj\\twN\\x0B@@\\bTe\\ti_\\n_D\\twL\\nAH\\x0BiK\\x0Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\x05Gt\\x0BVK\\npl\\x04S}\\x0BWP\\t|d\\x04MD\\x0BHV\\bT\\x7F\\x04R}\\x04M`\\bTV\\bVH\\x05lv\\x04Ch\\bW[\\x04Ke\\tR{\\x0B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\x04Ke\\tBe\\x04Oi\\tR{\\td\\\\\\x05nB\\bWZ\\tdZ\\tVJ\\x05Os\\t\\x7Fm\\x04uQ\\x0BhZ\\x04Q@\\x04QQ\\nfI\\bW[\\x04B\\\\\\x04li\\nzU\\nMd\\x04M`\\nxS\\bVV\\n\\\\}\\x0BxD\\t\\x7Fm\\bTp\\x04IS\\nc|\\tkV\\x05i~\\tV{\\x0BhZ\\t|b\\bWt\\n@R\\x0BoA\\x0BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\x04BR\\x0BQB\\x05Nj\\tCP\\t[I\\bTv\\t`W\\x05uN\\x0Bpg\\x0Bpg\\x0BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\x0BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\x04m`\\bTv\\nyd\\nrp\\bWf\\tUX\\x04BV\\nzk\\nd}\\twQ\\t}f\\x04Ce\\x0Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\x7F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\x04Kn\\x0BnU\\tAt\\tpD\\x0B^R\\x0BIr\\x04b[\\tR{\\tdE\\x0BxD\\x0BWK\\x0BWA\\bQL\\bW@\\x04Su\\bUd\\nDM\\tPc\\x04CA\\x04Dl\\x04oQ\\tHs\\x05wi\\x04ub\\n\\x7Fa\\bQp\\x05Ob\\nLP\\bTl\\x04Y[\\x0BK}\\tAJ\\bQ\\x7F\\x04n^\\x0BsA\\bSM\\nqM\\bWZ\\n^W\\x0Bz{\\x04S|\\tfD\\bVK\\bTv\\bPv\\x04BB\\tCP\\x04dF\\tid\\x0Bxs\\x04mx\\x0Bws\\tcC\\ntC\\tyc\\x05M`\\x0BW\\x7F\\nrh\\bQp\\x0BxD\\x04\\\\o\\nsI\\x04_k\\nzu\\x04kF\\tfD\\x04Xs\\x04XO\\tjp\\bTv\\x04BS\\x05{B\\tBr\\nzQ\\nbI\\tc{\\x04BD\\x04BV\\x05nO\\bTF\\tca\\x05Jd\\tfL\\tPV\\tI_\\nlK\\x04`o\\twX\\npa\\tgu\\bP}\\x05{^\\bWf\\n{I\\tBN\\npa\\x04Kl\\x0Bpg\\tcn\\tfL\\x0Bvh\\x04Cq\\bTl\\x0BnU\\bSq\\x04Cm\\twR\\bUJ\\npe\\nyd\\nYg\\x04Cy\\x0BKW\\tfD\\nea\\x04oQ\\tj_\\tBv\\x04nM\\x0BID\\bTa\\nzA\\x05pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\x05{X\\x05kk\\x0BxD\\x04|I\\x05xl\\nfy\\x04Ce\\x0BwB\\nLk\\x0Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\x04Hk\\x04OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\x04Oi\\bSB\\x04XA\\x0BeE\\tjp\\nq}\\tiD\\x05qN\\x0B^R\\t\\x7Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\x0BHV\\bTf\\tTn\\x04\\\\N\\x04\\\\N\\nuB\\x05lv\\nyu\\tTd\\bTf\\bPL\\x0B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\x05ia\\bWZ\\tcF\\x04Jm\\n{Z\\bWO\\x04_k\\x04Df\\x04RR\\td\\\\\\bVV\\x0Bxs\\x04BN\\x05ti\\x04lm\\tTd\\t]y\\x0BHV\\tSo\\x0B|j\\x04XX\\tA|\\x0BZ^\\x0BGu\\bTW\\x05M`\\x04kF\\x0BhZ\\x0BVK\\tdG\\x0BBl\\tay\\nxU\\x05qE\\x05nO\\bVw\\nqI\\x04CX\\ne\\x7F\\tPl\\bWO\\x0BLm\\tdL\\x05uH\\x04Cm\\tdT\\x04fn\\x0BwB\\x05ka\\x0BnU\\n@M\\nyT\\tHv\\t\\\\}\\x04Kh\\td~\\x04Yh\\x05k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\x05MY\\npl\\bQ_\\twr\\x0BAx\\tHE\\bTg\\bSq\\x05vp\\x0Bb\\\\\\bWO\\nOl\\nsI\\nfy\\x0BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\x0Bxv\\x04k_\\bWO\\x0B|j\\x0BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\x05k}\\x04ra\\tUT\\x0BJc\\x0Bed\\np@\\tQN\\nd|\\tkj\\tHk\\x04M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\x04BB\\x04BH\\x04Cm\\npl\\tIQ\\bVK\\x0Bxs\\n`e\\x0BiK\\npa\\x04Oi\\tUS\\bTp\\tfD\\nPG\\x05kk\\x04XA\\nz\\\\\\neg\\x0BWh\\twR\\x05qN\\nqS\\tcn\\x04lo\\nxS\\n^W\\tBU\\nt\\x7F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\x0BVK\\x05ls\\tVJ\\bVV\\x0BeE\\x04\\\\o\\nyX\\nYm\\x04M`\\x05lL\\nd|\\nzk\\tA{\\x05sE\\twQ\\x04XT\\nt\\x7F\\tPl\\t]y\\x0BwT\\x05{p\\x04MD\\x0Bb\\\\\\tQ]\\x04Kj\\tJn\\nAH\\x0BRb\\tBU\\tHK\\t\\\\c\\nfI\\x05m\\x7F\\nqM\\n@R\\tSo\\noi\\x04BT\\tHv\\n_y\\x04Kh\\tBZ\\t]i\\bUJ\\tV{\\x04Sr\\nbI\\x0BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\x04S|\\x0BuW\\tiI\\bWI\\nqI\\x0B|j\\x04BV\\bVg\\bWZ\\x04kF\\x0Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\x0Bps\\nAO\\bTa\\x05xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\x0Bw}\\x0BqO\\ti[\\bQ\\x7F\\bTz\\x0BVF\\twN\\x05ts\\tdw\\bTv\\neS\\ngi\\tNr\\x05yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\x0BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\x04nM\\bWQ\\x0BAx\\nMd\\tBr\\x05ui\\x0BxY\\bSM\\x0BWc\\x0B|j\\x0Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\x0BeU\\x04e^\\bTg\\nqI\\tac\\bPv\\tcF\\x04oQ\\tQ\\x7F\\x0BhZ\\x05ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\x04S|\\x04M`\\n{I\\tS{\\x04_O\\tBZ\\x04Zi\\x04Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\x0BGu\\x05yS\\nqA\\t[r\\neK\\x04M`\\tdZ\\x05lL\\bUg\\bTl\\nbD\\tUS\\x0Bb\\\\\\tpV\\ncc\\x04S\\\\\\tct\\t`z\\bPL\\x0BWs\\nA`\\neg\\bSq\\x05uE\\x04CR\\x0BDg\\t`W\\x0Bz{\\x0BWc\\x04Sk\\x04Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\x0BRb\\bTQ\\npl\\x05Gt\\x0BuW\\x05uj\\npF\\nqI\\tfL\\t[I\\tia\\x04XO\\nyu\\x0BDg\\x0Bed\\tq{\\x04VG\\bQ\\x7F\\x05ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\x04]j\\tkV\\toU\\bTp\\nzU\\x05nB\\x0BB]\\ta{\\bV@\\n]n\\x04m`\\tcz\\tR{\\x04m`\\bQa\\x0BwT\\bSM\\x05MY\\x05qN\\tdj\\x05~s\\x0BQ}\\x05MY\\x0BMB\\tBv\\twR\\bRg\\x0BQ}\\tql\\x0BKC\\nrm\\x05xu\\x04CC\\x0BwB\\x0Bvh\\tBq\\x04Xq\\npV\\ti_\\x05Ob\\x05uE\\nbd\\nqo\\x0B{i\\nC~\\tBL\\x0BeE\\x05uH\\bVj\\x04Ey\\x04Gz\\x0BzR\\x0B{i\\tcf\\n{Z\\n]n\\x04XA\\x0BGu\\x0BnU\\thS\\x0BGI\\nCc\\tHE\\bTA\\tHB\\x04BH\\x04Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\x7F\\tc\\\\\\x0BmO\\x0BWX\\nfH\\np@\\x05MY\\bTF\\nlK\\tBt\\nzU\\tTT\\x04Km\\x0BwT\\npV\\ndt\\x0ByI\\tVx\\tQ\\x7F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\x04nM\\tTn\\ndS\\t]g\\nLc\\x0BwB\\t}t\\t[I\\tCP\\x04kX\\x0BFm\\x0BhZ\\x05m\\x7F\\ti[\\np@\\x0BQ}\\x0BW\\x7F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\x0BRb\\tio\\tPy\\x04Y[\\nxU\\tct\\x0B@@\\tww\\bPv\\x04BM\\x04FF\\ntb\\x05v|\\x0BKm\\tBq\\tBq\\x04Kh\\x04`o\\nZd\\x04XU\\ti]\\t|`\\tSt\\x04B\\\\\\bQ\\x7F\\x0B_W\\tTJ\\nqI\\t|a\\tA{\\x0BuP\\x04MD\\tPl\\nxR\\tfL\\x0Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\x05kc\\nd|\\bVV\\ny\\\\\\x05kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\x0BW\\x7F\\nqs\\x05lv\\bSM\\x04Zi\\x0BVK\\x05ia\\x0BQB\\tQ\\x7F\\n{Z\\bPt\\x0BKl\\nlK\\nhs\\ndS\\bVK\\x05mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\x0BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\x0BeU\\nBf\\tdj\\x05Mr\\n|p\\t\\\\g\\t]r\\bVb\\x05{D\\nd[\\x04XN\\tfM\\tO\\\\\\x05s_\\tcf\\tiZ\\x04XN\\x0BWc\\tqv\\n`m\\tU^\\x05oD\\nd|\\x0BGg\\tdE\\x0Bwf\\x04lo\\x04u}\\nd|\\x05oQ\\t`i\\x04Oi\\x0BxD\\ndZ\\nCx\\x04Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\x0Bps\\ntC\\x0BpP\\x0Bqw\\bPu\\bPX\\tDm\\npw\\x05Nj\\tss\\taG\\x0Bxs\\bPt\\noL\\x04Gz\\tOk\\ti@\\ti]\\x04eC\\tIQ\\tii\\tdj\\x0B@J\\t|d\\x05uh\\bWZ\\x0BeU\\x0BnU\\bTa\\tcC\\x04g]\\nzk\\x04Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\x0BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\x05ln\\t|d\\tbs\\nqI\\x05{B\\x0BAx\\np@\\nzk\\x0BRb\\x05Os\\x0BWS\\x04e^\\x0BD_\\tBv\\x0BWd\\bVb\\x0Bxs\\x0BeE\\bRw\\n]n\\n|p\\x0Bg|\\tfw\\x05kc\\bTI\\x05ka\\n\\\\T\\x04Sp\\tju\\x0Bps\\npe\\x05u|\\x0BGr\\bVe\\tCU\\x04]M\\x04XU\\x0BxD\\bTa\\tIQ\\x0BWq\\tCU\\tam\\tdj\\bSo\\x04Sw\\x0BnU\\x04Ch\\tQ]\\x05s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\x04Yc\\tUZ\\bTx\\npe\\x0BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\x0BxD\\x04BR\\nzQ\\tQN\\x04]M\\x04Yh\\nLP\\x0BFm\\x0BLX\\x05vc\\x0Bql\\x05ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\x04oQ\\t`z\\t[I\\tB`\\x0BRb\\tyj\\tsb\\x0BWs\\bTl\\tkV\\x0Bed\\ne\\x7F\\x05lL\\x0BxN\\t\\x7Fm\\nJn\\tjY\\x0BxD\\bVb\\bSq\\x0Byu\\twL\\x0BXL\\bTA\\tpg\\tAt\\tnD\\x04XX\\twR\\npl\\nhw\\x05yS\\nps\\tcO\\bW[\\x0B|j\\x04XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\x05k`\\x05qN\\tdw\\tWV\\tHE\\x0BEV\\x05Jz\\tid\\tB`\\tzh\\x05E]\\tfD\\bTg\\x05qN\\bTa\\tja\\x04Cv\\bSM\\nhc\\bUe\\x05t_\\tie\\x04g]\\twQ\\nPn\\bVB\\tjw\\bVg\\x0BbE\\tBZ\\x0BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\x0BD]\\tBZ\\ti[\\tfD\\x0BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\x04oQ\\x04lo\\x0BLx\\x0BM@\\bWZ\\x04Kn\\x0Bpg\\nTi\\nIv\\n|r\\x0B@}\\x05Jz\\x05Lm\\x05Wh\\x05k}\\x05ln\\x0BxD\\n]s\\x04gc\\x0Bps\\tBr\\bTW\\x0BBM\\x05tZ\\nBY\\x04DW\\tjf\\x0BSW\\x04C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\x05lv\\x04BC\\nzQ\\t[I\\x0Bgl\\nig\\bUs\\x04BT\\x0BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\x0BID\\x0B|j\\x04KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\fHy\\fIk\\fHU\\fId\\fHy\\fIl\\fHT\\fIk\\fHy\\fHR\\fHy\\fIg\\fHx\\fH\\\\\\fHF\\fH\\\\\\fHD\\fIk\\fHc\\fHy\\fHy\\fHS\\fHA\\fIl\\fHk\\fHT\\fHy\\fH\\\\\\fHH\\fIg\\fHU\\fIg\\fHj\\fHF\\fHU\\fIl\\fHC\\fHU\\fHC\\fHR\\fHH\\fHy\\fHI\\fHRibdqbm\\fHj\\fHp\\fHp\\fIg\\fHi\\fH@\\fHJ\\fIg\\fH{\\fHd\\fHp\\fHR\\fH{\\fHc\\fHU\\fHB\\fHk\\fHD\\fHY\\fHU\\fHC\\fIk\\fHI\\fIk\\fHI\\fIl\\fHt\\fH\\\\\\fHp\\fH@\\fHJ\\fIl\\fHy\\fHd\\fHp\\fIl\\fHY\\fIk\\fHD\\fHd\\fHD\\fHc\\fHU\\fH\\\\\\fHe\\fHT\\fHB\\fIk\\fHy\\fHB\\fHY\\fIg\\fH^\\fIk\\fHT\\fH@\\fHB\\fHd\\fHJ\\fIk\\fH\\x7F\\fH\\\\\\fHj\\fHB\\fH@\\fHT\\fHA\\fH\\\\\\fH@\\fHD\\fHv\\fH^\\fHB\\fHD\\fHj\\fH{\\fHT\\fIl\\fH^\\fIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\x0E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\x0E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\x0E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\x0E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\x0E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\x0E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\x0E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\x7F\\x7F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\x0E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\x0E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\x7F\\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\x0E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\x0E\\t\\x0E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\x0E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\x0E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\x0E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\x0E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\x0E\\t\\x0E\\t\\x0E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\x0E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\x0E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\x0E\\t\\x0E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\x0E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\x0E\\t\\\\slsvsp\\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\x0E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\x0BBl\\bQ\\x7F*+\\x0BUm\\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x01\\0\\x07\\x06\\x05\\x04\\x04\\x05\\x06\\x07\\0\\x01\\x02\\x03\\x0B\\n\\t\\b\\x0F\\x0E\\r\\f\\f\\r\\x0E\\x0F\\b\\t\\n\\x0B\\x13\\x12\\x11\\x10\\x17\\x16\\x15\\x14\\x14\\x15\\x16\\x17\\x10\\x11\\x12\\x13\\x1B\\x1A\\x19\\x18\\x1F\\x1E\\x1D\\x1C\\x1C\\x1D\\x1E\\x1F\\x18\\x19\\x1A\\x1B\\x13\\x13\\x13\\x13\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x13\\x13\\x13\\x13\\x02\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\0\\x03\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x03\\x03\\x02\\x03\\x01\\x03\\0\\x03\\x07\\x03\\x06\\x03\\x05\\x03\\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\x0E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\x0E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\x0E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\x0E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\x0E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\fUh\\fT{\\fTN\\n{I\\np@\\x04Fr\\x0BBl\\bQ\\x7F\\tA{\\x0BUm\\x05Gx\\tA{\\x01yp\\x06YA\\0zX\\bTV\\bWl\\bUd\\x04BM\\x0BB{\\npV\\x0B@x\\x04B\\\\\\np@\\x04Db\\x04Gz\\tal\\npa\\tfM\\tuD\\bV~\\x04mx\\x0BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\x05oD\\tkV\\x0Bed\\x0BHR\\nb~\\x04M`\\nJp\\x05oD\\x04|Q\\nLP\\x04Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\x05F`\\x04Cm\\x0BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\x7F\\nZd\\x04XU\\x04li\\tfr\\ti@\\tBH\\x04BD\\x04BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\x0Bxs\\x04Zf\\nqI\\x04Zf\\x0BBM\\x0B|j\\t}t\\bSM\\nmC\\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\fHB\\fIk\\fHn\\fH^\\fHS\\fHc\\fHU\\fId\\fHn\\fH{\\fHC\\fHR\\fHT\\fHR\\fHI\\fHc\\fHY\\fHn\\fH\\\\\\fHU\\fIk\\fHy\\fIg\\fHd\\fHy\\fIm\\fHw\\fH\\\\\\fHU\\fHR\\fH@\\fHR\\fHJ\\fHy\\fHU\\fHR\\fHT\\fHA\\fIl\\fHU\\fIm\\fHc\\fH\\\\\\fHU\\fIl\\fHB\\fId\\fHn\\fHJ\\fHS\\fHD\\fH@\\fHR\\fHHgjsolgl`p\\fHT\\fHB\\fHC\\fH\\\\\\fIn\\fHF\\fHD\\fHR\\fHB\\fHF\\fHH\\fHR\\fHG\\fHS\\fH\\\\\\fHx\\fHT\\fHH\\fHH\\fH\\\\\\fHU\\fH^\\fIg\\fH{\\fHU\\fIm\\fHj\\fH@\\fHR\\fH\\\\\\fHJ\\fIk\\fHZ\\fHU\\fIm\\fHd\\fHz\\fIk\\fH^\\fHC\\fHJ\\fHS\\fHy\\fHR\\fHB\\fHY\\fIk\\fH@\\fHH\\fIl\\fHD\\fH@\\fIl\\fHv\\fHB\\fI`\\fHH\\fHT\\fHR\\fH^\\fH^\\fIk\\fHz\\fHp\\fIe\\fH@\\fHB\\fHJ\\fHJ\\fHH\\fHI\\fHR\\fHD\\fHU\\fIl\\fHZ\\fHU\\fH\\\\\\fHi\\fH^\\fH{\\fHy\\fHA\\fIl\\fHD\\fH{\\fH\\\\\\fHF\\fHR\\fHT\\fH\\\\\\fHR\\fHH\\fHy\\fHS\\fHc\\fHe\\fHT\\fIk\\fH{\\fHC\\fIl\\fHU\\fIn\\fHm\\fHj\\fH{\\fIk\\fHs\\fIl\\fHB\\fHz\\fIg\\fHp\\fHy\\fHR\\fH\\\\\\fHi\\fHA\\fIl\\fH{\\fHC\\fIk\\fHH\\fIm\\fHB\\fHY\\fIg\\fHs\\fHJ\\fIk\\fHn\\fHi\\fH{\\fH\\\\\\fH|\\fHT\\fIk\\fHB\\fIk\\fH^\\fH^\\fH{\\fHR\\fHU\\fHR\\fH^\\fHf\\fHF\\fH\\\\\\fHv\\fHR\\fH\\\\\\fH|\\fHT\\fHR\\fHJ\\fIk\\fH\\\\\\fHp\\fHS\\fHT\\fHJ\\fHS\\fH^\\fH@\\fHn\\fHJ\\fH@\\fHD\\fHR\\fHU\\fIn\\fHn\\fH^\\fHR\\fHz\\fHp\\fIl\\fHH\\fH@\\fHs\\fHD\\fHB\\fHS\\fH^\\fHk\\fHT\\fIk\\fHj\\fHD\\fIk\\fHD\\fHC\\fHR\\fHy\\fIm\\fH^\\fH^\\fIe\\fH{\\fHA\\fHR\\fH{\\fH\\\\\\fIk\\fH^\\fHp\\fH{\\fHU\\fH\\\\\\fHR\\fHB\\fH^\\fH{\\fIk\\fHF\\fIk\\fHp\\fHU\\fHR\\fHI\\fHk\\fHT\\fIl\\fHT\\fHU\\fIl\\fHy\\fH^\\fHR\\fHL\\fIl\\fHy\\fHU\\fHR\\fHm\\fHJ\\fIn\\fH\\\\\\fHH\\fHU\\fHH\\fHT\\fHR\\fHH\\fHC\\fHR\\fHJ\\fHj\\fHC\\fHR\\fHF\\fHR\\fHy\\fHy\\fI`\\fHD\\fHZ\\fHR\\fHB\\fHJ\\fIk\\fHz\\fHC\\fHU\\fIl\\fH\\\\\\fHR\\fHC\\fHz\\fIm\\fHJ\\fH^\\fH{\\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\x0E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\x0E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\x0E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\x0E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\x0E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\x0E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\x0E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\x7Fwkvna\\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\x0E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\x0E\\t?kfbg=\\x0E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\x0E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\x0E\\t?,kfbg=\\x0E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\x0E\\t\\n?,gju=\\x0E\\t\\x0E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\x0E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\x0E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\x0E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\x0E\\t?kfbg=\\x0E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\x0E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\x05Gx\\bTA\\nzk\\x0BBl\\bQ\\x7F\\bTA\\nzk\\x0BUm\\bQ\\x7F\\bTA\\nzk\\npe\\x05u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\x05tS\\x05k`\\t[X\\t[X\\x0BHR\\bPv\\bTW\\bUe\\n\\x7Fa\\bQp\\x0B_W\\x0BWs\\nxS\\x0BAz\\n_y\\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\fHD\\fHU\\fIl\\fHn\\fHy\\fH\\\\\\fHD\\fIk\\fHi\\fHF\\fHD\\fIk\\fHy\\fHS\\fHC\\fHR\\fHy\\fH\\\\\\fIk\\fHn\\fHi\\fHD\\fIa\\fHC\\fHy\\fIa\\fHC\\fHR\\fH{\\fHR\\fHk\\fHM\\fH@\\fHR\\fH\\\\\\fIk\\fHy\\fHS\\fHT\\fIl\\fHJ\\fHS\\fHC\\fHR\\fHF\\fHU\\fH^\\fIk\\fHT\\fHS\\fHn\\fHU\\fHA\\fHR\\fH\\\\\\fHH\\fHi\\fHF\\fHD\\fIl\\fHY\\fHR\\fH^\\fIk\\fHT\\fIk\\fHY\\fHR\\fHy\\fH\\\\\\fHH\\fIk\\fHB\\fIk\\fH\\\\\\fIk\\fHU\\fIg\\fHD\\fIk\\fHT\\fHy\\fHH\\fIk\\fH@\\fHU\\fIm\\fHH\\fHT\\fHR\\fHk\\fHs\\fHU\\fIg\\fH{\\fHR\\fHp\\fHR\\fHD\\fIk\\fHB\\fHS\\fHD\\fHs\\fHy\\fH\\\\\\fHH\\fHR\\fHy\\fH\\\\\\fHD\\fHR\\fHe\\fHD\\fHy\\fIk\\fHC\\fHU\\fHR\\fHm\\fHT\\fH@\\fHT\\fIk\\fHA\\fHR\\fH[\\fHR\\fHj\\fHF\\fHy\\fIk\\fH^\\fHS\\fHC\\fIk\\fHZ\\fIm\\fH\\\\\\fIn\\fHk\\fHT\\fHy\\fIk\\fHt\\fHn\\fHs\\fIk\\fHB\\fIk\\fH\\\\\\fIl\\fHT\\fHy\\fHH\\fHR\\fHB\\fIk\\fH\\\\\\fHR\\fH^\\fIk\\fHy\\fH\\\\\\fHi\\fHK\\fHS\\fHy\\fHi\\fHF\\fHD\\fHR\\fHT\\fHB\\fHR\\fHp\\fHB\\fIm\\fHq\\fIk\\fHy\\fHR\\fH\\\\\\fHO\\fHU\\fIg\\fHH\\fHR\\fHy\\fHM\\fHP\\fIl\\fHC\\fHU\\fHR\\fHn\\fHU\\fIg\\fHs\\fH^\\fHZ\\fH@\\fIa\\fHJ\\fH^\\fHS\\fHC\\fHR\\fHp\\fIl\\fHY\\fHD\\fHp\\fHR\\fHH\\fHR\\fHy\\fId\\fHT\\fIk\\fHj\\fHF\\fHy\\fHR\\fHY\\fHR\\fH^\\fIl\\fHJ\\fIk\\fHD\\fIk\\fHF\\fIn\\fH\\\\\\fIl\\fHF\\fHR\\fHD\\fIl\\fHe\\fHT\\fHy\\fIk\\fHU\\fIg\\fH{\\fIl\\fH@\\fId\\fHL\\fHy\\fHj\\fHF\\fHy\\fIl\\fHY\\fH\\\\\\fIa\\fH[\\fH{\\fHR\\fHn\\fHY\\fHj\\fHF\\fHy\\fIg\\fHp\\fHS\\fH^\\fHR\\fHp\\fHR\\fHD\\fHR\\fHT\\fHU\\fHB\\fHH\\fHU\\fHB\\fIk\\fHn\\fHe\\fHD\\fHy\\fIl\\fHC\\fHR\\fHU\\fIn\\fHJ\\fH\\\\\\fIa\\fHp\\fHT\\fIn\\fHv\\fIl\\fHF\\fHT\\fHn\\fHJ\\fHT\\fHY\\fHR\\fH^\\fHU\\fIg\\fHD\\fHR\\fHU\\fIg\\fHH\\fIl\\fHp\\fId\\fHT\\fIk\\fHY\\fHR\\fHF\\fHT\\fHp\\fHD\\fHH\\fHR\\fHD\\fIk\\fHH\\fHR\\fHp\\fHR\\fH\\\\\\fIl\\fHt\\fHR\\fHC\\fH^\\fHp\\fHS\\fH^\\fIk\\fHD\\fIl\\fHv\\fIk\\fHp\\fHR\\fHn\\fHv\\fHF\\fHH\\fIa\\fH\\\\\\fH{\\fIn\\fH{\\fH^\\fHp\\fHR\\fHH\\fIk\\fH@\\fHR\\fHU\\fH\\\\\\fHj\\fHF\\fHD\\fIk\\fHY\\fHR\\fHU\\fHD\\fHk\\fHT\\fHy\\fHR\\fHT\\fIm\\fH@\\fHU\\fH\\\\\\fHU\\fHD\\fIk\\fHk\\fHT\\fHT\\fIk\\fHT\\fHU\\fHS\\fHH\\fH@\\fHM\\fHP\\fIk\\fHt\\fHs\\fHD\\fHR\\fHH\\fH^\\fHR\\fHZ\\fHF\\fHR\\fHn\\fHv\\fHZ\\fIa\\fH\\\\\\fIl\\fH@\\fHM\\fHP\\fIl\\fHU\\fIg\\fHH\\fIk\\fHT\\fHR\\fHd\\fHs\\fHZ\\fHR\\fHC\\fHJ\\fHT\\fHy\\fHH\\fIl\\fHp\\fHR\\fHH\\fIl\\fHY\\fHR\\fH^\\fHR\\fHU\\fHp\\fHR\\fH\\\\\\fHF\\fHs\\fHD\\fHR\\fH\\\\\\fHz\\fHD\\fIk\\fHT\\fHM\\fHP\\fHy\\fHB\\fHS\\fH^\\fHR\\fHe\\fHT\\fHy\\fIl\\fHy\\fIk\\fHY\\fH^\\fH^\\fH{\\fHH\\fHR\\fHz\\fHR\\fHD\\fHR\\fHi\\fH\\\\\\fIa\\fHI\\fHp\\fHU\\fHR\\fHn\\fHJ\\fIk\\fHz\\fHR\\fHF\\fHU\\fH^\\fIl\\fHD\\fHS\\fHC\\fHB\\fH@\\fHS\\fHD\\fHR\\fH@\\fId\\fHn\\fHy\\fHy\\fHU\\fIl\\fHn\\fHy\\fHU\\fHD\\fHR\\fHJ\\fIk\\fHH\\fHR\\fHU\\fHB\\fH^\\fIk\\fHy\\fHR\\fHG\\fIl\\fHp\\fH@\\fHy\\fHS\\fHH\\fIm\\fH\\\\\\fHH\\fHB\\fHR\\fHn\\fH{\\fHY\\fHU\\fIl\\fHn\\fH\\\\\\fIg\\fHp\\fHP\\fHB\\fHS\\fH^\\fIl\\fHj\\fH\\\\\\fIg\\fHF\\fHT\\fIk\\fHD\\fHR\\fHC\\fHR\\fHJ\\fHY\\fH^\\fIk\\fHD\\fIk\\fHz\\fHR\\fHH\\fHR\\fHy\\fH\\\\\\fIl\\fH@\\fHe\\fHD\\fHy\\fHR\\fHp\\fHY\\fHR\\fH@\\fHF\\fIn\\fH\\\\\\fHR\\fH@\\fHM\\fHP\\fHR\\fHT\\fI`\\fHJ\\fHR\\fHZ\\fIk\\fHC\\fH\\\\\\fHy\\fHS\\fHC\\fIk\\fHy\\fHU\\fHR\\fHn\\fHi\\fHy\\fHT\\fH\\\\\\fH@\\fHD\\fHR\\fHc\\fHY\\fHU\\fHR\\fHn\\fHT\\fIa\\fHI\\fH^\\fHB\\fHS\\fH^\\fIk\\fH^\\fIk\\fHz\\fHy\\fHY\\fHS\\fH[\\fHC\\fHy\\fIa\\fH\\\\\\fHn\\fHT\\fHB\\fIn\\fHU\\fHI\\fHR\\fHD\\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\x0E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\x0E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\x0E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\x0E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\x0E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\x0E\\t?,p`qjsw=\\x0E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\x0E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\x0E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\x0E\\t\\x0E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\x7F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\x7F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\x0E\\t?,p`qjsw=\\x0E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\x0E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\x0E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\x0BBl\\bQ\\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\fHe\\fHF\\fHC\\fIg\\fH{\\fHF\\fIn\\fH\\\\\\fIa\\fHY\\fHU\\fHB\\fHR\\fH\\\\\\fIk\\fH^\\fIg\\fH{\\fIg\\fHn\\fHv\\fIm\\fHD\\fHR\\fHY\\fH^\\fIk\\fHy\\fHS\\fHD\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fHF\\fIm\\fH^\\fHS\\fHT\\fHz\\fIg\\fHp\\fIk\\fHn\\fHv\\fHR\\fHU\\fHS\\fHc\\fHA\\fIk\\fHp\\fIk\\fHn\\fHZ\\fHR\\fHB\\fHS\\fH^\\fHU\\fHB\\fHR\\fH\\\\\\fIl\\fHp\\fHR\\fH{\\fH\\\\\\fHO\\fH@\\fHD\\fHR\\fHD\\fIk\\fHy\\fIm\\fHB\\fHR\\fH\\\\\\fH@\\fIa\\fH^\\fIe\\fH{\\fHB\\fHR\\fH^\\fHS\\fHy\\fHB\\fHU\\fHS\\fH^\\fHR\\fHF\\fIo\\fH[\\fIa\\fHL\\fH@\\fHN\\fHP\\fHH\\fIk\\fHA\\fHR\\fHp\\fHF\\fHR\\fHy\\fIa\\fH^\\fHS\\fHy\\fHs\\fIa\\fH\\\\\\fIk\\fHD\\fHz\\fHS\\fH^\\fHR\\fHG\\fHJ\\fI`\\fH\\\\\\fHR\\fHD\\fHB\\fHR\\fHB\\fH^\\fIk\\fHB\\fHH\\fHJ\\fHR\\fHD\\fH@\\fHR\\fHp\\fHR\\fH\\\\\\fHY\\fHS\\fHy\\fHR\\fHT\\fHy\\fIa\\fHC\\fIg\\fHn\\fHv\\fHR\\fHU\\fHH\\fIk\\fHF\\fHU\\fIm\\fHm\\fHv\\fH@\\fHH\\fHR\\fHC\\fHR\\fHT\\fHn\\fHY\\fHR\\fHJ\\fHJ\\fIk\\fHz\\fHD\\fIk\\fHF\\fHS\\fHw\\fH^\\fIk\\fHY\\fHS\\fHZ\\fIk\\fH[\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHe\\fHH\\fIa\\fHH\\fH\\\\\\fHB\\fIm\\fHn\\fH@\\fHd\\fHJ\\fIg\\fHD\\fIg\\fHn\\fHe\\fHF\\fHy\\fH\\\\\\fHO\\fHF\\fHN\\fHP\\fIk\\fHn\\fHT\\fIa\\fHI\\fHS\\fHH\\fHG\\fHS\\fH^\\fIa\\fHB\\fHB\\fIm\\fHz\\fIa\\fHC\\fHi\\fHv\\fIa\\fHw\\fHR\\fHw\\fIn\\fHs\\fHH\\fIl\\fHT\\fHn\\fH{\\fIl\\fHH\\fHp\\fHR\\fHc\\fH{\\fHR\\fHY\\fHS\\fHA\\fHR\\fH{\\fHt\\fHO\\fIa\\fHs\\fIk\\fHJ\\fIn\\fHT\\fH\\\\\\fIk\\fHJ\\fHS\\fHD\\fIg\\fHn\\fHU\\fHH\\fIa\\fHC\\fHR\\fHT\\fIk\\fHy\\fIa\\fHT\\fH{\\fHR\\fHn\\fHK\\fIl\\fHY\\fHS\\fHZ\\fIa\\fHY\\fH\\\\\\fHR\\fHH\\fIk\\fHn\\fHJ\\fId\\fHs\\fIa\\fHT\\fHD\\fHy\\fIa\\fHZ\\fHR\\fHT\\fHR\\fHB\\fHD\\fIk\\fHi\\fHJ\\fHR\\fH^\\fHH\\fH@\\fHS\\fHp\\fH^\\fIl\\fHF\\fIm\\fH\\\\\\fIn\\fH[\\fHU\\fHS\\fHn\\fHJ\\fIl\\fHB\\fHS\\fHH\\fIa\\fH\\\\\\fHy\\fHY\\fHS\\fHH\\fHR\\fH\\\\\\fIm\\fHF\\fHC\\fIk\\fHT\\fIa\\fHI\\fHR\\fHD\\fHy\\fH\\\\\\fIg\\fHM\\fHP\\fHB\\fIm\\fHy\\fIa\\fHH\\fHC\\fIg\\fHp\\fHD\\fHR\\fHy\\fIo\\fHF\\fHC\\fHR\\fHF\\fIg\\fHT\\fIa\\fHs\\fHt\\fH\\\\\\fIk\\fH^\\fIn\\fHy\\fHR\\fH\\\\\\fIa\\fHC\\fHY\\fHS\\fHv\\fHR\\fH\\\\\\fHT\\fIn\\fHv\\fHD\\fHR\\fHB\\fIn\\fH^\\fIa\\fHC\\fHJ\\fIk\\fHz\\fIk\\fHn\\fHU\\fHB\\fIk\\fHZ\\fHR\\fHT\\fIa\\fHy\\fIn\\fH^\\fHB\\fId\\fHn\\fHD\\fIk\\fHH\\fId\\fHC\\fHR\\fH\\\\\\fHp\\fHS\\fHT\\fHy\\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\x0E\\t?,p`qjsw=\\x0E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\x7Fwkvna\\x7Fofew\\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\x0E\\t?-ip!=?,p`qjsw=\\x0E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\x7Fqjdkw\\x7Fwkvna\\x7F-ip!=?,p`qjsw=\\x0E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\x0E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\x0E\\t?,gju=\\x0E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\x0E\\t?,kwno=\\x0E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\x7Fwkvna\\x7Fqjdkw\\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\x0E\\t?,kwno=\\x0E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\x0E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\fHJ\\fIa\\fHY\\fHR\\fH\\\\\\fHR\\fHB\\fId\\fHD\\fIm\\fHi\\fH^\\fHF\\fIa\\fH\\\\\\fHJ\\fHR\\fHD\\fHA\\fHR\\fH\\\\\\fHH\\fIl\\fHC\\fHi\\fHD\\fIm\\fHJ\\fIk\\fHZ\\fHU\\fHS\\fHD\\fIa\\fHJ\\fIl\\fHk\\fHn\\fHM\\fHS\\fHC\\fHR\\fHJ\\fHS\\fH^\\fIa\\fH^\\fIl\\fHi\\fHK\\fHS\\fHy\\fHR\\fH\\\\\\fHY\\fIl\\fHM\\fHS\\fHC\\fIg\\fHv\\fHS\\fHs\\fIa\\fHL\\fIk\\fHT\\fHB\\fHR\\fHv\\fHR\\fH\\\\\\fHp\\fHn\\fHy\\fIa\\fHZ\\fHD\\fHJ\\fIm\\fHD\\fHS\\fHC\\fHR\\fHF\\fIa\\fH\\\\\\fHC\\fIg\\fH{\\fHi\\fHD\\fIm\\fHT\\fHR\\fH\\\\\\fH}\\fHD\\fH^\\fHR\\fHk\\fHD\\fHF\\fHR\\fH\\\\\\fIa\\fHs\\fIl\\fHZ\\fH\\\\\\fIa\\fHH\\fIg\\fHn\\fH^\\fIg\\fHy\\fHT\\fHA\\fHR\\fHG\\fHP\\fIa\\fH^\\fId\\fHZ\\fHZ\\fH\\\\\\fIa\\fHH\\fIk\\fHn\\fHF\\fIa\\fH\\\\\\fHJ\\fIk\\fHZ\\fHF\\fIa\\fH^\\fIk\\fHC\\fH\\\\\\fHy\\fIk\\fHn\\fHJ\\fIa\\fH\\\\\\fHT\\fIa\\fHI\\fHS\\fHH\\fHS\\fHe\\fHH\\fIa\\fHF\\fHR\\fHJ\\fHe\\fHD\\fIa\\fHU\\fIk\\fHn\\fHv\\fHS\\fHs\\fIa\\fHL\\fHR\\fHC\\fHR\\fHH\\fIa\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHR\\fHJ\\fHR\\fHF\\fIm\\fH\\\\\\fHR\\fHD\\fIk\\fHp\\fIg\\fHM\\fHP\\fIk\\fHn\\fHi\\fHD\\fIm\\fHY\\fHR\\fHJ\\fHZ\\fIa\\fH\\\\\\fIk\\fHO\\fIl\\fHZ\\fHS\\fHy\\fIa\\fH[\\fHR\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH{\\fIa\\fH\\\\\\fHU\\fHF\\fH\\\\\\fHS\\fHO\\fHR\\fHB\\fH@\\fIa\\fH\\\\\\fHR\\fHn\\fHM\\fH@\\fHv\\fIa\\fHv\\fIg\\fHn\\fHe\\fHF\\fH^\\fH@\\fIa\\fHK\\fHB\\fHn\\fHH\\fIa\\fH\\\\\\fIl\\fHT\\fHn\\fHF\\fH\\\\\\fIa\\fHy\\fHe\\fHB\\fIa\\fHB\\fIl\\fHJ\\fHB\\fHR\\fHK\\fIa\\fHC\\fHB\\fHT\\fHU\\fHR\\fHC\\fHH\\fHR\\fHZ\\fH@\\fIa\\fHJ\\fIg\\fHn\\fHB\\fIl\\fHM\\fHS\\fHC\\fHR\\fHj\\fHd\\fHF\\fIl\\fHc\\fH^\\fHB\\fIg\\fH@\\fHR\\fHk\\fH^\\fHT\\fHn\\fHz\\fIa\\fHC\\fHR\\fHj\\fHF\\fH\\\\\\fIk\\fHZ\\fHD\\fHi\\fHD\\fIm\\fH@\\fHn\\fHK\\fH@\\fHR\\fHp\\fHP\\fHR\\fH\\\\\\fHD\\fHY\\fIl\\fHD\\fHH\\fHB\\fHF\\fIa\\fH\\\\\\fHB\\fIm\\fHz\\fHF\\fIa\\fH\\\\\\fHZ\\fIa\\fHD\\fHF\\fH\\\\\\fHS\\fHY\\fHR\\fH\\\\\\fHD\\fIm\\fHy\\fHT\\fHR\\fHD\\fHT\\fHB\\fH\\\\\\fIa\\fHI\\fHD\\fHj\\fHC\\fIg\\fHp\\fHS\\fHH\\fHT\\fIg\\fHB\\fHY\\fHR\\fH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\x0E\\t?,algz=\\x0E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\x0E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\x0E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\x0E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\x0E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\x0E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\x0E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\fTL\\fT^\\fTE\\fT^\\fUh\\fT{\\fTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\x05Gx\\bTA\\nzk#+\\x0BUm\\x05Gx*\\fHD\\fHS\\fH\\\\\\fIa\\fHJ\\fIk\\fHZ\\fHM\\fHR\\fHe\\fHD\\fH^\\fIg\\fHM\\fHy\\fIa\\fH[\\fIk\\fHH\\fIa\\fH\\\\\\fHp\\fHR\\fHD\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH@\\fHn\\fHK\\fHS\\fHH\\fHT\\fIa\\fHI\\fHR\\fHF\\fHD\\fHR\\fHT\\fIa\\fHY\\fIl\\fHy\\fHR\\fH\\\\\\fHT\\fHn\\fHT\\fIa\\fHy\\fH\\\\\\fHO\\fHT\\fHR\\fHB\\fH{\\fIa\\fH\\\\\\fIl\\fHv\\fHS\\fHs\\fIa\\fHL\\fIg\\fHn\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHD\\fHi\\fHB\\fIk\\fH\\\\\\fHS\\fHy\\fHR\\fHY\\fHS\\fHA\\fHS\\fHD\\fIa\\fHD\\fH{\\fHR\\fHM\\fHS\\fHC\\fHR\\fHm\\fHy\\fIa\\fHC\\fIg\\fHn\\fHy\\fHS\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHR\\fHF\\fHU\\fIm\\fHm\\fHv\\fHH\\fIl\\fHF\\fIa\\fH\\\\\\fH@\\fHn\\fHK\\fHD\\fHs\\fHS\\fHF\\fIa\\fHF\\fHO\\fIl\\fHy\\fIa\\fH\\\\\\fHS\\fHy\\fIk\\fHs\\fHF\\fIa\\fH\\\\\\fHR\\fH\\\\\\fHn\\fHA\\fHF\\fIa\\fH\\\\\\fHR\\fHF\\fIa\\fHH\\fHB\\fHR\\fH^\\fHS\\fHy\\fIg\\fHn\\fH\\\\\\fHG\\fHP\\fIa\\fHH\\fHR\\fH\\\\\\fHD\\fHS\\fH\\\\\\fIa\\fHB\\fHR\\fHO\\fH^\\fHS\\fHB\\fHS\\fHs\\fIk\\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\fHF\\fIm\\fHT\\fIa\\fHH\\fHS\\fHy\\fHR\\fHy\\fHR\\fHn\\fH{\\fIa\\fH\\\\\\fIk\\fHT\\fHe\\fHD\\fIa\\fHU\\fIg\\fHn\\fHD\\fIk\\fHY\\fHS\\fHK\\fHR\\fHD\\fHT\\fHA\\fHR\\fHG\\fHS\\fHy\\fIa\\fHT\\fHS\\fHn\\fH{\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHS\\fHH\\fHy\\fIe\\fHF\\fIl\\fH\\\\\\fHR\\fHk\\fHs\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHF\\fHD\\fHy\\fHR\\fH\\\\\\fIa\\fH\\\\\\fHY\\fHR\\fHd\\fHT\\fHy\\fIa\\fH\\\\\\fHS\\fHC\\fHH\\fHR\", \"\\u06F7%\\u018C'T%\\x85'W%\\xD7%O%g%\\xA6&\\u0193%\\u01E5&>&*&'&^&\\x88\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\x82&P&1&\\xB1&3&]&m&u&E&t&C&\\xCF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\x81&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\x9A&>&\\x86&7&]&F&2&>&J&6&n&2&%&?&\\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\x84(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\xC6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\xA8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\");\n    setData(dictionaryData, dictionarySizeBits);\n  }\n\n  /**\n   * @constructor\n   * @param {!Int8Array} data\n   * @struct\n   */\n  function InputStream(data) {\n    /** @type {!Int8Array} */\n    this.data = new Int8Array(0);\n    /** @type {number} */\n    this.offset = 0;\n    this.data = data;\n  }\n\n  /**\n   * @param {number} x\n   * @return {string}\n   */\n  function valueOf(x) {\n    return x.toString();\n  }\n\n  /**\n   * @param {?InputStream} src\n   * @param {!Int8Array} dst\n   * @param {number} offset\n   * @param {number} length\n   * @return {number}\n   */\n  function readInput(src, dst, offset, length) {\n    if (src === null) {\n      return -1;\n    }\n    let /** @type {number} */ end = Math.min(src.offset + length, src.data.length);\n    let /** @type {number} */ bytesRead = end - src.offset;\n    dst.set(src.data.subarray(src.offset, end), offset);\n    src.offset += bytesRead;\n    return bytesRead;\n  }\n  /**\n   * @param {string} src\n   * @return {!Int8Array}\n   */\n  function toUsAsciiBytes(src) {\n    let /** @type {number} */ n = src.length;\n    let /** @type {!Int8Array} */ result = new Int8Array(n);\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n\n/* GENERATED CODE END */\n\n  /** @typedef {!Int8Array} */\n  let ByteBuffer;\n\n  /**\n   * @param {!Int8Array} bytes\n   * @param {?Options=} options\n   * @return {!Int8Array}\n   */\n  function decode(bytes, options) {\n    let /** @type {!State} */ s = new State();\n    initState(s, new InputStream(bytes));\n    if (options) {\n      let customDictionary =\n          /** @type {?Int8Array} */ (options[\"customDictionary\"]);\n      if (customDictionary) attachDictionaryChunk(s, customDictionary);\n    }\n    let /** @type {number} */ totalOutput = 0;\n    let /** @type {!Array<!Int8Array>} */ chunks = [];\n    while (true) {\n      let /** @type {!Int8Array} */ chunk = new Int8Array(16384);\n      chunks.push(chunk);\n      s.output = chunk;\n      s.outputOffset = 0;\n      s.outputLength = 16384;\n      s.outputUsed = 0;\n      decompress(s);\n      totalOutput += s.outputUsed;\n      if (s.outputUsed < 16384) break;\n    }\n    close(s);\n    let /** @type {!Int8Array} */ result = new Int8Array(totalOutput);\n    let /** @type {number} */ offset = 0;\n    for (let /** @type {number} */ i = 0; i < chunks.length; ++i) {\n      let /** @type {!Int8Array} */ chunk = chunks[i];\n      let /** @type {number} */ end = Math.min(totalOutput, offset + 16384);\n      let /** @type {number} */ len = end - offset;\n      if (len < 16384) {\n        result.set(chunk.subarray(0, len), offset);\n      } else {\n        result.set(chunk, offset);\n      }\n      offset += len;\n    }\n    return result;\n  }\n\n  return decode;\n};\n\n/**\n * @type {function(!Int8Array, ?Options=):!Int8Array}\n */\nexport let BrotliDecode = makeBrotliDecode();\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/js/micProcessor.js",
    "content": "//   micProcessor.js\nclass MicProcessor extends AudioWorkletProcessor\n{\n    constructor()\n    {\n        super();\n\n        // global variables for testing\n        var sampleRate = globalThis.sampleRate;\n        var currentFrame = globalThis.currentFrame;\n        var currentTime = globalThis.currentTime;\n        var currentRenderQuantum = globalThis.currentRenderQuantum;\n                \n        this.SampleRate = sampleRate;\n        this.TargetSamples = Math.floor(this.SampleRate * 0.1); // 100ms\n        this.Buffer = new Float32Array(this.TargetSamples);\n        this.BufferIndex = 0;\n\n        this.port.onmessage = (event) =>\n        {\n            var data = event.data;\n\n            if (typeof data === 'number')\n            {\n                //this.port.postMessage(data); // echo back test\n            }\n            if (data instanceof Uint8Array)\n            {\n            }\n        };\n    }\n\n    process(inputs, outputs, parameters)\n    {\n        var inChannel0 = inputs[0][0];\n        if (!inChannel0) return true;\n                \n        let srcIndex = 0;\n        var srcLen = inChannel0.length;\n\n        while (srcIndex < srcLen)\n        {\n            var remaining = this.TargetSamples - this.BufferIndex;\n            var copyCount = Math.min(remaining, srcLen - srcIndex);\n\n            this.Buffer.set(\n                inChannel0.subarray(srcIndex, srcIndex + copyCount),\n                this.BufferIndex);\n\n            this.BufferIndex += copyCount;\n            srcIndex += copyCount;\n\n            if (this.BufferIndex >= this.TargetSamples)\n            {\n                this.SendBuffer();\n                this.BufferIndex = 0;\n            }\n        }\n\n        return true;\n    }\n\n    SendBuffer()\n    {\n        // convert to 16-6bit PCM\n        var int16 = new Int16Array(this.TargetSamples);\n        for (var i = 0; i < this.TargetSamples; i++)\n        {\n            int16[i] = this.Buffer[i] * 32767;\n        }\n\n        var byteArray = new Uint8Array(int16.buffer);\n        this.port.postMessage(byteArray, [byteArray.buffer]);\n    }\n}\n\nregisterProcessor('mic-processor', MicProcessor);"
  },
  {
    "path": "Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/js/streamProcessor.js",
    "content": "//   streamProcessor.js\nclass StreamProcessor extends AudioWorkletProcessor\n{\n    constructor()\n    {\n        super();\n        this.queue = [];\n\n        this.port.onmessage = (event) =>\n        {\n            var data = event.data;\n\n            if (typeof data === 'number')\n            {\n                if (data === 2)\n                {                    \n                    this.queue = [];\n                }\n            }\n            if (data instanceof Uint8Array)\n            {\n                const buffer = new Int16Array(data.buffer, data.byteOffset, data.length / 2);\n                buffer.offset = 0;\n                this.queue.push(buffer);\n            }\n        };\n    }\n\n\n    process(inputs, outputs, parameters)\n    {\n        const output = outputs[0];\n        \n        const channelCount = output.length;\n        const sampleCount = output[0].length;\n\n        let written = 0;\n\n        while (written < sampleCount && this.queue.length > 0)\n        {\n            const buffer = this.queue[0];\n            const offset = buffer.offset;\n\n            const available = buffer.length - offset;\n            const needed = sampleCount - written;\n            const copyCount = Math.min(available, needed);\n\n            for (let i = 0; i < copyCount; i++)\n            {\n                for (let c = 0; c < channelCount; c++)\n                {\n                    const channel = output[c];\n                    let value = (buffer[offset+i] / 32767);\n                    channel[written+i] = value;\n                }\n            }\n            \n            written += copyCount;\n            buffer.offset += copyCount;\n\n            if (buffer.offset >= buffer.length)\n            {\n                this.queue.shift();\n                this.port.postMessage(1);\n            }\n        }\n        \n        // Fill remaining samples with silence\n        if (written < sampleCount)\n        {\n            for (let c = 0; c < channelCount; c++)\n            {\n                const channel = output[c];\n\n                for (let i = written; i < sampleCount; i++)\n                {\n                    let value = 0;\n                    channel[i] = value;\n                }\n            }\n        }\n\n        return true;\n    }\n}\n\nregisterProcessor(\"stream-processor\", StreamProcessor);"
  },
  {
    "path": "Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/$projectname$.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <ProjectGuid>{$guid1$}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);</DefineConstants>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Media\" Version=\"4.2.9001\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"ContentImporter1.cs\" />\n    <Compile Include=\"ContentProcessor1.cs\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Common\", \"Console\" ],\n  \"identity\": \"nkast.Kni.ContentPipelineExtension.CSharp\",\n  \"name\": \"KNI Content Pipeline Extension Project (.NetStandard)\",\n  \"shortName\": \"kni-ContentPipelineExtension\",\n  \"sourceName\": \"KniContentPipelineExtension\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/ContentImporter1.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nusing TInput = System.String;\nusing TOutput = System.String;\n\nnamespace $safeprojectname$\n{\n   /// <summary>\n    /// This class will be instantiated by the XNA Framework Content Pipeline\n    /// to import a file from disk into the specified type, TImport.\n    ///\n    /// This should be part of a Content Pipeline Extension Library project.\n    ///\n    /// TODO: change the ContentImporter attribute to specify the correct file\n    /// extension, display name, and default processor for this importer.\n    /// </summary>\n\n    [ContentImporter(\".xyz\", DisplayName = \"XYZ Importer\", DefaultProcessor = \"ContentProcessor1\")]\n    public class ContentImporter1 : ContentImporter<TInput>\n    {\n\n        public override TInput Import(string filename, ContentImporterContext context)\n        {\n            // TODO: process the input object, and return the modified data.\n            throw new NotImplementedException();\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/ContentProcessor1.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n// TODO: replace these with the processor input and output types.\nusing TInput = System.String;\nusing TOutput = System.String;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This class will be instantiated by the XNA Framework Content Pipeline\n    /// to apply custom processing to content data, converting an object of\n    /// type TInput to TOutput. The input and output types may be the same if\n    /// the processor wishes to alter data without changing its type.\n    ///\n    /// This should be part of a Content Pipeline Extension Library project.\n    ///\n    /// TODO: change the ContentProcessor attribute to specify the correct\n    /// display name for this processor.\n    /// </summary>\n    [ContentProcessor(DisplayName = \"$safeprojectname$.ContentProcessor1\")]\n    public class ContentProcessor1 : ContentProcessor<TInput, TOutput>\n    {\n        public override TOutput Process(TInput input, ContentProcessorContext context)\n        {\n            // TODO: process the input object, and return the modified data.\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/DrawableGameComponent.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n  \n  \"defaultItemExtension\": \"cs\",\n  \"itemHierarchyPaths\": [ \"Code\" ]\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/DrawableGameComponent.CSharp/.template.config/template.json",
    "content": "{\n    \"$schema\": \"http://json.schemastore.org/template\",\n    \"author\": \"KNI Engine\",\n    \"classifications\": [ \"Common\", \"Code\" ],\n    \"identity\": \"nkast.Kni.DrawableGameComponent.CSharp\",\n    \"name\": \"KNI DrawableGameComponent Item\",\n    \"shortName\": \"KniDrawableGameComponent\",\n    \"tags\": {\n      \"language\": \"C#\",\n      \"type\": \"item\"\n    },\n    \"symbols\": {\n      \"ClassName\":{\n        \"type\": \"parameter\",\n        \"description\": \"The name of the code file and class.\",\n        \"datatype\": \"text\",\n        \"replaces\": \"DrawableGameComponent1\",\n        \"fileRename\": \"DrawableGameComponent1\",\n        \"defaultValue\": \"DrawableGameComponent1\"\n      }\n    },\n  \"icon\": \"TemplateIcon.png\"\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/DrawableGameComponent.CSharp/DrawableGameComponent1.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace KniGameComponent\n{\n    internal class DrawableGameComponent1 : DrawableGameComponent\n    {\n        public $DrawableGameComponent1(Game game) : base(game)\n        {\n        }\n\n        /// <summary>Initializes the component. Used to load non-graphical resources.</summary>\n        public override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <summary>Load graphical resources needed by this component.</summary>\n        protected override void LoadContent()\n        {\n        }\n\n        /// <summary>Unload graphical resources needed by this component.</summary>\n        protected override void UnloadContent()\n        {\n        }\n\n        /// <summary>Update the component.</summary>\n        /// <param name=\"gameTime\">GameTime of the Game.</param>\n        public override void Update(GameTime gameTime)\n        {\n        }\n\n        /// <summary>Draw this component.</summary>\n        /// <param name=\"gameTime\">The time elapsed since the last call to Draw.</param>\n        public override void Draw(GameTime gameTime)\n        {\n        }\n\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/GameComponent.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n  \n  \"defaultItemExtension\": \"cs\",\n  \"itemHierarchyPaths\": [ \"Code\" ]\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/GameComponent.CSharp/.template.config/template.json",
    "content": "{\n    \"$schema\": \"http://json.schemastore.org/template\",\n    \"author\": \"KNI Engine\",\n    \"classifications\": [ \"Common\", \"Code\" ],\n    \"identity\": \"nkast.Kni.GameComponent.CSharp\",\n    \"name\": \"KNI GameComponent Item\",\n    \"shortName\": \"KniGameComponent\",\n    \"tags\": {\n      \"language\": \"C#\",\n      \"type\": \"item\"\n    },\n    \"symbols\": {\n      \"ClassName\":{\n        \"type\": \"parameter\",\n        \"description\": \"The name of the code file and class.\",\n        \"datatype\": \"text\",\n        \"replaces\": \"GameComponent1\",\n        \"fileRename\": \"GameComponent1\",\n        \"defaultValue\": \"GameComponent1\"\n      }\n    },\n  \"icon\": \"TemplateIcon.png\"\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/GameComponent.CSharp/GameComponent1.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace KniGameComponent\n{\n    internal class GameComponent1 : GameComponent\n    {\n        public GameComponent1(Game game) : base(game)\n        {\n        }\n\n        /// <summary>Initializes the component. Used to load non-graphical resources.</summary>\n        public override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <summary>Update the component.</summary>\n        /// <param name=\"gameTime\">GameTime of the Game.</param>\n        public override void Update(GameTime gameTime)\n        {\n        }\n\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/$projectname$.Android.GL.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-android</TargetFramework>\n    <ProjectGuid>$guid2$</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <IsTrimmable>True</IsTrimmable>\n\t<TrimMode>partial</TrimMode>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);ANDROID</DefineConstants>\n    <KniPlatform>Android</KniPlatform>\n    <ApplicationId>com.companyname.$safeprojectname$</ApplicationId>\n    <ApplicationVersion>1</ApplicationVersion>\n    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n    <AndroidStoreUncompressedFileExtensions>.m4a</AndroidStoreUncompressedFileExtensions>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Android.GL\" Version=\"4.2.9001.1\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"$projectname$Activity.cs\" />\n    <Compile Include=\"Platform$projectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"AndroidManifest.xml\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Splash.png\" />\n    <AndroidResource Include=\"Resources\\Values\\Strings.xml\" />\n    <AndroidResource Include=\"Resources\\Values\\Styles.xml\" />\n    <Folder Include=\"Resources\\Layout\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$projectname$Content\\$projectname$Content.mgcb\">\n      <Link>Content\\$projectname$Content.mgcb</Link>\n    </KniContentReference>\n  </ItemGroup>\n  <Import Project=\"..\\$projectname$.Shared\\$projectname$.Shared.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/$projectname$Activity.cs",
    "content": "using Microsoft.Xna.Framework;\nusing Android.App;\nusing Android.Content.PM;\nusing Android.OS;\nusing Android.Views;\n\nnamespace $safeprojectname$\n{\n    [Activity(Label = \"$projectname$\"\n        , MainLauncher = true\n        , Icon = \"@drawable/icon\"\n        , Theme = \"@style/Theme.Splash\"\n        , AlwaysRetainTaskState = true\n        , LaunchMode = LaunchMode.SingleInstance\n        , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize\n        , ScreenOrientation = ScreenOrientation.FullSensor\n    )]\n    public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity\n    {\n        protected override void OnCreate(Bundle bundle)\n        {\n            base.OnCreate(bundle);\n            Game game = new Platform$safeprojectname$Game();\n            SetContentView((View)game.Services.GetService(typeof(View)));\n            game.Run();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"$safeprojectname$.$safeprojectname$\" android:versionCode=\"1\" android:versionName=\"1.0\">\n\t<application android:label=\"$projectname$\"></application>\n\t<uses-permission android:name=\"android.permission.VIBRATE\" />\n\t<uses-permission android:name=\"android.permission.INTERNET\" />\n\t<uses-permission android:name=\"com.android.vending.BILLING\" />\n</manifest>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with your package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Platform$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <inheritdoc/>\n    public class Platform$safeprojectname$Game : $safeprojectname$Game\n    {\n\n        public Platform$safeprojectname$Game() : base()\n        {\n            // TODO: Add platform specific initialization logic here\n\n            base.graphics.IsFullScreen = true;\n        }\n\n        /// <inheritdoc/>\n        protected override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <inheritdoc/>\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void UnloadContent()\n        {\n            base.UnloadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void Update(GameTime gameTime)\n        {\n            base.Update(gameTime);\n        }\n\n        /// <inheritdoc/>\n        protected override void Draw(GameTime gameTime)\n        {\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (Main.xml),\nan internationalization string table (Strings.xml) and some icons (drawable/Icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    Drawable/\n        Icon.png\n\n    Layout/\n        Main.axml\n\n    Values/\n        Strings.xml\n\nIn order to get the build system to recognize Android resources, the build action should be set \nto \"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called\n\"Resource\" that contains the tokens for each one of the resources included. For example, \nfor the above Resources layout, this is what the Resource class would expose:\n\npublic class Resource {\n    public class Drawable {\n        public const int Icon = 0x123;\n    }\n\n    public class Layout {\n        public const int Main = 0x456;\n    }\n\n    public class String {\n        public const int FirstString = 0xabc;\n        public const int SecondString = 0xbcd;\n    }\n}\n\nYou would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or \nResource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString\nto reference the first string in the dictionary file Values/Strings.xml."
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Resources/Resource.Designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.269\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace $safeprojectname$\n{\n\t\n\t\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020001\n\t\t\tpublic const int Splash = 2130837505;\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int ApplicationName = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Hello = 2130903040;\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int Theme_Splash = 2130968576;\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ApplicationName\">$safeprojectname$</string>\n</resources>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Resources/Values/Styles.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <style name=\"Theme.Splash\" parent=\"android:Theme\">\n    <item name=\"android:windowBackground\">@drawable/splash</item>\n    <item name=\"android:windowNoTitle\">true</item>\n  </style>\n</resources>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/$projectname$.Blazor.GL.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFramework>net8.0</TargetFramework>\n    <Nullable>disable</Nullable>\n    <ImplicitUsings>disable</ImplicitUsings>\n    <ProjectGuid>{$guid7$}</ProjectGuid>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefineConstants>$(DefineConstants);BLAZORGL</DefineConstants>\n\t<KniPlatform>BlazorGL</KniPlatform>\n  </PropertyGroup>\n  \n  <PropertyGroup>\n    <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>\n    <!--<InvariantGlobalization>true</InvariantGlobalization>-->\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Pages\\Index.razor.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Platform$projectname$Game.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Blazor.GL\" Version=\"4.2.9001.2\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.17\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.17\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$projectname$Content\\$projectname$Content.mgcb\">\n      <Link>Content\\$projectname$Content.mgcb</Link>\n    </KniContentReference>\n  </ItemGroup>\n  <Import Project=\"..\\$projectname$.Shared\\$projectname$.Shared.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/App.razor",
    "content": "﻿<Router AppAssembly=\"@typeof(App).Assembly\">\n    <Found Context=\"routeData\">\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\n        <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\n    </Found>\n    <NotFound>\n        <PageTitle>Not found</PageTitle>\n        <LayoutView Layout=\"@typeof(MainLayout)\">\n            <p role=\"alert\">Sorry, there's nothing at this address.</p>\n        </LayoutView>\n    </NotFound>\n</Router>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Directory.Build.props",
    "content": "<Project>\n  \n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/MainLayout.razor",
    "content": "﻿@inherits LayoutComponentBase\n\n<div class=\"page\">\n    <main>\n            @Body\n    </main>\n</div>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/MainLayout.razor.css",
    "content": ".page\n{\n    position: relative;\n    display: flex;\n    flex-direction: column;\n}\n\nmain\n{\n    flex: 1;\n}\n\n.sidebar\n{\n    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);\n}\n\n.top-row\n{\n    background-color: #f7f7f7;\n    border-bottom: 1px solid #d6d5d5;\n    justify-content: flex-end;\n    height: 3.5rem;\n    display: flex;\n    align-items: center;\n}\n\n    .top-row ::deep a, .top-row ::deep .btn-link\n    {\n        white-space: nowrap;\n        margin-left: 1.5rem;\n        text-decoration: none;\n    }\n\n    .top-row ::deep a:hover, .top-row ::deep .btn-link:hover\n    {\n        text-decoration: underline;\n    }\n\n    .top-row ::deep a:first-child\n    {\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n\n@media (max-width: 640.98px)\n{\n    .top-row:not(.auth)\n    {\n        display: none;\n    }\n\n    .top-row.auth\n    {\n        justify-content: space-between;\n    }\n\n    .top-row ::deep a, .top-row ::deep .btn-link\n    {\n        margin-left: 0;\n    }\n}\n\n@media (min-width: 641px)\n{\n    .page\n    {\n        flex-direction: row;\n    }\n\n    .sidebar\n    {\n        width: 250px;\n        height: 100vh;\n        position: sticky;\n        top: 0;\n    }\n\n    .top-row\n    {\n        position: sticky;\n        top: 0;\n        z-index: 1;\n    }\n\n    .top-row.auth ::deep a:first-child\n    {\n        flex: 1;\n        text-align: right;\n        width: 0;\n    }\n\n    .top-row, article\n    {\n        padding-left: 2rem !important;\n        padding-right: 1.5rem !important;\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Pages/Index.razor",
    "content": "﻿@page \"/\"\n@page \"/index.html\"\n@inject IJSRuntime JsRuntime\n@using nkast.Wasm.Canvas\n\n<PageTitle>$projectname$</PageTitle>\n\n<div id=\"canvasHolder\" style=\"\n    background: #000;\n    margin:0%;\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n    width:100vw;\n    height:100vh;\n\">\n    <canvas id=\"theCanvas\" style=\"touch-action:none;\"></canvas>\n</div>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Pages/Index.razor.cs",
    "content": "using System;\nusing Microsoft.JSInterop;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$.Pages\n{\n    public partial class Index\n    {\n        Game _game;\n\n        protected override void OnAfterRender(bool firstRender)\n        {\n            base.OnAfterRender(firstRender);\n\n            if (firstRender)\n            {\n                JsRuntime.InvokeAsync<object>(\"initRenderJS\", DotNetObjectReference.Create(this));\n            }\n        }\n\n        [JSInvokable]\n        public void TickDotNet()\n        {\n            // init game\n            if (_game == null)\n            {\n                _game = new Platform$safeprojectname$Game();\n                _game.Run();\n            }\n\n            // run gameloop\n            _game.Tick();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Platform$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <inheritdoc/>\n    public class Platform$safeprojectname$Game : $safeprojectname$Game\n    {\n\n        public Platform$safeprojectname$Game() : base()\n        {\n            // TODO: Add platform specific initialization logic here\n\n        }\n\n        /// <inheritdoc/>\n        protected override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <inheritdoc/>\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void UnloadContent()\n        {\n            base.UnloadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void Update(GameTime gameTime)\n        {\n            base.Update(gameTime);\n        }\n\n        /// <inheritdoc/>\n        protected override void Draw(GameTime gameTime)\n        {\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Program.cs",
    "content": "using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Components.Web;\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace $safeprojectname$\n{\n    internal class Program\n    {\n        private static async Task Main(string[] args)\n        {\n            var builder = WebAssemblyHostBuilder.CreateDefault(args);\n            builder.RootComponents.Add<App>(\"#app\");\n            builder.RootComponents.Add<HeadOutlet>(\"head::after\");\n            builder.Services.AddScoped(sp => new HttpClient()\n            {\n                BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)\n            });\n            await builder.Build().RunAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:56897\",\n      \"sslPort\": 0\n    }\n  },\n  \"profiles\": {\n    \"$safeprojectname$\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": true,\n      \"launchBrowser\": true,\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\",\n      \"applicationUrl\": \"http://localhost:5259\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/_Imports.razor",
    "content": "﻿@using System.Net.Http\n@using System.Net.Http.Json\n@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNetCore.Components.Routing\n@using Microsoft.AspNetCore.Components.Web\n@using Microsoft.AspNetCore.Components.Web.Virtualization\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\n@using Microsoft.JSInterop\n@using nkast.Wasm.Canvas\n@using $safeprojectname$\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/Content/.gitignore",
    "content": ""
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/css/app.css",
    "content": "﻿\nhtml, body\n{\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n\nh1:focus\n{\n    outline: none;\n}\n\na, .btn-link\n{\n    color: #0077cc;\n}\n\n.btn-primary\n{\n    color: #fff;\n    background-color: #1b6ec2;\n    border-color: #1861ac;\n}\n\n.content\n{\n    padding-top: 1.1rem;\n}\n\n.valid.modified:not([type=checkbox])\n{\n    outline: 1px solid #26b050;\n}\n\n.invalid\n{\n    outline: 1px solid red;\n}\n\n.validation-message\n{\n    color: red;\n}\n\n#blazor-error-ui\n{\n    background: lightyellow;\n    bottom: 0;\n    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);\n    display: none;\n    left: 0;\n    padding: 0.6rem 1.25rem 0.7rem 1.25rem;\n    position: fixed;\n    width: 100%;\n    z-index: 1000;\n}\n\n    #blazor-error-ui .dismiss\n    {\n        cursor: pointer;\n        position: absolute;\n        right: 0.75rem;\n        top: 0.5rem;\n    }\n\n.blazor-error-boundary\n{\n    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;\n    padding: 1rem 1rem 1rem 3.7rem;\n    color: white;\n}\n\n    .blazor-error-boundary::after\n    {\n        content: \"An error has occurred.\"\n    }\n\n#theCanvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n\n    /* Disable text highlighting and magnifying glass on iPhone/webkit */\n    -webkit-user-select: none;\n}\n\n\n#canvas \n{\n    position: fixed;\n    top: 0px;\n    right: 0px;\n    bottom: 0px;\n    left: 0px;\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/index.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n    <title>$projectname$</title>\n    <base href=\"./\" />\n    <link href=\"css/bootstrap/bootstrap.min.css\" rel=\"stylesheet\" />\n    <link href=\"css/app.css\" rel=\"stylesheet\" />\n    <link href=\"$projectname$.styles.css\" rel=\"stylesheet\" />\n</head>\n\n<body>\n\n    <div id=\"app\">\n        <div id=\"loading\" style=\"display: table-cell; margin: auto; width:100vw; height:100vh; vertical-align: middle; background: #ffcc10;\">\n            <div style=\"display: block; margin: auto; width: 9em; color: white;font-family: 'Segoe UI', sans-serif;\">\n                <div style=\"text-align: center; font-size: 0.85em;\">Made with<br/><a href=\"https://github.com/kniEngine/kni\"><img src=\"kni.png\" border=\"0\" alt=\"Kni\"></a></div>\n                <div style=\"text-align: center; font-size: 1.8em;\">loading&nbsp;<marquee style=\"width:0.9em; vertical-align: bottom;\">.&nbsp;.&nbsp;.&nbsp;&nbsp;&nbsp;</marquee></div>\n            </div>\n        </div>\n    </div>\n\n    <div id=\"blazor-error-ui\">\n        An unhandled error has occurred.\n        <a href=\"\" class=\"reload\">Reload</a>\n        <a class=\"dismiss\">x</a>\n    </div>\n\n    <script src=\"_framework/blazor.webassembly.js\" autostart=\"false\"></script>\n    <script type=\"module\">\n        import { BrotliDecode } from './js/decode.min.js';\n        window.BrotliDecode = BrotliDecode;\n        // Set this to enable Brotli (.br) decompression on static webServers\n        // that don't support content compression and http://.\n        var enableBrotliDecompression = false;\n        Blazor.start({\n            loadBootResource: function (type, name, defaultUri, integrity)\n            {\n                if (enableBrotliDecompression === true && type !== 'dotnetjs' && location.hostname !== 'localhost')\n                {\n                    return (async function()\n                    {\n                        const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });\n                        if (!response.ok)\n                            throw new Error(response.statusText);\n                        const originalResponseBuffer = await response.arrayBuffer();\n                        const originalResponseArray = new Int8Array(originalResponseBuffer);\n                        const contentType = (type === 'dotnetwasm')\n                                          ? 'application/wasm'\n                                          : 'application/octet-stream';\n                        const decompressedResponseArray = BrotliDecode(originalResponseArray);\n                        return new Response(decompressedResponseArray,\n                                            { headers: { 'content-type': contentType }\n                                   });\n                    })();\n                }\n            }\n        });\n    </script>\n\n    <script src=\"_content/nkast.Wasm.JSInterop/js/JSObject.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Window.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Document.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Navigator.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Gamepad.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Dom/js/Media.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XHR/js/XHR.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/Canvas.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.Audio/js/Audio.8.0.11.js\"></script>\n    <script src=\"_content/nkast.Wasm.XR/js/XR.8.0.11.js\"></script>\n\n    <script>\n        function tickJS()\n        {\n            window.theInstance.invokeMethod('TickDotNet');\n            window.requestAnimationFrame(tickJS);\n        }\n\n        window.initRenderJS = (instance) =>\n        {\n            window.theInstance = instance;\n\n            // set initial canvas size\n            var canvas = document.getElementById('theCanvas');\n            var holder = document.getElementById('canvasHolder');\n            canvas.width = holder.clientWidth;\n            canvas.height = holder.clientHeight;\n            // disable context menu on right click\n            canvas.addEventListener(\"contextmenu\", e => e.preventDefault());\n            \n            // begin game loop\n            window.requestAnimationFrame(tickJS);\n        };\n\n        window.addEventListener(\"keydown\", function(event)\n        {\n            // Prevent Arrows Keys and Spacebar scrolling the outer page\n            // when running inside an iframe. e.g: itch.io embedding.\n            if ([32, 37, 38, 39, 40].indexOf(event.keyCode) > -1)\n                event.preventDefault();\n        });\n        window.addEventListener(\"wheel\", function(event)\n        {\n            // Prevent Mousewheel scrolling the outer page\n            // when running inside an iframe. e.g: itch.io embedding.\n            event.preventDefault();\n        }, { passive: false });\n    </script>\n</body>\n\n</html>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/js/decode.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @typedef {!Object} Options\n * @property {?Int8Array} customDictionary\n */\nlet Options;\n\n/**\n * Private scope / static initializer for decoder.\n *\n * @return {function(!Int8Array, ?Options=):!Int8Array}\n */\nlet makeBrotliDecode = () => {\n/* GENERATED CODE BEGIN */\n  /** @type {!Int32Array} */\n  const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\n  /** @type {!Int32Array} */\n  const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\n  /** @type {!Int32Array} */\n  const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\n  /** @type {!Int16Array} */\n  const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\n  /** @type {!Int16Array} */\n  const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\n  /** @type {!Int16Array} */\n  const CMD_LOOKUP = new Int16Array(2816);\n  {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n  /**\n   * @param {number} i\n   * @return {number}\n   */\n  function log2floor(i) {\n    let /** @type {number} */ result = -1;\n    let /** @type {number} */ step = 16;\n    while (step > 0) {\n      if ((i >>> step) !== 0) {\n        result += step;\n        i = i >>> step;\n      }\n      step = step >> 1;\n    }\n    return result + i;\n  }\n  /**\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @param {number} maxndistbits\n   * @return {number}\n   */\n  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {\n    return 16 + ndirect + 2 * (maxndistbits << npostfix);\n  }\n  /**\n   * @param {number} maxDistance\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @return {number}\n   */\n  function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      throw new Error(\"maxDistance is too small\");\n    }\n    const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    const /** @type {number} */ ndistbits = log2floor(offset) - 1;\n    const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n  }\n  /**\n   * @param {!Int16Array} cmdLookup\n   * @return {void}\n   */\n  function unpackCommandLookupTable(cmdLookup) {\n    const /** @type {!Int16Array} */ insertLengthOffsets = new Int16Array(24);\n    const /** @type {!Int16Array} */ copyLengthOffsets = new Int16Array(24);\n    copyLengthOffsets[0] = 2;\n    for (let /** @type {number} */ i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]));\n      copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]));\n    }\n    for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) {\n      let /** @type {number} */ rangeIdx = cmdCode >>> 6;\n      let /** @type {number} */ distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      const /** @type {number} */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7);\n      const /** @type {number} */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode];\n      const /** @type {number} */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2);\n      const /** @type {number} */ index = cmdCode * 4;\n      cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8));\n      cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = distanceContext;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeWindowBits(s) {\n    const /** @type {number} */ largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 0) {\n      return 16;\n    }\n    let /** @type {number} */ n = readFewBits(s, 3);\n    if (n !== 0) {\n      return 17 + n;\n    }\n    n = readFewBits(s, 3);\n    if (n !== 0) {\n      if (n === 1) {\n        if (largeWindowEnabled === 0) {\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        if (readFewBits(s, 1) === 1) {\n          return -1;\n        }\n        n = readFewBits(s, 6);\n        if (n < 10 || n > 30) {\n          return -1;\n        }\n        return n;\n      } else {\n        return 8 + n;\n      }\n    }\n    return 17;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableEagerOutput(s) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    s.isEager = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableLargeWindow(s) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    s.isLargeWindow = 1;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @return {void}\n   */\n  function attachDictionaryChunk(s, data) {\n    if (s.runningState !== 1) {\n      throw new Error(\"State MUST be freshly initialized\");\n    }\n    if (s.cdNumChunks === 0) {\n      s.cdChunks = new Array(16);\n      s.cdChunkOffsets = new Int32Array(16);\n      s.cdBlockBits = -1;\n    }\n    if (s.cdNumChunks === 15) {\n      throw new Error(\"Too many dictionary chunks\");\n    }\n    s.cdChunks[s.cdNumChunks] = data;\n    s.cdNumChunks++;\n    s.cdTotalSize += data.length;\n    s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n  }\n  /**\n   * @param {!State} s\n   * @param {!InputStream} input\n   * @return {void}\n   */\n  function initState(s, input) {\n    if (s.runningState !== 0) {\n      throw new Error(\"State MUST be uninitialized\");\n    }\n    s.blockTrees = new Int32Array(3091);\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    const /** @type {number} */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 120);\n    s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n    s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n    s.input = input;\n    initBitReader(s);\n    s.runningState = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function close(s) {\n    if (s.runningState === 0) {\n      throw new Error(\"State MUST be initialized\");\n    }\n    if (s.runningState === 11) {\n      return;\n    }\n    s.runningState = 11;\n    if (s.input !== null) {\n      s.input = null;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeVarLenUnsignedByte(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) !== 0) {\n      const /** @type {number} */ n = readFewBits(s, 3);\n      if (n === 0) {\n        return 1;\n      } else {\n        return readFewBits(s, n) + (1 << n);\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeMetaBlockLength(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.inputEnd = readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) {\n      return;\n    }\n    const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4;\n    if (sizeNibbles === 7) {\n      s.isMetadata = 1;\n      if (readFewBits(s, 1) !== 0) {\n        throw new Error(\"Corrupted reserved bit\");\n      }\n      const /** @type {number} */ sizeBytes = readFewBits(s, 2);\n      if (sizeBytes === 0) {\n        return;\n      }\n      for (let /** @type {number} */ i = 0; i < sizeBytes; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 8);\n        if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) {\n          throw new Error(\"Exuberant nibble\");\n        }\n        s.metaBlockLength |= bits << (i * 8);\n      }\n    } else {\n      for (let /** @type {number} */ i = 0; i < sizeNibbles; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 4);\n        if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) {\n          throw new Error(\"Exuberant nibble\");\n        }\n        s.metaBlockLength |= bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd === 0) {\n      s.isUncompressed = readFewBits(s, 1);\n    }\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSymbol(tableGroup, tableIdx, s) {\n    let /** @type {number} */ offset = tableGroup[tableIdx];\n    const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset);\n    offset += val & 0xFF;\n    const /** @type {number} */ bits = tableGroup[offset] >> 16;\n    const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= 8) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    const /** @type {number} */ mask = (1 << bits) - 1;\n    offset += (val & mask) >>> 8;\n    s.bitOffset += ((tableGroup[offset] >> 16) + 8);\n    return tableGroup[offset] & 0xFFFF;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readBlockLength(tableGroup, tableIdx, s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s);\n    const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n  }\n  /**\n   * @param {!Int32Array} v\n   * @param {number} index\n   * @return {void}\n   */\n  function moveToFront(v, index) {\n    const /** @type {number} */ value = v[index];\n    for (; index > 0; index--) {\n      v[index] = v[index - 1];\n    }\n    v[0] = value;\n  }\n  /**\n   * @param {!Int8Array} v\n   * @param {number} vLen\n   * @return {void}\n   */\n  function inverseMoveToFrontTransform(v, vLen) {\n    const /** @type {!Int32Array} */ mtf = new Int32Array(256);\n    for (let /** @type {number} */ i = 0; i < 256; i++) {\n      mtf[i] = i;\n    }\n    for (let /** @type {number} */ i = 0; i < vLen; i++) {\n      const /** @type {number} */ index = v[i] & 0xFF;\n      v[i] = mtf[index];\n      if (index !== 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n  /**\n   * @param {!Int32Array} codeLengthCodeLengths\n   * @param {number} numSymbols\n   * @param {!Int32Array} codeLengths\n   * @param {!State} s\n   * @return {void}\n   */\n  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {\n    let /** @type {number} */ symbol = 0;\n    let /** @type {number} */ prevCodeLen = 8;\n    let /** @type {number} */ repeat = 0;\n    let /** @type {number} */ repeatCodeLen = 0;\n    let /** @type {number} */ space = 32768;\n    const /** @type {!Int32Array} */ table = new Int32Array(33);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31;\n      s.bitOffset += table[p] >> 16;\n      const /** @type {number} */ codeLen = table[p] & 0xFFFF;\n      if (codeLen < 16) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen !== 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        const /** @type {number} */ extraBits = codeLen - 14;\n        let /** @type {number} */ newLen = 0;\n        if (codeLen === 16) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen !== newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        const /** @type {number} */ oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat <<= extraBits;\n        }\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        repeat += readFewBits(s, extraBits) + 3;\n        const /** @type {number} */ repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          throw new Error(\"symbol + repeatDelta > numSymbols\");\n        }\n        for (let /** @type {number} */ i = 0; i < repeatDelta; i++) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen !== 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space !== 0) {\n      throw new Error(\"Unused space\");\n    }\n    codeLengths.fill(0, symbol, numSymbols);\n  }\n  /**\n   * @param {!Int32Array} symbols\n   * @param {number} length\n   * @return {void}\n   */\n  function checkDupes(symbols, length) {\n    for (let /** @type {number} */ i = 0; i < length - 1; ++i) {\n      for (let /** @type {number} */ j = i + 1; j < length; ++j) {\n        if (symbols[i] === symbols[j]) {\n          throw new Error(\"Duplicate simple Huffman code symbol\");\n        }\n      }\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ symbols = new Int32Array(4);\n    const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1);\n    const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1;\n    for (let /** @type {number} */ i = 0; i < numSymbols; i++) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ symbol = readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        throw new Error(\"Can't readHuffmanCode\");\n      }\n      symbols[i] = symbol;\n    }\n    checkDupes(symbols, numSymbols);\n    let /** @type {number} */ histogramId = numSymbols;\n    if (numSymbols === 4) {\n      histogramId += readFewBits(s, 1);\n    }\n    switch(histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n      case 4:\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n      case 5:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n      default:\n        break;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} skip\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18);\n    let /** @type {number} */ space = 32;\n    let /** @type {number} */ numCodes = 0;\n    for (let /** @type {number} */ i = skip; i < 18 && space > 0; i++) {\n      const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15;\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v !== 0) {\n        space -= (32 >> v);\n        numCodes++;\n      }\n    }\n    if (space !== 0 && numCodes !== 1) {\n      throw new Error(\"Corrupted Huffman code histogram\");\n    }\n    readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2);\n    if (simpleCodeOrSkip === 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    } else {\n      return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n    }\n  }\n  /**\n   * @param {number} contextMapSize\n   * @param {!Int8Array} contextMap\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeContextMap(contextMapSize, contextMap, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1;\n    if (numTrees === 1) {\n      contextMap.fill(0, 0, contextMapSize);\n      return numTrees;\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ useRleForZeros = readFewBits(s, 1);\n    let /** @type {number} */ maxRunLengthPrefix = 0;\n    if (useRleForZeros !== 0) {\n      maxRunLengthPrefix = readFewBits(s, 4) + 1;\n    }\n    const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix;\n    const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    for (let /** @type {number} */ i = 0; i < contextMapSize; ) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ code = readSymbol(table, tableIdx, s);\n      if (code === 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        let /** @type {number} */ reps = (1 << code) + readFewBits(s, code);\n        while (reps !== 0) {\n          if (i >= contextMapSize) {\n            throw new Error(\"Corrupted context map\");\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = (code - maxRunLengthPrefix);\n        i++;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {\n    const /** @type {!Int32Array} */ ringBuffers = s.rings;\n    const /** @type {number} */ offset = 4 + treeType * 2;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n    if (blockType === 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType === 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeLiteralBlockSwitch(s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    const /** @type {number} */ literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << 6;\n    s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n    const /** @type {number} */ contextMode = s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeCommandBlockSwitch(s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeDistanceBlockSwitch(s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function maybeReallocateRingBuffer(s) {\n    let /** @type {number} */ newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      const /** @type {number} */ minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize >>= 1;\n      }\n      if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37;\n    const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack);\n    if (s.ringBuffer.length !== 0) {\n      newBuffer.set(s.ringBuffer.subarray(0, s.ringBufferSize), 0);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readNextMetablockHeader(s) {\n    if (s.inputEnd !== 0) {\n      s.nextRunningState = 10;\n      s.runningState = 12;\n      return;\n    }\n    s.literalTreeGroup = new Int32Array(0);\n    s.commandTreeGroup = new Int32Array(0);\n    s.distanceTreeGroup = new Int32Array(0);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    decodeMetaBlockLength(s);\n    if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) {\n      return;\n    }\n    if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) {\n      jumpToByteBoundary(s);\n      s.runningState = (s.isMetadata !== 0) ? 5 : 6;\n    } else {\n      s.runningState = 3;\n    }\n    if (s.isMetadata !== 0) {\n      return;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function readMetablockPartition(s, treeType, numBlockTypes) {\n    let /** @type {number} */ offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n    const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2;\n    offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    s.blockTrees[2 * treeType + 1] = offset;\n    const /** @type {number} */ blockLengthAlphabetSize = 26;\n    offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    s.blockTrees[2 * treeType + 2] = offset;\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} alphabetSizeLimit\n   * @return {void}\n   */\n  function calculateDistanceLut(s, alphabetSizeLimit) {\n    const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits;\n    const /** @type {!Int32Array} */ distOffset = s.distOffset;\n    const /** @type {number} */ npostfix = s.distancePostfixBits;\n    const /** @type {number} */ ndirect = s.numDirectDistanceCodes;\n    const /** @type {number} */ postfix = 1 << npostfix;\n    let /** @type {number} */ bits = 1;\n    let /** @type {number} */ half = 0;\n    let /** @type {number} */ i = 16;\n    for (let /** @type {number} */ j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n    while (i < alphabetSizeLimit) {\n      const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      for (let /** @type {number} */ j = 0; j < postfix; ++j) {\n        distExtraBits[i] = bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readMetablockHuffmanCodesAndContextMaps(s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.distancePostfixBits = readFewBits(s, 2);\n    s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n    s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n    for (let /** @type {number} */ i = 0; i < s.numLiteralBlockTypes; ) {\n      const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes);\n      for (; i < limit; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        s.contextModes[i] = readFewBits(s, 2);\n      }\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n    }\n    s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6);\n    const /** @type {number} */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s);\n    s.trivialLiteralContext = 1;\n    for (let /** @type {number} */ j = 0; j < s.numLiteralBlockTypes << 6; j++) {\n      if (s.contextMap[j] !== j >> 6) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n    s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n    const /** @type {number} */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n    s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s);\n    s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s);\n    let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n    let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow === 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n      distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n    }\n    s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s);\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function copyUncompressedData(s) {\n    const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    if (s.metaBlockLength <= 0) {\n      reload(s);\n      s.runningState = 2;\n      return;\n    }\n    const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos === s.ringBufferSize) {\n      s.nextRunningState = 6;\n      s.runningState = 12;\n      return;\n    }\n    reload(s);\n    s.runningState = 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function writeRingBuffer(s) {\n    const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    if (toWrite !== 0) {\n      s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n    if (s.outputUsed < s.outputLength) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @param {!State} s\n   * @return {!Int32Array}\n   */\n  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) {\n    const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    const /** @type {!Int32Array} */ group = new Int32Array(n + n * maxTableSize);\n    let /** @type {number} */ next = n;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      group[i] = next;\n      next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n    }\n    return group;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function calculateFence(s) {\n    let /** @type {number} */ result = s.ringBufferSize;\n    if (s.isEager !== 0) {\n      result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {void}\n   */\n  function doUseDictionary(s, fence) {\n    if (s.distance > 0x7FFFFFFC) {\n      throw new Error(\"Invalid backward reference\");\n    }\n    const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n    if (address < 0) {\n      initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n      s.runningState = 14;\n    } else {\n      const /** @type {!ByteBuffer} */ dictionaryData = data;\n      const /** @type {number} */ wordLength = s.copyLength;\n      if (wordLength > 31) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      const /** @type {number} */ shift = sizeBits[wordLength];\n      if (shift === 0) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      let /** @type {number} */ offset = offsets[wordLength];\n      const /** @type {number} */ mask = (1 << shift) - 1;\n      const /** @type {number} */ wordIdx = address & mask;\n      const /** @type {number} */ transformIdx = address >>> shift;\n      offset += wordIdx * wordLength;\n      const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS;\n      if (transformIdx >= transforms.numTransforms) {\n        throw new Error(\"Invalid backward reference\");\n      }\n      const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);\n      s.pos += len;\n      s.metaBlockLength -= len;\n      if (s.pos >= fence) {\n        s.nextRunningState = 4;\n        s.runningState = 12;\n        return;\n      }\n      s.runningState = 4;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initializeCompoundDictionary(s) {\n    s.cdBlockMap = new Int8Array(256);\n    let /** @type {number} */ blockBits = 8;\n    while (((s.cdTotalSize - 1) >>> blockBits) !== 0) {\n      blockBits++;\n    }\n    blockBits -= 8;\n    s.cdBlockBits = blockBits;\n    let /** @type {number} */ cursor = 0;\n    let /** @type {number} */ index = 0;\n    while (cursor < s.cdTotalSize) {\n      while (s.cdChunkOffsets[index + 1] < cursor) {\n        index++;\n      }\n      s.cdBlockMap[cursor >>> blockBits] = index;\n      cursor += 1 << blockBits;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} address\n   * @param {number} length\n   * @return {void}\n   */\n  function initializeCompoundDictionaryCopy(s, address, length) {\n    if (s.cdBlockBits === -1) {\n      initializeCompoundDictionary(s);\n    }\n    let /** @type {number} */ index = s.cdBlockMap[address >>> s.cdBlockBits];\n    while (address >= s.cdChunkOffsets[index + 1]) {\n      index++;\n    }\n    if (s.cdTotalSize > address + length) {\n      throw new Error(\"Invalid backward reference\");\n    }\n    s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n    s.rings[s.distRbIdx] = s.distance;\n    s.metaBlockLength -= length;\n    s.cdBrIndex = index;\n    s.cdBrOffset = address - s.cdChunkOffsets[index];\n    s.cdBrLength = length;\n    s.cdBrCopied = 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {number}\n   */\n  function copyFromCompoundDictionary(s, fence) {\n    let /** @type {number} */ pos = s.pos;\n    const /** @type {number} */ origPos = pos;\n    while (s.cdBrLength !== s.cdBrCopied) {\n      const /** @type {number} */ space = fence - pos;\n      const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n      const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset;\n      let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied;\n      if (length > remChunkLength) {\n        length = remChunkLength;\n      }\n      if (length > space) {\n        length = space;\n      }\n      s.ringBuffer.set(s.cdChunks[s.cdBrIndex].slice(s.cdBrOffset, s.cdBrOffset + length), pos);\n      pos += length;\n      s.cdBrOffset += length;\n      s.cdBrCopied += length;\n      if (length === remChunkLength) {\n        s.cdBrIndex++;\n        s.cdBrOffset = 0;\n      }\n      if (pos >= fence) {\n        break;\n      }\n    }\n    return pos - origPos;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decompress(s) {\n    if (s.runningState === 0) {\n      throw new Error(\"Can't decompress until initialized\");\n    }\n    if (s.runningState === 11) {\n      throw new Error(\"Can't decompress after close\");\n    }\n    if (s.runningState === 1) {\n      const /** @type {number} */ windowBits = decodeWindowBits(s);\n      if (windowBits === -1) {\n        throw new Error(\"Invalid 'windowBits' code\");\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = 2;\n    }\n    let /** @type {number} */ fence = calculateFence(s);\n    let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1;\n    let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    while (s.runningState !== 10) {\n      switch(s.runningState) {\n        case 2:\n          if (s.metaBlockLength < 0) {\n            throw new Error(\"Invalid metablock length\");\n          }\n          readNextMetablockHeader(s);\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n        case 3:\n          readMetablockHuffmanCodesAndContextMaps(s);\n          s.runningState = 4;\n        case 4:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 2;\n            continue;\n          }\n          if (s.halfOffset > 2030) {\n            doReadMoreInput(s);\n          }\n          if (s.commandBlockLength === 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];\n          const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1];\n          const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF;\n          s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8;\n          s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));\n          s.j = 0;\n          s.runningState = 7;\n        case 7:\n          if (s.trivialLiteralContext !== 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          } else {\n            let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n              const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState !== 7) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 4;\n            continue;\n          }\n          let /** @type {number} */ distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.distanceBlockLength === 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < 16) {\n              const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                throw new Error(\"Negative distance\");\n              }\n            } else {\n              const /** @type {number} */ extraBits = s.distExtraBits[distanceCode];\n              let /** @type {number} */ bits;\n              if (s.bitOffset + extraBits <= 32) {\n                bits = readFewBits(s, extraBits);\n              } else {\n                if (s.bitOffset >= 16) {\n                  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                  s.bitOffset -= 16;\n                }\n                bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits);\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n          if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.distance > s.maxDistance) {\n            s.runningState = 9;\n            continue;\n          }\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n          if (s.copyLength > s.metaBlockLength) {\n            throw new Error(\"Invalid backward reference\");\n          }\n          s.j = 0;\n          s.runningState = 8;\n        case 8:\n          let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask;\n          let /** @type {number} */ dst = s.pos;\n          const /** @type {number} */ copyLength = s.copyLength - s.j;\n          const /** @type {number} */ srcEnd = src + copyLength;\n          const /** @type {number} */ dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              for (let /** @type {number} */ k = 0; k < copyLength; k += 4) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              ringBuffer.copyWithin(dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            for (; s.j < s.copyLength; ) {\n              ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 8;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState === 8) {\n            s.runningState = 4;\n          }\n          continue;\n        case 9:\n          doUseDictionary(s, fence);\n          continue;\n        case 14:\n          s.pos += copyFromCompoundDictionary(s, fence);\n          if (s.pos >= fence) {\n            s.nextRunningState = 14;\n            s.runningState = 12;\n            return;\n          }\n          s.runningState = 4;\n          continue;\n        case 5:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = 2;\n          continue;\n        case 6:\n          copyUncompressedData(s);\n          continue;\n        case 12:\n          s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize);\n          s.runningState = 13;\n        case 13:\n          if (writeRingBuffer(s) === 0) {\n            return;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n            }\n            s.pos &= ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n        default:\n          throw new Error(\"Unexpected state \" + valueOf(s.runningState));\n      }\n    }\n    if (s.runningState === 10) {\n      if (s.metaBlockLength < 0) {\n        throw new Error(\"Invalid metablock length\");\n      }\n      jumpToByteBoundary(s);\n      checkHealth(s, 1);\n    }\n  }\n\n  /**\n   * @constructor\n   * @param {number} numTransforms\n   * @param {number} prefixSuffixLen\n   * @param {number} prefixSuffixCount\n   * @struct\n   */\n  function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {\n    /** @type {number} */\n    this.numTransforms = 0;\n    /** @type {!Int32Array} */\n    this.triplets = new Int32Array(0);\n    /** @type {!Int8Array} */\n    this.prefixSuffixStorage = new Int8Array(0);\n    /** @type {!Int32Array} */\n    this.prefixSuffixHeads = new Int32Array(0);\n    /** @type {!Int16Array} */\n    this.params = new Int16Array(0);\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n\n  /** @type {!Transforms} */\n  const RFC_TRANSFORMS = new Transforms(121, 167, 50);\n  /**\n   * @param {!Int8Array} prefixSuffix\n   * @param {!Int32Array} prefixSuffixHeads\n   * @param {!Int32Array} transforms\n   * @param {string} prefixSuffixSrc\n   * @param {string} transformsSrc\n   * @return {void}\n   */\n  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {\n    const /** @type {number} */ n = prefixSuffixSrc.length;\n    let /** @type {number} */ index = 1;\n    let /** @type {number} */ j = 0;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      const /** @type {number} */ c = prefixSuffixSrc.charCodeAt(i);\n      if (c === 35) {\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = c;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 363; ++i) {\n      transforms[i] = transformsSrc.charCodeAt(i) - 32;\n    }\n  }\n  {\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\xC2\\xA0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n  }\n  /**\n   * @param {!Int8Array} dst\n   * @param {number} dstOffset\n   * @param {!Int8Array} src\n   * @param {number} srcOffset\n   * @param {number} len\n   * @param {!Transforms} transforms\n   * @param {number} transformIndex\n   * @return {number}\n   */\n  function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) {\n    let /** @type {number} */ offset = dstOffset;\n    const /** @type {!Int32Array} */ triplets = transforms.triplets;\n    const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage;\n    const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads;\n    const /** @type {number} */ transformOffset = 3 * transformIndex;\n    const /** @type {number} */ prefixIdx = triplets[transformOffset];\n    const /** @type {number} */ transformType = triplets[transformOffset + 1];\n    const /** @type {number} */ suffixIdx = triplets[transformOffset + 2];\n    let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx];\n    const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx];\n    const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n    let /** @type {number} */ omitFirst = transformType - 11;\n    let /** @type {number} */ omitLast = transformType;\n    if (omitFirst < 1 || omitFirst > 9) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > 9) {\n      omitLast = 0;\n    }\n    while (prefix !== prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    srcOffset += omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    let /** @type {number} */ i = len;\n    while (i > 0) {\n      dst[offset++] = src[srcOffset++];\n      i--;\n    }\n    if (transformType === 10 || transformType === 11) {\n      let /** @type {number} */ uppercaseOffset = offset - len;\n      if (transformType === 10) {\n        len = 1;\n      }\n      while (len > 0) {\n        const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) {\n            dst[uppercaseOffset] ^= 32;\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] ^= 32;\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] ^= 5;\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType === 21 || transformType === 22) {\n      let /** @type {number} */ shiftOffset = offset - len;\n      const /** @type {number} */ param = transforms.params[transformIndex];\n      let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        let /** @type {number} */ step = 1;\n        const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          scalar += c0;\n          dst[shiftOffset] = (scalar & 0x7F);\n        } else if (c0 < 0xC0) {\n        } else if (c0 < 0xE0) {\n          if (len >= 2) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F));\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          if (len >= 3) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F));\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          if (len >= 4) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            const /** @type {number} */ c3 = dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F));\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType === 21) {\n          len = 0;\n        }\n      }\n    }\n    while (suffix !== suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n    return offset - dstOffset;\n  }\n\n  /**\n   * @param {number} key\n   * @param {number} len\n   * @return {number}\n   */\n  function getNextKey(key, len) {\n    let /** @type {number} */ step = 1 << (len - 1);\n    while ((key & step) !== 0) {\n      step >>= 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n  /**\n   * @param {!Int32Array} table\n   * @param {number} offset\n   * @param {number} step\n   * @param {number} end\n   * @param {number} item\n   * @return {void}\n   */\n  function replicateValue(table, offset, step, end, item) {\n    do {\n      end -= step;\n      table[offset + end] = item;\n    } while (end > 0);\n  }\n  /**\n   * @param {!Int32Array} count\n   * @param {number} len\n   * @param {number} rootBits\n   * @return {number}\n   */\n  function nextTableBitSize(count, len, rootBits) {\n    let /** @type {number} */ left = 1 << (len - rootBits);\n    while (len < 15) {\n      left -= count[len];\n      if (left <= 0) {\n        break;\n      }\n      len++;\n      left <<= 1;\n    }\n    return len - rootBits;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {number} rootBits\n   * @param {!Int32Array} codeLengths\n   * @param {number} codeLengthsSize\n   * @return {number}\n   */\n  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {\n    const /** @type {number} */ tableOffset = tableGroup[tableIdx];\n    let /** @type {number} */ key;\n    const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize);\n    const /** @type {!Int32Array} */ count = new Int32Array(16);\n    const /** @type {!Int32Array} */ offset = new Int32Array(16);\n    let /** @type {number} */ symbol;\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      count[codeLengths[symbol]]++;\n    }\n    offset[1] = 0;\n    for (let /** @type {number} */ len = 1; len < 15; len++) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      if (codeLengths[symbol] !== 0) {\n        sorted[offset[codeLengths[symbol]]++] = symbol;\n      }\n    }\n    let /** @type {number} */ tableBits = rootBits;\n    let /** @type {number} */ tableSize = 1 << tableBits;\n    let /** @type {number} */ totalSize = tableSize;\n    if (offset[15] === 1) {\n      for (key = 0; key < totalSize; key++) {\n        tableGroup[tableOffset + key] = sorted[0];\n      }\n      return totalSize;\n    }\n    key = 0;\n    symbol = 0;\n    for (let /** @type {number} */ len = 1, /** @type {number} */ step = 2; len <= rootBits; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    const /** @type {number} */ mask = totalSize - 1;\n    let /** @type {number} */ low = -1;\n    let /** @type {number} */ currentOffset = tableOffset;\n    for (let /** @type {number} */ len = rootBits + 1, /** @type {number} */ step = 2; len <= 15; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        if ((key & mask) !== low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    return totalSize;\n  }\n\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function doReadMoreInput(s) {\n    if (s.endOfStreamReached !== 0) {\n      if (halfAvailable(s) >= -2) {\n        return;\n      }\n      throw new Error(\"No more input\");\n    }\n    const /** @type {number} */ readOffset = s.halfOffset << 1;\n    let /** @type {number} */ bytesInBuffer = 4096 - readOffset;\n    s.byteBuffer.copyWithin(0, readOffset, 4096);\n    s.halfOffset = 0;\n    while (bytesInBuffer < 4096) {\n      const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer;\n      const /** @type {number} */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} endOfStream\n   * @return {void}\n   */\n  function checkHealth(s, endOfStream) {\n    if (s.endOfStreamReached === 0) {\n      return;\n    }\n    const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n    if (byteOffset > s.tailBytes) {\n      throw new Error(\"Read after end\");\n    }\n    if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) {\n      throw new Error(\"Unused bytes after end\");\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readFewBits(s, n) {\n    const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return val;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readManyBits(s, n) {\n    const /** @type {number} */ low = readFewBits(s, 16);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initBitReader(s) {\n    s.byteBuffer = new Int8Array(4160);\n    s.accumulator32 = 0;\n    s.shortBuffer = new Int16Array(2080);\n    s.bitOffset = 32;\n    s.halfOffset = 2048;\n    s.endOfStreamReached = 0;\n    prepare(s);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function prepare(s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    checkHealth(s, 0);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function reload(s) {\n    if (s.bitOffset === 32) {\n      prepare(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function jumpToByteBoundary(s) {\n    const /** @type {number} */ padding = (32 - s.bitOffset) & 7;\n    if (padding !== 0) {\n      const /** @type {number} */ paddingBits = readFewBits(s, padding);\n      if (paddingBits !== 0) {\n        throw new Error(\"Corrupted padding bits\");\n      }\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function halfAvailable(s) {\n    let /** @type {number} */ limit = 2048;\n    if (s.endOfStreamReached !== 0) {\n      limit = (s.tailBytes + 1) >> 1;\n    }\n    return limit - s.halfOffset;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @param {number} offset\n   * @param {number} length\n   * @return {void}\n   */\n  function copyRawBytes(s, data, offset, length) {\n    if ((s.bitOffset & 7) !== 0) {\n      throw new Error(\"Unaligned copyBytes\");\n    }\n    while ((s.bitOffset !== 32) && (length !== 0)) {\n      data[offset++] = (s.accumulator32 >>> s.bitOffset);\n      s.bitOffset += 8;\n      length--;\n    }\n    if (length === 0) {\n      return;\n    }\n    const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), length >> 1);\n    if (copyNibbles > 0) {\n      const /** @type {number} */ readOffset = s.halfOffset << 1;\n      const /** @type {number} */ delta = copyNibbles << 1;\n      data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset);\n      offset += delta;\n      length -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (length === 0) {\n      return;\n    }\n    if (halfAvailable(s) > 0) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      while (length !== 0) {\n        data[offset++] = (s.accumulator32 >>> s.bitOffset);\n        s.bitOffset += 8;\n        length--;\n      }\n      checkHealth(s, 0);\n      return;\n    }\n    while (length > 0) {\n      const /** @type {number} */ len = readInput(s.input, data, offset, length);\n      if (len === -1) {\n        throw new Error(\"Unexpected end of input\");\n      }\n      offset += len;\n      length -= len;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} byteLen\n   * @return {void}\n   */\n  function bytesToNibbles(s, byteLen) {\n    const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer;\n    const /** @type {number} */ halfLen = byteLen >> 1;\n    const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer;\n    for (let /** @type {number} */ i = 0; i < halfLen; ++i) {\n      shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8));\n    }\n  }\n\n  /** @type {!Int32Array} */\n  const LOOKUP = new Int32Array(2048);\n  /**\n   * @param {!Int32Array} lookup\n   * @param {string} map\n   * @param {string} rle\n   * @return {void}\n   */\n  function unpackLookupTable(lookup, map, rle) {\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    for (let /** @type {number} */ i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32);\n    }\n    for (let /** @type {number} */ i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    let /** @type {number} */ offset = 1280;\n    for (let /** @type {number} */ k = 0; k < 19; ++k) {\n      const /** @type {number} */ value = k & 3;\n      const /** @type {number} */ rep = rle.charCodeAt(k) - 32;\n      for (let /** @type {number} */ i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n  {\n    unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\x81 @\");\n  }\n\n  /**\n   * @constructor\n   * @struct\n   */\n  function State() {\n    /** @type {!Int8Array} */\n    this.ringBuffer = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextModes = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distContextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distExtraBits = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.output = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.byteBuffer = new Int8Array(0);\n    /** @type {!Int16Array} */\n    this.shortBuffer = new Int16Array(0);\n    /** @type {!Int32Array} */\n    this.intBuffer = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.rings = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.blockTrees = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.literalTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.commandTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distanceTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distOffset = new Int32Array(0);\n    /** @type {number} */\n    this.accumulator64 = 0;\n    /** @type {number} */\n    this.runningState = 0;\n    /** @type {number} */\n    this.nextRunningState = 0;\n    /** @type {number} */\n    this.accumulator32 = 0;\n    /** @type {number} */\n    this.bitOffset = 0;\n    /** @type {number} */\n    this.halfOffset = 0;\n    /** @type {number} */\n    this.tailBytes = 0;\n    /** @type {number} */\n    this.endOfStreamReached = 0;\n    /** @type {number} */\n    this.metaBlockLength = 0;\n    /** @type {number} */\n    this.inputEnd = 0;\n    /** @type {number} */\n    this.isUncompressed = 0;\n    /** @type {number} */\n    this.isMetadata = 0;\n    /** @type {number} */\n    this.literalBlockLength = 0;\n    /** @type {number} */\n    this.numLiteralBlockTypes = 0;\n    /** @type {number} */\n    this.commandBlockLength = 0;\n    /** @type {number} */\n    this.numCommandBlockTypes = 0;\n    /** @type {number} */\n    this.distanceBlockLength = 0;\n    /** @type {number} */\n    this.numDistanceBlockTypes = 0;\n    /** @type {number} */\n    this.pos = 0;\n    /** @type {number} */\n    this.maxDistance = 0;\n    /** @type {number} */\n    this.distRbIdx = 0;\n    /** @type {number} */\n    this.trivialLiteralContext = 0;\n    /** @type {number} */\n    this.literalTreeIdx = 0;\n    /** @type {number} */\n    this.commandTreeIdx = 0;\n    /** @type {number} */\n    this.j = 0;\n    /** @type {number} */\n    this.insertLength = 0;\n    /** @type {number} */\n    this.contextMapSlice = 0;\n    /** @type {number} */\n    this.distContextMapSlice = 0;\n    /** @type {number} */\n    this.contextLookupOffset1 = 0;\n    /** @type {number} */\n    this.contextLookupOffset2 = 0;\n    /** @type {number} */\n    this.distanceCode = 0;\n    /** @type {number} */\n    this.numDirectDistanceCodes = 0;\n    /** @type {number} */\n    this.distancePostfixBits = 0;\n    /** @type {number} */\n    this.distance = 0;\n    /** @type {number} */\n    this.copyLength = 0;\n    /** @type {number} */\n    this.maxBackwardDistance = 0;\n    /** @type {number} */\n    this.maxRingBufferSize = 0;\n    /** @type {number} */\n    this.ringBufferSize = 0;\n    /** @type {number} */\n    this.expectedTotalSize = 0;\n    /** @type {number} */\n    this.outputOffset = 0;\n    /** @type {number} */\n    this.outputLength = 0;\n    /** @type {number} */\n    this.outputUsed = 0;\n    /** @type {number} */\n    this.ringBufferBytesWritten = 0;\n    /** @type {number} */\n    this.ringBufferBytesReady = 0;\n    /** @type {number} */\n    this.isEager = 0;\n    /** @type {number} */\n    this.isLargeWindow = 0;\n    /** @type {number} */\n    this.cdNumChunks = 0;\n    /** @type {number} */\n    this.cdTotalSize = 0;\n    /** @type {number} */\n    this.cdBrIndex = 0;\n    /** @type {number} */\n    this.cdBrOffset = 0;\n    /** @type {number} */\n    this.cdBrLength = 0;\n    /** @type {number} */\n    this.cdBrCopied = 0;\n    /** @type {!Array<?Int8Array>} */\n    this.cdChunks = new Array(0);\n    /** @type {!Int32Array} */\n    this.cdChunkOffsets = new Int32Array(0);\n    /** @type {number} */\n    this.cdBlockBits = 0;\n    /** @type {!Int8Array} */\n    this.cdBlockMap = new Int8Array(0);\n    /** @type {!InputStream|null} */\n    this.input = null;\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n\n  /** @type {!ByteBuffer} */\n  let data = new Int8Array(0);\n  /** @type {!Int32Array} */\n  const offsets = new Int32Array(32);\n  /** @type {!Int32Array} */\n  const sizeBits = new Int32Array(32);\n  /**\n   * @param {!Int8Array} newData\n   * @param {!Int32Array} newSizeBits\n   * @return {void}\n   */\n  function setData(newData, newSizeBits) {\n    if (newSizeBits.length > 31) {\n      throw new Error(\"sizeBits length must be at most \" + valueOf(31));\n    }\n    for (let /** @type {number} */ i = 0; i < 4; ++i) {\n      if (newSizeBits[i] !== 0) {\n        throw new Error(\"first \" + valueOf(4) + \" must be 0\");\n      }\n    }\n    const /** @type {!Int32Array} */ dictionaryOffsets = offsets;\n    const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits;\n    dictionarySizeBits.set(newSizeBits.subarray(0, newSizeBits.length), 0);\n    let /** @type {number} */ pos = 0;\n    const /** @type {number} */ limit = newData.length;\n    for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) {\n      dictionaryOffsets[i] = pos;\n      const /** @type {number} */ bits = dictionarySizeBits[i];\n      if (bits !== 0) {\n        if (bits >= 31) {\n          throw new Error(\"newSizeBits values must be less than 31\");\n        }\n        pos += i << bits;\n        if (pos <= 0 || pos > limit) {\n          throw new Error(\"newSizeBits is inconsistent: overflow\");\n        }\n      }\n    }\n    for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) {\n      dictionaryOffsets[i] = pos;\n    }\n    if (pos !== limit) {\n      throw new Error(\"newSizeBits is inconsistent: underflow\");\n    }\n    data = newData;\n  }\n\n  /**\n   * @param {!Int8Array} dictionary\n   * @param {string} data0\n   * @param {string} data1\n   * @param {string} skipFlip\n   * @param {!Int32Array} sizeBits\n   * @param {string} sizeBitsData\n   * @return {void}\n   */\n  function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) {\n    const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1);\n    if (dict.length !== dictionary.length) {\n      throw new Error(\"Corrupted brotli dictionary\");\n    }\n    let /** @type {number} */ offset = 0;\n    const /** @type {number} */ n = skipFlip.length;\n    for (let /** @type {number} */ i = 0; i < n; i += 2) {\n      const /** @type {number} */ skip = skipFlip.charCodeAt(i) - 36;\n      const /** @type {number} */ flip = skipFlip.charCodeAt(i + 1) - 36;\n      for (let /** @type {number} */ j = 0; j < skip; ++j) {\n        dict[offset] ^= 3;\n        offset++;\n      }\n      for (let /** @type {number} */ j = 0; j < flip; ++j) {\n        dict[offset] ^= 236;\n        offset++;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) {\n      sizeBits[i] = sizeBitsData.charCodeAt(i) - 65;\n    }\n    dictionary.set(dict);\n  }\n  {\n    const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784);\n    const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25);\n    unpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\x0E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\x0E\\t\\x0E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\x7F\\\"+njmfyk9\\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\x0Bwbmhzbqgaltoavpk965YIbub03s{\\t\\x7F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\x0E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\x7F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\x0E\\t\\n\\nabmdwqjnabwk*x\\x0E\\t33s{\\t~*8hl9\\0effpbg=\\x0Ep9,,#X^8wloosovd+*x\\tx\\x0E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\x0E\\t~\\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\x7F\\x7FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\x0E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\x0E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\x7F\\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\\x0E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\x0E\\t?\\\"pwffo#zlv#k1=\\x0E\\telqn#ifpvp233&#nfmv-\\x0E\\t\\n\\x0E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\x0E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\x7F\\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\x7F\\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\x0Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\x0BBl\\bQ\\x7F\\x0BUm\\x05Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\x0BBM\\x0B|j\\x04BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\x05{X\\bTF\\bVV\\bVK\\t\\x7Fm\\x04kF\\t[]\\bPm\\bTv\\nsI\\x0Bpg\\t[I\\bQp\\x04mx\\x0B_W\\n^M\\npe\\x0BQ}\\x0BGu\\nel\\npe\\x04Ch\\x04BV\\bTA\\tSo\\nzk\\x0BGL\\x0BxD\\nd[\\x05Jz\\x05MY\\bQp\\x04li\\nfl\\npC\\x05{B\\x05Nt\\x0BwT\\ti_\\bTg\\x04QQ\\n|p\\x0BXN\\bQS\\x0BxD\\x04QC\\bWZ\\tpD\\x0BVS\\bTW\\x05Nt\\x04Yh\\nzu\\x04Kj\\x05N}\\twr\\tHa\\n_D\\tj`\\x0BQ}\\x0BWp\\nxZ\\x04{c\\tji\\tBU\\nbD\\x04a|\\tTn\\tpV\\nZd\\nmC\\x0BEV\\x05{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\x0Bxs\\nXW\\twR\\x0Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\x05{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\x04Su\\bTF\\x0B_W\\x0BWs\\x0BsI\\x05m\\x7F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\x04MD\\tBe\\tiD\\x0B@@\\bTl\\bPv\\t}t\\x04Sw\\x04M`\\x0BnU\\tkW\\x0Bed\\nqo\\x0BxY\\tA|\\bTz\\x0By`\\x04BR\\x04BM\\tia\\x04XU\\nyu\\x04n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\x7Fm\\tav\\tBN\\x0Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\x0BWc\\x0Byu\\x04Dl\\x04CJ\\x0BWj\\x0BHR\\t`V\\x0BuW\\tQy\\np@\\x0BGu\\x05pl\\x04Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\x05ui\\x05\\x7FR\\nbI\\twQ\\tBZ\\tWV\\x04BR\\npg\\tcg\\x05ti\\x04CW\\n_y\\tRg\\bQa\\x0BQB\\x0BWc\\nYb\\x05le\\ngE\\x04Su\\nL[\\tQ\\x7F\\tea\\tdj\\x0B]W\\nb~\\x04M`\\twL\\bTV\\bVH\\nt\\x7F\\npl\\t|b\\x05s_\\bU|\\bTa\\x04oQ\\x05lv\\x04Sk\\x04M`\\bTv\\x0BK}\\nfl\\tcC\\x04oQ\\x04BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\x0BHR\\bPv\\x0BLx\\x0BEZ\\bT\\x7F\\bTv\\tiD\\x05oD\\x05MU\\x0BwB\\x04Su\\x05k`\\x04St\\ntC\\tPl\\tKg\\noi\\tjY\\x0BxY\\x04h}\\nzk\\bWZ\\t\\x7Fm\\x0Be`\\tTB\\tfE\\nzk\\t`z\\x04Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\x04Kd\\nfy\\x04Yh\\t[I\\x0BDg\\x04Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\x04oQ\\bTW\\x04Jm\\x0BwB\\tea\\x04Yh\\x04BC\\tsb\\tTn\\nzU\\n_y\\x0BxY\\tQ]\\ngw\\x04mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\x0BRb\\twQ\\n]Q\\x04QJ\\bWg\\x0BWa\\bQj\\ntC\\bVH\\nYm\\x0Bxs\\bVK\\nel\\bWI\\x0BxY\\x04Cq\\ntR\\x0BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\x0Bxs\\x0B_W\\td{\\x0BQ}\\tcg\\tTz\\tA|\\tCj\\x0BLm\\x05N}\\x05m\\x7F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\x0BQ}\\bTf\\x05ka\\x04Jm\\x0B@@\\bV`\\tzp\\n@N\\x04Sw\\tiI\\tcg\\noi\\x04Su\\bVw\\x04lo\\x04Cy\\tc}\\x0Bb\\\\\\tsU\\x04BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\x0BbC\\tNo\\x05Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\x05lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\x7Fm\\nLk\\tkj\\n@N\\x04Sb\\x04KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\x04XO\\bWW\\ndz\\x04li\\tBN\\nd[\\bWO\\x04MD\\x0BKC\\tdj\\tI_\\bVV\\ny\\\\\\x0BLm\\x05xl\\txB\\tkV\\x0Bb\\\\\\x0BJW\\x0BVS\\tVx\\x0BxD\\td{\\x04MD\\bTa\\t|`\\x0BPz\\x04R}\\x0BWs\\x04BM\\nsI\\x04CN\\bTa\\x04Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\x0BWh\\x0BWk\\nxS\\x0BAz\\x0BwX\\nbI\\x04oQ\\tfw\\nqI\\nV|\\nun\\x05z\\x7F\\x0Bpg\\td\\\\\\x0BoA\\x05{D\\ti_\\x05xB\\bT\\x7F\\t`V\\x05qr\\tTT\\x04g]\\x04CA\\x0BuR\\tVJ\\tT`\\npw\\x0BRb\\tI_\\nCx\\x04Ro\\x0BsI\\x04Cj\\x04Kh\\tBv\\tWV\\x04BB\\x05oD\\x05{D\\nhc\\x04Km\\x0B^R\\tQE\\n{I\\np@\\nc|\\x05Gt\\tc}\\x04Dl\\nzU\\x05qN\\tsV\\x05k}\\tHh\\x0B|j\\nqo\\x05u|\\tQ]\\x0Bek\\x05\\x7FZ\\x04M`\\x04St\\npe\\tdj\\bVG\\x0BeE\\t\\x7Fm\\x0BWc\\x04|I\\n[W\\tfL\\bT\\x7F\\tBZ\\x04Su\\x0BKa\\x04Cq\\x05Nt\\x04Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\x04B\\\\\\tQy\\x0BBl\\bWg\\x04XD\\x05kc\\x0Bx[\\bVV\\tQ]\\t\\x7Fa\\tPy\\x0BxD\\nfI\\t}f\\x05oD\\tdj\\tSG\\x05ls\\t~D\\x04CN\\n{Z\\t\\\\v\\n_D\\nhc\\x0Bx_\\x04C[\\tAJ\\nLM\\tVx\\x04CI\\tbj\\tc^\\tcF\\ntC\\x04Sx\\twr\\x04XA\\bU\\\\\\t|a\\x0BK\\\\\\bTV\\bVj\\nd|\\tfs\\x04CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\x7F\\x05Nt\\x0BDg\\tVc\\bTl\\x04d@\\npo\\t\\x7FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\x04l`\\bTx\\bWf\\tHE\\x0BF{\\tcO\\tfD\\nlm\\x0BfZ\\nlm\\x0BeU\\tdG\\x04BH\\bTV\\tSi\\x05MW\\nwX\\nz\\\\\\t\\\\c\\x04CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\x7F\\t`i\\ng@\\x05nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\x0BxY\\x04Kj\\tAJ\\x05uN\\ti[\\npe\\x04Sk\\x0BDg\\x0Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\x04Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\x0B_W\\nLk\\x05Nt\\tyj\\tfM\\x04R\\x7F\\tiI\\bTl\\x0BwX\\tsV\\x0BMl\\nyu\\tAJ\\bVj\\x04KO\\tWV\\x0BA}\\x0BW\\x7F\\nrp\\tiD\\x0B|o\\x05lv\\x0BsI\\x04BM\\td~\\tCU\\bVb\\x04eV\\npC\\x0BwT\\tj`\\tc}\\x0Bxs\\x0Bps\\x0Bvh\\tWV\\x0BGg\\x0BAe\\x0BVK\\x0B]W\\trg\\x0BWc\\x05F`\\tBr\\x0Bb\\\\\\tdZ\\bQp\\nqI\\x04kF\\nLk\\x0BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\x05{A\\x05wj\\twN\\x0B@@\\bTe\\ti_\\n_D\\twL\\nAH\\x0BiK\\x0Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\x05Gt\\x0BVK\\npl\\x04S}\\x0BWP\\t|d\\x04MD\\x0BHV\\bT\\x7F\\x04R}\\x04M`\\bTV\\bVH\\x05lv\\x04Ch\\bW[\\x04Ke\\tR{\\x0B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\x04Ke\\tBe\\x04Oi\\tR{\\td\\\\\\x05nB\\bWZ\\tdZ\\tVJ\\x05Os\\t\\x7Fm\\x04uQ\\x0BhZ\\x04Q@\\x04QQ\\nfI\\bW[\\x04B\\\\\\x04li\\nzU\\nMd\\x04M`\\nxS\\bVV\\n\\\\}\\x0BxD\\t\\x7Fm\\bTp\\x04IS\\nc|\\tkV\\x05i~\\tV{\\x0BhZ\\t|b\\bWt\\n@R\\x0BoA\\x0BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\x04BR\\x0BQB\\x05Nj\\tCP\\t[I\\bTv\\t`W\\x05uN\\x0Bpg\\x0Bpg\\x0BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\x0BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\x04m`\\bTv\\nyd\\nrp\\bWf\\tUX\\x04BV\\nzk\\nd}\\twQ\\t}f\\x04Ce\\x0Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\x7F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\x04Kn\\x0BnU\\tAt\\tpD\\x0B^R\\x0BIr\\x04b[\\tR{\\tdE\\x0BxD\\x0BWK\\x0BWA\\bQL\\bW@\\x04Su\\bUd\\nDM\\tPc\\x04CA\\x04Dl\\x04oQ\\tHs\\x05wi\\x04ub\\n\\x7Fa\\bQp\\x05Ob\\nLP\\bTl\\x04Y[\\x0BK}\\tAJ\\bQ\\x7F\\x04n^\\x0BsA\\bSM\\nqM\\bWZ\\n^W\\x0Bz{\\x04S|\\tfD\\bVK\\bTv\\bPv\\x04BB\\tCP\\x04dF\\tid\\x0Bxs\\x04mx\\x0Bws\\tcC\\ntC\\tyc\\x05M`\\x0BW\\x7F\\nrh\\bQp\\x0BxD\\x04\\\\o\\nsI\\x04_k\\nzu\\x04kF\\tfD\\x04Xs\\x04XO\\tjp\\bTv\\x04BS\\x05{B\\tBr\\nzQ\\nbI\\tc{\\x04BD\\x04BV\\x05nO\\bTF\\tca\\x05Jd\\tfL\\tPV\\tI_\\nlK\\x04`o\\twX\\npa\\tgu\\bP}\\x05{^\\bWf\\n{I\\tBN\\npa\\x04Kl\\x0Bpg\\tcn\\tfL\\x0Bvh\\x04Cq\\bTl\\x0BnU\\bSq\\x04Cm\\twR\\bUJ\\npe\\nyd\\nYg\\x04Cy\\x0BKW\\tfD\\nea\\x04oQ\\tj_\\tBv\\x04nM\\x0BID\\bTa\\nzA\\x05pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\x05{X\\x05kk\\x0BxD\\x04|I\\x05xl\\nfy\\x04Ce\\x0BwB\\nLk\\x0Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\x04Hk\\x04OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\x04Oi\\bSB\\x04XA\\x0BeE\\tjp\\nq}\\tiD\\x05qN\\x0B^R\\t\\x7Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\x0BHV\\bTf\\tTn\\x04\\\\N\\x04\\\\N\\nuB\\x05lv\\nyu\\tTd\\bTf\\bPL\\x0B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\x05ia\\bWZ\\tcF\\x04Jm\\n{Z\\bWO\\x04_k\\x04Df\\x04RR\\td\\\\\\bVV\\x0Bxs\\x04BN\\x05ti\\x04lm\\tTd\\t]y\\x0BHV\\tSo\\x0B|j\\x04XX\\tA|\\x0BZ^\\x0BGu\\bTW\\x05M`\\x04kF\\x0BhZ\\x0BVK\\tdG\\x0BBl\\tay\\nxU\\x05qE\\x05nO\\bVw\\nqI\\x04CX\\ne\\x7F\\tPl\\bWO\\x0BLm\\tdL\\x05uH\\x04Cm\\tdT\\x04fn\\x0BwB\\x05ka\\x0BnU\\n@M\\nyT\\tHv\\t\\\\}\\x04Kh\\td~\\x04Yh\\x05k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\x05MY\\npl\\bQ_\\twr\\x0BAx\\tHE\\bTg\\bSq\\x05vp\\x0Bb\\\\\\bWO\\nOl\\nsI\\nfy\\x0BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\x0Bxv\\x04k_\\bWO\\x0B|j\\x0BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\x05k}\\x04ra\\tUT\\x0BJc\\x0Bed\\np@\\tQN\\nd|\\tkj\\tHk\\x04M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\x04BB\\x04BH\\x04Cm\\npl\\tIQ\\bVK\\x0Bxs\\n`e\\x0BiK\\npa\\x04Oi\\tUS\\bTp\\tfD\\nPG\\x05kk\\x04XA\\nz\\\\\\neg\\x0BWh\\twR\\x05qN\\nqS\\tcn\\x04lo\\nxS\\n^W\\tBU\\nt\\x7F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\x0BVK\\x05ls\\tVJ\\bVV\\x0BeE\\x04\\\\o\\nyX\\nYm\\x04M`\\x05lL\\nd|\\nzk\\tA{\\x05sE\\twQ\\x04XT\\nt\\x7F\\tPl\\t]y\\x0BwT\\x05{p\\x04MD\\x0Bb\\\\\\tQ]\\x04Kj\\tJn\\nAH\\x0BRb\\tBU\\tHK\\t\\\\c\\nfI\\x05m\\x7F\\nqM\\n@R\\tSo\\noi\\x04BT\\tHv\\n_y\\x04Kh\\tBZ\\t]i\\bUJ\\tV{\\x04Sr\\nbI\\x0BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\x04S|\\x0BuW\\tiI\\bWI\\nqI\\x0B|j\\x04BV\\bVg\\bWZ\\x04kF\\x0Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\x0Bps\\nAO\\bTa\\x05xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\x0Bw}\\x0BqO\\ti[\\bQ\\x7F\\bTz\\x0BVF\\twN\\x05ts\\tdw\\bTv\\neS\\ngi\\tNr\\x05yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\x0BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\x04nM\\bWQ\\x0BAx\\nMd\\tBr\\x05ui\\x0BxY\\bSM\\x0BWc\\x0B|j\\x0Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\x0BeU\\x04e^\\bTg\\nqI\\tac\\bPv\\tcF\\x04oQ\\tQ\\x7F\\x0BhZ\\x05ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\x04S|\\x04M`\\n{I\\tS{\\x04_O\\tBZ\\x04Zi\\x04Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\x0BGu\\x05yS\\nqA\\t[r\\neK\\x04M`\\tdZ\\x05lL\\bUg\\bTl\\nbD\\tUS\\x0Bb\\\\\\tpV\\ncc\\x04S\\\\\\tct\\t`z\\bPL\\x0BWs\\nA`\\neg\\bSq\\x05uE\\x04CR\\x0BDg\\t`W\\x0Bz{\\x0BWc\\x04Sk\\x04Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\x0BRb\\bTQ\\npl\\x05Gt\\x0BuW\\x05uj\\npF\\nqI\\tfL\\t[I\\tia\\x04XO\\nyu\\x0BDg\\x0Bed\\tq{\\x04VG\\bQ\\x7F\\x05ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\x04]j\\tkV\\toU\\bTp\\nzU\\x05nB\\x0BB]\\ta{\\bV@\\n]n\\x04m`\\tcz\\tR{\\x04m`\\bQa\\x0BwT\\bSM\\x05MY\\x05qN\\tdj\\x05~s\\x0BQ}\\x05MY\\x0BMB\\tBv\\twR\\bRg\\x0BQ}\\tql\\x0BKC\\nrm\\x05xu\\x04CC\\x0BwB\\x0Bvh\\tBq\\x04Xq\\npV\\ti_\\x05Ob\\x05uE\\nbd\\nqo\\x0B{i\\nC~\\tBL\\x0BeE\\x05uH\\bVj\\x04Ey\\x04Gz\\x0BzR\\x0B{i\\tcf\\n{Z\\n]n\\x04XA\\x0BGu\\x0BnU\\thS\\x0BGI\\nCc\\tHE\\bTA\\tHB\\x04BH\\x04Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\x7F\\tc\\\\\\x0BmO\\x0BWX\\nfH\\np@\\x05MY\\bTF\\nlK\\tBt\\nzU\\tTT\\x04Km\\x0BwT\\npV\\ndt\\x0ByI\\tVx\\tQ\\x7F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\x04nM\\tTn\\ndS\\t]g\\nLc\\x0BwB\\t}t\\t[I\\tCP\\x04kX\\x0BFm\\x0BhZ\\x05m\\x7F\\ti[\\np@\\x0BQ}\\x0BW\\x7F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\x0BRb\\tio\\tPy\\x04Y[\\nxU\\tct\\x0B@@\\tww\\bPv\\x04BM\\x04FF\\ntb\\x05v|\\x0BKm\\tBq\\tBq\\x04Kh\\x04`o\\nZd\\x04XU\\ti]\\t|`\\tSt\\x04B\\\\\\bQ\\x7F\\x0B_W\\tTJ\\nqI\\t|a\\tA{\\x0BuP\\x04MD\\tPl\\nxR\\tfL\\x0Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\x05kc\\nd|\\bVV\\ny\\\\\\x05kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\x0BW\\x7F\\nqs\\x05lv\\bSM\\x04Zi\\x0BVK\\x05ia\\x0BQB\\tQ\\x7F\\n{Z\\bPt\\x0BKl\\nlK\\nhs\\ndS\\bVK\\x05mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\x0BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\x0BeU\\nBf\\tdj\\x05Mr\\n|p\\t\\\\g\\t]r\\bVb\\x05{D\\nd[\\x04XN\\tfM\\tO\\\\\\x05s_\\tcf\\tiZ\\x04XN\\x0BWc\\tqv\\n`m\\tU^\\x05oD\\nd|\\x0BGg\\tdE\\x0Bwf\\x04lo\\x04u}\\nd|\\x05oQ\\t`i\\x04Oi\\x0BxD\\ndZ\\nCx\\x04Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\x0Bps\\ntC\\x0BpP\\x0Bqw\\bPu\\bPX\\tDm\\npw\\x05Nj\\tss\\taG\\x0Bxs\\bPt\\noL\\x04Gz\\tOk\\ti@\\ti]\\x04eC\\tIQ\\tii\\tdj\\x0B@J\\t|d\\x05uh\\bWZ\\x0BeU\\x0BnU\\bTa\\tcC\\x04g]\\nzk\\x04Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\x0BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\x05ln\\t|d\\tbs\\nqI\\x05{B\\x0BAx\\np@\\nzk\\x0BRb\\x05Os\\x0BWS\\x04e^\\x0BD_\\tBv\\x0BWd\\bVb\\x0Bxs\\x0BeE\\bRw\\n]n\\n|p\\x0Bg|\\tfw\\x05kc\\bTI\\x05ka\\n\\\\T\\x04Sp\\tju\\x0Bps\\npe\\x05u|\\x0BGr\\bVe\\tCU\\x04]M\\x04XU\\x0BxD\\bTa\\tIQ\\x0BWq\\tCU\\tam\\tdj\\bSo\\x04Sw\\x0BnU\\x04Ch\\tQ]\\x05s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\x04Yc\\tUZ\\bTx\\npe\\x0BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\x0BxD\\x04BR\\nzQ\\tQN\\x04]M\\x04Yh\\nLP\\x0BFm\\x0BLX\\x05vc\\x0Bql\\x05ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\x04oQ\\t`z\\t[I\\tB`\\x0BRb\\tyj\\tsb\\x0BWs\\bTl\\tkV\\x0Bed\\ne\\x7F\\x05lL\\x0BxN\\t\\x7Fm\\nJn\\tjY\\x0BxD\\bVb\\bSq\\x0Byu\\twL\\x0BXL\\bTA\\tpg\\tAt\\tnD\\x04XX\\twR\\npl\\nhw\\x05yS\\nps\\tcO\\bW[\\x0B|j\\x04XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\x05k`\\x05qN\\tdw\\tWV\\tHE\\x0BEV\\x05Jz\\tid\\tB`\\tzh\\x05E]\\tfD\\bTg\\x05qN\\bTa\\tja\\x04Cv\\bSM\\nhc\\bUe\\x05t_\\tie\\x04g]\\twQ\\nPn\\bVB\\tjw\\bVg\\x0BbE\\tBZ\\x0BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\x0BD]\\tBZ\\ti[\\tfD\\x0BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\x04oQ\\x04lo\\x0BLx\\x0BM@\\bWZ\\x04Kn\\x0Bpg\\nTi\\nIv\\n|r\\x0B@}\\x05Jz\\x05Lm\\x05Wh\\x05k}\\x05ln\\x0BxD\\n]s\\x04gc\\x0Bps\\tBr\\bTW\\x0BBM\\x05tZ\\nBY\\x04DW\\tjf\\x0BSW\\x04C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\x05lv\\x04BC\\nzQ\\t[I\\x0Bgl\\nig\\bUs\\x04BT\\x0BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\x0BID\\x0B|j\\x04KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\fHy\\fIk\\fHU\\fId\\fHy\\fIl\\fHT\\fIk\\fHy\\fHR\\fHy\\fIg\\fHx\\fH\\\\\\fHF\\fH\\\\\\fHD\\fIk\\fHc\\fHy\\fHy\\fHS\\fHA\\fIl\\fHk\\fHT\\fHy\\fH\\\\\\fHH\\fIg\\fHU\\fIg\\fHj\\fHF\\fHU\\fIl\\fHC\\fHU\\fHC\\fHR\\fHH\\fHy\\fHI\\fHRibdqbm\\fHj\\fHp\\fHp\\fIg\\fHi\\fH@\\fHJ\\fIg\\fH{\\fHd\\fHp\\fHR\\fH{\\fHc\\fHU\\fHB\\fHk\\fHD\\fHY\\fHU\\fHC\\fIk\\fHI\\fIk\\fHI\\fIl\\fHt\\fH\\\\\\fHp\\fH@\\fHJ\\fIl\\fHy\\fHd\\fHp\\fIl\\fHY\\fIk\\fHD\\fHd\\fHD\\fHc\\fHU\\fH\\\\\\fHe\\fHT\\fHB\\fIk\\fHy\\fHB\\fHY\\fIg\\fH^\\fIk\\fHT\\fH@\\fHB\\fHd\\fHJ\\fIk\\fH\\x7F\\fH\\\\\\fHj\\fHB\\fH@\\fHT\\fHA\\fH\\\\\\fH@\\fHD\\fHv\\fH^\\fHB\\fHD\\fHj\\fH{\\fHT\\fIl\\fH^\\fIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\x0E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\x0E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\x0E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\x0E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\x0E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\x0E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\x0E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\x7F\\x7F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\x0E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\x0E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\x7F\\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\x0E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\x0E\\t\\x0E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\x0E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\x0E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\x0E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\x0E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\x0E\\t\\x0E\\t\\x0E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\x0E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\x0E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\x0E\\t\\x0E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\x0E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\x0E\\t\\\\slsvsp\\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\x0E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\x0BBl\\bQ\\x7F*+\\x0BUm\\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x01\\0\\x07\\x06\\x05\\x04\\x04\\x05\\x06\\x07\\0\\x01\\x02\\x03\\x0B\\n\\t\\b\\x0F\\x0E\\r\\f\\f\\r\\x0E\\x0F\\b\\t\\n\\x0B\\x13\\x12\\x11\\x10\\x17\\x16\\x15\\x14\\x14\\x15\\x16\\x17\\x10\\x11\\x12\\x13\\x1B\\x1A\\x19\\x18\\x1F\\x1E\\x1D\\x1C\\x1C\\x1D\\x1E\\x1F\\x18\\x19\\x1A\\x1B\\x13\\x13\\x13\\x13\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x13\\x13\\x13\\x13\\x02\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\0\\x03\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x03\\x03\\x02\\x03\\x01\\x03\\0\\x03\\x07\\x03\\x06\\x03\\x05\\x03\\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\x0E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\x0E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\x0E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\x0E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\x0E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\fUh\\fT{\\fTN\\n{I\\np@\\x04Fr\\x0BBl\\bQ\\x7F\\tA{\\x0BUm\\x05Gx\\tA{\\x01yp\\x06YA\\0zX\\bTV\\bWl\\bUd\\x04BM\\x0BB{\\npV\\x0B@x\\x04B\\\\\\np@\\x04Db\\x04Gz\\tal\\npa\\tfM\\tuD\\bV~\\x04mx\\x0BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\x05oD\\tkV\\x0Bed\\x0BHR\\nb~\\x04M`\\nJp\\x05oD\\x04|Q\\nLP\\x04Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\x05F`\\x04Cm\\x0BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\x7F\\nZd\\x04XU\\x04li\\tfr\\ti@\\tBH\\x04BD\\x04BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\x0Bxs\\x04Zf\\nqI\\x04Zf\\x0BBM\\x0B|j\\t}t\\bSM\\nmC\\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\fHB\\fIk\\fHn\\fH^\\fHS\\fHc\\fHU\\fId\\fHn\\fH{\\fHC\\fHR\\fHT\\fHR\\fHI\\fHc\\fHY\\fHn\\fH\\\\\\fHU\\fIk\\fHy\\fIg\\fHd\\fHy\\fIm\\fHw\\fH\\\\\\fHU\\fHR\\fH@\\fHR\\fHJ\\fHy\\fHU\\fHR\\fHT\\fHA\\fIl\\fHU\\fIm\\fHc\\fH\\\\\\fHU\\fIl\\fHB\\fId\\fHn\\fHJ\\fHS\\fHD\\fH@\\fHR\\fHHgjsolgl`p\\fHT\\fHB\\fHC\\fH\\\\\\fIn\\fHF\\fHD\\fHR\\fHB\\fHF\\fHH\\fHR\\fHG\\fHS\\fH\\\\\\fHx\\fHT\\fHH\\fHH\\fH\\\\\\fHU\\fH^\\fIg\\fH{\\fHU\\fIm\\fHj\\fH@\\fHR\\fH\\\\\\fHJ\\fIk\\fHZ\\fHU\\fIm\\fHd\\fHz\\fIk\\fH^\\fHC\\fHJ\\fHS\\fHy\\fHR\\fHB\\fHY\\fIk\\fH@\\fHH\\fIl\\fHD\\fH@\\fIl\\fHv\\fHB\\fI`\\fHH\\fHT\\fHR\\fH^\\fH^\\fIk\\fHz\\fHp\\fIe\\fH@\\fHB\\fHJ\\fHJ\\fHH\\fHI\\fHR\\fHD\\fHU\\fIl\\fHZ\\fHU\\fH\\\\\\fHi\\fH^\\fH{\\fHy\\fHA\\fIl\\fHD\\fH{\\fH\\\\\\fHF\\fHR\\fHT\\fH\\\\\\fHR\\fHH\\fHy\\fHS\\fHc\\fHe\\fHT\\fIk\\fH{\\fHC\\fIl\\fHU\\fIn\\fHm\\fHj\\fH{\\fIk\\fHs\\fIl\\fHB\\fHz\\fIg\\fHp\\fHy\\fHR\\fH\\\\\\fHi\\fHA\\fIl\\fH{\\fHC\\fIk\\fHH\\fIm\\fHB\\fHY\\fIg\\fHs\\fHJ\\fIk\\fHn\\fHi\\fH{\\fH\\\\\\fH|\\fHT\\fIk\\fHB\\fIk\\fH^\\fH^\\fH{\\fHR\\fHU\\fHR\\fH^\\fHf\\fHF\\fH\\\\\\fHv\\fHR\\fH\\\\\\fH|\\fHT\\fHR\\fHJ\\fIk\\fH\\\\\\fHp\\fHS\\fHT\\fHJ\\fHS\\fH^\\fH@\\fHn\\fHJ\\fH@\\fHD\\fHR\\fHU\\fIn\\fHn\\fH^\\fHR\\fHz\\fHp\\fIl\\fHH\\fH@\\fHs\\fHD\\fHB\\fHS\\fH^\\fHk\\fHT\\fIk\\fHj\\fHD\\fIk\\fHD\\fHC\\fHR\\fHy\\fIm\\fH^\\fH^\\fIe\\fH{\\fHA\\fHR\\fH{\\fH\\\\\\fIk\\fH^\\fHp\\fH{\\fHU\\fH\\\\\\fHR\\fHB\\fH^\\fH{\\fIk\\fHF\\fIk\\fHp\\fHU\\fHR\\fHI\\fHk\\fHT\\fIl\\fHT\\fHU\\fIl\\fHy\\fH^\\fHR\\fHL\\fIl\\fHy\\fHU\\fHR\\fHm\\fHJ\\fIn\\fH\\\\\\fHH\\fHU\\fHH\\fHT\\fHR\\fHH\\fHC\\fHR\\fHJ\\fHj\\fHC\\fHR\\fHF\\fHR\\fHy\\fHy\\fI`\\fHD\\fHZ\\fHR\\fHB\\fHJ\\fIk\\fHz\\fHC\\fHU\\fIl\\fH\\\\\\fHR\\fHC\\fHz\\fIm\\fHJ\\fH^\\fH{\\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\x0E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\x0E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\x0E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\x0E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\x0E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\x0E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\x0E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\x7Fwkvna\\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\x0E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\x0E\\t?kfbg=\\x0E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\x0E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\x0E\\t?,kfbg=\\x0E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\x0E\\t\\n?,gju=\\x0E\\t\\x0E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\x0E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\x0E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\x0E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\x0E\\t?kfbg=\\x0E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\x0E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\x05Gx\\bTA\\nzk\\x0BBl\\bQ\\x7F\\bTA\\nzk\\x0BUm\\bQ\\x7F\\bTA\\nzk\\npe\\x05u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\x05tS\\x05k`\\t[X\\t[X\\x0BHR\\bPv\\bTW\\bUe\\n\\x7Fa\\bQp\\x0B_W\\x0BWs\\nxS\\x0BAz\\n_y\\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\fHD\\fHU\\fIl\\fHn\\fHy\\fH\\\\\\fHD\\fIk\\fHi\\fHF\\fHD\\fIk\\fHy\\fHS\\fHC\\fHR\\fHy\\fH\\\\\\fIk\\fHn\\fHi\\fHD\\fIa\\fHC\\fHy\\fIa\\fHC\\fHR\\fH{\\fHR\\fHk\\fHM\\fH@\\fHR\\fH\\\\\\fIk\\fHy\\fHS\\fHT\\fIl\\fHJ\\fHS\\fHC\\fHR\\fHF\\fHU\\fH^\\fIk\\fHT\\fHS\\fHn\\fHU\\fHA\\fHR\\fH\\\\\\fHH\\fHi\\fHF\\fHD\\fIl\\fHY\\fHR\\fH^\\fIk\\fHT\\fIk\\fHY\\fHR\\fHy\\fH\\\\\\fHH\\fIk\\fHB\\fIk\\fH\\\\\\fIk\\fHU\\fIg\\fHD\\fIk\\fHT\\fHy\\fHH\\fIk\\fH@\\fHU\\fIm\\fHH\\fHT\\fHR\\fHk\\fHs\\fHU\\fIg\\fH{\\fHR\\fHp\\fHR\\fHD\\fIk\\fHB\\fHS\\fHD\\fHs\\fHy\\fH\\\\\\fHH\\fHR\\fHy\\fH\\\\\\fHD\\fHR\\fHe\\fHD\\fHy\\fIk\\fHC\\fHU\\fHR\\fHm\\fHT\\fH@\\fHT\\fIk\\fHA\\fHR\\fH[\\fHR\\fHj\\fHF\\fHy\\fIk\\fH^\\fHS\\fHC\\fIk\\fHZ\\fIm\\fH\\\\\\fIn\\fHk\\fHT\\fHy\\fIk\\fHt\\fHn\\fHs\\fIk\\fHB\\fIk\\fH\\\\\\fIl\\fHT\\fHy\\fHH\\fHR\\fHB\\fIk\\fH\\\\\\fHR\\fH^\\fIk\\fHy\\fH\\\\\\fHi\\fHK\\fHS\\fHy\\fHi\\fHF\\fHD\\fHR\\fHT\\fHB\\fHR\\fHp\\fHB\\fIm\\fHq\\fIk\\fHy\\fHR\\fH\\\\\\fHO\\fHU\\fIg\\fHH\\fHR\\fHy\\fHM\\fHP\\fIl\\fHC\\fHU\\fHR\\fHn\\fHU\\fIg\\fHs\\fH^\\fHZ\\fH@\\fIa\\fHJ\\fH^\\fHS\\fHC\\fHR\\fHp\\fIl\\fHY\\fHD\\fHp\\fHR\\fHH\\fHR\\fHy\\fId\\fHT\\fIk\\fHj\\fHF\\fHy\\fHR\\fHY\\fHR\\fH^\\fIl\\fHJ\\fIk\\fHD\\fIk\\fHF\\fIn\\fH\\\\\\fIl\\fHF\\fHR\\fHD\\fIl\\fHe\\fHT\\fHy\\fIk\\fHU\\fIg\\fH{\\fIl\\fH@\\fId\\fHL\\fHy\\fHj\\fHF\\fHy\\fIl\\fHY\\fH\\\\\\fIa\\fH[\\fH{\\fHR\\fHn\\fHY\\fHj\\fHF\\fHy\\fIg\\fHp\\fHS\\fH^\\fHR\\fHp\\fHR\\fHD\\fHR\\fHT\\fHU\\fHB\\fHH\\fHU\\fHB\\fIk\\fHn\\fHe\\fHD\\fHy\\fIl\\fHC\\fHR\\fHU\\fIn\\fHJ\\fH\\\\\\fIa\\fHp\\fHT\\fIn\\fHv\\fIl\\fHF\\fHT\\fHn\\fHJ\\fHT\\fHY\\fHR\\fH^\\fHU\\fIg\\fHD\\fHR\\fHU\\fIg\\fHH\\fIl\\fHp\\fId\\fHT\\fIk\\fHY\\fHR\\fHF\\fHT\\fHp\\fHD\\fHH\\fHR\\fHD\\fIk\\fHH\\fHR\\fHp\\fHR\\fH\\\\\\fIl\\fHt\\fHR\\fHC\\fH^\\fHp\\fHS\\fH^\\fIk\\fHD\\fIl\\fHv\\fIk\\fHp\\fHR\\fHn\\fHv\\fHF\\fHH\\fIa\\fH\\\\\\fH{\\fIn\\fH{\\fH^\\fHp\\fHR\\fHH\\fIk\\fH@\\fHR\\fHU\\fH\\\\\\fHj\\fHF\\fHD\\fIk\\fHY\\fHR\\fHU\\fHD\\fHk\\fHT\\fHy\\fHR\\fHT\\fIm\\fH@\\fHU\\fH\\\\\\fHU\\fHD\\fIk\\fHk\\fHT\\fHT\\fIk\\fHT\\fHU\\fHS\\fHH\\fH@\\fHM\\fHP\\fIk\\fHt\\fHs\\fHD\\fHR\\fHH\\fH^\\fHR\\fHZ\\fHF\\fHR\\fHn\\fHv\\fHZ\\fIa\\fH\\\\\\fIl\\fH@\\fHM\\fHP\\fIl\\fHU\\fIg\\fHH\\fIk\\fHT\\fHR\\fHd\\fHs\\fHZ\\fHR\\fHC\\fHJ\\fHT\\fHy\\fHH\\fIl\\fHp\\fHR\\fHH\\fIl\\fHY\\fHR\\fH^\\fHR\\fHU\\fHp\\fHR\\fH\\\\\\fHF\\fHs\\fHD\\fHR\\fH\\\\\\fHz\\fHD\\fIk\\fHT\\fHM\\fHP\\fHy\\fHB\\fHS\\fH^\\fHR\\fHe\\fHT\\fHy\\fIl\\fHy\\fIk\\fHY\\fH^\\fH^\\fH{\\fHH\\fHR\\fHz\\fHR\\fHD\\fHR\\fHi\\fH\\\\\\fIa\\fHI\\fHp\\fHU\\fHR\\fHn\\fHJ\\fIk\\fHz\\fHR\\fHF\\fHU\\fH^\\fIl\\fHD\\fHS\\fHC\\fHB\\fH@\\fHS\\fHD\\fHR\\fH@\\fId\\fHn\\fHy\\fHy\\fHU\\fIl\\fHn\\fHy\\fHU\\fHD\\fHR\\fHJ\\fIk\\fHH\\fHR\\fHU\\fHB\\fH^\\fIk\\fHy\\fHR\\fHG\\fIl\\fHp\\fH@\\fHy\\fHS\\fHH\\fIm\\fH\\\\\\fHH\\fHB\\fHR\\fHn\\fH{\\fHY\\fHU\\fIl\\fHn\\fH\\\\\\fIg\\fHp\\fHP\\fHB\\fHS\\fH^\\fIl\\fHj\\fH\\\\\\fIg\\fHF\\fHT\\fIk\\fHD\\fHR\\fHC\\fHR\\fHJ\\fHY\\fH^\\fIk\\fHD\\fIk\\fHz\\fHR\\fHH\\fHR\\fHy\\fH\\\\\\fIl\\fH@\\fHe\\fHD\\fHy\\fHR\\fHp\\fHY\\fHR\\fH@\\fHF\\fIn\\fH\\\\\\fHR\\fH@\\fHM\\fHP\\fHR\\fHT\\fI`\\fHJ\\fHR\\fHZ\\fIk\\fHC\\fH\\\\\\fHy\\fHS\\fHC\\fIk\\fHy\\fHU\\fHR\\fHn\\fHi\\fHy\\fHT\\fH\\\\\\fH@\\fHD\\fHR\\fHc\\fHY\\fHU\\fHR\\fHn\\fHT\\fIa\\fHI\\fH^\\fHB\\fHS\\fH^\\fIk\\fH^\\fIk\\fHz\\fHy\\fHY\\fHS\\fH[\\fHC\\fHy\\fIa\\fH\\\\\\fHn\\fHT\\fHB\\fIn\\fHU\\fHI\\fHR\\fHD\\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\x0E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\x0E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\x0E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\x0E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\x0E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\x0E\\t?,p`qjsw=\\x0E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\x0E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\x0E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\x0E\\t\\x0E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\x7F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\x7F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\x0E\\t?,p`qjsw=\\x0E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\x0E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\x0E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\x0BBl\\bQ\\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\fHe\\fHF\\fHC\\fIg\\fH{\\fHF\\fIn\\fH\\\\\\fIa\\fHY\\fHU\\fHB\\fHR\\fH\\\\\\fIk\\fH^\\fIg\\fH{\\fIg\\fHn\\fHv\\fIm\\fHD\\fHR\\fHY\\fH^\\fIk\\fHy\\fHS\\fHD\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fHF\\fIm\\fH^\\fHS\\fHT\\fHz\\fIg\\fHp\\fIk\\fHn\\fHv\\fHR\\fHU\\fHS\\fHc\\fHA\\fIk\\fHp\\fIk\\fHn\\fHZ\\fHR\\fHB\\fHS\\fH^\\fHU\\fHB\\fHR\\fH\\\\\\fIl\\fHp\\fHR\\fH{\\fH\\\\\\fHO\\fH@\\fHD\\fHR\\fHD\\fIk\\fHy\\fIm\\fHB\\fHR\\fH\\\\\\fH@\\fIa\\fH^\\fIe\\fH{\\fHB\\fHR\\fH^\\fHS\\fHy\\fHB\\fHU\\fHS\\fH^\\fHR\\fHF\\fIo\\fH[\\fIa\\fHL\\fH@\\fHN\\fHP\\fHH\\fIk\\fHA\\fHR\\fHp\\fHF\\fHR\\fHy\\fIa\\fH^\\fHS\\fHy\\fHs\\fIa\\fH\\\\\\fIk\\fHD\\fHz\\fHS\\fH^\\fHR\\fHG\\fHJ\\fI`\\fH\\\\\\fHR\\fHD\\fHB\\fHR\\fHB\\fH^\\fIk\\fHB\\fHH\\fHJ\\fHR\\fHD\\fH@\\fHR\\fHp\\fHR\\fH\\\\\\fHY\\fHS\\fHy\\fHR\\fHT\\fHy\\fIa\\fHC\\fIg\\fHn\\fHv\\fHR\\fHU\\fHH\\fIk\\fHF\\fHU\\fIm\\fHm\\fHv\\fH@\\fHH\\fHR\\fHC\\fHR\\fHT\\fHn\\fHY\\fHR\\fHJ\\fHJ\\fIk\\fHz\\fHD\\fIk\\fHF\\fHS\\fHw\\fH^\\fIk\\fHY\\fHS\\fHZ\\fIk\\fH[\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHe\\fHH\\fIa\\fHH\\fH\\\\\\fHB\\fIm\\fHn\\fH@\\fHd\\fHJ\\fIg\\fHD\\fIg\\fHn\\fHe\\fHF\\fHy\\fH\\\\\\fHO\\fHF\\fHN\\fHP\\fIk\\fHn\\fHT\\fIa\\fHI\\fHS\\fHH\\fHG\\fHS\\fH^\\fIa\\fHB\\fHB\\fIm\\fHz\\fIa\\fHC\\fHi\\fHv\\fIa\\fHw\\fHR\\fHw\\fIn\\fHs\\fHH\\fIl\\fHT\\fHn\\fH{\\fIl\\fHH\\fHp\\fHR\\fHc\\fH{\\fHR\\fHY\\fHS\\fHA\\fHR\\fH{\\fHt\\fHO\\fIa\\fHs\\fIk\\fHJ\\fIn\\fHT\\fH\\\\\\fIk\\fHJ\\fHS\\fHD\\fIg\\fHn\\fHU\\fHH\\fIa\\fHC\\fHR\\fHT\\fIk\\fHy\\fIa\\fHT\\fH{\\fHR\\fHn\\fHK\\fIl\\fHY\\fHS\\fHZ\\fIa\\fHY\\fH\\\\\\fHR\\fHH\\fIk\\fHn\\fHJ\\fId\\fHs\\fIa\\fHT\\fHD\\fHy\\fIa\\fHZ\\fHR\\fHT\\fHR\\fHB\\fHD\\fIk\\fHi\\fHJ\\fHR\\fH^\\fHH\\fH@\\fHS\\fHp\\fH^\\fIl\\fHF\\fIm\\fH\\\\\\fIn\\fH[\\fHU\\fHS\\fHn\\fHJ\\fIl\\fHB\\fHS\\fHH\\fIa\\fH\\\\\\fHy\\fHY\\fHS\\fHH\\fHR\\fH\\\\\\fIm\\fHF\\fHC\\fIk\\fHT\\fIa\\fHI\\fHR\\fHD\\fHy\\fH\\\\\\fIg\\fHM\\fHP\\fHB\\fIm\\fHy\\fIa\\fHH\\fHC\\fIg\\fHp\\fHD\\fHR\\fHy\\fIo\\fHF\\fHC\\fHR\\fHF\\fIg\\fHT\\fIa\\fHs\\fHt\\fH\\\\\\fIk\\fH^\\fIn\\fHy\\fHR\\fH\\\\\\fIa\\fHC\\fHY\\fHS\\fHv\\fHR\\fH\\\\\\fHT\\fIn\\fHv\\fHD\\fHR\\fHB\\fIn\\fH^\\fIa\\fHC\\fHJ\\fIk\\fHz\\fIk\\fHn\\fHU\\fHB\\fIk\\fHZ\\fHR\\fHT\\fIa\\fHy\\fIn\\fH^\\fHB\\fId\\fHn\\fHD\\fIk\\fHH\\fId\\fHC\\fHR\\fH\\\\\\fHp\\fHS\\fHT\\fHy\\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\x0E\\t?,p`qjsw=\\x0E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\x7Fwkvna\\x7Fofew\\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\x0E\\t?-ip!=?,p`qjsw=\\x0E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\x7Fqjdkw\\x7Fwkvna\\x7F-ip!=?,p`qjsw=\\x0E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\x0E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\x0E\\t?,gju=\\x0E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\x0E\\t?,kwno=\\x0E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\x7Fwkvna\\x7Fqjdkw\\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\x0E\\t?,kwno=\\x0E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\x0E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\fHJ\\fIa\\fHY\\fHR\\fH\\\\\\fHR\\fHB\\fId\\fHD\\fIm\\fHi\\fH^\\fHF\\fIa\\fH\\\\\\fHJ\\fHR\\fHD\\fHA\\fHR\\fH\\\\\\fHH\\fIl\\fHC\\fHi\\fHD\\fIm\\fHJ\\fIk\\fHZ\\fHU\\fHS\\fHD\\fIa\\fHJ\\fIl\\fHk\\fHn\\fHM\\fHS\\fHC\\fHR\\fHJ\\fHS\\fH^\\fIa\\fH^\\fIl\\fHi\\fHK\\fHS\\fHy\\fHR\\fH\\\\\\fHY\\fIl\\fHM\\fHS\\fHC\\fIg\\fHv\\fHS\\fHs\\fIa\\fHL\\fIk\\fHT\\fHB\\fHR\\fHv\\fHR\\fH\\\\\\fHp\\fHn\\fHy\\fIa\\fHZ\\fHD\\fHJ\\fIm\\fHD\\fHS\\fHC\\fHR\\fHF\\fIa\\fH\\\\\\fHC\\fIg\\fH{\\fHi\\fHD\\fIm\\fHT\\fHR\\fH\\\\\\fH}\\fHD\\fH^\\fHR\\fHk\\fHD\\fHF\\fHR\\fH\\\\\\fIa\\fHs\\fIl\\fHZ\\fH\\\\\\fIa\\fHH\\fIg\\fHn\\fH^\\fIg\\fHy\\fHT\\fHA\\fHR\\fHG\\fHP\\fIa\\fH^\\fId\\fHZ\\fHZ\\fH\\\\\\fIa\\fHH\\fIk\\fHn\\fHF\\fIa\\fH\\\\\\fHJ\\fIk\\fHZ\\fHF\\fIa\\fH^\\fIk\\fHC\\fH\\\\\\fHy\\fIk\\fHn\\fHJ\\fIa\\fH\\\\\\fHT\\fIa\\fHI\\fHS\\fHH\\fHS\\fHe\\fHH\\fIa\\fHF\\fHR\\fHJ\\fHe\\fHD\\fIa\\fHU\\fIk\\fHn\\fHv\\fHS\\fHs\\fIa\\fHL\\fHR\\fHC\\fHR\\fHH\\fIa\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHR\\fHJ\\fHR\\fHF\\fIm\\fH\\\\\\fHR\\fHD\\fIk\\fHp\\fIg\\fHM\\fHP\\fIk\\fHn\\fHi\\fHD\\fIm\\fHY\\fHR\\fHJ\\fHZ\\fIa\\fH\\\\\\fIk\\fHO\\fIl\\fHZ\\fHS\\fHy\\fIa\\fH[\\fHR\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH{\\fIa\\fH\\\\\\fHU\\fHF\\fH\\\\\\fHS\\fHO\\fHR\\fHB\\fH@\\fIa\\fH\\\\\\fHR\\fHn\\fHM\\fH@\\fHv\\fIa\\fHv\\fIg\\fHn\\fHe\\fHF\\fH^\\fH@\\fIa\\fHK\\fHB\\fHn\\fHH\\fIa\\fH\\\\\\fIl\\fHT\\fHn\\fHF\\fH\\\\\\fIa\\fHy\\fHe\\fHB\\fIa\\fHB\\fIl\\fHJ\\fHB\\fHR\\fHK\\fIa\\fHC\\fHB\\fHT\\fHU\\fHR\\fHC\\fHH\\fHR\\fHZ\\fH@\\fIa\\fHJ\\fIg\\fHn\\fHB\\fIl\\fHM\\fHS\\fHC\\fHR\\fHj\\fHd\\fHF\\fIl\\fHc\\fH^\\fHB\\fIg\\fH@\\fHR\\fHk\\fH^\\fHT\\fHn\\fHz\\fIa\\fHC\\fHR\\fHj\\fHF\\fH\\\\\\fIk\\fHZ\\fHD\\fHi\\fHD\\fIm\\fH@\\fHn\\fHK\\fH@\\fHR\\fHp\\fHP\\fHR\\fH\\\\\\fHD\\fHY\\fIl\\fHD\\fHH\\fHB\\fHF\\fIa\\fH\\\\\\fHB\\fIm\\fHz\\fHF\\fIa\\fH\\\\\\fHZ\\fIa\\fHD\\fHF\\fH\\\\\\fHS\\fHY\\fHR\\fH\\\\\\fHD\\fIm\\fHy\\fHT\\fHR\\fHD\\fHT\\fHB\\fH\\\\\\fIa\\fHI\\fHD\\fHj\\fHC\\fIg\\fHp\\fHS\\fHH\\fHT\\fIg\\fHB\\fHY\\fHR\\fH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\x0E\\t?,algz=\\x0E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\x0E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\x0E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\x0E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\x0E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\x0E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\x0E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\fTL\\fT^\\fTE\\fT^\\fUh\\fT{\\fTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\x05Gx\\bTA\\nzk#+\\x0BUm\\x05Gx*\\fHD\\fHS\\fH\\\\\\fIa\\fHJ\\fIk\\fHZ\\fHM\\fHR\\fHe\\fHD\\fH^\\fIg\\fHM\\fHy\\fIa\\fH[\\fIk\\fHH\\fIa\\fH\\\\\\fHp\\fHR\\fHD\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH@\\fHn\\fHK\\fHS\\fHH\\fHT\\fIa\\fHI\\fHR\\fHF\\fHD\\fHR\\fHT\\fIa\\fHY\\fIl\\fHy\\fHR\\fH\\\\\\fHT\\fHn\\fHT\\fIa\\fHy\\fH\\\\\\fHO\\fHT\\fHR\\fHB\\fH{\\fIa\\fH\\\\\\fIl\\fHv\\fHS\\fHs\\fIa\\fHL\\fIg\\fHn\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHD\\fHi\\fHB\\fIk\\fH\\\\\\fHS\\fHy\\fHR\\fHY\\fHS\\fHA\\fHS\\fHD\\fIa\\fHD\\fH{\\fHR\\fHM\\fHS\\fHC\\fHR\\fHm\\fHy\\fIa\\fHC\\fIg\\fHn\\fHy\\fHS\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHR\\fHF\\fHU\\fIm\\fHm\\fHv\\fHH\\fIl\\fHF\\fIa\\fH\\\\\\fH@\\fHn\\fHK\\fHD\\fHs\\fHS\\fHF\\fIa\\fHF\\fHO\\fIl\\fHy\\fIa\\fH\\\\\\fHS\\fHy\\fIk\\fHs\\fHF\\fIa\\fH\\\\\\fHR\\fH\\\\\\fHn\\fHA\\fHF\\fIa\\fH\\\\\\fHR\\fHF\\fIa\\fHH\\fHB\\fHR\\fH^\\fHS\\fHy\\fIg\\fHn\\fH\\\\\\fHG\\fHP\\fIa\\fHH\\fHR\\fH\\\\\\fHD\\fHS\\fH\\\\\\fIa\\fHB\\fHR\\fHO\\fH^\\fHS\\fHB\\fHS\\fHs\\fIk\\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\fHF\\fIm\\fHT\\fIa\\fHH\\fHS\\fHy\\fHR\\fHy\\fHR\\fHn\\fH{\\fIa\\fH\\\\\\fIk\\fHT\\fHe\\fHD\\fIa\\fHU\\fIg\\fHn\\fHD\\fIk\\fHY\\fHS\\fHK\\fHR\\fHD\\fHT\\fHA\\fHR\\fHG\\fHS\\fHy\\fIa\\fHT\\fHS\\fHn\\fH{\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHS\\fHH\\fHy\\fIe\\fHF\\fIl\\fH\\\\\\fHR\\fHk\\fHs\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHF\\fHD\\fHy\\fHR\\fH\\\\\\fIa\\fH\\\\\\fHY\\fHR\\fHd\\fHT\\fHy\\fIa\\fH\\\\\\fHS\\fHC\\fHH\\fHR\", \"\\u06F7%\\u018C'T%\\x85'W%\\xD7%O%g%\\xA6&\\u0193%\\u01E5&>&*&'&^&\\x88\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\x82&P&1&\\xB1&3&]&m&u&E&t&C&\\xCF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\x81&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\x9A&>&\\x86&7&]&F&2&>&J&6&n&2&%&?&\\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\x84(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\xC6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\xA8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\");\n    setData(dictionaryData, dictionarySizeBits);\n  }\n\n  /**\n   * @constructor\n   * @param {!Int8Array} data\n   * @struct\n   */\n  function InputStream(data) {\n    /** @type {!Int8Array} */\n    this.data = new Int8Array(0);\n    /** @type {number} */\n    this.offset = 0;\n    this.data = data;\n  }\n\n  /**\n   * @param {number} x\n   * @return {string}\n   */\n  function valueOf(x) {\n    return x.toString();\n  }\n\n  /**\n   * @param {?InputStream} src\n   * @param {!Int8Array} dst\n   * @param {number} offset\n   * @param {number} length\n   * @return {number}\n   */\n  function readInput(src, dst, offset, length) {\n    if (src === null) {\n      return -1;\n    }\n    let /** @type {number} */ end = Math.min(src.offset + length, src.data.length);\n    let /** @type {number} */ bytesRead = end - src.offset;\n    dst.set(src.data.subarray(src.offset, end), offset);\n    src.offset += bytesRead;\n    return bytesRead;\n  }\n  /**\n   * @param {string} src\n   * @return {!Int8Array}\n   */\n  function toUsAsciiBytes(src) {\n    let /** @type {number} */ n = src.length;\n    let /** @type {!Int8Array} */ result = new Int8Array(n);\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n\n/* GENERATED CODE END */\n\n  /** @typedef {!Int8Array} */\n  let ByteBuffer;\n\n  /**\n   * @param {!Int8Array} bytes\n   * @param {?Options=} options\n   * @return {!Int8Array}\n   */\n  function decode(bytes, options) {\n    let /** @type {!State} */ s = new State();\n    initState(s, new InputStream(bytes));\n    if (options) {\n      let customDictionary =\n          /** @type {?Int8Array} */ (options[\"customDictionary\"]);\n      if (customDictionary) attachDictionaryChunk(s, customDictionary);\n    }\n    let /** @type {number} */ totalOutput = 0;\n    let /** @type {!Array<!Int8Array>} */ chunks = [];\n    while (true) {\n      let /** @type {!Int8Array} */ chunk = new Int8Array(16384);\n      chunks.push(chunk);\n      s.output = chunk;\n      s.outputOffset = 0;\n      s.outputLength = 16384;\n      s.outputUsed = 0;\n      decompress(s);\n      totalOutput += s.outputUsed;\n      if (s.outputUsed < 16384) break;\n    }\n    close(s);\n    let /** @type {!Int8Array} */ result = new Int8Array(totalOutput);\n    let /** @type {number} */ offset = 0;\n    for (let /** @type {number} */ i = 0; i < chunks.length; ++i) {\n      let /** @type {!Int8Array} */ chunk = chunks[i];\n      let /** @type {number} */ end = Math.min(totalOutput, offset + 16384);\n      let /** @type {number} */ len = end - offset;\n      if (len < 16384) {\n        result.set(chunk.subarray(0, len), offset);\n      } else {\n        result.set(chunk, offset);\n      }\n      offset += len;\n    }\n    return result;\n  }\n\n  return decode;\n};\n\n/**\n * @type {function(!Int8Array, ?Options=):!Int8Array}\n */\nexport let BrotliDecode = makeBrotliDecode();\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/js/micProcessor.js",
    "content": "//   micProcessor.js\nclass MicProcessor extends AudioWorkletProcessor\n{\n    constructor()\n    {\n        super();\n\n        // global variables for testing\n        var sampleRate = globalThis.sampleRate;\n        var currentFrame = globalThis.currentFrame;\n        var currentTime = globalThis.currentTime;\n        var currentRenderQuantum = globalThis.currentRenderQuantum;\n                \n        this.SampleRate = sampleRate;\n        this.TargetSamples = Math.floor(this.SampleRate * 0.1); // 100ms\n        this.Buffer = new Float32Array(this.TargetSamples);\n        this.BufferIndex = 0;\n\n        this.port.onmessage = (event) =>\n        {\n            var data = event.data;\n\n            if (typeof data === 'number')\n            {\n                //this.port.postMessage(data); // echo back test\n            }\n            if (data instanceof Uint8Array)\n            {\n            }\n        };\n    }\n\n    process(inputs, outputs, parameters)\n    {\n        var inChannel0 = inputs[0][0];\n        if (!inChannel0) return true;\n                \n        let srcIndex = 0;\n        var srcLen = inChannel0.length;\n\n        while (srcIndex < srcLen)\n        {\n            var remaining = this.TargetSamples - this.BufferIndex;\n            var copyCount = Math.min(remaining, srcLen - srcIndex);\n\n            this.Buffer.set(\n                inChannel0.subarray(srcIndex, srcIndex + copyCount),\n                this.BufferIndex);\n\n            this.BufferIndex += copyCount;\n            srcIndex += copyCount;\n\n            if (this.BufferIndex >= this.TargetSamples)\n            {\n                this.SendBuffer();\n                this.BufferIndex = 0;\n            }\n        }\n\n        return true;\n    }\n\n    SendBuffer()\n    {\n        // convert to 16-6bit PCM\n        var int16 = new Int16Array(this.TargetSamples);\n        for (var i = 0; i < this.TargetSamples; i++)\n        {\n            int16[i] = this.Buffer[i] * 32767;\n        }\n\n        var byteArray = new Uint8Array(int16.buffer);\n        this.port.postMessage(byteArray, [byteArray.buffer]);\n    }\n}\n\nregisterProcessor('mic-processor', MicProcessor);"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/js/streamProcessor.js",
    "content": "//   streamProcessor.js\nclass StreamProcessor extends AudioWorkletProcessor\n{\n    constructor()\n    {\n        super();\n        this.queue = [];\n\n        this.port.onmessage = (event) =>\n        {\n            var data = event.data;\n\n            if (typeof data === 'number')\n            {\n                if (data === 2)\n                {                    \n                    this.queue = [];\n                }\n            }\n            if (data instanceof Uint8Array)\n            {\n                const buffer = new Int16Array(data.buffer, data.byteOffset, data.length / 2);\n                buffer.offset = 0;\n                this.queue.push(buffer);\n            }\n        };\n    }\n\n\n    process(inputs, outputs, parameters)\n    {\n        const output = outputs[0];\n        \n        const channelCount = output.length;\n        const sampleCount = output[0].length;\n\n        let written = 0;\n\n        while (written < sampleCount && this.queue.length > 0)\n        {\n            const buffer = this.queue[0];\n            const offset = buffer.offset;\n\n            const available = buffer.length - offset;\n            const needed = sampleCount - written;\n            const copyCount = Math.min(available, needed);\n\n            for (let i = 0; i < copyCount; i++)\n            {\n                for (let c = 0; c < channelCount; c++)\n                {\n                    const channel = output[c];\n                    let value = (buffer[offset+i] / 32767);\n                    channel[written+i] = value;\n                }\n            }\n            \n            written += copyCount;\n            buffer.offset += copyCount;\n\n            if (buffer.offset >= buffer.length)\n            {\n                this.queue.shift();\n                this.port.postMessage(1);\n            }\n        }\n        \n        // Fill remaining samples with silence\n        if (written < sampleCount)\n        {\n            for (let c = 0; c < channelCount; c++)\n            {\n                const channel = output[c];\n\n                for (let i = written; i < sampleCount; i++)\n                {\n                    let value = 0;\n                    channel[i] = value;\n                }\n            }\n        }\n\n        return true;\n    }\n}\n\nregisterProcessor(\"stream-processor\", StreamProcessor);"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/$projectname$.SDL2.GL.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0</TargetFramework>\n    <RollForward>Major</RollForward>\n    <ProjectGuid>$guid4$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <PublishTrimmed>True</PublishTrimmed>\n    <PublishAot>True</PublishAot>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DESKTOPGL</DefineConstants>\n    <KniPlatform>DesktopGL</KniPlatform>\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\t\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.SDL2.GL\" Version=\"4.2.9001.1\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Platform$projectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n    <EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$projectname$Content\\$projectname$Content.mgcb\">\n      <Link>Content\\$projectname$Content.mgcb</Link>\n    </KniContentReference>\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"..\\$projectname$.Shared\\$projectname$.Shared.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/Platform$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <inheritdoc/>\n    public class Platform$safeprojectname$Game : $safeprojectname$Game\n    {\n\n        public Platform$safeprojectname$Game() : base()\n        {\n            // TODO: Add platform specific initialization logic here\n\n        }\n\n        /// <inheritdoc/>\n        protected override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <inheritdoc/>\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void UnloadContent()\n        {\n            base.UnloadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void Update(GameTime gameTime)\n        {\n            base.Update(gameTime);\n        }\n\n        /// <inheritdoc/>\n        protected override void Draw(GameTime gameTime)\n        {\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new Platform$safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Shared/$projectname$.Shared.projitems",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>$guid1$</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>$safeprojectname$</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)$projectname$Game.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Shared/$projectname$.Shared.shproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>$guid1$</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"$projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Shared/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        protected GraphicsDeviceManager graphics;\n        protected SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n            if (TitleContainer.Platform == TitlePlatform.iOS)\n                    graphics.IsFullScreen = true;\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/$projectname$.WinForms.DX11.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <RollForward>Major</RollForward>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ProjectGuid>$guid3$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);WINDOWSDX</DefineConstants>\n    <KniPlatform>Windows</KniPlatform>\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\t\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Platform$projectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Icon.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$projectname$Content\\$projectname$Content.mgcb\">\n      <Link>Content\\$projectname$Content.mgcb</Link>\n    </KniContentReference>\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"..\\$projectname$.Shared\\$projectname$.Shared.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/Platform$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <inheritdoc/>\n    public class Platform$safeprojectname$Game : $safeprojectname$Game\n    {\n\n        public Platform$safeprojectname$Game() : base()\n        {\n            // TODO: Add platform specific initialization logic here\n\n        }\n\n        /// <inheritdoc/>\n        protected override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <inheritdoc/>\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void UnloadContent()\n        {\n            base.UnloadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void Update(GameTime gameTime)\n        {\n            base.Update(gameTime);\n        }\n\n        /// <inheritdoc/>\n        protected override void Draw(GameTime gameTime)\n        {\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            // Uncomment this line to enable VR with the nkast.Kni.Platform.WinForms.DX11.OculusOVR package.\n            //Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory());\n\n            using (Game game = new Platform$safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36930.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"$projectname$.Platforms\", \"$projectname$.Platforms\", \"{$fldguid$}\"\nEndProject\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"$projectname$.Shared\", \"$projectname$.Shared\\$projectname$.Shared.shproj\", \"{$guid1$}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$.Android.GL\", \"$projectname$.Android.GL\\$projectname$.Android.GL.csproj\", \"{$guid2$}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$.WinForms.DX11\", \"$projectname$.WinForms.DX11\\$projectname$.WinForms.DX11.csproj\", \"{$guid3$}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$.SDL2.GL\", \"$projectname$.SDL2.GL\\$projectname$.SDL2.GL.csproj\", \"{$guid4$}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$.Blazor.GL\", \"$projectname$.Blazor.GL\\$projectname$.Blazor.GL.csproj\", \"{$guid7$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid2$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid2$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid2$}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{$guid2$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid2$}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{$guid2$}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{$guid3$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid3$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid3$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid3$}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{$guid4$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid4$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid4$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid4$}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{$guid7$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid7$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid7$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid7$}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{$guid2$} = {$fldguid$}\n\t\t{$guid3$} = {$fldguid$}\n\t\t{$guid4$} = {$fldguid$}\n\t\t{$guid7$} = {$fldguid$}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\n\tGlobalSection(SharedMSBuildProjectFiles) = preSolution\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid2$}*SharedItemsImports = 5\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid7$}*SharedItemsImports = 5\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid1$}*SharedItemsImports = 13\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid4$}*SharedItemsImports = 5\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid3$}*SharedItemsImports = 5\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Android\", \"windows\", \"linux\", \"macos\", \"desktop\", \"mobile\", \"web\" ],\n  \"identity\": \"nkast.Kni.Multiplatform.Project.CSharp\",\n  \"name\": \"KNI Multiplatform Game Project (.net8)\",\n  \"shortName\": \"kni-multiplatform\",\n  \"description\": \"A KNI game project for multiple platforms with shared content.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"Android.GL/$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"fldguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$fldguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"guid2\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid2$\" },\n    \"guid3\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid3$\" },\n    \"guid4\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid4$\" },\n    \"guid7\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid7$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/$projectname$.SDL2.GL.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>$guid4$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>DesktopGL</KniPlatform>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;DESKTOPGL</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;DESKTOPGL</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.SDL2.GL\" Version=\"4.2.9001.1\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Platform$projectname$Game.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n    <EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$projectname$Content\\$projectname$Content.mgcb\">\n      <Link>Content\\$projectname$Content.mgcb</Link>\n    </KniContentReference>\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"..\\$projectname$.Shared\\$projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/Platform$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <inheritdoc/>\n    public class Platform$safeprojectname$Game : $safeprojectname$Game\n    {\n\n        public Platform$safeprojectname$Game() : base()\n        {\n            // TODO: Add platform specific initialization logic here\n\n        }\n\n        /// <inheritdoc/>\n        protected override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <inheritdoc/>\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void UnloadContent()\n        {\n            base.UnloadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void Update(GameTime gameTime)\n        {\n            base.Update(gameTime);\n        }\n\n        /// <inheritdoc/>\n        protected override void Draw(GameTime gameTime)\n        {\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new Platform$safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$.SDL2.GL\")]\n[assembly: AssemblyProduct(\"$safeprojectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid4$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.Shared/$projectname$.Shared.projitems",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>$guid1$</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>$safeprojectname$</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)$projectname$Game.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.Shared/$projectname$.Shared.shproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>$guid1$</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"$projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.Shared/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        protected GraphicsDeviceManager graphics;\n        protected SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/$projectname$.UWPCore.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{$guid5$}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <KniPlatform>WindowsStoreApp</KniPlatform>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.UAP.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Platform$projectname$Game.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$projectname$Content\\$projectname$Content.mgcb\">\n      <Link>Content\\$projectname$Content.mgcb</Link>\n    </KniContentReference>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"..\\$projectname$.Shared\\$projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n\n</Project>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"$guid8$\"\n    Publisher=\"CN=PublisherDistinguishedName\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"$guid8$\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>$safeprojectname$</DisplayName>\n    <PublisherDisplayName>publisherDisplayName</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$safeprojectname$.App\">\n      <uap:VisualElements\n        DisplayName=\"$safeprojectname$\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"$safeprojectname$\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Platform$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <inheritdoc/>\n    public class Platform$safeprojectname$Game : $safeprojectname$Game\n    {\n\n        public Platform$safeprojectname$Game() : base()\n        {\n            // TODO: Add platform specific initialization logic here\n\n        }\n\n        /// <inheritdoc/>\n        protected override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <inheritdoc/>\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void UnloadContent()\n        {\n            base.UnloadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void Update(GameTime gameTime)\n        {\n            base.Update(gameTime);\n        }\n\n        /// <inheritdoc/>\n        protected override void Draw(GameTime gameTime)\n        {\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Program.cs",
    "content": "﻿using System;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main()\n        {\n            var factory = new Microsoft.Xna.Platform.GameFrameworkViewSource<Platform$projectname$Game>();\n            Windows.ApplicationModel.Core.CoreApplication.Run(factory);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$.UWPCore\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"$safeprojectname$\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/$projectname$.UWPXaml.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{$guid7$}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <KniPlatform>WindowsStoreApp</KniPlatform>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.UAP.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Platform$projectname$Game.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$projectname$Content\\$projectname$Content.mgcb\">\n      <Link>Content\\$projectname$Content.mgcb</Link>\n    </KniContentReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"..\\$projectname$.Shared\\$projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n\n</Project>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/App.xaml",
    "content": "﻿<Application\n    x:Class=\"$safeprojectname$.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:$safeprojectname$\"\n    RequestedTheme=\"Light\">\n\n</Application>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/App.xaml.cs",
    "content": "﻿using System;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        static string deviceFamily;\n\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n\n            //API check to ensure the \"RequiresPointerMode\" property exists, ensuring project is running on build 14393 or later\n            if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent(\"Windows.UI.Xaml.Application\", \"RequiresPointerMode\"))\n            {\n                //If running on the Xbox, disable the default on screen pointer\n                if (IsXbox())\n                {\n                    Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Detection code in Windows 10 to identify the platform it is being run on\n        /// This function returns true if the project is running on an XboxOne\n        /// </summary>\n        public static bool IsXbox()\n        {\n            if (deviceFamily == null)\n                deviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily;\n\n            return deviceFamily == \"Windows.Xbox\";\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used such as when the application is launched to open a specific file.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n            // By default we want to fill the entire core window.\n            ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);\n\n//-:cnd:noEmit\n#if DEBUG\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                this.DebugSettings.EnableFrameRateCounter = true;\n            }\n#endif\n//+:cnd:noEmit\n\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (e.PrelaunchActivated == false)\n            {\n                if (rootFrame.Content == null)\n                {\n                    // When the navigation stack isn't restored navigate to the first page,\n                    // configuring the new page by passing required information as a navigation\n                    // parameter\n                    rootFrame.Navigate(typeof(MainPage), e.Arguments);\n                }\n                // Ensure the current window is active\n                Window.Current.Activate();\n            }\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation</param>\n        /// <param name=\"e\">Details about the navigation failure</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"$safeprojectname$.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:$safeprojectname$\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <SwapChainPanel x:Name=\"swapChainPanel\" />\n\n</Page>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/MainPage.xaml.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        readonly $safeprojectname$Game _game;\n\n        public MainPage()\n        {\n            this.InitializeComponent();\n\n            // Create the game.\n            string launchArguments = String.Empty;\n            _game = Microsoft.Xna.Platform.XamlGame<Platform$safeprojectname$Game>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"$guid6$\"\n    Publisher=\"CN=PublisherDistinguishedName\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"$guid6$\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>$safeprojectname$</DisplayName>\n    <PublisherDisplayName>publisherDisplayName</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$safeprojectname$.App\">\n      <uap:VisualElements\n        DisplayName=\"$safeprojectname$\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"$safeprojectname$\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/Platform$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <inheritdoc/>\n    public class Platform$safeprojectname$Game : $safeprojectname$Game\n    {\n\n        public Platform$safeprojectname$Game() : base()\n        {\n            // TODO: Add platform specific initialization logic here\n\n        }\n\n        /// <inheritdoc/>\n        protected override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <inheritdoc/>\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void UnloadContent()\n        {\n            base.UnloadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void Update(GameTime gameTime)\n        {\n            base.Update(gameTime);\n        }\n\n        /// <inheritdoc/>\n        protected override void Draw(GameTime gameTime)\n        {\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$.UWPXaml\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"$safeprojectname$\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/$projectname$.WinForms.DX11.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>$guid3$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>Windows</KniPlatform>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;WINDOWSDX</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Platform$projectname$Game.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Icon.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"..\\$projectname$Content\\$projectname$Content.mgcb\">\n      <Link>Content\\$projectname$Content.mgcb</Link>\n    </KniContentReference>\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"..\\$projectname$.Shared\\$projectname$.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/Platform$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <inheritdoc/>\n    public class Platform$safeprojectname$Game : $safeprojectname$Game\n    {\n\n        public Platform$safeprojectname$Game() : base()\n        {\n            // TODO: Add platform specific initialization logic here\n\n        }\n\n        /// <inheritdoc/>\n        protected override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        /// <inheritdoc/>\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void UnloadContent()\n        {\n            base.UnloadContent();\n        }\n\n        /// <inheritdoc/>\n        protected override void Update(GameTime gameTime)\n        {\n            base.Update(gameTime);\n        }\n\n        /// <inheritdoc/>\n        protected override void Draw(GameTime gameTime)\n        {\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new Platform$safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$.WinForms.DX11\")]\n[assembly: AssemblyProduct(\"$safeprojectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid3$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36930.0 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"$projectname$.Platforms\", \"$projectname$.Platforms\", \"{$fldguid$}\"\nEndProject\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"$projectname$.Shared\", \"$projectname$.Shared\\$projectname$.Shared.shproj\", \"{$guid1$}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$.WinForms.DX11\", \"$projectname$.WinForms.DX11\\$projectname$.WinForms.DX11.csproj\", \"{$guid3$}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$.SDL2.GL\", \"$projectname$.SDL2.GL\\$projectname$.SDL2.GL.csproj\", \"{$guid4$}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$.UWPCore\", \"$projectname$.UWPCore\\$projectname$.UWPCore.csproj\", \"{$guid5$}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$.UWPXaml\", \"$projectname$.UWPXaml\\$projectname$.UWPXaml.csproj\", \"{$guid7$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid3$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid3$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid3$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid3$}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{$guid4$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid4$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid4$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid4$}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{$guid5$}.Debug|Any CPU.ActiveCfg = Debug|x64\n\t\t{$guid5$}.Debug|Any CPU.Build.0 = Debug|x64\n\t\t{$guid5$}.Debug|Any CPU.Deploy.0 = Debug|x64\n\t\t{$guid5$}.Release|Any CPU.ActiveCfg = Release|x64\n\t\t{$guid5$}.Release|Any CPU.Build.0 = Release|x64\n\t\t{$guid5$}.Release|Any CPU.Deploy.0 = Release|x64\n\t\t{$guid7$}.Debug|Any CPU.ActiveCfg = Debug|x64\n\t\t{$guid7$}.Debug|Any CPU.Build.0 = Debug|x64\n\t\t{$guid7$}.Debug|Any CPU.Deploy.0 = Debug|x64\n\t\t{$guid7$}.Release|Any CPU.ActiveCfg = Release|x64\n\t\t{$guid7$}.Release|Any CPU.Build.0 = Release|x64\n\t\t{$guid7$}.Release|Any CPU.Deploy.0 = Release|x64\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{$guid3$} = {$fldguid$}\n\t\t{$guid4$} = {$fldguid$}\n\t\t{$guid5$} = {$fldguid$}\n\t\t{$guid7$} = {$fldguid$}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\n\tGlobalSection(SharedMSBuildProjectFiles) = preSolution\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid3$}*SharedItemsImports = 5\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid4$}*SharedItemsImports = 5\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid5$}*SharedItemsImports = 5\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid7$}*SharedItemsImports = 5\n\t\t$projectname$\\$projectname$.Shared\\$projectname$.Shared.projitems*{$guid1$}*SharedItemsImports = 13\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"windows\", \"linux\", \"macos\", \"desktop\", \"xbox\", \"uwp\" ],\n  \"identity\": \"nkast.Kni.Multiplatform.netFramework.Project.CSharp\",\n  \"name\": \"KNI Multiplatform Game Project (.NET Framework)\",\n  \"shortName\": \"kni-multiplatform-netframework\",\n  \"description\": \"A KNI game project for multiple platforms with shared content.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"WinForms.DX11/$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"fldguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$fldguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"guid3\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid3$\" },\n    \"guid4\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid4$\" },\n    \"guid5\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid5$\" },\n    \"guid6\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid6$\" },\n    \"guid7\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid7$\" },\n    \"guid8\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid8$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/$projectname$.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-android</TargetFramework>\n    <SupportedOSPlatformVersion>32.0</SupportedOSPlatformVersion>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <IsTrimmable>True</IsTrimmable>\n    <TrimMode>partial</TrimMode>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);ANDROID</DefineConstants>\n    <KniPlatform>Android</KniPlatform>\n    <ApplicationId>com.companyname.$safeprojectname$</ApplicationId>\n    <ApplicationVersion>1</ApplicationVersion>\n    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n    <AndroidStoreUncompressedFileExtensions>.m4a</AndroidStoreUncompressedFileExtensions>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.Oculus.GL\" Version=\"4.2.9001.1\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"$projectname$Activity.cs\" />\n    <Compile Include=\"$projectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"AndroidManifest.xml\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Splash.png\" />\n    <AndroidResource Include=\"Resources\\Values\\Strings.xml\" />\n    <AndroidResource Include=\"Resources\\Values\\Styles.xml\" />\n    <Folder Include=\"Resources\\Layout\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$projectname$Content.mgcb\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/$projectname$Activity.cs",
    "content": "using Microsoft.Xna.Framework;\nusing Android.App;\nusing Android.Content.PM;\nusing Android.OS;\nusing Android.Views;\n\nnamespace $safeprojectname$\n{\n    [Activity(Label = \"$projectname$\"\n        , MainLauncher = true\n        , Icon = \"@drawable/icon\"\n        , Theme = \"@style/Theme.Splash\"\n        , AlwaysRetainTaskState = true\n        , LaunchMode = LaunchMode.SingleInstance\n        , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize\n                               | ConfigChanges.Density | ConfigChanges.LayoutDirection | ConfigChanges.FontScale\n        , ScreenOrientation = ScreenOrientation.Landscape\n        , ExcludeFromRecents = true\n        , Exported = true\n    )]\n    [IntentFilter(new[] { Android.Content.Intent.ActionMain },\n     Categories = new[]\n     {\n       \"org.khronos.openxr.intent.category.IMMERSIVE_HMD\",\n       \"com.oculus.intent.category.VR\",\n       \"android.intent.category.LAUNCHER\"\n     }\n    )]\n    public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity\n    {\n        protected override void OnCreate(Bundle bundle)\n        {\n            base.OnCreate(bundle);\n            Game game = new $safeprojectname$Game();\n            SetContentView((View)game.Services.GetService(typeof(View)));\n            game.Run();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/$projectname$Game.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        XRDevice xrDevice;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.IsFullScreen = true;\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n\n            // OXR requires at least feature level 9.3.\n            graphics.GraphicsProfile = GraphicsProfile.HiDef;\n\n            // Syncronize to the headset refresh rate.\n            graphics.SynchronizeWithVerticalRetrace = true;\n            IsFixedTimeStep = false;\n            // 72Hz Frame rate for oculus.\n            TargetElapsedTime = TimeSpan.FromTicks(138888);\n\n            // We don't care is the main window is Focuses or not\n            // because we render on the XR rendertargets.\n            InactiveSleepTime = TimeSpan.FromSeconds(0);\n\n            xrDevice = new XRDevice(\"$safeprojectname$\", this.Services);\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n            xrDevice.BeginSessionAsync(XRSessionMode.VR);\n            xrDevice.TrackFloorLevelAsync(true);\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n            GamePadState touchControllerState = TouchController.GetState(TouchControllerType.Touch);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            float aspect = GraphicsDevice.Viewport.AspectRatio;\n            Matrix view = Matrix.CreateLookAt(Vector3.Zero, Vector3.Forward, Vector3.Up);\n            Matrix projection = Matrix.CreatePerspectiveFieldOfView(1, aspect, 0.05f, 1000);\n\n            if (xrDevice.DeviceState == XRDeviceState.Enabled)\n            {\n\n                // Draw on XR headset.\n                xrDevice.BeginFrame();\n                try\n                {\n                    HeadsetState headsetState = xrDevice.GetHeadsetState();\n\n                    // Draw each eye on a rendertarget.\n                    foreach (XREye eye in xrDevice.GetEyes())\n                    {\n                        RenderTarget2D rt = xrDevice.GetEyeRenderTarget(eye);\n                        GraphicsDevice.SetRenderTarget(rt);\n\n                        // Get XR view and projection.\n                        view = headsetState.GetEyeView(eye);\n                        projection = xrDevice.CreateProjection(eye, 0.05f, 1000);\n\n                        // TODO: Add your drawing code here\n                        if (xrDevice.SessionMode == XRSessionMode.AR)\n                            GraphicsDevice.Clear(Color.Transparent);\n                        else\n                            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n                        base.Draw(gameTime);\n\n                        // Resolve eye rendertarget.\n                        GraphicsDevice.SetRenderTarget(null);\n                        // Submit eye rendertarget.\n                        xrDevice.CommitRenderTarget(eye, rt);\n                    }\n                }\n                finally\n                {\n                    // Submit XR frame.\n                    int result = xrDevice.EndFrame();\n                }\n                return;\n            }\n\n            // Draw on the backbuffer.\n            GraphicsDevice.SetRenderTarget(null);\n\n            // TODO: Add your drawing code here\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/.template.config/Game.vstemplate",
    "content": "<VSTemplate Version=\"3.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\n  <TemplateData>\n    <Name>KNI Oculus Project (.net8)</Name>\n    <Description>A KNI game project for Oculus.</Description>\n    <ProjectType>CSharp</ProjectType>\n    <ProjectSubType>KNI</ProjectSubType>\n    <LanguageTag>csharp</LanguageTag>\n    <PlatformTag>Oculus</PlatformTag>\n    <ProjectTypeTag>games</ProjectTypeTag>\n    <ProjectTypeTag>KNI</ProjectTypeTag>\n    <ProjectTypeTag>XR</ProjectTypeTag>\n    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>\n    <SortOrder>43201</SortOrder>\n    <CreateNewFolder>true</CreateNewFolder>\n    <DefaultName>Game</DefaultName>\n    <ProvideDefaultName>true</ProvideDefaultName>\n    <LocationField>Enabled</LocationField>\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\n    <Icon>TemplateIcon.png</Icon>\n    <CreateInPlace>true</CreateInPlace>\n  </TemplateData>\n  <TemplateContent>\n    <Project TargetFileName=\"Application.csproj\" File=\"Application.csproj\" ReplaceParameters=\"true\">\n\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Directory.Build.props\">Directory.Build.props</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AndroidManifest.xml\">AndroidManifest.xml</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Activity.cs\">Activity.cs</ProjectItem>\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Game.cs\">Game.cs</ProjectItem>\n\n      <Folder Name=\"Content\" TargetFolderName=\"Content\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"$safeprojectname$Content.mgcb\">Content.mgcb</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Assets\" TargetFolderName=\"Assets\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AboutAssets.txt\">AboutAssets.txt</ProjectItem>\n      </Folder>\n\n      <Folder Name=\"Resources\" TargetFolderName=\"Resources\">\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"AboutResources.txt\">AboutResources.txt</ProjectItem>\n        <Folder Name=\"Drawable\" TargetFolderName=\"Drawable\">\n          <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Icon.png\">Icon.png</ProjectItem>\n          <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Splash.png\">Splash.png</ProjectItem>\n        </Folder>\n        <Folder Name=\"Layout\" TargetFolderName=\"Layout\" />\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Resource.Designer.cs\">Resource.Designer.cs</ProjectItem>\n        <Folder Name=\"Values\" TargetFolderName=\"Values\">\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Strings.xml\">Strings.xml</ProjectItem>\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Styles.xml\">Styles.xml</ProjectItem>\n        </Folder>\n      </Folder>\n\n    </Project>\n  </TemplateContent>\n</VSTemplate>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Oculus\", \"XR\" ],\n  \"identity\": \"nkast.Kni.Oculus.GL.Project.CSharp\",\n  \"name\": \"KNI Oculus Game Project\",\n  \"shortName\": \"kni-oculus-gl\",\n  \"description\": \"A KNI game project for Oculus.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"$safeprojectname$.$safeprojectname$\" android:versionCode=\"1\" android:versionName=\"1.0\">\n\t<!-- Tell the system this app requires OpenGL ES 3.1. -->\n\t<uses-feature android:glEsVersion=\"0x00030001\" android:required=\"true\" />\n\t<uses-feature android:name=\"android.hardware.vr.headtracking\" android:required=\"true\" />\n    <uses-feature android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"true\" />\n    \n\t<uses-permission android:name=\"android.permission.VIBRATE\" />\n\t<uses-permission android:name=\"android.permission.INTERNET\" />\n\t<uses-permission android:name=\"com.android.vending.BILLING\" />\n\t<application android:label=\"$projectname$\">\n\t    <meta-data android:name=\"com.oculus.vr.focusaware\" android:value=\"true\"/>\n\t</application>\n\t<uses-sdk android:minSdkVersion=\"32\" android:targetSdkVersion=\"32\" />\n</manifest>"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with your package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Android\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (Main.xml),\nan internationalization string table (Strings.xml) and some icons (drawable/Icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    Drawable/\n        Icon.png\n\n    Layout/\n        Main.axml\n\n    Values/\n        Strings.xml\n\nIn order to get the build system to recognize Android resources, the build action should be set \nto \"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called\n\"Resource\" that contains the tokens for each one of the resources included. For example, \nfor the above Resources layout, this is what the Resource class would expose:\n\npublic class Resource {\n    public class Drawable {\n        public const int Icon = 0x123;\n    }\n\n    public class Layout {\n        public const int Main = 0x456;\n    }\n\n    public class String {\n        public const int FirstString = 0xabc;\n        public const int SecondString = 0xbcd;\n    }\n}\n\nYou would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or \nResource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString\nto reference the first string in the dictionary file Values/Strings.xml."
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Resources/Resource.Designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"$safeprojectname$.Resource\", IsApplication=true)]\n\nnamespace $safeprojectname$\n{\n\t\n\t\n\t[System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"1.0.0.0\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic static void UpdateIdValues()\n\t\t{\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020001\n\t\t\tpublic const int Splash = 2130837505;\n\t\t\t\n\t\t\tstatic Drawable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int ApplicationName = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Hello = 2130903040;\n\t\t\t\n\t\t\tstatic String()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int Theme_Splash = 2130968576;\n\t\t\t\n\t\t\tstatic Style()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ApplicationName\">$safeprojectname$</string>\n</resources>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Resources/Values/Styles.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <style name=\"Theme.Splash\" parent=\"android:Theme\">\n    <item name=\"android:windowBackground\">@drawable/splash</item>\n    <item name=\"android:windowNoTitle\">true</item>\n  </style>\n</resources>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/$projectname$.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0</TargetFramework>\n    <RollForward>Major</RollForward>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <PublishTrimmed>True</PublishTrimmed>\n    <PublishAot>True</PublishAot>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DESKTOPGL</DefineConstants>\n    <KniPlatform>DesktopGL</KniPlatform>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"$projectname$Game.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.SDL2.GL\" Version=\"4.2.9001.1\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n\t<EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$projectname$Content.mgcb\" />\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Desktop\", \"OpenGL\", \"Windows\", \"Linux\", \"macOS\" ],\n  \"identity\": \"nkast.Kni.SDL2.GL.Project.CSharp\",\n  \"name\": \"KNI Cross Platform Desktop Game Project (.net8)\",\n  \"shortName\": \"kni-sdl2-gl\",\n  \"description\": \"A KNI game project for Windows, Mac and Linux using OpenGL.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:DesktopGL\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/$projectname$.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>DesktopGL</KniPlatform>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;DESKTOPGL</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>false</Prefer32Bit>\n\t<WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;DESKTOPGL</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>false</Prefer32Bit>\n\t<WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.SDL2.GL\" Version=\"4.2.9001.1\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Icon.ico\" />\n\t<EmbeddedResource Include=\"Icon.bmp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Desktop\", \"OpenGL\", \"Windows\", \"Linux\", \"macOS\" ],\n  \"identity\": \"nkast.Kni.SDL2.GL.netFramework.Project.CSharp\",\n  \"name\": \"KNI Cross Platform Desktop Game Project (.NET Framework)\",\n  \"shortName\": \"kni-sdl2-gl-netframework\",\n  \"description\": \"A KNI game project for Windows, Mac and Linux using OpenGL.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"guid2\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid2$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:DesktopGL\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid2$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/$projectname$.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{$guid1$}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <KniPlatform>WindowsStoreApp</KniPlatform>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.UAP.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n\n</Project>"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|x64\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|x64\n\t\t{$guid1$}.Debug|Any CPU.Deploy.0 = Debug|x64\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|x64\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|x64\n\t\t{$guid1$}.Release|Any CPU.Deploy.0 = Release|x64\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Desktop\", \"Windows\", \"xbox\", \"uwp\" ],\n  \"identity\": \"nkast.Kni.UAP.Core.DX11.Project.CSharp\",\n  \"name\": \"KNI Windows 10 Universal (Core) Game Project (.uap10)\",\n  \"shortName\": \"kni-uap-core-dx11-netframework\",\n  \"description\": \"A KNI game project for Windows 10 UWP using the Core Application framework.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"guid9\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid9$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:WindowsStoreApp\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"$guid9$\"\n    Publisher=\"CN=PublisherDistinguishedName\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"$guid9$\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>$projectname$</DisplayName>\n    <PublisherDisplayName>publisherDisplayName</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$safeprojectname$.App\">\n      <uap:VisualElements\n        DisplayName=\"$projectname$\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"$projectname$\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Program.cs",
    "content": "﻿using System;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main()\n        {\n            var factory = new Microsoft.Xna.Platform.GameFrameworkViewSource<$safeprojectname$Game>();\n            Windows.ApplicationModel.Core.CoreApplication.Run(factory);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/$projectname$.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{$guid1$}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>15</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <KniPlatform>WindowsStoreApp</KniPlatform>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;UAP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;UAP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.UAP.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"$safeprojectname$Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$safeprojectname$Content.mgcb\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n\n</Project>"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|x64\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|x64\n\t\t{$guid1$}.Debug|Any CPU.Deploy.0 = Debug|x64\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|x64\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|x64\n\t\t{$guid1$}.Release|Any CPU.Deploy.0 = Release|x64\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Desktop\", \"Windows\", \"xbox\", \"uwp\" ],\n  \"identity\": \"nkast.Kni.UAP.Xaml.DX11.Project.CSharp\",\n  \"name\": \"KNI Windows 10 Universal (XAML) Game Project (.uap10)\",\n  \"shortName\": \"kni-uap-xaml-dx11-netframework\",\n  \"description\": \"A KNI game project for Windows 10 UWP using XAML controls.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"guid9\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid9$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/App.xaml",
    "content": "﻿<Application\n    x:Class=\"$safeprojectname$.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:$safeprojectname$\"\n    RequestedTheme=\"Light\">\n\n</Application>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/App.xaml.cs",
    "content": "﻿using System;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        static string deviceFamily;\n\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n\n            //API check to ensure the \"RequiresPointerMode\" property exists, ensuring project is running on build 14393 or later\n            if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent(\"Windows.UI.Xaml.Application\", \"RequiresPointerMode\"))\n            {\n                //If running on the Xbox, disable the default on screen pointer\n                if (IsXbox())\n                {\n                    Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Detection code in Windows 10 to identify the platform it is being run on\n        /// This function returns true if the project is running on an XboxOne\n        /// </summary>\n        public static bool IsXbox()\n        {\n            if (deviceFamily == null)\n                deviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily;\n\n            return deviceFamily == \"Windows.Xbox\";\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used such as when the application is launched to open a specific file.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n            // By default we want to fill the entire core window.\n            ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);\n\n//-:cnd:noEmit\n#if DEBUG\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                this.DebugSettings.EnableFrameRateCounter = true;\n            }\n#endif\n//+:cnd:noEmit\n\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (e.PrelaunchActivated == false)\n            {\n                if (rootFrame.Content == null)\n                {\n                    // When the navigation stack isn't restored navigate to the first page,\n                    // configuring the new page by passing required information as a navigation\n                    // parameter\n                    rootFrame.Navigate(typeof(MainPage), e.Arguments);\n                }\n                // Ensure the current window is active\n                Window.Current.Activate();\n            }\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation</param>\n        /// <param name=\"e\">Details about the navigation failure</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:WindowsStoreApp\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"$safeprojectname$.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:$safeprojectname$\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <SwapChainPanel x:Name=\"swapChainPanel\" />\n\n</Page>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/MainPage.xaml.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        readonly $safeprojectname$Game _game;\n\n        public MainPage()\n        {\n            this.InitializeComponent();\n\n            // Create the game.\n            string launchArguments = String.Empty;\n            _game = Microsoft.Xna.Platform.XamlGame<$safeprojectname$Game>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"$guid9$\"\n    Publisher=\"CN=PublisherDistinguishedName\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"$guid9$\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>$projectname$</DisplayName>\n    <PublisherDisplayName>publisherDisplayName</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$safeprojectname$.App\">\n      <uap:VisualElements\n        DisplayName=\"$projectname$\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"$projectname$\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/$projectname$.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <RollForward>Major</RollForward>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>$(DefineConstants);WINDOWSDX</DefineConstants>\n    <KniPlatform>Windows</KniPlatform>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$projectname$Game.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Icon.ico\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$projectname$Content.mgcb\" />\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Desktop\", \"Windows\" ],\n  \"identity\": \"nkast.Kni.WinForms.DX11.Project.CSharp\",\n  \"name\": \"KNI Windows Game Project (.net8)\",\n  \"shortName\": \"kni-winforms-dx11\",\n  \"description\": \"A KNI game project for the Windows desktop using DirectX 11.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Windows\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            // Uncomment this line to enable VR with the nkast.Kni.Platform.WinForms.DX11.OculusOVR package.\n            //Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory());\n\n            using (Game game = new $safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/$projectname$.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>Windows</KniPlatform>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Icon.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$projectname$Game.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.WinForms.DX11\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Icon.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$projectname$Content.mgcb\" />\n    <None Include=\"app.manifest\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"Desktop\", \"Windows\" ],\n  \"identity\": \"nkast.Kni.WinForms.DX11.netFramework.Project.CSharp\",\n  \"name\": \"KNI Windows Game Project (.NET Framework)\",\n  \"shortName\": \"kni-winforms-dx11-netframework\",\n  \"description\": \"A KNI game project for the Windows desktop using DirectX 11.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"guid2\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid2$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/Content/$projectname$Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:Windows\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/Program.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// The main class.\n    /// </summary>\n    public static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            using (Game game = new $safeprojectname$Game())\n                game.Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"$projectname$\")]\n[assembly: AssemblyProduct(\"$projectname$\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"$guid2$\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"$safeprojectname$\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n    </windowsSettings>\n  </application>\n\n</assembly>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/$projectname$.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <TargetFramework>net8.0-ios</TargetFramework>\n    <SupportedOSPlatformVersion>11.2</SupportedOSPlatformVersion>\n    <ProjectGuid>$guid1$</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <IsTrimmable>True</IsTrimmable>\n\t<TrimMode>partial</TrimMode>\n    <RootNamespace>$safeprojectname$</RootNamespace>\n    <AssemblyName>$safeprojectname$</AssemblyName>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)</OutputPath>\n    <DefineConstants>$(DefineConstants);iOS</DefineConstants>\n    <KniPlatform>iOS</KniPlatform>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"nkast.Xna.Framework\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Graphics\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Audio\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Media\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Input\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Game\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Devices\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Storage\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Xna.Framework.XR\" Version=\"4.2.9001\" />\n    <PackageReference Include=\"nkast.Kni.Platform.iOS.GL\" Version=\"4.2.9001.1\" />\n    <PackageReference Include=\"nkast.Xna.Framework.Content.Pipeline.Builder\" Version=\"4.2.9001\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"$projectname$Game.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\$projectname$Content.mgcb\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <BundleResource Include=\"Default.png\" />\n    <BundleResource Include=\"GameThumbnail.png\" />\n    <None Include=\"Entitlements.plist\" />\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/$projectname$.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.36811.4 d17.14\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"$projectname$\", \"$projectname$.csproj\", \"{$guid1$}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {$slnguid$}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/$projectname$Game.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace $safeprojectname$\n{\n    /// <summary>\n    /// This is the main type for your game.\n    /// </summary>\n    public class $safeprojectname$Game : Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n\n        public $safeprojectname$Game()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            graphics.IsFullScreen = true;\n            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;\n        }\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to run.\n        /// This is where it can query for any required services and load any non-graphic\n        /// related content.  Calling base.Initialize will enumerate through any components\n        /// and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n\n        }\n\n        /// <summary>\n        /// LoadContent will be called once per game and is the place to load\n        /// all of your content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n\n            // TODO: Use this.Content to load your game content here\n        }\n\n        /// <summary>\n        /// UnloadContent will be called once per game and is the place to unload\n        /// game-specific content.\n        /// </summary>\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input, and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            MouseState mouseState = Mouse.GetState();\n            KeyboardState keyboardState = Keyboard.GetState();\n            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);\n\n            if (keyboardState.IsKeyDown(Keys.Escape) ||\n                keyboardState.IsKeyDown(Keys.Back) ||\n                gamePadState.Buttons.Back == ButtonState.Pressed)\n            {\n                try { Exit(); }\n                catch (PlatformNotSupportedException) { /* ignore */ }\n            }\n\n            // TODO: Add your update logic here\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            // TODO: Add your drawing code here\n\n            base.Draw(gameTime);\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/.template.config/ide.host.json",
    "content": "{\n  \"$schema\": \" https://json.schemastore.org/ide.host\",\n  \"icon\": \"TemplateIcon.png\",\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/.template.config/template.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/template\",\n  \"author\": \"KNI Engine\",\n  \"classifications\": [ \"KNI\", \"Games\", \"iOS\", \"mobile\" ],\n  \"identity\": \"nkast.Kni.iOS.GL.Project.CSharp\",\n  \"name\": \"KNI iOS Game Project\",\n  \"shortName\": \"kni-ios-gl\",\n  \"description\": \"A KNI game project for iOS.\",\n  \"tags\": {\n    \"language\": \"C#\",\n    \"type\": \"project\"\n  },\n  \"sourceName\": \"$projectname$\",\n  \"primaryOutputs\": [\n    {\n      \"path\": \"$projectname$.csproj\"\n    }\n  ],\n  \"symbols\": {\n    \"slnguid\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$slnguid$\" },\n    \"guid1\": { \"type\": \"generated\", \"generator\": \"guid\", \"replaces\": \"$guid1$\" },\n    \"filesafeprojectname\": {\n      \"type\": \"derived\",\n      \"valueSource\": \"name\",\n      \"replaces\": \"$safeprojectname$\",\n      \"valueTransform\": \"safe_name\"\n    }\n  },\n  \"preferNameDirectory\": true,\n  \"icon\": \"TemplateIcon.png\"\n}"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Content/$projectname$Content.mgcb",
    "content": "﻿#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:iOS\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Directory.Build.props",
    "content": "<Project>\n\n</Project>\n\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Entitlements.plist",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDisplayName</key>\n  <string>$safeprojectname$</string>\n  <key>CFBundleIconFiles</key>\n  <array>\n    <string>GameThumbnail.png</string>\n  </array>\n  <key>CFBundleIdentifier</key>\n  <string>project.Company.$safeprojectname$</string>\n  <key>MinimumOSVersion</key>\n  <string>11.2</string>\n  <key>UISupportedInterfaceOrientations</key>\n  <array>\n    <string>UIInterfaceOrientationPortrait</string>\n    <string>UIInterfaceOrientationPortraitUpsideDown</string>\n    <string>UIInterfaceOrientationLandscapeLeft</string>\n    <string>UIInterfaceOrientationLandscapeRight</string>\n  </array>\n  <key>CFBundleName</key>\n  <string>$safeprojectname$</string>\n  <key>UIRequiresFullScreen</key>\n  <true/>\n  <key>UIStatusBarHidden</key>\n  <true/>\n  <key>UILaunchStoryboardName</key>\n  <string>LaunchScreen</string>\n  <key>UIDeviceFamily</key>\n  <array>\n      <integer>1</integer>\n      <integer>2</integer>\n  </array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Program.cs",
    "content": "﻿using System;\nusing Foundation;\nusing UIKit;\n\nnamespace $safeprojectname$\n{\n    [Register(\"AppDelegate\")]\n    internal class Program : UIApplicationDelegate\n    {\n        private static $safeprojectname$Game game;\n\n        internal static void RunGame()\n        {\n            game = new $safeprojectname$Game();\n            game.Run();\n        }\n\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main(string[] args)\n        {\n            UIApplication.Main(args, null, \"AppDelegate\");\n        }\n\n        public override void FinishedLaunching(UIApplication app)\n        {\n            RunGame();\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/dotnetTemplates/installPackage.bat",
    "content": "dotnet new install .\\bin\\Release\\nkast.Kni.Templates.4.2.9001.nupkg\n"
  },
  {
    "path": "Templates/dotnetTemplates/nkast.Kni.Templates.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <!-- The package metadata. -->\n    <!-- Follow the instructions on https://learn.microsoft.com/en-us/nuget/create-packages/package-authoring-best-practices -->\n    <PackageId>nkast.Kni.Templates</PackageId>\n    <PackageVersion>4.2.9001-preview.2</PackageVersion>\n    <Title>KNI Templates</Title>\n    <Authors>KNI Engine</Authors>\n    <Description>.NET templates for creating KNI game projects.</Description>\n    <PackageTags>KNI;KniEngine;game-development;gamedev;</PackageTags>\n    <PackageProjectUrl>https://github.com/kniEngine/kni/</PackageProjectUrl>\n\n    <!-- Keep package type as 'Template' to show the package as a template package on nuget.org and make your template available in dotnet new search.-->\n    <PackageType>Template</PackageType>\n    <TargetFramework>net8.0</TargetFramework>\n    <IncludeContentInPack>true</IncludeContentInPack>\n    <IncludeBuildOutput>false</IncludeBuildOutput>\n    <ContentTargetFolders>content</ContentTargetFolders>\n    <NoWarn>$(NoWarn);NU5128</NoWarn>\n    <NoDefaultExcludes>true</NoDefaultExcludes>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <LocalizeTemplates>false</LocalizeTemplates>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.TemplateEngine.Tasks\" Version=\"*\" PrivateAssets=\"all\" IsImplicitlyDefined=\"true\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"content\\**\\*\" Exclude=\"content\\**\\bin\\**;content\\**\\obj\\**\" />\n    <Compile Remove=\"**\\*\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Templates/dotnetTemplates/pack.bat",
    "content": "dotnet pack\n"
  },
  {
    "path": "Templates/dotnetTemplates/uninstallPackage.bat",
    "content": "dotnet new uninstall nkast.Kni.Templates"
  },
  {
    "path": "Tests/Assets/Audio/Tests.xap",
    "content": "Signature = XACT3;\nVersion = 18;\nContent Version = 46;\nRelease = February 2010;\n\nOptions\n{\n    Verbose Report = 0;\n    Generate C/C++ Headers = 1;\n}\n\nGlobal Settings\n{\n    Xbox File = Xbox\\Tests.xgs;\n    Windows File = Win\\Tests.xgs;\n    Header File = D:\\Projects\\MonoGame\\Test\\Assets\\Audio\\Tests.h;\n    Exclude Category Names = 0;\n    Exclude Variable Names = 0;\n    Last Modified Low = 2235367809;\n    Last Modified High = 30530715;\n\n    Category\n    {\n        Name = Global;\n        Public = 1;\n        Background Music = 0;\n        Volume = 0;\n\n        Category Entry\n        {\n        }\n\n        Instance Limit\n        {\n            Max Instances = 255;\n            Behavior = 0;\n\n            Crossfade\n            {\n                Fade In = 0;\n                Fade Out = 0;\n                Crossfade Type = 0;\n            }\n        }\n    }\n\n    Category\n    {\n        Name = Default;\n        Public = 1;\n        Background Music = 0;\n        Volume = 0;\n\n        Category Entry\n        {\n            Name = Global;\n        }\n\n        Instance Limit\n        {\n            Max Instances = 255;\n            Behavior = 0;\n\n            Crossfade\n            {\n                Fade In = 0;\n                Fade Out = 0;\n                Crossfade Type = 0;\n            }\n        }\n    }\n\n    Category\n    {\n        Name = Music;\n        Public = 1;\n        Background Music = 1;\n        Volume = 0;\n\n        Category Entry\n        {\n            Name = Global;\n        }\n\n        Instance Limit\n        {\n            Max Instances = 255;\n            Behavior = 0;\n\n            Crossfade\n            {\n                Fade In = 0;\n                Fade Out = 0;\n                Crossfade Type = 0;\n            }\n        }\n    }\n\n    Category\n    {\n        Name = The End;\n        Public = 1;\n        Background Music = 0;\n        Volume = 0;\n\n        Category Entry\n        {\n            Name = Global;\n        }\n\n        Instance Limit\n        {\n            Max Instances = 255;\n            Behavior = 0;\n\n            Crossfade\n            {\n                Fade In = 0;\n                Fade Out = 0;\n                Crossfade Type = 0;\n            }\n        }\n    }\n\n    Category\n    {\n        Name = Subcat;\n        Public = 1;\n        Background Music = 0;\n        Volume = 0;\n\n        Category Entry\n        {\n            Name = The End;\n        }\n\n        Instance Limit\n        {\n            Max Instances = 255;\n            Behavior = 0;\n\n            Crossfade\n            {\n                Fade In = 0;\n                Fade Out = 0;\n                Crossfade Type = 0;\n            }\n        }\n    }\n\n    Variable\n    {\n        Name = OrientationAngle;\n        Public = 1;\n        Global = 0;\n        Internal = 0;\n        External = 0;\n        Monitored = 1;\n        Reserved = 1;\n        Read Only = 0;\n        Time = 0;\n        Value = 0.000000;\n        Initial Value = 0.000000;\n        Min = -180.000000;\n        Max = 180.000000;\n    }\n\n    Variable\n    {\n        Name = DopplerPitchScalar;\n        Public = 1;\n        Global = 0;\n        Internal = 0;\n        External = 0;\n        Monitored = 1;\n        Reserved = 1;\n        Read Only = 0;\n        Time = 0;\n        Value = 1.000000;\n        Initial Value = 1.000000;\n        Min = 0.000000;\n        Max = 4.000000;\n    }\n\n    Variable\n    {\n        Name = SpeedOfSound;\n        Public = 1;\n        Global = 1;\n        Internal = 0;\n        External = 0;\n        Monitored = 1;\n        Reserved = 1;\n        Read Only = 0;\n        Time = 0;\n        Value = 343.500000;\n        Initial Value = 343.500000;\n        Min = 0.000000;\n        Max = 1000000.000000;\n    }\n\n    Variable\n    {\n        Name = ReleaseTime;\n        Public = 1;\n        Global = 0;\n        Internal = 1;\n        External = 1;\n        Monitored = 1;\n        Reserved = 1;\n        Read Only = 1;\n        Time = 1;\n        Value = 0.000000;\n        Initial Value = 0.000000;\n        Min = 0.000000;\n        Max = 15000.000000;\n    }\n\n    Variable\n    {\n        Name = AttackTime;\n        Public = 1;\n        Global = 0;\n        Internal = 1;\n        External = 1;\n        Monitored = 1;\n        Reserved = 1;\n        Read Only = 1;\n        Time = 1;\n        Value = 0.000000;\n        Initial Value = 0.000000;\n        Min = 0.000000;\n        Max = 15000.000000;\n    }\n\n    Variable\n    {\n        Name = NumCueInstances;\n        Public = 1;\n        Global = 0;\n        Internal = 1;\n        External = 1;\n        Monitored = 1;\n        Reserved = 1;\n        Read Only = 1;\n        Time = 0;\n        Value = 0.000000;\n        Initial Value = 0.000000;\n        Min = 0.000000;\n        Max = 1024.000000;\n    }\n\n    Variable\n    {\n        Name = Distance;\n        Public = 1;\n        Global = 0;\n        Internal = 0;\n        External = 0;\n        Monitored = 1;\n        Reserved = 1;\n        Read Only = 0;\n        Time = 0;\n        Value = 0.000000;\n        Initial Value = 0.000000;\n        Min = 0.000000;\n        Max = 1000000.000000;\n    }\n\n    Variable\n    {\n        Name = Global Public;\n        Public = 1;\n        Global = 1;\n        Internal = 0;\n        External = 0;\n        Monitored = 1;\n        Reserved = 0;\n        Read Only = 0;\n        Time = 0;\n        Value = 0.000000;\n        Initial Value = 12.340000;\n        Min = 0.000000;\n        Max = 100.000000;\n    }\n\n    Variable\n    {\n        Name = Global Private;\n        Public = 0;\n        Global = 1;\n        Internal = 0;\n        External = 0;\n        Monitored = 1;\n        Reserved = 0;\n        Read Only = 0;\n        Time = 0;\n        Value = 0.000000;\n        Initial Value = 0.000000;\n        Min = 0.000000;\n        Max = 100.000000;\n    }\n\n    Variable\n    {\n        Name = Cue Private;\n        Public = 0;\n        Global = 0;\n        Internal = 0;\n        External = 0;\n        Monitored = 1;\n        Reserved = 0;\n        Read Only = 0;\n        Time = 0;\n        Value = 0.000000;\n        Initial Value = 0.000000;\n        Min = 0.000000;\n        Max = 100.000000;\n    }\n\n    Variable\n    {\n        Name = Cue Public;\n        Public = 1;\n        Global = 0;\n        Internal = 0;\n        External = 0;\n        Monitored = 1;\n        Reserved = 0;\n        Read Only = 0;\n        Time = 0;\n        Value = 0.000000;\n        Initial Value = 45.669998;\n        Min = 0.000000;\n        Max = 100.000000;\n    }\n\n    Compression Preset\n    {\n        Name = Adpcm;\n        Xbox Format Tag = 0;\n        PC Format Tag = 2;\n        Samples Per Block = 128;\n    }\n}\n\nWave Bank\n{\n    Name = Tests;\n    Xbox File = Xbox\\Tests.xwb;\n    Windows File = Win\\Tests.xwb;\n    Xbox Bank Path Edited = 0;\n    Windows Bank Path Edited = 0;\n    Seek Tables = 1;\n    Compression Preset Name = <none>;\n    Xbox Bank Last Modified Low = 0;\n    Xbox Bank Last Modified High = 0;\n    PC Bank Last Modified Low = 2235437834;\n    PC Bank Last Modified High = 30530715;\n    Bank Last Revised Low = 1968512440;\n    Bank Last Revised High = 30530715;\n\n    Wave\n    {\n        Name = blast_mono;\n        File = blast_mono.wav;\n        Build Settings Last Modified Low = 1875978603;\n        Build Settings Last Modified High = 30526869;\n\n        Cache\n        {\n            Format Tag = 0;\n            Channels = 1;\n            Sampling Rate = 44100;\n            Bits Per Sample = 1;\n            Play Region Offset = 44;\n            Play Region Length = 631940;\n            Loop Region Offset = 0;\n            Loop Region Length = 0;\n            File Type = 1;\n            Last Modified Low = 2255033196;\n            Last Modified High = 30529426;\n        }\n    }\n\n    Wave\n    {\n        Name = rock_loop_stereo;\n        File = rock_loop_stereo.wav;\n        Build Settings Last Modified Low = 1901270084;\n        Build Settings Last Modified High = 30526869;\n\n        Cache\n        {\n            Format Tag = 0;\n            Channels = 2;\n            Sampling Rate = 44100;\n            Bits Per Sample = 1;\n            Play Region Offset = 44;\n            Play Region Length = 1400616;\n            Loop Region Offset = 0;\n            Loop Region Length = 0;\n            File Type = 1;\n            Last Modified Low = 2255273154;\n            Last Modified High = 30529426;\n        }\n    }\n\n    Wave\n    {\n        Name = bark_mono_44hz_16bit;\n        File = bark_mono_44hz_16bit.wav;\n        Build Settings Last Modified Low = 724851642;\n        Build Settings Last Modified High = 30530715;\n        Compression Preset Name = Adpcm;\n\n        Cache\n        {\n            Format Tag = 0;\n            Channels = 1;\n            Sampling Rate = 44100;\n            Bits Per Sample = 1;\n            Play Region Offset = 44;\n            Play Region Length = 142154;\n            Loop Region Offset = 0;\n            Loop Region Length = 0;\n            File Type = 1;\n            Last Modified Low = 4285451975;\n            Last Modified High = 30530714;\n        }\n    }\n}\n\nSound Bank\n{\n    Name = Tests;\n    Xbox File = Xbox\\Tests.xsb;\n    Windows File = Win\\Tests.xsb;\n    Xbox Bank Path Edited = 0;\n    Windows Bank Path Edited = 0;\n    Bank Last Modified Low = 2236507872;\n    Bank Last Modified High = 30530715;\n    Header Last Modified High = 0;\n    Header Last Modified Low = 0;\n\n    Sound\n    {\n        Name = blast_mono;\n        Volume = -1200;\n        Pitch = 0;\n        Priority = 0;\n\n        Category Entry\n        {\n            Name = Default;\n        }\n\n        Track\n        {\n            Volume = 0;\n            Use Filter = 0;\n\n            Play Wave Event\n            {\n                Break Loop = 0;\n                Use Speaker Position = 0;\n                Use Center Speaker = 1;\n                New Speaker Position On Loop = 1;\n                Speaker Position Angle = 0.000000;\n                Speaker Position Arc = 0.000000;\n\n                Event Header\n                {\n                    Timestamp = 0;\n                    Relative = 0;\n                    Random Recurrence = 0;\n                    Random Offset = 0;\n                }\n\n                Wave Entry\n                {\n                    Bank Name = Tests;\n                    Bank Index = 0;\n                    Entry Name = blast_mono;\n                    Entry Index = 0;\n                    Weight = 255;\n                    Weight Min = 0;\n                }\n            }\n        }\n    }\n\n    Sound\n    {\n        Name = rock_loop_stereo;\n        Volume = -1200;\n        Pitch = 0;\n        Priority = 0;\n\n        Category Entry\n        {\n            Name = Default;\n        }\n\n        Track\n        {\n            Volume = 0;\n            Use Filter = 0;\n\n            Play Wave Event\n            {\n                Loop Count = 255;\n                Break Loop = 0;\n                Use Speaker Position = 0;\n                Use Center Speaker = 1;\n                New Speaker Position On Loop = 1;\n                Speaker Position Angle = 0.000000;\n                Speaker Position Arc = 0.000000;\n\n                Event Header\n                {\n                    Timestamp = 0;\n                    Relative = 0;\n                    Random Recurrence = 0;\n                    Random Offset = 0;\n                }\n\n                Wave Entry\n                {\n                    Bank Name = Tests;\n                    Bank Index = 0;\n                    Entry Name = rock_loop_stereo;\n                    Entry Index = 1;\n                    Weight = 255;\n                    Weight Min = 0;\n                }\n            }\n        }\n    }\n\n    Sound\n    {\n        Name = bark_mono;\n        Volume = -1200;\n        Pitch = 0;\n        Priority = 0;\n\n        Category Entry\n        {\n            Name = Default;\n        }\n\n        Track\n        {\n            Volume = 0;\n            Use Filter = 0;\n\n            Play Wave Event\n            {\n                Break Loop = 0;\n                Use Speaker Position = 0;\n                Use Center Speaker = 1;\n                New Speaker Position On Loop = 1;\n                Speaker Position Angle = 0.000000;\n                Speaker Position Arc = 0.000000;\n\n                Event Header\n                {\n                    Timestamp = 0;\n                    Relative = 0;\n                    Random Recurrence = 0;\n                    Random Offset = 0;\n                }\n\n                Wave Entry\n                {\n                    Bank Name = Tests;\n                    Bank Index = 0;\n                    Entry Name = bark_mono_44hz_16bit;\n                    Entry Index = 2;\n                    Weight = 255;\n                    Weight Min = 0;\n                }\n            }\n        }\n    }\n\n    Cue\n    {\n        Name = blast_mono;\n\n        Variation\n        {\n            Variation Type = 3;\n            Variation Table Type = 1;\n            New Variation on Loop = 0;\n        }\n\n        Sound Entry\n        {\n            Name = blast_mono;\n            Index = 0;\n            Weight Min = 0;\n            Weight Max = 255;\n        }\n    }\n\n    Cue\n    {\n        Name = rock_loop_stereo;\n\n        Variation\n        {\n            Variation Type = 3;\n            Variation Table Type = 1;\n            New Variation on Loop = 0;\n        }\n\n        Sound Entry\n        {\n            Name = rock_loop_stereo;\n            Index = 1;\n            Weight Min = 0;\n            Weight Max = 255;\n        }\n    }\n\n    Cue\n    {\n        Name = bark_mono;\n\n        Variation\n        {\n            Variation Type = 3;\n            Variation Table Type = 1;\n            New Variation on Loop = 0;\n        }\n\n        Sound Entry\n        {\n            Name = bark_mono;\n            Index = 2;\n            Weight Min = 0;\n            Weight Max = 255;\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Assets/Effects/Bevels.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nsampler s0;\n\nfloat4 PixelShaderFunction( float4 inPosition : SV_Position,\n\t\t\t    float4 inColor : COLOR0,\n\t\t\t    float2 coords : TEXCOORD0 ) : COLOR0\n{\n    float4 color = tex2D(s0, coords);\n\tcolor -= tex2D(s0, coords - 0.002) * 2.5f;\n\tcolor += tex2D(s0, coords + 0.002) * 2.5f;\n\n    return color;\n}\n\ntechnique Technique1\n{\n    pass Pass1\n    {\n        PixelShader = compile ps_2_0 PixelShaderFunction();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/BlackOut.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nsampler s0;\n\nfloat4 PixelShaderFunction( float4 inPosition : SV_Position,\n\t\t\t    float4 inColor : COLOR0,\n\t\t\t    float2 coords : TEXCOORD0 ) : COLOR0\n{\n    float4 color = tex2D(s0, coords);\n\tcolor.rgb = 0;\n\n    return color;\n}\n\ntechnique Technique1\n{\n    pass Pass1\n    {\n        PixelShader = compile ps_2_0 PixelShaderFunction();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/ColorFlip.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nsampler s0;\n\nfloat4 PixelShaderFunction( float4 inPosition : SV_Position,\n\t\t\t    float4 inColor : COLOR0,\n\t\t\t    float2 coords : TEXCOORD0 ) : COLOR0\n{\n    float4 color = tex2D(s0, coords);\n\tcolor.rgb = color.bgr;\n\n    return color;\n}\n\ntechnique Technique1\n{\n    pass Pass1\n    {\n        PixelShader = compile ps_2_0 PixelShaderFunction();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/ComputeShader.fx",
    "content": "﻿// code from @cpt-max Compute fork.\n// https://github.com/cpt-max/MonoGame/commit/eebfda5246bed106618c17eca416aae548547c04\n\nstruct Input\n{\n    float2 pos;\n};\n\nstruct Output\n{\n    int collisions;\n};\n\nStructuredBuffer<Input> Inputs;\nRWStructuredBuffer<Output> Outputs;\n\nint ObjectCount;\nfloat ObjectSize;\n\n[numthreads(10, 1, 1)]\nvoid CS(uint3 localID : SV_GroupThreadID, uint3 dispatchID : SV_GroupID,\n\t    uint localIndex : SV_GroupIndex, uint3 globalID : SV_DispatchThreadID)\n{\n    float2 pos = Inputs[globalID.x].pos;\n    int collisions = 0;\n    \n    for (int i = 0; i < ObjectCount; i++)\n    {\n        if ((uint) i == globalID.x)\n            continue;\n        \n        float2 posOther = Inputs[i].pos;\n        float dist = distance(pos, posOther);\n        if (dist < ObjectSize)\n            collisions++;\n    }\n    \n    Outputs[globalID.x].collisions = collisions;\n}\n\ntechnique Tech0\n{\n    pass Pass0\n    {\n        ComputeShader = compile cs_5_0 CS();\n    }\n}\n"
  },
  {
    "path": "Tests/Assets/Effects/CustomSpriteBatchEffect.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nTexture2D SourceTexture;\nTexture2D OtherTexture;\n\nsampler2D SourceSampler = sampler_state\n{\n    Texture = (SourceTexture);\n};\n\nsampler2D OtherSampler = sampler_state\n{\n    Texture = (OtherTexture);\n};\n\nfloat4 PS_Main(float2 uv : TEXCOORD0) : COLOR0\n{\n    return tex2D(SourceSampler, uv) + tex2D(OtherSampler, uv);\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/CustomSpriteBatchEffectComparisonSampler.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nTexture2D SourceTexture;\nSamplerComparisonState SourceSampler;\n\nstruct VSOutput\n{\n    float4 position : SV_Position;\n    float4 color    : COLOR0;\n    float2 uv       : TEXCOORD0;\n};\n\nfloat4 PS_Main(VSOutput input) : COLOR0\n{\n    float comparisonResult = SourceTexture.SampleCmpLevelZero(SourceSampler, input.uv, 0.5f);\n    return float4(comparisonResult, 0, 0, 1);\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_3_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/DeferredBasicEffect.fx",
    "content": "\nfloat4x4 World;\nfloat4x4 View;\nfloat4x4 Projection;\nfloat specularIntensity = 0.8f;\nfloat specularPower = 0.5f; \n\ntexture2D Diffuse : register(t0);\nsampler DiffuseSampler : register(s0) = sampler_state\n{\n    Texture = (Diffuse);\n    MAGFILTER = LINEAR;\n    MINFILTER = LINEAR;\n    MIPFILTER = LINEAR;\n    AddressU = Wrap;\n    AddressV = Wrap;\n};\n\ntexture2D SpecularMap : register(t1);\nsampler SpecularMapSampler : register(s1) = sampler_state\n{\n    Texture = (SpecularMap);\n    MagFilter = LINEAR;\n    MinFilter = LINEAR;\n    Mipfilter = LINEAR;\n    AddressU = Wrap;\n    AddressV = Wrap;\n};\n\ntexture2D NormalMap : register(t2);\nsampler NormalMapSampler : register(s2) = sampler_state\n{\n    Texture = (NormalMap);\n    MagFilter = LINEAR;\n    MinFilter = LINEAR;\n    Mipfilter = LINEAR;\n    AddressU = Wrap;\n    AddressV = Wrap;\n};\n\nstruct VertexShaderInput\n{\n    float4 Position : POSITION0;\n    float3 Normal : NORMAL0;\n    float2 TexCoord : TEXCOORD0;\n    float3 Binormal : BINORMAL0;\n    float3 Tangent : TANGENT0;\n};\n\nstruct VertexShaderOutput\n{\n    float4 Position : POSITION0;\n    float2 TexCoord : TEXCOORD0;\n    float2 Depth : TEXCOORD1;\n    float3x3 tangentToWorld : TEXCOORD2;\n};\n\nVertexShaderOutput VertexShaderFunction(VertexShaderInput input)\n{\n    VertexShaderOutput output;\n\n    float4 worldPosition = mul(float4(input.Position.xyz,1), World);\n    float4 viewPosition = mul(worldPosition, View);\n    output.Position = mul(viewPosition, Projection);\n\n    output.TexCoord = input.TexCoord;\n    output.Depth.x = output.Position.z;\n    output.Depth.y = output.Position.w;\n\n    // calculate tangent space to world space matrix using the world space tangent,\n    // binormal, and normal as basis vectors\n    output.tangentToWorld[0] = mul(input.Tangent, World);\n    output.tangentToWorld[1] = mul(input.Binormal, World);\n    output.tangentToWorld[2] = mul(input.Normal, World);\n\n    return output;\n}\nstruct PixelShaderOutput\n{\n    half4 Color : COLOR0;\n    half4 Normal : COLOR1;\n    half4 Depth : COLOR2;\n};\n\nPixelShaderOutput PixelShaderFunction(VertexShaderOutput input)\n{\n    PixelShaderOutput output;\n    output.Color = tex2D(DiffuseSampler, input.TexCoord);\n    \n    float4 specularAttributes = tex2D(SpecularMapSampler, input.TexCoord);\n    //specular Intensity\n    output.Color.a = specularAttributes.r;\n    \n    // read the normal from the normal map\n    float3 normalFromMap = tex2D(NormalMapSampler, input.TexCoord);\n    //tranform to [-1,1]\n    normalFromMap = 2.0f * normalFromMap - 1.0f;\n\tnormalFromMap = float3(0,0,1); //if we don't have a normalMap do this!\n    //transform into world space\n    normalFromMap = mul(normalFromMap, input.tangentToWorld);\n    //normalize the result\n    normalFromMap = normalize(normalFromMap);\n    //output the normal, in [0,1] space\n    output.Normal.rgb = 0.5f * (normalFromMap + 1.0f);\n\t\n    //specular Power\n    output.Normal.a = specularAttributes.a;\n\n    output.Depth = input.Depth.x / input.Depth.y;\n    return output;\n}\n\ntechnique Standard \n{ \n    pass { VertexShader = compile vs_2_0 VertexShaderFunction (); PixelShader = compile ps_2_0 PixelShaderFunction(); } \n}\n\n\n"
  },
  {
    "path": "Tests/Assets/Effects/DefinesTest.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nfloat4 VS_Main(float4 position : POSITION0) : SV_Position0\n{\n\treturn float4(1, 2, 3, 4);\n}\n\nfloat4 PS_Main(float4 position : SV_Position) : COLOR0\n{\n\treturn 1;\n}\n\ntechnique\n{\n    pass\n    {\n        VertexShader = compile vs_2_0 VS_Main();\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}\n\n#if defined(INVALID_SYNTAX)\nFoo;\n#endif\n\n#if MACRO_DEFINE_TEST != 3\nBar;\n#endif\n"
  },
  {
    "path": "Tests/Assets/Effects/DirectX.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:DirectX\n/intermediateDir:obj\n/platform:Windows\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n#begin ParserTest.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:ParserTest.fx\n\n#begin Bevels.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:Bevels.fx\n\n#begin BlackOut.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:BlackOut.fx\n\n#begin ColorFlip.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:ColorFlip.fx\n\n#begin Grayscale.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:Grayscale.fx\n\n#begin HighContrast.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:HighContrast.fx\n\n#begin Invert.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:Invert.fx\n\n#begin NoEffect.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:NoEffect.fx\n\n#begin RainbowH.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:RainbowH.fx\n\n#begin Instancing.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:Instancing.fx\n\n#begin VertexTextureEffect.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:VertexTextureEffect.fx\n\n#begin CustomSpriteBatchEffect.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:CustomSpriteBatchEffect.fx\n\n#begin CustomSpriteBatchEffectComparisonSampler.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/processorParam:Defines=\n/build:CustomSpriteBatchEffectComparisonSampler.fx\n\n#begin TextureArrayEffect.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:TextureArrayEffect.fx\n\n#begin OldSyntax_s0s1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_s0s1.fx\n\n#begin OldSyntax_x.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_x.fx\n\n#begin OldSyntax_t0t1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_t0t1.fx\n\n#begin OldSyntax_s0s1t0t1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_s0s1t0t1.fx\n\n#begin NewSyntax_t0t1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:NewSyntax_t0t1.fx\n\n#begin OldSyntax_t1t0.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_t1t0.fx\n\n#begin NewSyntax_s0s1t0t1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:NewSyntax_s0s1t0t1.fx\n\n#begin DeferredBasicEffect.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:DeferredBasicEffect.fx\n\n"
  },
  {
    "path": "Tests/Assets/Effects/Grayscale.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nsampler s0;\n\nfloat4 PixelShaderFunction( float4 inPosition : SV_Position,\n\t\t\t    float4 inColor : COLOR0,\n\t\t\t    float2 coords : TEXCOORD0 ) : COLOR0\n{\n    float4 color = tex2D(s0, coords);\n\tcolor.rgb = color.r;\n\n    return color;\n}\n\ntechnique Technique1\n{\n    pass Pass1\n    {\n        PixelShader = compile ps_2_0 PixelShaderFunction();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/HighContrast.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nsampler s0;\n\nfloat4 PixelShaderFunction( float4 inPosition : SV_Position,\n\t\t\t    float4 inColor : COLOR0,\n\t\t\t    float2 coords : TEXCOORD0 ) : COLOR0\n{\n    float4 color = tex2D(s0, coords);\n\n\tif      (color.r > .65) color.r = 1;\n\telse if (color.r < .35) color.r = 0;\n\n    return color;\n}\n\ntechnique Technique1\n{\n    pass Pass1\n    {\n        PixelShader = compile ps_2_0 PixelShaderFunction();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/Instancing.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nfloat4x4 View;\nfloat4x4 Projection;\n\nstruct VSInput\n{\n    float4 Position : POSITION0;\n    float2 TexCoord : TEXCOORD0;\n};\n\nstruct VSOutput\n{\n    float2 TexCoord : TEXCOORD0;\n    float4 Position : SV_Position;\n};\n\nstruct PSInput\n{\n    float2 TexCoord : TEXCOORD0;\n};\n\nVSOutput VS(VSInput input, float4x4 worldTransposed : BLENDWEIGHT)\n{\n    VSOutput output = (VSOutput)0;\n    \n    float4x4 world = transpose(worldTransposed);\n    float4 positionWorld = mul(input.Position, world);\n    float4 positionView = mul(positionWorld, View);\n    output.Position = mul(positionView, Projection);\n    \n    output.TexCoord = input.TexCoord;\n    \n    return output;\n}\n\nfloat4 PS(PSInput input) : COLOR0\n{\n    return float4(input.TexCoord.xy, 0, 1);\n}\n\ntechnique\n{\n    pass\n    {\n        VertexShader = compile vs_3_0 VS();\n        PixelShader = compile ps_3_0 PS();\n    }\n}\n"
  },
  {
    "path": "Tests/Assets/Effects/Invert.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nsampler s0;\n\nfloat4 PixelShaderFunction( float4 inPosition : SV_Position,\n\t\t\t    float4 inColor : COLOR0,\n\t\t\t    float2 coords : TEXCOORD0 ) : COLOR0\n{\n    float4 color = tex2D(s0, coords);\n\t\n\tif (!any(color)) return color;\n\t\n\tcolor.rgb = 1 - color.rgb;\n\n    return color;\n}\n\ntechnique Technique1\n{\n    pass Pass1\n    {\n        PixelShader = compile ps_2_0 PixelShaderFunction();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/NewSyntax_s0s1t0t1.fx",
    "content": "\nTexture2D Texture0;\nTexture2D Texture1;\n\nsampler Sampler0 = sampler_state\n{\n    MAGFILTER = POINT;\n    MINFILTER = POINT;\n    MIPFILTER = POINT;\n};\n\nsampler Sampler1 = sampler_state\n{\n    MAGFILTER = POINT;\n    MINFILTER = POINT;\n    MIPFILTER = POINT;\n    AddressU = CLAMP;\n    AddressV = CLAMP;\n};\n\nfloat4 PS_Main(float2 uv : TEXCOORD0) : COLOR0\n{\n    return Texture0.Sample(Sampler0, uv) * Texture1.Sample(Sampler1, uv);\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/NewSyntax_t0t1.fx",
    "content": "\nTexture2D Texture0;\nTexture2D Texture1;\n\nsampler Sampler0 = sampler_state\n{\n};\n\nsampler Sampler1 = sampler_state\n{\n};\n\nfloat4 PS_Main(float2 uv : TEXCOORD0) : COLOR0\n{\n    return Texture0.Sample(Sampler0, uv) * Texture1.Sample(Sampler1, uv);\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/NoEffect.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nsampler s0;\n\nfloat4 PixelShaderFunction( float4 inPosition : SV_Position,\n\t\t\t    float4 inColor : COLOR0,\n\t\t\t    float2 coords : TEXCOORD0 ) : COLOR0\n{\n    float4 color = tex2D(s0, coords);\n    return color;\n}\n\ntechnique Technique1\n{\n    pass Pass1\n    {\n        PixelShader = compile ps_2_0 PixelShaderFunction();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/OldSyntax_s0s1.fx",
    "content": "\nsampler2D Sampler0 = sampler_state\n{\n    MAGFILTER = POINT;\n    MINFILTER = POINT;\n    MIPFILTER = POINT;\n};\n\nsampler2D Sampler1 = sampler_state\n{\n    MAGFILTER = POINT;\n    MINFILTER = POINT;\n    MIPFILTER = POINT;\n    AddressU = CLAMP;\n    AddressV = CLAMP;\n};\n\nfloat4 PS_Main(float2 uv : TEXCOORD0) : COLOR0\n{\n    return tex2D(Sampler0, uv) * tex2D(Sampler1, uv);\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/OldSyntax_s0s1t0t1.fx",
    "content": "\nTexture2D Texture0;\nTexture2D Texture1;\n\nsampler2D Sampler0 = sampler_state\n{\n    Texture = (Texture0);\n    MAGFILTER = POINT;\n    MINFILTER = POINT;\n    MIPFILTER = POINT;\n};\n\nsampler2D Sampler1 = sampler_state\n{\n    Texture = (Texture1);\n    MAGFILTER = POINT;\n    MINFILTER = POINT;\n    MIPFILTER = POINT;\n    AddressU = CLAMP;\n    AddressV = CLAMP;\n};\n\nfloat4 PS_Main(float2 uv : TEXCOORD0) : COLOR0\n{\n    return tex2D(Sampler0, uv) * tex2D(Sampler1, uv);\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/OldSyntax_t0t1.fx",
    "content": "\nTexture2D Texture0;\nTexture2D Texture1;\n\nsampler2D Sampler0 = sampler_state\n{\n    Texture = (Texture0);\n};\n\nsampler2D Sampler1 = sampler_state\n{\n    Texture = (Texture1);\n};\n\nfloat4 PS_Main(float2 uv : TEXCOORD0) : COLOR0\n{\n    return tex2D(Sampler0, uv) + tex2D(Sampler1, uv) * 0.5;\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/OldSyntax_t1t0.fx",
    "content": "\nTexture2D Texture0;\nTexture2D Texture1;\n\nsampler2D Sampler0 = sampler_state\n{\n    Texture = (Texture0);\n};\n\nsampler2D Sampler1 = sampler_state\n{\n    Texture = (Texture1);\n};\n\nfloat4 PS_Main(float2 uv : TEXCOORD0) : COLOR0\n{\n    return tex2D(Sampler1, uv) * 0.5 + tex2D(Sampler0, uv);\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/OldSyntax_x.fx",
    "content": "\nsampler2D Sampler0 = sampler_state\n{\n};\n\nsampler2D Sampler1 = sampler_state\n{\n};\n\nfloat4 PS_Main(float2 uv : TEXCOORD0) : COLOR0\n{\n    return tex2D(Sampler0, uv) * tex2D(Sampler1, uv);\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/OpenGL.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:OpenGL\n/intermediateDir:obj\n/platform:DesktopGL\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n#begin Bevels.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:Bevels.fx\n\n#begin BlackOut.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:BlackOut.fx\n\n#begin ColorFlip.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:ColorFlip.fx\n\n#begin CustomSpriteBatchEffect.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:CustomSpriteBatchEffect.fx\n\n#begin Grayscale.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:Grayscale.fx\n\n#begin HighContrast.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:HighContrast.fx\n\n#begin Invert.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:Invert.fx\n\n#begin NoEffect.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:NoEffect.fx\n\n#begin RainbowH.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:RainbowH.fx\n\n#begin OldSyntax_s0s1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_s0s1.fx\n\n#begin OldSyntax_x.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_x.fx\n\n#begin OldSyntax_t0t1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_t0t1.fx\n\n#begin OldSyntax_s0s1t0t1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_s0s1t0t1.fx\n\n#begin NewSyntax_t0t1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:NewSyntax_t0t1.fx\n\n#begin OldSyntax_t1t0.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:OldSyntax_t1t0.fx\n\n#begin NewSyntax_s0s1t0t1.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:NewSyntax_s0s1t0t1.fx\n\n#begin DeferredBasicEffect.fx\n/importer:EffectImporter\n/processor:EffectProcessor\n/processorParam:DebugMode=Auto\n/build:DeferredBasicEffect.fx\n\n"
  },
  {
    "path": "Tests/Assets/Effects/OptimizedMatrix.fx",
    "content": "\nfloat4x4 ColorMatrix =\n{\n    11, 21, 31, 41,\n    12, 22, 32, 42,\n    13, 23, 33, 43,\n    14, 24, 34, 44\n};\n\nfloat4 PS_Main(float4 inPosition : SV_Position,\n               float4 inColor : COLOR0\n              ) : COLOR0\n{    \n    float4 color = inColor;\n    \n    color.r = color.r * ColorMatrix._11;\n    color.g = color.g * ColorMatrix._12;\n    color.b = color.b * ColorMatrix._13;\n    //color.a = color.a * ColorMatrix._14;\n    \n    return color;\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/OptimizedMatrixArray.fx",
    "content": "\nfloat4x4 ColorsMatrix[2] =\n{\n    {\n        11, 21, 31, 41,\n        12, 22, 32, 42,\n        13, 23, 33, 43,\n        14, 24, 34, 44\n    },\n    {\n        111, 121, 131, 141,\n        112, 122, 132, 142,\n        113, 123, 133, 143,\n        114, 124, 134, 144\n    }\n};\n\nfloat4 PS_Main(float4 inPosition : SV_Position,\n               float4 inColor : COLOR0\n              ) : COLOR0\n{    \n    float4 color = inColor;\n    \n    for (int i = 0; i < 2; ++i)\n    {    \n        color.r = color.r * ColorsMatrix[i]._11;\n        color.g = color.g * ColorsMatrix[i]._12;\n        color.b = color.b * ColorsMatrix[i]._13;\n        //color.a = color.a * ColorsMatrix[i]._14;\n    }\n    \n    return color;\n}\n\ntechnique\n{\n    pass\n    {\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/ParserTest.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nuniform float TestFloat;\nuniform float2 TestFloat2;\nuniform float3 TestFloat3;\nuniform float4 TestFloat4;\n\nsampler2D TestSampler2D = sampler_state\n{\n    MipFilter = Linear;\n    MagFilter = Linear;\n    MipFilter = None;\n    BorderColor = 0xFF00FF;\n};\n\nsampler2D TestSampler2D_2 = sampler_state\n{\n    BorderColor = 0xFF00FFFF;\n};\n\nfloat4 VS_Main(float4 position : POSITION0) : SV_Position0\n{\n\treturn float4(1, 2, 3, 4);\n}\n\nfloat4 PS_Main(float4 position : SV_Position) : COLOR0\n{\n\treturn 1;\n}\n\ntechnique Technique1\n{\n    pass Pass0\n    {\n\t\tCullMode = NonE;\n\t\tCullMode = Ccw;\n\t\tCullMode = cw;\n\t\tCullMode = cW;\n\n\t\tColorWriteEnable = true;\n\t\tColorWriteEnable = false;\n\t\tColorWriteEnable = All;\n\t\tColorWriteEnable = None;\n\t\tColorWriteEnable = Red|Green;\n\t\tColorWriteEnable = Red|Green|Blue;\n\t\tColorWriteEnable = Red|Green|Blue|Alpha;\n\n\t\tZEnable = false;\n\t\tZEnable = true;\n\n\t\tZWriteEnable = FALSE;\n\t\tZWriteEnable = TRUE;\n\n        VertexShader = compile vs_2_0 VS_Main();\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}\n\ntechnique\n{\n    pass\n    {\n        VertexShader = compile vs_2_0 VS_Main();\n        PixelShader = compile ps_2_0 PS_Main();\n    }\n}\n\n\n"
  },
  {
    "path": "Tests/Assets/Effects/PreprocessorInclude.fxh",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n#if __KNIFX__\n\n#define PS_PROFILE ps_4_0_level_9_1\n#define VS_PROFILE vs_4_0_level_9_1\n\n#else\n\n#define PS_PROFILE ps_2_0\n#define VS_PROFILE vs_2_0\n\n#endif\nint a; // Something on final line"
  },
  {
    "path": "Tests/Assets/Effects/PreprocessorTest.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n#include \"PreprocessorInclude.fxh\"\n\n#define TEST 1\n\n/*\nThis is a C style comment.\n*/\n\n#if foo(TEST) // TODO: This should trigger a warning at position 13:4, but it's currently reported at 9:4.\n\n#endif\n\n#if TEST == 0\nint Foo;\n#elif TEST == 1\nint Bar;\n#else\nint Baz;\n#endif\n\n#if defined(TEST2)\nFOO\n#elif defined(TEST3)\nBAR\n#endif\n\nfloat4 VS_Main(float4 position : POSITION0) : SV_Position0\n{\n\treturn float4(1, 2, 3, 4);\n}\n\nfloat4 PS_Main(float4 position : SV_Position) : COLOR0\n{\n\treturn 1;\n}\n\ntechnique\n{\n\tpass\n\t{\n\t\tVertexShader = compile VS_PROFILE VS_Main();\n\t\tPixelShader = compile PS_PROFILE PS_Main();\n\t}\n}"
  },
  {
    "path": "Tests/Assets/Effects/README.txt",
    "content": "For XNA effects can be compiled using the .csproj in this folder.\nSimply build the csproj using MSBuild to compile the effects using\nXNA's content importer and processor. To add an effect, just\ncopy-paste an existing entry and replace the effect path and name.\n\nFor DirectX and OpenGL use the pipeline tool to build the effects.\n\n"
  },
  {
    "path": "Tests/Assets/Effects/RainbowH.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nsampler s0;\n\nfloat4 red    = float4(1,0,0,1);\nfloat4 orange = float4(1,.5,0,1);\nfloat4 yellow = float4(1,1,0,1);\nfloat4 green  = float4(0,1,0,1);\nfloat4 blue   = float4(0,0,1,1);\nfloat4 indigo = float4(.3,0,.8,1);\nfloat4 violet = float4(1,.8,1,1);\n\nfloat step = 1.0/7;\n\nfloat4 PixelShaderFunction( float4 inPosition : SV_Position,\n\t\t\t    float4 inColor : COLOR0,\n\t\t\t    float2 coords : TEXCOORD0 ) : COLOR0\n{\n    float4 color = tex2D(s0, coords);\n\n\tif (!any(color)) return color;\n\n\tif      (coords.x < (step * 1)) color = red;\n\telse if (coords.x < (step * 2)) color = orange;\n\telse if (coords.x < (step * 3)) color = yellow;\n\telse if (coords.x < (step * 4)) color = green;\n\telse if (coords.x < (step * 5)) color = blue;\n\telse if (coords.x < (step * 6)) color = indigo;\n\telse                            color = violet;\n\n    return color;\n}\n\ntechnique Technique1\n{\n    pass Pass1\n    {\n        PixelShader = compile ps_2_0 PixelShaderFunction();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/TextureArrayEffect.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nmatrix WorldViewProj;\n\nTexture2DArray Texture : register(t0);\nSamplerState TextureSampler : register(s0);\n\nstruct VSOutput\n{\n    float4 PositionPS : SV_Position;\n    float2 TexCoord : TEXCOORD0;\n};\n\nstruct PSInput\n{\n    float4 PositionSS : SV_Position;\n    float2 TexCoord : TEXCOORD0;\n};\n\nVSOutput VS_Main(uint VertexID : SV_VertexID)\n{\n    VSOutput output;\n    output.TexCoord = float2((VertexID << 1) & 2, VertexID & 2);\n    output.PositionPS = float4(output.TexCoord * float2(2.0, -2.0) + float2(-1.0, 1.0), 0.0f, 1.0f);\n    return output;\n}\n\nfloat4 PS_Main(PSInput input) : COLOR0\n{\n    return Texture.Sample(TextureSampler, float3(input.TexCoord, (uint) input.PositionSS.x % 4));\n}\n\ntechnique\n{\n    pass\n    {\n        VertexShader = compile vs_4_0 VS_Main();\n        PixelShader = compile ps_4_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/VertexTextureEffect.fx",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nmatrix WorldViewProj;\n\nfloat HeightMapSize;\n\nTexture2D HeightMapTexture;\nsampler2D HeightMapSampler = sampler_state\n{\n    Texture = (HeightMapTexture);\n    MinFilter = POINT;\n    MagFilter = POINT;\n    MipFilter = NONE;\n};\n\nstruct VSOutput\n{\n    float4 PositionPS : SV_Position;\n    float4 Color : COLOR0;\n};\n\nVSOutput VS_Main(float2 xy : POSITION)\n{\n    float height = tex2Dlod(HeightMapSampler, float4((xy + float2(0.5, 0.5)) / HeightMapSize, 0, 0)).r;\n    float3 worldPosition = float3(xy.x, height, xy.y);\n\n    VSOutput output;\n    output.PositionPS = mul(float4(worldPosition, 1), WorldViewProj);\n    output.Color = float4(xy.x / HeightMapSize, xy.y / HeightMapSize, 0, 1);\n\n    return output;\n}\n\nfloat4 PS_Main(VSOutput input) : COLOR0\n{\n    return input.Color;\n}\n\n#define VS_PROFILE vs_3_0\n#define PS_PROFILE ps_3_0\n\ntechnique\n{\n    pass\n    {\n        VertexShader = compile vs_3_0 VS_Main();\n        PixelShader = compile ps_3_0 PS_Main();\n    }\n}"
  },
  {
    "path": "Tests/Assets/Effects/XNA.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\n  <PropertyGroup>\n    <XnaInstall>C:\\Program Files (x86)\\MSBuild\\Microsoft\\XNA Game Studio\\v4.0</XnaInstall>\n  </PropertyGroup>\n  <PropertyGroup>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <XnaFrameworkVersion>v4.0</XnaFrameworkVersion>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <XnaPlatform>Windows</XnaPlatform>\n    <XnaProfile>HiDef</XnaProfile>\n  </PropertyGroup>\n\n  <!-- You can change the ouput path here, note that the project name will be prepended. -->\n  <PropertyGroup>\n    <OutputPath>.</OutputPath>\n  </PropertyGroup>\n\n  <!-- Needed importers should be referenced here -->\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.EffectImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Bevels.fx\">\n      <Name>Bevels</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"ColorFlip.fx\">\n      <Name>ColorFlip</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"HighContrast.fx\">\n      <Name>HighContrast</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"NoEffect.fx\">\n      <Name>NoEffect</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"OldSyntax_s0s1.fx\">\n      <Name>OldSyntax_s0s1</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"OldSyntax_t0t1.fx\">\n      <Name>OldSyntax_t0t1</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"OldSyntax_t1t0.fx\">\n      <Name>OldSyntax_t1t0</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\t  \n    <Compile Include=\"OldSyntax_s0s1t0t1.fx\">\n      <Name>OldSyntax_s0s1t0t1</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"OldSyntax_x.fx\">\n      <Name>OldSyntax_x</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"DeferredBasicEffect.fx\">\n      <Name>DeferredBasicEffect</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"BlackOut.fx\">\n      <Name>BlackOut</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"Grayscale.fx\">\n      <Name>Grayscale</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"Invert.fx\">\n      <Name>Invert</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n    <Compile Include=\"RainbowH.fx\">\n      <Name>RainbowH</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n\n    <Compile Include=\"CustomSpriteBatchEffect.fx\">\n      <Name>CustomSpriteBatchEffect</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n\n    <Compile Include=\"Instancing.fx\">\n      <Name>Instancing</Name>\n      <Importer>EffectImporter</Importer>\n      <Processor>EffectProcessor</Processor>\n    </Compile>\n\n  </ItemGroup>\n\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\XNA Game Studio\\$(XnaFrameworkVersion)\\Microsoft.Xna.GameStudio.ContentPipeline.targets\" />\n</Project>\n"
  },
  {
    "path": "Tests/Assets/Effects/XNA.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"XNA\", \"XNA.csproj\", \"{9AF192DD-E63A-48C6-9E1B-6BED51EDD830}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x86 = Debug|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9AF192DD-E63A-48C6-9E1B-6BED51EDD830}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9AF192DD-E63A-48C6-9E1B-6BED51EDD830}.Debug|x86.Build.0 = Debug|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Tests/Assets/Fonts/JingJing.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Jing Jing</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>20</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>0</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#126;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Fonts/Lindsey.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Lindsey</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>24</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>4</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#126;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Fonts/Localized.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:LocalizedFontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Arial</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>10</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>2</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#32;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n    <ResourceFiles>\n      <Resx>Assets\\Fonts\\Strings.resx</Resx>\n    </ResourceFiles>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Fonts/Motorwerk.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Motorwerk</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>26</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>0</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#126;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Fonts/QuartzMS.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Quartz MS</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>22</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>1</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#126;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Fonts/SegoeKeycaps.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Segoe Keycaps</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>10</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>2</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#126;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Fonts/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>blazing KNI!</value>\n  </data>\n</root>"
  },
  {
    "path": "Tests/Assets/Models/Dude/dude.fbx",
    "content": "; FBX 6.1.0 project file\n; Copyright (C) 1997-2006 Autodesk Inc. and/or its licensors.\n; All rights reserved.\n; ----------------------------------------------------\n\nFBXHeaderExtension:  {\n    FBXHeaderVersion: 1003\n    FBXVersion: 6100\n    CreationTimeStamp:  {\n        Version: 1000\n        Year: 2007\n        Month: 2\n        Day: 6\n        Hour: 10\n        Minute: 56\n        Second: 19\n        Millisecond: 829\n    }\n    Creator: \"FBX SDK/FBX Plugins build 20061115\"\n    OtherFlags:  {\n        FlagPLE: 0\n    }\n}\nCreationTime: \"2007-02-06 10:56:19:829\"\nCreator: \"FBX SDK/FBX Plugins build 20061115\"\n\n; Object definitions\n;------------------------------------------------------------------\n\nDefinitions:  {\n    Version: 100\n    Count: 163\n    ObjectType: \"Model\" {\n        Count: 67\n    }\n    ObjectType: \"Geometry\" {\n        Count: 1\n    }\n    ObjectType: \"Material\" {\n        Count: 5\n    }\n    ObjectType: \"Texture\" {\n        Count: 15\n    }\n    ObjectType: \"Video\" {\n        Count: 15\n    }\n    ObjectType: \"Deformer\" {\n        Count: 59\n    }\n    ObjectType: \"Pose\" {\n        Count: 1\n    }\n    ObjectType: \"GlobalSettings\" {\n        Count: 1\n    }\n}\n\n; Object properties\n;------------------------------------------------------------------\n\nObjects:  {\n    Model: \"Model::Camera_Switcher\", \"CameraSwitcher\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",0\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",0\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",0\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0,0,0\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Camera Index\", \"Integer\", \"A+\",100\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Hidden: \"True\"\n        Shading: W\n        Culling: \"CullingOff\"\n        Version: 101\n        Name: \"Model::Camera Switcher\"\n        CameraId: 0\n        CameraName: 100\n        CameraIndexName: \n    }\n    Model: \"Model::Root\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-89.9999999904458\n            Property: \"PreferedAngleY\", \"double\", \"\",-89.9999237060538\n            Property: \"PreferedAngleZ\", \"double\", \"\",-2.38855595932071e-009\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0.0375633835792542,37.4609870910645,2.230548620224\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-90,-89.9999237060547,-2.38855601963905e-009\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::Pelvis\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-89.9999182889514\n            Property: \"PreferedAngleY\", \"double\", \"\",-90\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",-0.77721095085144,1.13318836688995,0.656980156898499\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",39.7229881286621,-93.1371078491211,42.0879821777344\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::Spine\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-0.00023030408276738\n            Property: \"PreferedAngleY\", \"double\", \"\",-8.60479869898838e-005\n            Property: \"PreferedAngleZ\", \"double\", \"\",-5.4382885776673\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",3.78600597381592,-0.00359981134533882,5.10731069880421e-006\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-0.00023030408192426,-8.60479849507101e-005,-5.43828868865967\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::Spine1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-1.29875981134163e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",1.85383892660238e-005\n            Property: \"PreferedAngleZ\", \"double\", \"\",-5.82215760016407\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.54331636428833,-0.00359953427687287,-1.3350340566376e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",2.96879076957703,-0.549681961536407,-5.84038019180298\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::Spine2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-1.3371636415931e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-1.36830001373602e-005\n            Property: \"PreferedAngleZ\", \"double\", \"\",5.69767308131356\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.54404973983765,-0.00359953194856644,6.19496276499376e-008\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",2.77687907218933,1.67002356052399,5.42585277557373\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,0.999999940395355,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::Spine3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",3.99052131175995\n            Property: \"PreferedAngleY\", \"double\", \"\",-1.53253420069814\n            Property: \"PreferedAngleZ\", \"double\", \"\",1.57506291940808\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.5439600944519,-0.00439895549789071,2.22052122467176e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",2.87556838989258,1.50368475914001,3.25706577301025\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1.00000011920929,1.00000011920929,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::Neck\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-1.42603327943234e-005\n            Property: \"PreferedAngleY\", \"double\", \"\",-6.31973890607551e-005\n            Property: \"PreferedAngleZ\", \"double\", \"\",23.7369222277942\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",5.53625154495239,-0.00288246641866863,5.17475982064752e-008\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-6.63933753967285,1.94592773914337,28.7092266082764\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,0.999999940395355,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::Head\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-1.80670942133362e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",2.70945409552123e-005\n            Property: \"PreferedAngleZ\", \"double\", \"\",-11.0992757151363\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",3.95389556884766,1.09085840449552e-006,9.73389049363504e-008\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",1.423987865448,-0.918177843093872,-18.9311122894287\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1.00000011920929,1.00000011920929,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_eye_joint1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",90.0000000000006,-87.3750626410931,-90.0000000000003\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.22069501876831,1.4060525894165,1.39484596252441\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",3.26757836341858,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_eye_joint\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",90.0000000000006,-87.3750626410931,-90.0000000000003\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.29626369476318,1.33319282531738,-1.0660924911499\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",3.26757836341858,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_eyeBall_joint2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-3.26721592629767\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.48259973526001,3.2479395866394,1.27459120750427\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",1.07939505577087,0,0.00536951329559088\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_eyeBall_joint\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",2.2266900494759\n            Property: \"PreferedAngleY\", \"double\", \"\",0.205056910357676\n            Property: \"PreferedAngleZ\", \"double\", \"\",0.964814224310023\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.57700967788696,3.10706281661987,-1.20767879486084\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0.292065471410751,0.0640802830457687,0.30150443315506\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Clavicle\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-0.000872600236291507\n            Property: \"PreferedAngleY\", \"double\", \"\",-80.3013114262034\n            Property: \"PreferedAngleZ\", \"double\", \"\",156.218311991058\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",-0.307961851358414,-0.770594537258148,1.2232973575592\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-0.000872600241564214,-80.3013076782227,156.218307495117\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_UpperArm\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-1.39497982725312\n            Property: \"PreferedAngleY\", \"double\", \"\",36.3728195804967\n            Property: \"PreferedAngleZ\", \"double\", \"\",-4.78353474107178\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",6.71029043197632,0.844819128513336,0.0320546366274357\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",9.80766296386719,60.3215827941895,41.7058372497559\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Forearm\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-3.76045443581529e-007\n            Property: \"PreferedAngleY\", \"double\", \"\",-3.86569406254761e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",-11.4591582981105\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",13.1421842575073,-1.00144292858317e-009,-3.49096410445782e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",33.6098442077637,17.2327537536621,-13.2919816970825\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Hand\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-74.7089589483892\n            Property: \"PreferedAngleY\", \"double\", \"\",10.2784385710031\n            Property: \"PreferedAngleZ\", \"double\", \"\",2.78414734150109\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",10.8255519866943,5.22714969974913e-007,9.90214175544679e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-82.1016998291016,2.46786618232727,3.1264545917511\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Thumb1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",128.393568534218\n            Property: \"PreferedAngleY\", \"double\", \"\",47.8535790896764\n            Property: \"PreferedAngleZ\", \"double\", \"\",34.2815344649445\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.62510848045349,0.626630425453186,-1.67875993251801\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",119.229835510254,30.9591827392578,19.9485893249512\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Thumb2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",2.8803815967782e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",8.18135633512738e-007\n            Property: \"PreferedAngleZ\", \"double\", \"\",7.98321386697265\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.1404322385788,2.85936584987212e-006,-1.81425923528877e-006\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",2.84072734757501e-006,-3.12636920796194e-008,17.8534507751465\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Thumb3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-6.67931703646524e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-4.97463347454225e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",-1.12265664696339\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.38246870040894,-7.17560169505305e-007,3.67166808246111e-006\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-7.58698934077984e-006,-3.2017899229686e-006,8.96595764160156\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1.00000011920929\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Index1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",11.7792021726967\n            Property: \"PreferedAngleY\", \"double\", \"\",4.75915906885796\n            Property: \"PreferedAngleZ\", \"double\", \"\",1.51887475710425\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.34874391555786,0.0162533205002546,-1.56133377552032\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",12.0142822265625,1.66459441184998,3.92592287063599\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Index2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",1.0101348006507e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-3.20933633655466e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",10.2647182459575\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.47369563579559,9.02053685081228e-008,5.82350480726745e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",7.5388690845557e-008,-3.20740196002589e-006,15.1926651000977\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Index3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-7.97497089828841e-007\n            Property: \"PreferedAngleY\", \"double\", \"\",7.67177259619785e-007\n            Property: \"PreferedAngleZ\", \"double\", \"\",-6.41338018883955e-008\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.06284534931183,1.39810509836025e-007,2.21882010009722e-006\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-7.97497079929599e-007,7.67177255056595e-007,-6.41338004925274e-008\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Middle1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",1.09189139401105\n            Property: \"PreferedAngleY\", \"double\", \"\",-5.64785295314554\n            Property: \"PreferedAngleZ\", \"double\", \"\",-1.21502703506741\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.35998678207397,-0.000294537370791659,-0.366859555244446\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",1.96983647346497,1.10134339332581,14.2388792037964\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Middle2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-1.61159378098832e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",4.23584160161545e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",5.06606087060092\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.52912437915802,7.80884704454365e-007,-3.64346448122888e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",7.24273192531655e-008,4.3645964069583e-006,16.150936126709\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Middle3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",3.09046105578622e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-2.70938072856318e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",3.80611905636409\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.52912795543671,7.2803447892511e-007,6.76120862408425e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",3.09046095026133e-006,-2.7093806238554e-006,3.80611896514893\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Ring1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-8.32501905474155\n            Property: \"PreferedAngleY\", \"double\", \"\",-15.1597389826992\n            Property: \"PreferedAngleZ\", \"double\", \"\",0.496591029077497\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.29501485824585,-0.0947425812482834,0.806466221809387\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-8.98741436004639,-1.27314984798431,19.2985076904297\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,0.999999940395355,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Ring2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",2.17552682211658e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",1.24628739924695e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",12.8944029645258\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.40333545207977,1.16687704121432e-006,-2.30216258501059e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",2.20680271922902e-006,-3.11167731581463e-008,25.5660648345947\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1.00000011920929,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Ring3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",6.3264375956501e-007\n            Property: \"PreferedAngleY\", \"double\", \"\",-2.06977911624494e-007\n            Property: \"PreferedAngleZ\", \"double\", \"\",-5.6513995325555e-007\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.38826143741608,2.13072965493666e-007,-2.23952710598496e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,9.02113819122314\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Pinky1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-22.2106470375889\n            Property: \"PreferedAngleY\", \"double\", \"\",-21.9198516462821\n            Property: \"PreferedAngleZ\", \"double\", \"\",10.231888820637\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",3.97267842292786,0.223487868905067,1.74283754825592\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-20.6544322967529,-0.819446563720703,22.4568309783936\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Pinky2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",8.45328125392068e-008\n            Property: \"PreferedAngleY\", \"double\", \"\",3.2706221696275e-007\n            Property: \"PreferedAngleZ\", \"double\", \"\",6.57202492051798e-007\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.13179302215576,-2.16195689972665e-006,-4.03594668796359e-008\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Pinky3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-2.659446426981e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",2.5977229425773e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",3.8703228612241\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0.858954668045044,6.74906289077626e-007,5.44045349215594e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-2.65944640887028e-006,2.59772286881343e-006,3.87032294273376\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,0.999999940395355,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Clavicle\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-0.000867775408281365\n            Property: \"PreferedAngleY\", \"double\", \"\",80.301183832827\n            Property: \"PreferedAngleZ\", \"double\", \"\",156.216597244916\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",-0.307961821556091,-0.770587801933289,-1.22330164909363\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-0.000867775408551097,80.3011856079102,156.216598510742\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_UpperArm\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",1.39497769642051\n            Property: \"PreferedAngleY\", \"double\", \"\",-36.3728176590539\n            Property: \"PreferedAngleZ\", \"double\", \"\",-4.78354389051472\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",6.88650560379028,-1.05879163742065,0.188849896192551\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",42.592903137207,-47.3313064575195,-50.2629508972168\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1.00000011920929,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Forearm\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-6.59389332229243e-007\n            Property: \"PreferedAngleY\", \"double\", \"\",5.71812264881479e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",-11.4591561379041\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",13.1421842575073,9.03095610738092e-007,3.16086266138882e-006\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-31.568567276001,-28.5609245300293,-47.7509155273438\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,0.99999988079071,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Hand\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",74.7089619068957\n            Property: \"PreferedAngleY\", \"double\", \"\",-10.2784422770857\n            Property: \"PreferedAngleZ\", \"double\", \"\",2.78414911050139\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",10.8255529403687,4.45484261035745e-007,-7.54761458665598e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",71.1884765625,10.1721467971802,-14.7731218338013\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Thumb1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-128.393572194366\n            Property: \"PreferedAngleY\", \"double\", \"\",-47.853581034479\n            Property: \"PreferedAngleZ\", \"double\", \"\",34.2815348083318\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.62510800361633,0.626631021499634,1.67876040935516\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-129.154998779297,-42.0322799682617,34.3628196716309\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,0.999999940395355,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Thumb2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",3.88347917343395e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-1.97078280763548e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",7.98321879290525\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.14043200016022,-1.38291397888679e-006,7.55724443024519e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",2.74146850642865e-006,-3.38374729835778e-006,32.0624504089355\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Thumb3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-7.46143268686555e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",2.29402027731357e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",-1.12266273488597\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.38246870040894,3.77754112435014e-008,-3.12997121909575e-006\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-7.38412791179144e-006,2.46886565946625e-006,2.01478266716003\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Index1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-11.7792032350658\n            Property: \"PreferedAngleY\", \"double\", \"\",-4.75915740397456\n            Property: \"PreferedAngleZ\", \"double\", \"\",1.51887260858435\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.34874391555786,0.0162522289901972,1.56133341789246\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-11.8456792831421,-2.26736164093018,0.35604390501976\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Index2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",3.27682771579138e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",2.52179167280701e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",10.2647245704775\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.47369468212128,-3.31795149577374e-006,3.01659298429513e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",3.5970981571154e-006,2.03909712581662e-006,18.2982807159424\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Index3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",5.68755212474489e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",2.55623109709803e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",1.61946557729347e-006\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.0628467798233,-7.71003385580116e-008,-3.79914951054161e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",6.12122676102445e-006,1.18875880161795e-006,13.211012840271\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Middle1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-1.09189337444105\n            Property: \"PreferedAngleY\", \"double\", \"\",5.64785242253659\n            Property: \"PreferedAngleZ\", \"double\", \"\",-1.21502939388877\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.35998678207397,-0.000293526856694371,0.366859257221222\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-1.12324810028076,-1.13205850124359,1.1130610704422\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Middle2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",3.91460541234184e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-2.17455420940842e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",5.06606374698867\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.52912306785584,-3.33934121954371e-006,2.41871944695049e-009\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",3.29875911120325e-006,-3.02836747323454e-006,18.566930770874\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Middle3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-4.89582237110179e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-2.26155480670848e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",3.80612416233277\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.529128074646,-1.97209737962112e-006,-3.19399333648107e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-5.25195036971127e-006,-6.89941970222208e-008,3.59999227523804\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Ring1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",8.32501542851292\n            Property: \"PreferedAngleY\", \"double\", \"\",15.1597406151334\n            Property: \"PreferedAngleZ\", \"double\", \"\",0.496593364447639\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4.29501342773438,-0.0947411805391312,-0.806465566158295\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",9.92037773132324,6.50482177734375,12.5329875946045\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Ring2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",4.74502253458847e-007\n            Property: \"PreferedAngleY\", \"double\", \"\",-1.57078862698148e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",12.8944025426958\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.40333533287048,3.56238683707488e-006,8.68510085183516e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-8.52487929137169e-008,-1.5643117876607e-006,27.2881908416748\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Ring3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",1.74365380799692e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",4.92222297413111e-007\n            Property: \"PreferedAngleZ\", \"double\", \"\",-1.86127542097727e-006\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.38826143741608,-2.60250772043946e-007,1.2035725660553e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",1.73695445937483e-006,-8.55293436075044e-009,13.044979095459\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Pinky1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",22.2106452758657\n            Property: \"PreferedAngleY\", \"double\", \"\",21.9198533236593\n            Property: \"PreferedAngleZ\", \"double\", \"\",10.2318915977067\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",3.97267866134644,0.223486974835396,-1.74283790588379\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",24.3684997558594,5.07718563079834,23.8567218780518\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Pinky2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",1.3099773394975e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-1.5017060650038e-007\n            Property: \"PreferedAngleZ\", \"double\", \"\",3.9733668460521e-006\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",1.13179266452789,-4.5721540118393e-006,-2.5465004682701e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",1.28670376398077e-006,2.94697493075091e-008,21.8681793212891\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Pinky3\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",4.46392401207693e-007\n            Property: \"PreferedAngleY\", \"double\", \"\",1.49685980438668e-008\n            Property: \"PreferedAngleZ\", \"double\", \"\",3.87032088256291\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0.858952879905701,-2.68376516032731e-006,3.09315595359294e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,5.75897359848022\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Thigh1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",169.508247139113\n            Property: \"PreferedAngleY\", \"double\", \"\",-12.1801615973901\n            Property: \"PreferedAngleZ\", \"double\", \"\",-178.43746737346\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",-3.76930594444275,-0.355237752199173,3.4951446056366\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-14.2042036056519,-164.144622802734,-29.484790802002\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Knee2\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",6.26299260320172e-007\n            Property: \"PreferedAngleY\", \"double\", \"\",-6.93163629204283e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",-19.1493676500597\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",18.257194519043,-6.12689859735838e-007,1.20223648991669e-006\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",9.30474472045898,-0.54519647359848,-24.0315208435059\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Ankle1\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",-2.97471392034351\n            Property: \"PreferedAngleY\", \"double\", \"\",-11.0525243817621\n            Property: \"PreferedAngleZ\", \"double\", \"\",9.40468519858122\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",15.4280042648315,-1.32429221366692e-007,3.40772317031224e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-4.13260126113892,-1.2486013174057,7.7121057510376\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,0.999999940395355,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::L_Ball\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",5.08524009745423e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",-3.36317562607059e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",104.594670846427\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",5.25022077560425,6.27384853363037,-7.13063798229996e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",5.08523999087629e-006,-3.36317566507205e-006,104.594673156738\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1.00000011920929,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Thigh\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",10.4914172002596\n            Property: \"PreferedAngleY\", \"double\", \"\",167.819835977802\n            Property: \"PreferedAngleZ\", \"double\", \"\",1.56246131877261\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",-3.76930618286133,-0.355218410491943,-3.49514603614807\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",8.09784317016602,184.387466430664,0.917054355144501\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Knee\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",1.31859940773703e-007\n            Property: \"PreferedAngleY\", \"double\", \"\",-1.18581000243473e-006\n            Property: \"PreferedAngleZ\", \"double\", \"\",-19.1493656223787\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",18.257194519043,-1.20693221106194e-006,-1.28146643874061e-006\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",-1.3035603761673,-4.911376953125,-31.2710037231445\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Ankle\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",2.97472568209434\n            Property: \"PreferedAngleY\", \"double\", \"\",11.0525220726222\n            Property: \"PreferedAngleZ\", \"double\", \"\",9.40468503315529\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",15.4280042648315,1.89655921190024e-007,5.16880504619621e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",4.14072751998901,1.20476734638214,25.1047039031982\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",0.999999940395355,0.999999940395355,0.999999940395355\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::R_Ball\", \"LimbNode\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",2.16954839938349e-006\n            Property: \"PreferedAngleY\", \"double\", \"\",9.48114901020568e-008\n            Property: \"PreferedAngleZ\", \"double\", \"\",104.594670599531\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",5.25022077560425,6.27385330200195,-4.15015392718487e-007\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",1.04748585272318e-006,-3.46426012876044e-011,104.594665527344\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1.00000011920929,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"liw\", \"Bool\", \"A+U\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Size\", \"double\", \"\",100\n            Property: \"LimbLength\", \"double\", \"\",1\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Skeleton\"\n    }\n    Model: \"Model::him\", \"Mesh\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",1\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",1\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",1\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0,0,0\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",1\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n        }\n        MultiLayer: 0\n        MultiTake: 1\n        Shading: T\n        Culling: \"CullingOff\"\n        Vertices: 0.623793363571167,65.1128845214844,5.13387632369995,0.0422774255275726,64.9956970214844,5.01735305786133,-0.0264466553926468\n        ,64.9082183837891,5.00032997131348,-0.179756164550781,64.7790222167969,4.91852188110352,0.325537592172623,65.1139144897461\n        ,5.11669683456421,0.466457337141037,65.1115264892578,5.12619018554688,-0.251792371273041,64.6404418945313,4.83475875854492\n        ,1.17611312866211,64.9081497192383,4.99786615371704,1.229975938797,64.8112030029297,4.97873592376709,1.35875833034515\n        ,64.6602325439453,4.89207983016968,0.917911291122437,65.0681762695313,5.1065149307251,0.781586170196533,65.1051177978516\n        ,5.03205871582031,1.09732794761658,65.0128784179688,5.03322553634644,0.137362271547318,65.0869979858398,5.04972410202026\n        ,0.0620876252651215,64.8320541381836,4.96379709243774,0.140958309173584,64.8800735473633,4.98378229141235,-0.0571245849132538\n        ,64.7189102172852,4.92748022079468,0.228947132825851,64.8898010253906,5.00581216812134,0.316976398229599,64.8996047973633\n        ,5.02985382080078,0.452559441328049,64.906867980957,5.01395797729492,0.600856900215149,64.8984298706055,5.04465341567993\n        ,1.12346565723419,64.7505950927734,4.94624662399292,1.05264699459076,64.8100967407227,4.96849727630615,0.966790914535522\n        ,64.8332214355469,4.99361562728882,0.880976319313049,64.8564453125,5.02073812484741,0.747775435447693,64.8827056884766\n        ,5.01342105865479,0.0452732741832733,64.6292190551758,4.89672803878784,0.122229993343353,64.6522216796875,4.91772842407227\n        ,0.209659367799759,64.6546325683594,4.94005537033081,0.297129482030869,64.6571273803711,4.9643931388855,0.432055622339249\n        ,64.6558151245117,4.94884538650513,0.58029317855835,64.6465911865234,4.97957277297974,1.10663449764252,64.5475311279297\n        ,4.87918663024902,1.03390467166901,64.5820541381836,4.9024510383606,1.40576934814453,64.512451171875,4.80627107620239\n        ,0.947489738464355,64.5978851318359,4.92786550521851,0.861116051673889,64.6138000488281,4.9552845954895,0.727327466011047\n        ,64.6323776245117,4.94827938079834,1.01195073127747,64.3154525756836,4.82282686233521,1.45188724994659,64.3472137451172\n        ,4.66289949417114,0.925535917282104,64.3312759399414,4.84824132919312,0.839162230491638,64.3471908569336,4.87565994262695\n        ,0.705373644828796,64.3657684326172,4.86865520477295,-0.177379310131073,64.5866241455078,4.86361455917358,0.0233194231987\n        ,64.3626098632813,4.81710386276245,0.100276112556458,64.385612487793,4.83810424804688,-0.327593684196472,64.4846115112305\n        ,4.69348287582397,0.187705457210541,64.3880233764648,4.86043071746826,0.275175601243973,64.3905181884766,4.88476848602295\n        ,0.410101801156998,64.3892059326172,4.86922121047974,0.558339357376099,64.3799819946289,4.89994859695435,1.08468067646027\n        ,64.2809219360352,4.79956245422363,1.06065464019775,70.8534545898438,4.76268863677979,1.13732481002808,72.418815612793\n        ,2.19126605987549,1.13400912284851,72.1023101806641,3.42027258872986,1.12417089939117,71.8792266845703,3.85004806518555\n        ,0.62932276725769,65.1465225219727,5.30447387695313,0.625903844833374,65.0976638793945,5.32506656646729,0.615944027900696\n        ,64.9603424072266,5.36244630813599,0.610984563827515,64.8877182006836,5.40017414093018,0.630598306655884,65.1751098632813\n        ,5.25026416778564,0.629361748695374,65.1725463867188,5.18983459472656,0.512664914131165,63.6718902587891,5.14163732528687\n        ,0.529050230979919,63.8910675048828,5.11033630371094,0.541939496994019,64.0722885131836,5.04615640640259,0.43946561217308\n        ,62.9340286254883,4.19746780395508,0.485344499349594,63.3730735778809,4.89445734024048,0.462659686803818,63.1349334716797\n        ,4.64441919326782,0.555222749710083,64.2537155151367,5.00397300720215,0.880172610282898,68.3598251342773,5.46416473388672\n        ,0.858006715774536,68.0974426269531,5.35318899154663,0.849440932273865,67.9892425537109,5.34090089797974,0.904710054397583\n        ,68.6925506591797,5.39708185195923,0.709403038024902,66.0338897705078,5.97735166549683,0.705547690391541,65.9931945800781\n        ,5.93586921691895,0.743143796920776,66.4381942749023,6.1241774559021,0.753129124641418,66.5676574707031,6.12357091903687\n        ,0.760891556739807,66.6766815185547,6.08543300628662,0.733507633209229,66.3163452148438,6.11094665527344,0.689875245094299\n        ,65.8638381958008,5.60512256622314,0.624589085578918,65.1533660888672,4.99830102920532,0.62416410446167,65.1353530883789\n        ,5.05449390411377,0.624347448348999,65.1218795776367,5.12571716308594,0.638351678848267,65.2610092163086,5.3154878616333\n        ,0.634988903999329,65.2251205444336,5.28104448318481,0.631260514259338,65.1875839233398,5.23275852203369,0.798808693885803\n        ,67.2536087036133,5.69974708557129,0.791501402854919,67.1474075317383,5.75169134140015,0.781278014183044,66.9964904785156\n        ,5.83483648300171,0.590098738670349,64.6425552368164,5.28635549545288,0.601859569549561,64.7733993530273,5.38283586502075\n        ,0.571767449378967,64.4464263916016,5.10084295272827,0.664491891860962,65.6135482788086,5.25263929367065,0.646058797836304\n        ,65.3668518066406,5.2884316444397,0.308831185102463,61.5862121582031,2.65170550346375,0.278255134820938,61.2063217163086\n        ,2.57932591438293,0.24938228726387,60.845588684082,2.51997470855713,0.433875113725662,62.9745635986328,3.69008111953735\n        ,0.444906324148178,63.2859725952148,2.93291902542114,0.433557480573654,63.1402702331543,2.927166223526,0.810639500617981\n        ,67.4434204101563,5.53539562225342,0.770475149154663,66.8228073120117,5.98658132553101,0.680776953697205,65.8014297485352\n        ,5.35610294342041,0.67123281955719,65.692626953125,5.28961133956909,1.0142970085144,70.1763305664063,5.10739469528198\n        ,0.984624624252319,69.7768020629883,5.1758246421814,0.445801049470901,63.2715072631836,3.04997110366821,0.438935846090317\n        ,63.0870819091797,3.47903776168823,0.373842626810074,62.3733596801758,2.89807319641113,0.341937512159348,61.9855003356934\n        ,2.78416061401367,0.400814205408096,62.7189445495605,2.91482043266296,1.0299117565155,70.3926239013672,5.04423379898071\n        ,0.634009838104248,65.2811813354492,4.97222805023193,0.627241492271423,65.1924057006836,4.97727298736572,0.44109907746315\n        ,63.1557693481445,3.29633045196533,0.626932263374329,65.1415252685547,5.18783950805664,0.71958339214325,66.147705078125\n        ,6.05837154388428,0.449921995401382,63.0109786987305,4.46015787124634,0.432886034250259,62.927562713623,3.8436872959137\n        ,0.433378845453262,62.9117012023926,3.9436240196228,0.837226748466492,67.8408203125,5.29701995849609,0.823479652404785\n        ,67.6511611938477,5.34922075271606,0.174876749515533,59.8354759216309,2.7228786945343,0.192694664001465,60.1533355712891\n        ,2.33161687850952,0.155011057853699,59.5214004516602,2.97793006896973,1.0879967212677,71.2529602050781,4.55878782272339\n        ,1.11250460147858,71.6562576293945,4.17292976379395,0.887781143188477,68.4619064331055,5.44826936721802,-2.06441426277161\n        ,63.4675140380859,-2.31350040435791,-1.87283957004547,63.8040542602539,-2.42601108551025,-2.28081321716309,63.8607978820801\n        ,-1.77618479728699,-2.41751766204834,63.5461616516113,-1.80403280258179,-1.77159559726715,64.1679763793945,-2.40934991836548\n        ,-2.17487287521362,64.1741485595703,-1.71712112426758,-2.34561896324158,64.0813293457031,-1.03868758678436,-2.43121266365051\n        ,63.8074989318848,-1.12634778022766,-2.62995195388794,63.5505790710449,-1.26813459396362,-2.32942581176758,63.1775054931641\n        ,-2.33953905105591,-2.68021106719971,63.3241882324219,-1.86289167404175,-2.83212876319885,63.293758392334,-1.41155290603638\n        ,0.339464277029037,63.2583236694336,-3.07789540290833,-0.0916713774204254,63.7588081359863,-2.953280210495,-0.233077645301819\n        ,63.389591217041,-2.97743105888367,-0.396398603916168,63.0210418701172,-2.96684408187866,0.161560475826263,62.8935432434082\n        ,-3.11426734924316,-1.12091016769409,63.6399192810059,-2.79150557518005,-1.32885909080505,63.2648010253906,-2.76139807701111\n        ,-0.939272999763489,64.0175476074219,-2.7674343585968,0.308333724737167,62.861701965332,-3.10737586021423,-2.79351949691772\n        ,60.0759315490723,2.50330710411072,-3.11513829231262,60.3012847900391,2.13080883026123,-1.4380030632019,66.2845840454102\n        ,-1.5249457359314,-1.68420386314392,65.8793869018555,-1.51027750968933,-1.19783592224121,65.8847274780273,-1.72575259208679\n        ,-0.887153267860413,66.2650299072266,-1.72689175605774,-1.93221962451935,65.4429626464844,-1.45040309429169,-1.56653869152069\n        ,65.4700698852539,-1.8891019821167,-0.951906085014343,65.4582290649414,-2.19403076171875,-0.684996604919434,65.8686676025391\n        ,-2.06346368789673,-0.501625418663025,66.2598571777344,-1.95176911354065,-0.157869458198547,65.8251113891602,-2.2592875957489\n        ,0.00298556685447693,66.1865081787109,-2.01925182342529,-0.445116281509399,65.395263671875,-2.4208869934082,0.129518032073975\n        ,65.4026107788086,-2.51539325714111,0.24567648768425,65.8147354125977,-2.35661506652832,0.578288197517395,66.160285949707\n        ,-2.21924948692322,-0.0176074653863907,64.1389007568359,-2.8841404914856,0.430291742086411,64.3759689331055,-2.81420874595642\n        ,0.00262081623077393,64.4665832519531,-2.74427199363709,-2.74265122413635,63.011302947998,-0.449708819389343,-2.96583390235901\n        ,62.7592010498047,-0.600131273269653,-2.93298935890198,63.1129875183105,-0.97790539264679,-2.72992539405823,63.3584899902344\n        ,-0.826003909111023,-2.22467613220215,63.7582168579102,-0.313466429710388,-2.49392008781433,63.3240051269531,-0.347863137722015\n        ,-2.49500870704651,63.6343879699707,-0.709853410720825,-2.28075981140137,63.9004173278809,-0.64413845539093,-2.03079032897949\n        ,66.0994262695313,-0.543434143066406,-2.02758860588074,65.6578598022461,-0.326893508434296,-1.99442374706268,65.7801361083984\n        ,-0.957743167877197,-1.86024069786072,66.2031021118164,-1.13348805904388,-2.09660172462463,65.1525650024414,-0.313202559947968\n        ,-2.14117383956909,65.3427810668945,-0.786990880966187,-1.98699486255646,66.6393585205078,-0.585755109786987,-1.73072242736816\n        ,66.7498626708984,-1.14894211292267,-1.34470677375793,66.7577743530273,-1.53486847877502,-1.89628708362579,69.1311111450195\n        ,2.62288928031921,0.461941629648209,71.0155410766602,4.6341404914856,0.769903659820557,70.9342880249023,4.7560338973999\n        ,0.393971890211105,71.3228454589844,4.3484320640564,0.694467186927795,71.2877655029297,4.4684100151062,-0.172988802194595\n        ,71.1251373291016,4.25246858596802,0.152568727731705,71.0860900878906,4.45920085906982,-0.184596970677376,71.4623413085938\n        ,3.89338612556458,0.116147547960281,71.3699722290039,4.17397785186768,0.357630580663681,71.639892578125,3.95606780052185\n        ,0.0574007332324982,71.5874862670898,3.90052580833435,-1.18433821201324,71.1008758544922,3.03325295448303,-1.36386454105377\n        ,70.8319702148438,2.79870414733887,-1.13077282905579,70.9053573608398,3.3064124584198,-1.276251912117,70.6632461547852\n        ,3.12109637260437,-1.31896269321442,70.2930374145508,3.04443264007568,-1.53664886951447,70.4180374145508,2.49737644195557\n        ,-0.924969553947449,71.0770645141602,3.52221941947937,-0.963448882102966,71.315803527832,3.27536654472351,-0.7299964427948\n        ,71.4047164916992,3.49164271354675,-0.738705515861511,71.1481018066406,3.73645663261414,-1.66465246677399,69.2676544189453\n        ,3.08997631072998,0.684095621109009,71.6607284545898,4.06998348236084,-2.09345149993896,68.400390625,1.93266224861145\n        ,-2.09846615791321,69.1359786987305,1.85471093654633,-1.77208375930786,68.6125183105469,2.84838652610779,-0.425840139389038\n        ,67.4173126220703,-2.12641859054565,-0.444946348667145,66.9872665405273,-2.04204487800598,0.0742237567901611,66.9431304931641\n        ,-2.1808226108551,0.0994564592838287,67.3768844604492,-2.27369236946106,-0.465237021446228,66.660774230957,-1.98393750190735\n        ,0.0518084764480591,66.6103744506836,-2.13401126861572,0.606598854064941,66.5368499755859,-2.26371574401855,0.63420832157135\n        ,66.8952255249023,-2.26730966567993,0.665441274642944,67.3235931396484,-2.37448167800903,-2.18526387214661,68.4904861450195\n        ,1.25674867630005,-2.20559358596802,69.1680679321289,1.06190967559814,-1.86733984947205,70.4976425170898,0.793606281280518\n        ,-1.86910903453827,70.4748077392578,0.210348963737488,-1.65718531608582,71.1225891113281,0.216397732496262,-1.72112834453583\n        ,71.1484146118164,0.786884486675262,-1.71093416213989,70.4660339355469,-0.419810354709625,-1.55366683006287,71.0983810424805\n        ,-0.377163052558899,-1.2832944393158,71.517448425293,-0.310984015464783,-1.39519059658051,71.5979537963867,0.232911288738251\n        ,-1.44035971164703,71.6525344848633,0.801234483718872,-1.27187788486481,71.34326171875,2.61364054679871,-1.01177322864532\n        ,71.6174545288086,2.77098083496094,-1.38939499855042,71.5504455566406,1.75797700881958,-1.08889937400818,71.8652496337891\n        ,1.81313228607178,-0.74492084980011,72.0827941894531,1.89287924766541,-0.679477095603943,71.8006057739258,3.0528781414032\n        ,-0.384253442287445,71.6459732055664,3.53229069709778,-0.736573576927185,71.5655136108398,3.30104160308838,-1.20245289802551\n        ,71.2317047119141,2.86649751663208,-0.984832644462585,71.4752960205078,3.08777546882629,-1.61843776702881,71.0413589477539\n        ,1.70116806030273,-1.44768965244293,70.9303665161133,2.50166463851929,-1.33164775371552,71.0731735229492,2.69956064224243\n        ,-1.78161239624023,70.4285507202148,1.67380654811859,-1.65697824954987,69.7183303833008,2.4452691078186,-1.93330693244934\n        ,69.7481460571289,1.73944473266602,-2.04953861236572,69.7643280029297,0.870465576648712,-2.0847156047821,69.6122741699219\n        ,0.240052491426468,-2.21328973770142,68.8860549926758,0.352373659610748,-2.15788102149963,69.0321273803711,-0.0473507642745972\n        ,-2.01036024093628,68.7924041748047,-0.596657037734985,-1.86665296554565,69.6412582397461,-0.480478763580322,-1.08253812789917\n        ,70.3630447387695,-1.48609256744385,-1.4549126625061,70.4271240234375,-1.00956308841705,-1.58159184455872,69.6048049926758\n        ,-1.11043727397919,-1.19795942306519,69.5328140258789,-1.60922169685364,-1.65997362136841,68.7545547485352,-1.16319763660431\n        ,-1.27194666862488,68.6893005371094,-1.65528035163879,0.884846210479736,70.1233215332031,-2.18640089035034,0.329216808080673\n        ,70.1774215698242,-2.13138198852539,0.246300905942917,69.3600082397461,-2.32711124420166,0.818426251411438,69.3075408935547\n        ,-2.38610339164734,-0.190193891525269,70.240478515625,-1.9975426197052,-0.287689328193665,69.4182357788086,-2.17903733253479\n        ,-0.364626199007034,68.5993804931641,-2.25770878791809,0.175294786691666,68.5530624389648,-2.41484355926514,0.754991292953491\n        ,68.5060806274414,-2.47641658782959,0.411148875951767,70.8600692749023,-1.84431052207947,-0.0863446593284607,70.9077682495117\n        ,-1.72282290458679,0.94322395324707,70.8149337768555,-1.89682793617249,0.993964195251465,71.3831176757813,-1.49712753295898\n        ,0.487515836954117,71.4137268066406,-1.4516818523407,0.0114119648933411,71.4324493408203,-1.35220336914063,0.171863883733749\n        ,72.4325866699219,0.866378843784332,0.166664987802505,72.3487548828125,0.250142991542816,0.631345391273499,72.4095993041992\n        ,0.257073789834976,0.644669651985168,72.5073013305664,0.888128995895386,0.144611001014709,72.1218948364258,-0.340507626533508\n        ,0.603707551956177,72.1698837280273,-0.353997588157654,1.07387113571167,72.1656646728516,-0.363423585891724,1.10328590869904\n        ,72.4085540771484,0.256878972053528,1.12456631660461,72.5422897338867,0.894255757331848,-0.0688050091266632,71.7613525390625\n        ,3.57035827636719,-0.198761284351349,71.9391479492188,3.1220076084137,0.246166497468948,72.0193099975586,3.20735216140747\n        ,0.300596982240677,71.8274002075195,3.6315336227417,0.618768572807312,72.3814544677734,2.14557886123657,0.189862847328186\n        ,72.3270111083984,2.08805894851685,0.656815767288208,72.0691986083984,3.30047488212585,-1.24922847747803,67.0721435546875\n        ,-1.47265577316284,-1.64732575416565,67.085205078125,-1.07984530925751,-1.28425788879395,67.4800109863281,-1.55364918708801\n        ,-1.65446174144745,67.5020599365234,-1.08178448677063,-2.00189471244812,67.5220642089844,-0.539918541908264,-2.03291440010071\n        ,67.0123901367188,-0.627920508384705,-0.739609897136688,72.1798858642578,0.821248114109039,-1.10824263095856,71.9677429199219\n        ,0.809981882572174,-1.07681393623352,71.8874206542969,0.241177350282669,-0.721254944801331,72.0790863037109,0.241950035095215\n        ,-1.02308547496796,71.7721328735352,-0.268278181552887,-0.707126379013062,71.9153366088867,-0.297060012817383,0.666726231575012\n        ,71.8662490844727,3.73314380645752,-1.42754173278809,69.7128295898438,2.99285793304443,-0.794471621513367,71.4553451538086\n        ,-1.0209869146347,-1.09145736694336,71.4641647338867,-0.734061598777771,-1.28578495979309,71.0498123168945,-0.884373784065247\n        ,-0.933363318443298,71.0004043579102,-1.28397178649902,-0.954343557357788,71.6858749389648,-0.602074861526489,-0.709899842739105\n        ,71.7383422851563,-0.715290188789368,0.0906289517879486,71.8268127441406,-0.883029103279114,0.553733825683594,71.8441314697266\n        ,-0.939245700836182,1.03747177124023,71.8286056518555,-0.967041611671448,-0.291723728179932,72.2477798461914,2.00242471694946\n        ,-0.301306486129761,72.3543243408203,0.842659592628479,-0.295482009649277,72.2357177734375,0.245020747184753,-0.305113077163696\n        ,72.0344848632813,-0.321331322193146,-0.346078991889954,71.7884368896484,-0.808658123016357,-0.421383619308472,71.4455490112305\n        ,-1.21783924102783,-0.657468199729919,70.3004379272461,-1.796630859375,-0.534033060073853,70.9538116455078,-1.54974794387817\n        ,-0.76512598991394,69.4727096557617,-1.95073318481445,-0.843601584434509,68.6411819458008,-2.01231694221497,-0.889499425888062\n        ,67.033317565918,-1.82536506652832,-0.884638786315918,67.4514007568359,-1.89685273170471,-0.879774689674377,66.7174377441406\n        ,-1.74827265739441,-0.40679395198822,67.9422988891602,-2.22397255897522,0.129094123840332,67.9017868041992,-2.3778989315033\n        ,0.705568194389343,67.8573837280273,-2.43779754638672,-1.29681801795959,68.0120544433594,-1.62619566917419,-0.879484057426453\n        ,67.9764556884766,-1.98163914680481,-1.66664028167725,68.0569229125977,-1.13294267654419,-1.94688200950623,68.1262588500977\n        ,-0.687186002731323,-2.22190642356873,68.6718826293945,0.0814464390277863,-2.18926191329956,68.394660949707,-0.173482000827789\n        ,-2.06173467636108,66.306396484375,0.270789951086044,-2.03981709480286,65.7306137084961,0.327027827501297,-2.06686520576477\n        ,67.1133804321289,0.350221276283264,-2.01718997955322,66.6979598999023,0.292773723602295,-0.620941758155823,62.5681838989258\n        ,-3.13921141624451,-1.52735507488251,62.8993644714355,-2.7649040222168,-0.0263519883155823,62.3843193054199,-3.27164506912231\n        ,0.266734391450882,62.367244720459,-3.30643272399902,-1.37798225879669,68.0458755493164,4.30455589294434,-1.23890924453735\n        ,67.8901596069336,4.39161729812622,-1.43552124500275,68.0907287597656,4.22251605987549,-1.28076350688934,67.986457824707\n        ,4.39524173736572,0.377546519041061,66.1876831054688,5.38781976699829,0.33715084195137,66.2498168945313,5.33403825759888\n        ,0.493069380521774,66.3186111450195,5.56546497344971,0.470149666070938,66.2436141967773,5.58433151245117,0.451400071382523\n        ,66.16796875,5.62085103988647,0.535398364067078,66.2377853393555,5.81744813919067,0.593458414077759,66.2331314086914\n        ,5.81274890899658,0.445247083902359,66.1955871582031,5.84110355377197,0.493781477212906,66.1784286499023,5.84145402908325\n        ,0.0803782045841217,66.1922836303711,5.48261594772339,0.106357663869858,66.206787109375,5.45738172531128,0.0774464905261993\n        ,66.1107559204102,5.32893705368042,0.0359638035297394,66.0874252319336,5.3862099647522,0.274233907461166,66.2866439819336\n        ,5.69237518310547,0.244374066591263,66.2979049682617,5.6972279548645,0.32149413228035,66.1605453491211,5.30414915084839\n        ,0.156754016876221,66.2658386230469,5.50283670425415,0.133003234863281,66.2512588500977,5.53825330734253,0.545724391937256\n        ,66.2574234008789,5.68059349060059,0.555025815963745,66.2231369018555,5.74878978729248,0.565698027610779,66.312385559082\n        ,5.67399978637695,0.387897282838821,66.275505065918,5.78750658035278,0.0725316107273102,68.0971984863281,4.81859064102173\n        ,0.186211168766022,67.9832305908203,4.79445362091064,0.0166653990745544,68.0633850097656,4.81086206436157,0.267844706773758\n        ,67.927001953125,4.79169082641602,0.178097784519196,67.8924331665039,4.82363080978394,0.105673998594284,67.9410552978516\n        ,4.81362056732178,-0.0145852118730545,68.1976623535156,4.87628984451294,-0.0746597349643707,68.1509475708008,4.83993434906006\n        ,-0.173541575670242,68.2407302856445,4.87500667572021,-0.127273947000504,68.3139801025391,4.9223108291626,-0.300742149353027\n        ,68.2938079833984,4.91189670562744,-0.443478852510452,68.3190078735352,4.9248104095459,-0.432409286499023,68.3772811889648\n        ,4.93697929382324,-0.277704924345016,68.3658905029297,4.93379592895508,0.210827171802521,67.8577880859375,4.80922031402588\n        ,0.16913914680481,67.867546081543,4.71750736236572,0.158061116933823,67.8893356323242,4.74556255340576,0.203786790370941\n        ,67.8361282348633,4.79896926879883,-1.1378835439682,67.9149475097656,4.43347692489624,0.0872756242752075,67.9351577758789\n        ,4.71599531173706,-0.00252395868301392,68.0402450561523,4.70042610168457,-0.0927540212869644,68.1412048339844,4.73561239242554\n        ,-0.0440879017114639,68.0379867553711,4.56870937347412,-1.09579980373383,67.8964080810547,4.44191598892212,-0.501146733760834\n        ,67.7124328613281,4.86643886566162,-0.306639730930328,67.7238540649414,4.85340309143066,-0.131456553936005,67.8459854125977\n        ,4.80462980270386,-0.219726994633675,67.845085144043,4.84498119354248,-0.0507929772138596,67.7854232788086,4.78806924819946\n        ,-0.183810830116272,67.7487487792969,4.83533430099487,-0.294530749320984,67.8366775512695,4.8951997756958,-0.000747025012969971\n        ,67.6982879638672,4.80181217193604,0.0821308493614197,67.8313140869141,4.79887533187866,0.170370429754257,67.7679824829102\n        ,4.79952669143677,0.257696539163589,67.78662109375,4.7972469329834,0.139520168304443,67.8359069824219,4.80803346633911\n        ,0.313444048166275,67.7976684570313,4.79915237426758,-0.940548300743103,67.803108215332,4.6640248298645,-1.05381369590759\n        ,67.7698516845703,4.51773548126221,-0.00845268368721008,67.8782958984375,4.77604341506958,0.0435402989387512,67.8875503540039\n        ,4.78089952468872,0.089642345905304,67.8812484741211,4.75279998779297,-0.296882510185242,67.5243301391602,4.80978488922119\n        ,-0.518619477748871,67.4850387573242,4.78477621078491,-0.707731544971466,67.7342910766602,4.82214641571045,-1.04207479953766\n        ,67.6393814086914,4.56365013122559,-0.153744623064995,67.6036682128906,4.81377696990967,0.103864789009094,67.4183578491211\n        ,4.80526781082153,-0.0238534063100815,67.3293762207031,4.79401826858521,-0.214757233858109,67.2739562988281,4.78187656402588\n        ,-0.880071043968201,67.9217834472656,4.74224853515625,-0.680235683917999,67.8459320068359,4.87497568130493,-0.492535322904587\n        ,67.8295288085938,4.89924955368042,0.221289843320847,67.7520599365234,4.79656267166138,0.282921820878983,67.7299575805664\n        ,4.8082160949707,-1.01416158676147,67.8835830688477,4.59305000305176,-1.03361797332764,67.9288711547852,4.50020408630371\n        ,-0.98690927028656,67.9790649414063,4.58982563018799,-0.954205393791199,67.9623489379883,4.6548285484314,-0.367387235164642\n        ,64.9672012329102,4.65457773208618,-0.376518785953522,64.9429931640625,4.59082984924316,-0.364164084196091,64.9272155761719\n        ,4.62442445755005,-0.387651979923248,64.9273834228516,4.52254867553711,-0.372781217098236,64.9137496948242,4.57795190811157\n        ,-0.325812309980392,64.9677581787109,4.66768264770508,-0.2934929728508,65.0070037841797,4.77406311035156,0.0896200835704803\n        ,65.1711578369141,5.16201257705688,0.0752068161964417,65.1293258666992,5.18869733810425,0.306521564722061,65.1608276367188\n        ,5.26091337203979,0.303164333105087,65.1222839355469,5.29255628585815,-0.403771758079529,64.9382934570313,4.73152828216553\n        ,-0.426909625530243,64.9066925048828,4.77113580703735,-0.482801020145416,64.9239120483398,4.67571449279785,-0.315706521272659\n        ,64.9495010375977,4.91079902648926,-0.352145075798035,64.8978958129883,4.89442443847656,-0.430014610290527,64.8176879882813\n        ,4.84076070785522,-0.612703680992126,64.8882446289063,4.68541955947876,0.140789210796356,65.1614990234375,5.06094169616699\n        ,0.117839068174362,65.1946105957031,5.10699844360352,0.0427363812923431,65.1752243041992,5.04936122894287,0.0711185038089752\n        ,65.1374664306641,5.01369571685791,-0.0689185112714767,65.1361846923828,5.03231048583984,-0.0299543887376785,65.1474304199219\n        ,4.98878335952759,-0.0116341114044189,65.0947113037109,4.97372961044312,-0.0863916128873825,65.1224822998047,4.91171884536743\n        ,-0.127361476421356,65.0179977416992,5.08845901489258,-0.254649817943573,65.0161056518555,4.95347929000854,-0.0846455544233322\n        ,65.1145553588867,5.05634784698486,0.277950078248978,64.9772415161133,5.3225359916687,0.228391140699387,64.8919067382813\n        ,5.34354543685913,0.0256715714931488,65.0050430297852,5.23427677154541,0.318023234605789,65.1712036132813,5.14985322952271\n        ,0.311097830533981,65.187873840332,5.2046685218811,0.455786734819412,65.1104125976563,5.31833410263062,0.458984225988388\n        ,65.1497344970703,5.28762722015381,-0.198425605893135,65.0952301025391,4.92032051086426,-0.166533440351486,65.0903778076172\n        ,4.88122797012329,0.442113250494003,64.9704818725586,5.35210371017456,0.426556438207626,64.891227722168,5.38417100906372\n        ,0.460857778787613,65.1714782714844,5.23062992095947,0.463440865278244,65.1675262451172,5.17260313034058,-0.0820308774709702\n        ,65.0459442138672,4.89202976226807,-0.136149242520332,65.0765151977539,4.83672428131104,-0.138348579406738,64.9979934692383\n        ,4.81805753707886,0.0212104022502899,63.1957321166992,4.60476016998291,0.014591783285141,63.4088325500488,4.82474660873413\n        ,0.0333658158779144,63.6850280761719,5.05261611938477,0.247710734605789,63.6851692199707,5.11107349395752,0.271986216306686\n        ,63.8935699462891,5.08359003067017,0.0659575760364532,63.8828468322754,5.03491592407227,0.112435579299927,64.0491027832031\n        ,4.98340797424316,0.306000739336014,64.0654220581055,5.02008056640625,-0.0462554842233658,64.1683197021484,4.87989664077759\n        ,0.19654643535614,64.2306365966797,4.95268440246582,0.0293864905834198,63.0530662536621,4.33955764770508,0.224212020635605\n        ,62.9917640686035,4.25159072875977,-0.765367031097412,63.3923377990723,3.83371591567993,-0.651477217674255,63.2802734375\n        ,3.78344511985779,-0.495274901390076,63.1926078796387,3.74888515472412,-0.151985064148903,63.9648361206055,4.85739088058472\n        ,-0.913377046585083,63.5252494812012,3.9269597530365,-1.02425754070282,63.6739387512207,3.92811274528503,-0.826150894165039\n        ,63.6318016052246,4.27187967300415,-0.730976521968842,63.445384979248,4.18613243103027,-0.600782513618469,63.3088493347168\n        ,4.06153249740601,0.226796835660934,63.3959312438965,4.87644529342651,0.219289809465408,63.1641044616699,4.63506507873535\n        ,-0.241868630051613,63.5709114074707,4.81857585906982,-0.229720890522003,63.7968864440918,4.90630340576172,0.355975478887558\n        ,64.2465591430664,4.98120021820068,0.790874361991882,68.2815475463867,5.40977621078491,0.601127862930298,68.0573806762695\n        ,5.25249767303467,0.596381306648254,68.1045684814453,5.25249910354614,0.711288332939148,68.1173934936523,5.32674694061279\n        ,0.709404587745667,68.0025939941406,5.31436395645142,0.730903506278992,68.6883010864258,5.42940425872803,0.527809977531433\n        ,68.0526580810547,5.16016721725464,0.48125085234642,68.0487747192383,5.05965137481689,0.497682601213455,68.1295394897461\n        ,5.09887170791626,0.553024291992188,66.0458145141602,5.9037504196167,0.543367385864258,66.0735397338867,5.94976902008057\n        ,0.608531594276428,66.0497436523438,5.96904802322388,0.615544080734253,66.0097961425781,5.92822217941284,0.311814934015274\n        ,66.6080169677734,5.82792091369629,0.303657621145248,66.5355834960938,5.84635210037231,0.303891092538834,66.4423294067383\n        ,5.8451623916626,0.534069180488586,65.900146484375,5.59989976882935,0.445289999246597,66.0324401855469,5.63547468185425\n        ,0.19013500213623,65.9237213134766,5.27445840835571,0.248411864042282,66.0125198364258,5.31187200546265,0.355401009321213\n        ,66.0270233154297,5.45005798339844,0.36849918961525,65.9021224975586,5.36541795730591,0.468226164579391,66.4609451293945\n        ,6.06767511367798,0.398465186357498,66.4604797363281,5.99520444869995,0.403927952051163,66.5763702392578,6.01220273971558\n        ,0.481254249811172,66.5852890014648,6.07205533981323,0.423365563154221,66.67236328125,5.97987413406372,0.501110553741455\n        ,66.6854095458984,6.03886842727661,-0.108507618308067,66.4573135375977,5.36215257644653,-0.00540593266487122,66.5347900390625\n        ,5.43890762329102,0.0397471785545349,66.5337600708008,5.20846939086914,0.106978118419647,66.6758041381836,5.37109851837158\n        ,-0.0288374274969101,66.4802627563477,5.17677354812622,-0.13063670694828,66.3856201171875,5.25176382064819,-0.131238698959351\n        ,66.3111114501953,5.16853904724121,-0.0889036506414413,66.4072723388672,5.15994358062744,-0.0695089995861053,66.2565612792969\n        ,5.09908008575439,-0.0347457826137543,66.4038543701172,5.13775730133057,-0.111543387174606,66.0502624511719,5.29291200637817\n        ,-0.0859223157167435,66.0216064453125,5.22113990783691,-0.140995234251022,66.1301803588867,5.16212177276611,-0.176501885056496\n        ,66.1772994995117,5.22717523574829,-0.0662545412778854,66.0122299194336,5.10803079605103,-0.0630548298358917,66.1422271728516\n        ,5.06855535507202,-0.111702397465706,66.0850524902344,5.345139503479,-0.0245998352766037,66.0480041503906,5.36004734039307\n        ,-0.0117437839508057,66.0069274902344,5.31585597991943,-0.0957345366477966,66.1489410400391,5.40095901489258,-0.0271564722061157\n        ,66.0927505493164,5.40800809860229,0.048024594783783,66.0424957275391,5.34305477142334,0.0678019225597382,66.0012054443359\n        ,5.29897117614746,-0.0270158648490906,66.2692489624023,5.50255537033081,0.0342166125774384,66.2017593383789,5.49587297439575\n        ,0.136669307947159,66.0409698486328,5.27193641662598,0.589970827102661,66.4517822265625,6.10982465744019,0.602482318878174\n        ,66.5799026489258,6.1108193397522,0.617652654647827,66.6855926513672,6.07464265823364,0.471429198980331,66.3372344970703\n        ,6.05087423324585,0.586342811584473,66.3283615112305,6.09568166732788,-0.170357286930084,66.2484970092773,5.29768991470337\n        ,-0.142111584544182,66.2994613647461,5.37951040267944,0.0933360159397125,66.2600784301758,5.55985736846924,0.0511030554771423\n        ,66.3218994140625,5.56224727630615,0.482154756784439,66.1159133911133,5.88775968551636,0.0899962484836578,66.5365219116211\n        ,5.51782989501953,0.0510095059871674,66.4304580688477,5.54727172851563,-0.040442943572998,66.3938293457031,5.48892450332642\n        ,0.604585409164429,65.8763122558594,5.60510492324829,0.315579742193222,66.3502731323242,5.83340358734131,0.344145625829697\n        ,66.2855911254883,5.81716537475586,0.427275151014328,66.0847091674805,5.59603023529053,0.216442435979843,66.3406295776367\n        ,5.69978904724121,0.212495654821396,66.3996963500977,5.69720506668091,-1.5725245475769,68.1800994873047,3.91071939468384\n        ,-1.50637865066528,68.1347732543945,4.07610607147217,0.656096935272217,68.4091491699219,5.44423151016235,0.637661695480347\n        ,68.2986373901367,5.434485912323,0.499500125646591,68.3267974853516,5.51218271255493,0.512825489044189,68.4433288574219\n        ,5.55519723892212,0.508580207824707,65.8326110839844,5.39012861251831,0.402165621519089,66.3396530151367,5.9828839302063\n        ,-1.81354486942291,64.5644378662109,2.97059988975525,-1.93136477470398,64.6418838500977,2.75137257575989,-1.95731270313263\n        ,64.8901138305664,2.83552479743958,-1.84961891174316,64.7845611572266,3.09832501411438,-2.01690983772278,64.6968231201172\n        ,2.52522659301758,-2.04829406738281,64.9380722045898,2.62030720710754,-2.02419638633728,65.1593399047852,2.70687079429626\n        ,-1.95266103744507,65.0892105102539,2.95585203170776,-1.81269764900208,65.0109481811523,3.18123745918274,-1.02156329154968\n        ,67.5455551147461,4.57637357711792,-0.764275670051575,67.4825820922852,4.73440980911255,-0.896280884742737,67.224853515625\n        ,4.66984891891479,-1.14410126209259,67.3386840820313,4.51541137695313,-0.55177116394043,67.267936706543,4.77729320526123\n        ,-1.1068480014801,67.7565994262695,4.48404884338379,-1.05273461341858,67.6993713378906,4.53898859024048,-0.111181184649467\n        ,65.4405899047852,5.10773086547852,-0.0561369508504868,65.3391342163086,5.14034557342529,0.125633955001831,65.4179916381836\n        ,5.23909091949463,0.113990187644959,65.3392562866211,5.24592781066895,0.111880213022232,65.2643585205078,5.20026922225952\n        ,-0.0477806478738785,65.2671127319336,5.10454702377319,0.174226105213165,65.2245025634766,4.97604894638062,0.157422542572021\n        ,65.2043838500977,5.00838422775269,0.0547326505184174,65.2380447387695,4.87922716140747,0.0697361826896667,65.1666259765625\n        ,4.91322135925293,0.0213787853717804,65.1525268554688,4.98430442810059,0.138899087905884,65.1861419677734,5.06382036209106\n        ,0.328762203454971,65.3688430786133,5.31849336624146,0.315944105386734,65.3194351196289,5.2904839515686,0.303560465574265\n        ,65.2702255249023,5.22354459762573,0.390564888715744,65.2960891723633,5.28231906890869,0.320711404085159,65.20703125\n        ,5.02729845046997,0.312472552061081,65.1896743774414,5.06831502914429,0.299265295267105,65.1769027709961,5.12665605545044\n        ,-0.210386320948601,65.280632019043,5.01384258270264,-0.183789789676666,65.1958465576172,4.99877452850342,0.523830056190491\n        ,65.1652374267578,5.00263690948486,0.525573372840881,65.1469955444336,5.05865240097046,0.525611877441406,65.1278686523438\n        ,5.12980985641479,-0.0135367214679718,65.2102432250977,4.81425046920776,-0.119428813457489,65.1035995483398,4.7038140296936\n        ,-0.0122914016246796,65.141471862793,4.82254409790039,-0.136682495474815,65.0725326538086,4.72591781616211,-0.164990901947021\n        ,65.0656280517578,4.78104448318481,-0.0685207843780518,65.1274337768555,4.88056612014771,0.534092545509338,65.2353057861328\n        ,5.28844594955444,0.529576301574707,65.1784286499023,5.25725317001343,0.536379456520081,65.2778472900391,5.3163046836853\n        ,-0.781278729438782,64.9023666381836,4.58818006515503,-0.683728218078613,65.082633972168,4.68330574035645,-0.550516605377197\n        ,65.0189590454102,4.68632316589355,-0.566328406333923,65.2899017333984,4.78666210174561,-0.518296241760254,65.1661224365234\n        ,4.75740098953247,-0.464072287082672,65.0068054199219,4.69205713272095,0.294271200895309,65.2052536010742,5.18574190139771\n        ,0.371871501207352,65.1948089599609,5.19161796569824,0.375409930944443,65.1688232421875,5.13242673873901,0.379584163427353\n        ,65.2474670410156,5.23729133605957,-0.277781784534454,65.0891571044922,4.89954948425293,-0.320617944002151,65.1713562011719\n        ,4.89474630355835,0.379270881414413,65.1757278442383,5.07146787643433,0.381683140993118,65.1935119628906,5.02361011505127\n        ,0.0217822194099426,67.9152297973633,4.67433166503906,-0.0366468280553818,67.9465713500977,4.53814792633057,-0.209568098187447\n        ,67.9163360595703,4.72592782974243,-0.185183897614479,67.8871536254883,4.76847219467163,-0.11489549279213,67.9430084228516\n        ,4.64322090148926,-0.07878278195858,67.9076614379883,4.70778560638428,-0.486432611942291,67.8622817993164,4.85848760604858\n        ,-0.479252845048904,67.8834075927734,4.80050659179688,-0.31166011095047,67.8833236694336,4.79053115844727,-0.302128821611404\n        ,67.8629302978516,4.8461799621582,-0.0699242502450943,67.9439544677734,4.58363962173462,-0.0321404486894608,67.9271011352539\n        ,4.68475675582886,-0.84839916229248,67.9442901611328,4.72416257858276,-0.817674279212952,67.9537811279297,4.68964529037476\n        ,-0.642622470855713,67.8963775634766,4.78840732574463,-0.66112619638443,67.8770141601563,4.84315013885498,-0.976640462875366\n        ,67.9922256469727,4.56396627426147,-0.922485947608948,67.9768447875977,4.64150190353394,-0.944518089294434,67.9910888671875\n        ,4.53432559967041,-0.890174746513367,67.9810943603516,4.61109304428101,-2.61214447021484,68.4235382080078,0.626309394836426\n        ,-2.61460733413696,68.2048645019531,0.565218269824982,-2.60449290275574,67.9082107543945,0.529542624950409,-2.41717648506165\n        ,67.9139709472656,0.834124386310577,-2.41839075088501,68.1474990844727,0.901697635650635,-2.40960621833801,68.3388442993164\n        ,0.98421710729599,-2.03543877601624,67.8588485717773,2.5323314666748,-1.99847674369812,68.0756683349609,2.65659737586975\n        ,-2.12697720527649,67.8789138793945,2.17562532424927,-2.1407904624939,68.0801773071289,2.15506458282471,-2.15716886520386\n        ,68.2771759033203,1.95663928985596,-1.9116598367691,68.2668304443359,2.82119727134705,-0.399414658546448,66.313850402832\n        ,4.90973949432373,-0.46922767162323,66.1981811523438,4.83644199371338,-0.541793346405029,66.0904388427734,4.79319524765015\n        ,-0.690685033798218,66.273811340332,4.80406522750854,-0.668297290802002,66.404541015625,4.84742307662964,-0.557000637054443\n        ,66.4967193603516,4.87973260879517,-1.25525510311127,64.6040115356445,3.93202066421509,-1.28677356243134,64.9492340087891\n        ,4.04414558410645,-0.452210426330566,66.988639831543,4.77221202850342,-0.407773971557617,66.8490829467773,4.83213043212891\n        ,-0.669095873832703,66.7760162353516,4.68708944320679,-0.744894623756409,66.9653625488281,4.75742101669312,-0.116209656000137\n        ,66.1586456298828,5.00018882751465,-0.166509792208672,66.2036666870117,4.95744848251343,-0.0504381358623505,66.3249435424805\n        ,5.04221248626709,-0.155897364020348,66.0759048461914,4.94396877288818,-0.219209671020508,66.0934219360352,4.89901351928711\n        ,-0.269795179367065,66.1559677124023,4.75622940063477,-0.206839874386787,66.2887268066406,4.83997058868408,-0.0960048139095306\n        ,66.4099960327148,4.98053693771362,-0.189794600009918,66.5924453735352,4.98823595046997,-0.292384445667267,66.4564895629883\n        ,4.94714450836182,-1.09283316135406,66.6220779418945,4.31481504440308,-1.11839640140533,66.4353790283203,4.1522331237793\n        ,-1.34252917766571,66.4763870239258,3.97234845161438,-1.34927034378052,66.656120300293,4.13074445724487,-1.31199634075165\n        ,65.4082412719727,3.95422267913818,-1.28974056243896,65.5870590209961,4.02625274658203,-1.25334906578064,65.7742919921875\n        ,4.101806640625,-1.00320780277252,66.3806610107422,4.33500385284424,-0.939937949180603,66.6072235107422,4.44677925109863\n        ,-1.02820551395416,65.3601608276367,4.4644570350647,-0.967733502388,65.5154876708984,4.53393268585205,-1.18165278434753\n        ,65.3615188598633,4.31486988067627,-1.10994076728821,65.5396423339844,4.38164329528809,-1.05721974372864,65.7129745483398\n        ,4.48102855682373,-0.89256489276886,65.6604461669922,4.60488033294678,-0.806287407875061,65.7862396240234,4.6733775138855\n        ,-0.966511964797974,65.8407745361328,4.56615924835205,-0.0335729718208313,66.6911773681641,5.04780769348145,0.0759113132953644\n        ,66.7483749389648,5.1440544128418,0.0238386392593384,66.4921112060547,5.08664512634277,-0.0408133268356323,66.8121566772461\n        ,5.04976224899292,0.081950843334198,66.860221862793,5.14150333404541,-0.171659141778946,66.7482986450195,4.98865556716919\n        ,-0.170493364334106,66.8839721679688,4.97727346420288,-0.0232710093259811,66.9545211791992,5.03047323226929,0.135811060667038\n        ,67.0183563232422,5.14650106430054,-0.0391866117715836,66.4145812988281,5.1172890663147,-1.37148487567902,65.4394378662109\n        ,3.73456621170044,-1.35712015628815,65.6117324829102,3.79800224304199,-1.32312762737274,65.7973327636719,3.86948752403259\n        ,0.0183311402797699,67.0959701538086,4.96626901626587,0.142358392477036,67.2082595825195,5.07538461685181,-0.140984281897545\n        ,67.0089492797852,4.90126895904541,0.185467749834061,67.3298034667969,4.99041795730591,-0.746942579746246,65.6734161376953\n        ,4.62390184402466,-0.359695255756378,66.0493392944336,4.73637294769287,-0.428380846977234,65.9834823608398,4.74483966827393\n        ,-1.16383278369904,64.5658493041992,4.12072086334229,-1.15625607967377,64.9629516601563,4.25756406784058,-1.20151329040527\n        ,65.9678268432617,4.16606521606445,-0.694171845912933,66.6185607910156,4.68004035949707,-0.820064544677734,66.4109878540039\n        ,4.66304492950439,-0.887491345405579,66.7378692626953,4.55708074569702,-0.371411561965942,66.5277709960938,4.95121288299561\n        ,-0.405768245458603,66.7212524414063,4.91648244857788,-0.558909773826599,66.6490173339844,4.81410980224609,-0.917269349098206\n        ,66.2333068847656,4.6307692527771,-1.25942957401276,66.0038757324219,3.94744896888733,-1.39873218536377,65.0957946777344\n        ,3.61290645599365,-1.39295423030853,64.7964248657227,3.55453634262085,-1.35852468013763,64.7153930664063,3.68139219284058\n        ,-1.3772064447403,65.0264739990234,3.76843571662903,-2.07197546958923,64.6383666992188,0.931430459022522,-2.08498668670654\n        ,65.0384979248047,0.906979918479919,-2.06042790412903,65.3805236816406,0.877483546733856,-2.05097699165344,65.1512985229492\n        ,1.2759302854538,-2.06015038490295,64.8550186157227,1.30809426307678,-2.02402448654175,64.4673690795898,1.37764811515808\n        ,-0.317405670881271,64.1438674926758,4.73388910293579,-0.199191853404045,64.3656463623047,4.92192602157593,0.0584587752819061\n        ,64.4125900268555,5.01743650436401,0.323728114366531,65.7889404296875,5.27015924453735,0.27680429816246,65.713134765625\n        ,5.23587036132813,0.100094795227051,65.8025588989258,5.14045476913452,0.16403341293335,65.8722991943359,5.20320177078247\n        ,0.672230005264282,68.5570983886719,5.43079471588135,-1.4498655796051,65.2241744995117,3.42291474342346,-1.47264587879181\n        ,64.8126754760742,3.36299705505371,-1.70768797397614,65.3423156738281,3.26869869232178,0.445904701948166,66.7886428833008\n        ,5.8851146697998,0.457289844751358,66.9578247070313,5.61104488372803,0.546737313270569,66.986572265625,5.79516410827637\n        ,0.524746656417847,66.8179473876953,5.94628763198853,0.32802876830101,66.7540588378906,5.70246267318726,0.559999704360962\n        ,67.1466827392578,5.70663118362427,0.664358973503113,67.1507263183594,5.74432706832886,0.65339183807373,67.0009765625\n        ,5.82805252075195,0.566108703613281,67.267822265625,5.64640045166016,0.671553015708923,67.2614898681641,5.68974256515503\n        ,-0.050879642367363,68.516845703125,5.41659116744995,0.0356159210205078,68.4701309204102,5.42639017105103,-0.0643284767866135\n        ,68.6498718261719,5.38900327682495,0.0299199819564819,68.5855102539063,5.41929721832275,-0.1483254134655,70.409065246582\n        ,4.80879259109497,-0.281782209873199,70.0384140014648,4.80547046661377,-0.274167895317078,70.3873748779297,4.66984558105469\n        ,-0.255148202180862,69.788200378418,4.88298845291138,-0.396128743886948,69.6997528076172,4.846275806427,-0.454765975475311\n        ,70.0203094482422,4.78745889663696,-0.442509591579437,70.3879318237305,4.53379154205322,-0.835795640945435,63.4386901855469\n        ,3.51720428466797,-0.953054666519165,63.552604675293,3.55810213088989,-0.67583042383194,63.3441200256348,3.49282073974609\n        ,0.406194537878037,64.6415786743164,5.26836204528809,0.415552586317062,64.7716598510742,5.37029790878296,0.213078200817108\n        ,64.6159896850586,5.18863344192505,0.240144103765488,64.7654647827148,5.33822298049927,-2.11256265640259,66.0385513305664\n        ,0.873668432235718,-1.94346523284912,64.8523025512695,0.400435388088226,-2.05047631263733,65.3201141357422,0.366720616817474\n        ,-1.57476997375488,64.3679351806641,1.78875243663788,-1.07562649250031,63.6925163269043,3.55823540687561,-1.17126393318176\n        ,63.8498039245605,3.55429005622864,-0.390977293252945,70.8356475830078,4.3555736541748,-0.744130969047546,70.8145904541016\n        ,4.00300979614258,-2.03400230407715,65.742919921875,1.28652930259705,-1.8791264295578,66.3266220092773,2.87983322143555\n        ,-2.03246521949768,66.411979675293,2.61124539375305,-1.82173979282379,66.2470703125,3.17122912406921,-1.86850535869598\n        ,66.0474166870117,3.08610796928406,-1.98421514034271,66.1042938232422,2.81830239295959,-2.08096957206726,66.1626129150391\n        ,2.53493142127991,-1.84771418571472,67.1879348754883,2.95442819595337,-1.80135297775269,67.0301895141602,3.23959875106812\n        ,-1.76515674591064,66.785041809082,3.07056713104248,-1.87070560455322,66.8938522338867,2.78359508514404,-1.70357024669647\n        ,66.9201354980469,3.48094010353088,-1.69575119018555,66.6819305419922,3.3398289680481,-0.139177143573761,68.8369216918945\n        ,5.33272504806519,-0.0133581459522247,68.7448959350586,5.38222455978394,-0.509039878845215,63.362361907959,3.27057361602783\n        ,-0.262469559907913,63.2758140563965,3.27482867240906,-0.699285864830017,63.4942016601563,3.1197497844696,-0.683854222297668\n        ,63.4490356445313,3.25789666175842,-0.0951341688632965,65.6181488037109,5.05984973907471,-0.0582968145608902,65.8303070068359\n        ,5.02478265762329,0.124396234750748,65.5714721679688,5.22218894958496,-0.760870814323425,69.1461181640625,4.90825128555298\n        ,-0.785614848136902,69.2844390869141,4.80389881134033,-0.508977234363556,69.2027816772461,5.00977611541748,-1.54019856452942\n        ,63.1496925354004,1.83554863929749,-1.44083988666534,62.6188354492188,1.92539572715759,-1.33062088489532,62.0820846557617\n        ,2.01348876953125,-1.80600261688232,62.2738304138184,1.6899915933609,-1.88436985015869,62.8275032043457,1.60266172885895\n        ,-1.94922614097595,63.3644943237305,1.52231955528259,-0.0513340383768082,65.9179153442383,5.04434442520142,-0.19064649939537\n        ,65.8681106567383,4.94524908065796,-0.183843195438385,65.9644622802734,4.94034814834595,-0.808202028274536,68.6531295776367\n        ,5.0890908241272,-0.595443367958069,68.5742263793945,5.154221534729,-0.396508872509003,68.4809265136719,5.19436264038086\n        ,-1.70305275917053,64.4079360961914,2.08354473114014,-1.74098002910614,64.472038269043,1.84414160251617,-1.74135506153107\n        ,64.3974456787109,2.35125732421875,-1.59747552871704,64.2888259887695,2.34509325027466,-1.48897337913513,68.5760726928711\n        ,4.09610462188721,-1.40559566020966,68.6938400268555,4.24785947799683,-1.45287621021271,68.5857849121094,4.25322437286377\n        ,-1.34823858737946,68.7632751464844,4.3747091293335,-1.37033426761627,68.5849533081055,4.42276239395142,-2.09475660324097\n        ,65.2050933837891,2.49065113067627,-2.16352653503418,65.2407379150391,2.2720046043396,-2.13584589958191,65.6896286010742\n        ,2.43884897232056,-2.04241967201233,65.6157836914063,2.68238019943237,-1.98007988929749,65.5083999633789,2.85055589675903\n        ,-1.95554280281067,65.7304077148438,2.97573184967041,-2.04487562179565,65.7516098022461,2.72064995765686,-2.03574252128601\n        ,65.9118804931641,2.75876307487488,-1.91338920593262,65.8771209716797,3.0145218372345,-2.13501143455505,65.9259414672852\n        ,2.47491431236267,-1.25092124938965,64.1620712280273,3.57095456123352,-1.56101667881012,64.4123153686523,3.2118501663208\n        ,-1.47741937637329,64.2375869750977,3.20888209342957,-1.61829733848572,64.3333435058594,3.0396671295166,-1.41418766975403\n        ,64.1123580932617,3.13771891593933,-1.62954115867615,64.3046188354492,2.78890919685364,-0.808276295661926,69.8435897827148\n        ,4.60829305648804,-0.824947237968445,70.0887680053711,4.56946516036987,-0.813838243484497,70.4376373291016,4.31216812133789\n        ,-0.600288033485413,64.1812286376953,4.45011425018311,-0.505940973758698,63.940616607666,4.6615161895752,-0.783298969268799\n        ,64.0240707397461,4.29003620147705,-0.921410918235779,63.9113693237305,4.18760967254639,-0.941422820091248,64.3103332519531\n        ,4.20115423202515,-0.759661674499512,64.3785247802734,4.38072729110718,0.147928476333618,66.7239532470703,5.34744739532471\n        ,0.174289703369141,66.8014602661133,5.31767988204956,0.670596718788147,70.221435546875,5.0761866569519,0.670153975486755\n        ,69.8623809814453,5.15234136581421,0.674422025680542,69.5756072998047,5.2115650177002,0.440570801496506,69.6572647094727\n        ,5.20759725570679,0.42556032538414,69.9269866943359,5.12856292724609,0.430853515863419,70.2512741088867,5.03137493133545\n        ,-0.90849757194519,62.6430702209473,2.36282968521118,-0.947414755821228,63.0990028381348,2.35613656044006,-0.329749047756195\n        ,62.8400077819824,2.7103910446167,-0.315626204013824,62.4643325805664,2.68951559066772,0.263793796300888,64.4568786621094\n        ,5.05091381072998,0.403211146593094,64.4612045288086,5.07767200469971,-1.39945721626282,64.1531295776367,2.29242897033691\n        ,-0.207591384649277,70.7967300415039,4.52281379699707,0.0430980920791626,70.7885131835938,4.67768573760986,-0.101195529103279\n        ,64.6073379516602,5.09178304672241,-0.0652517527341843,64.7951049804688,5.23603582382202,-1.10083091259003,63.8160858154297\n        ,3.92026376724243,-1.13330459594727,63.9689064025879,3.88364458084106,-0.88843297958374,63.7760963439941,4.24809598922729\n        ,0.0729179680347443,65.9188919067383,5.20343208312988,0.0801597237586975,65.8802871704102,5.14752531051636,0.0183428525924683\n        ,65.8659210205078,5.08235120773315,0.0127083361148834,65.9394607543945,5.16200304031372,-1.93992030620575,67.2547225952148\n        ,2.58971214294434,-1.95857298374176,67.5483322143555,2.71937894821167,-1.93557977676392,67.5112228393555,3.04516434669495\n        ,-2.03416466712952,67.3294143676758,2.27365493774414,-2.02730870246887,67.6041946411133,2.41377878189087,-1.9924556016922\n        ,67.8220825195313,2.85915374755859,-1.96827554702759,67.7863311767578,3.1956627368927,-0.350411772727966,65.6730117797852\n        ,4.88298177719116,-0.356381922960281,65.5427932739258,4.86791706085205,-0.243584454059601,65.6547775268555,4.94647455215454\n        ,-0.254453182220459,65.4844512939453,4.99992895126343,-0.363168507814407,65.4404754638672,4.91674470901489,-0.272338837385178\n        ,63.1153030395508,3.72361707687378,-0.0289112478494644,63.0413627624512,3.70450663566589,-0.670747756958008,61.767951965332\n        ,2.3687744140625,-0.804776668548584,62.2013702392578,2.36921405792236,-0.259763211011887,62.0463714599609,2.62303972244263\n        ,-0.177231281995773,61.6228904724121,2.54752326011658,-1.9927704334259,66.9824752807617,2.5082311630249,-2.05750274658203\n        ,67.0365829467773,2.24574327468872,-0.17700007557869,69.483772277832,5.03800296783447,-0.298267304897308,69.5041885375977\n        ,4.97279596328735,-0.928951978683472,64.6156616210938,4.38640880584717,-0.891277432441711,64.9078826904297,4.47258186340332\n        ,-0.779518723487854,68.4324493408203,4.99159145355225,-1.02257990837097,68.3955917358398,4.80787563323975,0.34947481751442\n        ,68.0630874633789,4.85545587539673,0.423168927431107,68.0462036132813,4.90282201766968,0.342937141656876,70.5613250732422\n        ,4.89104413986206,0.147651463747025,70.5392761230469,4.86807298660278,-1.2157906293869,63.8193016052246,3.07285928726196\n        ,-1.10651934146881,63.7029571533203,3.07594728469849,-1.2298492193222,63.8758430480957,2.68809795379639,-1.44278490543365\n        ,64.0540924072266,2.70295476913452,-1.05901253223419,69.2478637695313,4.56301927566528,0.474990516901016,67.7075805664063\n        ,5.08277940750122,0.364992707967758,67.7215957641602,4.92603778839111,-1.09955096244812,70.7294235229492,3.56823682785034\n        ,-0.959166765213013,70.7751235961914,3.73905348777771,-0.93732762336731,70.4110260009766,4.03635215759277,-1.04437601566315\n        ,70.397331237793,3.90019869804382,-1.09157884120941,70.2968444824219,3.71844005584717,-0.315446317195892,63.432933807373\n        ,2.81047368049622,-0.31975319981575,63.3010559082031,2.76526927947998,-0.650783777236938,63.4768257141113,2.6024923324585\n        ,-0.637265503406525,63.5470428466797,2.6762809753418,-0.927510976791382,63.6720161437988,2.41135168075562,-0.933242917060852\n        ,63.7730255126953,2.48379826545715,-2.02392649650574,66.1573867797852,1.58263778686523,-2.07431602478027,66.1202239990234\n        ,1.66325640678406,-2.05163955688477,65.893913269043,1.64001560211182,-1.99583303928375,65.9085083007813,1.55370533466339\n        ,-2.12772655487061,66.1783981323242,1.76517724990845,-2.0209858417511,65.6275253295898,1.60138118267059,-1.98261296749115\n        ,65.6147766113281,1.51146507263184,-1.5341135263443,64.1635208129883,2.74776482582092,-1.312180519104,63.9692573547363\n        ,3.08655452728271,-1.15575242042542,69.7564849853516,4.01516532897949,-1.1415137052536,69.8439407348633,4.19292688369751\n        ,-1.14436554908752,69.5396728515625,4.26946496963501,-1.18450546264648,69.4577713012695,4.09269237518311,-1.07104623317719\n        ,69.8846588134766,4.34977245330811,-1.0616762638092,69.5953521728516,4.4445161819458,-1.24094617366791,69.2243041992188\n        ,4.1032886505127,-2.03621077537537,66.3975296020508,0.914780795574188,-2.04223775863647,66.7845764160156,0.975087583065033\n        ,-2.09031414985657,66.5847930908203,1.37293410301209,-2.02425837516785,66.1338958740234,1.3306941986084,-0.78000795841217\n        ,66.1221771240234,4.73541688919067,-0.623443305492401,65.9943084716797,4.75739336013794,-1.57149791717529,68.5909423828125\n        ,3.5501401424408,-1.6832492351532,68.5774765014648,3.2073016166687,-1.4975346326828,68.9557037353516,3.64432191848755\n        ,0.340592056512833,68.1518402099609,5.09618616104126,0.235334187746048,68.158561706543,5.09759378433228,0.41490575671196\n        ,68.1203460693359,4.91284275054932,0.264055222272873,68.1476898193359,4.90246868133545,0.128037631511688,68.2148361206055\n        ,4.91389608383179,0.0906608700752258,68.243896484375,5.10406923294067,0.314071863889694,67.8479843139648,4.79379749298096\n        ,0.562735438346863,67.48779296875,5.44729280471802,0.538991689682007,65.3839263916016,5.28918361663818,0.577238440513611\n        ,65.6157073974609,5.26028776168823,-1.06519198417664,64.5729827880859,4.26825094223022,-0.474201023578644,65.2277221679688\n        ,4.79333591461182,-0.499527037143707,65.3600311279297,4.80795907974243,0.416984349489212,65.6513366699219,5.29502534866333\n        ,0.347670465707779,65.46923828125,5.29197025299072,-1.80286026000977,64.601318359375,1.68279564380646,-1.7073689699173\n        ,64.5272598266602,1.6213926076889,-1.80837976932526,64.6741714477539,1.50764513015747,-1.8718740940094,64.7724533081055\n        ,1.58767604827881,-0.815224170684814,63.6127471923828,2.81109523773193,-2.26979184150696,68.4025268554688,1.87078094482422\n        ,-2.2208297252655,68.2557067871094,1.97225749492645,-2.37703514099121,68.6007461547852,1.66589772701263,-2.26262497901917\n        ,68.4405975341797,1.81961536407471,-1.03683507442474,64.9424285888672,4.38036823272705,-0.540904700756073,61.3368988037109\n        ,2.35497760772705,-0.41677650809288,60.9281539916992,2.3291540145874,-0.325470447540283,63.4140090942383,2.96501040458679\n        ,-0.594686388969421,63.5077323913574,2.89057016372681,-0.981541395187378,63.6064987182617,3.27650785446167,-1.10026836395264\n        ,63.7169075012207,3.26976680755615,0.526109218597412,68.14697265625,5.26719665527344,0.568230986595154,68.1727981567383\n        ,5.35188436508179,0.386983662843704,68.1658706665039,5.28233337402344,0.448243707418442,68.1876449584961,5.35850811004639\n        ,-0.532591819763184,65.5348815917969,4.79324674606323,-0.523976564407349,65.6869888305664,4.78611993789673,0.00548842549324036\n        ,60.8566741943359,2.45223522186279,-0.0831018388271332,61.2306098937988,2.49952602386475,0.0188752114772797,68.3327026367188\n        ,5.30487537384033,-0.0704790055751801,68.363037109375,5.28680944442749,-2.15657114982605,67.4172897338867,2.03161334991455\n        ,-2.16407775878906,67.4641799926758,1.9778904914856,-2.15711736679077,67.6560134887695,2.05931353569031,-2.13285875320435\n        ,67.6450576782227,2.12807035446167,-2.17298078536987,67.6296005249023,1.98325932025909,-2.14432954788208,67.4562301635742\n        ,1.92806100845337,-2.16967344284058,67.8814086914063,2.09683799743652,-2.21320962905884,67.8581390380859,2.04574823379517\n        ,-2.18964791297913,68.0818328857422,2.05832767486572,-1.10682272911072,68.3520812988281,4.70458507537842,-1.15601515769959\n        ,68.3128433227539,4.61932134628296,0.207888931035995,68.7812576293945,5.28072357177734,0.263615399599075,68.5072784423828\n        ,5.41212558746338,0.464819699525833,68.8843994140625,5.4324893951416,0.398692756891251,68.7625350952148,5.45540761947632\n        ,-1.25822556018829,70.451057434082,3.21246004104614,0.339573413133621,67.0314331054688,5.40791082382202,0.345676153898239\n        ,67.1595001220703,5.31332588195801,0.257675498723984,66.9607238769531,5.37208271026611,0.27671816945076,67.0952606201172\n        ,5.29533100128174,-0.346919864416122,64.5955657958984,4.886794090271,-0.269924342632294,64.8229598999023,5.07238912582397\n        ,0.471486002206802,69.3630905151367,5.26161623001099,-1.0702668428421,68.2463302612305,4.70731925964355,-1.12266719341278\n        ,68.2153015136719,4.63162517547607,-0.994616150856018,68.2830963134766,4.80261564254761,-1.21383774280548,70.1628952026367\n        ,3.43133807182312,-1.29199075698853,70.0936126708984,3.19760370254517,-1.54211235046387,66.7447891235352,3.85741925239563\n        ,-1.62783098220825,66.8216247558594,3.68867087364197,-1.64418721199036,67.0815963745117,3.87778115272522,-1.56714427471161\n        ,66.9721908569336,4.04104709625244,-1.7402982711792,67.1906433105469,3.70685386657715,-1.69936990737915,67.5307006835938\n        ,4.00219488143921,-1.67731153964996,67.329833984375,4.1088399887085,-1.59077250957489,67.2291412353516,4.29393005371094\n        ,-1.95055508613586,65.1543350219727,1.46215105056763,-1.56346881389618,69.2975921630859,3.26897525787354,-1.4090815782547\n        ,69.4477081298828,3.40556597709656,-1.74627792835236,64.440071105957,1.54838252067566,-0.734020113945007,68.327018737793\n        ,4.86467933654785,-0.588288068771362,68.3583221435547,4.91467189788818,-0.612378001213074,68.3541793823242,5.02480363845825\n        ,-0.440865159034729,68.3609390258789,5.06021976470947,-0.777303099632263,68.3321228027344,4.97459363937378,-0.592226624488831\n        ,68.4283676147461,5.0551962852478,-0.553448915481567,64.6106491088867,4.63129711151123,-2.06321501731873,64.8149185180664\n        ,2.1156005859375,-1.96014213562012,64.6624221801758,2.01800656318665,-2.00579595565796,64.7556381225586,1.88240575790405\n        ,-2.09146332740784,64.8734741210938,1.97533786296844,-2.03775382041931,64.8883743286133,1.79650235176086,-2.08510828018188\n        ,64.9430160522461,1.88319373130798,-0.757157921791077,64.6142654418945,4.48394203186035,-0.614307522773743,68.9632034301758\n        ,5.11051034927368,-0.794221878051758,68.9102096557617,5.09240007400513,-0.80116593837738,69.030632019043,5.000319480896\n        ,-0.522611021995544,68.8117065429688,5.20736932754517,-0.591552793979645,68.7441177368164,5.20382118225098,0.17551189661026\n        ,69.9622344970703,5.07451820373535,0.165461927652359,70.2903289794922,4.94730806350708,0.194429904222488,69.6949996948242\n        ,5.19657707214355,-2.11258745193481,66.1687545776367,1.8726019859314,-2.16341876983643,65.9415130615234,1.83260381221771\n        ,-2.11326837539673,66.3250961303711,1.86445963382721,-2.12052845954895,66.2355880737305,2.01137447357178,-2.17510890960693\n        ,65.9578628540039,1.98067176342011,-2.17870330810547,65.7067718505859,1.92334616184235,-2.15139293670654,65.689697265625\n        ,1.78150403499603,-0.486087083816528,64.3405914306641,4.7109055519104,-2.1408896446228,66.2031402587891,2.26762771606445\n        ,-2.19596338272095,65.9495010375977,2.19994449615479,-2.20460176467896,65.7087783813477,2.1474175453186,-1.99888551235199\n        ,63.9207420349121,1.44241523742676,-1.61844539642334,63.6698875427246,1.73408043384552,-2.11890387535095,63.9976463317871\n        ,-0.342489182949066,-2.13630628585815,64.3602828979492,-0.346500098705292,-2.03976392745972,63.9575653076172,0.41189306974411\n        ,-2.06836891174316,63.4655876159668,0.399017214775085,-2.16437578201294,62.9744300842285,0.377947419881821,-2.14121961593628\n        ,65.2657470703125,1.87458062171936,-2.0932993888855,65.2478637695313,1.74254786968231,-1.51281440258026,64.6265411376953\n        ,3.29674959182739,-2.05109286308289,64.7572555541992,2.30762910842896,-1.933061003685,64.5889587402344,2.20823669433594\n        ,-1.90012407302856,64.5380249023438,2.43933463096619,-1.31578600406647,66.8648910522461,4.27143526077271,-1.30149531364441\n        ,67.0518417358398,4.42273664474487,-1.10101783275604,68.8673095703125,4.8091459274292,-1.07546055316925,69.011474609375\n        ,4.71746587753296,-1.42160642147064,65.5252685546875,3.52144980430603,-1.40683698654175,65.6822128295898,3.57834124565125\n        ,-1.58224856853485,65.6108703613281,3.29807591438293,-1.57773494720459,65.7677688598633,3.37011218070984,-1.54902422428131\n        ,65.9346160888672,3.42232990264893,-1.39247977733612,65.8589630126953,3.64873790740967,0.682592511177063,67.4627838134766\n        ,5.50372314453125,-0.0231511294841766,67.9797210693359,4.53457832336426,0.0689001083374023,67.9140777587891,4.6100025177002\n        ,-1.12562048435211,70.0753631591797,3.87472653388977,-1.07722532749176,70.1355972290039,4.04010963439941,-1.01903128623962\n        ,70.1703643798828,4.19287395477295,-2.32464599609375,68.0832672119141,2.01199150085449,-1.20537066459656,69.1091156005859\n        ,4.41851234436035,-1.26697885990143,69.1107482910156,4.23781585693359,-2.11697959899902,64.9762344360352,2.40753579139709\n        ,-2.1550624370575,65.013916015625,2.20364284515381,-1.74699115753174,64.4294586181641,2.85393071174622,-1.83707749843597\n        ,64.4808044433594,2.65622782707214,-1.74542367458344,64.3839721679688,2.58440184593201,0.461882144212723,65.7179183959961\n        ,5.31436204910278,-1.21816754341125,68.5262603759766,4.68819999694824,-1.1211758852005,68.6093826293945,4.88013124465942\n        ,-1.2851630449295,68.4350738525391,4.530442237854,0.635958552360535,66.828239440918,5.97853088378906,-1.26056778430939\n        ,68.8390579223633,4.57395887374878,-1.2935973405838,68.7086868286133,4.65042591094971,0.37334069609642,68.1957473754883\n        ,5.35311079025269,0.246664017438889,68.2045364379883,5.33756542205811,0.584861993789673,65.7197570800781,5.3216290473938\n        ,0.519932627677917,65.7092132568359,5.32898473739624,-0.447787255048752,63.2590141296387,3.48250794410706,-0.178221330046654\n        ,63.1808700561523,3.47902083396912,-1.355189204216,68.3519134521484,4.40949535369873,-0.941252827644348,67.045654296875\n        ,4.67198657989502,-1.01300930976868,66.9293823242188,4.6082558631897,0.459396570920944,65.6318435668945,5.29486227035522\n        ,0.576122164726257,65.8132858276367,5.38352203369141,-1.74535763263702,68.283805847168,3.39701509475708,-1.67534267902374\n        ,68.249870300293,3.62321925163269,-1.66290307044983,68.0045700073242,3.77771782875061,-1.77787244319916,68.0544128417969\n        ,3.52214884757996,-1.83792591094971,68.1034927368164,3.3171329498291,-2.01141786575317,62.4788932800293,1.08764457702637\n        ,-2.03550362586975,63.0831871032715,1.03389322757721,-2.08057498931885,63.6488494873047,0.996630012989044,-0.727405667304993\n        ,63.7856407165527,4.48693656921387,0.403872281312943,65.4369735717773,5.29749917984009,0.212884962558746,66.9366912841797\n        ,5.31471633911133,-2.08154916763306,64.1719741821289,0.963233709335327,-1.63406300544739,61.1202850341797,1.91978907585144\n        ,-1.71581184864044,61.6675415039063,1.79084861278534,-1.21979427337646,61.5442085266113,2.10970258712769,-1.11507868766785\n        ,61.0497703552246,2.22066450119019,0.397110790014267,65.3379211425781,5.3165454864502,0.150394052267075,69.1584396362305\n        ,5.24437236785889,0.25466313958168,68.3417129516602,5.44970941543579,0.385993629693985,68.3356323242188,5.45527410507202\n        ,-1.99925017356873,64.411994934082,0.410330653190613,-1.75443303585052,65.9802856445313,3.32582831382751,-1.78535091876984\n        ,65.8136138916016,3.24826383590698,-1.83421552181244,65.6668930053711,3.21271967887878,-1.54078459739685,67.6767730712891\n        ,4.0923023223877,-1.53024888038635,67.7846069335938,4.08631801605225,-1.48656177520752,67.670166015625,4.18855333328247\n        ,-0.0336967706680298,68.2866058349609,5.11544227600098,-0.163565188646317,68.3031311035156,5.08582973480225,-0.0391643792390823\n        ,68.3049163818359,5.13495540618896,-1.37579870223999,67.9069976806641,4.26235771179199,-1.52683842182159,67.8808059692383\n        ,4.10175180435181,-1.481609582901,67.9332046508789,4.13464260101318,-1.81708836555481,67.308219909668,3.50301480293274\n        ,-1.89029633998871,67.4270095825195,3.34287810325623,-1.76982736587524,67.7455520629883,3.71983504295349,-1.77171719074249\n        ,67.5614318847656,3.75459861755371,-2.19584512710571,67.2965621948242,1.77712988853455,-2.24088382720947,67.2952575683594\n        ,1.7981219291687,-2.2440721988678,67.1937026977539,1.73284959793091,-2.19305682182312,67.1954498291016,1.71282660961151\n        ,-2.2493724822998,67.2783508300781,1.84175550937653,-2.2523455619812,67.1691207885742,1.77946817874908,-2.23360681533813\n        ,67.0472564697266,1.73493158817291,-2.22762441635132,67.0837478637695,1.69295918941498,-2.17817640304565,67.0792694091797\n        ,1.67337989807129,-2.20355939865112,66.9430236816406,1.71033716201782,-2.20649123191834,66.9891357421875,1.68191468715668\n        ,-2.15764904022217,66.8303604125977,1.69480717182159,-2.16480088233948,66.9624557495117,1.67032980918884,-2.06757593154907\n        ,66.5061492919922,2.32285475730896,-2.10238003730774,66.5130615234375,2.10629987716675,-2.09369444847107,66.5944900512695\n        ,1.94952178001404,-1.70596849918365,66.1777954101563,3.40870594978333,-1.55709671974182,66.1401290893555,3.50885915756226\n        ,-0.797003388404846,65.1296768188477,4.57803392410278,-0.741232514381409,65.3470916748047,4.63011360168457,-1.89674711227417\n        ,65.4108810424805,3.107266664505,-1.34887731075287,66.069221496582,3.7221884727478,-2.14270448684692,64.8188018798828\n        ,-0.334672451019287,-0.930856823921204,65.1602783203125,4.46657943725586,-0.869108200073242,65.3729095458984,4.52292776107788\n        ,-2.12190103530884,65.0732574462891,1.88043594360352,-2.15592980384827,65.0524444580078,2.02393579483032,-2.18910598754883\n        ,65.2617797851563,2.05802536010742,0.512521862983704,68.5822525024414,5.50223302841187,-1.98135113716125,65.1861190795898\n        ,1.54213905334473,-1.6288822889328,66.6003341674805,3.56421518325806,-1.55428493022919,66.532600402832,3.74061942100525\n        ,-2.1121072769165,66.5616455078125,1.80101943016052,-2.10204029083252,66.4258270263672,1.90585076808929,-2.13509225845337\n        ,66.374397277832,1.7990757226944,-2.35635566711426,67.3067321777344,0.812714219093323,-2.39229607582092,67.6440200805664\n        ,0.794500529766083,-2.57374215126038,67.5606384277344,0.517772197723389,-2.5351095199585,67.119384765625,0.561946094036102\n        ,-1.21843302249908,68.1966247558594,4.51577281951904,-1.88325524330139,67.767219543457,3.43066549301147,-1.81970810890198\n        ,67.9292221069336,3.48891401290894,-1.75683486461639,67.9004592895508,3.69498109817505,-1.8772451877594,67.9753952026367\n        ,3.26425886154175,-1.53521847724915,68.5107879638672,3.81524801254272,-1.3711564540863,68.828971862793,3.95661473274231\n        ,-1.41476547718048,68.9009323120117,3.81379532814026,-1.80806887149811,68.30419921875,3.1439528465271,-1.87774705886841\n        ,68.1662673950195,3.07762551307678,-2.6015841960907,68.5840148925781,0.712429046630859,-2.52507567405701,68.69482421875\n        ,0.882501721382141,-2.48019790649414,68.5404968261719,0.898567080497742,0.500611424446106,68.1400527954102,5.193274974823\n        ,0.348428159952164,68.1519470214844,5.17658805847168,-2.0661473274231,65.0544357299805,1.75413143634796,-1.92961394786835\n        ,64.9724426269531,1.54710781574249,-1.90213859081268,64.9244155883789,1.46848058700562,-2.34519624710083,67.8858871459961\n        ,1.96922051906586,-2.38531565666199,68.0801696777344,1.97755885124207,-2.28863024711609,67.8838806152344,2.00988554954529\n        ,-2.44026684761047,68.2774887084961,1.92449355125427,-2.37290835380554,68.284049987793,1.94873142242432,-2.10232996940613\n        ,66.960578918457,1.67264628410339,-2.07494330406189,66.904296875,1.65739774703979,-2.05417490005493,66.9678649902344\n        ,1.66187787055969,-2.04683780670166,67.0705718994141,1.67697703838348,-2.11067008972168,66.8728408813477,1.66792440414429\n        ,-2.75847244262695,67.9617462158203,0.94255542755127,-2.73985648155212,67.7981796264648,0.92533802986145,-2.75659584999084\n        ,68.088752746582,0.982750296592712,-2.79887843132019,68.0288391113281,1.05075478553772,-2.77713751792908,67.9088439941406\n        ,0.994415462017059,-2.75649619102478,67.7685165405273,0.977071523666382,-2.35955667495728,67.7633590698242,1.34055125713348\n        ,-2.25957608222961,67.6356582641602,1.41453206539154,-2.37699103355408,67.6495971679688,1.24427485466003,-2.45081090927124\n        ,67.7506256103516,1.17347347736359,-2.36532330513,66.464485168457,1.54881620407104,-2.35082054138184,66.3426284790039\n        ,1.57185876369476,-2.27199625968933,66.5775146484375,1.62538266181946,-2.1869649887085,66.3295822143555,1.72240126132965\n        ,-2.29197859764099,66.1882400512695,1.61246955394745,-2.4648904800415,66.2750930786133,1.26518499851227,-2.49455857276917\n        ,66.4529876708984,1.30809855461121,-2.48511815071106,66.6359558105469,1.3474086523056,-2.27331113815308,67.9336547851563\n        ,1.74671864509583,-2.29868316650391,67.9050064086914,1.65444278717041,-2.34973835945129,67.957633972168,1.62568306922913\n        ,-2.36209845542908,68.0078201293945,1.64591896533966,-2.33179688453674,67.892692565918,1.55466496944427,-2.40474534034729\n        ,67.9688491821289,1.53484129905701,-2.4497275352478,68.0374603271484,1.53600335121155,-2.13426208496094,66.7055740356445\n        ,1.7371917963028,-2.18047690391541,66.6938400268555,1.68803453445435,-2.11631941795349,66.7367782592773,1.77710032463074\n        ,-2.17466807365417,66.7814331054688,1.65517473220825,-2.17853713035584,66.5098495483398,1.71980178356171,-2.24601554870605\n        ,66.6240310668945,1.63700735569,-2.23596453666687,66.7149353027344,1.61178421974182,-2.08406949043274,66.2603149414063\n        ,1.58167397975922,-2.12804293632507,66.2284851074219,1.63206398487091,-2.15880513191223,66.2021179199219,1.48221611976624\n        ,-2.20739459991455,66.1964111328125,1.55108535289764,-2.1796190738678,66.2102890014648,1.69114816188812,-2.51349091529846\n        ,68.4639205932617,1.8059241771698,-2.43427896499634,68.4770355224609,1.82119417190552,-2.59442925453186,68.6118392944336\n        ,1.63751804828644,-2.50176239013672,68.6313934326172,1.64476716518402,-2.73913168907166,68.7284088134766,1.22234892845154\n        ,-2.62747955322266,68.7517471313477,1.21627235412598,-2.47974514961243,68.7250289916992,1.15428924560547,-2.73278260231018\n        ,68.6157150268555,0.694849789142609,-2.74724912643433,68.4496536254883,0.59031093120575,-2.70658230781555,68.7177963256836\n        ,0.83696711063385,-2.81796073913574,68.6995697021484,0.851444661617279,-2.8422474861145,68.60498046875,0.71686464548111\n        ,-2.85389399528503,68.4456481933594,0.619735836982727,-2.82498502731323,67.9058685302734,0.533349275588989,-2.72819066047668\n        ,67.9063491821289,0.496379375457764,-2.7461109161377,68.2178268432617,0.52613776922226,-2.84833526611328,68.2153625488281\n        ,0.559641242027283,-2.59032201766968,66.4807510375977,0.928826689720154,-2.50743699073792,66.4137268066406,0.886127471923828\n        ,-2.57565426826477,66.6966857910156,0.700164079666138,-2.65918207168579,66.7431793212891,0.74626624584198,-2.42311024665833\n        ,66.4989776611328,0.856422662734985,-2.48622512817383,66.7392807006836,0.686086356639862,-2.63933992385864,67.0922927856445\n        ,0.552085697650909,-2.72536826133728,67.115592956543,0.598837077617645,-2.29795503616333,66.2649078369141,1.18770742416382\n        ,-2.3826699256897,66.2012023925781,1.22903323173523,-2.16459393501282,66.6759796142578,1.23249101638794,-2.24789547920227\n        ,66.8142013549805,1.06252408027649,-2.40808701515198,68.0817337036133,1.90571987628937,-2.46647810935974,68.26220703125\n        ,1.85624074935913,-2.36823225021362,67.9038314819336,1.90009796619415,-2.36028814315796,67.9237442016602,1.82882857322693\n        ,-2.3948814868927,68.0829315185547,1.82897078990936,-2.44945406913757,68.2431030273438,1.78114855289459,-2.54854297637939\n        ,68.42822265625,1.74963080883026,-2.6382532119751,68.5577239990234,1.59853911399841,-2.52954077720642,68.3862228393555\n        ,1.68799185752869,-2.62005686759949,68.4959335327148,1.55760312080383,-2.19158935546875,67.5043563842773,1.83474671840668\n        ,-2.2549786567688,67.5419082641602,1.82864689826965,-2.26400327682495,67.695068359375,1.94132459163666,-2.20915555953979\n        ,67.6728439331055,1.95828580856323,-2.30236792564392,67.5678024291992,1.79972159862518,-2.31646919250488,67.7085952758789\n        ,1.90358877182007,-2.34178495407104,67.745491027832,1.84141647815704,-2.3300633430481,67.6228179931641,1.74513912200928\n        ,-2.33315491676331,67.6771469116211,1.68879354000092,-2.34013700485229,67.7836227416992,1.77808821201324,-2.17727994918823\n        ,67.4078979492188,1.65498471260071,-2.1150004863739,67.3318939208984,1.61912786960602,-2.25076627731323,67.3621215820313\n        ,1.53202605247498,-2.26577138900757,67.4494552612305,1.69418442249298,-2.28935408592224,67.4065933227539,1.55708074569702\n        ,-2.3228223323822,67.4442901611328,1.53922665119171,-2.30612254142761,67.4830856323242,1.6766813993454,-2.34880518913269\n        ,67.5227890014648,1.49410128593445,-2.33438611030579,67.5519332885742,1.62673580646515,-2.35062432289124,67.5983047485352\n        ,1.4495689868927,-2.33806562423706,67.6189117431641,1.57298302650452,-2.07442927360535,67.3096008300781,1.71361863613129\n        ,-2.0579662322998,67.1960144042969,1.64540350437164,-2.10641956329346,67.2131118774414,1.55172228813171,-2.07167983055115\n        ,67.2885665893555,1.79033148288727,-2.05283141136169,67.1832122802734,1.72549331188202,-2.24906277656555,67.233528137207\n        ,1.46235346794128,-2.37582874298096,67.4185333251953,1.25283980369568,-2.39941954612732,67.5392837524414,1.22935318946838\n        ,-2.05542635917664,66.9686737060547,1.61104881763458,-2.07500028610229,66.8846893310547,1.63040161132813,-2.10767555236816\n        ,66.8996429443359,1.57998013496399,-2.08964848518372,66.9766006469727,1.54973709583282,-2.12712836265564,66.8336639404297\n        ,1.64053738117218,-2.16737270355225,66.848876953125,1.591912150383,-2.82919478416443,68.3537750244141,0.74912703037262\n        ,-2.82582116127014,68.1682891845703,0.711574137210846,-2.86528205871582,68.1946105957031,0.634979069232941,-2.870121717453\n        ,68.4046325683594,0.683867454528809,-2.8079206943512,67.9082412719727,0.69920939207077,-2.84394145011902,67.9072952270508\n        ,0.615303337574005,-2.7978687286377,68.5528030395508,0.910629868507385,-2.81523394584656,68.4792175292969,0.811958968639374\n        ,-2.85784006118774,68.5469284057617,0.763306260108948,-2.83717560768127,68.6300964355469,0.879186511039734,-2.68762493133545\n        ,68.2952194213867,0.798494935035706,-2.6736946105957,68.4139099121094,0.8592609167099,-2.65705442428589,68.4872665405273\n        ,0.95888340473175,-2.67805957794189,68.1334381103516,0.766467034816742,-2.65559458732605,67.9030075073242,0.76434600353241\n        ,-2.73749089241028,68.2249603271484,1.0578727722168,-2.69270253181458,68.3444595336914,1.16103792190552,-2.71204996109009\n        ,68.2930679321289,1.21945893764496,-2.77048492431641,68.175422668457,1.13487410545349,-2.63352560997009,67.5799560546875\n        ,1.02114772796631,-2.67514133453369,67.7353134155273,1.02102887630463,-2.57827067375183,67.3931198120117,1.05846285820007\n        ,-2.64737629890442,67.3829498291016,1.01509618759155,-2.7053394317627,67.5997467041016,0.976101994514465,-2.68225765228271\n        ,68.2328872680664,1.24680197238922,-2.45428347587585,67.5438613891602,1.13627517223358,-2.43049907684326,67.4107666015625\n        ,1.15062642097473,-2.47426509857178,67.6697387695313,1.13195335865021,-2.67037224769592,67.9171600341797,1.083904504776\n        ,-2.65577864646912,68.0389175415039,1.26876902580261,-2.57660245895386,67.9674682617188,1.26852560043335,-2.29113817214966\n        ,67.7997055053711,1.58391487598419,-2.31978893280029,67.7765121459961,1.46570944786072,-2.27869296073914,67.8374938964844\n        ,1.65944612026215,-2.26554083824158,67.7095642089844,1.63142323493958,-2.2527186870575,67.6555862426758,1.52753853797913\n        ,-2.26989126205444,67.8075942993164,1.70676386356354,-2.30208992958069,68.2076568603516,1.70677042007446,-2.28334522247314\n        ,68.0717086791992,1.74444186687469,-2.39567375183105,68.4204559326172,1.54522335529327,-2.3316535949707,68.3273010253906\n        ,1.6405383348465,-2.62854361534119,68.5050277709961,1.2722384929657,-2.76896858215332,68.5801391601563,1.22542345523834\n        ,-2.7824718952179,68.6579818725586,1.22165441513062,-2.6289496421814,66.6553268432617,0.996821522712708,-2.56351447105408\n        ,66.5315704345703,1.15648031234741,-2.52996206283569,66.344856262207,1.09837055206299,-2.62781405448914,66.8359298706055\n        ,1.06403136253357,-2.55787539482117,66.7241516113281,1.21213781833649,-2.69484448432922,66.8672332763672,0.824295282363892\n        ,-2.68732142448425,66.9964828491211,0.903414249420166,-2.75447058677673,67.180046081543,0.6838738322258,-2.73578643798828\n        ,67.2482757568359,0.771346628665924,-2.60194778442383,67.2986831665039,0.862867832183838,-2.57602429389954,67.0869674682617\n        ,0.987282276153564,-2.53736877441406,66.9584503173828,1.13130593299866,-2.40219926834106,66.7655639648438,1.39116287231445\n        ,-2.49304604530334,66.9413528442383,1.30590271949768,-2.31333184242249,66.832275390625,1.52665853500366,-2.34573650360107\n        ,68.098030090332,1.64575755596161,-2.55503010749817,68.0456085205078,1.40283942222595,-2.533766746521,68.2806854248047\n        ,1.38818860054016,-2.57358312606812,68.3652420043945,1.36234879493713,-2.39148902893066,68.3013381958008,1.52705693244934\n        ,-2.59726929664612,67.2168426513672,1.11286020278931,-2.60383558273315,67.1575469970703,1.05543875694275,-2.64444184303284\n        ,67.3427810668945,0.951573252677917,-2.54468846321106,67.0989074707031,1.23312520980835,-2.55772280693054,67.0329055786133\n        ,1.18720102310181,-2.47545433044434,66.8608551025391,1.26244115829468,-2.48018312454224,67.0151901245117,1.34009265899658\n        ,-2.49003434181213,67.9725036621094,1.40447103977203,-2.24871706962585,66.9028015136719,1.52435684204102,-2.17792510986328\n        ,66.9602737426758,1.51861321926117,-2.36117172241211,67.2902297973633,1.26231455802917,-2.40379786491394,67.3136672973633\n        ,1.18727135658264,-2.31025338172913,67.2599411010742,1.36735677719116,-2.31600856781006,67.3657836914063,1.38705325126648\n        ,-2.69393849372864,67.5986022949219,0.917282581329346,-2.62711954116821,67.6268463134766,0.791336178779602,-2.77453708648682\n        ,67.6083908081055,0.709925651550293,-2.80314612388611,67.5798187255859,0.621610939502716,-2.77983713150024,67.5536193847656\n        ,0.535829544067383,-2.68887400627136,67.546272277832,0.493257313966751,-2.15245199203491,67.48681640625,1.88970601558685\n        ,-2.61377906799316,68.4213485717773,1.28537845611572,-2.33221817016602,68.2851104736328,1.61027157306671,-2.52214312553406\n        ,67.2510299682617,1.14891350269318,-2.46499300003052,67.1464996337891,1.25916314125061,-2.4064736366272,67.0748901367188\n        ,1.35577189922333,-2.68517780303955,67.8506240844727,1.03942346572876,-2.09176898002625,67.2419281005859,2.0933837890625\n        ,-2.09170913696289,67.0456008911133,2.05867290496826,0.675862431526184,70.4403457641602,5.01316404342651,-2.48955917358398\n        ,67.7451782226563,1.12540864944458,-2.20359206199646,67.1085662841797,1.84291386604309,-2.19012713432312,66.9737243652344\n        ,1.79033398628235,-2.20991563796997,67.2426681518555,1.89791309833527,-2.09453439712524,66.6815643310547,1.84149312973022\n        ,-2.17911314964294,66.9004058837891,1.75177586078644,0.0687145888805389,65.3117828369141,4.87543821334839,0.18367612361908\n        ,65.2635955810547,4.96013975143433,0.192545831203461,65.3534393310547,4.95118999481201,0.0785710513591766,65.417350769043\n        ,4.88140153884888,0.336994379758835,65.3211212158203,4.9930853843689,0.327651888132095,65.2403335571289,5.00603055953979\n        ,0.534512162208557,65.2889404296875,4.97892236709595,0.526553988456726,65.2026748657227,4.98258638381958,-0.109990268945694\n        ,65.3372421264648,4.74806261062622,-0.00115635991096497,65.3187561035156,4.83178281784058,-0.054225817322731,65.5103607177734\n        ,4.83793926239014,-0.185681968927383,65.6051254272461,4.77223634719849,0.395980924367905,65.3078460693359,4.99508666992188\n        ,0.386684328317642,65.2271118164063,5.00326728820801,-0.205163270235062,64.9350357055664,4.734947681427,-0.203319564461708\n        ,65.0073699951172,4.75313425064087,-0.276345819234848,64.9634017944336,4.62664127349854,-0.323267042636871,64.8058090209961\n        ,4.59223985671997,-0.327579498291016,64.9277038574219,4.58566236495972,-0.50356388092041,65.0628128051758,4.19650650024414\n        ,-0.491817593574524,64.9390640258789,4.35416173934937,-0.443149298429489,64.9613342285156,4.3975830078125,-0.36993744969368\n        ,65.0640411376953,4.43474769592285,-0.364744365215302,64.9534912109375,4.50175857543945,-0.268373221158981,65.0690689086914\n        ,4.54617214202881,-0.576209306716919,64.7099075317383,4.22456932067871,-0.603554666042328,64.4508361816406,4.17889499664307\n        ,-0.479074120521545,64.1535491943359,4.31969261169434,-0.429672032594681,64.7676544189453,4.46571350097656,-0.998232007026672\n        ,65.2647399902344,2.62271499633789,-0.781265616416931,65.1804504394531,3.44368028640747,-0.752240419387817,65.5978240966797\n        ,3.42348694801331,-0.92962121963501,65.7276992797852,2.60776495933533,-0.58737176656723,65.4784240722656,4.08026075363159\n        ,-0.583475053310394,65.915657043457,4.0708703994751,-0.707480788230896,66.0363235473633,3.40916109085083,-0.830390572547913\n        ,66.1534271240234,2.60511755943298,-0.741786599159241,64.3012237548828,3.70394229888916,-0.827998399734497,64.4452972412109\n        ,3.46786713600159,-0.947544813156128,64.2723922729492,2.87818431854248,-0.822114109992981,65.5357513427734,4.56504726409912\n        ,-1.08950412273407,65.1832885742188,4.39228105545044,-1.21951842308044,65.1810684204102,4.22904491424561,-1.33032810688019\n        ,65.2273254394531,3.87632966041565,-1.38224756717682,65.2686386108398,3.67232608795166,-1.64987790584564,65.4768676757813\n        ,3.2867226600647,-1.43295180797577,65.376823425293,3.47241187095642,-1.85966444015503,65.5411682128906,3.15919160842896\n        ,-1.96488916873932,65.6133270263672,2.94387912750244,-0.973559021949768,68.2446670532227,4.70256948471069,-1.02049541473389\n        ,68.1897964477539,4.61681318283081,-1.06434941291809,68.1228103637695,4.53617668151855,-0.590007543563843,68.3077087402344\n        ,4.90223217010498,-0.72842800617218,68.2762680053711,4.84922885894775,-0.940981149673462,68.1581344604492,4.69737195968628\n        ,-0.995903253555298,68.117546081543,4.6331353187561,-1.03320860862732,68.069221496582,4.57753133773804,-1.09829914569855\n        ,68.0365753173828,4.47835111618042,-1.05841517448425,68.0265045166016,4.52373600006104,0.249237090349197,68.0983352661133\n        ,4.85169363021851,0.127800285816193,68.1846084594727,4.86725997924805,-2.44647169113159,66.2694778442383,1.05975723266602\n        ,-2.36160278320313,66.3522186279297,1.02327644824982,0.233039170503616,66.6890335083008,5.58757209777832,0.248356133699417\n        ,66.8787384033203,5.41538524627686,0.469486087560654,67.1167907714844,5.5086350440979,0.47046759724617,67.2418670654297\n        ,5.4121208190918,-1.22514951229095,67.2148361206055,4.48621845245361,-1.42725384235382,67.3811721801758,4.3224048614502\n        ,-1.33798241615295,67.4984664916992,4.35396575927734,-0.214410543441772,63.382080078125,4.57266569137573,-0.176733359694481\n        ,63.2210464477539,4.41520738601685,-1.18296527862549,67.8958969116211,4.41951560974121,-1.20839166641235,67.9621887207031\n        ,4.43898963928223,-0.409916251897812,68.4089508056641,5.10556697845459,-0.237362772226334,67.8769073486328,4.81267929077148\n        ,-0.255254685878754,67.897575378418,4.76290845870972,-1.02679443359375,67.9520568847656,4.46889686584473,-0.992527961730957\n        ,67.9447250366211,4.44149971008301,-1.00401294231415,67.9494171142578,4.40595436096191,-1.00196027755737,67.9380111694336\n        ,4.41646957397461,-1.04129183292389,67.9330291748047,4.43989944458008,-1.0483146905899,67.9335632324219,4.4260139465332\n        ,-1.06923139095306,67.9194717407227,4.45858764648438,-1.04573953151703,67.9483795166016,4.43263816833496,-1.0139251947403\n        ,68.0074691772461,4.50251865386963,-0.990009665489197,68.0527420043945,4.55499219894409,-0.947413086891174,68.0283889770508\n        ,4.5327730178833,-0.973318338394165,68.0027770996094,4.48081588745117,-0.956710577011108,68.104850769043,4.60656881332397\n        ,-0.907191634178162,68.1515960693359,4.66468477249146,-0.873238205909729,68.1471939086914,4.63191032409668,-0.917339205741882\n        ,68.0944900512695,4.57990694046021,-0.708987832069397,68.2673873901367,4.80131673812866,-0.689555525779724,68.2583999633789\n        ,4.75340509414673,-0.581971883773804,68.2942047119141,4.84593439102173,-0.447553277015686,68.3020629882813,4.86063146591187\n        ,-0.451622754335403,68.2851867675781,4.79645013809204,-0.573941111564636,68.2806396484375,4.78963708877563,-0.31475442647934\n        ,68.281120300293,4.83769607543945,-0.329124331474304,68.2647171020508,4.76704216003418,-0.193136766552925,68.2300796508789\n        ,4.79123258590698,-0.213612675666809,68.2171020507813,4.71035766601563,-0.112608820199966,68.1355895996094,4.6355185508728\n        ,-0.186013326048851,68.3514709472656,5.14183807373047,-0.18675434589386,68.4225311279297,5.23559284210205,-0.451187640428543\n        ,69.5371398925781,4.87085676193237,-1.18403208255768,67.5705947875977,4.4710865020752,-1.29267728328705,67.6782913208008\n        ,4.37641668319702,-1.38265776634216,67.6513671875,4.30017375946045,-1.4575617313385,67.609748840332,4.21382236480713\n        ,-1.39131927490234,67.705680847168,4.29635667800903,-1.29264390468597,67.7282791137695,4.37633895874023,-1.15236067771912\n        ,68.1383743286133,4.55469751358032,-1.13733613491058,67.862419128418,4.44054317474365,-1.11288726329803,67.8705215454102\n        ,4.4455680847168,-1.07821583747864,67.8209838867188,4.48720645904541,-1.09485197067261,67.8670425415039,4.45601940155029\n        ,-1.1000372171402,67.8218536376953,4.47205066680908,-1.22510802745819,67.8049926757813,4.39712762832642,-1.29998290538788\n        ,67.8019409179688,4.34031867980957,-0.259932279586792,65.0047607421875,4.60047054290771,-0.262750178575516,64.9955215454102\n        ,4.55957126617432,-0.244600981473923,65.0229721069336,4.71917581558228,-0.255681931972504,65.6577682495117,4.72834491729736\n        ,-0.179298251867294,65.3393096923828,4.6863489151001,-0.341047585010529,65.7184677124023,4.63478422164917,-0.267672032117844\n        ,65.3511581420898,4.59057331085205,-0.180459335446358,65.0894927978516,4.63350772857666,-0.457273423671722,65.7878799438477\n        ,4.44790649414063,-0.384857714176178,65.3761215209961,4.44260740280151,0.525668621063232,65.1329040527344,5.20273685455322\n        ,0.120540618896484,65.202507019043,5.13624382019043,-0.026151716709137,65.1853408813477,5.05632019042969,-0.124853268265724\n        ,65.1389312744141,4.94539880752563,-0.324009239673615,64.983528137207,4.84973907470703,-0.28112405538559,65.0180969238281\n        ,4.90463590621948,-0.242152556777,65.0598373413086,4.86043071746826,-0.213738337159157,65.0627899169922,4.83013391494751\n        ,-0.192905440926552,65.0304260253906,4.79355049133301,-0.191578432917595,64.9678497314453,4.7730507850647,-0.359162360429764\n        ,64.3923187255859,4.60463619232178,-0.376596063375473,64.8579635620117,4.55342674255371,-0.407346963882446,64.8546981811523\n        ,4.53383636474609,-0.5311678647995,64.8800201416016,4.31810760498047,-0.480386972427368,64.8527069091797,4.4069972038269\n        ,-0.707698166370392,64.8196716308594,3.99317455291748,-0.408344089984894,64.8723983764648,4.52740621566772,-0.209093883633614\n        ,65.0713348388672,4.83990383148193,0.216405957937241,66.4818344116211,5.68653631210327,0.236346572637558,66.556770324707\n        ,5.66543197631836,0.460717171430588,66.1719589233398,5.94584178924561,0.446475178003311,66.1731948852539,5.89363384246826\n        ,0.502419114112854,66.169075012207,6.01105356216431,0.594793558120728,66.1596145629883,6.04629945755005,-0.100737050175667\n        ,63.1172065734863,4.34412145614624,-0.500222563743591,63.2063865661621,3.99288964271545,-0.364104866981506,63.1175727844238\n        ,3.94540190696716,-0.141184508800507,63.0437088012695,3.90080761909485,0.0887111127376556,62.9745178222656,3.8652503490448\n        ,0.211537271738052,63.0444030761719,4.45856428146362,0.0237708687782288,63.0873718261719,4.4538459777832,-1.42223107814789\n        ,64.5043640136719,3.36612296104431,-1.38911879062653,64.3296508789063,3.35790133476257,-1.20891559123993,63.8583641052246\n        ,3.27533435821533,-1.28675091266632,64.0161285400391,3.29017400741577,-0.686650097370148,63.6125526428223,4.48471069335938\n        ,-0.600071787834167,63.4264526367188,4.32255554199219,-0.497820943593979,63.2878799438477,4.18092155456543,-0.407934963703156\n        ,63.1828956604004,4.10707521438599,-0.263942271471024,63.0995025634766,4.05776023864746,-0.026168629527092,63.0137100219727\n        ,4.01293087005615,0.200198352336884,62.9460601806641,3.96981835365295,-1.22186529636383,63.9980354309082,3.55282139778137\n        ,-1.34261906147003,64.1619567871094,3.33094644546509,-0.316497594118118,65.9085998535156,4.86637306213379,0.124538689851761\n        ,65.9196166992188,5.23827791213989,0.124102115631104,65.908805847168,5.19611930847168,-0.736087679862976,65.537353515625\n        ,4.63726377487183,-0.185255855321884,64.904670715332,5.07743406295776,-0.0432551503181458,64.882209777832,5.23776292800903\n        ,-0.257672071456909,65.0048141479492,4.55685949325562,-0.859925270080566,64.7443389892578,3.3762354850769,-1.01947462558746\n        ,64.7168502807617,2.64527273178101,-1.64008462429047,64.293586730957,2.55414342880249,0.23989400267601,68.1633071899414\n        ,5.17229270935059,0.0469035506248474,68.2709426879883,5.16547060012817,0.131891995668411,66.6772384643555,5.44688415527344\n        ,0.439351290464401,67.8868865966797,4.88458061218262,0.181970685720444,67.4981689453125,4.82476377487183,0.352258652448654\n        ,67.3958129882813,5.17973613739014,0.298032134771347,67.2773361206055,5.20969247817993,-0.398242056369781,68.650390625\n        ,5.26332569122314,-0.806961536407471,68.8160171508789,5.12768363952637,-1.12555575370789,68.7801895141602,4.8606653213501\n        ,-1.26904928684235,68.6233596801758,4.6575722694397,-1.32087528705597,68.4356689453125,4.48058128356934,0.723448395729065\n        ,67.8533172607422,5.28542041778564,0.634040713310242,67.8667144775391,5.23758697509766,0.533391118049622,67.8840103149414\n        ,5.0360255241394,0.425834208726883,67.9190979003906,4.88724946975708,0.256425350904465,67.8387145996094,4.80163764953613\n        ,0.577364087104797,67.875862121582,5.14433765411377,-1.19939863681793,67.7417373657227,4.43186807632446,-1.30322372913361\n        ,67.6050643920898,4.37825393676758,-1.37182521820068,67.6045379638672,4.31879234313965,-1.42154228687286,67.5515365600586\n        ,4.27276706695557,-1.18892192840576,67.6365585327148,4.45693063735962,-1.2075526714325,67.6961288452148,4.42678356170654\n        ,0.0146072804927826,68.2122268676758,4.87960386276245,0.367377370595932,66.2688446044922,5.80207395553589,0.444115966558456\n        ,66.1817398071289,5.86155652999878,0.470569044351578,66.1363906860352,5.86054944992065,0.456080108880997,66.0712661743164\n        ,5.70314168930054,0.00119155645370483,65.9672470092773,5.24612140655518,0.0713672339916229,65.955696105957,5.25750255584717\n        ,0.105267703533173,66.0630264282227,5.28856992721558,0.207570225000381,66.2081146240234,5.21952438354492,0.196638345718384\n        ,66.1596984863281,5.1656756401062,0.251285821199417,66.159553527832,5.21587753295898,-1.52112138271332,67.4812774658203\n        ,4.2046365737915,-1.54435980319977,67.5658187866211,4.10998916625977,-1.40774393081665,67.797233581543,4.23939990997314\n        ,-1.69101858139038,67.6965103149414,3.9439685344696,-1.65526449680328,67.7714920043945,3.87997126579285,-1.92212677001953\n        ,68.0300598144531,2.96836996078491,-1.94505167007446,67.5534439086914,3.29091906547546,-1.6261522769928,67.8814544677734\n        ,3.90463185310364,-1.59110057353973,67.9744415283203,3.92852735519409,0.287541657686234,67.9501724243164,4.80866003036499\n        ,0.601750493049622,67.6797180175781,5.29253816604614,0.700850963592529,67.6643142700195,5.33945846557617,0.533695816993713\n        ,67.6939697265625,5.19175720214844,0.256553322076797,67.4606246948242,4.98889303207397,0.363055914640427,67.4773635864258\n        ,5.13336992263794,0.422433763742447,67.4761352539063,5.19667863845825,0.447697192430496,67.4347915649414,5.25947570800781\n        ,-0.234858900308609,68.7217788696289,5.30162906646729,-0.380013138055801,68.9322204589844,5.23441600799561,-0.19159409403801\n        ,68.5782623291016,5.33443927764893,0.611650705337524,69.025032043457,5.25725412368774,-0.0934067666530609,69.0297393798828\n        ,5.23564195632935,-0.236638098955154,69.0935440063477,5.12780380249023,0.242130964994431,69.4098815917969,5.304123878479\n        ,-0.791982531547546,69.6056900024414,4.68712282180786,0.67888879776001,69.3228073120117,5.25025939941406,-0.503783106803894\n        ,65.9258346557617,4.74787187576294,-0.290703296661377,66.0148468017578,4.86166954040527,-0.236907988786697,65.411262512207\n        ,5.0018482208252,-0.355312466621399,65.3383560180664,4.9142689704895,-1.17474091053009,68.0606689453125,4.50648593902588\n        ,-1.24219930171967,68.1220626831055,4.46310710906982,-1.37572658061981,68.2389984130859,4.36748313903809,-1.3957325220108\n        ,68.2586822509766,4.32999277114868,-1.38216733932495,68.4170150756836,4.36642837524414,-1.42205548286438,68.2507705688477\n        ,4.26028251647949,-1.41753029823303,68.4400863647461,4.31222629547119,-1.4866498708725,68.27197265625,4.11681365966797\n        ,-1.46908164024353,68.4764251708984,4.19546127319336,0.0572300851345062,69.4563446044922,5.22767162322998,-0.0102332234382629\n        ,69.7210998535156,5.15357160568237,-0.0220333337783813,70.0018997192383,5.02607250213623,-0.0343590080738068,70.2648239135742\n        ,4.93354511260986,0.344821780920029,69.0631103515625,5.3681001663208,-1.34608554840088,69.3578491210938,3.73755097389221\n        ,-1.37849032878876,69.7391204833984,3.18851804733276,-1.31606471538544,69.7685699462891,3.37895488739014,-1.25033664703369\n        ,69.8133697509766,3.59308171272278,-1.21369969844818,69.6207275390625,3.85165095329285,0.423030167818069,68.4400939941406\n        ,5.4689826965332,0.194957137107849,68.0033798217773,4.80440950393677,0.122356653213501,68.0959701538086,4.81445550918579\n        ,-0.838517904281616,66.8712310791016,4.67926502227783,-1.06327414512634,66.7840118408203,4.47974014282227,-2.60383653640747\n        ,62.1017799377441,0.254392862319946,-2.33156847953796,62.5004920959473,0.327738046646118,-2.05626964569092,61.8457069396973\n        ,1.17941951751709,-2.1639678478241,61.142276763916,1.32716286182404,-0.771766066551209,60.0984153747559,2.80394649505615\n        ,-0.939229965209961,60.3516654968262,2.50065851211548,-0.310370951890945,60.2703285217285,2.32014560699463,-1.56072759628296\n        ,60.1842727661133,2.62462735176086,-0.949292778968811,59.9602317810059,2.90389752388,-2.92457056045532,60.5393753051758\n        ,1.63607156276703,-2.75430107116699,61.2119789123535,0.789340019226074,-2.44197249412537,60.5091209411621,1.91451597213745\n        ,-1.59654784202576,60.4476547241211,2.28525972366333,-2.58778691291809,60.2590637207031,2.32570648193359,-2.91699957847595\n        ,61.8118133544922,0.140143811702728,-2.03705453872681,64.9678649902344,-1.31896328926086,-1.87585914134979,64.9871215820313\n        ,-1.8019540309906,-2.11881303787231,64.5967330932617,-1.20581030845642,-1.94959533214569,64.6411895751953,-1.80150365829468\n        ,-1.43170213699341,64.6117782592773,-2.23662328720093,-1.24593210220337,64.9559478759766,-2.24559617042542,-0.540337324142456\n        ,64.896110534668,-2.54498171806335,-0.671869218349457,64.5543212890625,-2.60237717628479,0.0126664638519287,64.8239212036133\n        ,-2.72488737106323,0.5079665184021,65.3369598388672,-2.61204290390015,0.546129822731018,65.7667388916016,-2.32232403755188\n        ,-2.20329976081848,64.9069519042969,-0.739322066307068,-2.18769431114197,64.462272644043,-0.677212119102478,0.463694781064987\n        ,64.7991104125977,-2.77165102958679,-2.27892565727234,64.3324508666992,-1.07254493236542,-2.0687301158905,64.4105453491211\n        ,-1.73562741279602,-1.58865058422089,64.3944396972656,-2.31272482872009,-0.803160071372986,64.3040618896484,-2.61304879188538\n        ,-2.17260718345642,64.1474533081055,-0.634068369865417,-2.23544073104858,68.3914413452148,1.6720415353775,-2.17444276809692\n        ,68.3635177612305,1.75480437278748,-2.36962985992432,68.4567031860352,1.23169255256653,-2.25269293785095,68.4188461303711\n        ,1.27125549316406,-2.42794322967529,68.6118011474609,1.21498787403107,-2.1344735622406,68.3156204223633,0.896306276321411\n        ,-2.11035704612732,68.1960906982422,0.642302989959717,-2.10437488555908,67.963981628418,0.454863429069519,-2.25228142738342\n        ,68.4410018920898,1.77542805671692,-2.1859073638916,68.3270263671875,1.83723652362823,-2.30826497077942,68.5220718383789\n        ,1.64130914211273,-2.2535080909729,68.2871856689453,0.984555840492249,-2.12622618675232,68.102180480957,0.832027614116669\n        ,-2.11575055122375,67.8841934204102,0.746406614780426,-2.07402586936951,67.2652893066406,0.737824559211731,-2.09191298484802\n        ,67.5917205810547,0.344757199287415,-2.14096450805664,67.9786911010742,-0.321571588516235,-2.25128054618835,68.1278533935547\n        ,0.880027770996094,-2.2435462474823,67.8972549438477,0.804336190223694,-2.21857976913452,67.6182479858398,0.770642638206482\n        ,-2.09578418731689,67.5765914916992,0.710018455982208,-2.18941140174866,67.295768737793,0.797770977020264,-2.33974528312683\n        ,67.0231170654297,0.866563677787781,-2.13609290122986,66.8364105224609,1.03708910942078,-2.11306619644165,66.7260665893555\n        ,1.1648668050766,-3.31807923316956,61.4019966125488,0.0489473938941956,-3.42274594306946,60.5364532470703,1.49111914634705\n        ,-3.62020564079285,60.3799934387207,2.00422358512878,0.210002303123474,61.6859016418457,-3.54641151428223,-0.353588879108429\n        ,61.750129699707,-3.50249814987183,-1.02169609069824,62.0449752807617,-3.41312146186829,-1.83803629875183,62.3993988037109\n        ,-2.93643712997437,-2.82967305183411,63.0794563293457,-2.32267451286316,-3.1057333946228,63.1476707458496,-1.548499584198\n        ,-3.29211664199829,62.7537803649902,-0.629818201065063,-1.75604820251465,67.4462509155273,3.88761067390442,0.336564511060715\n        ,66.9118804931641,5.50027084350586,-0.711230635643005,65.6814422607422,4.64888429641724,-0.645659685134888,65.7985458374023\n        ,4.70442295074463,-0.430258810520172,64.9535446166992,4.65565013885498,-0.261302918195724,65.0195770263672,4.75829744338989\n        ,0.369330316781998,63.6228065490723,-2.97760391235352,0.400962799787521,64.0273132324219,-2.9543445110321,-0.137128278613091\n        ,68.2986831665039,4.91825723648071,2.77166199684143,63.0941047668457,-2.39661741256714,2.63027358055115,63.4563598632813\n        ,-2.50340533256531,3.06407999992371,63.4481048583984,-1.86804676055908,3.14984703063965,63.1162910461426,-1.89971852302551\n        ,2.58670663833618,63.8314628601074,-2.48425579071045,3.00956273078918,63.7738456726074,-1.80622553825378,3.18711543083191\n        ,63.6541328430176,-1.13377809524536,3.22662782669067,63.3706436157227,-1.22358846664429,3.37862420082092,63.0866508483887\n        ,-1.37140333652496,2.98798322677612,62.7669372558594,-2.4309287071228,3.37319898605347,62.8567924499512,-1.96693086624146\n        ,3.53397512435913,62.8022232055664,-1.52096652984619,0.846301555633545,63.6863899230957,-2.96940112113953,0.928462862968445\n        ,63.2999114990234,-2.99739456176758,1.03355467319489,62.9106292724609,-2.99142003059387,0.457932859659195,62.870662689209\n        ,-3.11936116218567,1.85002052783966,63.4105224609375,-2.84256649017334,1.99884569644928,63.0078659057617,-2.81859064102173\n        ,1.72941708564758,63.8114891052246,-2.8133008480072,3.13575959205627,59.6181221008301,2.40139698982239,3.4752357006073\n        ,59.792423248291,2.01754117012024,2.61229562759399,65.9718399047852,-1.594557762146,2.79375314712524,65.5336303710938\n        ,-1.58723974227905,2.30689334869385,65.6141204833984,-1.78598785400391,2.0583975315094,66.03759765625,-1.77751684188843\n        ,2.97375583648682,65.0641708374023,-1.53472137451172,2.6017963886261,65.1482315063477,-1.96074271202087,1.98257291316986\n        ,65.2316513061523,-2.24446511268616,1.78643119335175,65.677848815918,-2.10593962669373,1.66918849945068,66.0922393798828\n        ,-1.98907852172852,1.25248622894287,65.7162246704102,-2.283527135849,1.15729212760925,66.0973815917969,-2.03909087181091\n        ,1.46467399597168,65.2478103637695,-2.45371031761169,0.895084381103516,65.3434982299805,-2.52855086326599,0.849041104316711\n        ,65.7681503295898,-2.36698508262634,0.833850264549255,64.0731582641602,-2.89877438545227,0.868939161300659,64.3996887207031\n        ,-2.75916123390198,3.43512058258057,62.534309387207,-0.555885553359985,3.61170029640198,62.251335144043,-0.713178634643555\n        ,3.62065267562866,62.6069641113281,-1.09054219722748,3.46297883987427,62.8803291320801,-0.932440757751465,3.04286408424377\n        ,63.3514938354492,-0.403999030590057,3.24094867706299,62.8811912536621,-0.446427464485168,3.27729225158691,63.1887054443359\n        ,-0.809061408042908,3.10877823829651,63.4842834472656,-0.736767888069153,3.20282506942749,65.6953277587891,-0.633383631706238\n        ,3.13929629325867,65.258918762207,-0.415696263313293,3.10375952720642,65.3865051269531,-1.04536521434784,3.03015112876892\n        ,65.8255081176758,-1.21753859519959,3.13037347793579,64.7489776611328,-0.403037965297699,3.18739819526672,64.9313507080078\n        ,-0.878572702407837,3.24098968505859,66.2357025146484,-0.675608038902283,2.9856231212616,66.3857040405273,-1.23000144958496\n        ,2.59243869781494,66.4537811279297,-1.60253596305847,3.43516945838928,68.4953765869141,2.93542647361755,3.64341020584106\n        ,68.7033767700195,2.52767944335938,1.67240488529205,70.9220733642578,4.61333656311035,1.35996758937836,70.8887329101563\n        ,4.74589204788208,1.77693021297455,71.216064453125,4.3246636390686,1.47888708114624,71.2272033691406,4.45492839813232\n        ,2.30322051048279,70.9339447021484,4.20990991592407,1.98278081417084,70.9447708129883,4.42774534225464,2.35416674613953\n        ,71.2663192749023,3.84975266456604,2.05257272720337,71.2204666137695,4.14069652557373,1.84807145595551,71.5248184204102\n        ,3.93045210838318,2.13462781906128,71.4271011352539,3.86482501029968,3.25662088394165,70.7579803466797,2.95692658424377\n        ,3.38463449478149,70.4653244018555,2.71709227561951,3.18304753303528,70.5722732543945,3.23227119445801,3.28323173522949\n        ,70.3111953735352,3.04273319244385,3.26597952842712,69.9390258789063,2.96563172340393,3.48145318031311,70.0305786132813\n        ,2.41113090515137,3.01352572441101,70.7729568481445,3.45452928543091,3.07973289489746,71.0036239624023,3.20587682723999\n        ,2.87021660804749,71.1267395019531,3.42976593971252,2.84779906272888,70.8711776733398,3.67481565475464,3.45156717300415\n        ,68.8726272583008,3.00204420089722,1.53275537490845,71.5952072143555,4.05539703369141,3.70240545272827,67.952880859375\n        ,1.83304941654205,3.81758189201355,68.67919921875,1.75303256511688,3.44886875152588,68.2093963623047,2.75865435600281\n        ,1.76600730419159,67.2480773925781,-2.16408967971802,1.72176253795624,66.8199768066406,-2.07928395271301,1.19753456115723\n        ,66.8563919067383,-2.20012879371643,1.23600828647614,67.2891235351563,-2.29322600364685,1.69368076324463,66.4940795898438\n        ,-2.02104258537292,1.17020428180695,66.5240249633789,-2.15323305130005,3.78381276130676,68.0296020507813,1.1541588306427\n        ,3.90121912956238,68.6965560913086,0.956952571868896,3.76204657554626,70.0629730224609,0.696854710578918,3.74036574363709\n        ,70.0416870117188,0.113939613103867,3.63069581985474,70.7143020629883,0.125515431165695,3.7172954082489,70.7285079956055\n        ,0.693414866924286,3.56128549575806,70.058952331543,-0.510423541069031,3.50447249412537,70.7078247070313,-0.464096665382385\n        ,3.30403637886047,71.1632614135742,-0.389826118946075,3.44547486305237,71.2241973876953,0.149715274572372,3.51787281036377\n        ,71.2697067260742,0.716017782688141,3.36593508720398,70.9851684570313,2.53393077850342,3.15651845932007,71.2956085205078\n        ,2.69934105873108,3.48455619812012,71.1741180419922,1.67420899868011,3.23799276351929,71.5311584472656,1.73876643180847\n        ,2.93440222740173,71.7987060546875,1.82964313030243,2.86609172821045,71.5268402099609,2.99194097518921,2.56718611717224\n        ,71.4180908203125,3.48156476020813,2.8948769569397,71.2851181030273,3.23862838745117,3.28889083862305,70.8849182128906\n        ,2.78930521011353,3.1189181804657,71.1584320068359,3.01724481582642,3.63068342208862,70.6360549926758,1.61095190048218\n        ,3.47237133979797,70.5504837036133,2.41710424423218,3.38644814491272,70.7088851928711,2.6184709072113,3.69685077667236\n        ,70.0055541992188,1.57964885234833,3.49112677574158,69.3208389282227,2.35678911209106,3.74448370933533,69.3097534179688\n        ,1.64186108112335,3.83206868171692,69.3102035522461,0.769378960132599,3.82193875312805,69.1562118530273,0.138535410165787\n        ,3.87746357917786,68.6364898681641,0.55125892162323,3.84130167961121,68.4185638427734,0.248314082622528,3.79534506797791\n        ,68.5724639892578,-0.149668216705322,3.59410548210144,68.3596725463867,-0.692980408668518,3.58642220497131,69.22021484375\n        ,-0.574200391769409,2.88847541809082,70.0564346313477,-1.5543417930603,3.28233027458191,70.0613479614258,-1.09098148345947\n        ,3.27779316902161,69.229606628418,-1.19395482540131,2.87084484100342,69.2186584472656,-1.67915177345276,3.22291541099548\n        ,68.3775405883789,-1.24711942672729,2.81288981437683,68.3739013671875,-1.72548604011536,1.44374704360962,70.0913619995117\n        ,-2.15053725242615,1.39350318908691,69.2714309692383,-2.34682774543762,1.97094690799713,70.0736083984375,-2.03468585014343\n        ,1.93484580516815,69.2466201782227,-2.21723556518555,1.8824747800827,68.4258804321289,-2.29632949829102,1.33679258823395\n        ,68.46337890625,-2.43480634689331,1.47740232944489,70.7777404785156,-1.86263632774353,1.98017990589142,70.7482147216797\n        ,-1.75833988189697,1.50036382675171,71.3355255126953,-1.46908926963806,1.97681868076324,71.2807006835938,-1.38598275184631\n        ,2.04763340950012,72.2877502441406,0.834140300750732,2.01885151863098,72.2057418823242,0.218309640884399,1.56952464580536\n        ,72.337158203125,0.24094945192337,1.5929172039032,72.4340896606445,0.87183153629303,1.98563992977142,71.9797439575195\n        ,-0.372149109840393,1.53915750980377,72.0976638793945,-0.370075106620789,2.27466726303101,71.5804061889648,3.53008103370667\n        ,2.41497802734375,71.7373428344727,3.0770857334137,1.99079954624176,71.8846054077148,3.17736721038818,1.92208516597748\n        ,71.7022018432617,3.60366559028625,1.64213752746582,72.3024368286133,2.12799048423767,2.05538964271545,72.182975769043\n        ,2.05599641799927,1.59609460830688,71.9966735839844,3.28433179855347,2.54851698875427,66.7789077758789,-1.53792715072632\n        ,2.95708656311035,66.7296829223633,-1.15898084640503,2.64293694496155,67.1767807006836,-1.62114572525024,3.02803945541382\n        ,67.140510559082,-1.16226232051849,3.39273285865784,67.1055374145508,-0.632635354995728,3.34214329719543,66.5973663330078\n        ,-0.720301151275635,2.90744972229004,71.8982849121094,0.758566498756409,3.2385573387146,71.6321182250977,0.735273957252502\n        ,3.17576289176941,71.5590744018555,0.16808870434761,2.85406494140625,71.8030242919922,0.18050143122673,3.08760619163513\n        ,71.4547348022461,-0.33892822265625,2.79656958580017,71.6448059082031,-0.357277631759644,1.56994235515594,71.796516418457\n        ,3.7176206111908,3.28240466117859,69.3491592407227,2.9119086265564,2.78750729560852,71.1787643432617,-1.08255004882813\n        ,3.09195494651794,71.1411590576172,-0.805961489677429,3.21514344215393,70.7022857666016,-0.961730718612671,2.84587121009827\n        ,70.7086029052734,-1.34892511367798,2.99508047103882,71.3809432983398,-0.669953227043152,2.75786018371582,71.4705963134766\n        ,-0.774890303611755,1.97513401508331,71.6813049316406,-0.915417790412903,1.51852643489838,71.7696380615234,-0.955827593803406\n        ,2.51590299606323,72.031005859375,1.95417010784149,2.50209856033325,72.1378707885742,0.794477701187134,2.45773005485535\n        ,72.0231399536133,0.197701543569565,2.41701221466064,71.8243026733398,-0.368116199970245,2.40306186676025,71.5761642456055\n        ,-0.855907320976257,2.41083145141602,71.2268676757813,-1.26651608943939,2.44847583770752,70.0606231689453,-1.85001230239868\n        ,2.43527793884277,70.7245407104492,-1.60078120231628,2.42250514030457,69.2265930175781,-2.00551891326904,2.37029147148132\n        ,68.3930358886719,-2.06755375862122,2.1752552986145,66.7966842651367,-1.87803864479065,2.23217368125916,67.2107467651367\n        ,-1.95042085647583,2.11980867385864,66.4858322143555,-1.79982614517212,1.82443225383759,67.7700271606445,-2.26232051849365\n        ,1.28373324871063,67.8126373291016,-2.39774370193481,2.7345130443573,67.7007904052734,-1.69548153877258,2.30476355552673\n        ,67.7305908203125,-2.03636646270752,3.1234712600708,67.6870727539063,-1.21527004241943,3.42609477043152,67.7113952636719\n        ,-0.779530763626099,3.80768942832947,68.2063293457031,-0.0221836566925049,3.72419857978821,67.9380645751953,-0.275116086006165\n        ,3.29296040534973,65.8929443359375,0.178759336471558,3.18487477302551,65.3272018432617,0.237231612205505,3.42458319664001\n        ,66.6893692016602,0.255840361118317,3.30981183052063,66.2866516113281,0.201219111680985,1.17992103099823,62.429141998291\n        ,-3.17016243934631,2.13867163658142,62.6163024902344,-2.8279116153717,0.559984564781189,62.3390464782715,-3.28172254562378\n        ,3.02245187759399,67.7061004638672,4.22892618179321,2.86418676376343,67.5733489990234,4.32109785079956,3.08335709571838\n        ,67.7418212890625,4.144850730896,2.92042183876038,67.6620712280273,4.32303619384766,1.04059529304504,66.1364822387695\n        ,5.37642431259155,1.08818566799164,66.1918182373047,5.32113075256348,0.952670454978943,66.2831268310547,5.55756616592407\n        ,0.964439511299133,66.2054443359375,5.57583618164063,0.972594499588013,66.1277236938477,5.61189317703247,0.907071590423584\n        ,66.2090911865234,5.81105995178223,0.848858714103699,66.2134170532227,5.80835962295532,0.990434408187866,66.1534957885742\n        ,5.83173322677612,0.939881920814514,66.1439819335938,5.8337869644165,1.33801198005676,66.0951766967773,5.4610013961792\n        ,1.31371986865997,66.1135635375977,5.4366307258606,1.32314586639404,66.0145721435547,5.3075270652771,1.36248826980591\n        ,65.984992980957,5.36341142654419,1.16821324825287,66.2176132202148,5.67701053619385,1.19959616661072,66.2241516113281\n        ,5.68081045150757,1.08892726898193,66.1012878417969,5.29095935821533,1.27456474304199,66.1795272827148,5.48362493515015\n        ,1.2969925403595,66.1613845825195,5.51824808120728,0.895212769508362,66.2304382324219,5.67458629608154,0.883696556091309\n        ,66.2878265380859,5.66853427886963,1.05750358104706,66.2238006591797,5.77599811553955,1.61541330814362,67.9780654907227\n        ,4.79207324981689,1.48483347892761,67.8829650878906,4.77213430404663,1.66513204574585,67.9361038208008,4.78252983093262\n        ,1.39549088478088,67.8399353027344,4.77230978012085,1.47990763187408,67.7919158935547,4.80125713348389,1.55855202674866\n        ,67.8288879394531,4.788649559021,1.7188355922699,68.0638198852539,4.84649801254272,1.76975238323212,68.0085372924805\n        ,4.80823421478271,1.88238084316254,68.0819931030273,4.83967161178589,1.84954607486725,68.1613540649414,4.88833522796631\n        ,2.01740455627441,68.1148223876953,4.87205505371094,2.16267466545105,68.1177825927734,4.88001871109009,2.16110157966614\n        ,68.1770324707031,4.89240455627441,2.0064640045166,68.1895217895508,4.89453840255737,1.44177711009979,67.7627487182617\n        ,4.78806447982788,1.45658624172211,67.7608642578125,4.72944355010986,1.49655413627625,67.7859954833984,4.72255802154541\n        ,1.44505512714386,67.7402877807617,4.77763557434082,1.50603425502777,67.7715835571289,4.66046762466431,2.81941747665405\n        ,67.6532592773438,4.37944507598877,2.80845141410828,67.7050094604492,4.4054799079895,2.76364207267761,67.6946411132813\n        ,4.37451553344727,2.76965069770813,67.6132354736328,4.3663182258606,1.57247996330261,67.8204727172852,4.69046926498413\n        ,1.67675852775574,67.9105834960938,4.67156410217285,1.78256213665009,67.9964065551758,4.70338153839111,1.71295940876007\n        ,67.9023132324219,4.53851175308228,2.72553372383118,67.6013565063477,4.37623929977417,2.71776938438416,67.6938323974609\n        ,4.41837549209595,2.12454390525818,67.5096969604492,4.82131147384644,1.93376386165619,67.5508728027344,4.81489753723145\n        ,1.80381166934967,67.7050094604492,4.75677299499512,1.75186026096344,67.6921310424805,4.78685522079468,1.86624801158905\n        ,67.6840209960938,4.80912971496582,1.68831598758698,67.6511459350586,4.75817966461182,1.81566560268402,67.594367980957\n        ,4.80096960067749,1.94054734706879,67.6641006469727,4.85678577423096,1.6259890794754,67.5726852416992,4.77385330200195\n        ,1.56445646286011,67.7168655395508,4.77339839935303,1.46761655807495,67.6678161621094,4.77723121643066,1.38416063785553\n        ,67.6996536254883,4.77788639068604,1.50879895687103,67.7301864624023,4.78449964523315,1.33086597919464,67.719108581543\n        ,4.78166580200195,2.56548237800598,67.5324020385742,4.60376691818237,2.66723799705505,67.4825439453125,4.453782081604\n        ,1.63220357894897,67.7453384399414,4.76484489440918,1.57864618301392,67.7543640136719,4.77227354049683,1.68848466873169\n        ,67.7535629272461,4.72987937927246,1.64251971244812,67.7787399291992,4.73566055297852,1.58031296730042,67.7742691040039\n        ,4.69857931137085,1.54594111442566,67.7606811523438,4.75637054443359,1.89201819896698,67.3553237915039,4.77216386795044\n        ,2.10411429405212,67.2825393676758,4.7396993637085,2.33040165901184,67.4997177124023,4.76993036270142,2.63719081878662\n        ,67.3552932739258,4.50041532516479,1.76297199726105,67.4556732177734,4.78083467483521,1.47983765602112,67.3121185302734\n        ,4.78161907196045,1.59192776679993,67.2046203613281,4.76624822616577,1.77153718471527,67.1205902099609,4.74773836135864\n        ,2.52664160728455,67.6587448120117,4.68369770050049,2.32218456268311,67.6141052246094,4.82337379455566,2.13513088226318\n        ,67.6266403198242,4.85408782958984,1.41478621959686,67.6599044799805,4.77605009078979,1.35092687606812,67.6474914550781\n        ,4.78986024856567,2.64810514450073,67.6008148193359,4.53010749816895,2.67109847068787,67.642822265625,4.43653106689453\n        ,2.63573479652405,67.699348449707,4.52756357192993,2.60309267044067,67.6876831054688,4.59368944168091,1.56230914592743\n        ,64.7970581054688,4.62223815917969,1.57280242443085,64.7770004272461,4.55793142318726,1.53890252113342,64.7756271362305\n        ,4.5918984413147,1.5733095407486,64.7759780883789,4.48884582519531,1.55842363834381,64.7646331787109,4.54476022720337\n        ,1.52267169952393,64.8155517578125,4.6362829208374,1.50113117694855,64.8684310913086,4.74321937561035,1.16122794151306\n        ,65.0884170532227,5.14359521865845,1.16995275020599,65.044792175293,5.16988229751587,0.948817014694214,65.1112442016602\n        ,5.24987411499023,0.9472975730896,65.0725479125977,5.28148555755615,1.59930920600891,64.80029296875,4.69645118713379\n        ,1.617396235466,64.7488555908203,4.73600006103516,1.67197442054749,64.7575378417969,4.63868093490601,1.54642188549042\n        ,64.7513046264648,4.86179351806641,1.6091810464859,64.6602401733398,4.80571365356445,1.79511940479279,64.7023315429688\n        ,4.64403676986694,1.10575973987579,65.0869903564453,5.04435682296753,1.13507974147797,65.1160659790039,5.089515209198\n        ,1.20430386066437,65.0855331420898,5.02939796447754,1.16926229000092,65.0526809692383,4.99482154846191,1.30799674987793\n        ,65.0298690795898,5.00864553451538,1.26975691318512,65.0470809936523,4.96644496917725,1.24305903911591,64.9978332519531\n        ,4.95216512680054,1.31903052330017,65.0139694213867,4.88756418228149,1.34949314594269,64.9039611816406,5.06307601928711\n        ,1.4702981710434,64.882926940918,4.92383337020874,1.32103002071381,65.0060195922852,5.0321888923645,0.950963616371155\n        ,64.9252700805664,5.31096935272217,0.987527966499329,64.8332901000977,5.33049821853638,1.20135700702667,64.9142684936523\n        ,5.21407079696655,0.935256481170654,65.1235504150391,5.13924503326416,0.946526408195496,65.1388092041016,5.19374752044678\n        ,0.79563307762146,65.0841751098633,5.31249284744263,0.797460436820984,65.1235961914063,5.28180932998657,1.42578208446503\n        ,64.9698181152344,4.89240550994873,1.39220714569092,64.9700241088867,4.85443782806396,0.792876124382019,64.9543151855469\n        ,5.34882354736328,0.793111681938171,64.8629302978516,5.37787103652954,0.797000050544739,65.1455230712891,5.22485256195068\n        ,0.791859984397888,65.1421661376953,5.16695880889893,1.30230617523193,64.9390640258789,4.86823749542236,1.35855317115784\n        ,64.9611053466797,4.81103515625,1.34803688526154,64.8832244873047,4.79251050949097,0.90659487247467,63.1273765563965\n        ,4.58954286575317,0.953348994255066,63.336353302002,4.80861186981201,0.984978079795837,63.6115493774414,5.0362606048584\n        ,0.775317549705505,63.6444320678711,5.10200548171997,0.782387137413025,63.8541603088379,5.0748176574707,0.982545137405396\n        ,63.8120765686035,5.01916217803955,0.960399866104126,63.9836273193359,4.968834400177,0.77299952507019,64.0293655395508\n        ,5.01205444335938,1.13187718391418,64.0773544311523,4.85964822769165,0.904144406318665,64.1760025024414,4.94052267074585\n        ,0.867566585540771,62.9883422851563,4.32515239715576,0.662752270698547,62.9579086303711,4.24405288696289,1.68722319602966\n        ,63.2029724121094,3.79156351089478,1.55583417415619,63.1098403930664,3.74550795555115,1.38694024085999,63.0472755432129\n        ,3.71653580665588,1.20429515838623,63.8601112365723,4.8340802192688,1.8569747209549,63.3113479614258,3.87934565544128\n        ,1.98933351039886,63.4412536621094,3.87631845474243,1.79896724224091,63.4291114807129,4.22676181793213,1.67343926429749\n        ,63.2597351074219,4.14480829238892,1.51965522766113,63.1451263427734,4.02508878707886,0.743568658828735,63.356029510498\n        ,4.86756324768066,0.707159996032715,63.1264381408691,4.62668037414551,1.23128128051758,63.4571571350098,4.79325723648071\n        ,1.25696194171906,63.6821022033691,4.8807520866394,0.750115871429443,64.2161331176758,4.97442626953125,0.95448911190033\n        ,68.2689056396484,5.40696430206299,1.10210275650024,68.0186996459961,5.24388742446899,1.11403250694275,68.0646057128906\n        ,5.24360227584839,1.00505876541138,68.0947189331055,5.32169723510742,0.988877415657043,67.9810104370117,5.30956077575684\n        ,1.07680690288544,68.6615905761719,5.42346000671387,1.17063009738922,68.0030288696289,5.14911937713623,1.21258020401001\n        ,67.992301940918,5.04708242416382,1.21008718013763,68.0745315551758,5.08662796020508,0.863151907920837,66.0218658447266\n        ,5.8984203338623,0.878515362739563,66.0476531982422,5.94400930404663,0.811168670654297,66.0340957641602,5.96556520462036\n        ,0.796718120574951,65.9958038330078,5.92510843276978,1.18504989147186,66.5405960083008,5.81291246414185,1.18261909484863\n        ,66.4677200317383,5.83124494552612,1.16803658008575,66.3756103515625,5.83031034469604,0.849136829376221,65.8758163452148\n        ,5.59448528289795,0.958329796791077,65.9928283691406,5.62665700912476,1.18129503726959,65.8471908569336,5.25742292404175\n        ,1.13864850997925,65.9437789916992,5.29657173156738,1.03993558883667,65.9741668701172,5.43829298019409,1.00494194030762\n        ,65.8529815673828,5.35447978973389,1.01620256900787,66.4186325073242,6.05825710296631,1.08254957199097,66.4076614379883\n        ,5.98344707489014,1.09551954269409,66.5229644775391,6.00031614303589,1.0225692987442,66.5434951782227,6.06275177001953\n        ,1.08995115756989,66.6208877563477,5.96841812133789,1.01719057559967,66.6455612182617,6.02999830245972,1.56110656261444\n        ,66.3283996582031,5.33345746994019,1.47379839420319,66.4205780029297,5.41348457336426,1.42117702960968,66.4270935058594\n        ,5.18472719192505,1.3821359872818,66.5773391723633,5.34918260574341,1.47961628437042,66.3637924194336,5.15084791183472\n        ,1.56818747520447,66.2544479370117,5.2225661277771,1.55450403690338,66.1809539794922,5.13956642150879,1.52715849876404\n        ,66.2824859619141,5.13216829299927,1.4827972650528,66.1366958618164,5.07240104675293,1.47239136695862,66.2874755859375\n        ,5.11185455322266,1.49927139282227,65.9258880615234,5.26522731781006,1.46711909770966,65.9016876220703,5.19444799423218\n        ,1.53615379333496,66.0006866455078,5.13329648971558,1.58067262172699,66.0416259765625,5.1969747543335,1.44239354133606\n        ,65.8957443237305,5.08210182189941,1.45783531665802,66.0247955322266,5.04241561889648,1.506551861763,65.9601058959961\n        ,5.31732654571533,1.41535568237305,65.9368209838867,5.33529901504517,1.39484643936157,65.898323059082,5.29168033599854\n        ,1.50249338150024,66.0255355834961,5.37349081039429,1.42638659477234,65.9805221557617,5.38302612304688,1.34220838546753\n        ,65.9425659179688,5.32081174850464,1.31483519077301,65.904914855957,5.27753877639771,1.45656311511993,66.1546936035156\n        ,5.47705745697021,1.38550686836243,66.0974273681641,5.47264814376831,1.25200283527374,65.9548492431641,5.25276708602905\n        ,0.896006941795349,66.4281616210938,6.10456466674805,0.90334677696228,66.5566787719727,6.10564804077148,0.903348088264465\n        ,66.6635284423828,6.06973218917847,0.993480682373047,66.2969284057617,6.0419020652771,0.880164980888367,66.3056716918945\n        ,6.09063196182251,1.58793973922729,66.1127395629883,5.2674708366394,1.57066059112549,66.1672134399414,5.35007286071777\n        ,1.33825790882111,66.163948059082,5.53846120834351,1.38953459262848,66.2185516357422,5.53924417495728,0.943351864814758\n        ,66.0803070068359,5.87983322143555,1.38254451751709,66.4367218017578,5.49561500549316,1.40577471256256,66.3258514404297\n        ,5.52398777008057,1.48847639560699,66.2757797241211,5.46264743804932,0.776017904281616,65.8630752563477,5.60215854644775\n        ,1.1419643163681,66.2864685058594,5.81920003890991,1.10327231884003,66.2269744873047,5.80411815643311,0.982795000076294\n        ,66.0418167114258,5.58648300170898,1.23382449150085,66.262077331543,5.68230390548706,1.24669885635376,66.3198471069336\n        ,5.67943048477173,3.22172045707703,67.809928894043,3.82832098007202,3.15530824661255,67.8338470458984,4.00156021118164\n        ,3.15509080886841,67.7748489379883,3.99598979949951,3.07769012451172,67.8231201171875,4.18973302841187,1.10835039615631\n        ,68.3742294311523,5.43645858764648,1.10926449298859,68.2622299194336,5.42638063430786,1.25268363952637,68.2686462402344\n        ,5.49923801422119,1.25887644290924,68.3857269287109,5.54237508773804,0.856779098510742,65.8057250976563,5.38414430618286\n        ,1.05993151664734,66.2888641357422,5.97157907485962,2.87275648117065,64.2026062011719,2.89005708694458,2.99350666999817\n        ,64.2616271972656,2.66672921180725,3.06010127067566,64.5027084350586,2.74929118156433,2.94652581214905,64.4142456054688\n        ,3.01589393615723,3.07869410514832,64.3033828735352,2.43764901161194,3.14995956420898,64.5367050170898,2.53096532821655\n        ,3.16307401657104,64.7588119506836,2.61771774291992,3.09017300605774,64.6998519897461,2.86918115615845,2.94763731956482\n        ,64.6433868408203,3.09942221641541,2.60297060012817,67.2657012939453,4.51407909393311,2.34461688995361,67.2425384521484\n        ,4.6809778213501,2.4332230091095,66.9677734375,4.61262559890747,2.69015502929688,67.0426330566406,4.44951248168945\n        ,2.10328006744385,67.0629348754883,4.73166131973267,2.73677968978882,67.3821334838867,4.40822982788086,2.71642827987671\n        ,67.4613952636719,4.41833877563477,2.65608310699463,67.4130172729492,4.47524547576904,1.39902520179749,65.3239822387695\n        ,5.08177518844604,1.33020997047424,65.2320861816406,5.11651849746704,1.16617429256439,65.337646484375,5.22120761871338\n        ,1.16582405567169,65.2580413818359,5.22784996032715,1.15485346317291,65.1838226318359,5.18234348297119,1.30968177318573\n        ,65.1623001098633,5.08121681213379,1.07950747013092,65.1546020507813,4.96049022674561,1.09411942958832,65.1320648193359\n        ,4.99228525161743,1.19628489017487,65.1498947143555,4.8596076965332,1.17167019844055,65.08154296875,4.89428281784058\n        ,1.21968996524811,65.0599975585938,4.96370887756348,1.11150693893433,65.1110458374023,5.0471043586731,0.960742354393005\n        ,65.3200454711914,5.3076319694519,0.964861273765564,65.2693252563477,5.27933168411255,0.967252373695374,65.2189712524414\n        ,5.2121376991272,0.887307524681091,65.2577362060547,5.27378177642822,0.933913707733154,65.1596832275391,5.01675939559937\n        ,0.940787792205811,65.1411590576172,5.05751657485962,0.953863739967346,65.1263656616211,5.11540555953979,1.46924197673798\n        ,65.1509399414063,4.98497533798218,1.42944991588593,65.0712814331055,4.97104835510254,0.726064443588257,65.1496200561523\n        ,4.99916076660156,0.723457217216492,65.1317138671875,5.055251121521,0.722915172576904,65.1126403808594,5.12641906738281\n        ,1.25722050666809,65.1121215820313,4.79240989685059,1.34165704250336,64.9907913208008,4.67870283126831,1.24571990966797\n        ,65.0443420410156,4.80092239379883,1.35468363761902,64.9573822021484,4.70028591156006,1.38346302509308,64.9460678100586\n        ,4.75443172454834,1.30107736587524,65.0216827392578,4.85702705383301,0.736445665359497,65.2196731567383,5.28496837615967\n        ,0.731112122535706,65.1628646850586,5.25378942489624,0.741668343544006,65.2620010375977,5.3127760887146,1.96044337749481\n        ,64.690673828125,4.54105854034424,1.89501965045929,64.8835220336914,4.63898515701294,1.75379693508148,64.8410415649414\n        ,4.64671897888184,1.81441962718964,65.1060791015625,4.74574422836304,1.74698913097382,64.9912109375,4.71846771240234\n        ,1.66675806045532,64.8422775268555,4.65543508529663,0.965164661407471,65.153450012207,5.1742115020752,0.887127876281738\n        ,65.155029296875,5.18276166915894,0.877623200416565,65.1300506591797,5.12379503250122,0.889152407646179,65.2081298828125\n        ,5.22853326797485,1.50251054763794,64.9516983032227,4.86895179748535,1.5572634935379,65.0263519287109,4.86247158050537\n        ,0.872787117958069,65.1376190185547,5.06298589706421,0.871499061584473,65.1556854248047,5.01519203186035,1.63267862796783\n        ,67.7908554077148,4.64664506912231,1.69053792953491,67.8132095336914,4.50846290588379,1.86208045482636,67.7431945800781\n        ,4.69083738327026,1.83597791194916,67.7311019897461,4.73373460769653,1.76971423625946,67.7824783325195,4.61141586303711\n        ,1.73197448253632,67.7678527832031,4.67666387557983,2.13273811340332,67.6600494384766,4.81347227096558,2.12690806388855\n        ,67.6821746826172,4.75571489334106,1.96110379695892,67.7085876464844,4.75144004821777,1.95040476322174,67.6890106201172\n        ,4.80746603012085,1.72490096092224,67.7901763916016,4.55446481704712,1.68810820579529,67.7942810058594,4.65519142150879\n        ,2.49819946289063,67.6858901977539,4.66664505004883,2.4681339263916,67.7000732421875,4.63317203521729,2.28982353210449\n        ,67.6699523925781,4.73800802230835,2.30699634552002,67.6478424072266,4.79213714599609,2.62672972679138,67.713996887207\n        ,4.50203514099121,2.57353758811951,67.7069091796875,4.58141613006592,2.5938196182251,67.7178802490234,4.47351264953613\n        ,2.54124069213867,67.7161407470703,4.55211734771729,4.17357540130615,67.8996047973633,0.509683907032013,4.1403603553772\n        ,67.6832962036133,0.449121415615082,4.08362770080566,67.3917999267578,0.414594709873199,3.90992999076843,67.4254379272461\n        ,0.725381076335907,3.94927668571472,67.6558380126953,0.792257249355316,3.97278380393982,67.8460464477539,0.8745236992836\n        ,3.58249139785767,67.4250793457031,2.43577671051025,3.66378712654114,67.4318084716797,2.07610011100769,3.74723982810974\n        ,67.8212814331055,1.85516107082367,3.53273034095764,67.8464584350586,2.72762513160706,1.81092512607574,66.1431884765625\n        ,4.87175035476685,1.85961425304413,66.0183639526367,4.79641628265381,1.91326582431793,65.90087890625,4.75100040435791\n        ,2.08881855010986,66.059196472168,4.75629425048828,2.08825278282166,66.1917037963867,4.80004692077637,1.99359023571014\n        ,66.2997894287109,4.83589601516724,2.36032509803772,64.3248443603516,3.86987996101379,2.44826078414917,64.6608505249023\n        ,3.97995185852051,1.96192157268524,66.8022384643555,4.73072004318237,1.8986679315567,66.6709976196289,4.79249000549316\n        ,2.14057230949402,66.5590744018555,4.63880014419556,2.24688816070557,66.7343597412109,4.70600175857544,1.51051247119904\n        ,66.0330352783203,4.97222995758057,1.56563603878021,66.0699157714844,4.92767810821533,1.4725159406662,66.2073516845703\n        ,5.01603746414185,1.53508925437927,65.9453430175781,4.91490650177002,1.59876596927643,65.9530487060547,4.86776781082153\n        ,1.6534435749054,66.0074615478516,4.72317504882813,1.61450529098511,66.1480941772461,4.80866765975952,1.52846145629883\n        ,66.2845687866211,4.95261716842651,1.64934742450714,66.4504470825195,4.95662689208984,1.72839331626892,66.3004608154297\n        ,4.91241359710693,2.52269864082336,66.3429107666016,4.25267505645752,2.51373910903931,66.1549377441406,4.08980846405029\n        ,2.73523330688477,66.1615371704102,3.90226435661316,2.77488350868225,66.3376922607422,4.05986309051514,2.54053902626038\n        ,65.1107788085938,3.88801002502441,2.54846215248108,65.2907028198242,3.96028590202332,2.5438380241394,65.4811019897461\n        ,4.03654479980469,2.39782929420471,66.1180648803711,4.27655076980591,2.37393355369568,66.3513565063477,4.38982439041138\n        ,2.27032828330994,65.1054763793945,4.40776538848877,2.23681831359863,65.2680511474609,4.47885704040527,2.41696572303772\n        ,65.0836639404297,4.25302076339722,2.37576246261597,65.2705078125,4.32173538208008,2.35369086265564,65.4496002197266\n        ,4.42240571975708,2.18725490570068,65.4226531982422,4.55194759368896,2.123694896698,65.5600128173828,4.6230206489563\n        ,2.28663229942322,65.5895919799805,4.51024770736694,1.51225531101227,66.5718231201172,5.021240234375,1.4161981344223\n        ,66.644889831543,5.12101936340332,1.42633509635925,66.3838272094727,5.06254053115845,1.53803825378418,66.6902465820313\n        ,5.0226263999939,1.42731106281281,66.7563400268555,5.11838150024414,1.65536999702454,66.6072387695313,4.95725440979004\n        ,1.67465090751648,66.7415084838867,4.94556093215942,1.54190278053284,66.8336715698242,5.00357246398926,1.39855873584747\n        ,66.9208526611328,5.12479829788208,1.47772538661957,66.2974624633789,5.09121799468994,2.59657120704651,65.133056640625\n        ,3.66636753082275,2.6109926700592,65.3053436279297,3.72980260848999,2.60834908485413,65.493782043457,3.801917552948\n        ,1.52033245563507,66.9799957275391,4.94045448303223,1.41880643367767,67.1096954345703,5.0534462928772,1.66209173202515\n        ,66.8697357177734,4.87027931213379,1.3919837474823,67.2366409301758,4.96968173980713,2.00205206871033,65.6056671142578\n        ,4.64997816085815,2.04608273506165,65.457763671875,4.57589817047119,2.27062916755676,64.3006744384766,4.06169319152832\n        ,2.32876181602478,64.6938705444336,4.19766807556152,2.52454304695129,65.6801376342773,4.10202598571777,2.1409318447113\n        ,66.399658203125,4.63131332397461,2.23282361030579,66.1752700805664,4.6105751991272,2.34595704078674,66.4882125854492\n        ,4.50150775909424,1.81751644611359,66.3587646484375,4.91359186172485,1.87995064258575,66.5447616577148,4.87719774246216\n        ,2.01660585403442,66.4501571655273,4.7698450088501,2.30044889450073,65.9848556518555,4.57546710968018,2.57980298995972\n        ,65.7074432373047,3.88146424293518,2.5665864944458,64.7896194458008,3.54475498199463,2.51294469833374,64.4948425292969\n        ,3.4874062538147,2.47084093093872,64.4197158813477,3.61557745933533,2.54000449180603,64.7240219116211,3.70111060142517\n        ,3.06965947151184,64.2413635253906,0.843061864376068,3.14307951927185,64.6348190307617,0.817125797271729,3.17030668258667\n        ,64.9766464233398,0.787583470344543,3.13940739631653,64.7505416870117,1.18672370910645,3.10409641265869,64.4562759399414\n        ,1.21933686733246,3.01130676269531,64.0785903930664,1.29110634326935,1.39091527462006,64.0119705200195,4.70452880859375\n        ,1.31462967395782,64.2487564086914,4.89590787887573,1.07064962387085,64.3344345092773,5.00004005432129,1.02853214740753\n        ,65.7345199584961,5.25804567337036,1.06206750869751,65.6524963378906,5.22237396240234,1.24704384803772,65.713996887207\n        ,5.1207423210144,1.19674646854401,65.7925643920898,5.18545246124268,1.11466372013092,68.5229339599609,5.42319107055664\n        ,2.63029646873474,64.9091415405273,3.35278916358948,2.58759641647339,64.4991760253906,3.2932140827179,2.89777517318726\n        ,64.9867172241211,3.18954491615295,1.0823005437851,66.739501953125,5.87417697906494,1.08765780925751,66.9091491699219\n        ,5.60021114349365,1.01002395153046,66.950798034668,5.78720188140869,1.01102554798126,66.7803955078125,5.93792963027954\n        ,1.1871634721756,66.6877212524414,5.68769645690918,1.01847362518311,67.1112899780273,5.6987509727478,0.917320609092712\n        ,67.1311950683594,5.73997926712036,0.90803050994873,66.9813232421875,5.82367610931396,1.02897262573242,67.2320785522461\n        ,5.63844585418701,0.925348520278931,67.2418899536133,5.68538045883179,1.82211816310883,68.3722305297852,5.38440036773682\n        ,1.72986388206482,68.3393173217773,5.39727163314819,1.85487186908722,68.5016860961914,5.35601806640625,1.75295293331146\n        ,68.4524688720703,5.38968372344971,2.18797636032104,70.2286682128906,4.76863861083984,2.26277923583984,69.8419494628906\n        ,4.76173734664917,2.30417919158936,70.1883010864258,4.6255316734314,2.20072603225708,69.5985870361328,4.84077930450439\n        ,2.32512545585632,69.4896392822266,4.79950618743896,2.43021702766418,69.7975463867188,4.73787498474121,2.46586561203003\n        ,70.1633682250977,4.48380565643311,1.7530769109726,63.2388000488281,3.47270965576172,1.88775670528412,63.3332633972168\n        ,3.50927734375,1.57975447177887,63.1699600219727,3.45405411720276,0.770951867103577,64.613410949707,5.26209306716919\n        ,0.785154342651367,64.7431182861328,5.36394596099854,0.955015659332275,64.5587005615234,5.17588186264038,0.956335425376892\n        ,64.7101593017578,5.32591438293457,3.32264757156372,65.618896484375,0.780253946781158,2.9574408531189,64.4738998413086\n        ,0.316204011440277,3.13376069068909,64.9198226928711,0.27761971950531,2.56642246246338,64.0481872558594,1.71757841110229\n        ,2.03027939796448,63.4526977539063,3.50485467910767,2.14873170852661,63.5934638977051,3.497230052948,2.46903705596924\n        ,70.7225952148438,4.26248502731323,2.84281134605408,70.6446990966797,3.84263586997986,3.21379804611206,65.3377227783203\n        ,1.1963357925415,3.20485281944275,65.93408203125,2.79245543479919,3.36020851135254,65.9955978393555,2.51856184005737\n        ,3.14592552185059,65.8635025024414,3.08585023880005,3.15856194496155,65.6592636108398,2.99970817565918,3.27241349220276\n        ,65.6984176635742,2.72795724868774,3.36723446846008,65.7419509887695,2.44129371643066,3.30855917930603,66.7898025512695\n        ,2.86580801010132,3.24830770492554,66.6402893066406,3.15281105041504,3.16916584968567,66.4040451049805,2.98576140403748\n        ,3.28029775619507,66.4961318969727,2.69506525993347,3.14309644699097,66.5459136962891,3.3976411819458,3.09399890899658\n        ,66.3121109008789,3.25750803947449,1.95557272434235,68.6751861572266,5.29672241210938,1.81888711452484,68.6034317016602\n        ,5.35073375701904,1.41024601459503,63.2141647338867,3.23758721351624,1.15360486507416,63.1664695739746,3.25049090385437\n        ,1.5957545042038,63.2730178833008,3.21871757507324,1.40879082679749,65.5020294189453,5.03400230407715,1.4037721157074\n        ,65.717414855957,4.9996542930603,1.19037282466888,65.4891662597656,5.20386838912964,2.60248494148254,68.8864212036133\n        ,4.85044574737549,2.64458465576172,69.0195922851563,4.74494361877441,2.36588907241821,68.9808120727539,4.96036577224731\n        ,2.346923828125,62.8495674133301,1.76874101161957,2.17040228843689,62.3400039672852,1.86332964897156,1.98219120502472\n        ,61.8262977600098,1.95655155181885,2.47003626823425,61.9436645507813,1.61649990081787,2.62941479682922,62.4789848327637\n        ,1.5250837802887,2.77312874794006,62.999870300293,1.44115698337555,1.41100990772247,65.8050079345703,5.01921081542969\n        ,1.53756165504456,65.7346725463867,4.91554641723633,1.54546129703522,65.830940246582,4.91062641143799,2.57974934577942\n        ,68.3915405273438,5.03086280822754,2.35975360870361,68.3460540771484,5.10343074798584,2.15034532546997,68.2842788696289\n        ,5.15059041976929,2.70931816101074,64.0672454833984,2.00770950317383,2.74843382835388,64.1253967285156,1.76698267459869\n        ,2.80714631080627,64.0711135864258,2.29739952087402,2.70221138000488,64.0294647216797,2.25056958198547,2.59571003913879\n        ,63.9650650024414,2.27302551269531,3.20630860328674,68.2135391235352,4.01540756225586,3.14722442626953,68.3423080444336\n        ,4.16961050033569,3.1775176525116,68.2282562255859,4.17364263534546,3.08311438560486,68.6121978759766,4.19453144073486\n        ,3.10557079315186,68.4193954467773,4.29816150665283,3.10166668891907,68.2396621704102,4.34590244293213,3.23239278793335\n        ,64.7937698364258,2.39909362792969,3.29830861091614,64.8190155029297,2.1781325340271,3.34556007385254,65.2663955688477\n        ,2.34464025497437,3.25028228759766,65.2071228027344,2.59141540527344,3.17798399925232,65.1101379394531,2.7619047164917\n        ,3.19209694862366,65.3329467773438,2.88725996017456,3.2748589515686,65.3408660888672,2.6292200088501,3.29173731803894\n        ,65.5005340576172,2.66720008850098,3.17430877685547,65.4842987060547,2.92708039283752,3.38223314285278,65.4999389648438\n        ,2.38008999824524,2.27588939666748,63.889762878418,3.51033973693848,2.60826468467712,64.0904006958008,3.14019298553467\n        ,2.49879050254822,63.9305763244629,3.14054346084595,2.41469717025757,63.8167266845703,3.07191205024719,2.6449613571167\n        ,63.9745788574219,2.7154438495636,2.74609088897705,69.5691452026367,4.54720497131348,2.79885339736938,69.8089599609375\n        ,4.50718355178833,2.83263349533081,70.1560897827148,4.24949645996094,1.66631972789764,64.006217956543,4.41115856170654\n        ,1.54344177246094,63.7823791503906,4.62629365921021,1.81746780872345,63.8232612609863,4.24533700942993,1.9330667257309\n        ,63.6909599304199,4.13855075836182,2.01452040672302,64.0820999145508,4.15035057067871,1.85161864757538,64.1769027709961\n        ,4.33584785461426,1.34827721118927,66.6312789916992,5.32681751251221,1.33312034606934,66.7119827270508,5.29776334762573\n        ,1.35957944393158,70.1682434082031,5.06434488296509,1.30751574039459,69.8131713867188,5.14138650894165,1.26131451129913\n        ,69.5302886962891,5.20147800445557,1.50465273857117,69.5750961303711,5.18930959701538,1.55817043781281,69.8395385742188\n        ,5.10909700393677,1.59938907623291,70.1610488891602,5.01129102706909,1.66334295272827,62.4444999694824,2.31862783432007\n        ,1.77151620388031,62.8890686035156,2.30940628051758,1.13388705253601,62.7269973754883,2.68523573875427,1.06157386302948\n        ,62.3579978942871,2.6658456325531,0.875809192657471,64.4096298217773,5.04039573669434,0.73970353603363,64.4352264404297\n        ,5.07188892364502,2.37753105163574,63.8615036010742,2.22751426696777,2.0526864528656,70.6333465576172,4.64314699172974\n        ,1.26074552536011,64.5021820068359,5.06837511062622,1.25899064540863,64.6928482055664,5.21327638626099,2.08650135993958\n        ,63.5699844360352,3.86548352241516,2.14077305793762,63.7161102294922,3.82737326622009,1.88180673122406,63.562198638916\n        ,4.20048427581787,1.29388749599457,65.8246231079102,5.18244791030884,1.27890062332153,65.787727355957,5.12692308425903\n        ,1.33551824092865,65.7642211914063,5.05971336364746,1.35508978366852,65.8358154296875,5.13893175125122,3.39741015434265\n        ,66.8426208496094,2.49798011779785,3.46531867980957,67.1295471191406,2.62615919113159,3.44804573059082,67.0955429077148\n        ,2.95263624191284,3.49114727973938,66.9027862548828,2.17869186401367,3.53133225440979,67.1750030517578,2.31824254989624\n        ,3.54556512832642,67.3944778442383,2.76397252082825,3.52769446372986,67.3619766235352,3.10120415687561,1.66327261924744\n        ,65.5175399780273,4.84837293624878,1.6486691236496,65.3879776000977,4.83345651626587,1.55714344978333,65.515739440918\n        ,4.91552543640137,1.54356360435486,65.3456115722656,4.96902656555176,1.64133775234222,65.2857055664063,4.88229322433472\n        ,1.15404975414276,63.0051612854004,3.69910192489624,0.901649951934814,62.9695129394531,3.68851327896118,1.29445350170136\n        ,61.6162147521973,2.3349986076355,1.49334478378296,62.0239295959473,2.32971668243408,0.939993143081665,61.9537353515625\n        ,2.60241937637329,0.790918231010437,61.5481300354004,2.5308837890625,3.40503931045532,66.5657043457031,2.41545963287354\n        ,3.4683039188385,66.6099319458008,2.1507716178894,2.08212614059448,69.3093414306641,4.99917554855347,2.20279026031494\n        ,69.3110733032227,4.92981052398682,2.05538940429688,64.3852386474609,4.33511734008789,2.02214121818542,64.6891555786133\n        ,4.49180173873901,2.51422572135925,68.1781311035156,4.93498277664185,2.74233198165894,68.1048965454102,4.74316835403442\n        ,1.33793914318085,67.9867706298828,4.83846712112427,1.26418793201447,67.9812622070313,4.88836717605591,1.72899913787842\n        ,70.4542999267578,4.86722230911255,1.88850796222687,70.4923553466797,4.80114221572876,1.91768753528595,70.4026031494141\n        ,4.83765125274658,2.48615074157715,70.5057220458984,4.35005807876587,2.77934885025024,70.4354629516602,4.04117774963379\n        ,2.17157745361328,63.5577545166016,3.01464104652405,2.0459156036377,63.459545135498,3.02176666259766,2.18099522590637\n        ,63.6124877929688,2.62947630882263,2.41914415359497,63.7559013366699,2.63658022880554,2.90074110031128,68.9421310424805\n        ,4.49496364593506,1.16719198226929,67.6541290283203,5.07088279724121,1.27261769771576,67.6515121459961,4.91043853759766\n        ,3.13415884971619,70.4025344848633,3.49547290802002,3.00836896896362,70.4687805175781,3.67086410522461,2.91557312011719\n        ,70.3788909912109,3.87965750694275,2.94108152389526,70.1115646362305,3.96969389915466,3.04004549980164,70.0819702148438\n        ,3.83000016212463,3.06503176689148,69.9759063720703,3.64700102806091,1.21417355537415,63.3148307800293,2.784184217453\n        ,1.19664418697357,63.1839752197266,2.73920702934265,1.54497134685516,63.3072853088379,2.56475400924683,1.544917345047\n        ,63.3785438537598,2.63877606391907,1.8416827917099,63.4582023620605,2.36375784873962,1.86531913280487,63.556941986084\n        ,2.4356997013092,3.27756834030151,65.7480545043945,1.49152147769928,3.32438254356384,65.7033843994141,1.57046961784363\n        ,3.2664635181427,65.4832916259766,1.54861390590668,3.21064281463623,65.5065155029297,1.46422207355499,3.38953733444214\n        ,65.7523956298828,1.67035269737244,3.1939902305603,65.2248687744141,1.5117518901825,3.15106582641602,65.218391418457\n        ,1.42323327064514,2.96880340576172,70.7074890136719,3.58743643760681,2.52766156196594,63.849910736084,2.67795538902283\n        ,2.29024934768677,63.691104888916,3.02464008331299,3.0556173324585,69.4313125610352,3.94278478622437,3.06104874610901\n        ,69.5194473266602,4.12069797515869,3.01978588104248,69.218147277832,4.19789600372314,3.04081892967224,69.1315231323242\n        ,4.02007246017456,3.00306487083435,69.5700912475586,4.27975177764893,2.95265007019043,69.285400390625,4.37552213668823\n        ,3.06109118461609,68.8921356201172,4.02935028076172,3.30373907089233,65.985221862793,0.823003649711609,3.37114906311035\n        ,66.3666000366211,0.88204824924469,3.40155816078186,66.1607513427734,1.27854585647583,3.2656843662262,65.7254486083984\n        ,1.23977637290955,2.15141582489014,65.8958358764648,4.68503475189209,1.97792518138886,65.7934494018555,4.71268367767334\n        ,3.27143931388855,68.2170104980469,3.46690511703491,3.36802220344543,68.1874542236328,3.12048625946045,3.40568804740906\n        ,68.5598831176758,3.17628622055054,3.36138033866882,68.5961532592773,3.37867641448975,3.28634023666382,68.7167587280273\n        ,3.6459379196167,1.36855494976044,68.0724639892578,5.07851886749268,1.47358274459839,68.0629501342773,5.07631206512451\n        ,1.28406882286072,68.0532379150391,4.89790439605713,1.43688583374023,68.0571365356445,4.88231134414673,1.58190584182739\n        ,68.1025772094727,4.88890886306763,1.62977468967438,68.1250610351563,5.0776162147522,1.33778488636017,67.7689437866211\n        ,4.77620267868042,1.05926036834717,67.4494552612305,5.43875932693481,0.754440307617188,65.3672866821289,5.28548049926758\n        ,0.751253128051758,65.6022720336914,5.25729703903198,2.17934894561768,64.3224639892578,4.21248769760132,1.71412336826324\n        ,65.0587615966797,4.75572490692139,1.75993835926056,65.1855773925781,4.76912593841553,0.916168451309204,65.6128005981445\n        ,5.28644561767578,0.956570863723755,65.4222259521484,5.28150510787964,2.82387208938599,64.2440795898438,1.60327672958374\n        ,2.71610569953918,64.1857147216797,1.54536700248718,2.8345205783844,64.3156814575195,1.42784821987152,2.91504144668579\n        ,64.4028472900391,1.50540399551392,1.73535168170929,63.4158134460449,2.767258644104,3.87476706504822,67.928092956543\n        ,1.76517486572266,3.80734848976135,67.7902603149414,1.86865186691284,4.00409650802612,68.1080474853516,1.55622589588165\n        ,3.87178349494934,67.9669494628906,1.71418404579163,2.21187043190002,64.6915817260742,4.3245325088501,1.09960293769836\n        ,61.2102317810059,2.32678270339966,0.913408160209656,60.8254432678223,2.30629253387451,1.22644782066345,63.2941818237305\n        ,2.93833780288696,1.50415539741516,63.3456764221191,2.85449743270874,1.91454017162323,63.3828811645508,3.22673344612122\n        ,2.04850459098816,63.4737892150879,3.21564912796021,1.19043982028961,68.0956802368164,5.25577878952026,1.15569794178009\n        ,68.12744140625,5.34178733825684,1.33125197887421,68.0929641723633,5.26610374450684,1.27669787406921,68.1236801147461\n        ,5.34426927566528,1.81892287731171,65.3533172607422,4.75283145904541,1.83351361751556,65.5049514770508,4.74560260772705\n        ,0.489630132913589,60.8192939758301,2.44391441345215,0.636119484901428,61.1750755310059,2.48716497421265,1.72115516662598\n        ,68.2012634277344,5.27561855316162,1.81343591213226,68.2175674438477,5.25443077087402,3.61724925041199,66.9714813232422\n        ,1.93237948417664,3.63002371788025,67.0168075561523,1.87830793857574,3.65537023544312,67.2072143554688,1.95941495895386\n        ,3.6320812702179,67.1999359130859,2.02898907661438,3.66461253166199,67.1989288330078,1.90811610221863,3.60759997367859\n        ,67.0121231079102,1.8292031288147,3.66415858268738,67.1588439941406,1.85774981975555,3.70364260673523,67.4279174804688\n        ,1.99589407444,3.74132084846497,67.3983764648438,1.94340825080872,3.75281167030334,67.6230087280273,1.95619535446167\n        ,2.81532144546509,68.0492401123047,4.63717555999756,2.85496854782104,68.0031509399414,4.55038499832153,1.60250473022461\n        ,68.6735763549805,5.25675439834595,1.5099128484726,68.4110488891602,5.39070510864258,1.36978161334991,68.8145217895508\n        ,5.41693639755249,1.41716694831848,68.6838989257813,5.43790340423584,3.23023343086243,70.1785354614258,3.18463897705078\n        ,1.2082679271698,66.9643630981445,5.39298105239868,1.21866321563721,67.0920944213867,5.29832220077515,1.27707099914551\n        ,66.8820114135742,5.35456275939941,1.27629065513611,67.0180816650391,5.278151512146,1.4946049451828,64.4533767700195\n        ,4.85514402389526,1.45980274677277,64.6893997192383,5.04266023635864,1.43082308769226,69.2890243530273,5.24512767791748\n        ,2.76308536529541,67.9503479003906,4.64143562316895,2.80748581886292,67.9118423461914,4.56407785415649,2.69727182388306\n        ,67.9980316162109,4.73916387557983,2.77209401130676,67.8514709472656,4.54306507110596,3.1554057598114,69.8255310058594\n        ,3.3562445640564,3.21396946907043,69.7456893920898,3.1201605796814,2.96959733963013,66.3964309692383,3.77987670898438\n        ,3.06027674674988,66.4596405029297,3.60809707641602,3.12278532981873,66.7135238647461,3.79585146903992,3.035489320755\n        ,66.616813659668,3.96194195747375,3.22859811782837,66.8069839477539,3.62145400047302,3.25045347213745,67.1485061645508\n        ,3.91712236404419,3.20148730278015,66.953125,4.02498865127563,3.10689544677734,66.8664321899414,4.21319150924683,3.04706168174744\n        ,64.7684555053711,1.37625753879547,3.36234951019287,68.9172592163086,3.1843159198761,3.23758554458618,69.0889282226563\n        ,3.32570433616638,2.73865675926209,64.0937805175781,1.47130036354065,2.44877791404724,68.0812683105469,4.80997705459595\n        ,2.31137037277222,68.1344299316406,4.86483573913574,2.33828735351563,68.1263580322266,4.97409057617188,2.17115354537964\n        ,68.1592559814453,5.01532745361328,2.49606013298035,68.0793762207031,4.9183349609375,2.33080887794495,68.2026672363281\n        ,5.00495862960815,1.6921523809433,64.4372634887695,4.59270191192627,3.12855386734009,64.4140548706055,2.02637028694153\n        ,3.00002670288086,64.2794342041016,1.9327564239502,3.05478620529175,64.3649063110352,1.79543006420136,3.16064596176147\n        ,64.4679489135742,1.88507044315338,3.10378193855286,64.4913864135742,1.70813536643982,3.16189479827881,64.5378875732422\n        ,1.79301404953003,1.88884961605072,64.4099655151367,4.4384651184082,2.43658375740051,68.7276382446289,5.05807542800903\n        ,2.60550928115845,68.6477127075195,5.03396940231323,2.62770128250122,68.7658843994141,4.94138765335083,2.4056396484375\n        ,68.6070098876953,5.12689208984375,2.38367676734924,68.5143890380859,5.15268611907959,2.24653244018555,68.5764846801758\n        ,5.18992710113525,1.80867230892181,69.8361434936523,5.04644918441772,1.86460244655609,70.1591415405273,4.91810512542725\n        ,1.75314748287201,69.5746459960938,5.16978740692139,3.37677645683289,65.7449111938477,1.77825689315796,3.39073538780212\n        ,65.5126647949219,1.73714506626129,3.40116405487061,65.8993225097656,1.76968371868134,3.39961576461792,65.8093719482422\n        ,1.91650032997131,3.40984797477722,65.5266418457031,1.88468360900879,3.37290668487549,65.2781295776367,1.82793116569519\n        ,3.33846926689148,65.2658081054688,1.68715047836304,1.58690357208252,64.180534362793,4.67527723312378,3.42349815368652\n        ,65.7735061645508,2.17199325561523,3.43665051460266,65.5146026611328,2.10313749313354,3.40644407272339,65.2755355834961\n        ,2.05098104476929,2.90480470657349,63.5421180725098,1.35813617706299,2.5005624294281,63.3518524169922,1.66328740119934\n        ,2.97416019439697,63.6044006347656,-0.43002325296402,3.04686117172241,63.9600830078125,-0.435582518577576,2.91562366485596\n        ,63.574951171875,0.32672530412674,2.86793184280396,63.0844421386719,0.314177632331848,2.88664984703064,62.5844268798828\n        ,0.291136026382446,3.26654148101807,64.8482055664063,1.78163802623749,3.21196222305298,64.8382339477539,1.65136682987213\n        ,2.5964367389679,64.3092498779297,3.22612452507019,3.11429333686829,64.3584213256836,2.21885251998901,2.96850609779358\n        ,64.2104949951172,2.12399363517761,2.93605613708496,64.1646041870117,2.3562159538269,2.7786602973938,66.5487518310547\n        ,4.20106410980225,2.79840517044067,66.7352828979492,4.35227203369141,2.8922290802002,68.5589828491211,4.74051427841187\n        ,2.88598251342773,68.7056045532227,4.64938116073608,2.65196180343628,65.2107467651367,3.4514377117157,2.66340517997742\n        ,65.3679428100586,3.5083863735199,2.81611132621765,65.2712554931641,3.22248196601868,2.83819365501404,65.4268035888672\n        ,3.29421615600586,2.83722853660584,65.595947265625,3.34694361686707,2.67875480651855,65.5446090698242,3.5787661075592\n        ,0.938983798027039,67.442985534668,5.49931669235229,1.68217599391937,67.8480529785156,4.50526905059814,1.58377194404602\n        ,67.7971115112305,4.58396673202515,3.06999850273132,69.7514114379883,3.80261707305908,3.03709864616394,69.8179168701172\n        ,3.96939754486084,2.99018239974976,69.8608093261719,4.12396812438965,3.88476777076721,67.6038284301758,1.9052711725235\n        ,3.01904988288879,68.7829437255859,4.34590721130371,3.07396841049194,68.7755737304688,4.16320896148682,3.2163782119751\n        ,64.5644302368164,2.31587195396423,3.25280594825745,64.5963668823242,2.11069822311401,2.78232908248901,64.0797348022461\n        ,2.77608585357666,2.87242197990417,64.1171722412109,2.57528614997864,2.76459431648254,64.0357437133789,2.5068883895874\n        ,0.882707834243774,65.685432434082,5.30712938308716,2.95145273208618,68.2043228149414,4.61653709411621,2.87497973442078\n        ,68.3008270263672,4.81145000457764,2.99823188781738,68.1043395996094,4.45682430267334,0.903877377510071,66.8075485229492\n        ,5.97392654418945,3.03742647171021,68.507209777832,4.50008964538574,3.052649974823,68.3731079101563,4.57572746276855\n        ,1.35172784328461,68.1202011108398,5.33629560470581,1.47764658927917,68.1094818115234,5.31640863418579,0.76178765296936\n        ,65.7061004638672,5.31858825683594,0.824543237686157,65.6856994628906,5.32374954223633,1.34113502502441,63.1208915710449\n        ,3.45176196098328,1.06281006336212,63.0850524902344,3.45769143104553,3.0163848400116,68.0236511230469,4.37825489044189\n        ,3.0504937171936,68.0117492675781,4.33377456665039,2.45020818710327,66.7837905883789,4.61369800567627,2.50105261802673\n        ,66.6580581665039,4.54786014556885,0.871286630630493,65.6000442504883,5.2877836227417,0.786885976791382,65.7970123291016\n        ,5.37989950180054,3.39077138900757,67.8872375488281,3.30874085426331,3.32414698600769,67.8638610839844,3.53729343414307\n        ,3.27949452400208,67.6229629516602,3.69277310371399,3.39195346832275,67.6552505493164,3.43329548835754,3.45178842544556\n        ,67.695068359375,3.22621893882751,2.68379044532776,62.1163673400879,1.00694859027863,2.79847860336304,62.7099494934082\n        ,0.950812101364136,2.92852449417114,63.2620849609375,0.910539209842682,1.73240518569946,63.5957183837891,4.44465970993042\n        ,0.896305441856384,65.3989562988281,5.28903579711914,1.31565749645233,66.8515472412109,5.29576349258423,3.00862669944763\n        ,63.7789497375488,0.875749468803406,2.13105821609497,60.8295783996582,1.85507833957672,2.29136896133423,61.3581352233887\n        ,1.72197782993317,1.79348528385162,61.3115463256836,2.0579137802124,1.61798405647278,60.8387413024902,2.17369174957275\n        ,0.888431429862976,65.2999801635742,5.30810165405273,1.71592605113983,69.0375595092773,5.2174654006958,1.49462974071503\n        ,68.2459716796875,5.42839813232422,1.36418902873993,68.2601013183594,5.4384617805481,2.94529867172241,64.0302200317383\n        ,0.325349271297455,3.04379439353943,65.6097946166992,3.24336194992065,3.04610061645508,65.4405670166016,3.16522622108459\n        ,3.07062745094299,65.2881851196289,3.12842082977295,3.11933541297913,67.3169555664063,4.01220989227295,3.1252748966217\n        ,67.4251403808594,4.00630378723145,3.06806111335754,67.3184967041016,4.11027336120605,1.75952875614166,68.1481475830078\n        ,5.08462238311768,1.88930642604828,68.1446228027344,5.05054712295532,1.76840484142303,68.1653518676758,5.10388898849487\n        ,2.99754190444946,67.5693283081055,4.18719387054443,3.12188291549683,67.479606628418,4.05562591552734,3.10169529914856\n        ,67.5793075561523,4.05587005615234,3.31551313400269,66.9119186401367,3.41480135917664,3.40057134628296,67.0184936523438\n        ,3.25194454193115,3.3433620929718,67.3507537841797,3.63195514678955,3.30712413787842,67.1692810058594,3.66730928421021\n        ,3.62881422042847,66.8468246459961,1.67702209949493,3.67381048202515,66.8385696411133,1.69646668434143,3.65914416313171\n        ,66.7378997802734,1.63139164447784,3.60834813117981,66.7475128173828,1.61311852931976,3.68108868598938,66.820442199707\n        ,1.7398294210434,3.66513466835022,66.7122192382813,1.6777651309967,3.57989692687988,66.4964752197266,1.61093735694885\n        ,3.58889770507813,66.5416641235352,1.58230996131897,3.51673626899719,66.3922271728516,1.59728240966797,3.54323554039001\n        ,66.521728515625,1.57222628593445,3.39948201179504,66.0840225219727,2.22889304161072,3.4275176525116,66.0860824584961\n        ,2.01125836372375,3.42608070373535,66.1682968139648,1.85465395450592,3.02907490730286,65.8121948242188,3.32732510566711\n        ,2.87969517707825,65.7975540161133,3.43260478973389,1.95452749729156,64.9040222167969,4.5913233757019,1.9281359910965\n        ,65.1237182617188,4.64037895202637,3.08949017524719,65.0258865356445,3.021568775177,2.67047142982483,65.7588806152344\n        ,3.65310835838318,3.12394952774048,64.4121551513672,-0.425189852714539,2.14358901977539,64.9229049682617,4.41373920440674\n        ,2.11716294288635,65.1423263549805,4.47160339355469,3.21812272071838,64.6609420776367,1.7886575460434,3.25343632698059\n        ,64.6347808837891,1.93096566200256,3.31948947906494,64.8364486694336,1.96334993839264,1.27868580818176,68.5230865478516\n        ,5.48906517028809,3.08508467674255,64.7949295043945,1.45506238937378,3.02310347557068,66.2411422729492,3.48426175117493\n        ,2.94506549835205,66.185188293457,3.66328954696655,3.43415141105652,66.1334075927734,1.70569670200348,3.40694761276245\n        ,66.0004730224609,1.81116831302643,3.42804837226868,65.9448547363281,1.70346283912659,3.75594592094421,66.8347854614258\n        ,0.707662761211395,3.84257817268372,67.1626129150391,0.687342405319214,3.99951863288879,67.0531005859375,0.404798299074173\n        ,3.89515900611877,66.6228866577148,0.451429814100266,2.89523768424988,67.8790054321289,4.44507217407227,2.87735891342163\n        ,67.9539031982422,4.47966957092285,3.44882583618164,67.3555145263672,3.33902382850647,3.23236560821533,68.1426696777344\n        ,3.73330855369568,3.12400317192078,68.4818954467773,3.87935709953308,3.17323422431946,68.5466842651367,3.73494172096252\n        ,3.17530918121338,68.6816024780273,3.91267061233521,3.11129069328308,68.6374282836914,4.03024244308472,3.44718813896179\n        ,67.8984298706055,3.05363130569458,3.49256610870361,67.7516098022461,2.98532676696777,4.19071578979492,68.0595779418945\n        ,0.595690429210663,4.13797330856323,68.1803588867188,0.767984509468079,4.07051801681519,68.0346984863281,0.785980641841888\n        ,1.21203315258026,68.0851211547852,5.18104791641235,1.36357915401459,68.0735702514648,5.15914058685303,3.15585994720459\n        ,64.651237487793,1.66438138484955,3.00136947631836,64.5917129516602,1.46235930919647,2.96417832374573,64.5486755371094\n        ,1.38484394550323,1.9572046995163,65.494743347168,4.64888525009155,3.87331128120422,67.4057464599609,1.86234366893768\n        ,3.94303107261658,67.5915451049805,1.86879432201386,4.02576684951782,67.7782363891602,1.8133624792099,3.96108222007751\n        ,67.7949905395508,1.83986985683441,3.44512820243835,66.4780807495117,1.56252491474152,3.43452668190002,66.544075012207\n        ,1.56754410266876,4.16763210296631,67.3066482543945,0.752300679683685,4.20861339569092,67.4810333251953,0.767211616039276\n        ,4.22824621200562,67.6161880493164,0.803533613681793,4.31191396713257,67.4798049926758,0.92854231595993,4.27010297775269\n        ,67.3647155761719,0.873295187950134,4.22759103775024,67.2292633056641,0.857036769390106,3.96591925621033,67.3817825317383\n        ,1.17504632472992,3.84721398353577,67.2841262817383,1.23387622833252,3.73140645027161,67.1730880737305,1.3115656375885\n        ,3.84368395805359,67.1692886352539,1.13736081123352,3.9296715259552,67.2579803466797,1.06381285190582,4.02764272689819\n        ,67.3290405273438,1.01120853424072,3.62845778465271,65.8809585571289,1.46909356117249,3.58848738670349,66.1250152587891\n        ,1.52465927600861,3.46977925300598,65.8928146362305,1.62517940998077,3.54804134368896,65.7373275756836,1.51209759712219\n        ,3.69628596305847,65.9059600830078,1.3513650894165,3.72170567512512,66.0722503662109,1.36401319503784,3.63475179672241\n        ,65.7507247924805,1.33598518371582,3.80204892158508,67.4645614624023,1.6423020362854,3.81955742835999,67.4326095581055\n        ,1.54928922653198,3.89767050743103,67.5244903564453,1.53833293914795,3.84696125984192,67.4156188964844,1.44847130775452\n        ,3.98500466346741,67.5406188964844,1.42541027069092,3.5180983543396,66.2538375854492,1.59009373188019,3.46437072753906\n        ,66.3058853149414,1.68118560314178,3.52468132972717,66.3413772583008,1.55722069740295,3.48903250694275,66.0722503662109\n        ,1.62239384651184,3.5735285282135,66.2663726806641,1.51193714141846,3.35272622108459,65.8405303955078,1.48823237419128\n        ,3.39298939704895,65.8021926879883,1.53717470169067,3.41420316696167,65.7718048095703,1.38643348217011,3.46366572380066\n        ,65.758544921875,1.45361733436584,3.44315075874329,65.7761459350586,1.59451007843018,4.12264156341553,67.9515380859375\n        ,1.69186997413635,4.04694747924805,67.9766082763672,1.70980203151703,4.21951961517334,68.0857162475586,1.5204074382782\n        ,4.13125371932983,68.1192398071289,1.530766248703,4.36612987518311,68.1797943115234,1.10023164749146,4.25924062728882\n        ,68.2200164794922,1.09791100025177,4.1071252822876,68.2164459228516,1.04108142852783,4.32454586029053,68.07080078125\n        ,0.573556303977966,4.3097767829895,67.9047622680664,0.469022572040558,4.31919193267822,68.1753234863281,0.716215848922729\n        ,4.42688226699829,68.1401824951172,0.726928353309631,4.43175458908081,68.043342590332,0.591847240924835,4.41548633575439\n        ,67.8843612670898,0.494797825813293,4.30114936828613,67.3556518554688,0.410873055458069,4.20437002182007,67.3710784912109\n        ,0.377230167388916,4.27088451385498,67.6760330200195,0.405537307262421,4.37260341644287,67.6578216552734,0.435535669326782\n        ,3.8642098903656,65.9823837280273,0.817893385887146,3.77061247825623,65.9289932250977,0.778227150440216,3.87505173683167\n        ,66.1986083984375,0.589296579360962,3.96625018119812,66.2316131591797,0.632395684719086,3.69940090179443,66.0262451171875\n        ,0.751195728778839,3.79279160499573,66.2544708251953,0.578169524669647,3.9935986995697,66.5801467895508,0.438086152076721\n        ,4.08373022079468,66.5898590087891,0.481809765100479,3.54882621765137,65.7025451660156,1.30097436904907,3.47937512397766\n        ,65.772590637207,1.25227952003479,3.581782579422,66.3640899658203,0.962329745292664,3.96330523490906,67.5897827148438\n        ,1.79621553421021,4.04697608947754,67.7592926025391,1.7442946434021,3.89645266532898,67.4201278686523,1.79242742061615\n        ,3.8892285823822,67.4412078857422,1.7214183807373,3.94782614707947,67.5932006835938,1.7199592590332,4.02466678619385\n        ,67.7432250976563,1.66987860202789,4.1498556137085,67.9110260009766,1.63450610637665,4.2531623840332,68.0256195068359\n        ,1.48009717464447,4.12253856658936,67.8726043701172,1.5736631155014,4.22431135177612,67.9674606323242,1.43996977806091\n        ,3.6584689617157,67.0526580810547,1.73420250415802,3.70589375495911,67.2161331176758,1.85662436485291,3.77640986442566\n        ,67.0984420776367,1.69524645805359,3.81549096107483,67.2351303100586,1.79819941520691,3.84403109550476,67.2678833007813\n        ,1.73510146141052,3.81034016609192,67.1487045288086,1.63960492610931,3.81980538368225,67.2020645141602,1.58304333686829\n        ,3.8460910320282,67.3059692382813,1.67176628112793,3.62339448928833,66.9600143432617,1.55528903007507,3.54900121688843\n        ,66.8945693969727,1.52178120613098,3.6070408821106,66.8924865722656,1.46785020828247,3.68474149703979,66.9038314819336\n        ,1.43001317977905,3.76875758171082,66.9739532470703,1.43453121185303,3.76291394233704,67.0144805908203,1.57237350940704\n        ,3.80492234230042,67.0476531982422,1.38833773136139,3.79968523979187,67.0783081054688,1.52131009101868,3.81678700447083\n        ,67.1221084594727,1.34357035160065,3.81176257133484,67.1440734863281,1.46728658676147,3.50874066352844,66.8785171508789\n        ,1.61766111850739,3.4727201461792,66.7689819335938,1.55034828186035,3.51999497413635,66.7786865234375,1.45502161979675\n        ,3.5054178237915,66.8579483032227,1.6944785118103,3.46841979026794,66.7569046020508,1.63060021400452,3.58814311027527\n        ,66.776741027832,1.40819585323334,3.807368516922,66.9411163330078,1.14656984806061,3.84839510917664,67.056884765625\n        ,1.12197256088257,3.43414974212646,66.544807434082,1.51670002937317,3.44125318527222,66.4587707519531,1.53559422492981\n        ,3.47409510612488,66.4686737060547,1.48404669761658,3.4670684337616,66.5475540161133,1.45423448085785,4.38141489028931\n        ,67.7970275878906,0.625199139118195,4.34833574295044,67.6143646240234,0.588272631168365,4.38872814178467,67.6345138549805\n        ,0.510305225849152,4.42740917205811,67.841178894043,0.558445572853088,4.2903265953064,67.3601684570313,0.577212631702423\n        ,4.32288837432861,67.3539276123047,0.49212783575058,4.38653898239136,67.9980850219727,0.787152171134949,4.38902473449707\n        ,67.9229583740234,0.688140153884888,4.43982934951782,67.9834518432617,0.637882053852081,4.43614435195923,68.0685043334961\n        ,0.75418084859848,4.23430633544922,67.7607574462891,0.679528534412384,4.24083995819092,67.8800277709961,0.740421533584595\n        ,4.23906660079956,67.9548034667969,0.840360522270203,4.19893836975098,67.6024551391602,0.648272752761841,4.14131736755371\n        ,67.3782043457031,0.647528231143951,4.23399543762207,67.748893737793,0.875052452087402,4.23211860656738,67.8589401245117\n        ,0.968259572982788,4.27247667312622,67.753776550293,1.0994166135788,4.31989812850952,67.6349105834961,0.991671323776245\n        ,4.02612638473511,67.1929244995117,0.955600678920746,3.97565674781799,67.0437240600586,0.957537412643433,3.90903830528259\n        ,66.8881912231445,0.988696575164795,4.06195783615112,66.8649139404297,0.899783492088318,4.15113639831543,67.0703430175781\n        ,0.85826051235199,4.23475360870361,67.6988067626953,1.12792015075684,4.17958831787109,67.5111541748047,1.15129017829895\n        ,3.79353785514832,67.3299026489258,1.47933793067932,3.81423401832581,67.3028945922852,1.36028480529785,3.78962540626526\n        ,67.3689498901367,1.5551506280899,3.90460419654846,67.3995056152344,1.31119799613953,3.75604748725891,67.24462890625\n        ,1.52793085575104,3.7315526008606,67.1935272216797,1.42468738555908,3.77796149253845,67.3406295776367,1.60282015800476\n        ,3.87115454673767,67.7310028076172,1.6006715297699,3.8330671787262,67.5994567871094,1.63931965827942,3.99071335792542\n        ,67.9273452758789,1.4354612827301,3.91644883155823,67.8448715209961,1.53315281867981,4.22433996200562,67.9758987426758\n        ,1.1544588804245,4.37294626235962,68.028694152832,1.10267627239227,4.39809846878052,68.1035537719727,1.09824275970459\n        ,4.42650461196899,68.103515625,0.912913143634796,4.40633726119995,68.1802520751953,0.900287568569183,4.38934421539307\n        ,68.0283737182617,0.932290434837341,3.93147158622742,66.1487808227539,0.884068429470062,3.85331177711487,66.0361099243164\n        ,1.0461950302124,3.78953862190247,65.8569183349609,0.989757895469666,3.96036219596863,66.3272476196289,0.950800895690918\n        ,3.87919926643372,66.2271347045898,1.10150444507599,4.0231728553772,66.348518371582,0.708833396434784,4.03828191757202\n        ,66.4771881103516,0.78782194852829,4.12526702880859,66.6488571166992,0.565632522106171,4.12027359008789,66.7189025878906\n        ,0.653512239456177,3.99896168708801,66.7890167236328,0.74941873550415,3.94511961936951,66.5834579467773,0.875204086303711\n        ,3.89214205741882,66.4620132446289,1.02080261707306,3.65220642089844,66.1826477050781,1.42512059211731,3.6650333404541\n        ,66.3706741333008,1.42390918731689,3.8919985294342,67.7197341918945,1.52481913566589,4.08569812774658,67.5328598022461\n        ,1.28870582580566,4.10027456283569,67.7684555053711,1.27417016029358,4.15168952941895,67.8459701538086,1.24676203727722\n        ,3.9676787853241,67.8103256225586,1.41776275634766,3.99032139778137,66.7081985473633,0.999640047550201,3.92440438270569\n        ,66.5994186401367,1.12194168567657,3.82049965858459,66.3747329711914,1.15423321723938,3.85150742530823,66.5263061523438\n        ,1.23127043247223,3.55067896842957,66.5179595947266,1.42015624046326,3.77352738380432,66.8165588378906,1.15687823295593\n        ,3.78132176399231,66.7271575927734,1.16200530529022,3.8440535068512,66.7906646728516,1.06329357624054,3.72218108177185\n        ,66.7941589355469,1.26367807388306,3.72475647926331,66.6822204589844,1.25772345066071,3.7447817325592,66.8978118896484\n        ,1.28288722038269,4.10149478912354,67.1040878295898,0.743085324764252,4.07173776626587,67.109619140625,0.676203727722168\n        ,4.21170806884766,67.068962097168,0.589853882789612,4.23256063461304,67.0365829467773,0.500688910484314,4.2025899887085\n        ,67.0144882202148,0.415823400020599,4.11017560958862,67.0213012695313,0.376402735710144,3.61900401115417,67.0411911010742\n        ,1.7905125617981,4.22887229919434,67.9261016845703,1.06965661048889,3.90949845314026,67.8031692504883,1.50299596786499\n        ,4.04360151290894,67.2837524414063,0.968169152736664,3.52845144271851,66.807975769043,1.99678945541382,3.49707794189453\n        ,66.6140747070313,1.96261894702911,1.38582074642181,70.3855285644531,5.0009617805481,3.60986256599426,66.6596984863281\n        ,1.74299871921539,3.63856530189514,66.7910919189453,1.79739606380463,3.55062937736511,66.4580001831055,1.65329933166504\n        ,1.19366502761841,65.2249298095703,4.85610389709473,1.0756311416626,65.1947250366211,4.9448094367981,1.08035385608673\n        ,65.2848892211914,4.93593168258667,1.20033538341522,65.3307418823242,4.86212158203125,0.934173107147217,65.275016784668\n        ,4.98282194137573,0.931443929672241,65.1937103271484,4.99565315246582,0.733690142631531,65.273567199707,4.97549915313721\n        ,0.728435397148132,65.1870880126953,4.97911643981934,1.36970221996307,65.2229843139648,4.72263145446777,1.26224589347839\n        ,65.2212066650391,4.81006860733032,1.34426963329315,65.4023818969727,4.81390333175659,1.48638927936554,65.4760208129883\n        ,4.74349927902222,0.87395191192627,65.2709426879883,4.98687171936035,0.871021270751953,65.1897125244141,4.9949426651001\n        ,1.40152037143707,64.8109817504883,4.70733404159546,1.41142177581787,64.882698059082,4.72538137435913,1.47247123718262\n        ,64.828369140625,4.59658479690552,1.47469854354858,64.7096939086914,4.5597128868103,1.49344825744629,64.6655349731445\n        ,4.56101655960083,1.51618897914886,64.7853393554688,4.55397367477417,1.69742560386658,64.8928680419922,4.15867900848389\n        ,1.67222082614899,64.7719802856445,4.31696891784668,1.6290580034256,64.8013305664063,4.36196804046631,1.57378756999969\n        ,64.9139556884766,4.40134048461914,1.55398416519165,64.8053512573242,4.46878147125244,1.47806465625763,64.9342193603516\n        ,4.51615619659424,1.71596801280975,64.5329208374023,4.18517351150513,1.70165550708771,64.2728500366211,4.13927602767944\n        ,1.59862303733826,64.0150375366211,4.11862373352051,1.58835256099701,64.6118316650391,4.4310302734375,2.16316890716553\n        ,65.0206298828125,2.56838035583496,1.96401083469391,64.9684829711914,3.39649748802185,1.9987086057663,65.3854217529297\n        ,3.37620663642883,2.16594982147217,65.4886856079102,2.55456161499023,1.84000194072723,65.2910003662109,4.03854179382324\n        ,1.90293252468109,65.7236785888672,4.02813720703125,2.0213098526001,65.8256301879883,3.36226153373718,2.13319611549377\n        ,65.9246063232422,2.55418252944946,1.79898393154144,64.1050491333008,3.66027426719666,1.79431402683258,63.91064453125\n        ,3.43513488769531,1.89816915988922,64.2348022460938,3.42101287841797,1.96954953670502,64.0471496582031,2.82804870605469\n        ,2.09718370437622,65.3103561401367,4.51487350463867,2.30125498771667,64.9214782714844,4.33400440216064,2.42373561859131\n        ,64.8997650146484,4.166428565979,2.52821660041809,64.9293899536133,3.81001329421997,2.57886266708374,64.9627914428711\n        ,3.6042468547821,2.8619487285614,65.1285095214844,3.20917820930481,2.63870978355408,65.0624465942383,3.40243268013\n        ,3.07463717460632,65.1601791381836,3.07438635826111,3.18227171897888,65.2159042358398,2.85541558265686,2.66716241836548\n        ,67.9635620117188,4.63999700546265,2.70216584205627,67.9023666381836,4.55283260345459,2.73243880271912,67.8296508789063\n        ,4.47092199325562,2.30487561225891,68.0841827392578,4.85247802734375,2.43493890762329,68.0320129394531,4.79486036300659\n        ,2.62153291702271,67.8830718994141,4.63614368438721,2.66734838485718,67.8346939086914,4.57017517089844,2.69487380981445\n        ,67.781364440918,4.51345729827881,2.75075697898865,67.7393798828125,4.41219806671143,2.71137380599976,67.7354278564453\n        ,4.45894527435303,1.4422105550766,68.006217956543,4.83119010925293,1.57590889930725,68.0727996826172,4.84237146377563\n        ,4.24951314926147,67.9796752929688,0.988760828971863,4.14486789703369,68.2400207519531,0.891078293323517,4.29771661758423\n        ,68.2195129394531,0.894079685211182,3.69419884681702,65.7953414916992,0.954218089580536,3.62183690071106,65.8902282714844\n        ,0.920439660549164,1.26706755161285,66.6091918945313,5.56980037689209,1.27517330646515,66.7994613647461,5.39773750305176\n        ,1.09651041030884,67.0683746337891,5.49785852432251,1.11143863201141,67.1923751831055,5.40110492706299,2.7501916885376\n        ,66.9078903198242,4.41789484024048,2.96971368789673,67.0416793823242,4.24683427810669,2.90063047409058,67.1711959838867\n        ,4.28111696243286,2.85137224197388,67.1216125488281,4.30856609344482,1.16678643226624,63.2754364013672,4.54892730712891\n        ,1.09948623180389,63.1225090026855,4.3932728767395,3.52014875411987,66.5681915283203,1.41023874282837,2.81077241897583\n        ,67.5875396728516,4.35087585449219,2.84671950340271,67.6490783691406,4.36929512023926,2.91685771942139,67.739143371582\n        ,4.34629249572754,2.14950728416443,68.2113342285156,5.06157875061035,1.88744533061981,67.7128448486328,4.7761607170105\n        ,1.90658605098724,67.7306594848633,4.72575330734253,2.66684770584106,67.666862487793,4.40541458129883,2.63094758987427\n        ,67.6649475097656,4.37922382354736,2.64179491996765,67.6679153442383,4.34329414367676,2.63837647438049,67.6569290161133\n        ,4.35390377044678,2.67725443840027,67.6459045410156,4.37598991394043,2.68379712104797,67.645393371582,4.36187076568604\n        ,2.70340514183044,67.6281814575195,4.39374732971191,2.68375492095947,67.6604156494141,4.36853933334351,2.63108110427856\n        ,67.6936798095703,4.37489652633667,2.67721843719482,67.6891937255859,4.39469718933105,2.66379165649414,67.723503112793\n        ,4.43931007385254,2.64891314506531,67.7717742919922,4.49245023727417,2.60378289222717,67.7730255126953,4.47100353240967\n        ,2.62222838401794,67.7251586914063,4.41901969909668,2.62578678131104,67.8282318115234,4.544997215271,2.58604288101196\n        ,67.8818740844727,4.60464668273926,2.55071640014648,67.8828201293945,4.57306337356567,2.58477163314819,67.8289108276367\n        ,4.51952791213989,2.41274118423462,68.0263519287109,4.7476634979248,2.39053511619568,68.0205841064453,4.70046854019165\n        ,2.29294395446777,68.0722198486328,4.79652309417725,2.16190576553345,68.1005783081055,4.81578254699707,2.16114211082459\n        ,68.0834503173828,4.75154447555542,2.28100919723511,68.0602035522461,4.74056959152222,2.02676129341125,68.1003265380859\n        ,4.79745244979858,2.03602194786072,68.0820999145508,4.72639274597168,1.89723575115204,68.0686798095703,4.75530529022217\n        ,1.91270339488983,68.0529327392578,4.67381286621094,1.79788935184479,67.9880752563477,4.60268306732178,1.92080700397491\n        ,68.1887969970703,5.105628490448,1.93564641475677,68.258659362793,5.19911479949951,2.35538291931152,69.3204345703125\n        ,4.8226203918457,2.7937285900116,67.7508544921875,4.45168733596802,2.88425230979919,67.3557815551758,4.30462741851807\n        ,2.96637773513794,67.3155670166016,4.22542715072632,3.03101301193237,67.2631759643555,4.13667774200439,2.98313593864441\n        ,67.367919921875,4.22117328643799,2.8918879032135,67.4051818847656,4.30441951751709,2.82269477844238,67.8825607299805\n        ,4.52608156204224,2.82237696647644,67.8314743041992,4.48638391494751,2.84394216537476,67.7091445922852,4.39417934417725\n        ,2.76129055023193,67.5614013671875,4.37353801727295,2.81881189346313,67.542121887207,4.35720634460449,2.89298915863037\n        ,67.5231018066406,4.31164932250977,2.74356412887573,67.5781784057617,4.37403583526611,2.7083146572113,67.5445709228516\n        ,4.41160869598389,2.72057390213013,67.5724487304688,4.39044380187988,2.73355674743652,67.5681076049805,4.3847131729126\n        ,2.72890734672546,67.5457611083984,4.39651870727539,2.78715944290161,67.4943618774414,4.36204719543457,2.83767509460449\n        ,67.4912948608398,4.32730150222778,2.90921020507813,67.4769439697266,4.26797485351563,1.46171438694,64.871826171875\n        ,4.57088136672974,1.46168184280396,64.8623657226563,4.52993297576904,1.45342350006104,64.8918609619141,4.68999195098877\n        ,1.56209766864777,65.5174102783203,4.69710302352905,1.4363579750061,65.2145614624023,4.6585807800293,1.65252137184143\n        ,65.5645446777344,4.60052061080933,1.52217984199524,65.2129592895508,4.55981159210205,1.39736211299896,64.9676742553711\n        ,4.60638952255249,1.77157056331635,65.6157836914063,4.40959930419922,1.63668429851532,65.2200317382813,4.40786361694336\n        ,0.726122140884399,65.1174240112305,5.19929122924805,1.13462257385254,65.1242065429688,5.11881446838379,1.27412569522858\n        ,65.0849456787109,5.03397226333618,1.36068820953369,65.0242233276367,4.91986703872681,1.5302517414093,64.8403625488281\n        ,4.81787014007568,1.49507963657379,64.8809509277344,4.87410831451416,1.46148920059204,64.9282989501953,4.8311505317688\n        ,1.43284630775452,64.9356536865234,4.80183410644531,1.40760779380798,64.9272537231445,4.76524639129639,1.39444208145142\n        ,64.8453903198242,4.74579191207886,1.5011979341507,64.1316986083984,4.44672012329102,1.55279195308685,64.7089920043945\n        ,4.52026653289795,1.58199083805084,64.7010955810547,4.49964618682861,1.70078897476196,64.7076950073242,4.27974700927734\n        ,1.64948379993439,64.6882553100586,4.37039136886597,1.85476243495941,64.6218185424805,3.94913387298584,1.58547294139862\n        ,64.7184600830078,4.49313879013062,1.42990434169769,64.9447860717773,4.81173467636108,1.25507736206055,66.4016342163086\n        ,5.6686840057373,1.24616432189941,66.4787979125977,5.64807605743408,0.97510838508606,66.1322402954102,5.9370002746582\n        ,0.987578868865967,66.1314163208008,5.88433408737183,0.935709834098816,66.1356201171875,6.00360631942749,0.844236493110657\n        ,66.1403579711914,6.04201221466064,1.00607120990753,63.0317497253418,4.32509899139404,1.40227580070496,63.0594825744629\n        ,3.96019172668457,1.25259900093079,62.9927406311035,3.91761565208435,1.01959240436554,62.9540824890137,3.88085770606995\n        ,0.780723452568054,62.9210891723633,3.85335659980774,0.690417647361755,63.0074348449707,4.45033359527588,0.882281303405762\n        ,63.0210838317871,4.43909072875977,2.49059963226318,64.2022399902344,3.29887342453003,2.43080735206604,64.0347061157227\n        ,3.29224872589111,2.17769908905029,63.5968742370605,3.21712899208069,2.27928495407104,63.7407913208008,3.22888469696045\n        ,1.66551721096039,63.4309310913086,4.4442834854126,1.5459178686142,63.2607612609863,4.28567314147949,1.41883444786072\n        ,63.139892578125,4.14798021316528,1.31143248081207,63.0501441955566,4.07752418518066,1.15474736690521,62.9899597167969\n        ,4.0333776473999,0.905233979225159,62.9417953491211,3.99692273139954,0.669827342033386,62.909797668457,3.96174693107605\n        ,2.22140121459961,63.7321739196777,3.49364185333252,2.35822939872742,63.8762016296387,3.26734066009521,1.66536605358124\n        ,65.7555770874023,4.83231115341187,1.24421012401581,65.8331680297852,5.21903419494629,1.2415417432785,65.8225250244141\n        ,5.17691421508789,1.94282019138336,65.3339538574219,4.64607572555542,1.38889932632446,64.7831268310547,5.05037975311279\n        ,1.25069510936737,64.7823028564453,5.21552419662476,1.45800125598907,64.8723449707031,4.52737236022949,1.97246038913727\n        ,64.5256500244141,3.32755517959595,2.10083770751953,64.4759292602539,2.59164428710938,2.70098495483398,63.9992523193359\n        ,2.42093873023987,1.47236037254334,68.0681533813477,5.15111064910889,1.67923533916473,68.144905090332,5.13741636276245\n        ,1.36034119129181,66.582389831543,5.42577075958252,1.22313511371613,67.8263702392578,4.87110996246338,1.41561686992645\n        ,67.4029159545898,4.80356073379517,1.24386429786682,67.3269653320313,5.16441249847412,1.28025853633881,67.2014999389648\n        ,5.19281053543091,2.18041920661926,68.451286315918,5.21900701522827,2.60483956336975,68.5525817871094,5.06904554367065\n        ,2.90485191345215,68.4689865112305,4.79139518737793,3.01555633544922,68.2925415039063,4.58393335342407,3.03188824653625\n        ,68.0995864868164,4.40577125549316,3.07575488090515,68.1117324829102,4.32803773880005,3.11300373077393,68.1376419067383\n        ,4.27170753479004,0.951111435890198,67.8357391357422,5.28150749206543,1.03982937335968,67.8353805541992,5.23061275482178\n        ,1.1349960565567,67.8375625610352,5.02568531036377,1.24151837825775,67.8561248779297,4.87322998046875,1.39355981349945\n        ,67.7509155273438,4.78209352493286,1.0940203666687,67.8359756469727,5.13545799255371,2.80376482009888,67.4326477050781\n        ,4.36306619644165,2.88349223136902,67.2817993164063,4.30629730224609,2.94912886619568,67.2709045410156,4.24452877044678\n        ,2.98852252960205,67.2110366821289,4.19697189331055,2.77813315391541,67.3302536010742,4.38874912261963,2.80464458465576\n        ,67.3863372802734,4.357825756073,2.70970630645752,67.5081481933594,4.41629791259766,2.68796753883362,67.5142364501953\n        ,4.43299722671509,1.6923543214798,68.0826873779297,4.85076808929443,1.07724368572235,66.2140274047852,5.78987312316895\n        ,0.990124940872192,66.1395797729492,5.85217237472534,0.957006216049194,66.0988311767578,5.85218954086304,0.955944538116455\n        ,66.0326766967773,5.69455099105835,1.37360000610352,65.8612747192383,5.2225341796875,1.30291390419006,65.8606109619141\n        ,5.23633575439453,1.28696703910828,65.9717864990234,5.26826047897339,1.2058436870575,66.1310348510742,5.20236778259277\n        ,1.2073700428009,66.081657409668,5.14830446243286,1.15509605407715,66.0897750854492,5.2003436088562,3.07375311851501\n        ,67.1264953613281,4.12566518783569,3.10644316673279,67.2067260742188,4.03005695343018,3.01146101951599,67.4560241699219\n        ,4.16344738006592,3.26566362380981,67.3137969970703,3.85877799987793,3.23967552185059,67.3935546875,3.79584240913391\n        ,3.00219583511353,67.4986190795898,4.20324993133545,3.23345947265625,67.4361953735352,3.82250928878784,3.47227358818054\n        ,67.1351623535156,3.1978120803833,3.20911312103271,67.6038055419922,3.84602642059326,1.38017463684082,67.8658065795898\n        ,4.78988122940063,1.04489850997925,67.6455078125,5.28492164611816,0.946268200874329,67.6453552246094,5.33524036407471\n        ,1.11085093021393,67.6494064331055,5.18183755874634,1.3418071269989,67.3768310546875,4.97024059295654,1.24413287639618\n        ,67.4093322753906,5.11822652816772,1.18746721744537,67.4170608520508,5.1835298538208,1.15831828117371,67.3799209594727\n        ,5.24726247787476,2.03133249282837,68.5468063354492,5.26267957687378,2.20468068122864,68.7326507568359,5.18999338150024\n        ,1.96770107746124,68.4115371704102,5.29732751846313,1.24037265777588,68.9764862060547,5.24644804000854,1.93664562702179\n        ,68.8729934692383,5.20075178146362,2.08420419692993,68.9143524169922,5.08791589736938,1.66595792770386,69.2999420166016\n        ,5.27965211868286,2.69618439674377,69.3363647460938,4.62717247009277,1.21942925453186,69.2810668945313,5.24096918106079\n        ,2.30219793319702,70.5151748657227,4.51481103897095,1.65603744983673,65.8645401000977,4.82821130752563,1.5150705575943\n        ,65.2759857177734,4.97173738479614,1.61782228946686,65.1860046386719,4.88035678863525,2.83090734481812,67.7513885498047\n        ,4.43764114379883,2.90546679496765,67.8018112182617,4.39182186126709,3.05201172828674,67.8971252441406,4.29138422012329\n        ,3.07350969314575,67.9136047363281,4.25318050384521,3.08565521240234,68.0720443725586,4.28964042663574,3.09590840339661\n        ,67.9019241333008,4.18263244628906,3.12226796150208,68.0895614624023,4.23420143127441,3.15805292129517,67.9133453369141\n        ,4.03698539733887,1.85307800769806,69.3176803588867,5.19680690765381,1.95780122280121,69.5691375732422,5.11974716186523\n        ,2.00819277763367,69.8451461791992,4.99117994308472,2.05755305290222,70.1033020019531,4.89759159088135,1.51351356506348\n        ,68.9728775024414,5.34801340103149,3.17292428016663,69.0089263916016,3.65988326072693,3.24468231201172,69.3821563720703\n        ,3.10906028747559,3.19405722618103,69.4203338623047,3.30144023895264,3.1433367729187,69.4741287231445,3.5175678730011\n        ,3.16293168067932,68.8886337280273,3.85672426223755,3.23307037353516,68.7058258056641,3.79092526435852,1.34411311149597\n        ,68.3689804077148,5.45315217971802,1.47962760925293,67.904182434082,4.78232955932617,1.56587851047516,67.9845123291016\n        ,4.78964614868164,2.32223176956177,66.6271820068359,4.62494134902954,2.52399301528931,66.5070343017578,4.41808605194092\n        ,3.18077445030212,68.1741943359375,4.13968563079834,3.18250513076782,61.6550064086914,0.15494367480278,2.97731566429138\n        ,62.090576171875,0.236494928598404,2.63404870033264,61.4835586547852,1.09880757331848,2.63750290870667,60.7715454101563\n        ,1.24464046955109,1.15286767482758,59.9498062133789,2.77086806297302,1.34675312042236,60.1751556396484,2.46136975288391\n        ,0.707067012786865,60.1917724609375,2.30265927314758,1.93906819820404,59.9140472412109,2.56447672843933,1.31039726734161\n        ,59.7857666015625,2.86505627632141,3.30667567253113,60.0582466125488,1.52897572517395,3.21281981468201,60.7512435913086\n        ,0.686783790588379,2.83494830131531,60.101676940918,1.82382214069366,2.0032696723938,60.1697044372559,2.2233898639679\n        ,2.95462036132813,59.8311195373535,2.23044967651367,3.44337105751038,61.3207168579102,0.0308288335800171,3.00886535644531\n        ,64.578254699707,-1.40568685531616,2.83613109588623,64.6232986450195,-1.88293862342834,3.03651714324951,64.1986770629883\n        ,-1.29441452026367,2.85587859153748,64.2701568603516,-1.88409495353699,2.3250470161438,64.3217086791992,-2.30119037628174\n        ,2.19409990310669,64.6903381347656,-2.30471992492676,1.47786962985992,64.7402801513672,-2.5796685218811,1.55335366725922\n        ,64.3825149536133,-2.64062190055847,0.9145188331604,64.7542877197266,-2.74038743972778,3.18349647521973,64.4910278320313\n        ,-0.831904411315918,3.10196471214294,64.0538482666016,-0.768124938011169,3.15863394737244,63.9126052856445,-1.1659996509552\n        ,2.94038534164429,64.0237808227539,-1.82171845436096,2.44409084320068,64.0830612182617,-2.38203501701355,1.64424133300781\n        ,64.1150970458984,-2.65511178970337,3.04022526741028,63.7449569702148,-0.723660707473755,3.83235144615173,67.9229354858398\n        ,1.56775510311127,3.77065491676331,67.9044799804688,1.65262651443481,3.95984673500061,67.9680023193359,1.12290859222412\n        ,3.83990359306335,67.9484176635742,1.16654276847839,4.05559206008911,68.0735244750977,0.94489711523056,4.04066514968872\n        ,68.1123504638672,1.10381245613098,3.96631550788879,67.9070129394531,0.998717308044434,3.69450688362122,67.8655624389648\n        ,0.79612410068512,3.64366936683655,67.7518081665039,0.54340922832489,3.59573769569397,67.5238571166992,0.356896281242371\n        ,3.86012148857117,67.9690551757813,1.670374751091,3.77919220924377,67.8664474487305,1.73471486568451,3.92326807975769\n        ,68.0409240722656,1.53420841693878,3.83544135093689,67.9114608764648,0.998802065849304,3.76413035392761,67.9968872070313\n        ,0.952667593955994,3.810711145401,67.8189544677734,0.880330681800842,3.65141010284424,67.6560745239258,0.732728004455566\n        ,3.60468745231628,67.442512512207,0.648090064525604,3.46820783615112,66.8373565673828,0.642570853233337,3.52254128456116\n        ,67.1582183837891,0.248262137174606,3.60760736465454,67.5348358154297,-0.420371651649475,3.78048825263977,67.6621246337891\n        ,0.776360392570496,3.73487710952759,67.4356536865234,0.701585710048676,3.66625213623047,67.1638641357422,0.669500708580017\n        ,3.53652048110962,67.141716003418,0.613216578960419,3.58888530731201,66.8496170043945,0.698460042476654,3.69785666465759\n        ,66.5569381713867,0.76279604434967,3.47390913963318,66.4032516479492,0.940670549869537,3.77345776557922,60.8544502258301\n        ,-0.0729393362998962,3.79325795173645,59.9792976379395,1.36709403991699,3.981778383255,59.7930335998535,1.87356519699097\n        ,0.777940273284912,61.6627578735352,-3.52194452285767,1.48603999614716,61.8513412475586,-3.45622205734253,2.36290335655212\n        ,62.0750350952148,-3.00863814353943,3.46754050254822,62.5932464599609,-2.43091034889221,3.77708125114441,62.6162300109863\n        ,-1.66679668426514,3.93208146095276,62.1959915161133,-0.753983974456787,3.28955364227295,67.0566711425781,3.80089235305786\n        ,1.19604671001434,66.8455123901367,5.48549938201904,1.62394678592682,64.794921875,4.62034463882446,1.47073328495026\n        ,64.8858413696289,4.72852897644043,1.85679113864899,68.1447296142578,4.88398790359497,1.74986064434052,65.9342269897461\n        ,4.76275300979614,1.80883491039276,65.8382873535156,4.73427295684814,1.89601337909698,65.7000503540039,4.67515993118286\n        ,1.7078458070755,68.1302337646484,4.88863897323608,1.68416428565979,68.1078338623047,4.86055564880371,0.00038185715675354\n        ,68.2644119262695,4.91810369491577,0.00735509395599365,68.2456970214844,4.89325475692749,2.08362030982971,63.940242767334\n        ,4.07634019851685,2.23859047889709,63.9939613342285,3.83288836479187,2.36071610450745,64.0901718139648,3.55181813240051\n        ,-1.03999102115631,64.1953964233398,4.12683153152466,-1.18111038208008,64.2263336181641,3.89086365699768,-1.30252110958099\n        ,64.3730163574219,3.61477756500244,-1.02499151229858,65.8723907470703,4.46659708023071,2.35556626319885,65.6158218383789\n        ,4.39196586608887,0.873621225357056,68.2819519042969,5.43281412124634,-2.36207580566406,66.7793350219727,1.48702847957611\n        ,-1.83337068557739,67.5775299072266,3.52100348472595,-1.13330495357513,67.8164596557617,4.45990085601807,3.02833318710327\n        ,67.7973480224609,4.23777866363525,0.964009761810303,69.5016860961914,5.21233224868774,0.943135738372803,69.2242813110352\n        ,5.24404191970825,0.703629970550537,68.9851608276367,5.32800006866455,0.921748876571655,68.9331893920898,5.30737543106079\n        ,1.14702486991882,68.9563522338867,5.31911516189575,-1.53307449817657,69.9197540283203,-1.07180321216583,0.652912974357605\n        ,65.5594787597656,4.85395431518555,0.656846284866333,65.6249160766602,4.75969839096069,0.658797264099121,65.6604156494141\n        ,4.71234512329102,0.661505103111267,65.7168884277344,4.6145977973938,0.665562868118286,65.8118057250977,4.4242901802063\n        ,0.674360871315002,66.0109024047852,4.04174327850342,0.671546220779419,66.1222076416016,3.37795090675354,0.651402831077576\n        ,66.0390167236328,2.57964992523193,0.60585629940033,65.5844116210938,1.97188603878021,0.570160269737244,65.118896484375\n        ,1.98627030849457,0.526925444602966,64.5698013305664,1.93749856948853,0.511002540588379,64.1597747802734,2.85311627388\n        ,0.493809551000595,64.1792678833008,3.5948166847229,0.525675535202026,64.0711288452148,4.17445087432861,0.541215419769287\n        ,64.1743774414063,4.63787937164307,0.250819176435471,65.5190734863281,4.86307859420776,0.228494554758072,65.5870208740234\n        ,4.76983070373535,0.196436315774918,65.6303787231445,4.72285842895508,0.15733814239502,65.6800079345703,4.62622213363647\n        ,0.099937379360199,65.7448501586914,4.43832969665527,0.0486626923084259,66.0053558349609,4.05459928512573,-0.0147473067045212\n        ,66.1213455200195,3.39184832572937,-0.0894939303398132,66.0962219238281,2.59238362312317,-0.161882400512695,65.6560592651367\n        ,2.28982543945313,-0.214036017656326,65.1918106079102,2.30449271202087,-0.246274381875992,64.6433258056641,2.29138565063477\n        ,-0.218271285295486,64.2160797119141,2.86565065383911,-0.174487501382828,64.2654724121094,3.5662088394165,-0.042945459485054\n        ,64.1155548095703,4.20135974884033,0.0312285125255585,64.2037506103516,4.64215660095215,1.04420983791351,65.4587783813477\n        ,4.85055589675903,1.07440137863159,65.5217056274414,4.7552924156189,1.11115729808807,65.5597534179688,4.70713710784912\n        ,1.15413916110992,65.6030502319336,4.60909032821655,1.21435952186584,65.6588134765625,4.41917610168457,1.29186642169952\n        ,65.9093704223633,4.03323268890381,1.34964776039124,66.015998840332,3.36839866638184,1.39229929447174,65.9818115234375\n        ,2.56691646575928,1.3859030008316,65.5365524291992,2.26322388648987,1.36666464805603,65.0697708129883,2.27732515335083\n        ,1.3138815164566,64.5228652954102,2.26457142829895,1.24027609825134,64.1034622192383,2.84058260917664,1.16210687160492\n        ,64.0930633544922,3.62342405319214,1.10009157657623,64.0964889526367,4.17122077941895,1.0526248216629,64.1909713745117\n        ,4.50982093811035,1.89644730091095,67.7359085083008,4.67418622970581,1.81632149219513,67.7875213623047,4.61641120910645\n        ,2.12802863121033,67.6517791748047,4.72160243988037,1.98360979557037,67.7028198242188,4.71778392791748,1.77853500843048\n        ,67.8334732055664,4.57319593429565,1.75040686130524,67.8640594482422,4.5403995513916,2.42679309844971,67.6176147460938\n        ,4.63404083251953,2.54108619689941,67.6052627563477,4.51983451843262,2.48956918716431,67.6133270263672,4.57629919052124\n        ,1.74333274364471,67.8989181518555,4.53774070739746,1.93537843227386,67.7207946777344,4.6994047164917,2.57160806655884\n        ,67.5975723266602,4.45073556900024,2.5858838558197,67.6601409912109,4.42239618301392,2.58265948295593,67.6481552124023\n        ,4.43020439147949,2.57664966583252,67.6871948242188,4.4448299407959,2.55325865745544,67.770622253418,4.51302242279053\n        ,2.56909608840942,67.7202301025391,4.47619247436523,2.50709199905396,67.8812103271484,4.58537578582764,2.53704166412354\n        ,67.8295440673828,4.54725313186646,2.36653184890747,68.0211791992188,4.67595386505127,2.16523623466492,68.0977172851563\n        ,4.71221017837524,2.27045369148254,68.0672378540039,4.70446872711182,2.05515193939209,68.1021881103516,4.69430780410767\n        ,1.94643938541412,68.0781097412109,4.65700387954712,1.84540617465973,68.0238876342773,4.60649824142456,2.27108001708984\n        ,67.6280059814453,4.70892524719238,1.98273718357086,67.7163162231445,4.56902360916138,1.9115127325058,67.7589797973633\n        ,4.53995370864868,2.13523030281067,67.6635894775391,4.58285903930664,2.03138518333435,67.6998062133789,4.58159112930298\n        ,1.87199437618256,67.7949829101563,4.52198696136475,1.8542720079422,67.8257751464844,4.5079026222229,2.36474823951721\n        ,67.6484298706055,4.5119104385376,2.31572771072388,67.6422805786133,4.5551061630249,1.86171853542328,67.868896484375\n        ,4.5054759979248,2.41878652572632,67.6660537719727,4.43914270401001,2.44726538658142,67.6855010986328,4.43181991577148\n        ,2.46289682388306,67.7375793457031,4.46374797821045,2.44555950164795,67.7956695556641,4.49104022979736,2.45723295211792\n        ,67.7605285644531,4.47634077072144,2.4117910861969,67.8728866577148,4.51987743377686,2.43361759185791,67.8368377685547\n        ,4.50457382202148,2.31002712249756,67.9707336425781,4.55646896362305,2.16502261161804,68.0245590209961,4.57177495956421\n        ,2.24073529243469,68.0030136108398,4.56828546524048,2.08600091934204,68.0280380249023,4.56502389907837,2.00812268257141\n        ,68.0116424560547,4.55059480667114,1.93588101863861,67.9740905761719,4.53102397918701,2.23815989494324,67.6467971801758\n        ,4.57702589035034,-0.212368905544281,67.8996810913086,4.63779544830322,-0.485981106758118,67.8154220581055,4.7144570350647\n        ,-0.314577341079712,67.8651428222656,4.70246028900146,-0.0699974000453949,67.9629440307617,4.49406051635742,-0.0349433273077011\n        ,67.9887771606445,4.4476261138916,-0.826956033706665,67.8586120605469,4.60484981536865,-0.956437468528748,67.8552551269531\n        ,4.4510293006897,-0.900565505027771,67.865234375,4.52698564529419,-0.0208806097507477,68.0293426513672,4.44375610351563\n        ,-0.258073717355728,67.8792419433594,4.67536354064941,-0.998348236083984,67.8886108398438,4.3549690246582,-1.00609660148621\n        ,67.9421310424805,4.31744146347046,-1.00461220741272,67.9233016967773,4.3282585144043,-0.949204087257385,68.0249328613281\n        ,4.44410514831543,-0.976211071014404,67.9849166870117,4.39273262023926,-0.874837517738342,68.1462326049805,4.54314088821411\n        ,-0.919130444526672,68.0910263061523,4.49123859405518,-0.689786434173584,68.2753372192383,4.66390991210938,-0.450264871120453\n        ,68.3228759765625,4.70611143112183,-0.573601424694061,68.3050308227539,4.69983911514282,-0.326902955770493,68.3137054443359\n        ,4.67624616622925,-0.210561603307724,68.2769317626953,4.61912107467651,-0.10955773293972,68.1954116821289,4.54428195953369\n        ,-0.650413751602173,67.8144989013672,4.70292139053345,-0.229091107845306,67.9318695068359,4.42529535293579,-0.494329631328583\n        ,67.8742752075195,4.40578269958496,-0.360107153654099,67.9088897705078,4.41941356658936,-0.122926339507103,67.9665222167969\n        ,4.44002151489258,-0.759347319602966,67.912353515625,4.40942287445068,-0.858121633529663,67.9182205200195,4.40049695968628\n        ,-0.81566846370697,67.9212646484375,4.40700912475586,-0.126330554485321,68.0354919433594,4.45229911804199,-0.893098115921021\n        ,67.9021987915039,4.38819122314453,-0.896688580513,67.9520492553711,4.40433549880981,-0.87952196598053,67.9892578125\n        ,4.42123937606812,-0.852579474449158,68.0385284423828,4.44430255889893,-0.796185731887817,68.1190872192383,4.48092985153198\n        ,-0.829913258552551,68.0828094482422,4.46386814117432,-0.65356719493866,68.2033767700195,4.52140235900879,-0.466939032077789\n        ,68.2333831787109,4.5374698638916,-0.563301205635071,68.2218780517578,4.53163146972656,-0.369929194450378,68.2275085449219\n        ,4.53461980819702,-0.277927368879318,68.2034759521484,4.52329397201538,-0.197574734687805,68.1487274169922,4.49941539764404\n        ,-0.622779250144959,67.8752670288086,4.40379571914673,-0.141183137893677,67.9313125610352,4.56592798233032,-0.105590149760246\n        ,67.9471282958984,4.52999401092529,-0.317027002573013,43.3981781005859,-4.17614793777466,-0.834381639957428,43.4859733581543\n        ,-4.23113298416138,-1.51100981235504,44.4054069519043,-4.25199365615845,-1.4732049703598,44.902889251709,-4.17614889144897\n        ,-0.0162359997630119,43.5158843994141,-4.1427001953125,-1.28199899196625,45.1632194519043,-4.1427001953125,0.158467993140221\n        ,43.6501235961914,-4.15208005905151,-1.10729598999023,45.2974548339844,-4.15208101272583,0.628645002841949,43.7916564941406\n        ,-4.30703783035278,0.32362699508667,43.5572891235352,-4.30703687667847,-1.15446102619171,45.4809532165527,-4.3070387840271\n        ,-0.849443018436432,45.7153167724609,-4.3070387840271,0.727638006210327,44.0849380493164,-4.165198802948,0.563943028450012\n        ,43.9616775512695,-4.165198802948,-0.701821029186249,45.6090087890625,-4.16520023345947,-0.538125991821289,45.7322692871094\n        ,-4.165198802948,1.17372703552246,44.2080078125,-4.30703783035278,0.886372923851013,43.9871635437012,-4.30703783035278\n        ,-0.591714978218079,45.910831451416,-4.30703783035278,-0.304394006729126,46.1316452026367,-4.30703783035278,1.43661201000214\n        ,44.6284790039063,-4.19403791427612,1.11930799484253,44.3859214782715,-4.165198802948,-0.146456003189087,46.0332565307617\n        ,-4.16520023345947,0.170848995447159,46.2758102416992,-4.19403791427612,1.68137609958649,44.8160705566406,-3.78847002983093\n        ,1.56688797473907,44.7282600402832,-4.0851788520813,0.301124006509781,46.3755912780762,-4.0851788520813,0.415612012147903\n        ,46.4634017944336,-3.78847002983093,-1.59946060180664,44.3374443054199,-3.79821419715881,-0.914093196392059,43.419677734375\n        ,-3.78314900398254,-0.0272600017488003,43.5074119567871,-3.7880527973175,-1.29302394390106,45.1547470092773,-3.7880527973175\n        ,0.181598216295242,43.6708488464355,-3.79498100280762,-1.07914197444916,45.3190879821777,-3.79843235015869,-0.701821029186249\n        ,45.6090126037598,-3.81037211418152,0.563943028450012,43.9616775512695,-3.81037211418152,0.727638006210327,44.0849342346191\n        ,-3.81037211418152,-0.538125991821289,45.7322692871094,-3.81037211418152,-0.148130998015404,46.0319519042969,-3.81037211418152\n        ,1.11763298511505,44.3846168518066,-3.81037211418152,1.26549303531647,44.4971542358398,-3.82166981697083,-0.000269999989541247\n        ,46.1444854736328,-3.82167100906372,1.30914115905762,44.5305786132813,-3.86609816551209,0.0433779992163181,46.1779098510742\n        ,-3.8660991191864,-0.367087990045547,43.3597106933594,-3.78918409347534,0.378194004297256,43.486270904541,-3.92864799499512\n        ,0.683211982250214,43.7206382751465,-3.92864799499512,0.94093906879425,43.9161491394043,-3.92864799499512,1.228276014328\n        ,44.1369781494141,-3.92864799499512,0.443740993738174,43.4009666442871,-3.79230833053589,0.748758971691132,43.6353302001953\n        ,-3.79230904579163,1.2905980348587,44.0491600036621,-3.79230833053589,1.00648701190948,43.8308448791504,-3.79230833053589\n        ,1.37339198589325,44.5797996520996,-3.80079698562622,0.107629001140594,46.2271347045898,-3.80079770088196,-0.358994990587235\n        ,46.20263671875,-3.92864799499512,-0.646282017230988,45.9818458557129,-3.92864799499512,-0.904009938240051,45.7863349914551\n        ,-3.92864799499512,-1.20902800559998,45.5519676208496,-3.92864799499512,-1.52326595783234,44.8644218444824,-3.78918409347534\n        ,-0.427762001752853,46.2854347229004,-3.79230833053589,-0.711830019950867,46.0671539306641,-3.79230904579163,-0.969556987285614\n        ,45.8716430664063,-3.79230833053589,-1.27457499504089,45.6372756958008,-3.79230904579163,-13.6780347824097,1.56476700305939\n        ,-0.962452054023743,-13.5355319976807,2.28442907333374,-0.326824009418488,-13.7296142578125,1.90572786331177,0.0347840003669262\n        ,-13.8451042175293,1.28352797031403,-0.534878015518188,-13.2113485336304,3.41421222686768,0.780472993850708,-13.4375886917114\n        ,2.95067405700684,1.12730300426483,-12.3108987808228,4.26939582824707,1.75078189373016,-12.5499305725098,3.72543716430664\n        ,2.15108489990234,-10.9267930984497,4.62305116653442,2.39914608001709,-11.0607147216797,4.0776162147522,2.87612700462341\n        ,-13.7357864379883,1.83517897129059,0.0675569996237755,-13.4553098678589,2.88778805732727,1.16740500926971,-13.4221811294556\n        ,2.62378597259521,1.13361215591431,-13.659797668457,1.58253502845764,0.0165539998561144,-12.5724210739136,3.66829299926758\n        ,2.19642400741577,-12.595648765564,3.34137725830078,2.16981601715088,-11.067608833313,3.99253296852112,2.89867806434631\n        ,-11.0777006149292,3.67775297164917,2.90849208831787,-13.8719444274902,1.31002199649811,0.425152987241745,-13.8813171386719\n        ,0.922089993953705,-0.131953999400139,-13.7507238388062,1.20414614677429,-0.352847993373871,-13.7218284606934,2.18296194076538\n        ,1.73859214782715,-12.8380451202393,2.85210108757019,2.91106700897217,-11.2669439315796,3.18960094451904,3.69444298744202\n        ,-13.8856010437012,1.00176298618317,-0.627758979797363,-13.7876510620117,0.865270912647247,-1.45944786071777,-13.8358287811279\n        ,1.2590719461441,-0.456277012825012,-7.71573686599731,2.20191693305969,1.16589915752411,-7.56110048294067,1.46297514438629\n        ,0.62024998664856,-7.64086675643921,1.2053279876709,1.01679396629334,-7.77079105377197,1.89633202552795,1.61284804344177\n        ,-8.34208297729492,3.50494909286499,2.02134108543396,-8.44800853729248,3.08205199241638,2.58425903320313,-9.51651096343994\n        ,3.81002974510193,2.96585988998413,-9.35363388061523,4.35058403015137,2.47706699371338,-7.82847023010254,1.84765613079071\n        ,1.64134502410889,-7.96436500549316,1.67664396762848,1.67775213718414,-8.53395843505859,2.79537510871887,2.64249300956726\n        ,-8.46099376678467,3.02799868583679,2.64509105682373,-9.57126045227051,3.48190593719482,3.04697799682617,-9.54757595062256\n        ,3.76337790489197,3.0204439163208,-7.85036659240723,0.923666000366211,1.44919002056122,-7.84358215332031,1.19052505493164\n        ,1.1865119934082,-7.67029094696045,0.892737984657288,0.995962023735046,-7.72204780578613,0.665284991264343,1.10715901851654\n        ,-7.96370410919189,1.32437098026276,2.04898595809937,-8.62763500213623,2.38745093345642,3.37738871574402,-9.67886352539063\n        ,2.98630094528198,3.90722489356995,-7.50302839279175,0.0706660002470016,0.16516999900341,-7.65504312515259,0.57694798707962\n        ,1.02590584754944,-7.63006162643433,0.858869016170502,0.922900974750519,-7.45552921295166,0.293835997581482,-0.0636129975318909\n        ,-7.47746133804321,0.77325302362442,0.103377990424633,-7.6795711517334,1.16882801055908,1.05913496017456,-13.8515253067017\n        ,1.04447174072266,-0.519836008548737,-13.9187040328979,0.749768018722534,-0.385737001895905,-13.9613208770752,0.689105987548828\n        ,-0.524842023849487,-14.1618280410767,0.693732023239136,0.904721021652222,-14.2566156387329,0.201043993234634,1.2078560590744\n        ,-14.2272043228149,-0.0554590001702309,0.292737007141113,-14.1005353927612,0.453911006450653,0.102949999272823,-14.0750226974487\n        ,1.22226297855377,2.3223569393158,-14.1696844100952,0.757678985595703,2.74612402915955,-13.1613607406616,1.81473004817963\n        ,3.52351808547974,-13.3137845993042,1.41021299362183,4.07391881942749,-11.5029983520508,2.21419310569763,4.46008491516113\n        ,-11.6761035919189,1.73573398590088,5.00057792663574,-14.1197128295898,0.75049501657486,0.84908801317215,-13.9271574020386\n        ,0.81058794260025,0.591765999794006,-13.8647260665894,1.32616198062897,2.01072406768799,-13.9969501495361,1.2639479637146\n        ,2.23578906059265,-13.0012092590332,1.92415702342987,3.13362169265747,-13.0971918106079,1.85302400588989,3.45393371582031\n        ,-11.3908538818359,2.33619499206543,4.02878093719482,-11.4788293838501,2.24708294868469,4.36365699768066,-14.0445289611816\n        ,0.489760965108871,-0.225505992770195,-14.1171455383301,-0.207783997058868,-0.640401005744934,-14.0550327301025,0.529439985752106\n        ,0.105508998036385,-13.9215707778931,0.662356019020081,0.12636099755764,-7.83413791656494,-0.0283060017973185,1.913419008255\n        ,-8.06515884399414,0.286482006311417,2.91064691543579,-7.95277881622314,0.834507048130035,2.67236089706421,-7.780601978302\n        ,0.469280004501343,1.68146514892578,-8.78317642211914,1.03417301177979,4.53717422485352,-8.70439052581787,1.56782102584839\n        ,4.13548183441162,-9.94776630401611,1.60068798065186,5.2044620513916,-9.77998733520508,2.07577204704285,4.66377878189087\n        ,-7.95914030075073,0.885506987571716,2.59952688217163,-8.74676513671875,1.62127304077148,4.04322910308838,-8.78474044799805\n        ,1.72587299346924,3.80446791648865,-8.04425525665283,0.948602974414825,2.30370092391968,-9.76146507263184,2.11520910263062\n        ,4.5624737739563,-9.8388090133667,2.19951796531677,4.26146602630615,-7.76102113723755,0.52852201461792,1.38592100143433\n        ,-7.91985082626343,0.685284018516541,1.6529289484024,-7.53962087631226,-0.179324001073837,0.333211004734039,-7.71288299560547\n        ,0.445039004087448,1.31922614574432,-7.65219831466675,-0.232834994792938,0.904438018798828,-7.80965709686279,0.549328029155731\n        ,1.63786089420319,-13.9975500106812,0.58357697725296,-0.134222000837326,-14.0162773132324,-0.11387600004673,-1.19407498836517\n        ,-13.9406709671021,0.152143001556396,-1.3564670085907,-13.8613548278809,0.385596007108688,-1.58571898937225,-13.3260583877563\n        ,1.52340304851532,-0.926805019378662,-13.6498346328735,0.799180924892426,-0.197821021080017,-13.6360759735107,1.163419008255\n        ,0.459197998046875,-13.214916229248,2.19469499588013,-0.354411989450455,-13.3867931365967,1.8975909948349,1.65856885910034\n        ,-12.879186630249,3.26200866699219,0.666939973831177,-12.6128787994385,2.55630111694336,2.73621797561646,-12.0652027130127\n        ,4.01996278762817,1.44470298290253,-11.2527093887329,2.92929005622864,3.43369626998901,-10.8725614547729,4.34354496002197\n        ,2.04087495803833,-13.4099502563477,0.802688002586365,-1.48420095443726,-13.4805784225464,0.323792994022369,-1.59506595134735\n        ,-8.03701400756836,0.645461976528168,1.01014995574951,-7.90348291397095,1.52642500400543,0.427454024553299,-8.08730697631836\n        ,2.19412302970886,0.955696940422058,-8.23932838439941,1.26469194889069,1.94163298606873,-8.62477397918701,3.40587210655212\n        ,1.72736203670502,-8.85360431671143,2.13062691688538,3.05519890785217,-9.42286491394043,4.11251783370972,2.11699104309082\n        ,-9.80203533172607,2.76634788513184,3.57874298095703,-7.79784631729126,0.794174075126648,-0.103330008685589,-7.82158517837524\n        ,0.364942997694016,-0.290657997131348,-13.8217973709106,-0.170460999011993,0.398487001657486,-13.8654460906982,0.0600179992616177\n        ,1.26387298107147,-13.8260746002197,0.517706990242004,2.71623492240906,-13.1112518310547,1.06115102767944,3.8931291103363\n        ,-11.643946647644,1.41572594642639,4.7784481048584,-13.7150077819824,-0.346439003944397,-0.612541973590851,-13.6095657348633\n        ,-0.241651996970177,-1.15343594551086,-8.24737453460693,-0.15752400457859,1.85458099842072,-8.44620132446289,0.104812011122704\n        ,2.83339309692383,-9.08258628845215,0.769033014774323,4.3923487663269,-10.0709543228149,1.28220784664154,4.95027685165405\n        ,-8.06989288330078,-0.31148499250412,0.740787029266357,-7.96294832229614,-0.289009004831314,0.219812005758286,-13.4217224121094\n        ,2.3107750415802,-0.375806987285614,-13.5710763931274,1.59470999240875,-1.01851904392242,-13.103946685791,3.42879104614258\n        ,0.713451981544495,-12.2277145385742,4.27713680267334,1.65429794788361,-10.9000606536865,4.61849594116211,2.28014898300171\n        ,-13.5571355819702,-0.0426359996199608,-1.52019703388214,-13.7583179473877,0.376628011465073,-1.67076504230499,-13.8444566726685\n        ,-0.00786899961531162,-1.59044694900513,-13.687385559082,0.836558997631073,-1.54808294773102,-7.63128089904785,1.51451098918915\n        ,0.516359984874725,-7.79104614257813,2.23954701423645,1.06171703338623,-8.39723968505859,3.52309203147888,1.89859700202942\n        ,-9.36298179626465,4.34764623641968,2.35511302947998,-7.54345893859863,0.770093977451324,-0.0295189991593361,-7.52011299133301\n        ,0.315405994653702,-0.201513007283211,-7.88312101364136,-0.0476690009236336,-0.189381003379822,-7.54605770111084,-0.0761459991335869\n        ,-0.107980996370316,-14.1586351394653,-0.138848006725311,0.337846010923386,-14.1826257705688,0.10935901850462,1.25752902030945\n        ,-14.1024370193481,0.650152027606964,2.78769397735596,-13.2866096496582,1.29429996013641,4.09255599975586,-11.6883716583252\n        ,1.60427713394165,5.0113639831543,-13.9429140090942,-0.219302996993065,-1.2073849439621,-14.0385818481445,-0.306542009115219\n        ,-0.675978004932404,-8.16566753387451,0.194731995463371,2.91308689117432,-7.9301438331604,-0.113416999578476,1.92874503135681\n        ,-8.86132144927979,0.920903027057648,4.54089879989624,-10.0087671279907,1.47676694393158,5.21392393112183,-7.72993421554565\n        ,-0.324436992406845,0.821264028549194,-7.6232590675354,-0.286345988512039,0.279785007238388,-13.9344873428345,0.0526309981942177\n        ,-1.52636194229126,-7.47345447540283,-0.0321439988911152,-0.00272500002756715,13.6780347824097,1.56476700305939,-0.962452054023743\n        ,13.5355319976807,2.28442907333374,-0.326824009418488,13.7296142578125,1.90572786331177,0.0347840003669262,13.8451042175293\n        ,1.28352797031403,-0.534878015518188,13.2113485336304,3.41421222686768,0.780472993850708,13.4375886917114,2.95067405700684\n        ,1.12730300426483,12.3108987808228,4.26939582824707,1.75078189373016,12.5499305725098,3.72543716430664,2.15108489990234\n        ,10.9267930984497,4.62305116653442,2.39914608001709,11.0607147216797,4.0776162147522,2.87612700462341,13.7357864379883\n        ,1.83517897129059,0.0675569996237755,13.4553098678589,2.88778805732727,1.16740500926971,13.4221811294556,2.62378597259521\n        ,1.13361215591431,13.659797668457,1.58253502845764,0.0165539998561144,12.5724210739136,3.66829299926758,2.19642400741577\n        ,12.595648765564,3.34137725830078,2.16981601715088,11.067608833313,3.99253296852112,2.89867806434631,11.0777006149292\n        ,3.67775297164917,2.90849208831787,13.8719444274902,1.31002199649811,0.425152987241745,13.8813171386719,0.922089993953705\n        ,-0.131953999400139,13.7507238388062,1.20414614677429,-0.352847993373871,13.7218284606934,2.18296194076538,1.73859214782715\n        ,12.8380451202393,2.85210108757019,2.91106700897217,11.2669439315796,3.18960094451904,3.69444298744202,13.8856010437012\n        ,1.00176298618317,-0.627758979797363,13.7876510620117,0.865270912647247,-1.45944786071777,13.8358287811279,1.2590719461441\n        ,-0.456277012825012,7.71573686599731,2.20191693305969,1.16589915752411,7.56110048294067,1.46297514438629,0.62024998664856\n        ,7.64086675643921,1.2053279876709,1.01679396629334,7.77079105377197,1.89633202552795,1.61284804344177,8.34208297729492\n        ,3.50494909286499,2.02134108543396,8.44800853729248,3.08205199241638,2.58425903320313,9.51651096343994,3.81002974510193\n        ,2.96585988998413,9.35363388061523,4.35058403015137,2.47706699371338,7.82847023010254,1.84765613079071,1.64134502410889\n        ,7.96436500549316,1.67664396762848,1.67775213718414,8.53395843505859,2.79537510871887,2.64249300956726,8.46099376678467\n        ,3.02799868583679,2.64509105682373,9.57126045227051,3.48190593719482,3.04697799682617,9.54757595062256,3.76337790489197\n        ,3.0204439163208,7.85036659240723,0.923666000366211,1.44919002056122,7.84358215332031,1.19052505493164,1.1865119934082\n        ,7.67029094696045,0.892737984657288,0.995962023735046,7.72204780578613,0.665284991264343,1.10715901851654,7.96370410919189\n        ,1.32437098026276,2.04898595809937,8.62763500213623,2.38745093345642,3.37738871574402,9.67886352539063,2.98630094528198\n        ,3.90722489356995,7.50302839279175,0.0706660002470016,0.16516999900341,7.65504312515259,0.57694798707962,1.02590584754944\n        ,7.63006162643433,0.858869016170502,0.922900974750519,7.45552921295166,0.293835997581482,-0.0636129975318909,7.47746133804321\n        ,0.77325302362442,0.103377990424633,7.6795711517334,1.16882801055908,1.05913496017456,13.8515253067017,1.04447174072266\n        ,-0.519836008548737,13.9187040328979,0.749768018722534,-0.385737001895905,13.9613208770752,0.689105987548828,-0.524842023849487\n        ,14.1618280410767,0.693732023239136,0.904721021652222,14.2566156387329,0.201043993234634,1.2078560590744,14.2272043228149\n        ,-0.0554590001702309,0.292737007141113,14.1005353927612,0.453911006450653,0.102949999272823,14.0750226974487,1.22226297855377\n        ,2.3223569393158,14.1696844100952,0.757678985595703,2.74612402915955,13.1613607406616,1.81473004817963,3.52351808547974\n        ,13.3137845993042,1.41021299362183,4.07391881942749,11.5029983520508,2.21419310569763,4.46008491516113,11.6761035919189\n        ,1.73573398590088,5.00057792663574,14.1197128295898,0.75049501657486,0.84908801317215,13.9271574020386,0.81058794260025\n        ,0.591765999794006,13.8647260665894,1.32616198062897,2.01072406768799,13.9969501495361,1.2639479637146,2.23578906059265\n        ,13.0012092590332,1.92415702342987,3.13362169265747,13.0971918106079,1.85302400588989,3.45393371582031,11.3908538818359\n        ,2.33619499206543,4.02878093719482,11.4788293838501,2.24708294868469,4.36365699768066,14.0445289611816,0.489760965108871\n        ,-0.225505992770195,14.1171455383301,-0.207783997058868,-0.640401005744934,14.0550327301025,0.529439985752106,0.105508998036385\n        ,13.9215707778931,0.662356019020081,0.12636099755764,7.83413791656494,-0.0283060017973185,1.913419008255,8.06515884399414\n        ,0.286482006311417,2.91064691543579,7.95277881622314,0.834507048130035,2.67236089706421,7.780601978302,0.469280004501343\n        ,1.68146514892578,8.78317642211914,1.03417301177979,4.53717422485352,8.70439052581787,1.56782102584839,4.13548183441162\n        ,9.94776630401611,1.60068798065186,5.2044620513916,9.77998733520508,2.07577204704285,4.66377878189087,7.95914030075073\n        ,0.885506987571716,2.59952688217163,8.74676513671875,1.62127304077148,4.04322910308838,8.78474044799805,1.72587299346924\n        ,3.80446791648865,8.04425525665283,0.948602974414825,2.30370092391968,9.76146507263184,2.11520910263062,4.5624737739563\n        ,9.8388090133667,2.19951796531677,4.26146602630615,7.76102113723755,0.52852201461792,1.38592100143433,7.91985082626343\n        ,0.685284018516541,1.6529289484024,7.53962087631226,-0.179324001073837,0.333211004734039,7.71288299560547,0.445039004087448\n        ,1.31922614574432,7.65219831466675,-0.232834994792938,0.904438018798828,7.80965709686279,0.549328029155731,1.63786089420319\n        ,13.9975500106812,0.58357697725296,-0.134222000837326,14.0162773132324,-0.11387600004673,-1.19407498836517,13.9406709671021\n        ,0.152143001556396,-1.3564670085907,13.8613548278809,0.385596007108688,-1.58571898937225,13.3260583877563,1.52340304851532\n        ,-0.926805019378662,13.6498346328735,0.799180924892426,-0.197821021080017,13.6360759735107,1.163419008255,0.459197998046875\n        ,13.214916229248,2.19469499588013,-0.354411989450455,13.3867931365967,1.8975909948349,1.65856885910034,12.879186630249\n        ,3.26200866699219,0.666939973831177,12.6128787994385,2.55630111694336,2.73621797561646,12.0652027130127,4.01996278762817\n        ,1.44470298290253,11.2527093887329,2.92929005622864,3.43369626998901,10.8725614547729,4.34354496002197,2.04087495803833\n        ,13.4099502563477,0.802688002586365,-1.48420095443726,13.4805784225464,0.323792994022369,-1.59506595134735,8.03701400756836\n        ,0.645461976528168,1.01014995574951,7.90348291397095,1.52642500400543,0.427454024553299,8.08730697631836,2.19412302970886\n        ,0.955696940422058,8.23932838439941,1.26469194889069,1.94163298606873,8.62477397918701,3.40587210655212,1.72736203670502\n        ,8.85360431671143,2.13062691688538,3.05519890785217,9.42286491394043,4.11251783370972,2.11699104309082,9.80203533172607\n        ,2.76634788513184,3.57874298095703,7.79784631729126,0.794174075126648,-0.103330008685589,7.82158517837524,0.364942997694016\n        ,-0.290657997131348,13.8217973709106,-0.170460999011993,0.398487001657486,13.8654460906982,0.0600179992616177,1.26387298107147\n        ,13.8260746002197,0.517706990242004,2.71623492240906,13.1112518310547,1.06115102767944,3.8931291103363,11.643946647644\n        ,1.41572594642639,4.7784481048584,13.7150077819824,-0.346439003944397,-0.612541973590851,13.6095657348633,-0.241651996970177\n        ,-1.15343594551086,8.24737453460693,-0.15752400457859,1.85458099842072,8.44620132446289,0.104812011122704,2.83339309692383\n        ,9.08258628845215,0.769033014774323,4.3923487663269,10.0709543228149,1.28220784664154,4.95027685165405,8.06989288330078\n        ,-0.31148499250412,0.740787029266357,7.96294832229614,-0.289009004831314,0.219812005758286,13.4217224121094,2.3107750415802\n        ,-0.375806987285614,13.5710763931274,1.59470999240875,-1.01851904392242,13.103946685791,3.42879104614258,0.713451981544495\n        ,12.2277145385742,4.27713680267334,1.65429794788361,10.9000606536865,4.61849594116211,2.28014898300171,13.5571355819702\n        ,-0.0426359996199608,-1.52019703388214,13.7583179473877,0.376628011465073,-1.67076504230499,13.8444566726685,-0.00786899961531162\n        ,-1.59044694900513,13.687385559082,0.836558997631073,-1.54808294773102,7.63128089904785,1.51451098918915,0.516359984874725\n        ,7.79104614257813,2.23954701423645,1.06171703338623,8.39723968505859,3.52309203147888,1.89859700202942,9.36298179626465\n        ,4.34764623641968,2.35511302947998,7.54345893859863,0.770093977451324,-0.0295189991593361,7.52011299133301,0.315405994653702\n        ,-0.201513007283211,7.88312101364136,-0.0476690009236336,-0.189381003379822,7.54605770111084,-0.0761459991335869,-0.107980996370316\n        ,14.1586351394653,-0.138848006725311,0.337846010923386,14.1826257705688,0.10935901850462,1.25752902030945,14.1024370193481\n        ,0.650152027606964,2.78769397735596,13.2866096496582,1.29429996013641,4.09255599975586,11.6883716583252,1.60427713394165\n        ,5.0113639831543,13.9429140090942,-0.219302996993065,-1.2073849439621,14.0385818481445,-0.306542009115219,-0.675978004932404\n        ,8.16566753387451,0.194731995463371,2.91308689117432,7.9301438331604,-0.113416999578476,1.92874503135681,8.86132144927979\n        ,0.920903027057648,4.54089879989624,10.0087671279907,1.47676694393158,5.21392393112183,7.72993421554565,-0.324436992406845\n        ,0.821264028549194,7.6232590675354,-0.286345988512039,0.279785007238388,13.9344873428345,0.0526309981942177,-1.52636194229126\n        ,7.47345447540283,-0.0321439988911152,-0.00272500002756715,10.7124395370483,57.0556602478027,-6.04039001464844,11.3695554733276\n        ,57.217170715332,-5.78218126296997,11.4667978286743,56.4108619689941,-5.70864200592041,10.7735166549683,56.329948425293\n        ,-6.00628137588501,12.6069326400757,57.5657844543457,-4.83701992034912,12.6863536834717,56.5795631408691,-4.74567937850952\n        ,13.3836278915405,57.7985610961914,-3.45969557762146,13.4556169509888,56.6929550170898,-3.40973043441772,13.5839586257935\n        ,57.8815231323242,-1.86121022701263,13.6550102233887,56.7342262268066,-1.84742498397827,12.3341121673584,57.7085723876953\n        ,-4.77183103561401,11.0727882385254,57.3072090148926,-5.68556499481201,13.0607481002808,57.9960670471191,-3.43343567848206\n        ,13.2453107833862,58.0991554260254,-1.88054573535919,10.4601907730103,57.1115608215332,-6.06003665924072,10.0851039886475\n        ,57.3179016113281,-6.09067630767822,10.4496412277222,57.3653335571289,-5.84987211227417,10.676438331604,57.221809387207\n        ,-5.81656265258789,11.0296907424927,57.836612701416,-5.64854335784912,11.9441976547241,58.6488418579102,-4.79833269119263\n        ,12.582670211792,59.116268157959,-3.46573519706726,12.736496925354,59.2816390991211,-1.91715252399445,10.4555358886719\n        ,58.6530647277832,-5.65306329727173,11.2547769546509,59.5086250305176,-4.84232950210571,11.7785902023315,60.1175575256348\n        ,-3.51702165603638,11.8950414657593,60.3289756774902,-1.96966993808746,9.57929134368896,56.9524612426758,-6.27373933792114\n        ,9.19234466552734,57.3395614624023,-6.29679536819458,9.7266731262207,57.8835411071777,-6.21597003936768,10.1856927871704\n        ,57.5712623596191,-6.24911499023438,9.97100353240967,56.2237091064453,-6.13345384597778,9.34849166870117,56.7671585083008\n        ,-6.17100095748901,10.2850532531738,58.4537925720215,-6.10226821899414,10.7824363708496,57.8354225158691,-6.08034324645996\n        ,8.88277912139893,58.869197845459,-6.15048742294312,8.15592193603516,58.9244689941406,-6.1637921333313,8.21378612518311\n        ,59.6352043151855,-5.90438842773438,9.02373790740967,59.5423164367676,-5.92333841323853,8.31526947021484,60.9121170043945\n        ,-5.008704662323,9.30575180053711,60.8378715515137,-5.03566408157349,8.3420991897583,61.7613945007324,-3.71743059158325\n        ,9.44917964935303,61.6983299255371,-3.69644641876221,8.28723239898682,62.0546913146973,-2.17042446136475,9.43372058868408\n        ,61.9951782226563,-2.1109459400177,9.44623279571533,60.5709953308105,-4.94560480117798,9.10982704162598,59.2528686523438\n        ,-5.80368280410767,9.64699649810791,61.3797302246094,-3.63885402679443,9.65449810028076,61.658317565918,-2.09661841392517\n        ,9.19142436981201,58.6108055114746,-5.92598390579224,9.15252304077148,58.2418937683105,-6.14308214187622,8.9415225982666\n        ,58.6167831420898,-6.15146541595459,9.03530979156494,58.8484725952148,-5.91531658172607,10.3890905380249,60.1902389526367\n        ,-4.89191007614136,9.66245079040527,59.1945419311523,-5.73063850402832,10.7704238891602,60.9125442504883,-3.57478475570679\n        ,10.8405637741089,61.1608543395996,-2.03123736381531,8.80425930023193,57.7260208129883,-6.3200306892395,9.25882434844971\n        ,58.3663139343262,-6.24290418624878,8.73712539672852,57.6652565002441,-6.2053050994873,8.21891403198242,57.6878395080566\n        ,-6.23664903640747,8.06321239471436,58.1146774291992,-6.24825286865234,9.66301536560059,58.9449691772461,-6.14769983291626\n        ,9.12459373474121,57.2783203125,-6.17943382263184,9.51206493377686,56.8916168212891,-6.1587438583374,9.03224182128906\n        ,57.1845245361328,-6.18972444534302,8.61232662200928,57.4968490600586,-6.2152943611145,10.9453954696655,57.8632202148438\n        ,-5.74091577529907,10.350643157959,57.4555130004883,-5.97056674957275,10.3734855651855,58.5632514953613,-5.76876640319824\n        ,9.6894416809082,59.1076164245605,-5.81734275817871,9.28597164154053,58.5109214782715,-6.03513240814209,10.2982120513916\n        ,57.1268005371094,2.01532077789307,10.3618040084839,56.4006576538086,2.00044465065002,11.08203125,56.4769401550293\n        ,1.77409958839417,10.9784908294678,57.2843399047852,1.82306373119354,12.3940715789795,56.6297569274902,0.938472449779511\n        ,12.3065929412842,57.617374420166,1.00379812717438,13.2963943481445,56.7202949523926,-0.313323259353638,13.220666885376\n        ,57.826545715332,-0.290488749742508,12.0420293807983,57.7587356567383,0.908468961715698,10.6932783126831,57.3723831176758\n        ,1.69494712352753,12.9023599624634,58.0232734680176,-0.353199779987335,10.056619644165,57.4328308105469,1.79342937469482\n        ,9.66926383972168,57.3893241882324,1.99637413024902,10.0453290939331,57.1828155517578,2.00800490379334,10.2855052947998\n        ,57.2889518737793,1.78608930110931,11.6523027420044,58.6989669799805,0.878273189067841,10.6546821594238,57.9010162353516\n        ,1.64438211917877,12.4245052337646,59.1434364318848,-0.389839947223663,10.9627838134766,59.5587730407715,0.836178302764893\n        ,10.0838317871094,58.7168960571289,1.57561039924622,11.6203145980835,60.1447372436523,-0.438937902450562,9.14701271057129\n        ,57.0266990661621,2.13300395011902,9.7873067855835,57.4932861328125,2.10201096534729,9.30038547515869,57.9567565917969\n        ,2.07426238059998,8.76009178161621,57.4137916564941,2.10942983627319,9.09187984466553,56.9637870788574,2.01281023025513\n        ,9.12253379821777,56.4475059509277,2.02332544326782,9.55038642883301,56.2959442138672,2.04649186134338,9.86799907684326\n        ,58.5254211425781,2.00840091705322,10.3644466400146,57.9072036743164,2.04850101470947,8.46854972839355,58.9403343200684\n        ,1.90522265434265,8.63267230987549,59.6094818115234,1.68190681934357,7.82902050018311,59.7012825012207,1.57835364341736\n        ,7.74421215057373,58.995174407959,1.84293389320374,9.00541400909424,60.8894577026367,0.805153012275696,8.02298831939697\n        ,60.9623184204102,0.675447344779968,9.28621673583984,61.7263221740723,-0.527239799499512,8.18287944793701,61.7887420654297\n        ,-0.621023893356323,9.15414905548096,60.621166229248,0.734693169593811,8.73031616210938,59.318042755127,1.57682824134827\n        ,9.48860740661621,61.4069328308105,-0.558619141578674,8.52665519714355,58.6880378723145,1.91666579246521,8.73706245422363\n        ,58.3132476806641,1.93657350540161,8.79835987091064,58.6783180236816,1.71814370155334,8.64437675476074,58.9156112670898\n        ,1.68733644485474,9.28746700286865,59.2589454650879,1.56188571453094,10.0971956253052,60.2403717041016,0.784696280956268\n        ,10.6122608184814,60.9397087097168,-0.498890727758408,8.37201976776123,57.8002471923828,2.08593034744263,8.83267974853516\n        ,58.4394950866699,2.04456353187561,8.31695175170898,57.7374114990234,1.96601176261902,7.79827928543091,57.7600860595703\n        ,1.94363927841187,7.64259576797485,58.1869201660156,1.93169260025024,9.24502658843994,59.0167579650879,1.98113739490509\n        ,8.92779922485352,56.8394050598145,2.01041603088379,8.70467948913574,57.3504486083984,1.98683440685272,8.61167430877686\n        ,57.256763458252,1.98925125598907,8.19163417816162,57.5690956115723,1.96611356735229,9.94584655761719,57.525032043457\n        ,1.90172684192657,10.5613842010498,57.9291648864746,1.72713911533356,9.99026870727539,58.6290702819824,1.68385112285614\n        ,9.30534172058105,59.1735763549805,1.65241873264313,8.88112354278564,58.5804481506348,1.83815741539001,10.6770095825195\n        ,56.2945251464844,-5.6465892791748,11.2824172973633,56.3772201538086,-5.38556575775146,11.1279258728027,57.0764274597168\n        ,-5.44551849365234,10.5325889587402,56.9753379821777,-5.668053150177,12.4072904586792,56.5365180969238,-4.50114870071411\n        ,12.2783660888672,57.4414901733398,-4.57866668701172,13.107325553894,56.6325569152832,-3.28944134712219,12.956844329834\n        ,57.6888580322266,-3.33421206474304,13.288010597229,56.6680717468262,-1.86571216583252,13.1303119659424,57.7768707275391\n        ,-1.88361310958862,11.0010108947754,59.2677192687988,-4.5934591293335,9.69742584228516,57.7487487792969,-5.73776483535767\n        ,11.4663410186768,59.8099174499512,-3.39544725418091,11.5693311691284,59.9995307922363,-1.98350858688354,9.28171920776367\n        ,56.7352981567383,-5.80496978759766,9.47168254852295,56.3339920043945,-5.79171323776245,9.90828132629395,56.1729278564453\n        ,-5.76813793182373,8.86398029327393,59.3201179504395,-5.58211421966553,8.1619234085083,59.4702033996582,-5.57333850860596\n        ,8.09944534301758,58.8493728637695,-5.80169248580933,8.80362987518311,58.6593933105469,-5.7381386756897,9.16833877563477\n        ,60.5241088867188,-4.76580858230591,8.25944137573242,60.6478080749512,-4.75074100494385,8.2769718170166,61.420337677002\n        ,-3.58010292053223,9.33507061004639,61.2787055969238,-3.55214762687683,8.22487926483154,61.6865692138672,-2.1703794002533\n        ,9.33380794525146,61.5399169921875,-2.11206364631653,8.55876350402832,57.4518356323242,-5.84847402572632,8.15613555908203\n        ,57.6380157470703,-5.87087488174438,7.99083137512207,58.0734748840332,-5.88351821899414,10.7725353240967,57.1374664306641\n        ,1.46592569351196,10.9317245483398,56.4374504089355,1.43446028232574,10.3026676177979,56.3588180541992,1.63343214988709\n        ,10.107006072998,57.0631408691406,1.5913724899292,12.0061445236206,57.4882507324219,0.715340316295624,12.1415195465088\n        ,56.5821571350098,0.667407095432281,12.9622240066528,56.6574783325195,-0.467617064714432,12.8089008331299,57.7142639160156\n        ,-0.457129806280136,9.50034141540527,58.1038665771484,1.45586562156677,10.7501258850098,59.2968711853027,0.63189959526062\n        ,11.3219013214111,59.834716796875,-0.586458146572113,8.89888954162598,56.8010444641113,1.64008665084839,9.08884716033936\n        ,56.3997383117676,1.65345370769501,9.52541637420654,56.2386856079102,1.67762064933777,7.7251033782959,58.9136619567871\n        ,1.47833013534546,7.81123399734497,59.5304336547852,1.24668753147125,8.50855350494385,59.381160736084,1.33006381988525\n        ,8.40606021881104,58.7755432128906,1.52266371250153,7.99366998672485,60.6934432983398,0.417815059423447,8.8961181640625\n        ,60.5708656311035,0.528197646141052,8.13187026977539,61.445255279541,-0.758278369903564,9.18712902069092,61.3041152954102\n        ,-0.675066649913788,8.17593479156494,57.517578125,1.59658348560333,7.7733006477356,57.7037582397461,1.57428932189941\n        ,7.60796737670898,58.1392364501953,1.5622410774231,10.763858795166,56.2821884155273,-5.95393514633179,11.4453239440918\n        ,56.3634719848633,-5.66015243530273,12.6503982543945,56.5307769775391,-4.70776414871216,13.4095573425293,56.6416015625\n        ,-3.391108751297,13.6064786911011,56.6820526123047,-1.84945964813232,9.93995380401611,56.1746597290039,-6.08649778366089\n        ,9.49487972259521,56.3378257751465,-6.11084508895874,8.1636962890625,59.6161727905273,-5.85762119293213,8.10515403747559\n        ,58.9174652099609,-6.11392068862915,8.26453495025635,60.8779907226563,-4.97167921066284,8.29004001617432,61.715991973877\n        ,-3.69916963577271,8.23561573028564,62.0055694580078,-2.1726450920105,8.01162910461426,58.0859870910645,-6.20253276824951\n        ,8.17909812927246,57.642017364502,-6.19002056121826,8.96710681915283,57.1409759521484,-5.82494354248047,8.99288368225098\n        ,57.1476135253906,-6.14383411407471,9.30475997924805,56.736442565918,-6.12413787841797,8.5791015625,57.455696105957\n        ,-6.1678032875061,11.065601348877,56.4286880493164,1.72450625896454,10.3575248718262,56.3519821166992,1.9482342004776\n        ,12.3621492385864,56.5802879333496,0.897935330867767,13.2524452209473,56.668586730957,-0.335663348436356,9.52427101135254\n        ,56.2460517883301,1.99746978282928,9.07919597625732,56.4092216491699,1.97316372394562,7.6988205909729,58.9872550964355\n        ,1.78824877738953,7.7839732170105,59.6813888549805,1.52703857421875,7.9762864112854,60.9274864196777,0.634021580219269\n        ,8.13292789459229,61.742977142334,-0.643724203109741,7.59594821929932,58.1573753356934,1.88143527507782,7.76341438293457\n        ,57.7134094238281,1.89398753643036,8.58425617218018,57.2067337036133,1.62053740024567,8.88907718658447,56.8078346252441\n        ,1.95986318588257,8.57719612121582,57.2189979553223,1.94022345542908,8.16341876983643,57.5270957946777,1.91619777679443\n        ,9.54316806793213,56.3752670288086,-6.15696382522583,9.10171604156494,58.2966079711914,2.16415286064148,9.0726432800293\n        ,58.4523010253906,2.27199339866638,7.67046976089478,57.2544784545898,2.45488667488098,7.76439476013184,57.1340179443359\n        ,2.34261202812195,7.50693845748901,56.9871940612793,2.48459267616272,7.63928031921387,56.9295234680176,2.3653404712677\n        ,7.49976921081543,56.674201965332,2.51717662811279,7.63379526138306,56.6900596618652,2.3902690410614,7.65088319778442\n        ,56.3993949890137,2.54390692710876,7.74941062927246,56.4798049926758,2.41072201728821,7.91978979110718,56.236400604248\n        ,2.55762553215027,7.9551477432251,56.355094909668,2.4212167263031,8.23443508148193,56.228874206543,2.55465221405029\n        ,8.19587802886963,56.3493423461914,2.41894102096558,8.5105094909668,56.378849029541,2.53578400611877,8.40709781646729\n        ,56.4640884399414,2.40450549125671,9.80013942718506,57.6939811706543,2.34205198287964,9.65831279754639,57.7164344787598\n        ,2.21775436401367,9.80730724334717,58.006965637207,2.30946803092957,9.66379642486572,57.9558944702148,2.1928231716156\n        ,9.65619373321533,58.2817726135254,2.28273773193359,9.54818153381348,58.1661415100098,2.17237114906311,9.38728809356689\n        ,58.4447746276855,2.26901984214783,9.34244537353516,58.2908554077148,2.16187739372253,9.04439544677734,58.5109443664551\n        ,2.0685338973999,7.60246086120605,57.2915229797363,2.25414371490479,7.41537761688232,56.9857330322266,2.28812718391418\n        ,7.40717649459839,56.6276779174805,2.32540369033813,7.58005428314209,56.3132934570313,2.35598564147949,7.8876895904541\n        ,56.1268119812012,2.37167835235596,8.24765110015869,56.1182098388672,2.36827683448792,8.56348419189453,56.2897834777832\n        ,2.34669184684753,9.87666797637939,57.6434135437012,2.1486828327179,9.88486957550049,58.0014686584473,2.11140513420105\n        ,9.711989402771,58.315860748291,2.08082342147827,9.40435600280762,58.5023384094238,2.06513118743896,7.89354467391968\n        ,57.5541725158691,2.19163465499878,7.53492975234985,57.3593597412109,2.21614170074463,7.32250690460205,57.012149810791\n        ,2.25473022460938,7.31319618225098,56.6055946350098,2.2970564365387,7.50949048995972,56.2486190795898,2.33177995681763\n        ,7.85879421234131,56.0368804931641,2.34959721565247,8.26751136779785,56.0271224975586,2.34573411941528,8.62612819671631\n        ,56.2219314575195,2.32122707366943,8.83854961395264,56.5691299438477,2.28263998031616,8.84786224365234,56.9756927490234\n        ,2.24031329154968,8.65156650543213,57.3326644897461,2.20558881759644,8.3022632598877,57.5444030761719,2.18777060508728\n        ,7.89016580581665,57.4804611206055,1.55401968955994,7.53544425964355,57.2877616882324,1.57826209068298,7.32532835006714\n        ,56.9443244934082,1.61643016338348,7.31611824035645,56.5421905517578,1.65829622745514,7.51028060913086,56.1890907287598\n        ,1.69264352321625,7.85579109191895,55.9796562194824,1.71026754379272,8.26007080078125,55.9699859619141,1.70644688606262\n        ,8.61478996276855,56.1626892089844,1.68220448493958,8.82490634918213,56.5061225891113,1.64403653144836,8.83411598205566\n        ,56.9082641601563,1.60216987133026,8.63995456695557,57.2613563537598,1.56782293319702,8.29444313049316,57.4707984924316\n        ,1.55019891262054,8.08557796478271,56.8008575439453,2.39255380630493,9.37066745758057,58.0004348754883,2.19909453392029\n        ,7.95090341567993,57.4940376281738,2.41830825805664,8.03185844421387,57.3665313720703,2.30692052841187,8.34259605407715\n        ,57.040771484375,2.35386204719543,8.65734004974365,56.7145500183105,2.36715579032898,8.76843547821045,56.6418800354004\n        ,2.49703741073608,8.46897029876709,58.0325546264648,2.13008427619934,8.51177406311035,57.9731674194336,2.34515070915222\n        ,8.56678771972656,57.8315696716309,2.23553681373596,8.8566312789917,57.5205993652344,2.27647852897644,9.1578254699707\n        ,57.2154922485352,2.29245519638062,9.28428745269775,57.1679306030273,2.41954469680786,9.35760879516602,57.106273651123\n        ,2.21566128730774,9.41757202148438,58.2211647033691,-6.37134647369385,8.07729625701904,57.0513572692871,-6.45569038391113\n        ,7.98838758468628,57.1577568054199,-6.58496856689453,9.39362621307373,58.3627853393555,-6.49816751480103,7.95128870010376\n        ,56.8461570739746,-6.45800352096558,7.82368993759155,56.8895606994629,-6.58799409866333,7.94460821151733,56.6054725646973\n        ,-6.45401096343994,7.81495904922485,56.5749664306641,-6.58277559280396,8.05904579162598,56.3937911987305,-6.44478559494019\n        ,7.96453428268433,56.2982864379883,-6.57071495056152,8.26393795013428,56.267822265625,-6.43279695510864,8.23233413696289\n        ,56.1336479187012,-6.55504512786865,8.50438404083252,56.261344909668,-6.42125701904297,8.54660892486572,56.125171661377\n        ,-6.53996276855469,8.71595478057861,56.3760681152344,-6.41325855255127,8.82314300537109,56.2751235961914,-6.52950954437256\n        ,9.97066688537598,57.636344909668,-6.33459901809692,10.1165437698364,57.5984039306641,-6.45013761520386,9.97734546661377\n        ,57.8770370483398,-6.33859014511108,10.1252737045288,57.9129905700684,-6.45535469055176,9.86290836334229,58.0887222290039\n        ,-6.34781646728516,9.97570037841797,58.1896705627441,-6.46741533279419,9.6580171585083,58.2146797180176,-6.35980606079102\n        ,9.7078971862793,58.3543128967285,-6.48308515548706,7.91374015808105,57.219108581543,-6.39272308349609,9.35880374908447\n        ,58.445743560791,-6.30441761016846,7.72532224655151,56.9122772216797,-6.3961820602417,7.71533393859863,56.5523872375488\n        ,-6.39021348953247,7.88645076751709,56.2358589172363,-6.37641716003418,8.19282341003418,56.0475082397461,-6.35848951339722\n        ,8.55235767364502,56.0378112792969,-6.34123420715332,8.86871910095215,56.2093658447266,-6.32927560806274,10.1858406066895\n        ,57.5712661743164,-6.24947023391724,10.1958293914795,57.9311676025391,-6.25543737411499,10.0247116088867,58.2476959228516\n        ,-6.26923513412476,9.71834087371826,58.4360466003418,-6.28716278076172,8.20472621917725,57.4861259460449,-6.35204792022705\n        ,7.84551382064819,57.2913436889648,-6.36562538146973,7.63157510757446,56.9429512023926,-6.36955308914185,7.62023305892944\n        ,56.534309387207,-6.36277627944946,7.814528465271,56.1749076843262,-6.34711170196533,8.16239833831787,55.9610481262207\n        ,-6.3267560005188,8.57063388824463,55.9500350952148,-6.30716323852539,8.92984580993652,56.1448211669922,-6.29358530044556\n        ,9.14378356933594,56.4932136535645,-6.28965759277344,9.15512657165527,56.90185546875,-6.29643392562866,8.96083068847656\n        ,57.2612571716309,-6.31209850311279,8.61295986175537,57.4751167297363,-6.33245468139648,7.82315683364868,57.2974548339844\n        ,-5.72415924072266,8.17846775054932,57.490119934082,-5.71072673797607,7.61154174804688,56.9528427124023,-5.72804355621338\n        ,7.60032320022583,56.548641204834,-5.72134017944336,7.79250907897949,56.1931419372559,-5.70584535598755,8.13660049438477\n        ,55.9816055297852,-5.68571043014526,8.54040145874023,55.9707107543945,-5.66633129119873,8.89571189880371,56.1633796691895\n        ,-5.65289926528931,9.10732746124268,56.5079917907715,-5.64901494979858,9.11854648590088,56.9122009277344,-5.65571737289429\n        ,8.92636108398438,57.2676963806152,-5.6712121963501,8.58226871490479,57.4792327880859,-5.69134712219238,8.39713573455811\n        ,56.7132110595703,-6.45354127883911,8.35801219940186,56.7312316894531,-5.65404605865479,9.10042572021484,56.5588111877441\n        ,-6.51249361038208,9.00266551971436,56.6640510559082,-6.39528465270996,8.68764209747314,56.9858283996582,-6.43258762359619\n        ,8.39200592041016,57.326042175293,-6.43588542938232,8.31364345550537,57.4366760253906,-6.5648775100708,9.71927833557129\n        ,57.9539375305176,-6.35817623138428,9.53972148895264,58.2807655334473,-6.29448080062866,9.78838539123535,58.0285758972168\n        ,-6.27875709533691,9.99997234344482,57.7374534606934,-6.26315259933472,9.20345973968506,57.4698867797852,-6.39538192749023\n        ,9.48666667938232,57.1501922607422,-6.36494207382202,9.60848426818848,57.07861328125,-6.48131608963013,9.66481113433838\n        ,57.0322380065918,-6.26956367492676,9.57754898071289,57.319652557373,-6.27979326248169,9.37460803985596,57.6449127197266\n        ,-6.2954273223877,9.076340675354,57.8779449462891,-6.31346797943115,8.78176498413086,57.9659423828125,-6.32823324203491\n        ,8.85363483428955,57.899730682373,-6.53152275085449,8.90478801727295,57.7736015319824,-6.40361595153809,8.62180233001709\n        ,57.0199012756348,-6.05530881881714,8.20690155029297,57.2244300842285,-6.10898733139038,8.17655849456787,57.2355613708496\n        ,-5.83204317092896,8.59145927429199,57.0310325622559,-5.77836561203003,7.79200172424316,57.4289627075195,-6.16266393661499\n        ,7.76165914535522,57.4400939941406,-5.88572072982788,7.49404430389404,57.5786743164063,-6.40941333770752,7.46370267868042\n        ,57.5898094177246,-6.13247013092041,7.16427659988403,57.7414360046387,-6.46620416641235,7.13393402099609,57.7525672912598\n        ,-6.18926095962524,6.54581737518311,58.0482940673828,-6.54360771179199,6.51547479629517,58.0594291687012,-6.26666355133057\n        ,6.10629081726074,57.9500389099121,-6.57935810089111,6.07594680786133,57.9611740112305,-6.30241441726685,6.51593399047852\n        ,57.963924407959,-6.63410091400146,6.2043285369873,57.902961730957,-6.66317367553711,7.13439416885376,57.6570701599121\n        ,-6.55669927597046,7.46416234970093,57.494312286377,-6.49990797042847,7.76211929321289,57.344596862793,-6.25315952301025\n        ,8.1770191192627,57.1400680541992,-6.19948053359985,8.5919189453125,56.9355392456055,-6.14580249786377,7.687584400177\n        ,56.2433242797852,-5.8429012298584,7.2726845741272,56.4478530883789,-5.89657926559448,6.97472810745239,56.5975685119629\n        ,-6.1433277130127,6.64495849609375,56.760326385498,-6.200119972229,6.02649831771851,57.0671882629395,-6.27752161026001\n        ,5.82846117019653,57.4524879455566,-6.31333494186401,5.85880327224731,57.4413528442383,-6.59027910232544,5.95684099197388\n        ,57.3942832946777,-6.67409420013428,6.10631132125854,57.1332359313965,-6.64275789260864,6.72477197647095,56.8263854980469\n        ,-6.56535577774048,7.05454254150391,56.6636238098145,-6.50856494903564,7.35249805450439,56.5139007568359,-6.26181602478027\n        ,7.7673978805542,56.3093719482422,-6.20813894271851,6.05684041976929,57.0560569763184,-6.55446577072144,6.67530250549316\n        ,56.749195098877,-6.47706317901611,7.00507020950317,56.5864448547363,-6.42027235031128,7.30302715301514,56.4367218017578\n        ,-6.17352294921875,7.7179274559021,56.2321929931641,-6.11984539031982,-3.61213994026184,63.0742874145508,0.9124436378479\n        ,-3.35697841644287,62.0683555603027,1.8799649477005,-3.08504390716553,62.3842697143555,2.03850078582764,-3.30717325210571\n        ,63.3338012695313,1.14116930961609,-2.58666610717773,62.4479675292969,1.94942438602448,-2.8619236946106,63.388801574707\n        ,1.0897604227066,-2.32412028312683,62.3157958984375,1.72282636165619,-2.54204511642456,63.1886177062988,0.857616245746613\n        ,-2.59025049209595,61.6884994506836,1.16627395153046,-2.85399842262268,62.5235786437988,0.263086229562759,-3.17207551002502\n        ,61.7568206787109,1.39954209327698,-3.43519830703735,62.611499786377,0.514534771442413,-3.63598537445068,63.2521781921387\n        ,0.69645893573761,-3.32681488990784,63.5149726867676,0.927509665489197,-3.29148149490356,64.2173690795898,-0.109086737036705\n        ,-3.62270712852478,63.9034881591797,-0.306464165449142,-2.8858904838562,63.5703086853027,0.875525891780853,-2.83971810340881\n        ,64.1814880371094,-0.0564945302903652,-2.55843424797058,63.3702926635742,0.642616629600525,-2.50405740737915,63.9123001098633\n        ,-0.123237006366253,-2.8638768196106,62.6970977783203,0.108471132814884,-2.77562379837036,63.1545944213867,-0.604941248893738\n        ,-3.46092629432678,62.7867164611816,0.294167369604111,-3.43210530281067,63.3568954467773,-0.579706788063049,-3.256014585495\n        ,64.5693740844727,-1.60241901874542,-3.58352303504944,64.0412521362305,-0.546477496623993,-3.24679207801819,64.355598449707\n        ,-0.348915934562683,-2.92236948013306,64.8243789672852,-1.32648360729218,-2.79290914535522,64.3191986083984,-0.297434836626053\n        ,-2.51000738143921,64.7322540283203,-1.14120411872864,-2.45186758041382,64.0473709106445,-0.362849801778793,-2.19106101989746\n        ,64.3612518310547,-1.09568011760712,-2.70859456062317,63.2933158874512,-0.840461909770966,-2.43458151817322,63.6225776672363\n        ,-1.45423483848572,-3.38490152359009,63.4919891357422,-0.821362257003784,-3.0491464138031,63.9436988830566,-1.78154337406158\n        ,-2.57595777511597,64.9778366088867,-2.6725537776947,-3.1440896987915,64.6701354980469,-1.83323156833649,-2.81245827674866\n        ,64.9234924316406,-1.55989825725555,-2.3226158618927,65.2118072509766,-2.34885287284851,-2.39819836616516,64.8362884521484\n        ,-1.37234389781952,-1.97928023338318,65.0992202758789,-2.01913595199585,-2.0773754119873,64.4590759277344,-1.32713222503662\n        ,-1.72631311416626,64.6864547729492,-1.87331461906433,-2.31362891197205,63.7234535217285,-1.68494808673859,-1.92199409008026\n        ,63.942066192627,-2.33426547050476,-2.93078923225403,64.038932800293,-2.01300573348999,-2.42004132270813,64.294548034668\n        ,-2.75134778022766,-2.39229536056519,65.0288314819336,-2.85661482810974,-2.14243960380554,65.269775390625,-2.53773021697998\n        ,-1.26141941547394,65.4044723510742,-3.14796590805054,-1.37994861602783,65.1316375732422,-3.55027008056641,-1.79749488830566\n        ,65.1639251708984,-2.20590353012085,-1.05894148349762,65.2965240478516,-2.71703100204468,-1.54621398448944,64.7531356811523\n        ,-2.05670237541199,-0.918171525001526,64.8731536865234,-2.47819972038269,-1.73880863189697,63.9987030029297,-2.52019095420837\n        ,-1.05267798900604,64.1080093383789,-2.95110249519348,-2.23095893859863,64.3469390869141,-2.93175864219666,-1.30283260345459\n        ,64.4658584594727,-3.51517343521118,-1.14292597770691,65.1440811157227,-3.65478587150574,-1.02547371387482,65.4231796264648\n        ,-3.2559015750885,0.13047032058239,65.4414825439453,-3.54996991157532,0.0952271744608879,65.1560363769531,-3.93723583221436\n        ,-0.822809159755707,65.3192520141602,-2.82474994659424,0.159597724676132,65.3439025878906,-3.07465958595276,-0.683079063892365\n        ,64.8978118896484,-2.58284640312195,0.165363445878029,64.9232025146484,-2.7937171459198,-0.813165485858917,64.1283264160156\n        ,-3.05124926567078,0.108703263103962,64.14697265625,-3.26859927177429,-1.06255924701691,64.4810638427734,-3.61365294456482\n        ,0.0793721079826355,64.4871368408203,-3.85984587669373,-2.75332641601563,61.2146377563477,2.80682158470154,-3.02745985984802\n        ,62.1653861999512,2.20834875106812,-3.29413962364197,61.8534240722656,2.05397295951843,-2.98762607574463,60.9160995483398\n        ,2.68516731262207,-2.5285222530365,62.2322120666504,2.12074708938599,-2.30419564247131,61.3310317993164,2.74024105072021\n        ,-2.26474595069885,62.1056976318359,1.90227031707764,-2.0128014087677,61.2975273132324,2.49436450004578,-2.51925134658813\n        ,61.4904861450195,1.42052376270294,-2.23242950439453,60.658992767334,2.08475351333618,-2.83238387107849,60.6267929077148\n        ,2.28150844573975,-3.10810112953186,61.546142578125,1.58604788780212,-1.99876511096954,60.0553932189941,2.86955976486206\n        ,-2.24390172958374,61.076831817627,2.8048152923584,-2.69164276123047,60.940975189209,2.86721706390381,-2.63764548301697\n        ,59.9638633728027,2.75425934791565,-2.76606631278992,60.4017868041992,2.44312739372253,-2.16079878807068,60.4579582214355\n        ,2.27013802528381,-1.13655304908752,65.2722549438477,-3.20241522789001,-1.22373235225677,65.0585403442383,-3.51007008552551\n        ,-0.974662899971008,65.1921691894531,-2.87555885314941,-0.859975397586823,64.8638610839844,-2.68954801559448,-0.959364235401154\n        ,64.2740859985352,-3.04318070411682,-1.15380275249481,64.5525436401367,-3.47173738479614,-3.31022834777832,63.2359428405762\n        ,0.919619858264923,-3.53940153121948,63.0512771606445,0.743501126766205,-2.97155117988586,63.2838172912598,0.874339401721954\n        ,-2.72124218940735,63.1311111450195,0.687183558940887,-2.96068978309631,62.6333312988281,0.285006642341614,-3.40652298927307\n        ,62.6991806030273,0.436503946781158,-3.4934549331665,63.9235954284668,-0.430678248405457,-3.23643088340759,64.1706924438477\n        ,-0.287341684103012,-2.87822294235229,64.1393966674805,-0.254750579595566,-2.61495733261108,63.9441452026367,-0.299727559089661\n        ,-2.81512451171875,63.3578414916992,-0.668448567390442,-3.34042429924011,63.5154266357422,-0.633352518081665,-3.10319185256958\n        ,64.5544204711914,-1.68715798854828,-2.838214635849,64.7433624267578,-1.48133432865143,-2.51200199127197,64.6696395874023\n        ,-1.33998775482178,-2.25697326660156,64.3717269897461,-1.3023225069046,-2.43367147445679,63.8228034973145,-1.54456543922424\n        ,-2.92679381370544,64.0788040161133,-1.82429134845734,-2.22023415565491,65.1060409545898,-2.46578550338745,-2.41531682014465\n        ,64.9314041137695,-2.70062112808228,-1.94377982616425,65.021842956543,-2.21043109893799,-1.7426495552063,64.6985168457031\n        ,-2.09731411933899,-1.89084160327911,64.1259384155273,-2.44964075088501,-2.28149557113647,64.4059677124023,-2.76189875602722\n        ,-3.04034876823425,62.1378059387207,1.9870936870575,-3.23064041137695,61.8979263305664,1.89186644554138,-2.63217568397522\n        ,62.1806526184082,1.90964543819427,-2.44575428962708,62.0799980163574,1.75566875934601,-2.62495112419128,61.6172981262207\n        ,1.41981995105743,-3.0793662071228,61.6779861450195,1.53219282627106,-2.69351363182068,61.0704765319824,2.73514080047607\n        ,-2.83499526977539,60.821403503418,2.6821186542511,-2.32376790046692,61.1692924499512,2.68417191505432,-2.09564399719238\n        ,61.1407737731934,2.50819373130798,-2.24191975593567,60.6346855163574,2.28552436828613,-2.71739792823792,60.6012229919434\n        ,2.43733906745911,-2.911208152771,60.6353797912598,2.75616860389709,-1.96656572818756,61.0282936096191,2.59466052055359\n        ,4.28434991836548,62.8252143859863,0.3774034678936,4.02987480163574,63.1023750305176,0.644034564495087,3.87156915664673\n        ,62.1648445129395,1.56714284420013,4.09929990768433,61.8331680297852,1.37475287914276,3.58609437942505,63.185417175293\n        ,0.652862966060638,3.37072014808655,62.2600593566895,1.54577028751373,3.22592759132385,63.0066833496094,0.466796100139618\n        ,3.07226300239563,62.145580291748,1.35718357563019,3.4125759601593,62.3259162902832,-0.161517307162285,3.22108316421509\n        ,61.505199432373,0.772515833377838,4.02672004699707,62.3761367797852,0.0089394748210907,3.83216571807861,61.5358924865723\n        ,0.924957275390625,4.28998422622681,63.0021743774414,0.159421265125275,4.18255949020386,63.6572914123535,-0.835323393344879\n        ,3.9013032913208,63.9904899597168,-0.596446633338928,4.03187084197998,63.2828521728516,0.428909122943878,3.45939421653748\n        ,63.9827995300293,-0.483302682638168,3.5923113822937,63.3659706115723,0.436583310365677,3.10158205032349,63.7354850769043\n        ,-0.503058195114136,3.22455739974976,63.1878814697266,0.250778764486313,3.25768327713013,62.9642868041992,-1.01373946666718\n        ,3.41239428520203,62.4991264343262,-0.316789388656616,3.92296314239502,63.1248970031738,-1.07806241512299,4.03345727920532\n        ,62.5503234863281,-0.213627681136131,3.68707180023193,64.3503799438477,-2.07286024093628,3.41031622886658,64.624626159668\n        ,-1.75556659698486,3.83346271514893,64.1322708129883,-0.828650236129761,4.12010908126831,63.7982597351074,-1.06845033168793\n        ,3.02172446250916,64.5577697753906,-1.51601755619049,3.3892765045166,64.1241989135742,-0.716319501399994,2.68918180465698\n        ,64.2073211669922,-1.42635130882263,3.02615571022034,63.874584197998,-0.734024167060852,2.83533811569214,63.4563522338867\n        ,-1.8113089799881,3.16836261749268,63.1079406738281,-1.23866653442383,3.41911268234253,63.7396774291992,-2.2198121547699\n        ,3.85219359397888,63.2637176513672,-1.31172442436218,2.89598488807678,64.8052444458008,-3.04331517219543,2.7037570476532\n        ,65.0532608032227,-2.68942427635193,3.27638959884644,64.7314376831055,-1.97245848178864,3.5516083240509,64.4589385986328\n        ,-2.28691077232361,2.40160512924194,64.9610366821289,-2.31597256660461,2.88653588294983,64.6695938110352,-1.73042178153992\n        ,2.14520502090454,64.564338684082,-2.13563776016235,2.55170559883118,64.3130645751953,-1.64078557491302,2.22989583015442\n        ,63.811107635498,-2.61558604240417,2.69096708297729,63.5655975341797,-2.02404379844666,2.688316822052,64.1334228515625\n        ,-3.09747505187988,3.27685332298279,63.8431282043457,-2.43361616134644,2.69275808334351,64.8684387207031,-3.20116209983826\n        ,1.60463094711304,65.0374984741211,-3.75249838829041,1.55874860286713,65.3155136108398,-3.33905458450317,2.50376582145691\n        ,65.1232223510742,-2.85254383087158,1.40982067584991,65.2186508178711,-2.88430953025818,2.20072984695435,65.0378112792969\n        ,-2.47681260108948,1.27623987197876,64.8039398193359,-2.62688946723938,1.94657623767853,64.6429672241211,-2.29336524009705\n        ,1.29752290248871,64.0338745117188,-3.11034798622131,2.02724313735962,63.8799133300781,-2.7753689289093,1.4913341999054\n        ,64.3777236938477,-3.70449876785278,2.48030972480774,64.1983337402344,-3.25097990036011,1.35693752765656,65.0652313232422\n        ,-3.8241708278656,1.31205260753632,65.3494491577148,-3.41428828239441,1.16322147846222,65.2566070556641,-2.95932054519653\n        ,1.03120362758636,64.8437347412109,-2.69900345802307,1.04845011234283,64.0696029663086,-3.17738890647888,1.24141275882721\n        ,64.4083938598633,-3.76976609230042,3.57369923591614,61.0150680541992,2.37812209129334,3.77027344703674,60.702938079834\n        ,2.22727346420288,4.0471248626709,61.6218643188477,1.5565527677536,3.82378196716309,61.9492835998535,1.74413049221039\n        ,3.3227744102478,62.0476493835449,1.72428119182587,3.12788796424866,61.1596908569336,2.37217926979065,3.02454996109009\n        ,61.9388618469238,1.54388356208801,2.80449461936951,61.1455764770508,2.16795825958252,3.1727123260498,61.3109474182129\n        ,1.03485369682312,2.92642593383789,60.4962692260742,1.73520374298096,3.54420852661133,60.4256591796875,1.84945070743561\n        ,3.78081870079041,61.3288497924805,1.11927652359009,2.76325130462646,59.9051856994629,2.54690003395081,3.37375426292419\n        ,59.7742500305176,2.34694623947144,3.50367212295532,60.7455596923828,2.44744181632996,3.06101846694946,60.9095001220703\n        ,2.44536972045898,2.86796164512634,60.2993392944336,1.92940402030945,3.48629307746887,60.2045707702637,2.01948738098145\n        ,1.45098149776459,64.9741744995117,-3.69130253791809,1.41963732242584,65.1916275024414,-3.37561774253845,1.29856872558594\n        ,65.1204681396484,-3.02958917617798,1.18962597846985,64.7992172241211,-2.82842588424683,1.20325589179993,64.2058715820313\n        ,-3.18971633911133,1.35525119304657,64.4734039306641,-3.64174580574036,4.18821001052856,62.8075332641602,0.219903469085693\n        ,3.99690103530884,63.0054588317871,0.424512445926666,3.6588876247406,63.0746803283691,0.425081789493561,3.37655878067017\n        ,62.9387741088867,0.274015486240387,3.52792119979858,62.4286651611328,-0.154641181230545,3.99334812164307,62.4657745361328\n        ,-0.0648872926831245,4.03926610946655,63.6859970092773,-0.941070854663849,3.81991457939148,63.9481201171875,-0.765456974506378\n        ,3.46811485290527,63.9392204284668,-0.684758543968201,3.18946385383606,63.761058807373,-0.693017423152924,3.30093741416931\n        ,63.1649284362793,-1.08285391330719,3.83501696586609,63.2890968322754,-1.11953735351563,3.5235903263092,64.3453979492188\n        ,-2.1361677646637,3.30114650726318,64.5497131347656,-1.89731824398041,2.99297952651978,64.4960021972656,-1.7129887342453\n        ,2.7271716594696,64.2145156860352,-1.64003252983093,2.83482527732849,63.656623840332,-1.90154302120209,3.3008348941803\n        ,63.8823738098145,-2.24625611305237,2.73043322563171,64.7690963745117,-3.04928207397461,2.58011960983276,64.9546203613281\n        ,-2.79104351997375,2.33586597442627,64.886848449707,-2.500408411026,2.13193011283875,64.576301574707,-2.35984539985657\n        ,2.19507622718811,63.9970550537109,-2.72649145126343,2.55687785148621,64.2533493041992,-3.0897331237793,3.80498099327087\n        ,61.9218826293945,1.52327609062195,3.96527743339539,61.6709518432617,1.40429544448853,3.39359378814697,61.9905891418457\n        ,1.50135791301727,3.18217921257019,61.9024810791016,1.37433695793152,3.28509950637817,61.4308815002441,1.01937413215637\n        ,3.7534167766571,61.4624671936035,1.06922543048859,3.49584770202637,60.8752517700195,2.31576895713806,3.61298704147339\n        ,60.6180191040039,2.24522376060486,3.12953925132751,60.9972839355469,2.31467223167419,2.87844681739807,60.9838790893555\n        ,2.17116379737854,2.96134185791016,60.4705619812012,1.93296670913696,3.44989609718323,60.4066925048828,2.01946258544922\n        ,3.68666195869446,60.4272689819336,2.30911779403687,2.7553985118866,60.8793525695801,2.27471375465393,7.27801418304443\n        ,38.8856239318848,2.99167585372925,7.27827167510986,38.9228096008301,2.99137020111084,7.23183059692383,38.9346237182617\n        ,2.94782590866089,7.23140668869019,38.8737411499023,2.948326587677,7.29706525802612,38.9548759460449,2.99014902114868\n        ,7.26260185241699,38.9871253967285,2.9458270072937,7.32935428619385,38.9732360839844,2.9883394241333,7.31547117233276\n        ,39.0171813964844,2.94286394119263,7.36649465560913,38.972957611084,2.98642635345459,7.37627649307251,39.0167350769043\n        ,2.93973159790039,7.39852857589722,38.9541320800781,2.98492193222046,7.42872381210327,38.9859046936035,2.93726921081543\n        ,7.41687250137329,38.9217910766602,2.98422956466675,7.45876121520996,38.9329528808594,2.93613576889038,7.41661548614502\n        ,38.8846054077148,2.98453521728516,7.45833969116211,38.8720664978027,2.93663644790649,7.39782238006592,38.8525352478027\n        ,2.98575687408447,7.42757081985474,38.8195648193359,2.93863534927368,7.36553049087524,38.8341789245605,2.9875659942627\n        ,7.37470006942749,38.7895088195801,2.94159841537476,7.32839202880859,38.8344497680664,2.98947954177856,7.31389379501343\n        ,38.7899589538574,2.94473075866699,7.29635715484619,38.8532829284668,2.9909839630127,7.26144552230835,38.8207893371582\n        ,2.94719362258911,7.18508529663086,38.9275054931641,2.0414457321167,7.18466186523438,38.8666191101074,2.04194688796997\n        ,7.21585369110107,38.9800071716309,2.0394458770752,7.26872682571411,39.0100593566895,2.03648328781128,7.3295316696167\n        ,39.0096130371094,2.0333514213562,7.38197994232178,38.9787864685059,2.03088855743408,7.41201877593994,38.9258308410645\n        ,2.02975559234619,7.41159391403198,38.8649444580078,2.03025579452515,7.38082551956177,38.812442779541,2.03225469589233\n        ,7.32795286178589,38.7823905944824,2.03521823883057,7.26714944839478,38.7828369140625,2.0383505821228,7.21470022201538\n        ,38.8136672973633,2.04081296920776,7.22681045532227,38.9149703979492,1.99354636669159,7.22654962539673,38.8777847290039\n        ,1.99385249614716,7.24560308456421,38.9470405578613,1.9923255443573,7.27789306640625,38.9653968811035,1.99051570892334\n        ,7.31503295898438,38.9651222229004,1.9886029958725,7.34706735610962,38.9462890625,1.98709845542908,7.36541128158569\n        ,38.9139518737793,1.98640644550323,7.36515426635742,38.8767623901367,1.98671197891235,7.346360206604,38.8446960449219\n        ,1.98793375492096,7.31406831741333,38.8263397216797,1.9897426366806,7.276930809021,38.8266143798828,1.99165594577789\n        ,7.24489736557007,38.8454437255859,1.99316024780273,7.34744358062744,38.9037055969238,2.98795223236084,7.29598045349121\n        ,38.895866394043,1.99012982845306,-9.78334426879883,33.6398735046387,4.95875310897827,-9.77644729614258,33.6859130859375\n        ,4.96339130401611,-9.73664379119873,33.7019157409668,4.89703321456909,-9.74793434143066,33.6265411376953,4.88943862915039\n        ,-9.76406002044678,33.7222595214844,4.98891019821167,-9.7163610458374,33.7614250183105,4.93881559371948,-9.74949932098389\n        ,33.7391777038574,5.02847194671631,-9.69252109527588,33.7891273498535,5.00358915328979,-9.73666667938232,33.7321357727051\n        ,5.07147693634033,-9.67151069641113,33.7775955200195,5.07400035858154,-9.72900199890137,33.7030143737793,5.1064019203186\n        ,-9.65896129608154,33.7299194335938,5.13118028640747,-9.72855758666992,33.6596221923828,5.12388706207275,-9.65823459625244\n        ,33.6588745117188,5.15980815887451,-9.73545360565186,33.613582611084,5.11924982070923,-9.66952514648438,33.58349609375\n        ,5.1522159576416,-9.74784278869629,33.5772361755371,5.09372901916504,-9.6898078918457,33.523983001709,5.11043310165405\n        ,-9.76240253448486,33.5603179931641,5.0541672706604,-9.71364879608154,33.4962844848633,5.04565811157227,-9.77523517608643\n        ,33.5673599243164,5.01116228103638,-9.73465728759766,33.5078163146973,4.97524881362915,-9.7829008102417,33.5964813232422\n        ,4.97623777389526,-9.74720764160156,33.555492401123,4.91806745529175,-8.68862438201904,33.5623207092285,4.5660605430603\n        ,-8.69991493225098,33.486946105957,4.55846548080444,-8.6683406829834,33.6218338012695,4.60784196853638,-8.64450073242188\n        ,33.6495361328125,4.67261600494385,-8.62349128723145,33.6380043029785,4.74302673339844,-8.61094093322754,33.5903282165527\n        ,4.80020713806152,-8.61021518707275,33.5192794799805,4.82883739471436,-8.62150573730469,33.443904876709,4.8212423324585\n        ,-8.6417875289917,33.384391784668,4.77945995330811,-8.66562843322754,33.3566932678223,4.71468496322632,-8.68663787841797\n        ,33.3682250976563,4.6442756652832,-8.69918727874756,33.415901184082,4.58709478378296,-8.62269496917725,33.5322341918945\n        ,4.59902667999268,-8.6295919418335,33.486198425293,4.59438753128052,-8.61030673980713,33.5685844421387,4.62454605102539\n        ,-8.59574604034424,33.5855026245117,4.66410827636719,-8.58291435241699,33.5784606933594,4.70711278915405,-8.57524967193604\n        ,33.5493392944336,4.74203681945801,-8.57480525970459,33.5059471130371,4.75952243804932,-8.58170127868652,33.4599075317383\n        ,4.75488424301147,-8.59408950805664,33.4235610961914,4.72936534881592,-8.60865020751953,33.4066429138184,4.68980169296265\n        ,-8.62148189544678,33.4136848449707,4.64679718017578,-8.62914752960205,33.4428062438965,4.61187362670898,-9.75595092773438\n        ,33.6497459411621,5.04131889343262,-8.60219860076904,33.4960746765137,4.67695474624634,-9.74101448059082,35.714599609375\n        ,3.85751342773438,-9.86602973937988,35.7726554870605,3.47347187995911,-9.97085666656494,35.6495018005371,3.47345089912415\n        ,-9.870774269104,35.5752906799316,3.83032155036926,-9.68454742431641,35.8668441772461,3.81067728996277,-9.79458618164063\n        ,35.8733024597168,3.47374320030212,-9.52666187286377,35.9182891845703,4.02155208587646,-9.62035369873047,35.9681434631348\n        ,3.76721882820129,-9.54553604125977,35.8229598999023,4.08965349197388,-9.4582986831665,35.9390258789063,4.01036548614502\n        ,-9.5352258682251,36.0346794128418,3.7266902923584,-9.4575366973877,35.8144416809082,4.11982440948486,-9.5669527053833\n        ,35.6657867431641,4.17208671569824,-9.62007713317871,35.4551315307617,4.32985925674438,-9.50944805145264,35.4093933105469\n        ,4.42615509033203,-9.46608638763428,35.6384925842285,4.23215818405151,-9.78408527374268,35.5054550170898,3.9941668510437\n        ,-9.63376522064209,36.0123100280762,3.45799255371094,-9.72309112548828,35.9531021118164,3.46987771987915,-9.35143184661865\n        ,35.9486656188965,3.99241375923157,-8.98878192901611,35.9121856689453,3.88087320327759,-9.06758308410645,36.0587348937988\n        ,3.56467628479004,-9.41837596893311,36.0752944946289,3.68297219276428,-9.3454122543335,35.8030281066895,4.13016843795776\n        ,-8.97745895385742,35.7535247802734,4.02928638458252,-9.35027408599854,35.6183891296387,4.25739240646362,-8.97404384613037\n        ,35.5641059875488,4.16093111038208,-9.37691307067871,35.3826560974121,4.46194314956665,-8.96559906005859,35.3266754150391\n        ,4.36308479309082,-9.16642284393311,36.040111541748,3.34176683425903,-9.50882720947266,36.0511817932129,3.43420505523682\n        ,-8.51512336730957,35.82080078125,3.67910408973694,-8.62055587768555,35.9603652954102,3.40104579925537,-8.49166774749756\n        ,35.6696319580078,3.80719947814941,-8.47049617767334,35.4844856262207,3.93344354629517,-8.40306663513184,35.2210350036621\n        ,4.14138460159302,-8.73949146270752,35.9448280334473,3.21085333824158,-10.2052211761475,33.757396697998,4.50592947006226\n        ,-9.97318077087402,34.9937400817871,4.2854528427124,-10.1497535705566,35.0821075439453,3.97291660308838,-10.4171237945557\n        ,33.715633392334,4.16602897644043,-10.0163803100586,33.7997207641602,4.9263710975647,-9.80999088287354,34.9454536437988\n        ,4.70469665527344,-9.86767196655273,33.8091239929199,5.06170845031738,-9.67784786224365,34.9037628173828,4.83877611160278\n        ,-9.66173553466797,33.803092956543,5.10906410217285,-9.48658180236816,34.878044128418,4.87704467773438,-9.1462287902832\n        ,33.7655029296875,5.0027813911438,-8.97988986968994,34.8264312744141,4.76251649856567,-8.54841613769531,33.7106056213379\n        ,4.77185153961182,-8.3776159286499,34.7554130554199,4.5395975112915,-9.95896339416504,35.483642578125,3.87343168258667\n        ,-9.84402561187744,35.3857116699219,4.11188650131226,-10.0861339569092,35.5603713989258,3.4769971370697,-9.69511127471924\n        ,35.3164482116699,4.50688219070435,-9.57850933074951,35.2590255737305,4.63353776931763,-9.41642093658447,35.2251739501953\n        ,4.67538499832153,-8.95109081268311,35.1678276062012,4.5689754486084,-8.36990261077881,35.0727005004883,4.36221933364868\n        ,-8.25675678253174,34.9143447875977,4.01728248596191,-8.8719654083252,33.5756645202637,3.51776742935181,-8.56477737426758\n        ,35.4037742614746,3.1792995929718,-8.38611030578613,35.3297424316406,3.55534768104553,-8.21022415161133,34.9344329833984\n        ,4.36779880523682,-8.22092342376709,34.7294998168945,4.4049391746521,-8.21338939666748,34.7530708312988,4.25973176956177\n        ,-8.21366500854492,34.9857864379883,4.27177286148071,-8.35896968841553,34.9792594909668,4.4604549407959,-8.40291786193848\n        ,35.7454528808594,3.54616498947144,-8.50260543823242,35.858699798584,3.32037091255188,-8.37730026245117,35.6140022277832\n        ,3.64707708358765,-8.41612148284912,35.5419960021973,3.4203827381134,-8.47990322113037,35.6955146789551,3.2742965221405\n        ,-8.34787940979004,35.4510459899902,3.76454997062683,-8.31959056854248,35.2991485595703,3.85887670516968,-8.59974193572998\n        ,35.8291664123535,3.16135144233704,-8.54978466033936,35.6963768005371,3.14328336715698,-8.39429187774658,33.6788864135742\n        ,4.62394094467163,-8.42716217041016,33.648307800293,4.40201473236084,-9.89840602874756,35.2682952880859,4.19409036636353\n        ,-10.0428628921509,35.3748893737793,3.91542863845825,-10.1934928894043,35.4644393920898,3.47839403152466,-10.3314628601074\n        ,35.1783294677734,3.44022393226624,-9.74534225463867,35.2012710571289,4.60747194290161,-9.62170696258545,35.1468811035156\n        ,4.74077701568604,-9.44297790527344,35.1148834228516,4.78078842163086,-8.95193004608154,35.0592346191406,4.66892528533936\n        ,-8.269118309021,35.1063690185547,4.06393909454346,-9.38967800140381,35.7668380737305,3.82832741737366,-9.42735767364502\n        ,35.4890785217285,4.0159912109375,-9.74074840545654,35.5043563842773,3.45244264602661,-9.52049541473389,35.7991027832031\n        ,3.45902061462402,-9.08410167694092,35.7472190856934,3.73782849311829,-9.07610988616943,35.4251823425293,3.9787495136261\n        ,-9.41947460174561,35.8356666564941,3.45036768913269,-9.18242740631104,35.8244323730469,3.40057396888733,-8.65144538879395\n        ,35.6751365661621,3.54329299926758,-8.60013294219971,35.4023666381836,3.74025058746338,-8.77639675140381,35.7341575622559\n        ,3.28729295730591,-9.52271366119385,35.0278701782227,4.49346399307251,-9.93948078155518,35.3462600708008,3.43713688850403\n        ,-9.04946708679199,34.9420700073242,4.46935939788818,-8.44690418243408,34.8676719665527,4.28323364257813,-8.76131248474121\n        ,35.4674453735352,3.30297207832336,-8.88348388671875,34.560848236084,3.4589376449585,-8.76171779632568,35.6798629760742\n        ,3.27803158760071,-10.0887289047241,33.6657524108887,4.40896081924438,-10.1630764007568,33.6840438842773,4.47010660171509\n        ,-10.3646583557129,33.6449432373047,4.14517593383789,-10.2802152633667,33.633186340332,4.11683940887451,-10.6405515670776\n        ,33.5438613891602,3.26456880569458,-10.4338436126709,33.516487121582,3.20561170578003,-10.4148750305176,33.5800399780273\n        ,3.67706537246704,-10.5326728820801,33.5909233093262,3.69249868392944,-9.90896511077881,33.709846496582,4.81917142868042\n        ,-9.97772789001465,33.7272644042969,4.88665962219238,-9.79854488372803,33.7178726196289,4.92589521408081,-9.84343433380127\n        ,33.7358093261719,5.00927448272705,-9.64190673828125,33.7133178710938,4.95843362808228,-9.6579065322876,33.7306976318359\n        ,5.05241680145264,-9.21004486083984,33.6847229003906,4.86349678039551,-9.17902374267578,33.6972389221191,4.95234203338623\n        ,-8.68776798248291,33.6452522277832,4.68041706085205,-8.61485767364502,33.6486396789551,4.73948431015015,-10.0402870178223\n        ,35.0881271362305,3.38248467445374,-10.6457843780518,33.6627044677734,3.13593530654907,-10.4437322616577,33.634449005127\n        ,3.07819509506226,-10.5912199020386,33.6596031188965,3.71049070358276,-10.6880941390991,33.6161956787109,3.30864119529724\n        ,-8.47219657897949,33.6223754882813,4.61491537094116,-8.46827793121338,33.6228790283203,4.40820407867432,-10.6944246292114\n        ,33.7458763122559,3.16912603378296,-0.122992999851704,43.4906578063965,6.96594190597534,-0.126481994986534,42.5673217773438\n        ,6.96594142913818,-0.126481994986534,42.5673217773438,6.38594198226929,-0.122992999851704,43.4906578063965,6.38594198226929\n        ,0.597185015678406,42.4653396606445,6.96594190597534,0.612924516201019,42.4631614685059,6.38594770431519,0.729595005512238\n        ,41.8761787414551,6.96593952178955,0.729551017284393,41.8645477294922,6.38594102859497,0.731296002864838,42.3263778686523\n        ,6.38594198226929,0.731275975704193,42.3209381103516,6.96594142913818,0.597548007965088,41.7322731018066,6.96594142913818\n        ,-0.129894003272057,41.6643905639648,6.96594190597534,-0.129894003272057,41.6643905639648,6.38594102859497,0.609617590904236\n        ,41.7334442138672,6.38594722747803,-0.133908003568649,40.6020469665527,6.96594142913818,-0.13390801846981,40.6020545959473\n        ,6.3859429359436,-0.234284996986389,40.5024223327637,6.96594190597534,-0.234284996986389,40.5024223327637,6.38594102859497\n        ,-0.261011004447937,41.7705078125,7.05283880233765,-0.265424996614456,40.6400299072266,7.05284023284912,0.462424010038376\n        ,41.8389549255371,7.05283880233765,0.60971999168396,42.2453231811523,7.05284023284912,0.608789026737213,41.9991340637207\n        ,7.05283832550049,-0.258341014385223,42.4770355224609,7.05283880233765,0.452903985977173,42.3955726623535,7.05283880233765\n        ,-0.254509001970291,43.4910354614258,7.05283880233765,-0.222614005208015,43.5910339355469,6.38594198226929,-0.222614005208015\n        ,43.5910339355469,6.96594142913818,-0.720449984073639,40.5042610168457,6.96594142913818,-0.720449984073639,40.5042610168457\n        ,6.38594198226929,-0.744120001792908,40.6419563293457,7.05283880233765,-2.12365031242371,39.5727958679199,6.96594142913818\n        ,-2.1295530796051,39.5666122436523,6.38594198226929,-2.12485098838806,39.7394599914551,7.05283880233765,-2.7805540561676\n        ,41.780948638916,7.05283880233765,-2.77405595779419,43.5006904602051,7.0528416633606,-2.77367949485779,43.6007080078125\n        ,6.96594858169556,-2.773677110672,43.6006736755371,6.38594198226929,-2.22244691848755,39.5865783691406,6.96594190597534\n        ,-3.35621309280396,41.3325271606445,6.96594142913818,-3.34770727157593,41.3433380126953,6.38594198226929,-2.21525001525879\n        ,39.5751762390137,6.38594198226929,-2.22836995124817,39.7522430419922,7.05283880233765,-3.29831385612488,41.4371223449707\n        ,7.05284023284912,-3.34866428375244,41.512393951416,6.96594190597534,-3.34866428375244,41.512393951416,6.38594198226929\n        ,-2.88055300712585,41.8218193054199,6.96594190597534,-2.87405395507813,43.5010528564453,6.96594190597534,-2.87405395507813\n        ,43.5010528564453,6.38594341278076,-2.88055300712585,41.8218193054199,6.38594198226929,-22.4020500183105,48.1817207336426\n        ,1.54338073730469,-21.9378795623779,47.5264930725098,0.964988231658936,-24.7054176330566,45.0436820983887,3.28460216522217\n        ,-24.3645610809326,44.4632720947266,2.86222863197327,-24.1518211364746,45.5265579223633,4.87630271911621,-24.5619010925293\n        ,45.4206123352051,4.05836725234985,-22.384069442749,48.530200958252,2.35600328445435,-22.1372318267822,48.7162055969238\n        ,3.37709856033325,-21.8083248138428,43.6105880737305,5.06077337265015,-19.1979789733887,46.1232490539551,4.08673620223999\n        ,-22.164608001709,44.1487350463867,5.74446392059326,-19.3826751708984,46.7098121643066,4.98189163208008,-21.5868129730225\n        ,48.536376953125,4.22997140884399,-23.6013107299805,45.3508186340332,5.63922548294067,-23.1435661315918,45.1739349365234\n        ,6.00655937194824,-20.9026660919189,48.1520385742188,4.80538845062256,-23.7835960388184,43.9319152832031,2.81814455986023\n        ,-21.0593452453613,46.5162734985352,0.742828786373138,-19.3185253143311,45.769229888916,3.21123647689819,-22.5982704162598\n        ,43.4730453491211,3.63622760772705,-19.7424182891846,45.6002197265625,1.78484308719635,-22.1106472015381,43.5050811767578\n        ,4.48459529876709,-23.2739486694336,43.5893974304199,2.90428400039673,-20.3708744049072,45.9203720092773,1.06325078010559\n        ,-22.7010631561279,44.7575988769531,6.06966114044189,-20.2916965484619,47.6790084838867,5.20238351821899,-21.4682216644287\n        ,48.5379943847656,4.07685518264771,-21.7997226715088,48.6303443908691,3.49851107597351,-22.1923599243164,48.2021217346191\n        ,1.5099401473999,-21.9199409484863,47.7049674987793,0.963749051094055,-19.2681007385254,46.0355033874512,3.33348369598389\n        ,-19.3146953582764,46.3306922912598,3.93647480010986,-23.4840717315674,45.0589866638184,5.87233924865723,-22.8347396850586\n        ,44.6621704101563,6.08595991134644,-24.4846878051758,44.5031890869141,3.10009932518005,-24.6617679595947,44.782642364502\n        ,3.41746973991394,-23.3162288665771,43.638298034668,3.18752980232239,-23.7745971679688,43.8534393310547,2.93733525276184\n        ,-20.3229217529297,46.124324798584,0.996055424213409,-19.7163581848145,45.8205032348633,1.76762294769287,-24.60475730896\n        ,45.2035064697266,3.98160099983215,-24.0964794158936,45.3257904052734,4.83113479614258,-24.1667976379395,44.1854057312012\n        ,2.91812348365784,-22.1245307922363,43.8912582397461,5.55091381072998,-22.0114917755127,43.6447410583496,5.10274362564087\n        ,-23.6671695709229,45.305061340332,5.63549709320068,-22.1414070129395,48.3773384094238,1.94118678569794,-22.1155433654785\n        ,48.4054985046387,2.18899011611938,-20.8544502258301,48.1285552978516,4.59779596328735,-22.8147830963135,43.5122756958008\n        ,3.69179534912109,-24.6724586486816,45.0163688659668,3.85816407203674,-22.255407333374,43.5268859863281,4.54903697967529\n        ,-19.7616958618164,47.168327331543,4.8857307434082,-20.1421985626221,47.6117973327637,5.04017925262451,-22.4245796203613\n        ,44.2923469543457,5.93594074249268,-19.41969871521,46.6725616455078,4.51129245758057,-19.3608703613281,45.8563117980957\n        ,2.67447733879089,-20.7665348052979,46.4529418945313,0.719281196594238,-21.1806507110596,46.8724899291992,0.734371244907379\n        ,-22.0227737426758,48.5846862792969,2.84799718856812,-21.5573883056641,47.3186416625977,0.904423534870148,-19.3374500274658\n        ,45.7312431335449,1.88695085048676,-19.5699977874756,45.7080688476563,1.2679615020752,-20.1725769042969,46.0857086181641\n        ,0.725336492061615,-20.6738948822021,46.4570732116699,0.412560313940048,-21.1447601318359,46.9291381835938,0.417648464441299\n        ,-21.5717449188232,47.4324417114258,0.604677438735962,-22.0146598815918,47.9422149658203,0.768847227096558,-22.2993946075439\n        ,48.4316864013672,1.26660573482513,-22.2835540771484,48.7297515869141,2.02767109870911,-22.1839542388916,48.9587860107422\n        ,2.82406663894653,-21.8414707183838,48.9177017211914,3.55330300331116,-21.4668483734131,48.8133392333984,4.20687675476074\n        ,-21.0063438415527,48.5632362365723,4.71491765975952,-20.5050296783447,48.1918716430664,5.02769327163696,-19.9782161712646\n        ,47.7596397399902,5.25458002090454,-19.5416946411133,47.2631225585938,5.10708808898926,-19.1298408508301,46.6791572570801\n        ,4.68784427642822,-18.939790725708,46.2231750488281,4.04214715957642,-18.9805450439453,45.9853324890137,3.3668098449707\n        ,-19.0853824615479,45.7828369140625,2.6220817565918,-18.1600589752197,46.6569938659668,1.37307822704315,-18.426139831543\n        ,46.6431617736816,0.695582926273346,-19.0699462890625,47.0431938171387,0.107480309903622,-19.6161346435547,47.4477996826172\n        ,-0.233294531702995,-20.1226425170898,47.9667549133301,-0.200760871171951,-20.5982398986816,48.5077171325684,-0.040066946297884\n        ,-21.0171203613281,49.0453948974609,0.249932289123535,-21.2495079040527,49.4981117248535,0.785253524780273,-21.3609409332275\n        ,49.9169731140137,1.53120338916779,-21.2518730163574,50.1637191772461,2.39346218109131,-20.8882293701172,50.1286926269531\n        ,3.18859696388245,-20.480073928833,50.0149917602539,3.90067601203918,-19.978343963623,49.7425003051758,4.45419454574585\n        ,-19.4052658081055,49.3570365905762,4.90646600723267,-18.8617305755615,48.8644409179688,5.02746105194092,-18.3861312866211\n        ,48.3234825134277,4.86676645278931,-17.9452476501465,47.6973037719727,4.41543531417847,-17.7366161346436,47.2030220031738\n        ,3.72183990478516,-17.7712059020996,46.9338340759277,2.98540925979614,-17.8854274749756,46.713207244873,2.17401576042175\n        ,-18.1495018005371,46.9325866699219,1.49883544445038,-17.9191188812256,47.0114860534668,2.24770545959473,-17.8125629425049\n        ,47.2173118591309,3.00464653968811,-17.7659759521484,47.3819618225098,3.36750364303589,-18.0165863037109,47.9198875427246\n        ,4.21446561813354,-18.3593807220459,48.4160575866699,4.58793210983276,-18.7763690948486,48.9096298217773,4.77557802200317\n        ,-19.2775058746338,49.3733863830566,4.68725728988647,-20.2334575653076,49.9592819213867,3.79440307617188,-20.6715030670166\n        ,50.0821533203125,3.03220653533936,-20.9079055786133,50.0307273864746,2.31216287612915,-20.9988117218018,49.7934913635254\n        ,1.50833106040955,-20.8822746276855,49.4387969970703,0.836857914924622,-20.654182434082,49.0165824890137,0.539040386676788\n        ,-20.2702236175537,48.5287246704102,0.225860998034477,-20.011625289917,48.1967315673828,0.169654786586761,-19.7482299804688\n        ,47.9482192993164,-0.0239475779235363,-18.9396018981934,47.2326812744141,0.31434291601181,-18.4715461730957,46.9784736633301\n        ,0.830715239048004,-21.0599403381348,50.2913818359375,3.28496885299683,-20.6517868041992,50.1776809692383,3.99704837799072\n        ,-21.423583984375,50.3264122009277,2.48983407020569,-21.5326519012451,50.079662322998,1.62757539749146,-22.4552669525146\n        ,48.8924407958984,2.12404298782349,-22.3556652069092,49.1214752197266,2.92043828964233,-22.0131816864014,49.080394744873\n        ,3.6496753692627,-21.6385593414307,48.9760284423828,4.3032488822937,-21.1780529022217,48.7259254455566,4.81128883361816\n        ,-20.1500568389893,49.9051895141602,4.55056667327881,-19.8145771026611,46.1965484619141,0.465458303689957,-19.2947864532471\n        ,46.6395530700684,0.164982780814171,-19.851354598999,46.3646507263184,0.545339286327362,-19.3213081359863,46.8249206542969\n        ,0.248330503702164,-18.4488430023193,46.8108177185059,0.76314902305603,-19.6774959564209,45.7687377929688,1.3232489824295\n        ,-18.8787593841553,45.8631553649902,3.38570284843445,-18.9835968017578,45.6606597900391,2.64097476005554,-17.7836418151855\n        ,46.5910263061523,2.1929087638855,-17.6694202423096,46.811653137207,3.00430226325989,-17.6151103973389,46.9004898071289\n        ,2.97250294685364,-17.7293338775635,46.6798629760742,2.16110944747925,-17.6784820556641,46.8914909362793,2.22928833961487\n        ,-17.5719261169434,47.0973129272461,2.98622941970825,-19.0120277404785,45.8349990844727,3.41211867332459,-19.1168651580811\n        ,45.6325035095215,2.66739082336426,-19.2995853424072,45.8851699829102,3.37879276275635,-19.3923530578613,45.7059783935547\n        ,2.71978616714478,-23.6020965576172,42.4886283874512,4.21740007400513,-24.0390434265137,42.5906944274902,3.76165699958801\n        ,-24.4657897949219,42.7697563171387,3.48394298553467,-24.9110813140869,43.0958671569824,3.48783564567566,-25.2296810150146\n        ,43.3942337036133,3.6277711391449,-25.4390163421631,43.6843681335449,3.91812968254089,-25.6448230743408,44.0140953063965\n        ,4.5360369682312,-25.4211101531982,44.173267364502,5.21521854400635,-25.0152473449707,44.1889839172363,5.87159967422485\n        ,-24.5331020355225,44.0858268737793,6.39444398880005,-24.2935276031494,43.9908142089844,6.32334661483765,-23.6125564575195\n        ,43.6142311096191,6.57493114471436,-23.1792774200439,43.2090682983398,6.38589477539063,-22.8766670227051,42.7984848022461\n        ,5.98477125167847,-22.8129253387451,42.4254875183105,5.29610729217529,-22.7085399627686,43.4084663391113,3.62266159057617\n        ,-23.2508773803711,43.5571594238281,3.10341167449951,-23.7290058135986,43.7791404724121,2.83729338645935,-24.2031059265137\n        ,44.1235504150391,2.83552932739258,-24.5413093566895,44.4444618225098,2.9929051399231,-24.7613124847412,44.7580223083496\n        ,3.31627941131592,-24.8992767333984,45.2632522583008,3.92786908149719,-24.6648254394531,45.4869651794434,4.45191526412964\n        ,-24.0667724609375,45.5779266357422,5.56209564208984,-23.6824283599854,45.3489074707031,5.97707366943359,-23.4934158325195\n        ,45.0926094055176,5.96880340576172,-22.7836380004883,44.6977272033691,6.22604417800903,-22.3307552337646,44.27001953125\n        ,6.01956701278687,-22.0103874206543,43.8350105285645,5.59420156478882,-21.9547653198242,43.440372467041,4.84743356704712\n        ,-23.7006778717041,42.5842094421387,4.29594802856445,-22.9873161315918,42.6391448974609,5.46495914459229,-23.060697555542\n        ,42.8498802185059,5.78238868713379,-23.2499942779541,43.226188659668,6.30128717422485,-23.6414680480957,43.5781860351563\n        ,6.44240856170654,-24.5210266113281,43.9476547241211,6.11971950531006,-24.898904800415,44.0220222473145,5.69627857208252\n        ,-25.2336368560791,44.0161056518555,5.16977643966675,-25.3931694030762,43.8623733520508,4.60062789916992,-25.4039688110352\n        ,43.7053184509277,4.01024484634399,-25.2397403717041,43.4337997436523,3.71354222297668,-24.8973350524902,43.1546020507813\n        ,3.67040634155273,-24.4386367797852,42.8376426696777,3.65668988227844,-24.0960559844971,42.6828956604004,3.8564293384552\n        ,-24.7833137512207,45.0106201171875,3.81515216827393,-25.447660446167,43.914134979248,4.38937330245972,-24.2597980499268\n        ,43.9135971069336,6.20571947097778,-25.4134788513184,43.8154411315918,4.35810327529907,-24.985466003418,44.268180847168\n        ,5.78709697723389,-24.8653507232666,44.1018943786621,5.61898374557495,-25.3341484069824,44.2546806335449,5.22318649291992\n        ,-25.1503314971924,44.096851348877,5.17074155807495,-24.1012134552002,45.5726890563965,5.49815893173218,-24.6343822479248\n        ,45.4915962219238,4.50843048095703,-25.2383289337158,44.3627853393555,5.23182153701782,-24.6551876068115,45.3935508728027\n        ,4.63619089126587,-24.9477596282959,44.3740348815918,5.70174646377563,-24.210880279541,45.461124420166,5.46096467971802\n        ,-25.0922203063965,44.3756713867188,5.19212770462036,-24.5868301391602,45.2690048217773,4.67591428756714,-24.840389251709\n        ,44.3854217529297,5.59939527511597,-24.2017631530762,45.327564239502,5.39071893692017,-21.8714790344238,43.4021072387695\n        ,4.89463138580322,-22.733699798584,42.3764038085938,5.31425333023071,-21.9884815216064,43.612491607666,5.1719913482666\n        ,-22.8765773773193,42.6221656799316,5.60099172592163,-21.8782711029053,43.5508041381836,5.19777011871338,-22.7452659606934\n        ,42.5296897888184,5.6197304725647,-23.5394515991211,43.6381874084473,6.61610221862793,-23.1375846862793,43.2624015808105\n        ,6.44077062606812,-22.3505821228027,44.2464332580566,6.10100269317627,-22.7706279754639,44.6431274414063,6.29250907897949\n        ,-22.7341136932373,44.7321548461914,6.18907356262207,-22.3140659332275,44.3354606628418,5.99756574630737,-22.3951377868652\n        ,44.3589134216309,5.93493366241455,-22.7750091552734,44.7120819091797,6.09634160995483,-23.6365718841553,43.5489616394043\n        ,6.58618783950806,-23.2347049713135,43.1731758117676,6.41085624694824,-23.6633892059326,43.5155258178711,6.46327352523804\n        ,-23.3002948760986,43.1890449523926,6.3323826789856,-23.2172451019287,42.6339797973633,5.04120302200317,-22.6529445648193\n        ,42.6419715881348,4.88354730606079,-22.7472667694092,42.721263885498,4.90590715408325,-22.4277858734131,43.1294479370117\n        ,4.67683029174805,-22.3620510101318,43.0246162414551,4.65405035018921,-22.1816253662109,43.4426612854004,4.50388669967651\n        ,-24.0265216827393,42.5450248718262,3.7071475982666,-24.4532699584961,42.7240867614746,3.42943382263184,-23.7164859771729\n        ,43.733470916748,2.78278398513794,-23.2383575439453,43.5114898681641,3.04890275001526,-23.2117614746094,43.6130676269531\n        ,3.0797917842865,-23.6898899078369,43.8350486755371,2.81367349624634,-23.735481262207,43.9093475341797,2.91371536254883\n        ,-23.2771129608154,43.694206237793,3.16390991210938,-24.0792198181152,42.5373382568359,3.78909802436829,-24.5059661865234\n        ,42.7164001464844,3.51138377189636,-24.13623046875,42.6295394897461,3.88387060165405,-24.4788150787354,42.7842864990234\n        ,3.68413090705872,-22.1667804718018,43.211009979248,5.33818578720093,-22.1515426635742,43.0689430236816,5.03093194961548\n        ,-22.385612487793,42.9532775878906,5.44468927383423,-22.3880958557129,42.7875366210938,5.14605522155762,-22.2405643463135\n        ,43.1241111755371,5.37409496307373,-22.1619033813477,43.16552734375,5.23982000350952,-22.1553688049316,43.1046142578125\n        ,5.10808849334717,-22.2210655212402,42.9862403869629,5.06476593017578,-22.3165550231934,42.8726425170898,5.11123847961426\n        ,-22.3873310089111,42.8386306762695,5.23811817169189,-22.3864707946777,42.8959579467773,5.34140396118164,-22.3239517211914\n        ,43.0259017944336,5.41468000411987,-22.3121013641357,42.9663772583008,5.27273082733154,-22.3124008178711,42.9463119506836\n        ,5.23658084869385,-22.2876300811768,42.9582099914551,5.19217300415039,-22.254207611084,42.997974395752,5.17590713500977\n        ,-22.2312145233154,43.0394058227539,5.19106960296631,-22.2335014343262,43.0607223510742,5.23717641830444,-22.2610340118408\n        ,43.0462265014648,5.28417253494263,-22.2902202606201,43.0118560791016,5.29837703704834,-22.2552661895752,42.9270706176758\n        ,5.29389572143555,-22.2555656433105,42.9070053100586,5.25774621963501,-22.2307929992676,42.9189071655273,5.21333789825439\n        ,-22.1973705291748,42.958667755127,5.19707250595093,-22.1743774414063,43.0000991821289,5.21223497390747,-22.1766662597656\n        ,43.0214157104492,5.25834131240845,-22.2041969299316,43.0069198608398,5.30533790588379,-22.2333831787109,42.9725532531738\n        ,5.3195424079895,-22.2273292541504,42.9329032897949,5.28440809249878,-22.2275142669678,42.9205322265625,5.26211595535278\n        ,-22.2122364044189,42.9278678894043,5.23473072052002,-22.1916275024414,42.9523849487305,5.22470045089722,-22.1774463653564\n        ,42.9779396057129,5.23405075073242,-22.178861618042,42.991081237793,5.26248359680176,-22.1958351135254,42.9821434020996\n        ,5.29146432876587,-22.2138366699219,42.9609489440918,5.30022382736206,-22.3022117614746,43.4858360290527,5.72577333450317\n        ,-22.6179618835449,43.9109115600586,6.1435604095459,-22.5559597015381,43.1822204589844,5.84017658233643,-22.868013381958\n        ,43.598258972168,6.25151443481445,-23.1094093322754,42.983512878418,6.14117527008057,0.0135970851406455,49.8888130187988\n        ,5.46461820602417,-0.0439089983701706,46.9334030151367,5.46729421615601,-0.181864738464355,56.3130836486816,-4.71527814865112\n        ,-0.172646686434746,57.6230239868164,-4.51124048233032,0.0305423717945814,61.7640762329102,-3.31285810470581,-0.0491822399199009\n        ,60.4813423156738,-3.89235258102417,-0.0625703707337379,51.1098365783691,-4.30081701278687,-0.0205972474068403,49.2944297790527\n        ,-3.22874736785889,-0.176884800195694,54.6524085998535,-4.77034664154053,1.17273511932581e-005,52.8985023498535,5.39261341094971\n        ,0.137227490544319,54.0256233215332,5.28923416137695,-0.136817902326584,52.6190414428711,-4.49335432052612,0.184443131089211\n        ,54.9490509033203,5.17759370803833,0.241316020488739,56.303783416748,4.55678033828735,-7.75623239065986e-017,44.6220588684082\n        ,5.95007181167603,-7.75623239065986e-017,44.1932983398438,-2.4703152179718,0.052837498486042,51.2362060546875,5.59731817245483\n        ,0.335718125104904,59.506462097168,2.47581624984741,0.318446129560471,58.4727668762207,3.11742997169495,-5.00296115875244\n        ,57.2223930358887,-5.05353212356567,-3.89901828765869,57.3001937866211,-4.94295692443848,-3.80570006370544,58.7004356384277\n        ,-5.00134325027466,-5.01546001434326,58.6748123168945,-4.51018762588501,-2.33792757987976,49.2690544128418,5.31126832962036\n        ,-3.19219017028809,46.8397331237793,5.11824417114258,-4.16545343399048,46.8441047668457,5.14115715026855,-4.33468294143677\n        ,48.3736190795898,4.74083423614502,-0.508937001228333,46.9681167602539,5.79316377639771,-0.459551274776459,49.8549499511719\n        ,5.72826194763184,-4.9380989074707,44.0710144042969,-0.0603329986333847,-5.70313310623169,45.5682716369629,-0.12718839943409\n        ,-6.18036985397339,45.2744522094727,1.05097448825836,-5.83846712112427,44.3852729797363,1.56467497348785,-5.37826013565063\n        ,46.895393371582,-1.29639673233032,-7.40615081787109,51.1274833679199,-0.183409884572029,-6.76184320449829,49.4113388061523\n        ,-0.870985507965088,-6.24649906158447,49.6185493469238,-1.80992066860199,-7.16691017150879,51.5537223815918,-1.74251294136047\n        ,-4.96109008789063,46.449836730957,4.62802600860596,-5.02808284759521,47.667839050293,4.1308741569519,-5.50866508483887\n        ,49.6626396179199,4.08968114852905,-4.43541669845581,49.9843826293945,4.87894105911255,-5.99175930023193,47.1326713562012\n        ,0.551007688045502,-6.54927587509155,49.1226081848145,-0.0480374731123447,-6.34458684921265,48.3535385131836,1.34890067577362\n        ,-6.20943117141724,46.6569442749023,1.74234962463379,-5.83220386505127,49.9621200561523,-2.57093405723572,-6.44042301177979\n        ,51.9786491394043,-3.23154377937317,-4.97103071212769,50.3766403198242,-3.72068238258362,-2.57297945022583,50.9226188659668\n        ,-4.10634851455688,-3.04856324195862,52.3631401062012,-4.5895528793335,-5.39983701705933,52.1313934326172,-4.45549535751343\n        ,-4.20102405548096,43.5664901733398,5.19080018997192,-5.09468984603882,43.6128387451172,4.61228513717651,-5.75057411193848\n        ,44.0617218017578,3.85488200187683,-6.00133609771729,46.3558654785156,3.68154311180115,-6.32964134216309,44.886531829834\n        ,2.16583490371704,-4.61951017379761,59.6811981201172,0.797900199890137,-5.18459749221802,60.2807922363281,0.704080522060394\n        ,-4.56298160552979,60.2502746582031,0.991760969161987,-4.66016292572021,59.2584419250488,1.81895363330841,-5.68881893157959\n        ,59.1940536499023,1.79819095134735,-5.18220567703247,60.3577499389648,0.0792717710137367,-4.42179536819458,60.3886947631836\n        ,0.423252910375595,-6.16989278793335,61.7052993774414,-2.4096360206604,-4.9240550994873,62.3232688903809,-2.90676879882813\n        ,-5.13821315765381,62.3888282775879,-1.62733566761017,-6.35365962982178,61.7394332885742,-1.29647183418274,-3.29271292686462\n        ,63.0202407836914,-1.85308480262756,-3.05310773849487,62.9706840515137,-2.64070582389832,-2.5487334728241,58.6095314025879\n        ,3.81683444976807,-2.42541718482971,55.9129295349121,5.45159578323364,-3.72787094116211,55.709228515625,5.43201351165771\n        ,-4.43703937530518,58.3423347473145,3.65203523635864,-4.73564958572388,60.7290840148926,-3.89975166320801,-3.89599299430847\n        ,60.6723747253418,-4.30670547485352,-4.26608657836914,47.8940963745117,-2.71014308929443,-2.33043313026428,48.7191696166992\n        ,-3.23936223983765,-2.05022978782654,57.4430694580078,-5.1027364730835,-1.96963977813721,55.880916595459,-5.11452007293701\n        ,-2.16026568412781,58.8478927612305,-4.83823204040527,-0.645922422409058,58.7460327148438,3.64485883712769,-0.68452650308609\n        ,56.2766342163086,5.19728088378906,-2.88014340400696,60.6445121765137,-4.31239032745361,-0.918300688266754,49.2085800170898\n        ,-3.41392731666565,-1.5696405172348,51.1897010803223,-4.15839719772339,-2.58754658699036,59.5622673034668,2.69001436233521\n        ,-4.594557762146,59.1206893920898,2.84920859336853,-1.72525858879089,54.378116607666,-4.8572883605957,-0.665218472480774\n        ,52.951229095459,5.54827356338501,-0.759148120880127,53.6747779846191,5.45814752578735,-5.81344699859619,47.5758666992188\n        ,3.06518507003784,-6.35021162033081,49.6599311828613,1.88136398792267,-6.05563068389893,58.0019264221191,3.26532244682312\n        ,-6.29915761947632,58.448902130127,2.8508608341217,-5.25224447250366,55.6491203308105,4.969970703125,-4.55231380462646\n        ,61.0196113586426,-0.239496752619743,-5.43997573852539,60.8021011352539,-0.191684767603874,-6.04992532730103,61.4153099060059\n        ,-0.325486749410629,-5.06683301925659,61.9652404785156,-0.78337424993515,-2.01689052581787,52.3396987915039,-4.56934595108032\n        ,-4.11964130401611,55.5003929138184,-5.05728578567505,-0.133614599704742,59.0669021606445,-4.4751033782959,-6.16877794265747\n        ,60.5145454406738,0.550737738609314,-5.96397542953491,60.5219535827637,-0.148668453097343,-6.5405535697937,60.81005859375\n        ,-0.272704929113388,-5.74670171737671,59.9476547241211,1.13532936573029,-6.77210903167725,60.3752555847168,1.38928270339966\n        ,-6.52460813522339,58.5361785888672,2.17649149894714,-6.68791389465332,58.7010536193848,2.22907447814941,-6.27624559402466\n        ,59.3210983276367,1.79491090774536,-7.46848487854004,59.7941474914551,2.08688426017761,-7.75415468215942,59.1501045227051\n        ,2.26238036155701,-7.81153011322021,61.3239059448242,-0.382952928543091,-7.29381418228149,61.1288414001465,-0.944032788276672\n        ,-7.46071624755859,60.8121109008789,1.02310824394226,-6.85135412216187,61.2363624572754,-0.92545074224472,-6.8177695274353\n        ,60.8522338867188,0.5522101521492,-6.40969181060791,55.401611328125,3.81819677352905,-6.88170289993286,57.552074432373\n        ,2.49769401550293,-6.20172452926636,53.3832397460938,2.31489658355713,-6.36324214935303,51.7953987121582,2.1042845249176\n        ,-7.04831647872925,52.6200332641602,0.252361595630646,-7.28402996063232,53.6452026367188,0.16018034517765,-0.694299697875977\n        ,54.651237487793,5.72144031524658,-3.57418870925903,54.2588043212891,5.43804931640625,-3.32706022262573,53.3785057067871\n        ,5.03736639022827,-4.77684831619263,53.3375396728516,4.4062705039978,-5.07331657409668,54.2058448791504,4.84667634963989\n        ,-2.14672422409058,53.4957542419434,5.21924448013306,-2.29173636436462,54.3981246948242,5.64961671829224,-5.99193096160889\n        ,54.214729309082,4.02423715591431,-6.32433986663818,54.4655952453613,3.40305590629578,-6.84397315979004,55.3699760437012\n        ,2.83058953285217,-5.94443607330322,51.708423614502,4.05636835098267,-2.04570722579956,52.4807548522949,5.54989433288574\n        ,-6.27668046951294,54.5082397460938,2.19852471351624,-6.68165445327759,55.0434265136719,2.18652367591858,-5.65278625488281\n        ,53.3934936523438,3.7850239276886,-4.87148952484131,51.864917755127,4.85457754135132,-3.16624927520752,52.145923614502\n        ,5.3819727897644,-2.62237215042114,50.6626281738281,5.40696811676025,-8.41484260559082,60.4155578613281,1.57534170150757\n        ,-8.83414459228516,61.0870361328125,0.103286720812321,-0.429187029600143,44.5688095092773,5.94135522842407,-3.39157700538635\n        ,43.7743873596191,5.51495599746704,-6.54397678375244,60.8124046325684,-3.20612573623657,-6.18393325805664,60.7584075927734\n        ,-3.15727949142456,-6.73055362701416,61.3397254943848,-1.89037048816681,-7.12801933288574,61.1413993835449,-2.07482528686523\n        ,-3.82461071014404,54.202262878418,-4.79300689697266,-7.56537818908691,61.2854270935059,-1.97838175296783,-3.41479253768921\n        ,62.6111488342285,-0.930265963077545,-7.66061592102051,60.9895057678223,-2.96556806564331,-7.23512315750122,60.0191764831543\n        ,-3.89410877227783,-6.22283267974854,59.731559753418,-4.06070184707642,-4.73881864547729,59.5047225952148,-4.55289316177368\n        ,-7.84283971786499,54.1470756530762,-2.38503170013428,-6.86101531982422,54.433349609375,-3.65812921524048,-7.79491281509399\n        ,53.7588539123535,-0.228861659765244,-2.26250076293945,44.192440032959,-2.14107060432434,-5.80761480331421,55.130687713623\n        ,-4.84916019439697,-5.7725682258606,54.2856330871582,-4.57562637329102,-7.54521226882935,56.7853012084961,-4.26201248168945\n        ,-7.75341081619263,55.0225067138672,-3.3477029800415,-7.28053140640259,55.2495574951172,-4.16975021362305,-6.94179582595825\n        ,57.1727485656738,-4.17385244369507,-3.07096242904663,44.1793899536133,-1.37161779403687,-0.431658685207367,51.0969543457031\n        ,5.59628582000732,-6.80107975006104,50.7735061645508,0.0954368412494659,-7.76311159133911,54.0241966247559,-0.301495224237442\n        ,-7.44548082351685,54.1859931945801,0.0743789598345757,-6.75493192672729,54.6499519348145,1.31245946884155,-7.18617343902588\n        ,58.267749786377,2.41894459724426,-6.98509931564331,58.0105361938477,2.40028405189514,-5.56892108917236,43.7037506103516\n        ,3.96434211730957,-9.09653759002686,61.2269897460938,-1.50791823863983,-7.51727819442749,57.9505767822266,-4.34716653823853\n        ,-6.89555788040161,58.792911529541,-4.38299942016602,-7.62991142272949,58.7892837524414,-4.1893367767334,-0.478152990341187\n        ,43.5242080688477,5.80299520492554,-3.50020909309387,43.5624122619629,5.78555011749268,-8.60066223144531,60.8792953491211\n        ,-2.64818215370178,-8.10863590240479,59.867431640625,-3.61165523529053,-7.92280101776123,54.623119354248,-2.55926966667175\n        ,-7.9593391418457,55.3963432312012,-2.68657779693604,-8.18213939666748,55.0373420715332,-2.67853426933289,-8.11448860168457\n        ,55.3380355834961,-3.37380743026733,-8.08938598632813,55.7524185180664,-3.29892182350159,-7.93057060241699,54.3846206665039\n        ,-0.261126399040222,-7.75561332702637,55.1170883178711,-1.67782986164093,-7.59425258636475,54.67236328125,-0.427858233451843\n        ,-6.79058885574341,55.7474899291992,1.87186169624329,-7.11697340011597,56.5882987976074,2.24229073524475,-7.24335622787476\n        ,55.9228935241699,2.49578619003296,-7.12432050704956,55.3387107849121,2.03639507293701,-7.1244478225708,54.9274826049805\n        ,0.763150691986084,-7.26573514938354,54.6200256347656,0.920579612255096,-7.5579628944397,54.5143737792969,0.165195435285568\n        ,-7.27818441390991,54.7909660339355,-0.0486234277486801,-7.35125160217285,57.4009628295898,2.53132128715515,-7.41011142730713\n        ,57.6769714355469,2.50238084793091,-8.53023815155029,59.0593490600586,2.27440071105957,-9.06899929046631,59.9608154296875\n        ,1.7973073720932,-8.88298988342285,60.295108795166,1.89493358135223,-8.21960163116455,59.1651039123535,2.56374311447144\n        ,-7.46124601364136,57.5798568725586,2.30548739433289,-7.6955394744873,57.913932800293,2.32873606681824,-7.51820802688599\n        ,57.9574584960938,2.49965953826904,-9.46251106262207,60.6362113952637,0.4064701795578,-9.31418800354004,61.0124816894531\n        ,0.382610023021698,-6.8989520072937,55.382080078125,1.36610519886017,-7.92569446563721,56.9639663696289,-4.34455442428589\n        ,-7.51057100296021,57.2705192565918,-4.31482410430908,-7.89591503143311,57.3142204284668,-4.40296173095703,-7.37515687942505\n        ,57.2835006713867,2.34248971939087,-7.30052852630615,56.7208023071289,2.55324769020081,-9.63988018035889,60.9473609924316\n        ,-1.19915819168091,-9.46856594085693,61.3043594360352,-1.2989444732666,-9.27958202362061,60.755500793457,-2.4731273651123\n        ,-9.07314586639404,61.0160331726074,-2.67641758918762,-7.95075511932373,57.947681427002,-4.51332521438599,-8.13483333587646\n        ,58.8517189025879,-4.33059501647949,-8.73000431060791,59.7835388183594,-3.44021344184875,-8.48867511749268,59.9324913024902\n        ,-3.72010040283203,-8.34878540039063,58.7928733825684,-4.02249336242676,-8.22158813476563,58.0632476806641,-4.18288135528564\n        ,-8.01778411865234,57.130428314209,-3.94697332382202,-8.05079460144043,57.4037895202637,-4.01655721664429,-5.67244100570679\n        ,44.0079154968262,1.06051099300385,-5.80713796615601,43.9371109008789,1.50510704517365,-7.45419216156006,56.1586456298828\n        ,-1.29048562049866,-8.28530311584473,56.6873512268066,-2.61842083930969,-8.6239013671875,57.5741500854492,-3.51662087440491\n        ,-7.06550312042236,56.9819793701172,0.424003332853317,-6.98706388473511,56.4588165283203,1.49204194545746,-7.16970539093018\n        ,55.3181915283203,-0.13018873333931,-7.15138053894043,55.2580871582031,0.648422956466675,-8.14474773406982,57.25341796875\n        ,1.78825891017914,-8.47859382629395,57.2579498291016,1.99721741676331,-9.05362892150879,58.1805534362793,2.35215330123901\n        ,-9.83308410644531,57.4026870727539,2.20573568344116,-9.64915084838867,59.5587844848633,1.99272048473358,-10.1421051025391\n        ,60.1832733154297,0.716989398002625,-9.10313892364502,56.9268455505371,1.638108253479,-10.6574897766113,56.644100189209\n        ,1.67002630233765,-7.56710195541382,57.1711387634277,1.84745657444,-8.48157787322998,55.0172271728516,-0.216014891862869\n        ,-7.0231614112854,56.4469947814941,-0.28096815943718,-7.16446113586426,56.3610076904297,-0.615244030952454,-8.39256477355957\n        ,54.9758796691895,-0.616515576839447,-8.50124835968018,55.7217483520508,1.73240280151367,-9.41024780273438,56.5547943115234\n        ,2.06916451454163,-7.88820028305054,56.8479080200195,1.19110143184662,-9.09678936004639,56.8670043945313,-3.44182705879211\n        ,-8.34248447418213,56.1166343688965,-2.58545112609863,-8.21704578399658,55.0028915405273,1.15598487854004,-9.90963077545166\n        ,55.8720932006836,-3.56037259101868,-9.06782722473145,54.9145317077637,-2.63912296295166,-8.62874794006348,54.9908294677734\n        ,-1.18219780921936,-7.649001121521,55.1071319580078,-0.538050770759583,-10.340726852417,58.6142463684082,1.99010813236237\n        ,-10.8593845367432,59.2226715087891,0.763373553752899,-11.012113571167,57.6644592285156,1.87140822410584,-11.2696666717529\n        ,59.1985969543457,-1.52713632583618,-10.6699409484863,59.8837432861328,-1.89451503753662,-10.8999452590942,59.7691764831543\n        ,-0.652961134910584,-11.4934072494507,58.7517471313477,-0.260973364114761,-9.99734973907471,60.7780532836914,-1.08868741989136\n        ,-10.6349620819092,58.9184379577637,-2.31953024864197,-9.99201107025146,59.2885208129883,-2.83282876014709,-9.1008825302124\n        ,59.7472343444824,-3.3547728061676,-9.48565769195557,60.6213226318359,-2.42824769020081,-9.63987922668457,58.4990463256836\n        ,-3.35429525375366,-10.0067596435547,58.0339851379395,-3.24089646339417,-8.68969440460205,58.21142578125,-3.91057538986206\n        ,-11.4933223724365,58.2437973022461,0.7555051445961,-14.079628944397,51.5313491821289,-1.75432026386261,-15.3577547073364\n        ,50.4500312805176,-1.08153355121613,-14.7907867431641,50.5980491638184,-0.796776831150055,-13.3921184539795,51.4282913208008\n        ,-0.533235013484955,-11.9978437423706,52.0623245239258,-0.24705570936203,-10.251615524292,53.4479827880859,0.0441180802881718\n        ,-10.1969766616821,53.3028335571289,-0.340612351894379,-11.9713344573975,51.9814376831055,-0.58304238319397,-13.6772937774658\n        ,51.6746406555176,1.87144458293915,-12.632607460022,52.1185760498047,2.51966714859009,-12.5650129318237,51.5652618408203\n        ,1.17271864414215,-13.7069854736328,51.3117408752441,1.151162981987,-11.374698638916,52.2686195373535,1.14971232414246\n        ,-11.4781999588013,52.9149055480957,2.49313879013062,-9.74384593963623,54.5315742492676,2.21795177459717,-13.9736175537109\n        ,52.368595123291,2.47570753097534,-13.1968288421631,52.962287902832,3.10246396064758,-14.8301277160645,52.6071395874023\n        ,2.11761546134949,-14.2657508850098,52.8922119140625,2.13393473625183,-14.4684648513794,52.1536636352539,2.14125990867615\n        ,-14.8657751083374,51.7047424316406,2.20066118240356,-14.8201179504395,53.070125579834,2.05547261238098,-14.1463689804077\n        ,53.445671081543,2.12267684936523,-15.0371074676514,52.2935600280762,-2.07219195365906,-16.2619514465332,51.1877555847168\n        ,-1.39485847949982,-15.8765563964844,50.9944725036621,-1.46031129360199,-14.5988140106201,51.8026733398438,-2.22906160354614\n        ,-17.1141986846924,50.1530723571777,-0.656818032264709,-16.1127605438232,49.9333915710449,-0.649384915828705,-15.7860059738159\n        ,49.9094886779785,-0.118252269923687,-14.3615608215332,51.0999221801758,1.76429009437561,-15.3237085342407,50.4653549194336\n        ,1.89021146297455,-18.9265270233154,52.0916786193848,2.08394813537598,-18.2440147399902,52.6426467895508,1.4875899553299\n        ,-17.8324413299561,52.9939117431641,2.0628867149353,-18.2371978759766,52.0618019104004,3.29557943344116,-15.5986242294312\n        ,49.897388458252,0.180025562644005,-16.1771202087402,48.9824981689453,0.648494422435761,-15.8943605422974,49.4016189575195\n        ,1.68389463424683,-15.0275983810425,50.1505317687988,1.01311051845551,-16.5464572906494,51.6605796813965,3.32884478569031\n        ,-15.4696502685547,50.710880279541,2.66894578933716,-17.7275943756104,51.8120422363281,3.08908557891846,-16.9035873413086\n        ,53.2870559692383,2.3514256477356,-15.8416471481323,52.9759292602539,2.68076205253601,-19.8595390319824,50.9323654174805\n        ,3.22305417060852,-18.8802871704102,50.6448135375977,4.20212316513062,-18.1262359619141,49.6349830627441,4.5990252494812\n        ,-20.3983383178711,50.4655838012695,1.90877258777618,-20.2319946289063,50.4357147216797,1.16225552558899,-20.1870269775391\n        ,50.027660369873,0.646689832210541,-19.9135608673096,49.7892875671387,0.368544578552246,-18.6255340576172,47.3748207092285\n        ,0.111035406589508,-17.3023681640625,48.6882209777832,-0.212918892502785,-18.8274440765381,48.9921684265137,-0.369614362716675\n        ,-11.2789144515991,52.7401924133301,-2.49145722389221,-12.936861038208,52.1631240844727,-2.09757351875305,-12.2275257110596\n        ,52.1928596496582,-0.912774920463562,-10.5374174118042,53.401309967041,-0.792993426322937,-16.3899230957031,48.9935150146484\n        ,0.133493438363075,-16.6946067810059,49.0124168395996,-0.605560779571533,-17.0542774200439,48.5133399963379,0.351435780525208\n        ,-18.2206153869629,47.0674438476563,0.796007394790649,-12.8616600036621,54.1305847167969,2.49924993515015,-12.0359754562378\n        ,53.8261222839355,2.99227213859558,-13.5405406951904,53.2507095336914,2.46743822097778,-10.4204120635986,55.5134124755859\n        ,2.56823205947876,-12.3428859710693,53.5515251159668,-3.40832281112671,-13.5257186889648,52.5651512145996,-2.6235671043396\n        ,-18.2112407684326,49.9638214111328,-0.76670640707016,-18.4898586273193,49.53125,-0.511448681354523,-17.11106300354\n        ,50.5295639038086,-0.92558091878891,-13.3685293197632,53.7153778076172,-2.68515563011169,-12.1484384536743,56.8107490539551\n        ,0.557642042636871,-12.1036748886108,56.5559844970703,0.99444192647934,-13.0235824584961,55.6834754943848,1.18073070049286\n        ,-13.4592247009277,55.5429267883301,0.952362835407257,-14.877911567688,54.3908309936523,1.14372169971466,-14.8840246200562\n        ,53.8452568054199,1.51513016223907,-14.330548286438,50.7510681152344,-0.0111402757465839,-16.7873268127441,48.4305381774902\n        ,1.50344741344452,-16.7642364501953,48.5701866149902,1.02926099300385,-16.5800800323486,48.3761558532715,1.93620872497559\n        ,-18.0195808410645,47.1744804382324,1.6593029499054,-11.1290073394775,57.0205192565918,-3.73677539825439,-11.8914222717285\n        ,58.0101776123047,-2.49101114273071,-12.6511726379395,57.3129272460938,-2.62014579772949,-12.0716953277588,56.2566299438477\n        ,-3.62442135810852,-14.2039346694946,55.8782081604004,-1.99054050445557,-14.2394742965698,54.8764915466309,-1.69854950904846\n        ,-13.3633728027344,54.7506828308105,-2.51998615264893,-12.8050441741943,55.4120407104492,-3.20260739326477,-15.5451545715332\n        ,54.3909187316895,-0.944691777229309,-15.6051340103149,53.6398811340332,-1.19103765487671,-18.6171264648438,50.7980270385742\n        ,-0.42991316318512,-18.7923183441162,50.4993553161621,-0.173323720693588,-18.8255710601807,49.7969970703125,-0.24158239364624\n        ,-15.4429044723511,52.9892845153809,-1.97211527824402,-17.1787643432617,52.7444152832031,-0.410667061805725,-17.0103073120117\n        ,52.2682647705078,-0.746182978153229,-14.5044660568237,55.9602584838867,-0.556629240512848,-15.4355049133301,54.7218017578125\n        ,0.240091517567635,-18.9051361083984,49.2556838989258,-0.212960779666901,-11.3375291824341,56.0898933410645,2.17179417610168\n        ,-11.0171632766724,54.711296081543,-3.56722521781921,-10.0315380096436,53.8144073486328,-2.67064666748047,-9.3803129196167\n        ,53.8204650878906,1.42993497848511,-9.84768962860107,53.8808174133301,-0.888922214508057,-9.65566444396973,53.9683685302734\n        ,-0.00864173006266356,-9.65421772003174,53.7139053344727,-0.368462741374969,-11.5770902633667,58.701343536377,-1.27429091930389\n        ,-11.7678966522217,58.0280494689941,-0.0459968149662018,-10.9296398162842,58.6693992614746,-2.24099469184875,-11.9043874740601\n        ,56.7409973144531,0.94693797826767,-11.4768314361572,56.4381294250488,1.56433737277985,-11.6599178314209,56.2103996276855\n        ,1.59167802333832,-11.4014825820923,56.7989845275879,1.64399898052216,-11.7768106460571,57.2847061157227,0.964253008365631\n        ,-11.8873796463013,57.0615272521973,0.340082973241806,-12.1598997116089,58.4843826293945,-1.42520177364349,-12.9499549865723\n        ,57.8103370666504,-1.27406144142151,-11.8083772659302,57.8043518066406,-0.143025532364845,-12.4767713546753,57.3775024414063\n        ,0.146502330899239,-13.7413520812988,55.7738189697266,0.647366166114807,-13.3479604721069,54.4060974121094,2.3595118522644\n        ,-16.6586666107178,51.6323089599609,-1.1572380065918,-12.2062034606934,55.6152458190918,1.59468448162079,-16.2585430145264\n        ,53.7987480163574,1.81818199157715,-15.4065914154053,53.470832824707,2.19790458679199,-16.9875087738037,53.5469665527344\n        ,0.917690515518188,-18.654182434082,51.5154151916504,0.383005619049072,-19.3796482086182,51.2564315795898,0.973189532756805\n        ,-19.3383960723877,50.9063301086426,0.826740324497223,-18.549898147583,51.0804443359375,0.245433732867241,-16.8411140441895\n        ,48.938648223877,3.71082305908203,-17.8749370574951,49.8132171630859,4.56413221359253,-16.6467800140381,48.3975677490234\n        ,2.77507829666138,-13.2260084152222,51.3968048095703,0.032488327473402,-20.513069152832,50.4961700439453,2.56306648254395\n        ,-19.5767478942871,49.4250297546387,-0.103127479553223,-19.1159076690674,50.2191734313965,-0.157384023070335,-19.263822555542\n        ,50.430233001709,0.27906745672226,-19.3878326416016,50.5774154663086,0.466669023036957,-19.7247257232666,49.628490447998\n        ,0.250612646341324,-19.1858215332031,50.315013885498,0.205716267228127,-17.4128494262695,53.1083679199219,1.88863396644592\n        ,-17.6651172637939,51.6837005615234,-0.421823114156723,-17.3898468017578,51.0755653381348,-0.691629111766815,-8.74059391021729\n        ,58.7906532287598,-3.90513944625854,-3.631098985672,59.8498306274414,1.73694729804993,-3.33879423141479,60.3737182617188\n        ,1.17213428020477,-3.50298547744751,60.2044410705566,1.69284284114838,-0.836800396442413,62.0290718078613,-3.44790577888489\n        ,-2.63942551612854,59.934383392334,2.14702224731445,-3.34576869010925,61.2543296813965,-0.264682769775391,-0.774065554141998\n        ,59.8994979858398,2.45401930809021,-2.98916459083557,60.147777557373,1.79330563545227,-10.2027149200439,53.1423873901367\n        ,1.3846652507782,-10.5530920028687,53.7772369384766,2.34635376930237,-11.2281942367554,54.6697654724121,2.78025221824646\n        ,-11.9775266647339,55.267162322998,2.30929613113403,-6.1092848777771,44.5726852416992,2.80859422683716,-6.12484836578369\n        ,46.5345611572266,2.53054237365723,-6.09523248672485,47.9618530273438,2.03063750267029,-6.58994388580322,50.2920265197754\n        ,0.863238930702209,-6.74691867828369,52.2777366638184,0.972675979137421,-6.81625986099243,53.5835075378418,1.24111199378967\n        ,-5.93246269226074,53.3926849365234,3.18568468093872,-6.16047334671021,51.7383117675781,3.05703854560852,-5.93553829193115\n        ,49.6501426696777,2.96717262268066,-4.85589504241943,45.5259628295898,-0.946087539196014,-3.58722996711731,45.8115081787109\n        ,-1.97504353523254,-2.34073543548584,46.1230392456055,-2.12600135803223,-0.0774050205945969,46.1967735290527,-2.60712957382202\n        ,5.56892108917236,43.7037506103516,3.96434211730957,4.48863840103149,56.9230079650879,-5.69664287567139,3.43093514442444\n        ,57.0666656494141,-5.43046188354492,3.40443229675293,58.473014831543,-5.48987340927124,4.66533231735229,58.3694610595703\n        ,-5.16612005233765,2.36688876152039,49.2839813232422,5.31314182281494,3.19219017028809,46.8397331237793,5.11824417114258\n        ,4.16545295715332,46.8440971374512,5.14115619659424,4.33468341827393,48.3736190795898,4.74083375930786,0.508937060832977\n        ,46.9681167602539,5.79316377639771,0.502217352390289,49.8629951477051,5.73104858398438,5.70313215255737,45.5682716369629\n        ,-0.127191007137299,6.14905118942261,45.2268676757813,0.909955978393555,5.83846712112427,44.3852729797363,1.56467497348785\n        ,5.37825775146484,46.895393371582,-1.29640114307404,4.25761890411377,44.1189155578613,-0.763117015361786,7.27880954742432\n        ,50.8724212646484,-0.798126339912415,6.68353366851807,49.3247604370117,-1.0536345243454,6.16005086898804,49.5483131408691\n        ,-1.94401621818542,6.86691427230835,51.265064239502,-2.45111012458801,4.96109008789063,46.449836730957,4.62802600860596\n        ,5.02808284759521,47.667839050293,4.1308741569519,5.53708267211914,49.6380195617676,4.03002834320068,4.46608209609985\n        ,49.9669990539551,4.83955383300781,5.94960832595825,47.0691604614258,0.362407803535461,6.48950576782227,49.0330696105957\n        ,-0.268296957015991,6.3097038269043,48.253059387207,1.12767565250397,6.20942878723145,46.6569290161133,1.74234902858734\n        ,5.76492261886597,49.9179992675781,-2.65865802764893,6.17157793045044,51.7974472045898,-3.6365602016449,4.89619207382202\n        ,50.3520011901855,-3.80600094795227,2.45370006561279,50.8995170593262,-4.16592597961426,2.78574156761169,52.2776679992676\n        ,-4.72317218780518,5.22372245788574,52.0617218017578,-4.64406442642212,5.75057411193848,44.0617218017578,3.85488200187683\n        ,6.00133609771729,46.3558654785156,3.68154311180115,6.32964134216309,44.886531829834,2.16583490371704,5.0522313117981\n        ,59.3761291503906,0.142580911517143,5.63601207733154,59.9394836425781,-0.0290815383195877,5.05815505981445,59.9468002319336\n        ,0.339870452880859,5.20350742340088,58.9473190307617,1.15062999725342,6.21389818191528,58.8186149597168,0.991709470748901\n        ,5.55427598953247,60.0190963745117,-0.648190140724182,4.85060977935791,60.0962257385254,-0.205008938908577,6.28012418746948\n        ,61.3125953674316,-3.25320029258728,5.01990127563477,62.0096130371094,-3.58053207397461,5.4082088470459,62.0561714172363\n        ,-2.34191989898682,6.61399984359741,61.3304023742676,-2.17510962486267,3.59240055084229,62.8030700683594,-2.31959319114685\n        ,3.24620890617371,62.7719917297363,-3.06752300262451,3.27989220619202,58.4411926269531,3.45477151870728,2.94624018669128\n        ,55.8268890380859,5.22996759414673,4.4201488494873,55.4504318237305,4.97116231918335,5.11019134521484,58.0659942626953\n        ,3.06510710716248,4.59976577758789,60.4346237182617,-4.53228282928467,3.71103858947754,60.432430267334,-4.82212781906128\n        ,4.24048233032227,47.8875045776367,-2.74390602111816,2.2951455116272,48.7120323181152,-3.25419235229492,1.602987408638\n        ,57.3326644897461,-5.33708143234253,1.54593241214752,55.7688674926758,-5.29807567596436,1.80850923061371,58.7227096557617\n        ,-5.10714054107666,1.35066735744476,58.688549041748,3.52788400650024,1.20924663543701,56.2557487487793,5.11581087112427\n        ,2.70396065711975,60.468376159668,-4.69074726104736,0.87622195482254,49.2063636779785,-3.42336797714233,1.4183566570282\n        ,51.2010498046875,-4.23545169830322,3.29036021232605,59.3768653869629,2.29175066947937,5.26882553100586,58.8095779418945\n        ,2.18090462684631,1.35060226917267,54.3036766052246,-4.98019742965698,0.850216865539551,52.9374542236328,5.52145624160767\n        ,1.05006265640259,53.6734428405762,5.41406202316284,5.81344699859619,47.5758666992188,3.06518483161926,6.34982872009277\n        ,49.6443710327148,1.84685409069061,6.69955635070801,57.5995979309082,2.40108251571655,6.91256666183472,58.0321769714355\n        ,1.95568668842316,5.89234447479248,55.3229560852051,4.32070875167847,4.9299464225769,60.7205200195313,-0.881977498531342\n        ,5.80054426193237,60.4475479125977,-0.953298270702362,6.42415618896484,61.0218505859375,-1.17068159580231,5.42477989196777\n        ,61.6343116760254,-1.49424481391907,1.71520781517029,52.2933311462402,-4.67891263961792,3.61277961730957,55.2839317321777\n        ,-5.49603891372681,6.60325908660889,60.111686706543,-0.314645409584045,6.30694484710693,60.1349029541016,-0.980097889900208\n        ,6.87847661972046,60.386791229248,-1.18192577362061,6.22908735275269,59.5699081420898,0.323896825313568,7.30415058135986\n        ,59.9312591552734,0.435530573129654,7.05011034011841,58.1080017089844,1.25672173500061,7.22903156280518,58.2620811462402\n        ,1.2861168384552,6.80232667922974,58.9085731506348,0.908758163452148,8.05034351348877,59.3046455383301,1.03538930416107\n        ,8.31608581542969,58.6432113647461,1.17352378368378,8.15271186828613,60.8203582763672,-1.46462738513947,7.55289936065674\n        ,60.6605415344238,-1.94998788833618,7.96316814422607,60.3256072998047,-0.0219536330550909,7.12460422515869,60.7955284118652\n        ,-1.8724068403244,7.26642370223999,60.4079856872559,-0.402079552412033,6.96106004714966,54.9798698425293,2.91225099563599\n        ,7.3847861289978,57.1020774841309,1.53105282783508,6.33556509017944,53.1691551208496,2.24800658226013,6.38739442825317\n        ,51.7313346862793,1.9785293340683,6.99435949325562,52.3350715637207,-0.392119348049164,7.24284791946411,53.2762145996094\n        ,-0.646061599254608,1.09672713279724,54.6509094238281,5.66392612457275,3.91681504249573,54.1869354248047,5.21350336074829\n        ,3.56772255897522,53.3176498413086,4.87186765670776,4.99570178985596,53.2408180236816,4.15648555755615,5.41516971588135\n        ,54.0682334899902,4.48723363876343,2.40486001968384,53.4610290527344,5.10914897918701,2.67556929588318,54.3597373962402\n        ,5.49190044403076,6.34653997421265,53.9616470336914,3.4741063117981,6.76198863983154,54.0528297424316,2.51639223098755\n        ,7.25544500350952,54.9252510070801,1.87526834011078,6.03137254714966,51.6402435302734,3.89728951454163,2.19503688812256\n        ,52.4480400085449,5.4863452911377,6.55881500244141,54.1315307617188,1.74270081520081,6.97313547134399,54.627758026123\n        ,1.31097435951233,5.82921028137207,53.250675201416,3.49645662307739,5.00494384765625,51.803596496582,4.69906425476074\n        ,3.32392287254334,52.107292175293,5.27886629104614,2.70612764358521,50.6459274291992,5.35879135131836,8.95623588562012\n        ,59.8676338195801,0.398345559835434,9.21463108062744,60.5177345275879,-1.11962747573853,0.429187029600143,44.5688095092773\n        ,5.94135522842407,3.39157700538635,43.7743873596191,5.51495599746704,6.48670291900635,60.4013862609863,-4.08903360366821\n        ,6.13385438919067,60.3698768615723,-3.99188446998596,6.88159799575806,60.9103698730469,-2.81267642974854,7.23734951019287\n        ,60.6882858276367,-3.04816651344299,3.2792387008667,54.0415382385254,-5.19849443435669,7.69188165664673,60.8041801452637\n        ,-3.01215386390686,3.81181836128235,62.3832054138184,-1.41991281509399,7.63446426391602,60.5070648193359,-4.00190258026123\n        ,7.02769565582275,59.5692939758301,-4.86050128936768,5.98615837097168,59.3464622497559,-4.88793516159058,4.43807315826416\n        ,59.2152633666992,-5.17468309402466,7.48376131057739,53.6780166625977,-3.37918519973755,6.3647928237915,54.0280265808105\n        ,-4.5154709815979,7.6963939666748,53.3148078918457,-1.19267594814301,4.89050340652466,47.2557334899902,-1.76517140865326\n        ,2.20206737518311,44.176586151123,-2.11065602302551,5.20034837722778,54.7842864990234,-5.57468938827515,5.18321180343628\n        ,53.9617309570313,-5.2604660987854,7.08188724517822,56.3239288330078,-5.25308752059937,7.30654048919678,54.5502128601074\n        ,-4.35706996917725,6.73623943328857,54.8074378967285,-5.11946773529053,6.52136135101318,56.7480926513672,-5.08606290817261\n        ,0.548441827297211,51.1162757873535,5.59805917739868,6.73783445358276,50.6204032897949,-0.270794987678528,7.66648387908936\n        ,53.5671539306641,-1.28985047340393,7.40937566757202,53.744556427002,-0.876519441604614,6.90980339050293,54.2402229309082\n        ,0.442960977554321,7.72015905380249,57.7975692749023,1.40894997119904,7.5026683807373,57.5535583496094,1.41864967346191\n        ,9.26576328277588,60.6478004455566,-2.75207567214966,7.11589050292969,57.489013671875,-5.33865261077881,6.54909181594849\n        ,58.3688354492188,-5.29395627975464,7.30115747451782,58.3183250427246,-5.20100736618042,3.58825278282166,44.1539001464844\n        ,-1.20879817008972,0.478152990341187,43.5242080688477,5.80299520492554,8.5999231338501,60.3367500305176,-3.81362628936768\n        ,7.92004871368408,59.3618507385254,-4.69769620895386,7.58691596984863,54.1857376098633,-3.51837372779846,7.62936019897461\n        ,54.9134559631348,-3.71389770507813,7.84505176544189,54.5696830749512,-3.6901912689209,7.6837592124939,54.8446426391602\n        ,-4.42535209655762,7.68500471115112,55.2548599243164,-4.36773157119751,7.85799980163574,53.9139366149902,-1.27666687965393\n        ,7.55024337768555,54.6720161437988,-2.64854741096497,7.51451921463013,54.1958045959473,-1.45155954360962,7.09713840484619\n        ,55.3094367980957,0.930883824825287,7.52256345748901,56.1265335083008,1.25037324428558,7.63995981216431,55.4534378051758\n        ,1.48735105991364,7.42369079589844,54.8798332214355,1.05067873001099,7.22643661499023,54.4748229980469,-0.209205031394959\n        ,7.36536359786987,54.1761131286621,-0.0283166989684105,7.55160713195801,54.0616989135742,-0.807652056217194,7.26050710678101\n        ,54.3323860168457,-1.03370535373688,7.84417057037354,56.9216651916504,1.50173914432526,7.91579103469849,57.1935577392578\n        ,1.46395790576935,9.0794734954834,58.5038986206055,1.08123564720154,9.6045093536377,59.3718109130859,0.532063603401184\n        ,9.45469379425049,59.7166938781738,0.652444005012512,8.81791400909424,58.6277008056641,1.40934801101685,7.93373203277588\n        ,57.0942649841309,1.26238405704498,8.18951320648193,57.4128837585449,1.25242710113525,8.03991603851318,57.4667205810547\n        ,1.44550204277039,9.84859180450439,60.0270957946777,-0.901974380016327,9.72230529785156,60.4120292663574,-0.907228112220764\n        ,7.11321926116943,54.9401054382324,0.416695415973663,7.46061944961548,56.4794769287109,-5.38321113586426,7.07095384597778\n        ,56.8105850219727,-5.30281114578247,7.44288110733032,56.8303985595703,-5.44225835800171,7.83499431610107,56.8037376403809\n        ,1.31190943717957,7.75429630279541,56.2459411621094,1.5331916809082,9.8271369934082,60.3333282470703,-2.51816701889038\n        ,9.66667366027832,60.7007904052734,-2.59547328948975,9.28712558746338,60.169864654541,-3.73113465309143,9.07193183898926\n        ,60.4436950683594,-3.90585684776306,7.52197933197021,57.4596366882324,-5.56169700622559,7.78535032272339,58.3495597839355\n        ,-5.40928411483765,8.55235385894775,59.238410949707,-4.61119842529297,8.28533267974854,59.4034004211426,-4.85664129257202\n        ,8.03475379943848,58.2761001586914,-5.13257741928101,7.84158325195313,57.5565795898438,-5.27125883102417,7.61331510543823\n        ,56.6373863220215,-5.00607490539551,7.65373134613037,56.9084320068359,-5.08063411712646,5.80713796615601,43.9371109008789\n        ,1.50510704517365,7.3530068397522,55.691593170166,-2.29376339912415,8.03426742553711,56.1774253845215,-3.71008014678955\n        ,8.29852867126465,57.0403785705566,-4.66321849822998,7.24841451644897,56.5388069152832,-0.523982167243958,7.28487110137939\n        ,56.0086479187012,0.525032520294189,7.17531681060791,54.8657188415527,-1.1021511554718,7.25835037231445,54.8035736083984\n        ,-0.32792392373085,8.51945972442627,56.7277908325195,0.659157574176788,8.87804126739502,56.7104835510254,0.821199893951416\n        ,9.55239772796631,57.593677520752,1.09148192405701,10.2546634674072,56.7690773010254,0.844668745994568,10.179328918457\n        ,58.933349609375,0.649220526218414,10.5340662002563,59.5311012268066,-0.683946847915649,9.42648220062256,56.3423805236816\n        ,0.382613807916641,10.9501304626465,55.9625473022461,0.205978751182556,7.95104789733887,56.6816635131836,0.796007633209229\n        ,8.44216823577881,54.4834175109863,-1.36270153522491,7.08089637756348,56.0021209716797,-1.23660385608673,7.17018461227417\n        ,55.9088592529297,-1.5865033864975,8.29757881164551,54.4494361877441,-1.74737429618835,8.76838493347168,55.1770248413086\n        ,0.562280178070068,9.76492881774902,55.9499664306641,0.769929647445679,8.15985107421875,56.3417167663574,0.103748373687267\n        ,8.7318811416626,56.3046493530273,-4.64982652664185,8.0565242767334,55.6012763977051,-3.69083595275879,8.36456489562988\n        ,54.4798698425293,0.0324799977242947,9.45730209350586,55.2612190246582,-4.87259960174561,8.68892574310303,54.3544425964355\n        ,-3.84225082397461,8.45584487915039,54.4519424438477,-2.33978295326233,7.58108425140381,54.6267395019531,-1.56997954845428\n        ,10.803614616394,57.9473037719727,0.557450473308563,11.1893653869629,58.5272026062012,-0.730563282966614,11.3919620513916\n        ,56.9577827453613,0.353395909070969,11.2849111557007,58.487174987793,-3.05534601211548,10.6853227615356,59.2101516723633\n        ,-3.341463804245,11.0728950500488,59.0761032104492,-2.14175462722778,11.6487598419189,58.0217895507813,-1.82899582386017\n        ,10.1849002838135,60.1414604187012,-2.45615744590759,10.5328998565674,58.2507591247559,-3.75378155708313,9.85113716125488\n        ,58.6626205444336,-4.17732286453247,8.92834758758545,59.1785507202148,-4.57636260986328,9.48854160308838,60.0228309631348\n        ,-3.71386504173279,9.38311672210693,57.8990173339844,-4.64321899414063,9.73202896118164,57.411376953125,-4.57831954956055\n        ,8.3504810333252,57.673942565918,-5.06515073776245,11.753791809082,57.5105323791504,-0.819628119468689,13.5520429611206\n        ,50.6597862243652,-3.62653398513794,14.8387975692749,49.4975662231445,-3.12753367424011,14.3257875442505,49.6796455383301\n        ,-2.76960182189941,13.0302572250366,50.5948715209961,-2.32351136207581,11.7298135757446,51.3138999938965,-1.85474872589111\n        ,10.1291513442993,52.8051300048828,-1.33680272102356,10.0141677856445,52.6653289794922,-1.71004021167755,11.653247833252\n        ,51.2362632751465,-2.18375134468079,13.6517715454102,50.8126182556152,0.0197342503815889,12.7338953018188,51.3184585571289\n        ,0.80093240737915,12.4508266448975,50.7762031555176,-0.522256553173065,13.5613031387329,50.4516372680664,-0.696429312229156\n        ,11.3147611618042,51.5529403686523,-0.387636542320251,11.6386957168579,52.1857452392578,0.926828563213348,9.98794555664063\n        ,53.9091873168945,0.881002962589264,14.0697689056396,51.4840431213379,0.575597643852234,13.4233169555664,52.122631072998\n        ,1.29878723621368,14.883472442627,51.6699066162109,0.104338467121124,14.3454475402832,51.9897499084473,0.195351988077164\n        ,14.5005655288696,51.2399139404297,0.178431913256645,14.8733034133911,50.7667045593262,0.185657918453217,14.8942441940308\n        ,52.1328659057617,0.0421440452337265,14.2605962753296,52.5496520996094,0.197932198643684,14.5038642883301,51.3617706298828\n        ,-4.07377243041992,15.737006187439,50.1784324645996,-3.56298232078552,15.3349475860596,50.0099906921387,-3.57508039474487\n        ,14.0185060501099,50.9000205993652,-4.1680588722229,16.6143341064453,49.0891990661621,-2.94213104248047,15.6112413406372\n        ,48.932746887207,-2.79887890815735,15.3581924438477,48.9271278381348,-2.22846102714539,14.2779426574707,50.1965675354004\n        ,-0.176210388541222,15.2065629959106,49.5023574829102,-0.178400054574013,18.8974895477295,50.898624420166,-0.478858798742294\n        ,18.1767578125,51.4938545227051,-0.980138778686523,17.8693199157715,51.8677978515625,-0.356124639511108,18.3772220611572\n        ,50.9069023132324,0.814730048179626,15.2123289108276,48.9255409240723,-1.90760374069214,15.7901344299316,47.974178314209\n        ,-1.51748132705688,15.6763391494751,48.4058074951172,-0.455212146043777,14.7757940292358,49.2104644775391,-1.00625038146973\n        ,16.6845760345459,50.6124000549316,1.07724034786224,15.471227645874,49.734935760498,0.572513163089752,17.8297843933105\n        ,50.6904792785645,0.679857194423676,17.0080585479736,52.2174072265625,0.0537054538726807,15.982780456543,51.9721145629883\n        ,0.524463653564453,19.9009113311768,49.6782341003418,0.529042065143585,19.0464401245117,49.4485168457031,1.63235700130463\n        ,19.8845977783203,47.4652900695801,2.17451047897339,18.2908992767334,48.4863052368164,2.13154292106628,19.1496639251709\n        ,46.7251663208008,2.3065185546875,20.3633670806885,48.2683410644531,1.22568118572235,20.227331161499,49.1841583251953\n        ,-0.843863546848297,21.2155895233154,48.3137245178223,-0.224301800131798,21.1416397094727,48.1011810302734,-1.18668389320374\n        ,19.9603595733643,49.1679573059082,-1.56102073192596,20.4522113800049,47.2690353393555,1.70770359039307,20.674388885498\n        ,47.2088775634766,1.5593044757843,20.6281108856201,48.3302116394043,0.792369723320007,21.6778507232666,47.1973571777344\n        ,0.721642732620239,21.0242614746094,48.3415603637695,0.267527908086777,20.9462394714355,48.3692169189453,0.526706457138062\n        ,21.4729061126709,47.2075042724609,1.10189342498779,21.5099945068359,46.11474609375,-1.94946956634521,20.4426021575928\n        ,47.4525527954102,-2.20505023002625,20.9361572265625,47.7230949401855,-1.9036910533905,22.1175422668457,46.4725112915039\n        ,-1.48421800136566,19.5445919036865,44.3666687011719,0.688282608985901,19.5302467346191,44.692985534668,1.52009499073029\n        ,17.8531379699707,46.0471343994141,1.05797076225281,17.7322750091553,45.8862266540527,0.195022255182266,20.5843486785889\n        ,45.6073188781738,2.28768253326416,20.9611434936523,45.4621658325195,2.34939908981323,22.9492454528809,44.9821395874023\n        ,1.39771020412445,22.6773262023926,44.8726272583008,1.98021054267883,22.6979026794434,44.490119934082,-1.13779997825623\n        ,23.2042541503906,44.9444885253906,-0.658016979694366,19.9612426757813,44.5874671936035,-1.609126329422,20.6078147888184\n        ,45.28662109375,-2.0672402381897,21.3356609344482,44.4521217346191,-1.30426454544067,21.6464214324951,43.5439834594727\n        ,-0.783927083015442,19.5299625396729,44.2604904174805,-0.854487121105194,20.8051986694336,43.4793281555176,-0.203381508588791\n        ,20.7594833374023,43.5421180725098,0.38550791144371,19.4293518066406,44.3882141113281,-0.0389625653624535,20.6675872802734\n        ,43.4807777404785,1.03413915634155,20.6311225891113,43.5597991943359,1.6413449048996,21.0593681335449,44.0559005737305\n        ,2.13398694992065,20.1234664916992,45.3325843811035,2.12659621238709,23.3103694915771,42.2877006530762,3.15818119049072\n        ,23.8232288360596,42.6492958068848,3.02135586738586,22.3560600280762,44.6905479431152,2.43583106994629,21.6826972961426\n        ,44.3796463012695,2.56239581108093,23.9890842437744,42.8250274658203,2.72608661651611,24.3131427764893,43.0077095031738\n        ,2.03234481811523,24.4801712036133,42.9811019897461,0.232601284980774,24.1847267150879,42.6429634094238,-0.0108417542651296\n        ,22.0007915496826,43.8926124572754,-0.990081965923309,23.3663368225098,42.3684387207031,-0.0917138755321503,22.9723930358887\n        ,42.1976127624512,-0.0821428894996643,22.3297519683838,42.1772079467773,0.570432305335999,22.2577972412109,42.2479438781738\n        ,1.11369383335114,22.3680763244629,42.0717086791992,2.5445351600647,22.6504745483398,42.0502853393555,2.88002109527588\n        ,21.2856063842773,44.1733818054199,2.28947234153748,19.8208160400391,48.7657203674316,-2.06408476829529,19.4979515075684\n        ,48.5461578369141,-2.30182480812073,18.0380630493164,46.2183685302734,-2.37314629554749,19.1660690307617,46.720775604248\n        ,-2.66062784194946,16.7683372497559,47.6135559082031,-2.52141618728638,18.2744197845459,47.821891784668,-2.88349103927612\n        ,23.1817455291748,42.2414321899414,3.10395359992981,23.5672283172607,41.5250053405762,3.27665758132935,23.7341976165771\n        ,41.6387405395508,3.36136937141418,24.3066692352295,41.2696952819824,0.388287603855133,24.0551853179932,41.0985374450684\n        ,0.514059066772461,23.5084838867188,40.8745460510254,1.19112884998322,23.3923263549805,40.9361343383789,1.66240167617798\n        ,23.0847988128662,41.0231781005859,2.68329548835754,23.1890926361084,41.2674446105957,3.08469200134277,24.8623371124268\n        ,42.1539611816406,2.3654510974884,24.3057193756104,41.9787712097168,3.14068388938904,24.0696849822998,41.8692207336426\n        ,3.21461319923401,10.7589426040649,52.0450668334961,-3.98465609550476,12.4153480529785,51.3634567260742,-3.81533980369568\n        ,11.8754205703735,51.4325981140137,-2.54589605331421,10.2960405349731,52.7441749572754,-2.20458698272705,15.9318618774414\n        ,47.9740142822266,-2.05650401115417,16.1347522735596,47.9769058227539,-2.82994937896729,16.5880832672119,47.4521827697754\n        ,-1.92803871631622,17.7106666564941,45.9340896606445,-1.63855528831482,23.7912216186523,40.9780197143555,0.784069895744324\n        ,22.7547168731689,42.299747467041,0.201494812965393,13.0838747024536,53.3122024536133,0.741282343864441,12.3147010803223\n        ,53.0580444335938,1.34236586093903,13.695728302002,52.3916130065918,0.622015416622162,10.765793800354,54.8451499938965\n        ,1.13273775577545,11.7384357452393,52.7919425964355,-5.03997898101807,12.9520015716553,51.7299842834473,-4.41759347915649\n        ,17.6725082397461,48.8319664001465,-3.19804859161377,17.9552898406982,48.3816871643066,-2.98082900047302,16.5986347198486\n        ,49.4662818908691,-3.20961785316467,12.8604173660278,52.8880577087402,-4.46232604980469,12.285062789917,56.0400619506836\n        ,-1.09787619113922,12.2836780548096,55.786750793457,-0.657949447631836,13.1637325286865,54.8574714660645,-0.593619048595428\n        ,13.5549449920654,54.6908378601074,-0.878011286258698,14.9113826751709,53.4512100219727,-0.874684035778046,14.9332523345947\n        ,52.9047508239746,-0.505171656608582,13.9861345291138,49.8578948974609,-1.92976760864258,16.4741477966309,47.3813934326172\n        ,-0.750219583511353,16.3961734771729,47.5242347717285,-1.21755838394165,16.3241100311279,47.3382835388184,-0.29325008392334\n        ,17.6349182128906,46.0498580932617,-0.756506145000458,10.711404800415,56.3316230773926,-5.2165961265564,11.6953134536743\n        ,57.2661972045898,-4.08915567398071,12.385479927063,56.5232162475586,-4.31653118133545,11.6108388900757,55.5096321105957\n        ,-5.22905683517456,13.9158315658569,54.9912452697754,-3.89582562446594,13.9274816513062,53.9880409240723,-3.60703206062317\n        ,12.9425249099731,53.9209365844727,-4.30237054824829,12.3398990631104,54.6189117431641,-4.90633010864258,15.2897844314575\n        ,53.4183158874512,-3.03394627571106,15.2687854766846,52.6660461425781,-3.28293323516846,18.1716041564941,49.6376266479492\n        ,-2.92257332801819,18.360689163208,49.327465057373,-2.69066572189331,18.3403129577637,48.6247024536133,-2.75979685783386\n        ,14.9622840881348,52.0302391052246,-4.03225135803223,16.8739185333252,51.6703147888184,-2.71794319152832,16.6322479248047\n        ,51.207103729248,-3.02567052841187,14.4114046096802,55.0481872558594,-2.51585531234741,15.3617715835571,53.7503852844238\n        ,-1.84661114215851,22.0626430511475,47.1380500793457,0.312653362751007,23.082405090332,45.2025375366211,1.05454277992249\n        ,23.2344989776611,45.1784515380859,0.212265536189079,22.2545776367188,46.898063659668,-0.650525093078613,24.5121994018555\n        ,43.0798530578613,1.89935684204102,24.700626373291,43.029182434082,1.0951064825058,22.3342418670654,44.1472129821777\n        ,-0.985363841056824,23.7739334106445,42.4582595825195,0.0253795459866524,25.094820022583,42.0181274414063,0.63675594329834\n        ,24.8828163146973,41.7729644775391,0.360459506511688,18.3888912200928,48.079345703125,-2.7398579120636,19.6137313842773\n        ,46.7993927001953,-2.47372817993164,11.6554641723633,55.3646430969238,0.613879203796387,10.4787845611572,54.0332679748535\n        ,-5.02370643615723,9.56866645812988,53.1961708068848,-3.99867963790894,9.47764873504639,53.225643157959,0.15219347178936\n        ,9.63113117218018,53.2664108276367,-2.20873069763184,9.56535720825195,53.3620910644531,-1.31098282337189,9.49947357177734\n        ,53.1097564697266,-1.66624176502228,11.5917978286743,57.9705467224121,-2.84412407875061,11.9037704467773,57.2813911437988\n        ,-1.64989614486694,10.819263458252,57.9833908081055,-3.71461486816406,12.0918092727661,55.9841041564941,-0.678950130939484\n        ,11.7332038879395,55.7060317993164,-0.00828365050256252,11.9036540985107,55.4671478271484,-0.00489721540361643,11.692066192627\n        ,56.0705604553223,0.0792707055807114,12.0020923614502,56.5346641540527,-0.646912157535553,12.0133199691772,56.3076477050781\n        ,-1.27933478355408,12.1341848373413,57.7180938720703,-3.07127356529236,12.8935451507568,56.995174407959,-3.0251157283783\n        ,11.9166917800903,57.0560073852539,-1.75054311752319,12.5898990631104,56.586841583252,-1.55191695690155,13.8073215484619\n        ,54.9048728942871,-1.21922385692596,13.5632257461548,53.557258605957,0.536115407943726,16.1892242431641,50.5962142944336\n        ,-3.3828821182251,12.4069385528564,54.8388900756836,-0.0730054900050163,16.3304214477539,52.7708168029785,-0.389918386936188\n        ,15.5185346603394,52.4953842163086,0.102539211511612,16.9141445159912,52.4776306152344,-1.37935245037079,18.3628005981445\n        ,50.3478164672852,-2.12511992454529,19.1434917449951,50.0413246154785,-1.63698732852936,19.0610008239746,49.695125579834\n        ,-1.77505218982697,18.2138481140137,49.9208297729492,-2.24553346633911,16.8566780090332,47.8757438659668,1.42759299278259\n        ,18.0488719940186,48.6800994873047,2.13007593154907,16.5044593811035,47.3519020080566,0.528880298137665,12.9402542114258\n        ,50.571460723877,-1.74043500423431,22.1152286529541,41.9466590881348,2.25192022323608,20.4308776855469,49.204704284668\n        ,-0.211134687066078,22.0665168762207,46.7259864807129,-0.941627204418182,21.0119819641113,47.8783187866211,-1.3603481054306\n        ,23.1058826446533,44.9971618652344,-0.0795651748776436,24.6004333496094,42.9618148803711,0.871560215950012,25.3450222015381\n        ,42.1090126037598,1.43619477748871,25.2234687805176,42.0636825561523,1.21761846542358,19.0784664154053,48.2057571411133\n        ,-2.72225308418274,19.8962860107422,47.0656585693359,-2.43542766571045,20.9766960144043,45.5458106994629,-1.92559599876404\n        ,24.6982593536377,40.952953338623,0.358907043933868,24.1927070617676,40.5977745056152,0.382595211267471,25.3028049468994\n        ,39.9894943237305,0.288388758897781,24.8059501647949,39.6957168579102,0.346591711044312,25.1876049041748,41.3445816040039\n        ,0.634206295013428,25.3709888458252,41.4191017150879,0.950496912002563,25.8578147888184,40.4478416442871,0.830263614654541\n        ,25.7993278503418,40.3204307556152,0.513917446136475,25.7801952362061,38.3923225402832,0.405306428670883,26.1005973815918\n        ,38.6033821105957,0.414937376976013,25.4721603393555,38.2417297363281,0.933774352073669,26.3225708007813,37.9900283813477\n        ,0.540673732757568,26.0681343078613,37.7213554382324,1.00822830200195,26.9082546234131,38.2915687561035,0.749213039875031\n        ,26.5941677093506,38.8570823669434,0.646034121513367,24.4965305328369,39.4820251464844,0.818610429763794,26.4576644897461\n        ,37.7728614807129,0.577100872993469,27.0060615539551,38.1100616455078,0.721827626228333,26.7886180877686,37.0538597106934\n        ,0.865942239761353,26.3225383758545,37.6534957885742,1.00922620296478,26.8767929077148,37.1728324890137,0.468527495861053\n        ,27.3362140655518,37.5333251953125,0.568650424480438,26.9089126586914,36.9463882446289,0.83524751663208,27.2755012512207\n        ,36.5016174316406,0.330541372299194,27.1422691345215,36.4382171630859,0.698461651802063,27.4169120788574,37.3746147155762\n        ,0.559433698654175,27.6172657012939,36.7529067993164,0.433391004800797,27.6500587463379,35.8810615539551,0.272548139095306\n        ,27.4733486175537,35.7689361572266,0.551467180252075,27.1704921722412,36.2463798522949,0.662050426006317,27.6621761322021\n        ,36.5758056640625,0.369325369596481,27.8887329101563,36.0022964477539,0.326096922159195,27.7101459503174,35.7865028381348\n        ,0.795266091823578,27.417350769043,36.4184913635254,1.01918590068817,27.7454051971436,36.5266799926758,0.829174995422363\n        ,27.9386329650879,35.9596900939941,0.679637730121613,27.4934635162354,37.3412284851074,0.980259478092194,27.0495414733887\n        ,37.0782127380371,1.16021084785461,27.7116069793701,36.7087478637695,0.851239860057831,26.650333404541,37.6419792175293\n        ,1.37471866607666,27.4007320404053,37.5071411132813,1.03993594646454,27.0318088531494,38.0435752868652,1.17184197902679\n        ,26.4400997161865,37.4421005249023,2.04593300819397,26.6612987518311,37.5791244506836,1.56387555599213,27.5257396697998\n        ,36.7985382080078,1.59476542472839,27.252779006958,36.6252250671387,2.00045323371887,27.1135292053223,38.1128196716309\n        ,1.73599755764008,27.8796730041504,37.1851119995117,1.79905617237091,27.3627796173096,36.5155220031738,2.01364994049072\n        ,27.9746055603027,35.7752990722656,1.58363437652588,27.7661838531494,35.6817970275879,1.94547843933105,28.3251419067383\n        ,36.1039810180664,1.7449312210083,27.9955158233643,36.9921951293945,1.80444490909576,28.4029026031494,34.9839820861816\n        ,1.58109271526337,28.1856861114502,34.848575592041,1.88748633861542,27.7915382385254,35.4960746765137,1.9382655620575\n        ,28.4168186187744,35.9179153442383,1.75137233734131,28.6992263793945,35.1313018798828,1.7256453037262,28.3781414031982\n        ,34.8804969787598,2.25901389122009,27.9310855865479,35.6697311401367,2.39866852760315,28.6852798461914,35.0521774291992\n        ,2.21204161643982,28.3788299560547,35.8418731689453,2.34064173698425,28.2824611663818,36.0258941650391,2.37827920913696\n        ,27.9731998443604,36.9341583251953,2.44280982017517,27.471607208252,36.6702003479004,2.49169683456421,26.5937404632568\n        ,37.5661163330078,2.55073118209839,27.8806591033936,37.1366653442383,2.46509552001953,27.0677833557129,38.1636085510254\n        ,2.43924880027771,26.1258983612061,37.3881416320801,3.04604911804199,26.5572929382324,37.5719413757324,2.62185740470886\n        ,27.3054351806641,36.6506423950195,2.89670968055725,26.9249095916748,36.5646018981934,3.28057646751404,26.9879112243652\n        ,38.1367683410645,2.92280745506287,27.6747379302979,37.1117057800293,3.17924690246582,27.7615966796875,36.9150314331055\n        ,3.23563146591187,28.2383708953857,35.9730453491211,3.32715606689453,27.871862411499,35.6653060913086,3.07638382911682\n        ,27.5263328552246,35.4128036499023,3.39707732200623,28.3017101287842,34.8627967834473,3.21868848800659,27.9842147827148\n        ,34.7188110351563,3.48127365112305,28.3142108917236,35.7948036193848,3.34757208824158,28.5679912567139,34.9831886291504\n        ,3.40694642066956,28.1073131561279,34.7972373962402,3.87777209281921,27.6106281280518,35.5863075256348,3.86808156967163\n        ,28.4313812255859,34.9209785461426,3.87717008590698,28.1370372772217,35.7406539916992,3.9042637348175,27.0665016174316\n        ,36.4050979614258,3.31043982505798,27.510648727417,35.5919876098633,3.40624260902405,27.0221843719482,36.6047554016113\n        ,3.79309582710266,27.5394611358643,36.8876075744629,3.83840227127075,28.0492992401123,35.9131050109863,3.90735578536987\n        ,26.6743221282959,38.1594886779785,3.67190909385681,26.1993770599365,37.6065101623535,3.60492968559265,27.4188442230225\n        ,37.0833053588867,3.8506007194519,26.3732204437256,38.1710357666016,3.81811428070068,26.1211948394775,37.6256675720215\n        ,3.729327917099,26.3689670562744,38.1229438781738,4.14238786697388,26.0806045532227,37.6261596679688,3.831378698349\n        ,25.6204929351807,37.5335235595703,4.13789939880371,26.5901908874512,36.8493919372559,4.29961729049683,26.0924530029297\n        ,36.7544097900391,4.50640773773193,26.8835201263428,37.3182640075684,4.58951425552368,26.2052230834961,36.6018562316895\n        ,4.58425235748291,27.0373764038086,36.1325798034668,4.5937819480896,26.5271606445313,36.0083427429199,4.82670307159424\n        ,27.3855781555176,35.2786750793457,4.88182163238525,27.0250186920166,35.1469802856445,5.07152080535889,26.6071300506592\n        ,35.8096046447754,4.84630966186523,27.3304958343506,36.2740478515625,4.92522811889648,27.5788135528564,35.4574508666992\n        ,5.12497615814209,27.0628986358643,35.2529602050781,5.45621109008789,26.5958919525146,36.0889739990234,5.29514455795288\n        ,27.0041675567627,36.2450065612793,5.42881679534912,27.3649311065674,35.4346160888672,5.50301694869995,26.1548156738281\n        ,36.876579284668,5.06085157394409,25.5146293640137,37.8111763000488,4.68628072738647,26.5431079864502,37.3230209350586\n        ,5.13250923156738,25.9985046386719,38.1869125366211,4.74417495727539,25.8601264953613,38.4725189208984,4.65872764587402\n        ,25.379301071167,38.041332244873,4.60675239562988,24.8795471191406,38.6019477844238,4.33086013793945,24.8324947357178\n        ,38.3304977416992,4.05487537384033,25.2847557067871,37.7632865905762,4.32127714157104,24.2327289581299,39.4822654724121\n        ,4.69844198226929,24.5814819335938,39.0382881164551,4.36362171173096,24.5726547241211,39.3343391418457,4.62598991394043\n        ,24.3039608001709,39.6546897888184,4.67785024642944,24.988748550415,38.6693725585938,4.54520559310913,23.3804588317871\n        ,38.7108688354492,4.23522806167603,24.0566806793213,38.8694267272949,4.58743762969971,23.7426376342773,38.347526550293\n        ,5.05098819732666,23.1989231109619,38.1966209411621,4.90307235717773,23.9056186676025,38.6819915771484,5.32080602645874\n        ,23.1362209320068,37.7694129943848,5.23940420150757,23.7630577087402,38.2689514160156,5.09673023223877,23.7901935577393\n        ,37.8711585998535,5.49010467529297,23.9807529449463,38.3736877441406,5.77518558502197,23.5361366271973,37.5237312316895\n        ,6.10112524032593,23.0678863525391,37.4616851806641,5.86668682098389,23.7495536804199,37.8985443115234,6.32710599899292\n        ,23.2475433349609,37.5488967895508,6.44766569137573,22.8217315673828,37.5743827819824,6.23360919952393,23.3994960784912\n        ,37.9742126464844,6.59987640380859,23.0917453765869,38.1686515808105,6.06353569030762,22.8577537536621,37.8568840026855\n        ,5.88337469100952,23.012113571167,37.7846069335938,6.54836654663086,23.4866733551025,38.3189849853516,6.24945592880249\n        ,23.0492630004883,38.7583618164063,5.61055421829224,22.8870544433594,38.4511108398438,5.23353481292725,23.5309505462646\n        ,38.9028968811035,5.63903284072876,23.0816688537598,38.9113273620605,5.43069744110107,22.903959274292,38.6048736572266\n        ,5.06207942962646,23.5692825317383,39.0464859008789,5.50390243530273,23.1787662506104,39.5135841369629,4.73982095718384\n        ,22.9653015136719,39.0761489868164,4.45135879516602,23.7099552154541,39.643383026123,4.94727754592896,23.1316452026367\n        ,39.6058540344238,4.39698171615601,23.2359008789063,39.7697334289551,4.56437253952026,23.8059616088867,39.9706344604492\n        ,4.65126800537109,22.8236141204834,40.5319900512695,3.22857236862183,23.2926731109619,40.7458877563477,3.48519134521484\n        ,23.3760948181152,41.0617523193359,3.17902445793152,23.8505458831787,41.1859550476074,3.43207764625549,23.7036972045898\n        ,41.0978317260742,3.33670973777771,23.6273307800293,40.8063163757324,3.54599738121033,23.8023815155029,40.8397178649902\n        ,3.72936797142029,23.864990234375,40.3513641357422,0.763435900211334,26.0925273895264,37.3577766418457,2.46653962135315\n        ,25.1522541046143,38.3267784118652,2.33084297180176,24.2588024139404,41.0395889282227,3.48043417930603,24.0651969909668\n        ,40.6324920654297,3.8392653465271,25.5185146331787,41.4591979980469,1.35679078102112,25.653772354126,41.5190391540527\n        ,1.6309654712677,25.9954280853271,40.7029228210449,1.54055678844452,25.8710231781006,40.5874977111816,1.27703082561493\n        ,26.0212421417236,40.74462890625,2.01458048820496,27.0484008789063,38.6537818908691,2.09933829307556,26.9103240966797\n        ,38.5200996398926,1.7544903755188,25.8416957855225,40.7435646057129,1.77245020866394,26.9660968780518,38.5935897827148\n        ,1.06645917892456,26.9331588745117,38.5272674560547,1.37321221828461,27.0709819793701,38.1172180175781,0.946545481681824\n        ,26.7614231109619,38.6556396484375,0.834723055362701,26.2733211517334,38.2470092773438,4.53884506225586,26.247579574585\n        ,38.6773948669434,4.36139822006226,25.8889560699463,38.9593696594238,4.29162311553955,26.644458770752,37.085147857666\n        ,5.1886773109436,26.9800910949707,37.083366394043,4.67532682418823,26.9348583221436,36.4211692810059,5.37596225738525\n        ,27.2591381072998,36.4549560546875,4.88776636123657,26.5561027526855,38.6125755310059,3.46944952011108,26.9216537475586\n        ,38.2097854614258,3.33311867713928,26.8688983917236,38.6367416381836,3.23217034339905,26.8833427429199,38.5423469543457\n        ,2.40460467338562,25.8038959503174,40.8302612304688,2.23062658309937,27.186222076416,38.2038040161133,2.10988116264343\n        ,26.2264060974121,38.6139297485352,3.97575259208679,24.5834217071533,41.3079147338867,3.27626419067383,24.8852310180664\n        ,40.5095405578613,3.75876450538635,25.4011859893799,40.703010559082,3.19607472419739,25.1859474182129,41.5070991516113\n        ,2.65838599205017,25.6491737365723,40.8988571166992,2.67949414253235,25.6597290039063,40.8177680969238,3.02372980117798\n        ,25.122709274292,42.1687240600586,2.20631384849548,25.4116878509521,41.62255859375,2.47316360473633,18.6652545928955\n        ,49.0274696350098,-2.71728754043579,18.8835830688477,49.226978302002,-2.30565118789673,19.0407295227051,49.365291595459\n        ,-2.1370997428894,19.2852344512939,48.3980293273926,-2.39254927635193,18.7893352508545,49.1171913146973,-2.36733150482178\n        ,19.810115814209,48.9623527526855,-1.67176043987274,23.0315437316895,40.908805847168,2.42655611038208,17.4380874633789\n        ,52.009090423584,-0.472728759050369,18.2713642120361,46.4929962158203,1.71778869628906,18.4343547821045,46.4846496582031\n        ,1.90123617649078,25.4729385375977,41.5712852478027,2.26492691040039,25.2154121398926,42.1438407897949,1.88524603843689\n        ,25.9024715423584,40.8810386657715,2.52124524116516,25.5942573547363,41.5684204101563,2.04436349868774,25.6221370697021\n        ,41.5452880859375,1.8506965637207,26.7846965789795,38.5711326599121,2.87396049499512,24.2903747558594,39.2600364685059\n        ,2.27982521057129,23.56321144104,40.0693969726563,1.32033908367157,25.473295211792,39.0388641357422,4.46131086349487\n        ,24.5607967376709,39.9796295166016,4.38208770751953,24.531322479248,42.9018974304199,0.635185480117798,25.1442775726318\n        ,41.987964630127,0.959975838661194,17.2868213653564,50.5812377929688,-2.79002928733826,16.9400997161865,49.9927215576172\n        ,-3.01769161224365,22.0741806030273,42.0393333435059,1.58685779571533,23.2135009765625,40.9123229980469,2.01415634155273\n        ,22.84716796875,40.2443580627441,2.65073156356812,8.43788433074951,58.2488059997559,-5.06908559799194,22.8853321075439\n        ,39.2420883178711,4.04786348342896,20.1032047271729,47.3067436218262,-2.26983070373535,27.8083629608154,35.7866897583008\n        ,0.489041179418564,26.5843887329102,37.6299057006836,1.49316310882568,26.2961502075195,37.4816856384277,1.81986856460571\n        ,26.9315319061279,38.103832244873,1.47392988204956,28.5599994659424,34.891429901123,1.93208718299866,25.8117942810059\n        ,37.4354019165039,3.28776264190674,26.7924709320068,38.083984375,2.64168548583984,28.3647136688232,34.7375602722168\n        ,3.58996033668518,25.9461326599121,37.5993270874023,3.64939475059509,25.5401210784912,37.5742073059082,3.82962965965271\n        ,27.3658351898193,35.2051162719727,5.2496919631958,23.554235458374,38.9353561401367,3.55190014839172,24.2575073242188\n        ,39.0156440734863,3.84028148651123,23.1536922454834,39.5488891601563,2.57533121109009,4.21192502975464,59.6024436950684\n        ,1.20553481578827,3.87961935997009,60.1460342407227,0.683042943477631,4.10153722763062,59.9645767211914,1.17759025096893\n        ,0.886674761772156,61.9747085571289,-3.56468176841736,3.29183435440063,59.7472953796387,1.7451434135437,3.74813604354858\n        ,61.0305709838867,-0.745337963104248,1.48638010025024,59.8282012939453,2.30086016654968,3.60340857505798,59.9398307800293\n        ,1.34661877155304,10.2422742843628,52.4975051879883,-0.000607038440648466,10.7581825256348,53.1050300598145,0.902385234832764\n        ,11.5402479171753,53.9515991210938,1.23755180835724,12.2552671432495,54.5028038024902,0.66737699508667,2.27535820007324\n        ,45.8665199279785,-2.50945448875427,3.42833256721497,45.5274429321289,-1.78932905197144,4.05796194076538,45.2589874267578\n        ,-1.40885472297668,4.60915374755859,44.9898719787598,-0.930403530597687,5.24233913421631,44.666446685791,-0.0869212374091148\n        ,-4.25761461257935,44.1189155578613,-0.763114631175995,-6.03212308883667,43.845027923584,2.36041808128357,-5.83559989929199\n        ,43.7850875854492,3.04091644287109,-5.30527019500732,44.0394668579102,0.50008898973465,3.50020909309387,43.5624122619629\n        ,5.78555011749268,5.09468984603882,43.6128387451172,4.61228513717651,4.20102405548096,43.5664901733398,5.19080018997192\n        ,4.9380989074707,44.0710144042969,-0.0603329986333847,6.03212308883667,43.845027923584,2.36041808128357,5.67244100570679\n        ,44.0079154968262,1.06051099300385,5.30527019500732,44.0394668579102,0.50008898973465,5.31654071807861,43.6553688049316\n        ,4.30916976928711,-7.75623239065986e-017,43.5387115478516,5.84340620040894,-5.27845695614815e-005,33.3007431030273\n        ,2.05420589447021,-8.22455185698345e-005,33.2863311767578,1.1840980052948,-3.33971934196597e-006,33.5464897155762\n        ,2.91496634483337,-0.0216123331338167,34.086296081543,4.46552181243896,-0.0209378246217966,36.0812835693359,5.91989803314209\n        ,0.0214357674121857,40.9322090148926,5.86233282089233,0.000330000009853393,43.5154304504395,6.32375717163086,0.0163603387773037\n        ,42.6093482971191,6.2076268196106,-7.75623239065986e-017,44.1866607666016,-2.73809719085693,-7.75623239065986e-017\n        ,43.0882110595703,-2.73308086395264,-7.75623239065986e-017,41.1124305725098,-3.11592626571655,-7.75623239065986e-017\n        ,38.7960510253906,-3.92060899734497,-7.75623239065986e-017,37.1677017211914,-4.09805393218994,-7.75623239065986e-017\n        ,35.5332374572754,-3.72692203521729,-7.75623239065986e-017,34.4388084411621,-2.60908508300781,-7.75623239065986e-017\n        ,33.9057998657227,-1.05233216285706,-7.75623239065986e-017,40.3612594604492,-3.36505818367004,-7.75623239065986e-017\n        ,40.9668617248535,-2.97700309753418,-0.021883649751544,34.9344253540039,5.3594274520874,0.0219422280788422,38.3137702941895\n        ,5.65279293060303,-2.06331396412907e-010,33.4434928894043,0.294710874557495,-7.75623239065986e-017,37.981876373291\n        ,-4.00933170318604,-7.75623239065986e-017,39.5786552429199,-3.6428337097168,0.016111932694912,36.9298248291016,5.72457551956177\n        ,-7.75623239065986e-017,36.350471496582,-3.91248798370361,0.814909756183624,33.3780937194824,2.90381836891174,0.932765364646912\n        ,33.2268142700195,2.00603055953979,1.22708594799042,33.3489303588867,2.8274359703064,2.75687050819397,36.3014907836914\n        ,5.40374183654785,3.5030312538147,36.7397232055664,5.33827209472656,1.25800061225891,34.1628379821777,4.3538761138916\n        ,2.02382874488831,34.1971549987793,4.5708212852478,3.47264003753662,40.8046646118164,5.64674711227417,4.18744277954102\n        ,40.976692199707,5.10877799987793,5.14671087265015,41.2881736755371,4.74443769454956,1.62547600269318,40.8144302368164\n        ,6.03513288497925,5.77770185470581,43.7241973876953,4.21209239959717,5.29317903518677,43.5865287780762,4.95701169967651\n        ,5.08752679824829,42.6901473999023,5.04328632354736,4.34233283996582,43.5406455993652,5.61575651168823,4.17514419555664\n        ,42.6370620727539,5.60567569732666,3.46193909645081,42.6481056213379,5.76057195663452,3.47859120368958,43.5532836914063\n        ,5.99722957611084,3.43521809577942,42.6959381103516,5.98223733901978,1.42388653755188,36.1319541931152,5.72585105895996\n        ,3.40727496147156,40.9113006591797,5.82985496520996,1.57330799102783,42.6485214233398,6.22713947296143,1.58111011981964\n        ,43.5325012207031,6.25356292724609,5.83585691452026,39.4078598022461,4.92551565170288,7.0226731300354,39.7226982116699\n        ,1.82336485385895,6.7251763343811,40.6819534301758,1.25125098228455,5.85274076461792,38.5889129638672,-1.75322699546814\n        ,5.36832094192505,36.3024063110352,-3.52680969238281,5.2288670539856,34.9626655578613,-3.10190200805664,4.03269290924072\n        ,35.0155754089355,-3.88902568817139,3.9318573474884,36.8120727539063,-4.35974216461182,6.22724580764771,36.1577568054199\n        ,-1.94789063930511,5.26579904556274,39.0528678894043,-3.06897306442261,5.97235774993896,33.2114219665527,-2.53228330612183\n        ,4.39906072616577,32.8998641967773,-3.10125088691711,1.36317300796509,33.4801025390625,-1.84129047393799,1.09546613693237\n        ,34.4467086791992,-2.68856716156006,2.17296242713928,33.0436477661133,-2.6845920085907,0.895317554473877,33.7961120605469\n        ,-1.49867248535156,2.15257096290588,35.343318939209,-3.91910099983215,3.68432450294495,39.1226043701172,-3.77887201309204\n        ,4.3945517539978,36.7878608703613,5.68821334838867,6.84634876251221,39.6859741210938,3.44338226318359,6.85820627212524\n        ,38.0219192504883,4.15880107879639,5.12256383895874,44.0850296020508,-0.662708640098572,5.07416200637817,43.1190338134766\n        ,-1.0839581489563,3.94724798202515,43.0901641845703,-1.78187119960785,4.41386079788208,44.1070861816406,-1.39090013504028\n        ,5.10807847976685,37.1020164489746,5.3708872795105,3.92581939697266,35.0171241760254,5.48070430755615,4.79267168045044\n        ,35.4377059936523,5.29423522949219,0.795329332351685,33.1274223327637,1.13712930679321,0.989203810691834,32.4371757507324\n        ,0.0683181583881378,3.06665587425232,32.5945091247559,4.35868883132935,1.45700669288635,40.4501914978027,-3.34169721603394\n        ,1.73029398918152,41.279899597168,-2.65792369842529,6.56671047210693,36.2014427185059,-1.10563158988953,5.91551494598389\n        ,41.8584251403809,0.232219994068146,6.44283723831177,41.8459777832031,1.37607705593109,6.03975009918213,40.6554222106934\n        ,-0.198134005069733,6.39490938186646,38.2275466918945,-0.677325069904327,6.91662931442261,39.7310752868652,2.6323184967041\n        ,1.83349096775055,37.0975799560547,-4.27652215957642,1.56641674041748,38.9513626098633,-3.91081118583679,3.50512456893921\n        ,40.6196136474609,-3.00334811210632,4.33383369445801,34.2510070800781,5.19123935699463,7.39133644104004,37.5306282043457\n        ,1.03786599636078,6.60190296173096,37.1033821105957,4.54294300079346,6.40375185012817,37.7048988342285,4.72016429901123\n        ,5.96765041351318,37.515453338623,5.11439895629883,5.89599943161011,36.2985420227051,5.10671806335449,7.37723875045776\n        ,38.6811370849609,3.11948132514954,5.88621282577515,44.0235214233398,0.907807588577271,5.91183280944824,43.0774421691895\n        ,0.39118629693985,6.32332801818848,43.0385551452637,1.20373177528381,6.07704210281372,43.9742317199707,1.41692113876343\n        ,6.26329946517944,43.8762435913086,2.40513157844543,6.55381441116333,42.9839019775391,2.05214643478394,6.02948570251465\n        ,42.7914657592773,3.67581176757813,2.12726092338562,43.1003265380859,-2.51028513908386,2.32953906059265,44.1899299621582\n        ,-2.3960747718811,6.52310943603516,41.8832359313965,1.90106904506683,5.01420450210571,40.7571983337402,-2.03109741210938\n        ,3.62999892234802,41.6226119995117,-2.09058308601379,5.07654714584351,41.8539772033691,-1.2768919467926,1.74856305122375\n        ,41.446159362793,-2.7613410949707,6.6666374206543,41.9713020324707,1.90715312957764,6.58360290527344,41.9356079101563\n        ,1.37447500228882,5.17393112182617,41.9912605285645,-1.28132402896881,3.6604700088501,41.7834548950195,-2.16389107704163\n        ,6.04397821426392,41.9637260437012,0.200174003839493,7.44213581085205,36.6004333496094,1.16769206523895,7.92302513122559\n        ,32.6457328796387,-0.528758764266968,6.8061203956604,39.5952911376953,1.30259311199188,4.5844669342041,37.8577919006348\n        ,5.41912412643433,5.30243349075317,38.3342590332031,5.31651830673218,7.53545331954956,34.2902183532715,-0.67992115020752\n        ,7.87608909606934,36.6887588500977,1.07710671424866,4.71270799636841,34.922981262207,5.38027715682983,3.87385606765747\n        ,33.8004875183105,5.0019474029541,3.42617630958557,33.1789436340332,4.64112043380737,7.63047361373901,37.6648254394531\n        ,1.16357791423798,7.10544157028198,32.4796295166016,-1.40169179439545,6.13836097717285,32.2281188964844,-2.17795896530151\n        ,4.79551649093628,31.888032913208,-2.52016830444336,2.77830147743225,31.6644554138184,-2.11853051185608,1.35830628871918\n        ,31.4676284790039,-0.379713386297226,1.24095845222473,31.4523525238037,0.875401377677917,1.28563523292542,31.4966773986816\n        ,1.93234145641327,1.7512218952179,31.7267608642578,2.83344197273254,7.01957130432129,38.2649040222168,3.67450428009033\n        ,3.44437503814697,34.0655136108398,4.96053028106689,2.73415112495422,33.0613288879395,4.6151008605957,2.04167532920837\n        ,32.9766311645508,4.17566061019897,1.34300255775452,32.4887313842773,2.8340015411377,0.986135005950928,32.4462547302246\n        ,2.02241730690002,1.01812207698822,32.2924423217773,1.13504540920258,2.62103891372681,32.0797386169434,3.92770099639893\n        ,6.25751686096191,42.8987197875977,3.04582142829895,6.04216051101685,43.8070030212402,3.22801208496094,3.08791637420654\n        ,38.6117668151855,5.49701166152954,1.54153025150299,38.4154205322266,5.78113460540771,1.47424268722534,36.9438629150391\n        ,5.92009258270264,2.93614816665649,37.1169738769531,5.52249622344971,3.87624454498291,37.4765739440918,5.41282415390015\n        ,1.34507369995117,35.0776443481445,5.1326584815979,2.54694414138794,35.6014175415039,5.09529161453247,1.67743611335754\n        ,38.09423828125,-4.09251165390015,3.87088441848755,38.1073760986328,-4.12555122375488,5.3170599937439,37.6776351928711\n        ,-3.29789161682129,6.11478328704834,37.1026458740234,-1.88399529457092,6.49657773971558,36.9398536682129,-0.926609635353088\n        ,5.82635879516602,39.6921195983887,-1.53293943405151,5.03867244720459,39.8959846496582,-2.59106040000916,3.54611992835999\n        ,39.9083786010742,-3.3810977935791,1.41777455806732,39.6628646850586,-3.62027859687805,5.54055452346802,40.7690849304199\n        ,-1.08194398880005,5.49603080749512,41.856201171875,-0.522336006164551,5.60895442962646,41.9774932861328,-0.54057502746582\n        ,5.49299716949463,43.0982360839844,-0.212771996855736,5.50438833236694,44.0542755126953,0.256163358688354,1.99303114414215\n        ,36.2204513549805,-4.09781169891357,3.98227500915527,35.9138259887695,-4.1243839263916,5.28660011291504,35.5719833374023\n        ,-3.34177470207214,7.44574117660522,35.3674850463867,-0.307296603918076,3.89755582809448,38.8450965881348,5.16094303131104\n        ,4.99822235107422,39.3205108642578,5.13173723220825,6.45847272872925,41.8677444458008,2.8785502910614,6.1457724571228\n        ,41.7619590759277,3.46116876602173,0.765930593013763,33.2394866943359,0.199775099754334,6.97464942932129,33.6411361694336\n        ,-1.5275069475174,3.34150075912476,35.9524040222168,5.1044602394104,2.66343665122986,34.5371398925781,4.79501628875732\n        ,6.34700489044189,39.5354843139648,4.11105871200562,5.79346656799316,41.582836151123,3.95337581634521,5.71175098419189\n        ,42.7628898620605,4.28730201721191,5.51993751525879,43.6509590148926,4.6083869934082,-0.815094530582428,33.3783988952637\n        ,2.90374517440796,-0.933338344097137,33.2275924682617,2.00579643249512,-1.2274729013443,33.3488845825195,2.82644486427307\n        ,-2.75376105308533,36.3082656860352,5.42266178131104,-1.25820052623749,34.1625328063965,4.3541407585144,-2.02781987190247\n        ,34.1995391845703,4.5605411529541,-3.47264003753662,40.8046646118164,5.64674711227417,-5.45668506622314,41.3959541320801\n        ,4.4593939781189,-4.58708095550537,41.1039962768555,4.92208909988403,-1.62547600269318,40.8144302368164,6.03513288497925\n        ,-5.4484691619873,42.7392082214355,4.79399728775024,-5.77770185470581,43.7241973876953,4.21209239959717,-5.29317903518677\n        ,43.5865287780762,4.95701169967651,-3.46193599700928,42.6480674743652,5.76056671142578,-3.47859120368958,43.5532836914063\n        ,5.99722957611084,-3.43521809577942,42.6959381103516,5.98223733901978,-1.42269885540009,36.1321029663086,5.72401666641235\n        ,-3.40727496147156,40.9113006591797,5.82985496520996,-1.57330799102783,42.6485214233398,6.22713947296143,-1.58111011981964\n        ,43.5325012207031,6.25356292724609,-3.66835045814514,36.4985618591309,5.38381719589233,-5.79204177856445,39.4113311767578\n        ,4.94667863845825,-7.0226731300354,39.7226982116699,1.82336485385895,-6.7251763343811,40.6819534301758,1.25125098228455\n        ,-5.85274076461792,38.419017791748,-1.75322699546814,-5.78756046295166,40.3183822631836,-1.30541849136353,-5.36832094192505\n        ,36.3024063110352,-3.52680969238281,-5.2288670539856,34.9626655578613,-3.10190200805664,-4.03269290924072,35.0155754089355\n        ,-3.88902568817139,-3.9318573474884,36.8120727539063,-4.35974216461182,-6.22724771499634,36.1577682495117,-1.94789123535156\n        ,-5.26579904556274,39.0528678894043,-3.06897306442261,-5.97415399551392,33.3147354125977,-2.52801775932312,-4.40103721618652\n        ,32.9904479980469,-3.09865427017212,-1.3545548915863,33.4727592468262,-1.85239458084106,-1.09546613693237,34.4467086791992\n        ,-2.68856716156006,-2.12230801582336,34.2555770874023,-2.91455101966858,-2.18139433860779,33.1093902587891,-2.68757343292236\n        ,-0.895317554473877,33.7961120605469,-1.49867248535156,-2.15257096290588,35.343318939209,-3.91910099983215,-6.99374008178711\n        ,38.9632263183594,1.23011684417725,-7.25476980209351,39.1672859191895,1.80217695236206,-3.68432450294495,39.1226043701172\n        ,-3.77887201309204,-7.03208589553833,38.9501571655273,3.54810166358948,-6.8550271987915,39.6846504211426,3.43728446960449\n        ,-6.85820627212524,38.0219192504883,4.15880107879639,-5.12256383895874,44.0850296020508,-0.662708640098572,-5.07416200637817\n        ,43.1190338134766,-1.0839581489563,-3.9472484588623,43.0901641845703,-1.7818706035614,-4.41386079788208,44.1070861816406\n        ,-1.39090013504028,-5.10153818130493,37.1012496948242,5.36786413192749,-4.79267168045044,35.4377059936523,5.29423522949219\n        ,-0.803963482379913,33.1355094909668,1.13691902160645,-0.989203810691834,32.4371757507324,0.0683181583881378,-3.37483978271484\n        ,34.7629356384277,5.09840297698975,-1.45700669288635,40.4501914978027,-3.34169721603394,-1.73029398918152,41.279899597168\n        ,-2.65792369842529,-6.56719064712524,36.2016067504883,-1.10578656196594,-5.91551494598389,41.8584251403809,0.232219994068146\n        ,-6.44283723831177,41.8459777832031,1.37607705593109,-6.03975009918213,40.6554222106934,-0.198134005069733,-6.20767879486084\n        ,39.6629943847656,-0.267598986625671,-7.23072290420532,39.1555252075195,2.58811020851135,-6.91986083984375,39.7321853637695\n        ,2.6331958770752,-1.83349096775055,37.0975799560547,-4.27652215957642,-1.56641674041748,38.9513626098633,-3.91081118583679\n        ,-3.50512456893921,40.6196136474609,-3.00334811210632,-6.30732154846191,31.5682735443115,-2.05524492263794,-7.18444347381592\n        ,31.8184814453125,-1.26540243625641,-4.33383369445801,34.2510070800781,5.19123935699463,-7.39133644104004,37.5306282043457\n        ,1.03786599636078,-6.60190296173096,37.1033821105957,4.54294300079346,-5.96765041351318,37.515453338623,5.11439895629883\n        ,-5.89599943161011,36.2985420227051,5.10671806335449,-7.37121391296387,37.4857940673828,1.52764689922333,-7.52424764633179\n        ,38.2782287597656,2.63499093055725,-5.88621282577515,44.0235214233398,0.64057981967926,-5.91183280944824,43.0774421691895\n        ,0.123958557844162,-6.32332801818848,43.0385551452637,1.20373177528381,-6.07704210281372,43.9742317199707,1.41692113876343\n        ,-6.26329946517944,43.8762435913086,2.40513157844543,-6.55381441116333,42.9839019775391,2.05214643478394,-6.02948570251465\n        ,42.7914657592773,3.67581176757813,-2.13525223731995,43.1005859375,-2.50097489356995,-2.32953906059265,44.1899299621582\n        ,-2.3960747718811,-6.52310943603516,41.8832359313965,1.90106904506683,-5.01420545578003,40.7571983337402,-2.03109574317932\n        ,-3.63676381111145,41.6236991882324,-2.08075261116028,-5.07654762268066,41.8539772033691,-1.27689123153687,-1.74856305122375\n        ,41.446159362793,-2.7613410949707,-6.6666374206543,41.9713020324707,1.90715312957764,-6.58360290527344,41.9356079101563\n        ,1.37447500228882,-5.17393159866333,41.9912605285645,-1.28132331371307,-3.66729927062988,41.7845306396484,-2.15401744842529\n        ,-6.04397821426392,41.9637260437012,0.200174003839493,-6.13817310333252,35.4240798950195,-2.05124926567078,-6.8061203956604\n        ,39.5952911376953,1.30259311199188,-3.89585041999817,37.3545570373535,5.36638212203979,-5.27055740356445,38.3294830322266\n        ,5.32894420623779,-5.80193281173706,38.5906982421875,5.0371413230896,-6.67177486419678,38.838623046875,4.1148796081543\n        ,-7.2227783203125,37.7002792358398,3.50522708892822,-4.71270799636841,34.922981262207,5.38027715682983,-3.87385606765747\n        ,33.8004875183105,5.0019474029541,-3.42617630958557,33.1789436340332,4.73271560668945,-7.10551691055298,32.4807167053223\n        ,-1.39546012878418,-6.13810777664185,32.2308578491211,-2.16028618812561,-4.80070447921753,31.8894596099854,-2.51312136650085\n        ,-2.77957320213318,31.6670188903809,-2.11773061752319,-1.35933804512024,31.468542098999,-0.381132036447525,-1.24095845222473\n        ,31.4523525238037,0.513632297515869,-1.28563523292542,31.4966773986816,1.93234145641327,-1.7512218952179,31.7267608642578\n        ,2.83344197273254,-7.01010322570801,38.2587280273438,3.45386791229248,-2.21827101707459,32.9870643615723,4.24474334716797\n        ,-1.34323954582214,32.4883155822754,2.83370661735535,-0.986135005950928,32.4462547302246,2.02241730690002,-1.01812207698822\n        ,32.2924423217773,1.3158106803894,-2.62103891372681,32.0797386169434,3.92770099639893,-6.25751686096191,42.8987197875977\n        ,3.04582142829895,-6.04216051101685,43.8070030212402,3.22801208496094,-3.0857834815979,38.6119651794434,5.49794054031372\n        ,-1.54153025150299,38.4154205322266,5.78113460540771,-1.47438716888428,36.9435920715332,5.92864465713501,-2.93922257423401\n        ,37.1136054992676,5.5228476524353,-1.34475648403168,35.0796165466309,5.12902164459229,-2.53913545608521,35.605598449707\n        ,5.09833669662476,-1.67743504047394,38.0942153930664,-4.0925087928772,-3.87088441848755,38.1073760986328,-4.12555122375488\n        ,-5.3170599937439,37.6776351928711,-3.29789161682129,-6.11478328704834,37.1026458740234,-1.88399529457092,-6.49664258956909\n        ,36.9398765563965,-0.926629424095154,-6.36891555786133,38.7568817138672,-0.362202167510986,-5.82635879516602,39.3835487365723\n        ,-1.53293943405151,-5.03867244720459,39.8959846496582,-2.59106040000916,-3.54611992835999,39.9083786010742,-3.3810977935791\n        ,-1.41777455806732,39.6628646850586,-3.62027859687805,-5.54055452346802,40.7690849304199,-1.08194398880005,-5.49603080749512\n        ,41.856201171875,-0.522336006164551,-5.60895442962646,41.9774932861328,-0.54057502746582,-5.49299716949463,43.0982360839844\n        ,-0.479999780654907,-5.50438833236694,44.0542755126953,-0.0110644111409783,-1.99303114414215,36.2204513549805,-4.09781169891357\n        ,-3.98227500915527,35.9138259887695,-4.1243839263916,-5.28660011291504,35.5719833374023,-3.34177470207214,-4.4788703918457\n        ,39.1287841796875,5.13459396362305,-6.45847272872925,41.784423828125,2.8785502910614,-6.1457724571228,41.6194610595703\n        ,3.46116876602173,-4.63133525848389,42.6636047363281,5.32448053359985,-4.75305843353271,43.5604667663574,5.33120679855347\n        ,-7.44574117660522,35.3674850463867,-0.307296603918076,-0.765930593013763,33.2394866943359,0.199775099754334,-6.56689834594727\n        ,35.3885688781738,-1.30802595615387,-6.95459890365601,33.9223136901855,-1.50603950023651,-7.33988666534424,37.5106315612793\n        ,2.67807340621948,-6.3889856338501,37.875617980957,-0.605510652065277,-7.2694787979126,37.9696998596191,1.09678852558136\n        ,-7.34313821792603,38.1378936767578,1.5938401222229,2.54588627815247,31.5141983032227,3.90785717964172,7.35676193237305\n        ,36.611213684082,0.0735180079936981,1.76136982440948,30.7708950042725,-0.30973556637764,1.99895298480988,31.0155296325684\n        ,3.09628009796143,4.97575998306274,31.3360900878906,-2.19620847702026,6.30475044250488,31.5676937103271,-2.05935525894165\n        ,1.4699159860611,30.8071784973145,2.04358291625977,3.12279558181763,30.9744472503662,-1.80761325359344,7.18444299697876\n        ,31.8184814453125,-1.26540327072144,7.60904788970947,38.0021514892578,1.4394623041153,6.92367172241211,37.4992141723633\n        ,4.23017835617065,7.33489608764648,38.8762969970703,2.96697282791138,8.05961799621582,32.2336196899414,-0.364079624414444\n        ,7.2227783203125,37.7002792358398,3.50522708892822,7.99379205703735,36.6208305358887,1.01282215118408,7.57951307296753\n        ,37.86865234375,1.19116532802582,7.60626697540283,38.0132713317871,3.52246165275574,2.92987728118896,32.3107681274414\n        ,4.24027919769287,-2.54588627815247,31.5141983032227,3.90785717964172,-7.35676193237305,36.611213684082,0.0735180079936981\n        ,-1.76136982440948,30.7708950042725,-0.30973556637764,-1.99895298480988,31.0155296325684,3.09628009796143,-4.97575998306274\n        ,31.3360900878906,-2.19620823860168,-1.4699159860611,30.8071784973145,2.04358291625977,-3.12279558181763,30.9744472503662\n        ,-1.80761325359344,-6.92367172241211,37.4992141723633,4.23017835617065,-7.92302513122559,32.6457328796387,-0.429989874362946\n        ,-7.53545331954956,34.2902183532715,-0.679921090602875,-8.05961799621582,32.2336196899414,-0.364079624414444,-2.92987728118896\n        ,32.3107681274414,4.24027919769287,6.71319198608398,40.9277381896973,1.88174486160278,6.6584153175354,40.9530601501465\n        ,2.80434918403625,6.40892744064331,40.8210372924805,3.42478704452515,6.16580247879028,40.730842590332,4.11610317230225\n        ,5.24478960037231,40.4570274353027,5.07763576507568,4.09946584701538,40.003002166748,5.10969161987305,3.26685166358948\n        ,39.7574501037598,5.55594730377197,1.59205174446106,39.6368942260742,5.92203807830811,0.0218058526515961,39.6724739074707\n        ,5.78261089324951,-1.59205174446106,39.6368942260742,5.92203807830811,-3.26731586456299,39.7573318481445,5.55723333358765\n        ,-4.62337350845337,40.2267990112305,5.05230140686035,-5.74155473709106,40.6005477905273,4.75555038452148,-6.41632032394409\n        ,40.8238906860352,3.43074584007263,-6.66259670257568,40.9543685913086,2.805419921875,-6.71319198608398,40.9277381896973\n        ,1.88174486160278,6.96116399765015,37.8924865722656,0.236995846033096,6.53837490081787,39.545482635498,0.625087022781372\n        ,6.49494075775146,40.6730422973633,0.764400660991669,6.71600389480591,35.0457725524902,-1.27530515193939,5.8884334564209\n        ,35.0911750793457,-2.19964599609375,6.23003673553467,39.5202827453613,-0.280717462301254,-4.23733997344971,33.8883094787598\n        ,-3.31580758094788,-5.55170154571533,34.1430282592773,-2.73199439048767,-6.73952388763428,34.6517181396484,-1.38723611831665\n        ,2.27997398376465,34.040943145752,-3.00337839126587,4.2042031288147,34.010986328125,-3.35272359848022,5.61063671112061\n        ,33.969596862793,-2.70036911964417,6.52647972106934,41.9636688232422,2.90919852256775,6.23724269866943,41.8537979125977\n        ,3.54334712028503,5.89144325256348,41.6963653564453,4.04102087020874,5.23887634277344,41.4213523864746,4.82535839080811\n        ,4.29452753067017,41.1218376159668,5.21275663375854,3.47159290313721,40.9850463867188,5.65788459777832,-6.54996919631958\n        ,41.8910331726074,2.9947304725647,-6.23255920410156,41.7566947937012,3.59965658187866,-5.5538182258606,41.5054779052734\n        ,4.59554147720337,-4.69729375839233,41.2445487976074,5.07512426376343,-3.47165608406067,40.9741363525391,5.65721082687378\n        ,-23.6263427734375,43.013599395752,6.47430896759033,-23.7729072570801,43.1372222900391,6.58026456832886,-24.7628192901611\n        ,42.8174591064453,3.71304368972778,-24.5079193115234,42.6303253173828,3.80450463294983,-23.8901023864746,42.3696022033691\n        ,4.40267133712769,-23.2607154846191,42.4850196838379,5.82348585128784,-23.2944355010986,42.733642578125,6.23423337936401\n        ,-24.9903984069824,43.7264289855957,5.74327707290649,-24.3464870452881,43.513370513916,6.43716669082642,-24.1099834442139\n        ,43.3889198303223,6.47907829284668,-24.2180614471436,42.4923400878906,4.03699064254761,-25.4617786407471,43.6127967834473\n        ,4.0622730255127,-25.304744720459,43.3559913635254,3.76097178459167,-25.5957698822021,43.7158012390137,4.88774299621582\n        ,-25.5078639984131,43.6638641357422,4.65497446060181,-25.1738891601563,42.5260353088379,3.73804807662964,-24.6930446624756\n        ,42.1397438049316,3.69490194320679,-25.8416652679443,41.6027069091797,3.753737449646,-25.3609161376953,41.2780914306641\n        ,3.74570178985596,-25.5961322784424,42.946418762207,4.07511329650879,-25.7301807403564,43.0309448242188,4.41291189193726\n        ,-26.2887325286865,42.0926628112793,4.36350917816162,-26.2815189361572,41.9631805419922,4.04271125793457,-26.3981914520264\n        ,40.0381469726563,3.94070935249329,-26.700496673584,40.2688484191895,3.99253249168396,-26.031810760498,39.866283416748\n        ,4.42348146438599,-26.9415378570557,39.6701011657715,4.1496410369873,-26.6437759399414,39.3840065002441,4.57978057861328\n        ,-27.4736957550049,40.0068969726563,4.43392086029053,-27.1415252685547,40.5520286560059,4.28695392608643,-25.0047302246094\n        ,41.0434036254883,4.17262172698975,-27.0838451385498,39.4616813659668,4.20486354827881,-27.5854930877686,39.8320007324219\n        ,4.42073726654053,-27.4173030853271,38.7636375427246,4.53872299194336,-26.8994770050049,39.3322372436523,4.61534118652344\n        ,-27.5505905151367,38.8895950317383,4.15631341934204,-27.9687995910645,39.2777709960938,4.31590127944946,-27.5471420288086\n        ,38.6640548706055,4.52497625350952,-28.0055732727051,38.2453079223633,4.07616996765137,-27.8282165527344,38.1721115112305\n        ,4.42304611206055,-28.0598011016846,39.1244735717773,4.31831836700439,-28.3139152526855,38.5171012878418,4.22306823730469\n        ,-28.4227142333984,37.6497230529785,4.07181930541992,-28.217414855957,37.5255508422852,4.32485485076904,-27.8730697631836\n        ,37.9825782775879,4.39158630371094,-28.3780708312988,38.3434410095215,4.16639280319214,-28.6439151763916,37.7854652404785\n        ,4.15652751922607,-28.4176254272461,37.5569000244141,4.59826374053955,-28.0582599639893,38.1683197021484,4.77799558639526\n        ,-28.4014892578125,38.297679901123,4.63346862792969,-28.6482925415039,37.744571685791,4.51374578475952,-28.0808868408203\n        ,39.0941696166992,4.7457594871521,-27.6341457366943,38.8030586242676,4.86536312103271,-28.3536701202393,38.4771766662598\n        ,4.65000343322754,-27.1750984191895,39.3397560119629,5.02171897888184,-27.9707336425781,39.2536811828613,4.79168939590454\n        ,-27.5544815063477,39.7653503417969,4.87039470672607,-26.8892860412598,39.1242294311523,5.65932321548462,-27.1643943786621\n        ,39.2769088745117,5.21089363098145,-28.0640392303467,38.5519676208496,5.3613109588623,-27.7503108978271,38.3601455688477\n        ,5.72724676132202,-27.5549240112305,39.8371887207031,5.44011735916138,-28.3622589111328,38.9591102600098,5.60978889465332\n        ,-27.8641948699951,38.2575073242188,5.75561332702637,-28.5736103057861,37.5589599609375,5.41511964797974,-28.3246059417725\n        ,37.4510269165039,5.74597024917603,-28.8778953552246,37.9082946777344,5.62078475952148,-28.4881896972656,38.7738189697266\n        ,5.63155937194824,-29.0471324920654,36.796085357666,5.47368192672729,-28.7995357513428,36.6460189819336,5.74858140945435\n        ,-28.3623027801514,37.2672958374023,5.74302959442139,-28.9793586730957,37.7283210754395,5.64031219482422,-29.3114433288574\n        ,36.9610900878906,5.65622091293335,-28.9377841949463,36.6883697509766,6.14251613616943,-28.4273624420166,37.4474029541016\n        ,6.21729612350464,-29.2370700836182,36.8791809082031,6.13663291931152,-28.8671531677246,37.6475410461426,6.21940517425537\n        ,-28.7552375793457,37.8249931335449,6.24292993545532,-28.3837375640869,38.711784362793,6.26133489608765,-27.8976879119873\n        ,38.416675567627,6.24330282211304,-26.9654140472412,39.2554931640625,6.17968940734863,-28.276517868042,38.9079895019531\n        ,6.27008581161499,-27.4117317199707,39.8820152282715,6.13056707382202,-26.4471855163574,39.0464172363281,6.60819530487061\n        ,-26.9194221496582,39.2587203979492,6.24522972106934,-27.6800098419189,38.385009765625,6.62230777740479,-27.2573795318604\n        ,38.2736320495605,6.9517560005188,-27.26926612854,39.8481636047363,6.59906101226807,-27.9782104492188,38.8671264648438\n        ,6.95007228851318,-28.0688438415527,38.6760520935059,7.01848316192627,-28.5870819091797,37.7654495239258,7.17742586135864\n        ,-28.2777462005615,37.4363899230957,6.88086128234863,-27.9086799621582,37.1613502502441,7.15313673019409,-28.7339859008789\n        ,36.6618309020996,7.08320379257202,-28.3936653137207,36.4971008300781,7.30121755599976,-28.6705112457275,37.592227935791\n        ,7.20863342285156,-28.9643859863281,36.7978897094727,7.30511474609375,-28.4570426940918,36.5814056396484,7.71035099029541\n        ,-27.9176807403564,37.3377952575684,7.63046169281006,-28.7698287963867,36.7252349853516,7.75289964675903,-28.4236831665039\n        ,37.5247077941895,7.73659610748291,-27.4033813476563,38.1232032775879,7.00110530853271,-27.8806934356689,37.3391571044922\n        ,7.15934276580811,-27.2819881439209,38.3176307678223,7.47253370285034,-27.7696685791016,38.6321830749512,7.5859317779541\n        ,-28.3256855010986,37.6912994384766,7.72710371017456,-26.8567867279053,39.8479804992676,7.2989673614502,-26.4308338165283\n        ,39.2665863037109,7.17094659805298,-27.6364707946777,38.8198776245117,7.58093309402466,-26.5386028289795,39.8399963378906\n        ,7.40321207046509,-26.3355560302734,39.2802734375,7.28359174728394,-26.4937152862549,39.7903518676758,7.72415590286255\n        ,-26.2816333770752,39.2777862548828,7.37923860549927,-25.7911376953125,39.1551628112793,7.62134981155396,-26.7711887359619\n        ,38.5325317382813,7.91517496109009,-26.2570724487305,38.405632019043,8.05340671539307,-26.9927787780762,39.0176429748535\n        ,8.23996162414551,-26.3676681518555,38.260124206543,8.14638519287109,-27.2187328338623,37.843936920166,8.26996326446533\n        ,-26.6905918121338,37.6869506835938,8.43252944946289,-27.5778198242188,37.0123481750488,8.60592555999756,-27.2039623260498\n        ,36.8574829101563,8.74586391448975,-26.7794971466064,37.493537902832,8.46357822418213,-27.455057144165,38.0021095275879\n        ,8.637282371521,-27.7249240875244,37.2018547058105,8.87214088439941,-27.182933807373,36.963996887207,9.13169574737549\n        ,-26.6903743743896,37.7697410583496,8.90561294555664,-27.0663108825684,37.950511932373,9.09242057800293,-27.4639053344727\n        ,37.1640396118164,9.21800422668457,-26.2363605499268,38.5291175842285,8.61067199707031,-25.5951328277588,39.4232940673828\n        ,8.14927768707275,-26.5826759338379,38.9987297058105,8.73210430145264,-26.0422592163086,39.8283958435059,8.27025318145752\n        ,-25.8990154266357,40.1051177978516,8.16572380065918,-25.4575862884521,39.6448440551758,8.05125999450684,-24.9653930664063\n        ,40.1741714477539,7.70815801620483,-24.9730854034424,39.9014778137207,7.42950582504272,-25.4200038909912,39.3626289367676\n        ,7.75683259963989,-24.2210006713867,41.0106048583984,7.98147630691528,-24.6388511657715,40.5908088684082,7.69859838485718\n        ,-24.576192855835,40.8846054077148,7.95612287521362,-24.2833976745605,41.1872444152832,7.96993923187256,-25.0402679443359\n        ,40.2473983764648,7.93497562408447,-23.489013671875,40.1892395019531,7.41091966629028,-24.1003112792969,40.3884086608887\n        ,7.85036611557007,-23.76003074646,39.8458709716797,8.26958274841309,-23.2517566680908,39.6617813110352,8.05038833618164\n        ,-23.8638591766357,40.1887512207031,8.5574779510498,-23.1712284088135,39.2300567626953,8.37701511383057,-23.7789897918701\n        ,39.7685356140137,8.3179931640625,-23.7777690887451,39.3715591430664,8.7131233215332,-23.8962688446045,39.8838386535645\n        ,9.01914501190186,-23.4659900665283,39.0062866210938,9.28580474853516,-23.0384254455566,38.9159851074219,8.99066925048828\n        ,-23.623067855835,39.3927841186523,9.53688907623291,-23.1323223114014,39.0118255615234,9.59018325805664,-22.7384910583496\n        ,39.0114517211914,9.32059097290039,-23.2353954315186,39.445182800293,9.75967407226563,-22.9911422729492,39.6222114562988\n        ,9.18593120574951,-22.8035850524902,39.2971458435059,8.97720813751221,-22.871150970459,39.2318687438965,9.65723705291748\n        ,-23.3471965789795,39.7962341308594,9.4227352142334,-22.9731788635254,40.2100143432617,8.72885417938232,-22.8828563690186\n        ,39.8947982788086,8.33472442626953,-23.4366111755371,40.3843574523926,8.82137107849121,-23.0198669433594,40.3654747009277\n        ,8.55435657501221,-22.9130306243896,40.0500450134277,8.16645908355713,-23.4837207794189,40.530647277832,8.69202995300293\n        ,-23.1712074279785,40.9755668640137,7.88031339645386,-23.0264263153076,40.5268325805664,7.56757783889771,-23.6603927612305\n        ,41.1375503540039,8.156907081604,-23.1650218963623,41.0661544799805,7.53386211395264,-23.235279083252,41.2355422973633\n        ,7.71307706832886,-23.774694442749,41.4714393615723,7.87514686584473,-22.9597644805908,41.9761009216309,6.33067464828491\n        ,-23.3756122589111,42.2179107666016,6.64725112915039,-23.4795513153076,42.5396881103516,6.35377931594849,-23.9068374633789\n        ,42.6923294067383,6.66793060302734,-23.7800006866455,42.5955772399902,6.5540189743042,-23.6945686340332,42.2989540100098\n        ,6.75234365463257,-23.8408679962158,42.3424911499023,6.9574875831604,-24.3331031799316,41.8716430664063,4.02914953231812\n        ,-26.4941844940186,39.0164794921875,6.02960872650146,-25.5218563079834,39.9251556396484,5.76432228088379,-24.3132247924805\n        ,42.571662902832,6.771484375,-24.0989532470703,42.1516990661621,7.10267925262451,-25.8187999725342,43.0784912109375\n        ,4.83520603179932,-25.9118518829346,43.1455383300781,5.12484979629517,-26.3130931854248,42.3528518676758,5.08477687835693\n        ,-26.2328262329102,42.2309722900391,4.80738353729248,-26.2721271514893,42.3940773010254,5.55777406692505,-27.4076194763184\n        ,40.3714485168457,5.78906440734863,-27.3259334564209,40.2308349609375,5.42932653427124,-26.127269744873,42.3827819824219\n        ,5.2936635017395,-27.4691963195801,40.310604095459,4.7547812461853,-27.3994464874268,40.2410430908203,5.05457639694214\n        ,-27.6189594268799,39.8422622680664,4.65212154388428,-27.294132232666,40.3606758117676,4.49731540679932,-26.3379230499268\n        ,39.9064865112305,8.10357666015625,-26.3093795776367,40.3351631164551,7.92245149612427,-25.9464550018311,40.5943756103516\n        ,7.80378723144531,-26.6902542114258,38.767448425293,8.80242824554443,-27.0914497375488,38.7889060974121,8.33900260925293\n        ,-26.9938430786133,38.1222038269043,9.0299596786499,-27.3781890869141,38.1783409118652,8.58977794647217,-26.7387390136719\n        ,40.2936134338379,7.08049869537354,-27.1438694000244,39.9151344299316,6.99638652801514,-27.078519821167,40.3383636474609\n        ,6.88743591308594,-27.2102470397949,40.2485847473145,6.06977415084839,-26.0227088928223,42.4649887084961,5.74219417572021\n        ,-27.5707168579102,39.9309616088867,5.81999683380127,-26.3443927764893,40.2721290588379,7.53774356842041,-24.6449184417725\n        ,42.8606872558594,6.61178350448608,-24.9284400939941,42.0807762145996,7.13394355773926,-25.5023517608643,42.3086242675781\n        ,6.64509868621826,-25.3115196228027,43.0999031066895,6.07989645004272,-25.8049125671387,42.5218391418457,6.16582107543945\n        ,-25.7740497589111,42.4401054382324,6.50868082046509,-25.2683982849121,43.7581748962402,5.62061786651611,-25.55246925354\n        ,43.2300834655762,5.92629480361938,-23.2498245239258,42.3686256408691,5.56239986419678,-25.6443176269531,43.1836395263672\n        ,5.72843170166016,-25.404899597168,43.7405166625977,5.31508016586304,-26.0778408050537,42.5206146240234,6.04322719573975\n        ,-25.7941913604736,43.1893310546875,5.52624320983887,-25.8493099212646,43.1688117980957,5.33820009231567,-27.0476417541504\n        ,40.2691268920898,6.52142858505249,-24.6178779602051,40.8027114868164,5.59365653991699,-23.9773197174072,41.5689315795898\n        ,4.54149913787842,-25.5075569152832,40.646915435791,7.91557359695435,-24.5568523406982,41.5289115905762,7.71010732650757\n        ,-25.4690227508545,43.5844230651855,4.3893346786499,-23.4851150512695,42.3853034973145,5.17827129364014,-23.0789699554443\n        ,41.6929740905762,5.76250648498535,-22.9913101196289,40.6891403198242,7.15628480911255,-28.5560054779053,37.5645484924316\n        ,4.30806970596313,-27.0946807861328,39.3230667114258,5.13024616241455,-26.7749156951904,39.1556663513184,5.41575574874878\n        ,-27.4108295440674,39.8179130554199,5.15595531463623,-29.1609916687012,36.7120780944824,5.84303522109985,-26.1010341644287\n        ,39.0728492736816,6.80517244338989,-27.1171913146973,39.7844200134277,6.29439306259155,-28.754114151001,36.5392189025879\n        ,7.46010780334473,-26.174861907959,39.2433433532715,7.18090915679932,-25.7506484985352,39.1920318603516,7.30489063262939\n        ,-27.5133361816406,36.9361305236816,8.96808910369873,-23.738862991333,40.4270858764648,6.7562952041626,-24.3904209136963\n        ,40.5501098632813,7.136474609375,-23.4358806610107,41.0184288024902,5.73205804824829,-25.4248676300049,43.9473648071289\n        ,4.77484750747681,-25.4191493988037,43.8811645507813,4.5657262802124,-24.9597187042236,43.013126373291,3.73045754432678\n        ,-10.3164577484131,31.3168678283691,5.01786422729492,-10.4693489074707,31.2689456939697,4.63314199447632,-10.5240421295166\n        ,31.170467376709,4.48853874206543,-10.660719871521,31.3138275146484,3.91740942001343,-10.77490234375,31.469934463501\n        ,3.34196209907532,-10.6482152938843,31.5425624847412,2.44958591461182,-10.7324857711792,30.8154754638672,2.55173945426941\n        ,-10.7644014358521,31.6591262817383,3.23164176940918,-10.2808208465576,30.2793865203857,5.12975692749023,-10.6183176040649\n        ,30.2281265258789,4.64286136627197,-10.7760057449341,30.1664028167725,4.10758399963379,-10.9403457641602,30.1010570526123\n        ,3.54219555854797,-10.7129125595093,30.5542430877686,2.78098440170288,-10.5687103271484,27.5677471160889,5.52671241760254\n        ,-10.8588371276855,27.1532573699951,5.07090520858765,-11.0879936218262,26.626407623291,4.60105657577515,-11.1306085586548\n        ,26.04709815979,4.08966159820557,-11.0336875915527,25.9920654296875,3.46891665458679,-10.1512355804443,31.335147857666\n        ,5.21716260910034,-10.1344223022461,30.2982311248779,5.32907390594482,-10.4207248687744,27.5892753601074,5.72850036621094\n        ,-10.5767116546631,26.8494491577148,5.02568817138672,-10.4960432052612,27.2717418670654,5.53186178207397,-10.8061676025391\n        ,26.3513717651367,4.55436325073242,-10.9394845962524,25.787410736084,4.06502723693848,-10.9920883178711,25.724142074585\n        ,3.48293972015381,-11.0105819702148,25.9963417053223,3.22727370262146,-10.8338022232056,29.7751216888428,2.6583685874939\n        ,-10.8335161209106,29.8614139556885,2.92862701416016,-10.7086763381958,30.6338901519775,2.42993354797363,-10.7769727706909\n        ,30.848165512085,2.06661295890808,-10.7256050109863,31.4149341583252,1.97352004051209,-10.5714511871338,32.3552322387695\n        ,2.34100723266602,-10.6839933395386,31.7842426300049,1.91300749778748,-9.78507804870605,31.3338642120361,5.21721887588501\n        ,-9.87252616882324,30.2970352172852,5.36267328262329,-10.1591758728027,27.5860157012939,5.76210689544678,-10.4396133422852\n        ,27.3521747589111,5.68618774414063,-10.1944417953491,27.2868728637695,5.69989347457886,-10.2716274261475,27.1709403991699\n        ,5.48325634002686,-10.3740825653076,26.7456321716309,4.97552013397217,-10.6062746047974,26.249885559082,4.5052752494812\n        ,-10.6482419967651,25.6966972351074,3.98919558525085,-10.8514442443848,25.6230316162109,3.45295071601868,-11.0032596588135\n        ,25.8384418487549,3.3116455078125,-10.8768291473389,25.7538566589355,3.20788168907166,-10.8864469528198,25.9693126678467\n        ,3.08493828773499,-10.7101306915283,29.7232685089111,2.51960349082947,-10.6073989868164,30.6013603210449,2.29236936569214\n        ,-10.6865501403809,30.8208541870117,1.92806482315063,-10.635461807251,31.3915271759033,1.83091568946838,-10.5932502746582\n        ,31.7602348327637,1.76836478710175,-9.30952262878418,27.6096858978271,5.51130199432373,-9.36321449279785,27.1908302307129\n        ,5.43078088760376,-9.49075031280518,27.0709991455078,5.24157238006592,-10.0877647399902,26.1372394561768,4.31180095672607\n        ,-10.194766998291,25.6682167053223,3.90583229064941,-10.329719543457,25.5889053344727,3.29478788375854,-10.3173160552979\n        ,25.7066307067871,3.03983330726624,-10.3007287979126,25.9241466522217,2.91840529441834,-9.58683490753174,30.544189453125\n        ,2.06859755516052,-9.49680805206299,30.7271423339844,1.58154821395874,-9.35418319702148,31.3025550842285,1.47600340843201\n        ,-9.26891422271729,31.6173439025879,1.4452668428421,-10.1851902008057,32.705379486084,4.81975841522217,-10.3326625823975\n        ,32.658447265625,4.44952201843262,-10.5901002883911,32.6262359619141,4.10170269012451,-10.6844825744629,32.5894355773926\n        ,3.782958984375,-10.7659769058228,31.854585647583,3.87953209877014,-10.6804103851318,31.72825050354,4.22633266448975\n        ,-10.767786026001,32.5557403564453,3.49398136138916,-10.8224496841431,31.9832763671875,3.56911110877991,-10.6785020828247\n        ,32.4997863769531,3.11047172546387,-10.0196094512939,32.7230186462402,5.0197606086731,-9.6869421005249,32.7223472595215\n        ,5.02937936782837,-10.0704555511475,33.6436462402344,4.67708396911621,-10.2198791503906,33.6019630432129,4.2960090637207\n        ,-10.4739217758179,33.5704498291016,3.95791888237,-10.5781259536743,33.525318145752,3.62588310241699,-10.6515369415283\n        ,33.4999389648438,3.3558030128479,-9.90494632720947,33.6611785888672,4.87709617614746,-9.5853099822998,33.6472320556641\n        ,4.89282941818237,-9.81949043273926,29.6289615631104,2.35337352752686,-10.4194192886353,32.6480674743652,4.33592128753662\n        ,-10.5391340255737,31.3583889007568,4.50618028640747,-10.6981973648071,31.5539741516113,3.89310121536255,-10.811616897583\n        ,31.6938400268555,3.3666524887085,-10.7361822128296,32.5229110717773,3.25604343414307,-10.6453189849854,33.4683799743652\n        ,3.12315583229065,-10.3043689727783,33.5925903320313,4.19207048416138,-10.6319732666016,33.4152908325195,3.01470398902893\n        ,-10.3322820663452,32.3530235290527,2.34796810150146,-10.4097709655762,31.530782699585,2.44121956825256,-10.4909515380859\n        ,31.4116535186768,2.01891303062439,-10.4493608474731,31.7783679962158,1.95387315750122,-9.30763244628906,31.3428630828857\n        ,1.69849765300751,-9.27701187133789,31.7112808227539,1.63962948322296,-10.4460687637329,32.5039863586426,3.1677417755127\n        ,-10.5314064025879,31.6679840087891,3.2867476940155,-10.0142679214478,33.5728530883789,4.17846965789795,-9.86453628540039\n        ,33.6150016784668,4.55991649627686,-9.97907161712646,32.6791954040527,4.70206594467163,-10.2583742141724,32.6154098510742\n        ,4.15401935577393,-10.3493843078613,33.5028266906738,3.56188273429871,-10.2622365951538,33.5427513122559,3.85136222839355\n        ,-10.4926147460938,32.5556602478027,3.59924221038818,-9.80005741119385,33.6264266967773,4.66476440429688,-9.81684875488281\n        ,32.6917915344238,4.80013179779053,-8.66097354888916,32.6172485351563,4.52869319915771,-9.61614990234375,33.617748260498\n        ,4.65667963027954,-8.78214836120605,33.6332511901855,4.21878576278687,-10.4077816009521,33.4588775634766,3.14650082588196\n        ,-10.4150419235229,33.4819145202637,3.32972025871277,-10.50719165802,32.5252380371094,3.34993386268616,-10.3950653076172\n        ,33.4113655090332,3.04695606231689,-10.6592054367065,32.8283767700195,2.68546414375305,-10.4200668334961,32.8382186889648\n        ,2.69870090484619,-10.1139011383057,33.5614242553711,4.05157613754272,-9.27635383605957,28.1130962371826,5.45821094512939\n        ,-8.77882862091064,32.6230430603027,4.73766326904297,-8.70695400238037,33.5800857543945,4.55812740325928,-8.99448394775391\n        ,31.0272312164307,5.08935070037842,-9.15069961547852,29.4090843200684,5.3089280128479,-8.69561290740967,32.595043182373\n        ,4.38728666305542,-9.04243087768555,32.6055297851563,3.77995300292969,-9.26224613189697,32.6090660095215,3.21469688415527\n        ,-9.35247230529785,32.4662780761719,2.86970043182373,-9.35247230529785,31.6366233825684,2.86970067024231,-9.52705860137939\n        ,31.4878177642822,2.16713285446167,-4.29888534545898,21.2389469146729,2.84800100326538,-3.93148970603943,21.6375637054443\n        ,2.01565790176392,-2.89970541000366,24.9143161773682,2.17081499099731,-2.62015056610107,26.2532806396484,2.3701069355011\n        ,-4.41971921920776,21.6550331115723,4.03259515762329,-8.20820713043213,24.2063522338867,5.04386711120605,-8.81881809234619\n        ,23.5065650939941,4.60944509506226,-9.62073135375977,24.0104999542236,1.51200270652771,-9.83751201629639,22.8306541442871\n        ,2.4107723236084,-9.29598808288574,23.2301254272461,4.08172798156738,-2.31491231918335,29.7624473571777,3.23570966720581\n        ,-2.28898024559021,28.4519901275635,2.82041788101196,-9.44373893737793,26.8204231262207,1.29200780391693,-9.5324125289917\n        ,25.5558605194092,1.46676802635193,-3.17484617233276,23.3372783660889,2.0396089553833,-7.73149299621582,25.2387638092041\n        ,5.56792831420898,-6.34912157058716,24.9886512756348,5.79081058502197,-6.1414589881897,23.8302707672119,5.62265491485596\n        ,-8.50175857543945,30.9236011505127,0.143369674682617,-8.91572570800781,29.3362884521484,0.629053473472595,-9.6224308013916\n        ,23.0851593017578,1.67339825630188,-9.57697582244873,22.9747257232666,3.24728608131409,-3.43016672134399,22.3351707458496\n        ,1.91197001934052,-5.56419515609741,22.756872177124,5.25122785568237,-4.97053909301758,22.3994827270508,4.87527322769165\n        ,-10.183985710144,24.0114269256592,1.48732244968414,-10.3995380401611,23.0030460357666,2.38215231895447,-10.1714305877686\n        ,23.2381954193115,1.69905114173889,-10.0658826828003,24.2001304626465,3.24561882019043,-10.1078948974609,23.1566581726074\n        ,3.35979390144348,-9.73544216156006,24.5126132965088,4.35015201568604,-9.77918720245361,23.3942604064941,4.31036186218262\n        ,-9.15197277069092,24.8433399200439,5.12198305130005,-9.17974853515625,23.6991958618164,5.01077795028687,-8.81389045715332\n        ,25.4027652740479,5.52354097366333,-8.11821174621582,25.076171875,6.03452777862549,-8.62082099914551,24.2555313110352\n        ,5.50145721435547,-4.94333648681641,24.0129108428955,6.1410551071167,-5.44337701797485,22.7728080749512,5.75631809234619\n        ,-6.00277996063232,23.6588459014893,6.15437316894531,-5.51579332351685,24.4081516265869,6.2461986541748,-4.21660566329956\n        ,23.4138717651367,5.43742179870605,-4.60753440856934,22.092170715332,5.30762243270874,-3.64753818511963,22.7981567382813\n        ,4.36176633834839,-3.97580409049988,21.4336051940918,4.30237817764282,-3.93899321556091,21.0546340942383,3.03482794761658\n        ,-3.00800609588623,22.134693145752,2.17809700965881,-3.47336459159851,21.4021892547607,2.19615602493286,-10.2548227310181\n        ,25.4462604522705,2.23816800117493,-10.0921211242676,25.3244571685791,1.40582799911499,-10.1016530990601,25.5772495269775\n        ,4.32744646072388,-9.49295043945313,25.6799545288086,5.24583053588867,-8.74037933349609,26.1106243133545,5.74385833740234\n        ,-7.91368246078491,26.0554676055908,6.26549863815308,-4.82580804824829,24.7727489471436,6.31932830810547,-3.97736215591431\n        ,24.154411315918,5.67784929275513,-3.38183975219727,23.6130828857422,4.72761106491089,-2.68674302101135,23.211181640625\n        ,2.26280474662781,-9.40937805175781,29.5380821228027,0.473168909549713,-9.00727462768555,31.0707683563232,0.0614502280950546\n        ,-9.27804946899414,31.2962856292725,1.37091720104218,-9.69148540496826,29.6239604949951,1.64869022369385,-8.30988502502441\n        ,32.8178291320801,5.27076625823975,-8.49545383453369,30.7285480499268,5.71441602706909,-7.65233707427979,30.4246578216553\n        ,6.46737289428711,-7.61286640167236,32.386043548584,6.16658735275269,-4.8137845993042,30.9995460510254,6.55148696899414\n        ,-5.17962551116943,29.5996227264404,6.77977800369263,-4.09050512313843,30.391019821167,6.23229169845581,-2.47493076324463\n        ,29.0429763793945,4.76166772842407,-2.26273012161255,28.844123840332,4.130455493927,-1.83292031288147,28.6096267700195\n        ,3.26814723014832,-8.04264640808105,34.5006980895996,-0.720708727836609,-7.95204257965088,35.5625,4.51369094848633\n        ,-7.40072584152222,35.2431945800781,5.5053391456604,-4.30788898468018,32.4267234802246,6.14424514770508,-3.70565128326416\n        ,31.6386547088623,5.78515100479126,-2.07473802566528,29.742862701416,4.24215078353882,-1.89405024051666,29.2105312347412\n        ,3.50888156890869,-7.91234683990479,36.6562614440918,0.0448120012879372,-7.69625759124756,37.7195739746094,3.7429211139679\n        ,-7.29021406173706,37.5362548828125,4.64640092849731,-6.16034173965454,36.3572311401367,5.5187726020813,-4.74860525131226\n        ,34.8689727783203,5.76224040985107,-3.77248501777649,33.7298736572266,5.60572528839111,-3.26117038726807,32.9967346191406\n        ,5.2520923614502,-6.08498001098633,25.5943832397461,6.55991077423096,-6.18661165237427,24.7244873046875,6.31633234024048\n        ,-10.0716009140015,24.0060024261475,1.4139244556427,-10.0697593688965,23.165225982666,1.6226841211319,-10.3156270980835\n        ,22.8844871520996,2.36132836341858,-10.029746055603,23.0400581359863,3.33455991744995,-9.70546817779541,23.283145904541\n        ,4.26745891571045,-9.1259241104126,23.5924777984619,4.93032312393188,-8.48777198791504,24.2007484436035,5.37533950805664\n        ,-7.91638708114624,25.1751689910889,5.94517946243286,-6.03314876556396,23.5322189331055,5.99998188018799,-5.52076005935669\n        ,22.6739807128906,5.62737798690796,-4.69226598739624,22.0745868682861,5.19560813903809,-4.09655714035034,21.4006404876709\n        ,4.22978782653809,-4.06289386749268,21.0164031982422,3.00006198883057,-3.60996341705322,21.3400974273682,2.08173608779907\n        ,-9.97756958007813,25.3492584228516,1.34460115432739,-3.06863784790039,22.1662006378174,2.02713704109192,-2.74755239486694\n        ,23.2384338378906,2.15618586540222,-8.82112979888916,31.0097255706787,-0.0560440123081207,-1.86797857284546,28.614429473877\n        ,3.1319215297699,-7.94068431854248,34.379695892334,-0.816163599491119,-1.89337337017059,29.1634712219238,3.36262130737305\n        ,-7.79942846298218,36.6775054931641,-0.0194739997386932,-7.60380077362061,37.7963676452637,3.67964386940002,-7.22692108154297\n        ,37.5835647583008,4.55090570449829,-6.1025857925415,36.4501762390137,5.41515636444092,-4.72125434875488,34.9616813659668\n        ,5.66096448898315,-3.76971030235291,33.8117027282715,5.53015184402466,-3.28945708274841,33.111946105957,5.19547367095947\n        ,-2.06053113937378,30.4330711364746,3.89472961425781,-2.10025668144226,30.606517791748,3.93692255020142,-6.30683612823486\n        ,24.863639831543,6.18582439422607,-6.11436796188354,23.6850185394287,6.04688310623169,-7.78097343444824,26.0277538299561\n        ,6.21321439743042,-9.29177093505859,29.477855682373,0.412787765264511,-2.07259583473206,30.3804836273193,4.01975345611572\n        ,-6.21463012695313,25.6692790985107,6.46301651000977,-7.55111742019653,30.3920917510986,6.39775085449219,-7.45050239562988\n        ,32.3329658508301,6.15083980560303,-7.27913808822632,35.1760787963867,5.55547094345093,-6.99305248260498,37.2315101623535\n        ,4.84737014770508,-6.91676378250122,37.2658882141113,4.76304244995117,-2.28811597824097,26.3853244781494,2.56221866607666\n        ,-2.23476219177246,26.3820266723633,2.68446254730225,-2.61036849021912,26.5165481567383,3.75161123275757,-2.90822100639343\n        ,26.7460823059082,4.73223924636841,-3.56000971794128,27.1050662994385,5.75402736663818,-4.27271509170532,27.3566989898682\n        ,6.4875373840332,-5.66520214080811,27.6100559234619,6.7059268951416,-5.7662296295166,27.5774803161621,6.57018709182739\n        ,-7.6766791343689,27.9425983428955,6.35362434387207,-7.80297374725342,27.9894924163818,6.4398775100708,-8.66915988922119\n        ,28.0921421051025,5.84028482437134,-9.87279415130615,26.798620223999,1.15454745292664,-9.99865055084229,26.792085647583\n        ,1.22897827625275,-10.1591415405273,26.8642349243164,2.07426524162292,-2.20996499061584,29.9731330871582,4.60764837265015\n        ,-2.10399508476257,30.5140609741211,4.07979536056519,-5.30119848251343,29.6463642120361,6.68332195281982,-4.92222452163696\n        ,31.0695972442627,6.47152519226074,-4.48160314559937,32.5191307067871,6.0656886100769,-4.14768695831299,34.1093292236328\n        ,5.51155948638916,-4.15120220184326,34.2035255432129,5.43701601028442,-1.98364222049713,27.8785266876221,2.93078923225403\n        ,-1.94235408306122,27.87815284729,3.06318759918213,-2.36977767944336,28.0997009277344,3.98143076896667,-2.63067173957825\n        ,28.2976512908936,4.7458701133728,-4.41857099533081,29.2386493682861,6.59666156768799,-7.56398439407349,30.5628261566162\n        ,6.71118402481079,-7.49685859680176,32.181510925293,6.48458242416382,-7.468101978302,32.5037994384766,6.4351601600647\n        ,-7.3045482635498,35.2156181335449,5.87828588485718,-6.73865842819214,32.2596702575684,6.63548994064331,-6.20531892776489\n        ,36.3156089782715,5.84047269821167,-7.05880689620972,37.1785850524902,5.21333408355713,-4.72433471679688,34.8476142883301\n        ,6.0802116394043,-6.41811656951904,34.4748916625977,6.24666404724121,-7.55984258651733,30.338529586792,6.73191165924072\n        ,-7.69254875183105,27.9261207580566,6.6812539100647,-7.82909297943115,26.0347461700439,6.52567291259766,-6.32481861114502\n        ,25.6593074798584,6.7205548286438,-7.95692873001099,25.1614246368408,6.27644300460815,-6.40386581420898,24.8511695861816\n        ,6.50110149383545,-5.83545446395874,27.5759601593018,6.88720178604126,-5.36732721328735,29.6078033447266,7.00625324249268\n        ,-4.96170663833618,31.019079208374,6.80995941162109,-5.2938666343689,29.7915210723877,6.99704647064209,-4.8523211479187\n        ,31.2468891143799,6.76324796676636,-4.41397762298584,32.6190986633301,6.37181329727173,-5.5450701713562,31.6847229003906\n        ,6.82576894760132,-5.13066625595093,33.2722244262695,6.48147821426392,-4.08279800415039,34.1065979003906,5.84938621520996\n        ,-8.26431655883789,35.4175186157227,0.438631266355515,-8.11979484558105,35.6021957397461,4.41319370269775,-8.47711849212646\n        ,32.8561134338379,5.23995113372803,-8.70630931854248,30.8051433563232,5.64721870422363,-8.90147686004639,28.0989265441895\n        ,5.80129289627075,-8.94633674621582,26.8793144226074,5.76223707199097,-8.9966287612915,26.0767917633057,5.69587278366089\n        ,-8.94582271575928,25.184455871582,5.4431848526001,-9.03204917907715,25.4176197052002,5.50921106338501,-9.29705619812012\n        ,25.0721836090088,5.14672422409058,-9.88245296478271,24.7685241699219,4.34585094451904,-10.1949939727783,24.4736366271973\n        ,3.25530242919922,-10.2092380523682,24.4950656890869,2.25282216072083,-10.2866735458374,24.5622482299805,2.40504479408264\n        ,-10.3208980560303,25.4584903717041,2.32878184318542,-10.2282390594482,26.8746757507324,2.19782257080078,-9.76998329162598\n        ,29.6250152587891,1.78370225429535,-8.92996597290039,33.1470336914063,1.12682414054871,-8.41434097290039,35.5315437316895\n        ,0.57951408624649,-8.01955699920654,36.6328430175781,0.68460077047348,-10.1855125427246,24.3762168884277,2.39254546165466\n        ,-4.88428688049316,27.5448017120361,6.62644290924072,-5.35536670684814,25.2809295654297,6.34503364562988,-2.41899251937866\n        ,31.5349407196045,4.39026832580566,-2.42222929000854,31.4518260955811,4.50084161758423,-2.70244908332825,30.6618022918701\n        ,5.13954162597656,-3.01469254493713,29.4937610626221,5.50692224502563,-3.18643069267273,28.6368103027344,5.63183641433716\n        ,-2.88213300704956,32.440502166748,4.80782842636108,-2.88537335395813,32.3740043640137,4.91404724121094,-3.25417995452881\n        ,31.2281646728516,5.60531949996948,-3.57900738716125,29.9968357086182,6.06741666793823,-3.84910750389099,29.0165786743164\n        ,6.32851791381836,-3.78587698936462,22.6147346496582,4.40958499908447,-4.40473413467407,23.2173252105713,5.3618688583374\n        ,-5.05243253707886,23.7748394012451,5.98046350479126,-5.15192556381226,23.9108238220215,6.03752183914185,-5.09901189804077\n        ,24.0283966064453,6.06259202957153,-4.98978471755981,24.8948726654053,6.22997379302979,-4.42884540557861,27.3927001953125\n        ,6.41243886947632,-3.99426865577698,29.0578422546387,6.27595472335815,-3.70775318145752,30.0652732849121,5.9921236038208\n        ,-3.36599230766296,31.2928047180176,5.52768707275391,-3.21600556373596,23.382287979126,3.66167640686035,-3.13256430625916\n        ,23.4489612579346,3.96262264251709,-2.60371732711792,26.5579433441162,3.99766564369202,-2.36950469017029,28.1366233825684\n        ,4.2071647644043,-2.27195620536804,28.888053894043,4.36787366867065,-2.10059666633606,29.8359222412109,4.44796895980835\n        ,-3.65240097045898,22.6352996826172,4.09371852874756,-3.45793771743774,22.3002586364746,3.45713114738464,-5.93335342407227\n        ,23.5488815307617,6.10497140884399,-3.43184065818787,31.3598518371582,5.57760047912598,-3.32914447784424,31.375696182251\n        ,5.48063993453979,-3.22046899795532,31.3329010009766,5.47011470794678,-2.69772386550903,30.7720069885254,4.98422145843506\n        ,-2.19492959976196,30.0498847961426,4.42499971389771,-8.23526859283447,35.5774803161621,4.07809209823608,-7.92610263824463\n        ,36.6413269042969,3.91050696372986,-8.87887573242188,32.999683380127,1.01147544384003,-8.57392024993896,32.4365539550781\n        ,-0.315257996320724,-8.39839649200439,32.313835144043,-0.395357549190521,-7.97919321060181,35.5220642089844,-0.356160432100296\n        ,-7.86904096603394,35.527904510498,-0.407945513725281,-1.97695231437683,29.7982711791992,3.62867569923401,-1.983323097229\n        ,29.7955074310303,3.76431751251221,-7.58679962158203,37.4158172607422,1.93770897388458,-7.68300867080688,37.3115768432617\n        ,1.93738102912903,-8.13943958282471,36.6269798278809,1.88212752342224,-8.5756254196167,35.5532608032227,1.8499995470047\n        ,-7.59529972076416,37.4961585998535,2.80867648124695,-7.67323303222656,37.3749008178711,2.84015107154846,-8.04368209838867\n        ,36.6341552734375,2.89631700515747,-8.44843769073486,35.5653686523438,2.96404600143433,-7.65189218521118,37.476619720459\n        ,0.7927166223526,-7.81682682037354,37.3234367370605,0.713629484176636,-7.95430898666382,36.6380043029785,0.543556153774261\n        ,-9.06007099151611,33.3199729919434,2.17655181884766,-8.49046039581299,34.5470542907715,4.30356645584106,-8.2700252532959\n        ,34.4476547241211,4.76078844070435,-8.10432147979736,34.3945121765137,4.835862159729,-10.2321319580078,26.9309692382813\n        ,2.76746225357056,-9.23867607116699,32.4755554199219,2.36720180511475,-9.01028919219971,33.5867919921875,3.4520092010498\n        ,-10.8878717422485,26.9042167663574,2.97664642333984,-11.0122699737549,26.9303855895996,3.1198832988739,-11.033429145813\n        ,26.9423446655273,3.3592324256897,-11.1435317993164,27.0207023620605,3.98125410079956,-11.048360824585,27.2650470733643\n        ,4.51753187179565,-10.8523368835449,27.507209777832,5.0268440246582,-10.5490579605103,27.7487545013428,5.500075340271\n        ,-10.4028263092041,27.7594146728516,5.7024450302124,-10.1423120498657,27.7449855804443,5.73791122436523,-6.21765995025635\n        ,31.8104839324951,6.43567132949829,-6.20972585678101,31.6967830657959,6.77317142486572,-6.41693687438965,30.1916389465332\n        ,6.91217041015625,-6.4039478302002,30.032678604126,6.60236120223999,-6.44509267807007,29.9831085205078,6.92495393753052\n        ,-6.80701875686646,27.7775402069092,6.78988933563232,-7.08851909637451,25.8666687011719,6.62717199325562,-7.16845560073853\n        ,25.0319118499756,6.39875030517578,-7.1069540977478,25.0596961975098,6.07496929168701,-7.04650259017944,25.1148319244385\n        ,5.67837047576904,-10.8846216201782,19.2333583831787,2.99382495880127,-10.8735446929932,18.8200950622559,3.42978501319885\n        ,-10.8541011810303,18.3279361724854,2.93692708015442,-10.8832063674927,18.8148536682129,2.53401899337769,-10.5200786590576\n        ,17.9692115783691,4.34590482711792,-10.4846277236938,17.3935279846191,3.72583603858948,-9.73058032989502,17.2792644500732\n        ,5.04154920578003,-8.62687110900879,16.9248275756836,5.41275405883789,-10.3979377746582,18.2120380401611,4.33148908615112\n        ,-10.7226848602295,19.0455799102783,3.37352299690247,-9.62259387969971,17.5917854309082,5.03659582138062,-8.54744338989258\n        ,17.1974773406982,5.40801620483398,-10.830249786377,19.4356498718262,2.91760802268982,-10.7492761611938,19.799617767334\n        ,2.88753604888916,-10.7113447189331,19.2958393096924,3.12222003936768,-10.6793050765991,19.3370323181152,3.71836709976196\n        ,-10.3031015396118,18.9596462249756,4.79261493682861,-9.37976932525635,18.4917240142822,5.57988595962524,-8.29885768890381\n        ,18.1507701873779,5.97931909561157,-10.5200023651123,20.1408176422119,4.01744413375854,-10.1408576965332,19.8712902069092\n        ,5.0645899772644,-9.1905345916748,19.5542163848877,5.89608812332153,-8.09999942779541,19.2621593475342,6.31005191802979\n        ,-10.6673736572266,20.3554096221924,2.97603225708008,-10.6598329544067,19.6969032287598,2.0004780292511,-10.7596883773804\n        ,19.3268871307373,2.08992290496826,-10.4535999298096,21.4124336242676,3.39937400817871,-10.2665662765503,21.9323348999023\n        ,3.11421298980713,-10.0877733230591,22.2021808624268,3.65796494483948,-10.3209276199341,21.613899230957,3.94974088668823\n        ,-9.45490837097168,22.599365234375,4.69469785690308,-9.74240303039551,21.900821685791,5.07761812210083,-8.51956844329834\n        ,22.74631690979,5.46489000320435,-8.80372142791748,21.9650821685791,5.91362905502319,-7.38228607177734,22.6113510131836\n        ,5.85867595672607,-7.64917707443237,21.797420501709,6.33266592025757,-9.71762371063232,21.6514225006104,4.97159385681152\n        ,-10.2602586746216,21.3834095001221,3.80861616134644,-8.81839847564697,21.6574687957764,5.79326295852661,-7.70153617858887\n        ,21.4740352630615,6.20392799377441,-10.3768091201782,21.0263004302979,3.39235901832581,-10.5269012451172,20.9093341827393\n        ,3.0945188999176,-10.4725208282471,21.2443161010742,3.25417709350586,-10.3247337341309,21.2503776550293,3.48597979545593\n        ,-9.9367561340332,20.8117370605469,5.13730812072754,-10.357063293457,20.9667377471924,4.0233039855957,-9.07955837249756\n        ,20.6500606536865,5.98157691955566,-7.97893238067627,20.4087715148926,6.39955759048462,-10.3478708267212,21.2740516662598\n        ,2.29400300979614,-10.3102588653564,21.5990142822266,2.51279091835022,-10.6137924194336,20.0307559967041,2.17805695533752\n        ,-10.5380973815918,20.4603633880615,2.3185830116272,-10.4403657913208,20.9075145721436,2.34123802185059,-10.5755195617676\n        ,19.6662559509277,3.11494088172913,-4.94140100479126,17.8739280700684,4.00129222869873,-4.97612380981445,17.4636917114258\n        ,3.53536009788513,-5.33359622955322,17.0651969909668,3.87273693084717,-5.26266002655029,17.5366821289063,4.38091611862183\n        ,-6.29105854034424,16.4343070983887,4.43670701980591,-6.21092700958252,16.9835529327393,5.07637119293213,-7.39537382125854\n        ,16.3496284484863,4.7204909324646,-7.39244985580444,16.7444496154785,5.43789577484131,-6.20721101760864,17.2534675598145\n        ,5.04187917709351,-5.27760076522827,17.8000946044922,4.29654598236084,-7.3501033782959,17.071985244751,5.42181491851807\n        ,-5.03394889831543,18.2387256622314,4.07053804397583,-4.78293418884277,18.4348983764648,3.89891910552979,-4.87793016433716\n        ,18.0741367340088,3.92661571502686,-5.10237407684326,18.0128650665283,4.07302713394165,-6.11509895324707,18.0017032623291\n        ,5.50254487991333,-5.29883909225464,18.1063289642334,4.63043785095215,-7.23719167709351,17.9726581573486,5.96456384658813\n        ,-5.95145320892334,18.9130210876465,5.77475690841675,-5.18693590164185,18.920955657959,4.92147922515869,-7.04634428024292\n        ,19.0347785949707,6.28103971481323,-4.6217041015625,18.9564056396484,4.13157510757446,-4.62470102310181,18.3164520263672\n        ,3.02352404594421,-4.7248101234436,17.9464931488037,3.11292791366577,-4.51037693023682,20.0530071258545,4.40684223175049\n        ,-4.71004295349121,20.3304882049561,4.90087223052979,-4.56726694107056,20.9394416809082,4.59377288818359,-4.35948419570923\n        ,20.5811710357666,4.11555480957031,-5.43325090408325,20.9151668548584,5.8080849647522,-5.26133918762207,21.6401462554932\n        ,5.40557098388672,-6.46559047698975,21.430269241333,6.30997800827026,-6.23515176773071,22.2238006591797,5.85213756561279\n        ,-5.52689790725708,20.6928539276123,5.68198585510254,-4.81517601013184,20.1379241943359,4.73164081573486,-6.54590797424316\n        ,21.1376686096191,6.1784839630127,-4.5201358795166,19.8827934265137,4.26319885253906,-4.56601285934448,19.5458679199219\n        ,4.10498094558716,-4.73723888397217,19.736328125,4.3483510017395,-4.71576499938965,19.9674053192139,4.4367880821228\n        ,-4.97689390182495,19.7361011505127,4.93532705307007,-5.74875497817993,19.8537902832031,5.84723806381226,-6.81026935577393\n        ,20.1309928894043,6.36625528335571,-4.31273984909058,19.8936004638672,3.31704807281494,-4.27538108825684,20.218620300293\n        ,3.53579592704773,-4.57782793045044,18.6501159667969,3.20124411582947,-4.50393390655518,19.0801334381104,3.34146690368652\n        ,-4.40440893173218,19.5268745422363,3.36442470550537,-10.8431606292725,18.7861003875732,2.44014716148376,-10.8136606216431\n        ,18.3081283569336,2.83754062652588,-10.4479379653931,17.3849391937256,3.61761784553528,-10.7177801132202,19.3129863739014\n        ,1.98497116565704,-10.6137723922729,19.7006969451904,1.89566814899445,-10.0405826568604,22.2164440155029,3.56492018699646\n        ,-10.2168340682983,21.952543258667,3.02945613861084,-9.41473770141602,22.6083793640137,4.58975505828857,-8.49272918701172\n        ,22.7543716430664,5.34907007217407,-7.37042284011841,22.621467590332,5.80231285095215,-10.2635154724121,21.6095638275146\n        ,2.41238903999329,-10.303807258606,21.2677593231201,2.18731999397278,-10.4946060180664,20.4584579467773,2.21803116798401\n        ,-10.568359375,20.0347576141357,2.07991313934326,-10.3974113464355,20.8989925384521,2.24075198173523,-5.01321506500244\n        ,17.4525814056396,3.42841100692749,-6.31224870681763,16.4389591217041,4.31868124008179,-7.50874900817871,16.3715438842773\n        ,4.59366989135742,-4.75371122360229,17.9487895965576,2.99597120285034,-4.64967203140259,18.3364906311035,2.90667319297791\n        ,-4.38688993453979,20.619026184082,4.01771926879883,-4.5924391746521,20.9702587127686,4.48846530914307,-5.2790470123291\n        ,21.6623973846436,5.2908182144165,-6.23852682113647,22.2387561798096,5.73119115829468,-4.29944610595703,20.2453670501709\n        ,3.42338895797729,-4.3397068977356,19.9035568237305,3.19832611083984,-4.6042652130127,18.6705570220947,3.09091997146606\n        ,-4.53046989440918,19.0942478179932,3.22904109954834,-4.43331813812256,19.5347919464111,3.25175809860229,-7.14405488967896\n        ,23.9239101409912,5.65244483947754,-7.72733306884766,24.1056079864502,5.47485208511353,-6.49145746231079,23.8214664459229\n        ,5.74526596069336,-6.57458209991455,23.7810745239258,5.88676261901855,-7.17207098007202,23.8744888305664,5.79700756072998\n        ,-6.33581447601318,22.3091201782227,5.86684417724609,-7.37212753295898,22.6595153808594,5.87273836135864,-8.39966011047363\n        ,22.7811946868896,5.51699161529541,-7.70609426498413,24.041223526001,5.63918304443359,-10.4553146362305,20.3231563568115\n        ,3.23345708847046,-4.8855938911438,18.9875259399414,4.20944452285767,-12.9825353622437,10.6990766525269,0.844066858291626\n        ,-9.8389253616333,9.49735069274902,3.17830562591553,-11.0604057312012,9.69466495513916,2.83606219291687,-12.2783145904541\n        ,10.1694393157959,2.32021045684814,-11.1309700012207,17.2452526092529,2.54634737968445,-6.70162296295166,9.45798778533936\n        ,2.01733946800232,-6.35541391372681,13.8766040802002,2.74241423606873,-10.977728843689,15.8941841125488,3.68716859817505\n        ,-10.7990818023682,16.9118976593018,3.76513743400574,-10.4266233444214,17.058614730835,3.71678614616394,-6.86694240570068\n        ,15.0654487609863,4.30618381500244,-6.77264976501465,16.0406074523926,4.2553129196167,-6.98142719268799,16.3520584106445\n        ,4.27755880355835,-7.20883512496948,14.8501043319702,4.19879293441772,-7.98394060134888,14.8931560516357,4.27120780944824\n        ,-7.44306898117065,13.9275770187378,4.12924718856812,-8.74346828460693,12.9331617355347,3.70751571655273,-9.87979412078857\n        ,12.9458312988281,3.54778790473938,-9.63815402984619,11.1837491989136,3.82065033912659,-10.0478620529175,13.1829557418823\n        ,3.4830207824707,-9.99559593200684,15.3371992111206,3.90790176391602,-10.7288208007813,15.5589847564697,3.66854119300842\n        ,-10.4732303619385,16.7847728729248,4.27841186523438,-10.7414121627808,16.6679668426514,3.98403811454773,-10.7801752090454\n        ,16.2029762268066,4.13446187973022,-10.5451440811157,16.0811061859131,4.50478982925415,-10.8121566772461,15.845027923584\n        ,3.79723620414734,-10.5918312072754,15.5369853973389,3.99283981323242,-9.8531322479248,16.5995903015137,4.68393802642822\n        ,-10.0126037597656,15.9286870956421,4.81835794448853,-9.79456615447998,16.833423614502,4.26952695846558,-10.0595607757568\n        ,15.3670091629028,4.39897203445435,-9.90972423553467,15.9085750579834,4.89311122894287,-9.76378726959229,16.6339874267578\n        ,4.74866676330566,-9.63790130615234,16.8885154724121,4.3174467086792,-10.073974609375,13.2618465423584,3.8615391254425\n        ,-10.0949974060059,13.3742513656616,4.06807279586792,-9.93121242523193,13.1100921630859,3.85573220252991,-9.93566513061523\n        ,13.3040990829468,4.16085386276245,-8.04547023773193,16.2815895080566,5.02835702896118,-7.9120717048645,16.4583759307861\n        ,4.65794610977173,-8.78007221221924,13.1069211959839,4.28314590454102,-8.10359859466553,15.5371837615967,5.12908601760864\n        ,-8.78834533691406,12.9926528930664,4.06723880767822,-7.94412708282471,16.2080841064453,4.99466705322266,-8.15055847167969\n        ,14.9756393432617,4.70975494384766,-7.21701669692993,16.1169757843018,4.808424949646,-6.93839693069458,15.8880319595337\n        ,4.60305595397949,-7.13570690155029,15.0910511016846,4.39565181732178,-7.50561809539795,14.9041223526001,4.49521207809448\n        ,-7.49339818954468,15.455249786377,5.00152015686035,-7.12892198562622,15.4541702270508,4.72877597808838,-11.960880279541\n        ,8.69771385192871,-0.577697277069092,-11.5644798278809,8.31119823455811,0.719232320785522,-9.98414611816406,7.77302694320679\n        ,2.08830571174622,-7.71604347229004,7.88915014266968,0.612167298793793,-7.12976217269897,8.13741683959961,-0.166500449180603\n        ,-5.55260038375854,13.8195657730103,2.01810598373413,-8.30417728424072,14.0667724609375,4.03354072570801,-8.42895317077637\n        ,14.1100664138794,4.42929649353027,-8.49184799194336,14.1423807144165,4.64357471466064,-9.92403411865234,14.4718418121338\n        ,4.48916864395142,-10.0594902038574,14.4750490188599,4.39139747619629,-10.0653839111328,14.5165367126465,4.18185234069824\n        ,-10.0170516967773,14.4528198242188,3.73347544670105,-10.6282987594604,14.4023456573486,3.52199649810791,-11.1519660949707\n        ,14.6864976882935,3.16790533065796,-6.0496187210083,16.210147857666,3.62929964065552,-5.52847290039063,16.432502746582\n        ,2.72674059867859,-5.1138014793396,16.7278308868408,1.33719766139984,-4.04904317855835,20.0559196472168,2.61531281471252\n        ,-2.9605450630188,24.8765544891357,1.97136247158051,-8.53282833099365,25.5782012939453,-0.167569786310196,-7.2937650680542\n        ,25.4874401092529,-1.2387101650238,-6.69637012481689,20.8182544708252,-0.437250256538391,-6.78883934020996,19.5983657836914\n        ,-0.931529581546783,-7.79493093490601,21.0932102203369,-0.550122499465942,-8.24923992156982,19.919095993042,-0.793532073497772\n        ,-9.85042095184326,21.1344356536865,1.4140750169754,-6.34611320495605,30.1234512329102,-2.03741860389709,-3.00656962394714\n        ,29.5073680877686,-1.64515149593353,-7.61297512054443,30.4295654296875,-1.03620731830597,-6.9022479057312,23.9386539459229\n        ,-0.779977381229401,-7.73476505279541,24.0522499084473,-0.513817012310028,-8.55404090881348,24.098482131958,-0.00429400010034442\n        ,-6.07827711105347,23.7995223999023,-0.819948017597198,-9.09116077423096,24.1179275512695,0.669364988803864,-8.82097244262695\n        ,21.1544666290283,-0.0337934046983719,-10.2090940475464,19.7163257598877,1.54994201660156,-4.55348634719849,20.4048652648926\n        ,0.333448827266693,-3.93064165115356,20.2453536987305,1.51111578941345,-9.47872734069824,19.8350925445557,-0.205843016505241\n        ,-4.6202917098999,19.166784286499,0.233948364853859,-4.28858947753906,18.9484272003174,1.52898347377777,-11.0581102371216\n        ,15.5564050674438,-2.05969452857971,-9.50326728820801,15.4665489196777,-3.09563803672791,-7.92887163162231,15.1350746154785\n        ,-3.01180362701416,-11.6202058792114,11.8649482727051,-3.26003575325012,-11.0205383300781,9.33058452606201,-3.03233504295349\n        ,-9.53904724121094,9.11799430847168,-3.27702498435974,-11.9436025619507,10.5540609359741,-3.18816900253296,-10.7425470352173\n        ,18.7471675872803,1.2680721282959,-8.49007797241211,11.4475383758545,-3.97062849998474,-5.36550998687744,17.0619297027588\n        ,3.7610821723938,-5.16892051696777,17.7754745483398,0.453923910856247,-5.31424140930176,17.0466690063477,0.200038015842438\n        ,-7.15298080444336,18.741907119751,-1.61566770076752,-7.37722444534302,17.8142032623291,-2.12625551223755,-9.97894859313965\n        ,18.9974765777588,-0.436901986598969,-10.341685295105,18.2764854431152,-0.9609055519104,-8.89304828643799,18.1247253417969\n        ,-2.02328205108643,-8.64704895019531,19.093147277832,-1.49808049201965,-13.1437149047852,9.83644771575928,-0.0898819267749786\n        ,-7.65170097351074,8.7472505569458,-2.73987889289856,-8.46947383880615,10.3621530532837,-4.15896272659302,-8.62954139709473\n        ,8.94725894927979,-3.22196006774902,-12.451057434082,9.42442798614502,1.84179270267487,-11.1691188812256,9.07114124298096\n        ,2.62692499160767,-9.90255355834961,8.8194408416748,2.72341012954712,-7.16649913787842,8.72556114196777,1.34422612190247\n        ,-5.3003306388855,17.4527645111084,2.83650398254395,-3.26730012893677,23.4545974731445,1.46349477767944,-8.75578308105469\n        ,16.6359462738037,4.55581665039063,-9.19984149932861,23.223331451416,0.919034540653229,-8.06709289550781,23.1356105804443\n        ,-0.251145720481873,-7.29653930664063,23.1012573242188,-0.328930914402008,-6.29547739028931,23.0096740722656,-0.55564147233963\n        ,-4.18616390228271,22.5705108642578,0.401069700717926,-3.58845591545105,22.4750595092773,1.47205495834351,-5.47275114059448\n        ,14.6036062240601,-0.850140690803528,-6.11708164215088,10.841118812561,-1.87295246124268,-6.24943923950195,9.87539100646973\n        ,-2.08078861236572,-7.33695316314697,8.59652614593506,-1.79107713699341,-5.08327388763428,17.59348487854,1.47210896015167\n        ,-4.16270542144775,20.8470230102539,2.31506681442261,-3.93086719512939,21.1655197143555,1.51504921913147,-4.44866847991943\n        ,21.3714351654053,0.426523655653,-6.53822183609009,21.7981338500977,-0.452313303947449,-7.59814071655273,22.0085067749023\n        ,-0.446690887212753,-8.50289535522461,22.029935836792,-0.0925770252943039,-9.50238704681396,22.0265922546387,1.2452974319458\n        ,-9.9237585067749,22.0253047943115,1.93845045566559,-10.0915231704712,22.1119232177734,2.2798593044281,-4.96741628646851\n        ,14.2409353256226,0.383612722158432,-5.56505680084229,10.3705987930298,-0.355221420526505,-5.70119285583496,9.17764377593994\n        ,-0.628493666648865,-12.0434112548828,15.1893663406372,1.87365484237671,-13.1068925857544,11.2270574569702,-0.273940622806549\n        ,-13.0960330963135,10.077766418457,-0.766599833965302,-11.8764390945435,9.0099458694458,-1.23530924320221,-11.2157173156738\n        ,17.9049034118652,1.06689035892487,-12.2845411300659,15.3625402450562,0.230948716402054,-8.41444396972656,9.42227172851563\n        ,2.86235332489014,-8.31547164916992,8.57957553863525,2.64106416702271,-8.73727798461914,7.74562072753906,1.61132657527924\n        ,-4.36162328720093,19.290943145752,2.58747148513794,-4.14960670471191,19.6016788482666,1.52699172496796,-4.56807804107666\n        ,19.7895317077637,0.255820155143738,-6.74493312835693,20.2061576843262,-0.660114347934723,-8.02211284637451,20.5025787353516\n        ,-0.674666404724121,-9.1498498916626,20.4374542236328,-0.119818203151226,-10.0297594070435,20.4253807067871,1.48200845718384\n        ,-4.66221380233765,18.1281929016113,2.47184419631958,-8.2876443862915,11.0393209457397,3.44339275360107,-6.68867588043213\n        ,11.1985206604004,2.32214212417603,-5.47720193862915,11.5189723968506,-0.246140405535698,-5.84426736831665,11.9166507720947\n        ,-1.67456555366516,-8.32313919067383,12.6680364608765,-3.58693480491638,-9.90711784362793,12.8571147918701,-3.5450963973999\n        ,-11.3485116958618,13.0391597747803,-2.74964785575867,-12.8485689163208,12.8292036056519,-0.356148988008499,-12.7300281524658\n        ,12.3465728759766,1.19345235824585,-11.7639751434326,11.9589366912842,2.69383668899536,-10.679515838623,11.5935859680176\n        ,3.43924808502197,-8.73316478729248,13.1642179489136,4.12282800674438,-9.32520866394043,12.4223680496216,3.61370396614075\n        ,-8.1046724319458,12.4125928878784,3.56111311912537,-8.73285865783691,13.2765378952026,4.34218788146973,-9.93310737609863\n        ,13.5609140396118,4.23305797576904,-10.0881977081299,13.585015296936,4.12997817993164,-10.072416305542,13.4894390106201\n        ,3.91964173316956,-4.44678640365601,18.7491111755371,2.5683581829071,-1.67838835716248,30.9184226989746,3.30307817459106\n        ,-1.89689028263092,29.7673435211182,3.16651940345764,-1.48467254638672,30.6766414642334,-0.48382967710495,-1.7151745557785\n        ,29.5061206817627,-0.388914227485657,-6.41028499603271,31.5402603149414,-2.31122922897339,-6.5544581413269,30.2641086578369\n        ,-2.10232305526733,-3.24189710617065,29.6542873382568,-1.98031175136566,-3.03120398521423,30.9302921295166,-2.10327386856079\n        ,-7.3973708152771,31.8299655914307,-1.48837494850159,-4.9675407409668,29.930456161499,-2.2727963924408,-4.79024934768677\n        ,31.2233638763428,-2.47925400733948,-9.770339012146,25.5654220581055,1.26073324680328,-9.85008811950684,24.02073097229\n        ,1.29150104522705,-9.17105197906494,25.6180114746094,0.238064646720886,-2.88398265838623,23.4223175048828,1.98747265338898\n        ,-2.61478137969971,24.807092666626,2.1091001033783,-2.56298756599426,24.7260589599609,1.49513530731201,-5.90561532974243\n        ,25.2055416107178,-1.69911050796509,-7.58888959884644,25.4344844818115,-1.33208465576172,-7.79577255249023,23.9981422424316\n        ,-0.78133100271225,-6.14341640472412,23.8105087280273,-1.14786982536316,-8.66501331329346,25.5624618530273,-0.423734158277512\n        ,-8.7342700958252,24.0813789367676,-0.242949396371841,-9.33136463165283,24.1186485290527,0.482575416564941,-8.29786491394043\n        ,32.2326049804688,-0.562160134315491,-8.68968200683594,30.9222812652588,-0.11330646276474,-7.68600034713745,30.5278968811035\n        ,-1.28661370277405,-2.92589402198792,23.4454593658447,1.46366250514984,-9.41505527496338,25.5495491027832,1.24658966064453\n        ,-4.78476047515869,29.7980289459229,-1.9929701089859,-5.70963573455811,25.2698745727539,-1.25907444953918,-4.05296611785889\n        ,24.9229850769043,-1.07812261581421,-1.94002258777618,29.5671463012695,2.09152460098267,-1.39111661911011,29.5243148803711\n        ,1.60391390323639,-1.16515398025513,30.6779403686523,1.79934179782867,-1.99050807952881,29.5482559204102,0.0322921723127365\n        ,-3.18263959884644,24.8409614562988,0.259835541248322,-3.07358360290527,24.7372646331787,-0.0272905211895704,-3.43370652198792\n        ,23.3883876800537,-0.0178845003247261,-3.67771339416504,23.4529304504395,0.146148890256882,-7.45057773590088,25.4977970123291\n        ,-1.47797501087189,-8.73250484466553,25.5885562896729,-0.433179765939713,-3.90392780303955,24.9208126068115,-1.19340264797211\n        ,-2.86472368240356,24.7657909393311,-0.011822797358036,-1.67441141605377,29.4105987548828,0.0618886798620224,-1.62392604351044\n        ,29.4356174468994,2.00085210800171,-1.67769014835358,29.4277153015137,-0.223505362868309,-2.7168333530426,29.4735317230225\n        ,-1.74457061290741,-6.49990940093994,30.0751152038574,-2.27876472473145,-7.80963659286499,30.3906288146973,-1.30389845371246\n        ,-6.38909339904785,30.0582504272461,-2.29767990112305,-4.85936498641968,29.7197151184082,-2.37516093254089,-4.67512845993042\n        ,29.6648483276367,-2.31193327903748,-2.94767832756042,29.4246482849121,-1.96411395072937,-7.28996992111206,25.404899597168\n        ,-1.47658205032349,-5.74078607559204,25.2103366851807,-1.61829805374146,-2.64102792739868,24.8287105560303,1.95682787895203\n        ,-2.86312246322632,24.7931175231934,0.245301082730293,-8.79531478881836,30.7474327087402,-0.181498900055885,-9.689621925354\n        ,25.6373138427734,1.0596616268158,-8.80739498138428,25.5922794342041,-0.354497760534287,-7.88753986358643,30.4436473846436\n        ,-1.22313511371613,-4.01765489578247,24.8804779052734,-1.40720963478088,-5.62358236312866,25.1768970489502,-1.58816146850586\n        ,-7.27921152114868,7.94315719604492,1.11295449733734,-8.45061302185059,7.78688621520996,2.35225319862366,-9.98027992248535\n        ,7.93115139007568,2.6541576385498,-11.047269821167,8.17732429504395,2.32532548904419,-12.2088813781738,8.54818725585938\n        ,1.43931353092194,-12.7967157363892,8.97920799255371,-0.303374022245407,-12.7254018783569,9.27799606323242,-1.02359855175018\n        ,-11.641375541687,9.70815277099609,-3.30064821243286,-8.47558498382568,9.39766216278076,-3.92700147628784,-6.57959508895874\n        ,8.94561100006104,-2.03293538093567,-6.16128015518188,8.42148208618164,-0.628806829452515,-5.90454864501953,11.2130336761475\n        ,1.26543307304382,-5.86439990997314,9.76661205291748,1.05129361152649,-6.4172043800354,8.82000827789307,0.554828345775604\n        ,-6.70876121520996,8.10266876220703,0.363239943981171,-11.5861968994141,9.22538471221924,-2.12491774559021,-12.200852394104\n        ,9.57963943481445,-2.46441507339478,-12.4662971496582,10.3750247955322,-2.37286257743835,-12.2984609603882,11.5450801849365\n        ,-1.93835651874542,-12.0142498016357,12.9365711212158,-1.61892592906952,-11.8456659317017,15.5341367721558,-1.05990767478943\n        ,-10.8601474761963,18.0437698364258,0.00694957328960299,-10.4829511642456,18.8434734344482,0.322913497686386,-9.9399585723877\n        ,19.8044834136963,0.532618045806885,-9.69186401367188,20.4600238800049,0.586481034755707,-9.4355001449585,21.1805152893066\n        ,0.577586591243744,-9.07950115203857,22.0507411956787,0.495223522186279,-8.69851875305176,23.1948986053467,0.245849296450615\n        ,-10.6943483352661,7.97740316390991,1.57557725906372,-13.0784387588501,3.61403799057007,-0.387950003147125,-12.8692493438721\n        ,4.23402261734009,-1.01961994171143,-13.2165336608887,2.53907871246338,-1.87767601013184,-13.5263395309448,2.08693170547485\n        ,-1.34906196594238,-12.6889476776123,3.79180359840393,-3.03223824501038,-12.6107130050659,5.16541290283203,-1.5162969827652\n        ,-7.36189794540405,2.22572088241577,-0.511403024196625,-7.24243593215942,1.49262166023254,-1.1971937417984,-7.38548421859741\n        ,2.73870873451233,-0.895566046237946,-10.3434047698975,5.47505474090576,1.90369594097137,-9.15979862213135,5.06887292861938\n        ,1.77098703384399,-10.1975927352905,6.29252099990845,1.84975600242615,-12.2415580749512,5.60246610641479,0.202421009540558\n        ,-12.090048789978,5.80620241165161,-0.00566900009289384,-12.0125188827515,5.61300611495972,-2.9149649143219,-12.4945268630981\n        ,5.89366149902344,-1.5122481584549,-12.288122177124,8.53469848632813,-0.661285996437073,-10.0408840179443,7.49992418289185\n        ,2.37230896949768,-10.8403167724609,7.73344993591309,1.77250003814697,-11.8306217193604,8.09218406677246,0.793708145618439\n        ,-12.4908933639526,4.76606798171997,0.651835978031158,-11.4628305435181,5.29583501815796,1.38202595710754,-11.2533559799194\n        ,6.22149276733398,1.20992994308472,-7.73828792572021,4.31135606765747,-0.0834570005536079,-7.36683702468872,5.3244800567627\n        ,-0.599408984184265,-7.6968674659729,5.50474500656128,0.0933770015835762,-8.26981353759766,3.98673677444458,1.2019350528717\n        ,-7.79680776596069,2.94683361053467,0.581601023674011,-7.7964768409729,3.48446178436279,0.153815001249313,-7.51640558242798\n        ,2.0345447063446,0.0756840035319328,-7.43048810958862,0.782142877578735,-0.238389015197754,-7.2607421875,0.956801772117615\n        ,-0.765235006809235,-6.80239152908325,7.91194725036621,-0.18758200109005,-7.47235488891602,7.62311172485352,0.697570025920868\n        ,-7.10959148406982,5.24039697647095,-1.22375595569611,-7.15163803100586,2.74867963790894,-1.48444199562073,-13.5382461547852\n        ,1.32446682453156,-2.14271998405457,-13.7687711715698,1.20945179462433,-1.80898201465607,-13.7865257263184,0.619542837142944\n        ,-1.92636489868164,-13.8336715698242,0.692019820213318,-1.84797203540802,-13.275411605835,1.67556774616241,-2.74921131134033\n        ,-7.40010452270508,0.384649813175201,-0.667990982532501,-7.50181102752686,0.383126795291901,-0.246661990880966,-7.4935622215271\n        ,0.295691817998886,-0.348820000886917,-12.5759296417236,3.31683683395386,-0.301581025123596,-13.0212831497192,1.85254681110382\n        ,-1.13734900951386,-12.1232957839966,3.64946269989014,-2.99026703834534,-9.45137023925781,4.73715019226074,1.26457500457764\n        ,-10.3113994598389,5.03661108016968,1.32882297039032,-11.0880308151245,4.88765811920166,1.00634694099426,-8.09423446655273\n        ,1.9600578546524,-0.0253519993275404,-7.59573745727539,2.73560667037964,-1.80734515190125,-7.79568910598755,1.32014381885529\n        ,-1.33666396141052,-8.01313209533691,0.81684684753418,-0.335142999887466,-13.0765466690063,0.547282814979553,-1.87284886837006\n        ,-13.2974462509155,1.06627893447876,-1.44371700286865,-13.384578704834,0.557447791099548,-1.44182395935059,-13.3176727294922\n        ,0.441362798213959,-1.55895602703094,-12.6973543167114,1.59488666057587,-2.65003705024719,-7.99213790893555,0.389781802892685\n        ,-0.759375989437103,-8.08319854736328,0.458545804023743,-0.323071002960205,-8.32713985443115,2.78943872451782,0.408313006162643\n        ,-11.4524984359741,5.48662090301514,-2.54562592506409,-11.9944133758545,4.41262006759644,0.512112021446228,-8.72068881988525\n        ,3.83208870887756,0.878419995307922,-7.89028644561768,4.91850280761719,-1.55553901195526,-8.07210922241211,0.331777811050415\n        ,-0.469390988349915,-13.578953742981,0.723118782043457,-2.18435406684875,-7.49672365188599,7.75520133972168,0.68902975320816\n        ,-6.83512830734253,8.03997993469238,-0.185473844408989,-7.51865577697754,7.76859617233276,0.681343555450439,-7.49779415130615\n        ,7.75494289398193,0.689776122570038,-10.035210609436,7.63272142410278,2.3439085483551,-10.8281936645508,7.86738109588623\n        ,1.75704264640808,-11.800537109375,8.24606800079346,0.791858673095703,-12.2553968429565,8.65648651123047,-0.652927100658417\n        ,-11.0982122421265,8.02239799499512,-3.42560195922852,-9.46175289154053,7.83151817321777,-3.76968502998352,-9.53649520874023\n        ,9.05328750610352,-3.69054698944092,-11.2665252685547,9.25102138519287,-3.36247611045837,-7.74278497695923,7.43448352813721\n        ,-2.94955992698669,-7.38186693191528,8.56259822845459,-3.01850891113281,-9.60508728027344,6.65043973922729,-3.84368181228638\n        ,-11.0673961639404,6.79414558410645,-3.49132299423218,-10.9090061187744,5.57353115081787,-3.57667922973633,-9.63772296905518\n        ,5.45862197875977,-3.88288307189941,-8.27865886688232,4.78107595443726,-0.436830013990402,-8.41143703460693,5.26224374771118\n        ,-3.16524219512939,-8.09701728820801,6.30043649673462,-3.07590699195862,-8.33622741699219,4.25156307220459,-0.654892027378082\n        ,-8.56227493286133,4.79242277145386,-0.544656991958618,-8.30243015289307,5.03695392608643,-2.40793538093567,-7.96504688262939\n        ,4.61126375198364,-2.47431945800781,-10.6739253997803,5.43777275085449,-3.33545923233032,-9.72132396697998,5.32747507095337\n        ,-3.48603796958923,-8.81702327728271,5.16764783859253,-2.94468188285828,-12.6551265716553,-1.1994891166687,-3.36292910575867\n        ,-12.6812009811401,-1.81898605823517,-3.45780301094055,-12.3639993667603,-1.8203901052475,-4.15120506286621,-12.3217802047729\n        ,-0.63344419002533,-4.16046380996704,-12.2639923095703,-0.401669174432755,8.50428581237793,-12.5707387924194,0.20113180577755\n        ,8.32594203948975,-10.8718614578247,0.0163587927818298,8.17275428771973,-10.9237976074219,-0.546308159828186,8.32784652709961\n        ,-14.7877540588379,-1.05375719070435,2.97234511375427,-14.9249362945557,-0.975921213626862,3.67831110954285,-14.9135770797729\n        ,-1.4562371969223,3.6388852596283,-14.836766242981,-1.48871624469757,3.06584906578064,-14.3331708908081,-1.00264811515808\n        ,1.14896094799042,-14.330602645874,-1.48213016986847,1.29319405555725,-13.8479719161987,-1.26087915897369,0.0456670001149178\n        ,-13.8695812225342,-0.733412146568298,0.03099500015378,-13.1961078643799,-0.682488203048706,-1.74533605575562,-13.2561845779419\n        ,-0.267994195222855,-1.52676200866699,-11.4108591079712,-0.704488158226013,-1.43015098571777,-12.3429641723633,-1.29646420478821\n        ,0.430689007043839,-11.3169937133789,-0.633855223655701,-5.43679094314575,-11.3333263397217,0.324207812547684,-5.34990787506104\n        ,-12.2897281646729,0.29148280620575,-4.15824413299561,-8.32677936553955,0.285849809646606,-4.91607284545898,-8.31762981414795\n        ,-0.635810136795044,-4.98647403717041,-7.6367335319519,-0.634946227073669,-3.36898493766785,-7.64520740509033,0.290466815233231\n        ,-3.37043809890747,-8.45136737823486,-0.397370189428329,-0.0700289979577065,-8.27342128753662,-0.602357149124146,-0.857776939868927\n        ,-8.65068626403809,-1.2792421579361,1.60765111446381,-8.70820045471191,-0.889460206031799,1.7451479434967,-8.64849853515625\n        ,-1.00339412689209,3.05018901824951,-8.62150001525879,-1.4825621843338,3.14198398590088,-9.57847595214844,-0.684286117553711\n        ,7.05243635177612,-9.74707221984863,-1.13764321804047,7.29845905303955,-9.13314819335938,-0.710844159126282,4.47330093383789\n        ,-8.91466617584229,-0.682887196540833,2.9658670425415,-8.77879047393799,-0.749664187431335,3.01093411445618,-8.95795822143555\n        ,-0.772237181663513,4.49947786331177,-8.83813381195068,-1.01499819755554,2.99324297904968,-8.99276161193848,-1.04494822025299\n        ,4.47025680541992,-9.83040523529053,-0.401700139045715,6.98186683654785,-9.82599067687988,-0.687571167945862,6.98602962493896\n        ,-10.9493865966797,-0.0893782079219818,7.89767122268677,-10.8741941452026,0.094377800822258,7.85318899154663,-10.0532426834106\n        ,-0.354868203401566,6.91146230697632,-10.897255897522,0.103166803717613,7.72143602371216,-14.7188110351563,-0.979119181632996\n        ,3.75472784042358,-14.6068019866943,-1.05330717563629,3.03254795074463,-14.5829191207886,-0.793511152267456,3.01690411567688\n        ,-14.697904586792,-0.660182237625122,3.76196217536926,-13.7142362594604,-0.10202220082283,7.11313772201538,-14.6809797286987\n        ,-0.7016361951828,5.42782211303711,-14.631495475769,-0.364508181810379,5.4440450668335,-13.6660346984863,0.0949728041887283\n        ,7.06012010574341,-14.3699359893799,-0.789545178413391,3.0537269115448,-14.5029563903809,-0.657171249389648,3.8249819278717\n        ,-14.4187536239624,-0.348812192678452,5.51281881332397,-13.6329202651978,0.0565158165991306,6.87230396270752,-14.1662549972534\n        ,-0.738821148872375,1.21650302410126,-14.1754846572876,-1.00521314144135,1.21228504180908,-13.6872749328613,-0.738984107971191\n        ,0.0732659995555878,-13.7096109390259,-0.471031188964844,0.033585999161005,-14.035943031311,-0.733028173446655,1.27240085601807\n        ,-13.4088859558105,-0.425395220518112,0.0608309991657734,-13.2755498886108,-0.115318208932877,-1.12270414829254,-13.0557823181152\n        ,-0.0804621875286102,-1.07290995121002,-13.068621635437,-0.272237211465836,-1.50460398197174,-12.1045236587524,0.593280792236328\n        ,-4.14091396331787,-12.1193447113037,0.299488812685013,-4.08871221542358,-11.7931108474731,0.634377837181091,-4.0986008644104\n        ,-11.2735862731934,0.719097793102264,-5.15583181381226,-11.0836772918701,0.714048802852631,-4.91463613510132,-11.2509965896606\n        ,0.347086817026138,-5.14843416213989,-9.70920753479004,0.712418794631958,-4.88926315307617,-9.66789436340332,0.723107814788818\n        ,-5.11510419845581,-8.42803859710693,0.688478827476501,-4.66739702224731,-8.63442325592041,0.710941791534424,-4.48368692398071\n        ,-9.70443153381348,0.322440803050995,-5.12207412719727,-8.41786479949951,0.301627814769745,-4.63700103759766,-8.54096221923828\n        ,1.32825684547424,-4.59067678451538,-8.0074405670166,1.22241985797882,-3.54224491119385,-8.04832363128662,3.33798861503601\n        ,-3.17081809043884,-8.67496490478516,3.68233776092529,-4.08474493026733,-7.8871545791626,0.281323790550232,-3.40791130065918\n        ,-7.85482978820801,0.642930805683136,-3.39109182357788,-8.13710689544678,0.850011765956879,-0.800619006156921,-8.28289604187012\n        ,2.25278782844543,-0.764258027076721,-8.43003940582275,-0.157711207866669,-0.858825087547302,-8.32692623138428,0.194879800081253\n        ,-0.860629975795746,-8.52881240844727,1.08460581302643,1.5599889755249,-8.53865146636963,1.25685679912567,0.95725691318512\n        ,-8.5357666015625,1.04977083206177,0.68256801366806,-8.56322479248047,0.566658794879913,1.55015695095062,-8.61183166503906\n        ,-0.425197243690491,-0.065311998128891,-8.89294719696045,-0.911311149597168,1.74111795425415,-8.79252433776855,-0.633555173873901\n        ,1.78056597709656,-8.5108757019043,-0.101994186639786,0.000698000018019229,-12.351466178894,0.262531816959381,7.76197957992554\n        ,-12.4312696456909,0.319948792457581,7.95019292831421,-12.4569158554077,0.0845468044281006,8.01053619384766,-13.8941841125488\n        ,0.467521786689758,3.5477340221405,-14.2799406051636,0.0541978180408478,3.53433966636658,-14.2880802154541,0.228603810071945\n        ,3.23221206665039,-13.9849233627319,0.619996786117554,3.28688502311707,-13.6181030273438,0.60854184627533,6.72478246688843\n        ,-14.4104146957397,0.390134811401367,5.51559019088745,-14.0933837890625,0.810905814170837,5.57533311843872,-13.5700387954712\n        ,0.956074774265289,6.39302587509155,-13.8625802993774,0.872631728649139,1.93436586856842,-13.1583271026611,1.43147194385529\n        ,2.3733389377594,-13.2172756195068,0.964958786964417,2.69189310073853,-13.7842702865601,0.587464809417725,2.18322610855103\n        ,-12.4318504333496,2.01933884620667,2.85682392120361,-12.5068588256836,1.38099682331085,3.19997715950012,-10.8144855499268\n        ,1.08549284934998,7.2902398109436,-12.2734613418579,1.22508585453033,7.33208894729614,-12.0701723098755,1.55995881557465\n        ,6.43063402175903,-10.6623516082764,1.37352383136749,6.64068698883057,-10.2347812652588,1.02646374702454,6.79868507385254\n        ,-9.9075870513916,0.466396808624268,6.90527582168579,-10.8436546325684,0.709422826766968,7.58692121505737,-9.14296531677246\n        ,0.764719843864441,4.57133388519287,-8.77550888061523,0.210297808051109,4.60690784454346,-9.33541011810303,1.13661181926727\n        ,5.08978414535522,-9.58052635192871,1.00581681728363,4.8911828994751,-9.13905906677246,1.31009376049042,4.46836519241333\n        ,-8.60823631286621,2.43657970428467,1.41375398635864,-9.29010486602783,2.85858273506165,1.81270503997803,-9.71137714385986\n        ,1.92487692832947,4.1512770652771,-10.0960521697998,3.6826000213623,1.92870700359344,-10.3535137176514,2.31923270225525\n        ,3.88383197784424,-11.0846672058105,3.66235661506653,1.6281658411026,-11.884204864502,3.3869047164917,1.2024530172348\n        ,-11.4515314102173,2.37581968307495,3.49674892425537,-12.5265493392944,2.84761667251587,0.686360001564026,-9.78671073913574\n        ,1.51062774658203,5.43640899658203,-10.3746118545532,1.4129958152771,4.93102598190308,-11.4895238876343,1.64424395561218\n        ,3.8477509021759,-12.6008195877075,2.62157368659973,-1.41014099121094,-12.6772747039795,2.34999775886536,-1.6421799659729\n        ,-11.6258430480957,3.59273362159729,-3.56614398956299,-11.6031827926636,3.99701476097107,-3.46526503562927,-12.4911642074585\n        ,2.62973380088806,-1.39286494255066,-11.5037336349487,4.0191216468811,-3.41252398490906,-11.6477117538452,4.7365288734436\n        ,-2.9123420715332,-10.6752662658691,5.05888700485229,-3.54006409645081,-10.7329788208008,4.73007202148438,-4.00870704650879\n        ,-10.6857452392578,4.2472767829895,-3.93189001083374,-9.69830322265625,4.9626088142395,-3.85036325454712,-8.79135131835938\n        ,4.77585315704346,-3.6133337020874,-9.78085136413574,4.31696367263794,-4.04107522964478,-8.89351463317871,4.26686573028564\n        ,-3.65700674057007,-8.9768648147583,4.52922391891479,-3.72932100296021,-9.71503639221191,4.64414882659912,-4.14905595779419\n        ,-8.40865230560303,3.99431371688843,-2.67772603034973,-8.20167064666748,4.30993890762329,-2.70235347747803,-8.29178237915039\n        ,3.96888780593872,-2.69999694824219,-8.25935554504395,3.6027410030365,-2.96513390541077,-8.38647270202637,2.6651337146759\n        ,-0.669996023178101,-10.858624458313,3.8950297832489,-4.24050617218018,-10.7416467666626,4.23215389251709,-4.03672790527344\n        ,-8.85915946960449,4.25843381881714,-3.7103579044342,-8.82767200469971,3.88678979873657,-3.7574679851532,-12.3203287124634\n        ,0.834373831748962,7.62035703659058,-9.93011093139648,3.94925880432129,-4.2280740737915,-9.87972068786621,4.26634979248047\n        ,-4.15164184570313,-12.9109563827515,2.17576670646667,-0.0332330018281937,-14.0064544677734,0.482846796512604,4.31903982162476\n        ,-14.3811511993408,0.0602388046681881,4.10731220245361,-13.4566841125488,0.878975749015808,4.61020994186401,-13.403115272522\n        ,1.2346738576889,5.79850912094116,-11.8692226409912,1.38857781887054,5.39097785949707,-10.4531908035278,1.27224385738373\n        ,5.82744979858398,-9.69781684875488,0.861148834228516,6.06470108032227,-9.44259929656982,0.973586857318878,5.75430202484131\n        ,-9.40438365936279,-0.639721155166626,5.52785587310791,-9.22590160369873,-0.697531223297119,5.58653020858765,-9.23768520355225\n        ,-0.931419134140015,5.58402299880981,-9.00774478912354,-0.931771218776703,5.6596360206604,-9.0374927520752,-1.4571191072464\n        ,5.59735012054443,-9.46249103546143,-1.257688164711,6.91396951675415,-13.292179107666,-1.68793714046478,5.62558317184448\n        ,-13.1693201065063,-1.85254228115082,4.26037883758545,-8.5069637298584,2.64702773094177,-0.68382602930069,-9.65490818023682\n        ,0.303108811378479,-5.39795684814453,-9.64590740203857,-0.636101245880127,-5.46976900100708,-13.3323211669922,0.870737791061401\n        ,0.106257990002632,-13.1983003616333,1.25750684738159,0.129934996366501,-14.1630382537842,0.0562498010694981,1.75165700912476\n        ,-11.8925170898438,1.22653579711914,-4.12294006347656,-11.7359161376953,3.29843640327454,-3.70321798324585,-12.968563079834\n        ,0.846431851387024,-1.85224604606628,-11.1305932998657,1.33086395263672,-5.03836584091187,-10.9273080825806,3.65749144554138\n        ,-4.48123788833618,-9.87257671356201,1.327556848526,-5.05620718002319,-9.91583061218262,3.76873588562012,-4.53192090988159\n        ,-8.98668956756592,-0.574045181274414,1.79792904853821,-8.65672206878662,-0.0279552042484283,-0.0313559994101524,-8.17943000793457\n        ,0.660911798477173,-3.50347018241882,-8.47450065612793,0.253890812397003,-0.846231997013092,-14.9321527481079,-0.684710144996643\n        ,5.33120679855347,-14.0031642913818,-0.023091197013855,7.31090211868286,-8.79455852508545,-1.03195118904114,4.34719085693359\n        ,-8.28165912628174,-0.135623186826706,-0.846274018287659,-9.4740161895752,0.293323814868927,6.17530202865601,-13.4723253250122\n        ,0.37716081738472,0.10164900124073,-8.48273468017578,0.658774793148041,0.337684005498886,-10.9609279632568,-1.51077425479889\n        ,7.06002187728882,-10.3187446594238,1.55065274238586,4.2269082069397,-9.59263896942139,3.9511775970459,-4.19415378570557\n        ,-9.63356876373291,4.28190660476685,-4.09221982955933,-13.0830707550049,1.09166383743286,4.85074090957642,-9.5009822845459\n        ,3.79010367393494,-4.45402717590332,-9.49314403533936,1.32746577262878,-4.98887491226196,-9.63443660736084,-1.82345807552338\n        ,-5.55305099487305,-9.14707946777344,-1.8240339756012,-5.37717390060425,-9.14474105834961,-1.13805913925171,-5.32897996902466\n        ,-10.1296558380127,-1.30436015129089,1.09980797767639,-9.15706825256348,-0.688938140869141,-1.10642194747925,-9.71644687652588\n        ,-0.692696213722229,-1.20543694496155,-11.7091445922852,-1.29876112937927,0.632021009922028,-10.6817436218262,-0.69933021068573\n        ,-1.29824805259705,-7.84287738800049,-1.89942610263824,-2.52330207824707,-8.77875328063965,-1.89924108982086,-2.67817401885986\n        ,-9.01303195953369,-1.89940023422241,-1.40217304229736,-8.07610702514648,-1.89954710006714,-1.25296998023987,-10.542236328125\n        ,-1.89899623394012,-2.25901699066162,-10.6337862014771,-1.89908516407013,-1.68281614780426,-9.75798606872559,-1.89925706386566\n        ,-1.52582097053528,-9.58230209350586,-1.8990843296051,-2.78612995147705,-8.86343860626221,-1.17721211910248,-2.69335007667542\n        ,-7.78657960891724,-1.1398001909256,-2.53283405303955,-9.17301654815674,-1.17705416679382,-3.33671307563782,-9.17317295074463\n        ,-1.82107496261597,-3.33675527572632,-10.0160961151123,-1.82078611850739,-4.27497577667236,-10.0307245254517,-1.17681121826172\n        ,-4.27237892150879,-8.3118782043457,-1.82325625419617,-5.07190084457397,-7.62548351287842,-1.82155406475067,-3.3740599155426\n        ,-8.46506309509277,-1.13791620731354,-5.08362579345703,-8.46026515960693,-1.82274115085602,-5.12706708908081,-11.4767608642578\n        ,-1.1769061088562,-3.52011871337891,-10.9006538391113,-1.23844015598297,-2.66865038871765,-11.4770784378052,-1.82114708423615\n        ,-3.52008390426636,-9.84247589111328,-1.1772221326828,-3.25193810462952,-9.96317100524902,-1.8214031457901,-3.27331566810608\n        ,-10.9190912246704,-1.82132935523987,-2.74039530754089,-10.428861618042,-1.1769951581955,-4.06018114089966,-10.4610366821289\n        ,-1.82123816013336,-4.06565284729004,-9.48378562927246,-1.17734205722809,-2.86669707298279,-10.6097259521484,-1.23897421360016\n        ,-2.20649099349976,-12.8990774154663,-1.20657515525818,-2.6168200969696,-13.1171998977661,-1.82286524772644,-2.07190489768982\n        ,-11.3591508865356,-1.82394111156464,-1.71986413002014,-11.2742357254028,-1.23886716365814,-2.35520100593567,-11.2741947174072\n        ,-1.82093739509583,-2.35528588294983,-11.9274044036865,-1.17659318447113,-3.287513256073,-11.9275131225586,-1.82061421871185\n        ,-3.28761601448059,-12.8821115493774,-1.82100307941437,-2.7364559173584,-11.2960643768311,-1.82078015804291,-5.52506399154663\n        ,-10.5416698455811,-1.17897522449493,-4.52999687194824,-10.5710735321045,-1.82089614868164,-4.57293176651001,-11.9882869720459\n        ,-1.82064211368561,-3.82067108154297,-11.9701585769653,-1.17954611778259,-3.78295111656189,-13.7229709625244,-1.85246515274048\n        ,4.07452917098999,-13.9891834259033,-1.68774104118347,5.40032720565796,-13.3896598815918,-1.89254415035248,2.17091298103333\n        ,-13.7069931030273,-1.89270734786987,3.45311307907104,-11.6803979873657,-1.17183661460876,6.71803712844849,-10.9550170898438\n        ,-1.17081785202026,6.93465709686279,-10.0661144256592,-1.52309918403625,3.26630568504334,-10.6154489517212,-1.52297914028168\n        ,3.08849000930786,-10.1624965667725,-1.52329015731812,4.62233781814575,-10.7236423492432,-1.30241513252258,6.45850467681885\n        ,-10.2997093200684,-1.48579919338226,5.18572616577148,-10.8345613479614,-1.48584806919098,5.01272392272949,-11.3562002182007\n        ,-1.30212819576263,6.27257680892944,-10.0881805419922,-1.51421213150024,2.65602207183838,-10.8880701065063,-1.30171120166779\n        ,0.885369002819061,-13.4678926467896,-1.15898716449738,6.16615104675293,-13.9943208694458,-1.15951919555664,5.99605989456177\n        ,-13.3655796051025,-1.30129718780518,5.60819101333618,-13.8941955566406,-1.30118119716644,5.4372501373291,-13.5430736541748\n        ,-1.52252817153931,3.4598650932312,-12.7836818695068,-1.5225031375885,2.36680197715759,-13.270396232605,-1.52238821983337\n        ,2.19731903076172,-12.9867782592773,-1.51305818557739,1.67463314533234,-10.7792692184448,-1.52316725254059,4.49874496459961\n        ,-13.0751523971558,-1.52264511585236,3.7069079875946,-13.1476764678955,-1.49484920501709,4.1362509727478,-10.7174825668335\n        ,-1.52064311504364,2.52428197860718,-12.4709463119507,-1.5205591917038,1.93447399139404,-13.6438522338867,-1.49474310874939\n        ,3.9940299987793,-12.8745965957642,-0.650946140289307,8.4034481048584,-13.9453248977661,-0.722079157829285,7.74784088134766\n        ,-13.9156303405762,-0.485151201486588,7.62993192672729,-12.8607053756714,-0.398309201002121,8.34536361694336,-13.4607906341553\n        ,-1.44669365882874,6.27358388900757,-11.708643913269,-1.46391832828522,6.78241014480591,-10.7793197631836,-1.82315039634705\n        ,4.49869823455811,-13.0701332092285,-1.82262897491455,3.70686101913452,-12.7837543487549,-1.82248628139496,2.36675405502319\n        ,-10.6154985427856,-1.82296216487885,3.08844399452209,-10.7160301208496,-1.82060623168945,2.52090001106262,-12.4723234176636\n        ,-1.8205281496048,1.93119895458221,-11.8795261383057,-1.81423282623291,1.03212344646454,-10.8229579925537,-1.80831921100616\n        ,1.30289947986603,-11.3640203475952,-1.61824405193329,6.26081991195679,-10.8520259857178,-1.78294909000397,5.05374383926392\n        ,-9.80314826965332,-1.43848013877869,7.41763782501221,-10.9754028320313,-0.861802220344543,8.42994117736816,-12.2961120605469\n        ,-0.648356199264526,8.61242866516113,-8.65401077270508,-1.82298004627228,3.72613310813904,-8.86539459228516,-1.82339334487915\n        ,5.04450702667236,-8.8872184753418,-1.48762512207031,5.0599570274353,-8.66806697845459,-1.48891818523407,3.69247674942017\n        ,-10.1625461578369,-1.82327306270599,4.62229013442993,-10.0661649703979,-1.82308197021484,3.26626110076904,-10.0813932418823\n        ,-1.82114517688751,2.65210604667664,-10.0750875473022,-1.81434404850006,1.47501397132874,-8.62293529510498,-1.80442404747009\n        ,2.03740906715393,-8.63533592224121,-1.81966722011566,3.12709999084473,-9.42062568664551,-1.61854815483093,6.85899353027344\n        ,-9.02965927124023,-1.78175115585327,5.64660120010376,-10.7314548492432,-1.61851632595062,6.44674682617188,-10.3171739578247\n        ,-1.78289532661438,5.22674703598022,-14.3864679336548,-0.906111121177673,7.10352420806885,-14.9273662567139,-1.45178020000458\n        ,5.79180288314819,-14.9044742584229,-1.14286315441132,5.70820713043213,-14.3360147476196,-0.648855209350586,7.0174560546875\n        ,-14.0326690673828,-1.44597220420837,6.05647897720337,-15.0419406890869,-1.61634719371796,5.06266784667969,-14.8922185897827\n        ,-1.7823361158371,3.67723703384399,-15.0164432525635,-1.25586915016174,5.13094186782837,-14.8399982452393,-1.82216322422028\n        ,3.04614806175232,-14.5743312835693,-1.8219473361969,1.77490186691284,-14.5593872070313,-1.48710322380066,1.7604968547821\n        ,-13.992299079895,-1.81486225128174,0.45016798377037,-14.2750339508057,-1.8190780878067,1.25383996963501,-12.6187791824341\n        ,-1.81137526035309,0.900829017162323,-13.035008430481,-1.82034909725189,1.6709531545639,-14.0747489929199,0.169742807745934\n        ,2.96360206604004,-14.34694480896,-0.806760251522064,2.41914296150208,-14.0129976272583,0.0151758203282952,1.98685896396637\n        ,-13.2320461273193,0.995352864265442,3.41252398490906,-13.8183240890503,0.575311779975891,3.10841703414917,-11.7101907730103\n        ,1.42806780338287,4.60914897918701,-12.8916282653809,1.14636778831482,4.1383581161499,-11.7699680328369,1.73828685283661\n        ,4.85970020294189,-9.52198696136475,1.08574879169464,4.41844892501831,-13.3160743713379,0.899752855300903,3.86537027359009\n        ,-13.3713436126709,1.15496385097504,4.15981292724609,-13.8948783874512,0.679575800895691,3.84310698509216,-12.9768419265747\n        ,1.39769685268402,4.42352294921875,-9.23659324645996,0.350918799638748,5.31175899505615,-9.15367317199707,0.277039796113968\n        ,5.81538581848145,-9.48372840881348,0.930315792560577,5.38133716583252,-14.5383815765381,-0.811367094516754,2.29166293144226\n        ,-14.5298585891724,-1.02179610729218,2.27179598808289,-14.6525802612305,-1.08479416370392,2.15895390510559,-13.2846403121948\n        ,1.05016481876373,3.67264294624329,-13.2940397262573,0.677316784858704,-0.52591997385025,-13.2968921661377,1.02870881557465\n        ,-0.218290001153946,-13.3114624023438,1.28549885749817,0.0937940031290054,-9.78981685638428,3.95010662078857,-4.1819109916687\n        ,-9.70335102081299,1.32425081729889,-4.92063999176025,-9.75296592712402,3.74058198928833,-4.40943193435669,-13.1841850280762\n        ,0.992721796035767,-0.190662994980812,-8.36301803588867,0.635875821113586,0.348857998847961,-8.41664695739746,1.24883985519409\n        ,0.968972980976105,-8.41362190246582,1.04680180549622,0.699701011180878,-7.68235921859741,-1.1401481628418,-3.09662795066834\n        ,-7.67167282104492,-1.82158994674683,-3.12445998191834,-13.410304069519,0.684789776802063,-0.563890993595123,-8.49754047393799\n        ,8.82586765289307,-3.57137799263,-8.56192398071289,7.63300037384033,-3.55192399024963,-8.88008213043213,6.491539478302\n        ,-3.68741536140442,-8.98423480987549,5.36043310165405,-3.71636414527893,-9.18995761871338,5.24069166183472,-3.38439154624939\n        ,-9.29192543029785,4.87892913818359,-3.74415731430054,-9.34595108032227,4.58668661117554,-3.93918871879578,-9.5681037902832\n        ,4.3049521446228,-3.94899106025696,-12.3848676681519,6.678795337677,-1.08676695823669,-12.0569562911987,6.41276931762695\n        ,0.186367496848106,-10.1192378997803,6.89622259140015,2.11103248596191,-7.58461141586304,6.56392812728882,0.395473510026932\n        ,-7.08461380004883,6.61821365356445,-0.39349552989006,-11.2925672531128,9.14094638824463,-3.39495158195496,-9.52544784545898\n        ,8.93857860565186,-3.73352289199829,-8.47273540496826,8.70798873901367,-3.6010115146637,-7.35740089416504,8.44426250457764\n        ,-3.02813529968262,-11.0158061981201,7.09106349945068,1.53347992897034,-11.9018383026123,7.38752317428589,0.497046887874603\n        ,-12.3512144088745,7.81623363494873,-0.921400249004364,-12.3507328033447,4.70240497589111,-2.97360157966614,-8.2618465423584\n        ,4.38370370864868,-1.30719125270844,-8.53772068023682,4.85830402374268,-1.03485834598541,-8.34664154052734,4.26936388015747\n        ,-1.26588129997253,-8.46986484527588,3.1554388999939,-1.43624365329742,-8.34628105163574,3.21852278709412,-1.53164660930634\n        ,-8.2733736038208,2.7988555431366,-1.6545318365097,-8.17590713500977,2.74774932861328,-1.86189317703247,-8.07227325439453\n        ,1.03621578216553,-2.17143201828003,-8.3486795425415,0.427448570728302,-1.97930431365967,-8.09087753295898,0.418905317783356\n        ,-2.12586092948914,-8.15859699249268,0.0618062913417816,-2.13336801528931,-7.8818793296814,0.132020547986031,-2.43179988861084\n        ,-7.8618049621582,-0.623425841331482,-2.48126220703125,-7.97514820098877,2.84113550186157,-0.698743879795074,-7.91939783096313\n        ,1.88133490085602,-0.698509812355042,-7.37556505203247,4.11418771743774,-0.738027811050415,-7.12800025939941,4.14944124221802\n        ,-1.3378928899765,-7.79018020629883,4.17661905288696,-1.64111828804016,-6.94105863571167,8.39327621459961,-1.99834716320038\n        ,-6.91890287399292,8.2821159362793,-2.00474405288696,-7.22366333007813,7.12326192855835,-1.87451314926147,-7.480544090271\n        ,5.81974315643311,-2.27981424331665,-7.95554208755493,5.07282066345215,-2.32199144363403,-12.2233734130859,8.90837287902832\n        ,-1.41941320896149,-12.2676200866699,8.78210067749023,-1.39806830883026,-12.2785034179688,7.96867084503174,-1.64899885654449\n        ,-12.2156171798706,6.74982690811157,-1.95364665985107,-12.2535228729248,5.75333404541016,-2.21360635757446,-12.4807224273682\n        ,4.93390893936157,-2.24494934082031,-12.7721185684204,3.99579477310181,-2.10383653640747,-8.63093948364258,7.60015678405762\n        ,1.80671334266663,-8.62113475799561,7.46664953231812,1.82989954948425,-8.63788414001465,6.70167589187622,1.52909469604492\n        ,-8.69423484802246,5.93398475646973,1.25737953186035,-8.65503120422363,4.89050817489624,1.31877195835114,-8.62190437316895\n        ,4.41484546661377,1.42706036567688,-9.01820659637451,4.20061016082764,1.03565382957459,-11.8353872299194,6.78268384933472\n        ,-2.71999740600586,-11.9059467315674,8.04110717773438,-2.52659678459167,-11.954478263855,9.0095157623291,-2.44830703735352\n        ,-11.9236574172974,9.11659240722656,-2.40354752540588,13.0784387588501,3.61403799057007,-0.387950003147125,12.8692493438721\n        ,4.23402261734009,-1.01961994171143,13.2165336608887,2.53907871246338,-1.87767601013184,13.5263395309448,2.08693170547485\n        ,-1.34906196594238,12.6889476776123,3.79180359840393,-3.03223824501038,12.6107130050659,5.16541290283203,-1.5162969827652\n        ,7.36189794540405,2.22572088241577,-0.511403024196625,7.24243593215942,1.49262166023254,-1.1971937417984,7.38548421859741\n        ,2.73870873451233,-0.895566046237946,10.3434047698975,5.47505474090576,1.90369594097137,9.15979862213135,5.06887292861938\n        ,1.77098703384399,10.1975927352905,6.29252099990845,1.84975600242615,12.2415580749512,5.60246610641479,0.202421009540558\n        ,12.090048789978,5.80620241165161,-0.00566900009289384,12.0125188827515,5.61300611495972,-2.9149649143219,12.4945268630981\n        ,5.89366149902344,-1.5122481584549,12.288122177124,8.53469848632813,-0.661285996437073,10.0408840179443,7.49992418289185\n        ,2.37230896949768,10.8403167724609,7.73344993591309,1.77250003814697,11.8306217193604,8.09218406677246,0.793708145618439\n        ,12.4908933639526,4.76606798171997,0.651835978031158,11.4628305435181,5.29583501815796,1.38202595710754,11.2533559799194\n        ,6.22149276733398,1.20992994308472,7.73828792572021,4.31135606765747,-0.0834570005536079,7.36683702468872,5.3244800567627\n        ,-0.599408984184265,7.6968674659729,5.50474500656128,0.0933770015835762,8.26981353759766,3.98673677444458,1.2019350528717\n        ,7.79680776596069,2.94683361053467,0.581601023674011,7.7964768409729,3.48446178436279,0.153815001249313,7.51640558242798\n        ,2.0345447063446,0.0756840035319328,7.43048810958862,0.782142877578735,-0.238389015197754,7.2607421875,0.956801772117615\n        ,-0.765235006809235,6.80239152908325,7.91194725036621,-0.18758200109005,7.47235488891602,7.62311172485352,0.697570025920868\n        ,7.10959148406982,5.24039697647095,-1.22375595569611,7.15163803100586,2.74867963790894,-1.48444199562073,13.5382461547852\n        ,1.32446682453156,-2.14271998405457,13.7687711715698,1.20945179462433,-1.80898201465607,13.7865257263184,0.619542837142944\n        ,-1.92636489868164,13.8336715698242,0.692019820213318,-1.84797203540802,13.275411605835,1.67556774616241,-2.74921131134033\n        ,7.40010452270508,0.384649813175201,-0.667990982532501,7.50181102752686,0.383126795291901,-0.246661990880966,7.4935622215271\n        ,0.295691817998886,-0.348820000886917,12.5759296417236,3.31683683395386,-0.301581025123596,13.0212831497192,1.85254681110382\n        ,-1.13734900951386,12.1232957839966,3.64946269989014,-2.99026703834534,9.45137023925781,4.73715019226074,1.26457500457764\n        ,10.3113994598389,5.03661108016968,1.32882297039032,11.0880308151245,4.88765811920166,1.00634694099426,8.09423446655273\n        ,1.9600578546524,-0.0253519993275404,7.59573745727539,2.73560667037964,-1.80734515190125,7.79568910598755,1.32014381885529\n        ,-1.33666396141052,8.01313209533691,0.81684684753418,-0.335142999887466,13.0765466690063,0.547282814979553,-1.87284886837006\n        ,13.2974462509155,1.06627893447876,-1.44371700286865,13.384578704834,0.557447791099548,-1.44182395935059,13.3176727294922\n        ,0.441362798213959,-1.55895602703094,12.6973543167114,1.59488666057587,-2.65003705024719,7.99213790893555,0.389781802892685\n        ,-0.759375989437103,8.08319854736328,0.458545804023743,-0.323071002960205,8.32713985443115,2.78943872451782,0.408313006162643\n        ,11.4524984359741,5.48662090301514,-2.54562592506409,11.9944133758545,4.41262006759644,0.512112021446228,8.72068881988525\n        ,3.83208870887756,0.878419995307922,7.89028644561768,4.91850280761719,-1.55553901195526,8.07210922241211,0.331777811050415\n        ,-0.469390988349915,13.578953742981,0.723118782043457,-2.18435406684875,10.6943483352661,7.97740316390991,1.57557725906372\n        ,7.49672365188599,7.75520133972168,0.68902975320816,6.83512830734253,8.03997993469238,-0.185473844408989,7.51865577697754\n        ,7.76859617233276,0.681343555450439,7.49779415130615,7.75494289398193,0.689776122570038,10.035210609436,7.63272142410278\n        ,2.3439085483551,10.8281936645508,7.86738109588623,1.75704264640808,11.800537109375,8.24606800079346,0.791858673095703\n        ,12.2553968429565,8.65648651123047,-0.652927100658417,11.0982122421265,8.02239799499512,-3.42560195922852,9.46175289154053\n        ,7.83151817321777,-3.76968502998352,9.53649520874023,9.05328750610352,-3.69054698944092,11.2665252685547,9.25102138519287\n        ,-3.36247611045837,7.74278497695923,7.43448352813721,-2.94955992698669,7.38186693191528,8.56259822845459,-3.01850891113281\n        ,9.60508728027344,6.65043973922729,-3.84368181228638,11.0673961639404,6.79414558410645,-3.49132299423218,10.9090061187744\n        ,5.57353115081787,-3.57667922973633,9.63772296905518,5.45862197875977,-3.88288307189941,8.27865886688232,4.78107595443726\n        ,-0.436830013990402,8.41143703460693,5.26224374771118,-3.16524219512939,8.09701728820801,6.30043649673462,-3.07590699195862\n        ,8.33622741699219,4.25156307220459,-0.654892027378082,8.56227493286133,4.79242277145386,-0.544656991958618,8.30243015289307\n        ,5.03695392608643,-2.40793538093567,7.96504688262939,4.61126375198364,-2.47431945800781,10.6739253997803,5.43777275085449\n        ,-3.33545923233032,9.72132396697998,5.32747507095337,-3.48603796958923,8.81702327728271,5.16764783859253,-2.94468188285828\n        ,12.6551265716553,-1.1994891166687,-3.36292910575867,12.6812009811401,-1.81898605823517,-3.45780301094055,12.3639993667603\n        ,-1.8203901052475,-4.15120506286621,12.3217802047729,-0.63344419002533,-4.16046380996704,12.2639923095703,-0.401669174432755\n        ,8.50428581237793,12.5707387924194,0.20113180577755,8.32594203948975,10.8718614578247,0.0163587927818298,8.17275428771973\n        ,10.9237976074219,-0.546308159828186,8.32784652709961,14.7877540588379,-1.05375719070435,2.97234511375427,14.9249362945557\n        ,-0.975921213626862,3.67831110954285,14.9135770797729,-1.4562371969223,3.6388852596283,14.836766242981,-1.48871624469757\n        ,3.06584906578064,14.3331708908081,-1.00264811515808,1.14896094799042,14.330602645874,-1.48213016986847,1.29319405555725\n        ,13.8479719161987,-1.26087915897369,0.0456670001149178,13.8695812225342,-0.733412146568298,0.03099500015378,13.1961078643799\n        ,-0.682488203048706,-1.74533605575562,13.2561845779419,-0.267994195222855,-1.52676200866699,11.4108591079712,-0.704488158226013\n        ,-1.43015098571777,12.3429641723633,-1.29646420478821,0.430689007043839,11.3169937133789,-0.633855223655701,-5.43679094314575\n        ,11.3333263397217,0.324207812547684,-5.34990787506104,12.2897281646729,0.29148280620575,-4.15824413299561,8.32677936553955\n        ,0.285849809646606,-4.91607284545898,8.31762981414795,-0.635810136795044,-4.98647403717041,7.6367335319519,-0.634946227073669\n        ,-3.36898493766785,7.64520740509033,0.290466815233231,-3.37043809890747,8.45136737823486,-0.397370189428329,-0.0700289979577065\n        ,8.27342128753662,-0.602357149124146,-0.857776939868927,8.65068626403809,-1.2792421579361,1.60765111446381,8.70820045471191\n        ,-0.889460206031799,1.7451479434967,8.64849853515625,-1.00339412689209,3.05018901824951,8.62150001525879,-1.4825621843338\n        ,3.14198398590088,9.57847595214844,-0.684286117553711,7.05243635177612,9.74707221984863,-1.13764321804047,7.29845905303955\n        ,9.13314819335938,-0.710844159126282,4.47330093383789,8.91466617584229,-0.682887196540833,2.9658670425415,8.77879047393799\n        ,-0.749664187431335,3.01093411445618,8.95795822143555,-0.772237181663513,4.49947786331177,8.83813381195068,-1.01499819755554\n        ,2.99324297904968,8.99276161193848,-1.04494822025299,4.47025680541992,9.83040523529053,-0.401700139045715,6.98186683654785\n        ,9.82599067687988,-0.687571167945862,6.98602962493896,10.9493865966797,-0.0893782079219818,7.89767122268677,10.8741941452026\n        ,0.094377800822258,7.85318899154663,10.0532426834106,-0.354868203401566,6.91146230697632,10.897255897522,0.103166803717613\n        ,7.72143602371216,14.7188110351563,-0.979119181632996,3.75472784042358,14.6068019866943,-1.05330717563629,3.03254795074463\n        ,14.5829191207886,-0.793511152267456,3.01690411567688,14.697904586792,-0.660182237625122,3.76196217536926,13.7142362594604\n        ,-0.10202220082283,7.11313772201538,14.6809797286987,-0.7016361951828,5.42782211303711,14.631495475769,-0.364508181810379\n        ,5.4440450668335,13.6660346984863,0.0949728041887283,7.06012010574341,14.3699359893799,-0.789545178413391,3.0537269115448\n        ,14.5029563903809,-0.657171249389648,3.8249819278717,14.4187536239624,-0.348812192678452,5.51281881332397,13.6329202651978\n        ,0.0565158165991306,6.87230396270752,14.1662549972534,-0.738821148872375,1.21650302410126,14.1754846572876,-1.00521314144135\n        ,1.21228504180908,13.6872749328613,-0.738984107971191,0.0732659995555878,13.7096109390259,-0.471031188964844,0.033585999161005\n        ,14.035943031311,-0.733028173446655,1.27240085601807,13.4088859558105,-0.425395220518112,0.0608309991657734,13.2755498886108\n        ,-0.115318208932877,-1.12270414829254,13.0557823181152,-0.0804621875286102,-1.07290995121002,13.068621635437,-0.272237211465836\n        ,-1.50460398197174,12.1045236587524,0.593280792236328,-4.14091396331787,12.1193447113037,0.299488812685013,-4.08871221542358\n        ,11.7931108474731,0.634377837181091,-4.0986008644104,11.2735862731934,0.719097793102264,-5.15583181381226,11.0836772918701\n        ,0.714048802852631,-4.91463613510132,11.2509965896606,0.347086817026138,-5.14843416213989,9.70920753479004,0.712418794631958\n        ,-4.88926315307617,9.66789436340332,0.723107814788818,-5.11510419845581,8.42803859710693,0.688478827476501,-4.66739702224731\n        ,8.63442325592041,0.710941791534424,-4.48368692398071,9.70443153381348,0.322440803050995,-5.12207412719727,8.41786479949951\n        ,0.301627814769745,-4.63700103759766,8.54096221923828,1.32825684547424,-4.59067678451538,8.0074405670166,1.22241985797882\n        ,-3.54224491119385,8.04832363128662,3.33798861503601,-3.17081809043884,8.67496490478516,3.68233776092529,-4.08474493026733\n        ,7.8871545791626,0.281323790550232,-3.40791130065918,7.85482978820801,0.642930805683136,-3.39109182357788,8.13710689544678\n        ,0.850011765956879,-0.800619006156921,8.28289604187012,2.25278782844543,-0.764258027076721,8.43003940582275,-0.157711207866669\n        ,-0.858825087547302,8.32692623138428,0.194879800081253,-0.860629975795746,8.52881240844727,1.08460581302643,1.5599889755249\n        ,8.53865146636963,1.25685679912567,0.95725691318512,8.5357666015625,1.04977083206177,0.68256801366806,8.56322479248047\n        ,0.566658794879913,1.55015695095062,8.61183166503906,-0.425197243690491,-0.065311998128891,8.89294719696045,-0.911311149597168\n        ,1.74111795425415,8.79252433776855,-0.633555173873901,1.78056597709656,8.5108757019043,-0.101994186639786,0.000698000018019229\n        ,12.351466178894,0.262531816959381,7.76197957992554,12.4312696456909,0.319948792457581,7.95019292831421,12.4569158554077\n        ,0.0845468044281006,8.01053619384766,13.8941841125488,0.467521786689758,3.5477340221405,14.2799406051636,0.0541978180408478\n        ,3.53433966636658,14.2880802154541,0.228603810071945,3.23221206665039,13.9849233627319,0.619996786117554,3.28688502311707\n        ,13.6181030273438,0.60854184627533,6.72478246688843,14.4104146957397,0.390134811401367,5.51559019088745,14.0933837890625\n        ,0.810905814170837,5.57533311843872,13.5700387954712,0.956074774265289,6.39302587509155,13.8625802993774,0.872631728649139\n        ,1.93436586856842,13.1583271026611,1.43147194385529,2.3733389377594,13.2172756195068,0.964958786964417,2.69189310073853\n        ,13.7842702865601,0.587464809417725,2.18322610855103,12.4318504333496,2.01933884620667,2.85682392120361,12.5068588256836\n        ,1.38099682331085,3.19997715950012,10.8144855499268,1.08549284934998,7.2902398109436,12.2734613418579,1.22508585453033\n        ,7.33208894729614,12.0701723098755,1.55995881557465,6.43063402175903,10.6623516082764,1.37352383136749,6.64068698883057\n        ,10.2347812652588,1.02646374702454,6.79868507385254,9.9075870513916,0.466396808624268,6.90527582168579,10.8436546325684\n        ,0.709422826766968,7.58692121505737,9.14296531677246,0.764719843864441,4.57133388519287,8.77550888061523,0.210297808051109\n        ,4.60690784454346,9.33541011810303,1.13661181926727,5.08978414535522,9.58052635192871,1.00581681728363,4.8911828994751\n        ,9.13905906677246,1.31009376049042,4.46836519241333,8.60823631286621,2.43657970428467,1.41375398635864,9.29010486602783\n        ,2.85858273506165,1.81270503997803,9.71137714385986,1.92487692832947,4.1512770652771,10.0960521697998,3.6826000213623\n        ,1.92870700359344,10.3535137176514,2.31923270225525,3.88383197784424,11.0846672058105,3.66235661506653,1.6281658411026\n        ,11.884204864502,3.3869047164917,1.2024530172348,11.4515314102173,2.37581968307495,3.49674892425537,12.5265493392944\n        ,2.84761667251587,0.686360001564026,9.78671073913574,1.51062774658203,5.43640899658203,10.3746118545532,1.4129958152771\n        ,4.93102598190308,11.4895238876343,1.64424395561218,3.8477509021759,12.6008195877075,2.62157368659973,-1.41014099121094\n        ,12.6772747039795,2.34999775886536,-1.6421799659729,11.6258430480957,3.59273362159729,-3.56614398956299,11.6031827926636\n        ,3.99701476097107,-3.46526503562927,12.4911642074585,2.62973380088806,-1.39286494255066,11.5037336349487,4.0191216468811\n        ,-3.41252398490906,11.6477117538452,4.7365288734436,-2.9123420715332,10.6752662658691,5.05888700485229,-3.54006409645081\n        ,10.7329788208008,4.73007202148438,-4.00870704650879,10.6857452392578,4.2472767829895,-3.93189001083374,9.69830322265625\n        ,4.9626088142395,-3.85036325454712,8.79135131835938,4.77585315704346,-3.6133337020874,9.78085136413574,4.31696367263794\n        ,-4.04107522964478,8.89351463317871,4.26686573028564,-3.65700674057007,8.9768648147583,4.52922391891479,-3.72932100296021\n        ,9.71503639221191,4.64414882659912,-4.14905595779419,8.40865230560303,3.99431371688843,-2.67772603034973,8.20167064666748\n        ,4.30993890762329,-2.70235347747803,8.29178237915039,3.96888780593872,-2.69999694824219,8.25935554504395,3.6027410030365\n        ,-2.96513390541077,8.38647270202637,2.6651337146759,-0.669996023178101,10.858624458313,3.8950297832489,-4.24050617218018\n        ,10.7416467666626,4.23215389251709,-4.03672790527344,8.85915946960449,4.25843381881714,-3.7103579044342,8.82767200469971\n        ,3.88678979873657,-3.7574679851532,12.3203287124634,0.834373831748962,7.62035703659058,9.93011093139648,3.94925880432129\n        ,-4.2280740737915,9.87972068786621,4.26634979248047,-4.15164184570313,12.9109563827515,2.17576670646667,-0.0332330018281937\n        ,14.0064544677734,0.482846796512604,4.31903982162476,14.3811511993408,0.0602388046681881,4.10731220245361,13.4566841125488\n        ,0.878975749015808,4.61020994186401,13.403115272522,1.2346738576889,5.79850912094116,11.8692226409912,1.38857781887054\n        ,5.39097785949707,10.4531908035278,1.27224385738373,5.82744979858398,9.69781684875488,0.861148834228516,6.06470108032227\n        ,9.44259929656982,0.973586857318878,5.75430202484131,9.40438365936279,-0.639721155166626,5.52785587310791,9.22590160369873\n        ,-0.697531223297119,5.58653020858765,9.23768520355225,-0.931419134140015,5.58402299880981,9.00774478912354,-0.931771218776703\n        ,5.6596360206604,9.0374927520752,-1.4571191072464,5.59735012054443,9.46249103546143,-1.257688164711,6.91396951675415\n        ,13.292179107666,-1.68793714046478,5.62558317184448,13.1693201065063,-1.85254228115082,4.26037883758545,8.5069637298584\n        ,2.64702773094177,-0.68382602930069,9.65490818023682,0.303108811378479,-5.39795684814453,9.64590740203857,-0.636101245880127\n        ,-5.46976900100708,13.3323211669922,0.870737791061401,0.106257990002632,13.1983003616333,1.25750684738159,0.129934996366501\n        ,14.1630382537842,0.0562498010694981,1.75165700912476,11.8925170898438,1.22653579711914,-4.12294006347656,11.7359161376953\n        ,3.29843640327454,-3.70321798324585,12.968563079834,0.846431851387024,-1.85224604606628,11.1305932998657,1.33086395263672\n        ,-5.03836584091187,10.9273080825806,3.65749144554138,-4.48123788833618,9.87257671356201,1.327556848526,-5.05620718002319\n        ,9.91583061218262,3.76873588562012,-4.53192090988159,8.98668956756592,-0.574045181274414,1.79792904853821,8.65672206878662\n        ,-0.0279552042484283,-0.0313559994101524,8.17943000793457,0.660911798477173,-3.50347018241882,8.47450065612793,0.253890812397003\n        ,-0.846231997013092,14.9321527481079,-0.684710144996643,5.33120679855347,14.0031642913818,-0.023091197013855,7.31090211868286\n        ,8.79455852508545,-1.03195118904114,4.34719085693359,8.28165912628174,-0.135623186826706,-0.846274018287659,9.4740161895752\n        ,0.293323814868927,6.17530202865601,13.4723253250122,0.37716081738472,0.10164900124073,8.48273468017578,0.658774793148041\n        ,0.337684005498886,10.9609279632568,-1.51077425479889,7.06002187728882,10.3187446594238,1.55065274238586,4.2269082069397\n        ,9.59263896942139,3.9511775970459,-4.19415378570557,9.63356876373291,4.28190660476685,-4.09221982955933,13.0830707550049\n        ,1.09166383743286,4.85074090957642,9.5009822845459,3.79010367393494,-4.45402717590332,9.49314403533936,1.32746577262878\n        ,-4.98887491226196,9.63443660736084,-1.82345807552338,-5.55305099487305,9.14707946777344,-1.8240339756012,-5.37717390060425\n        ,9.14474105834961,-1.13805913925171,-5.32897996902466,10.1296558380127,-1.30436015129089,1.09980797767639,9.15706825256348\n        ,-0.688938140869141,-1.10642194747925,9.71644687652588,-0.692696213722229,-1.20543694496155,11.7091445922852,-1.29876112937927\n        ,0.632021009922028,10.6817436218262,-0.69933021068573,-1.29824805259705,7.84287738800049,-1.89942610263824,-2.52330207824707\n        ,8.77875328063965,-1.89924108982086,-2.67817401885986,9.01303195953369,-1.89940023422241,-1.40217304229736,8.07610702514648\n        ,-1.89954710006714,-1.25296998023987,10.542236328125,-1.89899623394012,-2.25901699066162,10.6337862014771,-1.89908516407013\n        ,-1.68281614780426,9.75798606872559,-1.89925706386566,-1.52582097053528,9.58230209350586,-1.8990843296051,-2.78612995147705\n        ,8.86343860626221,-1.17721211910248,-2.69335007667542,7.78657960891724,-1.1398001909256,-2.53283405303955,9.17301654815674\n        ,-1.17705416679382,-3.33671307563782,9.17317295074463,-1.82107496261597,-3.33675527572632,10.0160961151123,-1.82078611850739\n        ,-4.27497577667236,10.0307245254517,-1.17681121826172,-4.27237892150879,8.3118782043457,-1.82325625419617,-5.07190084457397\n        ,7.62548351287842,-1.82155406475067,-3.3740599155426,8.46506309509277,-1.13791620731354,-5.08362579345703,8.46026515960693\n        ,-1.82274115085602,-5.12706708908081,11.4767608642578,-1.1769061088562,-3.52011871337891,10.9006538391113,-1.23844015598297\n        ,-2.66865038871765,11.4770784378052,-1.82114708423615,-3.52008390426636,9.84247589111328,-1.1772221326828,-3.25193810462952\n        ,9.96317100524902,-1.8214031457901,-3.27331566810608,10.9190912246704,-1.82132935523987,-2.74039530754089,10.428861618042\n        ,-1.1769951581955,-4.06018114089966,10.4610366821289,-1.82123816013336,-4.06565284729004,9.48378562927246,-1.17734205722809\n        ,-2.86669707298279,10.6097259521484,-1.23897421360016,-2.20649099349976,12.8990774154663,-1.20657515525818,-2.6168200969696\n        ,13.1171998977661,-1.82286524772644,-2.07190489768982,11.3591508865356,-1.82394111156464,-1.71986413002014,11.2742357254028\n        ,-1.23886716365814,-2.35520100593567,11.2741947174072,-1.82093739509583,-2.35528588294983,11.9274044036865,-1.17659318447113\n        ,-3.287513256073,11.9275131225586,-1.82061421871185,-3.28761601448059,12.8821115493774,-1.82100307941437,-2.7364559173584\n        ,11.2960643768311,-1.82078015804291,-5.52506399154663,10.5416698455811,-1.17897522449493,-4.52999687194824,10.5710735321045\n        ,-1.82089614868164,-4.57293176651001,11.9882869720459,-1.82064211368561,-3.82067108154297,11.9701585769653,-1.17954611778259\n        ,-3.78295111656189,13.7229709625244,-1.85246515274048,4.07452917098999,13.9891834259033,-1.68774104118347,5.40032720565796\n        ,13.3896598815918,-1.89254415035248,2.17091298103333,13.7069931030273,-1.89270734786987,3.45311307907104,11.6803979873657\n        ,-1.17183661460876,6.71803712844849,10.9550170898438,-1.17081785202026,6.93465709686279,10.0661144256592,-1.52309918403625\n        ,3.26630568504334,10.6154489517212,-1.52297914028168,3.08849000930786,10.1624965667725,-1.52329015731812,4.62233781814575\n        ,10.7236423492432,-1.30241513252258,6.45850467681885,10.2997093200684,-1.48579919338226,5.18572616577148,10.8345613479614\n        ,-1.48584806919098,5.01272392272949,11.3562002182007,-1.30212819576263,6.27257680892944,10.0881805419922,-1.51421213150024\n        ,2.65602207183838,10.8880701065063,-1.30171120166779,0.885369002819061,13.4678926467896,-1.15898716449738,6.16615104675293\n        ,13.9943208694458,-1.15951919555664,5.99605989456177,13.3655796051025,-1.30129718780518,5.60819101333618,13.8941955566406\n        ,-1.30118119716644,5.4372501373291,13.5430736541748,-1.52252817153931,3.4598650932312,12.7836818695068,-1.5225031375885\n        ,2.36680197715759,13.270396232605,-1.52238821983337,2.19731903076172,12.9867782592773,-1.51305818557739,1.67463314533234\n        ,10.7792692184448,-1.52316725254059,4.49874496459961,13.0751523971558,-1.52264511585236,3.7069079875946,13.1476764678955\n        ,-1.49484920501709,4.1362509727478,10.7174825668335,-1.52064311504364,2.52428197860718,12.4709463119507,-1.5205591917038\n        ,1.93447399139404,13.6438522338867,-1.49474310874939,3.9940299987793,12.8745965957642,-0.650946140289307,8.4034481048584\n        ,13.9453248977661,-0.722079157829285,7.74784088134766,13.9156303405762,-0.485151201486588,7.62993192672729,12.8607053756714\n        ,-0.398309201002121,8.34536361694336,13.4607906341553,-1.44669365882874,6.27358388900757,11.708643913269,-1.46391832828522\n        ,6.78241014480591,10.7793197631836,-1.82315039634705,4.49869823455811,13.0701332092285,-1.82262897491455,3.70686101913452\n        ,12.7837543487549,-1.82248628139496,2.36675405502319,10.6154985427856,-1.82296216487885,3.08844399452209,10.7160301208496\n        ,-1.82060623168945,2.52090001106262,12.4723234176636,-1.8205281496048,1.93119895458221,11.8795261383057,-1.81423282623291\n        ,1.03212344646454,10.8229579925537,-1.80831921100616,1.30289947986603,11.3640203475952,-1.61824405193329,6.26081991195679\n        ,10.8520259857178,-1.78294909000397,5.05374383926392,9.80314826965332,-1.43848013877869,7.41763782501221,10.9754028320313\n        ,-0.861802220344543,8.42994117736816,12.2961120605469,-0.648356199264526,8.61242866516113,8.65401077270508,-1.82298004627228\n        ,3.72613310813904,8.86539459228516,-1.82339334487915,5.04450702667236,8.8872184753418,-1.48762512207031,5.0599570274353\n        ,8.66806697845459,-1.48891818523407,3.69247674942017,10.1625461578369,-1.82327306270599,4.62229013442993,10.0661649703979\n        ,-1.82308197021484,3.26626110076904,10.0813932418823,-1.82114517688751,2.65210604667664,10.0750875473022,-1.81434404850006\n        ,1.47501397132874,8.62293529510498,-1.80442404747009,2.03740906715393,8.63533592224121,-1.81966722011566,3.12709999084473\n        ,9.42062568664551,-1.61854815483093,6.85899353027344,9.02965927124023,-1.78175115585327,5.64660120010376,10.7314548492432\n        ,-1.61851632595062,6.44674682617188,10.3171739578247,-1.78289532661438,5.22674703598022,14.3864679336548,-0.906111121177673\n        ,7.10352420806885,14.9273662567139,-1.45178020000458,5.79180288314819,14.9044742584229,-1.14286315441132,5.70820713043213\n        ,14.3360147476196,-0.648855209350586,7.0174560546875,14.0326690673828,-1.44597220420837,6.05647897720337,15.0419406890869\n        ,-1.61634719371796,5.06266784667969,14.8922185897827,-1.7823361158371,3.67723703384399,15.0164432525635,-1.25586915016174\n        ,5.13094186782837,14.8399982452393,-1.82216322422028,3.04614806175232,14.5743312835693,-1.8219473361969,1.77490186691284\n        ,14.5593872070313,-1.48710322380066,1.7604968547821,13.992299079895,-1.81486225128174,0.45016798377037,14.2750339508057\n        ,-1.8190780878067,1.25383996963501,12.6187791824341,-1.81137526035309,0.900829017162323,13.035008430481,-1.82034909725189\n        ,1.6709531545639,14.0747489929199,0.169742807745934,2.96360206604004,14.34694480896,-0.806760251522064,2.41914296150208\n        ,14.0129976272583,0.0151758203282952,1.98685896396637,13.2320461273193,0.995352864265442,3.41252398490906,13.8183240890503\n        ,0.575311779975891,3.10841703414917,11.7101907730103,1.42806780338287,4.60914897918701,12.8916282653809,1.14636778831482\n        ,4.1383581161499,11.7699680328369,1.73828685283661,4.85970020294189,9.52198696136475,1.08574879169464,4.41844892501831\n        ,13.3160743713379,0.899752855300903,3.86537027359009,13.3713436126709,1.15496385097504,4.15981292724609,13.8948783874512\n        ,0.679575800895691,3.84310698509216,12.9768419265747,1.39769685268402,4.42352294921875,9.23659324645996,0.350918799638748\n        ,5.31175899505615,9.15367317199707,0.277039796113968,5.81538581848145,9.48372840881348,0.930315792560577,5.38133716583252\n        ,14.5383815765381,-0.811367094516754,2.29166293144226,14.5298585891724,-1.02179610729218,2.27179598808289,14.6525802612305\n        ,-1.08479416370392,2.15895390510559,13.2846403121948,1.05016481876373,3.67264294624329,13.2940397262573,0.677316784858704\n        ,-0.52591997385025,13.2968921661377,1.02870881557465,-0.218290001153946,13.3114624023438,1.28549885749817,0.0937940031290054\n        ,9.78981685638428,3.95010662078857,-4.1819109916687,9.70335102081299,1.32425081729889,-4.92063999176025,9.75296592712402\n        ,3.74058198928833,-4.40943193435669,13.1841850280762,0.992721796035767,-0.190662994980812,8.36301803588867,0.635875821113586\n        ,0.348857998847961,8.41664695739746,1.24883985519409,0.968972980976105,8.41362190246582,1.04680180549622,0.699701011180878\n        ,7.68235921859741,-1.1401481628418,-3.09662795066834,7.67167282104492,-1.82158994674683,-3.12445998191834,13.410304069519\n        ,0.684789776802063,-0.563890993595123,8.49754047393799,8.82586765289307,-3.57137799263,8.56192398071289,7.63300037384033\n        ,-3.55192399024963,8.88008213043213,6.491539478302,-3.68741536140442,8.98423480987549,5.36043310165405,-3.71636414527893\n        ,9.18995761871338,5.24069166183472,-3.38439154624939,9.29192543029785,4.87892913818359,-3.74415731430054,9.34595108032227\n        ,4.58668661117554,-3.93918871879578,9.5681037902832,4.3049521446228,-3.94899106025696,12.3848676681519,6.678795337677\n        ,-1.08676695823669,12.0569562911987,6.41276931762695,0.186367496848106,10.1192378997803,6.89622259140015,2.11103248596191\n        ,7.58461141586304,6.56392812728882,0.395473510026932,7.08461380004883,6.61821365356445,-0.39349552989006,11.2925672531128\n        ,9.14094638824463,-3.39495158195496,9.52544784545898,8.93857860565186,-3.73352289199829,8.47273540496826,8.70798873901367\n        ,-3.6010115146637,7.35740089416504,8.44426250457764,-3.02813529968262,11.0158061981201,7.09106349945068,1.53347992897034\n        ,11.9018383026123,7.38752317428589,0.497046887874603,12.3512144088745,7.81623363494873,-0.921400249004364,12.3507328033447\n        ,4.70240497589111,-2.97360157966614,8.2618465423584,4.38370370864868,-1.30719125270844,8.53772068023682,4.85830402374268\n        ,-1.03485834598541,8.34664154052734,4.26936388015747,-1.26588129997253,8.46986484527588,3.1554388999939,-1.43624365329742\n        ,8.34628105163574,3.21852278709412,-1.53164660930634,8.2733736038208,2.7988555431366,-1.6545318365097,8.17590713500977\n        ,2.74774932861328,-1.86189317703247,8.07227325439453,1.03621578216553,-2.17143201828003,8.3486795425415,0.427448570728302\n        ,-1.97930431365967,8.09087753295898,0.418905317783356,-2.12586092948914,8.15859699249268,0.0618062913417816,-2.13336801528931\n        ,7.8818793296814,0.132020547986031,-2.43179988861084,7.8618049621582,-0.623425841331482,-2.48126220703125,7.97514820098877\n        ,2.84113550186157,-0.698743879795074,7.91939783096313,1.88133490085602,-0.698509812355042,7.37556505203247,4.11418771743774\n        ,-0.738027811050415,7.12800025939941,4.14944124221802,-1.3378928899765,7.79018020629883,4.17661905288696,-1.64111828804016\n        ,6.94105863571167,8.39327621459961,-1.99834716320038,6.91890287399292,8.2821159362793,-2.00474405288696,7.22366333007813\n        ,7.12326192855835,-1.87451314926147,7.480544090271,5.81974315643311,-2.27981424331665,7.95554208755493,5.07282066345215\n        ,-2.32199144363403,12.2233734130859,8.90837287902832,-1.41941320896149,12.2676200866699,8.78210067749023,-1.39806830883026\n        ,12.2785034179688,7.96867084503174,-1.64899885654449,12.2156171798706,6.74982690811157,-1.95364665985107,12.2535228729248\n        ,5.75333404541016,-2.21360635757446,12.4807224273682,4.93390893936157,-2.24494934082031,12.7721185684204,3.99579477310181\n        ,-2.10383653640747,8.63093948364258,7.60015678405762,1.80671334266663,8.62113475799561,7.46664953231812,1.82989954948425\n        ,8.63788414001465,6.70167589187622,1.52909469604492,8.69423484802246,5.93398475646973,1.25737953186035,8.65503120422363\n        ,4.89050817489624,1.31877195835114,8.62190437316895,4.41484546661377,1.42706036567688,9.01820659637451,4.20061016082764\n        ,1.03565382957459,11.8353872299194,6.78268384933472,-2.71999740600586,11.9059467315674,8.04110717773438,-2.52659678459167\n        ,11.954478263855,9.0095157623291,-2.44830703735352,11.9236574172974,9.11659240722656,-2.40354752540588,11.960880279541\n        ,8.69771385192871,-0.577697277069092,11.5644798278809,8.31119823455811,0.719232320785522,9.98414611816406,7.77302694320679\n        ,2.08830571174622,7.71604347229004,7.88915014266968,0.612167298793793,7.12976217269897,8.13741683959961,-0.166500449180603\n        ,11.0205383300781,9.33058452606201,-3.03233504295349,9.53904724121094,9.11799430847168,-3.27702498435974,7.65170097351074\n        ,8.7472505569458,-2.73987889289856,8.62954139709473,8.94725894927979,-3.22196006774902,7.33695316314697,8.59652614593506\n        ,-1.79107713699341,11.8764390945435,9.0099458694458,-1.23530924320221,8.73727798461914,7.74562072753906,1.61132657527924\n        ,11.5861968994141,9.22538471221924,-2.12491774559021,10.8846216201782,19.2333583831787,2.99382495880127,10.8735446929932\n        ,18.8200950622559,3.42978501319885,10.8541011810303,18.3279361724854,2.93692708015442,10.8832063674927,18.8148536682129\n        ,2.53401899337769,10.5200786590576,17.9692115783691,4.34590482711792,10.4846277236938,17.3935279846191,3.72583603858948\n        ,9.73058032989502,17.2792644500732,5.04154920578003,8.62687110900879,16.9248275756836,5.41275405883789,10.3979377746582\n        ,18.2120380401611,4.33148908615112,10.7226848602295,19.0455799102783,3.37352299690247,9.62259387969971,17.5917854309082\n        ,5.03659582138062,8.54744338989258,17.1974773406982,5.40801620483398,10.830249786377,19.4356498718262,2.91760802268982\n        ,10.7492761611938,19.799617767334,2.88753604888916,10.7113447189331,19.2958393096924,3.12222003936768,10.6793050765991\n        ,19.3370323181152,3.71836709976196,10.3031015396118,18.9596462249756,4.79261493682861,9.37976932525635,18.4917240142822\n        ,5.57988595962524,8.29885768890381,18.1507701873779,5.97931909561157,10.5200023651123,20.1408176422119,4.01744413375854\n        ,10.1408576965332,19.8712902069092,5.0645899772644,9.1905345916748,19.5542163848877,5.89608812332153,8.09999942779541\n        ,19.2621593475342,6.31005191802979,10.6673736572266,20.3554096221924,2.97603225708008,10.6598329544067,19.6969032287598\n        ,2.0004780292511,10.7596883773804,19.3268871307373,2.08992290496826,10.4535999298096,21.4124336242676,3.39937400817871\n        ,10.2665662765503,21.9323348999023,3.11421298980713,10.0877733230591,22.2021808624268,3.65796494483948,10.3209276199341\n        ,21.613899230957,3.94974088668823,9.45490837097168,22.599365234375,4.69469785690308,9.74240303039551,21.900821685791\n        ,5.07761812210083,8.51956844329834,22.74631690979,5.46489000320435,8.80372142791748,21.9650821685791,5.91362905502319\n        ,7.38228607177734,22.6113510131836,5.85867595672607,7.64917707443237,21.797420501709,6.33266592025757,9.71762371063232\n        ,21.6514225006104,4.97159385681152,10.2602586746216,21.3834095001221,3.80861616134644,8.81839847564697,21.6574687957764\n        ,5.79326295852661,7.70153617858887,21.4740352630615,6.20392799377441,10.3768091201782,21.0263004302979,3.39235901832581\n        ,10.5269012451172,20.9093341827393,3.0945188999176,10.4725208282471,21.2443161010742,3.25417709350586,10.3247337341309\n        ,21.2503776550293,3.48597979545593,9.9367561340332,20.8117370605469,5.13730812072754,10.357063293457,20.9667377471924\n        ,4.0233039855957,9.07955837249756,20.6500606536865,5.98157691955566,7.97893238067627,20.4087715148926,6.39955759048462\n        ,10.3478708267212,21.2740516662598,2.29400300979614,10.3102588653564,21.5990142822266,2.51279091835022,10.6137924194336\n        ,20.0307559967041,2.17805695533752,10.5380973815918,20.4603633880615,2.3185830116272,10.4403657913208,20.9075145721436\n        ,2.34123802185059,10.5755195617676,19.6662559509277,3.11494088172913,4.94140291213989,17.8739356994629,4.00129413604736\n        ,4.97612380981445,17.4636917114258,3.53536009788513,5.33359622955322,17.0651969909668,3.87273693084717,5.26266002655029\n        ,17.5366821289063,4.38091611862183,6.29105854034424,16.4343070983887,4.43670701980591,6.21092700958252,16.9835529327393\n        ,5.07637119293213,7.39537382125854,16.3496284484863,4.7204909324646,7.39244985580444,16.7444496154785,5.43789577484131\n        ,6.20721101760864,17.2534675598145,5.04187917709351,5.27760076522827,17.8000946044922,4.29654598236084,7.3501033782959\n        ,17.071985244751,5.42181491851807,5.03394889831543,18.2387256622314,4.07053804397583,4.78293418884277,18.4348983764648\n        ,3.89891910552979,4.87793016433716,18.0741367340088,3.92661571502686,5.10237407684326,18.0128650665283,4.07302713394165\n        ,6.11509895324707,18.0017032623291,5.50254487991333,5.29883909225464,18.1063289642334,4.63043785095215,7.23719167709351\n        ,17.9726581573486,5.96456384658813,5.95145320892334,18.9130210876465,5.77475690841675,5.18693590164185,18.920955657959\n        ,4.92147922515869,7.04634428024292,19.0347785949707,6.28103971481323,4.6217041015625,18.9564056396484,4.13157510757446\n        ,4.62470102310181,18.3164520263672,3.02352404594421,4.7248101234436,17.9464931488037,3.11292791366577,4.51037693023682\n        ,20.0530071258545,4.40684223175049,4.71004295349121,20.3304882049561,4.90087223052979,4.56726694107056,20.9394416809082\n        ,4.59377288818359,4.35948419570923,20.5811710357666,4.11555480957031,5.43325090408325,20.9151668548584,5.8080849647522\n        ,5.26133918762207,21.6401462554932,5.40557098388672,6.46559047698975,21.430269241333,6.30997800827026,6.23514795303345\n        ,22.2237873077393,5.85213422775269,5.52689790725708,20.6928539276123,5.68198585510254,4.81517601013184,20.1379241943359\n        ,4.73164081573486,6.54590797424316,21.1376686096191,6.1784839630127,4.5201358795166,19.8827934265137,4.26319885253906\n        ,4.56601285934448,19.5458679199219,4.10498094558716,4.73723888397217,19.736328125,4.3483510017395,4.71576499938965\n        ,19.9674053192139,4.4367880821228,4.97689390182495,19.7361011505127,4.93532705307007,5.74875497817993,19.8537902832031\n        ,5.84723806381226,6.81026935577393,20.1309928894043,6.36625528335571,4.31273984909058,19.8936004638672,3.31704807281494\n        ,4.27538108825684,20.218620300293,3.53579592704773,4.57782793045044,18.6501159667969,3.20124411582947,4.50393390655518\n        ,19.0801334381104,3.34146690368652,4.40440893173218,19.5268745422363,3.36442470550537,10.8431606292725,18.7861003875732\n        ,2.44014716148376,10.8136548995972,18.3081188201904,2.8375391960144,10.4479379653931,17.3849391937256,3.61761784553528\n        ,10.7177801132202,19.3129863739014,1.98497116565704,10.6137723922729,19.7006969451904,1.89566814899445,10.0405826568604\n        ,22.2164440155029,3.56492018699646,10.2168340682983,21.952543258667,3.02945613861084,9.41473770141602,22.6083793640137\n        ,4.58975505828857,8.49272918701172,22.7543716430664,5.34907007217407,7.37042284011841,22.621467590332,5.80231285095215\n        ,10.2635154724121,21.6095638275146,2.41238903999329,10.303807258606,21.2677593231201,2.18731999397278,10.4946060180664\n        ,20.4584579467773,2.21803116798401,10.568359375,20.0347576141357,2.07991313934326,10.3974113464355,20.8989925384521\n        ,2.24075198173523,5.01321506500244,17.4525814056396,3.42841100692749,6.31224870681763,16.4389591217041,4.31868124008179\n        ,7.50874900817871,16.3715438842773,4.59366989135742,4.75371122360229,17.9487895965576,2.99597120285034,4.64967203140259\n        ,18.3364906311035,2.90667319297791,4.38688993453979,20.619026184082,4.01771926879883,4.5924391746521,20.9702587127686\n        ,4.48846530914307,5.2790470123291,21.6623973846436,5.2908182144165,6.23852682113647,22.2387561798096,5.73119115829468\n        ,4.29944610595703,20.2453670501709,3.42338895797729,4.3397068977356,19.9035568237305,3.19832611083984,4.60426807403564\n        ,18.6705703735352,3.09092211723328,4.53046989440918,19.0942478179932,3.22904109954834,4.43331813812256,19.5347919464111\n        ,3.25175809860229,6.38370084762573,22.9831581115723,5.70846033096313,7.14405488967896,23.9239101409912,5.65244483947754\n        ,7.72733306884766,24.1056079864502,5.47485208511353,6.49145746231079,23.8214664459229,5.74526596069336,6.57458209991455\n        ,23.7810745239258,5.88676261901855,7.17207098007202,23.8744888305664,5.79700756072998,6.33581447601318,22.3091201782227\n        ,5.86684417724609,7.37212753295898,22.6595153808594,5.87273836135864,8.39966011047363,22.7811946868896,5.51699161529541\n        ,7.70609426498413,24.041223526001,5.63918304443359,10.4553146362305,20.3231563568115,3.23345708847046,4.8855938911438\n        ,18.9875259399414,4.20944452285767,12.9825353622437,10.6990766525269,0.844066858291626,9.8389253616333,9.49735069274902\n        ,3.17830562591553,11.5044794082642,12.9690208435059,2.80792570114136,10.7127485275269,12.5645351409912,3.36476016044617\n        ,11.0604057312012,9.69466495513916,2.83606219291687,12.2644348144531,10.1694393157959,2.32021045684814,11.1309700012207\n        ,17.2452526092529,2.54634737968445,6.70162296295166,9.45798778533936,2.01733946800232,6.35549068450928,13.8766345977783\n        ,2.74235939979553,5.24501037597656,15.4749479293823,2.42005228996277,6.03702163696289,15.1854915618896,3.31086182594299\n        ,6.57275533676147,12.4051599502563,2.47686791419983,10.977728843689,15.8941841125488,3.68716859817505,10.7990818023682\n        ,16.9118976593018,3.76513743400574,10.4266233444214,17.058614730835,3.71678614616394,4.87146949768066,15.9931001663208\n        ,1.07368099689484,6.86694240570068,15.0654487609863,4.30618381500244,6.77264976501465,16.0406074523926,4.2553129196167\n        ,6.98142719268799,16.3520584106445,4.27755880355835,7.20883512496948,14.8501043319702,4.19879293441772,7.98394060134888\n        ,14.8931560516357,4.27120780944824,7.44306898117065,13.9275770187378,4.12924718856812,8.74346828460693,12.9331617355347\n        ,3.70751571655273,9.87979412078857,12.9458312988281,3.54778790473938,9.6381721496582,11.1837501525879,3.82064890861511\n        ,10.0478620529175,13.1829557418823,3.4830207824707,9.99559593200684,15.3371992111206,3.90790176391602,10.7288208007813\n        ,15.5589847564697,3.66854119300842,6.74331283569336,16.3392333984375,4.03310918807983,10.4732303619385,16.7847728729248\n        ,4.27841186523438,10.7414121627808,16.6679668426514,3.98403811454773,10.7801752090454,16.2029762268066,4.13446187973022\n        ,10.5451440811157,16.0811061859131,4.50478982925415,10.8121566772461,15.845027923584,3.79723620414734,10.5918312072754\n        ,15.5369853973389,3.99283981323242,9.8531322479248,16.5995903015137,4.68393802642822,10.0126037597656,15.9286870956421\n        ,4.81835794448853,9.79456615447998,16.833423614502,4.26952695846558,10.0595607757568,15.3670091629028,4.39897203445435\n        ,9.90972423553467,15.9085750579834,4.89311122894287,9.76378726959229,16.6339874267578,4.74866676330566,9.63790130615234\n        ,16.8885154724121,4.3174467086792,10.073974609375,13.2618465423584,3.8615391254425,10.0949974060059,13.3742513656616\n        ,4.06807279586792,9.93121242523193,13.1100921630859,3.85573220252991,9.93567180633545,13.3041086196899,4.1608567237854\n        ,8.04547023773193,16.2815895080566,5.02835702896118,7.9120717048645,16.4583759307861,4.65794610977173,8.78007221221924\n        ,13.1069211959839,4.28314590454102,8.10359859466553,15.5371837615967,5.12908601760864,8.78834533691406,12.9926528930664\n        ,4.06723880767822,7.94412708282471,16.2080841064453,4.99466705322266,8.15055847167969,14.9756393432617,4.70975494384766\n        ,7.21701669692993,16.1169757843018,4.808424949646,6.93839693069458,15.8880319595337,4.60305595397949,7.13570690155029\n        ,15.0910511016846,4.39565181732178,7.50561809539795,14.9041223526001,4.49521207809448,7.49339818954468,15.455249786377\n        ,5.00152015686035,7.12892198562622,15.4541702270508,4.72877597808838,5.54436635971069,13.8168067932129,2.02238321304321\n        ,8.30417728424072,14.0667724609375,4.03354072570801,8.42895317077637,14.1100664138794,4.42929649353027,8.49184799194336\n        ,14.1423807144165,4.64357471466064,9.92403411865234,14.4718418121338,4.48916864395142,10.0594902038574,14.4750490188599\n        ,4.39139747619629,10.0653839111328,14.5165367126465,4.18185234069824,10.0170516967773,14.4528198242188,3.73347544670105\n        ,10.6282987594604,14.4023456573486,3.52199649810791,11.1519660949707,14.6864976882935,3.16790533065796,6.04845094680786\n        ,16.2096138000488,3.63020849227905,5.52223777770996,16.4311771392822,2.7282702922821,5.10262775421143,16.7274036407471\n        ,1.33499121665955,4.29888534545898,21.2389469146729,2.84800100326538,3.93148970603943,21.6375637054443,2.01565790176392\n        ,2.9605450630188,24.8765544891357,1.97136247158051,2.89970541000366,24.9143161773682,2.17081499099731,2.62015056610107\n        ,26.2532806396484,2.3701069355011,4.41971921920776,21.6550331115723,4.03259515762329,8.53282833099365,25.5782012939453\n        ,-0.167569786310196,7.2937650680542,25.4874401092529,-1.2387101650238,6.69556617736816,20.8177394866943,-0.44059631228447\n        ,6.78883934020996,19.5983657836914,-0.931529581546783,8.20820713043213,24.2063522338867,5.04386711120605,8.81881809234619\n        ,23.5065650939941,4.60944509506226,4.55811882019043,23.5142288208008,-0.732890009880066,7.79413414001465,21.0973491668701\n        ,-0.54935747385025,8.24923992156982,19.919095993042,-0.793531358242035,9.85042095184326,21.1344356536865,1.4140750169754\n        ,9.62073135375977,24.0104999542236,1.51200270652771,9.83751201629639,22.8306541442871,2.4107723236084,9.29598808288574\n        ,23.2301254272461,4.08172798156738,2.31491231918335,29.7624473571777,3.23570966720581,6.26165246963501,30.276439666748\n        ,-2.03741860389709,2.92210912704468,29.6239356994629,-1.64515149593353,7.52851438522339,30.5461311340332,-1.03620731830597\n        ,2.28898024559021,28.4519901275635,2.82041788101196,9.5324125289917,25.5558605194092,1.46676802635193,7.73476505279541\n        ,24.0522499084473,-0.513817012310028,3.17484617233276,23.3372783660889,2.0396089553833,8.55404090881348,24.098482131958\n        ,-0.00429400010034442,6.07827711105347,23.7995223999023,-0.819948017597198,9.09116077423096,24.1179275512695,0.669364988803864\n        ,10.2090940475464,19.7163257598877,1.54994201660156,4.54618835449219,20.4038715362549,0.327896654605865,3.909832239151\n        ,20.236291885376,1.51313841342926,4.62226486206055,19.1657886505127,0.235345333814621,4.29495668411255,18.9505310058594\n        ,1.53156208992004,7.73149299621582,25.2387638092041,5.56792831420898,6.34912157058716,24.9886512756348,5.79081058502197\n        ,6.1414589881897,23.8302707672119,5.62265491485596,9.50326728820801,15.4665489196777,-3.09563803672791,7.92887163162231\n        ,15.1350746154785,-3.01180362701416,9.81278514862061,13.9111709594727,-3.44924473762512,9.84451770782471,11.6013212203979\n        ,-3.94717597961426,9.64504241943359,10.5313568115234,-4.39961624145508,10.7425470352173,18.7471675872803,1.2680721282959\n        ,8.20433902740479,13.5760927200317,-3.37232685089111,8.49007797241211,11.4475383758545,-3.97062849998474,5.36550998687744\n        ,17.0619297027588,3.7610821723938,5.17229700088501,17.7759780883789,0.455138176679611,5.34495162963867,17.0478000640869\n        ,0.207327455282211,7.15298080444336,18.741907119751,-1.61566770076752,7.37722444534302,17.8142032623291,-2.12625551223755\n        ,8.89304828643799,18.1247253417969,-2.02328205108643,8.64704895019531,19.093147277832,-1.49808049201965,13.1437149047852\n        ,9.83644771575928,0.425810605287552,6.79427766799927,10.1194458007813,-3.59274291992188,8.46947383880615,10.3621530532837\n        ,-4.15896272659302,7.37660598754883,38.6802215576172,1.84768354892731,7.32925224304199,38.8696250915527,2.05189299583435\n        ,8.50175857543945,30.9236011505127,0.143369674682617,9.24204730987549,28.3038425445557,0.935694634914398,12.451057434082\n        ,9.42442798614502,1.84179270267487,11.1691188812256,9.07114124298096,2.62692499160767,9.90255355834961,8.8194408416748\n        ,2.72341012954712,7.16649913787842,8.72556114196777,1.34422612190247,5.30278015136719,17.4545993804932,2.83680200576782\n        ,3.26730012893677,23.4545974731445,1.46349477767944,8.75579071044922,16.6359596252441,4.55582046508789,9.6224308013916\n        ,23.0851593017578,1.67339825630188,9.57697582244873,22.9747257232666,3.24728608131409,9.19984149932861,23.223331451416\n        ,0.919034540653229,8.06709289550781,23.1356105804443,-0.251145720481873,6.29547739028931,23.0096740722656,-0.55564147233963\n        ,4.18616390228271,22.5705108642578,0.401069700717926,3.58845591545105,22.4750595092773,1.47205495834351,3.43016672134399\n        ,22.3351707458496,1.91197001934052,5.4775652885437,14.6034002304077,-0.848178505897522,5.46263837814331,12.9252481460571\n        ,-1.43349719047546,6.11545467376709,10.8410673141479,-1.87363421916962,6.24943923950195,9.87539100646973,-2.08078861236572\n        ,5.08252668380737,17.5950775146484,1.47334945201874,5.56419515609741,22.756872177124,5.25122785568237,4.97053909301758\n        ,22.3994827270508,4.87527322769165,3.88732552528381,21.1598033905029,1.50911855697632,4.44807863235474,21.3713245391846\n        ,0.426176756620407,6.54054069519043,21.7982597351074,-0.450584977865219,8.50001525878906,22.0293464660645,-0.0887655019760132\n        ,9.50238704681396,22.0265922546387,1.2452974319458,9.9237585067749,22.0253047943115,1.93845045566559,10.0915231704712\n        ,22.1119232177734,2.2798593044281,4.97010898590088,14.2412166595459,0.382829368114471,5.13274669647217,12.6117677688599\n        ,-0.0833398848772049,5.56505680084229,10.3705987930298,-0.355221420526505,5.70119285583496,9.17764377593994,-0.628493666648865\n        ,5.30814981460571,16.3194942474365,-0.1225531026721,7.52781343460083,17.0894050598145,-2.39299297332764,9.06356906890869\n        ,17.390739440918,-2.41181421279907,12.0434112548828,15.1893663406372,1.87365484237671,12.5517129898071,13.4664974212646\n        ,1.38936769962311,13.1068925857544,11.2270574569702,-0.273940622806549,13.0960330963135,10.077766418457,-0.766599833965302\n        ,11.6978235244751,16.5182456970215,2.36682105064392,11.2157173156738,17.9049034118652,1.06689035892487,11.7930545806885\n        ,16.9751167297363,0.794650077819824,12.2942228317261,15.3654108047485,0.229736045002937,12.6215677261353,13.7141962051392\n        ,-0.279336333274841,8.41444396972656,9.42227172851563,2.86235332489014,8.31547164916992,8.57957553863525,2.64106416702271\n        ,4.13291549682617,19.6004199981689,1.52886092662811,4.56665515899658,19.7877254486084,0.25340074300766,6.74493312835693\n        ,20.2061576843262,-0.660114347934723,8.02215194702148,20.5025272369385,-0.674675583839417,10.0297594070435,20.4253807067871\n        ,1.48200845718384,4.66221380233765,18.1281929016113,2.47184419631958,8.28762149810791,11.0393047332764,3.44345617294312\n        ,6.68867588043213,11.1985206604004,2.32214212417603,5.4771900177002,11.5190696716309,-0.246227294206619,5.85303068161011\n        ,11.9172916412354,-1.67039966583252,8.32313919067383,12.6680364608765,-3.58693480491638,9.90711784362793,12.8571147918701\n        ,-3.5450963973999,12.8485689163208,12.8292036056519,-0.356148988008499,12.7300281524658,12.3465728759766,1.19345235824585\n        ,11.7639751434326,11.9589366912842,2.69383668899536,10.6790237426758,11.5936756134033,3.43812823295593,8.73316478729248\n        ,13.1642179489136,4.12282800674438,9.32520294189453,12.4223604202271,3.61370158195496,8.1046724319458,12.4125928878784\n        ,3.56111311912537,8.73285865783691,13.2765378952026,4.34218788146973,9.93310737609863,13.5609140396118,4.23305797576904\n        ,10.0881977081299,13.585015296936,4.12997817993164,10.072416305542,13.4894390106201,3.91964173316956,1.67838835716248\n        ,30.9184226989746,3.30307817459106,1.89689028263092,29.7673435211182,3.16651940345764,1.48467254638672,30.6766414642334\n        ,-0.48382967710495,1.7151745557785,29.5061206817627,-0.388914227485657,6.41028499603271,31.5402603149414,-2.31122946739197\n        ,6.5544581413269,30.2641086578369,-2.10232305526733,3.24189710617065,29.6542873382568,-1.98031175136566,3.03120398521423\n        ,30.9302921295166,-2.10327386856079,7.3973708152771,31.8299655914307,-1.48837518692017,4.9675407409668,29.930456161499\n        ,-2.2727963924408,4.79024934768677,31.2233638763428,-2.47925400733948,9.770339012146,25.5654220581055,1.26073324680328\n        ,9.85008811950684,24.02073097229,1.29150104522705,2.88398265838623,23.4223175048828,1.98747265338898,2.61478137969971\n        ,24.807092666626,2.1091001033783,2.56298756599426,24.7260589599609,1.49513530731201,4.08464431762695,24.8278770446777\n        ,-1.19701743125916,4.46618032455444,23.4818077087402,-1.05908119678497,5.79780006408691,25.2055416107178,-1.48177099227905\n        ,7.58888959884644,25.4344844818115,-1.33208465576172,7.79577255249023,23.9981422424316,-0.78133100271225,6.17394542694092\n        ,23.8105087280273,-1.08923745155334,8.74819564819336,25.5624618530273,-0.352819919586182,8.8174524307251,24.0813789367676\n        ,-0.17203514277935,8.29786491394043,32.2326049804688,-0.562160134315491,8.68968200683594,30.9222812652588,-0.11330646276474\n        ,7.68600034713745,30.5278968811035,-1.28661370277405,2.92589497566223,23.4454669952393,1.463662981987,10.183985710144\n        ,24.0114269256592,1.48732244968414,10.3995380401611,23.0030460357666,2.38215231895447,10.1714305877686,23.2381954193115\n        ,1.69905114173889,10.0658826828003,24.2001304626465,3.24561882019043,10.1078948974609,23.1566581726074,3.35979390144348\n        ,9.73544216156006,24.5126132965088,4.35015201568604,9.77918720245361,23.3942604064941,4.31036186218262,9.15197277069092\n        ,24.8433399200439,5.12198305130005,9.17974853515625,23.6991958618164,5.01077795028687,8.81389045715332,25.4027652740479\n        ,5.52354097366333,8.11821174621582,25.076171875,6.03452777862549,8.62082099914551,24.2555313110352,5.50145721435547\n        ,4.94333648681641,24.0129108428955,6.1410551071167,5.44337701797485,22.7728080749512,5.75631809234619,6.00277996063232\n        ,23.6588459014893,6.15437316894531,5.51579332351685,24.4081516265869,6.2461986541748,4.21660566329956,23.4138717651367\n        ,5.43742179870605,4.60753440856934,22.092170715332,5.30762243270874,3.64753818511963,22.7981567382813,4.36176633834839\n        ,3.97580409049988,21.4336051940918,4.30237817764282,3.93899321556091,21.0546340942383,3.03482794761658,3.00800609588623\n        ,22.134693145752,2.17809700965881,3.47336459159851,21.4021892547607,2.19615602493286,10.2548227310181,25.4462604522705\n        ,2.23816800117493,10.0921211242676,25.3244571685791,1.40582799911499,10.3297166824341,25.5889053344727,3.29478859901428\n        ,10.1016530990601,25.8635997772217,4.32744646072388,9.49295043945313,25.9888610839844,5.24583053588867,8.74037933349609\n        ,26.1106243133545,5.74385833740234,7.91368246078491,26.0554676055908,6.26549863815308,4.82580804824829,24.7727489471436\n        ,6.31932830810547,3.97736215591431,24.154411315918,5.67784929275513,3.38183975219727,23.6130828857422,4.72761106491089\n        ,2.68674302101135,23.211181640625,2.26280474662781,10.0458040237427,28.1991653442383,1.91037487983704,9.79188060760498\n        ,28.2899017333984,0.875848591327667,10.1743211746216,28.1533126831055,3.07424855232239,10.0320882797241,28.1667823791504\n        ,4.24908638000488,8.97226333618164,31.0707683563232,-0.0124146156013012,9.27804946899414,31.2962856292725,1.37091720104218\n        ,8.99170207977295,33.3099365234375,1.86456072330475,9.47235774993896,31.3706016540527,2.61665606498718,8.30988502502441\n        ,32.8178291320801,5.27076625823975,8.49545383453369,30.7285480499268,5.71441602706909,9.12849426269531,31.0272274017334\n        ,5.08935260772705,8.80402851104736,33.1465034484863,4.67227029800415,7.65233707427979,30.4246578216553,6.46737289428711\n        ,7.61286640167236,32.386043548584,6.16658735275269,4.8137845993042,30.9995460510254,6.55148696899414,5.17962551116943\n        ,29.5996227264404,6.77977800369263,4.09050512313843,30.391019821167,6.23229169845581,2.47493076324463,29.0429763793945\n        ,4.76166772842407,2.26273012161255,28.844123840332,4.130455493927,1.83292031288147,28.6096267700195,3.26814723014832\n        ,8.04264640808105,34.5006980895996,-0.720708727836609,7.95204257965088,35.5625,4.51369094848633,7.40072584152222,35.2431945800781\n        ,5.5053391456604,4.30788898468018,32.4267234802246,6.14424514770508,3.70565128326416,31.6386547088623,5.78515100479126\n        ,2.07473659515381,29.7428436279297,4.24214792251587,1.89405024051666,29.2105312347412,3.50888156890869,7.91234683990479\n        ,36.6562614440918,0.0448120012879372,7.69625759124756,37.7195739746094,3.7429211139679,7.29021406173706,37.5362548828125\n        ,4.64640092849731,6.16034173965454,36.3572311401367,5.5187726020813,4.74860525131226,34.8689727783203,5.76224040985107\n        ,3.77248501777649,33.7298736572266,5.60572528839111,3.26117038726807,32.9967346191406,5.2520923614502,6.08498001098633\n        ,25.5943832397461,6.55991077423096,6.18661165237427,24.7244873046875,6.31633234024048,9.40803623199463,31.2745361328125\n        ,3.8881824016571,9.07090282440186,33.3454704284668,3.53791260719299,10.0716009140015,24.0060024261475,1.4139244556427\n        ,10.0697593688965,23.165225982666,1.6226841211319,10.3156270980835,22.8844871520996,2.36132836341858,10.029746055603\n        ,23.0400581359863,3.33455991744995,9.70546817779541,23.283145904541,4.26745891571045,9.1259241104126,23.5924777984619\n        ,4.93032312393188,8.48777198791504,24.2007484436035,5.37533950805664,7.91638708114624,25.1751689910889,5.94517946243286\n        ,6.03314876556396,23.5322189331055,5.99998188018799,5.52076005935669,22.6739807128906,5.62737798690796,4.69226598739624\n        ,22.0745868682861,5.19560813903809,4.09655714035034,21.4006404876709,4.22978782653809,4.06289386749268,21.0164031982422\n        ,3.00006198883057,3.60996341705322,21.3400974273682,2.08173608779907,9.97756958007813,25.3492584228516,1.34460115432739\n        ,3.06863784790039,22.1662006378174,2.02713704109192,9.65499496459961,28.2802486419678,0.782940268516541,2.74755239486694\n        ,23.2384338378906,2.15618586540222,8.82112979888916,31.0097255706787,-0.0560440123081207,1.86797857284546,28.614429473877\n        ,3.1319215297699,7.94068431854248,34.379695892334,-0.816163599491119,1.89337337017059,29.1634712219238,3.36262130737305\n        ,7.79942846298218,36.6775054931641,-0.0194739997386932,7.60380077362061,37.7963676452637,3.67964386940002,7.22692108154297\n        ,37.5835647583008,4.55090570449829,6.1025857925415,36.3641624450684,5.41515636444092,4.72125434875488,34.9616813659668\n        ,5.66096448898315,3.76971030235291,33.8117027282715,5.53015184402466,3.28945708274841,33.111946105957,5.19547367095947\n        ,2.10025668144226,30.606517791748,3.93692255020142,6.30683612823486,24.863639831543,6.18582439422607,6.11436796188354\n        ,23.6850185394287,6.04688310623169,7.78097343444824,26.0277538299561,6.21321439743042,6.21463012695313,25.6692790985107\n        ,6.46301651000977,7.55111742019653,30.3920917510986,6.39775085449219,7.45050239562988,32.3329658508301,6.15083980560303\n        ,7.27913808822632,35.1760787963867,5.55547094345093,6.99305248260498,37.2315101623535,4.84737014770508,6.91676378250122\n        ,37.2658882141113,4.76304244995117,2.28811478614807,26.3853092193604,2.56221723556519,2.23476266860962,26.3820323944092\n        ,2.68446326255798,2.61036849021912,26.5165481567383,3.75161123275757,2.90822100639343,26.7460823059082,4.73223924636841\n        ,3.56000971794128,27.1050662994385,5.75402736663818,4.27271509170532,27.3566989898682,6.4875373840332,5.66520214080811\n        ,27.6100559234619,6.7059268951416,5.7662296295166,27.5774803161621,6.57018709182739,7.6766791343689,27.9425983428955\n        ,6.35362434387207,7.80297374725342,27.9894924163818,6.4398775100708,8.66915988922119,28.0921421051025,5.84028482437134\n        ,9.47067070007324,28.122034072876,5.24188470840454,2.20996499061584,29.9731330871582,4.56600332260132,2.10399508476257\n        ,30.5140609741211,4.07979536056519,5.30119848251343,29.6463642120361,6.68332195281982,4.92222452163696,31.0695972442627\n        ,6.47152519226074,4.48160314559937,32.5191307067871,6.0656886100769,4.14768695831299,34.1093292236328,5.51155948638916\n        ,4.15120220184326,34.2035255432129,5.43701601028442,1.98364222049713,27.8785266876221,2.93078923225403,1.94235408306122\n        ,27.87815284729,3.06318759918213,2.36977767944336,28.0997009277344,3.98143076896667,2.63067173957825,28.2976512908936\n        ,4.7458701133728,4.41857099533081,29.2386493682861,6.59666156768799,7.56398439407349,30.5628261566162,6.71118402481079\n        ,7.49685859680176,32.181510925293,6.48458242416382,7.468101978302,32.5037994384766,6.4351601600647,7.3045482635498\n        ,35.2156181335449,5.87828588485718,6.73865842819214,32.2596702575684,6.63548994064331,6.20531892776489,36.3156089782715\n        ,5.84047269821167,7.05880689620972,37.1785850524902,5.21333408355713,4.72433471679688,34.8476142883301,6.0802116394043\n        ,6.41811656951904,34.4748916625977,6.24666404724121,7.55984258651733,30.338529586792,6.73191165924072,7.69254875183105\n        ,27.9261207580566,6.6812539100647,7.82909297943115,26.0347461700439,6.52567291259766,6.32481861114502,25.6593074798584\n        ,6.7205548286438,7.95692873001099,25.1614246368408,6.27644300460815,6.40386581420898,24.8511695861816,6.50110149383545\n        ,5.83545446395874,27.5759601593018,6.88720178604126,5.36732721328735,29.6078033447266,7.00625324249268,4.96170663833618\n        ,31.019079208374,6.80995941162109,5.2938666343689,29.7915210723877,6.99704647064209,4.8523211479187,31.2468891143799\n        ,6.76324796676636,4.41397762298584,32.6190986633301,6.37181329727173,5.5450701713562,31.6847229003906,6.82576894760132\n        ,5.13066625595093,33.2722244262695,6.48147821426392,4.08279800415039,34.1065979003906,5.84938621520996,8.26431655883789\n        ,35.4175186157227,0.438631266355515,8.11979484558105,35.6021957397461,4.41319370269775,8.47711849212646,32.8561134338379\n        ,5.23995113372803,8.70630931854248,30.8051433563232,5.64721870422363,8.90147686004639,28.0989265441895,5.80129289627075\n        ,8.9966287612915,26.0767917633057,5.69587278366089,8.94582271575928,25.184455871582,5.4431848526001,9.03204917907715\n        ,25.4176197052002,5.50921106338501,9.29705619812012,25.0721836090088,5.14672422409058,9.88245296478271,24.7685241699219\n        ,4.34585094451904,10.1949939727783,24.4736366271973,3.25530242919922,10.2092380523682,24.4950656890869,2.25282216072083\n        ,10.2866735458374,24.5622482299805,2.40504479408264,10.3209056854248,25.4585094451904,2.32878351211548,10.1164855957031\n        ,28.1952266693115,2.0103747844696,9.35418319702148,31.3025550842285,1.47600424289703,8.92996597290039,33.1470336914063\n        ,1.12682414054871,8.36096000671387,35.5315437316895,0.640533804893494,7.96617650985718,36.6328430175781,0.68460077047348\n        ,10.1855125427246,24.3762168884277,2.39254546165466,4.88428688049316,27.5448017120361,6.62644290924072,5.35536670684814\n        ,25.2809295654297,6.34503364562988,2.41899251937866,31.5349407196045,4.39026832580566,2.42222929000854,31.4518260955811\n        ,4.50084161758423,2.73904395103455,30.6618022918701,5.13954162597656,3.01469254493713,29.4937610626221,5.50692224502563\n        ,3.18643069267273,28.6368103027344,5.63183641433716,2.88213300704956,32.440502166748,4.80782842636108,2.88537335395813\n        ,32.3740043640137,4.91404724121094,3.25417995452881,31.2281646728516,5.60531949996948,3.57900738716125,29.9968357086182\n        ,6.06741666793823,3.84910750389099,29.0165786743164,6.32851791381836,3.78587698936462,22.6147346496582,4.40958499908447\n        ,4.40473413467407,23.2173252105713,5.3618688583374,5.05243253707886,23.7748394012451,5.98046350479126,5.15192556381226\n        ,23.9108238220215,6.03752183914185,5.09901189804077,24.0283966064453,6.06259202957153,4.98978471755981,24.8948726654053\n        ,6.22997379302979,4.42884540557861,27.3927001953125,6.41243886947632,3.99426865577698,29.0578422546387,6.27595472335815\n        ,3.70775318145752,30.0652732849121,5.9921236038208,3.36599230766296,31.2928047180176,5.52768707275391,3.21600556373596\n        ,23.382287979126,3.66167640686035,3.13256430625916,23.4489612579346,3.96262264251709,2.60371732711792,26.5579433441162\n        ,3.99766564369202,2.36950469017029,28.1366233825684,4.2071647644043,2.27195620536804,28.888053894043,4.36787366867065\n        ,2.10059666633606,29.8359222412109,4.44796895980835,3.65240097045898,22.6352996826172,4.09371852874756,3.45793771743774\n        ,22.3002586364746,3.45713114738464,5.93335342407227,23.5488815307617,6.10497140884399,8.28321838378906,35.4727020263672\n        ,4.0598840713501,8.21437072753906,35.5108833312988,3.94676041603088,8.23526859283447,35.5774803161621,4.07809209823608\n        ,8.98128318786621,33.3073310852051,1.50170826911926,8.80344772338867,33.7087898254395,1.31972646713257,8.37926006317139\n        ,35.5428810119629,0.895102500915527,9.05762958526611,33.3395156860352,3.25746941566467,8.79792022705078,33.7233619689941\n        ,3.65049529075623,8.32604217529297,35.6871376037598,0.887703597545624,8.37180233001709,35.6292266845703,1.01363062858582\n        ,7.92610263824463,36.6413269042969,3.91050696372986,9.65692615509033,34.4289665222168,3.45484137535095,9.65652179718018\n        ,34.4304313659668,1.51501369476318,9.64732360839844,36.1605224609375,1.23773038387299,9.6471118927002,36.1608505249023\n        ,3.73834991455078,8.90835475921631,36.0127983093262,4.05285596847534,8.04823875427246,38.801326751709,3.066978931427\n        ,8.04919147491455,38.7976417541504,1.90342044830322,8.91025924682617,36.0060348510742,0.912298798561096,8.98512554168701\n        ,35.85498046875,0.943507790565491,9.66490745544434,35.9975662231445,1.24367785453796,9.66507625579834,35.9963912963867\n        ,3.73160123825073,8.98733711242676,35.8529968261719,4.02006530761719,8.58648204803467,38.6790885925293,1.94465684890747\n        ,8.5863561630249,38.6800575256348,3.02977108955383,8.05947399139404,38.9483451843262,2.96082544326782,8.3496265411377\n        ,37.876407623291,1.19929134845734,9.70539474487305,34.3412780761719,3.23126864433289,9.09271430969238,37.9376640319824\n        ,3.39191293716431,9.04487419128418,37.9428787231445,3.58865451812744,9.60724449157715,34.5523490905762,3.56974840164185\n        ,9.73832893371582,35.9771957397461,3.46515989303589,9.29694271087646,36.0857925415039,3.90996932983398,8.72676181793213\n        ,38.6951217651367,2.94520330429077,8.65796184539795,38.7216682434082,2.94792580604553,8.65403747558594,38.6301765441895\n        ,3.03623008728027,8.65191173553467,37.937370300293,1.26801216602325,8.31970977783203,38.7574996948242,1.91880691051483\n        ,8.65421104431152,38.628044128418,1.93424451351166,9.04490661621094,37.9410629272461,1.38660764694214,9.34207344055176\n        ,35.9353485107422,3.8918993473053,9.34069728851318,35.9380073547363,1.07297730445862,8.72695350646973,38.6949348449707\n        ,2.0697033405304,8.65809059143066,38.7215995788574,2.0669732093811,8.05986881256104,38.9483337402344,2.05407619476318\n        ,9.70482158660889,34.3420333862305,1.77387404441834,9.73829746246338,35.9785690307617,1.59816265106201,9.09149074554443\n        ,37.9406356811523,1.67303395271301,8.87478923797607,35.9269828796387,1.03641319274902,9.2094841003418,35.9949035644531\n        ,1.16528415679932,9.29795265197754,36.0840759277344,1.05569672584534,9.5132417678833,36.056079864502,1.33062779903412\n        ,9.62839031219482,36.0285873413086,1.6688996553421,9.74010372161865,36.1250686645508,1.59929883480072,9.6286153793335\n        ,36.0278968811035,3.39043879508972,9.74026870727539,36.1246604919434,3.46993517875671,9.51327228546143,36.0559005737305\n        ,3.64421725273132,9.20956325531006,35.9938201904297,3.79994034767151,8.87504005432129,35.9276924133301,3.92794609069824\n        ,8.37112808227539,38.8416557312012,2.06099200248718,8.37003135681152,38.8421287536621,2.9540810585022,8.31944561004639\n        ,38.7596626281738,3.05168437957764,8.65036487579346,37.9585037231445,3.69329905509949,8.33966159820557,37.9150276184082\n        ,3.76029419898987,9.63536262512207,34.6465492248535,3.56787443161011,9.71852207183838,34.5815124511719,3.4976921081543\n        ,9.76471328735352,34.5473899841309,3.26735043525696,9.76347923278809,34.56298828125,1.74737155437469,9.71766757965088\n        ,34.592529296875,1.47125852108002,9.63161945343018,34.6595687866211,1.3942711353302,9.60330772399902,34.5609931945801\n        ,1.39289259910584,8.2984733581543,38.0600166320801,1.24847328662872,8.60289287567139,38.0795478820801,1.30549657344818\n        ,8.97101306915283,38.050895690918,1.3974621295929,9.00732898712158,38.0661354064941,1.67648065090179,9.00812816619873\n        ,38.0641098022461,3.38718843460083,8.97093868255615,38.052806854248,3.57767224311829,8.60173034667969,38.0949897766113\n        ,3.65988159179688,8.29121208190918,38.0429191589355,3.71564388275146,8.25728702545166,38.1638870239258,1.49070048332214\n        ,8.52094841003418,38.2038345336914,1.5344785451889,8.83392238616943,38.2279777526855,1.6033970117569,8.87556648254395\n        ,38.2440948486328,1.82842564582825,8.875901222229,38.2435035705566,3.21620106697083,8.83407974243164,38.2287864685059\n        ,3.36956572532654,8.52165985107422,38.2090759277344,3.43147039413452,8.25486278533936,38.1729011535645,3.47432494163513\n        ,8.57520580291748,36.9442749023438,1.05579495429993,8.92019557952881,37.056266784668,1.16185414791107,9.29137802124023\n        ,37.1757545471191,1.31216907501221,9.36106109619141,37.1578140258789,1.63616633415222,9.36175537109375,37.1561241149902\n        ,3.4309241771698,9.29125690460205,37.1768264770508,3.66350221633911,8.91891670227051,37.1471099853516,3.80163431167603\n        ,8.56927108764648,37.0888748168945,3.90657520294189,8.83453559875488,33.546947479248,1.04526650905609,8.76492404937744\n        ,33.456356048584,0.906054317951202,8.39243221282959,33.0780563354492,-0.461591124534607,8.27371215820313,32.9051399230957\n        ,-0.532841503620148,8.87887573242188,32.999683380127,1.01147544384003,8.57392024993896,32.4365539550781,-0.315257996320724\n        ,8.42005634307861,32.313835144043,-0.395357549190521,8.54056930541992,34.598030090332,3.85518980026245,9.29729080200195\n        ,35.2026748657227,3.79490661621094,9.48871803283691,35.2909469604492,3.72988700866699,9.69179916381836,35.2889518737793\n        ,3.61464691162109,9.75152111053467,35.2622909545898,3.36625528335571,9.75088977813721,35.2707824707031,1.672767162323\n        ,9.69128799438477,35.2950477600098,1.35746812820435,9.48615837097168,35.2987899780273,1.23362421989441,9.29421615600586\n        ,35.2079849243164,1.16820025444031,8.59135437011719,34.6258354187012,1.10741424560547,8.59774780273438,34.5392456054688\n        ,0.842900216579437,8.51461982727051,34.4369354248047,0.672342777252197,8.21594047546387,33.7888870239258,-0.589591026306152\n        ,8.08582305908203,33.6414337158203,-0.667325794696808,7.97919321060181,35.5220642089844,-0.356160432100296,7.86904096603394\n        ,35.527904510498,-0.407945513725281,9.41505527496338,25.5495491027832,1.24658966064453,4.65747976303101,29.993688583374\n        ,-1.9929701089859,5.70963573455811,25.2698745727539,-1.25907444953918,4.05296611785889,24.9229850769043,-1.07812261581421\n        ,1.94002258777618,29.5671463012695,2.09152460098267,1.39111661911011,29.5243148803711,1.60391390323639,1.16515398025513\n        ,30.6779403686523,1.79934179782867,1.99050807952881,29.5482559204102,0.0322921723127365,3.18263959884644,24.8409614562988\n        ,0.259835541248322,3.07358360290527,24.7372646331787,-0.0272905211895704,3.43370652198792,23.3883876800537,-0.0178845003247261\n        ,3.67771339416504,23.4529304504395,0.146148890256882,7.49344301223755,25.4977970123291,-1.50432002544403,8.73250484466553\n        ,25.5885562896729,-0.433179765939713,3.90392780303955,24.9208126068115,-1.19340264797211,2.86472368240356,24.7657909393311\n        ,-0.011822797358036,1.67441141605377,29.4105987548828,0.0618886798620224,1.62392604351044,29.4356174468994,2.00085210800171\n        ,1.67769014835358,29.4277153015137,-0.223505362868309,2.7168333530426,29.4735317230225,-1.74457061290741,6.45831537246704\n        ,30.1916770935059,-2.30510973930359,7.7251763343811,30.5071926116943,-1.30389845371246,6.30463266372681,30.1748123168945\n        ,-2.29767990112305,4.73208427429199,29.9153747558594,-2.37516093254089,4.5478458404541,29.8604946136475,-2.31193232536316\n        ,2.86321783065796,29.5412120819092,-1.96411395072937,7.28996992111206,25.404899597168,-1.47658205032349,5.74078845977783\n        ,25.2103481292725,-1.61829876899719,2.64102792739868,24.8287105560303,1.95682787895203,2.86312246322632,24.7931175231934\n        ,0.245301082730293,8.77632522583008,30.8639965057373,-0.043558195233345,9.689621925354,25.6373138427734,1.0596616268158\n        ,8.80739498138428,25.5922794342041,-0.354497760534287,7.8030800819397,30.560209274292,-1.22313511371613,4.01765489578247\n        ,24.8804779052734,-1.40720963478088,5.62358236312866,25.1768970489502,-1.58816146850586,1.97695231437683,29.7982711791992\n        ,3.62867569923401,1.983323097229,29.7955074310303,3.76431751251221,7.27921152114868,7.94315719604492,1.11295449733734\n        ,8.45061302185059,7.78688621520996,2.35225319862366,9.98027992248535,7.93115139007568,2.6541576385498,11.047269821167\n        ,8.17732429504395,2.32532548904419,12.2088813781738,8.54818725585938,1.43931353092194,12.7967157363892,8.97920799255371\n        ,-0.303374022245407,12.7254018783569,9.27799606323242,-1.02359855175018,9.60103511810303,9.58114910125732,-4.08662033081055\n        ,8.47558498382568,9.39766216278076,-3.92700147628784,7.04356861114502,9.15869903564453,-3.36116600036621,6.57959508895874\n        ,8.94561100006104,-2.03293538093567,6.16128015518188,8.42148208618164,-0.628806829452515,5.64768552780151,12.3261880874634\n        ,1.44831931591034,5.9045262336731,11.2130880355835,1.26543354988098,5.8640022277832,9.76654434204102,1.05148673057556\n        ,6.4172043800354,8.82000827789307,0.554828345775604,6.70876121520996,8.10266876220703,0.363239943981171,12.200852394104\n        ,9.57963943481445,-2.46441507339478,12.4662971496582,10.3750247955322,-2.37286257743835,12.2984609603882,11.5450801849365\n        ,-1.93835651874542,12.0142498016357,12.9365711212158,-1.61892592906952,11.9773483276367,13.8030195236206,-1.4678817987442\n        ,11.8417062759399,15.5326137542725,-1.05799794197083,11.2553758621216,17.1266117095947,-0.394293993711472,10.8601474761963\n        ,18.0437698364258,0.00694957328960299,10.4829511642456,18.8434734344482,0.322913497686386,9.9399585723877,19.8044834136963\n        ,0.532618045806885,9.69186401367188,20.4600238800049,0.586481034755707,9.4355001449585,21.1805152893066,0.577586591243744\n        ,9.07950115203857,22.0507411956787,0.495223522186279,8.69851875305176,23.1948986053467,0.245849296450615,6.16310691833496\n        ,31.7836303710938,6.44500494003296,7.04650259017944,25.1148319244385,5.67837047576904,7.1069540977478,25.0596961975098\n        ,6.07496929168701,7.16845560073853,25.0319118499756,6.39875030517578,7.08851909637451,25.8666687011719,6.62717199325562\n        ,6.80701875686646,27.7775402069092,6.78988933563232,6.44509267807007,29.9831085205078,6.92495393753052,6.4039478302002\n        ,30.032678604126,6.60236120223999,6.41693687438965,30.1916389465332,6.91217041015625,6.20972585678101,31.6967830657959\n        ,6.77317142486572,-6.54231739044189,12.6112308502197,2.51405692100525,-5.62890911102295,12.6281480789185,1.56339108943939\n        ,-5.08411502838135,13.020073890686,0.0338337942957878,-5.60205984115601,13.3931608200073,-1.27092814445496,-8.1321964263916\n        ,13.9843788146973,-3.27790832519531,-9.74130058288574,14.2703952789307,-3.36757755279541,-11.2661638259888,14.2782869338989\n        ,-2.45767784118652,-11.9547777175903,14.0997133255005,-1.39795982837677,-12.5701141357422,13.9658508300781,-0.201430022716522\n        ,-12.4840297698975,13.6959028244019,1.45385241508484,-11.4584693908691,13.1931886672974,2.85491061210632,-10.697582244873\n        ,12.8946161270142,3.39300060272217,-6.09357261657715,14.955735206604,3.21051430702209,-5.30345153808594,15.0847148895264\n        ,2.32294702529907,-4.65844058990479,15.4953756332397,0.879150092601776,-5.3569164276123,15.7576780319214,-0.361837923526764\n        ,-7.63014793395996,16.5907344818115,-2.55088973045349,-9.18150901794434,16.8746166229248,-2.59523558616638,-10.7870645523071\n        ,16.9461994171143,-1.46924579143524,-11.3884553909302,16.7632884979248,-0.545281529426575,-11.8917779922485,16.6512069702148\n        ,0.681422531604767,-11.7337970733643,16.379919052124,2.31548643112183,-4.29751968383789,24.8999042510986,-1.23498022556305\n        ,-4.68551063537598,23.5386791229248,-1.07134437561035,-4.90844106674194,23.582426071167,-0.784929275512695,-5.06855154037476\n        ,22.799654006958,-0.584399402141571,-5.32814025878906,21.655574798584,-0.376716136932373,-5.36390161514282,20.6551761627197\n        ,-0.347969770431519,-5.5555419921875,20.0228042602539,-0.38139283657074,-5.59836912155151,19.3803081512451,-0.498663604259491\n        ,-5.93225002288818,18.2411861419678,-0.859450995922089,-6.02198886871338,17.4772243499756,-1.10206782817841,-6.18644666671753\n        ,16.2123355865479,-1.70700764656067,-6.38514518737793,14.8989009857178,-2.24836111068726,-6.56212663650513,13.678539276123\n        ,-2.60871553421021,-6.80606079101563,12.2707643508911,-2.95792460441589,-7.0539927482605,11.1793432235718,-3.29677653312683\n        ,-7.20544815063477,10.1790170669556,-3.73171949386597,-7.26315689086914,9.19534206390381,-3.44793200492859,-10.0475654602051\n        ,11.6314668655396,-4.09846067428589,-10.0540437698364,10.5353965759277,-4.18405389785767,-9.9586124420166,9.60340690612793\n        ,-3.94887590408325,11.2027616500854,9.68085098266602,-3.46960878372192,11.4367513656616,10.549054145813,-3.45530366897583\n        ,11.2972002029419,11.8169927597046,-3.32886862754822,11.1392621994019,13.012734413147,-2.86512422561646,11.1196727752686\n        ,13.9444828033447,-2.67804932594299,10.8612976074219,15.5450296401978,-2.19082450866699,10.4322099685669,17.3136310577393\n        ,-1.5093207359314,10.1309051513672,18.2544040679932,-1.11548435688019,9.73401069641113,19.0150680541992,-0.632054448127747\n        ,9.29386520385742,19.8477249145508,-0.29420593380928,9.02189445495605,20.4448375701904,-0.182775765657425,8.72895908355713\n        ,21.1493473052979,-0.079991951584816,7.38872718811035,21.8982887268066,-0.293966174125671,7.18128442764282,23.0726432800293\n        ,-0.403393626213074,4.94621467590332,22.7787132263184,-0.587266862392426,5.13886499404907,21.6332550048828,-0.364601194858551\n        ,5.25503253936768,20.6421451568604,-0.341791093349457,5.42467212677002,20.0016403198242,-0.356989920139313,5.51656103134155\n        ,19.3624057769775,-0.464608579874039,5.83164167404175,18.1995677947998,-0.796680629253387,5.99487543106079,17.471996307373\n        ,-1.08526873588562,6.09748268127441,16.7805137634277,-1.46871149539948,6.26286697387695,14.8802556991577,-2.18778109550476\n        ,6.45515012741089,13.1925020217896,-2.67920064926147,6.63633728027344,12.2249088287354,-2.88158559799194,6.9144926071167\n        ,11.1545562744141,-3.08205604553223,2.08748078346252,44.8266448974609,-3.61138391494751,1.88030695915222,44.8266448974609\n        ,-3.81855821609497,1.73669397830963,45.5486373901367,-3.81855821609497,1.92809784412384,45.6279182434082,-3.61138391494751\n        ,1.3277200460434,46.1607093811035,-3.81855821609497,1.47421503067017,46.307201385498,-3.61138391494751,0.715646982192993\n        ,46.5696830749512,-3.81855893135071,0.794929981231689,46.7610855102539,-3.61138391494751,-0.00634199986234307,46.7132949829102\n        ,-3.81855893135071,-0.00634199986234307,46.920467376709,-3.61138391494751,-0.728331029415131,46.5696830749512,-3.81855893135071\n        ,-0.807613015174866,46.7610855102539,-3.61138391494751,-1.34040415287018,46.1607093811035,-3.81855821609497,-1.48689794540405\n        ,46.307201385498,-3.61138391494751,-1.74937784671783,45.5486335754395,-3.81855893135071,-1.94078195095062,45.6279182434082\n        ,-3.61138391494751,-1.89299011230469,44.8266448974609,-3.81855893135071,-2.10016393661499,44.8266448974609,-3.61138391494751\n        ,-1.74937784671783,44.1046562194824,-3.81855821609497,-1.94078195095062,44.0253753662109,-3.61138391494751,-1.34040415287018\n        ,43.4925842285156,-3.81855821609497,-1.48689794540405,43.3460884094238,-3.61138510704041,-0.728331029415131,43.083610534668\n        ,-3.81855821609497,-0.807613015174866,42.8922080993652,-3.61138391494751,-0.00634100008755922,42.939998626709,-3.81855821609497\n        ,-0.00634100008755922,42.7328224182129,-3.61138272285461,0.715647995471954,43.083610534668,-3.81855821609497,0.794929981231689\n        ,42.8922080993652,-3.61138391494751,1.32772099971771,43.4925842285156,-3.81855821609497,1.47421503067017,43.3460922241211\n        ,-3.61138391494751,1.73669505119324,44.1046562194824,-3.81855821609497,1.92809915542603,44.0253753662109,-3.61138391494751\n        ,-0.0702939033508301,46.9095268249512,-2.83078742027283,-0.00634199986234307,44.8266448974609,-3.81855893135071,-0.00774500099942088\n        ,48.5321197509766,-4.27275657653809,-2.79399394989014,48.5291366577148,-4.25684595108032,-1.97193670272827,49.2199897766113\n        ,-4.70548629760742,-0.0079365773126483,49.2231712341309,-4.72618436813354,-3.93324613571167,48.1487579345703,-3.40063524246216\n        ,-2.86614584922791,49.3610649108887,-4.13264656066895,-2.95772695541382,48.5543785095215,-4.20622110366821,-3.24585890769959\n        ,47.8829612731934,-3.85739922523499,-3.16376090049744,46.6581039428711,-3.27878475189209,-3.93707990646362,48.0531578063965\n        ,-3.37293791770935,-3.2502818107605,47.7346115112305,-3.79583311080933,-2.82787704467773,46.7353248596191,-3.73126482963562\n        ,-3.13004899024963,46.5379753112793,-3.27038884162903,-2.78846979141235,46.5956077575684,-3.71025991439819,-2.77864789962769\n        ,44.5108299255371,-3.70978999137878,-3.10399317741394,44.4963989257813,-3.17587113380432,-0.00774674257263541,42.1210021972656\n        ,-3.3051495552063,-1.71360194683075,42.1770324707031,-3.16398596763611,-1.34515404701233,42.3104934692383,-3.69572424888611\n        ,-0.00774500146508217,42.3095550537109,-3.69797968864441,-2.17577815055847,49.2368698120117,-4.64067125320435,-1.4881579875946\n        ,50.2866439819336,-4.61767959594727,-1.25603806972504,49.8282089233398,-4.99077701568604,-1.59205400943756,46.349178314209\n        ,-3.77787971496582,-2.68635511398315,46.6700057983398,-3.77787971496582,-2.76875805854797,46.9001617431641,-3.77554607391357\n        ,-0.831133008003235,46.8742370605469,-3.77787899971008,-2.67803001403809,44.5424156188965,-3.77787899971008,-2.01448392868042\n        ,45.6905746459961,-3.77787899971008,-2.18441390991211,44.7907295227051,-3.77787899971008,-0.00948680471628904,50.4008445739746\n        ,-4.60829496383667,-0.00942133273929358,49.8690757751465,-5.05734491348267,-1.13300633430481,49.8691291809082,-5.00537014007568\n        ,-2.76524996757507,43.1158752441406,-3.17091298103333,-2.48791909217834,43.2134246826172,-3.70322799682617,-1.46523594856262\n        ,42.3661613464355,-3.70073199272156,-1.15198469161987,49.7354354858398,-5.01462888717651,-0.00865909457206726,49.7371101379395\n        ,-5.06615304946899,-0.00774500006809831,42.4267349243164,-3.77787899971008,-1.36082100868225,42.4239044189453,-3.77787899971008\n        ,-0.82917308807373,42.7932014465332,-3.77787899971008,-0.00774500006809831,42.6284027099609,-3.77787899971008,-0.00774500006809831\n        ,47.0389404296875,-3.80383110046387,-1.53621804714203,43.2656326293945,-3.77787899971008,-2.01435494422913,43.9812316894531\n        ,-3.77787899971008,-0.00774500006809831,47.7899284362793,-3.90835189819336,-2.88847088813782,48.390251159668,-4.16416501998901\n        ,-3.15139889717102,47.7899284362793,-3.85440111160278,-2.3965790271759,43.2774925231934,-3.77787899971008,-2.85712099075317\n        ,47.7899284362793,-3.90835189819336,-0.00774500006809831,44.4963836669922,-2.88441801071167,-0.00774500379338861,43.1158981323242\n        ,-2.87946343421936,1.95598769187927,49.219898223877,-4.70561122894287,2.7785050868988,48.5291366577148,-4.25684595108032\n        ,3.93082571029663,48.1475028991699,-3.40081644058228,3.23036909103394,47.8829612731934,-3.85739922523499,2.94223666191101\n        ,48.5543785095215,-4.20622110366821,2.85060954093933,49.3610458374023,-4.13265657424927,3.15620064735413,46.6549911499023\n        ,-3.27752184867859,2.81238603591919,46.7353248596191,-3.73126459121704,3.23479199409485,47.7346115112305,-3.79583311080933\n        ,3.92158389091492,48.0531539916992,-3.37293839454651,2.76315808296204,44.5108299255371,-3.70978999137878,2.77297902107239\n        ,46.5956077575684,-3.71025967597961,3.13004899024963,46.537971496582,-3.27039289474487,3.08850169181824,44.4963836669922\n        ,-3.17586994171143,1.32966256141663,42.3104934692383,-3.69572329521179,1.66867196559906,42.1703910827637,-3.14673805236816\n        ,2.16000866889954,49.2367668151855,-4.64066600799561,1.23720574378967,49.8278503417969,-4.99131345748901,1.46432018280029\n        ,50.2877388000488,-4.62241172790527,1.57656502723694,46.349178314209,-3.77787971496582,0.815643012523651,46.8742370605469\n        ,-3.77787899971008,2.75326800346375,46.9001617431641,-3.77554607391357,2.67086505889893,46.6700057983398,-3.77787971496582\n        ,1.99899387359619,45.6905746459961,-3.77787899971008,2.66253995895386,44.5424156188965,-3.77787899971008,2.16892409324646\n        ,44.7907295227051,-3.77787899971008,1.11472451686859,49.868824005127,-5.00572633743286,2.74976110458374,43.1158752441406\n        ,-3.17091298103333,2.47242999076843,43.2134246826172,-3.70322799682617,1.44974386692047,42.3661613464355,-3.70073080062866\n        ,1.13459324836731,49.7351531982422,-5.01477098464966,0.813682913780212,42.7932014465332,-3.77787899971008,1.34533095359802\n        ,42.4239044189453,-3.77787899971008,1.52072787284851,43.2656326293945,-3.77787899971008,1.99886500835419,43.9812316894531\n        ,-3.77787899971008,2.87298202514648,48.390251159668,-4.16416501998901,3.13590908050537,47.7899284362793,-3.85440111160278\n        ,2.38108801841736,43.2774925231934,-3.77787899971008,2.84163093566895,47.7899284362793,-3.90835189819336,-4.58376359939575\n        ,63.043212890625,-0.74325555562973,-4.32382106781006,63.199146270752,-2.11853528022766,-5.61950731277466,62.6101608276367\n        ,-2.02238321304321,-5.5639181137085,62.6561889648438,-0.627221822738647,-3.81792235374451,61.6314811706543,1.93067765235901\n        ,-4.23066997528076,62.7958450317383,0.643227458000183,-4.50719594955444,62.3577041625977,0.684112071990967,-4.24381637573242\n        ,61.2449722290039,1.89936196804047,-4.83367252349854,60.567813873291,3.36426424980164,-4.02966737747192,60.8557052612305\n        ,3.31201100349426,-4.2675518989563,61.3561515808105,2.65948343276978,-5.05083751678467,61.1046981811523,2.70250844955444\n        ,-4.2227029800415,59.0873870849609,4.58839559555054,-3.1375093460083,59.3523139953613,4.54741859436035,-2.95601749420166\n        ,59.3083114624023,4.45222663879395,-1.78824007511139,59.4734725952148,4.38385057449341,-2.04711675643921,60.3847465515137\n        ,3.65144824981689,-3.29090762138367,60.1977424621582,3.68307900428772,0.571158766746521,60.8396873474121,5.0963306427002\n        ,-0.839762628078461,60.8675537109375,5.13892889022827,-0.867940545082092,59.7659683227539,5.27337598800659,0.544704496860504\n        ,59.7316017150879,5.23783779144287,-6.39116334915161,62.2082328796387,-0.568828225135803,-6.51852989196777,62.1134452819824\n        ,-1.99753320217133,-5.04658603668213,61.0131149291992,1.97637069225311,-5.38415002822876,62.0700721740723,0.693856477737427\n        ,-6.20381593704224,61.7258529663086,0.790133476257324,-5.95493364334106,60.6742477416992,2.05090570449829,-6.10866117477417\n        ,59.5777435302734,2.72402358055115,-5.58027458190918,59.5957260131836,2.72076964378357,-6.3722677230835,60.6542625427246\n        ,2.03971314430237,-2.61364102363586,58.3588180541992,5.07920122146606,-1.34503436088562,58.123950958252,5.24714374542236\n        ,-0.906973481178284,58.397289276123,5.45396566390991,0.50952011346817,58.3454170227051,5.40429639816284,-5.79731750488281\n        ,61.9858093261719,-3.4841206073761,-6.64396810531616,61.690299987793,-3.41667151451111,-6.98294544219971,60.5666580200195\n        ,1.96027648448944,-7.32416105270386,61.496711730957,0.851831436157227,-7.35325860977173,61.2873115539551,0.723838567733765\n        ,-6.97983884811401,60.3939323425293,1.76361238956451,-0.967165589332581,57.3445663452148,5.59643316268921,0.468669772148132\n        ,57.2876739501953,5.54235649108887,-7.52687740325928,56.2300033569336,3.33295869827271,-7.61058712005615,55.2209396362305\n        ,2.84668350219727,-7.5824499130249,55.3210792541504,3.7516176700592,-7.54807090759277,56.2279281616211,3.62562227249146\n        ,-7.93686151504517,58.7858695983887,-4.79697370529175,-8.15877056121826,58.8994178771973,-4.62168502807617,-8.16490364074707\n        ,58.9746856689453,-4.9071307182312,-7.90763759613037,58.8739242553711,-4.98211908340454,-7.96249437332153,53.4727363586426\n        ,1.87367284297943,-7.73882818222046,53.5761909484863,1.88744831085205,-8.21688365936279,53.0939102172852,0.0579092763364315\n        ,-8.36908531188965,53.0343475341797,0.124661922454834,-6.6935658454895,53.8076362609863,4.69332361221313,-7.47776079177856\n        ,55.1806678771973,3.96003985404968,-7.20041465759277,53.4745635986328,4.326331615448,-6.71329784393311,52.4803886413574\n        ,4.68359184265137,-6.11323595046997,55.6096496582031,-5.85344552993774,-5.36878347396851,53.065486907959,-5.65250778198242\n        ,-6.28663635253906,53.3525581359863,-5.50807046890259,-7.25142240524292,55.2232780456543,-5.57690858840942,-6.5656213760376\n        ,52.5676918029785,-4.90726852416992,-6.05972480773926,51.4805221557617,-4.63228845596313,-6.8934383392334,51.4382705688477\n        ,-4.08465576171875,-7.4780101776123,53.3036689758301,-4.63438510894775,-8.09913444519043,52.0839996337891,-1.7106853723526\n        ,-7.95109605789185,52.5316047668457,-3.3199098110199,-7.54325914382935,51.3055038452148,-3.03992581367493,-7.89064073562622\n        ,51.2711715698242,-1.57859110832214,-7.34243583679199,53.1391639709473,2.97148561477661,-7.72463750839233,52.8233032226563\n        ,1.86843764781952,-7.47193384170532,51.8114624023438,1.93101298809052,-6.97390651702881,52.0725975036621,3.13220763206482\n        ,-2.20823454856873,55.570972442627,6.08277320861816,-3.19988632202148,53.8476066589355,6.19407176971436,-1.59189522266388\n        ,52.2857933044434,6.59298801422119,0.0742019414901733,53.7155609130859,6.43243837356567,4.71617744857156e-010,52.2723007202148\n        ,6.92303466796875,-1.00653862953186,51.9871368408203,6.87207269668579,-4.69440269470215,51.794303894043,-5.06654739379883\n        ,-4.19027042388916,51.1079444885254,-4.80165195465088,-5.59660387039185,50.505672454834,-4.25932693481445,-6.42431688308716\n        ,50.2381935119629,-3.64198398590088,-7.11456871032715,50.1765480041504,-2.64489150047302,-7.54669952392578,50.2063140869141\n        ,-1.27075219154358,-7.87716817855835,51.4646224975586,0.311745405197144,-7.48381662368774,50.4245948791504,0.464674741029739\n        ,-7.13096857070923,50.6294746398926,2.01429176330566,-6.53003597259521,50.9027862548828,3.39372110366821,-6.73277521133423\n        ,52.2691230773926,4.57926988601685,-6.16375160217285,51.0633430480957,5.00885963439941,-3.75121450424194,50.402400970459\n        ,-4.5294942855835,-5.08280038833618,49.6628837585449,-3.84394526481628,-5.94112730026245,49.2127494812012,-3.15987420082092\n        ,-6.69155025482178,49.0641174316406,-2.19040656089783,-7.06008195877075,48.9655342102051,-0.943751931190491,-7.02285242080688\n        ,49.0458526611328,0.573255360126495,-6.71472215652466,49.3308906555176,2.09821772575378,-2.58982849121094,51.0738563537598\n        ,6.59774255752563,-3.55670809745789,49.7771186828613,6.5001277923584,-3.00732898712158,49.3212928771973,6.79382085800171\n        ,-2.01268601417542,50.7967338562012,6.85560035705566,-4.8608660697937,49.268138885498,-3.67571473121643,-5.84528207778931\n        ,48.3474311828613,-2.86911988258362,-6.37699604034424,48.1191711425781,-1.8216849565506,-6.74047231674194,48.0109062194824\n        ,-0.690343976020813,-6.82137680053711,47.9547233581543,0.649387001991272,-6.5790491104126,47.9910316467285,2.10321021080017\n        ,-6.25911617279053,49.4032783508301,3.64200615882874,-6.25825023651123,47.9997749328613,3.76795077323914,-6.06466388702393\n        ,49.4190444946289,4.19036960601807,-5.70988321304321,48.0457077026367,4.83566284179688,-5.44931507110596,49.5626525878906\n        ,5.51248121261597,-4.90697479248047,48.1723861694336,5.99959182739258,-6.3240818977356,46.956859588623,-1.68728196620941\n        ,-6.63816499710083,46.9563941955566,-0.538152992725372,-6.8033881187439,46.9570236206055,0.677780985832214,-6.67517471313477\n        ,46.9568824768066,2.0741720199585,-6.44183683395386,46.9564170837402,3.87416791915894,-5.754075050354,46.9542045593262\n        ,5.31309509277344,-4.68217277526855,46.987190246582,6.47571611404419,-6.23779010772705,46.8432464599609,-1.71466600894928\n        ,-5.16316509246826,46.4165267944336,-2.17705106735229,-6.20514297485352,46.4165267944336,-0.0732529982924461,-6.5817289352417\n        ,46.8283920288086,-0.480120033025742,-6.74122285842896,46.8339805603027,0.608999013900757,-6.32486486434937,46.4132232666016\n        ,2.05160284042358,-6.63257074356079,46.8119354248047,2.06915593147278,-6.11156702041626,46.4165267944336,3.76738452911377\n        ,-6.40335369110107,46.8159255981445,3.87055206298828,-5.7106761932373,46.8290824890137,5.30438184738159,-5.2943868637085\n        ,46.4165267944336,5.02039861679077,-5.7909722328186,52.3580474853516,5.50828695297241,-6.10384559631348,51.189281463623\n        ,5.15083789825439,-4.62400197982788,50.9104385375977,6.0946216583252,-5.3449330329895,49.7196502685547,5.73267936706543\n        ,-6.56144762039185,55.3431663513184,4.69130802154541,-7.36446571350098,56.6810684204102,3.84224009513855,-5.36580228805542\n        ,53.7305793762207,5.65301322937012,-3.89188385009766,52.3838729858398,6.17686653137207,-4.51043176651001,48.5544776916504\n        ,6.20510101318359,-5.98190259933472,56.9579467773438,4.80389547348022,-6.68937587738037,58.2481575012207,3.90044522285461\n        ,-4.60328149795532,55.290901184082,5.6990442276001,-4.99980068206787,57.5341339111328,4.98933744430542,-3.26686596870422\n        ,57.0321769714355,5.57355833053589,-3.75316452980042,58.0651702880859,5.14952659606934,-5.31166410446167,58.3614234924316\n        ,4.52154731750488,-6.15540170669556,58.9271240234375,3.77175760269165,-7.20317459106445,61.9830055236816,-1.89761126041412\n        ,-7.35737085342407,61.5284652709961,-3.30922079086304,-6.54331970214844,59.2050437927246,2.63021373748779,-6.27166366577148\n        ,58.902774810791,2.84936618804932,-6.29670572280884,58.9856071472168,2.92897891998291,-6.54550552368164,59.3159370422363\n        ,2.77967119216919,-1.39726603031158,60.5229339599609,3.58534479141235,-1.57510507106781,60.4082717895508,2.89312291145325\n        ,-2.00851607322693,60.4639854431152,3.49718189239502,-1.71285247802734,60.5445404052734,3.71867203712463,-1.78574860095978\n        ,60.459228515625,3.82921481132507,-1.48285102844238,59.5390167236328,4.49514532089233,-1.19663047790527,58.3662300109863\n        ,5.17178916931152,-3.87157917022705,47.958366394043,6.67540788650513,-0.636969029903412,60.8942604064941,4.83841991424561\n        ,-0.79024863243103,60.962833404541,5.07085466384888,0.457402557134628,60.361930847168,3.63983082771301,-1.26206767559052\n        ,60.3948707580566,3.71665692329407,-0.516775727272034,60.7121925354004,4.86698389053345,0.545945823192596,60.6655578613281\n        ,4.80527925491333,-1.90578651428223,50.7142028808594,6.84204292297363,-1.50750613212585,50.2555236816406,6.44407510757446\n        ,-0.874659955501556,51.203067779541,6.49364566802979,-0.924962282180786,51.8707618713379,6.86492204666138,-2.91349101066589\n        ,49.2260665893555,6.78605461120605,-3.75853896141052,47.8829345703125,6.66740846633911,-3.25709509849548,47.6898155212402\n        ,6.37078380584717,-2.45923495292664,48.8440284729004,6.41991806030273,-4.50668096542358,46.8707466125488,6.50796604156494\n        ,-4.11206912994385,46.4815940856934,6.28245401382446,-7.5585765838623,59.0654640197754,-5.5283989906311,-7.46995878219604\n        ,60.3856201171875,-4.44866323471069,-6.76721334457397,60.624568939209,-4.52078628540039,-6.14805173873901,58.5227699279785\n        ,-5.91488933563232,-8.05864524841309,60.3752021789551,-3.9132387638092,-8.06969451904297,60.5055313110352,-4.10362768173218\n        ,-0.00834100041538477,51.369815826416,6.50502157211304,1.2595011700256e-009,52.1202964782715,6.91541719436646,-5.90425300598145\n        ,46.973030090332,-2.72414398193359,-8.31435585021973,53.2308464050293,-2.7188241481781,-8.39944076538086,53.1169281005859\n        ,-2.95668482780457,-8.44471454620361,52.7640647888184,-1.54682695865631,-8.36096572875977,52.8903388977051,-1.48194587230682\n        ,-7.62678861618042,61.6284866333008,-0.48501443862915,-7.60568618774414,61.9373779296875,-0.485954850912094,-8.07814884185791\n        ,52.3394584655762,0.190092623233795,0.550290882587433,60.8882865905762,4.76571989059448,-1.7434366941452,50.909969329834\n        ,-5.18805742263794,-2.33943367004395,51.3982582092285,-5.23224210739136,-1.76871800422668,51.3153953552246,-5.25926828384399\n        ,-1.69533109664917,50.9382476806641,-5.19738101959229,-4.09396886825562,56.196460723877,-6.40887975692749,-3.05688333511353\n        ,52.6637115478516,-5.79943561553955,-4.14210891723633,52.8269729614258,-5.78603363037109,-5.18700265884399,55.8667755126953\n        ,-6.07534456253052,-5.05381393432617,60.7147941589355,-4.91381597518921,-5.34420251846313,58.4481544494629,-6.16356611251831\n        ,-5.99727916717529,60.7204170227051,-4.61755514144897,-4.70381879806519,62.4490394592285,-3.59227013587952,-1.3623218536377\n        ,64.8544158935547,-4.02434396743774,-2.69535136222839,64.7236633300781,-3.15585780143738,-2.63330173492432,64.7342224121094\n        ,-3.04266667366028,-1.30076444149017,64.8649139404297,-3.91433906555176,-2.93277454376221,64.6463317871094,-3.40469479560852\n        ,-1.52712595462799,64.7705841064453,-4.34073972702026,-1.74185812473297,63.4781951904297,-4.48097562789917,-3.31157374382019\n        ,63.4204177856445,-3.58641505241394,-7.94449377059937,61.180793762207,-3.00423622131348,-7.80348062515259,61.544132232666\n        ,-1.70561361312866,-7.8006796836853,61.8012619018555,-1.78784132003784,-7.95154476165771,61.3721466064453,-3.14195728302002\n        ,0.214391976594925,55.7572250366211,6.01338577270508,-3.25250649452209,49.7038879394531,-4.46880578994751,-4.53439283370972\n        ,48.4554710388184,-3.65794110298157,-4.01119709014893,48.0481262207031,-3.33346700668335,-7.51859521865845,58.8452682495117\n        ,-5.10757112503052,-6.20120143890381,58.3351211547852,-5.41772556304932,-6.19232892990112,57.6690216064453,-5.42325019836426\n        ,-7.71127843856812,56.8944816589355,-5.13498258590698,-6.16023826599121,57.5443153381348,-5.9100923538208,-5.33519744873047\n        ,57.9585075378418,-6.16003465652466,-1.66215860843658,50.8016624450684,-5.12652063369751,-4.62410402297974,48.569221496582\n        ,-3.68546104431152,-3.34473991394043,49.8112754821777,-4.51330900192261,-4.8910608291626,52.1097564697266,-5.17195892333984\n        ,-2.69803500175476,51.9790115356445,-5.39096403121948,-3.83595895767212,52.0539054870605,-5.2710337638855,-3.91096091270447\n        ,63.7480812072754,-0.699044585227966,-3.8998658657074,62.8821792602539,0.582818329334259,-3.79263281822205,62.8982276916504\n        ,0.564997851848602,-3.80441069602966,63.750545501709,-0.67096471786499,-3.5259120464325,61.7640151977539,1.78173208236694\n        ,-3.43862271308899,61.7851028442383,1.7415474653244,-3.04325079917908,60.1873435974121,2.77890586853027,-2.90677165985107\n        ,60.2012214660645,2.76055693626404,-5.70347547531128,60.2030410766602,3.3857159614563,-5.14836645126343,58.5717124938965\n        ,4.55252075195313,-5.91897249221802,60.7943534851074,2.75335693359375,-3.71688389778137,60.1887817382813,2.95689511299133\n        ,-3.28231477737427,60.2721557617188,3.00297999382019,-7.00085020065308,62.0723876953125,-0.526914358139038,-6.71971225738525\n        ,61.6056213378906,0.844036161899567,-5.56729745864868,59.691104888916,3.52987718582153,-5.71301651000977,59.4423065185547\n        ,3.64712882041931,-3.57847571372986,60.3826675415039,3.64219069480896,-3.41484713554382,60.31640625,3.62375426292419\n        ,-3.43720960617065,64.3827590942383,-2.05497550964355,-3.33806347846985,64.373649597168,-2.02164340019226,-7.5117359161377\n        ,56.8763389587402,-5.5517840385437,-7.51681709289551,55.0600738525391,-5.11080932617188,-8.18808746337891,56.4836807250977\n        ,-4.69205474853516,-8.17397975921631,56.5143508911133,-4.92143249511719,-8.42611789703369,56.3473014831543,-4.90101623535156\n        ,-8.42153263092041,56.3091087341309,-4.70873975753784,-4.25242900848389,63.668643951416,-0.809715628623962,-3.75736117362976\n        ,64.2761764526367,-2.15908741950989,-1.82880520820618,62.7808952331543,-4.68377876281738,-3.51832127571106,62.9156723022461\n        ,-3.66607904434204,-0.0918186083436012,61.6059226989746,-5.04513835906982,0.089295506477356,64.9278793334961,-3.91856741905212\n        ,-1.20361995697021,64.9284820556641,-3.66630864143372,-1.78249406814575,61.6841812133789,-4.69612216949463,-2.43641114234924\n        ,64.776237487793,-2.89365482330322,-3.68809533119202,61.2370948791504,-3.70195460319519,-3.11960220336914,64.4344711303711\n        ,-1.89050722122192,-4.29324579238892,61.4706230163574,-2.09579682350159,-4.03043651580811,60.6889381408691,-5.23682403564453\n        ,-3.69434881210327,62.3061599731445,-4.30991125106812,-1.99904704093933,61.890754699707,-5.26441860198975,-2.32371950149536\n        ,60.5881652832031,-6.12655019760132,-4.32064247131348,58.4800796508789,-6.37245512008667,-2.7642867565155,58.7345886230469\n        ,-7.30046129226685,-2.64850378036499,56.3666534423828,-6.92448711395264,-4.32152223587036,58.2924957275391,-6.41741704940796\n        ,-2.77837133407593,58.5525093078613,-7.33459043502808,-1.8128000497818,52.6286926269531,-5.84308671951294,-1.77487003803253\n        ,51.920768737793,-5.47106218338013,0.0356562063097954,64.7234802246094,-4.61506748199463,-1.38461744785309,64.9285125732422\n        ,-4.06673717498779,0.0609728880226612,64.8952407836914,-4.32138061523438,-2.71697616577148,64.7673110961914,-3.17705631256104\n        ,-3.46257162094116,64.443473815918,-2.06530833244324,-3.94199109077454,62.983268737793,0.581296861171722,-3.94407916069031\n        ,63.8352203369141,-0.665212631225586,-3.57530069351196,61.8030242919922,1.82063889503479,-3.06104803085327,60.3160057067871\n        ,2.79525184631348,-3.7186131477356,63.8903579711914,-0.602997303009033,-3.56484341621399,63.8104438781738,-0.593017041683197\n        ,-3.23749470710754,64.4939117431641,-1.95676457881927,-3.70114326477051,63.0644645690918,0.599607229232788,-3.36165261268616\n        ,61.9484100341797,1.65959894657135,-3.19595909118652,61.9603424072266,1.56978213787079,-3.56866765022278,63.0705299377441\n        ,0.546214044094086,-2.75167322158813,60.3334846496582,2.76962637901306,-2.56414723396301,60.1364898681641,2.75010204315186\n        ,0.0847144201397896,64.9677810668945,-4.00475406646729,-1.25541496276855,64.9892730712891,-3.77600860595703,-2.51733064651489\n        ,64.8335800170898,-2.96126484870911,0.0734657272696495,64.8587341308594,-4.12000608444214,-4.24810981750488,61.576530456543\n        ,-0.733366727828979,-3.94838953018188,61.1668014526367,0.518226802349091,-3.37294268608093,60.2822761535645,1.5179226398468\n        ,-2.91200637817383,59.3908653259277,2.5849940776825,-6.82584142684937,60.637638092041,2.02972936630249,-6.59677457809448\n        ,60.6480178833008,2.03354120254517,-6.9548020362854,61.5892181396484,0.870841264724731,-7.18994903564453,61.5924530029297\n        ,0.911215424537659,-7.22396469116211,62.0687561035156,-0.500075042247772,-7.47647523880005,62.0667533874512,-0.490093559026718\n        ,-7.61475467681885,61.5042686462402,-3.26833868026733,-7.74038124084473,60.527774810791,-4.30577659606934,-7.99301433563232\n        ,60.5206069946289,-4.27950382232666,-7.87079572677612,61.5232963562012,-3.24266457557678,-7.81935739517212,58.9824333190918\n        ,-5.09903573989868,-8.0924129486084,59.000919342041,-5.0706901550293,-7.83214282989502,58.866828918457,-5.02819395065308\n        ,-8.1098804473877,56.5675201416016,-4.97241449356079,-8.10898971557617,56.3552360534668,-5.11795043945313,-8.26838397979736\n        ,56.3286285400391,-5.13145208358765,-8.23261260986328,53.706787109375,-4.17268705368042,-8.0557107925415,53.6533622741699\n        ,-4.25916910171509,-8.14530372619629,52.7733764648438,-3.29093050956726,-8.30707454681396,52.8478546142578,-3.19642877578735\n        ,-8.27628803253174,52.3263549804688,-1.67589509487152,-8.42832279205322,52.4776878356934,-1.63117837905884,-8.18632793426514\n        ,52.5547828674316,0.146052852272987,-8.37635612487793,52.7546501159668,0.149770796298981,-7.51249170303345,53.3124504089355\n        ,2.78690814971924,-7.64465665817261,53.5720977783203,2.76785397529602,-7.95363235473633,53.2975158691406,1.8700042963028\n        ,-7.80556631088257,53.0341033935547,1.87100756168365,-6.48617029190063,59.484561920166,2.74641704559326,-6.29842090606689\n        ,59.5460929870605,2.73247408866882,-7.69457101821899,61.9715614318848,-1.835329413414,-8.43411827087402,55.0426902770996\n        ,-4.61854219436646,-8.34623622894287,55.1561393737793,-4.43017435073853,-7.64096307754517,60.1501045227051,-3.87785243988037\n        ,-7.49625825881958,61.0798950195313,-2.9828155040741,-7.35370254516602,61.4221534729004,-1.73613929748535,-7.17622709274292\n        ,61.5010375976563,-0.51791113615036,-6.91523408889771,61.202823638916,0.605588138103485,-6.57774353027344,60.3290176391602\n        ,1.66084718704224,-6.35670948028564,59.2731742858887,2.49360775947571,-7.50422096252441,53.8342018127441,2.74940204620361\n        ,-7.2566556930542,53.8614730834961,2.78290176391602,-7.49353122711182,53.6159477233887,1.90764617919922,-7.94503307342529\n        ,53.1864814758301,0.0282176788896322,-7.9549708366394,52.8700256347656,-1.50859487056732,-7.96328639984131,53.1706809997559\n        ,-2.78903388977051,-8.31184387207031,54.0695686340332,-3.66722226142883,-7.92632246017456,54.0190582275391,-3.66191935539246\n        ,-7.70141124725342,58.7751426696777,-4.54647636413574,-6.27638864517212,59.5400161743164,2.53925251960754,-6.50607967376709\n        ,60.5526657104492,1.92643594741821,-8.07038593292236,52.2434234619141,-1.69248294830322,-7.96759462356567,52.7209930419922\n        ,-3.31808614730835,-7.61819267272949,60.4214286804199,-4.24296760559082,-7.4810209274292,61.4227981567383,-3.22135496139526\n        ,-7.79561758041382,53.6034355163574,-4.36914300918579,-7.85904312133789,53.6684265136719,-4.26431846618652,-7.98485136032104\n        ,52.4866142272949,0.106641910970211,-7.42254686355591,53.2007141113281,2.78653001785278,-7.6494402885437,52.9461784362793\n        ,1.86628890037537,-7.57653474807739,58.8754005432129,-5.12168979644775,-7.72405338287354,58.9478569030762,-5.06216478347778\n        ,-7.11246538162231,61.9350814819336,-0.519005000591278,-7.32182884216309,61.8542060852051,-1.85933899879456,-6.84792947769165\n        ,61.4917144775391,0.795687735080719,-7.43170070648193,61.9802703857422,-1.8671942949295,-7.86005878448486,56.6191177368164\n        ,-5.02617025375366,-7.60842800140381,58.8298263549805,-5.02760219573975,-8.06415367126465,54.8332481384277,-4.83862638473511\n        ,-7.88765335083008,54.8009834289551,-4.77773761749268,-6.18232488632202,59.4378967285156,2.77493143081665,-7.85013294219971\n        ,56.4070434570313,-5.10472011566162,-7.81204700469971,54.7497901916504,-4.8719916343689,-7.95052146911621,56.4441223144531\n        ,-5.01730966567993,-8.27874279022217,54.9120445251465,-4.80373048782349,-8.25146007537842,56.3314056396484,-4.55567598342896\n        ,-7.93210744857788,54.9821128845215,-4.23069047927856,-7.95408296585083,56.4088516235352,-4.54346561431885,-7.97020149230957\n        ,56.5552177429199,-4.67629384994507,-7.72650098800659,58.7269325256348,-4.77987480163574,-7.64762830734253,53.7170715332031\n        ,2.75160121917725,-7.28203105926514,53.4123115539551,4.17407703399658,-4.18460321426392,46.4165229797363,6.23691034317017\n        ,-4.5854868888855,46.8244400024414,6.45518922805786,-8.3947172164917,53.9242362976074,-3.91152191162109,-7.25358581542969\n        ,53.5158271789551,2.94256782531738,-3.30491423606873,60.279857635498,3.50280833244324,-2.20571994781494,60.4498519897461\n        ,3.47556161880493,-5.74956703186035,59.5254211425781,3.4650239944458,-5.77024984359741,59.4889335632324,2.80213236808777\n        ,-5.85364294052124,46.8418388366699,-2.67328810691834,-6.75361680984497,58.3276672363281,3.71880674362183,-7.33256578445435\n        ,57.0262031555176,3.78657269477844,-6.23516368865967,58.9689674377441,3.59735703468323,-7.36459541320801,57.0623016357422\n        ,3.44520807266235,-7.56687450408936,56.1604690551758,2.89003968238831,-3.955890417099,56.2655372619629,2.80547332763672\n        ,-3.54599189758301,54.1063079833984,2.12714576721191,-6.78145313262939,58.3291358947754,3.44112706184387,-6.25753211975098\n        ,58.9583015441895,3.36031484603882,0.56591659784317,60.9374847412109,4.97343397140503,-3.91471815109253,60.7840843200684\n        ,-4.01472616195679,-4.06285715103149,59.9045066833496,-4.85574150085449,-4.18883037567139,53.0629119873047,-2.34154367446899\n        ,-4.15138673782349,53.1954498291016,-3.86174035072327,-4.19567823410034,53.9706230163574,-4.67239284515381,-4.24513530731201\n        ,54.9201240539551,-5.19692230224609,-4.33705139160156,56.3626861572266,-5.52872800827026,-4.16411161422729,58.473560333252\n        ,-5.76605749130249,-4.11923313140869,61.3103981018066,-2.24004507064819,-0.0120536936447024,63.4881744384766,-4.744140625\n        ,-0.0509749911725521,62.7385063171387,-4.96958208084106,-0.121715128421783,61.8404769897461,-5.5955662727356,-0.219929397106171\n        ,60.4644813537598,-6.40453100204468,-0.35008579492569,58.7120552062988,-7.50968503952026,-0.349118828773499,58.5352592468262\n        ,-7.54023218154907,-0.364377319812775,56.3196563720703,-7.08939933776855,-0.00144085090141743,52.6201858520508,-5.85287761688232\n        ,-1.02361262577233e-007,51.9188804626465,-5.5001220703125,-3.83015230909223e-006,51.363037109375,-5.26660108566284\n        ,-6.7137269070372e-005,50.9873809814453,-5.21520471572876,0.450963288545609,60.508602142334,3.4765157699585,0.404867559671402\n        ,60.425853729248,2.83471751213074,0.0632549822330475,64.8636856079102,-4.27300882339478,-0.000179281443706714,50.8601722717285\n        ,-5.14019870758057,-3.47588324546814,61.0890274047852,0.217192783951759,-3.13839221000671,60.2152214050293,1.27245187759399\n        ,-3.94175624847412,61.3892822265625,-1.02181816101074,-2.91735887527466,59.1593780517578,2.10521245002747,-2.83891701698303\n        ,58.7850646972656,2.45940685272217,-3.85023283958435,57.039306640625,3.17870736122131,-3.35745644569397,58.208324432373\n        ,3.05376410484314,5.02010917663574,62.7402877807617,-1.39398121833801,5.98073148727417,62.2920417785645,-1.40944695472717\n        ,5.84480476379395,62.2485504150391,-2.79916501045227,4.58750486373901,62.9180603027344,-2.72233581542969,4.53454971313477\n        ,61.3680229187012,1.36474180221558,4.92724514007568,60.9556922912598,1.27796185016632,5.0937385559082,62.0548629760742\n        ,0.0335866399109364,4.84226131439209,62.5096626281738,0.0284772422164679,5.66547679901123,60.236644744873,2.65287804603577\n        ,5.82473182678223,60.7616577148438,1.96561753749847,5.06012487411499,61.0619354248047,2.02747178077698,4.88142251968384\n        ,60.5746269226074,2.7082257270813,4.07134485244751,59.1249313354492,4.05896949768066,5.13338470458984,58.7922744750977\n        ,3.95445871353149,3.87628078460693,59.0928039550781,3.98929190635681,4.1595983505249,59.9627342224121,3.17825675010681\n        ,2.93709421157837,60.2275314331055,3.31373262405396,2.72253322601318,59.331241607666,4.07821607589722,1.9496830701828\n        ,59.6775894165039,5.08236646652222,1.97389197349548,60.7787818908691,4.94828033447266,6.77855348587036,61.7928314208984\n        ,-1.46116161346436,6.70602655410767,61.6963119506836,-2.89358234405518,5.71692848205566,60.6736068725586,1.24707210063934\n        ,6.60397052764893,60.2781143188477,1.19995760917664,6.74615859985352,61.3173828125,-0.0873100385069847,5.94421911239624\n        ,61.7127494812012,-0.0737143903970718,6.7779107093811,59.1712684631348,1.85087597370148,7.01390647888184,60.2320327758789\n        ,1.13271343708038,6.25608396530151,59.2223815917969,1.91877949237823,3.5621395111084,58.1640663146973,4.66100358963013\n        ,2.31515717506409,58.0082550048828,4.99951696395874,1.9252108335495,58.3083686828613,5.2624683380127,6.61228370666504\n        ,61.2721672058105,-4.31486797332764,5.78448820114136,61.620491027832,-4.26886224746704,7.6016001701355,60.1066246032715\n        ,0.972079873085022,7.56118869781494,59.9352760314941,0.778364241123199,7.84638595581055,60.8078804016113,-0.306033760309219\n        ,7.84799766540527,61.0181465148926,-0.17617954313755,1.84402525424957,57.2621192932129,5.42611074447632,7.84366416931152\n        ,56.018798828125,2.73109889030457,7.86818790435791,56.0672607421875,3.04531097412109,7.81051063537598,55.2174682617188\n        ,3.32655167579651,7.76036882400513,55.0956077575684,2.4961199760437,7.52259826660156,58.2982444763184,-5.84445095062256\n        ,7.47733116149902,58.3895835876465,-6.01985549926758,7.74510812759399,58.4728469848633,-5.98513507843018,7.77278757095337\n        ,58.396900177002,-5.70114850997925,8.0009765625,53.3985481262207,1.69253599643707,8.34988784790039,52.8600234985352\n        ,-0.242909118533134,8.18604564666748,52.8621520996094,-0.427325069904327,7.79039335250854,53.4825401306152,1.65745162963867\n        ,6.76972055435181,53.78125,4.58681106567383,6.74381017684937,52.4613380432129,4.63611125946045,7.25243473052979,53.4489440917969\n        ,4.23940467834473,7.68194818496704,55.0910224914551,3.6018500328064,5.40927171707153,55.2473602294922,-6.6052680015564\n        ,6.67838954925537,54.8764305114746,-6.32514047622681,6.1772665977478,53.3371505737305,-5.64527893066406,5.27864599227905\n        ,53.0355377197266,-5.73614311218262,6.51485586166382,52.558177947998,-4.9832935333252,7.3298282623291,53.212947845459\n        ,-4.86323070526123,6.85315132141113,51.4256782531738,-4.15692138671875,6.02868127822876,51.4665603637695,-4.66744089126587\n        ,8.04285430908203,51.997142791748,-1.87290894985199,7.8516902923584,51.2169647216797,-1.67703640460968,7.4989013671875\n        ,51.2678337097168,-3.12093544006348,7.84028339385986,52.4213790893555,-3.53092503547668,7.39905166625977,53.0712471008301\n        ,2.81852841377258,6.99802494049072,52.0388793945313,3.06340503692627,7.4852933883667,51.7712135314941,1.84239041805267\n        ,7.74805688858032,52.7701301574707,1.74453580379486,2.49818396568298,55.5261459350586,5.98455810546875,1.59213578701019\n        ,52.2858848571777,6.59295415878296,3.31338953971863,53.8208084106445,6.13590621948242,1.00655484199524,51.987133026123\n        ,6.87206411361694,4.69296979904175,51.7932968139648,-5.0672492980957,5.59105348587036,50.501651763916,-4.26247692108154\n        ,4.19015407562256,51.1079292297363,-4.80176305770874,6.42200231552124,50.2364692687988,-3.64404988288879,7.53672075271606\n        ,50.1936721801758,-1.29669344425201,7.11090564727783,50.1742286682129,-2.65364718437195,7.1360936164856,50.606201171875\n        ,1.96596682071686,7.47889614105225,50.4056777954102,0.423853397369385,7.86668872833252,51.4170875549316,0.213643938302994\n        ,6.53962087631226,50.8843116760254,3.36214828491211,6.75999784469604,52.2459869384766,4.53328800201416,6.17791032791138\n        ,51.0448303222656,4.98255777359009,5.08084535598755,49.6625213623047,-3.84669017791748,3.74644875526428,50.4024467468262\n        ,-4.53450059890747,5.94028806686401,49.2121620178223,-3.16044616699219,7.05950546264648,48.9649200439453,-0.944683134555817\n        ,6.69013833999634,49.0631523132324,-2.19327402114868,6.71513605117798,49.3276290893555,2.09133768081665,7.02219152450562\n        ,49.0446014404297,0.570955514907837,2.5901517868042,51.0738487243652,6.59761619567871,2.01463341712952,50.7975616455078\n        ,6.85545969009399,3.00734329223633,49.3213005065918,6.79381513595581,3.55670809745789,49.7771186828613,6.50012254714966\n        ,5.84528207778931,48.3474311828613,-2.86912393569946,4.86086177825928,49.2681350708008,-3.67572164535522,6.74047231674194\n        ,48.0109100341797,-0.690348029136658,6.37699508666992,48.1191711425781,-1.82168889045715,6.5790491104126,47.9910316467285\n        ,2.10320591926575,6.82137680053711,47.9547271728516,0.649383008480072,6.2605767250061,49.3998908996582,3.63599109649658\n        ,6.25825023651123,47.9997749328613,3.76794600486755,6.0664758682251,49.4155921936035,4.18459320068359,5.70988321304321\n        ,48.045711517334,4.83565807342529,5.45038986206055,49.5616111755371,5.51070880889893,4.90697479248047,48.1723861694336\n        ,5.999587059021,6.63816022872925,46.9563903808594,-0.53816032409668,6.3240818977356,46.956859588623,-1.68728601932526\n        ,6.67517042160034,46.9568786621094,2.07415676116943,6.80337762832642,46.9570121765137,0.677764475345612,6.44183683395386\n        ,46.9564170837402,3.87416291236877,5.754075050354,46.9542045593262,5.3130898475647,4.68217277526855,46.987190246582\n        ,6.47571086883545,6.23777198791504,46.8432350158691,-1.71467792987823,6.5817289352417,46.8283920288086,-0.480123966932297\n        ,6.20514297485352,46.4165267944336,-0.0732569992542267,5.16316509246826,46.4165267944336,-2.17705488204956,6.74122285842896\n        ,46.8339805603027,0.608995020389557,6.63257074356079,46.8119354248047,2.06915068626404,6.32486486434937,46.4132232666016\n        ,2.051598072052,6.40335369110107,46.8159294128418,3.8705472946167,6.11156702041626,46.4165267944336,3.76737928390503\n        ,5.7106761932373,46.8290863037109,5.30437707901001,5.29440116882324,46.4165306091309,5.02038335800171,5.82818698883057\n        ,52.3400382995605,5.46586132049561,6.11576223373413,51.1763458251953,5.13107061386108,4.62575817108154,50.9086380004883\n        ,6.09249019622803,5.34580421447754,49.7185516357422,5.73114681243896,6.88634872436523,55.2414398193359,4.26491832733154\n        ,7.81537961959839,56.4428901672363,3.10454225540161,5.42916774749756,53.7004776000977,5.59347772598267,3.90357780456543\n        ,52.3780746459961,6.16836404800415,4.51044845581055,48.5544815063477,6.20508909225464,6.60144710540771,56.7064781188965\n        ,4.13254833221436,7.42722702026367,57.8029670715332,2.94404196739197,4.89352321624756,55.1826019287109,5.48351907730103\n        ,5.78202342987061,57.2390213012695,4.32452249526978,4.67166042327881,57.801399230957,4.58475971221924,4.01073789596558\n        ,56.894344329834,5.16899347305298,6.15560865402222,57.9998016357422,3.74463558197021,6.92412900924683,58.5149536132813\n        ,2.88590669631958,7.38834810256958,61.5227546691895,-2.88627982139587,7.32209014892578,61.0654411315918,-4.30384731292725\n        ,7.17171764373779,58.7724380493164,1.70093142986298,7.20097732543945,58.8823394775391,1.84825837612152,6.95743131637573\n        ,58.6734466552734,2.02751755714417,6.91365003585815,58.4868774414063,1.95597612857819,2.29422402381897,60.406494140625\n        ,3.33521890640259,2.62562608718872,60.4076957702637,3.42470979690552,2.8831045627594,60.3096923828125,3.16574025154114\n        ,2.35357308387756,60.2916717529297,2.62549471855164,2.43926358222961,59.4155426025391,4.22939109802246,2.70725798606873\n        ,60.3175086975098,3.5247802734375,2.17027854919434,58.2606430053711,4.94453430175781,3.87157917022705,47.958366394043\n        ,6.67540216445923,1.73453235626221,60.8194580078125,4.67773103713989,1.92173361778259,60.8772926330566,4.8870964050293\n        ,1.60810160636902,60.6451683044434,4.7230052947998,2.17018938064575,60.2866172790527,3.4840943813324,1.90597474575043\n        ,50.7140579223633,6.8419189453125,0.925008773803711,51.8707427978516,6.86490345001221,0.874659955501556,51.203067779541\n        ,6.4936408996582,1.50750613212585,50.2555236816406,6.44406890869141,2.91349101066589,49.2260704040527,6.78604793548584\n        ,2.45935893058777,48.8440933227539,6.41992044448853,3.25709509849548,47.6898155212402,6.37077903747559,3.75853896141052\n        ,47.8829345703125,6.66740322113037,4.11207056045532,46.4815940856934,6.2824501991272,4.50787830352783,46.8712158203125\n        ,6.50769376754761,7.06748962402344,58.6041259765625,-6.51940870285034,5.58650636672974,58.1526374816895,-6.70998191833496\n        ,6.5185112953186,60.2055053710938,-5.42098045349121,7.20817947387695,59.9226379394531,-5.44320011138916,7.85527229309082\n        ,60.0032234191895,-5.18264484405518,7.86182594299316,59.8730316162109,-4.99195289611816,5.90363550186157,46.9726486206055\n        ,-2.72434210777283,8.0023193359375,52.8689422607422,-3.46774172782898,8.18311977386475,52.5618095397949,-2.12080335617065\n        ,8.31355285644531,52.5244979858398,-2.01270055770874,8.17157459259033,52.8635215759277,-3.48772740364075,7.97537708282471\n        ,61.1363525390625,-1.54216086864471,7.97375965118408,61.4459686279297,-1.54156196117401,8.06719875335693,52.2686042785645\n        ,0.0422511026263237,1.74116504192352,50.9104499816895,-5.18946409225464,1.69455194473267,50.938419342041,-5.19785785675049\n        ,1.76796686649323,51.315559387207,-5.25972318649292,2.33868432044983,51.3983879089355,-5.23276329040527,3.34593772888184\n        ,55.9631690979004,-6.91077470779419,4.4542236328125,55.5674438476563,-6.72269487380981,4.11547374725342,52.8102531433105\n        ,-5.79912376403809,3.04623699188232,52.662525177002,-5.80529499053955,4.7768440246582,60.404712677002,-5.57990789413452\n        ,5.75010442733765,60.3498764038086,-5.41351699829102,4.75339508056641,58.1296501159668,-6.84774398803711,4.71762418746948\n        ,62.1518669128418,-4.2306342124939,1.50592255592346,64.7639465332031,-4.21869039535522,1.46053183078766,64.7778167724609\n        ,-4.10143899917603,2.88753223419189,64.5600814819336,-3.41674184799194,2.93297648429871,64.5461273193359,-3.53721570968628\n        ,3.12937784194946,64.4551162719727,-3.81544661521912,3.40257287025452,63.2086334228516,-4.04134321212769,1.73337090015411\n        ,63.3685760498047,-4.71644878387451,1.62099945545197,64.6712875366211,-4.55404853820801,7.92197704315186,60.6803283691406\n        ,-4.07929086685181,7.9223952293396,60.8714447021484,-4.21751689910889,7.98260641098022,61.3034210205078,-2.85725903511047\n        ,7.9803261756897,61.0462760925293,-2.775066614151,3.25250363349915,49.7038879394531,-4.46881198883057,4.53436708450317\n        ,48.4554595947266,-3.65795111656189,4.00473260879517,48.0447540283203,-3.33397936820984,5.85138654708862,46.840446472168\n        ,-2.67395663261414,7.07243394851685,58.3854103088379,-6.09397554397583,7.17485189437866,56.4456405639648,-6.08475971221924\n        ,5.64443731307983,57.2957077026367,-6.22380256652832,5.69429159164429,57.9599113464355,-6.22372102737427,5.54111957550049\n        ,57.1751289367676,-6.69997549057007,4.7143702507019,57.6415023803711,-6.84087228775024,1.65925490856171,50.8022842407227\n        ,-5.12830448150635,4.62409734725952,48.5692176818848,-3.68546772003174,3.3447380065918,49.8112754821777,-4.51331520080566\n        ,4.89040231704712,52.1094703674316,-5.17248201370239,3.83429098129272,52.0528259277344,-5.27164268493652,2.69767594337463\n        ,51.9788131713867,-5.39102792739868,4.40495777130127,63.4857749938965,-1.2625036239624,4.30352926254272,63.4948043823242\n        ,-1.22033095359802,4.4049711227417,62.6396560668945,0.00955635961145163,4.5124077796936,62.6168365478516,0.012831655330956\n        ,4.14361429214478,61.5459403991699,1.22779977321625,4.23402643203735,61.5192489624023,1.25594413280487,3.65562963485718\n        ,59.9942283630371,2.31590938568115,3.79219460487366,59.971736907959,2.31575870513916,6.50562334060669,59.8179397583008\n        ,2.55847120285034,6.01156568527222,58.2197151184082,3.79637217521667,6.67060565948486,60.3972473144531,1.90033161640167\n        ,4.06411933898926,60.0404319763184,2.50520944595337,4.48241949081421,59.9301567077637,2.40133738517761,7.37859296798706\n        ,61.6188278198242,-1.50121402740479,7.25604486465454,61.1647911071777,-0.102911353111267,6.50256204605103,59.056999206543\n        ,2.81944441795349,6.35826969146729,59.3149490356445,2.721843957901,4.45006227493286,60.1294288635254,3.09820365905762\n        ,4.2816104888916,60.0736389160156,3.10226726531982,3.69943690299988,64.1516723632813,-2.49848079681396,3.79356122016907\n        ,64.1546859741211,-2.54490923881531,6.93305683135986,56.4514427185059,-6.45735263824463,7.1187219619751,54.7801704406738\n        ,-5.70982217788696,7.65068674087524,55.986930847168,-5.7503662109375,7.90676307678223,55.8224563598633,-5.73489713668823\n        ,7.90906000137329,55.8690299987793,-5.89676713943481,7.6163010597229,56.0209197998047,-5.96489715576172,4.72273540496826\n        ,63.3855476379395,-1.41784250736237,4.089439868927,64.0286712646484,-2.69076085090637,1.74827790260315,62.6680641174316\n        ,-4.92615270614624,3.56462407112122,62.6922607421875,-4.14599704742432,1.63201665878296,61.5764808654785,-4.92748069763184\n        ,1.40187895298004,64.8462982177734,-3.8428521156311,3.62237238883972,61.0065078735352,-4.19728803634644,2.7155454158783\n        ,64.6137237548828,-3.24273586273193,3.50488996505737,64.2255172729492,-2.33936190605164,4.45189476013184,61.1947822570801\n        ,-2.68833804130554,3.71968483924866,60.4444808959961,-5.7619457244873,1.90570795536041,60.4547576904297,-6.41312456130981\n        ,1.78253972530365,61.7714767456055,-5.52064943313599,3.61369633674622,62.0756454467773,-4.80508089065552,3.71505951881409\n        ,58.2266159057617,-6.91692638397217,2.06690287590027,58.582202911377,-7.62780857086182,1.87300276756287,56.233268737793\n        ,-7.22203969955444,2.06480956077576,58.3997421264648,-7.66275072097778,3.69810247421265,58.0395393371582,-6.9608006477356\n        ,1.80736494064331,52.627140045166,-5.84420299530029,1.77482128143311,51.9207649230957,-5.47108364105225,1.52690613269806\n        ,64.8366775512695,-4.26401567459106,2.95424270629883,64.5884246826172,-3.56131982803345,3.82105803489685,64.2137298583984\n        ,-2.55882334709167,4.44773387908936,63.5705223083496,-1.23381400108337,4.56020164489746,62.7150917053223,0.00521660875529051\n        ,4.29055643081665,61.5549163818359,1.28767418861389,3.820068359375,60.0989570617676,2.32900953292847,4.23661613464355\n        ,63.6394309997559,-1.14201641082764,3.61627316474915,64.2777328491211,-2.4211540222168,4.08088636398315,63.5692825317383\n        ,-1.11106669902802,4.32959079742432,62.8111572265625,0.0554711557924747,4.19177198410034,62.8257484436035,0.0203920770436525\n        ,3.89149308204651,61.7367897033691,1.08955907821655,4.06670093536377,61.7141036987305,1.15627789497375,3.31134176254272\n        ,59.9511604309082,2.35199689865112,3.51177382469177,60.1359214782715,2.34523463249207,1.44212925434113,64.9041900634766\n        ,-3.95878839492798,2.79005265235901,64.6661758422852,-3.32087755203247,4.59750556945801,61.2975196838379,-1.33271491527557\n        ,4.44407510757446,60.9020805358887,-0.050418708473444,3.9542498588562,60.0511589050293,1.02145600318909,3.58570837974548\n        ,59.1861000061035,2.14514493942261,7.46005249023438,60.1870269775391,1.06176793575287,7.72928524017334,61.1218643188477\n        ,-0.099658414721489,7.4911060333252,61.1335639953613,-0.107961818575859,7.23469543457031,60.211742401123,1.09636998176575\n        ,7.6026177406311,61.6010932922363,-1.50467109680176,7.85354232788086,61.5832023620605,-1.52880024909973,7.58060598373413\n        ,61.024974822998,-4.29792022705078,7.83845376968384,61.0277900695801,-4.30706691741943,7.75668811798096,60.0238265991211\n        ,-5.34664630889893,7.5037727355957,60.0469360351563,-5.33866596221924,7.37802457809448,58.5030746459961,-6.12875556945801\n        ,7.65302801132202,58.5042724609375,-6.13754463195801,7.5514497756958,56.0784530639648,-6.00459623336792,7.39580821990967\n        ,58.3873252868652,-6.05571556091309,7.56811094284058,55.8945083618164,-6.07503032684326,7.72437191009521,55.8604278564453\n        ,-6.10517883300781,7.94746828079224,53.4626121520996,-4.68562650680542,8.12087535858154,52.6563034057617,-3.59320259094238\n        ,7.98409414291382,52.6108474731445,-3.61697459220886,7.79246187210083,53.4315605163574,-4.71312999725342,8.32955551147461\n        ,52.3089904785156,-1.95941710472107,8.19500160217285,52.1938438415527,-1.93116629123688,8.35969161987305,52.6222801208496\n        ,-0.128375396132469,8.17062091827393,52.446907043457,-0.0797580704092979,7.54251289367676,53.2749137878418,2.70170998573303\n        ,7.8333420753479,52.9743881225586,1.73005509376526,7.98573923110962,53.232494354248,1.71330320835114,7.67541980743408\n        ,53.5338287353516,2.68187379837036,7.14839839935303,59.0544967651367,1.82258713245392,6.9647159576416,59.127742767334\n        ,1.83381080627441,7.88196182250977,61.4802398681641,-2.89073824882507,7.88646030426025,54.7431411743164,-5.30194425582886\n        ,8.00986385345459,54.6648483276367,-5.39890146255493,7.4752779006958,60.6076583862305,-3.99723291397095,7.43943119049072\n        ,59.6744346618652,-4.89964628219604,7.51739263534546,61.0375709533691,-1.51349818706512,7.52377939224243,60.9528846740723\n        ,-2.7441828250885,7.14563941955566,59.8961524963379,0.73099958896637,7.39199209213257,60.7515411376953,-0.363818407058716\n        ,6.97304630279541,58.852725982666,1.59043073654175,7.54417419433594,53.7861213684082,2.64293193817139,7.55737066268921\n        ,53.504020690918,1.63623857498169,7.32090377807617,53.7854270935059,2.61769080162048,7.75661754608154,52.5243797302246\n        ,-2.16908431053162,7.91260290145874,52.9445953369141,-0.47870346903801,7.62479257583618,52.7934036254883,-3.5379102230072\n        ,7.93610763549805,53.7130928039551,-4.43796062469482,7.46001863479614,53.6113471984863,-4.54856824874878,7.32284927368164\n        ,58.3012428283691,-5.56446504592896,6.91650867462158,59.1238822937012,1.64534842967987,7.12459278106689,60.1227226257324\n        ,1.00286984443665,7.82696485519409,52.5805435180664,-3.59217143058777,8.0003719329834,52.1331100463867,-1.9022125005722\n        ,7.38473224639893,59.9482002258301,-5.25951147079468,7.44957780838013,60.9518547058105,-4.23299884796143,7.60987138748169\n        ,53.4526710510254,-4.67666912078857,7.62339115142822,53.471435546875,-4.66339111328125,7.97040414810181,52.3984222412109\n        ,-0.0770895406603813,7.6742148399353,52.8929214477539,1.74059414863586,7.45490074157715,53.1620025634766,2.69405269622803\n        ,7.28658056259155,58.4743881225586,-6.07923126220703,7.12813520431519,58.4115791320801,-6.11802101135254,7.48142004013062\n        ,61.4747543334961,-1.50783348083496,7.50276231765747,61.386604309082,-2.86380004882813,7.36917638778687,61.0432739257813\n        ,-0.167612627148628,7.61826324462891,61.505558013916,-2.88692474365234,7.29809474945068,56.1448822021484,-6.0284366607666\n        ,7.17253828048706,58.3644065856934,-6.02467107772827,7.49792051315308,54.4862670898438,-5.41966819763184,7.64897298812866\n        ,54.4940605163574,-5.52677631378174,6.84884357452393,59.0268630981445,1.89198553562164,7.32031297683716,55.9670791625977\n        ,-6.02316665649414,7.46523427963257,54.4825439453125,-5.43019723892212,7.42112350463867,55.9880981445313,-5.96717405319214\n        ,7.85625123977661,54.5564002990723,-5.53066444396973,7.71944952011108,55.8298721313477,-5.62672662734985,7.40257692337036\n        ,54.5230598449707,-5.19606494903564,7.45128011703491,55.952320098877,-5.53696393966675,7.31318140029907,58.2525405883789\n        ,-5.79890871047974,7.67960977554321,53.6778106689453,2.66356253623962,7.33716917037964,53.3778991699219,4.07644844055176\n        ,4.58557033538818,46.8244705200195,6.45516347885132,4.18643522262573,46.4173583984375,6.2367730140686,8.0888032913208\n        ,53.643497467041,-4.51548433303833,7.30244922637939,53.4554786682129,2.81885719299316,4.15430736541748,60.0445747375488\n        ,2.99739599227905,3.07431745529175,60.2833061218262,3.11780214309692,6.51938056945801,59.1384315490723,2.63372302055359\n        ,6.42166137695313,59.0671195983887,1.94542253017426,7.88250541687012,56.670524597168,2.90646123886108,7.47096586227417\n        ,57.8794250488281,2.75547099113464,6.98250722885132,58.5520515441895,2.70177412033081,7.87610721588135,56.7039985656738\n        ,2.56541967391968,3.62003445625305,54.0705528259277,2.01497745513916,4.35950183868408,56.0360908508301,2.3617308139801\n        ,7.8411693572998,55.9505004882813,2.3005964756012,7.45279407501221,57.8907775878906,2.48846650123596,6.97201442718506\n        ,58.5410118103027,2.4639265537262,3.77591037750244,60.54150390625,-4.53581762313843,3.75388956069946,59.6579475402832\n        ,-5.38537883758545,3.87403392791748,53.0283088684082,-4.10121250152588,4.05640459060669,52.9318008422852,-2.49800205230713\n        ,3.67261528968811,53.7791290283203,-5.10175609588623,3.76318836212158,56.1157188415527,-6.03812885284424,3.62933421134949\n        ,54.6652641296387,-5.69135808944702,3.64157605171204,58.2273483276367,-6.29494380950928,4.25032615661621,61.0464019775391\n        ,-2.80713868141174,3.93137216567993,60.8553848266602,-0.284698814153671,3.68501901626587,59.9999961853027,0.810119271278381\n        ,4.24393701553345,61.1310844421387,-1.57645356655121,3.51242613792419,58.9565696716309,1.66955041885376,3.45302963256836\n        ,58.5907211303711,2.03509664535522,4.39278316497803,56.8092651367188,2.67253184318542,3.99217295646667,57.9946212768555\n        ,2.56758642196655,-1.9451812505722,48.5540313720703,7.05008602142334,-2.88036394119263,47.2062530517578,6.9493350982666\n        ,2.00000022232416e-006,47.285816192627,7.22094917297363,3.21344077747199e-006,48.5572471618652,7.20578908920288,-3.66780614852905\n        ,46.4437103271484,6.73270893096924,-2.98246002197266,47.3362045288086,6.8494701385498,-3.29654788970947,45.2115325927734\n        ,6.20724058151245,-2.97479510307312,45.3718414306641,6.77764701843262,-3.66930103302002,46.3445625305176,6.72885417938232\n        ,-4.11189603805542,46.3690757751465,6.27710723876953,-2.94320297241211,43.8507385253906,6.76719856262207,-2.94428610801697\n        ,45.2708053588867,6.77928829193115,-3.26226568222046,45.0992164611816,6.20986461639404,-3.16876101493835,43.85009765625\n        ,6.33915233612061,-0.557020604610443,50.877254486084,6.89918661117554,3.89344168070238e-005,50.9400787353516,6.95981454849243\n        ,-2.1163113117218,48.5933418273926,6.94620084762573,-1.17099833488464,49.9643783569336,6.95489454269409,-2.84906697273254\n        ,45.4440536499023,6.8901515007019,1.99999999495049e-006,45.4150581359863,7.22095012664795,-0.468086004257202,50.7088088989258\n        ,7.01618194580078,-1.0025759935379,49.9190406799316,7.05751132965088,1.99999999495049e-006,49.9196815490723,7.15778112411499\n        ,1.99999999495049e-006,50.7577705383301,7.07369613647461,-2.73341989517212,43.9191513061523,6.89355516433716,-2.80263996124268\n        ,45.261646270752,6.89093923568726,-2.79571104049683,43.9527893066406,6.89077138900757,-2.77869391441345,43.9286155700684\n        ,6.8909330368042,0.837190985679626,47.2849349975586,7.16878604888916,2.88017201423645,47.1976318359375,6.94976615905762\n        ,1.94533896446228,48.554027557373,7.05293798446655,0.838710308074951,48.5568695068359,7.1693868637085,2.98243093490601\n        ,47.3361625671387,6.84954833984375,3.54886031150818,46.446361541748,6.74474096298218,3.28606700897217,45.1828422546387\n        ,6.17913007736206,4.11189746856689,46.3690757751465,6.27710056304932,3.55020809173584,46.3415832519531,6.74072933197021\n        ,2.97079205513,45.372314453125,6.77908515930176,3.25704121589661,45.0800476074219,6.18504095077515,2.94356989860535\n        ,45.2685203552246,6.78080987930298,2.93479108810425,42.5988655090332,6.77791547775269,3.24675297737122,42.5850105285645\n        ,6.18504190444946,0.0936160013079643,40.4183006286621,6.31432294845581,1.80426895618439,40.7649269104004,6.17281484603882\n        ,1.56931388378143,40.8476257324219,6.78117704391479,0.0940760001540184,40.5215911865234,6.84962701797485,0.55705201625824\n        ,50.8772354125977,6.8991756439209,2.11631488800049,48.5933418273926,6.94620180130005,1.17104506492615,49.9643478393555\n        ,6.95486879348755,2.8494119644165,45.4549102783203,6.89148092269897,0.837190985679626,45.4196968078613,7.16878700256348\n        ,2.78077006340027,42.5592460632324,6.89321994781494,2.80284094810486,45.2339134216309,6.89408779144287,0.944576621055603\n        ,42.5303039550781,7.15080547332764,0.956659018993378,41.7727088928223,7.09940958023071,0.527495980262756,50.6699638366699\n        ,7.01148223876953,0.616011023521423,49.9191474914551,7.07405233383179,2.90801191329956,41.7502784729004,6.18008518218994\n        ,2.64309000968933,41.8141670227051,6.76414060592651,2.52337694168091,41.9013900756836,6.89366817474365,0.922152042388916\n        ,41.6571197509766,7.09069061279297,1.45313203334808,40.9517402648926,6.92551517486572,0.837190985679626,43.927433013916\n        ,7.16878604888916,0.813260972499847,42.7279319763184,7.16479253768921,0.15913499891758,40.6518440246582,6.99034643173218\n        ,0.794148981571198,41.5362701416016,7.07269096374512,0.0887290015816689,41.374153137207,7.05423450469971,0.0941329970955849\n        ,40.6955986022949,6.99861001968384,-3.13838791847229,42.6130409240723,6.32387399673462,-3.26221466064453,44.0694198608398\n        ,6.23347902297974,-3.24675226211548,42.5850143432617,6.18504285812378,-0.0795200020074844,40.4146957397461,6.32123184204102\n        ,-1.88202798366547,40.7029190063477,6.31644296646118,-1.95030295848846,40.6417236328125,6.1728138923645,0.00137399998493493\n        ,40.3522758483887,6.19228601455688,-2.90801095962524,41.6718215942383,6.18008518218994,-2.80467009544373,41.7286109924316\n        ,6.31891775131226,-0.0565429963171482,41.5774726867676,6.41380262374878,0.183767005801201,42.8373527526855,6.46496486663818\n        ,0.766995012760162,41.7014617919922,6.38969039916992,0.779220998287201,42.5201301574707,6.412926197052,-2.65576696395874\n        ,43.816291809082,6.35690927505493,-2.28221297264099,44.7476234436035,6.38247966766357,0.492428988218308,43.7169036865234\n        ,6.50650691986084,-2.34957098960876,44.7631492614746,6.80527067184448,-2.63184905052185,43.9335823059082,6.77300977706909\n        ,-2.75362801551819,43.8020896911621,6.76373910903931,-2.85343503952026,43.7929992675781,6.7601056098938,-3.08508396148682\n        ,43.7641830444336,6.34934329986572,0.0073039997369051,40.5181350708008,6.33164548873901,0.00711399968713522,40.6192741394043\n        ,6.86009168624878,0.0021959999576211,41.4194297790527,6.92533683776855,0.0886150002479553,41.5416145324707,6.93843269348145\n        ,0.752610981464386,41.6465682983398,6.96640920639038,0.839954078197479,41.7378120422363,6.97836208343506,0.829775989055634\n        ,42.4621353149414,7.02978610992432,0.308362007141113,42.9499549865723,7.01195287704468,0.592455983161926,43.6637420654297\n        ,7.0512809753418,0.548740029335022,43.797119140625,7.05331707000732,-2.22960901260376,44.834888458252,6.81731414794922\n        ,1.00222396850586,49.9190101623535,7.05242395401001,0.712882995605469,43.7436065673828,7.17660188674927,0.436836034059525\n        ,42.993408203125,7.14151620864868,0.44938200712204,42.8950881958008,7.1425633430481,0.760550975799561,42.5867233276367\n        ,7.03366994857788,0.349283695220947,42.8066101074219,7.01089096069336,-2.27854204177856,44.9713134765625,6.93464040756226\n        ,-2.4537980556488,44.838996887207,6.9288330078125,-2.66944789886475,43.828182220459,6.77966976165771,-3.48061609268188\n        ,46.3870391845703,6.85841941833496,3.36415982246399,46.3881607055664,6.86008977890015,0.129004999995232,41.4312324523926\n        ,7.06026840209961,0.650452017784119,43.8818321228027,7.17853546142578,0.00137400033418089,44.501277923584,6.19228839874268\n        ,-3.24675226211548,44.4756126403809,6.1850438117981,3.24675393104553,44.4756088256836,6.18504190444946,4.35723781585693\n        ,44.9269981384277,-3.06430101394653,4.20686101913452,44.5086288452148,-2.60326099395752,3.16264009475708,45.398624420166\n        ,-3.16831994056702,3.57114100456238,45.5947380065918,-3.45228695869446,5.55237007141113,43.980396270752,-2.19991302490234\n        ,6.67470979690552,43.9787368774414,-0.224023014307022,6.31194019317627,43.7362670898438,-0.0468970015645027,5.23977899551392\n        ,43.736270904541,-1.9288409948349,6.90005779266357,43.9754829406738,1.66610896587372,6.53845596313477,43.736270904541\n        ,1.6933468580246,6.47570991516113,43.9787483215332,3.77523016929626,6.11093282699585,43.736270904541,3.6173369884491\n        ,5.71423721313477,43.9800720214844,5.26094388961792,5.39516019821167,43.736270904541,5.00863409042358,4.5068302154541\n        ,43.0173568725586,6.71068477630615,3.8624849319458,44.0270805358887,6.72748899459839,3.86133074760437,43.2510986328125\n        ,6.73151302337646,4.1599760055542,43.0165672302246,6.75368595123291,4.41140079498291,45.0878067016602,-3.13809490203857\n        ,3.70397090911865,45.7253112792969,-3.48307609558105,3.6730170249939,46.5381202697754,-3.50487089157104,6.74866199493408\n        ,44.1178932189941,-0.262822985649109,5.61278676986694,44.1258735656738,-2.25409603118896,6.97845458984375,44.1179275512695\n        ,1.66033387184143,6.54842185974121,44.1179313659668,3.80660700798035,5.77661085128784,44.1179275512695,5.30757999420166\n        ,5.09513711929321,44.1158256530762,6.08221197128296,4.96704292297363,46.6533241271973,-2.9723949432373,4.23939514160156\n        ,47.4797668457031,-3.46190404891968,5.6166729927063,46.0167655944824,-2.27231693267822,6.7576265335083,46.0249862670898\n        ,-0.307812005281448,6.98658800125122,46.0249862670898,1.64253485202789,6.54742813110352,46.023365020752,3.82207179069519\n        ,5.7770791053772,46.0249862670898,5.30545997619629,4.52522087097168,45.9979934692383,6.61583089828491,5.02412891387939\n        ,46.6864738464355,-2.82322406768799,4.2154974937439,47.717903137207,-3.42620491981506,6.68231153488159,46.1601257324219\n        ,-0.273110002279282,5.52933979034424,46.1710929870605,-2.25459098815918,6.90578651428223,46.1637344360352,1.66331815719604\n        ,6.4721794128418,46.1696243286133,3.81302690505981,5.71073007583618,46.1610069274902,5.26226902008057,5.20670795440674\n        ,43.9803771972656,5.83740520477295,5.0913519859314,43.7362670898438,5.42968511581421,4.50698804855347,44.0270805358887\n        ,6.71417999267578,3.87607789039612,44.9406585693359,6.71766185760498,4.46607112884521,46.162181854248,6.55947113037109\n        ,3.26401996612549,44.0270805358887,6.30392122268677,3.26221466064453,43.1915435791016,6.26908779144287,3.69603180885315\n        ,43.2056159973145,6.66914415359497,3.70050883293152,44.0270805358887,6.67167663574219,3.69871997833252,44.9089088439941\n        ,6.65976047515869,3.73038101196289,45.0226974487305,6.6564416885376,4.39459419250488,46.1120834350586,6.60449552536011\n        ,4.1795129776001,42.9080085754395,6.08973979949951,4.4638237953186,42.9240798950195,6.62885093688965,4.05561113357544\n        ,42.9231109619141,6.67985582351685,3.63112378120422,42.9080848693848,6.22523784637451,4.89740705490112,43.4067001342773\n        ,5.70116996765137,5.05598783493042,43.6971015930176,6.0030779838562,4.99314498901367,43.2068557739258,6.0667781829834\n        ,4.90012121200562,43.1914596557617,5.69916915893555,3.52447295188904,45.694995880127,-3.47522020339966,3.12204694747925\n        ,45.4987182617188,-3.1952600479126,3.47449827194214,46.5611686706543,-3.49852108955383,4.12536478042603,47.728214263916\n        ,-3.46878504753113,3.50353479385376,46.6779747009277,-3.49861788749695,4.75802898406982,42.9235229492188,6.33804559707642\n        ,4.64909791946411,42.9079895019531,5.87496423721313,5.02522420883179,43.937801361084,6.16055011749268,4.76127290725708\n        ,43.0176582336426,6.45881605148315,4.95539808273315,43.2558250427246,6.22033405303955,6.31194019317627,46.048698425293\n        ,-0.0468959994614124,5.23977899551392,46.048698425293,-1.9288409948349,6.53845596313477,46.048698425293,1.69334900379181\n        ,6.11093282699585,46.048698425293,3.6173369884491,5.39516019821167,46.048698425293,5.00863313674927,4.20467329025269\n        ,46.8199806213379,-2.60328888893127,5.0913519859314,46.048698425293,5.42968320846558,4.64909791946411,45.2204208374023\n        ,5.87496185302734,3.63112378120422,45.220516204834,6.22523498535156,4.90012121200562,45.5038909912109,5.69916582107544\n        ,3.63112378120422,44.0643005371094,6.22523641586304,4.64909791946411,44.0360984802246,5.87496280670166,4.18724584579468\n        ,44.0952682495117,6.05039691925049,4.17664241790771,45.2204666137695,6.0375280380249,-4.35723781585693,44.9269981384277\n        ,-3.06429600715637,-3.57114100456238,45.5947341918945,-3.45228290557861,-3.16264033317566,45.3986282348633,-3.16831612586975\n        ,-4.20686149597168,44.5086250305176,-2.60325527191162,-5.55237007141113,43.980396270752,-2.1999089717865,-5.23977899551392\n        ,43.736270904541,-1.92883586883545,-6.31194114685059,43.7362670898438,-0.0468919984996319,-6.67470979690552,43.9787368774414\n        ,-0.224019005894661,-6.90005731582642,43.9754791259766,1.66611385345459,-6.53845596313477,43.7362670898438,1.69335186481476\n        ,-6.47570991516113,43.9787483215332,3.77523493766785,-6.11093282699585,43.736270904541,3.61734175682068,-5.71423721313477\n        ,43.9800682067871,5.26094913482666,-5.39516019821167,43.736270904541,5.00863885879517,-3.86133074760437,43.2510986328125\n        ,6.73151588439941,-3.8624849319458,44.0270805358887,6.72749376296997,-4.5068302154541,43.0173568725586,6.71069049835205\n        ,-4.1599760055542,43.0165634155273,6.75369119644165,-3.6730170249939,46.5381202697754,-3.50486707687378,-3.70397090911865\n        ,45.7253112792969,-3.48307180404663,-4.41140079498291,45.0878067016602,-3.13809108734131,-5.61278676986694,44.1258735656738\n        ,-2.25409197807312,-6.74866199493408,44.1178932189941,-0.262818992137909,-6.97845458984375,44.1179275512695,1.66033899784088\n        ,-6.54842185974121,44.1179275512695,3.80661201477051,-5.77661085128784,44.1179275512695,5.30758476257324,-5.09513711929321\n        ,44.1158256530762,6.08221578598022,-4.96704292297363,46.6533241271973,-2.97239089012146,-4.23939514160156,47.4797630310059\n        ,-3.46189999580383,-5.6166729927063,46.0167655944824,-2.27231311798096,-6.7576265335083,46.0249824523926,-0.307808011770248\n        ,-6.98658990859985,46.0249977111816,1.64253950119019,-6.5467529296875,46.0249862670898,3.82645010948181,-5.7770791053772\n        ,46.0249862670898,5.30546522140503,-4.52522087097168,45.997989654541,6.61583709716797,-4.21549797058105,47.717903137207\n        ,-3.42620134353638,-5.02412891387939,46.6864738464355,-2.82322001457214,-5.52933979034424,46.1710929870605,-2.25458693504334\n        ,-6.68231153488159,46.1601219177246,-0.273106008768082,-6.90578651428223,46.1637344360352,1.66332304477692,-6.4721794128418\n        ,46.1696243286133,3.81303095817566,-5.71073007583618,46.1610069274902,5.26227378845215,-5.0913519859314,43.7362670898438\n        ,5.42968893051147,-5.20670700073242,43.9803771972656,5.83740901947021,-4.50698804855347,44.0270805358887,6.71418523788452\n        ,-3.87607789039612,44.9406547546387,6.71766710281372,-4.46607112884521,46.162181854248,6.55947637557983,-3.70050883293152\n        ,44.0270805358887,6.67168140411377,-3.69603180885315,43.2056159973145,6.66914796829224,-3.26221466064453,43.1915435791016\n        ,6.26909208297729,-3.69871997833252,44.9089088439941,6.65976428985596,-4.39459419250488,46.1120834350586,6.60450220108032\n        ,-3.73038101196289,45.0226974487305,6.65644645690918,-4.1795129776001,42.9080085754395,6.08974409103394,-3.63112378120422\n        ,42.9080848693848,6.22524213790894,-4.05561113357544,42.9231109619141,6.67986106872559,-4.4638237953186,42.9240798950195\n        ,6.62885522842407,-4.89740705490112,43.4067001342773,5.70117378234863,-4.90012121200562,43.1914596557617,5.69917297363281\n        ,-4.99314498901367,43.2068557739258,6.06678199768066,-5.05598783493042,43.6970977783203,6.00308179855347,-3.52447295188904\n        ,45.6949920654297,-3.47521591186523,-3.47449827194214,46.5611686706543,-3.49851703643799,-3.12204694747925,45.4987144470215\n        ,-3.19525599479675,-3.50353479385376,46.6779747009277,-3.49861311912537,-4.12536478042603,47.728214263916,-3.46878027915955\n        ,-4.75802898406982,42.9235229492188,6.338050365448,-4.64909791946411,42.9079895019531,5.87496900558472,-4.76127290725708\n        ,43.0176582336426,6.45881986618042,-5.02522420883179,43.937801361084,6.16055393218994,-4.95539808273315,43.2558250427246\n        ,6.22033786773682,-6.31194114685059,46.048698425293,-0.0468919984996319,-5.23977947235107,46.048698425293,-1.92883563041687\n        ,-6.53845596313477,46.0486946105957,1.69335401058197,-6.11093282699585,46.048698425293,3.61734104156494,-5.39516019821167\n        ,46.048698425293,5.00863790512085,-4.21931791305542,46.8235893249512,-2.58396697044373,-5.0913519859314,46.048698425293\n        ,5.42968797683716,-4.64909791946411,45.2204170227051,5.87496709823608,-3.63112378120422,45.220516204834,6.2252402305603\n        ,-4.90012121200562,45.5038909912109,5.69917106628418,-3.26221466064453,45.2414894104004,6.18593168258667,2.03844881057739\n        ,68.1314392089844,4.71636962890625,2.05418825149536,68.0794219970703,4.76884031295776,2.12670016288757,68.0813217163086\n        ,4.76280927658081,2.13114523887634,68.1338043212891,4.70866203308105,2.19507813453674,68.0568237304688,4.75808525085449\n        ,2.25008773803711,68.0092468261719,4.75530862808228,2.28430032730103,67.9450073242188,4.75485610961914,2.29309630393982\n        ,67.8727798461914,4.75678539276123,2.27528381347656,67.8023223876953,4.76083755493164,2.32086563110352,67.7770233154297\n        ,4.70616626739502,2.23327350616455,67.7431411743164,4.76646614074707,2.26711440086365,67.701416015625,4.71336317062378\n        ,2.17273592948914,67.7032470703125,4.77291059494019,2.10184621810913,67.6880340576172,4.77929925918579,2.03018355369568\n        ,67.6995162963867,4.78476858139038,2.00745582580566,67.6458053588867,4.73675870895386,1.96742045879364,67.7361755371094\n        ,4.78858423233032,1.92725241184235,67.6927185058594,4.74163007736206,1.92203557491302,67.7930603027344,4.79022836685181\n        ,1.86928141117096,67.7654724121094,4.74372434616089,1.90016043186188,67.8624725341797,4.78947591781616,1.84137117862701\n        ,67.8542327880859,4.74275922775269,1.90474617481232,67.9350509643555,4.78643226623535,1.847292304039,67.9470062255859\n        ,4.73886489868164,1.93517506122589,68.0009918212891,4.7815089225769,1.88624346256256,68.0312652587891,4.73256587982178\n        ,1.98733770847321,68.0513763427734,4.77536773681641,1.95296609401703,68.0956497192383,4.72471523284912,2.07810592651367\n        ,67.9858093261719,4.81110239028931,2.11499071121216,67.9867706298828,4.80803298950195,2.14977192878723,67.9743194580078\n        ,4.80562925338745,2.17775440216064,67.9501266479492,4.80421733856201,2.19515538215637,67.9174423217773,4.80398750305176\n        ,2.19962882995605,67.8806915283203,4.80496883392334,2.19057011604309,67.8448638916016,4.80702972412109,2.16919946670532\n        ,67.8147659301758,4.80989170074463,2.1384072303772,67.7944564819336,4.81317090988159,2.1023485660553,67.7867279052734\n        ,4.81642007827759,2.06589555740356,67.7925643920898,4.81920480728149,2.03397178649902,67.8112258911133,4.82114267349243\n        ,2.01088571548462,67.8401565551758,4.82197904586792,1.99975907802582,67.8754653930664,4.82159662246704,2.00209093093872\n        ,67.9123840332031,4.82005023956299,2.01756978034973,67.945930480957,4.81754398345947,2.04410243034363,67.9715576171875\n        ,4.81442022323608,2.26357483863831,68.1887893676758,4.60977554321289,2.14037084579468,68.2330932617188,4.61827802658081\n        ,2.21853685379028,68.1024398803711,4.70262718200684,2.36262941360474,68.1028823852539,4.60478496551514,2.28882169723511\n        ,68.0415725708008,4.69908380508423,2.42415642738342,67.9870071411133,4.60398387908936,2.33250641822815,67.9594192504883\n        ,4.69850826263428,2.43984627723694,67.8567886352539,4.60747480392456,2.34369158744812,67.8670883178711,4.70098161697388\n        ,2.40758061408997,67.7298278808594,4.61479139328003,2.33171582221985,67.6232604980469,4.62494516372681,2.22249889373779\n        ,67.5514907836914,4.63656139373779,2.18969225883484,67.6504592895508,4.72160148620605,2.0946786403656,67.5241928100586\n        ,4.6480770111084,2.09906029701233,67.6310577392578,4.72976684570313,1.96552002429962,67.5450668334961,4.65792894363403\n        ,1.85246551036835,67.6113052368164,4.66479301452637,1.77078425884247,67.7139358520508,4.66774082183838,1.73150682449341\n        ,67.8391189575195,4.66637134552002,1.73993837833405,67.9699325561523,4.66087293624878,1.79494035243988,68.0887222290039\n        ,4.6519889831543,1.88908398151398,68.1794357299805,4.64091300964355,2.00965571403503,68.2298355102539,4.62914705276489\n        ,2.29062795639038,68.2429504394531,4.53268909454346,2.14468884468079,68.2954483032227,4.54275846481323,2.40796232223511\n        ,68.1412124633789,4.52677392959595,2.48084354400635,68.0039367675781,4.52582359313965,2.49942827224731,67.8496780395508\n        ,4.52996158599854,2.46120810508728,67.6992874145508,4.53862953186035,2.37134337425232,67.5730590820313,4.55065488815308\n        ,2.24197125434875,67.488037109375,4.56441736221313,2.0905647277832,67.4557037353516,4.57805633544922,1.93757116794586\n        ,67.4804458618164,4.5897274017334,1.80365431308746,67.5588989257813,4.59785890579224,1.70689928531647,67.6804809570313\n        ,4.60134840011597,1.66037392616272,67.8287658691406,4.59972667694092,1.67036104202271,67.9837188720703,4.59321308135986\n        ,1.7355135679245,68.1244354248047,4.58268737792969,1.84703052043915,68.2318878173828,4.56956911087036,1.98985159397125\n        ,68.2915802001953,4.55563402175903,2.30957412719727,68.2843017578125,4.44576740264893,2.1458683013916,68.3431777954102\n        ,4.45706796646118,2.44119143486023,68.170166015625,4.43913745880127,2.52294492721558,68.0161819458008,4.43807029724121\n        ,2.54379224777222,67.8431625366211,4.44271183013916,2.50091958045959,67.6744613647461,4.45243501663208,2.40011501312256\n        ,67.5328598022461,4.4659252166748,2.25499439239502,67.4374923706055,4.48136138916016,2.08515572547913,67.4012222290039\n        ,4.49665832519531,1.91353785991669,67.4289703369141,4.50975227355957,1.76331794261932,67.516975402832,4.51887226104736\n        ,1.65478467941284,67.6533584594727,4.52278709411621,1.60259556770325,67.8196868896484,4.52097129821777,1.61379909515381\n        ,67.9935073852539,4.51366329193115,1.68688297271729,68.1513519287109,4.50185585021973,1.81197583675385,68.2718963623047\n        ,4.48714160919189,1.97218191623688,68.3388442993164,4.47150850296021,2.32086038589478,68.3233871459961,4.25451898574829\n        ,2.13876128196716,68.3888778686523,4.26708793640137,2.46726417541504,68.1964263916016,4.24714183807373,2.55820322036743\n        ,68.0251541137695,4.24595880508423,2.58139300346375,67.8326797485352,4.25111961364746,2.53370261192322,67.64501953125\n        ,4.26193523406982,2.4215726852417,67.4875183105469,4.27694129943848,2.26014852523804,67.3814315795898,4.29411125183105\n        ,2.07122921943665,67.3410949707031,4.31112957000732,1.88032972812653,67.3719635009766,4.32569408416748,1.71323370933533\n        ,67.4698486328125,4.33583784103394,1.59250628948212,67.6215515136719,4.34019422531128,1.53445327281952,67.8065719604492\n        ,4.33817100524902,1.54691541194916,67.9999160766602,4.33004283905029,1.62820971012115,68.1754989624023,4.31690883636475\n        ,1.7673567533493,68.3095779418945,4.30053997039795,1.94556367397308,68.3840560913086,4.28315162658691,2.10303449630737\n        ,67.8890228271484,4.85801267623901,-0.401673823595047,68.2626037597656,4.81145429611206,-0.333675175905228,68.2515182495117\n        ,4.80779314041138,-0.492083430290222,68.2955322265625,4.76572847366333,-0.469050973653793,68.2483596801758,4.81560564041138\n        ,-0.565762519836426,68.2473220825195,4.7709493637085,-0.526709139347076,68.210693359375,4.81968927383423,-0.566860020160675\n        ,68.1547012329102,4.82315301895142,-0.584085166454315,68.0879287719727,4.82552909851074,-0.6286860704422,68.0027618408203\n        ,4.7796425819397,-0.576050519943237,68.019416809082,4.82649564743042,-0.587471961975098,67.9247817993164,4.77890682220459\n        ,-0.54384970664978,67.9583969116211,4.82592344284058,-0.520929932594299,67.8669509887695,4.7763032913208,-0.491825878620148\n        ,67.9131240844727,4.82388973236084,-0.438049018383026,67.8370819091797,4.77218246459961,-0.427004039287567,67.8897171020508\n        ,4.82066822052002,-0.350022345781326,67.8391876220703,4.76710271835327,-0.358147501945496,67.8913116455078,4.81669425964355\n        ,-0.268739879131317,67.8729934692383,4.76174640655518,-0.29454579949379,67.917724609375,4.81250524520874,-0.205177009105682\n        ,67.9339447021484,4.75684022903442,-0.244792744517326,67.9653625488281,4.80866718292236,-0.167918771505356,68.0137939453125\n        ,4.75304555892944,-0.215609461069107,68.0278167724609,4.80569553375244,-0.210934340953827,68.0966186523438,4.80399560928345\n        ,-0.231399670243263,68.1625137329102,4.80379486083984,-0.243023544549942,68.2550659179688,4.75231981277466,-0.274243175983429\n        ,68.2165756225586,4.80512046813965,-0.397167980670929,68.1712265014648,4.85259628295898,-0.362578332424164,68.1655883789063\n        ,4.85073518753052,-0.431439906358719,68.1639862060547,4.85470724105835,-0.460768967866898,68.1448211669922,4.85678434371948\n        ,-0.481190860271454,68.1163482666016,4.85854816436768,-0.489952266216278,68.0823822021484,4.85975456237793,-0.485866904258728\n        ,68.0475311279297,4.8602466583252,-0.469486117362976,68.016487121582,4.85995531082153,-0.443025648593903,67.9934463500977\n        ,4.85892200469971,-0.410052180290222,67.981559753418,4.85728168487549,-0.375026494264603,67.9823760986328,4.85526323318481\n        ,-0.342675715684891,67.9958038330078,4.85312986373901,-0.317367970943451,68.0200347900391,4.85117816925049,-0.302523404359818\n        ,68.0517959594727,4.8496675491333,-0.30014505982399,68.086799621582,4.84880304336548,-0.310555160045624,68.1203155517578\n        ,4.84870004653931,-0.332347273826599,68.147819519043,4.84937334060669,-0.405963122844696,68.3137969970703,4.76042127609253\n        ,-0.413887143135071,68.4289398193359,4.67132329940796,-0.541986584663391,68.4016723632813,4.67922115325928,-0.65154641866684\n        ,68.3299026489258,4.68698501586914,-0.617045938968658,68.1757125854492,4.77537441253662,-0.727770805358887,68.2233047485352\n        ,4.69356727600098,-0.639008700847626,68.0903472900391,4.77840995788574,-0.760363519191742,68.0962982177734,4.69807577133179\n        ,-0.744924187660217,67.9660186767578,4.69990539550781,-0.68353796005249,67.8500595092773,4.69880676269531,-0.584494113922119\n        ,67.7640991210938,4.69492959976196,-0.461170017719269,67.7197189331055,4.68879699707031,-0.330221712589264,67.7229461669922\n        ,4.68123626708984,-0.209333449602127,67.773323059082,4.67326974868774,-0.114833027124405,67.8640441894531,4.66597318649292\n        ,-0.0594805926084518,67.9828796386719,4.66033124923706,-0.161998301744461,68.1017684936523,4.7508749961853,-0.0507552772760391\n        ,68.1137466430664,4.65710687637329,-0.188213258981705,68.1859817504883,4.7506217956543,-0.0898344367742538,68.2389984130859\n        ,4.65673589706421,-0.171438992023468,68.3417053222656,4.65926599502563,-0.319029599428177,68.2996673583984,4.75573968887329\n        ,-0.284548223018646,68.4080123901367,4.66435813903809,-0.419725298881531,68.4932861328125,4.59760236740112,-0.571463823318481\n        ,68.4609832763672,4.60695934295654,-0.70124226808548,68.3759689331055,4.61615180969238,-0.791532039642334,68.2497024536133\n        ,4.62395000457764,-0.830140590667725,68.099250793457,4.62929105758667,-0.811852097511292,67.9449310302734,4.63145875930786\n        ,-0.739137053489685,67.8075790405273,4.63015794754028,-0.621815919876099,67.7057495117188,4.62556457519531,-0.475735068321228\n        ,67.653190612793,4.6183009147644,-0.32062166929245,67.6569976806641,4.60934495925903,-0.17742520570755,67.716667175293\n        ,4.59990930557251,-0.0654841512441635,67.8241500854492,4.59126472473145,8.11517238616943e-005,67.9648971557617,4.58458089828491\n        ,0.0104170143604279,68.1199264526367,4.58076286315918,-0.0358732938766479,68.2682876586914,4.58032131195068,-0.132537245750427\n        ,68.3899536132813,4.58331823348999,-0.266519635915756,68.4684753417969,4.58935165405273,-0.425818026065826,68.5429992675781\n        ,4.51325798034668,-0.596028089523315,68.5067749023438,4.5237512588501,-0.741604566574097,68.4114074707031,4.53406715393066\n        ,-0.842885971069336,68.2697677612305,4.54281139373779,-0.886193156242371,68.1010131835938,4.54880475997925,-0.865679383277893\n        ,67.9279022216797,4.55123567581177,-0.784112572669983,67.7738265991211,4.54977703094482,-0.652509689331055,67.6595993041992\n        ,4.54462480545044,-0.488645672798157,67.6006393432617,4.53647327423096,-0.314649075269699,67.6049194335938,4.52642869949341\n        ,-0.154019773006439,67.6718597412109,4.51584339141846,-0.0284524857997894,67.7924118041992,4.50614738464355,0.045093297958374\n        ,67.9502868652344,4.49865293502808,0.0566878318786621,68.1241989135742,4.49436807632446,0.00476294755935669,68.2906188964844\n        ,4.49387311935425,-0.103666737675667,68.4271087646484,4.49723625183105,-0.253960758447647,68.5151901245117,4.50400161743164\n        ,-0.437931269407272,68.5923614501953,4.32444953918457,-0.627265989780426,68.5520629882813,4.33612251281738,-0.789196729660034\n        ,68.4459838867188,4.3475980758667,-0.901857972145081,68.2884292602539,4.35732746124268,-0.950031757354736,68.1007080078125\n        ,4.36399078369141,-0.92721152305603,67.9081573486328,4.36669635772705,-0.836480498313904,67.7367706298828,4.36507177352905\n        ,-0.690092802047729,67.6097183227539,4.35933971405029,-0.507818579673767,67.5441284179688,4.3502779006958,-0.314273238182068\n        ,67.5488815307617,4.33910369873047,-0.135598540306091,67.6233520507813,4.32732772827148,0.00407609343528748,67.757438659668\n        ,4.31654453277588,0.085885614156723,67.9330596923828,4.30820465087891,0.0987821817398071,68.1265029907227,4.30343818664551\n        ,0.0410231649875641,68.3116149902344,4.3028883934021,-0.0795898139476776,68.4634323120117,4.3066291809082,-0.246766522526741\n        ,68.5614242553711,4.31415462493896,-0.391969442367554,68.0767288208008,4.9009370803833\n        PolygonVertexIndex: 2,1,15,-15,3,2,14,-17,1,13,17,-16,4,5,19,-19,5,0,20,-20,6,3,16,-44,7,8,21,-23,21,8,9,-35,12,7,22,-24,11,10,24,-26\n        ,0,11,25,-21,10,12,23,-25,13,4,18,-18,14,15,27,-27,16,14,-27,15,17,28,-28,18,19,30,-30,19,20,31,-31,22,21,32,-34,21\n        ,34,-33,23,22,33,-36,25,24,36,-38,20,25,37,-32,24,23,35,-37,17,18,29,-29,26,27,45,-45,43,26,44,-47,27,28,47,-46,29\n        ,30,49,-49,30,31,50,-50,33,32,51,-39,32,34,39,-52,35,33,38,-41,37,36,41,-43,31,37,42,-51,36,35,40,-42,28,29,48,-48\n        ,128,131,130,-130,132,129,130,-134,134,133,130,-136,136,135,130,-132,138,137,1797,1798,-140,128,137,138,-132,136,131\n        ,138,-140,141,1806,140,-143,143,146,145,-143,141,142,145,-148,132,147,145,-130,128,129,145,-147,140,148,-145,151,154\n        ,153,-153,155,152,153,-157,157,156,153,-159,159,158,153,-155,159,161,160,-159,157,158,160,-163,163,162,160,-165,165\n        ,164,160,-162,166,168,167,-1808,169,172,171,-171,171,139,1798,1799,-171,136,139,171,-173,173,176,175,-175,169,174\n        ,175,-173,136,172,175,-136,134,135,175,-177,177,180,179,-179,181,178,179,-183,155,182,179,-153,151,152,179,-181,180\n        ,177,183,-185,180,184,185,-152,190,189,187,-189,190,188,52,-126,194,193,191,-193,194,192,187,-190,196,194,189,-196\n        ,193,194,-197,200,199,197,-199,200,198,202,-202,204,197,199,-204,204,203,206,-206,208,195,189,-191,208,190,125,-127\n        ,211,186,210,-210,212,215,214,-214,216,213,214,-218,218,217,214,-220,220,219,214,-216,222,221,209,-211,223,226,225\n        ,-225,227,224,225,-229,229,228,225,-231,231,230,225,-227,235,234,232,-234,235,233,237,-237,238,239,205,-194,237,239\n        ,-239,197,204,241,-241,232,240,241,-234,237,233,241,-240,205,239,241,-205,232,234,242,-244,242,245,202,-244,246,247\n        ,210,-187,202,245,247,-247,226,223,245,-243,226,242,234,-232,223,224,249,-249,249,251,250,222,-249,252,251,249,-254\n        ,227,253,249,-225,247,248,222,-211,245,223,248,-248,254,257,256,3506,-256,227,255,3506,256,-254,252,253,256,-259,259\n        ,258,256,-258,260,263,262,-262,264,261,262,-266,266,265,262,-268,268,267,262,-264,264,270,269,-262,260,261,269,-272\n        ,272,271,269,-274,274,273,269,-271,275,278,277,-277,279,276,277,-281,281,280,277,-283,283,282,277,-279,193,196,284\n        ,-239,237,238,284,-286,286,285,284,-288,195,287,284,-197,288,53,283,-279,288,278,275,-290,290,54,53,-289,290,288,289\n        ,-287,185,184,292,-292,293,291,292,-295,295,294,292,-297,183,296,292,-185,297,300,299,-299,231,298,299,-231,229,230\n        ,299,-302,302,301,299,-301,298,231,234,-236,298,235,236,-298,195,208,303,-288,286,287,303,-291,54,290,303,-56,126\n        ,55,303,-209,246,186,207,-305,246,304,201,-203,202,198,244,-244,232,244,-241,197,240,244,-199,193,205,206,-192,305\n        ,308,307,-307,229,306,307,-229,227,228,307,-256,254,255,307,-309,302,310,309,-302,229,301,309,-307,305,306,309,-311\n        ,279,280,312,-312,274,311,312,-274,272,273,312,-314,281,313,312,-281,285,286,289,-315,285,314,236,-238,314,289,275\n        ,-316,314,315,297,-237,279,317,316,-277,275,276,316,-316,297,315,316,-301,302,300,316,-318,279,311,318,-318,302,317\n        ,318,-311,305,310,318,-320,274,319,318,-312,254,308,321,-321,264,320,321,-271,274,270,321,-320,305,319,321,-309,264\n        ,265,322,-321,254,320,322,-258,259,257,322,-324,266,323,322,-266,293,325,324,-292,185,291,324,-327,216,326,324,-214\n        ,212,213,324,-326,266,267,328,-328,212,327,328,-216,220,215,328,-330,268,329,328,-268,259,323,331,-331,293,330,331\n        ,-326,212,325,331,-328,266,327,331,-324,293,294,332,-331,259,330,332,-259,252,258,332,-334,295,333,332,-295,250,251\n        ,-335,335,334,251,-253,336,183,177,-338,339,338,295,-297,183,336,339,-297,154,151,185,-327,154,326,216,-160,161,159\n        ,216,-218,161,217,218,-166,340,1795,1796,-342,143,340,341,-147,128,146,341,-138,341,1796,1797,-138,144,342,340,-144\n        ,342,1794,1795,-341,148,343,342,-145,343,1793,1794,-343,348,351,350,-350,356,355,353,-355,360,359,358,-358,349,363\n        ,-349,365,364,361,-363,357,358,364,-366,366,352,-368,352,366,-352,350,351,366,-369,369,353,-356,375,374,373,-372,376\n        ,1666,379,-1809,380,383,382,-382,379,383,-1809,374,386,385,-385,385,387,-385,372,390,389,-376,372,377,391,-391,374\n        ,375,389,-387,389,1112,385,-387,392,1111,1112,389,-391,399,397,400,-396,398,401,403,-403,405,404,406,-388,402,405\n        ,410,-410,387,411,410,-406,407,415,590,591,-415,399,416,401,-399,395,412,416,-400,416,418,417,-402,419,418,416,-413\n        ,407,414,421,-421,395,400,422,-395,402,409,396,-399,404,403,-424,404,423,424,-407,423,403,401,417,-1647,425,428,427\n        ,-427,407,420,428,-426,432,430,431,-434,434,433,431,-436,439,438,436,-438,431,1804,-441,443,441,-445,441,1592,-441\n        ,441,442,446,445,-445,447,450,449,-449,449,452,451,436,-449,453,449,-451,453,454,452,-450,437,436,451,-458,439,437\n        ,460,-459,462,448,436,-439,447,448,462,-462,56,464,463,-58,438,439,463,-465,465,457,451,-467,456,455,457,-466,460\n        ,437,457,-456,459,468,467,-459,439,458,467,-464,463,467,58,-58,59,58,467,-469,56,60,469,-465,438,464,469,-463,461\n        ,462,469,-471,61,470,469,-61,454,453,-472,454,472,466,451,-453,473,472,454,-472,62,63,478,-478,476,477,478,-480,480\n        ,479,478,-482,64,481,478,-64,487,486,789,-789,488,487,788,-791,490,493,492,-492,494,493,490,-487,474,496,495,-476\n        ,476,475,495,-478,62,477,495,-67,67,66,495,-497,476,479,498,-498,498,479,480,-490,481,499,483,-481,68,499,481,-65\n        ,501,504,503,-503,500,503,70,-3497,71,70,503,-505,505,72,3504,-3504,505,763,127,-73,509,512,511,-511,74,73,511,-513\n        ,519,520,348,-364,521,520,519,-519,522,525,524,-524,523,524,514,-516,514,524,526,-514,527,526,524,-526,531,530,528\n        ,-530,533,528,530,-533,535,536,-535,536,535,-538,530,537,535,-533,538,541,540,-540,540,536,543,-543,540,542,-540,538\n        ,546,545,-545,547,544,545,-549,360,548,545,-550,550,549,545,-547,552,548,360,-358,547,548,552,-552,553,550,518,-520\n        ,75,76,555,-555,522,554,555,-526,527,525,555,-557,77,556,555,-77,522,557,558,-555,75,554,558,-79,534,541,559,-534\n        ,528,533,559,-561,547,560,559,-545,538,544,559,-542,357,365,561,-553,551,552,561,-563,529,566,565,-565,551,562,565\n        ,-567,560,547,551,-567,348,520,570,352,-352,570,520,521,-518,515,572,571,-569,568,571,362,-570,365,362,571,-562,561\n        ,571,572,-563,578,577,576,-576,516,517,521,-580,568,580,523,-516,522,523,580,-558,567,512,509,-517,74,512,567,-80\n        ,516,509,563,-518,581,584,583,-583,585,582,583,-587,587,586,583,-589,589,588,583,-585,593,592,591,-591,419,412,413\n        ,-595,600,599,597,-599,606,605,603,-605,606,604,608,-608,610,609,599,-601,610,600,601,-612,604,603,613,-615,604,614\n        ,615,-609,598,616,617,-603,80,81,619,-619,82,620,619,-82,623,626,625,-625,83,629,627,-85,85,84,627,-629,633,631,632\n        ,-635,634,632,635,-985,615,638,637,-637,611,636,637,-640,638,642,619,-621,619,642,643,-619,613,643,642,-615,615,614\n        ,642,-639,385,411,-388,649,648,646,-648,649,647,396,-410,650,653,652,-652,422,400,653,-651,648,649,655,-655,645,654\n        ,655,-645,411,644,655,-411,409,410,655,-650,656,659,658,-658,420,421,659,-657,427,428,661,-661,662,660,661,-664,657\n        ,663,661,-657,420,656,661,-429,665,668,667,-667,669,668,665,-665,673,672,670,-672,673,671,675,-675,677,680,679,-679\n        ,681,680,677,-677,687,686,685,-685,536,690,689,-689,691,688,689,-693,695,694,689,-691,697,676,693,-695,700,699,698\n        ,-702,710,709,707,-709,710,708,712,-712,714,711,712,-714,716,719,718,-716,696,715,718,-721,721,720,718,-723,723,722\n        ,718,-720,536,537,724,-691,695,690,724,-718,530,717,724,-538,703,726,725,-703,727,726,703,-705,723,729,728,-723,721\n        ,722,728,-731,713,712,732,1802,-1804,736,683,682,-736,708,707,1203,-1498,680,738,739,-680,696,741,-698,741,696,720\n        ,-743,743,738,680,-682,703,702,709,-711,703,710,711,-705,737,745,727,-705,699,745,737,-706,749,746,747,-749,749,748\n        ,682,-684,751,754,753,-753,755,754,751,-751,758,757,756,-483,759,762,761,-761,521,518,762,-760,763,575,69,-128,766\n        ,589,765,-765,527,770,767,-527,769,774,773,-773,775,772,773,-777,86,776,773,-88,88,87,773,-775,779,777,778,-781,785\n        ,784,782,-787,787,786,782,-784,89,90,792,-792,793,791,792,-795,459,794,792,-469,59,468,792,-91,795,336,337,-753,797\n        ,751,752,-338,750,751,797,-797,191,206,802,-802,752,753,803,-796,807,806,804,-809,809,808,804,-806,810,813,812,-812\n        ,814,811,812,-816,815,812,804,-807,804,812,813,-806,779,780,817,-817,822,824,761,-824,829,832,831,-831,833,832,829\n        ,-829,823,834,836,-836,691,836,834,-543,840,843,-843,798,840,-842,848,847,845,-847,849,852,851,-851,853,852,849,-588\n        ,854,857,856,-856,851,855,856,-859,809,858,856,-809,807,808,856,-858,860,862,-862,861,862,864,-864,866,786,787,-868\n        ,785,786,866,-866,868,870,869,-757,871,870,872,-3492,873,872,870,-869,531,874,875,716,-531,877,880,879,-879,881,880\n        ,877,-877,885,884,883,-883,791,793,886,-888,791,887,91,-90,889,191,-802,892,891,793,-795,892,794,459,-1638,893,895\n        ,871,-895,491,492,895,-894,896,899,898,-898,898,823,-762,898,761,-898,823,898,-835,542,834,898,-900,810,902,901,-901\n        ,903,900,901,-905,670,904,901,-906,906,905,901,-903,908,910,909,-908,912,488,790,-1136,913,912,1135,-1137,915,916\n        ,885,-883,917,916,915,-915,903,919,918,-901,810,900,918,-814,630,923,-923,801,802,867,-788,822,823,835,-910,931,930\n        ,933,-933,939,938,-941,941,940,938,-938,942,945,944,-944,944,946,883,884,-944,947,946,944,-946,948,951,950,-950,954\n        ,953,950,-952,938,203,199,-938,203,938,802,-207,838,837,924,-1060,955,956,863,-865,933,930,956,-956,957,960,959,-959\n        ,961,958,959,-963,964,967,966,-966,795,803,967,-965,969,678,679,-969,969,968,714,-714,976,975,973,-975,976,974,978\n        ,-978,979,373,-375,982,981,93,-93,983,735,3491,-873,633,634,984,-986,824,987,986,-761,798,841,988,-990,990,989,988\n        ,-992,927,507,508,-976,674,996,993,-995,736,735,983,-998,818,1001,1000,-820,820,992,1001,818,-822,1001,945,942,-1001\n        ,992,947,945,-1002,789,1003,1002,-789,930,931,1002,-1004,1007,1006,1004,-1006,1007,1005,576,-578,95,1011,1010,-97\n        ,917,1011,95,-95,894,871,3491,-3493,1013,1012,778,-778,1014,1017,1016,-1016,1018,1019,-1017,1016,1019,-1016,1021,1018\n        ,1016,-1021,672,1020,1016,-1018,780,1026,1025,-818,201,1029,-201,629,83,93,-982,599,609,987,-825,891,892,1035,-1035\n        ,503,1005,1004,-503,797,178,181,-797,337,177,178,-798,1038,1037,1023,-1025,1023,1037,1039,-926,597,599,824,-823,1029\n        ,201,1041,-1041,1029,1040,941,-938,499,887,886,-484,91,887,499,-69,744,968,679,-740,1042,1045,1044,-1044,814,1043\n        ,1044,-1047,1047,1800,-1049,1049,1048,1044,-1046,748,747,1619,-3494,954,803,753,-1051,755,1053,-991,1057,1056,1055\n        ,-383,1055,1056,1058,-1055,107,97,913,-1137,1034,1035,445,-1061,1061,1064,1063,-1063,841,1062,1063,-989,988,1063,1065\n        ,-992,1066,1065,1063,-1065,1060,445,446,-1068,339,964,965,-339,1068,825,-1071,536,688,-544,543,688,691,-543,1076,1078\n        ,952,-1078,950,1077,952,-950,1079,1076,1077,-1081,1081,1080,1077,-1083,1082,1077,950,-954,756,757,1083,-869,884,110\n        ,99,-944,98,942,943,-100,1079,1080,1085,-1085,809,1084,1085,-859,851,858,1085,-1087,1081,1086,1085,-1081,1011,998\n        ,999,-1011,917,914,998,-1012,975,508,-974,500,576,1005,-504,69,575,576,500,-3497,682,748,3493,-3493,735,682,3492,-3492\n        ,755,1087,1088,-1054,833,828,1088,-1088,1089,1092,1091,-1091,1093,1092,1089,-174,1081,1082,1095,-1095,714,968,744\n        ,-3495,705,744,739,-707,1096,584,581,-861,765,589,584,-1097,793,891,757,-759,1061,1062,1098,-1098,585,1097,1098,-1100\n        ,842,1099,1098,-841,840,1098,1062,-842,932,933,843,-889,1045,1042,701,-1101,1045,1100,1101,-1050,1070,1103,1102,-1070\n        ,1103,1070,825,826,-935,1107,1106,1104,-1106,1107,1105,1109,-1109,1110,100,121,-1689,1112,1111,645,-645,385,1112,644\n        ,-412,957,958,1114,-1114,941,1113,1114,-941,939,940,1114,-1116,961,1115,1114,-959,674,1022,-674,1022,674,-995,672\n        ,673,1022,-1021,959,1117,934,-963,963,1118,1117,959,-961,883,1088,828,-883,909,910,597,-823,1058,924,925,-1040,585\n        ,586,1119,-1098,1061,1097,1119,-1121,850,1120,1119,-850,587,849,1119,-587,581,582,1122,-1122,864,1121,1122,-1124,842\n        ,1123,1122,-1100,585,1099,1122,-583,1124,759,760,-987,579,521,759,-1125,951,967,803,-955,951,948,966,-968,1023,925\n        ,1126,-1126,873,1060,-1068,922,983,-873,1100,701,698,-1731,1023,1125,1127,-1025,527,556,1128,-771,77,101,1128,-557\n        ,1118,847,1129,-1118,1117,1129,1103,-935,1102,1103,1129,-1131,848,1130,1129,-848,1133,982,92,-104,1136,1135,818,-820\n        ,818,1135,790,-822,924,837,1126,-926,894,3492,3493,-860,1134,1140,982,-1134,986,1140,1134,-1125,579,1124,1134,-1142\n        ,102,1141,1134,-1134,915,829,830,-915,882,828,829,-916,798,947,-889,1143,1145,1144,-574,1146,1145,1143,-1143,1148\n        ,832,833,-1150,831,832,1148,-1148,871,1150,869,-871,793,758,-887,1151,1140,986,-988,875,719,-717,723,719,875,-1153\n        ,1087,1153,1149,-834,755,750,1153,-1088,946,947,798,-1054,883,946,1053,-1089,886,758,482,-484,1155,1156,830,-832,1157\n        ,1156,1155,-1155,1151,987,609,-1159,1151,1158,629,-982,938,939,867,-803,1028,1720,1159,-1026,1083,757,891,-1035,778\n        ,1160,1026,-781,1012,1132,1160,-779,877,105,104,-877,3501,105,877,-879,1153,1162,1091,-1150,750,796,1162,-1154,807\n        ,857,1164,-1164,1108,1163,1164,-1108,1106,1107,1164,-1166,854,1165,1164,-858,1047,1678,1166,-1681,1166,1168,-1168\n        ,1167,1681,1680,-1167,1166,1678,1567,-1169,866,1115,961,-866,867,939,1115,-867,1172,1174,-1174,814,1046,1175,-812\n        ,810,811,1175,-1177,1177,3498,-1179,922,872,873,-1068,1179,1182,1181,-1181,1183,1180,1181,-1185,1185,1184,1181,-1187\n        ,1187,1186,1181,-1183,1185,1186,1189,-1189,1190,1188,1189,-1192,1187,1191,1189,-1187,809,805,1192,-1085,1079,1084\n        ,1192,-1194,919,1193,1192,-919,918,1192,805,-814,1108,1196,1195,-1164,807,1163,1195,-807,1197,923,630,-632,1197,631\n        ,633,-1199,932,888,947,-993,588,1199,853,-588,589,766,1199,-589,1200,745,699,-701,745,1200,1109,-728,1201,1090,1091\n        ,-1163,922,923,997,-984,1202,997,923,-1198,1202,1197,1198,-1204,1066,1064,1205,-1205,1094,1204,1205,-1207,850,1206\n        ,1205,-1121,1061,1120,1205,-1065,1207,763,505,-1028,1207,578,575,-764,953,1208,1095,-1083,954,1050,1208,-954,98,106\n        ,1000,-943,814,815,1209,-1044,1042,1043,1209,-1211,1210,1209,1195,-1197,1195,1209,815,-807,998,1156,1157,-1000,914\n        ,830,1156,-999,1092,1148,1149,-1092,1147,1148,1092,-1094,916,109,108,-886,917,94,109,-917,1206,1086,1081,-1095,850\n        ,851,1086,-1207,885,108,110,-885,1211,1213,1078,-1213,1079,1212,1078,-1077,952,1078,-1214,1215,1216,666,-668,1217\n        ,1216,1215,-1215,1177,1221,1220,-1220,906,1219,1220,-1223,1146,1222,1220,-1146,1144,1145,1220,-1222,845,844,-847,970\n        ,1223,1224,-1226,1226,971,211,-676,970,971,1226,-1143,675,1227,-1227,1226,1227,1146,-1143,1143,1223,970,-1143,573\n        ,844,1223,-1144,1229,1230,-1229,1230,669,664,-1229,1232,973,508,-1232,1232,1231,1004,-1007,506,1231,508,-508,502,1004\n        ,1231,506,-502,1066,1204,1233,-1066,1094,1095,1233,-1205,1233,1234,991,-1066,990,991,1234,-1236,1050,1235,1234,-1209\n        ,1095,1208,1234,-1234,1236,1238,1116,-1238,1239,1237,1116,-1241,994,1240,1116,-1023,1116,1238,1021,-1023,1241,1244\n        ,1243,-1243,1245,1190,1241,-1243,1241,1191,1187,-1245,1241,1190,-1192,1249,1248,1246,-1251,1251,1250,1246,-1248,1252\n        ,1255,1254,-1254,1257,1262,1261,-1261,1263,1262,1257,-1257,1264,1267,1266,-1266,1268,1265,1266,-1270,1270,1269,1266\n        ,-1268,1271,1273,1190,-1273,1272,1190,-1275,1211,1271,1272,-1276,1258,1275,1272,-1277,1277,1276,1272,-1275,948,949\n        ,1279,-1279,1280,1278,1279,-1282,1260,1281,1279,-1283,952,1282,1279,-950,1260,1282,1259,-1258,1259,1275,1258,-1257\n        ,1211,1275,1259,-1214,952,1213,1259,-1283,1239,1240,1284,-1284,1285,1283,1284,-1287,995,1286,1284,993,-997,993,1284\n        ,1240,-995,1288,1287,1285,-1287,1288,1286,995,-1290,664,1291,1290,-1229,1229,1228,1290,-1293,1293,1292,1290,-1295\n        ,1295,1294,1290,-1292,1296,1299,1298,-1298,666,1297,1298,-666,664,665,1298,-1292,1295,1291,1298,-1300,1300,1303,1302\n        ,-1302,1304,1301,1302,-1306,1217,1305,1302,-1307,1307,1306,1302,-1304,1305,1217,1214,-1788,1304,1305,-1788,1281,1309\n        ,1308,-1281,1260,1261,1309,-1282,966,1280,1308,-1311,1239,1313,1312,-1238,1236,1237,1312,-1315,1315,1314,1312,-1317\n        ,1317,1316,1312,-1314,1285,1319,1318,-1284,1239,1283,1318,-1314,1317,1313,1318,-1321,1321,1320,1318,-1320,1322,1325\n        ,1324,-1324,1326,1323,1324,-1328,1236,1327,1324,-1239,1021,1238,1324,-1326,1236,1314,1328,-1328,1326,1327,1328,-1330\n        ,1330,1329,1328,-1332,1315,1331,1328,-1315,1332,1333,-1323,1332,1334,-1334,1335,1336,1334,-1333,1337,1336,1335,-1339\n        ,1326,1338,1335,-1324,1322,1323,1335,-1333,1337,1338,1340,-1340,1341,1339,1340,-1343,1330,1342,1340,-1330,1326,1329\n        ,1340,-1339,1333,1345,1344,-1344,1346,1343,1344,-1348,1348,1345,1333,-1335,1350,1339,1341,-1255,1337,1339,1350,-1350\n        ,1344,1351,1243,1244,-1348,1242,1243,1351,-1353,1353,1352,1351,-1355,1345,1354,1351,-1345,1190,1245,1355,-1275,1277\n        ,1274,1355,-1357,1353,1356,1355,-1353,1242,1352,1355,-1246,1357,1360,1359,-1359,1361,1358,1359,-1363,1296,1362,1359\n        ,-1300,1295,1299,1359,-1361,1363,1366,1365,-1365,1357,1364,1365,-1361,1295,1360,1365,-1295,1293,1294,1365,-1367,1364\n        ,1357,1367,-1369,1364,1368,1369,-1364,1370,1358,1361,-1372,1367,1357,1358,-1371,1372,1375,1374,-1374,1249,1375,1372\n        ,-1249,1372,1368,1367,-1249,1369,1368,1372,-1374,1379,1378,1376,-1381,1251,1380,1376,-1378,1374,1375,-1382,1383,1382\n        ,1376,-1379,1376,1382,1384,-1378,1254,1384,1382,-1351,1349,1350,1382,-1384,1385,1387,1386,-1250,1387,1385,1255,-1253\n        ,1388,1390,1268,-1390,1389,1253,1392,-1392,1389,1391,-1389,1253,1389,-1253,1392,1253,1341,-1343,1392,1342,1330,-1392\n        ,1393,1391,1330,-1332,1393,1331,1315,-1265,1264,1265,1390,-1394,1391,1393,1390,-1389,1268,1390,-1266,1316,1317,1394\n        ,-1396,1316,1395,1264,-1316,1320,1321,1396,-1398,1320,1397,1394,-1318,1398,1396,1321,-1400,1400,1366,1363,-1400,1293\n        ,1366,1400,-1288,1319,1285,1287,-1401,1319,1400,1399,-1322,1300,1403,1402,-1402,1404,1401,1402,-1406,1263,1405,1402\n        ,-1263,1261,1262,1402,-1404,1404,1407,1406,-1402,1300,1401,1406,-1304,1307,1303,1406,-1409,1409,1408,1406,-1408,1407\n        ,1411,1410,-1410,1412,1411,1407,-1405,1258,1276,1277,3497,-1414,1413,1263,1256,-1259,1416,1264,1395,-1395,1264,1416\n        ,-1268,1417,1418,1381,-1387,1374,1381,1418,-1420,1396,1419,1418,-1421,1270,1420,1418,-1418,1379,1423,1422,-1422,1424\n        ,1421,1422,-1426,1412,1425,1422,-1412,1410,1411,1422,-1424,1412,1426,1414,-1426,1424,1425,1414,-1428,1414,1426,1413\n        ,-3498,1270,1417,1428,-1270,1268,1269,1428,-1390,1387,1428,-1387,1386,1428,-1418,1277,1356,1429,-1416,1353,1430,1429\n        ,-1357,1349,1383,1432,-1432,1349,1431,1433,-1435,1334,1434,1433,-1349,1379,1380,1435,-1424,1251,1247,1435,-1381,1246\n        ,1370,1371,-1248,1248,1367,1370,-1247,1436,1435,1247,-1372,1435,1436,1410,-1424,1436,1437,1409,-1411,1371,1361,1437\n        ,-1437,1296,1439,1438,-1363,1361,1362,1438,-1438,1409,1437,1438,-1409,1307,1408,1438,-1440,1307,1439,1440,-1307,1217\n        ,1306,1440,-1217,666,1216,1440,-1298,1296,1297,1440,-1440,1015,1180,1183,-1015,1179,1180,1015,-1020,1347,1244,1187\n        ,-1183,1347,1182,1179,-1347,1343,1441,1322,-1334,1019,1441,1343,-1347,1442,1396,-1399,1396,1442,-1420,1374,1419,1442\n        ,-1374,1394,1397,1443,-1417,1416,1443,1420,1270,-1268,1396,1420,1443,-1398,1249,1386,-1376,1375,1386,-1382,1383,1378\n        ,1444,-1433,1432,1444,1445,-1432,1424,1445,1444,-1422,1379,1421,1444,-1379,1429,1446,1427,-1416,1424,1427,1446,-1446\n        ,1431,1445,1446,-1434,1430,1348,1433,1446,-1430,1251,1377,1447,-1251,1249,1250,1447,-1386,1278,966,-949,1278,1280\n        ,-967,903,1448,1449,-920,1322,1441,1018,-1326,1021,1325,-1019,1019,1018,-1442,111,1450,876,-105,1253,1254,-1342,1377\n        ,1384,1451,-1448,1447,1451,1255,-1386,1254,1255,1451,-1385,1334,1336,1337,-1435,1434,1337,-1350,1185,1453,1452,-1185\n        ,1183,1184,1452,-1455,1454,1452,1449,-1449,1449,1452,1453,1455,-1195,1211,1455,1273,-1272,1455,1453,1456,-1274,1273\n        ,1456,1188,-1191,1185,1188,1456,-1454,1014,1183,-1455,1014,1454,-1449,1458,603,605,-1458,1458,1457,1460,-1460,1458\n        ,1459,1461,-1463,1458,1462,613,-604,112,113,1464,-1464,80,618,1464,-114,1466,621,622,-1466,1466,1465,1468,-1468,1464\n        ,1470,1469,-1464,1461,1469,1470,-1463,613,1462,1470,-644,618,643,1470,-1465,450,447,13,-2,450,1,2,-454,447,461,4,-14\n        ,1471,1473,-1473,1474,1473,-1472,434,1472,1473,-1476,1473,1474,-1476,5,470,61,-1,4,461,470,-6,471,453,2,-4,471,3,6\n        ,-474,1476,1479,1478,-1478,432,1477,1478,-1481,1481,1480,1478,-1480,1482,1485,1484,-1484,1484,1485,-1475,1486,1489\n        ,1488,-1488,1476,1487,1488,-1491,1491,1490,1488,-1493,1493,1492,1488,-1490,1484,1494,-1484,1482,1483,1494,-1496,1496\n        ,1495,-1495,1498,1202,1203,-708,1202,1498,736,-998,1499,683,736,-1499,1499,1498,707,-710,1499,709,702,-1501,1499,1500\n        ,749,-684,1500,1501,746,-750,702,725,1501,-1501,1503,1104,1106,-1503,1503,1502,766,-765,766,1502,1504,-1200,853,1199\n        ,1504,-1506,854,1505,1504,-1166,1106,1165,1504,-1503,852,1505,854,-856,851,852,-856,1037,1507,1506,-1040,1054,1058\n        ,1039,-1507,1055,1509,381,-383,1510,1509,1055,-1055,1054,1506,1511,-1511,1512,1511,1506,-1508,1512,1507,1508,-1514\n        ,1515,1513,1508,-1515,1515,1514,388,-394,1398,1399,1363,-1370,1369,1373,1442,-1399,1288,1289,1229,-1293,1288,1292\n        ,1293,-1288,1029,937,199,-201,114,819,1000,-107,819,114,107,-1137,1405,1426,1412,-1405,1263,1413,1426,-1406,1261,1403\n        ,1518,-1310,1308,1309,1518,-1520,1304,1519,1518,-1302,1300,1301,1518,-1404,674,675,211,-210,1346,1179,-1020,1017,904\n        ,670,-673,903,904,1017,1014,-1449,1521,1520,771,-1802,768,1522,1030,-1802,1030,1522,1523,-1032,775,1523,1522,-773\n        ,769,772,1522,-769,1524,1101,1139,-1139,1524,1138,592,-594,490,799,789,-487,491,800,799,-491,476,497,1527,-476,475\n        ,1527,1528,-475,869,489,482,-757,1430,1354,1345,-1349,1353,1354,-1431,1530,347,345,-1530,1530,1529,-389,838,1059,1531\n        ,-840,1059,924,1058,-1057,396,647,1532,-398,400,397,1532,-654,652,653,1532,-1534,646,1533,1532,-648,1534,660,662,-1536\n        ,426,427,660,-1535,1536,1538,-1538,1538,1536,-1540,1535,1537,1538,-1535,426,1534,1538,-1541,393,1540,1538,-1540,1536\n        ,1541,-1540,1541,393,-1540,1541,1542,1515,-394,1513,1515,1542,-1544,1544,1543,1542,-1546,1536,1545,1542,-1542,1513\n        ,1543,1546,-1513,1511,1512,1546,-1548,1548,1547,1546,-1550,1544,1549,1546,-1544,1550,1510,1511,-1548,1550,1547,1548\n        ,-1552,1510,1550,1552,-1510,381,1509,1552,-1554,1554,1553,1552,-1556,1551,1555,1552,-1551,1554,1557,1556,-1554,381\n        ,1553,1556,-381,378,380,1556,-1559,1559,1558,1556,-1558,1559,1560,391,-1559,378,1558,391,-378,392,390,391,-1561,1057\n        ,382,383,379,-1171,1531,1057,1170,-1562,1531,1561,1562,-840,785,1563,-922,1565,1569,1568,-1567,1566,1568,1168,-1568\n        ,1572,388,-1572,1572,393,-389,393,1574,426,-1541,426,1574,-1574,1571,1575,-1573,393,1572,-1575,1573,1574,1572,-1576\n        ,1577,1576,1529,-346,432,1579,1578,-431,429,430,1578,-1581,625,1580,1578,-625,622,1578,-1580,1578,622,-625,1468,1465\n        ,1582,-1582,1583,1581,1582,-1585,1481,1584,1582,-1586,622,1585,1582,-1466,1583,1584,1587,-1587,1587,1479,1476,-1491\n        ,1481,1479,1587,-1585,641,635,1804,429,-641,446,442,635,-633,85,628,1588,-116,82,115,1588,-621,638,620,1588,-638,637\n        ,1588,628,-640,609,610,612,-1159,629,1158,612,-628,627,612,639,-629,1589,608,615,-637,1589,636,611,-602,1590,607,608\n        ,-1590,1590,1589,601,-603,1591,626,607,-1591,443,456,1593,-1593,1593,1594,435,-1593,1805,435,1594,-1596,466,1595,1594\n        ,-466,456,465,1594,-1594,1805,1595,1596,-1473,1471,1472,1596,-1598,473,1597,1596,-473,466,472,1596,-1596,1474,1471\n        ,1598,-1485,1474,1485,1599,-1476,434,1475,1599,-1601,1482,1600,1599,-1486,432,1602,1601,-1478,1601,1482,1603,-1477\n        ,1601,1476,-1478,1482,1601,-1603,434,1600,1604,-434,432,433,1604,-1603,1482,1602,1604,-1601,46,1598,1471,-1598,46\n        ,1597,473,-7,431,440,1592,-436,625,1605,-1581,1580,1605,640,-430,868,1083,-874,873,1083,1034,-1061,767,771,513,-527\n        ,562,572,1606,-566,565,1606,1607,-565,513,1607,1606,-515,514,1606,572,-516,771,1520,1607,-514,1609,1608,580,568,-570\n        ,580,1608,1610,-558,510,1610,-1609,510,1608,1609,563,-510,557,1610,1611,-559,558,1611,116,-79,116,1611,511,-74,511\n        ,1611,1610,-511,1613,487,488,-1615,494,486,487,-1614,1615,912,913,-1617,1614,488,912,-1616,474,1618,1617,-497,67,496\n        ,1617,-118,65,117,1617,-486,484,485,1617,-1619,1612,1618,474,-1529,484,1618,-1613,913,97,118,-1617,860,1620,1619,-1097\n        ,1622,1621,799,-801,799,1621,1003,-790,930,1003,1621,-957,863,956,1621,-1623,1150,871,-896,869,1150,498,-490,498,1150\n        ,1623,-498,492,1623,1150,-896,497,1623,1624,-1528,1527,1624,1625,-1529,494,1625,1624,-494,492,493,1624,-1624,1528\n        ,1625,1626,-1613,1612,1626,1627,-485,1614,1627,1626,-1614,494,1613,1626,-1626,484,1627,1628,-486,485,1628,1629,-66\n        ,1616,1629,1628,-1616,1614,1615,1628,-1628,65,1629,-120,1616,118,119,-1630,894,859,1630,-894,893,1630,800,-492,859\n        ,1620,1631,-1631,1630,1631,1622,-801,863,1622,1631,-862,860,861,1631,-1621,747,746,764,-766,1501,1503,764,-747,1104\n        ,1503,1501,-726,726,1105,1104,-726,727,1109,1105,-727,1196,1108,1109,-1201,1210,1196,1200,-701,1210,700,701,-1043\n        ,1619,747,765,-1097,859,3493,1619,-1621,1605,625,626,-1592,1605,1591,617,-641,641,640,617,-617,907,909,835,-1633,567\n        ,516,579,-1142,567,1141,102,-80,761,824,-761,896,897,1634,-1634,518,1633,1634,-763,761,762,1634,-898,1635,1497,1203\n        ,-1199,1635,1008,1009,-1803,1198,633,985,1008,-1636,630,922,1067,-447,1636,444,445,-1036,1637,460,455,-1637,1637,1636\n        ,1035,-893,606,607,626,-624,606,623,621,-606,1457,605,621,-1467,1457,1466,1467,-1461,622,1579,1638,-1586,1481,1585\n        ,1638,-1481,432,1480,1638,-1580,1476,1603,1639,-1488,1486,1487,1639,-1641,1496,1640,1639,-1496,1482,1495,1639,-1604\n        ,1169,3486,977,-979,366,354,-369,367,356,354,-367,931,820,821,-1003,1002,821,790,-789,1235,1050,753,-755,1235,754\n        ,755,-991,864,1641,-956,955,1641,843,-934,840,798,888,-844,864,862,-1122,862,860,581,-1122,864,1123,-1642,843,1641\n        ,1123,-843,973,1232,1642,-975,1132,1642,1232,1006,-1132,1012,1643,1642,-1133,978,1643,1171,-1170,1013,1171,1643,-1013\n        ,1644,531,529,-565,1644,564,1607,-1521,1033,1152,-1033,1656,1657,1645,936,-936,71,504,1654,-121,504,501,1655,-1655\n        ,506,507,1656,-1660,501,506,1659,-1656,875,874,1644,1520,-1522,874,531,-1645,423,1646,-425,1648,729,723,-1034,731\n        ,729,1648,-1648,1071,1072,-1650,1649,1072,838,-840,838,1072,1650,-838,1651,1126,837,-1651,1651,1650,1069,-1103,1102\n        ,1130,1652,-1652,1126,1651,1652,-1126,1125,1652,1653,-1128,848,1653,1652,-1131,1654,1655,1687,-1689,927,1657,1656\n        ,-508,1658,406,-980,387,1658,-385,979,374,384,-1659,1659,1656,935,-1690,413,412,395,-395,1576,1577,1569,-1661,1565\n        ,1566,1662,-1662,1526,1661,1662,-1664,1567,1663,1662,-1567,1526,1564,1664,-1662,1565,1661,1664,-1666,595,1660,-1666\n        ,1665,1660,1569,-1566,1575,1571,-3500,408,1573,1575,-596,3499,1571,1529,-1577,407,596,-416,1573,425,-427,408,407,425\n        ,-1574,1564,1526,593,-591,1524,593,1526,-1526,926,927,-976,1517,3487,1666,-1729,361,1667,569,-363,1667,1668,1609,-570\n        ,563,1609,1668,-1670,356,1668,-356,1668,356,-1670,369,355,1668,-1668,517,1670,352,-571,367,352,1670,-357,896,1672\n        ,1671,-900,542,899,1671,-540,538,539,1671,-547,550,546,1671,-1673,550,553,1673,-550,360,549,1673,-360,896,1633,-1673\n        ,518,550,1672,-1634,353,369,368,-355,358,1674,349,-365,358,359,-1675,1673,1675,1674,-360,349,1674,1675,-1677,553,1676\n        ,1675,-1674,349,1676,-364,553,519,363,-1677,356,1670,-1670,1669,1670,517,-564,1567,1678,1677,-1664,1526,1663,1677\n        ,-1526,1049,1525,1677,-1049,1047,1048,1677,-1679,1679,1167,1168,-1569,1679,1568,1569,-1578,1680,1177,1178,-1048,1177\n        ,1680,-1682,1679,1577,345,-1173,1167,1679,1172,-1174,906,1222,1682,-906,670,905,1682,-672,675,671,1682,-1228,1146\n        ,1227,1682,-1223,906,902,1683,-1220,1177,1219,1683,-3499,810,1176,1683,-903,1167,1173,1684,-1682,1681,1684,1221,-1178\n        ,1144,1221,1684,-1686,1174,1685,1684,-1174,574,1685,1174,-347,1144,1685,574,-574,1172,344,346,-1175,1686,373,1645\n        ,-1658,1645,373,-980,1645,979,406,424,-937,926,1686,1657,-928,1110,1688,1687,-981,1654,1688,121,-121,1689,935,1691\n        ,-1693,935,936,1690,-1692,1033,1031,-1649,776,86,100,-1111,776,1110,980,-776,1691,1690,731,-1648,1647,1693,1692,-1692\n        ,1689,1692,1693,980,-1688,1523,775,980,-1694,1031,1523,1693,1647,-1649,1646,417,731,-1691,424,1646,1690,-937,728,729\n        ,731,417,-419,728,418,419,-731,816,1695,1694,-780,825,1068,1695,827,-827,1694,1695,1068,-1072,777,1696,1562,-1014\n        ,779,1694,1696,-778,1027,1720,-1029,920,1698,1159,-1717,1159,1698,817,-1026,817,1698,1699,-817,921,1699,1698,-921\n        ,816,1699,827,-1696,1563,827,1699,-922,1075,1700,1036,-880,962,1701,865,-962,826,1701,962,-935,1701,1563,785,-866\n        ,1563,1701,826,-828,878,1702,3502,-3502,1702,3503,3504,-3503,781,889,-784,787,783,889,-802,1450,187,192,-929,881,876\n        ,1450,-929,188,187,-1451,52,188,1450,-112,1649,1696,1694,-1072,839,1562,1696,-1650,1561,1171,1013,-1563,1171,1561\n        ,1170,-1170,1803,1703,969,-714,734,678,969,-1704,1009,1703,1803,-1803,836,1704,1632,-836,1008,908,907,-1010,985,911\n        ,908,-1009,1009,907,1632,734,-1704,1704,733,734,-1633,693,733,1704,-693,597,1705,616,-599,616,1705,1706,-642,641,1706\n        ,984,-636,984,1706,911,-986,1514,1707,1530,-389,1530,1707,1708,-348,1570,1218,1708,-1708,1708,1218,1137,-1710,1137\n        ,1711,1710,-1710,344,1709,1710,1712,-347,1713,1712,1710,-1712,346,1712,1714,-575,574,1714,-574,1714,1715,844,-574\n        ,1713,1715,1714,-1713,1508,1038,-1571,1570,1038,1024,-1219,1218,1024,1127,-1138,1075,1717,1716,-1701,784,1717,1718\n        ,-783,782,1718,1719,781,-784,1719,1718,1073,-1075,1073,1718,1717,-1076,1073,880,881,-1075,1075,879,880,-1074,878,879\n        ,1036,-1703,1159,1720,1700,-1717,1700,1720,1697,-1037,1036,1697,3503,-1703,1697,505,-3504,929,1074,881,-929,1719,1074\n        ,929,-782,781,929,890,-890,970,1052,1051,-972,971,1051,207,-212,972,1721,1052,-971,201,304,1722,-1042,1040,1041,1722\n        ,-1724,1052,1723,1722,-1052,207,1051,1722,-305,1040,1723,-1725,1052,1721,1724,-1724,957,1725,-961,963,960,1725,-1722\n        ,970,1225,-973,1113,941,1040,-1725,1725,1724,-1722,1028,1726,1207,-1028,1161,1726,1026,-1161,1007,577,1161,-1132,1006\n        ,1007,-1132,1207,1726,-579,963,1721,972,-1226,1118,1224,845,-848,1224,1118,963,-1226,373,1686,1727,-372,370,371,1727\n        ,-1729,1516,976,977,-1518,926,975,976,-1517,1517,977,3486,-3488,1516,1727,1686,-927,1517,1728,1727,-1517,741,681,676\n        ,-698,743,681,741,-743,743,742,685,-687,684,685,721,-731,592,687,684,-595,594,413,591,-593,413,394,414,-592,394,422\n        ,421,-415,659,421,422,-651,659,650,651,-659,1729,687,1138,-1140,1138,687,-593,686,687,-1730,1100,1730,1139,-1102,698\n        ,706,740,-1731,1730,740,1729,-1140,1653,1711,1137,-1128,848,1713,1711,-1654,844,1715,-847,1211,1212,1194,-1456,1079\n        ,1193,1194,-1213,1734,1733,1732,-1732,1737,1736,-1736,1735,122,123,-1738,1731,1732,174,-170,1738,1739,-1736,1740,1741\n        ,1790,-1792,1740,1742,1734,-1742,1734,1743,-1155,1738,1743,1742,-1745,1744,149,1739,-1739,999,1157,1736,-1738,1736\n        ,1157,1154,-1744,1733,1155,831,-1148,1734,1154,1155,-1734,1735,1739,124,-123,1735,1736,1743,-1739,1734,1742,-1744\n        ,1745,1790,-1742,1734,1731,1745,-1742,1745,170,1799,-1791,1010,999,1737,-124,1010,123,-97,155,156,1747,-1747,1748\n        ,1746,1747,-1750,1750,1749,1747,-1752,157,1751,1747,-157,157,162,1752,-1752,1750,1751,1752,-1754,168,1753,1752,-1755\n        ,163,1754,1752,-163,1755,163,164,-1757,165,1756,-165,181,182,1757,-1202,1090,1201,1757,-1759,1748,1758,1757,-1747\n        ,155,1746,1757,-183,168,1754,1759,-168,1759,1754,163,-1756,1748,1749,1761,-1761,134,1760,1761,-134,132,133,1761,-1763\n        ,1750,1762,1761,-1750,1750,1753,1763,-1763,132,1762,1763,-148,141,147,1763,-167,168,166,1763,-1754,1090,1758,1764\n        ,-1090,173,1089,1764,-177,134,176,1764,-1761,1748,1760,1764,-1759,1768,1767,1765,-1767,1768,1766,209,-222,1767,669\n        ,1230,-1770,1771,1770,250,-335,1771,334,335,-1773,674,1774,1773,-997,995,996,1773,-1776,1765,1775,1773,-1775,1769\n        ,1289,995,-1776,1769,1775,1765,-1768,1766,1774,674,-210,1765,1774,-1767,1768,1776,669,-1768,1770,1776,1768,-222,222\n        ,250,1770,-222,1770,1771,-1778,1778,1777,1771,-1773,1779,338,-966,1780,1781,295,-339,335,1781,1780,-1773,295,1781\n        ,-334,335,252,333,-1782,1770,1777,1782,-1777,669,1776,1782,-669,667,668,1782,-1784,1778,1783,1782,-1778,1778,1785\n        ,1784,-1784,667,1783,1784,-1216,1214,1215,1784,-1787,1779,1786,1784,-1786,1308,1519,1311,-1311,1304,1787,1311,-1520\n        ,1785,1778,1772,-1781,1785,1780,338,-1780,1788,1786,1779,-966,1787,1214,1786,1788,-1312,1789,965,-967,1789,966,-1311\n        ,965,1789,-1789,1311,1788,1789,-1311,211,207,-187,1791,1792,150,-1741,730,419,594,-685,696,697,694,-696,742,720,721\n        ,-686,3494,711,-715,1033,723,-1153,796,181,1201,-1163,174,1732,1093,-174,1732,1733,1147,-1094,1745,1731,169,-171,1524\n        ,1525,1049,-1102,1800,1046,1044,-1049,1178,1175,1046,-1801,1047,1178,-1801,1161,1160,1132,-1132,920,1716,1717,-785\n        ,785,921,920,-785,1069,1650,1072,-1072,1069,1071,1068,-1071,1059,1056,1057,-1532,535,534,533,-533,528,560,566,-530\n        ,1030,1032,1521,-1802,1030,1031,1033,-1033,1152,875,1521,-1033,768,1801,771,-768,769,768,767,-771,774,769,770,-1129\n        ,88,774,1128,-102,1449,1194,1193,-920,689,694,693,-693,732,1497,1635,-1803,708,1497,732,-713,734,733,677,-679,677\n        ,733,693,-677,696,695,717,-716,715,717,530,-717,440,1804,442,-442,635,442,-1805,600,598,602,-602,1591,1590,602,-618\n        ,611,639,612,-611,982,1140,1151,-982,102,1133,-104,1706,1705,910,-912,1705,597,-911,1637,459,458,-461,456,443,444\n        ,1636,-456,699,705,706,-699,738,686,1729,-741,706,739,738,-741,852,853,-1506,376,370,1728,-1667,372,375,371,-371,376\n        ,377,372,-371,1659,1689,1687,-1656,1658,387,-407,540,541,534,-537,350,361,364,-350,368,369,1667,361,-351,1726,1028\n        ,1025,-1027,482,489,480,-484,434,435,-1806,434,1805,-1473,339,336,795,-965,166,1807,1806,-142,144,143,142,-141,150\n        ,149,-1745,1740,150,1744,-1743,376,1808,378,-378,378,1808,383,-381,1508,1507,1037,-1039,1769,1230,1229,-1290,1491\n        ,1586,1587,-1491,623,624,622,-622,1809,1810,1811,-1813,1813,1814,1811,-1811,1815,1816,1811,-1815,1817,1812,1811,-1817\n        ,1809,1812,1819,-1819,1817,1820,1819,-1813,1819,1820,3474,3473,-1819,1821,1822,140,-1807,1823,1822,1825,-1827,1821\n        ,1827,1825,-1823,1813,1810,1825,-1828,1809,1826,1825,-1811,140,1824,-149,1828,1829,-3422,1830,1831,1832,-1834,1834\n        ,1835,1832,-1832,1836,1837,1832,-1836,1838,1833,1832,-1838,1838,1837,1839,-1841,1836,1841,1839,-1838,1842,1843,1839\n        ,-1842,165,1840,1839,-1844,1844,1807,167,-1846,1846,1847,1848,-1850,1848,1847,3475,3474,-1821,1817,1849,1848,-1821\n        ,1850,1851,1852,-1854,1846,1849,1852,-1852,1817,1816,1852,-1850,1815,1853,1852,-1817,1854,1855,1856,-1858,1858,1859\n        ,1856,-1856,1834,1831,1856,-1860,1830,1857,1856,-1832,1861,1860,1854,-1858,1861,1857,1830,-1863,1863,1864,-1886,1866\n        ,1865,1867,-1869,1866,1868,125,-53,1870,1869,1871,-1873,1870,1872,1867,-1866,1874,1873,1867,-1873,1871,1874,-1873\n        ,1876,1875,1877,-1879,1876,1878,1879,-1881,1881,1877,1875,-1883,1881,1882,1883,-1885,1868,1867,1873,-1887,1868,1886\n        ,126,-126,1887,1888,1864,-1890,1890,1891,1892,-1894,1894,1895,1892,-1892,218,219,1892,-1896,220,1893,1892,-220,1888\n        ,1887,1896,-1898,1898,1899,1900,-1902,1902,1903,1900,-1900,1904,1905,1900,-1904,1906,1901,1900,-1906,1908,1907,1909\n        ,-1911,1908,1910,1911,-1913,1913,1871,1883,-1915,1912,1913,-1915,1875,1915,1916,-1883,1907,1908,1916,-1916,1912,1914\n        ,1916,-1909,1883,1882,1916,-1915,1917,1909,1907,-1919,1918,1907,-1920,1917,1918,1880,-1921,1920,1880,1921,-1923,1921\n        ,1864,1888,-1923,1917,1920,1898,-1902,1917,1901,1906,-1910,1898,1923,1924,-1900,1897,1925,1924,-1924,1926,1927,1924\n        ,-1926,1928,1929,1924,-1928,1902,1899,1924,-1930,1898,1920,1922,-1924,1922,1888,1897,-1924,1930,1931,1932,-1934,1902\n        ,1929,1932,-1932,1928,1934,1932,-1930,1935,1933,1932,-1935,260,1936,1937,-264,1938,1939,1937,-1937,1940,1941,1937\n        ,-1940,268,263,1937,-1942,1938,1936,1942,-1944,260,271,1942,-1937,272,1944,1942,-272,1945,1943,1942,-1945,1946,1947\n        ,1948,-1950,1950,1951,1948,-1948,281,282,1948,-1952,283,1949,1948,-283,1871,1913,1952,-1875,1912,1953,1952,-1914,1954\n        ,1955,1952,-1954,1873,1874,1952,-1956,1949,283,53,-1957,1949,1956,1957,-1947,1956,53,54,-1959,1956,1958,1954,-1958\n        ,1862,1959,1960,-1862,1961,1962,1960,-1960,1963,1964,1960,-1963,1860,1861,1960,-1965,1965,1966,1967,-1969,1906,1905\n        ,1967,-1967,1904,1969,1967,-1906,1970,1968,1967,-1970,1910,1909,1906,-1967,1910,1966,1965,-1912,1873,1955,1971,-1887\n        ,1954,1958,1971,-1956,54,55,1971,-1959,126,1886,1971,-56,1972,1885,1864,-1922,1972,1921,1880,-1880,1880,1918,1919\n        ,-1877,1907,1915,-1920,1875,1876,1919,-1916,1883,1871,1869,-1885,1973,1974,1975,-1977,1904,1903,1975,-1975,1902,1931\n        ,1975,-1904,1930,1976,1975,-1932,1970,1969,1977,-1979,1904,1974,1977,-1970,1973,1978,1977,-1975,1950,1979,1980,-1952\n        ,1945,1944,1980,-1980,272,313,1980,-1945,281,1951,1980,-314,1981,1957,1954,-1954,1981,1953,1912,-1912,1982,1946,1957\n        ,-1982,1982,1981,1911,-1966,1950,1947,1983,-1985,1946,1982,1983,-1948,1965,1968,1983,-1983,1970,1984,1983,-1969,1950\n        ,1984,1985,-1980,1970,1978,1985,-1985,1973,1986,1985,-1979,1945,1979,1985,-1987,1930,1987,1988,-1977,1938,1943,1988\n        ,-1988,1945,1986,1988,-1944,1973,1976,1988,-1987,1938,1987,1989,-1940,1930,1933,1989,-1988,1935,1990,1989,-1934,1940\n        ,1939,1989,-1991,1961,1959,1991,-1993,1862,1993,1991,-1960,1894,1891,1991,-1994,1890,1992,1991,-1892,1940,1994,1995\n        ,-1942,1890,1893,1995,-1995,220,329,1995,-1894,268,1941,1995,-330,1935,1996,1997,-1991,1961,1992,1997,-1997,1890,1994\n        ,1997,-1993,1940,1990,1997,-1995,1961,1996,1998,-1963,1935,1934,1998,-1997,1928,1999,1998,-1935,1963,1962,1998,-2000\n        ,1928,1927,2000,-2002,1926,2000,-1928,2003,1854,1860,-2003,2002,1860,1964,-2006,1993,1862,1830,-1834,1993,1833,1838\n        ,-1895,1895,1894,1838,-1841,1895,1840,165,-219,2006,2007,3472,-3472,1823,1826,2007,-2007,1809,1818,2007,-1827,2007\n        ,1818,3473,-3473,1824,1823,2006,-2009,2008,2006,3471,-3471,148,1824,2008,-344,343,2008,3470,-1794,2009,2012,2010,-2855\n        ,2011,2009,2854,-2857,2013,2016,2017,2242,-2193,2013,2014,2015,-2017,2018,2019,2032,-2034,2020,2018,-2034,2021,2019\n        ,2018,-2021,2022,2023,2024,-2026,2024,2023,-3351,2026,2027,2241,-3344,2027,2026,2029,-2031,2028,2013,2192,-2192,2014\n        ,2013,-2029,2023,2029,2014,-3351,2022,2030,2029,-2024,2031,2019,-2022,2017,2016,-2032,2015,2032,2031,-2017,2031,2032\n        ,-2020,2034,2035,2039,-2037,2035,2037,2038,-2040,2041,2040,2034,-2037,2041,2042,3480,-2041,2040,3480,2043,-3343,3480\n        ,2042,2044,-2048,2044,2045,2046,-2048,2043,3480,-2048,2038,2048,2049,-2051,2049,2051,-2085,2049,2048,-2052,2052,2049\n        ,2084,-2084,2050,2049,-2053,2054,2055,2056,-2054,2036,2039,2057,-2059,2036,2058,2059,-2042,2038,2050,2057,-2040,2057\n        ,2050,2052,-2794,2060,2058,2057,2793,-2793,2061,2056,2055,-2063,2063,2064,2085,-2087,2067,2065,-2067,2067,2069,2064\n        ,-2071,2074,2073,2072,-2076,2074,2075,2051,-2077,2077,2088,-2272,2078,2077,2271,-2271,2072,2079,2080,-2076,2081,2082\n        ,2080,-2080,2083,2084,2080,-2083,2051,2075,2080,-2085,2077,2087,2265,2264,-2089,2069,2068,2071,-2090,2064,2069,2089\n        ,-2086,2085,2089,2091,-2093,2089,2071,2090,-2092,2093,2094,2087,-2078,2070,2064,2063,-2096,2068,2066,2079,-2073,2065\n        ,2081,2079,-2067,2074,2076,2097,-2097,2073,2074,-2097,2096,2097,-3319,2093,2077,2098,-2102,2098,2099,2100,-2102,2102\n        ,2103,2104,2113,-3479,2105,2106,2104,-2104,2107,2108,2104,-2107,2104,2108,3264,-2114,2110,2109,2111,-2113,2110,2112\n        ,2130,-2133,2116,2114,3264,3265,-2129,2114,2116,2117,2118,-2116,2119,2120,2121,-2123,2121,2120,2109,2123,-2125,2125\n        ,2122,-2122,2125,2121,2124,-2127,2116,2128,2127,-3309,2127,2128,2137,-2130,2127,2129,2110,-2133,2129,2123,2109,-2111\n        ,3309,2132,2130,-2132,2133,2134,2120,-2120,2134,2111,2109,-2121,56,57,2135,-2137,2135,57,58,-2140,2130,2112,2135,-2140\n        ,2111,2136,2135,-2113,2137,2138,2123,-2130,3308,2127,2132,-3310,2131,2130,2139,-2141,59,2140,2139,-59,56,2136,2141\n        ,-61,2111,2134,2141,-2137,2133,2142,2141,-2135,61,60,2141,-2143,2126,2143,-2126,2126,2124,2123,2138,-2145,2145,2143\n        ,2126,-2145,2147,2146,3190,-3190,2148,2147,3189,-2170,62,2149,2150,-64,2148,2151,2150,-2150,2152,2153,2150,-2152,64\n        ,63,2150,-2154,2154,2155,2152,-2162,2157,65,3301,-3301,2156,2157,3300,-3300,2462,2460,2159,-2161,2159,2460,2461,-2159\n        ,2158,2162,2165,-2167,2162,2163,2164,-2166,2146,2147,2167,-2169,2148,2149,2167,-2148,62,66,2167,-2150,67,2168,2167\n        ,-67,2148,2169,2170,-2152,2170,2161,2152,-2152,68,64,2153,-2172,2153,2152,2155,-2172,69,3496,2172,2250,-2250,2172\n        ,2175,2683,-2251,2173,2174,2175,-2177,2175,2174,2682,-2684,71,2176,2175,-71,2174,2173,2178,2910,-2683,2178,2179,2180\n        ,-2911,2181,2182,2183,-2185,2183,2182,3282,-3284,116,73,2183,-3284,74,2184,2183,-74,2185,2186,3278,-3280,2186,2185\n        ,2198,-2197,2187,2186,2196,-2196,2186,2187,2244,-3279,2188,2189,2235,-2182,2190,2191,2192,-2194,2194,2195,2196,-2198\n        ,2199,2197,2196,-2199,2201,2238,2232,-2201,2203,2201,2200,-2203,2204,2202,2200,-2206,2207,2204,2205,-2207,2207,2206\n        ,-2209,2208,2209,-2208,2202,2204,2207,-2210,2210,2211,2212,-2214,2212,2214,2215,-2209,2212,2211,-2215,2210,2216,2217\n        ,-2219,2219,2220,2217,-2217,2025,2221,2217,-2221,2222,2218,2217,-2222,2223,2224,2220,-2220,2224,2022,2025,-2221,2191\n        ,2225,3352,-2029,2191,2190,2222,-2226,75,2226,2227,-77,2194,2197,2227,-2227,2199,2228,2227,-2198,77,76,2227,-2229\n        ,2229,2230,3283,-3283,2194,2226,2230,-2230,75,78,2230,-2227,2230,78,116,-3284,2206,2205,2231,-2214,2200,2232,2231\n        ,-2206,2219,2216,2231,-2233,2210,2213,2231,-2217,2233,2234,2244,-2244,2027,2030,2233,-2244,2022,2224,2233,-2031,2223\n        ,2234,2233,-2225,2182,3280,-3283,2182,2181,2235,3281,-3281,2201,2236,2237,-2239,2237,2236,3279,-3279,2234,2237,3278\n        ,-2245,2223,2238,2237,-2235,74,79,2239,-2185,2239,2188,2181,-2185,2238,2223,2219,-2233,2240,2241,2027,-2244,2187,2240\n        ,2243,-2245,2240,2187,2195,-2255,2241,2240,2254,3280,-3282,2192,2242,2189,-2194,2245,2246,-2248,2247,2246,2248,-2012\n        ,2249,2250,2251,-2253,2683,2685,2251,-2251,2253,2193,2189,-2189,2254,2229,3282,-3281,2194,2229,2254,-2196,2255,2256\n        ,2257,-2259,2259,2260,2257,-2257,2261,2262,2257,-2261,2263,2258,2257,-2263,2264,2265,2266,-2268,2085,2092,2268,-2087\n        ,2269,2270,-2272,2269,2271,2088,-3339,2273,2272,2274,-2276,2273,2275,2276,-2278,2291,2273,2277,-2293,2279,2278,2280\n        ,-2282,2279,2281,2282,-2284,2275,2274,2284,-2286,2275,2285,2286,-2277,2289,2288,2278,-2280,2289,2279,2283,-2291,2272\n        ,2273,2291,-3382,80,2293,2294,-82,2294,2293,2318,-2318,2295,2294,2317,-2314,82,81,2294,-2296,2299,2298,2296,-2298\n        ,2299,2300,2301,-2299,2302,2303,2314,-2288,2304,2302,2287,-2841,83,84,2302,-2305,85,2303,2302,-85,2118,2305,2306,-2308\n        ,2308,2309,2307,-2307,2290,2311,2312,-2314,2286,2314,2312,-2312,2312,2314,2303,-3261,2295,2313,2312,-3261,2316,2315\n        ,2102,3478,-2311,2288,2289,2317,-2319,2290,2313,2317,-2290,2052,2083,2319,-2794,2322,2321,2323,-2325,2322,2324,2081\n        ,-2066,2070,2095,2325,-2329,2325,2326,2327,-2329,2323,2329,2330,-2325,2320,2319,2330,-2330,2083,2082,2330,-2320,2081\n        ,2324,2330,-2083,2094,2093,2331,-2335,2331,2332,2333,-2335,2100,2335,2336,-2102,2337,2338,2336,-2336,2332,2331,2336\n        ,-2339,2093,2101,2336,-2332,2339,2340,2343,-2345,2340,2341,2342,-2344,2346,2347,2348,-2346,2349,2350,2353,-2355,2350\n        ,2351,2352,-2354,2420,2421,2356,-2356,2092,2403,2357,-2269,2357,2358,2359,-2361,2208,2361,2362,-2364,2364,2365,2362\n        ,-2362,2368,2363,2362,-2368,2369,2368,2367,-2371,2370,2367,2366,-2350,2372,2371,2379,-2379,2372,2378,2409,-2418,2373\n        ,2372,2417,-2880,2372,2373,2374,-2372,2376,2375,2398,-2400,2377,2376,2399,-2401,2383,2376,2377,-2385,2378,2379,2411\n        ,-2417,2381,2380,2382,-2384,2381,2383,2384,-2386,2386,2385,2384,-2388,2386,2387,2644,-2646,2369,2388,2390,-2369,2388\n        ,2389,2202,-2391,2389,2388,2391,-2393,2369,2393,2391,-2389,2394,2395,2391,-2394,2396,2392,2391,-2396,2208,2363,2397\n        ,-2210,2368,2390,2397,-2364,2202,2209,2397,-2391,2399,2398,2785,-2787,2790,2400,2399,-2787,2396,2395,2401,-2403,2394\n        ,2403,2401,-2396,2091,2401,2403,-2093,2386,2405,2406,-2386,3482,2351,2350,-3482,3481,2350,2349,-2367,2407,2355,2356\n        ,-2409,2409,2377,2400,-2418,2381,2385,2406,-3156,2381,3155,2882,-2381,2411,2379,2412,-2411,2369,2370,-2414,2413,2370\n        ,2349,-2355,2369,2413,2414,-2394,2393,2414,2358,-2395,2415,2354,2353,-2411,3495,2409,2378,-2417,2383,2382,2375,-2377\n        ,2879,2417,2400,-2791,2420,2419,2418,-2422,2418,2419,2437,-2437,2422,2423,2426,-2428,2423,2424,2425,-2427,2154,2428\n        ,2429,-2431,2190,2193,2431,-2435,2431,2432,2433,-2435,72,127,2435,-2178,2436,2437,2263,-2439,2439,2198,2185,-2444\n        ,3477,2440,2439,-2444,2442,2439,2440,-2442,2199,2198,2439,-2443,2443,2185,3279,-3182,2441,2444,2445,-2447,2447,2448\n        ,2445,-2445,86,87,2445,-2449,88,2446,2445,-88,2449,2450,2690,-2692,2451,2452,2450,-2450,2450,2452,2705,-2843,2690\n        ,2450,2842,-2814,2454,2455,2453,3394,-3394,2456,2454,3393,-3393,2457,2458,2454,-2457,2459,2455,2454,-2459,2680,2460\n        ,2462,-2493,2461,2460,2680,-2682,89,2463,2464,-91,2465,2466,2464,-2464,2131,2140,2464,-2467,59,90,2464,-2141,2424\n        ,2003,2002,-2468,2468,2469,2423,-2423,2469,2003,2424,-2424,2471,2461,2681,-3294,2472,2471,3293,-3295,1884,1869,2473\n        ,-2475,2425,2424,2467,-2476,2476,2477,2485,-2485,2478,2476,2484,-2488,2479,2480,2476,-2479,2481,2477,2476,-2481,2482\n        ,2483,2484,-2486,2486,2487,2484,-2484,2451,2488,2489,-2453,2489,2488,3375,-3375,2841,2704,2489,-3375,2452,2489,2704\n        ,-2706,2490,2491,2678,-2680,2492,2490,2679,-2671,2490,2492,2462,-2817,2491,2490,2816,-2818,2494,2433,2495,-2494,2498\n        ,2497,3377,-3230,2499,2500,2503,-2505,2500,2501,2502,-2504,2214,2505,2507,-2365,2505,2494,2506,-2508,2509,2508,3322\n        ,-2753,2510,2509,2752,-3322,2511,2512,2742,-2780,2513,2514,2511,2779,-2781,2470,2511,2515,-2561,2511,2514,-2516,2470\n        ,2512,-2512,2517,2518,2516,2900,-2902,2519,2520,2517,2901,-2905,2521,2518,2517,-2521,2261,2522,2525,-2527,2522,2523\n        ,2524,-2526,2527,2528,2529,-2531,2524,2531,2529,-2529,2481,2480,2529,-2532,2479,2530,2529,-2481,2533,2534,2802,-2256\n        ,2534,2535,2536,-2803,2537,2538,2458,-2458,2538,2539,2459,-2459,2428,2541,2542,-2541,2544,3488,2407,-2662,2540,2542\n        ,2544,-2546,2389,2547,2546,2203,-2203,2548,2549,2552,-2554,2549,2550,2551,-2553,2554,2555,2556,-2558,2619,2618,2556\n        ,2555,-2622,2559,2558,2465,-2464,2559,2463,89,-92,2470,2560,-2623,2473,1869,-2562,2466,2465,2562,-2564,2466,2563,3309\n        ,-2132,2164,2163,2564,-2567,2564,2565,2543,-2567,2567,2568,2569,-2571,2569,2433,-2495,2569,2568,-2434,2494,2505,-2570\n        ,2214,2570,2569,-2506,2482,2571,2572,-2574,2574,2575,2572,-2572,2345,2576,2572,-2576,2577,2573,2572,-2577,2579,2578\n        ,2580,-2582,2579,2581,-2583,2173,3329,3333,-2179,2178,3333,3330,-2180,2584,2817,2816,-2584,2583,2816,2462,-2161,2585\n        ,2586,2587,-2589,2586,2554,2557,-2588,2574,2571,2589,-2591,2482,2485,2589,-2572,2589,2485,2477,-2872,2590,2589,2871\n        ,-2873,2591,2456,3392,-3392,2592,2591,3374,-3376,2594,2593,2661,-2676,2718,2596,2595,-2739,2508,2595,2596,-2808,2597\n        ,2598,3331,-3363,3109,2599,1870,-1866,2601,2600,2599,2553,-2756,2599,2600,2561,1869,-1871,2474,2473,2602,-2604,2602\n        ,2459,2539,-2604,2494,2493,2580,-2507,3328,3364,3363,-3330,3328,120,121,-3365,2607,2604,2605,-2607,2497,2608,2638\n        ,-3378,2608,2497,2496,2750,-2785,2610,2609,3367,-3367,2474,2613,-2613,2614,2615,2612,-2614,2616,2611,2612,-2616,2617\n        ,2618,2619,-2621,2622,2620,2619,-2622,2623,2624,2625,-2627,2625,2624,2627,-2759,2628,2625,2758,-2764,2629,2626,2625\n        ,-2629,2630,2612,2611,1877,-1882,2630,1884,-2475,2630,1881,-1885,2474,2612,-2631,2739,2595,2508,-2510,2604,2607,2631\n        ,-2633,2631,2536,2535,-2633,2633,2634,2635,-2637,2637,2638,2635,-2635,2635,2638,2608,-2799,2639,2636,2635,2798,-2800\n        ,2475,2467,2640,-2644,2640,2641,2642,-2644,2644,2352,2351,-2646,2646,2647,2648,-2650,2647,1889,1863,-2649,2646,2649\n        ,-2651,2652,2651,2653,-2655,2652,2654,2655,-2657,2038,2037,-2658,3365,3363,2658,3369,-3369,3365,3368,3367,-2610,2822\n        ,2660,2659,-2834,2659,2660,92,-94,2662,2663,2582,-3383,2662,3382,2316,-2311,2309,2662,2310,-2308,2308,2663,2662,-2310\n        ,2432,2664,2665,-2496,2512,2666,2743,-2743,2470,2667,2666,-2513,2668,2669,2666,-2668,2666,2669,2745,-2744,2180,2179\n        ,2598,-2654,2555,2554,2499,-2770,2621,2555,2769,-2734,2606,2670,2622,-2561,2586,2585,2501,-2501,2554,2586,2500,-2500\n        ,2671,2672,2919,-2958,2673,2674,2671,2957,-2960,2347,2672,2671,-2675,2407,2408,2675,-2662,2676,2677,2839,-2839,2585\n        ,2676,2838,-2502,2622,2670,2679,-2621,2679,2678,2617,-2621,2605,2670,-2607,2604,2681,2680,-2606,2683,2682,2684,-2686\n        ,2579,2686,2687,-2579,2663,2686,2579,-2583,2686,2663,2308,2877,-3308,2687,2686,3307,-2916,94,95,2689,-2589,95,96,2688\n        ,-2690,2407,3488,3489,-2356,2690,2813,3314,-3316,2691,2690,3315,-2854,2692,2693,2694,-2696,2697,2696,2694,-2694,2699\n        ,2700,-2702,2346,2695,2694,-2700,3333,3329,3363,-3366,2702,2596,2718,-2717,2703,2702,2716,-2718,2702,2703,2808,-2807\n        ,2706,3395,-3374,2705,2704,2707,-3403,1878,2708,-1880,2840,2833,2659,-2305,2659,93,83,-2305,2495,2665,2284,-2275,2709\n        ,2710,3184,-3184,2563,2562,2713,-2715,1854,2003,2469,-1856,2469,2468,1858,-1856,3376,2715,3373,-3396,2551,2715,3376\n        ,-2757,2716,2718,3164,-3166,2719,2717,2716,3165,-3167,2493,2495,2274,-2273,2176,3328,3329,-2174,71,120,3328,-2177\n        ,2708,2720,2721,-1880,2611,2616,2720,-2709,91,68,2171,-2560,2171,2155,2558,-2560,2722,2723,2724,-2726,2486,2726,2724\n        ,-2724,2727,2728,-3477,2729,2725,2724,-2729,3490,2420,2355,-3490,2425,2475,2629,-2731,2731,2732,2649,-2649,1863,1885\n        ,2731,-2649,2733,2427,-2669,2427,2733,2769,-2769,2735,2734,2738,-2737,2046,2735,2736,-2738,2736,2738,2595,-2740,2736\n        ,2739,3195,-2738,2817,2584,97,-108,2714,2713,2740,-2118,2741,2742,2743,-2745,2746,2744,2743,-2746,2117,2740,2747,-2119\n        ,2005,2004,2641,-2641,2005,2640,2467,-2003,2748,2750,-2497,2753,2751,-2749,2551,2756,2754,-2553,2754,2756,3392,-3394\n        ,2755,2754,3393,-3395,2208,2215,-2362,2361,2215,2214,-2365,2757,2758,2627,-2760,2760,2761,2758,-2758,2762,2763,2758\n        ,-2762,2429,2428,2540,-2765,98,99,2618,-2618,2760,2765,2766,-2762,2481,2531,2766,-2766,2524,2767,2766,-2532,2762,2761\n        ,2766,-2768,2585,2588,2689,-2677,2689,2688,2677,-2677,2180,2653,-2652,2499,2504,2768,-2770,1850,2770,2773,-2775,2770\n        ,2771,2772,-2774,2775,2776,2763,-2763,2628,2763,2776,-2888,2263,2437,2777,-2259,2777,2533,2255,-2259,2562,2465,2430\n        ,-2430,2741,2778,2779,-2743,2259,2780,2779,-2779,2607,2606,2560,-2516,2781,2374,2722,-2726,2781,2725,2729,-2783,2750\n        ,2749,2783,-2785,2786,2785,2787,-2789,2786,2788,2789,-2791,2791,3364,121,-101,2791,2658,3363,-3365,2633,2794,2795\n        ,-2635,2616,2615,2795,-2795,2614,2796,2795,-2616,2637,2634,2795,-2797,2701,2347,2346,-2700,2701,2672,-2348,2701,2700\n        ,-2798,2672,2701,2797,-2920,2798,2608,2784,-2811,2519,2799,2798,2810,-2521,2580,2493,2272,-2582,3164,2718,2738,-2735\n        ,2259,2778,2800,-2261,2741,2801,2800,-2779,2523,2522,2800,-2802,2261,2260,2800,-2523,2255,2802,2803,-2257,2536,2804\n        ,2803,-2803,2513,2780,2803,-2805,2259,2256,2803,-2781,2193,2253,2805,-2432,2805,2664,2432,-2432,2643,2626,2629,-2476\n        ,2643,2642,2623,-2627,2702,2806,2807,-2597,2747,2740,-2546,2544,2661,-2594,2781,2782,2821,-3407,2781,3406,2371,-2375\n        ,2806,2808,3325,-3325,2807,2806,3324,-3324,2199,2442,2809,-2229,2809,2442,2441,-2447,88,101,2809,-2447,77,2228,2809\n        ,-102,2783,2811,2810,-2785,2521,2520,2810,-2812,2843,2812,2813,-2843,2813,2812,2684,2911,-3315,2814,103,92,-2661,2815\n        ,2814,2660,-2823,3322,2508,2807,-3324,2818,2819,3387,-3327,2819,2818,2898,-2898,2821,2820,2360,-3406,2820,2821,2782\n        ,-3186,2664,2805,2815,-2823,2253,2823,2815,-2806,102,2814,2815,-2824,2824,2825,2827,-2829,2825,2245,2826,-2828,2829\n        ,2830,2503,-2503,2830,2831,2504,-2504,2543,2542,2541,-2833,2465,2558,-2431,2822,2833,2665,-2665,2547,2389,-2393,2834\n        ,2547,2392,-2397,2422,2427,2768,-2836,2768,2504,2831,-2836,2836,2837,2838,-2840,2837,2502,2501,-2839,2840,2284,2665\n        ,-2834,2614,2613,2603,-2540,2474,2603,-2614,2841,3374,2591,-3392,2429,2764,2713,-2563,2550,2549,105,-3502,2549,2548\n        ,104,-106,2468,2422,2835,-2845,2835,2831,2772,-2845,2479,2845,2846,-2531,2789,2788,2846,-2846,2787,2847,2846,-2789\n        ,2527,2530,2846,-2848,2727,3356,2848,-3355,2848,2849,-2851,2849,2848,3356,-3358,2848,2850,3233,-3355,2614,2539,2538\n        ,-2797,2538,2537,2637,-2797,2852,2851,3484,-2044,2853,2851,2852,-3228,3358,2854,2010,-3242,2855,2856,2854,-3359,2486\n        ,2483,2857,-2727,2482,2858,2857,-2484,2859,2860,2857,-2859,2545,2544,2593,-2748,2861,2862,2863,-2865,2865,2866,2863\n        ,-2863,2863,2866,2867,-2869,2864,2863,2868,-2871,2869,2870,2868,-2868,2481,2765,2871,-2478,2760,2872,2871,-2766,2874\n        ,2478,2487,-2889,2875,2874,2888,-2890,2789,2845,2874,-2876,2479,2478,2874,-2846,2305,2594,2876,-2307,2876,2594,2675\n        ,-2882,2308,2306,2876,-2878,2438,2263,2262,-2879,2262,2261,2526,-2879,1858,2468,2844,-2881,2844,2772,2771,-2881,2876\n        ,2881,2882,-2878,2746,2883,2884,-2745,2775,2885,2884,-2884,2523,2801,2884,-2886,2741,2744,2884,-2802,2435,2886,2706\n        ,-2178,2435,2249,2252,-2887,2730,2629,2628,-2888,98,2617,2678,-107,2486,2723,2888,-2488,2722,2889,2888,-2724,114,106\n        ,2678,-2492,114,2491,2817,-108,2774,2773,2830,-2830,2773,2772,2831,-2831,94,2588,2587,-110,2587,2557,108,-110,2852\n        ,2043,2047,2046,-2738,2524,2523,2885,-2768,2885,2775,2762,-2768,108,2557,2556,-111,2556,2618,99,-111,2890,2891,2759\n        ,-2893,2760,2757,2759,-2892,2627,2892,-2760,2893,2894,2895,-2897,2894,2342,2341,-2896,2897,2898,3236,-3238,2859,2899\n        ,2827,-2827,2899,2577,2828,-2828,2646,2902,2901,-2901,2903,2904,2901,-2903,2824,2905,2647,-2647,2905,2348,1889,-2648\n        ,2348,2905,-2907,2906,2905,2824,-2829,2245,2825,2900,-2517,2825,2824,2646,-2901,2909,2907,2339,-2345,2908,2907,-2910\n        ,2910,2180,2651,-2912,2910,2911,2684,-2683,2746,2745,2912,-2884,2912,2745,2669,-2914,2887,2776,2912,-2914,2775,2883\n        ,2912,-2777,2668,2914,2913,-2670,2730,2887,2913,-2915,2915,2406,-2406,3483,2405,2386,-2646,2687,2915,2405,-3484,2916\n        ,2917,2797,-2701,2918,2919,2797,-2918,2864,2870,2920,2921,-3017,2869,2920,-2871,2922,2923,2926,-2928,2923,2924,2925\n        ,-2927,2928,2929,2932,-2934,2929,2930,2931,-2933,2939,2934,-2939,2934,2936,-2938,2937,2940,2938,-2935,2938,2940,3069\n        ,-3069,2939,2938,3068,-3072,2941,2942,-2944,2943,2942,2944,-2946,2946,2869,-2948,2946,2948,-2870,2946,2950,-2949,2623\n        ,2951,2952,-2625,2953,2954,2952,-2952,2937,2955,2952,-2955,2627,2624,2952,-2956,2937,2936,-2956,2935,2949,-2937,2890\n        ,2892,2936,-2950,2627,2955,2936,-2893,2918,2956,2957,-2920,2958,2959,2957,-2957,2959,2958,2960,-2962,2959,2961,2962\n        ,-2674,2339,2907,2963,-2965,2908,2965,2963,-2908,2966,2967,2963,-2966,2968,2964,2963,-2968,2969,2970,2971,-2973,2341\n        ,2340,2971,-2971,2339,2964,2971,-2341,2968,2972,2971,-2965,2973,2974,2975,-2977,2977,2978,2975,-2975,2896,2979,2975\n        ,-2979,2980,2976,2975,-2980,2978,3465,2893,-2897,2937,2954,2981,-2941,2953,2982,2981,-2955,2981,2982,3180,-3180,2940\n        ,2981,3179,-3070,2642,2982,-2954,2642,2983,3180,-2983,2918,2917,2984,-2986,2916,2986,2984,-2918,2987,2988,2984,-2987\n        ,2989,2985,2984,-2989,2958,2956,2990,-2992,2918,2985,2990,-2957,2989,2992,2990,-2986,2993,2991,2990,-2993,2995,2994\n        ,2996,-2998,2995,2997,2916,-2701,2916,2997,2998,-2987,2996,2999,2998,-2998,3000,3001,2998,-3000,2987,2986,2998,-3002\n        ,3002,2994,-3004,3002,3003,3004,-3006,3002,3005,3006,-3008,3002,3007,2996,-2995,3006,3008,3009,-3008,3010,3011,3009\n        ,-3009,3000,2999,3009,-3012,2996,3007,3009,-3000,3003,3012,3013,-3015,3015,3016,3013,-3013,3013,3016,2921,-3021,3014\n        ,3013,3020,-3024,3017,3014,3023,-3192,3017,3191,3090,3095,-3095,3005,3004,3017,3094,-3097,3003,3014,3017,-3005,3018\n        ,3019,3008,-3007,3019,2931,3010,-3009,2920,3021,3020,-2922,3022,3023,3020,-3022,2920,2869,2948,-3022,2948,2950,3022\n        ,-3022,3024,3025,3026,-3028,3028,3029,3026,-3026,2969,2972,3026,-3030,2968,3027,3026,-2973,3030,3031,3032,-3034,3024\n        ,3027,3032,-3032,2968,2967,3032,-3028,2966,3033,3032,-2968,3035,3034,3024,-3032,3035,3031,3030,-3037,3024,3034,3037\n        ,-3026,3037,3038,3028,-3026,2925,2924,3039,-3043,3040,3041,3042,-3040,3040,3039,3035,-3037,3039,2924,3034,-3036,3043\n        ,3044,3047,-2928,3044,3045,3046,-3048,3042,3048,3049,-2926,3041,3048,-3043,3045,3044,3019,-3019,3044,3043,2931,-3020\n        ,2928,2933,2925,-3050,3050,2944,-3053,3051,3055,2930,-2930,2928,3053,3051,-2930,3011,3010,2930,-3056,3011,3055,3054\n        ,-3001,3001,3000,3054,-3057,3001,3056,2941,-2988,2941,3056,3052,-2943,3054,3050,3052,-3057,2944,2942,-3053,3058,3057\n        ,2989,-2989,3058,2988,2987,-2942,3060,3059,2993,-2993,3060,2992,2989,-3058,3062,2993,3059,-3062,2960,3063,3064,-3066\n        ,3062,3066,3064,-3064,3030,3033,3064,-3067,2966,3065,3064,-3034,3063,2960,2958,-2992,3063,2991,2993,-3063,2973,3067\n        ,3068,-3070,3070,3071,3068,-3068,3070,3067,3072,-3074,2973,2976,3072,-3068,2980,3074,3072,-2977,3075,3073,3072,-3075\n        ,3070,3073,3077,-3079,3073,3075,3076,-3078,3089,3080,3079,-3089,3079,2939,3071,-3089,3079,2935,-2940,2943,2945,3085\n        ,3105,-3082,3058,2941,2943,3081,-3058,2945,3082,3083,-3086,3082,3049,3048,-3084,3041,3084,3083,-3049,3059,3085,3083\n        ,-3085,3046,3086,3077,-3077,3086,3087,3078,-3078,3088,3078,3087,-3090,3082,2945,2944,-3054,2928,3049,3082,-3054,3022\n        ,2950,3080,-3091,3090,3080,3089,-3096,3045,3018,3091,-3094,3092,3093,-3092,3092,3091,3094,-3096,3018,3096,3094,-3092\n        ,3047,3046,3076,-3098,3047,3097,2922,-2928,3034,2924,2923,-3038,2923,2922,3038,-3038,3098,3038,2922,-3098,3076,3098\n        ,-3098,3028,3038,3098,-3100,3098,3076,3075,-3100,2969,3029,3100,-3102,3028,3099,3100,-3030,3075,3074,3100,-3100,2980\n        ,3101,3100,-3075,2980,2979,3102,-3102,2896,2895,3102,-2980,2341,2970,3102,-2896,2969,3101,3102,-2971,2697,2693,2862\n        ,-2862,2693,2692,2865,-2863,2864,3016,3015,-2862,3015,3012,3103,-2698,3012,3003,2994,-3104,3061,3059,3084,-3105,3057\n        ,3081,3105,-3061,3059,3060,3105,-3086,3046,3045,3093,-3087,3093,3092,3087,-3087,3089,3087,3092,-3096,3043,2927,2926\n        ,-3107,2926,2925,2933,-3107,2951,2623,-2643,2951,2642,-2954,2574,2590,3108,-3108,3108,2590,2872,-2874,2994,2995,2698\n        ,-3104,2700,2696,2698,-2996,52,111,3109,-1867,111,104,2548,-3110,2930,3010,-2932,2931,3043,3106,-2933,2933,2932,-3107\n        ,3005,3096,-3007,3006,3096,-3019,2574,2692,2695,-2576,2692,3107,-3112,2867,2866,3110,-3113,2865,3111,3110,-2867,2890\n        ,2947,2873,-2892,2947,2869,2867,-3113,2947,3112,3110,3108,-2874,2692,3111,-2866,3113,2280,2278,-3115,3113,3114,3115\n        ,-3117,3118,3117,3115,-3115,3118,3114,2278,-2289,112,3119,3120,-114,3120,3119,3125,-3127,2318,2293,3120,-3127,80,113\n        ,3120,-2294,3121,2297,2296,-3123,3121,3122,3123,-3125,3117,3118,3126,-3126,2288,2318,3126,-3119,7,12,2119,-2123,7\n        ,2122,2125,-9,2133,2119,12,-11,3127,3128,-3130,3130,3127,3129,-3132,2107,3132,3129,-3129,3129,3132,-3132,2133,10,11\n        ,-2143,11,0,61,-2143,9,8,2125,-2144,9,2143,2145,-35,3133,3134,3135,-3137,2105,3137,3135,-3135,3138,3136,3135,-3138\n        ,3139,3140,3141,-3143,3142,3141,-3132,3143,3144,3145,-3147,3133,3147,3145,-3145,3148,3149,3145,-3148,3150,3146,3145\n        ,-3150,3141,3140,3151,-3153,3139,3153,3151,-3141,3154,3152,3151,-3154,2881,2675,2408,-3157,2881,3156,2380,-2883,3156\n        ,2408,2356,-3158,3156,3157,2382,-2381,3157,2356,2421,-3159,3157,3158,2375,-2383,3158,2421,2418,-3160,2398,2375,3158\n        ,-3160,3159,2418,2436,-3162,2398,3159,3161,-2786,3160,2787,2785,-3162,3160,3161,2436,-2439,2438,2878,3162,-3161,2526\n        ,3163,3162,-2879,2527,2847,3162,-3164,2787,3160,3162,-2848,2525,2528,2527,-3164,2524,2528,-2526,2734,2735,3167,-3169\n        ,2735,2046,2045,-3168,3164,2734,3168,-3170,3165,3164,3169,-3171,3165,3170,3171,-3167,3172,3166,3171,-3174,3172,3173\n        ,2062,-2056,3174,2597,3362,-3404,3175,3174,3403,-3405,3174,3175,2655,-2655,3176,3036,3030,-3067,3176,3066,3062,-3062\n        ,3040,3036,3176,-3105,3061,3104,-3177,2908,3177,3178,-2966,2962,2961,3178,-3178,2960,3065,3178,-2962,2966,2965,3178\n        ,-3066,3071,3070,3078,-3089,2977,2974,3179,-3181,2973,3069,3179,-2975,2348,2347,1887,-1890,2697,2861,-3016,2346,2345\n        ,2575,-2696,3182,3181,3316,2546,-2548,2443,3181,3182,-3478,2447,2444,3183,-3185,2441,2440,3183,-2445,2820,2266,-2361\n        ,3186,3187,-3189,2012,2009,3500,-3195,2009,2011,2248,-3501,2169,3189,3296,-3296,3189,3190,3297,-3297,2532,2565,2564\n        ,-3303,2564,2163,2472,-3303,2472,2163,2162,-2472,2162,2158,2461,-2472,2170,2169,3295,-2833,2541,2161,2170,-2833,2161\n        ,2541,2428,-2155,3022,3090,3191,-3024,3192,2010,2012,-3194,3192,3193,2053,-2057,3193,2012,3194,-3239,2656,2851,2853\n        ,-3316,2065,2067,3196,-2323,2070,2328,3196,-2068,2327,3197,3196,-2329,2321,2322,3196,-3198,2100,2099,3198,-2336,3198\n        ,3199,2337,-2336,3200,3201,-3203,3202,3203,-3201,3199,3198,3202,-3202,2099,3204,3202,-3199,2061,3203,3202,-3205,3200\n        ,3203,-3206,3206,3200,-3206,3205,2061,2062,-3208,3205,3203,-2062,3205,3207,-3207,2062,3173,3208,-3208,3171,3209,3208\n        ,-3174,3210,3211,3208,-3210,3206,3207,3208,-3212,3171,3170,3212,-3210,3169,3213,3212,-3171,3214,3215,3212,-3214,3210\n        ,3209,3212,-3216,3213,3169,3168,-3217,3213,3216,3217,-3215,3168,3167,3218,-3217,2045,3219,3218,-3168,3220,3221,3218\n        ,-3220,3217,3216,3218,-3222,3220,3219,3222,-3224,2045,2044,3222,-3220,2042,3224,3222,-2045,3225,3223,3222,-3225,3225\n        ,3224,2059,-3227,2042,2041,2059,-3225,2060,3226,2059,-2059,3227,2852,2737,-3196,2510,3228,3227,-3196,3228,2691,2853\n        ,-3228,2449,2691,3228,-3373,2498,3229,2592,-3376,2457,2592,-3230,2055,2054,3230,-3173,3230,2719,3166,-3173,3338,2088\n        ,2264,3188,3187,-3336,3231,3232,3234,-3236,3232,3233,2850,-3235,2719,3237,-3237,3193,3238,2054,-2054,3239,3240,3192\n        ,-2057,3240,3241,2010,-3193,3242,3239,-2057,3242,2056,-2062,3243,3244,-2100,2061,3204,2099,-3245,3239,3242,3245,-3247\n        ,2061,3244,3245,-3243,3243,3246,3245,-3245,3247,3248,3240,-3240,3248,3249,3241,-3241,2105,2103,3250,-3252,2102,3252\n        ,3250,-2104,2300,2299,3250,-3253,2297,3251,-3251,3250,2299,-2298,3124,3253,3254,-3122,3255,3256,3254,-3254,3138,3257\n        ,3254,-3257,2297,3121,3254,-3258,3255,3258,3259,-3257,3259,3147,3133,-3137,3138,3256,3259,-3137,2118,2307,2310,-2116\n        ,85,115,3260,-2304,82,2295,3260,-116,2284,2840,2287,-2286,2311,2290,2283,-3262,2311,3261,2276,-2287,3261,2283,2282\n        ,-3263,3261,3262,2277,-2277,3262,2282,2301,-3264,3262,3263,2292,-2278,3265,3264,2108,-3267,2137,2128,3265,-3267,3479\n        ,3267,3266,-2109,2138,2137,3266,-3268,3479,3128,3268,-3268,3127,3269,3268,-3129,2145,2144,3268,-3270,2138,3267,3268\n        ,-2145,3130,3131,3141,-3271,3127,39,-3270,3131,3132,3271,-3143,2107,3272,3271,-3133,3139,3142,3271,-3273,2105,3134\n        ,3273,-3275,3273,3133,3275,-3140,3273,3134,-3134,3139,3274,-3274,2107,2106,3276,-3273,2105,3274,3276,-2107,3139,3272\n        ,3276,-3275,3269,39,34,-2146,2300,3252,-3278,3277,3252,2102,-2316,2764,2540,-2546,2764,2545,2740,-2714,3181,3279,2236\n        ,-3317,3190,3284,3298,-3298,3284,2156,3299,-3299,2158,2166,3285,-2160,3285,3286,2160,-2160,2160,3286,3287,-2584,3287\n        ,3288,2584,-2584,3284,3190,2146,-3291,2156,3284,-3291,2146,2168,3289,-3291,67,117,3289,-2169,65,2157,3289,-118,2156\n        ,3290,3289,-2158,97,2584,3288,-119,2533,2777,3291,-3293,3291,2777,2437,-2420,3490,3291,2419,-2421,2604,2632,3293,-2682\n        ,2535,3294,3293,-2633,2832,2566,-2544,2164,2566,2832,-3296,2166,2165,3296,-3298,2164,3295,3296,-2166,3286,3285,3298\n        ,-3300,2166,3297,3298,-3286,3288,3287,3300,-3302,3286,3299,3300,-3288,118,3288,3301,-120,65,119,-3302,3302,2472,3294\n        ,-3304,3292,2532,3302,-3304,2535,2534,3303,-3295,2533,3292,3303,-2535,2879,2790,2789,-2876,2373,2879,2875,-2890,2373\n        ,2889,2722,-2375,3263,2301,2300,-3278,3263,3277,2315,-2293,2291,2292,2315,-2317,2291,2316,3382,-3382,3304,2506,2580\n        ,-2579,2823,2253,2188,-2240,2823,2239,79,-103,2495,2433,-2433,2567,3305,3306,-2569,2190,2434,3306,-3306,2433,2568\n        ,3306,-2435,3307,2877,2882,-3156,2406,2915,3307,-3156,2593,2305,2118,-2748,2116,3308,2714,-2118,3308,3309,2563,-2715\n        ,2298,2301,2282,-2282,2298,2281,2280,-2297,3122,2296,2280,-3114,3122,3113,3116,-3124,2297,3257,3310,-3252,3138,3137\n        ,3310,-3258,2105,3251,3310,-3138,3133,3144,3311,-3276,3143,3312,3311,-3145,3154,3153,3311,-3313,3139,3275,3311,-3154\n        ,2043,3485,-3343,2426,2425,2730,-2915,2426,2914,2668,-2428,2536,2631,3313,-2805,2631,2607,2515,-3314,3313,2514,2513\n        ,-2805,2651,2652,3314,-2912,3314,2652,2656,-3316,2236,2201,2203,-3317,2396,2712,-2835,2712,2711,-2835,3330,2609,2610\n        ,3317,-3332,2598,2179,3330,-3332,2546,3316,-2204,2073,2096,3318,2090,-2072,3319,3320,2402,-2405,3320,2712,2396,-2403\n        ,2753,3321,2752,-2752,3322,3323,2783,-2750,2783,3323,3324,-2812,2521,2811,3324,-3326,2521,3325,3326,-3328,2818,3326\n        ,3325,-2809,3332,2657,-2077,2038,2657,3332,-2049,3332,2076,-2052,2051,2048,-3333,3334,3235,3249,-3249,3334,3248,3247\n        ,-2271,3231,3335,3336,-3233,3187,3337,3336,-3336,3233,3232,3336,-3338,3339,2269,3338,-3232,3338,3335,-3232,2270,2269\n        ,3339,-3335,3339,3231,3235,-3335,3340,2270,3239,-3247,2270,3340,-2079,3243,3341,3340,-3247,3340,3341,-2079,2270,3247\n        ,-3240,2077,2078,3341,-2099,3341,3243,2099,-2099,3188,2264,-2268,3186,3188,2267,-3186,3186,3185,2782,-2730,2247,2011\n        ,2856,-3362,2245,2247,3361,-2827,2597,2653,-2599,3175,3404,3342,-3486,3343,2241,3281,-3345,2020,2033,3343,-3345,2235\n        ,3345,3344,-3282,2021,2020,-3345,3344,3345,-2022,2031,2021,3346,-2018,2189,2242,2017,-3347,2567,2570,3347,-3349,2214\n        ,2211,3347,-2571,2210,2218,3347,-2212,2222,3348,3347,-2219,2222,2221,3349,-2226,2025,2024,3349,-2222,3349,2024,3350\n        ,-3352,2225,3349,3351,-3353,2222,2190,3305,-3349,2567,3348,-3306,2032,2015,2026,3343,-2034,2015,2014,2029,-2027,2014\n        ,3352,3351,-3351,2014,2028,-3353,3346,2021,-3346,3345,2235,2189,-3347,3233,3337,3353,-3355,3187,3186,3353,-3338,2729\n        ,2728,3353,-3187,2727,3354,3353,-2729,3234,2850,2849,-3356,3234,3355,3249,-3236,3356,2727,2860,-2860,2859,3357,-3357\n        ,3359,2855,2849,-3358,2859,3359,-3358,3241,3249,3355,-3359,3355,2849,2855,-3359,2828,2577,2576,-2907,2576,2345,2348\n        ,-2907,2577,2899,3360,-2574,2859,2858,3360,-2900,2482,2573,3360,-2859,2855,3359,3361,-2857,3359,2859,2826,-3362,3331\n        ,3317,2037,-3363,2037,3317,-2658,2657,3317,2610,2097,-2077,3333,3365,2609,-3331,3184,2710,3320,3319,-3370,2712,3320\n        ,-2711,2791,100,86,-2449,2791,2448,2447,-2659,3366,3367,3319,-2405,3319,3367,3368,-3370,3369,2658,2447,-3185,2610\n        ,3366,3318,-2098,3366,2404,2090,-3319,2091,2090,2404,2402,-2402,2488,3371,2498,-3376,2488,2451,3370,-3372,2753,2748\n        ,3371,-3371,3370,2451,2449,-3373,2706,3373,-2178,2841,3391,3376,-3396,2756,3376,3391,-3393,2638,2637,2537,-3378,3377\n        ,2537,2457,-3230,2473,2561,3379,-2603,2453,2455,-3380,2453,3379,2600,-2602,2459,2602,3379,-2456,3228,2510,3321,-3373\n        ,3321,2753,3370,-3373,3483,2645,2351,-3483,2365,2364,2507,-3381,2507,2506,3304,-3381,3381,3382,2582,-2582,2054,3238\n        ,3383,-3231,3383,3238,3194,-3385,2897,3237,3383,-3385,2719,3230,3383,-3238,3385,3500,2248,3388,-3387,3384,3385,2819\n        ,-2898,2819,3385,3386,-3388,3389,3387,3386,-3389,2248,2246,3390,-3389,3390,2245,-2517,3390,2246,-2246,3390,2516,-3408\n        ,3389,3388,-3391,3389,3390,-3408,2719,3236,-2718,2703,2717,3236,-2899,2898,2818,2808,-2704,2553,2552,2754,-2756,2551\n        ,2550,3378,-2716,3373,2715,3378,-3506,2755,3394,2453,-2602,2650,2649,2732,-3397,1879,2721,3397,-1973,2720,3398,3397\n        ,-2722,2732,2731,3397,-3399,1885,1972,3397,-2732,3396,2732,3398,-3400,2720,3399,-3399,3400,3396,2633,-2637,2639,3400\n        ,-2637,3400,2639,2903,-3402,2646,2650,3401,-2903,2903,2902,-3402,2720,2616,2794,-3400,3399,2794,2633,-3397,2707,2706\n        ,2886,-3403,2251,2685,2812,-2844,2684,2812,-2686,2886,2252,-3403,2904,2903,2639,-2800,2519,2904,-2800,2037,2035,3403\n        ,-3363,2034,3404,3403,-2036,2653,2597,3174,-2655,3485,2043,-3485,2414,2413,2354,-2416,2414,2415,2359,-2359,2403,2394\n        ,2358,-2358,2266,2268,2357,-2361,2086,2268,2266,-2266,2063,2086,2265,-2088,2095,2063,2087,-2095,2325,2095,2094,-2335\n        ,2325,2334,2333,-2327,2359,3405,-2361,2379,2371,3406,-2413,3406,2821,3405,-2413,2518,2521,3327,-3408,2516,2518,-3408\n        ,3387,3389,3327,-3327,3327,3389,-3408,2733,2668,2667,-2471,2760,2891,2873,-2873,3408,3409,3410,-3412,3409,2774,2829\n        ,-3411,3410,2829,2502,-2838,3412,3413,-3415,122,3412,3414,-124,1846,1851,3409,-3409,3409,1851,1850,-2775,3412,3416\n        ,-3416,3418,3417,3468,-3468,3418,3411,3419,-3418,2836,3420,-3412,3420,3415,3421,-3420,3421,3415,3416,-1829,3417,3419\n        ,3421,-1830,3469,3468,3417,-1830,3414,3413,2839,-2678,2839,3413,3420,-2837,2836,3411,3410,-2838,3416,3412,122,-125\n        ,3415,3420,3413,-3413,3419,3411,-3421,3408,3411,3418,-3423,3422,3418,-3468,1847,1846,3408,-3423,1847,3422,3467,-3476\n        ,123,3414,2677,-2689,123,2688,-97,1834,3423,3424,-1836,3425,3426,3424,-3424,3427,3428,3424,-3427,1836,1835,3424,-3429\n        ,1836,3428,3429,-1842,3427,3430,3429,-3429,1845,3431,3429,-3431,1842,1841,3429,-3432,1755,1756,1843,-1843,165,1843\n        ,-1757,1858,2880,3432,-1860,2771,3433,3432,-2881,3425,3423,3432,-3434,1834,1859,3432,-3424,1845,167,1759,-3432,1759\n        ,1755,1842,-3432,3425,3434,3435,-3427,1815,1814,3435,-3435,1813,3436,3435,-1815,3427,3426,3435,-3437,3427,3436,3437\n        ,-3431,1813,1827,3437,-3437,1821,1844,3437,-1828,1845,3430,3437,-1845,2771,2770,3438,-3434,1850,1853,3438,-2771,1815\n        ,3434,3438,-1854,3425,3433,3438,-3435,3440,3439,3441,-3443,3440,3442,1896,-1888,2962,3177,3443,-3445,3441,3444,3443\n        ,-3446,3443,2909,2344,-3446,2000,1926,3446,-3448,2000,3447,3448,-2002,2347,2674,3449,-3451,2673,3451,3449,-2675,3439\n        ,3450,3449,-3452,3451,2673,2962,-3445,3451,3444,3441,-3440,3440,1887,2347,-3451,3439,3440,-3451,1896,3442,3452,-3454\n        ,3441,3445,3452,-3443,2344,3454,3452,-3446,3446,3453,3452,-3455,1925,1897,1896,-3454,3448,3447,3455,-3457,3446,3455\n        ,-3448,2641,2004,-3458,3458,2004,1963,-3460,1928,2001,3459,-2000,1963,1999,-3460,3446,3454,3460,-3456,2344,2343,3460\n        ,-3455,2342,3461,3460,-2344,3456,3455,3460,-3462,3456,3461,3462,-3464,2342,2894,3462,-3462,2893,3464,3462,-2895,3457\n        ,3463,3462,-3465,2977,3180,2983,-3466,3458,3448,3456,-3464,3458,3463,3457,-2005,3465,2983,3466,3464,-2894,3466,2641\n        ,3457,-3465,2642,2641,-3467,2642,3466,-2984,1863,1889,-1865,2353,2352,2411,-2411,2384,2377,2409,-3496,2834,2711,3182\n        ,-2548,2005,1964,1963,-2005,3476,2728,2724,-2727,2860,3476,2726,-2858,2727,3476,-2861,2843,2842,2705,-3403,3395,2707\n        ,2704,-2842,2457,2456,2591,-2593,2749,2751,2752,-3323,2749,2750,2748,-2752,2739,2509,2510,-3196,2496,2497,2498,3371\n        ,-2749,2709,3477,3182,-2712,3477,2709,3183,-2441,2709,2711,2712,-2711,2416,2411,2352,-2645,2362,2365,2366,-2368,2113\n        ,2114,2115,-3479,2310,3478,-2116,2286,2285,2287,-2315,102,103,-2815,3381,2581,-2273,2410,2359,-2416,2525,3163,-2527\n        ,2040,3342,3404,-2035,2212,2208,2206,-2214,2558,2155,2154,-2431,2107,3479,-2109,2107,3128,-3480,1844,1821,1806,-1808\n        ,1824,140,1822,-1824,2435,127,69,-2250,2793,2319,2320,-2793,2977,3465,-2979,1925,3453,3446,-1927,2001,3448,3458,-3460\n        ,3443,3177,2908,-2910,3111,3107,3108,-3111,3148,3147,3259,-3259,1161,577,578,-1727,2843,3402,2252,-2252,2650,3396\n        ,3400,-3402,405,402,403,-405,2072,2073,2071,-2069,2708,1878,1877,-2612,692,1704,836,-692,2366,2365,-3381,910,908,-912\n        ,443,1592,-442,3264,2114,-2114,2935,3079,3080,-2951,3040,3104,3084,-3042,2946,2947,2890,-2950,2946,2949,2935,-2951\n        ,2944,3050,3051,-3054,3054,3055,3051,-3051,3380,3481,-2367,3304,3482,3481,-3381,2687,3483,3482,3304,-2579,738,743\n        ,-687,2412,3405,2359,-2411,1866,3109,-1866,3484,2851,2656,-2656,3175,3485,3484,-2656,1170,379,3486,-1170,3487,3486\n        ,-380,379,1666,-3488,1642,1643,978,-975,889,890,-192,2553,2599,3109,-2549,1113,1724,1725,-958,890,929,928,192,-192\n        ,505,1697,-1028,345,347,344,-1173,1708,1709,344,-348,846,1715,1713,-849,232,243,-245,1389,1428,1387,-1253,2700,2699\n        ,2694,-2697,3488,2544,2542,-2544,3489,3488,2543,-2566,2532,3490,3489,-2566,3292,3291,3490,-2533,3494,744,705,-738\n        ,704,711,3494,-738,2387,3495,2416,-2645,2384,3495,-2388,2172,3496,70,-2176,2698,2696,2697,-3104,2692,2574,-3108,1415\n        ,1427,1414,-3498,415,1564,-591,1508,1570,1707,-1515,1529,1571,-389,2067,2066,2068,-2070,399,398,396,-398,408,596,-408\n        ,3498,1683,-1177,1178,3498,1176,-1176,1664,1564,415,-597,596,408,-596,596,595,1665,-1665,595,3499,1576,-1661,1575\n        ,3499,-596,2593,2594,-2306,630,446,632,-632,1027,1697,-1721,2706,2707,-3396,3384,3194,3500,-3386,845,1224,1223,-845\n        ,2820,3185,2267,-2267,1020,1022,-1022,2550,3501,3502,-3379,3378,3502,3504,-3506,3505,3504,72,-2178,3373,3505,-2178\n        ,2600,3379,-2562,3148,3542,3543,-3150,3549,3550,3141,-3153,3548,3549,3152,-3155,3270,3551,51,-40,3141,3550,3551,-3271\n        ,3149,3543,3544,-3151,3255,3540,3541,-3259,3258,3541,3542,-3149,3124,3538,3539,-3254,3253,3539,3540,-3256,1460,1467\n        ,3522,1461,-1460,3123,3537,3538,-3125,3146,3150,3544,-3546,3143,3546,3547,-3313,3312,3547,3548,-3155,3146,3545,3546\n        ,-3144,3507,3522,3523,-3509,3509,3508,3523,-3525,3510,3509,3524,-3526,3511,3510,3525,-3527,3512,3511,3526,-3528,3513\n        ,3512,3527,-3529,3514,3513,3528,-3530,3515,3514,3529,-3531,3516,3515,3530,-3532,3517,3516,3531,-3533,3518,3517,3532\n        ,-3534,3533,3534,3519,-3519,3534,3535,3520,-3520,3521,3520,3535,-3537,50,3521,3536,44,45,47,48,-50,112,3507,3537,3117\n        ,3125,-3120,3522,1467,1468,-3524,3524,3523,1468,-1582,3525,3524,1581,-1584,3526,3525,1583,-1587,3527,3526,1586,-1492\n        ,3528,3527,1491,-1493,3529,3528,1492,-1494,3530,3529,1493,-1490,3531,3530,1489,-1487,3532,3531,1486,-1641,3533,3532\n        ,1640,-1497,1496,1494,3534,-3534,1494,1484,3535,-3535,44,3536,1598,-47,1461,3522,3507,112,1463,-1470,3537,3507,3508\n        ,-3539,3539,3538,3508,-3510,3540,3539,3509,-3511,3541,3540,3510,-3512,3542,3541,3511,-3513,3543,3542,3512,-3514,3544\n        ,3543,3513,-3515,3545,3544,3514,-3516,3546,3545,3515,-3517,3547,3546,3516,-3518,3548,3547,3517,-3519,3518,3519,3549\n        ,-3549,3519,3520,3550,-3550,3551,3550,3520,-3522,51,3551,3521,50,42,41,40,-39,3117,3537,3123,3116,-3116,429,1804,431\n        ,-431,3127,3130,3270,-40,43,46,-7,1484,1598,3536,-3536,16,26,-44,2323,2321,3552,-3554,2327,2326,3554,-3556,2329,2323\n        ,3553,-3557,2792,2320,3556,-3558,2338,2337,3559,-3561,2332,2338,3560,-3559,2060,2792,3557,-3562,3197,2327,3555,-3563\n        ,2321,3197,3562,-3553,2337,3199,3563,-3560,3201,3200,3564,-3566,3199,3201,3565,-3564,3564,3200,3206,-3567,3211,3210\n        ,3567,-3569,3206,3211,3568,-3567,3215,3214,3569,-3571,3210,3215,3570,-3568,3214,3217,3571,-3570,3221,3220,3572,-3574\n        ,3217,3221,3573,-3572,3220,3223,3574,-3573,3223,3225,3575,-3575,3225,3226,3576,-3576,3576,3226,2060,-3562,2326,2333\n        ,3577,-3555,3577,2333,2332,-3559,3553,3552,3578,-3580,3555,3554,3580,-3582,3556,3553,3579,-3583,3557,3556,3582,-3584\n        ,3560,3559,-3585,3561,3557,3583,-3587,3562,3555,3581,-3579,3552,3562,-3579,3559,3563,3587,-3585,3565,3564,-3589,3563\n        ,3565,3588,-3588,3589,3588,3564,-3567,3568,3567,3590,-3592,3566,3568,3591,-3590,3570,3569,3592,-3594,3567,3570,3593\n        ,-3591,3569,3571,3594,-3593,3573,3572,3595,-3597,3571,3573,3596,-3595,3572,3574,3597,-3596,3574,3575,3598,-3598,3575\n        ,3576,3599,-3599,3586,3599,3576,-3562,3554,3577,3600,-3581,3585,3600,3577,-3559,3582,3579,3586,-3584,3584,3585,3558\n        ,-3561,3647,654,645,-3605,651,652,3603,-3603,645,1111,3605,-3605,3606,657,658,-3625,662,663,3608,-3608,663,657,3606\n        ,-3609,1111,392,3609,-3606,3609,392,1560,-3624,652,1533,3610,-3604,1533,646,3601,-3611,1535,662,3607,-3612,1536,1537\n        ,3613,-3613,1537,1535,3611,-3614,1544,1545,3615,-3615,1548,1549,3617,-3617,1549,1544,3614,-3618,1551,1548,3616,-3619\n        ,1554,1555,3620,-3620,1555,1551,3618,-3621,1557,1554,3619,-3622,1559,1557,3621,-3623,1560,1559,3622,-3624,658,651\n        ,3602,-3625,3628,3646,-3648,3602,3603,3627,-3627,3604,3605,-3629,3629,3606,3624,-3646,3607,3608,3631,-3631,3608,3606\n        ,3629,-3632,3605,3609,3632,-3629,3632,3609,3623,-3645,3610,3627,-3604,3611,3607,3630,-3634,3612,3613,-3635,3613,3611\n        ,3633,-3635,3614,3615,3635,-3637,3635,3615,3612,-3635,3616,3617,3638,-3638,3617,3614,3636,-3639,3618,3616,3637,-3640\n        ,3619,3620,3641,-3641,3620,3618,3639,-3642,3621,3619,3640,-3643,3622,3621,3642,-3644,3623,3622,3643,-3645,3624,3602\n        ,3626,-3646,3625,3627,-3611,3625,3610,-3602,3625,3601,3646,-3629,3601,646,648,-3647,3646,648,654,-3648,3628,3647,-3605\n        ,2320,2329,-3557,2621,2733,2470,-2623,1053,798,989,-991,1536,3612,3615,-1546,931,932,992,-821,2934,2935,-2937,2935\n        ,2934,-2940,3497,1277,-1416,1259,1256,-1258,3313,2515,-2515,2605,2680,-2493,2605,2492,-2671,3648,3649,3650,-3652,3652\n        ,3648,3651,-3654,3654,3652,3653,-3656,3656,3657,3658,-3660,3660,3661,3662,-3664,3664,3665,3666,-3668,3668,3669,3670\n        ,-3672,3672,3673,3674,-3676,3677,3649,3648,-3693,3692,3648,3652,-3679,3680,3678,3652,-3655,3693,3657,3656,-3695,3683\n        ,3661,3660,-3685,3695,3665,3664,-3697,3690,3688,3669,-3669,3697,3693,3694,-3699,3699,3700,3695,-3697,3691,3671,3670\n        ,-3690,3703,3667,3666,-3705,3685,3663,3662,-3683,3705,3659,3658,-3707,3681,3655,3653,-3680,3707,3679,3653,-3652,3676\n        ,3707,3651,-3651,3708,3703,3704,-3710,3710,3705,3706,-3712,3676,3650,3649,-3678,3657,3654,3655,-3659,3706,3658,3655\n        ,-3682,3693,3680,3654,-3658,3694,3656,3661,-3684,3705,3682,3662,-3660,3659,3662,3661,-3657,3665,3660,3663,-3667,3704\n        ,3666,3663,-3686,3695,3684,3660,-3666,3696,3664,3669,-3688,3703,3686,3670,-3668,3667,3670,3669,-3665,3673,3668,3671\n        ,-3675,3674,3671,3691,-3703,3673,3701,3690,-3669,3669,3688,-3688,3673,3672,-3702,3675,3674,-3703,3670,3686,-3690,3681\n        ,3711,-3707,3680,3693,-3698,3683,3698,-3695,3682,3705,-3711,3685,3709,-3705,3684,3695,-3701,3687,3699,-3697,3686,3703\n        ,-3709,3712,3715,3714,-3714,3713,3714,3717,-3717,3716,3717,3719,-3719,3718,3719,3721,-3721,3722,3725,3724,-3724,3723\n        ,3724,3727,-3727,3726,3727,3729,-3729,3725,3732,3731,-3731,3730,3733,3724,-3726,3733,3734,3727,-3725,3734,3735,3729\n        ,-3728,3736,3715,3712,-3738,3738,3732,3725,-3723,3739,3742,3741,-3741,3743,3744,3742,-3740,3743,3746,3745,-3745,3720\n        ,3721,3745,-3747,3747,3750,3749,-3749,3750,3752,3751,-3750,3752,3728,3729,-3752,3753,3756,3755,-3755,3749,3758,3757\n        ,-3749,3751,3759,3758,-3750,3729,3735,3759,-3752,3760,3763,3762,-3762,3762,3764,3740,-3742,3765,3747,3748,-3755,3748\n        ,3757,3753,-3755,3738,3722,3714,-3716,3723,3717,3714,-3723,3726,3719,3717,-3724,3728,3721,3719,-3727,3715,3736,3766\n        ,-3739,3736,3768,3767,-3767,3765,3741,3742,-3748,3747,3742,3744,-3751,3750,3744,3745,-3753,3752,3745,3721,-3729,3741\n        ,3765,3755,-3763,3762,3755,3756,-3762,3769,3772,3771,-3771,3770,3774,3773,-3770,3774,3776,3775,-3774,3776,3778,3777\n        ,-3776,3779,3782,3781,-3781,3782,3784,3783,-3782,3784,3786,3785,-3784,3781,3733,3730,-3781,3783,3734,3733,-3782,3785\n        ,3735,3734,-3784,3787,3788,3771,-3773,3789,3779,3780,-3791,3791,3794,3793,-3793,3792,3793,3796,-3796,3795,3796,3798\n        ,-3798,3797,3798,3777,-3779,3799,3802,3801,-3801,3800,3801,3804,-3804,3804,3785,3786,-3804,3805,3756,3753,-3807,3802\n        ,3757,3758,-3802,3801,3758,3759,-3805,3759,3735,3785,-3805,3761,3808,3807,-3761,3808,3794,3791,-3810,3810,3806,3802\n        ,-3800,3806,3753,3757,-3803,3772,3769,3779,-3790,3769,3773,3782,-3780,3773,3775,3784,-3783,3775,3777,3786,-3785,3772\n        ,3789,3811,-3788,3787,3811,3767,-3769,3799,3793,3794,-3811,3800,3796,3793,-3800,3803,3798,3796,-3801,3777,3798,3803\n        ,-3787,3805,3810,3794,-3809,3756,3805,3808,-3762,3787,3768,3813,-3813,3736,3814,3813,-3769,3815,3818,3817,-3817,3819\n        ,3817,3818,-3821,3821,3819,3820,-3823,3823,3821,3822,-3825,3816,3826,3825,-3816,3827,3830,3829,-3829,3831,3829,3830\n        ,-3833,3833,3831,3832,-3835,3824,3833,3834,-3824,3835,3836,3827,-3829,3817,3838,3837,-3817,3819,3839,3838,-3818,3821\n        ,3840,3839,-3820,3841,3840,3821,-3824,3842,3843,3816,-3838,3844,3845,3830,-3828,3832,3830,3845,-3847,3834,3832,3846\n        ,-3848,3834,3847,3841,-3824,3827,3849,3848,-3845,3815,3851,3850,-3819,3820,3818,3850,-3853,3822,3820,3852,-3854,3824\n        ,3822,3853,-3855,3855,3857,3856,-3827,3825,3858,3851,-3816,3829,3860,3859,-3829,3831,3861,3860,-3830,3833,3862,3861\n        ,-3832,3824,3854,3862,-3834,3828,3859,3863,-3836,3836,3835,3863,-3865,3836,3864,3866,-3866,3837,3838,3868,-3868,3839\n        ,3869,3868,-3839,3840,3870,3869,-3840,3841,3871,3870,-3841,3855,3843,3872,-3858,3842,3837,3867,-3874,3845,3844,3875\n        ,-3875,3846,3845,3874,-3877,3847,3846,3876,-3878,3847,3877,3871,-3842,3844,3848,3878,-3876,3848,3849,3879,-3879,3849\n        ,3865,3866,-3880,3826,3856,3858,-3826,3843,3842,3873,-3873,3851,3712,3713,-3851,3713,3716,3852,-3851,3852,3716,3718\n        ,-3854,3718,3720,3854,-3854,3857,3880,3814,-3857,3737,3712,3851,-3859,3860,3739,3740,-3860,3861,3743,3739,-3861,3862\n        ,3746,3743,-3862,3854,3720,3746,-3863,3859,3740,3764,-3864,3863,3764,3763,-3865,3763,3881,3866,-3865,3770,3771,3867\n        ,-3869,3774,3770,3868,-3870,3776,3774,3869,-3871,3871,3778,3776,-3871,3812,3880,3857,-3873,3867,3771,3788,-3874,3875\n        ,3791,3792,-3875,3792,3795,3876,-3875,3876,3795,3797,-3878,3877,3797,3778,-3872,3809,3791,3875,-3879,3807,3809,3878\n        ,-3880,3866,3881,3807,-3880,3814,3737,3858,-3857,3873,3788,3812,-3873,3730,3731,3790,-3781,3731,3732,3766,-3768,3811\n        ,3790,3731,-3768,3813,3814,-3881,3765,3754,-3756,3762,3763,-3765,3760,3881,-3764,3813,3880,-3813,3810,3805,-3807,3808\n        ,3809,-3808,3760,3807,-3882,3814,3736,-3738,3787,3812,-3789,3827,3836,-3866,3865,3849,-3828,3843,3855,-3817,3816,3855\n        ,-3827,3738,3766,-3733,3790,3811,-3790,3882,3883,3884,-3886,3883,3886,3887,-3885,3886,3888,3889,-3888,3888,3890,3891\n        ,-3890,3892,3893,3894,-3896,3893,3896,3897,-3895,3896,3898,3899,-3898,3895,3900,3901,-3903,3900,3895,3894,-3904,3903\n        ,3894,3897,-3905,3904,3897,3899,-3906,3906,3907,3882,-3886,3908,3892,3895,-3903,3909,3910,3911,-3913,3913,3909,3912\n        ,-3915,3913,3914,3915,-3917,3890,3916,3915,-3892,3917,3918,3919,-3921,3920,3919,3921,-3923,3922,3921,3899,-3899,3923\n        ,3924,3925,-3927,3919,3918,3927,-3929,3921,3919,3928,-3930,3899,3921,3929,-3906,3930,3931,3932,-3934,3932,3911,3910\n        ,-3935,3935,3924,3918,-3918,3918,3924,3923,-3928,3908,3885,3884,-3893,3893,3892,3884,-3888,3896,3893,3887,-3890,3898\n        ,3896,3889,-3892,3885,3908,3936,-3907,3906,3936,3937,-3939,3935,3917,3912,-3912,3917,3920,3914,-3913,3920,3922,3915\n        ,-3915,3922,3898,3891,-3916,3911,3932,3925,-3936,3932,3931,3926,-3926,3939,3940,3941,-3943,3940,3939,3943,-3945,3944\n        ,3943,3945,-3947,3946,3945,3947,-3949,3949,3950,3951,-3953,3952,3951,3953,-3955,3954,3953,3955,-3957,3951,3950,3900\n        ,-3904,3953,3951,3903,-3905,3955,3953,3904,-3906,3957,3942,3941,-3959,3959,3960,3950,-3950,3961,3962,3963,-3965,3962\n        ,3965,3966,-3964,3965,3967,3968,-3967,3967,3948,3947,-3969,3969,3970,3971,-3973,3970,3973,3974,-3972,3974,3973,3956\n        ,-3956,3975,3976,3923,-3927,3972,3971,3928,-3928,3971,3974,3929,-3929,3929,3974,3955,-3906,3931,3930,3977,-3979,3978\n        ,3979,3961,-3965,3980,3969,3972,-3977,3976,3972,3927,-3924,3942,3959,3949,-3940,3939,3949,3952,-3944,3943,3952,3954\n        ,-3946,3945,3954,3956,-3948,3942,3957,3981,-3960,3957,3938,3937,-3982,3969,3980,3964,-3964,3970,3969,3963,-3967,3973\n        ,3970,3966,-3969,3947,3956,3973,-3969,3975,3978,3964,-3981,3926,3931,3978,-3976,3957,3982,3983,-3939,3906,3938,3983\n        ,-3985,3985,3986,3987,-3989,3989,3990,3988,-3988,3991,3992,3990,-3990,3993,3994,3992,-3992,3986,3985,3995,-3997,3997\n        ,3998,3999,-4001,4001,4002,4000,-4000,4003,4004,4002,-4002,3994,3993,4004,-4004,4005,3998,3997,-4007,3987,3986,4007\n        ,-4009,3989,3987,4008,-4010,3991,3989,4009,-4011,4011,3993,3991,-4011,4012,4007,3986,-4014,4014,3997,4000,-4016,4002\n        ,4016,4015,-4001,4004,4017,4016,-4003,4004,3993,4011,-4018,3997,4014,4018,-4020,3985,3988,4020,-4022,3990,4022,4020\n        ,-3989,3992,4023,4022,-3991,3994,4024,4023,-3993,4025,3996,4026,-4028,3995,3985,4021,-4029,3999,3998,4029,-4031,4001\n        ,3999,4030,-4032,4003,4001,4031,-4033,3994,4003,4032,-4025,3998,4005,4033,-4030,4006,4034,4033,-4006,4006,4035,4036\n        ,-4035,4007,4037,4038,-4009,4009,4008,4038,-4040,4010,4009,4039,-4041,4011,4010,4040,-4042,4025,4027,4042,-4014,4012\n        ,4043,4037,-4008,4015,4044,4045,-4015,4016,4046,4044,-4016,4017,4047,4046,-4017,4017,4011,4041,-4048,4014,4045,4048\n        ,-4019,4018,4048,4049,-4020,4019,4049,4036,-4036,3996,3995,4028,-4027,4013,4042,4043,-4013,4021,4020,3883,-3883,3883\n        ,4020,4022,-3887,4022,4023,3888,-3887,3888,4023,4024,-3891,4027,4026,3984,-4051,3907,4028,4021,-3883,4030,4029,3910\n        ,-3910,4031,4030,3909,-3914,4032,4031,3913,-3917,4024,4032,3916,-3891,4029,4033,3934,-3911,4033,4034,3933,-3935,3933\n        ,4034,4036,-4052,3940,4038,4037,-3942,3944,4039,4038,-3941,3946,4040,4039,-3945,4041,4040,3946,-3949,3982,4042,4027\n        ,-4051,4037,4043,3958,-3942,4045,4044,3962,-3962,3962,4044,4046,-3966,4046,4047,3967,-3966,4047,4041,3948,-3968,3979\n        ,4048,4045,-3962,3977,4049,4048,-3980,4036,4049,3977,-4052,3984,4026,4028,-3908,4043,4042,3982,-3959,3900,3950,3960\n        ,-3902,3901,3937,3936,-3903,3981,3937,3901,-3961,3983,4050,-3985,3935,3925,-3925,3932,3934,-3934,3930,3933,-4052,3983\n        ,3982,-4051,3980,3976,-3976,3978,3977,-3980,3930,4051,-3978,3984,3907,-3907,3957,3958,-3983,3997,4035,-4007,4035,3997\n        ,-4020,4013,3986,-4026,3986,3996,-4026,3908,3902,-3937,3960,3959,-3982,4052,4053,4054,-4056,4053,4056,4057,-4055,4056\n        ,4058,4059,-4058,4058,4060,4061,-4060,4062,4056,4053,-4064,4064,4058,4056,-4063,4065,4060,4058,-4065,4066,4067,4068\n        ,-4070,4070,4071,4062,-4064,4071,4072,4064,-4063,4072,4073,4065,-4065,4074,4075,4071,-4071,4075,4076,4072,-4072,4076\n        ,4077,4073,-4073,4082,4083,4067,-4067,4055,4082,4066,-4053,4063,4053,4052,-4070,4068,4070,4063,-4070,4081,4080,4084\n        ,-4086,4086,4087,4088,-4090,4090,4091,4089,-4089,4092,4093,4091,-4091,4094,4095,4093,-4093,4096,4097,4089,-4092,4098\n        ,4096,4091,-4094,4099,4098,4093,-4096,4100,4101,4102,-4104,4096,4104,4105,-4098,4098,4106,4104,-4097,4099,4107,4106\n        ,-4099,4104,4075,4074,-4106,4106,4076,4075,-4105,4107,4077,4076,-4107,4108,4109,4080,-4080,4110,4111,4102,-4102,4102\n        ,4112,4087,-4087,4097,4103,4086,-4090,4097,4105,4100,-4104,4084,4080,4109,-4114,4114,4115,4083,-4117,4114,4116,4117\n        ,-4111,4085,4118,4119,-4082,4085,4084,4120,-4119,4113,4121,4120,-4085,4113,4109,4122,-4122,4108,4110,4101,-4110,4108\n        ,4079,4114,-4111,4078,4081,4067,-4116,4118,4070,4068,-4120,4074,4070,4118,-4121,4100,4105,4121,-4123,4121,4105,4074\n        ,-4121,4123,4124,4125,-4127,4127,4128,4126,-4126,4129,4130,4128,-4128,4061,4060,4130,-4130,4131,4132,4126,-4129,4133\n        ,4131,4128,-4131,4065,4133,4130,-4061,4134,4135,4136,-4138,4131,4138,4139,-4133,4133,4140,4138,-4132,4065,4073,4140\n        ,-4134,4138,4141,4142,-4140,4140,4143,4141,-4139,4073,4077,4143,-4141,4144,4145,4146,-4148,4136,4135,4148,-4150,4124\n        ,4123,4136,-4151,4132,4137,4123,-4127,4132,4139,4134,-4138,4151,4146,4145,-4153,4153,4154,4155,-4157,4154,4157,4158\n        ,-4156,4157,4159,4160,-4159,4159,4095,4094,-4161,4161,4157,4154,-4163,4163,4159,4157,-4162,4099,4095,4159,-4164,4164\n        ,4165,4166,-4168,4168,4169,4161,-4163,4169,4170,4163,-4162,4170,4107,4099,-4164,4142,4141,4169,-4169,4141,4143,4170\n        ,-4170,4143,4077,4107,-4171,4171,4147,4146,-4173,4173,4165,4164,-4175,4164,4153,4156,-4176,4162,4154,4153,-4168,4166\n        ,4168,4162,-4168,4172,4146,4151,-4177,4177,4148,4178,-4180,4180,4179,4178,-4174,4152,4145,4181,-4183,4183,4151,4152\n        ,-4183,4176,4151,4183,-4185,4185,4172,4176,-4185,4165,4173,4171,-4173,4178,4147,4171,-4174,4148,4144,4147,-4179,4144\n        ,4148,4135,-4146,4134,4139,4182,-4182,4142,4183,4182,-4140,4166,4185,4184,-4169,4142,4168,4184,-4184,4186,4187,4188\n        ,-4190,4187,4190,4191,-4189,4191,4190,4192,-4194,4193,4192,4194,-4196,4188,4191,4196,-4198,4191,4193,4198,-4197,4193\n        ,4195,4199,-4199,4189,4197,4200,-4202,4189,4201,4202,-4187,4203,4204,4205,-4207,4204,4203,4207,-4209,4209,4208,4207\n        ,-4211,4211,4209,4210,-4213,4203,4197,4196,-4208,4207,4196,4198,-4211,4210,4198,4199,-4213,4213,4197,4206,-4215,4215\n        ,4214,4206,-4206,4216,4217,4218,-4220,4217,4216,4220,-4222,4222,4221,4220,-4224,4194,4222,4223,-4196,4216,4224,4225\n        ,-4221,4220,4225,4226,-4224,4223,4226,4199,-4196,4227,4224,4219,-4229,4229,4228,4219,-4219,4230,4231,4232,-4234,4231\n        ,4234,4235,-4233,4235,4234,4236,-4238,4237,4236,4211,-4213,4232,4235,4225,-4225,4225,4235,4237,-4227,4237,4212,4199\n        ,-4227,4238,4239,4233,-4225,4240,4230,4233,-4240,4187,4186,4241,-4243,4190,4187,4242,-4244,4192,4190,4243,-4245,4194\n        ,4192,4244,-4246,4186,4202,4246,-4242,4202,4201,4247,-4247,4205,4204,4248,-4250,4208,4250,4248,-4205,4208,4209,4251\n        ,-4251,4209,4211,4252,-4252,4205,4249,4253,-4216,4215,4253,4254,-4215,4200,4255,4256,-4258,4200,4257,4247,-4202,4255\n        ,4213,4258,-4257,4213,4214,4254,-4259,4218,4217,4259,-4261,4221,4261,4259,-4218,4221,4222,4262,-4262,4222,4194,4245\n        ,-4263,4218,4260,4263,-4230,4229,4263,4264,-4229,4231,4230,4265,-4267,4234,4231,4266,-4268,4236,4234,4267,-4269,4211\n        ,4236,4268,-4253,4230,4240,4269,-4266,4240,4239,4270,-4270,4271,4227,4272,-4274,4227,4228,4264,-4273,4238,4271,4273\n        ,-4275,4238,4274,4270,-4240,4054,4242,4241,-4056,4057,4243,4242,-4055,4059,4244,4243,-4058,4061,4245,4244,-4060,4241\n        ,4246,4082,-4056,4246,4247,4275,-4083,4087,4249,4248,-4089,4088,4248,4250,-4091,4090,4250,4251,-4093,4092,4251,4252\n        ,-4095,4112,4253,4249,-4088,4111,4254,4253,-4113,4083,4257,4256,-4117,4275,4247,4257,-4084,4256,4258,4117,-4117,4258\n        ,4254,4111,-4118,4124,4260,4259,-4126,4125,4259,4261,-4128,4127,4261,4262,-4130,4129,4262,4245,-4062,4150,4263,4260\n        ,-4125,4149,4264,4263,-4151,4155,4266,4265,-4157,4158,4267,4266,-4156,4160,4268,4267,-4159,4094,4252,4268,-4161,4265\n        ,4269,4175,-4157,4269,4270,4174,-4176,4273,4272,4177,-4180,4272,4264,4149,-4178,4180,4274,4273,-4180,4174,4270,4274\n        ,-4181,4052,4066,-4070,4082,4275,-4084,4115,4067,-4084,4086,4103,-4103,4102,4111,-4113,4111,4110,-4118,4109,4101,-4123\n        ,4067,4081,-4120,4067,4119,-4069,4122,4101,-4101,4123,4137,-4137,4136,4149,-4151,4153,4164,-4168,4164,4175,-4175,4148\n        ,4177,-4150,4174,4180,-4174,4172,4185,-4166,4135,4181,-4146,4135,4134,-4182,4185,4166,-4166,4188,4197,-4190,4197,4203\n        ,-4207,4197,4255,-4201,4255,4197,-4214,4224,4216,-4220,4232,4224,-4234,4224,4227,-4272,4271,4238,-4225,4276,4277,4344\n        ,-4346,4279,4278,4280,-4282,4281,4280,4282,-4284,4283,4282,4284,-4286,4285,4284,4286,-4288,4287,4286,4288,-4290,4289\n        ,4288,4290,-4292,4347,4348,4292,-4294,4293,4292,4294,-4296,4295,4294,4296,-4298,4297,4296,4298,-4300,4299,4298,4277\n        ,-4277,4277,4300,4343,-4345,4278,4301,4302,-4281,4280,4302,4303,-4283,4282,4303,4304,-4285,4284,4304,4305,-4287,4286\n        ,4305,4306,-4289,4288,4306,4307,-4291,4348,4349,4308,-4293,4292,4308,4309,-4295,4294,4309,4310,-4297,4296,4310,4311\n        ,-4299,4298,4311,4300,-4278,4301,4313,4314,-4303,4302,4314,4315,-4304,4303,4315,4316,-4305,4304,4316,4317,-4306,4305\n        ,4317,4318,-4307,4306,4318,4319,-4308,4307,4319,-4321,4312,4324,4325,-4314,4313,4325,4326,-4315,4314,4326,4327,-4316\n        ,4315,4327,4328,-4317,4316,4328,4329,-4318,4317,4329,4330,-4319,4318,4330,4331,-4320,4319,4331,4332,-4321,4320,4332\n        ,4333,-4322,4321,4333,4334,-4323,4322,4334,4335,-4324,4323,4335,4324,-4313,4336,4279,-4282,4336,4281,-4284,4336,4283\n        ,-4286,4336,4285,-4288,4336,4287,-4290,4336,4289,-4292,4346,4347,4293,-4338,4346,4337,4276,-4346,4337,4293,4295,-4298\n        ,4276,4337,4297,-4300,4312,4313,-4302,4338,4312,4301,-4279,4339,4338,4278,-4280,4336,4340,4339,-4280,4336,4291,4341\n        ,-4341,4291,4290,4342,-4342,4290,4307,4320,-4343,4344,4343,4312,-4339,4345,4344,4338,-4340,4340,4346,4345,-4340,4340\n        ,4341,4347,-4347,4341,4342,4348,-4348,4342,4320,4349,-4349,4430,4415,4416,-4430,4351,4354,4355,-4353,4354,4356,4357\n        ,-4356,4356,4358,4359,-4358,4358,4360,4361,-4360,4360,4362,4363,-4362,4362,4364,4365,-4364,4413,4422,4423,-4413,4366\n        ,4368,4369,-4368,4368,4370,4371,-4370,4370,4372,4373,-4372,4372,4350,4353,-4374,4428,4429,4416,-4387,4352,4355,4376\n        ,-4375,4355,4357,4377,-4377,4357,4359,4378,-4378,4359,4361,4379,-4379,4361,4363,4380,-4380,4363,4365,4381,-4381,4394\n        ,4412,4423,-4425,4367,4369,4383,-4383,4369,4371,4384,-4384,4371,4373,4385,-4385,4373,4353,4375,-4386,4374,4376,4388\n        ,-4388,4376,4377,4389,-4389,4377,4378,4390,-4390,4378,4379,4391,-4391,4379,4380,4392,-4392,4380,4381,4393,-4393,4381\n        ,4394,-4394,4382,4383,-4421,4383,4384,4419,-4421,4384,4385,4418,-4420,4385,4375,-4419,4386,4387,4398,-4400,4387,4388\n        ,4400,-4399,4388,4389,4401,-4401,4389,4390,4402,-4402,4390,4391,4403,-4403,4391,4392,4404,-4404,4392,4393,4405,-4405\n        ,4393,4394,4406,-4406,4394,4395,4407,-4407,4395,4396,4408,-4408,4396,4397,4409,-4409,4397,4386,4399,-4410,4410,4354\n        ,-4352,4410,4356,-4355,4410,4358,-4357,4410,4360,-4359,4410,4362,-4361,4410,4364,-4363,4368,4366,4417,-4371,4372,4370\n        ,4417,-4351,4399,4398,-4412,4398,4400,-4412,4400,4401,-4412,4401,4402,-4412,4402,4403,-4412,4403,4404,-4412,4404,4405\n        ,-4412,4405,4406,-4412,4406,4407,-4412,4407,4408,-4412,4408,4409,-4412,4409,4399,-4412,4386,4374,-4388,4381,4365,4412\n        ,-4395,4364,4413,4412,-4366,4414,4413,4364,-4411,4415,4414,4410,-4352,4416,4415,4351,-4353,4386,4416,4352,-4375,4421\n        ,4422,4413,-4415,4430,4421,4414,-4416,4427,4428,4386,-4398,4426,4427,4397,-4397,4425,4426,4396,-4396,4424,4425,4395\n        ,-4395,4417,4366,4422,-4422,4423,4422,4366,-4368,4424,4423,4367,-4383,4382,4420,4425,-4425,4420,4419,4426,-4426,4419\n        ,4418,4427,-4427,4418,4375,4428,-4428,4375,4353,4429,-4429,4350,4430,4429,-4354,4350,4417,4421,-4431,4431,4432,4433\n        ,-4435,4432,4435,4436,-4434,4435,4437,4438,-4437,4437,4439,4440,-4439,4439,4441,4442,-4441,4442,4441,4443,-4445,4441\n        ,4445,4446,-4444,4441,4439,4447,-4446,4439,4437,4448,-4448,4437,4435,4449,-4449,4435,4432,4450,-4450,4432,4431,4451\n        ,-4451,4444,4443,4458,-4458,4443,4446,4459,-4459,4446,4445,4460,-4460,4445,4447,4461,-4461,4447,4448,4462,-4462,4448\n        ,4449,4463,-4463,4449,4450,4464,-4464,4457,4458,4465,-4457,4459,4460,4465,-4459,4460,4461,4466,-4466,4461,4462,4467\n        ,-4467,4462,4463,4468,-4468,4463,4464,4469,-4469,4465,4466,4455,-4457,4466,4467,4454,-4456,4467,4468,4453,-4455,4468\n        ,4469,4452,-4454,4470,4471,4472,-4474,4472,4474,4475,-4474,4474,4476,4477,-4476,4477,4476,4478,-4480,4479,4478,4480\n        ,-4482,4481,4480,4471,-4471,4482,4483,4484,-4486,4484,4483,4486,-4488,4487,4486,4488,-4490,4488,4490,4491,-4490,4490\n        ,4492,4493,-4492,4492,4482,4485,-4494,4494,4495,4496,-4498,4497,4496,4498,-4500,4498,4500,4501,-4500,4500,4502,4503\n        ,-4502,4502,4504,4505,-4504,4504,4495,4494,-4506,4506,4507,4508,-4510,4508,4510,4511,-4510,4510,4512,4513,-4512,4512\n        ,4514,4515,-4514,4515,4514,4516,-4518,4516,4507,4506,-4518,4518,4519,4520,-4522,4520,4519,4522,-4524,4523,4522,4524\n        ,-4526,4524,4526,4527,-4526,4526,4528,4529,-4528,4528,4518,4521,-4530,4530,4531,4532,-4534,4532,4531,4534,-4536,4535\n        ,4534,4536,-4538,4536,4538,4539,-4538,4538,4540,4541,-4540,4540,4530,4533,-4542,4542,4543,4544,-4546,4546,4543,4542\n        ,-4548,4548,4546,4547,-4550,4550,4548,4549,-4552,4552,4553,4550,-4552,4545,4544,4553,-4553,4554,4555,4556,-4558,4557\n        ,4558,4559,-4555,4521,4520,4560,-4562,4520,4523,4562,-4561,4523,4525,4563,-4563,4525,4527,4564,-4564,4564,4527,4529\n        ,-4566,4529,4521,4561,-4566,4560,4531,4530,-4562,4562,4534,4531,-4561,4563,4536,4534,-4563,4538,4536,4563,-4565,4540\n        ,4538,4564,-4566,4561,4530,4540,-4566,4470,4473,4566,-4568,4473,4475,4568,-4567,4568,4475,4477,-4570,4569,4477,4479\n        ,-4571,4570,4479,4481,-4572,4481,4470,4567,-4572,4572,4485,4484,-4574,4566,4483,4482,-4568,4484,4487,4574,-4574,4568\n        ,4486,4483,-4567,4487,4489,4575,-4575,4569,4488,4486,-4569,4489,4491,4576,-4576,4490,4488,4569,-4571,4576,4491,4493\n        ,-4578,4492,4490,4570,-4572,4493,4485,4572,-4578,4567,4482,4492,-4572,4578,4494,4497,-4580,4573,4496,4495,-4573,4497\n        ,4499,4580,-4580,4574,4498,4496,-4574,4499,4501,4581,-4581,4575,4500,4498,-4575,4501,4503,4582,-4582,4502,4500,4575\n        ,-4577,4582,4503,4505,-4584,4504,4502,4576,-4578,4505,4494,4578,-4584,4495,4504,4577,-4573,4506,4509,4584,-4586,4579\n        ,4508,4507,-4579,4509,4511,4586,-4585,4580,4510,4508,-4580,4511,4513,4587,-4587,4581,4512,4510,-4581,4587,4513,4515\n        ,-4589,4514,4512,4581,-4583,4588,4515,4517,-4590,4516,4514,4582,-4584,4517,4506,4585,-4590,4507,4516,4583,-4579,4584\n        ,4519,4518,-4586,4586,4522,4519,-4585,4587,4524,4522,-4587,4526,4524,4587,-4589,4528,4526,4588,-4590,4518,4528,4589\n        ,-4586,4590,4472,4471,-4592,4592,4474,4472,-4591,4476,4474,4592,-4594,4478,4476,4593,-4595,4480,4478,4594,-4596,4591\n        ,4471,4480,-4596,4596,4542,4545,-4598,4544,4543,4590,-4592,4598,4547,4542,-4597,4543,4546,4592,-4591,4599,4549,4547\n        ,-4599,4546,4548,4593,-4593,4551,4549,4599,-4601,4593,4548,4550,-4595,4552,4551,4600,-4602,4594,4550,4553,-4596,4597\n        ,4545,4552,-4602,4553,4544,4591,-4596,4597,4602,4556,-4597,4556,4555,4598,-4597,4555,4603,4599,-4599,4603,4559,4600\n        ,-4600,4600,4559,4558,-4602,4601,4558,4602,-4598,4604,4605,4606,-4608,4606,4605,4608,-4610,4609,4608,4610,-4612,4610\n        ,4612,4613,-4612,4612,4614,4615,-4614,4614,4604,4607,-4616,4616,4617,4618,-4620,4618,4620,4621,-4620,4620,4622,4623\n        ,-4622,4623,4622,4624,-4626,4625,4624,4626,-4628,4627,4626,4617,-4617,4628,4629,4630,-4632,4629,4632,4633,-4631,4633\n        ,4632,4634,-4636,4635,4634,4636,-4638,4637,4636,4638,-4640,4639,4638,4628,-4632,4640,4641,4642,-4644,4642,4641,4644\n        ,-4646,4645,4644,4646,-4648,4647,4646,4648,-4650,4648,4650,4651,-4650,4651,4650,4640,-4644,4652,4653,4654,-4656,4654\n        ,4656,4657,-4656,4656,4658,4659,-4658,4659,4658,4660,-4662,4661,4660,4662,-4664,4663,4662,4653,-4653,4664,4533,4532\n        ,-4666,4532,4535,4666,-4666,4535,4537,4667,-4667,4667,4537,4539,-4669,4668,4539,4541,-4670,4669,4541,4533,-4665,4670\n        ,4671,4672,-4674,4674,4675,4670,-4674,4676,4677,4675,-4675,4678,4679,4677,-4677,4680,4679,4678,-4682,4671,4680,4681\n        ,-4673,4682,4683,4684,-4686,4683,4682,4686,-4688,4653,4688,4689,-4655,4654,4689,4690,-4657,4656,4690,4691,-4659,4658\n        ,4691,4692,-4661,4692,4693,4662,-4661,4662,4693,4688,-4654,4689,4688,4664,-4666,4690,4689,4665,-4667,4691,4690,4666\n        ,-4668,4668,4692,4691,-4668,4669,4693,4692,-4669,4688,4693,4669,-4665,4604,4694,4695,-4606,4605,4695,4696,-4609,4696\n        ,4697,4610,-4609,4697,4698,4612,-4611,4698,4699,4614,-4613,4614,4699,4694,-4605,4700,4701,4618,-4618,4695,4694,4616\n        ,-4620,4618,4701,4702,-4621,4696,4695,4619,-4622,4620,4702,4703,-4623,4697,4696,4621,-4624,4622,4703,4704,-4625,4625\n        ,4698,4697,-4624,4704,4705,4626,-4625,4627,4699,4698,-4626,4626,4705,4700,-4618,4694,4699,4627,-4617,4706,4707,4629\n        ,-4629,4701,4700,4631,-4631,4629,4707,4708,-4633,4702,4701,4630,-4634,4632,4708,4709,-4635,4703,4702,4633,-4636,4634\n        ,4709,4710,-4637,4637,4704,4703,-4636,4710,4711,4638,-4637,4639,4705,4704,-4638,4638,4711,4706,-4629,4631,4700,4705\n        ,-4640,4640,4712,4713,-4642,4707,4706,4643,-4643,4641,4713,4714,-4645,4708,4707,4642,-4646,4644,4714,4715,-4647,4709\n        ,4708,4645,-4648,4715,4716,4648,-4647,4649,4710,4709,-4648,4716,4717,4650,-4649,4651,4711,4710,-4650,4650,4717,4712\n        ,-4641,4643,4706,4711,-4652,4713,4712,4652,-4656,4714,4713,4655,-4658,4715,4714,4657,-4660,4661,4716,4715,-4660,4663\n        ,4717,4716,-4662,4652,4712,4717,-4664,4718,4719,4607,-4607,4720,4718,4606,-4610,4611,4721,4720,-4610,4613,4722,4721\n        ,-4612,4615,4723,4722,-4614,4719,4723,4615,-4608,4724,4725,4671,-4671,4672,4719,4718,-4674,4726,4724,4670,-4676,4673\n        ,4718,4720,-4675,4727,4726,4675,-4678,4674,4720,4721,-4677,4679,4728,4727,-4678,4721,4722,4678,-4677,4680,4729,4728\n        ,-4680,4722,4723,4681,-4679,4725,4729,4680,-4672,4681,4723,4719,-4673,4725,4724,4684,-4731,4684,4724,4726,-4686,4685\n        ,4726,4727,-4732,4731,4727,4728,-4687,4728,4729,4687,-4687,4729,4725,4730,-4688,4602,4557,-4557,4555,4554,-4604,4603\n        ,4554,-4560,4558,4557,-4603,4730,4684,-4684,4685,4731,-4683,4731,4686,-4683,4687,4730,-4684,4732,4733,4734,-4736,4733\n        ,4736,4737,-4735,4736,4738,4739,-4738,4738,4740,4741,-4740,4740,4742,4743,-4742,4742,4744,4745,-4744,4744,4746,4747\n        ,-4746,4746,4748,4749,-4748,4748,4750,4751,-4750,4750,4752,4753,-4752,4752,4754,4755,-4754,4754,4732,4735,-4756,4735\n        ,4734,4756,-4758,4734,4737,4758,-4757,4737,4739,4759,-4759,4739,4741,4760,-4760,4741,4743,4761,-4761,4743,4745,4762\n        ,-4762,4745,4747,4763,-4763,4747,4749,4764,-4764,4749,4751,4765,-4765,4751,4753,4766,-4766,4753,4755,4767,-4767,4755\n        ,4735,4757,-4768,4757,4756,4768,-4770,4756,4758,4770,-4769,4758,4759,4771,-4771,4759,4760,4772,-4772,4760,4761,4773\n        ,-4773,4761,4762,4774,-4774,4762,4763,4775,-4775,4763,4764,4776,-4776,4764,4765,4777,-4777,4765,4766,4778,-4778,4766\n        ,4767,4779,-4779,4767,4757,4769,-4780,4780,4733,-4733,4780,4736,-4734,4780,4738,-4737,4780,4740,-4739,4780,4742,-4741\n        ,4780,4744,-4743,4780,4746,-4745,4780,4748,-4747,4780,4750,-4749,4780,4752,-4751,4780,4754,-4753,4780,4732,-4755,4769\n        ,4768,-4782,4768,4770,-4782,4770,4771,-4782,4771,4772,-4782,4772,4773,-4782,4773,4774,-4782,4774,4775,-4782,4775,4776\n        ,-4782,4776,4777,-4782,4777,4778,-4782,4778,4779,-4782,4779,4769,-4782,4782,4783,4784,-4786,4783,4786,4787,-4785,4786\n        ,4788,4789,-4788,4788,4790,4791,-4790,4790,4792,4793,-4792,4792,4794,4795,-4794,4794,4796,4797,-4796,4796,4798,4799\n        ,-4798,4798,4800,4801,-4800,4800,4802,4803,-4802,4802,4804,4805,-4804,4804,4782,4785,-4806,4785,4784,4806,-4808,4784\n        ,4787,4808,-4807,4787,4789,4809,-4809,4789,4791,4810,-4810,4791,4793,4811,-4811,4793,4795,4812,-4812,4795,4797,4813\n        ,-4813,4797,4799,4814,-4814,4799,4801,4815,-4815,4801,4803,4816,-4816,4803,4805,4817,-4817,4805,4785,4807,-4818,4807\n        ,4806,4818,-4820,4806,4808,4820,-4819,4808,4809,4821,-4821,4809,4810,4822,-4822,4810,4811,4823,-4823,4811,4812,4824\n        ,-4824,4812,4813,4825,-4825,4813,4814,4826,-4826,4814,4815,4827,-4827,4815,4816,4828,-4828,4816,4817,4829,-4829,4817\n        ,4807,4819,-4830,4830,4783,-4783,4830,4786,-4784,4830,4788,-4787,4830,4790,-4789,4830,4792,-4791,4830,4794,-4793,4830\n        ,4796,-4795,4830,4798,-4797,4830,4800,-4799,4830,4802,-4801,4830,4804,-4803,4830,4782,-4805,4819,4818,-4832,4818,4820\n        ,-4832,4820,4821,-4832,4821,4822,-4832,4822,4823,-4832,4823,4824,-4832,4824,4825,-4832,4825,4826,-4832,4826,4827,-4832\n        ,4827,4828,-4832,4828,4829,-4832,4829,4819,-4832,4832,4833,4834,-4836,4832,4836,4837,-4834,4838,4839,4836,-4841,4838\n        ,4841,4842,-4840,4838,4840,4843,-4842,4844,4845,4846,-4848,4844,4832,4848,-4846,4844,4840,4836,-4833,4844,4847,4843\n        ,-4841,4839,4842,4849,-4851,4839,4850,4837,-4837,4851,4852,4853,-4855,4851,4855,4856,-4853,4851,4841,4843,-4856,4851\n        ,4854,4842,-4842,4857,4858,4856,-4856,4857,4859,4860,-4859,4857,4847,4846,-4860,4857,4855,4843,-4848,4854,4853,4861\n        ,-4863,4854,4862,4849,-4843,4852,4863,4864,-4854,4852,4856,4865,-4864,4858,4866,4865,-4857,4858,4860,4867,-4867,4853\n        ,4864,4868,-4862,4869,4870,4871,-4873,4873,4874,4870,-4870,4873,4875,4876,-4875,4877,4878,4876,-4876,4877,4879,4880\n        ,-4879,4879,4881,4882,-4881,4848,4835,4883,-4885,4835,4834,4885,-4884,4845,4886,4887,-4847,4845,4848,4884,-4887,4859\n        ,4888,4889,-4861,4859,4846,4887,-4889,4860,4889,4890,-4868,4891,4892,4893,-4895,4895,4896,4897,-4899,4895,4899,4882\n        ,-4897,4895,4898,4890,-4900,4900,4901,4864,-4864,4900,4902,4903,-4905,4900,4863,4865,-4903,4905,4902,4865,-4867,4905\n        ,4894,4903,-4903,4905,4866,4867,-4907,4901,4907,4868,-4865,4901,4904,4908,-4908,4909,4896,4882,-4882,4909,4910,4897\n        ,-4897,4911,4912,4871,-4871,4911,4884,4883,-4913,4912,4913,4914,-4872,4912,4883,4885,-4914,4915,4916,4887,-4887,4915\n        ,4874,4876,-4917,4915,4911,4870,-4875,4915,4886,4884,-4912,4917,4918,4889,-4889,4917,4878,4880,-4919,4917,4916,4876\n        ,-4879,4917,4888,4887,-4917,4918,4899,4890,-4890,4918,4880,4882,-4900,4919,4898,4897,-4892,4919,4867,4890,-4899,4920\n        ,4921,4922,-4924,4920,4924,4925,-4922,4920,4926,4927,-4925,4924,4928,4929,-4926,4924,4927,4930,-4929,4921,4931,4932\n        ,-4923,4921,4925,4933,-4932,4925,4929,4934,-4934,4934,4929,4935,-4937,4928,4937,4935,-4930,4833,4837,4923,-4923,4862\n        ,4926,4923,-4850,4862,4861,4927,-4927,4861,4868,4930,-4928,4938,4939,4940,-4942,4942,4943,4944,-4946,4944,4941,4940\n        ,-4946,4946,4947,4939,-4939,4946,4948,4949,-4948,4950,4951,4949,-4949,4950,4952,4953,-4952,4952,4954,4955,-4954,4834\n        ,4922,4932,-4886,4892,4936,4935,-4894,4893,4935,4937,-4909,4907,4908,4937,-4931,4913,4932,4956,-4915,4957,4958,4943\n        ,-4943,4869,4872,4940,-4940,4959,4945,4940,-4873,4959,4960,4942,-4946,4873,4947,4949,-4876,4873,4869,4939,-4948,4877\n        ,4951,4953,-4880,4877,4875,4949,-4952,4879,4953,4955,-4882,4961,4962,4910,-4910,4961,4909,4881,-4956,4963,4957,4942\n        ,-4961,4959,4872,4871,-4915,4963,4960,4959,-4915,4963,4914,4956,-4958,4897,4910,-4892,4910,4892,-4892,4893,4904,-4904\n        ,4893,4903,-4895,4908,4904,-4894,4867,4919,-4907,4894,4906,-4892,4891,4906,-4920,4904,4901,-4901,4906,4894,-4906,4923\n        ,4926,-4921,4930,4937,-4929,4922,4834,-4834,4923,4837,-4851,4923,4850,-4850,4957,4956,-4959,4930,4868,-4908,4885,4932\n        ,-4914,4835,4848,-4833,4943,4958,4956,4932,4931,4948,4946,4938,4941,-4945,4954,4934,4936,-4893,4950,4948,4931,4933\n        ,4934,4954,-4953,4964,4965,4966,-4968,4968,4969,4966,-4966,4970,4971,4972,-4974,4974,4975,4976,-4978,4975,4978,4979\n        ,-4977,4978,4980,4981,-4980,4975,4982,4983,-4979,4984,4982,4975,-4975,4973,4985,4986,-4971,4965,4987,4988,-4969,4989\n        ,4987,4965,-4965,4967,4990,4991,-4965,4980,4992,4993,-4982,4983,4994,4992,-4981,4988,4987,4982,-4985,4992,4995,4996\n        ,-4994,4997,4995,4992,-4995,4998,4997,4994,-4983,4987,4999,4998,-4983,5000,4999,4989,-4992,4990,5001,5000,-4992,5002\n        ,5003,5004,-5006,5006,5007,5003,-5003,5008,5009,5004,-5004,5010,5008,5007,-4999,4999,5011,5010,-4999,5001,5012,5011\n        ,-5001,5013,5009,5008,-5011,5012,5013,5010,-5012,4968,4973,4972,-4970,4970,4974,4977,-4972,4974,4970,4986,-4985,4968\n        ,4988,4985,-4974,4995,5002,5005,-4997,4997,5006,5002,-4996,5007,5006,4997,-4999,4986,4985,4988,-4985,4978,4983,-4981\n        ,4964,4991,-4990,4983,4982,-4995,4987,4989,-5000,5003,5007,-5009,4999,5000,-5012,5017,5016,5014,-5016,5020,5019,5018\n        ,-5022,5024,5022,5023,-5026,5018,5027,5026,-5022,5027,5028,5029,-5027,5030,5017,5015,-5032,5032,5035,5033,-5035,5022\n        ,5035,5032,-5024,5033,5036,5037,-5035,5030,5031,5037,-5037,5014,5016,5019,-5021,5024,5025,5039,-5039,5026,5040,5041\n        ,-5022,5042,5043,5015,-5015,5044,5045,5023,-5033,5046,5047,5038,-5029,5048,5049,5016,-5018,5050,5051,5030,-5037,5052\n        ,5053,5034,-5038,5054,5055,5018,-5020,5030,5051,5056,5048,-5018,5057,5058,5022,-5025,5027,5018,5055,-5060,5020,5061\n        ,5060,5042,-5015,5062,5040,5026,-5030,5059,5046,5028,-5028,5033,5063,5050,-5037,5016,5049,5064,5054,-5020,5035,5065\n        ,5063,-5034,5058,5065,5035,-5023,5039,5025,5066,-5068,5024,5068,-5058,5023,5045,5069,-5026,5032,5034,5053,5070,-5045\n        ,5071,5052,5037,-5032,5072,5071,-5032,5073,5061,-5021,5029,5039,5067,-5063,5038,5039,5029,-5029,5038,5047,5068,-5025\n        ,5025,5069,-5067,5041,5073,5020,-5022,5074,5072,5031,-5016,5043,5074,-5016,5075,5076,5096,-5096,5076,5144,5145,-5097\n        ,5077,5078,5098,5097,5147,-5147,5078,5079,5099,-5099,5079,5080,5100,-5100,5080,5081,5101,-5101,5081,5082,5102,-5102\n        ,5082,5083,5103,-5103,5139,5136,5137,-5139,5087,5088,5108,-5108,5088,5089,5109,-5109,5089,5090,5110,-5110,5090,5091\n        ,5111,-5111,5091,5092,5112,-5112,5112,5092,5093,-5114,5150,5151,5152,-5154,5094,5075,5095,-5115,5095,5096,-5149,5147\n        ,5148,5096,-5146,5097,5098,5131,-5133,5098,5099,5130,-5132,5099,5100,5129,-5131,5100,5101,5128,-5130,5101,5102,5127\n        ,-5129,5102,5103,5126,-5128,5103,5104,5125,-5127,5104,5105,5124,-5126,5105,5106,5123,-5125,5122,5123,5106,5107,-5109\n        ,5108,5109,5121,-5123,5109,5110,5120,-5122,5110,5111,5119,-5121,5111,5112,5118,-5120,5112,5113,5117,-5119,5154,5155\n        ,5156,-5158,5114,5095,5115,-5117,5075,5094,5070,-5054,5159,5158,5160,-5162,5093,5092,5045,-5045,5092,5091,5069,-5046\n        ,5091,5090,5066,-5070,5090,5089,5067,-5067,5089,5088,5062,-5068,5088,5087,-5063,5087,5086,5040,-5063,5086,5085,5041\n        ,-5041,5085,5084,5073,-5042,5084,5083,5061,-5074,5083,5082,5042,-5062,5082,5081,5043,-5043,5081,5080,5074,-5044,5080\n        ,5079,5072,-5075,5079,5078,5071,-5073,5078,5077,5052,-5072,5077,5149,5053,-5053,5149,5075,-5054,5106,5105,5134,-5136\n        ,5105,5104,5136,-5135,5104,5103,5137,-5137,5103,5083,5138,-5138,5083,5084,5139,-5139,5084,5085,5140,-5140,5085,5086\n        ,5141,-5141,5086,5087,5142,-5142,5087,5107,5143,-5143,5107,5106,5135,-5144,5135,5141,5142,-5144,5140,5134,5136,-5140\n        ,5135,5134,5140,-5142,5149,5146,5144,-5077,5146,5147,5145,-5145,5148,5097,5132,-5134,5095,5148,5133,-5116,5076,5075\n        ,-5150,5077,5146,-5150,5097,5148,-5148,5158,5150,-5094,5094,5114,5152,-5152,5113,5093,5150,-5154,5153,5154,-5114,5114\n        ,5116,5156,-5156,5116,5117,5157,-5157,5117,5113,5154,-5158,5093,5044,5160,-5159,5044,5070,5161,-5161,5070,5094,5159\n        ,-5162,5094,5151,-5160,5159,5151,5150,-5159,5152,5155,5154,-5154,5114,5155,-5153,5162,5163,5178,-5178,5248,5249,5250\n        ,-5252,5164,5165,5180,-5180,5165,5166,5181,-5181,5166,5167,5182,-5182,5207,5168,5183,-5207,5168,5169,5184,-5184,5169\n        ,5212,5215,-5185,5170,5171,5186,-5186,5187,5172,5173,-5189,5230,5231,5232,-5234,5174,5175,5298,-5300,5243,5244,5245\n        ,-5247,5245,5177,-5248,5177,5178,5050,-5064,5252,5253,5254,-5256,5179,5180,5056,-5052,5180,5181,5048,-5057,5181,5182\n        ,5049,-5049,5054,5064,5206,-5184,5183,5184,5055,-5055,5055,5184,5215,5214,-5186,5185,5186,5059,-5056,5186,5187,-5060\n        ,5234,5235,5236,-5238,5189,5190,5057,-5069,5226,5228,5224,-5192,5176,5242,5192,-5163,5176,5227,5193,-5243,5175,5174\n        ,5195,5300,-5195,5239,5238,5240,-5242,5208,5172,-5198,5171,5170,5198,-5198,5170,5210,5211,-5199,5169,5168,5200,-5200\n        ,5200,5168,5207,-5210,5167,5166,5202,-5202,5166,5165,5203,-5203,5165,5164,5204,-5204,5257,5256,5258,-5260,5163,5162\n        ,5192,-5206,5058,5057,-5227,5167,5207,5206,-5183,5209,5207,5167,-5202,5187,5186,5171,-5173,5197,5172,-5172,5059,5187\n        ,-5047,5206,5064,5049,-5183,5047,5046,5187,-5189,5172,5208,5196,-5174,5210,5212,5213,-5212,5212,5169,5199,-5214,5214\n        ,5210,5170,-5186,5221,5220,5222,-5224,5215,5212,5216,-5218,5212,5210,5218,-5217,5210,5214,5219,-5219,5214,5215,5217\n        ,-5220,5217,5216,5220,-5222,5216,5218,5222,-5221,5218,5219,5223,-5223,5219,5217,5221,-5224,5260,5265,5266,5261,5224\n        ,-5229,5190,5228,5226,-5058,5175,5229,5262,-5299,5227,5229,5175,-5195,5238,5230,-5174,5174,5299,5297,5189,5232,-5232\n        ,5188,5173,5230,-5234,5233,5234,-5189,5189,5068,5236,-5236,5068,5047,5237,-5237,5047,5188,5234,-5238,5173,5196,5240\n        ,-5239,5196,5195,5241,-5241,5195,5174,5239,-5242,5174,5231,-5240,5232,5235,5234,-5234,5189,5235,-5233,5239,5231,5230\n        ,-5239,5227,5194,-5194,5225,5176,5244,-5244,5191,5224,5246,-5246,5224,5261,-5247,5191,5245,-5248,5065,5058,5226,5191\n        ,-5248,5227,5176,5225,-5230,5164,5249,-5258,5164,5179,5250,-5250,5178,5163,5248,-5252,5251,5252,-5179,5179,5051,5254\n        ,-5254,5051,5050,5255,-5255,5050,5178,5252,-5256,5163,5205,5258,-5257,5205,5204,5259,-5259,5204,5164,5257,-5260,5257\n        ,5249,5248,-5257,5256,5248,-5164,5179,5253,-5251,5250,5253,5252,-5252,5264,5265,-5261,5229,5225,5263,5269,5270,-5263\n        ,5266,5267,-5262,5269,5263,-5269,5262,5270,-5272,5288,5289,5290,5291,5292,5293,5294,-5296,5270,5269,5273,-5273,5269\n        ,5268,5274,-5274,5268,5267,5275,-5275,5267,5266,5276,-5276,5266,5265,5277,-5277,5265,5264,5278,-5278,5279,5278,5264\n        ,-5272,5271,5270,5272,-5280,5272,5273,5281,-5281,5273,5274,5282,-5282,5274,5275,5283,-5283,5275,5276,5284,-5284,5276\n        ,5277,5285,-5285,5277,5278,5286,-5286,5278,5279,5287,-5287,5279,5272,5280,-5288,5280,5281,5289,-5289,5281,5282,5290\n        ,-5290,5282,5283,5291,-5291,5283,5284,5292,-5292,5284,5285,5293,-5293,5285,5286,5294,-5294,5286,5287,5295,-5295,5287\n        ,5280,5288,-5296,5246,5261,5267,5268,5263,-5244,5243,5263,-5226,5296,5260,5228,-5191,5297,5296,5190,-5190,5298,5262\n        ,5271,5264,5260,-5297,5299,5298,5296,-5298,5063,5065,5247,-5178,5244,5176,-5163,5244,5162,5177,-5246,5320,5323,5322\n        ,-5322,5324,5327,5326,-5326,5301,5329,5328,-5303,5330,5333,5332,-5332,5335,5338,5337,-5337,5326,5327,5340,-5340,5327\n        ,5342,5341,-5341,5343,5346,5345,-5345,5347,5337,5338,-5349,5349,5352,5351,-5351,5339,5354,5353,-5327,5355,5354,5339\n        ,-5357,5346,5343,5332,-5358,5358,5362,5361,-5728,5359,5360,5364,-5364,5365,5368,5367,-5367,5360,5729,5728,-5365,5371\n        ,5374,5373,-5373,5360,5358,5727,-5730,5366,5370,5376,-5376,5349,5350,5378,-5378,5303,5380,5379,-5305,5381,5379,5321\n        ,-5323,5372,5383,5382,-5372,5730,5305,5306,-5385,5385,5386,5307,-5309,5731,5361,5388,-5388,5380,5303,5309,-5390,5310\n        ,5311,5391,-5391,5741,5345,5346,-5741,5392,5340,5341,-5748,5356,5339,5340,-5393,5388,5395,5394,-5375,5374,5394,5396\n        ,-5374,5728,5732,5397,-5365,5363,5364,5397,-5399,5398,5397,5400,-5400,5384,5376,5370,-5731,5389,5309,5312,-5402,5401\n        ,5312,5307,-5387,5321,5379,5380,-5403,5381,5403,5304,-5380,5363,5405,5404,-5360,5399,5406,5405,-5399,5409,5362,5411\n        ,-5411,5412,5413,5410,-5412,5415,5418,5406,-5418,5406,5418,5404,-5406,5408,5404,5418,-5417,5359,5404,5408,-5408,5419\n        ,5396,5394,-5421,5744,5424,5423,-5744,5311,5313,5425,-5392,5426,5429,5428,-5428,5391,5425,5431,-5431,5313,5314,5383\n        ,-5426,5425,5383,5372,-5432,5427,5430,5431,-5427,5419,5434,5433,-5433,5747,5341,5435,-5747,5390,5391,5430,-5437,5437\n        ,5433,5434,-5439,5431,5372,5373,-5427,5440,5342,5442,-5442,5440,5435,5341,-5343,5407,5411,5362,-5359,5412,5408,5416\n        ,-5444,5411,5407,5408,-5413,5444,5443,5416,-5415,5740,5346,5357,-5740,5388,5374,5371,-5388,5315,5302,5328,-5446,5353\n        ,5446,5325,-5327,5447,5450,5449,-5449,5342,5327,5324,-5443,5451,5402,5380,-5390,5361,5409,5395,-5389,5452,5414,5415\n        ,-5451,5417,5406,5399,-5369,5366,5375,5448,-5366,5449,5450,5415,-5418,5368,5399,5400,-5368,5439,5428,5429,-5433,5429\n        ,5426,5373,-5397,5432,5429,5396,-5420,5454,5447,5456,-5456,5322,5376,5384,-5382,5457,5375,5376,-5323,5458,5459,5348\n        ,-5339,5338,5335,5460,-5459,5337,5334,-5337,5449,5417,5368,-5366,5461,5750,5751,-5317,5451,5463,5462,-5403,5464,5467\n        ,5466,-5466,5461,5468,5749,-5751,5350,5351,5401,-5387,5386,5385,5378,-5351,5320,5462,5466,-5468,5462,5463,5459,-5467\n        ,5347,5348,5352,-5350,5348,5459,5463,-5353,5451,5351,5352,-5464,5442,5469,5390,-5437,5328,5329,5324,-5326,5446,5445\n        ,5328,-5326,5301,5317,5469,-5330,5329,5469,5442,-5325,5423,5460,5335,-5471,5428,5439,5435,-5441,5440,5441,5427,-5429\n        ,5436,5430,5427,-5442,5745,5746,5435,-5440,5471,5460,5424,-5473,5470,5335,5336,-5345,5344,5336,5334,-5344,5423,5470\n        ,5742,-5744,5473,5472,5424,-5745,5470,5344,5345,-5743,5474,5475,5409,-5411,5475,5420,5395,-5410,6502,6503,5739,-5358\n        ,5400,5397,5732,-5454,5367,5400,5453,-5370,5366,5367,5369,-5371,5318,5733,5382,-5320,5382,5733,5387,-5372,5414,5452\n        ,5477,-5445,5478,5480,5479,-5468,5479,5455,5456,-5324,6513,5315,5445,-5482,5481,5445,5446,-5483,5454,5455,5484,-5484\n        ,5455,5479,5480,-5485,5458,5460,5471,-5486,5486,5489,5488,-5488,5490,5492,5491,-5488,5493,5496,5495,-5495,5497,5500\n        ,5499,-5499,5420,5475,5502,-5502,5503,5506,5505,-5505,5502,5509,5508,-5508,5510,5504,5505,-5512,5498,5496,5512,-5498\n        ,5492,5490,5499,-5501,5465,5485,5487,-5489,5464,5465,5488,-5514,5514,5464,5513,-5516,5472,5499,5490,-5472,5516,5494\n        ,5517,-5502,5508,5509,5506,-5504,5475,5474,5509,-5503,5518,5510,5511,-5520,5520,5518,5519,-5522,5478,5514,5515,-5523\n        ,5480,5478,5522,-5524,5524,5520,5521,-5526,5526,5524,5525,-5524,5507,5516,5501,-5503,5443,5505,5506,-5414,5443,5444\n        ,5511,-5506,5509,5474,5413,-5507,5444,5477,5519,-5512,5477,5483,5521,-5520,5527,5526,5523,-5523,5483,5484,5525,-5522\n        ,5484,5480,5523,-5526,5419,5420,5501,-5518,5419,5517,5495,-5435,5434,5495,5496,-5439,5473,5438,5496,-5499,5485,5471\n        ,5490,-5488,5513,5488,5489,-5529,5528,5529,5515,-5514,5529,5527,5522,-5516,5333,6502,5357,-5333,5323,5456,5457,-5323\n        ,5456,5447,5448,-5458,5317,5310,5390,-5470,5314,5319,5382,-5384,5532,5533,5486,-5492,5533,5534,5489,-5487,5512,5493\n        ,5536,-5536,5500,5497,5538,-5538,5539,5507,5508,-5541,5541,5542,5540,-5509,5504,5510,5544,-5544,5542,5546,5545,-5541\n        ,5547,5535,5536,-5495,5548,5551,5550,-5550,5552,5554,5545,-5554,5555,5534,5533,-5557,5554,5552,5557,-5536,5556,5559\n        ,5558,-5556,5556,5532,5560,-5560,5549,5535,5557,-5549,5549,5537,5538,-5536,5500,5537,5561,-5493,5550,5561,5537,-5550\n        ,5551,5560,5532,-5551,5543,5544,5563,-5563,5543,5562,5541,-5504,5542,5541,5562,-5565,5565,5568,5567,-5567,5510,5518\n        ,5569,-5545,5566,5571,5570,-5566,5571,5566,5573,-5573,5574,5576,5534,-5576,5562,5563,5577,-5565,5578,5581,5580,-5580\n        ,5582,5585,5584,-5584,5586,5589,5588,-5588,5735,5684,5592,-5737,5593,5586,5587,-5595,5595,5598,5597,-5597,5599,5595\n        ,5596,-5601,5601,5604,5603,-5603,5603,5579,5606,-5606,5607,5606,5579,-5581,5598,5609,5608,-5598,5610,5613,5612,-5612\n        ,5614,5617,5616,-5616,5618,5619,5598,-5596,5618,5622,5621,-5621,5623,5624,5613,-5611,5122,5121,5625,-5625,5123,5122\n        ,5624,-5624,5626,5627,5126,-5126,5628,5629,5128,-5128,5132,5131,-5631,5630,5131,5632,-5632,5633,5636,5635,-5635,5637\n        ,5639,5631,-5639,5630,5631,5639,-5641,5132,5630,5640,-5134,5637,5638,5606,-5608,5641,5643,5594,-5643,5737,5736,5592\n        ,-5645,5590,5591,5587,-5589,5591,5642,5594,-5588,5634,5635,5581,-5579,5634,5646,5645,-5634,5647,5649,5605,-5649,5646\n        ,5604,5601,-5651,5651,5654,5653,-5653,5655,5656,5653,-5655,5617,5614,5657,-5590,5658,5659,5615,-5617,5660,5116,5661\n        ,-5659,5133,5640,5661,-5116,5662,5665,5664,-5664,5666,5669,5668,-5668,5667,5671,5670,-5667,5578,5579,5603,-5605,5647\n        ,5674,5673,-5673,5675,5668,5650,-5602,5671,5677,5676,-5671,5670,5679,5678,-5667,5680,5632,5131,-5131,5648,5638,5631\n        ,-5633,5646,5634,5578,-5605,5737,5644,5681,-5739,5559,5683,5682,-5559,5592,5684,5557,-5553,5685,5683,5559,-5561,5557\n        ,5684,5686,-5549,5553,5644,5592,-5553,5686,5687,5551,-5549,5558,5682,5665,-5663,5688,5689,5568,-5566,5565,5570,5690\n        ,-5689,5652,5693,5692,-5692,5564,5577,5695,-5695,5691,5696,5651,-5653,5694,5695,5691,-5693,5570,5574,5575,-5691,5575\n        ,5662,5663,-5691,5555,5558,5662,-5576,5564,5694,5546,-5543,5644,5553,5546,-5682,5663,5664,5698,-5698,5518,5520,5573\n        ,-5570,5520,5524,5572,-5574,5699,5697,5698,-5701,5700,5698,5678,-5702,5701,5678,5679,-5656,5600,5702,5656,-5600,5667\n        ,5668,5675,-5672,5703,5675,5601,-5603,5645,5650,5668,-5670,5702,5600,5643,-5642,5702,5641,5704,-5654,5705,5706,5656\n        ,-5656,5670,5676,5707,-5680,5708,5711,5710,-5710,5596,5597,5593,-5644,5597,5608,5586,-5594,5618,5713,5712,-5620,5714\n        ,5609,5619,-5713,5689,5695,5577,-5569,5568,5577,5563,-5568,5705,5621,5622,-5707,5583,5686,5684,-5736,5582,5590,5588\n        ,-5716,5715,5588,5589,-5658,5130,5129,5717,-5681,5687,5685,5560,-5552,5585,5635,5636,-5585,5585,5715,5581,-5636,5674\n        ,5680,5717,-5719,5629,5628,5720,-5720,5721,5722,5718,-5718,5116,5115,-5662,5705,5707,5723,-5622,5118,5714,5712,-5120\n        ,5708,5709,5610,-5612,5716,5623,5610,-5710,5620,5723,5612,-5614,5713,5620,5613,-5626,5119,5713,5625,-5121,5627,5628\n        ,5127,-5127,5722,5721,5629,-5720,5677,5671,5675,-5704,5724,5711,5676,-5678,5724,5677,5703,-5726,5649,5725,5703,-5603\n        ,5649,5602,5603,-5606,5696,5691,5695,-5690,5569,5573,5566,-5568,5544,5569,5567,-5564,5706,5622,5595,-5600,5640,5639\n        ,5659,-5662,5574,5571,5572,-5727,5524,5526,5726,-5573,5714,5118,5117,-5661,5714,5660,5616,-5610,5704,5738,5681,-5694\n        ,5652,5653,5704,-5694,5698,5664,5666,-5679,5669,5666,5664,-5666,5682,5645,5669,-5666,5633,5645,5682,-5684,5636,5633\n        ,5683,-5686,5584,5636,5685,-5688,5583,5584,5687,-5687,5688,5690,5663,-5698,5721,5717,5129,5128,-5630,5639,5637,5615\n        ,-5660,5637,5607,5614,-5616,5580,5657,5614,-5608,5581,5715,5657,-5581,5700,5651,5696,-5700,5701,5654,5651,-5701,5507\n        ,5539,5547,-5517,5576,5726,5526,-5528,5534,5576,5527,-5530,5330,6504,5530,-5334,5333,5530,-5532,5333,5531,-6503,5394\n        ,5395,-5421,5361,5731,-5728,5361,5362,-5410,5337,5347,5377,-5335,5359,5407,5358,-5361,5306,5403,5381,-5385,5405,5363\n        ,-5399,5436,5441,-5443,5343,5331,-5333,5416,5418,5415,-5415,5448,5375,-5458,5459,5458,-5486,5466,5459,-5466,5460,5423\n        ,-5425,5452,5450,5447,-5455,5448,5449,-5366,5385,5308,-5752,5459,5485,-5466,5464,5514,-5468,5320,5321,5402,-5463,5401\n        ,5351,5451,-5390,5433,5745,5439,-5433,5421,5437,5473,-5745,5345,5741,5393,-5743,5343,5334,-5332,5387,5733,-5732,5467\n        ,5479,5323,-5321,5514,5478,-5468,5476,5354,-5356,5353,5482,-5447,5443,5413,-5413,5413,5474,-5411,5454,5483,5477,-5453\n        ,5438,5473,-5438,5491,5486,-5488,5493,5512,-5497,5494,5495,-5518,5498,5499,-5473,5472,5473,-5499,5561,5532,-5492,5550\n        ,5532,-5562,5561,5491,-5493,5493,5494,-5537,5538,5512,-5536,5543,5503,-5505,5540,5545,-5540,5497,5512,-5539,5533,5532\n        ,-5557,5553,5545,-5547,5547,5539,5545,-5555,5494,5516,-5548,5508,5503,-5542,5681,5692,-5694,5646,5650,-5646,5617,5609\n        ,-5617,5619,5609,-5599,5648,5632,-5681,5120,5625,-5122,5643,5593,-5595,5585,5582,-5716,5707,5611,-5613,5660,5658,-5617\n        ,5711,5672,-5674,5673,5718,-5712,5707,5708,-5612,5720,5711,-5720,5605,5606,-5639,5716,5709,-5711,5546,5694,-5693,5555\n        ,5575,-5535,5692,5681,-5547,5576,5574,-5727,5707,5655,-5680,5702,5653,-5657,5643,5600,-5597,5722,5711,-5719,5125,5124\n        ,5716,-5627,5608,5589,-5587,5624,5625,-5614,5707,5705,-5656,5608,5609,-5618,5626,5716,-5711,5627,5626,-5711,5716,5124\n        ,5123,-5624,5674,5648,-5681,5673,5674,-5719,5627,5710,5720,-5629,5620,5621,-5724,5713,5618,-5621,5712,5713,-5120,5707\n        ,5711,-5709,5707,5612,-5724,5647,5725,-5650,5711,5724,-5673,5647,5648,-5675,5710,5711,-5721,5711,5722,-5720,5647,5672\n        ,-5726,5672,5724,-5726,5676,5711,-5708,5688,5699,-5690,5661,5659,-5659,5656,5706,-5600,5618,5595,-5623,5571,5574,-5571\n        ,5589,5608,-5618,5605,5638,-5649,5697,5699,-5689,5689,5699,-5697,5701,5655,-5655,5535,5547,-5555,5528,5489,-5535,5529\n        ,5528,-5535,5731,5734,5729,-5728,5583,5735,5590,-5583,5736,5591,5590,-5736,5642,5591,5736,-5738,5642,5737,5738,-5642\n        ,5704,5641,-5739,5355,5739,6503,-5477,5356,5740,5739,-5356,5392,5741,5740,-5357,5393,5741,5392,-5748,5743,5742,5393\n        ,-5423,5421,5744,5743,-5423,5437,5421,5745,-5434,5421,5422,5746,-5746,5393,5747,5746,-5423,5334,5748,-5332,5748,5334\n        ,5377,-5750,5750,5749,5377,-5379,5750,5378,5385,-5752,5753,5754,5755,-5757,5757,5758,5759,-5761,5301,5302,5761,-5763\n        ,6508,6500,5765,6510,-6512,6499,6500,6508,-5768,5768,5769,5770,-5772,5759,5772,5773,-5761,5760,5773,5774,-5776,5776\n        ,5777,5778,-5780,5780,5781,5771,-5771,5782,5783,5784,-5786,5772,5759,6507,-6507,5786,5787,5772,-6507,5779,5788,5764\n        ,-5777,5790,5791,5789,-5838,5789,6484,5792,-5794,5790,5794,5795,-5792,5796,5797,5798,-5800,5791,5795,6485,-6487,5802\n        ,5803,5804,-5806,5791,6486,6484,-5790,5797,5806,5807,-5802,5782,5808,5809,-5784,5303,5304,5810,-5812,5812,5755,5754\n        ,-5811,5803,5802,5813,-5815,5305,6487,5815,-5307,5816,5308,5307,-5818,6488,5818,5819,-5793,5811,5820,5309,-5304,5310\n        ,5821,5822,-5312,5823,5787,5779,-5779,5823,5824,5774,-5774,5787,5823,5773,-5773,5819,5805,5825,-5827,5805,5804,5827\n        ,-5826,6485,5795,5828,-6490,5794,5829,5828,-5796,5829,5830,5831,-5829,5815,6487,5801,-5808,5820,5832,5312,-5310,5832\n        ,5817,5307,-5313,5754,5833,5811,-5811,5812,5810,5304,-5404,5794,5790,5834,-5836,5830,5829,5835,-5837,5790,5837,5838\n        ,-5835,5839,5840,5841,-5794,5842,5841,5840,-5844,5846,5844,5845,-5849,5845,5847,5836,-5849,5836,5835,5834,-5849,5838\n        ,5846,5848,-5835,5849,5850,5825,-5828,5851,5852,5853,-5855,5311,5822,5855,-5314,5856,5857,5858,-5860,5822,5860,5861\n        ,-5856,5313,5855,5814,-5315,5855,5861,5803,-5815,5857,5856,5861,-5861,5849,5862,5863,-5865,5824,5852,5865,-5775,5821\n        ,5866,5860,-5823,5867,5868,5864,-5864,5861,5856,5804,-5804,5863,5862,5869,-5868,5870,5871,5872,-5776,5870,5775,5774\n        ,-5866,5837,5789,5793,-5842,5842,5873,5846,-5839,5841,5842,5838,-5838,5874,5844,5846,-5874,5787,5786,5788,-5780,5819\n        ,5818,5802,-5806,5315,5875,5761,-5303,6507,5759,5758,-5877,5877,5878,5879,-5881,5816,5751,-5309,5775,5872,5757,-5761\n        ,5881,5820,5811,-5834,5792,5819,5826,-5840,5882,5880,5845,-5845,5847,5799,5830,-5837,5797,5796,5878,-5807,5879,5847\n        ,5845,-5881,5799,5798,5831,-5831,5869,5862,5859,-5859,5859,5827,5804,-5857,5862,5849,5827,-5860,5884,5885,5886,-5878\n        ,5755,5812,5815,-5808,5887,5755,5807,-5807,5888,5771,5781,-5890,5771,5888,5890,-5769,5770,5769,5766,-5892,5879,5796\n        ,5799,-5848,5815,5812,5403,-5307,5881,5833,5893,-5895,5895,5896,5897,-5899,6497,5892,-6497,5783,5817,5832,-5785,5817\n        ,5783,5809,-5817,5753,5898,5897,-5894,5893,5897,5889,-5895,5780,5782,5785,-5782,5780,5891,5808,-5783,5781,5785,5894\n        ,-5890,5881,5894,5785,-5785,5872,5866,5821,-5900,5761,5758,5757,-5763,5876,5758,5761,-5876,5301,5762,5899,-5318,5762\n        ,5757,5872,-5900,5853,5900,5768,-5891,5858,5870,5865,-5870,5870,5858,5857,-5872,5866,5871,5857,-5861,5851,5869,5865\n        ,-5853,5901,5902,5854,-5891,5900,5777,5769,-5769,5777,5776,5766,-5770,5853,5852,5824,-5901,5903,5851,5854,-5903,5900\n        ,5824,5778,-5778,5904,5840,5839,-5906,5905,5839,5826,-5851,6509,5788,5786,-5753,5831,5883,6489,-5829,5798,5800,5883\n        ,-5832,5797,5801,5800,-5799,5318,5319,5813,-6491,5813,5802,5818,-6491,5844,5874,5906,-5883,5884,5882,5906,-5913,5907\n        ,5898,5908,-5910,5908,5756,5886,-5886,6498,6499,5767,-5911,6513,5911,5875,-5316,5911,6505,5876,-5876,5884,5912,5913\n        ,-5886,5885,5913,5909,-5909,5888,5914,5901,-5891,5915,5916,5917,-5919,5919,5916,5920,-5922,5922,5923,5924,-5926,5926\n        ,5927,5928,-5930,5850,5930,5931,-5906,5932,5933,5934,-5936,5931,5936,5937,-5939,5939,5940,5934,-5934,5927,5926,5941\n        ,-5926,5921,5929,5928,-5920,5896,5917,5916,-5915,5895,5942,5917,-5897,5943,5944,5942,-5896,5902,5901,5919,-5929,5945\n        ,5930,5946,-5924,5937,5932,5935,-5939,5905,5931,5938,-5905,5947,5948,5940,-5940,5949,5950,5948,-5948,5907,5951,5944\n        ,-5944,5909,5952,5951,-5908,5953,5954,5950,-5950,5955,5952,5954,-5954,5936,5931,5930,-5946,5873,5843,5935,-5935,5873\n        ,5934,5940,-5875,5938,5935,5843,-5905,5874,5940,5948,-5907,5906,5948,5950,-5913,5956,5951,5952,-5956,5912,5950,5954\n        ,-5914,5913,5954,5952,-5910,5849,5946,5930,-5851,5849,5864,5924,-5947,5864,5868,5925,-5925,5903,5927,5925,-5869,5914\n        ,5916,5919,-5902,5942,5957,5918,-5918,5957,5942,5944,-5959,5958,5944,5951,-5957,5765,5764,5788,-6510,5756,5755,5887\n        ,-5887,5886,5887,5878,-5878,5317,5899,5821,-5311,5314,5814,5813,-5320,5960,5920,5915,-5962,5961,5915,5918,-5963,5941\n        ,5963,5964,-5923,5929,5965,5966,-5927,5967,5968,5937,-5937,5969,5937,5968,-5971,5933,5971,5972,-5940,5970,5968,5973\n        ,-5975,5975,5923,5964,-5964,5976,5977,5978,-5980,5980,5981,5973,-5983,5983,5984,5961,-5963,5982,5963,5985,-5981,5984\n        ,5983,5986,-5988,5984,5987,5988,-5961,5977,5976,5985,-5964,5977,5963,5966,-5966,5929,5921,5989,-5966,5978,5977,5965\n        ,-5990,5979,5978,5960,-5989,5971,5990,5991,-5973,5971,5932,5969,-5991,5970,5992,5990,-5970,5993,5994,5995,-5997,5939\n        ,5972,5997,-5948,5994,5993,5998,-6000,5999,6000,6001,-5995,6002,6003,5962,-6005,5990,5992,6005,-5992,6006,6007,6008\n        ,-6010,6010,6011,6012,-6014,6014,6015,6016,-6018,6492,6493,6020,-6193,6021,6022,6015,-6015,6023,6024,6025,-6027,6027\n        ,6028,6024,-6024,6029,6030,6031,-6033,6031,6033,6034,-6008,6035,6008,6007,-6035,6026,6025,6036,-6038,6038,6039,6040\n        ,-6042,6042,6043,6044,-6046,6046,6023,6026,-6048,6046,6048,6049,-6051,6051,6038,6041,-6053,6053,6052,6054,-6056,6056\n        ,6051,6052,-6054,6057,6058,6059,-6061,6056,6061,6062,-6064,6064,6065,6066,-6068,6068,6069,6070,-6072,6072,6073,6074\n        ,-6076,6076,6077,6062,-6062,6078,6064,6067,-6080,6080,6068,6071,-6082,6082,6083,6084,-6086,6086,6087,6088,-6090,6090\n        ,6091,6073,-6073,6092,6093,6073,-6092,6094,6095,6096,-6098,6098,6099,6078,-6080,6080,6081,6100,-6102,6085,6102,6103\n        ,-6105,6105,6106,6088,-6088,6107,6108,6109,-6093,6110,6070,6069,-6112,6082,6112,6113,-6084,6112,6114,6115,-6114,6094\n        ,6116,6117,-6119,6103,6119,6120,-6105,6106,6105,6121,-6123,6108,6107,6123,-6125,6125,6099,6098,-6127,6127,6095,6094\n        ,-6119,6128,6129,6130,-6132,6132,6133,6114,-6135,6112,6135,6134,-6115,6082,6086,6135,-6113,6087,6086,6082,-6086,6104\n        ,6120,6136,-6138,6132,6035,6034,-6134,6138,6139,6022,-6141,6494,6141,6020,-6494,6018,6016,6015,-6020,6019,6015,6022\n        ,-6140,6055,6093,6076,-6054,6129,6006,6009,-6131,6129,6128,6142,-6144,6144,6145,6033,-6147,6143,6147,6029,-6033,6148\n        ,6149,6150,-6152,6152,6151,6150,-6154,6045,6017,6154,-6043,6155,6044,6043,-6157,6157,6155,6158,-6076,6086,6089,6158\n        ,-6136,6159,6160,6161,-6163,6163,6164,6165,-6167,6164,6163,6167,-6169,6006,6032,6031,-6008,6144,6169,6170,-6172,6172\n        ,6029,6147,-6166,6168,6167,6173,-6175,6167,6163,6175,-6177,6177,6178,6179,-6181,6181,6182,6179,-6179,6103,6102,6183\n        ,-6185,6101,6100,6185,-6187,6187,6188,6113,-6116,6145,6115,6114,-6134,6143,6032,6006,-6130,6494,6495,6189,-6142,5987\n        ,5986,6190,-6192,6020,5980,5985,-6193,6193,5988,5987,-6192,5985,5976,6194,-6193,5981,5980,6020,-6142,6194,5976,5979\n        ,-6196,5986,6159,6162,-6191,6196,5993,5996,-6198,5993,6196,6198,-5999,6149,6199,6200,-6202,5992,6202,6203,-6006,6199\n        ,6149,6148,-6205,6202,6200,6199,-6204,5998,6198,6003,-6003,6003,6198,6160,-6160,5983,6003,6159,-5987,5992,5970,5974\n        ,-6203,6141,6189,5974,-5982,6160,6205,6206,-6162,5947,5997,6001,-5950,5949,6001,6000,-5954,6207,6208,6206,-6206,6208\n        ,6209,6175,-6207,6209,6152,6176,-6176,6028,6027,6153,-6211,6164,6168,6172,-6166,6211,6030,6029,-6173,6142,6166,6165\n        ,-6148,6210,6138,6140,-6029,6210,6150,6212,-6139,6213,6152,6153,-6215,6167,6176,6215,-6174,6216,6217,6218,-6220,6024\n        ,6140,6021,-6026,6025,6021,6014,-6037,6046,6047,6220,-6222,6222,6220,6047,-6038,6197,5996,6005,-6204,5996,5995,5991\n        ,-6006,6213,6214,6050,-6050,6011,6492,6192,-6195,6010,6223,6016,-6019,6223,6154,6017,-6017,6077,6076,6092,-6110,6224\n        ,6107,6092,-6092,6058,6057,6225,-6066,6058,6065,6064,-6178,6064,6078,6178,-6178,6181,6178,6078,-6100,6059,6180,6226\n        ,-6228,6228,6226,6180,-6180,6179,6182,6229,-6229,6182,6230,6231,-6230,6067,6066,6063,-6063,6096,6079,6067,-6063,6096\n        ,6095,6098,-6080,6095,6127,6126,-6099,6188,6187,6232,-6234,6234,6068,6080,-6184,6184,6183,6080,-6102,6184,6101,6186\n        ,-6120,6120,6119,6235,-6237,6235,6237,6238,-6237,6239,6240,6241,-6243,6243,6238,6237,-6245,6245,6243,6246,-6248,6248\n        ,6246,6244,-6250,6238,6243,6245,-6251,6251,6246,6248,-6253,6253,6254,6251,-6256,6251,6252,6256,-6256,6257,6255,6258\n        ,-6260,6258,6255,6260,-6262,6258,6262,6263,-6265,6265,6266,6262,-6259,6264,6263,6267,-6269,6269,6268,6267,-6271,6271\n        ,6272,6268,-6274,6274,6254,6253,-6273,6275,6276,6274,-6273,6277,6278,6279,-6281,6278,6281,6282,-6280,6283,6279,6284\n        ,-6286,6286,6284,6279,-6288,6288,6289,6290,-6285,6288,6284,6291,-6293,6290,6289,6293,-6295,6293,6295,6296,-6295,6297\n        ,6298,6299,-6295,6280,6299,6300,-6278,6300,6299,6301,-6303,6303,6304,6305,-6307,6304,6307,6308,-6306,6309,6310,6311\n        ,-6306,6312,6311,6313,-6315,6313,6311,6315,-6317,6317,6318,6312,-6315,6317,6319,6320,-6319,6321,6322,6318,-6324,6324\n        ,6323,6318,-6326,6326,6327,6323,-6329,6327,6326,6329,-6331,6329,6331,6332,-6331,6333,6332,6334,-6336,6332,6331,6336\n        ,-6335,6337,6334,6338,-6340,6340,6341,6342,-6339,6340,6338,6343,-6345,6345,6346,6342,-6342,6347,6346,6345,-6349,6335\n        ,6349,6350,-6334,6350,6349,6351,-6353,6352,6353,6354,-6351,6354,6355,6356,-6358,6358,6359,6360,-6362,6359,6355,6362\n        ,-6361,6363,6364,6365,-6367,6367,6365,6364,-6359,6368,6366,6369,-6371,6369,6367,6371,-6371,6372,6373,6368,-6371,6370\n        ,6371,6374,-6373,6375,6376,6373,-6373,6374,6377,6375,-6373,6378,6379,6376,-6381,6378,6380,6377,-6382,6382,6383,6379\n        ,-6379,6378,6381,6384,-6383,6385,6386,6383,-6383,6385,6382,6384,-6388,6388,6389,6386,-6386,6387,6390,6388,-6386,6391\n        ,6389,6388,-6393,6390,6393,6392,-6389,6394,6395,6396,-6124,6397,6398,6399,-6401,6397,6118,6117,-6399,6379,6383,6366\n        ,-6369,6368,6373,6376,-6380,6386,6389,6363,-6367,6401,6236,6238,-6251,6247,6402,6403,-6246,6371,6367,6384,-6382,6381\n        ,6377,6374,-6372,6367,6358,6390,-6388,6393,6390,6358,-6362,6404,6397,6400,-6406,6397,6404,6127,-6119,6406,6231,6230\n        ,-6408,6406,6407,6408,-6410,6410,6411,6412,-6414,6414,6415,6276,-6417,6414,6416,6248,-6418,6353,6418,6419,-6421,6351\n        ,6421,6422,-6337,6423,6347,6343,-6425,6347,6348,6344,-6344,6425,6326,6426,-6428,6428,6411,6410,-6430,6328,6324,6309\n        ,-6309,6325,6310,6309,-6325,6325,6320,6315,-6311,6320,6319,6316,-6316,6430,6281,6412,-6412,6430,6411,6428,-6303,6287\n        ,6282,6301,-6299,6296,6291,6286,-6298,6292,6291,6296,-6296,6271,6260,6256,-6276,6261,6260,6271,-6274,6269,6265,6261\n        ,-6274,6419,6418,6331,-6432,6242,6237,6235,-6240,6244,6237,6242,-6250,6432,6433,6434,-6436,6435,6125,6126,-6433,6436\n        ,6437,6419,-6432,6181,6099,6125,-6439,6439,6438,6125,-6436,6435,6434,6437,-6440,6437,6434,6420,-6420,6195,5979,5988\n        ,-6194,6013,6012,6131,-6131,6013,6130,6009,-6224,6171,6440,6232,-6188,6111,6441,6442,-6111,6443,6232,6440,-6445,6445\n        ,6060,6059,-6228,6058,6177,6180,-6060,6107,6224,6446,-6124,6089,6088,6090,-6073,6075,6158,6089,-6073,6137,6136,6121\n        ,-6106,6085,6137,6105,-6088,6084,6234,6183,-6103,6213,6049,6447,-6216,6074,6448,6220,-6223,6216,6039,6038,-6218,6225\n        ,6217,6038,-6052,6063,6225,6051,-6057,6048,6041,6040,-6448,6221,6054,6041,-6049,6448,6449,6054,-6222,6450,6451,6438\n        ,-6440,6439,6437,6436,-6451,6450,6452,6429,-6454,6452,6436,6425,-6428,6453,6410,6413,-6455,6408,6413,6415,-6415,6407\n        ,6454,6413,-6409,6454,6407,6230,-6452,6414,6417,6409,-6409,6452,6427,6455,-6430,6426,6307,6455,-6428,6403,6456,6250\n        ,-6246,6457,6401,6250,-6457,6136,6120,6236,-6402,6353,6458,6362,-6355,6360,6362,6458,-6460,6400,6392,6393,-6406,6445\n        ,6110,6442,-6219,6227,6070,6110,-6446,6226,6071,6070,-6228,6081,6071,6226,-6229,6228,6460,6100,-6082,6460,6461,6185\n        ,-6101,6239,6185,6461,-6241,6229,6231,6461,-6461,6240,6461,6231,-6407,6240,6406,6409,-6242,6409,6417,6249,-6242,6444\n        ,6441,6111,-6444,6174,6211,6172,-6169,6462,6174,6173,-6220,6462,6463,6211,-6175,6146,6030,6211,-6464,6146,6033,6031\n        ,-6031,6204,6197,6203,-6200,5997,5995,5994,-6002,5972,5991,5995,-5998,6090,6088,6106,-6465,6464,6106,6122,-6466,6121\n        ,6466,6465,-6123,6090,6464,6224,-6092,6224,6464,6465,-6447,6214,6027,6023,-6051,6135,6158,6156,-6135,6093,6055,6449\n        ,-6074,6002,6467,6000,-6000,5953,6000,6467,-5956,6222,6157,6075,-6075,6222,6037,6044,-6158,6083,6113,6188,-6235,6212\n        ,6201,6189,-6496,6149,6201,6212,-6151,6206,6175,6163,-6162,6166,6162,6161,-6164,6190,6162,6166,-6143,6128,6191,6190\n        ,-6143,6131,6193,6191,-6129,6012,6195,6193,-6132,6011,6194,6195,-6013,6196,6205,6160,-6199,6268,6272,6257,-6260,6283\n        ,6285,6294,-6300,6311,6322,6321,-6306,6323,6327,6303,-6307,6424,6338,6334,-6423,6337,6339,6346,-6350,6346,6423,6421\n        ,-6350,6421,6423,6424,-6423,6287,6298,6297,-6287,6265,6269,6270,-6267,6392,6400,6399,-6392,6124,6117,6116,-6109,6396\n        ,6398,6117,-6125,6399,6398,6396,-6396,6391,6395,6394,-6469,6459,6433,6405,-6394,6432,6126,6127,-6405,6096,6062,6077\n        ,-6098,6111,6069,6469,-6444,6068,6234,6469,-6070,6469,6233,6232,-6444,6109,6108,6116,-6098,6134,6156,6043,-6133,6132\n        ,6043,6042,-6036,6008,6035,6042,-6155,6009,6008,6154,-6224,6208,6207,6204,-6149,6209,6208,6148,-6152,5936,5945,5975\n        ,-5968,6004,5956,5955,-6468,5962,5958,5956,-6005,5765,5959,-6511,5765,6509,-5960,5825,5850,-5827,5792,6484,-6489,5792\n        ,5839,-5794,5891,5780,-5771,5835,5829,-5795,5866,5872,-5872,5776,5764,-5764,5878,5887,-5807,5889,5914,-5889,5897,5896\n        ,-5890,5890,5854,-5854,5878,5796,-5880,5889,5896,-5915,5753,5893,5833,-5755,5898,5753,5756,-5909,5895,5898,-5944,5832\n        ,5820,5881,-5785,5869,5851,-5868,5867,5851,-5904,5778,5824,-5824,5776,5763,-5767,5818,6488,-6491,5943,5898,-5908,5752\n        ,5786,6506,-6513,6507,5876,-6506,5873,5842,-5844,5843,5840,-5905,5868,5867,-5904,5920,5916,-5916,5922,5925,-5942,5923\n        ,5946,-5925,5927,5902,-5929,5902,5927,-5904,5989,5920,-5961,5978,5989,-5961,5989,5921,-5921,5922,5964,-5924,5966,5963\n        ,-5942,5971,5933,-5933,5968,5967,-5974,5975,5982,5973,-5968,5926,5966,-5942,5961,5984,-5961,5981,5974,-5974,5923,5975\n        ,-5946,5937,5969,-5933,6189,6201,-6201,6143,6142,-6148,6045,6044,-6038,6047,6026,-6038,6145,6187,-6116,6449,6055,-6055\n        ,6184,6119,-6104,6137,6085,-6105,6140,6022,-6022,6013,6223,-6011,6215,6040,-6040,6076,6093,-6093,6157,6044,-6156,6219\n        ,6170,-6170,6170,6219,-6441,6215,6039,-6217,6442,6441,-6220,6083,6234,-6085,6033,6133,-6035,6225,6218,-6218,5974,6200\n        ,-6203,5983,5962,-6004,6200,5974,-6190,6004,6467,-6003,6215,6176,-6153,6210,6153,-6151,6140,6024,-6029,6444,6440,-6220\n        ,6225,6066,-6066,6036,6014,-6018,6052,6041,-6055,6215,6152,-6214,6036,6045,-6038,6057,6218,-6226,6060,6218,-6058,6225\n        ,6063,-6067,6171,6187,-6146,6234,6188,-6234,6239,6119,-6187,6239,6186,-6186,6246,6243,-6245,6251,6254,-6248,6247,6246\n        ,-6252,6257,6253,-6256,6255,6256,-6261,6261,6265,-6259,6262,6470,-6264,6266,6470,-6263,6470,6267,-6264,6270,6267,-6471\n        ,6266,6270,-6471,6264,6268,-6260,6268,6269,-6274,6272,6253,-6258,6271,6275,-6273,6276,6471,-6275,6277,6472,-6472,6471\n        ,6278,-6278,6473,6412,-6282,6281,6278,-6472,6472,6247,-6255,6254,6274,-6472,6473,6415,-6413,6283,6280,-6280,6279,6282\n        ,-6288,6284,6286,-6292,6290,6285,-6285,6288,6474,-6290,6292,6474,-6289,6474,6293,-6290,6295,6293,-6475,6474,6292,-6296\n        ,6294,6285,-6291,6296,6297,-6295,6280,6283,-6300,6298,6301,-6300,6303,6475,-6403,6402,6277,-6304,6476,6302,-6429,6302\n        ,6476,-6301,6304,6300,-6477,6307,6304,-6477,6455,6476,-6429,6303,6277,-6305,6304,6277,-6301,6321,6306,-6306,6305,6308\n        ,-6310,6311,6310,-6316,6312,6322,-6312,6313,6477,-6315,6316,6477,-6314,6477,6317,-6315,6319,6317,-6478,6477,6316,-6320\n        ,6318,6322,-6313,6320,6325,-6319,6306,6321,-6324,6328,6323,-6325,6327,6478,-6304,6478,6479,-6476,6475,6303,-6479,6478\n        ,6333,-6480,6333,6357,-6480,6478,6332,-6334,6337,6335,-6335,6422,6334,-6337,6338,6424,-6344,6342,6339,-6339,6340,6480\n        ,-6342,6344,6480,-6341,6480,6345,-6342,6348,6345,-6481,6480,6344,-6349,6346,6339,-6343,6347,6423,-6347,6349,6335,-6338\n        ,6421,6351,-6350,6357,6333,-6351,6350,6354,-6358,6356,6479,-6358,6362,6355,-6355,6363,6481,-6483,6482,6364,-6364,6358\n        ,6364,-6360,6359,6364,-6483,6482,6356,-6356,6355,6359,-6483,6365,6369,-6367,6367,6369,-6366,6375,6380,-6377,6377,6380\n        ,-6376,6394,6123,-6467,6396,6124,-6124,6383,6386,-6367,6468,6481,-6364,6363,6389,-6469,6483,6481,-6469,6468,6466,-6484\n        ,6466,6123,-6447,6121,6457,-6467,6457,6483,-6467,6401,6457,-6122,6483,6457,-6457,6456,6481,-6484,6481,6456,-6483,6472\n        ,6402,-6248,6479,6356,-6404,6403,6475,-6480,6403,6402,-6476,6402,6472,-6278,6356,6482,-6457,6456,6403,-6357,6367,6387\n        ,-6385,6241,6249,-6243,6417,6248,-6250,6418,6353,-6353,6353,6420,-6459,6458,6433,-6460,6252,6248,-6417,6331,6418,-6337\n        ,6351,6418,-6353,6331,6329,-6432,6329,6326,-6426,6433,6420,-6435,6426,6328,-6309,6328,6426,-6327,6420,6433,-6459,6256\n        ,6252,-6417,6282,6281,-6431,6430,6301,-6283,6301,6430,-6303,6472,6254,-6472,6308,6307,-6427,6351,6336,-6419,6181,6451\n        ,-6183,6454,6451,-6454,6453,6429,-6411,6136,6401,-6122,6170,6440,-6172,6445,6218,-6061,6085,6084,-6103,6048,6447,-6050\n        ,6221,6048,-6047,6220,6448,-6222,6215,6216,-6220,6215,6447,-6041,6453,6451,-6451,6429,6455,-6429,6182,6451,-6231,6181\n        ,6438,-6452,6450,6436,-6453,6425,6436,-6432,6329,6425,-6432,6307,6476,-6456,6415,6413,-6413,6473,6276,-6416,6275,6416\n        ,-6277,6256,6416,-6276,6471,6473,-6282,6276,6473,-6472,6330,6332,-6479,6327,6330,-6479,6235,6119,-6240,6468,6394,-6467\n        ,6361,6360,-6460,6393,6361,-6460,6144,6146,-6464,6219,6169,-6463,6144,6171,-6146,6218,6442,-6220,6460,6228,-6230,6219\n        ,6441,-6445,6074,6073,-6449,6448,6073,-6450,6144,6463,-6170,6169,6463,-6463,6173,6215,-6220,6196,6197,-6208,6466,6446\n        ,-6466,6158,6155,-6157,6153,6027,-6215,6046,6050,-6024,5999,5998,-6003,6017,6045,-6037,6033,6145,-6134,6205,6196,-6208\n        ,6259,6258,-6265,6391,6399,-6396,6389,6391,-6469,6404,6405,-6434,6433,6432,-6405,6094,6097,-6117,6077,6109,-6098,6234\n        ,6233,-6470,6197,6204,-6208,6209,6151,-6153,6056,6053,-6062,6061,6053,-6077,5963,5982,-5976,5957,5962,-5919,5958,5962\n        ,-5958,6488,6484,6486,-6492,6011,6010,6018,-6493,6493,6492,6018,-6020,6139,6494,6493,-6020,6139,6138,6495,-6495,6212\n        ,6495,-6139,5316,5751,6496,-5893,6497,6496,5809,-5809,5891,6498,6497,-5809,5891,5766,6499,-6499,5766,5763,6500,-6500\n        ,5765,6500,5763,-5765,5660,5117,-5117,6515,6590,6540,-6515,6539,6516,6514,-6541,6540,6541,-6540,6659,6684,6889,-6891\n        ,6544,6517,6516,-6540,6545,6544,6539,-6542,6546,6547,6916,-6918,6693,6548,6888,-6888,6661,6662,6659,-6661,6915,6548\n        ,6693,-6915,6521,6519,6549,-6561,6548,6547,6889,-6889,6916,6547,6548,-6916,6552,6694,6695,-6552,6553,6554,6552,-6552\n        ,6505,6556,6557,-6556,6695,6512,6506,-6552,6532,6664,6558,-6519,6537,6661,6660,-6534,6891,6892,6533,-6661,6559,6549\n        ,-6547,6559,6546,-6918,6505,6555,6554,-6554,6560,6561,6520,-6522,6559,6557,6560,-6550,6561,6560,6557,-6557,6556,6505\n        ,5911,-6562,6671,6905,6599,-6566,6682,6567,6568,-6682,6566,6668,6669,-6571,6601,6526,6535,-6667,6680,6538,6526,-6602\n        ,6572,6573,6910,-6912,6576,6574,-6910,6577,6529,6528,-6576,6648,6656,6652,-6654,6648,6653,6654,-6648,6635,6631,6641\n        ,-6690,6632,6563,6863,-6606,6568,6578,6680,-6682,6910,6573,6576,-6910,6668,6566,6569,-6668,6582,6692,6562,-6608,6583\n        ,6584,6585,-6587,6587,6580,6588,-6590,6632,6605,6900,-6902,6576,6573,6643,-6645,6647,6654,6655,-6647,6591,6655,6590\n        ,-6689,6592,6651,6652,6656,-6872,6574,6576,6644,6645,-6592,6855,6900,6605,-6631,6570,6904,6682,-6567,6902,6597,-6565\n        ,6610,6865,6600,6581,-6650,6588,6580,6690,-6692,6577,6574,6591,-6689,6686,6687,6886,-6886,6569,6601,6666,-6668,6622\n        ,6603,6593,-6595,6618,6619,6586,-6586,6572,6642,6643,-6574,6642,6572,6689,-6642,6589,6588,-6605,6606,6607,6608,-6610\n        ,6608,6587,6589,-6610,6864,6582,6607,-6607,6679,6611,6612,-6679,6613,6612,6611,-6615,6614,6615,6616,-6614,6658,6550\n        ,6617,-6658,6618,6523,6522,-6620,6619,6522,5316,-5893,6586,6619,5892,-5911,5767,6508,6583,-6587,6510,6611,6679,-6512\n        ,6614,6611,6510,-5960,6509,6615,6614,-5960,5752,6550,6658,6615,-6510,6563,6600,6865,-6864,6884,6885,6600,-6564,6564\n        ,6884,6563,-6633,6623,6621,6603,-6623,6628,6624,6618,-6586,6624,6524,6523,-6619,6625,6626,6613,-6617,6627,6628,6585\n        ,-6585,6612,6629,6677,-6679,6626,6629,6612,-6614,6594,6531,6524,-6625,6622,6594,6624,-6629,6627,6623,6622,-6629,6629\n        ,6596,6676,-6678,6626,6597,6596,-6630,6625,6620,6597,-6627,6621,6672,6673,-6604,6593,6603,6673,-6675,6593,6674,6536\n        ,-6531,6570,6669,6670,-6596,6620,6686,6885,-6885,6625,6912,6686,-6621,6507,6505,-6554,5911,6513,6520,-6562,6688,6534\n        ,6529,-6578,6562,6634,6587,-6609,6562,6608,-6608,6649,6582,6864,-6868,6609,6589,-6638,6676,6596,6598,-6676,6630,6605\n        ,6640,6868,-6637,6664,6665,6542,-6559,6593,6530,6531,-6595,6564,6632,6901,-6903,6634,6633,6580,-6588,6631,6866,6862\n        ,-6642,6862,6859,6642,-6642,6642,6859,6858,-6644,6643,6858,6861,-6645,6644,6861,6856,-6646,6646,6860,-6648,6648,6647\n        ,6860,-6858,6640,6605,6863,-6870,6637,6589,-6605,6604,6588,6650,-6639,6650,6588,6691,-6652,6652,6545,6541,-6654,6541\n        ,6540,6654,-6654,6590,6655,6654,-6541,6639,6651,-6593,6650,6651,6639,-6639,6610,6649,6867,-6871,6857,6854,6656,-6649\n        ,6871,6656,-6855,6615,6658,6657,-6617,6891,6660,6659,-6891,6518,6558,6661,-6538,6558,6542,6662,-6662,6663,6662,6542\n        ,-6544,6664,6532,6517,-6545,6665,6664,6544,-6546,6666,6535,6525,-6603,6666,6602,6579,-6668,6571,6668,6667,-6580,6668\n        ,6571,6565,-6670,6670,6669,6565,-6600,6571,6672,6671,-6566,6672,6571,6579,-6674,6673,6579,6602,-6675,6674,6602,6525\n        ,-6537,6888,6889,6684,-6686,6887,6888,6685,-6563,6885,6886,6581,-6601,6621,6675,6671,-6673,6677,6676,6623,-6628,6677\n        ,6627,6584,-6679,6583,6679,6678,-6585,6511,6679,6583,-6509,6623,6676,6675,-6622,6680,6601,6569,-6682,6566,6682,6681\n        ,-6570,6578,6527,6538,-6681,6684,6659,6662,-6664,6684,6663,6633,-6686,6562,6685,6633,-6635,6687,6686,6912,-6914,6515\n        ,6534,6688,-6591,6855,6683,6903,-6596,6543,6542,6665,-6691,6690,6665,6545,-6692,6652,6651,6691,-6546,6633,6663,-6544\n        ,6581,6692,6582,-6650,6581,6886,6887,-6693,6687,6693,6887,-6887,6693,6687,6913,-6915,6550,6695,6694,-6618,6550,5752\n        ,6512,-6696,5482,6709,6711,-6711,6713,6702,-6706,6844,6709,5482,-6846,6713,6711,6709,6922,-6703,6817,6841,6793,-6821\n        ,6894,6895,6841,-6818,6895,6896,6717,-6842,6713,6705,6714,-6712,6715,6710,6711,-6715,6710,6715,5481,-5483,6829,6828\n        ,6757,-6722,6736,6737,6718,-6793,6808,6807,6812,-6812,6729,6733,6804,-6804,6735,6724,6839,-6839,6757,6828,6736,-6793\n        ,6736,6828,6851,-6853,6766,6827,6753,-6874,6739,6740,6759,-6759,6841,6717,6794,-6794,6759,6740,6897,-6899,6760,6823\n        ,6535,-6527,6760,6725,6824,-6824,6853,6737,6736,-6853,6879,6767,-6742,6837,6836,6773,-6773,6774,6775,6772,-6774,6775\n        ,6774,6777,-6777,6816,6815,6778,-6708,6779,6780,6522,-6524,6780,6779,6744,-6746,6522,6780,5461,-5317,6780,6745,6501\n        ,5468,-5462,5530,6504,6837,-6773,6775,5531,5530,-6773,6502,5531,6775,-6777,6503,6502,6776,-6817,6778,6815,6918,-6920\n        ,6785,6779,6523,-6525,6752,6785,6524,-6532,6783,6789,6785,-6753,6790,6835,6834,-6755,6786,6787,6755,-6782,6777,6774\n        ,6787,-6787,6773,6836,6835,-6791,6744,6779,6785,-6790,6751,6832,6831,-6763,6735,6838,6538,-6528,6726,6753,6827,-6827\n        ,6724,6735,-6733,6721,6757,6756,-6834,6898,6899,6718,-6760,6759,6718,6737,-6759,5481,6715,6520,-6514,6709,6844,6921\n        ,-6923,6717,6795,-6795,6809,6797,6879,-6742,6769,6798,-6748,6786,6781,6842,-6919,6815,6777,6786,-6919,6731,6734,6730\n        ,-6733,6793,6794,6746,-6717,6795,6768,6746,-6795,6768,6795,6796,-6742,6739,6809,6741,-6797,6849,6801,6880,-6882,6801\n        ,6764,6882,-6881,6803,6804,6878,-6877,6806,6874,-6806,6808,6875,6877,-6808,6808,6811,6810,-6815,6771,6809,6739,-6759\n        ,6798,6765,-6748,6750,6747,-6766,6810,6811,6698,-6702,6698,6811,6812,-6698,6748,6697,6812,-6814,6800,6883,6814,-6811\n        ,6872,6875,6808,-6815,6883,6872,-6815,6776,6777,6815,-6817,6893,6894,6817,-6819,6819,6818,6817,-6821,6821,6712,6699\n        ,-6823,6701,6698,6696,-6701,6696,6697,6514,-6517,6521,6520,6715,-6715,6521,6714,6705,-6520,6537,6533,6818,-6820,6532\n        ,6518,6712,-6822,6700,6696,6516,-6518,6705,6702,6894,-6894,6519,6705,6893,-6893,6893,6818,6533,-6893,6712,6518,6537\n        ,-6820,6699,6712,6819,-6821,6535,6823,6761,-6526,6823,6824,6738,-6762,6720,6826,6827,-6852,6720,6851,6828,-6830,6831\n        ,6832,6761,-6739,6721,6833,-6783,6835,6788,6784,-6835,6835,6836,6743,-6789,6742,6743,6836,-6838,6504,5330,6742,-6838\n        ,6838,6760,6526,-6539,6838,6839,6725,-6761,6848,6908,-6847,6803,6876,6763,-6803,6729,6803,6802,-6729,6907,6723,6724\n        ,-6907,6839,6724,6723,-6841,6725,6839,6840,-6723,6824,6725,6722,-6826,6738,6824,6825,-6728,6831,6738,6727,-6831,6762\n        ,6831,6830,-6783,6789,6783,6784,-6789,6788,6743,6744,-6790,6745,6744,6743,-6743,5330,6501,6745,-6743,6700,6517,6532\n        ,-6822,6701,6700,6821,-6823,6920,6921,6844,-6707,6706,6844,6845,-6709,5353,5354,6708,-6846,6719,6899,6781,-6756,6833\n        ,6756,6754,-6835,6782,6833,6834,-6785,6784,6783,6762,-6783,6783,6752,6751,-6763,6751,6752,6531,-6531,6753,6726,6791\n        ,-6849,6846,6873,6753,-6849,6749,6847,6748,-6814,6804,6805,6874,-6879,6730,6749,6805,6804,-6734,6847,6749,6730,-6735\n        ,6751,6530,6536,-6833,6832,6536,6525,-6762,6735,6527,6528,-6732,6734,6731,6528,-6530,6847,6734,6529,-6535,6515,6748\n        ,6847,-6535,6515,6514,6697,-6749,6829,6721,6782,-6831,6720,6829,6830,-6728,6826,6720,6727,-6826,6726,6826,6825,-6723\n        ,6791,6726,6722,-6841,6791,6840,-6724,6801,6849,6728,-6803,6763,6764,6801,-6803,6848,6791,6723,6907,-6909,6750,6716\n        ,6746,-6748,6769,6747,6746,-6769,6822,6699,6793,-6717,6701,6822,6716,-6751,6701,6750,6799,6800,-6811,6820,6793,-6700\n        ,6739,6796,-6741,6896,6897,6740,-6718,6920,6706,6778,-6920,6707,6778,6706,-6709,5354,5476,6707,-6709,6756,6757,6792\n        ,-6720,6754,6756,6719,-6756,6790,6754,6755,-6788,6787,6774,6773,-6791,6758,6737,6853,-6772,6771,6850,6797,-6810,6770\n        ,6853,6852,-6767,6771,6853,6770,-6851,6852,6851,6827,-6767,6807,6806,6813,-6813,6546,6890,6889,-6548,6549,6891,6890\n        ,-6547,6519,6892,6891,-6550,6702,6704,6895,-6895,6704,6703,6896,-6896,6703,6843,6897,-6897,6842,6898,6897,-6844,6842\n        ,6781,6899,-6899,6750,6765,-6800,6646,6655,6591,-6646,6806,6805,6749,-6814,6597,6620,6884,-6565,6719,6792,6718,-6900\n        ,6670,6855,-6596,6900,6599,6905,-6902,6598,6596,6597,-6903,6900,6855,6670,-6600,6697,6696,-6699,6633,6543,6690,-6581\n        ,6887,6562,-6693,6768,6741,6767,-6770,6740,6796,6795,-6718,6595,6903,6904,-6571,6732,6730,-6734,6724,6732,-6907,6735\n        ,6731,-6733,6578,6575,6528,-6528,6689,6903,6683,-6636,6572,6911,6904,6903,-6690,6904,6567,-6683,6598,6905,6671,-6676\n        ,6901,6905,6598,-6903,6906,6732,6733,-6730,6728,6907,6906,-6730,6908,6907,6728,-6850,6846,6908,6849,-6882,6909,6574\n        ,6577,-6576,6568,6910,6909,-6579,6909,6575,-6579,6911,6910,6568,-6568,6904,6911,-6568,6657,6912,6625,-6617,6617,6913\n        ,6912,-6658,6694,6914,6913,-6618,6552,6915,6914,-6695,6554,6916,6915,-6553,6555,6917,6916,-6555,6559,6917,6555,-6558\n        ,6919,6918,6842,-6844,6703,6920,6919,-6844,6703,6704,6921,-6921,6922,6921,6704,-6703,6926,6939,6938,-6926,6938,6939\n        ,6941,-6941,6942,6945,6944,-6944,6946,6947,6940,-6942,6948,6950,6949,-6947,6951,6952,6947,-6950,6941,6953,6948,-6947\n        ,6954,6955,6951,-6950,6956,6958,6954,-6958,6954,6958,6959,-6956,6960,6962,6961,-6959,6961,6964,6963,-6959,6961,6967\n        ,6966,-6966,6968,6961,6965,-6970,6967,6971,6970,-6967,6972,6973,6970,-6972,6974,6976,6971,-6976,6977,6975,6956,-6958\n        ,6978,6975,6977,-6980,6980,6983,6982,-6982,6981,6982,6985,-6985,6986,6988,6987,-6983,6989,6990,6982,-6988,6991,6987\n        ,6993,-6993,6991,6995,6994,-6988,6993,6997,6996,-6993,6996,6997,6999,-6999,7000,6997,7002,-7002,6983,6980,7003,-7003\n        ,7003,7005,7004,-7003,7006,7009,7008,-7008,7007,7008,7011,-7011,7012,7008,7014,-7014,7015,7017,7016,-7015,7016,7019\n        ,7018,-7015,7020,7017,7015,-7022,7020,7021,7023,-7023,7024,7026,7021,-7026,7027,7028,7021,-7027,7029,7031,7026,-7031\n        ,7030,7033,7032,-7030,7032,7033,7035,-7035,7036,7038,7037,-7036,7035,7037,7039,-7035,7040,7042,7041,-7038,7043,7041\n        ,7045,-7045,7043,7047,7046,-7042,7048,7044,7045,-7050,7050,7051,7048,-7050,7038,7036,7053,-7053,7053,7055,7054,-7053\n        ,7055,7053,7057,-7057,7057,7060,7059,-7059,7061,7064,7063,-7063,7062,7063,7065,-7059,7066,7069,7068,-7068,7070,7061\n        ,7067,-7069,7071,7073,7072,-7070,7072,7073,7074,-7071,7075,7073,7071,-7077,7073,7075,7077,-7075,7078,7075,7076,-7080\n        ,7077,7075,7078,-7081,7081,7083,7079,-7083,7081,7084,7080,-7084,7085,7081,7082,-7087,7081,7085,7087,-7085,7088,7085\n        ,7086,-7090,7088,7090,7087,-7086,7091,7088,7089,-7093,7090,7088,7091,-7094,7094,7095,7091,-7093,7093,7091,7095,-7097\n        ,7097,6928,7099,-7099,7100,7103,7102,-7102,7100,7101,6923,-6925,7082,7071,7069,-7087,7071,7082,7079,-7077,7089,7069\n        ,7066,-7093,7104,6953,6941,-6940,6950,6948,7106,-7106,7074,7084,7087,-7071,7084,7074,7077,-7081,7070,7090,7093,-7062\n        ,7096,7064,7061,-7094,7107,7108,7103,-7101,7100,6924,6932,-7108,7109,7110,6936,-6938,7109,7112,7111,-7111,7113,7116\n        ,7115,-7115,7117,7119,6979,-7119,7117,7120,6951,-7120,7056,7123,7122,-7122,7054,7039,7125,-7125,7126,7127,7046,-7051\n        ,7050,7046,7047,-7052,7128,7130,7129,-7030,7131,7132,7113,-7115,7031,7011,7012,-7028,7028,7027,7012,-7014,7028,7013\n        ,7018,-7024,7023,7018,7019,-7023,7133,7114,7115,-6985,7133,7005,7131,-7115,6990,7001,7004,-6986,6999,7000,6989,-6995\n        ,6995,6998,6999,-6995,6974,6978,6959,-6964,6964,6976,6974,-6964,6972,6976,6964,-6969,7122,7134,7034,-7122,6945,6942\n        ,6938,-6941,6947,6952,6945,-6941,7135,7138,7137,-7137,7138,7135,6931,-6931,7139,7134,7122,-7141,7142,7138,6930,-7142\n        ,7138,7142,7140,-7138,7140,7122,7123,-7138,7144,7142,7141,-7146,7142,7144,7139,-7141,7144,7147,7132,-7147,7146,7130\n        ,7128,-7140,7147,7148,7116,-7114,7111,7117,7118,-7117,7110,7111,7116,-7149,7148,7145,6936,-7111,7117,7111,7112,-7121\n        ,7146,7132,7149,-7131,7129,7130,7149,-7011,7106,6948,6953,-7151,7151,7150,6953,-7105,6933,7104,6939,-6927,7056,7057\n        ,7065,-7153,7063,7153,7152,-7066,7103,7108,7096,-7096,6942,6943,7154,-6935,6943,7109,6937,-7155,6943,6944,7112,-7110\n        ,7112,6944,6952,-7121,6927,7155,-7157,6971,6962,6960,-6976,6986,7002,6997,-6989,7014,7008,7024,-7026,7026,7009,7006\n        ,-7031,7127,7125,7037,-7042,7040,7052,7049,-7043,7049,7052,7124,-7127,7124,7125,7127,-7127,6990,6989,7000,-7002,6968\n        ,6969,6973,-6973,7095,7094,7102,-7104,7099,6929,6923,-7102,7102,7098,7099,-7102,7094,7157,7097,-7099,7153,7096,7108\n        ,-7137,7135,7107,6932,-6932,6942,6934,-6936,6949,6947,-6947,6954,6950,-6958,6950,6954,-6950,6960,6958,-6957,6958,6963\n        ,-6960,6964,6961,-6969,6965,6966,-7159,6969,6965,-7159,7158,6966,-6971,6973,7158,-6971,6969,7158,-6974,6967,6962,-6972\n        ,6971,6976,-6973,6975,6960,-6957,6974,6975,-6979,6979,6977,-7160,6980,7159,-7161,7159,6980,-6982,7161,6984,-7116,6984\n        ,7159,-6982,7160,6957,-6951,6957,7159,-6978,7161,7115,-7119,6986,6982,-6984,6982,6990,-6986,6987,6994,-6990,6993,6987\n        ,-6989,6991,6992,-7163,6995,6991,-7163,7162,6992,-6997,6998,7162,-6997,7162,6998,-6996,6997,6993,-6989,6999,6997,-7001\n        ,6983,7002,-6987,7001,7002,-7005,7006,7105,-7164,7105,7006,-6981,7164,7131,-7006,7005,7003,-7165,7007,7164,-7004,7010\n        ,7164,-7008,7149,7131,-7165,7006,7007,-6981,7007,7003,-6981,7024,7008,-7010,7008,7012,-7012,7014,7018,-7014,7015,7014\n        ,-7026,7016,7017,-7166,7019,7016,-7166,7165,7017,-7021,7022,7165,-7021,7165,7022,-7020,7021,7015,-7026,7023,7021,-7029\n        ,7009,7026,-7025,7031,7027,-7027,7030,7006,-7167,7166,7163,-7168,7163,7166,-7007,7166,7167,-7037,7036,7167,-7061,7166\n        ,7036,-7036,7040,7037,-7039,7125,7039,-7038,7041,7046,-7128,7045,7041,-7043,7043,7044,-7169,7047,7043,-7169,7168,7044\n        ,-7049,7051,7168,-7049,7168,7051,-7048,7049,7045,-7043,7050,7049,-7127,7052,7040,-7039,7124,7052,-7055,7060,7053,-7037\n        ,7053,7060,-7058,7059,7060,-7168,7065,7057,-7059,7066,7170,-7170,7170,7066,-7068,7061,7062,-7068,7062,7170,-7068,7170\n        ,7058,-7060,7058,7170,-7063,7068,7069,-7073,7070,7068,-7073,7078,7079,-7084,7080,7078,-7084,7097,7156,-6929,7099,6928\n        ,-6930,7086,7069,-7090,7157,7066,-7170,7066,7157,-7093,7171,7157,-7170,7157,7171,-7157,7156,7143,-6929,6927,7156,-7152\n        ,7151,7156,-7172,7104,6927,-7152,7171,7150,-7152,7150,7171,-7170,7169,7170,-7151,7160,6950,-7106,7167,7106,-7060,7106\n        ,7167,-7164,7106,7163,-7106,7105,6980,-7161,7059,7150,-7171,7150,7059,-7107,7070,7087,-7091,6944,6945,-6953,7120,6952\n        ,-6952,7121,7055,-7057,7056,7152,-7124,7152,7153,-7137,6955,7119,-6952,7034,7039,-7122,7054,7055,-7122,7034,7134,-7033\n        ,7032,7128,-7030,7136,7137,-7124,7129,7011,-7032,7031,7029,-7130,7123,7152,-7137,6959,7119,-6956,6985,7133,-6985,7133\n        ,6985,-7005,7004,7005,-7134,7160,7159,-6958,7011,7129,-7011,7054,7121,-7040,7148,7147,-7146,7147,7113,-7133,6933,6927\n        ,-7105,7147,7144,-7146,7132,7131,-7150,7144,7146,-7140,7128,7134,-7140,7032,7134,-7129,7010,7149,-7165,7118,7115,-7117\n        ,7161,7118,-6980,6978,6979,-7120,6959,6978,-7120,7159,6984,-7162,6979,7159,-7162,7033,7166,-7036,7030,7166,-7034,7174\n        ,6938,6942,-6936,7157,7156,-7098,7064,7153,-7064,7096,7153,-7065,7156,7155,-7144,6962,6967,-6962,7094,7098,-7103,7092\n        ,7157,-7095,7107,7136,-7109,7136,7107,-7136,5213,7141,6930,5198,-5212,5197,6931,-5209,5196,5208,6931,-6933,6923,5195\n        ,5196,-6925,5194,5300,6929,-6929,6928,7143,5193,-5195,7143,7155,5242,-5194,7155,6927,5192,-5243,5258,5205,5192,6927\n        ,-6934,5202,5203,7174,-6936,6935,6934,5201,-5203,5209,5201,6934,-7155,5199,7172,6936,-7146,5213,5199,7145,-7142,7172\n        ,7173,6937,-6937,7173,5209,7154,-6938,5196,6932,-6925,6930,6931,5197,-5199,6923,6929,5300,-5196,5259,5258,6933,-6927\n        ,6925,5204,5259,-6927,6925,6938,-7175,6925,7174,5203,-5205,6553,6551,6506,-6508,5482,5353,-6846,5476,6503,6816,-6708\n        ,5347,5349,-5378,6501,5330,5331,-5749,6501,5748,5749,-5469,5751,5816,5809,-6497,6586,5910,-5768,5892,6497,6498,-5911\n        ,7177,7184,7183,7175,-7177,7177,7178,7185,-7185,7178,7179,7186,-7186,7180,7181,7179,-7183,7181,7187,7186,-7180,7572\n        ,7573,7183,-7185,7571,7572,7184,-7186,7570,7571,7185,-7187,7569,7570,7186,-7204,7193,7175,7183,-7195,7183,7573,7574\n        ,-7195,7188,7189,7196,-7198,7196,7189,7190,-7199,7190,7191,7199,-7199,7191,7192,7200,-7200,7568,7569,7203,-7203,7202\n        ,7203,7187,-7205,7205,7181,7180,-7207,7206,7180,7207,-7209,7209,7193,7194,-7211,7194,7574,7575,-7211,7211,7195,7212\n        ,-7214,7213,7212,7197,-7215,7197,7196,7215,-7215,7215,7196,7198,-7217,7198,7199,7217,-7217,7217,7199,7200,-7219,7200\n        ,7219,7220,-7219,7220,7219,7201,-7222,7567,7568,7202,-7223,7222,7202,7204,-7224,7224,7205,7206,-7226,7225,7206,7208\n        ,-7227,7209,7296,7294,-7250,7227,7211,7213,-7229,7213,7214,7229,-7229,7215,7229,-7215,7230,7216,7217,-7232,7231,7217\n        ,7218,-7233,7233,7220,7221,-7235,7221,7567,7564,-7235,7222,7223,7235,-7258,7236,7224,7225,-7238,7237,7225,7226,-7239\n        ,7175,7239,7240,-7177,7241,7242,7243,-7245,7242,7245,7246,-7244,7247,7207,7180,-7183,7193,7248,7239,-7176,7209,7249\n        ,7248,-7194,7239,7250,7251,-7241,7241,7252,7253,-7243,7242,7253,7254,-7246,7248,7255,7250,-7240,7249,7256,7255,-7249\n        ,7204,7181,-7206,7223,7204,7205,-7225,7258,7241,7244,-7260,7260,7259,7244,-7244,7260,7243,7246,-7262,7262,7261,7246\n        ,-7246,7245,7254,7263,-7263,7258,7264,7252,-7242,7258,7259,7176,-7241,7259,7260,7178,-7178,7260,7261,7179,-7179,7261\n        ,7262,7247,-7183,7264,7258,7240,-7252,7262,7263,7265,-7248,7266,7267,7268,-7270,7270,7271,7269,-7269,7267,7266,7272\n        ,-7274,7274,7275,7276,-7278,7278,7279,7277,-7281,7275,7281,7282,-7277,7283,7282,7284,-7286,7286,7287,7280,-7289,7289\n        ,7286,7288,-7273,7207,7266,7269,-7209,7250,7275,7274,-7252,7252,7279,7278,-7254,7253,7278,7287,-7255,7290,7291,7266\n        ,-7208,7265,7289,7291,-7291,7255,7281,7275,-7251,7256,7284,7281,-7256,7295,7285,7284,-7257,7264,7292,7279,-7253,7254\n        ,7287,7286,-7264,7251,7274,7292,-7265,7263,7286,7289,-7266,7256,7249,7294,-7296,7233,7232,7218,-7221,7224,7236,7235\n        ,-7224,7226,7271,-7239,7187,7203,-7187,7188,7212,-7196,7188,7197,-7213,7192,7219,-7201,7192,7201,-7220,7247,7290,-7208\n        ,7176,7259,-7178,7179,7261,-7183,7287,7278,-7281,7291,7289,-7273,7281,7284,-7283,7279,7292,-7278,7274,7277,-7293,7208\n        ,7269,-7227,7290,7247,-7266,7291,7272,-7267,7271,7226,-7270,7204,7187,-7182,7297,7296,7209,-7211,7293,7297,7210,-7576\n        ,7282,7283,7298,-7277,7276,7298,7299,-7278,7277,7299,7300,-7281,7288,7280,7300,7301,-7273,7272,7301,7302,-7274,7273\n        ,7302,7303,-7268,7267,7303,7270,-7269,7495,7329,7331,7330,-7504,7341,7520,7519,-7519,7517,7516,7347,-7346,7532,7347\n        ,-7517,7232,7494,7493,7354,-7232,7354,7493,7492,-7356,7505,7390,7391,-7345,7359,7358,7341,-7346,7360,7359,7345,-7348\n        ,7526,7527,7347,-7533,7498,7497,7233,-7235,7257,7499,7498,-7565,7376,7543,7542,-7484,7449,7371,7370,-7451,7524,7523\n        ,7515,-7515,7529,7456,7374,-7531,7456,7455,7375,-7375,7467,7462,7461,-7464,7481,7467,7463,-7481,7379,7451,7450,-7371\n        ,7513,7525,7524,-7515,7531,7530,7374,-7382,7382,7381,7374,-7376,7537,7536,7525,-7514,7355,7489,7488,-7230,7370,7372\n        ,7380,-7380,7371,7458,7372,-7371,7311,7324,7393,-7393,7312,7325,7395,-7395,7313,7396,7395,-7326,7313,7310,7397,-7397\n        ,7319,7399,7398,-7310,7327,7401,7400,-7322,7328,7402,7401,-7328,7308,7403,7402,-7329,7308,7304,7404,-7404,7326,7407\n        ,7405,-7306,7311,7392,7406,-7318,7318,7408,7407,-7327,7317,7406,7444,-7317,7315,7410,-7455,7315,7314,7412,-7411,6873\n        ,6846,7546,-7414,6797,7414,7415,-6880,6767,7432,7416,-6770,6769,7416,7417,-6799,6799,6765,7453,-7419,6799,7418,7419\n        ,-6801,7310,7309,7398,-7398,7321,7423,7422,-7321,7331,7329,7392,-7394,7395,7333,7330,-7395,7396,7335,7333,-7396,7397\n        ,7337,7335,-7397,7339,7340,7398,-7400,7343,7423,7400,-7535,7346,7342,7401,-7403,7348,7346,7402,-7404,7349,7348,7403\n        ,-7405,7407,7350,7351,-7406,7392,7329,7353,-7407,7357,7339,7399,-7425,7361,7350,7407,-7409,7406,7353,7445,-7445,7362\n        ,7425,7444,-7446,7544,7543,7376,-7412,7410,7375,7455,-7455,7412,7382,7375,-7411,7545,7383,7413,-7547,7384,7385,7415\n        ,-7415,7431,7386,7416,-7433,7386,7387,7417,-7417,7452,7388,7418,-7454,7388,7389,7419,-7419,7420,7426,7548,-7548,7426\n        ,7420,7421,-7449,7442,7441,7428,-7369,7398,7340,7337,-7398,7440,7439,7371,-7450,7427,7390,7439,-7441,7422,7391,7390\n        ,-7428,7423,7343,7391,-7423,7499,7257,7235,-7237,7409,7425,7362,-7364,7323,7425,7409,-7323,7448,7539,7381,-7427,7434\n        ,7433,7454,-7456,7471,7474,7581,-7583,7355,7492,7491,-7490,7344,7391,-7344,7400,7423,-7322,7381,7382,7548,-7427,7368\n        ,7428,7429,-7370,7430,7378,7369,-7430,7385,7431,7432,-7416,6879,7415,7432,-6768,7306,7307,7433,7408,-7319,7433,7434\n        ,7361,-7409,7361,7434,7435,-7527,7435,7528,7527,-7527,7360,7436,7437,-7360,7359,7437,7438,-7359,7504,7439,7390,-7506\n        ,7441,7442,7357,-7425,7444,7425,7323,-7317,7394,7330,7331,-7394,7324,7312,7394,-7394,7404,7304,7305,-7406,7351,7349\n        ,7404,-7406,7447,7508,7509,-7374,7581,7474,7475,-7581,7578,7477,7476,-7578,7479,7481,7480,-7479,7387,7452,7453,-7418\n        ,6765,6798,7417,-7454,7307,7315,7454,-7434,7434,7455,7456,-7436,7435,7456,7529,-7529,7438,7515,7523,-7523,7458,7371\n        ,7439,-7505,7428,7459,7460,-7430,7460,7577,7576,-7430,7578,7579,7449,-7478,7463,7461,7429,-7577,7429,7461,7462,-7431\n        ,7480,7576,7450,-7479,7431,7465,7464,-7387,7386,7464,7466,-7388,7468,7428,7441,-7470,7471,7427,7440,-7475,7399,7472\n        ,7470,-7425,7427,7471,7473,-7423,7422,7473,7583,-7585,7469,7441,7424,-7471,7474,7440,7449,-7476,7580,7475,7449,-7580\n        ,7476,7450,7576,-7578,7450,7476,7477,-7450,7451,7479,7478,-7451,7387,7466,7482,-7453,7473,7471,7582,-7584,7320,7422\n        ,7584,-7586,7377,7484,7562,-7564,7366,7485,7486,-7368,7367,7486,7487,-7444,7356,7443,7487,7488,-7490,7490,7338,-7492\n        ,7492,7336,7490,-7492,7493,7334,7336,-7493,7494,7332,7334,-7494,7495,7503,-7497,7497,7352,7495,-7497,7498,7446,7352\n        ,-7498,7498,7499,7365,-7447,7365,7499,7236,7237,-7365,7542,7500,7501,-7484,7483,7559,7383,-7546,7503,7332,7494,-7497\n        ,7338,7356,7489,-7492,7358,7438,7522,-7522,7358,7521,7520,-7342,7448,7421,7506,-7508,7447,7539,7538,-7509,7457,7373\n        ,7509,-7511,7457,7510,7437,-7437,7507,7506,7511,-7513,7508,7538,7537,-7514,7509,7508,7513,-7515,7515,7510,7509,-7515\n        ,7437,7510,7515,-7439,7536,7535,-7526,7527,7528,7436,-7361,7528,7529,7457,-7437,7457,7529,7530,-7374,7447,7373,7530\n        ,-7532,7539,7447,-7532,7527,7360,-7348,7526,7532,-7534,7533,7532,7516,7348,-7350,7369,7378,7377,7563,-7367,7368,7369\n        ,7366,-7368,7357,7442,7443,-7357,7339,7357,7356,-7339,7340,7339,7338,-7491,7337,7340,7490,-7337,7335,7337,7336,-7335\n        ,7333,7335,7334,-7333,7330,7333,7332,-7504,7483,7501,7502,-7560,7365,7364,7363,-7363,7446,7365,7362,-7446,7352,7446\n        ,7445,-7354,7495,7352,7353,-7330,7350,7361,7526,-7534,7349,7351,7350,-7534,7517,7346,7348,-7517,7342,7346,7517,-7519\n        ,7342,7534,7400,-7402,7534,7342,7518,-7520,7344,7343,7534,-7520,7344,7519,-7521,7505,7344,7520,-7522,7504,7505,7521\n        ,-7523,7458,7504,7522,-7524,7372,7458,7523,-7525,7535,7380,7372,7524,-7526,7419,7389,7512,-7512,6883,6800,7419,-7512\n        ,7539,7448,7507,-7539,7539,7531,-7382,7540,7561,7562,-7485,7384,7541,7484,-7378,7384,7377,7378,-7386,7431,7385,7378\n        ,-7431,7465,7431,7430,-7463,7464,7465,7462,-7468,7466,7464,7467,-7482,7482,7466,7481,-7480,7452,7482,7479,-7452,7388\n        ,7452,7451,-7380,7389,7388,7379,-7381,7389,7380,7535,7536,-7513,7512,7536,-7538,7538,7507,7512,-7538,7484,7541,-7541\n        ,6881,6880,6882,7544,-7412,7542,7364,7237,7238,-7501,7363,7364,7542,-7544,7409,7363,7543,-7545,6882,7322,7409,-7545\n        ,7459,7428,7579,-7579,7511,7506,6872,-6884,7376,7545,7546,-7412,6846,6881,7411,-7547,7442,7368,7367,-7444,7548,7382\n        ,7412,-7548,7314,7547,-7413,7414,7553,7554,-7385,6797,6850,7553,-7415,7541,7384,7554,-7556,7540,7541,7555,-7557,7561\n        ,7540,7556,7566,-7286,7550,7549,7557,-7559,7502,7551,7550,-7559,7560,7552,7501,-7501,7549,6770,6766,-7558,7554,7553\n        ,7549,-7551,7555,7554,7550,-7552,7556,7555,7551,-7553,6766,6873,7413,-7558,7413,7383,7558,-7558,7558,7383,-7560,7502\n        ,7501,7552,-7552,7556,7552,7560,-7567,7271,7565,7560,-7501,7485,7562,7561,7295,-7295,7563,7562,7485,-7367,7231,7354\n        ,-7231,7229,7230,7354,-7356,7487,7293,-7228,7564,7498,-7235,7488,7228,-7230,7488,7487,7227,-7229,7232,7233,7497,7496\n        ,-7495,7487,7486,7296,7297,-7294,7303,7565,7271,-7271,7303,7302,7301,-7566,7561,7285,-7296,7283,7285,7566,7299,-7299\n        ,7566,7560,7565,-7300,7485,7294,7296,-7487,7565,7301,7300,-7300,7257,7564,7567,-7223,7221,7201,7568,-7568,7201,7192\n        ,7569,-7569,7570,7569,7192,-7192,7571,7570,7191,-7191,7189,7572,7571,-7191,7188,7573,7572,-7190,7574,7573,7188,-7196\n        ,7575,7574,7195,-7212,7227,7293,7575,-7212,7271,7500,-7239,7230,7229,7215,-7217,7576,7480,-7464,7459,7578,7577,-7461\n        ,7468,7580,7579,-7429,7469,7581,7580,-7469,7470,7582,7581,-7470,7472,7583,7582,-7471,7399,7584,7583,-7473,7319,7585\n        ,7584,-7400,7517,7345,7341,-7519,7549,7553,-6851,7549,6850,-6771,7586,7589,7588,-7588,7587,7588,7591,-7591,7590,7591\n        ,7761,-7593,7594,7595,7587,-7591,7596,7594,7590,-7593,7597,7596,7592,-7594,7600,7639,7599,-7599,7601,7595,7594,-7603\n        ,7602,7594,7596,-7604,7603,7596,7597,-7605,7605,7601,7602,-7607,7606,7602,7603,-7608,7607,7603,7604,-7609,7599,7636\n        ,7610,-7599,7589,7586,7598,-7612,7595,7600,7586,-7588,7601,7639,7600,-7596,7612,7615,7614,-7614,7616,7614,7615,-7618\n        ,7618,7616,7617,-7620,7620,7618,7619,-7622,7622,7617,7615,-7624,7624,7619,7617,-7623,7625,7621,7619,-7625,7626,7629\n        ,7628,-7628,7622,7623,7631,-7631,7624,7622,7630,-7633,7625,7624,7632,-7634,7630,7631,7605,-7607,7632,7630,7606,-7608\n        ,7633,7632,7607,-7609,7634,7638,7627,-7629,7628,7612,7613,-7636,7623,7615,7612,-7630,7623,7629,7626,-7632,7626,7627\n        ,7609,-7726,7599,7609,7637,-7637,7637,7609,7627,-7639,7609,7599,7639,-7726,7640,7643,7642,-7642,7644,7642,7643,-7646\n        ,7646,7644,7645,-7648,7648,7645,7643,-7650,7650,7647,7645,-7649,7597,7593,7647,-7651,7651,7654,7653,-7653,7648,7649\n        ,7656,-7656,7650,7648,7655,-7658,7597,7650,7657,-7605,7655,7656,7659,-7659,7657,7655,7658,-7661,7604,7657,7660,-7609\n        ,7662,7684,7652,-7654,7641,7663,7653,-7641,7649,7643,7640,-7655,7649,7654,7651,-7657,7664,7667,7666,-7666,7668,7669\n        ,7671,-7671,7670,7671,7620,-7622,7672,7673,7665,-7669,7674,7672,7668,-7671,7625,7674,7670,-7622,7675,7678,7677,-7677\n        ,7679,7673,7672,-7681,7680,7672,7674,-7682,7681,7674,7625,-7634,7659,7679,7680,-7659,7658,7680,7681,-7661,7660,7681\n        ,7633,-7609,7676,7686,7682,-7676,7675,7683,7667,-7665,7673,7678,7664,-7666,7677,7678,7673,-7680,7685,7661,7652,-7685\n        ,7676,7661,7685,-7687,7588,7589,7687,-7689,7591,7588,7688,-7690,7687,7589,7611,-7691,7690,7611,7610,-7692,7613,7614\n        ,7692,-7694,7614,7616,7694,-7693,7616,7618,7695,-7695,7618,7620,7696,-7696,7635,7613,7693,-7698,7634,7635,7697,-7699\n        ,7636,7637,7699,-7701,7610,7636,7700,-7692,7699,7637,7638,-7702,7701,7638,7634,-7699,7641,7642,7830,-7703,7642,7644\n        ,7703,-7831,7644,7646,7704,-7704,7663,7641,7702,-7706,7662,7663,7705,-7707,7666,7667,7707,-7709,7669,7666,7708,-7710\n        ,7671,7669,7709,-7711,7620,7671,7710,-7697,7707,7667,7683,-7712,7711,7683,7682,-7713,7714,7685,7684,-7714,7713,7684\n        ,7662,-7707,7686,7685,7714,-7716,7682,7686,7715,-7713,7586,7600,-7599,7598,7610,-7612,7612,7628,-7630,7628,7635,-7635\n        ,7640,7653,-7655,7653,7663,-7663,7664,7678,-7676,7675,7682,-7684,7723,7722,7720,-7725,7716,7720,7719,-7719,7719,7721\n        ,7710,-7719,7710,7721,7722,-7697,7696,7722,7723,-7696,7723,7724,7717,-7696,7717,7724,7720,-7717,7720,7722,7721,-7720\n        ,7725,7605,7631,-7627,7639,7601,7605,-7726,7661,7726,7651,-7653,7726,7659,7656,-7652,7677,7679,7659,-7727,7661,7676\n        ,7677,-7727,7665,7666,7669,-7669,9871,9872,7795,-7795,7890,7879,7732,-7892,7793,7792,7748,-7735,7900,7729,7728,-7746\n        ,7736,7731,-7736,7796,7795,9872,-9874,7749,7750,7751,-7753,7736,7735,7750,-7750,7753,7734,7748,-7755,7751,7753,7754\n        ,-7753,7755,7749,7752,-7757,7757,7736,7749,-7756,7754,7748,7747,-7759,7752,7754,7758,-7757,7755,7756,7759,-7761,7790\n        ,7758,7747,-7792,7789,7756,7758,-7791,7764,7762,7746,-7745,7765,7763,7762,-7765,7849,7766,-7768,7759,7788,7787,-7770\n        ,7764,7744,7743,-7771,7765,7764,7770,-7769,7766,7760,7759,7769,-7772,7704,7767,7766,-7772,7786,7785,7741,-7773,7787\n        ,7786,7772,-7770,7739,7773,7774,-7739,7775,7776,7740,-7738,7773,7777,7778,-7775,7778,7777,7776,-7776,7775,7737,7738\n        ,-7775,7759,7756,7789,-7789,7771,7769,7777,-7774,7776,7772,7741,-7741,7777,7769,7772,-7777,7753,7750,7735,-7735,7730\n        ,7729,7900,-7900,7745,7728,7879,-7891,7742,7740,7741,-7786,7792,7791,7747,-7749,7891,7732,7985,-7985,9860,7784,7733\n        ,-9860,7742,7903,9859,-7734,9880,7731,7877,-9880,7753,7751,-7751,7774,7778,-7776,7977,7843,7839,-7979,7976,7844,7843\n        ,-7978,7844,7976,7975,-7846,7845,7975,7974,-7881,7880,7974,7973,-7847,7782,7783,7987,-7974,7743,7903,7742,-7786,7901\n        ,7770,7743,7785,-7787,7904,7901,7786,-7788,7788,7905,7904,-7788,7789,7906,7905,-7789,7906,7789,7790,-7908,7746,7762\n        ,7907,7790,-7792,9870,7746,7791,-7793,7793,9869,9870,-7793,7793,7873,9868,-9870,7878,9867,9868,-7874,7908,7820,7883\n        ,-7883,7948,7848,7855,-7855,9887,9888,7802,-7886,7310,7694,7695,7717,-7310,7848,7318,7326,-7856,7812,9883,9884,-7854\n        ,7818,7996,7997,-7888,7802,7804,7886,-7886,7698,7868,7867,-7806,7868,7698,7697,-7870,7325,7312,7693,-7693,7911,7943\n        ,7942,-7913,7915,7916,7911,-7913,7913,7919,7918,-7915,7915,7918,7919,-7917,7914,7935,7917,-7914,7315,7307,7306,7798\n        ,7941,-7315,7322,7937,7317,7316,-7324,7920,7922,7932,-7922,7809,7852,7851,-7811,9883,7948,7854,-9885,7936,7925,7924\n        ,-7924,7851,8000,7811,-7811,7866,7865,7803,-7815,7814,7998,7999,-7867,7867,7999,7998,-7806,7887,7886,7804,-7819,7712\n        ,7715,7714,7882,-7798,7862,7861,7797,-7818,7883,7820,7819,-7885,9885,9886,7801,-7865,7815,7700,-7889,7815,7996,7995\n        ,-7829,7925,7936,7947,-7947,7946,7947,9882,-9882,9881,9882,7929,-7927,7926,7929,7928,-7928,7931,7930,7927,-7929,7930\n        ,7931,7932,-7923,7585,7716,7718,-7321,6872,7506,7909,-6876,7896,7895,9898,-7825,9899,9900,7980,-7828,7897,7992,7991\n        ,-7875,7828,7995,7994,-7878,7824,7991,7992,-7897,7895,7894,7829,-9899,7889,7705,7847,-7861,7689,7688,7731,-7737,7738\n        ,7703,-7740,9890,7834,7833,-9890,7835,7838,7837,-7837,7836,7994,7995,-7836,7838,7833,7834,-7838,9863,7823,9892,-9894\n        ,7821,7822,9864,-9866,9865,9866,7993,-7822,7823,9863,9864,-7823,7829,7894,9894,-9896,7990,7989,7979,-7876,7980,7989\n        ,7990,-7828,7981,7841,9896,-9898,7995,7996,7818,-7836,7835,7818,7804,-7839,7838,7804,7802,-7834,7833,7802,9888,-9890\n        ,7827,7990,7991,-7825,7824,9898,9899,-7828,9896,7841,7829,-9896,7871,7872,7858,-7858,7690,7691,7815,-7829,7933,7917\n        ,7935,-7935,7310,7313,-7695,7717,7319,-7310,7718,7710,7327,-7322,7718,7321,-7321,7853,7852,7809,-7813,7865,7864,7801\n        ,-7804,9899,7841,7981,-9901,7839,7843,7730,-7728,7844,7729,7730,-7844,7729,7844,7845,-7729,7728,7845,7880,-7880,7879\n        ,7880,7846,-7733,7846,7986,7985,-7733,7796,7860,7847,-7796,7795,7847,7830,-7795,7703,7704,-7740,7862,7817,7816,-7864\n        ,7761,7760,-7850,7760,7766,-7850,7311,7813,7850,-7325,7694,7313,7325,-7693,7687,7828,7877,7731,-7689,7592,7761,7849\n        ,-7594,7593,7849,7767,7646,-7648,7773,7739,7704,-7772,7689,7736,7757,7761,-7592,7697,7693,-7870,7850,7867,7868,-7325\n        ,7866,7999,8000,-7852,7865,7866,7851,-7853,7864,7865,7852,-7854,9884,9885,7864,-7854,7862,7863,7854,-7856,7305,7855\n        ,-7327,7892,7871,7857,-7894,7856,7870,9861,-9863,7831,7832,9890,-9890,7819,7831,9889,-9889,7884,7819,9888,-9888,7856\n        ,9862,9893,-9893,7893,7857,9895,-9895,7831,7819,7820,-7861,7796,7832,7831,-7861,7711,7712,7797,-7862,7711,7861,7305\n        ,-7305,7308,7707,-7305,7708,7707,-7309,7328,7709,7708,-7309,7869,7324,-7869,7693,7312,7324,-7870,7982,7858,7872,-7984\n        ,7832,7796,9873,-9875,7832,9874,9891,-9891,7834,9890,9891,-9876,7837,7834,9875,-9877,7836,7837,9876,-9878,7994,7836\n        ,9877,-9879,7875,7839,7727,-7875,7979,7978,7839,-7876,7730,7899,7898,-7728,9880,7734,7735,-7732,7874,7727,7898,-7898\n        ,7882,7883,7817,-7798,7817,7883,7884,-7817,9886,7816,7884,-9888,9886,9887,7885,-7802,7886,7803,7801,-7886,7814,7803\n        ,7886,-7888,7887,7997,7998,-7815,7714,7713,7908,-7883,7701,7805,-7889,7705,7889,-7707,7891,7984,9860,-9860,7898,7899\n        ,9869,-9869,7768,7770,-7902,7744,7902,-7744,7768,7901,-7905,7904,7905,7765,-7769,7906,7763,7765,-7906,7763,7906,7907\n        ,-7763,7702,7830,-7848,7706,7889,7908,-7714,7705,7702,-7848,7701,7698,-7806,7699,7701,-7889,7700,7699,-7889,7815,7691\n        ,-7701,7755,7760,7761,-7758,7767,7704,-7647,7912,7942,7941,-7945,7911,7916,6878,-6875,6876,7919,7913,-6764,7914,7918\n        ,7938,-7807,7943,6877,6875,-7910,7916,7919,6876,-6879,7808,7935,7914,-7807,7917,6764,6763,-7914,7915,7807,7938,-7919\n        ,7915,7912,7944,-7808,7317,7920,7921,-7312,7311,7921,7932,-7814,7848,7936,7923,-7319,7318,7923,7924,-7307,7306,7924\n        ,7925,-7799,7947,7936,7848,-7949,9882,7947,7948,-9884,7929,9882,9883,-7813,7800,7939,7926,-7928,7929,7809,7810,-7929\n        ,7927,7930,7799,-7801,7810,7811,7931,-7929,7922,7920,7317,7937,7799,-7931,7813,7932,7931,-7812,6882,7933,7934,-7323\n        ,7934,7935,7808,-7323,7933,6882,6764,-7918,7925,7946,7945,-7799,7421,7420,7547,7910,-7910,7319,7717,7716,-7586,7850\n        ,7813,7811,-8001,7999,7867,7850,-8001,7888,7805,7998,-7998,7815,7888,7997,-7997,9879,7877,7994,-9879,9867,7878,7993\n        ,-9867,7990,7875,7874,-7992,9881,7926,7939,-7941,7910,7314,7941,-7943,7943,7909,7910,-7943,7940,7945,7946,-9882,7799\n        ,7950,7949,-7801,7940,7951,7952,-7946,7953,7944,7941,-7955,7955,7956,7807,-7945,7957,7958,7808,-7807,7959,7806,7938\n        ,-7961,7961,7938,7807,-7963,7800,7963,7964,-7940,7954,7941,7798,-7966,7965,7798,7945,-7967,7322,7967,7968,-7938,7937\n        ,7968,7969,-7800,7808,7970,7967,-7323,7939,7972,7971,-7941,7314,7910,-7548,7506,7421,-7910,7968,7967,7970,-7970,7969\n        ,7970,7808,-7800,7799,7808,7958,-7951,7950,7958,7957,-7950,7949,7957,7806,-7801,7800,7806,7959,-7964,7963,7959,7960\n        ,-7965,7964,7960,7938,-7940,7939,7938,7961,-7973,7972,7961,7962,-7972,7971,7962,7807,-7941,7940,7807,7956,-7952,7951\n        ,7956,7955,-7953,7952,7955,7944,-7946,7945,7944,7953,-7967,7966,7953,7954,-7966,7973,7974,7881,-7783,7974,7975,7781\n        ,-7882,7976,8001,7781,-7976,8001,7976,7977,-7781,7779,7780,7977,-7979,7876,7779,7978,-7980,7979,7989,7988,-7877,7825\n        ,7988,7989,-7981,7980,9900,7826,-7826,7981,7842,7826,-9901,7842,7981,9897,-7841,7973,7987,7986,-7847,7870,7784,9860\n        ,-9862,7985,7871,7892,-7985,7986,7872,7871,-7986,7983,7872,7986,-7988,7902,7903,-7744,7745,7890,7903,-7903,7828,7687\n        ,-7691,7860,7820,7908,-7890,7305,7862,-7856,8002,8003,8004,-8006,8007,8003,8014,-8016,8016,8492,8521,-8521,7781,8074\n        ,8523,-7882,8075,8001,7780,-8077,8022,8014,8003,-8003,8023,8024,8014,-8023,8074,7781,8001,-8076,8024,8023,8011,-8014\n        ,8018,8021,8076,-8078,8482,8489,8024,-8014,8015,8481,8480,-8018,8519,8530,8016,-8521,8526,8525,8482,-8014,8031,8032\n        ,8033,-8009,8509,8508,8010,-8038,8483,8525,8526,-8028,8038,8039,8005,-8005,8039,8038,8040,-8042,8004,8006,8042,-8039\n        ,8043,8032,8044,-8046,8010,8508,8025,-8031,8029,8031,8008,-8031,8047,8046,8002,-8006,8050,8049,8012,-8012,8016,8064\n        ,8243,-8493,8009,8054,8053,-8038,8046,8065,8022,-8003,8065,8051,8023,-8023,8051,8050,8011,-8024,8049,8529,8528,-8013\n        ,8066,8063,8029,-8029,8052,8055,8032,-8032,8053,8510,8509,-8038,8057,8047,8005,-8040,8056,8059,8040,-8070,8058,8057\n        ,8039,-8042,8060,8056,8069,-8043,8048,8060,8042,-8007,8055,8062,8044,-8033,8068,8061,8043,-8046,8063,8052,8031,-8030\n        ,8059,8058,8041,-8041,8062,8068,8045,-8045,8070,8035,8034,-8072,8004,8522,-8007,8526,8013,8011,8012,-8528,8009,8037\n        ,-8011,8024,8481,8015,-8015,7782,7881,8523,8073,-8073,8027,8526,8527,-8026,8015,8017,-8008,8069,8040,-8039,8042,8069\n        ,-8039,8033,8032,-8044,8009,8033,-8044,8009,8043,8061,-8055,8026,8484,8483,-8028,8072,8070,8071,7783,-7783,8073,8035\n        ,8070,-8073,8073,8523,8524,-8036,8074,8019,8524,-8524,8075,8020,8019,-8075,8020,8075,8076,-8022,8077,8076,7780,-7780\n        ,8081,8080,8486,-8486,8485,8532,8533,-8082,8078,8079,8084,-8086,8472,8083,8488,-8488,8090,8474,8473,-8083,8085,8530\n        ,8531,-8079,8036,8514,-8514,8085,8084,8087,-8087,8474,8090,8089,-8476,8086,8016,8530,-8086,8514,8036,8067,-8516,8493\n        ,8094,8093,-8495,8080,8081,7825,-7827,7783,8071,8511,-7860,7840,8083,8472,-7843,8016,8086,8095,-8065,8095,8086,8087\n        ,-8097,8475,8089,8097,-8477,8515,8067,8494,-8094,8098,8101,8100,-8100,8396,8391,8392,-8396,8102,8105,8104,-8104,8399\n        ,8400,8397,-8399,8106,8109,8108,-8108,8403,8404,8401,-8403,8110,8113,8112,-8112,8113,8115,8114,-8113,8117,8112,8114\n        ,-8117,8118,8101,8120,-8120,8121,8124,8123,-8123,8125,8128,8127,-8127,8129,8130,8127,-8129,8104,8105,8132,-8132,8133\n        ,8136,8135,-8135,8135,8136,8138,-8138,8139,8142,8141,-8141,8143,8144,8142,-8140,8145,8148,8147,-8147,8149,8152,8151\n        ,-8151,8153,8147,8148,-8155,8155,8151,8152,-8157,8157,8160,8159,-8159,8161,8162,8160,-8158,8162,8164,8163,-8161,8163\n        ,8165,8159,-8161,8166,8167,8165,-8164,8164,8168,8166,-8164,8169,8166,8168,-8171,8171,8167,8166,-8170,8172,8175,8174\n        ,-8174,8173,8174,8177,-8177,8181,8180,8179,-8179,8174,8183,8182,-8178,8499,8185,8184,-8501,8503,8502,8187,-8187,8188\n        ,8191,8190,-8190,8192,8195,8194,-8194,8194,8135,8137,-8194,8196,8156,8152,-8198,8198,8197,8152,-8150,8199,8202,8201\n        ,-8201,8203,8206,8205,-8205,8207,8210,8209,-8209,8208,8209,8212,-8212,8213,8216,8215,-8215,8217,8213,8219,-8219,8220\n        ,8223,8222,-8222,8224,8221,8188,-8226,8226,8227,8224,-8226,8529,8049,8228,-8227,8226,8228,8229,-8228,8230,8050,-8052\n        ,8230,8231,8211,-8233,8211,8231,8233,-8209,8223,8235,8234,-8223,8236,8232,8211,-8213,8237,8240,8239,-8239,8046,8243\n        ,8242,-8242,8245,8243,8064,8095,-8245,8246,8242,8243,-8246,8476,8097,8248,-8478,8479,8478,8251,-8251,8251,8254,8253\n        ,-8251,8097,8093,8094,-8249,8497,8257,8185,-8499,8258,8239,8240,-8260,8260,8255,8256,-8262,8219,8213,8214,-8263,8259\n        ,8264,8263,-8259,8265,8207,8208,-8234,8151,8155,8154,-8149,8266,8267,8204,-8206,8205,8269,8268,-8267,8216,8271,8270\n        ,-8216,8272,8273,8234,-8272,8274,8143,8139,-8276,8275,8139,8140,-8277,8277,8131,8279,-8279,8281,8406,8405,-8281,8150\n        ,8151,8148,-8146,8066,8225,8282,-8092,8282,8496,8495,-8092,8119,8283,8284,-8119,8285,8287,8207,-8287,8288,8290,8238\n        ,-8290,8291,8288,8289,-8293,8292,8294,8293,-8292,8194,8295,8134,-8136,8296,8295,8194,-8196,8501,8298,8187,-8503,8175\n        ,8297,8183,-8175,8120,8115,8165,-8168,8159,8165,8115,-8114,8158,8159,8113,-8111,8146,8106,8107,-8146,8145,8107,8299\n        ,-8151,8150,8299,8300,-8150,8149,8300,8103,-8199,8140,8141,8104,-8132,8276,8140,8131,-8278,8137,8138,8301,-8130,8137\n        ,8129,8128,-8194,8192,8193,8128,-8126,8302,8504,8503,-8187,8177,8182,8124,-8122,8176,8177,8121,-8284,8119,8120,8167\n        ,-8172,8143,8274,8303,-8219,8144,8143,8218,-8220,8196,8144,8219,-8263,8156,8203,8204,-8156,8155,8204,8267,-8155,8161\n        ,8287,8304,-8163,8168,8164,8290,-8289,8170,8168,8288,-8292,8291,8293,8172,-8171,8178,8179,8297,-8176,8501,8500,8184\n        ,-8299,8296,8305,8191,-8296,8134,8295,8191,-8222,8411,8414,8415,-8411,8417,8418,8419,-8417,8170,8172,8173,-8170,8169\n        ,8173,8176,-8172,8196,8197,8142,-8145,8197,8198,8141,-8143,8206,8214,8215,-8270,8228,8230,8232,-8230,8236,8307,8229\n        ,-8233,8244,8247,8252,-8246,8245,8252,8249,-8247,8203,8262,8214,-8207,8308,8309,8260,-8262,8270,8310,8269,-8216,8420\n        ,8422,8423,-8422,8311,8181,8178,-8313,8103,8104,8141,-8199,8171,8176,8283,-8120,8196,8262,8203,-8157,8172,8312,8178\n        ,-8176,8284,8315,8314,-8314,8319,8117,8116,-8321,8321,8324,8323,-8323,8341,8346,8343,-8345,8325,8328,8327,-8327,8359\n        ,8357,8313,-8315,8330,8321,8322,-8330,8329,8322,8323,-8318,8324,8126,8317,-8324,8126,8324,8321,-8331,8338,8333,8334\n        ,-8338,8331,8334,8333,-8333,8469,8331,8332,-8471,8122,8123,8336,-8336,8335,8338,8337,-8123,8341,8344,8340,-8340,8342\n        ,8340,8344,-8344,8345,8342,8343,-8347,8339,8345,8346,-8342,8328,8347,8318,-8328,8325,8348,8347,-8329,8326,8320,8348\n        ,-8326,8327,8318,8320,-8327,8349,8356,8350,-8115,8116,8114,8350,-8352,8352,8116,8351,-8354,8354,8352,8353,-8356,8349\n        ,8354,8355,-8357,8118,8284,8313,-8358,8357,8100,8101,-8119,8329,8331,8469,-8331,8329,8347,8342,8345,8334,-8332,8342\n        ,8347,8348,-8341,8340,8348,-8353,8334,8345,-8359,8353,8351,8350,-8357,8359,8314,8315,-8359,8358,8361,8360,-8360,8359\n        ,8360,8100,-8358,8339,8354,8361,8358,-8346,8361,8098,8099,-8361,8361,8354,8349,-8099,8363,8429,8430,-8363,8365,8432\n        ,8433,-8365,8438,8436,8435,-8438,8367,8102,8394,-8367,8370,8385,8369,-8369,8371,8374,8373,-8373,8375,8388,8376,-8317\n        ,8377,8393,8427,-8379,8386,8387,8390,-8382,8319,8389,8384,-8118,8368,8375,8130,-8414,8385,8373,8387,-8387,8369,8382\n        ,8389,-8389,8367,8371,8279,-8133,8377,8378,-8380,8109,8381,8390,-8109,8384,8383,8434,-8112,8373,8385,-8371,8370,8372\n        ,-8374,8378,8426,8431,-8381,8391,8394,8393,-8393,8377,8395,8392,-8394,8395,8377,8366,-8397,8366,8394,8391,-8397,8385\n        ,8386,8398,-8398,8399,8398,8386,-8383,8369,8400,8399,-8383,8369,8385,8397,-8401,8388,8389,8402,-8402,8403,8402,8389\n        ,-8320,8376,8404,8403,-8320,8376,8388,8401,-8405,8281,8280,8379,-8388,8406,8281,8387,-8374,8405,8406,8373,-8375,8405\n        ,8374,8379,-8281,8407,8132,8105,-8409,8105,8102,8409,-8409,8367,8306,8409,-8103,8407,8306,8367,-8133,8410,8413,8412\n        ,-8412,8412,8370,8414,-8412,8370,8368,8415,-8415,8410,8415,8368,-8414,8416,8419,8130,-8376,8316,8417,8416,-8376,8316\n        ,8127,8418,-8418,8418,8127,8130,-8420,8420,8421,8278,-8280,8371,8422,8420,-8280,8422,8371,8372,-8424,8421,8423,8372\n        ,-8279,8424,8427,8426,-8426,8426,8378,8428,-8426,8378,8427,8424,-8429,8429,8431,8108,-8431,8362,8430,8108,-8391,8363\n        ,8380,8431,-8430,8109,8434,8433,-8433,8364,8433,8434,-8384,8381,8365,8364,-8384,8432,8365,8381,-8110,8435,8436,8111\n        ,-8113,8117,8437,8435,-8113,8437,8117,8384,-8439,8436,8438,8384,-8112,8318,8317,8316,-8377,8126,8127,8316,-8318,8413\n        ,8130,8129,-8302,8394,8103,8300,-8394,8427,8300,8299,-8427,8431,8299,8107,-8109,8439,8440,8153,-8202,8210,8207,8287\n        ,-8442,8209,8210,8443,-8443,8236,8212,8445,-8445,8235,8444,8446,-8235,8224,8447,8220,-8222,8307,8447,8227,-8230,8235\n        ,8223,8447,-8308,8444,8235,8307,-8237,8448,8199,8450,-8450,8445,8448,8449,-8452,8444,8445,8451,-8447,8452,8454,8273\n        ,-8454,8452,8221,8222,-8455,8133,8274,8275,-8137,8276,8138,8136,-8276,8277,8301,8138,-8277,8218,8303,8272,-8218,8133\n        ,8134,8221,-8453,8273,8272,8303,-8454,8271,8216,8217,-8273,8271,8234,8446,-8271,8270,8446,8451,-8311,8451,8449,8268\n        ,-8311,8274,8133,8453,-8304,8266,8268,8449,-8451,8267,8266,8450,-8201,8154,8267,8200,-8154,8147,8153,8440,-8456,8146\n        ,8147,8455,-8457,8457,8456,8158,-8111,8109,8106,8457,-8435,8455,8440,8161,-8158,8455,8157,8158,-8457,8456,8457,8106\n        ,-8147,8434,8457,8110,-8112,8439,8443,8210,-8442,8442,8445,8212,-8210,8458,8202,8199,-8449,8442,8443,8202,-8459,8439\n        ,8201,8202,-8444,8440,8439,8441,-8162,8301,8277,8412,-8414,8162,8304,8459,-8165,8460,8461,8237,-8239,8240,8237,8241\n        ,-8243,8259,8240,8242,-8247,8246,8249,8264,-8260,8264,8249,8462,-8264,8294,8464,8463,-8294,8465,8286,8461,-8461,8237\n        ,8461,8286,-8242,8186,8192,8125,-8303,8195,8192,8186,-8188,8298,8296,8195,-8188,8296,8298,8184,-8467,8467,8468,8185\n        ,-8258,8189,8282,8225,-8189,8309,8479,8250,-8261,8250,8253,8255,-8261,8497,8496,8282,-8258,8257,8282,8189,-8468,8468\n        ,8467,8189,-8191,8312,8463,8464,-8312,8464,8462,8308,-8312,8332,8333,8338,8335,8336,-8471,8356,8355,-8354,8099,8100\n        ,-8361,8408,8409,8306,-8408,8424,8425,-8429,8362,8390,8380,-8364,8098,8349,8114,-8102,8122,8337,8315,-8285,8505,8126\n        ,-8331,8336,8123,8469,-8471,8120,8101,8114,-8116,8284,8283,8121,-8123,8468,8190,8305,-8467,8185,8468,8466,-8185,8261\n        ,8256,8180,-8182,8308,8261,8181,-8312,8462,8249,8309,-8309,8263,8462,8464,-8295,8258,8263,8294,-8293,8292,8289,8239\n        ,-8259,8460,8238,8290,-8472,8459,8465,8460,-8472,8459,8304,8285,-8466,8505,8504,8302,-8127,8477,8248,8251,-8479,8248\n        ,8094,8254,-8252,8095,8096,8247,-8245,8533,7988,7825,-8082,8206,8269,-8206,8213,8217,-8217,8427,8393,-8301,8221,8191\n        ,-8189,8233,8231,-8066,8233,8065,-8047,8286,8207,-8266,8268,8269,-8311,8431,8426,-8300,8285,8286,-8466,8471,8290,-8165\n        ,8103,8394,-8103,8277,8278,-8413,8131,8132,-8280,8458,8448,-8446,8447,8224,-8228,8220,8447,-8224,8287,8161,-8442,8200\n        ,8450,-8200,8452,8453,-8134,8273,8454,-8235,8454,8222,-8235,8200,8201,-8154,8442,8458,-8446,8286,8265,-8242,8463,8172\n        ,-8294,8164,8459,-8472,8126,8302,-8126,8305,8296,-8467,8172,8463,-8313,8185,8499,-8499,8239,8289,-8239,8285,8304,-8288\n        ,8190,8191,-8306,8091,8495,-8494,7842,8472,8080,-7827,8080,8472,8487,-8487,8079,8473,8474,-8085,8084,8474,8475,-8088\n        ,8087,8475,8476,-8097,8096,8476,8477,-8248,8247,8477,8478,-8253,8249,8252,8478,-8480,8309,8249,-8480,8491,8490,8021\n        ,-8019,8489,8020,8021,-8491,8482,8019,8020,-8490,8482,8525,8524,-8020,8035,8524,8525,-8484,8484,8034,8035,-8484,8484\n        ,8513,8512,-8035,8078,8531,8532,-8486,8485,8486,8079,-8079,8487,8473,8079,-8487,8488,8082,8473,-8488,8481,8490,8491\n        ,-8481,8489,8490,8481,-8025,8006,8522,8521,-8493,8492,8243,8048,-8007,8265,8233,8046,-8242,8051,8065,8231,-8231,8049\n        ,8050,-8229,8091,8493,8494,-8093,8495,8254,8094,-8494,8496,8253,8254,-8496,8255,8253,8496,-8498,8255,8497,8498,-8257\n        ,8499,8180,8256,-8499,8180,8499,8500,-8180,8297,8179,8500,-8502,8297,8501,8502,-8184,8182,8183,8502,-8504,8504,8124\n        ,8182,-8504,8123,8124,8504,-8506,8123,8505,8330,-8470,8054,8507,8506,-8054,8053,8506,8088,-8511,8055,8061,8068,-8063\n        ,8055,8052,8507,8054,-8062,8066,8506,8507,8052,-8064,8067,8088,8092,-8495,8506,8066,-8089,8092,8066,-8092,8060,8047\n        ,8057,-8057,8057,8058,8059,-8057,8047,8060,8048,8243,-8047,8066,8092,-8089,8025,8508,8026,-8028,8036,8026,8508,-8510\n        ,8509,8510,8067,-8037,8088,8067,-8511,8028,8029,-8031,8030,8008,-8011,8025,8527,8528,8028,-8031,8012,8528,-8528,8071\n        ,8034,8512,-8512,8511,8083,7840,-7860,8083,8511,8512,-8489,8488,8512,8513,-8083,8082,8513,8514,-8091,8090,8514,8515\n        ,-8090,8089,8515,8093,-8098,8077,7779,7876,-8517,8077,8516,8517,-8019,8518,8491,8018,-8518,8519,8480,8491,-8519,8520\n        ,8017,8480,-8520,8521,8007,8017,-8521,8522,8003,8007,-8522,8004,8003,-8523,8528,8529,8066,-8029,8226,8225,8066,-8530\n        ,7876,7988,8533,-8517,8517,8516,8533,-8533,8531,8518,8517,-8533,8519,8518,8531,-8531,8484,8026,8036,-8514,8379,8374\n        ,8366,-8378,8370,8412,8278,-8373,8009,8010,8008,-8034,8354,8339,8340,-8353,8390,8387,8379,-8381,8380,8379,-8379,8374\n        ,8371,8367,-8367,8388,8375,8368,-8370,8382,8383,8384,-8390,8382,8386,8381,-8384,8318,8376,8319,-8321,8116,8352,8348\n        ,-8321,8329,8317,8318,-8348,8334,8358,8315,-8338,8230,8228,-8051,7545,7376,-7484,7558,7559,-7503,8534,8537,8536,-8536\n        ,8539,8547,8546,-8536,8548,9053,9054,-9026,9069,9078,9056,-8608,8608,8609,9068,-8603,8554,8534,8535,-8547,8555,8554\n        ,8546,-8557,8607,8608,8602,-9070,8556,8545,8543,-8556,8550,8610,8609,-8554,9015,8545,8556,-9023,8547,8549,9013,-9015\n        ,9052,9053,8548,-9064,9059,8545,9015,-9059,8563,8540,8565,-8565,9042,8569,8542,-9042,9016,8559,9059,-9059,8570,8536\n        ,8537,-8572,8571,8573,8572,-8571,8536,8570,8574,-8539,8575,8577,8576,-8565,8542,8562,8557,-9042,8561,8562,8540,-8564\n        ,8579,8537,8534,-8579,8582,8543,8544,-8582,8548,9025,8776,-8597,8541,8569,8585,-8587,8578,8534,8554,-8598,8597,8554\n        ,8555,-8584,8583,8555,8543,-8583,8581,8544,9061,-9063,8598,8560,8561,-8596,8584,8563,8564,-8588,8585,8569,9042,-9044\n        ,8589,8571,8537,-8580,8588,8601,8572,-8592,8590,8573,8571,-8590,8592,8574,8601,-8589,8580,8538,8574,-8593,8587,8564\n        ,8576,-8595,8600,8577,8575,-8594,8595,8561,8563,-8585,8591,8572,8573,-8591,8594,8576,8577,-8601,8603,8604,8566,-8568\n        ,8536,8538,-9056,9059,9060,8544,8543,-8546,8541,8542,-8570,8556,8546,8547,-9015,9070,8605,8606,9056,-9079,8559,8557\n        ,9060,-9060,8547,8539,-8550,8601,8570,-8573,8574,8570,-8602,8565,8575,-8565,8541,8575,-8566,8541,8586,8593,-8576,8558\n        ,8559,9016,-9018,8605,9070,9071,8604,-8604,8606,8605,8603,-8568,8606,8567,9057,-9057,8607,9056,9057,-8552,8608,8607\n        ,8551,-8553,8552,8553,8609,-8609,8610,9067,9068,-8610,8614,9018,9019,-8614,9018,8614,9066,-9066,8611,8618,8617,-8613\n        ,9005,9020,9021,-8617,8623,8615,9006,-9008,8618,8611,9064,-9064,8568,9046,-9048,8618,8619,8620,-8618,9007,9008,8622\n        ,-8624,8619,8618,9063,-8549,9047,9048,8599,-8569,9026,9027,8626,-8628,8613,9073,9072,-8615,9074,9075,9005,-8617,8548\n        ,8596,8628,-8620,8628,8629,8620,-8620,9008,9009,8630,-8623,9048,8626,9027,-8600,8631,8632,8633,-8635,8929,8928,8925\n        ,-8925,8635,8636,8637,-8639,8932,8931,8930,-8934,8639,8640,8641,-8643,8936,8935,8934,-8938,8643,8644,8645,-8647,8646\n        ,8645,8647,-8649,8650,8649,8647,-8646,8651,8652,8653,-8635,8654,8655,8656,-8658,8658,8659,8660,-8662,8662,8661,8660\n        ,-8664,8637,8664,8665,-8639,8666,8667,8668,-8670,8668,8670,8671,-8670,8672,8673,8674,-8676,8676,8672,8675,-8678,8678\n        ,8679,8680,-8682,8682,8683,8684,-8686,8686,8687,8681,-8681,8688,8689,8685,-8685,8690,8691,8692,-8694,8694,8690,8693\n        ,-8696,8695,8693,8696,-8698,8696,8693,8692,-8699,8699,8696,8698,-8701,8697,8696,8699,-8702,8702,8703,8701,-8700,8704\n        ,8702,8699,-8701,8705,8706,8707,-8709,8706,8709,8710,-8708,8714,8711,8712,-8714,8707,8710,8715,-8717,9032,9033,8717\n        ,-8719,9036,8719,8720,-9036,8721,8722,8723,-8725,8725,8726,8727,-8729,8727,8726,8670,-8669,8729,8730,8685,-8690,8731\n        ,8682,8685,-8731,8732,8733,8734,-8736,8736,8737,8738,-8740,8740,8741,8742,-8744,8741,8744,8745,-8743,8746,8747,8748\n        ,-8750,8750,8751,8752,-8747,8753,8754,8755,-8757,8757,8758,8721,-8755,8759,8758,8757,-8761,9062,8759,8761,-8582,8759\n        ,8760,8762,-8762,8763,8583,-8583,8763,8765,8744,-8765,8744,8741,8766,-8765,8756,8755,8767,-8769,8769,8745,8744,-8766\n        ,8770,8771,8772,-8774,8578,8774,8775,-8777,8778,8777,8628,8596,-8777,8779,8778,8776,-8776,9009,9010,8781,-8631,9012\n        ,8783,8784,-9012,8784,8783,8786,-8788,8630,8781,8627,-8627,9030,9031,8718,-8791,8791,8792,8773,-8773,8793,8794,8789\n        ,-8789,8752,8795,8747,-8747,8792,8791,8796,-8798,8798,8766,8741,-8741,8684,8681,8687,-8689,8799,8738,8737,-8801,8738\n        ,8799,8801,-8803,8749,8748,8803,-8805,8805,8804,8767,-8807,8807,8808,8672,-8677,8808,8809,8673,-8673,8810,8811,8812\n        ,-8665,8814,8813,8938,-8940,8683,8678,8681,-8685,8598,8624,8815,-8759,8815,8624,9028,-9030,8652,8651,8817,-8817,8818\n        ,8819,8740,-8821,8821,8822,8771,-8824,8824,8825,8822,-8822,8825,8824,8826,-8828,8727,8668,8667,-8829,8829,8728,8727\n        ,-8829,9034,9035,8720,-8832,8708,8707,8716,-8831,8653,8700,8698,-8649,8692,8646,8648,-8699,8691,8643,8646,-8693,8679\n        ,8678,8640,-8640,8678,8683,8832,-8641,8683,8682,8833,-8833,8682,8731,8636,-8834,8673,8664,8637,-8675,8809,8810,8664\n        ,-8674,8670,8662,8834,-8672,8670,8726,8661,-8663,8725,8658,8661,-8727,8835,8719,9036,-9038,8710,8654,8657,-8716,8709\n        ,8816,8654,-8711,8652,8704,8700,-8654,8676,8751,8836,-8808,8677,8752,8751,-8677,8729,8795,8752,-8678,8689,8688,8737\n        ,-8737,8688,8687,8800,-8738,8694,8695,8837,-8821,8701,8821,8823,-8698,8703,8824,8821,-8702,8824,8703,8705,-8827,8711\n        ,8708,8830,-8713,9034,8831,8717,-9034,8829,8828,8724,-8839,8667,8754,8724,-8829,8944,8943,8948,-8948,8950,8949,8952\n        ,-8952,8703,8702,8706,-8706,8702,8704,8709,-8707,8729,8677,8675,-8731,8730,8675,8674,-8732,8739,8802,8748,-8748,8761\n        ,8762,8765,-8764,8769,8765,8762,-8841,8777,8778,8785,-8781,8778,8779,8782,-8786,8736,8739,8747,-8796,8841,8794,8793\n        ,-8843,8803,8748,8802,-8844,8953,8954,8956,-8956,8844,8845,8711,-8715,8636,8731,8674,-8638,8704,8652,8816,-8710,8729\n        ,8689,8736,-8796,8705,8708,8711,-8846,8817,8846,8847,-8849,8852,8853,8649,-8651,8854,8855,8856,-8858,8874,8877,8876\n        ,-8880,8858,8859,8860,-8862,8892,8847,8846,-8891,8863,8862,8855,-8855,8862,8850,8856,-8856,8857,8856,8850,-8660,8659\n        ,8863,8854,-8858,8871,8870,8867,-8867,8864,8865,8866,-8868,9002,9003,8865,-8865,8655,8868,8869,-8657,8868,8655,8870\n        ,-8872,8874,8872,8873,-8878,8875,8876,8877,-8874,8878,8879,8876,-8876,8872,8874,8879,-8879,8861,8860,8851,-8881,8858\n        ,8861,8880,-8882,8859,8858,8881,-8854,8860,8859,8853,-8852,8882,8647,8883,-8890,8649,8884,8883,-8648,8885,8886,8884\n        ,-8650,8887,8888,8886,-8886,8882,8889,8888,-8888,8651,8890,8846,-8818,8890,8651,8634,-8634,8862,8863,9002,-8865,8862\n        ,8864,8867,8878,8875,-8881,8875,8873,8881,-8881,8873,8885,-8882,8867,8891,-8879,8886,8889,8883,-8885,8892,8891,8848\n        ,-8848,8891,8892,8893,-8895,8892,8890,8633,-8894,8872,8878,8891,8894,-8888,8894,8893,8632,-8632,8894,8631,8882,-8888\n        ,8896,8895,8963,-8963,8898,8897,8966,-8966,8971,8970,8968,-8970,8900,8899,8927,-8636,8903,8901,8902,-8919,8904,8905\n        ,8906,-8908,8908,8849,8909,-8922,8910,8911,8960,-8927,8919,8914,8923,-8921,8852,8650,8917,-8923,8901,8946,8663,-8909\n        ,8918,8919,8920,-8907,8902,8921,8922,-8916,8900,8665,8812,-8905,8910,8912,-8912,8642,8641,8923,-8915,8917,8644,8967\n        ,-8917,8906,8903,-8919,8903,8906,-8906,8911,8913,8964,-8960,8924,8925,8926,-8928,8910,8926,8925,-8929,8928,8929,8899\n        ,-8911,8899,8929,8924,-8928,8918,8930,8931,-8920,8932,8915,8919,-8932,8902,8915,8932,-8934,8902,8933,8930,-8919,8921\n        ,8934,8935,-8923,8936,8852,8922,-8936,8909,8852,8936,-8938,8909,8937,8934,-8922,8814,8920,8912,-8814,8939,8906,8920\n        ,-8815,8938,8907,8906,-8940,8938,8813,8912,-8908,8940,8941,8638,-8666,8638,8941,8942,-8636,8900,8635,8942,-8840,8940\n        ,8665,8900,-8840,8943,8944,8945,-8947,8945,8944,8947,-8904,8903,8947,8948,-8902,8943,8946,8901,-8949,8949,8908,8663\n        ,-8953,8849,8908,8949,-8951,8849,8950,8951,-8661,8951,8952,8663,-8661,8953,8812,8811,-8955,8904,8812,8953,-8956,8955\n        ,8956,8905,-8905,8954,8811,8905,-8957,8957,8958,8959,-8961,8959,8958,8961,-8912,8911,8961,8957,-8961,8962,8963,8641\n        ,-8965,8895,8923,8641,-8964,8896,8962,8964,-8914,8642,8965,8966,-8968,8897,8916,8967,-8967,8914,8916,8897,-8899,8965\n        ,8642,8914,-8899,8968,8645,8644,-8970,8650,8645,8968,-8971,8970,8971,8917,-8651,8969,8644,8917,-8972,8851,8909,8849\n        ,-8851,8659,8850,8849,-8661,8946,8834,8662,-8664,8927,8926,8833,-8637,8960,8959,8832,-8834,8964,8641,8640,-8833,8972\n        ,8734,8686,-8974,8743,8974,8820,-8741,8742,8975,8976,-8744,8769,8977,8978,-8746,8768,8767,8979,-8978,8757,8754,8753\n        ,-8981,8840,8762,8760,-8981,8768,8840,8980,-8757,8977,8769,8840,-8769,8981,8982,8983,-8733,8978,8984,8982,-8982,8977\n        ,8979,8984,-8979,8985,8986,8806,-8988,8985,8987,8755,-8755,8666,8669,8808,-8808,8809,8808,8669,-8672,8810,8809,8671\n        ,-8835,8751,8750,8805,-8837,8666,8985,8754,-8668,8806,8986,8836,-8806,8804,8805,8750,-8750,8804,8803,8979,-8768,8803\n        ,8843,8984,-8980,8984,8843,8801,-8983,8807,8836,8986,-8667,8799,8983,8982,-8802,8800,8733,8983,-8800,8687,8686,8733\n        ,-8801,8680,8988,8973,-8687,8679,8989,8988,-8681,8990,8643,8691,-8990,8642,8967,8990,-8640,8988,8690,8694,-8974,8988\n        ,8989,8691,-8691,8989,8679,8639,-8991,8967,8644,8643,-8991,8972,8974,8743,-8977,8975,8742,8745,-8979,8991,8981,8732\n        ,-8736,8975,8991,8735,-8977,8972,8976,8735,-8735,8973,8694,8974,-8973,8834,8946,8945,-8811,8695,8697,8992,-8838,8993\n        ,8771,8770,-8995,8773,8775,8774,-8771,8792,8779,8775,-8774,8779,8792,8797,-8783,8797,8796,8995,-8783,8827,8826,8996\n        ,-8998,8998,8993,8994,-8820,8770,8774,8819,-8995,8719,8835,8658,-8726,8728,8720,8719,-8726,8831,8720,8728,-8830,8829\n        ,8999,8717,-8832,9000,8790,8718,-9002,8722,8721,8758,-8816,8842,8793,8783,-9013,8783,8793,8788,-8787,9030,8790,8815\n        ,-9030,8790,9000,8722,-8816,9001,8723,8722,-9001,8845,8844,8997,-8997,8997,8844,8841,-8996,8865,9003,8869,8868,8871\n        ,-8867,8889,8886,-8889,8632,8893,-8634,8941,8940,8839,-8943,8957,8961,-8959,8895,8896,8913,-8924,8631,8634,8647,-8883\n        ,8655,8817,8848,-8871,9038,8863,-8660,8869,9003,9002,-8657,8653,8648,8647,-8635,8817,8655,8654,-8817,9001,8999,8838\n        ,-8724,8718,8717,8999,-9002,8794,8714,8713,-8790,8841,8844,8714,-8795,8995,8841,8842,-8783,8796,8827,8997,-8996,8791\n        ,8825,8827,-8797,8825,8791,8772,-8823,8993,9004,8823,-8772,8992,9004,8993,-8999,8992,8998,8818,-8838,9038,8659,8835\n        ,-9038,9010,9011,8784,-8782,8781,8784,8787,-8628,8628,8777,8780,-8630,9066,8614,9072,-9080,8739,8738,-8803,8746,8749\n        ,-8751,8960,8833,-8927,8754,8721,-8725,8766,8597,-8765,8766,8578,-8598,8819,8798,-8741,8801,8843,-8803,8964,8832,-8960\n        ,8818,8998,-8820,9004,8697,-8824,8636,8635,-8928,8810,8945,-8812,8664,8812,-8666,8991,8978,-8982,8980,8760,-8758,8753\n        ,8756,-8981,8820,8974,-8695,8733,8732,-8984,8985,8666,-8987,8806,8767,-8988,8987,8767,-8756,8733,8686,-8735,8975,8978\n        ,-8992,8819,8774,-8799,8996,8826,-8706,8697,9004,-8993,8659,8658,-8836,8838,8999,-8830,8705,8845,-8997,8718,9031,-9033\n        ,8772,8771,-8823,8818,8820,-8838,8723,8838,-8725,8624,9026,-9029,9075,9073,8613,-9006,8613,9019,9020,-9006,8612,8617\n        ,9007,-9007,8617,8620,9008,-9008,8620,8629,9009,-9009,8629,8780,9010,-9010,8780,8785,9011,-9011,8782,9012,9011,-8786\n        ,8842,9012,-8783,9024,8550,8553,-9024,9022,9023,8553,-8553,9015,9022,8552,-8552,9015,8551,9057,-9059,8567,9016,9058\n        ,-9058,9017,9016,8567,-8567,9017,8566,9045,-9047,8611,9018,9065,-9065,9018,8611,8612,-9020,9020,9019,8612,-9007,9021\n        ,9020,9006,-8616,9014,9013,9024,-9024,9022,8556,9014,-9024,8538,9025,9054,-9056,9025,8538,8580,-8777,8798,8774,8578\n        ,-8767,8583,8763,8764,-8598,8581,8761,-8583,8624,8625,9027,-9027,9028,9026,8627,-8788,9029,9028,8787,-8787,8788,9030\n        ,9029,-8787,8788,8789,9031,-9031,9032,9031,8789,-8714,8713,8712,9033,-9033,8830,9034,9033,-8713,8830,8716,9035,-9035\n        ,8715,9036,9035,-8717,9037,9036,8715,-8658,8656,9038,9037,-8658,8656,9002,8863,-9039,8586,8585,9039,-9041,8585,9043\n        ,8621,-9040,8587,8594,8600,-8594,8587,8593,8586,9040,-8585,8598,8595,8584,9040,-9040,8599,9027,8625,-8622,9039,8621\n        ,-8599,8625,8624,-8599,8592,8588,8589,-8580,8589,8588,8591,-8591,8579,8578,8776,8580,-8593,8598,8621,-8626,8557,8559\n        ,8558,-9042,8568,9042,9041,-8559,9042,8568,8599,-9044,8621,9043,-8600,8560,8562,-8562,8562,8542,-8541,8557,8562,8560\n        ,9061,-9061,8544,9060,-9062,8604,9044,9045,-8567,9044,9076,9074,-8617,8616,9021,9045,-9045,9021,8615,9046,-9046,8615\n        ,8623,9047,-9047,8623,8622,9048,-9048,8622,8630,8626,-9049,8610,9049,9077,-9068,8610,8550,9050,-9050,9051,9050,8550\n        ,-9025,9052,9051,9024,-9014,9053,9052,9013,-8550,9054,9053,8549,-8540,9055,9054,8539,-8536,8536,9055,-8536,9061,8560\n        ,8598,-9063,8759,9062,8598,-8759,9077,9049,9066,-9080,9050,9065,9066,-9050,9064,9065,9050,-9052,9052,9063,9064,-9052\n        ,9017,9046,8568,-8559,8912,8910,8899,-8908,8903,8905,8811,-8946,8541,8565,8540,-8543,8887,8885,8873,-8873,8923,8913\n        ,8912,-8921,8913,8911,-8913,8907,8899,8900,-8905,8921,8902,8901,-8909,8915,8922,8917,-8917,8915,8916,8914,-8920,8851\n        ,8853,8852,-8910,8649,8853,8881,-8886,8862,8880,8851,-8851,8867,8870,8848,-8892,8763,8582,-8762,9080,9081,9082,-9084\n        ,9081,9084,9085,-9083,9084,9086,9263,-9086,9088,9084,9081,-9090,9090,9086,9084,-9089,9091,9087,9086,-9091,9094,9092\n        ,9093,-9134,9095,9096,9088,-9090,9096,9097,9090,-9089,9097,9098,9091,-9091,9099,9100,9096,-9096,9100,9101,9097,-9097\n        ,9101,9102,9098,-9098,9093,9092,9104,-9131,9083,9105,9092,-9081,9089,9081,9080,-9095,9095,9089,9094,-9134,9106,9107\n        ,9108,-9110,9110,9111,9109,-9109,9112,9113,9111,-9111,9114,9115,9113,-9113,9116,9117,9109,-9112,9118,9116,9111,-9114\n        ,9119,9118,9113,-9116,9120,9121,9122,-9124,9116,9124,9125,-9118,9118,9126,9124,-9117,9119,9127,9126,-9119,9124,9100\n        ,9099,-9126,9126,9101,9100,-9125,9127,9102,9101,-9127,9128,9122,9121,-9133,9122,9129,9107,-9107,9117,9123,9106,-9110\n        ,9117,9125,9120,-9124,9120,9220,9103,-9122,9093,9130,9131,-9104,9131,9132,9121,-9104,9103,9220,9133,-9094,9134,9135\n        ,9136,-9138,9138,9139,9137,-9137,9140,9141,9139,-9139,9142,9143,9137,-9140,9144,9142,9139,-9142,9091,9144,9141,-9088\n        ,9145,9146,9147,-9149,9142,9149,9150,-9144,9144,9151,9149,-9143,9091,9098,9151,-9145,9149,9152,9153,-9151,9151,9154\n        ,9152,-9150,9098,9102,9154,-9152,9156,9147,9146,-9179,9135,9134,9147,-9158,9143,9148,9134,-9138,9143,9150,9145,-9149\n        ,9158,9159,9160,-9162,9162,9164,9165,-9164,9164,9115,9114,-9166,9166,9162,9159,-9168,9168,9164,9162,-9167,9119,9115\n        ,9164,-9169,9169,9170,9171,-9173,9173,9174,9166,-9168,9174,9175,9168,-9167,9175,9127,9119,-9169,9153,9152,9174,-9174\n        ,9152,9154,9175,-9175,9154,9102,9127,-9176,9170,9169,9176,-9181,9169,9158,9161,-9178,9167,9159,9158,-9173,9171,9173\n        ,9167,-9173,9179,9178,9146,-9156,9170,9180,9179,-9156,9082,9182,9181,-9084,9085,9183,9182,-9083,9181,9184,9105,-9084\n        ,9184,9185,9104,-9106,9107,9187,9186,-9109,9108,9186,9188,-9111,9110,9188,9189,-9113,9112,9189,9190,-9115,9129,9191\n        ,9187,-9108,9128,9192,9191,-9130,9130,9194,9193,-9132,9104,9185,9194,-9131,9193,9195,9132,-9132,9195,9192,9128,-9133\n        ,9135,9196,9340,-9137,9136,9340,9197,-9139,9138,9197,9198,-9141,9157,9199,9196,-9136,9156,9200,9199,-9158,9160,9202\n        ,9201,-9162,9163,9203,9202,-9161,9165,9204,9203,-9164,9114,9190,9204,-9166,9201,9205,9177,-9162,9205,9206,9176,-9178\n        ,9208,9207,9178,-9180,9207,9200,9156,-9179,9180,9209,9208,-9180,9176,9206,9209,-9181,9080,9092,-9095,9092,9105,-9105\n        ,9106,9123,-9123,9122,9128,-9130,9134,9148,-9148,9147,9156,-9158,9158,9169,-9173,9169,9177,-9177,9218,9219,9215,-9218\n        ,9211,9213,9214,-9216,9214,9213,9210,9204,-9217,9204,9190,9217,-9217,9190,9189,9218,-9218,9218,9189,9212,-9220,9212\n        ,9211,9215,-9220,9215,9214,9216,-9218,9220,9120,9125,-9100,9133,9220,9099,-9096,9155,9146,9145,-9222,9221,9145,9150\n        ,-9154,9171,9221,9153,-9174,9155,9221,9171,-9171,9159,9162,9163,-9161,9232,9231,9281,-9231,9407,9408,9229,-9400,9290\n        ,9234,9249,-9290,9239,9240,-9251,9416,9246,9223,-9227,9292,9231,9232,-9292,9241,9238,9232,9230,-9244,9236,9235,-9229\n        ,9293,9237,9231,-9293,9251,9254,9253,-9253,9236,9251,9252,-9236,9255,9256,9249,-9235,9253,9254,9256,-9256,9257,9258\n        ,9254,-9252,9259,9257,9251,-9237,9256,9260,9248,-9250,9254,9258,9260,-9257,9257,9262,9261,-9259,9287,9288,9248,-9261\n        ,9286,9287,9260,-9259,9266,9245,9247,-9265,9267,9266,9264,-9266,9360,9269,-9269,9261,9271,9284,-9286,9266,9272,9244\n        ,-9246,9267,9270,9272,-9267,9268,9273,9271,9261,-9263,9198,9273,9268,-9270,9283,9274,9242,-9283,9284,9271,9274,-9284\n        ,9240,9239,9276,-9276,9277,9238,9241,-9279,9275,9276,9280,-9280,9280,9277,9278,-9280,9277,9276,9239,-9239,9261,9285\n        ,9286,-9259,9273,9275,9279,-9272,9278,9241,9242,-9275,9279,9278,9274,-9272,9255,9234,9235,-9253,9227,9415,9416,-9227\n        ,9246,9407,9399,-9224,9250,9291,9232,9238,-9240,9225,9418,9246,-9417,9243,9282,9242,-9242,9289,9249,9248,-9289,9231\n        ,9237,9383,-9282,9408,9831,9832,-9230,9830,9233,9230,-9282,9243,9230,9233,-9420,9395,9228,9394,-9397,9255,9252,-9254\n        ,9276,9277,-9281,9822,9823,9347,-9355,9821,9822,9354,-9356,9355,9356,9820,-9822,9356,9400,9819,-9821,9400,9357,9818\n        ,-9820,9070,9818,9834,-9072,9244,9282,9243,-9420,9417,9283,9282,9244,-9273,9420,9284,9283,-9418,9285,9284,9420,-9422\n        ,9286,9285,9421,-9423,9422,9423,9287,-9287,9247,9288,9287,9423,-9265,9225,9289,9288,-9248,9290,9289,9225,-9225,9290\n        ,9224,9391,-9391,9397,9390,9391,-9399,9203,9204,9374,-9376,9376,9295,-9368,9208,9401,9328,-9208,9791,9366,9367,-9360\n        ,9203,9375,9299,-9203,9402,9918,9919,-9328,9305,9189,-9189,9359,9367,9368,-9321,9306,9915,9366,-9792,9303,9403,9404\n        ,-9309,9192,9309,9380,-9382,9381,9382,-9192,9362,9186,9187,-9312,9426,9427,9785,-9787,9430,9427,9426,-9432,9428,9429\n        ,9433,-9435,9430,9431,9434,-9434,9429,9428,9432,-9451,9317,9313,9784,9296,9297,-9299,9352,9353,9318,-9781,9914,9319\n        ,-9365,9451,9437,9438,-9440,9364,9319,9321,-9849,9917,9325,9377,-9917,9380,9309,9846,-9848,9910,9911,9845,-9845,9401\n        ,9402,9327,-9329,9324,9405,-9195,9324,9337,9843,-9845,9439,9789,9790,-9452,9789,9440,9441,-9791,9442,9445,9441,-9441\n        ,9442,9443,9444,-9446,9447,9444,9443,-9447,9436,9447,9446,-9436,9850,9330,9213,-9212,9374,9210,9213,-9332,6854,6857\n        ,9424,-9634,9906,9907,9841,-9841,9387,9922,9923,-9370,9903,9904,9838,-9838,9901,9902,9836,-9836,9413,9392,9837,-9839\n        ,9337,9395,9842,-9844,9332,9333,9388,-9390,9411,9412,9335,-9340,9406,9373,9358,-9200,9183,9236,9228,-9183,9340,9291\n        ,9250,-9198,9920,9921,9342,-9342,9908,9909,9843,-9843,9346,9345,9344,-9344,9369,9923,9924,-9371,9906,9840,9839,-9906\n        ,9333,9332,9334,-9339,9410,9925,9926,-9372,9836,9393,9824,-9836,9826,9827,9348,-9350,9910,9844,9843,-9910,9346,9343\n        ,9303,-9309,9327,9919,9920,-9342,9903,9837,9836,-9903,9336,9349,9339,-9336,9385,9371,9372,-9387,9184,9337,9324,-9186\n        ,9448,9449,9450,-9433,9305,9188,-9313,9212,9304,-9330,9213,9330,-9332,9846,9912,9379,-9848,9825,9826,9349,-9337,9347\n        ,9222,9227,-9355,9355,9354,9227,-9227,9226,9223,9356,-9356,9223,9399,9400,-9357,9399,9229,9357,-9401,9357,9229,9832\n        ,-9834,9293,9292,9358,-9374,9292,9291,9340,-9359,9197,9250,9240,-9199,9376,9377,9325,-9327,9263,9360,-9263,9262,9360\n        ,-9269,9310,9361,9363,-9324,9188,9186,9362,-9313,9181,9182,9228,9395,-9338,9086,9087,9360,-9264,9087,9141,9140,9269\n        ,-9361,9275,9273,9198,-9241,9183,9085,9263,9259,-9237,9191,9382,-9188,9363,9361,9381,-9381,9379,9364,9848,-9848,9364\n        ,9379,9913,-9915,9377,9366,9915,-9917,9376,9367,9366,-9378,9295,9368,-9368,9409,9410,9371,-9386,9369,9370,9384,-9384\n        ,9348,9372,9371,-9927,9372,9348,9827,-9829,9341,9373,9328,-9328,9293,9373,9341,-9343,9294,9205,-9202,9206,9205,9376\n        ,-9327,9382,9381,-9362,9187,9382,9361,-9312,9369,9383,9237,-9388,9828,9829,9386,-9373,9237,9293,9342,-9388,9342,9921\n        ,9922,-9388,9389,9388,9344,-9346,9908,9842,9841,-9908,9234,9394,9228,-9236,9393,9392,9222,-9348,9824,9393,9347,-9824\n        ,9227,9222,9414,-9416,9290,9390,9394,-9235,9394,9390,9397,-9397,9392,9413,9414,-9223,9206,9326,9401,9208,-9210,9326\n        ,9325,9402,-9402,9917,9918,9402,-9326,9404,9403,9302,-9308,9845,9911,9912,-9847,9195,9405,-9310,9199,9200,-9407,9233\n        ,9408,9407,-9420,9830,9831,9408,-9234,9384,9370,9410,-9410,9370,9924,9925,-9411,9338,9334,9412,-9412,9838,9904,9905\n        ,-9840,9398,9413,9838,-9840,9413,9398,9391,-9415,9414,9391,9224,-9416,9416,9415,9224,-9226,9270,9417,-9273,9245,9418\n        ,9225,-9248,9245,9244,-9419,9270,9420,-9418,9420,9270,9267,-9422,9422,9421,9267,-9266,9265,9264,9423,-9423,9196,9358\n        ,-9341,9199,9358,-9197,9195,9309,-9193,9193,9405,-9196,9194,9405,-9194,9324,9194,-9186,9257,9259,9263,-9263,9269,9140\n        ,-9199,9427,9787,9784,-9786,9426,6856,6861,-9432,6858,6859,9428,-9435,9429,9314,9781,-9434,9786,9424,6857,-6861,9431\n        ,6861,6858,-9435,9316,9314,9429,-9451,9432,9428,6859,-6863,9430,9433,9781,-9316,9430,9315,9787,-9428,9318,9310,9436\n        ,-9436,9436,9310,9323,9321,-9448,9359,9320,9437,-9452,9320,9297,9438,-9438,9297,9296,9439,-9439,9790,9791,9359,-9452\n        ,9441,9306,9791,-9791,9442,9440,9783,-9783,9441,9445,9322,-9307,9301,9443,9442,-9783,9445,9444,9319,-9323,9443,9301\n        ,9300,-9447,9319,9444,9447,-9322,9446,9300,9780,9318,-9436,6866,9352,9449,-9449,9449,9352,9316,-9451,9448,9432,6862\n        ,-6867,9439,9296,9788,-9790,9630,9455,9456,-9454,9455,9457,9458,-9457,9457,9459,9460,-9459,9617,9461,9462,-9464,9464\n        ,9645,9646,-9648,9644,9645,9464,-9469,9659,9643,-9471,9452,9476,9475,-9623,9477,9621,9623,-9625,9477,9478,9620,-9622\n        ,9478,9479,9619,-9621,9461,9480,9481,-9463,9632,9467,9521,-9521,9483,9468,9464,-9483,9484,9470,9468,-9484,9653,9659\n        ,9470,-9655,9476,9487,9486,-9476,9488,9477,9624,-9626,9478,9477,9488,-9490,9479,9478,9489,-9575,9480,9573,9572,-9482\n        ,9631,9632,9520,-9570,9483,9482,9568,-9568,9484,9483,9567,-9567,9487,9490,9491,-9487,9493,9488,9625,-9627,9496,9574\n        ,9489,-9523,9586,9631,9569,-9502,9584,9565,9655,-9657,9564,9565,9584,-9584,9627,9665,9492,9493,-9627,9613,9614,9496\n        ,-9498,9587,9588,9858,-9858,9857,9858,9604,-9606,9577,9578,9500,-9502,9651,9641,9642,-9651,9656,9657,9504,-9585,9584\n        ,9504,9505,-9584,9612,9662,-9665,9494,9507,9508,-9500,9595,9591,9589,-9591,9609,9608,9591,-9596,9509,9500,9578,-9580\n        ,9640,9641,9651,-9653,9658,9511,9504,-9658,9512,9505,9504,-9512,9514,9515,9508,-9508,9595,9590,9593,-9593,9609,9595\n        ,9592,-9595,9509,9579,9580,-9519,9510,9509,9518,-9520,9640,9652,-9640,9615,9616,9479,-9575,9614,9615,9574,-9497,9500\n        ,9509,9510,-9503,9501,9500,9502,-9587,9522,9523,9497,-9497,9497,9669,9764,-9663,9493,9668,9523,-9523,9489,9488,9493\n        ,-9523,9597,9596,9855,-9855,9854,9855,9603,-9603,9577,9501,9569,-9571,9585,9566,9567,-9638,9310,9524,9525,-9362,9311\n        ,9526,9527,-9363,9312,9362,9527,-9529,9312,9528,9529,-9306,9329,9304,9530,-9532,9374,9331,9532,-9534,9375,9374,9533\n        ,-9535,9299,9375,9534,-9536,9299,9535,9536,-9295,9368,9295,9537,-9540,9310,9318,9538,-9525,9320,9368,9539,-9542,9538\n        ,9318,9353,-9541,9297,9320,9541,9563,-9299,9317,9298,9563,-9583,9317,9582,-9544,9317,9543,9545,-9314,9546,6855,6630\n        ,-6637,6867,6864,9548,-9548,6606,6609,9549,-9563,6609,6637,9550,-9550,6638,9551,9581,-6605,6638,6639,9552,-9552,6592\n        ,9638,9552,-6640,9553,9424,9425,-9817,9305,9529,9530,-9305,9331,9330,9554,-9556,9454,9525,9524,-9453,9527,9526,9453\n        ,-9457,9528,9527,9456,-9459,9529,9528,9458,-9461,9462,9531,9530,-9464,9466,9661,9532,-9556,9469,9534,9533,-9466,9471\n        ,9535,9534,-9470,9472,9536,9535,-9472,9539,9537,9474,-9474,9524,9538,9476,-9453,9481,9556,9531,-9463,9485,9541,9539\n        ,-9474,9476,9538,9540,-9488,9556,9481,9572,-9572,9563,9541,9485,-9565,9487,9540,9542,-9491,9759,9762,9763,-9761,9543\n        ,9582,9583,-9506,9776,9777,9544,-9507,9545,9543,9505,-9513,9778,9779,9546,-9514,9514,9547,9548,-9516,9561,9562,9549\n        ,-9517,9516,9549,9550,-9518,9580,9581,9551,-9519,9518,9551,9552,-9520,9638,9639,9519,-9553,9553,9816,9817,-9577,9530\n        ,9529,9460,-9464,9554,9557,9520,-9522,9555,9554,9521,-9467,9353,9352,9542,-9541,9495,9494,9499,-9499,9600,9598,9853\n        ,-9853,9329,9531,9851,-9851,9479,9616,9618,-9620,9467,9466,-9522,9532,9331,-9556,9573,9495,9498,-9573,9572,9498,9558\n        ,-9572,9498,9499,9559,-9559,9560,9559,9499,-9509,9560,9508,9515,-9562,9515,9548,9562,-9562,6864,6606,9562,-9549,9570\n        ,9569,9520,-9558,9853,9854,9602,-9600,9598,9597,9854,-9854,9526,9525,9454,-9454,9361,9525,9526,-9312,9536,9537,9295\n        ,-9295,9474,9537,9536,-9473,9575,9503,9636,-9636,9607,9606,9608,-9610,9607,9609,9594,-9611,9517,9550,9581,-9581,6604\n        ,9581,9550,-6638,9564,9583,9582,-9564,9558,9559,9588,-9588,9588,9559,9849,-9859,9604,9858,9849,-9579,9559,9560,9590\n        ,-9590,9591,9849,9559,-9590,9590,9560,9561,-9594,9561,9516,9592,-9594,9516,9517,9594,-9593,9596,9558,9856,-9856,9855\n        ,9856,9577,-9604,9597,9571,9558,-9597,9598,9556,9571,-9598,9531,9556,9598,-9601,9531,9600,9852,-9852,9557,9554,9601\n        ,-9600,9602,9570,9557,-9600,9602,9603,9577,-9571,9578,9577,9605,-9605,9857,9605,9577,-9857,9579,9578,9606,-9608,9608\n        ,9606,9578,-9850,9579,9607,9610,-9581,9517,9580,9610,-9595,9852,9853,9599,-9602,9851,9852,9601,-9555,9850,9851,9554\n        ,-9331,9777,6635,-9545,9611,9775,9776,-9507,9507,9612,9672,-9515,9507,9494,9613,-9613,9494,9495,9614,-9614,9573,9615\n        ,9614,-9496,9573,9480,9616,-9616,9617,9618,-9462,9619,9618,9617,-9460,9620,9619,9459,-9458,9621,9620,9457,-9456,9622\n        ,9623,-9631,9624,9623,9622,-9476,9624,9475,9486,-9626,9625,9486,9491,-9627,9627,9761,9758,-9758,9775,9611,9628,-9775\n        ,9778,9611,-9507,6636,9629,9513,-9547,9630,9623,9621,-9456,9461,9618,9616,-9481,9459,9617,9463,-9461,9642,9568,9649\n        ,-9651,9568,9482,9648,-9650,9482,9464,9647,-9649,9485,9653,9565,-9565,9576,9634,9633,-9554,9575,9635,9634,-9577,9585\n        ,9637,9636,-9504,9634,9639,9638,-9634,9635,9640,9639,-9635,9636,9641,9640,-9636,9642,9641,9636,-9638,9637,9567,9568\n        ,-9643,9469,9644,9643,-9472,9645,9644,9469,-9466,9646,9661,9466,-9468,9647,9646,-9468,9648,9647,9467,-9633,9649,9648\n        ,9632,-9632,9650,9649,9631,-9587,9651,9650,9586,-9503,9652,9651,9502,-9511,9519,9639,9652,-9511,9654,9484,9566,-9656\n        ,9655,9566,9585,-9657,9585,9503,9657,-9657,9575,9658,9657,-9504,9511,9576,9817,-9513,9654,9470,-9485,9653,9660,-9660\n        ,9660,9472,9471,9643,-9660,9629,9628,-9612,9758,9761,9762,-9760,9452,9622,9630,9453,-9455,9565,9653,9654,-9656,9473\n        ,9660,9653,-9486,9472,9660,9473,-9475,9646,9645,9465,-9662,9465,9533,9532,-9662,9628,9667,9773,-9775,9667,9670,-9672\n        ,6636,6868,-9630,9493,9492,-9669,9612,9613,9497,-9663,9523,9669,-9498,6868,9670,9667,9628,-9630,6865,6610,9678,-9688\n        ,9688,6640,6869,-9734,9753,9754,9676,-9718,9705,9696,9695,-9705,9772,9681,9703,-9772,9700,9685,9705,-9705,9713,9682\n        ,9703,-9712,9718,9683,9693,-9717,9694,9677,9720,-9720,9663,9720,9677,-9665,9699,9679,9706,-9722,9706,9687,9722,-9722\n        ,9750,9712,9680,-9750,9702,9766,9767,-9684,9693,9768,9769,-9709,9707,9674,9730,-9730,9730,9674,9732,-9732,9672,9664\n        ,9677,-9757,6865,9687,9706,-9352,9749,9680,9670,-6869,9689,9668,9492,-9708,9689,9673,9523,-9669,9752,9753,9717,-9716\n        ,9773,9667,9681,-9773,9669,9523,9673,-9693,9662,9764,9765,-9685,9694,9676,9754,-9756,9694,9755,9756,-9678,9696,9686\n        ,9697,-9696,9690,9737,9738,-9692,9736,9737,9690,-9710,9688,9733,9734,-9699,9698,9734,9735,-9702,9750,9751,9675,-9713\n        ,9703,9682,9770,-9772,9701,9735,9736,-9710,9706,9679,9350,-9352,9492,9665,9674,-9708,9770,9682,9708,-9770,9671,9670\n        ,9680,-9711,9671,9710,9681,-9668,9703,9681,9710,-9712,9710,9680,9712,-9712,9712,9675,9713,-9712,9708,9682,9713,-9715\n        ,9713,9675,9715,-9715,9714,9716,9693,-9709,9715,9717,9716,-9715,9717,9676,9718,-9717,9720,9684,9702,-9720,9702,9683\n        ,9718,-9720,9718,9676,9694,-9720,9663,9662,9684,-9721,9705,9685,9699,-9722,9687,9678,9723,-9723,9723,9686,9696,-9723\n        ,9721,9722,9696,-9706,9752,9715,9675,-9752,9724,9691,9738,-9740,9739,9740,9725,-9725,9514,9725,9740,-9548,9684,9765\n        ,9766,-9703,9692,9673,9727,-9727,9683,9767,9768,-9694,9727,9673,9689,-9729,9728,9689,9707,-9730,9732,9674,9665,-9667\n        ,9733,6869,6863,-9742,9734,9733,9741,-9743,9735,9734,9742,-9744,9736,9735,9743,-9745,9744,9745,9737,-9737,9738,9737\n        ,9745,-9747,9739,9738,9746,-9748,9747,9748,9740,-9740,9547,9740,9748,-6871,6863,9350,9679,-9742,9742,9741,9679,-9700\n        ,9743,9742,9699,9685,-9701,9744,9743,9700,-9705,9704,9695,9745,-9745,9746,9745,9695,-9698,9747,9746,9697,9686,-9724\n        ,9723,9678,9748,-9748,9748,9678,6610,-6871,9688,9749,6868,-6641,9698,9750,9749,-9689,9698,9701,9751,-9751,9709,9752\n        ,9751,-9702,9709,9690,9753,-9753,9690,9691,9754,-9754,9755,9754,9691,-9725,9756,9755,9724,-9726,9514,9672,9756,-9726\n        ,9612,9664,-9673,9627,9757,9666,-9666,6631,9760,9763,-6867,9761,9627,9626,-9492,9491,9490,9762,-9762,9542,9763,9762\n        ,-9491,6866,9763,9542,-9353,9764,9669,9692,-9766,9766,9765,9692,-9727,9767,9766,9726,-9728,9768,9767,9727,-9729,9769\n        ,9768,9728,-9730,9730,9770,9769,-9730,9771,9770,9730,-9732,9732,9772,9771,-9732,9666,9773,9772,-9733,9774,9773,9666\n        ,-9758,9758,9775,9774,-9758,9775,9758,9759,-9777,9759,9760,9777,-9777,6870,6867,-9548,9329,9850,9211,-9213,9299,9294\n        ,9201,-9203,9638,6871,6854,-9634,9506,9544,9779,-9779,6683,9779,9544,-6636,9363,9848,9321,-9324,9847,9848,9363,-9381\n        ,9405,9845,9846,-9310,9324,9844,9845,-9406,9396,9841,9842,-9396,9840,9841,9396,-9398,9398,9839,9840,-9398,9836,9837\n        ,9392,-9394,9425,9785,9784,-9314,9786,9785,9425,-9425,9789,9788,9783,-9441,9300,9301,9792,-9794,9783,9788,9795,-9795\n        ,9796,9797,9784,-9788,9798,9787,9315,-9800,9800,9314,9316,-9802,9802,9803,9781,-9315,9804,9805,9315,-9782,9301,9782\n        ,9807,-9807,9797,9808,9296,-9785,9808,9809,9788,-9297,9352,9780,9811,-9811,9780,9300,9812,-9812,9316,9352,9810,-9814\n        ,9782,9783,9814,-9816,9313,9816,-9426,9817,9816,9545,-9513,9313,9545,-9817,9633,9424,-9554,9811,9812,9813,-9811,9812\n        ,9300,9316,-9814,9300,9793,9801,-9317,9793,9792,9800,-9802,9792,9301,9314,-9801,9301,9806,9802,-9315,9806,9807,9803\n        ,-9803,9807,9782,9781,-9804,9782,9815,9804,-9782,9815,9814,9805,-9805,9814,9783,9315,-9806,9783,9794,9799,-9316,9794\n        ,9795,9798,-9800,9795,9788,9787,-9799,9788,9809,9796,-9788,9809,9808,9797,-9797,9818,9070,9078,-9820,9819,9078,9069\n        ,-9821,9821,9820,9069,-8603,8602,9068,9822,-9822,9067,9823,9822,-9069,9077,9824,9823,-9068,9824,9077,9079,-9836,9072\n        ,9901,9835,-9080,9073,9075,9826,-9826,9075,9074,9827,-9827,9827,9074,9076,-9829,9818,9357,9833,-9835,9383,9384,9830\n        ,-9282,9831,9830,9384,-9410,9832,9831,9409,-9386,9833,9832,9385,-9387,9829,9834,9833,-9387,9829,9071,-9835,9849,9591\n        ,-9609,9587,9857,9856,-9559,9418,9244,-9420,9246,9418,9419,-9408,9337,9184,-9182,9328,9373,9406,9200,-9208,9629,9611\n        ,-9514,9644,9468,9470,-9644,9638,6592,-6872,9658,9575,-9577,9658,9576,-9512,9294,9295,9376,-9206,9374,9204,-9211,9305\n        ,9304,9212,-9190,9381,9191,-9193,6646,6645,-6857,6646,6856,-6861,9786,6860,6856,-9427,6806,6877,-6875,6806,6807,-6878\n        ,7911,6874,6877,-7944,7783,7983,-7988,7859,7982,7983,-7784,9076,9829,-9829,9076,9071,-9830,9044,8604,9071,-9077,9778\n        ,9513,-9612,6631,9777,-9761,6631,6635,-9778,6683,6855,9546,-9780,9662,9663,-9665,7891,9859,7903,-7891,7892,9861,9860\n        ,-7985,7893,9862,9861,-7893,9862,7893,9894,-9894,9863,9893,9894,-7895,7895,9864,9863,-7895,9865,9864,7895,-7897,7992\n        ,9866,9865,-7897,7897,9867,9866,-7993,7898,9868,9867,-7898,7900,9870,9869,-7900,7746,9870,7902,-7745,7902,9870,7900\n        ,-7746,7740,7742,7733,-9872,9872,9871,7733,-7785,9873,9872,7784,-7871,7856,9874,9873,-7871,9874,7856,9892,-9892,9892\n        ,7823,9875,-9892,7822,9876,9875,-7824,9877,9876,7822,-7822,7821,7993,9878,-9878,7993,7878,9879,-9879,9880,9879,7878\n        ,-7874,7793,7734,9880,-7874,7737,9871,7794,-7739,7737,7740,-9872,7794,7830,7703,-7739,7863,9885,9884,-7855,9886,9885\n        ,7863,-7817,7858,9896,9895,-7858,7982,9897,9896,-7859,7840,9897,7982,-7860,7929,7812,-7810,9899,9898,7829,-7842,9901\n        ,9072,9073,-9826,9336,9902,9901,-9826,9903,9902,9336,-9336,9904,9903,9335,-9413,9905,9904,9412,-9335,9906,9905,9334\n        ,-9333,9907,9906,9332,-9390,9908,9907,9389,-9346,9909,9908,9345,-9347,9910,9909,9346,-9309,9911,9910,9308,-9405,9912\n        ,9911,9404,-9308,9913,9379,9912,-9308,9378,9913,9307,-9303,9914,9913,9378,-9366,9322,9319,-9915,9322,9914,-9366,7327\n        ,7710,7709,-7329,7711,7304,-7708,7305,7861,-7863,9322,9365,9915,-9307,9916,9915,9365,-9379,9917,9916,9378,-9303,9918\n        ,9917,9302,-9404,9919,9918,9403,-9304,9343,9920,9919,-9304,9921,9920,9343,-9345,9922,9921,9344,-9389,9923,9922,9388\n        ,-9334,9338,9924,9923,-9334,9925,9924,9338,-9412,9339,9926,9925,-9412,9348,9926,9339,-9350,5882,5884,5877,-5881,9927\n        ,9928,9929,-9931,9930,9929,9931,-9933,9932,9931,9933,-9935,9934,9933,9935,-9937,9936,9935,9937,-9939,9938,9937,9939\n        ,-9941,9940,9939,9941,-9943,9942,9941,9943,-9945,9944,9943,9945,-9947,9946,9945,9947,-9949,9948,9947,9949,-9951,9950\n        ,9949,9951,-9953,9952,9951,9953,-9955,9954,9953,9955,-9957,9956,9955,9957,-9959,9958,9957,9928,-9928,9960,9929,-9929\n        ,9960,9931,-9930,9960,9933,-9932,9960,9935,-9934,9960,9937,-9936,9960,9939,-9938,9960,9941,-9940,9960,9943,-9942,9960\n        ,9945,-9944,9960,9947,-9946,9960,9949,-9948,9960,9951,-9950,9960,9953,-9952,9960,9955,-9954,9960,9957,-9956,9960,9928\n        ,-9958,9961,9962,9963,-9965,9965,9966,9967,-9969,9969,9970,9971,-9973,9973,9974,9975,-9977,9977,9978,9979,-9981,9981\n        ,9966,9982,-9984,9984,9985,9986,-9988,9988,9985,9989,-9991,9991,9992,9993,-9983,9994,9976,9975,-9996,9995,9996,9978\n        ,-9995,9997,9998,9964,-9964,9999,10000,10001,-10003,9944,9990,9989,-9943,9942,9989,9984,-9941,9940,9984,9987,-9939\n        ,9987,10003,9936,-9939,9952,10002,10001,-9951,9950,10001,10004,-9949,9948,10004,10005,-9947,9946,10005,9990,-9945\n        ,10007,9962,9961,10006,-10011,9972,9986,9985,-9975,9970,9965,9968,-9972,9969,9972,9974,-9974,10007,10008,9968,-9968\n        ,9971,10008,9986,-9973,9981,9963,9962,-9968,9975,9988,10009,-9996,9996,9995,10009,-10001,9983,9997,9963,-9982,9998\n        ,9997,9993,-9993,9974,9985,9988,-9976,9979,10000,9999,-9981,10004,10001,10000,-10010,9988,9990,10005,-10010,10006\n        ,10003,9986,-10011,10011,9959,9973,-9977,10011,9976,9994,-10013,10012,9994,9978,-9978,10013,10014,9961,-9965,10015\n        ,10016,10017,-10019,10019,10020,10021,-10023,10023,10024,10025,-10027,10027,10028,9977,-9981,10029,10030,10031,-10019\n        ,10032,10033,10034,-10036,10036,10035,10037,-10039,9991,10031,10039,-9993,10040,10041,10023,-10027,10028,10042,10041\n        ,-10041,10043,10013,9964,-9999,10044,10045,9999,-10003,9927,9930,10036,-10039,9930,9932,10032,-10037,9932,9934,10033\n        ,-10033,9936,10003,10033,-9935,9952,9954,10044,-10003,9954,9956,10046,-10045,9956,9958,10047,-10047,9958,9927,10038\n        ,-10048,10006,9961,10014,10048,-10052,10035,10034,10020,-10025,10022,10021,10016,-10016,10024,10020,10019,-10026,10016\n        ,10049,10048,-10018,10021,10020,10034,-10050,10029,10017,10014,-10014,10023,10041,10050,-10038,10050,10041,10042,-10046\n        ,10030,10029,10013,-10044,10039,10043,9998,-9993,10024,10023,10037,-10036,10027,9980,9999,-10046,10045,10044,10046\n        ,-10051,10037,10050,10047,-10039,10034,10003,10006,-10052,10011,10026,10025,-9960,10040,10026,10011,-10013,10028,10040\n        ,10012,-9978,10008,10010,-9987,9981,9967,-9967,10008,10007,-10011,9971,9968,-10009,9962,10007,-9968,9983,9993,-9998\n        ,10000,9979,-9997,9982,9993,-9984,9978,9996,-9980,9989,9985,-9985,10004,10009,-10006,9987,9986,-10004,10049,10034\n        ,-10052,10029,10018,-10018,10049,10051,-10049,10021,10049,-10017,10014,10017,-10049,10030,10043,-10040,10045,10042\n        ,-10028,10031,10030,-10040,10027,10042,-10029,10036,10032,-10036,10046,10047,-10051,10033,10003,-10035,10052,10053\n        ,10054,-10056,10056,10057,10058,-10060,10060,10061,10062,-10064,10061,10060,10064,-10066,10066,10067,10068,-10070\n        ,10070,10071,10072,-10074,10074,10055,10054,-10076,10076,10077,10078,-10080,10080,10081,10079,-10083,10083,10084,10067\n        ,-10067,10073,10072,10085,-10087,10075,10054,10087,-10089,10089,10090,10091,-10093,10086,10085,10093,-10095,10095\n        ,10096,10097,-10099,10099,10100,10101,-10103,10103,10104,10105,-10107,10107,10108,10109,-10111,10111,10112,10113,-10115\n        ,10115,10116,10117,-10119,10119,10120,10121,-10123,10123,10124,10125,-10127,10127,10128,10129,-10131,10131,10130,10129\n        ,-10133,10133,10134,10135,-10117,10117,10116,10135,-10137,10122,10121,10137,-10139,10125,10139,10140,-10142,10126\n        ,10125,10141,-10143,10143,10126,10142,-10145,10134,10145,10146,-10136,10136,10135,10146,-10148,10138,10137,10148,-10150\n        ,10141,10140,10150,-10152,10152,10153,10154,-10156,10147,10146,10156,-10158,10149,10148,10158,-10160,10150,10160,10161\n        ,-10152,10162,10151,10161,-10164,10164,10162,10163,-10166,10166,10164,10165,-10168,10159,10158,10168,-10170,10160\n        ,10170,10171,-10162,10163,10161,10171,-10173,10165,10163,10172,-10174,10167,10165,10173,-10175,10175,10176,10177,-10179\n        ,10179,10177,10180,-10182,10181,10180,10182,-10184,10184,10183,10182,-10186,10186,10107,10110,-10188,10188,10186,10187\n        ,-10190,10190,10191,10108,-10108,10192,10190,10107,-10187,10193,10192,10186,-10189,10153,10188,10189,-10195,10195\n        ,10196,10191,-10191,10128,10197,10192,-10194,10190,10192,10197,-10196,10152,10193,10188,-10154,10129,10128,10193,-10153\n        ,10198,10197,10199,-10201,10127,10199,10197,-10129,10201,10202,10196,-10196,10203,10075,10088,-10205,10205,10206,10207\n        ,-10209,10209,10210,10211,-10213,10071,10213,10214,-10073,10072,10214,10215,-10086,10155,10132,10129,-10153,10216\n        ,10194,10167,-10175,10217,10209,10212,-10219,10219,10220,10221,-10223,10223,10224,10225,-10227,10227,10228,10229,-10231\n        ,10228,10231,10232,-10230,10233,10234,10235,-10237,10100,10237,10238,-10102,10226,10225,10239,-10241,10136,10137,10121\n        ,-10118,10147,10148,10137,-10137,10157,10158,10148,-10148,10241,10168,10158,-10158,10242,10243,10244,-10246,10246\n        ,10091,10090,-10248,10105,10245,10244,-10107,10248,10119,10122,-10140,10138,10140,10139,-10123,10149,10150,10140,-10139\n        ,10159,10160,10150,-10150,10169,10170,10160,-10160,10221,10217,10249,-10223,10220,10209,10217,-10222,10250,10251,10252\n        ,-10254,10254,10255,10256,-10258,10258,10259,10236,-10261,10258,10260,10087,-10262,10262,10263,10264,-10266,10266\n        ,10267,10268,-10270,10270,10271,10272,-10274,10065,10064,10200,-10084,10274,10093,10127,-10131,10275,9966,9965,-10277\n        ,10277,10176,10276,-9966,10278,10279,10280,-10282,10282,10283,10257,-10112,10112,10111,10257,-10257,9982,9966,10275\n        ,-10285,10157,10156,10285,-10242,10156,10145,10286,-10286,10286,10145,10251,-10251,10115,10113,10112,-10288,10255\n        ,10288,10289,-10257,10290,10291,10292,-10294,10291,10294,10295,-10293,10295,10294,10296,-10298,10298,10299,10064,-10061\n        ,10063,10300,10298,-10061,10056,10059,10301,-10303,10303,10074,10075,-10204,10082,10079,10078,-10305,10093,10084,10199\n        ,-10128,10200,10064,10299,-10199,10199,10084,10083,-10201,10299,10305,10306,-10202,10307,10066,10069,-10309,10067\n        ,10214,10213,-10069,10215,10214,10067,-10085,10264,10263,10309,-10311,10311,10282,10111,-10115,10281,10311,10114,-10313\n        ,10313,10314,10315,-10317,10283,10282,10236,-10260,10279,10236,10282,-10281,10280,10282,10311,-10282,10279,10278,10233\n        ,-10237,10052,10058,10057,-10318,10059,10058,10077,-10077,10269,10053,10318,-10267,10319,10320,10269,-10269,10321\n        ,10322,10323,-10325,10324,10323,10325,-10327,10327,10328,10326,-10326,10329,10330,10331,-10333,10333,10329,10332,-10335\n        ,10335,10254,10336,-10338,10255,10254,10335,-10339,10251,10288,10339,-10253,10259,10258,10329,-10334,10336,10283,10259\n        ,-10334,10254,10257,10283,-10337,10340,10267,10341,-10343,10343,10341,10267,-10267,10344,10343,10266,-10319,10317\n        ,10057,10345,-10347,10057,10056,10347,-10346,10056,10302,10348,-10348,10349,10350,10327,-10352,10352,10353,10354,-10356\n        ,10354,10353,10356,-10358,10358,10359,10323,-10323,10359,10360,10325,-10324,10360,10351,10327,-10326,10293,10292,10352\n        ,-10350,10264,10310,10351,-10361,10265,10264,10360,-10360,10361,10265,10359,-10359,10262,10341,10343,-10264,10263\n        ,10343,10344,-10310,10291,10290,10346,-10346,10290,10309,10344,-10347,10291,10345,10347,-10295,10294,10347,10348,-10297\n        ,10297,10296,10348,-10357,10295,10297,10356,-10354,10292,10295,10353,-10353,10350,10362,10328,-10328,10363,10355,10354\n        ,-10365,10364,10354,10357,-10366,10366,10367,10368,-10370,10370,10371,10369,-10369,10372,10373,10374,-10376,10376\n        ,10377,10374,-10374,10102,10378,10379,-10315,10380,10381,10314,-10380,10382,10383,10384,-10386,10385,10384,10386,-10388\n        ,10387,10386,10388,-10390,10390,10391,10392,-10394,10394,10395,10367,-10367,10089,10366,10369,-10091,10090,10369,10371\n        ,-10248,10273,10272,10396,-10376,10101,10238,10374,-10378,10315,10397,10398,-10317,10243,10385,10387,-10245,10244\n        ,10387,10389,-10107,10106,10389,10392,-10104,10237,10399,10400,-10271,10246,10271,10401,-10403,10092,10091,10403,-10405\n        ,10205,10092,10404,-10406,10406,10407,10408,-10105,10245,10105,10409,-10411,10242,10245,10410,-10412,10412,10242,10411\n        ,-10414,10100,10414,10399,-10238,10415,10080,10082,-10417,10120,10119,10417,-10419,10419,10420,10204,-10235,10421\n        ,10120,10418,-10423,10119,10248,10423,-10418,10124,10123,10424,-10426,10234,10426,10427,-10420,10428,10303,10203,-10430\n        ,10416,10082,10304,-10431,10430,10368,10367,-10417,10428,10370,10368,-10431,10420,10372,10431,-10430,10376,10373,10419\n        ,-10428,10432,10379,10378,-10434,10383,10434,10435,-10423,10386,10384,10418,-10418,10423,10388,10386,-10418,10393\n        ,10388,10423,-10426,10395,10436,10080,-10416,10102,10377,10376,-10379,10433,10378,10427,-10427,10437,10281,10312,-10439\n        ,10435,10439,10437,-10439,10380,10439,10435,-10435,10440,10381,10380,-10435,10441,10316,10398,-10443,10443,10444,10313\n        ,-10442,10099,10102,10314,-10314,10444,10445,10099,-10314,10058,10052,10055,-10078,10077,10055,10074,-10079,10271\n        ,10246,10247,-10273,10309,10290,10293,-10311,10074,10303,10304,-10079,10053,10052,10317,-10319,10318,10317,10346,-10345\n        ,10310,10293,10349,-10352,10247,10371,10396,-10273,10091,10246,10402,-10404,10303,10428,10430,-10305,10088,10087,10260\n        ,-10236,10104,10103,10446,-10407,10096,10123,10447,-10098,10447,10123,10126,-10144,10144,10142,10164,-10167,10204\n        ,10088,10235,-10235,10185,10448,10449,-10185,10261,10087,10054,-10054,10237,10270,10273,-10239,10330,10320,10319,-10332\n        ,10258,10261,10330,-10330,10372,10375,10396,-10432,10393,10392,10389,-10389,10238,10273,10375,-10375,10103,10392,10391\n        ,-10447,10271,10270,10400,-10402,10104,10408,10409,-10106,10203,10204,10420,-10430,10124,10425,10423,-10249,10373\n        ,10372,10420,-10420,10390,10393,10425,-10425,10125,10124,10248,-10140,10312,10115,10118,-10439,10120,10421,10117,-10122\n        ,10412,10450,10243,-10243,10113,10115,10312,-10115,10256,10289,10287,-10113,10288,10255,10338,-10340,10434,10383,10382\n        ,-10441,10450,10382,10385,-10244,10412,10413,10442,-10399,10438,10421,10422,-10436,10383,10422,10418,-10385,10289\n        ,10288,10134,-10134,10134,10288,10251,-10146,10362,10350,10355,-10364,10350,10349,10352,-10356,10370,10428,10429,-10432\n        ,10371,10370,10431,-10397,10287,10133,10116,-10116,10455,10081,10080,-10437,10092,10205,10208,-10090,10436,10395,10394\n        ,-10208,10089,10208,10394,-10367,10367,10395,10415,-10417,10224,10223,10227,-10231,10151,10162,10142,-10142,10390\n        ,10424,10123,-10452,10452,10453,10348,-10303,10062,10059,10076,-10064,10063,10076,10079,-10301,10300,10079,10081,-10299\n        ,10062,10061,10301,-10060,10454,10305,10081,-10456,10302,10301,10308,-10453,10210,10356,10453,-10212,10175,10168,10241\n        ,-10457,10179,10170,10169,-10179,10172,10171,10181,-10184,10173,10172,10183,-10185,10174,10173,10184,-10450,10132\n        ,10155,10223,-10227,10223,10155,10154,-10228,10227,10154,10216,-10229,10216,10174,10231,-10229,10131,10132,10226,-10241\n        ,10181,10171,10170,-10180,10275,10286,10250,-10285,10241,10285,10276,-10457,10285,10286,10275,-10277,10178,10169,10168\n        ,-10176,10196,10457,10458,-10192,10098,10108,10191,-10459,10108,10097,10447,-10110,10143,10144,10187,-10111,10166\n        ,10167,10194,-10190,10110,10109,10447,-10144,10189,10187,10144,-10167,10202,10459,10457,-10197,10306,10454,10459,-10203\n        ,10095,10098,10458,-10461,10096,10461,10462,-10464,10457,10464,10460,-10459,10459,10465,10464,-10458,10454,10455,10465\n        ,-10460,10070,10466,10218,-10072,10069,10068,10453,-10453,10218,10212,10213,-10072,10212,10211,10068,-10214,10467\n        ,10400,10399,-10469,10411,10410,10469,-10471,10413,10411,10470,-10472,10443,10442,10472,-10474,10468,10399,10414,-10475\n        ,10445,10444,10473,-10475,10475,10401,10400,-10468,10442,10413,10471,-10473,10337,10336,10333,-10335,10466,10249,10217\n        ,-10219,10267,10340,10476,-10269,10268,10476,10477,-10320,10331,10478,10479,-10333,10332,10479,10480,-10335,10481\n        ,10482,10335,-10338,10482,10483,10338,-10336,10484,10485,10252,-10340,10485,10486,10253,-10253,10209,10487,10488,-10211\n        ,10220,10219,10487,-10210,10265,10361,10489,-10263,10490,9991,9982,-10285,10262,10489,10342,-10342,10477,10478,10331\n        ,-10320,10483,10484,10339,-10339,10486,10490,10284,-10254,10480,10481,10337,-10335,10153,10194,10216,-10155,10448\n        ,10232,10231,-10450,10433,10278,10281,-10433,10491,10492,10404,-10404,10493,10491,10403,-10403,10492,10494,10405,-10405\n        ,10494,10495,10206,-10406,10496,10460,10464,-10498,10207,10464,-10466,10462,10095,10460,-10497,10493,10402,10401,-10476\n        ,10463,10469,10409,-10409,10398,10397,10450,-10413,10450,10397,10440,-10383,10315,10381,10440,-10398,10498,10499,10500\n        ,-10502,10502,10503,10504,-10506,10506,10507,10508,-10510,10509,10510,10511,-10507,10512,10513,10514,-10516,10070\n        ,10073,10516,-10518,10518,10519,10500,-10500,10520,10521,10522,-10524,10524,10525,10521,-10527,10527,10512,10515,-10529\n        ,10073,10086,10529,-10517,10519,10530,10531,-10501,10532,10533,10534,-10536,10086,10094,10536,-10530,10537,10538,10539\n        ,-10541,10541,10542,10543,-10545,10545,10546,10547,-10549,10549,10550,10551,-10553,10553,10554,10555,-10557,10557\n        ,10558,10559,-10561,10561,10562,10563,-10565,10565,10566,10567,-10569,10569,10130,10570,-10572,10131,10572,10570,-10131\n        ,10573,10560,10574,-10576,10559,10576,10574,-10561,10562,10577,10578,-10564,10567,10579,10580,-10582,10566,10582,10579\n        ,-10568,10583,10584,10582,-10567,10575,10574,10585,-10587,10576,10587,10585,-10575,10577,10588,10589,-10579,10579\n        ,10590,10591,-10581,10592,10593,10594,-10596,10587,10596,10597,-10586,10588,10598,10599,-10590,10591,10590,10600,-10602\n        ,10602,10603,10600,-10591,10604,10605,10603,-10603,10606,10607,10605,-10605,10598,10608,10609,-10600,10601,10600,10610\n        ,-10612,10603,10612,10610,-10601,10605,10613,10612,-10604,10607,10614,10613,-10606,10615,10616,10617,-10619,10619\n        ,10620,10621,-10618,10620,10622,10623,-10622,10624,10625,10623,-10623,10626,10627,10550,-10550,10628,10629,10627,-10627\n        ,10630,10549,10552,-10632,10632,10626,10549,-10631,10633,10628,10626,-10633,10595,10634,10629,-10629,10635,10630,10631\n        ,-10637,10571,10633,10632,-10638,10630,10635,10637,-10633,10592,10595,10628,-10634,10570,10592,10633,-10572,10638\n        ,10639,10640,-10638,10569,10571,10637,-10641,10641,10635,10636,-10643,10643,10644,10530,-10520,10645,10646,10647,-10649\n        ,10649,10650,10651,-10653,10517,10516,10653,-10655,10516,10529,10655,-10654,10593,10592,10570,-10573,10656,10614,10607\n        ,-10635,10657,10658,10650,-10650,10219,10222,10659,-10661,10661,10662,10663,-10665,10665,10666,10667,-10669,10668\n        ,10667,10669,-10671,10671,10672,10673,-10675,10544,10543,10675,-10677,10662,10240,10239,-10664,10576,10559,10563,-10579\n        ,10587,10576,10578,-10590,10596,10587,10589,-10600,10677,10596,10599,-10610,10678,10679,10680,-10682,10682,10683,10535\n        ,-10535,10547,10546,10680,-10680,10684,10581,10562,-10562,10577,10562,10581,-10581,10588,10577,10580,-10592,10598\n        ,10588,10591,-10602,10608,10598,10601,-10612,10659,10222,10249,-10658,10660,10659,10657,-10650,10685,10686,10687,-10689\n        ,10689,10690,10691,-10693,10693,10694,10672,-10696,10693,10696,10531,-10695,10697,10698,10699,-10701,10701,10702,10703\n        ,-10705,10705,10706,10707,-10709,10510,10527,10639,-10512,10274,10130,10569,-10537,10709,10710,10015,-10019,10618\n        ,10711,10710,-10713,10713,10714,10715,-10717,10717,10553,10690,-10719,10556,10691,10690,-10554,10031,10719,10709,-10019\n        ,10596,10677,10720,-10598,10597,10720,10721,-10587,10721,10685,10688,-10587,10557,10722,10556,-10556,10692,10691,10723\n        ,-10725,10725,10726,10727,-10729,10728,10727,10729,-10731,10729,10731,10732,-10731,10733,10506,10511,-10735,10507\n        ,10506,10733,-10736,10502,10736,10737,-10504,10738,10643,10519,-10519,10525,10739,10522,-10522,10536,10569,10640,-10529\n        ,10639,10638,10734,-10512,10640,10639,10527,-10529,10734,10641,10740,-10742,10513,10512,10742,-10744,10515,10514,10654\n        ,-10654,10655,10528,10515,-10654,10699,10744,10745,-10701,10746,10554,10553,-10718,10714,10747,10554,-10747,10748\n        ,10749,10750,-10752,10718,10695,10672,-10718,10716,10715,10717,-10673,10715,10714,10746,-10718,10716,10672,10671,-10714\n        ,10498,10752,10505,-10505,10503,10520,10523,-10505,10702,10701,10753,-10502,10754,10703,10702,-10756,10321,10756,10757\n        ,-10323,10756,10758,10759,-10758,10760,10759,10758,-10762,10762,10763,10764,-10766,10766,10767,10763,-10763,10768\n        ,10769,10770,-10690,10692,10771,10768,-10690,10688,10687,10772,-10725,10695,10766,10762,-10694,10770,10766,10695,-10719\n        ,10689,10770,10718,-10691,10340,10342,10773,-10705,10774,10701,10704,-10774,10775,10753,10701,-10775,10752,10776,10777\n        ,-10506,10505,10777,10778,-10503,10502,10778,10779,-10737,10780,10781,10760,-10783,10783,10784,10785,-10787,10785\n        ,10787,10788,-10787,10358,10322,10757,-10790,10789,10757,10759,-10791,10790,10759,10760,-10782,10726,10780,10783,-10728\n        ,10699,10790,10781,-10745,10698,10789,10790,-10700,10361,10358,10789,-10699,10697,10700,10774,-10774,10700,10745,10775\n        ,-10775,10725,10776,10775,-10746,10776,10725,10728,-10778,10728,10730,10778,-10778,10730,10732,10779,-10779,10731\n        ,10788,10779,-10733,10729,10786,10788,-10732,10727,10783,10786,-10730,10782,10760,10761,-10792,10792,10793,10785,-10785\n        ,10793,10794,10787,-10786,10795,10796,10797,-10799,10799,10797,10796,-10801,10801,10802,10803,-10805,10805,10804,10803\n        ,-10807,10542,10751,10807,-10809,10809,10807,10751,-10811,10811,10812,10813,-10815,10812,10815,10816,-10814,10815\n        ,10817,10818,-10817,10819,10820,10821,-10823,10823,10795,10798,-10825,10532,10535,10796,-10796,10535,10683,10800,-10797\n        ,10706,10802,10825,-10708,10543,10806,10803,-10676,10750,10749,10826,-10828,10681,10680,10815,-10813,10680,10546,10817\n        ,-10816,10546,10545,10821,-10818,10676,10705,10828,-10830,10682,10830,10831,-10709,10533,10832,10833,-10535,10645\n        ,10834,10832,-10534,10835,10548,10836,-10838,10679,10838,10839,-10548,10678,10840,10838,-10680,10841,10842,10840,-10679\n        ,10544,10676,10829,-10844,10844,10845,10525,-10525,10564,10846,10847,-10562,10848,10674,10644,-10850,10850,10851,10846\n        ,-10565,10561,10847,10852,-10685,10568,10853,10854,-10566,10674,10848,10855,-10857,10857,10858,10643,-10739,10845\n        ,10859,10739,-10526,10859,10845,10798,-10798,10857,10859,10797,-10800,10849,10858,10860,-10802,10805,10855,10848,-10805\n        ,10861,10862,10808,-10808,10814,10851,10863,-10865,10816,10847,10846,-10814,10852,10847,10816,-10819,10820,10853,10852\n        ,-10819,10824,10844,10524,-10866,10542,10808,10805,-10807,10862,10856,10855,-10809,10866,10867,10747,-10715,10863\n        ,10867,10866,-10869,10809,10864,10863,-10869,10869,10864,10809,-10811,10870,10871,10826,-10750,10541,10748,10751,-10543\n        ,10504,10523,10499,-10499,10523,10522,10518,-10500,10708,10707,10683,-10683,10745,10744,10726,-10726,10518,10522,10739\n        ,-10739,10501,10753,10752,-10499,10753,10775,10776,-10753,10744,10781,10780,-10727,10683,10707,10825,-10801,10534\n        ,10833,10830,-10683,10738,10739,10859,-10858,10530,10673,10694,-10532,10548,10835,10874,-10546,10540,10539,10875,-10566\n        ,10875,10583,10566,-10566,10584,10606,10604,-10583,10644,10674,10673,-10531,10625,10624,10876,-10878,10696,10501,10500\n        ,-10532,10676,10675,10706,-10706,10765,10764,10754,-10756,10693,10762,10765,-10697,10801,10860,10825,-10803,10820\n        ,10818,10817,-10822,10675,10803,10802,-10707,10545,10874,10822,-10822,10708,10831,10828,-10706,10548,10547,10839,-10837\n        ,10643,10858,10849,-10645,10568,10684,10852,-10854,10804,10848,10849,-10802,10819,10854,10853,-10821,10567,10581,10684\n        ,-10569,10747,10867,10558,-10558,10559,10850,10564,-10564,10841,10678,10681,-10879,10555,10554,10747,-10558,10691\n        ,10556,10722,-10724,10724,10772,10771,-10693,10864,10869,10811,-10815,10878,10681,10812,-10812,10841,10826,10871,-10843\n        ,10867,10863,10851,-10851,10814,10813,10846,-10852,10723,10573,10575,-10725,10575,10586,10688,-10725,10791,10792,10784\n        ,-10783,10782,10784,10783,-10781,10799,10860,10858,-10858,10800,10825,10860,-10800,10722,10557,10560,-10574,10647\n        ,10865,-10884,10533,10532,10646,-10646,10865,10647,10823,-10825,10532,10795,10823,-10647,10798,10845,10844,-10825\n        ,10664,10666,10665,-10662,10590,10579,10582,-10603,10819,10879,10565,-10855,10880,10736,10779,-10882,10508,10507,10520\n        ,-10504,10507,10735,10521,-10521,10735,10733,10526,-10522,10508,10503,10737,-10510,10882,10883,10526,-10742,10743\n        ,10737,10736,-10881,10652,10651,10881,-10789,10615,10712,10677,-10610,10619,10616,10608,-10612,10612,10622,10620,-10611\n        ,10613,10624,10622,-10613,10614,10876,10624,-10614,10572,10662,10661,-10594,10661,10665,10594,-10594,10665,10668,10656\n        ,-10595,10656,10668,10670,-10615,10131,10240,10662,-10573,10620,10619,10611,-10611,10709,10719,10685,-10722,10677\n        ,10712,10710,-10721,10720,10710,10709,-10722,10616,10615,10609,-10609,10636,10631,10884,-10886,10631,10552,10538,-10885\n        ,10552,10551,10875,-10540,10583,10550,10627,-10585,10606,10629,10634,-10608,10550,10583,10875,-10552,10629,10606,10584\n        ,-10628,10642,10636,10885,-10887,10740,10642,10886,-10883,10537,10887,10884,-10539,10540,10888,10889,-10891,10885\n        ,10884,10887,-10892,10886,10885,10891,-10893,10882,10886,10892,-10884,10070,10517,10658,-10467,10513,10880,10881,-10515\n        ,10658,10517,10654,-10651,10650,10654,10514,-10652,10893,10894,10829,-10829,10840,10895,10896,-10839,10842,10897,10895\n        ,-10841,10872,10898,10899,-10872,10894,10900,10843,-10830,10901,10893,10828,-10832,10871,10899,10897,-10843,10769\n        ,10767,10766,-10771,10466,10658,10657,-10250,10704,10703,10476,-10341,10703,10754,10477,-10477,10764,10763,10479,-10479\n        ,10763,10767,10480,-10480,10481,10769,10768,-10483,10482,10768,10771,-10484,10484,10772,10687,-10486,10485,10687,10686\n        ,-10487,10649,10652,10488,-10488,10660,10649,10487,-10220,10698,10697,10489,-10362,10490,10719,10031,-9992,10697,10773\n        ,10342,-10490,10477,10754,10764,-10479,10483,10771,10772,-10485,10486,10686,10719,-10491,10480,10767,10769,-10482\n        ,10595,10594,10656,-10635,10877,10876,10670,-10670,10862,10861,10714,-10714,10902,10833,10832,-10904,10904,10830,10833\n        ,-10903,10903,10832,10834,-10906,10905,10834,10648,-10907,10907,10908,10891,-10888,10648,10891,10908,-10907,10889\n        ,10907,10887,-10538,10904,10901,10831,-10831,10888,10836,10839,-10897,10826,10841,10878,-10828,10878,10811,10869,-10828\n        ,10750,10827,10869,-10811,10306,10202,-10202,10260,10236,-10236,10093,10274,-10095,10162,10164,-10143,10156,10146\n        ,-10146,10215,10093,-10086,10438,10118,-10422,10179,10178,-10178,10276,10176,-10457,10234,10233,-10427,10133,10287\n        ,-10290,10201,10195,-10199,10198,10195,-10198,10305,10299,-10299,10065,10307,-10062,10083,10066,-10066,10065,10066\n        ,-10308,10299,10201,-10199,10215,10084,-10094,10281,10437,-10433,10053,10269,-10321,10443,10441,-10443,10414,10099\n        ,-10446,10314,10381,-10316,10394,10208,-10208,10441,10313,-10317,10414,10100,-10100,10439,10432,-10438,10379,10439\n        ,-10381,10427,10378,-10377,10377,10102,-10102,10379,10432,-10440,10320,10330,-10262,10118,10117,-10422,10405,10206\n        ,-10206,10390,10451,-10392,10406,10451,-10408,10446,10451,-10407,10096,10463,-10124,10391,10451,-10447,10053,10320\n        ,-10262,10175,10456,-10177,10356,10348,-10454,10081,10305,-10299,10307,10301,-10062,10307,10308,-10302,10250,10253\n        ,-10285,10306,10305,-10455,10097,10108,-10099,10095,10461,-10097,10069,10452,-10309,10068,10211,-10454,10278,10433\n        ,-10427,10278,10426,-10234,10445,10474,-10415,10443,10473,-10445,10174,10449,-10232,10461,10095,-10463,10408,10407\n        ,-10464,10451,10123,-10464,10410,10409,-10470,10407,10451,-10464,10740,10641,-10643,10694,10673,-10673,10536,10094\n        ,-10275,10602,10582,-10605,10597,10586,-10586,10655,10529,-10537,10867,10850,-10559,10619,10617,-10617,10710,10711\n        ,-10016,10674,10856,-10672,10573,10723,-10723,10641,10638,-10636,10638,10637,-10636,10741,10733,-10735,10510,10509\n        ,-10743,10527,10510,-10513,10510,10742,-10513,10734,10638,-10642,10655,10536,-10529,10714,10861,-10867,10501,10755\n        ,-10703,10872,10871,-10871,10843,10873,-10542,10751,10750,-10811,10823,10647,-10647,10870,10749,-10749,10843,10541\n        ,-10545,10868,10866,-10862,10807,10809,-10869,10855,10805,-10809,10806,10543,-10543,10807,10868,-10862,10755,10696\n        ,-10766,10558,10850,-10560,10834,10645,-10649,10819,10822,-10880,10835,10837,-10880,10874,10835,-10880,10540,10565\n        ,-10889,10822,10874,-10880,10501,10696,-10756,10615,10618,-10713,10883,10892,-10648,10788,10881,-10780,10526,10733\n        ,-10742,10742,10509,-10738,10742,10737,-10744,10685,10719,-10687,10740,10882,-10742,10539,10538,-10553,10537,10540\n        ,-10891,10513,10743,-10881,10514,10881,-10652,10713,10856,-10863,10713,10671,-10857,10873,10843,-10901,10614,10670\n        ,-10877,10890,10889,-10538,10836,10888,-10838,10879,10888,-10566,10838,10896,-10840,10837,10888,-10880,10909,10910\n        ,10911,-10913,10913,10914,10229,-10233,10915,10916,10917,-10919,10919,10920,10921,-10923,10923,10924,10239,-10226\n        ,10925,10926,10224,-10231,10925,10230,10229,-10915,10911,10910,10927,-10929,10929,10930,10931,-10933,10224,10926,10923\n        ,-10226,10930,10909,10912,-10932,10933,10934,10935,-10937,10937,10938,10939,-10941,10667,10941,10942,-10670,10943\n        ,10944,10945,-10947,10947,10948,10949,-10951,10951,10952,10953,-10955,10239,10924,10955,-10664,10956,10666,10664,-10958\n        ,10667,10666,10956,-10942,10958,10938,10937,-10960,10960,10961,10962,-10964,10964,10932,10931,-10966,10955,10957,10664\n        ,-10664,10965,10931,10912,-10941,10966,10950,10949,-10968,10968,10960,10969,-10971,10967,10953,10952,-10967,10962\n        ,10958,10971,-10973,10973,10974,10975,-10977,10977,10922,10978,-10980,10980,10981,10982,-10984,10984,10985,10977,-10980\n        ,10981,10986,10977,-10986,10982,10981,10985,-10985,10987,10986,10988,-10990,10986,10987,10990,-10978,10991,10990,10987\n        ,-10993,10991,10993,10994,-10991,10990,10995,10996,-10998,10986,10998,10999,-11001,10988,10986,11001,-11003,10989\n        ,10988,11003,-11005,10992,10987,11005,-11007,10992,11007,11008,-10992,10937,10940,10912,-10912,10959,10937,10911,-10929\n        ,11009,10965,10940,-10940,10972,11010,11011,-11013,10974,10973,10970,-10970,10989,11013,11014,-10988,11015,10927,10934\n        ,-11017,11005,11014,11012,-11012,10998,10951,10954,-11000,10997,10996,10919,-10923,10927,10916,10920,-10935,10948\n        ,10946,10958,-10962,11017,10994,10933,-10996,11018,10910,10914,-10914,10916,10927,11018,-10918,10929,10932,10924,-10924\n        ,10910,10909,10925,-10915,10909,10930,10926,-10926,10926,10930,10929,-10924,10941,10938,11019,-10943,11019,10958,10946\n        ,-10946,10924,10932,10964,-10956,10956,10939,10938,-10942,10960,10968,10967,-10950,10953,10967,10968,-10971,10957\n        ,11009,10939,-10957,11004,11003,10963,-10963,10964,11009,10957,-10956,11002,11001,11020,-10975,11006,11005,11011,-11011\n        ,11008,11007,11021,-11016,10994,10993,11016,-10934,10961,10960,10949,-10949,10976,10975,11000,-11000,10920,10919,10935\n        ,-10935,10995,10933,10936,-10997,11012,11014,11013,-10973,10970,10973,10954,-10954,11015,11016,10993,-11009,11013\n        ,11004,10962,-10973,11010,11021,11007,-11007,11020,11001,11000,-10976,10999,10954,10973,-10977,11002,10974,10969,-11004\n        ,10935,10919,10996,-10937,10959,10928,11021,-10972,10913,10232,10918,-10918,10920,10916,10915,-10922,10669,10942,10945\n        ,-10945,10943,10946,10948,-10948,10986,10981,10980,-10999,11022,10983,10982,-11024,11022,11024,10952,-10984,10232\n        ,10448,-10919,11018,10927,-10911,10928,10927,-11016,11016,10934,-10934,11019,10938,-10959,10963,10969,-10961,10961\n        ,10958,-10963,11020,10975,-10975,11021,10928,-11016,10997,10922,-10978,10965,11009,-10965,10971,11010,-10973,10971\n        ,10958,-10960,10951,10983,-10953,10921,10978,-10923,11010,10971,-11022,11008,10993,-10992,11000,11001,-10987,11002\n        ,11003,-10989,11006,11007,-10993,11004,11013,-10990,10963,11003,-10970,10990,11017,-10996,10994,11017,-10991,11005\n        ,10987,-11015,10977,10990,-10998,11018,10913,-10918,11019,10945,-10943,10951,10998,-10981,10951,10980,-10984,10950\n        ,10966,-11025,10966,10952,-11025,10984,10979,-11024,10982,10984,-11024,11025,11026,11027,-11029,11029,11030,11031\n        ,-11033,11033,11034,11031,-11031,11035,11036,11034,-11034,11037,11038,11036,-11036,11039,11040,11041,-11043,11043\n        ,11044,11053,-11053,11046,11047,11054,-11056,11048,11046,11055,-11057,11049,11048,11056,-11058,11050,11049,11057,-11059\n        ,11051,11050,11058,-11060,10711,10618,11060,-11062,10617,11062,11063,-10619,10617,10621,11064,-11063,10621,10623,11065\n        ,-11065,10623,10625,11066,-11066,11037,11067,11068,-11039,11070,11040,11069,-11060,10625,10877,11071,-11067,11072\n        ,11073,11074,-11076,11072,11075,11076,-10948,10944,10943,11077,-11079,11079,11080,11081,-11083,11083,11084,11085,-11087\n        ,11054,11047,11043,-11053,11029,11032,11026,-11026,11087,11088,10025,-11090,10022,11090,11091,-10020,11092,11080,11079\n        ,-11094,11094,11069,11095,-11097,11069,11051,-11060,11068,11067,11084,-11084,11074,11073,11082,-11082,11085,11092\n        ,11093,-11087,11043,11025,11028,-11045,11047,11046,11030,-11030,11048,11033,11030,-11047,11048,11049,11035,-11034\n        ,11049,11050,11037,-11036,11050,11051,11067,-11038,11087,11089,11045,-11045,11091,11090,11053,-11046,11060,11052,11053\n        ,-11062,11062,11055,11054,-11064,11062,11064,11056,-11056,11064,11065,11057,-11057,11065,11066,11058,-11058,11066\n        ,11071,11059,-11059,11075,11074,11041,-11041,11076,11075,11040,-11071,11059,11078,11077,-11071,11080,11039,11042,-11082\n        ,11084,11094,11096,-11086,11047,11029,11025,-11044,11063,11054,11052,-11061,11080,11092,11095,-11040,11041,11074,11081\n        ,-11043,11096,11095,11092,-11086,11067,11051,11094,-11085,11071,10877,10944,-11079,10947,11076,11077,-10944,11088\n        ,11087,11028,-11028,11090,10022,10711,-11062,10019,11091,11089,-10026,11097,11098,11032,-11032,11099,11097,11031,-11035\n        ,11100,11099,11034,-11037,11101,11100,11036,-11039,11098,11102,11026,-11033,11102,10025,11027,-11027,11103,11101,11038\n        ,-11069,11108,11093,11079,-11110,11108,11083,11086,-11094,11106,11103,11068,-11084,11107,11082,11073,-11073,11069\n        ,11040,-11040,10618,11063,-11061,11039,11095,-11070,11094,11051,-11070,11071,11078,-11060,11070,11077,-11077,10022\n        ,10015,-10712,11087,11044,-11029,11091,11045,-11090,11061,11053,-11091,11027,10025,-11089,11053,11044,-11046,10947\n        ,11105,11107,-11073,11104,11108,11109,-11111,11104,11106,11083,-11109,11107,11109,11079,-11083,11105,11110,11109,-11108\n        ,11105,10947,-10944,11111,11112,11113,-11115,11115,11116,11117,-11119,11119,11118,11117,-11121,11121,11119,11120,-11123\n        ,11123,11121,11122,-11125,11125,11126,11127,-11129,11129,11131,-11139,11132,11133,11141,-11141,11133,11134,11142,-11142\n        ,11134,11135,11143,-11143,11135,11136,11144,-11144,11136,11137,11145,-11145,11138,11139,-11130,10277,11146,11147,-10177\n        ,10177,10176,11148,-11150,10177,11149,11150,-10181,10180,11150,11151,-10183,10182,11151,11152,-10186,11123,11124,11153\n        ,-11155,11155,11126,11156,-11146,10185,11152,11157,-10449,10978,11158,11159,-11161,10978,10921,11161,-11159,10918\n        ,11162,11163,-10916,11164,11165,11166,-11168,11168,11169,11170,-11172,11138,11131,11132,-11141,11115,11111,11114,-11117\n        ,11172,11173,9973,-11175,9970,9969,11175,-11177,11177,11178,11164,-11168,11179,11155,11180,-11182,11145,11137,-11156\n        ,11153,11168,11171,-11155,11159,11166,11165,-11161,11170,11169,11178,-11178,11131,11130,11112,-11112,11132,11115,11118\n        ,-11134,11134,11133,11118,-11120,11134,11119,11121,-11136,11135,11121,11123,-11137,11136,11123,11154,-11138,11172\n        ,11130,11129,-11174,11175,11129,11139,-11177,11147,11146,11139,-11139,11149,11148,11140,-11142,11149,11141,11142,-11151\n        ,11150,11142,11143,-11152,11151,11143,11144,-11153,11152,11144,11145,-11158,11158,11126,11125,-11160,11161,11156,11126\n        ,-11159,11145,11156,11163,-11163,11167,11166,11128,-11128,11171,11170,11181,-11181,11132,11131,11111,-11116,11148\n        ,11147,11138,-11141,11167,11127,11179,-11178,11125,11128,11166,-11160,11181,11170,11177,-11180,11154,11171,11180,-11138\n        ,11157,11162,10918,-10449,10921,10915,11163,-11162,11174,11113,11112,-11173,11176,11146,10277,-9971,9969,9973,11173\n        ,-11176,11182,11117,11116,-11184,11184,11120,11117,-11183,11185,11122,11120,-11185,11186,11124,11122,-11186,11183\n        ,11116,11114,-11188,11187,11114,11113,-9974,11188,11153,11124,-11187,11189,11190,11164,-11179,11189,11178,11169,-11192\n        ,11191,11168,11153,-11189,11190,11192,10978,11160,-11166,11155,11127,-11127,10176,11147,-11149,11127,11155,-11180\n        ,11180,11155,-11138,11157,11145,-11163,11156,11161,-11164,9970,10277,-9966,11172,11112,-11131,11175,11173,-11130,11146\n        ,11176,-11140,11165,11164,-11191,11169,11168,-11192,11113,11174,-9974,11131,11129,-11131,10883,10865,10524,-10527\n        ,10648,10647,-10892,10207,10455,-10437,10455,10207,-10466,10206,10464,-10208,10495,10497,10464,-10207,10891,10647\n        ,-10893,11193,11194,11195,-11197,11196,11195,11197,-11241,11240,11197,11198,-11243,11242,11198,11199,-11245,11244\n        ,11199,11200,-11247,11246,11200,11201,-11203,11202,11201,11203,-11205,11204,11203,11205,-11251,11250,11205,11206,-11253\n        ,11252,11206,11207,-11209,11208,11207,11209,-11211,11210,11209,11211,-11213,11212,11211,11213,-11215,11214,11213,11215\n        ,-11217,11216,11215,11217,-11219,11218,11217,11219,-11221,11220,11219,11194,-11194,11194,11221,11222,-11196,11195\n        ,11222,11223,-11198,11197,11223,11224,-11199,11198,11224,11225,-11200,11199,11225,11226,-11201,11200,11226,11227,-11202\n        ,11201,11227,11228,-11204,11203,11228,11229,-11206,11205,11229,11230,-11207,11206,11230,11231,-11208,11207,11231,11232\n        ,-11210,11209,11232,11233,-11212,11211,11233,11234,-11214,11213,11234,11235,-11216,11215,11235,11236,-11218,11217\n        ,11236,11237,-11220,11219,11237,11221,-11195,11238,11239,11196,-11241,11241,11238,11240,-11243,11243,11241,11242,-11245\n        ,11245,11243,11244,-11247,11247,11245,11246,-11203,11248,11247,11202,-11205,11249,11248,11204,-11251,11251,11249,11250\n        ,-11253,11253,11251,11252,-11209,11254,11253,11208,-11211,11255,11254,11210,-11213,11256,11255,11212,-11215,11257\n        ,11256,11214,-11217,11258,11257,11216,-11219,11259,11258,11218,-11221,11260,11259,11220,-11194,11239,11260,11193,-11197\n        ,11261,11262,11239,-11239,11263,11261,11238,-11242,11264,11263,11241,-11244,11265,11264,11243,-11246,11266,11265,11245\n        ,-11248,11267,11266,11247,-11249,11268,11267,11248,-11250,11269,11268,11249,-11252,11270,11269,11251,-11254,11271\n        ,11270,11253,-11255,11272,11271,11254,-11256,11273,11272,11255,-11257,11274,11273,11256,-11258,11275,11274,11257,-11259\n        ,11276,11275,11258,-11260,11277,11276,11259,-11261,11262,11277,11260,-11240,11278,11279,11262,-11262,11280,11278,11261\n        ,-11264,11281,11280,11263,-11265,11282,11281,11264,-11266,11283,11282,11265,-11267,11284,11283,11266,-11268,11285\n        ,11284,11267,-11269,11286,11285,11268,-11270,11287,11286,11269,-11271,11288,11287,11270,-11272,11289,11288,11271,-11273\n        ,11290,11289,11272,-11274,11291,11290,11273,-11275,11292,11291,11274,-11276,11293,11292,11275,-11277,11294,11293,11276\n        ,-11278,11279,11294,11277,-11263,11279,11278,11295,-11297,11278,11280,11297,-11296,11280,11281,11298,-11298,11281\n        ,11282,11299,-11299,11282,11283,11300,-11300,11283,11284,11301,-11301,11284,11285,11302,-11302,11285,11286,11303,-11303\n        ,11286,11287,11304,-11304,11287,11288,11305,-11305,11288,11289,11306,-11306,11289,11290,11307,-11307,11290,11291,11308\n        ,-11308,11291,11292,11309,-11309,11292,11293,11310,-11310,11293,11294,11311,-11311,11294,11279,11296,-11312,11312\n        ,11222,-11222,11312,11223,-11223,11312,11224,-11224,11312,11225,-11225,11312,11226,-11226,11312,11227,-11227,11312\n        ,11228,-11228,11312,11229,-11229,11312,11230,-11230,11312,11231,-11231,11312,11232,-11232,11312,11233,-11233,11312\n        ,11234,-11234,11312,11235,-11235,11312,11236,-11236,11312,11237,-11237,11312,11221,-11238,11358,11313,11314,-11380\n        ,11315,11316,11313,-11359,11317,11318,11316,-11316,11362,11319,11318,-11318,11364,11320,11319,-11363,11321,11322,11320\n        ,-11365,11323,11324,11322,-11322,11325,11326,11324,-11324,11327,11328,11326,-11326,11329,11330,11328,-11328,11331\n        ,11332,11330,-11330,11333,11334,11332,-11332,11335,11336,11334,-11334,11374,11337,11336,-11336,11376,11338,11337,-11375\n        ,11339,11340,11338,-11377,11379,11314,11340,-11340,11313,11341,11342,-11315,11316,11343,11341,-11314,11318,11344,11343\n        ,-11317,11319,11345,11344,-11319,11320,11346,11345,-11320,11322,11347,11346,-11321,11324,11348,11347,-11323,11326\n        ,11349,11348,-11325,11328,11350,11349,-11327,11330,11351,11350,-11329,11332,11352,11351,-11331,11334,11353,11352,-11333\n        ,11336,11354,11353,-11335,11337,11355,11354,-11337,11338,11356,11355,-11338,11340,11357,11356,-11339,11314,11342,11357\n        ,-11341,11315,11358,11359,-11361,11317,11315,11360,-11362,11362,11317,11361,-11364,11364,11362,11363,-11366,11321\n        ,11364,11365,-11367,11323,11321,11366,-11368,11325,11323,11367,-11369,11327,11325,11368,-11370,11329,11327,11369,-11371\n        ,11331,11329,11370,-11372,11333,11331,11371,-11373,11335,11333,11372,-11374,11374,11335,11373,-11376,11376,11374,11375\n        ,-11378,11339,11376,11377,-11379,11379,11339,11378,-11381,11358,11379,11380,-11360,11360,11359,11381,-11383,11361\n        ,11360,11382,-11384,11363,11361,11383,-11385,11365,11363,11384,-11386,11366,11365,11385,-11387,11367,11366,11386,-11388\n        ,11368,11367,11387,-11389,11369,11368,11388,-11390,11370,11369,11389,-11391,11371,11370,11390,-11392,11372,11371,11391\n        ,-11393,11373,11372,11392,-11394,11375,11373,11393,-11395,11377,11375,11394,-11396,11378,11377,11395,-11397,11380\n        ,11378,11396,-11398,11359,11380,11397,-11382,11382,11381,11398,-11400,11383,11382,11399,-11401,11384,11383,11400,-11402\n        ,11385,11384,11401,-11403,11386,11385,11402,-11404,11387,11386,11403,-11405,11388,11387,11404,-11406,11389,11388,11405\n        ,-11407,11390,11389,11406,-11408,11391,11390,11407,-11409,11392,11391,11408,-11410,11393,11392,11409,-11411,11394\n        ,11393,11410,-11412,11395,11394,11411,-11413,11396,11395,11412,-11414,11397,11396,11413,-11415,11381,11397,11414,-11399\n        ,11399,11398,11415,-11417,11400,11399,11416,-11418,11401,11400,11417,-11419,11402,11401,11418,-11420,11403,11402,11419\n        ,-11421,11404,11403,11420,-11422,11405,11404,11421,-11423,11406,11405,11422,-11424,11407,11406,11423,-11425,11408\n        ,11407,11424,-11426,11409,11408,11425,-11427,11410,11409,11426,-11428,11411,11410,11427,-11429,11412,11411,11428,-11430\n        ,11413,11412,11429,-11431,11414,11413,11430,-11432,11398,11414,11431,-11416,11342,11341,-11433,11341,11343,-11433\n        ,11343,11344,-11433,11344,11345,-11433,11345,11346,-11433,11346,11347,-11433,11347,11348,-11433,11348,11349,-11433\n        ,11349,11350,-11433,11350,11351,-11433,11351,11352,-11433,11352,11353,-11433,11353,11354,-11433,11354,11355,-11433\n        ,11355,11356,-11433,11356,11357,-11433,11357,11342,-11433\n        Edges: 0,4,16,20,23,24,29,32,36,40,44,48,3,1,2,7,6,9,10,15,13,14,17,18,25,27,26,35,34,37,39,38,42,30,46,50,55,53,54,60,61\n        ,66,64,65,68,69,72,74,73,76,81,80,83,85,84,88,92,96,99,104,107,111,121,123,129,128,131,133,140,8,12,105,22,102,31\n        ,101,100,108,144,113,112,116,115,136,120,119,124,132,293,545,603,604,1099,1126,1128,1132,1147,1160,1175,1203,1204\n        ,1223,2486,1232,1242,4963,1248,1333,1348,1356,1441,1502,1509,1517,1518,1812,1813,1829,1844,1997,2179,2252,2249,2338\n        ,2450,2581,2709,2731,2867,2870,3067,4406,2377,3104,3108,2444,3120,4088,4166,4173,4225,4408,4763,4958,4991,4992,5008\n        ,5096,5187,5369,5744,6285,6332,6357,6739,4762,1791,149,148,147,146,153,152,150,157,156,154,161,158,162,169,167,174\n        ,166,178,873,182,181,180,179,186,185,189,187,194,197,196,195,6887,201,200,199,198,205,204,202,209,208,206,213,210\n        ,216,215,214,221,225,224,222,229,226,6449,176,231,230,237,236,235,234,238,246,250,249,248,247,253,251,257,262,266\n        ,265,264,263,270,269,267,273,271,278,282,281,280,284,285,6092,290,289,287,288,294,292,298,297,295,296,302,300,306\n        ,303,305,309,313,312,310,311,317,315,316,321,320,318,325,323,324,609,329,326,333,337,336,335,334,341,340,339,338,345\n        ,344,342,349,348,346,353,350,357,355,354,361,360,359,358,365,364,362,369,368,366,373,370,377,376,374,375,381,379,380\n        ,385,383,382,384,388,386,392,391,390,395,393,399,406,407,620,618,411,409,410,420,416,414,413,418,424,422,427,432,431\n        ,430,436,434,433,435,441,440,438,442,446,458,457,455,454,462,459,467,466,471,468,475,474,473,472,479,478,476,483,482\n        ,480,487,484,490,489,488,495,494,499,498,496,503,500,507,506,505,504,511,510,508,515,514,512,519,516,522,521,527,526\n        ,531,530,528,532,539,536,543,542,547,544,551,550,555,554,553,559,558,556,563,562,560,564,571,570,569,568,574,572,579\n        ,578,583,580,587,590,594,593,598,602,611,610,613,617,621,629,634,633,632,631,637,635,641,646,649,648,647,653,658,662\n        ,661,660,665,663,670,669,671,678,677,680,686,685,688,693,692,691,697,701,706,709,708,713,718,717,719,726,725,724,729\n        ,727,733,741,740,745,750,749,751,757,756,755,762,761,765,763,770,774,773,772,777,775,782,781,783,790,789,788,793,791\n        ,797,805,804,809,814,813,815,825,821,820,822,826,829,828,830,831,835,841,844,849,852,857,860,858,864,871,870,879,878\n        ,5719,4507,13860,889,887,886,888,914,892,921,891,893,890,896,897,895,894,903,904,1255,899,898,902,901,906,908,911\n        ,910,909,913,918,917,5282,919,6172,925,924,922,923,947,6829,948,6837,4648,6895,4633,933,931,930,932,934,940,939,938\n        ,937,941,942,4512,946,945,950,954,964,4382,4381,5461,1013,965,4524,993,1016,968,966,967,969,970,1018,973,977,976,974\n        ,975,5510,980,979,978,982,981,1467,989,988,985,991,995,1005,999,998,1000,1002,1009,1008,1007,1012,1011,972,1015,1020\n        ,1019,1023,1022,1037,1033,1031,1030,1032,1035,4708,1039,1041,1040,1038,1045,1044,1042,1049,1048,1046,1047,1058,1059\n        ,6773,1055,1054,1053,1057,1062,1060,1061,1067,1066,1065,1064,1071,1069,1068,1070,1075,1073,1077,1076,1109,1108,4807\n        ,1083,1082,1087,1119,1086,1085,1094,1095,1091,1088,1098,1097,1096,1101,1103,1111,1107,1104,1106,1115,1118,1117,1116\n        ,1122,1125,1131,1134,1133,1138,1143,1142,1144,1150,1149,1152,1151,1159,1156,1195,1196,1163,1162,1161,1167,1166,1164\n        ,1171,1170,1168,1172,1218,2828,4996,4995,1176,1177,1180,4496,1214,1190,1191,1187,1185,1184,1186,1188,1194,1193,1192\n        ,1198,1202,1207,1210,1211,1215,1209,1217,1216,1220,1227,1226,1225,1224,1228,1229,1235,1236,3210,3206,2202,1247,1246\n        ,1245,1244,1249,1251,1271,1267,1266,1422,1258,1259,1253,1252,1256,1263,1262,1261,1260,1265,1270,1269,1275,1272,1276\n        ,1277,1279,1283,1282,1280,1286,1292,1360,1289,1288,1284,1290,1297,1296,1295,1294,1301,1300,1299,1298,1303,1357,1308\n        ,1307,1306,1305,1312,1311,1309,1316,1315,1313,1320,1317,1327,1328,1324,1321,1332,1329,1330,1336,1335,1334,1339,1337\n        ,1344,1343,1345,1350,1351,1349,1355,1359,1358,1364,1363,1367,1365,1379,1374,1375,1380,1443,1384,1383,1382,1381,1386\n        ,1388,1440,1437,1392,1409,1408,1405,4939,1394,1395,1401,1400,1404,1403,1402,1407,1412,1416,5716,5713,1420,1421,2245\n        ,1419,1418,1425,1424,1432,1426,1427,1434,1436,1444,1449,1448,1447,1446,1453,1452,1450,1457,1456,1454,1461,1458,1465\n        ,987,1463,1462,1469,1468,5505,1473,1472,1470,1471,1487,4801,1477,1476,1474,1475,1481,1479,1480,1485,1482,1483,4776\n        ,1488,1493,1492,1491,1495,1496,1498,1499,1500,1505,1504,1503,1541,1507,1506,4175,5238,4720,1513,1512,1510,1511,1520\n        ,1515,1516,1514,1521,2993,1523,5220,1525,1524,1522,1527,1533,1532,1531,1530,1537,1536,1534,4773,4754,4753,1539,1538\n        ,1544,1543,1548,1546,1581,1580,1558,1560,1559,1557,1564,1562,1572,1567,1568,1566,1565,1570,1576,1575,1574,1579,1577\n        ,1583,1596,1591,1592,1590,1589,1594,1600,1599,1598,1604,1603,1601,1607,1605,1619,1620,1616,1614,1613,1615,1617,1624\n        ,1623,1621,1622,1628,1626,1627,1635,1636,1632,1630,1629,1631,1633,1723,1768,5802,6214,1640,1639,1637,1638,1644,1643\n        ,1642,1641,1648,5954,1645,1655,1650,1652,1649,1656,1653,1654,1736,1659,1658,1657,3014,1660,1746,1704,1708,1707,6250\n        ,1760,1664,1663,1661,1662,1668,1666,1667,1672,1671,1669,2165,1677,1676,1697,6766,1696,1675,1674,1673,1680,1679,1684\n        ,1683,1739,1688,1685,1691,1690,1695,1703,1702,1701,1705,1711,1710,1709,1716,1715,5397,1718,5922,5951,6757,5948,1725\n        ,1724,1722,1756,1759,1727,2521,1730,1735,1734,1740,6205,6209,1744,6207,2342,1751,1748,1754,1753,1762,1763,1764,1761\n        ,1766,1775,1776,1772,1770,1769,1771,1773,1780,1779,1778,1777,1788,1784,1782,1781,1783,1786,1240,1789,1790,1796,1795\n        ,1794,1793,1799,1798,4470,1797,4911,1804,1803,1802,1801,1808,1807,1805,1811,1809,1816,2261,1818,1820,1819,1817,1827\n        ,5882,1822,1824,1823,1821,1828,1825,1179,1178,1183,1182,2739,1832,1831,1830,1836,1835,1833,1839,1837,1845,1848,1847\n        ,1855,1856,1852,1849,4484,4480,5018,1860,1859,1858,1863,1862,1871,1884,1866,1868,1867,1865,1872,1869,1876,1875,1874\n        ,1873,1880,1879,1877,1882,1887,1892,1891,1890,2216,2221,2220,2736,1893,1896,1895,1894,2569,5848,1903,1904,1900,1898\n        ,1897,1899,1901,1911,1912,1908,1905,1907,1906,1909,2131,2130,5407,4515,1917,1915,1913,1914,1918,1916,1921,3159,2713\n        ,1920,1922,1919,1929,1930,1926,1924,1923,1925,1927,1934,1933,1932,1931,1938,1937,1935,1941,1939,1946,2748,1949,1948\n        ,1947,1953,1951,1952,1960,1961,1957,1954,1956,1962,1965,1964,1963,1966,1967,1973,1970,1974,1975,1976,1985,1986,1982\n        ,1980,1979,1981,1983,1989,1990,2108,1988,1987,1994,1993,1992,1996,2775,2001,6084,13841,2005,2003,2002,2017,2013,2011\n        ,2010,2012,2015,2021,2020,2019,2018,2024,2022,2026,2029,2034,2038,2037,2036,2035,2042,2041,2039,2046,2045,2043,2050\n        ,2047,2054,2053,5939,6800,2055,2059,2069,2070,2066,2064,2063,2067,2073,2072,2071,2077,5843,4668,2081,2080,2079,2636\n        ,5522,5894,6077,2085,2083,2089,2088,2090,2091,2092,2571,2570,5751,5364,2099,2127,2096,2095,2094,2100,2097,2104,2103\n        ,2102,2101,2106,2105,2113,2110,2117,2116,2115,2114,2425,2438,2119,2121,2118,2124,2141,2137,2135,2134,2139,2145,2144\n        ,2143,2142,2149,2148,2146,2620,2626,2157,2153,2151,2150,2152,2155,2161,2160,2158,2163,3169,3166,6097,2169,2168,2166\n        ,2167,2173,2171,2172,5278,2176,2174,2177,2180,2178,2181,2184,1969,2187,1529,2188,2192,2191,2190,2189,2194,2196,2195\n        ,2200,2199,2197,2204,2203,2201,2226,2774,3002,2207,3362,2206,2208,2205,2212,2211,2472,2468,2217,2214,2213,2215,2218\n        ,2222,2224,2232,2231,2230,2235,2237,2241,2240,2238,2239,2243,5209,5936,5214,2253,2247,2246,2248,2250,2259,2258,2265\n        ,2264,2263,2262,2268,2267,2266,2270,2274,3250,2616,2272,2279,2276,2318,2314,2313,2281,2280,5827,2853,2285,2284,2290\n        ,2294,2292,4462,5360,5754,2298,2297,2296,2299,2301,2303,2305,5854,5855,2312,2311,2317,2316,6015,2322,2326,2325,2324\n        ,2328,2330,2331,2339,2346,2345,2344,2343,2350,2349,2347,2353,2355,2357,2354,2361,2364,2362,2365,6091,6087,2367,2366\n        ,2368,2376,2371,2372,2370,2369,2375,2374,4520,2635,2378,2384,2383,2382,2388,2387,2386,2385,2391,2389,2395,2394,2400\n        ,2397,2404,2403,2407,2566,2410,2409,5815,5401,6041,6049,6046,6042,2413,2422,2421,2420,2419,2423,2430,2429,2427,2434\n        ,2433,2431,2441,2440,2445,2447,2454,2453,2452,2457,2455,2462,2461,2463,2467,2469,2476,2490,2502,2495,2497,2496,2500\n        ,2509,2510,2506,2504,2503,2505,2507,2513,2514,2512,2519,2530,2526,2523,2525,2532,2534,2538,2537,2536,2542,2541,2539\n        ,2545,2543,2552,2554,2553,2558,2557,2556,2560,2561,2564,2563,2565,2575,2574,2572,2573,2579,2577,2578,2580,5741,2585\n        ,961,956,960,957,2595,2594,2593,2598,2596,2603,2602,2604,2609,2608,2613,3246,2619,2618,2623,2622,2629,2627,2638,2641\n        ,2640,2646,2645,2649,2647,2658,2657,2656,2662,2661,2659,2665,2663,2678,2674,2671,2679,2684,2691,2693,2694,2696,2690\n        ,2689,2688,2703,2702,2707,2706,2710,2715,2714,2718,2724,2723,2725,6148,5337,5336,2764,2729,2752,2058,2057,2062,2061\n        ,2734,2742,5984,6212,6239,4473,4472,2749,2799,2755,2753,2760,2759,2761,2765,2767,2773,2782,2783,2779,2777,2776,2778\n        ,2780,2790,2791,2787,2784,2786,2793,2792,2797,2845,2802,2809,2808,2803,2811,2810,2815,2836,2837,2833,2831,2830,2834\n        ,2841,2840,2843,2847,2851,2857,2858,2863,2866,2868,2875,2874,2876,2879,2885,2884,2883,2888,2886,2893,2892,2894,2904\n        ,2903,2902,2913,2915,5916,5280,5344,5660,5665,2922,2921,2926,2925,2931,2930,2934,6673,13951,5653,2938,2942,2941,2940\n        ,2939,2946,2945,2943,2950,2949,2947,2954,2951,2958,2957,2956,2962,2961,2959,2963,2969,2968,2974,2973,2977,6274,2989\n        ,3082,2984,2985,2983,2994,2991,2998,2997,3004,3003,3008,3011,3016,3017,3022,3019,6401,3024,3030,3027,3034,3033,3038\n        ,3037,3036,3042,3041,3039,3045,3043,3051,3053,3055,3054,3060,3059,3064,3068,3073,3072,3078,3077,3080,3087,3089,2380\n        ,3102,3095,3103,3105,4656,3111,2443,3126,3125,3124,3123,3127,3133,3140,3141,3137,3135,3134,3138,5979,3145,3144,3143\n        ,3142,3149,3148,3146,3152,3150,3157,3185,3162,6161,3164,3163,3161,3171,3172,3168,3165,3167,3174,3173,3177,3180,3184\n        ,3193,3190,3191,3188,3198,3197,3195,3202,3200,3203,3214,3213,3217,3221,3220,3227,3226,3230,3228,1721,5210,3239,3238\n        ,3237,3236,3243,3242,3240,3244,3249,3255,3254,3253,3252,3259,3257,3256,3260,3262,3273,3268,3270,3269,3267,3274,3271\n        ,3695,3278,3276,3275,3277,3285,3340,3282,3286,3280,3279,3281,3283,3290,3289,3288,3287,3294,3293,3291,3298,3295,3302\n        ,3301,3300,3299,3305,3304,3309,3308,3306,3313,3312,3310,3317,3314,3321,3320,3319,3325,3324,3322,3329,3328,3326,3330\n        ,3335,3338,3344,3353,3352,3351,3357,3356,3354,3360,3358,3370,3367,3368,3374,3373,3377,3376,3375,3382,3381,3386,3385\n        ,3383,3390,3387,3394,3393,3392,3391,3397,3395,3401,3406,3410,3409,3408,3407,3414,3413,3411,3418,3417,3415,3422,3419\n        ,3431,3430,3432,3435,3441,6588,3438,3444,3443,3442,3449,3448,3453,3452,3450,3457,3454,3460,3459,3458,3464,3469,3468\n        ,3473,3470,3477,3476,3475,3474,3481,3480,3478,3484,3482,3489,3492,3491,3497,3496,3501,3500,3498,3502,3508,3507,3506\n        ,3510,3509,3515,3513,3512,3519,3518,3516,3522,3520,3531,3530,3529,3535,3534,3532,3538,3536,3547,3546,3545,3544,3551\n        ,3550,3548,3567,3552,4052,3555,3562,3563,3559,3556,3558,3565,3564,3572,3571,3576,3575,3573,3577,3583,3582,3588,3587\n        ,3591,3589,3600,3599,3598,3597,3604,3603,3601,3607,3605,3612,3616,3615,3614,3613,3619,3617,3623,3628,3632,3631,3630\n        ,3634,3635,3644,3640,3637,3639,3651,3660,3647,3646,3645,3649,3653,3655,3667,3675,3662,3664,3663,3661,3668,3665,3670\n        ,3671,3673,3672,3678,3677,3682,3680,3687,3693,3691,3689,3688,3690,3699,3698,3697,3696,3703,3702,3701,3700,3705,3708\n        ,3713,3711,3716,3721,3718,3725,3724,3728,3727,3740,3739,3738,3742,3748,3747,3746,3750,3756,3755,3753,3763,3764,3760\n        ,3757,3759,3768,3776,3775,3774,3773,3780,3779,3777,3783,3781,3788,3791,3790,3789,3795,3800,3799,3804,3801,3812,3806\n        ,3805,3807,3809,3872,3817,3890,3818,3827,3825,3822,3844,3832,3831,3830,3829,3836,3835,3840,3839,3837,3841,3848,3847\n        ,3846,3845,3852,3851,3849,3855,3853,3860,3863,3862,3861,3868,3867,4042,3870,3875,3874,3879,3882,3889,3888,3892,3891\n        ,3898,3897,3896,3900,3902,3901,3905,3903,3909,3908,3912,3915,3917,3926,3923,3928,3932,3931,3936,3941,3940,3939,3945\n        ,3949,3954,3957,3956,3961,3965,3978,3971,3973,3982,3985,3994,3988,3987,3991,3997,3995,3999,4003,4007,4006,4010,4019\n        ,4026,4025,4030,4029,4034,4032,4041,4040,4046,4050,4059,4058,4063,4065,4072,4149,4073,4071,4077,4076,4086,4085,4094\n        ,4093,4097,4106,4113,4112,4111,4118,4117,4120,4125,4129,4128,4134,4133,4137,4146,4153,4152,4150,4156,4157,4155,4159\n        ,4161,4160,4163,4169,4168,4167,4184,4171,4177,4176,4174,4180,4181,4179,4183,4182,4188,4186,4192,4201,4199,4204,4207\n        ,4212,4211,4210,4215,4213,4219,4218,4216,4221,4223,4234,4237,4242,4241,4240,4239,4246,4245,4243,4250,4247,4254,4253\n        ,4252,4251,4256,4257,4261,4260,4259,4258,4265,4264,4262,4269,4268,4266,4273,4270,4275,4274,4280,4279,4283,4281,6748\n        ,1729,1728,4287,4284,4289,4295,4292,4299,4305,4303,4302,4309,4308,4313,4319,4318,4316,4323,4321,4326,4325,4331,4330\n        ,4334,4332,4343,4348,4347,4349,4372,4354,4362,4356,4355,4359,4364,4365,4370,4367,4374,4373,4378,4377,4375,4380,6183\n        ,986,4386,4394,4392,4403,4411,4421,4420,4426,4425,4429,4427,4438,4442,4451,5357,4452,4456,4455,4461,4460,4465,4463\n        ,4474,4471,4478,5635,5520,4488,4492,4483,4479,4489,4493,4495,4499,4509,4508,4506,4511,2133,2132,4658,4523,4522,4527\n        ,4532,4531,4533,4544,4539,4540,4537,4547,4546,4545,4550,4549,4553,4551,4558,4557,4562,4559,4564,4563,4566,4570,4569\n        ,4576,4575,4580,4579,4577,4581,4587,4586,4592,4591,4596,4595,4593,4597,4604,4601,4607,4608,4611,4610,4616,4615,4620\n        ,4619,4617,4621,4627,4626,4625,4631,4636,4635,4640,4637,4643,4642,4641,949,4652,4657,4661,4660,5819,4663,4667,4666\n        ,5478,13928,4672,2911,4676,4674,4671,4669,4670,4703,4678,4679,4677,4680,4688,4689,4684,4683,4691,4690,4694,4699,4700\n        ,4701,4706,4705,4704,4711,4710,4714,4712,4718,4716,4725,4724,4723,4729,4728,4726,4733,4732,4730,4734,4741,4740,4739\n        ,6910,4742,4750,1528,4756,4761,4760,4765,4769,4784,4777,4781,4790,4787,4794,4798,4795,4802,4806,4803,4804,5170,4810\n        ,4809,4808,4813,4812,4811,6871,4817,4821,4819,4829,4828,4834,4833,4837,4835,4845,4844,4849,4848,4854,4853,4855,4861\n        ,4860,4859,4866,4865,4864,4863,4872,4875,4874,4879,4888,4885,4892,4898,4897,4901,4905,4912,4917,4916,4921,4920,4925\n        ,4923,4932,4936,4935,4942,4941,4946,4944,4949,4954,4953,4957,4961,5003,5006,4975,4971,4968,4970,4983,4979,4976,4978\n        ,4986,4985,4984,4990,4994,4999,5000,5009,5013,5012,5011,5109,5016,5015,5020,5025,5030,5033,5035,5040,5039,5042,5048\n        ,5047,5052,5051,5056,5054,5064,5063,5068,5067,5072,5070,5080,5079,5084,5083,5088,5086,5095,5103,5102,5106,5111,5110\n        ,5114,5119,5126,5128,5136,5129,5137,5148,5152,2359,5168,5171,5176,5180,5179,5184,5195,5194,5193,5198,5196,5207,5204\n        ,5208,5221,5227,5224,5228,5225,2009,5236,5239,5244,5247,5251,5250,5255,5263,5262,5268,5267,5271,5269,13832,5284,5281\n        ,5290,5288,5299,5305,5304,5308,5323,5331,5330,5333,5339,5338,5343,5353,5350,5395,5358,5359,5363,5383,5391,1028,1029\n        ,5399,5400,5396,5393,5440,5403,5402,5405,5410,5409,5417,5415,5412,5419,5422,5421,5426,5430,5429,5432,5368,5367,5437\n        ,5372,5371,5362,5375,5446,5445,5444,5447,5448,5376,5377,994,990,5465,5464,5463,5486,5469,5468,5467,5473,5472,5470\n        ,5474,5485,5479,5480,5487,5498,5499,13967,5496,5504,5507,5515,5521,5524,927,5530,5529,5550,5534,5533,5540,5539,5542\n        ,5541,5545,5557,5552,5551,5561,5560,5559,5565,5569,5574,5577,5576,5581,5584,5595,5594,5599,5602,5601,5608,5607,5609\n        ,5614,5621,5629,5628,2910,5633,5637,2898,2899,5646,5643,5650,2900,2906,2905,2901,5651,5657,5668,5667,5672,5676,5712\n        ,5684,5683,5691,5696,5695,5699,5705,5704,5706,5710,5725,5722,5723,5728,5734,5740,5438,2583,5439,2582,5456,5777,5755\n        ,5760,5763,5752,5747,5768,5766,5748,5770,5769,5749,5775,5781,5790,5788,5799,5732,5805,5804,5806,5810,5816,5809,5818\n        ,5817,5822,6065,6071,5829,5828,5833,5838,5837,5840,5845,5853,5852,5857,5856,5860,5864,1239,5872,5881,5880,5889,5887\n        ,4664,5902,5910,5925,5918,5919,5926,5931,5930,5938,5934,5944,5947,5956,6799,5960,5961,5968,5964,5972,5971,5982,5977\n        ,5976,5980,5986,5985,5989,5988,5987,5994,5993,5999,5996,6002,6001,6005,6008,6007,6016,6020,6024,5830,6030,6027,6028\n        ,6026,6032,6031,6036,6035,6040,6047,6057,6060,2850,6074,6080,6095,6088,6086,6100,6099,6105,6104,6108,6106,6116,6115\n        ,6118,6126,6127,6122,6121,6129,6134,6154,6149,6147,6159,6160,6169,6170,6175,6174,5528,6176,6178,6188,6196,6203,6211\n        ,6215,6217,6221,6225,6231,6234,6237,6245,2699,2700,6247,6251,6252,6255,6258,6262,2821,4126,6270,4127,6279,6280,6289\n        ,6278,6277,6283,6282,6281,6284,6286,6291,6292,6293,6294,6295,6301,6299,6300,6303,6305,6304,6306,6307,6309,6308,6321\n        ,6311,6315,6317,6322,6331,6343,6348,6355,6362,6361,6360,6366,6365,6363,6370,6369,6367,6371,6377,6376,6382,6381,6386\n        ,6385,6383,6387,6394,6393,6395,6391,6400,6399,6405,6404,6408,6406,6416,6421,6415,6425,6424,6423,6428,6426,6433,6432\n        ,6434,6440,6439,6444,6448,6456,6455,6460,6464,6473,6472,6470,6471,6477,6475,6502,6481,6478,6485,6482,6489,6492,6491\n        ,6490,6497,6496,6501,6498,6505,6510,6524,6518,6517,6521,6535,6531,6530,6532,6536,6538,6545,6542,6540,6539,6543,6548\n        ,6556,6555,6560,6565,6564,6566,6572,6571,6570,6576,6581,6580,6585,6582,6587,6591,3425,6597,6609,6605,6602,6613,6611\n        ,6616,6618,6350,6297,6627,6628,883,875,855,867,164,6296,6341,241,240,165,163,856,854,874,882,1681,1741,1757,2518,220\n        ,6654,6325,6345,833,2352,6676,6669,6236,2351,6064,2282,2862,2852,6143,6145,2859,6139,5831,6687,6695,2411,4516,5811\n        ,4514,1278,6713,4454,4458,4457,6712,5386,4453,6727,6731,6735,1732,1731,2975,1647,1719,5211,1720,6638,1977,1052,4752\n        ,1051,4751,1501,1489,2732,2750,2632,2052,5955,2008,2522,6821,4340,6179,926,5527,944,6836,5380,5365,5457,1285,5596\n        ,6852,5591,5361,6138,2333,4818,4815,4830,2405,6880,175,177,232,233,1241,2478,5661,2923,6298,6310,6889,6629,928,929\n        ,935,1554,2587,3426,3440,3429,6483,6488,6480,3189,4122,4745,2288,6797,5901,5098,5758,332,6918,6919,6920,6921,6922\n        ,6923,6925,6926,6927,6929,6930,6933,6936,6935,6937,6938,6939,6947,7648,6951,6952,6953,6954,6955,6956,6960,6962,6963\n        ,6967,6968,6970,6973,6974,6975,6976,6977,6978,6980,6981,6982,6984,6985,6988,6990,6991,6992,6993,6997,6998,7000,7001\n        ,7004,13394,7007,7008,7009,7010,7011,7012,7017,7018,7022,7023,7024,7025,7027,7029,7031,7034,7038,7039,7040,7041,7042\n        ,7043,7045,7047,7049,7050,7055,7054,7057,7060,7061,7062,7066,7065,7067,7068,7070,7072,7074,7073,7075,7076,7078,7080\n        ,7082,7081,7084,7085,7089,7088,7090,7091,7094,7093,7095,7096,7098,7099,7102,7101,7103,7064,7063,7106,7107,7109,7112\n        ,7113,7114,7115,7116,7117,7118,7119,7120,7121,7123,7125,7127,7128,7133,7134,7135,7136,7137,7138,7139,7140,7141,7143\n        ,7144,7145,7147,7148,7151,7153,7152,7154,7155,7158,7157,7159,7161,7160,7162,7163,7164,7166,7167,7168,7169,7172,7174\n        ,7176,7183,7186,7188,7189,7192,7191,7193,7195,7198,7200,7196,7197,7203,7205,7208,7210,7211,7212,7214,7215,7217,7218\n        ,7219,7221,7222,7223,7225,7229,7232,7238,7239,7240,7241,7243,7245,7246,7247,7250,7253,7254,7255,7256,7258,7259,7261\n        ,7262,7263,7265,7269,7271,7272,7273,7275,7278,7279,7282,7285,7286,7287,7288,7289,7290,7291,7293,7295,7297,7298,7303\n        ,7304,7306,7307,7310,7311,7313,7317,537,7320,7321,7324,7323,7328,7329,7332,7331,7334,7335,7336,7338,7339,7341,7342\n        ,7343,7345,7349,7350,7351,7352,7353,7355,7357,7358,7359,7362,7365,7369,7372,7375,7376,7379,7383,7390,7393,7397,7400\n        ,7403,7411,7413,7414,7415,7416,7418,7420,7422,7425,7430,7431,7432,7434,7437,7441,7442,7443,7446,7448,7450,7457,7460\n        ,7464,7465,7468,7472,7474,7475,7476,7478,7482,7485,7490,7491,7494,7497,7498,7504,7505,7506,7507,7510,7512,7514,7522\n        ,7523,7526,7529,7530,7536,7538,7539,7540,7541,7542,7546,7548,7549,7553,7554,7555,7558,7560,7562,7569,7570,7571,7574\n        ,7576,7578,7586,7587,7590,7593,7594,7600,7605,7602,7604,7603,7611,7608,7610,13504,9849,7615,7619,7622,7627,7632,7637\n        ,7639,7641,7650,7651,7658,7664,7668,7665,11808,7678,7677,7679,7672,7673,7681,7685,7688,7691,7692,7693,7695,7694,7699\n        ,7707,7713,7704,7705,7706,7714,7718,7727,7726,7728,7729,7682,7684,7687,7735,7738,7740,7739,7741,7736,7737,7743,7744\n        ,7746,7748,7747,7756,7760,7759,7761,7757,7765,7766,7767,7768,7769,7770,7774,7776,7782,7786,7783,7784,7785,7788,7789\n        ,7792,7796,7803,7808,7810,7811,7812,7817,7816,7859,7819,7883,7821,7820,7822,7860,7823,7825,7826,7829,7828,7830,7834\n        ,7838,7839,7840,7842,7843,7845,7778,7847,7849,7771,7815,7814,7854,7855,7831,7861,7865,7873,7868,7870,7869,7875,7876\n        ,7878,7881,7882,7884,7887,7886,7892,7894,7897,7893,7899,7902,7906,7905,7907,7903,7904,7909,7910,7914,7915,7917,7918\n        ,7919,7921,7927,7926,7928,7929,7931,13652,7943,13654,7934,7924,7941,7940,7942,7944,7945,7946,7947,7950,7949,7951,7952\n        ,7953,7955,7958,7959,7938,7961,7965,7967,7972,7969,7932,7978,7933,7980,7984,7981,7983,7989,7990,7991,7997,8000,8005\n        ,8004,7966,7971,7999,8014,8015,7995,7994,8016,8021,8022,8025,8028,8029,8035,8036,8037,8042,8043,8044,8047,8049,8048\n        ,8052,8056,8057,8058,8060,8061,8063,8064,8065,8067,8071,8074,8072,8073,8080,8076,8091,8087,8086,8075,8092,8097,8096\n        ,8098,8093,8095,8094,8101,8102,8103,8105,8109,8112,8055,8117,8120,8118,8130,8126,8127,8141,8142,8143,8144,8137,8151\n        ,8149,14013,8885,8154,8159,8158,8162,8163,8164,8165,8171,8174,8178,8183,8186,8194,8195,8198,7710,7676,7709,8201,8200\n        ,8202,8188,8204,8205,8185,8189,8184,8206,8209,8216,8217,8214,8218,8220,8221,8225,8222,8224,8229,8230,8228,8235,8236\n        ,8237,8238,8239,8240,8241,8242,8243,8245,8314,8247,8248,8249,8250,8251,8252,8254,8255,8256,8258,8259,8262,8263,8267\n        ,8264,8266,8271,8276,8277,8279,8280,8281,8284,8286,8287,8288,8294,8295,8300,8302,8304,8312,8313,8212,8316,8320,8322\n        ,8327,8332,8336,8339,8196,8351,8352,8353,8210,8356,8359,8363,8368,8371,8211,8379,7700,8383,7674,7675,8398,8397,8382\n        ,8329,8191,8334,8330,8328,8400,8401,8402,8404,8406,8405,8135,8408,8139,8410,8409,8415,8418,8419,8390,8389,8197,8369\n        ,8427,8428,8429,8430,8431,8432,8434,8435,8436,8438,8439,8442,7856,8444,8445,8446,8448,8449,8451,7836,8453,7832,8459\n        ,8458,8460,8461,8464,8463,8466,8471,8470,8472,8473,8476,8475,8477,8479,8480,8481,8484,12117,8487,8486,8489,8492,8493\n        ,8468,8469,8498,8499,8500,8503,8506,8513,8516,8514,8515,8517,8519,8518,8520,8522,8526,8531,8533,8534,8539,8540,8538\n        ,8542,8543,8545,9530,8546,8547,8548,8549,8550,8551,8553,8523,8509,8563,8562,8505,8508,8504,8568,8570,8576,8599,8579\n        ,8581,8582,8580,8584,8586,8588,8591,8593,8589,8592,8590,8595,8596,8597,8600,8602,8604,8612,8615,8617,8613,8616,8614\n        ,8619,8620,8621,8623,8624,8626,8628,8630,8635,8640,8639,8641,8636,8638,8637,8646,8643,8644,8645,8647,8652,8651,8653\n        ,8648,8650,8649,8658,8657,8661,8664,8663,8665,8666,8667,8668,8669,8670,8671,13649,8674,8684,8677,8675,8678,8679,8686\n        ,8682,8687,8688,8695,8701,8700,8703,8704,8707,8716,8690,8692,8720,8719,8721,8722,8725,8714,8726,8727,8729,8730,8735\n        ,8740,8739,8741,8737,8744,8745,8746,8747,8748,8751,8752,8755,8758,8760,8761,8764,8705,8706,8709,8710,8780,8781,8782\n        ,8783,8784,8659,12546,8791,8792,8803,8805,8806,8807,8840,8824,8825,8831,8832,8836,8835,8838,13141,8717,8713,8847,8711\n        ,8809,8693,8856,8855,8854,8655,8656,8862,8867,8866,8868,8863,8865,8864,8870,8871,8872,8873,8875,8879,8878,8880,8876\n        ,8877,8884,8136,10447,8860,8887,8888,8889,8890,8894,8895,8901,8898,8900,8905,8893,8910,8911,8912,8913,8914,8915,8917\n        ,8919,8921,8922,8926,8930,8931,8933,8942,8943,8947,8951,8952,8954,8955,8958,8085,8089,8090,8084,8967,8968,8969,8971\n        ,8972,8974,8976,8978,8986,8983,8985,8987,8991,8988,8990,8999,8995,9004,9005,9006,9009,9010,9011,9012,9015,9019,9020\n        ,9022,9023,9026,9027,9028,9013,9030,9031,9017,9034,9014,9018,9035,9036,9037,9051,9055,8961,9070,9068,9067,9069,9383\n        ,9075,9080,9079,9081,9076,9078,9077,9083,9088,9087,9089,9084,9086,9085,9091,9099,9103,9104,9108,9109,9113,9115,9118\n        ,9119,9123,9124,9128,9131,9132,9137,9136,9138,9133,9135,9134,9140,9141,9142,9143,9144,9145,9147,9149,9151,9152,12355\n        ,9156,9161,9160,9164,9169,9168,9165,9167,9175,9172,9173,9174,13885,9181,10211,9183,9182,9186,9185,9184,9189,9194,9193\n        ,9195,9190,9192,9191,9197,9198,9204,9200,9199,9207,9206,9209,9213,9111,9215,9218,9219,9221,9222,9223,9229,9233,9232\n        ,9234,9230,9231,9236,9237,9238,9239,9240,9242,9244,9247,9249,9253,9254,9255,9256,9257,9258,9260,9261,9262,9264,9265\n        ,9268,9270,9269,9274,9275,9291,9287,9292,9296,9298,9293,9295,9294,9301,9302,9303,9305,9320,11984,12430,10395,9329\n        ,9336,9346,9345,9344,9350,9355,9358,9360,9356,9357,9363,9364,9375,9377,9374,9378,9387,12529,9399,9391,9392,9393,9394\n        ,9395,9397,9398,9401,9402,9201,9404,9405,9202,9205,9406,9409,9410,9411,9412,9413,9415,9418,9422,9425,9428,9426,9430\n        ,9431,9433,9443,9332,9445,9448,9450,9446,9447,9452,9453,9454,9455,9456,9457,9459,9379,9464,9470,9473,9475,9471,9474\n        ,9472,9477,9479,8733,8734,8732,9481,9486,9485,9487,9482,9484,9483,9490,9491,9493,9492,9494,9495,9498,9497,9499,13821\n        ,9501,9502,9513,9517,9519,9179,9178,9520,9528,9532,9536,9537,9538,9539,9540,9544,9545,9548,9549,9551,9553,9559,9557\n        ,9558,9568,9569,9580,9584,9585,9589,9592,9594,9326,9601,9598,9597,9052,9053,9054,9058,9057,9610,9607,8959,8965,8966\n        ,9618,9616,9621,8147,9622,8411,8412,9624,9625,9628,9646,9647,9642,9644,9643,13889,8927,8928,8929,9661,9662,9663,9664\n        ,9666,11375,9668,9674,9670,9671,11374,9672,9675,9680,9684,9689,9049,8935,13100,9700,9704,9713,9711,9714,9715,12524\n        ,12860,9719,9720,9721,8146,8138,9727,9724,9734,9731,9683,9686,9687,9328,9682,9742,9750,9759,9760,9761,9764,9766,9769\n        ,13647,9775,9776,9777,9778,9779,9780,9782,9783,9788,9786,9789,9790,9797,9795,9796,9803,9798,9808,9807,9806,9814,9813\n        ,9817,9816,9819,9820,9815,9330,9827,9824,9830,9834,9835,9836,9837,9542,9839,9840,9541,9100,9554,9841,9844,9846,9847\n        ,9850,9981,9384,9859,9861,12554,9860,9862,9871,9347,9737,9864,9876,9882,9416,9884,9885,9417,9886,9887,9889,9890,9420\n        ,9893,9421,9896,9897,9899,9901,9902,9903,9904,9907,9909,9910,9911,9917,9923,9920,9928,9930,9812,9566,9811,9562,9933\n        ,9938,9937,9939,9934,9936,9935,9941,9942,9947,9944,8718,9950,9953,9951,9159,9958,9960,9961,9962,9101,9965,9106,9968\n        ,9102,9107,9571,9110,9972,9974,9973,9976,9979,9980,9982,9983,9385,9386,9986,8773,9987,9988,9991,9990,8778,9996,9997\n        ,13707,7806,7802,7807,7801,10001,10002,10003,10006,10008,10009,10010,10016,10017,10021,10025,10026,9462,9463,10035\n        ,9467,9468,9563,9561,9331,10049,10050,10052,10053,10057,10059,9158,10065,10066,10068,10069,9162,10073,10075,10081\n        ,10084,10082,10093,10088,10102,10101,10105,9325,10107,9691,10097,9334,9690,10115,10123,10124,10129,10131,10034,10038\n        ,10033,10138,10139,10145,10146,10151,10191,10158,10159,9286,9061,9284,9065,9062,9066,9335,10172,10167,11753,10175\n        ,11774,10162,10184,10186,10187,10188,10194,9573,9575,9216,10195,10199,10201,10196,10200,10198,10197,10203,10208,10207\n        ,10204,10206,10213,10214,10216,9514,9515,10219,10225,10224,10228,10235,10231,10232,10237,10241,9603,10238,10240,9599\n        ,10245,9702,8529,10250,10252,10261,8937,10149,8940,10269,10265,10277,10278,10274,10275,10280,10281,10282,10285,10287\n        ,10288,10289,10295,10300,10301,10302,10316,10313,11818,10319,10323,7666,10331,7670,10336,10337,10339,10340,10343,10344\n        ,10346,12788,10349,10351,10352,10353,10354,10355,10356,10358,10360,10361,10362,10367,10365,10370,10366,10372,9310\n        ,10375,9314,9311,11368,10379,10383,10388,10390,10396,10397,10405,9634,10413,10409,10410,8698,8697,8775,8853,10421\n        ,10417,10418,9327,10401,10402,10425,10424,10427,10428,10429,10431,10432,10434,10436,10438,10445,10449,10443,10444\n        ,9948,10454,10457,10460,10381,10463,10385,10382,10386,9600,9832,10476,10478,10488,10485,10322,10498,10506,10512,10513\n        ,10514,10515,10519,10520,10523,10527,10529,10524,10526,10525,10174,10173,10532,10535,10540,10539,10536,10538,9120\n        ,9121,9122,10543,10544,10546,10547,9126,10550,9127,10551,10556,10555,10552,10554,10560,10561,10565,10567,10569,10575\n        ,10578,10577,10580,8160,10583,10584,10152,8156,8155,10590,10591,10598,10595,10596,10605,10606,10600,10612,10615,9640\n        ,10624,10625,10628,10029,10631,9581,10627,10634,10637,10633,10640,10645,10644,10646,10641,10643,10642,10648,10653\n        ,10652,10654,10649,10651,10650,14733,10711,10661,10660,10657,10658,11170,10662,10663,10674,10675,10676,10679,10678\n        ,10680,10681,10682,10684,10685,10715,13783,11417,10709,10688,13775,10690,10691,10692,10694,10695,10697,10698,10699\n        ,10701,10705,10707,10710,10713,10720,10721,9582,10724,9587,10727,9583,9588,10729,10730,10731,10734,10733,10737,10738\n        ,10739,10740,10741,10744,10745,10747,10748,10751,10752,10753,10754,10755,10757,10759,10761,10764,10768,10769,10770\n        ,10771,10772,10773,10775,10776,10777,10779,10780,10783,10789,10790,10792,10793,10797,10807,10808,10804,10806,10812\n        ,10813,10814,10815,10816,10819,10820,10822,10823,10826,10828,10829,10830,10832,10835,10836,10839,10842,10844,10843\n        ,10845,10846,10848,10850,10852,10853,10855,10856,10859,10860,10862,10866,10867,10868,10869,10871,10872,10873,10876\n        ,10877,10875,10879,10882,10883,10884,10886,10887,10889,10891,10893,10898,10899,10900,10901,10902,10903,10905,10635\n        ,10914,10924,10932,10937,10936,10933,10935,10908,10909,10940,10941,10944,10912,10947,10913,10953,10950,10956,10957\n        ,10958,10959,10960,10961,10963,10965,10967,10968,10972,10973,10974,10975,10977,10979,10981,10984,10989,10988,10991\n        ,10994,10995,10997,11001,11000,10998,11005,11008,11011,11009,11006,11007,11017,11013,11015,11020,11025,11024,11026\n        ,11021,11023,11022,11028,11032,11040,11036,11038,11044,11030,11046,13789,11048,11049,11055,11212,11063,11051,11078\n        ,11053,11054,11059,11061,11064,11068,11069,11072,11071,11075,11076,11086,11085,11088,11092,11094,11093,11096,11100\n        ,11104,11101,11103,11105,11106,11107,11108,11109,11110,11112,11114,11116,11117,11124,11129,11130,10668,11132,11133\n        ,10672,11136,10669,10673,10667,11138,11139,11140,11142,11145,11146,11149,11152,11158,11159,11154,11156,11155,11169\n        ,11161,11219,11165,11176,11180,11182,11029,11186,11188,11183,11190,11191,11194,11184,11197,11173,11198,11203,11202\n        ,11199,11201,11206,11208,11164,11163,11213,11220,11221,11227,11230,11228,11232,11229,11234,10921,11236,11237,10926\n        ,10922,10927,10920,11243,11244,11246,11254,11251,11257,11260,11261,11270,11266,11267,11273,11274,11275,11277,11281\n        ,11284,11289,11290,11293,11297,11309,11305,11307,10636,11314,11322,11317,11319,11318,11327,11692,11175,11330,11174\n        ,11341,11338,11224,11354,11350,11351,11358,11364,11406,11363,11365,11371,11372,11384,11379,11391,11397,11410,11413\n        ,11414,11427,11424,11411,11412,11408,11433,11435,11436,11438,11440,11439,11441,11444,11442,11448,11449,11450,11451\n        ,11458,11465,11467,11468,11470,11472,11471,11454,11455,11456,11474,11476,11460,11482,11484,11487,11492,11493,11494\n        ,11495,11496,11498,11499,11500,11501,11503,11505,11509,11518,11521,11523,11524,11525,11526,11527,11528,11530,11531\n        ,11534,11535,11536,11537,11538,11540,11541,11542,11543,11544,11545,11546,11547,11549,11550,11551,11553,11554,11557\n        ,11559,11560,11561,11562,11563,11566,11569,8817,8813,8814,8816,11573,11575,11572,11580,11581,11583,11588,11589,11591\n        ,11596,11597,11601,11610,11608,11613,11604,11617,11619,11620,11622,11623,11627,11629,11634,9740,9739,9746,9745,10047\n        ,11647,11642,11644,11643,11651,11652,11655,11656,11659,11658,11661,11663,11664,11666,11668,11669,7857,11681,11684\n        ,11688,11691,11696,11697,11698,11701,11703,11705,10470,11167,10799,10802,10798,11717,11719,11725,11404,11739,11735\n        ,8909,9717,11749,9716,11745,11747,10181,10182,12654,12659,11756,11755,11757,11764,8054,8050,11779,11784,8051,11794\n        ,10917,10919,10916,11806,11809,11811,11813,11761,11816,9440,11971,11823,11824,11827,11830,11831,11837,11839,11842\n        ,11840,11843,11846,11847,11848,11849,11850,11853,11855,11856,11857,11860,11863,11865,11866,11867,11869,11870,11872\n        ,11873,11878,11881,11882,11884,11885,11888,11889,11891,11895,11897,11898,11900,11901,11904,11905,11907,11911,11914\n        ,11915,11917,11918,11921,11922,11924,11925,11928,11929,11931,11935,11937,11938,11939,11941,11944,11945,11948,11951\n        ,11953,11954,11955,7793,11960,10495,10325,11967,11969,11972,11978,9074,11981,11986,11988,11991,11989,11997,12001,10308\n        ,12005,12007,12002,12004,12003,12009,10533,12011,10534,11817,12013,12016,10329,12020,12017,12019,12024,12026,12029\n        ,12030,12031,12036,12032,12038,12039,12040,12042,12045,12049,12054,12053,12050,12052,12058,12059,12060,12061,12062\n        ,12066,12068,12069,12071,12075,12076,12077,12079,12080,12082,12083,12084,12086,12090,12091,12092,12093,13731,12098\n        ,8566,9527,12105,12108,8556,8561,8557,8524,8528,8525,12121,12122,12124,12129,12130,12132,12136,12137,12138,12140,7936\n        ,7937,7923,12145,12146,13687,12152,12150,12158,12160,12161,12163,12164,12168,12170,12177,12178,12183,12184,12186,12187\n        ,12193,12195,12196,12197,12198,12199,12200,12201,12205,12209,12210,12213,14035,12180,12225,12226,12230,12233,8892\n        ,8358,8192,8180,8179,8181,8908,8393,8349,8395,8298,8344,8343,8167,8348,8296,8168,8173,8169,12242,12246,12251,12255\n        ,12254,12252,12259,12263,12262,12260,12274,12275,12268,12278,12282,12272,12269,12291,12294,12295,12296,8998,9001,9002\n        ,8997,12306,12309,12313,11793,11769,11792,12319,11767,11768,11771,11772,12321,12323,12243,12244,8083,12248,12329,12331\n        ,8079,8082,8077,8078,12337,12339,12346,11776,11777,11780,12354,12358,12353,12360,8859,8861,11605,8772,8774,12370,12374\n        ,12300,12382,12385,12390,12398,12395,12402,12410,12411,12412,12415,12417,12425,9635,9639,9636,7962,7963,12435,7976\n        ,8011,9225,12445,12448,12453,12456,12459,12460,12463,12471,12472,12474,12475,12479,12481,12486,7722,7724,8962,12492\n        ,12498,12499,12503,12510,10153,9654,9655,9656,9659,12519,12240,11736,12521,12522,12525,11737,12541,7900,12544,12548\n        ,12545,12547,12552,9097,9094,9098,9092,9093,12559,10121,10166,12557,10120,12562,10117,10116,12567,10170,12569,12571\n        ,12570,9370,9751,9369,9276,12527,12530,9337,9282,12576,12577,12578,12585,12581,9281,9278,7813,7862,12590,12589,12592\n        ,12595,12596,12597,12598,12599,12601,12602,11999,12608,8457,8456,12609,12611,12612,12000,12618,12625,12624,12629,7837\n        ,12627,12631,12632,12636,7833,12643,12651,12655,7671,12668,7753,7701,7702,12680,12677,12678,12683,12684,12682,12689\n        ,12691,12694,12695,12700,12702,12703,12704,12706,12710,12713,12718,12719,12722,12735,7716,7697,7698,12727,12728,12749\n        ,12731,8272,8273,12758,12764,12765,10309,12768,12772,10299,10298,12781,12782,12784,10297,10305,10306,10296,12790,12791\n        ,10330,10334,12795,12794,12797,12798,12803,12811,12818,12819,12822,12666,12830,12662,12663,12838,12839,9338,9339,12842\n        ,9679,9504,9367,9993,9366,9368,9372,9511,9503,12854,12864,12867,9390,9388,9389,12870,12872,9509,9506,12856,9507,9505\n        ,12857,12886,12882,8787,12846,12899,12900,12894,12895,12903,12905,11979,12909,12911,9046,9321,9042,9040,9041,9323\n        ,11983,9730,9736,12923,9380,9072,9073,13036,12930,12934,12935,12931,9341,9343,11968,12946,10326,12962,12958,13762\n        ,9626,9521,8496,12967,9525,12393,9522,9523,12969,12970,12977,12974,12975,12979,12989,12990,12988,12995,10168,12986\n        ,12987,12997,13000,13002,13003,13005,13007,13016,13021,13026,12575,10259,8950,9318,12914,9868,8946,8949,8944,8945\n        ,9870,9874,9865,13037,9733,12916,9348,12939,13049,9799,9801,13052,13053,13055,13056,13060,13062,13071,13069,13070\n        ,13075,13074,13077,13078,13082,13086,13087,13083,13112,9698,13105,13107,13084,13117,11671,13122,13125,11675,11676\n        ,11678,11680,11672,8829,13139,8660,13148,13155,13159,13163,13167,13170,10178,10176,13172,10111,10109,10108,8820,13177\n        ,13181,13185,13186,13012,10169,13191,13019,9567,11418,11419,11369,13205,13206,13208,13207,13217,13218,13219,13220\n        ,13222,13225,13227,13234,13232,13233,13235,13240,13239,13241,13245,13243,13244,13247,13246,13248,13249,13267,13263\n        ,13265,13216,13277,13287,13295,13303,13307,13308,13309,13311,13312,13314,13315,13316,13318,13322,13324,13325,13327\n        ,13328,13331,13332,13334,13338,13340,13342,13347,13348,13350,13351,13355,13357,13364,13370,13371,13372,13375,13377\n        ,13378,13379,13385,13387,13388,13391,13395,13403,13404,13407,13411,13419,13418,13420,13421,13423,13425,13429,13430\n        ,13436,13433,13440,13441,13443,13447,13448,13449,13450,13451,13454,13457,13461,13469,13474,13475,13476,13478,13481\n        ,13482,13485,13488,13492,13497,13494,13496,13495,13502,13501,13550,13503,13505,13506,13508,13509,13515,13516,13519\n        ,13522,13523,13529,13531,13532,13533,13535,13538,13539,13542,13545,13548,10785,13553,13559,13563,13560,13569,13237\n        ,13258,13261,7662,7654,7634,7646,6944,7015,13238,13291,7014,13298,6943,6945,7633,7635,7655,8754,8841,8694,13906,6994\n        ,13209,13211,13288,7614,9784,13596,13595,10177,9785,9693,9044,8941,13607,9043,9696,10147,8936,13102,9319,9316,13615\n        ,9857,9095,9071,9826,8213,13585,11742,13632,8897,13635,13577,8822,9315,8672,10613,8793,10623,13799,13796,8685,8681\n        ,8736,7911,7913,7912,8565,8465,8483,10155,9512,10042,9271,8497,7979,8689,8821,11637,11673,7754,12672,7790,9277,8227\n        ,7715,12741,7683,12531,9697,9772,12151,12154,12159,9852,6950,6948,7005,8883,8134,10327,13236,13252,6972,6971,13257\n        ,7752,7749,7758,9741,7772,7779,8577,10784,13549,13439,13444,13427,13432,13428,13434,10574,11407,12095,6142,13606,13050\n        ,6094,971,7824,9699,5953,12959,2051,9272,1056,7935,11162,11326,10683,10687,11047,11050,7667,7185,8797,8802,8795,8798\n        ,10619,12955,10616,6818,13669,5897,11380,10321,10320,12674,13135,12487,13827,5277,5525,6186,5526,9660,5346,5342,11821\n        ,1999,9340,5890,2122,13094,6135,6083,13857,9694,6011,5718,5991,6267,408,3881,3648,9669,9177,9176,9651,9650,13890,9793\n        ,12301,2182,1968,2257,2256,2747,2489,2360,13901,2517,6643,8842,8845,13583,1230,1231,8133,9665,11402,13927,3816,5517\n        ,6017,5501,7818,12543,7872,5484,13946,2932,5688,2933,13959,5488,13962,5494,5503,5495,9324,8541,4758,5825,9692,13013\n        ,11760,12984,11759,3158,4476,11752,2275,5874,2873,10267,5878,5873,14004,5876,6068,1237,1238,13041,14008,13042,12937\n        ,456,14182,14031,14027,14204,14178,14020,14170,14044,14162,14052,14061,14032,14190,14194,14186,14150,14087,14088,14224\n        ,14089,14096,14093,14232,14097,14104,14101,14240,14105,14244,14109,14248,14113,14252,14117,14256,14121,14128,14125\n        ,14130,14131,14266,14135,14140,14137,14141,14149,14085,14157,14086,14092,14091,14166,14095,14100,14099,14174,14103\n        ,14108,14107,14112,14111,14116,14115,14120,14119,14124,14123,14198,14127,14200,14129,14134,14133,14139,14143,14062\n        ,14065,14219,14066,14054,14053,14228,14057,14046,14045,14236,14049,14022,14021,14042,14041,14072,14071,14073,14082\n        ,14075,14074,14260,14078,14262,14028,14025,14024,14272,14037,14033,14151,1050,12179,14208,58,14305,14307,14306,14309\n        ,14311,14310,14317,14314,14319,14318,14327,14407,14321,14323,14322,14326,14331,14330,14399,14335,14334,14338,14341\n        ,14342,14345,14347,14346,14350,14354,14355,14357,14359,14358,14362,14365,14367,14366,14370,14373,14374,14377,14379\n        ,14378,14382,14385,14386,14389,14390,14393,14394,14401,14402,14409,14411,14410,14413,14415,14414,14419,14418,14423\n        ,14422,14509,14425,14426,14430,14429,14434,14433,14439,14440,14443,14444,14447,14449,14452,14454,14456,14455,14459\n        ,14462,14464,14463,14467,14470,14471,14474,14476,14475,14479,14482,14483,14486,14487,14490,14491,14493,14498,14499\n        ,14501,14506,14504,14550,14520,14518,14519,14515,14700,14522,14523,14525,14532,14530,14531,14535,14538,14539,14546\n        ,14547,14551,14556,14555,14560,14558,14559,14563,14654,14568,14566,14567,14572,14570,14571,14575,14580,14579,14584\n        ,14582,14583,14587,14592,14591,14596,14595,14543,14599,14544,14527,14603,14528,14698,14611,14609,14610,14614,14702\n        ,14613,14615,14622,14620,14621,14625,14628,14629,14693,14641,14640,14644,14643,14647,14656,14652,14650,14651,14660\n        ,14658,14659,14663,14668,14667,14672,14670,14671,14675,14680,14679,14684,14683,14633,14687,14634,14617,14691,14618\n        ,14635,14695,14606,14605,14705,14516,14513,14607,14315,13200,2820,9376,2093,10659,10656,3815,3341,3336,9157,12505\n        ,5316,14750,9613,14754,14755,14756,14757,14758,14760,14761,14762,14764,14765,14766,14767,14768,14769,14770,14771,14772\n        ,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14861,14794,14841,14805,14833,14923\n        ,14932,14810,14825,14786,14788,14789,14792,14793,14797,14798,14800,14801,14802,14804,14806,14808,14809,14811,14813\n        ,14814,14816,14817,14818,14819,14821,14926,14930,14822,14824,14826,14828,14829,14830,14832,14834,14836,14837,14838\n        ,14840,14842,14845,14846,14849,14850,14852,14853,14854,14856,14857,14862,14864,14869,14870,14875,14877,14878,14880\n        ,14886,14888,14893,14894,14899,14900,14901,14902,14903,14904,14910,14912,14916,14917,14919,14918,14934,14939,14940\n        ,14945,14946,14951,14952,14957,14961,14960,14959,14958,14965,14964,14963,14969,14968,14967,14973,14972,14971,14977\n        ,14976,14975,14974,14981,14980,14979,14985,14984,14983,14989,14988,14987,14986,14991,14990,14995,14994,14999,14998\n        ,15005,15004,15002,15009,15006,15013,15012,15011,15010,15017,15015,15014,15020,15019,15018,15025,15023,15029,15028\n        ,15027,15026,15032,15031,15030,15036,15034,15041,15040,15039,15038,15044,15043,15042,15047,15046,15051,15057,15056\n        ,15055,15054,15061,15059,15058,15065,15064,15062,15067,15073,15071,15074,15078,15082,15088,15087,15092,15091,15090\n        ,15096,15094,15100,15104,15112,15111,15116,15121,15120,15119,15118,15124,15123,15122,15128,15127,15126,15132,15131\n        ,15130,15137,15136,15135,15134,15140,15139,15138,15144,15143,15142,15148,15146,15150,15154,15161,15159,15158,15165\n        ,15164,15162,15169,15168,15167,15166,15173,15172,15171,15177,15176,15175,15181,15179,15185,15184,15183,15182,15189\n        ,15188,15187,15192,15190,15197,15196,15194,15200,15198,15204,15212,15211,15210,15217,15216,15214,15221,15219,15218\n        ,15229,15227,15231,15235,15239,15244,15243,15249,15247,15252,15250,15254,15258,15269,15266,15277,15276,15275,15279\n        ,15278,15285,15284,15283,15282,15289,15288,15286,15293,15292,15290,15297,15296,15294,15300,15299,15298,15305,15304\n        ,15303,15302,15309,15308,15306,15313,15312,15310,15316,15314,15321,15319,15318,15324,15323,15322,15327,15326,15331\n        ,15330,15337,15334,15341,15339,15338,15345,15343,15342,15349,15348,15353,15352,15355,15360,15359,15358,15364,15363\n        ,15362,15369,15368,15373,15372,15377,15376,15381,15380,15379,15378,15383,15382,15388,15387,15386,15391,15390,15395\n        ,15394,15399,15404,15403,15409,15408,15413,15412,15411,15417,15416,15415,15419,15418,15423,15422,15427,15426,15432\n        ,15431,15430,15437,15436,15441,15440,15439,15445,15444,15449,15448,15451,15456,15455,15460,15459,15464,15462,15467\n        ,15472,15476,15474,15479,15484,15487,15492,15491,15490,15497,15500,15498,15502,15506,15516,15520,15519,15523,15522\n        ,15529,15527,15533,15537,15538,15545,15542,15548,15552,15550,15555,15560,15569,15573,15570,15575,15578,15583,15587\n        ,15593,15591,15594,15600,15607,15630,15635,15646,15647,15648,15649,15650,15651,15652,15654,15655,15656,15658,15659\n        ,15660,15662,15663,15664,15665,15666,15667,15668,15670,15671,15672,15674,15675,15676,15677,15680,15681,15684,15685\n        ,15688,15689,15690,15691,15693,15694,15697,15698,15699,15700,15701,15702,15704,15705,15707,15708,15709,15710,15712\n        ,15714,15715,15716,15717,15719,15720,15721,15723,15725,15726,15727,15728,15729,15731,15732,15733,15736,15737,15740\n        ,15742,15743,15744,15745,15746,15748,15749,15750,15751,15753,15756,15758,15760,15765,15769,15773,15775,15776,15779\n        ,15780,15781,15783,15785,15787,15791,15799,15800,15803,15806,15807,15808,15809,15811,15812,15813,15815,15816,15817\n        ,15819,15820,15821,15822,15823,15824,15825,15827,15828,15829,15831,15832,15833,15835,15837,15841,15845,15846,15848\n        ,15849,15850,15851,15853,15854,15855,15856,15857,15858,15859,15860,15862,15863,15864,15866,15868,15870,15871,15872\n        ,15873,15874,15875,15876,15879,15881,15882,15883,15885,15887,15889,15891,15899,15900,15901,15902,15903,15905,15906\n        ,15908,15909,15914,15916,15920,15924,15928,15931,15932,15934,15936,15939,15941,15945,15949,15954,15957,15962,15963\n        ,15964,15968,15969,15970,15971,15972,15973,15974,15975,15977,15978,15979,15981,15982,15983,15985,15987,15988,15989\n        ,15990,15991,15992,15993,15994,15995,15997,15998,15999,16001,16003,16005,16006,16008,16009,16011,16012,16013,16016\n        ,16017,16020,16021,16022,16025,16026,16028,16029,16030,16032,16033,16034,16035,16038,16039,16044,16047,16048,16049\n        ,16051,16052,16053,16054,16055,16058,16059,16062,16063,16066,16067,16068,16069,16072,16073,16075,16076,16077,16080\n        ,16081,16084,16085,16088,16091,16092,16094,16095,16098,16099,16100,16102,16103,16104,16108,16109,16112,16113,16116\n        ,16117,16119,16120,16121,16122,16123,16126,16127,16128,16130,16131,16134,16135,16140,16143,16144,16147,16148,16151\n        ,16153,16156,16159,16163,16165,16168,16171,16176,16179,16180,16181,16182,16187,16189,16193,16197,16203,16207,16208\n        ,16212,16213,16214,16216,16218,16222,16229,16230,16233,16235,16239,16241,16244,16247,16254,16258,16261,16264,16269\n        ,16272,16276,16278,16280,16285,16286,16297,16316,16323,16334,16335,16336,16337,16338,16339,16340,16342,16343,16344\n        ,16346,16347,16348,16350,16352,16353,16354,16357,16358,16361,16362,16363,16364,16365,16366,16367,16369,16370,16371\n        ,16374,16375,16378,16379,16381,16382,16383,16386,16387,16468,16406,16522,16390,16391,16393,16394,16396,16400,16401\n        ,16402,16407,16408,16409,16410,16411,16412,16413,16414,16415,16417,16418,16419,16421,16422,16423,16425,16426,16427\n        ,16429,16430,16433,16434,16437,16438,16439,16440,16441,16442,16443,16444,16446,16447,16450,16451,16454,16456,16458\n        ,16462,16466,16467,16469,16470,16471,16473,16474,16475,16477,16478,16479,16483,16488,16489,16490,16491,16492,16493\n        ,16495,16496,16497,16498,16499,16500,16503,16504,16506,16507,16511,16512,16514,16516,16519,16525,16523,16524,16526\n        ,16528,16533,16535,16537,16542,16543,16544,16545,16546,16547,16549,16550,16551,16553,16555,16557,16558,16559,16561\n        ,16562,16565,16566,16570,16571,16572,16573,16574,16575,16576,16578,16579,16583,16586,16587,16588,16590,16591,16595\n        ,16598,16599,16600,16601,16603,16604,16605,16607,16608,16609,16610,16611,16615,16618,16620,16621,16622,16623,16624\n        ,16625,16626,16627,16628,16630,16631,16632,16634,16636,16638,16640,16641,16642,16645,16649,16650,16651,16652,16653\n        ,16654,16655,16657,16658,16659,16662,16667,16669,16671,16678,16680,16681,16682,16684,16685,16686,16688,16689,16692\n        ,16693,16694,16700,16701,16702,16703,16704,16705,16706,16708,16709,16711,16712,16713,16714,16717,16720,16721,16722\n        ,16725,16727,16729,16730,16734,16740,16743,16745,16746,16750,16752,16758,16759,16760,16761,16762,16763,16764,16767\n        ,16768,16769,16771,16772,16773,16775,16776,16777,16779,16780,16783,16784,16786,16787,16788,16789,16791,16792,16794\n        ,16795,16796,16797,16799,16800,16801,16802,16804,16805,16806,16808,16809,16810,16812,16816,16820,16822,16823,16824\n        ,16825,16826,16829,16830,16831,16832,16833,16835,16836,16837,16838,16840,16841,16842,16844,16846,16847,16848,16851\n        ,16852,16855,16858,16859,16860,16861,16862,16865,16866,16867,16868,16869,16870,16871,16872,16875,16876,16877,16879\n        ,16881,16883,16885,16888,16894,16895,16896,16897,16898,16901,16903,16904,16905,16908,16909,16912,16913,16916,16917\n        ,16919,16920,16923,16924,16927,16928,16929,16930,16931,16935,16936,16939,16940,16943,16944,16947,16948,16950,16951\n        ,16952,16953,16955,16958,16959,16960,16964,16967,16968,16969,16970,16971,16975,16976,16980,16983,16984,16987,16988\n        ,16991,16992,16993,16996,16997,17000,17001,17004,17007,17008,17011,17012,17014,17015,17016,17017,17020,17022,17024\n        ,17025,17027,17030,17032,17034,17038,17042,17047,17051,17052,17054,17056,17060,17064,17068,17070,17074,17077,17078\n        ,17080,17085,17087,17092,17094,17096,17100,17104,17110,17114,17117,17118,17120,17122,17126,17135,17139,17140,17143\n        ,17145,17148,17150,17157,17177,17181,17207,17209,17224,17238,17242,17243,17246,17457,17247,17248,17249,17251,17252\n        ,17253,17255,17256,17257,17259,17260,17261,17263,17264,17265,17267,17268,17269,17467,17272,17273,17275,17276,17277\n        ,17279,17280,17281,17283,17284,17285,17287,17289,17290,17291,17294,17295,17296,17299,17300,17303,17304,17307,17308\n        ,17311,17312,17315,17316,17320,17323,17324,17327,17328,17331,17332,17335,17368,17338,17339,17340,17343,17344,17347\n        ,17348,17351,17352,17355,17356,17359,17360,17363,17400,17404,17408,17412,17365,17366,17367,17370,17371,17374,17375\n        ,17378,17379,17382,17383,17386,17387,17390,17391,17394,17395,17398,17399,17402,17403,17406,17407,17410,17413,17415\n        ,17418,17421,17424,17427,17430,17442,17434,17433,17436,17364,17449,17453,17450,17481,17454,17458,17459,17463,17464\n        ,17491,17468,17495,17472,17475,17477,17292,17245,17244,17482,17438,17487,17431,17271,17270,17319,17318,17828,17505\n        ,17767,17543,17502,17503,17504,17506,17507,17508,17510,17511,17512,17514,17515,17516,17518,17519,17520,17522,17523\n        ,17524,17752,17533,17803,17530,17531,17532,17534,17535,17536,17538,17539,17540,17542,17544,17553,17591,17551,17552\n        ,17555,17556,17559,17560,17563,17564,17567,17568,17571,17572,17581,17579,17580,17583,17584,17587,17588,17592,17549\n        ,17597,17635,17595,17596,17599,17600,17603,17604,17607,17608,17611,17612,17615,17616,17807,17619,17622,17667,17625\n        ,17671,17629,17675,17679,17636,17637,17638,17640,17641,17644,17645,17648,17649,17652,17653,17656,17657,17660,17661\n        ,17664,17665,17668,17669,17672,17673,17676,17677,17681,17685,17683,17686,17689,17692,17695,17698,17759,17710,17711\n        ,17713,17716,17719,17722,17725,17728,17731,17734,17737,17740,17618,17745,17749,17574,17526,17529,17775,17756,17763\n        ,17760,17500,17499,17548,17703,17702,17707,17817,17633,17813,17630,17809,17626,17623,17799,17797,17772,17528,17527\n        ,17577,17576,17791,17792,17787,17788,17783,17784,17821,17780,17825,17546,17498,17501,17776,17836,17837,17838,17839\n        ,17840,17841,17842,17844,17845,17846,17848,17849,17850,17852,17853,17854,17857,17858,17859,17860,17861,17862,17865\n        ,17866,17869,17870,17873,17874,17877,17878,17881,17882,17950,17946,17942,17938,17887,17915,17885,17886,17889,17890\n        ,17893,17894,17897,17898,17901,17902,17905,17906,17909,17910,17913,17914,17917,17921,17922,17925,17926,17929,17930\n        ,17933,17934,17937,17941,17945,17949,17952,17953,17954,17955,17956,17957,17958,17960,17961,17962,17965,17966,17967\n        ,17969,17970,17971,17973,17975,17976,17977,17978,17979,17981,17982,17983,17985,17986,17987,17988,17989,17990,17992\n        ,17993,17994,17996,17998,18000,18001,18002,18003,18005,18006,18007,18008,18009,18010,18012,18013,18014,18016,18017\n        ,18018,18020,18022,18024,18025,18026,18027,18028,18029,18030,18032,18033,18034,18036,18037,18038,18041,18042,18043\n        ,18044,18046,18048,18049,18050,18051,18053,18054,18055,18057,18058,18059,18060,18061,18062,18064,18065,18066,18068\n        ,18070,18072,18073,18074,18075,18077,18078,18079,18081,18082,18083,18084,18085,18086,18088,18089,18090,18092,18094\n        ,18096,18097,18098,18099,18100,18102,18103,18104,18106,18107,18108,18110,18111,18112,18113,18115,18117,18119,18120\n        ,18121,18122,18123,18124,18125,18126,18129,18130,18131,18133,18134,18137,18138,18141,18142,18146,18147,18150,18152\n        ,18154,18156,18160,18167,18171,18177,18178,18179,18181,18182,18186,18187,18190,18191,18194,18195,18198,18200,18202\n        ,18203,18204,18206,18209,18210,18212,18217,18218,18220,18225,18226,18231,18234,18235,18239,18242,18248,18250,18251\n        ,18252,18254,18257,18258,18260,18265,18266,18268,18273,18274,18279,18282,18283,18287,18290,18297,18298,18299,18300\n        ,18302,18305,18306,18308,18313,18314,18316,18322,18323,18327,18330,18331,18335,18338,18344,18346,18348,18352,18359\n        ,18363,18368,18370,18371,18372,18375,18378,18379,18382,18383,18386,18387,18391,18392,18394,18395,18397,18399,18400\n        ,18403,18405,18408,18411,18413,18418,18419,18422,18426,18427,18430,18435,18440,18441,18442,18445,18448,18449,18452\n        ,18453,18458,18461,18464,18465,18466,18467,18469,18470,18471,18473,18474,18475,18476,18477,18478,18480,18481,18482\n        ,18484,18486,18488,18489,18490,18491,18492,18493,18494,18496,18497,18498,18501,18502,18503,18505,18506,18507,18509\n        ,18511,18512,18513,18514,18515,18516,18517,18518,18521,18522,18523,18525,18526,18527,18529,18530,18531,18533,18535\n        ,18536,18537,18538,18539,18541,18542,18543,18545,18546,18547,18549,18550,18551,18552,18553,18554,18557,18559,18560\n        ,18561,18562,18563,18564,18565,18566,18568,18569,18570,18573,18574,18575,18577,18578,18579,18581,18583,18584,18586\n        ,18587,18589,18590,18593,18594,18598,18599,18602,18603,18607,18608,18609,18610,18611,18612,18613,18615,18616,18617\n        ,18619,18620,18621,18623,18624,18626,18627,18628,18630,18632,18633,18634,18635,18637,18638,18639,18640,18641,18642\n        ,18645,18646,18649,18650,18653,18654,18656,18657,18661,18665,18667,18671,18675,18676,18680,18688,18689,18690,18693\n        ,18694,18696,18697,18700,18701,18704,18705,18709,18712,18713,18715,18717,18719,18721,18722,18727,18729,18730,18735\n        ,18737,18738,18740,18744,18745,18748,18753,18760,18761,18763,18765,18767,18769,18770,18775,18777,18778,18783,18785\n        ,18786,18788,18792,18793,18796,18801,18808,18809,18810,18813,18815,18817,18818,18823,18825,18826,18831,18832,18833\n        ,18836,18840,18841,18844,18849,18857,18859,18863,18867,18868,18872,18880,18881,18883,18884,18887,18888,18889,18892\n        ,18893,18896,18897,18900,18904,18905,18907,18908,18910,18912,18915,18918,18920,18923,18926,18928,18929,18933,18936\n        ,18937,18941,18944,18953,18954,18955,18958,18962,18963,18966,18967,18969,18974,18976,18980,18990,18992,19000,19001\n        ,19002,19003,19004,19005,19006,19008,19009,19010,19012,19013,19014,19016,19017,19018,19020,19021,19022,19024,19025\n        ,19026,19028,19029,19030,19032,19033,19034,19036,19037,19038,19040,19041,19042,19044,19046,19049,19050,19051,19053\n        ,19054,19057,19058,19061,19062,19065,19066,19069,19070,19073,19074,19077,19078,19081,19082,19085,19086,19089,19090\n        ,19094,19097,19098,19099,19101,19102,19105,19106,19109,19110,19113,19114,19117,19118,19121,19122,19125,19126,19129\n        ,19130,19133,19134,19137,19138,19142,19144,19146,19147,19150,19153,19156,19159,19162,19165,19168,19171,19174,19181\n        ,19182,19184,19187,19190,19193,19196,19199,19202,19205,19208,19211,19216,19217,19218,19219,19220,19221,19222,19224\n        ,19225,19226,19228,19229,19230,19232,19233,19234,19236,19237,19238,19240,19241,19242,19244,19245,19246,19248,19249\n        ,19250,19252,19253,19254,19256,19257,19258,19260,19262,19265,19266,19267,19269,19270,19273,19274,19277,19278,19281\n        ,19282,19285,19286,19289,19290,19293,19294,19297,19298,19301,19302,19305,19306,19310,19313,19314,19315,19317,19318\n        ,19321,19322,19325,19326,19329,19330,19333,19334,19337,19338,19341,19342,19345,19346,19349,19350,19353,19354,19358\n        ,19360,19362,19363,19366,19369,19372,19375,19378,19381,19384,19387,19390,19397,19398,19400,19403,19406,19409,19412\n        ,19415,19418,19421,19424,19427,19432,19433,19434,19435,19436,19437,19438,19440,19441,19442,19443,19444,19445,19446\n        ,19449,19450,19452,19453,19454,19455,19456,19457,19458,19460,19465,19469,19470,19471,19473,19476,19477,19478,19479\n        ,19480,19481,19482,19484,19486,19489,19492,19493,19495,19496,19497,19498,19500,19502,19509,19510,19511,19513,19516\n        ,19517,19518,19521,19522,19524,19525,19529,19530,19533,19534,19536,19537,19538,19539,19540,19541,19543,19544,19545\n        ,19546,19548,19549,19551,19552,19553,19554,19556,19557,19558,19560,19561,19562,19563,19565,19566,19568,19569,19570\n        ,19574,19576,19577,19578,19582,19585,19586,19588,19589,19590,19591,19592,19593,19594,19595,19596,19597,19598,19601\n        ,19602,19604,19605,19607,19608,19609,19610,19611,19614,19616,19619,19620,19621,19626,19627,19628,19629,19632,19633\n        ,19634,19636,19639,19640,19641,19644,19645,19647,19648,19650,19652,19653,19654,19658,19660,19661,19663,19664,19666\n        ,19668,19676,19677,19679,19680,19682,19684,19692,19700,19702,19703,19704,19708,19709,19710,19711,19712,19713,19714\n        ,19716,19717,19718,19720,19721,19722,19725,19726,19728,19729,19730,19733,19734,19737,19738,19741,19742,19743,19744\n        ,19745,19749,19751,19752,19753,19754,19757,19761,19764,19765,19766,19767,19768,19769,19770,19771,19772,19774,19776\n        ,19777,19779,19780,19781,19782,19784,19785,19787,19788,19789,19790,19792,19793,19794,19796,19798,19800,19802,19806\n        ,19807,19810,19811,19812,19813,19814,19816,19817,19819,19821,19823,19824,19827,19828,19829,19832,19834,19840,19842\n        ,19850,19852,19853,19855,19859,19860,19863,19867,19871,19874,19877,19879,19882,19884,19892,19894,19895,19917,19922\n        ,19937,19946,19943,19954,19955,19956,19957,19958,19959,19961,19962,19963,19964,19965,19966,19967,19968,19969,19970\n        ,19971,19972,19974,19975,19976,19978,19979,19980,19982,19985,19986,19987,19988,19990,19991,19992,19994,19997,19998\n        ,19999,20000,20002,20003,20004,20006,20007,20009,20011,20013,20014,20015,20016,20018,20021,20022,20024,20025,20026\n        ,20027,20030,20031,20032,20033,20034,20035,20038,20039,20040,20041,20042,20043,20045,20046,20047,20049,20050,20051\n        ,20052,20053,20054,20055,20058,20059,20060,20062,20065,20066,20070,20072,20074,20076,20080,20083,20086,20088,20090\n        ,20122,20123,20121,20120,20127,20126,20125,20124,20130,20129,20128,20131,20134,20133,20132,20138,20137,20136,20140\n        ,20143,20142,20145,20144,20147,20146,20150,20148,20153,20154,20152,20159,20157,20161,20163,20167,20166,20165,20169\n        ,20168,20170,20172,20175,20173,20176,20179,20177,20180,20183,20182,20181,20184,20187,20185,20188,20191,20189,20192\n        ,20195,20193,20196,20199,20197,20201,20202,20205,20208,20206,20211,20212,20215,20214,20213,20218,20221,20222,20227\n        ,20226,20231,20232,20236,20235,20239,20245,20244,20246,20248,20247,20251,20252,20257,20256,20259,20262,20263,20265\n        ,20266,20268,20271,20269,20278,20282,20284,20288,20291,20292,20295,20303,20309,20313,20317,20321,20325,20484,20480\n        ,20476,20472,20333,20337,20341,20345,20349,20354,20361,20297,20305,20311,20315,20319,20323,20327,20396,20400,20404\n        ,20410,20335,20339,20343,20347,20351,20356,20363,20298,20296,20304,20310,20314,20318,20322,20326,20336,20334,20338\n        ,20342,20350,20364,20438,20366,20375,20373,20377,20381,20385,20389,20393,20397,20401,20405,20412,20414,20418,20422\n        ,20426,20430,20440,20444,20442,20452,20450,20454,20458,20462,20466,20470,20473,20477,20481,20485,20489,20490,20493\n        ,20497,20501,20505,20509,20513,20439,20614,20431,20427,20423,20419,20415,20408,20406,20402,20398,20394,20390,20386\n        ,20382,20378,20374,20581,20585,20520,20522,20521,20524,20525,20528,20330,20532,20331,20536,20332,20540,20541,20544\n        ,20545,20548,20549,20552,20553,20557,20559,20563,20300,20299,20301,20306,20308,20572,20307,20371,20582,20579,20367\n        ,20574,20512,20516,20571,20368,20597,20602,20357,20600,20358,20606,20359,20360,20608,20613,20433,20611,20434,20615\n        ,20435,20436,20598,20631,20445,20623,20446,20627,20447,20448,20635,20596,20607,20641,20355,20346,20329,20648,20656\n        ,20660,20664,20814,20672,20676,20680,20824,20685,20692,20902,20758,20650,20658,20662,20666,20816,20674,20678,20682\n        ,20740,20687,20747,20898,20980,20651,20649,20659,20657,20661,20665,20669,20673,20683,20681,20686,20695,20693,20706\n        ,20704,20714,20712,20716,20720,20726,20728,20735,20737,20839,20750,20748,20757,20756,20767,20760,20764,20766,20842\n        ,20942,20778,20841,20776,20777,20786,20781,20784,20785,20794,20790,20792,20793,20796,20797,20800,20801,20810,21020\n        ,20809,20813,20670,20668,20671,20684,20773,20741,20724,20830,20774,20821,20772,20789,20779,20846,20780,20844,20850\n        ,20845,20734,20852,20733,20677,20861,20863,20862,20865,20866,20869,20870,20874,20877,20879,20856,20881,20857,20885\n        ,20858,20859,20753,20967,20895,20812,20909,20752,20751,20988,20897,20906,20911,20918,20688,20916,20689,20922,20690\n        ,20691,20924,20929,20743,20927,20744,20931,20745,20746,20912,20947,20768,20939,20769,20943,20770,20771,20910,20923\n        ,20953,20951,20965,20761,20755,20970,20968,20696,20974,20697,20972,20698,20699,20702,20754,20759,20998,20990,20652\n        ,20994,20653,21000,20654,20655,21002,21007,20707,21005,20708,21009,20709,20710,21019,20992,20803,21017,20804,21021\n        ,20805,20806,20991,21030,21036,21001,21044,21052,20892,20903,21046,21049,20893,21042,20894,21076,21051,21055,21047\n        ,21056,21048,21059,21058,21071,21069,21070,21073,21074,21077,21078,21081,21082,21085,21086,21089,21090,21095,21092\n        ,21098,21103,21101,21102,21105,21106,21109,21110,21113,21114,21117,21118,21121,21122,21125,21126,21130,21135,21133\n        ,21060,21137,21061,21141,21062,21145,21063,21149,21064,21153,21065,21157,21066,21067,20976,21168,21176,21173,20915\n        ,21177,21186,20904,20914,20694,21094,20701,20765,20985,21197,20700,21213,21289,21299,21304,21311,21314,21355,21359\n        ,21410,21422,21486,21625,21704,21721,21913,21917,21205,21204,21203,21202,21209,21208,21207,21206,21212,21211,21210\n        ,21217,21216,21215,21214,22717,21221,21220,21219,21218,21225,21224,21223,21228,21227,21226,21233,21232,21231,21230\n        ,21237,21236,21234,21241,21240,21239,21238,21244,21243,21242,21249,21248,21246,21253,21252,21251,21258,21274,21256\n        ,21255,21254,21261,21260,21259,21265,21264,21263,21262,21699,21266,21273,21272,21271,21270,21281,21280,21279,21278\n        ,21285,21284,21283,21288,21287,21286,21293,21291,21290,21296,21295,21294,21301,21300,21298,21305,21303,21302,21309\n        ,21308,21307,21313,21312,21317,21316,21315,21329,23016,21318,23027,21322,21333,21332,21331,21330,21336,21335,21340\n        ,21345,21344,21349,21348,21347,21352,21350,21357,21356,21361,21365,21364,21367,21366,21372,21371,21370,21376,21375\n        ,21374,21401,21400,21381,21380,21379,21378,21385,21383,21382,21511,21476,21389,21388,21387,21386,21391,21397,21396\n        ,21394,21405,21404,21402,23035,23031,21407,21406,21412,21411,21417,21416,21415,21414,21421,21420,21419,21424,21423\n        ,21428,21432,21430,21437,21436,21435,21434,23030,23041,21439,21445,21444,21449,21448,21446,21452,21533,21457,21456\n        ,21455,21454,21458,21465,21462,21469,21468,21466,21477,21474,21484,21489,21488,21491,21490,21497,21496,21495,21494\n        ,21572,21500,21505,21502,21507,21506,21513,21512,21510,21517,21516,21520,21519,21525,21528,21695,21532,21530,21537\n        ,21545,21544,21543,21542,21548,21546,21553,21550,21557,21555,21554,21560,21559,21563,21568,21590,23058,21575,21574\n        ,21573,21580,21579,21578,21577,23053,21581,21588,21586,21596,21594,21593,21599,21598,21604,21602,22645,21607,21609\n        ,21616,21614,21613,21620,21618,21621,21627,21626,21636,21635,21633,21640,21638,21642,21648,23037,21656,21655,21654\n        ,21653,21660,21659,21663,22714,21669,21680,21678,21677,21682,21681,21688,22731,23014,21692,21696,21703,21701,21711\n        ,21710,21716,21715,21714,21713,21720,21719,21717,21724,21723,21728,21727,21732,21731,21730,21735,21740,21739,21744\n        ,21743,21742,21741,21748,21747,21746,21745,21752,21751,21750,21749,21756,21755,21754,21753,21760,21759,21758,21764\n        ,21763,21762,21761,21768,21767,21766,21765,21772,21771,21769,21775,21774,21773,21780,21778,21784,21782,21781,21788\n        ,21787,21792,21791,21789,21795,21793,21800,21799,21798,21797,21804,21802,21806,21812,21811,21809,21816,21815,21813\n        ,21820,21819,21817,21824,21823,21828,21827,21825,21832,21831,21829,21833,21840,21839,21837,21842,21846,21850,21854\n        ,21853,21860,21857,21862,21872,21875,21874,21879,21884,21881,21892,21891,21894,21893,21897,21901,21906,21911,22624\n        ,21924,21923,21922,21921,21926,21925,21932,21931,21930,21929,21936,21935,21934,21940,21939,21937,21944,21942,21941\n        ,21948,21947,21946,21951,21950,21949,21956,21955,21953,21960,21959,21958,21957,21964,21963,21962,21961,21968,21967\n        ,21965,21972,21971,21970,21975,21974,21973,21979,21978,21977,21983,21981,21987,21985,21991,21990,21993,21999,21997\n        ,22004,22003,22002,22008,22007,22006,22012,22011,22016,22015,22014,22013,22019,22018,22023,22022,22021,22028,22027\n        ,22026,22032,22031,22030,22029,22035,22034,22040,22039,22038,22037,22044,22043,22042,22041,22048,22047,22046,22045\n        ,22152,22997,22056,22055,22053,22060,22059,22058,22057,22064,22063,22061,22068,22067,22066,22065,22072,22071,22070\n        ,22069,22076,22073,22079,22078,22077,22084,22083,22082,22081,22088,22087,22086,22085,22092,22090,22089,22096,22095\n        ,22094,22093,22100,22098,22097,22103,22102,22112,22109,22116,22113,22118,22123,22122,22121,22127,22126,22125,22124\n        ,22131,22130,22129,22128,22135,22134,22143,22141,22147,22146,22145,22144,23004,22150,22156,22155,22153,22163,22161\n        ,22166,22165,22164,22171,22170,22169,22168,22175,22174,22172,22179,22178,22177,22176,22183,22181,22180,22187,22186\n        ,22185,22191,22189,22188,22195,22194,22193,22197,22203,22202,22201,22200,22207,22206,22205,22204,22210,22209,22208\n        ,22215,22219,22218,22217,22216,22223,22221,22220,22226,22225,22224,22230,22229,22228,22235,22232,22239,22236,23007\n        ,22245,22250,22249,22248,22255,22253,22050,22259,22256,22262,22261,22264,22269,22268,22275,22273,22279,22277,22276\n        ,22282,22281,22287,22286,22285,22284,22291,22290,22289,22293,22292,22299,22297,22302,22300,22306,22304,22311,22313\n        ,22318,22317,22323,22322,22321,22326,22325,22329,22335,22334,22332,22339,22338,22337,22343,22342,22346,22345,22344\n        ,22350,22355,22352,22359,22356,22363,22361,22367,22366,22365,22371,22369,22368,22374,22373,22379,22378,22377,22376\n        ,22383,22382,22381,22385,22390,22389,22388,22395,22393,22392,22398,22396,22402,22406,22404,22412,22415,22414,22419\n        ,22877,22422,22421,22424,22430,22428,22433,22432,22439,22438,22436,22443,22442,22441,22447,22445,22444,22453,22452\n        ,22451,22455,22462,22460,22466,22463,22470,22468,22467,22474,22473,22471,22475,22479,22908,22486,22484,22490,22494\n        ,22492,22491,22498,22497,22502,22499,22510,22514,22522,22520,22525,22524,22530,22529,22527,22532,22538,22541,22540\n        ,22546,22545,22552,22558,22559,22566,22570,22574,22408,22049,22582,22589,22593,22596,22606,22604,22608,22614,22613\n        ,22619,22616,22623,22688,22626,22630,22651,22661,22673,22675,22694,22708,22709,22729,22732,22759,22765,22763,22775\n        ,22782,22796,22803,22809,22817,22829,22827,22835,22833,22837,22836,22839,22843,22842,22847,22850,22853,22863,22872\n        ,22876,22879,22890,22893,22896,22901,22920,22926,22930,22942,22951,22950,22985,22638,21257,21276,21267,21268,21338\n        ,22720,21306,21339,21691,21702,21706,22990,22989,22994,22411,22051,22052,22151,22148,22246,22247,22543,21480,21686\n        ,21320,21481,23020,21321,22713,21666,21675,21408,21667,22711,21409,21672,21652,22704,21440,21649,21324,21441,21325\n        ,22625,23048,21582,23054,21569,21583,21571,21570,23012,23049,25519,23110,23063,23064,23065,23066,23067,23068,23069\n        ,23070,23072,23073,23074,25463,23794,23083,23084,23085,23086,23087,23088,23089,23090,23093,23094,23095,23096,23097\n        ,23098,23099,23100,23101,23103,23104,23105,23106,23107,23111,23112,23113,23115,23116,23117,23118,23120,23121,23125\n        ,23126,23127,23128,23129,23130,23132,23133,23134,23135,23583,23139,23140,23141,23142,23143,23148,23149,23150,23151\n        ,23152,23153,23154,23157,23158,23159,23160,23162,23163,23165,23166,23167,23169,23170,23172,23174,23175,23176,23177\n        ,23178,23180,23181,23184,23185,23186,23188,23189,23191,23192,23193,23195,23200,23201,23202,23203,23205,23206,23209\n        ,23212,23213,23216,23217,23218,23221,23223,23224,23225,23228,23232,23233,23239,23241,23242,23243,23245,23246,23247\n        ,23123,23249,23252,23253,23254,23255,23256,23258,23259,23261,23260,23264,23265,23266,23262,23270,23272,23263,23250\n        ,23276,23277,23279,23280,23281,23282,23283,23285,23286,23288,23289,23290,23291,23292,23293,23294,23297,23298,23301\n        ,23305,23307,23308,23309,23310,23311,23312,23313,23314,23316,23317,23320,23321,23323,23325,23329,23330,23332,23333\n        ,23334,23335,23339,23122,23343,23344,23345,23347,23352,23355,23357,23361,23364,23365,23370,23372,23373,23374,23375\n        ,23380,23383,23386,23389,23390,23391,23392,23394,23395,23396,23400,23401,23403,23408,23579,23412,23414,23415,23423\n        ,23424,23425,23426,23428,23430,23431,23434,23435,23437,23438,23440,23441,23444,23445,23446,23447,23472,26338,23456\n        ,23457,23458,23459,23460,23461,23462,26340,23466,23468,23474,23476,23477,23479,23480,23482,23484,23486,23487,23491\n        ,23497,23498,23500,23501,23502,23504,23509,23511,23512,23518,23519,23521,23522,23524,23528,23530,23534,23538,23539\n        ,23540,23541,23542,23543,23547,23552,23554,23557,23559,23562,23564,23565,23568,23569,23570,23572,23573,23574,23578\n        ,23587,23589,23595,23596,23602,23603,23604,23605,23606,23607,23609,26341,23614,23615,23618,23619,23601,23623,23624\n        ,23627,23630,23631,23634,23635,23636,23637,23638,23639,23640,23641,23642,23643,23644,23645,23646,23647,23648,23649\n        ,23650,23651,23652,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23665,23667,23668,23669,23670,23672\n        ,23674,23676,23677,23678,23679,23682,23683,23685,23687,23689,23690,23691,23692,23693,23694,23696,23700,23702,23703\n        ,23705,23706,23707,23709,23710,23711,23713,23714,23715,23718,23719,23721,23722,23723,23725,23729,23730,23731,23733\n        ,23736,23740,23744,23748,23600,23750,23753,23756,23762,23767,23768,23771,23774,23777,23782,23783,23788,23789,23793\n        ,23797,23800,23803,25439,23814,23815,23816,23817,23820,23821,23822,23823,23824,23825,23826,23827,23828,23830,23831\n        ,23833,23834,23836,23837,23838,23839,23840,23843,23844,23845,23846,23847,23849,23850,23851,23852,23853,23854,23855\n        ,23856,23857,23858,23859,23861,23862,23863,23864,23867,23868,23869,23871,23872,23873,23875,23877,23879,23881,23883\n        ,23884,23889,23891,23893,23894,23895,23896,23898,23899,23900,23902,23903,23906,23907,23908,23909,23911,23912,23915\n        ,23916,23917,23918,23919,23920,23922,23923,23924,23925,23927,23928,23930,23931,23932,23933,23934,23935,23936,23937\n        ,23938,23939,23940,23941,24149,26321,23946,23947,23949,23950,23951,23952,23953,23954,23955,23957,23958,23959,23960\n        ,23961,23962,23963,23964,23965,23966,23969,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982\n        ,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,24001,24002,24003,24004,24005\n        ,24006,24007,24008,24009,24010,24011,24012,24013,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24025\n        ,24026,24028,24029,24030,24032,24033,24034,24035,24036,24037,24038,24039,24040,24041,24042,24043,24045,24046,24047\n        ,24049,24050,24051,24052,24053,24054,24055,24057,24059,24060,24061,24062,24063,24064,24065,24066,24067,24069,24070\n        ,24071,24072,24073,24074,24076,24077,24078,24079,24080,24082,24083,24084,24086,24087,24088,24089,24090,24091,24092\n        ,24095,24096,24097,24099,24100,24101,24102,24104,24105,24106,24109,24110,24111,24112,24113,24114,24115,24116,24117\n        ,24118,24119,24122,24123,24129,24131,24132,24133,24134,24136,24138,24139,24140,24141,26322,24143,24153,24146,24148\n        ,24154,24155,24156,24158,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24173,24174,24175,24176,24177\n        ,24178,24180,24181,24182,24183,24184,24186,24188,24189,24190,24191,24192,24193,24195,24196,24198,24199,24200,24201\n        ,24202,24203,24204,24205,24207,24208,24209,24210,24214,24215,24216,24217,24218,24220,24221,24223,24224,24225,24227\n        ,24228,24229,24230,24231,24232,24233,24234,24235,24237,24239,24240,24241,24243,24244,24245,24246,24247,24249,24250\n        ,24253,26327,24260,24263,24264,24265,24266,24268,23944,24270,24273,24275,24276,24281,24284,24285,24286,24288,24290\n        ,24292,24293,24295,24296,24298,24299,24300,24301,24302,24303,24304,24308,24309,24310,24312,24315,24317,24319,24321\n        ,24322,24328,24331,24332,24334,24335,24336,24339,24340,24344,24346,24347,24349,24350,24351,24352,24354,24355,24359\n        ,24360,24361,24363,24366,24369,24370,24373,24374,24376,24378,24379,24380,24382,24384,24385,24387,24388,24390,24391\n        ,24392,24393,24394,24395,24396,24400,24403,24404,24405,24406,24408,24409,24411,24413,24415,24419,24421,24429,24426\n        ,24427,24430,24435,24437,24438,24441,24443,24444,24445,24448,24449,24451,24457,24458,24459,24460,24461,24462,24465\n        ,24467,24468,24470,24471,24472,24475,24477,24478,24481,24483,24487,24491,24492,24493,24494,24496,24497,24501,24504\n        ,24505,24507,24508,24509,24510,24511,24512,24514,24515,24516,24517,24518,24520,24521,24522,24523,24524,24525,24526\n        ,24527,24528,24529,24532,24533,24534,24536,24537,24538,24539,24540,24541,24543,24544,24546,24547,24548,24549,24551\n        ,24552,24553,24554,24555,24556,24557,24558,24559,24561,24563,24564,24565,24566,24568,24569,24570,24571,24572,24573\n        ,24574,24576,24577,24578,24579,24581,24582,24583,24584,24585,24586,24587,24588,24590,24591,24592,24593,24594,24596\n        ,24597,24598,24599,24600,24601,24603,24604,24605,24607,24608,24609,24610,24611,24612,24614,24615,24616,24617,24618\n        ,24619,24620,24623,24624,24625,24626,24627,24628,24629,24630,24631,24632,24634,24635,24636,24637,24638,24639,24640\n        ,24641,24643,24644,24645,24646,24647,24649,24650,24651,24652,24654,24655,24656,24657,24658,24660,24661,24662,24663\n        ,24664,24665,24667,24668,24669,24670,24671,24672,24674,24675,24676,24677,24679,24680,24682,24683,24684,24685,24686\n        ,24687,24688,24689,24691,24692,24693,24694,24695,24697,24698,24700,24701,24702,24703,24704,24707,24708,24709,24710\n        ,24711,24712,24714,24715,24716,24717,24718,24719,24720,24721,24722,24723,24724,24726,24727,24728,24729,24730,24732\n        ,24733,24734,24735,24736,24737,24738,24739,24740,24742,24743,24745,24747,24748,24750,24751,24753,24754,24755,24758\n        ,24759,24760,24761,24763,24764,24765,24766,24767,24769,24771,24772,24774,24775,24777,24780,24781,24782,24783,24785\n        ,24786,24787,24790,24792,24793,24794,24795,24798,24799,24800,24801,24802,24803,24804,24805,24806,24808,24811,24813\n        ,24819,24821,24822,24825,24826,24827,24828,24831,24833,24839,24841,24845,24846,24848,24849,24851,24854,24856,24857\n        ,24859,24860,24861,24862,24863,24864,24865,24866,24867,24868,24869,24871,24872,24873,24874,24875,24876,24877,24878\n        ,24879,24880,24881,24882,24883,24884,24885,24887,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901\n        ,24902,24906,24907,24908,24911,24914,24915,24917,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24933\n        ,24934,24935,24936,24937,24941,24942,24943,24945,24947,24948,24949,24950,24952,24956,24958,24959,24960,24961,24962\n        ,24964,24966,24967,24969,24972,24973,24974,24977,24979,24980,24983,24989,24991,24993,24996,24997,24998,24999,25001\n        ,25002,25003,25004,25006,25008,25009,25010,25013,25019,25020,25023,25025,25031,25033,25034,25038,25041,25043,25044\n        ,25045,25046,25047,25049,25050,25052,25054,25057,25058,25062,25064,25065,25066,25067,25069,25070,25071,25073,25074\n        ,25075,25077,25080,25082,25083,25084,25085,25086,25087,25089,25090,25092,25093,25094,25095,25097,25098,25104,25105\n        ,25107,25111,25112,25114,25115,25118,25119,25122,25125,25129,25130,25131,25132,25136,25137,25138,25140,25142,25144\n        ,25145,25146,25150,25157,25158,25159,25162,25163,25166,25168,25171,25173,25177,25180,25183,25184,25186,25188,25190\n        ,25194,25196,25197,25198,25199,25202,25205,25210,25214,25224,25225,25228,25229,25230,25231,25235,25240,25242,25244\n        ,25247,25248,25251,25252,25254,25255,25257,25260,25262,25267,25268,25272,25273,25274,25275,25284,25286,25293,25294\n        ,25298,25302,24425,23945,25310,25315,25317,25319,25321,25322,25324,25327,25329,25330,25332,25333,25335,25336,25337\n        ,25338,25339,25340,25352,25356,25358,25360,25362,25365,25369,25370,25372,25373,25374,25375,25377,25381,25384,25387\n        ,25388,25391,25394,25400,25401,25404,25408,25413,25419,25421,25425,25427,25428,25430,25433,25434,25522,25438,25464\n        ,25468,25472,25492,25499,25503,25541,25547,25549,25561,25566,25568,25589,25595,25599,25617,25619,25626,25628,25630\n        ,25631,25634,25636,25637,25641,25644,25647,25661,25670,25671,25676,25683,25686,25689,25697,25700,25701,25703,25711\n        ,25712,25716,25725,25726,25728,25731,25736,25742,25752,25753,25755,25756,25757,25758,25761,25763,25766,25767,25769\n        ,25772,25773,25774,25776,25785,25788,25789,25791,25794,25799,25815,25816,25817,25818,25819,25821,25823,25825,25827\n        ,25829,25832,25833,25835,25837,25842,25851,25854,25855,25857,25860,25865,25881,25882,25884,25885,25886,25890,25891\n        ,25893,25894,25896,25899,25908,25911,25912,25914,25917,25922,25940,25944,25950,25951,25952,25953,25957,25961,25962\n        ,25964,25968,25974,25981,25982,25989,25991,25993,25995,25997,25998,25999,26003,26004,26005,26007,26012,26015,26016\n        ,26020,26022,26026,26027,26028,26039,26054,26056,26058,26063,26065,26067,26071,26075,26076,26079,26081,26090,26093\n        ,26094,26109,26110,26113,26141,26162,26172,26175,26181,26189,26201,26207,26209,26224,26230,26239,26240,26276,26296\n        ,26304,25448,23124,23145,23138,23137,23211,23168,25511,23179,23210,23575,23588,23592,26312,26313,26316,24422,23943\n        ,23942,24142,24145,24259,24258,25277,25508,23464,26334,23465,23613,26342,26346,23610,26350,23080,23076,22477,22457\n        ,22537,22198,22138,22119,22114,22110,22108,22104,21685,22632,22629,25518,23109,23371,23079,23082,23075,23612,26336\n        ,25442,23078,23077,22192,26363,26430,26365,26646,26482,26715,27616,26766,26946,26801,26905,27012,26748,26368,26902\n        ,26903,26378,26382,26383,26387,27921,26403,27051,26414,26418,26415,27929,26384,26419,26420,26421,26669,26425,26764\n        ,26907,26893,26369,26379,26798,26439,26441,26400,26364,26446,26449,26402,26401,26453,26454,26460,26463,26651,26508\n        ,26468,26568,26471,26521,26926,26476,26473,26486,26507,26489,26856,26878,26859,26512,26522,26923,26809,27035,26528\n        ,26530,26531,26532,26534,26535,26517,26541,26549,26361,26560,26561,26596,26491,27019,26731,26752,26957,26575,26774\n        ,26582,26679,26915,26595,26693,26829,26821,26837,26825,26816,26838,26877,26612,26511,26537,26613,26614,26617,26510\n        ,26621,26527,26574,26972,26626,26627,26629,26631,26632,26633,26634,26635,26671,26638,26639,26643,26598,26599,26759\n        ,26601,26648,26656,26654,26657,26664,26665,27053,26674,26571,26735,26594,26689,26698,26706,26707,26690,26691,26717\n        ,26597,26721,26722,26726,26727,26730,26734,26699,26701,26705,26484,26745,26917,26687,26738,26590,27905,26938,26960\n        ,26467,26753,26817,26822,26826,26830,26564,26550,26776,27026,26780,26495,26797,26685,27002,26773,26808,26526,26813\n        ,26786,26871,26849,26794,26504,26505,26602,26609,26543,26542,27792,26547,26503,26795,26792,26577,26783,26576,26785\n        ,26611,26847,26853,26854,26553,26499,26498,26502,26501,26546,26545,26848,26552,26866,26497,26496,26556,26886,26637\n        ,26640,26440,26429,26375,27754,26392,26438,26393,26394,26431,26897,26391,26999,26900,26428,26427,26796,26480,26918\n        ,26592,26920,26523,26475,26931,26751,26466,26932,26933,26740,26942,26744,26789,26961,26965,26967,26728,26970,26708\n        ,26625,26628,26659,26790,26513,26986,26514,26469,26472,27857,26603,26485,26470,26739,26702,26529,26372,26371,26951\n        ,26950,26954,26754,26586,27043,27011,26416,26757,26788,26686,27016,26585,26551,26360,26559,26914,26479,26494,26925\n        ,26474,26607,27018,26506,27022,26911,26533,26615,26579,27023,26581,26580,26852,27001,26525,26524,27041,26397,26411\n        ,26413,26412,26423,26572,26710,26422,26448,26770,27356,27390,27351,27417,27072,27084,27770,27766,27552,27062,27061\n        ,27060,27711,27555,27941,27431,27064,27065,27063,27409,27415,27066,27094,27088,27070,27089,27303,27091,27096,27188\n        ,27105,27451,27101,27504,27495,27116,27444,27508,27642,27493,27878,27299,27844,27602,27115,27256,27337,27350,27368\n        ,27355,27104,27103,27111,27148,27131,27467,27527,27180,27302,27346,27360,27357,27147,27129,27717,27563,27259,27128\n        ,27134,27133,27132,27140,27301,27297,27142,27438,27437,27442,27246,27365,27331,27344,27126,27678,27832,27287,27305\n        ,27741,27151,27157,27311,27155,27342,27470,27160,27159,27165,27163,27162,27169,27168,27167,27205,27172,27171,27175\n        ,27174,27179,27181,27183,27187,27472,27194,27195,27202,27229,27559,27523,27569,27220,27227,27234,27525,27242,27238\n        ,27223,27725,27211,27215,27222,27219,27460,27226,27225,27228,27230,27232,27465,27617,27475,27243,27494,27520,27455\n        ,27457,27251,27657,27583,27289,27264,27268,27488,27327,27325,27329,27130,27591,27304,27369,27284,27282,27343,27296\n        ,27386,27122,27106,27716,27076,27680,27136,27137,27278,27279,27310,27309,27315,27553,27318,27689,27787,27320,27492\n        ,27114,27489,27112,27113,27599,27594,27330,27750,27107,27339,27281,27312,27286,27352,27364,27110,27336,27108,27109\n        ,27751,27359,27735,27338,27292,27173,27170,27385,27391,27389,27393,27271,27399,27402,27395,27078,27379,27378,27405\n        ,27380,27407,27435,27383,27384,27411,27545,27387,27143,27144,27441,27149,27512,27254,27646,27446,27253,27100,27102\n        ,27099,27516,27245,27517,27453,27244,27260,27261,27120,27461,27459,27224,27464,27236,27161,27158,27192,27118,27480\n        ,27117,27500,27487,27501,27505,27509,27513,27521,27533,27541,27080,27075,27085,27290,27940,27781,27774,27548,27946\n        ,27069,27561,27565,27571,27575,27654,27584,27590,27627,27598,27606,27214,27218,27581,27609,27146,27248,27250,27622\n        ,27626,27458,27638,27650,27661,27662,27485,27585,27659,27483,27316,27671,27673,27682,27686,27688,27077,27700,27703\n        ,27709,27721,27059,27068,27534,27734,27124,27447,27125,27740,27154,27732,27127,26362,26376,26895,26436,26399,26451\n        ,26450,27177,26642,26641,26694,26913,26478,26477,26993,26992,26493,26492,26749,26714,26434,26433,26769,26747,26481\n        ,26883,26868,26565,40223,26833,26814,26845,26616,26624,26619,26841,26509,26676,26782,26876,26573,26812,26875,26793\n        ,26842,26555,27361,27586,40230,27332,27596,27326,27333,27285,27738,27317,27322,27319,27321,27362,27890,27744,26681\n        ,26589,26678,26587,26588,26390,27040,26388,26389,26404,26405,26374,26373,27758,26891,27423,26435,27419,27422,27082\n        ,27376,27767,27079,27771,27083,27775,27698,27778,27141,27263,27262,27348,26548,27593,26682,27558,27808,26562,26539\n        ,26538,27815,26806,26570,27805,26367,27392,27034,26955,27156,27696,26566,27298,27257,27618,27851,27855,27017,27839\n        ,26567,27864,27867,26465,27810,27496,27846,27879,27497,27886,27669,27484,27897,26490,27895,26519,27894,26488,26487\n        ,27860,26695,27909,26758,27913,27010,27917,27049,26395,26398,27925,26410,26386,26385,26444,27208,27291,27210,27209\n        ,27549,27705,27275,27546,27073,27276,29107,28255,29081,27956,29146,28860,29084,29069,28411,28298,28484,28581,28303\n        ,28578,29039,27955,27954,27953,27960,27959,27958,27964,27963,27962,27961,27968,27966,27965,27972,27971,27970,27969\n        ,27976,27975,27974,27973,27978,27977,27984,27982,27981,27988,27987,27986,27985,27991,27990,27996,27995,27994,27993\n        ,27999,27998,27997,28004,28003,28002,28001,28008,28007,28005,28011,28010,28009,28016,28014,28013,28020,28019,28018\n        ,28017,28024,28022,28021,28028,28027,28025,28032,28031,28030,28029,28036,28035,28034,28040,28039,28038,28037,28044\n        ,28042,28041,28048,28047,28046,28045,28051,28050,28049,28055,28054,28053,28060,28059,28058,28064,28063,28062,28061\n        ,28068,28067,28066,28071,28070,28069,28076,28075,28074,28073,28080,28079,28078,28084,28083,28082,28081,28088,28087\n        ,28086,28085,28091,28090,28089,28096,28095,28093,28100,28099,28098,28104,28103,28102,28101,28108,28106,28105,28112\n        ,28111,28110,28109,28115,28114,28113,28120,28119,28118,28124,28123,28122,28121,28127,28126,28132,28131,28130,28129\n        ,28136,28135,28134,28133,28139,28138,28137,28144,28143,28141,28148,28146,28145,28152,28151,28150,28155,28154,28153\n        ,28160,28159,28158,28164,28163,28162,28161,28168,28167,28166,28165,28172,28171,28170,28176,28175,28174,28173,28180\n        ,28178,28177,28184,28183,28182,28181,28188,28187,28186,28192,28191,28189,28195,28194,28200,28199,28197,28204,28203\n        ,28208,28207,28206,28205,28211,28210,28209,28216,28215,28213,28219,28218,28224,28223,28221,28226,28225,28232,28231\n        ,28229,28236,28235,28240,28238,28237,28244,28243,28248,28247,28246,28245,28252,28251,28250,28249,28256,28254,28259\n        ,28257,28267,28265,28272,28269,28276,28275,28274,28279,28277,28287,28285,28289,28296,28294,28293,28299,28304,28302\n        ,28301,28307,28306,28305,28312,28311,28310,28309,28316,28315,28314,28313,28319,28318,28317,28324,28323,28322,28321\n        ,28328,28327,28326,28325,28332,28331,28330,28329,28335,28340,28339,28338,28337,28344,28342,28341,28348,28347,28346\n        ,28345,28352,28356,28355,28354,28359,28364,28363,28361,28366,28365,28372,28371,28370,28369,28376,28375,28374,28373\n        ,28377,28384,28383,28382,28381,28385,28392,28391,28389,28395,28394,28393,28400,28398,28402,28408,28407,28406,28405\n        ,28412,28410,28416,28415,28413,28419,29067,28420,28417,28423,28422,28427,28878,28991,28432,28431,28429,28434,28440\n        ,28439,28438,28437,28444,28443,28441,28448,28446,28445,28452,28451,28449,28456,28458,28457,28463,28467,28466,28472\n        ,28471,28476,28475,28480,28477,28481,28488,28487,28486,28490,28489,28496,28494,28499,28500,28498,28503,28501,28506\n        ,28511,28510,29092,28513,28515,28514,29050,28518,28516,28522,28520,28527,28525,28530,28528,28535,28533,28532,28538\n        ,28537,28536,28543,28542,28541,28553,28557,28561,28563,28560,28564,28571,28569,28568,28575,28574,28572,28576,28582\n        ,28587,28586,28594,28603,28602,28606,28609,28610,28616,28630,28629,28633,28632,28631,28636,28639,28637,28640,28645\n        ,28643,28646,28651,28650,28654,28663,28666,28665,28669,28672,28673,28693,28692,28691,28696,28695,28699,28697,28701\n        ,28705,28703,28706,28711,28709,28713,28720,28729,28732,28731,28735,28738,28739,28759,28758,28762,28761,28760,28768\n        ,28767,28771,28770,28774,28777,28786,28789,28788,28792,28795,28796,28814,28822,28828,28827,28826,28831,28833,28835\n        ,28840,28838,28846,28852,28857,28856,28867,28865,28869,28873,28871,28876,28875,28877,28882,28881,28885,28886,28889\n        ,28894,28896,28900,28902,28901,28906,28913,28928,28932,28936,28937,28941,28945,28947,28949,28954,28957,28955,28964\n        ,28967,28972,28986,29003,29017,29020,29026,29030,29043,29061,29073,29086,29088,29096,29109,29117,29116,29119,29124\n        ,29125,29128,29115,29078,29072,29079,29103,29153,29105,29036,29147,27557,27206,21562,22644,29175,22689,23376,23463\n        ,26652,29194,29196,29200,29201,29204,29205,29206,29207,29193,29191,29192,29197,29198,29202,29208,29209,30767,29236\n        ,29241,29244,29248,29228,29230,29231,29574,30774,29237,29238,29239,29242,29243,29245,29246,29249,29250,29581,29254\n        ,29257,29258,29259,29260,29262,29263,29265,29266,29267,29268,29270,29271,29276,30778,29277,29278,29279,29281,29282\n        ,29283,29285,29286,29290,29291,29293,29294,29298,29299,29300,29301,29302,29305,29306,29307,29310,29314,29315,29316\n        ,29318,29319,29322,29323,29623,29328,29330,29331,29333,29334,29339,29341,29342,29345,29346,29347,29349,29350,29356\n        ,29357,29359,29361,29362,29365,29366,29367,29368,29369,29371,29372,29373,29374,29375,29376,29377,29379,29382,29383\n        ,29384,29327,29388,29391,29392,29393,29395,29396,29397,29400,29401,29403,29404,29407,29408,29413,29417,29215,29219\n        ,29223,29227,29255,29311,29358,29418,29420,29421,29422,29425,29428,29429,29430,29433,29435,29436,29438,29439,29443\n        ,29445,29447,29449,29451,29455,29457,29461,29463,29464,29466,29467,29468,29469,29470,29471,29473,29475,29476,29477\n        ,29478,29479,29480,29481,29482,29483,29484,29485,29486,29487,29488,29490,29491,29492,29493,29494,29495,29496,29497\n        ,29498,29500,29501,29502,29504,29506,29508,29510,29512,29515,29516,29518,29519,29521,29522,29523,29525,29526,29530\n        ,29531,29534,29538,29539,29544,29547,29627,29326,29556,29537,29325,30693,29558,29563,29566,29567,29195,29226,29572\n        ,29578,29584,29598,29603,29609,29411,29324,29626,29632,29633,29636,29637,29640,29641,29645,29646,29649,29650,29653\n        ,29654,29657,30088,30042,29852,29769,29773,30119,29820,30046,29816,29999,30077,29812,29788,29792,29859,29824,29781\n        ,30083,29780,29808,29796,29800,30573,29662,29661,30404,29865,30256,30400,29869,30252,30396,29873,30388,29876,29668\n        ,30445,30018,29884,29691,29670,29888,29671,29892,29897,30091,30263,29901,30424,29676,30262,29678,29684,29683,30291\n        ,30384,29904,29690,29692,29689,29696,29693,30345,29908,29913,29994,30278,30272,30271,30059,30568,30234,30233,30029\n        ,30028,30145,30148,29714,29713,30352,29722,29727,29726,30230,30031,30030,29740,29762,30476,29752,29747,29749,30585\n        ,30284,30503,29936,30034,29944,30111,29763,29952,30095,30243,29761,29685,29686,29687,29772,29771,29770,29776,29775\n        ,29774,29778,29777,29783,29782,29787,29786,29785,29791,29790,29789,29794,29793,29798,29797,29803,29802,29801,29807\n        ,29811,29810,29805,29813,29998,29821,30559,29923,29826,29825,29831,29830,29832,29834,29833,29838,29837,29842,29841\n        ,29847,29846,29850,29849,30599,30304,29854,29858,29857,29856,29863,29861,29866,29864,29868,29872,29879,29877,29885\n        ,29887,29891,29895,29806,29898,29896,29902,29907,29906,29911,29814,30074,29916,29995,29924,29922,29928,29933,29939\n        ,29937,29941,29945,29949,29953,30023,29956,29963,29969,29979,29976,29983,29980,29985,29880,29965,29961,29992,30002\n        ,30380,30248,29881,29967,29966,30027,30033,29940,30511,30036,29943,30005,30043,30048,30004,30052,30318,30055,30061\n        ,30060,30065,30064,30134,29973,29972,30072,29964,29917,30238,30237,29996,30082,30090,29818,29819,29919,29914,30267\n        ,30420,30266,29760,30239,29759,29977,30044,30357,30098,30307,29962,29975,29715,29716,29737,29738,29948,30531,30113\n        ,29951,29822,29823,30007,29926,30125,29725,30311,29721,30314,29766,29765,30139,30141,30140,30143,30152,29731,30157\n        ,29730,29735,29732,30165,29729,30163,30515,30164,30169,29733,30168,30171,30173,30174,30181,30194,30011,30175,30179\n        ,30180,30185,30184,30177,30009,30008,30197,30100,30101,30203,30149,30104,30103,30161,30211,30110,30109,29736,30107\n        ,30217,30527,30216,30188,30190,30226,30281,30227,30231,30228,30711,30232,30236,30241,29757,29758,30244,30014,30246\n        ,30247,30013,30251,29682,30255,29677,30289,30261,30265,29707,29701,29705,29706,30277,29991,30634,30410,30287,29664\n        ,30260,30245,29663,30067,30138,30070,29688,30320,30306,30305,30491,30097,30096,30331,30313,30316,30484,30322,30321\n        ,30326,30330,29744,29718,29719,30131,30369,29669,30444,30443,29667,30456,29665,29666,30298,30300,30467,30297,30471\n        ,30133,29720,29717,29741,29742,29754,29673,30054,29697,30343,30056,30347,30129,29723,29724,29748,29745,29698,30365\n        ,29700,29675,30373,30376,30382,30392,30414,30416,29660,29712,30053,30432,30366,30371,30437,29883,30452,29882,30459\n        ,30463,30475,30340,30482,30543,30339,29756,29753,30309,30324,30000,30308,30360,30001,30499,30553,30500,30506,30519\n        ,30523,30535,30539,30547,30501,30560,30279,29710,30572,29920,30557,30280,29711,29709,30488,29932,30587,29935,29829\n        ,29959,29957,29958,30601,30604,30629,30636,30644,30625,30648,30630,30652,30651,30642,30609,30606,30605,30615,30614\n        ,30619,30618,30658,30626,30639,30628,30627,30632,30411,30283,30655,30633,30673,30496,30676,30497,30375,30229,29679\n        ,30686,30688,30692,29704,29353,29708,30563,30698,30694,29702,30728,30715,30672,30733,30678,30624,30622,30623,30670\n        ,30680,30721,29351,29352,30748,29308,30752,29252,30758,29224,30762,29220,30763,29216,29213,29212,29234,29233,29274\n        ,29273,29630,29336,30582,29845,29836,30160,30154,30159,30105,30580,30106,30578,30147,30797,30202,30801,30102,30805\n        ,30010,30809,30221,30813,30189,30817,30225,30144,29672,30827,30637,30834,30833,30832,30831,30838,30837,30836,30842\n        ,30841,30840,30853,30846,30844,30843,30850,30847,30854,30851,30857,30858,30862,30861,30859,30866,30865,30870,30869\n        ,30874,30873,30871,30878,30877,30882,30881,30885,30890,30889,30888,30892,30891,30902,30901,30900,30899,30906,30905\n        ,30903,30910,30909,30907,30914,30913,30911,30918,30917,30915,30922,30919,30926,30923,30930,30929,30928,30927,30934\n        ,30933,30932,30938,30937,30942,30941,30946,30944,30950,30954,30958,30956,30962,30961,30959,30966,30965,30969,30883\n        ,30977,30982,30972,30976,30975,30895,30855,30973,30990,30989,30988,30987,30994,30993,30991,30998,30997,30995,31008\n        ,31002,31001,30999,31006,31003,31010,31014,31013,31012,31011,31018,31017,31016,31022,31021,31025,31030,31029,31028\n        ,31034,31033,31037,31040,31042,31045,31044,31043,31050,31049,31053,31058,31057,31056,31055,31069,31059,31211,31062\n        ,31061,31060,31066,31064,31070,31068,31067,31074,31071,31075,31082,31081,31080,31079,31086,31085,31083,31090,31089\n        ,31094,31097,31095,31101,31109,31114,31112,31111,31116,31115,31122,31126,31129,31107,31127,31123,31133,31137,31142\n        ,31146,31149,31153,31157,31161,31165,31169,31173,31177,31182,31186,31189,31193,31197,31201,31205,31209,31213,31217\n        ,31221,31226,31230,31234,31238,31241,31245,31134,31132,31138,31141,31145,31144,31150,31148,31152,31156,31160,31166\n        ,31170,31167,31174,31172,30884,31181,30955,31190,31188,31192,31196,31202,31206,31203,31210,31208,31214,31218,31225\n        ,31229,31228,31233,31231,31039,31242,31108,30856,31293,31281,31298,31278,31277,31275,31276,31280,31279,31285,31284\n        ,31289,31271,31292,31274,31273,31272,31303,30974,30985,31124,31312,31322,31315,31311,31912,31344,31478,31903,31336\n        ,31505,32158,31476,31347,31349,31455,31441,31468,31431,32166,31379,31341,31444,31414,31400,31345,31348,31904,31354\n        ,31355,31356,31357,31359,31361,31362,31364,31365,31366,31368,31370,31372,31373,31374,31377,31380,31381,31384,31387\n        ,31388,31389,31941,31566,31399,32176,31403,31398,31401,31402,31405,31409,31421,31407,31408,31420,32171,31412,31415\n        ,31416,31419,31425,31424,31426,31429,31432,31433,31436,31438,31439,31440,31442,31443,31445,31446,31447,31448,31451\n        ,31453,31457,31463,31465,31466,31474,32554,32514,32521,32512,31536,31342,31920,31499,31332,31486,31489,31548,31430\n        ,31411,31434,31410,31553,31394,31460,31390,31397,31392,31393,31573,31490,31339,31578,31334,31333,31350,32058,32049\n        ,31702,31653,32295,32131,31595,31601,31896,32133,31615,31622,31598,31628,31878,31658,31992,31668,31892,32310,31948\n        ,31947,31684,32150,31870,32366,31692,32118,31748,31886,31603,32092,32084,31806,40299,31760,32099,31820,31775,31785\n        ,31780,32016,32040,31790,31789,31796,31794,31793,31507,31955,31803,31801,31831,31518,32526,31898,31834,31708,31621\n        ,31705,32140,31847,31843,40348,31862,31856,31905,31880,32123,31610,31833,31516,31906,31521,31526,31527,31531,31534\n        ,31535,31922,31931,31928,31932,31935,31787,31590,31591,31938,31943,31406,31942,31983,31783,31962,31975,32062,31630\n        ,31949,31988,32339,31666,31667,31996,31890,31609,32002,32004,31592,31605,31824,32019,32015,31868,31867,32069,31517\n        ,32522,32039,32038,31926,32057,31704,31706,31703,31939,31940,31713,40383,31683,31894,31685,31682,31981,31619,31620\n        ,32047,32051,31625,31626,31979,32012,31353,32558,31866,31865,32071,32076,31506,31585,32097,32100,32532,31827,31768\n        ,31769,31508,32357,31483,31916,32508,31530,31701,31587,31588,31709,31710,31596,32027,31616,31617,31614,31694,31717\n        ,31700,32199,32188,31778,32020,31839,31721,31335,31485,31337,31338,32008,31497,32010,32011,40291,32035,31774,31757\n        ,31754,31765,32107,32115,31481,32106,31343,31480,31346,31574,31579,31582,40292,32013,31502,31543,31544,32165,32576\n        ,32574,31552,31549,32173,31554,31557,31558,31563,31564,31569,31540,32186,31589,31586,32146,32153,31779,32149,32151\n        ,31716,31715,31966,31752,32368,32330,32220,31634,32223,31639,32228,31642,31633,32232,32218,31635,32241,32237,31647\n        ,31649,31643,32221,31645,31640,32245,31636,32253,32255,31665,31664,31662,32263,32261,31677,32267,31676,32271,31675\n        ,31733,32288,31737,32291,31736,31732,32294,31739,32298,31738,31741,31745,32259,31663,31743,32311,32313,31876,31873\n        ,31875,31648,31723,31674,31756,31809,31795,31696,31669,31735,32227,31641,34652,32125,32251,31638,32240,31680,31688\n        ,31613,31611,31799,31772,31770,32304,31657,32317,32246,32226,32285,32472,32286,32284,32376,32484,31655,31654,32371\n        ,32214,31631,31632,32229,32215,32216,32325,32496,31725,32324,31727,31724,31670,32276,31593,32382,32380,32452,32384\n        ,32386,32388,32390,32391,32395,32393,32392,32399,32397,32396,32400,32402,32403,32404,32406,32407,32468,32492,32408\n        ,32410,32409,32414,32418,32500,32420,32422,32421,32426,32428,32429,32434,32480,32432,32476,32433,32425,32381,32385\n        ,32419,32329,32331,31751,32488,32464,32460,32456,32448,32444,32415,31539,32507,31533,32511,31529,31520,31525,32520\n        ,31523,32525,31519,32529,32101,31826,32537,31759,32542,31836,40242,32072,32569,31498,32560,31495,31496,32562,31923\n        ,31538,32551,31537,32534,31829,32531,31828,31825,31764,31854,31762,31763,31815,40300,40357,31797,31720,31767,31718\n        ,31719,32347,31612,31686,32142,31690,31687,31678,31986,31679,31746,31340,32570,32167,31872,31781,32005,32515,32540\n        ,32543,32549,32587,32588,32589,32590,32768,32777,34636,32685,32642,32621,32593,32594,32592,32595,32792,34690,32626\n        ,32828,32831,32838,32607,32610,32611,32614,32832,32620,32622,32628,34447,32630,34449,32634,32648,32813,32790,32709\n        ,32713,32678,32673,32643,32644,32645,32646,32819,34466,34621,32649,32650,32654,32655,32656,32658,32660,32661,32662\n        ,32663,32664,32665,32667,32668,32669,32670,32677,32675,32679,32683,32703,32692,32715,32731,32755,32727,32723,32739\n        ,32743,32808,32751,32687,32691,32695,32699,32707,32711,32719,32735,32747,32759,32680,32682,32686,32684,32742,32693\n        ,32694,32696,32700,32714,32712,32718,32716,32883,32726,32729,32730,32728,32734,32737,32738,32744,32748,32750,32805\n        ,32764,32796,32802,32605,32599,32786,32816,32763,32765,32766,32814,32785,32784,32827,32618,32624,32606,32603,34479\n        ,32843,32846,34419,34486,32855,32853,32873,32871,34591,34425,32875,32859,32878,32867,34520,34519,32887,32886,33245\n        ,32904,32908,32911,34429,34592,32921,32920,32919,32918,32929,32928,32927,32926,32937,32936,32935,32934,32945,32944\n        ,32943,32942,32948,32947,32946,32953,32954,32957,32955,32961,32959,32958,32965,32964,32963,32962,32969,32967,32966\n        ,32973,32972,32971,32977,32976,32975,32974,32981,32980,32979,32985,32984,32983,32982,32989,32987,32986,32993,32992\n        ,32991,32990,32997,32996,32995,32994,33001,33000,32998,33005,33004,33002,33009,33008,33007,33006,33013,33011,33010\n        ,33016,33015,33014,33019,33018,33025,33023,33022,33027,33026,33030,33033,33034,33037,33041,33040,33039,33038,33045\n        ,33044,33043,33047,33046,33049,33051,33050,34543,33055,33054,34556,33060,33059,33065,33064,33063,33062,33069,33068\n        ,33067,33066,33072,33070,33077,33076,33074,33081,33078,33085,33084,33083,33082,33089,33088,33087,33086,33093,33092\n        ,33091,33090,33097,33096,33095,33101,33100,33099,33098,33105,33104,33103,33102,33109,33108,33107,33106,33113,33112\n        ,33111,33110,33117,33115,33114,33120,33119,33124,33123,33129,34319,33132,33131,33130,33135,33134,33139,33138,33137\n        ,33144,33141,33148,33147,33146,33145,33152,33151,33150,33149,33156,33158,33161,34299,34433,33163,34442,33168,33167\n        ,33443,33171,33170,33187,34535,33179,33178,33185,33182,33186,33189,33193,33192,33195,33194,33201,33198,33205,33203\n        ,33209,33207,33206,33212,33211,33210,33216,33215,33214,33221,33220,33219,33218,33225,33224,33222,33229,33228,33233\n        ,33232,33231,33230,33236,33237,33241,33244,33243,33242,33248,34525,33250,33251,33257,33256,33255,33254,33261,33260\n        ,33259,33258,33265,33262,33267,33266,33271,33270,33277,33274,33283,33279,33278,33282,33289,33287,33286,33293,33297\n        ,33300,33298,33304,33303,33308,33307,33312,33311,33317,33315,33321,33325,33324,33323,33328,33333,33337,33339,34557\n        ,33341,33345,33344,33349,33353,33352,33351,33357,33361,33358,33364,33362,33368,33372,33371,33370,33377,33375,33381\n        ,33383,33387,33389,33392,33396,33395,33394,33401,33400,33801,33419,33423,33429,33428,33426,33430,33432,33435,33434\n        ,33438,33157,33439,33446,33453,33451,33450,33455,33454,33465,33464,33462,33478,33485,33484,33483,33482,33913,33912\n        ,33489,33567,33493,33492,33491,33490,33501,33500,33499,33498,33513,33521,33529,33528,33523,33526,33537,33535,33540\n        ,33525,33538,33544,33545,33549,33496,33553,33563,33571,33577,33576,33581,33585,33589,33574,33597,33598,33602,33550\n        ,33617,33614,33546,33586,33607,33638,33609,33629,33632,33631,33630,33645,33639,33620,33653,33654,33657,33658,33666\n        ,33669,33670,33674,33673,33672,33671,33678,33677,33682,34216,34751,34764,33891,33486,33689,33698,33683,33701,33720\n        ,33667,33696,33675,33708,33687,32923,33730,33729,33728,32925,33738,33747,32932,33745,33751,33752,33763,32940,33761\n        ,33767,33771,33768,33779,33787,33783,33235,33795,33794,33792,33798,33797,33405,33810,33809,33808,33813,33403,33817\n        ,33827,33828,33407,33825,33833,33843,33841,33461,33459,33850,33844,33859,33858,33857,33856,33861,33652,33870,33869\n        ,33868,33883,33656,33881,33880,33887,33899,33897,33660,33662,33906,33900,33923,33693,33926,33924,33930,33928,33932\n        ,33939,33938,33937,33936,33943,33942,33947,33946,33945,33951,33950,33949,33954,33953,33952,33957,33956,33961,33960\n        ,33967,33965,33975,33974,33973,33972,33979,33978,33976,33982,33987,33986,33985,33984,33990,33988,33994,33992,33996\n        ,34000,34006,34005,34011,34014,34017,34022,34026,34030,34029,34033,34039,34043,34042,34046,34051,34050,34055,34054\n        ,34059,34057,34056,34062,34061,34067,34065,33716,34083,34080,34084,34091,34088,34095,34093,34102,34105,34110,34109\n        ,34115,34113,34112,34119,34117,34123,34125,34130,34129,34134,34133,34132,34139,34137,34136,34142,34146,34144,34151\n        ,34152,34159,34158,34163,34161,34160,34164,34170,34259,34173,34178,34182,34187,34190,34188,34194,34193,34192,32952\n        ,32950,33832,33509,33604,33643,33649,33508,33512,33514,33506,33515,34200,33524,33522,33530,33533,33532,33497,33495\n        ,33554,33494,33560,33558,33562,33566,33559,33625,33575,33580,33584,33582,33588,33590,33592,33635,33502,33628,33505\n        ,34224,33681,33680,33679,33665,33664,33663,33712,33715,33717,33692,33694,33854,34343,33706,33705,33704,33726,33725\n        ,32922,32924,33737,32931,33668,32933,33750,33699,32930,32939,33676,32941,33777,33234,33778,33789,33804,33800,33404\n        ,33402,33812,33408,33406,33458,33460,33866,33724,33862,33651,33876,33655,33888,33710,33659,34221,34226,34231,34227\n        ,34245,34244,34243,34253,34251,34265,34269,34271,34277,34276,34281,34278,34284,34283,34288,32688,34291,34295,32891\n        ,32862,32903,32852,32854,34320,34379,34326,34338,34350,34367,34381,32938,33409,33661,34412,32900,32861,32858,34421\n        ,32860,32876,32877,32912,32913,33164,33165,34437,34293,33169,33166,34168,32633,32631,32632,34454,32640,34465,32810\n        ,32811,34477,34720,32844,34482,34417,32856,32857,34450,32627,34490,34453,34492,34446,34682,32778,32591,34501,34694\n        ,34503,32689,34323,33128,34515,34410,32888,32889,34521,34409,33246,33247,34532,34176,33180,33181,34537,34397,33056\n        ,33057,34548,33390,34551,33281,33061,33058,33334,33335,34564,34286,34229,34571,34569,34570,34574,34582,34577,32915\n        ,34586,34598,34603,34601,34596,34618,32672,34624,32647,34626,32720,34575,34634,32674,32789,32612,32895,32896,34650\n        ,34472,34648,34470,34471,34664,32868,32884,32885,32917,32625,32623,34677,34680,34679,34721,34685,34686,34689,32598\n        ,32638,32596,32597,34698,34499,32767,32600,32601,32825,32824,32651,34459,32653,32639,32773,32774,34640,34639,34706\n        ,32708,33121,34676,33503,33252,33416,33412,33384,33268,33196,33444,33440,32909,32872,32851,32845,33536,32960,33052\n        ,33048,33188,33172,33176,33174,34668,34660,34656,32849,32863,33153,33184,33264,33032,32956,32635,32636,32865,32864\n        ,32847,34475,34715,32848,32869,33732,33709,33691,33721,33703,32803,33618,33685,33875,33684,33727,34734,33714,33688\n        ,33702,33700,33686,33695,33915,33488,33543,33606,33621,32842,32893,32898,32897,34302,33126,30675,30286,30663,34800\n        ,34799,34798,34797,34978,34985,36842,34894,34849,34830,34802,34801,34803,34808,35002,36899,34833,35039,35044,35045\n        ,34820,34817,34824,34821,35043,34831,34829,34839,36654,34837,36652,34841,34859,35020,34997,34918,34922,34885,34882\n        ,34856,34855,34854,34853,35032,36675,36830,34858,34857,34861,34868,34867,34865,34871,34870,34869,34876,34875,34874\n        ,34880,34879,34878,34877,34886,34888,34892,34896,34916,34903,34928,34944,34968,34940,34936,34952,34956,35017,34964\n        ,34900,34904,34908,34912,34920,34924,34932,34948,34960,34972,34891,34889,34893,34895,34949,34902,34901,34907,34911\n        ,34921,34923,34925,34927,35094,34933,34938,34937,34939,34941,34946,34945,34955,34959,34957,35013,34975,35004,35010\n        ,34814,34812,34827,34992,35026,34976,34974,34973,35028,34993,34994,35040,34825,34835,34813,34816,36686,35056,35053\n        ,36617,36628,36695,35068,35062,35080,35082,36800,36630,35086,35072,35091,35079,36723,36724,35098,35099,35448,35109\n        ,35113,35118,36634,36799,35124,35125,35126,35127,35132,35133,35134,35135,35140,35141,35142,35143,35148,35149,35150\n        ,35151,35153,35154,35155,35156,35163,35160,35162,35164,35166,35167,35168,35169,35170,35171,35172,35174,35175,35176\n        ,35177,35178,35180,35181,35182,35183,35184,35185,35186,35188,35189,35190,35191,35192,35194,35195,35196,35197,35198\n        ,35199,35200,35201,35202,35203,35204,35205,35207,35208,35209,35211,35212,35213,35214,35215,35216,35218,35219,35221\n        ,35222,35223,35226,35227,35228,35230,35231,35234,35235,35239,35236,35243,35240,35244,35245,35246,35247,35248,35249\n        ,35250,35254,35255,35252,35258,35259,36748,35262,35263,36759,35265,35266,35268,35269,35270,35271,35272,35273,35274\n        ,35275,35277,35279,35280,35281,35283,35284,35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,35297,35298\n        ,35299,35300,35301,35302,35304,35305,35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317,35318\n        ,35319,35320,35322,35323,35325,35326,35329,35330,35338,36525,35335,35336,35337,35340,35341,35344,35345,35346,35347\n        ,35350,35351,35352,35353,35354,35355,35356,35357,35358,35360,35367,35364,36506,36638,35370,36645,35373,35374,35650\n        ,35378,35379,35394,36740,35386,35387,35388,35391,35395,35392,35396,35397,35402,35403,35404,35407,35408,35410,35412\n        ,35414,35415,35417,35418,35419,35421,35422,35423,35424,35425,35426,35427,35428,35429,35431,35432,35433,35436,35437\n        ,35438,35439,35441,35440,35444,35449,35450,35451,35453,36734,35459,35458,35460,35461,35462,35463,35464,35465,35466\n        ,35467,35468,35471,35474,35475,35478,35479,35480,35483,35490,35486,35487,35491,35492,35494,35495,35496,35500,35505\n        ,35507,35509,35510,35513,35514,35517,35518,35520,35522,35524,35528,35529,35530,35533,35536,35540,35546,36766,35544\n        ,35548,35549,35552,35556,35557,35558,35560,35564,35567,35569,35571,35573,35577,35578,35579,35580,35582,35584,35590\n        ,35594,35592,35597,35601,35602,35603,35604,35605,36008,35626,35630,35632,35633,35635,35639,35637,35642,35643,35647\n        ,35359,35646,35655,35656,35658,35659,35662,35663,35668,35669,35671,35687,35688,35689,35690,35691,36120,36121,35692\n        ,35774,35696,35697,35698,35699,35704,35705,35706,35707,35716,35724,35732,35733,35730,35735,35740,35742,35745,35728\n        ,35747,35749,35748,35752,35701,35756,35770,35778,35780,35781,35784,35788,35792,35783,35800,35807,35811,35759,35823\n        ,35819,35755,35795,35816,35848,35814,35832,35837,35838,35839,35850,35847,35826,35858,35857,35862,35861,35869,35874\n        ,35873,35877,35878,35879,35880,35881,35882,35885,36423,36956,36973,36094,35695,35894,35901,35892,35906,35924,35876\n        ,35903,35884,35914,35896,35130,35935,35936,35937,35128,35943,35950,35137,35952,35954,35961,35966,35145,35968,35970\n        ,35974,35977,35982,35990,35986,35442,35998,35999,36001,36003,36004,35608,36015,36016,36017,36020,35610,36024,36030\n        ,36037,35614,36032,36040,36046,36048,35664,35666,36055,36053,36062,36063,36064,36065,36068,35859,36075,36076,36077\n        ,36086,35863,36088,36089,36090,36102,36104,35867,35865,36111,36109,36126,35898,36131,36133,36135,36137,36141,36142\n        ,36143,36144,36145,36146,36147,36150,36151,36152,36154,36155,36156,36159,36160,36161,36164,36165,36168,36169,36170\n        ,36172,36178,36179,36180,36181,36182,36183,36185,36187,36190,36191,36192,36193,36195,36197,36199,36201,36205,36209\n        ,36211,36212,36214,36219,36224,36227,36231,36235,36236,36240,36242,36246,36247,36251,36254,36255,36258,36259,36262\n        ,36264,36265,36267,36268,36270,36272,35921,36286,36289,36293,36294,36297,36298,36300,36307,36312,36315,36316,36318\n        ,36320,36321,36322,36324,36326,36332,36335,36336,36339,36340,36341,36342,36344,36345,36347,36351,36353,36354,36361\n        ,36362,36363,36366,36368,36369,36373,36375,36466,36380,36383,36387,36390,36395,36397,36399,36400,36401,35157,35159\n        ,36041,35712,35809,35852,35854,35713,35717,35723,35715,35722,36403,35729,35731,35739,35736,35737,35700,35702,35763\n        ,35703,35765,35767,35771,35775,35766,35828,35782,35785,35789,35791,35793,35799,35797,35842,35711,35833,35708,36431\n        ,35886,35887,35888,35870,35871,35872,35917,35922,35920,35899,35897,36059,36549,35909,35910,35911,35931,35932,35131\n        ,35129,35944,35138,35875,35136,35955,35908,35139,35146,35883,35144,35984,35443,35983,35996,36013,36009,35609,35611\n        ,36021,35613,35615,35667,35665,36071,35933,36067,35860,36085,35864,36097,35919,35868,36426,36429,36438,36435,36448\n        ,36449,36450,36456,36458,36468,36472,36478,36480,36481,36484,36487,36489,36490,36493,34899,36498,36502,35102,35069\n        ,35110,35063,35061,36524,36585,36530,36542,36554,36573,36589,35147,35612,35866,36619,35105,35070,35065,36626,35071\n        ,35085,35084,35117,35116,35369,35368,36642,36496,35372,35375,36377,34842,34844,34843,36663,34851,36668,35023,35022\n        ,36680,36923,35055,36691,36622,35067,35066,36659,34840,36699,36656,36697,36655,36891,34991,34804,36704,36903,36710\n        ,34898,36527,35332,36721,36614,35097,35096,36730,36615,35455,35454,36735,36385,35385,35384,36746,36603,35261,35260\n        ,36751,35599,36756,35484,35264,35267,35543,35542,36767,36495,36433,36776,36778,36777,36781,36790,36786,35122,36796\n        ,36806,36808,36810,36802,36825,34883,36827,34860,36833,34931,36780,36838,34881,34998,34823,36852,35104,36856,36859\n        ,36677,36853,36679,36678,36869,35078,35093,35092,35120,34834,34836,36880,36885,36886,36930,36888,36895,36892,34805\n        ,34845,34807,34806,36907,36706,34979,34811,34810,35034,35035,34864,36666,34862,34852,34981,34980,36846,36847,36913\n        ,34919,35324,36881,35710,35457,35621,35617,35589,35473,35401,35649,35645,35112,35081,35064,35054,35101,35741,35165\n        ,35257,35253,35393,35377,35381,35383,36873,36865,36861,35058,35076,35363,35389,35469,35237,35161,34848,34847,35074\n        ,35075,35060,36682,36920,35059,35077,35941,35913,35900,35929,35912,35015,35822,35890,36078,35891,35930,36941,35923\n        ,35895,35905,35907,35889,35904,36118,35693,35750,35817,35825,35050,35049,36882,34815,34809,35025,34996,36510,35100\n        ,35107,36857,36922,36511,35334,36997,36998,36999,37000,37001,37002,37003,37005,37006,37007,37018,37009,37011,37012\n        ,37013,37016,37017,37020,37022,37021,37025,37026,37028,37029,37030,37033,37034,37037,37038,37040,37041,37042,37045\n        ,37046,37050,37053,37054,37055,37059,37060,37065,37066,37067,37068,37069,37070,37072,37073,37074,37076,37077,37078\n        ,37080,37081,37082,37084,37085,37088,37089,37092,37093,37094,37095,37096,37097,37098,37099,37101,37102,37105,37106\n        ,37109,37111,37113,37117,37121,37123,37125,37126,37128,37129,37130,37134,37052,37142,37145,37139,37143,37144,37064\n        ,37024,37138,37153,37154,37155,37156,37157,37158,37160,37161,37162,37164,37175,37165,37166,37168,37169,37172,37173\n        ,37177,37178,37179,37180,37181,37182,37183,37185,37186,37190,37193,37194,37195,37197,37198,37202,37207,37205,37210\n        ,37211,37212,37213,37214,37218,37221,37222,37223,37224,37234,37228,37380,37225,37226,37227,37229,37231,37233,37235\n        ,37236,37237,37240,37244,37245,37246,37247,37248,37249,37250,37252,37253,37254,37257,37262,37264,37266,37274,37277\n        ,37279,37280,37283,37284,37285,37289,37294,37276,37296,37292,37298,37302,37305,37309,37314,37318,37322,37326,37330\n        ,37334,37338,37342,37345,37349,37354,37358,37362,37366,37370,37374,37378,37382,37386,37389,37393,37397,37401,37406\n        ,37410,37297,37299,37301,37306,37310,37311,37313,37315,37319,37323,37327,37329,37333,37336,37337,37339,37051,37346\n        ,37124,37353,37355,37359,37363,37365,37369,37372,37373,37375,37377,37381,37390,37394,37395,37398,37400,37208,37405\n        ,37275,37023,37459,37447,37462,37446,37441,37442,37444,37443,37448,37449,37451,37452,37455,37440,37460,37437,37438\n        ,37439,37473,37137,37150,37291,37480,37486,37485,37481,38065,37673,37515,37660,38058,38310,37504,37498,37524,37691\n        ,37690,38276,37654,37528,37526,37635,37510,37646,37611,38319,37765,37559,37512,37507,37521,37511,37594,37578,37514\n        ,37768,37527,37517,37771,38057,37536,37535,37534,37533,37539,37537,37544,37542,37541,37548,37546,37552,37550,37549\n        ,37556,37553,37558,37557,37562,37567,37566,37565,38098,37760,37579,38336,37583,37580,37577,37584,37581,37591,37604\n        ,37586,37585,37596,38326,37588,37593,37592,37597,37600,37601,37608,37605,37610,37609,37614,37620,37619,37618,37624\n        ,37623,37621,37628,37627,37626,37631,37629,37633,37643,37641,37648,37656,37522,37684,40107,37506,38073,37500,37499\n        ,37530,37501,37525,37674,37736,37612,37589,37616,37590,37748,37576,37638,37572,37573,37570,37569,37762,37681,37509\n        ,37773,37519,37665,37520,37532,37529,39046,37850,37851,38452,38263,40505,38042,38837,38441,38264,38265,37815,37816\n        ,37803,38102,37825,37826,38040,37852,37855,37858,38419,38412,38104,38105,40457,38271,38033,38437,37873,38250,37916\n        ,37921,37806,37807,37952,40521,40429,37956,40131,38226,37951,37993,37957,37958,37963,37960,37973,38182,37974,37981\n        ,40513,37979,40445,37698,38114,37980,37982,38164,37709,38004,38023,38005,37882,39743,39514,39585,37817,38189,38012\n        ,38014,37954,38024,38026,37994,38056,37853,37854,38406,38043,38044,38255,37922,38046,40475,37847,38006,37711,38063\n        ,37714,37717,37716,37720,37725,37724,38079,38086,38081,37967,38090,37969,37792,37791,38094,38041,38096,37587,38097\n        ,38195,38137,38108,37965,38116,38130,38192,37823,38103,38140,39919,40468,37859,40487,38148,37784,37790,38156,37805\n        ,40530,37985,38207,37986,38027,38285,38028,38174,37710,38175,38176,38083,37780,37794,38183,37781,37919,38095,37869\n        ,38092,40465,37870,40462,38139,37819,37818,38187,37795,37821,37820,38134,38166,37683,40155,38287,38029,38030,38202\n        ,37934,38199,38214,37931,38216,37953,40437,37699,37774,38228,38225,38000,38306,38238,38221,37948,37947,37700,37701\n        ,39942,38243,37776,38300,37663,38069,37721,37786,37785,37800,37880,37812,37797,37814,37813,40453,37884,38350,37962\n        ,38018,37887,37505,37661,37503,37502,38162,37686,37998,38159,38295,37995,38293,37955,40425,37943,38234,38246,37657\n        ,38235,37516,37658,37513,37769,37772,37777,37992,38165,37697,37732,37740,38316,37671,37670,38278,37696,37741,37744\n        ,38331,37747,37752,37751,37754,37753,37757,37735,38341,37787,38274,37961,38272,38270,37885,37886,38121,38464,37924\n        ,39954,38831,38370,37827,38375,37838,38378,37835,37828,38382,38372,37834,38397,38393,37846,37844,37842,38377,37840\n        ,37837,38401,37833,38409,38407,37914,37913,38416,38418,37860,38420,37861,38424,37862,37895,38431,37896,37902,37900\n        ,38443,37903,38448,37904,37899,38453,37909,38413,37910,37907,37911,38467,38465,38035,38038,38036,37845,37893,37863\n        ,39038,38845,38482,38484,38486,38488,38490,38494,38496,39408,38990,39326,38869,38502,38505,38873,38536,38877,38880\n        ,39051,38509,38507,38511,39228,38515,38516,38519,38520,38523,38525,38533,38531,38534,38535,38538,39351,38893,39231\n        ,38553,38554,38561,38559,38568,38575,38576,38577,38591,38574,39238,39833,38601,38582,38974,39196,38606,38607,38996\n        ,38976,39005,38618,38619,39342,39360,38626,38629,38630,39186,38635,38709,38637,38638,38636,39011,38647,38696,39346\n        ,38659,38656,38662,39247,39249,38664,38663,39014,38941,38678,39067,38682,38679,38681,39055,39204,38732,38697,38530\n        ,38529,38528,38702,38703,38586,38711,38713,38734,38735,38736,38738,38739,38740,38744,38745,38747,38748,38751,38752\n        ,38753,38755,38756,38757,38760,38761,38764,38765,38767,38768,38769,38771,38775,38776,38773,38784,38785,38781,38971\n        ,38797,39181,38919,38799,38800,38802,38927,38809,38807,38808,38811,38812,38815,38816,38818,38819,38823,38824,40023\n        ,39282,38835,38839,38840,38841,38842,38844,38847,38849,38853,38857,38858,38860,38868,38866,38870,38874,38772,38879\n        ,38881,38883,38886,38887,38890,38780,38896,38908,38917,38920,38925,38928,38930,38932,38936,38940,38944,38948,39369\n        ,38960,38963,38962,38965,38968,38865,38585,39212,39175,37915,38864,38998,39001,39002,39081,39006,39008,38937,39017\n        ,38934,38793,38789,38904,38905,38595,38730,38592,38570,38573,38569,39265,38589,38728,38901,38900,38583,38579,38907\n        ,38560,38558,39199,38557,39036,39044,38543,38545,38547,39027,38565,38788,39363,39052,38957,38729,39113,38617,38616\n        ,38650,38649,38677,39065,38942,38796,38794,38598,38915,38597,39291,38594,38733,38700,38590,39079,39077,38608,38609\n        ,39091,38640,39089,38641,38644,38639,39101,38642,39098,38669,39105,38646,38670,38673,39108,38718,39116,38725,39120\n        ,39135,39031,39030,39127,38978,39133,39134,39171,39136,39032,39114,38724,38723,39087,39145,38614,38615,39153,39155\n        ,39056,39057,38643,39059,39162,38674,39062,39242,39187,39192,39193,38605,38604,38689,38690,38687,38686,38492,38987\n        ,39207,39213,38988,39217,38521,39221,38517,38512,39222,38514,38513,38550,38549,39235,38581,38599,38603,39414,39240\n        ,39382,38480,39224,39223,39208,38495,38566,38587,39330,38563,38527,39294,37926,39280,39281,39285,39053,39054,39307\n        ,39289,39292,38950,39296,38685,39300,38651,38622,38621,39264,39312,39313,38500,38497,38499,38498,39269,39274,39270\n        ,39266,38620,38623,38654,38653,38506,39276,38542,39353,39354,39357,38593,38625,38624,38655,38658,38541,39375,38539\n        ,38504,38977,38524,38493,38489,38485,38481,38483,39384,38544,38508,38510,39277,39398,39374,39377,39314,39319,38862\n        ,38863,39320,39323,39334,39338,38951,38827,39287,39431,39647,38634,39478,39507,38600,39705,39876,39420,39425,38710\n        ,38707,38706,39434,39419,39418,39189,38666,39015,38668,39063,38676,38684,39440,39584,39688,39499,39612,39573,39448\n        ,39449,39471,39656,39509,39479,39441,39745,39588,39472,39597,39455,39532,39456,39592,39467,39498,39494,39459,39460\n        ,39552,39451,39576,39541,39477,39483,39442,39443,39523,39524,39519,39558,39537,39538,39468,39543,39551,39767,39452\n        ,39553,39555,39652,39755,39566,39750,39570,39636,39464,39454,39462,39480,39513,39522,39521,39582,39759,39453,39561\n        ,39516,39600,39598,39488,39463,39465,39605,39609,39466,39620,39618,39617,39621,39529,39632,39469,39623,39628,39470\n        ,39635,39473,39637,39641,39474,39475,39481,39654,39482,39659,39484,39657,39661,39485,39450,39790,39530,39781,39487\n        ,39676,39546,39671,39772,39677,39679,39855,39491,39690,39689,39495,39698,39697,39500,39501,39497,39702,39502,39504\n        ,39505,39457,39506,39706,39445,39446,39565,39564,39569,39568,39562,39580,39724,39559,39557,39556,39674,39673,39736\n        ,39675,39681,39742,39710,39709,39714,39713,39718,39717,39722,39721,39761,39723,39730,39729,39734,39733,39774,39735\n        ,39489,39518,39785,39490,39572,39571,39793,39670,39798,39527,39802,39447,39808,39545,39812,39548,39510,39188,39883\n        ,39821,39884,39239,39890,39388,38912,38913,39831,39237,38910,39386,39836,38911,39826,38708,39846,39540,39851,39684\n        ,39493,39492,39859,39692,39863,39496,39864,39594,39871,39577,39872,39458,39415,39534,39243,39416,39183,39244,38921\n        ,39184,39893,38918,38185,39907,38929,39912,38926,40414,38449,37905,38379,37836,38167,37868,38403,37831,38390,37865\n        ,38050,37879,37938,38460,37856,38469,38400,38380,38446,40061,38438,38440,39960,40073,37848,37849,39951,38368,37830\n        ,37829,38385,38436,38367,38366,38477,40085,37891,38478,37897,37892,37811,38427,37789,39964,39966,40041,39970,39968\n        ,39974,39972,39971,39975,39977,39978,39979,39981,39982,39986,39984,39983,39990,39988,39987,40057,40081,39994,39992\n        ,39993,39996,40000,40089,40006,40004,40005,40008,40014,40013,40016,40069,40018,40065,40017,40009,39965,39969,39999\n        ,38833,38832,38956,38955,38830,40019,37925,40077,40053,40049,40045,40037,40033,39995,37728,40098,37726,40102,37722\n        ,37715,37718,40109,37712,40112,37708,40116,38232,38001,38055,40129,38052,40133,38003,40138,38173,38201,40160,38820\n        ,38813,39824,39248,38805,39542,38633,38632,39422,39741,39915,40145,37693,40151,38280,37688,37687,40159,38078,37729\n        ,40142,37730,37942,40122,37999,37941,37944,38020,37946,37937,38303,38299,37930,37988,39935,37929,37978,38218,37888\n        ,37949,37890,37889,39927,37878,38269,37875,37874,37867,38142,37866,39086,39159,39092,38985,38983,38984,38981,39130\n        ,38979,38980,38721,39028,38719,38720,39109,39110,38611,39151,38613,38610,37918,39082,37508,40176,38324,38031,37959\n        ,37783,40249,40190,38503,38826,40201,39367,37782,37779,37801,37822,40221,26832,27328,40229,40239,40246,40164,39245\n        ,39180,40259,31500,31503,32156,31501,40276,32556,40280,32014,31805,32029,31810,31818,31812,31811,31814,31813,40304\n        ,32359,32162,31583,32160,31580,40312,31575,31570,40317,40326,40327,40331,31331,40335,31352,40336,32075,40345,32078\n        ,32088,32087,40355,32091,32096,32095,40361,32355,40367,31509,32109,40374,40372,31786,31729,32367,31731,31728,31607\n        ,32280,31672,31608,31714,31997,31712,31711,31597,32128,32023,31594,31791,31851,32017,31792,32083,32079,32031,40342\n        ,31808,31807,31822,40286,32033,31823,40391,31864,40395,31835,32548,32289,31776,31755,31761,31858,31900,31758,32539\n        ,40413,40124,37940,37939,40421,38022,37936,37935,37989,38297,40433,37990,37928,37927,40441,38220,37976,37975,40449\n        ,38010,37877,37876,38048,38267,38049,38145,40461,40469,38146,37857,40472,31884,32053,32052,32584,37809,37808,40493\n        ,38150,40497,37871,40501,38258,37799,37798,40506,38016,37972,37971,40517,38210,37933,37932,40522,37984,40529,38289\n        ,37997,37996,38170,22683,23598,40542,40543,40544,40545,40547,40548,40549,40551,40552,40553,40555,40556,40557,40559\n        ,40560,40561,40563,40564,40565,40567,40568,40569,40571,40572,40573,40575,40576,40577,40579,40580,40581,40583,40584\n        ,40585,40587,40588,40589,40591,40592,40593,40595,40596,40597,40599,40600,40601,40603,40605,40606,40608,40609,40612\n        ,40615,40618,40621,40624,40627,40630,40633,40636,40639,40642,40645,40648,40654,40655,40656,40657,40658,40659,40660\n        ,40661,40662,40663,40664,40665,40666,40667,40668,40669,40670,40671,40672,40673,40674,40675,40676,40677,40678,40679\n        ,40680,40681,40682,40683,40684,40685,40686,40687,40688,40689,40690,40692,40693,40694,40695,40696,40698,40699,40701\n        ,40702,40703,40704,40705,40706,40708,40711,40712,40716,40718,40719,40722,40724,40727,40728,40731,40732,40735,40738\n        ,40740,40743,40745,40746,40747,40749,40754,40755,40756,40758,40759,40760,40763,40765,40766,40767,40768,40769,40773\n        ,40774,40775,40780,40782,40787,40789,40794,40797,40799,40800,40801,40741,40803,40804,40806,40809,40810,40814,40815\n        ,40816,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40831,40832,40834,40835,40836\n        ,40837,40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849,40851,40852,40854,40855,40856,40858\n        ,40859,40862,40863,40864,40866,40868,40870,40872,40873,40876,40880,40884,40888,40889,40892,40893,40897,40901,40905\n        ,40906,40907,40909,40911,40914,40916,40917,40918,40922,40923,40924,40925,40927,40929,40930,40931,40934,40935,40939\n        ,40940,40951,40954,40957,40960,40903,40963,40964,40966,40971,40976,40742,40991,40995,41014,40902,41029,41031,41048\n        ,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41061,41062,41063,41064,41065,41066,41067,41068\n        ,41069,41070,41071,41072,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41087,41089,41090\n        ,41091,41093,41094,41095,41096,41097,41098,41099,41101,41102,41103,41104,41105,41106,41107,41108,41109,41110,41111\n        ,41112,41113,41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125,41126,41127,41128,41129,41130\n        ,41131,41132,41133,41134,41135,41136,41137,41138,41139,41140,41142,41143,41144,41145,41146,41147,41150,41151,41153\n        ,41154,41155,41156,41157,41158,41159,41162,41163,41164,41166,41167,41168,41169,41170,41174,41175,41177,41178,41179\n        ,41181,41182,41183,41184,41185,41186,41187,41189,41190,41191,41193,41194,41195,41196,41197,41198,41200,41202,41203\n        ,41204,41206,41207,41208,41210,41211,41213,41214,41215,41216,41217,41218,41222,41223,41226,41227,41230,41231,41232\n        ,41233,41234,41235,41236,41237,41238,41239,41241,41242,41243,41244,41246,41247,41248,41250,41251,41252,41254,41255\n        ,41256,41257,41259,41260,41263,41264,41267,41268,41270,41271,41272,41273,41275,41276,41277,41279,41282,41284,41291\n        ,41292,41293,41294,41295,41296,41300,41301,41303,41304,41306,41307,41308,41309,41310,41311,41312,41313,41314,41315\n        ,41316,41317,41318,41321,41322,41324,41328,41329,41331,41332,41334,41335,41336,41337,41338,41339,41340,41341,41342\n        ,41343,41344,41345,41346,41347,41348,41349,41350,41352,41353,41354,41355,41356,41357,41358,41361,41362,41363,41364\n        ,41366,41368,41372,41376,41379,41380,41381,41382,41383,41384,41386,41387,41388,41390,41392,41394,41395,41396,41400\n        ,41404,41408,41412,41413,41414,41416,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41433\n        ,41434,41435,41436,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41449,41450,41451,41452,41453\n        ,41455,41456,41458,41459,41460,41461,41463,41464,41465,41466,41467,41468,41469,41470,41471,41475,41478,41479,41481\n        ,41482,41484,41485,41486,41489,41491,41492,41494,41495,41496,41497,41498,41500,41501,41502,41503,41504,41505,41506\n        ,41509,41510,41511,41512,41513,41515,41516,41517,41521,41522,41523,41524,41527,41530,41531,41532,41533,41538,41544\n        ,41545,41546,41547,41548,41550,41551,41552,41554,41559,41561,41562,41563,41564,41567,41568,41570,41571,41572,41573\n        ,41574,41575,41577,41579,41580,41582,41589,41592,41594,41595,41597,41599,41600,41601,41602,41604,41605,41607,41608\n        ,41609,41610,41611,41613,41614,41615,41616,41617,41619,41620,41621,41622,41623,41624,41626,41627,41628,41629,41630\n        ,41631,41634,41635,41636,41637,41638,41641,41643,41644,41647,41652,41653,41654,41655,41656,41659,41660,41663,41665\n        ,41666,41667,41669,41670,41673,41674,41676,41677,41678,41679,41680,41681,41682,41683,41685,41686,41687,41688,41689\n        ,41691,41692,41693,41696,41701,41702,41703,41705,41707,41711,41712,41715,41716,41718,41722,41725,41727,41728,41730\n        ,41734,41738,41742,41743,41747,41752,41753,41756,41758,41759,41762,41763,41764,41765,41766,41767,41768,41769,41771\n        ,41772,41773,41774,41775,41776,41777,41779,41780,41781,41782,41783,41784,41785,41787,41788,41789,41790,41791,41793\n        ,41794,41795,41797,41798,41799,41800,41801,41802,41803,41804,41805,41807,41808,41810,41814,41817,41818,41819,41821\n        ,41823,41824,41825,41826,41828,41830,41834,41837,41838,41840,41841,41842,41843,41844,41845,41846,41847,41849,41850\n        ,41851,41852,41854,41855,41856,41857,41858,41859,41861,41862,41863,41866,41867,41868,41870,41871,41872,41873,41876\n        ,41878,41879,41881,41882,41883,41884,41885,41886,41887,41888,41890,41891,41893,41894,41897,41898,41899,41900,41901\n        ,41902,41904,41906,41907,41910,41911,41912,41914,41916,41919,41920,41921,41922,41923,41925,41927,41928,41930,41931\n        ,41932,41933,41934,41935,41937,41939,41940,41944,41946,41947,41948,41949,41951,41952,41954,41957,41959,41960,41962\n        ,41963,41964,41965,41967,41968,41971,41972,41975,41976,41978,41979,41980,41981,41982,41983,41987,41988,41989,41994\n        ,41998,42002,42006,42009,42014,42025,42030,42038,42039,42041,42042,42044,42045,42046,42051,42053,42055,42060,42061\n        ,42062,42067,42070,42072,42074,42077,42082,42094,42098,42101,42111,42119,42124,42126,42129,42132,42133,42141,42146\n        ,42150,42152,42157,42159,42160,42169,42171,42177,42179,42187,42192,45641,42207,42202,42206,42209,42217,42219,42221\n        ,42226,42227,42228,42229,42231,42232,42234,42238,42242,42245,42248,42249,42196,42251,42253,42254,42256,42257,42258\n        ,42260,42262,42263,42264,42266,42267,42269,42271,42275,42279,42281,42283,42286,42289,42290,42293,42299,42304,42306\n        ,42309,42310,42320,42321,42322,42324,42327,42328,42330,42333,42335,42339,42348,42349,42352,42353,42355,42358,42359\n        ,42360,42361,42362,42363,42364,42365,42368,42369,42373,42376,42377,42378,42381,42383,42385,42389,42392,42394,42395\n        ,42397,42398,42399,42402,42403,42404,42405,42406,42407,42410,42411,42413,42414,42415,42416,42419,42422,42427,42428\n        ,42433,42434,42437,42438,42440,42441,42442,42445,42446,42448,42449,42451,42452,42453,42456,42457,42459,42460,42461\n        ,42464,42465,42466,42469,42473,42474,42476,42479,42481,42484,42488,42492,42494,42496,42504,42506,42508,42510,42512\n        ,42513,42515,42516,42519,42520,42521,42524,42525,42526,42528,42530,42531,45650,42535,42538,42542,42543,42544,42546\n        ,42548,42552,42555,42559,42560,42561,42562,42563,42564,42565,42566,42567,42568,42569,42570,42571,42572,42573,42575\n        ,42576,42577,42578,42580,42581,42582,42583,42584,42586,42587,42588,42589,42590,42591,42592,42593,42594,42595,42597\n        ,42598,42600,42601,42603,42604,42605,42607,42608,42609,42610,42612,42613,42615,42616,42617,42618,42619,42620,42621\n        ,42622,42623,42624,42625,42626,42627,42628,42629,42630,42631,42632,42633,42634,42635,42636,42637,42638,42639,42640\n        ,42641,42642,42643,42644,42645,42646,42647,42648,42649,42650,42651,42652,42655,42656,42657,42658,42659,42660,42663\n        ,42664,42665,42667,42668,42669,42670,42671,42672,42675,42676,42678,42680,42681,42682,42683,42684,42687,42688,42689\n        ,42691,42692,42693,42695,42696,42697,42698,42699,42700,42701,42703,42704,42705,42708,42709,42710,42711,42712,42714\n        ,42715,42716,42718,42719,42720,42722,42723,42724,42725,42728,42729,42730,42731,42732,42735,42736,42739,42740,42743\n        ,42744,42745,42746,42747,42748,42749,42750,42751,42752,42753,42755,42756,42758,42759,42760,42762,42763,42764,42766\n        ,42767,42769,42770,42771,42774,42775,42778,42779,42780,42782,42783,42785,42786,42787,42789,42790,42792,42798,42799\n        ,42803,42804,42805,42806,42810,42811,42813,42814,42815,42816,42818,42819,42820,42821,42822,42823,42824,42825,42826\n        ,42828,42829,42830,42832,42833,42838,42839,42841,42842,42843,42844,42846,42848,42849,42850,42851,42852,42853,42854\n        ,42855,42856,42857,42858,42860,42861,42862,42863,42864,42865,42866,42868,42869,42870,42871,42873,42876,42878,42882\n        ,42886,42887,42890,42891,42892,42893,42894,42895,42896,42898,42900,42902,42903,42904,42906,42910,42914,42918,42922\n        ,42925,42926,42930,42931,42932,42933,42934,42935,42936,42937,42938,42939,42940,42941,42942,42943,42944,42945,42947\n        ,42948,42949,42950,42951,42952,42953,42954,42955,42956,42957,42958,42959,42960,42961,42965,42966,42967,42968,42970\n        ,42971,42972,42973,42974,42975,42976,42977,42978,42979,42980,42981,42982,42983,42987,42988,42992,42993,42996,42997\n        ,42998,42999,43001,43003,43004,43006,43008,43009,43010,43011,43012,43013,43014,43016,43017,43018,43019,43020,43021\n        ,43023,43025,43026,43029,43030,43031,43032,43033,43035,43038,43039,43040,43045,43046,43048,43055,43056,43057,43058\n        ,43060,43061,43062,43064,43066,43067,43071,43072,43073,43075,43078,43079,43080,43082,43083,43084,43085,43086,43087\n        ,43089,43092,43094,43101,43103,43104,43106,43107,43109,43112,43113,43114,43115,43117,43118,43119,43120,43121,43123\n        ,43124,43125,43127,43129,43130,43131,43132,43133,43134,43135,43136,43138,43139,43140,43141,43142,43143,43144,43148\n        ,43149,43150,43151,43153,43155,43158,43164,43165,43166,43167,43170,43171,43174,43175,43176,43177,43180,43181,43184\n        ,43185,43187,43188,43189,43190,43191,43192,43193,43194,43195,43196,43197,43201,43202,43205,43206,43210,43211,43212\n        ,43213,43215,43217,43219,43226,43228,43230,43232,43235,43236,43238,43241,43244,43248,43251,43252,43255,43265,43266\n        ,43267,43268,43270,43271,43272,43275,43276,43277,43278,43279,43281,43282,43283,43284,43285,43286,43287,43289,43290\n        ,43291,43292,43293,43294,43295,43297,43298,43299,43300,43301,43302,43303,43304,43305,43307,43308,43309,43311,43312\n        ,43313,43314,43315,43317,43318,43320,43322,43324,43327,43328,43329,43331,43333,43336,43337,43338,43340,43342,43344\n        ,43348,43349,43351,43352,43353,43354,43355,43356,43357,43358,43359,43360,43361,43363,43364,43366,43367,43368,43369\n        ,43370,43371,43372,43373,43375,43376,43379,43380,43382,43385,43386,43387,43388,43390,43391,43392,43393,43395,43396\n        ,43397,43398,43399,43400,43402,43404,43405,43407,43408,43409,43412,43413,43414,43415,43416,43418,43419,43420,43424\n        ,43426,43427,43430,43431,43432,43433,43434,43435,43437,43439,43440,43442,43443,43444,43445,43446,43447,43449,43454\n        ,43455,43456,43458,43459,43461,43462,43464,43466,43467,43469,43471,43472,43474,43475,43477,43478,43479,43482,43483\n        ,43486,43487,43488,43490,44309,44321,43491,44311,43496,43500,43504,43508,43513,43516,43529,43532,43539,43540,43544\n        ,43545,43548,43549,43550,43551,43555,43557,43564,43565,43566,43567,43572,43576,43578,43581,43584,43596,43600,43605\n        ,43611,43619,43628,43630,43631,43637,43638,43645,43648,43652,43658,43659,43661,43666,43671,43673,43679,43681,43687\n        ,43698,43699,43703,43707,43712,43718,43720,43724,43726,43727,43730,43732,43733,43735,43737,43739,43743,43748,43750\n        ,43751,43752,43753,43754,43757,43759,43760,43761,43762,43763,43765,43766,43767,43769,43770,43772,43774,43778,43782\n        ,43784,43787,43791,43792,43796,43807,43809,43812,43823,43824,43825,43827,43828,43831,43833,43834,43836,43838,43852\n        ,43853,43854,43856,43857,43858,43859,43862,43863,43864,43865,43868,43869,43872,43873,43876,43879,43880,43882,43884\n        ,43888,43892,43894,43895,43897,43898,43899,43900,43902,43903,43906,43907,43908,43909,43910,43911,44411,43914,43917\n        ,43919,43922,43931,43935,43939,43941,43943,43946,43948,43952,43954,43956,43960,43963,43965,43971,43974,43991,44003\n        ,44005,44007,44009,44010,44012,44013,44014,44017,44020,44021,44023,44024,44025,44026,44027,44029,44032,44034,44037\n        ,44038,44042,44044,44045,44048,44052,44057,44065,44073,44077,44083,44086,44092,44093,44099,44100,44101,44104,44116\n        ,44120,44124,44126,44139,44142,44156,44164,44166,44167,44169,44173,44190,44205,44216,44233,44237,44261,44263,44269\n        ,44272,44277,44278,44283,44287,44288,44290,44302,44304,44310,44312,44327,44330,44340,44350,44353,44354,44357,44359\n        ,44381,44396,44403,44419,44421,44430,44431,44432,44433,44434,44435,44437,44438,44439,44440,44441,44442,44443,44444\n        ,44445,44446,44447,44449,44450,44451,44453,44457,44459,44460,44461,44462,44463,44464,44465,44467,44470,44472,44474\n        ,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44486,44487,44488,44489,44490,44491,44492,44493,44494\n        ,44495,44496,44497,44499,44500,44502,44504,44505,44508,44510,44512,44513,44514,44515,44516,44517,44518,44520,44521\n        ,44522,44528,44529,44530,44532,44533,44534,44535,44536,44537,44538,44540,44542,44543,44544,44545,44546,44547,44548\n        ,44549,44550,44551,44552,44553,44554,44555,44556,44557,44558,44559,44561,44562,44563,44565,44569,44570,44571,44572\n        ,44573,44575,44576,44578,44580,44581,44582,44583,44584,44586,44587,44588,44589,44590,44591,44592,44593,44595,44596\n        ,44597,44599,44600,44601,44603,44604,44605,44606,44607,44608,44613,44617,44618,44621,44622,44623,44624,44625,44627\n        ,44629,44630,44631,44632,44634,44635,44636,44637,44638,44639,44641,44642,44644,44647,44649,44650,44651,44652,44654\n        ,44655,44656,44657,44658,44659,44660,44661,44662,44663,44665,44667,44668,44671,44673,44675,44679,44686,44687,44688\n        ,44690,44693,44696,44698,44703,44705,44709,44710,44715,44717,44718,44723,44724,44725,44729,44731,44732,44733,44735\n        ,44736,44743,44745,44747,44752,44756,44759,44764,44766,44770,44772,44775,44777,44784,44785,44791,44792,44793,44795\n        ,44797,44800,44803,44805,44809,44812,44814,44816,44817,44818,44819,44820,44823,44830,44837,44851,44855,44861,44864\n        ,44888,44908,44913,44914,44919,44920,44924,44925,44926,44927,44928,44929,44930,44931,44932,44933,44935,44936,44937\n        ,44939,44940,44941,44943,44944,44945,44946,44947,44948,45089,44952,44953,44956,44960,44964,44968,44951,45093,44950\n        ,44954,44955,44959,44958,44962,44963,44966,44967,44970,44971,44973,44974,44975,44976,44977,44978,44981,44982,44985\n        ,44986,44989,44990,44992,44993,44994,44996,44997,45001,45002,45004,45005,45006,45007,45009,45010,45011,45013,45014\n        ,45015,45016,45017,45018,45019,45020,45021,45022,45023,45025,45027,45029,45031,45032,45033,45034,45035,45036,45037\n        ,45038,45040,45042,45043,45044,45045,45046,45047,45048,45052,45054,45056,45058,45059,45061,45063,45065,45068,45070\n        ,45071,45076,45080,45084,45088,45090,45092,45094,45095,45097,45099,45101,45104,45108,45112,45116,45120,45122,45126\n        ,45127,45129,44999,45131,45133,45135,45137,45146,45148,45149,45160,45164,45166,45168,45172,45174,45176,45178,45180\n        ,45183,45184,45186,45187,45190,45191,45194,45195,45198,45199,45200,45203,45204,45207,45210,45267,45279,45271,45219\n        ,45222,45285,45229,44998,44949,45011,45223,45226,45211,45275,45215,45214,45213,45270,45269,45264,45263,45286,45287\n        ,45288,45289,45290,45291,45292,45293,45294,45296,45297,45298,45300,45301,45302,45304,45305,45306,45307,45308,45309\n        ,45452,45427,45311,45313,45317,45321,45325,45329,45330,45333,45334,45316,45314,45315,45319,45318,45322,45323,45326\n        ,45327,45331,45336,45337,45338,45341,45342,45343,45345,45346,45349,45350,45353,45354,45357,45358,45359,45360,45361\n        ,45365,45366,45368,45369,45370,45371,45373,45374,45376,45377,45378,45380,45381,45382,45383,45384,45385,45386,45387\n        ,45389,45391,45392,45394,45396,45397,45398,45399,45401,45402,45403,45404,45405,45407,45408,45409,45410,45411,45413\n        ,45415,45417,45419,45421,45424,45426,45428,45430,45431,45433,45438,45441,45445,45449,45451,45453,45455,45457,45460\n        ,45462,45464,45466,45469,45473,45477,45481,45483,45485,45487,45362,45492,45494,45496,45498,45500,45502,45507,45512\n        ,45513,45525,45527,45533,45535,45537,45539,45541,45545,45547,45549,45550,45551,45554,45555,45558,45559,45562,45565\n        ,45566,45569,45570,45571,45574,45575,45576,45578,45581,45582,45583,45586,45587,45588,45591,45592,45363,45312,45310\n        ,43701,43700,44371,42199,42534,42532,45647,44030,45639,45657,45658,45659,45660,45662,45663,45666,45667,45670,45671\n        ,45674,45675,45678,45679,45680,45682,45683,45684,45686,45687,45690,45691,45694,45695,45696,45698,45699,45700,45702\n        ,45703,45704,45706,45707,45708,45710,45711,45712,45714,45715,45716,45718,45719,45720,45722,45724,45725,45726,45727\n        ,45730,45731,45734,45735,45738,45739,45742,45743,45746,45747,45750,45751,45754,45755,45758,45759,45762,45763,45766\n        ,45767,45770,45771,45774,45775,45778,45779,45782,45783,45786,45787,45790,45793,45794,45664,45796,45797,45668,45800\n        ,45801,45672,45804,45805,45676,45808,45809,45812,45813,45816,45817,45688,45820,45821,45692,45824,45825,45828,45829\n        ,45832,45833,45836,45837,45840,45841,45844,45845,45848,45849,45852,45853,45856,45857,45861,45862,45864,45865,45868\n        ,45869,45872,45873,45876,45877,45880,45881,45884,45885,45888,45889,45892,45893,45896,45897,45900,45901,45904,45905\n        ,45908,45909,45912,45913,45916,45917,45920,45921,45924,45925,45929,45930,45932,45933,45936,45937,45940,45941,45944\n        ,45945,45948,45949,45952,45953,45956,45957,45960,45961,45964,45965,45968,45969,45972,45973,45976,45977,45980,45981\n        ,45984,45985,45988,45989,45992,45993,45999,46000,45998,46003,46002,46007,46006,46011,46010,46015,46014,46019,46018\n        ,46023,46022,46027,46026,46031,46030,46035,46034,46039,46038,46043,46042,46047,46046,46051,46050,46055,46054,46059\n        ,46058,46063,46065,46067,46068,46071,46074,46077,46080,46083,46086,46089,46092,46095,46098,46101,46104,46107,46110\n        ,46116,46117,46118,46120,46121,46123,46124,46125,46127,46128,46129,46132,46133,46136,46137,46139,46140,46141,46143\n        ,46144,46145,46147,46148,46149,46151,46152,46153,46155,46156,46157,46159,46160,46161,46163,46164,46165,46167,46168\n        ,46169,46171,46172,46173,46176,46177,46179,46181,46184,46185,46186,46188,46189,46192,46193,46196,46197,46200,46201\n        ,46204,46205,46208,46209,46212,46213,46216,46217,46220,46221,46224,46225,46228,46229,46232,46233,46236,46237,46240\n        ,46241,46244,46245,46249,46253,46254,46255,46258,46259,46131,46262,46263,46135,46266,46267,46270,46271,46274,46275\n        ,46278,46279,46282,46283,46286,46287,46290,46291,46294,46295,46298,46299,46302,46303,46175,46306,46307,46310,46311\n        ,46183,46314,46315,46119,46318,46321,46322,46323,46326,46327,46330,46331,46334,46335,46338,46339,46342,46343,46346\n        ,46347,46350,46351,46354,46355,46358,46359,46362,46363,46366,46367,46370,46371,46374,46375,46378,46379,46382,46383\n        ,46386,46389,46390,46391,46394,46395,46398,46399,46402,46403,46406,46407,46410,46411,46414,46415,46418,46419,46422\n        ,46423,46426,46427,46430,46431,46434,46435,46438,46439,46442,46443,46446,46447,46450,46451,46454,46457,46458,46459\n        ,46462,46463,46466,46467,46470,46471,46474,46475,46478,46479,46482,46483,46486,46487,46490,46491,46494,46495,46498\n        ,46499,46502,46503,46506,46507,46510,46511,46514,46515,46518,46519,46522,46525,46526,46528,46531,46534,46537,46540\n        ,46543,46546,46549,46552,46555,46558,46561,46564,46567,46570\n        GeometryVersion: 124\n        LayerElementNormal: 0 {\n            Version: 101\n            Name: \"\"\n            MappingInformationType: \"ByPolygonVertex\"\n            ReferenceInformationType: \"Direct\"\n            Normals: 0.329279124736786,0.0702807679772377,-0.941613435745239,0.256420314311981,0.112910509109497,-0.959947824478149\n             ,0.103707693517208,0.287299185991287,-0.952210009098053,0.0421824865043163,0.312842935323715,-0.948867738246918\n             ,0.574346244335175,0.00941364839673042,-0.81855833530426,0.329279124736786,0.0702807679772377,-0.941613435745239\n             ,0.0421824865043163,0.312842935323715,-0.948867738246918,0.120905123651028,0.330013185739517,-0.936201512813568\n             ,0.256420314311981,0.112910509109497,-0.959947824478149,0.298426777124405,0.233343333005905,-0.925468742847443\n             ,0.208192959427834,0.283492356538773,-0.936102449893951,0.103707693517208,0.287299185991287,-0.952210009098053\n             ,0.171656653285027,0.421078413724899,-0.890632927417755,0.0610933229327202,0.52752286195755,-0.847341299057007\n             ,0.0474854707717896,0.340129047632217,-0.939179122447968,0.0890781953930855,0.32302126288414,-0.942190170288086\n             ,0.0610933229327202,0.52752286195755,-0.847341299057007,-0.0717302039265633,0.599237322807312,-0.797351539134979\n             ,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.0474854707717896,0.340129047632217,-0.939179122447968\n             ,0.74884694814682,0.0258232615888119,-0.662239730358124,0.574346244335175,0.00941364839673042,-0.81855833530426\n             ,0.120905123651028,0.330013185739517,-0.936201512813568,0.317967116832733,0.377013236284256,-0.869918346405029\n             ,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.334298700094223,0.1620884090662,-0.92842435836792\n             ,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.0895265564322472,0.301672667264938,-0.94919890165329\n             ,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.334298700094223,0.1620884090662,-0.92842435836792\n             ,-0.677631020545959,0.0696527808904648,-0.732096076011658,-0.563491344451904,0.231473565101624,-0.793030619621277\n             ,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.268979072570801,0.152991950511932,-0.950917303562164\n             ,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.191734448075294,0.31677782535553,-0.928918600082397\n             ,0.0384715124964714,0.615228533744812,-0.787409543991089,0.00547882029786706,0.479039758443832,-0.877776086330414\n             ,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.0330984629690647,0.245714232325554,-0.968777060508728\n             ,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.0384715124964714,0.615228533744812,-0.787409543991089\n             ,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0542660467326641,0.303808957338333,-0.951186299324036\n             ,0.00547882029786706,0.479039758443832,-0.877776086330414,-0.289194285869598,0.281266182661057,-0.915016949176788\n             ,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.0109683563932776,0.278000682592392,-0.96051824092865\n             ,0.298426777124405,0.233343333005905,-0.925468742847443,0.171656653285027,0.421078413724899,-0.890632927417755\n             ,0.0890781953930855,0.32302126288414,-0.942190170288086,0.208192959427834,0.283492356538773,-0.936102449893951\n             ,0.0421824865043163,0.312842935323715,-0.948867738246918,0.103707693517208,0.287299185991287,-0.952210009098053\n             ,0.188222825527191,0.266046136617661,-0.945405542850494,0.130089670419693,0.341309607028961,-0.930905163288116\n             ,0.120905123651028,0.330013185739517,-0.936201512813568,0.0421824865043163,0.312842935323715,-0.948867738246918\n             ,0.130089670419693,0.341309607028961,-0.930905163288116,0.103707693517208,0.287299185991287,-0.952210009098053\n             ,0.208192959427834,0.283492356538773,-0.936102449893951,0.236986353993416,0.25183042883873,-0.938306391239166\n             ,0.188222825527191,0.266046136617661,-0.945405542850494,0.0890781953930855,0.32302126288414,-0.942190170288086\n             ,0.0474854707717896,0.340129047632217,-0.939179122447968,0.0502305738627911,0.265573531389236,-0.962781190872192\n             ,0.0688691660761833,0.267364770174026,-0.961131155490875,0.0474854707717896,0.340129047632217,-0.939179122447968\n             ,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.0191163346171379,0.267036914825439,-0.963496685028076\n             ,0.0502305738627911,0.265573531389236,-0.962781190872192,-0.0895265564322472,0.301672667264938,-0.94919890165329\n             ,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.186463221907616,0.337504178285599,-0.922671318054199\n             ,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.0625077188014984,0.356366664171219,-0.932253003120422\n             ,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.186463221907616,0.337504178285599,-0.922671318054199\n             ,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.0895265564322472,0.301672667264938,-0.94919890165329\n             ,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.22543403506279,0.28757056593895,-0.930850505828857\n             ,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0109683563932776,0.278000682592392,-0.96051824092865\n             ,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.0415995456278324,0.272834479808807,-0.961161196231842\n             ,-0.0542660467326641,0.303808957338333,-0.951186299324036,-0.0330984629690647,0.245714232325554,-0.968777060508728\n             ,-0.0415995456278324,0.272834479808807,-0.961161196231842,0.0191163346171379,0.267036914825439,-0.963496685028076\n             ,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.191734448075294,0.31677782535553,-0.928918600082397\n             ,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.0734905749559402,0.278112560510635,-0.957733035087585\n             ,0.208192959427834,0.283492356538773,-0.936102449893951,0.0890781953930855,0.32302126288414,-0.942190170288086\n             ,0.0688691660761833,0.267364770174026,-0.961131155490875,0.236986353993416,0.25183042883873,-0.938306391239166\n             ,0.130089670419693,0.341309607028961,-0.930905163288116,0.188222825527191,0.266046136617661,-0.945405542850494\n             ,0.163174018263817,0.444838464260101,-0.880620777606964,0.243700608611107,0.544483065605164,-0.802588403224945\n             ,0.317967116832733,0.377013236284256,-0.869918346405029,0.130089670419693,0.341309607028961,-0.930905163288116\n             ,0.243700608611107,0.544483065605164,-0.802588403224945,0.735658526420593,0.230637982487679,-0.636877298355103\n             ,0.188222825527191,0.266046136617661,-0.945405542850494,0.236986353993416,0.25183042883873,-0.938306391239166\n             ,0.189078122377396,0.441867411136627,-0.87692791223526,0.163174018263817,0.444838464260101,-0.880620777606964\n             ,0.0688691660761833,0.267364770174026,-0.961131155490875,0.0502305738627911,0.265573531389236,-0.962781190872192\n             ,0.057487852871418,0.456679046154022,-0.88777220249176,0.0718594193458557,0.455831170082092,-0.88716071844101\n             ,0.0502305738627911,0.265573531389236,-0.962781190872192,0.0191163346171379,0.267036914825439,-0.963496685028076\n             ,0.017586937174201,0.584774792194366,-0.811005055904388,0.057487852871418,0.456679046154022,-0.88777220249176\n             ,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.186463221907616,0.337504178285599,-0.922671318054199\n             ,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.147772952914238,0.520121157169342,-0.84121173620224\n             ,-0.186463221907616,0.337504178285599,-0.922671318054199,-0.563491344451904,0.231473565101624,-0.793030619621277\n             ,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.164236485958099,0.647006809711456,-0.744586169719696\n             ,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.173782542347908,0.294062882661819,-0.939854621887207\n             ,-0.147772952914238,0.520121157169342,-0.84121173620224,-0.175480470061302,0.520782589912415,-0.835459232330322\n             ,-0.0415995456278324,0.272834479808807,-0.961161196231842,-0.0734905749559402,0.278112560510635,-0.957733035087585\n             ,-0.0663426592946053,0.518996477127075,-0.85219794511795,-0.0419603176414967,0.516997694969177,-0.854957699775696\n             ,0.0191163346171379,0.267036914825439,-0.963496685028076,-0.0415995456278324,0.272834479808807,-0.961161196231842\n             ,-0.0419603176414967,0.516997694969177,-0.854957699775696,0.017586937174201,0.584774792194366,-0.811005055904388\n             ,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.22543403506279,0.28757056593895,-0.930850505828857\n             ,-0.175480470061302,0.520782589912415,-0.835459232330322,-0.0663426592946053,0.518996477127075,-0.85219794511795\n             ,0.236986353993416,0.25183042883873,-0.938306391239166,0.0688691660761833,0.267364770174026,-0.961131155490875\n             ,0.0718594193458557,0.455831170082092,-0.88716071844101,0.189078122377396,0.441867411136627,-0.87692791223526\n             ,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.716141760349274,0.576233267784119,-0.393822461366653\n             ,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.630987823009491,0.234253495931625,-0.739580750465393\n             ,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.630987823009491,0.234253495931625,-0.739580750465393\n             ,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.854649007320404,0.375557482242584,-0.358513176441193\n             ,-0.931051731109619,0.363819122314453,0.027898857370019,-0.854649007320404,0.375557482242584,-0.358513176441193\n             ,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.87062680721283,0.491043627262115,-0.0297505091875792\n             ,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.87062680721283,0.491043627262115,-0.0297505091875792\n             ,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.716141760349274,0.576233267784119,-0.393822461366653\n             ,-0.539133667945862,0.764685809612274,-0.352973729372025,-0.408612459897995,0.622275412082672,-0.667689442634583\n             ,-0.322734087705612,0.735918641090393,-0.5952028632164,-0.449203163385391,0.892682015895844,0.0365421921014786\n             ,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.568679571151733,0.357779324054718,-0.740673661231995\n             ,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.539133667945862,0.764685809612274,-0.352973729372025\n             ,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.776123344898224,0.626794755458832,-0.0689988508820534\n             ,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.539133667945862,0.764685809612274,-0.352973729372025\n             ,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.119406081736088,0.202409043908119,-0.97199422121048\n             ,-0.00542618287727237,0.149814411997795,-0.98869925737381,-0.00773082999512553,0.120841763913631,-0.992641687393188\n             ,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.178532913327217,0.211587846279144,-0.960914433002472\n             ,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.304371774196625,0.115475252270699,-0.945528030395508\n             ,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.119406081736088,0.202409043908119,-0.97199422121048\n             ,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.304371774196625,0.115475252270699,-0.945528030395508\n             ,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.562859117984772,0.4129618704319,-0.715997278690338\n             ,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.304371774196625,0.115475252270699,-0.945528030395508\n             ,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.568679571151733,0.357779324054718,-0.740673661231995\n             ,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.304371774196625,0.115475252270699,-0.945528030395508\n             ,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.00773082999512553,0.120841763913631,-0.992641687393188\n             ,-0.000760512368287891,0.207898333668709,-0.978150188922882,-0.0685182884335518,0.227593377232552,-0.971342623233795\n             ,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.437141418457031,0.161669790744781,-0.88474303483963\n             ,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.679870665073395,0.332279711961746,-0.653732419013977\n             ,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.679870665073395,0.332279711961746,-0.653732419013977\n             ,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.588195145130157,0.405691057443619,-0.699600756168365\n             ,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.588195145130157,0.405691057443619,-0.699600756168365\n             ,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.335503816604614,0.489175528287888,-0.805074214935303\n             ,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.335503816604614,0.489175528287888,-0.805074214935303\n             ,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.437141418457031,0.161669790744781,-0.88474303483963\n             ,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.239463403820992,0.198724672198296,-0.950350344181061\n             ,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.335503816604614,0.489175528287888,-0.805074214935303\n             ,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.335503816604614,0.489175528287888,-0.805074214935303\n             ,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.257477760314941,0.382379919290543,-0.887406766414642\n             ,-0.127526223659515,0.388497859239578,-0.912582278251648,-0.257477760314941,0.382379919290543,-0.887406766414642\n             ,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.0627769380807877,0.434968650341034,-0.898254573345184\n             ,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.0627769380807877,0.434968650341034,-0.898254573345184\n             ,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.239463403820992,0.198724672198296,-0.950350344181061\n             ,-0.127602562308311,0.294543892145157,-0.947080492973328,-0.1575877815485,0.232581928372383,-0.959724843502045\n             ,0.00121181993745267,0.232196122407913,-0.9726682305336,0.002942921128124,0.253444164991379,-0.967345535755157\n             ,-0.749469220638275,0.428192466497421,0.504922866821289,-0.803582847118378,0.542061448097229,0.245812878012657\n             ,-0.710639357566834,0.646875619888306,0.27666512131691,-0.617127954959869,0.561533391475677,0.551210701465607\n             ,-0.710639357566834,0.646875619888306,0.27666512131691,-0.60595041513443,0.795228064060211,-0.020889300853014\n             ,-0.449203163385391,0.892682015895844,0.0365421921014786,-0.448102563619614,0.672870218753815,0.588599801063538\n             ,-0.617127954959869,0.561533391475677,0.551210701465607,-0.776123344898224,0.626794755458832,-0.0689988508820534\n             ,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.710639357566834,0.646875619888306,0.27666512131691\n             ,-0.803582847118378,0.542061448097229,0.245812878012657,-0.844134092330933,0.36929926276207,0.388658910989761\n             ,-0.856849551200867,0.411835759878159,0.310161501169205,-0.817325711250305,0.505672991275787,0.276176601648331\n             ,-0.767612516880035,0.418656378984451,0.485281258821487,-0.749469220638275,0.428192466497421,0.504922866821289\n             ,-0.767612516880035,0.418656378984451,0.485281258821487,-0.817325711250305,0.505672991275787,0.276176601648331\n             ,-0.803582847118378,0.542061448097229,0.245812878012657,-0.776123344898224,0.626794755458832,-0.0689988508820534\n             ,-0.803582847118378,0.542061448097229,0.245812878012657,-0.817325711250305,0.505672991275787,0.276176601648331\n             ,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.931051731109619,0.363819122314453,0.027898857370019\n             ,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.817325711250305,0.505672991275787,0.276176601648331\n             ,-0.856849551200867,0.411835759878159,0.310161501169205,-0.989189743995667,0.0587216019630432,-0.134370610117912\n             ,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.941607177257538,0.224361434578896,-0.25107353925705\n             ,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.982630908489227,0.117604449391365,0.143546640872955\n             ,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.941607177257538,0.224361434578896,-0.25107353925705\n             ,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.837151050567627,0.303785771131516,-0.454854130744934\n             ,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.941607177257538,0.224361434578896,-0.25107353925705\n             ,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.574827253818512,0.158569574356079,-0.80276358127594\n             ,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.941607177257538,0.224361434578896,-0.25107353925705\n             ,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.879830181598663,0.149797275662422,-0.451065003871918\n             ,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.970083713531494,0.0539310723543167,-0.236704483628273\n             ,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.879830181598663,0.149797275662422,-0.451065003871918\n             ,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.586808562278748,0.13275733590126,-0.798768520355225\n             ,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.142651379108429,0.65512877702713,0.741927802562714\n             ,-0.241419494152069,0.682447910308838,0.689914107322693,-0.229512825608253,0.568260371685028,0.790192425251007\n             ,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.142651379108429,0.65512877702713,0.741927802562714\n             ,-0.0943122506141663,0.53818953037262,0.837530434131622,0.0543623231351376,0.513473629951477,0.85638165473938\n             ,0.0616534538567066,0.625403761863709,0.777861833572388,-0.325974881649017,0.679336845874786,0.657451033592224\n             ,-0.429686725139618,0.66762501001358,0.607985317707062,-0.428986668586731,0.611180424690247,0.665153324604034\n             ,-0.279750615358353,0.610641419887543,0.74084860086441,-0.325974881649017,0.679336845874786,0.657451033592224\n             ,-0.279750615358353,0.610641419887543,0.74084860086441,-0.229512825608253,0.568260371685028,0.790192425251007\n             ,-0.241419494152069,0.682447910308838,0.689914107322693,-0.309171378612518,0.749882876873016,0.584883511066437\n             ,-0.325974881649017,0.679336845874786,0.657451033592224,-0.241419494152069,0.682447910308838,0.689914107322693\n             ,-0.237944751977921,0.77955037355423,0.579382002353668,-0.429686725139618,0.66762501001358,0.607985317707062\n             ,-0.325974881649017,0.679336845874786,0.657451033592224,-0.309171378612518,0.749882876873016,0.584883511066437\n             ,-0.928196668624878,0.146431341767311,0.342065423727036,-0.85773640871048,0.318832546472549,0.403279215097427\n             ,-0.856573581695557,0.327088385820389,0.399117648601532,-0.91119110584259,0.208402961492538,0.355385720729828\n             ,-0.928196668624878,0.146431341767311,0.342065423727036,-0.91119110584259,0.208402961492538,0.355385720729828\n             ,-0.930396974086761,0.1596420109272,0.329963505268097,-0.939980566501617,0.104119330644608,0.324954867362976\n             ,-0.759151995182037,0.445082813501358,0.474962621927261,-0.856573581695557,0.327088385820389,0.399117648601532\n             ,-0.85773640871048,0.318832546472549,0.403279215097427,-0.76142829656601,0.432304978370667,0.483052164316177\n             ,-0.759151995182037,0.445082813501358,0.474962621927261,-0.76142829656601,0.432304978370667,0.483052164316177\n             ,-0.637912154197693,0.524314641952515,0.564058721065521,-0.6037238240242,0.569068074226379,0.558282196521759\n             ,-0.183231085538864,0.776099979877472,0.603402972221375,-0.237944751977921,0.77955037355423,0.579382002353668\n             ,-0.241419494152069,0.682447910308838,0.689914107322693,-0.142651379108429,0.65512877702713,0.741927802562714\n             ,-0.183231085538864,0.776099979877472,0.603402972221375,-0.142651379108429,0.65512877702713,0.741927802562714\n             ,0.0616534538567066,0.625403761863709,0.777861833572388,0.0704773217439651,0.772313952445984,0.631319284439087\n             ,-0.933935105800629,0.157070308923721,0.321082711219788,-0.914615273475647,0.203247100114822,0.349527567625046\n             ,-0.961739301681519,0.162645190954208,0.22046323120594,-0.907475471496582,0.340031713247299,0.246711865067482\n             ,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.221233636140823,-0.176490515470505,-0.959117710590363\n             ,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.370549231767654,-0.159934684634209,-0.91493946313858\n             ,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.370549231767654,-0.159934684634209,-0.91493946313858\n             ,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.246918469667435,-0.124969840049744,-0.96094423532486\n             ,-0.0269717872142792,-0.128648608922958,-0.991323411464691,-0.246918469667435,-0.124969840049744,-0.96094423532486\n             ,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.028486518189311,-0.148915618658066,-0.988439500331879\n             ,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.028486518189311,-0.148915618658066,-0.988439500331879\n             ,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.221233636140823,-0.176490515470505,-0.959117710590363\n             ,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.927974164485931,0.372219532728195,-0.0177929922938347\n             ,-0.907475471496582,0.340031713247299,0.246711865067482,-0.961739301681519,0.162645190954208,0.22046323120594\n             ,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.932697832584381,0.36027005314827,0.0167412776499987\n             ,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.958630919456482,0.250774264335632,-0.134681105613709\n             ,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.958630919456482,0.250774264335632,-0.134681105613709\n             ,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.85549122095108,0.405467689037323,-0.32207253575325\n             ,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.85549122095108,0.405467689037323,-0.32207253575325\n             ,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.766045868396759,0.61859118938446,-0.174696043133736\n             ,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.766045868396759,0.61859118938446,-0.174696043133736\n             ,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.932697832584381,0.36027005314827,0.0167412776499987\n             ,-0.646523416042328,0.744809150695801,0.165126398205757,-0.824783802032471,0.538173019886017,0.173497721552849\n             ,-0.855047225952148,0.419915407896042,0.304245471954346,-0.702866315841675,0.640832006931305,0.30872842669487\n             ,-0.646523416042328,0.744809150695801,0.165126398205757,-0.702866315841675,0.640832006931305,0.30872842669487\n             ,-0.49023100733757,0.783868074417114,0.381083190441132,-0.458671659231186,0.872726500034332,0.167238742113113\n             ,-0.429586619138718,0.728146016597748,0.53409618139267,-0.583837151527405,0.631729662418365,0.509952783584595\n             ,-0.6037238240242,0.569068074226379,0.558282196521759,-0.429686725139618,0.66762501001358,0.607985317707062,-0.49023100733757\n             ,0.783868074417114,0.381083190441132,-0.583837151527405,0.631729662418365,0.509952783584595,-0.429586619138718\n             ,0.728146016597748,0.53409618139267,-0.856573581695557,0.327088385820389,0.399117648601532,-0.759151995182037\n             ,0.445082813501358,0.474962621927261,-0.74214094877243,0.521113991737366,0.421505630016327,-0.849531948566437\n             ,0.369736075401306,0.376285374164581,-0.855047225952148,0.419915407896042,0.304245471954346,-0.849531948566437\n             ,0.369736075401306,0.376285374164581,-0.74214094877243,0.521113991737366,0.421505630016327,-0.702866315841675\n             ,0.640832006931305,0.30872842669487,-0.49023100733757,0.783868074417114,0.381083190441132,-0.702866315841675\n             ,0.640832006931305,0.30872842669487,-0.74214094877243,0.521113991737366,0.421505630016327,-0.583837151527405\n             ,0.631729662418365,0.509952783584595,-0.6037238240242,0.569068074226379,0.558282196521759,-0.583837151527405\n             ,0.631729662418365,0.509952783584595,-0.74214094877243,0.521113991737366,0.421505630016327,-0.759151995182037\n             ,0.445082813501358,0.474962621927261,-0.855047225952148,0.419915407896042,0.304245471954346,-0.824783802032471\n             ,0.538173019886017,0.173497721552849,-0.932598233222961,0.310681849718094,0.183677315711975,-0.922844409942627\n             ,0.263350307941437,0.281078040599823,-0.932598233222961,0.310681849718094,0.183677315711975,-0.953923344612122\n             ,0.216998100280762,0.207224562764168,-0.930396974086761,0.1596420109272,0.329963505268097,-0.922844409942627\n             ,0.263350307941437,0.281078040599823,-0.896636784076691,0.291213989257813,0.333521902561188,-0.936677098274231\n             ,0.272290170192719,0.220213681459427,-0.961739301681519,0.162645190954208,0.22046323120594,-0.914615273475647\n             ,0.203247100114822,0.349527567625046,-0.930396974086761,0.1596420109272,0.329963505268097,-0.953923344612122\n             ,0.216998100280762,0.207224562764168,-0.936677098274231,0.272290170192719,0.220213681459427,-0.896636784076691\n             ,0.291213989257813,0.333521902561188,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.968225657939911\n             ,0.246022939682007,0.0448530614376068,-0.953923344612122,0.216998100280762,0.207224562764168,-0.932598233222961\n             ,0.310681849718094,0.183677315711975,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.932598233222961\n             ,0.310681849718094,0.183677315711975,-0.824783802032471,0.538173019886017,0.173497721552849,-0.800187706947327\n             ,0.59970623254776,-0.00721557484939694,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.958630919456482\n             ,0.250774264335632,-0.134681105613709,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.969021558761597\n             ,0.241314724087715,0.0525775291025639,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.969310760498047\n             ,0.16829377412796,-0.179203346371651,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.993082284927368\n             ,0.103076130151749,0.0562400594353676,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.908903479576111\n             ,0.0964279100298882,-0.405704379081726,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.963100135326386\n             ,0.220396235585213,-0.154478579759598,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.912788510322571\n             ,0.242469280958176,-0.328672856092453,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.963100135326386\n             ,0.220396235585213,-0.154478579759598,-0.958630919456482,0.250774264335632,-0.134681105613709,-0.936677098274231\n             ,0.272290170192719,0.220213681459427,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.993082284927368\n             ,0.103076130151749,0.0562400594353676,-0.961739301681519,0.162645190954208,0.22046323120594,-0.953923344612122\n             ,0.216998100280762,0.207224562764168,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.969021558761597\n             ,0.241314724087715,0.0525775291025639,-0.936677098274231,0.272290170192719,0.220213681459427,-0.641130149364471\n             ,0.283854395151138,-0.713006854057312,-0.688417077064514,0.155676782131195,-0.708411395549774,-0.83020544052124\n             ,0.164738476276398,-0.532559931278229,-0.833487510681152,0.195669800043106,-0.516731977462769,-0.811532735824585\n             ,0.254749119281769,-0.525849342346191,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.811532735824585\n             ,0.254749119281769,-0.525849342346191,-0.833487510681152,0.195669800043106,-0.516731977462769,-0.83020544052124\n             ,0.164738476276398,-0.532559931278229,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.908903479576111\n             ,0.0964279100298882,-0.405704379081726,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.83020544052124\n             ,0.164738476276398,-0.532559931278229,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.713846147060394\n             ,0.0502549819648266,-0.698496997356415,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.83020544052124\n             ,0.164738476276398,-0.532559931278229,-0.688417077064514,0.155676782131195,-0.708411395549774,0.00778961461037397\n             ,0.31232625246048,-0.949942946434021,-0.00349890603683889,0.173883408308029,-0.984760046005249,-0.164242103695869\n             ,0.181451722979546,-0.969587445259094,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.275409698486328\n             ,0.318414241075516,-0.907062232494354,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.164242103695869\n             ,0.181451722979546,-0.969587445259094,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.35973909497261\n             ,0.0476123131811619,-0.931837379932404,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.164242103695869\n             ,0.181451722979546,-0.969587445259094,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.0150691494345665\n             ,0.027319710701704,-0.999513149261475,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.164242103695869\n             ,0.181451722979546,-0.969587445259094,-0.00349890603683889,0.173883408308029,-0.984760046005249,-0.275409698486328\n             ,0.318414241075516,-0.907062232494354,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.1039934232831\n             ,0.492859244346619,-0.863872170448303,-0.135065674781799,0.320166707038879,-0.937683582305908,0.00778961461037397\n             ,0.31232625246048,-0.949942946434021,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.1039934232831\n             ,0.492859244346619,-0.863872170448303,0.0223272144794464,0.483893781900406,-0.874841868877411,0.0394280813634396\n             ,0.674713432788849,-0.737025916576386,0.0223272144794464,0.483893781900406,-0.874841868877411,-0.1039934232831\n             ,0.492859244346619,-0.863872170448303,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.163053512573242\n             ,0.683581054210663,-0.711428463459015,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.1039934232831\n             ,0.492859244346619,-0.863872170448303,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.164138689637184\n             ,0.985963463783264,-0.0305693503469229,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.0709519162774086\n             ,0.962512910366058,-0.261791497468948,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.147578522562981\n             ,0.903031170368195,-0.403429329395294,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.0709519162774086\n             ,0.962512910366058,-0.261791497468948,-0.0524508766829968,0.905246913433075,-0.421636074781418,0.0622152015566826\n             ,0.901260554790497,-0.428787440061569,-0.0524508766829968,0.905246913433075,-0.421636074781418,-0.0709519162774086\n             ,0.962512910366058,-0.261791497468948,0.0692925006151199,0.95879065990448,-0.27553403377533,0.0761537179350853\n             ,0.996121823787689,-0.044066745787859,0.0692925006151199,0.95879065990448,-0.27553403377533,-0.0709519162774086\n             ,0.962512910366058,-0.261791497468948,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.429686725139618\n             ,0.66762501001358,0.607985317707062,-0.309171378612518,0.749882876873016,0.584883511066437,-0.291583627462387\n             ,0.822390556335449,0.488521039485931,-0.429586619138718,0.728146016597748,0.53409618139267,-0.49023100733757\n             ,0.783868074417114,0.381083190441132,-0.429586619138718,0.728146016597748,0.53409618139267,-0.291583627462387\n             ,0.822390556335449,0.488521039485931,-0.280090749263763,0.893176853656769,0.351829946041107,-0.205079987645149\n             ,0.915316820144653,0.346608310937881,-0.280090749263763,0.893176853656769,0.351829946041107,-0.291583627462387\n             ,0.822390556335449,0.488521039485931,-0.227190643548965,0.852716088294983,0.470382422208786,-0.237944751977921\n             ,0.77955037355423,0.579382002353668,-0.227190643548965,0.852716088294983,0.470382422208786,-0.291583627462387\n             ,0.822390556335449,0.488521039485931,-0.309171378612518,0.749882876873016,0.584883511066437,-0.126044631004334\n             ,0.975940346717834,0.177913352847099,0.0787876397371292,0.981232225894928,0.175999522209167,0.0761537179350853\n             ,0.996121823787689,-0.044066745787859,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.126044631004334\n             ,0.975940346717834,0.177913352847099,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.164138689637184\n             ,0.985963463783264,-0.0305693503469229,-0.175430566072464,0.967789888381958,0.180573478341103,-0.160089418292046\n             ,0.924165964126587,0.346826493740082,0.0780636146664619,0.932616472244263,0.352324455976486,0.0787876397371292\n             ,0.981232225894928,0.175999522209167,-0.126044631004334,0.975940346717834,0.177913352847099,-0.160089418292046\n             ,0.924165964126587,0.346826493740082,-0.126044631004334,0.975940346717834,0.177913352847099,-0.175430566072464\n             ,0.967789888381958,0.180573478341103,-0.205079987645149,0.915316820144653,0.346608310937881,-0.586808562278748\n             ,0.13275733590126,-0.798768520355225,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.778471529483795\n             ,0.0903224870562553,-0.621147274971008,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.718725085258484\n             ,-0.116646125912666,-0.685440003871918,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.778471529483795\n             ,0.0903224870562553,-0.621147274971008,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.933456838130951\n             ,-0.0391703061759472,-0.356544464826584,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.778471529483795\n             ,0.0903224870562553,-0.621147274971008,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.970083713531494\n             ,0.0539310723543167,-0.236704483628273,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.778471529483795\n             ,0.0903224870562553,-0.621147274971008,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.433570116758347\n             ,0.900149524211884,-0.041807197034359,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.566805422306061\n             ,0.799840569496155,-0.197450518608093,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.800187706947327\n             ,0.59970623254776,-0.00721557484939694,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.566805422306061\n             ,0.799840569496155,-0.197450518608093,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.727810025215149\n             ,0.613442480564117,-0.306563049554825,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.566805422306061\n             ,0.799840569496155,-0.197450518608093,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.348707258701324\n             ,0.879463195800781,-0.323956280946732,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.566805422306061\n             ,0.799840569496155,-0.197450518608093,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.604111194610596\n             ,0.796454071998596,-0.0266573838889599,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.824783802032471\n             ,0.538173019886017,0.173497721552849,-0.646523416042328,0.744809150695801,0.165126398205757,-0.604111194610596\n             ,0.796454071998596,-0.0266573838889599,-0.646523416042328,0.744809150695801,0.165126398205757,-0.458671659231186\n             ,0.872726500034332,0.167238742113113,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.237944751977921\n             ,0.77955037355423,0.579382002353668,-0.183231085538864,0.776099979877472,0.603402972221375,-0.184141546487808\n             ,0.85766065120697,0.480114668607712,-0.227190643548965,0.852716088294983,0.470382422208786,-0.205079987645149\n             ,0.915316820144653,0.346608310937881,-0.227190643548965,0.852716088294983,0.470382422208786,-0.184141546487808\n             ,0.85766065120697,0.480114668607712,-0.160089418292046,0.924165964126587,0.346826493740082,0.0780636146664619\n             ,0.932616472244263,0.352324455976486,-0.160089418292046,0.924165964126587,0.346826493740082,-0.184141546487808\n             ,0.85766065120697,0.480114668607712,0.0752492547035217,0.86371123790741,0.498337715864182,0.0704773217439651\n             ,0.772313952445984,0.631319284439087,0.0752492547035217,0.86371123790741,0.498337715864182,-0.184141546487808\n             ,0.85766065120697,0.480114668607712,-0.183231085538864,0.776099979877472,0.603402972221375,-0.896636784076691\n             ,0.291213989257813,0.333521902561188,-0.914615273475647,0.203247100114822,0.349527567625046,-0.90123462677002\n             ,0.253379285335541,0.351532429456711,-0.893953561782837,0.312333762645721,0.321394920349121,-0.896636784076691\n             ,0.291213989257813,0.333521902561188,-0.893953561782837,0.312333762645721,0.321394920349121,-0.939980566501617\n             ,0.104119330644608,0.324954867362976,-0.930396974086761,0.1596420109272,0.329963505268097,-0.930396974086761\n             ,0.1596420109272,0.329963505268097,-0.91119110584259,0.208402961492538,0.355385720729828,-0.897303998470306,0.274592310190201\n             ,0.345607608556747,-0.922844409942627,0.263350307941437,0.281078040599823,-0.855047225952148,0.419915407896042\n             ,0.304245471954346,-0.897303998470306,0.274592310190201,0.345607608556747,-0.849531948566437,0.369736075401306\n             ,0.376285374164581,-0.856573581695557,0.327088385820389,0.399117648601532,-0.849531948566437,0.369736075401306\n             ,0.376285374164581,-0.897303998470306,0.274592310190201,0.345607608556747,-0.91119110584259,0.208402961492538\n             ,0.355385720729828,-0.429686725139618,0.66762501001358,0.607985317707062,-0.6037238240242,0.569068074226379,0.558282196521759\n             ,-0.637912154197693,0.524314641952515,0.564058721065521,-0.428986668586731,0.611180424690247,0.665153324604034\n             ,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.555550515651703,0.455664992332459,-0.695509195327759\n             ,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.622987747192383,0.608749032020569,-0.491234064102173\n             ,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.622987747192383,0.608749032020569,-0.491234064102173\n             ,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.85549122095108,0.405467689037323,-0.32207253575325\n             ,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.85549122095108,0.405467689037323,-0.32207253575325\n             ,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.811532735824585,0.254749119281769,-0.525849342346191\n             ,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.811532735824585,0.254749119281769,-0.525849342346191\n             ,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.555550515651703,0.455664992332459,-0.695509195327759\n             ,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.350460797548294,0.80544102191925,-0.477956026792526\n             ,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.539688348770142,0.787357926368713,-0.297999978065491\n             ,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.539688348770142,0.787357926368713,-0.297999978065491\n             ,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.622987747192383,0.608749032020569,-0.491234064102173\n             ,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.622987747192383,0.608749032020569,-0.491234064102173\n             ,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.350460797548294,0.80544102191925,-0.477956026792526\n             ,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.0524508766829968,0.905246913433075,-0.421636074781418\n             ,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.136522889137268,0.827674627304077,-0.544349312782288\n             ,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.136522889137268,0.827674627304077,-0.544349312782288\n             ,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.0733590647578239,0.681655049324036,-0.727986812591553\n             ,0.0394280813634396,0.674713432788849,-0.737025916576386,-0.0733590647578239,0.681655049324036,-0.727986812591553\n             ,-0.0537863597273827,0.825741946697235,-0.561477720737457,0.0535563454031944,0.82038402557373,-0.569299399852753\n             ,0.0622152015566826,0.901260554790497,-0.428787440061569,0.0535563454031944,0.82038402557373,-0.569299399852753\n             ,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.0524508766829968,0.905246913433075,-0.421636074781418\n             ,-0.280090749263763,0.893176853656769,0.351829946041107,-0.205079987645149,0.915316820144653,0.346608310937881\n             ,-0.175430566072464,0.967789888381958,0.180573478341103,-0.275193452835083,0.944830358028412,0.177662998437881\n             ,-0.280090749263763,0.893176853656769,0.351829946041107,-0.275193452835083,0.944830358028412,0.177662998437881\n             ,-0.458671659231186,0.872726500034332,0.167238742113113,-0.49023100733757,0.783868074417114,0.381083190441132\n             ,-0.275193452835083,0.944830358028412,0.177662998437881,-0.175430566072464,0.967789888381958,0.180573478341103\n             ,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.272943913936615,0.961116194725037,-0.0419191792607307\n             ,-0.275193452835083,0.944830358028412,0.177662998437881,-0.272943913936615,0.961116194725037,-0.0419191792607307\n             ,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.458671659231186,0.872726500034332,0.167238742113113\n             ,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.236552119255066,0.898081064224243,-0.370801120996475\n             ,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.163341224193573,0.954490721225739,-0.249533846974373\n             ,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.163341224193573,0.954490721225739,-0.249533846974373\n             ,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.272943913936615,0.961116194725037,-0.0419191792607307\n             ,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.272943913936615,0.961116194725037,-0.0419191792607307\n             ,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.395432621240616,0.890730679035187,-0.224124699831009\n             ,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.395432621240616,0.890730679035187,-0.224124699831009\n             ,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.236552119255066,0.898081064224243,-0.370801120996475\n             ,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.136522889137268,0.827674627304077,-0.544349312782288\n             ,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.236552119255066,0.898081064224243,-0.370801120996475\n             ,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.236552119255066,0.898081064224243,-0.370801120996475\n             ,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.350460797548294,0.80544102191925,-0.477956026792526\n             ,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.350460797548294,0.80544102191925,-0.477956026792526\n             ,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.271187722682953,0.674484729766846,-0.686678647994995\n             ,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.271187722682953,0.674484729766846,-0.686678647994995\n             ,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.136522889137268,0.827674627304077,-0.544349312782288\n             ,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.555550515651703,0.455664992332459,-0.695509195327759\n             ,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.443566411733627,0.305741757154465,-0.84247899055481\n             ,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.443566411733627,0.305741757154465,-0.84247899055481\n             ,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.217446804046631,0.495308041572571,-0.841062903404236\n             ,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.217446804046631,0.495308041572571,-0.841062903404236\n             ,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.271187722682953,0.674484729766846,-0.686678647994995\n             ,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.271187722682953,0.674484729766846,-0.686678647994995\n             ,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.555550515651703,0.455664992332459,-0.695509195327759\n             ,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.325825273990631,0.178449675440788,-0.928436100482941\n             ,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.443566411733627,0.305741757154465,-0.84247899055481\n             ,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.443566411733627,0.305741757154465,-0.84247899055481\n             ,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.688417077064514,0.155676782131195,-0.708411395549774\n             ,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.688417077064514,0.155676782131195,-0.708411395549774\n             ,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.542270302772522,0.0508554428815842,-0.838663637638092\n             ,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.542270302772522,0.0508554428815842,-0.838663637638092\n             ,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.325825273990631,0.178449675440788,-0.928436100482941\n             ,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.562148034572601,-0.142533272504807,-0.814661800861359\n             ,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.676815629005432,0.0292502902448177,-0.735571205615997\n             ,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.676815629005432,0.0292502902448177,-0.735571205615997\n             ,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.481821954250336,-0.034151516854763,-0.875603377819061\n             ,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.481821954250336,-0.034151516854763,-0.875603377819061\n             ,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.370549231767654,-0.159934684634209,-0.91493946313858\n             ,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.370549231767654,-0.159934684634209,-0.91493946313858\n             ,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.562148034572601,-0.142533272504807,-0.814661800861359\n             ,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.186824142932892,0.0393546596169472,-0.981604754924774\n             ,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.37091401219368,-0.0905782580375671,-0.924239337444305\n             ,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.37091401219368,-0.0905782580375671,-0.924239337444305\n             ,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.221233636140823,-0.176490515470505,-0.959117710590363\n             ,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.221233636140823,-0.176490515470505,-0.959117710590363\n             ,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.0252742562443018,-0.106068439781666,-0.994037568569183\n             ,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.0252742562443018,-0.106068439781666,-0.994037568569183\n             ,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.186824142932892,0.0393546596169472,-0.981604754924774\n             ,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.542270302772522,0.0508554428815842,-0.838663637638092\n             ,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.725374639034271,-0.054319828748703,-0.68620765209198\n             ,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.725374639034271,-0.054319828748703,-0.68620765209198\n             ,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.562148034572601,-0.142533272504807,-0.814661800861359\n             ,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.562148034572601,-0.142533272504807,-0.814661800861359\n             ,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.37091401219368,-0.0905782580375671,-0.924239337444305\n             ,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.37091401219368,-0.0905782580375671,-0.924239337444305\n             ,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.542270302772522,0.0508554428815842,-0.838663637638092\n             ,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.800398170948029,-0.0439908429980278,-0.597852528095245\n             ,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.725374639034271,-0.054319828748703,-0.68620765209198\n             ,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.725374639034271,-0.054319828748703,-0.68620765209198\n             ,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.826241433620453,0.061872124671936,-0.559907972812653\n             ,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.826241433620453,0.061872124671936,-0.559907972812653\n             ,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.86995929479599,-0.0271206852048635,-0.492377251386642\n             ,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.86995929479599,-0.0271206852048635,-0.492377251386642\n             ,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.800398170948029,-0.0439908429980278,-0.597852528095245\n             ,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.969310760498047,0.16829377412796,-0.179203346371651\n             ,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.987662672996521,-0.0305646266788244,-0.153584524989128\n             ,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.969310760498047,0.16829377412796,-0.179203346371651\n             ,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.998881757259369,0.0267399735748768,-0.0389897488057613\n             ,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.989189743995667,0.0587216019630432,-0.134370610117912\n             ,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.999627530574799,0.0187976788729429,-0.0197845976799726\n             ,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.933456838130951,-0.0391703061759472,-0.356544464826584\n             ,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.970083713531494,0.0539310723543167,-0.236704483628273\n             ,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.999627530574799,0.0187976788729429,-0.0197845976799726\n             ,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.437141418457031,0.161669790744781,-0.88474303483963\n             ,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.586808562278748,0.13275733590126,-0.798768520355225\n             ,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.437141418457031,0.161669790744781,-0.88474303483963\n             ,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.372676461935043,-0.122319355607033,-0.919864237308502\n             ,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.239463403820992,0.198724672198296,-0.950350344181061\n             ,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.372676461935043,-0.122319355607033,-0.919864237308502\n             ,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.239463403820992,0.198724672198296,-0.950350344181061\n             ,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.0269717872142792,-0.128648608922958,-0.991323411464691\n             ,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.13601079583168,0.398971199989319,-0.906820297241211\n             ,-0.109456099569798,0.459850668907166,-0.881224572658539,-0.211731195449829,0.50760555267334,-0.835168540477753\n             ,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.178532913327217,0.211587846279144,-0.960914433002472\n             ,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.255872219800949,0.412295579910278,-0.874380767345428\n             ,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.568679571151733,0.357779324054718,-0.740673661231995\n             ,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.255872219800949,0.412295579910278,-0.874380767345428\n             ,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.255872219800949,0.412295579910278,-0.874380767345428\n             ,-0.211731195449829,0.50760555267334,-0.835168540477753,-0.322734087705612,0.735918641090393,-0.5952028632164\n             ,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.0685182884335518,0.227593377232552,-0.971342623233795\n             ,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.13601079583168,0.398971199989319,-0.906820297241211\n             ,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.0516404360532761,0.365945398807526,-0.929202437400818\n             ,-0.0301786828786135,0.377186805009842,-0.925645351409912,-0.109456099569798,0.459850668907166,-0.881224572658539\n             ,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.000760512368287891,0.207898333668709,-0.978150188922882\n             ,0.0102010685950518,0.341328680515289,-0.939888656139374,-0.0516404360532761,0.365945398807526,-0.929202437400818\n             ,-0.0685182884335518,0.227593377232552,-0.971342623233795,0.0102010685950518,0.341328680515289,-0.939888656139374\n             ,0.010585374198854,0.345912545919418,-0.938207030296326,-0.0301786828786135,0.377186805009842,-0.925645351409912\n             ,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.861315131187439,0.181052923202515,0.474716812372208\n             ,-0.83081316947937,0.301315695047379,0.467929810285568,-0.628413081169128,-0.649794220924377,0.427626639604568\n             ,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.811837613582611,0.121092565357685,-0.571188449859619\n             ,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.0667830258607864,-0.603913366794586,-0.794247210025787\n             ,-0.890724420547485,-0.0131717119365931,-0.454352855682373,0.485446602106094,-0.599754393100739,0.636110246181488\n             ,0.775241792201996,-0.45661398768425,0.436467438936234,0.615995168685913,-0.740946054458618,0.267486304044724\n             ,0.43514209985733,-0.748737931251526,0.500042855739594,-0.575954735279083,-0.540566444396973,0.613240599632263\n             ,-0.743858754634857,0.1927819699049,0.639929115772247,-0.861315131187439,0.181052923202515,0.474716812372208\n             ,0.151796370744705,-0.893162906169891,0.423341274261475,0.315651625394821,-0.933804154396057,0.168445229530334\n             ,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.358404159545898,-0.845226526260376,0.396407097578049\n             ,0.43514209985733,-0.748737931251526,0.500042855739594,0.615995168685913,-0.740946054458618,0.267486304044724\n             ,0.315651625394821,-0.933804154396057,0.168445229530334,0.151796370744705,-0.893162906169891,0.423341274261475\n             ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.864985883235931,0.37462642788887,0.333847969770432\n             ,-0.735505998134613,0.630867898464203,0.247055947780609,-0.864985883235931,0.37462642788887,0.333847969770432\n             ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.83081316947937,0.301315695047379,0.467929810285568\n             ,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.83081316947937,0.301315695047379,0.467929810285568\n             ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.816609680652618,-0.561123669147491,0.135236501693726\n             ,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.0667830258607864,-0.603913366794586,-0.794247210025787\n             ,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.393669724464417,-0.396909922361374,0.829148173332214\n             ,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.187731966376305,-0.0942238569259644,0.977690398693085\n             ,-0.0110307689756155,-0.0793537572026253,0.996785461902618,-0.00827599223703146,-0.428946763277054,0.903291881084442\n             ,0.033345639705658,-0.401991754770279,0.915035903453827,-0.139739543199539,-0.751490116119385,0.644775569438934\n             ,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.129767522215843,-0.742323935031891,0.657354950904846\n             ,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.0722988545894623,-0.821142494678497,0.566125333309174\n             ,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.139739543199539,-0.751490116119385,0.644775569438934\n             ,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.0295225456357002,-0.382050126791,0.923669934272766\n             ,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.626258373260498,-0.747960209846497,0.21990005671978\n             ,-0.758384525775909,0.243889003992081,0.604459345340729,-0.468296974897385,-0.39009964466095,0.792792677879334\n             ,-0.758384525775909,0.243889003992081,0.604459345340729,-0.100514478981495,0.314375013113022,0.943962454795837\n             ,-0.468296974897385,-0.39009964466095,0.792792677879334,-0.426155984401703,-0.544485569000244,0.722444832324982\n             ,-0.726677179336548,-0.644755423069,0.237130090594292,-0.685877442359924,-0.687307178974152,0.239125445485115\n             ,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.426155984401703,-0.544485569000244,0.722444832324982\n             ,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.632458329200745,-0.745043694972992,0.211911231279373\n             ,-0.726677179336548,-0.644755423069,0.237130090594292,-0.20097516477108,-0.349854558706284,0.914992213249207\n             ,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.685877442359924,-0.687307178974152,0.239125445485115\n             ,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.685877442359924,-0.687307178974152,0.239125445485115\n             ,-0.660850763320923,0.309517800807953,0.683721423149109,-0.758384525775909,0.243889003992081,0.604459345340729\n             ,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.887657046318054,-0.456045299768448,0.063934437930584\n             ,-0.852710962295532,0.37292954325676,0.365797132253647,-0.660850763320923,0.309517800807953,0.683721423149109\n             ,-0.685877442359924,-0.687307178974152,0.239125445485115,-0.726677179336548,-0.644755423069,0.237130090594292\n             ,0.255169302225113,-0.0558453612029552,0.965282320976257,0.330043107271194,0.436470597982407,0.83699756860733\n             ,0.185406669974327,0.360577255487442,0.914116144180298,0.134034633636475,-0.240539237856865,0.961340487003326\n             ,0.133207947015762,0.0763719230890274,0.988141179084778,0.0240508019924164,0.026220079511404,0.999366819858551\n             ,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0475814715027809,0.0593862198293209,0.997100412845612\n             ,0.0266619008034468,0.262281715869904,0.964622974395752,-0.0073667336255312,-0.00580848380923271,0.999956011772156\n             ,-0.144208893179893,0.115719296038151,0.982757806777954,-0.100514478981495,0.314375013113022,0.943962454795837\n             ,-0.0475814715027809,0.0593862198293209,0.997100412845612,0.0266619008034468,0.262281715869904,0.964622974395752\n             ,0.0432916954159737,0.796547591686249,0.603023827075958,-0.069992259144783,0.555320203304291,0.828686058521271\n             ,-0.100514478981495,0.314375013113022,0.943962454795837,0.24859219789505,0.926495909690857,0.282501816749573\n             ,0.0432916954159737,0.796547591686249,0.603023827075958,0.0266619008034468,0.262281715869904,0.964622974395752\n             ,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.629961490631104,0.0401515737175941,0.775587737560272\n             ,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.395585596561432,-0.109408371150494,0.911889135837555\n             ,-0.401081025600433,-0.243629589676857,0.883050739765167,0.255169302225113,-0.0558453612029552,0.965282320976257\n             ,0.0791192501783371,-0.0643641576170921,0.994785130023956,0.0240508019924164,0.026220079511404,0.999366819858551\n             ,0.133207947015762,0.0763719230890274,0.988141179084778,0.134034633636475,-0.240539237856865,0.961340487003326\n             ,0.0174392946064472,-0.157727032899857,0.987328767776489,0.0791192501783371,-0.0643641576170921,0.994785130023956\n             ,0.255169302225113,-0.0558453612029552,0.965282320976257,0.0791192501783371,-0.0643641576170921,0.994785130023956\n             ,-0.271942734718323,0.215774357318878,0.93781054019928,-0.402321964502335,0.279689967632294,0.871728479862213\n             ,0.0240508019924164,0.026220079511404,0.999366819858551,-0.158640176057816,0.0965946391224861,0.982600033283234\n             ,-0.271942734718323,0.215774357318878,0.93781054019928,0.0791192501783371,-0.0643641576170921,0.994785130023956\n             ,0.0174392946064472,-0.157727032899857,0.987328767776489,-0.725494682788849,-0.035611480474472,0.687305808067322\n             ,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.284841567277908,0.292440235614777,0.912876784801483\n             ,-0.498006135225296,0.389301002025604,0.77487713098526,0.134034633636475,-0.240539237856865,0.961340487003326\n             ,0.185406669974327,0.360577255487442,0.914116144180298,-0.0424226783216,0.296286582946777,0.954156458377838,-0.0849227532744408\n             ,-0.304428428411484,0.948742032051086,-0.0475814715027809,0.0593862198293209,0.997100412845612,-0.069992259144783\n             ,0.555320203304291,0.828686058521271,0.187445163726807,0.511297464370728,0.838712811470032,0.133207947015762\n             ,0.0763719230890274,0.988141179084778,-0.0073667336255312,-0.00580848380923271,0.999956011772156,-0.0241487547755241\n             ,-0.0255803689360619,0.999381065368652,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.0073667336255312\n             ,-0.00580848380923271,0.999956011772156,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.466067016124725\n             ,0.290591061115265,0.835666418075562,-0.144208893179893,0.115719296038151,0.982757806777954,-0.0658838152885437\n             ,0.0649923235177994,0.995708465576172,-0.0241487547755241,-0.0255803689360619,0.999381065368652,0.0240508019924164\n             ,0.026220079511404,0.999366819858551,-0.402321964502335,0.279689967632294,0.871728479862213,-0.474541217088699\n             ,0.29422801733017,0.829602658748627,-0.847861528396606,0.113259613513947,0.517979800701141,-0.602232098579407\n             ,0.563644886016846,0.565350294113159,-0.702935457229614,0.63435697555542,0.321672111749649,-0.807841360569,0.43371844291687\n             ,0.399099737405777,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.498006135225296,0.389301002025604\n             ,0.77487713098526,-0.602232098579407,0.563644886016846,0.565350294113159,-0.847861528396606,0.113259613513947\n             ,0.517979800701141,0.792737483978271,-0.494514644145966,-0.356402337551117,0.759971797466278,-0.612702488899231\n             ,0.216883733868599,0.336174368858337,0.935995519161224,0.104399025440216,0.879603147506714,0.140207409858704\n             ,-0.454576879739761,-0.134053289890289,0.873388648033142,-0.468211501836777,0.879603147506714,0.140207409858704\n             ,-0.454576879739761,0.336174368858337,0.935995519161224,0.104399025440216,-0.551566660404205,0.823827803134918\n             ,-0.13069823384285,-0.225193619728088,0.461788326501846,0.85792738199234,-0.13601952791214,0.794801294803619\n             ,0.591430127620697,-0.350341945886612,0.815486073493958,0.460698395967484,-0.450388491153717,0.534071862697601\n             ,0.715484082698822,0.336174368858337,0.935995519161224,0.104399025440216,0.279289931058884,0.161584615707397\n             ,0.94651335477829,-0.328838348388672,0.935817182064056,0.126931354403496,-0.761701762676239,0.421244710683823\n             ,0.492304056882858,-0.630214631557465,0.655408442020416,0.416256308555603,-0.673884630203247,0.467902958393097\n             ,0.571792244911194,-0.630214631557465,0.655408442020416,0.416256308555603,-0.702385485172272,0.688902199268341\n             ,0.179076477885246,-0.328838348388672,0.935817182064056,0.126931354403496,-0.630214631557465,0.655408442020416\n             ,0.416256308555603,-0.124414332211018,0.380547553300858,0.91635400056839,-0.422783136367798,-0.0330428369343281\n             ,0.905628323554993,-0.713547646999359,0.198780298233032,0.671815574169159,-0.673884630203247,0.467902958393097\n             ,0.571792244911194,0.327664911746979,0.551296949386597,-0.767272710800171,0.30904021859169,0.371187627315521\n             ,-0.875621974468231,0.120067529380322,0.82549375295639,-0.55149233341217,-0.0351283065974712,0.990967154502869\n             ,-0.12942211329937,0.120067529380322,0.82549375295639,-0.55149233341217,-0.0348765477538109,0.952687978744507\n             ,-0.301942437887192,-0.394997388124466,0.90861302614212,0.135644435882568,-0.350341945886612,0.815486073493958\n             ,0.460698395967484,-0.0351283065974712,0.990967154502869,-0.12942211329937,0.532891869544983,0.203911662101746\n             ,-0.821246802806854,0.120067529380322,0.82549375295639,-0.55149233341217,0.30904021859169,0.371187627315521,-0.875621974468231\n             ,0.532891869544983,0.203911662101746,-0.821246802806854,0.516829967498779,0.529717087745667,-0.67252254486084\n             ,-0.0348765477538109,0.952687978744507,-0.301942437887192,0.120067529380322,0.82549375295639,-0.55149233341217\n             ,-0.450388491153717,0.534071862697601,0.715484082698822,-0.350341945886612,0.815486073493958,0.460698395967484\n             ,-0.394997388124466,0.90861302614212,0.135644435882568,-0.548773884773254,0.701416075229645,0.454821705818176\n             ,-0.225193619728088,0.461788326501846,0.85792738199234,-0.450388491153717,0.534071862697601,0.715484082698822\n             ,-0.484222084283829,0.366713851690292,0.794386506080627,-0.245125457644463,0.30829644203186,0.919166386127472\n             ,0.0420866049826145,0.997517287731171,0.0564619302749634,-0.0351283065974712,0.990967154502869,-0.12942211329937\n             ,-0.350341945886612,0.815486073493958,0.460698395967484,-0.13601952791214,0.794801294803619,0.591430127620697\n             ,0.327664911746979,0.551296949386597,-0.767272710800171,-0.0351283065974712,0.990967154502869,-0.12942211329937\n             ,0.0420866049826145,0.997517287731171,0.0564619302749634,0.201275274157524,0.759530663490295,-0.618547856807709\n             ,0.0685662999749184,0.738678991794586,0.670561015605927,-0.0397870242595673,0.770527541637421,0.636163771152496\n             ,-0.0782447457313538,0.412172168493271,0.907739996910095,0.0410983338952065,0.381287395954132,0.923542559146881\n             ,-0.13601952791214,0.794801294803619,0.591430127620697,-0.225193619728088,0.461788326501846,0.85792738199234\n             ,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.0397870242595673,0.770527541637421,0.636163771152496\n             ,-0.523407638072968,0.841484844684601,0.133969098329544,-0.548773884773254,0.701416075229645,0.454821705818176\n             ,-0.394997388124466,0.90861302614212,0.135644435882568,-0.262664377689362,0.933591663837433,-0.243749871850014\n             ,-0.728943645954132,0.505101680755615,0.462075144052505,-0.655175447463989,0.41560024023056,0.630889534950256\n             ,-0.548773884773254,0.701416075229645,0.454821705818176,-0.523407638072968,0.841484844684601,0.133969098329544\n             ,-0.484222084283829,0.366713851690292,0.794386506080627,-0.450388491153717,0.534071862697601,0.715484082698822\n             ,-0.548773884773254,0.701416075229645,0.454821705818176,-0.655175447463989,0.41560024023056,0.630889534950256\n             ,-0.261222988367081,0.14337170124054,0.954571664333344,-0.12591940164566,0.150871932506561,0.980500876903534\n             ,-0.101943291723728,0.319687753915787,0.942022979259491,-0.245125457644463,0.30829644203186,0.919166386127472\n             ,-0.225193619728088,0.461788326501846,0.85792738199234,-0.245125457644463,0.30829644203186,0.919166386127472\n             ,-0.101943291723728,0.319687753915787,0.942022979259491,-0.0782447457313538,0.412172168493271,0.907739996910095\n             ,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.101943291723728,0.319687753915787,0.942022979259491\n             ,0.0325647220015526,0.328354388475418,0.943993091583252,0.0410983338952065,0.381287395954132,0.923542559146881\n             ,0.0226862858980894,0.138102903962135,0.990158021450043,0.0325647220015526,0.328354388475418,0.943993091583252\n             ,-0.101943291723728,0.319687753915787,0.942022979259491,-0.12591940164566,0.150871932506561,0.980500876903534\n             ,0.0685662999749184,0.738678991794586,0.670561015605927,0.078812912106514,0.980074644088745,0.182324379682541\n             ,0.0115500893443823,0.988494396209717,0.150815844535828,-0.0397870242595673,0.770527541637421,0.636163771152496\n             ,-0.13601952791214,0.794801294803619,0.591430127620697,-0.0397870242595673,0.770527541637421,0.636163771152496\n             ,0.0115500893443823,0.988494396209717,0.150815844535828,0.0420866049826145,0.997517287731171,0.0564619302749634\n             ,0.201275274157524,0.759530663490295,-0.618547856807709,0.0420866049826145,0.997517287731171,0.0564619302749634\n             ,0.0115500893443823,0.988494396209717,0.150815844535828,0.0605678260326386,0.873000860214233,-0.483943223953247\n             ,0.0339763574302197,0.937289535999298,-0.346891850233078,0.0605678260326386,0.873000860214233,-0.483943223953247\n             ,0.0115500893443823,0.988494396209717,0.150815844535828,0.078812912106514,0.980074644088745,0.182324379682541\n             ,0.516829967498779,0.529717087745667,-0.67252254486084,0.532891869544983,0.203911662101746,-0.821246802806854\n             ,0.784418284893036,-0.0482183061540127,-0.61835503578186,0.516829967498779,0.529717087745667,-0.67252254486084\n             ,0.26505383849144,0.683794975280762,-0.679831504821777,-0.262664377689362,0.933591663837433,-0.243749871850014\n             ,-0.394997388124466,0.90861302614212,0.135644435882568,-0.0348765477538109,0.952687978744507,-0.301942437887192\n             ,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.26505383849144,0.683794975280762,-0.679831504821777\n             ,0.516829967498779,0.529717087745667,-0.67252254486084,0.784418284893036,-0.0482183061540127,-0.61835503578186\n             ,-0.00443782517686486,-0.271711438894272,0.962368547916412,0.0352616421878338,0.240770235657692,0.969941377639771\n             ,-0.1695187240839,0.251378893852234,0.952928125858307,-0.185788631439209,-0.25801420211792,0.948109328746796\n             ,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.185788631439209,-0.25801420211792,0.948109328746796\n             ,-0.1695187240839,0.251378893852234,0.952928125858307,-0.375643879175186,0.212974905967712,0.901960849761963\n             ,-0.330226361751556,0.315774649381638,0.889514982700348,-0.375643879175186,0.212974905967712,0.901960849761963\n             ,-0.1695187240839,0.251378893852234,0.952928125858307,-0.159210100769997,0.301312178373337,0.940139949321747\n             ,0.0384946875274181,0.285418510437012,0.957629561424255,-0.159210100769997,0.301312178373337,0.940139949321747\n             ,-0.1695187240839,0.251378893852234,0.952928125858307,0.0352616421878338,0.240770235657692,0.969941377639771\n             ,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.663377344608307,-0.740112125873566,0.110292978584766\n             ,-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.603027641773224,-0.78847599029541,-0.121091783046722\n             ,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.594583511352539,-0.803299486637115,0.0343575030565262\n             ,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.428953319787979,-0.860944986343384,-0.273446142673492\n             ,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.641941249370575,-0.68879646062851,0.336854338645935\n             ,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.84095025062561,-0.471284002065659,0.265883654356003\n             ,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.641941249370575,-0.68879646062851,0.336854338645935\n             ,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.663377344608307,-0.740112125873566,0.110292978584766\n             ,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.162915915250778,-0.763080775737762,0.625432789325714\n             ,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.35957869887352,-0.654971122741699,0.66461718082428\n             ,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.35957869887352,-0.654971122741699,0.66461718082428\n             ,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.185788631439209,-0.25801420211792,0.948109328746796\n             ,-0.00443782517686486,-0.271711438894272,0.962368547916412,-0.185788631439209,-0.25801420211792,0.948109328746796\n             ,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.0397491529583931,-0.678164541721344,0.733834326267242\n             ,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.0397491529583931,-0.678164541721344,0.733834326267242\n             ,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.162915915250778,-0.763080775737762,0.625432789325714\n             ,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.375643879175186,0.212974905967712,0.901960849761963\n             ,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.525489568710327,-0.438258349895477,0.729239583015442\n             ,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.375643879175186,0.212974905967712,0.901960849761963\n             ,-0.330226361751556,0.315774649381638,0.889514982700348,-0.490771174430847,0.254273563623428,0.833359837532043\n             ,-0.159210100769997,0.301312178373337,0.940139949321747,-0.15314356982708,-0.075783796608448,0.985293805599213\n             ,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.330226361751556,0.315774649381638,0.889514982700348\n             ,0.00911593530327082,-0.103348582983017,0.994603395462036,-0.15314356982708,-0.075783796608448,0.985293805599213\n             ,-0.159210100769997,0.301312178373337,0.940139949321747,0.0384946875274181,0.285418510437012,0.957629561424255\n             ,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.360249727964401,-0.149908572435379,0.920732080936432\n             ,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.523851454257965,-0.504004776477814,0.686701416969299\n             ,-0.0928481444716454,-0.394505769014359,0.914190590381622,-0.261337131261826,-0.401412606239319,0.877821683883667\n             ,-0.00295650074258447,-0.253587752580643,0.967307865619659,-0.0108760436996818,-0.349400758743286,0.936910271644592\n             ,0.00262317061424255,-0.184787794947624,0.982774972915649,-0.00295650074258447,-0.253587752580643,0.967307865619659\n             ,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.360249727964401,-0.149908572435379,0.920732080936432\n             ,0.0744598954916,0.293609887361526,0.953020930290222,0.0348379723727703,0.239972576498985,0.970154345035553,0.0381993055343628\n             ,0.285694986581802,0.957558989524841,-0.109741598367691,0.221520185470581,0.968961119651794,0.0744598954916,0.293609887361526\n             ,0.953020930290222,0.205764874815941,0.144822359085083,0.967826068401337,0.026632534340024,0.124120466411114\n             ,0.991909682750702,0.0348379723727703,0.239972576498985,0.970154345035553,-0.6155686378479,-0.697471797466278\n             ,0.366890132427216,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.305121690034866,-0.661639988422394\n             ,0.684933066368103,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.055518988519907,-0.839309513568878\n             ,0.540811538696289,-0.0377944894134998,-0.657056510448456,0.752893269062042,-0.305121690034866,-0.661639988422394\n             ,0.684933066368103,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.531166195869446,0.151813089847565\n             ,0.833555817604065,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.861315131187439,0.181052923202515\n             ,0.474716812372208,-0.743858754634857,0.1927819699049,0.639929115772247,-0.616519212722778,-0.455342262983322\n             ,0.642314195632935,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.531166195869446,0.151813089847565\n             ,0.833555817604065,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.522818684577942,-0.0568677671253681\n             ,0.850544929504395,-0.481455624103546,0.182786270976067,0.857198715209961,-0.760103762149811,0.153783366084099\n             ,0.631342172622681,-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.775605142116547,-0.0662227943539619\n             ,0.627734959125519,-0.760103762149811,0.153783366084099,0.631342172622681,-0.872271299362183,0.143087893724442\n             ,0.467620134353638,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.872271299362183,0.143087893724442\n             ,0.467620134353638,-0.760103762149811,0.153783366084099,0.631342172622681,-0.719690024852753,0.419174522161484\n             ,0.553479015827179,-0.849210619926453,0.33398848772049,0.409014731645584,-0.44353261590004,0.469896525144577\n             ,0.763201177120209,-0.719690024852753,0.419174522161484,0.553479015827179,-0.760103762149811,0.153783366084099\n             ,0.631342172622681,-0.481455624103546,0.182786270976067,0.857198715209961,-0.762500584125519,0.610563993453979\n             ,0.214019775390625,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.840847790241241,0.534673869609833\n             ,0.0842547118663788,-0.72613924741745,0.535442233085632,0.431304275989532,-0.884765982627869,0.444219619035721\n             ,-0.140918776392937,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.81624835729599,0.569451749324799\n             ,-0.0972798392176628,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.522650301456451,0.406982094049454\n             ,-0.749134302139282,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.841533124446869,0.268320113420486\n             ,-0.468856424093246,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.522650301456451,0.406982094049454\n             ,-0.749134302139282,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.81624835729599,0.569451749324799\n             ,-0.0972798392176628,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.522650301456451,0.406982094049454\n             ,-0.749134302139282,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.729740858078003,-0.632296204566956\n             ,0.260153472423553,-0.976188123226166,-0.133096665143967,-0.171295195817947,-0.880486667156219,-0.258835464715958\n             ,-0.397174298763275,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.880486667156219,-0.258835464715958\n             ,-0.397174298763275,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.979476630687714,-0.044322844594717\n             ,0.196624115109444,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.880486667156219,-0.258835464715958\n             ,-0.397174298763275,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.737712860107422,-0.674677968025208\n             ,0.0242776274681091,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.233076319098473,-0.804329991340637\n             ,0.546560764312744,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.710427701473236,-0.480556935071945\n             ,0.514157176017761,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.710427701473236,-0.480556935071945\n             ,0.514157176017761,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.151400625705719,-0.629788994789124\n             ,0.761868536472321,0.485446602106094,-0.599754393100739,0.636110246181488,-0.151400625705719,-0.629788994789124\n             ,0.761868536472321,-0.162659510970116,-0.713988304138184,0.681001126766205,0.439482539892197,-0.499404758214951\n             ,0.74662572145462,0.0642944201827049,-0.547998011112213,0.834004998207092,0.439482539892197,-0.499404758214951\n             ,0.74662572145462,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.233076319098473,-0.804329991340637\n             ,0.546560764312744,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.151400625705719,-0.629788994789124\n             ,0.761868536472321,0.485446602106094,-0.599754393100739,0.636110246181488,0.43514209985733,-0.748737931251526\n             ,0.500042855739594,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.151400625705719,-0.629788994789124\n             ,0.761868536472321,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.559016168117523,-0.215597733855248\n             ,0.800636351108551,-0.00470763072371483,0.279436647891998,0.960152566432953,0.0642944201827049,-0.547998011112213\n             ,0.834004998207092,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.531166195869446,0.151813089847565\n             ,0.833555817604065,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.0296379756182432,0.164347007870674\n             ,0.985957264900208,-0.186078935861588,0.178288474678993,0.966223537921906,-0.217106208205223,-0.0510895028710365\n             ,0.974810123443604,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.217106208205223,-0.0510895028710365\n             ,0.974810123443604,-0.186078935861588,0.178288474678993,0.966223537921906,-0.481455624103546,0.182786270976067\n             ,0.857198715209961,-0.44353261590004,0.469896525144577,0.763201177120209,-0.481455624103546,0.182786270976067\n             ,0.857198715209961,-0.186078935861588,0.178288474678993,0.966223537921906,-0.155023440718651,0.460458368062973\n             ,0.874039947986603,0.0497331917285919,0.445011228322983,0.894142985343933,-0.155023440718651,0.460458368062973\n             ,0.874039947986603,-0.186078935861588,0.178288474678993,0.966223537921906,0.0296379756182432,0.164347007870674\n             ,0.985957264900208,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.556434690952301,-0.213731065392494\n             ,0.802931845188141,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.217106208205223,-0.0510895028710365\n             ,0.974810123443604,0.0126708010211587,-0.0581304989755154,0.99822860956192,-0.217106208205223,-0.0510895028710365\n             ,0.974810123443604,-0.239064574241638,-0.198313489556313,0.950536668300629,0.000908877176698297,-0.206076413393021\n             ,0.97853547334671,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.976188123226166,-0.133096665143967\n             ,-0.171295195817947,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.884765982627869,0.444219619035721\n             ,-0.140918776392937,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.884765982627869,0.444219619035721\n             ,-0.140918776392937,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.881412923336029,0.0769286975264549\n             ,0.466039925813675,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.881412923336029,0.0769286975264549\n             ,0.466039925813675,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.710427701473236,-0.480556935071945\n             ,0.514157176017761,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.710427701473236,-0.480556935071945\n             ,0.514157176017761,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.976188123226166,-0.133096665143967\n             ,-0.171295195817947,0.43514209985733,-0.748737931251526,0.500042855739594,0.151796370744705,-0.893162906169891\n             ,0.423341274261475,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.156405076384544,-0.596952438354492\n             ,0.786883294582367,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.156405076384544,-0.596952438354492\n             ,0.786883294582367,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.586622297763824,-0.114799492061138\n             ,0.801682829856873,-0.72613924741745,0.535442233085632,0.431304275989532,-0.690247058868408,0.178245946764946\n             ,0.701275527477264,-0.639836966991425,0.246874988079071,0.727778375148773,-0.659900903701782,0.452796697616577\n             ,0.59958815574646,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.586622297763824,-0.114799492061138\n             ,0.801682829856873,-0.639836966991425,0.246874988079071,0.727778375148773,-0.690247058868408,0.178245946764946\n             ,0.701275527477264,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.649299025535584,-0.338454186916351\n             ,0.681072294712067,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.690247058868408,0.178245946764946\n             ,0.701275527477264,-0.861315131187439,0.181052923202515,0.474716812372208,-0.844563007354736,0.0171194858849049\n             ,0.535182416439056,-0.936657905578613,0.0257524941116571,0.349297523498535,-0.864985883235931,0.37462642788887\n             ,0.333847969770432,-0.83081316947937,0.301315695047379,0.467929810285568,-0.936657905578613,0.0257524941116571\n             ,0.349297523498535,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.616519212722778,-0.455342262983322\n             ,0.642314195632935,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.847315430641174,-0.0547459907829762\n             ,0.528260707855225,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.647243857383728,-0.405161768198013\n             ,0.645692884922028,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.80817985534668,-0.287789851427078\n             ,0.51383101940155,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.358404159545898,-0.845226526260376\n             ,0.396407097578049,-0.692233920097351,-0.67291522026062,0.260762959718704,0.151796370744705,-0.893162906169891\n             ,0.423341274261475,-0.358404159545898,-0.845226526260376,0.396407097578049,-0.647243857383728,-0.405161768198013\n             ,0.645692884922028,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.34064969420433,-0.564744412899017\n             ,0.751679182052612,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.754464566707611,-0.0490087866783142\n             ,0.654508471488953,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.069260835647583,0.0269219465553761\n             ,0.997235238552094,-0.0737119764089584,-0.466615557670593,0.881383299827576,0.14743447303772,-0.460478246212006\n             ,0.875341594219208,0.244968578219414,-0.0767860040068626,0.966485559940338,-0.523460209369659,-0.770274937152863\n             ,0.36423334479332,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.616519212722778,-0.455342262983322\n             ,0.642314195632935,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.80817985534668,-0.287789851427078\n             ,0.51383101940155,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.775605142116547,-0.0662227943539619\n             ,0.627734959125519,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.522818684577942,-0.0568677671253681\n             ,0.850544929504395,-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.789951264858246,-0.250378400087357\n             ,0.559721052646637,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.248584538698196,-0.9084592461586\n             ,0.33601713180542,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.6155686378479,-0.697471797466278\n             ,0.366890132427216,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.055518988519907,-0.839309513568878\n             ,0.540811538696289,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.248584538698196,-0.9084592461586\n             ,0.33601713180542,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.523460209369659,-0.770274937152863\n             ,0.36423334479332,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.85713666677475,-0.480864852666855\n             ,0.184623166918755,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.80333799123764,-0.434850186109543\n             ,0.406882554292679,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.923407673835754,-0.172809228301048\n             ,0.342717438936234,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.892671883106232,-0.425682097673416\n             ,0.14809350669384,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.923407673835754,-0.172809228301048\n             ,0.342717438936234,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.951001286506653,-0.02836849167943\n             ,0.307882815599442,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.923407673835754,-0.172809228301048\n             ,0.342717438936234,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.706978023052216,-0.108872137963772\n             ,0.698805391788483,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.923407673835754,-0.172809228301048\n             ,0.342717438936234,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.530206859111786,0.100595757365227\n             ,0.841879546642303,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.395585596561432,-0.109408371150494\n             ,0.911889135837555,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.158640176057816,0.0965946391224861\n             ,0.982600033283234,0.0174392946064472,-0.157727032899857,0.987328767776489,-0.126811400055885,-0.181621968746185\n             ,0.975157618522644,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.377197057008743,-0.298063486814499\n             ,0.876858353614807,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.56518691778183,0.0673309490084648\n             ,0.822210609912872,-0.53056800365448,-0.207617223262787,0.821822762489319,0.579925835132599,-0.717766225337982\n             ,-0.3853540122509,0.645713806152344,-0.220039650797844,-0.731188178062439,0.392777740955353,-0.563973963260651\n             ,-0.726401448249817,0.293798208236694,-0.882029175758362,-0.368384540081024,0.579925835132599,-0.717766225337982\n             ,-0.3853540122509,0.293798208236694,-0.882029175758362,-0.368384540081024,0.0681579038500786,-0.994212329387665\n             ,0.0830442756414413,0.161769852042198,-0.974958479404449,0.152598813176155,-0.218783125281334,-0.517780601978302\n             ,0.827065408229828,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.401645928621292,0.0858200713992119\n             ,0.911765038967133,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.218783125281334,-0.517780601978302\n             ,0.827065408229828,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.28600937128067,-0.592511594295502\n             ,0.753079414367676,-0.188662573695183,-0.633236289024353,0.750611901283264,0.293798208236694,-0.882029175758362\n             ,-0.368384540081024,0.392777740955353,-0.563973963260651,-0.726401448249817,-0.0193124283105135,-0.74210524559021\n             ,-0.670005083084106,-0.0615345053374767,-0.946400821208954,-0.317078918218613,0.293798208236694,-0.882029175758362\n             ,-0.368384540081024,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.0973072052001953,-0.992754817008972\n             ,0.0704923868179321,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.53056800365448,-0.207617223262787\n             ,0.821822762489319,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.329664051532745,-0.557146191596985\n             ,0.762174308300018,-0.406814515590668,-0.530913829803467,0.743392527103424,-0.070097453892231,-0.765305280685425\n             ,-0.639839172363281,-0.0787644907832146,-0.96135801076889,-0.263793289661407,-0.169070288538933,-0.950376808643341\n             ,-0.261149764060974,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.0773185193538666,-0.996781229972839\n             ,-0.0211918447166681,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.169070288538933,-0.950376808643341\n             ,-0.261149764060974,-0.0787644907832146,-0.96135801076889,-0.263793289661407,0.65024209022522,-0.683634519577026\n             ,-0.331404685974121,0.24199965596199,-0.948591530323029,0.203986048698425,0.340434432029724,-0.915098071098328\n             ,0.216101616621017,0.626364231109619,-0.75530606508255,-0.192822501063347,0.00068405584897846,-0.208776980638504\n             ,0.977963030338287,-0.0389158241450787,-0.199694201350212,0.979085206985474,-0.125227466225624,-0.596286714076996\n             ,0.792944073677063,-0.0353972837328911,-0.630800306797028,0.775137424468994,-0.0406640991568565,-0.687796175479889\n             ,0.724763989448547,-0.0353972837328911,-0.630800306797028,0.775137424468994,-0.125227466225624,-0.596286714076996\n             ,0.792944073677063,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.447912156581879,-0.140877023339272\n             ,0.882909059524536,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.17153462767601,-0.247131928801537\n             ,0.953677952289581,-0.194900542497635,-0.331308722496033,0.923172950744629,-0.194900542497635,-0.331308722496033\n             ,0.923172950744629,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.135216936469078,-0.381399750709534\n             ,0.914467394351959,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.0973072052001953,-0.992754817008972\n             ,0.0704923868179321,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.269127756357193,-0.79069060087204\n             ,0.549889624118805,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.188662573695183,-0.633236289024353\n             ,0.750611901283264,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.269127756357193,-0.79069060087204\n             ,0.549889624118805,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.215691208839417,-0.974491059780121\n             ,0.062003456056118,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.169070288538933,-0.950376808643341\n             ,-0.261149764060974,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.169070288538933,-0.950376808643341\n             ,-0.261149764060974,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.208596497774124,-0.74006187915802\n             ,-0.639371454715729,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.0193124283105135,-0.74210524559021\n             ,-0.670005083084106,-0.208596497774124,-0.74006187915802,-0.639371454715729,-0.197991296648979,-0.942176342010498\n             ,-0.270376026630402,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.0973072052001953,-0.992754817008972\n             ,0.0704923868179321,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.197991296648979,-0.942176342010498\n             ,-0.270376026630402,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.758384525775909,0.243889003992081\n             ,0.604459345340729,0.24859219789505,0.926495909690857,0.282501816749573,-0.100514478981495,0.314375013113022\n             ,0.943962454795837,0.00664448039606214,0.89234858751297,0.451297968626022,-0.109012864530087,0.977998495101929\n             ,0.177862659096718,-0.183847695589066,0.966428518295288,0.179488003253937,0.12853179872036,0.854913532733917\n             ,0.502595722675323,0.00664448039606214,0.89234858751297,0.451297968626022,0.12853179872036,0.854913532733917\n             ,0.502595722675323,0.187445163726807,0.511297464370728,0.838712811470032,-0.069992259144783,0.555320203304291\n             ,0.828686058521271,0.0171615201979876,0.876817524433136,0.480516880750656,0.046251967549324,0.890573501586914\n             ,0.452481597661972,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.004028111230582,0.993554711341858\n             ,-0.113281942903996,-0.0424226783216,0.296286582946777,0.954156458377838,0.185406669974327,0.360577255487442\n             ,0.914116144180298,0.046251967549324,0.890573501586914,0.452481597661972,0.0171615201979876,0.876817524433136\n             ,0.480516880750656,-0.109012864530087,0.977998495101929,0.177862659096718,0.00664448039606214,0.89234858751297\n             ,0.451297968626022,0.080908939242363,0.956137537956238,0.281522214412689,0.00727432640269399,0.986923277378082\n             ,0.161026418209076,-0.106629706919193,0.951739728450775,0.287787467241287,0.00727432640269399,0.986923277378082\n             ,0.161026418209076,0.080908939242363,0.956137537956238,0.281522214412689,0.171542316675186,0.957118153572083\n             ,0.233448192477226,0.24859219789505,0.926495909690857,0.282501816749573,0.171542316675186,0.957118153572083,0.233448192477226\n             ,0.080908939242363,0.956137537956238,0.281522214412689,0.0432916954159737,0.796547591686249,0.603023827075958\n             ,-0.069992259144783,0.555320203304291,0.828686058521271,0.0432916954159737,0.796547591686249,0.603023827075958\n             ,0.080908939242363,0.956137537956238,0.281522214412689,0.00664448039606214,0.89234858751297,0.451297968626022\n             ,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.00044033964513801,0.857838094234467,0.51391988992691\n             ,0.225808262825012,0.957561135292053,-0.179129242897034,0.438933074474335,0.880430459976196,-0.179387643933296\n             ,-0.498006135225296,0.389301002025604,0.77487713098526,-0.284841567277908,0.292440235614777,0.912876784801483\n             ,-0.00044033964513801,0.857838094234467,0.51391988992691,-0.0443753078579903,0.882909715175629,0.467441201210022\n             ,-0.702935457229614,0.63435697555542,0.321672111749649,-0.602232098579407,0.563644886016846,0.565350294113159\n             ,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.323215007781982,0.943282067775726,0.0758355185389519\n             ,0.477838784456253,0.792661190032959,-0.378626853227615,-0.323215007781982,0.943282067775726,0.0758355185389519\n             ,-0.0831757560372353,0.939581155776978,0.33206781744957,0.510045230388641,0.828637421131134,-0.230681270360947\n             ,0.438933074474335,0.880430459976196,-0.179387643933296,0.510045230388641,0.828637421131134,-0.230681270360947\n             ,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.0443753078579903,0.882909715175629,0.467441201210022\n             ,-0.498006135225296,0.389301002025604,0.77487713098526,-0.0443753078579903,0.882909715175629,0.467441201210022\n             ,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.602232098579407,0.563644886016846,0.565350294113159\n             ,0.618943631649017,0.169027715921402,-0.767032206058502,0.486043959856033,0.298038214445114,-0.821543991565704\n             ,0.426036864519119,0.191680565476418,-0.884166955947876,0.590149700641632,0.106324933469296,-0.800261437892914\n             ,0.699705183506012,0.427644014358521,-0.572305202484131,0.486043959856033,0.298038214445114,-0.821543991565704\n             ,0.618943631649017,0.169027715921402,-0.767032206058502,0.622634530067444,0.273028820753098,-0.733335912227631\n             ,-0.922386527061462,0.136373192071915,0.361393809318542,-0.933428227901459,-0.0520526021718979,0.354968011379242\n             ,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.961905956268311,0.126988083124161,0.242096945643425\n             ,-0.922386527061462,0.136373192071915,0.361393809318542,-0.961905956268311,0.126988083124161,0.242096945643425\n             ,-0.92311555147171,0.291509866714478,0.250758200883865,-0.482406258583069,0.640618324279785,0.597404718399048\n             ,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.514883160591125,0.0328956842422485,0.856628954410553\n             ,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.0580175220966339,-0.274829417467117,0.959740996360779\n             ,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.514883160591125,0.0328956842422485,0.856628954410553\n             ,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.0252015665173531,-0.364970922470093,0.930677771568298\n             ,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.483639568090439,-0.0787182152271271,0.871720254421234\n             ,-0.438263714313507,0.241573825478554,0.865775406360626,-0.281328231096268,0.118911549448967,0.952215552330017\n             ,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.899924099445343,0.231058403849602,0.369795471429825\n             ,-0.8117955327034,0.118040002882481,0.571886837482452,-0.79594624042511,-0.000148868231917731,0.605367302894592\n             ,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.79594624042511,-0.000148868231917731,0.605367302894592\n             ,-0.8117955327034,0.118040002882481,0.571886837482452,-0.739963114261627,0.167704880237579,0.651405930519104\n             ,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.525420844554901,-0.165615484118462,0.834568381309509\n             ,-0.8117955327034,0.118040002882481,0.571886837482452,-0.899924099445343,0.231058403849602,0.369795471429825\n             ,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.0252015665173531,-0.364970922470093,0.930677771568298\n             ,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.525420844554901,-0.165615484118462,0.834568381309509\n             ,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.788007020950317,-0.198835611343384,0.582674324512482\n             ,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.683742940425873,-0.428563714027405,0.59061723947525\n             ,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.845083713531494,-0.00238247727975249,0.534628748893738\n             ,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.463877707719803,-0.190486788749695,0.865177571773529\n             ,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.463877707719803,-0.190486788749695,0.865177571773529\n             ,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.784394800662994,0.0327747240662575,0.61939537525177\n             ,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.784394800662994,0.0327747240662575,0.61939537525177\n             ,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.337558269500732,-0.222729057073593,0.914574325084686\n             ,-0.847808718681335,0.127517849206924,0.514742314815521,-0.755013465881348,0.127179101109505,0.64325749874115\n             ,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.611043751239777,-0.00789655186235905,0.791557371616364\n             ,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.611043751239777,-0.00789655186235905,0.791557371616364\n             ,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.383932620286942,0.132088497281075,0.913864493370056\n             ,-0.462802797555923,0.335958212614059,0.820332646369934,-0.383932620286942,0.132088497281075,0.913864493370056\n             ,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.585166156291962,0.298548936843872,0.753955662250519\n             ,-0.736577808856964,0.297644317150116,0.607339262962341,-0.585166156291962,0.298548936843872,0.753955662250519\n             ,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.755013465881348,0.127179101109505,0.64325749874115\n             ,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.700355410575867,0.465162545442581,-0.541411221027374\n             ,-0.926096200942993,0.356152534484863,0.124503806233406,-0.899924099445343,0.231058403849602,0.369795471429825\n             ,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.899924099445343,0.231058403849602,0.369795471429825\n             ,-0.926096200942993,0.356152534484863,0.124503806233406,-0.849758863449097,0.226472169160843,0.476046502590179\n             ,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.849758863449097,0.226472169160843,0.476046502590179\n             ,-0.926096200942993,0.356152534484863,0.124503806233406,-0.700355410575867,0.465162545442581,-0.541411221027374\n             ,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.964182317256927,0.0220649186521769,0.264321088790894\n             ,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.949614703655243,0.0149662410840392,0.313062191009521\n             ,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.964182317256927,0.0220649186521769,0.264321088790894\n             ,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.917545735836029,0.0924613624811172,0.386730790138245\n             ,-0.736577808856964,0.297644317150116,0.607339262962341,-0.701379120349884,0.42103236913681,0.575151324272156\n             ,-0.566419124603271,0.446817666292191,0.692476272583008,-0.585166156291962,0.298548936843872,0.753955662250519\n             ,-0.462802797555923,0.335958212614059,0.820332646369934,-0.585166156291962,0.298548936843872,0.753955662250519\n             ,-0.566419124603271,0.446817666292191,0.692476272583008,-0.389257401227951,0.367899239063263,0.844469547271729\n             ,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.405952632427216,-0.25302666425705,0.878168523311615\n             ,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.490864455699921,-0.0663091167807579,0.868708908557892\n             ,-0.271065413951874,-0.201962277293205,0.941134810447693,-0.76784873008728,-0.171090081334114,0.617362499237061\n             ,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.905689835548401,-0.202472388744354,0.372465878725052\n             ,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.463877707719803,-0.190486788749695,0.865177571773529\n             ,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.491244077682495,-0.115444600582123,0.863337576389313\n             ,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.514883160591125,0.0328956842422485,0.856628954410553\n             ,-0.670063674449921,0.104801684617996,0.734868168830872,-0.739276468753815,0.150933310389519,0.656269311904907\n             ,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.305669218301773,-0.129191845655441,0.943332314491272\n             ,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.105134896934032,-0.328432708978653,0.938657879829407\n             ,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.305669218301773,-0.129191845655441,0.943332314491272\n             ,-0.383932620286942,0.132088497281075,0.913864493370056,-0.447645485401154,0.239924728870392,0.861423015594482\n             ,-0.611212015151978,0.257414042949677,0.74843692779541,-0.670063674449921,0.104801684617996,0.734868168830872\n             ,-0.514883160591125,0.0328956842422485,0.856628954410553,-0.444255501031876,0.0529395937919617,0.894334673881531\n             ,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.949614703655243,0.0149662410840392,0.313062191009521\n             ,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.813479363918304,-0.00906945671886206,0.581523001194\n             ,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.813479363918304,-0.00906945671886206,0.581523001194\n             ,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.917545735836029,0.0924613624811172,0.386730790138245\n             ,-0.895226001739502,0.157463803887367,0.416863977909088,-0.905333578586578,0.0703608244657516,0.418832272291183\n             ,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.917545735836029,0.0924613624811172,0.386730790138245\n             ,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.905333578586578,0.0703608244657516,0.418832272291183\n             ,-0.895226001739502,0.157463803887367,0.416863977909088,-0.866631507873535,0.0684041753411293,0.49423748254776\n             ,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.971317529678345,-0.00673383427783847,0.237690657377243\n             ,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.953642725944519,-0.152424976229668,0.259484380483627\n             ,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.953642725944519,-0.152424976229668,0.259484380483627\n             ,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.902801036834717,-0.117826566100121,0.413602739572525\n             ,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.913087010383606,-0.000645391584839672,0.407764256000519\n             ,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.999939262866974,0.00285967090167105,0.0106404405087233\n             ,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.913087010383606,-0.000645391584839672,0.407764256000519\n             ,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.998331546783447,-0.0358092784881592,-0.0452967919409275\n             ,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.442632555961609,-0.414916336536407,0.794934511184692\n             ,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.354619354009628,-0.125306099653244,0.926576197147369\n             ,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.510507762432098,-0.444001197814941,0.736372709274292\n             ,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.384387612342834,0.0363270901143551,0.922456741333008\n             ,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.403418689966202,-0.482175469398499,0.777663290500641\n             ,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.456958532333374,-0.310317039489746,0.833601951599121\n             ,0.205764874815941,0.144822359085083,0.967826068401337,0.244968578219414,-0.0767860040068626,0.966485559940338\n             ,0.00927210599184036,-0.101372048258781,0.99480539560318,0.026632534340024,0.124120466411114,0.991909682750702\n             ,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.706978023052216,-0.108872137963772,0.698805391788483\n             ,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.804705798625946,-0.0350312180817127,0.5926393866539\n             ,-0.44353261590004,0.469896525144577,0.763201177120209,-0.487235128879547,0.602307498455048,0.632319211959839\n             ,-0.709937155246735,0.54696124792099,0.443646997213364,-0.719690024852753,0.419174522161484,0.553479015827179\n             ,-0.594367325305939,0.527927815914154,0.606646299362183,-0.16526772081852,0.578359544277191,0.798865914344788\n             ,-0.179719179868698,0.465985059738159,0.866348028182983,-0.654083967208862,0.394615858793259,0.64533132314682\n             ,-0.636985540390015,0.443951308727264,0.630203664302826,-0.654083967208862,0.394615858793259,0.64533132314682\n             ,-0.179719179868698,0.465985059738159,0.866348028182983,-0.162020102143288,0.560337007045746,0.812263488769531\n             ,0.0571579374372959,0.555576980113983,0.829498171806335,-0.162020102143288,0.560337007045746,0.812263488769531\n             ,-0.179719179868698,0.465985059738159,0.866348028182983,0.0507387444376946,0.459851264953613,0.886545181274414\n             ,0.0581676289439201,0.571192860603333,0.818752288818359,0.0507387444376946,0.459851264953613,0.886545181274414\n             ,-0.179719179868698,0.465985059738159,0.866348028182983,-0.16526772081852,0.578359544277191,0.798865914344788\n             ,-0.298522680997849,0.122926026582718,0.946453094482422,-0.410987347364426,-0.221517965197563,0.884318470954895\n             ,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.0186418443918228,0.221836999058723,0.974905550479889\n             ,-0.409960985183716,0.234984055161476,0.881314098834991,-0.506407201290131,0.224265813827515,0.832620322704315\n             ,-0.49151623249054,0.284042507410049,0.823244571685791,-0.37480103969574,0.327312290668488,0.867404639720917\n             ,-0.469541937112808,0.464283794164658,0.750979959964752,-0.37480103969574,0.327312290668488,0.867404639720917\n             ,-0.49151623249054,0.284042507410049,0.823244571685791,-0.593105614185333,0.348213493824005,0.725929081439972\n             ,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.0135245211422443,-0.380902349948883,0.924516320228577\n             ,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.125742971897125,-0.662957012653351,0.738022148609161\n             ,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.125742971897125,-0.662957012653351,0.738022148609161\n             ,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.253225147724152,-0.35441780090332,0.900147259235382\n             ,-0.261222988367081,0.14337170124054,0.954571664333344,-0.253225147724152,-0.35441780090332,0.900147259235382\n             ,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.12591940164566,0.150871932506561,0.980500876903534\n             ,0.0226862858980894,0.138102903962135,0.990158021450043,-0.12591940164566,0.150871932506561,0.980500876903534\n             ,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.0135245211422443,-0.380902349948883,0.924516320228577\n             ,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.998881757259369,0.0267399735748768,-0.0389897488057613\n             ,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.999939262866974,0.00285967090167105,0.0106404405087233\n             ,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.99934709072113,-0.0248590148985386,-0.0262197498232126\n             ,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.998964846134186,-0.000229320270591415,-0.0454886071383953\n             ,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.99934709072113,-0.0248590148985386,-0.0262197498232126\n             ,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.999919414520264,0.000697914510965347,-0.012677663937211\n             ,-0.428986668586731,0.611180424690247,0.665153324604034,-0.637912154197693,0.524314641952515,0.564058721065521\n             ,-0.664581894874573,0.481633543968201,0.571279287338257,-0.542732357978821,0.501746475696564,0.673566699028015\n             ,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.959170579910278,-0.0044404505752027,0.282793402671814\n             ,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.998166382312775,0.0398845337331295,0.0455306805670261\n             ,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.926191806793213,0.116400174796581,0.35863596200943\n             ,-0.914867162704468,0.153272107243538,0.373531401157379,-0.910374224185944,0.148485288023949,0.3862264752388\n             ,-0.939631521701813,0.153399094939232,0.305877894163132,-0.910374224185944,0.148485288023949,0.3862264752388\n             ,-0.914867162704468,0.153272107243538,0.373531401157379,-0.926795780658722,0.133818626403809,0.3509162068367\n             ,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.948452949523926,0.0132069662213326,0.316642642021179\n             ,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.956733524799347,-0.225288674235344,0.18413570523262\n             ,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.956733524799347,-0.225288674235344,0.18413570523262\n             ,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.958112895488739,-0.0412571057677269,0.28340345621109\n             ,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.958088934421539,-0.033353928476572,0.284522652626038\n             ,-0.914867162704468,0.153272107243538,0.373531401157379,-0.926191806793213,0.116400174796581,0.35863596200943\n             ,-0.914867162704468,0.153272107243538,0.373531401157379,-0.958088934421539,-0.033353928476572,0.284522652626038\n             ,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.926795780658722,0.133818626403809,0.3509162068367\n             ,-0.298522680997849,0.122926026582718,0.946453094482422,-0.0186418443918228,0.221836999058723,0.974905550479889\n             ,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.235767140984535,0.346122115850449,0.908082246780396\n             ,-0.529072642326355,0.217875778675079,0.820129454135895,-0.392426759004593,0.205112621188164,0.896621465682983\n             ,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.563694715499878,0.0446579419076443,0.824775099754334\n             ,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.823809504508972,-0.013852178119123,0.566697418689728\n             ,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.519543766975403,-0.00114526739344001,0.854443073272705\n             ,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.823809504508972,-0.013852178119123,0.566697418689728\n             ,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.615767419338226,0.0138289360329509,0.787806570529938\n             ,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.680799663066864,-0.208428665995598,0.702188968658447\n             ,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.530328452587128,0.10359351336956,0.841439306735992\n             ,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.620847463607788,0.0176430195569992,0.783732831478119\n             ,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.912571549415588,-0.364975243806839,0.184407845139503\n             ,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.635643780231476,-0.760042726993561,-0.135248005390167\n             ,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.740522086620331,-0.668854534626007,0.065273717045784\n             ,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.650723218917847,-0.735029816627502,-0.190500557422638\n             ,-0.918760776519775,0.045384906232357,0.392197400331497,-0.921404659748077,0.300344526767731,0.246589884161949\n             ,-0.912839949131012,0.366738528013229,0.179516360163689,-0.938549876213074,0.168846443295479,0.301023334264755\n             ,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.947903215885162,-0.069373294711113,0.310912847518921\n             ,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.978283286094666,-0.0603795535862446,0.198282822966576\n             ,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.947903215885162,-0.069373294711113,0.310912847518921\n             ,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.951001286506653,-0.02836849167943,0.307882815599442\n             ,-0.912092506885529,0.0284031052142382,0.408999383449554,-0.894654810428619,0.0708979144692421,0.441096633672714\n             ,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.941187500953674,-0.0369091406464577,0.335862815380096\n             ,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.941187500953674,-0.0369091406464577,0.335862815380096\n             ,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.958259165287018,0.0577557012438774,0.280006498098373\n             ,-0.939631521701813,0.153399094939232,0.305877894163132,-0.958259165287018,0.0577557012438774,0.280006498098373\n             ,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.910374224185944,0.148485288023949,0.3862264752388\n             ,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.910374224185944,0.148485288023949,0.3862264752388\n             ,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.894654810428619,0.0708979144692421,0.441096633672714\n             ,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.768178582191467,-0.575125515460968,0.281304657459259\n             ,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.774548470973969,-0.470689743757248,0.422523230314255\n             ,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.734221398830414,-0.668789088726044,0.116790995001793\n             ,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.629563450813293,0.348871290683746,0.694218039512634\n             ,-0.37480103969574,0.327312290668488,0.867404639720917,-0.469541937112808,0.464283794164658,0.750979959964752\n             ,-0.639506042003632,0.483837932348251,0.597438633441925,-0.409960985183716,0.234984055161476,0.881314098834991\n             ,-0.37480103969574,0.327312290668488,0.867404639720917,-0.629563450813293,0.348871290683746,0.694218039512634\n             ,-0.590761244297028,0.21027672290802,0.778963983058929,-0.694061398506165,-0.1789870262146,0.697310864925385\n             ,-0.669090986251831,0.108672223985195,0.735192239284515,-0.626672208309174,0.255842447280884,0.736088693141937\n             ,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.77647191286087,0.0245032440871,0.629675269126892\n             ,-0.669090986251831,0.108672223985195,0.735192239284515,-0.573286294937134,-0.272017657756805,0.772883713245392\n             ,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.653488278388977,-0.259704351425171,0.710989952087402\n             ,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.669090986251831,0.108672223985195,0.735192239284515\n             ,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.762500584125519,0.610563993453979,0.214019775390625\n             ,-0.805146157741547,0.523773431777954,0.278210490942001,-0.859274387359619,0.29542076587677,0.417581170797348\n             ,-0.847808718681335,0.127517849206924,0.514742314815521,-0.81624835729599,0.569451749324799,-0.0972798392176628\n             ,-0.027668621391058,0.211265400052071,0.977037012577057,-0.0867536216974258,0.288804531097412,0.953449428081512\n             ,0.0307731032371521,0.261024415493011,0.964841604232788,0.0340906009078026,0.177746370434761,0.983485698699951\n             ,-0.16978645324707,0.304286330938339,0.937327265739441,-0.0867536216974258,0.288804531097412,0.953449428081512\n             ,-0.027668621391058,0.211265400052071,0.977037012577057,-0.0915354415774345,0.261345416307449,0.960895359516144\n             ,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.397862493991852,-0.0639909207820892,0.915210664272308\n             ,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.572961747646332,-0.0624557621777058,0.817198932170868\n             ,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.162437900900841,-0.62639182806015,0.762395679950714\n             ,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.136693820357323,-0.553743422031403,0.821390867233276\n             ,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.136693820357323,-0.553743422031403,0.821390867233276\n             ,-0.0301125477999449,-0.572418868541718,0.819408237934113,-0.0377323105931282,-0.656355738639832,0.753507435321808\n             ,-0.52777773141861,0.480110883712769,0.700674116611481,-0.428986668586731,0.611180424690247,0.665153324604034\n             ,-0.542732357978821,0.501746475696564,0.673566699028015,-0.493602007627487,-0.18142081797123,0.850554823875427\n             ,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.162437900900841,-0.62639182806015,0.762395679950714\n             ,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.493602007627487,-0.18142081797123,0.850554823875427\n             ,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.261222988367081,0.14337170124054,0.954571664333344\n             ,-0.498029559850693,0.248690649867058,0.830734312534332,-0.903494656085968,-0.23456384241581,0.358715981245041\n             ,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.77647191286087,0.0245032440871,0.629675269126892\n             ,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.84095025062561,-0.471284002065659,0.265883654356003\n             ,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.834424376487732,-0.133758425712585,0.534644365310669\n             ,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.331932127475739,-0.817436873912811,0.470763176679611\n             ,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.635058343410492,-0.333720952272415,0.696657180786133\n             ,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.635058343410492,-0.333720952272415,0.696657180786133\n             ,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.55286180973053,-0.0385416857898235,0.832381188869476\n             ,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.55286180973053,-0.0385416857898235,0.832381188869476\n             ,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.563694715499878,0.0446579419076443,0.824775099754334\n             ,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.680799663066864,-0.208428665995598,0.702188968658447\n             ,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.680799663066864,-0.208428665995598,0.702188968658447\n             ,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.569225609302521,-0.734513640403748,0.369421064853668\n             ,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.979163587093353,-0.176672399044037,0.100127547979355\n             ,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.968327283859253,-0.0703691765666008,0.239563062787056\n             ,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.968327283859253,-0.0703691765666008,0.239563062787056\n             ,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.957215070724487,-0.128876686096191,0.259094893932343\n             ,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.957215070724487,-0.128876686096191,0.259094893932343\n             ,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.989297807216644,0.0386401489377022,0.140700981020927\n             ,-0.978964686393738,0.106371738016605,0.174106821417809,-0.989297807216644,0.0386401489377022,0.140700981020927\n             ,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.979163587093353,-0.176672399044037,0.100127547979355\n             ,-0.578717350959778,0.160483196377754,0.799582004547119,-0.619005084037781,0.113047316670418,0.777208507061005\n             ,-0.552518010139465,0.180195555090904,0.813789546489716,-0.522611916065216,0.119792513549328,0.844112873077393\n             ,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.430616140365601,-0.892966866493225,-0.131072074174881\n             ,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.319887846708298,-0.889229834079742,-0.327019929885864\n             ,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.317538052797318,-0.919425249099731,-0.232006043195724\n             ,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.212649196386337,-0.901985108852386,-0.375770092010498\n             ,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.3644839823246,-0.202188208699226,0.908994674682617\n             ,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.572961747646332,-0.0624557621777058,0.817198932170868\n             ,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.3644839823246,-0.202188208699226,0.908994674682617\n             ,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.438927531242371,-0.110836811363697,0.891660153865814\n             ,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.978295981884003,0.0417908765375614,0.202954426407814\n             ,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.968327283859253,-0.0703691765666008,0.239563062787056\n             ,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.968327283859253,-0.0703691765666008,0.239563062787056\n             ,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.948452949523926,0.0132069662213326,0.316642642021179\n             ,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.656185150146484,-0.0951608046889305,0.748575627803802\n             ,-0.571020781993866,-0.291943371295929,0.767270684242249,-0.542732357978821,0.501746475696564,0.673566699028015\n             ,-0.664581894874573,0.481633543968201,0.571279287338257,-0.639506042003632,0.483837932348251,0.597438633441925\n             ,-0.469541937112808,0.464283794164658,0.750979959964752,-0.529072642326355,0.217875778675079,0.820129454135895\n             ,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.530328452587128,0.10359351336956,0.841439306735992\n             ,-0.552518010139465,0.180195555090904,0.813789546489716,-0.580071687698364,-0.808331191539764,-0.100586168467999\n             ,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.713391602039337,-0.697049975395203,-0.0720673725008965\n             ,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.788669764995575,0.415443122386932,0.453218460083008\n             ,-0.793161690235138,0.389079302549362,0.468520849943161,-0.867791414260864,0.325389176607132,0.375579476356506\n             ,-0.937809467315674,0.204933196306229,0.280206710100174,-0.867791414260864,0.325389176607132,0.375579476356506\n             ,-0.793161690235138,0.389079302549362,0.468520849943161,-0.891881763935089,0.246565267443657,0.379147052764893\n             ,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.56955087184906,-0.768941879272461,0.290413826704025\n             ,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.389989584684372,-0.185713946819305,0.901897132396698\n             ,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.711766242980957,-0.226245254278183,0.664982616901398\n             ,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.397862493991852,-0.0639909207820892,0.915210664272308\n             ,-0.389989584684372,-0.185713946819305,0.901897132396698,-0.680589377880096,-0.727077186107636,0.0903155356645584\n             ,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.599500894546509,-0.321622788906097,0.73291027545929\n             ,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.83446329832077,-0.267112225294113,-0.481998056173325\n             ,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.858656167984009,-0.00651147030293942,-0.512510657310486\n             ,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.995428025722504,-0.0233537666499615,-0.0926159843802452\n             ,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.858656167984009,-0.00651147030293942,-0.512510657310486\n             ,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.793161690235138,0.389079302549362,0.468520849943161\n             ,-0.76142829656601,0.432304978370667,0.483052164316177,-0.85773640871048,0.318832546472549,0.403279215097427\n             ,-0.891881763935089,0.246565267443657,0.379147052764893,-0.76142829656601,0.432304978370667,0.483052164316177\n             ,-0.793161690235138,0.389079302549362,0.468520849943161,-0.664581894874573,0.481633543968201,0.571279287338257\n             ,-0.637912154197693,0.524314641952515,0.564058721065521,-0.367648780345917,-0.406335473060608,0.83649617433548\n             ,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.43374091386795,-0.328518569469452,0.839013934135437\n             ,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.787305235862732,-0.612785577774048,0.0681484714150429\n             ,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.784831345081329,-0.569146692752838,0.245176956057549\n             ,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.713391602039337,-0.697049975395203,-0.0720673725008965\n             ,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.798864305019379,-0.578265428543091,0.165604829788208\n             ,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.974589943885803,0.150285556912422,0.166098326444626\n             ,-0.958487570285797,0.190219804644585,0.212409943342209,-0.940992951393127,0.168072536587715,0.293741136789322\n             ,-0.957204222679138,0.181513637304306,0.225416928529739,-0.8270303606987,0.233872473239899,0.511198997497559\n             ,-0.957204222679138,0.181513637304306,0.225416928529739,-0.940992951393127,0.168072536587715,0.293741136789322\n             ,-0.786397933959961,0.197700291872025,0.58522891998291,-0.999442994594574,0.0280166734009981,0.0181336086243391\n             ,-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.367999702692032,-0.664126336574554,-0.650778293609619\n             ,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.998166382312775,0.0398845337331295,0.0455306805670261\n             ,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.997315526008606,-0.0355834849178791,0.0639960467815399\n             ,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.196050360798836,-0.216366931796074,0.956425428390503\n             ,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.489574462175369,-0.0383142903447151,0.871119320392609\n             ,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.196050360798836,-0.216366931796074,0.956425428390503\n             ,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.66099351644516,-0.00236556818708777,0.750387847423553\n             ,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.313734799623489,-0.862539172172546,0.396984457969666\n             ,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.118598200380802,-0.990273535251617,0.0727519541978836\n             ,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.313734799623489,-0.862539172172546,0.396984457969666\n             ,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.419383674860001,-0.901702642440796,0.105117149651051\n             ,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.159300580620766,0.0403820462524891,0.98640388250351\n             ,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.20097516477108,-0.349854558706284,0.914992213249207\n             ,0.138299137353897,-0.216322302818298,0.966477155685425,0.0996207222342491,0.155612200498581,0.982782065868378\n             ,0.0314028672873974,0.188204348087311,0.981627702713013,0.0031939682085067,-0.177682086825371,0.984082758426666\n             ,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.791147410869598,-0.230280995368958,0.566618502140045\n             ,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.573286294937134,-0.272017657756805,0.772883713245392\n             ,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.194900542497635,-0.331308722496033,0.923172950744629\n             ,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.500701189041138,-0.0503258183598518,0.864156007766724\n             ,-0.392426759004593,0.205112621188164,0.896621465682983,-0.129117503762245,0.13854855298996,0.981902718544006\n             ,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.384387612342834,0.0363270901143551,0.922456741333008\n             ,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.650723218917847,-0.735029816627502,-0.190500557422638\n             ,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.846795618534088,-0.531082570552826,0.0298077315092087\n             ,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.846795618534088,-0.531082570552826,0.0298077315092087\n             ,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.843913793563843,-0.430510014295578,-0.320110350847244\n             ,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.910155653953552,-0.193675979971886,0.366205275058746\n             ,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.482243537902832,-0.699907302856445,0.526849985122681\n             ,-0.482406258583069,0.640618324279785,0.597404718399048,0.517754137516022,0.73391991853714,0.439650118350983\n             ,0.0937898680567741,0.660230219364166,0.745184183120728,0.00488457176834345,0.505567967891693,0.862772941589355\n             ,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.791147410869598,-0.230280995368958,0.566618502140045\n             ,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.640290141105652,-0.147163778543472,0.753904044628143\n             ,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.354942172765732,-0.909834563732147,-0.214981570839882\n             ,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.208732545375824,-0.912394225597382,-0.352090239524841\n             ,-0.432196706533432,-0.877966165542603,-0.205867424607277,-0.450285315513611,-0.862574934959412,-0.230667769908905\n             ,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.32945853471756,-0.893185019493103,-0.306068062782288\n             ,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.354942172765732,-0.909834563732147,-0.214981570839882\n             ,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.381353855133057,-0.796372532844543,0.469425201416016\n             ,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.450285315513611,-0.862574934959412,-0.230667769908905\n             ,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.56955087184906,-0.768941879272461,0.290413826704025\n             ,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.716389060020447,-0.69769012928009,0.00390529190190136\n             ,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.59330803155899,-0.795282304286957,-0.124545678496361\n             ,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.748992025852203,-0.659226596355438,0.0665672123432159\n             ,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.59330803155899,-0.795282304286957,-0.124545678496361\n             ,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.104054369032383,-0.821656465530396,0.560404658317566\n             ,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.298621833324432,-0.860875487327576,0.411968946456909\n             ,-0.0633096471428871,-0.774920701980591,0.62887978553772,-0.104054369032383,-0.821656465530396,0.560404658317566\n             ,-0.0633096471428871,-0.774920701980591,0.62887978553772,0.14743447303772,-0.460478246212006,0.875341594219208\n             ,-0.0737119764089584,-0.466615557670593,0.881383299827576,0.00247630476951599,-0.186591759324074,0.982434391975403\n             ,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.250480443239212,-0.173854321241379,0.952383458614349\n             ,-0.000449120096163824,-0.222807794809341,0.974862277507782,-0.313990563154221,-0.19352200627327,0.929494023323059\n             ,-0.284990429878235,-0.166815251111984,0.943903148174286,0.00247630476951599,-0.186591759324074,0.982434391975403\n             ,-0.00140566960908473,-0.234566405415535,0.97209906578064,-0.904991507530212,-0.153763204813004,0.396670162677765\n             ,-0.77647191286087,0.0245032440871,0.629675269126892,-0.739293396472931,-0.211158558726311,0.639419496059418\n             ,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.450571924448013,-0.714681327342987,0.534991204738617\n             ,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.245075523853302,-0.238657772541046,0.939670383930206\n             ,-0.410987347364426,-0.221517965197563,0.884318470954895,-0.927466154098511,-0.0275595653802156,0.372889995574951\n             ,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.973323583602905,-0.0783669799566269,0.215637981891632\n             ,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.884575426578522,-0.272238790988922,0.378698289394379\n             ,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.973323583602905,-0.0783669799566269,0.215637981891632\n             ,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.933359444141388,0.180034801363945,-0.310527950525284\n             ,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.671594560146332,-0.181319773197174,0.718389809131622\n             ,-0.884575426578522,-0.272238790988922,0.378698289394379,-0.973323583602905,-0.0783669799566269,0.215637981891632\n             ,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.933428227901459,-0.0520526021718979,0.354968011379242\n             ,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.973323583602905,-0.0783669799566269,0.215637981891632\n             ,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.0186418443918228,0.221836999058723,0.974905550479889\n             ,-0.110501579940319,0.212603434920311,0.970870316028595,-0.215113177895546,0.235299572348595,0.947818756103516\n             ,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.939980566501617,0.104119330644608,0.324954867362976\n             ,-0.942853271961212,0.10562913864851,0.316022574901581,-0.928196668624878,0.146431341767311,0.342065423727036\n             ,-0.0389158241450787,-0.199694201350212,0.979085206985474,0.00068405584897846,-0.208776980638504,0.977963030338287\n             ,0.0314028672873974,0.188204348087311,0.981627702713013,0.0996207222342491,0.155612200498581,0.982782065868378\n             ,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.169794172048569,-0.0642365738749504,0.983383774757385\n             ,-0.129117503762245,0.13854855298996,0.981902718544006,-0.392426759004593,0.205112621188164,0.896621465682983\n             ,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.493602007627487,-0.18142081797123,0.850554823875427\n             ,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.695913255214691,-0.212267383933067,0.686037361621857\n             ,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.0633096471428871,-0.774920701980591,0.62887978553772\n             ,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.523851454257965,-0.504004776477814,0.686701416969299\n             ,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.997379958629608,0.0722400844097137,-0.00381774920970201\n             ,-0.982630908489227,0.117604449391365,0.143546640872955,-0.999919414520264,0.000697914510965347,-0.012677663937211\n             ,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.989189743995667,0.0587216019630432,-0.134370610117912\n             ,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.998352527618408,-0.0341868922114372,-0.0460811778903008\n             ,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.455979406833649,-0.609841763973236,0.648209691047668\n             ,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.741787433624268,-0.27885103225708,0.609912693500519\n             ,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.455979406833649,-0.609841763973236,0.648209691047668\n             ,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.619028568267822,-0.321996480226517,0.716325223445892\n             ,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.401645928621292,0.0858200713992119,0.911765038967133\n             ,-0.392426759004593,0.205112621188164,0.896621465682983,-0.529072642326355,0.217875778675079,0.820129454135895\n             ,-0.942853271961212,0.10562913864851,0.316022574901581,-0.939980566501617,0.104119330644608,0.324954867362976\n             ,-0.946860730648041,0.157310754060745,0.280549645423889,-0.945931136608124,0.172555223107338,0.274661630392075\n             ,-0.942853271961212,0.10562913864851,0.316022574901581,-0.945931136608124,0.172555223107338,0.274661630392075\n             ,-0.937809467315674,0.204933196306229,0.280206710100174,-0.891881763935089,0.246565267443657,0.379147052764893\n             ,-0.15314356982708,-0.075783796608448,0.985293805599213,-0.136693820357323,-0.553743422031403,0.821390867233276\n             ,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.231002777814865,-0.0802000537514687,0.969642043113709\n             ,-0.0301125477999449,-0.572418868541718,0.819408237934113,-0.136693820357323,-0.553743422031403,0.821390867233276\n             ,-0.15314356982708,-0.075783796608448,0.985293805599213,0.00911593530327082,-0.103348582983017,0.994603395462036\n             ,-0.787644863128662,0.107126019895077,0.606745064258575,-0.525317013263702,-0.0670165792107582,0.848263382911682\n             ,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.739276468753815,0.150933310389519,0.656269311904907\n             ,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.826374292373657,-0.387590408325195,0.408508449792862\n             ,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.929982125759125,-0.229528427124023,0.287140995264053\n             ,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.929982125759125,-0.229528427124023,0.287140995264053\n             ,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.941886365413666,-0.24503418803215,0.229800596833229\n             ,-0.841734766960144,0.21214547753334,0.496464431285858,-0.95811140537262,-0.0200627520680428,0.285692185163498\n             ,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.749491930007935,-0.0978431180119514,0.654743134975433\n             ,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.918955624103546,-0.301046788692474,0.254737854003906\n             ,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.953642725944519,-0.152424976229668,0.259484380483627\n             ,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.865981459617615,-0.173945933580399,0.468848556280136\n             ,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.995428025722504,-0.0233537666499615,-0.0926159843802452\n             ,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.959170579910278,-0.0044404505752027,0.282793402671814\n             ,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.808385133743286,0.0124147878959775,0.588523030281067\n             ,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.873597860336304,-0.23740328848362,0.424813508987427\n             ,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.0848771035671234,-0.827450573444366,0.55508691072464\n             ,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0722988545894623,-0.821142494678497,0.566125333309174\n             ,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0848771035671234,-0.827450573444366,0.55508691072464\n             ,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.149853184819222,-0.761297464370728,0.63084876537323\n             ,-0.0771657377481461,-0.907520055770874,-0.412859290838242,-0.0777209997177124,-0.922415435314178,-0.378297746181488\n             ,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.212649196386337,-0.901985108852386,-0.375770092010498\n             ,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.72460925579071,0.0771455466747284,0.684828460216522\n             ,-0.713547646999359,0.198780298233032,0.671815574169159,-0.696582138538361,-0.198639899492264,0.689431309700012\n             ,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.905104517936707,-0.391508787870407,-0.165851414203644\n             ,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.779531359672546,-0.612799942493439,-0.129641994833946\n             ,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.779531359672546,-0.612799942493439,-0.129641994833946\n             ,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.739374160766602,-0.61436802148819,-0.275459170341492\n             ,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.81877064704895,-0.518556773662567,-0.246401205658913\n             ,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.843913793563843,-0.430510014295578,-0.320110350847244\n             ,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.855788469314575,-0.355743646621704,-0.375596284866333\n             ,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.905104517936707,-0.391508787870407,-0.165851414203644\n             ,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.713547646999359,0.198780298233032,0.671815574169159\n             ,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.547281503677368,-0.332838475704193,0.767920255661011\n             ,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.999442994594574,0.0280166734009981,0.0181336086243391\n             ,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.997032284736633,-0.0711089670658112,-0.0294978637248278\n             ,-0.296029925346375,0.469678968191147,0.831725895404816,-0.406924575567245,0.55693382024765,0.724042177200317\n             ,-0.431310623884201,0.54215931892395,0.721134126186371,-0.934884548187256,0.137223497033119,-0.327353954315186\n             ,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.979476630687714,-0.044322844594717,0.196624115109444\n             ,-0.979476630687714,-0.044322844594717,0.196624115109444,-0.79594624042511,-0.000148868231917731,0.605367302894592\n             ,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.912571549415588,-0.364975243806839,0.184407845139503\n             ,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.985770165920258,0.0388064943253994,0.163558095693588\n             ,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.96815037727356,0.0736105665564537,-0.239304021000862\n             ,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.96815037727356,0.0736105665564537,-0.239304021000862\n             ,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.794985055923462,-0.313673406839371,-0.519237637519836\n             ,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.99179345369339,0.127844139933586,-0.0012682982487604\n             ,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.986240923404694,0.124055705964565,-0.109266042709351\n             ,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.986240923404694,0.124055705964565,-0.109266042709351\n             ,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.927130460739136,-0.0191504992544651,-0.374249011278152\n             ,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.96815037727356,0.0736105665564537,-0.239304021000862\n             ,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.876246690750122,-0.00972981471568346,-0.481764525175095\n             ,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.442632555961609,-0.414916336536407,0.794934511184692\n             ,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.694061398506165,-0.1789870262146,0.697310864925385\n             ,-0.397862493991852,-0.0639909207820892,0.915210664272308,0.0111285699531436,-0.0777815505862236,0.9969083070755\n             ,0.00655650394037366,-0.135652124881744,0.990734815597534,-0.389989584684372,-0.185713946819305,0.901897132396698\n             ,-0.0528050363063812,-0.813004612922668,0.579857885837555,-0.381353855133057,-0.796372532844543,0.469425201416016\n             ,-0.389989584684372,-0.185713946819305,0.901897132396698,0.00655650394037366,-0.135652124881744,0.990734815597534\n             ,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.986240923404694,0.124055705964565,-0.109266042709351\n             ,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.979892313480377,0.170224979519844,0.104088805615902\n             ,-0.939631521701813,0.153399094939232,0.305877894163132,-0.979892313480377,0.170224979519844,0.104088805615902\n             ,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.958259165287018,0.0577557012438774,0.280006498098373\n             ,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.958259165287018,0.0577557012438774,0.280006498098373\n             ,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.999477684497833,-0.0109285833314061,0.0304120387881994\n             ,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.999477684497833,-0.0109285833314061,0.0304120387881994\n             ,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.986240923404694,0.124055705964565,-0.109266042709351\n             ,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.335694938898087,-0.0845088064670563,0.938172280788422\n             ,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.250480443239212,-0.173854321241379,0.952383458614349\n             ,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.438927531242371,-0.110836811363697,0.891660153865814\n             ,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.284990429878235,-0.166815251111984,0.943903148174286\n             ,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.669449508190155,-0.697340130805969,0.256035417318344\n             ,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.0928481444716454,-0.394505769014359,0.914190590381622\n             ,0.14743447303772,-0.460478246212006,0.875341594219208,-0.0633096471428871,-0.774920701980591,0.62887978553772\n             ,-0.261337131261826,-0.401412606239319,0.877821683883667,0.00927210599184036,-0.101372048258781,0.99480539560318\n             ,0.244968578219414,-0.0767860040068626,0.966485559940338,0.14743447303772,-0.460478246212006,0.875341594219208\n             ,-0.0928481444716454,-0.394505769014359,0.914190590381622,-0.0108760436996818,-0.349400758743286,0.936910271644592\n             ,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.953642725944519,-0.152424976229668,0.259484380483627\n             ,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.899289608001709,-0.225166246294975,0.374937802553177\n             ,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.905689835548401,-0.202472388744354,0.372465878725052\n             ,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.739293396472931,-0.211158558726311,0.639419496059418\n             ,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.842230319976807,0.0367605164647102,0.53786313533783\n             ,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.702881813049316,-0.068748727440834,0.707976579666138\n             ,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.615767419338226,0.0138289360329509,0.787806570529938\n             ,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.842230319976807,0.0367605164647102,0.53786313533783\n             ,-0.960240244865417,0.158970504999161,0.229493051767349,-0.985882997512817,0.0816566720604897,0.146174341440201\n             ,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.989446640014648,-0.00150133995339274,0.144889995455742\n             ,-0.910772800445557,0.214318007230759,0.352931588888168,-0.985882997512817,0.0816566720604897,0.146174341440201\n             ,-0.960240244865417,0.158970504999161,0.229493051767349,-0.844134092330933,0.36929926276207,0.388658910989761\n             ,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.927130460739136,-0.0191504992544651,-0.374249011278152\n             ,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.961785852909088,-0.0866831690073013,-0.259719133377075\n             ,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.525317013263702,-0.0670165792107582,0.848263382911682\n             ,-0.787644863128662,0.107126019895077,0.606745064258575,-0.82659912109375,0.121020883321762,0.549625158309937\n             ,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.787644863128662,0.107126019895077,0.606745064258575\n             ,-0.739276468753815,0.150933310389519,0.656269311904907,-0.749392926692963,-0.121673375368118,0.650850057601929\n             ,-0.704794883728027,-0.197958365082741,0.681231737136841,-0.785154461860657,-0.227399781346321,0.576039791107178\n             ,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.740851521492004,-0.347129315137863,0.575013279914856\n             ,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.706978023052216,-0.108872137963772,0.698805391788483\n             ,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.704794883728027,-0.197958365082741,0.681231737136841\n             ,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.42670676112175,-0.452820241451263,0.782863438129425\n             ,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.166397944092751,-0.507038652896881,0.845708906650543\n             ,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.779531359672546,-0.612799942493439,-0.129641994833946\n             ,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.897795557975769,-0.43993416428566,0.0205198600888252\n             ,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.897795557975769,-0.43993416428566,0.0205198600888252\n             ,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.749754548072815,-0.661690354347229,-0.00583517225459218\n             ,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.749754548072815,-0.661690354347229,-0.00583517225459218\n             ,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.618224084377289,-0.776368081569672,-0.122684694826603\n             ,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.758769392967224,-0.645694494247437,-0.085717998445034\n             ,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.650723218917847,-0.735029816627502,-0.190500557422638\n             ,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.713391602039337,-0.697049975395203,-0.0720673725008965\n             ,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.571418464183807,-0.794688820838928,-0.204818531870842\n             ,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.852678954601288,-0.302188754081726,0.426169604063034\n             ,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.665225088596344,-0.442761093378067,0.601197302341461\n             ,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.665225088596344,-0.442761093378067,0.601197302341461\n             ,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.749491930007935,-0.0978431180119514,0.654743134975433\n             ,-0.431310623884201,0.54215931892395,0.721134126186371,-0.704075336456299,0.454022943973541,0.546022951602936\n             ,-0.715115904808044,0.391270339488983,0.57923811674118,-0.451172351837158,0.441036701202393,0.775841593742371\n             ,-0.704075336456299,0.454022943973541,0.546022951602936,-0.431310623884201,0.54215931892395,0.721134126186371\n             ,-0.406924575567245,0.55693382024765,0.724042177200317,-0.530960738658905,0.402330845594406,0.74579530954361\n             ,-0.737271249294281,0.345291316509247,0.580693602561951,-0.658462405204773,-0.192036494612694,0.727701365947723\n             ,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.897873997688293,-0.0343663021922112,0.438909232616425\n             ,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.658462405204773,-0.192036494612694,0.727701365947723\n             ,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.888188779354095,-0.0342079848051071,0.45820364356041\n             ,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.137671425938606,0.655901074409485,0.742186188697815\n             ,0.0635503008961678,0.655404150485992,0.752600014209747,0.0513622872531414,0.468802571296692,0.881808400154114\n             ,-0.185234054923058,0.48134982585907,0.856732606887817,-0.660850763320923,0.309517800807953,0.683721423149109\n             ,-0.852710962295532,0.37292954325676,0.365797132253647,-0.106629706919193,0.951739728450775,0.287787467241287\n             ,0.171542316675186,0.957118153572083,0.233448192477226,-0.758384525775909,0.243889003992081,0.604459345340729\n             ,-0.660850763320923,0.309517800807953,0.683721423149109,0.171542316675186,0.957118153572083,0.233448192477226\n             ,0.24859219789505,0.926495909690857,0.282501816749573,-0.974589943885803,0.150285556912422,0.166098326444626\n             ,-0.957204222679138,0.181513637304306,0.225416928529739,-0.924049556255341,0.299373358488083,0.237714126706123\n             ,-0.960206747055054,0.212085798382759,0.18172125518322,-0.937809467315674,0.204933196306229,0.280206710100174\n             ,-0.960206747055054,0.212085798382759,0.18172125518322,-0.924049556255341,0.299373358488083,0.237714126706123\n             ,-0.867791414260864,0.325389176607132,0.375579476356506,-0.788669764995575,0.415443122386932,0.453218460083008\n             ,-0.867791414260864,0.325389176607132,0.375579476356506,-0.924049556255341,0.299373358488083,0.237714126706123\n             ,-0.824751377105713,0.366082817316055,0.431008726358414,-0.8270303606987,0.233872473239899,0.511198997497559\n             ,-0.824751377105713,0.366082817316055,0.431008726358414,-0.924049556255341,0.299373358488083,0.237714126706123\n             ,-0.957204222679138,0.181513637304306,0.225416928529739,-0.482406258583069,0.640618324279785,0.597404718399048\n             ,-0.559565424919128,0.213157281279564,0.80090606212616,-0.922386527061462,0.136373192071915,0.361393809318542\n             ,-0.559565424919128,0.213157281279564,0.80090606212616,-0.482406258583069,0.640618324279785,0.597404718399048\n             ,0.00488457176834345,0.505567967891693,0.862772941589355,-0.933428227901459,-0.0520526021718979,0.354968011379242\n             ,-0.922386527061462,0.136373192071915,0.361393809318542,-0.559565424919128,0.213157281279564,0.80090606212616\n             ,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.940992951393127,0.168072536587715,0.293741136789322\n             ,-0.88217681646347,0.30687540769577,0.357199609279633,-0.737271249294281,0.345291316509247,0.580693602561951\n             ,-0.786397933959961,0.197700291872025,0.58522891998291,-0.929433286190033,0.240452021360397,0.27988663315773\n             ,-0.938261330127716,0.284641981124878,0.196582421660423,-0.88217681646347,0.30687540769577,0.357199609279633\n             ,-0.940992951393127,0.168072536587715,0.293741136789322,-0.958487570285797,0.190219804644585,0.212409943342209\n             ,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.623834013938904,0.0451370552182198,0.78025233745575\n             ,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.572961747646332,-0.0624557621777058,0.817198932170868\n             ,-0.552518010139465,0.180195555090904,0.813789546489716,-0.619005084037781,0.113047316670418,0.777208507061005\n             ,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.529072642326355,0.217875778675079,0.820129454135895\n             ,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.43374091386795,-0.328518569469452,0.839013934135437\n             ,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.35664427280426,-0.676209807395935,0.64462798833847\n             ,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.949234426021576,-0.150814101099968,0.27606001496315\n             ,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.897795557975769,-0.43993416428566,0.0205198600888252\n             ,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.897795557975769,-0.43993416428566,0.0205198600888252\n             ,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.971085906028748,-0.227177411317825,0.0733662322163582\n             ,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.971085906028748,-0.227177411317825,0.0733662322163582\n             ,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.954627275466919,-0.0333360694348812,0.295931607484818\n             ,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.954627275466919,-0.0333360694348812,0.295931607484818\n             ,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.949234426021576,-0.150814101099968,0.27606001496315\n             ,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.871014952659607,-0.424263268709183,0.247656226158142\n             ,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.73885315656662,-0.641847014427185,0.205252081155777\n             ,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.73885315656662,-0.641847014427185,0.205252081155777\n             ,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.664591491222382,-0.746946513652802,0.01972521468997\n             ,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.664591491222382,-0.746946513652802,0.01972521468997\n             ,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.749754548072815,-0.661690354347229,-0.00583517225459218\n             ,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.749754548072815,-0.661690354347229,-0.00583517225459218\n             ,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.871014952659607,-0.424263268709183,0.247656226158142\n             ,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.456958532333374,-0.310317039489746,0.833601951599121\n             ,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.230118215084076,-0.0391505397856236,0.972374856472015\n             ,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.616519212722778,-0.455342262983322,0.642314195632935\n             ,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.29495570063591,-0.303489834070206,0.906032621860504\n             ,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.997315526008606,-0.0355834849178791,0.0639960467815399\n             ,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.995428025722504,-0.0233537666499615,-0.0926159843802452\n             ,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.83446329832077,-0.267112225294113,-0.481998056173325\n             ,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.997315526008606,-0.0355834849178791,0.0639960467815399\n             ,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.619028568267822,-0.321996480226517,0.716325223445892\n             ,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.767993330955505,-0.301860928535461,0.564859509468079\n             ,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.696582138538361,-0.198639899492264,0.689431309700012\n             ,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.571020781993866,-0.291943371295929,0.767270684242249\n             ,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.573286294937134,-0.272017657756805,0.772883713245392\n             ,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.683742940425873,-0.428563714027405,0.59061723947525\n             ,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.559306979179382,-0.466573625802994,0.685189545154572\n             ,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.767993330955505,-0.301860928535461,0.564859509468079\n             ,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.741787433624268,-0.27885103225708,0.609912693500519\n             ,-0.44353261590004,0.469896525144577,0.763201177120209,-0.155023440718651,0.460458368062973,0.874039947986603\n             ,-0.148301675915718,0.617360651493073,0.772575199604034,-0.487235128879547,0.602307498455048,0.632319211959839\n             ,0.0497331917285919,0.445011228322983,0.894142985343933,0.0604556538164616,0.606487095355988,0.792791604995728\n             ,-0.148301675915718,0.617360651493073,0.772575199604034,-0.155023440718651,0.460458368062973,0.874039947986603\n             ,-0.938261330127716,0.284641981124878,0.196582421660423,-0.921404659748077,0.300344526767731,0.246589884161949\n             ,-0.854642570018768,0.365032374858856,0.369239091873169,-0.88217681646347,0.30687540769577,0.357199609279633\n             ,-0.88217681646347,0.30687540769577,0.357199609279633,-0.854642570018768,0.365032374858856,0.369239091873169\n             ,-0.704075336456299,0.454022943973541,0.546022951602936,-0.737271249294281,0.345291316509247,0.580693602561951\n             ,-0.715115904808044,0.391270339488983,0.57923811674118,-0.704075336456299,0.454022943973541,0.546022951602936\n             ,-0.854642570018768,0.365032374858856,0.369239091873169,-0.878912448883057,0.190948858857155,0.437094360589981\n             ,-0.918760776519775,0.045384906232357,0.392197400331497,-0.878912448883057,0.190948858857155,0.437094360589981\n             ,-0.854642570018768,0.365032374858856,0.369239091873169,-0.921404659748077,0.300344526767731,0.246589884161949\n             ,0.152057304978371,-0.511582612991333,0.845672428607941,0.138299137353897,-0.216322302818298,0.966477155685425\n             ,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.0233143605291843,-0.495335191488266,0.868389010429382\n             ,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.319887846708298,-0.889229834079742,-0.327019929885864\n             ,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.208732545375824,-0.912394225597382,-0.352090239524841\n             ,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.319887846708298,-0.889229834079742,-0.327019929885864\n             ,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.423251867294312,-0.8652303814888,-0.268764227628708\n             ,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.460973918437958,-0.302575647830963,0.834236800670624\n             ,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.619028568267822,-0.321996480226517,0.716325223445892\n             ,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.899289608001709,-0.225166246294975,0.374937802553177\n             ,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.928220152854919,-0.224693849682808,0.296513050794601\n             ,-0.00260085915215313,-0.437005490064621,0.899455070495605,0.028565090149641,-0.175006538629532,0.984152793884277\n             ,0.138299137353897,-0.216322302818298,0.966477155685425,0.152057304978371,-0.511582612991333,0.845672428607941\n             ,-0.230118215084076,-0.0391505397856236,0.972374856472015,0.028565090149641,-0.175006538629532,0.984152793884277\n             ,-0.00260085915215313,-0.437005490064621,0.899455070495605,-0.29495570063591,-0.303489834070206,0.906032621860504\n             ,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.29495570063591,-0.303489834070206,0.906032621860504\n             ,-0.00260085915215313,-0.437005490064621,0.899455070495605,-0.0971510037779808,-0.777255237102509,0.621639728546143\n             ,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0971510037779808,-0.777255237102509,0.621639728546143\n             ,-0.00260085915215313,-0.437005490064621,0.899455070495605,0.152057304978371,-0.511582612991333,0.845672428607941\n             ,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.58394068479538,-0.0111314477398992,0.811720013618469\n             ,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.438927531242371,-0.110836811363697,0.891660153865814\n             ,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.615767419338226,0.0138289360329509,0.787806570529938\n             ,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.525046348571777,-0.114187583327293,0.843378603458405\n             ,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.680589377880096,-0.727077186107636,0.0903155356645584\n             ,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.913328051567078,0.257958859205246,0.315101653337479\n             ,-0.898379147052765,0.257861793041229,0.355558961629868,-0.873595476150513,0.228950142860413,0.429433107376099\n             ,-0.927467882633209,0.10914921015501,0.357616752386093,-0.927535772323608,0.260400146245956,0.26808425784111\n             ,-0.898379147052765,0.257861793041229,0.355558961629868,-0.913328051567078,0.257958859205246,0.315101653337479\n             ,-0.899272859096527,0.337114810943604,0.278679043054581,-0.986233770847321,-0.0181744769215584,0.164355054497719\n             ,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.838127374649048,0.00188649771735072,0.545471370220184\n             ,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.783675134181976,0.0171119719743729,0.620935142040253\n             ,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.986233770847321,-0.0181744769215584,0.164355054497719\n             ,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.77647191286087,0.0245032440871,0.629675269126892\n             ,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.626672208309174,0.255842447280884,0.736088693141937\n             ,-0.669090986251831,0.108672223985195,0.735192239284515,-0.162437900900841,-0.62639182806015,0.762395679950714\n             ,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.10322830080986,-0.541345357894897,0.834439396858215\n             ,0.0824021622538567,0.119332544505596,0.98942893743515,0.028565090149641,-0.175006538629532,0.984152793884277\n             ,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.129117503762245,0.13854855298996,0.981902718544006\n             ,-0.859274387359619,0.29542076587677,0.417581170797348,-0.755013465881348,0.127179101109505,0.64325749874115\n             ,-0.847808718681335,0.127517849206924,0.514742314815521,-0.736577808856964,0.297644317150116,0.607339262962341\n             ,-0.755013465881348,0.127179101109505,0.64325749874115,-0.859274387359619,0.29542076587677,0.417581170797348\n             ,-0.808332681655884,0.323168575763702,0.49209788441658,-0.842230319976807,0.0367605164647102,0.53786313533783\n             ,-0.999627947807312,0.018455671146512,0.020082326605916,-0.996842920780182,-0.019830010831356,0.0768825337290764\n             ,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.808385133743286,0.0124147878959775,0.588523030281067\n             ,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.999627947807312,0.018455671146512,0.020082326605916\n             ,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.711766242980957,-0.226245254278183,0.664982616901398\n             ,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.740522086620331,-0.668854534626007,0.065273717045784\n             ,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.603729546070099,-0.032661035656929,0.796519875526428\n             ,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.702881813049316,-0.068748727440834,0.707976579666138\n             ,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.10322830080986,-0.541345357894897,0.834439396858215\n             ,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.354619354009628,-0.125306099653244,0.926576197147369\n             ,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.708063185214996,0.0871675312519073,0.700748383998871\n             ,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.519543766975403,-0.00114526739344001,0.854443073272705\n             ,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.256247758865356,0.183180019259453,0.94909542798996\n             ,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.708063185214996,0.0871675312519073,0.700748383998871\n             ,-0.599762678146362,0.237867310643196,0.764005124568939,0.0824021622538567,0.119332544505596,0.98942893743515\n             ,-0.129117503762245,0.13854855298996,0.981902718544006,-0.169794172048569,-0.0642365738749504,0.983383774757385\n             ,-0.0553458705544472,-0.183565944433212,0.981448113918304,0.0824021622538567,0.119332544505596,0.98942893743515\n             ,-0.0553458705544472,-0.183565944433212,0.981448113918304,-0.0389158241450787,-0.199694201350212,0.979085206985474\n             ,0.0996207222342491,0.155612200498581,0.982782065868378,-0.793161690235138,0.389079302549362,0.468520849943161\n             ,-0.788669764995575,0.415443122386932,0.453218460083008,-0.639506042003632,0.483837932348251,0.597438633441925\n             ,-0.664581894874573,0.481633543968201,0.571279287338257,-0.38422480225563,0.137366592884064,0.912963151931763\n             ,-0.113911136984825,0.222564980387688,0.968240201473236,-0.365421146154404,0.118911430239677,0.923215806484222\n             ,-0.215113177895546,0.235299572348595,0.947818756103516,-0.684878885746002,-0.277860194444656,0.673598289489746\n             ,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.42670676112175,-0.452820241451263,0.782863438129425\n             ,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.245075523853302,-0.238657772541046,0.939670383930206\n             ,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.110501579940319,0.212603434920311,0.970870316028595\n             ,-0.0186418443918228,0.221836999058723,0.974905550479889,-0.434661060571671,-0.742193758487701,0.5101158618927\n             ,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.180914804339409,-0.246753722429276,0.952041208744049\n             ,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.027668621391058,0.211265400052071,0.977037012577057\n             ,0.0304032936692238,0.174695551395416,0.984152972698212,0.0344220362603664,0.22930283844471,0.972746253013611\n             ,-0.0915354415774345,0.261345416307449,0.960895359516144,0.0284836571663618,0.148866042494774,0.988447070121765\n             ,0.0304032936692238,0.174695551395416,0.984152972698212,-0.027668621391058,0.211265400052071,0.977037012577057\n             ,0.0340906009078026,0.177746370434761,0.983485698699951,-0.999627947807312,0.018455671146512,0.020082326605916\n             ,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.998881995677948,0.0170586127787828,0.0440875962376595\n             ,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.998331546783447,-0.0358092784881592,-0.0452967919409275\n             ,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.996856987476349,0.0654792115092278,0.0445937626063824\n             ,-0.999627947807312,0.018455671146512,0.020082326605916,-0.905668199062347,0.0821359232068062,0.415955275297165\n             ,-0.894654810428619,0.0708979144692421,0.441096633672714,-0.708954691886902,-0.0861286148428917,0.69997501373291\n             ,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.665728688240051,-0.201705411076546,0.718415081501007\n             ,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.708954691886902,-0.0861286148428917,0.69997501373291\n             ,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.621041119098663,-0.108981177210808,0.776164293289185\n             ,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.708954691886902,-0.0861286148428917,0.69997501373291\n             ,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.912092506885529,0.0284031052142382,0.408999383449554\n             ,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.708954691886902,-0.0861286148428917,0.69997501373291\n             ,-0.894654810428619,0.0708979144692421,0.441096633672714,-0.841734766960144,0.21214547753334,0.496464431285858\n             ,-0.721355617046356,0.238694369792938,0.650131583213806,-0.772696316242218,0.194377049803734,0.604282975196838\n             ,-0.77285635471344,0.360512226819992,0.522229790687561,-0.772696316242218,0.194377049803734,0.604282975196838\n             ,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.807132244110107,0.16207791864872,0.567686796188354\n             ,-0.807132244110107,0.16207791864872,0.567686796188354,-0.800202667713165,0.314497977495193,0.510653257369995\n             ,-0.77285635471344,0.360512226819992,0.522229790687561,-0.772696316242218,0.194377049803734,0.604282975196838\n             ,-0.772696316242218,0.194377049803734,0.604282975196838,-0.721355617046356,0.238694369792938,0.650131583213806\n             ,-0.774853527545929,0.101396143436432,0.62395578622818,-0.80397242307663,0.0757209435105324,0.589825987815857\n             ,-0.629563450813293,0.348871290683746,0.694218039512634,-0.824751377105713,0.366082817316055,0.431008726358414\n             ,-0.8270303606987,0.233872473239899,0.511198997497559,-0.590761244297028,0.21027672290802,0.778963983058929,-0.639506042003632\n             ,0.483837932348251,0.597438633441925,-0.788669764995575,0.415443122386932,0.453218460083008,-0.824751377105713\n             ,0.366082817316055,0.431008726358414,-0.629563450813293,0.348871290683746,0.694218039512634,-0.74636310338974\n             ,-0.0243592355400324,0.665093064308167,-0.830214977264404,0.100066982209682,0.548388242721558,-0.809095621109009\n             ,0.140354558825493,0.570670545101166,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.941886365413666\n             ,-0.24503418803215,0.229800596833229,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.956733524799347\n             ,-0.225288674235344,0.18413570523262,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.956733524799347\n             ,-0.225288674235344,0.18413570523262,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.95017421245575\n             ,-0.209271758794785,0.231028690934181,-0.903163015842438,0.185778304934502,0.387017965316772,-0.933361113071442\n             ,-0.067049466073513,0.35262069106102,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.571020781993866\n             ,-0.291943371295929,0.767270684242249,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.653488278388977\n             ,-0.259704351425171,0.710989952087402,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.157021999359131\n             ,0.633807837963104,-0.757384777069092,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.773173451423645\n             ,0.234929323196411,-0.589076459407806,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.963089942932129\n             ,0.0112352445721626,0.268945276737213,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.773173451423645\n             ,0.234929323196411,-0.589076459407806,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.974529683589935\n             ,-0.218805104494095,0.0491550303995609,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.773173451423645\n             ,0.234929323196411,-0.589076459407806,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.142514750361443\n             ,0.172804057598114,-0.974591374397278,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.773173451423645\n             ,0.234929323196411,-0.589076459407806,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.974529683589935\n             ,-0.218805104494095,0.0491550303995609,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.687806069850922\n             ,-0.158765524625778,-0.708319365978241,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.908852636814117\n             ,0.0105791445821524,-0.416983097791672,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.687806069850922\n             ,-0.158765524625778,-0.708319365978241,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.142514750361443\n             ,0.172804057598114,-0.974591374397278,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.687806069850922\n             ,-0.158765524625778,-0.708319365978241,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.939631521701813\n             ,0.153399094939232,0.305877894163132,-0.926795780658722,0.133818626403809,0.3509162068367,-0.97424703836441,0.120223365724087\n             ,0.190758988261223,-0.979892313480377,0.170224979519844,0.104088805615902,-0.989431083202362,0.138839796185493\n             ,-0.0418281517922878,-0.979892313480377,0.170224979519844,0.104088805615902,-0.97424703836441,0.120223365724087\n             ,0.190758988261223,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.978295981884003,0.0417908765375614\n             ,0.202954426407814,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.97424703836441,0.120223365724087\n             ,0.190758988261223,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.959095060825348,0.0579339526593685\n             ,0.277092695236206,-0.97424703836441,0.120223365724087,0.190758988261223,-0.926795780658722,0.133818626403809\n             ,0.3509162068367,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.665728688240051,-0.201705411076546\n             ,0.718415081501007,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.813457071781158,-0.0988521501421928\n             ,0.573162972927094,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.905668199062347,0.0821359232068062\n             ,0.415955275297165,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.813457071781158,-0.0988521501421928\n             ,0.573162972927094,-0.926191806793213,0.116400174796581,0.35863596200943,-0.655879259109497,-0.0266539473086596\n             ,0.754395127296448,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.576066911220551,-0.146876826882362\n             ,0.804098308086395,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.655879259109497,-0.0266539473086596\n             ,0.754395127296448,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.447912156581879,-0.140877023339272\n             ,0.882909059524536,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.563221275806427,-0.79902458190918\n             ,-0.210574418306351,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.680589377880096,-0.727077186107636\n             ,0.0903155356645584,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.905433773994446,-0.0582202337682247\n             ,0.420476019382477,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.948079526424408,-0.0349823534488678\n             ,0.316103518009186,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.706978023052216,-0.108872137963772\n             ,0.698805391788483,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.838247179985046,-0.0138563737273216\n             ,0.54511433839798,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.827720582485199,-0.146306499838829\n             ,0.541731595993042,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.788007020950317,-0.198835611343384\n             ,0.582674324512482,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.905333578586578,0.0703608244657516\n             ,0.418832272291183,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.888188779354095,-0.0342079848051071\n             ,0.45820364356041,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.980100452899933,0.0712500065565109\n             ,0.185274243354797,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.998881995677948,0.0170586127787828\n             ,0.0440875962376595,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.571020781993866,-0.291943371295929\n             ,0.767270684242249,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.640290141105652,-0.147163778543472\n             ,0.753904044628143,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.55826473236084,-0.110289022326469\n             ,0.822299718856812,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.656185150146484,-0.0951608046889305\n             ,0.748575627803802,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.55826473236084,-0.110289022326469\n             ,0.822299718856812,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.640060782432556,0.00115585804451257\n             ,0.768323421478271,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.905678987503052,-0.296837091445923\n             ,-0.302709937095642,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.968295395374298,-0.216806933283806\n             ,-0.124091781675816,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.961785852909088,-0.0866831690073013\n             ,-0.259719133377075,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.968295395374298,-0.216806933283806\n             ,-0.124091781675816,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.978283286094666,-0.0603795535862446\n             ,0.198282822966576,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.968295395374298,-0.216806933283806\n             ,-0.124091781675816,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.890801727771759,-0.452551037073135\n             ,-0.0408632569015026,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.968295395374298,-0.216806933283806\n             ,-0.124091781675816,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.0374716036021709,0.192808955907822\n             ,0.98052054643631,0.205764874815941,0.144822359085083,0.967826068401337,0.0744598954916,0.293609887361526,0.953020930290222\n             ,0.139874473214149,0.332423865795136,0.932700097560883,-0.0374716036021709,0.192808955907822,0.98052054643631\n             ,-0.069260835647583,0.0269219465553761,0.997235238552094,0.244968578219414,-0.0767860040068626,0.966485559940338\n             ,0.205764874815941,0.144822359085083,0.967826068401337,-0.876246690750122,-0.00972981471568346,-0.481764525175095\n             ,-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.908703505992889,-0.107983402907848,-0.403233885765076\n             ,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.995428025722504,-0.0233537666499615,-0.0926159843802452\n             ,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.906999528408051,-0.118946090340614,-0.403984785079956\n             ,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.0528050363063812,-0.813004612922668,0.579857885837555\n             ,-0.0787478685379028,-0.96028345823288,-0.26768359541893,-0.217122808098793,-0.945177376270294,-0.243920937180519\n             ,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.941334009170532,-0.241035461425781,0.236203595995903\n             ,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.910947680473328,-0.114077113568783,0.396435052156448\n             ,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.852678954601288,-0.302188754081726,0.426169604063034\n             ,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.910947680473328,-0.114077113568783,0.396435052156448\n             ,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.814229547977448,-0.268942922353745,0.514490008354187\n             ,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.813457071781158,-0.0988521501421928,0.573162972927094\n             ,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.813457071781158,-0.0988521501421928,0.573162972927094\n             ,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.958112895488739,-0.0412571057677269,0.28340345621109\n             ,-0.926191806793213,0.116400174796581,0.35863596200943,-0.335694938898087,-0.0845088064670563,0.938172280788422\n             ,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.256247758865356,0.183180019259453,0.94909542798996\n             ,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.438927531242371,-0.110836811363697,0.891660153865814\n             ,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.42945921421051,0.0406228676438332,0.902172148227692\n             ,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.985882997512817,0.0816566720604897,0.146174341440201\n             ,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.996842920780182,-0.019830010831356,0.0768825337290764\n             ,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.946490168571472,0.0598345808684826,0.317137449979782\n             ,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.985882997512817,0.0816566720604897,0.146174341440201\n             ,-0.910772800445557,0.214318007230759,0.352931588888168,-0.3644839823246,-0.202188208699226,0.908994674682617\n             ,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.00449910387396812,-0.161412835121155,0.986876726150513\n             ,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.313990563154221,-0.19352200627327,0.929494023323059\n             ,-0.00140566960908473,-0.234566405415535,0.97209906578064,-0.00386956869624555,-0.264760941267014,0.964306354522705\n             ,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.99614292383194,-0.0721546709537506,-0.0499294139444828\n             ,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.985641956329346,-0.0124337384477258,-0.168390318751335\n             ,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.978283286094666,-0.0603795535862446,0.198282822966576\n             ,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.999477684497833,-0.0109285833314061,0.0304120387881994\n             ,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.394418269395828,-0.115748293697834,0.911612093448639\n             ,0.00449910387396812,-0.161412835121155,0.986876726150513,0.0111285699531436,-0.0777815505862236,0.9969083070755\n             ,-0.397862493991852,-0.0639909207820892,0.915210664272308,-0.917095720767975,0.0718847438693047,0.392132639884949\n             ,-0.905546963214874,-0.0230849031358957,0.423617511987686,-0.985770165920258,0.0388064943253994,0.163558095693588\n             ,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.989431083202362,0.138839796185493,-0.0418281517922878\n             ,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.985770165920258,0.0388064943253994,0.163558095693588\n             ,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.979986965656281,-0.191784739494324,0.0533309541642666\n             ,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.905546963214874,-0.0230849031358957,0.423617511987686\n             ,0.409033417701721,0.056328222155571,-0.910779237747192,0.555061399936676,0.0270265471190214,-0.831370174884796\n             ,0.590149700641632,0.106324933469296,-0.800261437892914,0.426036864519119,0.191680565476418,-0.884166955947876\n             ,0.52705591917038,-0.123320385813713,-0.840835392475128,0.555061399936676,0.0270265471190214,-0.831370174884796\n             ,0.409033417701721,0.056328222155571,-0.910779237747192,0.482761442661285,-0.152583673596382,-0.862357020378113\n             ,-0.903163015842438,0.185778304934502,0.387017965316772,-0.864785015583038,0.227262705564499,0.447770565748215\n             ,-0.907959640026093,0.246083408594131,0.339193552732468,-0.945830225944519,0.0969298705458641,0.309854567050934\n             ,-0.978964686393738,0.106371738016605,0.174106821417809,-0.945830225944519,0.0969298705458641,0.309854567050934\n             ,-0.907959640026093,0.246083408594131,0.339193552732468,-0.93869537115097,0.246357470750809,0.241161808371544\n             ,-0.927535772323608,0.260400146245956,0.26808425784111,-0.93869537115097,0.246357470750809,0.241161808371544\n             ,-0.907959640026093,0.246083408594131,0.339193552732468,-0.898379147052765,0.257861793041229,0.355558961629868\n             ,-0.873595476150513,0.228950142860413,0.429433107376099,-0.898379147052765,0.257861793041229,0.355558961629868\n             ,-0.907959640026093,0.246083408594131,0.339193552732468,-0.864785015583038,0.227262705564499,0.447770565748215\n             ,-0.912839949131012,0.366738528013229,0.179516360163689,-0.951293051242828,0.220237165689468,0.215724766254425\n             ,-0.938549876213074,0.168846443295479,0.301023334264755,-0.917084217071533,0.247074887156487,0.312906622886658\n             ,-0.922440767288208,0.315537393093109,0.222573891282082,-0.930616736412048,0.324010014533997,0.170205876231194\n             ,-0.920456767082214,0.196246728301048,0.338003754615784,-0.90205317735672,0.348495870828629,0.25465789437294\n             ,-0.913878262042999,0.245342120528221,0.323471456766129,-0.933935105800629,0.157070308923721,0.321082711219788\n             ,-0.92311555147171,0.291509866714478,0.250758200883865,-0.917084217071533,0.247074887156487,0.312906622886658\n             ,-0.913878262042999,0.245342120528221,0.323471456766129,-0.90205317735672,0.348495870828629,0.25465789437294\n             ,-0.899272859096527,0.337114810943604,0.278679043054581,-0.92311555147171,0.291509866714478,0.250758200883865\n             ,-0.935693740844727,0.265559196472168,0.232283264398575,-0.90205317735672,0.348495870828629,0.25465789437294\n             ,-0.90205317735672,0.348495870828629,0.25465789437294,-0.935693740844727,0.265559196472168,0.232283264398575\n             ,-0.927535772323608,0.260400146245956,0.26808425784111,-0.899272859096527,0.337114810943604,0.278679043054581\n             ,-0.913328051567078,0.257958859205246,0.315101653337479,-0.922440767288208,0.315537393093109,0.222573891282082\n             ,-0.917084217071533,0.247074887156487,0.312906622886658,-0.899272859096527,0.337114810943604,0.278679043054581\n             ,-0.927467882633209,0.10914921015501,0.357616752386093,-0.951293051242828,0.220237165689468,0.215724766254425\n             ,-0.922440767288208,0.315537393093109,0.222573891282082,-0.913328051567078,0.257958859205246,0.315101653337479\n             ,0.636519849300385,0.647450149059296,-0.419107168912888,0.904918491840363,0.223670721054077,-0.362068980932236\n             ,0.611642181873322,0.428768634796143,-0.664869368076324,0.904918491840363,0.223670721054077,-0.362068980932236\n             ,0.699705183506012,0.427644014358521,-0.572305202484131,0.622634530067444,0.273028820753098,-0.733335912227631\n             ,0.611642181873322,0.428768634796143,-0.664869368076324,-0.111326843500137,-0.985514283180237,0.127937391400337\n             ,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.669449508190155,-0.697340130805969,0.256035417318344\n             ,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.111326843500137,-0.985514283180237,0.127937391400337\n             ,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.298621833324432,-0.860875487327576,0.411968946456909\n             ,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.837247967720032,-0.308187961578369,0.451703399419785\n             ,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.669449508190155,-0.697340130805969,0.256035417318344\n             ,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.523851454257965,-0.504004776477814,0.686701416969299\n             ,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.536415159702301,-0.78416246175766,0.312006503343582\n             ,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.64180713891983,-0.25287389755249,0.723973989486694\n             ,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.933533489704132,-0.188960582017899,-0.304645866155624\n             ,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.855788469314575,-0.355743646621704,-0.375596284866333\n             ,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.908703505992889,-0.107983402907848,-0.403233885765076\n             ,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.933533489704132,-0.188960582017899,-0.304645866155624\n             ,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.899797379970551,-0.265796363353729,-0.346001297235489\n             ,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.855788469314575,-0.355743646621704,-0.375596284866333\n             ,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.843913793563843,-0.430510014295578,-0.320110350847244\n             ,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.947893738746643,-0.165305480360985,0.272344529628754\n             ,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.947893738746643,-0.165305480360985,0.272344529628754\n             ,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.906999528408051,-0.118946090340614,-0.403984785079956\n             ,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.906999528408051,-0.118946090340614,-0.403984785079956\n             ,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.88613361120224,-0.217736631631851,-0.40909406542778\n             ,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.493933469057083,-0.226954907178879,0.839357614517212\n             ,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.764369487762451,-0.100322350859642,0.636926054954529\n             ,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.764369487762451,-0.100322350859642,0.636926054954529\n             ,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.233382239937782,0.37978932261467,0.8951495885849\n             ,0.00488457176834345,0.505567967891693,0.862772941589355,-0.233382239937782,0.37978932261467,0.8951495885849\n             ,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.559565424919128,0.213157281279564,0.80090606212616\n             ,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.493933469057083,-0.226954907178879,0.839357614517212\n             ,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.559565424919128,0.213157281279564,0.80090606212616\n             ,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.367316663265228,0.168655470013618,-0.914676904678345\n             ,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.673958420753479,0.316827058792114,-0.66738349199295\n             ,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.908852636814117,0.0105791445821524,-0.416983097791672\n             ,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.673958420753479,0.316827058792114,-0.66738349199295\n             ,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.234179049730301,-0.104612432420254,-0.966548681259155\n             ,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.367316663265228,0.168655470013618,-0.914676904678345\n             ,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.908852636814117,0.0105791445821524,-0.416983097791672\n             ,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.943636775016785,-0.199052885174751,0.264438152313232\n             ,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.91798335313797,-0.00180715974420309,-0.396614909172058\n             ,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.926066279411316,-0.206412896513939,0.315903395414352\n             ,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.91798335313797,-0.00180715974420309,-0.396614909172058\n             ,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.766225039958954,-0.486649185419083,0.419609010219574\n             ,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.847999572753906,0.148594439029694,0.50874000787735\n             ,-0.933067381381989,0.178451672196388,0.312314331531525,-0.789937257766724,-0.089169554412365,0.606669545173645\n             ,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.783477485179901,-0.59309047460556,0.185490429401398\n             ,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.838507175445557,0.0982540920376778,0.535958766937256\n             ,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.789937257766724,-0.089169554412365,0.606669545173645\n             ,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.991512477397919,-0.0911088734865189,0.09274772554636\n             ,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.767987847328186,-0.497150540351868,0.403777122497559\n             ,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.831832468509674,-0.413072049617767,0.370710402727127\n             ,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.767987847328186,-0.497150540351868,0.403777122497559\n             ,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.789167404174805,-0.177452862262726,0.587984025478363\n             ,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.767987847328186,-0.497150540351868,0.403777122497559\n             ,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.851623713970184,0.0635921731591225,0.520281732082367\n             ,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.908852636814117,0.0105791445821524,-0.416983097791672\n             ,-0.812781035900116,0.145446926355362,0.564120769500732,-0.812781035900116,0.145446926355362,0.564120769500732\n             ,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.869927883148193,0.417829841375351,0.261999487876892\n             ,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.851623713970184,0.0635921731591225,0.520281732082367\n             ,-0.812781035900116,0.145446926355362,0.564120769500732,-0.741121232509613,0.0951398462057114,0.664595901966095\n             ,-0.725173890590668,0.124969810247421,0.677130281925201,-0.741121232509613,0.0951398462057114,0.664595901966095\n             ,-0.812781035900116,0.145446926355362,0.564120769500732,-0.737713038921356,0.159859821200371,0.655914902687073\n             ,-0.686445116996765,0.270512044429779,0.674993574619293,-0.737713038921356,0.159859821200371,0.655914902687073\n             ,-0.812781035900116,0.145446926355362,0.564120769500732,-0.869927883148193,0.417829841375351,0.261999487876892\n             ,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.794985055923462,-0.313673406839371,-0.519237637519836\n             ,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.00275634881108999,-0.768494009971619,-0.639851033687592\n             ,0.675393164157867,-0.663666367530823,-0.321544677019119,-0.00275634881108999,-0.768494009971619,-0.639851033687592\n             ,-0.189235538244247,-0.947714388370514,-0.256957918405533,0.163463488221169,-0.986320674419403,-0.0212411060929298\n             ,-0.531938970088959,-0.742404460906982,0.407279402017593,0.163463488221169,-0.986320674419403,-0.0212411060929298\n             ,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.63937246799469,-0.666334867477417,0.383667439222336\n             ,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.63937246799469,-0.666334867477417,0.383667439222336\n             ,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.794985055923462,-0.313673406839371,-0.519237637519836\n             ,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.63937246799469,-0.666334867477417,0.383667439222336\n             ,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.789937257766724,-0.089169554412365,0.606669545173645\n             ,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.741121232509613,0.0951398462057114,0.664595901966095\n             ,-0.725173890590668,0.124969810247421,0.677130281925201,-0.755824446678162,0.0775531530380249,0.650165319442749\n             ,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.741121232509613,0.0951398462057114,0.664595901966095\n             ,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.905546963214874,-0.0230849031358957,0.423617511987686\n             ,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.905546963214874,-0.0230849031358957,0.423617511987686\n             ,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.63937246799469,-0.666334867477417,0.383667439222336\n             ,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.233382239937782,0.37978932261467,0.8951495885849\n             ,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.616599321365356,0.328253507614136,0.715580105781555\n             ,-0.570039451122284,0.607050001621246,0.553665339946747,-0.616599321365356,0.328253507614136,0.715580105781555\n             ,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.0140273822471499,0.873466432094574,0.486682236194611\n             ,0.545511066913605,0.803328096866608,0.238917589187622,-0.0140273822471499,0.873466432094574,0.486682236194611\n             ,-0.0990706533193588,0.626940011978149,0.772742688655853,0.0937898680567741,0.660230219364166,0.745184183120728\n             ,0.517754137516022,0.73391991853714,0.439650118350983,0.0937898680567741,0.660230219364166,0.745184183120728\n             ,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.233382239937782,0.37978932261467,0.8951495885849\n             ,0.00488457176834345,0.505567967891693,0.862772941589355,-0.00293335225433111,0.995907425880432,0.0903318226337433\n             ,-0.58504182100296,0.777154207229614,0.23185633122921,-0.570039451122284,0.607050001621246,0.553665339946747\n             ,-0.0140273822471499,0.873466432094574,0.486682236194611,-0.00293335225433111,0.995907425880432,0.0903318226337433\n             ,-0.0140273822471499,0.873466432094574,0.486682236194611,0.545511066913605,0.803328096866608,0.238917589187622\n             ,0.61859929561615,0.783204674720764,-0.0626528933644295,0.622634530067444,0.273028820753098,-0.733335912227631\n             ,0.0131716737523675,0.392405301332474,-0.919698059558868,0.0255556665360928,0.675508499145508,-0.736909151077271\n             ,0.611642181873322,0.428768634796143,-0.664869368076324,0.636519849300385,0.647450149059296,-0.419107168912888\n             ,0.611642181873322,0.428768634796143,-0.664869368076324,0.0255556665360928,0.675508499145508,-0.736909151077271\n             ,0.00320792081765831,0.937661468982697,-0.347535103559494,-0.664545059204102,0.734579563140869,-0.137013539671898\n             ,0.00320792081765831,0.937661468982697,-0.347535103559494,0.0255556665360928,0.675508499145508,-0.736909151077271\n             ,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.730222046375275,0.28398671746254,-0.621391415596008\n             ,-0.714973926544189,0.530257403850555,-0.455674588680267,0.0255556665360928,0.675508499145508,-0.736909151077271\n             ,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.754495441913605,-0.0462081357836723,-0.654676616191864\n             ,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.0128433015197515,0.17829929292202,-0.983892500400543\n             ,-0.0574504472315311,0.0463431552052498,-0.997272133827209,0.590149700641632,0.106324933469296,-0.800261437892914\n             ,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.0128433015197515,0.17829929292202,-0.983892500400543\n             ,0.618943631649017,0.169027715921402,-0.767032206058502,0.622634530067444,0.273028820753098,-0.733335912227631\n             ,0.618943631649017,0.169027715921402,-0.767032206058502,-0.0128433015197515,0.17829929292202,-0.983892500400543\n             ,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.730222046375275,0.28398671746254,-0.621391415596008\n             ,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.0128433015197515,0.17829929292202,-0.983892500400543\n             ,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.875853359699249,-0.451781928539276,-0.169629007577896\n             ,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.258316278457642,-0.4798983335495,-0.83843320608139\n             ,-0.236963242292404,-0.687786102294922,-0.686147749423981,0.614885807037354,-0.39096936583519,-0.684878408908844\n             ,-0.236963242292404,-0.687786102294922,-0.686147749423981,-0.258316278457642,-0.4798983335495,-0.83843320608139\n             ,0.5450439453125,-0.288073390722275,-0.787363231182098,0.52705591917038,-0.123320385813713,-0.840835392475128\n             ,0.5450439453125,-0.288073390722275,-0.787363231182098,-0.258316278457642,-0.4798983335495,-0.83843320608139\n             ,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.808649599552155,-0.254309177398682,-0.530483365058899\n             ,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.258316278457642,-0.4798983335495,-0.83843320608139\n             ,-0.849323332309723,-0.375679105520248,-0.37083026766777,0.5450439453125,-0.288073390722275,-0.787363231182098\n             ,0.52705591917038,-0.123320385813713,-0.840835392475128,0.482761442661285,-0.152583673596382,-0.862357020378113\n             ,0.725502192974091,-0.203444570302963,-0.657462477684021,0.614885807037354,-0.39096936583519,-0.684878408908844\n             ,0.5450439453125,-0.288073390722275,-0.787363231182098,0.725502192974091,-0.203444570302963,-0.657462477684021\n             ,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.093654952943325,-0.971795976161957,-0.216428592801094\n             ,0.652852118015289,-0.584342896938324,-0.482003599405289,0.675393164157867,-0.663666367530823,-0.321544677019119\n             ,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.783477485179901,-0.59309047460556,0.185490429401398\n             ,-0.093654952943325,-0.971795976161957,-0.216428592801094,0.163463488221169,-0.986320674419403,-0.0212411060929298\n             ,-0.367999702692032,-0.664126336574554,-0.650778293609619,0.675393164157867,-0.663666367530823,-0.321544677019119\n             ,0.652852118015289,-0.584342896938324,-0.482003599405289,0.496177941560745,-0.590101897716522,-0.636857271194458\n             ,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.943170547485352,-0.286243259906769,0.168802037835121\n             ,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.764369487762451,-0.100322350859642,0.636926054954529\n             ,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.764369487762451,-0.100322350859642,0.636926054954529\n             ,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.978256165981293,-0.198640391230583,0.0596392676234245\n             ,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.978256165981293,-0.198640391230583,0.0596392676234245\n             ,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.824822843074799,-0.272803068161011,-0.495222896337509\n             ,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.824822843074799,-0.272803068161011,-0.495222896337509\n             ,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.943170547485352,-0.286243259906769,0.168802037835121\n             ,-0.570039451122284,0.607050001621246,0.553665339946747,-0.921134054660797,-0.0515539050102234,0.385816305875778\n             ,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.616599321365356,0.328253507614136,0.715580105781555\n             ,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.616599321365356,0.328253507614136,0.715580105781555\n             ,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.943170547485352,-0.286243259906769,0.168802037835121\n             ,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.943170547485352,-0.286243259906769,0.168802037835121\n             ,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.695510506629944,-0.654881238937378,-0.295627743005753\n             ,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.695510506629944,-0.654881238937378,-0.295627743005753\n             ,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.921134054660797,-0.0515539050102234,0.385816305875778\n             ,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.627654612064362,-0.419570088386536,0.655751943588257\n             ,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.51134991645813,-0.634139060974121,0.579990446567535\n             ,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.51134991645813,-0.634139060974121,0.579990446567535\n             ,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.803909718990326,-0.356574565172195,0.476008087396622\n             ,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.803909718990326,-0.356574565172195,0.476008087396622\n             ,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.493933469057083,-0.226954907178879,0.839357614517212\n             ,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.493933469057083,-0.226954907178879,0.839357614517212\n             ,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.627654612064362,-0.419570088386536,0.655751943588257\n             ,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.978256165981293,-0.198640391230583,0.0596392676234245\n             ,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.803909718990326,-0.356574565172195,0.476008087396622\n             ,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.803909718990326,-0.356574565172195,0.476008087396622\n             ,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.982640624046326,-0.149156004190445,0.110317416489124\n             ,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.982640624046326,-0.149156004190445,0.110317416489124\n             ,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.917778551578522,0.114838451147079,-0.380124539136887\n             ,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.917778551578522,0.114838451147079,-0.380124539136887\n             ,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.978256165981293,-0.198640391230583,0.0596392676234245\n             ,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.693302690982819,-0.558895230293274,0.454936742782593\n             ,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.464571386575699,-0.763281106948853,0.448971480131149\n             ,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.693302690982819,-0.558895230293274,0.454936742782593\n             ,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.61400443315506,-0.715833127498627,0.332537919282913\n             ,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.464571386575699,-0.763281106948853,0.448971480131149\n             ,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.61400443315506,-0.715833127498627,0.332537919282913\n             ,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.848238348960876,-0.444671392440796,0.287678778171539\n             ,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.848238348960876,-0.444671392440796,0.287678778171539\n             ,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.51134991645813,-0.634139060974121,0.579990446567535\n             ,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.51134991645813,-0.634139060974121,0.579990446567535\n             ,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.464571386575699,-0.763281106948853,0.448971480131149\n             ,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.848238348960876,-0.444671392440796,0.287678778171539\n             ,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.984983623027802,-0.0637645348906517,0.160440966486931\n             ,-0.796527564525604,0.591128647327423,0.126928299665451,-0.984983623027802,-0.0637645348906517,0.160440966486931\n             ,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.87463504076004,0.473409682512283,-0.104387812316418\n             ,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.87463504076004,0.473409682512283,-0.104387812316418\n             ,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.982640624046326,-0.149156004190445,0.110317416489124\n             ,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.982640624046326,-0.149156004190445,0.110317416489124\n             ,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.848238348960876,-0.444671392440796,0.287678778171539\n             ,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.735289394855499,-0.208703994750977,0.644819438457489\n             ,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.919459879398346,-0.367317616939545,0.14025442302227\n             ,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.919459879398346,-0.367317616939545,0.14025442302227\n             ,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.704632818698883,0.278547644615173,-0.652613043785095\n             ,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.735289394855499,-0.208703994750977,0.644819438457489\n             ,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.631199538707733,-0.586718201637268,0.507295668125153\n             ,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.984983623027802,-0.0637645348906517,0.160440966486931\n             ,-0.796527564525604,0.591128647327423,0.126928299665451,-0.847999572753906,0.148594439029694,0.50874000787735\n             ,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.984983623027802,-0.0637645348906517,0.160440966486931\n             ,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.916797280311584,-0.182094678282738,0.355421304702759\n             ,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.951689600944519,0.131448090076447,0.277503579854965\n             ,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.367316663265228,0.168655470013618,-0.914676904678345\n             ,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.673958420753479,0.316827058792114,-0.66738349199295\n             ,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.951689600944519,0.131448090076447,0.277503579854965\n             ,-0.827955782413483,0.533315181732178,0.173390194773674,-0.501976847648621,0.497314512729645,0.707599818706512\n             ,-0.827955782413483,0.533315181732178,0.173390194773674,-0.951689600944519,0.131448090076447,0.277503579854965\n             ,-0.664353311061859,0.186838954687119,0.723689079284668,-0.735289394855499,-0.208703994750977,0.644819438457489\n             ,-0.664353311061859,0.186838954687119,0.723689079284668,-0.951689600944519,0.131448090076447,0.277503579854965\n             ,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.908852636814117,0.0105791445821524,-0.416983097791672\n             ,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.738919854164124,0.67080682516098,0.0633690059185028\n             ,-0.869927883148193,0.417829841375351,0.261999487876892,-0.686445116996765,0.270512044429779,0.674993574619293\n             ,-0.869927883148193,0.417829841375351,0.261999487876892,-0.738919854164124,0.67080682516098,0.0633690059185028\n             ,-0.492774546146393,0.528099179267883,0.691581189632416,-0.501976847648621,0.497314512729645,0.707599818706512\n             ,-0.492774546146393,0.528099179267883,0.691581189632416,-0.738919854164124,0.67080682516098,0.0633690059185028\n             ,-0.827955782413483,0.533315181732178,0.173390194773674,-0.673958420753479,0.316827058792114,-0.66738349199295\n             ,-0.827955782413483,0.533315181732178,0.173390194773674,-0.738919854164124,0.67080682516098,0.0633690059185028\n             ,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.683650732040405,-0.221590802073479,0.695355415344238\n             ,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.992319107055664,-0.0605176463723183,0.10789081454277\n             ,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.712439298629761,-0.0633224174380302,0.698870837688446\n             ,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.992319107055664,-0.0605176463723183,0.10789081454277\n             ,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.754495441913605,-0.0462081357836723,-0.654676616191864\n             ,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.992319107055664,-0.0605176463723183,0.10789081454277\n             ,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.730222046375275,0.28398671746254,-0.621391415596008\n             ,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.992319107055664,-0.0605176463723183,0.10789081454277\n             ,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.75563508272171,-0.5704665184021,0.321844130754471\n             ,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.982984185218811,-0.0105124665424228,0.18338917195797\n             ,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.683650732040405,-0.221590802073479,0.695355415344238\n             ,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.982984185218811,-0.0105124665424228,0.18338917195797\n             ,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.730222046375275,0.28398671746254,-0.621391415596008\n             ,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.982984185218811,-0.0105124665424228,0.18338917195797\n             ,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.664545059204102,0.734579563140869,-0.137013539671898\n             ,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.982984185218811,-0.0105124665424228,0.18338917195797\n             ,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.708874583244324,-0.389509916305542,0.588029623031616\n             ,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.904232740402222,-0.100814543664455,0.414969354867935\n             ,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.708874583244324,-0.389509916305542,0.588029623031616\n             ,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.910853445529938,-0.30947008728981,0.273082852363586\n             ,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.926703691482544,-0.0945243984460831,0.363710582256317\n             ,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.712439298629761,-0.0633224174380302,0.698870837688446\n             ,-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.904232740402222,-0.100814543664455,0.414969354867935\n             ,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.685857892036438,-0.122487917542458,0.717353284358978\n             ,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.946361243724823,0.305759787559509,-0.104457549750805\n             ,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.858525216579437,0.180895999073982,0.479803144931793\n             ,-0.924713611602783,0.349783033132553,0.150188326835632,-0.943636775016785,-0.199052885174751,0.264438152313232\n             ,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.946361243724823,0.305759787559509,-0.104457549750805\n             ,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.946361243724823,0.305759787559509,-0.104457549750805\n             ,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.904232740402222,-0.100814543664455,0.414969354867935\n             ,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.910853445529938,-0.30947008728981,0.273082852363586\n             ,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.946361243724823,0.305759787559509,-0.104457549750805\n             ,-0.924713611602783,0.349783033132553,0.150188326835632,-0.86247330904007,-0.0210732948035002,0.505663633346558\n             ,-0.526414215564728,0.148685231804848,0.837126493453979,-0.534013271331787,-0.0607958026230335,0.843287467956543\n             ,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.926066279411316,-0.206412896513939,0.315903395414352\n             ,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.534013271331787,-0.0607958026230335,0.843287467956543\n             ,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.858525216579437,0.180895999073982,0.479803144931793\n             ,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.74452930688858,-0.0343341082334518,0.666706323623657\n             ,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.701859831809998,-0.0527861975133419,0.710356533527374\n             ,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.526414215564728,0.148685231804848,0.837126493453979\n             ,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.701859831809998,-0.0527861975133419,0.710356533527374\n             ,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.517660737037659,-0.138916581869125,0.844233095645905\n             ,-0.847999572753906,0.148594439029694,0.50874000787735,-0.656521320343018,-0.0877665653824806,0.74918407201767\n             ,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.927756071090698,-0.0379538796842098,0.371252179145813\n             ,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.927756071090698,-0.0379538796842098,0.371252179145813\n             ,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.723646342754364,0.0320940800011158,0.689424395561218\n             ,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.658224046230316,-0.61687958240509,0.431509733200073\n             ,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.943636775016785,-0.199052885174751,0.264438152313232\n             ,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.618174970149994,-0.523447036743164,0.586398243904114\n             ,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.766225039958954,-0.486649185419083,0.419609010219574\n             ,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.942062139511108,-0.21296301484108,0.259163379669189\n             ,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.855356216430664,-0.409418344497681,0.317399442195892\n             ,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.933067381381989,0.178451672196388,0.312314331531525\n             ,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.990018784999847,0.103214055299759,-0.095966711640358\n             ,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.990018784999847,0.103214055299759,-0.095966711640358\n             ,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.933067381381989,0.178451672196388,0.312314331531525\n             ,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.766225039958954,-0.486649185419083,0.419609010219574\n             ,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.933067381381989,0.178451672196388,0.312314331531525\n             ,-0.796527564525604,0.591128647327423,0.126928299665451,-0.87463504076004,0.473409682512283,-0.104387812316418\n             ,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.87463504076004,0.473409682512283,-0.104387812316418\n             ,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.990018784999847,0.103214055299759,-0.095966711640358\n             ,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.990018784999847,0.103214055299759,-0.095966711640358\n             ,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.917778551578522,0.114838451147079,-0.380124539136887\n             ,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.917778551578522,0.114838451147079,-0.380124539136887\n             ,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.991512477397919,-0.0911088734865189,0.09274772554636\n             ,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.8672034740448,-0.366803020238876,0.336769551038742\n             ,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.965933620929718,0.0850775167346001,-0.244405627250671\n             ,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.965933620929718,0.0850775167346001,-0.244405627250671\n             ,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.950445771217346,-0.194348081946373,0.24265544116497\n             ,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.942062139511108,-0.21296301484108,0.259163379669189\n             ,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.824822843074799,-0.272803068161011,-0.495222896337509\n             ,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.931157529354095,-0.304730832576752,-0.200211733579636\n             ,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.824822843074799,-0.272803068161011,-0.495222896337509\n             ,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.991512477397919,-0.0911088734865189,0.09274772554636\n             ,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.695510506629944,-0.654881238937378,-0.295627743005753\n             ,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.821155369281769,-0.380202680826187,0.425616890192032\n             ,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.695510506629944,-0.654881238937378,-0.295627743005753\n             ,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.931157529354095,-0.304730832576752,-0.200211733579636\n             ,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.816001713275909,-0.500939309597015,0.288445889949799\n             ,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.707302629947662,-0.706726789474487,-0.0161320772022009\n             ,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.960481464862823,0.0760035738348961,0.267766177654266\n             ,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.75563508272171,-0.5704665184021,0.321844130754471\n             ,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.664545059204102,0.734579563140869,-0.137013539671898\n             ,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.960481464862823,0.0760035738348961,0.267766177654266\n             ,-0.58504182100296,0.777154207229614,0.23185633122921,-0.921134054660797,-0.0515539050102234,0.385816305875778\n             ,-0.570039451122284,0.607050001621246,0.553665339946747,-0.58504182100296,0.777154207229614,0.23185633122921\n             ,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.921134054660797,-0.0515539050102234,0.385816305875778\n             ,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.743763327598572,-0.65217137336731,0.14658996462822\n             ,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.875853359699249,-0.451781928539276,-0.169629007577896\n             ,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.939273297786713,-0.163695856928825,0.301611185073853\n             ,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.889755249023438,0.104038514196873,0.444422751665115\n             ,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.939273297786713,-0.163695856928825,0.301611185073853\n             ,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.838507175445557,0.0982540920376778,0.535958766937256\n             ,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.939273297786713,-0.163695856928825,0.301611185073853\n             ,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.783477485179901,-0.59309047460556,0.185490429401398\n             ,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.939273297786713,-0.163695856928825,0.301611185073853\n             ,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.889755249023438,0.104038514196873,0.444422751665115\n             ,-0.880822539329529,0.116122722625732,0.458984851837158,-0.981129169464111,-0.164403110742569,0.101770125329494\n             ,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.875853359699249,-0.451781928539276,-0.169629007577896\n             ,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.981129169464111,-0.164403110742569,0.101770125329494\n             ,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.808649599552155,-0.254309177398682,-0.530483365058899\n             ,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.981129169464111,-0.164403110742569,0.101770125329494\n             ,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.832877278327942,0.0686137080192566,0.549188137054443\n             ,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.981129169464111,-0.164403110742569,0.101770125329494\n             ,-0.880822539329529,0.116122722625732,0.458984851837158,-0.880822539329529,0.116122722625732,0.458984851837158\n             ,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.959409058094025,-0.0255993846803904,0.280854016542435\n             ,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.93205326795578,-0.0207287091761827,0.361727833747864\n             ,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.880822539329529,0.116122722625732,0.458984851837158\n             ,-0.889755249023438,0.104038514196873,0.444422751665115,-0.725173890590668,0.124969810247421,0.677130281925201\n             ,-0.737713038921356,0.159859821200371,0.655914902687073,-0.686445116996765,0.270512044429779,0.674993574619293\n             ,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.823492228984833,0.0713645666837692,0.56282114982605\n             ,-0.823492228984833,0.0713645666837692,0.56282114982605,-0.838507175445557,0.0982540920376778,0.535958766937256\n             ,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.725173890590668,0.124969810247421,0.677130281925201\n             ,-0.824534773826599,0.090426079928875,0.558538734912872,-0.991512477397919,-0.0911088734865189,0.09274772554636\n             ,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.931157529354095,-0.304730832576752,-0.200211733579636\n             ,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.824534773826599,0.090426079928875,0.558538734912872\n             ,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.749832689762115,-0.240478411316872,0.616377413272858\n             ,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.74452930688858,-0.0343341082334518,0.666706323623657\n             ,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.858525216579437,0.180895999073982,0.479803144931793\n             ,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.7187859416008,0.00215784600004554,0.695228099822998\n             ,-0.75360506772995,0.135660916566849,0.643176138401031,-0.821155369281769,-0.380202680826187,0.425616890192032\n             ,-0.75360506772995,0.135660916566849,0.643176138401031,-0.7187859416008,0.00215784600004554,0.695228099822998\n             ,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.789167404174805,-0.177452862262726,0.587984025478363\n             ,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.7187859416008,0.00215784600004554,0.695228099822998\n             ,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.86247330904007,-0.0210732948035002,0.505663633346558\n             ,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.974564790725708,-0.215875864028931,0.0601753368973732\n             ,-0.828934848308563,0.145112335681915,0.540193796157837,-0.788419961929321,0.211842447519302,0.577509045600891\n             ,-0.828934848308563,0.145112335681915,0.540193796157837,-0.974564790725708,-0.215875864028931,0.0601753368973732\n             ,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.93205326795578,-0.0207287091761827,0.361727833747864\n             ,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.974564790725708,-0.215875864028931,0.0601753368973732\n             ,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.959409058094025,-0.0255993846803904,0.280854016542435\n             ,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.974564790725708,-0.215875864028931,0.0601753368973732\n             ,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.93205326795578,-0.0207287091761827,0.361727833747864\n             ,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.890684902667999,-0.186281442642212,0.414704352617264\n             ,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.788419961929321,0.211842447519302,0.577509045600891\n             ,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.890684902667999,-0.186281442642212,0.414704352617264\n             ,-0.700570464134216,0.212181925773621,0.681307435035706,-0.890684902667999,-0.186281442642212,0.414704352617264\n             ,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.823492228984833,0.0713645666837692,0.56282114982605\n             ,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.789167404174805,-0.177452862262726,0.587984025478363\n             ,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.680772840976715,-0.570546209812164,0.459374964237213\n             ,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.831832468509674,-0.413072049617767,0.370710402727127\n             ,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.680772840976715,-0.570546209812164,0.459374964237213\n             ,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.658224046230316,-0.61687958240509,0.431509733200073\n             ,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.743188083171844,-0.353264600038528,0.568221390247345\n             ,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.680772840976715,-0.570546209812164,0.459374964237213\n             ,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.686445116996765,0.270512044429779,0.674993574619293\n             ,-0.492774546146393,0.528099179267883,0.691581189632416,-0.440651565790176,0.368113547563553,0.818729877471924\n             ,-0.596545398235321,0.216776832938194,0.772749245166779,-0.501976847648621,0.497314512729645,0.707599818706512\n             ,-0.438916772603989,0.289704263210297,0.850543081760406,-0.440651565790176,0.368113547563553,0.818729877471924\n             ,-0.492774546146393,0.528099179267883,0.691581189632416,-0.916797280311584,-0.182094678282738,0.355421304702759\n             ,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.683301508426666,0.245855435729027,0.687498509883881\n             ,-0.809978306293488,0.193161576986313,0.55373615026474,-0.916797280311584,-0.182094678282738,0.355421304702759\n             ,-0.809978306293488,0.193161576986313,0.55373615026474,-0.809293568134308,0.0818510949611664,0.581673681735992\n             ,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.631199538707733,-0.586718201637268,0.507295668125153\n             ,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.809293568134308,0.0818510949611664,0.581673681735992\n             ,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.86247330904007,-0.0210732948035002,0.505663633346558\n             ,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.922550320625305,-0.205608487129211,-0.326536417007446\n             ,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.926066279411316,-0.206412896513939,0.315903395414352\n             ,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.922550320625305,-0.205608487129211,-0.326536417007446\n             ,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.91798335313797,-0.00180715974420309,-0.396614909172058\n             ,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.946118652820587,-0.0995350033044815,0.308143347501755\n             ,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.946746110916138,0.159301742911339,-0.279812008142471\n             ,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.926703691482544,-0.0945243984460831,0.363710582256317\n             ,-0.91798335313797,-0.00180715974420309,-0.396614909172058,-0.957550466060638,-0.078297920525074,0.277428478002548\n             ,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.897575080394745,-0.134165227413177,-0.419950813055038\n             ,-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.922550320625305,-0.205608487129211,-0.326536417007446\n             ,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.959409058094025,-0.0255993846803904,0.280854016542435\n             ,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.957550466060638,-0.078297920525074,0.277428478002548\n             ,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.832877278327942,0.0686137080192566,0.549188137054443\n             ,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.946118652820587,-0.0995350033044815,0.308143347501755\n             ,-0.712439298629761,-0.0633224174380302,0.698870837688446,-0.767573416233063,-0.0105870105326176,0.640873551368713\n             ,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.754495441913605,-0.0462081357836723,-0.654676616191864\n             ,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.991874754428864,-0.114014439284801,0.0564371794462204\n             ,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.712439298629761,-0.0633224174380302,0.698870837688446\n             ,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.991874754428864,-0.114014439284801,0.0564371794462204\n             ,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.832877278327942,0.0686137080192566,0.549188137054443\n             ,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.991874754428864,-0.114014439284801,0.0564371794462204\n             ,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.808649599552155,-0.254309177398682,-0.530483365058899\n             ,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.991874754428864,-0.114014439284801,0.0564371794462204\n             ,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.808649599552155,-0.254309177398682,-0.530483365058899\n             ,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.120517827570438,-0.0717617943882942,-0.990113973617554\n             ,-0.203820779919624,-0.25819143652916,-0.944348573684692,0.52705591917038,-0.123320385813713,-0.840835392475128\n             ,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.120517827570438,-0.0717617943882942,-0.990113973617554\n             ,0.555061399936676,0.0270265471190214,-0.831370174884796,0.590149700641632,0.106324933469296,-0.800261437892914\n             ,0.555061399936676,0.0270265471190214,-0.831370174884796,-0.120517827570438,-0.0717617943882942,-0.990113973617554\n             ,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.754495441913605,-0.0462081357836723,-0.654676616191864\n             ,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.120517827570438,-0.0717617943882942,-0.990113973617554\n             ,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.93372631072998,0.331273853778839,-0.13569375872612\n             ,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.963089942932129,0.0112352445721626,0.268945276737213\n             ,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.157021999359131,0.633807837963104,-0.757384777069092\n             ,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.93372631072998,0.331273853778839,-0.13569375872612\n             ,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.704632818698883,0.278547644615173,-0.652613043785095\n             ,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.142514750361443,0.172804057598114,-0.974591374397278\n             ,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.704632818698883,0.278547644615173,-0.652613043785095\n             ,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.157021999359131,0.633807837963104,-0.757384777069092\n             ,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.919459879398346,-0.367317616939545,0.14025442302227\n             ,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.61547714471817,-0.64069652557373,0.45901620388031\n             ,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.933359444141388,0.180034801363945,-0.310527950525284\n             ,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.919459879398346,-0.367317616939545,0.14025442302227\n             ,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.841246128082275,0.241770818829536,0.483582258224487\n             ,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.816001713275909,-0.500939309597015,0.288445889949799\n             ,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.841246128082275,0.241770818829536,0.483582258224487\n             ,-0.75360506772995,0.135660916566849,0.643176138401031,-0.858525216579437,0.180895999073982,0.479803144931793\n             ,-0.75360506772995,0.135660916566849,0.643176138401031,-0.841246128082275,0.241770818829536,0.483582258224487\n             ,-0.924713611602783,0.349783033132553,0.150188326835632,-0.931157529354095,-0.304730832576752,-0.200211733579636\n             ,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.869901895523071,0.0250669438391924,0.492587447166443\n             ,-0.824534773826599,0.090426079928875,0.558538734912872,-0.824534773826599,0.090426079928875,0.558538734912872\n             ,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.77546626329422,0.00887077674269676,0.631326675415039\n             ,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.799961805343628,-0.159910082817078,0.578350961208344\n             ,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.77546626329422,0.00887077674269676,0.631326675415039\n             ,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.854056000709534,-0.505750417709351,-0.121675431728363\n             ,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.743188083171844,-0.353264600038528,0.568221390247345\n             ,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.934483289718628,0.0995288342237473,0.341811418533325\n             ,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.74452930688858,-0.0343341082334518,0.666706323623657\n             ,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.526414215564728,0.148685231804848,0.837126493453979\n             ,-0.535982131958008,0.386546611785889,0.750536382198334,-0.683301508426666,0.245855435729027,0.687498509883881\n             ,-0.683301508426666,0.245855435729027,0.687498509883881,-0.535982131958008,0.386546611785889,0.750536382198334\n             ,-0.588370680809021,0.464889794588089,0.661587059497833,-0.809978306293488,0.193161576986313,0.55373615026474\n             ,-0.788419961929321,0.211842447519302,0.577509045600891,-0.588370680809021,0.464889794588089,0.661587059497833\n             ,-0.535982131958008,0.386546611785889,0.750536382198334,-0.828934848308563,0.145112335681915,0.540193796157837\n             ,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.828934848308563,0.145112335681915,0.540193796157837\n             ,-0.535982131958008,0.386546611785889,0.750536382198334,-0.526414215564728,0.148685231804848,0.837126493453979\n             ,-0.440651565790176,0.368113547563553,0.818729877471924,-0.571967780590057,0.37627837061882,0.728880941867828\n             ,-0.700570464134216,0.212181925773621,0.681307435035706,-0.596545398235321,0.216776832938194,0.772749245166779\n             ,-0.788419961929321,0.211842447519302,0.577509045600891,-0.700570464134216,0.212181925773621,0.681307435035706\n             ,-0.571967780590057,0.37627837061882,0.728880941867828,-0.588370680809021,0.464889794588089,0.661587059497833\n             ,-0.809978306293488,0.193161576986313,0.55373615026474,-0.588370680809021,0.464889794588089,0.661587059497833\n             ,-0.571967780590057,0.37627837061882,0.728880941867828,-0.809293568134308,0.0818510949611664,0.581673681735992\n             ,-0.438916772603989,0.289704263210297,0.850543081760406,-0.649019360542297,-0.107299908995628,0.753167033195496\n             ,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.571967780590057,0.37627837061882,0.728880941867828\n             ,-0.440651565790176,0.368113547563553,0.818729877471924,-0.926066279411316,-0.206412896513939,0.315903395414352\n             ,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.545637309551239,-0.291577398777008,0.785660624504089\n             ,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.943636775016785,-0.199052885174751,0.264438152313232\n             ,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.545637309551239,-0.291577398777008,0.785660624504089\n             ,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.00275634881108999,-0.768494009971619,-0.639851033687592\n             ,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.83446329832077,-0.267112225294113,-0.481998056173325\n             ,-0.00275634881108999,-0.768494009971619,-0.639851033687592,0.675393164157867,-0.663666367530823,-0.321544677019119\n             ,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.958686172962189,-0.0430715903639793,0.281186193227768\n             ,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.960677444934845,-0.0662661194801331,0.269643515348434\n             ,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.61547714471817,-0.64069652557373,0.45901620388031\n             ,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.884575426578522,-0.272238790988922,0.378698289394379\n             ,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.671594560146332,-0.181319773197174,0.718389809131622\n             ,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.884575426578522,-0.272238790988922,0.378698289394379\n             ,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.884575426578522,-0.272238790988922,0.378698289394379\n             ,-0.899577915668488,-0.399587064981461,0.176322862505913,0.045425571501255,0.382962375879288,0.922646403312683\n             ,-0.125368878245354,0.424985140562058,0.896476626396179,-0.0915354415774345,0.261345416307449,0.960895359516144\n             ,0.0344220362603664,0.22930283844471,0.972746253013611,-0.933067381381989,0.178451672196388,0.312314331531525\n             ,-0.847999572753906,0.148594439029694,0.50874000787735,-0.796527564525604,0.591128647327423,0.126928299665451\n             ,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.656521320343018,-0.0877665653824806,0.74918407201767\n             ,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.545637309551239,-0.291577398777008,0.785660624504089\n             ,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.62365597486496,-0.228648245334625,0.747511327266693\n             ,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.618174970149994,-0.523447036743164,0.586398243904114\n             ,-0.847999572753906,0.148594439029694,0.50874000787735,-0.723476529121399,-0.368679702281952,0.583658277988434\n             ,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.656521320343018,-0.0877665653824806,0.74918407201767\n             ,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.61400443315506,-0.715833127498627,0.332537919282913\n             ,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.869600474834442,-0.362856715917587,0.334858238697052\n             ,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.868073582649231,-0.440582573413849,0.22876900434494\n             ,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.974529683589935,-0.218805104494095,0.0491550303995609\n             ,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.895342886447906,-0.199058875441551,0.398417770862579\n             ,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.963089942932129,0.0112352445721626,0.268945276737213\n             ,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.895342886447906,-0.199058875441551,0.398417770862579\n             ,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.859187364578247,-0.159860625863075,0.486046999692917\n             ,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.960677444934845,-0.0662661194801331,0.269643515348434\n             ,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.960677444934845,-0.0662661194801331,0.269643515348434\n             ,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.926139116287231,-0.258693248033524,0.274488925933838\n             ,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.993900120258331,-0.00187443883623928,0.110267803072929\n             ,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.968760967254639,-0.0961536914110184,0.228597268462181\n             ,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.851623713970184,0.0635921731591225,0.520281732082367\n             ,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.926139116287231,-0.258693248033524,0.274488925933838\n             ,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.93942403793335,-0.154625937342644,0.305897533893585\n             ,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.929889261722565,-0.324548780918121,0.173130333423615\n             ,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.908852636814117,0.0105791445821524,-0.416983097791672\n             ,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.935810804367065,-0.306237637996674,-0.174575582146645\n             ,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.926139116287231,-0.258693248033524,0.274488925933838\n             ,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.963089942932129,0.0112352445721626,0.268945276737213\n             ,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.927466154098511,-0.0275595653802156,0.372889995574951\n             ,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.910594463348389,-0.0996595025062561,0.401105612516403\n             ,0.401222288608551,-0.244348540902138,-0.882787883281708,0.392777740955353,-0.563973963260651,-0.726401448249817\n             ,0.645713806152344,-0.220039650797844,-0.731188178062439,0.5412717461586,-0.0628231391310692,-0.838497579097748\n             ,0.401222288608551,-0.244348540902138,-0.882787883281708,0.5412717461586,-0.0628231391310692,-0.838497579097748\n             ,0.387454837560654,-0.142215475440025,-0.910853147506714,0.323159694671631,-0.226072624325752,-0.918944478034973\n             ,0.401222288608551,-0.244348540902138,-0.882787883281708,0.323159694671631,-0.226072624325752,-0.918944478034973\n             ,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.07368503510952,-0.326217710971832,-0.942418456077576\n             ,0.401222288608551,-0.244348540902138,-0.882787883281708,0.07368503510952,-0.326217710971832,-0.942418456077576\n             ,-0.0193124283105135,-0.74210524559021,-0.670005083084106,0.392777740955353,-0.563973963260651,-0.726401448249817\n             ,-0.0362379811704159,-0.262005388736725,-0.964385807514191,-0.0370321683585644,-0.265117049217224,-0.96350485086441\n             ,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.0825362652540207,-0.192694559693336,-0.977781474590302\n             ,-0.070097453892231,-0.765305280685425,-0.639839172363281,-0.175090745091438,-0.752051889896393,-0.635422050952911\n             ,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.0370321683585644,-0.265117049217224,-0.96350485086441\n             ,0.576868414878845,0.0959631279110909,-0.811180531978607,0.699126958847046,-0.0890455171465874,-0.709431052207947\n             ,0.773029983043671,-0.340951681137085,-0.534954726696014,0.646651268005371,0.172121793031693,-0.743112564086914\n             ,0.576868414878845,0.0959631279110909,-0.811180531978607,0.646651268005371,0.172121793031693,-0.743112564086914\n             ,0.364371746778488,-0.284274369478226,-0.886803984642029,0.329197883605957,-0.229186490178108,-0.916025280952454\n             ,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.139740735292435,-0.294080168008804,-0.945510149002075\n             ,-0.0723719522356987,-0.219757899641991,-0.972866296768188,-0.0825362652540207,-0.192694559693336,-0.977781474590302\n             ,0.0849056839942932,-0.303190618753433,-0.949139893054962,-0.0723719522356987,-0.219757899641991,-0.972866296768188\n             ,-0.139740735292435,-0.294080168008804,-0.945510149002075,0.07368503510952,-0.326217710971832,-0.942418456077576\n             ,-0.0193124283105135,-0.74210524559021,-0.670005083084106,0.07368503510952,-0.326217710971832,-0.942418456077576\n             ,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.208596497774124,-0.74006187915802,-0.639371454715729\n             ,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.208596497774124,-0.74006187915802,-0.639371454715729\n             ,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.1309574842453,-0.264535874128342,-0.955442786216736\n             ,0.30904021859169,0.371187627315521,-0.875621974468231,0.327664911746979,0.551296949386597,-0.767272710800171\n             ,0.298426777124405,0.233343333005905,-0.925468742847443,0.256420314311981,0.112910509109497,-0.959947824478149\n             ,0.30904021859169,0.371187627315521,-0.875621974468231,0.256420314311981,0.112910509109497,-0.959947824478149\n             ,0.329279124736786,0.0702807679772377,-0.941613435745239,0.532891869544983,0.203911662101746,-0.821246802806854\n             ,0.327664911746979,0.551296949386597,-0.767272710800171,0.201275274157524,0.759530663490295,-0.618547856807709\n             ,0.171656653285027,0.421078413724899,-0.890632927417755,0.298426777124405,0.233343333005905,-0.925468742847443\n             ,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.66732919216156,0.285801827907562,-0.687742054462433\n             ,0.461978673934937,0.681396842002869,-0.567691802978516,0.765603542327881,-0.000731433392502368,-0.643312335014343\n             ,0.66732919216156,0.285801827907562,-0.687742054462433,0.913814067840576,-0.0522273704409599,-0.402760744094849\n             ,-0.134053289890289,0.873388648033142,-0.468211501836777,0.461978673934937,0.681396842002869,-0.567691802978516\n             ,0.66732919216156,0.285801827907562,-0.687742054462433,0.260891646146774,0.576647460460663,-0.774217784404755\n             ,0.66732919216156,0.285801827907562,-0.687742054462433,0.765603542327881,-0.000731433392502368,-0.643312335014343\n             ,0.260891646146774,0.576647460460663,-0.774217784404755,0.0610933229327202,0.52752286195755,-0.847341299057007\n             ,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0339763574302197,0.937289535999298,-0.346891850233078\n             ,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.171656653285027,0.421078413724899,-0.890632927417755\n             ,0.201275274157524,0.759530663490295,-0.618547856807709,0.0605678260326386,0.873000860214233,-0.483943223953247\n             ,0.0610933229327202,0.52752286195755,-0.847341299057007,0.784418284893036,-0.0482183061540127,-0.61835503578186\n             ,0.532891869544983,0.203911662101746,-0.821246802806854,0.329279124736786,0.0702807679772377,-0.941613435745239\n             ,0.574346244335175,0.00941364839673042,-0.81855833530426,0.784418284893036,-0.0482183061540127,-0.61835503578186\n             ,0.574346244335175,0.00941364839673042,-0.81855833530426,0.74884694814682,0.0258232615888119,-0.662239730358124\n             ,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.894509136676788,-0.20981177687645,-0.394756108522415\n             ,0.8075070977211,-0.171400144696236,-0.564406096935272,0.704347848892212,-0.492557406425476,-0.511156857013702\n             ,0.777899026870728,-0.433716207742691,-0.454712390899658,0.792737483978271,-0.494514644145966,-0.356402337551117\n             ,0.777899026870728,-0.433716207742691,-0.454712390899658,0.704347848892212,-0.492557406425476,-0.511156857013702\n             ,0.648240566253662,-0.463475733995438,-0.604131102561951,0.713780462741852,-0.04316745698452,-0.699037969112396\n             ,0.648240566253662,-0.463475733995438,-0.604131102561951,0.704347848892212,-0.492557406425476,-0.511156857013702\n             ,0.8075070977211,-0.171400144696236,-0.564406096935272,0.886527955532074,0.0429748557507992,-0.460674852132797\n             ,0.75768917798996,0.1346725076437,-0.638569056987762,0.769487977027893,0.440927565097809,-0.462029308080673,0.910501658916473\n             ,0.0911831632256508,-0.403326570987701,0.769487977027893,0.440927565097809,-0.462029308080673,0.75768917798996\n             ,0.1346725076437,-0.638569056987762,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.890664577484131\n             ,-0.0774205401539803,0.448020815849304,0.849142253398895,-0.224129945039749,0.478250175714493,0.966342151165009\n             ,-0.0820774585008621,-0.243815749883652,0.955755293369293,-0.11410153657198,-0.27113202214241,0.894509136676788\n             ,-0.20981177687645,-0.394756108522415,0.955755293369293,-0.11410153657198,-0.27113202214241,0.966342151165009\n             ,-0.0820774585008621,-0.243815749883652,0.936679661273956,0.0184381268918514,-0.349701732397079,0.673712253570557\n             ,-0.610602140426636,-0.416265428066254,0.936679661273956,0.0184381268918514,-0.349701732397079,0.966342151165009\n             ,-0.0820774585008621,-0.243815749883652,0.670762062072754,-0.708589673042297,-0.219041094183922,0.572986006736755\n             ,-0.752050638198853,0.325740456581116,0.670762062072754,-0.708589673042297,-0.219041094183922,0.966342151165009\n             ,-0.0820774585008621,-0.243815749883652,0.849142253398895,-0.224129945039749,0.478250175714493,0.769487977027893\n             ,0.440927565097809,-0.462029308080673,0.771759808063507,0.606137216091156,-0.19231353700161,0.910501658916473\n             ,0.0911831632256508,-0.403326570987701,0.886527955532074,0.0429748557507992,-0.460674852132797,0.910501658916473\n             ,0.0911831632256508,-0.403326570987701,0.771759808063507,0.606137216091156,-0.19231353700161,0.959632039070129\n             ,0.0862699821591377,-0.267701029777527,0.76104062795639,0.645680010318756,0.0625654682517052,0.959632039070129\n             ,0.0862699821591377,-0.267701029777527,0.771759808063507,0.606137216091156,-0.19231353700161,-0.643834948539734\n             ,-0.15254844725132,0.74980366230011,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.491244077682495\n             ,-0.115444600582123,0.863337576389313,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.55826473236084\n             ,-0.110289022326469,0.822299718856812,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.76784873008728\n             ,-0.171090081334114,0.617362499237061,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.877796113491058\n             ,-0.0535202585160732,0.476035296916962,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.76784873008728\n             ,-0.171090081334114,0.617362499237061,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.877796113491058\n             ,-0.0535202585160732,0.476035296916962,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.539783835411072\n             ,-0.133467569947243,0.831155717372894,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.877796113491058\n             ,-0.0535202585160732,0.476035296916962,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.949614703655243\n             ,0.0149662410840392,0.313062191009521,-0.960874974727631,0.022131310775876,0.276096969842911,-0.877796113491058\n             ,-0.0535202585160732,0.476035296916962,-0.960874974727631,0.022131310775876,0.276096969842911,-0.968861937522888\n             ,-0.0327458865940571,0.245426714420319,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.960874974727631\n             ,0.022131310775876,0.276096969842911,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.971317529678345\n             ,-0.00673383427783847,0.237690657377243,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.949614703655243\n             ,0.0149662410840392,0.313062191009521,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.970579981803894\n             ,0.0114585794508457,0.240506216883659,-0.960874974727631,0.022131310775876,0.276096969842911,-0.853425025939941\n             ,0.00471344357356429,0.521194279193878,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.621041119098663\n             ,-0.108981177210808,0.776164293289185,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.853425025939941\n             ,0.00471344357356429,0.521194279193878,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.622180342674255\n             ,-0.0406685136258602,0.781816959381104,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.622180342674255\n             ,-0.0406685136258602,0.781816959381104,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.749224066734314\n             ,-0.0310621540993452,0.661587834358215,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.948079526424408\n             ,-0.0349823534488678,0.316103518009186,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.749224066734314\n             ,-0.0310621540993452,0.661587834358215,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.912092506885529\n             ,0.0284031052142382,0.408999383449554,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.749224066734314\n             ,-0.0310621540993452,0.661587834358215,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.621041119098663\n             ,-0.108981177210808,0.776164293289185,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.749224066734314\n             ,-0.0310621540993452,0.661587834358215,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.947903215885162\n             ,-0.069373294711113,0.310912847518921,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.912092506885529\n             ,0.0284031052142382,0.408999383449554,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.960127711296082\n             ,-0.0503960475325584,0.274981826543808,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.941187500953674\n             ,-0.0369091406464577,0.335862815380096,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.482923626899719\n             ,-0.587090194225311,0.649699866771698,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.35664427280426\n             ,-0.676209807395935,0.64462798833847,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.194612219929695\n             ,-0.744307279586792,0.638852655887604,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.324567019939423\n             ,-0.694126486778259,0.642529904842377,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0717575997114182\n             ,-0.708433508872986,0.702120244503021,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.0722988545894623\n             ,-0.821142494678497,0.566125333309174,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.0717575997114182\n             ,-0.708433508872986,0.702120244503021,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.149853184819222\n             ,-0.761297464370728,0.63084876537323,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.324567019939423\n             ,-0.694126486778259,0.642529904842377,-0.235374078154564,-0.676506876945496,0.697809040546417,-0.106017202138901\n             ,-0.707463800907135,0.698752701282501,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.235374078154564\n             ,-0.676506876945496,0.697809040546417,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.482923626899719\n             ,-0.587090194225311,0.649699866771698,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.482923626899719\n             ,-0.587090194225311,0.649699866771698,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.450729221105576\n             ,-0.524441123008728,0.722360491752625,-0.292413383722305,-0.535299479961395,0.792432248592377,-0.450729221105576\n             ,-0.524441123008728,0.722360491752625,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.365384161472321\n             ,-0.375545680522919,0.851739346981049,-0.292413383722305,-0.535299479961395,0.792432248592377,-0.365384161472321\n             ,-0.375545680522919,0.851739346981049,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.293433964252472\n             ,0.0976898819208145,0.950974881649017,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.743763327598572\n             ,-0.65217137336731,0.14658996462822,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.910853445529938,-0.30947008728981\n             ,0.273082852363586,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.924713611602783,0.349783033132553\n             ,0.150188326835632,-0.841246128082275,0.241770818829536,0.483582258224487,-0.816001713275909,-0.500939309597015\n             ,0.288445889949799,-0.00293335225433111,0.995907425880432,0.0903318226337433,0.61859929561615,0.783204674720764\n             ,-0.0626528933644295,0.636519849300385,0.647450149059296,-0.419107168912888,0.00320792081765831,0.937661468982697\n             ,-0.347535103559494,-0.00293335225433111,0.995907425880432,0.0903318226337433,0.00320792081765831,0.937661468982697\n             ,-0.347535103559494,-0.664545059204102,0.734579563140869,-0.137013539671898,-0.58504182100296,0.777154207229614\n             ,0.23185633122921,-0.942853271961212,0.10562913864851,0.316022574901581,-0.891881763935089,0.246565267443657\n             ,0.379147052764893,-0.85773640871048,0.318832546472549,0.403279215097427,-0.928196668624878,0.146431341767311\n             ,0.342065423727036,-0.0776756703853607,-0.921032607555389,-0.381661415100098,-0.208732545375824,-0.912394225597382\n             ,-0.352090239524841,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.0787478685379028,-0.96028345823288\n             ,-0.26768359541893,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.0776756703853607,-0.921032607555389\n             ,-0.381661415100098,-0.0771657377481461,-0.907520055770874,-0.412859290838242,-0.212649196386337,-0.901985108852386\n             ,-0.375770092010498,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.890300929546356,-0.0326753221452236\n             ,0.454198867082596,-0.93205326795578,-0.0207287091761827,0.361727833747864,-0.889755249023438,0.104038514196873\n             ,0.444422751665115,-0.838507175445557,0.0982540920376778,0.535958766937256,-0.823492228984833,0.0713645666837692\n             ,0.56282114982605,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.866600096225739,0.0923771783709526\n             ,0.490378141403198,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.866523861885071,-0.498106122016907\n             ,0.0320423804223537,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.093654952943325,-0.971795976161957\n             ,-0.216428592801094,0.652852118015289,-0.584342896938324,-0.482003599405289,-0.093654952943325,-0.971795976161957\n             ,-0.216428592801094,-0.184745773673058,-0.862863302230835,-0.470463544130325,0.664769351482391,-0.462521582841873\n             ,-0.586647689342499,0.614885807037354,-0.39096936583519,-0.684878408908844,0.664769351482391,-0.462521582841873\n             ,-0.586647689342499,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.236963242292404,-0.687786102294922\n             ,-0.686147749423981,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.236963242292404,-0.687786102294922\n             ,-0.686147749423981,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.866523861885071,-0.498106122016907\n             ,0.0320423804223537,-0.482406258583069,0.640618324279785,0.597404718399048,-0.92311555147171,0.291509866714478\n             ,0.250758200883865,-0.933935105800629,0.157070308923721,0.321082711219788,-0.907475471496582,0.340031713247299\n             ,0.246711865067482,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.157021999359131,0.633807837963104\n             ,-0.757384777069092,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.941332995891571,-0.0885210856795311\n             ,0.325662672519684,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.973734021186829,-0.0321761183440685\n             ,0.225403621792793,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.958686172962189,-0.0430715903639793\n             ,0.281186193227768,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.941332995891571,-0.0885210856795311\n             ,0.325662672519684,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.910594463348389,-0.0996595025062561\n             ,0.401105612516403,-0.773442804813385,0.436002254486084,0.460096001625061,-0.784657657146454,0.439340144395828\n             ,0.437370121479034,-0.776160657405853,0.480935424566269,0.407769232988358,-0.7086301445961,0.50186014175415,0.495963364839554\n             ,-0.764328002929688,0.478488236665726,0.432263433933258,-0.809970021247864,0.357101410627365,0.46521732211113\n             ,-0.684539437294006,0.44213280081749,0.57958984375,-0.7086301445961,0.50186014175415,0.495963364839554,-0.684539437294006\n             ,0.44213280081749,0.57958984375,-0.809970021247864,0.357101410627365,0.46521732211113,-0.803570151329041,0.341960042715073\n             ,0.487173795700073,-0.649461984634399,0.424084842205048,0.631150722503662,-0.636985540390015,0.443951308727264\n             ,0.630203664302826,-0.803570151329041,0.341960042715073,0.487173795700073,-0.809970021247864,0.357101410627365\n             ,0.46521732211113,-0.654083967208862,0.394615858793259,0.64533132314682,-0.594367325305939,0.527927815914154\n             ,0.606646299362183,-0.654083967208862,0.394615858793259,0.64533132314682,-0.809970021247864,0.357101410627365\n             ,0.46521732211113,-0.764328002929688,0.478488236665726,0.432263433933258,-0.51600193977356,0.0798369869589806\n             ,0.852858781814575,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.538346290588379,-0.311954945325851\n             ,0.782858490943909,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.51600193977356,0.0798369869589806\n             ,0.852858781814575,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.365840524435043,0.0561637468636036\n             ,0.928981363773346,-0.530206859111786,0.100595757365227,0.841879546642303,-0.734584510326386,-0.658318638801575\n             ,0.16432324051857,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.716389060020447,-0.69769012928009\n             ,0.00390529190190136,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.84095025062561,-0.471284002065659\n             ,0.265883654356003,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.798515379428864,-0.599305510520935\n             ,0.0566220432519913,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.378661543130875,-0.325545430183411\n             ,0.866392314434052,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.477150738239288,-0.679907381534576\n             ,0.556824207305908,-0.35957869887352,-0.654971122741699,0.66461718082428,-0.35957869887352,-0.654971122741699\n             ,0.66461718082428,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.521853566169739,-0.69189864397049\n             ,0.498944044113159,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.626672208309174,0.255842447280884\n             ,0.736088693141937,-0.490771174430847,0.254273563623428,0.833359837532043,-0.354619354009628,-0.125306099653244\n             ,0.926576197147369,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.438916772603989,0.289704263210297\n             ,0.850543081760406,-0.664353311061859,0.186838954687119,0.723689079284668,-0.735289394855499,-0.208703994750977\n             ,0.644819438457489,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.501976847648621,0.497314512729645\n             ,0.707599818706512,-0.664353311061859,0.186838954687119,0.723689079284668,-0.438916772603989,0.289704263210297\n             ,0.850543081760406,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.633282124996185,-0.25443509221077\n             ,0.730901181697845,-0.617874979972839,-0.144242078065872,0.772932589054108,-0.419774144887924,-0.091299757361412\n             ,0.903024911880493,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.419774144887924,-0.091299757361412\n             ,0.903024911880493,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.367648780345917,-0.406335473060608\n             ,0.83649617433548,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.284212023019791,-0.62719339132309\n             ,0.725156545639038,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.309603661298752,-0.439581990242004\n             ,0.843156754970551,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.194612219929695,-0.744307279586792\n             ,0.638852655887604,-0.0848771035671234,-0.827450573444366,0.55508691072464,0.187445163726807,0.511297464370728\n             ,0.838712811470032,0.12853179872036,0.854913532733917,0.502595722675323,0.133057877421379,0.867883086204529,0.478617310523987\n             ,0.330043107271194,0.436470597982407,0.83699756860733,0.185406669974327,0.360577255487442,0.914116144180298,0.330043107271194\n             ,0.436470597982407,0.83699756860733,0.133057877421379,0.867883086204529,0.478617310523987,0.046251967549324,0.890573501586914\n             ,0.452481597661972,-0.131636127829552,0.990942358970642,0.0265548899769783,0.046251967549324,0.890573501586914\n             ,0.452481597661972,0.133057877421379,0.867883086204529,0.478617310523987,-0.201113522052765,0.971361815929413\n             ,0.126529023051262,-0.183847695589066,0.966428518295288,0.179488003253937,-0.201113522052765,0.971361815929413\n             ,0.126529023051262,0.133057877421379,0.867883086204529,0.478617310523987,0.12853179872036,0.854913532733917,0.502595722675323\n             ,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.323215007781982,0.943282067775726,0.0758355185389519\n             ,0.477838784456253,0.792661190032959,-0.378626853227615,0.466618627309799,0.783142864704132,-0.41104057431221\n             ,-0.807841360569,0.43371844291687,0.399099737405777,-0.702935457229614,0.63435697555542,0.321672111749649,-0.323215007781982\n             ,0.943282067775726,0.0758355185389519,-0.488124132156372,0.865501821041107,-0.112434260547161,0.772461295127869\n             ,-0.0374295972287655,0.633957862854004,-0.30469673871994,0.941659867763519,0.142956644296646,0.727005004882813\n             ,0.68491542339325,0.0485247001051903,-0.30469673871994,0.941659867763519,0.142956644296646,0.772461295127869\n             ,-0.0374295972287655,0.633957862854004,0.125634163618088,0.492520093917847,0.861185252666473,0.466618627309799\n             ,0.783142864704132,-0.41104057431221,0.727005004882813,0.68491542339325,0.0485247001051903,-0.30469673871994\n             ,0.941659867763519,0.142956644296646,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.807841360569\n             ,0.43371844291687,0.399099737405777,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.30469673871994\n             ,0.941659867763519,0.142956644296646,-0.6800137758255,0.685604989528656,0.2598597407341,-0.293433964252472,0.0976898819208145\n             ,0.950974881649017,-0.6800137758255,0.685604989528656,0.2598597407341,-0.30469673871994,0.941659867763519,0.142956644296646\n             ,0.125634163618088,0.492520093917847,0.861185252666473,0.772461295127869,-0.0374295972287655,0.633957862854004\n             ,0.450095027685165,-0.592146694660187,0.668413639068604,0.125634163618088,0.492520093917847,0.861185252666473\n             ,0.450095027685165,-0.592146694660187,0.668413639068604,-0.293433964252472,0.0976898819208145,0.950974881649017\n             ,0.125634163618088,0.492520093917847,0.861185252666473,0.450095027685165,-0.592146694660187,0.668413639068604\n             ,0.180472254753113,-0.782866299152374,0.595441102981567,-0.292413383722305,-0.535299479961395,0.792432248592377\n             ,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.450729221105576,-0.524441123008728,0.722360491752625\n             ,-0.292413383722305,-0.535299479961395,0.792432248592377,0.180472254753113,-0.782866299152374,0.595441102981567\n             ,0.066693402826786,-0.763606250286102,0.642228543758392,0.520344138145447,-0.759189605712891,0.390989869832993\n             ,0.066693402826786,-0.763606250286102,0.642228543758392,0.180472254753113,-0.782866299152374,0.595441102981567\n             ,0.493583381175995,-0.804481565952301,0.330431401729584,0.772461295127869,-0.0374295972287655,0.633957862854004\n             ,0.493583381175995,-0.804481565952301,0.330431401729584,0.180472254753113,-0.782866299152374,0.595441102981567\n             ,0.450095027685165,-0.592146694660187,0.668413639068604,-0.450729221105576,-0.524441123008728,0.722360491752625\n             ,0.066693402826786,-0.763606250286102,0.642228543758392,0.169332280755043,-0.786144733428955,0.594393014907837\n             ,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.235374078154564,-0.676506876945496,0.697809040546417\n             ,-0.38851073384285,-0.590570747852325,0.707308709621429,0.169332280755043,-0.786144733428955,0.594393014907837\n             ,0.246509581804276,-0.871231377124786,0.424486666917801,0.506179451942444,-0.83683580160141,0.208538070321083\n             ,0.246509581804276,-0.871231377124786,0.424486666917801,0.169332280755043,-0.786144733428955,0.594393014907837\n             ,0.593186497688293,-0.723713397979736,0.352659493684769,0.520344138145447,-0.759189605712891,0.390989869832993\n             ,0.593186497688293,-0.723713397979736,0.352659493684769,0.169332280755043,-0.786144733428955,0.594393014907837\n             ,0.066693402826786,-0.763606250286102,0.642228543758392,0.201723903417587,-0.93417751789093,0.294312417507172\n             ,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.235374078154564,-0.676506876945496,0.697809040546417\n             ,0.246509581804276,-0.871231377124786,0.424486666917801,0.201723903417587,-0.93417751789093,0.294312417507172\n             ,0.246509581804276,-0.871231377124786,0.424486666917801,0.506179451942444,-0.83683580160141,0.208538070321083\n             ,0.331354945898056,-0.940484642982483,0.0754489675164223,-0.106017202138901,-0.707463800907135,0.698752701282501\n             ,0.201723903417587,-0.93417751789093,0.294312417507172,0.0746458247303963,-0.967216193675995,0.242736130952835\n             ,-0.0717575997114182,-0.708433508872986,0.702120244503021,-0.0594102963805199,-0.704399049282074,0.707313537597656\n             ,-0.0717575997114182,-0.708433508872986,0.702120244503021,0.0746458247303963,-0.967216193675995,0.242736130952835\n             ,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.0488644652068615,-0.996573328971863,-0.0667372941970825\n             ,-0.044459342956543,-0.969122648239136,0.242537945508957,0.0746458247303963,-0.967216193675995,0.242736130952835\n             ,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.331354945898056,-0.940484642982483,0.0754489675164223\n             ,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.0746458247303963,-0.967216193675995,0.242736130952835\n             ,0.201723903417587,-0.93417751789093,0.294312417507172,-0.0488644652068615,-0.996573328971863,-0.0667372941970825\n             ,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.209884941577911,-0.949742674827576,0.232243597507477\n             ,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.0594102963805199,-0.704399049282074,0.707313537597656\n             ,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.209884941577911,-0.949742674827576,0.232243597507477\n             ,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.30313828587532,-0.739410519599915,0.601148247718811\n             ,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.209884941577911,-0.949742674827576,0.232243597507477\n             ,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.558743357658386,-0.822392702102661,-0.10712693631649\n             ,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.209884941577911,-0.949742674827576,0.232243597507477\n             ,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.558743357658386,-0.822392702102661,-0.10712693631649\n             ,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.632458329200745,-0.745043694972992,0.211911231279373\n             ,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.30313828587532,-0.739410519599915,0.601148247718811\n             ,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.632458329200745,-0.745043694972992,0.211911231279373\n             ,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.887657046318054,-0.456045299768448,0.063934437930584\n             ,-0.726677179336548,-0.644755423069,0.237130090594292,-0.632458329200745,-0.745043694972992,0.211911231279373\n             ,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.170729905366898,-0.910779476165771,0.375941574573517\n             ,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.0656469166278839,-0.584858000278473,0.808474898338318\n             ,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.24947227537632,-0.924226999282837,0.289081335067749\n             ,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.170729905366898,-0.910779476165771,0.375941574573517\n             ,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.29602313041687,-0.765856146812439,0.57081925868988\n             ,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.29602313041687,-0.765856146812439,0.57081925868988\n             ,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.352154672145844,-0.530555903911591,0.771036624908447\n             ,-0.409960985183716,0.234984055161476,0.881314098834991,-0.419355839490891,0.314480572938919,0.851611793041229\n             ,-0.427875101566315,0.308164179325104,0.849680960178375,-0.59487509727478,0.0656027272343636,0.801136672496796\n             ,-0.595763564109802,0.13890865445137,0.791056394577026,-0.708662629127502,0.112244434654713,0.696561932563782\n             ,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.703076124191284,0.0390988439321518,0.710038900375366\n             ,-0.708662629127502,0.112244434654713,0.696561932563782,-0.80397242307663,0.0757209435105324,0.589825987815857\n             ,-0.774853527545929,0.101396143436432,0.62395578622818,-0.31306853890419,0.294974654912949,0.902761340141296\n             ,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.35642284154892,0.221263155341148,0.907747387886047\n             ,-0.31306853890419,0.294974654912949,0.902761340141296,-0.293433964252472,0.0976898819208145,0.950974881649017\n             ,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.293433964252472,0.0976898819208145,0.950974881649017\n             ,-0.589879870414734,0.320975691080093,0.740956366062164,-0.807841360569,0.43371844291687,0.399099737405777,-0.6800137758255\n             ,0.685604989528656,0.2598597407341,-0.807841360569,0.43371844291687,0.399099737405777,-0.589879870414734,0.320975691080093\n             ,0.740956366062164,-0.711035132408142,0.199701055884361,0.674202144145966,-0.35642284154892,0.221263155341148\n             ,0.907747387886047,-0.419887959957123,0.29813814163208,0.857209324836731,-0.31306853890419,0.294974654912949\n             ,0.902761340141296,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.31306853890419,0.294974654912949\n             ,0.902761340141296,-0.589879870414734,0.320975691080093,0.740956366062164,-0.711035132408142,0.199701055884361\n             ,0.674202144145966,-0.589879870414734,0.320975691080093,0.740956366062164,-0.31306853890419,0.294974654912949\n             ,0.902761340141296,-0.419887959957123,0.29813814163208,0.857209324836731,-0.615555763244629,0.148695304989815\n             ,0.773938477039337,-0.53751266002655,0.1327995210886,0.832733154296875,-0.419774144887924,-0.091299757361412\n             ,0.903024911880493,-0.617874979972839,-0.144242078065872,0.772932589054108,0.792737483978271,-0.494514644145966\n             ,-0.356402337551117,0.630495369434357,-0.750089466571808,-0.199602961540222,0.50261402130127,-0.863443076610565\n             ,0.0429561100900173,0.759971797466278,-0.612702488899231,0.216883733868599,0.243047595024109,-0.82210099697113\n             ,0.514857113361359,0.759971797466278,-0.612702488899231,0.216883733868599,0.50261402130127,-0.863443076610565\n             ,0.0429561100900173,0.314814835786819,-0.921267867088318,0.228379368782043,0.340434432029724,-0.915098071098328\n             ,0.216101616621017,0.314814835786819,-0.921267867088318,0.228379368782043,0.50261402130127,-0.863443076610565\n             ,0.0429561100900173,0.626364231109619,-0.75530606508255,-0.192822501063347,0.773029983043671,-0.340951681137085\n             ,-0.534954726696014,0.50261402130127,-0.863443076610565,0.0429561100900173,0.630495369434357,-0.750089466571808\n             ,-0.199602961540222,0.50261402130127,-0.863443076610565,0.0429561100900173,0.773029983043671,-0.340951681137085\n             ,-0.534954726696014,0.626364231109619,-0.75530606508255,-0.192822501063347,0.364371746778488,-0.284274369478226\n             ,-0.886803984642029,0.646651268005371,0.172121793031693,-0.743112564086914,0.706785917282104,0.185755431652069\n             ,-0.682604253292084,0.428298622369766,-0.365026712417603,-0.826629161834717,0.521451473236084,-0.506328523159027\n             ,-0.686818599700928,0.428298622369766,-0.365026712417603,-0.826629161834717,0.706785917282104,0.185755431652069\n             ,-0.682604253292084,0.770183801651001,0.157961666584015,-0.617952287197113,0.713780462741852,-0.04316745698452\n             ,-0.699037969112396,0.770183801651001,0.157961666584015,-0.617952287197113,0.706785917282104,0.185755431652069\n             ,-0.682604253292084,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.773029983043671,-0.340951681137085\n             ,-0.534954726696014,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.706785917282104,0.185755431652069\n             ,-0.682604253292084,0.646651268005371,0.172121793031693,-0.743112564086914,0.521451473236084,-0.506328523159027\n             ,-0.686818599700928,0.770183801651001,0.157961666584015,-0.617952287197113,0.853590905666351,0.0963327810168266\n             ,-0.511959493160248,0.593445479869843,-0.55176454782486,-0.585984945297241,0.853590905666351,0.0963327810168266\n             ,-0.511959493160248,0.8075070977211,-0.171400144696236,-0.564406096935272,0.894509136676788,-0.20981177687645\n             ,-0.394756108522415,0.936679661273956,0.0184381268918514,-0.349701732397079,0.713780462741852,-0.04316745698452\n             ,-0.699037969112396,0.8075070977211,-0.171400144696236,-0.564406096935272,0.853590905666351,0.0963327810168266\n             ,-0.511959493160248,0.770183801651001,0.157961666584015,-0.617952287197113,-0.545112073421478,-0.349918723106384\n             ,0.761846244335175,-0.135216936469078,-0.381399750709534,0.914467394351959,0.279289931058884,0.161584615707397\n             ,0.94651335477829,0.243047595024109,-0.82210099697113,0.514857113361359,-0.188230976462364,-0.722290992736816\n             ,0.66548091173172,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.124414332211018,0.380547553300858\n             ,0.91635400056839,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.17153462767601,-0.247131928801537\n             ,0.953677952289581,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0895515978336334,-0.660540342330933\n             ,0.745430707931519,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.0613121353089809,-0.89322817325592\n             ,0.445403426885605,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.0613121353089809,-0.89322817325592\n             ,0.445403426885605,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.15943743288517,-0.987180471420288\n             ,-0.00737930601462722,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.15943743288517,-0.987180471420288\n             ,-0.00737930601462722,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.269127756357193,-0.79069060087204\n             ,0.549889624118805,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.119434364140034,-0.879600763320923\n             ,0.460475742816925,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.280322819948196,-0.610130190849304\n             ,0.741053521633148,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.218783125281334,-0.517780601978302\n             ,0.827065408229828,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.0553458705544472,-0.183565944433212\n             ,0.981448113918304,-0.0389158241450787,-0.199694201350212,0.979085206985474,-0.0553458705544472,-0.183565944433212\n             ,0.981448113918304,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.125227466225624,-0.596286714076996\n             ,0.792944073677063,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.23735885322094,-0.585129797458649\n             ,0.775424957275391,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.0895515978336334,-0.660540342330933\n             ,0.745430707931519,-0.166856274008751,-0.820909261703491,0.546138286590576,0.0681579038500786,-0.994212329387665\n             ,0.0830442756414413,-0.0973072052001953,-0.992754817008972,0.0704923868179321,-0.161499664187431,-0.785857558250427\n             ,0.596947073936462,-0.166856274008751,-0.820909261703491,0.546138286590576,-0.161499664187431,-0.785857558250427\n             ,0.596947073936462,-0.188662573695183,-0.633236289024353,0.750611901283264,-0.28600937128067,-0.592511594295502\n             ,0.753079414367676,-0.174236983060837,-0.833520114421844,0.524295389652252,0.161769852042198,-0.974958479404449\n             ,0.152598813176155,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.166856274008751,-0.820909261703491\n             ,0.546138286590576,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.166856274008751,-0.820909261703491\n             ,0.546138286590576,-0.28600937128067,-0.592511594295502,0.753079414367676,-0.406814515590668,-0.530913829803467\n             ,0.743392527103424,0.0128951743245125,-0.862936913967133,0.505147039890289,0.24199965596199,-0.948591530323029\n             ,0.203986048698425,0.161769852042198,-0.974958479404449,0.152598813176155,-0.174236983060837,-0.833520114421844\n             ,0.524295389652252,-0.761701762676239,0.421244710683823,0.492304056882858,-0.728943645954132,0.505101680755615\n             ,0.462075144052505,-0.741443395614624,0.635278224945068,0.216063171625137,-0.702385485172272,0.688902199268341\n             ,0.179076477885246,-0.741443395614624,0.635278224945068,0.216063171625137,-0.543530166149139,0.835534155368805\n             ,-0.0803593844175339,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.702385485172272,0.688902199268341\n             ,0.179076477885246,-0.152414619922638,0.895912230014801,-0.417266219854355,-0.551566660404205,0.823827803134918\n             ,-0.13069823384285,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.169851988554001,0.888530313968658\n             ,-0.426220804452896,-0.262664377689362,0.933591663837433,-0.243749871850014,-0.169851988554001,0.888530313968658\n             ,-0.426220804452896,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.523407638072968,0.841484844684601\n             ,0.133969098329544,-0.728943645954132,0.505101680755615,0.462075144052505,-0.523407638072968,0.841484844684601\n             ,0.133969098329544,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.741443395614624,0.635278224945068\n             ,0.216063171625137,-0.152414619922638,0.895912230014801,-0.417266219854355,-0.169851988554001,0.888530313968658\n             ,-0.426220804452896,0.444303005933762,0.584981560707092,-0.678521454334259,0.461978673934937,0.681396842002869\n             ,-0.567691802978516,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.461978673934937,0.681396842002869\n             ,-0.567691802978516,0.444303005933762,0.584981560707092,-0.678521454334259,0.892134130001068,-0.0444634817540646\n             ,-0.449577271938324,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.892134130001068,-0.0444634817540646\n             ,-0.449577271938324,0.444303005933762,0.584981560707092,-0.678521454334259,0.26505383849144,0.683794975280762\n             ,-0.679831504821777,-0.262664377689362,0.933591663837433,-0.243749871850014,0.26505383849144,0.683794975280762\n             ,-0.679831504821777,0.444303005933762,0.584981560707092,-0.678521454334259,-0.169851988554001,0.888530313968658\n             ,-0.426220804452896,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.913814067840576,-0.0522273704409599\n             ,-0.402760744094849,0.778522193431854,0.369191855192184,-0.507543742656708,0.769487977027893,0.440927565097809\n             ,-0.462029308080673,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.75768917798996,0.1346725076437\n             ,-0.638569056987762,0.452028423547745,0.457834273576736,-0.765544295310974,0.260891646146774,0.576647460460663\n             ,-0.774217784404755,-0.134053289890289,0.873388648033142,-0.468211501836777,0.260891646146774,0.576647460460663\n             ,-0.774217784404755,0.452028423547745,0.457834273576736,-0.765544295310974,0.717603802680969,0.25128972530365\n             ,-0.649536907672882,0.886527955532074,0.0429748557507992,-0.460674852132797,0.717603802680969,0.25128972530365\n             ,-0.649536907672882,0.452028423547745,0.457834273576736,-0.765544295310974,0.75768917798996,0.1346725076437,-0.638569056987762\n             ,0.792737483978271,-0.494514644145966,-0.356402337551117,0.864245176315308,-0.12554919719696,-0.487152576446533\n             ,0.869438171386719,-0.191056177020073,-0.455603748559952,0.777899026870728,-0.433716207742691,-0.454712390899658\n             ,0.869438171386719,-0.191056177020073,-0.455603748559952,0.886527955532074,0.0429748557507992,-0.460674852132797\n             ,0.928043901920319,-0.117735534906387,-0.3533735871315,0.894509136676788,-0.20981177687645,-0.394756108522415\n             ,0.869438171386719,-0.191056177020073,-0.455603748559952,0.894509136676788,-0.20981177687645,-0.394756108522415\n             ,0.777899026870728,-0.433716207742691,-0.454712390899658,0.886527955532074,0.0429748557507992,-0.460674852132797\n             ,0.869438171386719,-0.191056177020073,-0.455603748559952,0.864245176315308,-0.12554919719696,-0.487152576446533\n             ,-0.134053289890289,0.873388648033142,-0.468211501836777,0.717603802680969,0.25128972530365,-0.649536907672882\n             ,0.883733749389648,-0.197778105735779,-0.424144357442856,0.879603147506714,0.140207409858704,-0.454576879739761\n             ,0.792737483978271,-0.494514644145966,-0.356402337551117,0.879603147506714,0.140207409858704,-0.454576879739761\n             ,0.883733749389648,-0.197778105735779,-0.424144357442856,0.864245176315308,-0.12554919719696,-0.487152576446533\n             ,0.886527955532074,0.0429748557507992,-0.460674852132797,0.864245176315308,-0.12554919719696,-0.487152576446533\n             ,0.883733749389648,-0.197778105735779,-0.424144357442856,0.717603802680969,0.25128972530365,-0.649536907672882\n             ,0.735658526420593,0.230637982487679,-0.636877298355103,0.778522193431854,0.369191855192184,-0.507543742656708\n             ,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.892134130001068,-0.0444634817540646,-0.449577271938324\n             ,0.735658526420593,0.230637982487679,-0.636877298355103,0.892134130001068,-0.0444634817540646,-0.449577271938324\n             ,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.74884694814682,0.0258232615888119,-0.662239730358124\n             ,0.336174368858337,0.935995519161224,0.104399025440216,-0.328838348388672,0.935817182064056,0.126931354403496\n             ,-0.702385485172272,0.688902199268341,0.179076477885246,-0.551566660404205,0.823827803134918,-0.13069823384285\n             ,0.340434432029724,-0.915098071098328,0.216101616621017,0.196581169962883,-0.892622411251068,0.405685991048813\n             ,0.314814835786819,-0.921267867088318,0.228379368782043,0.314814835786819,-0.921267867088318,0.228379368782043\n             ,0.196581169962883,-0.892622411251068,0.405685991048813,-0.188230976462364,-0.722290992736816,0.66548091173172\n             ,0.243047595024109,-0.82210099697113,0.514857113361359,-0.694061398506165,-0.1789870262146,0.697310864925385\n             ,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.653488278388977,-0.259704351425171,0.710989952087402\n             ,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.684878885746002,-0.277860194444656,0.673598289489746\n             ,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.696582138538361,-0.198639899492264,0.689431309700012\n             ,-0.709937155246735,0.54696124792099,0.443646997213364,-0.776160657405853,0.480935424566269,0.407769232988358\n             ,-0.849210619926453,0.33398848772049,0.409014731645584,-0.719690024852753,0.419174522161484,0.553479015827179\n             ,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.754464566707611,-0.0490087866783142,0.654508471488953\n             ,-0.794279515743256,0.210044533014297,0.570088922977448,-0.639836966991425,0.246874988079071,0.727778375148773\n             ,-0.639836966991425,0.246874988079071,0.727778375148773,-0.794279515743256,0.210044533014297,0.570088922977448\n             ,-0.794037878513336,0.353904455900192,0.49422213435173,-0.659900903701782,0.452796697616577,0.59958815574646\n             ,-0.849210619926453,0.33398848772049,0.409014731645584,-0.794037878513336,0.353904455900192,0.49422213435173\n             ,-0.794279515743256,0.210044533014297,0.570088922977448,-0.872271299362183,0.143087893724442,0.467620134353638\n             ,-0.872271299362183,0.143087893724442,0.467620134353638,-0.794279515743256,0.210044533014297,0.570088922977448\n             ,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.847315430641174,-0.0547459907829762,0.528260707855225\n             ,-0.776160657405853,0.480935424566269,0.407769232988358,-0.784657657146454,0.439340144395828,0.437370121479034\n             ,-0.794037878513336,0.353904455900192,0.49422213435173,-0.849210619926453,0.33398848772049,0.409014731645584\n             ,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.759531497955322,-0.491919815540314,0.425589978694916\n             ,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.80817985534668,-0.287789851427078,0.51383101940155\n             ,-0.692233920097351,-0.67291522026062,0.260762959718704,-0.789951264858246,-0.250378400087357,0.559721052646637\n             ,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.565922915935516,-0.460098385810852,0.684135019779205\n             ,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.596664726734161,-0.639922559261322,0.484241992235184\n             ,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.759531497955322,-0.491919815540314,0.425589978694916\n             ,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.759531497955322,-0.491919815540314,0.425589978694916\n             ,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.85713666677475,-0.480864852666855,0.184623166918755\n             ,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.556434690952301,-0.213731065392494,0.802931845188141\n             ,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.256741940975189,-0.440148830413818,0.860437452793121\n             ,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.239064574241638,-0.198313489556313,0.950536668300629\n             ,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.0191204845905304,-0.446781009435654,0.894439041614532\n             ,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.0191204845905304,-0.446781009435654,0.894439041614532\n             ,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.305121690034866,-0.661639988422394,0.684933066368103\n             ,-0.0377944894134998,-0.657056510448456,0.752893269062042,-0.305121690034866,-0.661639988422394,0.684933066368103\n             ,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.565922915935516,-0.460098385810852,0.684135019779205\n             ,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.547457277774811,-0.812714397907257,0.199463784694672\n             ,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.430616140365601,-0.892966866493225,-0.131072074174881\n             ,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.58669912815094,-0.765324294567108,0.264693915843964\n             ,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.594583511352539,-0.803299486637115,0.0343575030565262\n             ,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.309475094079971,-0.95003479719162,-0.0407320484519005\n             ,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.218511044979095,-0.922666072845459,-0.317710936069489\n             ,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.406780004501343,-0.911690473556519,0.0578830800950527\n             ,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.317538052797318,-0.919425249099731,-0.232006043195724\n             ,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.391194581985474,-0.718477785587311,0.57511430978775\n             ,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.1754040569067,-0.893526375293732,0.413332790136337\n             ,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.0491818785667419,-0.776791214942932,0.627834796905518\n             ,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.1754040569067,-0.893526375293732,0.413332790136337\n             ,-0.0628481134772301,-0.906862795352936,0.416713327169418,-0.0727874711155891,-0.98180228471756,0.1754030585289\n             ,-0.0628481134772301,-0.906862795352936,0.416713327169418,-0.1754040569067,-0.893526375293732,0.413332790136337\n             ,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.329490900039673,-0.914458751678467,0.234948962926865\n             ,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.1754040569067,-0.893526375293732,0.413332790136337\n             ,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.476766884326935,-0.797545433044434,0.369614124298096\n             ,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.391194581985474,-0.718477785587311,0.57511430978775\n             ,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.329490900039673,-0.914458751678467,0.234948962926865\n             ,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.476766884326935,-0.797545433044434,0.369614124298096\n             ,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.0777209997177124,-0.922415435314178,-0.378297746181488\n             ,-0.0788524150848389,-0.974068284034729,-0.212069168686867,-0.2219308167696,-0.96528422832489,-0.137742727994919\n             ,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.820191740989685,-0.246563538908958,0.51622861623764\n             ,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.704794883728027,-0.197958365082741,0.681231737136841\n             ,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.819603979587555,-0.56017941236496,0.120201125741005\n             ,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.883318901062012,-0.449568182229996,0.132801294326782\n             ,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.819603979587555,-0.56017941236496,0.120201125741005\n             ,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.716389060020447,-0.69769012928009,0.00390529190190136\n             ,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.748079419136047,-0.662436008453369,0.0394426696002483\n             ,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.798864305019379,-0.578265428543091,0.165604829788208\n             ,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.798864305019379,-0.578265428543091,0.165604829788208\n             ,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.847638964653015,-0.474602103233337,0.23719410598278\n             ,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.77647191286087,0.0245032440871,0.629675269126892\n             ,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.626672208309174,0.255842447280884,0.736088693141937\n             ,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.563944399356842,0.0872281566262245,0.821192979812622\n             ,-0.490771174430847,0.254273563623428,0.833359837532043,-0.563944399356842,0.0872281566262245,0.821192979812622\n             ,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.660281181335449,-0.462338596582413,0.591837644577026\n             ,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.771885097026825,-0.442620873451233,0.456377178430557\n             ,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.737583756446838,0.0348345339298248,0.674356520175934\n             ,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.525489568710327,-0.438258349895477,0.729239583015442\n             ,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.525664925575256,-0.713997602462769,0.462475687265396\n             ,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.477150738239288,-0.679907381534576,0.556824207305908\n             ,-0.525664925575256,-0.713997602462769,0.462475687265396,-0.515831410884857,-0.748138308525085,0.417381137609482\n             ,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.58669912815094,-0.765324294567108,0.264693915843964\n             ,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.525664925575256,-0.713997602462769,0.462475687265396\n             ,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.771885097026825,-0.442620873451233,0.456377178430557\n             ,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.525664925575256,-0.713997602462769,0.462475687265396\n             ,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.521853566169739,-0.69189864397049,0.498944044113159\n             ,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.487741857767105,-0.807749330997467,0.331132739782333\n             ,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.476766884326935,-0.797545433044434,0.369614124298096\n             ,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.363402187824249,-0.911391258239746,0.193144634366035\n             ,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.406780004501343,-0.911690473556519,0.0578830800950527\n             ,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.487741857767105,-0.807749330997467,0.331132739782333\n             ,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.58669912815094,-0.765324294567108,0.264693915843964\n             ,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.487741857767105,-0.807749330997467,0.331132739782333\n             ,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.329490900039673,-0.914458751678467,0.234948962926865\n             ,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.274860739707947,-0.954389214515686,0.116588413715363\n             ,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.218423113226891,-0.952777028083801,0.210967406630516\n             ,-0.274860739707947,-0.954389214515686,0.116588413715363,-0.201314941048622,-0.978592693805695,0.0427633114159107\n             ,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.2219308167696,-0.96528422832489,-0.137742727994919\n             ,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.274860739707947,-0.954389214515686,0.116588413715363\n             ,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.406780004501343,-0.911690473556519,0.0578830800950527\n             ,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.274860739707947,-0.954389214515686,0.116588413715363\n             ,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.0727874711155891,-0.98180228471756,0.1754030585289\n             ,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.0773368552327156,-0.996767818927765,-0.0217481888830662\n             ,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.0788524150848389,-0.974068284034729,-0.212069168686867\n             ,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.201314941048622,-0.978592693805695,0.0427633114159107\n             ,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.928220152854919,-0.224693849682808,0.296513050794601\n             ,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.903494656085968,-0.23456384241581,0.358715981245041\n             ,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.926413714885712,-0.295776426792145,0.232967585325241\n             ,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.84095025062561,-0.471284002065659,0.265883654356003\n             ,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.820191740989685,-0.246563538908958,0.51622861623764\n             ,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.926413714885712,-0.295776426792145,0.232967585325241\n             ,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.838545143604279,-0.366839319467545,0.402828723192215\n             ,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.883318901062012,-0.449568182229996,0.132801294326782\n             ,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.847638964653015,-0.474602103233337,0.23719410598278\n             ,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.774548470973969,-0.470689743757248,0.422523230314255\n             ,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.774548470973969,-0.470689743757248,0.422523230314255\n             ,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.820191740989685,-0.246563538908958,0.51622861623764\n             ,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.971317529678345,-0.00673383427783847,0.237690657377243\n             ,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.755345046520233,-0.113645695149899,0.645397901535034\n             ,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.853425025939941,0.00471344357356429,0.521194279193878\n             ,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.971317529678345,-0.00673383427783847,0.237690657377243\n             ,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.853425025939941,0.00471344357356429,0.521194279193878\n             ,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.969451248645782,-0.00855130515992641,0.245134904980659\n             ,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.908266186714172,-0.0645692199468613,0.413380444049835\n             ,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.969451248645782,-0.00855130515992641,0.245134904980659\n             ,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.888188779354095,-0.0342079848051071,0.45820364356041\n             ,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.964182317256927,0.0220649186521769,0.264321088790894\n             ,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.665728688240051,-0.201705411076546,0.718415081501007\n             ,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.827720582485199,-0.146306499838829,0.541731595993042\n             ,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.717062890529633,-0.251050710678101,0.650226414203644\n             ,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.727153897285461,-0.354736089706421,0.58771550655365\n             ,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.727153897285461,-0.354736089706421,0.58771550655365\n             ,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.852678954601288,-0.302188754081726,0.426169604063034\n             ,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.943083763122559,-0.101111672818661,0.316811382770538\n             ,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.704794883728027,-0.197958365082741,0.681231737136841\n             ,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.931119084358215,-0.21125616133213,0.297301381826401\n             ,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.820191740989685,-0.246563538908958,0.51622861623764\n             ,0.196581169962883,-0.892622411251068,0.405685991048813,0.340434432029724,-0.915098071098328,0.216101616621017\n             ,0.24199965596199,-0.948591530323029,0.203986048698425,0.0128951743245125,-0.862936913967133,0.505147039890289\n             ,0.196581169962883,-0.892622411251068,0.405685991048813,0.0128951743245125,-0.862936913967133,0.505147039890289\n             ,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.188230976462364,-0.722290992736816,0.66548091173172\n             ,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.188230976462364,-0.722290992736816,0.66548091173172\n             ,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.566845297813416,-0.21562035381794,0.795106470584869\n             ,-0.522611916065216,0.119792513549328,0.844112873077393,-0.552518010139465,0.180195555090904,0.813789546489716\n             ,-0.530328452587128,0.10359351336956,0.841439306735992,-0.543807446956635,0.220993861556053,0.809589505195618\n             ,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.523460209369659,-0.770274937152863,0.36423334479332\n             ,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.0971510037779808,-0.777255237102509,0.621639728546143\n             ,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.0971510037779808,-0.777255237102509,0.621639728546143\n             ,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0675294324755669,-0.945460379123688,0.318660378456116\n             ,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.392426759004593,0.205112621188164,0.896621465682983\n             ,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.331932127475739,-0.817436873912811,0.470763176679611\n             ,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.390473067760468,-0.682946801185608,0.617344677448273\n             ,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.403418689966202,-0.482175469398499,0.777663290500641\n             ,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.390473067760468,-0.682946801185608,0.617344677448273\n             ,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.55286180973053,-0.0385416857898235,0.832381188869476\n             ,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.390473067760468,-0.682946801185608,0.617344677448273\n             ,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.617321014404297,0.0253577381372452,0.78630256652832\n             ,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.491244077682495,-0.115444600582123,0.863337576389313\n             ,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.617321014404297,0.0253577381372452,0.78630256652832\n             ,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.511095225811005,0.0877900868654251,0.855028986930847\n             ,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.640060782432556,0.00115585804451257,0.768323421478271\n             ,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.500701189041138,-0.0503258183598518,0.864156007766724\n             ,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.617321014404297,0.0253577381372452,0.78630256652832\n             ,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.571020781993866,-0.291943371295929,0.767270684242249\n             ,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.422783136367798,-0.0330428369343281,0.905628323554993\n             ,-0.671048521995544,0.370010554790497,0.642484307289124,-0.673884630203247,0.467902958393097,0.571792244911194\n             ,-0.713547646999359,0.198780298233032,0.671815574169159,-0.72460925579071,0.0771455466747284,0.684828460216522\n             ,-0.498029559850693,0.248690649867058,0.830734312534332,-0.484222084283829,0.366713851690292,0.794386506080627\n             ,-0.655175447463989,0.41560024023056,0.630889534950256,-0.671048521995544,0.370010554790497,0.642484307289124\n             ,-0.498029559850693,0.248690649867058,0.830734312534332,-0.671048521995544,0.370010554790497,0.642484307289124\n             ,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.493602007627487,-0.18142081797123,0.850554823875427\n             ,0.579925835132599,-0.717766225337982,-0.3853540122509,0.161769852042198,-0.974958479404449,0.152598813176155\n             ,0.24199965596199,-0.948591530323029,0.203986048698425,0.65024209022522,-0.683634519577026,-0.331404685974121\n             ,0.579925835132599,-0.717766225337982,-0.3853540122509,0.65024209022522,-0.683634519577026,-0.331404685974121\n             ,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.645713806152344,-0.220039650797844,-0.731188178062439\n             ,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.645713806152344,-0.220039650797844,-0.731188178062439\n             ,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.576868414878845,0.0959631279110909,-0.811180531978607\n             ,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.576868414878845,0.0959631279110909,-0.811180531978607\n             ,0.329197883605957,-0.229186490178108,-0.916025280952454,0.387454837560654,-0.142215475440025,-0.910853147506714\n             ,0.773029983043671,-0.340951681137085,-0.534954726696014,0.630495369434357,-0.750089466571808,-0.199602961540222\n             ,0.681055247783661,-0.346231341362,-0.645203530788422,0.708586275577545,-0.00218898337334394,-0.705620765686035\n             ,0.713780462741852,-0.04316745698452,-0.699037969112396,0.708586275577545,-0.00218898337334394,-0.705620765686035\n             ,0.681055247783661,-0.346231341362,-0.645203530788422,0.648240566253662,-0.463475733995438,-0.604131102561951\n             ,0.792737483978271,-0.494514644145966,-0.356402337551117,0.648240566253662,-0.463475733995438,-0.604131102561951\n             ,0.681055247783661,-0.346231341362,-0.645203530788422,0.630495369434357,-0.750089466571808,-0.199602961540222\n             ,0.894509136676788,-0.20981177687645,-0.394756108522415,0.928043901920319,-0.117735534906387,-0.3533735871315\n             ,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.955755293369293,-0.11410153657198,-0.27113202214241\n             ,0.890664577484131,-0.0774205401539803,0.448020815849304,0.955755293369293,-0.11410153657198,-0.27113202214241\n             ,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.888973355293274,0.214637205004692,0.404545694589615\n             ,0.76104062795639,0.645680010318756,0.0625654682517052,0.888973355293274,0.214637205004692,0.404545694589615\n             ,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.959632039070129,0.0862699821591377,-0.267701029777527\n             ,0.886527955532074,0.0429748557507992,-0.460674852132797,0.959632039070129,0.0862699821591377,-0.267701029777527\n             ,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.928043901920319,-0.117735534906387,-0.3533735871315\n             ,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.304556578397751,-0.909958362579346,0.281462401151657\n             ,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.419383674860001,-0.901702642440796,0.105117149651051\n             ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.890724420547485,-0.0131717119365931,-0.454352855682373\n             ,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.735505998134613,0.630867898464203,0.247055947780609\n             ,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.890724420547485,-0.0131717119365931,-0.454352855682373\n             ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.580071687698364,-0.808331191539764,-0.100586168467999\n             ,-0.432196706533432,-0.877966165542603,-0.205867424607277,-0.423251867294312,-0.8652303814888,-0.268764227628708\n             ,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.59330803155899,-0.795282304286957,-0.124545678496361\n             ,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.428953319787979,-0.860944986343384,-0.273446142673492\n             ,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.947893738746643,-0.165305480360985,0.272344529628754\n             ,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.959170579910278,-0.0044404505752027,0.282793402671814\n             ,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.947893738746643,-0.165305480360985,0.272344529628754\n             ,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.808385133743286,0.0124147878959775,0.588523030281067\n             ,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.734221398830414,-0.668789088726044,0.116790995001793\n             ,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.787305235862732,-0.612785577774048,0.0681484714150429\n             ,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.713214337825775,-0.70085734128952,-0.0111503517255187\n             ,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.713391602039337,-0.697049975395203,-0.0720673725008965\n             ,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.740522086620331,-0.668854534626007,0.065273717045784\n             ,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.635643780231476,-0.760042726993561,-0.135248005390167\n             ,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.768178582191467,-0.575125515460968,0.281304657459259\n             ,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.768178582191467,-0.575125515460968,0.281304657459259\n             ,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.80333799123764,-0.434850186109543,0.406882554292679\n             ,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.734221398830414,-0.668789088726044,0.116790995001793\n             ,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.713214337825775,-0.70085734128952,-0.0111503517255187\n             ,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.713214337825775,-0.70085734128952,-0.0111503517255187\n             ,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.648963153362274,-0.756622016429901,-0.0798120051622391\n             ,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.111326843500137,-0.985514283180237,0.127937391400337\n             ,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.303882002830505,-0.951589345932007,0.046188946813345\n             ,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.310964792966843,-0.937908291816711,0.153716951608658\n             ,-0.111326843500137,-0.985514283180237,0.127937391400337,-0.11665827780962,-0.95351368188858,0.277853488922119\n             ,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.434661060571671,-0.742193758487701,0.5101158618927\n             ,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.310964792966843,-0.937908291816711,0.153716951608658\n             ,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.419383674860001,-0.901702642440796,0.105117149651051\n             ,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.347470790147781,-0.852081894874573,0.391433894634247\n             ,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.450571924448013,-0.714681327342987,0.534991204738617\n             ,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.436592847108841,-0.8724405169487,0.219622910022736\n             ,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.722620606422424,0.556017577648163,0.410687148571014\n             ,-0.762500584125519,0.610563993453979,0.214019775390625,-0.72613924741745,0.535442233085632,0.431304275989532\n             ,-0.659900903701782,0.452796697616577,0.59958815574646,-0.722620606422424,0.556017577648163,0.410687148571014\n             ,-0.659900903701782,0.452796697616577,0.59958815574646,-0.794037878513336,0.353904455900192,0.49422213435173\n             ,-0.784657657146454,0.439340144395828,0.437370121479034,-0.704894602298737,0.389235317707062,0.592975080013275\n             ,-0.808332681655884,0.323168575763702,0.49209788441658,-0.746036350727081,0.393973112106323,0.536856591701508\n             ,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.709384381771088,-0.0485099703073502,0.703150451183319\n             ,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.742441892623901,0.401161223649979,0.53651624917984\n             ,-0.766035974025726,0.399132251739502,0.503867447376251,0.00262317061424255,-0.184787794947624,0.982774972915649\n             ,-0.360249727964401,-0.149908572435379,0.920732080936432,-0.299746423959732,0.0442999862134457,0.952989816665649\n             ,0.017973817884922,0.0102047342807055,0.999786376953125,-0.360249727964401,-0.149908572435379,0.920732080936432\n             ,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.664805889129639,0.056874256581068,0.74484795331955\n             ,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.837247967720032,-0.308187961578369,0.451703399419785\n             ,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.882139265537262,0.0501233264803886,0.468313992023468\n             ,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.64180713891983,-0.25287389755249,0.723973989486694\n             ,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.865811467170715,0.0343829169869423,0.499187588691711\n             ,-0.664805889129639,0.056874256581068,0.74484795331955,-0.859274387359619,0.29542076587677,0.417581170797348\n             ,-0.805146157741547,0.523773431777954,0.278210490942001,-0.722620606422424,0.556017577648163,0.410687148571014\n             ,-0.784657657146454,0.439340144395828,0.437370121479034,-0.773442804813385,0.436002254486084,0.460096001625061\n             ,-0.805146157741547,0.523773431777954,0.278210490942001,-0.762500584125519,0.610563993453979,0.214019775390625\n             ,-0.722620606422424,0.556017577648163,0.410687148571014,-0.0658838152885437,0.0649923235177994,0.995708465576172\n             ,-0.474541217088699,0.29422801733017,0.829602658748627,-0.466067016124725,0.290591061115265,0.835666418075562\n             ,-0.674032330513,0.408573538064957,0.615425109863281,-0.701379120349884,0.42103236913681,0.575151324272156,-0.736577808856964\n             ,0.297644317150116,0.607339262962341,-0.704894602298737,0.389235317707062,0.592975080013275,-0.709671497344971\n             ,0.473905295133591,0.521325349807739,-0.701379120349884,0.42103236913681,0.575151324272156,-0.674032330513,0.408573538064957\n             ,0.615425109863281,-0.700818002223969,0.442935287952423,0.559162259101868,-0.265877991914749,0.261434108018875\n             ,0.927879869937897,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.317165046930313,-0.11580903083086\n             ,0.941272854804993,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.314933896064758,-0.0157290305942297\n             ,0.948983252048492,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.352154672145844,-0.530555903911591\n             ,0.771036624908447,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.314933896064758,-0.0157290305942297\n             ,0.948983252048492,-0.489892512559891,0.122311964631081,0.863159954547882,-0.460973918437958,-0.302575647830963\n             ,0.834236800670624,-0.736584484577179,0.13217331469059,0.66330498456955,-0.664254903793335,-0.259532362222672\n             ,0.701005280017853,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.489892512559891,0.122311964631081\n             ,0.863159954547882,-0.736584484577179,0.13217331469059,0.66330498456955,-0.489892512559891,0.122311964631081\n             ,0.863159954547882,-0.451172351837158,0.441036701202393,0.775841593742371,-0.715115904808044,0.391270339488983\n             ,0.57923811674118,-0.715115904808044,0.391270339488983,0.57923811674118,-0.878912448883057,0.190948858857155\n             ,0.437094360589981,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.736584484577179,0.13217331469059\n             ,0.66330498456955,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.736584484577179,0.13217331469059\n             ,0.66330498456955,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.767993330955505,-0.301860928535461\n             ,0.564859509468079,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.847993731498718,-0.0830313712358475\n             ,0.523461937904358,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.785227119922638,-0.253755480051041\n             ,0.564824342727661,-0.918760776519775,0.045384906232357,0.392197400331497,-0.857923269271851,-0.161368548870087\n             ,0.487778455018997,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.878912448883057,0.190948858857155\n             ,0.437094360589981,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.664805889129639,0.056874256581068\n             ,0.74484795331955,-0.575338959693909,0.442981451749802,0.687570035457611,-0.185234054923058,0.48134982585907\n             ,0.856732606887817,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.709384381771088,-0.0485099703073502\n             ,0.703150451183319,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.910155653953552,-0.193675979971886\n             ,0.366205275058746,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.144208893179893,0.115719296038151\n             ,0.982757806777954,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.100514478981495,0.314375013113022\n             ,0.943962454795837,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.468296974897385,-0.39009964466095\n             ,0.792792677879334,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.20097516477108,-0.349854558706284\n             ,0.914992213249207,-0.468296974897385,-0.39009964466095,0.792792677879334,0.0440349131822586,-0.167181059718132\n             ,0.984942317008972,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.882139265537262,0.0501233264803886\n             ,0.468313992023468,-0.766035974025726,0.399132251739502,0.503867447376251,-0.782657444477081,0.380464553833008\n             ,0.4926398396492,-0.126811400055885,-0.181621968746185,0.975157618522644,0.0174392946064472,-0.157727032899857\n             ,0.987328767776489,0.134034633636475,-0.240539237856865,0.961340487003326,-0.0849227532744408,-0.304428428411484\n             ,0.948742032051086,-0.53751266002655,0.1327995210886,0.832733154296875,-0.615555763244629,0.148695304989815,0.773938477039337\n             ,-0.595763564109802,0.13890865445137,0.791056394577026,-0.527163207530975,0.108157083392143,0.842852890491486\n             ,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.703076124191284,0.0390988439321518,0.710038900375366\n             ,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.626051127910614,0.0937396511435509,0.774127185344696\n             ,-0.606947243213654,0.110988683998585,0.786953926086426,-0.626051127910614,0.0937396511435509,0.774127185344696\n             ,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.708724558353424,0.18108169734478,0.681849598884583\n             ,-0.774853527545929,0.101396143436432,0.62395578622818,-0.708724558353424,0.18108169734478,0.681849598884583\n             ,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.703076124191284,0.0390988439321518,0.710038900375366\n             ,-0.606947243213654,0.110988683998585,0.786953926086426,-0.578490018844604,0.0704870000481606,0.812638223171234\n             ,-0.582078754901886,0.152128055691719,0.798774898052216,-0.626051127910614,0.0937396511435509,0.774127185344696\n             ,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.626051127910614,0.0937396511435509,0.774127185344696\n             ,-0.582078754901886,0.152128055691719,0.798774898052216,-0.538357496261597,0.0919485241174698,0.837685286998749\n             ,-0.518675327301025,0.170822575688362,0.837732374668121,-0.527163207530975,0.108157083392143,0.842852890491486\n             ,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.538357496261597,0.0919485241174698,0.837685286998749\n             ,-0.527163207530975,0.108157083392143,0.842852890491486,-0.595763564109802,0.13890865445137,0.791056394577026\n             ,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.419887959957123,0.29813814163208,0.857209324836731\n             ,-0.35642284154892,0.221263155341148,0.907747387886047,-0.447176039218903,0.207748264074326,0.869985222816467\n             ,-0.692487776279449,0.122583940625191,0.71093875169754,-0.711035132408142,0.199701055884361,0.674202144145966\n             ,-0.419887959957123,0.29813814163208,0.857209324836731,-0.518675327301025,0.170822575688362,0.837732374668121\n             ,-0.447176039218903,0.207748264074326,0.869985222816467,-0.35642284154892,0.221263155341148,0.907747387886047\n             ,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.53751266002655,0.1327995210886,0.832733154296875\n             ,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.667788088321686,0.180951654911041,0.722021877765656\n             ,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.711035132408142,0.199701055884361,0.674202144145966\n             ,-0.847861528396606,0.113259613513947,0.517979800701141,-0.807841360569,0.43371844291687,0.399099737405777,-0.692487776279449\n             ,0.122583940625191,0.71093875169754,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.847861528396606\n             ,0.113259613513947,0.517979800701141,-0.711035132408142,0.199701055884361,0.674202144145966,-0.578490018844604\n             ,0.0704870000481606,0.812638223171234,-0.606947243213654,0.110988683998585,0.786953926086426,-0.530206859111786\n             ,0.100595757365227,0.841879546642303,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.51600193977356\n             ,0.0798369869589806,0.852858781814575,-0.530206859111786,0.100595757365227,0.841879546642303,-0.606947243213654\n             ,0.110988683998585,0.786953926086426,-0.573864758014679,0.230327397584915,0.785893499851227,-0.381201595067978\n             ,-0.312435179948807,0.870097458362579,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.482243537902832\n             ,-0.699907302856445,0.526849985122681,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.157473087310791\n             ,-0.645219802856445,0.747591853141785,0.033345639705658,-0.401991754770279,0.915035903453827,-0.0569505728781223\n             ,-0.381698995828629,0.922530472278595,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.366043508052826\n             ,-0.907773017883301,-0.204842254519463,-0.692233920097351,-0.67291522026062,0.260762959718704,-0.358404159545898\n             ,-0.845226526260376,0.396407097578049,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.561927437782288\n             ,-0.650319397449493,-0.511196792125702,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.692233920097351\n             ,-0.67291522026062,0.260762959718704,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.800594985485077\n             ,-0.588442921638489,0.113060474395752,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.954180955886841\n             ,-0.122847504913807,-0.272850096225739,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.561927437782288\n             ,-0.650319397449493,-0.511196792125702,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.561927437782288\n             ,-0.650319397449493,-0.511196792125702,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.954180955886841\n             ,-0.122847504913807,-0.272850096225739,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.180075973272324\n             ,-0.610178112983704,-0.771527945995331,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.366043508052826\n             ,-0.907773017883301,-0.204842254519463,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.963837623596191\n             ,0.235864251852036,0.124036490917206,-0.864985883235931,0.37462642788887,0.333847969770432,-0.936657905578613\n             ,0.0257524941116571,0.349297523498535,-0.735505998134613,0.630867898464203,0.247055947780609,-0.864985883235931\n             ,0.37462642788887,0.333847969770432,-0.963837623596191,0.235864251852036,0.124036490917206,-0.811837613582611\n             ,0.121092565357685,-0.571188449859619,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.267043441534042\n             ,-0.793497562408447,0.546854078769684,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.569225609302521\n             ,-0.734513640403748,0.369421064853668,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.569225609302521\n             ,-0.734513640403748,0.369421064853668,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.737712860107422\n             ,-0.674677968025208,0.0242776274681091,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.737712860107422\n             ,-0.674677968025208,0.0242776274681091,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.233076319098473\n             ,-0.804329991340637,0.546560764312744,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.233076319098473\n             ,-0.804329991340637,0.546560764312744,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.267043441534042\n             ,-0.793497562408447,0.546854078769684,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.00470763072371483\n             ,0.279436647891998,0.960152566432953,0.630376875400543,-0.0280195455998182,0.77578341960907,0.439482539892197\n             ,-0.499404758214951,0.74662572145462,0.485446602106094,-0.599754393100739,0.636110246181488,0.439482539892197\n             ,-0.499404758214951,0.74662572145462,0.630376875400543,-0.0280195455998182,0.77578341960907,0.775241792201996\n             ,-0.45661398768425,0.436467438936234,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.29678151011467\n             ,-0.786470353603363,0.541650354862213,-0.267043441534042,-0.793497562408447,0.546854078769684,-0.403418689966202\n             ,-0.482175469398499,0.777663290500641,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.267043441534042\n             ,-0.793497562408447,0.546854078769684,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.0667830258607864\n             ,-0.603913366794586,-0.794247210025787,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.816609680652618\n             ,-0.561123669147491,0.135236501693726,-0.890724420547485,-0.0131717119365931,-0.454352855682373,0.615995168685913\n             ,-0.740946054458618,0.267486304044724,0.408733516931534,-0.739542424678802,0.534802675247192,-0.575954735279083\n             ,-0.540566444396973,0.613240599632263,0.315651625394821,-0.933804154396057,0.168445229530334,0.615995168685913\n             ,-0.740946054458618,0.267486304044724,0.775241792201996,-0.45661398768425,0.436467438936234,0.408733516931534\n             ,-0.739542424678802,0.534802675247192,0.630376875400543,-0.0280195455998182,0.77578341960907,0.103311404585838\n             ,-0.0802608132362366,0.991405546665192,0.408733516931534,-0.739542424678802,0.534802675247192,0.775241792201996\n             ,-0.45661398768425,0.436467438936234,-0.575954735279083,-0.540566444396973,0.613240599632263,0.408733516931534\n             ,-0.739542424678802,0.534802675247192,0.103311404585838,-0.0802608132362366,0.991405546665192,-0.54303914308548\n             ,0.178987935185432,0.820409536361694,-0.00470763072371483,0.279436647891998,0.960152566432953,-0.54303914308548\n             ,0.178987935185432,0.820409536361694,0.103311404585838,-0.0802608132362366,0.991405546665192,0.630376875400543\n             ,-0.0280195455998182,0.77578341960907,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.54303914308548\n             ,0.178987935185432,0.820409536361694,-0.743858754634857,0.1927819699049,0.639929115772247,-0.00470763072371483\n             ,0.279436647891998,0.960152566432953,-0.531166195869446,0.151813089847565,0.833555817604065,-0.743858754634857\n             ,0.1927819699049,0.639929115772247,-0.54303914308548,0.178987935185432,0.820409536361694,-0.811837613582611,0.121092565357685\n             ,-0.571188449859619,-0.963837623596191,0.235864251852036,0.124036490917206,-0.954180955886841,-0.122847504913807\n             ,-0.272850096225739,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.963837623596191,0.235864251852036\n             ,0.124036490917206,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.85713666677475,-0.480864852666855\n             ,0.184623166918755,-0.774853527545929,0.101396143436432,0.62395578622818,-0.721355617046356,0.238694369792938\n             ,0.650131583213806,-0.668299674987793,0.334984093904495,0.664199709892273,-0.708724558353424,0.18108169734478\n             ,0.681849598884583,-0.606947243213654,0.110988683998585,0.786953926086426,-0.708724558353424,0.18108169734478\n             ,0.681849598884583,-0.668299674987793,0.334984093904495,0.664199709892273,-0.573864758014679,0.230327397584915\n             ,0.785893499851227,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.573864758014679,0.230327397584915\n             ,0.785893499851227,-0.668299674987793,0.334984093904495,0.664199709892273,-0.87983900308609,0.0556478500366211\n             ,0.47200283408165,-0.841734766960144,0.21214547753334,0.496464431285858,-0.87983900308609,0.0556478500366211\n             ,0.47200283408165,-0.668299674987793,0.334984093904495,0.664199709892273,-0.721355617046356,0.238694369792938\n             ,0.650131583213806,-0.721025288105011,0.149201020598412,0.676654696464539,-0.807132244110107,0.16207791864872\n             ,0.567686796188354,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.708662629127502,0.112244434654713\n             ,0.696561932563782,-0.721025288105011,0.149201020598412,0.676654696464539,-0.708662629127502,0.112244434654713\n             ,0.696561932563782,-0.595763564109802,0.13890865445137,0.791056394577026,-0.615555763244629,0.148695304989815\n             ,0.773938477039337,-0.77285635471344,0.360512226819992,0.522229790687561,-0.903163015842438,0.185778304934502\n             ,0.387017965316772,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.841734766960144,0.21214547753334\n             ,0.496464431285858,-0.903163015842438,0.185778304934502,0.387017965316772,-0.77285635471344,0.360512226819992\n             ,0.522229790687561,-0.800202667713165,0.314497977495193,0.510653257369995,-0.721025288105011,0.149201020598412\n             ,0.676654696464539,-0.615555763244629,0.148695304989815,0.773938477039337,-0.617874979972839,-0.144242078065872\n             ,0.772932589054108,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.807132244110107,0.16207791864872\n             ,0.567686796188354,-0.721025288105011,0.149201020598412,0.676654696464539,-0.74636310338974,-0.0243592355400324\n             ,0.665093064308167,-0.809095621109009,0.140354558825493,0.570670545101166,-0.978964686393738,0.106371738016605\n             ,0.174106821417809,-0.93869537115097,0.246357470750809,0.241161808371544,-0.959026336669922,0.206695169210434\n             ,0.193766981363297,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.973734021186829,-0.0321761183440685\n             ,0.225403621792793,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.959026336669922,0.206695169210434\n             ,0.193766981363297,-0.961905956268311,0.126988083124161,0.242096945643425,-0.92311555147171,0.291509866714478\n             ,0.250758200883865,-0.961905956268311,0.126988083124161,0.242096945643425,-0.959026336669922,0.206695169210434\n             ,0.193766981363297,-0.935693740844727,0.265559196472168,0.232283264398575,-0.927535772323608,0.260400146245956\n             ,0.26808425784111,-0.935693740844727,0.265559196472168,0.232283264398575,-0.959026336669922,0.206695169210434\n             ,0.193766981363297,-0.93869537115097,0.246357470750809,0.241161808371544,-0.978964686393738,0.106371738016605\n             ,0.174106821417809,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.951185405254364,-0.150061026215553\n             ,0.2696812748909,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.903163015842438,0.185778304934502\n             ,0.387017965316772,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.951185405254364,-0.150061026215553\n             ,0.2696812748909,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.9692302942276,-0.185824662446976,0.161436811089516\n             ,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.951185405254364,-0.150061026215553,0.2696812748909\n             ,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.807132244110107,0.16207791864872,0.567686796188354\n             ,-0.809095621109009,0.140354558825493,0.570670545101166,-0.845765233039856,0.182700246572495,0.501300096511841\n             ,-0.800202667713165,0.314497977495193,0.510653257369995,-0.800202667713165,0.314497977495193,0.510653257369995\n             ,-0.845765233039856,0.182700246572495,0.501300096511841,-0.864785015583038,0.227262705564499,0.447770565748215\n             ,-0.903163015842438,0.185778304934502,0.387017965316772,-0.873595476150513,0.228950142860413,0.429433107376099\n             ,-0.864785015583038,0.227262705564499,0.447770565748215,-0.845765233039856,0.182700246572495,0.501300096511841\n             ,-0.868421196937561,0.174519643187523,0.46409860253334,-0.830214977264404,0.100066982209682,0.548388242721558\n             ,-0.868421196937561,0.174519643187523,0.46409860253334,-0.845765233039856,0.182700246572495,0.501300096511841\n             ,-0.809095621109009,0.140354558825493,0.570670545101166,-0.906570792198181,0.0384938083589077,0.42029470205307\n             ,-0.868421196937561,0.174519643187523,0.46409860253334,-0.830214977264404,0.100066982209682,0.548388242721558\n             ,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.873595476150513,0.228950142860413,0.429433107376099\n             ,-0.868421196937561,0.174519643187523,0.46409860253334,-0.906570792198181,0.0384938083589077,0.42029470205307\n             ,-0.927467882633209,0.10914921015501,0.357616752386093,-0.74636310338974,-0.0243592355400324,0.665093064308167\n             ,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.874930620193481,-0.0546998046338558,0.481148958206177\n             ,-0.830214977264404,0.100066982209682,0.548388242721558,-0.374559938907623,-0.262731373310089,0.889200270175934\n             ,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.666117191314697,0.0638493075966835,0.743109107017517\n             ,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.666117191314697,0.0638493075966835,0.743109107017517\n             ,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.159300580620766,0.0403820462524891,0.98640388250351\n             ,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.159300580620766,0.0403820462524891,0.98640388250351\n             ,-0.144208893179893,0.115719296038151,0.982757806777954,-0.466067016124725,0.290591061115265,0.835666418075562\n             ,-0.742441892623901,0.401161223649979,0.53651624917984,-0.381201595067978,-0.312435179948807,0.870097458362579\n             ,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.709384381771088,-0.0485099703073502,0.703150451183319\n             ,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.137671425938606,0.655901074409485,0.742186188697815\n             ,-0.185234054923058,0.48134982585907,0.856732606887817,-0.575338959693909,0.442981451749802,0.687570035457611\n             ,-0.570384085178375,0.537651479244232,0.62096118927002,-0.299746423959732,0.0442999862134457,0.952989816665649\n             ,-0.185234054923058,0.48134982585907,0.856732606887817,0.0513622872531414,0.468802571296692,0.881808400154114\n             ,0.017973817884922,0.0102047342807055,0.999786376953125,-0.782657444477081,0.380464553833008,0.4926398396492\n             ,-0.766035974025726,0.399132251739502,0.503867447376251,-0.71884548664093,0.434318542480469,0.542796969413757\n             ,-0.724688529968262,0.437472999095917,0.532394528388977,-0.766035974025726,0.399132251739502,0.503867447376251\n             ,-0.742441892623901,0.401161223649979,0.53651624917984,-0.745189905166626,0.433578848838806,0.506657063961029\n             ,-0.71884548664093,0.434318542480469,0.542796969413757,-0.704894602298737,0.389235317707062,0.592975080013275\n             ,-0.649461984634399,0.424084842205048,0.631150722503662,-0.674032330513,0.408573538064957,0.615425109863281,-0.162020102143288\n             ,0.560337007045746,0.812263488769531,0.0571579374372959,0.555576980113983,0.829498171806335,0.0635503008961678\n             ,0.655404150485992,0.752600014209747,-0.137671425938606,0.655901074409485,0.742186188697815,-0.162020102143288\n             ,0.560337007045746,0.812263488769531,-0.137671425938606,0.655901074409485,0.742186188697815,-0.570384085178375\n             ,0.537651479244232,0.62096118927002,-0.636985540390015,0.443951308727264,0.630203664302826,-0.71884548664093\n             ,0.434318542480469,0.542796969413757,-0.745189905166626,0.433578848838806,0.506657063961029,-0.709671497344971\n             ,0.473905295133591,0.521325349807739,-0.700818002223969,0.442935287952423,0.559162259101868,-0.700818002223969\n             ,0.442935287952423,0.559162259101868,-0.75682544708252,0.389968425035477,0.524537801742554,-0.724688529968262\n             ,0.437472999095917,0.532394528388977,-0.71884548664093,0.434318542480469,0.542796969413757,-0.782657444477081\n             ,0.380464553833008,0.4926398396492,-0.724688529968262,0.437472999095917,0.532394528388977,-0.75682544708252,0.389968425035477\n             ,0.524537801742554,-0.570384085178375,0.537651479244232,0.62096118927002,-0.575338959693909,0.442981451749802\n             ,0.687570035457611,-0.803570151329041,0.341960042715073,0.487173795700073,-0.636985540390015,0.443951308727264\n             ,0.630203664302826,-0.570384085178375,0.537651479244232,0.62096118927002,-0.75682544708252,0.389968425035477\n             ,0.524537801742554,-0.649461984634399,0.424084842205048,0.631150722503662,-0.803570151329041,0.341960042715073\n             ,0.487173795700073,-0.75682544708252,0.389968425035477,0.524537801742554,-0.700818002223969,0.442935287952423\n             ,0.559162259101868,-0.674032330513,0.408573538064957,0.615425109863281,-0.474541217088699,0.29422801733017,0.829602658748627\n             ,-0.402321964502335,0.279689967632294,0.871728479862213,-0.709671497344971,0.473905295133591,0.521325349807739\n             ,-0.745189905166626,0.433578848838806,0.506657063961029,-0.466067016124725,0.290591061115265,0.835666418075562\n             ,-0.474541217088699,0.29422801733017,0.829602658748627,-0.745189905166626,0.433578848838806,0.506657063961029\n             ,-0.742441892623901,0.401161223649979,0.53651624917984,-0.566419124603271,0.446817666292191,0.692476272583008\n             ,-0.701379120349884,0.42103236913681,0.575151324272156,-0.709671497344971,0.473905295133591,0.521325349807739\n             ,-0.402321964502335,0.279689967632294,0.871728479862213,-0.271942734718323,0.215774357318878,0.93781054019928\n             ,-0.566419124603271,0.446817666292191,0.692476272583008,-0.271942734718323,0.215774357318878,0.93781054019928\n             ,-0.158640176057816,0.0965946391224861,0.982600033283234,-0.389257401227951,0.367899239063263,0.844469547271729\n             ,-0.235767140984535,0.346122115850449,0.908082246780396,-0.313661307096481,0.354362040758133,0.88093364238739\n             ,-0.362064868211746,0.124421969056129,0.923811793327332,-0.298522680997849,0.122926026582718,0.946453094482422\n             ,-0.406924575567245,0.55693382024765,0.724042177200317,-0.296029925346375,0.469678968191147,0.831725895404816\n             ,-0.313661307096481,0.354362040758133,0.88093364238739,-0.319937378168106,0.457704126834869,0.829546272754669\n             ,-0.530960738658905,0.402330845594406,0.74579530954361,-0.362064868211746,0.124421969056129,0.923811793327332\n             ,-0.313661307096481,0.354362040758133,0.88093364238739,-0.296029925346375,0.469678968191147,0.831725895404816\n             ,-0.265877991914749,0.261434108018875,0.927879869937897,-0.410987347364426,-0.221517965197563,0.884318470954895\n             ,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.422395497560501,-0.639552056789398,0.642304599285126\n             ,-0.450571924448013,-0.714681327342987,0.534991204738617,-0.298522680997849,0.122926026582718,0.946453094482422\n             ,-0.362064868211746,0.124421969056129,0.923811793327332,-0.435046851634979,-0.178151845932007,0.882607579231262\n             ,-0.410987347364426,-0.221517965197563,0.884318470954895,0.139874473214149,0.332423865795136,0.932700097560883\n             ,-0.113911136984825,0.222564980387688,0.968240201473236,-0.38422480225563,0.137366592884064,0.912963151931763\n             ,-0.496900916099548,0.22183683514595,0.838974297046661,-0.259019255638123,0.306849449872971,0.915834307670593\n             ,-0.365421146154404,0.118911430239677,0.923215806484222,-0.459187179803848,0.12899711728096,0.878923714160919\n             ,-0.365421146154404,0.118911430239677,0.923215806484222,-0.259019255638123,0.306849449872971,0.915834307670593\n             ,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.215113177895546,0.235299572348595,0.947818756103516\n             ,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.259019255638123,0.306849449872971,0.915834307670593\n             ,-0.284513026475906,0.431574016809464,0.856035172939301,-0.235767140984535,0.346122115850449,0.908082246780396\n             ,-0.427875101566315,0.308164179325104,0.849680960178375,-0.284513026475906,0.431574016809464,0.856035172939301\n             ,-0.259019255638123,0.306849449872971,0.915834307670593,-0.496900916099548,0.22183683514595,0.838974297046661\n             ,-0.235767140984535,0.346122115850449,0.908082246780396,-0.284513026475906,0.431574016809464,0.856035172939301\n             ,-0.319937378168106,0.457704126834869,0.829546272754669,-0.313661307096481,0.354362040758133,0.88093364238739\n             ,-0.419355839490891,0.314480572938919,0.851611793041229,-0.319937378168106,0.457704126834869,0.829546272754669\n             ,-0.284513026475906,0.431574016809464,0.856035172939301,-0.427875101566315,0.308164179325104,0.849680960178375\n             ,-0.0850988999009132,0.32578244805336,0.941607117652893,-0.0748888924717903,0.185519590973854,0.979782700538635\n             ,0.0812274590134621,0.180781692266464,0.980163276195526,0.0307731032371521,0.261024415493011,0.964841604232788\n             ,-0.786397933959961,0.197700291872025,0.58522891998291,-0.548411548137665,0.270011872053146,0.791415393352509\n             ,-0.590761244297028,0.21027672290802,0.778963983058929,-0.8270303606987,0.233872473239899,0.511198997497559,-0.530960738658905\n             ,0.402330845594406,0.74579530954361,-0.548411548137665,0.270011872053146,0.791415393352509,-0.786397933959961\n             ,0.197700291872025,0.58522891998291,-0.737271249294281,0.345291316509247,0.580693602561951,-0.548411548137665\n             ,0.270011872053146,0.791415393352509,-0.419355839490891,0.314480572938919,0.851611793041229,-0.409960985183716\n             ,0.234984055161476,0.881314098834991,-0.590761244297028,0.21027672290802,0.778963983058929,-0.419355839490891\n             ,0.314480572938919,0.851611793041229,-0.548411548137665,0.270011872053146,0.791415393352509,-0.530960738658905\n             ,0.402330845594406,0.74579530954361,-0.319937378168106,0.457704126834869,0.829546272754669,0.0340906009078026\n             ,0.177746370434761,0.983485698699951,0.0145859681069851,0.146671071648598,0.989077806472778,0.0307504720985889\n             ,0.178748592734337,0.983414113521576,0.0284836571663618,0.148866042494774,0.988447070121765,0.0145859681069851\n             ,0.146671071648598,0.989077806472778,-0.109741598367691,0.221520185470581,0.968961119651794,0.0381993055343628\n             ,0.285694986581802,0.957558989524841,0.0307504720985889,0.178748592734337,0.983414113521576,-0.521145462989807\n             ,0.365769624710083,0.771116077899933,-0.52777773141861,0.480110883712769,0.700674116611481,-0.593105614185333\n             ,0.348213493824005,0.725929081439972,-0.469541937112808,0.464283794164658,0.750979959964752,-0.593105614185333\n             ,0.348213493824005,0.725929081439972,-0.52777773141861,0.480110883712769,0.700674116611481,-0.542732357978821\n             ,0.501746475696564,0.673566699028015,-0.125368878245354,0.424985140562058,0.896476626396179,-0.229512825608253\n             ,0.568260371685028,0.790192425251007,-0.279750615358353,0.610641419887543,0.74084860086441,-0.20940063893795\n             ,0.453145354986191,0.866493284702301,-0.16978645324707,0.304286330938339,0.937327265739441,-0.0915354415774345\n             ,0.261345416307449,0.960895359516144,-0.125368878245354,0.424985140562058,0.896476626396179,-0.20940063893795\n             ,0.453145354986191,0.866493284702301,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.229512825608253\n             ,0.568260371685028,0.790192425251007,-0.125368878245354,0.424985140562058,0.896476626396179,0.0543623231351376\n             ,0.513473629951477,0.85638165473938,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.125368878245354\n             ,0.424985140562058,0.896476626396179,0.045425571501255,0.382962375879288,0.922646403312683,-0.317165046930313\n             ,-0.11580903083086,0.941272854804993,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.362064868211746\n             ,0.124421969056129,0.923811793327332,-0.265877991914749,0.261434108018875,0.927879869937897,-0.352154672145844\n             ,-0.530555903911591,0.771036624908447,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.435046851634979\n             ,-0.178151845932007,0.882607579231262,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.29602313041687\n             ,-0.765856146812439,0.57081925868988,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.450571924448013\n             ,-0.714681327342987,0.534991204738617,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.347470790147781\n             ,-0.852081894874573,0.391433894634247,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.24947227537632\n             ,-0.924226999282837,0.289081335067749,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.271065413951874\n             ,-0.201962277293205,0.941134810447693,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.196050360798836\n             ,-0.216366931796074,0.956425428390503,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.251964539289474\n             ,0.00403303280472755,0.967728078365326,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.196050360798836\n             ,-0.216366931796074,0.956425428390503,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.511095225811005\n             ,0.0877900868654251,0.855028986930847,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.271065413951874\n             ,-0.201962277293205,0.941134810447693,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.620847463607788\n             ,0.0176430195569992,0.783732831478119,-0.628194212913513,0.287138849496841,0.723134398460388,-0.543807446956635\n             ,0.220993861556053,0.809589505195618,-0.530328452587128,0.10359351336956,0.841439306735992,-0.544984936714172\n             ,0.0565603822469711,0.836535930633545,-0.578717350959778,0.160483196377754,0.799582004547119,-0.522611916065216\n             ,0.119792513549328,0.844112873077393,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.500701189041138\n             ,-0.0503258183598518,0.864156007766724,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.578717350959778\n             ,0.160483196377754,0.799582004547119,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.511095225811005\n             ,0.0877900868654251,0.855028986930847,-0.522611916065216,0.119792513549328,0.844112873077393,-0.543807446956635\n             ,0.220993861556053,0.809589505195618,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.281761676073074\n             ,-0.0540490485727787,0.957960903644562,-0.628194212913513,0.287138849496841,0.723134398460388,-0.308251351118088\n             ,0.00680266646668315,0.951280653476715,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.543807446956635\n             ,0.220993861556053,0.809589505195618,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.308251351118088\n             ,0.00680266646668315,0.951280653476715,-0.628194212913513,0.287138849496841,0.723134398460388,-0.739963114261627\n             ,0.167704880237579,0.651405930519104,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.604022920131683\n             ,-0.106749713420868,0.789785325527191,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.53056800365448\n             ,-0.207617223262787,0.821822762489319,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.604022920131683\n             ,-0.106749713420868,0.789785325527191,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.545112073421478\n             ,-0.349918723106384,0.761846244335175,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.59464293718338\n             ,-0.168359830975533,0.786164581775665,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.135216936469078\n             ,-0.381399750709534,0.914467394351959,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.59464293718338\n             ,-0.168359830975533,0.786164581775665,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.500701189041138\n             ,-0.0503258183598518,0.864156007766724,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.323468834161758\n             ,-0.409916341304779,0.85284024477005,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.252474844455719\n             ,-0.0950261279940605,0.962926030158997,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.323468834161758\n             ,-0.409916341304779,0.85284024477005,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.633282124996185\n             ,-0.25443509221077,0.730901181697845,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.704939186573029\n             ,-0.235216736793518,0.669129133224487,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.323468834161758\n             ,-0.409916341304779,0.85284024477005,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.704939186573029\n             ,-0.235216736793518,0.669129133224487,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.800495445728302\n             ,-0.125636011362076,0.586022734642029,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.873239040374756\n             ,-0.0713295936584473,0.482043266296387,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.800495445728302\n             ,-0.125636011362076,0.586022734642029,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.800495445728302\n             ,-0.125636011362076,0.586022734642029,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.902154207229614\n             ,-0.0625928491353989,0.42684879899025,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.896919310092926\n             ,-0.0747082084417343,0.435837626457214,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.886639893054962\n             ,-0.0635407567024231,0.458074539899826,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.874930620193481\n             ,-0.0546998046338558,0.481148958206177,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.924965918064117\n             ,-0.0129916705191135,0.379827976226807,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.906570792198181\n             ,0.0384938083589077,0.42029470205307,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.927467882633209\n             ,0.10914921015501,0.357616752386093,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.939677178859711\n             ,-0.021852383390069,0.341363847255707,-0.951293051242828,0.220237165689468,0.215724766254425,-0.927467882633209\n             ,0.10914921015501,0.357616752386093,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.939677178859711\n             ,-0.021852383390069,0.341363847255707,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.902154207229614\n             ,-0.0625928491353989,0.42684879899025,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.446160137653351\n             ,-0.556800782680511,0.700652599334717,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.352613061666489\n             ,-0.495931386947632,0.793546497821808,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.741787433624268\n             ,-0.27885103225708,0.609912693500519,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.704939186573029\n             ,-0.235216736793518,0.669129133224487,-0.741787433624268,-0.27885103225708,0.609912693500519,-0.785227119922638\n             ,-0.253755480051041,0.564824342727661,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.0850988999009132\n             ,0.32578244805336,0.941607117652893,-0.444485455751419,0.263989001512527,0.856003820896149,-0.459187179803848\n             ,0.12899711728096,0.878923714160919,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.506407201290131\n             ,0.224265813827515,0.832620322704315,-0.444485455751419,0.263989001512527,0.856003820896149,-0.409337908029556\n             ,0.315496683120728,0.856098294258118,-0.49151623249054,0.284042507410049,0.823244571685791,-0.49151623249054\n             ,0.284042507410049,0.823244571685791,-0.409337908029556,0.315496683120728,0.856098294258118,-0.352872759103775\n             ,0.327800124883652,0.87637197971344,-0.521145462989807,0.365769624710083,0.771116077899933,-0.593105614185333\n             ,0.348213493824005,0.725929081439972,-0.352872759103775,0.327800124883652,0.87637197971344,-0.409337908029556\n             ,0.315496683120728,0.856098294258118,-0.137076109647751,0.352542161941528,0.925701975822449,-0.197477996349335\n             ,0.340727478265762,0.919188320636749,-0.137076109647751,0.352542161941528,0.925701975822449,-0.409337908029556\n             ,0.315496683120728,0.856098294258118,-0.444485455751419,0.263989001512527,0.856003820896149,-0.0850988999009132\n             ,0.32578244805336,0.941607117652893,-0.137076109647751,0.352542161941528,0.925701975822449,-0.0867536216974258\n             ,0.288804531097412,0.953449428081512,-0.16978645324707,0.304286330938339,0.937327265739441,-0.197477996349335\n             ,0.340727478265762,0.919188320636749,-0.0850988999009132,0.32578244805336,0.941607117652893,0.0307731032371521\n             ,0.261024415493011,0.964841604232788,-0.0867536216974258,0.288804531097412,0.953449428081512,-0.137076109647751\n             ,0.352542161941528,0.925701975822449,0.0340906009078026,0.177746370434761,0.983485698699951,0.0307731032371521\n             ,0.261024415493011,0.964841604232788,0.0812274590134621,0.180781692266464,0.980163276195526,0.0145859681069851\n             ,0.146671071648598,0.989077806472778,-0.365421146154404,0.118911430239677,0.923215806484222,-0.113911136984825\n             ,0.222564980387688,0.968240201473236,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.459187179803848\n             ,0.12899711728096,0.878923714160919,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.113911136984825\n             ,0.222564980387688,0.968240201473236,0.0879488736391068,0.341627478599548,0.935711324214935,0.0812274590134621\n             ,0.180781692266464,0.980163276195526,0.0812274590134621,0.180781692266464,0.980163276195526,0.0879488736391068\n             ,0.341627478599548,0.935711324214935,-0.109741598367691,0.221520185470581,0.968961119651794,0.0145859681069851\n             ,0.146671071648598,0.989077806472778,0.0879488736391068,0.341627478599548,0.935711324214935,0.0744598954916,0.293609887361526\n             ,0.953020930290222,-0.109741598367691,0.221520185470581,0.968961119651794,-0.273772716522217,0.454653739929199\n             ,0.847548484802246,-0.197477996349335,0.340727478265762,0.919188320636749,-0.16978645324707,0.304286330938339\n             ,0.937327265739441,-0.20940063893795,0.453145354986191,0.866493284702301,-0.352872759103775,0.327800124883652\n             ,0.87637197971344,-0.197477996349335,0.340727478265762,0.919188320636749,-0.273772716522217,0.454653739929199\n             ,0.847548484802246,-0.521145462989807,0.365769624710083,0.771116077899933,-0.521145462989807,0.365769624710083\n             ,0.771116077899933,-0.273772716522217,0.454653739929199,0.847548484802246,-0.346435993909836,0.570491790771484\n             ,0.744661808013916,-0.52777773141861,0.480110883712769,0.700674116611481,-0.917084217071533,0.247074887156487\n             ,0.312906622886658,-0.915071547031403,0.269603192806244,0.299930244684219,-0.893653392791748,0.274633705615997\n             ,0.354908317327499,-0.913878262042999,0.245342120528221,0.323471456766129,-0.913878262042999,0.245342120528221\n             ,0.323471456766129,-0.893653392791748,0.274633705615997,0.354908317327499,-0.90123462677002,0.253379285335541\n             ,0.351532429456711,-0.933935105800629,0.157070308923721,0.321082711219788,-0.92679888010025,0.171274200081825\n             ,0.334228843450546,-0.919987142086029,0.260143458843231,0.293170690536499,-0.915071547031403,0.269603192806244\n             ,0.299930244684219,-0.917084217071533,0.247074887156487,0.312906622886658,-0.939980566501617,0.104119330644608\n             ,0.324954867362976,-0.893953561782837,0.312333762645721,0.321394920349121,-0.903283476829529,0.306006491184235\n             ,0.30073082447052,-0.946860730648041,0.157310754060745,0.280549645423889,-0.945931136608124,0.172555223107338\n             ,0.274661630392075,-0.946860730648041,0.157310754060745,0.280549645423889,-0.903283476829529,0.306006491184235\n             ,0.30073082447052,-0.921472430229187,0.268827170133591,0.280393421649933,-0.915071547031403,0.269603192806244\n             ,0.299930244684219,-0.921472430229187,0.268827170133591,0.280393421649933,-0.903283476829529,0.306006491184235\n             ,0.30073082447052,-0.893653392791748,0.274633705615997,0.354908317327499,-0.90123462677002,0.253379285335541\n             ,0.351532429456711,-0.893653392791748,0.274633705615997,0.354908317327499,-0.903283476829529,0.306006491184235\n             ,0.30073082447052,-0.893953561782837,0.312333762645721,0.321394920349121,-0.945931136608124,0.172555223107338\n             ,0.274661630392075,-0.921472430229187,0.268827170133591,0.280393421649933,-0.934037208557129,0.242426365613937\n             ,0.262305021286011,-0.915071547031403,0.269603192806244,0.299930244684219,-0.919987142086029,0.260143458843231\n             ,0.293170690536499,-0.934037208557129,0.242426365613937,0.262305021286011,-0.921472430229187,0.268827170133591\n             ,0.280393421649933,-0.974589943885803,0.150285556912422,0.166098326444626,-0.931853711605072,0.224255800247192\n             ,0.285233229398727,-0.958487570285797,0.190219804644585,0.212409943342209,-0.929433286190033,0.240452021360397\n             ,0.27988663315773,-0.958487570285797,0.190219804644585,0.212409943342209,-0.931853711605072,0.224255800247192\n             ,0.285233229398727,-0.919987142086029,0.260143458843231,0.293170690536499,-0.917084217071533,0.247074887156487\n             ,0.312906622886658,-0.920456767082214,0.196246728301048,0.338003754615784,-0.92679888010025,0.171274200081825\n             ,0.334228843450546,-0.960206747055054,0.212085798382759,0.18172125518322,-0.937809467315674,0.204933196306229\n             ,0.280206710100174,-0.945931136608124,0.172555223107338,0.274661630392075,-0.934037208557129,0.242426365613937\n             ,0.262305021286011,-0.931853711605072,0.224255800247192,0.285233229398727,-0.934037208557129,0.242426365613937\n             ,0.262305021286011,-0.919987142086029,0.260143458843231,0.293170690536499,-0.38422480225563,0.137366592884064\n             ,0.912963151931763,-0.451660662889481,0.11085283011198,0.88527637720108,-0.0374716036021709,0.192808955907822\n             ,0.98052054643631,0.139874473214149,0.332423865795136,0.932700097560883,-0.311408758163452,-0.316491156816483\n             ,0.896023392677307,-0.451660662889481,0.11085283011198,0.88527637720108,-0.110501579940319,0.212603434920311\n             ,0.970870316028595,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.104054369032383,-0.821656465530396\n             ,0.560404658317566,-0.0737119764089584,-0.466615557670593,0.881383299827576,-0.311408758163452,-0.316491156816483\n             ,0.896023392677307,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.11665827780962,-0.95351368188858\n             ,0.277853488922119,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.173821628093719,-0.808952331542969\n             ,0.561588943004608,-0.0374716036021709,0.192808955907822,0.98052054643631,-0.451660662889481,0.11085283011198\n             ,0.88527637720108,-0.069260835647583,0.0269219465553761,0.997235238552094,-0.929433286190033,0.240452021360397\n             ,0.27988663315773,-0.919987142086029,0.260143458843231,0.293170690536499,-0.92679888010025,0.171274200081825\n             ,0.334228843450546,-0.920456767082214,0.196246728301048,0.338003754615784,-0.938261330127716,0.284641981124878\n             ,0.196582421660423,-0.930616736412048,0.324010014533997,0.170205876231194,-0.912839949131012,0.366738528013229\n             ,0.179516360163689,-0.921404659748077,0.300344526767731,0.246589884161949,-0.930616736412048,0.324010014533997\n             ,0.170205876231194,-0.938261330127716,0.284641981124878,0.196582421660423,-0.929433286190033,0.240452021360397\n             ,0.27988663315773,-0.920456767082214,0.196246728301048,0.338003754615784,-0.187731966376305,-0.0942238569259644\n             ,0.977690398693085,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.1817886531353,-0.326981544494629\n             ,0.927381277084351,-0.0110307689756155,-0.0793537572026253,0.996785461902618,0.0270153284072876,-0.276360064744949\n             ,0.960674405097961,-0.0110307689756155,-0.0793537572026253,0.996785461902618,-0.1817886531353,-0.326981544494629\n             ,0.927381277084351,-0.0569505728781223,-0.381698995828629,0.922530472278595,-0.251352518796921,-0.520119905471802\n             ,0.816270291805267,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.382226258516312,-0.867592990398407\n             ,0.31809663772583,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.381201595067978,-0.312435179948807\n             ,0.870097458362579,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.313734799623489,-0.862539172172546\n             ,0.396984457969666,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.237282007932663,-0.615076303482056\n             ,0.751916527748108,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.304556578397751,-0.909958362579346\n             ,0.281462401151657,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.251352518796921,-0.520119905471802\n             ,0.816270291805267,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.374559938907623,-0.262731373310089\n             ,0.889200270175934,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.237282007932663,-0.615076303482056\n             ,0.751916527748108,-0.0569505728781223,-0.381698995828629,0.922530472278595,-0.1817886531353,-0.326981544494629\n             ,0.927381277084351,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.296231538057327,-0.0182613059878349\n             ,0.95494157075882,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.0252015665173531,-0.364970922470093\n             ,0.930677771568298,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.611212015151978,0.257414042949677\n             ,0.74843692779541,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.296231538057327,-0.0182613059878349\n             ,0.95494157075882,-0.447645485401154,0.239924728870392,0.861423015594482,-0.611212015151978,0.257414042949677\n             ,0.74843692779541,-0.447645485401154,0.239924728870392,0.861423015594482,-0.438263714313507,0.241573825478554\n             ,0.865775406360626,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.281328231096268,0.118911549448967\n             ,0.952215552330017,-0.438263714313507,0.241573825478554,0.865775406360626,-0.462802797555923,0.335958212614059\n             ,0.820332646369934,-0.389257401227951,0.367899239063263,0.844469547271729,-0.365840524435043,0.0561637468636036\n             ,0.928981363773346,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.281328231096268,0.118911549448967\n             ,0.952215552330017,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.176067680120468,0.0148913562297821\n             ,0.984265387058258,-0.126811400055885,-0.181621968746185,0.975157618522644,-0.395585596561432,-0.109408371150494\n             ,0.911889135837555,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.126811400055885,-0.181621968746185\n             ,0.975157618522644,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.401081025600433,-0.243629589676857\n             ,0.883050739765167,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.0849227532744408,-0.304428428411484\n             ,0.948742032051086,-0.0424226783216,0.296286582946777,0.954156458377838,-0.284841567277908,0.292440235614777\n             ,0.912876784801483,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.00044033964513801,0.857838094234467\n             ,0.51391988992691,-0.284841567277908,0.292440235614777,0.912876784801483,-0.0424226783216,0.296286582946777,0.954156458377838\n             ,0.0171615201979876,0.876817524433136,0.480516880750656,-0.00044033964513801,0.857838094234467,0.51391988992691\n             ,0.0171615201979876,0.876817524433136,0.480516880750656,-0.004028111230582,0.993554711341858,-0.113281942903996\n             ,0.225808262825012,0.957561135292053,-0.179129242897034,-0.417269796133041,-0.358331203460693,0.835155487060547\n             ,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.473101943731308,-0.0187131706625223,0.88080894947052\n             ,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.473101943731308,-0.0187131706625223,0.88080894947052\n             ,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.365840524435043,0.0561637468636036,0.928981363773346\n             ,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.316211640834808,-0.127585977315903,0.94007021188736\n             ,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.665225088596344,-0.442761093378067,0.601197302341461\n             ,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.538346290588379,-0.311954945325851,0.782858490943909\n             ,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.623706221580505,-0.429783433675766,0.652898728847504\n             ,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.554198384284973,-0.301848381757736,0.775726556777954\n             ,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.559306979179382,-0.466573625802994,0.685189545154572\n             ,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.417269796133041,-0.358331203460693,0.835155487060547\n             ,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.857923269271851,-0.161368548870087,0.487778455018997\n             ,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.797025501728058,-0.136790543794632,0.588250517845154\n             ,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.918760776519775,0.045384906232357,0.392197400331497\n             ,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.873239040374756,-0.0713295936584473,0.482043266296387\n             ,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.951293051242828,0.220237165689468,0.215724766254425\n             ,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.938549876213074,0.168846443295479,0.301023334264755\n             ,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.994882166385651,0.0616574659943581,0.0800485610961914\n             ,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.968760967254639,-0.0961536914110184,0.228597268462181\n             ,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.994474828243256,0.0728728324174881,0.0755601078271866\n             ,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.994882166385651,0.0616574659943581,0.0800485610961914\n             ,-0.6051185131073,0.474284201860428,0.639441967010498,-0.854055345058441,0.17005829513073,0.4915991127491,-0.800284266471863\n             ,0.299557894468308,0.519432485103607,-0.694730341434479,0.390507906675339,0.604030907154083,0.116292431950569\n             ,0.478548794984818,0.870325863361359,-0.0183928888291121,0.5789715051651,0.815140306949615,0.103844970464706\n             ,0.731326162815094,0.674075841903687,0.103844970464706,0.731326162815094,0.674075841903687,0.0662719309329987\n             ,0.700039923191071,0.711021840572357,0.0294170621782541,0.161411821842194,0.986448585987091,0.116292431950569\n             ,0.478548794984818,0.870325863361359,-0.694730341434479,0.390507906675339,0.604030907154083,-0.800284266471863\n             ,0.299557894468308,0.519432485103607,-0.767612516880035,0.418656378984451,0.485281258821487,-0.749469220638275\n             ,0.428192466497421,0.504922866821289,-0.11088390648365,0.737395942211151,0.666297197341919,-0.012057981453836\n             ,0.63969749212265,0.76853221654892,0.103844970464706,0.731326162815094,0.674075841903687,-0.204512879252434,0.857547581195831\n             ,0.472002804279327,-0.476352840662003,0.646627724170685,0.595785677433014,-0.452526926994324,0.608857274055481\n             ,0.651546001434326,-0.156580075621605,0.884556114673615,0.439366787672043,-0.204512879252434,0.857547581195831\n             ,0.472002804279327,-0.219483211636543,0.80230712890625,0.55509489774704,-0.6051185131073,0.474284201860428,0.639441967010498\n             ,-0.476352840662003,0.646627724170685,0.595785677433014,-0.6051185131073,0.474284201860428,0.639441967010498\n             ,-0.314458668231964,0.629549622535706,0.710480868816376,-0.599762678146362,0.237867310643196,0.764005124568939\n             ,-0.11088390648365,0.737395942211151,0.666297197341919,-0.314458668231964,0.629549622535706,0.710480868816376\n             ,-0.219483211636543,0.80230712890625,0.55509489774704,-0.142908409237862,0.800538897514343,0.581991970539093\n             ,-0.142908409237862,0.800538897514343,0.581991970539093,-0.147507503628731,0.729519248008728,0.667864620685577\n             ,-0.012057981453836,0.63969749212265,0.76853221654892,-0.11088390648365,0.737395942211151,0.666297197341919,-0.164747953414917\n             ,-0.0155069231987,0.986213803291321,-0.256247758865356,0.183180019259453,0.94909542798996,-0.0183928888291121\n             ,0.5789715051651,0.815140306949615,0.116292431950569,0.478548794984818,0.870325863361359,-0.0183928888291121\n             ,0.5789715051651,0.815140306949615,-0.256247758865356,0.183180019259453,0.94909542798996,-0.599762678146362,0.237867310643196\n             ,0.764005124568939,-0.314458668231964,0.629549622535706,0.710480868816376,-0.854055345058441,0.17005829513073\n             ,0.4915991127491,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.783675134181976,0.0171119719743729\n             ,0.620935142040253,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.6051185131073,0.474284201860428\n             ,0.639441967010498,-0.599762678146362,0.237867310643196,0.764005124568939,-0.708063185214996,0.0871675312519073\n             ,0.700748383998871,-0.854055345058441,0.17005829513073,0.4915991127491,0.103844970464706,0.731326162815094,0.674075841903687\n             ,-0.012057981453836,0.63969749212265,0.76853221654892,0.0579896494746208,0.56835275888443,0.820738911628723,0.0662719309329987\n             ,0.700039923191071,0.711021840572357,0.103844970464706,0.731326162815094,0.674075841903687,-0.0183928888291121\n             ,0.5789715051651,0.815140306949615,-0.314458668231964,0.629549622535706,0.710480868816376,-0.11088390648365,0.737395942211151\n             ,0.666297197341919,-0.6051185131073,0.474284201860428,0.639441967010498,-0.219483211636543,0.80230712890625,0.55509489774704\n             ,-0.314458668231964,0.629549622535706,0.710480868816376,-0.58455902338028,0.465762704610825,0.664346158504486\n             ,-0.452526926994324,0.608857274055481,0.651546001434326,-0.476352840662003,0.646627724170685,0.595785677433014\n             ,-0.6051185131073,0.474284201860428,0.639441967010498,-0.694730341434479,0.390507906675339,0.604030907154083\n             ,-0.58455902338028,0.465762704610825,0.664346158504486,-0.476352840662003,0.646627724170685,0.595785677433014\n             ,-0.58455902338028,0.465762704610825,0.664346158504486,-0.617127954959869,0.561533391475677,0.551210701465607\n             ,-0.448102563619614,0.672870218753815,0.588599801063538,-0.452526926994324,0.608857274055481,0.651546001434326\n             ,-0.250480443239212,-0.173854321241379,0.952383458614349,-0.164747953414917,-0.0155069231987,0.986213803291321\n             ,0.116292431950569,0.478548794984818,0.870325863361359,0.0294170621782541,0.161411821842194,0.986448585987091\n             ,-0.250480443239212,-0.173854321241379,0.952383458614349,0.0294170621782541,0.161411821842194,0.986448585987091\n             ,-0.000449120096163824,-0.222807794809341,0.974862277507782,-0.837151050567627,0.303785771131516,-0.454854130744934\n             ,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.750347912311554,0.23514324426651,-0.617807149887085\n             ,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.962794303894043,0.225805953145027,-0.148454576730728\n             ,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.750347912311554,0.23514324426651,-0.617807149887085\n             ,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.49577060341835,0.312520623207092,-0.810272991657257\n             ,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.750347912311554,0.23514324426651,-0.617807149887085\n             ,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.387834370136261,0.406677484512329,-0.827162563800812\n             ,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.750347912311554,0.23514324426651,-0.617807149887085\n             ,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.387834370136261,0.406677484512329,-0.827162563800812\n             ,-0.257477760314941,0.382379919290543,-0.887406766414642,-0.296208798885345,0.254752188920975,-0.920522511005402\n             ,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.49577060341835,0.312520623207092,-0.810272991657257\n             ,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.296208798885345,0.254752188920975,-0.920522511005402\n             ,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.1575877815485,0.232581928372383,-0.959724843502045\n             ,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.296208798885345,0.254752188920975,-0.920522511005402\n             ,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.127526223659515,0.388497859239578,-0.912582278251648\n             ,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.296208798885345,0.254752188920975,-0.920522511005402\n             ,-0.257477760314941,0.382379919290543,-0.887406766414642,0.0148119395598769,0.396181702613831,-0.918052673339844\n             ,-0.127526223659515,0.388497859239578,-0.912582278251648,-0.0627769380807877,0.434968650341034,-0.898254573345184\n             ,0.012098491191864,0.36400181055069,-0.931319653987885,0.000681107048876584,0.225692093372345,-0.974198460578918\n             ,0.012098491191864,0.36400181055069,-0.931319653987885,-0.0627769380807877,0.434968650341034,-0.898254573345184\n             ,-0.982630908489227,0.117604449391365,0.143546640872955,-0.973341524600983,0.209714606404305,-0.0928762331604958\n             ,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.980100452899933,0.0712500065565109,0.185274243354797\n             ,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.980100452899933,0.0712500065565109,0.185274243354797\n             ,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.996125161647797,0.0665269121527672,0.0575226061046124\n             ,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.996125161647797,0.0665269121527672,0.0575226061046124\n             ,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.939923703670502,0.145416438579559,-0.308864831924438\n             ,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.939923703670502,0.145416438579559,-0.308864831924438\n             ,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.973341524600983,0.209714606404305,-0.0928762331604958\n             ,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.172267556190491,0.224487066268921,-0.959129512310028\n             ,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.00121181993745267,0.232196122407913,-0.9726682305336\n             ,-0.00138723512645811,0.200112879276276,-0.979771912097931,-0.172267556190491,0.224487066268921,-0.959129512310028\n             ,-0.127526223659515,0.388497859239578,-0.912582278251648,0.0148119395598769,0.396181702613831,-0.918052673339844\n             ,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.80251806974411,0.311771512031555,-0.508687853813171\n             ,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.940674006938934,0.339310526847839,0.000872477365192026\n             ,-0.931051731109619,0.363819122314453,0.027898857370019,-0.940674006938934,0.339310526847839,0.000872477365192026\n             ,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.854649007320404,0.375557482242584,-0.358513176441193\n             ,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.854649007320404,0.375557482242584,-0.358513176441193\n             ,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.496117979288101,0.475835919380188,-0.726255536079407\n             ,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.496117979288101,0.475835919380188,-0.726255536079407\n             ,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.80251806974411,0.311771512031555,-0.508687853813171\n             ,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.293546974658966,0.266818583011627,-0.917953193187714\n             ,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.496117979288101,0.475835919380188,-0.726255536079407\n             ,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.496117979288101,0.475835919380188,-0.726255536079407\n             ,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.242920428514481,0.314263701438904,-0.917729794979095\n             ,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.242920428514481,0.314263701438904,-0.917729794979095\n             ,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.127602562308311,0.294543892145157,-0.947080492973328\n             ,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.127602562308311,0.294543892145157,-0.947080492973328\n             ,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.293546974658966,0.266818583011627,-0.917953193187714\n             ,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.996125161647797,0.0665269121527672,0.0575226061046124\n             ,-0.939561665058136,0.24427318572998,0.239905118942261,-0.960240244865417,0.158970504999161,0.229493051767349\n             ,-0.844134092330933,0.36929926276207,0.388658910989761,-0.960240244865417,0.158970504999161,0.229493051767349\n             ,-0.939561665058136,0.24427318572998,0.239905118942261,-0.856849551200867,0.411835759878159,0.310161501169205\n             ,-0.931051731109619,0.363819122314453,0.027898857370019,-0.856849551200867,0.411835759878159,0.310161501169205\n             ,-0.939561665058136,0.24427318572998,0.239905118942261,-0.940674006938934,0.339310526847839,0.000872477365192026\n             ,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.940674006938934,0.339310526847839,0.000872477365192026\n             ,-0.939561665058136,0.24427318572998,0.239905118942261,-0.996125161647797,0.0665269121527672,0.0575226061046124\n             ,-0.195909768342972,0.965728640556335,-0.170257449150085,0.695661246776581,0.682053446769714,-0.225518316030502\n             ,0.590233266353607,0.805784702301025,0.0483287125825882,-0.363503694534302,0.891945838928223,0.26888245344162\n             ,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.363503694534302,0.891945838928223,0.26888245344162\n             ,-0.907475471496582,0.340031713247299,0.246711865067482,-0.927974164485931,0.372219532728195,-0.0177929922938347\n             ,0.695661246776581,0.682053446769714,-0.225518316030502,0.699705183506012,0.427644014358521,-0.572305202484131\n             ,0.904918491840363,0.223670721054077,-0.362068980932236,0.912925958633423,0.3648841381073,-0.182827115058899\n             ,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.937249541282654,0.196521490812302,-0.28799757361412\n             ,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.997999429702759,-0.00234658480621874,-0.0631792545318604\n             ,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.997999429702759,-0.00234658480621874,-0.0631792545318604\n             ,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.997772693634033,-0.0664616152644157,0.00569661194458604\n             ,-0.482406258583069,0.640618324279785,0.597404718399048,0.300904870033264,0.919037222862244,0.254611104726791\n             ,0.821504950523376,0.569011390209198,0.0368196852505207,0.517754137516022,0.73391991853714,0.439650118350983\n             ,0.545511066913605,0.803328096866608,0.238917589187622,0.517754137516022,0.73391991853714,0.439650118350983,0.821504950523376\n             ,0.569011390209198,0.0368196852505207,0.855710446834564,0.513507485389709,-0.0637943744659424,0.590233266353607\n             ,0.805784702301025,0.0483287125825882,0.855710446834564,0.513507485389709,-0.0637943744659424,0.821504950523376\n             ,0.569011390209198,0.0368196852505207,0.300904870033264,0.919037222862244,0.254611104726791,0.912925958633423\n             ,0.3648841381073,-0.182827115058899,0.61859929561615,0.783204674720764,-0.0626528933644295,0.545511066913605\n             ,0.803328096866608,0.238917589187622,0.855710446834564,0.513507485389709,-0.0637943744659424,0.912925958633423\n             ,0.3648841381073,-0.182827115058899,0.855710446834564,0.513507485389709,-0.0637943744659424,0.590233266353607\n             ,0.805784702301025,0.0483287125825882,0.695661246776581,0.682053446769714,-0.225518316030502,-0.363503694534302\n             ,0.891945838928223,0.26888245344162,0.300904870033264,0.919037222862244,0.254611104726791,-0.482406258583069\n             ,0.640618324279785,0.597404718399048,-0.907475471496582,0.340031713247299,0.246711865067482,0.590233266353607\n             ,0.805784702301025,0.0483287125825882,0.300904870033264,0.919037222862244,0.254611104726791,-0.363503694534302\n             ,0.891945838928223,0.26888245344162,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.189944684505463\n             ,0.677020668983459,-0.711030244827271,0.699705183506012,0.427644014358521,-0.572305202484131,0.695661246776581\n             ,0.682053446769714,-0.225518316030502,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.189944684505463\n             ,0.677020668983459,-0.711030244827271,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.927974164485931\n             ,0.372219532728195,-0.0177929922938347,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.999242901802063\n             ,0.033017348498106,-0.020579107105732,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.927974164485931\n             ,0.372219532728195,-0.0177929922938347,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.99766343832016\n             ,-0.0678676217794418,-0.00785017758607864,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.818911194801331\n             ,0.102228388190269,-0.564742267131805,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.99766343832016\n             ,-0.0678676217794418,-0.00785017758607864,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.872599542140961\n             ,-0.185326799750328,-0.451911568641663,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.878421425819397\n             ,-0.363578677177429,-0.310139209032059,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.966982245445251\n             ,-0.0721902102231979,-0.24440510571003,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.997032284736633\n             ,-0.0711089670658112,-0.0294978637248278,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.966982245445251\n             ,-0.0721902102231979,-0.24440510571003,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.997772693634033\n             ,-0.0664616152644157,0.00569661194458604,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.966982245445251\n             ,-0.0721902102231979,-0.24440510571003,-0.86995929479599,-0.0271206852048635,-0.492377251386642,-0.987662672996521\n             ,-0.0305646266788244,-0.153584524989128,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.86995929479599\n             ,-0.0271206852048635,-0.492377251386642,-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.937249541282654\n             ,0.196521490812302,-0.28799757361412,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.21810856461525\n             ,0.364344894886017,-0.905362606048584,-0.189944684505463,0.677020668983459,-0.711030244827271,0.699705183506012\n             ,0.427644014358521,-0.572305202484131,-0.189944684505463,0.677020668983459,-0.711030244827271,-0.21810856461525\n             ,0.364344894886017,-0.905362606048584,0.486043959856033,0.298038214445114,-0.821543991565704,0.426036864519119\n             ,0.191680565476418,-0.884166955947876,0.486043959856033,0.298038214445114,-0.821543991565704,-0.21810856461525\n             ,0.364344894886017,-0.905362606048584,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.818911194801331\n             ,0.102228388190269,-0.564742267131805,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.21810856461525\n             ,0.364344894886017,-0.905362606048584,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.818911194801331\n             ,0.102228388190269,-0.564742267131805,-0.846078813076019,-0.0403724387288094,-0.531526803970337,-0.292363196611404\n             ,0.000483309850096703,-0.956307232379913,-0.250867486000061,0.201503813266754,-0.946816623210907,0.426036864519119\n             ,0.191680565476418,-0.884166955947876,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.292363196611404\n             ,0.000483309850096703,-0.956307232379913,0.409033417701721,0.056328222155571,-0.910779237747192,0.482761442661285\n             ,-0.152583673596382,-0.862357020378113,0.409033417701721,0.056328222155571,-0.910779237747192,-0.292363196611404\n             ,0.000483309850096703,-0.956307232379913,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.872599542140961\n             ,-0.185326799750328,-0.451911568641663,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.292363196611404\n             ,0.000483309850096703,-0.956307232379913,-0.846078813076019,-0.0403724387288094,-0.531526803970337,0.652852118015289\n             ,-0.584342896938324,-0.482003599405289,0.664769351482391,-0.462521582841873,-0.586647689342499,0.527362644672394\n             ,-0.438462257385254,-0.72776335477829,0.496177941560745,-0.590101897716522,-0.636857271194458,0.614885807037354\n             ,-0.39096936583519,-0.684878408908844,0.725502192974091,-0.203444570302963,-0.657462477684021,0.527362644672394\n             ,-0.438462257385254,-0.72776335477829,0.664769351482391,-0.462521582841873,-0.586647689342499,-0.846078813076019\n             ,-0.0403724387288094,-0.531526803970337,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.997772693634033\n             ,-0.0664616152644157,0.00569661194458604,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.846078813076019\n             ,-0.0403724387288094,-0.531526803970337,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.997032284736633\n             ,-0.0711089670658112,-0.0294978637248278,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.294507533311844\n             ,-0.613352715969086,-0.73284637928009,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.872599542140961\n             ,-0.185326799750328,-0.451911568641663,-0.878421425819397,-0.363578677177429,-0.310139209032059,0.725502192974091\n             ,-0.203444570302963,-0.657462477684021,0.482761442661285,-0.152583673596382,-0.862357020378113,-0.269831538200378\n             ,-0.272859454154968,-0.923438489437103,-0.294507533311844,-0.613352715969086,-0.73284637928009,0.527362644672394\n             ,-0.438462257385254,-0.72776335477829,-0.304955780506134,-0.78030651807785,-0.546007096767426,-0.878421425819397\n             ,-0.363578677177429,-0.310139209032059,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.304955780506134\n             ,-0.78030651807785,-0.546007096767426,-0.367999702692032,-0.664126336574554,-0.650778293609619,0.496177941560745\n             ,-0.590101897716522,-0.636857271194458,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.304955780506134\n             ,-0.78030651807785,-0.546007096767426,-0.294507533311844,-0.613352715969086,-0.73284637928009,0.527362644672394\n             ,-0.438462257385254,-0.72776335477829,-0.294507533311844,-0.613352715969086,-0.73284637928009,-0.304955780506134\n             ,-0.78030651807785,-0.546007096767426,0.496177941560745,-0.590101897716522,-0.636857271194458,-0.933935105800629\n             ,0.157070308923721,0.321082711219788,-0.90123462677002,0.253379285335541,0.351532429456711,-0.914615273475647\n             ,0.203247100114822,0.349527567625046,-0.156580075621605,0.884556114673615,0.439366787672043,-0.0257334969937801\n             ,0.934201776981354,0.355815708637238,-0.109931223094463,0.875869393348694,0.469859391450882,-0.204512879252434\n             ,0.857547581195831,0.472002804279327,-0.389257401227951,0.367899239063263,0.844469547271729,-0.158640176057816\n             ,0.0965946391224861,0.982600033283234,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.281328231096268\n             ,0.118911549448967,0.952215552330017,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.105134896934032\n             ,-0.328432708978653,0.938657879829407,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.662640571594238\n             ,-0.0052980799227953,0.748918831348419,-0.447645485401154,0.239924728870392,0.861423015594482,-0.383932620286942\n             ,0.132088497281075,0.913864493370056,-0.462802797555923,0.335958212614059,0.820332646369934,-0.438263714313507\n             ,0.241573825478554,0.865775406360626,-0.82659912109375,0.121020883321762,0.549625158309937,-0.784394800662994\n             ,0.0327747240662575,0.61939537525177,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.704894602298737\n             ,0.389235317707062,0.592975080013275,-0.736577808856964,0.297644317150116,0.607339262962341,-0.808332681655884\n             ,0.323168575763702,0.49209788441658,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.982630908489227\n             ,0.117604449391365,0.143546640872955,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.996856987476349\n             ,0.0654792115092278,0.0445937626063824,-0.767612516880035,0.418656378984451,0.485281258821487,-0.800284266471863\n             ,0.299557894468308,0.519432485103607,-0.910772800445557,0.214318007230759,0.352931588888168,-0.844134092330933\n             ,0.36929926276207,0.388658910989761,-0.800284266471863,0.299557894468308,0.519432485103607,-0.854055345058441\n             ,0.17005829513073,0.4915991127491,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.910772800445557\n             ,0.214318007230759,0.352931588888168,-0.58455902338028,0.465762704610825,0.664346158504486,-0.694730341434479\n             ,0.390507906675339,0.604030907154083,-0.749469220638275,0.428192466497421,0.504922866821289,-0.617127954959869\n             ,0.561533391475677,0.551210701465607,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.573864758014679\n             ,0.230327397584915,0.785893499851227,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.602755010128021\n             ,-0.2416090965271,0.760467886924744,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.941886365413666\n             ,-0.24503418803215,0.229800596833229,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.87983900308609\n             ,0.0556478500366211,0.47200283408165,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.961850166320801\n             ,-0.179731413722038,0.20625451207161,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.95811140537262\n             ,-0.0200627520680428,0.285692185163498,-0.841734766960144,0.21214547753334,0.496464431285858,-0.960161685943604\n             ,0.0413071177899837,0.276375204324722,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.311408758163452\n             ,-0.316491156816483,0.896023392677307,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.305121660232544\n             ,-0.789030134677887,0.533228099346161,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.496900916099548\n             ,0.22183683514595,0.838974297046661,-0.459187179803848,0.12899711728096,0.878923714160919,-0.444485455751419\n             ,0.263989001512527,0.856003820896149,-0.506407201290131,0.224265813827515,0.832620322704315,-0.409960985183716\n             ,0.234984055161476,0.881314098834991,-0.427875101566315,0.308164179325104,0.849680960178375,-0.496900916099548\n             ,0.22183683514595,0.838974297046661,-0.506407201290131,0.224265813827515,0.832620322704315,-0.451172351837158\n             ,0.441036701202393,0.775841593742371,-0.489892512559891,0.122311964631081,0.863159954547882,-0.314933896064758\n             ,-0.0157290305942297,0.948983252048492,-0.265877991914749,0.261434108018875,0.927879869937897,-0.451172351837158\n             ,0.441036701202393,0.775841593742371,-0.265877991914749,0.261434108018875,0.927879869937897,-0.296029925346375\n             ,0.469678968191147,0.831725895404816,-0.431310623884201,0.54215931892395,0.721134126186371,-0.309603661298752\n             ,-0.439581990242004,0.843156754970551,-0.0848771035671234,-0.827450573444366,0.55508691072464,-0.170729905366898\n             ,-0.910779476165771,0.375941574573517,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.522650301456451\n             ,0.406982094049454,-0.749134302139282,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.884765982627869\n             ,0.444219619035721,-0.140918776392937,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.840847790241241\n             ,0.534673869609833,0.0842547118663788,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.690247058868408\n             ,0.178245946764946,0.701275527477264,-0.72613924741745,0.535442233085632,0.431304275989532,-0.684539437294006\n             ,0.44213280081749,0.57958984375,-0.746036350727081,0.393973112106323,0.536856591701508,-0.773442804813385,0.436002254486084\n             ,0.460096001625061,-0.7086301445961,0.50186014175415,0.495963364839554,-0.684539437294006,0.44213280081749,0.57958984375\n             ,-0.649461984634399,0.424084842205048,0.631150722503662,-0.704894602298737,0.389235317707062,0.592975080013275\n             ,-0.746036350727081,0.393973112106323,0.536856591701508,-0.808332681655884,0.323168575763702,0.49209788441658\n             ,-0.859274387359619,0.29542076587677,0.417581170797348,-0.773442804813385,0.436002254486084,0.460096001625061\n             ,-0.746036350727081,0.393973112106323,0.536856591701508,-0.764328002929688,0.478488236665726,0.432263433933258\n             ,-0.7086301445961,0.50186014175415,0.495963364839554,-0.776160657405853,0.480935424566269,0.407769232988358,-0.709937155246735\n             ,0.54696124792099,0.443646997213364,-0.594367325305939,0.527927815914154,0.606646299362183,-0.764328002929688\n             ,0.478488236665726,0.432263433933258,-0.709937155246735,0.54696124792099,0.443646997213364,-0.487235128879547\n             ,0.602307498455048,0.632319211959839,-0.16526772081852,0.578359544277191,0.798865914344788,-0.594367325305939\n             ,0.527927815914154,0.606646299362183,-0.487235128879547,0.602307498455048,0.632319211959839,-0.148301675915718\n             ,0.617360651493073,0.772575199604034,0.0581676289439201,0.571192860603333,0.818752288818359,-0.16526772081852\n             ,0.578359544277191,0.798865914344788,-0.148301675915718,0.617360651493073,0.772575199604034,0.0604556538164616\n             ,0.606487095355988,0.792791604995728,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.993900120258331\n             ,-0.00187443883623928,0.110267803072929,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.978295981884003\n             ,0.0417908765375614,0.202954426407814,-0.8117955327034,0.118040002882481,0.571886837482452,-0.525420844554901\n             ,-0.165615484118462,0.834568381309509,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.739963114261627\n             ,0.167704880237579,0.651405930519104,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.42745703458786\n             ,-0.154648303985596,0.890710055828094,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.490864455699921\n             ,-0.0663091167807579,0.868708908557892,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.42745703458786\n             ,-0.154648303985596,0.890710055828094,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.405952632427216\n             ,-0.25302666425705,0.878168523311615,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.308251351118088\n             ,0.00680266646668315,0.951280653476715,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.0580175220966339\n             ,-0.274829417467117,0.959740996360779,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.308251351118088\n             ,0.00680266646668315,0.951280653476715,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.0252015665173531\n             ,-0.364970922470093,0.930677771568298,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.662640571594238\n             ,-0.0052980799227953,0.748918831348419,-0.849758863449097,0.226472169160843,0.476046502590179,-0.611043751239777\n             ,-0.00789655186235905,0.791557371616364,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.849758863449097\n             ,0.226472169160843,0.476046502590179,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.847808718681335\n             ,0.127517849206924,0.514742314815521,-0.328838348388672,0.935817182064056,0.126931354403496,0.279289931058884\n             ,0.161584615707397,0.94651335477829,-0.124414332211018,0.380547553300858,0.91635400056839,-0.630214631557465\n             ,0.655408442020416,0.416256308555603,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.124414332211018\n             ,0.380547553300858,0.91635400056839,0.279289931058884,0.161584615707397,0.94651335477829,-0.377197057008743,-0.298063486814499\n             ,0.876858353614807,-0.53056800365448,-0.207617223262787,0.821822762489319,-0.406814515590668,-0.530913829803467\n             ,0.743392527103424,-0.28600937128067,-0.592511594295502,0.753079414367676,0.0128951743245125,-0.862936913967133\n             ,0.505147039890289,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.406814515590668,-0.530913829803467\n             ,0.743392527103424,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.188662573695183,-0.633236289024353\n             ,0.750611901283264,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.23735885322094,-0.585129797458649\n             ,0.775424957275391,-0.218783125281334,-0.517780601978302,0.827065408229828,0.138299137353897,-0.216322302818298\n             ,0.966477155685425,0.028565090149641,-0.175006538629532,0.984152793884277,0.0824021622538567,0.119332544505596\n             ,0.98942893743515,0.0996207222342491,0.155612200498581,0.982782065868378,-0.0433456413447857,-0.716439366340637\n             ,0.696301460266113,0.152057304978371,-0.511582612991333,0.845672428607941,-0.0233143605291843,-0.495335191488266\n             ,0.868389010429382,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.604022920131683,-0.106749713420868\n             ,0.789785325527191,-0.619005084037781,0.113047316670418,0.777208507061005,-0.603184819221497,0.0701910704374313\n             ,0.794506967067719,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.56518691778183,0.0673309490084648\n             ,0.822210609912872,-0.619005084037781,0.113047316670418,0.777208507061005,-0.498029559850693,0.248690649867058\n             ,0.830734312534332,-0.261222988367081,0.14337170124054,0.954571664333344,-0.245125457644463,0.30829644203186\n             ,0.919166386127472,-0.484222084283829,0.366713851690292,0.794386506080627,-0.728943645954132,0.505101680755615\n             ,0.462075144052505,-0.761701762676239,0.421244710683823,0.492304056882858,-0.673884630203247,0.467902958393097\n             ,0.571792244911194,-0.671048521995544,0.370010554790497,0.642484307289124,-0.655175447463989,0.41560024023056\n             ,0.630889534950256,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.866631507873535,0.0684041753411293\n             ,0.49423748254776,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.623706221580505,-0.429783433675766\n             ,0.652898728847504,-0.670063674449921,0.104801684617996,0.734868168830872,-0.483639568090439,-0.0787182152271271\n             ,0.871720254421234,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.554198384284973,-0.301848381757736\n             ,0.775726556777954,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.739276468753815,0.150933310389519\n             ,0.656269311904907,-0.670063674449921,0.104801684617996,0.734868168830872,-0.554198384284973,-0.301848381757736\n             ,0.775726556777954,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.948079526424408,-0.0349823534488678\n             ,0.316103518009186,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.00827599223703146,-0.428946763277054\n             ,0.903291881084442,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.0569505728781223,-0.381698995828629\n             ,0.922530472278595,0.033345639705658,-0.401991754770279,0.915035903453827,-0.426155984401703,-0.544485569000244\n             ,0.722444832324982,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.0110307689756155,-0.0793537572026253\n             ,0.996785461902618,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.00827599223703146,-0.428946763277054\n             ,0.903291881084442,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.426155984401703,-0.544485569000244\n             ,0.722444832324982,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.865811467170715,0.0343829169869423\n             ,0.499187588691711,-0.782657444477081,0.380464553833008,0.4926398396492,-0.575338959693909,0.442981451749802\n             ,0.687570035457611,-0.664805889129639,0.056874256581068,0.74484795331955,0.0440349131822586,-0.167181059718132\n             ,0.984942317008972,-0.100514478981495,0.314375013113022,0.943962454795837,-0.144208893179893,0.115719296038151\n             ,0.982757806777954,-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.976188123226166,-0.133096665143967\n             ,-0.171295195817947,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.934884548187256,0.137223497033119\n             ,-0.327353954315186,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.0115164406597614,-0.997357308864594\n             ,0.0717345252633095,0.315651625394821,-0.933804154396057,0.168445229530334,-0.575954735279083,-0.540566444396973\n             ,0.613240599632263,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.0942904129624367,-0.823370099067688\n             ,-0.55961686372757,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.0115164406597614,-0.997357308864594\n             ,0.0717345252633095,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.451660662889481,0.11085283011198\n             ,0.88527637720108,-0.38422480225563,0.137366592884064,0.912963151931763,-0.215113177895546,0.235299572348595\n             ,0.947818756103516,-0.110501579940319,0.212603434920311,0.970870316028595,-0.354619354009628,-0.125306099653244\n             ,0.926576197147369,-0.490771174430847,0.254273563623428,0.833359837532043,-0.330226361751556,0.315774649381638\n             ,0.889514982700348,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.134053289890289,0.873388648033142\n             ,-0.468211501836777,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.152414619922638,0.895912230014801\n             ,-0.417266219854355,-0.134053289890289,0.873388648033142,-0.468211501836777,-0.152414619922638,0.895912230014801\n             ,-0.417266219854355,0.461978673934937,0.681396842002869,-0.567691802978516,-0.999627530574799,0.0187976788729429\n             ,-0.0197845976799726,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.998166382312775,0.0398845337331295\n             ,0.0455306805670261,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.127602562308311,0.294543892145157\n             ,-0.947080492973328,0.002942921128124,0.253444164991379,-0.967345535755157,-0.00542618287727237,0.149814411997795\n             ,-0.98869925737381,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.0685182884335518,0.227593377232552\n             ,-0.971342623233795,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.156535282731056,0.121644385159016\n             ,-0.980152726173401,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.109931223094463,0.875869393348694\n             ,0.469859391450882,-0.147507503628731,0.729519248008728,0.667864620685577,-0.142908409237862,0.800538897514343\n             ,0.581991970539093,-0.204512879252434,0.857547581195831,0.472002804279327,-0.109931223094463,0.875869393348694\n             ,0.469859391450882,-0.142908409237862,0.800538897514343,0.581991970539093,-0.219483211636543,0.80230712890625\n             ,0.55509489774704,-0.00827599223703146,-0.428946763277054,0.903291881084442,-0.0295225456357002,-0.382050126791\n             ,0.923669934272766,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.403298109769821,-0.683849096298218\n             ,0.608030438423157,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.0295225456357002,-0.382050126791\n             ,0.923669934272766,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.129767522215843,-0.742323935031891\n             ,0.657354950904846,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.482923626899719,-0.587090194225311\n             ,0.649699866771698,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.446160137653351,-0.556800782680511\n             ,0.700652599334717,0.912925958633423,0.3648841381073,-0.182827115058899,0.904918491840363,0.223670721054077,-0.362068980932236\n             ,0.636519849300385,0.647450149059296,-0.419107168912888,0.61859929561615,0.783204674720764,-0.0626528933644295\n             ,0.673712253570557,-0.610602140426636,-0.416265428066254,0.593445479869843,-0.55176454782486,-0.585984945297241\n             ,0.853590905666351,0.0963327810168266,-0.511959493160248,0.936679661273956,0.0184381268918514,-0.349701732397079\n             ,0.65024209022522,-0.683634519577026,-0.331404685974121,0.626364231109619,-0.75530606508255,-0.192822501063347\n             ,0.773029983043671,-0.340951681137085,-0.534954726696014,0.699126958847046,-0.0890455171465874,-0.709431052207947\n             ,0.591210007667542,0.268222451210022,-0.760609924793243,0.633826375007629,0.136593535542488,-0.761318802833557\n             ,0.880469501018524,0.252094835042953,-0.401524186134338,0.782209396362305,0.460544377565384,-0.419579923152924\n             ,0.594776809215546,0.323577910661697,-0.735892593860626,0.889407336711884,0.240895375609398,-0.388489335775375\n             ,0.880469501018524,0.252094835042953,-0.401524186134338,0.633826375007629,0.136593535542488,-0.761318802833557\n             ,0.97625857591629,0.21655336022377,-0.00488529354333878,0.934138953685761,0.351697504520416,-0.0607721395790577\n             ,0.880469501018524,0.252094835042953,-0.401524186134338,0.889407336711884,0.240895375609398,-0.388489335775375\n             ,0.860303461551666,0.500444173812866,-0.0971267074346542,0.782209396362305,0.460544377565384,-0.419579923152924\n             ,0.880469501018524,0.252094835042953,-0.401524186134338,0.934138953685761,0.351697504520416,-0.0607721395790577\n             ,0.591210007667542,0.268222451210022,-0.760609924793243,0.782209396362305,0.460544377565384,-0.419579923152924\n             ,0.637716591358185,0.673823416233063,-0.373201817274094,0.476214468479156,0.553961336612701,-0.682895720005035\n             ,0.860303461551666,0.500444173812866,-0.0971267074346542,0.719738006591797,0.692870736122131,-0.0436733961105347\n             ,0.637716591358185,0.673823416233063,-0.373201817274094,0.782209396362305,0.460544377565384,-0.419579923152924\n             ,0.637716591358185,0.673823416233063,-0.373201817274094,0.719738006591797,0.692870736122131,-0.0436733961105347\n             ,0.581854581832886,0.813074886798859,0.0188271906226873,0.411318093538284,0.679248511791229,-0.607814848423004\n             ,0.476214468479156,0.553961336612701,-0.682895720005035,0.115779966115952,0.184250295162201,-0.976036310195923\n             ,0.139773815870285,0.0987650603055954,-0.985245525836945,-0.00773082999512553,0.120841763913631,-0.992641687393188\n             ,-0.00542618287727237,0.149814411997795,-0.98869925737381,0.17595848441124,0.184216767549515,-0.967007160186768\n             ,0.139773815870285,0.0987650603055954,-0.985245525836945,0.286009520292282,0.0698904916644096,-0.955674588680267\n             ,0.311260253190994,0.141205564141274,-0.93977552652359,0.115779966115952,0.184250295162201,-0.976036310195923\n             ,0.256779372692108,0.275679916143417,-0.926317930221558,0.286009520292282,0.0698904916644096,-0.955674588680267\n             ,0.139773815870285,0.0987650603055954,-0.985245525836945,0.594776809215546,0.323577910661697,-0.735892593860626\n             ,0.633826375007629,0.136593535542488,-0.761318802833557,0.286009520292282,0.0698904916644096,-0.955674588680267\n             ,0.256779372692108,0.275679916143417,-0.926317930221558,0.591210007667542,0.268222451210022,-0.760609924793243\n             ,0.311260253190994,0.141205564141274,-0.93977552652359,0.286009520292282,0.0698904916644096,-0.955674588680267\n             ,0.633826375007629,0.136593535542488,-0.761318802833557,-0.00773082999512553,0.120841763913631,-0.992641687393188\n             ,0.0694107115268707,0.216942340135574,-0.973713636398315,-0.000760512368287891,0.207898333668709,-0.978150188922882\n             ,0.280443012714386,0.696482062339783,0.660503208637238,0.259025126695633,0.847382187843323,0.463518500328064\n             ,0.283866882324219,0.767588019371033,0.574654817581177,0.564589977264404,0.0705946907401085,-0.822346925735474\n             ,0.7000772356987,0.225735083222389,-0.67744779586792,0.484490036964417,0.357505440711975,-0.798410475254059,0.426292926073074\n             ,0.0950048267841339,-0.899582326412201,0.857822477817535,0.172914609313011,-0.483984649181366,0.61924135684967\n             ,0.312463909387589,-0.72035163640976,0.484490036964417,0.357505440711975,-0.798410475254059,0.7000772356987,0.225735083222389\n             ,-0.67744779586792,0.417167514562607,0.344521790742874,-0.840997040271759,0.378902137279511,0.434016942977905\n             ,-0.8173508644104,0.484490036964417,0.357505440711975,-0.798410475254059,0.61924135684967,0.312463909387589,-0.72035163640976\n             ,0.35312095284462,0.134023457765579,-0.925928354263306,0.426292926073074,0.0950048267841339,-0.899582326412201\n             ,0.484490036964417,0.357505440711975,-0.798410475254059,0.378902137279511,0.434016942977905,-0.8173508644104\n             ,0.35312095284462,0.134023457765579,-0.925928354263306,0.378902137279511,0.434016942977905,-0.8173508644104,0.256089895963669\n             ,0.453810095787048,-0.853507101535797,0.23451641201973,0.162132352590561,-0.958496332168579,0.417167514562607\n             ,0.344521790742874,-0.840997040271759,0.282642304897308,0.340673059225082,-0.896691262722015,0.256089895963669\n             ,0.453810095787048,-0.853507101535797,0.378902137279511,0.434016942977905,-0.8173508644104,0.154383972287178\n             ,0.366727441549301,-0.917429327964783,0.0980598703026772,0.422548413276672,-0.901020050048828,0.256089895963669\n             ,0.453810095787048,-0.853507101535797,0.282642304897308,0.340673059225082,-0.896691262722015,0.000681107048876584\n             ,0.225692093372345,-0.974198460578918,0.23451641201973,0.162132352590561,-0.958496332168579,0.256089895963669\n             ,0.453810095787048,-0.853507101535797,0.0980598703026772,0.422548413276672,-0.901020050048828,0.138864398002625\n             ,0.273968666791916,-0.951660573482513,0.002942921128124,0.253444164991379,-0.967345535755157,0.00121181993745267\n             ,0.232196122407913,-0.9726682305336,0.158535957336426,0.208172604441643,-0.96515828371048,0.823107242584229,0.306770831346512\n             ,0.477897584438324,0.714458644390106,0.458717465400696,0.528324842453003,0.810526788234711,0.52942031621933,0.250520348548889\n             ,0.885173201560974,0.411667943000793,0.216789960861206,0.810526788234711,0.52942031621933,0.250520348548889,0.714458644390106\n             ,0.458717465400696,0.528324842453003,0.565896391868591,0.594577431678772,0.571173310279846,0.581854581832886\n             ,0.813074886798859,0.0188271906226873,0.719738006591797,0.692870736122131,-0.0436733961105347,0.860303461551666\n             ,0.500444173812866,-0.0971267074346542,0.885173201560974,0.411667943000793,0.216789960861206,0.810526788234711\n             ,0.52942031621933,0.250520348548889,0.719738006591797,0.692870736122131,-0.0436733961105347,0.903585314750671\n             ,0.234351992607117,0.35862609744072,0.838887810707092,0.294615089893341,0.457677990198135,0.894195675849915,0.373524785041809\n             ,0.246765822172165,0.919988930225372,0.274642944335938,0.279627621173859,0.823107242584229,0.306770831346512\n             ,0.477897584438324,0.885173201560974,0.411667943000793,0.216789960861206,0.894195675849915,0.373524785041809\n             ,0.246765822172165,0.838887810707092,0.294615089893341,0.457677990198135,0.860303461551666,0.500444173812866\n             ,-0.0971267074346542,0.934138953685761,0.351697504520416,-0.0607721395790577,0.894195675849915,0.373524785041809\n             ,0.246765822172165,0.885173201560974,0.411667943000793,0.216789960861206,0.97625857591629,0.21655336022377,-0.00488529354333878\n             ,0.919988930225372,0.274642944335938,0.279627621173859,0.894195675849915,0.373524785041809,0.246765822172165\n             ,0.934138953685761,0.351697504520416,-0.0607721395790577,0.981309294700623,-0.093424528837204,-0.168237790465355\n             ,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.955751359462738,0.0778623446822166,-0.283684283494949\n             ,0.876467704772949,0.014190330170095,-0.48125147819519,0.993362247943878,-0.0349664911627769,0.109584823250771\n             ,0.99024760723114,0.0581013411283493,-0.126625210046768,0.955751359462738,0.0778623446822166,-0.283684283494949\n             ,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.857822477817535,0.172914609313011,-0.483984649181366\n             ,0.7000772356987,0.225735083222389,-0.67744779586792,0.955751359462738,0.0778623446822166,-0.283684283494949\n             ,0.99024760723114,0.0581013411283493,-0.126625210046768,0.564589977264404,0.0705946907401085,-0.822346925735474\n             ,0.876467704772949,0.014190330170095,-0.48125147819519,0.955751359462738,0.0778623446822166,-0.283684283494949\n             ,0.7000772356987,0.225735083222389,-0.67744779586792,0.800951898097992,0.0424955785274506,-0.597218692302704\n             ,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.981309294700623,-0.093424528837204,-0.168237790465355\n             ,0.876467704772949,0.014190330170095,-0.48125147819519,0.800951898097992,0.0424955785274506,-0.597218692302704\n             ,0.876467704772949,0.014190330170095,-0.48125147819519,0.564589977264404,0.0705946907401085,-0.822346925735474\n             ,0.572597026824951,0.0432385914027691,-0.818695962429047,0.945727825164795,-0.098081186413765,0.309804677963257\n             ,0.944782853126526,0.0188948940485716,0.327151775360107,0.941311419010162,0.140633046627045,0.30684706568718\n             ,0.20434632897377,0.515124678611755,0.832399606704712,0.340864300727844,0.524212896823883,0.780392467975616,0.366717875003815\n             ,0.635487914085388,0.679465293884277,0.266760617494583,0.623513042926788,0.734894752502441,0.20434632897377,0.515124678611755\n             ,0.832399606704712,0.266760617494583,0.623513042926788,0.734894752502441,0.0616534538567066,0.625403761863709\n             ,0.777861833572388,0.0543623231351376,0.513473629951477,0.85638165473938,0.395363062620163,0.562560498714447\n             ,0.726094901561737,0.524678170681,0.559116363525391,0.641951441764832,0.547570884227753,0.592168509960175,0.591187477111816\n             ,0.448636323213577,0.619527339935303,0.644136130809784,0.395363062620163,0.562560498714447,0.726094901561737\n             ,0.448636323213577,0.619527339935303,0.644136130809784,0.366717875003815,0.635487914085388,0.679465293884277\n             ,0.340864300727844,0.524212896823883,0.780392467975616,0.440387338399887,0.692013561725616,0.571993172168732\n             ,0.374413341283798,0.732271254062653,0.568852782249451,0.366717875003815,0.635487914085388,0.679465293884277\n             ,0.448636323213577,0.619527339935303,0.644136130809784,0.547570884227753,0.592168509960175,0.591187477111816\n             ,0.440387338399887,0.692013561725616,0.571993172168732,0.448636323213577,0.619527339935303,0.644136130809784\n             ,0.943980097770691,0.0651601999998093,0.323505431413651,0.909750938415527,0.190706014633179,0.368760675191879\n             ,0.908929646015167,0.18951641023159,0.371389836072922,0.951365828514099,0.00983366928994656,0.30790650844574\n             ,0.943980097770691,0.0651601999998093,0.323505431413651,0.951365828514099,0.00983366928994656,0.30790650844574\n             ,0.955479383468628,-0.0429471768438816,0.291915565729141,0.954596400260925,0.0140978172421455,0.297568470239639\n             ,0.835932672023773,0.318577855825424,0.446905732154846,0.908929646015167,0.18951641023159,0.371389836072922,0.909750938415527\n             ,0.190706014633179,0.368760675191879,0.834239661693573,0.322053194046021,0.447577893733978,0.835932672023773\n             ,0.318577855825424,0.446905732154846,0.834239661693573,0.322053194046021,0.447577893733978,0.702617406845093\n             ,0.468200266361237,0.535833239555359,0.744709670543671,0.422629773616791,0.516518652439117,0.266760617494583\n             ,0.623513042926788,0.734894752502441,0.366717875003815,0.635487914085388,0.679465293884277,0.374413341283798\n             ,0.732271254062653,0.568852782249451,0.320665568113327,0.737191736698151,0.594745278358459,0.266760617494583\n             ,0.623513042926788,0.734894752502441,0.320665568113327,0.737191736698151,0.594745278358459,0.0704773217439651\n             ,0.772313952445984,0.631319284439087,0.0616534538567066,0.625403761863709,0.777861833572388,0.956802248954773\n             ,0.196078270673752,0.214668840169907,0.982270240783691,0.0125455530360341,0.187050387263298,0.944782853126526\n             ,0.0188948940485716,0.327151775360107,0.966708958148956,-0.002308584516868,0.255868047475815,0.305753350257874\n             ,-0.212547421455383,-0.92808324098587,0.310143738985062,-0.212492153048515,-0.926638007164001,0.173930779099464\n             ,-0.177192866802216,-0.96868509054184,0.158634498715401,-0.20582041144371,-0.96564644575119,0.31784787774086\n             ,-0.175634980201721,-0.931732296943665,0.191843032836914,-0.158846795558929,-0.968485355377197,0.173930779099464\n             ,-0.177192866802216,-0.96868509054184,0.310143738985062,-0.212492153048515,-0.926638007164001,-0.0269717872142792\n             ,-0.128648608922958,-0.991323411464691,-0.028486518189311,-0.148915618658066,-0.988439500331879,0.173930779099464\n             ,-0.177192866802216,-0.96868509054184,0.191843032836914,-0.158846795558929,-0.968485355377197,-0.0315490290522575\n             ,-0.190183460712433,-0.981241524219513,0.158634498715401,-0.20582041144371,-0.96564644575119,0.173930779099464\n             ,-0.177192866802216,-0.96868509054184,-0.028486518189311,-0.148915618658066,-0.988439500331879,0.982270240783691\n             ,0.0125455530360341,0.187050387263298,0.956802248954773,0.196078270673752,0.214668840169907,0.976279318332672\n             ,0.215815082192421,0.0173952374607325,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.995472311973572\n             ,0.0944016128778458,0.0111022079363465,0.980593264102936,0.101042859256268,-0.168009653687477,0.952138841152191\n             ,0.245724052190781,-0.181800335645676,0.976959228515625,0.212819382548332,-0.0160801913589239,0.927419364452362\n             ,0.100383616983891,-0.36030051112175,0.896075665950775,0.270221561193466,-0.352177083492279,0.952138841152191\n             ,0.245724052190781,-0.181800335645676,0.980593264102936,0.101042859256268,-0.168009653687477,0.802429139614105\n             ,0.495289087295532,-0.332860708236694,0.84548145532608,0.494162082672119,-0.202397987246513,0.952138841152191\n             ,0.245724052190781,-0.181800335645676,0.896075665950775,0.270221561193466,-0.352177083492279,0.882022321224213\n             ,0.469820559024811,-0.0361285507678986,0.976959228515625,0.212819382548332,-0.0160801913589239,0.952138841152191\n             ,0.245724052190781,-0.181800335645676,0.84548145532608,0.494162082672119,-0.202397987246513,0.803016126155853\n             ,0.524560868740082,0.282844364643097,0.919247984886169,0.28292128443718,0.273749440908432,0.903041958808899,0.404765665531158\n             ,0.143805220723152,0.758423209190369,0.636332154273987,0.140980765223503,0.803016126155853,0.524560868740082\n             ,0.282844364643097,0.758423209190369,0.636332154273987,0.140980765223503,0.592619299888611,0.791549921035767\n             ,0.149167820811272,0.617453694343567,0.698337316513062,0.362044125795364,0.554235219955444,0.652181923389435\n             ,0.51718670129776,0.547570884227753,0.592168509960175,0.591187477111816,0.702617406845093,0.468200266361237,0.535833239555359\n             ,0.690945386886597,0.533301711082459,0.488040715456009,0.617453694343567,0.698337316513062,0.362044125795364\n             ,0.554235219955444,0.652181923389435,0.51718670129776,0.690945386886597,0.533301711082459,0.488040715456009,0.909750938415527\n             ,0.190706014633179,0.368760675191879,0.908561766147614,0.233992353081703,0.346068024635315,0.827282428741455\n             ,0.399940013885498,0.394527286291122,0.834239661693573,0.322053194046021,0.447577893733978,0.919247984886169\n             ,0.28292128443718,0.273749440908432,0.803016126155853,0.524560868740082,0.282844364643097,0.827282428741455,0.399940013885498\n             ,0.394527286291122,0.908561766147614,0.233992353081703,0.346068024635315,0.617453694343567,0.698337316513062\n             ,0.362044125795364,0.690945386886597,0.533301711082459,0.488040715456009,0.827282428741455,0.399940013885498\n             ,0.394527286291122,0.803016126155853,0.524560868740082,0.282844364643097,0.702617406845093,0.468200266361237\n             ,0.535833239555359,0.834239661693573,0.322053194046021,0.447577893733978,0.827282428741455,0.399940013885498\n             ,0.394527286291122,0.690945386886597,0.533301711082459,0.488040715456009,0.974952936172485,0.16339498758316,0.150893643498421\n             ,0.903041958808899,0.404765665531158,0.143805220723152,0.919247984886169,0.28292128443718,0.273749440908432,0.961383461952209\n             ,0.117865592241287,0.248695820569992,0.961383461952209,0.117865592241287,0.248695820569992,0.919247984886169\n             ,0.28292128443718,0.273749440908432,0.94008880853653,0.132723599672318,0.314034193754196,0.974952936172485,0.16339498758316\n             ,0.150893643498421,0.961383461952209,0.117865592241287,0.248695820569992,0.954596400260925,0.0140978172421455\n             ,0.297568470239639,0.98244035243988,0.067487895488739,0.173943564295769,0.98244035243988,0.067487895488739,0.173943564295769\n             ,0.954596400260925,0.0140978172421455,0.297568470239639,0.941569864749908,0.149283602833748,0.301928132772446\n             ,0.974337458610535,0.124738365411758,0.187368124723434,0.941569864749908,0.149283602833748,0.301928132772446\n             ,0.944782853126526,0.0188948940485716,0.327151775360107,0.982270240783691,0.0125455530360341,0.187050387263298\n             ,0.974337458610535,0.124738365411758,0.187368124723434,0.974952936172485,0.16339498758316,0.150893643498421,0.98244035243988\n             ,0.067487895488739,0.173943564295769,0.995472311973572,0.0944016128778458,0.0111022079363465,0.976959228515625\n             ,0.212819382548332,-0.0160801913589239,0.974952936172485,0.16339498758316,0.150893643498421,0.976959228515625\n             ,0.212819382548332,-0.0160801913589239,0.882022321224213,0.469820559024811,-0.0361285507678986,0.903041958808899\n             ,0.404765665531158,0.143805220723152,0.995472311973572,0.0944016128778458,0.0111022079363465,0.994647562503815\n             ,0.10004199296236,0.0258419681340456,0.983511805534363,0.0664925277233124,-0.168176248669624,0.980593264102936\n             ,0.101042859256268,-0.168009653687477,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.994307160377502\n             ,-0.0864710509777069,-0.0622573494911194,0.983511805534363,0.0664925277233124,-0.168176248669624,0.994647562503815\n             ,0.10004199296236,0.0258419681340456,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.974936366081238\n             ,0.00979904364794493,-0.222267970442772,0.983511805534363,0.0664925277233124,-0.168176248669624,0.994307160377502\n             ,-0.0864710509777069,-0.0622573494911194,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.917562901973724\n             ,0.0575754530727863,-0.393399685621262,0.983511805534363,0.0664925277233124,-0.168176248669624,0.974936366081238\n             ,0.00979904364794493,-0.222267970442772,0.927419364452362,0.100383616983891,-0.36030051112175,0.980593264102936\n             ,0.101042859256268,-0.168009653687477,0.983511805534363,0.0664925277233124,-0.168176248669624,0.917562901973724\n             ,0.0575754530727863,-0.393399685621262,0.995472311973572,0.0944016128778458,0.0111022079363465,0.98244035243988\n             ,0.067487895488739,0.173943564295769,0.974337458610535,0.124738365411758,0.187368124723434,0.994647562503815\n             ,0.10004199296236,0.0258419681340456,0.974337458610535,0.124738365411758,0.187368124723434,0.982270240783691\n             ,0.0125455530360341,0.187050387263298,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.994647562503815\n             ,0.10004199296236,0.0258419681340456,0.652361810207367,0.183982044458389,-0.735237896442413,0.822571158409119\n             ,0.128576725721359,-0.553935706615448,0.826969504356384,0.0367851555347443,-0.561042189598084,0.679547071456909\n             ,0.0500539317727089,-0.731922388076782,0.927419364452362,0.100383616983891,-0.36030051112175,0.917562901973724\n             ,0.0575754530727863,-0.393399685621262,0.826969504356384,0.0367851555347443,-0.561042189598084,0.822571158409119\n             ,0.128576725721359,-0.553935706615448,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.806335091590881\n             ,-0.064182311296463,-0.587966322898865,0.826969504356384,0.0367851555347443,-0.561042189598084,0.917562901973724\n             ,0.0575754530727863,-0.393399685621262,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.679547071456909\n             ,0.0500539317727089,-0.731922388076782,0.826969504356384,0.0367851555347443,-0.561042189598084,0.806335091590881\n             ,-0.064182311296463,-0.587966322898865,0.00778961461037397,0.31232625246048,-0.949942946434021,0.150489449501038\n             ,0.298117339611053,-0.942591607570648,0.156925246119499,0.156653806567192,-0.975107192993164,-0.00349890603683889\n             ,0.173883408308029,-0.984760046005249,0.289862871170044,0.274766653776169,-0.91677850484848,0.317441433668137\n             ,0.128782093524933,-0.939492464065552,0.156925246119499,0.156653806567192,-0.975107192993164,0.150489449501038\n             ,0.298117339611053,-0.942591607570648,0.330739557743073,-0.00570091884583235,-0.943704843521118,0.157008796930313\n             ,0.0128065068274736,-0.987514197826386,0.156925246119499,0.156653806567192,-0.975107192993164,0.317441433668137\n             ,0.128782093524933,-0.939492464065552,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.00349890603683889\n             ,0.173883408308029,-0.984760046005249,0.156925246119499,0.156653806567192,-0.975107192993164,0.157008796930313\n             ,0.0128065068274736,-0.987514197826386,0.289862871170044,0.274766653776169,-0.91677850484848,0.150489449501038\n             ,0.298117339611053,-0.942591607570648,0.148825243115425,0.473339468240738,-0.868216991424561,0.262024700641632\n             ,0.458286553621292,-0.849303483963013,0.00778961461037397,0.31232625246048,-0.949942946434021,0.0223272144794464\n             ,0.483893781900406,-0.874841868877411,0.148825243115425,0.473339468240738,-0.868216991424561,0.150489449501038\n             ,0.298117339611053,-0.942591607570648,0.0394280813634396,0.674713432788849,-0.737025916576386,0.152186512947083\n             ,0.664242565631866,-0.731861352920532,0.148825243115425,0.473339468240738,-0.868216991424561,0.0223272144794464\n             ,0.483893781900406,-0.874841868877411,0.241631746292114,0.652338445186615,-0.718379199504852,0.262024700641632\n             ,0.458286553621292,-0.849303483963013,0.148825243115425,0.473339468240738,-0.868216991424561,0.152186512947083\n             ,0.664242565631866,-0.731861352920532,0.312359720468521,0.949172854423523,-0.0387601368129253,0.299265414476395\n             ,0.918772161006927,-0.257483899593353,0.208839908242226,0.94090873003006,-0.266601979732513,0.250509142875671\n             ,0.967322170734406,-0.0391524843871593,0.270549148321152,0.870745658874512,-0.410615533590317,0.176319569349289\n             ,0.887581884860992,-0.425570040941238,0.208839908242226,0.94090873003006,-0.266601979732513,0.299265414476395\n             ,0.918772161006927,-0.257483899593353,0.0622152015566826,0.901260554790497,-0.428787440061569,0.0692925006151199\n             ,0.95879065990448,-0.27553403377533,0.208839908242226,0.94090873003006,-0.266601979732513,0.176319569349289,0.887581884860992\n             ,-0.425570040941238,0.0761537179350853,0.996121823787689,-0.044066745787859,0.250509142875671,0.967322170734406\n             ,-0.0391524843871593,0.208839908242226,0.94090873003006,-0.266601979732513,0.0692925006151199,0.95879065990448\n             ,-0.27553403377533,0.547570884227753,0.592168509960175,0.591187477111816,0.554235219955444,0.652181923389435\n             ,0.51718670129776,0.43085303902626,0.76660943031311,0.476104646921158,0.440387338399887,0.692013561725616,0.571993172168732\n             ,0.617453694343567,0.698337316513062,0.362044125795364,0.425699532032013,0.838678896427155,0.339702278375626\n             ,0.43085303902626,0.76660943031311,0.476104646921158,0.554235219955444,0.652181923389435,0.51718670129776,0.354833543300629\n             ,0.872086048126221,0.336985319852829,0.371298015117645,0.806507170200348,0.460091233253479,0.43085303902626,0.76660943031311\n             ,0.476104646921158,0.425699532032013,0.838678896427155,0.339702278375626,0.374413341283798,0.732271254062653\n             ,0.568852782249451,0.440387338399887,0.692013561725616,0.571993172168732,0.43085303902626,0.76660943031311,0.476104646921158\n             ,0.371298015117645,0.806507170200348,0.460091233253479,0.250509142875671,0.967322170734406,-0.0391524843871593\n             ,0.0761537179350853,0.996121823787689,-0.044066745787859,0.0787876397371292,0.981232225894928,0.175999522209167\n             ,0.280323714017868,0.944564402103424,0.170928910374641,0.250509142875671,0.967322170734406,-0.0391524843871593\n             ,0.280323714017868,0.944564402103424,0.170928910374641,0.32793140411377,0.928926110267639,0.171922340989113,0.312359720468521\n             ,0.949172854423523,-0.0387601368129253,0.280323714017868,0.944564402103424,0.170928910374641,0.0787876397371292\n             ,0.981232225894928,0.175999522209167,0.0780636146664619,0.932616472244263,0.352324455976486,0.311769247055054\n             ,0.887734949588776,0.338713079690933,0.280323714017868,0.944564402103424,0.170928910374641,0.311769247055054\n             ,0.887734949588776,0.338713079690933,0.354833543300629,0.872086048126221,0.336985319852829,0.32793140411377,0.928926110267639\n             ,0.171922340989113,0.572597026824951,0.0432385914027691,-0.818695962429047,0.647758185863495,-0.0730211958289146\n             ,-0.758338510990143,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.800951898097992,0.0424955785274506\n             ,-0.597218692302704,0.668470501899719,-0.223753660917282,-0.709282398223877,0.763271033763886,-0.164724439382553\n             ,-0.624726474285126,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.647758185863495,-0.0730211958289146\n             ,-0.758338510990143,0.903657674789429,-0.181017354130745,-0.38811793923378,0.933521032333374,-0.113554745912552\n             ,-0.340064376592636,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.763271033763886,-0.164724439382553\n             ,-0.624726474285126,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.800951898097992,0.0424955785274506\n             ,-0.597218692302704,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.933521032333374,-0.113554745912552\n             ,-0.340064376592636,0.564893007278442,0.823054492473602,-0.0589678697288036,0.717910170555115,0.69438225030899\n             ,-0.049378827214241,0.675751328468323,0.703905045986176,-0.218810006976128,0.51955384016037,0.820082247257233\n             ,-0.239851862192154,0.882022321224213,0.469820559024811,-0.0361285507678986,0.84548145532608,0.494162082672119\n             ,-0.202397987246513,0.675751328468323,0.703905045986176,-0.218810006976128,0.717910170555115,0.69438225030899\n             ,-0.049378827214241,0.802429139614105,0.495289087295532,-0.332860708236694,0.643622934818268,0.695999085903168\n             ,-0.318331331014633,0.675751328468323,0.703905045986176,-0.218810006976128,0.84548145532608,0.494162082672119\n             ,-0.202397987246513,0.468265026807785,0.816386163234711,-0.337996363639832,0.51955384016037,0.820082247257233\n             ,-0.239851862192154,0.675751328468323,0.703905045986176,-0.218810006976128,0.643622934818268,0.695999085903168\n             ,-0.318331331014633,0.758423209190369,0.636332154273987,0.140980765223503,0.903041958808899,0.404765665531158\n             ,0.143805220723152,0.882022321224213,0.469820559024811,-0.0361285507678986,0.717910170555115,0.69438225030899\n             ,-0.049378827214241,0.758423209190369,0.636332154273987,0.140980765223503,0.717910170555115,0.69438225030899\n             ,-0.049378827214241,0.564893007278442,0.823054492473602,-0.0589678697288036,0.592619299888611,0.791549921035767\n             ,0.149167820811272,0.374413341283798,0.732271254062653,0.568852782249451,0.371298015117645,0.806507170200348\n             ,0.460091233253479,0.329870194196701,0.817974448204041,0.471278518438339,0.320665568113327,0.737191736698151\n             ,0.594745278358459,0.354833543300629,0.872086048126221,0.336985319852829,0.311769247055054,0.887734949588776\n             ,0.338713079690933,0.329870194196701,0.817974448204041,0.471278518438339,0.371298015117645,0.806507170200348\n             ,0.460091233253479,0.0780636146664619,0.932616472244263,0.352324455976486,0.0752492547035217,0.86371123790741\n             ,0.498337715864182,0.329870194196701,0.817974448204041,0.471278518438339,0.311769247055054,0.887734949588776\n             ,0.338713079690933,0.0704773217439651,0.772313952445984,0.631319284439087,0.320665568113327,0.737191736698151\n             ,0.594745278358459,0.329870194196701,0.817974448204041,0.471278518438339,0.0752492547035217,0.86371123790741\n             ,0.498337715864182,0.941746175289154,0.170597404241562,0.289845913648605,0.941311419010162,0.140633046627045\n             ,0.30684706568718,0.944782853126526,0.0188948940485716,0.327151775360107,0.941569864749908,0.149283602833748\n             ,0.301928132772446,0.941746175289154,0.170597404241562,0.289845913648605,0.941569864749908,0.149283602833748\n             ,0.301928132772446,0.954596400260925,0.0140978172421455,0.297568470239639,0.955479383468628,-0.0429471768438816\n             ,0.291915565729141,0.954596400260925,0.0140978172421455,0.297568470239639,0.961383461952209,0.117865592241287\n             ,0.248695820569992,0.94008880853653,0.132723599672318,0.314034193754196,0.943980097770691,0.0651601999998093\n             ,0.323505431413651,0.919247984886169,0.28292128443718,0.273749440908432,0.908561766147614,0.233992353081703,0.346068024635315\n             ,0.94008880853653,0.132723599672318,0.314034193754196,0.909750938415527,0.190706014633179,0.368760675191879,0.943980097770691\n             ,0.0651601999998093,0.323505431413651,0.94008880853653,0.132723599672318,0.314034193754196,0.908561766147614\n             ,0.233992353081703,0.346068024635315,0.702617406845093,0.468200266361237,0.535833239555359,0.547570884227753\n             ,0.592168509960175,0.591187477111816,0.524678170681,0.559116363525391,0.641951441764832,0.744709670543671,0.422629773616791\n             ,0.516518652439117,0.510853886604309,0.565487027168274,-0.647497296333313,0.691879332065582,0.507222592830658\n             ,-0.513836801052094,0.772872805595398,0.305390149354935,-0.55624133348465,0.594810545444489,0.366844743490219\n             ,-0.715279877185822,0.802429139614105,0.495289087295532,-0.332860708236694,0.896075665950775,0.270221561193466\n             ,-0.352177083492279,0.772872805595398,0.305390149354935,-0.55624133348465,0.691879332065582,0.507222592830658\n             ,-0.513836801052094,0.927419364452362,0.100383616983891,-0.36030051112175,0.822571158409119,0.128576725721359\n             ,-0.553935706615448,0.772872805595398,0.305390149354935,-0.55624133348465,0.896075665950775,0.270221561193466\n             ,-0.352177083492279,0.652361810207367,0.183982044458389,-0.735237896442413,0.594810545444489,0.366844743490219\n             ,-0.715279877185822,0.772872805595398,0.305390149354935,-0.55624133348465,0.822571158409119,0.128576725721359\n             ,-0.553935706615448,0.468265026807785,0.816386163234711,-0.337996363639832,0.643622934818268,0.695999085903168\n             ,-0.318331331014633,0.603891670703888,0.66539740562439,-0.438817948102951,0.453374654054642,0.743375957012177\n             ,-0.491775959730148,0.802429139614105,0.495289087295532,-0.332860708236694,0.691879332065582,0.507222592830658\n             ,-0.513836801052094,0.603891670703888,0.66539740562439,-0.438817948102951,0.643622934818268,0.695999085903168\n             ,-0.318331331014633,0.510853886604309,0.565487027168274,-0.647497296333313,0.453374654054642,0.743375957012177\n             ,-0.491775959730148,0.603891670703888,0.66539740562439,-0.438817948102951,0.691879332065582,0.507222592830658\n             ,-0.513836801052094,0.270549148321152,0.870745658874512,-0.410615533590317,0.243253543972969,0.798352062702179\n             ,-0.550873577594757,0.160658344626427,0.809181571006775,-0.565167307853699,0.176319569349289,0.887581884860992\n             ,-0.425570040941238,0.241631746292114,0.652338445186615,-0.718379199504852,0.152186512947083,0.664242565631866\n             ,-0.731861352920532,0.160658344626427,0.809181571006775,-0.565167307853699,0.243253543972969,0.798352062702179\n             ,-0.550873577594757,0.0394280813634396,0.674713432788849,-0.737025916576386,0.0535563454031944,0.82038402557373\n             ,-0.569299399852753,0.160658344626427,0.809181571006775,-0.565167307853699,0.152186512947083,0.664242565631866\n             ,-0.731861352920532,0.0622152015566826,0.901260554790497,-0.428787440061569,0.176319569349289,0.887581884860992\n             ,-0.425570040941238,0.160658344626427,0.809181571006775,-0.565167307853699,0.0535563454031944,0.82038402557373\n             ,-0.569299399852753,0.422840595245361,0.890932738780975,0.165664300322533,0.32793140411377,0.928926110267639\n             ,0.171922340989113,0.354833543300629,0.872086048126221,0.336985319852829,0.425699532032013,0.838678896427155\n             ,0.339702278375626,0.422840595245361,0.890932738780975,0.165664300322533,0.425699532032013,0.838678896427155\n             ,0.339702278375626,0.617453694343567,0.698337316513062,0.362044125795364,0.592619299888611,0.791549921035767\n             ,0.149167820811272,0.415615051984787,0.907950639724731,-0.0537562556564808,0.312359720468521,0.949172854423523\n             ,-0.0387601368129253,0.32793140411377,0.928926110267639,0.171922340989113,0.422840595245361,0.890932738780975\n             ,0.165664300322533,0.415615051984787,0.907950639724731,-0.0537562556564808,0.422840595245361,0.890932738780975\n             ,0.165664300322533,0.592619299888611,0.791549921035767,0.149167820811272,0.564893007278442,0.823054492473602\n             ,-0.0589678697288036,0.270549148321152,0.870745658874512,-0.410615533590317,0.299265414476395,0.918772161006927\n             ,-0.257483899593353,0.396910279989243,0.88137674331665,-0.256197690963745,0.358765363693237,0.85211443901062\n             ,-0.381035953760147,0.312359720468521,0.949172854423523,-0.0387601368129253,0.415615051984787,0.907950639724731\n             ,-0.0537562556564808,0.396910279989243,0.88137674331665,-0.256197690963745,0.299265414476395,0.918772161006927\n             ,-0.257483899593353,0.564893007278442,0.823054492473602,-0.0589678697288036,0.51955384016037,0.820082247257233\n             ,-0.239851862192154,0.396910279989243,0.88137674331665,-0.256197690963745,0.415615051984787,0.907950639724731\n             ,-0.0537562556564808,0.468265026807785,0.816386163234711,-0.337996363639832,0.358765363693237,0.85211443901062\n             ,-0.381035953760147,0.396910279989243,0.88137674331665,-0.256197690963745,0.51955384016037,0.820082247257233\n             ,-0.239851862192154,0.270549148321152,0.870745658874512,-0.410615533590317,0.358765363693237,0.85211443901062\n             ,-0.381035953760147,0.326544016599655,0.784170210361481,-0.527679860591888,0.243253543972969,0.798352062702179\n             ,-0.550873577594757,0.468265026807785,0.816386163234711,-0.337996363639832,0.453374654054642,0.743375957012177\n             ,-0.491775959730148,0.326544016599655,0.784170210361481,-0.527679860591888,0.358765363693237,0.85211443901062\n             ,-0.381035953760147,0.510853886604309,0.565487027168274,-0.647497296333313,0.347870439291,0.626684665679932,-0.697318077087402\n             ,0.326544016599655,0.784170210361481,-0.527679860591888,0.453374654054642,0.743375957012177,-0.491775959730148\n             ,0.241631746292114,0.652338445186615,-0.718379199504852,0.243253543972969,0.798352062702179,-0.550873577594757\n             ,0.326544016599655,0.784170210361481,-0.527679860591888,0.347870439291,0.626684665679932,-0.697318077087402,0.652361810207367\n             ,0.183982044458389,-0.735237896442413,0.456190079450607,0.236269950866699,-0.857943534851074,0.404344618320465\n             ,0.425657629966736,-0.809518992900848,0.594810545444489,0.366844743490219,-0.715279877185822,0.289862871170044\n             ,0.274766653776169,-0.91677850484848,0.262024700641632,0.458286553621292,-0.849303483963013,0.404344618320465\n             ,0.425657629966736,-0.809518992900848,0.456190079450607,0.236269950866699,-0.857943534851074,0.241631746292114\n             ,0.652338445186615,-0.718379199504852,0.347870439291,0.626684665679932,-0.697318077087402,0.404344618320465,0.425657629966736\n             ,-0.809518992900848,0.262024700641632,0.458286553621292,-0.849303483963013,0.510853886604309,0.565487027168274\n             ,-0.647497296333313,0.594810545444489,0.366844743490219,-0.715279877185822,0.404344618320465,0.425657629966736\n             ,-0.809518992900848,0.347870439291,0.626684665679932,-0.697318077087402,0.289862871170044,0.274766653776169,-0.91677850484848\n             ,0.456190079450607,0.236269950866699,-0.857943534851074,0.494736820459366,0.0896743088960648,-0.8644038438797\n             ,0.317441433668137,0.128782093524933,-0.939492464065552,0.652361810207367,0.183982044458389,-0.735237896442413\n             ,0.679547071456909,0.0500539317727089,-0.731922388076782,0.494736820459366,0.0896743088960648,-0.8644038438797\n             ,0.456190079450607,0.236269950866699,-0.857943534851074,0.688820779323578,-0.0580477155745029,-0.722603917121887\n             ,0.514681279659271,-0.030753742903471,-0.856829822063446,0.494736820459366,0.0896743088960648,-0.8644038438797\n             ,0.679547071456909,0.0500539317727089,-0.731922388076782,0.330739557743073,-0.00570091884583235,-0.943704843521118\n             ,0.317441433668137,0.128782093524933,-0.939492464065552,0.494736820459366,0.0896743088960648,-0.8644038438797\n             ,0.514681279659271,-0.030753742903471,-0.856829822063446,0.668470501899719,-0.223753660917282,-0.709282398223877\n             ,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.493934065103531,-0.187336564064026,-0.849078416824341\n             ,0.505452334880829,-0.224964916706085,-0.8330118060112,0.572597026824951,0.0432385914027691,-0.818695962429047\n             ,0.440676689147949,-0.105378225445747,-0.891459226608276,0.493934065103531,-0.187336564064026,-0.849078416824341\n             ,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.31784787774086,-0.175634980201721,-0.931732296943665\n             ,0.310143738985062,-0.212492153048515,-0.926638007164001,0.493934065103531,-0.187336564064026,-0.849078416824341\n             ,0.440676689147949,-0.105378225445747,-0.891459226608276,0.305753350257874,-0.212547421455383,-0.92808324098587\n             ,0.505452334880829,-0.224964916706085,-0.8330118060112,0.493934065103531,-0.187336564064026,-0.849078416824341\n             ,0.310143738985062,-0.212492153048515,-0.926638007164001,0.330739557743073,-0.00570091884583235,-0.943704843521118\n             ,0.320828467607498,-0.143988654017448,-0.936128377914429,0.154737427830696,-0.127341821789742,-0.979714453220367\n             ,0.157008796930313,0.0128065068274736,-0.987514197826386,0.305753350257874,-0.212547421455383,-0.92808324098587\n             ,0.158634498715401,-0.20582041144371,-0.96564644575119,0.154737427830696,-0.127341821789742,-0.979714453220367\n             ,0.320828467607498,-0.143988654017448,-0.936128377914429,-0.0315490290522575,-0.190183460712433,-0.981241524219513\n             ,-0.0252742562443018,-0.106068439781666,-0.994037568569183,0.154737427830696,-0.127341821789742,-0.979714453220367\n             ,0.158634498715401,-0.20582041144371,-0.96564644575119,-0.0150691494345665,0.027319710701704,-0.999513149261475\n             ,0.157008796930313,0.0128065068274736,-0.987514197826386,0.154737427830696,-0.127341821789742,-0.979714453220367\n             ,-0.0252742562443018,-0.106068439781666,-0.994037568569183,0.688820779323578,-0.0580477155745029,-0.722603917121887\n             ,0.684577643871307,-0.163184806704521,-0.710439383983612,0.510694682598114,-0.152896985411644,-0.846057593822479\n             ,0.514681279659271,-0.030753742903471,-0.856829822063446,0.668470501899719,-0.223753660917282,-0.709282398223877\n             ,0.505452334880829,-0.224964916706085,-0.8330118060112,0.510694682598114,-0.152896985411644,-0.846057593822479\n             ,0.684577643871307,-0.163184806704521,-0.710439383983612,0.305753350257874,-0.212547421455383,-0.92808324098587\n             ,0.320828467607498,-0.143988654017448,-0.936128377914429,0.510694682598114,-0.152896985411644,-0.846057593822479\n             ,0.505452334880829,-0.224964916706085,-0.8330118060112,0.330739557743073,-0.00570091884583235,-0.943704843521118\n             ,0.514681279659271,-0.030753742903471,-0.856829822063446,0.510694682598114,-0.152896985411644,-0.846057593822479\n             ,0.320828467607498,-0.143988654017448,-0.936128377914429,0.668470501899719,-0.223753660917282,-0.709282398223877\n             ,0.684577643871307,-0.163184806704521,-0.710439383983612,0.78548675775528,-0.165785521268845,-0.596259772777557\n             ,0.763271033763886,-0.164724439382553,-0.624726474285126,0.688820779323578,-0.0580477155745029,-0.722603917121887\n             ,0.806335091590881,-0.064182311296463,-0.587966322898865,0.78548675775528,-0.165785521268845,-0.596259772777557\n             ,0.684577643871307,-0.163184806704521,-0.710439383983612,0.898539185523987,-0.0431283302605152,-0.436769187450409\n             ,0.838157534599304,-0.159007966518402,-0.521735966205597,0.78548675775528,-0.165785521268845,-0.596259772777557\n             ,0.806335091590881,-0.064182311296463,-0.587966322898865,0.903657674789429,-0.181017354130745,-0.38811793923378\n             ,0.763271033763886,-0.164724439382553,-0.624726474285126,0.78548675775528,-0.165785521268845,-0.596259772777557\n             ,0.838157534599304,-0.159007966518402,-0.521735966205597,0.898539185523987,-0.0431283302605152,-0.436769187450409\n             ,0.974936366081238,0.00979904364794493,-0.222267970442772,0.983070194721222,-0.155307233333588,-0.0972249284386635\n             ,0.965442478656769,-0.181367635726929,-0.187153950333595,0.989281177520752,-0.130912706255913,-0.0646882206201553\n             ,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.974936366081238,0.00979904364794493,-0.222267970442772\n             ,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.981309294700623,-0.093424528837204,-0.168237790465355\n             ,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.989231050014496,-0.126766130328178,-0.0731591805815697\n             ,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.958209931850433,-0.0949564725160599,-0.269846349954605\n             ,0.933521032333374,-0.113554745912552,-0.340064376592636,0.989404678344727,-0.134779617190361,-0.0539703145623207\n             ,0.440676689147949,-0.105378225445747,-0.891459226608276,0.572597026824951,0.0432385914027691,-0.818695962429047\n             ,0.564589977264404,0.0705946907401085,-0.822346925735474,0.426292926073074,0.0950048267841339,-0.899582326412201\n             ,0.440676689147949,-0.105378225445747,-0.891459226608276,0.426292926073074,0.0950048267841339,-0.899582326412201\n             ,0.35312095284462,0.134023457765579,-0.925928354263306,0.31784787774086,-0.175634980201721,-0.931732296943665\n             ,0.191843032836914,-0.158846795558929,-0.968485355377197,0.31784787774086,-0.175634980201721,-0.931732296943665\n             ,0.35312095284462,0.134023457765579,-0.925928354263306,0.23451641201973,0.162132352590561,-0.958496332168579\n             ,0.191843032836914,-0.158846795558929,-0.968485355377197,0.23451641201973,0.162132352590561,-0.958496332168579\n             ,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.0269717872142792,-0.128648608922958,-0.991323411464691\n             ,0.164569541811943,0.375759840011597,-0.911987602710724,0.286092400550842,0.370450645685196,-0.883695363998413\n             ,0.258463323116302,0.471300333738327,-0.843251287937164,0.148562401533127,0.439921736717224,-0.885662496089935\n             ,0.17595848441124,0.184216767549515,-0.967007160186768,0.311260253190994,0.141205564141274,-0.93977552652359\n             ,0.286092400550842,0.370450645685196,-0.883695363998413,0.164569541811943,0.375759840011597,-0.911987602710724\n             ,0.591210007667542,0.268222451210022,-0.760609924793243,0.476214468479156,0.553961336612701,-0.682895720005035\n             ,0.286092400550842,0.370450645685196,-0.883695363998413,0.311260253190994,0.141205564141274,-0.93977552652359\n             ,0.286092400550842,0.370450645685196,-0.883695363998413,0.476214468479156,0.553961336612701,-0.682895720005035\n             ,0.411318093538284,0.679248511791229,-0.607814848423004,0.258463323116302,0.471300333738327,-0.843251287937164\n             ,0.0694107115268707,0.216942340135574,-0.973713636398315,0.17595848441124,0.184216767549515,-0.967007160186768\n             ,0.164569541811943,0.375759840011597,-0.911987602710724,0.0754155963659287,0.356131970882416,-0.931387424468994\n             ,0.0754155963659287,0.356131970882416,-0.931387424468994,0.164569541811943,0.375759840011597,-0.911987602710724\n             ,0.148562401533127,0.439921736717224,-0.885662496089935,0.0560689158737659,0.370522946119308,-0.927129447460175\n             ,-0.000760512368287891,0.207898333668709,-0.978150188922882,0.0694107115268707,0.216942340135574,-0.973713636398315\n             ,0.0754155963659287,0.356131970882416,-0.931387424468994,0.0102010685950518,0.341328680515289,-0.939888656139374\n             ,0.0102010685950518,0.341328680515289,-0.939888656139374,0.0754155963659287,0.356131970882416,-0.931387424468994\n             ,0.0560689158737659,0.370522946119308,-0.927129447460175,0.010585374198854,0.345912545919418,-0.938207030296326\n             ,0.75023740530014,-0.238408371806145,0.616688966751099,0.616745948791504,-0.290956258773804,0.731415688991547\n             ,0.628606140613556,-0.0929744690656662,0.77214640378952,0.76386970281601,-0.0586191527545452,0.642702758312225\n             ,0.855076372623444,-0.165702432394028,0.491311639547348,0.75023740530014,-0.238408371806145,0.616688966751099\n             ,0.76386970281601,-0.0586191527545452,0.642702758312225,0.85496574640274,-0.0235987044870853,0.518147349357605\n             ,0.89460563659668,0.0454745329916477,0.444536596536636,0.882708728313446,0.169010564684868,0.438475489616394\n             ,0.941748380661011,0.168847903609276,0.290861427783966,0.940892815589905,-0.119216494262218,0.317030221223831\n             ,0.854965507984161,-0.114104993641377,0.505978286266327,0.89460563659668,0.0454745329916477,0.444536596536636\n             ,0.506778419017792,-0.624182820320129,0.594618737697601,0.535486578941345,-0.739663183689117,0.407618075609207\n             ,0.882708728313446,0.169010564684868,0.438475489616394,-0.053869191557169,-0.604926705360413,-0.794456899166107\n             ,0.868690371513367,-0.108423709869385,-0.483343929052353,0.724950075149536,-0.680160522460938,0.108761206269264\n             ,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.0578227378427982,-0.628531396389008,-0.775631904602051\n             ,-0.053869191557169,-0.604926705360413,-0.794456899166107,-0.0524128936231136,-0.826581239700317,-0.560371577739716\n             ,0.801777124404907,0.00266337930224836,-0.597617149353027,0.868690371513367,-0.108423709869385,-0.483343929052353\n             ,-0.053869191557169,-0.604926705360413,-0.794456899166107,0.0578227378427982,-0.628531396389008,-0.775631904602051\n             ,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.712912499904633,-0.638341963291168,0.290302157402039\n             ,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.549701511859894,-0.519823312759399,0.653920412063599\n             ,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.712912499904633,-0.638341963291168,0.290302157402039\n             ,-0.498864650726318,-0.669482290744781,0.550388514995575,-0.139181971549988,-0.98750239610672,0.0739418119192123\n             ,0.237821668386459,-0.891240954399109,0.386174082756042,0.589298963546753,-0.771825730800629,0.238771393895149\n             ,0.2151879966259,-0.952648401260376,-0.214837476611137,0.237821668386459,-0.891240954399109,0.386174082756042\n             ,-0.139181971549988,-0.98750239610672,0.0739418119192123,-0.449249923229218,-0.874760508537292,0.181572452187538\n             ,-0.272507458925247,-0.860418200492859,0.430604517459869,0.786046326160431,0.0746424272656441,0.613644540309906\n             ,0.89460563659668,0.0454745329916477,0.444536596536636,0.854965507984161,-0.114104993641377,0.505978286266327\n             ,0.576319634914398,0.0662916451692581,0.814531207084656,0.506778419017792,-0.624182820320129,0.594618737697601\n             ,0.89460563659668,0.0454745329916477,0.444536596536636,0.786046326160431,0.0746424272656441,0.613644540309906\n             ,-0.712912499904633,-0.638341963291168,0.290302157402039,-0.449249923229218,-0.874760508537292,0.181572452187538\n             ,0.506778419017792,-0.624182820320129,0.594618737697601,-0.498864650726318,-0.669482290744781,0.550388514995575\n             ,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.272507458925247,-0.860418200492859,0.430604517459869\n             ,-0.449249923229218,-0.874760508537292,0.181572452187538,-0.712912499904633,-0.638341963291168,0.290302157402039\n             ,0.844061017036438,0.391468346118927,0.366488069295883,0.868690371513367,-0.108423709869385,-0.483343929052353\n             ,0.801777124404907,0.00266337930224836,-0.597617149353027,0.941748380661011,0.168847903609276,0.290861427783966\n             ,0.882708728313446,0.169010564684868,0.438475489616394,0.844061017036438,0.391468346118927,0.366488069295883\n             ,0.535486578941345,-0.739663183689117,0.407618075609207,0.724950075149536,-0.680160522460938,0.108761206269264\n             ,0.844061017036438,0.391468346118927,0.366488069295883,0.882708728313446,0.169010564684868,0.438475489616394\n             ,0.844061017036438,0.391468346118927,0.366488069295883,0.724950075149536,-0.680160522460938,0.108761206269264\n             ,0.868690371513367,-0.108423709869385,-0.483343929052353,-0.0362738110125065,-0.271473735570908,0.961762070655823\n             ,0.032781969755888,-0.0827890038490295,0.996027767658234,0.356171637773514,-0.454808622598648,0.816266417503357\n             ,0.361973732709885,-0.605334222316742,0.708904445171356,0.032781969755888,-0.0827890038490295,0.996027767658234\n             ,0.204357400536537,-0.124537408351898,0.97094202041626,0.17069847881794,-0.387216597795486,0.906049311161041\n             ,0.356171637773514,-0.454808622598648,0.816266417503357,0.314119011163712,-0.739236891269684,0.595699608325958\n             ,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0362738110125065,-0.271473735570908,0.961762070655823\n             ,0.361973732709885,-0.605334222316742,0.708904445171356,0.314119011163712,-0.739236891269684,0.595699608325958\n             ,0.206430405378342,-0.778748571872711,0.592399477958679,0.00206050439737737,-0.384430259466171,0.923151731491089\n             ,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0268061328679323,-0.427482962608337,0.903625905513763\n             ,0.00206050439737737,-0.384430259466171,0.923151731491089,0.0454688854515553,-0.765503704547882,0.641822934150696\n             ,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.00206050439737737,-0.384430259466171,0.923151731491089\n             ,0.206430405378342,-0.778748571872711,0.592399477958679,0.0366746000945568,-0.755166232585907,0.654506683349609\n             ,0.00267285062000155,-0.590106904506683,0.807320654392242,0.0366746000945568,-0.755166232585907,0.654506683349609\n             ,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0352796316146851,-0.824001550674438,0.565488159656525\n             ,0.00267285062000155,-0.590106904506683,0.807320654392242,0.0454688854515553,-0.765503704547882,0.641822934150696\n             ,0.00206050439737737,-0.384430259466171,0.923151731491089,0.00267285062000155,-0.590106904506683,0.807320654392242\n             ,0.17069847881794,-0.387216597795486,0.906049311161041,0.458961844444275,-0.463801801204681,0.757787525653839\n             ,0.835841596126556,0.145906612277031,0.529225945472717,0.513224720954895,-0.832203328609467,0.209852293133736\n             ,0.835841596126556,0.145906612277031,0.529225945472717,0.190371856093407,0.256429195404053,0.947629988193512\n             ,-0.0904141515493393,0.920958995819092,0.379024863243103,0.835841596126556,0.145906612277031,0.529225945472717\n             ,0.458961844444275,-0.463801801204681,0.757787525653839,0.190371856093407,0.256429195404053,0.947629988193512\n             ,0.680179119110107,0.270307511091232,0.681388378143311,0.835841596126556,0.145906612277031,0.529225945472717\n             ,-0.0904141515493393,0.920958995819092,0.379024863243103,-0.111705176532269,0.976534187793732,0.18412746489048\n             ,0.513224720954895,-0.832203328609467,0.209852293133736,0.835841596126556,0.145906612277031,0.529225945472717\n             ,0.680179119110107,0.270307511091232,0.681388378143311,-0.00835443940013647,-0.52916145324707,0.848480045795441\n             ,0.168070778250694,-0.457133919000626,0.873373210430145,0.192558065056801,-0.101361930370331,0.976036429405212\n             ,0.0599219687283039,-0.361293613910675,0.93052476644516,0.361973732709885,-0.605334222316742,0.708904445171356\n             ,0.356171637773514,-0.454808622598648,0.816266417503357,0.578862547874451,-0.786143362522125,0.216556489467621\n             ,0.626789748668671,-0.749257385730743,0.213887751102448,0.361973732709885,-0.605334222316742,0.708904445171356\n             ,0.626789748668671,-0.749257385730743,0.213887751102448,0.517510056495667,-0.833824872970581,0.192144423723221\n             ,0.314119011163712,-0.739236891269684,0.595699608325958,0.17069847881794,-0.387216597795486,0.906049311161041\n             ,0.513224720954895,-0.832203328609467,0.209852293133736,0.578862547874451,-0.786143362522125,0.216556489467621\n             ,0.356171637773514,-0.454808622598648,0.816266417503357,0.578862547874451,-0.786143362522125,0.216556489467621\n             ,0.513224720954895,-0.832203328609467,0.209852293133736,0.680179119110107,0.270307511091232,0.681388378143311\n             ,0.714891254901886,0.201140508055687,0.669681310653687,0.360629975795746,-0.702259659767151,0.613821983337402\n             ,0.626789748668671,-0.749257385730743,0.213887751102448,0.578862547874451,-0.786143362522125,0.216556489467621\n             ,0.714891254901886,0.201140508055687,0.669681310653687,-0.0101526426151395,0.0385068021714687,0.999206781387329\n             ,0.315801054239273,0.0731089860200882,0.946004629135132,0.192558065056801,-0.101361930370331,0.976036429405212\n             ,0.168070778250694,-0.457133919000626,0.873373210430145,0.139593034982681,-0.543097734451294,0.827984690666199\n             ,0.0695574581623077,-0.316367268562317,0.946083247661591,-0.136446863412857,-0.21966315805912,0.965986728668213\n             ,-0.00769979506731033,-0.155788585543633,0.987760424613953,0.130675092339516,-0.201507270336151,0.9707310795784\n             ,-0.204613357782364,0.564212739467621,0.799873352050781,0.026754243299365,0.843723058700562,0.53611159324646\n             ,-0.046717431396246,0.464232265949249,0.884480595588684,-0.204613357782364,0.564212739467621,0.799873352050781\n             ,-0.218910127878189,-0.0667930841445923,0.973456263542175,-0.136446863412857,-0.21966315805912,0.965986728668213\n             ,-0.0965566337108612,0.382317036390305,0.918972492218018,0.0405396111309528,-0.00950155965983868,0.999132752418518\n             ,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.0505779199302197,-0.0635379478335381,0.996696949005127\n             ,0.0361802279949188,0.15255069732666,0.987633168697357,0.0405396111309528,-0.00950155965983868,0.999132752418518\n             ,0.0361802279949188,0.15255069732666,0.987633168697357,0.190371856093407,0.256429195404053,0.947629988193512\n             ,0.193743079900742,0.0896209701895714,0.976950228214264,0.724869191646576,-0.144625514745712,0.673534035682678\n             ,0.668389976024628,-0.0383556596934795,0.742821395397186,0.729625582695007,0.0742557868361473,0.679803311824799\n             ,0.712920248508453,0.00929267052561045,0.701183557510376,0.724869191646576,-0.144625514745712,0.673534035682678\n             ,0.729625582695007,0.0742557868361473,0.679803311824799,0.621637463569641,0.0923129394650459,0.77784651517868\n             ,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.162078380584717,0.332254558801651,0.929159581661224\n             ,0.0823612809181213,0.629497587680817,0.772624969482422,0.0361802279949188,0.15255069732666,0.987633168697357\n             ,0.256553143262863,0.759260475635529,0.598083674907684,0.118274427950382,0.894158720970154,0.431846410036087\n             ,0.0823612809181213,0.629497587680817,0.772624969482422,0.162078380584717,0.332254558801651,0.929159581661224\n             ,-0.111705176532269,0.976534187793732,0.18412746489048,-0.0904141515493393,0.920958995819092,0.379024863243103\n             ,0.0823612809181213,0.629497587680817,0.772624969482422,0.118274427950382,0.894158720970154,0.431846410036087\n             ,0.190371856093407,0.256429195404053,0.947629988193512,0.0361802279949188,0.15255069732666,0.987633168697357\n             ,0.0823612809181213,0.629497587680817,0.772624969482422,-0.0904141515493393,0.920958995819092,0.379024863243103\n             ,0.724869191646576,-0.144625514745712,0.673534035682678,0.388869285583496,-0.304632723331451,0.869470834732056\n             ,0.405026167631149,-0.171226277947426,0.898128807544708,0.593307375907898,-0.0775594636797905,0.801230847835541\n             ,0.668389976024628,-0.0383556596934795,0.742821395397186,-0.218910127878189,-0.0667930841445923,0.973456263542175\n             ,-0.104829348623753,-0.0149719836190343,0.994377493858337,0.0144113004207611,0.0269631575793028,0.999532520771027\n             ,-0.0540277659893036,-0.0540848448872566,0.997073590755463,-0.136446863412857,-0.21966315805912,0.965986728668213\n             ,-0.218910127878189,-0.0667930841445923,0.973456263542175,-0.0540277659893036,-0.0540848448872566,0.997073590755463\n             ,-0.00769979506731033,-0.155788585543633,0.987760424613953,-0.00769979506731033,-0.155788585543633,0.987760424613953\n             ,-0.0540277659893036,-0.0540848448872566,0.997073590755463,0.333709418773651,0.169013321399689,0.927400946617126\n             ,0.205060333013535,0.0685160234570503,0.976348161697388,-0.0540277659893036,-0.0540848448872566,0.997073590755463\n             ,0.0144113004207611,0.0269631575793028,0.999532520771027,0.470013290643692,0.212332352995873,0.856739461421967\n             ,0.333709418773651,0.169013321399689,0.927400946617126,0.578032433986664,0.306231528520584,0.756373405456543\n             ,0.357361167669296,0.242811009287834,0.901851356029511,0.388869285583496,-0.304632723331451,0.869470834732056\n             ,0.724869191646576,-0.144625514745712,0.673534035682678,-0.0965566337108612,0.382317036390305,0.918972492218018\n             ,-0.136446863412857,-0.21966315805912,0.965986728668213,0.0695574581623077,-0.316367268562317,0.946083247661591\n             ,0.119953289628029,0.283690631389618,0.951383650302887,-0.104829348623753,-0.0149719836190343,0.994377493858337\n             ,-0.046717431396246,0.464232265949249,0.884480595588684,0.162078380584717,0.332254558801651,0.929159581661224\n             ,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.026754243299365,0.843723058700562,0.53611159324646\n             ,0.256553143262863,0.759260475635529,0.598083674907684,0.162078380584717,0.332254558801651,0.929159581661224\n             ,-0.046717431396246,0.464232265949249,0.884480595588684,0.0405396111309528,-0.00950155965983868,0.999132752418518\n             ,0.193743079900742,0.0896209701895714,0.976950228214264,0.533409833908081,0.213411912322044,0.818492114543915\n             ,0.109049446880817,0.0514820925891399,0.992702305316925,0.0540597923099995,-0.0316095426678658,0.998037278652191\n             ,0.0405396111309528,-0.00950155965983868,0.999132752418518,0.109049446880817,0.0514820925891399,0.992702305316925\n             ,0.109049446880817,0.0514820925891399,0.992702305316925,0.533409833908081,0.213411912322044,0.818492114543915\n             ,0.54212898015976,0.215727955102921,0.812131583690643,0.578032433986664,0.306231528520584,0.756373405456543,0.724869191646576\n             ,-0.144625514745712,0.673534035682678,0.858066916465759,-0.0402064435184002,0.511961579322815,0.700553953647614\n             ,0.463066458702087,0.542949020862579,0.858066916465759,-0.0402064435184002,0.511961579322815,0.875872433185577\n             ,0.296488851308823,0.38071221113205,0.802525162696838,0.518118143081665,0.295815676450729,0.700553953647614,0.463066458702087\n             ,0.542949020862579,-0.474541693925858,-0.67278927564621,0.567595541477203,-0.994033694267273,0.107649877667427\n             ,-0.0175654906779528,0.212925776839256,0.972887873649597,-0.0902870893478394,0.480981200933456,0.871001183986664\n             ,0.100070223212242,0.13062296807766,0.400416731834412,0.906975269317627,-0.878701210021973,-0.298690170049667\n             ,-0.372382044792175,-0.817673206329346,0.400343358516693,-0.413685619831085,0.212925776839256,0.972887873649597\n             ,-0.0902870893478394,-0.994033694267273,0.107649877667427,-0.0175654906779528,0.370056182146072,0.811048626899719\n             ,-0.453054636716843,0.713096976280212,0.68854147195816,-0.131921663880348,0.212925776839256,0.972887873649597\n             ,-0.0902870893478394,-0.817673206329346,0.400343358516693,-0.413685619831085,0.212925776839256,0.972887873649597\n             ,-0.0902870893478394,0.713096976280212,0.68854147195816,-0.131921663880348,0.778178691864014,0.616257607936859\n             ,0.121097095310688,0.480981200933456,0.871001183986664,0.100070223212242,0.551189541816711,0.456701904535294\n             ,0.698293268680573,0.486871391534805,0.750825703144073,0.446337312459946,0.276492714881897,0.762958288192749\n             ,0.584334194660187,0.326813966035843,0.423467636108398,0.844906985759735,0.551189541816711,0.456701904535294\n             ,0.698293268680573,0.326813966035843,0.423467636108398,0.844906985759735,0.329012274742126,0.260547906160355\n             ,0.907670497894287,0.561613619327545,0.285967856645584,0.776409983634949,0.7577885389328,0.376234740018845,0.533107817173004\n             ,0.739092469215393,0.541533410549164,0.400604367256165,0.778178691864014,0.616257607936859,0.121097095310688\n             ,0.827663242816925,0.523418128490448,0.202501967549324,0.804373443126678,0.392295897006989,0.446191996335983\n             ,0.739092469215393,0.541533410549164,0.400604367256165,0.7577885389328,0.376234740018845,0.533107817173004,0.758135914802551\n             ,0.0851427242159843,0.646514236927032,0.443391680717468,-0.0999263972043991,0.89074045419693,0.252335846424103\n             ,0.330343335866928,0.909505307674408,-0.26518127322197,0.597104549407959,-0.757063448429108,0.182353228330612\n             ,0.97417688369751,-0.133141815662384,-0.0107070477679372,0.835606217384338,-0.549224615097046,-0.278109550476074\n             ,0.416547179222107,-0.865530788898468,-0.0107070477679372,0.835606217384338,-0.549224615097046,0.182353228330612\n             ,0.97417688369751,-0.133141815662384,0.486871391534805,0.750825703144073,0.446337312459946,0.534174799919128\n             ,0.836855232715607,0.119710274040699,0.170329049229622,0.936843514442444,-0.305470585823059,-0.523017466068268\n             ,0.285451769828796,-0.803100228309631,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.0107070477679372\n             ,0.835606217384338,-0.549224615097046,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.0107070477679372\n             ,0.835606217384338,-0.549224615097046,0.170329049229622,0.936843514442444,-0.305470585823059,-0.452081710100174\n             ,0.604530513286591,-0.655869662761688,0.7577885389328,0.376234740018845,0.533107817173004,0.804373443126678,0.392295897006989\n             ,0.446191996335983,0.731819272041321,0.307825177907944,0.608016610145569,0.740872263908386,0.260281056165695\n             ,0.619162321090698,0.731819272041321,0.307825177907944,0.608016610145569,0.804373443126678,0.392295897006989\n             ,0.446191996335983,0.650610029697418,0.750839710235596,0.113781958818436,0.665128111839294,0.607672452926636\n             ,0.433980166912079,0.731819272041321,0.307825177907944,0.608016610145569,0.665128111839294,0.607672452926636\n             ,0.433980166912079,0.551189541816711,0.456701904535294,0.698293268680573,0.561613619327545,0.285967856645584\n             ,0.776409983634949,0.665128111839294,0.607672452926636,0.433980166912079,0.534174799919128,0.836855232715607\n             ,0.119710274040699,0.486871391534805,0.750825703144073,0.446337312459946,0.551189541816711,0.456701904535294\n             ,0.698293268680573,0.558381021022797,0.167118594050407,0.812577426433563,0.561613619327545,0.285967856645584\n             ,0.776409983634949,0.329012274742126,0.260547906160355,0.907670497894287,0.315978825092316,0.0904445722699165\n             ,0.944445431232452,-0.0239754971116781,0.848645508289337,-0.528418362140656,0.113433599472046,0.992009460926056\n             ,0.0552276223897934,0.182353228330612,0.97417688369751,-0.133141815662384,-0.26518127322197,0.597104549407959\n             ,-0.757063448429108,0.113433599472046,0.992009460926056,0.0552276223897934,0.276492714881897,0.762958288192749\n             ,0.584334194660187,0.486871391534805,0.750825703144073,0.446337312459946,0.182353228330612,0.97417688369751,-0.133141815662384\n             ,0.0685662999749184,0.738678991794586,0.670561015605927,0.0410983338952065,0.381287395954132,0.923542559146881\n             ,0.172223508358002,0.402292132377625,0.899166345596313,0.179263070225716,0.753637075424194,0.632373213768005\n             ,0.172223508358002,0.402292132377625,0.899166345596313,0.0410983338952065,0.381287395954132,0.923542559146881\n             ,0.0325647220015526,0.328354388475418,0.943993091583252,0.181231990456581,0.289873003959656,0.939749240875244\n             ,0.329012274742126,0.260547906160355,0.907670497894287,0.326813966035843,0.423467636108398,0.844906985759735\n             ,0.172223508358002,0.402292132377625,0.899166345596313,0.181231990456581,0.289873003959656,0.939749240875244\n             ,0.276492714881897,0.762958288192749,0.584334194660187,0.179263070225716,0.753637075424194,0.632373213768005\n             ,0.172223508358002,0.402292132377625,0.899166345596313,0.326813966035843,0.423467636108398,0.844906985759735\n             ,0.650610029697418,0.750839710235596,0.113781958818436,0.401338756084442,0.891479909420013,-0.210216000676155\n             ,0.534174799919128,0.836855232715607,0.119710274040699,0.665128111839294,0.607672452926636,0.433980166912079\n             ,0.740872263908386,0.260281056165695,0.619162321090698,0.731819272041321,0.307825177907944,0.608016610145569\n             ,0.561613619327545,0.285967856645584,0.776409983634949,0.558381021022797,0.167118594050407,0.812577426433563\n             ,0.315978825092316,0.0904445722699165,0.944445431232452,0.329012274742126,0.260547906160355,0.907670497894287\n             ,0.181231990456581,0.289873003959656,0.939749240875244,0.178787171840668,0.10878062993288,0.977855801582336,0.0226862858980894\n             ,0.138102903962135,0.990158021450043,0.178787171840668,0.10878062993288,0.977855801582336,0.181231990456581,0.289873003959656\n             ,0.939749240875244,0.0325647220015526,0.328354388475418,0.943993091583252,0.0685662999749184,0.738678991794586\n             ,0.670561015605927,0.179263070225716,0.753637075424194,0.632373213768005,0.145434200763702,0.978163301944733\n             ,0.14847719669342,0.078812912106514,0.980074644088745,0.182324379682541,0.276492714881897,0.762958288192749,0.584334194660187\n             ,0.113433599472046,0.992009460926056,0.0552276223897934,0.145434200763702,0.978163301944733,0.14847719669342\n             ,0.179263070225716,0.753637075424194,0.632373213768005,-0.0239754971116781,0.848645508289337,-0.528418362140656\n             ,0.103339314460754,0.947827875614166,-0.301568180322647,0.145434200763702,0.978163301944733,0.14847719669342\n             ,0.113433599472046,0.992009460926056,0.0552276223897934,0.0339763574302197,0.937289535999298,-0.346891850233078\n             ,0.078812912106514,0.980074644088745,0.182324379682541,0.145434200763702,0.978163301944733,0.14847719669342,0.103339314460754\n             ,0.947827875614166,-0.301568180322647,-0.452081710100174,0.604530513286591,-0.655869662761688,-0.803184449672699\n             ,0.0743702203035355,-0.591069996356964,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.452081710100174\n             ,0.604530513286591,-0.655869662761688,0.170329049229622,0.936843514442444,-0.305470585823059,0.534174799919128\n             ,0.836855232715607,0.119710274040699,0.401338756084442,0.891479909420013,-0.210216000676155,-0.19065423309803\n             ,0.753101229667664,-0.629674077033997,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.803184449672699\n             ,0.0743702203035355,-0.591069996356964,-0.452081710100174,0.604530513286591,-0.655869662761688,-0.19065423309803\n             ,0.753101229667664,-0.629674077033997,0.277289211750031,-0.704152882099152,0.653666138648987,0.295715004205704\n             ,-0.771513819694519,0.56331080198288,0.426225006580353,-0.76509952545166,0.482654064893723,0.385886758565903\n             ,-0.746556282043457,0.541982591152191,0.353581786155701,-0.382090777158737,0.853807151317596,0.277289211750031\n             ,-0.704152882099152,0.653666138648987,0.385886758565903,-0.746556282043457,0.541982591152191,0.476604402065277\n             ,-0.515640795230865,0.712013244628906,-0.00443782517686486,-0.271711438894272,0.962368547916412,0.176269888877869\n             ,-0.285972148180008,0.941885769367218,0.238539665937424,0.21987047791481,0.945915341377258,0.0352616421878338\n             ,0.240770235657692,0.969941377639771,0.353581786155701,-0.382090777158737,0.853807151317596,0.434465974569321\n             ,0.150427758693695,0.888037621974945,0.238539665937424,0.21987047791481,0.945915341377258,0.176269888877869,-0.285972148180008\n             ,0.941885769367218,0.40496814250946,0.259010583162308,0.87687760591507,0.235586777329445,0.270827025175095,0.933355033397675\n             ,0.238539665937424,0.21987047791481,0.945915341377258,0.434465974569321,0.150427758693695,0.888037621974945,0.0384946875274181\n             ,0.285418510437012,0.957629561424255,0.0352616421878338,0.240770235657692,0.969941377639771,0.238539665937424\n             ,0.21987047791481,0.945915341377258,0.235586777329445,0.270827025175095,0.933355033397675,0.362627446651459,-0.180693462491035\n             ,0.914249002933502,0.248945504426956,-0.117258243262768,0.961393058300018,0.40496814250946,0.259010583162308\n             ,0.87687760591507,0.552154183387756,0.173749193549156,0.815436661243439,0.0766859278082848,-0.975562393665314\n             ,0.205905899405479,-0.0727874711155891,-0.98180228471756,0.1754030585289,0.0500960312783718,-0.998004376888275\n             ,0.0384394414722919,0.128954827785492,-0.985570788383484,0.109639815986156,0.193085044622421,-0.95480340719223\n             ,0.225983783602715,0.0766859278082848,-0.975562393665314,0.205905899405479,0.128954827785492,-0.985570788383484\n             ,0.109639815986156,0.225613579154015,-0.956868171691895,0.183034926652908,0.282156497240067,-0.915852665901184\n             ,-0.285659939050674,0.470402508974075,-0.871353209018707,-0.139517307281494,0.465096980333328,-0.885112583637238\n             ,0.016138968989253,0.283746033906937,-0.948122382164001,-0.143360316753387,0.465096980333328,-0.885112583637238\n             ,0.016138968989253,0.470402508974075,-0.871353209018707,-0.139517307281494,0.600540995597839,-0.799374520778656\n             ,-0.0187329761683941,0.545321881771088,-0.833433032035828,0.0895174741744995,0.545321881771088,-0.833433032035828\n             ,0.0895174741744995,0.630033671855927,-0.76368510723114,0.140863940119743,0.539758801460266,-0.780041754245758\n             ,0.316536396741867,0.471000701189041,-0.846986770629883,0.246519237756729,0.630033671855927,-0.76368510723114\n             ,0.140863940119743,0.767249822616577,-0.595458924770355,0.23823593556881,0.70995169878006,-0.557043075561523\n             ,0.430896311998367,0.539758801460266,-0.780041754245758,0.316536396741867,0.295715004205704,-0.771513819694519\n             ,0.56331080198288,0.277289211750031,-0.704152882099152,0.653666138648987,0.0847999006509781,-0.684147000312805\n             ,0.724397599697113,0.0651562884449959,-0.780692636966705,0.62150913476944,0.353581786155701,-0.382090777158737\n             ,0.853807151317596,0.176269888877869,-0.285972148180008,0.941885769367218,0.0847999006509781,-0.684147000312805\n             ,0.724397599697113,0.277289211750031,-0.704152882099152,0.653666138648987,-0.00443782517686486,-0.271711438894272\n             ,0.962368547916412,-0.0397491529583931,-0.678164541721344,0.733834326267242,0.0847999006509781,-0.684147000312805\n             ,0.724397599697113,0.176269888877869,-0.285972148180008,0.941885769367218,-0.0491818785667419,-0.776791214942932\n             ,0.627834796905518,0.0651562884449959,-0.780692636966705,0.62150913476944,0.0847999006509781,-0.684147000312805\n             ,0.724397599697113,-0.0397491529583931,-0.678164541721344,0.733834326267242,0.353581786155701,-0.382090777158737\n             ,0.853807151317596,0.476604402065277,-0.515640795230865,0.712013244628906,0.598369121551514,-0.00250658229924738\n             ,0.801216602325439,0.434465974569321,0.150427758693695,0.888037621974945,0.598369121551514,-0.00250658229924738\n             ,0.801216602325439,0.552154183387756,0.173749193549156,0.815436661243439,0.40496814250946,0.259010583162308,0.87687760591507\n             ,0.434465974569321,0.150427758693695,0.888037621974945,0.00911593530327082,-0.103348582983017,0.994603395462036\n             ,0.0384946875274181,0.285418510437012,0.957629561424255,0.235586777329445,0.270827025175095,0.933355033397675\n             ,0.173270419239998,-0.100987397134304,0.979683041572571,0.235586777329445,0.270827025175095,0.933355033397675\n             ,0.40496814250946,0.259010583162308,0.87687760591507,0.248945504426956,-0.117258243262768,0.961393058300018,0.173270419239998\n             ,-0.100987397134304,0.979683041572571,0.00927210599184036,-0.101372048258781,0.99480539560318,-0.0108760436996818\n             ,-0.349400758743286,0.936910271644592,0.0623843558132648,-0.406503170728683,0.911517083644867,-0.186361730098724\n             ,-0.434708625078201,0.881077587604523,-0.220686122775078,-0.040834903717041,0.974489688873291,0.0623843558132648\n             ,-0.406503170728683,0.911517083644867,0.226468428969383,-0.439074218273163,0.869439959526062,-0.0349236838519573\n             ,-0.777106523513794,0.62839937210083,-0.186361730098724,-0.434708625078201,0.881077587604523,0.61975085735321\n             ,-0.35027813911438,0.702292025089264,0.463432401418686,-0.580224633216858,0.66975349187851,0.226468428969383\n             ,-0.439074218273163,0.869439959526062,0.364222437143326,-0.205845013260841,0.908278524875641,0.226468428969383\n             ,-0.439074218273163,0.869439959526062,0.463432401418686,-0.580224633216858,0.66975349187851,0.176858365535736\n             ,-0.897578120231628,0.403824985027313,-0.0349236838519573,-0.777106523513794,0.62839937210083,0.00262317061424255\n             ,-0.184787794947624,0.982774972915649,0.364222437143326,-0.205845013260841,0.908278524875641,0.226468428969383\n             ,-0.439074218273163,0.869439959526062,-0.00295650074258447,-0.253587752580643,0.967307865619659,0.463432401418686\n             ,-0.580224633216858,0.66975349187851,0.61975085735321,-0.35027813911438,0.702292025089264,0.794963598251343,-0.434218406677246\n             ,0.423659265041351,0.420062124729156,-0.858003616333008,0.295596987009048,0.176858365535736,-0.897578120231628\n             ,0.403824985027313,0.794963598251343,-0.434218406677246,0.423659265041351,0.881620466709137,-0.332029432058334\n             ,0.335412949323654,0.562851548194885,-0.792488932609558,0.23486053943634,0.420062124729156,-0.858003616333008\n             ,0.295596987009048,0.513407528400421,-0.784644782543182,0.347484111785889,0.507576704025269,-0.725169718265533\n             ,0.465290039777756,0.223161399364471,-0.702425539493561,0.675867795944214,0.220125123858452,-0.84959089756012\n             ,0.479312241077423,0.223161399364471,-0.702425539493561,0.675867795944214,0.507576704025269,-0.725169718265533\n             ,0.465290039777756,0.511638343334198,-0.543274581432343,0.665641725063324,0.215388640761375,-0.476592898368835\n             ,0.852330327033997,-0.0191204845905304,-0.446781009435654,0.894439041614532,-0.0377944894134998,-0.657056510448456\n             ,0.752893269062042,0.223161399364471,-0.702425539493561,0.675867795944214,0.215388640761375,-0.476592898368835\n             ,0.852330327033997,-0.055518988519907,-0.839309513568878,0.540811538696289,0.220125123858452,-0.84959089756012\n             ,0.479312241077423,0.223161399364471,-0.702425539493561,0.675867795944214,-0.0377944894134998,-0.657056510448456\n             ,0.752893269062042,0.903869867324829,0.198627322912216,0.37890163064003,0.899348855018616,0.00629356363788247\n             ,0.437186509370804,0.836100995540619,0.0841564238071442,0.542081892490387,0.855352699756622,0.226547658443451\n             ,0.46588408946991,0.899348855018616,0.00629356363788247,0.437186509370804,0.903869867324829,0.198627322912216\n             ,0.37890163064003,0.793976366519928,0.302302360534668,0.527460694313049,0.795822381973267,0.0336451791226864\n             ,0.604594647884369,0.846422255039215,-0.185521140694618,0.499150514602661,0.899348855018616,0.00629356363788247\n             ,0.437186509370804,0.795822381973267,0.0336451791226864,0.604594647884369,0.777246952056885,-0.186122506856918\n             ,0.60103702545166,0.899348855018616,0.00629356363788247,0.437186509370804,0.846422255039215,-0.185521140694618\n             ,0.499150514602661,0.759909570217133,-0.165927812457085,0.628494560718536,0.836100995540619,0.0841564238071442\n             ,0.542081892490387,0.411182582378387,-0.842439949512482,0.348172098398209,0.823821365833282,-0.474406152963638\n             ,0.310253411531448,0.778993248939514,-0.607196033000946,0.156468689441681,0.513407528400421,-0.784644782543182\n             ,0.347484111785889,0.350974529981613,-0.540442049503326,0.764682471752167,0.576319634914398,0.0662916451692581\n             ,0.814531207084656,0.854965507984161,-0.114104993641377,0.505978286266327,0.560910940170288,-0.546258211135864\n             ,0.622077882289886,0.536651909351349,-0.138671860098839,0.832331001758575,0.777246952056885,-0.186122506856918\n             ,0.60103702545166,0.795822381973267,0.0336451791226864,0.604594647884369,0.532816469669342,0.10447982698679,0.83975625038147\n             ,0.536214470863342,0.394264131784439,0.746344327926636,0.532816469669342,0.10447982698679,0.83975625038147,0.795822381973267\n             ,0.0336451791226864,0.604594647884369,0.793976366519928,0.302302360534668,0.527460694313049,0.814013004302979\n             ,0.416528642177582,0.404829293489456,0.73296993970871,0.0683575123548508,0.676817834377289,0.898182094097137\n             ,-0.0604765526950359,0.435443967580795,0.915319561958313,0.399081766605377,0.0540725849568844,0.854046881198883\n             ,0.485713124275208,0.186243653297424,0.814013004302979,0.416528642177582,0.404829293489456,0.915319561958313\n             ,0.399081766605377,0.0540725849568844,0.890166699886322,0.437690794467926,-0.12660938501358,0.672172069549561\n             ,0.528298437595367,-0.518734514713287,0.890166699886322,0.437690794467926,-0.12660938501358,0.915319561958313\n             ,0.399081766605377,0.0540725849568844,0.93711906671524,0.303550958633423,-0.172234460711479,0.552991390228271\n             ,0.323919504880905,-0.767643570899963,0.672172069549561,0.528298437595367,-0.518734514713287,0.93711906671524\n             ,0.303550958633423,-0.172234460711479,0.856223344802856,0.13723511993885,-0.498044282197952,0.552991390228271\n             ,0.323919504880905,-0.767643570899963,0.856223344802856,0.13723511993885,-0.498044282197952,0.933138132095337\n             ,-0.0070160455070436,-0.359449595212936,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.744540750980377\n             ,0.353585213422775,-0.566247820854187,0.552991390228271,0.323919504880905,-0.767643570899963,0.890166699886322\n             ,0.437690794467926,-0.12660938501358,0.672172069549561,0.528298437595367,-0.518734514713287,0.552991390228271\n             ,0.323919504880905,-0.767643570899963,0.744540750980377,0.353585213422775,-0.566247820854187,0.632524311542511\n             ,-0.737463712692261,0.236770406365395,0.625836908817291,-0.779953479766846,0.000855531019624323,0.816257119178772\n             ,-0.389834344387054,-0.426325589418411,0.93777334690094,-0.280869245529175,-0.204190224409103,0.816257119178772\n             ,-0.389834344387054,-0.426325589418411,0.851511597633362,-0.5011847615242,0.154083982110024,0.967206120491028\n             ,-0.19463723897934,0.163182899355888,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.816257119178772\n             ,-0.389834344387054,-0.426325589418411,0.625836908817291,-0.779953479766846,0.000855531019624323,0.851511597633362\n             ,-0.5011847615242,0.154083982110024,0.632524311542511,-0.737463712692261,0.236770406365395,0.645412087440491\n             ,-0.585248291492462,0.490843862295151,0.0743590220808983,-0.732295691967011,0.676914930343628,0.125414818525314\n             ,-0.832001984119415,0.540410816669464,0.612550616264343,-0.435902178287506,0.659371674060822,0.078930102288723\n             ,-0.647568047046661,0.757908701896667,0.0743590220808983,-0.732295691967011,0.676914930343628,0.645412087440491\n             ,-0.585248291492462,0.490843862295151,-0.549701511859894,-0.519823312759399,0.653920412063599,-0.485137194395065\n             ,-0.428027123212814,0.762518644332886,0.0743590220808983,-0.732295691967011,0.676914930343628,0.078930102288723\n             ,-0.647568047046661,0.757908701896667,-0.119093708693981,-0.53387188911438,0.837136447429657,0.125414818525314\n             ,-0.832001984119415,0.540410816669464,0.0743590220808983,-0.732295691967011,0.676914930343628,-0.485137194395065\n             ,-0.428027123212814,0.762518644332886,0.546313166618347,-0.300951540470123,0.781645774841309,0.0897415652871132\n             ,-0.61595892906189,0.782649993896484,0.078930102288723,-0.647568047046661,0.757908701896667,0.612550616264343\n             ,-0.435902178287506,0.659371674060822,0.0897415652871132,-0.61595892906189,0.782649993896484,-0.527550399303436\n             ,-0.67441987991333,0.51657372713089,-0.549701511859894,-0.519823312759399,0.653920412063599,0.078930102288723\n             ,-0.647568047046661,0.757908701896667,0.576319634914398,0.0662916451692581,0.814531207084656,0.0803298726677895\n             ,0.272869914770126,0.958691358566284,0.591780304908752,0.0913430228829384,0.8009073138237,0.786046326160431,0.0746424272656441\n             ,0.613644540309906,0.576319634914398,0.0662916451692581,0.814531207084656,0.350974529981613,-0.540442049503326\n             ,0.764682471752167,-0.119093708693981,-0.53387188911438,0.837136447429657,0.0803298726677895,0.272869914770126\n             ,0.958691358566284,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.239867821335793,-0.0863698795437813\n             ,0.966955900192261,0.244136393070221,0.145083606243134,0.95882648229599,0.0296379756182432,0.164347007870674\n             ,0.985957264900208,0.536651909351349,-0.138671860098839,0.832331001758575,0.532816469669342,0.10447982698679\n             ,0.83975625038147,0.244136393070221,0.145083606243134,0.95882648229599,0.239867821335793,-0.0863698795437813\n             ,0.966955900192261,0.536214470863342,0.394264131784439,0.746344327926636,0.253624588251114,0.428919792175293\n             ,0.867007732391357,0.244136393070221,0.145083606243134,0.95882648229599,0.532816469669342,0.10447982698679,0.83975625038147\n             ,0.0497331917285919,0.445011228322983,0.894142985343933,0.0296379756182432,0.164347007870674,0.985957264900208\n             ,0.244136393070221,0.145083606243134,0.95882648229599,0.253624588251114,0.428919792175293,0.867007732391357,0.544139504432678\n             ,-0.298705726861954,0.784019768238068,0.238130986690521,-0.235158920288086,0.942334294319153,0.215388640761375\n             ,-0.476592898368835,0.852330327033997,0.511638343334198,-0.543274581432343,0.665641725063324,0.536651909351349\n             ,-0.138671860098839,0.832331001758575,0.239867821335793,-0.0863698795437813,0.966955900192261,0.238130986690521\n             ,-0.235158920288086,0.942334294319153,0.544139504432678,-0.298705726861954,0.784019768238068,0.0126708010211587\n             ,-0.0581304989755154,0.99822860956192,0.000908877176698297,-0.206076413393021,0.97853547334671,0.238130986690521\n             ,-0.235158920288086,0.942334294319153,0.239867821335793,-0.0863698795437813,0.966955900192261,0.238130986690521\n             ,-0.235158920288086,0.942334294319153,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.0191204845905304\n             ,-0.446781009435654,0.894439041614532,0.215388640761375,-0.476592898368835,0.852330327033997,0.856223344802856\n             ,0.13723511993885,-0.498044282197952,0.93711906671524,0.303550958633423,-0.172234460711479,0.979637861251831\n             ,-0.147638529539108,0.136060565710068,0.93777334690094,-0.280869245529175,-0.204190224409103,0.915319561958313\n             ,0.399081766605377,0.0540725849568844,0.898182094097137,-0.0604765526950359,0.435443967580795,0.979637861251831\n             ,-0.147638529539108,0.136060565710068,0.93711906671524,0.303550958633423,-0.172234460711479,0.612550616264343\n             ,-0.435902178287506,0.659371674060822,0.645412087440491,-0.585248291492462,0.490843862295151,0.979637861251831\n             ,-0.147638529539108,0.136060565710068,0.898182094097137,-0.0604765526950359,0.435443967580795,0.632524311542511\n             ,-0.737463712692261,0.236770406365395,0.93777334690094,-0.280869245529175,-0.204190224409103,0.979637861251831\n             ,-0.147638529539108,0.136060565710068,0.645412087440491,-0.585248291492462,0.490843862295151,0.275395423173904\n             ,-0.612316191196442,0.741097986698151,0.589075446128845,-0.205572411417961,0.781492233276367,0.759909570217133\n             ,-0.165927812457085,0.628494560718536,0.59905880689621,-0.501385033130646,0.624292850494385,0.237821668386459\n             ,-0.891240954399109,0.386174082756042,-0.272507458925247,-0.860418200492859,0.430604517459869,0.275395423173904\n             ,-0.612316191196442,0.741097986698151,0.59905880689621,-0.501385033130646,0.624292850494385,-0.527550399303436\n             ,-0.67441987991333,0.51657372713089,0.0897415652871132,-0.61595892906189,0.782649993896484,0.275395423173904\n             ,-0.612316191196442,0.741097986698151,-0.272507458925247,-0.860418200492859,0.430604517459869,0.546313166618347\n             ,-0.300951540470123,0.781645774841309,0.589075446128845,-0.205572411417961,0.781492233276367,0.275395423173904\n             ,-0.612316191196442,0.741097986698151,0.0897415652871132,-0.61595892906189,0.782649993896484,0.507576704025269\n             ,-0.725169718265533,0.465290039777756,0.689145267009735,-0.603762626647949,0.400686323642731,0.511638343334198\n             ,-0.543274581432343,0.665641725063324,0.507576704025269,-0.725169718265533,0.465290039777756,0.513407528400421\n             ,-0.784644782543182,0.347484111785889,0.778993248939514,-0.607196033000946,0.156468689441681,0.704199492931366\n             ,-0.704627811908722,0.0871931314468384,0.689145267009735,-0.603762626647949,0.400686323642731,0.814013004302979\n             ,0.416528642177582,0.404829293489456,0.741662085056305,0.344577699899673,0.575502872467041,0.694613039493561\n             ,0.143838599324226,0.704856872558594,0.73296993970871,0.0683575123548508,0.676817834377289,0.694613039493561\n             ,0.143838599324226,0.704856872558594,0.741662085056305,0.344577699899673,0.575502872467041,0.855352699756622\n             ,0.226547658443451,0.46588408946991,0.836100995540619,0.0841564238071442,0.542081892490387,0.589075446128845\n             ,-0.205572411417961,0.781492233276367,0.694613039493561,0.143838599324226,0.704856872558594,0.836100995540619\n             ,0.0841564238071442,0.542081892490387,0.759909570217133,-0.165927812457085,0.628494560718536,0.546313166618347\n             ,-0.300951540470123,0.781645774841309,0.73296993970871,0.0683575123548508,0.676817834377289,0.694613039493561\n             ,0.143838599324226,0.704856872558594,0.589075446128845,-0.205572411417961,0.781492233276367,-0.055518988519907\n             ,-0.839309513568878,0.540811538696289,-0.0675294324755669,-0.945460379123688,0.318660378456116,0.117540158331394\n             ,-0.936730265617371,0.329728245735168,0.220125123858452,-0.84959089756012,0.479312241077423,0.117540158331394\n             ,-0.936730265617371,0.329728245735168,0.411182582378387,-0.842439949512482,0.348172098398209,0.513407528400421\n             ,-0.784644782543182,0.347484111785889,0.220125123858452,-0.84959089756012,0.479312241077423,0.73296993970871\n             ,0.0683575123548508,0.676817834377289,0.546313166618347,-0.300951540470123,0.781645774841309,0.612550616264343\n             ,-0.435902178287506,0.659371674060822,0.898182094097137,-0.0604765526950359,0.435443967580795,0.771526336669922\n             ,-0.409758031368256,0.486667722463608,0.589298963546753,-0.771825730800629,0.238771393895149,0.237821668386459\n             ,-0.891240954399109,0.386174082756042,0.59905880689621,-0.501385033130646,0.624292850494385,0.846422255039215\n             ,-0.185521140694618,0.499150514602661,0.771526336669922,-0.409758031368256,0.486667722463608,0.59905880689621\n             ,-0.501385033130646,0.624292850494385,0.759909570217133,-0.165927812457085,0.628494560718536,0.771526336669922\n             ,-0.409758031368256,0.486667722463608,0.846422255039215,-0.185521140694618,0.499150514602661,0.777246952056885\n             ,-0.186122506856918,0.60103702545166,0.760827541351318,-0.370115906000137,0.53306257724762,0.589298963546753\n             ,-0.771825730800629,0.238771393895149,0.771526336669922,-0.409758031368256,0.486667722463608,0.760827541351318\n             ,-0.370115906000137,0.53306257724762,0.689145267009735,-0.603762626647949,0.400686323642731,0.704199492931366\n             ,-0.704627811908722,0.0871931314468384,0.854965507984161,-0.114104993641377,0.505978286266327,0.940892815589905\n             ,-0.119216494262218,0.317030221223831,0.823821365833282,-0.474406152963638,0.310253411531448,0.560910940170288\n             ,-0.546258211135864,0.622077882289886,0.937154471874237,-0.0475939512252808,0.345653474330902,0.917503833770752\n             ,-0.132210671901703,0.375109404325485,0.916658163070679,-0.0698241367936134,0.393525570631027,0.916658163070679\n             ,-0.0698241367936134,0.393525570631027,0.917503833770752,-0.132210671901703,0.375109404325485,0.872779548168182\n             ,-0.198945015668869,0.445731669664383,0.855076372623444,-0.165702432394028,0.491311639547348,-0.220686122775078\n             ,-0.040834903717041,0.974489688873291,-0.186361730098724,-0.434708625078201,0.881077587604523,0.0312842912971973\n             ,-0.474717557430267,0.879582047462463,0.106603257358074,0.0133492052555084,0.994212031364441,-0.0349236838519573\n             ,-0.777106523513794,0.62839937210083,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.0312842912971973\n             ,-0.474717557430267,0.879582047462463,-0.186361730098724,-0.434708625078201,0.881077587604523,0.301303088665009\n             ,-0.716448962688446,0.629219651222229,0.560910940170288,-0.546258211135864,0.622077882289886,0.823821365833282\n             ,-0.474406152963638,0.310253411531448,0.411182582378387,-0.842439949512482,0.348172098398209,0.760827541351318\n             ,-0.370115906000137,0.53306257724762,0.544139504432678,-0.298705726861954,0.784019768238068,0.511638343334198\n             ,-0.543274581432343,0.665641725063324,0.689145267009735,-0.603762626647949,0.400686323642731,0.536651909351349\n             ,-0.138671860098839,0.832331001758575,0.544139504432678,-0.298705726861954,0.784019768238068,0.760827541351318\n             ,-0.370115906000137,0.53306257724762,0.777246952056885,-0.186122506856918,0.60103702545166,0.742792665958405\n             ,-0.550313711166382,0.381331622600555,0.803535997867584,-0.553550720214844,0.2188870459795,0.897108614444733\n             ,-0.31337758898735,0.311433225870132,0.760169208049774,-0.346720576286316,0.549479365348816,0.821304857730865\n             ,-0.558016240596771,0.118643142282963,0.923712968826294,-0.295430272817612,0.243875607848167,0.897108614444733\n             ,-0.31337758898735,0.311433225870132,0.803535997867584,-0.553550720214844,0.2188870459795,0.945337653160095,-0.174788698554039\n             ,0.275292009115219,0.899602174758911,-0.197590529918671,0.389453411102295,0.897108614444733,-0.31337758898735\n             ,0.311433225870132,0.923712968826294,-0.295430272817612,0.243875607848167,0.705349028110504,-0.217919707298279\n             ,0.674532234668732,0.760169208049774,-0.346720576286316,0.549479365348816,0.897108614444733,-0.31337758898735\n             ,0.311433225870132,0.899602174758911,-0.197590529918671,0.389453411102295,0.593307375907898,-0.0775594636797905\n             ,0.801230847835541,0.405026167631149,-0.171226277947426,0.898128807544708,0.401639640331268,-0.00309631112031639\n             ,0.915792524814606,0.577744483947754,0.0458397567272186,0.814929485321045,-0.00769979506731033,-0.155788585543633\n             ,0.987760424613953,0.205060333013535,0.0685160234570503,0.976348161697388,0.209787964820862,-0.0149007942527533\n             ,0.977633357048035,0.130675092339516,-0.201507270336151,0.9707310795784,0.613882482051849,0.099590003490448,0.783090114593506\n             ,0.621637463569641,0.0923129394650459,0.77784651517868,0.729625582695007,0.0742557868361473,0.679803311824799\n             ,0.613882482051849,0.099590003490448,0.783090114593506,0.729625582695007,0.0742557868361473,0.679803311824799\n             ,0.668389976024628,-0.0383556596934795,0.742821395397186,0.615384101867676,0.0611244365572929,0.785853803157806\n             ,0.520175099372864,-0.288751989603043,0.803766191005707,0.596563339233398,-0.0223739240318537,0.8022540807724\n             ,0.440964937210083,0.0207586232572794,0.897284269332886,0.356722086668015,-0.354729324579239,0.86424332857132\n             ,0.520175099372864,-0.288751989603043,0.803766191005707,0.356722086668015,-0.354729324579239,0.86424332857132\n             ,0.217255920171738,-0.631381034851074,0.744417786598206,0.34566730260849,-0.589025497436523,0.73045402765274\n             ,0.553863286972046,-0.30215710401535,0.77584570646286,0.520175099372864,-0.288751989603043,0.803766191005707\n             ,0.34566730260849,-0.589025497436523,0.73045402765274,0.266091585159302,-0.603160440921783,0.751926004886627\n             ,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.499244570732117,-0.495106011629105,-0.711073040962219\n             ,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.696032464504242,-0.619228482246399,-0.363448590040207\n             ,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.696032464504242,-0.619228482246399,-0.363448590040207\n             ,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.217067420482636,-0.972187459468842,0.0879386737942696\n             ,0.356722086668015,-0.354729324579239,0.86424332857132,0.440964937210083,0.0207586232572794,0.897284269332886\n             ,0.191416949033737,-0.0921172648668289,0.977176547050476,0.164827063679695,-0.547387719154358,0.820486903190613\n             ,0.356722086668015,-0.354729324579239,0.86424332857132,0.164827063679695,-0.547387719154358,0.820486903190613\n             ,0.114735066890717,-0.656680226325989,0.745390474796295,0.217255920171738,-0.631381034851074,0.744417786598206\n             ,-0.0952682122588158,-0.943798363208771,-0.316494256258011,-0.117666520178318,-0.734499752521515,-0.668329775333405\n             ,-0.499244570732117,-0.495106011629105,-0.711073040962219,-0.438083231449127,-0.825523734092712,-0.355800002813339\n             ,-0.0952682122588158,-0.943798363208771,-0.316494256258011,-0.438083231449127,-0.825523734092712,-0.355800002813339\n             ,-0.217067420482636,-0.972187459468842,0.0879386737942696,-0.05385497584939,-0.996109485626221,0.06975357234478\n             ,0.596563339233398,-0.0223739240318537,0.8022540807724,0.520175099372864,-0.288751989603043,0.803766191005707\n             ,0.553863286972046,-0.30215710401535,0.77584570646286,0.607095539569855,-0.200262412428856,0.768979847431183\n             ,-0.070097453892231,-0.765305280685425,-0.639839172363281,0.0357764922082424,-0.768304586410522,-0.639083802700043\n             ,0.0121895968914032,-0.964383244514465,-0.26422792673111,-0.0787644907832146,-0.96135801076889,-0.263793289661407\n             ,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.0357764922082424,-0.768304586410522,-0.639083802700043\n             ,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.0417160429060459,-0.96068263053894,-0.274497121572495\n             ,0.00571701768785715,-0.999931693077087,-0.0101942336186767,0.0121895968914032,-0.964383244514465,-0.26422792673111\n             ,0.0417160429060459,-0.96068263053894,-0.274497121572495,0.0655759945511818,-0.996207714080811,0.0571834556758404\n             ,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.0787644907832146,-0.96135801076889,-0.263793289661407\n             ,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.00571701768785715,-0.999931693077087,-0.0101942336186767\n             ,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.758401393890381,-0.574856221675873,-0.307193249464035\n             ,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.834057211875916,-0.216860771179199,-0.50726717710495\n             ,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.469266027212143,-0.852578699588776,0.229997724294662\n             ,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.758401393890381,-0.574856221675873,-0.307193249464035\n             ,0.0592443346977234,-0.610537111759186,0.789768636226654,0.0125365713611245,-0.668434202671051,0.743665635585785\n             ,0.208488672971725,-0.647888123989105,0.732648193836212,0.171075537800789,-0.616661608219147,0.768415033817291\n             ,0.0412249267101288,-0.205861806869507,0.977712333202362,0.0592443346977234,-0.610537111759186,0.789768636226654\n             ,0.171075537800789,-0.616661608219147,0.768415033817291,0.0600041374564171,-0.192453533411026,0.979469835758209\n             ,0.00068405584897846,-0.208776980638504,0.977963030338287,-0.0353972837328911,-0.630800306797028,0.775137424468994\n             ,0.0592443346977234,-0.610537111759186,0.789768636226654,0.0412249267101288,-0.205861806869507,0.977712333202362\n             ,-0.0406640991568565,-0.687796175479889,0.724763989448547,0.0125365713611245,-0.668434202671051,0.743665635585785\n             ,0.0592443346977234,-0.610537111759186,0.789768636226654,-0.0353972837328911,-0.630800306797028,0.775137424468994\n             ,0.443391680717468,-0.0999263972043991,0.89074045419693,0.511712968349457,-0.26713839173317,0.816570222377777\n             ,0.477897197008133,-0.208041027188301,0.853424370288849,0.164051368832588,-0.273042142391205,0.947910964488983\n             ,0.443824082612991,-0.204101487994194,0.872561037540436,0.173163160681725,-0.359727561473846,0.916848182678223\n             ,0.164051368832588,-0.273042142391205,0.947910964488983,0.477897197008133,-0.208041027188301,0.853424370288849\n             ,-0.05385497584939,-0.996109485626221,0.06975357234478,0.0592407323420048,-0.802932441234589,0.593118906021118\n             ,0.163204148411751,-0.824093818664551,0.542433202266693,0.0655759945511818,-0.996207714080811,0.0571834556758404\n             ,0.114735066890717,-0.656680226325989,0.745390474796295,0.208488672971725,-0.647888123989105,0.732648193836212\n             ,0.163204148411751,-0.824093818664551,0.542433202266693,0.0592407323420048,-0.802932441234589,0.593118906021118\n             ,0.163204148411751,-0.824093818664551,0.542433202266693,0.208488672971725,-0.647888123989105,0.732648193836212\n             ,0.0125365713611245,-0.668434202671051,0.743665635585785,-0.00129488680977374,-0.888734400272369,0.458420634269714\n             ,0.00571701768785715,-0.999931693077087,-0.0101942336186767,0.0655759945511818,-0.996207714080811,0.0571834556758404\n             ,0.163204148411751,-0.824093818664551,0.542433202266693,-0.00129488680977374,-0.888734400272369,0.458420634269714\n             ,0.525104641914368,-0.419060587882996,0.740711390972137,0.0940685495734215,-0.732769310474396,0.673943758010864\n             ,-0.474541693925858,-0.67278927564621,0.567595541477203,0.13062296807766,0.400416731834412,0.906975269317627\n             ,0.121470481157303,-0.391699403524399,0.912039756774902,-0.117666520178318,-0.734499752521515,-0.668329775333405\n             ,-0.0952682122588158,-0.943798363208771,-0.316494256258011,0.0417160429060459,-0.96068263053894,-0.274497121572495\n             ,0.0705975443124771,-0.761587023735046,-0.644205927848816,-0.05385497584939,-0.996109485626221,0.06975357234478\n             ,0.0655759945511818,-0.996207714080811,0.0571834556758404,0.0417160429060459,-0.96068263053894,-0.274497121572495\n             ,-0.0952682122588158,-0.943798363208771,-0.316494256258011,0.680179119110107,0.270307511091232,0.681388378143311\n             ,-0.111705176532269,0.976534187793732,0.18412746489048,0.0118562933057547,0.974313676357269,0.224883005023003\n             ,0.714891254901886,0.201140508055687,0.669681310653687,0.0228955876082182,0.892617464065552,0.450233042240143\n             ,0.143662974238396,0.945594608783722,0.29191067814827,0.00479412823915482,0.900386512279511,0.435064554214478\n             ,0.221466824412346,0.900687992572784,0.373782753944397,0.0228955876082182,0.892617464065552,0.450233042240143\n             ,0.221466824412346,0.900687992572784,0.373782753944397,0.256553143262863,0.759260475635529,0.598083674907684\n             ,0.026754243299365,0.843723058700562,0.53611159324646,-0.0965566337108612,0.382317036390305,0.918972492218018\n             ,0.119953289628029,0.283690631389618,0.951383650302887,0.134373739361763,0.867044448852539,0.479768335819244\n             ,0.104800805449486,0.884988248348236,0.453665733337402,0.134373739361763,0.867044448852539,0.479768335819244\n             ,0.138274729251862,0.981688380241394,-0.131026938557625,0.234877377748489,0.967058181762695,0.0981385260820389\n             ,0.104800805449486,0.884988248348236,0.453665733337402,0.00479412823915482,0.900386512279511,0.435064554214478\n             ,-0.194994285702705,0.859172344207764,0.473075121641159,0.161482572555542,0.960672616958618,0.225901573896408\n             ,0.221466824412346,0.900687992572784,0.373782753944397,-0.258119583129883,0.745032370090485,0.615061819553375\n             ,0.0118562933057547,0.974313676357269,0.224883005023003,0.161482572555542,0.960672616958618,0.225901573896408\n             ,-0.194994285702705,0.859172344207764,0.473075121641159,-0.111705176532269,0.976534187793732,0.18412746489048\n             ,0.118274427950382,0.894158720970154,0.431846410036087,0.161482572555542,0.960672616958618,0.225901573896408\n             ,0.0118562933057547,0.974313676357269,0.224883005023003,0.256553143262863,0.759260475635529,0.598083674907684\n             ,0.221466824412346,0.900687992572784,0.373782753944397,0.161482572555542,0.960672616958618,0.225901573896408\n             ,0.118274427950382,0.894158720970154,0.431846410036087,0.357361167669296,0.242811009287834,0.901851356029511\n             ,0.578032433986664,0.306231528520584,0.756373405456543,0.195265397429466,0.864439308643341,0.463266789913177\n             ,0.149628981947899,0.846252083778381,0.511339902877808,0.195265397429466,0.864439308643341,0.463266789913177\n             ,-0.357527554035187,0.888932764530182,-0.286308616399765,-0.0952406078577042,0.956162750720978,-0.276915192604065\n             ,0.149628981947899,0.846252083778381,0.511339902877808,0.802525162696838,0.518118143081665,0.295815676450729\n             ,0.466519266366959,0.882316112518311,0.0622739568352699,0.237646877765656,0.914831399917603,0.326507955789566\n             ,0.700553953647614,0.463066458702087,0.542949020862579,-0.427035480737686,0.790110290050507,-0.439734488725662\n             ,-0.457484602928162,0.835335671901703,-0.304831385612488,0.237646877765656,0.914831399917603,0.326507955789566\n             ,0.466519266366959,0.882316112518311,0.0622739568352699,-0.357527554035187,0.888932764530182,-0.286308616399765\n             ,0.195265397429466,0.864439308643341,0.463266789913177,0.237646877765656,0.914831399917603,0.326507955789566\n             ,-0.457484602928162,0.835335671901703,-0.304831385612488,0.578032433986664,0.306231528520584,0.756373405456543\n             ,0.700553953647614,0.463066458702087,0.542949020862579,0.237646877765656,0.914831399917603,0.326507955789566\n             ,0.195265397429466,0.864439308643341,0.463266789913177,-0.598032653331757,0.367280632257462,-0.712363600730896\n             ,-0.611508309841156,0.264030992984772,-0.7458855509758,-0.462323904037476,0.371266037225723,-0.805244147777557\n             ,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.611508309841156,0.264030992984772,-0.7458855509758\n             ,-0.593829154968262,0.197740450501442,-0.77991384267807,-0.421522259712219,0.257120847702026,-0.869602143764496\n             ,-0.462323904037476,0.371266037225723,-0.805244147777557,0.897598922252655,-0.0851877480745316,0.432503432035446\n             ,0.534866094589233,0.53300929069519,0.655606091022491,0.970540165901184,0.124821022152901,0.206086173653603,0.971762239933014\n             ,-0.143596902489662,0.187237858772278,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.0532905422151089\n             ,-0.321431696414948,0.945432066917419,0.542791187763214,-0.0487677082419395,0.838450610637665,0.477409869432449\n             ,-0.0182194709777832,0.878491818904877,0.0532905422151089,-0.321431696414948,0.945432066917419,0.124305054545403\n             ,-0.308796167373657,0.942970395088196,0.507363021373749,-0.115291275084019,0.853985190391541,0.542791187763214\n             ,-0.0487677082419395,0.838450610637665,0.927076876163483,-0.29800683259964,0.227421119809151,0.960171759128571\n             ,-0.181689232587814,0.212271526455879,0.887619376182556,-0.256067276000977,0.382833331823349,0.875984609127045\n             ,-0.341396063566208,0.340734094381332,0.205060333013535,0.0685160234570503,0.976348161697388,0.469725012779236\n             ,0.301579147577286,0.829703807830811,0.328607112169266,0.0718188062310219,0.941732108592987,0.209787964820862\n             ,-0.0149007942527533,0.977633357048035,0.328607112169266,0.0718188062310219,0.941732108592987,0.499466627836227\n             ,0.169172704219818,0.849655032157898,0.495325356721878,-0.15430523455143,0.854893386363983,0.32480525970459,-0.177078545093536\n             ,0.929055869579315,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.806693911552429,-0.123899839818478\n             ,0.577835381031036,0.839345693588257,-0.00945493672043085,0.543515801429749,0.936820507049561,0.0892298817634583\n             ,0.338238596916199,0.733202934265137,-0.122967794537544,0.668799161911011,0.785013139247894,0.0451312512159348\n             ,0.617832958698273,0.839345693588257,-0.00945493672043085,0.543515801429749,0.806693911552429,-0.123899839818478\n             ,0.577835381031036,0.679168462753296,-0.108902141451836,0.725858509540558,0.936820507049561,0.0892298817634583\n             ,0.338238596916199,0.839345693588257,-0.00945493672043085,0.543515801429749,0.52197939157486,-0.246480882167816\n             ,0.816568851470947,0.314269214868546,-0.177054598927498,0.932677090167999,0.679168462753296,-0.108902141451836\n             ,0.725858509540558,0.52197939157486,-0.246480882167816,0.816568851470947,0.0854972749948502,-0.343144297599792\n             ,0.935383439064026,0.0854972749948502,-0.343144297599792,0.935383439064026,0.52197939157486,-0.246480882167816\n             ,0.816568851470947,0.36207702755928,0.0357636697590351,0.931461870670319,-0.00456069782376289,-0.34082293510437\n             ,0.940116465091705,0.767594814300537,-0.318948030471802,0.555940985679626,0.572291314601898,-0.52212518453598\n             ,0.632351100444794,0.743626773357391,-0.236951321363449,0.625198543071747,0.883507072925568,-0.0658736377954483\n             ,0.463762849569321,0.767594814300537,-0.318948030471802,0.555940985679626,0.883507072925568,-0.0658736377954483\n             ,0.463762849569321,0.922792911529541,0.0174659602344036,0.384900212287903,0.91918009519577,-0.0705135017633438\n             ,0.387473553419113,0.683746695518494,-0.463673830032349,0.563468754291534,0.767594814300537,-0.318948030471802\n             ,0.555940985679626,0.91918009519577,-0.0705135017633438,0.387473553419113,0.813478171825409,-0.273027837276459\n             ,0.513526141643524,0.767594814300537,-0.318948030471802,0.555940985679626,0.683746695518494,-0.463673830032349\n             ,0.563468754291534,0.629647791385651,-0.52997088432312,0.568044483661652,0.572291314601898,-0.52212518453598\n             ,0.632351100444794,0.939345419406891,-0.108932219445705,0.325213760137558,0.950795531272888,-0.131767466664314\n             ,0.280401825904846,0.964455902576447,-0.157870531082153,0.211900100111961,0.964605271816254,-0.126861244440079\n             ,0.231177195906639,0.93361908197403,-0.0509388744831085,0.354627430438995,0.939345419406891,-0.108932219445705\n             ,0.325213760137558,0.964605271816254,-0.126861244440079,0.231177195906639,0.961285889148712,-0.0557491593062878\n             ,0.269854545593262,0.821834087371826,-0.135336369276047,0.55341911315918,0.939345419406891,-0.108932219445705\n             ,0.325213760137558,0.93361908197403,-0.0509388744831085,0.354627430438995,0.800939977169037,-0.0900113806128502\n             ,0.59194016456604,0.883507072925568,-0.0658736377954483,0.463762849569321,0.743626773357391,-0.236951321363449\n             ,0.625198543071747,0.775663673877716,0.0339613817632198,0.630232095718384,0.817228376865387,-0.0154423741623759\n             ,0.576107025146484,0.458424359560013,-0.261700868606567,0.849329054355621,0.540978610515594,-0.216916099190712\n             ,0.812582015991211,0.852472126483917,-0.133455187082291,0.505451321601868,0.821834087371826,-0.135336369276047\n             ,0.55341911315918,0.458424359560013,-0.261700868606567,0.849329054355621,0.821834087371826,-0.135336369276047\n             ,0.55341911315918,0.800939977169037,-0.0900113806128502,0.59194016456604,0.373029977083206,-0.317807883024216\n             ,0.871691942214966,0.288555771112442,-0.2911037504673,0.912137150764465,0.373029977083206,-0.317807883024216\n             ,0.871691942214966,0.800939977169037,-0.0900113806128502,0.59194016456604,0.680521726608276,-0.105455316603184\n             ,0.725099503993988,0.288555771112442,-0.2911037504673,0.912137150764465,0.680521726608276,-0.105455316603184\n             ,0.725099503993988,0.54023802280426,-0.148879259824753,0.828237771987915,0.189583629369736,-0.286395132541656\n             ,0.939167618751526,0.314269214868546,-0.177054598927498,0.932677090167999,0.629274904727936,-0.103665113449097\n             ,0.770238041877747,0.890204846858978,0.0921151489019394,0.446150302886963,0.679168462753296,-0.108902141451836\n             ,0.725858509540558,0.629274904727936,-0.103665113449097,0.770238041877747,0.874416053295136,-0.00546242296695709\n             ,0.485146045684814,0.890166699886322,0.437690794467926,-0.12660938501358,0.890204846858978,0.0921151489019394\n             ,0.446150302886963,0.874416053295136,-0.00546242296695709,0.485146045684814,0.629274904727936,-0.103665113449097\n             ,0.770238041877747,0.560746312141418,-0.00312843848951161,0.827981770038605,0.787108600139618,0.00810690317302942\n             ,0.616761207580566,0.314269214868546,-0.177054598927498,0.932677090167999,0.430652797222137,0.0691945105791092\n             ,0.89986127614975,0.560746312141418,-0.00312843848951161,0.827981770038605,0.629274904727936,-0.103665113449097\n             ,0.770238041877747,0.536631107330322,0.258791983127594,0.803152441978455,0.649454653263092,0.203223869204521\n             ,0.732740581035614,0.560746312141418,-0.00312843848951161,0.827981770038605,0.430652797222137,0.0691945105791092\n             ,0.89986127614975,0.793840944766998,0.179479137063026,0.581036806106567,0.787108600139618,0.00810690317302942\n             ,0.616761207580566,0.560746312141418,-0.00312843848951161,0.827981770038605,0.649454653263092,0.203223869204521\n             ,0.732740581035614,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.936820507049561,0.0892298817634583\n             ,0.338238596916199,0.97348940372467,0.2094656676054,0.0918834507465363,0.744540750980377,0.353585213422775,-0.566247820854187\n             ,0.679168462753296,-0.108902141451836,0.725858509540558,0.890204846858978,0.0921151489019394,0.446150302886963\n             ,0.97348940372467,0.2094656676054,0.0918834507465363,0.936820507049561,0.0892298817634583,0.338238596916199,0.890166699886322\n             ,0.437690794467926,-0.12660938501358,0.744540750980377,0.353585213422775,-0.566247820854187,0.97348940372467\n             ,0.2094656676054,0.0918834507465363,0.890204846858978,0.0921151489019394,0.446150302886963,0.964605271816254\n             ,-0.126861244440079,0.231177195906639,0.964455902576447,-0.157870531082153,0.211900100111961,0.896426856517792\n             ,-0.172908827662468,0.408070415258408,0.901179313659668,-0.204281270503998,0.382289171218872,0.887543320655823\n             ,-0.171314582228661,0.427689343690872,0.961285889148712,-0.0557491593062878,0.269854545593262,0.964605271816254\n             ,-0.126861244440079,0.231177195906639,0.901179313659668,-0.204281270503998,0.382289171218872,0.793840944766998\n             ,0.179479137063026,0.581036806106567,0.649454653263092,0.203223869204521,0.732740581035614,0.651595652103424\n             ,0.352775752544403,0.671544790267944,0.776918292045593,0.306892603635788,0.549740731716156,0.536631107330322\n             ,0.258791983127594,0.803152441978455,0.469725012779236,0.301579147577286,0.829703807830811,0.651595652103424\n             ,0.352775752544403,0.671544790267944,0.649454653263092,0.203223869204521,0.732740581035614,0.333709418773651\n             ,0.169013321399689,0.927400946617126,0.651595652103424,0.352775752544403,0.671544790267944,0.469725012779236\n             ,0.301579147577286,0.829703807830811,0.205060333013535,0.0685160234570503,0.976348161697388,0.288555771112442\n             ,-0.2911037504673,0.912137150764465,0.288461953401566,-0.251531571149826,0.923862278461456,0.345462441444397\n             ,-0.298967152833939,0.889536023139954,0.373029977083206,-0.317807883024216,0.871691942214966,0.295946687459946\n             ,-0.143637612462044,0.944343090057373,0.124305054545403,-0.308796167373657,0.942970395088196,0.0532905422151089\n             ,-0.321431696414948,0.945432066917419,0.103208005428314,-0.00969436671584845,0.994612574577332,0.103208005428314\n             ,-0.00969436671584845,0.994612574577332,0.0532905422151089,-0.321431696414948,0.945432066917419,-0.00456069782376289\n             ,-0.34082293510437,0.940116465091705,0.36207702755928,0.0357636697590351,0.931461870670319,0.765106797218323\n             ,-0.350072890520096,0.540426254272461,0.875984609127045,-0.341396063566208,0.340734094381332,0.887619376182556\n             ,-0.256067276000977,0.382833331823349,0.75313264131546,-0.288527101278305,0.591221868991852,0.922792911529541\n             ,0.0174659602344036,0.384900212287903,0.93361908197403,-0.0509388744831085,0.354627430438995,0.961285889148712\n             ,-0.0557491593062878,0.269854545593262,0.91918009519577,-0.0705135017633438,0.387473553419113,0.458424359560013\n             ,-0.261700868606567,0.849329054355621,0.373029977083206,-0.317807883024216,0.871691942214966,0.345462441444397\n             ,-0.298967152833939,0.889536023139954,0.421490222215652,-0.217597857117653,0.880339205265045,0.458424359560013\n             ,-0.261700868606567,0.849329054355621,0.421490222215652,-0.217597857117653,0.880339205265045,0.501314342021942\n             ,-0.180266559123993,0.846278846263886,0.540978610515594,-0.216916099190712,0.812582015991211,0.775663673877716\n             ,0.0339613817632198,0.630232095718384,0.743626773357391,-0.236951321363449,0.625198543071747,0.527478218078613\n             ,-0.385366201400757,0.757139086723328,0.702920734882355,-0.00120963365770876,0.711267173290253,0.314269214868546\n             ,-0.177054598927498,0.932677090167999,0.0854972749948502,-0.343144297599792,0.935383439064026,0.322372585535049\n             ,-0.0660212859511375,0.944307744503021,0.322372585535049,-0.0660212859511375,0.944307744503021,0.0854972749948502\n             ,-0.343144297599792,0.935383439064026,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.477409869432449\n             ,-0.0182194709777832,0.878491818904877,0.314269214868546,-0.177054598927498,0.932677090167999,0.322372585535049\n             ,-0.0660212859511375,0.944307744503021,0.508330583572388,0.166116118431091,0.844988405704498,0.430652797222137\n             ,0.0691945105791092,0.89986127614975,0.430652797222137,0.0691945105791092,0.89986127614975,0.508330583572388\n             ,0.166116118431091,0.844988405704498,0.499466627836227,0.169172704219818,0.849655032157898,0.536631107330322\n             ,0.258791983127594,0.803152441978455,0.668687582015991,0.158593982458115,0.726432919502258,0.477409869432449\n             ,-0.0182194709777832,0.878491818904877,0.542791187763214,-0.0487677082419395,0.838450610637665,0.702920734882355\n             ,-0.00120963365770876,0.711267173290253,0.85576856136322,-0.00803003925830126,0.517296552658081,0.922792911529541\n             ,0.0174659602344036,0.384900212287903,0.883507072925568,-0.0658736377954483,0.463762849569321,0.817228376865387\n             ,-0.0154423741623759,0.576107025146484,0.821834087371826,-0.135336369276047,0.55341911315918,0.852472126483917\n             ,-0.133455187082291,0.505451321601868,0.950795531272888,-0.131767466664314,0.280401825904846,0.939345419406891\n             ,-0.108932219445705,0.325213760137558,0.813478171825409,-0.273027837276459,0.513526141643524,0.91918009519577\n             ,-0.0705135017633438,0.387473553419113,0.961285889148712,-0.0557491593062878,0.269854545593262,0.887543320655823\n             ,-0.171314582228661,0.427689343690872,0.927076876163483,-0.29800683259964,0.227421119809151,0.926659166812897\n             ,-0.245477139949799,0.284681916236877,0.966324627399445,-0.156342566013336,0.204386278986931,0.960171759128571\n             ,-0.181689232587814,0.212271526455879,0.966324627399445,-0.156342566013336,0.204386278986931,0.926659166812897\n             ,-0.245477139949799,0.284681916236877,0.750554323196411,-0.229917243123055,0.619521021842957,0.809566378593445\n             ,-0.159671008586884,0.564895987510681,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.982208073139191\n             ,-0.177859634160995,-0.0602763295173645,0.915560901165009,-0.141839787364006,0.376337260007858,0.820341229438782\n             ,-0.113342881202698,0.560529828071594,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.988306105136871\n             ,-0.150656268000603,-0.0235306043177843,0.956220626831055,-0.152332276105881,0.249873846769333,0.915560901165009\n             ,-0.141839787364006,0.376337260007858,0.362627446651459,-0.180693462491035,0.914249002933502,0.570054233074188\n             ,-0.200027942657471,0.796885788440704,0.400608420372009,-0.480024576187134,0.780441761016846,0.11539563536644\n             ,-0.528798937797546,0.840865969657898,0.350974529981613,-0.540442049503326,0.764682471752167,0.560910940170288\n             ,-0.546258211135864,0.622077882289886,0.432139188051224,-0.378973364830017,0.818312227725983,0.461174815893173\n             ,-0.519026458263397,0.719673037528992,0.432139188051224,-0.378973364830017,0.818312227725983,0.416703939437866\n             ,-0.0255245417356491,0.908683836460114,0.56849592924118,-0.125116035342216,0.813116490840912,0.461174815893173\n             ,-0.519026458263397,0.719673037528992,0.0348379723727703,0.239972576498985,0.970154345035553,0.026632534340024\n             ,0.124120466411114,0.991909682750702,-0.147914990782738,0.17213037610054,0.973905682563782,0.00455546798184514\n             ,0.298394352197647,0.954431772232056,0.809566378593445,-0.159671008586884,0.564895987510681,0.750554323196411\n             ,-0.229917243123055,0.619521021842957,0.705349028110504,-0.217919707298279,0.674532234668732,0.634909212589264\n             ,-0.137729376554489,0.760211110115051,0.800201892852783,0.430362582206726,0.417690068483353,0.793976366519928\n             ,0.302302360534668,0.527460694313049,0.903869867324829,0.198627322912216,0.37890163064003,0.854240536689758,0.355053037405014\n             ,0.379750460386276,0.793774306774139,0.385858178138733,0.470144480466843,0.843018114566803,0.354378879070282\n             ,0.404643177986145,0.800201892852783,0.430362582206726,0.417690068483353,0.854240536689758,0.355053037405014\n             ,0.379750460386276,0.595219552516937,0.51872980594635,0.613704323768616,0.800201892852783,0.430362582206726,0.417690068483353\n             ,0.843018114566803,0.354378879070282,0.404643177986145,0.688724040985107,0.428849041461945,0.584591865539551\n             ,0.536214470863342,0.394264131784439,0.746344327926636,0.793976366519928,0.302302360534668,0.527460694313049\n             ,0.800201892852783,0.430362582206726,0.417690068483353,0.595219552516937,0.51872980594635,0.613704323768616,0.854240536689758\n             ,0.355053037405014,0.379750460386276,0.903869867324829,0.198627322912216,0.37890163064003,0.855352699756622,0.226547658443451\n             ,0.46588408946991,0.857260406017303,0.312566876411438,0.409153461456299,0.688724040985107,0.428849041461945,0.584591865539551\n             ,0.728551387786865,0.287864476442337,0.621568083763123,0.278584688901901,0.430597722530365,0.858473181724548\n             ,0.279262810945511,0.544022977352142,0.791234016418457,0.718716561794281,0.339281320571899,0.60690575838089,0.27374255657196\n             ,0.526692390441895,0.804773390293121,0.278584688901901,0.430597722530365,0.858473181724548,0.728551387786865\n             ,0.287864476442337,0.621568083763123,0.0571579374372959,0.555576980113983,0.829498171806335,0.0507387444376946\n             ,0.459851264953613,0.886545181274414,0.278584688901901,0.430597722530365,0.858473181724548,0.27374255657196,0.526692390441895\n             ,0.804773390293121,0.0581676289439201,0.571192860603333,0.818752288818359,0.279262810945511,0.544022977352142\n             ,0.791234016418457,0.278584688901901,0.430597722530365,0.858473181724548,0.0507387444376946,0.459851264953613\n             ,0.886545181274414,0.402090311050415,-0.284287929534912,0.870346903800964,0.237495303153992,-0.275904625654221\n             ,0.931382119655609,0.332773357629776,-0.801452815532684,0.49692577123642,0.353568494319916,-0.776771426200867\n             ,0.521167457103729,0.346010982990265,0.0731605663895607,0.935373663902283,0.0857556685805321,0.213776871562004\n             ,0.973111212253571,0.237495303153992,-0.275904625654221,0.931382119655609,0.402090311050415,-0.284287929534912\n             ,0.870346903800964,0.237495303153992,-0.275904625654221,0.931382119655609,0.0857556685805321,0.213776871562004\n             ,0.973111212253571,0.174916133284569,0.190565213561058,0.965965449810028,0.173318073153496,-0.274096310138702\n             ,0.945955634117126,0.332773357629776,-0.801452815532684,0.49692577123642,0.237495303153992,-0.275904625654221\n             ,0.931382119655609,0.173318073153496,-0.274096310138702,0.945955634117126,0.198447287082672,-0.827921032905579\n             ,0.524562180042267,0.557120144367218,0.203072413802147,0.805219650268555,0.663587033748627,0.242647290229797\n             ,0.707654237747192,0.594232082366943,0.290724605321884,0.749911665916443,0.428730636835098,0.26745393872261,0.862935900688171\n             ,0.481910198926926,0.246677935123444,0.840780913829803,0.562969863414764,0.141692653298378,0.81424081325531,0.557120144367218\n             ,0.203072413802147,0.805219650268555,0.481910198926926,0.246677935123444,0.840780913829803,0.508710622787476\n             ,0.190386489033699,0.839622795581818,0.471029788255692,0.166954964399338,0.86617374420166,0.450006783008575,0.263622760772705\n             ,0.853227376937866,0.557120144367218,0.203072413802147,0.805219650268555,0.562969863414764,0.141692653298378\n             ,0.81424081325531,0.556747674942017,0.38243293762207,0.737412452697754,0.663587033748627,0.242647290229797,0.707654237747192\n             ,0.557120144367218,0.203072413802147,0.805219650268555,0.450006783008575,0.263622760772705,0.853227376937866\n             ,0.465027630329132,-0.875830411911011,-0.129113703966141,0.470402508974075,-0.871353209018707,-0.139517307281494\n             ,0.282156497240067,-0.915852665901184,-0.285659939050674,0.28289994597435,-0.924392461776733,-0.255863577127457\n             ,0.600540995597839,-0.799374520778656,-0.0187329761683941,0.470402508974075,-0.871353209018707,-0.139517307281494\n             ,0.465027630329132,-0.875830411911011,-0.129113703966141,0.638466238975525,-0.769491136074066,0.0156274978071451\n             ,-0.0377323105931282,-0.656355738639832,0.753507435321808,0.0476435497403145,-0.676355302333832,0.73503303527832\n             ,0.101414501667023,-0.396623194217682,0.912362396717072,-0.0135245211422443,-0.380902349948883,0.924516320228577\n             ,0.0903236120939255,-0.645915448665619,0.758046746253967,0.226432472467422,-0.391454815864563,0.891903281211853\n             ,0.101414501667023,-0.396623194217682,0.912362396717072,0.0476435497403145,-0.676355302333832,0.73503303527832\n             ,0.315978825092316,0.0904445722699165,0.944445431232452,0.178787171840668,0.10878062993288,0.977855801582336\n             ,0.101414501667023,-0.396623194217682,0.912362396717072,0.226432472467422,-0.391454815864563,0.891903281211853\n             ,0.0226862858980894,0.138102903962135,0.990158021450043,-0.0135245211422443,-0.380902349948883,0.924516320228577\n             ,0.101414501667023,-0.396623194217682,0.912362396717072,0.178787171840668,0.10878062993288,0.977855801582336\n             ,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.984952390193939,-0.153410941362381,-0.0795853585004807\n             ,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.993429064750671,-0.113890402019024,0.0113009223714471\n             ,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.979115843772888,-0.186871707439423,-0.0800699964165688\n             ,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.978873014450073,-0.188474208116531,-0.0792786628007889\n             ,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.984952390193939,-0.153410941362381,-0.0795853585004807\n             ,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.982208073139191,-0.177859634160995,-0.0602763295173645\n             ,0.698544383049011,-0.714900195598602,0.0308788027614355,0.600540995597839,-0.799374520778656,-0.0187329761683941\n             ,0.638466238975525,-0.769491136074066,0.0156274978071451,0.727549016475677,-0.679640352725983,0.0936024785041809\n             ,0.807879209518433,-0.580146849155426,0.103734038770199,0.698544383049011,-0.714900195598602,0.0308788027614355\n             ,0.727549016475677,-0.679640352725983,0.0936024785041809,0.772367715835571,-0.599683940410614,0.209349811077118\n             ,0.744709670543671,0.422629773616791,0.516518652439117,0.524678170681,0.559116363525391,0.641951441764832,0.623485326766968\n             ,0.449957937002182,0.639377772808075,0.773433268070221,0.347118884325027,0.53038614988327,0.956220626831055,-0.152332276105881\n             ,0.249873846769333,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.993429064750671,-0.113890402019024\n             ,0.0113009223714471,0.976429760456085,-0.14936164021492,0.155807659029961,0.93977153301239,0.0100719593465328\n             ,0.341654866933823,0.947793483734131,-0.0109208915382624,0.318697780370712,0.949501037597656,-0.133338466286659\n             ,0.284022271633148,0.950774133205414,-0.180742517113686,0.25171560049057,0.94478839635849,-0.0280621573328972\n             ,0.326477229595184,0.93977153301239,0.0100719593465328,0.341654866933823,0.950774133205414,-0.180742517113686\n             ,0.25171560049057,0.949546575546265,-0.188553437590599,0.250617027282715,0.921219646930695,-0.0589233264327049\n             ,0.384554862976074,0.93503212928772,0.00599651364609599,0.354512244462967,0.93977153301239,0.0100719593465328\n             ,0.341654866933823,0.94478839635849,-0.0280621573328972,0.326477229595184,0.961935639381409,0.00657567568123341\n             ,0.273196935653687,0.947793483734131,-0.0109208915382624,0.318697780370712,0.93977153301239,0.0100719593465328\n             ,0.341654866933823,0.93503212928772,0.00599651364609599,0.354512244462967,0.934174954891205,-0.332788705825806\n             ,0.128719761967659,0.916550815105438,-0.369929283857346,0.151943743228912,0.950774133205414,-0.180742517113686\n             ,0.25171560049057,0.949501037597656,-0.133338466286659,0.284022271633148,0.900704562664032,-0.383264392614365\n             ,0.204547420144081,0.949546575546265,-0.188553437590599,0.250617027282715,0.950774133205414,-0.180742517113686\n             ,0.25171560049057,0.916550815105438,-0.369929283857346,0.151943743228912,0.346010982990265,0.0731605663895607\n             ,0.935373663902283,0.316976845264435,0.303443849086761,0.898580849170685,0.109994232654572,0.335926622152328\n             ,0.935443520545959,0.0857556685805321,0.213776871562004,0.973111212253571,0.109994232654572,0.335926622152328\n             ,0.935443520545959,0.316976845264435,0.303443849086761,0.898580849170685,0.37644562125206,0.38054347038269,0.844674706459045\n             ,0.33416548371315,0.26105335354805,0.905640423297882,0.410660326480865,0.0589907094836235,0.909878134727478,0.280919551849365\n             ,0.197001457214355,0.939294755458832,0.109994232654572,0.335926622152328,0.935443520545959,0.33416548371315,0.26105335354805\n             ,0.905640423297882,0.0857556685805321,0.213776871562004,0.973111212253571,0.109994232654572,0.335926622152328\n             ,0.935443520545959,0.280919551849365,0.197001457214355,0.939294755458832,0.174916133284569,0.190565213561058\n             ,0.965965449810028,0.174435555934906,-0.932725489139557,-0.315587401390076,0.0540894381701946,-0.932692110538483\n             ,-0.35659471154213,0.0610353648662567,-0.966653764247894,-0.248707070946693,0.200176298618317,-0.953467607498169\n             ,-0.225452929735184,0.28289994597435,-0.924392461776733,-0.255863577127457,0.174435555934906,-0.932725489139557\n             ,-0.315587401390076,0.200176298618317,-0.953467607498169,-0.225452929735184,0.304112553596497,-0.921620965003967\n             ,-0.241102367639542,0.174435555934906,-0.932725489139557,-0.315587401390076,0.28289994597435,-0.924392461776733\n             ,-0.255863577127457,0.282156497240067,-0.915852665901184,-0.285659939050674,0.168268576264381,-0.926923274993896\n             ,-0.335408568382263,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.174435555934906,-0.932725489139557\n             ,-0.315587401390076,0.168268576264381,-0.926923274993896,-0.335408568382263,0.0587443448603153,-0.922947645187378\n             ,-0.380416542291641,0.591701328754425,-0.0445454604923725,0.804925620555878,0.56849592924118,-0.125116035342216\n             ,0.813116490840912,0.44965198636055,0.140096634626389,0.882148504257202,0.583943843841553,0.131935343146324,0.801001012325287\n             ,0.414541780948639,0.400993496179581,0.816920638084412,0.611575484275818,0.314111411571503,0.726160764694214\n             ,0.610058009624481,0.18056558072567,0.771508455276489,0.491490423679352,0.244152218103409,0.835958659648895,0.637141883373261\n             ,-0.082910381257534,0.766274154186249,0.602697968482971,-0.102753959596157,0.791325986385345,0.830796539783478\n             ,-0.141607835888863,0.538260519504547,0.846625864505768,-0.12819692492485,0.516517341136932,0.602697968482971\n             ,-0.102753959596157,0.791325986385345,0.542096614837646,-0.0831166654825211,0.836195468902588,0.797767400741577\n             ,-0.104994267225266,0.593753576278687,0.830796539783478,-0.141607835888863,0.538260519504547,0.851511597633362\n             ,-0.5011847615242,0.154083982110024,0.664332985877991,-0.312286198139191,0.679072141647339,0.642606198787689\n             ,-0.0799093768000603,0.762018263339996,0.733202934265137,-0.122967794537544,0.668799161911011,0.664332985877991\n             ,-0.312286198139191,0.679072141647339,0.591701328754425,-0.0445454604923725,0.804925620555878,0.568371534347534\n             ,0.0187626089900732,0.822558045387268,0.642606198787689,-0.0799093768000603,0.762018263339996,0.329291462898254\n             ,-0.460140645503998,0.824522733688354,0.437306433916092,-0.371932566165924,0.818797469139099,0.533053755760193\n             ,0.0411353260278702,0.845080852508545,0.351316899061203,-0.0729207322001457,0.933412551879883,0.292688071727753\n             ,-0.580336809158325,0.759962379932404,0.329291462898254,-0.460140645503998,0.824522733688354,0.351316899061203\n             ,-0.0729207322001457,0.933412551879883,0.335490047931671,-0.171642184257507,0.926275014877319,0.490798503160477\n             ,-0.859692454338074,-0.141582772135735,0.523316979408264,-0.825681805610657,-0.210686638951302,0.671372294425964\n             ,-0.724817991256714,-0.15459018945694,0.645513415336609,-0.755210697650909,-0.113882429897785,0.537862658500671\n             ,-0.839294493198395,-0.0793002098798752,0.499172002077103,-0.857490539550781,-0.124648600816727,0.490798503160477\n             ,-0.859692454338074,-0.141582772135735,0.645513415336609,-0.755210697650909,-0.113882429897785,0.642173051834106\n             ,-0.76616907119751,-0.0244695600122213,0.630890548229218,-0.774750173091888,0.0417049825191498,0.490798503160477\n             ,-0.859692454338074,-0.141582772135735,0.501666784286499,-0.849441289901733,-0.163646027445793,0.435357719659805\n             ,-0.872423410415649,-0.222128495573998,0.490798503160477,-0.859692454338074,-0.141582772135735,0.499172002077103\n             ,-0.857490539550781,-0.124648600816727,0.501666784286499,-0.849441289901733,-0.163646027445793,0.630890548229218\n             ,-0.774750173091888,0.0417049825191498,0.523316979408264,-0.825681805610657,-0.210686638951302,0.490798503160477\n             ,-0.859692454338074,-0.141582772135735,0.965503036975861,0.206421509385109,0.158726423978806,0.967272758483887\n             ,0.0499838180840015,0.248767033219337,0.980852127075195,0.00218713283538818,0.194741636514664,0.96669465303421\n             ,0.168093785643578,0.192991986870766,0.980899035930634,0.0846881344914436,0.175114318728447,0.975037813186646\n             ,0.14565335214138,0.167589843273163,0.965288519859314,0.151292905211449,0.212904900312424,0.965503036975861,0.206421509385109\n             ,0.158726423978806,0.980899035930634,0.0846881344914436,0.175114318728447,0.974559843540192,0.0402764715254307\n             ,0.220478907227516,0.926979184150696,-0.0986248403787613,0.36191537976265,0.967272758483887,0.0499838180840015\n             ,0.248767033219337,0.965503036975861,0.206421509385109,0.158726423978806,0.965288519859314,0.151292905211449\n             ,0.212904900312424,0.945337653160095,-0.174788698554039,0.275292009115219,0.947748720645905,-0.180222257971764\n             ,0.263234436511993,0.936089217662811,-0.214836105704308,0.278536230325699,0.941718637943268,-0.180898189544678\n             ,0.283622801303864,0.947748720645905,-0.180222257971764,0.263234436511993,0.96362441778183,-0.210319370031357\n             ,0.16490513086319,0.949846565723419,-0.197867274284363,0.242157250642776,0.936089217662811,-0.214836105704308\n             ,0.278536230325699,0.9190753698349,-0.11298330873251,0.377538323402405,0.935290277004242,-0.181792959570885,0.303617179393768\n             ,0.937723875045776,-0.0835999995470047,0.337171912193298,0.909473538398743,-0.0684049502015114,0.410095930099487\n             ,0.949846565723419,-0.197867274284363,0.242157250642776,0.964770019054413,-0.0907266810536385,0.246956452727318\n             ,0.937723875045776,-0.0835999995470047,0.337171912193298,0.935290277004242,-0.181792959570885,0.303617179393768\n             ,0.961935639381409,0.00657567568123341,0.273196935653687,0.93503212928772,0.00599651364609599,0.354512244462967\n             ,0.937723875045776,-0.0835999995470047,0.337171912193298,0.964770019054413,-0.0907266810536385,0.246956452727318\n             ,0.921219646930695,-0.0589233264327049,0.384554862976074,0.909473538398743,-0.0684049502015114,0.410095930099487\n             ,0.937723875045776,-0.0835999995470047,0.337171912193298,0.93503212928772,0.00599651364609599,0.354512244462967\n             ,0.684517562389374,-0.439017295837402,0.581978976726532,0.689838171005249,-0.617681860923767,0.377614080905914\n             ,0.657656788825989,-0.727221310138702,0.196562394499779,0.742792665958405,-0.550313711166382,0.381331622600555\n             ,0.689838171005249,-0.617681860923767,0.377614080905914,0.693672001361847,-0.686315536499023,0.218609541654587\n             ,0.639384806156158,-0.761013865470886,0.109749406576157,0.657656788825989,-0.727221310138702,0.196562394499779\n             ,0.642289221286774,0.115071445703506,0.757775127887726,0.698984086513519,0.246289730072021,0.671388566493988\n             ,0.450006783008575,0.263622760772705,0.853227376937866,0.471029788255692,0.166954964399338,0.86617374420166,0.698984086513519\n             ,0.246289730072021,0.671388566493988,0.720846891403198,0.393656641244888,0.570450901985168,0.556747674942017\n             ,0.38243293762207,0.737412452697754,0.450006783008575,0.263622760772705,0.853227376937866,0.570054233074188,-0.200027942657471\n             ,0.796885788440704,0.683284997940063,0.154697299003601,0.713575720787048,0.702580511569977,0.00276018492877483\n             ,0.711598932743073,0.681784629821777,-0.285219341516495,0.673661351203918,0.550090253353119,-0.357467710971832\n             ,0.754730105400085,0.719567954540253,-0.322717130184174,0.614878535270691,0.765106797218323,-0.350072890520096\n             ,0.540426254272461,0.613220632076263,-0.373373091220856,0.696098387241364,0.681784629821777,-0.285219341516495\n             ,0.673661351203918,0.702580511569977,0.00276018492877483,0.711598932743073,0.550090253353119,-0.357467710971832\n             ,0.754730105400085,0.629800915718079,-0.358788877725601,0.68892765045166,0.874416053295136,-0.00546242296695709\n             ,0.485146045684814,0.908188223838806,0.15894940495491,0.387206882238388,0.885035216808319,0.393218964338303,0.249181613326073\n             ,0.854046881198883,0.485713124275208,0.186243653297424,0.890166699886322,0.437690794467926,-0.12660938501358\n             ,0.163330301642418,0.241669088602066,0.956514120101929,0.0931223928928375,0.201938465237617,0.97496110200882\n             ,0.16256257891655,0.269552499055862,0.949165344238281,0.245724827051163,0.276487857103348,0.929071426391602,0.0931223928928375\n             ,0.201938465237617,0.97496110200882,0.0272070206701756,0.178279355168343,0.983603715896606,0.0426242314279079\n             ,0.260108649730682,0.964638113975525,0.16256257891655,0.269552499055862,0.949165344238281,0.584166944026947,-0.151799350976944\n             ,0.797311663627625,0.618419706821442,-0.127026095986366,0.775513648986816,0.414358675479889,-0.126704558730125\n             ,0.901250720024109,0.402891218662262,-0.177310451865196,0.897908508777618,0.567721784114838,-0.411755472421646\n             ,0.712845981121063,0.387449771165848,-0.245748713612556,0.888532638549805,0.414358675479889,-0.126704558730125\n             ,0.901250720024109,0.618419706821442,-0.127026095986366,0.775513648986816,0.690909028053284,-0.334549605846405\n             ,0.640875399112701,0.0780740827322006,-0.57033497095108,0.817693412303925,0.047360323369503,-0.552981853485107\n             ,0.831846177577972,0.0903236120939255,-0.645915448665619,0.758046746253967,0.0476435497403145,-0.676355302333832\n             ,0.73503303527832,0.0780740827322006,-0.57033497095108,0.817693412303925,0.0476435497403145,-0.676355302333832\n             ,0.73503303527832,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.0301125477999449,-0.572418868541718\n             ,0.819408237934113,0.630890548229218,-0.774750173091888,0.0417049825191498,0.435357719659805,-0.872423410415649\n             ,-0.222128495573998,0.563636422157288,-0.823141872882843,0.0689310654997826,0.623485326766968,0.449957937002182\n             ,0.639377772808075,0.524678170681,0.559116363525391,0.641951441764832,0.497093498706818,0.456073582172394,0.738169968128204\n             ,0.226432472467422,-0.391454815864563,0.891903281211853,0.0903236120939255,-0.645915448665619,0.758046746253967\n             ,0.378649204969406,-0.51500403881073,0.769022524356842,0.488678455352783,-0.257274806499481,0.833668410778046\n             ,0.226432472467422,-0.391454815864563,0.891903281211853,0.488678455352783,-0.257274806499481,0.833668410778046\n             ,0.558381021022797,0.167118594050407,0.812577426433563,0.315978825092316,0.0904445722699165,0.944445431232452\n             ,0.70995169878006,-0.557043075561523,0.430896311998367,0.767249822616577,-0.595458924770355,0.23823593556881\n             ,0.868513345718384,-0.371388286352158,0.328260958194733,0.821784615516663,-0.261638671159744,0.506177127361298\n             ,0.868513345718384,-0.371388286352158,0.328260958194733,0.883809387683868,-0.290479838848114,0.366745710372925\n             ,0.792236804962158,-0.0960670188069344,0.602604329586029,0.821784615516663,-0.261638671159744,0.506177127361298\n             ,0.218448147177696,-0.859921038150787,0.461320102214813,0.423061966896057,-0.638191282749176,0.643218815326691\n             ,0.599736154079437,-0.429048538208008,0.675450921058655,0.462026834487915,-0.814152240753174,0.351692080497742\n             ,0.599736154079437,-0.429048538208008,0.675450921058655,0.56849592924118,-0.125116035342216,0.813116490840912\n             ,0.591701328754425,-0.0445454604923725,0.804925620555878,0.599736154079437,-0.429048538208008,0.675450921058655\n             ,0.423061966896057,-0.638191282749176,0.643218815326691,0.56849592924118,-0.125116035342216,0.813116490840912\n             ,0.591701328754425,-0.0445454604923725,0.804925620555878,0.664332985877991,-0.312286198139191,0.679072141647339\n             ,0.599736154079437,-0.429048538208008,0.675450921058655,0.851511597633362,-0.5011847615242,0.154083982110024\n             ,0.462026834487915,-0.814152240753174,0.351692080497742,0.599736154079437,-0.429048538208008,0.675450921058655\n             ,0.664332985877991,-0.312286198139191,0.679072141647339,0.934174954891205,-0.332788705825806,0.128719761967659\n             ,0.953670024871826,-0.218769177794456,0.206527322530746,0.945006668567657,-0.308922052383423,0.107375629246235\n             ,0.94329446554184,-0.325108468532562,0.0670826062560081,0.938213586807251,-0.216931000351906,0.269622415304184\n             ,0.935753345489502,-0.270965844392776,0.225705921649933,0.945006668567657,-0.308922052383423,0.107375629246235\n             ,0.953670024871826,-0.218769177794456,0.206527322530746,0.971762239933014,-0.143596902489662,0.187237858772278\n             ,0.988696813583374,-0.11085943877697,0.10093978792429,0.945006668567657,-0.308922052383423,0.107375629246235\n             ,0.935753345489502,-0.270965844392776,0.225705921649933,0.987058341503143,-0.0681737512350082,0.145148620009422\n             ,0.94329446554184,-0.325108468532562,0.0670826062560081,0.945006668567657,-0.308922052383423,0.107375629246235\n             ,0.988696813583374,-0.11085943877697,0.10093978792429,0.623457431793213,0.0676653161644936,0.778923749923706\n             ,0.565106153488159,0.017743531614542,0.824827373027802,0.601098597049713,0.0911194980144501,0.793963313102722\n             ,0.655191659927368,0.0146637577563524,0.755320370197296,0.623457431793213,0.0676653161644936,0.778923749923706\n             ,0.655191659927368,0.0146637577563524,0.755320370197296,0.633589863777161,-0.0252969916909933,0.773255407810211\n             ,0.61975085735321,-0.35027813911438,0.702292025089264,0.690708041191101,-0.0477886833250523,0.721552908420563\n             ,0.877371370792389,-0.100216217339039,0.469229310750961,0.794963598251343,-0.434218406677246,0.423659265041351\n             ,0.794963598251343,-0.434218406677246,0.423659265041351,0.877371370792389,-0.100216217339039,0.469229310750961\n             ,0.894858956336975,-0.0870964974164963,0.437768936157227,0.881620466709137,-0.332029432058334,0.335412949323654\n             ,0.0633370503783226,-0.944429814815521,-0.322553485631943,0.0587443448603153,-0.922947645187378,-0.380416542291641\n             ,0.168268576264381,-0.926923274993896,-0.335408568382263,0.164555922150612,-0.956649422645569,-0.240298211574554\n             ,0.164555922150612,-0.956649422645569,-0.240298211574554,0.168268576264381,-0.926923274993896,-0.335408568382263\n             ,0.282156497240067,-0.915852665901184,-0.285659939050674,0.283746033906937,-0.948122382164001,-0.143360316753387\n             ,0.44691988825798,-0.179234355688095,0.876434624195099,0.529802799224854,-0.195633217692375,0.825249433517456\n             ,0.359973400831223,-0.258122891187668,0.896544337272644,0.312136799097061,-0.241864830255508,0.918733894824982\n             ,0.529802799224854,-0.195633217692375,0.825249433517456,0.584166944026947,-0.151799350976944,0.797311663627625\n             ,0.402891218662262,-0.177310451865196,0.897908508777618,0.359973400831223,-0.258122891187668,0.896544337272644\n             ,0.938213586807251,-0.216931000351906,0.269622415304184,0.953670024871826,-0.218769177794456,0.206527322530746\n             ,0.965523362159729,-0.0906704962253571,0.24401530623436,0.979475617408752,-0.109372921288013,0.169307827949524\n             ,0.934174954891205,-0.332788705825806,0.128719761967659,0.949501037597656,-0.133338466286659,0.284022271633148\n             ,0.965523362159729,-0.0906704962253571,0.24401530623436,0.953670024871826,-0.218769177794456,0.206527322530746\n             ,0.965523362159729,-0.0906704962253571,0.24401530623436,0.949501037597656,-0.133338466286659,0.284022271633148\n             ,0.947793483734131,-0.0109208915382624,0.318697780370712,0.987097263336182,-0.0312144737690687,0.157049849629402\n             ,0.979475617408752,-0.109372921288013,0.169307827949524,0.965523362159729,-0.0906704962253571,0.24401530623436\n             ,0.987097263336182,-0.0312144737690687,0.157049849629402,0.995871722698212,-0.0808055028319359,0.041352104395628\n             ,0.55342048406601,0.140735372900963,0.820925891399384,0.562969863414764,0.141692653298378,0.81424081325531,0.508710622787476\n             ,0.190386489033699,0.839622795581818,0.503296196460724,0.0546823143959045,0.862382054328918,0.498867928981781\n             ,0.236602708697319,0.833756506443024,0.55342048406601,0.140735372900963,0.820925891399384,0.33416548371315,0.26105335354805\n             ,0.905640423297882,0.37644562125206,0.38054347038269,0.844674706459045,0.630171060562134,-0.220097869634628,0.744608163833618\n             ,0.523068964481354,-0.400331109762192,0.752418637275696,0.613220632076263,-0.373373091220856,0.696098387241364\n             ,0.662703216075897,-0.235535204410553,0.710878074169159,0.270446568727493,-0.724654376506805,0.633825421333313\n             ,0.586388051509857,-0.415063470602036,0.695608615875244,0.406590580940247,-0.393400549888611,0.824572682380676\n             ,0.0997758805751801,-0.76704877614975,0.633782982826233,0.437306433916092,-0.371932566165924,0.818797469139099\n             ,0.406590580940247,-0.393400549888611,0.824572682380676,0.586388051509857,-0.415063470602036,0.695608615875244\n             ,0.640114009380341,-0.360243141651154,0.678585946559906,0.358242690563202,-0.369526594877243,0.857386887073517\n             ,0.738801121711731,-0.260166734457016,0.6216801404953,0.717148721218109,-0.158668875694275,0.678617656230927\n             ,0.359977900981903,-0.319483041763306,0.876553773880005,0.219657093286514,0.398345082998276,0.890545904636383\n             ,0.305438488721848,0.421940237283707,0.853623926639557,0.395363062620163,0.562560498714447,0.726094901561737\n             ,0.340864300727844,0.524212896823883,0.780392467975616,0.370492875576019,0.369821041822433,0.852037250995636\n             ,0.416927576065063,0.413195610046387,0.809592962265015,0.305438488721848,0.421940237283707,0.853623926639557\n             ,0.245724827051163,0.276487857103348,0.929071426391602,0.278009802103043,0.308251172304153,0.909775674343109\n             ,0.305438488721848,0.421940237283707,0.853623926639557,0.416927576065063,0.413195610046387,0.809592962265015\n             ,0.497093498706818,0.456073582172394,0.738169968128204,0.524678170681,0.559116363525391,0.641951441764832,0.395363062620163\n             ,0.562560498714447,0.726094901561737,0.773433268070221,0.347118884325027,0.53038614988327,0.623485326766968,0.449957937002182\n             ,0.639377772808075,0.649705529212952,0.341418325901031,0.679202735424042,0.750506460666656,0.343903452157974\n             ,0.564331829547882,0.649705529212952,0.341418325901031,0.679202735424042,0.556747674942017,0.38243293762207,0.737412452697754\n             ,0.720846891403198,0.393656641244888,0.570450901985168,0.750506460666656,0.343903452157974,0.564331829547882\n             ,0.591701328754425,-0.0445454604923725,0.804925620555878,0.583943843841553,0.131935343146324,0.801001012325287\n             ,0.601098597049713,0.0911194980144501,0.793963313102722,0.568371534347534,0.0187626089900732,0.822558045387268\n             ,0.335370063781738,-0.00474565383046865,0.942074537277222,0.286056965589523,0.444956660270691,0.848637104034424\n             ,0.65963888168335,0.347626268863678,0.666357636451721,0.690708041191101,-0.0477886833250523,0.721552908420563\n             ,0.335370063781738,-0.00474565383046865,0.942074537277222,0.017973817884922,0.0102047342807055,0.999786376953125\n             ,0.0513622872531414,0.468802571296692,0.881808400154114,0.286056965589523,0.444956660270691,0.848637104034424\n             ,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.640791594982147,-0.766526699066162,0.0426960773766041\n             ,0.494663387537003,-0.866621494293213,-0.0653853639960289,0.430644094944,-0.871794462203979,-0.233495324850082\n             ,0.611575484275818,0.314111411571503,0.726160764694214,0.800925850868225,0.226523146033287,0.554260790348053\n             ,0.826946556568146,0.0731306597590446,0.557504594326019,0.610058009624481,0.18056558072567,0.771508455276489\n             ,0.800925850868225,0.226523146033287,0.554260790348053,0.611575484275818,0.314111411571503,0.726160764694214\n             ,0.512064158916473,0.485980182886124,0.708246827125549,0.535205781459808,0.472302228212357,0.700346648693085\n             ,0.783647418022156,0.339152276515961,0.520454108715057,0.813101530075073,0.281051158905029,0.509780466556549\n             ,0.834977984428406,0.275511413812637,0.47634568810463,0.79509973526001,0.317423015832901,0.516777575016022,0.819765686988831\n             ,0.312743216753006,0.479766517877579,0.773433268070221,0.347118884325027,0.53038614988327,0.821655750274658,0.296962469816208\n             ,0.486513197422028,0.855628609657288,0.255288362503052,0.450252771377563,0.85977029800415,0.296936422586441,0.415480256080627\n             ,0.922278165817261,0.183078601956367,0.340419232845306,0.855628609657288,0.255288362503052,0.450252771377563\n             ,0.821655750274658,0.296962469816208,0.486513197422028,0.966420710086823,0.0570991300046444,0.250540882349014\n             ,0.930171310901642,0.112328357994556,0.34951913356781,0.855628609657288,0.255288362503052,0.450252771377563,0.922278165817261\n             ,0.183078601956367,0.340419232845306,0.270428031682968,-0.84670215845108,0.458218395709991,0.387449771165848\n             ,-0.245748713612556,0.888532638549805,0.567721784114838,-0.411755472421646,0.712845981121063,0.454382866621017\n             ,-0.848002672195435,0.272814393043518,0.563636422157288,-0.823141872882843,0.0689310654997826,0.454382866621017\n             ,-0.848002672195435,0.272814393043518,0.567721784114838,-0.411755472421646,0.712845981121063,0.690909028053284\n             ,-0.334549605846405,0.640875399112701,0.766620635986328,-0.390746057033539,-0.509519696235657,0.719214975833893\n             ,-0.430595219135284,-0.545268356800079,0.829468905925751,-0.13685368001461,-0.5415278673172,0.946312725543976\n             ,-0.198392629623413,-0.255210876464844,0.829468905925751,-0.13685368001461,-0.5415278673172,0.719214975833893\n             ,-0.430595219135284,-0.545268356800079,0.940188527107239,-0.340047240257263,0.0203306917101145,0.959231495857239\n             ,-0.07520642131567,-0.272431552410126,0.847399115562439,-0.142815440893173,-0.511388719081879,0.829468905925751\n             ,-0.13685368001461,-0.5415278673172,0.959231495857239,-0.07520642131567,-0.272431552410126,0.899878442287445\n             ,-0.160217583179474,-0.405646592378616,0.976300895214081,-0.175593838095665,-0.126504495739937,0.946312725543976\n             ,-0.198392629623413,-0.255210876464844,0.829468905925751,-0.13685368001461,-0.5415278673172,0.847399115562439\n             ,-0.142815440893173,-0.511388719081879,0.824678778648376,0.331173717975616,0.458507210016251,0.855628609657288\n             ,0.255288362503052,0.450252771377563,0.930171310901642,0.112328357994556,0.34951913356781,0.908929646015167,0.18951641023159\n             ,0.371389836072922,0.835932672023773,0.318577855825424,0.446905732154846,0.824678778648376,0.331173717975616\n             ,0.458507210016251,0.744709670543671,0.422629773616791,0.516518652439117,0.773433268070221,0.347118884325027\n             ,0.53038614988327,0.824678778648376,0.331173717975616,0.458507210016251,0.835932672023773,0.318577855825424,0.446905732154846\n             ,0.744709670543671,0.422629773616791,0.516518652439117,0.773433268070221,0.347118884325027,0.53038614988327,0.855628609657288\n             ,0.255288362503052,0.450252771377563,0.824678778648376,0.331173717975616,0.458507210016251,0.267092674970627\n             ,-0.484114617109299,0.833243370056152,0.406590580940247,-0.393400549888611,0.824572682380676,0.437306433916092\n             ,-0.371932566165924,0.818797469139099,0.329291462898254,-0.460140645503998,0.824522733688354,0.640791594982147\n             ,-0.766526699066162,0.0426960773766041,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.65738570690155\n             ,-0.752218425273895,0.0448495484888554,0.705848097801209,-0.694441199302673,0.13974928855896,0.65738570690155\n             ,-0.752218425273895,0.0448495484888554,0.639384806156158,-0.761013865470886,0.109749406576157,0.693672001361847\n             ,-0.686315536499023,0.218609541654587,0.705848097801209,-0.694441199302673,0.13974928855896,0.985209882259369\n             ,0.0516813509166241,0.163372397422791,0.980856478214264,0.0318705588579178,0.192106366157532,0.965117514133453\n             ,0.0208978541195393,0.260981827974319,0.962778627872467,0.0666173547506332,0.261953175067902,0.870097935199738\n             ,0.102833516895771,0.482032060623169,0.826946556568146,0.0731306597590446,0.557504594326019,0.965117514133453\n             ,0.0208978541195393,0.260981827974319,0.980856478214264,0.0318705588579178,0.192106366157532,0.965117514133453\n             ,0.0208978541195393,0.260981827974319,0.826946556568146,0.0731306597590446,0.557504594326019,0.800925850868225\n             ,0.226523146033287,0.554260790348053,0.933462917804718,0.164250507950783,0.318855404853821,0.920523226261139\n             ,0.14191623032093,0.36400106549263,0.962778627872467,0.0666173547506332,0.261953175067902,0.965117514133453,0.0208978541195393\n             ,0.260981827974319,0.933462917804718,0.164250507950783,0.318855404853821,0.966257035732269,0.139943510293961\n             ,0.216247826814651,0.976429760456085,-0.14936164021492,0.155807659029961,0.993429064750671,-0.113890402019024\n             ,0.0113009223714471,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.981637835502625,-0.188382476568222\n             ,0.0299864616245031,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.858178198337555,-0.416941344738007\n             ,-0.299483120441437,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.981637835502625,-0.188382476568222\n             ,0.0299864616245031,0.54023802280426,-0.148879259824753,0.828237771987915,0.507363021373749,-0.115291275084019\n             ,0.853985190391541,0.124305054545403,-0.308796167373657,0.942970395088196,0.189583629369736,-0.286395132541656\n             ,0.939167618751526,0.94987964630127,-0.0038351418916136,0.312592297792435,0.972302615642548,0.043654702603817\n             ,0.229612305760384,0.964095413684845,-0.0113426633179188,0.265313804149628,0.956782042980194,0.0500060208141804\n             ,0.286474347114563,0.972302615642548,0.043654702603817,0.229612305760384,0.966708958148956,-0.002308584516868\n             ,0.255868047475815,0.945727825164795,-0.098081186413765,0.309804677963257,0.964095413684845,-0.0113426633179188\n             ,0.265313804149628,0.94987964630127,-0.0038351418916136,0.312592297792435,0.956782042980194,0.0500060208141804\n             ,0.286474347114563,0.937608182430267,0.0460146591067314,0.344635367393494,0.155652940273285,-0.987067878246307\n             ,0.0383299365639687,-0.032355971634388,-0.99692964553833,0.0713044255971909,0.386847853660584,-0.767014622688293\n             ,0.511895835399628,0.191021859645844,-0.901510059833527,0.388317227363586,0.155652940273285,-0.987067878246307\n             ,0.0383299365639687,0.191021859645844,-0.901510059833527,0.388317227363586,0.255019038915634,-0.916801631450653\n             ,0.307311117649078,0.279211044311523,-0.955691933631897,0.093242421746254,0.17069847881794,-0.387216597795486\n             ,0.906049311161041,0.204357400536537,-0.124537408351898,0.97094202041626,0.197210118174553,0.0128493588417768\n             ,0.980277061462402,0.848142683506012,0.254542678594589,0.464609563350677,0.65963888168335,0.347626268863678,0.666357636451721\n             ,0.667004644870758,0.442110657691956,0.59970235824585,0.825178265571594,0.267818719148636,0.497346937656403,0.801001727581024\n             ,0.319669455289841,0.506169617176056,0.848142683506012,0.254542678594589,0.464609563350677,0.801001727581024\n             ,0.319669455289841,0.506169617176056,0.79509973526001,0.317423015832901,0.516777575016022,0.834977984428406,0.275511413812637\n             ,0.47634568810463,-0.0214409474283457,-0.17113696038723,0.985013961791992,-0.136760428547859,-0.195085763931274\n             ,0.971204459667206,-0.0409326404333115,0.16646908223629,0.985196709632874,-0.0292664598673582,0.127957031130791\n             ,0.991347789764404,-0.0409326404333115,0.16646908223629,0.985196709632874,-0.136760428547859,-0.195085763931274\n             ,0.971204459667206,0.0031939682085067,-0.177682086825371,0.984082758426666,0.0314028672873974,0.188204348087311\n             ,0.981627702713013,0.382985174655914,-0.340148031711578,0.858849048614502,0.514656662940979,-0.124439902603626\n             ,0.848317861557007,0.633589863777161,-0.0252969916909933,0.773255407810211,0.588271081447601,-0.259690821170807\n             ,0.765831470489502,0.382985174655914,-0.340148031711578,0.858849048614502,0.588271081447601,-0.259690821170807\n             ,0.765831470489502,0.525104641914368,-0.419060587882996,0.740711390972137,0.121470481157303,-0.391699403524399\n             ,0.912039756774902,0.173163160681725,-0.359727561473846,0.916848182678223,0.382985174655914,-0.340148031711578\n             ,0.858849048614502,0.121470481157303,-0.391699403524399,0.912039756774902,0.164051368832588,-0.273042142391205\n             ,0.947910964488983,0.443824082612991,-0.204101487994194,0.872561037540436,0.514656662940979,-0.124439902603626\n             ,0.848317861557007,0.382985174655914,-0.340148031711578,0.858849048614502,0.173163160681725,-0.359727561473846\n             ,0.916848182678223,0.416703939437866,-0.0255245417356491,0.908683836460114,0.254473268985748,-0.0765668898820877\n             ,0.964044034481049,0.182319968938828,0.114501133561134,0.976549506187439,0.44965198636055,0.140096634626389,0.882148504257202\n             ,0.523316979408264,-0.825681805610657,-0.210686638951302,0.626487195491791,-0.719823837280273,-0.298943966627121\n             ,0.720593869686127,-0.637408852577209,-0.272863417863846,0.671372294425964,-0.724817991256714,-0.15459018945694\n             ,0.630890548229218,-0.774750173091888,0.0417049825191498,0.755779623985291,-0.654822111129761,0.00226114504039288\n             ,0.626487195491791,-0.719823837280273,-0.298943966627121,0.523316979408264,-0.825681805610657,-0.210686638951302\n             ,0.840808868408203,-0.369773417711258,0.395358175039291,0.756419658660889,-0.554076313972473,-0.347604215145111\n             ,0.626487195491791,-0.719823837280273,-0.298943966627121,0.755779623985291,-0.654822111129761,0.00226114504039288\n             ,0.626487195491791,-0.719823837280273,-0.298943966627121,0.756419658660889,-0.554076313972473,-0.347604215145111\n             ,0.777718842029572,-0.48187255859375,-0.403673440217972,0.720593869686127,-0.637408852577209,-0.272863417863846\n             ,0.562851548194885,-0.792488932609558,0.23486053943634,0.881620466709137,-0.332029432058334,0.335412949323654\n             ,0.738801121711731,-0.260166734457016,0.6216801404953,0.386847853660584,-0.767014622688293,0.511895835399628\n             ,0.618419706821442,-0.127026095986366,0.775513648986816,0.584166944026947,-0.151799350976944,0.797311663627625\n             ,0.637141883373261,-0.082910381257534,0.766274154186249,0.649656236171722,-0.0531920231878757,0.758364915847778\n             ,0.690909028053284,-0.334549605846405,0.640875399112701,0.618419706821442,-0.127026095986366,0.775513648986816\n             ,0.649656236171722,-0.0531920231878757,0.758364915847778,0.707773089408875,-0.177667543292046,0.683733463287354\n             ,0.430644094944,-0.871794462203979,-0.233495324850082,0.304112553596497,-0.921620965003967,-0.241102367639542\n             ,0.563636422157288,-0.823141872882843,0.0689310654997826,0.435357719659805,-0.872423410415649,-0.222128495573998\n             ,0.529802799224854,-0.195633217692375,0.825249433517456,0.44691988825798,-0.179234355688095,0.876434624195099\n             ,0.542096614837646,-0.0831166654825211,0.836195468902588,0.602697968482971,-0.102753959596157,0.791325986385345\n             ,0.584166944026947,-0.151799350976944,0.797311663627625,0.529802799224854,-0.195633217692375,0.825249433517456\n             ,0.602697968482971,-0.102753959596157,0.791325986385345,0.637141883373261,-0.082910381257534,0.766274154186249\n             ,0.0341533571481705,0.664829432964325,0.746214032173157,0.102224595844746,0.498050421476364,0.861101567745209\n             ,0.31933718919754,0.337111681699753,0.885652005672455,0.220439016819,0.602273344993591,0.767250597476959,-0.407276064157486\n             ,0.876896381378174,0.255301624536514,-0.38366886973381,0.80352109670639,0.455139607191086,0.0341533571481705\n             ,0.664829432964325,0.746214032173157,0.220439016819,0.602273344993591,0.767250597476959,0.164532527327538,0.859674274921417\n             ,0.483620911836624,0.534866094589233,0.53300929069519,0.655606091022491,0.102224595844746,0.498050421476364,0.861101567745209\n             ,0.0341533571481705,0.664829432964325,0.746214032173157,-0.38366886973381,0.80352109670639,0.455139607191086\n             ,0.765106797218323,-0.350072890520096,0.540426254272461,0.75313264131546,-0.288527101278305,0.591221868991852\n             ,0.662703216075897,-0.235535204410553,0.710878074169159,0.613220632076263,-0.373373091220856,0.696098387241364\n             ,0.35059866309166,-0.137498125433922,0.926377296447754,0.194007128477097,-0.0432056449353695,0.98004823923111\n             ,0.313594281673431,0.139182701706886,0.939301192760468,0.46117314696312,-0.0281441453844309,0.886863708496094\n             ,0.44691988825798,-0.179234355688095,0.876434624195099,0.35059866309166,-0.137498125433922,0.926377296447754\n             ,0.46117314696312,-0.0281441453844309,0.886863708496094,0.542096614837646,-0.0831166654825211,0.836195468902588\n             ,0.563636422157288,-0.823141872882843,0.0689310654997826,0.304112553596497,-0.921620965003967,-0.241102367639542\n             ,0.200176298618317,-0.953467607498169,-0.225452929735184,0.454382866621017,-0.848002672195435,0.272814393043518\n             ,0.200176298618317,-0.953467607498169,-0.225452929735184,0.0610353648662567,-0.966653764247894,-0.248707070946693\n             ,0.270428031682968,-0.84670215845108,0.458218395709991,0.454382866621017,-0.848002672195435,0.272814393043518\n             ,0.327757924795151,-0.912954866886139,-0.243080645799637,0.304112553596497,-0.921620965003967,-0.241102367639542\n             ,0.430644094944,-0.871794462203979,-0.233495324850082,0.640791594982147,-0.766526699066162,0.0426960773766041\n             ,0.638466238975525,-0.769491136074066,0.0156274978071451,0.465027630329132,-0.875830411911011,-0.129113703966141\n             ,0.494663387537003,-0.866621494293213,-0.0653853639960289,-0.0349236838519573,-0.777106523513794,0.62839937210083\n             ,0.176858365535736,-0.897578120231628,0.403824985027313,-0.021647073328495,-0.960853159427643,0.276211261749268\n             ,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.623457431793213,0.0676653161644936,0.778923749923706\n             ,0.574505984783173,-0.027739129960537,0.818030178546906,0.535101175308228,-0.00626787729561329,0.844764709472656\n             ,0.565106153488159,0.017743531614542,0.824827373027802,0.514656662940979,-0.124439902603626,0.848317861557007\n             ,0.574505984783173,-0.027739129960537,0.818030178546906,0.623457431793213,0.0676653161644936,0.778923749923706\n             ,0.633589863777161,-0.0252969916909933,0.773255407810211,0.574505984783173,-0.027739129960537,0.818030178546906\n             ,0.514656662940979,-0.124439902603626,0.848317861557007,0.443824082612991,-0.204101487994194,0.872561037540436\n             ,0.655753970146179,-0.0819050073623657,0.750518679618835,0.633136808872223,-0.0669011846184731,0.771143317222595\n             ,0.535101175308228,-0.00626787729561329,0.844764709472656,0.574505984783173,-0.027739129960537,0.818030178546906\n             ,0.633136808872223,-0.0669011846184731,0.771143317222595,0.578185617923737,-0.0845057815313339,0.811517179012299\n             ,-0.00140566960908473,-0.234566405415535,0.97209906578064,0.00247630476951599,-0.186591759324074,0.982434391975403\n             ,0.288086891174316,-0.211062774062157,0.934054851531982,0.312136799097061,-0.241864830255508,0.918733894824982\n             ,0.00247630476951599,-0.186591759324074,0.982434391975403,-0.000449120096163824,-0.222807794809341,0.974862277507782\n             ,0.253216534852982,-0.212744683027267,0.943727254867554,0.288086891174316,-0.211062774062157,0.934054851531982\n             ,0.765106797218323,-0.350072890520096,0.540426254272461,0.719567954540253,-0.322717130184174,0.614878535270691\n             ,0.866469502449036,-0.361488610506058,0.344320476055145,0.875984609127045,-0.341396063566208,0.340734094381332\n             ,0.332773357629776,-0.801452815532684,0.49692577123642,0.198447287082672,-0.827921032905579,0.524562180042267\n             ,0.168408244848251,-0.974918007850647,0.145511314272881,0.304768770933151,-0.92969423532486,0.206844300031662\n             ,0.353568494319916,-0.776771426200867,0.521167457103729,0.332773357629776,-0.801452815532684,0.49692577123642\n             ,0.304768770933151,-0.92969423532486,0.206844300031662,0.225757539272308,-0.896350860595703,0.381560862064362\n             ,0.918502330780029,-0.196233198046684,0.343287169933319,0.989523768424988,0.120242863893509,-0.0799020603299141\n             ,0.941014289855957,-0.231837883591652,0.246461525559425,0.928443729877472,-0.228811115026474,0.292639285326004\n             ,0.925993382930756,0.073547326028347,-0.370306611061096,0.903722703456879,-0.336785912513733,0.26431143283844\n             ,0.941014289855957,-0.231837883591652,0.246461525559425,0.989523768424988,0.120242863893509,-0.0799020603299141\n             ,0.804244041442871,-0.107830874621868,0.584434807300568,0.64728707075119,-0.269912004470825,0.712858319282532\n             ,0.43553838133812,0.174102976918221,0.883172988891602,0.897598922252655,-0.0851877480745316,0.432503432035446\n             ,0.928443729877472,-0.228811115026474,0.292639285326004,0.941014289855957,-0.231837883591652,0.246461525559425\n             ,0.804244041442871,-0.107830874621868,0.584434807300568,0.877371370792389,-0.100216217339039,0.469229310750961\n             ,0.690708041191101,-0.0477886833250523,0.721552908420563,0.65963888168335,0.347626268863678,0.666357636451721\n             ,0.848142683506012,0.254542678594589,0.464609563350677,0.688574373722076,-0.431850165128708,0.58255535364151\n             ,0.586388051509857,-0.415063470602036,0.695608615875244,0.270446568727493,-0.724654376506805,0.633825421333313\n             ,0.333747088909149,-0.66472852230072,0.668392717838287,0.731125593185425,-0.405815303325653,0.548424422740936\n             ,0.688574373722076,-0.431850165128708,0.58255535364151,0.333747088909149,-0.66472852230072,0.668392717838287\n             ,0.535029828548431,-0.536747872829437,0.652414619922638,0.688574373722076,-0.431850165128708,0.58255535364151\n             ,0.731125593185425,-0.405815303325653,0.548424422740936,0.73811411857605,-0.426667273044586,0.522630453109741\n             ,0.731416404247284,-0.417625606060028,0.539090871810913,-0.0552638620138168,0.347488284111023,0.936054348945618\n             ,0.179719522595406,0.199890360236168,0.963195025920868,-0.00221070507541299,0.348074615001678,0.937464237213135\n             ,0.174916133284569,0.190565213561058,0.965965449810028,0.280919551849365,0.197001457214355,0.939294755458832\n             ,0.431708127260208,0.0743667632341385,0.898942530155182,0.493298023939133,0.0378949381411076,0.8690345287323\n             ,0.951365828514099,0.00983366928994656,0.30790650844574,0.958109974861145,-0.0344467237591743,0.284321486949921\n             ,0.955479383468628,-0.0429471768438816,0.291915565729141,0.0600041374564171,-0.192453533411026,0.979469835758209\n             ,-0.0292664598673582,0.127957031130791,0.991347789764404,-0.0409326404333115,0.16646908223629,0.985196709632874\n             ,0.0412249267101288,-0.205861806869507,0.977712333202362,-0.0409326404333115,0.16646908223629,0.985196709632874\n             ,0.0314028672873974,0.188204348087311,0.981627702713013,0.00068405584897846,-0.208776980638504,0.977963030338287\n             ,0.0412249267101288,-0.205861806869507,0.977712333202362,0.44965198636055,0.140096634626389,0.882148504257202\n             ,0.182319968938828,0.114501133561134,0.976549506187439,0.191416949033737,-0.0921172648668289,0.977176547050476\n             ,0.440964937210083,0.0207586232572794,0.897284269332886,0.763672888278961,0.330310761928558,0.554705798625946\n             ,0.728024780750275,0.317726284265518,0.607478320598602,0.862693786621094,0.213308542966843,0.458539962768555\n             ,0.87058699131012,0.227341398596764,0.436341762542725,0.488678455352783,-0.257274806499481,0.833668410778046\n             ,0.378649204969406,-0.51500403881073,0.769022524356842,0.678119361400604,-0.318360239267349,0.662420451641083\n             ,0.750837445259094,-0.0367836877703667,0.659461975097656,0.981309294700623,-0.093424528837204,-0.168237790465355\n             ,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.979115843772888,-0.186871707439423,-0.0800699964165688\n             ,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.979115843772888,-0.186871707439423,-0.0800699964165688\n             ,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.993362247943878,-0.0349664911627769,0.109584823250771\n             ,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.135898023843765,0.169247582554817,0.976159334182739\n             ,-0.0196372587233782,0.188453316688538,0.98188579082489,-0.00221070507541299,0.348074615001678,0.937464237213135\n             ,0.179719522595406,0.199890360236168,0.963195025920868,0.0426242314279079,0.260108649730682,0.964638113975525\n             ,-0.0196372587233782,0.188453316688538,0.98188579082489,0.135898023843765,0.169247582554817,0.976159334182739\n             ,0.166202440857887,0.306374847888947,0.937289237976074,0.333747088909149,-0.66472852230072,0.668392717838287\n             ,0.270446568727493,-0.724654376506805,0.633825421333313,0.235940769314766,-0.737428665161133,0.632875144481659\n             ,0.363939642906189,-0.646557629108429,0.670455992221832,0.189460039138794,-0.647004544734955,0.738572955131531\n             ,0.535029828548431,-0.536747872829437,0.652414619922638,0.333747088909149,-0.66472852230072,0.668392717838287\n             ,0.363939642906189,-0.646557629108429,0.670455992221832,0.286647915840149,-0.584438979625702,0.759120643138886\n             ,0.583943843841553,0.131935343146324,0.801001012325287,0.44965198636055,0.140096634626389,0.882148504257202,0.440964937210083\n             ,0.0207586232572794,0.897284269332886,0.596563339233398,-0.0223739240318537,0.8022540807724,0.364222437143326\n             ,-0.205845013260841,0.908278524875641,0.335370063781738,-0.00474565383046865,0.942074537277222,0.690708041191101\n             ,-0.0477886833250523,0.721552908420563,0.61975085735321,-0.35027813911438,0.702292025089264,0.00262317061424255\n             ,-0.184787794947624,0.982774972915649,0.017973817884922,0.0102047342807055,0.999786376953125,0.335370063781738\n             ,-0.00474565383046865,0.942074537277222,0.364222437143326,-0.205845013260841,0.908278524875641,0.958109974861145\n             ,-0.0344467237591743,0.284321486949921,0.969503223896027,0.0232477653771639,0.243973404169083,0.968910753726959\n             ,0.00811574142426252,0.247277289628983,0.955479383468628,-0.0429471768438816,0.291915565729141,0.930171310901642\n             ,0.112328357994556,0.34951913356781,0.966420710086823,0.0570991300046444,0.250540882349014,0.969503223896027\n             ,0.0232477653771639,0.243973404169083,0.958109974861145,-0.0344467237591743,0.284321486949921,-0.0301125477999449\n             ,-0.572418868541718,0.819408237934113,0.00911593530327082,-0.103348582983017,0.994603395462036,0.173270419239998\n             ,-0.100987397134304,0.979683041572571,0.0780740827322006,-0.57033497095108,0.817693412303925,0.173270419239998\n             ,-0.100987397134304,0.979683041572571,0.248945504426956,-0.117258243262768,0.961393058300018,0.047360323369503\n             ,-0.552981853485107,0.831846177577972,0.0780740827322006,-0.57033497095108,0.817693412303925,0.810256838798523\n             ,-0.430587977170944,0.397590130567551,0.893001258373261,-0.370285004377365,0.255807995796204,0.870028138160706\n             ,-0.439180076122284,0.223990917205811,0.770568072795868,-0.510897517204285,0.381062299013138,0.900704562664032\n             ,-0.383264392614365,0.204547420144081,0.903808772563934,-0.380508303642273,0.19581413269043,0.870028138160706\n             ,-0.439180076122284,0.223990917205811,0.893001258373261,-0.370285004377365,0.255807995796204,0.886316955089569\n             ,0.0816843584179878,0.455817818641663,0.89356255531311,-0.0812801718711853,0.441519498825073,0.959026873111725\n             ,-0.148191750049591,0.241467580199242,0.747522175312042,-0.213430538773537,0.629013538360596,0.770568072795868\n             ,-0.510897517204285,0.381062299013138,0.870028138160706,-0.439180076122284,0.223990917205811,0.89356255531311\n             ,-0.0812801718711853,0.441519498825073,0.897057175636292,-0.352101475000381,0.267044723033905,0.927076876163483\n             ,-0.29800683259964,0.227421119809151,0.875984609127045,-0.341396063566208,0.340734094381332,0.866469502449036\n             ,-0.361488610506058,0.344320476055145,0.956220626831055,-0.152332276105881,0.249873846769333,0.976429760456085\n             ,-0.14936164021492,0.155807659029961,0.976300895214081,-0.175593838095665,-0.126504495739937,0.970759510993958\n             ,-0.233238592743874,0.056795421987772,0.935715436935425,0.19026754796505,0.297043561935425,0.938729107379913\n             ,0.213661849498749,0.270437210798264,0.956782042980194,0.0500060208141804,0.286474347114563,0.964095413684845\n             ,-0.0113426633179188,0.265313804149628,0.945727825164795,-0.098081186413765,0.309804677963257,0.941311419010162\n             ,0.140633046627045,0.30684706568718,0.935715436935425,0.19026754796505,0.297043561935425,0.964095413684845,-0.0113426633179188\n             ,0.265313804149628,0.707773089408875,-0.177667543292046,0.683733463287354,0.820341229438782,-0.113342881202698\n             ,0.560529828071594,0.840808868408203,-0.369773417711258,0.395358175039291,0.820341229438782,-0.113342881202698\n             ,0.560529828071594,0.707773089408875,-0.177667543292046,0.683733463287354,0.649656236171722,-0.0531920231878757\n             ,0.758364915847778,0.855769634246826,-0.0943452939391136,0.508681952953339,-0.0512008517980576,-0.79354852437973\n             ,0.606349110603333,0.0527103617787361,-0.77695095539093,0.627350628376007,0.0997758805751801,-0.76704877614975\n             ,0.633782982826233,-0.0242012590169907,-0.832133829593658,0.554046511650085,-0.0352796316146851,-0.824001550674438\n             ,0.565488159656525,-0.0512008517980576,-0.79354852437973,0.606349110603333,-0.0242012590169907,-0.832133829593658\n             ,0.554046511650085,0.0416775047779083,-0.927180886268616,0.372288316488266,-0.0242012590169907,-0.832133829593658\n             ,0.554046511650085,0.0997758805751801,-0.76704877614975,0.633782982826233,0.406590580940247,-0.393400549888611\n             ,0.824572682380676,0.267092674970627,-0.484114617109299,0.833243370056152,-0.0242012590169907,-0.832133829593658\n             ,0.554046511650085,0.267092674970627,-0.484114617109299,0.833243370056152,0.209196627140045,-0.665287017822266\n             ,0.716679811477661,0.0416775047779083,-0.927180886268616,0.372288316488266,0.0587443448603153,-0.922947645187378\n             ,-0.380416542291641,0.0633370503783226,-0.944429814815521,-0.322553485631943,-0.0777209997177124,-0.922415435314178\n             ,-0.378297746181488,-0.0771657377481461,-0.907520055770874,-0.412859290838242,0.750837445259094,-0.0367836877703667\n             ,0.659461975097656,0.678119361400604,-0.318360239267349,0.662420451641083,0.680992484092712,-0.305005490779877\n             ,0.665748357772827,0.758135914802551,0.0851427242159843,0.646514236927032,0.80888158082962,-0.583779513835907\n             ,-0.0700862184166908,0.671372294425964,-0.724817991256714,-0.15459018945694,0.720593869686127,-0.637408852577209\n             ,-0.272863417863846,0.828101873397827,-0.525332391262054,-0.195635288953781,0.838521242141724,-0.431514054536819\n             ,-0.332682609558105,0.828101873397827,-0.525332391262054,-0.195635288953781,0.720593869686127,-0.637408852577209\n             ,-0.272863417863846,0.777718842029572,-0.48187255859375,-0.403673440217972,0.758135914802551,0.0851427242159843\n             ,0.646514236927032,0.680992484092712,-0.305005490779877,0.665748357772827,0.515636503696442,-0.41490975022316\n             ,0.749645829200745,0.443391680717468,-0.0999263972043991,0.89074045419693,0.989404678344727,-0.134779617190361\n             ,-0.0539703145623207,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.858178198337555,-0.416941344738007\n             ,-0.299483120441437,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.989404678344727,-0.134779617190361\n             ,-0.0539703145623207,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.993429064750671,-0.113890402019024\n             ,0.0113009223714471,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.371347606182098,0.418176740407944\n             ,0.82899284362793,0.535205781459808,0.472302228212357,0.700346648693085,0.512064158916473,0.485980182886124,0.708246827125549\n             ,0.328961253166199,0.182314842939377,0.92657744884491,0.314301073551178,0.320888847112656,0.893445670604706,0.371347606182098\n             ,0.418176740407944,0.82899284362793,0.0426242314279079,0.260108649730682,0.964638113975525,0.166202440857887\n             ,0.306374847888947,0.937289237976074,0.221095889806747,0.32488140463829,0.919548094272614,0.16256257891655,0.269552499055862\n             ,0.949165344238281,0.221095889806747,0.32488140463829,0.919548094272614,0.166202440857887,0.306374847888947,0.937289237976074\n             ,0.508710622787476,0.190386489033699,0.839622795581818,0.481910198926926,0.246677935123444,0.840780913829803\n             ,0.278009802103043,0.308251172304153,0.909775674343109,0.221095889806747,0.32488140463829,0.919548094272614,0.481910198926926\n             ,0.246677935123444,0.840780913829803,0.428730636835098,0.26745393872261,0.862935900688171,0.933138132095337,-0.0070160455070436\n             ,-0.359449595212936,0.967206120491028,-0.19463723897934,0.163182899355888,0.806693911552429,-0.123899839818478\n             ,0.577835381031036,0.806693911552429,-0.123899839818478,0.577835381031036,0.967206120491028,-0.19463723897934\n             ,0.163182899355888,0.851511597633362,-0.5011847615242,0.154083982110024,0.733202934265137,-0.122967794537544\n             ,0.668799161911011,0.99903529882431,-0.0258715786039829,-0.035483431071043,0.959231495857239,-0.07520642131567\n             ,-0.272431552410126,0.940188527107239,-0.340047240257263,0.0203306917101145,0.985052049160004,-0.113364338874817\n             ,0.129696041345596,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.989280700683594,-0.0284773074090481\n             ,-0.143222585320473,0.959231495857239,-0.07520642131567,-0.272431552410126,0.99903529882431,-0.0258715786039829\n             ,-0.035483431071043,0.965724050998688,-0.163102030754089,-0.201927617192268,0.899878442287445,-0.160217583179474\n             ,-0.405646592378616,0.959231495857239,-0.07520642131567,-0.272431552410126,0.989280700683594,-0.0284773074090481\n             ,-0.143222585320473,0.400608420372009,-0.480024576187134,0.780441761016846,0.570054233074188,-0.200027942657471\n             ,0.796885788440704,0.681784629821777,-0.285219341516495,0.673661351203918,0.656731724739075,-0.381447851657867\n             ,0.650538980960846,-0.0528050363063812,-0.813004612922668,0.579857885837555,0.00655650394037366,-0.135652124881744\n             ,0.990734815597534,0.387449771165848,-0.245748713612556,0.888532638549805,0.270428031682968,-0.84670215845108\n             ,0.458218395709991,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.997385084629059,0.0175571031868458\n             ,0.0701054036617279,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.989280700683594,-0.0284773074090481\n             ,-0.143222585320473,0.961935639381409,0.00657567568123341,0.273196935653687,0.964770019054413,-0.0907266810536385\n             ,0.246956452727318,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.997385084629059,0.0175571031868458\n             ,0.0701054036617279,0.949846565723419,-0.197867274284363,0.242157250642776,0.986409723758698,-0.164261862635612\n             ,-0.00372203509323299,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.964770019054413,-0.0907266810536385\n             ,0.246956452727318,0.965724050998688,-0.163102030754089,-0.201927617192268,0.989280700683594,-0.0284773074090481\n             ,-0.143222585320473,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.986409723758698,-0.164261862635612\n             ,-0.00372203509323299,0.44691988825798,-0.179234355688095,0.876434624195099,0.312136799097061,-0.241864830255508\n             ,0.918733894824982,0.288086891174316,-0.211062774062157,0.934054851531982,0.35059866309166,-0.137498125433922\n             ,0.926377296447754,0.288086891174316,-0.211062774062157,0.934054851531982,0.253216534852982,-0.212744683027267\n             ,0.943727254867554,0.194007128477097,-0.0432056449353695,0.98004823923111,0.35059866309166,-0.137498125433922\n             ,0.926377296447754,0.562851548194885,-0.792488932609558,0.23486053943634,0.386847853660584,-0.767014622688293\n             ,0.511895835399628,-0.032355971634388,-0.99692964553833,0.0713044255971909,0.637141883373261,-0.082910381257534\n             ,0.766274154186249,0.846625864505768,-0.12819692492485,0.516517341136932,0.855769634246826,-0.0943452939391136\n             ,0.508681952953339,0.649656236171722,-0.0531920231878757,0.758364915847778,0.903585314750671,0.234351992607117\n             ,0.35862609744072,0.98053389787674,0.00911934021860361,0.196137949824333,0.991146802902222,-0.0709943845868111\n             ,0.112195692956448,0.944392323493958,0.0710759162902832,0.321047365665436,0.98053389787674,0.00911934021860361\n             ,0.196137949824333,0.98186069726944,-0.153709232807159,0.111008986830711,0.990583539009094,-0.136551707983017\n             ,0.0098949521780014,0.991146802902222,-0.0709943845868111,0.112195692956448,0.927650630474091,-0.232570663094521\n             ,-0.292190253734589,0.867056906223297,-0.245093911886215,-0.433752596378326,0.899878442287445,-0.160217583179474\n             ,-0.405646592378616,0.965724050998688,-0.163102030754089,-0.201927617192268,0.847399115562439,-0.142815440893173\n             ,-0.511388719081879,0.899878442287445,-0.160217583179474,-0.405646592378616,0.867056906223297,-0.245093911886215\n             ,-0.433752596378326,0.863667845726013,-0.255664467811584,-0.434411734342575,0.705349028110504,-0.217919707298279\n             ,0.674532234668732,0.750554323196411,-0.229917243123055,0.619521021842957,0.688922643661499,-0.305572867393494\n             ,0.657275319099426,0.760169208049774,-0.346720576286316,0.549479365348816,0.688922643661499,-0.305572867393494\n             ,0.657275319099426,0.684517562389374,-0.439017295837402,0.581978976726532,0.742792665958405,-0.550313711166382\n             ,0.381331622600555,0.760169208049774,-0.346720576286316,0.549479365348816,0.378649204969406,-0.51500403881073\n             ,0.769022524356842,0.0903236120939255,-0.645915448665619,0.758046746253967,0.11539563536644,-0.528798937797546\n             ,0.840865969657898,0.400608420372009,-0.480024576187134,0.780441761016846,0.80888158082962,-0.583779513835907\n             ,-0.0700862184166908,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.645513415336609,-0.755210697650909\n             ,-0.113882429897785,0.671372294425964,-0.724817991256714,-0.15459018945694,0.821304857730865,-0.558016240596771\n             ,0.118643142282963,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.645513415336609,-0.755210697650909\n             ,-0.113882429897785,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.586100876331329,-0.804308116436005\n             ,-0.0978478193283081,0.430644094944,-0.871794462203979,-0.233495324850082,0.435357719659805,-0.872423410415649\n             ,-0.222128495573998,0.501666784286499,-0.849441289901733,-0.163646027445793,0.609544932842255,-0.541187822818756\n             ,0.579284608364105,0.629647791385651,-0.52997088432312,0.568044483661652,0.810256838798523,-0.430587977170944\n             ,0.397590130567551,0.770568072795868,-0.510897517204285,0.381062299013138,0.609544932842255,-0.541187822818756\n             ,0.579284608364105,0.770568072795868,-0.510897517204285,0.381062299013138,0.747522175312042,-0.213430538773537\n             ,0.629013538360596,0.584165692329407,-0.333255082368851,0.740061819553375,0.535205781459808,0.472302228212357\n             ,0.700346648693085,0.542900562286377,0.367345452308655,0.755192875862122,0.786049902439117,0.275353401899338\n             ,0.553449213504791,0.783647418022156,0.339152276515961,0.520454108715057,0.901179313659668,-0.204281270503998\n             ,0.382289171218872,0.896426856517792,-0.172908827662468,0.408070415258408,0.623109459877014,-0.205047786235809\n             ,0.754778146743774,0.645662844181061,-0.29273384809494,0.705284595489502,0.901179313659668,-0.204281270503998\n             ,0.382289171218872,0.645662844181061,-0.29273384809494,0.705284595489502,0.651034355163574,-0.303375482559204\n             ,0.695785582065582,0.887543320655823,-0.171314582228661,0.427689343690872,0.261966973543167,0.625043272972107\n             ,0.735319077968597,0.286056965589523,0.444956660270691,0.848637104034424,0.0513622872531414,0.468802571296692\n             ,0.881808400154114,0.0635503008961678,0.655404150485992,0.752600014209747,0.261966973543167,0.625043272972107\n             ,0.735319077968597,0.667004644870758,0.442110657691956,0.59970235824585,0.65963888168335,0.347626268863678,0.666357636451721\n             ,0.286056965589523,0.444956660270691,0.848637104034424,0.985209882259369,0.0516813509166241,0.163372397422791\n             ,0.985529184341431,0.0794467255473137,0.149734541773796,0.96662175655365,0.153387770056725,0.205218374729156\n             ,0.980856478214264,0.0318705588579178,0.192106366157532,0.966420710086823,0.0570991300046444,0.250540882349014\n             ,0.922278165817261,0.183078601956367,0.340419232845306,0.96662175655365,0.153387770056725,0.205218374729156,0.985529184341431\n             ,0.0794467255473137,0.149734541773796,0.85977029800415,0.296936422586441,0.415480256080627,0.885397613048553\n             ,0.234036833047867,0.401618927717209,0.96662175655365,0.153387770056725,0.205218374729156,0.922278165817261,0.183078601956367\n             ,0.340419232845306,0.870097935199738,0.102833516895771,0.482032060623169,0.980856478214264,0.0318705588579178\n             ,0.192106366157532,0.96662175655365,0.153387770056725,0.205218374729156,0.885397613048553,0.234036833047867,0.401618927717209\n             ,0.43553838133812,0.174102976918221,0.883172988891602,0.534866094589233,0.53300929069519,0.655606091022491,0.897598922252655\n             ,-0.0851877480745316,0.432503432035446,0.804244041442871,-0.107830874621868,0.584434807300568,0.43553838133812\n             ,0.174102976918221,0.883172988891602,0.102224595844746,0.498050421476364,0.861101567745209,0.534866094589233\n             ,0.53300929069519,0.655606091022491,0.43553838133812,0.174102976918221,0.883172988891602,0.64728707075119,-0.269912004470825\n             ,0.712858319282532,0.409548729658127,0.024171682074666,0.911967992782593,0.102224595844746,0.498050421476364\n             ,0.861101567745209,0.43553838133812,0.174102976918221,0.883172988891602,0.409548729658127,0.024171682074666,0.911967992782593\n             ,0.31933718919754,0.337111681699753,0.885652005672455,0.933462917804718,0.164250507950783,0.318855404853821,0.800925850868225\n             ,0.226523146033287,0.554260790348053,0.783647418022156,0.339152276515961,0.520454108715057,0.915872991085052\n             ,0.226020276546478,0.33180034160614,0.975037813186646,0.14565335214138,0.167589843273163,0.966257035732269,0.139943510293961\n             ,0.216247826814651,0.933462917804718,0.164250507950783,0.318855404853821,0.915872991085052,0.226020276546478\n             ,0.33180034160614,0.965288519859314,0.151292905211449,0.212904900312424,0.601098597049713,0.0911194980144501\n             ,0.793963313102722,0.583943843841553,0.131935343146324,0.801001012325287,0.596563339233398,-0.0223739240318537\n             ,0.8022540807724,0.655191659927368,0.0146637577563524,0.755320370197296,0.235940769314766,-0.737428665161133\n             ,0.632875144481659,0.270446568727493,-0.724654376506805,0.633825421333313,0.0997758805751801,-0.76704877614975\n             ,0.633782982826233,0.0527103617787361,-0.77695095539093,0.627350628376007,0.821304857730865,-0.558016240596771\n             ,0.118643142282963,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.93299263715744,-0.32493382692337\n             ,0.154734432697296,0.923712968826294,-0.295430272817612,0.243875607848167,0.80888158082962,-0.583779513835907\n             ,-0.0700862184166908,0.926652431488037,-0.373704701662064,0.0407436527311802,0.93299263715744,-0.32493382692337\n             ,0.154734432697296,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.96362441778183,-0.210319370031357\n             ,0.16490513086319,0.947748720645905,-0.180222257971764,0.263234436511993,0.93299263715744,-0.32493382692337,0.154734432697296\n             ,0.926652431488037,-0.373704701662064,0.0407436527311802,0.945337653160095,-0.174788698554039,0.275292009115219\n             ,0.923712968826294,-0.295430272817612,0.243875607848167,0.93299263715744,-0.32493382692337,0.154734432697296\n             ,0.947748720645905,-0.180222257971764,0.263234436511993,0.742792665958405,-0.550313711166382,0.381331622600555\n             ,0.657656788825989,-0.727221310138702,0.196562394499779,0.64417177438736,-0.7592693567276,0.0924808010458946\n             ,0.803535997867584,-0.553550720214844,0.2188870459795,0.639384806156158,-0.761013865470886,0.109749406576157\n             ,0.575045108795166,-0.818020403385162,0.0128742791712284,0.64417177438736,-0.7592693567276,0.0924808010458946\n             ,0.657656788825989,-0.727221310138702,0.196562394499779,0.537862658500671,-0.839294493198395,-0.0793002098798752\n             ,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.64417177438736,-0.7592693567276,0.0924808010458946\n             ,0.575045108795166,-0.818020403385162,0.0128742791712284,0.821304857730865,-0.558016240596771,0.118643142282963\n             ,0.803535997867584,-0.553550720214844,0.2188870459795,0.64417177438736,-0.7592693567276,0.0924808010458946,0.642173051834106\n             ,-0.76616907119751,-0.0244695600122213,0.560910940170288,-0.546258211135864,0.622077882289886,0.301303088665009\n             ,-0.716448962688446,0.629219651222229,0.275670319795609,-0.347558110952377,0.896219432353973,0.432139188051224\n             ,-0.378973364830017,0.818312227725983,0.275670319795609,-0.347558110952377,0.896219432353973,0.254473268985748\n             ,-0.0765668898820877,0.964044034481049,0.416703939437866,-0.0255245417356491,0.908683836460114,0.432139188051224\n             ,-0.378973364830017,0.818312227725983,0.981637835502625,-0.188382476568222,0.0299864616245031,0.946312725543976\n             ,-0.198392629623413,-0.255210876464844,0.976300895214081,-0.175593838095665,-0.126504495739937,0.976429760456085\n             ,-0.14936164021492,0.155807659029961,0.981637835502625,-0.188382476568222,0.0299864616245031,0.0486728809773922\n             ,-0.68095201253891,-0.730708718299866,0.766620635986328,-0.390746057033539,-0.509519696235657,0.946312725543976\n             ,-0.198392629623413,-0.255210876464844,0.688574373722076,-0.431850165128708,0.58255535364151,0.731416404247284\n             ,-0.417625606060028,0.539090871810913,0.640114009380341,-0.360243141651154,0.678585946559906,0.586388051509857\n             ,-0.415063470602036,0.695608615875244,0.515636503696442,-0.41490975022316,0.749645829200745,0.680992484092712\n             ,-0.305005490779877,0.665748357772827,0.629800915718079,-0.358788877725601,0.68892765045166,0.550090253353119\n             ,-0.357467710971832,0.754730105400085,0.613220632076263,-0.373373091220856,0.696098387241364,0.523068964481354\n             ,-0.400331109762192,0.752418637275696,0.609544932842255,-0.541187822818756,0.579284608364105,0.584165692329407\n             ,-0.333255082368851,0.740061819553375,0.510522961616516,-0.392942905426025,0.764828205108643,0.504154682159424\n             ,-0.548682808876038,0.666914701461792,0.609544932842255,-0.541187822818756,0.579284608364105,0.504154682159424\n             ,-0.548682808876038,0.666914701461792,0.572291314601898,-0.52212518453598,0.632351100444794,0.629647791385651\n             ,-0.52997088432312,0.568044483661652,0.731416404247284,-0.417625606060028,0.539090871810913,0.73811411857605\n             ,-0.426667273044586,0.522630453109741,0.831848502159119,-0.322033703327179,0.452020287513733,0.842584788799286\n             ,-0.21356026828289,0.494411617517471,0.640114009380341,-0.360243141651154,0.678585946559906,0.731416404247284\n             ,-0.417625606060028,0.539090871810913,0.842584788799286,-0.21356026828289,0.494411617517471,0.770362615585327\n             ,0.0158082563430071,0.63740998506546,0.536214470863342,0.394264131784439,0.746344327926636,0.595219552516937\n             ,0.51872980594635,0.613704323768616,0.267601639032364,0.585238754749298,0.765431225299835,0.253624588251114,0.428919792175293\n             ,0.867007732391357,0.267601639032364,0.585238754749298,0.765431225299835,0.595219552516937,0.51872980594635,0.613704323768616\n             ,0.688724040985107,0.428849041461945,0.584591865539551,0.279262810945511,0.544022977352142,0.791234016418457\n             ,0.0581676289439201,0.571192860603333,0.818752288818359,0.0604556538164616,0.606487095355988,0.792791604995728\n             ,0.267601639032364,0.585238754749298,0.765431225299835,0.279262810945511,0.544022977352142,0.791234016418457\n             ,0.0497331917285919,0.445011228322983,0.894142985343933,0.253624588251114,0.428919792175293,0.867007732391357\n             ,0.267601639032364,0.585238754749298,0.765431225299835,0.0604556538164616,0.606487095355988,0.792791604995728\n             ,0.786049902439117,0.275353401899338,0.553449213504791,0.912213087081909,0.0526493825018406,0.406319200992584\n             ,0.915872991085052,0.226020276546478,0.33180034160614,0.783647418022156,0.339152276515961,0.520454108715057,0.926979184150696\n             ,-0.0986248403787613,0.36191537976265,0.965288519859314,0.151292905211449,0.212904900312424,0.915872991085052\n             ,0.226020276546478,0.33180034160614,0.912213087081909,0.0526493825018406,0.406319200992584,0.289565563201904\n             ,-0.362892955541611,0.885697722434998,0.0666661337018013,-0.827535629272461,0.557440996170044,0.198447287082672\n             ,-0.827921032905579,0.524562180042267,0.173318073153496,-0.274096310138702,0.945955634117126,0.198447287082672\n             ,-0.827921032905579,0.524562180042267,0.0666661337018013,-0.827535629272461,0.557440996170044,-0.021647073328495\n             ,-0.960853159427643,0.276211261749268,-0.036917757242918,-0.99125212430954,0.126713573932648,0.168408244848251\n             ,-0.974918007850647,0.145511314272881,-0.199777901172638,-0.484420716762543,0.851719081401825,-0.0233143605291843\n             ,-0.495335191488266,0.868389010429382,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.136760428547859\n             ,-0.195085763931274,0.971204459667206,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.199777901172638\n             ,-0.484420716762543,0.851719081401825,-0.136760428547859,-0.195085763931274,0.971204459667206,-0.0214409474283457\n             ,-0.17113696038723,0.985013961791992,0.533053755760193,0.0411353260278702,0.845080852508545,0.437306433916092\n             ,-0.371932566165924,0.818797469139099,0.640114009380341,-0.360243141651154,0.678585946559906,0.770362615585327\n             ,0.0158082563430071,0.63740998506546,0.754335284233093,-0.305042564868927,0.581315159797668,0.771643459796906\n             ,-0.219248831272125,0.597073137760162,0.861247181892395,-0.192313641309738,0.470392137765884,0.838417947292328\n             ,-0.244426995515823,0.487145572900772,0.771643459796906,-0.219248831272125,0.597073137760162,0.754335284233093\n             ,-0.305042564868927,0.581315159797668,0.71972918510437,-0.325454443693161,0.613244891166687,0.677804887294769\n             ,-0.293700158596039,0.674033224582672,0.510522961616516,-0.392942905426025,0.764828205108643,0.494429767131805\n             ,-0.0934201404452324,0.864182770252228,0.32480525970459,-0.177078545093536,0.929055869579315,0.385615348815918\n             ,-0.420324206352234,0.821357607841492,0.494429767131805,-0.0934201404452324,0.864182770252228,0.510522961616516\n             ,-0.392942905426025,0.764828205108643,0.584165692329407,-0.333255082368851,0.740061819553375,0.550924062728882\n             ,0.0100475419312716,0.834494948387146,0.254473268985748,-0.0765668898820877,0.964044034481049,0.275670319795609\n             ,-0.347558110952377,0.896219432353973,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.0214409474283457\n             ,-0.17113696038723,0.985013961791992,0.301303088665009,-0.716448962688446,0.629219651222229,-0.00210810895077884\n             ,-0.784596800804138,0.620002746582031,-0.0337620861828327,-0.434601843357086,0.899989664554596,0.275670319795609\n             ,-0.347558110952377,0.896219432353973,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.199777901172638\n             ,-0.484420716762543,0.851719081401825,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.00210810895077884\n             ,-0.784596800804138,0.620002746582031,0.949343860149384,0.194382473826408,0.246904209256172,0.952320516109467\n             ,0.113910689949989,0.283037096261978,0.935723841190338,0.105225577950478,0.336672723293304,0.960835516452789\n             ,0.146968066692352,0.234937101602554,0.952320516109467,0.113910689949989,0.283037096261978,0.937154471874237\n             ,-0.0475939512252808,0.345653474330902,0.916476547718048,0.0582267269492149,0.395828783512115,0.935723841190338\n             ,0.105225577950478,0.336672723293304,0.954735457897186,-0.0869630351662636,0.284460365772247,0.976793885231018\n             ,-0.16974413394928,0.13061648607254,0.830796539783478,-0.141607835888863,0.538260519504547,0.797767400741577\n             ,-0.104994267225266,0.593753576278687,0.976793885231018,-0.16974413394928,0.13061648607254,0.984028935432434\n             ,-0.172777280211449,0.042837880551815,0.846625864505768,-0.12819692492485,0.516517341136932,0.830796539783478\n             ,-0.141607835888863,0.538260519504547,0.792236804962158,-0.0960670188069344,0.602604329586029,0.702580511569977\n             ,0.00276018492877483,0.711598932743073,0.683284997940063,0.154697299003601,0.713575720787048,0.756793797016144\n             ,-0.0805434510111809,0.64867240190506,0.0903236120939255,-0.645915448665619,0.758046746253967,0.047360323369503\n             ,-0.552981853485107,0.831846177577972,0.11539563536644,-0.528798937797546,0.840865969657898,-0.0214409474283457\n             ,-0.17113696038723,0.985013961791992,-0.0292664598673582,0.127957031130791,0.991347789764404,0.182319968938828\n             ,0.114501133561134,0.976549506187439,0.254473268985748,-0.0765668898820877,0.964044034481049,0.908188223838806\n             ,0.15894940495491,0.387206882238388,0.874416053295136,-0.00546242296695709,0.485146045684814,0.787108600139618\n             ,0.00810690317302942,0.616761207580566,0.864675521850586,0.193993464112282,0.46336030960083,0.908188223838806\n             ,0.15894940495491,0.387206882238388,0.787108600139618,0.00810690317302942,0.616761207580566,0.793840944766998\n             ,0.179479137063026,0.581036806106567,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.820341229438782\n             ,-0.113342881202698,0.560529828071594,0.855769634246826,-0.0943452939391136,0.508681952953339,0.990714609622955\n             ,-0.135222300887108,-0.0141245061531663,0.855769634246826,-0.0943452939391136,0.508681952953339,0.846625864505768\n             ,-0.12819692492485,0.516517341136932,0.984028935432434,-0.172777280211449,0.042837880551815,0.990714609622955\n             ,-0.135222300887108,-0.0141245061531663,0.65490597486496,0.140991285443306,0.742441654205322,0.736574053764343\n             ,-0.0243753399699926,0.675917506217957,0.46117314696312,-0.0281441453844309,0.886863708496094,0.313594281673431\n             ,0.139182701706886,0.939301192760468,0.736574053764343,-0.0243753399699926,0.675917506217957,0.797767400741577\n             ,-0.104994267225266,0.593753576278687,0.542096614837646,-0.0831166654825211,0.836195468902588,0.46117314696312\n             ,-0.0281441453844309,0.886863708496094,0.0600041374564171,-0.192453533411026,0.979469835758209,0.191416949033737\n             ,-0.0921172648668289,0.977176547050476,0.182319968938828,0.114501133561134,0.976549506187439,-0.0292664598673582\n             ,0.127957031130791,0.991347789764404,0.85977029800415,0.296936422586441,0.415480256080627,0.821655750274658,0.296962469816208\n             ,0.486513197422028,0.750506460666656,0.343903452157974,0.564331829547882,0.720846891403198,0.393656641244888\n             ,0.570450901985168,0.773433268070221,0.347118884325027,0.53038614988327,0.750506460666656,0.343903452157974,0.564331829547882\n             ,0.821655750274658,0.296962469816208,0.486513197422028,0.410660326480865,0.0589907094836235,0.909878134727478\n             ,0.33416548371315,0.26105335354805,0.905640423297882,0.55342048406601,0.140735372900963,0.820925891399384,0.503296196460724\n             ,0.0546823143959045,0.862382054328918,0.400608420372009,-0.480024576187134,0.780441761016846,0.656731724739075\n             ,-0.381447851657867,0.650538980960846,0.678119361400604,-0.318360239267349,0.662420451641083,0.378649204969406\n             ,-0.51500403881073,0.769022524356842,0.0272070206701756,0.178279355168343,0.983603715896606,0.0931223928928375\n             ,0.201938465237617,0.97496110200882,0.0304032936692238,0.174695551395416,0.984152972698212,0.0284836571663618\n             ,0.148866042494774,0.988447070121765,0.0931223928928375,0.201938465237617,0.97496110200882,0.163330301642418\n             ,0.241669088602066,0.956514120101929,0.0344220362603664,0.22930283844471,0.972746253013611,0.0304032936692238\n             ,0.174695551395416,0.984152972698212,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.978873014450073\n             ,-0.188474208116531,-0.0792786628007889,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.996031820774078\n             ,-0.0883952453732491,0.0103418976068497,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.984028935432434\n             ,-0.172777280211449,0.042837880551815,0.990583539009094,-0.136551707983017,0.0098949521780014,0.996031820774078\n             ,-0.0883952453732491,0.0103418976068497,0.921219646930695,-0.0589233264327049,0.384554862976074,0.727879226207733\n             ,-0.243267610669136,0.641102731227875,0.710833370685577,-0.195758193731308,0.675569832324982,0.909473538398743\n             ,-0.0684049502015114,0.410095930099487,0.651034355163574,-0.303375482559204,0.695785582065582,0.645662844181061\n             ,-0.29273384809494,0.705284595489502,0.710833370685577,-0.195758193731308,0.675569832324982,0.727879226207733\n             ,-0.243267610669136,0.641102731227875,0.623109459877014,-0.205047786235809,0.754778146743774,0.705142974853516\n             ,-0.157100901007652,0.691442430019379,0.710833370685577,-0.195758193731308,0.675569832324982,0.645662844181061\n             ,-0.29273384809494,0.705284595489502,0.9190753698349,-0.11298330873251,0.377538323402405,0.909473538398743,-0.0684049502015114\n             ,0.410095930099487,0.710833370685577,-0.195758193731308,0.675569832324982,0.705142974853516,-0.157100901007652\n             ,0.691442430019379,0.886316955089569,0.0816843584179878,0.455817818641663,0.841468989849091,0.227338507771492\n             ,0.490150064229965,0.813554108142853,0.0718955099582672,0.577027499675751,0.771234273910522,0.123447246849537\n             ,0.62446653842926,0.813554108142853,0.0718955099582672,0.577027499675751,0.832460403442383,-0.0762069076299667\n             ,0.548818945884705,0.825742661952972,-0.0501102656126022,0.561816692352295,0.832460403442383,-0.0762069076299667\n             ,0.548818945884705,0.813554108142853,0.0718955099582672,0.577027499675751,0.841468989849091,0.227338507771492\n             ,0.490150064229965,0.853365004062653,0.0768043100833893,0.515625178813934,0.813554108142853,0.0718955099582672\n             ,0.577027499675751,0.825742661952972,-0.0501102656126022,0.561816692352295,0.802095234394073,-0.0203569829463959\n             ,0.596849083900452,0.771234273910522,0.123447246849537,0.62446653842926,0.85977029800415,0.296936422586441,0.415480256080627\n             ,0.720846891403198,0.393656641244888,0.570450901985168,0.698984086513519,0.246289730072021,0.671388566493988\n             ,0.885397613048553,0.234036833047867,0.401618927717209,0.698984086513519,0.246289730072021,0.671388566493988\n             ,0.642289221286774,0.115071445703506,0.757775127887726,0.870097935199738,0.102833516895771,0.482032060623169\n             ,0.885397613048553,0.234036833047867,0.401618927717209,0.115422785282135,-0.952069759368896,0.283268004655838\n             ,0.164180904626846,-0.958690702915192,0.232285901904106,0.171536713838577,-0.946371257305145,0.273782074451447\n             ,0.0454688854515553,-0.765503704547882,0.641822934150696,0.225757539272308,-0.896350860595703,0.381560862064362\n             ,0.164180904626846,-0.958690702915192,0.232285901904106,0.115422785282135,-0.952069759368896,0.283268004655838\n             ,0.194313436746597,-0.80370157957077,0.562410891056061,0.72280216217041,-0.137790024280548,0.677178680896759\n             ,0.76386970281601,-0.0586191527545452,0.642702758312225,0.628606140613556,-0.0929744690656662,0.77214640378952\n             ,0.605580151081085,-0.127637818455696,0.785481572151184,0.826119303703308,-0.120154865086079,0.550535798072815\n             ,0.85496574640274,-0.0235987044870853,0.518147349357605,0.76386970281601,-0.0586191527545452,0.642702758312225\n             ,0.72280216217041,-0.137790024280548,0.677178680896759,0.900704562664032,-0.383264392614365,0.204547420144081\n             ,0.916550815105438,-0.369929283857346,0.151943743228912,0.933318138122559,-0.313118785619736,0.175709679722786\n             ,0.903808772563934,-0.380508303642273,0.19581413269043,0.934174954891205,-0.332788705825806,0.128719761967659\n             ,0.926874995231628,-0.321304202079773,0.194078236818314,0.933318138122559,-0.313118785619736,0.175709679722786\n             ,0.916550815105438,-0.369929283857346,0.151943743228912,0.918524086475372,-0.00282709067687392,0.395354956388474\n             ,0.96756237745285,-0.0955442041158676,0.233868315815926,0.933318138122559,-0.313118785619736,0.175709679722786\n             ,0.926874995231628,-0.321304202079773,0.194078236818314,0.629800915718079,-0.358788877725601,0.68892765045166\n             ,0.550090253353119,-0.357467710971832,0.754730105400085,0.523068964481354,-0.400331109762192,0.752418637275696\n             ,0.515636503696442,-0.41490975022316,0.749645829200745,0.226486593484879,0.604172766208649,-0.76398891210556\n             ,0.853913903236389,0.342162936925888,-0.392116755247116,0.76568216085434,0.0699278339743614,-0.639406681060791\n             ,0.152718812227249,0.346232503652573,-0.925634920597076,0.962022840976715,-0.137412339448929,0.235859960317612\n             ,0.952154934406281,-0.291899025440216,0.0905317366123199,0.76568216085434,0.0699278339743614,-0.639406681060791\n             ,0.853913903236389,0.342162936925888,-0.392116755247116,0.76568216085434,0.0699278339743614,-0.639406681060791\n             ,0.952154934406281,-0.291899025440216,0.0905317366123199,0.888055205345154,-0.428246527910233,-0.167221024632454\n             ,0.658207952976227,-0.19222703576088,-0.727881193161011,0.152718812227249,0.346232503652573,-0.925634920597076\n             ,0.76568216085434,0.0699278339743614,-0.639406681060791,0.658207952976227,-0.19222703576088,-0.727881193161011\n             ,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.941693007946014,-0.139167279005051,-0.30634418129921\n             ,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.658207952976227,-0.19222703576088,-0.727881193161011\n             ,0.888055205345154,-0.428246527910233,-0.167221024632454,0.961935639381409,0.00657567568123341,0.273196935653687\n             ,0.997385084629059,0.0175571031868458,0.0701054036617279,0.987097263336182,-0.0312144737690687,0.157049849629402\n             ,0.947793483734131,-0.0109208915382624,0.318697780370712,0.997004151344299,-0.0145358238369226,-0.075969785451889\n             ,0.995871722698212,-0.0808055028319359,0.041352104395628,0.987097263336182,-0.0312144737690687,0.157049849629402\n             ,0.997385084629059,0.0175571031868458,0.0701054036617279,0.807750403881073,-0.224028185009956,0.545298755168915\n             ,0.94478839635849,-0.0280621573328972,0.326477229595184,0.949546575546265,-0.188553437590599,0.250617027282715\n             ,0.895655035972595,-0.253568202257156,0.365383625030518,0.691827952861786,-0.359834015369415,0.626013994216919\n             ,0.807750403881073,-0.224028185009956,0.545298755168915,0.895655035972595,-0.253568202257156,0.365383625030518\n             ,0.780404269695282,-0.392066359519959,0.487086415290833,0.651034355163574,-0.303375482559204,0.695785582065582\n             ,0.727879226207733,-0.243267610669136,0.641102731227875,0.807750403881073,-0.224028185009956,0.545298755168915\n             ,0.691827952861786,-0.359834015369415,0.626013994216919,0.921219646930695,-0.0589233264327049,0.384554862976074\n             ,0.94478839635849,-0.0280621573328972,0.326477229595184,0.807750403881073,-0.224028185009956,0.545298755168915\n             ,0.727879226207733,-0.243267610669136,0.641102731227875,0.511712968349457,-0.26713839173317,0.816570222377777\n             ,0.630171060562134,-0.220097869634628,0.744608163833618,0.663574039936066,-0.114788979291916,0.739251613616943\n             ,0.477897197008133,-0.208041027188301,0.853424370288849,0.663574039936066,-0.114788979291916,0.739251613616943\n             ,0.630171060562134,-0.220097869634628,0.744608163833618,0.662703216075897,-0.235535204410553,0.710878074169159\n             ,0.585816919803619,-0.176041945815086,0.791092753410339,0.443824082612991,-0.204101487994194,0.872561037540436\n             ,0.477897197008133,-0.208041027188301,0.853424370288849,0.663574039936066,-0.114788979291916,0.739251613616943\n             ,0.655753970146179,-0.0819050073623657,0.750518679618835,0.634909212589264,-0.137729376554489,0.760211110115051\n             ,0.705349028110504,-0.217919707298279,0.674532234668732,0.899602174758911,-0.197590529918671,0.389453411102295\n             ,0.844319820404053,-0.143771529197693,0.51619154214859,0.899602174758911,-0.197590529918671,0.389453411102295\n             ,0.945337653160095,-0.174788698554039,0.275292009115219,0.941718637943268,-0.180898189544678,0.283622801303864\n             ,0.844319820404053,-0.143771529197693,0.51619154214859,0.993362247943878,-0.0349664911627769,0.109584823250771\n             ,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.996031820774078,-0.0883952453732491,0.0103418976068497\n             ,0.98517507314682,-0.0804919600486755,0.151496455073357,0.996031820774078,-0.0883952453732491,0.0103418976068497\n             ,0.990583539009094,-0.136551707983017,0.0098949521780014,0.98186069726944,-0.153709232807159,0.111008986830711\n             ,0.98517507314682,-0.0804919600486755,0.151496455073357,0.663574039936066,-0.114788979291916,0.739251613616943\n             ,0.585816919803619,-0.176041945815086,0.791092753410339,0.501314342021942,-0.180266559123993,0.846278846263886\n             ,0.655753970146179,-0.0819050073623657,0.750518679618835,0.838521242141724,-0.431514054536819,-0.332682609558105\n             ,0.882519364356995,-0.329183042049408,-0.335854291915894,0.918742716312408,-0.362510144710541,-0.15651923418045\n             ,0.828101873397827,-0.525332391262054,-0.195635288953781,0.927650630474091,-0.232570663094521,-0.292190253734589\n             ,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.918742716312408,-0.362510144710541,-0.15651923418045\n             ,0.882519364356995,-0.329183042049408,-0.335854291915894,0.96362441778183,-0.210319370031357,0.16490513086319\n             ,0.926652431488037,-0.373704701662064,0.0407436527311802,0.918742716312408,-0.362510144710541,-0.15651923418045\n             ,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.80888158082962,-0.583779513835907,-0.0700862184166908\n             ,0.828101873397827,-0.525332391262054,-0.195635288953781,0.918742716312408,-0.362510144710541,-0.15651923418045\n             ,0.926652431488037,-0.373704701662064,0.0407436527311802,-0.147914990782738,0.17213037610054,0.973905682563782\n             ,0.100095093250275,0.182193845510483,0.978154599666595,-0.0552638620138168,0.347488284111023,0.936054348945618\n             ,0.00455546798184514,0.298394352197647,0.954431772232056,-0.147914990782738,0.17213037610054,0.973905682563782\n             ,-0.220686122775078,-0.040834903717041,0.974489688873291,0.106603257358074,0.0133492052555084,0.994212031364441\n             ,0.100095093250275,0.182193845510483,0.978154599666595,0.970759510993958,-0.233238592743874,0.056795421987772\n             ,0.976300895214081,-0.175593838095665,-0.126504495739937,0.847399115562439,-0.142815440893173,-0.511388719081879\n             ,0.863667845726013,-0.255664467811584,-0.434411734342575,-0.0528050363063812,-0.813004612922668,0.579857885837555\n             ,0.270428031682968,-0.84670215845108,0.458218395709991,0.0610353648662567,-0.966653764247894,-0.248707070946693\n             ,-0.0787478685379028,-0.96028345823288,-0.26768359541893,0.900704562664032,-0.383264392614365,0.204547420144081\n             ,0.893001258373261,-0.370285004377365,0.255807995796204,0.895655035972595,-0.253568202257156,0.365383625030518\n             ,0.949546575546265,-0.188553437590599,0.250617027282715,0.810256838798523,-0.430587977170944,0.397590130567551\n             ,0.780404269695282,-0.392066359519959,0.487086415290833,0.895655035972595,-0.253568202257156,0.365383625030518\n             ,0.893001258373261,-0.370285004377365,0.255807995796204,-0.0776756703853607,-0.921032607555389,-0.381661415100098\n             ,-0.0787478685379028,-0.96028345823288,-0.26768359541893,0.0610353648662567,-0.966653764247894,-0.248707070946693\n             ,0.0540894381701946,-0.932692110538483,-0.35659471154213,-0.0776756703853607,-0.921032607555389,-0.381661415100098\n             ,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.0587443448603153,-0.922947645187378,-0.380416542291641\n             ,-0.0771657377481461,-0.907520055770874,-0.412859290838242,0.944392323493958,0.0710759162902832,0.321047365665436\n             ,0.991146802902222,-0.0709943845868111,0.112195692956448,0.976793885231018,-0.16974413394928,0.13061648607254\n             ,0.954735457897186,-0.0869630351662636,0.284460365772247,0.991146802902222,-0.0709943845868111,0.112195692956448\n             ,0.990583539009094,-0.136551707983017,0.0098949521780014,0.984028935432434,-0.172777280211449,0.042837880551815\n             ,0.976793885231018,-0.16974413394928,0.13061648607254,-0.00140566960908473,-0.234566405415535,0.97209906578064\n             ,0.312136799097061,-0.241864830255508,0.918733894824982,0.359973400831223,-0.258122891187668,0.896544337272644\n             ,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.359973400831223,-0.258122891187668,0.896544337272644\n             ,0.402891218662262,-0.177310451865196,0.897908508777618,0.00449910387396812,-0.161412835121155,0.986876726150513\n             ,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.115422785282135,-0.952069759368896,0.283268004655838\n             ,0.0454688854515553,-0.765503704547882,0.641822934150696,0.00267285062000155,-0.590106904506683,0.807320654392242\n             ,-0.0352796316146851,-0.824001550674438,0.565488159656525,0.0416775047779083,-0.927180886268616,0.372288316488266\n             ,0.949846565723419,-0.197867274284363,0.242157250642776,0.96362441778183,-0.210319370031357,0.16490513086319\n             ,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.986409723758698,-0.164261862635612,-0.00372203509323299\n             ,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.927650630474091,-0.232570663094521,-0.292190253734589\n             ,0.965724050998688,-0.163102030754089,-0.201927617192268,0.986409723758698,-0.164261862635612,-0.00372203509323299\n             ,0.00449910387396812,-0.161412835121155,0.986876726150513,0.402891218662262,-0.177310451865196,0.897908508777618\n             ,0.414358675479889,-0.126704558730125,0.901250720024109,0.0111285699531436,-0.0777815505862236,0.9969083070755\n             ,0.414358675479889,-0.126704558730125,0.901250720024109,0.387449771165848,-0.245748713612556,0.888532638549805\n             ,0.00655650394037366,-0.135652124881744,0.990734815597534,0.0111285699531436,-0.0777815505862236,0.9969083070755\n             ,0.928761661052704,-0.0844941884279251,0.360918909311295,0.993277549743652,-0.10496261715889,0.0488112159073353\n             ,0.985052049160004,-0.113364338874817,0.129696041345596,0.90520966053009,-0.162895515561104,0.392505496740341\n             ,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.99903529882431,-0.0258715786039829,-0.035483431071043\n             ,0.985052049160004,-0.113364338874817,0.129696041345596,0.993277549743652,-0.10496261715889,0.0488112159073353\n             ,0.940188527107239,-0.340047240257263,0.0203306917101145,0.90520966053009,-0.162895515561104,0.392505496740341\n             ,0.985052049160004,-0.113364338874817,0.129696041345596,-0.529633462429047,-0.0744152963161469,-0.844956040382385\n             ,-0.426414966583252,0.120833218097687,-0.896420419216156,-0.572411417961121,0.114080429077148,-0.81199187040329\n             ,-0.568153619766235,-0.0387567244470119,-0.822009384632111,-0.426414966583252,0.120833218097687,-0.896420419216156\n             ,-0.421522259712219,0.257120847702026,-0.869602143764496,-0.593829154968262,0.197740450501442,-0.77991384267807\n             ,-0.572411417961121,0.114080429077148,-0.81199187040329,0.677804887294769,-0.293700158596039,0.674033224582672\n             ,0.71972918510437,-0.325454443693161,0.613244891166687,0.659502923488617,-0.421348959207535,0.622511804103851\n             ,0.598259091377258,-0.415802270174026,0.684977769851685,0.918524086475372,-0.00282709067687392,0.395354956388474\n             ,0.952345132827759,-0.057124700397253,0.299625486135483,0.935723841190338,0.105225577950478,0.336672723293304\n             ,0.916476547718048,0.0582267269492149,0.395828783512115,0.952345132827759,-0.057124700397253,0.299625486135483\n             ,0.987058341503143,-0.0681737512350082,0.145148620009422,0.960835516452789,0.146968066692352,0.234937101602554\n             ,0.935723841190338,0.105225577950478,0.336672723293304,0.94987964630127,-0.0038351418916136,0.312592297792435\n             ,0.910945057868958,-0.218233183026314,0.35007631778717,0.980899035930634,0.0846881344914436,0.175114318728447\n             ,0.96669465303421,0.168093785643578,0.192991986870766,0.928288996219635,-0.0903030559420586,0.360728323459625\n             ,0.974559843540192,0.0402764715254307,0.220478907227516,0.980899035930634,0.0846881344914436,0.175114318728447\n             ,0.910945057868958,-0.218233183026314,0.35007631778717,0.949343860149384,0.194382473826408,0.246904209256172\n             ,0.953015685081482,0.205261945724487,0.222774803638458,0.972302615642548,0.043654702603817,0.229612305760384\n             ,0.94987964630127,-0.0038351418916136,0.312592297792435,0.953015685081482,0.205261945724487,0.222774803638458\n             ,0.970540165901184,0.124821022152901,0.206086173653603,0.966708958148956,-0.002308584516868,0.255868047475815\n             ,0.972302615642548,0.043654702603817,0.229612305760384,0.970540165901184,0.124821022152901,0.206086173653603\n             ,0.953015685081482,0.205261945724487,0.222774803638458,0.974692046642303,0.140635088086128,0.17377345263958,0.974692046642303\n             ,0.140635088086128,0.17377345263958,0.953015685081482,0.205261945724487,0.222774803638458,0.949343860149384,0.194382473826408\n             ,0.246904209256172,0.960835516452789,0.146968066692352,0.234937101602554,0.937154471874237,-0.0475939512252808\n             ,0.345653474330902,0.952320516109467,0.113910689949989,0.283037096261978,0.96669465303421,0.168093785643578,0.192991986870766\n             ,0.980852127075195,0.00218713283538818,0.194741636514664,0.952320516109467,0.113910689949989,0.283037096261978\n             ,0.949343860149384,0.194382473826408,0.246904209256172,0.94987964630127,-0.0038351418916136,0.312592297792435\n             ,0.96669465303421,0.168093785643578,0.192991986870766,-0.875516295433044,0.353666007518768,-0.329228729009628\n             ,-0.560936093330383,0.519313037395477,-0.644720613956451,-0.598032653331757,0.367280632257462,-0.712363600730896\n             ,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.534112751483917,0.714107155799866,-0.452520221471787\n             ,-0.560936093330383,0.519313037395477,-0.644720613956451,-0.875516295433044,0.353666007518768,-0.329228729009628\n             ,0.420062124729156,-0.858003616333008,0.295596987009048,0.562851548194885,-0.792488932609558,0.23486053943634\n             ,-0.032355971634388,-0.99692964553833,0.0713044255971909,-0.036917757242918,-0.99125212430954,0.126713573932648\n             ,0.420062124729156,-0.858003616333008,0.295596987009048,-0.036917757242918,-0.99125212430954,0.126713573932648\n             ,-0.021647073328495,-0.960853159427643,0.276211261749268,0.176858365535736,-0.897578120231628,0.403824985027313\n             ,0.838521242141724,-0.431514054536819,-0.332682609558105,0.777718842029572,-0.48187255859375,-0.403673440217972\n             ,0.82772159576416,-0.350066870450974,-0.438554704189301,0.882519364356995,-0.329183042049408,-0.335854291915894\n             ,0.82772159576416,-0.350066870450974,-0.438554704189301,0.777718842029572,-0.48187255859375,-0.403673440217972\n             ,0.756419658660889,-0.554076313972473,-0.347604215145111,0.836000919342041,-0.399822771549225,-0.375824630260468\n             ,0.863667845726013,-0.255664467811584,-0.434411734342575,0.867056906223297,-0.245093911886215,-0.433752596378326\n             ,0.82772159576416,-0.350066870450974,-0.438554704189301,0.836000919342041,-0.399822771549225,-0.375824630260468\n             ,0.927650630474091,-0.232570663094521,-0.292190253734589,0.882519364356995,-0.329183042049408,-0.335854291915894\n             ,0.82772159576416,-0.350066870450974,-0.438554704189301,0.867056906223297,-0.245093911886215,-0.433752596378326\n             ,0.840808868408203,-0.369773417711258,0.395358175039291,0.920036554336548,-0.30953249335289,0.240254893898964\n             ,0.836000919342041,-0.399822771549225,-0.375824630260468,0.756419658660889,-0.554076313972473,-0.347604215145111\n             ,0.970759510993958,-0.233238592743874,0.056795421987772,0.863667845726013,-0.255664467811584,-0.434411734342575\n             ,0.836000919342041,-0.399822771549225,-0.375824630260468,0.920036554336548,-0.30953249335289,0.240254893898964\n             ,0.578185617923737,-0.0845057815313339,0.811517179012299,0.345462441444397,-0.298967152833939,0.889536023139954\n             ,0.288461953401566,-0.251531571149826,0.923862278461456,0.285702854394913,-0.151269629597664,0.946304082870483\n             ,0.288461953401566,-0.251531571149826,0.923862278461456,0.288555771112442,-0.2911037504673,0.912137150764465\n             ,0.189583629369736,-0.286395132541656,0.939167618751526,0.535101175308228,-0.00626787729561329,0.844764709472656\n             ,0.578185617923737,-0.0845057815313339,0.811517179012299,0.288461953401566,-0.251531571149826,0.923862278461456\n             ,0.285702854394913,-0.151269629597664,0.946304082870483,0.748473048210144,-0.374994337558746,0.546961903572083\n             ,0.755906164646149,-0.2192542552948,0.616873919963837,0.409548729658127,0.024171682074666,0.911967992782593,0.64728707075119\n             ,-0.269912004470825,0.712858319282532,0.728204727172852,-0.0192169677466154,0.685090184211731,0.31933718919754\n             ,0.337111681699753,0.885652005672455,0.409548729658127,0.024171682074666,0.911967992782593,0.755906164646149\n             ,-0.2192542552948,0.616873919963837,0.152718812227249,0.346232503652573,-0.925634920597076,0.266787320375443\n             ,-0.0615599937736988,-0.961787343025208,0.611288368701935,0.178437694907188,-0.771029531955719,0.88115268945694\n             ,0.072045162320137,-0.467310845851898,0.710636675357819,0.109640218317509,-0.694963693618774,0.941693007946014\n             ,-0.139167279005051,-0.30634418129921,0.611288368701935,0.178437694907188,-0.771029531955719,0.266787320375443\n             ,-0.0615599937736988,-0.961787343025208,0.849067807197571,-0.235355824232101,-0.472960323095322,0.898844718933105\n             ,-0.132514029741287,-0.417753785848618,0.930897831916809,-0.328699737787247,0.15932896733284,0.922981798648834\n             ,-0.320070415735245,0.213681027293205,0.898844718933105,-0.132514029741287,-0.417753785848618,0.954277276992798\n             ,-0.00887809786945581,-0.298790961503983,0.921016693115234,-0.344745218753815,0.181325793266296,0.930897831916809\n             ,-0.328699737787247,0.15932896733284,0.619684100151062,-0.672098994255066,0.405307918787003,0.749665677547455\n             ,-0.55081570148468,0.366883426904678,0.710340082645416,-0.399401605129242,0.57956475019455,0.590675473213196\n             ,-0.574259579181671,0.566858351230621,0.749665677547455,-0.55081570148468,0.366883426904678,0.924175441265106\n             ,0.249484479427338,0.28923562169075,0.849923014640808,0.0266168173402548,0.526234149932861,0.710340082645416\n             ,-0.399401605129242,0.57956475019455,0.837971806526184,-0.0177910327911377,0.545423448085785,0.812450289726257\n             ,-0.238335385918617,0.532090902328491,0.877821445465088,-0.28317603468895,0.386317104101181,0.812450289726257\n             ,-0.238335385918617,0.532090902328491,0.718032777309418,-0.160360962152481,0.677283763885498,0.442805558443069\n             ,-0.711188673973084,0.546016395092011,0.442805558443069,-0.711188673973084,0.546016395092011,0.648021519184113\n             ,-0.726138114929199,0.229764148592949,0.877821445465088,-0.28317603468895,0.386317104101181,0.812450289726257\n             ,-0.238335385918617,0.532090902328491,0.877821445465088,-0.28317603468895,0.386317104101181,0.648021519184113\n             ,-0.726138114929199,0.229764148592949,0.770939111709595,-0.636473119258881,0.0235556345432997,0.908649146556854\n             ,-0.308447659015656,0.281454712152481,0.837971806526184,-0.0177910327911377,0.545423448085785,0.877821445465088\n             ,-0.28317603468895,0.386317104101181,0.908649146556854,-0.308447659015656,0.281454712152481,0.883517026901245\n             ,-0.041202936321497,0.46658331155777,0.955420434474945,-0.273161262273788,-0.112047769129276,0.819948792457581\n             ,-0.482310354709625,0.308319211006165,0.81360274553299,-0.323832809925079,0.482890188694,0.81360274553299,-0.323832809925079\n             ,0.482890188694,0.819948792457581,-0.482310354709625,0.308319211006165,0.776369571685791,-0.530167698860168,0.340840935707092\n             ,0.770434737205505,-0.328132152557373,0.546589076519012,0.856838226318359,0.0312061347067356,0.514640152454376\n             ,0.941693007946014,-0.139167279005051,-0.30634418129921,0.928679704666138,-0.214017242193222,0.30290362238884\n             ,0.856838226318359,0.0312061347067356,0.514640152454376,0.930178761482239,0.315359890460968,0.187924444675446\n             ,0.941693007946014,-0.139167279005051,-0.30634418129921,0.856838226318359,0.0312061347067356,0.514640152454376\n             ,0.732805073261261,0.230000048875809,0.640387892723084,0.930178761482239,0.315359890460968,0.187924444675446\n             ,0.766620635986328,-0.390746057033539,-0.509519696235657,-0.137073755264282,-0.758140206336975,-0.637521922588348\n             ,0.0326823741197586,-0.96485161781311,-0.260755002498627,0.719214975833893,-0.430595219135284,-0.545268356800079\n             ,-0.797735512256622,-0.550144195556641,-0.246899589896202,-0.361367613077164,-0.930869936943054,0.0538017079234123\n             ,0.0326823741197586,-0.96485161781311,-0.260755002498627,-0.137073755264282,-0.758140206336975,-0.637521922588348\n             ,0.442805558443069,-0.711188673973084,0.546016395092011,0.494343549013138,-0.783010900020599,0.377516150474548\n             ,0.0326823741197586,-0.96485161781311,-0.260755002498627,-0.361367613077164,-0.930869936943054,0.0538017079234123\n             ,0.940188527107239,-0.340047240257263,0.0203306917101145,0.719214975833893,-0.430595219135284,-0.545268356800079\n             ,0.0326823741197586,-0.96485161781311,-0.260755002498627,0.494343549013138,-0.783010900020599,0.377516150474548\n             ,0.442805558443069,-0.711188673973084,0.546016395092011,0.718032777309418,-0.160360962152481,0.677283763885498\n             ,0.494343549013138,-0.783010900020599,0.377516150474548,0.746549785137177,0.0205342527478933,0.665012657642365\n             ,0.785623669624329,-0.0282825529575348,0.61805784702301,0.718032777309418,-0.160360962152481,0.677283763885498\n             ,0.928761661052704,-0.0844941884279251,0.360918909311295,0.90520966053009,-0.162895515561104,0.392505496740341\n             ,0.718032777309418,-0.160360962152481,0.677283763885498,0.785623669624329,-0.0282825529575348,0.61805784702301\n             ,0.940188527107239,-0.340047240257263,0.0203306917101145,0.494343549013138,-0.783010900020599,0.377516150474548\n             ,0.718032777309418,-0.160360962152481,0.677283763885498,0.90520966053009,-0.162895515561104,0.392505496740341\n             ,0.728204727172852,-0.0192169677466154,0.685090184211731,0.683746635913849,0.227861896157265,0.693231225013733\n             ,0.220439016819,0.602273344993591,0.767250597476959,0.31933718919754,0.337111681699753,0.885652005672455,0.675026595592499\n             ,0.510915398597717,0.532263576984406,0.164532527327538,0.859674274921417,0.483620911836624,0.220439016819,0.602273344993591\n             ,0.767250597476959,0.683746635913849,0.227861896157265,0.693231225013733,0.164532527327538,0.859674274921417\n             ,0.483620911836624,0.675026595592499,0.510915398597717,0.532263576984406,0.689203560352325,0.677581548690796\n             ,0.256674349308014,0.168165519833565,0.971532881259918,0.166865915060043,0.164532527327538,0.859674274921417\n             ,0.483620911836624,0.168165519833565,0.971532881259918,0.166865915060043,-0.482280492782593,0.875927150249481\n             ,0.0125399529933929,-0.407276064157486,0.876896381378174,0.255301624536514,-0.598032653331757,0.367280632257462\n             ,-0.712363600730896,-0.560936093330383,0.519313037395477,-0.644720613956451,0.0532629415392876,0.673361361026764\n             ,-0.737392425537109,0.0157992169260979,0.392201274633408,-0.919743716716766,-0.534112751483917,0.714107155799866\n             ,-0.452520221471787,0.130885064601898,0.893452942371368,-0.429663747549057,0.0532629415392876,0.673361361026764\n             ,-0.737392425537109,-0.560936093330383,0.519313037395477,-0.644720613956451,0.771966874599457,0.597103416919708\n             ,-0.218024387955666,0.77188766002655,0.415448874235153,-0.481239676475525,0.0532629415392876,0.673361361026764\n             ,-0.737392425537109,0.130885064601898,0.893452942371368,-0.429663747549057,0.743491053581238,0.170196279883385\n             ,-0.64672577381134,0.0157992169260979,0.392201274633408,-0.919743716716766,0.0532629415392876,0.673361361026764\n             ,-0.737392425537109,0.77188766002655,0.415448874235153,-0.481239676475525,0.715653717517853,-0.159719884395599\n             ,-0.679948031902313,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.00643475539982319,0.176812067627907\n             ,-0.984223604202271,0.720991909503937,-0.0311141833662987,-0.692244589328766,-0.593829154968262,0.197740450501442\n             ,-0.77991384267807,-0.611508309841156,0.264030992984772,-0.7458855509758,0.00643475539982319,0.176812067627907\n             ,-0.984223604202271,0.0297790002077818,0.0396078526973724,-0.99877142906189,-0.598032653331757,0.367280632257462\n             ,-0.712363600730896,0.0157992169260979,0.392201274633408,-0.919743716716766,0.00643475539982319,0.176812067627907\n             ,-0.984223604202271,-0.611508309841156,0.264030992984772,-0.7458855509758,0.743491053581238,0.170196279883385\n             ,-0.64672577381134,0.720991909503937,-0.0311141833662987,-0.692244589328766,0.00643475539982319,0.176812067627907\n             ,-0.984223604202271,0.0157992169260979,0.392201274633408,-0.919743716716766,0.789831042289734,-0.580399453639984\n             ,-0.198251023888588,0.10502952337265,-0.714195668697357,-0.692021250724792,0.152815148234367,-0.51164585351944\n             ,-0.845497488975525,0.768442690372467,-0.500588834285736,-0.398631006479263,-0.690630912780762,-0.290166169404984\n             ,-0.662444412708282,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.152815148234367,-0.51164585351944\n             ,-0.845497488975525,0.10502952337265,-0.714195668697357,-0.692021250724792,-0.568153619766235,-0.0387567244470119\n             ,-0.822009384632111,0.129408821463585,-0.283919304609299,-0.950075387954712,0.152815148234367,-0.51164585351944\n             ,-0.845497488975525,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.741453766822815,-0.373992174863815\n             ,-0.557114124298096,0.768442690372467,-0.500588834285736,-0.398631006479263,0.152815148234367,-0.51164585351944\n             ,-0.845497488975525,0.129408821463585,-0.283919304609299,-0.950075387954712,-0.609373271465302,-0.198937028646469\n             ,-0.767520844936371,-0.77015894651413,-0.0879611894488335,-0.631757915019989,-0.529633462429047,-0.0744152963161469\n             ,-0.844956040382385,-0.568153619766235,-0.0387567244470119,-0.822009384632111,0.442805558443069,-0.711188673973084\n             ,0.546016395092011,-0.361367613077164,-0.930869936943054,0.0538017079234123,-0.13529472053051,-0.983780562877655\n             ,-0.117775782942772,0.648021519184113,-0.726138114929199,0.229764148592949,-0.797735512256622,-0.550144195556641\n             ,-0.246899589896202,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.13529472053051,-0.983780562877655\n             ,-0.117775782942772,-0.361367613077164,-0.930869936943054,0.0538017079234123,-0.13529472053051,-0.983780562877655\n             ,-0.117775782942772,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.748543560504913,-0.365974009037018\n             ,-0.55294269323349,0.0209639705717564,-0.893982887268066,-0.44761049747467,0.648021519184113,-0.726138114929199\n             ,0.229764148592949,-0.13529472053051,-0.983780562877655,-0.117775782942772,0.0209639705717564,-0.893982887268066\n             ,-0.44761049747467,0.770939111709595,-0.636473119258881,0.0235556345432997,0.0486728809773922,-0.68095201253891\n             ,-0.730708718299866,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.797735512256622,-0.550144195556641\n             ,-0.246899589896202,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.621009290218353,-0.361309498548508\n             ,-0.695559442043304,-0.748543560504913,-0.365974009037018,-0.55294269323349,-0.773767530918121,-0.490831345319748\n             ,-0.400460213422775,0.728204727172852,-0.0192169677466154,0.685090184211731,0.755906164646149,-0.2192542552948\n             ,0.616873919963837,0.91906201839447,-0.39140060544014,0.0461581349372864,0.893281400203705,-0.428035885095596\n             ,0.137235671281815,0.748473048210144,-0.374994337558746,0.546961903572083,0.937642931938171,-0.346572607755661\n             ,0.0267044957727194,0.91906201839447,-0.39140060544014,0.0461581349372864,0.755906164646149,-0.2192542552948\n             ,0.616873919963837,0.845922708511353,-0.200713187456131,-0.494094133377075,0.75577849149704,-0.394848763942719\n             ,-0.52239191532135,0.91906201839447,-0.39140060544014,0.0461581349372864,0.937642931938171,-0.346572607755661\n             ,0.0267044957727194,0.653988599777222,-0.593074798583984,-0.469639420509338,0.893281400203705,-0.428035885095596\n             ,0.137235671281815,0.91906201839447,-0.39140060544014,0.0461581349372864,0.75577849149704,-0.394848763942719\n             ,-0.52239191532135,0.675026595592499,0.510915398597717,0.532263576984406,0.683746635913849,0.227861896157265\n             ,0.693231225013733,0.882562458515167,-0.37857860326767,0.278857797384262,0.914948225021362,-0.193324074149132\n             ,0.354253560304642,0.728204727172852,-0.0192169677466154,0.685090184211731,0.893281400203705,-0.428035885095596\n             ,0.137235671281815,0.882562458515167,-0.37857860326767,0.278857797384262,0.683746635913849,0.227861896157265\n             ,0.693231225013733,0.653988599777222,-0.593074798583984,-0.469639420509338,0.576260924339294,-0.753080308437347\n             ,-0.317479759454727,0.882562458515167,-0.37857860326767,0.278857797384262,0.893281400203705,-0.428035885095596\n             ,0.137235671281815,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.914948225021362,-0.193324074149132\n             ,0.354253560304642,0.882562458515167,-0.37857860326767,0.278857797384262,0.576260924339294,-0.753080308437347\n             ,-0.317479759454727,0.625812768936157,-0.514012217521667,0.586642861366272,0.568605542182922,-0.712091386318207\n             ,0.411841779947281,0.699254095554352,-0.603147983551025,0.383739799261093,0.726148188114166,-0.493182122707367\n             ,0.479040950536728,0.625812768936157,-0.514012217521667,0.586642861366272,0.726148188114166,-0.493182122707367\n             ,0.479040950536728,0.748473048210144,-0.374994337558746,0.546961903572083,0.64728707075119,-0.269912004470825\n             ,0.712858319282532,0.748473048210144,-0.374994337558746,0.546961903572083,0.726148188114166,-0.493182122707367\n             ,0.479040950536728,0.946356475353241,-0.319671094417572,0.0471152737736702,0.937642931938171,-0.346572607755661\n             ,0.0267044957727194,0.699254095554352,-0.603147983551025,0.383739799261093,0.951302230358124,-0.298469483852386\n             ,0.0770719945430756,0.946356475353241,-0.319671094417572,0.0471152737736702,0.726148188114166,-0.493182122707367\n             ,0.479040950536728,0.942937254905701,0.154236450791359,-0.295093923807144,0.911007940769196,-0.0263682082295418\n             ,-0.411545008420944,0.946356475353241,-0.319671094417572,0.0471152737736702,0.951302230358124,-0.298469483852386\n             ,0.0770719945430756,0.845922708511353,-0.200713187456131,-0.494094133377075,0.937642931938171,-0.346572607755661\n             ,0.0267044957727194,0.946356475353241,-0.319671094417572,0.0471152737736702,0.911007940769196,-0.0263682082295418\n             ,-0.411545008420944,0.433967679738998,-0.800836622714996,0.412713944911957,0.568605542182922,-0.712091386318207\n             ,0.411841779947281,0.620464503765106,-0.659890949726105,0.42375436425209,0.433967679738998,-0.800836622714996\n             ,0.412713944911957,0.620464503765106,-0.659890949726105,0.42375436425209,0.552745521068573,-0.585487604141235\n             ,0.593023300170898,0.54015976190567,-0.714601397514343,0.444490998983383,0.433967679738998,-0.800836622714996\n             ,0.412713944911957,0.54015976190567,-0.714601397514343,0.444490998983383,0.764377176761627,-0.598457217216492\n             ,0.239951074123383,0.693809986114502,-0.652198612689972,0.305392682552338,0.433967679738998,-0.800836622714996\n             ,0.412713944911957,0.693809986114502,-0.652198612689972,0.305392682552338,0.699254095554352,-0.603147983551025\n             ,0.383739799261093,0.568605542182922,-0.712091386318207,0.411841779947281,0.764377176761627,-0.598457217216492\n             ,0.239951074123383,0.968429863452911,-0.214592844247818,0.126860067248344,0.957345426082611,-0.272242695093155\n             ,0.0968175828456879,0.693809986114502,-0.652198612689972,0.305392682552338,0.881676495075226,0.461544960737228\n             ,0.0980962067842484,0.932843506336212,0.333851307630539,-0.135448768734932,0.957345426082611,-0.272242695093155\n             ,0.0968175828456879,0.968429863452911,-0.214592844247818,0.126860067248344,0.942937254905701,0.154236450791359\n             ,-0.295093923807144,0.951302230358124,-0.298469483852386,0.0770719945430756,0.957345426082611,-0.272242695093155\n             ,0.0968175828456879,0.932843506336212,0.333851307630539,-0.135448768734932,0.699254095554352,-0.603147983551025\n             ,0.383739799261093,0.693809986114502,-0.652198612689972,0.305392682552338,0.957345426082611,-0.272242695093155\n             ,0.0968175828456879,0.951302230358124,-0.298469483852386,0.0770719945430756,0.620464503765106,-0.659890949726105\n             ,0.42375436425209,0.856441259384155,-0.50444495677948,0.10974358022213,0.937653958797455,-0.289538353681564,0.192282542586327\n             ,0.743466079235077,-0.337065368890762,0.577620208263397,0.699970245361328,0.172705575823784,-0.692975103855133\n             ,0.710636675357819,0.109640218317509,-0.694963693618774,0.937653958797455,-0.289538353681564,0.192282542586327\n             ,0.856441259384155,-0.50444495677948,0.10974358022213,0.937653958797455,-0.289538353681564,0.192282542586327\n             ,0.710636675357819,0.109640218317509,-0.694963693618774,0.88115268945694,0.072045162320137,-0.467310845851898\n             ,0.973303020000458,-0.0122882071882486,0.229194864630699,0.743466079235077,-0.337065368890762,0.577620208263397\n             ,0.937653958797455,-0.289538353681564,0.192282542586327,0.973303020000458,-0.0122882071882486,0.229194864630699\n             ,0.740522563457489,0.0606227926909924,0.6692915558815,0.636911451816559,-0.300338536500931,0.71002858877182,0.743466079235077\n             ,-0.337065368890762,0.577620208263397,0.740522563457489,0.0606227926909924,0.6692915558815,0.590947866439819\n             ,0.059150405228138,0.804538309574127,0.636911451816559,-0.300338536500931,0.71002858877182,0.590947866439819\n             ,0.059150405228138,0.804538309574127,0.520368456840515,0.258096873760223,0.814004063606262,0.686343193054199\n             ,0.200842931866646,0.698995769023895,0.810089349746704,-0.185254707932472,0.556269705295563,0.54015976190567\n             ,-0.714601397514343,0.444490998983383,0.552745521068573,-0.585487604141235,0.593023300170898,0.636911451816559\n             ,-0.300338536500931,0.71002858877182,0.810089349746704,-0.185254707932472,0.556269705295563,0.772665083408356\n             ,-0.529866874217987,0.349613666534424,0.620464503765106,-0.659890949726105,0.42375436425209,0.743466079235077\n             ,-0.337065368890762,0.577620208263397,0.636911451816559,-0.300338536500931,0.71002858877182,0.552745521068573\n             ,-0.585487604141235,0.593023300170898,0.870513737201691,-0.304842829704285,0.386363327503204,0.89732414484024\n             ,-0.179725483059883,0.403122931718826,0.968429863452911,-0.214592844247818,0.126860067248344,0.764377176761627\n             ,-0.598457217216492,0.239951074123383,0.89732414484024,-0.179725483059883,0.403122931718826,0.849923014640808\n             ,0.0266168173402548,0.526234149932861,0.881676495075226,0.461544960737228,0.0980962067842484,0.968429863452911\n             ,-0.214592844247818,0.126860067248344,0.611288368701935,0.178437694907188,-0.771029531955719,0.930164098739624\n             ,0.356697469949722,0.0869576334953308,0.973303020000458,-0.0122882071882486,0.229194864630699,0.88115268945694\n             ,0.072045162320137,-0.467310845851898,0.66197681427002,0.379794925451279,0.646175265312195,0.740522563457489\n             ,0.0606227926909924,0.6692915558815,0.973303020000458,-0.0122882071882486,0.229194864630699,0.930164098739624\n             ,0.356697469949722,0.0869576334953308,0.611288368701935,0.178437694907188,-0.771029531955719,0.941693007946014\n             ,-0.139167279005051,-0.30634418129921,0.930178761482239,0.315359890460968,0.187924444675446,0.930164098739624\n             ,0.356697469949722,0.0869576334953308,0.930178761482239,0.315359890460968,0.187924444675446,0.732805073261261\n             ,0.230000048875809,0.640387892723084,0.66197681427002,0.379794925451279,0.646175265312195,0.930164098739624,0.356697469949722\n             ,0.0869576334953308,0.664898633956909,-0.325722575187683,0.672171533107758,0.683038532733917,-0.228187322616577\n             ,0.693821907043457,0.974376916885376,-0.212370634078979,0.0740836188197136,0.977968633174896,-0.17539019882679\n             ,0.113206177949905,0.717738389968872,-0.173748686909676,0.674287021160126,0.967301428318024,-0.248277440667152\n             ,0.0518288649618626,0.974376916885376,-0.212370634078979,0.0740836188197136,0.683038532733917,-0.228187322616577\n             ,0.693821907043457,0.715653717517853,-0.159719884395599,-0.679948031902313,0.720991909503937,-0.0311141833662987\n             ,-0.692244589328766,0.974376916885376,-0.212370634078979,0.0740836188197136,0.967301428318024,-0.248277440667152\n             ,0.0518288649618626,0.743491053581238,0.170196279883385,-0.64672577381134,0.977968633174896,-0.17539019882679\n             ,0.113206177949905,0.974376916885376,-0.212370634078979,0.0740836188197136,0.720991909503937,-0.0311141833662987\n             ,-0.692244589328766,0.661345362663269,-0.681172966957092,0.314047187566757,0.66036581993103,-0.495232194662094\n             ,0.564501583576202,0.975407660007477,-0.161730393767357,0.149743661284447,0.979921102523804,-0.156960278749466\n             ,0.122955821454525,0.664898633956909,-0.325722575187683,0.672171533107758,0.977968633174896,-0.17539019882679\n             ,0.113206177949905,0.975407660007477,-0.161730393767357,0.149743661284447,0.66036581993103,-0.495232194662094\n             ,0.564501583576202,0.743491053581238,0.170196279883385,-0.64672577381134,0.77188766002655,0.415448874235153,-0.481239676475525\n             ,0.975407660007477,-0.161730393767357,0.149743661284447,0.977968633174896,-0.17539019882679,0.113206177949905\n             ,0.771966874599457,0.597103416919708,-0.218024387955666,0.979921102523804,-0.156960278749466,0.122955821454525\n             ,0.975407660007477,-0.161730393767357,0.149743661284447,0.77188766002655,0.415448874235153,-0.481239676475525\n             ,0.834912359714508,-0.36245208978653,0.414185792207718,0.84412956237793,-0.267634004354477,0.464561402797699\n             ,0.664898633956909,-0.325722575187683,0.672171533107758,0.66036581993103,-0.495232194662094,0.564501583576202\n             ,0.834912359714508,-0.36245208978653,0.414185792207718,0.66036581993103,-0.495232194662094,0.564501583576202\n             ,0.661345362663269,-0.681172966957092,0.314047187566757,0.813187956809998,-0.535195648670197,0.228672236204147\n             ,0.664898633956909,-0.325722575187683,0.672171533107758,0.84412956237793,-0.267634004354477,0.464561402797699\n             ,0.873907625675201,-0.238707512617111,0.423443168401718,0.683038532733917,-0.228187322616577,0.693821907043457\n             ,0.873907625675201,-0.238707512617111,0.423443168401718,0.905476927757263,-0.224815160036087,0.359957873821259\n             ,0.717738389968872,-0.173748686909676,0.674287021160126,0.683038532733917,-0.228187322616577,0.693821907043457\n             ,0.921016693115234,-0.344745218753815,0.181325793266296,0.954277276992798,-0.00887809786945581,-0.298790961503983\n             ,0.982178807258606,0.114838123321533,-0.148785173892975,0.987944602966309,0.0211450234055519,0.153357028961182\n             ,0.991854608058929,0.119089640676975,0.0451894104480743,0.919128894805908,0.0630135238170624,0.388884782791138\n             ,0.987944602966309,0.0211450234055519,0.153357028961182,0.982178807258606,0.114838123321533,-0.148785173892975\n             ,0.991854608058929,0.119089640676975,0.0451894104480743,0.982178807258606,0.114838123321533,-0.148785173892975\n             ,0.834912359714508,-0.36245208978653,0.414185792207718,0.813187956809998,-0.535195648670197,0.228672236204147\n             ,0.982178807258606,0.114838123321533,-0.148785173892975,0.954277276992798,-0.00887809786945581,-0.298790961503983\n             ,0.84412956237793,-0.267634004354477,0.464561402797699,0.834912359714508,-0.36245208978653,0.414185792207718\n             ,0.597383677959442,-0.186877384781837,0.779877960681915,0.636335551738739,-0.147832229733467,0.757114708423615\n             ,0.906243920326233,-0.301860004663467,0.29597732424736,0.922981798648834,-0.320070415735245,0.213681027293205\n             ,0.636335551738739,-0.147832229733467,0.757114708423615,0.671223521232605,-0.0201855413615704,0.74098014831543\n             ,0.900076270103455,-0.156032308936119,0.406837373971939,0.906243920326233,-0.301860004663467,0.29597732424736\n             ,0.987944602966309,0.0211450234055519,0.153357028961182,0.7646564245224,-0.170687139034271,0.62142288684845,0.699551403522491\n             ,-0.470909416675568,0.537468254566193,0.921016693115234,-0.344745218753815,0.181325793266296,0.919128894805908\n             ,0.0630135238170624,0.388884782791138,0.7646564245224,-0.170687139034271,0.62142288684845,0.987944602966309,0.0211450234055519\n             ,0.153357028961182,0.671223521232605,-0.0201855413615704,0.74098014831543,0.636335551738739,-0.147832229733467\n             ,0.757114708423615,0.89732414484024,-0.179725483059883,0.403122931718826,0.870513737201691,-0.304842829704285\n             ,0.386363327503204,0.636335551738739,-0.147832229733467,0.757114708423615,0.597383677959442,-0.186877384781837\n             ,0.779877960681915,0.849923014640808,0.0266168173402548,0.526234149932861,0.89732414484024,-0.179725483059883\n             ,0.403122931718826,0.619684100151062,-0.672098994255066,0.405307918787003,0.590675473213196,-0.574259579181671\n             ,0.566858351230621,0.921016693115234,-0.344745218753815,0.181325793266296,0.699551403522491,-0.470909416675568\n             ,0.537468254566193,0.878716766834259,-0.421581953763962,0.223887145519257,0.776369571685791,-0.530167698860168\n             ,0.340840935707092,0.906263113021851,-0.354522317647934,0.230219781398773,0.805564939975739,-0.533806264400482\n             ,0.257130265235901,0.988399267196655,0.136643067002296,-0.0662992894649506,0.924175441265106,0.249484479427338\n             ,0.28923562169075,0.749665677547455,-0.55081570148468,0.366883426904678,0.619684100151062,-0.672098994255066\n             ,0.405307918787003,0.67726731300354,-0.631388366222382,0.377700597047806,0.805564939975739,-0.533806264400482\n             ,0.257130265235901,0.749665677547455,-0.55081570148468,0.366883426904678,0.932843506336212,0.333851307630539\n             ,-0.135448768734932,0.881676495075226,0.461544960737228,0.0980962067842484,0.924175441265106,0.249484479427338\n             ,0.28923562169075,0.988399267196655,0.136643067002296,-0.0662992894649506,0.932843506336212,0.333851307630539\n             ,-0.135448768734932,0.988399267196655,0.136643067002296,-0.0662992894649506,0.975082695484161,0.0550070591270924\n             ,-0.214913904666901,0.942937254905701,0.154236450791359,-0.295093923807144,0.911007940769196,-0.0263682082295418\n             ,-0.411545008420944,0.942937254905701,0.154236450791359,-0.295093923807144,0.975082695484161,0.0550070591270924\n             ,-0.214913904666901,0.958627998828888,-0.06352149695158,-0.277483999729156,0.911007940769196,-0.0263682082295418\n             ,-0.411545008420944,0.958627998828888,-0.06352149695158,-0.277483999729156,0.955420434474945,-0.273161262273788\n             ,-0.112047769129276,0.845922708511353,-0.200713187456131,-0.494094133377075,0.955420434474945,-0.273161262273788\n             ,-0.112047769129276,0.958627998828888,-0.06352149695158,-0.277483999729156,0.906263113021851,-0.354522317647934\n             ,0.230219781398773,0.819948792457581,-0.482310354709625,0.308319211006165,0.975082695484161,0.0550070591270924\n             ,-0.214913904666901,0.878716766834259,-0.421581953763962,0.223887145519257,0.906263113021851,-0.354522317647934\n             ,0.230219781398773,0.958627998828888,-0.06352149695158,-0.277483999729156,0.776369571685791,-0.530167698860168\n             ,0.340840935707092,0.819948792457581,-0.482310354709625,0.308319211006165,0.906263113021851,-0.354522317647934\n             ,0.230219781398773,0.831347465515137,-0.304245948791504,-0.465076088905334,0.855084657669067,-0.451219111680985\n             ,-0.255404502153397,0.653988599777222,-0.593074798583984,-0.469639420509338,0.75577849149704,-0.394848763942719\n             ,-0.52239191532135,0.831347465515137,-0.304245948791504,-0.465076088905334,0.75577849149704,-0.394848763942719\n             ,-0.52239191532135,0.845922708511353,-0.200713187456131,-0.494094133377075,0.955420434474945,-0.273161262273788\n             ,-0.112047769129276,0.739733874797821,-0.650235652923584,-0.173168674111366,0.718589425086975,-0.627188920974731\n             ,0.300438493490219,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.576260924339294,-0.753080308437347\n             ,-0.317479759454727,0.739733874797821,-0.650235652923584,-0.173168674111366,0.576260924339294,-0.753080308437347\n             ,-0.317479759454727,0.653988599777222,-0.593074798583984,-0.469639420509338,0.855084657669067,-0.451219111680985\n             ,-0.255404502153397,0.654792129993439,-0.747980833053589,0.108498655259609,0.589496672153473,-0.806856513023376\n             ,-0.0384224876761436,0.718589425086975,-0.627188920974731,0.300438493490219,0.726504981517792,-0.654014825820923\n             ,0.210843905806541,0.689203560352325,0.677581548690796,0.256674349308014,0.966807126998901,-0.0426941066980362\n             ,0.251915037631989,0.989448130130768,-0.0820280760526657,0.119431190192699,0.732895731925964,0.679829776287079\n             ,0.0263686496764421,0.654792129993439,-0.747980833053589,0.108498655259609,0.673599064350128,-0.729973196983337\n             ,0.115772970020771,0.989448130130768,-0.0820280760526657,0.119431190192699,0.966807126998901,-0.0426941066980362\n             ,0.251915037631989,0.661345362663269,-0.681172966957092,0.314047187566757,0.979921102523804,-0.156960278749466\n             ,0.122955821454525,0.989448130130768,-0.0820280760526657,0.119431190192699,0.673599064350128,-0.729973196983337\n             ,0.115772970020771,0.771966874599457,0.597103416919708,-0.218024387955666,0.732895731925964,0.679829776287079\n             ,0.0263686496764421,0.989448130130768,-0.0820280760526657,0.119431190192699,0.979921102523804,-0.156960278749466\n             ,0.122955821454525,0.966807126998901,-0.0426941066980362,0.251915037631989,0.689203560352325,0.677581548690796\n             ,0.256674349308014,0.675026595592499,0.510915398597717,0.532263576984406,0.914948225021362,-0.193324074149132\n             ,0.354253560304642,0.966807126998901,-0.0426941066980362,0.251915037631989,0.914948225021362,-0.193324074149132\n             ,0.354253560304642,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.654792129993439,-0.747980833053589\n             ,0.108498655259609,0.789831042289734,-0.580399453639984,-0.198251023888588,0.932135164737701,-0.321184366941452\n             ,0.167226210236549,0.908649146556854,-0.308447659015656,0.281454712152481,0.770939111709595,-0.636473119258881\n             ,0.0235556345432997,0.909835636615753,-0.0349062643945217,0.413498103618622,0.883517026901245,-0.041202936321497\n             ,0.46658331155777,0.908649146556854,-0.308447659015656,0.281454712152481,0.932135164737701,-0.321184366941452\n             ,0.167226210236549,0.909835636615753,-0.0349062643945217,0.413498103618622,0.932135164737701,-0.321184366941452\n             ,0.167226210236549,0.947174549102783,-0.313290327787399,0.0686262398958206,0.903367161750793,-0.021636750549078\n             ,0.428321927785873,0.789831042289734,-0.580399453639984,-0.198251023888588,0.768442690372467,-0.500588834285736\n             ,-0.398631006479263,0.947174549102783,-0.313290327787399,0.0686262398958206,0.932135164737701,-0.321184366941452\n             ,0.167226210236549,0.741453766822815,-0.373992174863815,-0.557114124298096,0.959232211112976,-0.282177299261093\n             ,0.015797957777977,0.947174549102783,-0.313290327787399,0.0686262398958206,0.768442690372467,-0.500588834285736\n             ,-0.398631006479263,0.85181188583374,-0.0614667385816574,0.52022910118103,0.903367161750793,-0.021636750549078\n             ,0.428321927785873,0.947174549102783,-0.313290327787399,0.0686262398958206,0.959232211112976,-0.282177299261093\n             ,0.015797957777977,0.909835636615753,-0.0349062643945217,0.413498103618622,0.903367161750793,-0.021636750549078\n             ,0.428321927785873,0.936789333820343,-0.0987404808402061,0.335672438144684,0.917440295219421,-0.101929731667042\n             ,0.384595423936844,0.903367161750793,-0.021636750549078,0.428321927785873,0.85181188583374,-0.0614667385816574\n             ,0.52022910118103,0.96601414680481,-0.199814081192017,0.163984462618828,0.936789333820343,-0.0987404808402061\n             ,0.335672438144684,0.788077771663666,0.0518888607621193,0.61338484287262,0.669167935848236,0.129631534218788\n             ,0.731717109680176,0.808598875999451,0.0304549541324377,0.587571620941162,0.869269788265228,-0.0789045765995979\n             ,0.488000065088272,0.808598875999451,0.0304549541324377,0.587571620941162,0.837971806526184,-0.0177910327911377\n             ,0.545423448085785,0.883517026901245,-0.041202936321497,0.46658331155777,0.869269788265228,-0.0789045765995979\n             ,0.488000065088272,0.808598875999451,0.0304549541324377,0.587571620941162,0.746549785137177,0.0205342527478933\n             ,0.665012657642365,0.837971806526184,-0.0177910327911377,0.545423448085785,0.81360274553299,-0.323832809925079\n             ,0.482890188694,0.770434737205505,-0.328132152557373,0.546589076519012,0.78486180305481,-0.111138336360455,0.60962301492691\n             ,0.883532881736755,-0.151341363787651,0.443244278430939,0.886961340904236,-0.0727596655488014,0.456076264381409\n             ,0.831347465515137,-0.304245948791504,-0.465076088905334,0.955420434474945,-0.273161262273788,-0.112047769129276\n             ,0.81360274553299,-0.323832809925079,0.482890188694,0.886961340904236,-0.0727596655488014,0.456076264381409,0.855084657669067\n             ,-0.451219111680985,-0.255404502153397,0.770434737205505,-0.328132152557373,0.546589076519012,0.724820017814636\n             ,-0.392161190509796,0.566432297229767,0.733931958675385,-0.110008127987385,0.670255243778229,0.78486180305481\n             ,-0.111138336360455,0.60962301492691,0.724820017814636,-0.392161190509796,0.566432297229767,0.699551403522491\n             ,-0.470909416675568,0.537468254566193,0.7646564245224,-0.170687139034271,0.62142288684845,0.733931958675385,-0.110008127987385\n             ,0.670255243778229,0.919128894805908,0.0630135238170624,0.388884782791138,0.815926849842072,-0.0521769113838673\n             ,0.575795948505402,0.733931958675385,-0.110008127987385,0.670255243778229,0.7646564245224,-0.170687139034271\n             ,0.62142288684845,0.718589425086975,-0.627188920974731,0.300438493490219,0.78486180305481,-0.111138336360455\n             ,0.60962301492691,0.733931958675385,-0.110008127987385,0.670255243778229,0.815926849842072,-0.0521769113838673\n             ,0.575795948505402,0.900076270103455,-0.156032308936119,0.406837373971939,0.889522910118103,-0.00140424643177539\n             ,0.456888437271118,0.936789333820343,-0.0987404808402061,0.335672438144684,0.96601414680481,-0.199814081192017\n             ,0.163984462618828,0.889522910118103,-0.00140424643177539,0.456888437271118,0.867614150047302,0.0466058775782585\n             ,0.495049089193344,0.917440295219421,-0.101929731667042,0.384595423936844,0.936789333820343,-0.0987404808402061\n             ,0.335672438144684,0.869269788265228,-0.0789045765995979,0.488000065088272,0.917440295219421,-0.101929731667042\n             ,0.384595423936844,0.867614150047302,0.0466058775782585,0.495049089193344,0.788077771663666,0.0518888607621193\n             ,0.61338484287262,0.724820017814636,-0.392161190509796,0.566432297229767,0.770434737205505,-0.328132152557373\n             ,0.546589076519012,0.776369571685791,-0.530167698860168,0.340840935707092,0.67726731300354,-0.631388366222382\n             ,0.377700597047806,0.619684100151062,-0.672098994255066,0.405307918787003,0.699551403522491,-0.470909416675568\n             ,0.537468254566193,0.724820017814636,-0.392161190509796,0.566432297229767,0.67726731300354,-0.631388366222382\n             ,0.377700597047806,0.66197681427002,0.379794925451279,0.646175265312195,0.732805073261261,0.230000048875809,0.640387892723084\n             ,0.669167935848236,0.129631534218788,0.731717109680176,0.520368456840515,0.258096873760223,0.814004063606262\n             ,0.520368456840515,0.258096873760223,0.814004063606262,0.669167935848236,0.129631534218788,0.731717109680176\n             ,0.788077771663666,0.0518888607621193,0.61338484287262,0.686343193054199,0.200842931866646,0.698995769023895\n             ,0.671223521232605,-0.0201855413615704,0.74098014831543,0.870513737201691,-0.304842829704285,0.386363327503204\n             ,0.858721911907196,-0.0560792721807957,0.509364068508148,0.698842525482178,0.18292909860611,0.691488325595856\n             ,0.74112343788147,0.26722252368927,0.615896224975586,0.698842525482178,0.18292909860611,0.691488325595856,0.858721911907196\n             ,-0.0560792721807957,0.509364068508148,0.74112343788147,0.26722252368927,0.615896224975586,0.858721911907196\n             ,-0.0560792721807957,0.509364068508148,0.810089349746704,-0.185254707932472,0.556269705295563,0.686343193054199\n             ,0.200842931866646,0.698995769023895,0.870513737201691,-0.304842829704285,0.386363327503204,0.772665083408356\n             ,-0.529866874217987,0.349613666534424,0.810089349746704,-0.185254707932472,0.556269705295563,0.858721911907196\n             ,-0.0560792721807957,0.509364068508148,0.906243920326233,-0.301860004663467,0.29597732424736,0.900076270103455\n             ,-0.156032308936119,0.406837373971939,0.96601414680481,-0.199814081192017,0.163984462618828,0.854979157447815\n             ,-0.303726255893707,-0.420429587364197,0.906243920326233,-0.301860004663467,0.29597732424736,0.854979157447815\n             ,-0.303726255893707,-0.420429587364197,0.849067807197571,-0.235355824232101,-0.472960323095322,0.922981798648834\n             ,-0.320070415735245,0.213681027293205,0.84412956237793,-0.267634004354477,0.464561402797699,0.954277276992798\n             ,-0.00887809786945581,-0.298790961503983,0.898844718933105,-0.132514029741287,-0.417753785848618,0.873907625675201\n             ,-0.238707512617111,0.423443168401718,0.898844718933105,-0.132514029741287,-0.417753785848618,0.849067807197571\n             ,-0.235355824232101,-0.472960323095322,0.905476927757263,-0.224815160036087,0.359957873821259,0.873907625675201\n             ,-0.238707512617111,0.423443168401718,0.934250891208649,-0.198644295334816,0.296168446540833,0.905476927757263\n             ,-0.224815160036087,0.359957873821259,0.849067807197571,-0.235355824232101,-0.472960323095322,0.854979157447815\n             ,-0.303726255893707,-0.420429587364197,0.96601414680481,-0.199814081192017,0.163984462618828,0.934250891208649\n             ,-0.198644295334816,0.296168446540833,0.854979157447815,-0.303726255893707,-0.420429587364197,0.717738389968872\n             ,-0.173748686909676,0.674287021160126,0.905476927757263,-0.224815160036087,0.359957873821259,0.934250891208649\n             ,-0.198644295334816,0.296168446540833,0.778299868106842,-0.129949271678925,0.614298403263092,0.934250891208649\n             ,-0.198644295334816,0.296168446540833,0.96601414680481,-0.199814081192017,0.163984462618828,0.85181188583374\n             ,-0.0614667385816574,0.52022910118103,0.778299868106842,-0.129949271678925,0.614298403263092,0.715653717517853\n             ,-0.159719884395599,-0.679948031902313,0.967301428318024,-0.248277440667152,0.0518288649618626,0.963969707489014\n             ,-0.265031158924103,0.0228220708668232,0.722632110118866,-0.252884060144424,-0.643313705921173,0.717738389968872\n             ,-0.173748686909676,0.674287021160126,0.778299868106842,-0.129949271678925,0.614298403263092,0.963969707489014\n             ,-0.265031158924103,0.0228220708668232,0.967301428318024,-0.248277440667152,0.0518288649618626,0.85181188583374\n             ,-0.0614667385816574,0.52022910118103,0.959232211112976,-0.282177299261093,0.015797957777977,0.963969707489014\n             ,-0.265031158924103,0.0228220708668232,0.778299868106842,-0.129949271678925,0.614298403263092,0.741453766822815\n             ,-0.373992174863815,-0.557114124298096,0.722632110118866,-0.252884060144424,-0.643313705921173,0.963969707489014\n             ,-0.265031158924103,0.0228220708668232,0.959232211112976,-0.282177299261093,0.015797957777977,0.741453766822815\n             ,-0.373992174863815,-0.557114124298096,0.129408821463585,-0.283919304609299,-0.950075387954712,0.0741845220327377\n             ,-0.0867956131696701,-0.993460237979889,0.722632110118866,-0.252884060144424,-0.643313705921173,-0.568153619766235\n             ,-0.0387567244470119,-0.822009384632111,-0.572411417961121,0.114080429077148,-0.81199187040329,0.0741845220327377\n             ,-0.0867956131696701,-0.993460237979889,0.129408821463585,-0.283919304609299,-0.950075387954712,-0.593829154968262\n             ,0.197740450501442,-0.77991384267807,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.0741845220327377\n             ,-0.0867956131696701,-0.993460237979889,-0.572411417961121,0.114080429077148,-0.81199187040329,0.715653717517853\n             ,-0.159719884395599,-0.679948031902313,0.722632110118866,-0.252884060144424,-0.643313705921173,0.0741845220327377\n             ,-0.0867956131696701,-0.993460237979889,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.925993382930756\n             ,0.073547326028347,-0.370306611061096,0.989523768424988,0.120242863893509,-0.0799020603299141,0.853913903236389\n             ,0.342162936925888,-0.392116755247116,0.226486593484879,0.604172766208649,-0.76398891210556,0.989523768424988\n             ,0.120242863893509,-0.0799020603299141,0.918502330780029,-0.196233198046684,0.343287169933319,0.962022840976715\n             ,-0.137412339448929,0.235859960317612,0.853913903236389,0.342162936925888,-0.392116755247116,0.152718812227249\n             ,0.346232503652573,-0.925634920597076,0.710636675357819,0.109640218317509,-0.694963693618774,0.699970245361328\n             ,0.172705575823784,-0.692975103855133,0.226486593484879,0.604172766208649,-0.76398891210556,0.699970245361328\n             ,0.172705575823784,-0.692975103855133,0.856441259384155,-0.50444495677948,0.10974358022213,0.819883346557617\n             ,-0.543677628040314,0.179460227489471,0.925993382930756,0.073547326028347,-0.370306611061096,0.856441259384155\n             ,-0.50444495677948,0.10974358022213,0.620464503765106,-0.659890949726105,0.42375436425209,0.568605542182922,-0.712091386318207\n             ,0.411841779947281,0.819883346557617,-0.543677628040314,0.179460227489471,0.726504981517792,-0.654014825820923\n             ,0.210843905806541,0.718589425086975,-0.627188920974731,0.300438493490219,0.815926849842072,-0.0521769113838673\n             ,0.575795948505402,0.965819001197815,-0.0271366275846958,0.257793039083481,0.855084657669067,-0.451219111680985\n             ,-0.255404502153397,0.886961340904236,-0.0727596655488014,0.456076264381409,0.883532881736755,-0.151341363787651\n             ,0.443244278430939,0.739733874797821,-0.650235652923584,-0.173168674111366,0.718589425086975,-0.627188920974731\n             ,0.300438493490219,0.739733874797821,-0.650235652923584,-0.173168674111366,0.883532881736755,-0.151341363787651\n             ,0.443244278430939,0.78486180305481,-0.111138336360455,0.60962301492691,0.900076270103455,-0.156032308936119\n             ,0.406837373971939,0.671223521232605,-0.0201855413615704,0.74098014831543,0.698842525482178,0.18292909860611\n             ,0.691488325595856,0.889522910118103,-0.00140424643177539,0.456888437271118,0.698842525482178,0.18292909860611\n             ,0.691488325595856,0.74112343788147,0.26722252368927,0.615896224975586,0.867614150047302,0.0466058775782585,0.495049089193344\n             ,0.889522910118103,-0.00140424643177539,0.456888437271118,0.788077771663666,0.0518888607621193,0.61338484287262\n             ,0.867614150047302,0.0466058775782585,0.495049089193344,0.74112343788147,0.26722252368927,0.615896224975586,0.686343193054199\n             ,0.200842931866646,0.698995769023895,0.597383677959442,-0.186877384781837,0.779877960681915,0.922981798648834\n             ,-0.320070415735245,0.213681027293205,0.930897831916809,-0.328699737787247,0.15932896733284,0.575946867465973\n             ,-0.330290824174881,0.74779224395752,0.930897831916809,-0.328699737787247,0.15932896733284,0.921016693115234\n             ,-0.344745218753815,0.181325793266296,0.590675473213196,-0.574259579181671,0.566858351230621,0.575946867465973\n             ,-0.330290824174881,0.74779224395752,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.766620635986328\n             ,-0.390746057033539,-0.509519696235657,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.137073755264282\n             ,-0.758140206336975,-0.637521922588348,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.797735512256622\n             ,-0.550144195556641,-0.246899589896202,0.938213586807251,-0.216931000351906,0.269622415304184,0.979475617408752\n             ,-0.109372921288013,0.169307827949524,0.948027610778809,-0.215131908655167,0.234439536929131,0.891989231109619\n             ,-0.254739731550217,0.373447239398956,0.948027610778809,-0.215131908655167,0.234439536929131,0.979475617408752\n             ,-0.109372921288013,0.169307827949524,0.995871722698212,-0.0808055028319359,0.041352104395628,0.982620000839233\n             ,-0.16903156042099,0.076722227036953,0.568605542182922,-0.712091386318207,0.411841779947281,0.625812768936157\n             ,-0.514012217521667,0.586642861366272,0.819252371788025,-0.448852121829987,0.356871604919434,0.819883346557617\n             ,-0.543677628040314,0.179460227489471,0.64728707075119,-0.269912004470825,0.712858319282532,0.903722703456879\n             ,-0.336785912513733,0.26431143283844,0.819252371788025,-0.448852121829987,0.356871604919434,0.625812768936157\n             ,-0.514012217521667,0.586642861366272,0.0543623231351376,0.513473629951477,0.85638165473938,0.045425571501255\n             ,0.382962375879288,0.922646403312683,0.219657093286514,0.398345082998276,0.890545904636383,0.20434632897377,0.515124678611755\n             ,0.832399606704712,0.045425571501255,0.382962375879288,0.922646403312683,0.0344220362603664,0.22930283844471\n             ,0.972746253013611,0.163330301642418,0.241669088602066,0.956514120101929,0.219657093286514,0.398345082998276\n             ,0.890545904636383,0.924175441265106,0.249484479427338,0.28923562169075,0.881676495075226,0.461544960737228,0.0980962067842484\n             ,0.849923014640808,0.0266168173402548,0.526234149932861,0.849923014640808,0.0266168173402548,0.526234149932861\n             ,0.597383677959442,-0.186877384781837,0.779877960681915,0.575946867465973,-0.330290824174881,0.74779224395752\n             ,0.710340082645416,-0.399401605129242,0.57956475019455,0.590675473213196,-0.574259579181671,0.566858351230621\n             ,0.710340082645416,-0.399401605129242,0.57956475019455,0.575946867465973,-0.330290824174881,0.74779224395752\n             ,0.54015976190567,-0.714601397514343,0.444490998983383,0.772665083408356,-0.529866874217987,0.349613666534424\n             ,0.764377176761627,-0.598457217216492,0.239951074123383,0.764377176761627,-0.598457217216492,0.239951074123383\n             ,0.772665083408356,-0.529866874217987,0.349613666534424,0.870513737201691,-0.304842829704285,0.386363327503204\n             ,0.938213586807251,-0.216931000351906,0.269622415304184,0.918502330780029,-0.196233198046684,0.343287169933319\n             ,0.928443729877472,-0.228811115026474,0.292639285326004,0.935753345489502,-0.270965844392776,0.225705921649933\n             ,0.918502330780029,-0.196233198046684,0.343287169933319,0.891989231109619,-0.254739731550217,0.373447239398956\n             ,0.840574324131012,-0.291103184223175,0.456830143928528,0.888055205345154,-0.428246527910233,-0.167221024632454\n             ,0.952154934406281,-0.291899025440216,0.0905317366123199,0.869891345500946,-0.342425405979156,0.355012476444244\n             ,0.887078821659088,-0.412128984928131,0.207944288849831,0.962022840976715,-0.137412339448929,0.235859960317612\n             ,0.840574324131012,-0.291103184223175,0.456830143928528,0.869891345500946,-0.342425405979156,0.355012476444244\n             ,0.952154934406281,-0.291899025440216,0.0905317366123199,0.928761661052704,-0.0844941884279251,0.360918909311295\n             ,0.928679704666138,-0.214017242193222,0.30290362238884,0.982620000839233,-0.16903156042099,0.076722227036953\n             ,0.993277549743652,-0.10496261715889,0.0488112159073353,0.928679704666138,-0.214017242193222,0.30290362238884\n             ,0.941693007946014,-0.139167279005051,-0.30634418129921,0.888055205345154,-0.428246527910233,-0.167221024632454\n             ,0.887078821659088,-0.412128984928131,0.207944288849831,0.928679704666138,-0.214017242193222,0.30290362238884\n             ,0.887078821659088,-0.412128984928131,0.207944288849831,0.869891345500946,-0.342425405979156,0.355012476444244\n             ,0.948027610778809,-0.215131908655167,0.234439536929131,0.982620000839233,-0.16903156042099,0.076722227036953\n             ,0.918502330780029,-0.196233198046684,0.343287169933319,0.840574324131012,-0.291103184223175,0.456830143928528\n             ,0.962022840976715,-0.137412339448929,0.235859960317612,-0.572831332683563,0.0232040770351887,-0.819344758987427\n             ,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.499244570732117,-0.495106011629105,-0.711073040962219\n             ,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.572831332683563,0.0232040770351887,-0.819344758987427\n             ,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.385834068059921,-0.169429570436478,-0.906876862049103\n             ,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.155012637376785,-0.308559864759445,-0.938489139080048\n             ,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.385834068059921,-0.169429570436478,-0.906876862049103\n             ,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.155012637376785,-0.308559864759445,-0.938489139080048\n             ,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.499244570732117,-0.495106011629105,-0.711073040962219\n             ,-0.117666520178318,-0.734499752521515,-0.668329775333405,-0.0362379811704159,-0.262005388736725,-0.964385807514191\n             ,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.0560902766883373,-0.278950154781342,-0.958666086196899\n             ,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.0560902766883373,-0.278950154781342,-0.958666086196899\n             ,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.00530779222026467,-0.225043326616287,-0.974334299564362\n             ,0.060580100864172,-0.309540450572968,-0.948954582214355,0.0705975443124771,-0.761587023735046,-0.644205927848816\n             ,0.0357764922082424,-0.768304586410522,-0.639083802700043,0.0560902766883373,-0.278950154781342,-0.958666086196899\n             ,0.060580100864172,-0.309540450572968,-0.948954582214355,-0.070097453892231,-0.765305280685425,-0.639839172363281\n             ,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.0560902766883373,-0.278950154781342,-0.958666086196899\n             ,0.0357764922082424,-0.768304586410522,-0.639083802700043,-0.637578308582306,0.271278858184814,-0.721042096614838\n             ,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.728337526321411,0.0211671013385057,-0.684891521930695\n             ,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.637578308582306,0.271278858184814,-0.721042096614838\n             ,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.392845422029495,-0.17293743789196,-0.903197169303894\n             ,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.162789091467857,-0.282180637121201,-0.945448994636536\n             ,-0.155012637376785,-0.308559864759445,-0.938489139080048,0.060580100864172,-0.309540450572968,-0.948954582214355\n             ,0.00530779222026467,-0.225043326616287,-0.974334299564362,-0.117666520178318,-0.734499752521515,-0.668329775333405\n             ,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.060580100864172,-0.309540450572968,-0.948954582214355\n             ,-0.155012637376785,-0.308559864759445,-0.938489139080048,-0.268979072570801,0.152991950511932,-0.950917303562164\n             ,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.26518127322197,0.597104549407959,-0.757063448429108\n             ,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.268979072570801,0.152991950511932,-0.950917303562164\n             ,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.523017466068268,0.285451769828796,-0.803100228309631\n             ,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.0239754971116781,0.848645508289337,-0.528418362140656\n             ,-0.26518127322197,0.597104549407959,-0.757063448429108,-0.289194285869598,0.281266182661057,-0.915016949176788\n             ,0.00547882029786706,0.479039758443832,-0.877776086330414,-0.914143800735474,0.108810022473335,-0.390514433383942\n             ,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.578557550907135,0.442773431539536,-0.684998393058777\n             ,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.914143800735474,0.108810022473335,-0.390514433383942\n             ,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.749875366687775,0.181030079722404,-0.636329352855682\n             ,0.370056182146072,0.811048626899719,-0.453054636716843,-0.144558519124985,0.63954085111618,-0.755043268203735\n             ,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.299774140119553,0.750125706195831,-0.589446246623993\n             ,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.144558519124985,0.63954085111618,-0.755043268203735\n             ,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.0239754971116781,0.848645508289337,-0.528418362140656\n             ,0.00547882029786706,0.479039758443832,-0.877776086330414,0.0384715124964714,0.615228533744812,-0.787409543991089\n             ,0.103339314460754,0.947827875614166,-0.301568180322647,0.0384715124964714,0.615228533744812,-0.787409543991089\n             ,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.0339763574302197,0.937289535999298,-0.346891850233078\n             ,0.103339314460754,0.947827875614166,-0.301568180322647,-0.677631020545959,0.0696527808904648,-0.732096076011658\n             ,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.523017466068268,0.285451769828796,-0.803100228309631\n             ,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.677631020545959,0.0696527808904648,-0.732096076011658\n             ,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.835774898529053,0.0728342235088348,-0.54422003030777\n             ,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.929068803787231,-0.0690155401825905,-0.363411635160446\n             ,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.788628935813904,-0.377316504716873,-0.485486000776291\n             ,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.878701210021973,-0.298690170049667,-0.372382044792175\n             ,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.788628935813904,-0.377316504716873,-0.485486000776291\n             ,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.735399723052979,0.0687208324670792,-0.674139976501465\n             ,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.788628935813904,-0.377316504716873,-0.485486000776291\n             ,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.877584159374237,0.190617814660072,-0.439898729324341\n             ,-0.880580544471741,0.26120713353157,-0.395409554243088,-0.623760402202606,0.624061942100525,-0.470605611801147\n             ,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.719125330448151,0.296634525060654,-0.628384232521057\n             ,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.749875366687775,0.181030079722404,-0.636329352855682\n             ,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.970641255378723,0.0346399769186974,-0.238024458289146\n             ,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.856640636920929,-0.0924222394824028,0.507567644119263\n             ,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.934147357940674,0.162888333201408,-0.317546963691711\n             ,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.970641255378723,0.0346399769186974,-0.238024458289146\n             ,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.778645157814026,-0.596678197383881,-0.194131031632423\n             ,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.934147357940674,0.162888333201408,-0.317546963691711\n             ,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.856640636920929,-0.0924222394824028,0.507567644119263\n             ,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.778645157814026,-0.596678197383881,-0.194131031632423\n             ,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.880580544471741,0.26120713353157,-0.395409554243088\n             ,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.467009961605072,0.872948586940765,-0.140934243798256\n             ,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.945308268070221,0.226358875632286,-0.234848886728287\n             ,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.880580544471741,0.26120713353157,-0.395409554243088\n             ,-0.634040713310242,0.756764888763428,0.159057512879372,-0.467009961605072,0.872948586940765,-0.140934243798256\n             ,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.945308268070221,0.226358875632286,-0.234848886728287\n             ,0.585816919803619,-0.176041945815086,0.791092753410339,0.662703216075897,-0.235535204410553,0.710878074169159\n             ,0.75313264131546,-0.288527101278305,0.591221868991852,0.638028085231781,-0.251523166894913,0.727774858474731\n             ,0.585816919803619,-0.176041945815086,0.791092753410339,0.638028085231781,-0.251523166894913,0.727774858474731\n             ,0.540978610515594,-0.216916099190712,0.812582015991211,0.501314342021942,-0.180266559123993,0.846278846263886\n             ,0.638028085231781,-0.251523166894913,0.727774858474731,0.75313264131546,-0.288527101278305,0.591221868991852\n             ,0.887619376182556,-0.256067276000977,0.382833331823349,0.874927282333374,-0.188851833343506,0.44591161608696\n             ,0.638028085231781,-0.251523166894913,0.727774858474731,0.874927282333374,-0.188851833343506,0.44591161608696\n             ,0.852472126483917,-0.133455187082291,0.505451321601868,0.540978610515594,-0.216916099190712,0.812582015991211\n             ,0.874927282333374,-0.188851833343506,0.44591161608696,0.887619376182556,-0.256067276000977,0.382833331823349\n             ,0.960171759128571,-0.181689232587814,0.212271526455879,0.961752712726593,-0.126318529248238,0.243054285645485\n             ,0.874927282333374,-0.188851833343506,0.44591161608696,0.961752712726593,-0.126318529248238,0.243054285645485\n             ,0.950795531272888,-0.131767466664314,0.280401825904846,0.852472126483917,-0.133455187082291,0.505451321601868\n             ,0.961752712726593,-0.126318529248238,0.243054285645485,0.960171759128571,-0.181689232587814,0.212271526455879\n             ,0.966324627399445,-0.156342566013336,0.204386278986931,0.968484222888947,-0.138258457183838,0.207178428769112\n             ,0.964455902576447,-0.157870531082153,0.211900100111961,0.950795531272888,-0.131767466664314,0.280401825904846\n             ,0.961752712726593,-0.126318529248238,0.243054285645485,0.968484222888947,-0.138258457183838,0.207178428769112\n             ,0.968484222888947,-0.138258457183838,0.207178428769112,0.966324627399445,-0.156342566013336,0.204386278986931\n             ,0.809566378593445,-0.159671008586884,0.564895987510681,0.861340701580048,-0.127685099840164,0.491720139980316\n             ,0.964455902576447,-0.157870531082153,0.211900100111961,0.968484222888947,-0.138258457183838,0.207178428769112\n             ,0.861340701580048,-0.127685099840164,0.491720139980316,0.896426856517792,-0.172908827662468,0.408070415258408\n             ,0.606970250606537,-0.105902783572674,0.787636816501617,0.623109459877014,-0.205047786235809,0.754778146743774\n             ,0.896426856517792,-0.172908827662468,0.408070415258408,0.861340701580048,-0.127685099840164,0.491720139980316\n             ,0.606970250606537,-0.105902783572674,0.787636816501617,0.861340701580048,-0.127685099840164,0.491720139980316\n             ,0.809566378593445,-0.159671008586884,0.564895987510681,0.634909212589264,-0.137729376554489,0.760211110115051\n             ,0.634909212589264,-0.137729376554489,0.760211110115051,0.844319820404053,-0.143771529197693,0.51619154214859\n             ,0.757737696170807,-0.147417977452278,0.635689795017242,0.606970250606537,-0.105902783572674,0.787636816501617\n             ,0.941718637943268,-0.180898189544678,0.283622801303864,0.92750072479248,-0.198037564754486,0.31705442070961\n             ,0.757737696170807,-0.147417977452278,0.635689795017242,0.844319820404053,-0.143771529197693,0.51619154214859\n             ,0.9190753698349,-0.11298330873251,0.377538323402405,0.705142974853516,-0.157100901007652,0.691442430019379,0.757737696170807\n             ,-0.147417977452278,0.635689795017242,0.92750072479248,-0.198037564754486,0.31705442070961,0.623109459877014\n             ,-0.205047786235809,0.754778146743774,0.606970250606537,-0.105902783572674,0.787636816501617,0.757737696170807\n             ,-0.147417977452278,0.635689795017242,0.705142974853516,-0.157100901007652,0.691442430019379,0.936089217662811\n             ,-0.214836105704308,0.278536230325699,0.935290277004242,-0.181792959570885,0.303617179393768,0.9190753698349\n             ,-0.11298330873251,0.377538323402405,0.92750072479248,-0.198037564754486,0.31705442070961,0.949846565723419,-0.197867274284363\n             ,0.242157250642776,0.935290277004242,-0.181792959570885,0.303617179393768,0.936089217662811,-0.214836105704308\n             ,0.278536230325699,0.0527103617787361,-0.77695095539093,0.627350628376007,-0.0512008517980576,-0.79354852437973\n             ,0.606349110603333,-0.0138667495921254,-0.712914168834686,0.701114177703857,0.0200271289795637,-0.717210829257965\n             ,0.696568429470062,-0.0512008517980576,-0.79354852437973,0.606349110603333,-0.0352796316146851,-0.824001550674438\n             ,0.565488159656525,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0138667495921254,-0.712914168834686\n             ,0.701114177703857,0.235940769314766,-0.737428665161133,0.632875144481659,0.0527103617787361,-0.77695095539093\n             ,0.627350628376007,0.0200271289795637,-0.717210829257965,0.696568429470062,0.152485489845276,-0.706423759460449\n             ,0.691168308258057,0.363939642906189,-0.646557629108429,0.670455992221832,0.235940769314766,-0.737428665161133\n             ,0.632875144481659,0.152485489845276,-0.706423759460449,0.691168308258057,0.317214041948318,-0.645033359527588\n             ,0.695202946662903,0.363939642906189,-0.646557629108429,0.670455992221832,0.317214041948318,-0.645033359527588\n             ,0.695202946662903,0.389301151037216,-0.589295387268066,0.707937479019165,0.286647915840149,-0.584438979625702\n             ,0.759120643138886,0.184710487723351,-0.617817997932434,0.764318585395813,0.286647915840149,-0.584438979625702\n             ,0.759120643138886,0.389301151037216,-0.589295387268066,0.707937479019165,0.34683957695961,-0.624991238117218\n             ,0.699348449707031,0.184710487723351,-0.617817997932434,0.764318585395813,0.34683957695961,-0.624991238117218\n             ,0.699348449707031,0.139593034982681,-0.543097734451294,0.827984690666199,0.168070778250694,-0.457133919000626\n             ,0.873373210430145,0.196283534169197,-0.554668664932251,0.808588564395905,0.358242690563202,-0.369526594877243\n             ,0.857386887073517,0.359977900981903,-0.319483041763306,0.876553773880005,0.161047965288162,-0.353496670722961\n             ,0.921468198299408,0.16572479903698,-0.647090375423431,0.744183719158173,0.196283534169197,-0.554668664932251\n             ,0.808588564395905,0.161047965288162,-0.353496670722961,0.921468198299408,0.0293192863464355,-0.389476090669632\n             ,0.920569777488709,0.196283534169197,-0.554668664932251,0.808588564395905,0.16572479903698,-0.647090375423431\n             ,0.744183719158173,0.255019038915634,-0.916801631450653,0.307311117649078,0.191021859645844,-0.901510059833527\n             ,0.388317227363586,0.771733045578003,-0.627318918704987,0.104398690164089,0.813187956809998,-0.535195648670197\n             ,0.228672236204147,0.661345362663269,-0.681172966957092,0.314047187566757,0.673599064350128,-0.729973196983337\n             ,0.115772970020771,0.771733045578003,-0.627318918704987,0.104398690164089,0.673599064350128,-0.729973196983337\n             ,0.115772970020771,0.654792129993439,-0.747980833053589,0.108498655259609,0.726504981517792,-0.654014825820923\n             ,0.210843905806541,0.991854608058929,0.119089640676975,0.0451894104480743,0.813187956809998,-0.535195648670197\n             ,0.228672236204147,0.771733045578003,-0.627318918704987,0.104398690164089,0.965819001197815,-0.0271366275846958\n             ,0.257793039083481,0.726504981517792,-0.654014825820923,0.210843905806541,0.965819001197815,-0.0271366275846958\n             ,0.257793039083481,0.771733045578003,-0.627318918704987,0.104398690164089,-0.534112751483917,0.714107155799866\n             ,-0.452520221471787,-0.515466570854187,0.838185369968414,-0.178155809640884,0.190385565161705,0.977179288864136\n             ,-0.0942017361521721,0.130885064601898,0.893452942371368,-0.429663747549057,-0.482280492782593,0.875927150249481\n             ,0.0125399529933929,0.168165519833565,0.971532881259918,0.166865915060043,0.190385565161705,0.977179288864136\n             ,-0.0942017361521721,-0.515466570854187,0.838185369968414,-0.178155809640884,0.689203560352325,0.677581548690796\n             ,0.256674349308014,0.732895731925964,0.679829776287079,0.0263686496764421,0.190385565161705,0.977179288864136\n             ,-0.0942017361521721,0.168165519833565,0.971532881259918,0.166865915060043,0.771966874599457,0.597103416919708\n             ,-0.218024387955666,0.130885064601898,0.893452942371368,-0.429663747549057,0.190385565161705,0.977179288864136\n             ,-0.0942017361521721,0.732895731925964,0.679829776287079,0.0263686496764421,0.883517026901245,-0.041202936321497\n             ,0.46658331155777,0.909835636615753,-0.0349062643945217,0.413498103618622,0.917440295219421,-0.101929731667042\n             ,0.384595423936844,0.869269788265228,-0.0789045765995979,0.488000065088272,-0.690630912780762,-0.290166169404984\n             ,-0.662444412708282,0.10502952337265,-0.714195668697357,-0.692021250724792,0.0209639705717564,-0.893982887268066\n             ,-0.44761049747467,-0.748543560504913,-0.365974009037018,-0.55294269323349,0.789831042289734,-0.580399453639984\n             ,-0.198251023888588,0.770939111709595,-0.636473119258881,0.0235556345432997,0.0209639705717564,-0.893982887268066\n             ,-0.44761049747467,0.10502952337265,-0.714195668697357,-0.692021250724792,0.970540165901184,0.124821022152901\n             ,0.206086173653603,0.534866094589233,0.53300929069519,0.655606091022491,0.956802248954773,0.196078270673752,0.214668840169907\n             ,0.966708958148956,-0.002308584516868,0.255868047475815,0.925993382930756,0.073547326028347,-0.370306611061096\n             ,0.226486593484879,0.604172766208649,-0.76398891210556,0.699970245361328,0.172705575823784,-0.692975103855133\n             ,0.897598922252655,-0.0851877480745316,0.432503432035446,0.971762239933014,-0.143596902489662,0.187237858772278\n             ,0.935753345489502,-0.270965844392776,0.225705921649933,0.928443729877472,-0.228811115026474,0.292639285326004\n             ,0.846449613571167,0.310930520296097,0.432256042957306,0.857260406017303,0.312566876411438,0.409153461456299\n             ,0.813006162643433,0.437411576509476,0.384307235479355,0.885035216808319,0.393218964338303,0.249181613326073\n             ,0.908188223838806,0.15894940495491,0.387206882238388,0.854240536689758,0.355053037405014,0.379750460386276,0.857260406017303\n             ,0.312566876411438,0.409153461456299,0.846449613571167,0.310930520296097,0.432256042957306,0.793774306774139\n             ,0.385858178138733,0.470144480466843,0.718716561794281,0.339281320571899,0.60690575838089,0.728551387786865,0.287864476442337\n             ,0.621568083763123,0.87058699131012,0.227341398596764,0.436341762542725,0.862693786621094,0.213308542966843,0.458539962768555\n             ,0.688724040985107,0.428849041461945,0.584591865539551,0.843018114566803,0.354378879070282,0.404643177986145\n             ,0.87058699131012,0.227341398596764,0.436341762542725,0.728551387786865,0.287864476442337,0.621568083763123,0.494429767131805\n             ,-0.0934201404452324,0.864182770252228,0.401639640331268,-0.00309631112031639,0.915792524814606,0.32480525970459\n             ,-0.177078545093536,0.929055869579315,0.59909462928772,0.124072253704071,0.791006743907928,0.61716902256012,-0.00506624486297369\n             ,0.786814272403717,0.578135192394257,0.0218988731503487,0.815647065639496,0.616745948791504,-0.290956258773804\n             ,0.731415688991547,0.75023740530014,-0.238408371806145,0.616688966751099,0.775085091590881,-0.264017641544342\n             ,0.574053823947906,0.666223108768463,-0.303315341472626,0.681283056735992,0.75023740530014,-0.238408371806145\n             ,0.616688966751099,0.855076372623444,-0.165702432394028,0.491311639547348,0.872779548168182,-0.198945015668869\n             ,0.445731669664383,0.775085091590881,-0.264017641544342,0.574053823947906,0.476604402065277,-0.515640795230865\n             ,0.712013244628906,0.385886758565903,-0.746556282043457,0.541982591152191,0.425350964069366,-0.787436366081238\n             ,0.446117222309113,0.601338624954224,-0.55975753068924,0.570143282413483,0.385886758565903,-0.746556282043457\n             ,0.541982591152191,0.426225006580353,-0.76509952545166,0.482654064893723,0.408859342336655,-0.819536507129669\n             ,0.401489645242691,0.425350964069366,-0.787436366081238,0.446117222309113,0.892324268817902,-0.364589005708694\n             ,0.266143202781677,0.883809387683868,-0.290479838848114,0.366745710372925,0.868513345718384,-0.371388286352158\n             ,0.328260958194733,0.8774573802948,-0.435060352087021,0.201967760920525,0.868513345718384,-0.371388286352158\n             ,0.328260958194733,0.767249822616577,-0.595458924770355,0.23823593556881,0.807879209518433,-0.580146849155426\n             ,0.103734038770199,0.8774573802948,-0.435060352087021,0.201967760920525,0.807879209518433,-0.580146849155426\n             ,0.103734038770199,0.767249822616577,-0.595458924770355,0.23823593556881,0.630033671855927,-0.76368510723114\n             ,0.140863940119743,0.698544383049011,-0.714900195598602,0.0308788027614355,0.630033671855927,-0.76368510723114\n             ,0.140863940119743,0.545321881771088,-0.833433032035828,0.0895174741744995,0.600540995597839,-0.799374520778656\n             ,-0.0187329761683941,0.698544383049011,-0.714900195598602,0.0308788027614355,0.598369121551514,-0.00250658229924738\n             ,0.801216602325439,0.476604402065277,-0.515640795230865,0.712013244628906,0.601338624954224,-0.55975753068924\n             ,0.570143282413483,0.756793797016144,-0.0805434510111809,0.64867240190506,0.683284997940063,0.154697299003601\n             ,0.713575720787048,0.552154183387756,0.173749193549156,0.815436661243439,0.598369121551514,-0.00250658229924738\n             ,0.801216602325439,0.756793797016144,-0.0805434510111809,0.64867240190506,0.552154183387756,0.173749193549156\n             ,0.815436661243439,0.683284997940063,0.154697299003601,0.713575720787048,0.570054233074188,-0.200027942657471\n             ,0.796885788440704,0.362627446651459,-0.180693462491035,0.914249002933502,0.66197681427002,0.379794925451279\n             ,0.646175265312195,0.520368456840515,0.258096873760223,0.814004063606262,0.590947866439819,0.059150405228138\n             ,0.804538309574127,0.740522563457489,0.0606227926909924,0.6692915558815,0.399795055389404,-0.131603688001633\n             ,0.907107710838318,0.628606140613556,-0.0929744690656662,0.77214640378952,0.616745948791504,-0.290956258773804\n             ,0.731415688991547,0.381202667951584,-0.36025732755661,0.851410090923309,0.399795055389404,-0.131603688001633\n             ,0.907107710838318,0.381202667951584,-0.36025732755661,0.851410090923309,0.0599219687283039,-0.361293613910675\n             ,0.93052476644516,0.192558065056801,-0.101361930370331,0.976036429405212,0.381202667951584,-0.36025732755661\n             ,0.851410090923309,0.616745948791504,-0.290956258773804,0.731415688991547,0.666223108768463,-0.303315341472626\n             ,0.681283056735992,0.462689489126205,-0.42478209733963,0.778125107288361,0.279211044311523,-0.955691933631897\n             ,0.093242421746254,0.164180904626846,-0.958690702915192,0.232285901904106,0.225757539272308,-0.896350860595703\n             ,0.381560862064362,0.304768770933151,-0.92969423532486,0.206844300031662,0.026754243299365,0.843723058700562\n             ,0.53611159324646,-0.204613357782364,0.564212739467621,0.799873352050781,-0.00705753592774272,0.88813054561615\n             ,0.45953705906868,0.0228955876082182,0.892617464065552,0.450233042240143,-0.0965566337108612,0.382317036390305\n             ,0.918972492218018,0.104800805449486,0.884988248348236,0.453665733337402,-0.00705753592774272,0.88813054561615\n             ,0.45953705906868,-0.204613357782364,0.564212739467621,0.799873352050781,0.234877377748489,0.967058181762695\n             ,0.0981385260820389,0.216771319508553,0.955569624900818,0.199742004275322,-0.00705753592774272,0.88813054561615\n             ,0.45953705906868,0.104800805449486,0.884988248348236,0.453665733337402,0.143662974238396,0.945594608783722,0.29191067814827\n             ,0.0228955876082182,0.892617464065552,0.450233042240143,-0.00705753592774272,0.88813054561615,0.45953705906868\n             ,0.216771319508553,0.955569624900818,0.199742004275322,0.802525162696838,0.518118143081665,0.295815676450729\n             ,0.875872433185577,0.296488851308823,0.38071221113205,0.611026585102081,0.780639052391052,-0.131336376070976\n             ,0.466519266366959,0.882316112518311,0.0622739568352699,0.611026585102081,0.780639052391052,-0.131336376070976\n             ,0.123842000961304,0.97543865442276,-0.182160839438438,-0.427035480737686,0.790110290050507,-0.439734488725662\n             ,0.466519266366959,0.882316112518311,0.0622739568352699,0.247720703482628,0.139039516448975,0.95880264043808\n             ,0.463392287492752,0.731873750686646,0.499628275632858,0.450289756059647,0.883358836174011,0.130062907934189\n             ,0.450289756059647,0.883358836174011,0.130062907934189,-0.0188573095947504,0.503645062446594,0.863704860210419\n             ,0.247720703482628,0.139039516448975,0.95880264043808,0.123842000961304,0.97543865442276,-0.182160839438438,0.611026585102081\n             ,0.780639052391052,-0.131336376070976,0.450289756059647,0.883358836174011,0.130062907934189,0.463392287492752\n             ,0.731873750686646,0.499628275632858,0.875872433185577,0.296488851308823,0.38071221113205,0.785606920719147,0.572498440742493\n             ,0.234664186835289,0.450289756059647,0.883358836174011,0.130062907934189,0.611026585102081,0.780639052391052\n             ,-0.131336376070976,0.315801054239273,0.0731089860200882,0.946004629135132,-0.0188573095947504,0.503645062446594\n             ,0.863704860210419,0.450289756059647,0.883358836174011,0.130062907934189,0.785606920719147,0.572498440742493\n             ,0.234664186835289,0.247720703482628,0.139039516448975,0.95880264043808,-0.0188573095947504,0.503645062446594\n             ,0.863704860210419,-0.505003929138184,-0.526722073554993,0.683765232563019,0.101962603628635,-0.729668021202087\n             ,0.676156997680664,0.247720703482628,0.139039516448975,0.95880264043808,-0.505003929138184,-0.526722073554993\n             ,0.683765232563019,-0.505003929138184,-0.526722073554993,0.683765232563019,0.315801054239273,0.0731089860200882\n             ,0.946004629135132,0.139593034982681,-0.543097734451294,0.827984690666199,-0.350690484046936,-0.68567168712616\n             ,0.637863993644714,-0.505003929138184,-0.526722073554993,0.683765232563019,-0.0188573095947504,0.503645062446594\n             ,0.863704860210419,0.315801054239273,0.0731089860200882,0.946004629135132,-0.505003929138184,-0.526722073554993\n             ,0.683765232563019,-0.350690484046936,-0.68567168712616,0.637863993644714,0.101962603628635,-0.729668021202087\n             ,0.676156997680664,0.139593034982681,-0.543097734451294,0.827984690666199,0.34683957695961,-0.624991238117218\n             ,0.699348449707031,-0.219358518719673,-0.771041095256805,0.597810626029968,-0.350690484046936,-0.68567168712616\n             ,0.637863993644714,0.389301151037216,-0.589295387268066,0.707937479019165,-0.243915364146233,-0.739838838577271\n             ,0.627011835575104,-0.219358518719673,-0.771041095256805,0.597810626029968,0.34683957695961,-0.624991238117218\n             ,0.699348449707031,0.154463171958923,-0.632704854011536,0.758831799030304,0.220668077468872,-0.699356377124786\n             ,0.679857552051544,-0.219358518719673,-0.771041095256805,0.597810626029968,-0.243915364146233,-0.739838838577271\n             ,0.627011835575104,0.101962603628635,-0.729668021202087,0.676156997680664,-0.350690484046936,-0.68567168712616\n             ,0.637863993644714,-0.219358518719673,-0.771041095256805,0.597810626029968,0.220668077468872,-0.699356377124786\n             ,0.679857552051544,0.389301151037216,-0.589295387268066,0.707937479019165,0.317214041948318,-0.645033359527588\n             ,0.695202946662903,-0.307040005922318,-0.765494167804718,0.565460085868835,-0.243915364146233,-0.739838838577271\n             ,0.627011835575104,0.152485489845276,-0.706423759460449,0.691168308258057,-0.368264228105545,-0.82679408788681\n             ,0.425197541713715,-0.307040005922318,-0.765494167804718,0.565460085868835,0.317214041948318,-0.645033359527588\n             ,0.695202946662903,-0.15265741944313,-0.753475069999695,0.639508426189423,0.0443188734352589,-0.657264351844788\n             ,0.752355933189392,-0.307040005922318,-0.765494167804718,0.565460085868835,-0.368264228105545,-0.82679408788681\n             ,0.425197541713715,0.154463171958923,-0.632704854011536,0.758831799030304,-0.243915364146233,-0.739838838577271\n             ,0.627011835575104,-0.307040005922318,-0.765494167804718,0.565460085868835,0.0443188734352589,-0.657264351844788\n             ,0.752355933189392,-0.368264228105545,-0.82679408788681,0.425197541713715,0.152485489845276,-0.706423759460449\n             ,0.691168308258057,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.332527428865433,-0.892948389053345\n             ,0.303428173065186,-0.368264228105545,-0.82679408788681,0.425197541713715,-0.332527428865433,-0.892948389053345\n             ,0.303428173065186,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.15265741944313,-0.753475069999695\n             ,0.639508426189423,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.0138667495921254,-0.712914168834686\n             ,0.701114177703857,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.332527428865433,-0.892948389053345\n             ,0.303428173065186,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0965530276298523,-0.965101063251495\n             ,0.243428528308868,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.0138667495921254,-0.712914168834686\n             ,0.701114177703857,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.261559337377548,-0.96132493019104\n             ,0.086262010037899,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.0965530276298523,-0.965101063251495\n             ,0.243428528308868,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.332527428865433,-0.892948389053345\n             ,0.303428173065186,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.261559337377548,-0.96132493019104\n             ,0.086262010037899,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.0965530276298523,-0.965101063251495\n             ,0.243428528308868,0.0694410875439644,-0.971313714981079,0.227437034249306,0.139529138803482,-0.986220002174377\n             ,-0.0888914614915848,-0.0252817086875439,-0.707010686397552,0.706750750541687,0.0366746000945568,-0.755166232585907\n             ,0.654506683349609,0.0694410875439644,-0.971313714981079,0.227437034249306,-0.0965530276298523,-0.965101063251495\n             ,0.243428528308868,0.206430405378342,-0.778748571872711,0.592399477958679,0.311435610055923,-0.928014516830444\n             ,0.204443141818047,0.0694410875439644,-0.971313714981079,0.227437034249306,0.0366746000945568,-0.755166232585907\n             ,0.654506683349609,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.139529138803482,-0.986220002174377\n             ,-0.0888914614915848,0.0694410875439644,-0.971313714981079,0.227437034249306,0.311435610055923,-0.928014516830444\n             ,0.204443141818047,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.311435610055923,-0.928014516830444\n             ,0.204443141818047,0.517510056495667,-0.833824872970581,0.192144423723221,0.494486898183823,-0.83785080909729\n             ,0.231276199221611,0.206430405378342,-0.778748571872711,0.592399477958679,0.314119011163712,-0.739236891269684\n             ,0.595699608325958,0.517510056495667,-0.833824872970581,0.192144423723221,0.311435610055923,-0.928014516830444\n             ,0.204443141818047,0.360629975795746,-0.702259659767151,0.613821983337402,0.494486898183823,-0.83785080909729\n             ,0.231276199221611,0.517510056495667,-0.833824872970581,0.192144423723221,0.626789748668671,-0.749257385730743\n             ,0.213887751102448,0.194313436746597,-0.80370157957077,0.562410891056061,0.115422785282135,-0.952069759368896\n             ,0.283268004655838,0.0416775047779083,-0.927180886268616,0.372288316488266,0.209196627140045,-0.665287017822266\n             ,0.716679811477661,0.292688071727753,-0.580336809158325,0.759962379932404,0.340945303440094,-0.698488175868988\n             ,0.629182457923889,0.194313436746597,-0.80370157957077,0.562410891056061,0.209196627140045,-0.665287017822266\n             ,0.716679811477661,0.340945303440094,-0.698488175868988,0.629182457923889,0.353568494319916,-0.776771426200867\n             ,0.521167457103729,0.225757539272308,-0.896350860595703,0.381560862064362,0.194313436746597,-0.80370157957077\n             ,0.562410891056061,0.402090311050415,-0.284287929534912,0.870346903800964,0.353568494319916,-0.776771426200867\n             ,0.521167457103729,0.340945303440094,-0.698488175868988,0.629182457923889,0.431166082620621,-0.246951669454575\n             ,0.867819547653198,0.414541780948639,0.400993496179581,0.816920638084412,0.491490423679352,0.244152218103409\n             ,0.835958659648895,0.498867928981781,0.236602708697319,0.833756506443024,0.37644562125206,0.38054347038269,0.844674706459045\n             ,0.471029788255692,0.166954964399338,0.86617374420166,0.498867928981781,0.236602708697319,0.833756506443024,0.491490423679352\n             ,0.244152218103409,0.835958659648895,0.168070778250694,-0.457133919000626,0.873373210430145,-0.00835443940013647\n             ,-0.52916145324707,0.848480045795441,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.184710487723351\n             ,-0.617817997932434,0.764318585395813,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.189460039138794\n             ,-0.647004544734955,0.738572955131531,0.286647915840149,-0.584438979625702,0.759120643138886,0.184710487723351\n             ,-0.617817997932434,0.764318585395813,0.615384101867676,0.0611244365572929,0.785853803157806,0.668389976024628\n             ,-0.0383556596934795,0.742821395397186,0.593307375907898,-0.0775594636797905,0.801230847835541,0.578135192394257\n             ,0.0218988731503487,0.815647065639496,0.61716902256012,-0.00506624486297369,0.786814272403717,0.652630388736725\n             ,-0.0358134843409061,0.756829559803009,0.620820641517639,-0.00240864953957498,0.783948957920074,0.724583506584167\n             ,-0.0711281225085258,0.685506820678711,0.740868389606476,0.000323399232001975,0.671650171279907,0.636694431304932\n             ,0.0437434837222099,0.769874513149261,0.724583506584167,-0.0711281225085258,0.685506820678711,0.802095234394073\n             ,-0.0203569829463959,0.596849083900452,0.825742661952972,-0.0501102656126022,0.561816692352295,0.740868389606476\n             ,0.000323399232001975,0.671650171279907,0.189460039138794,-0.647004544734955,0.738572955131531,0.598259091377258\n             ,-0.415802270174026,0.684977769851685,0.659502923488617,-0.421348959207535,0.622511804103851,0.381202667951584\n             ,-0.36025732755661,0.851410090923309,0.462689489126205,-0.42478209733963,0.778125107288361,-0.00835443940013647\n             ,-0.52916145324707,0.848480045795441,0.0599219687283039,-0.361293613910675,0.93052476644516,0.41924661397934\n             ,0.116037733852863,0.90042632818222,0.452132165431976,-0.0737369656562805,0.888897836208344,0.399795055389404\n             ,-0.131603688001633,0.907107710838318,0.192558065056801,-0.101361930370331,0.976036429405212,0.452132165431976\n             ,-0.0737369656562805,0.888897836208344,0.605580151081085,-0.127637818455696,0.785481572151184,0.628606140613556\n             ,-0.0929744690656662,0.77214640378952,0.399795055389404,-0.131603688001633,0.907107710838318,0.321778655052185\n             ,0.226275533437729,0.919379055500031,0.41924661397934,0.116037733852863,0.90042632818222,0.192558065056801,-0.101361930370331\n             ,0.976036429405212,0.321778655052185,0.226275533437729,0.919379055500031,0.192558065056801,-0.101361930370331\n             ,0.976036429405212,0.315801054239273,0.0731089860200882,0.946004629135132,0.720236837863922,0.181686788797379\n             ,0.669513881206512,0.656306624412537,0.257158219814301,0.709317445755005,0.875872433185577,0.296488851308823\n             ,0.38071221113205,0.315801054239273,0.0731089860200882,0.946004629135132,0.785606920719147,0.572498440742493\n             ,0.234664186835289,0.875872433185577,0.296488851308823,0.38071221113205,0.656306624412537,0.257158219814301,0.709317445755005\n             ,0.41924661397934,0.116037733852863,0.90042632818222,0.321778655052185,0.226275533437729,0.919379055500031,0.479255974292755\n             ,0.34857839345932,0.805485486984253,0.528464257717133,0.246433109045029,0.812401533126831,0.315801054239273,0.0731089860200882\n             ,0.946004629135132,0.656306624412537,0.257158219814301,0.709317445755005,0.479255974292755,0.34857839345932,0.805485486984253\n             ,0.321778655052185,0.226275533437729,0.919379055500031,0.720236837863922,0.181686788797379,0.669513881206512\n             ,0.528464257717133,0.246433109045029,0.812401533126831,0.479255974292755,0.34857839345932,0.805485486984253,0.656306624412537\n             ,0.257158219814301,0.709317445755005,0.525402009487152,0.0301267635077238,0.85032057762146,0.529063761234283\n             ,-0.0630637779831886,0.846235513687134,0.452132165431976,-0.0737369656562805,0.888897836208344,0.41924661397934\n             ,0.116037733852863,0.90042632818222,0.529063761234283,-0.0630637779831886,0.846235513687134,0.627576470375061\n             ,-0.135800153017044,0.766619920730591,0.605580151081085,-0.127637818455696,0.785481572151184,0.452132165431976\n             ,-0.0737369656562805,0.888897836208344,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.994033694267273\n             ,0.107649877667427,-0.0175654906779528,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.749779462814331\n             ,-0.631075918674469,-0.198931902647018,-0.474541693925858,-0.67278927564621,0.567595541477203,-0.493718534708023\n             ,-0.839366674423218,0.227388679981232,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.994033694267273\n             ,0.107649877667427,-0.0175654906779528,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.741096556186676\n             ,-0.649701416492462,-0.169304147362709,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.493718534708023\n             ,-0.839366674423218,0.227388679981232,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.749779462814331\n             ,-0.631075918674469,-0.198931902647018,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.655008316040039\n             ,-0.755039751529694,0.029649443924427,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.834057211875916\n             ,-0.216860771179199,-0.50726717710495,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.507226884365082\n             ,-0.292785495519638,-0.810553848743439,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.637578308582306\n             ,0.271278858184814,-0.721042096614838,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.757471144199371\n             ,0.2759148478508,-0.591699600219727,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.507226884365082\n             ,-0.292785495519638,-0.810553848743439,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.72423392534256\n             ,0.108453460037708,-0.680972158908844,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.757471144199371\n             ,0.2759148478508,-0.591699600219727,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.637578308582306\n             ,0.271278858184814,-0.721042096614838,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.72423392534256\n             ,0.108453460037708,-0.680972158908844,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.690762042999268\n             ,-0.452603310346603,-0.563913226127625,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.757471144199371\n             ,0.2759148478508,-0.591699600219727,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.934147357940674\n             ,0.162888333201408,-0.317546963691711,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.843048751354218\n             ,-0.0439708046615124,-0.536036670207977,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.757471144199371\n             ,0.2759148478508,-0.591699600219727,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.843048751354218\n             ,-0.0439708046615124,-0.536036670207977,0.443391680717468,-0.0999263972043991,0.89074045419693,0.164051368832588\n             ,-0.273042142391205,0.947910964488983,0.121470481157303,-0.391699403524399,0.912039756774902,0.252335846424103\n             ,0.330343335866928,0.909505307674408,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0613121353089809\n             ,-0.89322817325592,0.445403426885605,-0.00129488680977374,-0.888734400272369,0.458420634269714,0.0125365713611245\n             ,-0.668434202671051,0.743665635585785,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,0.00571701768785715\n             ,-0.999931693077087,-0.0101942336186767,-0.00129488680977374,-0.888734400272369,0.458420634269714,-0.0613121353089809\n             ,-0.89322817325592,0.445403426885605,0.191416949033737,-0.0921172648668289,0.977176547050476,0.0600041374564171\n             ,-0.192453533411026,0.979469835758209,0.171075537800789,-0.616661608219147,0.768415033817291,0.164827063679695\n             ,-0.547387719154358,0.820486903190613,0.0592407323420048,-0.802932441234589,0.593118906021118,-0.05385497584939\n             ,-0.996109485626221,0.06975357234478,-0.217067420482636,-0.972187459468842,0.0879386737942696,0.0574505962431431\n             ,-0.838245630264282,0.542257905006409,0.0592407323420048,-0.802932441234589,0.593118906021118,0.0574505962431431\n             ,-0.838245630264282,0.542257905006409,0.217255920171738,-0.631381034851074,0.744417786598206,0.114735066890717\n             ,-0.656680226325989,0.745390474796295,0.0574505962431431,-0.838245630264282,0.542257905006409,-0.217067420482636\n             ,-0.972187459468842,0.0879386737942696,-0.304188013076782,-0.938978254795074,0.160591080784798,0.0620634108781815\n             ,-0.851760566234589,0.520242273807526,0.0574505962431431,-0.838245630264282,0.542257905006409,0.0620634108781815\n             ,-0.851760566234589,0.520242273807526,0.34566730260849,-0.589025497436523,0.73045402765274,0.217255920171738\n             ,-0.631381034851074,0.744417786598206,0.0620634108781815,-0.851760566234589,0.520242273807526,-0.304188013076782\n             ,-0.938978254795074,0.160591080784798,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.127903699874878\n             ,-0.852072358131409,0.507556319236755,0.0620634108781815,-0.851760566234589,0.520242273807526,-0.127903699874878\n             ,-0.852072358131409,0.507556319236755,0.266091585159302,-0.603160440921783,0.751926004886627,0.34566730260849\n             ,-0.589025497436523,0.73045402765274,0.827663242816925,0.523418128490448,0.202501967549324,0.778178691864014\n             ,0.616257607936859,0.121097095310688,0.713096976280212,0.68854147195816,-0.131921663880348,0.662245333194733\n             ,0.742432057857513,-0.101122446358204,0.650610029697418,0.750839710235596,0.113781958818436,0.804373443126678\n             ,0.392295897006989,0.446191996335983,0.827663242816925,0.523418128490448,0.202501967549324,0.662245333194733\n             ,0.742432057857513,-0.101122446358204,0.33390274643898,0.823867678642273,-0.457985788583755,0.35404372215271\n             ,0.848205924034119,-0.393953949213028,0.662245333194733,0.742432057857513,-0.101122446358204,0.713096976280212\n             ,0.68854147195816,-0.131921663880348,0.401338756084442,0.891479909420013,-0.210216000676155,0.650610029697418\n             ,0.750839710235596,0.113781958818436,0.662245333194733,0.742432057857513,-0.101122446358204,0.35404372215271\n             ,0.848205924034119,-0.393953949213028,0.33390274643898,0.823867678642273,-0.457985788583755,-0.299774140119553\n             ,0.750125706195831,-0.589446246623993,-0.325168341398239,0.677460372447968,-0.659782588481903,0.35404372215271\n             ,0.848205924034119,-0.393953949213028,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.903453350067139\n             ,0.0792897418141365,-0.421289950609207,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.299774140119553\n             ,0.750125706195831,-0.589446246623993,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.19065423309803\n             ,0.753101229667664,-0.629674077033997,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.903453350067139\n             ,0.0792897418141365,-0.421289950609207,0.401338756084442,0.891479909420013,-0.210216000676155,0.35404372215271\n             ,0.848205924034119,-0.393953949213028,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.19065423309803\n             ,0.753101229667664,-0.629674077033997,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.749875366687775\n             ,0.181030079722404,-0.636329352855682,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.631305754184723\n             ,0.608145177364349,-0.481261342763901,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.812742531299591\n             ,0.259539633989334,-0.521621286869049,-0.903453350067139,0.0792897418141365,-0.421289950609207,-0.749875366687775\n             ,0.181030079722404,-0.636329352855682,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.384992688894272\n             ,0.544456601142883,-0.745216548442841,-0.719125330448151,0.296634525060654,-0.628384232521057,0.370056182146072\n             ,0.811048626899719,-0.453054636716843,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.384992688894272\n             ,0.544456601142883,-0.745216548442841,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.877584159374237\n             ,0.190617814660072,-0.439898729324341,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.384992688894272\n             ,0.544456601142883,-0.745216548442841,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.878701210021973\n             ,-0.298690170049667,-0.372382044792175,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.903518497943878\n             ,-0.0541667006909847,-0.425112038850784,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903518497943878\n             ,-0.0541667006909847,-0.425112038850784,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.946641564369202\n             ,0.0270117726176977,-0.321154475212097,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.903518497943878\n             ,-0.0541667006909847,-0.425112038850784,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.929068803787231\n             ,-0.0690155401825905,-0.363411635160446,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.889417350292206\n             ,0.00984347611665726,-0.456990003585815,-0.903518497943878,-0.0541667006909847,-0.425112038850784,0.370056182146072\n             ,0.811048626899719,-0.453054636716843,-0.817673206329346,0.400343358516693,-0.413685619831085,-0.914967000484467\n             ,-0.0528537072241306,-0.400052279233933,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.878701210021973\n             ,-0.298690170049667,-0.372382044792175,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.914967000484467\n             ,-0.0528537072241306,-0.400052279233933,-0.817673206329346,0.400343358516693,-0.413685619831085,-0.877584159374237\n             ,0.190617814660072,-0.439898729324341,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.914967000484467\n             ,-0.0528537072241306,-0.400052279233933,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903453350067139\n             ,0.0792897418141365,-0.421289950609207,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.563491344451904\n             ,0.231473565101624,-0.793030619621277,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.469266027212143\n             ,-0.852578699588776,0.229997724294662,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.339177936315537\n             ,-0.843130052089691,0.417241036891937,-0.339177936315537,-0.843130052089691,0.417241036891937,-0.493718534708023\n             ,-0.839366674423218,0.227388679981232,-0.474541693925858,-0.67278927564621,0.567595541477203,0.0940685495734215\n             ,-0.732769310474396,0.673943758010864,0.656731724739075,-0.381447851657867,0.650538980960846,0.681784629821777\n             ,-0.285219341516495,0.673661351203918,0.629800915718079,-0.358788877725601,0.68892765045166,0.656731724739075\n             ,-0.381447851657867,0.650538980960846,0.629800915718079,-0.358788877725601,0.68892765045166,0.680992484092712\n             ,-0.305005490779877,0.665748357772827,0.678119361400604,-0.318360239267349,0.662420451641083,0.857260406017303\n             ,0.312566876411438,0.409153461456299,0.855352699756622,0.226547658443451,0.46588408946991,0.741662085056305,0.344577699899673\n             ,0.575502872467041,0.813006162643433,0.437411576509476,0.384307235479355,0.426225006580353,-0.76509952545166\n             ,0.482654064893723,0.361090242862701,-0.862221240997314,0.355229914188385,0.369030982255936,-0.873893618583679\n             ,0.316427052021027,0.408859342336655,-0.819536507129669,0.401489645242691,0.361090242862701,-0.862221240997314\n             ,0.355229914188385,0.193085044622421,-0.95480340719223,0.225983783602715,0.225613579154015,-0.956868171691895\n             ,0.183034926652908,0.369030982255936,-0.873893618583679,0.316427052021027,0.545321881771088,-0.833433032035828\n             ,0.0895174741744995,0.471000701189041,-0.846986770629883,0.246519237756729,0.42274335026741,-0.887621939182281\n             ,0.182798534631729,0.465096980333328,-0.885112583637238,0.016138968989253,0.42274335026741,-0.887621939182281\n             ,0.182798534631729,0.263781130313873,-0.963467478752136,0.0463673323392868,0.283746033906937,-0.948122382164001\n             ,-0.143360316753387,0.465096980333328,-0.885112583637238,0.016138968989253,0.283746033906937,-0.948122382164001\n             ,-0.143360316753387,0.263781130313873,-0.963467478752136,0.0463673323392868,0.158431231975555,-0.986164569854736\n             ,-0.0487753190100193,0.164555922150612,-0.956649422645569,-0.240298211574554,0.158431231975555,-0.986164569854736\n             ,-0.0487753190100193,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.0633370503783226,-0.944429814815521\n             ,-0.322553485631943,0.164555922150612,-0.956649422645569,-0.240298211574554,0.361090242862701,-0.862221240997314\n             ,0.355229914188385,0.426225006580353,-0.76509952545166,0.482654064893723,0.295715004205704,-0.771513819694519\n             ,0.56331080198288,0.233462005853653,-0.895743429660797,0.378337532281876,0.193085044622421,-0.95480340719223\n             ,0.225983783602715,0.361090242862701,-0.862221240997314,0.355229914188385,0.233462005853653,-0.895743429660797\n             ,0.378337532281876,0.295715004205704,-0.771513819694519,0.56331080198288,0.0651562884449959,-0.780692636966705\n             ,0.62150913476944,0.050213560461998,-0.91094309091568,0.409464567899704,0.233462005853653,-0.895743429660797\n             ,0.378337532281876,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.0628481134772301,-0.906862795352936\n             ,0.416713327169418,0.050213560461998,-0.91094309091568,0.409464567899704,0.0651562884449959,-0.780692636966705\n             ,0.62150913476944,-0.0727874711155891,-0.98180228471756,0.1754030585289,0.0766859278082848,-0.975562393665314\n             ,0.205905899405479,0.050213560461998,-0.91094309091568,0.409464567899704,-0.0628481134772301,-0.906862795352936\n             ,0.416713327169418,0.193085044622421,-0.95480340719223,0.225983783602715,0.233462005853653,-0.895743429660797\n             ,0.378337532281876,0.050213560461998,-0.91094309091568,0.409464567899704,0.0766859278082848,-0.975562393665314\n             ,0.205905899405479,-0.0777209997177124,-0.922415435314178,-0.378297746181488,0.0633370503783226,-0.944429814815521\n             ,-0.322553485631943,0.0663259923458099,-0.98754096031189,-0.14270156621933,-0.0788524150848389,-0.974068284034729\n             ,-0.212069168686867,0.684517562389374,-0.439017295837402,0.581978976726532,0.688922643661499,-0.305572867393494\n             ,0.657275319099426,0.844530344009399,-0.306019067764282,0.4394551217556,0.789786696434021,-0.370871901512146\n             ,0.488560140132904,0.844530344009399,-0.306019067764282,0.4394551217556,0.688922643661499,-0.305572867393494\n             ,0.657275319099426,0.750554323196411,-0.229917243123055,0.619521021842957,0.926659166812897,-0.245477139949799\n             ,0.284681916236877,0.897057175636292,-0.352101475000381,0.267044723033905,0.844530344009399,-0.306019067764282\n             ,0.4394551217556,0.926659166812897,-0.245477139949799,0.284681916236877,0.927076876163483,-0.29800683259964,0.227421119809151\n             ,0.640791594982147,-0.766526699066162,0.0426960773766041,0.705848097801209,-0.694441199302673,0.13974928855896\n             ,0.727549016475677,-0.679640352725983,0.0936024785041809,0.638466238975525,-0.769491136074066,0.0156274978071451\n             ,0.693672001361847,-0.686315536499023,0.218609541654587,0.772367715835571,-0.599683940410614,0.209349811077118\n             ,0.727549016475677,-0.679640352725983,0.0936024785041809,0.705848097801209,-0.694441199302673,0.13974928855896\n             ,0.756793797016144,-0.0805434510111809,0.64867240190506,0.821784615516663,-0.261638671159744,0.506177127361298\n             ,0.792236804962158,-0.0960670188069344,0.602604329586029,0.70995169878006,-0.557043075561523,0.430896311998367\n             ,0.821784615516663,-0.261638671159744,0.506177127361298,0.756793797016144,-0.0805434510111809,0.64867240190506\n             ,0.601338624954224,-0.55975753068924,0.570143282413483,0.471000701189041,-0.846986770629883,0.246519237756729\n             ,0.539758801460266,-0.780041754245758,0.316536396741867,0.425350964069366,-0.787436366081238,0.446117222309113\n             ,0.408859342336655,-0.819536507129669,0.401489645242691,0.70995169878006,-0.557043075561523,0.430896311998367\n             ,0.601338624954224,-0.55975753068924,0.570143282413483,0.425350964069366,-0.787436366081238,0.446117222309113\n             ,0.539758801460266,-0.780041754245758,0.316536396741867,0.263781130313873,-0.963467478752136,0.0463673323392868\n             ,0.42274335026741,-0.887621939182281,0.182798534631729,0.369030982255936,-0.873893618583679,0.316427052021027\n             ,0.225613579154015,-0.956868171691895,0.183034926652908,0.471000701189041,-0.846986770629883,0.246519237756729\n             ,0.408859342336655,-0.819536507129669,0.401489645242691,0.369030982255936,-0.873893618583679,0.316427052021027\n             ,0.42274335026741,-0.887621939182281,0.182798534631729,0.0663259923458099,-0.98754096031189,-0.14270156621933\n             ,0.158431231975555,-0.986164569854736,-0.0487753190100193,0.128954827785492,-0.985570788383484,0.109639815986156\n             ,0.0500960312783718,-0.998004376888275,0.0384394414722919,0.263781130313873,-0.963467478752136,0.0463673323392868\n             ,0.225613579154015,-0.956868171691895,0.183034926652908,0.128954827785492,-0.985570788383484,0.109639815986156\n             ,0.158431231975555,-0.986164569854736,-0.0487753190100193,-0.0788524150848389,-0.974068284034729,-0.212069168686867\n             ,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.0500960312783718,-0.998004376888275,0.0384394414722919\n             ,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.0727874711155891,-0.98180228471756,0.1754030585289\n             ,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,0.0500960312783718,-0.998004376888275,0.0384394414722919\n             ,0.8774573802948,-0.435060352087021,0.201967760920525,0.807879209518433,-0.580146849155426,0.103734038770199\n             ,0.772367715835571,-0.599683940410614,0.209349811077118,0.785579741001129,-0.492246091365814,0.374910920858383\n             ,0.789786696434021,-0.370871901512146,0.488560140132904,0.892324268817902,-0.364589005708694,0.266143202781677\n             ,0.8774573802948,-0.435060352087021,0.201967760920525,0.785579741001129,-0.492246091365814,0.374910920858383\n             ,0.693672001361847,-0.686315536499023,0.218609541654587,0.689838171005249,-0.617681860923767,0.377614080905914\n             ,0.785579741001129,-0.492246091365814,0.374910920858383,0.772367715835571,-0.599683940410614,0.209349811077118\n             ,0.684517562389374,-0.439017295837402,0.581978976726532,0.789786696434021,-0.370871901512146,0.488560140132904\n             ,0.785579741001129,-0.492246091365814,0.374910920858383,0.689838171005249,-0.617681860923767,0.377614080905914\n             ,0.813478171825409,-0.273027837276459,0.513526141643524,0.887543320655823,-0.171314582228661,0.427689343690872\n             ,0.651034355163574,-0.303375482559204,0.695785582065582,0.691827952861786,-0.359834015369415,0.626013994216919\n             ,0.683746695518494,-0.463673830032349,0.563468754291534,0.813478171825409,-0.273027837276459,0.513526141643524\n             ,0.691827952861786,-0.359834015369415,0.626013994216919,0.780404269695282,-0.392066359519959,0.487086415290833\n             ,0.683746695518494,-0.463673830032349,0.563468754291534,0.780404269695282,-0.392066359519959,0.487086415290833\n             ,0.810256838798523,-0.430587977170944,0.397590130567551,0.629647791385651,-0.52997088432312,0.568044483661652\n             ,-0.127903699874878,-0.852072358131409,0.507556319236755,-0.377608895301819,-0.90075010061264,0.214617609977722\n             ,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.339177936315537,-0.843130052089691,0.417241036891937\n             ,-0.127903699874878,-0.852072358131409,0.507556319236755,-0.339177936315537,-0.843130052089691,0.417241036891937\n             ,0.0940685495734215,-0.732769310474396,0.673943758010864,0.266091585159302,-0.603160440921783,0.751926004886627\n             ,0.553863286972046,-0.30215710401535,0.77584570646286,0.266091585159302,-0.603160440921783,0.751926004886627\n             ,0.0940685495734215,-0.732769310474396,0.673943758010864,0.525104641914368,-0.419060587882996,0.740711390972137\n             ,0.553863286972046,-0.30215710401535,0.77584570646286,0.525104641914368,-0.419060587882996,0.740711390972137\n             ,0.588271081447601,-0.259690821170807,0.765831470489502,0.607095539569855,-0.200262412428856,0.768979847431183\n             ,0.546967387199402,0.0579036511480808,0.835148990154266,0.568371534347534,0.0187626089900732,0.822558045387268\n             ,0.601098597049713,0.0911194980144501,0.793963313102722,0.565106153488159,0.017743531614542,0.824827373027802\n             ,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.301303088665009,-0.716448962688446,0.629219651222229\n             ,0.411182582378387,-0.842439949512482,0.348172098398209,0.117540158331394,-0.936730265617371,0.329728245735168\n             ,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.117540158331394,-0.936730265617371,0.329728245735168\n             ,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.0433456413447857,-0.716439366340637,0.696301460266113\n             ,0.44965198636055,0.140096634626389,0.882148504257202,0.56849592924118,-0.125116035342216,0.813116490840912,0.416703939437866\n             ,-0.0255245417356491,0.908683836460114,0.218448147177696,-0.859921038150787,0.461320102214813,0.190928906202316\n             ,-0.824125647544861,0.533257067203522,0.301912575960159,-0.736388921737671,0.605458617210388,0.423061966896057\n             ,-0.638191282749176,0.643218815326691,0.350974529981613,-0.540442049503326,0.764682471752167,0.461174815893173\n             ,-0.519026458263397,0.719673037528992,0.301912575960159,-0.736388921737671,0.605458617210388,0.190928906202316\n             ,-0.824125647544861,0.533257067203522,0.56849592924118,-0.125116035342216,0.813116490840912,0.423061966896057\n             ,-0.638191282749176,0.643218815326691,0.301912575960159,-0.736388921737671,0.605458617210388,0.461174815893173\n             ,-0.519026458263397,0.719673037528992,0.633136808872223,-0.0669011846184731,0.771143317222595,0.655753970146179\n             ,-0.0819050073623657,0.750518679618835,0.501314342021942,-0.180266559123993,0.846278846263886,0.421490222215652\n             ,-0.217597857117653,0.880339205265045,0.345462441444397,-0.298967152833939,0.889536023139954,0.578185617923737\n             ,-0.0845057815313339,0.811517179012299,0.633136808872223,-0.0669011846184731,0.771143317222595,0.421490222215652\n             ,-0.217597857117653,0.880339205265045,0.523068964481354,-0.400331109762192,0.752418637275696,0.511712968349457\n             ,-0.26713839173317,0.816570222377777,0.443391680717468,-0.0999263972043991,0.89074045419693,0.515636503696442\n             ,-0.41490975022316,0.749645829200745,0.7577885389328,0.376234740018845,0.533107817173004,0.740872263908386,0.260281056165695\n             ,0.619162321090698,0.750837445259094,-0.0367836877703667,0.659461975097656,0.758135914802551,0.0851427242159843\n             ,0.646514236927032,0.740872263908386,0.260281056165695,0.619162321090698,0.558381021022797,0.167118594050407\n             ,0.812577426433563,0.488678455352783,-0.257274806499481,0.833668410778046,0.750837445259094,-0.0367836877703667\n             ,0.659461975097656,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.377608895301819,-0.90075010061264\n             ,0.214617609977722,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.696032464504242,-0.619228482246399\n             ,-0.363448590040207,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.696032464504242,-0.619228482246399\n             ,-0.363448590040207,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.728337526321411,0.0211671013385057\n             ,-0.684891521930695,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.728337526321411,0.0211671013385057\n             ,-0.684891521930695,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.572831332683563,0.0232040770351887\n             ,-0.819344758987427,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.572831332683563,0.0232040770351887\n             ,-0.819344758987427,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.392845422029495,-0.17293743789196\n             ,-0.903197169303894,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.72423392534256,0.108453460037708\n             ,-0.680972158908844,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.749779462814331,-0.631075918674469\n             ,-0.198931902647018,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.731875240802765,-0.356860965490341\n             ,-0.580524682998657,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.72423392534256,0.108453460037708\n             ,-0.680972158908844,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.749779462814331,-0.631075918674469\n             ,-0.198931902647018,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.731875240802765,-0.356860965490341\n             ,-0.580524682998657,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.970641255378723,0.0346399769186974\n             ,-0.238024458289146,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.946641564369202,0.0270117726176977\n             ,-0.321154475212097,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.83115953207016,0.347447574138641\n             ,0.434112966060638,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.970641255378723,0.0346399769186974\n             ,-0.238024458289146,-0.634040713310242,0.756764888763428,0.159057512879372,-0.945308268070221,0.226358875632286\n             ,-0.234848886728287,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.83115953207016,0.347447574138641\n             ,0.434112966060638,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.946641564369202,0.0270117726176977\n             ,-0.321154475212097,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.945308268070221,0.226358875632286\n             ,-0.234848886728287,0.0454688854515553,-0.765503704547882,0.641822934150696,0.0821766927838326,-0.66467010974884\n             ,0.742603957653046,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.915560901165009,-0.141839787364006\n             ,0.376337260007858,0.956220626831055,-0.152332276105881,0.249873846769333,0.970759510993958,-0.233238592743874\n             ,0.056795421987772,0.920036554336548,-0.30953249335289,0.240254893898964,0.915560901165009,-0.141839787364006\n             ,0.376337260007858,0.920036554336548,-0.30953249335289,0.240254893898964,0.840808868408203,-0.369773417711258\n             ,0.395358175039291,0.820341229438782,-0.113342881202698,0.560529828071594,0.639384806156158,-0.761013865470886\n             ,0.109749406576157,0.65738570690155,-0.752218425273895,0.0448495484888554,0.55375200510025,-0.828931510448456\n             ,-0.0789381936192513,0.575045108795166,-0.818020403385162,0.0128742791712284,0.65738570690155,-0.752218425273895\n             ,0.0448495484888554,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.501666784286499,-0.849441289901733\n             ,-0.163646027445793,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.55375200510025,-0.828931510448456\n             ,-0.0789381936192513,0.499172002077103,-0.857490539550781,-0.124648600816727,0.537862658500671,-0.839294493198395\n             ,-0.0793002098798752,0.575045108795166,-0.818020403385162,0.0128742791712284,-0.032355971634388,-0.99692964553833\n             ,0.0713044255971909,0.155652940273285,-0.987067878246307,0.0383299365639687,0.168408244848251,-0.974918007850647\n             ,0.145511314272881,-0.036917757242918,-0.99125212430954,0.126713573932648,0.168408244848251,-0.974918007850647\n             ,0.145511314272881,0.155652940273285,-0.987067878246307,0.0383299365639687,0.279211044311523,-0.955691933631897\n             ,0.093242421746254,0.304768770933151,-0.92969423532486,0.206844300031662,0.741662085056305,0.344577699899673\n             ,0.575502872467041,0.814013004302979,0.416528642177582,0.404829293489456,0.854046881198883,0.485713124275208\n             ,0.186243653297424,0.813006162643433,0.437411576509476,0.384307235479355,0.793840944766998,0.179479137063026\n             ,0.581036806106567,0.776109874248505,0.274881482124329,0.567532956600189,0.864675521850586,0.193993464112282\n             ,0.46336030960083,0.776109874248505,0.274881482124329,0.567532956600189,0.815548717975616,0.273398518562317,0.510032892227173\n             ,0.864675521850586,0.193993464112282,0.46336030960083,0.894858956336975,-0.0870964974164963,0.437768936157227\n             ,0.834977984428406,0.275511413812637,0.47634568810463,0.813101530075073,0.281051158905029,0.509780466556549,0.693030059337616\n             ,-0.0411044172942638,0.71973592042923,0.717148721218109,-0.158668875694275,0.678617656230927,0.738801121711731\n             ,-0.260166734457016,0.6216801404953,0.881620466709137,-0.332029432058334,0.335412949323654,0.894858956336975\n             ,-0.0870964974164963,0.437768936157227,0.717148721218109,-0.158668875694275,0.678617656230927,0.885035216808319\n             ,0.393218964338303,0.249181613326073,0.813006162643433,0.437411576509476,0.384307235479355,0.854046881198883\n             ,0.485713124275208,0.186243653297424,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.109049446880817\n             ,0.0514820925891399,0.992702305316925,0.54212898015976,0.215727955102921,0.812131583690643,0.470013290643692\n             ,0.212332352995873,0.856739461421967,0.0144113004207611,0.0269631575793028,0.999532520771027,0.779178857803345\n             ,0.328662276268005,0.533724129199982,0.749379277229309,0.298672914505005,0.590952754020691,0.776918292045593\n             ,0.306892603635788,0.549740731716156,0.791379868984222,0.358002513647079,0.495532125234604,0.749379277229309\n             ,0.298672914505005,0.590952754020691,0.776109874248505,0.274881482124329,0.567532956600189,0.793840944766998\n             ,0.179479137063026,0.581036806106567,0.776918292045593,0.306892603635788,0.549740731716156,0.328961253166199\n             ,0.182314842939377,0.92657744884491,0.335490047931671,-0.171642184257507,0.926275014877319,0.351316899061203\n             ,-0.0729207322001457,0.933412551879883,0.314301073551178,0.320888847112656,0.893445670604706,0.533053755760193\n             ,0.0411353260278702,0.845080852508545,0.770362615585327,0.0158082563430071,0.63740998506546,0.786049902439117\n             ,0.275353401899338,0.553449213504791,0.542900562286377,0.367345452308655,0.755192875862122,0.786049902439117\n             ,0.275353401899338,0.553449213504791,0.770362615585327,0.0158082563430071,0.63740998506546,0.842584788799286\n             ,-0.21356026828289,0.494411617517471,0.912213087081909,0.0526493825018406,0.406319200992584,0.926979184150696\n             ,-0.0986248403787613,0.36191537976265,0.912213087081909,0.0526493825018406,0.406319200992584,0.842584788799286\n             ,-0.21356026828289,0.494411617517471,0.831848502159119,-0.322033703327179,0.452020287513733,0.926979184150696\n             ,-0.0986248403787613,0.36191537976265,0.831848502159119,-0.322033703327179,0.452020287513733,0.838417947292328\n             ,-0.244426995515823,0.487145572900772,0.875677406787872,-0.203340858221054,0.437997281551361,0.754335284233093\n             ,-0.305042564868927,0.581315159797668,0.838417947292328,-0.244426995515823,0.487145572900772,0.831848502159119\n             ,-0.322033703327179,0.452020287513733,0.73811411857605,-0.426667273044586,0.522630453109741,-0.0354966223239899\n             ,-0.161021754145622,0.986312329769135,0.197210118174553,0.0128493588417768,0.980277061462402,0.193743079900742\n             ,0.0896209701895714,0.976950228214264,0.17069847881794,-0.387216597795486,0.906049311161041,0.197210118174553\n             ,0.0128493588417768,0.980277061462402,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.458961844444275\n             ,-0.463801801204681,0.757787525653839,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.193743079900742\n             ,0.0896209701895714,0.976950228214264,0.190371856093407,0.256429195404053,0.947629988193512,0.190371856093407\n             ,0.256429195404053,0.947629988193512,0.458961844444275,-0.463801801204681,0.757787525653839,-0.0354966223239899\n             ,-0.161021754145622,0.986312329769135,0.573087453842163,0.0656763836741447,0.816858232021332,0.636694431304932\n             ,0.0437434837222099,0.769874513149261,0.627576470375061,-0.135800153017044,0.766619920730591,0.529063761234283\n             ,-0.0630637779831886,0.846235513687134,0.573087453842163,0.0656763836741447,0.816858232021332,0.529063761234283\n             ,-0.0630637779831886,0.846235513687134,0.525402009487152,0.0301267635077238,0.85032057762146,0.621637463569641\n             ,0.0923129394650459,0.77784651517868,0.620820641517639,-0.00240864953957498,0.783948957920074,0.652630388736725\n             ,-0.0358134843409061,0.756829559803009,0.730820298194885,-0.016795739531517,0.682363271713257,0.724583506584167\n             ,-0.0711281225085258,0.685506820678711,0.61716902256012,-0.00506624486297369,0.786814272403717,0.750991225242615\n             ,0.0683757290244102,0.656762480735779,0.730820298194885,-0.016795739531517,0.682363271713257,0.652630388736725\n             ,-0.0358134843409061,0.756829559803009,0.802095234394073,-0.0203569829463959,0.596849083900452,0.724583506584167\n             ,-0.0711281225085258,0.685506820678711,0.730820298194885,-0.016795739531517,0.682363271713257,0.750991225242615\n             ,0.0683757290244102,0.656762480735779,0.56373119354248,0.0243276692926884,0.825599908828735,0.613882482051849\n             ,0.099590003490448,0.783090114593506,0.615384101867676,0.0611244365572929,0.785853803157806,0.620820641517639\n             ,-0.00240864953957498,0.783948957920074,0.615384101867676,0.0611244365572929,0.785853803157806,0.652630388736725\n             ,-0.0358134843409061,0.756829559803009,0.620820641517639,-0.00240864953957498,0.783948957920074,0.621637463569641\n             ,0.0923129394650459,0.77784651517868,0.613882482051849,0.099590003490448,0.783090114593506,0.56373119354248,0.0243276692926884\n             ,0.825599908828735,0.573087453842163,0.0656763836741447,0.816858232021332,0.56373119354248,0.0243276692926884\n             ,0.825599908828735,0.620820641517639,-0.00240864953957498,0.783948957920074,0.636694431304932,0.0437434837222099\n             ,0.769874513149261,0.573087453842163,0.0656763836741447,0.816858232021332,0.598116338253021,0.120038144290447\n             ,0.792368412017822,0.621637463569641,0.0923129394650459,0.77784651517868,0.41924661397934,0.116037733852863,0.90042632818222\n             ,0.528464257717133,0.246433109045029,0.812401533126831,0.621637463569641,0.0923129394650459,0.77784651517868\n             ,0.598116338253021,0.120038144290447,0.792368412017822,0.712920248508453,0.00929267052561045,0.701183557510376\n             ,0.720236837863922,0.181686788797379,0.669513881206512,0.751433670520782,0.0212495382875204,0.659466326236725\n             ,0.598116338253021,0.120038144290447,0.792368412017822,0.528464257717133,0.246433109045029,0.812401533126831\n             ,0.598116338253021,0.120038144290447,0.792368412017822,0.751433670520782,0.0212495382875204,0.659466326236725\n             ,0.712920248508453,0.00929267052561045,0.701183557510376,0.621637463569641,0.0923129394650459,0.77784651517868\n             ,0.525402009487152,0.0301267635077238,0.85032057762146,0.41924661397934,0.116037733852863,0.90042632818222,0.724869191646576\n             ,-0.144625514745712,0.673534035682678,0.712920248508453,0.00929267052561045,0.701183557510376,0.751433670520782\n             ,0.0212495382875204,0.659466326236725,0.858066916465759,-0.0402064435184002,0.511961579322815,0.751433670520782\n             ,0.0212495382875204,0.659466326236725,0.720236837863922,0.181686788797379,0.669513881206512,0.875872433185577\n             ,0.296488851308823,0.38071221113205,0.858066916465759,-0.0402064435184002,0.511961579322815,0.578135192394257\n             ,0.0218988731503487,0.815647065639496,0.593307375907898,-0.0775594636797905,0.801230847835541,0.577744483947754\n             ,0.0458397567272186,0.814929485321045,0.59909462928772,0.124072253704071,0.791006743907928,0.578135192394257\n             ,0.0218988731503487,0.815647065639496,0.577744483947754,0.0458397567272186,0.814929485321045,0.550924062728882\n             ,0.0100475419312716,0.834494948387146,0.59909462928772,0.124072253704071,0.791006743907928,0.550924062728882\n             ,0.0100475419312716,0.834494948387146,0.584165692329407,-0.333255082368851,0.740061819553375,0.747522175312042\n             ,-0.213430538773537,0.629013538360596,0.916658163070679,-0.0698241367936134,0.393525570631027,0.855076372623444\n             ,-0.165702432394028,0.491311639547348,0.85496574640274,-0.0235987044870853,0.518147349357605,0.903705775737762\n             ,0.0166217982769012,0.427831262350082,0.937154471874237,-0.0475939512252808,0.345653474330902,0.916658163070679\n             ,-0.0698241367936134,0.393525570631027,0.903705775737762,0.0166217982769012,0.427831262350082,0.916476547718048\n             ,0.0582267269492149,0.395828783512115,0.358242690563202,-0.369526594877243,0.857386887073517,0.386847853660584\n             ,-0.767014622688293,0.511895835399628,0.738801121711731,-0.260166734457016,0.6216801404953,0.16572479903698,-0.647090375423431\n             ,0.744183719158173,0.0293192863464355,-0.389476090669632,0.920569777488709,-0.0632589310407639,-0.395606756210327\n             ,0.916238844394684,0.0821766927838326,-0.66467010974884,0.742603957653046,0.2151879966259,-0.952648401260376\n             ,-0.214837476611137,0.589298963546753,-0.771825730800629,0.238771393895149,0.704199492931366,-0.704627811908722\n             ,0.0871931314468384,0.43766725063324,-0.727506041526794,-0.528377115726471,0.0578227378427982,-0.628531396389008\n             ,-0.775631904602051,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.2151879966259,-0.952648401260376\n             ,-0.214837476611137,0.43766725063324,-0.727506041526794,-0.528377115726471,0.778993248939514,-0.607196033000946\n             ,0.156468689441681,0.914134383201599,-0.267116606235504,-0.304970562458038,0.43766725063324,-0.727506041526794\n             ,-0.528377115726471,0.704199492931366,-0.704627811908722,0.0871931314468384,0.801777124404907,0.00266337930224836\n             ,-0.597617149353027,0.0578227378427982,-0.628531396389008,-0.775631904602051,0.43766725063324,-0.727506041526794\n             ,-0.528377115726471,0.43766725063324,-0.727506041526794,-0.528377115726471,0.914134383201599,-0.267116606235504\n             ,-0.304970562458038,0.801777124404907,0.00266337930224836,-0.597617149353027,0.844061017036438,0.391468346118927\n             ,0.366488069295883,0.801777124404907,0.00266337930224836,-0.597617149353027,0.993568658828735,0.0655909031629562\n             ,0.0922989472746849,0.941748380661011,0.168847903609276,0.290861427783966,0.823821365833282,-0.474406152963638\n             ,0.310253411531448,0.940892815589905,-0.119216494262218,0.317030221223831,0.941748380661011,0.168847903609276\n             ,0.290861427783966,0.993568658828735,0.0655909031629562,0.0922989472746849,0.218448147177696,-0.859921038150787\n             ,0.461320102214813,0.462026834487915,-0.814152240753174,0.351692080497742,0.280335813760757,-0.904288768768311\n             ,0.321983903646469,0.160614088177681,-0.826539099216461,0.539477705955505,0.851511597633362,-0.5011847615242\n             ,0.154083982110024,0.625836908817291,-0.779953479766846,0.000855531019624323,0.280335813760757,-0.904288768768311\n             ,0.321983903646469,0.462026834487915,-0.814152240753174,0.351692080497742,0.632524311542511,-0.737463712692261\n             ,0.236770406365395,0.125414818525314,-0.832001984119415,0.540410816669464,0.280335813760757,-0.904288768768311\n             ,0.321983903646469,0.625836908817291,-0.779953479766846,0.000855531019624323,-0.119093708693981,-0.53387188911438\n             ,0.837136447429657,0.160614088177681,-0.826539099216461,0.539477705955505,0.280335813760757,-0.904288768768311\n             ,0.321983903646469,0.125414818525314,-0.832001984119415,0.540410816669464,-0.119093708693981,-0.53387188911438\n             ,0.837136447429657,-0.485137194395065,-0.428027123212814,0.762518644332886,-0.600347876548767,0.0670153573155403\n             ,0.796926200389862,0.0803298726677895,0.272869914770126,0.958691358566284,-0.549701511859894,-0.519823312759399\n             ,0.653920412063599,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.600347876548767,0.0670153573155403\n             ,0.796926200389862,-0.485137194395065,-0.428027123212814,0.762518644332886,-0.600347876548767,0.0670153573155403\n             ,0.796926200389862,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.498864650726318,-0.669482290744781\n             ,0.550388514995575,-0.0804867446422577,-0.0660979077219963,0.994561672210693,0.0803298726677895,0.272869914770126\n             ,0.958691358566284,-0.600347876548767,0.0670153573155403,0.796926200389862,-0.0804867446422577,-0.0660979077219963\n             ,0.994561672210693,0.591780304908752,0.0913430228829384,0.8009073138237,-0.119093708693981,-0.53387188911438\n             ,0.837136447429657,0.350974529981613,-0.540442049503326,0.764682471752167,0.190928906202316,-0.824125647544861\n             ,0.533257067203522,0.160614088177681,-0.826539099216461,0.539477705955505,0.218448147177696,-0.859921038150787\n             ,0.461320102214813,0.160614088177681,-0.826539099216461,0.539477705955505,0.190928906202316,-0.824125647544861\n             ,0.533257067203522,0.724950075149536,-0.680160522460938,0.108761206269264,0.535486578941345,-0.739663183689117\n             ,0.407618075609207,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.2151879966259,-0.952648401260376\n             ,-0.214837476611137,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.535486578941345,-0.739663183689117\n             ,0.407618075609207,0.506778419017792,-0.624182820320129,0.594618737697601,-0.449249923229218,-0.874760508537292\n             ,0.181572452187538,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.506778419017792,-0.624182820320129\n             ,0.594618737697601,0.591780304908752,0.0913430228829384,0.8009073138237,-0.0804867446422577,-0.0660979077219963\n             ,0.994561672210693,-0.498864650726318,-0.669482290744781,0.550388514995575,0.506778419017792,-0.624182820320129\n             ,0.594618737697601,0.786046326160431,0.0746424272656441,0.613644540309906,0.591780304908752,0.0913430228829384\n             ,0.8009073138237,0.993568658828735,0.0655909031629562,0.0922989472746849,0.801777124404907,0.00266337930224836\n             ,-0.597617149353027,0.914134383201599,-0.267116606235504,-0.304970562458038,0.914134383201599,-0.267116606235504\n             ,-0.304970562458038,0.778993248939514,-0.607196033000946,0.156468689441681,0.823821365833282,-0.474406152963638\n             ,0.310253411531448,0.993568658828735,0.0655909031629562,0.0922989472746849,0.802095234394073,-0.0203569829463959\n             ,0.596849083900452,0.750991225242615,0.0683757290244102,0.656762480735779,0.734094381332397,0.226703405380249\n             ,0.640086710453033,0.771234273910522,0.123447246849537,0.62446653842926,0.61716902256012,-0.00506624486297369\n             ,0.786814272403717,0.59909462928772,0.124072253704071,0.791006743907928,0.734094381332397,0.226703405380249,0.640086710453033\n             ,0.750991225242615,0.0683757290244102,0.656762480735779,0.747522175312042,-0.213430538773537,0.629013538360596\n             ,0.89356255531311,-0.0812801718711853,0.441519498825073,0.734094381332397,0.226703405380249,0.640086710453033\n             ,0.59909462928772,0.124072253704071,0.791006743907928,0.886316955089569,0.0816843584179878,0.455817818641663\n             ,0.771234273910522,0.123447246849537,0.62446653842926,0.734094381332397,0.226703405380249,0.640086710453033,0.89356255531311\n             ,-0.0812801718711853,0.441519498825073,0.740868389606476,0.000323399232001975,0.671650171279907,0.825742661952972\n             ,-0.0501102656126022,0.561816692352295,0.832460403442383,-0.0762069076299667,0.548818945884705,0.732703268527985\n             ,-0.161094918847084,0.661206722259521,0.740868389606476,0.000323399232001975,0.671650171279907,0.732703268527985\n             ,-0.161094918847084,0.661206722259521,0.627576470375061,-0.135800153017044,0.766619920730591,0.636694431304932\n             ,0.0437434837222099,0.769874513149261,0.841468989849091,0.227338507771492,0.490150064229965,0.886316955089569\n             ,0.0816843584179878,0.455817818641663,0.96756237745285,-0.0955442041158676,0.233868315815926,0.918524086475372\n             ,-0.00282709067687392,0.395354956388474,0.918524086475372,-0.00282709067687392,0.395354956388474,0.853365004062653\n             ,0.0768043100833893,0.515625178813934,0.841468989849091,0.227338507771492,0.490150064229965,0.868124186992645\n             ,-0.0820373073220253,0.48952043056488,0.826119303703308,-0.120154865086079,0.550535798072815,0.832460403442383\n             ,-0.0762069076299667,0.548818945884705,0.853365004062653,0.0768043100833893,0.515625178813934,0.918524086475372\n             ,-0.00282709067687392,0.395354956388474,0.868124186992645,-0.0820373073220253,0.48952043056488,0.853365004062653\n             ,0.0768043100833893,0.515625178813934,0.605580151081085,-0.127637818455696,0.785481572151184,0.627576470375061\n             ,-0.135800153017044,0.766619920730591,0.732703268527985,-0.161094918847084,0.661206722259521,0.72280216217041\n             ,-0.137790024280548,0.677178680896759,0.732703268527985,-0.161094918847084,0.661206722259521,0.832460403442383\n             ,-0.0762069076299667,0.548818945884705,0.826119303703308,-0.120154865086079,0.550535798072815,0.72280216217041\n             ,-0.137790024280548,0.677178680896759,0.960835516452789,0.146968066692352,0.234937101602554,0.987058341503143\n             ,-0.0681737512350082,0.145148620009422,0.988696813583374,-0.11085943877697,0.10093978792429,0.974692046642303\n             ,0.140635088086128,0.17377345263958,0.988696813583374,-0.11085943877697,0.10093978792429,0.971762239933014,-0.143596902489662\n             ,0.187237858772278,0.970540165901184,0.124821022152901,0.206086173653603,0.974692046642303,0.140635088086128\n             ,0.17377345263958,0.987058341503143,-0.0681737512350082,0.145148620009422,0.952345132827759,-0.057124700397253\n             ,0.299625486135483,0.939327776432037,-0.292384117841721,0.17937345802784,0.94329446554184,-0.325108468532562\n             ,0.0670826062560081,0.918524086475372,-0.00282709067687392,0.395354956388474,0.926874995231628,-0.321304202079773\n             ,0.194078236818314,0.939327776432037,-0.292384117841721,0.17937345802784,0.952345132827759,-0.057124700397253\n             ,0.299625486135483,0.934174954891205,-0.332788705825806,0.128719761967659,0.94329446554184,-0.325108468532562\n             ,0.0670826062560081,0.939327776432037,-0.292384117841721,0.17937345802784,0.926874995231628,-0.321304202079773\n             ,0.194078236818314,0.826119303703308,-0.120154865086079,0.550535798072815,0.868124186992645,-0.0820373073220253\n             ,0.48952043056488,0.903705775737762,0.0166217982769012,0.427831262350082,0.85496574640274,-0.0235987044870853\n             ,0.518147349357605,0.868124186992645,-0.0820373073220253,0.48952043056488,0.918524086475372,-0.00282709067687392\n             ,0.395354956388474,0.916476547718048,0.0582267269492149,0.395828783512115,0.903705775737762,0.0166217982769012\n             ,0.427831262350082,0.717148721218109,-0.158668875694275,0.678617656230927,0.693030059337616,-0.0411044172942638\n             ,0.71973592042923,0.204357400536537,-0.124537408351898,0.97094202041626,0.359977900981903,-0.319483041763306\n             ,0.876553773880005,0.204357400536537,-0.124537408351898,0.97094202041626,0.693030059337616,-0.0411044172942638\n             ,0.71973592042923,0.197210118174553,0.0128493588417768,0.980277061462402,0.197210118174553,0.0128493588417768\n             ,0.980277061462402,0.693030059337616,-0.0411044172942638,0.71973592042923,0.813101530075073,0.281051158905029\n             ,0.509780466556549,0.533409833908081,0.213411912322044,0.818492114543915,0.193743079900742,0.0896209701895714\n             ,0.976950228214264,0.877371370792389,-0.100216217339039,0.469229310750961,0.848142683506012,0.254542678594589\n             ,0.464609563350677,0.834977984428406,0.275511413812637,0.47634568810463,0.894858956336975,-0.0870964974164963\n             ,0.437768936157227,0.862693786621094,0.213308542966843,0.458539962768555,0.728024780750275,0.317726284265518\n             ,0.607478320598602,0.749379277229309,0.298672914505005,0.590952754020691,0.779178857803345,0.328662276268005\n             ,0.533724129199982,0.825178265571594,0.267818719148636,0.497346937656403,0.776109874248505,0.274881482124329\n             ,0.567532956600189,0.749379277229309,0.298672914505005,0.590952754020691,0.728024780750275,0.317726284265518\n             ,0.607478320598602,0.261966973543167,0.625043272972107,0.735319077968597,0.0635503008961678,0.655404150485992\n             ,0.752600014209747,0.0571579374372959,0.555576980113983,0.829498171806335,0.27374255657196,0.526692390441895\n             ,0.804773390293121,0.261966973543167,0.625043272972107,0.735319077968597,0.27374255657196,0.526692390441895,0.804773390293121\n             ,0.718716561794281,0.339281320571899,0.60690575838089,0.667004644870758,0.442110657691956,0.59970235824585,0.819765686988831\n             ,0.312743216753006,0.479766517877579,0.79509973526001,0.317423015832901,0.516777575016022,0.779178857803345,0.328662276268005\n             ,0.533724129199982,0.791379868984222,0.358002513647079,0.495532125234604,0.779178857803345,0.328662276268005\n             ,0.533724129199982,0.79509973526001,0.317423015832901,0.516777575016022,0.801001727581024,0.319669455289841,0.506169617176056\n             ,0.825178265571594,0.267818719148636,0.497346937656403,0.825178265571594,0.267818719148636,0.497346937656403\n             ,0.667004644870758,0.442110657691956,0.59970235824585,0.718716561794281,0.339281320571899,0.60690575838089,0.862693786621094\n             ,0.213308542966843,0.458539962768555,0.813101530075073,0.281051158905029,0.509780466556549,0.819765686988831\n             ,0.312743216753006,0.479766517877579,0.54212898015976,0.215727955102921,0.812131583690643,0.533409833908081,0.213411912322044\n             ,0.818492114543915,0.819765686988831,0.312743216753006,0.479766517877579,0.791379868984222,0.358002513647079\n             ,0.495532125234604,0.470013290643692,0.212332352995873,0.856739461421967,0.54212898015976,0.215727955102921,0.812131583690643\n             ,0.333709418773651,0.169013321399689,0.927400946617126,0.470013290643692,0.212332352995873,0.856739461421967\n             ,0.791379868984222,0.358002513647079,0.495532125234604,0.776918292045593,0.306892603635788,0.549740731716156\n             ,0.651595652103424,0.352775752544403,0.671544790267944,0.316976845264435,0.303443849086761,0.898580849170685\n             ,0.397927284240723,0.292557120323181,0.869519531726837,0.414541780948639,0.400993496179581,0.816920638084412\n             ,0.37644562125206,0.38054347038269,0.844674706459045,0.316976845264435,0.303443849086761,0.898580849170685,0.346010982990265\n             ,0.0731605663895607,0.935373663902283,0.410090506076813,0.0557969398796558,0.910336434841156,0.397927284240723\n             ,0.292557120323181,0.869519531726837,0.328961253166199,0.182314842939377,0.92657744884491,0.371347606182098,0.418176740407944\n             ,0.82899284362793,0.397927284240723,0.292557120323181,0.869519531726837,0.410090506076813,0.0557969398796558\n             ,0.910336434841156,0.410090506076813,0.0557969398796558,0.910336434841156,0.346010982990265,0.0731605663895607\n             ,0.935373663902283,0.402090311050415,-0.284287929534912,0.870346903800964,0.431166082620621,-0.246951669454575\n             ,0.867819547653198,-0.0552638620138168,0.347488284111023,0.936054348945618,-0.00221070507541299,0.348074615001678\n             ,0.937464237213135,0.00455546798184514,0.298394352197647,0.954431772232056,0.410660326480865,0.0589907094836235\n             ,0.909878134727478,0.503296196460724,0.0546823143959045,0.862382054328918,0.135898023843765,0.169247582554817\n             ,0.976159334182739,0.179719522595406,0.199890360236168,0.963195025920868,0.166202440857887,0.306374847888947\n             ,0.937289237976074,0.135898023843765,0.169247582554817,0.976159334182739,0.503296196460724,0.0546823143959045\n             ,0.862382054328918,0.508710622787476,0.190386489033699,0.839622795581818,0.826946556568146,0.0731306597590446\n             ,0.557504594326019,0.870097935199738,0.102833516895771,0.482032060623169,0.642289221286774,0.115071445703506\n             ,0.757775127887726,0.610058009624481,0.18056558072567,0.771508455276489,0.610058009624481,0.18056558072567,0.771508455276489\n             ,0.642289221286774,0.115071445703506,0.757775127887726,0.471029788255692,0.166954964399338,0.86617374420166,0.491490423679352\n             ,0.244152218103409,0.835958659648895,0.623485326766968,0.449957937002182,0.639377772808075,0.497093498706818\n             ,0.456073582172394,0.738169968128204,0.620209395885468,0.316063761711121,0.717944324016571,0.649705529212952\n             ,0.341418325901031,0.679202735424042,0.594232082366943,0.290724605321884,0.749911665916443,0.663587033748627\n             ,0.242647290229797,0.707654237747192,0.620209395885468,0.316063761711121,0.717944324016571,0.594232082366943\n             ,0.290724605321884,0.749911665916443,0.620209395885468,0.316063761711121,0.717944324016571,0.416927576065063\n             ,0.413195610046387,0.809592962265015,0.370492875576019,0.369821041822433,0.852037250995636,0.556747674942017\n             ,0.38243293762207,0.737412452697754,0.649705529212952,0.341418325901031,0.679202735424042,0.620209395885468,0.316063761711121\n             ,0.717944324016571,0.663587033748627,0.242647290229797,0.707654237747192,0.340945303440094,-0.698488175868988\n             ,0.629182457923889,0.292688071727753,-0.580336809158325,0.759962379932404,0.335490047931671,-0.171642184257507\n             ,0.926275014877319,0.431166082620621,-0.246951669454575,0.867819547653198,0.335490047931671,-0.171642184257507\n             ,0.926275014877319,0.328961253166199,0.182314842939377,0.92657744884491,0.410090506076813,0.0557969398796558\n             ,0.910336434841156,0.431166082620621,-0.246951669454575,0.867819547653198,0.285702854394913,-0.151269629597664\n             ,0.946304082870483,0.189583629369736,-0.286395132541656,0.939167618751526,0.124305054545403,-0.308796167373657\n             ,0.942970395088196,0.295946687459946,-0.143637612462044,0.944343090057373,0.785013139247894,0.0451312512159348\n             ,0.617832958698273,0.733202934265137,-0.122967794537544,0.668799161911011,0.642606198787689,-0.0799093768000603\n             ,0.762018263339996,0.563811004161835,0.228632539510727,0.793627321720123,0.642606198787689,-0.0799093768000603\n             ,0.762018263339996,0.568371534347534,0.0187626089900732,0.822558045387268,0.546967387199402,0.0579036511480808\n             ,0.835148990154266,0.563811004161835,0.228632539510727,0.793627321720123,0.607095539569855,-0.200262412428856\n             ,0.768979847431183,0.588271081447601,-0.259690821170807,0.765831470489502,0.633589863777161,-0.0252969916909933\n             ,0.773255407810211,0.655191659927368,0.0146637577563524,0.755320370197296,-0.00835443940013647,-0.52916145324707\n             ,0.848480045795441,0.462689489126205,-0.42478209733963,0.778125107288361,0.521133065223694,-0.480470329523087\n             ,0.705385446548462,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.521133065223694,-0.480470329523087\n             ,0.705385446548462,0.462689489126205,-0.42478209733963,0.778125107288361,0.666223108768463,-0.303315341472626\n             ,0.681283056735992,0.670062482357025,-0.367128610610962,0.645161092281342,0.677804887294769,-0.293700158596039\n             ,0.674033224582672,0.598259091377258,-0.415802270174026,0.684977769851685,0.521133065223694,-0.480470329523087\n             ,0.705385446548462,0.670062482357025,-0.367128610610962,0.645161092281342,0.189460039138794,-0.647004544734955\n             ,0.738572955131531,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.521133065223694,-0.480470329523087\n             ,0.705385446548462,0.598259091377258,-0.415802270174026,0.684977769851685,0.788963615894318,-0.297772616147995\n             ,0.537464380264282,0.775085091590881,-0.264017641544342,0.574053823947906,0.872779548168182,-0.198945015668869\n             ,0.445731669664383,0.888771831989288,-0.233848795294762,0.394207358360291,0.873168885707855,-0.228458538651466\n             ,0.430561006069183,0.670062482357025,-0.367128610610962,0.645161092281342,0.788963615894318,-0.297772616147995\n             ,0.537464380264282,0.771643459796906,-0.219248831272125,0.597073137760162,0.677804887294769,-0.293700158596039\n             ,0.674033224582672,0.771643459796906,-0.219248831272125,0.597073137760162,0.788963615894318,-0.297772616147995\n             ,0.537464380264282,0.873168885707855,-0.228458538651466,0.430561006069183,0.861247181892395,-0.192313641309738\n             ,0.470392137765884,0.890117168426514,-0.206235691905022,0.40639665722847,0.861247181892395,-0.192313641309738\n             ,0.470392137765884,0.873168885707855,-0.228458538651466,0.430561006069183,0.888771831989288,-0.233848795294762\n             ,0.394207358360291,0.872779548168182,-0.198945015668869,0.445731669664383,0.917503833770752,-0.132210671901703\n             ,0.375109404325485,0.92565244436264,-0.184836938977242,0.330155730247498,0.888771831989288,-0.233848795294762\n             ,0.394207358360291,0.92565244436264,-0.184836938977242,0.330155730247498,0.937154471874237,-0.0475939512252808\n             ,0.345653474330902,0.980852127075195,0.00218713283538818,0.194741636514664,0.92565244436264,-0.184836938977242\n             ,0.330155730247498,0.917503833770752,-0.132210671901703,0.375109404325485,0.937154471874237,-0.0475939512252808\n             ,0.345653474330902,0.92565244436264,-0.184836938977242,0.330155730247498,0.980852127075195,0.00218713283538818\n             ,0.194741636514664,0.938709080219269,-0.156169772148132,0.307304710149765,0.890117168426514,-0.206235691905022\n             ,0.40639665722847,0.888771831989288,-0.233848795294762,0.394207358360291,0.92565244436264,-0.184836938977242\n             ,0.330155730247498,0.890117168426514,-0.206235691905022,0.40639665722847,0.92565244436264,-0.184836938977242\n             ,0.330155730247498,0.938709080219269,-0.156169772148132,0.307304710149765,0.189460039138794,-0.647004544734955\n             ,0.738572955131531,0.659502923488617,-0.421348959207535,0.622511804103851,0.535029828548431,-0.536747872829437\n             ,0.652414619922638,0.731125593185425,-0.405815303325653,0.548424422740936,0.535029828548431,-0.536747872829437\n             ,0.652414619922638,0.659502923488617,-0.421348959207535,0.622511804103851,0.71972918510437,-0.325454443693161\n             ,0.613244891166687,0.71972918510437,-0.325454443693161,0.613244891166687,0.754335284233093,-0.305042564868927\n             ,0.581315159797668,0.73811411857605,-0.426667273044586,0.522630453109741,0.731125593185425,-0.405815303325653\n             ,0.548424422740936,0.245724827051163,0.276487857103348,0.929071426391602,0.16256257891655,0.269552499055862,0.949165344238281\n             ,0.221095889806747,0.32488140463829,0.919548094272614,0.278009802103043,0.308251172304153,0.909775674343109,0.0426242314279079\n             ,0.260108649730682,0.964638113975525,0.0272070206701756,0.178279355168343,0.983603715896606,0.0412900410592556\n             ,0.144470527768135,0.988647282123566,-0.0196372587233782,0.188453316688538,0.98188579082489,-0.00221070507541299\n             ,0.348074615001678,0.937464237213135,-0.0196372587233782,0.188453316688538,0.98188579082489,0.0412900410592556\n             ,0.144470527768135,0.988647282123566,0.17553049325943,0.198497295379639,0.964255094528198,0.278009802103043,0.308251172304153\n             ,0.909775674343109,0.428730636835098,0.26745393872261,0.862935900688171,0.594232082366943,0.290724605321884,0.749911665916443\n             ,0.370492875576019,0.369821041822433,0.852037250995636,0.937608182430267,0.0460146591067314,0.344635367393494\n             ,0.956782042980194,0.0500060208141804,0.286474347114563,0.938729107379913,0.213661849498749,0.270437210798264\n             ,0.950939536094666,0.19349630177021,0.241398423910141,0.955479383468628,-0.0429471768438816,0.291915565729141\n             ,0.968910753726959,0.00811574142426252,0.247277289628983,0.949283540248871,0.162967398762703,0.2688909471035\n             ,0.941746175289154,0.170597404241562,0.289845913648605,0.969503223896027,0.0232477653771639,0.243973404169083\n             ,0.960846960544586,0.123489730060101,0.248039066791534,0.949283540248871,0.162967398762703,0.2688909471035,0.968910753726959\n             ,0.00811574142426252,0.247277289628983,0.938729107379913,0.213661849498749,0.270437210798264,0.935715436935425\n             ,0.19026754796505,0.297043561935425,0.949283540248871,0.162967398762703,0.2688909471035,0.960846960544586,0.123489730060101\n             ,0.248039066791534,0.941311419010162,0.140633046627045,0.30684706568718,0.941746175289154,0.170597404241562,0.289845913648605\n             ,0.949283540248871,0.162967398762703,0.2688909471035,0.935715436935425,0.19026754796505,0.297043561935425,0.950939536094666\n             ,0.19349630177021,0.241398423910141,0.938729107379913,0.213661849498749,0.270437210798264,0.960846960544586,0.123489730060101\n             ,0.248039066791534,0.973029315471649,0.0977980643510818,0.208924487233162,0.969503223896027,0.0232477653771639\n             ,0.243973404169083,0.973029315471649,0.0977980643510818,0.208924487233162,0.960846960544586,0.123489730060101\n             ,0.248039066791534,0.900685906410217,0.180543556809425,0.395182073116302,0.950939536094666,0.19349630177021,0.241398423910141\n             ,0.985209882259369,0.0516813509166241,0.163372397422791,0.962778627872467,0.0666173547506332,0.261953175067902\n             ,0.920523226261139,0.14191623032093,0.36400106549263,0.900685906410217,0.180543556809425,0.395182073116302,0.962778627872467\n             ,0.0666173547506332,0.261953175067902,0.900685906410217,0.180543556809425,0.395182073116302,0.920523226261139\n             ,0.14191623032093,0.36400106549263,0.928288996219635,-0.0903030559420586,0.360728323459625,0.905692398548126\n             ,-0.0579960867762566,0.419949680566788,0.94987964630127,-0.0038351418916136,0.312592297792435,0.937608182430267\n             ,0.0460146591067314,0.344635367393494,0.905692398548126,-0.0579960867762566,0.419949680566788,0.910945057868958\n             ,-0.218233183026314,0.35007631778717,0.928288996219635,-0.0903030559420586,0.360728323459625,0.910945057868958\n             ,-0.218233183026314,0.35007631778717,0.905692398548126,-0.0579960867762566,0.419949680566788,0.969503223896027\n             ,0.0232477653771639,0.243973404169083,0.966420710086823,0.0570991300046444,0.250540882349014,0.985529184341431\n             ,0.0794467255473137,0.149734541773796,0.973029315471649,0.0977980643510818,0.208924487233162,0.973029315471649\n             ,0.0977980643510818,0.208924487233162,0.985529184341431,0.0794467255473137,0.149734541773796,0.985209882259369\n             ,0.0516813509166241,0.163372397422791,0.950939536094666,0.19349630177021,0.241398423910141,0.431708127260208\n             ,0.0743667632341385,0.898942530155182,-0.0552638620138168,0.347488284111023,0.936054348945618,0.100095093250275\n             ,0.182193845510483,0.978154599666595,0.493298023939133,0.0378949381411076,0.8690345287323,0.0312842912971973\n             ,-0.474717557430267,0.879582047462463,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.0666661337018013\n             ,-0.827535629272461,0.557440996170044,0.289565563201904,-0.362892955541611,0.885697722434998,-0.021647073328495\n             ,-0.960853159427643,0.276211261749268,0.0666661337018013,-0.827535629272461,0.557440996170044,-0.00421709613874555\n             ,-0.829368829727173,0.558685541152954,0.100095093250275,0.182193845510483,0.978154599666595,0.106603257358074\n             ,0.0133492052555084,0.994212031364441,0.493298023939133,0.0378949381411076,0.8690345287323,0.974559843540192\n             ,0.0402764715254307,0.220478907227516,0.928288996219635,-0.0903030559420586,0.360728323459625,0.920523226261139\n             ,0.14191623032093,0.36400106549263,0.966257035732269,0.139943510293961,0.216247826814651,0.975037813186646,0.14565335214138\n             ,0.167589843273163,0.974559843540192,0.0402764715254307,0.220478907227516,0.966257035732269,0.139943510293961\n             ,0.216247826814651,0.204357400536537,-0.124537408351898,0.97094202041626,0.032781969755888,-0.0827890038490295\n             ,0.996027767658234,0.161047965288162,-0.353496670722961,0.921468198299408,0.359977900981903,-0.319483041763306\n             ,0.876553773880005,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.0293192863464355,-0.389476090669632\n             ,0.920569777488709,0.161047965288162,-0.353496670722961,0.921468198299408,0.032781969755888,-0.0827890038490295\n             ,0.996027767658234,0.386847853660584,-0.767014622688293,0.511895835399628,0.358242690563202,-0.369526594877243\n             ,0.857386887073517,0.196283534169197,-0.554668664932251,0.808588564395905,0.191021859645844,-0.901510059833527\n             ,0.388317227363586,0.0821766927838326,-0.66467010974884,0.742603957653046,0.0454688854515553,-0.765503704547882\n             ,0.641822934150696,0.171536713838577,-0.946371257305145,0.273782074451447,0.508330583572388,0.166116118431091\n             ,0.844988405704498,0.322372585535049,-0.0660212859511375,0.944307744503021,0.477409869432449,-0.0182194709777832\n             ,0.878491818904877,0.668687582015991,0.158593982458115,0.726432919502258,0.508330583572388,0.166116118431091\n             ,0.844988405704498,0.668687582015991,0.158593982458115,0.726432919502258,0.495325356721878,-0.15430523455143\n             ,0.854893386363983,0.499466627836227,0.169172704219818,0.849655032157898,0.469725012779236,0.301579147577286\n             ,0.829703807830811,0.536631107330322,0.258791983127594,0.803152441978455,0.499466627836227,0.169172704219818\n             ,0.849655032157898,0.328607112169266,0.0718188062310219,0.941732108592987,0.401639640331268,-0.00309631112031639\n             ,0.915792524814606,0.209787964820862,-0.0149007942527533,0.977633357048035,0.328607112169266,0.0718188062310219\n             ,0.941732108592987,0.32480525970459,-0.177078545093536,0.929055869579315,0.130675092339516,-0.201507270336151\n             ,0.9707310795784,0.209787964820862,-0.0149007942527533,0.977633357048035,0.401639640331268,-0.00309631112031639\n             ,0.915792524814606,0.405026167631149,-0.171226277947426,0.898128807544708,0.0695574581623077,-0.316367268562317\n             ,0.946083247661591,0.130675092339516,-0.201507270336151,0.9707310795784,0.405026167631149,-0.171226277947426\n             ,0.898128807544708,0.388869285583496,-0.304632723331451,0.869470834732056,0.119953289628029,0.283690631389618\n             ,0.951383650302887,0.0695574581623077,-0.316367268562317,0.946083247661591,0.388869285583496,-0.304632723331451\n             ,0.869470834732056,0.357361167669296,0.242811009287834,0.901851356029511,0.134373739361763,0.867044448852539\n             ,0.479768335819244,0.119953289628029,0.283690631389618,0.951383650302887,0.357361167669296,0.242811009287834\n             ,0.901851356029511,0.149628981947899,0.846252083778381,0.511339902877808,0.134373739361763,0.867044448852539\n             ,0.479768335819244,0.149628981947899,0.846252083778381,0.511339902877808,-0.0952406078577042,0.956162750720978\n             ,-0.276915192604065,0.138274729251862,0.981688380241394,-0.131026938557625,0.495325356721878,-0.15430523455143\n             ,0.854893386363983,0.385615348815918,-0.420324206352234,0.821357607841492,0.32480525970459,-0.177078545093536\n             ,0.929055869579315,0.743626773357391,-0.236951321363449,0.625198543071747,0.572291314601898,-0.52212518453598\n             ,0.632351100444794,0.504154682159424,-0.548682808876038,0.666914701461792,0.527478218078613,-0.385366201400757\n             ,0.757139086723328,0.504154682159424,-0.548682808876038,0.666914701461792,0.510522961616516,-0.392942905426025\n             ,0.764828205108643,0.385615348815918,-0.420324206352234,0.821357607841492,0.527478218078613,-0.385366201400757\n             ,0.757139086723328,0.967272758483887,0.0499838180840015,0.248767033219337,0.926979184150696,-0.0986248403787613\n             ,0.36191537976265,0.875677406787872,-0.203340858221054,0.437997281551361,0.938709080219269,-0.156169772148132\n             ,0.307304710149765,0.980852127075195,0.00218713283538818,0.194741636514664,0.967272758483887,0.0499838180840015\n             ,0.248767033219337,0.938709080219269,-0.156169772148132,0.307304710149765,0.861247181892395,-0.192313641309738\n             ,0.470392137765884,0.890117168426514,-0.206235691905022,0.40639665722847,0.875677406787872,-0.203340858221054\n             ,0.437997281551361,0.838417947292328,-0.244426995515823,0.487145572900772,0.875677406787872,-0.203340858221054\n             ,0.437997281551361,0.890117168426514,-0.206235691905022,0.40639665722847,0.938709080219269,-0.156169772148132\n             ,0.307304710149765,0.707773089408875,-0.177667543292046,0.683733463287354,0.840808868408203,-0.369773417711258\n             ,0.395358175039291,0.755779623985291,-0.654822111129761,0.00226114504039288,0.630890548229218,-0.774750173091888\n             ,0.0417049825191498,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.993277549743652,-0.10496261715889\n             ,0.0488112159073353,0.982620000839233,-0.16903156042099,0.076722227036953,0.995871722698212,-0.0808055028319359\n             ,0.041352104395628,0.766651809215546,0.277672499418259,0.578915357589722,0.854045331478119,0.171825125813484\n             ,0.491001784801483,0.886324822902679,0.0356802977621555,0.461687415838242,0.692221164703369,0.374112457036972\n             ,0.61714643239975,0.854045331478119,0.171825125813484,0.491001784801483,0.944392323493958,0.0710759162902832\n             ,0.321047365665436,0.954735457897186,-0.0869630351662636,0.284460365772247,0.886324822902679,0.0356802977621555\n             ,0.461687415838242,0.886324822902679,0.0356802977621555,0.461687415838242,0.954735457897186,-0.0869630351662636\n             ,0.284460365772247,0.797767400741577,-0.104994267225266,0.593753576278687,0.736574053764343,-0.0243753399699926\n             ,0.675917506217957,0.03270548209548,0.73682564496994,0.675291240215302,0.134861305356026,0.567138254642487,0.812506437301636\n             ,-0.0116734821349382,0.488428175449371,0.872525990009308,0.0662719309329987,0.700039923191071,0.711021840572357\n             ,0.03270548209548,0.73682564496994,0.675291240215302,-0.0116734821349382,0.488428175449371,0.872525990009308\n             ,0.0294170621782541,0.161411821842194,0.986448585987091,0.823107242584229,0.306770831346512,0.477897584438324\n             ,0.838887810707092,0.294615089893341,0.457677990198135,0.854045331478119,0.171825125813484,0.491001784801483\n             ,0.766651809215546,0.277672499418259,0.578915357589722,0.854045331478119,0.171825125813484,0.491001784801483\n             ,0.838887810707092,0.294615089893341,0.457677990198135,0.903585314750671,0.234351992607117,0.35862609744072,0.944392323493958\n             ,0.0710759162902832,0.321047365665436,0.03270548209548,0.73682564496994,0.675291240215302,0.136332333087921,0.628257870674133\n             ,0.765967071056366,0.245428472757339,0.709896266460419,0.660160720348358,0.590013384819031,0.564291477203369\n             ,0.577459335327148,0.34969162940979,0.814756572246552,0.462479740381241,0.305379688739777,0.8488889336586,0.431428849697113\n             ,0.562591254711151,0.530478656291962,0.634100556373596,0.590013384819031,0.564291477203369,0.577459335327148\n             ,0.692221164703369,0.374112457036972,0.61714643239975,0.358841747045517,0.757651388645172,0.545157730579376,0.34969162940979\n             ,0.814756572246552,0.462479740381241,0.65490597486496,0.140991285443306,0.742441654205322,0.431429743766785,0.571957051753998\n             ,0.697662889957428,0.692221164703369,0.374112457036972,0.61714643239975,0.431429743766785,0.571957051753998,0.697662889957428\n             ,0.245428472757339,0.709896266460419,0.660160720348358,0.283866882324219,0.767588019371033,0.574654817581177\n             ,0.358841747045517,0.757651388645172,0.545157730579376,0.283866882324219,0.767588019371033,0.574654817581177\n             ,0.245428472757339,0.709896266460419,0.660160720348358,0.136332333087921,0.628257870674133,0.765967071056366\n             ,0.280443012714386,0.696482062339783,0.660503208637238,0.34969162940979,0.814756572246552,0.462479740381241,0.358841747045517\n             ,0.757651388645172,0.545157730579376,0.283866882324219,0.767588019371033,0.574654817581177,0.259025126695633\n             ,0.847382187843323,0.463518500328064,0.180923089385033,0.918246328830719,0.352264821529388,0.305379688739777\n             ,0.8488889336586,0.431428849697113,0.34969162940979,0.814756572246552,0.462479740381241,0.259025126695633,0.847382187843323\n             ,0.463518500328064,-0.0116734821349382,0.488428175449371,0.872525990009308,0.134861305356026,0.567138254642487\n             ,0.812506437301636,0.313594281673431,0.139182701706886,0.939301192760468,0.194007128477097,-0.0432056449353695\n             ,0.98004823923111,0.313594281673431,0.139182701706886,0.939301192760468,0.134861305356026,0.567138254642487,0.812506437301636\n             ,0.431429743766785,0.571957051753998,0.697662889957428,0.65490597486496,0.140991285443306,0.742441654205322,0.65490597486496\n             ,0.140991285443306,0.742441654205322,0.692221164703369,0.374112457036972,0.61714643239975,0.886324822902679,0.0356802977621555\n             ,0.461687415838242,0.736574053764343,-0.0243753399699926,0.675917506217957,0.136332333087921,0.628257870674133\n             ,0.765967071056366,0.03270548209548,0.73682564496994,0.675291240215302,0.0662719309329987,0.700039923191071,0.711021840572357\n             ,0.0579896494746208,0.56835275888443,0.820738911628723,0.245428472757339,0.709896266460419,0.660160720348358\n             ,0.431429743766785,0.571957051753998,0.697662889957428,0.134861305356026,0.567138254642487,0.812506437301636\n             ,0.03270548209548,0.73682564496994,0.675291240215302,0.358841747045517,0.757651388645172,0.545157730579376,0.692221164703369\n             ,0.374112457036972,0.61714643239975,0.431429743766785,0.571957051753998,0.697662889957428,0.766651809215546,0.277672499418259\n             ,0.578915357589722,0.692221164703369,0.374112457036972,0.61714643239975,0.590013384819031,0.564291477203369,0.577459335327148\n             ,0.671461880207062,0.368781983852386,0.642758727073669,0.671461880207062,0.368781983852386,0.642758727073669\n             ,0.590013384819031,0.564291477203369,0.577459335327148,0.562591254711151,0.530478656291962,0.634100556373596\n             ,0.714458644390106,0.458717465400696,0.528324842453003,0.823107242584229,0.306770831346512,0.477897584438324\n             ,0.766651809215546,0.277672499418259,0.578915357589722,0.671461880207062,0.368781983852386,0.642758727073669\n             ,0.714458644390106,0.458717465400696,0.528324842453003,0.671461880207062,0.368781983852386,0.642758727073669\n             ,0.562591254711151,0.530478656291962,0.634100556373596,0.565896391868591,0.594577431678772,0.571173310279846\n             ,0.0294170621782541,0.161411821842194,0.986448585987091,-0.0116734821349382,0.488428175449371,0.872525990009308\n             ,0.194007128477097,-0.0432056449353695,0.98004823923111,0.253216534852982,-0.212744683027267,0.943727254867554\n             ,0.0294170621782541,0.161411821842194,0.986448585987091,0.253216534852982,-0.212744683027267,0.943727254867554\n             ,-0.000449120096163824,-0.222807794809341,0.974862277507782,0.857822477817535,0.172914609313011,-0.483984649181366\n             ,0.93999981880188,0.000262991350609809,-0.341174811124802,0.755998075008392,0.118834607303143,-0.643696546554565\n             ,0.61924135684967,0.312463909387589,-0.72035163640976,0.980402529239655,0.0757675468921661,-0.181852087378502\n             ,0.8230060338974,0.186259508132935,-0.536626935005188,0.755998075008392,0.118834607303143,-0.643696546554565\n             ,0.93999981880188,0.000262991350609809,-0.341174811124802,0.509885489940643,0.234869077801704,-0.827558636665344\n             ,0.461275607347488,0.184249937534332,-0.867915213108063,0.755998075008392,0.118834607303143,-0.643696546554565\n             ,0.8230060338974,0.186259508132935,-0.536626935005188,0.417167514562607,0.344521790742874,-0.840997040271759\n             ,0.61924135684967,0.312463909387589,-0.72035163640976,0.755998075008392,0.118834607303143,-0.643696546554565\n             ,0.461275607347488,0.184249937534332,-0.867915213108063,0.417167514562607,0.344521790742874,-0.840997040271759\n             ,0.461275607347488,0.184249937534332,-0.867915213108063,0.300174236297607,0.20870378613472,-0.93077290058136\n             ,0.282642304897308,0.340673059225082,-0.896691262722015,0.509885489940643,0.234869077801704,-0.827558636665344\n             ,0.299484491348267,0.221028134226799,-0.928146302700043,0.300174236297607,0.20870378613472,-0.93077290058136\n             ,0.461275607347488,0.184249937534332,-0.867915213108063,0.158535957336426,0.208172604441643,-0.96515828371048\n             ,0.171811878681183,0.197920143604279,-0.965043187141418,0.300174236297607,0.20870378613472,-0.93077290058136\n             ,0.299484491348267,0.221028134226799,-0.928146302700043,0.154383972287178,0.366727441549301,-0.917429327964783\n             ,0.282642304897308,0.340673059225082,-0.896691262722015,0.300174236297607,0.20870378613472,-0.93077290058136\n             ,0.171811878681183,0.197920143604279,-0.965043187141418,0.0148119395598769,0.396181702613831,-0.918052673339844\n             ,0.012098491191864,0.36400181055069,-0.931319653987885,0.0980598703026772,0.422548413276672,-0.901020050048828\n             ,0.154383972287178,0.366727441549301,-0.917429327964783,0.000681107048876584,0.225692093372345,-0.974198460578918\n             ,0.0980598703026772,0.422548413276672,-0.901020050048828,0.012098491191864,0.36400181055069,-0.931319653987885\n             ,0.993362247943878,-0.0349664911627769,0.109584823250771,0.98517507314682,-0.0804919600486755,0.151496455073357\n             ,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.99024760723114,0.0581013411283493,-0.126625210046768\n             ,0.98186069726944,-0.153709232807159,0.111008986830711,0.995911478996277,-0.0872819051146507,0.0232853442430496\n             ,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.98517507314682,-0.0804919600486755,0.151496455073357\n             ,0.980402529239655,0.0757675468921661,-0.181852087378502,0.93999981880188,0.000262991350609809,-0.341174811124802\n             ,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.995911478996277,-0.0872819051146507,0.0232853442430496\n             ,0.857822477817535,0.172914609313011,-0.483984649181366,0.99024760723114,0.0581013411283493,-0.126625210046768\n             ,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.93999981880188,0.000262991350609809,-0.341174811124802\n             ,0.158535957336426,0.208172604441643,-0.96515828371048,0.00121181993745267,0.232196122407913,-0.9726682305336\n             ,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.171811878681183,0.197920143604279,-0.965043187141418\n             ,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.0148119395598769,0.396181702613831,-0.918052673339844\n             ,0.154383972287178,0.366727441549301,-0.917429327964783,0.171811878681183,0.197920143604279,-0.965043187141418\n             ,0.980402529239655,0.0757675468921661,-0.181852087378502,0.981077253818512,0.19092746078968,-0.0321571119129658\n             ,0.849523603916168,0.293443530797958,-0.438406825065613,0.8230060338974,0.186259508132935,-0.536626935005188\n             ,0.97625857591629,0.21655336022377,-0.00488529354333878,0.889407336711884,0.240895375609398,-0.388489335775375\n             ,0.849523603916168,0.293443530797958,-0.438406825065613,0.981077253818512,0.19092746078968,-0.0321571119129658\n             ,0.594776809215546,0.323577910661697,-0.735892593860626,0.538163602352142,0.395974457263947,-0.744032382965088\n             ,0.849523603916168,0.293443530797958,-0.438406825065613,0.889407336711884,0.240895375609398,-0.388489335775375\n             ,0.509885489940643,0.234869077801704,-0.827558636665344,0.8230060338974,0.186259508132935,-0.536626935005188\n             ,0.849523603916168,0.293443530797958,-0.438406825065613,0.538163602352142,0.395974457263947,-0.744032382965088\n             ,0.509885489940643,0.234869077801704,-0.827558636665344,0.538163602352142,0.395974457263947,-0.744032382965088\n             ,0.268934428691864,0.356452435255051,-0.894771456718445,0.299484491348267,0.221028134226799,-0.928146302700043\n             ,0.594776809215546,0.323577910661697,-0.735892593860626,0.256779372692108,0.275679916143417,-0.926317930221558\n             ,0.268934428691864,0.356452435255051,-0.894771456718445,0.538163602352142,0.395974457263947,-0.744032382965088\n             ,0.115779966115952,0.184250295162201,-0.976036310195923,0.138864398002625,0.273968666791916,-0.951660573482513\n             ,0.268934428691864,0.356452435255051,-0.894771456718445,0.256779372692108,0.275679916143417,-0.926317930221558\n             ,0.158535957336426,0.208172604441643,-0.96515828371048,0.299484491348267,0.221028134226799,-0.928146302700043\n             ,0.268934428691864,0.356452435255051,-0.894771456718445,0.138864398002625,0.273968666791916,-0.951660573482513\n             ,0.98186069726944,-0.153709232807159,0.111008986830711,0.98053389787674,0.00911934021860361,0.196137949824333\n             ,0.973558664321899,0.0965578630566597,0.207026869058609,0.995911478996277,-0.0872819051146507,0.0232853442430496\n             ,0.903585314750671,0.234351992607117,0.35862609744072,0.919988930225372,0.274642944335938,0.279627621173859,0.973558664321899\n             ,0.0965578630566597,0.207026869058609,0.98053389787674,0.00911934021860361,0.196137949824333,0.97625857591629\n             ,0.21655336022377,-0.00488529354333878,0.981077253818512,0.19092746078968,-0.0321571119129658,0.973558664321899\n             ,0.0965578630566597,0.207026869058609,0.919988930225372,0.274642944335938,0.279627621173859,0.980402529239655\n             ,0.0757675468921661,-0.181852087378502,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.973558664321899\n             ,0.0965578630566597,0.207026869058609,0.981077253818512,0.19092746078968,-0.0321571119129658,0.505010664463043\n             ,0.824910163879395,0.253943711519241,-0.457634329795837,0.886664032936096,0.066315270960331,-0.560799777507782\n             ,0.808064699172974,-0.180374935269356,0.401338547468185,0.912790596485138,-0.075766921043396,0.505010664463043\n             ,0.824910163879395,0.253943711519241,0.401338547468185,0.912790596485138,-0.075766921043396,0.976279318332672\n             ,0.215815082192421,0.0173952374607325,0.956802248954773,0.196078270673752,0.214668840169907,-0.482280492782593\n             ,0.875927150249481,0.0125399529933929,-0.515466570854187,0.838185369968414,-0.178155809640884,-0.888915956020355\n             ,0.416312962770462,-0.191081121563911,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.560799777507782\n             ,0.808064699172974,-0.180374935269356,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.888915956020355\n             ,0.416312962770462,-0.191081121563911,-0.560632228851318,0.74455463886261,-0.362394601106644,-0.888915956020355\n             ,0.416312962770462,-0.191081121563911,-0.875516295433044,0.353666007518768,-0.329228729009628,-0.621643662452698\n             ,0.524245023727417,-0.582001924514771,-0.560632228851318,0.74455463886261,-0.362394601106644,0.983070194721222\n             ,-0.155307233333588,-0.0972249284386635,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.934603452682495\n             ,0.00426531257107854,-0.355665951967239,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.983070194721222\n             ,-0.155307233333588,-0.0972249284386635,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.97535902261734\n             ,-0.218811824917793,-0.0282160099595785,0.965442478656769,-0.181367635726929,-0.187153950333595,0.534866094589233\n             ,0.53300929069519,0.655606091022491,-0.38366886973381,0.80352109670639,0.455139607191086,-0.722711741924286,0.688240706920624\n             ,0.0633445307612419,-0.14746518433094,0.953655540943146,0.262288182973862,-0.407276064157486,0.876896381378174\n             ,0.255301624536514,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.722711741924286,0.688240706920624\n             ,0.0633445307612419,-0.38366886973381,0.80352109670639,0.455139607191086,-0.457634329795837,0.886664032936096\n             ,0.066315270960331,-0.14746518433094,0.953655540943146,0.262288182973862,-0.722711741924286,0.688240706920624\n             ,0.0633445307612419,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.76844048500061,0.638914406299591\n             ,-0.0358826071023941,-0.407276064157486,0.876896381378174,0.255301624536514,-0.482280492782593,0.875927150249481\n             ,0.0125399529933929,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.76844048500061,0.638914406299591\n             ,-0.0358826071023941,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.560799777507782,0.808064699172974\n             ,-0.180374935269356,-0.457634329795837,0.886664032936096,0.066315270960331,0.505010664463043,0.824910163879395\n             ,0.253943711519241,0.956802248954773,0.196078270673752,0.214668840169907,0.534866094589233,0.53300929069519,0.655606091022491\n             ,-0.14746518433094,0.953655540943146,0.262288182973862,-0.457634329795837,0.886664032936096,0.066315270960331\n             ,0.505010664463043,0.824910163879395,0.253943711519241,-0.14746518433094,0.953655540943146,0.262288182973862\n             ,0.976279318332672,0.215815082192421,0.0173952374607325,0.401338547468185,0.912790596485138,-0.075766921043396\n             ,0.382399499416351,0.801903128623962,-0.459044635295868,0.961685180664063,0.152435541152954,-0.227870747447014\n             ,-0.560799777507782,0.808064699172974,-0.180374935269356,-0.560632228851318,0.74455463886261,-0.362394601106644\n             ,0.382399499416351,0.801903128623962,-0.459044635295868,0.401338547468185,0.912790596485138,-0.075766921043396\n             ,-0.621643662452698,0.524245023727417,-0.582001924514771,0.301987856626511,0.555173337459564,-0.774974763393402\n             ,0.382399499416351,0.801903128623962,-0.459044635295868,-0.560632228851318,0.74455463886261,-0.362394601106644\n             ,0.934603452682495,0.00426531257107854,-0.355665951967239,0.961685180664063,0.152435541152954,-0.227870747447014\n             ,0.382399499416351,0.801903128623962,-0.459044635295868,0.301987856626511,0.555173337459564,-0.774974763393402\n             ,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.999161183834076,-0.0292985811829567,0.0286098290234804\n             ,0.976279318332672,0.215815082192421,0.0173952374607325,0.961685180664063,0.152435541152954,-0.227870747447014\n             ,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.974573373794556,-0.220145642757416,-0.0417446494102478\n             ,0.817201495170593,0.0648972690105438,-0.572686731815338,0.805123388767242,-0.0231669675558805,-0.592654705047607\n             ,0.934603452682495,0.00426531257107854,-0.355665951967239,0.817201495170593,0.0648972690105438,-0.572686731815338\n             ,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.858178198337555,-0.416941344738007,-0.299483120441437\n             ,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.817870736122131,-0.315850645303726,-0.480963379144669\n             ,0.969782054424286,-0.238185256719589,-0.0528260990977287,0.972712695598602,-0.223196312785149,-0.0633513405919075\n             ,0.903657674789429,-0.181017354130745,-0.38811793923378,0.935528516769409,-0.219087332487106,-0.277104824781418\n             ,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.965442478656769,-0.181367635726929,-0.187153950333595\n             ,0.935528516769409,-0.219087332487106,-0.277104824781418,0.838157534599304,-0.159007966518402,-0.521735966205597\n             ,0.903657674789429,-0.181017354130745,-0.38811793923378,0.838157534599304,-0.159007966518402,-0.521735966205597\n             ,0.935528516769409,-0.219087332487106,-0.277104824781418,0.934603452682495,0.00426531257107854,-0.355665951967239\n             ,0.301987856626511,0.555173337459564,-0.774974763393402,0.240385457873344,0.328945428133011,-0.913241326808929\n             ,0.817201495170593,0.0648972690105438,-0.572686731815338,-0.621643662452698,0.524245023727417,-0.582001924514771\n             ,-0.462323904037476,0.371266037225723,-0.805244147777557,0.240385457873344,0.328945428133011,-0.913241326808929\n             ,0.301987856626511,0.555173337459564,-0.774974763393402,-0.421522259712219,0.257120847702026,-0.869602143764496\n             ,0.246327593922615,0.163114905357361,-0.955361843109131,0.240385457873344,0.328945428133011,-0.913241326808929\n             ,-0.462323904037476,0.371266037225723,-0.805244147777557,0.805123388767242,-0.0231669675558805,-0.592654705047607\n             ,0.817201495170593,0.0648972690105438,-0.572686731815338,0.240385457873344,0.328945428133011,-0.913241326808929\n             ,0.246327593922615,0.163114905357361,-0.955361843109131,0.805123388767242,-0.0231669675558805,-0.592654705047607\n             ,0.246327593922615,0.163114905357361,-0.955361843109131,0.256132781505585,-0.0418680384755135,-0.965734481811523\n             ,0.811204135417938,-0.168334782123566,-0.560010075569153,-0.421522259712219,0.257120847702026,-0.869602143764496\n             ,-0.426414966583252,0.120833218097687,-0.896420419216156,0.256132781505585,-0.0418680384755135,-0.965734481811523\n             ,0.246327593922615,0.163114905357361,-0.955361843109131,-0.529633462429047,-0.0744152963161469,-0.844956040382385\n             ,0.193057999014854,-0.308601260185242,-0.931393504142761,0.256132781505585,-0.0418680384755135,-0.965734481811523\n             ,-0.426414966583252,0.120833218097687,-0.896420419216156,0.817870736122131,-0.315850645303726,-0.480963379144669\n             ,0.811204135417938,-0.168334782123566,-0.560010075569153,0.256132781505585,-0.0418680384755135,-0.965734481811523\n             ,0.193057999014854,-0.308601260185242,-0.931393504142761,-0.690630912780762,-0.290166169404984,-0.662444412708282\n             ,-0.748543560504913,-0.365974009037018,-0.55294269323349,-0.621009290218353,-0.361309498548508,-0.695559442043304\n             ,-0.77015894651413,-0.0879611894488335,-0.631757915019989,0.969782054424286,-0.238185256719589,-0.0528260990977287\n             ,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.805123388767242,-0.0231669675558805,-0.592654705047607\n             ,0.811204135417938,-0.168334782123566,-0.560010075569153,0.969782054424286,-0.238185256719589,-0.0528260990977287\n             ,0.811204135417938,-0.168334782123566,-0.560010075569153,0.817870736122131,-0.315850645303726,-0.480963379144669\n             ,0.972712695598602,-0.223196312785149,-0.0633513405919075,-0.77015894651413,-0.0879611894488335,-0.631757915019989\n             ,-0.621009290218353,-0.361309498548508,-0.695559442043304,0.158295571804047,-0.666025876998901,-0.72893899679184\n             ,0.193057999014854,-0.308601260185242,-0.931393504142761,-0.529633462429047,-0.0744152963161469,-0.844956040382385\n             ,0.158295571804047,-0.666025876998901,-0.72893899679184,0.858178198337555,-0.416941344738007,-0.299483120441437\n             ,0.817870736122131,-0.315850645303726,-0.480963379144669,0.193057999014854,-0.308601260185242,-0.931393504142761\n             ,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.858178198337555,-0.416941344738007,-0.299483120441437\n             ,0.158295571804047,-0.666025876998901,-0.72893899679184,0.0486728809773922,-0.68095201253891,-0.730708718299866\n             ,0.158295571804047,-0.666025876998901,-0.72893899679184,-0.621009290218353,-0.361309498548508,-0.695559442043304\n             ,0.945727825164795,-0.098081186413765,0.309804677963257,0.966708958148956,-0.002308584516868,0.255868047475815\n             ,0.944782853126526,0.0188948940485716,0.327151775360107,0.542791187763214,-0.0487677082419395,0.838450610637665\n             ,0.507363021373749,-0.115291275084019,0.853985190391541,0.775663673877716,0.0339613817632198,0.630232095718384\n             ,0.702920734882355,-0.00120963365770876,0.711267173290253,0.800939977169037,-0.0900113806128502,0.59194016456604\n             ,0.93361908197403,-0.0509388744831085,0.354627430438995,0.922792911529541,0.0174659602344036,0.384900212287903\n             ,0.85576856136322,-0.00803003925830126,0.517296552658081,0.864675521850586,0.193993464112282,0.46336030960083\n             ,0.815548717975616,0.273398518562317,0.510032892227173,0.846449613571167,0.310930520296097,0.432256042957306\n             ,0.908188223838806,0.15894940495491,0.387206882238388,0.989404678344727,-0.134779617190361,-0.0539703145623207\n             ,0.933521032333374,-0.113554745912552,-0.340064376592636,0.903657674789429,-0.181017354130745,-0.38811793923378\n             ,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.959026873111725,-0.148191750049591,0.241467580199242\n             ,0.89356255531311,-0.0812801718711853,0.441519498825073,0.870028138160706,-0.439180076122284,0.223990917205811\n             ,0.903808772563934,-0.380508303642273,0.19581413269043,0.96756237745285,-0.0955442041158676,0.233868315815926\n             ,0.959026873111725,-0.148191750049591,0.241467580199242,0.903808772563934,-0.380508303642273,0.19581413269043\n             ,0.933318138122559,-0.313118785619736,0.175709679722786,0.886316955089569,0.0816843584179878,0.455817818641663\n             ,0.959026873111725,-0.148191750049591,0.241467580199242,0.96756237745285,-0.0955442041158676,0.233868315815926\n             ,0.289565563201904,-0.362892955541611,0.885697722434998,0.173318073153496,-0.274096310138702,0.945955634117126\n             ,0.174916133284569,0.190565213561058,0.965965449810028,0.493298023939133,0.0378949381411076,0.8690345287323,0.179719522595406\n             ,0.199890360236168,0.963195025920868,0.431708127260208,0.0743667632341385,0.898942530155182,0.280919551849365\n             ,0.197001457214355,0.939294755458832,0.410660326480865,0.0589907094836235,0.909878134727478,0.471029788255692\n             ,0.166954964399338,0.86617374420166,0.562969863414764,0.141692653298378,0.81424081325531,0.55342048406601,0.140735372900963\n             ,0.820925891399384,0.498867928981781,0.236602708697319,0.833756506443024,0.542900562286377,0.367345452308655\n             ,0.755192875862122,0.314301073551178,0.320888847112656,0.893445670604706,0.351316899061203,-0.0729207322001457\n             ,0.933412551879883,0.533053755760193,0.0411353260278702,0.845080852508545,0.542900562286377,0.367345452308655\n             ,0.755192875862122,0.535205781459808,0.472302228212357,0.700346648693085,0.371347606182098,0.418176740407944\n             ,0.82899284362793,0.314301073551178,0.320888847112656,0.893445670604706,0.267092674970627,-0.484114617109299\n             ,0.833243370056152,0.329291462898254,-0.460140645503998,0.824522733688354,0.292688071727753,-0.580336809158325\n             ,0.759962379932404,0.209196627140045,-0.665287017822266,0.716679811477661,0.512064158916473,0.485980182886124\n             ,0.708246827125549,0.611575484275818,0.314111411571503,0.726160764694214,0.414541780948639,0.400993496179581\n             ,0.816920638084412,0.397927284240723,0.292557120323181,0.869519531726837,0.371347606182098,0.418176740407944\n             ,0.82899284362793,0.763672888278961,0.330310761928558,0.554705798625946,0.793774306774139,0.385858178138733,0.470144480466843\n             ,0.846449613571167,0.310930520296097,0.432256042957306,0.815548717975616,0.273398518562317,0.510032892227173\n             ,0.793774306774139,0.385858178138733,0.470144480466843,0.763672888278961,0.330310761928558,0.554705798625946\n             ,0.87058699131012,0.227341398596764,0.436341762542725,0.843018114566803,0.354378879070282,0.404643177986145,0.763672888278961\n             ,0.330310761928558,0.554705798625946,0.815548717975616,0.273398518562317,0.510032892227173,0.776109874248505\n             ,0.274881482124329,0.567532956600189,0.728024780750275,0.317726284265518,0.607478320598602,0.817228376865387\n             ,-0.0154423741623759,0.576107025146484,0.775663673877716,0.0339613817632198,0.630232095718384,0.507363021373749\n             ,-0.115291275084019,0.853985190391541,0.54023802280426,-0.148879259824753,0.828237771987915,0.839345693588257\n             ,-0.00945493672043085,0.543515801429749,0.785013139247894,0.0451312512159348,0.617832958698273,0.36207702755928\n             ,0.0357636697590351,0.931461870670319,0.52197939157486,-0.246480882167816,0.816568851470947,0.480981200933456\n             ,0.871001183986664,0.100070223212242,0.739092469215393,0.541533410549164,0.400604367256165,0.252335846424103\n             ,0.330343335866928,0.909505307674408,0.13062296807766,0.400416731834412,0.906975269317627,0.121470481157303,-0.391699403524399\n             ,0.912039756774902,0.13062296807766,0.400416731834412,0.906975269317627,0.252335846424103,0.330343335866928,0.909505307674408\n             ,0.114735066890717,-0.656680226325989,0.745390474796295,0.164827063679695,-0.547387719154358,0.820486903190613\n             ,0.171075537800789,-0.616661608219147,0.768415033817291,0.208488672971725,-0.647888123989105,0.732648193836212\n             ,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0233143605291843,-0.495335191488266,0.868389010429382\n             ,-0.199777901172638,-0.484420716762543,0.851719081401825,0.607095539569855,-0.200262412428856,0.768979847431183\n             ,0.655191659927368,0.0146637577563524,0.755320370197296,0.596563339233398,-0.0223739240318537,0.8022540807724\n             ,0.702920734882355,-0.00120963365770876,0.711267173290253,0.495325356721878,-0.15430523455143,0.854893386363983\n             ,0.668687582015991,0.158593982458115,0.726432919502258,0.936089217662811,-0.214836105704308,0.278536230325699\n             ,0.92750072479248,-0.198037564754486,0.31705442070961,0.941718637943268,-0.180898189544678,0.283622801303864\n             ,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0632589310407639,-0.395606756210327,0.916238844394684\n             ,0.0293192863464355,-0.389476090669632,0.920569777488709,-0.0362738110125065,-0.271473735570908,0.961762070655823\n             ,0.816257119178772,-0.389834344387054,-0.426325589418411,0.933138132095337,-0.0070160455070436,-0.359449595212936\n             ,0.856223344802856,0.13723511993885,-0.498044282197952,0.93777334690094,-0.280869245529175,-0.204190224409103\n             ,0.047360323369503,-0.552981853485107,0.831846177577972,0.248945504426956,-0.117258243262768,0.961393058300018\n             ,0.362627446651459,-0.180693462491035,0.914249002933502,0.11539563536644,-0.528798937797546,0.840865969657898\n             ,0.370056182146072,0.811048626899719,-0.453054636716843,0.33390274643898,0.823867678642273,-0.457985788583755\n             ,0.713096976280212,0.68854147195816,-0.131921663880348,0.370056182146072,0.811048626899719,-0.453054636716843\n             ,-0.299774140119553,0.750125706195831,-0.589446246623993,0.33390274643898,0.823867678642273,-0.457985788583755\n             ,0.138864398002625,0.273968666791916,-0.951660573482513,0.115779966115952,0.184250295162201,-0.976036310195923\n             ,-0.00542618287727237,0.149814411997795,-0.98869925737381,0.002942921128124,0.253444164991379,-0.967345535755157\n             ,0.0694107115268707,0.216942340135574,-0.973713636398315,-0.00773082999512553,0.120841763913631,-0.992641687393188\n             ,0.139773815870285,0.0987650603055954,-0.985245525836945,0.17595848441124,0.184216767549515,-0.967007160186768\n             ,-0.147914990782738,0.17213037610054,0.973905682563782,0.026632534340024,0.124120466411114,0.991909682750702\n             ,0.00927210599184036,-0.101372048258781,0.99480539560318,-0.220686122775078,-0.040834903717041,0.974489688873291\n             ,0.714891254901886,0.201140508055687,0.669681310653687,0.0118562933057547,0.974313676357269,0.224883005023003\n             ,-0.258119583129883,0.745032370090485,0.615061819553375,-0.0101526426151395,0.0385068021714687,0.999206781387329\n             ,-0.690630912780762,-0.290166169404984,-0.662444412708282,-0.77015894651413,-0.0879611894488335,-0.631757915019989\n             ,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.994307160377502,-0.0864710509777069,-0.0622573494911194\n             ,0.961685180664063,0.152435541152954,-0.227870747447014,0.934603452682495,0.00426531257107854,-0.355665951967239\n             ,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.965442478656769,-0.181367635726929,-0.187153950333595\n             ,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.969782054424286,-0.238185256719589,-0.0528260990977287\n             ,0.935528516769409,-0.219087332487106,-0.277104824781418,-0.888915956020355,0.416312962770462,-0.191081121563911\n             ,-0.515466570854187,0.838185369968414,-0.178155809640884,-0.534112751483917,0.714107155799866,-0.452520221471787\n             ,-0.875516295433044,0.353666007518768,-0.329228729009628,0.840574324131012,-0.291103184223175,0.456830143928528\n             ,0.891989231109619,-0.254739731550217,0.373447239398956,0.948027610778809,-0.215131908655167,0.234439536929131\n             ,0.869891345500946,-0.342425405979156,0.355012476444244,-0.773259878158569,-0.498874604701996,-0.39139911532402\n             ,-0.934147357940674,0.162888333201408,-0.317546963691711,-0.84568065404892,0.227536335587502,-0.482753932476044\n             ,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.311408758163452,-0.316491156816483,0.896023392677307\n             ,-0.0737119764089584,-0.466615557670593,0.881383299827576,-0.069260835647583,0.0269219465553761,0.997235238552094\n             ,-0.451660662889481,0.11085283011198,0.88527637720108,0.289565563201904,-0.362892955541611,0.885697722434998\n             ,0.493298023939133,0.0378949381411076,0.8690345287323,0.106603257358074,0.0133492052555084,0.994212031364441\n             ,0.0312842912971973,-0.474717557430267,0.879582047462463,0.937608182430267,0.0460146591067314,0.344635367393494\n             ,0.950939536094666,0.19349630177021,0.241398423910141,0.900685906410217,0.180543556809425,0.395182073116302,0.905692398548126\n             ,-0.0579960867762566,0.419949680566788,0.0266619008034468,0.262281715869904,0.964622974395752,-0.0475814715027809\n             ,0.0593862198293209,0.997100412845612,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0073667336255312\n             ,-0.00580848380923271,0.999956011772156,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.0540597923099995\n             ,-0.0316095426678658,0.998037278652191,0.0144113004207611,0.0269631575793028,0.999532520771027,-0.104829348623753\n             ,-0.0149719836190343,0.994377493858337,0.958109974861145,-0.0344467237591743,0.284321486949921,0.951365828514099\n             ,0.00983366928994656,0.30790650844574,0.908929646015167,0.18951641023159,0.371389836072922,0.930171310901642\n             ,0.112328357994556,0.34951913356781,-0.739963114261627,0.167704880237579,0.651405930519104,-0.628194212913513\n             ,0.287138849496841,0.723134398460388,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.720110774040222\n             ,-0.0107529554516077,0.693775773048401,0.36207702755928,0.0357636697590351,0.931461870670319,0.785013139247894\n             ,0.0451312512159348,0.617832958698273,0.563811004161835,0.228632539510727,0.793627321720123,-0.619005084037781\n             ,0.113047316670418,0.777208507061005,-0.578717350959778,0.160483196377754,0.799582004547119,-0.603184819221497\n             ,0.0701910704374313,0.794506967067719,-0.761701762676239,0.421244710683823,0.492304056882858,-0.702385485172272\n             ,0.688902199268341,0.179076477885246,-0.630214631557465,0.655408442020416,0.416256308555603,0.778178691864014\n             ,0.616257607936859,0.121097095310688,0.739092469215393,0.541533410549164,0.400604367256165,0.480981200933456\n             ,0.871001183986664,0.100070223212242,0.746549785137177,0.0205342527478933,0.665012657642365,0.808598875999451\n             ,0.0304549541324377,0.587571620941162,0.669167935848236,0.129631534218788,0.731717109680176,0.732805073261261\n             ,0.230000048875809,0.640387892723084,0.991854608058929,0.119089640676975,0.0451894104480743,0.965819001197815\n             ,-0.0271366275846958,0.257793039083481,0.815926849842072,-0.0521769113838673,0.575795948505402,0.919128894805908\n             ,0.0630135238170624,0.388884782791138,0.856838226318359,0.0312061347067356,0.514640152454376,0.928679704666138\n             ,-0.214017242193222,0.30290362238884,0.928761661052704,-0.0844941884279251,0.360918909311295,0.785623669624329\n             ,-0.0282825529575348,0.61805784702301,0.856838226318359,0.0312061347067356,0.514640152454376,0.785623669624329\n             ,-0.0282825529575348,0.61805784702301,0.746549785137177,0.0205342527478933,0.665012657642365,0.732805073261261\n             ,0.230000048875809,0.640387892723084,0.776369571685791,-0.530167698860168,0.340840935707092,0.878716766834259\n             ,-0.421581953763962,0.223887145519257,0.805564939975739,-0.533806264400482,0.257130265235901,0.67726731300354\n             ,-0.631388366222382,0.377700597047806,0.975082695484161,0.0550070591270924,-0.214913904666901,0.988399267196655\n             ,0.136643067002296,-0.0662992894649506,0.805564939975739,-0.533806264400482,0.257130265235901,0.878716766834259\n             ,-0.421581953763962,0.223887145519257,0.563811004161835,0.228632539510727,0.793627321720123,0.103208005428314\n             ,-0.00969436671584845,0.994612574577332,0.36207702755928,0.0357636697590351,0.931461870670319,0.546967387199402\n             ,0.0579036511480808,0.835148990154266,0.295946687459946,-0.143637612462044,0.944343090057373,0.103208005428314\n             ,-0.00969436671584845,0.994612574577332,0.563811004161835,0.228632539510727,0.793627321720123,0.535101175308228\n             ,-0.00626787729561329,0.844764709472656,0.285702854394913,-0.151269629597664,0.946304082870483,0.295946687459946\n             ,-0.143637612462044,0.944343090057373,0.546967387199402,0.0579036511480808,0.835148990154266,0.565106153488159\n             ,0.017743531614542,0.824827373027802,-0.670063674449921,0.104801684617996,0.734868168830872,-0.611212015151978\n             ,0.257414042949677,0.74843692779541,-0.483639568090439,-0.0787182152271271,0.871720254421234,0.527478218078613\n             ,-0.385366201400757,0.757139086723328,0.385615348815918,-0.420324206352234,0.821357607841492,0.495325356721878\n             ,-0.15430523455143,0.854893386363983,0.702920734882355,-0.00120963365770876,0.711267173290253,0.20434632897377\n             ,0.515124678611755,0.832399606704712,0.219657093286514,0.398345082998276,0.890545904636383,0.340864300727844\n             ,0.524212896823883,0.780392467975616,0.171536713838577,-0.946371257305145,0.273782074451447,0.164180904626846\n             ,-0.958690702915192,0.232285901904106,0.279211044311523,-0.955691933631897,0.093242421746254,0.255019038915634\n             ,-0.916801631450653,0.307311117649078,0.16572479903698,-0.647090375423431,0.744183719158173,0.0821766927838326\n             ,-0.66467010974884,0.742603957653046,0.171536713838577,-0.946371257305145,0.273782074451447,0.255019038915634\n             ,-0.916801631450653,0.307311117649078,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.139739543199539\n             ,-0.751490116119385,0.644775569438934,-0.304556578397751,-0.909958362579346,0.281462401151657,-0.30062210559845\n             ,-0.923126101493835,0.239717543125153,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.304556578397751\n             ,-0.909958362579346,0.281462401151657,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.139739543199539\n             ,-0.751490116119385,0.644775569438934,0.033345639705658,-0.401991754770279,0.915035903453827,-0.157473087310791\n             ,-0.645219802856445,0.747591853141785,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.436592847108841\n             ,-0.8724405169487,0.219622910022736,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.303882002830505\n             ,-0.951589345932007,0.046188946813345,-0.52777773141861,0.480110883712769,0.700674116611481,-0.346435993909836\n             ,0.570491790771484,0.744661808013916,-0.428986668586731,0.611180424690247,0.665153324604034,0.245724827051163\n             ,0.276487857103348,0.929071426391602,0.305438488721848,0.421940237283707,0.853623926639557,0.219657093286514\n             ,0.398345082998276,0.890545904636383,0.163330301642418,0.241669088602066,0.956514120101929,-0.960206747055054\n             ,0.212085798382759,0.18172125518322,-0.934037208557129,0.242426365613937,0.262305021286011,-0.931853711605072\n             ,0.224255800247192,0.285233229398727,-0.974589943885803,0.150285556912422,0.166098326444626,-0.346435993909836\n             ,0.570491790771484,0.744661808013916,-0.273772716522217,0.454653739929199,0.847548484802246,-0.20940063893795\n             ,0.453145354986191,0.866493284702301,-0.279750615358353,0.610641419887543,0.74084860086441,-0.428986668586731\n             ,0.611180424690247,0.665153324604034,0.0744598954916,0.293609887361526,0.953020930290222,0.0879488736391068,0.341627478599548\n             ,0.935711324214935,0.139874473214149,0.332423865795136,0.932700097560883,-0.617874979972839,-0.144242078065872\n             ,0.772932589054108,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.780423760414124,-0.171599060297012\n             ,0.601242482662201,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.671271145343781,-0.219168946146965\n             ,0.708067834377289,-0.800495445728302,-0.125636011362076,0.586022734642029,-0.780423760414124,-0.171599060297012\n             ,0.601242482662201,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.938549876213074,0.168846443295479\n             ,0.301023334264755,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.896919310092926,-0.0747082084417343\n             ,0.435837626457214,-0.918760776519775,0.045384906232357,0.392197400331497,-0.855047225952148,0.419915407896042\n             ,0.304245471954346,-0.922844409942627,0.263350307941437,0.281078040599823,-0.897303998470306,0.274592310190201\n             ,0.345607608556747,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.680772840976715,-0.570546209812164\n             ,0.459374964237213,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.766225039958954,-0.486649185419083\n             ,0.419609010219574,0.64728707075119,-0.269912004470825,0.712858319282532,0.804244041442871,-0.107830874621868\n             ,0.584434807300568,0.941014289855957,-0.231837883591652,0.246461525559425,0.903722703456879,-0.336785912513733\n             ,0.26431143283844,0.719567954540253,-0.322717130184174,0.614878535270691,0.550090253353119,-0.357467710971832\n             ,0.754730105400085,0.702580511569977,0.00276018492877483,0.711598932743073,0.792236804962158,-0.0960670188069344\n             ,0.602604329586029,0.866469502449036,-0.361488610506058,0.344320476055145,0.719567954540253,-0.322717130184174\n             ,0.614878535270691,0.792236804962158,-0.0960670188069344,0.602604329586029,0.883809387683868,-0.290479838848114\n             ,0.366745710372925,0.892324268817902,-0.364589005708694,0.266143202781677,0.897057175636292,-0.352101475000381\n             ,0.267044723033905,0.866469502449036,-0.361488610506058,0.344320476055145,0.883809387683868,-0.290479838848114\n             ,0.366745710372925,0.789786696434021,-0.370871901512146,0.488560140132904,0.844530344009399,-0.306019067764282\n             ,0.4394551217556,0.897057175636292,-0.352101475000381,0.267044723033905,0.892324268817902,-0.364589005708694\n             ,0.266143202781677,-0.82659912109375,0.121020883321762,0.549625158309937,-0.787644863128662,0.107126019895077\n             ,0.606745064258575,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.895226001739502,0.157463803887367\n             ,0.416863977909088,-0.917545735836029,0.0924613624811172,0.386730790138245,-0.784394800662994,0.0327747240662575\n             ,0.61939537525177,-0.82659912109375,0.121020883321762,0.549625158309937,-0.895226001739502,0.157463803887367\n             ,0.416863977909088,0.680521726608276,-0.105455316603184,0.725099503993988,0.85576856136322,-0.00803003925830126\n             ,0.517296552658081,0.817228376865387,-0.0154423741623759,0.576107025146484,0.54023802280426,-0.148879259824753\n             ,0.828237771987915,0.800939977169037,-0.0900113806128502,0.59194016456604,0.85576856136322,-0.00803003925830126\n             ,0.517296552658081,0.680521726608276,-0.105455316603184,0.725099503993988,0.0623843558132648,-0.406503170728683\n             ,0.911517083644867,-0.0108760436996818,-0.349400758743286,0.936910271644592,-0.00295650074258447,-0.253587752580643\n             ,0.967307865619659,0.226468428969383,-0.439074218273163,0.869439959526062,0.819252371788025,-0.448852121829987\n             ,0.356871604919434,0.903722703456879,-0.336785912513733,0.26431143283844,0.925993382930756,0.073547326028347\n             ,-0.370306611061096,0.819883346557617,-0.543677628040314,0.179460227489471,0.918502330780029,-0.196233198046684\n             ,0.343287169933319,0.938213586807251,-0.216931000351906,0.269622415304184,0.891989231109619,-0.254739731550217\n             ,0.373447239398956,-0.596545398235321,0.216776832938194,0.772749245166779,-0.700570464134216,0.212181925773621\n             ,0.681307435035706,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.803527772426605,-0.0332267098128796\n             ,0.59433925151825,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.578490018844604,0.0704870000481606\n             ,0.812638223171234,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.377908736467361,-0.53636372089386\n             ,0.754651606082916,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.323468834161758,-0.409916341304779\n             ,0.85284024477005,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.419774144887924,-0.091299757361412\n             ,0.903024911880493,-0.35642284154892,0.221263155341148,0.907747387886047,-0.252474844455719,-0.0950261279940605\n             ,0.962926030158997,-0.204613357782364,0.564212739467621,0.799873352050781,-0.046717431396246,0.464232265949249\n             ,0.884480595588684,-0.104829348623753,-0.0149719836190343,0.994377493858337,-0.218910127878189,-0.0667930841445923\n             ,0.973456263542175,0.255169302225113,-0.0558453612029552,0.965282320976257,0.133207947015762,0.0763719230890274\n             ,0.988141179084778,0.187445163726807,0.511297464370728,0.838712811470032,0.330043107271194,0.436470597982407\n             ,0.83699756860733,-0.692487776279449,0.122583940625191,0.71093875169754,-0.667788088321686,0.180951654911041\n             ,0.722021877765656,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.933361113071442,-0.067049466073513\n             ,0.35262069106102,-0.951185405254364,-0.150061026215553,0.2696812748909,-0.95017421245575,-0.209271758794785\n             ,0.231028690934181,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.933361113071442,-0.067049466073513\n             ,0.35262069106102,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.961850166320801,-0.179731413722038\n             ,0.20625451207161,-0.582078754901886,0.152128055691719,0.798774898052216,-0.578490018844604,0.0704870000481606\n             ,0.812638223171234,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.667788088321686,0.180951654911041\n             ,0.722021877765656,-0.667788088321686,0.180951654911041,0.722021877765656,-0.692487776279449,0.122583940625191\n             ,0.71093875169754,-0.518675327301025,0.170822575688362,0.837732374668121,-0.667788088321686,0.180951654911041\n             ,0.722021877765656,-0.518675327301025,0.170822575688362,0.837732374668121,-0.538357496261597,0.0919485241174698\n             ,0.837685286998749,-0.582078754901886,0.152128055691719,0.798774898052216,-0.518675327301025,0.170822575688362\n             ,0.837732374668121,-0.447176039218903,0.207748264074326,0.869985222816467,-0.53751266002655,0.1327995210886,0.832733154296875\n             ,-0.527163207530975,0.108157083392143,0.842852890491486,-0.419887959957123,0.29813814163208,0.857209324836731\n             ,-0.447176039218903,0.207748264074326,0.869985222816467,-0.518675327301025,0.170822575688362,0.837732374668121\n             ,0.523068964481354,-0.400331109762192,0.752418637275696,0.630171060562134,-0.220097869634628,0.744608163833618\n             ,0.511712968349457,-0.26713839173317,0.816570222377777,-0.576066911220551,-0.146876826882362,0.804098308086395\n             ,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.17153462767601,-0.247131928801537,0.953677952289581\n             ,-0.505191087722778,-0.124014981091022,0.854050517082214,0.139874473214149,0.332423865795136,0.932700097560883\n             ,0.0879488736391068,0.341627478599548,0.935711324214935,-0.113911136984825,0.222564980387688,0.968240201473236\n             ,-0.0552638620138168,0.347488284111023,0.936054348945618,0.431708127260208,0.0743667632341385,0.898942530155182\n             ,0.179719522595406,0.199890360236168,0.963195025920868,0.670062482357025,-0.367128610610962,0.645161092281342\n             ,0.666223108768463,-0.303315341472626,0.681283056735992,0.775085091590881,-0.264017641544342,0.574053823947906\n             ,0.788963615894318,-0.297772616147995,0.537464380264282,-0.912839949131012,0.366738528013229,0.179516360163689\n             ,-0.930616736412048,0.324010014533997,0.170205876231194,-0.922440767288208,0.315537393093109,0.222573891282082\n             ,-0.951293051242828,0.220237165689468,0.215724766254425,0.494429767131805,-0.0934201404452324,0.864182770252228\n             ,0.550924062728882,0.0100475419312716,0.834494948387146,0.577744483947754,0.0458397567272186,0.814929485321045\n             ,0.401639640331268,-0.00309631112031639,0.915792524814606,-0.863483607769012,-0.064167745411396,0.500278532505035\n             ,-0.559565424919128,0.213157281279564,0.80090606212616,-0.671594560146332,-0.181319773197174,0.718389809131622\n             ,0.0272070206701756,0.178279355168343,0.983603715896606,0.0284836571663618,0.148866042494774,0.988447070121765\n             ,0.0307504720985889,0.178748592734337,0.983414113521576,0.0412900410592556,0.144470527768135,0.988647282123566\n             ,0.0412900410592556,0.144470527768135,0.988647282123566,0.0307504720985889,0.178748592734337,0.983414113521576\n             ,0.0381993055343628,0.285694986581802,0.957558989524841,0.17553049325943,0.198497295379639,0.964255094528198\n             ,0.17553049325943,0.198497295379639,0.964255094528198,0.0381993055343628,0.285694986581802,0.957558989524841\n             ,0.0348379723727703,0.239972576498985,0.970154345035553,0.00455546798184514,0.298394352197647,0.954431772232056\n             ,-0.00221070507541299,0.348074615001678,0.937464237213135,0.17553049325943,0.198497295379639,0.964255094528198\n             ,0.00455546798184514,0.298394352197647,0.954431772232056,0.416927576065063,0.413195610046387,0.809592962265015\n             ,0.620209395885468,0.316063761711121,0.717944324016571,0.497093498706818,0.456073582172394,0.738169968128204\n             ,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.203441798686981,-0.920203626155853,-0.334419906139374\n             ,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.778645157814026,-0.596678197383881,-0.194131031632423\n             ,0.140199616551399,0.988947510719299,0.0482386760413647,0.0780868381261826,0.989874243736267,-0.118538655340672\n             ,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.467009961605072,0.872948586940765,-0.140934243798256\n             ,0.0402784161269665,0.935566067695618,0.350847274065018,0.140199616551399,0.988947510719299,0.0482386760413647\n             ,-0.467009961605072,0.872948586940765,-0.140934243798256,-0.634040713310242,0.756764888763428,0.159057512879372\n             ,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.0320936106145382,0.92166805267334,-0.386649638414383\n             ,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.812742531299591,0.259539633989334,-0.521621286869049\n             ,-0.623760402202606,0.624061942100525,-0.470605611801147,0.0780868381261826,0.989874243736267,-0.118538655340672\n             ,-0.0320936106145382,0.92166805267334,-0.386649638414383,-0.631305754184723,0.608145177364349,-0.481261342763901\n             ,-0.778645157814026,-0.596678197383881,-0.194131031632423,-0.181932657957077,-0.979667663574219,-0.0845683068037033\n             ,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.67014467716217,-0.656066417694092,0.347106426954269\n             ,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.149305984377861,-0.898303508758545,-0.413229376077652\n             ,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.690762042999268,-0.452603310346603,-0.563913226127625\n             ,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.169935211539268,-0.892408609390259,-0.418005883693695\n             ,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.773259878158569,-0.498874604701996,-0.39139911532402\n             ,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.156271457672119,-0.733824193477631,-0.661121249198914\n             ,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.507226884365082,-0.292785495519638,-0.810553848743439\n             ,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.139869406819344,-0.803301215171814,-0.578915953636169\n             ,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.616132795810699,-0.418477803468704,-0.667275547981262\n             ,0.387454837560654,-0.142215475440025,-0.910853147506714,0.329197883605957,-0.229186490178108,-0.916025280952454\n             ,0.046584777534008,-0.616905212402344,-0.785657584667206,0.0849056839942932,-0.303190618753433,-0.949139893054962\n             ,0.323159694671631,-0.226072624325752,-0.918944478034973,-0.392845422029495,-0.17293743789196,-0.903197169303894\n             ,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.156271457672119,-0.733824193477631,-0.661121249198914\n             ,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.856640636920929,-0.0924222394824028,0.507567644119263\n             ,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.188150137662888,-0.861675441265106,0.471290737390518\n             ,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.876164734363556,0.0590006411075592,0.478387147188187\n             ,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.243391394615173,0.450631767511368,0.858889758586884\n             ,-0.83115953207016,0.347447574138641,0.434112966060638,-0.83115953207016,0.347447574138641,0.434112966060638\n             ,-0.243391394615173,0.450631767511368,0.858889758586884,0.0402784161269665,0.935566067695618,0.350847274065018\n             ,-0.634040713310242,0.756764888763428,0.159057512879372,-0.856640636920929,-0.0924222394824028,0.507567644119263\n             ,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.353458434343338,0.0279432106763124,0.935032784938812\n             ,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.0625194534659386,-0.652953445911407,-0.754813313484192\n             ,0.046584777534008,-0.616905212402344,-0.785657584667206,0.0190247669816017,-0.745713531970978,-0.665995001792908\n             ,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.0729037374258041,-0.816932082176209,-0.572107493877411\n             ,-0.070786252617836,-0.7830451130867,-0.617923676967621,0.0190247669816017,-0.745713531970978,-0.665995001792908\n             ,-0.00492077972739935,-0.813752949237823,-0.58119010925293,-0.0765528976917267,-0.892704427242279,-0.444092899560928\n             ,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.00492077972739935,-0.813752949237823,-0.58119010925293\n             ,-0.0045230402611196,-0.909497022628784,-0.415685802698135,-0.0762164741754532,-0.884903132915497,-0.459497004747391\n             ,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0045230402611196,-0.909497022628784,-0.415685802698135\n             ,0.016590029001236,-0.906809270381927,-0.421214610338211,-0.0781072080135345,-0.934095561504364,-0.348374396562576\n             ,-0.0762164741754532,-0.884903132915497,-0.459497004747391,0.016590029001236,-0.906809270381927,-0.421214610338211\n             ,0.0482706017792225,-0.93963760137558,-0.338749468326569,-0.0777258798480034,-0.995770275592804,-0.0489919558167458\n             ,-0.0781072080135345,-0.934095561504364,-0.348374396562576,0.0482706017792225,-0.93963760137558,-0.338749468326569\n             ,0.0264394171535969,-0.995756030082703,-0.0881528109312058,-0.0632308647036552,-0.910096168518066,0.409544676542282\n             ,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,0.0264394171535969,-0.995756030082703,-0.0881528109312058\n             ,0.0696752369403839,-0.881582498550415,0.46685928106308,-0.0141258565708995,-0.388077318668365,0.921518564224243\n             ,-0.0632308647036552,-0.910096168518066,0.409544676542282,0.0696752369403839,-0.881582498550415,0.46685928106308\n             ,0.26997372508049,-0.290317326784134,0.91805773973465,0.0160026121884584,-0.0152897713705897,0.999755024909973\n             ,-0.0141258565708995,-0.388077318668365,0.921518564224243,0.26997372508049,-0.290317326784134,0.91805773973465\n             ,0.385292500257492,-0.029097318649292,0.922335624694824,0.0535399168729782,0.501161873340607,0.863695681095123\n             ,0.0160026121884584,-0.0152897713705897,0.999755024909973,0.385292500257492,-0.029097318649292,0.922335624694824\n             ,0.338861733675003,0.40567883849144,0.848880112171173,0.0919129848480225,0.966963589191437,0.237767487764359\n             ,0.0535399168729782,0.501161873340607,0.863695681095123,0.338861733675003,0.40567883849144,0.848880112171173\n             ,0.157188326120377,0.944919049739838,0.287088453769684,0.157188326120377,0.944919049739838,0.287088453769684\n             ,0.098090648651123,0.992740631103516,0.0696010887622833,0.0886319801211357,0.994267225265503,0.0598079860210419\n             ,0.0919129848480225,0.966963589191437,0.237767487764359,0.098090648651123,0.992740631103516,0.0696010887622833\n             ,0.125102162361145,0.989620208740234,-0.0707194358110428,0.0366231761872768,0.998422920703888,-0.0425488464534283\n             ,0.0886319801211357,0.994267225265503,0.0598079860210419,0.00503939157351851,0.912464261054993,-0.409125357866287\n             ,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.125102162361145,0.989620208740234,-0.0707194358110428\n             ,0.188163548707962,0.840512216091156,-0.5080686211586,0.017586937174201,0.584774792194366,-0.811005055904388\n             ,0.00503939157351851,0.912464261054993,-0.409125357866287,0.188163548707962,0.840512216091156,-0.5080686211586\n             ,0.243700608611107,0.544483065605164,-0.802588403224945,0.163174018263817,0.444838464260101,-0.880620777606964\n             ,0.189078122377396,0.441867411136627,-0.87692791223526,0.0718594193458557,0.455831170082092,-0.88716071844101\n             ,0.057487852871418,0.456679046154022,-0.88777220249176,-0.0362379811704159,-0.262005388736725,-0.964385807514191\n             ,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.16799932718277,-0.600783705711365,-0.781559407711029\n             ,-0.162789091467857,-0.282180637121201,-0.945448994636536,0.00530779222026467,-0.225043326616287,-0.974334299564362\n             ,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.046584777534008,-0.616905212402344,-0.785657584667206\n             ,0.329197883605957,-0.229186490178108,-0.916025280952454,0.364371746778488,-0.284274369478226,-0.886803984642029\n             ,0.0190247669816017,-0.745713531970978,-0.665995001792908,-0.00492077972739935,-0.813752949237823,-0.58119010925293\n             ,0.0190247669816017,-0.745713531970978,-0.665995001792908,0.364371746778488,-0.284274369478226,-0.886803984642029\n             ,0.428298622369766,-0.365026712417603,-0.826629161834717,-0.0045230402611196,-0.909497022628784,-0.415685802698135\n             ,-0.00492077972739935,-0.813752949237823,-0.58119010925293,0.428298622369766,-0.365026712417603,-0.826629161834717\n             ,0.521451473236084,-0.506328523159027,-0.686818599700928,0.016590029001236,-0.906809270381927,-0.421214610338211\n             ,-0.0045230402611196,-0.909497022628784,-0.415685802698135,0.521451473236084,-0.506328523159027,-0.686818599700928\n             ,0.593445479869843,-0.55176454782486,-0.585984945297241,0.0482706017792225,-0.93963760137558,-0.338749468326569\n             ,0.016590029001236,-0.906809270381927,-0.421214610338211,0.593445479869843,-0.55176454782486,-0.585984945297241\n             ,0.673712253570557,-0.610602140426636,-0.416265428066254,0.0264394171535969,-0.995756030082703,-0.0881528109312058\n             ,0.0482706017792225,-0.93963760137558,-0.338749468326569,0.673712253570557,-0.610602140426636,-0.416265428066254\n             ,0.670762062072754,-0.708589673042297,-0.219041094183922,0.0696752369403839,-0.881582498550415,0.46685928106308\n             ,0.0264394171535969,-0.995756030082703,-0.0881528109312058,0.670762062072754,-0.708589673042297,-0.219041094183922\n             ,0.572986006736755,-0.752050638198853,0.325740456581116,0.26997372508049,-0.290317326784134,0.91805773973465\n             ,0.0696752369403839,-0.881582498550415,0.46685928106308,0.572986006736755,-0.752050638198853,0.325740456581116\n             ,0.849142253398895,-0.224129945039749,0.478250175714493,0.385292500257492,-0.029097318649292,0.922335624694824\n             ,0.26997372508049,-0.290317326784134,0.91805773973465,0.849142253398895,-0.224129945039749,0.478250175714493\n             ,0.890664577484131,-0.0774205401539803,0.448020815849304,0.338861733675003,0.40567883849144,0.848880112171173\n             ,0.385292500257492,-0.029097318649292,0.922335624694824,0.890664577484131,-0.0774205401539803,0.448020815849304\n             ,0.888973355293274,0.214637205004692,0.404545694589615,0.157188326120377,0.944919049739838,0.287088453769684\n             ,0.338861733675003,0.40567883849144,0.848880112171173,0.888973355293274,0.214637205004692,0.404545694589615,0.76104062795639\n             ,0.645680010318756,0.0625654682517052,0.76104062795639,0.645680010318756,0.0625654682517052,0.771759808063507\n             ,0.606137216091156,-0.19231353700161,0.098090648651123,0.992740631103516,0.0696010887622833,0.157188326120377\n             ,0.944919049739838,0.287088453769684,0.771759808063507,0.606137216091156,-0.19231353700161,0.769487977027893\n             ,0.440927565097809,-0.462029308080673,0.125102162361145,0.989620208740234,-0.0707194358110428,0.098090648651123\n             ,0.992740631103516,0.0696010887622833,0.243700608611107,0.544483065605164,-0.802588403224945,0.188163548707962\n             ,0.840512216091156,-0.5080686211586,0.778522193431854,0.369191855192184,-0.507543742656708,0.735658526420593\n             ,0.230637982487679,-0.636877298355103,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.046584777534008\n             ,-0.616905212402344,-0.785657584667206,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.0362379811704159\n             ,-0.262005388736725,-0.964385807514191,-0.0825362652540207,-0.192694559693336,-0.977781474590302,-0.0723719522356987\n             ,-0.219757899641991,-0.972866296768188,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.0625194534659386\n             ,-0.652953445911407,-0.754813313484192,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.156271457672119\n             ,-0.733824193477631,-0.661121249198914,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.156271457672119\n             ,-0.733824193477631,-0.661121249198914,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.0729037374258041\n             ,-0.816932082176209,-0.572107493877411,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.139869406819344\n             ,-0.803301215171814,-0.578915953636169,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.0765528976917267\n             ,-0.892704427242279,-0.444092899560928,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.149305984377861\n             ,-0.898303508758545,-0.413229376077652,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0762164741754532\n             ,-0.884903132915497,-0.459497004747391,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.169935211539268\n             ,-0.892408609390259,-0.418005883693695,-0.0762164741754532,-0.884903132915497,-0.459497004747391,-0.0781072080135345\n             ,-0.934095561504364,-0.348374396562576,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.203441798686981\n             ,-0.920203626155853,-0.334419906139374,-0.0781072080135345,-0.934095561504364,-0.348374396562576,-0.0777258798480034\n             ,-0.995770275592804,-0.0489919558167458,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.181932657957077\n             ,-0.979667663574219,-0.0845683068037033,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,-0.0632308647036552\n             ,-0.910096168518066,0.409544676542282,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.188150137662888\n             ,-0.861675441265106,0.471290737390518,-0.0632308647036552,-0.910096168518066,0.409544676542282,-0.0141258565708995\n             ,-0.388077318668365,0.921518564224243,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.279808014631271\n             ,-0.247867569327354,0.927506923675537,-0.0141258565708995,-0.388077318668365,0.921518564224243,0.0160026121884584\n             ,-0.0152897713705897,0.999755024909973,-0.243391394615173,0.450631767511368,0.858889758586884,-0.353458434343338\n             ,0.0279432106763124,0.935032784938812,0.0160026121884584,-0.0152897713705897,0.999755024909973,0.0535399168729782\n             ,0.501161873340607,0.863695681095123,0.0402784161269665,0.935566067695618,0.350847274065018,-0.243391394615173\n             ,0.450631767511368,0.858889758586884,0.0535399168729782,0.501161873340607,0.863695681095123,0.0919129848480225\n             ,0.966963589191437,0.237767487764359,0.0919129848480225,0.966963589191437,0.237767487764359,0.0886319801211357\n             ,0.994267225265503,0.0598079860210419,0.140199616551399,0.988947510719299,0.0482386760413647,0.0402784161269665\n             ,0.935566067695618,0.350847274065018,0.0886319801211357,0.994267225265503,0.0598079860210419,0.0366231761872768\n             ,0.998422920703888,-0.0425488464534283,0.0780868381261826,0.989874243736267,-0.118538655340672,0.140199616551399\n             ,0.988947510719299,0.0482386760413647,-0.0320936106145382,0.92166805267334,-0.386649638414383,0.0780868381261826\n             ,0.989874243736267,-0.118538655340672,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.00503939157351851\n             ,0.912464261054993,-0.409125357866287,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.0320936106145382\n             ,0.92166805267334,-0.386649638414383,0.00503939157351851,0.912464261054993,-0.409125357866287,0.017586937174201\n             ,0.584774792194366,-0.811005055904388,-0.0419603176414967,0.516997694969177,-0.854957699775696,-0.0663426592946053\n             ,0.518996477127075,-0.85219794511795,-0.175480470061302,0.520782589912415,-0.835459232330322,-0.147772952914238\n             ,0.520121157169342,-0.84121173620224,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.16799932718277\n             ,-0.600783705711365,-0.781559407711029,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.43607622385025\n             ,-0.0767353698611259,-0.896632134914398,-0.385834068059921,-0.169429570436478,-0.906876862049103,0.243047595024109\n             ,-0.82210099697113,0.514857113361359,0.279289931058884,0.161584615707397,0.94651335477829,0.336174368858337,0.935995519161224\n             ,0.104399025440216,0.759971797466278,-0.612702488899231,0.216883733868599,-0.914143800735474,0.108810022473335\n             ,-0.390514433383942,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.631305754184723,0.608145177364349\n             ,-0.481261342763901,-0.812742531299591,0.259539633989334,-0.521621286869049,0.317967116832733,0.377013236284256\n             ,-0.869918346405029,0.735658526420593,0.230637982487679,-0.636877298355103,0.74884694814682,0.0258232615888119\n             ,-0.662239730358124,0.769487977027893,0.440927565097809,-0.462029308080673,0.778522193431854,0.369191855192184\n             ,-0.507543742656708,0.188163548707962,0.840512216091156,-0.5080686211586,0.125102162361145,0.989620208740234\n             ,-0.0707194358110428,0.120905123651028,0.330013185739517,-0.936201512813568,0.130089670419693,0.341309607028961\n             ,-0.930905163288116,0.317967116832733,0.377013236284256,-0.869918346405029,0.00479412823915482,0.900386512279511\n             ,0.435064554214478,0.143662974238396,0.945594608783722,0.29191067814827,0.288045525550842,0.936091125011444,0.201898843050003\n             ,0.167652994394302,0.863424003124237,0.475806176662445,0.234877377748489,0.967058181762695,0.0981385260820389\n             ,0.138274729251862,0.981688380241394,-0.131026938557625,0.199432492256165,0.944634437561035,-0.260561794042587\n             ,0.310655295848846,0.949596464633942,-0.0419514440000057,-0.194994285702705,0.859172344207764,0.473075121641159\n             ,0.00479412823915482,0.900386512279511,0.435064554214478,0.167652994394302,0.863424003124237,0.475806176662445\n             ,-0.143396884202957,0.656446933746338,0.74061781167984,-0.0101526426151395,0.0385068021714687,0.999206781387329\n             ,-0.258119583129883,0.745032370090485,0.615061819553375,-0.143396884202957,0.656446933746338,0.74061781167984\n             ,-0.0197913087904453,0.212507590651512,0.976958990097046,-0.457484602928162,0.835335671901703,-0.304831385612488\n             ,-0.427035480737686,0.790110290050507,-0.439734488725662,-0.413909703493118,0.867565214633942,-0.27569791674614\n             ,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.357527554035187,0.888932764530182,-0.286308616399765\n             ,-0.457484602928162,0.835335671901703,-0.304831385612488,-0.390900999307632,0.84614360332489,-0.362267166376114\n             ,-0.298668056726456,0.872490286827087,-0.386727452278137,0.360629975795746,-0.702259659767151,0.613821983337402\n             ,-0.0101526426151395,0.0385068021714687,0.999206781387329,-0.0197913087904453,0.212507590651512,0.976958990097046\n             ,0.130621984601021,-0.367120236158371,0.920956373214722,0.216771319508553,0.955569624900818,0.199742004275322\n             ,0.234877377748489,0.967058181762695,0.0981385260820389,0.310655295848846,0.949596464633942,-0.0419514440000057\n             ,0.314175516366959,0.947196781635284,0.0641251429915428,0.143662974238396,0.945594608783722,0.29191067814827\n             ,0.216771319508553,0.955569624900818,0.199742004275322,0.314175516366959,0.947196781635284,0.0641251429915428\n             ,0.288045525550842,0.936091125011444,0.201898843050003,-0.427035480737686,0.790110290050507,-0.439734488725662\n             ,0.123842000961304,0.97543865442276,-0.182160839438438,0.0281898751854897,0.814052581787109,0.580106735229492\n             ,-0.413909703493118,0.867565214633942,-0.27569791674614,0.463392287492752,0.731873750686646,0.499628275632858\n             ,0.247720703482628,0.139039516448975,0.95880264043808,0.503155887126923,-0.0240856502205133,0.863860011100769\n             ,0.413316607475281,0.417648822069168,0.809159338474274,0.123842000961304,0.97543865442276,-0.182160839438438\n             ,0.463392287492752,0.731873750686646,0.499628275632858,0.413316607475281,0.417648822069168,0.809159338474274\n             ,0.0281898751854897,0.814052581787109,0.580106735229492,0.503155887126923,-0.0240856502205133,0.863860011100769\n             ,0.247720703482628,0.139039516448975,0.95880264043808,0.101962603628635,-0.729668021202087,0.676156997680664\n             ,0.345502704381943,-0.548628091812134,0.761337697505951,0.220668077468872,-0.699356377124786,0.679857552051544\n             ,0.154463171958923,-0.632704854011536,0.758831799030304,0.176707834005356,-0.49970081448555,0.847981989383698\n             ,0.259503424167633,-0.571858525276184,0.778226017951965,0.101962603628635,-0.729668021202087,0.676156997680664\n             ,0.220668077468872,-0.699356377124786,0.679857552051544,0.259503424167633,-0.571858525276184,0.778226017951965\n             ,0.345502704381943,-0.548628091812134,0.761337697505951,0.0443188734352589,-0.657264351844788,0.752355933189392\n             ,-0.15265741944313,-0.753475069999695,0.639508426189423,-0.142644554376602,-0.667072474956512,0.7312091588974\n             ,0.0566699393093586,-0.541294038295746,0.83892148733139,0.154463171958923,-0.632704854011536,0.758831799030304\n             ,0.0443188734352589,-0.657264351844788,0.752355933189392,0.0566699393093586,-0.541294038295746,0.83892148733139\n             ,0.176707834005356,-0.49970081448555,0.847981989383698,-0.15265741944313,-0.753475069999695,0.639508426189423\n             ,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.303393453359604,-0.824807524681091,0.477121531963348\n             ,-0.142644554376602,-0.667072474956512,0.7312091588974,-0.261559337377548,-0.96132493019104,0.086262010037899\n             ,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.137277618050575,-0.987909972667694,0.0720329731702805\n             ,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.298746109008789,-0.881751596927643,0.365054726600647\n             ,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.289635807275772,-0.935811340808868,0.200918629765511\n             ,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.100898645818233,-0.993996679782867,-0.0423085056245327\n             ,0.139529138803482,-0.986220002174377,-0.0888914614915848,0.10157036036253,-0.993610143661499,0.0492179282009602\n             ,-0.137277618050575,-0.987909972667694,0.0720329731702805,0.139529138803482,-0.986220002174377,-0.0888914614915848\n             ,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.318193823099136,-0.936122417449951,0.149758413434029\n             ,0.10157036036253,-0.993610143661499,0.0492179282009602,0.390757709741592,-0.919032633304596,-0.0518401972949505\n             ,0.494486898183823,-0.83785080909729,0.231276199221611,0.336078584194183,-0.770137906074524,0.542161226272583\n             ,0.318193823099136,-0.936122417449951,0.149758413434029,0.336078584194183,-0.770137906074524,0.542161226272583\n             ,0.494486898183823,-0.83785080909729,0.231276199221611,0.360629975795746,-0.702259659767151,0.613821983337402\n             ,0.130621984601021,-0.367120236158371,0.920956373214722,0.138274729251862,0.981688380241394,-0.131026938557625\n             ,-0.0952406078577042,0.956162750720978,-0.276915192604065,-0.0502913668751717,0.914079129695892,-0.402405440807343\n             ,0.199432492256165,0.944634437561035,-0.260561794042587,-0.0502913668751717,0.914079129695892,-0.402405440807343\n             ,-0.0952406078577042,0.956162750720978,-0.276915192604065,-0.357527554035187,0.888932764530182,-0.286308616399765\n             ,-0.298668056726456,0.872490286827087,-0.386727452278137,0.167652994394302,0.863424003124237,0.475806176662445\n             ,0.288045525550842,0.936091125011444,0.201898843050003,0.353775978088379,0.927305817604065,0.122255511581898\n             ,0.256664752960205,0.744389593601227,0.616447329521179,0.310655295848846,0.949596464633942,-0.0419514440000057\n             ,0.199432492256165,0.944634437561035,-0.260561794042587,0.249470040202141,0.963651180267334,0.0956092849373817\n             ,0.31928414106369,0.943383932113647,0.0899131372570992,-0.143396884202957,0.656446933746338,0.74061781167984\n             ,0.167652994394302,0.863424003124237,0.475806176662445,0.256664752960205,0.744389593601227,0.616447329521179\n             ,0.268563270568848,0.657460391521454,0.704002559185028,-0.0197913087904453,0.212507590651512,0.976958990097046\n             ,-0.143396884202957,0.656446933746338,0.74061781167984,0.268563270568848,0.657460391521454,0.704002559185028\n             ,0.17468436062336,0.368205070495605,0.913186967372894,-0.390900999307632,0.84614360332489,-0.362267166376114\n             ,-0.413909703493118,0.867565214633942,-0.27569791674614,0.225631609559059,0.960186958312988,0.164716094732285\n             ,0.130621984601021,-0.367120236158371,0.920956373214722,-0.0197913087904453,0.212507590651512,0.976958990097046\n             ,0.17468436062336,0.368205070495605,0.913186967372894,0.0710558071732521,-0.106974616646767,0.991719484329224\n             ,0.314175516366959,0.947196781635284,0.0641251429915428,0.310655295848846,0.949596464633942,-0.0419514440000057\n             ,0.31928414106369,0.943383932113647,0.0899131372570992,0.353775978088379,0.927305817604065,0.122255511581898\n             ,0.288045525550842,0.936091125011444,0.201898843050003,0.314175516366959,0.947196781635284,0.0641251429915428\n             ,0.353775978088379,0.927305817604065,0.122255511581898,-0.413909703493118,0.867565214633942,-0.27569791674614\n             ,0.0281898751854897,0.814052581787109,0.580106735229492,0.218661069869995,0.707967698574066,0.671542286872864\n             ,0.225631609559059,0.960186958312988,0.164716094732285,0.413316607475281,0.417648822069168,0.809159338474274\n             ,0.503155887126923,-0.0240856502205133,0.863860011100769,0.0616627000272274,0.104778632521629,0.992582082748413\n             ,0.0281898751854897,0.814052581787109,0.580106735229492,0.413316607475281,0.417648822069168,0.809159338474274\n             ,0.0616627000272274,0.104778632521629,0.992582082748413,0.218661069869995,0.707967698574066,0.671542286872864\n             ,-0.133871212601662,-0.598869144916534,0.789578497409821,0.0616627000272274,0.104778632521629,0.992582082748413\n             ,0.503155887126923,-0.0240856502205133,0.863860011100769,0.345502704381943,-0.548628091812134,0.761337697505951\n             ,0.259503424167633,-0.571858525276184,0.778226017951965,0.176707834005356,-0.49970081448555,0.847981989383698\n             ,-0.284435749053955,-0.519317030906677,0.805857360363007,-0.218292459845543,-0.596042931079865,0.77271032333374\n             ,0.345502704381943,-0.548628091812134,0.761337697505951,0.259503424167633,-0.571858525276184,0.778226017951965\n             ,-0.218292459845543,-0.596042931079865,0.77271032333374,-0.133871212601662,-0.598869144916534,0.789578497409821\n             ,0.0566699393093586,-0.541294038295746,0.83892148733139,-0.142644554376602,-0.667072474956512,0.7312091588974\n             ,-0.389427453279495,-0.677065253257751,0.624442875385284,-0.347446411848068,-0.559259712696075,0.75266832113266\n             ,0.176707834005356,-0.49970081448555,0.847981989383698,0.0566699393093586,-0.541294038295746,0.83892148733139\n             ,-0.347446411848068,-0.559259712696075,0.75266832113266,-0.284435749053955,-0.519317030906677,0.805857360363007\n             ,-0.142644554376602,-0.667072474956512,0.7312091588974,-0.303393453359604,-0.824807524681091,0.477121531963348\n             ,-0.346875548362732,-0.780973374843597,0.519382238388062,-0.389427453279495,-0.677065253257751,0.624442875385284\n             ,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.137277618050575,-0.987909972667694,0.0720329731702805\n             ,-0.159446969628334,-0.872670114040375,0.461544692516327,-0.251093715429306,-0.850699782371521,0.461802780628204\n             ,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.289635807275772,-0.935811340808868,0.200918629765511\n             ,-0.251093715429306,-0.850699782371521,0.461802780628204,-0.346875548362732,-0.780973374843597,0.519382238388062\n             ,-0.137277618050575,-0.987909972667694,0.0720329731702805,0.10157036036253,-0.993610143661499,0.0492179282009602\n             ,-0.0293050315231085,-0.867081463336945,0.497303605079651,-0.159446969628334,-0.872670114040375,0.461544692516327\n             ,0.10157036036253,-0.993610143661499,0.0492179282009602,0.318193823099136,-0.936122417449951,0.149758413434029\n             ,0.0979375094175339,-0.812688946723938,0.574408352375031,-0.0293050315231085,-0.867081463336945,0.497303605079651\n             ,0.318193823099136,-0.936122417449951,0.149758413434029,0.336078584194183,-0.770137906074524,0.542161226272583\n             ,0.195375472307205,-0.65039587020874,0.73403924703598,0.0979375094175339,-0.812688946723938,0.574408352375031\n             ,0.0710558071732521,-0.106974616646767,0.991719484329224,0.195375472307205,-0.65039587020874,0.73403924703598\n             ,0.336078584194183,-0.770137906074524,0.542161226272583,0.130621984601021,-0.367120236158371,0.920956373214722\n             ,0.199432492256165,0.944634437561035,-0.260561794042587,-0.0502913668751717,0.914079129695892,-0.402405440807343\n             ,0.141909137368202,0.983762621879578,0.109876543283463,0.249470040202141,0.963651180267334,0.0956092849373817\n             ,0.127965569496155,0.980436325073242,0.149564117193222,0.141909137368202,0.983762621879578,0.109876543283463\n             ,-0.0502913668751717,0.914079129695892,-0.402405440807343,-0.298668056726456,0.872490286827087,-0.386727452278137\n             ,0.268563270568848,0.657460391521454,0.704002559185028,0.256664752960205,0.744389593601227,0.616447329521179\n             ,0.0710558071732521,-0.106974616646767,0.991719484329224,0.17468436062336,0.368205070495605,0.913186967372894\n             ,0.225631609559059,0.960186958312988,0.164716094732285,0.127965569496155,0.980436325073242,0.149564117193222\n             ,-0.298668056726456,0.872490286827087,-0.386727452278137,-0.390900999307632,0.84614360332489,-0.362267166376114\n             ,-0.140541449189186,0.973841786384583,0.178550481796265,0.00727432640269399,0.986923277378082,0.161026418209076\n             ,-0.106629706919193,0.951739728450775,0.287787467241287,-0.261545598506927,0.922910153865814,0.282543420791626\n             ,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.131636127829552,0.990942358970642,0.0265548899769783\n             ,-0.233783647418022,0.9701207280159,-0.0648916512727737,-0.096912607550621,0.976125478744507,-0.194388866424561\n             ,-0.106629706919193,0.951739728450775,0.287787467241287,-0.852710962295532,0.37292954325676,0.365797132253647\n             ,-0.632225632667542,0.537100076675415,0.558403313159943,-0.261545598506927,0.922910153865814,0.282543420791626\n             ,0.41320937871933,0.88689249753952,-0.206590741872787,0.438933074474335,0.880430459976196,-0.179387643933296\n             ,0.225808262825012,0.957561135292053,-0.179129242897034,0.220753118395805,0.94330245256424,-0.247888132929802\n             ,0.477838784456253,0.792661190032959,-0.378626853227615,0.510045230388641,0.828637421131134,-0.230681270360947\n             ,0.379621177911758,0.902513563632965,-0.203364074230194,0.377052932977676,0.915556311607361,-0.139956220984459\n             ,0.510045230388641,0.828637421131134,-0.230681270360947,0.438933074474335,0.880430459976196,-0.179387643933296\n             ,0.41320937871933,0.88689249753952,-0.206590741872787,0.379621177911758,0.902513563632965,-0.203364074230194\n             ,-0.852710962295532,0.37292954325676,0.365797132253647,-0.887657046318054,-0.456045299768448,0.063934437930584\n             ,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.632225632667542,0.537100076675415,0.558403313159943\n             ,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.887657046318054,-0.456045299768448,0.063934437930584\n             ,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.609397828578949,-0.718622922897339,0.334985673427582\n             ,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.201113522052765,0.971361815929413,0.126529023051262\n             ,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.233783647418022,0.9701207280159,-0.0648916512727737\n             ,-0.201113522052765,0.971361815929413,0.126529023051262,-0.183847695589066,0.966428518295288,0.179488003253937\n             ,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.294077008962631,0.955018162727356,0.0381973087787628\n             ,0.466618627309799,0.783142864704132,-0.41104057431221,0.477838784456253,0.792661190032959,-0.378626853227615\n             ,0.377052932977676,0.915556311607361,-0.139956220984459,0.536845266819,0.771515130996704,0.341411113739014,0.772461295127869\n             ,-0.0374295972287655,0.633957862854004,0.727005004882813,0.68491542339325,0.0485247001051903,0.483564585447311\n             ,0.417995601892471,0.769054591655731,0.456143170595169,-0.412308812141418,0.788628458976746,0.727005004882813\n             ,0.68491542339325,0.0485247001051903,0.466618627309799,0.783142864704132,-0.41104057431221,0.536845266819,0.771515130996704\n             ,0.341411113739014,0.483564585447311,0.417995601892471,0.769054591655731,0.520344138145447,-0.759189605712891\n             ,0.390989869832993,0.493583381175995,-0.804481565952301,0.330431401729584,0.347713977098465,-0.788004815578461\n             ,0.508078157901764,0.519531428813934,-0.689787209033966,0.504262566566467,0.506179451942444,-0.83683580160141\n             ,0.208538070321083,0.593186497688293,-0.723713397979736,0.352659493684769,0.59520959854126,-0.673711001873016\n             ,0.437994301319122,0.501122713088989,-0.80717408657074,0.312003254890442,0.593186497688293,-0.723713397979736\n             ,0.352659493684769,0.520344138145447,-0.759189605712891,0.390989869832993,0.519531428813934,-0.689787209033966\n             ,0.504262566566467,0.59520959854126,-0.673711001873016,0.437994301319122,0.331354945898056,-0.940484642982483\n             ,0.0754489675164223,0.506179451942444,-0.83683580160141,0.208538070321083,0.501122713088989,-0.80717408657074\n             ,0.312003254890442,0.32907634973526,-0.925415575504303,0.187922358512878,-0.0488644652068615,-0.996573328971863\n             ,-0.0667372941970825,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.15561980009079,-0.982760071754456\n             ,0.0998257622122765,0.000309223076328635,-0.998522400856018,0.054340984672308,0.13556943833828,-0.990667700767517\n             ,-0.0140880616381764,0.331354945898056,-0.940484642982483,0.0754489675164223,0.32907634973526,-0.925415575504303\n             ,0.187922358512878,0.15561980009079,-0.982760071754456,0.0998257622122765,-0.294042885303497,-0.950065493583679\n             ,-0.104471661150455,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,0.000309223076328635,-0.998522400856018\n             ,0.054340984672308,-0.217681989073753,-0.974551320075989,0.0535187609493732,-0.558743357658386,-0.822392702102661\n             ,-0.10712693631649,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.217681989073753,-0.974551320075989\n             ,0.0535187609493732,-0.443623483181,-0.884970426559448,0.141511723399162,-0.762853384017944,-0.64490020275116\n             ,-0.0464594550430775,-0.558743357658386,-0.822392702102661,-0.10712693631649,-0.443623483181,-0.884970426559448\n             ,0.141511723399162,-0.609397828578949,-0.718622922897339,0.334985673427582,0.225808262825012,0.957561135292053\n             ,-0.179129242897034,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.096912607550621,0.976125478744507\n             ,-0.194388866424561,0.220753118395805,0.94330245256424,-0.247888132929802,-0.21051436662674,0.861303210258484\n             ,0.462428838014603,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.140541449189186,0.973841786384583\n             ,0.178550481796265,-0.096912607550621,0.976125478744507,-0.194388866424561,-0.233783647418022,0.9701207280159\n             ,-0.0648916512727737,-0.199626341462135,0.962749063968658,0.182382985949516,-0.136555016040802,0.971848607063293\n             ,0.191997408866882,-0.261545598506927,0.922910153865814,0.282543420791626,-0.632225632667542,0.537100076675415\n             ,0.558403313159943,-0.21051436662674,0.861303210258484,0.462428838014603,0.0513934716582298,0.959308326244354\n             ,0.277644217014313,0.41320937871933,0.88689249753952,-0.206590741872787,0.220753118395805,0.94330245256424,-0.247888132929802\n             ,0.0820492878556252,0.971076488494873,0.224228322505951,0.377052932977676,0.915556311607361,-0.139956220984459\n             ,0.379621177911758,0.902513563632965,-0.203364074230194,-0.207352936267853,0.936322927474976,0.283379822969437\n             ,-0.321906387805939,0.894509375095367,0.310208320617676,0.379621177911758,0.902513563632965,-0.203364074230194\n             ,0.41320937871933,0.88689249753952,-0.206590741872787,0.0513934716582298,0.959308326244354,0.277644217014313\n             ,-0.207352936267853,0.936322927474976,0.283379822969437,-0.632225632667542,0.537100076675415,0.558403313159943\n             ,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.0247958675026894,-0.292493909597397,0.95594584941864\n             ,-0.21051436662674,0.861303210258484,0.462428838014603,-0.0247958675026894,-0.292493909597397,0.95594584941864\n             ,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.609397828578949,-0.718622922897339,0.334985673427582\n             ,-0.0917615294456482,-0.593113124370575,0.799872934818268,-0.294077008962631,0.955018162727356,0.0381973087787628\n             ,-0.199626341462135,0.962749063968658,0.182382985949516,-0.233783647418022,0.9701207280159,-0.0648916512727737\n             ,0.536845266819,0.771515130996704,0.341411113739014,0.377052932977676,0.915556311607361,-0.139956220984459,-0.321906387805939\n             ,0.894509375095367,0.310208320617676,-0.44193634390831,0.542223930358887,0.714622557163239,0.456143170595169\n             ,-0.412308812141418,0.788628458976746,0.483564585447311,0.417995601892471,0.769054591655731,-0.522650837898254\n             ,-0.0699307844042778,0.849673926830292,0.483564585447311,0.417995601892471,0.769054591655731,0.536845266819,0.771515130996704\n             ,0.341411113739014,-0.44193634390831,0.542223930358887,0.714622557163239,-0.522650837898254,-0.0699307844042778\n             ,0.849673926830292,0.519531428813934,-0.689787209033966,0.504262566566467,0.347713977098465,-0.788004815578461\n             ,0.508078157901764,-0.209563195705414,-0.620633363723755,0.755577564239502,0.0385516360402107,-0.591684639453888\n             ,0.805247187614441,-0.209563195705414,-0.620633363723755,0.755577564239502,0.347713977098465,-0.788004815578461\n             ,0.508078157901764,0.456143170595169,-0.412308812141418,0.788628458976746,-0.522650837898254,-0.0699307844042778\n             ,0.849673926830292,0.501122713088989,-0.80717408657074,0.312003254890442,0.59520959854126,-0.673711001873016\n             ,0.437994301319122,0.177197024226189,-0.632450103759766,0.754061043262482,0.239427268505096,-0.754494905471802\n             ,0.611074507236481,0.59520959854126,-0.673711001873016,0.437994301319122,0.519531428813934,-0.689787209033966\n             ,0.504262566566467,0.0385516360402107,-0.591684639453888,0.805247187614441,0.177197024226189,-0.632450103759766\n             ,0.754061043262482,0.32907634973526,-0.925415575504303,0.187922358512878,0.501122713088989,-0.80717408657074\n             ,0.312003254890442,0.239427268505096,-0.754494905471802,0.611074507236481,0.182993903756142,-0.84755676984787\n             ,0.498157352209091,0.000309223076328635,-0.998522400856018,0.054340984672308,0.15561980009079,-0.982760071754456\n             ,0.0998257622122765,0.0988316684961319,-0.885145425796509,0.454697638750076,0.053495068103075,-0.879860281944275\n             ,0.472212016582489,0.15561980009079,-0.982760071754456,0.0998257622122765,0.32907634973526,-0.925415575504303\n             ,0.187922358512878,0.182993903756142,-0.84755676984787,0.498157352209091,0.0988316684961319,-0.885145425796509\n             ,0.454697638750076,-0.217681989073753,-0.974551320075989,0.0535187609493732,0.000309223076328635,-0.998522400856018\n             ,0.054340984672308,0.053495068103075,-0.879860281944275,0.472212016582489,-0.0185150001198053,-0.84597235918045\n             ,0.532905161380768,-0.443623483181,-0.884970426559448,0.141511723399162,-0.217681989073753,-0.974551320075989\n             ,0.0535187609493732,-0.0185150001198053,-0.84597235918045,0.532905161380768,-0.0868597701191902,-0.755090534687042\n             ,0.649841248989105,-0.609397828578949,-0.718622922897339,0.334985673427582,-0.443623483181,-0.884970426559448\n             ,0.141511723399162,-0.0868597701191902,-0.755090534687042,0.649841248989105,-0.0917615294456482,-0.593113124370575\n             ,0.799872934818268,0.220753118395805,0.94330245256424,-0.247888132929802,-0.096912607550621,0.976125478744507\n             ,-0.194388866424561,-0.136555016040802,0.971848607063293,0.191997408866882,0.0820492878556252,0.971076488494873\n             ,0.224228322505951,-0.251987457275391,0.951171100139618,0.178257703781128,-0.199626341462135,0.962749063968658\n             ,0.182382985949516,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.251987457275391,0.951171100139618\n             ,0.178257703781128,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.373619109392166,0.927157580852509\n             ,0.0280638355761766,-0.251987457275391,0.951171100139618,0.178257703781128,-0.373619109392166,0.927157580852509\n             ,0.0280638355761766,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.21051436662674,0.861303210258484\n             ,0.462428838014603,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.183847695589066,0.966428518295288\n             ,0.179488003253937,-0.109012864530087,0.977998495101929,0.177862659096718,-0.266566455364227,0.959463894367218\n             ,0.0914947912096977,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.109012864530087,0.977998495101929\n             ,0.177862659096718,0.00727432640269399,0.986923277378082,0.161026418209076,-0.140541449189186,0.973841786384583\n             ,0.178550481796265,-0.21051436662674,0.861303210258484,0.462428838014603,-0.140541449189186,0.973841786384583\n             ,0.178550481796265,-0.261545598506927,0.922910153865814,0.282543420791626,-0.258119583129883,0.745032370090485\n             ,0.615061819553375,-0.194994285702705,0.859172344207764,0.473075121641159,-0.143396884202957,0.656446933746338\n             ,0.74061781167984,0.690909028053284,-0.334549605846405,0.640875399112701,0.707773089408875,-0.177667543292046\n             ,0.683733463287354,0.630890548229218,-0.774750173091888,0.0417049825191498,0.563636422157288,-0.823141872882843\n             ,0.0689310654997826,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.740522086620331,-0.668854534626007\n             ,0.065273717045784,-0.846795618534088,-0.531082570552826,0.0298077315092087,-0.873597860336304,-0.23740328848362\n             ,0.424813508987427,0.772461295127869,-0.0374295972287655,0.633957862854004,0.456143170595169,-0.412308812141418\n             ,0.788628458976746,0.347713977098465,-0.788004815578461,0.508078157901764,0.493583381175995,-0.804481565952301\n             ,0.330431401729584,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.563221275806427,-0.79902458190918\n             ,-0.210574418306351,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.432196706533432,-0.877966165542603\n             ,-0.205867424607277,0.733389377593994,-0.0344664603471756,0.678934574127197,0.746549785137177,0.0205342527478933\n             ,0.665012657642365,0.718032777309418,-0.160360962152481,0.677283763885498,0.746549785137177,0.0205342527478933\n             ,0.665012657642365,0.733389377593994,-0.0344664603471756,0.678934574127197,0.837971806526184,-0.0177910327911377\n             ,0.545423448085785,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.686445116996765,0.270512044429779\n             ,0.674993574619293,-0.596545398235321,0.216776832938194,0.772749245166779,-0.672767162322998,0.059370718896389\n             ,0.737468242645264,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.789937257766724,-0.089169554412365\n             ,0.606669545173645,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.501666784286499,-0.849441289901733\n             ,-0.163646027445793,0.499172002077103,-0.857490539550781,-0.124648600816727,0.494663387537003,-0.866621494293213\n             ,-0.0653853639960289,0.465027630329132,-0.875830411911011,-0.129113703966141,0.28289994597435,-0.924392461776733\n             ,-0.255863577127457,0.297710686922073,-0.932827949523926,-0.202978670597076,0.28289994597435,-0.924392461776733\n             ,-0.255863577127457,0.304112553596497,-0.921620965003967,-0.241102367639542,0.175545483827591,-0.61814421415329\n             ,-0.766212463378906,-0.355053901672363,-0.683800160884857,-0.637459099292755,-0.752854526042938,-0.165658488869667\n             ,-0.636998772621155,-0.550425469875336,0.323076784610748,-0.769839704036713,0.371378809213638,-0.592879414558411\n             ,-0.714543044567108,0.175545483827591,-0.61814421415329,-0.766212463378906,-0.550425469875336,0.323076784610748\n             ,-0.769839704036713,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.274789333343506,-0.803769111633301\n             ,-0.527679860591888,0.371378809213638,-0.592879414558411,-0.714543044567108,-0.478178977966309,0.510015189647675\n             ,-0.715003073215485,-0.847938656806946,-0.0612146966159344,-0.526548087596893,0.810995221138,0.0803924724459648\n             ,-0.579503059387207,-0.260734766721725,-0.760901808738709,-0.594176650047302,-0.803069472312927,-0.0576225444674492\n             ,-0.593092858791351,0.28655207157135,0.762932240962982,-0.579501807689667,-0.264983803033829,-0.798545002937317\n             ,-0.540471494197845,0.851555109024048,0.0737949088215828,-0.519045412540436,0.294900387525558,0.804033398628235\n             ,-0.516298413276672,-0.838329255580902,-0.0461989641189575,-0.543203234672546,0.798945486545563,0.0567517168819904\n             ,-0.598719775676727,-0.25739848613739,-0.756804287433624,-0.600827217102051,-0.797584235668182,-0.0538384169340134\n             ,-0.600800156593323,0.260495960712433,0.757402241230011,-0.598735094070435,0.579808115959167,-0.470308184623718\n             ,-0.665306448936462,0.867282569408417,-0.217768251895905,-0.447658270597458,0.0163767393678427,0.894915819168091\n             ,-0.445934444665909,-0.303038567304611,0.683238506317139,-0.66434383392334,0.934951305389404,-0.173643231391907\n             ,-0.309376925230026,0.852502286434174,-0.25280287861824,-0.457526594400406,-0.023583659902215,0.889200866222382\n             ,-0.456908762454987,0.0738223046064377,0.948160707950592,-0.309097975492477,-0.492102652788162,-0.846493780612946\n             ,-0.203182756900787,-0.355053901672363,-0.683800160884857,-0.637459099292755,0.175545483827591,-0.61814421415329\n             ,-0.766212463378906,0.131819605827332,-0.987344026565552,-0.0881783813238144,0.131819605827332,-0.987344026565552\n             ,-0.0881783813238144,0.175545483827591,-0.61814421415329,-0.766212463378906,0.371378809213638,-0.592879414558411\n             ,-0.714543044567108,0.503014385700226,-0.864195764064789,-0.0119248116388917,-0.294909566640854,-0.954956710338593\n             ,-0.0329544395208359,0.503014385700226,-0.864195764064789,-0.0119248116388917,0.371378809213638,-0.592879414558411\n             ,-0.714543044567108,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.081024631857872,-0.948496878147125\n             ,-0.30624932050705,-0.260734766721725,-0.760901808738709,-0.594176650047302,0.810995221138,0.0803924724459648\n             ,-0.579503059387207,0.932336986064911,-0.159625917673111,-0.324449211359024,0.9972323179245,0.045465212315321\n             ,-0.0588272288441658,0.851555109024048,0.0737949088215828,-0.519045412540436,-0.264983803033829,-0.798545002937317\n             ,-0.540471494197845,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.0602938197553158,-0.94219297170639\n             ,-0.329601436853409,-0.25739848613739,-0.756804287433624,-0.600827217102051,0.798945486545563,0.0567517168819904\n             ,-0.598719775676727,0.929458439350128,-0.182677119970322,-0.320524662733078,0.60779196023941,-0.794095873832703\n             ,-0.000789706071373075,0.606442928314209,-0.795126736164093,-0.000603582069743425,0.867282569408417,-0.217768251895905\n             ,-0.447658270597458,0.579808115959167,-0.470308184623718,-0.665306448936462,-0.155517369508743,-0.869324624538422\n             ,-0.469136536121368,-0.081024631857872,-0.948496878147125,-0.30624932050705,0.932336986064911,-0.159625917673111\n             ,-0.324449211359024,0.874620616436005,-0.089490108191967,-0.476476937532425,0.875138163566589,-0.110415413975716\n             ,-0.471106797456741,-0.116839110851288,-0.866200923919678,-0.485844105482101,-0.0602938197553158,-0.94219297170639\n             ,-0.329601436853409,0.929458439350128,-0.182677119970322,-0.320524662733078,-0.607791721820831,0.794096052646637\n             ,0.000804367766249925,-0.303038567304611,0.683238506317139,-0.66434383392334,0.0163767393678427,0.894915819168091\n             ,-0.445934444665909,-0.606431722640991,0.795135319232941,0.000614068820141256,0.0626835599541664,0.945166885852814\n             ,-0.320515751838684,0.260495960712433,0.757402241230011,-0.598735094070435,-0.797584235668182,-0.0538384169340134\n             ,-0.600800156593323,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.997315406799316,-0.0089312419295311\n             ,-0.0726793855428696,-0.838329255580902,-0.0461989641189575,-0.543203234672546,0.294900387525558,0.804033398628235\n             ,-0.516298413276672,0.305213630199432,0.950488805770874,-0.0584435798227787,0.085883192718029,0.94199538230896\n             ,-0.324451416730881,0.28655207157135,0.762932240962982,-0.579501807689667,-0.803069472312927,-0.0576225444674492\n             ,-0.593092858791351,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.998532772064209,-0.0460729710757732\n             ,-0.0284526403993368,-0.847938656806946,-0.0612146966159344,-0.526548087596893,-0.478178977966309,0.510015189647675\n             ,-0.715003073215485,-0.707223176956177,0.706861138343811,-0.0135142952203751,-0.921080887317657,0.378857254981995\n             ,-0.089873306453228,-0.707223176956177,0.706861138343811,-0.0135142952203751,-0.478178977966309,0.510015189647675\n             ,-0.715003073215485,-0.550425469875336,0.323076784610748,-0.769839704036713,-0.947175621986389,-0.247870579361916\n             ,-0.203515365719795,-0.921080887317657,0.378857254981995,-0.089873306453228,-0.550425469875336,0.323076784610748\n             ,-0.769839704036713,-0.752854526042938,-0.165658488869667,-0.636998772621155,0.118536964058876,0.87408572435379\n             ,-0.471087127923965,0.0626835599541664,0.945166885852814,-0.320515751838684,-0.925963163375854,0.184349000453949\n             ,-0.329556822776794,-0.867111802101135,0.110181644558907,-0.485774785280228,0.138788193464279,0.868160247802734\n             ,-0.476482480764389,0.085883192718029,0.94199538230896,-0.324451416730881,-0.939117789268494,0.162155643105507\n             ,-0.302924692630768,-0.881957292556763,0.0677927955985069,-0.466428458690643,-0.947175621986389,-0.247870579361916\n             ,-0.203515365719795,-0.752854526042938,-0.165658488869667,-0.636998772621155,-0.355053901672363,-0.683800160884857\n             ,-0.637459099292755,-0.492102652788162,-0.846493780612946,-0.203182756900787,-0.260734766721725,-0.760901808738709\n             ,-0.594176650047302,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.847938656806946,-0.0612146966159344\n             ,-0.526548087596893,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.939117789268494,0.162155643105507\n             ,-0.302924692630768,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.847938656806946,-0.0612146966159344\n             ,-0.526548087596893,-0.998532772064209,-0.0460729710757732,-0.0284526403993368,-0.081024631857872,-0.948496878147125\n             ,-0.30624932050705,-0.294909566640854,-0.954956710338593,-0.0329544395208359,-0.274789333343506,-0.803769111633301\n             ,-0.527679860591888,-0.260734766721725,-0.760901808738709,-0.594176650047302,0.932336986064911,-0.159625917673111\n             ,-0.324449211359024,0.810995221138,0.0803924724459648,-0.579503059387207,0.851555109024048,0.0737949088215828\n             ,-0.519045412540436,0.9972323179245,0.045465212315321,-0.0588272288441658,0.085883192718029,0.94199538230896\n             ,-0.324451416730881,0.305213630199432,0.950488805770874,-0.0584435798227787,0.294900387525558,0.804033398628235\n             ,-0.516298413276672,0.28655207157135,0.762932240962982,-0.579501807689667,0.28655207157135,0.762932240962982\n             ,-0.579501807689667,0.294900387525558,0.804033398628235,-0.516298413276672,0.851555109024048,0.0737949088215828\n             ,-0.519045412540436,0.810995221138,0.0803924724459648,-0.579503059387207,-0.25739848613739,-0.756804287433624\n             ,-0.600827217102051,-0.264983803033829,-0.798545002937317,-0.540471494197845,-0.838329255580902,-0.0461989641189575\n             ,-0.543203234672546,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.925963163375854,0.184349000453949\n             ,-0.329556822776794,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.838329255580902,-0.0461989641189575\n             ,-0.543203234672546,-0.997315406799316,-0.0089312419295311,-0.0726793855428696,-0.0602938197553158,-0.94219297170639\n             ,-0.329601436853409,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.264983803033829,-0.798545002937317\n             ,-0.540471494197845,-0.25739848613739,-0.756804287433624,-0.600827217102051,0.929458439350128,-0.182677119970322\n             ,-0.320524662733078,0.798945486545563,0.0567517168819904,-0.598719775676727,0.867282569408417,-0.217768251895905\n             ,-0.447658270597458,0.99813711643219,0.0131128579378128,-0.0595852471888065,0.0626835599541664,0.945166885852814\n             ,-0.320515751838684,0.271794468164444,0.960521817207336,-0.0593764595687389,0.0163767393678427,0.894915819168091\n             ,-0.445934444665909,0.260495960712433,0.757402241230011,-0.598735094070435,0.260495960712433,0.757402241230011\n             ,-0.598735094070435,0.0163767393678427,0.894915819168091,-0.445934444665909,0.867282569408417,-0.217768251895905\n             ,-0.447658270597458,0.798945486545563,0.0567517168819904,-0.598719775676727,0.852502286434174,-0.25280287861824\n             ,-0.457526594400406,0.579808115959167,-0.470308184623718,-0.665306448936462,-0.303038567304611,0.683238506317139\n             ,-0.66434383392334,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.023583659902215,0.889200866222382\n             ,-0.456908762454987,-0.303038567304611,0.683238506317139,-0.66434383392334,-0.607791721820831,0.794096052646637\n             ,0.000804367766249925,-0.608507454395294,0.793548166751862,0.000247186981141567,0.852502286434174,-0.25280287861824\n             ,-0.457526594400406,0.608506679534912,-0.793548703193665,-0.000247475487412885,0.60779196023941,-0.794095873832703\n             ,-0.000789706071373075,0.579808115959167,-0.470308184623718,-0.665306448936462,0.867282569408417,-0.217768251895905\n             ,-0.447658270597458,0.606442928314209,-0.795126736164093,-0.000603582069743425,0.99813711643219,0.0131128579378128\n             ,-0.0595852471888065,0.852502286434174,-0.25280287861824,-0.457526594400406,0.934951305389404,-0.173643231391907\n             ,-0.309376925230026,0.608506679534912,-0.793548703193665,-0.000247475487412885,0.0738223046064377,0.948160707950592\n             ,-0.309097975492477,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.608507454395294,0.793548166751862\n             ,0.000247186981141567,0.0163767393678427,0.894915819168091,-0.445934444665909,0.271794468164444,0.960521817207336\n             ,-0.0593764595687389,-0.606431722640991,0.795135319232941,0.000614068820141256,-0.998532772064209,-0.0460729710757732\n             ,-0.0284526403993368,-0.881957292556763,0.0677927955985069,-0.466428458690643,-0.939117789268494,0.162155643105507\n             ,-0.302924692630768,-0.294909566640854,-0.954956710338593,-0.0329544395208359,-0.081024631857872,-0.948496878147125\n             ,-0.30624932050705,-0.155517369508743,-0.869324624538422,-0.469136536121368,0.9972323179245,0.045465212315321\n             ,-0.0588272288441658,0.874620616436005,-0.089490108191967,-0.476476937532425,0.932336986064911,-0.159625917673111\n             ,-0.324449211359024,0.305213630199432,0.950488805770874,-0.0584435798227787,0.085883192718029,0.94199538230896\n             ,-0.324451416730881,0.138788193464279,0.868160247802734,-0.476482480764389,-0.997315406799316,-0.0089312419295311\n             ,-0.0726793855428696,-0.867111802101135,0.110181644558907,-0.485774785280228,-0.925963163375854,0.184349000453949\n             ,-0.329556822776794,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.0602938197553158,-0.94219297170639\n             ,-0.329601436853409,-0.116839110851288,-0.866200923919678,-0.485844105482101,0.99813711643219,0.0131128579378128\n             ,-0.0595852471888065,0.875138163566589,-0.110415413975716,-0.471106797456741,0.929458439350128,-0.182677119970322\n             ,-0.320524662733078,0.271794468164444,0.960521817207336,-0.0593764595687389,0.0626835599541664,0.945166885852814\n             ,-0.320515751838684,0.118536964058876,0.87408572435379,-0.471087127923965,-0.76156884431839,0.476596713066101\n             ,-0.439167976379395,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.968085289001465,0.249152198433876\n             ,-0.0270941611379385,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.739788293838501,0.545380115509033\n             ,-0.394047945737839,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.898221433162689,0.418351918458939\n             ,0.134833067655563,-0.704140067100525,0.675374805927277,-0.219215899705887,-0.704140067100525,0.675374805927277\n             ,-0.219215899705887,-0.898221433162689,0.418351918458939,0.134833067655563,-0.654416978359222,0.561667382717133\n             ,0.506229400634766,-0.521776258945465,0.845166325569153,0.115945540368557,-0.521776258945465,0.845166325569153\n             ,0.115945540368557,-0.654416978359222,0.561667382717133,0.506229400634766,-0.214515462517738,0.588520050048828\n             ,0.779504477977753,-0.117615908384323,0.926379323005676,0.357753843069077,-0.952755749225616,-0.0757631734013557\n             ,0.294136703014374,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.926552474498749,0.207176357507706\n             ,0.313972115516663,-0.910864353179932,0.099295899271965,0.400582611560822,-0.910864353179932,0.099295899271965\n             ,0.400582611560822,-0.926552474498749,0.207176357507706,0.313972115516663,-0.666352272033691,0.406804174184799\n             ,0.624888002872467,-0.658345222473145,0.235575124621391,0.714902698993683,-0.658345222473145,0.235575124621391\n             ,0.714902698993683,-0.666352272033691,0.406804174184799,0.624888002872467,-0.245068669319153,0.507136404514313\n             ,0.826289296150208,-0.250782161951065,0.269851088523865,0.929671287536621,-0.98439222574234,0.0485405139625072\n             ,0.16916187107563,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.958588540554047,0.28219923377037\n             ,-0.0383618324995041,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.962221920490265,0.251950860023499\n             ,-0.103197500109673,-0.912259876728058,0.390434086322784,0.123867250978947,-0.926552474498749,0.207176357507706\n             ,0.313972115516663,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.912259876728058,0.390434086322784\n             ,0.123867250978947,-0.660027086734772,0.561297416687012,0.499309033155441,-0.666352272033691,0.406804174184799\n             ,0.624888002872467,-0.926552474498749,0.207176357507706,0.313972115516663,-0.660027086734772,0.561297416687012\n             ,0.499309033155441,-0.249163046479225,0.650838494300842,0.717165946960449,-0.245068669319153,0.507136404514313\n             ,0.826289296150208,-0.666352272033691,0.406804174184799,0.624888002872467,-0.980856895446777,0.194233447313309\n             ,-0.0138956038281322,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.76156884431839,0.476596713066101\n             ,-0.439167976379395,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.924136519432068,-0.0825221389532089\n             ,0.373043924570084,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.98439222574234,0.0485405139625072\n             ,0.16916187107563,-0.952755749225616,-0.0757631734013557,0.294136703014374,0.935190200805664,0.351279437541962\n             ,-0.044966459274292,0.898469209671021,-0.0272972695529461,0.438187032938004,0.912912726402283,-0.113555498421192\n             ,0.392040193080902,0.96645724773407,0.233678266406059,-0.106558986008167,0.804791152477264,0.576125502586365\n             ,0.142795473337173,0.761282086372375,0.311987817287445,0.568430483341217,0.898469209671021,-0.0272972695529461\n             ,0.438187032938004,0.935190200805664,0.351279437541962,-0.044966459274292,0.804791152477264,0.576125502586365\n             ,0.142795473337173,0.42239049077034,0.834542334079742,0.353730529546738,0.335851162672043,0.562229573726654,0.755712866783142\n             ,0.761282086372375,0.311987817287445,0.568430483341217,-0.117615908384323,0.926379323005676,0.357753843069077\n             ,-0.214515462517738,0.588520050048828,0.779504477977753,0.335851162672043,0.562229573726654,0.755712866783142\n             ,0.42239049077034,0.834542334079742,0.353730529546738,0.706884205341339,-0.28878253698349,0.645692944526672,0.630046010017395\n             ,0.0436474196612835,0.775330185890198,0.717575788497925,0.177658915519714,0.673440635204315,0.870358824729919\n             ,-0.102341800928116,0.481665521860123,0.630046010017395,0.0436474196612835,0.775330185890198,0.228427618741989\n             ,0.282149314880371,0.931779265403748,0.267084360122681,0.455141335725784,0.849418818950653,0.717575788497925\n             ,0.177658915519714,0.673440635204315,0.228427618741989,0.282149314880371,0.931779265403748,-0.250782161951065\n             ,0.269851088523865,0.929671287536621,-0.245068669319153,0.507136404514313,0.826289296150208,0.267084360122681\n             ,0.455141335725784,0.849418818950653,0.961451351642609,0.0904497504234314,0.259673148393631,0.90546315908432\n             ,0.186478093266487,0.381264179944992,0.819937825202942,-0.00659102853387594,0.572414636611938,0.845280110836029\n             ,-0.0974530875682831,0.525361180305481,0.717575788497925,0.177658915519714,0.673440635204315,0.791133522987366\n             ,0.342469990253448,0.506776094436646,0.962417662143707,0.0915835499763489,0.255665153264999,0.870358824729919\n             ,-0.102341800928116,0.481665521860123,0.267084360122681,0.455141335725784,0.849418818950653,0.301605939865112\n             ,0.609322726726532,0.733321011066437,0.791133522987366,0.342469990253448,0.506776094436646,0.717575788497925\n             ,0.177658915519714,0.673440635204315,-0.245068669319153,0.507136404514313,0.826289296150208,-0.249163046479225\n             ,0.650838494300842,0.717165946960449,0.301605939865112,0.609322726726532,0.733321011066437,0.267084360122681\n             ,0.455141335725784,0.849418818950653,0.982547283172607,-0.0194747932255268,0.184990763664246,0.997464418411255\n             ,-0.00418182462453842,-0.0710434243083,0.942662239074707,-0.0168874561786652,0.333320707082748,0.947061896324158\n             ,0.0981694161891937,0.305673807859421,0.942662239074707,-0.0168874561786652,0.333320707082748,0.982214033603668\n             ,0.146134316921234,-0.117899708449841,0.96645724773407,0.233678266406059,-0.106558986008167,0.912912726402283\n             ,-0.113555498421192,0.392040193080902,0.698522806167603,-0.278597444295883,0.659127771854401,0.706884205341339\n             ,-0.28878253698349,0.645692944526672,0.870358824729919,-0.102341800928116,0.481665521860123,0.845280110836029\n             ,-0.0974530875682831,0.525361180305481,0.870358824729919,-0.102341800928116,0.481665521860123,0.962417662143707\n             ,0.0915835499763489,0.255665153264999,0.961451351642609,0.0904497504234314,0.259673148393631,0.845280110836029\n             ,-0.0974530875682831,0.525361180305481,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.952755749225616\n             ,-0.0757631734013557,0.294136703014374,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.984016895294189\n             ,0.178066939115524,-0.00170839997008443,-0.910864353179932,0.099295899271965,0.400582611560822,-0.898221433162689\n             ,0.418351918458939,0.134833067655563,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.952755749225616\n             ,-0.0757631734013557,0.294136703014374,-0.658345222473145,0.235575124621391,0.714902698993683,-0.654416978359222\n             ,0.561667382717133,0.506229400634766,-0.898221433162689,0.418351918458939,0.134833067655563,-0.910864353179932\n             ,0.099295899271965,0.400582611560822,-0.250782161951065,0.269851088523865,0.929671287536621,-0.214515462517738\n             ,0.588520050048828,0.779504477977753,-0.654416978359222,0.561667382717133,0.506229400634766,-0.658345222473145\n             ,0.235575124621391,0.714902698993683,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.980856895446777\n             ,0.194233447313309,-0.0138956038281322,-0.952685832977295,0.144979551434517,0.26715275645256,-0.924136519432068\n             ,-0.0825221389532089,0.373043924570084,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.958563566207886\n             ,0.284186273813248,-0.0198515504598618,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.952685832977295\n             ,0.144979551434517,0.26715275645256,0.698522806167603,-0.278597444295883,0.659127771854401,0.912912726402283\n             ,-0.113555498421192,0.392040193080902,0.898469209671021,-0.0272972695529461,0.438187032938004,0.706884205341339\n             ,-0.28878253698349,0.645692944526672,0.706884205341339,-0.28878253698349,0.645692944526672,0.898469209671021\n             ,-0.0272972695529461,0.438187032938004,0.761282086372375,0.311987817287445,0.568430483341217,0.630046010017395\n             ,0.0436474196612835,0.775330185890198,0.630046010017395,0.0436474196612835,0.775330185890198,0.761282086372375\n             ,0.311987817287445,0.568430483341217,0.335851162672043,0.562229573726654,0.755712866783142,0.228427618741989\n             ,0.282149314880371,0.931779265403748,0.228427618741989,0.282149314880371,0.931779265403748,0.335851162672043\n             ,0.562229573726654,0.755712866783142,-0.214515462517738,0.588520050048828,0.779504477977753,-0.250782161951065\n             ,0.269851088523865,0.929671287536621,0.912912726402283,-0.113555498421192,0.392040193080902,0.698522806167603\n             ,-0.278597444295883,0.659127771854401,0.819937825202942,-0.00659102853387594,0.572414636611938,0.942662239074707\n             ,-0.0168874561786652,0.333320707082748,0.942662239074707,-0.0168874561786652,0.333320707082748,0.819937825202942\n             ,-0.00659102853387594,0.572414636611938,0.90546315908432,0.186478093266487,0.381264179944992,0.947061896324158\n             ,0.0981694161891937,0.305673807859421,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.929124534130096\n             ,0.342707455158234,-0.138849511742592,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.978413343429565\n             ,-0.195419788360596,0.0672191008925438,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.952633440494537\n             ,0.0169817637652159,0.303646564483643,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.915837526321411\n             ,0.379801750183105,-0.130354270339012,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.707790970802307\n             ,0.336063861846924,0.621363818645477,-0.544086277484894,0.801831424236298,0.247055679559708,-0.805534958839417\n             ,0.59233832359314,0.0157723147422075,-0.707790970802307,0.336063861846924,0.621363818645477,-0.297837793827057\n             ,0.470342427492142,0.830704927444458,-0.19909605383873,0.874440908432007,0.442395597696304,-0.544086277484894\n             ,0.801831424236298,0.247055679559708,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.613491356372833\n             ,0.78081339597702,-0.118147142231464,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.872991740703583\n             ,0.465614497661591,-0.14521898329258,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.432487457990646\n             ,0.89841216802597,0.0762243419885635,-0.619584679603577,0.676743805408478,0.397658914327621,-0.828120172023773\n             ,0.556849658489227,0.0643076002597809,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.147313103079796\n             ,0.957895338535309,0.246445491909981,-0.245548605918884,0.755104780197144,0.607883751392365,-0.619584679603577\n             ,0.676743805408478,0.397658914327621,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.912259876728058\n             ,0.390434086322784,0.123867250978947,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.872991740703583\n             ,0.465614497661591,-0.14521898329258,-0.619584679603577,0.676743805408478,0.397658914327621,-0.660027086734772\n             ,0.561297416687012,0.499309033155441,-0.912259876728058,0.390434086322784,0.123867250978947,-0.828120172023773\n             ,0.556849658489227,0.0643076002597809,-0.245548605918884,0.755104780197144,0.607883751392365,-0.249163046479225\n             ,0.650838494300842,0.717165946960449,-0.660027086734772,0.561297416687012,0.499309033155441,-0.619584679603577\n             ,0.676743805408478,0.397658914327621,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.965696513652802\n             ,-0.217925488948822,-0.141204655170441,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.929124534130096\n             ,0.342707455158234,-0.138849511742592,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.719024538993835\n             ,0.657704889774323,-0.224561721086502,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.866115570068359\n             ,0.494783669710159,-0.0709429755806923,0.87403529882431,-0.400045335292816,0.275728017091751,0.975419282913208\n             ,0.160561114549637,0.150921493768692,0.949690341949463,0.234604075551033,0.207482814788818,0.854402661323547\n             ,-0.324486196041107,0.405838400125504,0.854402661323547,-0.324486196041107,0.405838400125504,0.949690341949463\n             ,0.234604075551033,0.207482814788818,0.757872521877289,0.513580203056335,0.402324080467224,0.717831492424011\n             ,-0.054539829492569,0.694077372550964,0.717831492424011,-0.054539829492569,0.694077372550964,0.757872521877289\n             ,0.513580203056335,0.402324080467224,0.302653968334198,0.791418790817261,0.531090319156647,0.249009624123573\n             ,0.325980126857758,0.911992967128754,0.249009624123573,0.325980126857758,0.911992967128754,0.302653968334198\n             ,0.791418790817261,0.531090319156647,-0.19909605383873,0.874440908432007,0.442395597696304,-0.297837793827057\n             ,0.470342427492142,0.830704927444458,0.832433819770813,0.553277313709259,0.030629251152277,0.924078166484833\n             ,0.34885248541832,0.156145676970482,0.746821939945221,0.530121684074402,0.401531994342804,0.654044508934021,0.736575365066528\n             ,0.172286093235016,0.654044508934021,0.736575365066528,0.172286093235016,0.746821939945221,0.530121684074402\n             ,0.401531994342804,0.281799226999283,0.728858947753906,0.623982191085815,0.284114360809326,0.91420567035675,0.288975805044174\n             ,0.281799226999283,0.728858947753906,0.623982191085815,-0.245548605918884,0.755104780197144,0.607883751392365\n             ,-0.147313103079796,0.957895338535309,0.246445491909981,0.284114360809326,0.91420567035675,0.288975805044174\n             ,0.894311189651489,0.387113749980927,0.224389031529427,0.90546315908432,0.186478093266487,0.381264179944992,0.961451351642609\n             ,0.0904497504234314,0.259673148393631,0.923258781433105,0.354574829339981,0.147884577512741,0.924078166484833\n             ,0.34885248541832,0.156145676970482,0.962417662143707,0.0915835499763489,0.255665153264999,0.791133522987366\n             ,0.342469990253448,0.506776094436646,0.746821939945221,0.530121684074402,0.401531994342804,0.746821939945221\n             ,0.530121684074402,0.401531994342804,0.791133522987366,0.342469990253448,0.506776094436646,0.301605939865112\n             ,0.609322726726532,0.733321011066437,0.281799226999283,0.728858947753906,0.623982191085815,0.301605939865112\n             ,0.609322726726532,0.733321011066437,-0.249163046479225,0.650838494300842,0.717165946960449,-0.245548605918884\n             ,0.755104780197144,0.607883751392365,0.281799226999283,0.728858947753906,0.623982191085815,0.947061896324158\n             ,0.0981694161891937,0.305673807859421,0.96901547908783,0.136607244610786,0.205785036087036,0.951126515865326\n             ,-0.290161103010178,0.105663925409317,0.982547283172607,-0.0194747932255268,0.184990763664246,0.96901547908783\n             ,0.136607244610786,0.205785036087036,0.975419282913208,0.160561114549637,0.150921493768692,0.87403529882431,-0.400045335292816\n             ,0.275728017091751,0.900647282600403,-0.388538032770157,0.194609194993973,0.867212951183319,0.49559211730957\n             ,0.0482721738517284,0.923258781433105,0.354574829339981,0.147884577512741,0.924078166484833,0.34885248541832\n             ,0.156145676970482,0.832433819770813,0.553277313709259,0.030629251152277,0.923258781433105,0.354574829339981\n             ,0.147884577512741,0.961451351642609,0.0904497504234314,0.259673148393631,0.962417662143707,0.0915835499763489\n             ,0.255665153264999,0.924078166484833,0.34885248541832,0.156145676970482,-0.929124534130096,0.342707455158234\n             ,-0.138849511742592,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.719024538993835,0.657704889774323\n             ,-0.224561721086502,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.915837526321411,0.379801750183105\n             ,-0.130354270339012,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.613491356372833,0.78081339597702\n             ,-0.118147142231464,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.805534958839417,0.59233832359314\n             ,0.0157723147422075,-0.544086277484894,0.801831424236298,0.247055679559708,-0.432487457990646,0.89841216802597\n             ,0.0762243419885635,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.544086277484894,0.801831424236298\n             ,0.247055679559708,-0.19909605383873,0.874440908432007,0.442395597696304,-0.147313103079796,0.957895338535309\n             ,0.246445491909981,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.929124534130096,0.342707455158234\n             ,-0.138849511742592,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.861001670360565,0.508598923683167\n             ,-0.00179795478470623,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.945275783538818,0.311140537261963\n             ,-0.0982102751731873,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.93208372592926,0.354399085044861\n             ,0.0749747157096863,-0.958563566207886,0.284186273813248,-0.0198515504598618,0.832433819770813,0.553277313709259\n             ,0.030629251152277,0.949690341949463,0.234604075551033,0.207482814788818,0.975419282913208,0.160561114549637\n             ,0.150921493768692,0.867212951183319,0.49559211730957,0.0482721738517284,0.654044508934021,0.736575365066528\n             ,0.172286093235016,0.757872521877289,0.513580203056335,0.402324080467224,0.949690341949463,0.234604075551033\n             ,0.207482814788818,0.832433819770813,0.553277313709259,0.030629251152277,0.284114360809326,0.91420567035675,0.288975805044174\n             ,0.302653968334198,0.791418790817261,0.531090319156647,0.757872521877289,0.513580203056335,0.402324080467224\n             ,0.654044508934021,0.736575365066528,0.172286093235016,-0.19909605383873,0.874440908432007,0.442395597696304\n             ,0.302653968334198,0.791418790817261,0.531090319156647,0.284114360809326,0.91420567035675,0.288975805044174,-0.147313103079796\n             ,0.957895338535309,0.246445491909981,0.894311189651489,0.387113749980927,0.224389031529427,0.867212951183319\n             ,0.49559211730957,0.0482721738517284,0.975419282913208,0.160561114549637,0.150921493768692,0.96901547908783,0.136607244610786\n             ,0.205785036087036,0.90546315908432,0.186478093266487,0.381264179944992,0.894311189651489,0.387113749980927,0.224389031529427\n             ,0.96901547908783,0.136607244610786,0.205785036087036,0.947061896324158,0.0981694161891937,0.305673807859421\n             ,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.958563566207886,0.284186273813248,-0.0198515504598618\n             ,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.964038372039795,-0.105999648571014,-0.243709042668343\n             ,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.88679826259613,0.179964601993561,-0.42567777633667\n             ,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.958563566207886,0.284186273813248,-0.0198515504598618\n             ,0.895804822444916,0.195413783192635,-0.399183094501495,0.886481404304504,0.177040234208107,-0.427559942007065\n             ,0.964801907539368,-0.255219370126724,0.0634067207574844,0.977060616016388,-0.163682118058205,0.136237412691116\n             ,0.901520609855652,-0.411151170730591,-0.134964123368263,0.964801907539368,-0.255219370126724,0.0634067207574844\n             ,0.886481404304504,0.177040234208107,-0.427559942007065,0.787978410720825,0.121628329157829,-0.603569865226746\n             ,0.666584491729736,-0.599533498287201,-0.44297257065773,0.901520609855652,-0.411151170730591,-0.134964123368263\n             ,0.787978410720825,0.121628329157829,-0.603569865226746,0.571970582008362,0.0312800444662571,-0.819677472114563\n             ,0.241922825574875,-0.699652969837189,-0.672279000282288,0.666584491729736,-0.599533498287201,-0.44297257065773\n             ,0.571970582008362,0.0312800444662571,-0.819677472114563,0.266431361436844,-0.0175890251994133,-0.963693380355835\n             ,0.977060616016388,-0.163682118058205,0.136237412691116,0.832494258880615,-0.151082515716553,-0.53303599357605\n             ,0.693842947483063,0.221262499690056,-0.685291826725006,0.895804822444916,0.195413783192635,-0.399183094501495\n             ,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.954547107219696,-0.0926553905010223,-0.283292710781097\n             ,-0.533322870731354,0.362958401441574,-0.764086365699768,-0.536711573600769,0.454791516065598,-0.710707664489746\n             ,-0.416003495454788,0.214769661426544,-0.883637428283691,-0.533322870731354,0.362958401441574,-0.764086365699768\n             ,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.807687342166901,-0.332686811685562,-0.486786007881165\n             ,-0.121472828090191,0.0532774887979031,-0.991163909435272,-0.416003495454788,0.214769661426544,-0.883637428283691\n             ,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.351745277643204,-0.619295239448547,-0.701960563659668\n             ,0.266431361436844,-0.0175890251994133,-0.963693380355835,-0.121472828090191,0.0532774887979031,-0.991163909435272\n             ,-0.351745277643204,-0.619295239448547,-0.701960563659668,0.241922825574875,-0.699652969837189,-0.672279000282288\n             ,-0.185644939541817,0.470028698444366,-0.862907290458679,-0.540148377418518,0.0994914695620537,-0.83566814661026\n             ,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.536711573600769,0.454791516065598,-0.710707664489746\n             ,0.964801907539368,-0.255219370126724,0.0634067207574844,0.552583754062653,-0.801110565662384,0.229941368103027\n             ,0.598017036914825,-0.77135705947876,0.217678412795067,0.977060616016388,-0.163682118058205,0.136237412691116\n             ,0.901520609855652,-0.411151170730591,-0.134964123368263,0.446152597665787,-0.869332015514374,0.212625667452812\n             ,0.552583754062653,-0.801110565662384,0.229941368103027,0.964801907539368,-0.255219370126724,0.0634067207574844\n             ,0.666584491729736,-0.599533498287201,-0.44297257065773,0.292398184537888,-0.949960947036743,0.10989760607481\n             ,0.446152597665787,-0.869332015514374,0.212625667452812,0.901520609855652,-0.411151170730591,-0.134964123368263\n             ,0.0585855022072792,-0.997730076313019,-0.0332028940320015,0.292398184537888,-0.949960947036743,0.10989760607481\n             ,0.666584491729736,-0.599533498287201,-0.44297257065773,0.241922825574875,-0.699652969837189,-0.672279000282288\n             ,0.356895834207535,-0.932965636253357,0.0469100996851921,0.682462096214294,-0.715959489345551,-0.147131055593491\n             ,0.977060616016388,-0.163682118058205,0.136237412691116,0.598017036914825,-0.77135705947876,0.217678412795067\n             ,-0.704459130764008,-0.709129512310028,0.0295414477586746,-0.626312673091888,-0.775286138057709,0.0816323086619377\n             ,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.980031192302704,0.046081081032753,-0.19343064725399\n             ,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.954547107219696,-0.0926553905010223,-0.283292710781097\n             ,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.515369832515717,-0.855204343795776,0.0549499057233334\n             ,-0.351745277643204,-0.619295239448547,-0.701960563659668,-0.807687342166901,-0.332686811685562,-0.486786007881165\n             ,-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.270284593105316,-0.962110757827759,-0.0359042175114155\n             ,-0.351745277643204,-0.619295239448547,-0.701960563659668,-0.270284593105316,-0.962110757827759,-0.0359042175114155\n             ,0.0585855022072792,-0.997730076313019,-0.0332028940320015,0.241922825574875,-0.699652969837189,-0.672279000282288\n             ,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.699954152107239,-0.637360692024231,-0.322235196828842\n             ,-0.456256777048111,-0.889221489429474,-0.0333887115120888,-0.704459130764008,-0.709129512310028,0.0295414477586746\n             ,0.895804822444916,0.195413783192635,-0.399183094501495,-0.0514890588819981,0.630368947982788,-0.774586260318756\n             ,-0.0356711931526661,0.684221088886261,-0.728401660919189,0.886481404304504,0.177040234208107,-0.427559942007065\n             ,0.787978410720825,0.121628329157829,-0.603569865226746,0.886481404304504,0.177040234208107,-0.427559942007065\n             ,-0.0356711931526661,0.684221088886261,-0.728401660919189,-0.0853337571024895,0.746294736862183,-0.660122990608215\n             ,0.571970582008362,0.0312800444662571,-0.819677472114563,0.787978410720825,0.121628329157829,-0.603569865226746\n             ,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.0719253867864609,0.846214473247528,-0.527965664863586\n             ,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.571970582008362,0.0312800444662571,-0.819677472114563\n             ,-0.0719253867864609,0.846214473247528,-0.527965664863586,0.0788120701909065,0.901525735855103,-0.42548793554306\n             ,0.777539789676666,-0.479580610990524,-0.406736135482788,-0.33768093585968,-0.49410879611969,-0.801141738891602\n             ,-0.207446113228798,0.0645331293344498,-0.976115584373474,0.832494258880615,-0.151082515716553,-0.53303599357605\n             ,0.693842947483063,0.221262499690056,-0.685291826725006,-0.13019323348999,0.440476208925247,-0.88827383518219\n             ,-0.0514890588819981,0.630368947982788,-0.774586260318756,0.895804822444916,0.195413783192635,-0.399183094501495\n             ,-0.533322870731354,0.362958401441574,-0.764086365699768,0.541287243366241,0.601404964923859,-0.587639510631561\n             ,0.570469558238983,0.551836013793945,-0.608310341835022,-0.536711573600769,0.454791516065598,-0.710707664489746\n             ,-0.416003495454788,0.214769661426544,-0.883637428283691,0.492161780595779,0.702208399772644,-0.514470756053925\n             ,0.541287243366241,0.601404964923859,-0.587639510631561,-0.533322870731354,0.362958401441574,-0.764086365699768\n             ,-0.121472828090191,0.0532774887979031,-0.991163909435272,0.315746545791626,0.845299899578094,-0.431012988090515\n             ,0.492161780595779,0.702208399772644,-0.514470756053925,-0.416003495454788,0.214769661426544,-0.883637428283691\n             ,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.0788120701909065,0.901525735855103,-0.42548793554306\n             ,0.315746545791626,0.845299899578094,-0.431012988090515,-0.121472828090191,0.0532774887979031,-0.991163909435272\n             ,-0.536711573600769,0.454791516065598,-0.710707664489746,0.570469558238983,0.551836013793945,-0.608310341835022\n             ,0.622039020061493,0.415303707122803,-0.663769721984863,-0.185644939541817,0.470028698444366,-0.862907290458679\n             ,-0.540148377418518,0.0994914695620537,-0.83566814661026,-0.185644939541817,0.470028698444366,-0.862907290458679\n             ,0.622039020061493,0.415303707122803,-0.663769721984863,0.643028497695923,0.0408206060528755,-0.764753580093384\n             ,-0.540148377418518,0.0994914695620537,-0.83566814661026,0.643028497695923,0.0408206060528755,-0.764753580093384\n             ,0.564797043800354,-0.561121165752411,-0.605101108551025,-0.639358460903168,-0.36973437666893,-0.674178957939148\n             ,0.598017036914825,-0.77135705947876,0.217678412795067,0.552583754062653,-0.801110565662384,0.229941368103027\n             ,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.503399014472961,-0.851141691207886,0.148819476366043\n             ,0.446152597665787,-0.869332015514374,0.212625667452812,-0.599539399147034,-0.652060031890869,0.464079976081848\n             ,-0.549799084663391,-0.796860456466675,0.250468283891678,0.552583754062653,-0.801110565662384,0.229941368103027\n             ,0.292398184537888,-0.949960947036743,0.10989760607481,-0.502160012722015,-0.455851703882217,0.734870433807373\n             ,-0.599539399147034,-0.652060031890869,0.464079976081848,0.446152597665787,-0.869332015514374,0.212625667452812\n             ,0.0585855022072792,-0.997730076313019,-0.0332028940320015,-0.272433489561081,-0.386231929063797,0.881251931190491\n             ,-0.502160012722015,-0.455851703882217,0.734870433807373,0.292398184537888,-0.949960947036743,0.10989760607481\n             ,0.777539789676666,-0.479580610990524,-0.406736135482788,0.682462096214294,-0.715959489345551,-0.147131055593491\n             ,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.33768093585968,-0.49410879611969,-0.801141738891602\n             ,0.356895834207535,-0.932965636253357,0.0469100996851921,0.598017036914825,-0.77135705947876,0.217678412795067\n             ,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.492518663406372,-0.867294549942017,-0.0722879022359848\n             ,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.704459130764008,-0.709129512310028,0.0295414477586746\n             ,0.375612527132034,-0.880971193313599,0.287758558988571,0.426156967878342,-0.793524563312531,0.434406518936157\n             ,-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.626312673091888,-0.775286138057709,0.0816323086619377\n             ,0.426156967878342,-0.793524563312531,0.434406518936157,0.342554897069931,-0.64288204908371,0.685097694396973\n             ,-0.270284593105316,-0.962110757827759,-0.0359042175114155,-0.515369832515717,-0.855204343795776,0.0549499057233334\n             ,0.342554897069931,-0.64288204908371,0.685097694396973,0.0474529080092907,-0.46172571182251,0.885752558708191\n             ,-0.270284593105316,-0.962110757827759,-0.0359042175114155,0.0474529080092907,-0.46172571182251,0.885752558708191\n             ,-0.272433489561081,-0.386231929063797,0.881251931190491,0.0585855022072792,-0.997730076313019,-0.0332028940320015\n             ,-0.704459130764008,-0.709129512310028,0.0295414477586746,-0.456256777048111,-0.889221489429474,-0.0333887115120888\n             ,0.376423925161362,-0.91814798116684,0.12373098731041,0.375612527132034,-0.880971193313599,0.287758558988571\n             ,-0.456256777048111,-0.889221489429474,-0.0333887115120888,-0.699954152107239,-0.637360692024231,-0.322235196828842\n             ,0.438194841146469,-0.882847785949707,-0.169011816382408,0.376423925161362,-0.91814798116684,0.12373098731041\n             ,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.639358460903168,-0.36973437666893,-0.674178957939148\n             ,0.564797043800354,-0.561121165752411,-0.605101108551025,0.438194841146469,-0.882847785949707,-0.169011816382408\n             ,0.832494258880615,-0.151082515716553,-0.53303599357605,-0.207446113228798,0.0645331293344498,-0.976115584373474\n             ,-0.13019323348999,0.440476208925247,-0.88827383518219,0.693842947483063,0.221262499690056,-0.685291826725006\n             ,0.682462096214294,-0.715959489345551,-0.147131055593491,0.356895834207535,-0.932965636253357,0.0469100996851921\n             ,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.442046195268631,-0.813259303569794,-0.378423690795898\n             ,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.76156884431839,0.476596713066101,-0.439167976379395\n             ,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.0356711931526661,0.684221088886261,-0.728401660919189\n             ,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.704140067100525,0.675374805927277,-0.219215899705887\n             ,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.0356711931526661,0.684221088886261,-0.728401660919189\n             ,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.704140067100525,0.675374805927277,-0.219215899705887\n             ,-0.521776258945465,0.845166325569153,0.115945540368557,-0.0719253867864609,0.846214473247528,-0.527965664863586\n             ,-0.521776258945465,0.845166325569153,0.115945540368557,-0.117615908384323,0.926379323005676,0.357753843069077\n             ,0.0788120701909065,0.901525735855103,-0.42548793554306,-0.0719253867864609,0.846214473247528,-0.527965664863586\n             ,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.905734241008759,-0.0415813475847244,-0.421801447868347\n             ,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.207446113228798,0.0645331293344498,-0.976115584373474\n             ,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.76156884431839,0.476596713066101,-0.439167976379395\n             ,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.13019323348999,0.440476208925247,-0.88827383518219\n             ,0.541287243366241,0.601404964923859,-0.587639510631561,0.935190200805664,0.351279437541962,-0.044966459274292\n             ,0.96645724773407,0.233678266406059,-0.106558986008167,0.570469558238983,0.551836013793945,-0.608310341835022\n             ,0.492161780595779,0.702208399772644,-0.514470756053925,0.804791152477264,0.576125502586365,0.142795473337173\n             ,0.935190200805664,0.351279437541962,-0.044966459274292,0.541287243366241,0.601404964923859,-0.587639510631561\n             ,0.315746545791626,0.845299899578094,-0.431012988090515,0.42239049077034,0.834542334079742,0.353730529546738\n             ,0.804791152477264,0.576125502586365,0.142795473337173,0.492161780595779,0.702208399772644,-0.514470756053925\n             ,0.0788120701909065,0.901525735855103,-0.42548793554306,-0.117615908384323,0.926379323005676,0.357753843069077\n             ,0.42239049077034,0.834542334079742,0.353730529546738,0.315746545791626,0.845299899578094,-0.431012988090515\n             ,0.570469558238983,0.551836013793945,-0.608310341835022,0.96645724773407,0.233678266406059,-0.106558986008167\n             ,0.982214033603668,0.146134316921234,-0.117899708449841,0.622039020061493,0.415303707122803,-0.663769721984863\n             ,0.622039020061493,0.415303707122803,-0.663769721984863,0.982214033603668,0.146134316921234,-0.117899708449841\n             ,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.643028497695923,0.0408206060528755,-0.764753580093384\n             ,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.972557067871094,-0.221615329384804,-0.0708476528525352\n             ,0.564797043800354,-0.561121165752411,-0.605101108551025,0.643028497695923,0.0408206060528755,-0.764753580093384\n             ,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.9717116355896,-0.234629422426224,-0.0269353594630957\n             ,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.549799084663391,-0.796860456466675,0.250468283891678\n             ,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.978413343429565,-0.195419788360596,0.0672191008925438\n             ,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.599539399147034,-0.652060031890869,0.464079976081848\n             ,-0.707790970802307,0.336063861846924,0.621363818645477,-0.952633440494537,0.0169817637652159,0.303646564483643\n             ,-0.599539399147034,-0.652060031890869,0.464079976081848,-0.502160012722015,-0.455851703882217,0.734870433807373\n             ,-0.272433489561081,-0.386231929063797,0.881251931190491,-0.297837793827057,0.470342427492142,0.830704927444458\n             ,-0.707790970802307,0.336063861846924,0.621363818645477,-0.502160012722015,-0.455851703882217,0.734870433807373\n             ,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.905734241008759,-0.0415813475847244,-0.421801447868347\n             ,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.442046195268631,-0.813259303569794,-0.378423690795898\n             ,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.9717116355896,-0.234629422426224,-0.0269353594630957\n             ,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.492518663406372,-0.867294549942017,-0.0722879022359848\n             ,0.375612527132034,-0.880971193313599,0.287758558988571,0.87403529882431,-0.400045335292816,0.275728017091751\n             ,0.854402661323547,-0.324486196041107,0.405838400125504,0.426156967878342,-0.793524563312531,0.434406518936157\n             ,0.854402661323547,-0.324486196041107,0.405838400125504,0.717831492424011,-0.054539829492569,0.694077372550964\n             ,0.342554897069931,-0.64288204908371,0.685097694396973,0.426156967878342,-0.793524563312531,0.434406518936157\n             ,0.342554897069931,-0.64288204908371,0.685097694396973,0.717831492424011,-0.054539829492569,0.694077372550964\n             ,0.249009624123573,0.325980126857758,0.911992967128754,0.0474529080092907,-0.46172571182251,0.885752558708191\n             ,0.0474529080092907,-0.46172571182251,0.885752558708191,0.249009624123573,0.325980126857758,0.911992967128754\n             ,-0.297837793827057,0.470342427492142,0.830704927444458,-0.272433489561081,-0.386231929063797,0.881251931190491\n             ,0.900647282600403,-0.388538032770157,0.194609194993973,0.87403529882431,-0.400045335292816,0.275728017091751\n             ,0.375612527132034,-0.880971193313599,0.287758558988571,0.376423925161362,-0.91814798116684,0.12373098731041\n             ,0.951126515865326,-0.290161103010178,0.105663925409317,0.900647282600403,-0.388538032770157,0.194609194993973\n             ,0.376423925161362,-0.91814798116684,0.12373098731041,0.438194841146469,-0.882847785949707,-0.169011816382408\n             ,0.564797043800354,-0.561121165752411,-0.605101108551025,0.972557067871094,-0.221615329384804,-0.0708476528525352\n             ,0.951126515865326,-0.290161103010178,0.105663925409317,0.438194841146469,-0.882847785949707,-0.169011816382408\n             ,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.809617698192596,0.346473306417465,-0.473788410425186\n             ,-0.13019323348999,0.440476208925247,-0.88827383518219,-0.207446113228798,0.0645331293344498,-0.976115584373474\n             ,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.965696513652802,-0.217925488948822,-0.141204655170441\n             ,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.442046195268631,-0.813259303569794,-0.378423690795898\n             ,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.958588540554047,0.28219923377037,-0.0383618324995041\n             ,-0.866115570068359,0.494783669710159,-0.0709429755806923,-0.872991740703583,0.465614497661591,-0.14521898329258\n             ,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.96112471818924,0.0701068416237831,0.267066061496735\n             ,-0.952685832977295,0.144979551434517,0.26715275645256,-0.93208372592926,0.354399085044861,0.0749747157096863\n             ,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.866115570068359,0.494783669710159,-0.0709429755806923\n             ,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.93208372592926,0.354399085044861,0.0749747157096863\n             ,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.88679826259613,0.179964601993561,-0.42567777633667\n             ,-0.905734241008759,-0.0415813475847244,-0.421801447868347,0.698522806167603,-0.278597444295883,0.659127771854401\n             ,0.845280110836029,-0.0974530875682831,0.525361180305481,0.819937825202942,-0.00659102853387594,0.572414636611938\n             ,0.942662239074707,-0.0168874561786652,0.333320707082748,0.997464418411255,-0.00418182462453842,-0.0710434243083\n             ,0.982214033603668,0.146134316921234,-0.117899708449841,0.982547283172607,-0.0194747932255268,0.184990763664246\n             ,0.972557067871094,-0.221615329384804,-0.0708476528525352,0.997464418411255,-0.00418182462453842,-0.0710434243083\n             ,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.905734241008759,-0.0415813475847244,-0.421801447868347\n             ,-0.964038372039795,-0.105999648571014,-0.243709042668343,0.867212951183319,0.49559211730957,0.0482721738517284\n             ,0.894311189651489,0.387113749980927,0.224389031529427,0.923258781433105,0.354574829339981,0.147884577512741\n             ,0.96901547908783,0.136607244610786,0.205785036087036,0.900647282600403,-0.388538032770157,0.194609194993973\n             ,0.951126515865326,-0.290161103010178,0.105663925409317,0.982547283172607,-0.0194747932255268,0.184990763664246\n             ,0.951126515865326,-0.290161103010178,0.105663925409317,0.972557067871094,-0.221615329384804,-0.0708476528525352\n             ,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.980856895446777,0.194233447313309,-0.0138956038281322\n             ,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.945275783538818,0.311140537261963,-0.0982102751731873\n             ,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.965696513652802,-0.217925488948822,-0.141204655170441\n             ,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.540148377418518,0.0994914695620537,-0.83566814661026\n             ,-0.639358460903168,-0.36973437666893,-0.674178957939148,-0.639358460903168,-0.36973437666893,-0.674178957939148\n             ,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.980031192302704,0.046081081032753,-0.19343064725399\n             ,0.682462096214294,-0.715959489345551,-0.147131055593491,0.777539789676666,-0.479580610990524,-0.406736135482788\n             ,0.977060616016388,-0.163682118058205,0.136237412691116,0.977060616016388,-0.163682118058205,0.136237412691116\n             ,0.777539789676666,-0.479580610990524,-0.406736135482788,0.832494258880615,-0.151082515716553,-0.53303599357605\n             ,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.952685832977295,0.144979551434517,0.26715275645256\n             ,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.866115570068359,0.494783669710159,-0.0709429755806923\n             ,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.771193385124207,0.619839727878571,-0.145118817687035\n             ,0.761568784713745,0.476597040891647,-0.439167678356171,0.739788413047791,0.545380234718323,-0.394047558307648\n             ,0.968085885047913,0.249149695038795,-0.0270941667258739,0.984016954898834,0.178066745400429,-0.00170838471967727\n             ,0.739788413047791,0.545380234718323,-0.394047558307648,0.704140186309814,0.675374627113342,-0.21921606361866\n             ,0.898221969604492,0.418350785970688,0.134832948446274,0.968085885047913,0.249149695038795,-0.0270941667258739\n             ,0.704140186309814,0.675374627113342,-0.21921606361866,0.521775901317596,0.845166563987732,0.11594570428133,0.654416561126709\n             ,0.56166809797287,0.506229162216187,0.898221969604492,0.418350785970688,0.134832948446274,0.521775901317596,0.845166563987732\n             ,0.11594570428133,0.117615856230259,0.926379323005676,0.357753992080688,0.214515626430511,0.588520109653473,0.779504418373108\n             ,0.654416561126709,0.56166809797287,0.506229162216187,0.952755630016327,-0.0757652819156647,0.294136583805084\n             ,0.910864531993866,0.0992951467633247,0.400582402944565,0.926552355289459,0.207176983356476,0.31397208571434\n             ,0.98439222574234,0.0485407151281834,0.169161930680275,0.910864531993866,0.0992951467633247,0.400582402944565\n             ,0.658345222473145,0.235576301813126,0.714902341365814,0.666352212429047,0.406804502010345,0.624887824058533\n             ,0.926552355289459,0.207176983356476,0.31397208571434,0.658345222473145,0.235576301813126,0.714902341365814,0.250782340764999\n             ,0.269851475954056,0.929671168327332,0.245068743824959,0.507136464118958,0.826289236545563,0.666352212429047\n             ,0.406804502010345,0.624887824058533,0.98439222574234,0.0485407151281834,0.169161930680275,0.962221920490265\n             ,0.251950919628143,-0.103197492659092,0.958588719367981,0.282198518514633,-0.0383618138730526,0.96112471818924\n             ,0.0701063796877861,0.267066121101379,0.962221920490265,0.251950919628143,-0.103197492659092,0.98439222574234\n             ,0.0485407151281834,0.169161930680275,0.926552355289459,0.207176983356476,0.31397208571434,0.912259817123413\n             ,0.390434235334396,0.123867250978947,0.912259817123413,0.390434235334396,0.123867250978947,0.926552355289459\n             ,0.207176983356476,0.31397208571434,0.666352212429047,0.406804502010345,0.624887824058533,0.660027027130127,0.561297476291656\n             ,0.499309003353119,0.660027027130127,0.561297476291656,0.499309003353119,0.666352212429047,0.406804502010345\n             ,0.624887824058533,0.245068743824959,0.507136464118958,0.826289236545563,0.249163061380386,0.650838553905487\n             ,0.717165887355804,0.980856955051422,0.194233074784279,-0.0138955730944872,0.80961799621582,0.346472293138504\n             ,-0.473788559436798,0.761568784713745,0.476597040891647,-0.439167678356171,0.984016954898834,0.178066745400429\n             ,-0.00170838471967727,0.924136519432068,-0.0825216323137283,0.373044043779373,0.952755630016327,-0.0757652819156647\n             ,0.294136583805084,0.98439222574234,0.0485407151281834,0.169161930680275,0.96112471818924,0.0701063796877861\n             ,0.267066121101379,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.966457307338715,0.233678236603737\n             ,-0.106558948755264,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.898469209671021,-0.0272952988743782\n             ,0.43818724155426,-0.804790914058685,0.576125860214233,0.142795518040657,-0.935190379619598,0.351279079914093\n             ,-0.0449664331972599,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.761282026767731,0.31198838353157\n             ,0.568430244922638,-0.804790914058685,0.576125860214233,0.142795518040657,-0.761282026767731,0.31198838353157\n             ,0.568430244922638,-0.335850954055786,0.562229692935944,0.755712807178497,-0.422390103340149,0.834542691707611\n             ,0.353730261325836,0.117615856230259,0.926379323005676,0.357753992080688,-0.422390103340149,0.834542691707611\n             ,0.353730261325836,-0.335850954055786,0.562229692935944,0.755712807178497,0.214515626430511,0.588520109653473\n             ,0.779504418373108,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.870358943939209,-0.102341398596764\n             ,0.481665462255478,-0.71757584810257,0.177658542990685,0.67344069480896,-0.63004606962204,0.043647576123476,0.775330185890198\n             ,-0.63004606962204,0.043647576123476,0.775330185890198,-0.71757584810257,0.177658542990685,0.67344069480896,-0.267084181308746\n             ,0.455141216516495,0.849418938159943,-0.22842738032341,0.282149195671082,0.931779384613037,-0.22842738032341\n             ,0.282149195671082,0.931779384613037,-0.267084181308746,0.455141216516495,0.849418938159943,0.245068743824959\n             ,0.507136464118958,0.826289236545563,0.250782340764999,0.269851475954056,0.929671168327332,-0.961451351642609\n             ,0.0904500335454941,0.259673148393631,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.819937765598297\n             ,-0.00659000594168901,0.572414755821228,-0.905462920665741,0.186479464173317,0.38126415014267,-0.71757584810257\n             ,0.177658542990685,0.67344069480896,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.962417662143707\n             ,0.0915835052728653,0.255665123462677,-0.791133582592011,0.342469930648804,0.506776034832001,-0.267084181308746\n             ,0.455141216516495,0.849418938159943,-0.71757584810257,0.177658542990685,0.67344069480896,-0.791133582592011\n             ,0.342469930648804,0.506776034832001,-0.30160591006279,0.609322607517242,0.733321130275726,0.245068743824959\n             ,0.507136464118958,0.826289236545563,-0.267084181308746,0.455141216516495,0.849418938159943,-0.30160591006279\n             ,0.609322607517242,0.733321130275726,0.249163061380386,0.650838553905487,0.717165887355804,-0.982547223567963\n             ,-0.0194754991680384,0.184990763664246,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.942662239074707\n             ,-0.0168870743364096,0.333320766687393,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.942662239074707\n             ,-0.0168870743364096,0.333320766687393,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.966457307338715\n             ,0.233678236603737,-0.106558948755264,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.698523104190826\n             ,-0.278595626354218,0.659128189086914,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.870358943939209\n             ,-0.102341398596764,0.481665462255478,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.870358943939209\n             ,-0.102341398596764,0.481665462255478,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.961451351642609\n             ,0.0904500335454941,0.259673148393631,-0.962417662143707,0.0915835052728653,0.255665123462677,0.924136519432068\n             ,-0.0825216323137283,0.373044043779373,0.984016954898834,0.178066745400429,-0.00170838471967727,0.968085885047913\n             ,0.249149695038795,-0.0270941667258739,0.952755630016327,-0.0757652819156647,0.294136583805084,0.910864531993866\n             ,0.0992951467633247,0.400582402944565,0.952755630016327,-0.0757652819156647,0.294136583805084,0.968085885047913\n             ,0.249149695038795,-0.0270941667258739,0.898221969604492,0.418350785970688,0.134832948446274,0.658345222473145\n             ,0.235576301813126,0.714902341365814,0.910864531993866,0.0992951467633247,0.400582402944565,0.898221969604492\n             ,0.418350785970688,0.134832948446274,0.654416561126709,0.56166809797287,0.506229162216187,0.250782340764999,0.269851475954056\n             ,0.929671168327332,0.658345222473145,0.235576301813126,0.714902341365814,0.654416561126709,0.56166809797287,0.506229162216187\n             ,0.214515626430511,0.588520109653473,0.779504418373108,0.984016954898834,0.178066745400429,-0.00170838471967727\n             ,0.924136519432068,-0.0825216323137283,0.373044043779373,0.952685952186584,0.144979014992714,0.267152786254883\n             ,0.980856955051422,0.194233074784279,-0.0138955730944872,0.980856955051422,0.194233074784279,-0.0138955730944872\n             ,0.952685952186584,0.144979014992714,0.267152786254883,0.932084560394287,0.354396849870682,0.074974812567234\n             ,0.958563983440399,0.284184783697128,-0.0198514685034752,-0.698523104190826,-0.278595626354218,0.659128189086914\n             ,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.898469209671021,-0.0272952988743782,0.43818724155426\n             ,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.706884801387787,-0.288780331611633,0.645693302154541\n             ,-0.63004606962204,0.043647576123476,0.775330185890198,-0.761282026767731,0.31198838353157,0.568430244922638\n             ,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.63004606962204,0.043647576123476,0.775330185890198\n             ,-0.22842738032341,0.282149195671082,0.931779384613037,-0.335850954055786,0.562229692935944,0.755712807178497\n             ,-0.761282026767731,0.31198838353157,0.568430244922638,-0.22842738032341,0.282149195671082,0.931779384613037\n             ,0.250782340764999,0.269851475954056,0.929671168327332,0.214515626430511,0.588520109653473,0.779504418373108\n             ,-0.335850954055786,0.562229692935944,0.755712807178497,-0.912912726402283,-0.113554358482361,0.392040550708771\n             ,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.819937765598297,-0.00659000594168901,0.572414755821228\n             ,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.942662239074707,-0.0168870743364096,0.333320766687393\n             ,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.905462920665741,0.186479464173317,0.38126415014267\n             ,-0.819937765598297,-0.00659000594168901,0.572414755821228,0.915838539600372,0.379799336194992,-0.13035449385643\n             ,0.97841340303421,-0.195419549942017,0.0672191828489304,0.971711337566376,-0.234630659222603,-0.0269353967159987\n             ,0.929125070571899,0.342706054449081,-0.138849601149559,0.97841340303421,-0.195419549942017,0.0672191828489304\n             ,0.915838539600372,0.379799336194992,-0.13035449385643,0.805536329746246,0.592336535453796,0.01577203348279,0.952633321285248\n             ,0.0169839523732662,0.303646683692932,0.952633321285248,0.0169839523732662,0.303646683692932,0.805536329746246\n             ,0.592336535453796,0.01577203348279,0.544086754322052,0.801831126213074,0.247055530548096,0.707790434360504,0.336065679788589\n             ,0.621363461017609,0.707790434360504,0.336065679788589,0.621363461017609,0.544086754322052,0.801831126213074\n             ,0.247055530548096,0.199096158146858,0.874440908432007,0.442395567893982,0.29783770442009,0.470342755317688,0.830704748630524\n             ,0.719026386737823,0.657702744007111,-0.224562168121338,0.872992157936096,0.465613692998886,-0.145219102501869\n             ,0.828120410442352,0.556849300861359,0.0643075108528137,0.613492965698242,0.780812084674835,-0.118147522211075\n             ,0.613492965698242,0.780812084674835,-0.118147522211075,0.828120410442352,0.556849300861359,0.0643075108528137\n             ,0.619584619998932,0.676743865013123,0.397658854722977,0.432487845420837,0.898411989212036,0.076224185526371\n             ,0.432487845420837,0.898411989212036,0.076224185526371,0.619584619998932,0.676743865013123,0.397658854722977\n             ,0.245548591017723,0.755104839801788,0.60788369178772,0.147313222289085,0.957895278930664,0.246445551514626,0.828120410442352\n             ,0.556849300861359,0.0643075108528137,0.872992157936096,0.465613692998886,-0.145219102501869,0.962221920490265\n             ,0.251950919628143,-0.103197492659092,0.912259817123413,0.390434235334396,0.123867250978947,0.619584619998932\n             ,0.676743865013123,0.397658854722977,0.828120410442352,0.556849300861359,0.0643075108528137,0.912259817123413\n             ,0.390434235334396,0.123867250978947,0.660027027130127,0.561297476291656,0.499309003353119,0.245548591017723\n             ,0.755104839801788,0.60788369178772,0.619584619998932,0.676743865013123,0.397658854722977,0.660027027130127,0.561297476291656\n             ,0.499309003353119,0.249163061380386,0.650838553905487,0.717165887355804,0.945276021957397,0.311139762401581\n             ,-0.0982102602720261,0.929125070571899,0.342706054449081,-0.138849601149559,0.971711337566376,-0.234630659222603\n             ,-0.0269353967159987,0.965696275234222,-0.217926412820816,-0.141204699873924,0.77119505405426,0.619837582111359\n             ,-0.14511901140213,0.866116344928741,0.494782358407974,-0.0709430351853371,0.872992157936096,0.465613692998886\n             ,-0.145219102501869,0.719026386737823,0.657702744007111,-0.224562168121338,-0.874035537242889,-0.400044828653336\n             ,0.275728106498718,-0.854402720928192,-0.324486047029495,0.405838370323181,-0.949690282344818,0.234604343771935\n             ,0.20748282968998,-0.975419044494629,0.160562738776207,0.150921478867531,-0.854402720928192,-0.324486047029495\n             ,0.405838370323181,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.75787228345871,0.513580441474915\n             ,0.402324169874191,-0.949690282344818,0.234604343771935,0.20748282968998,-0.717831492424011,-0.054540041834116\n             ,0.69407731294632,-0.24900957942009,0.325979948043823,0.911993026733398,-0.302653342485428,0.791418969631195\n             ,0.531090319156647,-0.75787228345871,0.513580441474915,0.402324169874191,-0.24900957942009,0.325979948043823\n             ,0.911993026733398,0.29783770442009,0.470342755317688,0.830704748630524,0.199096158146858,0.874440908432007,0.442395567893982\n             ,-0.302653342485428,0.791418969631195,0.531090319156647,-0.832433760166168,0.553277373313904,0.0306292269378901\n             ,-0.654044389724731,0.736575484275818,0.172286108136177,-0.746822059154511,0.530121624469757,0.401531904935837\n             ,-0.924078285694122,0.348852246999741,0.156145602464676,-0.654044389724731,0.736575484275818,0.172286108136177\n             ,-0.284113943576813,0.914205729961395,0.288975954055786,-0.281799405813217,0.728858828544617,0.62398225069046\n             ,-0.746822059154511,0.530121624469757,0.401531904935837,-0.281799405813217,0.728858828544617,0.62398225069046\n             ,-0.284113943576813,0.914205729961395,0.288975954055786,0.147313222289085,0.957895278930664,0.246445551514626\n             ,0.245548591017723,0.755104839801788,0.60788369178772,-0.894310534000397,0.387115389108658,0.224388927221298\n             ,-0.92325884103775,0.354574739933014,0.14788456261158,-0.961451351642609,0.0904500335454941,0.259673148393631\n             ,-0.905462920665741,0.186479464173317,0.38126415014267,-0.924078285694122,0.348852246999741,0.156145602464676\n             ,-0.746822059154511,0.530121624469757,0.401531904935837,-0.791133582592011,0.342469930648804,0.506776034832001\n             ,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.746822059154511,0.530121624469757,0.401531904935837\n             ,-0.281799405813217,0.728858828544617,0.62398225069046,-0.30160591006279,0.609322607517242,0.733321130275726\n             ,-0.791133582592011,0.342469930648804,0.506776034832001,-0.30160591006279,0.609322607517242,0.733321130275726\n             ,-0.281799405813217,0.728858828544617,0.62398225069046,0.245548591017723,0.755104839801788,0.60788369178772,0.249163061380386\n             ,0.650838553905487,0.717165887355804,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.982547223567963\n             ,-0.0194754991680384,0.184990763664246,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.96901535987854\n             ,0.136607885360718,0.205785036087036,-0.96901535987854,0.136607885360718,0.205785036087036,-0.900646984577179\n             ,-0.388538599014282,0.194609254598618,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.975419044494629\n             ,0.160562738776207,0.150921478867531,-0.867211997509003,0.495593756437302,0.048272043466568,-0.832433760166168\n             ,0.553277373313904,0.0306292269378901,-0.924078285694122,0.348852246999741,0.156145602464676,-0.92325884103775\n             ,0.354574739933014,0.14788456261158,-0.92325884103775,0.354574739933014,0.14788456261158,-0.924078285694122,0.348852246999741\n             ,0.156145602464676,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.961451351642609,0.0904500335454941\n             ,0.259673148393631,0.929125070571899,0.342706054449081,-0.138849601149559,0.77119505405426,0.619837582111359\n             ,-0.14511901140213,0.719026386737823,0.657702744007111,-0.224562168121338,0.915838539600372,0.379799336194992\n             ,-0.13035449385643,0.915838539600372,0.379799336194992,-0.13035449385643,0.719026386737823,0.657702744007111\n             ,-0.224562168121338,0.613492965698242,0.780812084674835,-0.118147522211075,0.805536329746246,0.592336535453796\n             ,0.01577203348279,0.805536329746246,0.592336535453796,0.01577203348279,0.613492965698242,0.780812084674835,-0.118147522211075\n             ,0.432487845420837,0.898411989212036,0.076224185526371,0.544086754322052,0.801831126213074,0.247055530548096\n             ,0.544086754322052,0.801831126213074,0.247055530548096,0.432487845420837,0.898411989212036,0.076224185526371\n             ,0.147313222289085,0.957895278930664,0.246445551514626,0.199096158146858,0.874440908432007,0.442395567893982\n             ,0.929125070571899,0.342706054449081,-0.138849601149559,0.945276021957397,0.311139762401581,-0.0982102602720261\n             ,0.861002922058105,0.508596777915955,-0.00179798470344394,0.77119505405426,0.619837582111359,-0.14511901140213\n             ,0.945276021957397,0.311139762401581,-0.0982102602720261,0.958563983440399,0.284184783697128,-0.0198514685034752\n             ,0.932084560394287,0.354396849870682,0.074974812567234,0.861002922058105,0.508596777915955,-0.00179798470344394\n             ,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.867211997509003,0.495593756437302,0.048272043466568\n             ,-0.975419044494629,0.160562738776207,0.150921478867531,-0.949690282344818,0.234604343771935,0.20748282968998\n             ,-0.654044389724731,0.736575484275818,0.172286108136177,-0.832433760166168,0.553277373313904,0.0306292269378901\n             ,-0.949690282344818,0.234604343771935,0.20748282968998,-0.75787228345871,0.513580441474915,0.402324169874191\n             ,-0.284113943576813,0.914205729961395,0.288975954055786,-0.654044389724731,0.736575484275818,0.172286108136177\n             ,-0.75787228345871,0.513580441474915,0.402324169874191,-0.302653342485428,0.791418969631195,0.531090319156647\n             ,0.199096158146858,0.874440908432007,0.442395567893982,0.147313222289085,0.957895278930664,0.246445551514626\n             ,-0.284113943576813,0.914205729961395,0.288975954055786,-0.302653342485428,0.791418969631195,0.531090319156647\n             ,-0.894310534000397,0.387115389108658,0.224388927221298,-0.96901535987854,0.136607885360718,0.205785036087036\n             ,-0.975419044494629,0.160562738776207,0.150921478867531,-0.867211997509003,0.495593756437302,0.048272043466568\n             ,-0.905462920665741,0.186479464173317,0.38126415014267,-0.947061836719513,0.0981702655553818,0.305673837661743\n             ,-0.96901535987854,0.136607885360718,0.205785036087036,-0.894310534000397,0.387115389108658,0.224388927221298\n             ,0.945276021957397,0.311139762401581,-0.0982102602720261,0.96403831243515,-0.105999603867531,-0.243709176778793\n             ,0.971478760242462,0.187488585710526,-0.145179286599159,0.958563983440399,0.284184783697128,-0.0198514685034752\n             ,0.980856955051422,0.194233074784279,-0.0138955730944872,0.958563983440399,0.284184783697128,-0.0198514685034752\n             ,0.971478760242462,0.187488585710526,-0.145179286599159,0.886798441410065,0.179963767528534,-0.42567777633667\n             ,-0.895804762840271,0.195414647459984,-0.399182796478271,-0.977060735225677,-0.163681700825691,0.136237412691116\n             ,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.886481404304504,0.177040040493011,-0.427559942007065\n             ,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.78797847032547,0.121628470718861,-0.603569746017456\n             ,-0.886481404304504,0.177040040493011,-0.427559942007065,-0.964801907539368,-0.255219370126724,0.0634067133069038\n             ,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.571970641613007,0.0312801524996758,-0.819677472114563\n             ,-0.78797847032547,0.121628470718861,-0.603569746017456,-0.901520729064941,-0.411150813102722,-0.134964138269424\n             ,-0.241922900080681,-0.699652969837189,-0.672279000282288,-0.266431421041489,-0.0175891108810902,-0.963693380355835\n             ,-0.571970641613007,0.0312801524996758,-0.819677472114563,-0.666584610939026,-0.599533259868622,-0.442972719669342\n             ,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.895804762840271,0.195414647459984,-0.399182796478271\n             ,-0.693842947483063,0.221263691782951,-0.685291409492493,-0.83249443769455,-0.151082009077072,-0.53303587436676\n             ,0.980031192302704,0.0460809320211411,-0.19343064725399,0.536711633205414,0.454791337251663,-0.710707724094391\n             ,0.533322811126709,0.362958133220673,-0.764086484909058,0.954547107219696,-0.0926554873585701,-0.283292710781097\n             ,0.416003495454788,0.214769378304482,-0.883637487888336,0.807687342166901,-0.332686930894852,-0.486785978078842\n             ,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.533322811126709,0.362958133220673,-0.764086484909058\n             ,0.121472798287869,0.0532773099839687,-0.991163909435272,0.351745188236237,-0.619295418262482,-0.701960504055023\n             ,0.807687342166901,-0.332686930894852,-0.486785978078842,0.416003495454788,0.214769378304482,-0.883637487888336\n             ,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.241922900080681,-0.699652969837189,-0.672279000282288\n             ,0.351745188236237,-0.619295418262482,-0.701960504055023,0.121472798287869,0.0532773099839687,-0.991163909435272\n             ,0.185644999146461,0.47002848982811,-0.862907350063324,0.536711633205414,0.454791337251663,-0.710707724094391\n             ,0.980031192302704,0.0460809320211411,-0.19343064725399,0.540148317813873,0.0994915440678597,-0.83566814661026\n             ,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.977060735225677,-0.163681700825691,0.136237412691116\n             ,-0.598017156124115,-0.77135694026947,0.217678472399712,-0.552583634853363,-0.801110625267029,0.229941442608833\n             ,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.964801907539368,-0.255219370126724,0.0634067133069038\n             ,-0.552583634853363,-0.801110625267029,0.229941442608833,-0.446152657270432,-0.869331896305084,0.212626039981842\n             ,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.901520729064941,-0.411150813102722,-0.134964138269424\n             ,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.292398482561111,-0.949960827827454,0.109898090362549\n             ,-0.058585699647665,-0.997730076313019,-0.0332027748227119,-0.241922900080681,-0.699652969837189,-0.672279000282288\n             ,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.292398482561111,-0.949960827827454,0.109898090362549\n             ,-0.356896013021469,-0.932965517044067,0.0469101071357727,-0.598017156124115,-0.77135694026947,0.217678472399712\n             ,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.682462215423584,-0.715959310531616,-0.147131323814392\n             ,0.704459071159363,-0.709129512310028,0.0295416153967381,0.980031192302704,0.0460809320211411,-0.19343064725399\n             ,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.626312613487244,-0.775286138057709,0.0816323310136795\n             ,0.807687342166901,-0.332686930894852,-0.486785978078842,0.515369713306427,-0.855204403400421,0.0549497418105602\n             ,0.626312613487244,-0.775286138057709,0.0816323310136795,0.954547107219696,-0.0926554873585701,-0.283292710781097\n             ,0.351745188236237,-0.619295418262482,-0.701960504055023,0.270284384489059,-0.962110817432404,-0.0359043404459953\n             ,0.515369713306427,-0.855204403400421,0.0549497418105602,0.807687342166901,-0.332686930894852,-0.486785978078842\n             ,0.351745188236237,-0.619295418262482,-0.701960504055023,-0.241922900080681,-0.699652969837189,-0.672279000282288\n             ,-0.058585699647665,-0.997730076313019,-0.0332027748227119,0.270284384489059,-0.962110817432404,-0.0359043404459953\n             ,0.980031192302704,0.0460809320211411,-0.19343064725399,0.704459071159363,-0.709129512310028,0.0295416153967381\n             ,0.456256777048111,-0.889221549034119,-0.0333885848522186,0.699954152107239,-0.637360692024231,-0.322235226631165\n             ,-0.895804762840271,0.195414647459984,-0.399182796478271,-0.886481404304504,0.177040040493011,-0.427559942007065\n             ,0.0356707610189915,0.684221625328064,-0.728401243686676,0.0514887571334839,0.63036984205246,-0.774585545063019\n             ,-0.78797847032547,0.121628470718861,-0.603569746017456,0.085333488881588,0.746294617652893,-0.66012316942215\n             ,0.0356707610189915,0.684221625328064,-0.728401243686676,-0.886481404304504,0.177040040493011,-0.427559942007065\n             ,-0.571970641613007,0.0312801524996758,-0.819677472114563,0.0719250813126564,0.846214592456818,-0.527965605258942\n             ,0.085333488881588,0.746294617652893,-0.66012316942215,-0.78797847032547,0.121628470718861,-0.603569746017456\n             ,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.0788121968507767,0.901525676250458,-0.425488084554672\n             ,0.0719250813126564,0.846214592456818,-0.527965605258942,-0.571970641613007,0.0312801524996758,-0.819677472114563\n             ,-0.777539730072021,-0.479580640792847,-0.406736254692078,-0.83249443769455,-0.151082009077072,-0.53303587436676\n             ,0.207446232438087,0.064531996846199,-0.976115584373474,0.337681114673615,-0.494108825922012,-0.801141619682312\n             ,-0.693842947483063,0.221263691782951,-0.685291409492493,-0.895804762840271,0.195414647459984,-0.399182796478271\n             ,0.0514887571334839,0.63036984205246,-0.774585545063019,0.13019335269928,0.440476208925247,-0.88827383518219\n             ,0.533322811126709,0.362958133220673,-0.764086484909058,0.536711633205414,0.454791337251663,-0.710707724094391\n             ,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.541287541389465,0.6014044880867,-0.587639689445496\n             ,0.416003495454788,0.214769378304482,-0.883637487888336,0.533322811126709,0.362958133220673,-0.764086484909058\n             ,-0.541287541389465,0.6014044880867,-0.587639689445496,-0.492161601781845,0.702208459377289,-0.514470815658569\n             ,0.121472798287869,0.0532773099839687,-0.991163909435272,0.416003495454788,0.214769378304482,-0.883637487888336\n             ,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.31574621796608,0.845299959182739,-0.431013107299805\n             ,-0.266431421041489,-0.0175891108810902,-0.963693380355835,0.121472798287869,0.0532773099839687,-0.991163909435272\n             ,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.0788121968507767,0.901525676250458,-0.425488084554672\n             ,0.536711633205414,0.454791337251663,-0.710707724094391,0.185644999146461,0.47002848982811,-0.862907350063324\n             ,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.570469677448273,0.551836013793945,-0.608310282230377\n             ,0.540148317813873,0.0994915440678597,-0.83566814661026,-0.643028497695923,0.0408206768333912,-0.764753520488739\n             ,-0.622039020061493,0.415303826332092,-0.663769662380219,0.185644999146461,0.47002848982811,-0.862907350063324\n             ,0.540148317813873,0.0994915440678597,-0.83566814661026,0.639358460903168,-0.369733929634094,-0.674179136753082\n             ,-0.564797222614288,-0.561120748519897,-0.60510128736496,-0.643028497695923,0.0408206768333912,-0.764753520488739\n             ,-0.598017156124115,-0.77135694026947,0.217678472399712,0.50339812040329,-0.851142287254334,0.148819401860237\n             ,0.54979944229126,-0.796860158443451,0.250468462705612,-0.552583634853363,-0.801110625267029,0.229941442608833\n             ,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.552583634853363,-0.801110625267029,0.229941442608833\n             ,0.54979944229126,-0.796860158443451,0.250468462705612,0.599540710449219,-0.652058064937592,0.464081108570099\n             ,-0.292398482561111,-0.949960827827454,0.109898090362549,-0.446152657270432,-0.869331896305084,0.212626039981842\n             ,0.599540710449219,-0.652058064937592,0.464081108570099,0.502160549163818,-0.455849409103394,0.734871506690979\n             ,-0.058585699647665,-0.997730076313019,-0.0332027748227119,-0.292398482561111,-0.949960827827454,0.109898090362549\n             ,0.502160549163818,-0.455849409103394,0.734871506690979,0.272433400154114,-0.386231541633606,0.88125205039978\n             ,-0.777539730072021,-0.479580640792847,-0.406736254692078,0.337681114673615,-0.494108825922012,-0.801141619682312\n             ,0.442046135663986,-0.813259184360504,-0.378423988819122,-0.682462215423584,-0.715959310531616,-0.147131323814392\n             ,-0.356896013021469,-0.932965517044067,0.0469101071357727,0.49251726269722,-0.867295384407043,-0.0722877904772758\n             ,0.50339812040329,-0.851142287254334,0.148819401860237,-0.598017156124115,-0.77135694026947,0.217678472399712\n             ,0.626312613487244,-0.775286138057709,0.0816323310136795,-0.426157087087631,-0.793524503707886,0.434406518936157\n             ,-0.375613301992416,-0.88097071647644,0.287758976221085,0.704459071159363,-0.709129512310028,0.0295416153967381\n             ,0.515369713306427,-0.855204403400421,0.0549497418105602,-0.342554897069931,-0.642882287502289,0.685097455978394\n             ,-0.426157087087631,-0.793524503707886,0.434406518936157,0.626312613487244,-0.775286138057709,0.0816323310136795\n             ,0.270284384489059,-0.962110817432404,-0.0359043404459953,-0.0474530011415482,-0.461726039648056,0.885752379894257\n             ,-0.342554897069931,-0.642882287502289,0.685097455978394,0.515369713306427,-0.855204403400421,0.0549497418105602\n             ,0.270284384489059,-0.962110817432404,-0.0359043404459953,-0.058585699647665,-0.997730076313019,-0.0332027748227119\n             ,0.272433400154114,-0.386231541633606,0.88125205039978,-0.0474530011415482,-0.461726039648056,0.885752379894257\n             ,0.704459071159363,-0.709129512310028,0.0295416153967381,-0.375613301992416,-0.88097071647644,0.287758976221085\n             ,-0.376423895359039,-0.918147921562195,0.123731203377247,0.456256777048111,-0.889221549034119,-0.0333885848522186\n             ,0.456256777048111,-0.889221549034119,-0.0333885848522186,-0.376423895359039,-0.918147921562195,0.123731203377247\n             ,-0.438194215297699,-0.882848083972931,-0.169011920690537,0.699954152107239,-0.637360692024231,-0.322235226631165\n             ,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.438194215297699,-0.882848083972931,-0.169011920690537\n             ,-0.564797222614288,-0.561120748519897,-0.60510128736496,0.639358460903168,-0.369733929634094,-0.674179136753082\n             ,-0.83249443769455,-0.151082009077072,-0.53303587436676,-0.693842947483063,0.221263691782951,-0.685291409492493\n             ,0.13019335269928,0.440476208925247,-0.88827383518219,0.207446232438087,0.064531996846199,-0.976115584373474\n             ,-0.682462215423584,-0.715959310531616,-0.147131323814392,0.442046135663986,-0.813259184360504,-0.378423988819122\n             ,0.49251726269722,-0.867295384407043,-0.0722877904772758,-0.356896013021469,-0.932965517044067,0.0469101071357727\n             ,0.0514887571334839,0.63036984205246,-0.774585545063019,0.0356707610189915,0.684221625328064,-0.728401243686676\n             ,0.739788413047791,0.545380234718323,-0.394047558307648,0.761568784713745,0.476597040891647,-0.439167678356171\n             ,0.739788413047791,0.545380234718323,-0.394047558307648,0.0356707610189915,0.684221625328064,-0.728401243686676\n             ,0.085333488881588,0.746294617652893,-0.66012316942215,0.704140186309814,0.675374627113342,-0.21921606361866\n             ,0.085333488881588,0.746294617652893,-0.66012316942215,0.0719250813126564,0.846214592456818,-0.527965605258942\n             ,0.521775901317596,0.845166563987732,0.11594570428133,0.704140186309814,0.675374627113342,-0.21921606361866,0.521775901317596\n             ,0.845166563987732,0.11594570428133,0.0719250813126564,0.846214592456818,-0.527965605258942,-0.0788121968507767\n             ,0.901525676250458,-0.425488084554672,0.117615856230259,0.926379323005676,0.357753992080688,0.337681114673615\n             ,-0.494108825922012,-0.801141619682312,0.207446232438087,0.064531996846199,-0.976115584373474,0.886798441410065\n             ,0.179963767528534,-0.42567777633667,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.80961799621582\n             ,0.346472293138504,-0.473788559436798,0.13019335269928,0.440476208925247,-0.88827383518219,0.0514887571334839\n             ,0.63036984205246,-0.774585545063019,0.761568784713745,0.476597040891647,-0.439167678356171,-0.541287541389465\n             ,0.6014044880867,-0.587639689445496,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.966457307338715\n             ,0.233678236603737,-0.106558948755264,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.492161601781845\n             ,0.702208459377289,-0.514470815658569,-0.541287541389465,0.6014044880867,-0.587639689445496,-0.935190379619598\n             ,0.351279079914093,-0.0449664331972599,-0.804790914058685,0.576125860214233,0.142795518040657,-0.31574621796608\n             ,0.845299959182739,-0.431013107299805,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.804790914058685\n             ,0.576125860214233,0.142795518040657,-0.422390103340149,0.834542691707611,0.353730261325836,-0.0788121968507767\n             ,0.901525676250458,-0.425488084554672,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.422390103340149\n             ,0.834542691707611,0.353730261325836,0.117615856230259,0.926379323005676,0.357753992080688,-0.570469677448273\n             ,0.551836013793945,-0.608310282230377,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.982214033603668\n             ,0.1461341381073,-0.117899678647518,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.622039020061493\n             ,0.415303826332092,-0.663769662380219,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.997464418411255\n             ,-0.00418218318372965,-0.0710434541106224,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.997464418411255\n             ,-0.00418218318372965,-0.0710434541106224,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.564797222614288\n             ,-0.561120748519897,-0.60510128736496,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.97841340303421\n             ,-0.195419549942017,0.0672191828489304,0.54979944229126,-0.796860158443451,0.250468462705612,0.50339812040329\n             ,-0.851142287254334,0.148819401860237,0.971711337566376,-0.234630659222603,-0.0269353967159987,0.952633321285248\n             ,0.0169839523732662,0.303646683692932,0.599540710449219,-0.652058064937592,0.464081108570099,0.54979944229126\n             ,-0.796860158443451,0.250468462705612,0.97841340303421,-0.195419549942017,0.0672191828489304,0.707790434360504\n             ,0.336065679788589,0.621363461017609,0.502160549163818,-0.455849409103394,0.734871506690979,0.599540710449219\n             ,-0.652058064937592,0.464081108570099,0.952633321285248,0.0169839523732662,0.303646683692932,0.272433400154114\n             ,-0.386231541633606,0.88125205039978,0.502160549163818,-0.455849409103394,0.734871506690979,0.707790434360504\n             ,0.336065679788589,0.621363461017609,0.29783770442009,0.470342755317688,0.830704748630524,0.96403831243515,-0.105999603867531\n             ,-0.243709176778793,0.442046135663986,-0.813259184360504,-0.378423988819122,0.337681114673615,-0.494108825922012\n             ,-0.801141619682312,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.50339812040329,-0.851142287254334\n             ,0.148819401860237,0.49251726269722,-0.867295384407043,-0.0722877904772758,0.965696275234222,-0.217926412820816\n             ,-0.141204699873924,0.971711337566376,-0.234630659222603,-0.0269353967159987,-0.375613301992416,-0.88097071647644\n             ,0.287758976221085,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.854402720928192,-0.324486047029495\n             ,0.405838370323181,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.854402720928192,-0.324486047029495\n             ,0.405838370323181,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.342554897069931,-0.642882287502289\n             ,0.685097455978394,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.342554897069931,-0.642882287502289\n             ,0.685097455978394,-0.0474530011415482,-0.461726039648056,0.885752379894257,-0.24900957942009,0.325979948043823\n             ,0.911993026733398,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.0474530011415482,-0.461726039648056\n             ,0.885752379894257,0.272433400154114,-0.386231541633606,0.88125205039978,0.29783770442009,0.470342755317688,0.830704748630524\n             ,-0.24900957942009,0.325979948043823,0.911993026733398,-0.900646984577179,-0.388538599014282,0.194609254598618\n             ,-0.376423895359039,-0.918147921562195,0.123731203377247,-0.375613301992416,-0.88097071647644,0.287758976221085\n             ,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.951126158237457,-0.290162175893784,0.105663880705833\n             ,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.376423895359039,-0.918147921562195,0.123731203377247\n             ,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.564797222614288,-0.561120748519897,-0.60510128736496\n             ,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.951126158237457,-0.290162175893784,0.105663880705833\n             ,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.886798441410065,0.179963767528534,-0.42567777633667\n             ,0.207446232438087,0.064531996846199,-0.976115584373474,0.13019335269928,0.440476208925247,-0.88827383518219\n             ,0.80961799621582,0.346472293138504,-0.473788559436798,0.49251726269722,-0.867295384407043,-0.0722877904772758\n             ,0.442046135663986,-0.813259184360504,-0.378423988819122,0.96403831243515,-0.105999603867531,-0.243709176778793\n             ,0.965696275234222,-0.217926412820816,-0.141204699873924,0.962221920490265,0.251950919628143,-0.103197492659092\n             ,0.872992157936096,0.465613692998886,-0.145219102501869,0.866116344928741,0.494782358407974,-0.0709430351853371\n             ,0.958588719367981,0.282198518514633,-0.0383618138730526,0.958588719367981,0.282198518514633,-0.0383618138730526\n             ,0.932084560394287,0.354396849870682,0.074974812567234,0.952685952186584,0.144979014992714,0.267152786254883\n             ,0.96112471818924,0.0701063796877861,0.267066121101379,0.861002922058105,0.508596777915955,-0.00179798470344394\n             ,0.932084560394287,0.354396849870682,0.074974812567234,0.958588719367981,0.282198518514633,-0.0383618138730526\n             ,0.866116344928741,0.494782358407974,-0.0709430351853371,0.971478760242462,0.187488585710526,-0.145179286599159\n             ,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.886798441410065,0.179963767528534,-0.42567777633667\n             ,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.819937765598297,-0.00659000594168901,0.572414755821228\n             ,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.942662239074707,-0.0168870743364096,0.333320766687393\n             ,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.997464418411255,-0.00418218318372965,-0.0710434541106224\n             ,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.997464418411255,-0.00418218318372965,-0.0710434541106224\n             ,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.971478760242462,0.187488585710526,-0.145179286599159\n             ,0.96403831243515,-0.105999603867531,-0.243709176778793,0.905734241008759,-0.0415820777416229,-0.421801388263702\n             ,-0.867211997509003,0.495593756437302,0.048272043466568,-0.92325884103775,0.354574739933014,0.14788456261158\n             ,-0.894310534000397,0.387115389108658,0.224388927221298,-0.96901535987854,0.136607885360718,0.205785036087036\n             ,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.900646984577179,-0.388538599014282,0.194609254598618\n             ,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.972556948661804,-0.221615761518478,-0.070847675204277\n             ,-0.951126158237457,-0.290162175893784,0.105663880705833,0.886798441410065,0.179963767528534,-0.42567777633667\n             ,0.80961799621582,0.346472293138504,-0.473788559436798,0.980856955051422,0.194233074784279,-0.0138955730944872\n             ,0.945276021957397,0.311139762401581,-0.0982102602720261,0.965696275234222,-0.217926412820816,-0.141204699873924\n             ,0.96403831243515,-0.105999603867531,-0.243709176778793,0.980031192302704,0.0460809320211411,-0.19343064725399\n             ,0.639358460903168,-0.369733929634094,-0.674179136753082,0.540148317813873,0.0994915440678597,-0.83566814661026\n             ,0.639358460903168,-0.369733929634094,-0.674179136753082,0.980031192302704,0.0460809320211411,-0.19343064725399\n             ,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.682462215423584,-0.715959310531616,-0.147131323814392\n             ,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.777539730072021,-0.479580640792847,-0.406736254692078\n             ,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.83249443769455,-0.151082009077072,-0.53303587436676\n             ,-0.777539730072021,-0.479580640792847,-0.406736254692078,0.924136519432068,-0.0825216323137283,0.373044043779373\n             ,0.96112471818924,0.0701063796877861,0.267066121101379,0.952685952186584,0.144979014992714,0.267152786254883\n             ,0.866116344928741,0.494782358407974,-0.0709430351853371,0.77119505405426,0.619837582111359,-0.14511901140213\n             ,0.861002922058105,0.508596777915955,-0.00179798470344394,0.220404133200645,0.441583395004272,-0.869727611541748\n             ,0.345912396907806,0.450473189353943,-0.823054373264313,0.499523967504501,-0.410259157419205,-0.762996256351471\n             ,0.291362255811691,-0.415095657110214,-0.861860573291779,0.345912396907806,0.450473189353943,-0.823054373264313\n             ,0.596955060958862,0.477591276168823,-0.644632637500763,0.719791650772095,-0.389199703931808,-0.574824810028076\n             ,0.499523967504501,-0.410259157419205,-0.762996256351471,0.596955060958862,0.477591276168823,-0.644632637500763\n             ,0.801617920398712,0.503292322158813,-0.322653979063034,0.89153379201889,-0.356688916683197,-0.279178351163864\n             ,0.719791650772095,-0.389199703931808,-0.574824810028076,0.801617920398712,0.503292322158813,-0.322653979063034\n             ,0.856007039546967,0.515455603599548,0.039463996887207,0.93902975320816,-0.33998966217041,0.0512847155332565\n             ,0.89153379201889,-0.356688916683197,-0.279178351163864,0.531617403030396,0.581484317779541,-0.615840017795563\n             ,0.596955060958862,0.477591276168823,-0.644632637500763,0.345912396907806,0.450473189353943,-0.823054373264313\n             ,0.28382807970047,0.520071446895599,-0.805585086345673,0.709659159183502,0.635841906070709,-0.303461521863937\n             ,0.801617920398712,0.503292322158813,-0.322653979063034,0.596955060958862,0.477591276168823,-0.644632637500763\n             ,0.531617403030396,0.581484317779541,-0.615840017795563,0.755816400051117,0.653946995735168,0.0330889187753201\n             ,0.856007039546967,0.515455603599548,0.039463996887207,0.801617920398712,0.503292322158813,-0.322653979063034\n             ,0.709659159183502,0.635841906070709,-0.303461521863937,0.238343358039856,0.387237757444382,-0.890639841556549\n             ,0.568823277950287,-0.359092324972153,-0.739927589893341,0.49908322095871,-0.0296989660710096,-0.866044998168945\n             ,0.249522879719734,0.613189935684204,-0.749490737915039,0.528623342514038,0.140339240431786,-0.837175190448761\n             ,0.64734548330307,0.346664369106293,-0.678798675537109,0.531617403030396,0.581484317779541,-0.615840017795563\n             ,0.28382807970047,0.520071446895599,-0.805585086345673,0.64734548330307,0.346664369106293,-0.678798675537109\n             ,0.815433382987976,0.474987715482712,-0.330839991569519,0.709659159183502,0.635841906070709,-0.303461521863937\n             ,0.531617403030396,0.581484317779541,-0.615840017795563,0.815433382987976,0.474987715482712,-0.330839991569519\n             ,0.855934202671051,0.515577018260956,0.0394590422511101,0.755816400051117,0.653946995735168,0.0330889187753201\n             ,0.709659159183502,0.635841906070709,-0.303461521863937,0.495009750127792,0.455467730760574,-0.739942193031311\n             ,0.532988548278809,0.496355772018433,-0.685240209102631,0.64734548330307,0.346664369106293,-0.678798675537109\n             ,0.528623342514038,0.140339240431786,-0.837175190448761,0.532988548278809,0.496355772018433,-0.685240209102631\n             ,0.672445952892303,0.657832205295563,-0.339224457740784,0.815433382987976,0.474987715482712,-0.330839991569519\n             ,0.64734548330307,0.346664369106293,-0.678798675537109,0.672445952892303,0.657832205295563,-0.339224457740784\n             ,0.702748596668243,0.710811495780945,0.0298582091927528,0.855934202671051,0.515577018260956,0.0394590422511101\n             ,0.815433382987976,0.474987715482712,-0.330839991569519,0.0635582432150841,-0.298091143369675,-0.952418982982636\n             ,-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.568823277950287,-0.359092324972153,-0.739927589893341\n             ,0.238343358039856,0.387237757444382,-0.890639841556549,0.291362255811691,-0.415095657110214,-0.861860573291779\n             ,0.0635582432150841,-0.298091143369675,-0.952418982982636,0.238343358039856,0.387237757444382,-0.890639841556549\n             ,0.220404133200645,0.441583395004272,-0.869727611541748,0.28382807970047,0.520071446895599,-0.805585086345673\n             ,0.345912396907806,0.450473189353943,-0.823054373264313,0.220404133200645,0.441583395004272,-0.869727611541748\n             ,0.249522879719734,0.613189935684204,-0.749490737915039,0.49908322095871,-0.0296989660710096,-0.866044998168945\n             ,0.528623342514038,0.140339240431786,-0.837175190448761,0.28382807970047,0.520071446895599,-0.805585086345673\n             ,0.249522879719734,0.613189935684204,-0.749490737915039,0.531679213047028,-0.524689078330994,-0.664844751358032\n             ,0.122271165251732,0.0883934944868088,-0.988552689552307,0.449340283870697,0.427763402462006,-0.784290611743927\n             ,0.623004376888275,-0.00750839477404952,-0.782182335853577,0.491910099983215,0.172478601336479,-0.853390634059906\n             ,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.366778641939163,0.448393434286118,-0.815117657184601\n             ,0.497087746858597,0.30063185095787,-0.813955903053284,-0.358708292245865,0.679778933525085,-0.639710068702698\n             ,0.511581122875214,0.562213659286499,-0.64976966381073,0.497087746858597,0.30063185095787,-0.813955903053284\n             ,-0.366778641939163,0.448393434286118,-0.815117657184601,-0.345371842384338,0.869300365447998,-0.353603094816208\n             ,0.516282200813293,0.786112189292908,-0.339823931455612,0.511581122875214,0.562213659286499,-0.64976966381073\n             ,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.349057763814926,0.936734259128571,-0.0262219123542309\n             ,0.506098926067352,0.862278997898102,0.0184080004692078,0.516282200813293,0.786112189292908,-0.339823931455612\n             ,-0.345371842384338,0.869300365447998,-0.353603094816208,0.614878416061401,0.498528629541397,-0.611059486865997\n             ,0.567450106143951,0.238805204629898,-0.788018047809601,0.497087746858597,0.30063185095787,-0.813955903053284\n             ,0.511581122875214,0.562213659286499,-0.64976966381073,0.64806866645813,0.696889817714691,-0.307167142629623\n             ,0.614878416061401,0.498528629541397,-0.611059486865997,0.511581122875214,0.562213659286499,-0.64976966381073\n             ,0.516282200813293,0.786112189292908,-0.339823931455612,0.645423412322998,0.763367056846619,0.0264460854232311\n             ,0.64806866645813,0.696889817714691,-0.307167142629623,0.516282200813293,0.786112189292908,-0.339823931455612\n             ,0.506098926067352,0.862278997898102,0.0184080004692078,0.0124354995787144,0.454871088266373,-0.890470445156097\n             ,-0.348750114440918,0.540946424007416,-0.765343248844147,0.368004411458969,0.153596758842468,-0.917050004005432\n             ,0.655558884143829,0.209355428814888,-0.725543141365051,0.614878416061401,0.498528629541397,-0.611059486865997\n             ,0.383456945419312,0.608026206493378,-0.695172548294067,0.186724796891212,0.483126193284988,-0.855408072471619\n             ,0.567450106143951,0.238805204629898,-0.788018047809601,0.64806866645813,0.696889817714691,-0.307167142629623\n             ,0.488431423902512,0.799107253551483,-0.350517243146896,0.383456945419312,0.608026206493378,-0.695172548294067\n             ,0.614878416061401,0.498528629541397,-0.611059486865997,0.645423412322998,0.763367056846619,0.0264460854232311\n             ,0.506222486495972,0.862206280231476,0.0184154994785786,0.488431423902512,0.799107253551483,-0.350517243146896\n             ,0.64806866645813,0.696889817714691,-0.307167142629623,0.383456945419312,0.608026206493378,-0.695172548294067\n             ,0.532988548278809,0.496355772018433,-0.685240209102631,0.495009750127792,0.455467730760574,-0.739942193031311\n             ,0.186724796891212,0.483126193284988,-0.855408072471619,0.488431423902512,0.799107253551483,-0.350517243146896\n             ,0.672445952892303,0.657832205295563,-0.339224457740784,0.532988548278809,0.496355772018433,-0.685240209102631\n             ,0.383456945419312,0.608026206493378,-0.695172548294067,0.506222486495972,0.862206280231476,0.0184154994785786\n             ,0.702748596668243,0.710811495780945,0.0298582091927528,0.672445952892303,0.657832205295563,-0.339224457740784\n             ,0.488431423902512,0.799107253551483,-0.350517243146896,-0.57543957233429,0.0254972595721483,-0.817446708679199\n             ,-0.559110403060913,0.469017684459686,-0.683679699897766,0.122271165251732,0.0883934944868088,-0.988552689552307\n             ,-0.247235804796219,-0.304136991500854,-0.919986486434937,-0.286835759878159,0.0198002532124519,-0.957775115966797\n             ,-0.128493547439575,-0.169293120503426,-0.977153658866882,0.368004411458969,0.153596758842468,-0.917050004005432\n             ,-0.348750114440918,0.540946424007416,-0.765343248844147,0.368004411458969,0.153596758842468,-0.917050004005432\n             ,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.36416107416153,0.234637573361397,-0.901294589042664\n             ,0.491910099983215,0.172478601336479,-0.853390634059906,0.567450106143951,0.238805204629898,-0.788018047809601\n             ,0.655558884143829,0.209355428814888,-0.725543141365051,0.491910099983215,0.172478601336479,-0.853390634059906\n             ,0.497087746858597,0.30063185095787,-0.813955903053284,0.567450106143951,0.238805204629898,-0.788018047809601\n             ,0.186724796891212,0.483126193284988,-0.855408072471619,0.0124354995787144,0.454871088266373,-0.890470445156097\n             ,0.655558884143829,0.209355428814888,-0.725543141365051,0.449340283870697,0.427763402462006,-0.784290611743927\n             ,0.122271165251732,0.0883934944868088,-0.988552689552307,-0.559110403060913,0.469017684459686,-0.683679699897766\n             ,-0.0200252141803503,0.64056408405304,-0.767643511295319,-0.143515676259995,-0.203022330999374,-0.968599617481232\n             ,0.508907198905945,-0.553594052791595,-0.659201860427856,-0.0507657080888748,-0.284880071878433,-0.957217931747437\n             ,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.143515676259995,-0.203022330999374,-0.968599617481232\n             ,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.128973305225372,-0.305629998445511,-0.943374931812286\n             ,-0.286835759878159,0.0198002532124519,-0.957775115966797,0.623004376888275,-0.00750839477404952,-0.782182335853577\n             ,0.755403220653534,-0.0362841933965683,-0.654254853725433,0.566836953163147,-0.543319463729858,-0.619273662567139\n             ,0.531679213047028,-0.524689078330994,-0.664844751358032,0.623004376888275,-0.00750839477404952,-0.782182335853577\n             ,0.449340283870697,0.427763402462006,-0.784290611743927,0.614906549453735,0.590024650096893,-0.523221671581268\n             ,0.755403220653534,-0.0362841933965683,-0.654254853725433,-0.0200252141803503,0.64056408405304,-0.767643511295319\n             ,-0.0195061750710011,0.763988316059113,-0.644935190677643,0.614906549453735,0.590024650096893,-0.523221671581268\n             ,0.449340283870697,0.427763402462006,-0.784290611743927,-0.0200252141803503,0.64056408405304,-0.767643511295319\n             ,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.619978547096252,0.568114936351776,-0.541176497936249\n             ,-0.0195061750710011,0.763988316059113,-0.644935190677643,-0.57543957233429,0.0254972595721483,-0.817446708679199\n             ,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.348750114440918,0.540946424007416,-0.765343248844147\n             ,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.57543957233429,0.0254972595721483,-0.817446708679199\n             ,-0.247235804796219,-0.304136991500854,-0.919986486434937,-0.143515676259995,-0.203022330999374,-0.968599617481232\n             ,-0.286835759878159,0.0198002532124519,-0.957775115966797,0.627847135066986,-0.674039661884308,-0.389202296733856\n             ,0.531679213047028,-0.524689078330994,-0.664844751358032,0.568823277950287,-0.359092324972153,-0.739927589893341\n             ,0.508907198905945,-0.553594052791595,-0.659201860427856,0.755403220653534,-0.0362841933965683,-0.654254853725433\n             ,0.528623342514038,0.140339240431786,-0.837175190448761,0.49908322095871,-0.0296989660710096,-0.866044998168945\n             ,0.566836953163147,-0.543319463729858,-0.619273662567139,0.495009750127792,0.455467730760574,-0.739942193031311\n             ,0.528623342514038,0.140339240431786,-0.837175190448761,0.755403220653534,-0.0362841933965683,-0.654254853725433\n             ,0.614906549453735,0.590024650096893,-0.523221671581268,0.0124354995787144,0.454871088266373,-0.890470445156097\n             ,0.186724796891212,0.483126193284988,-0.855408072471619,-0.0195061750710011,0.763988316059113,-0.644935190677643\n             ,-0.619978547096252,0.568114936351776,-0.541176497936249,-0.0195061750710011,0.763988316059113,-0.644935190677643\n             ,0.186724796891212,0.483126193284988,-0.855408072471619,0.495009750127792,0.455467730760574,-0.739942193031311\n             ,0.614906549453735,0.590024650096893,-0.523221671581268,0.130445152521133,0.457035809755325,0.879830837249756\n             ,0.20105354487896,-0.399605453014374,0.894367337226868,0.418255031108856,-0.396321922540665,0.817307531833649\n             ,0.260075956583023,0.465220808982849,0.84612649679184,0.656683743000031,-0.378395289182663,0.652367532253265\n             ,0.528121531009674,0.489418476819992,0.693943202495575,0.260075956583023,0.465220808982849,0.84612649679184,0.418255031108856\n             ,-0.396321922540665,0.817307531833649,0.857872784137726,-0.350929707288742,0.375369966030121,0.76475590467453\n             ,0.509621679782867,0.39425140619278,0.528121531009674,0.489418476819992,0.693943202495575,0.656683743000031,-0.378395289182663\n             ,0.652367532253265,0.93902975320816,-0.33998966217041,0.0512847155332565,0.856007039546967,0.515455603599548\n             ,0.039463996887207,0.76475590467453,0.509621679782867,0.39425140619278,0.857872784137726,-0.350929707288742,0.375369966030121\n             ,0.466174960136414,0.592728853225708,0.656774938106537,0.200175419449806,0.534444093704224,0.821157276630402\n             ,0.260075956583023,0.465220808982849,0.84612649679184,0.528121531009674,0.489418476819992,0.693943202495575,0.675370097160339\n             ,0.64173036813736,0.363397032022476,0.466174960136414,0.592728853225708,0.656774938106537,0.528121531009674,0.489418476819992\n             ,0.693943202495575,0.76475590467453,0.509621679782867,0.39425140619278,0.755816400051117,0.653946995735168,0.0330889187753201\n             ,0.675370097160339,0.64173036813736,0.363397032022476,0.76475590467453,0.509621679782867,0.39425140619278,0.856007039546967\n             ,0.515455603599548,0.039463996887207,0.407602995634079,-0.0139898108318448,0.913052082061768,0.505278706550598\n             ,-0.368258208036423,0.78043532371521,0.111461341381073,0.330251514911652,0.937288820743561,0.17189884185791,0.626526415348053\n             ,0.760207533836365,0.466174960136414,0.592728853225708,0.656774938106537,0.574624836444855,0.359153598546982\n             ,0.735401213169098,0.440102815628052,0.155542016029358,0.884373366832733,0.200175419449806,0.534444093704224\n             ,0.821157276630402,0.675370097160339,0.64173036813736,0.363397032022476,0.777630627155304,0.481480687856674,0.404310435056686\n             ,0.574624836444855,0.359153598546982,0.735401213169098,0.466174960136414,0.592728853225708,0.656774938106537\n             ,0.755816400051117,0.653946995735168,0.0330889187753201,0.855934202671051,0.515577018260956,0.0394590422511101\n             ,0.777630627155304,0.481480687856674,0.404310435056686,0.675370097160339,0.64173036813736,0.363397032022476,0.574624836444855\n             ,0.359153598546982,0.735401213169098,0.460348039865494,0.508830428123474,0.727441608905792,0.416925370693207\n             ,0.468881458044052,0.778667747974396,0.440102815628052,0.155542016029358,0.884373366832733,0.777630627155304\n             ,0.481480687856674,0.404310435056686,0.634704053401947,0.664313793182373,0.394763141870499,0.460348039865494\n             ,0.508830428123474,0.727441608905792,0.574624836444855,0.359153598546982,0.735401213169098,0.855934202671051\n             ,0.515577018260956,0.0394590422511101,0.702748596668243,0.710811495780945,0.0298582091927528,0.634704053401947\n             ,0.664313793182373,0.394763141870499,0.777630627155304,0.481480687856674,0.404310435056686,-0.00422305008396506\n             ,-0.606499910354614,0.795072376728058,0.434695482254028,-0.572132110595703,0.695488810539246,0.014976161532104\n             ,0.0756698846817017,0.997020423412323,-0.341256439685822,-0.287500321865082,0.894923210144043,0.111461341381073\n             ,0.330251514911652,0.937288820743561,0.505278706550598,-0.368258208036423,0.78043532371521,-0.0179628469049931\n             ,-0.326483070850372,0.945032358169556,-0.208328202366829,-0.172579661011696,0.962712645530701,0.20105354487896\n             ,-0.399605453014374,0.894367337226868,0.130445152521133,0.457035809755325,0.879830837249756,0.111461341381073\n             ,0.330251514911652,0.937288820743561,-0.0351529642939568,-0.352832555770874,0.935025930404663,0.200175419449806\n             ,0.534444093704224,0.821157276630402,0.17189884185791,0.626526415348053,0.760207533836365,0.130445152521133,0.457035809755325\n             ,0.879830837249756,0.260075956583023,0.465220808982849,0.84612649679184,0.200175419449806,0.534444093704224,0.821157276630402\n             ,0.440102815628052,0.155542016029358,0.884373366832733,0.407602995634079,-0.0139898108318448,0.913052082061768\n             ,0.17189884185791,0.626526415348053,0.760207533836365,0.368747025728226,0.423022657632828,0.827694058418274,0.014976161532104\n             ,0.0756698846817017,0.997020423412323,0.434695482254028,-0.572132110595703,0.695488810539246,0.589323878288269\n             ,-0.0393206179141998,0.806939482688904,0.401947200298309,0.187930881977081,0.896169900894165,0.411258369684219\n             ,0.315371930599213,0.855223417282104,-0.448035717010498,0.462348014116287,0.765178620815277,-0.454463303089142\n             ,0.250147342681885,0.85492068529129,0.411258369684219,0.315371930599213,0.855223417282104,0.442751318216324,0.574035108089447\n             ,0.688806891441345,-0.42182531952858,0.69061017036438,0.587470054626465,-0.448035717010498,0.462348014116287\n             ,0.765178620815277,0.442751318216324,0.574035108089447,0.688806891441345,0.479419261217117,0.792443513870239\n             ,0.377081513404846,-0.37904354929924,0.875075936317444,0.300945341587067,-0.42182531952858,0.69061017036438,0.587470054626465\n             ,0.479419261217117,0.792443513870239,0.377081513404846,0.506098926067352,0.862278997898102,0.0184080004692078\n             ,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.37904354929924,0.875075936317444,0.300945341587067\n             ,0.549417436122894,0.509770929813385,0.662022709846497,0.442751318216324,0.574035108089447,0.688806891441345\n             ,0.411258369684219,0.315371930599213,0.855223417282104,0.483853906393051,0.253162741661072,0.83773148059845,0.613779723644257\n             ,0.702778577804565,0.359689712524414,0.479419261217117,0.792443513870239,0.377081513404846,0.442751318216324\n             ,0.574035108089447,0.688806891441345,0.549417436122894,0.509770929813385,0.662022709846497,0.645423412322998\n             ,0.763367056846619,0.0264460854232311,0.506098926067352,0.862278997898102,0.0184080004692078,0.479419261217117\n             ,0.792443513870239,0.377081513404846,0.613779723644257,0.702778577804565,0.359689712524414,0.27214840054512,0.170062497258186\n             ,0.947108268737793,-0.424899607896805,0.554023623466492,0.715903759002686,-0.0785331204533577,0.470493257045746\n             ,0.878901958465576,0.577877700328827,0.222700744867325,0.785150766372681,0.0984512493014336,0.498287439346313\n             ,0.861404061317444,0.310688972473145,0.620523273944855,0.720016121864319,0.549417436122894,0.509770929813385\n             ,0.662022709846497,0.483853906393051,0.253162741661072,0.83773148059845,0.310688972473145,0.620523273944855,0.720016121864319\n             ,0.450630962848663,0.805599272251129,0.384631723165512,0.613779723644257,0.702778577804565,0.359689712524414\n             ,0.549417436122894,0.509770929813385,0.662022709846497,0.450630962848663,0.805599272251129,0.384631723165512\n             ,0.506222486495972,0.862206280231476,0.0184154994785786,0.645423412322998,0.763367056846619,0.0264460854232311\n             ,0.613779723644257,0.702778577804565,0.359689712524414,0.416925370693207,0.468881458044052,0.778667747974396\n             ,0.460348039865494,0.508830428123474,0.727441608905792,0.310688972473145,0.620523273944855,0.720016121864319\n             ,0.0984512493014336,0.498287439346313,0.861404061317444,0.460348039865494,0.508830428123474,0.727441608905792\n             ,0.634704053401947,0.664313793182373,0.394763141870499,0.450630962848663,0.805599272251129,0.384631723165512\n             ,0.310688972473145,0.620523273944855,0.720016121864319,0.634704053401947,0.664313793182373,0.394763141870499\n             ,0.702748596668243,0.710811495780945,0.0298582091927528,0.506222486495972,0.862206280231476,0.0184154994785786\n             ,0.450630962848663,0.805599272251129,0.384631723165512,-0.656222641468048,0.0393575765192509,0.753540217876434\n             ,-0.341256439685822,-0.287500321865082,0.894923210144043,0.014976161532104,0.0756698846817017,0.997020423412323\n             ,-0.625847578048706,0.480478763580322,0.614373624324799,-0.383537352085114,0.0364017225801945,0.922807693481445\n             ,-0.424899607896805,0.554023623466492,0.715903759002686,0.27214840054512,0.170062497258186,0.947108268737793\n             ,-0.228187650442123,-0.152172490954399,0.961651682853699,0.27214840054512,0.170062497258186,0.947108268737793\n             ,0.401947200298309,0.187930881977081,0.896169900894165,-0.454463303089142,0.250147342681885,0.85492068529129\n             ,-0.408599942922592,0.0173157677054405,0.912549316883087,0.483853906393051,0.253162741661072,0.83773148059845\n             ,0.411258369684219,0.315371930599213,0.855223417282104,0.401947200298309,0.187930881977081,0.896169900894165\n             ,0.577877700328827,0.222700744867325,0.785150766372681,-0.0785331204533577,0.470493257045746,0.878901958465576\n             ,0.0984512493014336,0.498287439346313,0.861404061317444,0.483853906393051,0.253162741661072,0.83773148059845\n             ,0.577877700328827,0.222700744867325,0.785150766372681,-0.625847578048706,0.480478763580322,0.614373624324799\n             ,0.014976161532104,0.0756698846817017,0.997020423412323,0.368747025728226,0.423022657632828,0.827694058418274\n             ,-0.0980732291936874,0.653969585895538,0.750136971473694,-0.343363374471664,-0.172115311026573,0.92329728603363\n             ,-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.354196131229401,-0.301204055547714,0.885336756706238\n             ,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.225328087806702,-0.289088577032089,0.930405855178833\n             ,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.354196131229401,-0.301204055547714,0.885336756706238\n             ,-0.383537352085114,0.0364017225801945,0.922807693481445,0.589323878288269,-0.0393206179141998,0.806939482688904\n             ,0.434695482254028,-0.572132110595703,0.695488810539246,0.535627126693726,-0.624319195747375,0.568620383739471\n             ,0.718368828296661,-0.0318839028477669,0.694931387901306,0.558537840843201,0.599707722663879,0.57304984331131\n             ,0.368747025728226,0.423022657632828,0.827694058418274,0.589323878288269,-0.0393206179141998,0.806939482688904\n             ,0.718368828296661,-0.0318839028477669,0.694931387901306,-0.0980732291936874,0.653969585895538,0.750136971473694\n             ,0.368747025728226,0.423022657632828,0.827694058418274,0.558537840843201,0.599707722663879,0.57304984331131,-0.0848502963781357\n             ,0.77521288394928,0.625975549221039,-0.671684086322784,0.576999366283417,0.464663535356522,-0.625847578048706\n             ,0.480478763580322,0.614373624324799,-0.0980732291936874,0.653969585895538,0.750136971473694,-0.0848502963781357\n             ,0.77521288394928,0.625975549221039,-0.424899607896805,0.554023623466492,0.715903759002686,-0.383537352085114\n             ,0.0364017225801945,0.922807693481445,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.625847578048706\n             ,0.480478763580322,0.614373624324799,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.341256439685822\n             ,-0.287500321865082,0.894923210144043,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.383537352085114\n             ,0.0364017225801945,0.922807693481445,-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.00422305008396506\n             ,-0.606499910354614,0.795072376728058,-0.341256439685822,-0.287500321865082,0.894923210144043,-0.354196131229401\n             ,-0.301204055547714,0.885336756706238,-0.00422305008396506,-0.606499910354614,0.795072376728058,-0.0179628469049931\n             ,-0.326483070850372,0.945032358169556,0.505278706550598,-0.368258208036423,0.78043532371521,0.434695482254028\n             ,-0.572132110595703,0.695488810539246,0.407602995634079,-0.0139898108318448,0.913052082061768,0.440102815628052\n             ,0.155542016029358,0.884373366832733,0.718368828296661,-0.0318839028477669,0.694931387901306,0.535627126693726\n             ,-0.624319195747375,0.568620383739471,0.416925370693207,0.468881458044052,0.778667747974396,0.558537840843201\n             ,0.599707722663879,0.57304984331131,0.718368828296661,-0.0318839028477669,0.694931387901306,0.440102815628052\n             ,0.155542016029358,0.884373366832733,-0.0785331204533577,0.470493257045746,0.878901958465576,-0.671684086322784\n             ,0.576999366283417,0.464663535356522,-0.0848502963781357,0.77521288394928,0.625975549221039,0.0984512493014336\n             ,0.498287439346313,0.861404061317444,0.416925370693207,0.468881458044052,0.778667747974396,0.0984512493014336\n             ,0.498287439346313,0.861404061317444,-0.0848502963781357,0.77521288394928,0.625975549221039,0.558537840843201\n             ,0.599707722663879,0.57304984331131,-0.0911645293235779,-0.702602386474609,0.705718696117401,-0.28100323677063\n             ,-0.703339219093323,0.652955651283264,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.227215021848679\n             ,-0.0811199173331261,0.970460176467896,-0.28100323677063,-0.703339219093323,0.652955651283264,-0.468802720308304\n             ,-0.729726076126099,0.497718721628189,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.431291252374649\n             ,-0.167436838150024,0.88653975725174,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.468802720308304\n             ,-0.729726076126099,0.497718721628189,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.882811486721039\n             ,-0.336694210767746,0.327537626028061,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.6035475730896\n             ,-0.760226249694824,0.240387856960297,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.928562819957733\n             ,-0.368498861789703,-0.0444939211010933,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.68051141500473\n             ,-0.254610985517502,0.687078893184662,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.216712310910225\n             ,-0.169844657182693,0.961347281932831,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.882811486721039\n             ,-0.336694210767746,0.327537626028061,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.52898645401001\n             ,-0.491417169570923,0.691868841648102,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.928562819957733\n             ,-0.368498861789703,-0.0444939211010933,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.674269676208496\n             ,-0.660174071788788,0.330954134464264,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.216712310910225\n             ,-0.169844657182693,0.961347281932831,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.528953433036804\n             ,-0.511403381824493,0.677255392074585,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.528953433036804\n             ,-0.511403381824493,0.677255392074585,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.0911645293235779\n             ,-0.702602386474609,0.705718696117401,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.744288861751556\n             ,-0.234780222177505,0.625229835510254,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.132480919361115\n             ,-0.155877292156219,0.978851914405823,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.202346414327621\n             ,-0.358685582876205,0.911263167858124,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.755199730396271\n             ,-0.445887237787247,0.480476796627045,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.755199730396271\n             ,-0.445887237787247,0.480476796627045,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.34972295165062\n             ,-0.865084648132324,0.359614223241806,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.769146144390106\n             ,-0.596087396144867,0.230421498417854,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.358602106571198\n             ,-0.933434844017029,-0.010197676718235,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.216712310910225\n             ,-0.169844657182693,0.961347281932831,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.291014969348907\n             ,-0.640561819076538,0.71062707901001,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.52898645401001\n             ,-0.491417169570923,0.691868841648102,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.34972295165062\n             ,-0.865084648132324,0.359614223241806,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.674269676208496\n             ,-0.660174071788788,0.330954134464264,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.358602106571198\n             ,-0.933434844017029,-0.010197676718235,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.216712310910225\n             ,-0.169844657182693,0.961347281932831,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.556144297122955\n             ,-0.497788280248642,0.665515065193176,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.556144297122955\n             ,-0.497788280248642,0.665515065193176,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.75330114364624\n             ,-0.0430446080863476,0.656265556812286,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.199148803949356\n             ,-0.719600260257721,-0.665218114852905,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.107617132365704\n             ,-0.122167520225048,-0.986657798290253,-0.199148803949356,-0.719600260257721,-0.665218114852905,-0.319179713726044\n             ,-0.172680079936981,-0.931829333305359,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.415939480066299\n             ,-0.73881071805954,-0.530238687992096,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.415939480066299\n             ,-0.73881071805954,-0.530238687992096,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.846806704998016\n             ,-0.342166721820831,-0.407234936952591,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.576395452022552\n             ,-0.764892399311066,-0.287589907646179,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.928562819957733\n             ,-0.368498861789703,-0.0444939211010933,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.151893243193626\n             ,-0.205408811569214,-0.966817259788513,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.612231731414795\n             ,-0.260206639766693,-0.746635675430298,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.456670939922333\n             ,-0.504286706447601,-0.732902884483337,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.846806704998016\n             ,-0.342166721820831,-0.407234936952591,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.639376401901245\n             ,-0.667583346366882,-0.381484389305115,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.928562819957733\n             ,-0.368498861789703,-0.0444939211010933,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.151893243193626\n             ,-0.205408811569214,-0.966817259788513,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.452344924211502\n             ,-0.552772045135498,-0.699876546859741,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.452344924211502\n             ,-0.552772045135498,-0.699876546859741,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.00627111084759235\n             ,-0.725264191627502,-0.688442051410675,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.67170912027359\n             ,-0.26042515039444,-0.693531274795532,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.0616781376302242\n             ,-0.181977167725563,-0.981366455554962,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.702341377735138\n             ,-0.454965353012085,-0.547469735145569,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.122947707772255\n             ,-0.396816700696945,-0.909626483917236,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.702341377735138\n             ,-0.454965353012085,-0.547469735145569,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.311080545186996\n             ,-0.873001515865326,-0.375629216432571,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.741996705532074\n             ,-0.600749731063843,-0.297557651996613,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.358602106571198\n             ,-0.933434844017029,-0.010197676718235,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.210457310080528\n             ,-0.658140003681183,-0.722882747650146,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.151893243193626\n             ,-0.205408811569214,-0.966817259788513,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.210457310080528\n             ,-0.658140003681183,-0.722882747650146,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.639376401901245\n             ,-0.667583346366882,-0.381484389305115,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.358602106571198\n             ,-0.933434844017029,-0.010197676718235,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.639376401901245\n             ,-0.667583346366882,-0.381484389305115,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.498913466930389\n             ,-0.494338691234589,-0.711838901042938,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.151893243193626\n             ,-0.205408811569214,-0.966817259788513,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.671101152896881\n             ,-0.0684311091899872,-0.738200783729553,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.498913466930389\n             ,-0.494338691234589,-0.711838901042938,-0.28100323677063,-0.703339219093323,0.652955651283264,-0.0911645293235779\n             ,-0.702602386474609,0.705718696117401,0.206373274326324,-0.932199418544769,-0.29734542965889,0.265233933925629\n             ,-0.933141052722931,-0.242690622806549,-0.468802720308304,-0.729726076126099,0.497718721628189,-0.28100323677063\n             ,-0.703339219093323,0.652955651283264,0.265233933925629,-0.933141052722931,-0.242690622806549,0.333554297685623\n             ,-0.926460325717926,-0.174392700195313,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.468802720308304\n             ,-0.729726076126099,0.497718721628189,0.333554297685623,-0.926460325717926,-0.174392700195313,0.393486231565475\n             ,-0.915565848350525,-0.0831127688288689,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.6035475730896\n             ,-0.760226249694824,0.240387856960297,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.414534240961075\n             ,-0.909560441970825,0.0293457116931677,-0.0911645293235779,-0.702602386474609,0.705718696117401,-0.147581502795219\n             ,-0.881406664848328,0.448711484670639,-0.0544524416327477,-0.920815229415894,-0.386179000139236,0.206373274326324\n             ,-0.932199418544769,-0.29734542965889,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.528953433036804\n             ,-0.511403381824493,0.677255392074585,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.0544524416327477\n             ,-0.920815229415894,-0.386179000139236,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.744288861751556\n             ,-0.234780222177505,0.625229835510254,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.913896083831787\n             ,0.178190380334854,-0.36474946141243,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.916511356830597\n             ,0.31258288025856,-0.249597251415253,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.744288861751556\n             ,-0.234780222177505,0.625229835510254,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.769146144390106\n             ,-0.596087396144867,0.230421498417854,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.916511356830597\n             ,0.31258288025856,-0.249597251415253,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.76525092124939\n             ,-0.642850756645203,-0.0336732342839241,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.911587297916412\n             ,0.377997100353241,-0.161637872457504,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.913896083831787\n             ,0.178190380334854,-0.36474946141243,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.909932374954224\n             ,-0.128417745232582,0.394375443458557,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.895336210727692\n             ,-0.087383933365345,-0.436734586954117,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.556144297122955\n             ,-0.497788280248642,0.665515065193176,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.551568567752838\n             ,-0.516851603984833,0.654703378677368,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.751205563545227\n             ,-0.478883922100067,-0.454269051551819,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.751205563545227\n             ,-0.478883922100067,-0.454269051551819,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.528953433036804\n             ,-0.511403381824493,0.677255392074585,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.411167025566101\n             ,-0.631594717502594,0.657289743423462,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.616970300674438\n             ,-0.649450302124023,-0.444479376077652,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.556144297122955\n             ,-0.497788280248642,0.665515065193176,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.445206075906754\n             ,-0.782184541225433,-0.435865759849548,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.199148803949356\n             ,-0.719600260257721,-0.665218114852905,0.238087520003319,-0.928487598896027,0.285000205039978,0.173939555883408\n             ,-0.926637887954712,0.333297610282898,-0.415939480066299,-0.73881071805954,-0.530238687992096,0.313057601451874\n             ,-0.922951817512512,0.223952934145927,0.238087520003319,-0.928487598896027,0.285000205039978,-0.199148803949356\n             ,-0.719600260257721,-0.665218114852905,-0.415939480066299,-0.73881071805954,-0.530238687992096,-0.576395452022552\n             ,-0.764892399311066,-0.287589907646179,0.382047444581985,-0.913609445095062,0.139131292700768,0.313057601451874\n             ,-0.922951817512512,0.223952934145927,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.634244203567505\n             ,-0.772702574729919,-0.0257883872836828,0.414534240961075,-0.909560441970825,0.0293457116931677,0.382047444581985\n             ,-0.913609445095062,0.139131292700768,-0.00627111084759235,-0.725264191627502,-0.688442051410675,0.173939555883408\n             ,-0.926637887954712,0.333297610282898,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.100533246994019\n             ,-0.893698990345001,-0.437258720397949,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.0946064740419388\n             ,-0.913934707641602,0.394680887460709,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.452344924211502\n             ,-0.552772045135498,-0.699876546859741,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.671101152896881\n             ,-0.0684311091899872,-0.738200783729553,-0.94632351398468,0.183760270476341,0.265902101993561,-0.945695042610168\n             ,0.244873836636543,0.21377021074295,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.67170912027359\n             ,-0.26042515039444,-0.693531274795532,-0.945695042610168,0.244873836636543,0.21377021074295,-0.936998605728149\n             ,0.316089689731598,0.14873118698597,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.702341377735138\n             ,-0.454965353012085,-0.547469735145569,-0.936998605728149,0.316089689731598,0.14873118698597,-0.923020243644714\n             ,0.379948437213898,0.0606035329401493,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.741996705532074\n             ,-0.600749731063843,-0.297557651996613,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.912554860115051\n             ,0.405823320150375,-0.0505079813301563,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.859895944595337\n             ,-0.137679204344749,-0.49155205488205,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.94632351398468\n             ,0.183760270476341,0.265902101993561,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.498913466930389\n             ,-0.494338691234589,-0.711838901042938,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.935486495494843\n             ,-0.0804866030812263,0.344074010848999,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.60280579328537\n             ,-0.423473596572876,-0.676236093044281,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.659892737865448\n             ,-0.642082750797272,0.390219569206238,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.452344924211502\n             ,-0.552772045135498,-0.699876546859741,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.794270694255829\n             ,-0.471489399671555,0.383186310529709,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.507410705089569\n             ,-0.552135229110718,-0.66157466173172,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.48826989531517\n             ,-0.774789869785309,0.40161320567131,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.48826989531517\n             ,-0.774789869785309,0.40161320567131,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.498913466930389\n             ,-0.494338691234589,-0.711838901042938,0.499523967504501,-0.410259157419205,-0.762996256351471,0.265233933925629\n             ,-0.933141052722931,-0.242690622806549,0.206373274326324,-0.932199418544769,-0.29734542965889,0.291362255811691\n             ,-0.415095657110214,-0.861860573291779,0.719791650772095,-0.389199703931808,-0.574824810028076,0.333554297685623\n             ,-0.926460325717926,-0.174392700195313,0.265233933925629,-0.933141052722931,-0.242690622806549,0.499523967504501\n             ,-0.410259157419205,-0.762996256351471,0.89153379201889,-0.356688916683197,-0.279178351163864,0.393486231565475\n             ,-0.915565848350525,-0.0831127688288689,0.333554297685623,-0.926460325717926,-0.174392700195313,0.719791650772095\n             ,-0.389199703931808,-0.574824810028076,0.93902975320816,-0.33998966217041,0.0512847155332565,0.414534240961075\n             ,-0.909560441970825,0.0293457116931677,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.89153379201889\n             ,-0.356688916683197,-0.279178351163864,0.206373274326324,-0.932199418544769,-0.29734542965889,-0.0544524416327477\n             ,-0.920815229415894,-0.386179000139236,0.0635582432150841,-0.298091143369675,-0.952418982982636,0.291362255811691\n             ,-0.415095657110214,-0.861860573291779,-0.0544524416327477,-0.920815229415894,-0.386179000139236,-0.576637268066406\n             ,-0.666932582855225,-0.471900790929794,-0.250289469957352,-0.339470773935318,-0.906705439090729,0.0635582432150841\n             ,-0.298091143369675,-0.952418982982636,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.913896083831787\n             ,0.178190380334854,-0.36474946141243,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.366778641939163\n             ,0.448393434286118,-0.815117657184601,-0.366778641939163,0.448393434286118,-0.815117657184601,-0.918562531471252\n             ,0.240213423967361,-0.313911467790604,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.358708292245865\n             ,0.679778933525085,-0.639710068702698,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.916511356830597\n             ,0.31258288025856,-0.249597251415253,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.345371842384338\n             ,0.869300365447998,-0.353603094816208,-0.345371842384338,0.869300365447998,-0.353603094816208,-0.911587297916412\n             ,0.377997100353241,-0.161637872457504,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.349057763814926\n             ,0.936734259128571,-0.0262219123542309,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.895336210727692\n             ,-0.087383933365345,-0.436734586954117,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.36416107416153\n             ,0.234637573361397,-0.901294589042664,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.633082926273346\n             ,-0.611027598381042,-0.475238174200058,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.312836438417435\n             ,0.000868286821059883,-0.94980663061142,-0.0507657080888748,-0.284880071878433,-0.957217931747437,-0.751205563545227\n             ,-0.478883922100067,-0.454269051551819,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.195326372981071\n             ,-0.254561126232147,-0.947125256061554,-0.250289469957352,-0.339470773935318,-0.906705439090729,-0.576637268066406\n             ,-0.666932582855225,-0.471900790929794,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.0507657080888748\n             ,-0.284880071878433,-0.957217931747437,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.445206075906754\n             ,-0.782184541225433,-0.435865759849548,-0.128973305225372,-0.305629998445511,-0.943374931812286,-0.195326372981071\n             ,-0.254561126232147,-0.947125256061554,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.633082926273346\n             ,-0.611027598381042,-0.475238174200058,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.128973305225372\n             ,-0.305629998445511,-0.943374931812286,0.20105354487896,-0.399605453014374,0.894367337226868,0.173939555883408\n             ,-0.926637887954712,0.333297610282898,0.238087520003319,-0.928487598896027,0.285000205039978,0.418255031108856\n             ,-0.396321922540665,0.817307531833649,0.418255031108856,-0.396321922540665,0.817307531833649,0.238087520003319\n             ,-0.928487598896027,0.285000205039978,0.313057601451874,-0.922951817512512,0.223952934145927,0.656683743000031\n             ,-0.378395289182663,0.652367532253265,0.656683743000031,-0.378395289182663,0.652367532253265,0.313057601451874\n             ,-0.922951817512512,0.223952934145927,0.382047444581985,-0.913609445095062,0.139131292700768,0.857872784137726\n             ,-0.350929707288742,0.375369966030121,0.857872784137726,-0.350929707288742,0.375369966030121,0.382047444581985\n             ,-0.913609445095062,0.139131292700768,0.414534240961075,-0.909560441970825,0.0293457116931677,0.93902975320816\n             ,-0.33998966217041,0.0512847155332565,-0.0351529642939568,-0.352832555770874,0.935025930404663,-0.0946064740419388\n             ,-0.913934707641602,0.394680887460709,0.173939555883408,-0.926637887954712,0.333297610282898,0.20105354487896\n             ,-0.399605453014374,0.894367337226868,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.622603535652161\n             ,-0.659051358699799,0.42191955447197,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.0351529642939568\n             ,-0.352832555770874,0.935025930404663,-0.448035717010498,0.462348014116287,0.765178620815277,-0.945695042610168\n             ,0.244873836636543,0.21377021074295,-0.94632351398468,0.183760270476341,0.265902101993561,-0.454463303089142\n             ,0.250147342681885,0.85492068529129,-0.42182531952858,0.69061017036438,0.587470054626465,-0.936998605728149,0.316089689731598\n             ,0.14873118698597,-0.945695042610168,0.244873836636543,0.21377021074295,-0.448035717010498,0.462348014116287\n             ,0.765178620815277,-0.37904354929924,0.875075936317444,0.300945341587067,-0.923020243644714,0.379948437213898\n             ,0.0606035329401493,-0.936998605728149,0.316089689731598,0.14873118698597,-0.42182531952858,0.69061017036438\n             ,0.587470054626465,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.912554860115051,0.405823320150375\n             ,-0.0505079813301563,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.37904354929924,0.875075936317444\n             ,0.300945341587067,-0.94632351398468,0.183760270476341,0.265902101993561,-0.935486495494843,-0.0804866030812263\n             ,0.344074010848999,-0.408599942922592,0.0173157677054405,0.912549316883087,-0.454463303089142,0.250147342681885\n             ,0.85492068529129,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.679035544395447,-0.603133201599121\n             ,0.418498605489731,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.408599942922592,0.0173157677054405\n             ,0.912549316883087,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.794270694255829,-0.471489399671555\n             ,0.383186310529709,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.291664242744446,-0.238015905022621\n             ,0.926434218883514,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.622603535652161,-0.659051358699799\n             ,0.42191955447197,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.343363374471664,-0.172115311026573\n             ,0.92329728603363,-0.225328087806702,-0.289088577032089,0.930405855178833,-0.48826989531517,-0.774789869785309\n             ,0.40161320567131,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.291664242744446,-0.238015905022621\n             ,0.926434218883514,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.679035544395447,-0.603133201599121\n             ,0.418498605489731,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.225328087806702,-0.289088577032089\n             ,0.930405855178833,0.220404133200645,0.441583395004272,-0.869727611541748,0.238343358039856,0.387237757444382\n             ,-0.890639841556549,0.249522879719734,0.613189935684204,-0.749490737915039,0.0635582432150841,-0.298091143369675\n             ,-0.952418982982636,-0.250289469957352,-0.339470773935318,-0.906705439090729,-0.0507657080888748,-0.284880071878433\n             ,-0.957217931747437,0.508907198905945,-0.553594052791595,-0.659201860427856,0.568823277950287,-0.359092324972153\n             ,-0.739927589893341,-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.491910099983215,0.172478601336479\n             ,-0.853390634059906,0.655558884143829,0.209355428814888,-0.725543141365051,0.368004411458969,0.153596758842468\n             ,-0.917050004005432,0.368004411458969,0.153596758842468,-0.917050004005432,-0.128493547439575,-0.169293120503426\n             ,-0.977153658866882,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.128493547439575,-0.169293120503426\n             ,-0.977153658866882,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.128973305225372,-0.305629998445511\n             ,-0.943374931812286,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.348750114440918,0.540946424007416\n             ,-0.765343248844147,-0.619978547096252,0.568114936351776,-0.541176497936249,0.568823277950287,-0.359092324972153\n             ,-0.739927589893341,0.531679213047028,-0.524689078330994,-0.664844751358032,0.566836953163147,-0.543319463729858\n             ,-0.619273662567139,0.568823277950287,-0.359092324972153,-0.739927589893341,0.566836953163147,-0.543319463729858\n             ,-0.619273662567139,0.49908322095871,-0.0296989660710096,-0.866044998168945,-0.619978547096252,0.568114936351776\n             ,-0.541176497936249,-0.348750114440918,0.540946424007416,-0.765343248844147,0.0124354995787144,0.454871088266373\n             ,-0.890470445156097,0.130445152521133,0.457035809755325,0.879830837249756,0.17189884185791,0.626526415348053\n             ,0.760207533836365,0.111461341381073,0.330251514911652,0.937288820743561,0.111461341381073,0.330251514911652\n             ,0.937288820743561,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.0351529642939568,-0.352832555770874\n             ,0.935025930404663,0.401947200298309,0.187930881977081,0.896169900894165,0.27214840054512,0.170062497258186,0.947108268737793\n             ,0.577877700328827,0.222700744867325,0.785150766372681,0.27214840054512,0.170062497258186,0.947108268737793,-0.408599942922592\n             ,0.0173157677054405,0.912549316883087,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.0179628469049931\n             ,-0.326483070850372,0.945032358169556,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.208328202366829\n             ,-0.172579661011696,0.962712645530701,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.225328087806702\n             ,-0.289088577032089,0.930405855178833,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.625847578048706\n             ,0.480478763580322,0.614373624324799,-0.671684086322784,0.576999366283417,0.464663535356522,-0.424899607896805\n             ,0.554023623466492,0.715903759002686,0.505278706550598,-0.368258208036423,0.78043532371521,0.535627126693726\n             ,-0.624319195747375,0.568620383739471,0.434695482254028,-0.572132110595703,0.695488810539246,0.505278706550598\n             ,-0.368258208036423,0.78043532371521,0.407602995634079,-0.0139898108318448,0.913052082061768,0.535627126693726\n             ,-0.624319195747375,0.568620383739471,-0.671684086322784,0.576999366283417,0.464663535356522,-0.0785331204533577\n             ,0.470493257045746,0.878901958465576,-0.424899607896805,0.554023623466492,0.715903759002686,-0.431291252374649\n             ,-0.167436838150024,0.88653975725174,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.227215021848679\n             ,-0.0811199173331261,0.970460176467896,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.202346414327621\n             ,-0.358685582876205,0.911263167858124,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.216712310910225\n             ,-0.169844657182693,0.961347281932831,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.660988688468933\n             ,-0.379635334014893,0.647279620170593,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.216712310910225\n             ,-0.169844657182693,0.961347281932831,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.151893243193626\n             ,-0.205408811569214,-0.966817259788513,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.107617132365704\n             ,-0.122167520225048,-0.986657798290253,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.151893243193626\n             ,-0.205408811569214,-0.966817259788513,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.151893243193626\n             ,-0.205408811569214,-0.966817259788513,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.507410705089569\n             ,-0.552135229110718,-0.66157466173172,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.381634205579758\n             ,-0.640459716320038,-0.666458308696747,-0.151893243193626,-0.205408811569214,-0.966817259788513,0.136130660772324\n             ,-0.198970586061478,0.970504581928253,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.105160817503929\n             ,0.278431057929993,0.954681813716888,0.263650745153427,-0.157535120844841,0.951667487621307,0.272030591964722\n             ,-0.10613701492548,0.956417441368103,-0.142246410250664,0.246101453900337,0.958749234676361,-0.179838627576828\n             ,0.158750206232071,0.970801949501038,0.326879501342773,0.00586882513016462,0.945047795772552,0.326879501342773\n             ,0.00586882513016462,0.945047795772552,-0.179838627576828,0.158750206232071,0.970801949501038,-0.172908544540405\n             ,0.0579710826277733,0.983230412006378,0.334599673748016,0.175780311226845,0.925820887088776,0.334599673748016\n             ,0.175780311226845,0.925820887088776,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.122078433632851\n             ,-0.0250803548842669,0.992203533649445,0.253547221422195,0.327525943517685,0.910187065601349,0.253547221422195\n             ,0.327525943517685,0.910187065601349,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.040074922144413\n             ,-0.0765580385923386,0.996259450912476,0.105446070432663,0.417101114988327,0.902722418308258,0.105446070432663\n             ,0.417101114988327,0.902722418308258,-0.040074922144413,-0.0765580385923386,0.996259450912476,0.0589041672646999\n             ,-0.0861395671963692,0.994540214538574,-0.067083902657032,0.418874800205231,0.90556263923645,-0.067083902657032\n             ,0.418874800205231,0.90556263923645,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.153722941875458\n             ,-0.0543801262974739,0.986616492271423,-0.182103842496872,0.370986968278885,0.910607993602753,-0.233089491724968\n             ,0.366702735424042,0.900665521621704,0.179733082652092,-0.0269720479846001,0.983345568180084,0.213143289089203\n             ,0.0353558585047722,0.976381063461304,-0.283145189285278,0.239479392766953,0.928697168827057,-0.283145189285278\n             ,0.239479392766953,0.928697168827057,0.213143289089203,0.0353558585047722,0.976381063461304,0.233963787555695\n             ,0.155204430222511,0.959777355194092,-0.418653875589371,-0.0103639494627714,0.908086717128754,-0.418653875589371\n             ,-0.0103639494627714,0.908086717128754,0.233963787555695,0.155204430222511,0.959777355194092,0.180598795413971\n             ,0.261213630437851,0.948236048221588,-0.224078983068466,-0.125485673546791,0.96645849943161,-0.224078983068466\n             ,-0.125485673546791,0.96645849943161,0.180598795413971,0.261213630437851,0.948236048221588,0.0773428529500961\n             ,0.322050452232361,0.943557918071747,-0.112397000193596,-0.326285779476166,0.938565135002136,-0.112397000193596\n             ,-0.326285779476166,0.938565135002136,0.0773428529500961,0.322050452232361,0.943557918071747,-0.0433657057583332\n             ,0.308572441339493,0.950211763381958,0.136130660772324,-0.198970586061478,0.970504581928253,-0.0433657057583332\n             ,0.308572441339493,0.950211763381958,-0.299070537090302,0.902828752994537,0.308961302042007,-0.590794920921326\n             ,0.744754731655121,0.310325294733047,-0.105160817503929,0.278431057929993,0.954681813716888,-0.142246410250664\n             ,0.246101453900337,0.958749234676361,-0.486762404441834,0.520327687263489,0.70165628194809,-0.624243855476379\n             ,0.262774765491486,0.73570990562439,-0.179838627576828,0.158750206232071,0.970801949501038,-0.179838627576828\n             ,0.158750206232071,0.970801949501038,-0.624243855476379,0.262774765491486,0.73570990562439,-0.629434466362,-0.076258510351181\n             ,0.773302555084229,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.172908544540405,0.0579710826277733\n             ,0.983230412006378,-0.629434466362,-0.076258510351181,0.773302555084229,-0.466201931238174,-0.373760640621185\n             ,0.801847040653229,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.122078433632851,-0.0250803548842669\n             ,0.992203533649445,-0.466201931238174,-0.373760640621185,0.801847040653229,-0.176110938191414,-0.553461611270905\n             ,0.814042508602142,-0.040074922144413,-0.0765580385923386,0.996259450912476,-0.040074922144413,-0.0765580385923386\n             ,0.996259450912476,-0.176110938191414,-0.553461611270905,0.814042508602142,0.167152568697929,-0.567055284976959\n             ,0.806540906429291,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.0589041672646999,-0.0861395671963692\n             ,0.994540214538574,0.167152568697929,-0.567055284976959,0.806540906429291,0.439817190170288,-0.44538602232933\n             ,0.779866755008698,0.153722941875458,-0.0543801262974739,0.986616492271423,0.179733082652092,-0.0269720479846001\n             ,0.983345568180084,0.676802039146423,-0.601036489009857,0.425081342458725,0.85341203212738,-0.31018790602684\n             ,0.418893098831177,0.213143289089203,0.0353558585047722,0.976381063461304,0.213143289089203,0.0353558585047722\n             ,0.976381063461304,0.85341203212738,-0.31018790602684,0.418893098831177,0.902406454086304,0.256440877914429,0.346266776323318\n             ,0.233963787555695,0.155204430222511,0.959777355194092,0.233963787555695,0.155204430222511,0.959777355194092\n             ,0.902406454086304,0.256440877914429,0.346266776323318,0.674272358417511,0.674698412418365,0.300231248140335\n             ,0.180598795413971,0.261213630437851,0.948236048221588,0.180598795413971,0.261213630437851,0.948236048221588\n             ,0.674272358417511,0.674698412418365,0.300231248140335,0.264634191989899,0.922052919864655,0.282466232776642\n             ,0.0773428529500961,0.322050452232361,0.943557918071747,0.0773428529500961,0.322050452232361,0.943557918071747\n             ,0.264634191989899,0.922052919864655,0.282466232776642,-0.299070537090302,0.902828752994537,0.308961302042007\n             ,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.486762404441834,0.520327687263489,0.70165628194809\n             ,-0.549692809581757,0.641294836997986,0.535330533981323,-0.767678797245026,0.2869873046875,0.572981357574463\n             ,-0.624243855476379,0.262774765491486,0.73570990562439,-0.624243855476379,0.262774765491486,0.73570990562439\n             ,-0.767678797245026,0.2869873046875,0.572981357574463,-0.778753936290741,-0.129268735647202,0.61386626958847\n             ,-0.629434466362,-0.076258510351181,0.773302555084229,-0.629434466362,-0.076258510351181,0.773302555084229,-0.778753936290741\n             ,-0.129268735647202,0.61386626958847,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.466201931238174\n             ,-0.373760640621185,0.801847040653229,-0.466201931238174,-0.373760640621185,0.801847040653229,-0.578869938850403\n             ,-0.496298432350159,0.646991074085236,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.176110938191414\n             ,-0.553461611270905,0.814042508602142,-0.176110938191414,-0.553461611270905,0.814042508602142,-0.220708161592484\n             ,-0.714994132518768,0.663378715515137,0.199516177177429,-0.725585639476776,0.658573269844055,0.167152568697929\n             ,-0.567055284976959,0.806540906429291,0.167152568697929,-0.567055284976959,0.806540906429291,0.199516177177429\n             ,-0.725585639476776,0.658573269844055,0.568061590194702,-0.524848997592926,0.633908152580261,0.439817190170288\n             ,-0.44538602232933,0.779866755008698,0.439817190170288,-0.44538602232933,0.779866755008698,0.568061590194702\n             ,-0.524848997592926,0.633908152580261,0.88259881734848,-0.254938364028931,0.395000904798508,-0.246941313147545\n             ,0.924433410167694,0.290590465068817,-0.236852958798409,0.965259969234467,-0.110334932804108,-0.690867304801941\n             ,0.718407988548279,-0.0811932682991028,-0.549692809581757,0.641294836997986,0.535330533981323,-0.549692809581757\n             ,0.641294836997986,0.535330533981323,-0.690867304801941,0.718407988548279,-0.0811932682991028,-0.959779977798462\n             ,0.278704285621643,-0.0338585041463375,-0.767678797245026,0.2869873046875,0.572981357574463,-0.767678797245026\n             ,0.2869873046875,0.572981357574463,-0.959779977798462,0.278704285621643,-0.0338585041463375,-0.971564769744873\n             ,-0.236011743545532,0.0189810190349817,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.778753936290741\n             ,-0.129268735647202,0.61386626958847,-0.971564769744873,-0.236011743545532,0.0189810190349817,-0.723084032535553\n             ,-0.687865734100342,0.0631685853004456,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.578869938850403\n             ,-0.496298432350159,0.646991074085236,-0.723084032535553,-0.687865734100342,0.0631685853004456,-0.28089165687561\n             ,-0.955799043178558,0.086879275739193,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.220708161592484\n             ,-0.714994132518768,0.663378715515137,-0.28089165687561,-0.955799043178558,0.086879275739193,0.236541092395782\n             ,-0.968005061149597,0.0837526917457581,0.199516177177429,-0.725585639476776,0.658573269844055,0.199516177177429\n             ,-0.725585639476776,0.658573269844055,0.236541092395782,-0.968005061149597,0.0837526917457581,0.690576732158661\n             ,-0.721194446086884,0.0546111837029457,0.568061590194702,-0.524848997592926,0.633908152580261,0.568061590194702\n             ,-0.524848997592926,0.633908152580261,0.690576732158661,-0.721194446086884,0.0546111837029457,0.959537088871002\n             ,-0.28148826956749,0.00727332010865211,0.88259881734848,-0.254938364028931,0.395000904798508,0.88259881734848\n             ,-0.254938364028931,0.395000904798508,0.959537088871002,-0.28148826956749,0.00727332010865211,0.971341848373413\n             ,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.971341848373413\n             ,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.722835063934326\n             ,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.722835063934326\n             ,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.280602157115936\n             ,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,0.280602157115936\n             ,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,-0.236852958798409\n             ,0.965259969234467,-0.110334932804108,-0.246941313147545,0.924433410167694,0.290590465068817,0.00198204442858696\n             ,0.093896672129631,0.995579957962036,0.272030591964722,-0.10613701492548,0.956417441368103,0.326879501342773\n             ,0.00586882513016462,0.945047795772552,0.00198204442858696,0.093896672129631,0.995579957962036,0.326879501342773\n             ,0.00586882513016462,0.945047795772552,0.334599673748016,0.175780311226845,0.925820887088776,0.00198204442858696\n             ,0.093896672129631,0.995579957962036,0.334599673748016,0.175780311226845,0.925820887088776,0.253547221422195\n             ,0.327525943517685,0.910187065601349,0.00198204442858696,0.093896672129631,0.995579957962036,0.253547221422195\n             ,0.327525943517685,0.910187065601349,0.105446070432663,0.417101114988327,0.902722418308258,0.00198204442858696\n             ,0.093896672129631,0.995579957962036,0.105446070432663,0.417101114988327,0.902722418308258,-0.067083902657032\n             ,0.418874800205231,0.90556263923645,0.00198204442858696,0.093896672129631,0.995579957962036,-0.067083902657032\n             ,0.418874800205231,0.90556263923645,-0.182103842496872,0.370986968278885,0.910607993602753,0.0314320400357246\n             ,0.12189869582653,0.992044746875763,-0.233089491724968,0.366702735424042,0.900665521621704,-0.283145189285278\n             ,0.239479392766953,0.928697168827057,0.0314320400357246,0.12189869582653,0.992044746875763,0.0314320400357246\n             ,0.12189869582653,0.992044746875763,0.0314320400357246,0.12189869582653,0.992044746875763,0.136130660772324,-0.198970586061478\n             ,0.970504581928253,0.263650745153427,-0.157535120844841,0.951667487621307,0.028663007542491,0.119241014122963\n             ,0.992451548576355,-0.283145189285278,0.239479392766953,0.928697168827057,-0.418653875589371,-0.0103639494627714\n             ,0.908086717128754,-0.224078983068466,-0.125485673546791,0.96645849943161,0.136130660772324,-0.198970586061478\n             ,0.970504581928253,0.028663007542491,0.119241014122963,0.992451548576355,-0.224078983068466,-0.125485673546791\n             ,0.96645849943161,-0.112397000193596,-0.326285779476166,0.938565135002136,-0.246941313147545,0.924433410167694\n             ,0.290590465068817,-0.549692809581757,0.641294836997986,0.535330533981323,-0.486762404441834,0.520327687263489\n             ,0.70165628194809,-0.114203341305256,0.279921561479568,0.953205943107605,-0.587047100067139,0.73501044511795\n             ,0.339316010475159,-0.486762404441834,0.520327687263489,0.70165628194809,-0.142246410250664,0.246101453900337\n             ,0.958749234676361,0.245040863752365,-0.134970381855965,0.960071861743927,-0.114203341305256,0.279921561479568\n             ,0.953205943107605,-0.142246410250664,0.246101453900337,0.958749234676361,0.272030591964722,-0.10613701492548\n             ,0.956417441368103,0.00198204442858696,0.093896672129631,0.995579957962036,0.0316664315760136,0.122062407433987\n             ,0.992017149925232,0.245040863752365,-0.134970381855965,0.960071861743927,0.272030591964722,-0.10613701492548\n             ,0.956417441368103,0.00198204442858696,0.093896672129631,0.995579957962036,-0.182103842496872,0.370986968278885\n             ,0.910607993602753,-0.211337894201279,0.346838146448135,0.91380500793457,0.0316664315760136,0.122062407433987\n             ,0.992017149925232,-0.182103842496872,0.370986968278885,0.910607993602753,0.153722941875458,-0.0543801262974739\n             ,0.986616492271423,0.196472957730293,-0.029518248513341,0.980064809322357,-0.211337894201279,0.346838146448135\n             ,0.91380500793457,0.153722941875458,-0.0543801262974739,0.986616492271423,0.439817190170288,-0.44538602232933\n             ,0.779866755008698,0.680254757404327,-0.584707081317902,0.44200798869133,0.196472957730293,-0.029518248513341\n             ,0.980064809322357,-0.106244966387749,0.278917253017426,0.954419791698456,-0.58428555727005,0.74019581079483\n             ,0.332746803760529,-0.58428555727005,0.74019581079483,0.332746803760529,-0.106244966387749,0.278917253017426\n             ,0.954419791698456,0.252784311771393,-0.144343972206116,0.956694781780243,-0.106244966387749,0.278917253017426\n             ,0.954419791698456,-0.106244966387749,0.278917253017426,0.954419791698456,0.252784311771393,-0.144343972206116\n             ,0.956694781780243,0.0315654873847961,0.122002728283405,0.992027699947357,0.0315654873847961,0.122002728283405\n             ,0.992027699947357,0.252784311771393,-0.144343972206116,0.956694781780243,0.252784311771393,-0.144343972206116\n             ,0.956694781780243,0.0315654873847961,0.122002728283405,0.992027699947357,-0.220397889614105,0.355129688978195\n             ,0.908464431762695,-0.220397889614105,0.355129688978195,0.908464431762695,0.0315654873847961,0.122002728283405\n             ,0.992027699947357,-0.220397889614105,0.355129688978195,0.908464431762695,0.189345061779022,-0.0369042716920376\n             ,0.981216847896576,0.189345061779022,-0.0369042716920376,0.981216847896576,-0.220397889614105,0.355129688978195\n             ,0.908464431762695,0.189345061779022,-0.0369042716920376,0.981216847896576,0.676772654056549,-0.6009920835495\n             ,0.4251908659935,0.676772654056549,-0.6009920835495,0.4251908659935,0.189345061779022,-0.0369042716920376,0.981216847896576\n             ,0.285419285297394,-0.260888695716858,-0.922210872173309,0.285419285297394,-0.260888695716858,-0.922210872173309\n             ,-0.0701178461313248,0.161541283130646,-0.984371840953827,-0.0701178461313248,0.161541283130646,-0.984371840953827\n             ,0.304495304822922,-0.222503274679184,-0.926161408424377,0.359685301780701,-0.109944850206375,-0.926573574542999\n             ,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.106314696371555,0.128722757101059,-0.985965311527252\n             ,0.359685301780701,-0.109944850206375,-0.926573574542999,0.368203610181808,0.0610124915838242,-0.92774111032486\n             ,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.144488215446472,0.0409091152250767,-0.988660514354706\n             ,0.368203610181808,0.0610124915838242,-0.92774111032486,0.287971884012222,0.213878870010376,-0.933449566364288\n             ,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.137990683317184,-0.0606634132564068,-0.988573968410492\n             ,0.287971884012222,0.213878870010376,-0.933449566364288,0.140473276376724,0.304339796304703,-0.942148923873901\n             ,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.0875953435897827,-0.144417569041252,-0.985632121562958\n             ,0.140473276376724,0.304339796304703,-0.942148923873901,-0.0318344980478287,0.306514382362366,-0.951333522796631\n             ,0.0928165391087532,-0.206099733710289,-0.974119126796722,-0.00595734408125281,-0.196369305253029,-0.980511903762817\n             ,-0.0318344980478287,0.306514382362366,-0.951333522796631,-0.147164434194565,0.259054154157639,-0.954585552215576\n             ,0.187471479177475,-0.174140021204948,-0.9667107462883,0.0928165391087532,-0.206099733710289,-0.974119126796722\n             ,-0.186045140028,0.244106322526932,-0.951734900474548,-0.186045140028,0.244106322526932,-0.951734900474548,0.222749635577202\n             ,-0.155833333730698,-0.962340116500854,0.222749635577202,-0.155833333730698,-0.962340116500854,-0.248975187540054\n             ,0.126625880599022,-0.960196435451508,-0.387186944484711,-0.118426606059074,-0.914363980293274,0.268629968166351\n             ,0.0369143784046173,-0.962535858154297,0.247289061546326,-0.083899550139904,-0.965302526950836,-0.387186944484711\n             ,-0.118426606059074,-0.914363980293274,-0.191727757453918,-0.240914106369019,-0.951420426368713,0.215820819139481\n             ,0.143767416477203,-0.965791046619415,0.268629968166351,0.0369143784046173,-0.962535858154297,-0.191727757453918\n             ,-0.240914106369019,-0.951420426368713,-0.0825225338339806,-0.437338262796402,-0.895502805709839,0.112991258502007\n             ,0.205170169472694,-0.972182154655457,0.215820819139481,0.143767416477203,-0.965791046619415,-0.0825225338339806\n             ,-0.437338262796402,-0.895502805709839,0.168216422200203,-0.316025346517563,-0.933719038963318,-0.00743300467729568\n             ,0.191485971212387,-0.981467187404633,0.112991258502007,0.205170169472694,-0.972182154655457,-0.563491702079773\n             ,0.64732563495636,0.513270497322083,-0.0701178461313248,0.161541283130646,-0.984371840953827,-0.0701178461313248\n             ,0.161541283130646,-0.984371840953827,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.106314696371555\n             ,0.128722757101059,-0.985965311527252,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.595909535884857\n             ,0.174546733498573,-0.783852875232697,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.144488215446472\n             ,0.0409091152250767,-0.988660514354706,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.602712452411652\n             ,-0.166520953178406,-0.780389904975891,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.137990683317184\n             ,-0.0606634132564068,-0.988573968410492,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.441163808107376\n             ,-0.466001093387604,-0.766953408718109,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.0875953435897827\n             ,-0.144417569041252,-0.985632121562958,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.152386710047722\n             ,-0.647121250629425,-0.747002243995667,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.00595734408125281\n             ,-0.196369305253029,-0.980511903762817,0.0928165391087532,-0.206099733710289,-0.974119126796722,0.190285310149193\n             ,-0.661201238632202,-0.725675106048584,-0.152386710047722,-0.647121250629425,-0.747002243995667,0.0928165391087532\n             ,-0.206099733710289,-0.974119126796722,0.187471479177475,-0.174140021204948,-0.9667107462883,0.462890416383743\n             ,-0.538564682006836,-0.704045832157135,0.190285310149193,-0.661201238632202,-0.725675106048584,0.897243618965149\n             ,-0.439534097909927,-0.0419950634241104,0.222749635577202,-0.155833333730698,-0.962340116500854,0.222749635577202\n             ,-0.155833333730698,-0.962340116500854,0.562596559524536,-0.566279470920563,0.602339327335358,0.247289061546326\n             ,-0.083899550139904,-0.965302526950836,0.268629968166351,0.0369143784046173,-0.962535858154297,0.765360236167908\n             ,0.200960800051689,0.611423313617706,0.713191151618958,-0.304302185773849,0.631473302841187,0.268629968166351\n             ,0.0369143784046173,-0.962535858154297,0.215820819139481,0.143767416477203,-0.965791046619415,0.56377899646759\n             ,0.570771217346191,0.596970200538635,0.765360236167908,0.200960800051689,0.611423313617706,0.215820819139481\n             ,0.143767416477203,-0.965791046619415,0.112991258502007,0.205170169472694,-0.972182154655457,0.205752313137054\n             ,0.791630685329437,0.575314521789551,0.56377899646759,0.570771217346191,0.596970200538635,0.112991258502007,0.205170169472694\n             ,-0.972182154655457,-0.00743300467729568,0.191485971212387,-0.981467187404633,-0.294516265392303,0.773154675960541\n             ,0.56168669462204,0.205752313137054,0.791630685329437,0.575314521789551,-0.457403212785721,0.433727949857712\n             ,-0.776313304901123,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.74471515417099,0.218894854187965\n             ,-0.630463659763336,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.595909535884857,0.174546733498573\n             ,-0.783852875232697,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.757954597473145,-0.199201464653015\n             ,-0.621147036552429,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.602712452411652,-0.166520953178406\n             ,-0.780389904975891,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.560215413570404,-0.568411111831665\n             ,-0.602550804615021,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.441163808107376,-0.466001093387604\n             ,-0.766953408718109,-0.152386710047722,-0.647121250629425,-0.747002243995667,-0.203609570860863,-0.789041042327881\n             ,-0.579618275165558,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.152386710047722,-0.647121250629425\n             ,-0.747002243995667,0.190285310149193,-0.661201238632202,-0.725675106048584,0.216090649366379,-0.800804913043976\n             ,-0.558584153652191,-0.203609570860863,-0.789041042327881,-0.579618275165558,0.190285310149193,-0.661201238632202\n             ,-0.725675106048584,0.462890416383743,-0.538564682006836,-0.704045832157135,0.585278213024139,-0.600160777568817\n             ,-0.54521232843399,0.216090649366379,-0.800804913043976,-0.558584153652191,0.462890416383743,-0.538564682006836\n             ,-0.704045832157135,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.585278213024139,-0.600160777568817\n             ,-0.54521232843399,0.713191151618958,-0.304302185773849,0.631473302841187,0.765360236167908,0.200960800051689\n             ,0.611423313617706,-0.0554697476327419,0.0163222346454859,0.9983269572258,0.765360236167908,0.200960800051689\n             ,0.611423313617706,0.56377899646759,0.570771217346191,0.596970200538635,-0.0524273775517941,0.0131540298461914\n             ,0.998538076877594,-0.0554697476327419,0.0163222346454859,0.9983269572258,0.56377899646759,0.570771217346191\n             ,0.596970200538635,0.205752313137054,0.791630685329437,0.575314521789551,-0.049451969563961,0.00981415808200836\n             ,0.998728275299072,-0.0524273775517941,0.0131540298461914,0.998538076877594,0.205752313137054,0.791630685329437\n             ,0.575314521789551,-0.294516265392303,0.773154675960541,0.56168669462204,-0.049451969563961,0.00981415808200836\n             ,0.998728275299072,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.525119662284851,0.574203789234161\n             ,-0.628123641014099,-0.518197417259216,0.525039672851563,0.675133109092712,-0.197243928909302,0.699767708778381\n             ,0.686600387096405,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.74471515417099,0.218894854187965\n             ,-0.630463659763336,-0.708945393562317,0.213501617312431,0.672170698642731,-0.518197417259216,0.525039672851563\n             ,0.675133109092712,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.757954597473145,-0.199201464653015\n             ,-0.621147036552429,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.708945393562317,0.213501617312431\n             ,0.672170698642731,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.560215413570404,-0.568411111831665\n             ,-0.602550804615021,-0.54542750120163,-0.47233721613884,0.692391753196716,-0.718839228153229,-0.15140588581562\n             ,0.678488373756409,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.203609570860863,-0.789041042327881\n             ,-0.579618275165558,-0.234902039170265,-0.663679361343384,0.710176527500153,-0.54542750120163,-0.47233721613884\n             ,0.692391753196716,-0.203609570860863,-0.789041042327881,-0.579618275165558,0.216090649366379,-0.800804913043976\n             ,-0.558584153652191,0.129999682307243,-0.674115300178528,0.727096021175385,-0.234902039170265,-0.663679361343384\n             ,0.710176527500153,0.216090649366379,-0.800804913043976,-0.558584153652191,0.585278213024139,-0.600160777568817\n             ,-0.54521232843399,0.451691657304764,-0.500417768955231,0.738618135452271,0.129999682307243,-0.674115300178528\n             ,0.727096021175385,0.585278213024139,-0.600160777568817,-0.54521232843399,0.897243618965149,-0.439534097909927\n             ,-0.0419950634241104,0.64369797706604,-0.188760459423065,0.741634964942932,0.451691657304764,-0.500417768955231\n             ,0.738618135452271,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.634316861629486,0.173373848199844\n             ,0.753381490707397,0.654116809368134,0.177300214767456,0.735320270061493,0.64369797706604,-0.188760459423065\n             ,0.741634964942932,0.634316861629486,0.173373848199844,0.753381490707397,0.465378105640411,0.486588507890701\n             ,0.739361107349396,0.479970723390579,0.499263644218445,0.72136253118515,0.654116809368134,0.177300214767456,0.735320270061493\n             ,0.465378105640411,0.486588507890701,0.739361107349396,0.161993652582169,0.672100722789764,0.722522437572479\n             ,0.168181717395782,0.690484523773193,0.703523993492126,0.479970723390579,0.499263644218445,0.72136253118515,0.161993652582169\n             ,0.672100722789764,0.722522437572479,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.197243928909302\n             ,0.699767708778381,0.686600387096405,0.168181717395782,0.690484523773193,0.703523993492126,0.037516862154007\n             ,-0.0272734649479389,-0.998923718929291,0.359685301780701,-0.109944850206375,-0.926573574542999,0.304495304822922\n             ,-0.222503274679184,-0.926161408424377,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.368203610181808\n             ,0.0610124915838242,-0.92774111032486,0.359685301780701,-0.109944850206375,-0.926573574542999,0.037516862154007\n             ,-0.0272734649479389,-0.998923718929291,0.287971884012222,0.213878870010376,-0.933449566364288,0.368203610181808\n             ,0.0610124915838242,-0.92774111032486,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.140473276376724\n             ,0.304339796304703,-0.942148923873901,0.287971884012222,0.213878870010376,-0.933449566364288,0.037516862154007\n             ,-0.0272734649479389,-0.998923718929291,-0.0318344980478287,0.306514382362366,-0.951333522796631,0.140473276376724\n             ,0.304339796304703,-0.942148923873901,0.037516862154007,-0.0272734649479389,-0.998923718929291,-0.147164434194565\n             ,0.259054154157639,-0.954585552215576,-0.0318344980478287,0.306514382362366,-0.951333522796631,-0.387186944484711\n             ,-0.118426606059074,-0.914363980293274,-0.248975187540054,0.126625880599022,-0.960196435451508,0.0634305104613304\n             ,-0.00267115444876254,-0.997982680797577,-0.191727757453918,-0.240914106369019,-0.951420426368713,-0.0825225338339806\n             ,-0.437338262796402,-0.895502805709839,-0.191727757453918,-0.240914106369019,-0.951420426368713,0.0634305104613304\n             ,-0.00267115444876254,-0.997982680797577,0.168216422200203,-0.316025346517563,-0.933719038963318,-0.197243928909302\n             ,0.699767708778381,0.686600387096405,-0.518197417259216,0.525039672851563,0.675133109092712,-0.0474429130554199\n             ,0.0178848132491112,0.998713791370392,-0.518197417259216,0.525039672851563,0.675133109092712,-0.708945393562317\n             ,0.213501617312431,0.672170698642731,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.708945393562317\n             ,0.213501617312431,0.672170698642731,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.0474429130554199\n             ,0.0178848132491112,0.998713791370392,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.54542750120163\n             ,-0.47233721613884,0.692391753196716,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.54542750120163\n             ,-0.47233721613884,0.692391753196716,-0.234902039170265,-0.663679361343384,0.710176527500153,-0.0474429130554199\n             ,0.0178848132491112,0.998713791370392,-0.234902039170265,-0.663679361343384,0.710176527500153,0.129999682307243\n             ,-0.674115300178528,0.727096021175385,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.129999682307243\n             ,-0.674115300178528,0.727096021175385,0.451691657304764,-0.500417768955231,0.738618135452271,-0.0474429130554199\n             ,0.0178848132491112,0.998713791370392,0.451691657304764,-0.500417768955231,0.738618135452271,0.64369797706604\n             ,-0.188760459423065,0.741634964942932,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.64369797706604\n             ,-0.188760459423065,0.741634964942932,0.654116809368134,0.177300214767456,0.735320270061493,-0.0474429130554199\n             ,0.0178848132491112,0.998713791370392,0.654116809368134,0.177300214767456,0.735320270061493,0.479970723390579\n             ,0.499263644218445,0.72136253118515,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.479970723390579\n             ,0.499263644218445,0.72136253118515,0.168181717395782,0.690484523773193,0.703523993492126,-0.0474429130554199\n             ,0.0178848132491112,0.998713791370392,0.168181717395782,0.690484523773193,0.703523993492126,-0.197243928909302\n             ,0.699767708778381,0.686600387096405,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.376014769077301\n             ,0.9161736369133,-0.138703793287277,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.525119662284851\n             ,0.574203789234161,-0.628123641014099,0.462890416383743,-0.538564682006836,-0.704045832157135,0.187471479177475\n             ,-0.174140021204948,-0.9667107462883,0.230113714933395,-0.14894126355648,-0.961698591709137,0.690046310424805\n             ,-0.637357771396637,-0.342944711446762,-0.147164434194565,0.259054154157639,-0.954585552215576,-0.176630616188049\n             ,0.235003083944321,-0.955811262130737,0.230113714933395,-0.14894126355648,-0.961698591709137,0.187471479177475\n             ,-0.174140021204948,-0.9667107462883,0.0672855526208878,0.000956431380473077,-0.997733294963837,-0.176630616188049\n             ,0.235003083944321,-0.955811262130737,-0.147164434194565,0.259054154157639,-0.954585552215576,0.037516862154007\n             ,-0.0272734649479389,-0.998923718929291,0.277595341205597,-0.251689046621323,-0.92714262008667,0.0672855526208878\n             ,0.000956431380473077,-0.997733294963837,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.304495304822922\n             ,-0.222503274679184,-0.926161408424377,-0.0779055655002594,0.162667319178581,-0.983600556850433,0.277595341205597\n             ,-0.251689046621323,-0.92714262008667,0.304495304822922,-0.222503274679184,-0.926161408424377,-0.106314696371555\n             ,0.128722757101059,-0.985965311527252,-0.568253636360168,0.691138505935669,-0.446559488773346,-0.0779055655002594\n             ,0.162667319178581,-0.983600556850433,-0.106314696371555,0.128722757101059,-0.985965311527252,-0.457403212785721\n             ,0.433727949857712,-0.776313304901123,0.0672584101557732,0.000950529880356044,-0.997735142707825,-0.186045140028\n             ,0.244106322526932,-0.951734900474548,-0.186045140028,0.244106322526932,-0.951734900474548,0.0672584101557732\n             ,0.000950529880356044,-0.997735142707825,0.285419285297394,-0.260888695716858,-0.922210872173309,0.0672584101557732\n             ,0.000950529880356044,-0.997735142707825,0.0672584101557732,0.000950529880356044,-0.997735142707825,0.285419285297394\n             ,-0.260888695716858,-0.922210872173309,-0.0494545698165894,0.00981395319104195,0.998728156089783,-0.563491702079773\n             ,0.64732563495636,0.513270497322083,-0.376014769077301,0.9161736369133,-0.138703793287277,0.161993652582169,0.672100722789764\n             ,0.722522437572479,-0.0524277351796627,0.0131527418270707,0.998538076877594,-0.0494545698165894,0.00981395319104195\n             ,0.998728156089783,0.161993652582169,0.672100722789764,0.722522437572479,0.465378105640411,0.486588507890701\n             ,0.739361107349396,-0.0554704740643501,0.0163217782974243,0.998326897621155,-0.0524277351796627,0.0131527418270707\n             ,0.998538076877594,0.465378105640411,0.486588507890701,0.739361107349396,0.634316861629486,0.173373848199844\n             ,0.753381490707397,0.562596559524536,-0.566279470920563,0.602339327335358,-0.0554704740643501,0.0163217782974243\n             ,0.998326897621155,0.634316861629486,0.173373848199844,0.753381490707397,0.897243618965149,-0.439534097909927\n             ,-0.0419950634241104,0.0671186223626137,0.000861435197293758,-0.997744619846344,-0.248975187540054,0.126625880599022\n             ,-0.960196435451508,-0.198622241616249,0.25632917881012,-0.945962250232697,0.0671186223626137,0.000861435197293758\n             ,-0.997744619846344,0.213518917560577,-0.146410331130028,-0.965905606746674,-0.198622241616249,0.25632917881012\n             ,-0.945962250232697,-0.248975187540054,0.126625880599022,-0.960196435451508,0.247289061546326,-0.083899550139904\n             ,-0.965302526950836,0.562577784061432,-0.566266417503357,0.602369129657745,0.213518917560577,-0.146410331130028\n             ,-0.965905606746674,0.247289061546326,-0.083899550139904,-0.965302526950836,0.713191151618958,-0.304302185773849\n             ,0.631473302841187,0.713191151618958,-0.304302185773849,0.631473302841187,-0.0554691106081009,0.016322173178196\n             ,0.9983269572258,-0.0554691106081009,0.016322173178196,0.9983269572258,0.562577784061432,-0.566266417503357,0.602369129657745\n             ,-0.0554691106081009,0.016322173178196,0.9983269572258,-0.052426990121603,0.0131535343825817,0.998538136482239\n             ,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0554691106081009,0.016322173178196,0.9983269572258\n             ,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0494528710842133,0.00981275457888842,0.998728215694427\n             ,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.052426990121603,0.0131535343825817,0.998538136482239\n             ,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.294516265392303,0.773154675960541,0.56168669462204\n             ,-0.559975147247314,0.642372965812683,0.523244559764862,-0.0494528710842133,0.00981275457888842,0.998728215694427\n             ,-0.294516265392303,0.773154675960541,0.56168669462204,-0.00743300467729568,0.191485971212387,-0.981467187404633\n             ,-0.0692261606454849,0.161251112818718,-0.984482526779175,-0.559975147247314,0.642372965812683,0.523244559764862\n             ,0.168216422200203,-0.316025346517563,-0.933719038963318,0.295631766319275,-0.272996246814728,-0.915464341640472\n             ,-0.0692261606454849,0.161251112818718,-0.984482526779175,-0.00743300467729568,0.191485971212387,-0.981467187404633\n             ,0.168216422200203,-0.316025346517563,-0.933719038963318,0.0671186223626137,0.000861435197293758,-0.997744619846344\n             ,0.0671186223626137,0.000861435197293758,-0.997744619846344,0.295631766319275,-0.272996246814728,-0.915464341640472\n             ,0.448934882879257,0.813904881477356,-0.368803858757019,0.44893816113472,0.813904583454132,-0.368800550699234\n             ,0.440851420164108,0.897496819496155,0.0122249089181423,0.440847247838974,0.897498905658722,0.0122235044836998\n             ,0.44893816113472,0.813904583454132,-0.368800550699234,0.539011299610138,0.767137050628662,-0.347803890705109\n             ,0.440850377082825,0.897497296333313,0.0122277606278658,0.440851420164108,0.897496819496155,0.0122249089181423\n             ,0.539011299610138,0.767137050628662,-0.347803890705109,0.545111775398254,0.763338685035706,-0.346651464700699\n             ,0.440852701663971,0.897496223449707,0.012224905192852,0.440850377082825,0.897497296333313,0.0122277606278658\n             ,0.545111775398254,0.763338685035706,-0.346651464700699,0.455776125192642,0.810517728328705,-0.367871195077896\n             ,0.442016541957855,0.896921515464783,0.012377162463963,0.440852701663971,0.897496223449707,0.012224905192852\n             ,0.455776125192642,0.810517728328705,-0.367871195077896,0.142660588026047,0.912153422832489,-0.384218811988831\n             ,0.122088372707367,0.992165386676788,-0.0265009626746178,0.442016541957855,0.896921515464783,0.012377162463963\n             ,0.122088372707367,0.992165386676788,-0.0265009626746178,0.142660588026047,0.912153422832489,-0.384218811988831\n             ,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.61342579126358,0.783559501171112,-0.0987081080675125\n             ,0.142660588026047,0.912153422832489,-0.384218811988831,0.137940660119057,0.361901491880417,-0.921954274177551\n             ,-0.202121838927269,0.379350662231445,-0.902906358242035,-0.513519883155823,0.72038060426712,-0.466207087039948\n             ,0.142660588026047,0.912153422832489,-0.384218811988831,0.455776125192642,0.810517728328705,-0.367871195077896\n             ,0.283052384853363,0.298188000917435,-0.911572933197021,0.137940660119057,0.361901491880417,-0.921954274177551\n             ,0.455776125192642,0.810517728328705,-0.367871195077896,0.545111775398254,0.763338685035706,-0.346651464700699\n             ,0.492568016052246,0.186314031481743,-0.850096344947815,0.283052384853363,0.298188000917435,-0.911572933197021\n             ,0.545111775398254,0.763338685035706,-0.346651464700699,0.539011299610138,0.767137050628662,-0.347803890705109\n             ,0.478817075490952,0.194986343383789,-0.85598748922348,0.492568016052246,0.186314031481743,-0.850096344947815\n             ,0.539011299610138,0.767137050628662,-0.347803890705109,0.44893816113472,0.813904583454132,-0.368800550699234\n             ,0.316425144672394,0.418457597494125,-0.851333260536194,0.478817075490952,0.194986343383789,-0.85598748922348\n             ,0.44893816113472,0.813904583454132,-0.368800550699234,0.448934882879257,0.813904881477356,-0.368803858757019\n             ,0.388678818941116,0.606405913829803,-0.693686246871948,0.316425144672394,0.418457597494125,-0.851333260536194\n             ,-0.61342579126358,0.783559501171112,-0.0987081080675125,-0.513519883155823,0.72038060426712,-0.466207087039948\n             ,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.994015336036682,-0.013940011151135,-0.108347617089748\n             ,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.202121838927269,0.379350662231445,-0.902906358242035\n             ,-0.407863765954971,-0.0665257051587105,-0.910615980625153,-0.877225399017334,-0.0474915951490402,-0.477723956108093\n             ,-0.202121838927269,0.379350662231445,-0.902906358242035,0.137940660119057,0.361901491880417,-0.921954274177551\n             ,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.407863765954971,-0.0665257051587105,-0.910615980625153\n             ,0.137940660119057,0.361901491880417,-0.921954274177551,0.283052384853363,0.298188000917435,-0.911572933197021\n             ,-0.0553795695304871,-0.388206869363785,-0.919906795024872,-0.18805918097496,-0.322835922241211,-0.927583277225494\n             ,0.283052384853363,0.298188000917435,-0.911572933197021,0.492568016052246,0.186314031481743,-0.850096344947815\n             ,0.161093965172768,-0.487442761659622,-0.858165621757507,-0.0553795695304871,-0.388206869363785,-0.919906795024872\n             ,0.492568016052246,0.186314031481743,-0.850096344947815,0.478817075490952,0.194986343383789,-0.85598748922348\n             ,0.145911514759064,-0.481736391782761,-0.864083230495453,0.161093965172768,-0.487442761659622,-0.858165621757507\n             ,0.478817075490952,0.194986343383789,-0.85598748922348,0.316425144672394,0.418457597494125,-0.851333260536194\n             ,-0.0688509345054626,-0.381582528352737,-0.921766996383667,0.145911514759064,-0.481736391782761,-0.864083230495453\n             ,-0.994015336036682,-0.013940011151135,-0.108347617089748,-0.877225399017334,-0.0474915951490402,-0.477723956108093\n             ,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.698107659816742,-0.714397788047791,-0.0477649942040443\n             ,-0.407863765954971,-0.0665257051587105,-0.910615980625153,-0.18805918097496,-0.322835922241211,-0.927583277225494\n             ,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.877225399017334,-0.0474915951490402,-0.477723956108093\n             ,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.0553795695304871,-0.388206869363785,-0.919906795024872\n             ,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.617421507835388,-0.677755653858185,-0.399296700954437\n             ,-0.0553795695304871,-0.388206869363785,-0.919906795024872,0.161093965172768,-0.487442761659622,-0.858165621757507\n             ,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.360949605703354,-0.846770226955414,-0.390762716531754\n             ,0.161093965172768,-0.487442761659622,-0.858165621757507,0.145911514759064,-0.481736391782761,-0.864083230495453\n             ,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.267079532146454,-0.890150487422943,-0.36918917298317\n             ,0.145911514759064,-0.481736391782761,-0.864083230495453,-0.0688509345054626,-0.381582528352737,-0.921766996383667\n             ,-0.365646749734879,-0.844457924365997,-0.391399145126343,-0.273802310228348,-0.887621462345123,-0.370351791381836\n             ,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.360949605703354,-0.846770226955414,-0.390762716531754\n             ,-0.442009299993515,-0.896925032138824,-0.0123796230182052,-0.698107659816742,-0.714397788047791,-0.0477649942040443\n             ,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.267079532146454,-0.890150487422943,-0.36918917298317\n             ,-0.440844893455505,-0.897499859333038,-0.0122388359159231,-0.442009299993515,-0.896925032138824,-0.0123796230182052\n             ,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.273802310228348,-0.887621462345123,-0.370351791381836\n             ,-0.440846532583237,-0.897499084472656,-0.0122378673404455,-0.440844893455505,-0.897499859333038,-0.0122388359159231\n             ,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.365646749734879,-0.844457924365997,-0.391399145126343\n             ,-0.440847545862198,-0.897498548030853,-0.0122386990115047,-0.440846532583237,-0.897499084472656,-0.0122378673404455\n             ,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.845829725265503,-0.252385228872299,0.469972103834152\n             ,-0.235922157764435,0.199316576123238,0.951111793518066,-0.421170502901077,0.887910008430481,0.185016736388206\n             ,-0.235922157764435,0.199316576123238,0.951111793518066,0.433050602674484,0.2669917345047,0.860919594764709,0.224865674972534\n             ,0.969921231269836,0.0932112112641335,-0.421170502901077,0.887910008430481,0.185016736388206,0.433050602674484\n             ,0.2669917345047,0.860919594764709,0.957085728645325,-0.0379634574055672,0.287307798862457,0.726850271224976\n             ,0.572953879833221,-0.378698468208313,0.224865674972534,0.969921231269836,0.0932112112641335,0.726850271224976\n             ,0.572953879833221,-0.378698468208313,0.957085728645325,-0.0379634574055672,0.287307798862457,0.456055998802185\n             ,-0.77651709318161,-0.434780597686768,0.24622069299221,-0.288397252559662,-0.925312042236328,0.24622069299221\n             ,-0.288397252559662,-0.925312042236328,0.456055998802185,-0.77651709318161,-0.434780597686768,-0.634028613567352\n             ,-0.730724096298218,-0.253081113100052,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.732778429985046\n             ,-0.419793635606766,-0.535545647144318,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.845829725265503\n             ,-0.252385228872299,0.469972103834152,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.944567203521729\n             ,-0.0448826812207699,0.32523587346077,-0.370245814323425,0.399501115083694,0.838639914989471,-0.349220633506775\n             ,0.932596325874329,0.0911537334322929,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.349220633506775\n             ,0.932596325874329,0.0911537334322929,-0.370245814323425,0.399501115083694,0.838639914989471,0.375980079174042\n             ,0.371540576219559,0.848879635334015,0.369482100009918,0.916309058666229,0.154469192028046,0.369482100009918\n             ,0.916309058666229,0.154469192028046,0.375980079174042,0.371540576219559,0.848879635334015,0.894815683364868\n             ,-0.12337201833725,0.429050445556641,0.928892433643341,0.347320407629013,-0.128558844327927,0.894815683364868\n             ,-0.12337201833725,0.429050445556641,0.416108936071396,-0.85736757516861,-0.302942514419556,0.484689444303513\n             ,-0.474302530288696,-0.734923958778381,0.928892433643341,0.347320407629013,-0.128558844327927,0.416108936071396\n             ,-0.85736757516861,-0.302942514419556,-0.688949525356293,-0.657936096191406,-0.304086625576019,-0.60913348197937\n             ,-0.356543242931366,-0.708401918411255,0.484689444303513,-0.474302530288696,-0.734923958778381,-0.688949525356293\n             ,-0.657936096191406,-0.304086625576019,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.884408414363861\n             ,0.372294396162033,-0.281458079814911,-0.60913348197937,-0.356543242931366,-0.708401918411255,-0.71156644821167\n             ,0.465114206075668,-0.52663266658783,-0.968230009078979,0.101840510964394,0.228383734822273,-0.409153193235397\n             ,0.62424099445343,0.665519952774048,-0.1602942943573,0.98438024520874,-0.0728094503283501,-0.1602942943573,0.98438024520874\n             ,-0.0728094503283501,-0.409153193235397,0.62424099445343,0.665519952774048,0.232475742697716,0.544684231281281\n             ,0.805775463581085,0.487440526485443,0.864142239093781,0.125139698386192,0.232475742697716,0.544684231281281\n             ,0.805775463581085,0.731430292129517,-0.0698081851005554,0.678333699703217,0.977178752422333,0.20803302526474\n             ,0.0429406240582466,0.487440526485443,0.864142239093781,0.125139698386192,0.731430292129517,-0.0698081851005554\n             ,0.678333699703217,0.338283896446228,-0.929607927799225,0.146263748407364,0.618484795093536,-0.605106949806213\n             ,-0.501320481300354,0.977178752422333,0.20803302526474,0.0429406240582466,0.338283896446228,-0.929607927799225\n             ,0.146263748407364,-0.681281208992004,-0.719342052936554,-0.135657235980034,-0.411054730415344,-0.414192497730255\n             ,-0.812082886695862,0.618484795093536,-0.605106949806213,-0.501320481300354,-0.681281208992004,-0.719342052936554\n             ,-0.135657235980034,-0.968230009078979,0.101840510964394,0.228383734822273,-0.71156644821167,0.465114206075668\n             ,-0.52663266658783,-0.411054730415344,-0.414192497730255,-0.812082886695862,-0.46152138710022,0.495068192481995\n             ,-0.73614227771759,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.469395011663437,0.732399642467499\n             ,0.493212997913361,0.00481484783813357,0.982931971549988,-0.183906376361847,-0.469395011663437,0.732399642467499\n             ,0.493212997913361,0.0926875099539757,0.587645053863525,0.803792417049408,0.554872810840607,0.810436189174652\n             ,0.187907695770264,0.00481484783813357,0.982931971549988,-0.183906376361847,0.0926875099539757,0.587645053863525\n             ,0.803792417049408,0.564271926879883,-0.0617093704640865,0.823279500007629,0.960403800010681,0.128028109669685\n             ,0.247453689575195,0.554872810840607,0.810436189174652,0.187907695770264,0.564271926879883,-0.0617093704640865\n             ,0.823279500007629,0.173397973179817,-0.937193632125854,0.302656918764114,0.640678882598877,-0.692017734050751\n             ,-0.33262899518013,0.960403800010681,0.128028109669685,0.247453689575195,0.640678882598877,-0.692017734050751\n             ,-0.33262899518013,0.173397973179817,-0.937193632125854,0.302656918764114,-0.733310759067535,-0.636212587356567\n             ,-0.239768356084824,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.733310759067535,-0.636212587356567\n             ,-0.239768356084824,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.46152138710022,0.495068192481995\n             ,-0.73614227771759,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.853244364261627,0.346652209758759\n             ,-0.389623284339905,-0.490928202867508,0.838506758213043,0.236423268914223,0.226359263062477,0.93932580947876\n             ,-0.257737308740616,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.226359263062477,0.93932580947876\n             ,-0.257737308740616,-0.490928202867508,0.838506758213043,0.236423268914223,-0.0895224064588547,0.63932603597641\n             ,0.763706743717194,0.57053416967392,0.761871993541718,0.306662291288376,0.57053416967392,0.761871993541718,0.306662291288376\n             ,-0.0895224064588547,0.63932603597641,0.763706743717194,0.200342118740082,-0.0948356613516808,0.975125253200531\n             ,0.818824291229248,0.0307636950165033,0.573219299316406,0.200342118740082,-0.0948356613516808,0.975125253200531\n             ,-0.106568887829781,-0.917000472545624,0.384386867284775,0.603054106235504,-0.796112895011902,-0.0502992123365402\n             ,0.818824291229248,0.0307636950165033,0.573219299316406,-0.106568887829781,-0.917000472545624,0.384386867284775\n             ,-0.688571929931641,-0.57403826713562,-0.443112581968308,0.0145619604736567,-0.473971128463745,-0.880419969558716\n             ,0.603054106235504,-0.796112895011902,-0.0502992123365402,-0.688571929931641,-0.57403826713562,-0.443112581968308\n             ,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.0640924125909805,0.448149740695953,-0.891658008098602\n             ,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.636273860931396,0.352563947439194,-0.686188161373138\n             ,-0.471161872148514,0.881984531879425,-0.010475798510015,0.0175805017352104,0.980271637439728,-0.196871712803841\n             ,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.0175805017352104,0.980271637439728,-0.196871712803841\n             ,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.272446572780609,0.69793826341629,0.662310421466827\n             ,0.0640470013022423,0.825317442417145,0.561025023460388,0.0640470013022423,0.825317442417145,0.561025023460388\n             ,-0.272446572780609,0.69793826341629,0.662310421466827,-0.156113177537918,-0.0394117124378681,0.986952602863312\n             ,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.156113177537918,-0.0394117124378681,0.986952602863312\n             ,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.0146371489390731,-0.971577882766724,0.236267194151878\n             ,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.344938427209854,-0.869564116001129,0.353377550840378\n             ,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.0737737640738487,-0.545523285865784,-0.834842383861542\n             ,-0.0146371489390731,-0.971577882766724,0.236267194151878,-0.560525834560394,-0.537862956523895,-0.629693746566772\n             ,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.0483600646257401,0.41675278544426,-0.907732546329498\n             ,-0.0737737640738487,-0.545523285865784,-0.834842383861542,-0.126118883490562,0.0425354726612568,0.991102814674377\n             ,-0.488242149353027,0.767777740955353,0.414893865585327,-0.985833287239075,0.163165256381035,0.0388573855161667\n             ,-0.693171083927155,-0.380507975816727,0.612149894237518,0.21278840303421,0.936659038066864,0.278192192316055\n             ,-0.488242149353027,0.767777740955353,0.414893865585327,-0.126118883490562,0.0425354726612568,0.991102814674377\n             ,0.426090598106384,0.13983453810215,0.89380818605423,0.732098400592804,0.597899973392487,-0.32641613483429,0.21278840303421\n             ,0.936659038066864,0.278192192316055,0.426090598106384,0.13983453810215,0.89380818605423,0.951123833656311,-0.0359408818185329\n             ,0.306711047887802,0.300222218036652,-0.191066533327103,-0.934537410736084,0.732098400592804,0.597899973392487\n             ,-0.32641613483429,0.951123833656311,-0.0359408818185329,0.306711047887802,0.565304636955261,-0.708869636058807\n             ,-0.421822786331177,-0.513763785362244,-0.837060868740082,-0.188084691762924,-0.686947405338287,-0.371219843626022\n             ,-0.624739229679108,0.300222218036652,-0.191066533327103,-0.934537410736084,0.565304636955261,-0.708869636058807\n             ,-0.421822786331177,-0.693171083927155,-0.380507975816727,0.612149894237518,-0.985833287239075,0.163165256381035\n             ,0.0388573855161667,-0.686947405338287,-0.371219843626022,-0.624739229679108,-0.513763785362244,-0.837060868740082\n             ,-0.188084691762924,0.839519679546356,-0.36930912733078,0.398519098758698,0.256522864103317,0.500971019268036\n             ,0.826573669910431,-0.378572434186935,0.294946253299713,0.877319574356079,-0.584547698497772,-0.607527673244476\n             ,0.537786364555359,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.622146844863892,-0.293455481529236\n             ,-0.725821733474731,0.408187568187714,-0.202498286962509,-0.890155792236328,0.839519679546356,-0.36930912733078\n             ,0.398519098758698,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.226359263062477,0.93932580947876\n             ,-0.257737308740616,-0.129192128777504,0.97855806350708,-0.160416796803474,-0.361195623874664,0.398085296154022\n             ,-0.843247175216675,0.226359263062477,0.93932580947876,-0.257737308740616,0.57053416967392,0.761871993541718\n             ,0.306662291288376,0.158035054802895,0.827060580253601,0.539440214633942,-0.129192128777504,0.97855806350708\n             ,-0.160416796803474,0.57053416967392,0.761871993541718,0.306662291288376,0.818824291229248,0.0307636950165033\n             ,0.573219299316406,0.379477560520172,-0.0227062478661537,0.924922287464142,0.158035054802895,0.827060580253601\n             ,0.539440214633942,0.818824291229248,0.0307636950165033,0.573219299316406,0.603054106235504,-0.796112895011902\n             ,-0.0502992123365402,0.143845021724701,-0.97483503818512,0.170309022068977,0.379477560520172,-0.0227062478661537\n             ,0.924922287464142,0.143845021724701,-0.97483503818512,0.170309022068977,0.603054106235504,-0.796112895011902\n             ,-0.0502992123365402,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.282981604337692,-0.529688954353333\n             ,-0.799594283103943,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.0640924125909805,0.448149740695953\n             ,-0.891658008098602,-0.361195623874664,0.398085296154022,-0.843247175216675,-0.282981604337692,-0.529688954353333\n             ,-0.799594283103943,-0.129192128777504,0.97855806350708,-0.160416796803474,-0.471161872148514,0.881984531879425\n             ,-0.010475798510015,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.361195623874664,0.398085296154022\n             ,-0.843247175216675,0.158035054802895,0.827060580253601,0.539440214633942,-0.272446572780609,0.69793826341629\n             ,0.662310421466827,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.129192128777504,0.97855806350708\n             ,-0.160416796803474,0.379477560520172,-0.0227062478661537,0.924922287464142,-0.156113177537918,-0.0394117124378681\n             ,0.986952602863312,-0.272446572780609,0.69793826341629,0.662310421466827,0.158035054802895,0.827060580253601\n             ,0.539440214633942,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.156113177537918,-0.0394117124378681\n             ,0.986952602863312,0.379477560520172,-0.0227062478661537,0.924922287464142,0.143845021724701,-0.97483503818512\n             ,0.170309022068977,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.344938427209854,-0.869564116001129\n             ,0.353377550840378,0.143845021724701,-0.97483503818512,0.170309022068977,-0.282981604337692,-0.529688954353333\n             ,-0.799594283103943,-0.361195623874664,0.398085296154022,-0.843247175216675,-0.636273860931396,0.352563947439194\n             ,-0.686188161373138,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.282981604337692,-0.529688954353333\n             ,-0.799594283103943,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.421170502901077,0.887910008430481\n             ,0.185016736388206,-0.466424465179443,0.73600161075592,0.490662693977356,-0.991045475006104,0.116085380315781\n             ,0.0659778565168381,-0.421170502901077,0.887910008430481,0.185016736388206,0.224865674972534,0.969921231269836\n             ,0.0932112112641335,0.32935905456543,0.802997291088104,0.496707141399384,-0.466424465179443,0.73600161075592\n             ,0.490662693977356,0.32935905456543,0.802997291088104,0.496707141399384,0.224865674972534,0.969921231269836,0.0932112112641335\n             ,0.726850271224976,0.572953879833221,-0.378698468208313,0.955747485160828,0.277235507965088,-0.0984230935573578\n             ,0.955747485160828,0.277235507965088,-0.0984230935573578,0.726850271224976,0.572953879833221,-0.378698468208313\n             ,0.24622069299221,-0.288397252559662,-0.925312042236328,0.266901016235352,-0.573494374752045,-0.774511456489563\n             ,0.266901016235352,-0.573494374752045,-0.774511456489563,0.24622069299221,-0.288397252559662,-0.925312042236328\n             ,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.733418405056,-0.496127247810364,-0.464709877967834\n             ,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.961783766746521,0.263442039489746,-0.0746343955397606\n             ,-0.991045475006104,0.116085380315781,0.0659778565168381,-0.733418405056,-0.496127247810364,-0.464709877967834\n             ,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.884408414363861,0.372294396162033,-0.281458079814911\n             ,-0.349220633506775,0.932596325874329,0.0911537334322929,-0.408735007047653,0.821314215660095,0.397968202829361\n             ,-0.466424465179443,0.73600161075592,0.490662693977356,-0.370245814323425,0.399501115083694,0.838639914989471\n             ,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.991045475006104,0.116085380315781,0.0659778565168381\n             ,-0.349220633506775,0.932596325874329,0.0911537334322929,0.369482100009918,0.916309058666229,0.154469192028046\n             ,0.314681202173233,0.790566682815552,0.525338053703308,-0.408735007047653,0.821314215660095,0.397968202829361\n             ,0.32935905456543,0.802997291088104,0.496707141399384,0.375980079174042,0.371540576219559,0.848879635334015,-0.370245814323425\n             ,0.399501115083694,0.838639914989471,-0.466424465179443,0.73600161075592,0.490662693977356,0.369482100009918\n             ,0.916309058666229,0.154469192028046,0.928892433643341,0.347320407629013,-0.128558844327927,0.935888707637787\n             ,0.150985181331635,0.318301498889923,0.314681202173233,0.790566682815552,0.525338053703308,0.955747485160828\n             ,0.277235507965088,-0.0984230935573578,0.894815683364868,-0.12337201833725,0.429050445556641,0.375980079174042\n             ,0.371540576219559,0.848879635334015,0.32935905456543,0.802997291088104,0.496707141399384,0.928892433643341,0.347320407629013\n             ,-0.128558844327927,0.484689444303513,-0.474302530288696,-0.734923958778381,0.477653324604034,-0.817450523376465\n             ,-0.321903645992279,0.935888707637787,0.150985181331635,0.318301498889923,0.416108936071396,-0.85736757516861\n             ,-0.302942514419556,0.894815683364868,-0.12337201833725,0.429050445556641,0.955747485160828,0.277235507965088\n             ,-0.0984230935573578,0.266901016235352,-0.573494374752045,-0.774511456489563,0.477653324604034,-0.817450523376465\n             ,-0.321903645992279,0.484689444303513,-0.474302530288696,-0.734923958778381,-0.60913348197937,-0.356543242931366\n             ,-0.708401918411255,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.688949525356293,-0.657936096191406\n             ,-0.304086625576019,0.416108936071396,-0.85736757516861,-0.302942514419556,0.266901016235352,-0.573494374752045\n             ,-0.774511456489563,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.60913348197937,-0.356543242931366\n             ,-0.708401918411255,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.969522476196289,0.24116288125515\n             ,-0.043204452842474,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.991045475006104,0.116085380315781\n             ,0.0659778565168381,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.688949525356293,-0.657936096191406\n             ,-0.304086625576019,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.878820657730103,0.367129892110825\n             ,-0.304778426885605,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.1602942943573,0.98438024520874,-0.0728094503283501\n             ,-0.327859699726105,0.917791128158569,0.223981082439423,-0.408735007047653,0.821314215660095,0.397968202829361\n             ,-0.409153193235397,0.62424099445343,0.665519952774048,-0.968230009078979,0.101840510964394,0.228383734822273\n             ,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.1602942943573,0.98438024520874,-0.0728094503283501\n             ,0.487440526485443,0.864142239093781,0.125139698386192,0.318696260452271,0.794055461883545,0.517598927021027\n             ,-0.327859699726105,0.917791128158569,0.223981082439423,0.314681202173233,0.790566682815552,0.525338053703308\n             ,0.232475742697716,0.544684231281281,0.805775463581085,-0.409153193235397,0.62424099445343,0.665519952774048\n             ,-0.408735007047653,0.821314215660095,0.397968202829361,0.487440526485443,0.864142239093781,0.125139698386192\n             ,0.977178752422333,0.20803302526474,0.0429406240582466,0.865680992603302,0.0555743537843227,0.497501730918884\n             ,0.318696260452271,0.794055461883545,0.517598927021027,0.935888707637787,0.150985181331635,0.318301498889923\n             ,0.731430292129517,-0.0698081851005554,0.678333699703217,0.232475742697716,0.544684231281281,0.805775463581085\n             ,0.314681202173233,0.790566682815552,0.525338053703308,0.977178752422333,0.20803302526474,0.0429406240582466\n             ,0.618484795093536,-0.605106949806213,-0.501320481300354,0.482842773199081,-0.868827641010284,-0.109550587832928\n             ,0.865680992603302,0.0555743537843227,0.497501730918884,0.338283896446228,-0.929607927799225,0.146263748407364\n             ,0.731430292129517,-0.0698081851005554,0.678333699703217,0.935888707637787,0.150985181331635,0.318301498889923\n             ,0.477653324604034,-0.817450523376465,-0.321903645992279,0.482842773199081,-0.868827641010284,-0.109550587832928\n             ,0.618484795093536,-0.605106949806213,-0.501320481300354,-0.411054730415344,-0.414192497730255,-0.812082886695862\n             ,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.681281208992004,-0.719342052936554,-0.135657235980034\n             ,0.338283896446228,-0.929607927799225,0.146263748407364,0.477653324604034,-0.817450523376465,-0.321903645992279\n             ,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.411054730415344,-0.414192497730255,-0.812082886695862\n             ,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.878820657730103,0.367129892110825,-0.304778426885605\n             ,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.968230009078979,0.101840510964394,0.228383734822273\n             ,-0.681281208992004,-0.719342052936554,-0.135657235980034,-0.699752986431122,-0.557938694953918,-0.446150362491608\n             ,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.46152138710022,0.495068192481995,-0.73614227771759\n             ,0.00481484783813357,0.982931971549988,-0.183906376361847,-0.258809417486191,0.965757608413696,0.0181634556502104\n             ,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.327859699726105,0.917791128158569,0.223981082439423\n             ,-0.469395011663437,0.732399642467499,0.493212997913361,-0.971816718578339,0.234788149595261,-0.0211378261446953\n             ,-0.878820657730103,0.367129892110825,-0.304778426885605,0.00481484783813357,0.982931971549988,-0.183906376361847\n             ,0.554872810840607,0.810436189174652,0.187907695770264,0.248662516474724,0.809659063816071,0.531619369983673\n             ,-0.258809417486191,0.965757608413696,0.0181634556502104,0.318696260452271,0.794055461883545,0.517598927021027\n             ,0.0926875099539757,0.587645053863525,0.803792417049408,-0.469395011663437,0.732399642467499,0.493212997913361\n             ,-0.327859699726105,0.917791128158569,0.223981082439423,0.554872810840607,0.810436189174652,0.187907695770264\n             ,0.960403800010681,0.128028109669685,0.247453689575195,0.678723812103271,-0.00691590458154678,0.734361052513123\n             ,0.248662516474724,0.809659063816071,0.531619369983673,0.865680992603302,0.0555743537843227,0.497501730918884\n             ,0.564271926879883,-0.0617093704640865,0.823279500007629,0.0926875099539757,0.587645053863525,0.803792417049408\n             ,0.318696260452271,0.794055461883545,0.517598927021027,0.678723812103271,-0.00691590458154678,0.734361052513123\n             ,0.960403800010681,0.128028109669685,0.247453689575195,0.640678882598877,-0.692017734050751,-0.33262899518013\n             ,0.291824638843536,-0.956135869026184,0.0253480579704046,0.173397973179817,-0.937193632125854,0.302656918764114\n             ,0.564271926879883,-0.0617093704640865,0.823279500007629,0.865680992603302,0.0555743537843227,0.497501730918884\n             ,0.482842773199081,-0.868827641010284,-0.109550587832928,0.291824638843536,-0.956135869026184,0.0253480579704046\n             ,0.640678882598877,-0.692017734050751,-0.33262899518013,-0.267235428094864,-0.431134343147278,-0.861805319786072\n             ,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.733310759067535,-0.636212587356567,-0.239768356084824\n             ,0.173397973179817,-0.937193632125854,0.302656918764114,0.482842773199081,-0.868827641010284,-0.109550587832928\n             ,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.267235428094864,-0.431134343147278,-0.861805319786072\n             ,-0.46152138710022,0.495068192481995,-0.73614227771759,-0.672615647315979,0.435778170824051,-0.598068177700043\n             ,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.971816718578339,0.234788149595261,-0.0211378261446953\n             ,-0.733310759067535,-0.636212587356567,-0.239768356084824,-0.610901474952698,-0.556556701660156,-0.563066601753235\n             ,-0.878820657730103,0.367129892110825,-0.304778426885605,-0.258809417486191,0.965757608413696,0.0181634556502104\n             ,-0.490928202867508,0.838506758213043,0.236423268914223,-0.853244364261627,0.346652209758759,-0.389623284339905\n             ,-0.672615647315979,0.435778170824051,-0.598068177700043,0.248662516474724,0.809659063816071,0.531619369983673\n             ,-0.0895224064588547,0.63932603597641,0.763706743717194,-0.490928202867508,0.838506758213043,0.236423268914223\n             ,-0.258809417486191,0.965757608413696,0.0181634556502104,0.678723812103271,-0.00691590458154678,0.734361052513123\n             ,0.200342118740082,-0.0948356613516808,0.975125253200531,-0.0895224064588547,0.63932603597641,0.763706743717194\n             ,0.248662516474724,0.809659063816071,0.531619369983673,-0.106568887829781,-0.917000472545624,0.384386867284775\n             ,0.200342118740082,-0.0948356613516808,0.975125253200531,0.678723812103271,-0.00691590458154678,0.734361052513123\n             ,0.291824638843536,-0.956135869026184,0.0253480579704046,-0.688571929931641,-0.57403826713562,-0.443112581968308\n             ,-0.106568887829781,-0.917000472545624,0.384386867284775,0.291824638843536,-0.956135869026184,0.0253480579704046\n             ,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.853244364261627,0.346652209758759,-0.389623284339905\n             ,-0.688571929931641,-0.57403826713562,-0.443112581968308,-0.507272720336914,-0.507041871547699,-0.696837842464447\n             ,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.41831374168396,0.542322099208832,0.728629112243652\n             ,-0.235922157764435,0.199316576123238,0.951111793518066,-0.845829725265503,-0.252385228872299,0.469972103834152\n             ,-0.976834237575531,-0.0582810156047344,0.205908060073853,0.374769628047943,0.711422443389893,0.594496309757233\n             ,0.433050602674484,0.2669917345047,0.860919594764709,-0.235922157764435,0.199316576123238,0.951111793518066,-0.41831374168396\n             ,0.542322099208832,0.728629112243652,0.957085728645325,-0.0379634574055672,0.287307798862457,0.433050602674484\n             ,0.2669917345047,0.860919594764709,0.374769628047943,0.711422443389893,0.594496309757233,0.948985993862152,0.294174909591675\n             ,-0.113519780337811,0.456055998802185,-0.77651709318161,-0.434780597686768,0.957085728645325,-0.0379634574055672\n             ,0.287307798862457,0.948985993862152,0.294174909591675,-0.113519780337811,0.373983144760132,-0.495919108390808\n             ,-0.783709645271301,-0.634028613567352,-0.730724096298218,-0.253081113100052,0.456055998802185,-0.77651709318161\n             ,-0.434780597686768,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.678203999996185,-0.559847712516785\n             ,-0.476035594940186,-0.976834237575531,-0.0582810156047344,0.205908060073853,-0.845829725265503,-0.252385228872299\n             ,0.469972103834152,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.678203999996185,-0.559847712516785\n             ,-0.476035594940186,-0.238327190279961,0.167034506797791,0.956712901592255,-0.126118883490562,0.0425354726612568\n             ,0.991102814674377,-0.693171083927155,-0.380507975816727,0.612149894237518,-0.871865928173065,-0.182605341076851\n             ,0.454428285360336,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.488242149353027,0.767777740955353\n             ,0.414893865585327,-0.41831374168396,0.542322099208832,0.728629112243652,-0.976834237575531,-0.0582810156047344\n             ,0.205908060073853,0.359920799732208,0.294513046741486,0.88527911901474,0.426090598106384,0.13983453810215,0.89380818605423\n             ,-0.126118883490562,0.0425354726612568,0.991102814674377,-0.238327190279961,0.167034506797791,0.956712901592255\n             ,-0.488242149353027,0.767777740955353,0.414893865585327,0.21278840303421,0.936659038066864,0.278192192316055\n             ,0.374769628047943,0.711422443389893,0.594496309757233,-0.41831374168396,0.542322099208832,0.728629112243652\n             ,0.971750199794769,0.155082061886787,0.177907571196556,0.951123833656311,-0.0359408818185329,0.306711047887802\n             ,0.426090598106384,0.13983453810215,0.89380818605423,0.359920799732208,0.294513046741486,0.88527911901474,0.21278840303421\n             ,0.936659038066864,0.278192192316055,0.732098400592804,0.597899973392487,-0.32641613483429,0.948985993862152\n             ,0.294174909591675,-0.113519780337811,0.374769628047943,0.711422443389893,0.594496309757233,0.565304636955261\n             ,-0.708869636058807,-0.421822786331177,0.951123833656311,-0.0359408818185329,0.306711047887802,0.971750199794769\n             ,0.155082061886787,0.177907571196556,0.502565324306488,-0.459530532360077,-0.732297599315643,0.948985993862152\n             ,0.294174909591675,-0.113519780337811,0.732098400592804,0.597899973392487,-0.32641613483429,0.300222218036652\n             ,-0.191066533327103,-0.934537410736084,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.513763785362244\n             ,-0.837060868740082,-0.188084691762924,0.565304636955261,-0.708869636058807,-0.421822786331177,0.502565324306488\n             ,-0.459530532360077,-0.732297599315643,-0.632987320423126,-0.605237662792206,-0.482715725898743,0.373983144760132\n             ,-0.495919108390808,-0.783709645271301,0.300222218036652,-0.191066533327103,-0.934537410736084,-0.686947405338287\n             ,-0.371219843626022,-0.624739229679108,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.871865928173065\n             ,-0.182605341076851,0.454428285360336,-0.693171083927155,-0.380507975816727,0.612149894237518,-0.513763785362244\n             ,-0.837060868740082,-0.188084691762924,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.686947405338287\n             ,-0.371219843626022,-0.624739229679108,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.976834237575531\n             ,-0.0582810156047344,0.205908060073853,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.871865928173065\n             ,-0.182605341076851,0.454428285360336,-0.976081073284149,0.0319094844162464,0.215052559971809,-0.378572434186935\n             ,0.294946253299713,0.877319574356079,-0.238327190279961,0.167034506797791,0.956712901592255,-0.378572434186935\n             ,0.294946253299713,0.877319574356079,0.256522864103317,0.500971019268036,0.826573669910431,0.359920799732208\n             ,0.294513046741486,0.88527911901474,-0.238327190279961,0.167034506797791,0.956712901592255,0.256522864103317\n             ,0.500971019268036,0.826573669910431,0.916088342666626,0.400877177715302,0.00892047397792339,0.971750199794769\n             ,0.155082061886787,0.177907571196556,0.359920799732208,0.294513046741486,0.88527911901474,0.916088342666626,0.400877177715302\n             ,0.00892047397792339,0.408187568187714,-0.202498286962509,-0.890155792236328,0.502565324306488,-0.459530532360077\n             ,-0.732297599315643,0.971750199794769,0.155082061886787,0.177907571196556,0.502565324306488,-0.459530532360077\n             ,-0.732297599315643,0.408187568187714,-0.202498286962509,-0.890155792236328,-0.622146844863892,-0.293455481529236\n             ,-0.725821733474731,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.632987320423126,-0.605237662792206\n             ,-0.482715725898743,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.976081073284149,0.0319094844162464\n             ,0.215052559971809,-0.871865928173065,-0.182605341076851,0.454428285360336,0.957568049430847,0.202899873256683\n             ,-0.204682797193527,0.497125834226608,0.858945310115814,0.122795671224594,0.373975813388824,0.180082246661186\n             ,0.909787058830261,0.883933007717133,-0.306944608688354,0.352771013975143,0.373975813388824,0.180082246661186\n             ,0.909787058830261,0.497125834226608,0.858945310115814,0.122795671224594,-0.14895835518837,0.98171204328537,0.118544928729534\n             ,-0.295474290847778,0.289970576763153,0.910281300544739,-0.295474290847778,0.289970576763153,0.910281300544739\n             ,-0.14895835518837,0.98171204328537,0.118544928729534,-0.733866095542908,0.619026124477386,-0.279727041721344\n             ,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.733866095542908,0.619026124477386,-0.279727041721344\n             ,-0.386270940303802,-0.268448829650879,-0.88245677947998,-0.558293402194977,-0.744525730609894,-0.366046398878098\n             ,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.386270940303802,-0.268448829650879,-0.88245677947998\n             ,0.626136362552643,-0.462657570838928,-0.627615451812744,0.547039151191711,-0.767979085445404,-0.333100914955139\n             ,-0.558293402194977,-0.744525730609894,-0.366046398878098,0.626136362552643,-0.462657570838928,-0.627615451812744\n             ,0.957568049430847,0.202899873256683,-0.204682797193527,0.883933007717133,-0.306944608688354,0.352771013975143\n             ,0.547039151191711,-0.767979085445404,-0.333100914955139,0.975085556507111,-0.105434238910675,0.195171296596527\n             ,0.86001181602478,0.317273110151291,-0.399646580219269,0.416134297847748,0.908453166484833,0.0393080599606037\n             ,0.50421130657196,0.371916502714157,0.779390156269073,0.416134297847748,0.908453166484833,0.0393080599606037\n             ,-0.287073612213135,0.937016367912292,0.198970049619675,-0.234096929430962,0.390781313180923,0.890218317508698\n             ,0.50421130657196,0.371916502714157,0.779390156269073,-0.287073612213135,0.937016367912292,0.198970049619675\n             ,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.834793627262115,-0.068818561732769,0.546245038509369\n             ,-0.234096929430962,0.390781313180923,0.890218317508698,-0.834793627262115,-0.068818561732769,0.546245038509369\n             ,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.608099102973938,-0.439832001924515,-0.660880744457245\n             ,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.506093978881836,-0.828284025192261,-0.240446254611015\n             ,-0.608099102973938,-0.439832001924515,-0.660880744457245,0.484535843133926,-0.391038775444031,-0.782504737377167\n             ,0.599041819572449,-0.698567867279053,-0.391346126794815,0.599041819572449,-0.698567867279053,-0.391346126794815\n             ,0.484535843133926,-0.391038775444031,-0.782504737377167,0.86001181602478,0.317273110151291,-0.399646580219269\n             ,0.975085556507111,-0.105434238910675,0.195171296596527,0.661870062351227,0.421795666217804,-0.619690597057343\n             ,0.210457503795624,0.972685754299164,-0.0979291051626205,0.533453047275543,0.59451025724411,0.601652204990387\n             ,0.994639039039612,0.0399277433753014,0.0953883677721024,0.210457503795624,0.972685754299164,-0.0979291051626205\n             ,-0.410943269729614,0.892482936382294,0.186010345816612,-0.0871332660317421,0.554765582084656,0.827431499958038\n             ,0.533453047275543,0.59451025724411,0.601652204990387,-0.0871332660317421,0.554765582084656,0.827431499958038\n             ,-0.410943269729614,0.892482936382294,0.186010345816612,-0.947485268115997,0.26874190568924,0.1733478307724,-0.636269569396973\n             ,-0.0266684051603079,0.771005690097809,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.947485268115997\n             ,0.26874190568924,0.1733478307724,-0.717132270336151,-0.562979400157928,-0.410822957754135,-0.373132437467575\n             ,-0.907169759273529,0.194461092352867,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.717132270336151\n             ,-0.562979400157928,-0.410822957754135,0.271069228649139,-0.435710102319717,-0.858299553394318,0.610304296016693\n             ,-0.760079562664032,-0.223176524043083,0.610304296016693,-0.760079562664032,-0.223176524043083,0.271069228649139\n             ,-0.435710102319717,-0.858299553394318,0.661870062351227,0.421795666217804,-0.619690597057343,0.994639039039612\n             ,0.0399277433753014,0.0953883677721024,0.38824450969696,0.468270719051361,-0.793718278408051,0.0321094393730164\n             ,0.982071399688721,-0.185754418373108,0.576588332653046,0.699405252933502,0.422348409891129,0.972901284694672\n             ,0.173448488116264,-0.15290105342865,0.576588332653046,0.699405252933502,0.422348409891129,0.0321094393730164\n             ,0.982071399688721,-0.185754418373108,-0.472547024488449,0.842842221260071,0.257519453763962,0.0535213947296143\n             ,0.588878512382507,0.806447505950928,0.0535213947296143,0.588878512382507,0.806447505950928,-0.472547024488449\n             ,0.842842221260071,0.257519453763962,-0.908354461193085,0.186973229050636,0.374076366424561,-0.450931012630463\n             ,-0.0296851322054863,0.892065048217773,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.908354461193085\n             ,0.186973229050636,0.374076366424561,-0.721794605255127,-0.649047315120697,-0.240312546491623,-0.189478844404221\n             ,-0.925744891166687,0.327252507209778,-0.721794605255127,-0.649047315120697,-0.240312546491623,0.121086686849594\n             ,-0.443384885787964,-0.888114750385284,0.652944087982178,-0.679937779903412,-0.333689540624619,-0.189478844404221\n             ,-0.925744891166687,0.327252507209778,0.652944087982178,-0.679937779903412,-0.333689540624619,0.121086686849594\n             ,-0.443384885787964,-0.888114750385284,0.38824450969696,0.468270719051361,-0.793718278408051,0.972901284694672\n             ,0.173448488116264,-0.15290105342865,0.813007533550262,0.294095903635025,-0.502519965171814,-0.0286615137010813\n             ,0.447031855583191,-0.894058763980865,-0.199642360210419,0.952765345573425,-0.228869169950485,0.569939315319061\n             ,0.805042445659637,0.164547294378281,-0.199642360210419,0.952765345573425,-0.228869169950485,-0.475066125392914\n             ,0.794856011867523,0.37751305103302,0.231555417180061,0.629199266433716,0.741950392723084,0.569939315319061,0.805042445659637\n             ,0.164547294378281,-0.475066125392914,0.794856011867523,0.37751305103302,-0.730549097061157,0.0796399638056755\n             ,0.67820018529892,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.231555417180061,0.629199266433716\n             ,0.741950392723084,-0.0726617649197578,-0.0862219110131264,0.993622660636902,-0.730549097061157,0.0796399638056755\n             ,0.67820018529892,-0.65307891368866,-0.756489455699921,0.0348084531724453,0.0996505841612816,-0.92350834608078\n             ,0.370408058166504,0.0996505841612816,-0.92350834608078,0.370408058166504,-0.65307891368866,-0.756489455699921\n             ,0.0348084531724453,-0.162778183817863,-0.468375027179718,-0.86840546131134,0.585191905498505,-0.614215075969696\n             ,-0.529424488544464,0.585191905498505,-0.614215075969696,-0.529424488544464,-0.162778183817863,-0.468375027179718\n             ,-0.86840546131134,-0.0286615137010813,0.447031855583191,-0.894058763980865,0.813007533550262,0.294095903635025\n             ,-0.502519965171814,0.558855295181274,0.314870893955231,-0.767161726951599,-0.0483600646257401,0.41675278544426\n             ,-0.907732546329498,0.0175805017352104,0.980271637439728,-0.196871712803841,0.519844651222229,0.850727140903473\n             ,-0.0776200741529465,0.0175805017352104,0.980271637439728,-0.196871712803841,0.0640470013022423,0.825317442417145\n             ,0.561025023460388,0.402456730604172,0.676650583744049,0.616581320762634,0.519844651222229,0.850727140903473\n             ,-0.0776200741529465,0.0640470013022423,0.825317442417145,0.561025023460388,0.0680289566516876,0.0137546937912703\n             ,0.997588515281677,0.284913867712021,-0.0533209033310413,0.957068920135498,0.402456730604172,0.676650583744049\n             ,0.616581320762634,0.284913867712021,-0.0533209033310413,0.957068920135498,0.0680289566516876,0.0137546937912703\n             ,0.997588515281677,-0.0146371489390731,-0.971577882766724,0.236267194151878,0.334185361862183,-0.890982747077942\n             ,0.307359427213669,0.334185361862183,-0.890982747077942,0.307359427213669,-0.0146371489390731,-0.971577882766724\n             ,0.236267194151878,-0.0737737640738487,-0.545523285865784,-0.834842383861542,0.435699939727783,-0.569284319877625\n             ,-0.697195053100586,0.435699939727783,-0.569284319877625,-0.697195053100586,-0.0737737640738487,-0.545523285865784\n             ,-0.834842383861542,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.558855295181274,0.314870893955231\n             ,-0.767161726951599,0.260944664478302,0.0303234942257404,0.964877367019653,0.744088768959045,-0.425844013690948\n             ,0.514770567417145,0.990352332592011,0.100834503769875,-0.0950506180524826,0.586896598339081,0.733868896961212\n             ,0.342036306858063,-0.114175498485565,0.946973264217377,0.300342559814453,-0.292137324810028,0.162486374378204\n             ,0.942472279071808,0.260944664478302,0.0303234942257404,0.964877367019653,0.586896598339081,0.733868896961212\n             ,0.342036306858063,-0.730445027351379,0.644031345844269,-0.227318435907364,-0.901480376720428,0.0224926322698593\n             ,0.432235211133957,-0.292137324810028,0.162486374378204,0.942472279071808,-0.114175498485565,0.946973264217377\n             ,0.300342559814453,-0.434810429811478,-0.167877942323685,-0.884735524654388,-0.660339951515198,-0.670212745666504\n             ,-0.338771462440491,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.730445027351379,0.644031345844269\n             ,-0.227318435907364,0.430197030305862,-0.866838395595551,-0.252034991979599,-0.660339951515198,-0.670212745666504\n             ,-0.338771462440491,-0.434810429811478,-0.167877942323685,-0.884735524654388,0.571836888790131,-0.410920888185501\n             ,-0.710032820701599,0.744088768959045,-0.425844013690948,0.514770567417145,0.430197030305862,-0.866838395595551\n             ,-0.252034991979599,0.571836888790131,-0.410920888185501,-0.710032820701599,0.990352332592011,0.100834503769875\n             ,-0.0950506180524826,-0.799655735492706,-0.317605823278427,0.509585380554199,0.612414479255676,-0.645280599594116\n             ,0.456685394048691,0.511097252368927,0.266881614923477,0.817039608955383,-0.110857367515564,0.512554824352264\n             ,0.85146826505661,0.612414479255676,-0.645280599594116,0.456685394048691,-0.799655735492706,-0.317605823278427\n             ,0.509585380554199,-0.536313056945801,-0.172707200050354,-0.826160073280334,0.49901670217514,-0.328819900751114\n             ,-0.801785349845886,-0.0286615137010813,0.447031855583191,-0.894058763980865,0.268526494503021,0.378220826387405\n             ,-0.885913372039795,0.167536497116089,0.969197690486908,-0.18051965534687,-0.199642360210419,0.952765345573425\n             ,-0.228869169950485,-0.199642360210419,0.952765345573425,-0.228869169950485,0.167536497116089,0.969197690486908\n             ,-0.18051965534687,-0.0316924452781677,0.833044230937958,0.55229789018631,-0.475066125392914,0.794856011867523\n             ,0.37751305103302,-0.475066125392914,0.794856011867523,0.37751305103302,-0.0316924452781677,0.833044230937958\n             ,0.55229789018631,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.730549097061157,0.0796399638056755\n             ,0.67820018529892,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.25203549861908,-0.00277848681434989\n             ,0.967713952064514,-0.18044501543045,-0.964608788490295,0.19227434694767,-0.65307891368866,-0.756489455699921\n             ,0.0348084531724453,-0.18044501543045,-0.964608788490295,0.19227434694767,0.138857930898666,-0.542990744113922\n             ,-0.828178465366364,-0.162778183817863,-0.468375027179718,-0.86840546131134,-0.65307891368866,-0.756489455699921\n             ,0.0348084531724453,-0.162778183817863,-0.468375027179718,-0.86840546131134,0.138857930898666,-0.542990744113922\n             ,-0.828178465366364,0.268526494503021,0.378220826387405,-0.885913372039795,-0.0286615137010813,0.447031855583191\n             ,-0.894058763980865,0.167536497116089,0.969197690486908,-0.18051965534687,0.268526494503021,0.378220826387405\n             ,-0.885913372039795,0.558855295181274,0.314870893955231,-0.767161726951599,0.519844651222229,0.850727140903473\n             ,-0.0776200741529465,-0.0316924452781677,0.833044230937958,0.55229789018631,0.167536497116089,0.969197690486908\n             ,-0.18051965534687,0.519844651222229,0.850727140903473,-0.0776200741529465,0.402456730604172,0.676650583744049\n             ,0.616581320762634,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.0316924452781677,0.833044230937958\n             ,0.55229789018631,0.402456730604172,0.676650583744049,0.616581320762634,0.284913867712021,-0.0533209033310413\n             ,0.957068920135498,0.334185361862183,-0.890982747077942,0.307359427213669,-0.18044501543045,-0.964608788490295\n             ,0.19227434694767,-0.25203549861908,-0.00277848681434989,0.967713952064514,0.284913867712021,-0.0533209033310413\n             ,0.957068920135498,0.435699939727783,-0.569284319877625,-0.697195053100586,0.138857930898666,-0.542990744113922\n             ,-0.828178465366364,-0.18044501543045,-0.964608788490295,0.19227434694767,0.334185361862183,-0.890982747077942\n             ,0.307359427213669,0.268526494503021,0.378220826387405,-0.885913372039795,0.138857930898666,-0.542990744113922\n             ,-0.828178465366364,0.435699939727783,-0.569284319877625,-0.697195053100586,0.558855295181274,0.314870893955231\n             ,-0.767161726951599,0.957568049430847,0.202899873256683,-0.204682797193527,0.996209383010864,0.0533985421061516\n             ,-0.0686690136790276,0.573537588119507,0.703198969364166,0.420197457075119,0.497125834226608,0.858945310115814\n             ,0.122795671224594,0.497125834226608,0.858945310115814,0.122795671224594,0.573537588119507,0.703198969364166\n             ,0.420197457075119,-0.208385854959488,0.819956362247467,0.533148169517517,-0.14895835518837,0.98171204328537\n             ,0.118544928729534,-0.208385854959488,0.819956362247467,0.533148169517517,-0.941002309322357,0.337059259414673\n             ,0.0300944726914167,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.14895835518837,0.98171204328537\n             ,0.118544928729534,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.404285073280334,-0.552336990833282\n             ,-0.72902500629425,-0.386270940303802,-0.268448829650879,-0.88245677947998,-0.733866095542908,0.619026124477386\n             ,-0.279727041721344,-0.404285073280334,-0.552336990833282,-0.72902500629425,0.631527423858643,-0.539189040660858\n             ,-0.557178795337677,0.626136362552643,-0.462657570838928,-0.627615451812744,-0.386270940303802,-0.268448829650879\n             ,-0.88245677947998,0.626136362552643,-0.462657570838928,-0.627615451812744,0.631527423858643,-0.539189040660858\n             ,-0.557178795337677,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.957568049430847,0.202899873256683\n             ,-0.204682797193527,0.968059420585632,0.180046543478966,-0.17448265850544,0.509348154067993,0.792352139949799\n             ,0.335771501064301,0.416134297847748,0.908453166484833,0.0393080599606037,0.86001181602478,0.317273110151291\n             ,-0.399646580219269,0.573537588119507,0.703198969364166,0.420197457075119,0.996209383010864,0.0533985421061516\n             ,-0.0686690136790276,0.975085556507111,-0.105434238910675,0.195171296596527,0.50421130657196,0.371916502714157\n             ,0.779390156269073,0.416134297847748,0.908453166484833,0.0393080599606037,0.509348154067993,0.792352139949799\n             ,0.335771501064301,-0.190792232751846,0.806503474712372,0.559598445892334,-0.287073612213135,0.937016367912292\n             ,0.198970049619675,-0.208385854959488,0.819956362247467,0.533148169517517,0.573537588119507,0.703198969364166\n             ,0.420197457075119,0.50421130657196,0.371916502714157,0.779390156269073,-0.234096929430962,0.390781313180923\n             ,0.890218317508698,-0.287073612213135,0.937016367912292,0.198970049619675,-0.190792232751846,0.806503474712372\n             ,0.559598445892334,-0.873119652271271,0.208043858408928,0.440885275602341,-0.91410881280899,0.405452340841293\n             ,-0.00367248360998929,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.208385854959488,0.819956362247467\n             ,0.533148169517517,-0.234096929430962,0.390781313180923,0.890218317508698,-0.834793627262115,-0.068818561732769\n             ,0.546245038509369,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.873119652271271,0.208043858408928\n             ,0.440885275602341,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.608099102973938,-0.439832001924515\n             ,-0.660880744457245,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.404285073280334,-0.552336990833282\n             ,-0.72902500629425,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.834793627262115,-0.068818561732769\n             ,0.546245038509369,-0.567008674144745,-0.784497559070587,-0.251126945018768,0.596852362155914,-0.598833739757538\n             ,-0.534008800983429,0.484535843133926,-0.391038775444031,-0.782504737377167,-0.608099102973938,-0.439832001924515\n             ,-0.660880744457245,0.599041819572449,-0.698567867279053,-0.391346126794815,0.631527423858643,-0.539189040660858\n             ,-0.557178795337677,-0.404285073280334,-0.552336990833282,-0.72902500629425,-0.506093978881836,-0.828284025192261\n             ,-0.240446254611015,0.484535843133926,-0.391038775444031,-0.782504737377167,0.596852362155914,-0.598833739757538\n             ,-0.534008800983429,0.968059420585632,0.180046543478966,-0.17448265850544,0.86001181602478,0.317273110151291\n             ,-0.399646580219269,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.631527423858643,-0.539189040660858\n             ,-0.557178795337677,0.599041819572449,-0.698567867279053,-0.391346126794815,0.975085556507111,-0.105434238910675\n             ,0.195171296596527,0.851017236709595,0.312567472457886,-0.421984851360321,0.411976963281631,0.894454181194305\n             ,0.173858374357224,0.210457503795624,0.972685754299164,-0.0979291051626205,0.661870062351227,0.421795666217804\n             ,-0.619690597057343,0.509348154067993,0.792352139949799,0.335771501064301,0.968059420585632,0.180046543478966\n             ,-0.17448265850544,0.994639039039612,0.0399277433753014,0.0953883677721024,0.533453047275543,0.59451025724411\n             ,0.601652204990387,0.210457503795624,0.972685754299164,-0.0979291051626205,0.411976963281631,0.894454181194305\n             ,0.173858374357224,-0.195588424801826,0.810276031494141,0.552447199821472,-0.410943269729614,0.892482936382294\n             ,0.186010345816612,-0.190792232751846,0.806503474712372,0.559598445892334,0.509348154067993,0.792352139949799\n             ,0.335771501064301,0.533453047275543,0.59451025724411,0.601652204990387,-0.0871332660317421,0.554765582084656\n             ,0.827431499958038,-0.410943269729614,0.892482936382294,0.186010345816612,-0.195588424801826,0.810276031494141\n             ,0.552447199821472,-0.785535871982574,0.107658803462982,0.60937911272049,-0.947485268115997,0.26874190568924\n             ,0.1733478307724,-0.873119652271271,0.208043858408928,0.440885275602341,-0.190792232751846,0.806503474712372\n             ,0.559598445892334,-0.0871332660317421,0.554765582084656,0.827431499958038,-0.636269569396973,-0.0266684051603079\n             ,0.771005690097809,-0.947485268115997,0.26874190568924,0.1733478307724,-0.785535871982574,0.107658803462982,0.60937911272049\n             ,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.717132270336151,-0.562979400157928,-0.410822957754135\n             ,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.567008674144745,-0.784497559070587,-0.251126945018768\n             ,-0.873119652271271,0.208043858408928,0.440885275602341,-0.636269569396973,-0.0266684051603079,0.771005690097809\n             ,-0.546746909618378,-0.836352705955505,-0.0397748313844204,0.493326157331467,-0.591391324996948,-0.637875854969025\n             ,0.271069228649139,-0.435710102319717,-0.858299553394318,-0.717132270336151,-0.562979400157928,-0.410822957754135\n             ,0.610304296016693,-0.760079562664032,-0.223176524043083,0.596852362155914,-0.598833739757538,-0.534008800983429\n             ,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.373132437467575,-0.907169759273529,0.194461092352867\n             ,0.271069228649139,-0.435710102319717,-0.858299553394318,0.493326157331467,-0.591391324996948,-0.637875854969025\n             ,0.851017236709595,0.312567472457886,-0.421984851360321,0.661870062351227,0.421795666217804,-0.619690597057343\n             ,0.994639039039612,0.0399277433753014,0.0953883677721024,0.968059420585632,0.180046543478966,-0.17448265850544\n             ,0.596852362155914,-0.598833739757538,-0.534008800983429,0.610304296016693,-0.760079562664032,-0.223176524043083\n             ,0.38824450969696,0.468270719051361,-0.793718278408051,0.611883342266083,0.395266950130463,-0.685100555419922\n             ,0.318963170051575,0.947534799575806,-0.0209827292710543,0.0321094393730164,0.982071399688721,-0.185754418373108\n             ,0.411976963281631,0.894454181194305,0.173858374357224,0.851017236709595,0.312567472457886,-0.421984851360321\n             ,0.972901284694672,0.173448488116264,-0.15290105342865,0.576588332653046,0.699405252933502,0.422348409891129\n             ,0.0321094393730164,0.982071399688721,-0.185754418373108,0.318963170051575,0.947534799575806,-0.0209827292710543\n             ,-0.12346463650465,0.82139652967453,0.556834042072296,-0.472547024488449,0.842842221260071,0.257519453763962\n             ,-0.195588424801826,0.810276031494141,0.552447199821472,0.411976963281631,0.894454181194305,0.173858374357224\n             ,0.576588332653046,0.699405252933502,0.422348409891129,0.0535213947296143,0.588878512382507,0.806447505950928\n             ,-0.472547024488449,0.842842221260071,0.257519453763962,-0.12346463650465,0.82139652967453,0.556834042072296\n             ,-0.572655022144318,0.03255345672369,0.819149851799011,-0.908354461193085,0.186973229050636,0.374076366424561\n             ,-0.785535871982574,0.107658803462982,0.60937911272049,-0.195588424801826,0.810276031494141,0.552447199821472\n             ,0.0535213947296143,0.588878512382507,0.806447505950928,-0.450931012630463,-0.0296851322054863,0.892065048217773\n             ,-0.572655022144318,0.03255345672369,0.819149851799011,-0.345148712396622,-0.936045050621033,0.0684986561536789\n             ,-0.721794605255127,-0.649047315120697,-0.240312546491623,-0.908354461193085,0.186973229050636,0.374076366424561\n             ,-0.189478844404221,-0.925744891166687,0.327252507209778,-0.546746909618378,-0.836352705955505,-0.0397748313844204\n             ,-0.785535871982574,0.107658803462982,0.60937911272049,-0.450931012630463,-0.0296851322054863,0.892065048217773\n             ,-0.345148712396622,-0.936045050621033,0.0684986561536789,0.375919848680496,-0.534900844097137,-0.756680428981781\n             ,0.121086686849594,-0.443384885787964,-0.888114750385284,-0.721794605255127,-0.649047315120697,-0.240312546491623\n             ,0.652944087982178,-0.679937779903412,-0.333689540624619,0.493326157331467,-0.591391324996948,-0.637875854969025\n             ,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.189478844404221,-0.925744891166687,0.327252507209778\n             ,0.121086686849594,-0.443384885787964,-0.888114750385284,0.375919848680496,-0.534900844097137,-0.756680428981781\n             ,0.611883342266083,0.395266950130463,-0.685100555419922,0.38824450969696,0.468270719051361,-0.793718278408051\n             ,0.972901284694672,0.173448488116264,-0.15290105342865,0.851017236709595,0.312567472457886,-0.421984851360321\n             ,0.493326157331467,-0.591391324996948,-0.637875854969025,0.652944087982178,-0.679937779903412,-0.333689540624619\n             ,0.318963170051575,0.947534799575806,-0.0209827292710543,0.611883342266083,0.395266950130463,-0.685100555419922\n             ,0.813007533550262,0.294095903635025,-0.502519965171814,0.569939315319061,0.805042445659637,0.164547294378281\n             ,-0.12346463650465,0.82139652967453,0.556834042072296,0.318963170051575,0.947534799575806,-0.0209827292710543\n             ,0.569939315319061,0.805042445659637,0.164547294378281,0.231555417180061,0.629199266433716,0.741950392723084\n             ,-0.572655022144318,0.03255345672369,0.819149851799011,-0.12346463650465,0.82139652967453,0.556834042072296,0.231555417180061\n             ,0.629199266433716,0.741950392723084,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.0996505841612816\n             ,-0.92350834608078,0.370408058166504,-0.345148712396622,-0.936045050621033,0.0684986561536789,-0.572655022144318\n             ,0.03255345672369,0.819149851799011,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.585191905498505\n             ,-0.614215075969696,-0.529424488544464,0.375919848680496,-0.534900844097137,-0.756680428981781,-0.345148712396622\n             ,-0.936045050621033,0.0684986561536789,0.0996505841612816,-0.92350834608078,0.370408058166504,0.813007533550262\n             ,0.294095903635025,-0.502519965171814,0.611883342266083,0.395266950130463,-0.685100555419922,0.375919848680496\n             ,-0.534900844097137,-0.756680428981781,0.585191905498505,-0.614215075969696,-0.529424488544464,0.545881569385529\n             ,0.511918663978577,0.663289248943329,0.990075051784515,-0.120317794382572,0.0726294368505478,0.883933007717133\n             ,-0.306944608688354,0.352771013975143,0.373975813388824,0.180082246661186,0.909787058830261,-0.245863825082779\n             ,0.731000900268555,0.636544346809387,0.545881569385529,0.511918663978577,0.663289248943329,0.373975813388824\n             ,0.180082246661186,0.909787058830261,-0.295474290847778,0.289970576763153,0.910281300544739,-0.910116851329803\n             ,0.0209306813776493,0.413822680711746,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.245863825082779\n             ,0.731000900268555,0.636544346809387,-0.295474290847778,0.289970576763153,0.910281300544739,-0.558293402194977\n             ,-0.744525730609894,-0.366046398878098,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.935286819934845\n             ,0.353607445955276,0.0141536435112357,-0.910116851329803,0.0209306813776493,0.413822680711746,0.547039151191711\n             ,-0.767979085445404,-0.333100914955139,0.571398973464966,-0.599262952804565,-0.560702323913574,-0.506552457809448\n             ,-0.468146800994873,-0.724046409130096,-0.558293402194977,-0.744525730609894,-0.366046398878098,0.990075051784515\n             ,-0.120317794382572,0.0726294368505478,0.571398973464966,-0.599262952804565,-0.560702323913574,0.547039151191711\n             ,-0.767979085445404,-0.333100914955139,0.883933007717133,-0.306944608688354,0.352771013975143,0.375081390142441\n             ,0.14768061041832,0.915152668952942,0.911960899829865,-0.238872826099396,0.333567291498184,0.744088768959045\n             ,-0.425844013690948,0.514770567417145,0.260944664478302,0.0303234942257404,0.964877367019653,0.990352332592011\n             ,0.100834503769875,-0.0950506180524826,0.990075051784515,-0.120317794382572,0.0726294368505478,0.545881569385529\n             ,0.511918663978577,0.663289248943329,0.586896598339081,0.733868896961212,0.342036306858063,-0.218149244785309\n             ,0.312739759683609,0.924448370933533,0.375081390142441,0.14768061041832,0.915152668952942,0.260944664478302,0.0303234942257404\n             ,0.964877367019653,-0.292137324810028,0.162486374378204,0.942472279071808,0.586896598339081,0.733868896961212\n             ,0.342036306858063,0.545881569385529,0.511918663978577,0.663289248943329,-0.245863825082779,0.731000900268555\n             ,0.636544346809387,-0.114175498485565,0.946973264217377,0.300342559814453,-0.927251279354095,0.214977368712425\n             ,0.306577533483505,-0.218149244785309,0.312739759683609,0.924448370933533,-0.292137324810028,0.162486374378204\n             ,0.942472279071808,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.114175498485565,0.946973264217377\n             ,0.300342559814453,-0.245863825082779,0.731000900268555,0.636544346809387,-0.935286819934845,0.353607445955276\n             ,0.0141536435112357,-0.730445027351379,0.644031345844269,-0.227318435907364,-0.660339951515198,-0.670212745666504\n             ,-0.338771462440491,-0.624496459960938,-0.423985540866852,-0.655927181243896,-0.927251279354095,0.214977368712425\n             ,0.306577533483505,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.935286819934845,0.353607445955276\n             ,0.0141536435112357,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.434810429811478,-0.167877942323685\n             ,-0.884735524654388,-0.730445027351379,0.644031345844269,-0.227318435907364,0.430197030305862,-0.866838395595551\n             ,-0.252034991979599,0.522938787937164,-0.641703903675079,-0.561026811599731,-0.624496459960938,-0.423985540866852\n             ,-0.655927181243896,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.506552457809448,-0.468146800994873\n             ,-0.724046409130096,0.571398973464966,-0.599262952804565,-0.560702323913574,0.571836888790131,-0.410920888185501\n             ,-0.710032820701599,-0.434810429811478,-0.167877942323685,-0.884735524654388,0.911960899829865,-0.238872826099396\n             ,0.333567291498184,0.522938787937164,-0.641703903675079,-0.561026811599731,0.430197030305862,-0.866838395595551\n             ,-0.252034991979599,0.744088768959045,-0.425844013690948,0.514770567417145,0.571836888790131,-0.410920888185501\n             ,-0.710032820701599,0.571398973464966,-0.599262952804565,-0.560702323913574,0.990075051784515,-0.120317794382572\n             ,0.0726294368505478,0.990352332592011,0.100834503769875,-0.0950506180524826,0.911960899829865,-0.238872826099396\n             ,0.333567291498184,0.375081390142441,0.14768061041832,0.915152668952942,0.511097252368927,0.266881614923477,0.817039608955383\n             ,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.511097252368927,0.266881614923477,0.817039608955383\n             ,0.375081390142441,0.14768061041832,0.915152668952942,-0.218149244785309,0.312739759683609,0.924448370933533\n             ,-0.110857367515564,0.512554824352264,0.85146826505661,-0.110857367515564,0.512554824352264,0.85146826505661\n             ,-0.218149244785309,0.312739759683609,0.924448370933533,-0.927251279354095,0.214977368712425,0.306577533483505\n             ,-0.879560232162476,0.457515209913254,0.130589336156845,-0.879560232162476,0.457515209913254,0.130589336156845\n             ,-0.927251279354095,0.214977368712425,0.306577533483505,-0.624496459960938,-0.423985540866852,-0.655927181243896\n             ,-0.536313056945801,-0.172707200050354,-0.826160073280334,-0.624496459960938,-0.423985540866852,-0.655927181243896\n             ,0.522938787937164,-0.641703903675079,-0.561026811599731,0.49901670217514,-0.328819900751114,-0.801785349845886\n             ,-0.536313056945801,-0.172707200050354,-0.826160073280334,0.522938787937164,-0.641703903675079,-0.561026811599731\n             ,0.911960899829865,-0.238872826099396,0.333567291498184,0.996219396591187,-0.0303011108189821,0.0814168974757195\n             ,0.49901670217514,-0.328819900751114,-0.801785349845886,-0.976081073284149,0.0319094844162464,0.215052559971809\n             ,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.378572434186935,0.294946253299713,0.877319574356079\n             ,0.256522864103317,0.500971019268036,0.826573669910431,0.839519679546356,-0.36930912733078,0.398519098758698\n             ,0.916088342666626,0.400877177715302,0.00892047397792339,0.916088342666626,0.400877177715302,0.00892047397792339\n             ,0.839519679546356,-0.36930912733078,0.398519098758698,0.408187568187714,-0.202498286962509,-0.890155792236328\n             ,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.584547698497772,-0.607527673244476,0.537786364555359\n             ,-0.976081073284149,0.0319094844162464,0.215052559971809,0.996219396591187,-0.0303011108189821,0.0814168974757195\n             ,0.511097252368927,0.266881614923477,0.817039608955383,0.612414479255676,-0.645280599594116,0.456685394048691\n             ,-0.110857367515564,0.512554824352264,0.85146826505661,-0.879560232162476,0.457515209913254,0.130589336156845\n             ,-0.799655735492706,-0.317605823278427,0.509585380554199,-0.879560232162476,0.457515209913254,0.130589336156845\n             ,-0.536313056945801,-0.172707200050354,-0.826160073280334,-0.799655735492706,-0.317605823278427,0.509585380554199\n             ,0.49901670217514,-0.328819900751114,-0.801785349845886,0.996219396591187,-0.0303011108189821,0.0814168974757195\n             ,0.612414479255676,-0.645280599594116,0.456685394048691,-0.318901360034943,-0.0882023423910141,0.943674862384796\n             ,-0.31753671169281,0.108130596578121,0.942060589790344,-0.868339955806732,0.248359262943268,0.429305762052536\n             ,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.31753671169281,0.108130596578121,0.942060589790344\n             ,-0.218334898352623,0.277430087327957,0.93560802936554,-0.627032935619354,0.660118401050568,0.413610130548477\n             ,-0.868339955806732,0.248359262943268,0.429305762052536,-0.218334898352623,0.277430087327957,0.93560802936554\n             ,-0.0478470139205456,0.374339252710342,0.926056563854218,-0.21239410340786,0.895821630954742,0.390374630689621\n             ,-0.627032935619354,0.660118401050568,0.413610130548477,-0.0478470139205456,0.374339252710342,0.926056563854218\n             ,0.148238986730576,0.372900396585464,0.91595333814621,0.264493584632874,0.892315626144409,0.365808635950089,-0.21239410340786\n             ,0.895821630954742,0.390374630689621,0.148238986730576,0.372900396585464,0.91595333814621,0.317363291978836,0.27348119020462\n             ,0.908013522624969,0.675838232040405,0.650524258613586,0.346498042345047,0.264493584632874,0.892315626144409\n             ,0.365808635950089,0.317363291978836,0.27348119020462,0.908013522624969,0.414219319820404,0.102734677493572,0.90436053276062\n             ,0.911416888237,0.235228717327118,0.337619215250015,0.675838232040405,0.650524258613586,0.346498042345047,0.414219319820404\n             ,0.102734677493572,0.90436053276062,0.412851452827454,-0.0935835912823677,0.905977785587311,0.908100605010986\n             ,-0.24227574467659,0.341549009084702,0.911416888237,0.235228717327118,0.337619215250015,0.412851452827454,-0.0935835912823677\n             ,0.905977785587311,0.313630968332291,-0.262897282838821,0.912425696849823,0.666783571243286,-0.654056191444397\n             ,0.357225596904755,0.908100605010986,-0.24227574467659,0.341549009084702,0.313630968332291,-0.262897282838821\n             ,0.912425696849823,0.143147274851799,-0.359821945428848,0.921974539756775,0.252132117748261,-0.889766812324524\n             ,0.380452841520309,0.666783571243286,-0.654056191444397,0.357225596904755,0.143147274851799,-0.359821945428848\n             ,0.921974539756775,-0.0529243946075439,-0.358375370502472,0.932076215744019,-0.224753618240356,-0.886253476142883\n             ,0.405019313097,0.252132117748261,-0.889766812324524,0.380452841520309,-0.0529243946075439,-0.358375370502472\n             ,0.932076215744019,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.636087536811829,-0.644459784030914\n             ,0.42433974146843,-0.224753618240356,-0.886253476142883,0.405019313097,-0.222048029303551,-0.258952558040619\n             ,0.940020382404327,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.871661067008972,-0.229165747761726\n             ,0.433232098817825,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.871661067008972,-0.229165747761726\n             ,0.433232098817825,-0.868339955806732,0.248359262943268,0.429305762052536,-0.908097684383392,0.242292806506157\n             ,-0.341544687747955,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.868339955806732,0.248359262943268\n             ,0.429305762052536,-0.627032935619354,0.660118401050568,0.413610130548477,-0.66677725315094,0.654064834117889\n             ,-0.35722154378891,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.627032935619354,0.660118401050568\n             ,0.413610130548477,-0.21239410340786,0.895821630954742,0.390374630689621,-0.252133041620255,0.889771401882172\n             ,-0.380441606044769,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.21239410340786,0.895821630954742\n             ,0.390374630689621,0.264493584632874,0.892315626144409,0.365808635950089,0.224738791584969,0.886259078979492\n             ,-0.405015259981155,-0.252133041620255,0.889771401882172,-0.380441606044769,0.264493584632874,0.892315626144409\n             ,0.365808635950089,0.675838232040405,0.650524258613586,0.346498042345047,0.636084914207459,0.644462466239929\n             ,-0.42433974146843,0.224738791584969,0.886259078979492,-0.405015259981155,0.675838232040405,0.650524258613586\n             ,0.346498042345047,0.911416888237,0.235228717327118,0.337619215250015,0.871663808822632,0.22916416823864,-0.433227360248566\n             ,0.636084914207459,0.644462466239929,-0.42433974146843,0.911416888237,0.235228717327118,0.337619215250015,0.908100605010986\n             ,-0.24227574467659,0.341549009084702,0.868341326713562,-0.248342737555504,-0.429312497377396,0.871663808822632\n             ,0.22916416823864,-0.433227360248566,0.908100605010986,-0.24227574467659,0.341549009084702,0.666783571243286\n             ,-0.654056191444397,0.357225596904755,0.627018570899963,-0.660117030143738,-0.413634151220322,0.868341326713562\n             ,-0.248342737555504,-0.429312497377396,0.666783571243286,-0.654056191444397,0.357225596904755,0.252132117748261\n             ,-0.889766812324524,0.380452841520309,0.212370932102203,-0.895820319652557,-0.390390157699585,0.627018570899963\n             ,-0.660117030143738,-0.413634151220322,0.252132117748261,-0.889766812324524,0.380452841520309,-0.224753618240356\n             ,-0.886253476142883,0.405019313097,-0.264504671096802,-0.892306506633759,-0.365822821855545,0.212370932102203\n             ,-0.895820319652557,-0.390390157699585,-0.224753618240356,-0.886253476142883,0.405019313097,-0.636087536811829\n             ,-0.644459784030914,0.42433974146843,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.264504671096802\n             ,-0.892306506633759,-0.365822821855545,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.871661067008972\n             ,-0.229165747761726,0.433232098817825,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.675834715366364\n             ,-0.650523722171783,-0.346505790948868,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.908097684383392\n             ,0.242292806506157,-0.341544687747955,-0.412847608327866,0.093598335981369,-0.90597802400589,-0.414216488599777\n             ,-0.102731600403786,-0.904362142086029,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.66677725315094\n             ,0.654064834117889,-0.35722154378891,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.412847608327866\n             ,0.093598335981369,-0.90597802400589,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.252133041620255\n             ,0.889771401882172,-0.380441606044769,-0.14314316213131,0.359831392765045,-0.921971440315247,-0.313630282878876\n             ,0.262905478477478,-0.912423551082611,-0.252133041620255,0.889771401882172,-0.380441606044769,0.224738791584969\n             ,0.886259078979492,-0.405015259981155,0.0529278218746185,0.358382165431976,-0.932073414325714,-0.14314316213131\n             ,0.359831392765045,-0.921971440315247,0.224738791584969,0.886259078979492,-0.405015259981155,0.636084914207459\n             ,0.644462466239929,-0.42433974146843,0.222044736146927,0.258958548307419,-0.940019488334656,0.0529278218746185\n             ,0.358382165431976,-0.932073414325714,0.636084914207459,0.644462466239929,-0.42433974146843,0.871663808822632\n             ,0.22916416823864,-0.433227360248566,0.318903893232346,0.0882057771086693,-0.943673670291901,0.222044736146927\n             ,0.258958548307419,-0.940019488334656,0.871663808822632,0.22916416823864,-0.433227360248566,0.868341326713562\n             ,-0.248342737555504,-0.429312497377396,0.317530363798141,-0.108123689889908,-0.942063570022583,0.318903893232346\n             ,0.0882057771086693,-0.943673670291901,0.868341326713562,-0.248342737555504,-0.429312497377396,0.627018570899963\n             ,-0.660117030143738,-0.413634151220322,0.218313500285149,-0.277421027421951,-0.935615718364716,0.317530363798141\n             ,-0.108123689889908,-0.942063570022583,0.627018570899963,-0.660117030143738,-0.413634151220322,0.212370932102203\n             ,-0.895820319652557,-0.390390157699585,0.0478369519114494,-0.374329477548599,-0.926061034202576,0.218313500285149\n             ,-0.277421027421951,-0.935615718364716,0.212370932102203,-0.895820319652557,-0.390390157699585,-0.264504671096802\n             ,-0.892306506633759,-0.365822821855545,-0.148233711719513,-0.372886508703232,-0.91595983505249,0.0478369519114494\n             ,-0.374329477548599,-0.926061034202576,-0.264504671096802,-0.892306506633759,-0.365822821855545,-0.675834715366364\n             ,-0.650523722171783,-0.346505790948868,-0.317355632781982,-0.273479759693146,-0.908016622066498,-0.148233711719513\n             ,-0.372886508703232,-0.91595983505249,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.911418378353119\n             ,-0.235225573182106,-0.337617367506027,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.317355632781982\n             ,-0.273479759693146,-0.908016622066498,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.31753671169281\n             ,0.108130596578121,0.942060589790344,-0.318901360034943,-0.0882023423910141,0.943674862384796,0.0515071414411068\n             ,0.00784654170274735,0.998641788959503,-0.218334898352623,0.277430087327957,0.93560802936554,-0.31753671169281\n             ,0.108130596578121,0.942060589790344,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.0478470139205456\n             ,0.374339252710342,0.926056563854218,-0.218334898352623,0.277430087327957,0.93560802936554,0.0515071414411068\n             ,0.00784654170274735,0.998641788959503,0.148238986730576,0.372900396585464,0.91595333814621,-0.0478470139205456\n             ,0.374339252710342,0.926056563854218,0.0515071414411068,0.00784654170274735,0.998641788959503,0.317363291978836\n             ,0.27348119020462,0.908013522624969,0.148238986730576,0.372900396585464,0.91595333814621,0.0515071414411068,0.00784654170274735\n             ,0.998641788959503,0.414219319820404,0.102734677493572,0.90436053276062,0.317363291978836,0.27348119020462,0.908013522624969\n             ,0.0515071414411068,0.00784654170274735,0.998641788959503,0.412851452827454,-0.0935835912823677,0.905977785587311\n             ,0.414219319820404,0.102734677493572,0.90436053276062,0.0515071414411068,0.00784654170274735,0.998641788959503\n             ,0.313630968332291,-0.262897282838821,0.912425696849823,0.412851452827454,-0.0935835912823677,0.905977785587311\n             ,0.0515071414411068,0.00784654170274735,0.998641788959503,0.143147274851799,-0.359821945428848,0.921974539756775\n             ,0.313630968332291,-0.262897282838821,0.912425696849823,0.0515071414411068,0.00784654170274735,0.998641788959503\n             ,-0.0529243946075439,-0.358375370502472,0.932076215744019,0.143147274851799,-0.359821945428848,0.921974539756775\n             ,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.222048029303551,-0.258952558040619,0.940020382404327\n             ,-0.0529243946075439,-0.358375370502472,0.932076215744019,0.0515071414411068,0.00784654170274735,0.998641788959503\n             ,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.222048029303551,-0.258952558040619,0.940020382404327\n             ,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.412847608327866,0.093598335981369,-0.90597802400589\n             ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.412847608327866,0.093598335981369,-0.90597802400589\n             ,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.0515034012496471,-0.00784700363874435,-0.998641967773438\n             ,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.14314316213131,0.359831392765045,-0.921971440315247\n             ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.14314316213131,0.359831392765045,-0.921971440315247\n             ,0.0529278218746185,0.358382165431976,-0.932073414325714,-0.0515034012496471,-0.00784700363874435,-0.998641967773438\n             ,0.0529278218746185,0.358382165431976,-0.932073414325714,0.222044736146927,0.258958548307419,-0.940019488334656\n             ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.222044736146927,0.258958548307419,-0.940019488334656\n             ,0.318903893232346,0.0882057771086693,-0.943673670291901,-0.0515034012496471,-0.00784700363874435,-0.998641967773438\n             ,0.318903893232346,0.0882057771086693,-0.943673670291901,0.317530363798141,-0.108123689889908,-0.942063570022583\n             ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.317530363798141,-0.108123689889908,-0.942063570022583\n             ,0.218313500285149,-0.277421027421951,-0.935615718364716,-0.0515034012496471,-0.00784700363874435,-0.998641967773438\n             ,0.218313500285149,-0.277421027421951,-0.935615718364716,0.0478369519114494,-0.374329477548599,-0.926061034202576\n             ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.0478369519114494,-0.374329477548599,-0.926061034202576\n             ,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.0515034012496471,-0.00784700363874435,-0.998641967773438\n             ,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.317355632781982,-0.273479759693146,-0.908016622066498\n             ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.317355632781982,-0.273479759693146,-0.908016622066498\n             ,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.0515034012496471,-0.00784700363874435,-0.998641967773438\n             ,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.966661691665649,0.248886108398438,-0.0601741522550583\n             ,-0.58228075504303,0.397593438625336,-0.709132254123688,-0.653685986995697,-0.0610022284090519,-0.754303216934204\n             ,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.914616882801056,0.401076018810272,0.0511271618306637\n             ,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.58228075504303,0.397593438625336,-0.709132254123688\n             ,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.851284623146057,0.473647087812424,0.225771903991699\n             ,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.453953713178635,0.773242294788361,-0.442744106054306\n             ,-0.851284623146057,0.473647087812424,0.225771903991699,-0.79402083158493,0.444575279951096,0.414588689804077\n             ,-0.158385679125786,0.879829466342926,0.448122888803482,-0.297669261693954,0.954544186592102,-0.0154400775209069\n             ,-0.79402083158493,0.444575279951096,0.414588689804077,-0.759445428848267,0.323628008365631,0.564364731311798\n             ,-0.0778716132044792,0.579540431499481,0.811214447021484,-0.158385679125786,0.879829466342926,0.448122888803482\n             ,-0.759445428848267,0.323628008365631,0.564364731311798,-0.757242918014526,0.146255627274513,0.636547327041626\n             ,-0.0762700662016869,0.147347286343575,0.98613977432251,-0.0778716132044792,0.579540431499481,0.811214447021484\n             ,-0.757242918014526,0.146255627274513,0.636547327041626,-0.787810683250427,-0.0407748445868492,0.614566326141357\n             ,-0.152521103620529,-0.309242963790894,0.938672542572021,-0.0762700662016869,0.147347286343575,0.98613977432251\n             ,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.84276008605957,-0.189629122614861,0.503781855106354\n             ,-0.288555532693863,-0.679946959018707,0.674097776412964,-0.152521103620529,-0.309242963790894,0.938672542572021\n             ,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.90670782327652,-0.260194718837738,0.331933170557022\n             ,-0.447622418403625,-0.858233511447906,0.251136243343353,-0.288555532693863,-0.679946959018707,0.674097776412964\n             ,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.961663961410522,-0.232538834214211,0.14535491168499\n             ,-0.581832349300385,-0.785723686218262,-0.210022509098053,-0.447622418403625,-0.858233511447906,0.251136243343353\n             ,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.99335777759552,-0.114957891404629,-0.00500302389264107\n             ,-0.654718458652496,-0.490442901849747,-0.575160443782806,-0.581832349300385,-0.785723686218262,-0.210022509098053\n             ,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.994962155818939,0.0604930706322193,-0.0799432098865509\n             ,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.654718458652496,-0.490442901849747,-0.575160443782806\n             ,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.58228075504303,0.397593438625336,-0.709132254123688\n             ,0.15252123773098,0.30924791097641,-0.938670873641968,0.0762772560119629,-0.147341594099998,-0.986140072345734\n             ,-0.58228075504303,0.397593438625336,-0.709132254123688,-0.453953713178635,0.773242294788361,-0.442744106054306\n             ,0.288539916276932,0.679925382137299,-0.674126207828522,0.15252123773098,0.30924791097641,-0.938670873641968\n             ,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.297669261693954,0.954544186592102,-0.0154400775209069\n             ,0.447615385055542,0.858229279518127,-0.251163244247437,0.288539916276932,0.679925382137299,-0.674126207828522\n             ,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.158385679125786,0.879829466342926,0.448122888803482\n             ,0.581838190555573,0.785721182823181,0.210015803575516,0.447615385055542,0.858229279518127,-0.251163244247437\n             ,-0.158385679125786,0.879829466342926,0.448122888803482,-0.0778716132044792,0.579540431499481,0.811214447021484\n             ,0.654724836349487,0.490438729524612,0.57515674829483,0.581838190555573,0.785721182823181,0.210015803575516,-0.0778716132044792\n             ,0.579540431499481,0.811214447021484,-0.0762700662016869,0.147347286343575,0.98613977432251,0.653687477111816\n             ,0.0610029399394989,0.754301846027374,0.654724836349487,0.490438729524612,0.57515674829483,-0.0762700662016869\n             ,0.147347286343575,0.98613977432251,-0.152521103620529,-0.309242963790894,0.938672542572021,0.582287847995758\n             ,-0.397587060928345,0.709130048751831,0.653687477111816,0.0610029399394989,0.754301846027374,-0.152521103620529\n             ,-0.309242963790894,0.938672542572021,-0.288555532693863,-0.679946959018707,0.674097776412964,0.453961431980133\n             ,-0.773255228996277,0.442713648080826,0.582287847995758,-0.397587060928345,0.709130048751831,-0.288555532693863\n             ,-0.679946959018707,0.674097776412964,-0.447622418403625,-0.858233511447906,0.251136243343353,0.297663301229477\n             ,-0.954546689987183,0.0153974173590541,0.453961431980133,-0.773255228996277,0.442713648080826,-0.447622418403625\n             ,-0.858233511447906,0.251136243343353,-0.581832349300385,-0.785723686218262,-0.210022509098053,0.158382549881935\n             ,-0.879823446273804,-0.448135793209076,0.297663301229477,-0.954546689987183,0.0153974173590541,-0.581832349300385\n             ,-0.785723686218262,-0.210022509098053,-0.654718458652496,-0.490442901849747,-0.575160443782806,0.0778705626726151\n             ,-0.57954204082489,-0.811213433742523,0.158382549881935,-0.879823446273804,-0.448135793209076,-0.654718458652496\n             ,-0.490442901849747,-0.575160443782806,-0.653685986995697,-0.0610022284090519,-0.754303216934204,0.0762772560119629\n             ,-0.147341594099998,-0.986140072345734,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.0762772560119629\n             ,-0.147341594099998,-0.986140072345734,0.15252123773098,0.30924791097641,-0.938670873641968,0.787807643413544\n             ,0.0407794341444969,-0.614569902420044,0.757250845432281,-0.146252647042274,-0.636538565158844,0.15252123773098\n             ,0.30924791097641,-0.938670873641968,0.288539916276932,0.679925382137299,-0.674126207828522,0.842750906944275\n             ,0.189622536301613,-0.503799676895142,0.787807643413544,0.0407794341444969,-0.614569902420044,0.288539916276932\n             ,0.679925382137299,-0.674126207828522,0.447615385055542,0.858229279518127,-0.251163244247437,0.906708478927612\n             ,0.260196477174759,-0.331930011510849,0.842750906944275,0.189622536301613,-0.503799676895142,0.447615385055542\n             ,0.858229279518127,-0.251163244247437,0.581838190555573,0.785721182823181,0.210015803575516,0.961666405200958\n             ,0.232534736394882,-0.145345583558083,0.906708478927612,0.260196477174759,-0.331930011510849,0.581838190555573\n             ,0.785721182823181,0.210015803575516,0.654724836349487,0.490438729524612,0.57515674829483,0.993358135223389,0.114954985678196\n             ,0.00499376095831394,0.961666405200958,0.232534736394882,-0.145345583558083,0.654724836349487,0.490438729524612\n             ,0.57515674829483,0.653687477111816,0.0610029399394989,0.754301846027374,0.9949631690979,-0.0604812912642956\n             ,0.079939104616642,0.993358135223389,0.114954985678196,0.00499376095831394,0.653687477111816,0.0610029399394989\n             ,0.754301846027374,0.582287847995758,-0.397587060928345,0.709130048751831,0.966662883758545,-0.248881489038467\n             ,0.0601733289659023,0.9949631690979,-0.0604812912642956,0.079939104616642,0.582287847995758,-0.397587060928345\n             ,0.709130048751831,0.453961431980133,-0.773255228996277,0.442713648080826,0.914616823196411,-0.401075154542923\n             ,-0.0511355213820934,0.966662883758545,-0.248881489038467,0.0601733289659023,0.453961431980133,-0.773255228996277\n             ,0.442713648080826,0.297663301229477,-0.954546689987183,0.0153974173590541,0.851288199424744,-0.473640650510788\n             ,-0.225771829485893,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.297663301229477,-0.954546689987183\n             ,0.0153974173590541,0.158382549881935,-0.879823446273804,-0.448135793209076,0.794022977352142,-0.44456884264946\n             ,-0.414591461420059,0.851288199424744,-0.473640650510788,-0.225771829485893,0.158382549881935,-0.879823446273804\n             ,-0.448135793209076,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.759444773197174,-0.323628276586533\n             ,-0.564365446567535,0.794022977352142,-0.44456884264946,-0.414591461420059,0.0778705626726151,-0.57954204082489\n             ,-0.811213433742523,0.0762772560119629,-0.147341594099998,-0.986140072345734,0.757250845432281,-0.146252647042274\n             ,-0.636538565158844,0.759444773197174,-0.323628276586533,-0.564365446567535,-0.947113156318665,0.111555203795433\n             ,0.300885528326035,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.994962155818939,0.0604930706322193\n             ,-0.0799432098865509,-0.947113156318665,0.111555203795433,0.300885528326035,-0.914616882801056,0.401076018810272\n             ,0.0511271618306637,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.947113156318665,0.111555203795433\n             ,0.300885528326035,-0.851284623146057,0.473647087812424,0.225771903991699,-0.914616882801056,0.401076018810272\n             ,0.0511271618306637,-0.947113156318665,0.111555203795433,0.300885528326035,-0.79402083158493,0.444575279951096\n             ,0.414588689804077,-0.851284623146057,0.473647087812424,0.225771903991699,-0.947113156318665,0.111555203795433\n             ,0.300885528326035,-0.759445428848267,0.323628008365631,0.564364731311798,-0.79402083158493,0.444575279951096\n             ,0.414588689804077,-0.947113156318665,0.111555203795433,0.300885528326035,-0.757242918014526,0.146255627274513\n             ,0.636547327041626,-0.759445428848267,0.323628008365631,0.564364731311798,-0.947113156318665,0.111555203795433\n             ,0.300885528326035,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.757242918014526,0.146255627274513\n             ,0.636547327041626,-0.947113156318665,0.111555203795433,0.300885528326035,-0.84276008605957,-0.189629122614861\n             ,0.503781855106354,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.947113156318665,0.111555203795433\n             ,0.300885528326035,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.84276008605957,-0.189629122614861\n             ,0.503781855106354,-0.947113156318665,0.111555203795433,0.300885528326035,-0.961663961410522,-0.232538834214211\n             ,0.14535491168499,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.947113156318665,0.111555203795433\n             ,0.300885528326035,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.961663961410522,-0.232538834214211\n             ,0.14535491168499,-0.947113156318665,0.111555203795433,0.300885528326035,-0.994962155818939,0.0604930706322193\n             ,-0.0799432098865509,-0.99335777759552,-0.114957891404629,-0.00500302389264107,0.757250845432281,-0.146252647042274\n             ,-0.636538565158844,0.787807643413544,0.0407794341444969,-0.614569902420044,0.947114884853363,-0.111551322042942\n             ,-0.300881564617157,0.787807643413544,0.0407794341444969,-0.614569902420044,0.842750906944275,0.189622536301613\n             ,-0.503799676895142,0.947114884853363,-0.111551322042942,-0.300881564617157,0.842750906944275,0.189622536301613\n             ,-0.503799676895142,0.906708478927612,0.260196477174759,-0.331930011510849,0.947114884853363,-0.111551322042942\n             ,-0.300881564617157,0.906708478927612,0.260196477174759,-0.331930011510849,0.961666405200958,0.232534736394882\n             ,-0.145345583558083,0.947114884853363,-0.111551322042942,-0.300881564617157,0.961666405200958,0.232534736394882\n             ,-0.145345583558083,0.993358135223389,0.114954985678196,0.00499376095831394,0.947114884853363,-0.111551322042942\n             ,-0.300881564617157,0.993358135223389,0.114954985678196,0.00499376095831394,0.9949631690979,-0.0604812912642956\n             ,0.079939104616642,0.947114884853363,-0.111551322042942,-0.300881564617157,0.9949631690979,-0.0604812912642956\n             ,0.079939104616642,0.966662883758545,-0.248881489038467,0.0601733289659023,0.947114884853363,-0.111551322042942\n             ,-0.300881564617157,0.966662883758545,-0.248881489038467,0.0601733289659023,0.914616823196411,-0.401075154542923\n             ,-0.0511355213820934,0.947114884853363,-0.111551322042942,-0.300881564617157,0.914616823196411,-0.401075154542923\n             ,-0.0511355213820934,0.851288199424744,-0.473640650510788,-0.225771829485893,0.947114884853363,-0.111551322042942\n             ,-0.300881564617157,0.851288199424744,-0.473640650510788,-0.225771829485893,0.794022977352142,-0.44456884264946\n             ,-0.414591461420059,0.947114884853363,-0.111551322042942,-0.300881564617157,0.794022977352142,-0.44456884264946\n             ,-0.414591461420059,0.759444773197174,-0.323628276586533,-0.564365446567535,0.947114884853363,-0.111551322042942\n             ,-0.300881564617157,0.759444773197174,-0.323628276586533,-0.564365446567535,0.757250845432281,-0.146252647042274\n             ,-0.636538565158844,0.947114884853363,-0.111551322042942,-0.300881564617157,-0.751705825328827,0.499238789081573\n             ,0.430927991867065,-0.67541229724884,0.485521674156189,-0.555055737495422,-0.574179291725159,0.614476501941681\n             ,-0.541051506996155,-0.613819122314453,0.653787076473236,0.442480057477951,-0.751705825328827,0.499238789081573\n             ,0.430927991867065,-0.777491211891174,0.513072729110718,0.363680928945541,-0.671055376529694,0.46099641919136\n             ,-0.580660879611969,-0.67541229724884,0.485521674156189,-0.555055737495422,-0.439152985811234,0.717960596084595\n             ,0.540071547031403,-0.615385949611664,0.731114089488983,0.294571459293365,-0.777491211891174,0.513072729110718\n             ,0.363680928945541,-0.517933547496796,0.54983514547348,0.655306160449982,-0.439152985811234,0.717960596084595\n             ,0.540071547031403,-0.152461975812912,0.801973640918732,0.577575623989105,-0.341462641954422,0.911851763725281\n             ,0.227880761027336,-0.615385949611664,0.731114089488983,0.294571459293365,-0.439152985811234,0.717960596084595\n             ,0.540071547031403,-0.517933547496796,0.54983514547348,0.655306160449982,-0.115547746419907,0.596075415611267\n             ,0.794570803642273,-0.152461975812912,0.801973640918732,0.577575623989105,-0.554732620716095,0.528954327106476\n             ,0.642245292663574,-0.468677580356598,0.695621490478516,0.544474124908447,-0.133603423833847,0.738610506057739\n             ,0.660760641098022,-0.180301427841187,0.592643916606903,0.785025238990784,-0.554732620716095,0.528954327106476\n             ,0.642245292663574,-0.751705825328827,0.499238789081573,0.430927991867065,-0.617351293563843,0.618397295475006\n             ,0.486273765563965,-0.468677580356598,0.695621490478516,0.544474124908447,-0.554732620716095,0.528954327106476\n             ,0.642245292663574,-0.517933547496796,0.54983514547348,0.655306160449982,-0.777491211891174,0.513072729110718\n             ,0.363680928945541,-0.751705825328827,0.499238789081573,0.430927991867065,-0.554732620716095,0.528954327106476\n             ,0.642245292663574,-0.180301427841187,0.592643916606903,0.785025238990784,-0.115547746419907,0.596075415611267\n             ,0.794570803642273,-0.517933547496796,0.54983514547348,0.655306160449982,-0.615385949611664,0.731114089488983\n             ,0.294571459293365,-0.341462641954422,0.911851763725281,0.227880761027336,-0.399629831314087,0.611662745475769\n             ,-0.682762563228607,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.615385949611664,0.731114089488983\n             ,0.294571459293365,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.671055376529694,0.46099641919136\n             ,-0.580660879611969,-0.777491211891174,0.513072729110718,0.363680928945541,0.100666761398315,0.823356568813324\n             ,0.558524966239929,0.303691446781158,0.796526610851288,0.522797167301178,0.173411548137665,0.978560149669647\n             ,0.111123643815517,-0.0562314540147781,0.983582377433777,0.171474948525429,0.100666761398315,0.823356568813324\n             ,0.558524966239929,0.137634456157684,0.618980467319489,0.773252785205841,0.349911212921143,0.597250580787659\n             ,0.721702098846436,0.303691446781158,0.796526610851288,0.522797167301178,0.100666761398315,0.823356568813324\n             ,0.558524966239929,-0.152461975812912,0.801973640918732,0.577575623989105,-0.115547746419907,0.596075415611267\n             ,0.794570803642273,0.137634456157684,0.618980467319489,0.773252785205841,0.100666761398315,0.823356568813324\n             ,0.558524966239929,-0.0562314540147781,0.983582377433777,0.171474948525429,-0.341462641954422,0.911851763725281\n             ,0.227880761027336,-0.152461975812912,0.801973640918732,0.577575623989105,0.111760005354881,0.6034294962883,0.789545774459839\n             ,0.3438441157341,0.581315696239471,0.73745733499527,0.349911212921143,0.597250580787659,0.721702098846436,0.137634456157684\n             ,0.618980467319489,0.773252785205841,0.111760005354881,0.6034294962883,0.789545774459839,0.115875713527203,0.724421501159668\n             ,0.679548561573029,0.311594694852829,0.703108549118042,0.639176845550537,0.3438441157341,0.581315696239471,0.73745733499527\n             ,0.111760005354881,0.6034294962883,0.789545774459839,-0.180301427841187,0.592643916606903,0.785025238990784,-0.133603423833847\n             ,0.738610506057739,0.660760641098022,0.115875713527203,0.724421501159668,0.679548561573029,0.111760005354881\n             ,0.6034294962883,0.789545774459839,0.137634456157684,0.618980467319489,0.773252785205841,-0.115547746419907,0.596075415611267\n             ,0.794570803642273,-0.180301427841187,0.592643916606903,0.785025238990784,-0.0562314540147781,0.983582377433777\n             ,0.171474948525429,0.173411548137665,0.978560149669647,0.111123643815517,-0.149124965071678,0.574361085891724\n             ,-0.804904401302338,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.0562314540147781,0.983582377433777\n             ,0.171474948525429,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.399629831314087,0.611662745475769\n             ,-0.682762563228607,-0.341462641954422,0.911851763725281,0.227880761027336,0.303691446781158,0.796526610851288\n             ,0.522797167301178,0.573039770126343,0.718792796134949,0.393652617931366,0.427761524915695,0.903279960155487\n             ,-0.0332473926246166,0.173411548137665,0.978560149669647,0.111123643815517,0.303691446781158,0.796526610851288\n             ,0.522797167301178,0.349911212921143,0.597250580787659,0.721702098846436,0.619265675544739,0.530689239501953\n             ,0.578687310218811,0.573039770126343,0.718792796134949,0.393652617931366,0.3438441157341,0.581315696239471,0.73745733499527\n             ,0.614433944225311,0.529466807842255,0.584923803806305,0.619265675544739,0.530689239501953,0.578687310218811\n             ,0.349911212921143,0.597250580787659,0.721702098846436,0.3438441157341,0.581315696239471,0.73745733499527,0.311594694852829\n             ,0.703108549118042,0.639176845550537,0.595157265663147,0.650768876075745,0.471473932266235,0.614433944225311\n             ,0.529466807842255,0.584923803806305,0.173411548137665,0.978560149669647,0.111123643815517,0.427761524915695\n             ,0.903279960155487,-0.0332473926246166,-0.0669071823358536,0.486191123723984,-0.87128734588623,-0.149124965071678\n             ,0.574361085891724,-0.804904401302338,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.838148951530457\n             ,0.305466830730438,0.451880872249603,-0.84395432472229,0.306451618671417,0.440259546041489,-0.85843151807785\n             ,-0.220211803913116,0.46325159072876,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.765394926071167\n             ,0.3244788646698,0.555773317813873,-0.838148951530457,0.305466830730438,0.451880872249603,-0.852979302406311\n             ,-0.200469166040421,0.481911212205887,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.444218367338181\n             ,-0.208816647529602,0.871243715286255,-0.402393966913223,0.337146878242493,0.85112339258194,-0.765394926071167\n             ,0.3244788646698,0.555773317813873,-0.0118078086525202,-0.230731546878815,0.972945809364319,0.0376495942473412\n             ,0.290562659502029,0.956115007400513,-0.402393966913223,0.337146878242493,0.85112339258194,-0.444218367338181\n             ,-0.208816647529602,0.871243715286255,-0.0118078086525202,-0.230731546878815,0.972945809364319,0.254925400018692\n             ,-0.255845844745636,0.932499825954437,0.298023343086243,0.239961877465248,0.923904955387115,0.0376495942473412\n             ,0.290562659502029,0.956115007400513,0.254925400018692,-0.255845844745636,0.932499825954437,0.46340024471283\n             ,-0.317235618829727,0.827418744564056,0.511566936969757,0.168196827173233,0.842620372772217,0.298023343086243\n             ,0.239961877465248,0.923904955387115,-0.617351293563843,0.618397295475006,0.486273765563965,-0.613819122314453\n             ,0.653787076473236,0.442480057477951,-0.565762281417847,0.699094772338867,0.437240809202194,-0.580900967121124\n             ,0.676747918128967,0.452290087938309,-0.613819122314453,0.653787076473236,0.442480057477951,-0.574179291725159\n             ,0.614476501941681,-0.541051506996155,-0.553338885307312,0.652364552021027,-0.517915606498718,-0.565762281417847\n             ,0.699094772338867,0.437240809202194,-0.468677580356598,0.695621490478516,0.544474124908447,-0.464684039354324\n             ,0.73650199174881,0.491562396287918,-0.136432588100433,0.76638126373291,0.62773072719574,-0.133603423833847,0.738610506057739\n             ,0.660760641098022,-0.468677580356598,0.695621490478516,0.544474124908447,-0.617351293563843,0.618397295475006\n             ,0.486273765563965,-0.580900967121124,0.676747918128967,0.452290087938309,-0.464684039354324,0.73650199174881\n             ,0.491562396287918,0.115875713527203,0.724421501159668,0.679548561573029,0.114413313567638,0.738645255565643\n             ,0.664313733577728,0.288802593946457,0.72074019908905,0.630179822444916,0.311594694852829,0.703108549118042,0.639176845550537\n             ,0.115875713527203,0.724421501159668,0.679548561573029,-0.133603423833847,0.738610506057739,0.660760641098022\n             ,-0.136432588100433,0.76638126373291,0.62773072719574,0.114413313567638,0.738645255565643,0.664313733577728,0.311594694852829\n             ,0.703108549118042,0.639176845550537,0.288802593946457,0.72074019908905,0.630179822444916,0.483360201120377,0.719882130622864\n             ,0.498129189014435,0.595157265663147,0.650768876075745,0.471473932266235,0.953060507774353,-0.0791450366377831\n             ,-0.292252898216248,0.551096558570862,-0.25121533870697,-0.795728206634521,0.553836524486542,-0.170769691467285\n             ,-0.814925014972687,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.825739741325378,0.310847252607346\n             ,0.470667392015457,0.913910686969757,0.00122638128232211,0.405913442373276,0.985759019851685,-0.0950566306710243\n             ,-0.138720765709877,0.903454899787903,0.395046651363373,0.166455298662186,0.825739741325378,0.310847252607346\n             ,0.470667392015457,0.491690248250961,0.47496309876442,0.72982931137085,0.511566936969757,0.168196827173233,0.842620372772217\n             ,0.913910686969757,0.00122638128232211,0.405913442373276,0.825739741325378,0.310847252607346,0.470667392015457\n             ,0.903454899787903,0.395046651363373,0.166455298662186,0.483360201120377,0.719882130622864,0.498129189014435\n             ,0.491690248250961,0.47496309876442,0.72982931137085,0.911615371704102,0.410868912935257,-0.0120057743042707\n             ,0.777296364307404,0.555617034435272,-0.295127332210541,0.427761524915695,0.903279960155487,-0.0332473926246166\n             ,0.573039770126343,0.718792796134949,0.393652617931366,0.911615371704102,0.410868912935257,-0.0120057743042707\n             ,0.954911112785339,0.274276524782181,0.113653682172298,0.937605857849121,-0.0351583212614059,-0.345917791128159\n             ,0.909277319908142,0.0840957164764404,-0.407606035470963,0.911615371704102,0.410868912935257,-0.0120057743042707\n             ,0.573039770126343,0.718792796134949,0.393652617931366,0.619265675544739,0.530689239501953,0.578687310218811\n             ,0.954911112785339,0.274276524782181,0.113653682172298,0.955691754817963,0.266970068216324,0.124017179012299\n             ,0.954911112785339,0.274276524782181,0.113653682172298,0.619265675544739,0.530689239501953,0.578687310218811\n             ,0.614433944225311,0.529466807842255,0.584923803806305,0.955691754817963,0.266970068216324,0.124017179012299\n             ,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.937605857849121,-0.0351583212614059,-0.345917791128159\n             ,0.954911112785339,0.274276524782181,0.113653682172298,0.955691754817963,0.266970068216324,0.124017179012299\n             ,0.614433944225311,0.529466807842255,0.584923803806305,0.595157265663147,0.650768876075745,0.471473932266235\n             ,0.959389328956604,0.278238892555237,0.0464239455759525,0.777296364307404,0.555617034435272,-0.295127332210541\n             ,0.0935691148042679,0.299101799726486,-0.949622511863709,-0.0669071823358536,0.486191123723984,-0.87128734588623\n             ,0.427761524915695,0.903279960155487,-0.0332473926246166,0.777296364307404,0.555617034435272,-0.295127332210541\n             ,0.909277319908142,0.0840957164764404,-0.407606035470963,0.223619028925896,0.0197683665901423,-0.974476158618927\n             ,0.0935691148042679,0.299101799726486,-0.949622511863709,0.781544268131256,-0.494354426860809,0.380528897047043\n             ,0.913910686969757,0.00122638128232211,0.405913442373276,0.511566936969757,0.168196827173233,0.842620372772217\n             ,0.46340024471283,-0.317235618829727,0.827418744564056,0.781544268131256,-0.494354426860809,0.380528897047043\n             ,0.895158112049103,-0.394557535648346,-0.207403689622879,0.985759019851685,-0.0950566306710243,-0.138720765709877\n             ,0.913910686969757,0.00122638128232211,0.405913442373276,-0.731446206569672,0.503581285476685,0.459774166345596\n             ,-0.717735588550568,0.527478277683258,0.454557299613953,-0.84395432472229,0.306451618671417,0.440259546041489\n             ,-0.838148951530457,0.305466830730438,0.451880872249603,-0.731446206569672,0.503581285476685,0.459774166345596\n             ,-0.580900967121124,0.676747918128967,0.452290087938309,-0.565762281417847,0.699094772338867,0.437240809202194\n             ,-0.717735588550568,0.527478277683258,0.454557299613953,-0.717735588550568,0.527478277683258,0.454557299613953\n             ,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.880555152893066,0.364310264587402,-0.303151249885559\n             ,-0.84395432472229,0.306451618671417,0.440259546041489,-0.717735588550568,0.527478277683258,0.454557299613953\n             ,-0.565762281417847,0.699094772338867,0.437240809202194,-0.553338885307312,0.652364552021027,-0.517915606498718\n             ,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.645979166030884,0.542717456817627,0.53681343793869\n             ,-0.283104240894318,0.575908482074738,0.766929864883423,-0.136432588100433,0.76638126373291,0.62773072719574\n             ,-0.464684039354324,0.73650199174881,0.491562396287918,-0.645979166030884,0.542717456817627,0.53681343793869\n             ,-0.765394926071167,0.3244788646698,0.555773317813873,-0.402393966913223,0.337146878242493,0.85112339258194,-0.283104240894318\n             ,0.575908482074738,0.766929864883423,-0.645979166030884,0.542717456817627,0.53681343793869,-0.731446206569672\n             ,0.503581285476685,0.459774166345596,-0.838148951530457,0.305466830730438,0.451880872249603,-0.765394926071167\n             ,0.3244788646698,0.555773317813873,-0.645979166030884,0.542717456817627,0.53681343793869,-0.464684039354324,0.73650199174881\n             ,0.491562396287918,-0.580900967121124,0.676747918128967,0.452290087938309,-0.731446206569672,0.503581285476685\n             ,0.459774166345596,0.0814845785498619,0.534461736679077,0.84125554561615,0.300524145364761,0.497426092624664\n             ,0.813788950443268,0.288802593946457,0.72074019908905,0.630179822444916,0.114413313567638,0.738645255565643,0.664313733577728\n             ,0.0814845785498619,0.534461736679077,0.84125554561615,0.0376495942473412,0.290562659502029,0.956115007400513\n             ,0.298023343086243,0.239961877465248,0.923904955387115,0.300524145364761,0.497426092624664,0.813788950443268\n             ,0.0814845785498619,0.534461736679077,0.84125554561615,-0.283104240894318,0.575908482074738,0.766929864883423\n             ,-0.402393966913223,0.337146878242493,0.85112339258194,0.0376495942473412,0.290562659502029,0.956115007400513\n             ,0.0814845785498619,0.534461736679077,0.84125554561615,0.114413313567638,0.738645255565643,0.664313733577728\n             ,-0.136432588100433,0.76638126373291,0.62773072719574,-0.283104240894318,0.575908482074738,0.766929864883423\n             ,0.300524145364761,0.497426092624664,0.813788950443268,0.491690248250961,0.47496309876442,0.72982931137085,0.483360201120377\n             ,0.719882130622864,0.498129189014435,0.288802593946457,0.72074019908905,0.630179822444916,0.300524145364761,0.497426092624664\n             ,0.813788950443268,0.298023343086243,0.239961877465248,0.923904955387115,0.511566936969757,0.168196827173233\n             ,0.842620372772217,0.491690248250961,0.47496309876442,0.72982931137085,0.914809167385101,0.392747074365616,0.0942015051841736\n             ,0.903454899787903,0.395046651363373,0.166455298662186,0.985759019851685,-0.0950566306710243,-0.138720765709877\n             ,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.914809167385101,0.392747074365616,0.0942015051841736\n             ,0.595157265663147,0.650768876075745,0.471473932266235,0.483360201120377,0.719882130622864,0.498129189014435\n             ,0.903454899787903,0.395046651363373,0.166455298662186,0.225880712270737,-0.859437644481659,-0.458633750677109\n             ,0.29811355471611,-0.682091355323792,-0.667742192745209,0.311078637838364,-0.216382816433907,-0.925423443317413\n             ,0.16324470937252,-0.308202177286148,-0.937210023403168,0.225880712270737,-0.859437644481659,-0.458633750677109\n             ,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.282306700944901,-0.637052953243256,-0.717263162136078\n             ,0.29811355471611,-0.682091355323792,-0.667742192745209,0.225880712270737,-0.859437644481659,-0.458633750677109\n             ,-0.0423314645886421,-0.689121425151825,-0.723408401012421,-0.268338412046433,-0.713256895542145,-0.647502183914185\n             ,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.260857611894608,-0.829145133495331,-0.494440793991089\n             ,-0.810647666454315,-0.584102094173431,-0.0409278348088264,-0.905829727649689,-0.366898268461227,-0.21179735660553\n             ,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.260857611894608,-0.829145133495331,-0.494440793991089\n             ,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.638520240783691,-0.465828388929367,-0.612613916397095\n             ,-0.810647666454315,-0.584102094173431,-0.0409278348088264,0.29811355471611,-0.682091355323792,-0.667742192745209\n             ,0.264597475528717,-0.737169206142426,-0.621747314929962,0.115910343825817,-0.0576019249856472,-0.991588056087494\n             ,0.311078637838364,-0.216382816433907,-0.925423443317413,0.29811355471611,-0.682091355323792,-0.667742192745209\n             ,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.247060716152191,-0.702493846416473,-0.667430460453033\n             ,0.264597475528717,-0.737169206142426,-0.621747314929962,-0.282306700944901,-0.637052953243256,-0.717263162136078\n             ,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.901528060436249,-0.393501937389374,-0.180009379982948\n             ,-0.247060716152191,-0.702493846416473,-0.667430460453033,-0.901528060436249,-0.393501937389374,-0.180009379982948\n             ,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.955415546894073,0.030608743429184,-0.293673634529114\n             ,-0.957066535949707,0.0726807713508606,-0.280608594417572,-0.810647666454315,-0.584102094173431,-0.0409278348088264\n             ,-0.942904889583588,-0.124770976603031,-0.308808296918869,-0.955415546894073,0.030608743429184,-0.293673634529114\n             ,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.67541229724884,0.485521674156189,-0.555055737495422\n             ,-0.671055376529694,0.46099641919136,-0.580660879611969,0.16324470937252,-0.308202177286148,-0.937210023403168\n             ,0.311078637838364,-0.216382816433907,-0.925423443317413,-0.241613432765007,0.616148710250854,-0.749655723571777\n             ,-0.0423314645886421,-0.689121425151825,-0.723408401012421,0.16324470937252,-0.308202177286148,-0.937210023403168\n             ,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.241613432765007,0.616148710250854,-0.749655723571777\n             ,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.268338412046433,-0.713256895542145,-0.647502183914185\n             ,-0.0423314645886421,-0.689121425151825,-0.723408401012421,-0.149124965071678,0.574361085891724,-0.804904401302338\n             ,-0.0669071823358536,0.486191123723984,-0.87128734588623,-0.638520240783691,-0.465828388929367,-0.612613916397095\n             ,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.0990582183003426,-0.981914699077606,0.161341309547424\n             ,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.402248114347458,-0.864168643951416,0.302339196205139\n             ,-0.0841861814260483,-0.983832597732544,0.158069923520088,-0.573512434959412,-0.801527380943298,-0.169225797057152\n             ,-0.202129036188126,-0.938186347484589,-0.280980914831162,-0.0823863819241524,-0.986806333065033,0.139376148581505\n             ,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.0823863819241524,-0.986806333065033,0.139376148581505\n             ,-0.0841861814260483,-0.983832597732544,0.158069923520088,-0.402248114347458,-0.864168643951416,0.302339196205139\n             ,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.0981104820966721,-0.982542932033539,0.158062309026718\n             ,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.417831748723984,-0.851728618144989,0.316188275814056\n             ,-0.0990582183003426,-0.981914699077606,0.161341309547424,-0.0981104820966721,-0.982542932033539,0.158062309026718\n             ,-0.0767614245414734,-0.98267537355423,0.168691396713257,-0.232284545898438,-0.856678247451782,0.460593432188034\n             ,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.0490679740905762,-0.984484553337097,0.168471187353134\n             ,-0.0472139939665794,-0.860794186592102,0.506758570671082,-0.232284545898438,-0.856678247451782,0.460593432188034\n             ,-0.0767614245414734,-0.98267537355423,0.168691396713257,-0.0490679740905762,-0.984484553337097,0.168471187353134\n             ,-0.0325715281069279,-0.988623857498169,0.14683997631073,0.0744497627019882,-0.870341658592224,0.486788034439087\n             ,-0.0472139939665794,-0.860794186592102,0.506758570671082,-0.0325715281069279,-0.988623857498169,0.14683997631073\n             ,-0.0330409817397594,-0.990994393825531,0.129762962460518,0.212042272090912,-0.828755676746368,0.517882287502289\n             ,0.0744497627019882,-0.870341658592224,0.486788034439087,-0.574179291725159,0.614476501941681,-0.541051506996155\n             ,0.311078637838364,-0.216382816433907,-0.925423443317413,0.115910343825817,-0.0576019249856472,-0.991588056087494\n             ,-0.553338885307312,0.652364552021027,-0.517915606498718,0.551096558570862,-0.25121533870697,-0.795728206634521\n             ,-0.957066535949707,0.0726807713508606,-0.280608594417572,-0.955415546894073,0.030608743429184,-0.293673634529114\n             ,0.553836524486542,-0.170769691467285,-0.814925014972687,0.553836524486542,-0.170769691467285,-0.814925014972687\n             ,-0.955415546894073,0.030608743429184,-0.293673634529114,-0.942904889583588,-0.124770976603031,-0.308808296918869\n             ,0.223619028925896,0.0197683665901423,-0.974476158618927,0.0935691148042679,0.299101799726486,-0.949622511863709\n             ,0.223619028925896,0.0197683665901423,-0.974476158618927,-0.942904889583588,-0.124770976603031,-0.308808296918869\n             ,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.677798688411713,0.543503999710083,-0.49516898393631\n             ,0.115910343825817,-0.0576019249856472,-0.991588056087494,-0.157777264714241,0.23123687505722,-0.960018694400787\n             ,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.462465226650238,-0.184937626123428,-0.867135524749756\n             ,-0.29739573597908,-0.262825429439545,-0.917866349220276,-0.202129036188126,-0.938186347484589,-0.280980914831162\n             ,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.852979302406311,-0.200469166040421,0.481911212205887\n             ,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.402248114347458,-0.864168643951416,0.302339196205139\n             ,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.916306138038635,-0.243330180644989,0.318077772855759\n             ,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.402248114347458,-0.864168643951416,0.302339196205139\n             ,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.916306138038635,-0.243330180644989,0.318077772855759\n             ,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.573512434959412,-0.801527380943298,-0.169225797057152\n             ,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.784946858882904,-0.199270412325859,0.586642801761627\n             ,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.232284545898438,-0.856678247451782,0.460593432188034\n             ,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.784946858882904,-0.199270412325859,0.586642801761627\n             ,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.417831748723984,-0.851728618144989,0.316188275814056\n             ,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.0118078086525202,-0.230731546878815,0.972945809364319\n             ,-0.0472139939665794,-0.860794186592102,0.506758570671082,0.0744497627019882,-0.870341658592224,0.486788034439087\n             ,0.254925400018692,-0.255845844745636,0.932499825954437,-0.0118078086525202,-0.230731546878815,0.972945809364319\n             ,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.232284545898438,-0.856678247451782,0.460593432188034\n             ,-0.0472139939665794,-0.860794186592102,0.506758570671082,0.254925400018692,-0.255845844745636,0.932499825954437\n             ,0.0744497627019882,-0.870341658592224,0.486788034439087,0.212042272090912,-0.828755676746368,0.517882287502289\n             ,0.46340024471283,-0.317235618829727,0.827418744564056,0.509586453437805,-0.79888927936554,0.319527089595795\n             ,0.566634595394135,-0.823737919330597,0.0195191036909819,0.895158112049103,-0.394557535648346,-0.207403689622879\n             ,0.781544268131256,-0.494354426860809,0.380528897047043,0.509586453437805,-0.79888927936554,0.319527089595795\n             ,0.781544268131256,-0.494354426860809,0.380528897047043,0.46340024471283,-0.317235618829727,0.827418744564056\n             ,0.212042272090912,-0.828755676746368,0.517882287502289,-0.879374027252197,0.0191096197813749,-0.475748002529144\n             ,-0.462465226650238,-0.184937626123428,-0.867135524749756,-0.573512434959412,-0.801527380943298,-0.169225797057152\n             ,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.916306138038635,-0.243330180644989,0.318077772855759\n             ,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.84395432472229,0.306451618671417,0.440259546041489\n             ,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.879374027252197,0.0191096197813749,-0.475748002529144\n             ,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.916306138038635,-0.243330180644989,0.318077772855759\n             ,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.879374027252197,0.0191096197813749,-0.475748002529144\n             ,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.157777264714241,0.23123687505722,-0.960018694400787\n             ,-0.462465226650238,-0.184937626123428,-0.867135524749756,0.985759019851685,-0.0950566306710243,-0.138720765709877\n             ,0.895158112049103,-0.394557535648346,-0.207403689622879,0.953060507774353,-0.0791450366377831,-0.292252898216248\n             ,0.895158112049103,-0.394557535648346,-0.207403689622879,0.551096558570862,-0.25121533870697,-0.795728206634521\n             ,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.553836524486542,-0.170769691467285,-0.814925014972687\n             ,0.909277319908142,0.0840957164764404,-0.407606035470963,0.937605857849121,-0.0351583212614059,-0.345917791128159\n             ,0.553836524486542,-0.170769691467285,-0.814925014972687,0.937605857849121,-0.0351583212614059,-0.345917791128159\n             ,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.223619028925896,0.0197683665901423,-0.974476158618927\n             ,0.909277319908142,0.0840957164764404,-0.407606035470963,0.553836524486542,-0.170769691467285,-0.814925014972687\n             ,0.595157265663147,0.650768876075745,0.471473932266235,0.914809167385101,0.392747074365616,0.0942015051841736\n             ,0.959389328956604,0.278238892555237,0.0464239455759525,0.950989067554474,-0.0476415567100048,-0.305532544851303\n             ,0.959389328956604,0.278238892555237,0.0464239455759525,0.953060507774353,-0.0791450366377831,-0.292252898216248\n             ,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.959389328956604,0.278238892555237,0.0464239455759525\n             ,0.914809167385101,0.392747074365616,0.0942015051841736,0.909277319908142,0.0840957164764404,-0.407606035470963\n             ,0.777296364307404,0.555617034435272,-0.295127332210541,0.911615371704102,0.410868912935257,-0.0120057743042707\n             ,0.959389328956604,0.278238892555237,0.0464239455759525,0.950989067554474,-0.0476415567100048,-0.305532544851303\n             ,0.955691754817963,0.266970068216324,0.124017179012299,0.16324470937252,-0.308202177286148,-0.937210023403168\n             ,-0.0423314645886421,-0.689121425151825,-0.723408401012421,0.225880712270737,-0.859437644481659,-0.458633750677109\n             ,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.942904889583588,-0.124770976603031,-0.308808296918869\n             ,-0.810647666454315,-0.584102094173431,-0.0409278348088264,0.311078637838364,-0.216382816433907,-0.925423443317413\n             ,-0.574179291725159,0.614476501941681,-0.541051506996155,-0.67541229724884,0.485521674156189,-0.555055737495422\n             ,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.671055376529694,0.46099641919136,-0.580660879611969\n             ,-0.562178492546082,0.54021954536438,-0.626193344593048,0.16324470937252,-0.308202177286148,-0.937210023403168\n             ,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.399629831314087,0.611662745475769,-0.682762563228607\n             ,-0.462465226650238,-0.184937626123428,-0.867135524749756,-0.157777264714241,0.23123687505722,-0.960018694400787\n             ,-0.29739573597908,-0.262825429439545,-0.917866349220276,-0.638520240783691,-0.465828388929367,-0.612613916397095\n             ,-0.0669071823358536,0.486191123723984,-0.87128734588623,0.0935691148042679,0.299101799726486,-0.949622511863709\n             ,-0.553338885307312,0.652364552021027,-0.517915606498718,0.115910343825817,-0.0576019249856472,-0.991588056087494\n             ,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.613819122314453,0.653787076473236,0.442480057477951\n             ,-0.617351293563843,0.618397295475006,0.486273765563965,-0.751705825328827,0.499238789081573,0.430927991867065\n             ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435\n             ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435\n             ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435\n             ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435\n             ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435\n             ,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199\n             ,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199\n             ,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121\n             ,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121\n             ,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121\n             ,-0.22176705300808,-0.273640364408493,-0.935916841030121,0.813896775245667,0.349610984325409,0.464051961898804\n             ,0.614185929298401,0.569629371166229,0.546166718006134,0.756061971187592,0.654500067234039,2.3479871742893e-005\n             ,0.925318360328674,0.379191190004349,1.48290735069168e-006,0.391825526952744,0.788023412227631,0.474859833717346\n             ,0.470227479934692,0.88252204656601,0.00639821914955974,0.756061971187592,0.654500067234039,2.3479871742893e-005\n             ,0.614185929298401,0.569629371166229,0.546166718006134,0.801087200641632,-0.297826498746872,0.519190430641174\n             ,0.931309640407562,-0.364154070615768,0.00736169191077352,0.934493005275726,0.355923593044281,0.00642255879938602\n             ,0.806965947151184,0.306465566158295,0.504861176013947,0.367402404546738,-0.773531317710876,0.516395926475525\n             ,0.596734344959259,-0.558585286140442,0.576099514961243,0.737963557243347,-0.674840569496155,-2.56854491453851e-005\n             ,0.44488126039505,-0.89555948972702,0.00733880698680878,0.596734344959259,-0.558585286140442,0.576099514961243\n             ,0.800876438617706,-0.339855968952179,0.493046551942825,0.922433912754059,-0.386155009269714,-2.86983799924201e-006\n             ,0.737963557243347,-0.674840569496155,-2.56854491453851e-005,0.800876438617706,-0.339855968952179,0.493046551942825\n             ,0.334624856710434,-0.800290584564209,0.497555166482925,0.379204839468002,-0.925312757492065,-1.92532752407715e-006\n             ,0.922433912754059,-0.386155009269714,-2.86983799924201e-006,0.596734344959259,-0.558585286140442,0.576099514961243\n             ,0.106314092874527,-0.103658013045788,0.988914728164673,0.257298767566681,-0.254731476306915,0.932153046131134\n             ,0.800876438617706,-0.339855968952179,0.493046551942825,0.101462937891483,-0.233674854040146,0.967006385326386\n             ,0.106314092874527,-0.103658013045788,0.988914728164673,0.596734344959259,-0.558585286140442,0.576099514961243\n             ,0.367402404546738,-0.773531317710876,0.516395926475525,0.806965947151184,0.306465566158295,0.504861176013947\n             ,0.331482470035553,0.125218272209167,0.935114860534668,0.318617641925812,-0.106823146343231,0.941844820976257\n             ,0.801087200641632,-0.297826498746872,0.519190430641174,0.614185929298401,0.569629371166229,0.546166718006134\n             ,0.136184617877007,0.141381427645683,0.980543255805969,0.119092851877213,0.270987540483475,0.955187201499939\n             ,0.391825526952744,0.788023412227631,0.474859833717346,0.283706575632095,0.309986978769302,0.907424211502075\n             ,0.136184617877007,0.141381427645683,0.980543255805969,0.614185929298401,0.569629371166229,0.546166718006134\n             ,0.813896775245667,0.349610984325409,0.464051961898804,0.925318360328674,0.379191190004349,1.48290735069168e-006\n             ,0.386173337697983,0.922426223754883,-1.33558714878745e-005,0.350653737783432,0.829828143119812,0.434081971645355\n             ,0.813896775245667,0.349610984325409,0.464051961898804,0.334624856710434,-0.800290584564209,0.497555166482925\n             ,0.249570056796074,-0.831263303756714,0.496705174446106,0.287294447422028,-0.95784193277359,0.000848318391945213\n             ,0.379204839468002,-0.925312757492065,-1.92532752407715e-006,0.257298767566681,-0.254731476306915,0.932153046131134\n             ,0.0777146592736244,-0.258388966321945,0.962909936904907,0.249570056796074,-0.831263303756714,0.496705174446106\n             ,0.334624856710434,-0.800290584564209,0.497555166482925,0.119092851877213,0.270987540483475,0.955187201499939\n             ,0.136184617877007,0.141381427645683,0.980543255805969,0.106314092874527,-0.103658013045788,0.988914728164673\n             ,0.101462937891483,-0.233674854040146,0.967006385326386,0.249570056796074,-0.831263303756714,0.496705174446106\n             ,0.202535301446915,-0.827068865299225,0.524343967437744,0.230931788682938,-0.972930014133453,0.00881298631429672\n             ,0.287294447422028,-0.95784193277359,0.000848318391945213,0.0620995722711086,-0.238982826471329,0.969036042690277\n             ,0.202535301446915,-0.827068865299225,0.524343967437744,0.249570056796074,-0.831263303756714,0.496705174446106\n             ,0.0777146592736244,-0.258388966321945,0.962909936904907,-0.224501311779022,0.125647932291031,0.966339349746704\n             ,0.0620995722711086,-0.238982826471329,0.969036042690277,0.0777146592736244,-0.258388966321945,0.962909936904907\n             ,0.106314092874527,-0.103658013045788,0.988914728164673,0.136184617877007,0.141381427645683,0.980543255805969\n             ,-0.267910957336426,0.269903123378754,0.924865424633026,-0.224501311779022,0.125647932291031,0.966339349746704\n             ,0.106314092874527,-0.103658013045788,0.988914728164673,-0.359729558229446,0.842673659324646,0.400619268417358\n             ,-0.267910957336426,0.269903123378754,0.924865424633026,0.283706575632095,0.309986978769302,0.907424211502075\n             ,0.350653737783432,0.829828143119812,0.434081971645355,0.386173337697983,0.922426223754883,-1.33558714878745e-005\n             ,-0.379228323698044,0.925303101539612,-2.7772266548709e-005,-0.359729558229446,0.842673659324646,0.400619268417358\n             ,0.350653737783432,0.829828143119812,0.434081971645355,-0.484778821468353,-0.720648169517517,0.495636761188507\n             ,-0.907637715339661,-0.237347409129143,0.34620800614357,-0.961853384971619,-0.273398995399475,-0.00954078417271376\n             ,-0.530582964420319,-0.847630381584167,0.00210796948522329,-0.223055556416512,-0.293780386447906,0.929483354091644\n             ,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.907637715339661,-0.237347409129143,0.34620800614357\n             ,-0.484778821468353,-0.720648169517517,0.495636761188507,-0.82353150844574,0.433955609798431,0.365346997976303\n             ,-0.876223564147949,0.481887936592102,-0.00404113344848156,-0.961853384971619,-0.273398995399475,-0.00954078417271376\n             ,-0.907637715339661,-0.237347409129143,0.34620800614357,-0.784685611724854,0.430022925138474,0.446484923362732\n             ,-0.82353150844574,0.433955609798431,0.365346997976303,-0.516254961490631,0.0715761184692383,0.85343873500824\n             ,-0.224501311779022,0.125647932291031,0.966339349746704,-0.267910957336426,0.269903123378754,0.924865424633026\n             ,-0.839977502822876,0.365999639034271,0.400602132081985,-0.784685611724854,0.430022925138474,0.446484923362732\n             ,-0.224501311779022,0.125647932291031,0.966339349746704,-0.379228323698044,0.925303101539612,-2.7772266548709e-005\n             ,-0.922426700592041,0.386172264814377,-1.29236177599523e-005,-0.839977502822876,0.365999639034271,0.400602132081985\n             ,-0.359729558229446,0.842673659324646,0.400619268417358,-0.879828155040741,0.475291937589645,4.95063375183236e-007\n             ,-0.876223564147949,0.481887936592102,-0.00404113344848156,-0.82353150844574,0.433955609798431,0.365346997976303\n             ,-0.784685611724854,0.430022925138474,0.446484923362732,-0.922426700592041,0.386172264814377,-1.29236177599523e-005\n             ,-0.879828155040741,0.475291937589645,4.95063375183236e-007,-0.784685611724854,0.430022925138474,0.446484923362732\n             ,-0.839977502822876,0.365999639034271,0.400602132081985,0.391825526952744,0.788023412227631,0.474859833717346\n             ,0.806965947151184,0.306465566158295,0.504861176013947,0.934493005275726,0.355923593044281,0.00642255879938602\n             ,0.470227479934692,0.88252204656601,0.00639821914955974,0.801087200641632,-0.297826498746872,0.519190430641174\n             ,0.367402404546738,-0.773531317710876,0.516395926475525,0.44488126039505,-0.89555948972702,0.00733880698680878\n             ,0.931309640407562,-0.364154070615768,0.00736169191077352,0.367402404546738,-0.773531317710876,0.516395926475525\n             ,0.801087200641632,-0.297826498746872,0.519190430641174,0.318617641925812,-0.106823146343231,0.941844820976257\n             ,0.101462937891483,-0.233674854040146,0.967006385326386,0.391825526952744,0.788023412227631,0.474859833717346\n             ,0.119092851877213,0.270987540483475,0.955187201499939,0.331482470035553,0.125218272209167,0.935114860534668\n             ,0.806965947151184,0.306465566158295,0.504861176013947,0.202535301446915,-0.827068865299225,0.524343967437744\n             ,-0.484778821468353,-0.720648169517517,0.495636761188507,-0.530582964420319,-0.847630381584167,0.00210796948522329\n             ,0.230931788682938,-0.972930014133453,0.00881298631429672,0.0620995722711086,-0.238982826471329,0.969036042690277\n             ,-0.223055556416512,-0.293780386447906,0.929483354091644,-0.484778821468353,-0.720648169517517,0.495636761188507\n             ,0.202535301446915,-0.827068865299225,0.524343967437744,-0.516254961490631,0.0715761184692383,0.85343873500824\n             ,-0.223055556416512,-0.293780386447906,0.929483354091644,0.0620995722711086,-0.238982826471329,0.969036042690277\n             ,-0.224501311779022,0.125647932291031,0.966339349746704,0.318617641925812,-0.106823146343231,0.941844820976257\n             ,0.331482470035553,0.125218272209167,0.935114860534668,0.119092851877213,0.270987540483475,0.955187201499939\n             ,0.101462937891483,-0.233674854040146,0.967006385326386,0.800876438617706,-0.339855968952179,0.493046551942825\n             ,0.257298767566681,-0.254731476306915,0.932153046131134,0.334624856710434,-0.800290584564209,0.497555166482925\n             ,0.813896775245667,0.349610984325409,0.464051961898804,0.350653737783432,0.829828143119812,0.434081971645355\n             ,0.283706575632095,0.309986978769302,0.907424211502075,0.257298767566681,-0.254731476306915,0.932153046131134\n             ,0.106314092874527,-0.103658013045788,0.988914728164673,0.0777146592736244,-0.258388966321945,0.962909936904907\n             ,0.136184617877007,0.141381427645683,0.980543255805969,0.283706575632095,0.309986978769302,0.907424211502075\n             ,-0.267910957336426,0.269903123378754,0.924865424633026,-0.907637715339661,-0.237347409129143,0.34620800614357\n             ,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.82353150844574,0.433955609798431,0.365346997976303\n             ,-0.267910957336426,0.269903123378754,0.924865424633026,-0.359729558229446,0.842673659324646,0.400619268417358\n             ,-0.839977502822876,0.365999639034271,0.400602132081985,-0.715936124324799,-0.265720427036285,-0.645622253417969\n             ,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.590422987937927,0.577111005783081,-0.564219415187836\n             ,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.280009269714355,0.941216468811035,-0.18896122276783\n             ,-0.94429612159729,0.285850405693054,0.163077712059021,-0.838626086711884,0.269073814153671,0.473609089851379\n             ,-0.28647455573082,0.941656053066254,0.176681011915207,0.444880247116089,-0.370750695466995,0.815245687961578\n             ,0.441483318805695,-0.799440860748291,0.407414764165878,0.971585929393768,-0.201965615153313,0.123412564396858\n             ,0.867507219314575,0.29306098818779,0.401928424835205,-0.838626086711884,0.269073814153671,0.473609089851379\n             ,-0.593102335929871,0.413477510213852,0.690844416618347,-0.093751385807991,0.893021583557129,0.440139919519424\n             ,-0.28647455573082,0.941656053066254,0.176681011915207,-0.593102335929871,0.413477510213852,0.690844416618347\n             ,-0.287397742271423,0.360831707715988,0.887244582176209,0.16777765750885,0.800705552101135,0.57508373260498,-0.093751385807991\n             ,0.893021583557129,0.440139919519424,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.715936124324799\n             ,-0.265720427036285,-0.645622253417969,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.188246309757233\n             ,-0.278920531272888,-0.941682875156403,0.862523198127747,-0.491381734609604,-0.120820865035057,0.275533765554428\n             ,-0.959253966808319,0.0625537186861038,0.1276044100523,-0.98238742351532,-0.136499106884003,0.669596016407013\n             ,-0.609213531017303,-0.424853086471558,0.441483318805695,-0.799440860748291,0.407414764165878,0.275533765554428\n             ,-0.959253966808319,0.0625537186861038,0.862523198127747,-0.491381734609604,-0.120820865035057,0.971585929393768\n             ,-0.201965615153313,0.123412564396858,0.1276044100523,-0.98238742351532,-0.136499106884003,-0.157730147242546\n             ,-0.903618812561035,-0.398238956928253,0.234486192464828,-0.579630196094513,-0.780413389205933,0.669596016407013\n             ,-0.609213531017303,-0.424853086471558,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.188246309757233\n             ,-0.278920531272888,-0.941682875156403,0.234486192464828,-0.579630196094513,-0.780413389205933,-0.157730147242546\n             ,-0.903618812561035,-0.398238956928253,-0.590422987937927,0.577111005783081,-0.564219415187836,-0.942690014839172\n             ,0.129888460040092,-0.307350814342499,-0.94429612159729,0.285850405693054,0.163077712059021,-0.280009269714355\n             ,0.941216468811035,-0.18896122276783,0.444880247116089,-0.370750695466995,0.815245687961578,0.867507219314575\n             ,0.29306098818779,0.401928424835205,0.477360427379608,0.551516830921173,0.684073209762573,0.125939533114433,0.102134250104427\n             ,0.986766338348389,-0.093751385807991,0.893021583557129,0.440139919519424,-0.48685422539711,0.635573267936707\n             ,0.599182426929474,-0.644909203052521,0.686387538909912,0.336101531982422,-0.28647455573082,0.941656053066254\n             ,0.176681011915207,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.726660370826721,-0.194792434573174\n             ,-0.658802449703217,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.590422987937927,0.577111005783081\n             ,-0.564219415187836,0.430329024791718,-0.429309993982315,0.794046521186829,0.698819696903229,-0.628040254116058\n             ,0.342368811368942,0.971585929393768,-0.201965615153313,0.123412564396858,0.862523198127747,-0.491381734609604\n             ,-0.120820865035057,0.311042487621307,0.756668508052826,0.575069785118103,-0.000230645935516804,0.945964872837067\n             ,0.324269145727158,0.125939533114433,0.102134250104427,0.986766338348389,-0.287397742271423,0.360831707715988\n             ,0.887244582176209,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.587697565555573,0.621326804161072\n             ,-0.518232226371765,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.715936124324799,-0.265720427036285\n             ,-0.645622253417969,0.196220353245735,-0.529779434204102,0.82512503862381,-0.890061616897583,0.000229601078899577\n             ,-0.455840140581131,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.157730147242546,-0.903618812561035\n             ,-0.398238956928253,-0.0995239168405533,-0.824471116065979,-0.55708384513855,0.174817264080048,-0.965653240680695\n             ,-0.192231014370918,0.669596016407013,-0.609213531017303,-0.424853086471558,0.234486192464828,-0.579630196094513\n             ,-0.780413389205933,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.118636824190617,0.992627620697021\n             ,0.0248145386576653,-0.838626086711884,0.269073814153671,0.473609089851379,-0.94429612159729,0.285850405693054\n             ,0.163077712059021,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.890061616897583,0.000229601078899577\n             ,-0.455840140581131,0.15072038769722,0.436317950487137,-0.887079477310181,-0.393206983804703,0.276302039623261\n             ,-0.876952350139618,-0.715936124324799,-0.265720427036285,-0.645622253417969,0.932197749614716,0.288106322288513\n             ,0.219093680381775,0.938903152942657,-0.259861499071121,0.225683227181435,0.441483318805695,-0.799440860748291\n             ,0.407414764165878,0.444880247116089,-0.370750695466995,0.815245687961578,-0.593102335929871,0.413477510213852\n             ,0.690844416618347,-0.838626086711884,0.269073814153671,0.473609089851379,-0.118636824190617,0.992627620697021\n             ,0.0248145386576653,0.353509962558746,0.865797221660614,0.354155212640762,-0.280009269714355,0.941216468811035\n             ,-0.18896122276783,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.0224729143083096,0.939465522766113\n             ,-0.341905742883682,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.590422987937927,0.577111005783081\n             ,-0.564219415187836,-0.45841521024704,0.236967280507088,0.856564044952393,-0.48685422539711,0.635573267936707\n             ,0.599182426929474,-0.093751385807991,0.893021583557129,0.440139919519424,0.16777765750885,0.800705552101135\n             ,0.57508373260498,0.353509962558746,0.865797221660614,0.354155212640762,0.311042487621307,0.756668508052826,0.575069785118103\n             ,-0.287397742271423,0.360831707715988,0.887244582176209,-0.593102335929871,0.413477510213852,0.690844416618347\n             ,0.1276044100523,-0.98238742351532,-0.136499106884003,0.712573170661926,-0.434123963117599,-0.551158607006073\n             ,0.196220353245735,-0.529779434204102,0.82512503862381,-0.157730147242546,-0.903618812561035,-0.398238956928253\n             ,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.587697565555573,0.621326804161072,-0.518232226371765\n             ,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.642236828804016,0.662946939468384,-0.384750843048096\n             ,-0.94429612159729,0.285850405693054,0.163077712059021,0.275533765554428,-0.959253966808319,0.0625537186861038\n             ,0.825049936771393,-0.453089714050293,-0.337642371654511,0.712573170661926,-0.434123963117599,-0.551158607006073\n             ,0.1276044100523,-0.98238742351532,-0.136499106884003,0.938903152942657,-0.259861499071121,0.225683227181435\n             ,0.825049936771393,-0.453089714050293,-0.337642371654511,0.275533765554428,-0.959253966808319,0.0625537186861038\n             ,0.441483318805695,-0.799440860748291,0.407414764165878,0.477360427379608,0.551516830921173,0.684073209762573\n             ,0.867507219314575,0.29306098818779,0.401928424835205,0.458260357379913,-0.0337133072316647,0.888178408145905\n             ,0.131552502512932,0.257139623165131,0.957378268241882,0.444880247116089,-0.370750695466995,0.815245687961578\n             ,0.963503360748291,0.0733285918831825,-0.257457196712494,0.932197749614716,0.288106322288513,0.219093680381775\n             ,0.971585929393768,-0.201965615153313,0.123412564396858,0.698819696903229,-0.628040254116058,0.342368811368942\n             ,0.710298955440521,-0.332644939422607,0.620340883731842,0.867507219314575,0.29306098818779,0.401928424835205\n             ,0.862523198127747,-0.491381734609604,-0.120820865035057,0.669596016407013,-0.609213531017303,-0.424853086471558\n             ,0.174817264080048,-0.965653240680695,-0.192231014370918,-0.324506491422653,-0.76884526014328,-0.550974130630493\n             ,0.430329024791718,-0.429309993982315,0.794046521186829,-0.39165410399437,-0.637071013450623,-0.663888275623322\n             ,-0.0995239168405533,-0.824471116065979,-0.55708384513855,0.234486192464828,-0.579630196094513,-0.780413389205933\n             ,-0.188246309757233,-0.278920531272888,-0.941682875156403,-0.564248859882355,-0.400254756212235,-0.72209370136261\n             ,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.188246309757233,-0.278920531272888,-0.941682875156403\n             ,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.803242444992065,0.584271669387817,-0.115879893302917\n             ,-0.280009269714355,0.941216468811035,-0.18896122276783,0.16777765750885,0.800705552101135,0.57508373260498,0.477360427379608\n             ,0.551516830921173,0.684073209762573,0.131552502512932,0.257139623165131,0.957378268241882,-0.45841521024704\n             ,0.236967280507088,0.856564044952393,0.125939533114433,0.102134250104427,0.986766338348389,0.477360427379608\n             ,0.551516830921173,0.684073209762573,0.16777765750885,0.800705552101135,0.57508373260498,-0.287397742271423,0.360831707715988\n             ,0.887244582176209,0.125939533114433,0.102134250104427,0.986766338348389,-0.000230645935516804,0.945964872837067\n             ,0.324269145727158,0.963503360748291,0.0733285918831825,-0.257457196712494,0.444880247116089,-0.370750695466995\n             ,0.815245687961578,0.867507219314575,0.29306098818779,0.401928424835205,0.710298955440521,-0.332644939422607\n             ,0.620340883731842,0.458260357379913,-0.0337133072316647,0.888178408145905,-0.644909203052521,0.686387538909912\n             ,0.336101531982422,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.280009269714355,0.941216468811035\n             ,-0.18896122276783,-0.28647455573082,0.941656053066254,0.176681011915207,-0.590430736541748,-0.351442277431488\n             ,-0.726553440093994,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.188246309757233,-0.278920531272888\n             ,-0.941682875156403,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.726660370826721,-0.194792434573174\n             ,-0.658802449703217,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.425395786762238,0.0713668540120125\n             ,-0.902189075946808,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.125359445810318,-0.967730283737183\n             ,-0.218593493103981,0.734102785587311,-0.292018711566925,-0.613040089607239,0.912895321846008,-0.237331077456474\n             ,-0.332108557224274,-0.125359445810318,-0.967730283737183,-0.218593493103981,-0.554785251617432,-0.486120134592056\n             ,-0.675204038619995,0.0883260667324066,-0.0597434565424919,-0.994298338890076,0.734102785587311,-0.292018711566925\n             ,-0.613040089607239,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.416033059358597,-0.68202668428421\n             ,-0.60146164894104,0.245215684175491,0.0387152023613453,-0.968695223331451,0.550641417503357,-0.21704863011837\n             ,-0.806029736995697,0.0798471421003342,-0.235298857092857,-0.968637645244598,-0.382183432579041,-0.525775790214539\n             ,-0.759931325912476,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.631522357463837,-0.462838768959045\n             ,-0.622060894966125,0.0447333157062531,0.253253638744354,-0.966365098953247,0.245215684175491,0.0387152023613453\n             ,-0.968695223331451,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.692777395248413,-0.369596987962723\n             ,-0.619239509105682,0.014613856561482,0.369894355535507,-0.928958892822266,0.0447333157062531,0.253253638744354\n             ,-0.966365098953247,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.816524565219879,-0.212788254022598\n             ,-0.536664545536041,-0.109934903681278,0.544603824615479,-0.831457078456879,0.014613856561482,0.369894355535507\n             ,-0.928958892822266,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.967885553836823,0.0332815907895565\n             ,-0.2491784542799,-0.262595504522324,0.756710708141327,-0.598692297935486,-0.109934903681278,0.544603824615479\n             ,-0.831457078456879,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.961901783943176,-0.240396350622177\n             ,-0.130209416151047,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.262595504522324,0.756710708141327\n             ,-0.598692297935486,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.114330105483532,0.989368736743927\n             ,-0.0898787155747414,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.939602613449097,-0.0850153714418411\n             ,-0.33154085278511,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.492600291967392,-0.0365926474332809\n             ,0.869486033916473,0.168574303388596,0.687315046787262,0.706527233123779,0.379244118928909,0.687416434288025\n             ,0.6193807721138,-0.492600291967392,-0.0365926474332809,0.869486033916473,-0.26186203956604,-0.22778545320034\n             ,0.937839031219482,0.452623516321182,0.438722670078278,0.776308119297028,0.168574303388596,0.687315046787262\n             ,0.706527233123779,-0.26186203956604,-0.22778545320034,0.937839031219482,-0.0175823662430048,-0.464624613523483\n             ,0.885333180427551,0.694800972938538,0.194172203540802,0.692494571208954,0.452623516321182,0.438722670078278\n             ,0.776308119297028,-0.0175823662430048,-0.464624613523483,0.885333180427551,0.11012527346611,-0.683853626251221\n             ,0.72126042842865,0.860161125659943,-0.0221190489828587,0.509542524814606,0.694800972938538,0.194172203540802\n             ,0.692494571208954,0.11012527346611,-0.683853626251221,0.72126042842865,0.185537919402123,-0.862958252429962\n             ,0.469977349042892,0.939531803131104,-0.259159535169601,0.223866790533066,0.860161125659943,-0.0221190489828587\n             ,0.509542524814606,0.939531803131104,-0.259159535169601,0.223866790533066,0.185537919402123,-0.862958252429962\n             ,0.469977349042892,0.152538388967514,-0.224785834550858,0.962394595146179,0.536905825138092,-0.0598908923566341\n             ,0.841513633728027,0.402792274951935,-0.430315464735031,0.807828545570374,0.213872507214546,-0.799906253814697\n             ,-0.560721397399902,0.431525766849518,-0.644686222076416,-0.631003320217133,0.620412230491638,-0.276802182197571\n             ,0.7338045835495,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.0485654957592487,-0.998615622520447\n             ,0.0202043671160936,0.912895321846008,-0.237331077456474,-0.332108557224274,0.34168353676796,-0.250584989786148\n             ,-0.90579217672348,0.912895321846008,-0.237331077456474,-0.332108557224274,0.734102785587311,-0.292018711566925\n             ,-0.613040089607239,0.773750245571136,0.0814331769943237,-0.62823498249054,0.0798471421003342,-0.235298857092857\n             ,-0.968637645244598,0.773750245571136,0.0814331769943237,-0.62823498249054,0.734102785587311,-0.292018711566925\n             ,-0.613040089607239,0.0883260667324066,-0.0597434565424919,-0.994298338890076,0.550641417503357,-0.21704863011837\n             ,-0.806029736995697,0.245215684175491,0.0387152023613453,-0.968695223331451,0.518284618854523,0.496293634176254\n             ,-0.69647228717804,0.708127677440643,0.316911339759827,-0.6309694647789,0.245215684175491,0.0387152023613453\n             ,-0.968695223331451,0.0447333157062531,0.253253638744354,-0.966365098953247,0.452985435724258,0.593249797821045\n             ,-0.665476441383362,0.518284618854523,0.496293634176254,-0.69647228717804,0.0447333157062531,0.253253638744354\n             ,-0.966365098953247,0.014613856561482,0.369894355535507,-0.928958892822266,0.495889782905579,0.643950700759888\n             ,-0.582598328590393,0.452985435724258,0.593249797821045,-0.665476441383362,0.014613856561482,0.369894355535507\n             ,-0.928958892822266,-0.109934903681278,0.544603824615479,-0.831457078456879,0.408554971218109,0.713565170764923\n             ,-0.569128751754761,0.495889782905579,0.643950700759888,-0.582598328590393,-0.109934903681278,0.544603824615479\n             ,-0.831457078456879,-0.262595504522324,0.756710708141327,-0.598692297935486,0.298005253076553,0.807478785514832\n             ,-0.509088277816772,0.408554971218109,0.713565170764923,-0.569128751754761,-0.262595504522324,0.756710708141327\n             ,-0.598692297935486,-0.0453839227557182,0.813610911369324,-0.579635679721832,0.261479198932648,0.892048358917236\n             ,-0.368616729974747,0.298005253076553,0.807478785514832,-0.509088277816772,-0.0453839227557182,0.813610911369324\n             ,-0.579635679721832,0.434583961963654,0.868087708950043,-0.239917635917664,0.274172246456146,0.939159333705902\n             ,-0.206904113292694,0.261479198932648,0.892048358917236,-0.368616729974747,0.434583961963654,0.868087708950043\n             ,-0.239917635917664,0.432530790567398,0.890540361404419,-0.140907749533653,0.244631126523018,0.968607366085052\n             ,-0.0442199148237705,0.274172246456146,0.939159333705902,-0.206904113292694,0.432530790567398,0.890540361404419\n             ,-0.140907749533653,0.473273813724518,0.879378318786621,-0.0520168133080006,0.308822751045227,0.945434510707855\n             ,0.103837110102177,0.244631126523018,0.968607366085052,-0.0442199148237705,0.493666648864746,0.825041174888611\n             ,0.274955064058304,0.308822751045227,0.945434510707855,0.103837110102177,0.473273813724518,0.879378318786621\n             ,-0.0520168133080006,0.379244118928909,0.687416434288025,0.6193807721138,0.168574303388596,0.687315046787262\n             ,0.706527233123779,0.168574303388596,0.687315046787262,0.706527233123779,0.452623516321182,0.438722670078278\n             ,0.776308119297028,0.684545934200287,0.646372973918915,0.337044298648834,0.493666648864746,0.825041174888611\n             ,0.274955064058304,0.452623516321182,0.438722670078278,0.776308119297028,0.694800972938538,0.194172203540802\n             ,0.692494571208954,0.821635723114014,0.506255805492401,0.261953771114349,0.684545934200287,0.646372973918915\n             ,0.337044298648834,0.694800972938538,0.194172203540802,0.692494571208954,0.860161125659943,-0.0221190489828587\n             ,0.509542524814606,0.910674393177032,0.388812184333801,0.139632686972618,0.821635723114014,0.506255805492401\n             ,0.261953771114349,0.860161125659943,-0.0221190489828587,0.509542524814606,0.939531803131104,-0.259159535169601\n             ,0.223866790533066,0.978960454463959,0.203055590391159,-0.0201213043183088,0.910674393177032,0.388812184333801\n             ,0.139632686972618,0.939531803131104,-0.259159535169601,0.223866790533066,0.536905825138092,-0.0598908923566341\n             ,0.841513633728027,0.808023393154144,0.485407531261444,0.333882838487625,0.978960454463959,0.203055590391159\n             ,-0.0201213043183088,0.716321706771851,-0.189274966716766,0.671608626842499,0.633299946784973,-0.263623267412186\n             ,-0.727622151374817,0.655673146247864,0.429177463054657,-0.621208012104034,0.8587726354599,0.351541489362717\n             ,0.372730553150177,0.34168353676796,-0.250584989786148,-0.90579217672348,0.912895321846008,-0.237331077456474\n             ,-0.332108557224274,0.917431473731995,0.173299670219421,-0.358171314001083,0.560299038887024,0.522571742534637\n             ,-0.642638146877289,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.0529462173581123,-0.663012385368347\n             ,-0.746733784675598,-0.324506491422653,-0.76884526014328,-0.550974130630493,0.174817264080048,-0.965653240680695\n             ,-0.192231014370918,-0.118618525564671,-0.856628596782684,-0.502112627029419,0.0447756871581078,-0.48030561208725\n             ,0.875957548618317,-0.665691614151001,-0.224520370364189,0.711649715900421,-0.785106539726257,-0.527087867259979\n             ,-0.325247794389725,0.152538388967514,-0.224785834550858,0.962394595146179,0.185537919402123,-0.862958252429962\n             ,0.469977349042892,0.698819696903229,-0.628040254116058,0.342368811368942,0.430329024791718,-0.429309993982315\n             ,0.794046521186829,0.185537919402123,-0.862958252429962,0.469977349042892,0.11012527346611,-0.683853626251221\n             ,0.72126042842865,0.710298955440521,-0.332644939422607,0.620340883731842,0.698819696903229,-0.628040254116058\n             ,0.342368811368942,0.11012527346611,-0.683853626251221,0.72126042842865,-0.0175823662430048,-0.464624613523483\n             ,0.885333180427551,0.458260357379913,-0.0337133072316647,0.888178408145905,0.710298955440521,-0.332644939422607\n             ,0.620340883731842,-0.0175823662430048,-0.464624613523483,0.885333180427551,-0.26186203956604,-0.22778545320034\n             ,0.937839031219482,0.131552502512932,0.257139623165131,0.957378268241882,0.458260357379913,-0.0337133072316647\n             ,0.888178408145905,-0.26186203956604,-0.22778545320034,0.937839031219482,-0.492600291967392,-0.0365926474332809\n             ,0.869486033916473,-0.45841521024704,0.236967280507088,0.856564044952393,0.131552502512932,0.257139623165131\n             ,0.957378268241882,-0.492600291967392,-0.0365926474332809,0.869486033916473,-0.507395565509796,-0.316553086042404\n             ,0.801463544368744,-0.45841521024704,0.236967280507088,0.856564044952393,-0.507395565509796,-0.316553086042404\n             ,0.801463544368744,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.48685422539711,0.635573267936707\n             ,0.599182426929474,-0.45841521024704,0.236967280507088,0.856564044952393,-0.745286226272583,-0.551344156265259\n             ,0.374924063682556,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.644909203052521,0.686387538909912\n             ,0.336101531982422,-0.48685422539711,0.635573267936707,0.599182426929474,-0.774236679077148,-0.53553432226181\n             ,0.337284058332443,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.732633888721466,0.678043484687805\n             ,0.0591999553143978,-0.644909203052521,0.686387538909912,0.336101531982422,-0.767853438854218,-0.571131825447083\n             ,0.290188789367676,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.803242444992065,0.584271669387817\n             ,-0.115879893302917,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.961901783943176,-0.240396350622177\n             ,-0.130209416151047,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.896995723247528,0.227888956665993\n             ,-0.378768175840378,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.967885553836823,0.0332815907895565\n             ,-0.2491784542799,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.726660370826721,-0.194792434573174\n             ,-0.658802449703217,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.816524565219879,-0.212788254022598\n             ,-0.536664545536041,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.590430736541748,-0.351442277431488\n             ,-0.726553440093994,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.692777395248413,-0.369596987962723\n             ,-0.619239509105682,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.564248859882355,-0.400254756212235\n             ,-0.72209370136261,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.631522357463837,-0.462838768959045\n             ,-0.622060894966125,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.39165410399437,-0.637071013450623\n             ,-0.663888275623322,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.416033059358597,-0.68202668428421\n             ,-0.60146164894104,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.0995239168405533,-0.824471116065979\n             ,-0.55708384513855,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.184634819626808,-0.868635058403015\n             ,-0.459764152765274,-0.397501945495605,-0.911328136920929,-0.10711282491684,0.174817264080048,-0.965653240680695\n             ,-0.192231014370918,-0.0995239168405533,-0.824471116065979,-0.55708384513855,-0.397501945495605,-0.911328136920929\n             ,-0.10711282491684,0.0485654957592487,-0.998615622520447,0.0202043671160936,0.174817264080048,-0.965653240680695\n             ,-0.192231014370918,0.473273813724518,0.879378318786621,-0.0520168133080006,0.432530790567398,0.890540361404419\n             ,-0.140907749533653,-0.0387217588722706,0.991758227348328,0.122131980955601,0.0474359504878521,0.963465213775635\n             ,0.263599425554276,0.432530790567398,0.890540361404419,-0.140907749533653,0.434583961963654,0.868087708950043\n             ,-0.239917635917664,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.0387217588722706,0.991758227348328\n             ,0.122131980955601,0.434583961963654,0.868087708950043,-0.239917635917664,-0.0453839227557182,0.813610911369324\n             ,-0.579635679721832,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.114330105483532,0.989368736743927\n             ,-0.0898787155747414,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.961901783943176,-0.240396350622177\n             ,-0.130209416151047,-0.939602613449097,-0.0850153714418411,-0.33154085278511,-0.361907035112381,0.692692756652832\n             ,-0.623859047889709,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.767853438854218,-0.571131825447083\n             ,0.290188789367676,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.939602613449097,-0.0850153714418411\n             ,-0.33154085278511,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.774236679077148,-0.53553432226181\n             ,0.337284058332443,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.950904071331024,-0.10767637193203\n             ,0.290150344371796,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.745286226272583,-0.551344156265259\n             ,0.374924063682556,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.888648450374603,-0.0919873118400574\n             ,0.449268519878387,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.507395565509796,-0.316553086042404\n             ,0.801463544368744,-0.356422990560532,-0.175295606255531,0.917733132839203,-0.82242077589035,-0.122631624341011\n             ,0.555504739284515,-0.507395565509796,-0.316553086042404,0.801463544368744,0.379244118928909,0.687416434288025\n             ,0.6193807721138,0.281729221343994,0.614752173423767,0.736687481403351,-0.356422990560532,-0.175295606255531\n             ,0.917733132839203,0.379244118928909,0.687416434288025,0.6193807721138,0.473273813724518,0.879378318786621,-0.0520168133080006\n             ,0.0474359504878521,0.963465213775635,0.263599425554276,0.281729221343994,0.614752173423767,0.736687481403351\n             ,0.0474359504878521,0.963465213775635,0.263599425554276,-0.82242077589035,-0.122631624341011,0.555504739284515\n             ,-0.356422990560532,-0.175295606255531,0.917733132839203,0.281729221343994,0.614752173423767,0.736687481403351\n             ,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.0387217588722706,0.991758227348328,0.122131980955601\n             ,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.950904071331024,-0.10767637193203,0.290150344371796\n             ,0.0474359504878521,0.963465213775635,0.263599425554276,-0.0387217588722706,0.991758227348328,0.122131980955601\n             ,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.82242077589035,-0.122631624341011,0.555504739284515\n             ,-0.397501945495605,-0.911328136920929,-0.10711282491684,-0.382183432579041,-0.525775790214539,-0.759931325912476\n             ,-0.554785251617432,-0.486120134592056,-0.675204038619995,-0.125359445810318,-0.967730283737183,-0.218593493103981\n             ,-0.382183432579041,-0.525775790214539,-0.759931325912476,0.0798471421003342,-0.235298857092857,-0.968637645244598\n             ,0.0883260667324066,-0.0597434565424919,-0.994298338890076,-0.554785251617432,-0.486120134592056,-0.675204038619995\n             ,0.773750245571136,0.0814331769943237,-0.62823498249054,0.550641417503357,-0.21704863011837,-0.806029736995697\n             ,0.708127677440643,0.316911339759827,-0.6309694647789,0.834144115447998,0.219395592808723,-0.506032764911652\n             ,0.912895321846008,-0.237331077456474,-0.332108557224274,0.773750245571136,0.0814331769943237,-0.62823498249054\n             ,0.834144115447998,0.219395592808723,-0.506032764911652,0.917431473731995,0.173299670219421,-0.358171314001083\n             ,-0.125359445810318,-0.967730283737183,-0.218593493103981,0.0485654957592487,-0.998615622520447,0.0202043671160936\n             ,-0.397501945495605,-0.911328136920929,-0.10711282491684,-0.184634819626808,-0.868635058403015,-0.459764152765274\n             ,-0.382183432579041,-0.525775790214539,-0.759931325912476,-0.397501945495605,-0.911328136920929,-0.10711282491684\n             ,0.550641417503357,-0.21704863011837,-0.806029736995697,0.773750245571136,0.0814331769943237,-0.62823498249054\n             ,0.0798471421003342,-0.235298857092857,-0.968637645244598,0.0447756871581078,-0.48030561208725,0.875957548618317\n             ,0.402792274951935,-0.430315464735031,0.807828545570374,0.152538388967514,-0.224785834550858,0.962394595146179\n             ,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.34168353676796,-0.250584989786148,-0.90579217672348\n             ,0.431525766849518,-0.644686222076416,-0.631003320217133,0.213872507214546,-0.799906253814697,-0.560721397399902\n             ,0.536905825138092,-0.0598908923566341,0.841513633728027,0.152538388967514,-0.224785834550858,0.962394595146179\n             ,0.402792274951935,-0.430315464735031,0.807828545570374,0.620412230491638,-0.276802182197571,0.7338045835495\n             ,0.620412230491638,-0.276802182197571,0.7338045835495,0.716321706771851,-0.189274966716766,0.671608626842499\n             ,0.536905825138092,-0.0598908923566341,0.841513633728027,0.34168353676796,-0.250584989786148,-0.90579217672348\n             ,0.560299038887024,0.522571742534637,-0.642638146877289,0.655673146247864,0.429177463054657,-0.621208012104034\n             ,0.633299946784973,-0.263623267412186,-0.727622151374817,0.560299038887024,0.522571742534637,-0.642638146877289\n             ,0.808023393154144,0.485407531261444,0.333882838487625,0.8587726354599,0.351541489362717,0.372730553150177,0.655673146247864\n             ,0.429177463054657,-0.621208012104034,0.808023393154144,0.485407531261444,0.333882838487625,0.536905825138092\n             ,-0.0598908923566341,0.841513633728027,0.716321706771851,-0.189274966716766,0.671608626842499,0.8587726354599\n             ,0.351541489362717,0.372730553150177,0.152538388967514,-0.224785834550858,0.962394595146179,0.430329024791718\n             ,-0.429309993982315,0.794046521186829,-0.665691614151001,-0.224520370364189,0.711649715900421,0.0447756871581078\n             ,-0.48030561208725,0.875957548618317,0.430329024791718,-0.429309993982315,0.794046521186829,-0.324506491422653\n             ,-0.76884526014328,-0.550974130630493,-0.785106539726257,-0.527087867259979,-0.325247794389725,-0.665691614151001\n             ,-0.224520370364189,0.711649715900421,-0.324506491422653,-0.76884526014328,-0.550974130630493,-0.0529462173581123\n             ,-0.663012385368347,-0.746733784675598,-0.118618525564671,-0.856628596782684,-0.502112627029419,-0.785106539726257\n             ,-0.527087867259979,-0.325247794389725,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.213872507214546\n             ,-0.799906253814697,-0.560721397399902,-0.118618525564671,-0.856628596782684,-0.502112627029419,-0.118618525564671\n             ,-0.856628596782684,-0.502112627029419,0.213872507214546,-0.799906253814697,-0.560721397399902,0.402792274951935\n             ,-0.430315464735031,0.807828545570374,0.0447756871581078,-0.48030561208725,0.875957548618317,0.431525766849518\n             ,-0.644686222076416,-0.631003320217133,0.633299946784973,-0.263623267412186,-0.727622151374817,0.716321706771851\n             ,-0.189274966716766,0.671608626842499,0.620412230491638,-0.276802182197571,0.7338045835495,0.34168353676796,-0.250584989786148\n             ,-0.90579217672348,0.633299946784973,-0.263623267412186,-0.727622151374817,0.431525766849518,-0.644686222076416\n             ,-0.631003320217133,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.619437336921692,-0.682137429714203\n             ,0.38856914639473,0.944702625274658,-0.242696091532707,0.22053462266922,0.783942937850952,-0.186095729470253\n             ,-0.59228527545929,0.563710689544678,-0.825831174850464,-0.0152685670182109,-0.622635543346405,-0.330902069807053\n             ,-0.709104180335999,-0.345263749361038,0.0585285425186157,-0.936678886413574,0.860051214694977,-0.450541734695435\n             ,-0.239424526691437,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.636468827724457,-0.680911600589752\n             ,-0.362307667732239,0.0350158661603928,0.28818079829216,-0.956935584545136,-0.559645414352417,0.337002664804459\n             ,-0.757117092609406,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.812022507190704,-0.510543346405029\n             ,-0.282780736684799,-0.204246431589127,0.468568325042725,-0.859492361545563,0.0350158661603928,0.28818079829216\n             ,-0.956935584545136,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.964417695999146,-0.242346316576004\n             ,-0.10567332059145,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.204246431589127,0.468568325042725\n             ,-0.859492361545563,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.936240494251251,-0.336361736059189\n             ,-0.101560480892658,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.348378151655197,0.573172330856323\n             ,-0.741691410541534,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.714399695396423,0.0904595702886581\n             ,0.693866074085236,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.28282842040062,0.665716886520386\n             ,-0.690528094768524,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.68883353471756,0.240426927804947\n             ,0.68388831615448,-0.515329539775848,0.822090923786163,0.242078438401222,-0.218518972396851,0.973436176776886\n             ,-0.0683486759662628,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.362409710884094,-0.350539416074753\n             ,0.86358630657196,0.421934872865677,0.754051804542542,0.503365516662598,-0.0888755843043327,0.982992351055145\n             ,0.160708159208298,0.647586286067963,0.657160103321075,0.385710477828979,-0.231773406267166,-0.521698236465454\n             ,0.821043252944946,-0.681038498878479,0.23202945291996,0.694513380527496,-0.194348111748695,0.853331387042999\n             ,0.483791589736938,-0.186525732278824,0.166592419147491,0.968222677707672,0.557236135005951,-0.528833091259003\n             ,0.640174508094788,0.84937584400177,-0.117848217487335,0.514463245868683,0.147361263632774,0.536922037601471\n             ,0.83066201210022,0.492649406194687,-0.832895398139954,0.252154290676117,0.117170162498951,-0.72569465637207\n             ,0.677966356277466,0.688185930252075,-0.329065650701523,0.646618843078613,0.740381181240082,-0.407373487949371\n             ,0.53467983007431,0.128620937466621,-0.731338679790497,-0.669776320457459,0.0479290783405304,-0.711503028869629\n             ,-0.701046526432037,0.409443646669388,-0.535873591899872,-0.738373458385468,0.39375701546669,-0.458273440599442\n             ,-0.796831786632538,0.409443646669388,-0.535873591899872,-0.738373458385468,0.783942937850952,-0.186095729470253\n             ,-0.59228527545929,0.851781845092773,0.0115588782355189,-0.523769080638886,0.783942937850952,-0.186095729470253\n             ,-0.59228527545929,0.944702625274658,-0.242696091532707,0.22053462266922,0.196220353245735,-0.529779434204102\n             ,0.82512503862381,0.712573170661926,-0.434123963117599,-0.551158607006073,0.990355789661407,0.138366982340813\n             ,0.0070703998208046,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.270774930715561,0.961904466152191\n             ,-0.0376923382282257,0.524228572845459,0.571583867073059,0.631249785423279,-0.559645414352417,0.337002664804459\n             ,-0.757117092609406,0.0350158661603928,0.28818079829216,-0.956935584545136,0.15072038769722,0.436317950487137\n             ,-0.887079477310181,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.0350158661603928,0.28818079829216\n             ,-0.956935584545136,-0.204246431589127,0.468568325042725,-0.859492361545563,-0.393206983804703,0.276302039623261\n             ,-0.876952350139618,0.15072038769722,0.436317950487137,-0.887079477310181,-0.204246431589127,0.468568325042725\n             ,-0.859492361545563,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.587697565555573,0.621326804161072\n             ,-0.518232226371765,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.642236828804016,0.662946939468384\n             ,-0.384750843048096,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.348378151655197,0.573172330856323\n             ,-0.741691410541534,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.28282842040062,0.665716886520386\n             ,-0.690528094768524,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.118636824190617,0.992627620697021\n             ,0.0248145386576653,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.118636824190617,0.992627620697021\n             ,0.0248145386576653,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.515329539775848,0.822090923786163\n             ,0.242078438401222,-0.544045865535736,0.806812047958374,0.230365887284279,-0.0888755843043327,0.982992351055145\n             ,0.160708159208298,-0.0888755843043327,0.982992351055145,0.160708159208298,0.421934872865677,0.754051804542542\n             ,0.503365516662598,0.353509962558746,0.865797221660614,0.354155212640762,-0.118636824190617,0.992627620697021\n             ,0.0248145386576653,0.421934872865677,0.754051804542542,0.503365516662598,0.647586286067963,0.657160103321075\n             ,0.385710477828979,0.353509962558746,0.865797221660614,0.354155212640762,0.186152040958405,0.93400251865387,0.304937154054642\n             ,0.962971687316895,0.234042793512344,-0.133826553821564,0.376616507768631,0.266982734203339,-0.887062668800354\n             ,-0.115848742425442,0.797249376773834,-0.592429339885712,0.981993198394775,-0.177747964859009,-0.0639918148517609\n             ,0.922376871109009,0.332838177680969,0.19606027007103,0.932197749614716,0.288106322288513,0.219093680381775,0.963503360748291\n             ,0.0733285918831825,-0.257457196712494,0.656768381595612,0.692223727703094,-0.299134790897369,0.974745631217957\n             ,0.220444723963737,0.0357081368565559,0.86196494102478,-0.1180724427104,-0.493026673793793,0.675891757011414\n             ,0.290058821439743,-0.677522122859955,-0.423463702201843,-0.905563116073608,0.0251786317676306,-0.576983273029327\n             ,-0.730052053928375,0.366216242313385,-0.560702860355377,-0.742602586746216,0.366270005702972,0.0984330475330353\n             ,-0.979092538356781,-0.178013265132904,-0.423463702201843,-0.905563116073608,0.0251786317676306,-0.570683121681213\n             ,-0.742836952209473,0.350019991397858,-0.570909857749939,-0.742268860340118,0.350854486227036,-0.576983273029327\n             ,-0.730052053928375,0.366216242313385,0.117170162498951,-0.72569465637207,0.677966356277466,0.492649406194687\n             ,-0.832895398139954,0.252154290676117,-0.263038337230682,-0.85704118013382,-0.443047612905502,-0.432871133089066\n             ,-0.797651648521423,0.419969528913498,-0.525343060493469,-0.763313293457031,0.375988662242889,0.146697908639908\n             ,-0.919724345207214,0.364124774932861,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.939789652824402\n             ,-0.260946482419968,-0.220685958862305,-0.319790989160538,-0.818331360816956,-0.47756415605545,-0.411500960588455\n             ,-0.813480317592621,0.410994797945023,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.349028646945953\n             ,-0.834601283073425,0.426168650388718,-0.362409710884094,-0.350539416074753,0.86358630657196,-0.948863983154297\n             ,0.0798187553882599,0.305427759885788,-0.845608711242676,-0.529381453990936,-0.0685647577047348,-0.349028646945953\n             ,-0.834601283073425,0.426168650388718,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.938455939292908\n             ,0.222387745976448,0.26428034901619,-0.845512986183167,-0.529565334320068,-0.0683253705501556,-0.845608711242676\n             ,-0.529381453990936,-0.0685647577047348,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.936240494251251\n             ,-0.336361736059189,-0.101560480892658,-0.61448472738266,-0.769321084022522,0.174795731902123,-0.258471637964249\n             ,-0.55105721950531,0.793428242206573,-0.61448472738266,-0.769321084022522,0.174795731902123,-0.936240494251251\n             ,-0.336361736059189,-0.101560480892658,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.74268364906311\n             ,-0.662175238132477,0.099724605679512,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.812022507190704\n             ,-0.510543346405029,-0.282780736684799,-0.585366904735565,-0.749170899391174,0.309981554746628,-0.704847455024719\n             ,-0.653521716594696,0.275861263275146,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.636468827724457\n             ,-0.680911600589752,-0.362307667732239,-0.563165187835693,-0.765297174453735,0.311713248491287,-0.585366904735565\n             ,-0.749170899391174,0.309981554746628,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.899655342102051\n             ,0.0265117771923542,-0.435795217752457,-0.974008142948151,-0.145383641123772,0.173700094223022,-0.563165187835693\n             ,-0.765297174453735,0.311713248491287,-0.940216422080994,-0.294904381036758,-0.170365795493126,0.274054676294327\n             ,-0.837668061256409,0.472447067499161,0.122500397264957,-0.675016582012177,0.727561831474304,-0.971858441829681\n             ,-0.121235102415085,0.201973125338554,0.619437336921692,-0.682137429714203,0.38856914639473,0.0984330475330353\n             ,-0.979092538356781,-0.178013265132904,-0.560702860355377,-0.742602586746216,0.366270005702972,0.129642620682716\n             ,-0.699265003204346,0.703008711338043,0.938903152942657,-0.259861499071121,0.225683227181435,0.932197749614716\n             ,0.288106322288513,0.219093680381775,0.656768381595612,0.692223727703094,-0.299134790897369,-0.964417695999146\n             ,-0.242346316576004,-0.10567332059145,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.348378151655197\n             ,0.573172330856323,-0.741691410541534,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.74268364906311\n             ,-0.662175238132477,0.099724605679512,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.964417695999146\n             ,-0.242346316576004,-0.10567332059145,-0.704847455024719,-0.653521716594696,0.275861263275146,0.647586286067963\n             ,0.657160103321075,0.385710477828979,0.421934872865677,0.754051804542542,0.503365516662598,-0.362409710884094\n             ,-0.350539416074753,0.86358630657196,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.349028646945953\n             ,-0.834601283073425,0.426168650388718,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.362409710884094\n             ,-0.350539416074753,0.86358630657196,0.353509962558746,0.865797221660614,0.354155212640762,0.647586286067963\n             ,0.657160103321075,0.385710477828979,0.311042487621307,0.756668508052826,0.575069785118103,-0.348378151655197\n             ,0.573172330856323,-0.741691410541534,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.587697565555573\n             ,0.621326804161072,-0.518232226371765,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.000230645935516804\n             ,0.945964872837067,0.324269145727158,0.311042487621307,0.756668508052826,0.575069785118103,0.647586286067963\n             ,0.657160103321075,0.385710477828979,-0.194348111748695,0.853331387042999,0.483791589736938,-0.231773406267166\n             ,-0.521698236465454,0.821043252944946,-0.411500960588455,-0.813480317592621,0.410994797945023,-0.938751816749573\n             ,-0.267549335956573,-0.2171690762043,-0.681038498878479,0.23202945291996,0.694513380527496,-0.938455939292908\n             ,0.222387745976448,0.26428034901619,-0.68883353471756,0.240426927804947,0.68388831615448,-0.25869232416153,-0.551353573799133\n             ,0.793150365352631,-0.845512986183167,-0.529565334320068,-0.0683253705501556,-0.68883353471756,0.240426927804947\n             ,0.68388831615448,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.258471637964249,-0.55105721950531\n             ,0.793428242206573,-0.25869232416153,-0.551353573799133,0.793150365352631,-0.544045865535736,0.806812047958374\n             ,0.230365887284279,-0.938455939292908,0.222387745976448,0.26428034901619,-0.948863983154297,0.0798187553882599\n             ,0.305427759885788,-0.0888755843043327,0.982992351055145,0.160708159208298,-0.582318484783173,0.299308508634567\n             ,0.755856871604919,-0.241258025169373,0.814110457897186,0.528222262859344,-0.608640491962433,0.785175085067749\n             ,-0.114266492426395,-0.963154852390289,0.258741587400436,0.073385939002037,-0.515329539775848,0.822090923786163\n             ,0.242078438401222,-0.68883353471756,0.240426927804947,0.68388831615448,-0.384408742189407,0.77344286441803,0.504000067710876\n             ,-0.646622598171234,0.407719850540161,0.644704401493073,-0.68883353471756,0.240426927804947,0.68388831615448\n             ,-0.938455939292908,0.222387745976448,0.26428034901619,-0.660113751888275,0.749479293823242,0.0503051020205021\n             ,-0.384408742189407,0.77344286441803,0.504000067710876,-0.938455939292908,0.222387745976448,0.26428034901619\n             ,-0.544045865535736,0.806812047958374,0.230365887284279,-0.915725409984589,0.365749269723892,0.166356295347214\n             ,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.544045865535736,0.806812047958374,0.230365887284279\n             ,-0.515329539775848,0.822090923786163,0.242078438401222,-0.646622598171234,0.407719850540161,0.644704401493073\n             ,-0.915725409984589,0.365749269723892,0.166356295347214,-0.646622598171234,0.407719850540161,0.644704401493073\n             ,-0.384408742189407,0.77344286441803,0.504000067710876,-0.241258025169373,0.814110457897186,0.528222262859344\n             ,-0.582318484783173,0.299308508634567,0.755856871604919,-0.384408742189407,0.77344286441803,0.504000067710876\n             ,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.608640491962433,0.785175085067749,-0.114266492426395\n             ,-0.241258025169373,0.814110457897186,0.528222262859344,-0.660113751888275,0.749479293823242,0.0503051020205021\n             ,-0.915725409984589,0.365749269723892,0.166356295347214,-0.963154852390289,0.258741587400436,0.073385939002037\n             ,-0.608640491962433,0.785175085067749,-0.114266492426395,-0.915725409984589,0.365749269723892,0.166356295347214\n             ,-0.646622598171234,0.407719850540161,0.644704401493073,-0.582318484783173,0.299308508634567,0.755856871604919\n             ,-0.963154852390289,0.258741587400436,0.073385939002037,0.768967747688293,-0.480744570493698,0.421394437551498\n             ,0.786129951477051,-0.545342028141022,0.290863931179047,0.786934494972229,-0.544415593147278,0.290423303842545\n             ,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.86196494102478,-0.1180724427104,-0.493026673793793\n             ,0.974745631217957,0.220444723963737,0.0357081368565559,0.922376871109009,0.332838177680969,0.19606027007103\n             ,0.974745631217957,0.220444723963737,0.0357081368565559,0.656768381595612,0.692223727703094,-0.299134790897369\n             ,0.932197749614716,0.288106322288513,0.219093680381775,0.117170162498951,-0.72569465637207,0.677966356277466\n             ,0.130088999867439,-0.835984408855438,0.533110618591309,0.767808198928833,-0.477225512266159,0.427465051412582\n             ,0.688185930252075,-0.329065650701523,0.646618843078613,-0.570683121681213,-0.742836952209473,0.350019991397858\n             ,0.130088999867439,-0.835984408855438,0.533110618591309,0.117170162498951,-0.72569465637207,0.677966356277466\n             ,-0.525343060493469,-0.763313293457031,0.375988662242889,-0.673596203327179,-0.148960739374161,0.723932862281799\n             ,-0.186525732278824,0.166592419147491,0.968222677707672,-0.681038498878479,0.23202945291996,0.694513380527496\n             ,0.492649406194687,-0.832895398139954,0.252154290676117,0.740381181240082,-0.407373487949371,0.53467983007431\n             ,0.740420699119568,-0.407449632883072,0.53456711769104,0.981993198394775,-0.177747964859009,-0.0639918148517609\n             ,0.84937584400177,-0.117848217487335,0.514463245868683,0.557236135005951,-0.528833091259003,0.640174508094788\n             ,-0.194348111748695,0.853331387042999,0.483791589736938,-0.681038498878479,0.23202945291996,0.694513380527496\n             ,-0.186525732278824,0.166592419147491,0.968222677707672,0.147361263632774,0.536922037601471,0.83066201210022\n             ,0.147361263632774,0.536922037601471,0.83066201210022,0.186152040958405,0.93400251865387,0.304937154054642,-0.194348111748695\n             ,0.853331387042999,0.483791589736938,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.963503360748291\n             ,0.0733285918831825,-0.257457196712494,0.376616507768631,0.266982734203339,-0.887062668800354,0.962971687316895\n             ,0.234042793512344,-0.133826553821564,0.963503360748291,0.0733285918831825,-0.257457196712494,-0.000230645935516804\n             ,0.945964872837067,0.324269145727158,-0.115848742425442,0.797249376773834,-0.592429339885712,0.376616507768631\n             ,0.266982734203339,-0.887062668800354,-0.000230645935516804,0.945964872837067,0.324269145727158,-0.194348111748695\n             ,0.853331387042999,0.483791589736938,0.186152040958405,0.93400251865387,0.304937154054642,-0.115848742425442\n             ,0.797249376773834,-0.592429339885712,-0.681038498878479,0.23202945291996,0.694513380527496,-0.938751816749573\n             ,-0.267549335956573,-0.2171690762043,-0.939789652824402,-0.260946482419968,-0.220685958862305,-0.673596203327179\n             ,-0.148960739374161,0.723932862281799,-0.938751816749573,-0.267549335956573,-0.2171690762043,-0.263038337230682\n             ,-0.85704118013382,-0.443047612905502,-0.319790989160538,-0.818331360816956,-0.47756415605545,-0.939789652824402\n             ,-0.260946482419968,-0.220685958862305,-0.263038337230682,-0.85704118013382,-0.443047612905502,0.492649406194687\n             ,-0.832895398139954,0.252154290676117,0.146697908639908,-0.919724345207214,0.364124774932861,-0.319790989160538\n             ,-0.818331360816956,-0.47756415605545,0.492649406194687,-0.832895398139954,0.252154290676117,0.557236135005951\n             ,-0.528833091259003,0.640174508094788,0.146697908639908,-0.919724345207214,0.364124774932861,0.84937584400177\n             ,-0.117848217487335,0.514463245868683,0.962971687316895,0.234042793512344,-0.133826553821564,0.186152040958405\n             ,0.93400251865387,0.304937154054642,0.147361263632774,0.536922037601471,0.83066201210022,0.981993198394775,-0.177747964859009\n             ,-0.0639918148517609,0.962971687316895,0.234042793512344,-0.133826553821564,0.84937584400177,-0.117848217487335\n             ,0.514463245868683,0.146697908639908,-0.919724345207214,0.364124774932861,0.557236135005951,-0.528833091259003\n             ,0.640174508094788,-0.186525732278824,0.166592419147491,0.968222677707672,-0.673596203327179,-0.148960739374161\n             ,0.723932862281799,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.525343060493469,-0.763313293457031\n             ,0.375988662242889,-0.570909857749939,-0.742268860340118,0.350854486227036,0.143902435898781,-0.987122178077698\n             ,-0.0698700472712517,-0.423463702201843,-0.905563116073608,0.0251786317676306,0.0479290783405304,-0.711503028869629\n             ,-0.701046526432037,0.128620937466621,-0.731338679790497,-0.669776320457459,0.675891757011414,0.290058821439743\n             ,-0.677522122859955,0.86196494102478,-0.1180724427104,-0.493026673793793,0.39375701546669,-0.458273440599442\n             ,-0.796831786632538,0.409443646669388,-0.535873591899872,-0.738373458385468,0.86196494102478,-0.1180724427104\n             ,-0.493026673793793,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.39375701546669,-0.458273440599442\n             ,-0.796831786632538,0.675891757011414,0.290058821439743,-0.677522122859955,0.409443646669388,-0.535873591899872\n             ,-0.738373458385468,0.851781845092773,0.0115588782355189,-0.523769080638886,0.825049936771393,-0.453089714050293\n             ,-0.337642371654511,0.938903152942657,-0.259861499071121,0.225683227181435,0.656768381595612,0.692223727703094\n             ,-0.299134790897369,0.675891757011414,0.290058821439743,-0.677522122859955,0.851781845092773,0.0115588782355189\n             ,-0.523769080638886,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.423463702201843,-0.905563116073608\n             ,0.0251786317676306,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.130088999867439,-0.835984408855438\n             ,0.533110618591309,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.622635543346405,-0.330902069807053\n             ,-0.709104180335999,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.899655342102051,0.0265117771923542\n             ,-0.435795217752457,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.345263749361038,0.0585285425186157\n             ,-0.936678886413574,-0.622635543346405,-0.330902069807053,-0.709104180335999,0.944702625274658,-0.242696091532707\n             ,0.22053462266922,0.619437336921692,-0.682137429714203,0.38856914639473,0.563710689544678,-0.825831174850464\n             ,-0.0152685670182109,0.860051214694977,-0.450541734695435,-0.239424526691437,0.860051214694977,-0.450541734695435\n             ,-0.239424526691437,0.990355789661407,0.138366982340813,0.0070703998208046,0.944702625274658,-0.242696091532707\n             ,0.22053462266922,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.890061616897583,0.000229601078899577\n             ,-0.455840140581131,-0.270774930715561,0.961904466152191,-0.0376923382282257,-0.182028561830521,0.561503648757935\n             ,-0.80720454454422,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.196220353245735,-0.529779434204102\n             ,0.82512503862381,0.524228572845459,0.571583867073059,0.631249785423279,-0.270774930715561,0.961904466152191\n             ,-0.0376923382282257,0.196220353245735,-0.529779434204102,0.82512503862381,0.944702625274658,-0.242696091532707\n             ,0.22053462266922,0.990355789661407,0.138366982340813,0.0070703998208046,0.524228572845459,0.571583867073059\n             ,0.631249785423279,0.619437336921692,-0.682137429714203,0.38856914639473,0.129642620682716,-0.699265003204346\n             ,0.703008711338043,0.122500397264957,-0.675016582012177,0.727561831474304,0.274054676294327,-0.837668061256409\n             ,0.472447067499161,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119\n             ,0.796919584274292,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119\n             ,0.796919584274292,-0.974008142948151,-0.145383641123772,0.173700094223022,-0.899655342102051,0.0265117771923542\n             ,-0.435795217752457,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.971858441829681,-0.121235102415085\n             ,0.201973125338554,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.622635543346405,-0.330902069807053\n             ,-0.709104180335999,0.563710689544678,-0.825831174850464,-0.0152685670182109,0.274054676294327,-0.837668061256409\n             ,0.472447067499161,0.274054676294327,-0.837668061256409,0.472447067499161,0.563710689544678,-0.825831174850464\n             ,-0.0152685670182109,0.619437336921692,-0.682137429714203,0.38856914639473,-0.559645414352417,0.337002664804459\n             ,-0.757117092609406,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.345263749361038,0.0585285425186157\n             ,-0.936678886413574,-0.345263749361038,0.0585285425186157,-0.936678886413574,-0.182028561830521,0.561503648757935\n             ,-0.80720454454422,0.990355789661407,0.138366982340813,0.0070703998208046,0.860051214694977,-0.450541734695435\n             ,-0.239424526691437,0.779076516628265,-0.514032542705536,0.35890144109726,0.786129951477051,-0.545342028141022\n             ,0.290863931179047,0.768967747688293,-0.480744570493698,0.421394437551498,0.130088999867439,-0.835984408855438\n             ,0.533110618591309,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.76507031917572,-0.643946468830109\n             ,0.000624333799351007,0.786640048027039,-0.542381346225739,0.294991344213486,0.785886585712433,-0.543201982975006\n             ,0.295489281415939,0.767808198928833,-0.477225512266159,0.427465051412582,0.786934494972229,-0.544415593147278\n             ,0.290423303842545,0.78587132692337,-0.599782109260559,0.150557950139046,0.764481008052826,-0.644642233848572\n             ,-0.00227227224968374,0.786640048027039,-0.542381346225739,0.294991344213486,0.76507031917572,-0.643946468830109\n             ,0.000624333799351007,0.785931706428528,-0.599372208118439,0.151869475841522,0.767808198928833,-0.477225512266159\n             ,0.427465051412582,0.785886585712433,-0.543201982975006,0.295489281415939,0.778943240642548,-0.513350427150726\n             ,0.360164850950241,0.517825782299042,-0.683434009552002,0.514562368392944,0.543316781520844,-0.79720413684845\n             ,0.263196527957916,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.818628549575806,-0.56630539894104\n             ,-0.095631942152977,0.936200797557831,-0.349729657173157,0.0348892845213413,0.927894592285156,-0.210005521774292\n             ,0.308073401451111,0.795584321022034,-0.263417273759842,0.545579493045807,0.623724460601807,-0.472118139266968\n             ,0.622954428195953,0.785886585712433,-0.543201982975006,0.295489281415939,0.786640048027039,-0.542381346225739\n             ,0.294991344213486,0.207798928022385,-0.957674980163574,0.199194043874741,0.171830341219902,-0.731816828250885\n             ,0.659483432769775,0.786640048027039,-0.542381346225739,0.294991344213486,0.785931706428528,-0.599372208118439\n             ,0.151869475841522,0.451574474573135,-0.847453653812408,-0.279110699892044,0.207798928022385,-0.957674980163574\n             ,0.199194043874741,0.785931706428528,-0.599372208118439,0.151869475841522,0.78587132692337,-0.599782109260559\n             ,0.150557950139046,0.737974345684052,-0.506336569786072,-0.446113437414169,0.451574474573135,-0.847453653812408\n             ,-0.279110699892044,0.78587132692337,-0.599782109260559,0.150557950139046,0.786934494972229,-0.544415593147278\n             ,0.290423303842545,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.737974345684052,-0.506336569786072\n             ,-0.446113437414169,0.786934494972229,-0.544415593147278,0.290423303842545,0.786129951477051,-0.545342028141022\n             ,0.290863931179047,0.947726309299469,0.160956501960754,0.275513887405396,0.967499911785126,-0.0959258452057838\n             ,-0.233970403671265,0.786129951477051,-0.545342028141022,0.290863931179047,0.779076516628265,-0.514032542705536\n             ,0.35890144109726,0.694981157779694,0.0461361445486546,0.717546284198761,0.947726309299469,0.160956501960754\n             ,0.275513887405396,0.382880628108978,-0.336864858865738,0.860188663005829,0.694981157779694,0.0461361445486546\n             ,0.717546284198761,0.779076516628265,-0.514032542705536,0.35890144109726,0.778943240642548,-0.513350427150726\n             ,0.360164850950241,0.778943240642548,-0.513350427150726,0.360164850950241,0.785886585712433,-0.543201982975006\n             ,0.295489281415939,0.171830341219902,-0.731816828250885,0.659483432769775,0.382880628108978,-0.336864858865738\n             ,0.860188663005829,0.171830341219902,-0.731816828250885,0.659483432769775,0.207798928022385,-0.957674980163574\n             ,0.199194043874741,-0.0772176012396812,-0.989201128482819,0.124573387205601,-0.119434408843517,-0.692093312740326\n             ,0.711858332157135,0.207798928022385,-0.957674980163574,0.199194043874741,0.451574474573135,-0.847453653812408\n             ,-0.279110699892044,0.227369338274002,-0.840859830379486,-0.491180092096329,-0.0772176012396812,-0.989201128482819\n             ,0.124573387205601,0.451574474573135,-0.847453653812408,-0.279110699892044,0.737974345684052,-0.506336569786072\n             ,-0.446113437414169,0.589757025241852,-0.405549645423889,-0.698366761207581,0.227369338274002,-0.840859830379486\n             ,-0.491180092096329,0.737974345684052,-0.506336569786072,-0.446113437414169,0.967499911785126,-0.0959258452057838\n             ,-0.233970403671265,0.893790304660797,0.11711710691452,-0.432923167943954,0.589757025241852,-0.405549645423889\n             ,-0.698366761207581,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.947726309299469,0.160956501960754\n             ,0.275513887405396,0.865549385547638,0.446460962295532,0.226929157972336,0.893790304660797,0.11711710691452,-0.432923167943954\n             ,0.947726309299469,0.160956501960754,0.275513887405396,0.694981157779694,0.0461361445486546,0.717546284198761\n             ,0.539613544940948,0.300762385129929,0.786358177661896,0.865549385547638,0.446460962295532,0.226929157972336\n             ,0.694981157779694,0.0461361445486546,0.717546284198761,0.382880628108978,-0.336864858865738,0.860188663005829\n             ,0.137372449040413,-0.188157200813293,0.972484290599823,0.539613544940948,0.300762385129929,0.786358177661896\n             ,0.382880628108978,-0.336864858865738,0.860188663005829,0.171830341219902,-0.731816828250885,0.659483432769775\n             ,-0.119434408843517,-0.692093312740326,0.711858332157135,0.137372449040413,-0.188157200813293,0.972484290599823\n             ,-0.119434408843517,-0.692093312740326,0.711858332157135,-0.0772176012396812,-0.989201128482819,0.124573387205601\n             ,0.543316781520844,-0.79720413684845,0.263196527957916,0.517825782299042,-0.683434009552002,0.514562368392944\n             ,-0.0772176012396812,-0.989201128482819,0.124573387205601,0.227369338274002,-0.840859830379486,-0.491180092096329\n             ,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.543316781520844,-0.79720413684845,0.263196527957916\n             ,0.227369338274002,-0.840859830379486,-0.491180092096329,0.589757025241852,-0.405549645423889,-0.698366761207581\n             ,0.818628549575806,-0.56630539894104,-0.095631942152977,0.664069056510925,-0.747671186923981,-0.00021937265410088\n             ,0.589757025241852,-0.405549645423889,-0.698366761207581,0.893790304660797,0.11711710691452,-0.432923167943954\n             ,0.936200797557831,-0.349729657173157,0.0348892845213413,0.818628549575806,-0.56630539894104,-0.095631942152977\n             ,0.893790304660797,0.11711710691452,-0.432923167943954,0.865549385547638,0.446460962295532,0.226929157972336\n             ,0.927894592285156,-0.210005521774292,0.308073401451111,0.936200797557831,-0.349729657173157,0.0348892845213413\n             ,0.865549385547638,0.446460962295532,0.226929157972336,0.539613544940948,0.300762385129929,0.786358177661896\n             ,0.795584321022034,-0.263417273759842,0.545579493045807,0.927894592285156,-0.210005521774292,0.308073401451111\n             ,0.539613544940948,0.300762385129929,0.786358177661896,0.137372449040413,-0.188157200813293,0.972484290599823\n             ,0.623724460601807,-0.472118139266968,0.622954428195953,0.795584321022034,-0.263417273759842,0.545579493045807\n             ,0.137372449040413,-0.188157200813293,0.972484290599823,-0.119434408843517,-0.692093312740326,0.711858332157135\n             ,0.517825782299042,-0.683434009552002,0.514562368392944,0.623724460601807,-0.472118139266968,0.622954428195953\n             ,0.39375701546669,-0.458273440599442,-0.796831786632538,0.764481008052826,-0.644642233848572,-0.00227227224968374\n             ,0.78587132692337,-0.599782109260559,0.150557950139046,0.785931706428528,-0.599372208118439,0.151869475841522\n             ,0.76507031917572,-0.643946468830109,0.000624333799351007,0.128620937466621,-0.731338679790497,-0.669776320457459\n             ,0.128620937466621,-0.731338679790497,-0.669776320457459,0.76507031917572,-0.643946468830109,0.000624333799351007\n             ,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.689465761184692,-0.331197649240494,0.64416229724884\n             ,0.768967747688293,-0.480744570493698,0.421394437551498,0.974745631217957,0.220444723963737,0.0357081368565559\n             ,0.922376871109009,0.332838177680969,0.19606027007103,0.740420699119568,-0.407449632883072,0.53456711769104,0.689465761184692\n             ,-0.331197649240494,0.64416229724884,0.922376871109009,0.332838177680969,0.19606027007103,0.981993198394775,-0.177747964859009\n             ,-0.0639918148517609,0.688185930252075,-0.329065650701523,0.646618843078613,0.767808198928833,-0.477225512266159\n             ,0.427465051412582,0.778943240642548,-0.513350427150726,0.360164850950241,0.779076516628265,-0.514032542705536\n             ,0.35890144109726,0.768967747688293,-0.480744570493698,0.421394437551498,0.689465761184692,-0.331197649240494\n             ,0.64416229724884,0.740381181240082,-0.407373487949371,0.53467983007431,0.688185930252075,-0.329065650701523\n             ,0.646618843078613,0.689465761184692,-0.331197649240494,0.64416229724884,0.740420699119568,-0.407449632883072\n             ,0.53456711769104,0.712573170661926,-0.434123963117599,-0.551158607006073,0.825049936771393,-0.453089714050293\n             ,-0.337642371654511,0.851781845092773,0.0115588782355189,-0.523769080638886,0.783942937850952,-0.186095729470253\n             ,-0.59228527545929,0.0479290783405304,-0.711503028869629,-0.701046526432037,-0.423463702201843,-0.905563116073608\n             ,0.0251786317676306,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.0479290783405304,-0.711503028869629\n             ,-0.701046526432037,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.783942937850952,-0.186095729470253\n             ,-0.59228527545929,0.409443646669388,-0.535873591899872,-0.738373458385468,-0.218962535262108,0.084364540874958\n             ,-0.972079277038574,-0.20303450524807,0.175852552056313,-0.963251233100891,-0.146824181079865,0.202549442648888\n             ,-0.968202650547028,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.2064258903265,-0.0007158950320445\n             ,0.978461980819702,-0.437538176774979,0.011323343962431,0.899128556251526,-0.412358522415161,0.0925682708621025\n             ,0.906306564807892,-0.205622598528862,0.0701295286417007,0.976115345954895,0.0116670094430447,0.00425092596560717\n             ,0.999922931194305,0.109445370733738,0.0023056548088789,0.993990123271942,0.111529469490051,0.0670560151338577\n             ,0.99149614572525,0.0177117679268122,0.0767069831490517,0.996896326541901,-0.737501204013824,0.475387096405029\n             ,-0.479686439037323,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.92103111743927,-0.215036183595657\n             ,-0.324747800827026,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.934549152851105,-0.271674513816834\n             ,0.229805961251259,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.777965724468231,-0.355387061834335\n             ,-0.518140316009521,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.412358522415161,0.0925682708621025\n             ,0.906306564807892,-0.437538176774979,0.011323343962431,0.899128556251526,-0.730253517627716,0.0695252642035484\n             ,0.679629266262054,-0.669797301292419,0.132067054510117,0.730705082416534,-0.437538176774979,0.011323343962431\n             ,0.899128556251526,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.771451115608215,-0.12942261993885\n             ,0.622987151145935,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.967698454856873,-0.123798668384552\n             ,-0.219621583819389,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.987909078598022,-0.100733421742916\n             ,0.117849096655846,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.677088737487793,-0.402109175920486\n             ,-0.616327106952667,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.870969414710999,-0.301988989114761\n             ,-0.387575656175613,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.373749554157257,-0.424562931060791\n             ,-0.824656069278717,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.0261400658637285,-0.230357423424721\n             ,-0.972754895687103,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.669797301292419,0.132067054510117\n             ,0.730705082416534,-0.559998273849487,0.512845575809479,0.65068531036377,-0.285846680402756,0.740470588207245\n             ,0.608272194862366,-0.412358522415161,0.0925682708621025,0.906306564807892,-0.888843476772308,-0.151014879345894\n             ,0.43261045217514,-0.559998273849487,0.512845575809479,0.65068531036377,-0.669797301292419,0.132067054510117\n             ,0.730705082416534,-0.880525827407837,0.119760677218437,0.458619266748428,-0.998369693756104,-0.0149935530498624\n             ,0.055073969066143,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.92103111743927,-0.215036183595657\n             ,-0.324747800827026,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.163037300109863,0.519588589668274\n             ,0.838717222213745,0.0445509292185307,0.65805971622467,0.751646637916565,-0.265586584806442,0.827619135379791\n             ,0.494479835033417,-0.415858834981918,0.554817199707031,0.720582604408264,0.135322481393814,0.847399234771729\n             ,0.513422191143036,-0.244644120335579,0.685302138328552,0.685937523841858,-0.18195928633213,0.86905300617218\n             ,0.460040956735611,-0.0757151022553444,0.839400827884674,0.53821325302124,-0.630419492721558,0.671314060688019\n             ,-0.389754712581635,-0.528733134269714,0.826087534427643,0.194988861680031,-0.36407133936882,0.919048547744751\n             ,0.151002898812294,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.244644120335579,0.685302138328552\n             ,0.685937523841858,-0.408989250659943,0.558586657047272,0.721601545810699,-0.198288127779961,0.888361811637878\n             ,0.414119631052017,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0639016851782799,0.636703133583069\n             ,0.768456697463989,-0.207234025001526,0.598978042602539,0.773485243320465,-0.217426031827927,0.259526431560516\n             ,0.940942049026489,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.244644120335579,0.685302138328552\n             ,0.685937523841858,-0.163037300109863,0.519588589668274,0.838717222213745,-0.415858834981918,0.554817199707031\n             ,0.720582604408264,-0.408989250659943,0.558586657047272,0.721601545810699,-0.388724118471146,0.781137049198151\n             ,-0.488588243722916,-0.187158063054085,0.75642067193985,-0.626737236976624,-0.10327572375536,0.46809983253479\n             ,-0.877619862556458,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.373749554157257,-0.424562931060791\n             ,-0.824656069278717,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.0572102777659893,-0.363048881292343\n             ,-0.930012106895447,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.0545569509267807,0.00619251187890768\n             ,-0.99849146604538,0.0858502238988876,-0.0293905436992645,-0.995874464511871,0.103274650871754,0.0756512358784676\n             ,-0.991771757602692,-0.0605181753635406,0.0956659987568855,-0.993572115898132,0.103162460029125,0.213912323117256\n             ,-0.971390247344971,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0663832724094391,0.0673947036266327\n             ,-0.995515525341034,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.0469610393047333,0.340933084487915\n             ,0.938913881778717,0.269015103578568,0.393741130828857,0.878975987434387,0.228596761822701,0.602607667446136\n             ,0.764596283435822,-0.0639016851782799,0.636703133583069,0.768456697463989,0.0754682123661041,0.474540889263153\n             ,-0.876992285251617,-0.0510855726897717,0.371638625860214,-0.926970899105072,-0.051368486136198,0.366652280092239\n             ,-0.928938865661621,0.0849071517586708,0.404431521892548,-0.910618424415588,0.0357786677777767,-0.332784980535507\n             ,-0.942323744297028,0.0145233506336808,-0.332326263189316,-0.943052649497986,-0.0222764182835817,-0.332656174898148\n             ,-0.942785024642944,-0.0104440562427044,-0.319070518016815,-0.947673439979553,-0.251114159822464,0.744844555854797\n             ,0.618181467056274,-0.265586584806442,0.827619135379791,0.494479835033417,-0.264517962932587,0.829988181591034\n             ,0.491070061922073,-0.126853466033936,0.814248085021973,0.566487669944763,0.0858502238988876,-0.0293905436992645\n             ,-0.995874464511871,-0.0545569509267807,0.00619251187890768,-0.99849146604538,-0.044108722358942,-0.104566030204296\n             ,-0.993539333343506,0.053296934813261,-0.126089468598366,-0.99058610200882,0.025994973257184,0.100541830062866\n             ,0.99459320306778,0.0350599996745586,0.0215551313012838,0.999152719974518,0.105945765972137,-0.0333648808300495\n             ,0.993811964988709,0.0329285115003586,0.095338836312294,0.994900107383728,-0.969365537166595,0.00907830987125635\n             ,0.245454847812653,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.998369693756104,-0.0149935530498624\n             ,0.055073969066143,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.903727471828461,0.0786926299333572\n             ,0.420813679695129,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.771451115608215,-0.12942261993885\n             ,0.622987151145935,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.880525827407837,0.119760677218437\n             ,0.458619266748428,-0.669797301292419,0.132067054510117,0.730705082416534,-0.730253517627716,0.0695252642035484\n             ,0.679629266262054,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.264517962932587,0.829988181591034\n             ,0.491070061922073,-0.54696398973465,0.598231494426727,0.585618793964386,-0.523228526115417,0.410001486539841\n             ,0.747081458568573,-0.207234025001526,0.598978042602539,0.773485243320465,-0.207234025001526,0.598978042602539\n             ,0.773485243320465,-0.523228526115417,0.410001486539841,0.747081458568573,-0.531731903553009,0.138175398111343\n             ,0.835564970970154,-0.217426031827927,0.259526431560516,0.940942049026489,-0.198288127779961,0.888361811637878\n             ,0.414119631052017,-0.175527319312096,0.630527257919312,0.756059229373932,-0.129651710391045,0.577601253986359\n             ,0.805957317352295,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0757151022553444,0.839400827884674\n             ,0.53821325302124,-0.18195928633213,0.86905300617218,0.460040956735611,-0.129651710391045,0.577601253986359,0.805957317352295\n             ,-0.101806551218033,0.422118037939072,0.900806188583374,-0.101806551218033,0.422118037939072,0.900806188583374\n             ,-0.129651710391045,0.577601253986359,0.805957317352295,-0.163592055439949,0.697549223899841,0.697612106800079\n             ,-0.235576257109642,0.590675473213196,0.771755337715149,0.0849071517586708,0.404431521892548,-0.910618424415588\n             ,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.187158063054085,0.75642067193985,-0.626737236976624\n             ,0.0754682123661041,0.474540889263153,-0.876992285251617,0.053296934813261,-0.126089468598366,-0.99058610200882\n             ,-0.044108722358942,-0.104566030204296,-0.993539333343506,-0.0333343744277954,-0.188492000102997,-0.981508851051331\n             ,0.0198883153498173,-0.203020170331001,-0.978972554206848,0.0198883153498173,-0.203020170331001,-0.978972554206848\n             ,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.0222764182835817,-0.332656174898148,-0.942785024642944\n             ,0.0145233506336808,-0.332326263189316,-0.943052649497986,-0.0663832724094391,0.0673947036266327,-0.995515525341034\n             ,0.103274650871754,0.0756512358784676,-0.991771757602692,0.0858502238988876,-0.0293905436992645,-0.995874464511871\n             ,-0.0474926419556141,-0.104372285306454,-0.993403673171997,0.103162460029125,0.213912323117256,-0.971390247344971\n             ,-0.0573794208467007,0.242892846465111,-0.968354642391205,-0.0605181753635406,0.0956659987568855,-0.993572115898132\n             ,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0757151022553444,0.839400827884674,0.53821325302124\n             ,0.124407894909382,0.762849271297455,0.634494781494141,0.32895365357399,0.891276717185974,0.312114208936691,0.135322481393814\n             ,0.847399234771729,0.513422191143036,-0.235576257109642,0.590675473213196,0.771755337715149,0.007120281457901\n             ,0.824189305305481,0.566269636154175,0.124407894909382,0.762849271297455,0.634494781494141,-0.101806551218033\n             ,0.422118037939072,0.900806188583374,-0.130890280008316,0.562183797359467,0.816588640213013,0.0445509292185307\n             ,0.65805971622467,0.751646637916565,0.288280248641968,0.458255499601364,0.840771317481995,0.227748140692711,0.261638969182968\n             ,0.937910318374634,0.128257870674133,0.488565057516098,0.863049328327179,0.182602807879448,0.369611233472824\n             ,0.911067366600037,0.227748140692711,0.261638969182968,0.937910318374634,0.288280248641968,0.458255499601364\n             ,0.840771317481995,0.127348259091377,0.984222948551178,0.1228316873312,0.320210188627243,0.913715243339539,0.250179767608643\n             ,0.007120281457901,0.824189305305481,0.566269636154175,-0.373853147029877,0.908021092414856,0.189027920365334\n             ,0.007120281457901,0.824189305305481,0.566269636154175,0.320210188627243,0.913715243339539,0.250179767608643\n             ,0.32895365357399,0.891276717185974,0.312114208936691,0.124407894909382,0.762849271297455,0.634494781494141,0.287634700536728\n             ,0.718605816364288,0.633144497871399,0.32895365357399,0.891276717185974,0.312114208936691,0.320210188627243,0.913715243339539\n             ,0.250179767608643,0.167783945798874,0.880431950092316,0.443495273590088,0.135322481393814,0.847399234771729\n             ,0.513422191143036,0.32895365357399,0.891276717185974,0.312114208936691,0.287634700536728,0.718605816364288,0.633144497871399\n             ,0.267442584037781,0.554580211639404,0.787981748580933,-0.764665424823761,-0.00892197620123625,0.644365727901459\n             ,-0.531731903553009,0.138175398111343,0.835564970970154,-0.523228526115417,0.410001486539841,0.747081458568573\n             ,-0.541739642620087,0.290830105543137,0.788629233837128,-0.902310907840729,-0.0581778958439827,0.427142024040222\n             ,-0.797964632511139,-0.0603525713086128,0.599674940109253,-0.803666055202484,-0.115168422460556,0.583829700946808\n             ,-0.943021297454834,-0.0914337635040283,0.31992295384407,0.0350599996745586,0.0215551313012838,0.999152719974518\n             ,0.0415807291865349,0.144025474786758,0.988700032234192,0.227037891745567,0.0226937420666218,0.973621487617493\n             ,0.105945765972137,-0.0333648808300495,0.993811964988709,-0.217947199940681,-0.245030641555786,0.944700479507446\n             ,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.493893593549728,-0.127556279301643,0.8601154088974\n             ,-0.26172998547554,-0.1111850887537,0.958715438842773,0.105945765972137,-0.0333648808300495,0.993811964988709\n             ,0.227037891745567,0.0226937420666218,0.973621487617493,-0.0597144067287445,-0.130844533443451,0.98960292339325\n             ,-0.125138372182846,-0.0807519108057022,0.988847553730011,0.0415807291865349,0.144025474786758,0.988700032234192\n             ,0.051253791898489,0.460094302892685,0.886389493942261,0.269015103578568,0.393741130828857,0.878975987434387\n             ,0.227037891745567,0.0226937420666218,0.973621487617493,0.227037891745567,0.0226937420666218,0.973621487617493\n             ,0.269015103578568,0.393741130828857,0.878975987434387,-0.0469610393047333,0.340933084487915,0.938913881778717\n             ,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.26172998547554,-0.1111850887537,0.958715438842773\n             ,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.0597144067287445,-0.130844533443451,0.98960292339325\n             ,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.764665424823761,-0.00892197620123625,0.644365727901459\n             ,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.907991111278534,-0.362916141748428,0.209389582276344\n             ,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.934313356876373,-0.104866981506348,0.340678036212921\n             ,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.813670039176941,0.0365244150161743,0.580178439617157\n             ,-0.959401249885559,0.00467001460492611,0.282005965709686,0.0329285115003586,0.095338836312294,0.994900107383728\n             ,0.105945765972137,-0.0333648808300495,0.993811964988709,-0.125138372182846,-0.0807519108057022,0.988847553730011\n             ,-0.130024403333664,0.107345074415207,0.985682845115662,-0.90759688615799,-0.3472660779953,0.235953688621521\n             ,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.864759087562561,-0.407921642065048,0.292902112007141\n             ,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.0597144067287445,-0.130844533443451,0.98960292339325\n             ,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.217426031827927,0.259526431560516,0.940942049026489\n             ,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.457065612077713,0.0828292146325111,0.885567843914032\n             ,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.168258428573608,-0.0454077981412411,0.984696507453918\n             ,-0.243838042020798,0.106035023927689,0.964001834392548,-0.457065612077713,0.0828292146325111,0.885567843914032\n             ,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.771451115608215,-0.12942261993885,0.622987151145935\n             ,-0.420480906963348,-0.101670697331429,0.901586890220642,0.267442584037781,0.554580211639404,0.787981748580933\n             ,0.288280248641968,0.458255499601364,0.840771317481995,0.0445509292185307,0.65805971622467,0.751646637916565\n             ,-0.163037300109863,0.519588589668274,0.838717222213745,0.128257870674133,0.488565057516098,0.863049328327179\n             ,0.287634700536728,0.718605816364288,0.633144497871399,0.167783945798874,0.880431950092316,0.443495273590088\n             ,0.0469380915164948,0.75044322013855,0.659266114234924,0.288280248641968,0.458255499601364,0.840771317481995\n             ,0.267442584037781,0.554580211639404,0.787981748580933,0.287634700536728,0.718605816364288,0.633144497871399\n             ,0.128257870674133,0.488565057516098,0.863049328327179,-0.0117101557552814,0.969888210296631,0.243268758058548\n             ,0.0469380915164948,0.75044322013855,0.659266114234924,0.167783945798874,0.880431950092316,0.443495273590088\n             ,0.118423573672771,0.978543698787689,0.168606325984001,-0.973214685916901,0.0593582727015018,0.22210305929184\n             ,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.990118980407715,-0.139986857771873,-0.00824637804180384\n             ,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.264517962932587,0.829988181591034,0.491070061922073\n             ,-0.207234025001526,0.598978042602539,0.773485243320465,-0.0639016851782799,0.636703133583069,0.768456697463989\n             ,-0.126853466033936,0.814248085021973,0.566487669944763,0.00678820535540581,0.00935708172619343,0.999933183193207\n             ,0.0177117679268122,0.0767069831490517,0.996896326541901,0.111529469490051,0.0670560151338577,0.99149614572525\n             ,-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.285846680402756,0.740470588207245,0.608272194862366\n             ,-0.233475670218468,0.295215666294098,0.926464676856995,-0.205622598528862,0.0701295286417007,0.976115345954895\n             ,-0.412358522415161,0.0925682708621025,0.906306564807892,0.00109092053025961,0.832261800765991,-0.554381728172302\n             ,0.0272185504436493,0.988011002540588,-0.151965260505676,-0.498037964105606,0.826278984546661,-0.263099282979965\n             ,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.420480906963348,-0.101670697331429,0.901586890220642\n             ,-0.437538176774979,0.011323343962431,0.899128556251526,-0.2064258903265,-0.0007158950320445,0.978461980819702\n             ,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.045579582452774,-0.167653381824493,-0.98479175567627\n             ,-0.0474926419556141,-0.104372285306454,-0.993403673171997,0.0858502238988876,-0.0293905436992645,-0.995874464511871\n             ,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.265586584806442,0.827619135379791,0.494479835033417\n             ,-0.130890280008316,0.562183797359467,0.816588640213013,-0.54696398973465,0.598231494426727,0.585618793964386\n             ,-0.264517962932587,0.829988181591034,0.491070061922073,0.0620061531662941,0.990111231803894,-0.125837221741676\n             ,0.118423573672771,0.978543698787689,0.168606325984001,0.127348259091377,0.984222948551178,0.1228316873312,0.0272185504436493\n             ,0.988011002540588,-0.151965260505676,-0.373853147029877,0.908021092414856,0.189027920365334,0.007120281457901\n             ,0.824189305305481,0.566269636154175,-0.235576257109642,0.590675473213196,0.771755337715149,-0.528733134269714\n             ,0.826087534427643,0.194988861680031,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.322016537189484\n             ,0.469987332820892,-0.821837723255157,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.630419492721558\n             ,0.671314060688019,-0.389754712581635,-0.498037964105606,0.826278984546661,-0.263099282979965,0.0272185504436493\n             ,0.988011002540588,-0.151965260505676,0.127348259091377,0.984222948551178,0.1228316873312,-0.373853147029877\n             ,0.908021092414856,0.189027920365334,-0.528733134269714,0.826087534427643,0.194988861680031,-0.235576257109642\n             ,0.590675473213196,0.771755337715149,-0.163592055439949,0.697549223899841,0.697612106800079,-0.36407133936882\n             ,0.919048547744751,0.151002898812294,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.493893593549728\n             ,-0.127556279301643,0.8601154088974,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.767262578010559\n             ,-0.329318106174469,0.550325155258179,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.217947199940681\n             ,-0.245030641555786,0.944700479507446,-0.217426031827927,0.259526431560516,0.940942049026489,-0.531731903553009\n             ,0.138175398111343,0.835564970970154,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.487847238779068\n             ,-0.305343925952911,0.817783713340759,-0.531731903553009,0.138175398111343,0.835564970970154,-0.764665424823761\n             ,-0.00892197620123625,0.644365727901459,-0.0938221365213394,0.828937470912933,-0.551416397094727,0.00109092053025961\n             ,0.832261800765991,-0.554381728172302,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.173114001750946\n             ,0.483975678682327,-0.857787311077118,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.10327572375536\n             ,0.46809983253479,-0.877619862556458,0.0849071517586708,0.404431521892548,-0.910618424415588,0.103162460029125\n             ,0.213912323117256,-0.971390247344971,-0.277610629796982,0.394662648439407,-0.875884532928467,-0.322016537189484\n             ,0.469987332820892,-0.821837723255157,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.146824181079865\n             ,0.202549442648888,-0.968202650547028,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.659155488014221\n             ,-0.442682504653931,-0.607903122901917,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.870969414710999\n             ,-0.301988989114761,-0.387575656175613,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.934549152851105\n             ,-0.271674513816834,0.229805961251259,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.91446441411972\n             ,-0.237356558442116,-0.32774493098259,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.776331782341003\n             ,-0.346262842416763,-0.526698231697083,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.498037964105606\n             ,0.826278984546661,-0.263099282979965,-0.373853147029877,0.908021092414856,0.189027920365334,-0.528733134269714\n             ,0.826087534427643,0.194988861680031,-0.630419492721558,0.671314060688019,-0.389754712581635,-0.224544212222099\n             ,0.65578031539917,-0.720785677433014,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0340137556195259\n             ,-0.196621879935265,-0.979889214038849,-0.0328970178961754,0.677300930023193,-0.734970211982727,-0.045579582452774\n             ,-0.167653381824493,-0.98479175567627,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.273301541805267\n             ,-0.178375348448753,-0.945245206356049,-0.0474926419556141,-0.104372285306454,-0.993403673171997,-0.0765343606472015\n             ,-0.228869631886482,-0.970443785190582,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.529427289962769\n             ,-0.308612763881683,-0.790230929851532,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.224544212222099\n             ,0.65578031539917,-0.720785677433014,-0.453488618135452,0.205984279513359,-0.867132365703583,-0.369074016809464\n             ,-0.353648155927658,-0.859486699104309,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0170070379972458\n             ,-0.356290400028229,-0.934220492839813,-0.0261400658637285,-0.230357423424721,-0.972754895687103,0.0198883153498173\n             ,-0.203020170331001,-0.978972554206848,0.0145233506336808,-0.332326263189316,-0.943052649497986,0.0145233506336808\n             ,-0.332326263189316,-0.943052649497986,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0572102777659893\n             ,-0.363048881292343,-0.930012106895447,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.218962535262108\n             ,0.084364540874958,-0.972079277038574,-0.273301541805267,-0.178375348448753,-0.945245206356049,-0.529427289962769\n             ,-0.308612763881683,-0.790230929851532,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.273301541805267\n             ,-0.178375348448753,-0.945245206356049,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.659155488014221\n             ,-0.442682504653931,-0.607903122901917,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.677088737487793\n             ,-0.402109175920486,-0.616327106952667,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.396053969860077\n             ,-0.291344702243805,-0.870781004428864,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.730700254440308\n             ,-0.321549147367477,-0.602231919765472,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.361107349395752\n             ,-0.274716913700104,-0.891140937805176,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.045579582452774\n             ,-0.167653381824493,-0.98479175567627,-0.0261400658637285,-0.230357423424721,-0.972754895687103,-0.396053969860077\n             ,-0.291344702243805,-0.870781004428864,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.168258428573608\n             ,-0.0454077981412411,0.984696507453918,0.0502381287515163,0.0132010383531451,0.998650014400482,0.0329285115003586\n             ,0.095338836312294,0.994900107383728,-0.130024403333664,0.107345074415207,0.985682845115662,0.111529469490051\n             ,0.0670560151338577,0.99149614572525,0.109445370733738,0.0023056548088789,0.993990123271942,-0.2064258903265\n             ,-0.0007158950320445,0.978461980819702,-0.205622598528862,0.0701295286417007,0.976115345954895,-0.233475670218468\n             ,0.295215666294098,0.926464676856995,-0.0027873576618731,0.0608935356140137,0.998140394687653,0.111529469490051\n             ,0.0670560151338577,0.99149614572525,-0.205622598528862,0.0701295286417007,0.976115345954895,0.0116670094430447\n             ,0.00425092596560717,0.999922931194305,0.0105779552832246,0.0432977452874184,0.99900621175766,0.0502381287515163\n             ,0.0132010383531451,0.998650014400482,0.109445370733738,0.0023056548088789,0.993990123271942,0.109445370733738\n             ,0.0023056548088789,0.993990123271942,0.0502381287515163,0.0132010383531451,0.998650014400482,-0.168258428573608\n             ,-0.0454077981412411,0.984696507453918,-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.803666055202484\n             ,-0.115168422460556,0.583829700946808,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.934549152851105\n             ,-0.271674513816834,0.229805961251259,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.493893593549728\n             ,-0.127556279301643,0.8601154088974,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.813670039176941\n             ,0.0365244150161743,0.580178439617157,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.457065612077713\n             ,0.0828292146325111,0.885567843914032,-0.243838042020798,0.106035023927689,0.964001834392548,-0.26172998547554\n             ,-0.1111850887537,0.958715438842773,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.130024403333664\n             ,0.107345074415207,0.985682845115662,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.26172998547554\n             ,-0.1111850887537,0.958715438842773,-0.243838042020798,0.106035023927689,0.964001834392548,-0.962112545967102\n             ,-0.0959249585866928,0.255221039056778,-0.959401249885559,0.00467001460492611,0.282005965709686,-0.813670039176941\n             ,0.0365244150161743,0.580178439617157,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.887102901935577\n             ,-0.248076841235161,0.389238119125366,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.797964632511139\n             ,-0.0603525713086128,0.599674940109253,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.885262668132782\n             ,-0.178442940115929,0.429497480392456,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.916449964046478\n             ,-0.370115518569946,-0.152098655700684,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.958365261554718\n             ,-0.274972796440125,0.0769802629947662,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.776331782341003\n             ,-0.346262842416763,-0.526698231697083,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.803666055202484\n             ,-0.115168422460556,0.583829700946808,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.971830129623413\n             ,-0.100029721856117,0.213401570916176,-0.943021297454834,-0.0914337635040283,0.31992295384407,-0.730858027935028\n             ,-0.478023678064346,0.487175494432449,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.797964632511139\n             ,-0.0603525713086128,0.599674940109253,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.885262668132782\n             ,-0.178442940115929,0.429497480392456,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.987909078598022\n             ,-0.100733421742916,0.117849096655846,-0.971830129623413,-0.100029721856117,0.213401570916176,0.242353484034538\n             ,0.171934008598328,0.954831659793854,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.130890280008316\n             ,0.562183797359467,0.816588640213013,0.227748140692711,0.261638969182968,0.937910318374634,-0.0389007441699505\n             ,0.220736414194107,0.974557399749756,-0.541739642620087,0.290830105543137,0.788629233837128,-0.54696398973465\n             ,0.598231494426727,0.585618793964386,-0.130890280008316,0.562183797359467,0.816588640213013,-0.885142028331757\n             ,0.459607869386673,-0.072692796587944,-0.721357464790344,0.650649428367615,0.237273663282394,-0.96703976392746\n             ,-0.131514891982079,0.218031987547874,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.163592055439949\n             ,0.697549223899841,0.697612106800079,-0.129651710391045,0.577601253986359,0.805957317352295,-0.175527319312096\n             ,0.630527257919312,0.756059229373932,-0.191041514277458,0.700716555118561,0.6873859167099,-0.36407133936882,0.919048547744751\n             ,0.151002898812294,-0.163592055439949,0.697549223899841,0.697612106800079,-0.191041514277458,0.700716555118561\n             ,0.6873859167099,-0.309881597757339,0.939583599567413,0.145451411604881,-0.388724118471146,0.781137049198151\n             ,-0.488588243722916,-0.36407133936882,0.919048547744751,0.151002898812294,-0.309881597757339,0.939583599567413\n             ,0.145451411604881,-0.187158063054085,0.75642067193985,-0.626737236976624,0.0682389214634895,0.656387150287628\n             ,0.751331746578217,0.0917807519435883,0.740839779376984,0.665381610393524,0.228596761822701,0.602607667446136\n             ,0.764596283435822,0.0630034655332565,0.605371952056885,0.793445229530334,0.228596761822701,0.602607667446136\n             ,0.764596283435822,0.0917807519435883,0.740839779376984,0.665381610393524,-0.126853466033936,0.814248085021973\n             ,0.566487669944763,-0.0639016851782799,0.636703133583069,0.768456697463989,0.118423573672771,0.978543698787689\n             ,0.168606325984001,0.0620061531662941,0.990111231803894,-0.125837221741676,0.00345755694434047,0.996382415294647\n             ,-0.0849123671650887,-0.0117101557552814,0.969888210296631,0.243268758058548,0.206769347190857,0.0198965240269899\n             ,-0.978187382221222,0.076873891055584,0.283797085285187,-0.955797910690308,-0.158792361617088,0.191556662321091\n             ,-0.968550980091095,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.158792361617088,0.191556662321091\n             ,-0.968550980091095,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.121267899870873,0.453522175550461\n             ,-0.882956266403198,-0.20303450524807,0.175852552056313,-0.963251233100891,-7.2909109860575e-009,0.660060167312622\n             ,0.751212775707245,0.00678820535540581,0.00935708172619343,0.999933183193207,-0.0027873576618731,0.0608935356140137\n             ,0.998140394687653,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0428657233715057,0.703625798225403\n             ,0.709276556968689,-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.233475670218468,0.295215666294098\n             ,0.926464676856995,-0.431082636117935,0.669595658779144,0.604821860790253,-0.0938221365213394,0.828937470912933\n             ,-0.551416397094727,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.0149039337411523,0.576608240604401\n             ,-0.816884815692902,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.173114001750946,0.483975678682327\n             ,-0.857787311077118,-0.158792361617088,0.191556662321091,-0.968550980091095,0.076873891055584,0.283797085285187\n             ,-0.955797910690308,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.91446441411972,-0.237356558442116\n             ,-0.32774493098259,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.887102901935577,-0.248076841235161\n             ,0.389238119125366,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.960404455661774,0.118234008550644\n             ,0.252277553081512,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.882290184497833,-0.257993787527084\n             ,-0.393704503774643,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.900862991809845,0.205661669373512\n             ,0.382294595241547,-0.823818027973175,0.437958568334579,0.359883517026901,-0.929829955101013,0.272868812084198\n             ,0.246898397803307,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.970666527748108,0.0689158514142036\n             ,-0.230341240763664,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.972549617290497,-0.208768278360367\n             ,-0.102776825428009,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.935231983661652,0.339124768972397\n             ,0.10166396945715,-0.830669224262238,0.464176833629608,0.307454913854599,-0.873635351657867,0.199546694755554\n             ,0.44378200173378,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.541739642620087,0.290830105543137\n             ,0.788629233837128,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.439444810152054,-0.112185478210449\n             ,0.89123660326004,-0.775276005268097,0.0246404502540827,0.631141781806946,-0.304660886526108,0.0813428908586502\n             ,0.948981106281281,-0.151422306895256,0.167262390255928,0.974214851856232,-0.325357735157013,0.61151111125946\n             ,0.721246421337128,-0.516382813453674,0.465612560510635,0.718716740608215,-0.439444810152054,-0.112185478210449\n             ,0.89123660326004,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.275725185871124,-0.367643237113953\n             ,0.888152062892914,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.670227468013763,0.653629958629608\n             ,0.351515263319016,-0.516382813453674,0.465612560510635,0.718716740608215,-0.325357735157013,0.61151111125946\n             ,0.721246421337128,-0.482889622449875,0.809686243534088,0.333505302667618,-0.905158758163452,-0.227180346846581\n             ,0.359272450208664,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.969261229038239,0.233877912163734\n             ,0.0763790160417557,-0.935231983661652,0.339124768972397,0.10166396945715,-0.823818027973175,0.437958568334579\n             ,0.359883517026901,-0.900862991809845,0.205661669373512,0.382294595241547,-0.873635351657867,0.199546694755554\n             ,0.44378200173378,-0.830669224262238,0.464176833629608,0.307454913854599,-0.534069001674652,-0.533251285552979\n             ,-0.656058967113495,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.992305636405945,0.0944509729743004\n             ,0.0800536796450615,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.0765343606472015,-0.228869631886482\n             ,-0.970443785190582,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.882290184497833,-0.257993787527084\n             ,-0.393704503774643,-0.636381566524506,-0.215738385915756,-0.74059122800827,0.230162009596825,-0.0996426865458488\n             ,-0.968037605285645,-0.0765343606472015,-0.228869631886482,-0.970443785190582,-0.636381566524506,-0.215738385915756\n             ,-0.74059122800827,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.727636575698853,-0.347527086734772\n             ,0.591413497924805,-0.873635351657867,0.199546694755554,0.44378200173378,-0.900862991809845,0.205661669373512\n             ,0.382294595241547,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.869328856468201,-0.380869299173355\n             ,0.314969629049301,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.982743322849274,-0.0388989634811878\n             ,0.180837959051132,-0.775276005268097,0.0246404502540827,0.631141781806946,-0.275725185871124,-0.367643237113953\n             ,0.888152062892914,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.151422306895256,0.167262390255928\n             ,0.974214851856232,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.0389007441699505,0.220736414194107\n             ,0.974557399749756,0.242353484034538,0.171934008598328,0.954831659793854,-0.225912064313889,-0.13972570002079\n             ,0.964074909687042,-0.439444810152054,-0.112185478210449,0.89123660326004,-0.736354291439056,0.674543976783752\n             ,-0.0526571460068226,-0.670227468013763,0.653629958629608,0.351515263319016,-0.482889622449875,0.809686243534088\n             ,0.333505302667618,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.677062809467316,0.519408404827118\n             ,-0.521345198154449,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.474048495292664,0.878205180168152\n             ,-0.0635117962956429,-0.386267960071564,0.732354819774628,-0.560761570930481,0.206769347190857,0.0198965240269899\n             ,-0.978187382221222,0.230162009596825,-0.0996426865458488,-0.968037605285645,-0.447565525770187,-0.178849518299103\n             ,-0.876183688640594,-0.339145213365555,-0.0408404320478439,-0.939847111701965,0.076873891055584,0.283797085285187\n             ,-0.955797910690308,0.206769347190857,0.0198965240269899,-0.978187382221222,-0.339145213365555,-0.0408404320478439\n             ,-0.939847111701965,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.580101191997528,0.322207540273666\n             ,-0.748107552528381,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.386267960071564,0.732354819774628\n             ,-0.560761570930481,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.596588253974915,0.134587496519089\n             ,-0.791181802749634,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.319942742586136,0.472043305635452\n             ,-0.821469247341156,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.58198344707489,-0.50494521856308\n             ,0.637436747550964,-0.869328856468201,-0.380869299173355,0.314969629049301,-0.775276005268097,0.0246404502540827\n             ,0.631141781806946,-0.439444810152054,-0.112185478210449,0.89123660326004,0.0469380915164948,0.75044322013855\n             ,0.659266114234924,-0.325357735157013,0.61151111125946,0.721246421337128,-0.151422306895256,0.167262390255928\n             ,0.974214851856232,0.182602807879448,0.369611233472824,0.911067366600037,0.0469380915164948,0.75044322013855\n             ,0.659266114234924,-0.0117101557552814,0.969888210296631,0.243268758058548,-0.482889622449875,0.809686243534088\n             ,0.333505302667618,-0.325357735157013,0.61151111125946,0.721246421337128,-0.225912064313889,-0.13972570002079\n             ,0.964074909687042,0.242353484034538,0.171934008598328,0.954831659793854,0.182602807879448,0.369611233472824\n             ,0.911067366600037,-0.151422306895256,0.167262390255928,0.974214851856232,-0.0117101557552814,0.969888210296631\n             ,0.243268758058548,0.00345755694434047,0.996382415294647,-0.0849123671650887,-0.474048495292664,0.878205180168152\n             ,-0.0635117962956429,-0.482889622449875,0.809686243534088,0.333505302667618,0.00345755694434047,0.996382415294647\n             ,-0.0849123671650887,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.386267960071564,0.732354819774628\n             ,-0.560761570930481,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.705084800720215,-0.161029234528542\n             ,-0.690597534179688,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.309495180845261,0.256983548402786\n             ,-0.915517449378967,-0.339145213365555,-0.0408404320478439,-0.939847111701965,-0.00375068746507168,0.864742159843445\n             ,-0.502202033996582,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.319942742586136,0.472043305635452\n             ,-0.821469247341156,-0.386267960071564,0.732354819774628,-0.560761570930481,-0.0149039337411523,0.576608240604401\n             ,-0.816884815692902,0.076873891055584,0.283797085285187,-0.955797910690308,-0.309495180845261,0.256983548402786\n             ,-0.915517449378967,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.764665424823761,-0.00892197620123625\n             ,0.644365727901459,-0.541739642620087,0.290830105543137,0.788629233837128,-0.775276005268097,0.0246404502540827\n             ,0.631141781806946,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.764665424823761,-0.00892197620123625\n             ,0.644365727901459,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.972549617290497,-0.208768278360367\n             ,-0.102776825428009,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.864759087562561,-0.407921642065048\n             ,0.292902112007141,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.9968541264534,-0.0452842265367508\n             ,-0.0650477930903435,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.730858027935028,-0.478023678064346\n             ,0.487175494432449,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.9968541264534,-0.0452842265367508\n             ,-0.0650477930903435,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.821968972682953,-0.468651831150055\n             ,-0.323623836040497,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.900862991809845,0.205661669373512\n             ,0.382294595241547,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.636381566524506,-0.215738385915756\n             ,-0.74059122800827,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.985974311828613,-0.0694569125771523\n             ,-0.151757627725601,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.868559181690216,-0.156194493174553\n             ,-0.470327794551849,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.447565525770187,-0.178849518299103\n             ,-0.876183688640594,-0.636381566524506,-0.215738385915756,-0.74059122800827,-0.805109977722168,-0.249997183680534\n             ,-0.537865459918976,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.339145213365555,-0.0408404320478439\n             ,-0.939847111701965,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.917147397994995,-0.128003314137459\n             ,-0.377433180809021,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.990118980407715,-0.139986857771873\n             ,-0.00824637804180384,-0.92103111743927,-0.215036183595657,-0.324747800827026,-0.20303450524807,0.175852552056313\n             ,-0.963251233100891,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.277610629796982,0.394662648439407\n             ,-0.875884532928467,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.121267899870873,0.453522175550461\n             ,-0.882956266403198,0.00109092053025961,0.832261800765991,-0.554381728172302,-0.373621255159378,0.625036597251892\n             ,-0.685373187065125,-0.277610629796982,0.394662648439407,-0.875884532928467,0.0105779552832246,0.0432977452874184\n             ,0.99900621175766,0.025994973257184,0.100541830062866,0.99459320306778,0.0329285115003586,0.095338836312294,0.994900107383728\n             ,0.0502381287515163,0.0132010383531451,0.998650014400482,0.051253791898489,0.460094302892685,0.886389493942261\n             ,0.0630034655332565,0.605371952056885,0.793445229530334,0.228596761822701,0.602607667446136,0.764596283435822\n             ,0.269015103578568,0.393741130828857,0.878975987434387,-0.484471023082733,-0.813864707946777,-0.320799201726913\n             ,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.960404455661774,0.118234008550644,0.252277553081512\n             ,-0.929829955101013,0.272868812084198,0.246898397803307,-0.355119854211807,-0.655639946460724,-0.666352868080139\n             ,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.985974311828613,-0.0694569125771523,-0.151757627725601\n             ,-0.960404455661774,0.118234008550644,0.252277553081512,-0.969261229038239,0.233877912163734,0.0763790160417557\n             ,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.938947200775146,-0.340274900197983,-0.0509038865566254\n             ,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.830669224262238,0.464176833629608,0.307454913854599\n             ,-0.935231983661652,0.339124768972397,0.10166396945715,-0.980707883834839,0.0803700610995293,0.178192809224129\n             ,-0.926227867603302,0.166116192936897,0.338389337062836,-0.0524283163249493,-0.77048397064209,0.635299742221832\n             ,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.275725185871124,-0.367643237113953,0.888152062892914\n             ,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.0998818427324295,-0.0102633228525519,0.994946360588074\n             ,-0.097216323018074,-0.329928547143936,0.938986778259277,0.0822462737560272,-0.665926337242126,0.741469919681549\n             ,-0.275725185871124,-0.367643237113953,0.888152062892914,-0.516382813453674,0.465612560510635,0.718716740608215\n             ,-0.670227468013763,0.653629958629608,0.351515263319016,-0.563040912151337,0.733509361743927,0.380721718072891\n             ,-0.333576679229736,0.525787591934204,0.782479405403137,-0.097216323018074,-0.329928547143936,0.938986778259277\n             ,-0.154075160622597,0.221347615122795,0.962946593761444,0.198109984397888,-0.381663233041763,0.902820944786072\n             ,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.407216638326645,-0.806287288665771,0.429040133953094\n             ,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.938947200775146,-0.340274900197983,-0.0509038865566254\n             ,-0.944353520870209,-0.253018736839294,-0.21018548309803,0.729846894741058,-0.679405450820923,0.0757084339857101\n             ,0.704946756362915,-0.708129465579987,-0.040034044533968,-0.237173914909363,-0.706752181053162,0.666520714759827\n             ,-0.22399939596653,-0.804867208003998,0.549557149410248,0.568926751613617,-0.0644996538758278,0.819854915142059\n             ,0.493679195642471,-0.48221343755722,0.723706424236298,0.198109984397888,-0.381663233041763,0.902820944786072\n             ,0.165526703000069,0.46548119187355,0.869441270828247,0.311660826206207,-0.127051904797554,-0.941660940647125\n             ,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.355119854211807,-0.655639946460724,-0.666352868080139\n             ,0.707368016242981,-0.349391609430313,-0.614455819129944,0.493679195642471,-0.48221343755722,0.723706424236298\n             ,0.568926751613617,-0.0644996538758278,0.819854915142059,0.780032634735107,-0.518629193305969,0.350104093551636\n             ,-0.594531655311584,-0.698622703552246,0.398068368434906,0.707368016242981,-0.349391609430313,-0.614455819129944\n             ,0.644391298294067,-0.53528618812561,-0.546103060245514,0.298700571060181,-0.161740928888321,-0.94054126739502\n             ,0.311660826206207,-0.127051904797554,-0.941660940647125,0.707368016242981,-0.349391609430313,-0.614455819129944\n             ,-0.484471023082733,-0.813864707946777,-0.320799201726913,0.692149817943573,-0.677433252334595,-0.249023765325546\n             ,0.644391298294067,-0.53528618812561,-0.546103060245514,-0.22399939596653,-0.804867208003998,0.549557149410248\n             ,-0.594531655311584,-0.698622703552246,0.398068368434906,0.780032634735107,-0.518629193305969,0.350104093551636\n             ,0.729846894741058,-0.679405450820923,0.0757084339857101,-0.22399939596653,-0.804867208003998,0.549557149410248\n             ,-0.926227867603302,0.166116192936897,0.338389337062836,-0.980707883834839,0.0803700610995293,0.178192809224129\n             ,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.830669224262238,0.464176833629608,0.307454913854599\n             ,-0.926227867603302,0.166116192936897,0.338389337062836,-0.915170788764954,0.197068557143211,0.351605415344238\n             ,-0.823818027973175,0.437958568334579,0.359883517026901,-0.237173914909363,-0.706752181053162,0.666520714759827\n             ,-0.915170788764954,0.197068557143211,0.351605415344238,-0.926227867603302,0.166116192936897,0.338389337062836\n             ,-0.22399939596653,-0.804867208003998,0.549557149410248,0.704946756362915,-0.708129465579987,-0.040034044533968\n             ,0.692149817943573,-0.677433252334595,-0.249023765325546,-0.484471023082733,-0.813864707946777,-0.320799201726913\n             ,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.333576679229736,0.525787591934204,0.782479405403137\n             ,-0.563040912151337,0.733509361743927,0.380721718072891,-0.743195831775665,0.547327280044556,0.384828329086304\n             ,-0.496076285839081,0.322463065385818,0.806179821491241,-0.333576679229736,0.525787591934204,0.782479405403137\n             ,-0.496076285839081,0.322463065385818,0.806179821491241,-0.0998818427324295,-0.0102633228525519,0.994946360588074\n             ,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.097216323018074,-0.329928547143936,0.938986778259277\n             ,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.496076285839081,0.322463065385818,0.806179821491241\n             ,-0.549624145030975,0.147533476352692,0.822281718254089,-0.841190576553345,0.42979621887207,-0.328136563301086\n             ,-0.866790115833282,0.482820779085159,0.124735727906227,-0.775943994522095,0.628167152404785,0.0575932897627354\n             ,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.670227468013763,0.653629958629608,0.351515263319016\n             ,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.612874746322632,0.790095686912537,-0.011550584807992\n             ,-0.563040912151337,0.733509361743927,0.380721718072891,-0.743281781673431,0.522458851337433,-0.417814522981644\n             ,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.676622211933136,0.280620872974396,-0.680760145187378\n             ,-0.841190576553345,0.42979621887207,-0.328136563301086,-0.638818860054016,0.281881213188171,-0.715858519077301\n             ,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.558412373065948,0.662734746932983,-0.498957246541977\n             ,-0.449016630649567,0.427696466445923,-0.784512460231781,-0.567850172519684,0.0910008028149605,-0.81808614730835\n             ,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.513277769088745,-0.317918360233307,-0.797166168689728\n             ,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.496076285839081,0.322463065385818,0.806179821491241\n             ,-0.743195831775665,0.547327280044556,0.384828329086304,-0.819946527481079,0.416022598743439,0.393208384513855\n             ,-0.549624145030975,0.147533476352692,0.822281718254089,0.314551591873169,-0.777825355529785,-0.544100165367126\n             ,0.445018202066422,-0.841427505016327,-0.306526601314545,0.480990260839462,-0.836049139499664,-0.263951063156128\n             ,0.233872562646866,-0.770340859889984,-0.593193531036377,0.552962005138397,-0.830714046955109,0.064398355782032\n             ,0.518121659755707,-0.845738351345062,-0.127579480409622,0.602230906486511,-0.791486024856567,-0.104248508810997\n             ,0.624863624572754,-0.775575757026672,0.0895971804857254,0.158797964453697,-0.752626359462738,0.639012277126312\n             ,0.477273166179657,-0.844216048717499,0.243945851922035,0.392137885093689,-0.898935735225677,0.195300936698914\n             ,0.22346855700016,-0.725432455539703,0.651006579399109,0.631202757358551,-0.748089611530304,0.204804703593254\n             ,0.679318964481354,-0.681169748306274,0.273008167743683,0.484550148248672,-0.283617049455643,0.827509820461273\n             ,0.470721006393433,-0.417188495397568,0.777415871620178,-0.425698101520538,-0.165044084191322,0.889686226844788\n             ,0.158797964453697,-0.752626359462738,0.639012277126312,0.22346855700016,-0.725432455539703,0.651006579399109\n             ,-0.331690967082977,-0.041898600757122,0.94245719909668,0.305413067340851,0.121777974069119,0.944400906562805\n             ,0.509250044822693,-0.170650407671928,0.843529999256134,-0.047230526804924,-0.147780075669289,0.987891852855682\n             ,-0.28887614607811,0.124025739729404,0.949298799037933,0.117293141782284,0.336978107690811,0.934177756309509\n             ,0.305413067340851,0.121777974069119,0.944400906562805,-0.28887614607811,0.124025739729404,0.949298799037933\n             ,-0.357071965932846,0.176186710596085,0.917310118675232,-0.388193219900131,-0.0462160408496857,-0.920418441295624\n             ,-0.122526675462723,-0.422631919384003,-0.897980749607086,-0.158167138695717,-0.488490730524063,-0.858114242553711\n             ,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.158167138695717,-0.488490730524063,-0.858114242553711\n             ,0.233872562646866,-0.770340859889984,-0.593193531036377,0.309054106473923,-0.602658152580261,-0.735723257064819\n             ,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.603177964687347,-0.730402767658234,-0.320449888706207\n             ,0.309054106473923,-0.602658152580261,-0.735723257064819,0.233872562646866,-0.770340859889984,-0.593193531036377\n             ,0.480990260839462,-0.836049139499664,-0.263951063156128,0.509250044822693,-0.170650407671928,0.843529999256134\n             ,0.744553029537201,-0.501156628131866,0.4410021007061,0.443388015031815,-0.641468644142151,0.626039206981659\n             ,-0.047230526804924,-0.147780075669289,0.987891852855682,-0.661741137504578,0.744016170501709,0.0924049317836761\n             ,-0.0627354606986046,0.701922833919525,0.709484755992889,-0.270709186792374,0.893246471881866,0.35892516374588\n             ,-0.65559720993042,0.741017520427704,-0.145207911729813,0.64731752872467,-0.742053866386414,-0.174172759056091\n             ,0.668083667755127,-0.706556260585785,0.233329057693481,0.779800176620483,-0.625844657421112,0.0151696130633354\n             ,0.668628990650177,-0.726897060871124,-0.156703382730484,0.323112219572067,0.289230555295944,0.901079475879669\n             ,0.771257698535919,-0.18939545750618,0.607693135738373,0.509250044822693,-0.170650407671928,0.843529999256134\n             ,0.305413067340851,0.121777974069119,0.944400906562805,0.323112219572067,0.289230555295944,0.901079475879669\n             ,0.235387146472931,0.430203825235367,0.871503055095673,-0.34545773267746,0.720738053321838,0.600995540618896\n             ,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.633037269115448,0.653608679771423,0.414800643920898\n             ,-0.217019572854042,0.53657478094101,0.815469205379486,-0.0627354606986046,0.701922833919525,0.709484755992889\n             ,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.245442464947701,0.425341755151749,0.871115624904633\n             ,0.174675241112709,0.124651238322258,0.976703941822052,0.279203683137894,0.224120020866394,0.933710634708405\n             ,-0.217019572854042,0.53657478094101,0.815469205379486,-0.599866449832916,0.551924109458923,0.57925820350647\n             ,-0.245442464947701,0.425341755151749,0.871115624904633,-0.217019572854042,0.53657478094101,0.815469205379486\n             ,-0.633037269115448,0.653608679771423,0.414800643920898,-0.62176638841629,0.776679754257202,-0.100871689617634\n             ,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.685906887054443,0.655823826789856,-0.315320372581482\n             ,-0.733746409416199,0.676492989063263,-0.0630356669425964,-0.563096046447754,0.501788794994354,-0.656605541706085\n             ,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.521965801715851,0.298950701951981,-0.798861801624298\n             ,-0.599522888660431,0.463965177536011,-0.652156889438629,-0.0413625538349152,-0.756104946136475,-0.653141975402832\n             ,-0.266530960798264,-0.246738225221634,-0.931708931922913,0.130334496498108,-0.649341344833374,-0.749245464801788\n             ,0.130334496498108,-0.649341344833374,-0.749245464801788,-0.266530960798264,-0.246738225221634,-0.931708931922913\n             ,-0.349483400583267,-0.0788575559854507,-0.933618187904358,0.241232365369797,-0.621889412403107,-0.745023787021637\n             ,0.420848518610001,-0.797750890254974,-0.431833386421204,0.545369505882263,-0.785522282123566,-0.292449623346329\n             ,0.446416854858398,-0.828317999839783,-0.338528007268906,0.319416075944901,-0.833531200885773,-0.450776189565659\n             ,0.606213510036469,-0.729506313800812,-0.316742390394211,0.558507144451141,-0.773075938224792,-0.30070486664772\n             ,0.241232365369797,-0.621889412403107,-0.745023787021637,0.233110591769218,-0.47022944688797,-0.851201355457306\n             ,0.130334496498108,-0.649341344833374,-0.749245464801788,0.241232365369797,-0.621889412403107,-0.745023787021637\n             ,0.558507144451141,-0.773075938224792,-0.30070486664772,0.54656720161438,-0.7532879114151,-0.365816354751587\n             ,-0.0413625538349152,-0.756104946136475,-0.653141975402832,0.130334496498108,-0.649341344833374,-0.749245464801788\n             ,0.54656720161438,-0.7532879114151,-0.365816354751587,0.431472927331924,-0.822143793106079,-0.371363341808319\n             ,0.606213510036469,-0.729506313800812,-0.316742390394211,0.233110591769218,-0.47022944688797,-0.851201355457306\n             ,0.309054106473923,-0.602658152580261,-0.735723257064819,0.603177964687347,-0.730402767658234,-0.320449888706207\n             ,-0.39349702000618,0.476447492837906,0.786230206489563,-0.523556113243103,0.279740929603577,0.804757118225098\n             ,-0.331690967082977,-0.041898600757122,0.94245719909668,-0.0139366090297699,0.110060036182404,0.993827223777771\n             ,0.0628950372338295,0.12239508330822,0.990486621856689,0.470721006393433,-0.417188495397568,0.777415871620178\n             ,0.484550148248672,-0.283617049455643,0.827509820461273,0.115986511111259,0.227630436420441,0.966815114021301\n             ,0.564540684223175,-0.811680018901825,0.149898007512093,0.463100373744965,-0.535968005657196,0.705886960029602\n             ,0.22346855700016,-0.725432455539703,0.651006579399109,0.392137885093689,-0.898935735225677,0.195300936698914\n             ,0.463100373744965,-0.535968005657196,0.705886960029602,-0.0139366090297699,0.110060036182404,0.993827223777771\n             ,-0.331690967082977,-0.041898600757122,0.94245719909668,0.22346855700016,-0.725432455539703,0.651006579399109\n             ,0.319416075944901,-0.833531200885773,-0.450776189565659,0.446416854858398,-0.828317999839783,-0.338528007268906\n             ,0.445018202066422,-0.841427505016327,-0.306526601314545,0.314551591873169,-0.777825355529785,-0.544100165367126\n             ,0.319416075944901,-0.833531200885773,-0.450776189565659,-0.175627052783966,-0.391306757926941,-0.903346061706543\n             ,-0.238952934741974,-0.279697000980377,-0.929876923561096,0.420848518610001,-0.797750890254974,-0.431833386421204\n             ,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.229133352637291,-0.201160058379173,-0.952382564544678\n             ,-0.0411282703280449,-0.362414002418518,-0.931109309196472,-0.353154391050339,-0.159876078367233,-0.92180347442627\n             ,-0.175627052783966,-0.391306757926941,-0.903346061706543,-0.122526675462723,-0.422631919384003,-0.897980749607086\n             ,-0.388193219900131,-0.0462160408496857,-0.920418441295624,-0.486891210079193,0.021690109744668,-0.873193264007568\n             ,-0.328695803880692,0.662784039974213,0.672812342643738,-0.402240663766861,0.592356264591217,0.698080539703369\n             ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.485478460788727,0.644360303878784,0.590855658054352\n             ,-0.341495484113693,0.750590026378632,0.565681397914886,-0.175726309418678,0.623865723609924,0.761519432067871\n             ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.402240663766861,0.592356264591217,0.698080539703369\n             ,0.668083667755127,-0.706556260585785,0.233329057693481,0.64731752872467,-0.742053866386414,-0.174172759056091\n             ,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.477273166179657,-0.844216048717499,0.243945851922035\n             ,0.692083477973938,-0.68414306640625,-0.23014922440052,0.657974064350128,-0.742551565170288,-0.125249087810516\n             ,0.668628990650177,-0.726897060871124,-0.156703382730484,0.779800176620483,-0.625844657421112,0.0151696130633354\n             ,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.788194417953491,-0.590478122234344,-0.173450663685799\n             ,0.742225170135498,-0.630128085613251,-0.228123426437378,0.692083477973938,-0.68414306640625,-0.23014922440052\n             ,0.431472927331924,-0.822143793106079,-0.371363341808319,0.54656720161438,-0.7532879114151,-0.365816354751587\n             ,0.742225170135498,-0.630128085613251,-0.228123426437378,0.816579103469849,-0.529018878936768,-0.230949223041534\n             ,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.337419033050537,0.179084926843643,-0.924162864685059\n             ,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.438523173332214,0.694159924983978,-0.570823431015015\n             ,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.566018283367157,0.00991705991327763,-0.824333071708679\n             ,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.627143085002899,0.109072089195251,-0.771229445934296\n             ,-0.627143085002899,0.109072089195251,-0.771229445934296,-0.598774611949921,0.291624635457993,-0.745938360691071\n             ,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.742188274860382,0.281538933515549,-0.608187794685364\n             ,0.314551591873169,-0.777825355529785,-0.544100165367126,0.233872562646866,-0.770340859889984,-0.593193531036377\n             ,-0.158167138695717,-0.488490730524063,-0.858114242553711,-0.122526675462723,-0.422631919384003,-0.897980749607086\n             ,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.473940014839172,0.0295314248651266,-0.880061805248261\n             ,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.637764096260071,0.392574012279511,-0.662678360939026\n             ,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.602150559425354,0.09493388235569,-0.792718291282654\n             ,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.388193219900131,-0.0462160408496857,-0.920418441295624\n             ,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.624755680561066,0.281536430120468,-0.728297710418701\n             ,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.708205878734589,0.435963183641434,-0.555320203304291\n             ,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.653796315193176,0.736424326896667,0.173866480588913\n             ,-0.728628396987915,0.670947968959808,0.137584701180458,-0.742188274860382,0.281538933515549,-0.608187794685364\n             ,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.349483400583267,-0.0788575559854507,-0.933618187904358\n             ,-0.266530960798264,-0.246738225221634,-0.931708931922913,-0.391994029283524,0.0455844439566135,-0.91883772611618\n             ,-0.353154391050339,-0.159876078367233,-0.92180347442627,0.233110591769218,-0.47022944688797,-0.851201355457306\n             ,0.241232365369797,-0.621889412403107,-0.745023787021637,-0.349483400583267,-0.0788575559854507,-0.933618187904358\n             ,-0.175627052783966,-0.391306757926941,-0.903346061706543,0.319416075944901,-0.833531200885773,-0.450776189565659\n             ,0.314551591873169,-0.777825355529785,-0.544100165367126,-0.122526675462723,-0.422631919384003,-0.897980749607086\n             ,0.0628950372338295,0.12239508330822,0.990486621856689,0.115986511111259,0.227630436420441,0.966815114021301\n             ,-0.397168695926666,0.623658359050751,0.673280954360962,-0.467934727668762,0.514274716377258,0.718720138072968\n             ,0.644391298294067,-0.53528618812561,-0.546103060245514,0.57789820432663,-0.655906856060028,-0.485612899065018\n             ,0.143241554498672,-0.263150751590729,-0.954061627388,0.298700571060181,-0.161740928888321,-0.94054126739502\n             ,0.484550148248672,-0.283617049455643,0.827509820461273,0.679318964481354,-0.681169748306274,0.273008167743683\n             ,0.780032634735107,-0.518629193305969,0.350104093551636,0.568926751613617,-0.0644996538758278,0.819854915142059\n             ,0.617175698280334,-0.749861061573029,-0.238332808017731,0.57789820432663,-0.655906856060028,-0.485612899065018\n             ,0.644391298294067,-0.53528618812561,-0.546103060245514,0.692149817943573,-0.677433252334595,-0.249023765325546\n             ,0.780032634735107,-0.518629193305969,0.350104093551636,0.679318964481354,-0.681169748306274,0.273008167743683\n             ,0.669889271259308,-0.735676348209381,0.100143387913704,0.729846894741058,-0.679405450820923,0.0757084339857101\n             ,0.165526703000069,0.46548119187355,0.869441270828247,0.115986511111259,0.227630436420441,0.966815114021301,0.484550148248672\n             ,-0.283617049455643,0.827509820461273,0.568926751613617,-0.0644996538758278,0.819854915142059,0.669889271259308\n             ,-0.735676348209381,0.100143387913704,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.704946756362915\n             ,-0.708129465579987,-0.040034044533968,0.729846894741058,-0.679405450820923,0.0757084339857101,0.298700571060181\n             ,-0.161740928888321,-0.94054126739502,0.143241554498672,-0.263150751590729,-0.954061627388,-0.337419033050537\n             ,0.179084926843643,-0.924162864685059,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.793548226356506\n             ,0.599173665046692,-0.106170132756233,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.866790115833282\n             ,0.482820779085159,0.124735727906227,-0.841190576553345,0.42979621887207,-0.328136563301086,-0.841190576553345\n             ,0.42979621887207,-0.328136563301086,-0.676622211933136,0.280620872974396,-0.680760145187378,-0.52191436290741\n             ,0.573753893375397,-0.631198763847351,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.485478460788727\n             ,0.644360303878784,0.590855658054352,-0.559439122676849,0.572440028190613,0.599449932575226,-0.524893045425415\n             ,0.430009782314301,0.734560310840607,-0.751098394393921,0.448982089757919,0.484010636806488,-0.549624145030975\n             ,0.147533476352692,0.822281718254089,-0.819946527481079,0.416022598743439,0.393208384513855,-0.896193027496338\n             ,0.243554174900055,0.370836079120636,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.751098394393921\n             ,0.448982089757919,0.484010636806488,-0.737871766090393,0.512266218662262,0.439463973045349,-0.328695803880692\n             ,0.662784039974213,0.672812342643738,-0.485478460788727,0.644360303878784,0.590855658054352,-0.532302677631378\n             ,-0.016792556270957,0.846387565135956,-0.896193027496338,0.243554174900055,0.370836079120636,-0.751098394393921\n             ,0.448982089757919,0.484010636806488,-0.524893045425415,0.430009782314301,0.734560310840607,-0.676622211933136\n             ,0.280620872974396,-0.680760145187378,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.288306564092636\n             ,0.196774065494537,-0.937101542949677,-0.52191436290741,0.573753893375397,-0.631198763847351,-0.288306564092636\n             ,0.196774065494537,-0.937101542949677,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.438523173332214\n             ,0.694159924983978,-0.570823431015015,-0.52191436290741,0.573753893375397,-0.631198763847351,0.311660826206207\n             ,-0.127051904797554,-0.941660940647125,0.298700571060181,-0.161740928888321,-0.94054126739502,-0.150649160146713\n             ,0.343712389469147,-0.926912426948547,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.549624145030975\n             ,0.147533476352692,0.822281718254089,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.154075160622597\n             ,0.221347615122795,0.962946593761444,-0.097216323018074,-0.329928547143936,0.938986778259277,0.115986511111259\n             ,0.227630436420441,0.966815114021301,0.165526703000069,0.46548119187355,0.869441270828247,-0.154075160622597\n             ,0.221347615122795,0.962946593761444,-0.397168695926666,0.623658359050751,0.673280954360962,-0.438523173332214\n             ,0.694159924983978,-0.570823431015015,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.665791451931\n             ,0.744200885295868,0.053728986531496,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.736354291439056\n             ,0.674543976783752,-0.0526571460068226,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.558412373065948\n             ,0.662734746932983,-0.498957246541977,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.677062809467316\n             ,0.519408404827118,-0.521345198154449,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.449016630649567\n             ,0.427696466445923,-0.784512460231781,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.676421940326691\n             ,0.591155827045441,0.439304113388062,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.665791451931,0.744200885295868\n             ,0.053728986531496,-0.345012873411179,0.660347282886505,0.667013943195343,-0.345012873411179,0.660347282886505\n             ,0.667013943195343,-0.665791451931,0.744200885295868,0.053728986531496,-0.728628396987915,0.670947968959808,0.137584701180458\n             ,-0.458523720502853,0.614238142967224,0.642236292362213,-0.458523720502853,0.614238142967224,0.642236292362213\n             ,-0.728628396987915,0.670947968959808,0.137584701180458,-0.653796315193176,0.736424326896667,0.173866480588913\n             ,-0.341495484113693,0.750590026378632,0.565681397914886,-0.357071965932846,0.176186710596085,0.917310118675232\n             ,-0.396970868110657,0.459579348564148,0.794481575489044,-0.175726309418678,0.623865723609924,0.761519432067871\n             ,0.117293141782284,0.336978107690811,0.934177756309509,-0.627143085002899,0.109072089195251,-0.771229445934296\n             ,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.546689867973328,0.213103443384171,-0.809763610363007\n             ,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.572875738143921,0.11709675937891,-0.811234712600708\n             ,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.388193219900131,-0.0462160408496857,-0.920418441295624\n             ,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.238952934741974,-0.279697000980377,-0.929876923561096\n             ,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.602150559425354,0.09493388235569,-0.792718291282654\n             ,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.396970868110657,0.459579348564148,0.794481575489044\n             ,-0.357071965932846,0.176186710596085,0.917310118675232,-0.523556113243103,0.279740929603577,0.804757118225098\n             ,-0.39349702000618,0.476447492837906,0.786230206489563,-0.396970868110657,0.459579348564148,0.794481575489044\n             ,-0.39349702000618,0.476447492837906,0.786230206489563,-0.482590168714523,0.598400712013245,0.639549314975739\n             ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.207436442375183,0.874366402626038,0.438695192337036\n             ,0.293660908937454,0.577858746051788,0.761473953723907,-0.175726309418678,0.623865723609924,0.761519432067871\n             ,-0.341495484113693,0.750590026378632,0.565681397914886,-0.708205878734589,0.435963183641434,-0.555320203304291\n             ,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.535080850124359,0.838914573192596,-0.0995529592037201\n             ,-0.653796315193176,0.736424326896667,0.173866480588913,-0.550443887710571,0.485175997018814,-0.679423153400421\n             ,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.643109500408173,0.5986048579216,-0.477579742670059\n             ,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.28887614607811,0.124025739729404,0.949298799037933,-0.047230526804924\n             ,-0.147780075669289,0.987891852855682,-0.425698101520538,-0.165044084191322,0.889686226844788,-0.523556113243103\n             ,0.279740929603577,0.804757118225098,-0.047230526804924,-0.147780075669289,0.987891852855682,0.443388015031815\n             ,-0.641468644142151,0.626039206981659,0.158797964453697,-0.752626359462738,0.639012277126312,-0.425698101520538\n             ,-0.165044084191322,0.889686226844788,0.323112219572067,0.289230555295944,0.901079475879669,0.406247109174728\n             ,0.174616456031799,0.896923840045929,0.70347386598587,-0.284948945045471,0.651098012924194,0.771257698535919\n             ,-0.18939545750618,0.607693135738373,0.792802751064301,-0.543330252170563,0.276144862174988,0.744553029537201\n             ,-0.501156628131866,0.4410021007061,0.771257698535919,-0.18939545750618,0.607693135738373,0.70347386598587,-0.284948945045471\n             ,0.651098012924194,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.896193027496338,0.243554174900055\n             ,0.370836079120636,-0.819946527481079,0.416022598743439,0.393208384513855,-0.866790115833282,0.482820779085159\n             ,0.124735727906227,-0.866790115833282,0.482820779085159,0.124735727906227,-0.819946527481079,0.416022598743439\n             ,0.393208384513855,-0.743195831775665,0.547327280044556,0.384828329086304,-0.775943994522095,0.628167152404785\n             ,0.0575932897627354,-0.207436442375183,0.874366402626038,0.438695192337036,-0.34545773267746,0.720738053321838\n             ,0.600995540618896,0.235387146472931,0.430203825235367,0.871503055095673,0.293660908937454,0.577858746051788\n             ,0.761473953723907,0.624863624572754,-0.775575757026672,0.0895971804857254,0.669889271259308,-0.735676348209381\n             ,0.100143387913704,0.679318964481354,-0.681169748306274,0.273008167743683,0.631202757358551,-0.748089611530304\n             ,0.204804703593254,0.552962005138397,-0.830714046955109,0.064398355782032,0.564540684223175,-0.811680018901825\n             ,0.149898007512093,0.392137885093689,-0.898935735225677,0.195300936698914,0.45007735490799,-0.890308558940887\n             ,-0.0691446214914322,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.392137885093689,-0.898935735225677\n             ,0.195300936698914,0.477273166179657,-0.844216048717499,0.243945851922035,0.505315124988556,-0.859342753887177\n             ,-0.0786550119519234,-0.391994029283524,0.0455844439566135,-0.91883772611618,-0.405150681734085,0.0784264355897903\n             ,-0.910879909992218,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.458829164505005,0.0783318057656288\n             ,-0.885064899921417,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.617175698280334,-0.749861061573029\n             ,-0.238332808017731,0.692149817943573,-0.677433252334595,-0.249023765325546,0.704946756362915,-0.708129465579987\n             ,-0.040034044533968,0.518121659755707,-0.845738351345062,-0.127579480409622,0.446416854858398,-0.828317999839783\n             ,-0.338528007268906,0.545369505882263,-0.785522282123566,-0.292449623346329,0.602230906486511,-0.791486024856567\n             ,-0.104248508810997,0.518121659755707,-0.845738351345062,-0.127579480409622,0.45007735490799,-0.890308558940887\n             ,-0.0691446214914322,0.445018202066422,-0.841427505016327,-0.306526601314545,0.446416854858398,-0.828317999839783\n             ,-0.338528007268906,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.458829164505005,0.0783318057656288\n             ,-0.885064899921417,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.537661731243134,0.416983306407928\n             ,-0.732833385467529,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.563096046447754,0.501788794994354\n             ,-0.656605541706085,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.428541034460068,0.378491044044495\n             ,-0.820424914360046,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.590115070343018,0.449753820896149\n             ,-0.670436978340149,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.471282690763474,0.177316069602966\n             ,-0.863974332809448,0.788194417953491,-0.590478122234344,-0.173450663685799,0.816579103469849,-0.529018878936768\n             ,-0.230949223041534,0.742225170135498,-0.630128085613251,-0.228123426437378,-0.207436442375183,0.874366402626038\n             ,0.438695192337036,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.24271634221077,0.841442763805389\n             ,0.482765853404999,-0.34545773267746,0.720738053321838,0.600995540618896,0.722802340984344,-0.617218017578125\n             ,0.310803234577179,0.792802751064301,-0.543330252170563,0.276144862174988,0.70347386598587,-0.284948945045471\n             ,0.651098012924194,0.592092573642731,-0.300796002149582,0.747628331184387,-0.550443887710571,0.485175997018814\n             ,-0.679423153400421,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.661741137504578,0.744016170501709\n             ,0.0924049317836761,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.769570112228394,0.63578873872757\n             ,-0.0594516098499298,-0.633037269115448,0.653608679771423,0.414800643920898,-0.661741137504578,0.744016170501709\n             ,0.0924049317836761,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.0371899753808975,0.612780451774597\n             ,0.789377629756927,-0.24271634221077,0.841442763805389,0.482765853404999,-0.270709186792374,0.893246471881866\n             ,0.35892516374588,-0.0627354606986046,0.701922833919525,0.709484755992889,0.406247109174728,0.174616456031799\n             ,0.896923840045929,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.0627354606986046,0.701922833919525\n             ,0.709484755992889,0.279203683137894,0.224120020866394,0.933710634708405,0.592092573642731,-0.300796002149582\n             ,0.747628331184387,0.406247109174728,0.174616456031799,0.896923840045929,0.279203683137894,0.224120020866394\n             ,0.933710634708405,0.420396059751511,-0.116494543850422,0.899831175804138,-0.616043865680695,0.713367164134979\n             ,-0.334061741828918,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.599522888660431,0.463965177536011\n             ,-0.652156889438629,-0.685906887054443,0.655823826789856,-0.315320372581482,-0.590115070343018,0.449753820896149\n             ,-0.670436978340149,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.480240970849991,0.318685859441757\n             ,-0.817195177078247,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.624755680561066,0.281536430120468\n             ,-0.728297710418701,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.546689867973328,0.213103443384171\n             ,-0.809763610363007,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.586480021476746,0.39526778459549\n             ,-0.706968545913696,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.714342832565308,0.493795871734619\n             ,-0.495862871408463,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.586480021476746,0.39526778459549\n             ,-0.706968545913696,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.572875738143921,0.11709675937891\n             ,-0.811234712600708,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.229133352637291,-0.201160058379173\n             ,-0.952382564544678,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.572875738143921,0.11709675937891\n             ,-0.811234712600708,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.229133352637291,-0.201160058379173\n             ,-0.952382564544678,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.158167138695717,-0.488490730524063\n             ,-0.858114242553711,-0.0411282703280449,-0.362414002418518,-0.931109309196472,-0.737871766090393,0.512266218662262\n             ,0.439463973045349,-0.751098394393921,0.448982089757919,0.484010636806488,-0.896193027496338,0.243554174900055\n             ,0.370836079120636,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.612874746322632,0.790095686912537\n             ,-0.011550584807992,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.743281781673431,0.522458851337433\n             ,-0.417814522981644,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.563040912151337,0.733509361743927\n             ,0.380721718072891,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.775943994522095,0.628167152404785\n             ,0.0575932897627354,-0.743195831775665,0.547327280044556,0.384828329086304,0.293660908937454,0.577858746051788\n             ,0.761473953723907,0.235387146472931,0.430203825235367,0.871503055095673,0.305413067340851,0.121777974069119\n             ,0.944400906562805,0.117293141782284,0.336978107690811,0.934177756309509,0.54656720161438,-0.7532879114151,-0.365816354751587\n             ,0.558507144451141,-0.773075938224792,-0.30070486664772,0.657974064350128,-0.742551565170288,-0.125249087810516\n             ,0.742225170135498,-0.630128085613251,-0.228123426437378,-0.567850172519684,0.0910008028149605,-0.81808614730835\n             ,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.449016630649567,0.427696466445923,-0.784512460231781\n             ,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.580101191997528,0.322207540273666,-0.748107552528381\n             ,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.446121543645859,0.174870699644089,-0.877721965312958\n             ,-0.449016630649567,0.427696466445923,-0.784512460231781,0.792802751064301,-0.543330252170563,0.276144862174988\n             ,0.722802340984344,-0.617218017578125,0.310803234577179,0.71945708990097,-0.687020063400269,0.101906716823578\n             ,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.792802751064301,-0.543330252170563,0.276144862174988\n             ,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.779800176620483,-0.625844657421112,0.0151696130633354\n             ,0.744553029537201,-0.501156628131866,0.4410021007061,-0.482590168714523,0.598400712013245,0.639549314975739\n             ,-0.467934727668762,0.514274716377258,0.718720138072968,-0.397168695926666,0.623658359050751,0.673280954360962\n             ,-0.559439122676849,0.572440028190613,0.599449932575226,-0.485478460788727,0.644360303878784,0.590855658054352\n             ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.482590168714523,0.598400712013245,0.639549314975739\n             ,-0.559439122676849,0.572440028190613,0.599449932575226,-0.665791451931,0.744200885295868,0.053728986531496,-0.626471102237701\n             ,0.537168443202972,-0.564786732196808,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.728628396987915\n             ,0.670947968959808,0.137584701180458,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.742188274860382\n             ,0.281538933515549,-0.608187794685364,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.337419033050537\n             ,0.179084926843643,-0.924162864685059,0.143241554498672,-0.263150751590729,-0.954061627388,-0.238952934741974\n             ,-0.279697000980377,-0.929876923561096,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.337419033050537\n             ,0.179084926843643,-0.924162864685059,0.420848518610001,-0.797750890254974,-0.431833386421204,-0.238952934741974\n             ,-0.279697000980377,-0.929876923561096,0.143241554498672,-0.263150751590729,-0.954061627388,0.57789820432663\n             ,-0.655906856060028,-0.485612899065018,0.545369505882263,-0.785522282123566,-0.292449623346329,0.420848518610001\n             ,-0.797750890254974,-0.431833386421204,0.57789820432663,-0.655906856060028,-0.485612899065018,0.617175698280334\n             ,-0.749861061573029,-0.238332808017731,0.602230906486511,-0.791486024856567,-0.104248508810997,0.545369505882263\n             ,-0.785522282123566,-0.292449623346329,0.617175698280334,-0.749861061573029,-0.238332808017731,0.646031558513641\n             ,-0.763022661209106,-0.0209675077348948,0.624863624572754,-0.775575757026672,0.0895971804857254,0.602230906486511\n             ,-0.791486024856567,-0.104248508810997,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.669889271259308\n             ,-0.735676348209381,0.100143387913704,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.52191436290741\n             ,0.573753893375397,-0.631198763847351,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.51726096868515\n             ,0.854504764080048,0.0475671775639057,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.471282690763474\n             ,0.177316069602966,-0.863974332809448,-0.405150681734085,0.0784264355897903,-0.910879909992218,-0.521965801715851\n             ,0.298950701951981,-0.798861801624298,-0.480240970849991,0.318685859441757,-0.817195177078247,0.558507144451141\n             ,-0.773075938224792,-0.30070486664772,0.606213510036469,-0.729506313800812,-0.316742390394211,0.668628990650177\n             ,-0.726897060871124,-0.156703382730484,0.657974064350128,-0.742551565170288,-0.125249087810516,0.606213510036469\n             ,-0.729506313800812,-0.316742390394211,0.603177964687347,-0.730402767658234,-0.320449888706207,0.64731752872467\n             ,-0.742053866386414,-0.174172759056091,0.668628990650177,-0.726897060871124,-0.156703382730484,0.480990260839462\n             ,-0.836049139499664,-0.263951063156128,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.64731752872467\n             ,-0.742053866386414,-0.174172759056091,0.603177964687347,-0.730402767658234,-0.320449888706207,0.445018202066422\n             ,-0.841427505016327,-0.306526601314545,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.505315124988556\n             ,-0.859342753887177,-0.0786550119519234,0.480990260839462,-0.836049139499664,-0.263951063156128,-0.345012873411179\n             ,0.660347282886505,0.667013943195343,-0.328695803880692,0.662784039974213,0.672812342643738,-0.737871766090393\n             ,0.512266218662262,0.439463973045349,-0.676421940326691,0.591155827045441,0.439304113388062,-0.458523720502853\n             ,0.614238142967224,0.642236292362213,-0.402240663766861,0.592356264591217,0.698080539703369,-0.328695803880692\n             ,0.662784039974213,0.672812342643738,-0.345012873411179,0.660347282886505,0.667013943195343,-0.58198344707489\n             ,-0.50494521856308,0.637436747550964,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.407216638326645\n             ,-0.806287288665771,0.429040133953094,-0.869328856468201,-0.380869299173355,0.314969629049301,-0.498203843832016\n             ,-0.171885296702385,-0.849851965904236,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.596588253974915\n             ,0.134587496519089,-0.791181802749634,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.513277769088745\n             ,-0.317918360233307,-0.797166168689728,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.705084800720215\n             ,-0.161029234528542,-0.690597534179688,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.737501204013824\n             ,0.475387096405029,-0.479686439037323,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.595847427845001\n             ,0.771685659885406,-0.222411975264549,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.917147397994995\n             ,-0.128003314137459,-0.377433180809021,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.677902281284332\n             ,0.724911689758301,-0.122276462614536,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.677902281284332\n             ,0.724911689758301,-0.122276462614536,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.523228526115417\n             ,0.410001486539841,0.747081458568573,-0.54696398973465,0.598231494426727,0.585618793964386,-0.541739642620087\n             ,0.290830105543137,0.788629233837128,-0.265586584806442,0.827619135379791,0.494479835033417,-0.251114159822464\n             ,0.744844555854797,0.618181467056274,-0.415858834981918,0.554817199707031,0.720582604408264,-0.265586584806442\n             ,0.827619135379791,0.494479835033417,0.0445509292185307,0.65805971622467,0.751646637916565,-0.130890280008316\n             ,0.562183797359467,0.816588640213013,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.677088737487793\n             ,-0.402109175920486,-0.616327106952667,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.776331782341003\n             ,-0.346262842416763,-0.526698231697083,0.135322481393814,0.847399234771729,0.513422191143036,0.267442584037781\n             ,0.554580211639404,0.787981748580933,-0.163037300109863,0.519588589668274,0.838717222213745,-0.244644120335579\n             ,0.685302138328552,0.685937523841858,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0573794208467007\n             ,0.242892846465111,-0.968354642391205,0.103162460029125,0.213912323117256,-0.971390247344971,0.0849071517586708\n             ,0.404431521892548,-0.910618424415588,0.124407894909382,0.762849271297455,0.634494781494141,-0.0757151022553444\n             ,0.839400827884674,0.53821325302124,-0.101806551218033,0.422118037939072,0.900806188583374,-0.130024403333664\n             ,0.107345074415207,0.985682845115662,-0.243838042020798,0.106035023927689,0.964001834392548,-0.168258428573608\n             ,-0.0454077981412411,0.984696507453918,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.826433479785919\n             ,-0.267859846353531,-0.495236098766327,-0.92103111743927,-0.215036183595657,-0.324747800827026,0.167783945798874\n             ,0.880431950092316,0.443495273590088,0.320210188627243,0.913715243339539,0.250179767608643,0.127348259091377\n             ,0.984222948551178,0.1228316873312,0.118423573672771,0.978543698787689,0.168606325984001,-0.373621255159378,0.625036597251892\n             ,-0.685373187065125,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.277610629796982,0.394662648439407\n             ,-0.875884532928467,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.91446441411972,-0.237356558442116\n             ,-0.32774493098259,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.529427289962769,-0.308612763881683\n             ,-0.790230929851532,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.534069001674652,-0.533251285552979\n             ,-0.656058967113495,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.803666055202484,-0.115168422460556\n             ,0.583829700946808,-0.797964632511139,-0.0603525713086128,0.599674940109253,0.0620061531662941,0.990111231803894\n             ,-0.125837221741676,0.0272185504436493,0.988011002540588,-0.151965260505676,0.00109092053025961,0.832261800765991\n             ,-0.554381728172302,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.373621255159378,0.625036597251892\n             ,-0.685373187065125,-0.498037964105606,0.826278984546661,-0.263099282979965,-0.630419492721558,0.671314060688019\n             ,-0.389754712581635,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0104440562427044,-0.319070518016815\n             ,-0.947673439979553,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.659155488014221,-0.442682504653931\n             ,-0.607903122901917,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.534069001674652,-0.533251285552979\n             ,-0.656058967113495,-0.0765343606472015,-0.228869631886482,-0.970443785190582,0.230162009596825,-0.0996426865458488\n             ,-0.968037605285645,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.218962535262108,0.084364540874958\n             ,-0.972079277038574,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.0474926419556141,-0.104372285306454\n             ,-0.993403673171997,-0.273301541805267,-0.178375348448753,-0.945245206356049,0.0198883153498173,-0.203020170331001\n             ,-0.978972554206848,-0.0261400658637285,-0.230357423424721,-0.972754895687103,-0.045579582452774,-0.167653381824493\n             ,-0.98479175567627,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.907991111278534,-0.362916141748428\n             ,0.209389582276344,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.806973397731781,-0.133313298225403\n             ,0.575344681739807,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.947871088981628,-0.0393517799675465\n             ,0.316214770078659,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.730858027935028,-0.478023678064346\n             ,0.487175494432449,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.987909078598022,-0.100733421742916\n             ,0.117849096655846,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.961413502693176,-0.0763644799590111\n             ,0.264296323060989,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.967698454856873,-0.123798668384552\n             ,-0.219621583819389,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.826433479785919,-0.267859846353531\n             ,-0.495236098766327,-0.126853466033936,0.814248085021973,0.566487669944763,0.0917807519435883,0.740839779376984\n             ,0.665381610393524,-0.251114159822464,0.744844555854797,0.618181467056274,-0.130246058106422,-0.0256487857550383\n             ,-0.99114990234375,-0.158792361617088,0.191556662321091,-0.968550980091095,-0.20303450524807,0.175852552056313\n             ,-0.963251233100891,-0.218962535262108,0.084364540874958,-0.972079277038574,0.230162009596825,-0.0996426865458488\n             ,-0.968037605285645,0.206769347190857,0.0198965240269899,-0.978187382221222,-0.130246058106422,-0.0256487857550383\n             ,-0.99114990234375,-0.658022820949554,0.640722334384918,0.395576566457748,-0.559998273849487,0.512845575809479\n             ,0.65068531036377,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.285846680402756,0.740470588207245\n             ,0.608272194862366,-0.431082636117935,0.669595658779144,0.604821860790253,-0.233475670218468,0.295215666294098\n             ,0.926464676856995,0.0469380915164948,0.75044322013855,0.659266114234924,0.182602807879448,0.369611233472824\n             ,0.911067366600037,0.128257870674133,0.488565057516098,0.863049328327179,0.182602807879448,0.369611233472824\n             ,0.911067366600037,0.242353484034538,0.171934008598328,0.954831659793854,0.227748140692711,0.261638969182968\n             ,0.937910318374634,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.00375068746507168,0.864742159843445\n             ,-0.502202033996582,0.00345755694434047,0.996382415294647,-0.0849123671650887,0.0620061531662941,0.990111231803894\n             ,-0.125837221741676,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.730858027935028,-0.478023678064346\n             ,0.487175494432449,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.929829955101013,0.272868812084198\n             ,0.246898397803307,-0.960404455661774,0.118234008550644,0.252277553081512,-0.992305636405945,0.0944509729743004\n             ,0.0800536796450615,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.969261229038239,0.233877912163734\n             ,0.0763790160417557,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.944353520870209,-0.253018736839294\n             ,-0.21018548309803,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.982743322849274,-0.0388989634811878\n             ,0.180837959051132,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.873635351657867,0.199546694755554\n             ,0.44378200173378,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.727636575698853,-0.347527086734772\n             ,0.591413497924805,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.905158758163452,-0.227180346846581\n             ,0.359272450208664,-0.915170788764954,0.197068557143211,0.351605415344238,-0.484471023082733,-0.813864707946777\n             ,-0.320799201726913,-0.929829955101013,0.272868812084198,0.246898397803307,-0.237173914909363,-0.706752181053162\n             ,0.666520714759827,-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.915170788764954,0.197068557143211\n             ,0.351605415344238,-0.915170788764954,0.197068557143211,0.351605415344238,-0.929829955101013,0.272868812084198\n             ,0.246898397803307,-0.823818027973175,0.437958568334579,0.359883517026901,-0.970666527748108,0.0689158514142036\n             ,-0.230341240763664,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.938947200775146,-0.340274900197983\n             ,-0.0509038865566254,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.969261229038239,0.233877912163734\n             ,0.0763790160417557,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.333576679229736,0.525787591934204\n             ,0.782479405403137,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.516382813453674,0.465612560510635\n             ,0.718716740608215,0.0822462737560272,-0.665926337242126,0.741469919681549,0.198109984397888,-0.381663233041763\n             ,0.902820944786072,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.935231983661652,0.339124768972397\n             ,0.10166396945715,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.980707883834839,0.0803700610995293\n             ,0.178192809224129,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.484471023082733,-0.813864707946777\n             ,-0.320799201726913,0.707368016242981,-0.349391609430313,-0.614455819129944,0.165526703000069,0.46548119187355\n             ,0.869441270828247,0.198109984397888,-0.381663233041763,0.902820944786072,-0.154075160622597,0.221347615122795\n             ,0.962946593761444,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.0524283163249493,-0.77048397064209\n             ,0.635299742221832,0.198109984397888,-0.381663233041763,0.902820944786072,0.493679195642471,-0.48221343755722\n             ,0.723706424236298,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.869328856468201,-0.380869299173355\n             ,0.314969629049301,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.275725185871124,-0.367643237113953\n             ,0.888152062892914,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.0998818427324295,-0.0102633228525519\n             ,0.994946360588074,-0.397168695926666,0.623658359050751,0.673280954360962,-0.524893045425415,0.430009782314301\n             ,0.734560310840607,-0.559439122676849,0.572440028190613,0.599449932575226,-0.175627052783966,-0.391306757926941\n             ,-0.903346061706543,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.238952934741974,-0.279697000980377\n             ,-0.929876923561096,0.668083667755127,-0.706556260585785,0.233329057693481,0.744553029537201,-0.501156628131866\n             ,0.4410021007061,0.779800176620483,-0.625844657421112,0.0151696130633354,0.771257698535919,-0.18939545750618\n             ,0.607693135738373,0.744553029537201,-0.501156628131866,0.4410021007061,0.509250044822693,-0.170650407671928\n             ,0.843529999256134,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.349483400583267,-0.0788575559854507\n             ,-0.933618187904358,-0.458829164505005,0.0783318057656288,-0.885064899921417,0.420396059751511,-0.116494543850422\n             ,0.899831175804138,0.279203683137894,0.224120020866394,0.933710634708405,0.174675241112709,0.124651238322258\n             ,0.976703941822052,-0.523556113243103,0.279740929603577,0.804757118225098,-0.425698101520538,-0.165044084191322\n             ,0.889686226844788,-0.331690967082977,-0.041898600757122,0.94245719909668,0.518121659755707,-0.845738351345062\n             ,-0.127579480409622,0.552962005138397,-0.830714046955109,0.064398355782032,0.45007735490799,-0.890308558940887\n             ,-0.0691446214914322,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.65559720993042,0.741017520427704\n             ,-0.145207911729813,-0.270709186792374,0.893246471881866,0.35892516374588,0.753405332565308,-0.651543796062469\n             ,-0.0887193456292152,0.692083477973938,-0.68414306640625,-0.23014922440052,0.779800176620483,-0.625844657421112\n             ,0.0151696130633354,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.637764096260071,0.392574012279511\n             ,-0.662678360939026,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.662047147750854,0.339645981788635\n             ,-0.668082535266876,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.628251135349274,0.515080809593201\n             ,-0.583088576793671,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.550443887710571,0.485175997018814\n             ,-0.679423153400421,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.521023571491241,0.56111478805542\n             ,-0.64318323135376,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.428541034460068,0.378491044044495\n             ,-0.820424914360046,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.309054106473923,-0.602658152580261\n             ,-0.735723257064819,0.233110591769218,-0.47022944688797,-0.851201355457306,-0.769570112228394,0.63578873872757\n             ,-0.0594516098499298,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.643109500408173,0.5986048579216,-0.477579742670059\n             ,-0.154075160622597,0.221347615122795,0.962946593761444,-0.532302677631378,-0.016792556270957,0.846387565135956\n             ,-0.524893045425415,0.430009782314301,0.734560310840607,0.311660826206207,-0.127051904797554,-0.941660940647125\n             ,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.513277769088745,-0.317918360233307,-0.797166168689728\n             ,-0.524893045425415,0.430009782314301,0.734560310840607,-0.397168695926666,0.623658359050751,0.673280954360962\n             ,-0.154075160622597,0.221347615122795,0.962946593761444,-0.498203843832016,-0.171885296702385,-0.849851965904236\n             ,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.446121543645859,0.174870699644089,-0.877721965312958\n             ,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.341495484113693,0.750590026378632,0.565681397914886\n             ,-0.653796315193176,0.736424326896667,0.173866480588913,-0.396970868110657,0.459579348564148,0.794481575489044\n             ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.175726309418678,0.623865723609924,0.761519432067871\n             ,-0.523556113243103,0.279740929603577,0.804757118225098,-0.357071965932846,0.176186710596085,0.917310118675232\n             ,-0.28887614607811,0.124025739729404,0.949298799037933,-0.590115070343018,0.449753820896149,-0.670436978340149\n             ,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.537661731243134,0.416983306407928,-0.732833385467529\n             ,-0.733746409416199,0.676492989063263,-0.0630356669425964,-0.751343011856079,0.620160222053528,0.225576862692833\n             ,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.62176638841629,0.776679754257202,-0.100871689617634\n             ,0.443388015031815,-0.641468644142151,0.626039206981659,0.477273166179657,-0.844216048717499,0.243945851922035\n             ,0.158797964453697,-0.752626359462738,0.639012277126312,-0.217019572854042,0.53657478094101,0.815469205379486\n             ,0.279203683137894,0.224120020866394,0.933710634708405,-0.0627354606986046,0.701922833919525,0.709484755992889\n             ,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.207436442375183,0.874366402626038,0.438695192337036\n             ,-0.341495484113693,0.750590026378632,0.565681397914886,0.443388015031815,-0.641468644142151,0.626039206981659\n             ,0.744553029537201,-0.501156628131866,0.4410021007061,0.668083667755127,-0.706556260585785,0.233329057693481\n             ,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.769570112228394,0.63578873872757,-0.0594516098499298\n             ,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.616043865680695,0.713367164134979,-0.334061741828918\n             ,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.643109500408173,0.5986048579216,-0.477579742670059\n             ,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.751343011856079,0.620160222053528,0.225576862692833\n             ,-0.599866449832916,0.551924109458923,0.57925820350647,-0.633037269115448,0.653608679771423,0.414800643920898\n             ,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.353154391050339,-0.159876078367233,-0.92180347442627\n             ,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.662047147750854,0.339645981788635,-0.668082535266876\n             ,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.537661731243134,0.416983306407928,-0.732833385467529\n             ,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.643109500408173,0.5986048579216,-0.477579742670059\n             ,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.563096046447754,0.501788794994354,-0.656605541706085\n             ,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.34545773267746,0.720738053321838,0.600995540618896\n             ,-0.24271634221077,0.841442763805389,0.482765853404999,0.406247109174728,0.174616456031799,0.896923840045929\n             ,0.323112219572067,0.289230555295944,0.901079475879669,-0.0371899753808975,0.612780451774597,0.789377629756927\n             ,0.70347386598587,-0.284948945045471,0.651098012924194,0.406247109174728,0.174616456031799,0.896923840045929\n             ,0.592092573642731,-0.300796002149582,0.747628331184387,-0.535080850124359,0.838914573192596,-0.0995529592037201\n             ,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.550443887710571,0.485175997018814,-0.679423153400421\n             ,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.270709186792374,0.893246471881866,0.35892516374588\n             ,-0.24271634221077,0.841442763805389,0.482765853404999,-0.379977285861969,-0.0195776931941509,-0.924788594245911\n             ,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.229133352637291,-0.201160058379173,-0.952382564544678\n             ,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.586480021476746,0.39526778459549,-0.706968545913696\n             ,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.379977285861969,-0.0195776931941509,-0.924788594245911\n             ,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.473940014839172,0.0295314248651266,-0.880061805248261\n             ,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.628251135349274,0.515080809593201,-0.583088576793671\n             ,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.628251135349274,0.515080809593201,-0.583088576793671\n             ,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.428541034460068,0.378491044044495,-0.820424914360046\n             ,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.637764096260071,0.392574012279511,-0.662678360939026\n             ,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.637764096260071,0.392574012279511,-0.662678360939026\n             ,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.385445684194565,0.201349288225174,-0.900494337081909\n             ,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.628251135349274,0.515080809593201,-0.583088576793671\n             ,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.793548226356506,0.599173665046692,-0.106170132756233\n             ,-0.676421940326691,0.591155827045441,0.439304113388062,-0.959632217884064,0.26953399181366,0.0803584158420563\n             ,0.742225170135498,-0.630128085613251,-0.228123426437378,0.657974064350128,-0.742551565170288,-0.125249087810516\n             ,0.692083477973938,-0.68414306640625,-0.23014922440052,-0.175726309418678,0.623865723609924,0.761519432067871\n             ,0.293660908937454,0.577858746051788,0.761473953723907,0.117293141782284,0.336978107690811,0.934177756309509\n             ,0.323112219572067,0.289230555295944,0.901079475879669,0.305413067340851,0.121777974069119,0.944400906562805\n             ,0.235387146472931,0.430203825235367,0.871503055095673,-0.638818860054016,0.281881213188171,-0.715858519077301\n             ,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.676622211933136,0.280620872974396,-0.680760145187378\n             ,0.477273166179657,-0.844216048717499,0.243945851922035,0.443388015031815,-0.641468644142151,0.626039206981659\n             ,0.668083667755127,-0.706556260585785,0.233329057693481,-0.0411282703280449,-0.362414002418518,-0.931109309196472\n             ,0.233110591769218,-0.47022944688797,-0.851201355457306,-0.353154391050339,-0.159876078367233,-0.92180347442627\n             ,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.676421940326691,0.591155827045441,0.439304113388062\n             ,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.959632217884064,0.26953399181366,0.0803584158420563\n             ,-0.676421940326691,0.591155827045441,0.439304113388062,-0.737871766090393,0.512266218662262,0.439463973045349\n             ,-0.458523720502853,0.614238142967224,0.642236292362213,-0.341495484113693,0.750590026378632,0.565681397914886\n             ,-0.402240663766861,0.592356264591217,0.698080539703369,-0.594531655311584,-0.698622703552246,0.398068368434906\n             ,-0.407216638326645,-0.806287288665771,0.429040133953094,0.493679195642471,-0.48221343755722,0.723706424236298\n             ,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.985974311828613,-0.0694569125771523,-0.151757627725601\n             ,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.805109977722168,-0.249997183680534,-0.537865459918976\n             ,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.513277769088745,-0.317918360233307,-0.797166168689728\n             ,-0.251114159822464,0.744844555854797,0.618181467056274,-0.291274279356003,0.469944089651108,0.833253800868988\n             ,-0.408989250659943,0.558586657047272,0.721601545810699,-0.415858834981918,0.554817199707031,0.720582604408264\n             ,0.624863624572754,-0.775575757026672,0.0895971804857254,0.631202757358551,-0.748089611530304,0.204804703593254\n             ,0.564540684223175,-0.811680018901825,0.149898007512093,0.552962005138397,-0.830714046955109,0.064398355782032\n             ,0.470721006393433,-0.417188495397568,0.777415871620178,0.463100373744965,-0.535968005657196,0.705886960029602\n             ,0.564540684223175,-0.811680018901825,0.149898007512093,0.631202757358551,-0.748089611530304,0.204804703593254\n             ,-0.0139366090297699,0.110060036182404,0.993827223777771,0.463100373744965,-0.535968005657196,0.705886960029602\n             ,0.470721006393433,-0.417188495397568,0.777415871620178,0.0628950372338295,0.12239508330822,0.990486621856689\n             ,-0.0139366090297699,0.110060036182404,0.993827223777771,0.0628950372338295,0.12239508330822,0.990486621856689\n             ,-0.467934727668762,0.514274716377258,0.718720138072968,-0.39349702000618,0.476447492837906,0.786230206489563\n             ,-0.482590168714523,0.598400712013245,0.639549314975739,-0.39349702000618,0.476447492837906,0.786230206489563\n             ,-0.467934727668762,0.514274716377258,0.718720138072968,-0.888843476772308,-0.151014879345894,0.43261045217514\n             ,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.721357464790344,0.650649428367615,0.237273663282394\n             ,-0.658022820949554,0.640722334384918,0.395576566457748,-0.880525827407837,0.119760677218437,0.458619266748428\n             ,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.96703976392746,-0.131514891982079,0.218031987547874\n             ,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.903727471828461,0.0786926299333572,0.420813679695129\n             ,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.973214685916901,0.0593582727015018,0.22210305929184\n             ,-0.880525827407837,0.119760677218437,0.458619266748428,-0.961413502693176,-0.0763644799590111,0.264296323060989\n             ,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.903727471828461,0.0786926299333572,0.420813679695129\n             ,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.943021297454834,-0.0914337635040283,0.31992295384407\n             ,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.961413502693176,-0.0763644799590111,0.264296323060989\n             ,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.947871088981628,-0.0393517799675465,0.316214770078659\n             ,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.943021297454834,-0.0914337635040283,0.31992295384407\n             ,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.90759688615799,-0.3472660779953,0.235953688621521\n             ,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.962112545967102,-0.0959249585866928,0.255221039056778\n             ,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.947871088981628,-0.0393517799675465,0.316214770078659\n             ,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.959401249885559,0.00467001460492611,0.282005965709686\n             ,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.961413502693176,-0.0763644799590111,0.264296323060989\n             ,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.959401249885559,0.00467001460492611,0.282005965709686\n             ,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.776331782341003,-0.346262842416763,-0.526698231697083\n             ,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.826433479785919,-0.267859846353531,-0.495236098766327\n             ,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.776331782341003,-0.346262842416763,-0.526698231697083\n             ,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.369074016809464,-0.353648155927658,-0.859486699104309\n             ,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.369074016809464,-0.353648155927658,-0.859486699104309\n             ,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.0572102777659893,-0.363048881292343,-0.930012106895447\n             ,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0572102777659893,-0.363048881292343,-0.930012106895447\n             ,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0340137556195259,-0.196621879935265,-0.979889214038849\n             ,0.079964205622673,0.0645997598767281,-0.994702279567719,-0.0752750188112259,0.0473053678870201,-0.996040105819702\n             ,0.0261680763214827,0.194867521524429,-0.980480432510376,0.0810841843485832,0.166241332888603,-0.982745766639709\n             ,0.213752746582031,0.00495887640863657,0.976875185966492,0.206305459141731,0.0686478838324547,0.976076602935791\n             ,0.412932306528091,0.0920658186078072,0.906096458435059,0.443167895078659,0.0182685311883688,0.896252453327179\n             ,0.0116670094430447,0.00425092596560717,0.999922931194305,0.0177117679268122,0.0767069831490517,0.996896326541901\n             ,-0.0938338041305542,0.0678655132651329,0.993272125720978,-0.0935027524828911,0.0115412008017302,0.995552122592926\n             ,0.667598783969879,0.599002242088318,-0.442163020372391,0.751961290836334,-0.373251110315323,-0.543357908725739\n             ,0.901673018932343,-0.243753165006638,-0.357169687747955,0.694567322731018,0.687739253044128,-0.211165577173233\n             ,0.428307920694351,0.88731974363327,-0.170926719903946,0.587996542453766,-0.370855212211609,-0.718836843967438\n             ,0.751961290836334,-0.373251110315323,-0.543357908725739,0.667598783969879,0.599002242088318,-0.442163020372391\n             ,0.550657391548157,0.552472710609436,-0.625739872455597,0.957330107688904,-0.260764896869659,0.124582171440125\n             ,0.898464798927307,-0.377257645130157,-0.224583357572556,0.720091462135315,-0.402850449085236,-0.56496000289917\n             ,0.797747611999512,-0.370718449354172,-0.475569725036621,0.412932306528091,0.0920658186078072,0.906096458435059\n             ,0.669797122478485,0.132066950201988,0.730705201625824,0.740497648715973,0.0785514339804649,0.6674525141716,0.443167895078659\n             ,0.0182685311883688,0.896252453327179,0.443167895078659,0.0182685311883688,0.896252453327179,0.740497648715973\n             ,0.0785514339804649,0.6674525141716,0.789331138134003,-0.10905522108078,0.604204714298248,0.436154782772064,-0.0844674557447433\n             ,0.895898580551147,0.963335692882538,-0.129456236958504,-0.235001027584076,0.964883267879486,-0.257389277219772\n             ,0.0524501986801624,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.999219238758087,-0.0126819871366024\n             ,0.0374175347387791,0.641741633415222,-0.441758394241333,-0.626910865306854,0.631867706775665,-0.394274353981018\n             ,-0.66730123758316,0.797747611999512,-0.370718449354172,-0.475569725036621,0.720091462135315,-0.402850449085236\n             ,-0.56496000289917,0.340316504240036,-0.448403626680374,-0.826510012149811,-0.000479655718663707,-0.389120310544968\n             ,-0.921186804771423,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.316583722829819,-0.383378833532333\n             ,-0.867637872695923,0.669797122478485,0.132066950201988,0.730705201625824,0.412932306528091,0.0920658186078072\n             ,0.906096458435059,0.291106730699539,0.735121071338654,0.612253129482269,0.562915802001953,0.509836494922638\n             ,0.650532484054565,0.889242053031921,-0.13137923181057,0.438164442777634,0.88209742307663,0.116333372890949,0.456476300954819\n             ,0.669797122478485,0.132066950201988,0.730705201625824,0.562915802001953,0.509836494922638,0.650532484054565\n             ,0.999219238758087,-0.0126819871366024,0.0374175347387791,0.98511666059494,-0.171194240450859,-0.0154188685119152\n             ,0.911918580532074,-0.233281582593918,-0.33761540055275,0.963335692882538,-0.129456236958504,-0.235001027584076\n             ,-0.0114694014191628,0.852027952671051,0.523370683193207,0.377356678247452,0.665678739547729,0.643796324729919\n             ,0.306847393512726,0.504767894744873,0.806879222393036,-0.123493202030659,0.566911935806274,0.814469277858734\n             ,0.306847393512726,0.504767894744873,0.806879222393036,0.543150007724762,0.5245680809021,0.65560382604599,0.381191462278366\n             ,0.807218015193939,0.450657457113266,0.0985177978873253,0.656356811523438,0.747990608215332,-0.0114694014191628\n             ,0.852027952671051,0.523370683193207,0.200062945485115,0.83070033788681,0.519530355930328,0.296454012393951,0.853960573673248\n             ,0.42762878537178,0.377356678247452,0.665678739547729,0.643796324729919,0.613006412982941,0.632095158100128,-0.474003076553345\n             ,0.367568165063858,0.757281005382538,-0.539832472801209,0.438032209873199,0.893748044967651,0.0966554135084152\n             ,0.600959360599518,0.790454268455505,0.118447989225388,0.377356678247452,0.665678739547729,0.643796324729919\n             ,0.296454012393951,0.853960573673248,0.42762878537178,0.307623445987701,0.872403740882874,0.379841536283493,0.536732196807861\n             ,0.528757095336914,0.657521426677704,0.198797062039375,0.642942130565643,0.739665627479553,0.167321741580963\n             ,0.36504065990448,0.915832281112671,0.345328092575073,0.282600909471512,0.894921898841858,0.349903911352158,0.592323482036591\n             ,0.725754916667938,0.377356678247452,0.665678739547729,0.643796324729919,0.536732196807861,0.528757095336914\n             ,0.657521426677704,0.543150007724762,0.5245680809021,0.65560382604599,0.306847393512726,0.504767894744873,0.806879222393036\n             ,0.367568165063858,0.757281005382538,-0.539832472801209,0.237173900008202,0.452350407838821,-0.85972535610199\n             ,0.0132267400622368,0.464425086975098,-0.885513663291931,0.148073747754097,0.745845675468445,-0.649452328681946\n             ,0.340316504240036,-0.448403626680374,-0.826510012149811,0.365317970514297,-0.409484475851059,-0.835981607437134\n             ,0.0686725899577141,-0.344746232032776,-0.936180591583252,-0.000479655718663707,-0.389120310544968,-0.921186804771423\n             ,-0.0545569509267807,0.00619251187890768,-0.99849146604538,-0.0605181753635406,0.0956659987568855,-0.993572115898132\n             ,-0.228578105568886,0.0637626796960831,-0.971435189247131,-0.208209201693535,-0.0487155094742775,-0.976870357990265\n             ,-0.219784289598465,0.21984101831913,-0.950455009937286,0.0261680763214827,0.194867521524429,-0.980480432510376\n             ,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.228578105568886,0.0637626796960831,-0.971435189247131\n             ,0.167321741580963,0.36504065990448,0.915832281112671,0.198797062039375,0.642942130565643,0.739665627479553,-0.103646658360958\n             ,0.632546961307526,0.767555713653564,-0.169371664524078,0.433557659387589,0.88506555557251,-0.0510855726897717\n             ,0.371638625860214,-0.926970899105072,-0.163042917847633,0.482063621282578,-0.86083197593689,-0.181298598647118\n             ,0.412835657596588,-0.892579138278961,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0743019878864288\n             ,-0.318207800388336,-0.945104777812958,-0.0104440562427044,-0.319070518016815,-0.947673439979553,-0.0222764182835817\n             ,-0.332656174898148,-0.942785024642944,-0.0440147742629051,-0.354229003190994,-0.934122323989868,0.378357648849487\n             ,0.724991083145142,0.575528800487518,0.250419557094574,0.807709574699402,0.533755779266357,0.380377441644669\n             ,0.814519464969635,0.438030809164047,0.381191462278366,0.807218015193939,0.450657457113266,-0.208209201693535\n             ,-0.0487155094742775,-0.976870357990265,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.044108722358942\n             ,-0.104566030204296,-0.993539333343506,-0.0545569509267807,0.00619251187890768,-0.99849146604538,0.025994973257184\n             ,0.100541830062866,0.99459320306778,0.0116106020286679,0.109513640403748,0.993917465209961,-0.0463824793696404\n             ,-0.00737064564600587,0.998896598815918,0.0350599996745586,0.0215551313012838,0.999152719974518,0.922331035137177\n             ,0.0571805983781815,0.382146298885345,0.88209742307663,0.116333372890949,0.456476300954819,0.999219238758087\n             ,-0.0126819871366024,0.0374175347387791,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.922331035137177\n             ,0.0571805983781815,0.382146298885345,0.964077115058899,-0.108696304261684,0.242364108562469,0.789331138134003\n             ,-0.10905522108078,0.604204714298248,0.740497648715973,0.0785514339804649,0.6674525141716,0.88209742307663,0.116333372890949\n             ,0.456476300954819,0.922331035137177,0.0571805983781815,0.382146298885345,0.740497648715973,0.0785514339804649\n             ,0.6674525141716,0.669797122478485,0.132066950201988,0.730705201625824,0.380377441644669,0.814519464969635,0.438030809164047\n             ,0.349903911352158,0.592323482036591,0.725754916667938,0.645817458629608,0.37744864821434,0.66366583108902,0.659283638000488\n             ,0.56208461523056,0.499405652284622,0.349903911352158,0.592323482036591,0.725754916667938,0.345328092575073,0.282600909471512\n             ,0.894921898841858,0.634893178939819,0.130881890654564,0.761433184146881,0.645817458629608,0.37744864821434,0.66366583108902\n             ,0.307623445987701,0.872403740882874,0.379841536283493,0.296454012393951,0.853960573673248,0.42762878537178,0.273056983947754\n             ,0.564899086952209,0.778671264648438,0.31501841545105,0.615055680274963,0.722820818424225,0.200062945485115,0.83070033788681\n             ,0.519530355930328,0.248548656702042,0.411066323518753,0.877067863941193,0.273056983947754,0.564899086952209\n             ,0.778671264648438,0.296454012393951,0.853960573673248,0.42762878537178,0.248548656702042,0.411066323518753,0.877067863941193\n             ,0.374015629291534,0.57144570350647,0.730453372001648,0.299544423818588,0.682939231395721,0.666233539581299,0.273056983947754\n             ,0.564899086952209,0.778671264648438,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.163042917847633\n             ,0.482063621282578,-0.86083197593689,0.148073747754097,0.745845675468445,-0.649452328681946,0.0132267400622368\n             ,0.464425086975098,-0.885513663291931,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.0863703861832619\n             ,-0.238449081778526,-0.967306673526764,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.044108722358942\n             ,-0.104566030204296,-0.993539333343506,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.0440147742629051\n             ,-0.354229003190994,-0.934122323989868,-0.0222764182835817,-0.332656174898148,-0.942785024642944,-0.0333343744277954\n             ,-0.188492000102997,-0.981508851051331,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.109398990869522\n             ,-0.127084732055664,-0.985840439796448,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.228578105568886\n             ,0.0637626796960831,-0.971435189247131,-0.219784289598465,0.21984101831913,-0.950455009937286,-0.228578105568886\n             ,0.0637626796960831,-0.971435189247131,-0.0605181753635406,0.0956659987568855,-0.993572115898132,-0.0573794208467007\n             ,0.242892846465111,-0.968354642391205,0.200062945485115,0.83070033788681,0.519530355930328,-0.0114694014191628\n             ,0.852027952671051,0.523370683193207,-0.22732575237751,0.908823013305664,0.349805355072021,0.0103344274684787\n             ,0.766447365283966,0.642223954200745,0.374015629291534,0.57144570350647,0.730453372001648,0.248548656702042,0.411066323518753\n             ,0.877067863941193,0.0103344274684787,0.766447365283966,0.642223954200745,0.120974369347095,0.820596933364868\n             ,0.558556973934174,-0.0114694014191628,0.852027952671051,0.523370683193207,-0.123493202030659,0.566911935806274\n             ,0.814469277858734,-0.154036402702332,0.732537567615509,0.663069784641266,-0.22732575237751,0.908823013305664\n             ,0.349805355072021,0.274746268987656,0.549388289451599,0.789105176925659,-0.0824126973748207,0.271421998739243\n             ,0.958925545215607,-0.14302770793438,0.47186079621315,0.869994521141052,0.0985177978873253,0.656356811523438\n             ,0.747990608215332,0.0201202612370253,0.491976112127304,0.870376169681549,-0.14302770793438,0.47186079621315\n             ,0.869994521141052,-0.0824126973748207,0.271421998739243,0.958925545215607,-0.0346120446920395,0.37646210193634\n             ,0.9257852435112,-0.0509213022887707,0.887329638004303,0.458315491676331,-0.0329985395073891,0.983319759368896\n             ,0.178866878151894,-0.0476368367671967,0.9897421002388,0.134689643979073,-0.22561714053154,0.930931448936462\n             ,0.287164628505707,-0.0476368367671967,0.9897421002388,0.134689643979073,0.4521364569664,0.881967127323151,0.133066028356552\n             ,0.120974369347095,0.820596933364868,0.558556973934174,-0.22561714053154,0.930931448936462,0.287164628505707\n             ,0.120974369347095,0.820596933364868,0.558556973934174,0.0103344274684787,0.766447365283966,0.642223954200745\n             ,-0.22732575237751,0.908823013305664,0.349805355072021,-0.22561714053154,0.930931448936462,0.287164628505707\n             ,-0.154036402702332,0.732537567615509,0.663069784641266,-0.0509213022887707,0.887329638004303,0.458315491676331\n             ,-0.22561714053154,0.930931448936462,0.287164628505707,-0.22732575237751,0.908823013305664,0.349805355072021\n             ,0.834282159805298,-0.0577300190925598,0.548307001590729,0.659731268882751,0.252948880195618,0.70765209197998\n             ,0.645817458629608,0.37744864821434,0.66366583108902,0.634893178939819,0.130881890654564,0.761433184146881,0.954777777194977\n             ,-0.0263348873704672,0.296151697635651,0.967678904533386,-0.0477387942373753,0.247625812888145,0.890053927898407\n             ,-0.0586380586028099,0.452068090438843,0.888165593147278,-0.00891786906868219,0.459437042474747,0.0350599996745586\n             ,0.0215551313012838,0.999152719974518,-0.0463824793696404,-0.00737064564600587,0.998896598815918,-0.152715757489204\n             ,0.0582166723906994,0.986553966999054,0.0415807291865349,0.144025474786758,0.988700032234192,0.295928508043289\n             ,-0.207367569208145,0.932429611682892,0.307560920715332,-0.091851145029068,0.947084844112396,0.534165501594543\n             ,-0.113752603530884,0.837691783905029,0.550590097904205,-0.295528441667557,0.780713438987732,-0.0463824793696404\n             ,-0.00737064564600587,0.998896598815918,0.171966776251793,-0.0650009214878082,0.982955873012543,0.135682836174965\n             ,-0.100586615502834,0.985633075237274,-0.152715757489204,0.0582166723906994,0.986553966999054,0.0415807291865349\n             ,0.144025474786758,0.988700032234192,-0.152715757489204,0.0582166723906994,0.986553966999054,-0.169371664524078\n             ,0.433557659387589,0.88506555557251,0.051253791898489,0.460094302892685,0.886389493942261,-0.152715757489204\n             ,0.0582166723906994,0.986553966999054,0.135682836174965,-0.100586615502834,0.985633075237274,0.167321741580963\n             ,0.36504065990448,0.915832281112671,-0.169371664524078,0.433557659387589,0.88506555557251,0.307560920715332,-0.091851145029068\n             ,0.947084844112396,0.295928508043289,-0.207367569208145,0.932429611682892,0.135682836174965,-0.100586615502834\n             ,0.985633075237274,0.171966776251793,-0.0650009214878082,0.982955873012543,0.834282159805298,-0.0577300190925598\n             ,0.548307001590729,0.774369955062866,-0.461647033691406,0.432704478502274,0.801247537136078,-0.596114218235016\n             ,0.0514810234308243,0.858235716819763,-0.482136696577072,0.175999104976654,0.964077115058899,-0.108696304261684\n             ,0.242364108562469,0.967678904533386,-0.0477387942373753,0.247625812888145,0.831483364105225,0.0368483774363995\n             ,0.554326236248016,0.789331138134003,-0.10905522108078,0.604204714298248,0.0116106020286679,0.109513640403748\n             ,0.993917465209961,0.169032081961632,0.119583055377007,0.978329241275787,0.171966776251793,-0.0650009214878082\n             ,0.982955873012543,-0.0463824793696404,-0.00737064564600587,0.998896598815918,0.888511061668396,-0.437404543161392\n             ,0.138655453920364,0.727367699146271,-0.668511748313904,0.15501070022583,0.858235716819763,-0.482136696577072\n             ,0.175999104976654,0.801247537136078,-0.596114218235016,0.0514810234308243,0.135682836174965,-0.100586615502834\n             ,0.985633075237274,0.295928508043289,-0.207367569208145,0.932429611682892,0.345328092575073,0.282600909471512\n             ,0.894921898841858,0.167321741580963,0.36504065990448,0.915832281112671,0.801247537136078,-0.596114218235016\n             ,0.0514810234308243,0.774369955062866,-0.461647033691406,0.432704478502274,0.859270870685577,-0.205668747425079\n             ,0.468352407217026,0.888511061668396,-0.437404543161392,0.138655453920364,0.486142605543137,0.105355285108089\n             ,0.867505431175232,0.2811399102211,0.126565098762512,0.951284229755402,0.19136768579483,-0.0293898787349463,0.981078326702118\n             ,0.436154782772064,-0.0844674557447433,0.895898580551147,0.486142605543137,0.105355285108089,0.867505431175232\n             ,0.436154782772064,-0.0844674557447433,0.895898580551147,0.789331138134003,-0.10905522108078,0.604204714298248\n             ,0.831483364105225,0.0368483774363995,0.554326236248016,-0.123493202030659,0.566911935806274,0.814469277858734\n             ,0.306847393512726,0.504767894744873,0.806879222393036,0.0985177978873253,0.656356811523438,0.747990608215332\n             ,-0.14302770793438,0.47186079621315,0.869994521141052,0.0201202612370253,0.491976112127304,0.870376169681549\n             ,0.0895038321614265,0.749099910259247,0.65638279914856,-0.0509213022887707,0.887329638004303,0.458315491676331\n             ,-0.154036402702332,0.732537567615509,0.663069784641266,-0.14302770793438,0.47186079621315,0.869994521141052\n             ,0.0201202612370253,0.491976112127304,0.870376169681549,-0.154036402702332,0.732537567615509,0.663069784641266\n             ,-0.123493202030659,0.566911935806274,0.814469277858734,0.105207018554211,0.966200411319733,0.235347032546997\n             ,-0.0329985395073891,0.983319759368896,0.178866878151894,-0.0509213022887707,0.887329638004303,0.458315491676331\n             ,0.0895038321614265,0.749099910259247,0.65638279914856,0.88209742307663,0.116333372890949,0.456476300954819,0.889242053031921\n             ,-0.13137923181057,0.438164442777634,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.999219238758087\n             ,-0.0126819871366024,0.0374175347387791,0.380377441644669,0.814519464969635,0.438030809164047,0.250419557094574\n             ,0.807709574699402,0.533755779266357,0.198797062039375,0.642942130565643,0.739665627479553,0.349903911352158\n             ,0.592323482036591,0.725754916667938,0.00678820535540581,0.00935708172619343,0.999933183193207,0.00949578825384378\n             ,0.0594539344310761,0.998185873031616,-0.0938338041305542,0.0678655132651329,0.993272125720978,0.0177117679268122\n             ,0.0767069831490517,0.996896326541901,0.291106730699539,0.735121071338654,0.612253129482269,0.412932306528091\n             ,0.0920658186078072,0.906096458435059,0.206305459141731,0.0686478838324547,0.976076602935791,0.233477383852005\n             ,0.295218259096146,0.926463425159454,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.316321402788162\n             ,0.603275775909424,-0.732119560241699,0.508885145187378,0.79451996088028,-0.331321537494659,0.0145869944244623\n             ,0.988409578800201,-0.151108130812645,-0.0743019878864288,-0.318207800388336,-0.945104777812958,-0.0340137556195259\n             ,-0.196621879935265,-0.979889214038849,-0.0104440562427044,-0.319070518016815,-0.947673439979553,0.436154782772064\n             ,-0.0844674557447433,0.895898580551147,0.19136768579483,-0.0293898787349463,0.981078326702118,0.213752746582031\n             ,0.00495887640863657,0.976875185966492,0.443167895078659,0.0182685311883688,0.896252453327179,-0.0851698592305183\n             ,-0.236632868647575,-0.967858970165253,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.208209201693535\n             ,-0.0487155094742775,-0.976870357990265,-0.109398990869522,-0.127084732055664,-0.985840439796448,0.381191462278366\n             ,0.807218015193939,0.450657457113266,0.380377441644669,0.814519464969635,0.438030809164047,0.659283638000488\n             ,0.56208461523056,0.499405652284622,0.274746268987656,0.549388289451599,0.789105176925659,-0.0161609761416912\n             ,0.992576837539673,-0.120540797710419,0.0145869944244623,0.988409578800201,-0.151108130812645,-0.0476368367671967\n             ,0.9897421002388,0.134689643979073,-0.0329985395073891,0.983319759368896,0.178866878151894,0.4521364569664,0.881967127323151\n             ,0.133066028356552,0.600959360599518,0.790454268455505,0.118447989225388,0.374015629291534,0.57144570350647,0.730453372001648\n             ,0.120974369347095,0.820596933364868,0.558556973934174,0.367568165063858,0.757281005382538,-0.539832472801209\n             ,0.613006412982941,0.632095158100128,-0.474003076553345,0.316321402788162,0.603275775909424,-0.732119560241699\n             ,0.237173900008202,0.452350407838821,-0.85972535610199,0.508885145187378,0.79451996088028,-0.331321537494659\n             ,0.4521364569664,0.881967127323151,0.133066028356552,-0.0476368367671967,0.9897421002388,0.134689643979073,0.0145869944244623\n             ,0.988409578800201,-0.151108130812645,0.600959360599518,0.790454268455505,0.118447989225388,0.438032209873199\n             ,0.893748044967651,0.0966554135084152,0.299544423818588,0.682939231395721,0.666233539581299,0.374015629291534\n             ,0.57144570350647,0.730453372001648,0.859270870685577,-0.205668747425079,0.468352407217026,0.774369955062866\n             ,-0.461647033691406,0.432704478502274,0.550590097904205,-0.295528441667557,0.780713438987732,0.534165501594543\n             ,-0.113752603530884,0.837691783905029,0.550590097904205,-0.295528441667557,0.780713438987732,0.634893178939819\n             ,0.130881890654564,0.761433184146881,0.345328092575073,0.282600909471512,0.894921898841858,0.295928508043289\n             ,-0.207367569208145,0.932429611682892,0.774369955062866,-0.461647033691406,0.432704478502274,0.834282159805298\n             ,-0.0577300190925598,0.548307001590729,0.634893178939819,0.130881890654564,0.761433184146881,0.550590097904205\n             ,-0.295528441667557,0.780713438987732,0.0704744011163712,0.82375580072403,-0.562547504901886,0.0859579145908356\n             ,0.475804299116135,-0.875340759754181,0.0293854102492332,0.448770761489868,-0.893163621425629,-0.0235754959285259\n             ,0.833040595054626,-0.552709341049194,0.0261680763214827,0.194867521524429,-0.980480432510376,-0.219784289598465\n             ,0.21984101831913,-0.950455009937286,-0.181298598647118,0.412835657596588,-0.892579138278961,0.0132267400622368\n             ,0.464425086975098,-0.885513663291931,0.181251630187035,0.380190223455429,-0.906974792480469,0.0261680763214827\n             ,0.194867521524429,-0.980480432510376,0.0132267400622368,0.464425086975098,-0.885513663291931,0.237173900008202\n             ,0.452350407838821,-0.85972535610199,0.85130912065506,-0.28415909409523,-0.441051483154297,0.797747611999512\n             ,-0.370718449354172,-0.475569725036621,0.631867706775665,-0.394274353981018,-0.66730123758316,0.544504523277283\n             ,-0.49831086397171,-0.674685955047607,0.797747611999512,-0.370718449354172,-0.475569725036621,0.85130912065506\n             ,-0.28415909409523,-0.441051483154297,0.934587121009827,-0.0746875330805779,0.347805470228195,0.957330107688904\n             ,-0.260764896869659,0.124582171440125,0.720091462135315,-0.402850449085236,-0.56496000289917,0.898464798927307\n             ,-0.377257645130157,-0.224583357572556,0.778241097927094,-0.324259251356125,-0.53777015209198,0.599293649196625\n             ,-0.39963087439537,-0.693644165992737,0.508885145187378,0.79451996088028,-0.331321537494659,0.613006412982941\n             ,0.632095158100128,-0.474003076553345,0.600959360599518,0.790454268455505,0.118447989225388,0.4521364569664,0.881967127323151\n             ,0.133066028356552,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.219784289598465,0.21984101831913\n             ,-0.950455009937286,-0.0573794208467007,0.242892846465111,-0.968354642391205,-0.051368486136198,0.366652280092239\n             ,-0.928938865661621,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.109398990869522,-0.127084732055664\n             ,-0.985840439796448,0.111387610435486,-0.211319342255592,-0.9710493683815,0.223528057336807,-0.361992210149765\n             ,-0.904984474182129,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.415907889604568,-0.581008851528168\n             ,-0.699606537818909,0.394706159830093,-0.349102348089218,-0.84990268945694,-0.00605733366683126,-0.0303982496261597\n             ,-0.999519467353821,0.427927106618881,-0.320324927568436,-0.845145165920258,0.339142799377441,0.423890322446823\n             ,-0.839820921421051,0.205058068037033,-0.244612783193588,-0.947689712047577,-0.000479655718663707,-0.389120310544968\n             ,-0.921186804771423,-0.0440147742629051,-0.354229003190994,-0.934122323989868,-0.0863703861832619,-0.238449081778526\n             ,-0.967306673526764,-0.03669124096632,-0.316752940416336,-0.947798132896423,-0.0440147742629051,-0.354229003190994\n             ,-0.934122323989868,-0.000479655718663707,-0.389120310544968,-0.921186804771423,0.0686725899577141,-0.344746232032776\n             ,-0.936180591583252,-0.0743019878864288,-0.318207800388336,-0.945104777812958,0.079964205622673,0.0645997598767281\n             ,-0.994702279567719,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.394706159830093,-0.349102348089218\n             ,-0.84990268945694,0.111387610435486,-0.211319342255592,-0.9710493683815,0.111387610435486,-0.211319342255592\n             ,-0.9710493683815,0.394706159830093,-0.349102348089218,-0.84990268945694,0.544504523277283,-0.49831086397171\n             ,-0.674685955047607,0.223528057336807,-0.361992210149765,-0.904984474182129,0.641741633415222,-0.441758394241333\n             ,-0.626910865306854,0.340316504240036,-0.448403626680374,-0.826510012149811,0.316583722829819,-0.383378833532333\n             ,-0.867637872695923,0.631867706775665,-0.394274353981018,-0.66730123758316,0.641741633415222,-0.441758394241333\n             ,-0.626910865306854,0.599293649196625,-0.39963087439537,-0.693644165992737,0.365317970514297,-0.409484475851059\n             ,-0.835981607437134,0.340316504240036,-0.448403626680374,-0.826510012149811,0.631867706775665,-0.394274353981018\n             ,-0.66730123758316,0.316583722829819,-0.383378833532333,-0.867637872695923,0.223528057336807,-0.361992210149765\n             ,-0.904984474182129,0.544504523277283,-0.49831086397171,-0.674685955047607,-0.0851698592305183,-0.236632868647575\n             ,-0.967858970165253,0.223528057336807,-0.361992210149765,-0.904984474182129,0.316583722829819,-0.383378833532333\n             ,-0.867637872695923,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.19136768579483,-0.0293898787349463\n             ,0.981078326702118,0.169032081961632,0.119583055377007,0.978329241275787,0.0116106020286679,0.109513640403748\n             ,0.993917465209961,-0.0284342020750046,0.0239462200552225,0.999308824539185,-0.0938338041305542,0.0678655132651329\n             ,0.993272125720978,0.206305459141731,0.0686478838324547,0.976076602935791,0.213752746582031,0.00495887640863657\n             ,0.976875185966492,-0.0935027524828911,0.0115412008017302,0.995552122592926,0.233477383852005,0.295218259096146\n             ,0.926463425159454,0.206305459141731,0.0686478838324547,0.976076602935791,-0.0938338041305542,0.0678655132651329\n             ,0.993272125720978,0.00949578825384378,0.0594539344310761,0.998185873031616,0.0116670094430447,0.00425092596560717\n             ,0.999922931194305,-0.0935027524828911,0.0115412008017302,0.995552122592926,-0.0284342020750046,0.0239462200552225\n             ,0.999308824539185,0.0105779552832246,0.0432977452874184,0.99900621175766,-0.0935027524828911,0.0115412008017302\n             ,0.995552122592926,0.213752746582031,0.00495887640863657,0.976875185966492,0.19136768579483,-0.0293898787349463\n             ,0.981078326702118,-0.0284342020750046,0.0239462200552225,0.999308824539185,0.890053927898407,-0.0586380586028099\n             ,0.452068090438843,0.929404556751251,-0.130073204636574,0.345381230115891,0.957330107688904,-0.260764896869659\n             ,0.124582171440125,0.934587121009827,-0.0746875330805779,0.347805470228195,0.534165501594543,-0.113752603530884\n             ,0.837691783905029,0.486142605543137,0.105355285108089,0.867505431175232,0.831483364105225,0.0368483774363995\n             ,0.554326236248016,0.859270870685577,-0.205668747425079,0.468352407217026,0.486142605543137,0.105355285108089\n             ,0.867505431175232,0.534165501594543,-0.113752603530884,0.837691783905029,0.307560920715332,-0.091851145029068\n             ,0.947084844112396,0.2811399102211,0.126565098762512,0.951284229755402,0.169032081961632,0.119583055377007,0.978329241275787\n             ,0.2811399102211,0.126565098762512,0.951284229755402,0.307560920715332,-0.091851145029068,0.947084844112396,0.171966776251793\n             ,-0.0650009214878082,0.982955873012543,0.954777777194977,-0.0263348873704672,0.296151697635651,0.859270870685577\n             ,-0.205668747425079,0.468352407217026,0.831483364105225,0.0368483774363995,0.554326236248016,0.967678904533386\n             ,-0.0477387942373753,0.247625812888145,0.926999032497406,-0.273295104503632,0.256870836019516,0.799426317214966\n             ,-0.355103880167007,0.484581023454666,0.888165593147278,-0.00891786906868219,0.459437042474747,0.934587121009827\n             ,-0.0746875330805779,0.347805470228195,0.929404556751251,-0.130073204636574,0.345381230115891,0.964883267879486\n             ,-0.257389277219772,0.0524501986801624,0.898464798927307,-0.377257645130157,-0.224583357572556,0.957330107688904\n             ,-0.260764896869659,0.124582171440125,0.964883267879486,-0.257389277219772,0.0524501986801624,0.963335692882538\n             ,-0.129456236958504,-0.235001027584076,0.778241097927094,-0.324259251356125,-0.53777015209198,0.898464798927307\n             ,-0.377257645130157,-0.224583357572556,0.890053927898407,-0.0586380586028099,0.452068090438843,0.967678904533386\n             ,-0.0477387942373753,0.247625812888145,0.964077115058899,-0.108696304261684,0.242364108562469,0.929404556751251\n             ,-0.130073204636574,0.345381230115891,0.789399027824402,-0.501962423324585,0.353387653827667,0.954777777194977\n             ,-0.0263348873704672,0.296151697635651,0.888165593147278,-0.00891786906868219,0.459437042474747,0.799426317214966\n             ,-0.355103880167007,0.484581023454666,0.929404556751251,-0.130073204636574,0.345381230115891,0.964077115058899\n             ,-0.108696304261684,0.242364108562469,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.964883267879486\n             ,-0.257389277219772,0.0524501986801624,-0.10020349919796,0.182739198207855,0.978041768074036,-0.0824126973748207\n             ,0.271421998739243,0.958925545215607,0.274746268987656,0.549388289451599,0.789105176925659,0.183646157383919\n             ,0.213717266917229,0.959478497505188,0.183646157383919,0.213717266917229,0.959478497505188,0.274746268987656\n             ,0.549388289451599,0.789105176925659,0.659283638000488,0.56208461523056,0.499405652284622,0.659731268882751,0.252948880195618\n             ,0.70765209197998,0.891434013843536,0.447212874889374,-0.0731168016791344,0.98511666059494,-0.171194240450859\n             ,-0.0154188685119152,0.889242053031921,-0.13137923181057,0.438164442777634,0.648516714572906,0.651950538158417\n             ,0.392920613288879,0.299544423818588,0.682939231395721,0.666233539581299,0.325509399175644,0.684422254562378\n             ,0.652387738227844,0.31501841545105,0.615055680274963,0.722820818424225,0.273056983947754,0.564899086952209,0.778671264648438\n             ,0.438032209873199,0.893748044967651,0.0966554135084152,0.384984284639359,0.917665719985962,0.0983701795339584\n             ,0.325509399175644,0.684422254562378,0.652387738227844,0.299544423818588,0.682939231395721,0.666233539581299\n             ,0.367568165063858,0.757281005382538,-0.539832472801209,0.148073747754097,0.745845675468445,-0.649452328681946\n             ,0.384984284639359,0.917665719985962,0.0983701795339584,0.438032209873199,0.893748044967651,0.0966554135084152\n             ,0.0682389214634895,0.656387150287628,0.751331746578217,0.0630034655332565,0.605371952056885,0.793445229530334\n             ,-0.103646658360958,0.632546961307526,0.767555713653564,0.0415897369384766,0.750063896179199,0.660056412220001\n             ,-0.103646658360958,0.632546961307526,0.767555713653564,0.198797062039375,0.642942130565643,0.739665627479553\n             ,0.250419557094574,0.807709574699402,0.533755779266357,0.0415897369384766,0.750063896179199,0.660056412220001\n             ,-0.0329985395073891,0.983319759368896,0.178866878151894,0.105207018554211,0.966200411319733,0.235347032546997\n             ,0.0476450361311436,0.994988679885864,-0.0879064798355103,-0.0161609761416912,0.992576837539673,-0.120540797710419\n             ,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.0161609761416912,0.992576837539673,-0.120540797710419\n             ,0.0476450361311436,0.994988679885864,-0.0879064798355103,-0.00971746817231178,0.864930868148804,-0.501796960830688\n             ,-0.335044384002686,0.0369866825640202,-0.941476106643677,-0.00605733366683126,-0.0303982496261597,-0.999519467353821\n             ,0.0385239869356155,0.185332536697388,-0.981920421123505,-0.187019199132919,0.292121440172195,-0.937917292118073\n             ,0.0385239869356155,0.185332536697388,-0.981920421123505,0.0810841843485832,0.166241332888603,-0.982745766639709\n             ,0.0293854102492332,0.448770761489868,-0.893163621425629,0.0859579145908356,0.475804299116135,-0.875340759754181\n             ,0.500678837299347,-0.355485200881958,-0.789272427558899,0.587996542453766,-0.370855212211609,-0.718836843967438\n             ,0.550657391548157,0.552472710609436,-0.625739872455597,0.454949915409088,0.569741904735565,-0.6844083070755\n             ,-7.2909109860575e-009,0.660060167312622,0.751212775707245,0.042865764349699,0.703626394271851,0.709275960922241\n             ,0.00949578825384378,0.0594539344310761,0.998185873031616,0.00678820535540581,0.00935708172619343,0.999933183193207\n             ,0.042865764349699,0.703626394271851,0.709275960922241,0.404132395982742,0.670274078845978,0.622422397136688\n             ,0.233477383852005,0.295218259096146,0.926463425159454,0.00949578825384378,0.0594539344310761,0.998185873031616\n             ,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.00971746817231178,0.864930868148804,-0.501796960830688\n             ,-0.0591709204018116,0.578005433082581,-0.813884854316711,0.0859579145908356,0.475804299116135,-0.875340759754181\n             ,0.0859579145908356,0.475804299116135,-0.875340759754181,-0.0591709204018116,0.578005433082581,-0.813884854316711\n             ,-0.187019199132919,0.292121440172195,-0.937917292118073,0.0385239869356155,0.185332536697388,-0.981920421123505\n             ,0.85130912065506,-0.28415909409523,-0.441051483154297,0.751560986042023,-0.51889967918396,-0.407307237386703\n             ,0.926999032497406,-0.273295104503632,0.256870836019516,0.934587121009827,-0.0746875330805779,0.347805470228195\n             ,0.98869800567627,0.0949656590819359,0.116007700562477,0.997147977352142,0.063211515545845,-0.0412334688007832\n             ,0.81435614824295,-0.302029103040695,-0.495582967996597,0.95084285736084,-0.116525217890739,-0.286914199590683\n             ,0.95027631521225,0.169706359505653,0.261102795600891,0.997147977352142,0.063211515545845,-0.0412334688007832\n             ,0.961808860301971,0.241085827350616,0.129620164632797,0.88108503818512,0.403870642185211,0.246125221252441,0.932883560657501\n             ,0.00894892401993275,-0.36006686091423,0.88943737745285,-0.310296326875687,-0.335585117340088,0.933888673782349\n             ,-0.271616876125336,-0.232542887330055,0.97384238243103,-0.111237548291683,-0.198134258389473,0.958027005195618\n             ,0.285412758588791,-0.0269038528203964,0.930458664894104,-0.278987765312195,0.237513080239296,0.932736575603485\n             ,0.169303506612778,0.31833752989769,0.883106589317322,0.432061642408371,0.182881161570549,0.659731268882751,0.252948880195618\n             ,0.70765209197998,0.853261947631836,-0.0267263799905777,0.520797252655029,0.547626852989197,-0.143319010734558\n             ,0.824356973171234,0.183646157383919,0.213717266917229,0.959478497505188,0.434262931346893,0.0580337457358837\n             ,0.898914754390717,0.636708438396454,0.429240256547928,0.640589714050293,0.4572993516922,0.58682519197464,0.668216645717621\n             ,0.291518121957779,0.153290659189224,0.944202899932861,0.547626852989197,-0.143319010734558,0.824356973171234\n             ,0.629741132259369,-0.543165504932404,0.555335402488709,0.369285374879837,-0.387989014387131,0.844448208808899\n             ,0.344554513692856,-0.157719656825066,0.925422430038452,0.751155555248261,0.608797609806061,0.255207538604736\n             ,0.573260188102722,0.776374936103821,0.261944144964218,0.4572993516922,0.58682519197464,0.668216645717621,0.636708438396454\n             ,0.429240256547928,0.640589714050293,0.930458664894104,-0.278987765312195,0.237513080239296,0.958027005195618\n             ,0.285412758588791,-0.0269038528203964,0.983769476413727,0.170430228114128,-0.0561354644596577,0.97384238243103\n             ,-0.111237548291683,-0.198134258389473,0.88108503818512,0.403870642185211,0.246125221252441,0.883106589317322\n             ,0.432061642408371,0.182881161570549,0.932736575603485,0.169303506612778,0.31833752989769,0.95027631521225,0.169706359505653\n             ,0.261102795600891,0.415907889604568,-0.581008851528168,-0.699606537818909,0.81435614824295,-0.302029103040695\n             ,-0.495582967996597,0.997147977352142,0.063211515545845,-0.0412334688007832,0.751560986042023,-0.51889967918396\n             ,-0.407307237386703,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.523119628429413,-0.252469837665558\n             ,-0.814005434513092,0.81435614824295,-0.302029103040695,-0.495582967996597,0.415907889604568,-0.581008851528168\n             ,-0.699606537818909,-0.362747877836227,-0.08218814432621,-0.928255915641785,0.315108418464661,-0.203955173492432\n             ,-0.926881313323975,0.523119628429413,-0.252469837665558,-0.814005434513092,-0.0618164576590061,-0.231827840209007\n             ,-0.970790684223175,0.799426317214966,-0.355103880167007,0.484581023454666,0.926999032497406,-0.273295104503632\n             ,0.256870836019516,0.95027631521225,0.169706359505653,0.261102795600891,0.932736575603485,0.169303506612778,0.31833752989769\n             ,0.878222644329071,-0.435990631580353,0.196563258767128,0.853261947631836,-0.0267263799905777,0.520797252655029\n             ,0.993755042552948,-0.10124122351408,0.0469168499112129,0.88943737745285,-0.310296326875687,-0.335585117340088\n             ,0.369285374879837,-0.387989014387131,0.844448208808899,0.434262931346893,0.0580337457358837,0.898914754390717\n             ,0.291518121957779,0.153290659189224,0.944202899932861,0.344554513692856,-0.157719656825066,0.925422430038452\n             ,0.183646157383919,0.213717266917229,0.959478497505188,0.547626852989197,-0.143319010734558,0.824356973171234\n             ,0.344554513692856,-0.157719656825066,0.925422430038452,-0.10020349919796,0.182739198207855,0.978041768074036\n             ,0.763394236564636,0.627238869667053,-0.154274553060532,0.51531445980072,0.84699958562851,-0.130547553300858\n             ,0.573260188102722,0.776374936103821,0.261944144964218,0.751155555248261,0.608797609806061,0.255207538604736\n             ,0.631870806217194,0.478121697902679,-0.61003190279007,0.352353453636169,0.709057629108429,-0.610806286334991\n             ,0.51531445980072,0.84699958562851,-0.130547553300858,0.763394236564636,0.627238869667053,-0.154274553060532\n             ,-0.335044384002686,0.0369866825640202,-0.941476106643677,0.206161767244339,-0.0580398291349411,-0.976795136928558\n             ,0.315108418464661,-0.203955173492432,-0.926881313323975,-0.362747877836227,-0.08218814432621,-0.928255915641785\n             ,-0.187019199132919,0.292121440172195,-0.937917292118073,0.198803246021271,0.240951344370842,-0.949957728385925\n             ,0.206161767244339,-0.0580398291349411,-0.976795136928558,-0.335044384002686,0.0369866825640202,-0.941476106643677\n             ,0.493055760860443,0.288357526063919,-0.820820271968842,0.235302045941353,0.454530268907547,-0.859089732170105\n             ,0.352353453636169,0.709057629108429,-0.610806286334991,0.631870806217194,0.478121697902679,-0.61003190279007\n             ,0.491784423589706,0.100257873535156,-0.864925682544708,0.198803246021271,0.240951344370842,-0.949957728385925\n             ,0.235302045941353,0.454530268907547,-0.859089732170105,0.493055760860443,0.288357526063919,-0.820820271968842\n             ,0.629741132259369,-0.543165504932404,0.555335402488709,0.547626852989197,-0.143319010734558,0.824356973171234\n             ,0.853261947631836,-0.0267263799905777,0.520797252655029,0.878222644329071,-0.435990631580353,0.196563258767128\n             ,0.0895038321614265,0.749099910259247,0.65638279914856,-0.0346120446920395,0.37646210193634,0.9257852435112,0.291518121957779\n             ,0.153290659189224,0.944202899932861,0.4572993516922,0.58682519197464,0.668216645717621,0.0895038321614265,0.749099910259247\n             ,0.65638279914856,0.4572993516922,0.58682519197464,0.668216645717621,0.573260188102722,0.776374936103821,0.261944144964218\n             ,0.105207018554211,0.966200411319733,0.235347032546997,0.344554513692856,-0.157719656825066,0.925422430038452\n             ,0.291518121957779,0.153290659189224,0.944202899932861,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.10020349919796\n             ,0.182739198207855,0.978041768074036,0.105207018554211,0.966200411319733,0.235347032546997,0.573260188102722\n             ,0.776374936103821,0.261944144964218,0.51531445980072,0.84699958562851,-0.130547553300858,0.0476450361311436\n             ,0.994988679885864,-0.0879064798355103,0.0476450361311436,0.994988679885864,-0.0879064798355103,0.51531445980072\n             ,0.84699958562851,-0.130547553300858,0.352353453636169,0.709057629108429,-0.610806286334991,-0.00971746817231178\n             ,0.864930868148804,-0.501796960830688,0.594084918498993,-0.202006503939629,-0.778624713420868,0.206161767244339\n             ,-0.0580398291349411,-0.976795136928558,0.198803246021271,0.240951344370842,-0.949957728385925,0.491784423589706\n             ,0.100257873535156,-0.864925682544708,-0.00971746817231178,0.864930868148804,-0.501796960830688,0.352353453636169\n             ,0.709057629108429,-0.610806286334991,0.235302045941353,0.454530268907547,-0.859089732170105,-0.0591709204018116\n             ,0.578005433082581,-0.813884854316711,-0.0591709204018116,0.578005433082581,-0.813884854316711,0.235302045941353\n             ,0.454530268907547,-0.859089732170105,0.198803246021271,0.240951344370842,-0.949957728385925,-0.187019199132919\n             ,0.292121440172195,-0.937917292118073,0.834282159805298,-0.0577300190925598,0.548307001590729,0.993755042552948\n             ,-0.10124122351408,0.0469168499112129,0.853261947631836,-0.0267263799905777,0.520797252655029,0.659731268882751\n             ,0.252948880195618,0.70765209197998,0.834282159805298,-0.0577300190925598,0.548307001590729,0.858235716819763\n             ,-0.482136696577072,0.175999104976654,0.933888673782349,-0.271616876125336,-0.232542887330055,0.993755042552948\n             ,-0.10124122351408,0.0469168499112129,0.858235716819763,-0.482136696577072,0.175999104976654,0.727367699146271\n             ,-0.668511748313904,0.15501070022583,0.97384238243103,-0.111237548291683,-0.198134258389473,0.933888673782349\n             ,-0.271616876125336,-0.232542887330055,0.789399027824402,-0.501962423324585,0.353387653827667,0.930458664894104\n             ,-0.278987765312195,0.237513080239296,0.97384238243103,-0.111237548291683,-0.198134258389473,0.727367699146271\n             ,-0.668511748313904,0.15501070022583,0.751560986042023,-0.51889967918396,-0.407307237386703,0.997147977352142\n             ,0.063211515545845,-0.0412334688007832,0.95027631521225,0.169706359505653,0.261102795600891,0.926999032497406\n             ,-0.273295104503632,0.256870836019516,0.523119628429413,-0.252469837665558,-0.814005434513092,0.786963045597076\n             ,-0.207125172019005,-0.581195652484894,0.95084285736084,-0.116525217890739,-0.286914199590683,0.81435614824295\n             ,-0.302029103040695,-0.495582967996597,0.786963045597076,-0.207125172019005,-0.581195652484894,0.523119628429413\n             ,-0.252469837665558,-0.814005434513092,0.315108418464661,-0.203955173492432,-0.926881313323975,0.708127498626709\n             ,-0.297497063875198,-0.640352189540863,0.708127498626709,-0.297497063875198,-0.640352189540863,0.315108418464661\n             ,-0.203955173492432,-0.926881313323975,0.206161767244339,-0.0580398291349411,-0.976795136928558,0.594084918498993\n             ,-0.202006503939629,-0.778624713420868,0.901673018932343,-0.243753165006638,-0.357169687747955,0.911918580532074\n             ,-0.233281582593918,-0.33761540055275,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.891434013843536\n             ,0.447212874889374,-0.0731168016791344,0.0810841843485832,0.166241332888603,-0.982745766639709,0.0261680763214827\n             ,0.194867521524429,-0.980480432510376,0.181251630187035,0.380190223455429,-0.906974792480469,0.0293854102492332\n             ,0.448770761489868,-0.893163621425629,0.0293854102492332,0.448770761489868,-0.893163621425629,0.181251630187035\n             ,0.380190223455429,-0.906974792480469,0.316321402788162,0.603275775909424,-0.732119560241699,-0.0235754959285259\n             ,0.833040595054626,-0.552709341049194,0.0105779552832246,0.0432977452874184,0.99900621175766,-0.0284342020750046\n             ,0.0239462200552225,0.999308824539185,0.0116106020286679,0.109513640403748,0.993917465209961,0.025994973257184\n             ,0.100541830062866,0.99459320306778,0.051253791898489,0.460094302892685,0.886389493942261,-0.169371664524078\n             ,0.433557659387589,0.88506555557251,-0.103646658360958,0.632546961307526,0.767555713653564,0.0630034655332565\n             ,0.605371952056885,0.793445229530334,0.400240421295166,-0.835451424121857,-0.376601278781891,0.961808860301971\n             ,0.241085827350616,0.129620164632797,0.98869800567627,0.0949656590819359,0.116007700562477,0.21975277364254,-0.661429107189178\n             ,-0.717091500759125,0.21975277364254,-0.661429107189178,-0.717091500759125,0.98869800567627,0.0949656590819359\n             ,0.116007700562477,0.95084285736084,-0.116525217890739,-0.286914199590683,0.379243552684784,-0.345731914043427\n             ,-0.858279526233673,0.983769476413727,0.170430228114128,-0.0561354644596577,0.600287616252899,-0.73423707485199\n             ,0.317097216844559,0.900146186351776,-0.397185921669006,-0.178830027580261,0.932883560657501,0.00894892401993275\n             ,-0.36006686091423,0.883106589317322,0.432061642408371,0.182881161570549,0.971705734729767,0.10692148655653,0.21060810983181\n             ,0.998818516731262,0.0184048507362604,0.0449758432805538,0.958027005195618,0.285412758588791,-0.0269038528203964\n             ,0.0891242697834969,-0.774946451187134,0.625711500644684,-0.0231866482645273,-0.662597954273224,0.748616278171539\n             ,0.369285374879837,-0.387989014387131,0.844448208808899,0.629741132259369,-0.543165504932404,0.555335402488709\n             ,0.232206523418427,-0.020738473162055,0.972445428371429,0.369285374879837,-0.387989014387131,0.844448208808899\n             ,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.201975762844086,-0.339365005493164,0.918714940547943\n             ,0.636708438396454,0.429240256547928,0.640589714050293,0.468301683664322,0.50049239397049,0.728148937225342,0.654108226299286\n             ,0.695117294788361,0.298252135515213,0.751155555248261,0.608797609806061,0.255207538604736,0.201975762844086\n             ,-0.339365005493164,0.918714940547943,-0.0231866482645273,-0.662597954273224,0.748616278171539,-0.0981862172484398\n             ,-0.372313976287842,0.922898590564728,0.296016186475754,0.207150265574455,0.932450115680695,0.410484403371811\n             ,-0.832323789596558,0.372477740049362,0.88943737745285,-0.310296326875687,-0.335585117340088,0.900146186351776\n             ,-0.397185921669006,-0.178830027580261,0.600287616252899,-0.73423707485199,0.317097216844559,-0.75411182641983\n             ,-0.632700145244598,0.176084950566292,0.245737388730049,-0.81788432598114,0.52026754617691,0.280021280050278\n             ,-0.723065078258514,0.631478428840637,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.453907251358032\n             ,-0.0319928824901581,0.890474379062653,-0.0173206701874733,0.471247583627701,0.881830871105194,-0.0981862172484398\n             ,-0.372313976287842,0.922898590564728,-0.418209999799728,-0.452997386455536,0.787333309650421,-0.446602612733841\n             ,-0.102232590317726,-0.888872683048248,-0.80677717924118,-0.297363102436066,-0.510573983192444,0.21975277364254\n             ,-0.661429107189178,-0.717091500759125,0.379243552684784,-0.345731914043427,-0.858279526233673,-0.418209999799728\n             ,-0.452997386455536,0.787333309650421,0.600287616252899,-0.73423707485199,0.317097216844559,-0.755255520343781\n             ,-0.470546215772629,0.456262409687042,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.80677717924118\n             ,-0.297363102436066,-0.510573983192444,-0.446602612733841,-0.102232590317726,-0.888872683048248,-0.432995676994324\n             ,-0.138490244746208,-0.890693664550781,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.80677717924118\n             ,-0.297363102436066,-0.510573983192444,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.760693609714508\n             ,-0.63129860162735,-0.151021003723145,0.400240421295166,-0.835451424121857,-0.376601278781891,0.245737388730049\n             ,-0.81788432598114,0.52026754617691,-0.75411182641983,-0.632700145244598,0.176084950566292,-0.755255520343781\n             ,-0.470546215772629,0.456262409687042,0.600287616252899,-0.73423707485199,0.317097216844559,0.245737388730049\n             ,-0.81788432598114,0.52026754617691,0.600287616252899,-0.73423707485199,0.317097216844559,0.998818516731262,0.0184048507362604\n             ,0.0449758432805538,0.971705734729767,0.10692148655653,0.21060810983181,0.883106589317322,0.432061642408371,0.182881161570549\n             ,0.88108503818512,0.403870642185211,0.246125221252441,0.963078618049622,0.14069077372551,0.229533597826958,0.971705734729767\n             ,0.10692148655653,0.21060810983181,0.280021280050278,-0.723065078258514,0.631478428840637,0.245737388730049,-0.81788432598114\n             ,0.52026754617691,0.971705734729767,0.10692148655653,0.21060810983181,0.963078618049622,0.14069077372551,0.229533597826958\n             ,-0.74693363904953,-0.662334084510803,0.0583409406244755,0.280021280050278,-0.723065078258514,0.631478428840637\n             ,0.400240421295166,-0.835451424121857,-0.376601278781891,-0.760693609714508,-0.63129860162735,-0.151021003723145\n             ,0.468301683664322,0.50049239397049,0.728148937225342,0.619435131549835,0.287277430295944,0.730596840381622,0.821134924888611\n             ,0.497984498739243,0.278834909200668,0.654108226299286,0.695117294788361,0.298252135515213,0.468301683664322\n             ,0.50049239397049,0.728148937225342,0.434262931346893,0.0580337457358837,0.898914754390717,0.232206523418427\n             ,-0.020738473162055,0.972445428371429,0.619435131549835,0.287277430295944,0.730596840381622,0.201975762844086\n             ,-0.339365005493164,0.918714940547943,0.663583517074585,0.109266623854637,0.740079581737518,0.619435131549835\n             ,0.287277430295944,0.730596840381622,0.232206523418427,-0.020738473162055,0.972445428371429,0.814588725566864\n             ,0.377569645643234,-0.440325260162354,0.711495399475098,0.476572155952454,-0.516384780406952,0.814492523670197\n             ,0.578000962734222,-0.0501683428883553,0.904258787631989,0.426958590745926,0.00473785446956754,0.751155555248261\n             ,0.608797609806061,0.255207538604736,0.654108226299286,0.695117294788361,0.298252135515213,0.654076218605042\n             ,0.750132322311401,-0.097395233809948,0.763394236564636,0.627238869667053,-0.154274553060532,0.711495399475098\n             ,0.476572155952454,-0.516384780406952,0.814588725566864,0.377569645643234,-0.440325260162354,0.594970345497131\n             ,0.240510985255241,-0.766918957233429,0.552935898303986,0.244290605187416,-0.796607792377472,0.552935898303986\n             ,0.244290605187416,-0.796607792377472,0.365138918161392,0.402016133069992,-0.83967649936676,0.52654629945755\n             ,0.6285120844841,-0.572469711303711,0.711495399475098,0.476572155952454,-0.516384780406952,0.457004487514496\n             ,0.0586743913590908,-0.887526988983154,0.171164497733116,0.182280600070953,-0.968233704566956,0.379243552684784\n             ,-0.345731914043427,-0.858279526233673,0.367359757423401,-0.19918592274189,-0.908499717712402,0.619435131549835\n             ,0.287277430295944,0.730596840381622,0.663583517074585,0.109266623854637,0.740079581737518,0.889924466609955\n             ,0.362089574337006,0.277354598045349,0.821134924888611,0.497984498739243,0.278834909200668,-0.43317574262619\n             ,-0.754240989685059,-0.493436217308044,-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.563665211200714\n             ,-0.803098201751709,-0.19317039847374,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.590254783630371\n             ,-0.794654071331024,0.141859948635101,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.659241914749146\n             ,-0.751696407794952,-0.0187781285494566,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.118136525154114\n             ,-0.743892669677734,0.65777462720871,-0.178765639662743,-0.712745010852814,0.678260564804077,-0.417856335639954\n             ,-0.873386740684509,0.250183314085007,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.643522143363953\n             ,-0.70788186788559,0.291174322366714,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.385445386171341\n             ,-0.256175637245178,0.886456966400146,-0.677714884281158,-0.638366103172302,0.364953815937042,0.530508995056152\n             ,-0.19520378112793,0.824897408485413,0.452383905649185,-0.0666286796331406,0.889330863952637,-0.178765639662743\n             ,-0.712745010852814,0.678260564804077,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.167113959789276\n             ,0.136682227253914,0.976417362689972,0.421373724937439,0.10162215679884,0.901175439357758,0.170562490820885,-0.154649093747139\n             ,0.97313517332077,-0.400625139474869,-0.141950860619545,0.905179262161255,0.0310389213263988,0.339698702096939\n             ,0.940021991729736,0.487773865461349,0.149537533521652,0.860066950321198,0.421373724937439,0.10162215679884,0.901175439357758\n             ,-0.167113959789276,0.136682227253914,0.976417362689972,0.256946176290512,-0.0665651634335518,-0.964130580425262\n             ,0.273258209228516,-0.188740387558937,-0.943242788314819,0.0101248463615775,-0.493800461292267,-0.869516313076019\n             ,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.0101248463615775,-0.493800461292267,-0.869516313076019\n             ,-0.107540838420391,-0.360320240259171,-0.926609039306641,-0.442572265863419,-0.578949928283691,-0.684796929359436\n             ,-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.685480773448944,-0.689756214618683,-0.233136162161827\n             ,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.359539449214935,-0.751623332500458,-0.552986204624176\n             ,-0.442572265863419,-0.578949928283691,-0.684796929359436,-0.400625139474869,-0.141950860619545,0.905179262161255\n             ,0.170562490820885,-0.154649093747139,0.97313517332077,-0.394339233636856,-0.615044772624969,0.682800531387329\n             ,-0.708291888237,-0.455330967903137,0.539440810680389,0.713517069816589,0.700637459754944,-0.000777124951127917\n             ,0.675231993198395,0.699040055274963,-0.235382169485092,0.372105628252029,0.872971594333649,0.315369695425034\n             ,0.20168174803257,0.693581879138947,0.691569745540619,-0.710149168968201,-0.699236750602722,-0.0821955949068069\n             ,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.808354198932648,-0.575751066207886,0.122776761651039\n             ,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.179948955774307,0.305097907781601,0.935165047645569\n             ,-0.167113959789276,0.136682227253914,0.976417362689972,-0.400625139474869,-0.141950860619545,0.905179262161255\n             ,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.179948955774307,0.305097907781601,0.935165047645569\n             ,0.181594237685204,0.605878710746765,0.774554371833801,0.467824161052704,0.695085167884827,0.545891225337982\n             ,-0.0883399024605751,0.440414160490036,0.89343798160553,0.727736592292786,0.600477695465088,0.331400126218796\n             ,0.713517069816589,0.700637459754944,-0.000777124951127917,0.20168174803257,0.693581879138947,0.691569745540619\n             ,0.361584514379501,0.504137456417084,0.78428441286087,0.445416361093521,0.291170030832291,0.846654772758484,0.361584514379501\n             ,0.504137456417084,0.78428441286087,-0.214763179421425,0.201751604676247,0.955600917339325,-0.188908159732819\n             ,-0.0821763500571251,0.978550314903259,0.70020192861557,0.436750024557114,0.564771354198456,0.727736592292786\n             ,0.600477695465088,0.331400126218796,0.361584514379501,0.504137456417084,0.78428441286087,0.445416361093521,0.291170030832291\n             ,0.846654772758484,0.633797287940979,0.754054367542267,-0.172345638275146,0.755062222480774,0.655636370182037\n             ,0.00468770461156964,0.704874277114868,0.496488779783249,-0.506607472896576,0.571536600589752,0.54747611284256\n             ,-0.611241221427917,0.70020192861557,0.436750024557114,0.564771354198456,0.587356448173523,0.37003019452095,0.719784736633301\n             ,0.420910388231277,0.458904504776001,0.782458364963531,0.598974168300629,0.55623596906662,0.576048195362091,0.713795185089111\n             ,0.560950756072998,0.419321686029434,0.758696973323822,0.616848468780518,0.209467962384224,0.621278166770935\n             ,0.634226977825165,0.460184365510941,0.626114845275879,0.552237331867218,0.550467252731323,0.376012861728668\n             ,-0.0599821247160435,-0.924670994281769,0.318814963102341,0.117576964199543,-0.94049596786499,0.626918852329254\n             ,0.478092342615128,-0.615142643451691,0.752733170986176,0.386990457773209,-0.532570421695709,-0.647555708885193\n             ,-0.75584751367569,0.0967788398265839,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.667661368846893\n             ,-0.595950901508331,0.446173489093781,-0.699702382087708,-0.709872841835022,0.080604575574398,0.0771664902567863\n             ,0.0724747255444527,0.994380593299866,-0.11764945089817,0.119960054755211,0.985783040523529,0.420910388231277\n             ,0.458904504776001,0.782458364963531,0.587356448173523,0.37003019452095,0.719784736633301,0.632134556770325,0.566209673881531\n             ,0.52897310256958,0.713795185089111,0.560950756072998,0.419321686029434,0.626114845275879,0.552237331867218,0.550467252731323\n             ,0.611269116401672,0.567333459854126,0.551799595355988,0.413307309150696,-0.19144606590271,-0.890239000320435\n             ,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.752733170986176,0.386990457773209,-0.532570421695709\n             ,0.833262026309967,0.342827558517456,-0.433755338191986,-0.16471865773201,-0.673515558242798,-0.720586240291595\n             ,0.25180572271347,-0.338099181652069,-0.906798124313354,0.204112648963928,-0.444034606218338,-0.872451305389404\n             ,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.508835017681122,-0.825367450714111,-0.244653806090355\n             ,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.592759191989899,-0.802146971225739,-0.0720886588096619\n             ,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.649092614650726,-0.759154498577118,-0.0486132241785526\n             ,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.597946286201477,-0.554786086082459,0.578508973121643\n             ,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.471450448036194,-0.245001286268234,0.847176969051361\n             ,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.597946286201477,-0.554786086082459,0.578508973121643\n             ,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.173014774918556,0.150903835892677,0.973290264606476\n             ,0.284897238016129,0.421358793973923,0.860982179641724,0.315255045890808,0.464517712593079,0.827549159526825\n             ,-0.24175851047039,0.0892980098724365,0.966218769550323,0.575458467006683,0.549589157104492,0.605639576911926\n             ,0.5494784116745,0.570390999317169,0.610514163970947,0.632134556770325,0.566209673881531,0.52897310256958,0.611269116401672\n             ,0.567333459854126,0.551799595355988,0.413307309150696,-0.19144606590271,-0.890239000320435,0.833262026309967\n             ,0.342827558517456,-0.433755338191986,0.827770292758942,0.364258110523224,-0.426746338605881,0.39981883764267\n             ,-0.144185781478882,-0.905182480812073,-0.190189674496651,-0.685347437858582,-0.702941536903381,0.123677581548691\n             ,-0.415960758924484,-0.900933146476746,0.170904099941254,-0.332066059112549,-0.9276442527771,-0.302494555711746\n             ,-0.645085394382477,-0.701685011386871,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.645101189613342\n             ,-0.736709177494049,-0.202741235494614,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.476104736328125\n             ,-0.838325619697571,-0.265583217144012,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.583746492862701\n             ,-0.193907052278519,0.788441598415375,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.471450448036194\n             ,-0.245001286268234,0.847176969051361,0.553665459156036,0.525177180767059,-0.646253407001495,0.626918852329254\n             ,0.478092342615128,-0.615142643451691,0.318814963102341,0.117576964199543,-0.94049596786499,0.330627292394638\n             ,0.250829428434372,-0.909818768501282,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.350332707166672\n             ,-0.557033061981201,-0.752981543540955,0.152081519365311,-0.148781135678291,-0.977105617523193,0.25180572271347\n             ,-0.338099181652069,-0.906798124313354,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.37796476483345\n             ,-0.602357983589172,-0.703070044517517,0.213511228561401,-0.0973462760448456,-0.972078502178192,0.152081519365311\n             ,-0.148781135678291,-0.977105617523193,-0.173014774918556,0.150903835892677,0.973290264606476,-0.415114998817444\n             ,-0.0299451891332865,0.909276008605957,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.190007403492928\n             ,0.150082901120186,0.970243453979492,0.170904099941254,-0.332066059112549,-0.9276442527771,0.129470959305763\n             ,-0.140533372759819,-0.981574058532715,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.302494555711746\n             ,-0.645085394382477,-0.701685011386871,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.576924562454224\n             ,-0.750419557094574,-0.322534501552582,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.843225598335266\n             ,-0.434366077184677,-0.316696554422379,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.680057168006897\n             ,-0.347443431615829,0.645604610443115,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.622686505317688\n             ,-0.240481927990913,0.744600534439087,0.5100998878479,0.534974932670593,0.673498272895813,0.5494784116745,0.570390999317169\n             ,0.610514163970947,0.575458467006683,0.549589157104492,0.605639576911926,0.490533232688904,0.463574707508087\n             ,0.73788595199585,0.21572470664978,0.340408891439438,0.915196537971497,0.284897238016129,0.421358793973923,0.860982179641724\n             ,-0.173014774918556,0.150903835892677,0.973290264606476,-0.190007403492928,0.150082901120186,0.970243453979492\n             ,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.428903788328171,-0.809928238391876,-0.400072306394577\n             ,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.628000319004059,-0.748511612415314,-0.212945908308029\n             ,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.374727010726929,-0.451056748628616,-0.810016989707947\n             ,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.641323387622833,-0.735230326652527,-0.219409838318825\n             ,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.663558781147003,-0.701492488384247,-0.259996235370636\n             ,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.37796476483345,-0.602357983589172,-0.703070044517517\n             ,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.508835017681122,-0.825367450714111,-0.244653806090355\n             ,-0.663558781147003,-0.701492488384247,-0.259996235370636,-0.350332707166672,-0.557033061981201,-0.752981543540955\n             ,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.508835017681122,-0.825367450714111,-0.244653806090355\n             ,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.190189674496651,-0.685347437858582,-0.702941536903381\n             ,-0.302494555711746,-0.645085394382477,-0.701685011386871,-0.407645702362061,-0.312832653522491,-0.857881546020508\n             ,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.495001792907715,-0.723142206668854,-0.481703817844391\n             ,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.685480773448944,-0.689756214618683,-0.233136162161827\n             ,-0.442572265863419,-0.578949928283691,-0.684796929359436,-0.374727010726929,-0.451056748628616,-0.810016989707947\n             ,0.524966239929199,0.447477400302887,0.72399890422821,0.154613956809044,0.104744024574757,0.982406854629517,0.452383905649185\n             ,-0.0666286796331406,0.889330863952637,0.64373791217804,0.242922231554985,0.725665390491486,0.078959085047245\n             ,0.121888175606728,0.989398181438446,0.0298695340752602,0.230346247553825,0.972650170326233,-0.385445386171341\n             ,-0.256175637245178,0.886456966400146,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.588989198207855\n             ,-0.775294840335846,0.228056281805038,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.178765639662743\n             ,-0.712745010852814,0.678260564804077,-0.396454155445099,-0.508855581283569,0.764127016067505,-0.396454155445099\n             ,-0.508855581283569,0.764127016067505,-0.178765639662743,-0.712745010852814,0.678260564804077,0.452383905649185\n             ,-0.0666286796331406,0.889330863952637,0.154613956809044,0.104744024574757,0.982406854629517,-0.188908159732819\n             ,-0.0821763500571251,0.978550314903259,-0.281839609146118,-0.242576912045479,0.92829030752182,0.0771664902567863\n             ,0.0724747255444527,0.994380593299866,0.445416361093521,0.291170030832291,0.846654772758484,-0.428903788328171\n             ,-0.809928238391876,-0.400072306394577,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.534167528152466\n             ,-0.810541450977325,-0.240182310342789,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.428903788328171\n             ,-0.809928238391876,-0.400072306394577,-0.524412930011749,-0.76793509721756,-0.367786258459091,0.0934423208236694\n             ,-0.290181279182434,-0.952398717403412,0.0273940563201904,-0.397710710763931,-0.917101860046387,0.249904245138168\n             ,-0.0394469499588013,-0.967466652393341,0.214979261159897,-0.17779715359211,-0.96029794216156,-0.107540838420391\n             ,-0.360320240259171,-0.926609039306641,0.0856246650218964,-0.211089760065079,-0.973709166049957,0.0273940563201904\n             ,-0.397710710763931,-0.917101860046387,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.256946176290512\n             ,-0.0665651634335518,-0.964130580425262,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.457292228937149\n             ,0.637990713119507,0.619557559490204,0.600133121013641,0.610116124153137,0.517299294471741,0.543609440326691\n             ,0.5921830534935,0.594817638397217,0.529006600379944,0.562984585762024,0.63498067855835,0.461020469665527,0.72527813911438\n             ,0.511303961277008,0.529006600379944,0.562984585762024,0.63498067855835,0.543609440326691,0.5921830534935,0.594817638397217\n             ,0.315534800291061,0.608373045921326,0.728230714797974,-0.673542857170105,-0.664238333702087,0.324233591556549\n             ,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.564210891723633,-0.825607478618622,-0.0061880461871624\n             ,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.755765080451965,-0.64697390794754,-0.101212374866009\n             ,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.727918982505798,-0.682847082614899,-0.0620787553489208\n             ,-0.714125990867615,-0.699272274971008,-0.0322852060198784,-0.799912631511688,-0.600115418434143,-0.00112808460835367\n             ,-0.755765080451965,-0.64697390794754,-0.101212374866009,-0.721217155456543,-0.691242814064026,-0.0450457334518433\n             ,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.508835017681122,-0.825367450714111,-0.244653806090355\n             ,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.721217155456543,-0.691242814064026,-0.0450457334518433\n             ,-0.663558781147003,-0.701492488384247,-0.259996235370636,0.0456269159913063,0.337521076202393,-0.940211534500122\n             ,0.400274157524109,0.667701542377472,-0.627658545970917,0.577099621295929,0.499205440282822,-0.646335780620575\n             ,0.220365136861801,0.161491006612778,-0.961956262588501,0.669646203517914,0.237006261944771,-0.703847944736481\n             ,0.523088097572327,0.0727911219000816,-0.849164426326752,0.494590252637863,0.0603402629494667,-0.867029130458832\n             ,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.523088097572327,0.0727911219000816,-0.849164426326752\n             ,0.669646203517914,0.237006261944771,-0.703847944736481,0.652852237224579,0.393031805753708,-0.647541463375092\n             ,0.509894669055939,0.256654620170593,-0.821057736873627,-0.43317574262619,-0.754240989685059,-0.493436217308044\n             ,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.0101248463615775,-0.493800461292267,-0.869516313076019\n             ,-0.359539449214935,-0.751623332500458,-0.552986204624176,0.249904245138168,-0.0394469499588013,-0.967466652393341\n             ,0.56600546836853,0.354604989290237,-0.744239985942841,0.585969090461731,0.300280570983887,-0.752643227577209\n             ,0.351930469274521,0.00348040298558772,-0.936019718647003,0.444862186908722,0.181827828288078,-0.876947104930878\n             ,0.256946176290512,-0.0665651634335518,-0.964130580425262,0.365171790122986,-0.00518579035997391,-0.930925726890564\n             ,0.494590252637863,0.0603402629494667,-0.867029130458832,0.509894669055939,0.256654620170593,-0.821057736873627\n             ,0.652852237224579,0.393031805753708,-0.647541463375092,0.670561790466309,0.450112581253052,-0.589699506759644\n             ,0.537330985069275,0.244881898164749,-0.807036757469177,0.652852237224579,0.393031805753708,-0.647541463375092\n             ,0.669646203517914,0.237006261944771,-0.703847944736481,0.781165838241577,0.623325526714325,0.0352878011763096\n             ,0.716162204742432,0.693212687969208,0.0810423269867897,0.771716117858887,0.588264167308807,0.241659909486771\n             ,0.721818268299103,0.577692627906799,0.381116211414337,0.8706374168396,0.436955988407135,-0.225964426994324,0.833557188510895\n             ,0.43537425994873,-0.340046495199203,0.684045433998108,0.607819020748138,0.403283834457397,0.839346766471863\n             ,0.531246542930603,-0.115212969481945,0.8706374168396,0.436955988407135,-0.225964426994324,0.721818268299103\n             ,0.577692627906799,0.381116211414337,0.170904099941254,-0.332066059112549,-0.9276442527771,0.123677581548691\n             ,-0.415960758924484,-0.900933146476746,0.184821337461472,-0.38211777806282,-0.905443012714386,0.204352244734764\n             ,-0.29480442404747,-0.933450877666473,0.39981883764267,-0.144185781478882,-0.905182480812073,0.827770292758942\n             ,0.364258110523224,-0.426746338605881,0.833576500415802,0.26908865571022,-0.482432901859283,0.474989861249924\n             ,-0.106995098292828,-0.873462498188019,0.340121984481812,0.0539852678775787,-0.938830494880676,0.293987482786179\n             ,-0.0222472082823515,-0.955550312995911,0.152081519365311,-0.148781135678291,-0.977105617523193,0.213511228561401\n             ,-0.0973462760448456,-0.972078502178192,0.214979261159897,-0.17779715359211,-0.96029794216156,0.213511228561401\n             ,-0.0973462760448456,-0.972078502178192,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.374727010726929\n             ,-0.451056748628616,-0.810016989707947,0.0273940563201904,-0.397710710763931,-0.917101860046387,-0.0263592731207609\n             ,-0.425665766000748,-0.904496490955353,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.428903788328171\n             ,-0.809928238391876,-0.400072306394577,0.078959085047245,0.121888175606728,0.989398181438446,0.591853797435761\n             ,0.480847299098969,0.646911799907684,0.522614181041718,0.594646036624908,0.610958755016327,0.0298695340752602\n             ,0.230346247553825,0.972650170326233,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.432995676994324\n             ,-0.138490244746208,-0.890693664550781,-0.286727339029312,-0.249588027596474,-0.924928784370422,-0.678066968917847\n             ,-0.616290330886841,-0.400513917207718,-0.385445386171341,-0.256175637245178,0.886456966400146,-0.453907251358032\n             ,-0.0319928824901581,0.890474379062653,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.677714884281158\n             ,-0.638366103172302,0.364953815937042,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.760693609714508\n             ,-0.63129860162735,-0.151021003723145,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.678066968917847\n             ,-0.616290330886841,-0.400513917207718,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.75411182641983\n             ,-0.632700145244598,0.176084950566292,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.677714884281158\n             ,-0.638366103172302,0.364953815937042,-0.0173206701874733,0.471247583627701,0.881830871105194,-0.453907251358032\n             ,-0.0319928824901581,0.890474379062653,-0.385445386171341,-0.256175637245178,0.886456966400146,0.0298695340752602\n             ,0.230346247553825,0.972650170326233,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.75411182641983\n             ,-0.632700145244598,0.176084950566292,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.689547598361969\n             ,-0.720895409584045,0.069526307284832,-0.432995676994324,-0.138490244746208,-0.890693664550781,0.0456269159913063\n             ,0.337521076202393,-0.940211534500122,0.220365136861801,0.161491006612778,-0.961956262588501,-0.286727339029312\n             ,-0.249588027596474,-0.924928784370422,0.808014631271362,0.548655688762665,-0.214684262871742,0.814588725566864\n             ,0.377569645643234,-0.440325260162354,0.904258787631989,0.426958590745926,0.00473785446956754,0.976709187030792\n             ,0.208457589149475,-0.050838902592659,0.814588725566864,0.377569645643234,-0.440325260162354,0.808014631271362\n             ,0.548655688762665,-0.214684262871742,0.467050135135651,0.542557895183563,-0.698208510875702,0.594970345497131\n             ,0.240510985255241,-0.766918957233429,0.600133121013641,0.610116124153137,0.517299294471741,0.836146891117096\n             ,0.398915261030197,0.376463830471039,0.645030558109283,0.393106490373611,0.655288398265839,0.669920027256012\n             ,0.533662140369415,0.516151010990143,0.663583517074585,0.109266623854637,0.740079581737518,0.639394581317902\n             ,-0.0537512600421906,0.766997635364532,0.951489508152008,0.185274630784988,0.245644211769104,0.889924466609955\n             ,0.362089574337006,0.277354598045349,0.836146891117096,0.398915261030197,0.376463830471039,0.600133121013641\n             ,0.610116124153137,0.517299294471741,0.457292228937149,0.637990713119507,0.619557559490204,0.821033596992493\n             ,0.463092446327209,0.333840012550354,0.639394581317902,-0.0537512600421906,0.766997635364532,0.645030558109283\n             ,0.393106490373611,0.655288398265839,0.836146891117096,0.398915261030197,0.376463830471039,0.951489508152008\n             ,0.185274630784988,0.245644211769104,0.594970345497131,0.240510985255241,-0.766918957233429,0.467050135135651\n             ,0.542557895183563,-0.698208510875702,0.171164497733116,0.182280600070953,-0.968233704566956,0.457004487514496\n             ,0.0586743913590908,-0.887526988983154,0.171164497733116,0.182280600070953,-0.968233704566956,0.467050135135651\n             ,0.542557895183563,-0.698208510875702,0.400274157524109,0.667701542377472,-0.627658545970917,0.0456269159913063\n             ,0.337521076202393,-0.940211534500122,-0.446602612733841,-0.102232590317726,-0.888872683048248,0.171164497733116\n             ,0.182280600070953,-0.968233704566956,0.0456269159913063,0.337521076202393,-0.940211534500122,-0.432995676994324\n             ,-0.138490244746208,-0.890693664550781,0.663583517074585,0.109266623854637,0.740079581737518,0.201975762844086\n             ,-0.339365005493164,0.918714940547943,0.296016186475754,0.207150265574455,0.932450115680695,0.639394581317902\n             ,-0.0537512600421906,0.766997635364532,0.0298695340752602,0.230346247553825,0.972650170326233,0.522614181041718\n             ,0.594646036624908,0.610958755016327,0.296016186475754,0.207150265574455,0.932450115680695,-0.0173206701874733\n             ,0.471247583627701,0.881830871105194,0.400274157524109,0.667701542377472,-0.627658545970917,0.571531593799591\n             ,0.820161521434784,-0.026204576715827,0.712321758270264,0.700732469558716,-0.0396451056003571,0.577099621295929\n             ,0.499205440282822,-0.646335780620575,0.763394236564636,0.627238869667053,-0.154274553060532,0.654076218605042\n             ,0.750132322311401,-0.097395233809948,0.52654629945755,0.6285120844841,-0.572469711303711,0.631870806217194,0.478121697902679\n             ,-0.61003190279007,0.631870806217194,0.478121697902679,-0.61003190279007,0.52654629945755,0.6285120844841,-0.572469711303711\n             ,0.365138918161392,0.402016133069992,-0.83967649936676,0.493055760860443,0.288357526063919,-0.820820271968842\n             ,0.765193700790405,0.545681536197662,0.341628700494766,0.472492724657059,0.634560942649841,0.611623287200928\n             ,0.712321758270264,0.700732469558716,-0.0396451056003571,0.571531593799591,0.820161521434784,-0.026204576715827\n             ,0.472492724657059,0.634560942649841,0.611623287200928,0.578510701656342,0.581528306007385,0.571970403194427\n             ,0.781165838241577,0.623325526714325,0.0352878011763096,0.712321758270264,0.700732469558716,-0.0396451056003571\n             ,0.578510701656342,0.581528306007385,0.571970403194427,0.461020469665527,0.72527813911438,0.511303961277008,0.716162204742432\n             ,0.693212687969208,0.0810423269867897,0.781165838241577,0.623325526714325,0.0352878011763096,0.487773865461349\n             ,0.149537533521652,0.860066950321198,0.0310389213263988,0.339698702096939,0.940021991729736,0.315534800291061\n             ,0.608373045921326,0.728230714797974,0.528455495834351,0.430389046669006,0.731778681278229,0.523088097572327\n             ,0.0727911219000816,-0.849164426326752,0.509894669055939,0.256654620170593,-0.821057736873627,0.444862186908722\n             ,0.181827828288078,-0.876947104930878,0.494590252637863,0.0603402629494667,-0.867029130458832,0.464535415172577\n             ,0.0843750312924385,-0.881525814533234,0.273258209228516,-0.188740387558937,-0.943242788314819,0.256946176290512\n             ,-0.0665651634335518,-0.964130580425262,0.444862186908722,0.181827828288078,-0.876947104930878,0.0934423208236694\n             ,-0.290181279182434,-0.952398717403412,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.494590252637863\n             ,0.0603402629494667,-0.867029130458832,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.528455495834351\n             ,0.430389046669006,0.731778681278229,0.524966239929199,0.447477400302887,0.72399890422821,0.64373791217804,0.242922231554985\n             ,0.725665390491486,0.487773865461349,0.149537533521652,0.860066950321198,0.528455495834351,0.430389046669006\n             ,0.731778681278229,0.543609440326691,0.5921830534935,0.594817638397217,0.600953817367554,0.56422370672226,0.566132545471191\n             ,0.524966239929199,0.447477400302887,0.72399890422821,0.319102138280869,0.857758343219757,0.403019160032272,0.461020469665527\n             ,0.72527813911438,0.511303961277008,0.315534800291061,0.608373045921326,0.728230714797974,-0.151531577110291\n             ,0.591902196407318,0.791637539863586,0.652852237224579,0.393031805753708,-0.647541463375092,0.716162204742432\n             ,0.693212687969208,0.0810423269867897,0.56834876537323,0.804110050201416,-0.174317732453346,0.670561790466309\n             ,0.450112581253052,-0.589699506759644,0.483205556869507,0.452571898698807,-0.749460518360138,0.729157328605652\n             ,0.398623704910278,-0.556263148784637,0.598047912120819,0.525615990161896,-0.605034232139587,0.575007021427155\n             ,0.477127492427826,-0.664617359638214,0.421373724937439,0.10162215679884,0.901175439357758,0.64373791217804,0.242922231554985\n             ,0.725665390491486,0.530508995056152,-0.19520378112793,0.824897408485413,0.170562490820885,-0.154649093747139\n             ,0.97313517332077,0.170562490820885,-0.154649093747139,0.97313517332077,0.530508995056152,-0.19520378112793,0.824897408485413\n             ,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.394339233636856,-0.615044772624969,0.682800531387329\n             ,-0.179948955774307,0.305097907781601,0.935165047645569,-0.692679047584534,-0.143219769001007,0.706883192062378\n             ,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.28609374165535,0.17817023396492,0.941491186618805\n             ,-0.77697879076004,-0.497155666351318,0.386186748743057,-0.613032460212708,-0.252606987953186,0.748585939407349\n             ,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.708291888237,-0.455330967903137,0.539440810680389\n             ,0.976709187030792,0.208457589149475,-0.050838902592659,0.904258787631989,0.426958590745926,0.00473785446956754\n             ,0.889924466609955,0.362089574337006,0.277354598045349,0.951489508152008,0.185274630784988,0.245644211769104\n             ,0.904258787631989,0.426958590745926,0.00473785446956754,0.814492523670197,0.578000962734222,-0.0501683428883553\n             ,0.821134924888611,0.497984498739243,0.278834909200668,0.889924466609955,0.362089574337006,0.277354598045349\n             ,0.319102138280869,0.857758343219757,0.403019160032272,-0.151531577110291,0.591902196407318,0.791637539863586\n             ,-0.0883399024605751,0.440414160490036,0.89343798160553,0.467824161052704,0.695085167884827,0.545891225337982\n             ,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.643522143363953,-0.70788186788559,0.291174322366714\n             ,-0.677714884281158,-0.638366103172302,0.364953815937042,-0.69510406255722,-0.692621827125549,0.192627400159836\n             ,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.510247528553009,-0.860017955303192,-0.00407588528469205\n             ,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.588989198207855,-0.775294840335846,0.228056281805038\n             ,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.564210891723633,-0.825607478618622,-0.0061880461871624\n             ,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.417856335639954,-0.873386740684509,0.250183314085007\n             ,-0.11764945089817,0.119960054755211,0.985783040523529,0.0771664902567863,0.0724747255444527,0.994380593299866\n             ,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.489890843629837,-0.162440925836563,0.856516182422638\n             ,-0.749038457870483,-0.580160796642303,0.319929391145706,-0.680057168006897,-0.347443431615829,0.645604610443115\n             ,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.684738636016846,-0.554822146892548,0.472551971673965\n             ,0.755062222480774,0.655636370182037,0.00468770461156964,0.633797287940979,0.754054367542267,-0.172345638275146\n             ,0.75712126493454,0.653194308280945,0.0102259330451488,0.758696973323822,0.616848468780518,0.209467962384224\n             ,0.755062222480774,0.655636370182037,0.00468770461156964,0.758696973323822,0.616848468780518,0.209467962384224\n             ,0.713795185089111,0.560950756072998,0.419321686029434,0.771716117858887,0.588264167308807,0.241659909486771\n             ,0.713795185089111,0.560950756072998,0.419321686029434,0.632134556770325,0.566209673881531,0.52897310256958,0.721818268299103\n             ,0.577692627906799,0.381116211414337,0.771716117858887,0.588264167308807,0.241659909486771,0.684045433998108\n             ,0.607819020748138,0.403283834457397,0.721818268299103,0.577692627906799,0.381116211414337,0.632134556770325\n             ,0.566209673881531,0.52897310256958,0.5494784116745,0.570390999317169,0.610514163970947,0.704874277114868,0.496488779783249\n             ,-0.506607472896576,0.833557188510895,0.43537425994873,-0.340046495199203,0.803746700286865,0.434959292411804\n             ,-0.405957728624344,0.673612415790558,0.488613814115524,-0.554529428482056,0.853050053119659,0.432356089353561\n             ,-0.292187958955765,0.803746700286865,0.434959292411804,-0.405957728624344,0.833557188510895,0.43537425994873\n             ,-0.340046495199203,0.8706374168396,0.436955988407135,-0.225964426994324,0.8706374168396,0.436955988407135,-0.225964426994324\n             ,0.839346766471863,0.531246542930603,-0.115212969481945,0.811299920082092,0.393999367952347,-0.431922435760498\n             ,0.853050053119659,0.432356089353561,-0.292187958955765,0.839346766471863,0.531246542930603,-0.115212969481945\n             ,0.862522184848785,0.47530135512352,-0.17362080514431,0.830814361572266,0.356648951768875,-0.427257508039474\n             ,0.811299920082092,0.393999367952347,-0.431922435760498,0.626114845275879,0.552237331867218,0.550467252731323\n             ,0.621278166770935,0.634226977825165,0.460184365510941,0.598974168300629,0.55623596906662,0.576048195362091,0.420910388231277\n             ,0.458904504776001,0.782458364963531,0.315255045890808,0.464517712593079,0.827549159526825,0.611269116401672\n             ,0.567333459854126,0.551799595355988,0.626114845275879,0.552237331867218,0.550467252731323,0.420910388231277\n             ,0.458904504776001,0.782458364963531,0.315255045890808,0.464517712593079,0.827549159526825,0.284897238016129\n             ,0.421358793973923,0.860982179641724,0.575458467006683,0.549589157104492,0.605639576911926,0.611269116401672\n             ,0.567333459854126,0.551799595355988,0.284897238016129,0.421358793973923,0.860982179641724,0.21572470664978,0.340408891439438\n             ,0.915196537971497,0.490533232688904,0.463574707508087,0.73788595199585,0.575458467006683,0.549589157104492,0.605639576911926\n             ,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.340121984481812,0.0539852678775787,-0.938830494880676\n             ,0.406537264585495,0.167056277394295,-0.898231387138367,0.391682207584381,0.0344884172081947,-0.919453978538513\n             ,0.320780336856842,-0.177296921610832,-0.930411577224731,0.376012861728668,-0.0599821247160435,-0.924670994281769\n             ,0.413307309150696,-0.19144606590271,-0.890239000320435,0.184821337461472,-0.38211777806282,-0.905443012714386\n             ,0.204352244734764,-0.29480442404747,-0.933450877666473,0.184821337461472,-0.38211777806282,-0.905443012714386\n             ,0.413307309150696,-0.19144606590271,-0.890239000320435,0.39981883764267,-0.144185781478882,-0.905182480812073\n             ,0.204352244734764,-0.29480442404747,-0.933450877666473,0.39981883764267,-0.144185781478882,-0.905182480812073\n             ,0.474989861249924,-0.106995098292828,-0.873462498188019,0.129470959305763,-0.140533372759819,-0.981574058532715\n             ,-0.407645702362061,-0.312832653522491,-0.857881546020508,0.129470959305763,-0.140533372759819,-0.981574058532715\n             ,0.0502891913056374,0.172818437218666,-0.98366904258728,-0.437055885791779,-0.11311361938715,-0.892293393611908\n             ,0.0502891913056374,0.172818437218666,-0.98366904258728,0.139374434947968,0.0775641202926636,-0.98719733953476\n             ,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.437055885791779,-0.11311361938715,-0.892293393611908\n             ,0.595824003219604,0.198742762207985,-0.778135597705841,0.85837733745575,0.37276965379715,-0.352464318275452\n             ,0.84142130613327,0.443432748317719,-0.30883252620697,0.609626173973084,0.347123831510544,-0.712643682956696\n             ,-0.272565364837646,-0.405919879674912,-0.872317135334015,-0.361765921115875,-0.279954940080643,-0.889241635799408\n             ,0.139374434947968,0.0775641202926636,-0.98719733953476,0.218467608094215,-0.0307074077427387,-0.975360929965973\n             ,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.272565364837646,-0.405919879674912,-0.872317135334015\n             ,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.424547016620636,-0.828336775302887,-0.365538060665131\n             ,0.690612375736237,0.305584073066711,-0.655494391918182,-0.0785726085305214,-0.289755910634995,-0.953869938850403\n             ,0.218467608094215,-0.0307074077427387,-0.975360929965973,0.736901640892029,0.310691028833389,-0.600372433662415\n             ,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.272565364837646,-0.405919879674912,-0.872317135334015\n             ,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.66791182756424,-0.591369688510895,-0.451858043670654\n             ,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.0785726085305214,-0.289755910634995,-0.953869938850403\n             ,0.690612375736237,0.305584073066711,-0.655494391918182,0.568666934967041,0.406713992357254,-0.714983642101288\n             ,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.299353003501892,-0.946574151515961,-0.119938470423222\n             ,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.45667690038681,-0.210856854915619,-0.864283263683319\n             ,-0.353174358606339,-0.401916116476059,-0.844826221466064,0.568666934967041,0.406713992357254,-0.714983642101288\n             ,0.67058277130127,0.452658027410507,-0.587724030017853,-0.45667690038681,-0.210856854915619,-0.864283263683319\n             ,-0.768422484397888,-0.629524946212769,0.115000896155834,-0.45667690038681,-0.210856854915619,-0.864283263683319\n             ,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.928529560565948,-0.339161455631256,0.15100422501564\n             ,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.45667690038681,-0.210856854915619,-0.864283263683319\n             ,0.623998522758484,0.368696242570877,-0.68897670507431,0.621371865272522,0.365546494722366,-0.6930171251297,-0.494617521762848\n             ,-0.0259672924876213,-0.86872273683548,-0.0629069060087204,-0.574297785758972,-0.81622588634491,-0.417728811502457\n             ,-0.903412997722626,-0.0966832265257835,-0.926164984703064,-0.361916661262512,0.105994082987309,0.633565187454224\n             ,0.343504458665848,-0.693253099918365,0.765720903873444,-0.195053040981293,-0.61288321018219,-0.0629069060087204\n             ,-0.574297785758972,-0.81622588634491,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.926164984703064\n             ,-0.361916661262512,0.105994082987309,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.21460884809494\n             ,-0.781227350234985,0.586196959018707,-0.128134071826935,-0.277867317199707,0.952035427093506,0.882170557975769\n             ,0.163093075156212,0.441786974668503,-0.128134071826935,-0.277867317199707,0.952035427093506,0.21460884809494\n             ,-0.781227350234985,0.586196959018707,0.928486943244934,-0.278761386871338,0.24536520242691,0.838517308235168\n             ,0.23515185713768,0.491520494222641,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.128134071826935\n             ,-0.277867317199707,0.952035427093506,0.874470949172974,0.181272923946381,0.449934005737305,0.221149787306786\n             ,-0.755684494972229,0.616468727588654,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.715266227722168\n             ,-0.692378520965576,0.0949009582400322,-0.113240525126457,-0.398993462324142,0.909934520721436,0.823110163211823\n             ,0.325570344924927,0.465288698673248,0.88580310344696,-0.0711137056350708,0.458580136299133,0.221149787306786\n             ,-0.755684494972229,0.616468727588654,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.0514638796448708\n             ,-0.993651986122131,-0.100036129355431,-0.00699111027643085,-0.506333768367767,-0.862309277057648,-0.209620162844658\n             ,-0.216750532388687,-0.953456163406372,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.00699111027643085\n             ,-0.506333768367767,-0.862309277057648,0.744133472442627,0.145097494125366,-0.652082920074463,0.728366911411285\n             ,0.471724718809128,-0.496948093175888,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.809780776500702\n             ,-0.571567296981812,-0.132536545395851,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.286078542470932\n             ,-0.0728482380509377,-0.955433011054993,-0.953828155994415,-0.279060304164886,-0.111072786152363,0.779201686382294\n             ,0.334656059741974,-0.529952883720398,-0.286078542470932,-0.0728482380509377,-0.955433011054993,-0.209620162844658\n             ,-0.216750532388687,-0.953456163406372,0.769174098968506,0.351543009281158,-0.533656001091003,0.11994443833828\n             ,-0.617316663265228,-0.77751749753952,-0.383375316858292,-0.909262895584106,-0.162062838673592,-0.94000107049942\n             ,-0.321145743131638,-0.115166857838631,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.11994443833828\n             ,-0.617316663265228,-0.77751749753952,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.780810236930847\n             ,0.338432997465134,-0.525165200233459,0.867587566375732,-0.240597397089005,-0.435206592082977,-0.94000107049942\n             ,-0.321145743131638,-0.115166857838631,-0.383375316858292,-0.909262895584106,-0.162062838673592,0.0104025090113282\n             ,-0.818762242794037,0.574038505554199,-0.441486179828644,-0.275298207998276,0.853991091251373,0.0104025090113282\n             ,-0.818762242794037,0.574038505554199,0.824216485023499,-0.374453365802765,0.42479619383812,0.694519758224487\n             ,0.188186302781105,0.694426536560059,-0.441486179828644,-0.275298207998276,0.853991091251373,0.682577550411224\n             ,0.201181307435036,0.702576637268066,0.677649199962616,0.231181770563126,0.698102116584778,-0.391219317913055\n             ,-0.370447516441345,0.842446446418762,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.691875457763672\n             ,-0.711835026741028,-0.120827160775661,-0.391219317913055,-0.370447516441345,0.842446446418762,0.284337043762207\n             ,-0.628438115119934,0.724029004573822,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.284337043762207\n             ,-0.628438115119934,0.724029004573822,-0.391219317913055,-0.370447516441345,0.842446446418762,0.67560875415802\n             ,0.409798443317413,0.612876892089844,0.628294765949249,0.216130942106247,0.747350692749023,-0.0565342605113983\n             ,-0.994561314582825,0.087474100291729,0.569195508956909,-0.757238268852234,-0.320322901010513,0.000683139485772699\n             ,-0.280447483062744,-0.959869146347046,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.569195508956909\n             ,-0.757238268852234,-0.320322901010513,0.869658291339874,0.203361555933952,-0.449820637702942,0.874346256256104\n             ,0.418091505765915,-0.246410429477692,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.877589702606201\n             ,0.353748112916946,-0.323571652173996,0.864371955394745,0.365095496177673,-0.345783799886703,-0.0460331737995148\n             ,-0.0997519120573998,-0.99394690990448,0.000683139485772699,-0.280447483062744,-0.959869146347046,-0.899728536605835\n             ,-0.311181008815765,-0.30603089928627,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.246053159236908\n             ,-0.622352182865143,-0.743058264255524,-0.366940021514893,-0.90958160161972,-0.194977775216103,0.246053159236908\n             ,-0.622352182865143,-0.743058264255524,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.886669814586639\n             ,0.303469926118851,-0.348887741565704,0.927240550518036,-0.288017064332962,-0.239313811063766,-0.16863539814949\n             ,-0.750330984592438,0.639191269874573,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.899728536605835\n             ,-0.311181008815765,-0.30603089928627,-0.366940021514893,-0.90958160161972,-0.194977775216103,-0.16863539814949\n             ,-0.750330984592438,0.639191269874573,0.669099032878876,-0.368822127580643,0.645195066928864,0.524607241153717\n             ,0.204550698399544,0.826405644416809,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.760593712329865\n             ,-0.590625822544098,-0.269552141427994,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.591978549957275\n             ,-0.234647616744041,0.771039485931396,-0.559872090816498,-0.363111883401871,0.744777143001556,0.478091299533844\n             ,0.270657926797867,0.835567474365234,-0.559872090816498,-0.363111883401871,0.744777143001556,-0.591978549957275\n             ,-0.234647616744041,0.771039485931396,0.484563320875168,0.265936732292175,0.833352267742157,0.460785627365112\n             ,0.218516558408737,0.860190212726593,-0.0734389647841454,-0.75235915184021,0.654646813869476,-0.559872090816498\n             ,-0.363111883401871,0.744777143001556,0.503586828708649,0.359971582889557,0.785379409790039,-0.0734389647841454\n             ,-0.75235915184021,0.654646813869476,0.460785627365112,0.218516558408737,0.860190212726593,0.853275120258331\n             ,-0.0167487524449825,0.521191954612732,0.45549151301384,-0.838008761405945,0.300447642803192,0.853275120258331\n             ,-0.0167487524449825,0.521191954612732,0.982857048511505,0.136188626289368,-0.124276459217072,0.437012165784836\n             ,-0.816920578479767,-0.376378893852234,0.45549151301384,-0.838008761405945,0.300447642803192,-0.36907297372818\n             ,-0.926835656166077,-0.0689988732337952,0.437012165784836,-0.816920578479767,-0.376378893852234,0.260752469301224\n             ,-0.303326517343521,-0.91651576757431,-0.665418803691864,-0.653117716312408,-0.361462414264679,0.437012165784836\n             ,-0.816920578479767,-0.376378893852234,0.982857048511505,0.136188626289368,-0.124276459217072,0.914490401744843\n             ,0.386459112167358,-0.119819387793541,0.260752469301224,-0.303326517343521,-0.91651576757431,-0.684952914714813\n             ,-0.620533168315887,-0.381808966398239,0.260752469301224,-0.303326517343521,-0.91651576757431,0.258395105600357\n             ,-0.170487090945244,-0.950876474380493,-0.767736911773682,-0.476170718669891,-0.428767383098602,0.48573312163353\n             ,-0.643503189086914,-0.591580092906952,-0.27993255853653,-0.94170469045639,-0.18662802875042,-0.768858969211578\n             ,-0.468379706144333,-0.435288727283478,0.258395105600357,-0.170487090945244,-0.950876474380493,0.48573312163353\n             ,-0.643503189086914,-0.591580092906952,0.258395105600357,-0.170487090945244,-0.950876474380493,0.941704988479614\n             ,0.318803399801254,-0.107499539852142,0.974766612052917,-0.217580199241638,0.0498894527554512,-0.248893335461617\n             ,-0.684883832931519,0.684825658798218,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.768858969211578\n             ,-0.468379706144333,-0.435288727283478,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.287435591220856\n             ,0.297283440828323,0.910496234893799,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.248893335461617\n             ,-0.684883832931519,0.684825658798218,0.527618527412415,-0.248120784759521,0.812437534332275,-0.665418803691864\n             ,-0.653117716312408,-0.361462414264679,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.633391082286835\n             ,-0.307917952537537,0.709931194782257,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.633391082286835\n             ,-0.307917952537537,0.709931194782257,-0.705930113792419,-0.207728907465935,0.677134692668915,0.307352930307388\n             ,0.437818199396133,0.844896078109741,0.0841809809207916,0.380945682525635,0.920757293701172,0.0841809809207916\n             ,0.380945682525635,0.920757293701172,0.190256670117378,0.381372839212418,0.904630959033966,-0.589905083179474\n             ,-0.166010066866875,0.790223181247711,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.589905083179474\n             ,-0.166010066866875,0.790223181247711,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.784540235996246\n             ,-0.611652791500092,0.10187029838562,-0.701657354831696,-0.649943113327026,0.291977494955063,0.567480087280273\n             ,-0.0757819190621376,0.819892346858978,-0.183004111051559,-0.709960997104645,0.680047690868378,0.0199296418577433\n             ,-0.141455933451653,0.989743947982788,0.323202461004257,0.213562965393066,0.921917021274567,-0.183004111051559\n             ,-0.709960997104645,0.680047690868378,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.392839103937149\n             ,-0.172498524188995,0.903283834457397,0.0199296418577433,-0.141455933451653,0.989743947982788,-0.229229316115379\n             ,-0.896437346935272,-0.379280924797058,0.571861207485199,-0.818909585475922,0.0485987178981304,0.735555529594421\n             ,-0.454784423112869,-0.502124667167664,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.957826614379883\n             ,0.161021858453751,0.237991765141487,0.735555529594421,-0.454784423112869,-0.502124667167664,0.571861207485199\n             ,-0.818909585475922,0.0485987178981304,0.567480087280273,-0.0757819190621376,0.819892346858978,-0.340475767850876\n             ,-0.728246688842773,-0.594754576683044,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.691691398620605\n             ,-0.350874394178391,-0.631229043006897,0.703052580356598,-0.608254909515381,-0.368433207273483,0.691691398620605\n             ,-0.350874394178391,-0.631229043006897,0.957826614379883,0.161021858453751,0.237991765141487,0.943321526050568\n             ,0.150219425559044,0.295936793088913,0.703052580356598,-0.608254909515381,-0.368433207273483,0.503020167350769\n             ,-0.85257089138031,0.141751810908318,-0.238497838377953,-0.942050397396088,-0.235923483967781,-0.340475767850876\n             ,-0.728246688842773,-0.594754576683044,0.703052580356598,-0.608254909515381,-0.368433207273483,0.703052580356598\n             ,-0.608254909515381,-0.368433207273483,0.943321526050568,0.150219425559044,0.295936793088913,0.813535928726196\n             ,-0.204780623316765,0.544264793395996,0.503020167350769,-0.85257089138031,0.141751810908318,0.0493573248386383\n             ,-0.726132214069366,0.685781180858612,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.238497838377953\n             ,-0.942050397396088,-0.235923483967781,0.503020167350769,-0.85257089138031,0.141751810908318,0.813535928726196\n             ,-0.204780623316765,0.544264793395996,0.245743036270142,0.103760361671448,0.963765621185303,0.0493573248386383\n             ,-0.726132214069366,0.685781180858612,0.503020167350769,-0.85257089138031,0.141751810908318,-0.688713252544403\n             ,0.550716757774353,0.471577256917953,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.765611350536346\n             ,-0.587060868740082,0.263056576251984,-0.56933456659317,0.0568463616073132,0.820138216018677,-0.688713252544403\n             ,0.550716757774353,0.471577256917953,-0.56933456659317,0.0568463616073132,0.820138216018677,0.245743036270142\n             ,0.103760361671448,0.963765621185303,0.0954181030392647,0.715005815029144,0.69257640838623,-0.683180570602417\n             ,0.540656507015228,0.490871548652649,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.998530864715576\n             ,0.000625132001005113,-0.0541816689074039,-0.688713252544403,0.550716757774353,0.471577256917953,-0.688713252544403\n             ,0.550716757774353,0.471577256917953,0.0954181030392647,0.715005815029144,0.69257640838623,0.18985190987587,0.684443712234497\n             ,0.703912675380707,-0.683180570602417,0.540656507015228,0.490871548652649,-0.688493669033051,0.582562029361725\n             ,0.431969791650772,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.993846356868744,-0.0301143601536751\n             ,-0.106595493853092,-0.683180570602417,0.540656507015228,0.490871548652649,-0.688493669033051,0.582562029361725\n             ,0.431969791650772,-0.683180570602417,0.540656507015228,0.490871548652649,0.18985190987587,0.684443712234497\n             ,0.703912675380707,0.199689194560051,0.642064154148102,0.740187704563141,-0.701637983322144,0.54883086681366\n             ,0.454410493373871,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.982938468456268,-0.0543373562395573\n             ,-0.17572546005249,-0.688493669033051,0.582562029361725,0.431969791650772,0.199689194560051,0.642064154148102\n             ,0.740187704563141,0.0676127597689629,0.604031264781952,0.7940873503685,-0.701637983322144,0.54883086681366,0.454410493373871\n             ,-0.688493669033051,0.582562029361725,0.431969791650772,-0.763029158115387,0.474885076284409,0.438486844301224\n             ,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.701637983322144,0.54883086681366,0.454410493373871\n             ,-0.60441780090332,0.615803182125092,0.505436062812805,0.0676127597689629,0.604031264781952,0.7940873503685,0.0691882893443108\n             ,0.630300760269165,0.773261845111847,-0.60441780090332,0.615803182125092,0.505436062812805,-0.701637983322144\n             ,0.54883086681366,0.454410493373871,-0.911145687103271,0.362300097942352,0.196347072720528,-0.505132853984833\n             ,0.614961266517639,0.605527400970459,-0.633555710315704,0.25967600941658,0.728817939758301,-0.930138111114502\n             ,-0.0125236622989178,0.366996258497238,-0.255626708269119,0.402414381504059,0.879043579101563,-0.513125777244568\n             ,0.318144857883453,0.797173619270325,-0.519362270832062,0.62650853395462,0.581162631511688,-0.394463092088699\n             ,0.67669689655304,0.621675312519073,-0.255626708269119,0.402414381504059,0.879043579101563,-0.190007403492928\n             ,0.150082901120186,0.970243453979492,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.513125777244568\n             ,0.318144857883453,0.797173619270325,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.993846356868744\n             ,-0.0301143601536751,-0.106595493853092,-0.279823988676071,-0.630851566791534,-0.723688364028931,-0.340475767850876\n             ,-0.728246688842773,-0.594754576683044,-0.340475767850876,-0.728246688842773,-0.594754576683044,-0.238497838377953\n             ,-0.942050397396088,-0.235923483967781,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.998530864715576\n             ,0.000625132001005113,-0.0541816689074039,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.999070584774017\n             ,-0.0414997637271881,0.0116504887118936,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.279823988676071\n             ,-0.630851566791534,-0.723688364028931,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.437055885791779\n             ,-0.11311361938715,-0.892293393611908,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.66791182756424\n             ,-0.591369688510895,-0.451858043670654,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.245216280221939\n             ,-0.962543606758118,-0.115666791796684,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.648254215717316\n             ,-0.664977610111237,-0.370905965566635,0.943321526050568,0.150219425559044,0.295936793088913,0.957826614379883\n             ,0.161021858453751,0.237991765141487,0.18985190987587,0.684443712234497,0.703912675380707,0.0954181030392647\n             ,0.715005815029144,0.69257640838623,0.0954181030392647,0.715005815029144,0.69257640838623,0.245743036270142,0.103760361671448\n             ,0.963765621185303,0.813535928726196,-0.204780623316765,0.544264793395996,0.943321526050568,0.150219425559044\n             ,0.295936793088913,0.957826614379883,0.161021858453751,0.237991765141487,0.567480087280273,-0.0757819190621376\n             ,0.819892346858978,0.0676127597689629,0.604031264781952,0.7940873503685,0.199689194560051,0.642064154148102,0.740187704563141\n             ,0.0691882893443108,0.630300760269165,0.773261845111847,0.0676127597689629,0.604031264781952,0.7940873503685\n             ,0.567480087280273,-0.0757819190621376,0.819892346858978,0.323202461004257,0.213562965393066,0.921917021274567\n             ,0.148562759160995,0.479341596364975,0.864962875843048,-0.255626708269119,0.402414381504059,0.879043579101563\n             ,-0.394463092088699,0.67669689655304,0.621675312519073,0.0911808460950851,0.673339366912842,0.733689427375793\n             ,-0.255626708269119,0.402414381504059,0.879043579101563,0.148562759160995,0.479341596364975,0.864962875843048\n             ,0.21572470664978,0.340408891439438,0.915196537971497,-0.190007403492928,0.150082901120186,0.970243453979492\n             ,0.842374086380005,0.358164042234421,-0.402646720409393,0.830814361572266,0.356648951768875,-0.427257508039474\n             ,0.862522184848785,0.47530135512352,-0.17362080514431,0.908332526683807,0.395048230886459,-0.137364193797112\n             ,0.842374086380005,0.358164042234421,-0.402646720409393,0.908332526683807,0.395048230886459,-0.137364193797112\n             ,0.909188210964203,0.403158754110336,-0.104114137589931,0.822202026844025,0.427274346351624,-0.376059085130692\n             ,0.899213671684265,0.427792370319366,0.0916977524757385,0.910323619842529,0.411990493535995,0.0396831221878529\n             ,0.905055105686188,0.328626185655594,-0.269963204860687,0.922886550426483,0.384252488613129,-0.0251074023544788\n             ,0.922377347946167,0.359061807394028,-0.142459228634834,0.960252404212952,0.207041427493095,0.18721416592598\n             ,0.88580310344696,-0.0711137056350708,0.458580136299133,0.894895136356354,0.433114320039749,-0.107586048543453\n             ,0.922377347946167,0.359061807394028,-0.142459228634834,0.894895136356354,0.433114320039749,-0.107586048543453\n             ,0.690612375736237,0.305584073066711,-0.655494391918182,0.820404410362244,0.42123407125473,-0.386650294065475\n             ,0.190256670117378,0.381372839212418,0.904630959033966,0.693649888038635,0.505129396915436,0.513511538505554\n             ,0.768445134162903,0.434675455093384,0.469626784324646,0.394909024238586,0.532412230968475,0.748721599578857\n             ,0.307352930307388,0.437818199396133,0.844896078109741,0.272435218095779,0.357738167047501,0.893197894096375\n             ,0.927422702312469,0.341609179973602,-0.152283608913422,0.914490401744843,0.386459112167358,-0.119819387793541\n             ,0.251297831535339,0.359561949968338,0.89864593744278,0.287435591220856,0.297283440828323,0.910496234893799,0.941704988479614\n             ,0.318803399801254,-0.107499539852142,0.92225056886673,0.365326255559921,-0.126453906297684,0.287435591220856\n             ,0.297283440828323,0.910496234893799,0.527618527412415,-0.248120784759521,0.812437534332275,0.974766612052917\n             ,-0.217580199241638,0.0498894527554512,0.941704988479614,0.318803399801254,-0.107499539852142,0.646180808544159\n             ,0.374157816171646,0.665173888206482,0.460785627365112,0.218516558408737,0.860190212726593,0.820957541465759\n             ,0.472796261310577,0.320144385099411,0.868437707424164,0.397741049528122,0.296003401279449,0.834237515926361\n             ,0.296865254640579,0.464670658111572,0.910323619842529,0.411990493535995,0.0396831221878529,0.899213671684265\n             ,0.427792370319366,0.0916977524757385,0.890609622001648,0.401651859283447,0.213284432888031,0.503586828708649\n             ,0.359971582889557,0.785379409790039,0.478091299533844,0.270657926797867,0.835567474365234,0.877589702606201\n             ,0.353748112916946,-0.323571652173996,0.874346256256104,0.418091505765915,-0.246410429477692,0.484563320875168\n             ,0.265936732292175,0.833352267742157,0.864371955394745,0.365095496177673,-0.345783799886703,0.877589702606201\n             ,0.353748112916946,-0.323571652173996,0.478091299533844,0.270657926797867,0.835567474365234,0.484563320875168\n             ,0.265936732292175,0.833352267742157,0.524607241153717,0.204550698399544,0.826405644416809,0.886669814586639\n             ,0.303469926118851,-0.348887741565704,0.864371955394745,0.365095496177673,-0.345783799886703,0.524607241153717\n             ,0.204550698399544,0.826405644416809,0.669099032878876,-0.368822127580643,0.645195066928864,0.927240550518036\n             ,-0.288017064332962,-0.239313811063766,0.886669814586639,0.303469926118851,-0.348887741565704,0.853837490081787\n             ,0.519237220287323,0.0367999672889709,0.744133472442627,0.145097494125366,-0.652082920074463,0.905055105686188\n             ,0.328626185655594,-0.269963204860687,0.910323619842529,0.411990493535995,0.0396831221878529,0.853837490081787\n             ,0.519237220287323,0.0367999672889709,0.910323619842529,0.411990493535995,0.0396831221878529,0.834237515926361\n             ,0.296865254640579,0.464670658111572,0.628294765949249,0.216130942106247,0.747350692749023,0.769174098968506\n             ,0.351543009281158,-0.533656001091003,0.728366911411285,0.471724718809128,-0.496948093175888,0.67560875415802\n             ,0.409798443317413,0.612876892089844,0.677649199962616,0.231181770563126,0.698102116584778,0.694519758224487\n             ,0.188186302781105,0.694426536560059,0.780810236930847,0.338432997465134,-0.525165200233459,0.779201686382294\n             ,0.334656059741974,-0.529952883720398,0.682577550411224,0.201181307435036,0.702576637268066,0.867587566375732\n             ,-0.240597397089005,-0.435206592082977,0.780810236930847,0.338432997465134,-0.525165200233459,0.694519758224487\n             ,0.188186302781105,0.694426536560059,0.824216485023499,-0.374453365802765,0.42479619383812,0.838517308235168\n             ,0.23515185713768,0.491520494222641,0.623998522758484,0.368696242570877,-0.68897670507431,0.67058277130127,0.452658027410507\n             ,-0.587724030017853,0.823110163211823,0.325570344924927,0.465288698673248,0.621371865272522,0.365546494722366\n             ,-0.6930171251297,0.623998522758484,0.368696242570877,-0.68897670507431,0.838517308235168,0.23515185713768,0.491520494222641\n             ,0.874470949172974,0.181272923946381,0.449934005737305,0.882170557975769,0.163093075156212,0.441786974668503\n             ,0.633565187454224,0.343504458665848,-0.693253099918365,0.621371865272522,0.365546494722366,-0.6930171251297\n             ,0.874470949172974,0.181272923946381,0.449934005737305,0.768445134162903,0.434675455093384,0.469626784324646\n             ,0.693649888038635,0.505129396915436,0.513511538505554,0.982857048511505,0.136188626289368,-0.124276459217072\n             ,0.936653733253479,0.265634030103683,0.228294312953949,0.609626173973084,0.347123831510544,-0.712643682956696\n             ,0.139374434947968,0.0775641202926636,-0.98719733953476,0.0502891913056374,0.172818437218666,-0.98366904258728\n             ,0.595824003219604,0.198742762207985,-0.778135597705841,0.218467608094215,-0.0307074077427387,-0.975360929965973\n             ,0.139374434947968,0.0775641202926636,-0.98719733953476,0.609626173973084,0.347123831510544,-0.712643682956696\n             ,0.736901640892029,0.310691028833389,-0.600372433662415,0.366583049297333,0.495457142591476,0.787489116191864\n             ,0.340076804161072,0.586851418018341,0.734815061092377,0.39249575138092,0.576124608516693,0.716957092285156,0.442981511354446\n             ,0.554243564605713,0.70468533039093,0.442981511354446,0.554243564605713,0.70468533039093,0.5100998878479,0.534974932670593\n             ,0.673498272895813,0.490533232688904,0.463574707508087,0.73788595199585,0.366583049297333,0.495457142591476,0.787489116191864\n             ,0.787978947162628,0.441818922758102,0.428818345069885,0.723389148712158,0.50640881061554,0.469316840171814,0.768445134162903\n             ,0.434675455093384,0.469626784324646,0.936653733253479,0.265634030103683,0.228294312953949,0.684045433998108\n             ,0.607819020748138,0.403283834457397,0.5494784116745,0.570390999317169,0.610514163970947,0.5100998878479,0.534974932670593\n             ,0.673498272895813,0.642198443412781,0.582559704780579,0.498202055692673,0.674923956394196,0.549656689167023\n             ,0.492295831441879,0.642198443412781,0.582559704780579,0.498202055692673,0.5100998878479,0.534974932670593,0.673498272895813\n             ,0.442981511354446,0.554243564605713,0.70468533039093,0.442981511354446,0.554243564605713,0.70468533039093,0.39249575138092\n             ,0.576124608516693,0.716957092285156,0.723389148712158,0.50640881061554,0.469316840171814,0.674923956394196,0.549656689167023\n             ,0.492295831441879,0.723389148712158,0.50640881061554,0.469316840171814,0.39249575138092,0.576124608516693,0.716957092285156\n             ,0.394909024238586,0.532412230968475,0.748721599578857,0.768445134162903,0.434675455093384,0.469626784324646\n             ,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.74693363904953,-0.662334084510803,0.0583409406244755\n             ,-0.760693609714508,-0.63129860162735,-0.151021003723145,-0.689479112625122,-0.7086461186409,-0.149797007441521\n             ,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.659241914749146,-0.751696407794952,-0.0187781285494566\n             ,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.539040088653564,-0.79723459482193,-0.271758705377579\n             ,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.539040088653564,-0.79723459482193,-0.271758705377579\n             ,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.510247528553009,-0.860017955303192,-0.00407588528469205\n             ,0.351930469274521,0.00348040298558772,-0.936019718647003,0.459090322256088,0.385543048381805,-0.800370275974274\n             ,0.406537264585495,0.167056277394295,-0.898231387138367,0.340121984481812,0.0539852678775787,-0.938830494880676\n             ,0.330627292394638,0.250829428434372,-0.909818768501282,0.33696186542511,0.354342758655548,-0.87229460477829\n             ,0.494146823883057,0.54429703950882,-0.677908360958099,0.553665459156036,0.525177180767059,-0.646253407001495\n             ,0.475114166736603,0.274622708559036,-0.835971832275391,0.406537264585495,0.167056277394295,-0.898231387138367\n             ,0.459090322256088,0.385543048381805,-0.800370275974274,0.521424174308777,0.414691746234894,-0.745753049850464\n             ,0.564947247505188,0.481012016534805,-0.670419335365295,0.571536600589752,0.54747611284256,-0.611241221427917\n             ,0.704874277114868,0.496488779783249,-0.506607472896576,0.673612415790558,0.488613814115524,-0.554529428482056\n             ,0.755062222480774,0.655636370182037,0.00468770461156964,0.771716117858887,0.588264167308807,0.241659909486771\n             ,0.833557188510895,0.43537425994873,-0.340046495199203,0.704874277114868,0.496488779783249,-0.506607472896576\n             ,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.749038457870483,-0.580160796642303,0.319929391145706\n             ,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.930138111114502,-0.0125236622989178,0.366996258497238\n             ,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.592759191989899,-0.802146971225739,-0.0720886588096619\n             ,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.647555708885193,-0.75584751367569,0.0967788398265839\n             ,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.721217155456543,-0.691242814064026,-0.0450457334518433\n             ,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.647555708885193,-0.75584751367569,0.0967788398265839\n             ,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.671412885189056,-0.393651962280273,-0.627887606620789\n             ,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.576924562454224,-0.750419557094574,-0.322534501552582\n             ,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.495001792907715,-0.723142206668854,-0.481703817844391\n             ,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.476104736328125,-0.838325619697571,-0.265583217144012\n             ,0.204112648963928,-0.444034606218338,-0.872451305389404,0.320780336856842,-0.177296921610832,-0.930411577224731\n             ,0.184821337461472,-0.38211777806282,-0.905443012714386,0.123677581548691,-0.415960758924484,-0.900933146476746\n             ,0.319102138280869,0.857758343219757,0.403019160032272,0.467824161052704,0.695085167884827,0.545891225337982\n             ,0.357862263917923,0.82249915599823,0.442074358463287,0.56834876537323,0.804110050201416,-0.174317732453346,-0.667661368846893\n             ,-0.595950901508331,0.446173489093781,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.613032460212708\n             ,-0.252606987953186,0.748585939407349,-0.77697879076004,-0.497155666351318,0.386186748743057,0.483205556869507\n             ,0.452571898698807,-0.749460518360138,0.675231993198395,0.699040055274963,-0.235382169485092,0.713517069816589\n             ,0.700637459754944,-0.000777124951127917,0.729157328605652,0.398623704910278,-0.556263148784637,0.75712126493454\n             ,0.653194308280945,0.0102259330451488,0.729157328605652,0.398623704910278,-0.556263148784637,0.713517069816589\n             ,0.700637459754944,-0.000777124951127917,0.727736592292786,0.600477695465088,0.331400126218796,0.598974168300629\n             ,0.55623596906662,0.576048195362091,0.75712126493454,0.653194308280945,0.0102259330451488,0.727736592292786,0.600477695465088\n             ,0.331400126218796,0.70020192861557,0.436750024557114,0.564771354198456,0.181594237685204,0.605878710746765,0.774554371833801\n             ,0.20168174803257,0.693581879138947,0.691569745540619,0.372105628252029,0.872971594333649,0.315369695425034,0.357862263917923\n             ,0.82249915599823,0.442074358463287,-0.28609374165535,0.17817023396492,0.941491186618805,-0.214763179421425,0.201751604676247\n             ,0.955600917339325,0.20168174803257,0.693581879138947,0.691569745540619,0.181594237685204,0.605878710746765,0.774554371833801\n             ,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.504859209060669,-0.313114404678345,0.804410696029663\n             ,-0.214763179421425,0.201751604676247,0.955600917339325,-0.28609374165535,0.17817023396492,0.941491186618805\n             ,0.816755056381226,0.501944601535797,0.284539580345154,0.801483035087585,0.569443702697754,0.182643905282021\n             ,0.642198443412781,0.582559704780579,0.498202055692673,0.674923956394196,0.549656689167023,0.492295831441879\n             ,0.674923956394196,0.549656689167023,0.492295831441879,0.723389148712158,0.50640881061554,0.469316840171814,0.787978947162628\n             ,0.441818922758102,0.428818345069885,0.816755056381226,0.501944601535797,0.284539580345154,0.816755056381226\n             ,0.501944601535797,0.284539580345154,0.807778179645538,0.493730574846268,0.322062909603119,0.890609622001648\n             ,0.401651859283447,0.213284432888031,0.862821519374847,0.482879310846329,0.149554565548897,0.807778179645538\n             ,0.493730574846268,0.322062909603119,0.787978947162628,0.441818922758102,0.428818345069885,0.646180808544159\n             ,0.374157816171646,0.665173888206482,0.868437707424164,0.397741049528122,0.296003401279449,0.862821519374847\n             ,0.482879310846329,0.149554565548897,0.899213671684265,0.427792370319366,0.0916977524757385,0.922886550426483\n             ,0.384252488613129,-0.0251074023544788,0.891873419284821,0.448944300413132,0.0548712648451328,0.909188210964203\n             ,0.403158754110336,-0.104114137589931,0.922886550426483,0.384252488613129,-0.0251074023544788,0.960252404212952\n             ,0.207041427493095,0.18721416592598,0.922377347946167,0.359061807394028,-0.142459228634834,0.908332526683807\n             ,0.395048230886459,-0.137364193797112,0.891873419284821,0.448944300413132,0.0548712648451328,0.922886550426483\n             ,0.384252488613129,-0.0251074023544788,0.909188210964203,0.403158754110336,-0.104114137589931,0.891873419284821\n             ,0.448944300413132,0.0548712648451328,0.908332526683807,0.395048230886459,-0.137364193797112,0.862522184848785\n             ,0.47530135512352,-0.17362080514431,0.801483035087585,0.569443702697754,0.182643905282021,0.922377347946167,0.359061807394028\n             ,-0.142459228634834,0.820404410362244,0.42123407125473,-0.386650294065475,0.822202026844025,0.427274346351624\n             ,-0.376059085130692,0.909188210964203,0.403158754110336,-0.104114137589931,0.807778179645538,0.493730574846268\n             ,0.322062909603119,0.868437707424164,0.397741049528122,0.296003401279449,0.957878828048706,0.257844924926758\n             ,-0.126428335905075,0.890609622001648,0.401651859283447,0.213284432888031,0.820957541465759,0.472796261310577\n             ,0.320144385099411,0.869658291339874,0.203361555933952,-0.449820637702942,0.957878828048706,0.257844924926758\n             ,-0.126428335905075,0.868437707424164,0.397741049528122,0.296003401279449,-0.714628040790558,-0.682467877864838\n             ,-0.153441905975342,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.66791182756424,-0.591369688510895\n             ,-0.451858043670654,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.755157172679901,-0.459198147058487\n             ,-0.46784046292305,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.66791182756424,-0.591369688510895\n             ,-0.451858043670654,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.671412885189056,-0.393651962280273\n             ,-0.627887606620789,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.437055885791779,-0.11311361938715\n             ,-0.892293393611908,-0.754156410694122,-0.292590618133545,-0.587910532951355,0.190256670117378,0.381372839212418\n             ,0.904630959033966,0.30104210972786,0.404300183057785,0.863663733005524,-0.392839103937149,-0.172498524188995\n             ,0.903283834457397,-0.589905083179474,-0.166010066866875,0.790223181247711,0.0199296418577433,-0.141455933451653\n             ,0.989743947982788,-0.392839103937149,-0.172498524188995,0.903283834457397,0.30104210972786,0.404300183057785\n             ,0.863663733005524,0.356225103139877,0.46585413813591,0.809989869594574,-0.394463092088699,0.67669689655304,0.621675312519073\n             ,-0.60441780090332,0.615803182125092,0.505436062812805,0.0691882893443108,0.630300760269165,0.773261845111847\n             ,0.0911808460950851,0.673339366912842,0.733689427375793,0.564947247505188,0.481012016534805,-0.670419335365295\n             ,0.553665459156036,0.525177180767059,-0.646253407001495,0.494146823883057,0.54429703950882,-0.677908360958099\n             ,0.598047912120819,0.525615990161896,-0.605034232139587,0.673612415790558,0.488613814115524,-0.554529428482056\n             ,0.626918852329254,0.478092342615128,-0.615142643451691,0.553665459156036,0.525177180767059,-0.646253407001495\n             ,0.564947247505188,0.481012016534805,-0.670419335365295,0.803746700286865,0.434959292411804,-0.405957728624344\n             ,0.752733170986176,0.386990457773209,-0.532570421695709,0.626918852329254,0.478092342615128,-0.615142643451691\n             ,0.673612415790558,0.488613814115524,-0.554529428482056,0.833262026309967,0.342827558517456,-0.433755338191986\n             ,0.752733170986176,0.386990457773209,-0.532570421695709,0.803746700286865,0.434959292411804,-0.405957728624344\n             ,0.853050053119659,0.432356089353561,-0.292187958955765,0.853050053119659,0.432356089353561,-0.292187958955765\n             ,0.845363795757294,0.50351881980896,-0.178406670689583,0.827770292758942,0.364258110523224,-0.426746338605881\n             ,0.833262026309967,0.342827558517456,-0.433755338191986,0.845363795757294,0.50351881980896,-0.178406670689583\n             ,0.8753382563591,0.393582403659821,-0.280848383903503,0.833576500415802,0.26908865571022,-0.482432901859283,0.827770292758942\n             ,0.364258110523224,-0.426746338605881,0.595824003219604,0.198742762207985,-0.778135597705841,0.833576500415802\n             ,0.26908865571022,-0.482432901859283,0.8753382563591,0.393582403659821,-0.280848383903503,0.85837733745575,0.37276965379715\n             ,-0.352464318275452,0.811299920082092,0.393999367952347,-0.431922435760498,0.830814361572266,0.356648951768875\n             ,-0.427257508039474,0.8753382563591,0.393582403659821,-0.280848383903503,0.845363795757294,0.50351881980896,-0.178406670689583\n             ,0.85837733745575,0.37276965379715,-0.352464318275452,0.8753382563591,0.393582403659821,-0.280848383903503,0.830814361572266\n             ,0.356648951768875,-0.427257508039474,0.842374086380005,0.358164042234421,-0.402646720409393,0.85837733745575\n             ,0.37276965379715,-0.352464318275452,0.842374086380005,0.358164042234421,-0.402646720409393,0.822202026844025\n             ,0.427274346351624,-0.376059085130692,0.84142130613327,0.443432748317719,-0.30883252620697,0.822202026844025\n             ,0.427274346351624,-0.376059085130692,0.820404410362244,0.42123407125473,-0.386650294065475,0.736901640892029\n             ,0.310691028833389,-0.600372433662415,0.84142130613327,0.443432748317719,-0.30883252620697,0.521424174308777\n             ,0.414691746234894,-0.745753049850464,0.33696186542511,0.354342758655548,-0.87229460477829,0.330627292394638\n             ,0.250829428434372,-0.909818768501282,0.475114166736603,0.274622708559036,-0.835971832275391,0.537330985069275\n             ,0.244881898164749,-0.807036757469177,0.464535415172577,0.0843750312924385,-0.881525814533234,0.444862186908722\n             ,0.181827828288078,-0.876947104930878,0.509894669055939,0.256654620170593,-0.821057736873627,0.509490370750427\n             ,0.360699236392975,-0.781226992607117,0.537330985069275,0.244881898164749,-0.807036757469177,0.670561790466309\n             ,0.450112581253052,-0.589699506759644,0.575007021427155,0.477127492427826,-0.664617359638214,0.509490370750427\n             ,0.360699236392975,-0.781226992607117,0.272443890571594,0.180597811937332,-0.945070743560791,0.464535415172577\n             ,0.0843750312924385,-0.881525814533234,0.537330985069275,0.244881898164749,-0.807036757469177,0.0856246650218964\n             ,-0.211089760065079,-0.973709166049957,0.273258209228516,-0.188740387558937,-0.943242788314819,0.464535415172577\n             ,0.0843750312924385,-0.881525814533234,0.272443890571594,0.180597811937332,-0.945070743560791,0.0856246650218964\n             ,-0.211089760065079,-0.973709166049957,-0.107540838420391,-0.360320240259171,-0.926609039306641,0.0101248463615775\n             ,-0.493800461292267,-0.869516313076019,0.273258209228516,-0.188740387558937,-0.943242788314819,0.821033596992493\n             ,0.463092446327209,0.333840012550354,0.976709187030792,0.208457589149475,-0.050838902592659,0.951489508152008\n             ,0.185274630784988,0.245644211769104,0.836146891117096,0.398915261030197,0.376463830471039,0.654076218605042\n             ,0.750132322311401,-0.097395233809948,0.814492523670197,0.578000962734222,-0.0501683428883553,0.711495399475098\n             ,0.476572155952454,-0.516384780406952,0.52654629945755,0.6285120844841,-0.572469711303711,0.654108226299286,0.695117294788361\n             ,0.298252135515213,0.821134924888611,0.497984498739243,0.278834909200668,0.814492523670197,0.578000962734222\n             ,-0.0501683428883553,0.654076218605042,0.750132322311401,-0.097395233809948,-0.649092614650726,-0.759154498577118\n             ,-0.0486132241785526,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.645101189613342,-0.736709177494049\n             ,-0.202741235494614,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.64864593744278,-0.723939120769501\n             ,-0.234884113073349,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.843225598335266,-0.434366077184677\n             ,-0.316696554422379,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.844545185565948,-0.263896226882935\n             ,-0.465942233800888,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.875506162643433,-0.298629522323608\n             ,-0.379880726337433,-0.843225598335266,-0.434366077184677,-0.316696554422379,-0.649092614650726,-0.759154498577118\n             ,-0.0486132241785526,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.749038457870483,-0.580160796642303\n             ,0.319929391145706,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.749038457870483,-0.580160796642303\n             ,0.319929391145706,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.875506162643433,-0.298629522323608\n             ,-0.379880726337433,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.151531577110291,0.591902196407318\n             ,0.791637539863586,0.0310389213263988,0.339698702096939,0.940021991729736,-0.167113959789276,0.136682227253914\n             ,0.976417362689972,-0.0883399024605751,0.440414160490036,0.89343798160553,-0.663558781147003,-0.701492488384247\n             ,-0.259996235370636,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.714125990867615,-0.699272274971008\n             ,-0.0322852060198784,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.281839609146118,-0.242576912045479\n             ,0.92829030752182,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.504859209060669,-0.313114404678345\n             ,0.804410696029663,-0.597946286201477,-0.554786086082459,0.578508973121643,0.457004487514496,0.0586743913590908\n             ,-0.887526988983154,0.333853751420975,0.150268703699112,-0.930570244789124,0.365138918161392,0.402016133069992\n             ,-0.83967649936676,0.552935898303986,0.244290605187416,-0.796607792377472,0.493055760860443,0.288357526063919\n             ,-0.820820271968842,0.365138918161392,0.402016133069992,-0.83967649936676,0.333853751420975,0.150268703699112\n             ,-0.930570244789124,0.491784423589706,0.100257873535156,-0.864925682544708,-0.77697879076004,-0.497155666351318\n             ,0.386186748743057,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.699702382087708,-0.709872841835022\n             ,0.080604575574398,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.77697879076004,-0.497155666351318\n             ,0.386186748743057,-0.708291888237,-0.455330967903137,0.539440810680389,-0.808354198932648,-0.575751066207886\n             ,0.122776761651039,-0.799912631511688,-0.600115418434143,-0.00112808460835367,0.25180572271347,-0.338099181652069\n             ,-0.906798124313354,0.152081519365311,-0.148781135678291,-0.977105617523193,0.293987482786179,-0.0222472082823515\n             ,-0.955550312995911,0.320780336856842,-0.177296921610832,-0.930411577224731,0.600953817367554,0.56422370672226\n             ,0.566132545471191,0.669920027256012,0.533662140369415,0.516151010990143,0.522614181041718,0.594646036624908\n             ,0.610958755016327,0.591853797435761,0.480847299098969,0.646911799907684,0.600133121013641,0.610116124153137\n             ,0.517299294471741,0.669920027256012,0.533662140369415,0.516151010990143,0.600953817367554,0.56422370672226,0.566132545471191\n             ,0.543609440326691,0.5921830534935,0.594817638397217,0.712321758270264,0.700732469558716,-0.0396451056003571\n             ,0.781165838241577,0.623325526714325,0.0352878011763096,0.669646203517914,0.237006261944771,-0.703847944736481\n             ,0.577099621295929,0.499205440282822,-0.646335780620575,0.449265569448471,-0.0221075545996428,-0.893124639987946\n             ,0.220365136861801,0.161491006612778,-0.961956262588501,0.577099621295929,0.499205440282822,-0.646335780620575\n             ,0.669646203517914,0.237006261944771,-0.703847944736481,-0.286727339029312,-0.249588027596474,-0.924928784370422\n             ,0.220365136861801,0.161491006612778,-0.961956262588501,0.449265569448471,-0.0221075545996428,-0.893124639987946\n             ,0.0934423208236694,-0.290181279182434,-0.952398717403412,-0.524412930011749,-0.76793509721756,-0.367786258459091\n             ,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.286727339029312,-0.249588027596474,-0.924928784370422\n             ,0.0934423208236694,-0.290181279182434,-0.952398717403412,-0.628000319004059,-0.748511612415314,-0.212945908308029\n             ,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.678066968917847,-0.616290330886841,-0.400513917207718\n             ,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.659241914749146,-0.751696407794952,-0.0187781285494566\n             ,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.689479112625122,-0.7086461186409,-0.149797007441521\n             ,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.654502868652344,-0.735222280025482,0.176278829574585\n             ,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.689547598361969,-0.720895409584045,0.069526307284832\n             ,-0.659241914749146,-0.751696407794952,-0.0187781285494566,0.808014631271362,0.548655688762665,-0.214684262871742\n             ,0.571531593799591,0.820161521434784,-0.026204576715827,0.400274157524109,0.667701542377472,-0.627658545970917\n             ,0.467050135135651,0.542557895183563,-0.698208510875702,-0.128134071826935,-0.277867317199707,0.952035427093506\n             ,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.768422484397888,-0.629524946212769,0.115000896155834\n             ,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.809780776500702,-0.571567296981812,-0.132536545395851\n             ,-0.953828155994415,-0.279060304164886,-0.111072786152363,-0.441486179828644,-0.275298207998276,0.853991091251373\n             ,-0.391219317913055,-0.370447516441345,0.842446446418762,-0.0460331737995148,-0.0997519120573998,-0.99394690990448\n             ,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.760593712329865,-0.590625822544098,-0.269552141427994\n             ,0.000683139485772699,-0.280447483062744,-0.959869146347046,-0.559872090816498,-0.363111883401871,0.744777143001556\n             ,-0.0734389647841454,-0.75235915184021,0.654646813869476,-0.0565342605113983,-0.994561314582825,0.087474100291729\n             ,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.92225056886673,0.365326255559921,-0.126453906297684\n             ,0.258395105600357,-0.170487090945244,-0.950876474380493,0.260752469301224,-0.303326517343521,-0.91651576757431\n             ,0.927422702312469,0.341609179973602,-0.152283608913422,-0.684952914714813,-0.620533168315887,-0.381808966398239\n             ,-0.767736911773682,-0.476170718669891,-0.428767383098602,-0.708140134811401,-0.189787998795509,0.68008679151535\n             ,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.708140134811401,-0.189787998795509,0.68008679151535\n             ,0.251297831535339,0.359561949968338,0.89864593744278,0.272435218095779,0.357738167047501,0.893197894096375,-0.705930113792419\n             ,-0.207728907465935,0.677134692668915,0.272435218095779,0.357738167047501,0.893197894096375,0.251297831535339\n             ,0.359561949968338,0.89864593744278,0.92225056886673,0.365326255559921,-0.126453906297684,0.927422702312469,0.341609179973602\n             ,-0.152283608913422,0.769174098968506,0.351543009281158,-0.533656001091003,0.677649199962616,0.231181770563126\n             ,0.698102116584778,0.682577550411224,0.201181307435036,0.702576637268066,0.779201686382294,0.334656059741974\n             ,-0.529952883720398,0.633565187454224,0.343504458665848,-0.693253099918365,0.882170557975769,0.163093075156212\n             ,0.441786974668503,0.928486943244934,-0.278761386871338,0.24536520242691,0.765720903873444,-0.195053040981293\n             ,-0.61288321018219,-0.60441780090332,0.615803182125092,0.505436062812805,-0.394463092088699,0.67669689655304\n             ,0.621675312519073,-0.519362270832062,0.62650853395462,0.581162631511688,-0.763029158115387,0.474885076284409\n             ,0.438486844301224,-0.622686505317688,-0.240481927990913,0.744600534439087,-0.44155490398407,-0.0105606326833367\n             ,0.897172093391418,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.583746492862701,-0.193907052278519\n             ,0.788441598415375,-0.633555710315704,0.25967600941658,0.728817939758301,-0.513125777244568,0.318144857883453\n             ,0.797173619270325,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.622686505317688,-0.240481927990913\n             ,0.744600534439087,-0.519362270832062,0.62650853395462,0.581162631511688,-0.513125777244568,0.318144857883453\n             ,0.797173619270325,-0.633555710315704,0.25967600941658,0.728817939758301,-0.505132853984833,0.614961266517639\n             ,0.605527400970459,-0.763029158115387,0.474885076284409,0.438486844301224,-0.505132853984833,0.614961266517639\n             ,0.605527400970459,-0.911145687103271,0.362300097942352,0.196347072720528,-0.942745447158813,-0.331097900867462\n             ,-0.040066309273243,0.356225103139877,0.46585413813591,0.809989869594574,0.340076804161072,0.586851418018341\n             ,0.734815061092377,0.0911808460950851,0.673339366912842,0.733689427375793,0.0691882893443108,0.630300760269165\n             ,0.773261845111847,0.366583049297333,0.495457142591476,0.787489116191864,0.490533232688904,0.463574707508087\n             ,0.73788595199585,0.21572470664978,0.340408891439438,0.915196537971497,0.148562759160995,0.479341596364975,0.864962875843048\n             ,0.315255045890808,0.464517712593079,0.827549159526825,0.420910388231277,0.458904504776001,0.782458364963531\n             ,-0.11764945089817,0.119960054755211,0.985783040523529,-0.24175851047039,0.0892980098724365,0.966218769550323\n             ,0.330627292394638,0.250829428434372,-0.909818768501282,0.318814963102341,0.117576964199543,-0.94049596786499\n             ,0.387060284614563,0.0985353216528893,-0.916774332523346,0.475114166736603,0.274622708559036,-0.835971832275391\n             ,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.320780336856842,-0.177296921610832,-0.930411577224731\n             ,0.387060284614563,0.0985353216528893,-0.916774332523346,0.318814963102341,0.117576964199543,-0.94049596786499\n             ,0.387060284614563,0.0985353216528893,-0.916774332523346,0.391682207584381,0.0344884172081947,-0.919453978538513\n             ,0.406537264585495,0.167056277394295,-0.898231387138367,0.475114166736603,0.274622708559036,-0.835971832275391\n             ,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.583746492862701,-0.193907052278519,0.788441598415375\n             ,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.24175851047039,0.0892980098724365,0.966218769550323\n             ,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.714125990867615,-0.699272274971008,-0.0322852060198784\n             ,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.687927067279816,-0.688686609268188,-0.229057043790817\n             ,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.727918982505798,-0.682847082614899,-0.0620787553489208\n             ,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.685480773448944,-0.689756214618683,-0.233136162161827\n             ,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.685480773448944,-0.689756214618683,-0.233136162161827\n             ,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.564210891723633,-0.825607478618622,-0.0061880461871624\n             ,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.563665211200714,-0.803098201751709,-0.19317039847374\n             ,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.510247528553009,-0.860017955303192,-0.00407588528469205\n             ,0.472492724657059,0.634560942649841,0.611623287200928,0.765193700790405,0.545681536197662,0.341628700494766\n             ,0.821033596992493,0.463092446327209,0.333840012550354,0.457292228937149,0.637990713119507,0.619557559490204\n             ,0.578510701656342,0.581528306007385,0.571970403194427,0.472492724657059,0.634560942649841,0.611623287200928\n             ,0.457292228937149,0.637990713119507,0.619557559490204,0.529006600379944,0.562984585762024,0.63498067855835,0.629741132259369\n             ,-0.543165504932404,0.555335402488709,0.878222644329071,-0.435990631580353,0.196563258767128,0.410484403371811\n             ,-0.832323789596558,0.372477740049362,0.0891242697834969,-0.774946451187134,0.625711500644684,0.367359757423401\n             ,-0.19918592274189,-0.908499717712402,0.594084918498993,-0.202006503939629,-0.778624713420868,0.491784423589706\n             ,0.100257873535156,-0.864925682544708,0.333853751420975,0.150268703699112,-0.930570244789124,0.379243552684784\n             ,-0.345731914043427,-0.858279526233673,0.708127498626709,-0.297497063875198,-0.640352189540863,0.594084918498993\n             ,-0.202006503939629,-0.778624713420868,0.367359757423401,-0.19918592274189,-0.908499717712402,0.901673018932343\n             ,-0.243753165006638,-0.357169687747955,0.672885239124298,0.731690943241119,-0.1088752374053,0.694567322731018\n             ,0.687739253044128,-0.211165577173233,0.901673018932343,-0.243753165006638,-0.357169687747955,0.891434013843536\n             ,0.447212874889374,-0.0731168016791344,0.672885239124298,0.731690943241119,-0.1088752374053,0.645817458629608\n             ,0.37744864821434,0.66366583108902,0.659731268882751,0.252948880195618,0.70765209197998,0.659283638000488,0.56208461523056\n             ,0.499405652284622,0.381191462278366,0.807218015193939,0.450657457113266,0.543150007724762,0.5245680809021,0.65560382604599\n             ,0.378357648849487,0.724991083145142,0.575528800487518,0.381191462278366,0.807218015193939,0.450657457113266\n             ,0.274746268987656,0.549388289451599,0.789105176925659,0.0985177978873253,0.656356811523438,0.747990608215332\n             ,0.599293649196625,-0.39963087439537,-0.693644165992737,0.641741633415222,-0.441758394241333,-0.626910865306854\n             ,0.720091462135315,-0.402850449085236,-0.56496000289917,0.0103344274684787,0.766447365283966,0.642223954200745\n             ,0.248548656702042,0.411066323518753,0.877067863941193,0.200062945485115,0.83070033788681,0.519530355930328,0.169032081961632\n             ,0.119583055377007,0.978329241275787,0.19136768579483,-0.0293898787349463,0.981078326702118,0.2811399102211,0.126565098762512\n             ,0.951284229755402,0.963335692882538,-0.129456236958504,-0.235001027584076,0.911918580532074,-0.233281582593918\n             ,-0.33761540055275,0.853671669960022,-0.248006701469421,-0.457970976829529,0.316321402788162,0.603275775909424\n             ,-0.732119560241699,0.181251630187035,0.380190223455429,-0.906974792480469,0.237173900008202,0.452350407838821\n             ,-0.85972535610199,0.544504523277283,-0.49831086397171,-0.674685955047607,0.751560986042023,-0.51889967918396\n             ,-0.407307237386703,0.85130912065506,-0.28415909409523,-0.441051483154297,0.394706159830093,-0.349102348089218\n             ,-0.84990268945694,0.415907889604568,-0.581008851528168,-0.699606537818909,0.544504523277283,-0.49831086397171\n             ,-0.674685955047607,0.934587121009827,-0.0746875330805779,0.347805470228195,0.888165593147278,-0.00891786906868219\n             ,0.459437042474747,0.890053927898407,-0.0586380586028099,0.452068090438843,0.316321402788162,0.603275775909424\n             ,-0.732119560241699,0.613006412982941,0.632095158100128,-0.474003076553345,0.508885145187378,0.79451996088028\n             ,-0.331321537494659,0.544504523277283,-0.49831086397171,-0.674685955047607,0.415907889604568,-0.581008851528168\n             ,-0.699606537818909,0.751560986042023,-0.51889967918396,-0.407307237386703,0.079964205622673,0.0645997598767281\n             ,-0.994702279567719,0.111387610435486,-0.211319342255592,-0.9710493683815,-0.109398990869522,-0.127084732055664\n             ,-0.985840439796448,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.00605733366683126,-0.0303982496261597\n             ,-0.999519467353821,0.079964205622673,0.0645997598767281,-0.994702279567719,0.0810841843485832,0.166241332888603\n             ,-0.982745766639709,0.0385239869356155,0.185332536697388,-0.981920421123505,-0.0618164576590061,-0.231827840209007\n             ,-0.970790684223175,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,-0.362747877836227,-0.08218814432621\n             ,-0.928255915641785,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.160292729735374,-0.153213784098625\n             ,-0.975106060504913,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.03669124096632,-0.316752940416336\n             ,-0.947798132896423,0.859270870685577,-0.205668747425079,0.468352407217026,0.954777777194977,-0.0263348873704672\n             ,0.296151697635651,0.888511061668396,-0.437404543161392,0.138655453920364,0.888511061668396,-0.437404543161392\n             ,0.138655453920364,0.954777777194977,-0.0263348873704672,0.296151697635651,0.789399027824402,-0.501962423324585\n             ,0.353387653827667,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.964077115058899,-0.108696304261684\n             ,0.242364108562469,0.922331035137177,0.0571805983781815,0.382146298885345,0.963335692882538,-0.129456236958504\n             ,-0.235001027584076,0.853671669960022,-0.248006701469421,-0.457970976829529,0.778241097927094,-0.324259251356125\n             ,-0.53777015209198,0.250419557094574,0.807709574699402,0.533755779266357,0.378357648849487,0.724991083145142\n             ,0.575528800487518,0.0415897369384766,0.750063896179199,0.660056412220001,-0.362747877836227,-0.08218814432621\n             ,-0.928255915641785,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,-0.335044384002686,0.0369866825640202\n             ,-0.941476106643677,0.648516714572906,0.651950538158417,0.392920613288879,0.889242053031921,-0.13137923181057\n             ,0.438164442777634,0.562915802001953,0.509836494922638,0.650532484054565,0.29329439997673,0.882676124572754,0.367234617471695\n             ,0.291106730699539,0.735121071338654,0.612253129482269,0.233477383852005,0.295218259096146,0.926463425159454\n             ,0.404132395982742,0.670274078845978,0.622422397136688,0.0895038321614265,0.749099910259247,0.65638279914856\n             ,0.0201202612370253,0.491976112127304,0.870376169681549,-0.0346120446920395,0.37646210193634,0.9257852435112\n             ,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.0824126973748207,0.271421998739243,0.958925545215607\n             ,-0.10020349919796,0.182739198207855,0.978041768074036,0.727367699146271,-0.668511748313904,0.15501070022583\n             ,0.888511061668396,-0.437404543161392,0.138655453920364,0.789399027824402,-0.501962423324585,0.353387653827667\n             ,0.961808860301971,0.241085827350616,0.129620164632797,0.997147977352142,0.063211515545845,-0.0412334688007832\n             ,0.98869800567627,0.0949656590819359,0.116007700562477,0.932883560657501,0.00894892401993275,-0.36006686091423\n             ,0.97384238243103,-0.111237548291683,-0.198134258389473,0.983769476413727,0.170430228114128,-0.0561354644596577\n             ,0.88943737745285,-0.310296326875687,-0.335585117340088,0.993755042552948,-0.10124122351408,0.0469168499112129\n             ,0.933888673782349,-0.271616876125336,-0.232542887330055,0.930458664894104,-0.278987765312195,0.237513080239296\n             ,0.799426317214966,-0.355103880167007,0.484581023454666,0.932736575603485,0.169303506612778,0.31833752989769\n             ,0.799426317214966,-0.355103880167007,0.484581023454666,0.930458664894104,-0.278987765312195,0.237513080239296\n             ,0.789399027824402,-0.501962423324585,0.353387653827667,0.963078618049622,0.14069077372551,0.229533597826958\n             ,0.961808860301971,0.241085827350616,0.129620164632797,0.400240421295166,-0.835451424121857,-0.376601278781891\n             ,0.280021280050278,-0.723065078258514,0.631478428840637,0.963078618049622,0.14069077372551,0.229533597826958\n             ,0.400240421295166,-0.835451424121857,-0.376601278781891,0.963078618049622,0.14069077372551,0.229533597826958\n             ,0.88108503818512,0.403870642185211,0.246125221252441,0.961808860301971,0.241085827350616,0.129620164632797,0.932883560657501\n             ,0.00894892401993275,-0.36006686091423,0.900146186351776,-0.397185921669006,-0.178830027580261,0.88943737745285\n             ,-0.310296326875687,-0.335585117340088,0.998818516731262,0.0184048507362604,0.0449758432805538,0.600287616252899\n             ,-0.73423707485199,0.317097216844559,0.983769476413727,0.170430228114128,-0.0561354644596577,0.468301683664322\n             ,0.50049239397049,0.728148937225342,0.636708438396454,0.429240256547928,0.640589714050293,0.434262931346893,0.0580337457358837\n             ,0.898914754390717,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.0891242697834969,-0.774946451187134\n             ,0.625711500644684,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.410484403371811,-0.832323789596558\n             ,0.372477740049362,-0.418209999799728,-0.452997386455536,0.787333309650421,-0.0981862172484398,-0.372313976287842\n             ,0.922898590564728,0.0891242697834969,-0.774946451187134,0.625711500644684,0.958027005195618,0.285412758588791\n             ,-0.0269038528203964,0.998818516731262,0.0184048507362604,0.0449758432805538,0.983769476413727,0.170430228114128\n             ,-0.0561354644596577,0.21975277364254,-0.661429107189178,-0.717091500759125,-0.80677717924118,-0.297363102436066\n             ,-0.510573983192444,0.400240421295166,-0.835451424121857,-0.376601278781891,-0.0173206701874733,0.471247583627701\n             ,0.881830871105194,0.296016186475754,0.207150265574455,0.932450115680695,-0.0981862172484398,-0.372313976287842\n             ,0.922898590564728,0.88943737745285,-0.310296326875687,-0.335585117340088,0.410484403371811,-0.832323789596558\n             ,0.372477740049362,0.878222644329071,-0.435990631580353,0.196563258767128,0.369285374879837,-0.387989014387131\n             ,0.844448208808899,0.232206523418427,-0.020738473162055,0.972445428371429,0.434262931346893,0.0580337457358837\n             ,0.898914754390717,0.522614181041718,0.594646036624908,0.610958755016327,0.669920027256012,0.533662140369415\n             ,0.516151010990143,0.645030558109283,0.393106490373611,0.655288398265839,0.0273940563201904,-0.397710710763931\n             ,-0.917101860046387,0.0934423208236694,-0.290181279182434,-0.952398717403412,0.365171790122986,-0.00518579035997391\n             ,-0.930925726890564,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.808354198932648,-0.575751066207886\n             ,0.122776761651039,-0.708291888237,-0.455330967903137,0.539440810680389,-0.692679047584534,-0.143219769001007\n             ,0.706883192062378,-0.400625139474869,-0.141950860619545,0.905179262161255,-0.708291888237,-0.455330967903137\n             ,0.539440810680389,0.214979261159897,-0.17779715359211,-0.96029794216156,0.340121984481812,0.0539852678775787\n             ,-0.938830494880676,0.213511228561401,-0.0973462760448456,-0.972078502178192,-0.504859209060669,-0.313114404678345\n             ,0.804410696029663,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.214763179421425,0.201751604676247\n             ,0.955600917339325,0.204352244734764,-0.29480442404747,-0.933450877666473,0.129470959305763,-0.140533372759819\n             ,-0.981574058532715,0.170904099941254,-0.332066059112549,-0.9276442527771,-0.495001792907715,-0.723142206668854\n             ,-0.481703817844391,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.302494555711746,-0.645085394382477\n             ,-0.701685011386871,0.64373791217804,0.242922231554985,0.725665390491486,0.452383905649185,-0.0666286796331406\n             ,0.889330863952637,0.530508995056152,-0.19520378112793,0.824897408485413,-0.582614302635193,-0.811018943786621\n             ,-0.0529977157711983,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.590254783630371,-0.794654071331024\n             ,0.141859948635101,0.56834876537323,0.804110050201416,-0.174317732453346,0.372105628252029,0.872971594333649\n             ,0.315369695425034,0.675231993198395,0.699040055274963,-0.235382169485092,0.0771664902567863,0.0724747255444527\n             ,0.994380593299866,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.471450448036194,-0.245001286268234\n             ,0.847176969051361,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.808354198932648,-0.575751066207886\n             ,0.122776761651039,-0.755765080451965,-0.64697390794754,-0.101212374866009,0.575007021427155,0.477127492427826\n             ,-0.664617359638214,0.585969090461731,0.300280570983887,-0.752643227577209,0.56600546836853,0.354604989290237\n             ,-0.744239985942841,0.585969090461731,0.300280570983887,-0.752643227577209,0.575007021427155,0.477127492427826\n             ,-0.664617359638214,0.459090322256088,0.385543048381805,-0.800370275974274,0.56834876537323,0.804110050201416\n             ,-0.174317732453346,0.675231993198395,0.699040055274963,-0.235382169485092,0.483205556869507,0.452571898698807\n             ,-0.749460518360138,0.494146823883057,0.54429703950882,-0.677908360958099,0.33696186542511,0.354342758655548\n             ,-0.87229460477829,0.575007021427155,0.477127492427826,-0.664617359638214,0.25180572271347,-0.338099181652069\n             ,-0.906798124313354,0.320780336856842,-0.177296921610832,-0.930411577224731,0.204112648963928,-0.444034606218338\n             ,-0.872451305389404,-0.107540838420391,-0.360320240259171,-0.926609039306641,-0.374727010726929,-0.451056748628616\n             ,-0.810016989707947,-0.442572265863419,-0.578949928283691,-0.684796929359436,0.75712126493454,0.653194308280945\n             ,0.0102259330451488,0.598047912120819,0.525615990161896,-0.605034232139587,0.729157328605652,0.398623704910278\n             ,-0.556263148784637,0.296016186475754,0.207150265574455,0.932450115680695,0.645030558109283,0.393106490373611\n             ,0.655288398265839,0.639394581317902,-0.0537512600421906,0.766997635364532,-0.446602612733841,-0.102232590317726\n             ,-0.888872683048248,0.379243552684784,-0.345731914043427,-0.858279526233673,0.171164497733116,0.182280600070953\n             ,-0.968233704566956,0.645030558109283,0.393106490373611,0.655288398265839,0.296016186475754,0.207150265574455\n             ,0.932450115680695,0.522614181041718,0.594646036624908,0.610958755016327,0.367359757423401,-0.19918592274189\n             ,-0.908499717712402,0.333853751420975,0.150268703699112,-0.930570244789124,0.457004487514496,0.0586743913590908\n             ,-0.887526988983154,0.56834876537323,0.804110050201416,-0.174317732453346,0.716162204742432,0.693212687969208\n             ,0.0810423269867897,0.461020469665527,0.72527813911438,0.511303961277008,0.528455495834351,0.430389046669006\n             ,0.731778681278229,0.315534800291061,0.608373045921326,0.728230714797974,0.543609440326691,0.5921830534935,0.594817638397217\n             ,0.64373791217804,0.242922231554985,0.725665390491486,0.421373724937439,0.10162215679884,0.901175439357758,0.487773865461349\n             ,0.149537533521652,0.860066950321198,0.521424174308777,0.414691746234894,-0.745753049850464,0.459090322256088\n             ,0.385543048381805,-0.800370275974274,0.575007021427155,0.477127492427826,-0.664617359638214,0.75712126493454\n             ,0.653194308280945,0.0102259330451488,0.621278166770935,0.634226977825165,0.460184365510941,0.758696973323822\n             ,0.616848468780518,0.209467962384224,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.118136525154114\n             ,-0.743892669677734,0.65777462720871,-0.492057383060455,-0.813641428947449,0.309624224901199,0.361584514379501\n             ,0.504137456417084,0.78428441286087,0.20168174803257,0.693581879138947,0.691569745540619,-0.214763179421425,0.201751604676247\n             ,0.955600917339325,0.56834876537323,0.804110050201416,-0.174317732453346,0.461020469665527,0.72527813911438,0.511303961277008\n             ,0.319102138280869,0.857758343219757,0.403019160032272,-0.394339233636856,-0.615044772624969,0.682800531387329\n             ,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.708291888237,-0.455330967903137,0.539440810680389\n             ,0.633797287940979,0.754054367542267,-0.172345638275146,0.598047912120819,0.525615990161896,-0.605034232139587\n             ,0.75712126493454,0.653194308280945,0.0102259330451488,0.571536600589752,0.54747611284256,-0.611241221427917\n             ,0.598047912120819,0.525615990161896,-0.605034232139587,0.633797287940979,0.754054367542267,-0.172345638275146\n             ,0.75712126493454,0.653194308280945,0.0102259330451488,0.598974168300629,0.55623596906662,0.576048195362091,0.621278166770935\n             ,0.634226977825165,0.460184365510941,0.351930469274521,0.00348040298558772,-0.936019718647003,0.340121984481812\n             ,0.0539852678775787,-0.938830494880676,0.214979261159897,-0.17779715359211,-0.96029794216156,0.320780336856842\n             ,-0.177296921610832,-0.930411577224731,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.391682207584381\n             ,0.0344884172081947,-0.919453978538513,0.595824003219604,0.198742762207985,-0.778135597705841,0.129470959305763\n             ,-0.140533372759819,-0.981574058532715,0.474989861249924,-0.106995098292828,-0.873462498188019,0.595824003219604\n             ,0.198742762207985,-0.778135597705841,0.474989861249924,-0.106995098292828,-0.873462498188019,0.833576500415802\n             ,0.26908865571022,-0.482432901859283,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.272565364837646\n             ,-0.405919879674912,-0.872317135334015,0.218467608094215,-0.0307074077427387,-0.975360929965973,-0.353174358606339\n             ,-0.401916116476059,-0.844826221466064,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.424547016620636\n             ,-0.828336775302887,-0.365538060665131,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.0785726085305214\n             ,-0.289755910634995,-0.953869938850403,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.768422484397888\n             ,-0.629524946212769,0.115000896155834,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.45667690038681\n             ,-0.210856854915619,-0.864283263683319,-0.45667690038681,-0.210856854915619,-0.864283263683319,0.67058277130127\n             ,0.452658027410507,-0.587724030017853,0.623998522758484,0.368696242570877,-0.68897670507431,0.621371865272522\n             ,0.365546494722366,-0.6930171251297,0.633565187454224,0.343504458665848,-0.693253099918365,-0.494617521762848\n             ,-0.0259672924876213,-0.86872273683548,-0.0629069060087204,-0.574297785758972,-0.81622588634491,0.463766068220139\n             ,-0.858605027198792,-0.218445509672165,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.765720903873444\n             ,-0.195053040981293,-0.61288321018219,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.0629069060087204\n             ,-0.574297785758972,-0.81622588634491,0.463766068220139,-0.858605027198792,-0.218445509672165,0.21460884809494\n             ,-0.781227350234985,0.586196959018707,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.928486943244934\n             ,-0.278761386871338,0.24536520242691,0.21460884809494,-0.781227350234985,0.586196959018707,0.463766068220139\n             ,-0.858605027198792,-0.218445509672165,0.765720903873444,-0.195053040981293,-0.61288321018219,0.928486943244934\n             ,-0.278761386871338,0.24536520242691,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.926164984703064\n             ,-0.361916661262512,0.105994082987309,-0.128134071826935,-0.277867317199707,0.952035427093506,-0.928529560565948\n             ,-0.339161455631256,0.15100422501564,-0.128134071826935,-0.277867317199707,0.952035427093506,0.882170557975769\n             ,0.163093075156212,0.441786974668503,0.874470949172974,0.181272923946381,0.449934005737305,-0.113240525126457\n             ,-0.398993462324142,0.909934520721436,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.768422484397888\n             ,-0.629524946212769,0.115000896155834,0.838517308235168,0.23515185713768,0.491520494222641,0.823110163211823\n             ,0.325570344924927,0.465288698673248,-0.113240525126457,-0.398993462324142,0.909934520721436,0.88580310344696\n             ,-0.0711137056350708,0.458580136299133,0.463198840618134,-0.858536601066589,-0.219913169741631,0.221149787306786\n             ,-0.755684494972229,0.616468727588654,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.00839155726134777\n             ,-0.974679827690125,-0.223447620868683,0.463198840618134,-0.858536601066589,-0.219913169741631,0.463198840618134\n             ,-0.858536601066589,-0.219913169741631,-0.00699111027643085,-0.506333768367767,-0.862309277057648,-0.0514638796448708\n             ,-0.993651986122131,-0.100036129355431,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.905055105686188\n             ,0.328626185655594,-0.269963204860687,0.744133472442627,0.145097494125366,-0.652082920074463,0.744133472442627\n             ,0.145097494125366,-0.652082920074463,-0.00699111027643085,-0.506333768367767,-0.862309277057648,0.463198840618134\n             ,-0.858536601066589,-0.219913169741631,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.424547016620636\n             ,-0.828336775302887,-0.365538060665131,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.299353003501892\n             ,-0.946574151515961,-0.119938470423222,0.221149787306786,-0.755684494972229,0.616468727588654,0.463198840618134\n             ,-0.858536601066589,-0.219913169741631,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.960252404212952\n             ,0.207041427493095,0.18721416592598,0.905055105686188,0.328626185655594,-0.269963204860687,-0.809780776500702\n             ,-0.571567296981812,-0.132536545395851,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.209620162844658\n             ,-0.216750532388687,-0.953456163406372,-0.209620162844658,-0.216750532388687,-0.953456163406372,0.728366911411285\n             ,0.471724718809128,-0.496948093175888,0.769174098968506,0.351543009281158,-0.533656001091003,-0.286078542470932\n             ,-0.0728482380509377,-0.955433011054993,0.779201686382294,0.334656059741974,-0.529952883720398,0.780810236930847\n             ,0.338432997465134,-0.525165200233459,-0.94000107049942,-0.321145743131638,-0.115166857838631,-0.953828155994415\n             ,-0.279060304164886,-0.111072786152363,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.11994443833828\n             ,-0.617316663265228,-0.77751749753952,0.470961600542068,-0.874415993690491,-0.116584025323391,-0.383375316858292\n             ,-0.909262895584106,-0.162062838673592,0.867587566375732,-0.240597397089005,-0.435206592082977,0.470961600542068\n             ,-0.874415993690491,-0.116584025323391,0.11994443833828,-0.617316663265228,-0.77751749753952,0.470961600542068\n             ,-0.874415993690491,-0.116584025323391,0.0104025090113282,-0.818762242794037,0.574038505554199,-0.383375316858292\n             ,-0.909262895584106,-0.162062838673592,0.824216485023499,-0.374453365802765,0.42479619383812,0.0104025090113282\n             ,-0.818762242794037,0.574038505554199,0.470961600542068,-0.874415993690491,-0.116584025323391,0.470961600542068\n             ,-0.874415993690491,-0.116584025323391,0.867587566375732,-0.240597397089005,-0.435206592082977,0.824216485023499\n             ,-0.374453365802765,0.42479619383812,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.953828155994415\n             ,-0.279060304164886,-0.111072786152363,-0.94000107049942,-0.321145743131638,-0.115166857838631,0.694519758224487\n             ,0.188186302781105,0.694426536560059,0.682577550411224,0.201181307435036,0.702576637268066,-0.441486179828644\n             ,-0.275298207998276,0.853991091251373,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.809780776500702\n             ,-0.571567296981812,-0.132536545395851,-0.391219317913055,-0.370447516441345,0.842446446418762,0.677649199962616\n             ,0.231181770563126,0.698102116584778,0.67560875415802,0.409798443317413,0.612876892089844,-0.391219317913055\n             ,-0.370447516441345,0.842446446418762,-0.0565342605113983,-0.994561314582825,0.087474100291729,-0.260551959276199\n             ,-0.96073442697525,0.0954045951366425,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.245216280221939\n             ,-0.962543606758118,-0.115666791796684,-0.0514638796448708,-0.993651986122131,-0.100036129355431,-0.0565342605113983\n             ,-0.994561314582825,0.087474100291729,0.964045107364655,-0.123944662511349,0.23506323993206,0.628294765949249\n             ,0.216130942106247,0.747350692749023,0.834237515926361,0.296865254640579,0.464670658111572,0.628294765949249\n             ,0.216130942106247,0.747350692749023,0.964045107364655,-0.123944662511349,0.23506323993206,0.284337043762207\n             ,-0.628438115119934,0.724029004573822,0.569195508956909,-0.757238268852234,-0.320322901010513,0.284337043762207\n             ,-0.628438115119934,0.724029004573822,0.964045107364655,-0.123944662511349,0.23506323993206,0.869658291339874\n             ,0.203361555933952,-0.449820637702942,0.569195508956909,-0.757238268852234,-0.320322901010513,0.964045107364655\n             ,-0.123944662511349,0.23506323993206,0.957878828048706,0.257844924926758,-0.126428335905075,0.964045107364655\n             ,-0.123944662511349,0.23506323993206,0.834237515926361,0.296865254640579,0.464670658111572,-0.0565342605113983\n             ,-0.994561314582825,0.087474100291729,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.569195508956909\n             ,-0.757238268852234,-0.320322901010513,0.569195508956909,-0.757238268852234,-0.320322901010513,-0.0514638796448708\n             ,-0.993651986122131,-0.100036129355431,0.284337043762207,-0.628438115119934,0.724029004573822,-0.760593712329865\n             ,-0.590625822544098,-0.269552141427994,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.000683139485772699\n             ,-0.280447483062744,-0.959869146347046,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.874346256256104\n             ,0.418091505765915,-0.246410429477692,0.877589702606201,0.353748112916946,-0.323571652173996,-0.0460331737995148\n             ,-0.0997519120573998,-0.99394690990448,0.864371955394745,0.365095496177673,-0.345783799886703,0.886669814586639\n             ,0.303469926118851,-0.348887741565704,-0.899728536605835,-0.311181008815765,-0.30603089928627,-0.903714656829834\n             ,-0.299481302499771,-0.305958777666092,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.246053159236908\n             ,-0.622352182865143,-0.743058264255524,0.416420161724091,-0.908685982227325,0.0297335833311081,-0.366940021514893\n             ,-0.90958160161972,-0.194977775216103,0.927240550518036,-0.288017064332962,-0.239313811063766,0.416420161724091\n             ,-0.908685982227325,0.0297335833311081,0.246053159236908,-0.622352182865143,-0.743058264255524,0.416420161724091\n             ,-0.908685982227325,0.0297335833311081,-0.16863539814949,-0.750330984592438,0.639191269874573,-0.366940021514893\n             ,-0.90958160161972,-0.194977775216103,0.669099032878876,-0.368822127580643,0.645195066928864,-0.16863539814949\n             ,-0.750330984592438,0.639191269874573,0.416420161724091,-0.908685982227325,0.0297335833311081,0.416420161724091\n             ,-0.908685982227325,0.0297335833311081,0.927240550518036,-0.288017064332962,-0.239313811063766,0.669099032878876\n             ,-0.368822127580643,0.645195066928864,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.903714656829834\n             ,-0.299481302499771,-0.305958777666092,-0.899728536605835,-0.311181008815765,-0.30603089928627,0.524607241153717\n             ,0.204550698399544,0.826405644416809,0.484563320875168,0.265936732292175,0.833352267742157,-0.591978549957275\n             ,-0.234647616744041,0.771039485931396,-0.695965886116028,-0.67816036939621,-0.236071988940239,-0.760593712329865\n             ,-0.590625822544098,-0.269552141427994,-0.559872090816498,-0.363111883401871,0.744777143001556,0.503586828708649\n             ,0.359971582889557,0.785379409790039,-0.559872090816498,-0.363111883401871,0.744777143001556,0.478091299533844\n             ,0.270657926797867,0.835567474365234,-0.0734389647841454,-0.75235915184021,0.654646813869476,0.119874052703381\n             ,-0.978117644786835,0.170047551393509,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.119874052703381\n             ,-0.978117644786835,0.170047551393509,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.260551959276199\n             ,-0.96073442697525,0.0954045951366425,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.0565342605113983\n             ,-0.994561314582825,0.087474100291729,0.119874052703381,-0.978117644786835,0.170047551393509,0.119874052703381\n             ,-0.978117644786835,0.170047551393509,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.468902409076691\n             ,-0.882473528385162,-0.0370272994041443,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.701657354831696\n             ,-0.649943113327026,0.291977494955063,-0.468902409076691,-0.882473528385162,-0.0370272994041443,0.119874052703381\n             ,-0.978117644786835,0.170047551393509,0.437012165784836,-0.816920578479767,-0.376378893852234,-0.36907297372818\n             ,-0.926835656166077,-0.0689988732337952,-0.684952914714813,-0.620533168315887,-0.381808966398239,-0.665418803691864\n             ,-0.653117716312408,-0.361462414264679,0.260752469301224,-0.303326517343521,-0.91651576757431,0.927422702312469\n             ,0.341609179973602,-0.152283608913422,0.260752469301224,-0.303326517343521,-0.91651576757431,0.914490401744843\n             ,0.386459112167358,-0.119819387793541,0.258395105600357,-0.170487090945244,-0.950876474380493,0.92225056886673\n             ,0.365326255559921,-0.126453906297684,0.941704988479614,0.318803399801254,-0.107499539852142,-0.768858969211578\n             ,-0.468379706144333,-0.435288727283478,-0.767736911773682,-0.476170718669891,-0.428767383098602,0.258395105600357\n             ,-0.170487090945244,-0.950876474380493,0.48573312163353,-0.643503189086914,-0.591580092906952,0.480270147323608\n             ,-0.844779372215271,0.235983863472939,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.974766612052917\n             ,-0.217580199241638,0.0498894527554512,0.480270147323608,-0.844779372215271,0.235983863472939,0.48573312163353\n             ,-0.643503189086914,-0.591580092906952,0.480270147323608,-0.844779372215271,0.235983863472939,-0.248893335461617\n             ,-0.684883832931519,0.684825658798218,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.527618527412415\n             ,-0.248120784759521,0.812437534332275,-0.248893335461617,-0.684883832931519,0.684825658798218,0.480270147323608\n             ,-0.844779372215271,0.235983863472939,0.480270147323608,-0.844779372215271,0.235983863472939,0.974766612052917\n             ,-0.217580199241638,0.0498894527554512,0.527618527412415,-0.248120784759521,0.812437534332275,-0.708140134811401\n             ,-0.189787998795509,0.68008679151535,-0.767736911773682,-0.476170718669891,-0.428767383098602,-0.768858969211578\n             ,-0.468379706144333,-0.435288727283478,0.287435591220856,0.297283440828323,0.910496234893799,0.251297831535339\n             ,0.359561949968338,0.89864593744278,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.705930113792419\n             ,-0.207728907465935,0.677134692668915,-0.665418803691864,-0.653117716312408,-0.361462414264679,-0.684952914714813\n             ,-0.620533168315887,-0.381808966398239,0.272435218095779,0.357738167047501,0.893197894096375,0.307352930307388\n             ,0.437818199396133,0.844896078109741,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.701657354831696\n             ,-0.649943113327026,0.291977494955063,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.633391082286835\n             ,-0.307917952537537,0.709931194782257,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.589905083179474\n             ,-0.166010066866875,0.790223181247711,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.784540235996246\n             ,-0.611652791500092,0.10187029838562,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.701657354831696\n             ,-0.649943113327026,0.291977494955063,-0.392839103937149,-0.172498524188995,0.903283834457397,-0.725724279880524\n             ,-0.448904931545258,0.521352767944336,-0.589905083179474,-0.166010066866875,0.790223181247711,-0.229229316115379\n             ,-0.896437346935272,-0.379280924797058,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.223597481846809\n             ,-0.973583161830902,0.046260129660368,-0.223597481846809,-0.973583161830902,0.046260129660368,0.571861207485199\n             ,-0.818909585475922,0.0485987178981304,-0.229229316115379,-0.896437346935272,-0.379280924797058,0.567480087280273\n             ,-0.0757819190621376,0.819892346858978,0.571861207485199,-0.818909585475922,0.0485987178981304,-0.183004111051559\n             ,-0.709960997104645,0.680047690868378,-0.183004111051559,-0.709960997104645,0.680047690868378,0.571861207485199\n             ,-0.818909585475922,0.0485987178981304,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.223597481846809\n             ,-0.973583161830902,0.046260129660368,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.725724279880524\n             ,-0.448904931545258,0.521352767944336,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.183004111051559\n             ,-0.709960997104645,0.680047690868378,-0.223597481846809,-0.973583161830902,0.046260129660368,0.735555529594421\n             ,-0.454784423112869,-0.502124667167664,0.691691398620605,-0.350874394178391,-0.631229043006897,-0.279823988676071\n             ,-0.630851566791534,-0.723688364028931,0.957826614379883,0.161021858453751,0.237991765141487,0.691691398620605\n             ,-0.350874394178391,-0.631229043006897,0.735555529594421,-0.454784423112869,-0.502124667167664,0.0493573248386383\n             ,-0.726132214069366,0.685781180858612,-0.56933456659317,0.0568463616073132,0.820138216018677,-0.765611350536346\n             ,-0.587060868740082,0.263056576251984,0.245743036270142,0.103760361671448,0.963765621185303,-0.56933456659317\n             ,0.0568463616073132,0.820138216018677,0.0493573248386383,-0.726132214069366,0.685781180858612,-0.911145687103271\n             ,0.362300097942352,0.196347072720528,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.965597808361053\n             ,0.00630215974524617,-0.259963750839233,-0.633555710315704,0.25967600941658,0.728817939758301,-0.622686505317688\n             ,-0.240481927990913,0.744600534439087,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.993846356868744\n             ,-0.0301143601536751,-0.106595493853092,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.279823988676071\n             ,-0.630851566791534,-0.723688364028931,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.237416341900826\n             ,-0.918983161449432,-0.314806878566742,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.229229316115379\n             ,-0.896437346935272,-0.379280924797058,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.942745447158813\n             ,-0.331097900867462,-0.040066309273243,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.237416341900826\n             ,-0.918983161449432,-0.314806878566742,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.942745447158813\n             ,-0.331097900867462,-0.040066309273243,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.630859076976776\n             ,-0.676938772201538,-0.379171073436737,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.930138111114502\n             ,-0.0125236622989178,0.366996258497238,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.844545185565948\n             ,-0.263896226882935,-0.465942233800888,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.965597808361053\n             ,0.00630215974524617,-0.259963750839233,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.630859076976776\n             ,-0.676938772201538,-0.379171073436737,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.754156410694122\n             ,-0.292590618133545,-0.587910532951355,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.844545185565948\n             ,-0.263896226882935,-0.465942233800888,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.755157172679901\n             ,-0.459198147058487,-0.46784046292305,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.507598042488098\n             ,-0.818433046340942,-0.269279778003693,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.630859076976776\n             ,-0.676938772201538,-0.379171073436737,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.507598042488098\n             ,-0.818433046340942,-0.269279778003693,-0.223597481846809,-0.973583161830902,0.046260129660368,0.00839155726134777\n             ,-0.974679827690125,-0.223447620868683,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.424547016620636\n             ,-0.828336775302887,-0.365538060665131,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.784540235996246\n             ,-0.611652791500092,0.10187029838562,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.714628040790558\n             ,-0.682467877864838,-0.153441905975342,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.468902409076691\n             ,-0.882473528385162,-0.0370272994041443,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.245216280221939\n             ,-0.962543606758118,-0.115666791796684,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.245216280221939\n             ,-0.962543606758118,-0.115666791796684,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.0514638796448708\n             ,-0.993651986122131,-0.100036129355431,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.223597481846809\n             ,-0.973583161830902,0.046260129660368,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.507598042488098\n             ,-0.818433046340942,-0.269279778003693,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.784540235996246\n             ,-0.611652791500092,0.10187029838562,0.957826614379883,0.161021858453751,0.237991765141487,0.199689194560051\n             ,0.642064154148102,0.740187704563141,0.18985190987587,0.684443712234497,0.703912675380707,0.84142130613327,0.443432748317719\n             ,-0.30883252620697,0.736901640892029,0.310691028833389,-0.600372433662415,0.609626173973084,0.347123831510544\n             ,-0.712643682956696,0.820404410362244,0.42123407125473,-0.386650294065475,0.690612375736237,0.305584073066711\n             ,-0.655494391918182,0.736901640892029,0.310691028833389,-0.600372433662415,0.693649888038635,0.505129396915436\n             ,0.513511538505554,0.190256670117378,0.381372839212418,0.904630959033966,0.0841809809207916,0.380945682525635\n             ,0.920757293701172,0.190256670117378,0.381372839212418,0.904630959033966,0.394909024238586,0.532412230968475\n             ,0.748721599578857,0.30104210972786,0.404300183057785,0.863663733005524,0.30104210972786,0.404300183057785,0.863663733005524\n             ,0.340076804161072,0.586851418018341,0.734815061092377,0.356225103139877,0.46585413813591,0.809989869594574,0.568666934967041\n             ,0.406713992357254,-0.714983642101288,0.690612375736237,0.305584073066711,-0.655494391918182,0.894895136356354\n             ,0.433114320039749,-0.107586048543453,0.982857048511505,0.136188626289368,-0.124276459217072,0.693649888038635\n             ,0.505129396915436,0.513511538505554,0.914490401744843,0.386459112167358,-0.119819387793541,0.307352930307388\n             ,0.437818199396133,0.844896078109741,0.693649888038635,0.505129396915436,0.513511538505554,0.0841809809207916\n             ,0.380945682525635,0.920757293701172,0.982857048511505,0.136188626289368,-0.124276459217072,0.853275120258331\n             ,-0.0167487524449825,0.521191954612732,0.936653733253479,0.265634030103683,0.228294312953949,0.853275120258331\n             ,-0.0167487524449825,0.521191954612732,0.460785627365112,0.218516558408737,0.860190212726593,0.646180808544159\n             ,0.374157816171646,0.665173888206482,0.340076804161072,0.586851418018341,0.734815061092377,0.394909024238586\n             ,0.532412230968475,0.748721599578857,0.39249575138092,0.576124608516693,0.716957092285156,0.820957541465759,0.472796261310577\n             ,0.320144385099411,0.503586828708649,0.359971582889557,0.785379409790039,0.874346256256104,0.418091505765915\n             ,-0.246410429477692,0.503586828708649,0.359971582889557,0.785379409790039,0.820957541465759,0.472796261310577\n             ,0.320144385099411,0.460785627365112,0.218516558408737,0.860190212726593,0.394909024238586,0.532412230968475\n             ,0.748721599578857,0.340076804161072,0.586851418018341,0.734815061092377,0.30104210972786,0.404300183057785,0.863663733005524\n             ,0.67058277130127,0.452658027410507,-0.587724030017853,0.568666934967041,0.406713992357254,-0.714983642101288\n             ,0.894895136356354,0.433114320039749,-0.107586048543453,0.728366911411285,0.471724718809128,-0.496948093175888\n             ,0.744133472442627,0.145097494125366,-0.652082920074463,0.853837490081787,0.519237220287323,0.0367999672889709\n             ,0.853837490081787,0.519237220287323,0.0367999672889709,0.67560875415802,0.409798443317413,0.612876892089844\n             ,0.728366911411285,0.471724718809128,-0.496948093175888,0.67560875415802,0.409798443317413,0.612876892089844\n             ,0.853837490081787,0.519237220287323,0.0367999672889709,0.628294765949249,0.216130942106247,0.747350692749023\n             ,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.299353003501892,-0.946574151515961,-0.119938470423222\n             ,0.463198840618134,-0.858536601066589,-0.219913169741631,0.874346256256104,0.418091505765915,-0.246410429477692\n             ,0.869658291339874,0.203361555933952,-0.449820637702942,0.820957541465759,0.472796261310577,0.320144385099411\n             ,0.307352930307388,0.437818199396133,0.844896078109741,0.914490401744843,0.386459112167358,-0.119819387793541\n             ,0.693649888038635,0.505129396915436,0.513511538505554,0.684045433998108,0.607819020748138,0.403283834457397\n             ,0.801483035087585,0.569443702697754,0.182643905282021,0.839346766471863,0.531246542930603,-0.115212969481945\n             ,0.891873419284821,0.448944300413132,0.0548712648451328,0.801483035087585,0.569443702697754,0.182643905282021\n             ,0.862821519374847,0.482879310846329,0.149554565548897,0.862821519374847,0.482879310846329,0.149554565548897\n             ,0.890609622001648,0.401651859283447,0.213284432888031,0.899213671684265,0.427792370319366,0.0916977524757385\n             ,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.754156410694122,-0.292590618133545,-0.587910532951355\n             ,-0.844545185565948,-0.263896226882935,-0.465942233800888,0.585969090461731,0.300280570983887,-0.752643227577209\n             ,0.459090322256088,0.385543048381805,-0.800370275974274,0.351930469274521,0.00348040298558772,-0.936019718647003\n             ,0.564947247505188,0.481012016534805,-0.670419335365295,0.598047912120819,0.525615990161896,-0.605034232139587\n             ,0.571536600589752,0.54747611284256,-0.611241221427917,-0.190189674496651,-0.685347437858582,-0.702941536903381\n             ,0.204112648963928,-0.444034606218338,-0.872451305389404,0.123677581548691,-0.415960758924484,-0.900933146476746\n             ,0.181594237685204,0.605878710746765,0.774554371833801,0.357862263917923,0.82249915599823,0.442074358463287,0.467824161052704\n             ,0.695085167884827,0.545891225337982,-0.28609374165535,0.17817023396492,0.941491186618805,0.181594237685204,0.605878710746765\n             ,0.774554371833801,-0.179948955774307,0.305097907781601,0.935165047645569,-0.613032460212708,-0.252606987953186\n             ,0.748585939407349,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.28609374165535,0.17817023396492\n             ,0.941491186618805,0.56834876537323,0.804110050201416,-0.174317732453346,0.483205556869507,0.452571898698807\n             ,-0.749460518360138,0.575007021427155,0.477127492427826,-0.664617359638214,0.56834876537323,0.804110050201416\n             ,-0.174317732453346,0.357862263917923,0.82249915599823,0.442074358463287,0.372105628252029,0.872971594333649\n             ,0.315369695425034,0.862821519374847,0.482879310846329,0.149554565548897,0.801483035087585,0.569443702697754\n             ,0.182643905282021,0.816755056381226,0.501944601535797,0.284539580345154,0.890609622001648,0.401651859283447\n             ,0.213284432888031,0.957878828048706,0.257844924926758,-0.126428335905075,0.834237515926361,0.296865254640579\n             ,0.464670658111572,0.839346766471863,0.531246542930603,-0.115212969481945,0.801483035087585,0.569443702697754\n             ,0.182643905282021,0.862522184848785,0.47530135512352,-0.17362080514431,0.684045433998108,0.607819020748138,0.403283834457397\n             ,0.642198443412781,0.582559704780579,0.498202055692673,0.801483035087585,0.569443702697754,0.182643905282021\n             ,0.816755056381226,0.501944601535797,0.284539580345154,0.787978947162628,0.441818922758102,0.428818345069885\n             ,0.807778179645538,0.493730574846268,0.322062909603119,0.646180808544159,0.374157816171646,0.665173888206482\n             ,0.787978947162628,0.441818922758102,0.428818345069885,0.936653733253479,0.265634030103683,0.228294312953949\n             ,0.853275120258331,-0.0167487524449825,0.521191954612732,0.646180808544159,0.374157816171646,0.665173888206482\n             ,0.936653733253479,0.265634030103683,0.228294312953949,0.869658291339874,0.203361555933952,-0.449820637702942\n             ,0.964045107364655,-0.123944662511349,0.23506323993206,0.957878828048706,0.257844924926758,-0.126428335905075\n             ,0.960252404212952,0.207041427493095,0.18721416592598,0.922886550426483,0.384252488613129,-0.0251074023544788\n             ,0.905055105686188,0.328626185655594,-0.269963204860687,0.987558305263519,-0.14246828854084,-0.0665680542588234\n             ,0.88580310344696,-0.0711137056350708,0.458580136299133,0.960252404212952,0.207041427493095,0.18721416592598\n             ,0.823110163211823,0.325570344924927,0.465288698673248,0.894895136356354,0.433114320039749,-0.107586048543453\n             ,0.88580310344696,-0.0711137056350708,0.458580136299133,0.67058277130127,0.452658027410507,-0.587724030017853\n             ,0.894895136356354,0.433114320039749,-0.107586048543453,0.823110163211823,0.325570344924927,0.465288698673248\n             ,0.463198840618134,-0.858536601066589,-0.219913169741631,0.987558305263519,-0.14246828854084,-0.0665680542588234\n             ,0.744133472442627,0.145097494125366,-0.652082920074463,0.88580310344696,-0.0711137056350708,0.458580136299133\n             ,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.463198840618134,-0.858536601066589,-0.219913169741631\n             ,0.45549151301384,-0.838008761405945,0.300447642803192,0.437012165784836,-0.816920578479767,-0.376378893852234\n             ,0.119874052703381,-0.978117644786835,0.170047551393509,-0.0734389647841454,-0.75235915184021,0.654646813869476\n             ,0.45549151301384,-0.838008761405945,0.300447642803192,0.119874052703381,-0.978117644786835,0.170047551393509\n             ,0.0502891913056374,0.172818437218666,-0.98366904258728,0.129470959305763,-0.140533372759819,-0.981574058532715\n             ,0.595824003219604,0.198742762207985,-0.778135597705841,-0.942745447158813,-0.331097900867462,-0.040066309273243\n             ,-0.911145687103271,0.362300097942352,0.196347072720528,-0.965597808361053,0.00630215974524617,-0.259963750839233\n             ,0.323202461004257,0.213562965393066,0.921917021274567,0.0199296418577433,-0.141455933451653,0.989743947982788\n             ,0.356225103139877,0.46585413813591,0.809989869594574,0.0691882893443108,0.630300760269165,0.773261845111847\n             ,0.323202461004257,0.213562965393066,0.921917021274567,0.356225103139877,0.46585413813591,0.809989869594574,0.249904245138168\n             ,-0.0394469499588013,-0.967466652393341,0.0856246650218964,-0.211089760065079,-0.973709166049957,0.272443890571594\n             ,0.180597811937332,-0.945070743560791,0.575007021427155,0.477127492427826,-0.664617359638214,0.56600546836853\n             ,0.354604989290237,-0.744239985942841,0.509490370750427,0.360699236392975,-0.781226992607117,0.249904245138168\n             ,-0.0394469499588013,-0.967466652393341,0.351930469274521,0.00348040298558772,-0.936019718647003,0.214979261159897\n             ,-0.17779715359211,-0.96029794216156,0.598047912120819,0.525615990161896,-0.605034232139587,0.494146823883057\n             ,0.54429703950882,-0.677908360958099,0.575007021427155,0.477127492427826,-0.664617359638214,0.845363795757294\n             ,0.50351881980896,-0.178406670689583,0.853050053119659,0.432356089353561,-0.292187958955765,0.811299920082092\n             ,0.393999367952347,-0.431922435760498,0.575007021427155,0.477127492427826,-0.664617359638214,0.33696186542511\n             ,0.354342758655548,-0.87229460477829,0.521424174308777,0.414691746234894,-0.745753049850464,-0.667661368846893\n             ,-0.595950901508331,0.446173489093781,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.558849096298218\n             ,-0.377615302801132,0.73830509185791,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.597946286201477\n             ,-0.554786086082459,0.578508973121643,-0.504859209060669,-0.313114404678345,0.804410696029663,0.249904245138168\n             ,-0.0394469499588013,-0.967466652393341,0.272443890571594,0.180597811937332,-0.945070743560791,0.56600546836853\n             ,0.354604989290237,-0.744239985942841,0.56600546836853,0.354604989290237,-0.744239985942841,0.272443890571594\n             ,0.180597811937332,-0.945070743560791,0.509490370750427,0.360699236392975,-0.781226992607117,0.670561790466309\n             ,0.450112581253052,-0.589699506759644,0.56834876537323,0.804110050201416,-0.174317732453346,0.575007021427155\n             ,0.477127492427826,-0.664617359638214,0.808014631271362,0.548655688762665,-0.214684262871742,0.976709187030792\n             ,0.208457589149475,-0.050838902592659,0.765193700790405,0.545681536197662,0.341628700494766,-0.965597808361053\n             ,0.00630215974524617,-0.259963750839233,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.875506162643433\n             ,-0.298629522323608,-0.379880726337433,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.755765080451965\n             ,-0.64697390794754,-0.101212374866009,-0.714125990867615,-0.699272274971008,-0.0322852060198784,0.315534800291061\n             ,0.608373045921326,0.728230714797974,0.0310389213263988,0.339698702096939,0.940021991729736,-0.151531577110291\n             ,0.591902196407318,0.791637539863586,-0.179948955774307,0.305097907781601,0.935165047645569,-0.0883399024605751\n             ,0.440414160490036,0.89343798160553,-0.167113959789276,0.136682227253914,0.976417362689972,0.552935898303986\n             ,0.244290605187416,-0.796607792377472,0.594970345497131,0.240510985255241,-0.766918957233429,0.457004487514496\n             ,0.0586743913590908,-0.887526988983154,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.673542857170105\n             ,-0.664238333702087,0.324233591556549,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.107540838420391\n             ,-0.360320240259171,-0.926609039306641,0.214979261159897,-0.17779715359211,-0.96029794216156,-0.374727010726929\n             ,-0.451056748628616,-0.810016989707947,0.571531593799591,0.820161521434784,-0.026204576715827,0.808014631271362\n             ,0.548655688762665,-0.214684262871742,0.765193700790405,0.545681536197662,0.341628700494766,-0.928529560565948\n             ,-0.339161455631256,0.15100422501564,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.926164984703064\n             ,-0.361916661262512,0.105994082987309,-0.763029158115387,0.474885076284409,0.438486844301224,-0.519362270832062\n             ,0.62650853395462,0.581162631511688,-0.505132853984833,0.614961266517639,0.605527400970459,-0.999070584774017\n             ,-0.0414997637271881,0.0116504887118936,-0.763029158115387,0.474885076284409,0.438486844301224,-0.942745447158813\n             ,-0.331097900867462,-0.040066309273243,0.148562759160995,0.479341596364975,0.864962875843048,0.0911808460950851\n             ,0.673339366912842,0.733689427375793,0.340076804161072,0.586851418018341,0.734815061092377,0.340076804161072\n             ,0.586851418018341,0.734815061092377,0.366583049297333,0.495457142591476,0.787489116191864,0.148562759160995\n             ,0.479341596364975,0.864962875843048,-0.173014774918556,0.150903835892677,0.973290264606476,-0.24175851047039\n             ,0.0892980098724365,0.966218769550323,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.11764945089817\n             ,0.119960054755211,0.985783040523529,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.24175851047039\n             ,0.0892980098724365,0.966218769550323,0.320780336856842,-0.177296921610832,-0.930411577224731,0.391682207584381\n             ,0.0344884172081947,-0.919453978538513,0.387060284614563,0.0985353216528893,-0.916774332523346,0.976709187030792\n             ,0.208457589149475,-0.050838902592659,0.821033596992493,0.463092446327209,0.333840012550354,0.765193700790405\n             ,0.545681536197662,0.341628700494766,0.578510701656342,0.581528306007385,0.571970403194427,0.529006600379944\n             ,0.562984585762024,0.63498067855835,0.461020469665527,0.72527813911438,0.511303961277008,0.70020192861557,0.436750024557114\n             ,0.564771354198456,0.445416361093521,0.291170030832291,0.846654772758484,0.587356448173523,0.37003019452095,0.719784736633301\n             ,0.587356448173523,0.37003019452095,0.719784736633301,0.445416361093521,0.291170030832291,0.846654772758484,0.0771664902567863\n             ,0.0724747255444527,0.994380593299866,0.600287616252899,-0.73423707485199,0.317097216844559,-0.418209999799728\n             ,-0.452997386455536,0.787333309650421,0.410484403371811,-0.832323789596558,0.372477740049362,0.786963045597076\n             ,-0.207125172019005,-0.581195652484894,0.379243552684784,-0.345731914043427,-0.858279526233673,0.95084285736084\n             ,-0.116525217890739,-0.286914199590683,0.708127498626709,-0.297497063875198,-0.640352189540863,0.379243552684784\n             ,-0.345731914043427,-0.858279526233673,0.786963045597076,-0.207125172019005,-0.581195652484894,0.378357648849487\n             ,0.724991083145142,0.575528800487518,0.543150007724762,0.5245680809021,0.65560382604599,0.536732196807861,0.528757095336914\n             ,0.657521426677704,0.429811149835587,0.447204560041428,0.784391760826111,-0.654502868652344,-0.735222280025482\n             ,0.176278829574585,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.588989198207855,-0.775294840335846\n             ,0.228056281805038,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.386899769306183,-0.390137135982513\n             ,0.83552473783493,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.588989198207855,-0.775294840335846\n             ,0.228056281805038,-0.396454155445099,-0.508855581283569,0.764127016067505,0.154613956809044,0.104744024574757\n             ,0.982406854629517,0.078959085047245,0.121888175606728,0.989398181438446,-0.386899769306183,-0.390137135982513\n             ,0.83552473783493,-0.396454155445099,-0.508855581283569,0.764127016067505,0.154613956809044,0.104744024574757\n             ,0.982406854629517,0.524966239929199,0.447477400302887,0.72399890422821,0.591853797435761,0.480847299098969,0.646911799907684\n             ,0.078959085047245,0.121888175606728,0.989398181438446,0.600953817367554,0.56422370672226,0.566132545471191,0.591853797435761\n             ,0.480847299098969,0.646911799907684,0.524966239929199,0.447477400302887,0.72399890422821,-0.0328970178961754\n             ,0.677300930023193,-0.734970211982727,-0.0340137556195259,-0.196621879935265,-0.979889214038849,0.205058068037033\n             ,-0.244612783193588,-0.947689712047577,0.339142799377441,0.423890322446823,-0.839820921421051,0.427927106618881\n             ,-0.320324927568436,-0.845145165920258,0.205058068037033,-0.244612783193588,-0.947689712047577,0.0686725899577141\n             ,-0.344746232032776,-0.936180591583252,0.365317970514297,-0.409484475851059,-0.835981607437134,0.599293649196625\n             ,-0.39963087439537,-0.693644165992737,0.500678837299347,-0.355485200881958,-0.789272427558899,0.427927106618881\n             ,-0.320324927568436,-0.845145165920258,0.365317970514297,-0.409484475851059,-0.835981607437134,0.599293649196625\n             ,-0.39963087439537,-0.693644165992737,0.778241097927094,-0.324259251356125,-0.53777015209198,0.587996542453766\n             ,-0.370855212211609,-0.718836843967438,0.500678837299347,-0.355485200881958,-0.789272427558899,0.778241097927094\n             ,-0.324259251356125,-0.53777015209198,0.853671669960022,-0.248006701469421,-0.457970976829529,0.751961290836334\n             ,-0.373251110315323,-0.543357908725739,0.587996542453766,-0.370855212211609,-0.718836843967438,0.901673018932343\n             ,-0.243753165006638,-0.357169687747955,0.751961290836334,-0.373251110315323,-0.543357908725739,0.853671669960022\n             ,-0.248006701469421,-0.457970976829529,0.911918580532074,-0.233281582593918,-0.33761540055275,0.753405332565308\n             ,-0.651543796062469,-0.0887193456292152,0.71945708990097,-0.687020063400269,0.101906716823578,0.788194417953491\n             ,-0.590478122234344,-0.173450663685799,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.696818470954895\n             ,-0.717234194278717,0.00436395406723022,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.00150869158096612\n             ,-0.98975282907486,0.142783313989639,-0.0595608800649643,-0.947182178497314,0.315116405487061,-7.15617352398112e-005\n             ,-0.950459361076355,0.310848772525787,-0.00150869158096612,-0.98975282907486,0.142783313989639,-0.551685750484467\n             ,-0.802535355091095,0.227111890912056,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.58903169631958\n             ,-0.6592817902565,0.467321366071701,-0.0595608800649643,-0.947182178497314,0.315116405487061,0.274910867214203\n             ,-0.0151522560045123,0.961350321769714,0.152735993266106,0.0633700788021088,0.986233234405518,0.292623817920685\n             ,0.00810971390455961,0.956193268299103,0.359952032566071,-0.103429064154625,0.927219986915588,0.0370258577167988\n             ,-0.771627187728882,0.63499653339386,-0.00152458809316158,-0.818883240222931,0.573958158493042,-7.15617352398112e-005\n             ,-0.950459361076355,0.310848772525787,-0.0595608800649643,-0.947182178497314,0.315116405487061,-0.288185745477676\n             ,-0.458648860454559,0.840589225292206,0.0370258577167988,-0.771627187728882,0.63499653339386,-0.0595608800649643\n             ,-0.947182178497314,0.315116405487061,-0.58903169631958,-0.6592817902565,0.467321366071701,0.536377429962158\n             ,-0.345477372407913,0.770029008388519,0.454795598983765,-0.290122002363205,0.842015504837036,0.477317273616791\n             ,-0.364241302013397,0.79968523979187,0.777780055999756,-0.164350166916847,0.606668949127197,0.833742022514343\n             ,-0.228465765714645,0.502670586109161,0.571900844573975,-0.259421706199646,0.778222262859344,0.335281848907471\n             ,0.203614771366119,0.919851660728455,0.742353081703186,0.249405577778816,0.621859073638916,0.0951899439096451\n             ,-0.0263954158872366,0.995109081268311,0.225532427430153,-0.0723189786076546,0.971547782421112,0.274910867214203\n             ,-0.0151522560045123,0.961350321769714,0.058000672608614,-0.0229690801352263,0.998052299022675,0.63869446516037\n             ,-0.424023747444153,0.642085075378418,0.571900844573975,-0.259421706199646,0.778222262859344,0.833742022514343\n             ,-0.228465765714645,0.502670586109161,0.804235875606537,-0.38592141866684,0.451961606740952,-0.000327471556374803\n             ,-0.115864381194115,0.993264973163605,-0.00104101200122386,-0.114976294338703,0.993367731571198,0.0599330253899097\n             ,-0.274288892745972,0.95977795124054,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.571900844573975\n             ,-0.259421706199646,0.778222262859344,0.454795598983765,-0.290122002363205,0.842015504837036,0.292623817920685\n             ,0.00810971390455961,0.956193268299103,0.335281848907471,0.203614771366119,0.919851660728455,0.477317273616791\n             ,-0.364241302013397,0.79968523979187,0.454795598983765,-0.290122002363205,0.842015504837036,0.571900844573975\n             ,-0.259421706199646,0.778222262859344,0.63869446516037,-0.424023747444153,0.642085075378418,0.658608675003052\n             ,-0.082901194691658,0.747905075550079,0.824855744838715,-0.0143105983734131,0.565162122249603,0.537741303443909\n             ,0.6980841755867,0.472771346569061,0.458152443170547,0.667493462562561,0.586982846260071,0.280117779970169,0.669322490692139\n             ,0.688143491744995,0.403074562549591,-0.0995079353451729,0.909741222858429,0.658608675003052,-0.082901194691658\n             ,0.747905075550079,0.458152443170547,0.667493462562561,0.586982846260071,0.404132395982742,0.670274078845978\n             ,0.622422397136688,0.607683002948761,0.504087805747986,0.61369115114212,0.691345393657684,-0.0592475160956383\n             ,0.720091164112091,0.748501777648926,-0.0708362907171249,0.659338533878326,0.537741303443909,0.6980841755867\n             ,0.472771346569061,0.29329439997673,0.882676124572754,0.367234617471695,0.562915802001953,0.509836494922638,0.650532484054565\n             ,0.458152443170547,0.667493462562561,0.586982846260071,-0.0034278747625649,-0.586137890815735,0.810204088687897\n             ,0.157182320952415,-0.535330414772034,0.829888582229614,0.174659475684166,-0.296808987855911,0.938828229904175\n             ,-0.00127162621356547,-0.241362497210503,0.970434188842773,0.000567267881706357,0.0375262796878815,0.999295473098755\n             ,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.058000672608614,-0.0229690801352263,0.998052299022675\n             ,-0.000558733532670885,-0.012703550979495,0.999919176101685,0.0589314736425877,-0.0994917079806328,0.993291735649109\n             ,-0.00124295917339623,-0.0901384949684143,0.995928466320038,-0.000558733532670885,-0.012703550979495,0.999919176101685\n             ,0.058000672608614,-0.0229690801352263,0.998052299022675,0.682068586349487,-0.309287667274475,0.662663996219635\n             ,0.0599330253899097,-0.274288892745972,0.95977795124054,0.536377429962158,-0.345477372407913,0.770029008388519\n             ,0.682068586349487,-0.309287667274475,0.662663996219635,0.536377429962158,-0.345477372407913,0.770029008388519\n             ,0.777780055999756,-0.164350166916847,0.606668949127197,0.404132395982742,0.670274078845978,0.622422397136688\n             ,0.748501777648926,-0.0708362907171249,0.659338533878326,0.403074562549591,-0.0995079353451729,0.909741222858429\n             ,0.280117779970169,0.669322490692139,0.688143491744995,0.0532422475516796,-0.0883512496948242,0.994665443897247\n             ,0.0500486679375172,0.682355880737305,0.729304850101471,6.54090908938088e-005,0.672398924827576,0.740189015865326\n             ,-0.000327471556374803,-0.115864381194115,0.993264973163605,0.682068586349487,-0.309287667274475,0.662663996219635\n             ,0.691345393657684,-0.0592475160956383,0.720091164112091,0.0532422475516796,-0.0883512496948242,0.994665443897247\n             ,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0500486679375172,0.682355880737305,0.729304850101471\n             ,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.691345393657684,-0.0592475160956383,0.720091164112091\n             ,0.607683002948761,0.504087805747986,0.61369115114212,0.607683002948761,0.504087805747986,0.61369115114212,0.404132395982742\n             ,0.670274078845978,0.622422397136688,0.042865764349699,0.703626394271851,0.709275960922241,0.0500486679375172\n             ,0.682355880737305,0.729304850101471,0.875346660614014,0.271785736083984,-0.399875849485397,0.908465981483459\n             ,0.211989372968674,-0.360208302736282,0.889020264148712,0.213740766048431,-0.404917031526566,0.903672158718109\n             ,0.187046512961388,-0.385214596986771,0.66176563501358,-0.249233901500702,-0.707070529460907,0.656103849411011\n             ,-0.195678874850273,-0.728860437870026,0.205762028694153,-0.343506038188934,-0.91633266210556,0.213652655482292\n             ,-0.249391734600067,-0.94454026222229,0.712960124015808,-0.033335629850626,-0.700411677360535,0.727709889411926\n             ,0.17916151881218,-0.662072122097015,0.9054034948349,0.148057624697685,-0.397898882627487,0.881142616271973,0.0315838828682899\n             ,-0.471794605255127,-0.0648035630583763,-0.03354711830616,-0.997334003448486,-3.70855048004159e-007,-0.0389081388711929\n             ,-0.999242782592773,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-0.0289378985762596,0.188017979264259\n             ,-0.981739223003387,-0.0764778554439545,-0.225456923246384,-0.971246778964996,1.25483495594381e-007,-0.219631806015968\n             ,-0.975582838058472,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,-0.0648035630583763,-0.03354711830616\n             ,-0.997334003448486,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.101892530918121,-0.302259355783463\n             ,-0.947764337062836,0.142389953136444,-0.3092340528965,-0.940265595912933,0.605917453765869,-0.0272433757781982\n             ,-0.795060873031616,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.748518824577332,-0.407584488391876\n             ,-0.523062586784363,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.481532573699951,-0.766164124011993\n             ,-0.425580739974976,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,3.42403474462571e-008,-0.837808728218079\n             ,-0.545963823795319,-0.295105874538422,-0.732439458370209,-0.613551139831543,-0.804567158222198,-0.249711319804192\n             ,0.538809776306152,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.594752132892609,-0.34540992975235\n             ,0.725921392440796,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.804567158222198,-0.249711319804192\n             ,0.538809776306152,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.942177176475525,-0.23178243637085\n             ,0.242031067609787,-0.927966833114624,-0.267184227705002,0.25978872179985,0.74054491519928,0.170902013778687\n             ,-0.649912059307098,0.746655583381653,0.0161054637283087,-0.665015816688538,0.708321094512939,-0.0154764745384455\n             ,-0.705720722675323,0.71757835149765,0.116429716348648,-0.686677098274231,0.893347382545471,0.219659432768822\n             ,-0.392020732164383,0.942655086517334,0.280740022659302,-0.180517137050629,0.578336894512177,0.572735607624054\n             ,-0.580947756767273,0.561173915863037,0.357189118862152,-0.74665904045105,0.205762028694153,-0.343506038188934\n             ,-0.91633266210556,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.0764778554439545,-0.225456923246384\n             ,-0.971246778964996,0.213652655482292,-0.249391734600067,-0.94454026222229,0.142389953136444,-0.3092340528965\n             ,-0.940265595912933,0.101892530918121,-0.302259355783463,-0.947764337062836,-0.501008868217468,-0.341375559568405\n             ,-0.795269012451172,-0.412438809871674,-0.450837343931198,-0.791605889797211,0.727709889411926,0.17916151881218\n             ,-0.662072122097015,0.712960124015808,-0.033335629850626,-0.700411677360535,0.238241225481033,-0.0322869308292866\n             ,-0.970669209957123,0.258906006813049,0.225121974945068,-0.939301729202271,0.798646211624146,0.188777849078178\n             ,0.571425557136536,0.810771644115448,0.203989744186401,0.54866886138916,0.562908291816711,0.161133006215096,0.810660421848297\n             ,0.694722712039948,0.104215458035469,0.711687743663788,0.516355931758881,0.769888043403625,-0.375031918287277\n             ,0.744332075119019,0.174594134092331,-0.644582509994507,0.460788071155548,0.137184977531433,-0.876843571662903\n             ,0.296686768531799,0.847575604915619,-0.439991503953934,0.306774467229843,-0.0150404367595911,0.951663374900818\n             ,-0.072829432785511,0.0172536037862301,0.99719512462616,-0.0692291632294655,-0.189661636948586,0.97940582036972\n             ,0.054814163595438,-0.00857834424823523,0.998459756374359,0.893347382545471,0.219659432768822,-0.392020732164383\n             ,0.561173915863037,0.357189118862152,-0.74665904045105,0.892053008079529,0.256361722946167,-0.372182875871658\n             ,0.904940068721771,0.195454493165016,-0.377996027469635,-0.501008868217468,-0.341375559568405,-0.795269012451172\n             ,0.101892530918121,-0.302259355783463,-0.947764337062836,0.080341137945652,-0.401152580976486,-0.912481188774109\n             ,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.927966833114624,-0.267184227705002,0.25978872179985\n             ,-0.942177176475525,-0.23178243637085,0.242031067609787,-0.967553913593292,-0.25226628780365,0.0141822574660182\n             ,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.911426484584808,-0.347711831331253,-0.219996020197868\n             ,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.696818470954895,-0.717234194278717,0.00436395406723022\n             ,-0.661673307418823,-0.718335151672363,-0.214902579784393,-0.162544935941696,-0.482564568519592,0.860645413398743\n             ,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.594752132892609,-0.34540992975235,0.725921392440796\n             ,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.5846186876297,-0.21980345249176,0.780965745449066,-0.748518824577332\n             ,-0.407584488391876,-0.523062586784363,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.439750492572784\n             ,-0.494966864585876,-0.749418020248413,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.911426484584808\n             ,-0.347711831331253,-0.219996020197868,0.839759349822998,0.221470341086388,-0.495736926794052,0.892053008079529\n             ,0.256361722946167,-0.372182875871658,0.561173915863037,0.357189118862152,-0.74665904045105,0.602514207363129\n             ,0.114386186003685,-0.789868593215942,0.881142616271973,0.0315838828682899,-0.471794605255127,0.808351874351501\n             ,-0.0360210724174976,-0.587596535682678,0.66176563501358,-0.249233901500702,-0.707070529460907,0.712960124015808\n             ,-0.033335629850626,-0.700411677360535,0.898882806301117,0.175670132040977,-0.401434540748596,0.927110075950623\n             ,-0.224742949008942,-0.299929141998291,0.939878582954407,0.179825350642204,-0.290329366922379,0.647473335266113\n             ,0.339982986450195,0.682048261165619,0.910265743732452,0.359647780656815,0.205109089612961,0.935757219791412\n             ,0.300309896469116,0.184857651591301,0.865987479686737,0.269352704286575,0.421324998140335,0.762866199016571\n             ,0.277735590934753,0.583864748477936,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.072829432785511\n             ,0.0172536037862301,0.99719512462616,-0.176305994391441,-0.141984179615974,0.974041402339935,-0.314308881759644\n             ,-0.16680882871151,0.934550523757935,-0.481532573699951,-0.766164124011993,-0.425580739974976,-0.748518824577332\n             ,-0.407584488391876,-0.523062586784363,-0.911426484584808,-0.347711831331253,-0.219996020197868,-0.661673307418823\n             ,-0.718335151672363,-0.214902579784393,0.923468410968781,-0.310481667518616,0.225404515862465,0.8788041472435\n             ,-0.274041712284088,0.390646249055862,0.871811747550964,0.251815319061279,0.420158743858337,0.952159941196442\n             ,0.220857203006744,0.211219072341919,0.238241225481033,-0.0322869308292866,-0.970669209957123,-0.0648035630583763\n             ,-0.03354711830616,-0.997334003448486,-0.0289378985762596,0.188017979264259,-0.981739223003387,0.258906006813049\n             ,0.225121974945068,-0.939301729202271,0.38853245973587,0.0891766548156738,-0.917109608650208,0.25152114033699\n             ,0.52830183506012,-0.810946524143219,0.0464195013046265,0.499532669782639,-0.865050494670868,0.216437473893166\n             ,0.0472434125840664,-0.975152730941772,0.248540058732033,0.104038745164871,-0.96301805973053,0.194792345166206\n             ,0.732599914073944,-0.65219122171402,0.296686768531799,0.847575604915619,-0.439991503953934,0.460788071155548\n             ,0.137184977531433,-0.876843571662903,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.492029935121536\n             ,-0.177097424864769,-0.852374970912933,0.080341137945652,-0.401152580976486,-0.912481188774109,0.101892530918121\n             ,-0.302259355783463,-0.947764337062836,0.492029935121536,-0.177097424864769,-0.852374970912933,0.543910622596741\n             ,-0.0741649866104126,-0.835859358310699,0.71757835149765,0.116429716348648,-0.686677098274231,0.708321094512939\n             ,-0.0154764745384455,-0.705720722675323,0.054814163595438,-0.00857834424823523,0.998459756374359,-0.0692291632294655\n             ,-0.189661636948586,0.97940582036972,-0.226662054657936,-0.126468449831009,0.965727686882019,0.682208895683289\n             ,0.033966027200222,0.730367958545685,0.694722712039948,0.104215458035469,0.711687743663788,0.489940017461777\n             ,0.0234622322022915,0.871440351009369,0.335014045238495,0.0223999582231045,0.941946804523468,0.489940017461777\n             ,0.0234622322022915,0.871440351009369,0.306774467229843,-0.0150404367595911,0.951663374900818,0.054814163595438\n             ,-0.00857834424823523,0.998459756374359,0.335014045238495,0.0223999582231045,0.941946804523468,0.811995446681976\n             ,0.143728405237198,0.565690279006958,0.798646211624146,0.188777849078178,0.571425557136536,0.694722712039948\n             ,0.104215458035469,0.711687743663788,0.682208895683289,0.033966027200222,0.730367958545685,0.556707918643951\n             ,0.787832021713257,-0.263433039188385,0.530404925346375,0.817605495452881,-0.224035635590553,0.857278525829315\n             ,0.230919152498245,-0.460162937641144,0.856384754180908,0.207969963550568,-0.472603112459183,0.923292398452759\n             ,0.235370382666588,-0.303532481193542,0.857278525829315,0.230919152498245,-0.460162937641144,0.530404925346375\n             ,0.817605495452881,-0.224035635590553,0.535478115081787,0.838915288448334,-0.0973878055810928,0.535478115081787\n             ,0.838915288448334,-0.0973878055810928,0.539530575275421,0.836876928806305,0.092432402074337,0.97637003660202\n             ,0.214487105607986,0.0263973921537399,0.923292398452759,0.235370382666588,-0.303532481193542,0.771463513374329\n             ,0.571617126464844,0.279460042715073,0.560579180717468,0.758218228816986,0.332950711250305,0.897881627082825\n             ,0.0853674784302711,0.4318807721138,0.940263509750366,0.158270344138145,0.301421761512756,0.248540058732033,0.104038745164871\n             ,-0.96301805973053,-0.000922495266422629,0.0980329513549805,-0.995182752609253,-0.000970269029494375,0.721597969532013\n             ,-0.692311644554138,0.194792345166206,0.732599914073944,-0.65219122171402,0.194792345166206,0.732599914073944\n             ,-0.65219122171402,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.0328970178961754,0.677300930023193\n             ,-0.734970211982727,0.339142799377441,0.423890322446823,-0.839820921421051,0.296686768531799,0.847575604915619\n             ,-0.439991503953934,0.194792345166206,0.732599914073944,-0.65219122171402,0.339142799377441,0.423890322446823\n             ,-0.839820921421051,0.454949915409088,0.569741904735565,-0.6844083070755,0.550657391548157,0.552472710609436\n             ,-0.625739872455597,0.667598783969879,0.599002242088318,-0.442163020372391,0.516355931758881,0.769888043403625\n             ,-0.375031918287277,0.296686768531799,0.847575604915619,-0.439991503953934,0.694567322731018,0.687739253044128\n             ,-0.211165577173233,0.530404925346375,0.817605495452881,-0.224035635590553,0.556707918643951,0.787832021713257\n             ,-0.263433039188385,0.428307920694351,0.88731974363327,-0.170926719903946,0.535478115081787,0.838915288448334\n             ,-0.0973878055810928,0.530404925346375,0.817605495452881,-0.224035635590553,0.694567322731018,0.687739253044128\n             ,-0.211165577173233,0.672885239124298,0.731690943241119,-0.1088752374053,0.891434013843536,0.447212874889374\n             ,-0.0731168016791344,0.539530575275421,0.836876928806305,0.092432402074337,0.535478115081787,0.838915288448334\n             ,-0.0973878055810928,0.672885239124298,0.731690943241119,-0.1088752374053,0.648516714572906,0.651950538158417\n             ,0.392920613288879,0.560579180717468,0.758218228816986,0.332950711250305,0.771463513374329,0.571617126464844\n             ,0.279460042715073,0.539530575275421,0.836876928806305,0.092432402074337,0.891434013843536,0.447212874889374\n             ,-0.0731168016791344,0.942655086517334,0.280740022659302,-0.180517137050629,0.935757219791412,0.300309896469116\n             ,0.184857651591301,0.910265743732452,0.359647780656815,0.205109089612961,0.578336894512177,0.572735607624054\n             ,-0.580947756767273,0.977872133255005,0.203673675656319,-0.0477813258767128,0.952159941196442,0.220857203006744\n             ,0.211219072341919,0.935757219791412,0.300309896469116,0.184857651591301,0.942655086517334,0.280740022659302\n             ,-0.180517137050629,0.939878582954407,0.179825350642204,-0.290329366922379,0.977872133255005,0.203673675656319\n             ,-0.0477813258767128,0.942655086517334,0.280740022659302,-0.180517137050629,0.893347382545471,0.219659432768822\n             ,-0.392020732164383,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.633589029312134,0.43701559305191\n             ,-0.638421773910522,0.25152114033699,0.52830183506012,-0.810946524143219,0.38853245973587,0.0891766548156738\n             ,-0.917109608650208,0.434906035661697,-0.159671977162361,-0.886206328868866,0.280981153249741,-0.215777322649956\n             ,-0.935141563415527,0.248540058732033,0.104038745164871,-0.96301805973053,0.460788071155548,0.137184977531433\n             ,-0.876843571662903,0.280981153249741,-0.215777322649956,-0.935141563415527,-0.000504601746797562,-0.248110130429268\n             ,-0.968731701374054,-0.000922495266422629,0.0980329513549805,-0.995182752609253,0.248540058732033,0.104038745164871\n             ,-0.96301805973053,0.924298286437988,-0.381513595581055,0.0109577048569918,0.876497626304626,-0.393738061189651\n             ,-0.276987820863724,0.923292398452759,0.235370382666588,-0.303532481193542,0.97637003660202,0.214487105607986\n             ,0.0263973921537399,0.706851065158844,-0.181566014885902,-0.683663189411163,0.434906035661697,-0.159671977162361\n             ,-0.886206328868866,0.460788071155548,0.137184977531433,-0.876843571662903,0.744332075119019,0.174594134092331\n             ,-0.644582509994507,0.857278525829315,0.230919152498245,-0.460162937641144,0.829558193683624,-0.330268114805222\n             ,-0.450284510850906,0.837246775627136,-0.256030231714249,-0.483183532953262,0.856384754180908,0.207969963550568\n             ,-0.472603112459183,0.876497626304626,-0.393738061189651,-0.276987820863724,0.829558193683624,-0.330268114805222\n             ,-0.450284510850906,0.857278525829315,0.230919152498245,-0.460162937641144,0.923292398452759,0.235370382666588\n             ,-0.303532481193542,0.216437473893166,0.0472434125840664,-0.975152730941772,1.06040135960939e-006,-0.00336454622447491\n             ,-0.999994337558746,-0.000504601746797562,-0.248110130429268,-0.968731701374054,0.280981153249741,-0.215777322649956\n             ,-0.935141563415527,0.38853245973587,0.0891766548156738,-0.917109608650208,0.216437473893166,0.0472434125840664\n             ,-0.975152730941772,0.280981153249741,-0.215777322649956,-0.935141563415527,0.434906035661697,-0.159671977162361\n             ,-0.886206328868866,0.706851065158844,-0.181566014885902,-0.683663189411163,0.711495935916901,-0.0537417083978653\n             ,-0.700632095336914,0.38853245973587,0.0891766548156738,-0.917109608650208,0.434906035661697,-0.159671977162361\n             ,-0.886206328868866,0.829558193683624,-0.330268114805222,-0.450284510850906,0.848333179950714,-0.297908991575241\n             ,-0.43769970536232,0.849871397018433,-0.222601994872093,-0.477668255567551,0.837246775627136,-0.256030231714249\n             ,-0.483183532953262,0.876497626304626,-0.393738061189651,-0.276987820863724,0.927110075950623,-0.224742949008942\n             ,-0.299929141998291,0.848333179950714,-0.297908991575241,-0.43769970536232,0.829558193683624,-0.330268114805222\n             ,-0.450284510850906,0.924298286437988,-0.381513595581055,0.0109577048569918,0.935387670993805,-0.353589057922363\n             ,-0.0049727950245142,0.927110075950623,-0.224742949008942,-0.299929141998291,0.876497626304626,-0.393738061189651\n             ,-0.276987820863724,0.633589029312134,0.43701559305191,-0.638421773910522,0.644856452941895,0.422154635190964\n             ,-0.637138664722443,0.240688636898994,0.458865791559219,-0.85528427362442,0.25152114033699,0.52830183506012,-0.810946524143219\n             ,0.0464195013046265,0.499532669782639,-0.865050494670868,0.25152114033699,0.52830183506012,-0.810946524143219\n             ,0.240688636898994,0.458865791559219,-0.85528427362442,0.0252151377499104,0.378374934196472,-0.9253089427948\n             ,0.0464195013046265,0.499532669782639,-0.865050494670868,0.0252151377499104,0.378374934196472,-0.9253089427948\n             ,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-1.63649360729323e-008,0.470822811126709,-0.882227778434753\n             ,0.881142616271973,0.0315838828682899,-0.471794605255127,0.9054034948349,0.148057624697685,-0.397898882627487\n             ,0.862718880176544,0.197039529681206,-0.465716183185577,0.830685615539551,0.156212329864502,-0.53437727689743\n             ,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.923468410968781,-0.310481667518616,0.225404515862465\n             ,0.952159941196442,0.220857203006744,0.211219072341919,0.977872133255005,0.203673675656319,-0.0477813258767128\n             ,0.924298286437988,-0.381513595581055,0.0109577048569918,0.911828219890594,-0.323383867740631,0.252966731786728\n             ,0.923468410968781,-0.310481667518616,0.225404515862465,0.935387670993805,-0.353589057922363,-0.0049727950245142\n             ,0.291106730699539,0.735121071338654,0.612253129482269,0.404132395982742,0.670274078845978,0.622422397136688\n             ,0.280117779970169,0.669322490692139,0.688143491744995,0.042865764349699,0.703626394271851,0.709275960922241\n             ,-7.2909109860575e-009,0.660060167312622,0.751212775707245,6.54090908938088e-005,0.672398924827576,0.740189015865326\n             ,0.0500486679375172,0.682355880737305,0.729304850101471,-0.661673307418823,-0.718335151672363,-0.214902579784393\n             ,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736\n             ,-0.481532573699951,-0.766164124011993,-0.425580739974976,0.562908291816711,0.161133006215096,0.810660421848297\n             ,0.237323373556137,0.127464771270752,0.963031828403473,0.306774467229843,-0.0150404367595911,0.951663374900818\n             ,0.489940017461777,0.0234622322022915,0.871440351009369,0.562908291816711,0.161133006215096,0.810660421848297\n             ,0.489940017461777,0.0234622322022915,0.871440351009369,0.694722712039948,0.104215458035469,0.711687743663788\n             ,0.762866199016571,0.277735590934753,0.583864748477936,0.798646211624146,0.188777849078178,0.571425557136536\n             ,0.811995446681976,0.143728405237198,0.565690279006958,0.67109352350235,0.25623893737793,0.695683181285858,0.335014045238495\n             ,0.0223999582231045,0.941946804523468,0.054814163595438,-0.00857834424823523,0.998459756374359,-0.372333556413651\n             ,0.209001079201698,0.904260098934174,0.849871397018433,-0.222601994872093,-0.477668255567551,0.848333179950714\n             ,-0.297908991575241,-0.43769970536232,0.888135969638824,0.229056358337402,-0.3984315097332,0.847342550754547\n             ,0.298378229141235,-0.439296066761017,0.602514207363129,0.114386186003685,-0.789868593215942,0.561173915863037\n             ,0.357189118862152,-0.74665904045105,-0.239916190505028,0.291067600250244,-0.926131665706635,-0.0240183379501104\n             ,-0.0193977113813162,-0.999523282051086,-0.0240183379501104,-0.0193977113813162,-0.999523282051086,0.157182320952415\n             ,-0.535330414772034,0.829888582229614,0.130942046642303,-0.413219839334488,0.901167869567871,0.235934317111969\n             ,-0.318644911050797,0.918041586875916,0.174659475684166,-0.296808987855911,0.938828229904175,0.0464195013046265\n             ,0.499532669782639,-0.865050494670868,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,1.06040135960939e-006\n             ,-0.00336454622447491,-0.999994337558746,0.216437473893166,0.0472434125840664,-0.975152730941772,0.939878582954407\n             ,0.179825350642204,-0.290329366922379,0.893347382545471,0.219659432768822,-0.392020732164383,0.904940068721771\n             ,0.195454493165016,-0.377996027469635,0.898882806301117,0.175670132040977,-0.401434540748596,0.237323373556137\n             ,0.127464771270752,0.963031828403473,-0.00901283789426088,0.0965975746512413,0.995282709598541,-0.072829432785511\n             ,0.0172536037862301,0.99719512462616,0.306774467229843,-0.0150404367595911,0.951663374900818,0.746655583381653\n             ,0.0161054637283087,-0.665015816688538,0.730062305927277,-0.0445751175284386,-0.681925296783447,0.691866219043732\n             ,-0.034970335662365,-0.721178352832794,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.691866219043732\n             ,-0.034970335662365,-0.721178352832794,0.45493283867836,-0.156170472502708,-0.876725077629089,0.492029935121536\n             ,-0.177097424864769,-0.852374970912933,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.492029935121536\n             ,-0.177097424864769,-0.852374970912933,0.45493283867836,-0.156170472502708,-0.876725077629089,0.0628172904253006\n             ,-0.389361083507538,-0.918940663337708,0.080341137945652,-0.401152580976486,-0.912481188774109,0.080341137945652\n             ,-0.401152580976486,-0.912481188774109,0.0628172904253006,-0.389361083507538,-0.918940663337708,-0.380791038274765\n             ,-0.516843378543854,-0.766727566719055,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.439750492572784\n             ,-0.494966864585876,-0.749418020248413,-0.380791038274765,-0.516843378543854,-0.766727566719055,-0.772903144359589\n             ,-0.524522066116333,-0.357067674398422,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.941869378089905\n             ,-0.335682570934296,-0.0141169847920537,-0.941800832748413,-0.200851738452911,0.269573330879211,-0.927966833114624\n             ,-0.267184227705002,0.25978872179985,-0.804567158222198,-0.249711319804192,0.538809776306152,-0.927966833114624\n             ,-0.267184227705002,0.25978872179985,-0.941800832748413,-0.200851738452911,0.269573330879211,-0.840525031089783\n             ,-0.0687118694186211,0.537397801876068,-0.239916190505028,0.291067600250244,-0.926131665706635,0.561173915863037\n             ,0.357189118862152,-0.74665904045105,0.578336894512177,0.572735607624054,-0.580947756767273,-0.420213580131531\n             ,0.558342278003693,-0.715314149856567,-0.372333556413651,0.209001079201698,0.904260098934174,0.054814163595438\n             ,-0.00857834424823523,0.998459756374359,-0.226662054657936,-0.126468449831009,0.965727686882019,-0.226662054657936\n             ,-0.126468449831009,0.965727686882019,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.197339624166489\n             ,-0.302571266889572,0.932473957538605,-0.132603287696838,-0.345454096794128,0.929019808769226,-0.197339624166489\n             ,-0.302571266889572,0.932473957538605,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.314308881759644\n             ,-0.16680882871151,0.934550523757935,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.594752132892609\n             ,-0.34540992975235,0.725921392440796,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.58903169631958\n             ,-0.6592817902565,0.467321366071701,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.58903169631958\n             ,-0.6592817902565,0.467321366071701,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.942177176475525\n             ,-0.23178243637085,0.242031067609787,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.696818470954895\n             ,-0.717234194278717,0.00436395406723022,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.942177176475525\n             ,-0.23178243637085,0.242031067609787,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.0282435193657875\n             ,-0.397893935441971,0.916996598243713,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.162544935941696\n             ,-0.482564568519592,0.860645413398743,-0.197339624166489,-0.302571266889572,0.932473957538605,-0.230195790529251\n             ,-0.346913009881973,0.909209132194519,-0.0282435193657875,-0.397893935441971,0.916996598243713,-0.132603287696838\n             ,-0.345454096794128,0.929019808769226,0.647473335266113,0.339982986450195,0.682048261165619,0.762866199016571\n             ,0.277735590934753,0.583864748477936,0.67109352350235,0.25623893737793,0.695683181285858,0.355668604373932,0.293017596006393\n             ,0.887491166591644,-0.840525031089783,-0.0687118694186211,0.537397801876068,-0.771387696266174,0.0395333021879196\n             ,0.635136306285858,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.804567158222198,-0.249711319804192\n             ,0.538809776306152,-0.5846186876297,-0.21980345249176,0.780965745449066,-0.67518013715744,-0.23394076526165,0.699573814868927\n             ,-0.771387696266174,0.0395333021879196,0.635136306285858,0.539530575275421,0.836876928806305,0.092432402074337\n             ,0.771463513374329,0.571617126464844,0.279460042715073,0.940263509750366,0.158270344138145,0.301421761512756\n             ,0.97637003660202,0.214487105607986,0.0263973921537399,0.0589314736425877,-0.0994917079806328,0.993291735649109\n             ,0.058000672608614,-0.0229690801352263,0.998052299022675,0.274910867214203,-0.0151522560045123,0.961350321769714\n             ,0.359952032566071,-0.103429064154625,0.927219986915588,-0.00127162621356547,-0.241362497210503,0.970434188842773\n             ,0.174659475684166,-0.296808987855911,0.938828229904175,0.0951899439096451,-0.0263954158872366,0.995109081268311\n             ,0.000567267881706357,0.0375262796878815,0.999295473098755,0.174659475684166,-0.296808987855911,0.938828229904175\n             ,0.235934317111969,-0.318644911050797,0.918041586875916,0.225532427430153,-0.0723189786076546,0.971547782421112\n             ,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.099254384636879,-0.0100136240944266,0.995011687278748\n             ,0.225532427430153,-0.0723189786076546,0.971547782421112,0.235934317111969,-0.318644911050797,0.918041586875916\n             ,0.0292022190988064,-0.160741657018662,0.98656439781189,0.157182320952415,-0.535330414772034,0.829888582229614\n             ,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.00152458809316158,-0.818883240222931,0.573958158493042\n             ,0.0370258577167988,-0.771627187728882,0.63499653339386,0.130942046642303,-0.413219839334488,0.901167869567871\n             ,0.157182320952415,-0.535330414772034,0.829888582229614,0.0370258577167988,-0.771627187728882,0.63499653339386\n             ,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.0289378985762596,0.188017979264259,-0.981739223003387\n             ,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-5.31019793470477e-007,0.257037252187729,-0.966401517391205\n             ,-0.00141350529156625,0.303659945726395,-0.952779412269592,-0.0289378985762596,0.188017979264259,-0.981739223003387\n             ,-0.00141350529156625,0.303659945726395,-0.952779412269592,0.234113991260529,0.373340249061584,-0.89766788482666\n             ,0.258906006813049,0.225121974945068,-0.939301729202271,0.696373343467712,0.309285789728165,-0.647616028785706\n             ,0.727709889411926,0.17916151881218,-0.662072122097015,0.258906006813049,0.225121974945068,-0.939301729202271\n             ,0.234113991260529,0.373340249061584,-0.89766788482666,0.727709889411926,0.17916151881218,-0.662072122097015\n             ,0.696373343467712,0.309285789728165,-0.647616028785706,0.903672158718109,0.187046512961388,-0.385214596986771\n             ,0.9054034948349,0.148057624697685,-0.397898882627487,0.862718880176544,0.197039529681206,-0.465716183185577\n             ,0.9054034948349,0.148057624697685,-0.397898882627487,0.903672158718109,0.187046512961388,-0.385214596986771\n             ,0.889020264148712,0.213740766048431,-0.404917031526566,0.696373343467712,0.309285789728165,-0.647616028785706\n             ,0.644856452941895,0.422154635190964,-0.637138664722443,0.875346660614014,0.271785736083984,-0.399875849485397\n             ,0.903672158718109,0.187046512961388,-0.385214596986771,0.644856452941895,0.422154635190964,-0.637138664722443\n             ,0.696373343467712,0.309285789728165,-0.647616028785706,0.234113991260529,0.373340249061584,-0.89766788482666\n             ,0.240688636898994,0.458865791559219,-0.85528427362442,0.240688636898994,0.458865791559219,-0.85528427362442\n             ,0.234113991260529,0.373340249061584,-0.89766788482666,-0.00141350529156625,0.303659945726395,-0.952779412269592\n             ,0.0252151377499104,0.378374934196472,-0.9253089427948,0.0252151377499104,0.378374934196472,-0.9253089427948\n             ,-0.00141350529156625,0.303659945726395,-0.952779412269592,-5.31019793470477e-007,0.257037252187729,-0.966401517391205\n             ,9.78030900711246e-009,0.344052970409393,-0.93895024061203,0.335281848907471,0.203614771366119,0.919851660728455\n             ,0.292623817920685,0.00810971390455961,0.956193268299103,0.152735993266106,0.0633700788021088,0.986233234405518\n             ,0.144889816641808,0.162904694676399,0.975945174694061,0.742353081703186,0.249405577778816,0.621859073638916\n             ,0.335281848907471,0.203614771366119,0.919851660728455,0.144889816641808,0.162904694676399,0.975945174694061\n             ,0.562908291816711,0.161133006215096,0.810660421848297,0.952159941196442,0.220857203006744,0.211219072341919\n             ,0.871811747550964,0.251815319061279,0.420158743858337,0.865987479686737,0.269352704286575,0.421324998140335\n             ,0.935757219791412,0.300309896469116,0.184857651591301,0.633589029312134,0.43701559305191,-0.638421773910522\n             ,0.847342550754547,0.298378229141235,-0.439296066761017,0.875346660614014,0.271785736083984,-0.399875849485397\n             ,0.644856452941895,0.422154635190964,-0.637138664722443,0.837246775627136,-0.256030231714249,-0.483183532953262\n             ,0.849871397018433,-0.222601994872093,-0.477668255567551,0.711495935916901,-0.0537417083978653,-0.700632095336914\n             ,0.706851065158844,-0.181566014885902,-0.683663189411163,0.837246775627136,-0.256030231714249,-0.483183532953262\n             ,0.706851065158844,-0.181566014885902,-0.683663189411163,0.744332075119019,0.174594134092331,-0.644582509994507\n             ,0.856384754180908,0.207969963550568,-0.472603112459183,0.516355931758881,0.769888043403625,-0.375031918287277\n             ,0.556707918643951,0.787832021713257,-0.263433039188385,0.856384754180908,0.207969963550568,-0.472603112459183\n             ,0.744332075119019,0.174594134092331,-0.644582509994507,0.428307920694351,0.88731974363327,-0.170926719903946\n             ,0.556707918643951,0.787832021713257,-0.263433039188385,0.516355931758881,0.769888043403625,-0.375031918287277\n             ,0.667598783969879,0.599002242088318,-0.442163020372391,0.711495935916901,-0.0537417083978653,-0.700632095336914\n             ,0.849871397018433,-0.222601994872093,-0.477668255567551,0.847342550754547,0.298378229141235,-0.439296066761017\n             ,0.633589029312134,0.43701559305191,-0.638421773910522,-0.0764778554439545,-0.225456923246384,-0.971246778964996\n             ,-0.0648035630583763,-0.03354711830616,-0.997334003448486,0.238241225481033,-0.0322869308292866,-0.970669209957123\n             ,0.213652655482292,-0.249391734600067,-0.94454026222229,0.712960124015808,-0.033335629850626,-0.700411677360535\n             ,0.66176563501358,-0.249233901500702,-0.707070529460907,0.213652655482292,-0.249391734600067,-0.94454026222229\n             ,0.238241225481033,-0.0322869308292866,-0.970669209957123,-0.154773816466331,-0.473390430212021,-0.867148518562317\n             ,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,1.25483495594381e-007,-0.219631806015968,-0.975582838058472\n             ,-0.0764778554439545,-0.225456923246384,-0.971246778964996,0.152735993266106,0.0633700788021088,0.986233234405518\n             ,0.274910867214203,-0.0151522560045123,0.961350321769714,0.225532427430153,-0.0723189786076546,0.971547782421112\n             ,0.099254384636879,-0.0100136240944266,0.995011687278748,0.152735993266106,0.0633700788021088,0.986233234405518\n             ,0.099254384636879,-0.0100136240944266,0.995011687278748,-0.00901283789426088,0.0965975746512413,0.995282709598541\n             ,0.144889816641808,0.162904694676399,0.975945174694061,0.562908291816711,0.161133006215096,0.810660421848297\n             ,0.144889816641808,0.162904694676399,0.975945174694061,-0.00901283789426088,0.0965975746512413,0.995282709598541\n             ,0.237323373556137,0.127464771270752,0.963031828403473,0.8788041472435,-0.274041712284088,0.390646249055862,0.923468410968781\n             ,-0.310481667518616,0.225404515862465,0.911828219890594,-0.323383867740631,0.252966731786728,0.86302787065506\n             ,-0.341093569993973,0.372609823942184,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.00160102033987641\n             ,-0.972155630588531,-0.234330713748932,-0.661673307418823,-0.718335151672363,-0.214902579784393,-0.696818470954895\n             ,-0.717234194278717,0.00436395406723022,0.839759349822998,0.221470341086388,-0.495736926794052,0.737981557846069\n             ,0.239907741546631,-0.630735695362091,0.754355251789093,0.176875531673431,-0.632189214229584,0.830685615539551\n             ,0.156212329864502,-0.53437727689743,0.0292022190988064,-0.160741657018662,0.98656439781189,0.235934317111969\n             ,-0.318644911050797,0.918041586875916,0.130942046642303,-0.413219839334488,0.901167869567871,-0.176305994391441\n             ,-0.141984179615974,0.974041402339935,-0.176305994391441,-0.141984179615974,0.974041402339935,0.130942046642303\n             ,-0.413219839334488,0.901167869567871,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.314308881759644\n             ,-0.16680882871151,0.934550523757935,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.230195790529251\n             ,-0.346913009881973,0.909209132194519,-0.314308881759644,-0.16680882871151,0.934550523757935,-0.288185745477676\n             ,-0.458648860454559,0.840589225292206,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.099254384636879\n             ,-0.0100136240944266,0.995011687278748,0.0292022190988064,-0.160741657018662,0.98656439781189,0.865987479686737\n             ,0.269352704286575,0.421324998140335,0.810771644115448,0.203989744186401,0.54866886138916,0.798646211624146,0.188777849078178\n             ,0.571425557136536,0.762866199016571,0.277735590934753,0.583864748477936,0.865987479686737,0.269352704286575\n             ,0.421324998140335,0.871811747550964,0.251815319061279,0.420158743858337,0.742353081703186,0.249405577778816\n             ,0.621859073638916,0.810771644115448,0.203989744186401,0.54866886138916,0.8788041472435,-0.274041712284088,0.390646249055862\n             ,0.833742022514343,-0.228465765714645,0.502670586109161,0.742353081703186,0.249405577778816,0.621859073638916\n             ,0.871811747550964,0.251815319061279,0.420158743858337,0.833742022514343,-0.228465765714645,0.502670586109161\n             ,0.8788041472435,-0.274041712284088,0.390646249055862,0.86302787065506,-0.341093569993973,0.372609823942184,0.804235875606537\n             ,-0.38592141866684,0.451961606740952,0.560579180717468,0.758218228816986,0.332950711250305,0.537741303443909\n             ,0.6980841755867,0.472771346569061,0.824855744838715,-0.0143105983734131,0.565162122249603,0.897881627082825\n             ,0.0853674784302711,0.4318807721138,0.560579180717468,0.758218228816986,0.332950711250305,0.648516714572906,0.651950538158417\n             ,0.392920613288879,0.29329439997673,0.882676124572754,0.367234617471695,0.537741303443909,0.6980841755867,0.472771346569061\n             ,-0.431082636117935,0.669595658779144,0.604821860790253,-0.775685489177704,-0.0603891722857952,0.628223836421967\n             ,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.60768449306488,0.504088938236237,0.613688766956329\n             ,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.526136100292206,-0.358043670654297,0.77135306596756\n             ,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.459984451532364,-0.0801213979721069,0.884304702281952\n             ,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.431082636117935,0.669595658779144,0.604821860790253\n             ,-0.324628859758377,0.674010813236237,0.663570284843445,-0.517962217330933,-0.411119759082794,0.750130414962769\n             ,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.775685489177704,-0.0603891722857952,0.628223836421967\n             ,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.526136100292206,-0.358043670654297,0.77135306596756\n             ,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.168157458305359,0.0816780477762222,0.982370495796204\n             ,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.223823264241219,-0.0781873688101768,0.971488475799561\n             ,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.300837725400925,0.085910752415657,0.949797868728638\n             ,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.23646841943264,-0.0167027618736029,0.971495628356934\n             ,-0.300837725400925,0.085910752415657,0.949797868728638,-0.542048811912537,0.261238425970078,0.79870992898941\n             ,-0.46170049905777,0.186353012919426,0.867240011692047,-0.168157458305359,0.0816780477762222,0.982370495796204\n             ,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.0607370398938656,-0.274085581302643,0.959785461425781\n             ,-0.0535679198801517,-0.0883782878518105,0.994645535945892,-0.690265357494354,-0.0591067634522915,0.721138119697571\n             ,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.60768449306488,0.504088938236237,0.613688766956329\n             ,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.0535679198801517,-0.0883782878518105,0.994645535945892\n             ,-0.60768449306488,0.504088938236237,0.613688766956329,-0.0499880313873291,0.682301819324493,0.72935962677002\n             ,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.431082636117935,0.669595658779144,0.604821860790253\n             ,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.911240935325623,0.185407862067223,-0.367782354354858\n             ,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.851074159145355,0.339823096990585,-0.400241255760193\n             ,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.927313208580017,0.3043152987957,-0.217904642224312\n             ,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.907857835292816,0.213884130120277,-0.360621273517609\n             ,0.804645359516144,-0.23887425661087,0.543585240840912,0.928109109401703,-0.270218104124069,0.256116449832916\n             ,0.942616164684296,-0.229998171329498,0.242023915052414,0.821004927158356,-0.27689054608345,0.499282002449036\n             ,-0.0987945944070816,-0.283014118671417,-0.95401394367218,0.498120248317719,-0.335890352725983,-0.799408435821533\n             ,0.437422394752502,-0.487632155418396,-0.755563676357269,-0.0824775397777557,-0.385316282510757,-0.919091284275055\n             ,0.129383936524391,-0.521730244159698,-0.843242168426514,-0.122972406446934,-0.410810470581055,-0.903389453887939\n             ,-0.213652208447456,-0.249391779303551,-0.944540321826935,0.0764780566096306,-0.225457280874252,-0.971246659755707\n             ,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.911240935325623,0.185407862067223,-0.367782354354858\n             ,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.907857835292816,0.213884130120277,-0.360621273517609\n             ,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.911240935325623,0.185407862067223,-0.367782354354858\n             ,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.91725742816925,0.217973545193672,-0.333356142044067\n             ,-0.890709757804871,0.27239003777504,-0.363922744989395,-0.869192600250244,0.256745725870132,-0.422594249248505\n             ,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.762536406517029,0.295603901147842,-0.57546204328537\n             ,-0.896749377250671,0.217612341046333,0.3853380382061,-0.857216417789459,0.268806040287018,0.43923032283783,-0.937493622303009\n             ,0.316276133060455,0.145172759890556,-0.947259664535522,0.288537085056305,0.139446943998337,-0.168157458305359\n             ,0.0816780477762222,0.982370495796204,-0.46170049905777,0.186353012919426,0.867240011692047,-0.19649812579155\n             ,0.101020708680153,0.975286245346069,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.937493622303009\n             ,0.316276133060455,0.145172759890556,-0.857216417789459,0.268806040287018,0.43923032283783,-0.856140553951263\n             ,0.267054259777069,0.442386031150818,-0.949352085590363,0.231479719281197,0.21248009800911,0.0648036450147629\n             ,-0.0335458181798458,-0.997334063053131,0.0289377775043249,0.188017472624779,-0.981739282608032,-9.64683522397536e-007\n             ,0.150016367435455,-0.988683521747589,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,0.0648036450147629\n             ,-0.0335458181798458,-0.997334063053131,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.258904993534088\n             ,0.225121468305588,-0.939302146434784,0.0289377775043249,0.188017472624779,-0.981739282608032,-0.981611013412476\n             ,0.117763727903366,-0.150238215923309,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.879550158977509\n             ,0.255253672599792,-0.401543378829956,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.756916880607605\n             ,0.234977602958679,0.609805166721344,-0.623560965061188,0.103526078164577,0.774889707565308,-0.76946359872818\n             ,0.151790544390678,0.620391309261322,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.832928359508514\n             ,0.179307460784912,-0.523525714874268,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.560297548770905\n             ,0.801149368286133,-0.210300549864769,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.557936251163483\n             ,0.826133012771606,-0.0788124948740005,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.882979989051819\n             ,0.18293422460556,-0.432297796010971,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.938374042510986\n             ,0.216587886214256,-0.269339561462402,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.539918065071106\n             ,0.836612343788147,0.0925649628043175,-0.557555019855499,0.7959104180336,0.235921680927277,-0.937403380870819\n             ,0.166482493281364,0.305873274803162,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.560215890407562\n             ,0.757637023925781,0.334879487752914,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.199406370520592\n             ,0.723391234874725,-0.66101610660553,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.000922495266422629\n             ,0.0980329513549805,-0.995182752609253,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.249231114983559\n             ,0.10294646769762,-0.962956845760345,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.363279938697815\n             ,0.743713617324829,-0.561175346374512,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.199406370520592\n             ,0.723391234874725,-0.66101610660553,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.0328970178961754\n             ,0.677300930023193,-0.734970211982727,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.363279938697815\n             ,0.743713617324829,-0.561175346374512,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.453488618135452\n             ,0.205984279513359,-0.867132365703583,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.595847427845001\n             ,0.771685659885406,-0.222411975264549,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.535965800285339\n             ,0.788156151771545,-0.30257323384285,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.557936251163483\n             ,0.826133012771606,-0.0788124948740005,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.595847427845001\n             ,0.771685659885406,-0.222411975264549,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.885142028331757\n             ,0.459607869386673,-0.072692796587944,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.557936251163483\n             ,0.826133012771606,-0.0788124948740005,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.721357464790344\n             ,0.650649428367615,0.237273663282394,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.539918065071106\n             ,0.836612343788147,0.0925649628043175,-0.557555019855499,0.7959104180336,0.235921680927277,-0.89384138584137\n             ,0.0922480821609497,0.438791304826736,-0.937403380870819,0.166482493281364,0.305873274803162,-0.918076574802399\n             ,-0.319764405488968,0.234277844429016,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.282345056533813\n             ,-0.215331554412842,-0.934833467006683,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.000922495266422629\n             ,0.0980329513549805,-0.995182752609253,-0.000504601746797562,-0.248110130429268,-0.968731701374054,-0.217749357223511\n             ,0.0478734634816647,-0.974829912185669,-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.000504601746797562\n             ,-0.248110130429268,-0.968731701374054,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-0.388578176498413\n             ,0.0904658958315849,-0.916963994503021,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.282345056533813\n             ,-0.215331554412842,-0.934833467006683,-0.217749357223511,0.0478734634816647,-0.974829912185669,-0.822116851806641\n             ,-0.369756579399109,-0.432901799678802,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.849872410297394\n             ,-0.222603037953377,-0.477665901184082,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.924633741378784\n             ,-0.380622237920761,-0.0133865028619766,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.898467183113098\n             ,-0.361167401075363,-0.249629408121109,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.975579440593719\n             ,0.218437165021896,0.0230220295488834,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.876467823982239\n             ,-0.40311262011528,-0.263257294893265,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.882979989051819\n             ,0.18293422460556,-0.432297796010971,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.81538712978363\n             ,-0.2979336977005,-0.496366053819656,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.460297226905823\n             ,0.136182025074959,-0.877257645130157,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.282345056533813\n             ,-0.215331554412842,-0.934833467006683,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.0466683618724346\n             ,0.500033855438232,-0.864747524261475,-0.0252151340246201,0.378374934196472,-0.9253089427948,-0.240688547492027\n             ,0.458865880966187,-0.855284214019775,-0.251288145780563,0.529204964637756,-0.810429751873016,0.129383936524391\n             ,-0.521730244159698,-0.843242168426514,0.0764780566096306,-0.225457280874252,-0.971246659755707,1.25483495594381e-007\n             ,-0.219631806015968,-0.975582838058472,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,-0.893712103366852\n             ,0.0450193509459496,-0.446376502513886,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.869192600250244\n             ,0.256745725870132,-0.422594249248505,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.122972406446934\n             ,-0.410810470581055,-0.903389453887939,0.129383936524391,-0.521730244159698,-0.843242168426514,0.355752408504486\n             ,-0.498135715723038,-0.790759801864624,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.915939331054688\n             ,0.209013342857361,-0.342590838670731,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.834647357463837\n             ,0.36496365070343,-0.412511020898819,-0.949352085590363,0.231479719281197,0.21248009800911,-0.977315187454224\n             ,0.206456959247589,-0.0472285002470016,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.937493622303009\n             ,0.316276133060455,0.145172759890556,-0.937493622303009,0.316276133060455,0.145172759890556,-0.945763826370239\n             ,0.294518440961838,-0.137075424194336,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.947259664535522\n             ,0.288537085056305,0.139446943998337,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0499880313873291\n             ,0.682301819324493,0.72935962677002,6.54090908938088e-005,0.672398924827576,0.740189015865326,-7.2909109860575e-009\n             ,0.660060167312622,0.751212775707245,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.459984451532364\n             ,-0.0801213979721069,0.884304702281952,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.697653412818909\n             ,-0.241543143987656,0.674489855766296,-0.46170049905777,0.186353012919426,0.867240011692047,-0.56521064043045\n             ,0.138002142310143,0.813321769237518,-0.19649812579155,0.101020708680153,0.975286245346069,-0.916763663291931\n             ,0.137710228562355,0.374940365552902,-0.91884845495224,0.158920049667358,0.361195176839828,-0.756916880607605\n             ,0.234977602958679,0.609805166721344,-0.76946359872818,0.151790544390678,0.620391309261322,-0.34188050031662\n             ,0.0427594222128391,0.938770115375519,0.372333496809006,0.209000527858734,0.904260218143463,0.119991220533848\n             ,0.0380257852375507,0.992046475410461,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.934890508651733\n             ,-0.354153573513031,-0.0235587190836668,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.918076574802399\n             ,-0.319764405488968,0.234277844429016,-0.937403380870819,0.166482493281364,0.305873274803162,-0.975579440593719\n             ,0.218437165021896,0.0230220295488834,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.918076574802399\n             ,-0.319764405488968,0.234277844429016,0.252460122108459,-0.750463306903839,-0.61079353094101,0.471433281898499\n             ,-0.76721602678299,-0.434891045093536,0.734110653400421,-0.4181247651577,-0.535026371479034,0.355752408504486\n             ,-0.498135715723038,-0.790759801864624,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.19649812579155\n             ,0.101020708680153,0.975286245346069,-0.14869236946106,-0.0228312611579895,0.988619923591614,0.0323158428072929\n             ,-0.124152012169361,0.991736829280853,-0.56521064043045,0.138002142310143,0.813321769237518,-0.504790067672729\n             ,0.0473182201385498,0.861944317817688,-0.14869236946106,-0.0228312611579895,0.988619923591614,-0.19649812579155\n             ,0.101020708680153,0.975286245346069,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.56521064043045\n             ,0.138002142310143,0.813321769237518,-0.791948556900024,0.189529091119766,0.580427587032318,-0.76946359872818\n             ,0.151790544390678,0.620391309261322,-0.896749377250671,0.217612341046333,0.3853380382061,-0.916763663291931\n             ,0.137710228562355,0.374940365552902,-0.76946359872818,0.151790544390678,0.620391309261322,-0.791948556900024\n             ,0.189529091119766,0.580427587032318,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.714573800563812\n             ,0.00537209678441286,-0.699539422988892,-0.757742166519165,0.0436116605997086,-0.6510950922966,-0.747396409511566\n             ,0.179795786738396,-0.639587461948395,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.693207740783691\n             ,0.00517747504636645,-0.720719218254089,-0.736777663230896,0.0245511569082737,-0.675689220428467,-0.757742166519165\n             ,0.0436116605997086,-0.6510950922966,-0.0824775397777557,-0.385316282510757,-0.919091284275055,0.437422394752502\n             ,-0.487632155418396,-0.755563676357269,0.381186455488205,-0.513081967830658,-0.769053816795349,-0.0642701610922813\n             ,-0.378672003746033,-0.923296749591827,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.767184436321259\n             ,-0.520890653133392,-0.374300688505173,0.834830164909363,-0.436789900064468,-0.335072010755539,0.804645359516144\n             ,-0.23887425661087,0.543585240840912,0.840525209903717,-0.068711943924427,0.537397503852844,0.943277299404144\n             ,-0.202248081564903,0.263293832540512,0.928109109401703,-0.270218104124069,0.256116449832916,0.804645359516144\n             ,-0.23887425661087,0.543585240840912,0.821004927158356,-0.27689054608345,0.499282002449036,0.555963099002838\n             ,-0.328692525625229,0.76345682144165,0.6691654920578,-0.191945850849152,0.717895746231079,-0.985917925834656\n             ,0.0740947499871254,0.149919137358665,-0.916763663291931,0.137710228562355,0.374940365552902,-0.896749377250671\n             ,0.217612341046333,0.3853380382061,-0.947259664535522,0.288537085056305,0.139446943998337,0.372333496809006,0.209000527858734\n             ,0.904260218143463,0.369765430688858,-0.00654551573097706,0.929102063179016,0.119991220533848,0.0380257852375507\n             ,0.992046475410461,0.166143178939819,-0.158774629235268,0.973235368728638,0.119991220533848,0.0380257852375507\n             ,0.992046475410461,0.369765430688858,-0.00654551573097706,0.929102063179016,0.555963099002838,-0.328692525625229\n             ,0.76345682144165,0.821004927158356,-0.27689054608345,0.499282002449036,0.569704055786133,-0.669814586639404\n             ,0.476220279932022,0.29104819893837,-0.456484824419022,0.840780913829803,0.569704055786133,-0.669814586639404\n             ,0.476220279932022,0.821004927158356,-0.27689054608345,0.499282002449036,0.942616164684296,-0.229998171329498\n             ,0.242023915052414,0.552965581417084,-0.801727950572968,0.226851031184196,0.698322951793671,-0.715752601623535\n             ,0.00657681748270988,0.552965581417084,-0.801727950572968,0.226851031184196,0.942616164684296,-0.229998171329498\n             ,0.242023915052414,0.969441294670105,-0.244898587465286,0.0144304987043142,0.320217043161392,-0.31071874499321\n             ,0.894938468933105,0.571035802364349,-0.157328203320503,0.805708348751068,0.6691654920578,-0.191945850849152\n             ,0.717895746231079,0.555963099002838,-0.328692525625229,0.76345682144165,0.771388173103333,0.0395334213972092\n             ,0.63513571023941,0.840525209903717,-0.068711943924427,0.537397503852844,0.804645359516144,-0.23887425661087\n             ,0.543585240840912,0.6691654920578,-0.191945850849152,0.717895746231079,0.571035802364349,-0.157328203320503\n             ,0.805708348751068,0.771388173103333,0.0395334213972092,0.63513571023941,0.6691654920578,-0.191945850849152,0.717895746231079\n             ,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.975579440593719,0.218437165021896,0.0230220295488834\n             ,-0.937403380870819,0.166482493281364,0.305873274803162,-0.557555019855499,0.7959104180336,0.235921680927277\n             ,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.296950221061707,-0.0679281502962112,0.952473819255829\n             ,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.0589147843420506,-0.0217308606952429,0.998026490211487\n             ,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.0589147843420506,-0.0217308606952429,0.998026490211487\n             ,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.223823264241219,-0.0781873688101768,0.971488475799561\n             ,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.173607736825943,-0.299605935811996,0.938134670257568\n             ,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.0504573062062263,-0.359267920255661,0.931869447231293\n             ,0.29104819893837,-0.456484824419022,0.840780913829803,0.569704055786133,-0.669814586639404,0.476220279932022\n             ,0.0579886250197887,-0.947378635406494,0.314819037914276,-0.0412573479115963,-0.771816492080688,0.634505391120911\n             ,0.0579886250197887,-0.947378635406494,0.314819037914276,0.552965581417084,-0.801727950572968,0.226851031184196\n             ,-0.00150869158096612,-0.98975282907486,0.142783313989639,-7.15617352398112e-005,-0.950459361076355,0.310848772525787\n             ,-0.000327471556374803,-0.115864381194115,0.993264973163605,6.54090908938088e-005,0.672398924827576,0.740189015865326\n             ,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.0535679198801517,-0.0883782878518105,0.994645535945892\n             ,-0.000327471556374803,-0.115864381194115,0.993264973163605,-0.0535679198801517,-0.0883782878518105,0.994645535945892\n             ,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.00104101200122386,-0.114976294338703,0.993367731571198\n             ,0.000567267881706357,0.0375262796878815,0.999295473098755,-0.000558733532670885,-0.012703550979495,0.999919176101685\n             ,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.0940853953361511,-0.0260460525751114,0.995223343372345\n             ,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.00127162621356547,-0.241362497210503,0.970434188842773\n             ,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.160209238529205,-0.537021696567535,0.828215360641479\n             ,-0.0412573479115963,-0.771816492080688,0.634505391120911,0.0579886250197887,-0.947378635406494,0.314819037914276\n             ,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.00152458809316158,-0.818883240222931,0.573958158493042\n             ,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.526136100292206,-0.358043670654297,0.77135306596756\n             ,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.0599461607635021,-0.0994156152009964,0.993238627910614\n             ,-0.00104101200122386,-0.114976294338703,0.993367731571198,-0.0607370398938656,-0.274085581302643,0.959785461425781\n             ,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.00124295917339623,-0.0901384949684143,0.995928466320038\n             ,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.0589147843420506,-0.0217308606952429,0.998026490211487\n             ,-0.000558733532670885,-0.012703550979495,0.999919176101685,-0.00124295917339623,-0.0901384949684143,0.995928466320038\n             ,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.00127162621356547,-0.241362497210503,0.970434188842773\n             ,0.000567267881706357,0.0375262796878815,0.999295473098755,-0.0940853953361511,-0.0260460525751114,0.995223343372345\n             ,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.173607736825943,-0.299605935811996,0.938134670257568\n             ,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.223823264241219,-0.0781873688101768,0.971488475799561\n             ,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,0.0289377775043249,0.188017472624779,-0.981739282608032\n             ,0.00141346117015928,0.303658157587051,-0.95278000831604,-5.31019793470477e-007,0.257037252187729,-0.966401517391205\n             ,0.0289377775043249,0.188017472624779,-0.981739282608032,-0.258904993534088,0.225121468305588,-0.939302146434784\n             ,-0.234113723039627,0.373339533805847,-0.897668302059174,0.00141346117015928,0.303658157587051,-0.95278000831604\n             ,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.908670663833618,0.161942407488823,-0.384827554225922\n             ,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.894481837749481,0.206879526376724,-0.396362364292145\n             ,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.894481837749481,0.206879526376724,-0.396362364292145\n             ,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.889981806278229,0.204838335514069,-0.407398611307144\n             ,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.0252151340246201,0.378374934196472,-0.9253089427948\n             ,0.00141346117015928,0.303658157587051,-0.95278000831604,-0.234113723039627,0.373339533805847,-0.897668302059174\n             ,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.834647357463837,0.36496365070343,-0.412511020898819\n             ,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.81538712978363,-0.2979336977005,-0.496366053819656\n             ,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.710737705230713,-0.0530968047678471,-0.701450347900391\n             ,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.81538712978363,-0.2979336977005,-0.496366053819656\n             ,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.706996381282806,0.174120202660561,-0.685447514057159\n             ,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.486983984708786,0.772737681865692,-0.407090991735458\n             ,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.832928359508514,0.179307460784912,-0.523525714874268\n             ,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.336488217115402,0.925924956798553,-0.17157706618309\n             ,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.486983984708786,0.772737681865692,-0.407090991735458\n             ,-0.535965800285339,0.788156151771545,-0.30257323384285,0.0764780566096306,-0.225457280874252,-0.971246659755707\n             ,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773\n             ,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,0.0764780566096306,-0.225457280874252,-0.971246659755707\n             ,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.238240316510201,-0.0322862826287746,-0.970669448375702\n             ,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-0.798387050628662,0.133906185626984,-0.587066650390625\n             ,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.73286509513855,0.247602537274361,-0.633720517158508\n             ,-0.0824775397777557,-0.385316282510757,-0.919091284275055,-0.0642701610922813,-0.378672003746033,-0.923296749591827\n             ,-0.453366041183472,-0.142135575413704,-0.879918575286865,-0.493558466434479,-0.160849839448929,-0.854708909988403\n             ,-0.0987945944070816,-0.283014118671417,-0.95401394367218,-0.0824775397777557,-0.385316282510757,-0.919091284275055\n             ,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.539451956748962,-0.0545219406485558,-0.840249359607697\n             ,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.647741854190826,-0.201575800776482,-0.7347092628479\n             ,-0.122972406446934,-0.410810470581055,-0.903389453887939,-0.11159410327673,-0.287050694227219,-0.951393008232117\n             ,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.122972406446934,-0.410810470581055,-0.903389453887939\n             ,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.658169209957123,-0.236423432826996,-0.714784801006317\n             ,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.213652208447456,-0.249391779303551,-0.944540321826935\n             ,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.710200548171997,-0.0193932019174099,-0.703732252120972\n             ,-0.258904993534088,0.225121468305588,-0.939302146434784,-0.238240316510201,-0.0322862826287746,-0.970669448375702\n             ,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.729262590408325,0.181498125195503,-0.659723043441772\n             ,-0.234113723039627,0.373339533805847,-0.897668302059174,-0.258904993534088,0.225121468305588,-0.939302146434784\n             ,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.705344617366791,0.3143090903759,-0.635372936725616\n             ,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.234113723039627,0.373339533805847,-0.897668302059174\n             ,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.6525519490242,0.396776258945465,-0.645557582378387\n             ,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.240688547492027,0.458865880966187,-0.855284214019775\n             ,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.654150426387787,0.449408560991287,-0.608374178409576\n             ,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.388578176498413,0.0904658958315849,-0.916963994503021\n             ,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.690211474895477,-0.193527087569237,-0.69724839925766\n             ,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.706996381282806,0.174120202660561,-0.685447514057159\n             ,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.434679806232452,-0.159963503479958,-0.886264741420746\n             ,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.460297226905823,0.136182025074959,-0.877257645130157\n             ,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.486983984708786,0.772737681865692,-0.407090991735458\n             ,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.535482585430145,0.550125539302826,-0.640796601772308\n             ,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.486983984708786,0.772737681865692,-0.407090991735458\n             ,-0.0412573479115963,-0.771816492080688,0.634505391120911,-0.00152458809316158,-0.818883240222931,0.573958158493042\n             ,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.160209238529205,-0.537021696567535,0.828215360641479\n             ,0.29104819893837,-0.456484824419022,0.840780913829803,-0.0412573479115963,-0.771816492080688,0.634505391120911\n             ,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.0504573062062263,-0.359267920255661,0.931869447231293\n             ,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.51021933555603,-0.415738612413406,0.752886176109314\n             ,-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.722804188728333,-0.031068803742528,0.690354108810425\n             ,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.459984451532364,-0.0801213979721069,0.884304702281952\n             ,-0.324628859758377,0.674010813236237,0.663570284843445,-0.47534304857254,0.696664929389954,0.537314653396606\n             ,-0.285846680402756,0.740470588207245,0.608272194862366,-0.559998273849487,0.512845575809479,0.65068531036377\n             ,-0.47534304857254,0.696664929389954,0.537314653396606,-0.324628859758377,0.674010813236237,0.663570284843445\n             ,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.977315187454224,0.206456959247589,-0.0472285002470016\n             ,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.898467183113098,-0.361167401075363,-0.249629408121109\n             ,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.889225006103516,0.236249953508377,-0.391745924949646\n             ,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.849872410297394,-0.222603037953377,-0.477665901184082\n             ,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.834647357463837,0.36496365070343,-0.412511020898819\n             ,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.710737705230713,-0.0530968047678471,-0.701450347900391\n             ,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.388578176498413,0.0904658958315849,-0.916963994503021\n             ,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.654150426387787,0.449408560991287,-0.608374178409576\n             ,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.217749357223511,0.0478734634816647,-0.974829912185669\n             ,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.251288145780563,0.529204964637756,-0.810429751873016\n             ,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.217749357223511,0.0478734634816647,-0.974829912185669\n             ,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-1.63649360729323e-008,0.470822811126709,-0.882227778434753\n             ,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.893712103366852,0.0450193509459496,-0.446376502513886\n             ,-0.836360037326813,-0.0850801542401314,-0.541537880897522,-0.798387050628662,0.133906185626984,-0.587066650390625\n             ,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.762536406517029,0.295603901147842,-0.57546204328537\n             ,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.798387050628662,0.133906185626984,-0.587066650390625\n             ,0.913829922676086,-0.341083079576492,-0.220402225852013,0.663747429847717,-0.717649459838867,-0.210757240653038\n             ,0.698322951793671,-0.715752601623535,0.00657681748270988,0.969441294670105,-0.244898587465286,0.0144304987043142\n             ,0.437422394752502,-0.487632155418396,-0.755563676357269,0.834830164909363,-0.436789900064468,-0.335072010755539\n             ,0.767184436321259,-0.520890653133392,-0.374300688505173,0.381186455488205,-0.513081967830658,-0.769053816795349\n             ,0.734110653400421,-0.4181247651577,-0.535026371479034,0.913829922676086,-0.341083079576492,-0.220402225852013\n             ,0.834830164909363,-0.436789900064468,-0.335072010755539,0.437422394752502,-0.487632155418396,-0.755563676357269\n             ,0.498120248317719,-0.335890352725983,-0.799408435821533,0.663747429847717,-0.717649459838867,-0.210757240653038\n             ,0.913829922676086,-0.341083079576492,-0.220402225852013,0.734110653400421,-0.4181247651577,-0.535026371479034\n             ,0.471433281898499,-0.76721602678299,-0.434891045093536,-0.0466683618724346,0.500033855438232,-0.864747524261475\n             ,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,9.78030900711246e-009,0.344052970409393,-0.93895024061203\n             ,-0.0252151340246201,0.378374934196472,-0.9253089427948,-0.0252151340246201,0.378374934196472,-0.9253089427948\n             ,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-5.31019793470477e-007,0.257037252187729,-0.966401517391205\n             ,0.00141346117015928,0.303658157587051,-0.95278000831604,0.129383936524391,-0.521730244159698,-0.843242168426514\n             ,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,3.42403474462571e-008,-0.837808728218079,-0.545963823795319\n             ,0.252460122108459,-0.750463306903839,-0.61079353094101,0.471433281898499,-0.76721602678299,-0.434891045093536\n             ,0.252460122108459,-0.750463306903839,-0.61079353094101,3.42403474462571e-008,-0.837808728218079,-0.545963823795319\n             ,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,0.663747429847717,-0.717649459838867,-0.210757240653038\n             ,0.471433281898499,-0.76721602678299,-0.434891045093536,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736\n             ,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.00293796602636576,-0.999473214149475,-0.0323209837079048\n             ,0.698322951793671,-0.715752601623535,0.00657681748270988,0.663747429847717,-0.717649459838867,-0.210757240653038\n             ,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.00293796602636576,-0.999473214149475,-0.0323209837079048\n             ,-0.00150869158096612,-0.98975282907486,0.142783313989639,0.552965581417084,-0.801727950572968,0.226851031184196\n             ,0.698322951793671,-0.715752601623535,0.00657681748270988,-0.889981806278229,0.204838335514069,-0.407398611307144\n             ,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.654150426387787,0.449408560991287,-0.608374178409576\n             ,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.909943282604218,0.190858140587807,-0.368207067251205\n             ,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.6525519490242,0.396776258945465,-0.645557582378387\n             ,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.908670663833618,0.161942407488823,-0.384827554225922\n             ,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.705344617366791,0.3143090903759,-0.635372936725616\n             ,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.893712103366852,0.0450193509459496,-0.446376502513886\n             ,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.729262590408325,0.181498125195503,-0.659723043441772\n             ,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.836360037326813,-0.0850801542401314,-0.541537880897522\n             ,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.710200548171997,-0.0193932019174099,-0.703732252120972\n             ,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.836360037326813,-0.0850801542401314,-0.541537880897522\n             ,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.647741854190826,-0.201575800776482,-0.7347092628479\n             ,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.715955674648285,0.135700687766075,-0.684830486774445\n             ,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.493558466434479,-0.160849839448929,-0.854708909988403\n             ,-0.453366041183472,-0.142135575413704,-0.879918575286865,-0.693207740783691,0.00517747504636645,-0.720719218254089\n             ,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.493558466434479,-0.160849839448929,-0.854708909988403\n             ,-0.798387050628662,0.133906185626984,-0.587066650390625,-0.836360037326813,-0.0850801542401314,-0.541537880897522\n             ,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.595030784606934,-0.0228520985692739,-0.80337792634964\n             ,-0.721792817115784,0.204645067453384,-0.661162257194519,0.166143178939819,-0.158774629235268,0.973235368728638\n             ,0.0323158428072929,-0.124152012169361,0.991736829280853,-0.14869236946106,-0.0228312611579895,0.988619923591614\n             ,0.119991220533848,0.0380257852375507,0.992046475410461,-0.34188050031662,0.0427594222128391,0.938770115375519\n             ,0.119991220533848,0.0380257852375507,0.992046475410461,-0.14869236946106,-0.0228312611579895,0.988619923591614\n             ,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.0504573062062263,-0.359267920255661,0.931869447231293\n             ,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.0969914272427559,-0.0219030473381281,0.99504417181015\n             ,0.0323158428072929,-0.124152012169361,0.991736829280853,0.29104819893837,-0.456484824419022,0.840780913829803\n             ,-0.0504573062062263,-0.359267920255661,0.931869447231293,0.0323158428072929,-0.124152012169361,0.991736829280853\n             ,0.166143178939819,-0.158774629235268,0.973235368728638,0.29104819893837,-0.456484824419022,0.840780913829803\n             ,0.166143178939819,-0.158774629235268,0.973235368728638,0.244560360908508,-0.223172500729561,0.943601787090302\n             ,0.320217043161392,-0.31071874499321,0.894938468933105,0.555963099002838,-0.328692525625229,0.76345682144165\n             ,-0.223823264241219,-0.0781873688101768,0.971488475799561,-0.0969914272427559,-0.0219030473381281,0.99504417181015\n             ,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.896749377250671,0.217612341046333,0.3853380382061\n             ,-0.791948556900024,0.189529091119766,0.580427587032318,-0.857216417789459,0.268806040287018,0.43923032283783\n             ,-0.542048811912537,0.261238425970078,0.79870992898941,-0.856140553951263,0.267054259777069,0.442386031150818\n             ,-0.857216417789459,0.268806040287018,0.43923032283783,-0.46170049905777,0.186353012919426,0.867240011692047\n             ,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.722804188728333,-0.031068803742528,0.690354108810425\n             ,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.85723865032196,-0.337598741054535,0.388804644346237\n             ,-0.560215890407562,0.757637023925781,0.334879487752914,-0.89384138584137,0.0922480821609497,0.438791304826736\n             ,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.47534304857254,0.696664929389954,0.537314653396606\n             ,-0.559998273849487,0.512845575809479,0.65068531036377,-0.658022820949554,0.640722334384918,0.395576566457748\n             ,-0.560215890407562,0.757637023925781,0.334879487752914,-0.47534304857254,0.696664929389954,0.537314653396606\n             ,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.915939331054688,0.209013342857361,-0.342590838670731\n             ,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.939296424388886,0.188786894083023,-0.286498993635178\n             ,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.889225006103516,0.236249953508377,-0.391745924949646\n             ,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.898467183113098,-0.361167401075363,-0.249629408121109\n             ,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.848252356052399,-0.297393381595612,-0.438206702470779\n             ,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.876467823982239,-0.40311262011528,-0.263257294893265\n             ,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.938374042510986,0.216587886214256,-0.269339561462402\n             ,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.822116851806641,-0.369756579399109,-0.432901799678802\n             ,-0.947259664535522,0.288537085056305,0.139446943998337,-0.927313208580017,0.3043152987957,-0.217904642224312\n             ,-0.981611013412476,0.117763727903366,-0.150238215923309,-0.985917925834656,0.0740947499871254,0.149919137358665\n             ,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.988040089607239,-0.0323765277862549,0.150760009884834\n             ,-0.91884845495224,0.158920049667358,0.361195176839828,-0.916763663291931,0.137710228562355,0.374940365552902\n             ,-0.997650623321533,0.0179209169000387,-0.0661220476031303,-0.981611013412476,0.117763727903366,-0.150238215923309\n             ,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.890709757804871,0.27239003777504,-0.363922744989395\n             ,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.981611013412476,0.117763727903366,-0.150238215923309\n             ,-0.997650623321533,0.0179209169000387,-0.0661220476031303,-0.988040089607239,-0.0323765277862549,0.150760009884834\n             ,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.894481837749481,0.206879526376724,-0.396362364292145\n             ,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.890709757804871,0.27239003777504,-0.363922744989395\n             ,0.928109109401703,-0.270218104124069,0.256116449832916,0.942102074623108,-0.334151595830917,-0.0280432906001806\n             ,0.969441294670105,-0.244898587465286,0.0144304987043142,0.942616164684296,-0.229998171329498,0.242023915052414\n             ,0.536377429962158,-0.345477372407913,0.770029008388519,0.359952032566071,-0.103429064154625,0.927219986915588\n             ,0.292623817920685,0.00810971390455961,0.956193268299103,0.454795598983765,-0.290122002363205,0.842015504837036\n             ,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0589314736425877,-0.0994917079806328,0.993291735649109\n             ,0.359952032566071,-0.103429064154625,0.927219986915588,0.536377429962158,-0.345477372407913,0.770029008388519\n             ,-0.00104101200122386,-0.114976294338703,0.993367731571198,-0.00124295917339623,-0.0901384949684143,0.995928466320038\n             ,0.0589314736425877,-0.0994917079806328,0.993291735649109,0.0599330253899097,-0.274288892745972,0.95977795124054\n             ,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.480668127536774,-0.309450268745422,0.820486843585968\n             ,-0.300837725400925,0.085910752415657,0.949797868728638,-0.296950221061707,-0.0679281502962112,0.952473819255829\n             ,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.683673858642578,-0.293579787015915,0.668132424354553\n             ,-0.542048811912537,0.261238425970078,0.79870992898941,-0.300837725400925,0.085910752415657,0.949797868728638\n             ,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.871616542339325,-0.254917442798615,0.418690472841263\n             ,-0.856140553951263,0.267054259777069,0.442386031150818,-0.542048811912537,0.261238425970078,0.79870992898941\n             ,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.949352085590363,0.231479719281197,0.21248009800911\n             ,-0.856140553951263,0.267054259777069,0.442386031150818,-0.871616542339325,-0.254917442798615,0.418690472841263\n             ,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.934890508651733,-0.354153573513031,-0.0235587190836668\n             ,-0.977315187454224,0.206456959247589,-0.0472285002470016,-0.949352085590363,0.231479719281197,0.21248009800911\n             ,0.166143178939819,-0.158774629235268,0.973235368728638,0.369765430688858,-0.00654551573097706,0.929102063179016\n             ,0.244560360908508,-0.223172500729561,0.943601787090302,-0.941869378089905,-0.335682570934296,-0.0141169847920537\n             ,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.911426484584808,-0.347711831331253,-0.219996020197868\n             ,-0.837089002132416,-0.441800951957703,-0.322635918855667,0.942102074623108,-0.334151595830917,-0.0280432906001806\n             ,0.834830164909363,-0.436789900064468,-0.335072010755539,0.913829922676086,-0.341083079576492,-0.220402225852013\n             ,0.969441294670105,-0.244898587465286,0.0144304987043142,0.927110075950623,-0.224742949008942,-0.299929141998291\n             ,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.977872133255005,0.203673675656319,-0.0477813258767128\n             ,0.939878582954407,0.179825350642204,-0.290329366922379,-0.939296424388886,0.188786894083023,-0.286498993635178\n             ,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.945763826370239,0.294518440961838,-0.137075424194336\n             ,-0.977315187454224,0.206456959247589,-0.0472285002470016,0.862718880176544,0.197039529681206,-0.465716183185577\n             ,0.839759349822998,0.221470341086388,-0.495736926794052,0.830685615539551,0.156212329864502,-0.53437727689743\n             ,0.892053008079529,0.256361722946167,-0.372182875871658,0.889020264148712,0.213740766048431,-0.404917031526566\n             ,0.908465981483459,0.211989372968674,-0.360208302736282,0.904940068721771,0.195454493165016,-0.377996027469635\n             ,0.888135969638824,0.229056358337402,-0.3984315097332,0.848333179950714,-0.297908991575241,-0.43769970536232\n             ,0.927110075950623,-0.224742949008942,-0.299929141998291,0.898882806301117,0.175670132040977,-0.401434540748596\n             ,0.892053008079529,0.256361722946167,-0.372182875871658,0.839759349822998,0.221470341086388,-0.495736926794052\n             ,0.862718880176544,0.197039529681206,-0.465716183185577,0.889020264148712,0.213740766048431,-0.404917031526566\n             ,0.552965581417084,-0.801727950572968,0.226851031184196,0.0579886250197887,-0.947378635406494,0.314819037914276\n             ,0.569704055786133,-0.669814586639404,0.476220279932022,-0.00901283789426088,0.0965975746512413,0.995282709598541\n             ,0.0292022190988064,-0.160741657018662,0.98656439781189,-0.176305994391441,-0.141984179615974,0.974041402339935\n             ,-0.072829432785511,0.0172536037862301,0.99719512462616,0.742353081703186,0.249405577778816,0.621859073638916\n             ,0.562908291816711,0.161133006215096,0.810660421848297,0.810771644115448,0.203989744186401,0.54866886138916,-0.504790067672729\n             ,0.0473182201385498,0.861944317817688,-0.76946359872818,0.151790544390678,0.620391309261322,-0.623560965061188\n             ,0.103526078164577,0.774889707565308,-0.34188050031662,0.0427594222128391,0.938770115375519,-0.857216417789459\n             ,0.268806040287018,0.43923032283783,-0.791948556900024,0.189529091119766,0.580427587032318,-0.56521064043045\n             ,0.138002142310143,0.813321769237518,-0.46170049905777,0.186353012919426,0.867240011692047,0.830685615539551\n             ,0.156212329864502,-0.53437727689743,0.754355251789093,0.176875531673431,-0.632189214229584,0.808351874351501\n             ,-0.0360210724174976,-0.587596535682678,0.881142616271973,0.0315838828682899,-0.471794605255127,0.355752408504486\n             ,-0.498135715723038,-0.790759801864624,0.734110653400421,-0.4181247651577,-0.535026371479034,0.498120248317719\n             ,-0.335890352725983,-0.799408435821533,-0.122972406446934,-0.410810470581055,-0.903389453887939,0.355752408504486\n             ,-0.498135715723038,-0.790759801864624,-0.11159410327673,-0.287050694227219,-0.951393008232117,0.129383936524391\n             ,-0.521730244159698,-0.843242168426514,0.252460122108459,-0.750463306903839,-0.61079353094101,0.355752408504486\n             ,-0.498135715723038,-0.790759801864624,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.295105874538422\n             ,-0.732439458370209,-0.613551139831543,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,1.08000335785619e-007\n             ,-0.503708183765411,-0.863873839378357,0.71757835149765,0.116429716348648,-0.686677098274231,0.754355251789093\n             ,0.176875531673431,-0.632189214229584,0.737981557846069,0.239907741546631,-0.630735695362091,0.74054491519928\n             ,0.170902013778687,-0.649912059307098,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.605917453765869\n             ,-0.0272433757781982,-0.795060873031616,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.754355251789093\n             ,0.176875531673431,-0.632189214229584,0.71757835149765,0.116429716348648,-0.686677098274231,0.808351874351501\n             ,-0.0360210724174976,-0.587596535682678,0.656103849411011,-0.195678874850273,-0.728860437870026,0.66176563501358\n             ,-0.249233901500702,-0.707070529460907,0.888135969638824,0.229056358337402,-0.3984315097332,0.908465981483459\n             ,0.211989372968674,-0.360208302736282,0.875346660614014,0.271785736083984,-0.399875849485397,0.847342550754547\n             ,0.298378229141235,-0.439296066761017,0.904940068721771,0.195454493165016,-0.377996027469635,0.908465981483459\n             ,0.211989372968674,-0.360208302736282,0.888135969638824,0.229056358337402,-0.3984315097332,0.898882806301117\n             ,0.175670132040977,-0.401434540748596,-0.11159410327673,-0.287050694227219,-0.951393008232117,0.355752408504486\n             ,-0.498135715723038,-0.790759801864624,0.498120248317719,-0.335890352725983,-0.799408435821533,-0.0987945944070816\n             ,-0.283014118671417,-0.95401394367218,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.595030784606934\n             ,-0.0228520985692739,-0.80337792634964,-0.11159410327673,-0.287050694227219,-0.951393008232117,-0.0987945944070816\n             ,-0.283014118671417,-0.95401394367218,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.595030784606934\n             ,-0.0228520985692739,-0.80337792634964,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.715955674648285\n             ,0.135700687766075,-0.684830486774445,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.721792817115784\n             ,0.204645067453384,-0.661162257194519,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.747396409511566\n             ,0.179795786738396,-0.639587461948395,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.748518824577332\n             ,-0.407584488391876,-0.523062586784363,-0.481532573699951,-0.766164124011993,-0.425580739974976,-0.295105874538422\n             ,-0.732439458370209,-0.613551139831543,0.205762028694153,-0.343506038188934,-0.91633266210556,0.142389953136444\n             ,-0.3092340528965,-0.940265595912933,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.154773816466331\n             ,-0.473390430212021,-0.867148518562317,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.295105874538422\n             ,-0.732439458370209,-0.613551139831543,-0.154773816466331,-0.473390430212021,-0.867148518562317,0.605917453765869\n             ,-0.0272433757781982,-0.795060873031616,0.142389953136444,-0.3092340528965,-0.940265595912933,0.205762028694153\n             ,-0.343506038188934,-0.91633266210556,0.656103849411011,-0.195678874850273,-0.728860437870026,0.808351874351501\n             ,-0.0360210724174976,-0.587596535682678,0.605917453765869,-0.0272433757781982,-0.795060873031616,0.656103849411011\n             ,-0.195678874850273,-0.728860437870026,0.940263509750366,0.158270344138145,0.301421761512756,0.911828219890594\n             ,-0.323383867740631,0.252966731786728,0.924298286437988,-0.381513595581055,0.0109577048569918,0.97637003660202\n             ,0.214487105607986,0.0263973921537399,0.897881627082825,0.0853674784302711,0.4318807721138,0.86302787065506,-0.341093569993973\n             ,0.372609823942184,0.911828219890594,-0.323383867740631,0.252966731786728,0.940263509750366,0.158270344138145\n             ,0.301421761512756,0.824855744838715,-0.0143105983734131,0.565162122249603,0.804235875606537,-0.38592141866684\n             ,0.451961606740952,0.86302787065506,-0.341093569993973,0.372609823942184,0.897881627082825,0.0853674784302711\n             ,0.4318807721138,0.658608675003052,-0.082901194691658,0.747905075550079,0.63869446516037,-0.424023747444153,0.642085075378418\n             ,0.804235875606537,-0.38592141866684,0.451961606740952,0.824855744838715,-0.0143105983734131,0.565162122249603\n             ,0.403074562549591,-0.0995079353451729,0.909741222858429,0.477317273616791,-0.364241302013397,0.79968523979187\n             ,0.63869446516037,-0.424023747444153,0.642085075378418,0.658608675003052,-0.082901194691658,0.747905075550079\n             ,0.748501777648926,-0.0708362907171249,0.659338533878326,0.777780055999756,-0.164350166916847,0.606668949127197\n             ,0.477317273616791,-0.364241302013397,0.79968523979187,0.403074562549591,-0.0995079353451729,0.909741222858429\n             ,0.682068586349487,-0.309287667274475,0.662663996219635,0.777780055999756,-0.164350166916847,0.606668949127197\n             ,0.748501777648926,-0.0708362907171249,0.659338533878326,0.691345393657684,-0.0592475160956383,0.720091164112091\n             ,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.918076574802399,-0.319764405488968,0.234277844429016\n             ,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.871616542339325,-0.254917442798615,0.418690472841263\n             ,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.695749223232269,-0.452543646097183,0.557796776294708\n             ,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.871616542339325,-0.254917442798615,0.418690472841263\n             ,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.480668127536774,-0.309450268745422,0.820486843585968\n             ,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.695749223232269,-0.452543646097183,0.557796776294708\n             ,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.51021933555603,-0.415738612413406,0.752886176109314\n             ,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.526136100292206,-0.358043670654297,0.77135306596756\n             ,0.198349118232727,-0.359346985816956,-0.911881268024445,0.304857552051544,-0.136514157056808,-0.942563354969025\n             ,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.085550844669342,-0.179267361760139,-0.980073630809784\n             ,-0.183117777109146,0.0588014125823975,-0.981330871582031,0.304857552051544,-0.136514157056808,-0.942563354969025\n             ,0.220349878072739,-0.298315703868866,-0.928683817386627,-0.265993624925613,0.0903498530387878,-0.959731340408325\n             ,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.677114307880402,0.387711197137833,-0.625456809997559\n             ,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.872953355312347,0.427382349967957,-0.235152706503868\n             ,0.126519411802292,-0.418506681919098,-0.899358093738556,-0.349404841661453,-0.0127950254827738,-0.936884522438049\n             ,-0.265993624925613,0.0903498530387878,-0.959731340408325,0.220349878072739,-0.298315703868866,-0.928683817386627\n             ,0.5493523478508,-0.702752709388733,-0.452051609754562,0.318604946136475,-0.851775884628296,-0.415895074605942\n             ,-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.126519411802292,-0.418506681919098,-0.899358093738556\n             ,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.790130019187927,0.358856797218323,-0.496906787157059\n             ,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.0690199434757233,-0.290056854486465,-0.954517304897308\n             ,0.220349878072739,-0.298315703868866,-0.928683817386627,0.56249988079071,-0.630179584026337,-0.535226583480835\n             ,0.5493523478508,-0.702752709388733,-0.452051609754562,0.126519411802292,-0.418506681919098,-0.899358093738556\n             ,0.210187539458275,-0.419684708118439,-0.882998287677765,-0.633183777332306,0.444622397422791,-0.6335529088974\n             ,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.0690199434757233,-0.290056854486465,-0.954517304897308\n             ,0.676666736602783,-0.736289203166962,0.000588160357438028,0.321904927492142,-0.23541721701622,-0.917036533355713\n             ,0.210187539458275,-0.419684708118439,-0.882998287677765,0.220480233430862,-0.962971389293671,-0.155160069465637\n             ,0.210187539458275,-0.419684708118439,-0.882998287677765,0.321904927492142,-0.23541721701622,-0.917036533355713\n             ,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.633183777332306,0.444622397422791,-0.6335529088974\n             ,0.735884010791779,-0.676981329917908,0.0130754383280873,0.917286098003387,-0.397383034229279,0.0259414706379175\n             ,0.370425969362259,-0.053249154239893,-0.927334427833557,0.321904927492142,-0.23541721701622,-0.917036533355713\n             ,0.370425969362259,-0.053249154239893,-0.927334427833557,-0.684927523136139,0.406749725341797,-0.604507207870483\n             ,-0.6867835521698,0.410039186477661,-0.600163519382477,0.321904927492142,-0.23541721701622,-0.917036533355713\n             ,0.370425969362259,-0.053249154239893,-0.927334427833557,0.907455027103424,-0.419752985239029,-0.0182434022426605\n             ,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.0838128700852394,-0.573638498783112,-0.814809322357178\n             ,-0.698399066925049,0.385518401861191,-0.603004395961761,0.370425969362259,-0.053249154239893,-0.927334427833557\n             ,-0.0838128700852394,-0.573638498783112,-0.814809322357178,-0.852042078971863,-0.144021943211555,-0.503271222114563\n             ,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.237571656703949,-0.289404422044754,0.92725658416748\n             ,-0.182237774133682,-0.768710494041443,0.613085329532623,0.343388766050339,-0.92741858959198,-0.148252636194229\n             ,-0.802604734897614,0.216235384345055,0.55593866109848,-0.902596533298492,-0.221002161502838,0.369428634643555\n             ,-0.182237774133682,-0.768710494041443,0.613085329532623,0.237571656703949,-0.289404422044754,0.92725658416748\n             ,-0.748213112354279,0.285198539495468,0.599031686782837,-0.792753040790558,0.233859673142433,0.562896311283112\n             ,0.237571656703949,-0.289404422044754,0.92725658416748,0.209573119878769,-0.409179538488388,0.888060390949249\n             ,-0.183022558689117,-0.742925465106964,0.643866777420044,0.209573119878769,-0.409179538488388,0.888060390949249\n             ,0.676666736602783,-0.736289203166962,0.000588160357438028,0.220480233430862,-0.962971389293671,-0.155160069465637\n             ,-0.730839848518372,0.374586492776871,0.570576965808868,0.209573119878769,-0.409179538488388,0.888060390949249\n             ,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.818624794483185,-0.0173483304679394,0.574066698551178\n             ,-0.024921914562583,-0.994488954544067,-0.101836577057838,0.623242735862732,-0.753325045108795,-0.209928289055824\n             ,0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.141052380204201,-0.502090394496918,-0.853234708309174\n             ,-0.141052380204201,-0.502090394496918,-0.853234708309174,0.0652027949690819,-0.225424140691757,-0.972076416015625\n             ,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.814637243747711,0.194269418716431,-0.546466410160065\n             ,0.747061431407928,-0.62068235874176,-0.238018155097961,0.910755693912506,-0.337876051664352,-0.237410709261894\n             ,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.0652027949690819,-0.225424140691757,-0.972076416015625\n             ,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.810490429401398,0.401368230581284,-0.426624894142151\n             ,0.0652027949690819,-0.225424140691757,-0.972076416015625,0.1495750695467,-0.0865894258022308,-0.984951555728912\n             ,-0.262113600969315,-0.605265080928802,-0.751631915569305,0.1495750695467,-0.0865894258022308,-0.984951555728912\n             ,0.893890082836151,-0.378993809223175,-0.239424884319305,0.300238430500031,-0.930824100971222,-0.208382621407509\n             ,-0.262113600969315,-0.605265080928802,-0.751631915569305,-0.931690096855164,-0.183842733502388,-0.31329756975174\n             ,-0.821675598621368,0.388978660106659,-0.416587084531784,0.1495750695467,-0.0865894258022308,-0.984951555728912\n             ,0.893890082836151,-0.378993809223175,-0.239424884319305,0.534395098686218,-0.306080341339111,0.787868499755859\n             ,0.0157063417136669,-0.81893128156662,0.573676645755768,0.300238430500031,-0.930824100971222,-0.208382621407509\n             ,0.0157063417136669,-0.81893128156662,0.573676645755768,0.534395098686218,-0.306080341339111,0.787868499755859\n             ,-0.581417798995972,0.228432759642601,0.780878841876984,-0.781307756900787,-0.323809385299683,0.533578157424927\n             ,-0.567694067955017,0.240619167685509,0.787290215492249,0.534395098686218,-0.306080341339111,0.787868499755859\n             ,0.477158278226852,-0.397838234901428,0.783610045909882,-0.56154191493988,0.270268112421036,0.782065093517303\n             ,0.623242735862732,-0.753325045108795,-0.209928289055824,-0.024921914562583,-0.994488954544067,-0.101836577057838\n             ,-0.223028287291527,-0.612437725067139,0.758405148983002,0.477158278226852,-0.397838234901428,0.783610045909882\n             ,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.507044553756714,0.251941651105881,0.824276208877563\n             ,-0.559803783893585,0.448765695095062,0.696583867073059,0.477158278226852,-0.397838234901428,0.783610045909882\n             ,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.613874554634094,-0.719477951526642,-0.324822306632996\n             ,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.653539955615997,-0.718670427799225,-0.237483367323875\n             ,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.147622227668762,-0.275771498680115,-0.94981986284256\n             ,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.907855153083801,0.259428709745407,-0.329386949539185\n             ,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.147622227668762,-0.275771498680115,-0.94981986284256\n             ,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.878461718559265,0.420071333646774,-0.22769521176815\n             ,0.828972637653351,-0.365704894065857,-0.423159956932068,0.279529839754105,-0.929970979690552,-0.238782465457916\n             ,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.0946790054440498,-0.0982154458761215,-0.99065113067627\n             ,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.967258095741272,-0.228260591626167,-0.110945627093315\n             ,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.0946790054440498,-0.0982154458761215,-0.99065113067627\n             ,0.205829456448555,-0.762141346931458,0.613819897174835,0.279529839754105,-0.929970979690552,-0.238782465457916\n             ,0.828972637653351,-0.365704894065857,-0.423159956932068,0.674587190151215,-0.27459716796875,0.685221493244171\n             ,0.205829456448555,-0.762141346931458,0.613819897174835,0.674587190151215,-0.27459716796875,0.685221493244171\n             ,-0.394580245018005,0.233544617891312,0.888686299324036,-0.597855687141418,-0.328857451677322,0.731041252613068\n             ,0.678764045238495,-0.636029005050659,-0.367078334093094,0.631237089633942,-0.400684475898743,0.664072096347809\n             ,0.674587190151215,-0.27459716796875,0.685221493244171,0.833657681941986,-0.354278296232224,-0.423676431179047\n             ,-0.343200415372849,0.296563923358917,0.891214549541473,-0.350194752216339,0.292267352342606,0.889912009239197\n             ,0.674587190151215,-0.27459716796875,0.685221493244171,0.631237089633942,-0.400684475898743,0.664072096347809\n             ,-0.326038300991058,0.243334606289864,0.913502752780914,-0.36957174539566,0.387512475252151,0.844541788101196\n             ,0.631237089633942,-0.400684475898743,0.664072096347809,0.113647989928722,-0.758261322975159,0.641968786716461\n             ,0.113647989928722,-0.758261322975159,0.641968786716461,-0.462510108947754,-0.809054553508759,0.362650156021118\n             ,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.326038300991058,0.243334606289864,0.913502752780914\n             ,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.462510108947754,-0.809054553508759,0.362650156021118\n             ,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.980141282081604,0.198108091950417,0.00872699916362762\n             ,0.297526687383652,-0.947863459587097,-0.114161059260368,0.568342566490173,-0.692033231258392,-0.445058077573776\n             ,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.534125924110413,-0.786291003227234,-0.310573488473892\n             ,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.400393456220627,-0.282469868659973,-0.8717200756073\n             ,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.980141282081604,0.198108091950417,0.00872699916362762\n             ,0.586962282657623,-0.660651743412018,-0.467989921569824,0.671555638313293,-0.521569073200226,-0.526287734508514\n             ,-0.394356489181519,-0.149896875023842,-0.906649768352509,-0.400393456220627,-0.282469868659973,-0.8717200756073\n             ,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.394356489181519,-0.149896875023842,-0.906649768352509\n             ,0.672275424003601,-0.513835847377777,-0.532933831214905,0.192592486739159,-0.95661062002182,-0.21864178776741\n             ,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.970863342285156,-0.156214520335197,0.181717962026596\n             ,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.394356489181519,-0.149896875023842,-0.906649768352509\n             ,0.295449286699295,-0.702050924301147,0.647946059703827,0.192592486739159,-0.95661062002182,-0.21864178776741\n             ,0.672275424003601,-0.513835847377777,-0.532933831214905,0.78001469373703,-0.23672841489315,0.579255342483521\n             ,-0.142891898751259,0.310856729745865,0.939654171466827,-0.427836775779724,-0.217984616756439,0.877176403999329\n             ,0.295449286699295,-0.702050924301147,0.647946059703827,0.78001469373703,-0.23672841489315,0.579255342483521\n             ,0.568342566490173,-0.692033231258392,-0.445058077573776,0.297526687383652,-0.947863459587097,-0.114161059260368\n             ,0.702709794044495,-0.35005995631218,0.619400501251221,0.776305437088013,-0.254482686519623,0.576704740524292\n             ,0.702709794044495,-0.35005995631218,0.619400501251221,0.0647351443767548,0.381562024354935,0.922073602676392\n             ,-0.162613198161125,0.452644348144531,0.876738309860229,0.776305437088013,-0.254482686519623,0.576704740524292\n             ,0.0647351443767548,0.381562024354935,0.922073602676392,0.702709794044495,-0.35005995631218,0.619400501251221\n             ,0.679429173469543,-0.206046029925346,0.704216599464417,-0.0423084795475006,0.388709634542465,0.920388400554657\n             ,0.679429173469543,-0.206046029925346,0.704216599464417,0.692436456680298,-0.693914532661438,0.197520568966866\n             ,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.759757459163666,-0.495759963989258,0.42070260643959\n             ,-0.455443143844604,-0.0435190759599209,0.889200568199158,-0.181978538632393,0.229496166110039,0.956146061420441\n             ,0.10479624569416,-0.144131794571877,0.983993768692017,0.228076592087746,-0.722928047180176,0.652193248271942\n             ,0.228076592087746,-0.722928047180176,0.652193248271942,0.10479624569416,-0.144131794571877,0.983993768692017\n             ,0.499378323554993,-0.200641006231308,0.842831194400787,0.759757459163666,-0.495759963989258,0.42070260643959\n             ,0.119333148002625,-0.907433569431305,-0.402894467115402,0.139615654945374,-0.644082069396973,-0.752107560634613\n             ,-0.823581099510193,-0.405602097511292,-0.396485984325409,-0.610331058502197,-0.781622171401978,0.128696575760841\n             ,-0.90501195192337,0.21977810561657,0.364212721586227,-0.455443143844604,-0.0435190759599209,0.889200568199158\n             ,-0.610331058502197,-0.781622171401978,0.128696575760841,-0.823581099510193,-0.405602097511292,-0.396485984325409\n             ,0.210858762264252,-0.745639085769653,-0.632108330726624,-0.783048808574677,-0.561382532119751,-0.267739146947861\n             ,-0.791083514690399,-0.304101139307022,-0.53076297044754,0.139615654945374,-0.644082069396973,-0.752107560634613\n             ,-0.791083514690399,-0.304101139307022,-0.53076297044754,-0.783048808574677,-0.561382532119751,-0.267739146947861\n             ,-0.883537590503693,0.207842156291008,0.419717639684677,-0.90501195192337,0.21977810561657,0.364212721586227\n             ,-0.531814455986023,-0.819929480552673,0.211870223283768,-0.783048808574677,-0.561382532119751,-0.267739146947861\n             ,0.210858762264252,-0.745639085769653,-0.632108330726624,0.144954472780228,-0.95414674282074,-0.261901140213013\n             ,-0.783048808574677,-0.561382532119751,-0.267739146947861,-0.531814455986023,-0.819929480552673,0.211870223283768\n             ,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.883537590503693,0.207842156291008,0.419717639684677\n             ,-0.00195049878675491,-0.724513411521912,0.689257919788361,-0.531814455986023,-0.819929480552673,0.211870223283768\n             ,0.144954472780228,-0.95414674282074,-0.261901140213013,0.755722880363464,-0.635050356388092,0.159981176257133\n             ,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.531814455986023,-0.819929480552673,0.211870223283768\n             ,-0.00195049878675491,-0.724513411521912,0.689257919788361,-0.10662803798914,0.114874452352524,0.987640738487244\n             ,0.779160380363464,0.504416584968567,0.372119605541229,0.677094995975494,0.017529908567667,0.735686838626862\n             ,0.755722880363464,-0.635050356388092,0.159981176257133,0.980175495147705,-0.0617897920310497,-0.188249826431274\n             ,0.779160380363464,0.504416584968567,0.372119605541229,0.0438288599252701,0.716634690761566,0.696070194244385\n             ,-0.10662803798914,0.114874452352524,0.987640738487244,0.677094995975494,0.017529908567667,0.735686838626862\n             ,0.775657951831818,0.494642019271851,0.39202556014061,0.779160380363464,0.504416584968567,0.372119605541229,0.980175495147705\n             ,-0.0617897920310497,-0.188249826431274,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.779160380363464\n             ,0.504416584968567,0.372119605541229,0.775657951831818,0.494642019271851,0.39202556014061,-0.0499426536262035\n             ,0.692004799842834,0.720163226127625,0.0438288599252701,0.716634690761566,0.696070194244385,0.775603353977203\n             ,0.536381304264069,0.332768052816391,0.775657951831818,0.494642019271851,0.39202556014061,0.966551244258881,-0.0919508412480354\n             ,-0.239423617720604,0.944929540157318,-0.11514762789011,-0.306348145008087,0.775603353977203,0.536381304264069\n             ,0.332768052816391,-0.057441920042038,0.650170862674713,0.75761353969574,-0.0499426536262035,0.692004799842834\n             ,0.720163226127625,0.775657951831818,0.494642019271851,0.39202556014061,0.789509534835815,0.501795709133148,0.353377729654312\n             ,0.775603353977203,0.536381304264069,0.332768052816391,0.944929540157318,-0.11514762789011,-0.306348145008087\n             ,0.986938416957855,-0.10414332151413,-0.122909314930439,-0.057441920042038,0.650170862674713,0.75761353969574\n             ,0.775603353977203,0.536381304264069,0.332768052816391,0.789509534835815,0.501795709133148,0.353377729654312\n             ,0.0780415087938309,0.603700041770935,0.793382465839386,0.843434154987335,0.424213349819183,0.329638987779617\n             ,0.704449236392975,0.57451719045639,0.416750878095627,0.789509534835815,0.501795709133148,0.353377729654312,0.986938416957855\n             ,-0.10414332151413,-0.122909314930439,0.0780415087938309,0.603700041770935,0.793382465839386,0.789509534835815\n             ,0.501795709133148,0.353377729654312,0.704449236392975,0.57451719045639,0.416750878095627,0.075324609875679,0.630104899406433\n             ,0.772848010063171,0.950212061405182,0.303586721420288,0.0702292993664742,0.977863430976868,-0.0681029558181763\n             ,0.197851315140724,0.741024434566498,0.216318398714066,0.635680079460144,0.619699597358704,0.579480230808258\n             ,0.529315650463104,0.396490722894669,0.381844133138657,0.834859371185303,0.516311764717102,0.647967755794525\n             ,0.559964299201965,0.631212413311005,0.590215682983398,0.503206074237823,0.634808242321014,0.281936556100845\n             ,0.719395816326141,0.396490722894669,0.381844133138657,0.834859371185303,0.634808242321014,0.281936556100845\n             ,0.719395816326141,0.540099084377289,-0.0461409948766232,0.840335667133331,0.280613332986832,0.159042209386826\n             ,0.946552574634552,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.210858762264252,-0.745639085769653\n             ,-0.632108330726624,0.139615654945374,-0.644082069396973,-0.752107560634613,0.966551244258881,-0.0919508412480354\n             ,-0.239423617720604,0.210858762264252,-0.745639085769653,-0.632108330726624,0.980175495147705,-0.0617897920310497\n             ,-0.188249826431274,0.755722880363464,-0.635050356388092,0.159981176257133,0.144954472780228,-0.95414674282074\n             ,-0.261901140213013,0.944929540157318,-0.11514762789011,-0.306348145008087,0.139615654945374,-0.644082069396973\n             ,-0.752107560634613,0.119333148002625,-0.907433569431305,-0.402894467115402,0.986938416957855,-0.10414332151413\n             ,-0.122909314930439,0.648194909095764,-0.336823225021362,-0.682930052280426,0.56249988079071,-0.630179584026337\n             ,-0.535226583480835,0.220349878072739,-0.298315703868866,-0.928683817386627,0.304857552051544,-0.136514157056808\n             ,-0.942563354969025,0.318604946136475,-0.851775884628296,-0.415895074605942,0.5493523478508,-0.702752709388733\n             ,-0.452051609754562,0.643197417259216,-0.725296139717102,-0.245443657040596,0.166518494486809,-0.975531220436096\n             ,-0.14356318116188,-0.883537590503693,0.207842156291008,0.419717639684677,0.0438288599252701,0.716634690761566\n             ,0.696070194244385,-0.0499426536262035,0.692004799842834,0.720163226127625,-0.90501195192337,0.21977810561657\n             ,0.364212721586227,0.0438288599252701,0.716634690761566,0.696070194244385,-0.883537590503693,0.207842156291008\n             ,0.419717639684677,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.10662803798914,0.114874452352524\n             ,0.987640738487244,-0.90501195192337,0.21977810561657,0.364212721586227,-0.057441920042038,0.650170862674713\n             ,0.75761353969574,0.0780415087938309,0.603700041770935,0.793382465839386,-0.455443143844604,-0.0435190759599209\n             ,0.889200568199158,0.075324609875679,0.630104899406433,0.772848010063171,-0.181978538632393,0.229496166110039\n             ,0.956146061420441,-0.455443143844604,-0.0435190759599209,0.889200568199158,0.0780415087938309,0.603700041770935\n             ,0.793382465839386,-0.000278991181403399,0.484035164117813,0.875048518180847,0.0509466230869293,0.674606919288635\n             ,0.73641699552536,0.516311764717102,0.647967755794525,0.559964299201965,0.396490722894669,0.381844133138657,0.834859371185303\n             ,0.396490722894669,0.381844133138657,0.834859371185303,0.280613332986832,0.159042209386826,0.946552574634552\n             ,-0.0354647859930992,0.343396455049515,0.938520729541779,-0.000278991181403399,0.484035164117813,0.875048518180847\n             ,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.891970098018646,0.451832711696625,-0.0153782712295651\n             ,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.899121463298798,0.345348745584488,-0.268914222717285\n             ,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.836941063404083,0.479608535766602,-0.263638645410538\n             ,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.891970098018646,0.451832711696625,-0.0153782712295651\n             ,-0.850029647350311,0.48296907544136,0.210215270519257,-0.891911506652832,0.441495150327683,0.0978566035628319\n             ,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.869016945362091,0.468115001916885,0.160243302583694\n             ,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.872280597686768,0.488854855298996,0.0121469330042601\n             ,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.911366164684296,0.266076982021332,0.31402975320816\n             ,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.836970150470734,0.473509907722473,-0.274352669715881\n             ,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.872280597686768,0.488854855298996,0.0121469330042601\n             ,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.256222367286682,0.552950799465179,0.792840123176575\n             ,-0.6693514585495,0.480027586221695,0.567046880722046,-0.585053384304047,0.545464694499969,0.600150644779205\n             ,-0.162613198161125,0.452644348144531,0.876738309860229,-0.896232187747955,0.443575948476791,0.00286618177779019\n             ,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.126598969101906,0.370326429605484,0.920234203338623\n             ,-0.104846432805061,0.370796233415604,0.922776997089386,-0.906125068664551,0.423002034425735,-0.00257390737533569\n             ,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.142891898751259,0.310856729745865,0.939654171466827\n             ,-0.142891898751259,0.310856729745865,0.939654171466827,-0.925728321075439,0.377710282802582,0.0190277993679047\n             ,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.427836775779724,-0.217984616756439,0.877176403999329\n             ,-0.525893211364746,0.411127626895905,0.744587421417236,-0.79394793510437,0.450177043676376,0.408640831708908\n             ,-0.739033222198486,0.522002279758453,0.425844460725784,-0.326038300991058,0.243334606289864,0.913502752780914\n             ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.826775729656219,0.455823004245758,0.329647213220596\n             ,-0.850029647350311,0.48296907544136,0.210215270519257,-0.869016945362091,0.468115001916885,0.160243302583694\n             ,-0.36957174539566,0.387512475252151,0.844541788101196,-0.871611714363098,0.473160296678543,-0.128110930323601\n             ,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.343200415372849,0.296563923358917,0.891214549541473\n             ,-0.350194752216339,0.292267352342606,0.889912009239197,-0.343200415372849,0.296563923358917,0.891214549541473\n             ,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.878461718559265,0.420071333646774,-0.22769521176815\n             ,-0.350194752216339,0.292267352342606,0.889912009239197,-0.878461718559265,0.420071333646774,-0.22769521176815\n             ,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.394580245018005,0.233544617891312,0.888686299324036\n             ,-0.394580245018005,0.233544617891312,0.888686299324036,-0.904796302318573,0.359979897737503,-0.227504059672356\n             ,-0.967258095741272,-0.228260591626167,-0.110945627093315,-0.597855687141418,-0.328857451677322,0.731041252613068\n             ,-0.806818068027496,0.571618735790253,0.149320676922798,-0.869016945362091,0.468115001916885,0.160243302583694\n             ,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.814637243747711,0.194269418716431,-0.546466410160065\n             ,-0.806818068027496,0.571618735790253,0.149320676922798,-0.507044553756714,0.251941651105881,0.824276208877563\n             ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.869016945362091,0.468115001916885,0.160243302583694\n             ,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.56154191493988,0.270268112421036,0.782065093517303\n             ,-0.559803783893585,0.448765695095062,0.696583867073059,-0.757650375366211,0.518597006797791,-0.39626133441925\n             ,-0.581417798995972,0.228432759642601,0.780878841876984,-0.567694067955017,0.240619167685509,0.787290215492249\n             ,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.821675598621368,0.388978660106659,-0.416587084531784\n             ,-0.931690096855164,-0.183842733502388,-0.31329756975174,-0.781307756900787,-0.323809385299683,0.533578157424927\n             ,-0.581417798995972,0.228432759642601,0.780878841876984,-0.821675598621368,0.388978660106659,-0.416587084531784\n             ,-0.748213112354279,0.285198539495468,0.599031686782837,-0.730839848518372,0.374586492776871,0.570576965808868\n             ,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.6867835521698,0.410039186477661,-0.600163519382477\n             ,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.792753040790558,0.233859673142433,0.562896311283112\n             ,-0.748213112354279,0.285198539495468,0.599031686782837,-0.6867835521698,0.410039186477661,-0.600163519382477\n             ,-0.802604734897614,0.216235384345055,0.55593866109848,-0.792753040790558,0.233859673142433,0.562896311283112\n             ,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.698399066925049,0.385518401861191,-0.603004395961761\n             ,-0.6693514585495,0.480027586221695,0.567046880722046,-0.878819167613983,0.322898685932159,0.351302325725555\n             ,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.585053384304047,0.545464694499969,0.600150644779205\n             ,-0.677114307880402,0.387711197137833,-0.625456809997559,-0.735660195350647,0.260931700468063,-0.625074982643127\n             ,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.265993624925613,0.0903498530387878,-0.959731340408325\n             ,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.790130019187927,0.358856797218323,-0.496906787157059\n             ,-0.677114307880402,0.387711197137833,-0.625456809997559,-0.265993624925613,0.0903498530387878,-0.959731340408325\n             ,-0.225308075547218,0.514127254486084,0.827592551708221,-0.308326691389084,0.577942073345184,0.755590915679932\n             ,-0.25537496805191,0.596560716629028,0.760854065418243,-0.200460329651833,0.603900372982025,0.771440207958221\n             ,-0.308326691389084,0.577942073345184,0.755590915679932,-0.225308075547218,0.514127254486084,0.827592551708221\n             ,-0.313503563404083,0.434664905071259,0.844264149665833,-0.506461322307587,0.506999313831329,0.697458744049072\n             ,-0.693721890449524,0.488555252552032,0.529210448265076,-0.878819167613983,0.322898685932159,0.351302325725555\n             ,-0.6693514585495,0.480027586221695,0.567046880722046,-0.6203373670578,0.548794507980347,0.560362577438354,-0.566602885723114\n             ,0.588818848133087,0.576414406299591,-0.308326691389084,0.577942073345184,0.755590915679932,-0.506461322307587\n             ,0.506999313831329,0.697458744049072,-0.601623058319092,0.623578310012817,0.499199062585831,-0.308326691389084\n             ,0.577942073345184,0.755590915679932,-0.566602885723114,0.588818848133087,0.576414406299591,-0.6203373670578\n             ,0.548794507980347,0.560362577438354,-0.25537496805191,0.596560716629028,0.760854065418243,-0.6203373670578,0.548794507980347\n             ,0.560362577438354,-0.6693514585495,0.480027586221695,0.567046880722046,-0.256222367286682,0.552950799465179\n             ,0.792840123176575,-0.25537496805191,0.596560716629028,0.760854065418243,-0.737847745418549,0.550981104373932\n             ,0.389872461557388,-0.566602885723114,0.588818848133087,0.576414406299591,-0.601623058319092,0.623578310012817\n             ,0.499199062585831,-0.73642486333847,0.608879089355469,0.294863820075989,-0.566602885723114,0.588818848133087\n             ,0.576414406299591,-0.737847745418549,0.550981104373932,0.389872461557388,-0.693721890449524,0.488555252552032\n             ,0.529210448265076,-0.6203373670578,0.548794507980347,0.560362577438354,-0.737847745418549,0.550981104373932\n             ,0.389872461557388,-0.802789449691772,0.535418033599854,0.26240548491478,-0.826775729656219,0.455823004245758\n             ,0.329647213220596,-0.724430322647095,0.542059719562531,0.425877869129181,-0.724430322647095,0.542059719562531\n             ,0.425877869129181,-0.79394793510437,0.450177043676376,0.408640831708908,-0.525893211364746,0.411127626895905\n             ,0.744587421417236,-0.693721890449524,0.488555252552032,0.529210448265076,-0.802789449691772,0.535418033599854\n             ,0.26240548491478,-0.846407413482666,0.503773093223572,0.17264749109745,-0.891911506652832,0.441495150327683\n             ,0.0978566035628319,-0.850029647350311,0.48296907544136,0.210215270519257,-0.887826502323151,0.459839731454849\n             ,0.0176490340381861,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.911366164684296,0.266076982021332\n             ,0.31402975320816,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.891970098018646,0.451832711696625\n             ,-0.0153782712295651,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.891911506652832,0.441495150327683\n             ,0.0978566035628319,-0.846407413482666,0.503773093223572,0.17264749109745,-0.846407413482666,0.503773093223572\n             ,0.17264749109745,-0.73642486333847,0.608879089355469,0.294863820075989,-0.860682129859924,0.507934510707855\n             ,-0.0350551940500736,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.908803284168243,0.416819602251053\n             ,-0.018383901566267,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.836941063404083,0.479608535766602\n             ,-0.263638645410538,-0.836970150470734,0.473509907722473,-0.274352669715881,-0.724430322647095,0.542059719562531\n             ,0.425877869129181,-0.826775729656219,0.455823004245758,0.329647213220596,-0.948099076747894,0.317963510751724\n             ,0.00271255942061543,-0.79394793510437,0.450177043676376,0.408640831708908,-0.739033222198486,0.522002279758453\n             ,0.425844460725784,-0.79394793510437,0.450177043676376,0.408640831708908,-0.948099076747894,0.317963510751724\n             ,0.00271255942061543,-0.907855153083801,0.259428709745407,-0.329386949539185,0.643197417259216,-0.725296139717102\n             ,-0.245443657040596,0.5493523478508,-0.702752709388733,-0.452051609754562,0.56249988079071,-0.630179584026337\n             ,-0.535226583480835,0.414326965808868,-0.847513318061829,-0.331744402647018,0.65491396188736,-0.503674864768982\n             ,-0.563382029533386,0.414326965808868,-0.847513318061829,-0.331744402647018,0.56249988079071,-0.630179584026337\n             ,-0.535226583480835,0.648194909095764,-0.336823225021362,-0.682930052280426,0.515248417854309,-0.441880226135254\n             ,-0.734343886375427,0.648194909095764,-0.336823225021362,-0.682930052280426,0.304857552051544,-0.136514157056808\n             ,-0.942563354969025,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.0423084795475006,0.388709634542465\n             ,0.920388400554657,0.679429173469543,-0.206046029925346,0.704216599464417,0.499378323554993,-0.200641006231308\n             ,0.842831194400787,-0.155946508049965,0.418714195489883,0.894627928733826,0.10479624569416,-0.144131794571877\n             ,0.983993768692017,-0.213889330625534,0.483835697174072,0.848619103431702,-0.155946508049965,0.418714195489883\n             ,0.894627928733826,0.499378323554993,-0.200641006231308,0.842831194400787,0.516311764717102,0.647967755794525\n             ,0.559964299201965,0.0509466230869293,0.674606919288635,0.73641699552536,0.075324609875679,0.630104899406433\n             ,0.772848010063171,0.704449236392975,0.57451719045639,0.416750878095627,-0.735660195350647,0.260931700468063\n             ,-0.625074982643127,-0.872953355312347,0.427382349967957,-0.235152706503868,-0.931574642658234,0.319444477558136\n             ,-0.173562213778496,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.872953355312347,0.427382349967957\n             ,-0.235152706503868,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.899121463298798,0.345348745584488\n             ,-0.268914222717285,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.872953355312347,0.427382349967957\n             ,-0.235152706503868,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.836941063404083,0.479608535766602\n             ,-0.263638645410538,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.836941063404083,0.479608535766602\n             ,-0.263638645410538,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.790130019187927,0.358856797218323\n             ,-0.496906787157059,-0.836970150470734,0.473509907722473,-0.274352669715881,0.745758533477783,-0.330089628696442\n             ,-0.578692495822906,0.810982346534729,-0.364237248897552,-0.457863301038742,0.919881999492645,-0.0601645521819592\n             ,-0.387552946805954,0.237571656703949,-0.289404422044754,0.92725658416748,0.917286098003387,-0.397383034229279\n             ,0.0259414706379175,0.735884010791779,-0.676981329917908,0.0130754383280873,0.209573119878769,-0.409179538488388\n             ,0.888060390949249,0.747061431407928,-0.62068235874176,-0.238018155097961,0.477158278226852,-0.397838234901428\n             ,0.783610045909882,0.534395098686218,-0.306080341339111,0.787868499755859,0.910755693912506,-0.337876051664352\n             ,-0.237410709261894,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.147622227668762,-0.275771498680115\n             ,-0.94981986284256,0.678764045238495,-0.636029005050659,-0.367078334093094,0.833657681941986,-0.354278296232224\n             ,-0.423676431179047,0.631237089633942,-0.400684475898743,0.664072096347809,0.613874554634094,-0.719477951526642\n             ,-0.324822306632996,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.113647989928722,-0.758261322975159\n             ,0.641968786716461,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.916209638118744,0.399763643741608\n             ,-0.0273665990680456,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.394356489181519,-0.149896875023842\n             ,-0.906649768352509,0.586962282657623,-0.660651743412018,-0.467989921569824,0.776305437088013,-0.254482686519623\n             ,0.576704740524292,0.78001469373703,-0.23672841489315,0.579255342483521,0.671555638313293,-0.521569073200226\n             ,-0.526287734508514,0.78001469373703,-0.23672841489315,0.579255342483521,0.776305437088013,-0.254482686519623\n             ,0.576704740524292,-0.126598969101906,0.370326429605484,0.920234203338623,-0.104846432805061,0.370796233415604\n             ,0.922776997089386,-0.126598969101906,0.370326429605484,0.920234203338623,-0.916209638118744,0.399763643741608\n             ,-0.0273665990680456,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.104846432805061,0.370796233415604\n             ,0.922776997089386,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.820966601371765,0.385130524635315\n             ,-0.421530872583389,-0.567694067955017,0.240619167685509,0.787290215492249,-0.56154191493988,0.270268112421036\n             ,0.782065093517303,-0.698399066925049,0.385518401861191,-0.603004395961761,-0.852042078971863,-0.144021943211555\n             ,-0.503271222114563,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.802604734897614,0.216235384345055\n             ,0.55593866109848,0.704449236392975,0.57451719045639,0.416750878095627,0.843434154987335,0.424213349819183,0.329638987779617\n             ,0.631212413311005,0.590215682983398,0.503206074237823,0.516311764717102,0.647967755794525,0.559964299201965\n             ,0.741024434566498,0.216318398714066,0.635680079460144,0.716558694839478,-0.309423923492432,0.625140368938446\n             ,0.540099084377289,-0.0461409948766232,0.840335667133331,0.634808242321014,0.281936556100845,0.719395816326141\n             ,0.631212413311005,0.590215682983398,0.503206074237823,0.619699597358704,0.579480230808258,0.529315650463104\n             ,0.741024434566498,0.216318398714066,0.635680079460144,0.634808242321014,0.281936556100845,0.719395816326141\n             ,0.843434154987335,0.424213349819183,0.329638987779617,0.906101286411285,-0.389416426420212,-0.165334045886993\n             ,0.950212061405182,0.303586721420288,0.0702292993664742,0.619699597358704,0.579480230808258,0.529315650463104\n             ,-0.213889330625534,0.483835697174072,0.848619103431702,0.075324609875679,0.630104899406433,0.772848010063171\n             ,0.0509466230869293,0.674606919288635,0.73641699552536,-0.200460329651833,0.603900372982025,0.771440207958221\n             ,-0.225308075547218,0.514127254486084,0.827592551708221,-0.000278991181403399,0.484035164117813,0.875048518180847\n             ,-0.0354647859930992,0.343396455049515,0.938520729541779,-0.313503563404083,0.434664905071259,0.844264149665833\n             ,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.893975257873535,0.250766932964325,-0.371381372213364\n             ,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.0690199434757233,-0.290056854486465,-0.954517304897308\n             ,-0.349404841661453,-0.0127950254827738,-0.936884522438049,0.126519411802292,-0.418506681919098,-0.899358093738556\n             ,0.210187539458275,-0.419684708118439,-0.882998287677765,0.318604946136475,-0.851775884628296,-0.415895074605942\n             ,0.220480233430862,-0.962971389293671,-0.155160069465637,0.318604946136475,-0.851775884628296,-0.415895074605942\n             ,0.210187539458275,-0.419684708118439,-0.882998287677765,-0.0690199434757233,-0.290056854486465,-0.954517304897308\n             ,0.735884010791779,-0.676981329917908,0.0130754383280873,0.321904927492142,-0.23541721701622,-0.917036533355713\n             ,0.676666736602783,-0.736289203166962,0.000588160357438028,0.321904927492142,-0.23541721701622,-0.917036533355713\n             ,-0.6867835521698,0.410039186477661,-0.600163519382477,-0.713936686515808,0.496329486370087,-0.493914365768433\n             ,-0.684927523136139,0.406749725341797,-0.604507207870483,0.370425969362259,-0.053249154239893,-0.927334427833557\n             ,-0.698399066925049,0.385518401861191,-0.603004395961761,-0.0838128700852394,-0.573638498783112,-0.814809322357178\n             ,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.541915059089661,-0.82688319683075,-0.150307148694992\n             ,-0.852042078971863,-0.144021943211555,-0.503271222114563,-0.0838128700852394,-0.573638498783112,-0.814809322357178\n             ,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.541915059089661,-0.82688319683075,-0.150307148694992\n             ,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.182237774133682,-0.768710494041443,0.613085329532623\n             ,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.541915059089661,-0.82688319683075,-0.150307148694992\n             ,-0.182237774133682,-0.768710494041443,0.613085329532623,-0.852042078971863,-0.144021943211555,-0.503271222114563\n             ,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.902596533298492,-0.221002161502838,0.369428634643555\n             ,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.917286098003387,-0.397383034229279,0.0259414706379175\n             ,0.237571656703949,-0.289404422044754,0.92725658416748,0.237571656703949,-0.289404422044754,0.92725658416748\n             ,-0.792753040790558,0.233859673142433,0.562896311283112,-0.802604734897614,0.216235384345055,0.55593866109848\n             ,0.209573119878769,-0.409179538488388,0.888060390949249,0.735884010791779,-0.676981329917908,0.0130754383280873\n             ,0.676666736602783,-0.736289203166962,0.000588160357438028,-0.748213112354279,0.285198539495468,0.599031686782837\n             ,0.209573119878769,-0.409179538488388,0.888060390949249,-0.730839848518372,0.374586492776871,0.570576965808868\n             ,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.183022558689117,-0.742925465106964,0.643866777420044\n             ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.024921914562583,-0.994488954544067,-0.101836577057838\n             ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.0995585918426514,-0.971274793148041,-0.216132834553719\n             ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.024921914562583,-0.994488954544067,-0.101836577057838\n             ,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.994495153427124,-0.0799508094787598,0.0677299797534943\n             ,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.910764098167419,0.385902374982834,-0.146928876638412\n             ,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.541550755500793,-0.826843023300171,-0.151833668351173\n             ,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.0995585918426514,-0.971274793148041,-0.216132834553719\n             ,0.220480233430862,-0.962971389293671,-0.155160069465637,0.318604946136475,-0.851775884628296,-0.415895074605942\n             ,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.541550755500793,-0.826843023300171,-0.151833668351173\n             ,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.994495153427124,-0.0799508094787598,0.0677299797534943\n             ,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.911366164684296,0.266076982021332,0.31402975320816\n             ,0.747061431407928,-0.62068235874176,-0.238018155097961,0.0652027949690819,-0.225424140691757,-0.972076416015625\n             ,0.623242735862732,-0.753325045108795,-0.209928289055824,0.0652027949690819,-0.225424140691757,-0.972076416015625\n             ,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.757650375366211,0.518597006797791,-0.39626133441925\n             ,0.1495750695467,-0.0865894258022308,-0.984951555728912,-0.821675598621368,0.388978660106659,-0.416587084531784\n             ,-0.820966601371765,0.385130524635315,-0.421530872583389,0.893890082836151,-0.378993809223175,-0.239424884319305\n             ,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.910755693912506,-0.337876051664352,-0.237410709261894\n             ,-0.262113600969315,-0.605265080928802,-0.751631915569305,0.300238430500031,-0.930824100971222,-0.208382621407509\n             ,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.931690096855164,-0.183842733502388,-0.31329756975174\n             ,-0.262113600969315,-0.605265080928802,-0.751631915569305,-0.536295533180237,-0.842644929885864,-0.0483388155698776\n             ,-0.536295533180237,-0.842644929885864,-0.0483388155698776,0.300238430500031,-0.930824100971222,-0.208382621407509\n             ,0.0157063417136669,-0.81893128156662,0.573676645755768,-0.781307756900787,-0.323809385299683,0.533578157424927\n             ,-0.536295533180237,-0.842644929885864,-0.0483388155698776,0.0157063417136669,-0.81893128156662,0.573676645755768\n             ,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.781307756900787,-0.323809385299683,0.533578157424927\n             ,-0.931690096855164,-0.183842733502388,-0.31329756975174,0.534395098686218,-0.306080341339111,0.787868499755859\n             ,0.893890082836151,-0.378993809223175,-0.239424884319305,0.910755693912506,-0.337876051664352,-0.237410709261894\n             ,-0.581417798995972,0.228432759642601,0.780878841876984,0.534395098686218,-0.306080341339111,0.787868499755859\n             ,-0.567694067955017,0.240619167685509,0.787290215492249,0.623242735862732,-0.753325045108795,-0.209928289055824\n             ,0.477158278226852,-0.397838234901428,0.783610045909882,0.747061431407928,-0.62068235874176,-0.238018155097961\n             ,-0.56154191493988,0.270268112421036,0.782065093517303,0.477158278226852,-0.397838234901428,0.783610045909882\n             ,-0.559803783893585,0.448765695095062,0.696583867073059,0.00529748247936368,-0.99651163816452,0.0832859799265862\n             ,0.166518494486809,-0.975531220436096,-0.14356318116188,0.210238441824913,-0.975585281848907,0.0635072365403175\n             ,0.166518494486809,-0.975531220436096,-0.14356318116188,0.00529748247936368,-0.99651163816452,0.0832859799265862\n             ,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.929436683654785,-0.0642196834087372,0.36335015296936\n             ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.507044553756714,0.251941651105881,0.824276208877563\n             ,-0.507044553756714,0.251941651105881,0.824276208877563,-0.223028287291527,-0.612437725067139,0.758405148983002\n             ,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.653539955615997,-0.718670427799225,-0.237483367323875\n             ,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.223028287291527,-0.612437725067139,0.758405148983002\n             ,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.929436683654785,-0.0642196834087372,0.36335015296936\n             ,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.948099076747894,0.317963510751724,0.00271255942061543\n             ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.929436683654785,-0.0642196834087372,0.36335015296936\n             ,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.653539955615997,-0.718670427799225,-0.237483367323875\n             ,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.653539955615997,-0.718670427799225,-0.237483367323875\n             ,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.024921914562583,-0.994488954544067,-0.101836577057838\n             ,0.678764045238495,-0.636029005050659,-0.367078334093094,-0.147622227668762,-0.275771498680115,-0.94981986284256\n             ,0.613874554634094,-0.719477951526642,-0.324822306632996,-0.147622227668762,-0.275771498680115,-0.94981986284256\n             ,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.871611714363098,0.473160296678543,-0.128110930323601\n             ,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.904796302318573,0.359979897737503,-0.227504059672356\n             ,-0.878461718559265,0.420071333646774,-0.22769521176815,0.828972637653351,-0.365704894065857,-0.423159956932068\n             ,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,0.833657681941986,-0.354278296232224,-0.423676431179047\n             ,-0.382496774196625,-0.602528691291809,-0.700468003749847,0.279529839754105,-0.929970979690552,-0.238782465457916\n             ,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.967258095741272,-0.228260591626167,-0.110945627093315\n             ,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.464792013168335,-0.880890548229218,0.0894443169236183\n             ,-0.464792013168335,-0.880890548229218,0.0894443169236183,0.279529839754105,-0.929970979690552,-0.238782465457916\n             ,0.205829456448555,-0.762141346931458,0.613819897174835,-0.597855687141418,-0.328857451677322,0.731041252613068\n             ,-0.464792013168335,-0.880890548229218,0.0894443169236183,0.205829456448555,-0.762141346931458,0.613819897174835\n             ,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.597855687141418,-0.328857451677322,0.731041252613068\n             ,-0.967258095741272,-0.228260591626167,-0.110945627093315,0.674587190151215,-0.27459716796875,0.685221493244171\n             ,0.828972637653351,-0.365704894065857,-0.423159956932068,0.833657681941986,-0.354278296232224,-0.423676431179047\n             ,-0.394580245018005,0.233544617891312,0.888686299324036,0.674587190151215,-0.27459716796875,0.685221493244171\n             ,-0.350194752216339,0.292267352342606,0.889912009239197,0.613874554634094,-0.719477951526642,-0.324822306632996\n             ,0.631237089633942,-0.400684475898743,0.664072096347809,0.678764045238495,-0.636029005050659,-0.367078334093094\n             ,-0.36957174539566,0.387512475252151,0.844541788101196,-0.343200415372849,0.296563923358917,0.891214549541473\n             ,0.631237089633942,-0.400684475898743,0.664072096347809,0.113647989928722,-0.758261322975159,0.641968786716461\n             ,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.156990006566048,-0.969383895397186,0.188809439539909\n             ,-0.156990006566048,-0.969383895397186,0.188809439539909,0.210238441824913,-0.975585281848907,0.0635072365403175\n             ,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.210238441824913,-0.975585281848907,0.0635072365403175\n             ,-0.156990006566048,-0.969383895397186,0.188809439539909,0.00529748247936368,-0.99651163816452,0.0832859799265862\n             ,-0.156990006566048,-0.969383895397186,0.188809439539909,0.403339564800262,-0.909987509250641,-0.0961246117949486\n             ,0.297526687383652,-0.947863459587097,-0.114161059260368,0.297526687383652,-0.947863459587097,-0.114161059260368\n             ,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.692436456680298,-0.693914532661438,0.197520568966866\n             ,-0.156990006566048,-0.969383895397186,0.188809439539909,0.297526687383652,-0.947863459587097,-0.114161059260368\n             ,-0.534125924110413,-0.786291003227234,-0.310573488473892,0.586962282657623,-0.660651743412018,-0.467989921569824\n             ,-0.400393456220627,-0.282469868659973,-0.8717200756073,0.568342566490173,-0.692033231258392,-0.445058077573776\n             ,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.896232187747955,0.443575948476791,0.00286618177779019\n             ,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.394356489181519,-0.149896875023842,-0.906649768352509\n             ,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.906125068664551,0.423002034425735,-0.00257390737533569\n             ,0.672275424003601,-0.513835847377777,-0.532933831214905,-0.394356489181519,-0.149896875023842,-0.906649768352509\n             ,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.600427627563477,-0.609243273735046,-0.517985820770264\n             ,0.192592486739159,-0.95661062002182,-0.21864178776741,-0.496130347251892,-0.8139808177948,0.302142232656479\n             ,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.600427627563477,-0.609243273735046,-0.517985820770264\n             ,-0.496130347251892,-0.8139808177948,0.302142232656479,-0.496130347251892,-0.8139808177948,0.302142232656479\n             ,0.192592486739159,-0.95661062002182,-0.21864178776741,0.295449286699295,-0.702050924301147,0.647946059703827\n             ,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.496130347251892,-0.8139808177948,0.302142232656479\n             ,0.295449286699295,-0.702050924301147,0.647946059703827,-0.496130347251892,-0.8139808177948,0.302142232656479\n             ,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.970863342285156,-0.156214520335197,0.181717962026596\n             ,0.78001469373703,-0.23672841489315,0.579255342483521,0.672275424003601,-0.513835847377777,-0.532933831214905\n             ,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.142891898751259,0.310856729745865,0.939654171466827\n             ,0.78001469373703,-0.23672841489315,0.579255342483521,-0.104846432805061,0.370796233415604,0.922776997089386\n             ,0.776305437088013,-0.254482686519623,0.576704740524292,0.586962282657623,-0.660651743412018,-0.467989921569824\n             ,0.568342566490173,-0.692033231258392,-0.445058077573776,-0.126598969101906,0.370326429605484,0.920234203338623\n             ,0.776305437088013,-0.254482686519623,0.576704740524292,-0.162613198161125,0.452644348144531,0.876738309860229\n             ,0.692436456680298,-0.693914532661438,0.197520568966866,0.702709794044495,-0.35005995631218,0.619400501251221\n             ,0.297526687383652,-0.947863459587097,-0.114161059260368,0.702709794044495,-0.35005995631218,0.619400501251221\n             ,0.692436456680298,-0.693914532661438,0.197520568966866,0.679429173469543,-0.206046029925346,0.704216599464417\n             ,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.692436456680298,-0.693914532661438,0.197520568966866\n             ,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.499378323554993,-0.200641006231308,0.842831194400787\n             ,0.679429173469543,-0.206046029925346,0.704216599464417,0.759757459163666,-0.495759963989258,0.42070260643959\n             ,0.119333148002625,-0.907433569431305,-0.402894467115402,0.166270598769188,-0.985880434513092,0.0198450349271297\n             ,0.134703695774078,-0.930721879005432,-0.340017199516296,0.166270598769188,-0.985880434513092,0.0198450349271297\n             ,0.119333148002625,-0.907433569431305,-0.402894467115402,-0.610331058502197,-0.781622171401978,0.128696575760841\n             ,-0.455443143844604,-0.0435190759599209,0.889200568199158,0.228076592087746,-0.722928047180176,0.652193248271942\n             ,-0.610331058502197,-0.781622171401978,0.128696575760841,0.228076592087746,-0.722928047180176,0.652193248271942\n             ,0.166270598769188,-0.985880434513092,0.0198450349271297,-0.610331058502197,-0.781622171401978,0.128696575760841\n             ,0.166270598769188,-0.985880434513092,0.0198450349271297,0.759757459163666,-0.495759963989258,0.42070260643959\n             ,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.759757459163666,-0.495759963989258,0.42070260643959\n             ,0.166270598769188,-0.985880434513092,0.0198450349271297,0.228076592087746,-0.722928047180176,0.652193248271942\n             ,-0.823581099510193,-0.405602097511292,-0.396485984325409,0.139615654945374,-0.644082069396973,-0.752107560634613\n             ,-0.791083514690399,-0.304101139307022,-0.53076297044754,-0.90501195192337,0.21977810561657,0.364212721586227\n             ,-0.823581099510193,-0.405602097511292,-0.396485984325409,-0.791083514690399,-0.304101139307022,-0.53076297044754\n             ,-0.00195049878675491,-0.724513411521912,0.689257919788361,0.755722880363464,-0.635050356388092,0.159981176257133\n             ,0.677094995975494,0.017529908567667,0.735686838626862,-0.10662803798914,0.114874452352524,0.987640738487244\n             ,-0.00195049878675491,-0.724513411521912,0.689257919788361,0.677094995975494,0.017529908567667,0.735686838626862\n             ,0.950212061405182,0.303586721420288,0.0702292993664742,0.919881999492645,-0.0601645521819592,-0.387552946805954\n             ,0.977863430976868,-0.0681029558181763,0.197851315140724,0.741024434566498,0.216318398714066,0.635680079460144\n             ,0.977863430976868,-0.0681029558181763,0.197851315140724,0.716558694839478,-0.309423923492432,0.625140368938446\n             ,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.139615654945374,-0.644082069396973,-0.752107560634613\n             ,0.944929540157318,-0.11514762789011,-0.306348145008087,0.906101286411285,-0.389416426420212,-0.165334045886993\n             ,0.119333148002625,-0.907433569431305,-0.402894467115402,0.134703695774078,-0.930721879005432,-0.340017199516296\n             ,0.119333148002625,-0.907433569431305,-0.402894467115402,0.906101286411285,-0.389416426420212,-0.165334045886993\n             ,0.986938416957855,-0.10414332151413,-0.122909314930439,0.530287146568298,-0.713563740253448,-0.457845360040665\n             ,0.906101286411285,-0.389416426420212,-0.165334045886993,0.134703695774078,-0.930721879005432,-0.340017199516296\n             ,0.906101286411285,-0.389416426420212,-0.165334045886993,0.530287146568298,-0.713563740253448,-0.457845360040665\n             ,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.919881999492645,-0.0601645521819592,-0.387552946805954\n             ,0.946987807750702,-0.279256701469421,-0.158838823437691,0.977863430976868,-0.0681029558181763,0.197851315140724\n             ,0.745758533477783,-0.330089628696442,-0.578692495822906,0.919881999492645,-0.0601645521819592,-0.387552946805954\n             ,0.65491396188736,-0.503674864768982,-0.563382029533386,0.65491396188736,-0.503674864768982,-0.563382029533386\n             ,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.530287146568298,-0.713563740253448,-0.457845360040665\n             ,0.648194909095764,-0.336823225021362,-0.682930052280426,0.745758533477783,-0.330089628696442,-0.578692495822906\n             ,0.65491396188736,-0.503674864768982,-0.563382029533386,0.530287146568298,-0.713563740253448,-0.457845360040665\n             ,0.414326965808868,-0.847513318061829,-0.331744402647018,0.65491396188736,-0.503674864768982,-0.563382029533386\n             ,0.414326965808868,-0.847513318061829,-0.331744402647018,0.530287146568298,-0.713563740253448,-0.457845360040665\n             ,0.134703695774078,-0.930721879005432,-0.340017199516296,0.134703695774078,-0.930721879005432,-0.340017199516296\n             ,0.166270598769188,-0.985880434513092,0.0198450349271297,0.414326965808868,-0.847513318061829,-0.331744402647018\n             ,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.318604946136475,-0.851775884628296,-0.415895074605942\n             ,0.166518494486809,-0.975531220436096,-0.14356318116188,0.403339564800262,-0.909987509250641,-0.0961246117949486\n             ,0.643197417259216,-0.725296139717102,-0.245443657040596,0.751181125640869,-0.660092532634735,-0.00218340824358165\n             ,0.643197417259216,-0.725296139717102,-0.245443657040596,0.403339564800262,-0.909987509250641,-0.0961246117949486\n             ,0.210238441824913,-0.975585281848907,0.0635072365403175,0.643197417259216,-0.725296139717102,-0.245443657040596\n             ,0.210238441824913,-0.975585281848907,0.0635072365403175,0.166518494486809,-0.975531220436096,-0.14356318116188\n             ,0.166518494486809,-0.975531220436096,-0.14356318116188,-0.024921914562583,-0.994488954544067,-0.101836577057838\n             ,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.751181125640869,-0.660092532634735,-0.00218340824358165\n             ,0.414326965808868,-0.847513318061829,-0.331744402647018,0.166270598769188,-0.985880434513092,0.0198450349271297\n             ,0.414326965808868,-0.847513318061829,-0.331744402647018,0.751181125640869,-0.660092532634735,-0.00218340824358165\n             ,0.643197417259216,-0.725296139717102,-0.245443657040596,-0.90501195192337,0.21977810561657,0.364212721586227\n             ,-0.0499426536262035,0.692004799842834,0.720163226127625,-0.057441920042038,0.650170862674713,0.75761353969574\n             ,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.677114307880402,0.387711197137833,-0.625456809997559\n             ,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.836970150470734,0.473509907722473,-0.274352669715881\n             ,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.752102732658386,0.351088106632233,-0.557744264602661\n             ,-0.585053384304047,0.545464694499969,0.600150644779205,0.0647351443767548,0.381562024354935,0.922073602676392\n             ,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.0423084795475006,0.388709634542465,0.920388400554657\n             ,-0.155946508049965,0.418714195489883,0.894627928733826,-0.256222367286682,0.552950799465179,0.792840123176575\n             ,-0.155946508049965,0.418714195489883,0.894627928733826,-0.213889330625534,0.483835697174072,0.848619103431702\n             ,-0.200460329651833,0.603900372982025,0.771440207958221,-0.633183777332306,0.444622397422791,-0.6335529088974\n             ,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.752102732658386,0.351088106632233,-0.557744264602661\n             ,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.896232187747955,0.443575948476791,0.00286618177779019\n             ,-0.585053384304047,0.545464694499969,0.600150644779205,-0.162613198161125,0.452644348144531,0.876738309860229\n             ,0.0647351443767548,0.381562024354935,0.922073602676392,-0.585053384304047,0.545464694499969,0.600150644779205\n             ,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.878819167613983,0.322898685932159,0.351302325725555\n             ,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.774610698223114,0.0345993041992188,0.631491184234619\n             ,-0.525893211364746,0.411127626895905,0.744587421417236,-0.326038300991058,0.243334606289864,0.913502752780914\n             ,-0.200460329651833,0.603900372982025,0.771440207958221,-0.25537496805191,0.596560716629028,0.760854065418243\n             ,-0.256222367286682,0.552950799465179,0.792840123176575,-0.739033222198486,0.522002279758453,0.425844460725784\n             ,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.36957174539566,0.387512475252151,0.844541788101196\n             ,-0.36957174539566,0.387512475252151,0.844541788101196,-0.326038300991058,0.243334606289864,0.913502752780914\n             ,-0.739033222198486,0.522002279758453,0.425844460725784,-0.256222367286682,0.552950799465179,0.792840123176575\n             ,-0.155946508049965,0.418714195489883,0.894627928733826,-0.200460329651833,0.603900372982025,0.771440207958221\n             ,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.872280597686768,0.488854855298996,0.0121469330042601\n             ,-0.633183777332306,0.444622397422791,-0.6335529088974,-0.757650375366211,0.518597006797791,-0.39626133441925\n             ,-0.806818068027496,0.571618735790253,0.149320676922798,-0.814637243747711,0.194269418716431,-0.546466410160065\n             ,-0.806818068027496,0.571618735790253,0.149320676922798,-0.757650375366211,0.518597006797791,-0.39626133441925\n             ,-0.559803783893585,0.448765695095062,0.696583867073059,-0.559803783893585,0.448765695095062,0.696583867073059\n             ,-0.507044553756714,0.251941651105881,0.824276208877563,-0.806818068027496,0.571618735790253,0.149320676922798\n             ,-0.0995585918426514,-0.971274793148041,-0.216132834553719,-0.541550755500793,-0.826843023300171,-0.151833668351173\n             ,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.871611714363098,0.473160296678543,-0.128110930323601\n             ,-0.739033222198486,0.522002279758453,0.425844460725784,-0.907855153083801,0.259428709745407,-0.329386949539185\n             ,-0.162613198161125,0.452644348144531,0.876738309860229,-0.585053384304047,0.545464694499969,0.600150644779205\n             ,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.846407413482666,0.503773093223572,0.17264749109745\n             ,-0.802789449691772,0.535418033599854,0.26240548491478,-0.73642486333847,0.608879089355469,0.294863820075989\n             ,-0.802789449691772,0.535418033599854,0.26240548491478,-0.850029647350311,0.48296907544136,0.210215270519257\n             ,-0.826775729656219,0.455823004245758,0.329647213220596,0.515248417854309,-0.441880226135254,-0.734343886375427\n             ,0.745758533477783,-0.330089628696442,-0.578692495822906,0.648194909095764,-0.336823225021362,-0.682930052280426\n             ,-0.802789449691772,0.535418033599854,0.26240548491478,-0.737847745418549,0.550981104373932,0.389872461557388\n             ,-0.73642486333847,0.608879089355469,0.294863820075989,-0.826775729656219,0.455823004245758,0.329647213220596\n             ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.948099076747894,0.317963510751724,0.00271255942061543\n             ,-0.737847745418549,0.550981104373932,0.389872461557388,-0.724430322647095,0.542059719562531,0.425877869129181\n             ,-0.693721890449524,0.488555252552032,0.529210448265076,-0.525893211364746,0.411127626895905,0.744587421417236\n             ,-0.878819167613983,0.322898685932159,0.351302325725555,-0.693721890449524,0.488555252552032,0.529210448265076\n             ,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.878819167613983,0.322898685932159,0.351302325725555\n             ,-0.525893211364746,0.411127626895905,0.744587421417236,-0.907855153083801,0.259428709745407,-0.329386949539185\n             ,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.929436683654785,-0.0642196834087372,0.36335015296936\n             ,-0.911366164684296,0.266076982021332,0.31402975320816,-0.910764098167419,0.385902374982834,-0.146928876638412\n             ,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.994495153427124,-0.0799508094787598,0.0677299797534943\n             ,-0.911366164684296,0.266076982021332,0.31402975320816,-0.818624794483185,-0.0173483304679394,0.574066698551178\n             ,-0.730839848518372,0.374586492776871,0.570576965808868,-0.818624794483185,-0.0173483304679394,0.574066698551178\n             ,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.713936686515808,0.496329486370087,-0.493914365768433\n             ,-0.730839848518372,0.374586492776871,0.570576965808868,-0.872280597686768,0.488854855298996,0.0121469330042601\n             ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.814637243747711,0.194269418716431,-0.546466410160065\n             ,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.818624794483185,-0.0173483304679394,0.574066698551178\n             ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.994495153427124,-0.0799508094787598,0.0677299797534943\n             ,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.156990006566048,-0.969383895397186,0.188809439539909\n             ,-0.534125924110413,-0.786291003227234,-0.310573488473892,0.113647989928722,-0.758261322975159,0.641968786716461\n             ,-0.156990006566048,-0.969383895397186,0.188809439539909,-0.462510108947754,-0.809054553508759,0.362650156021118\n             ,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.183117777109146,0.0588014125823975,-0.981330871582031\n             ,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.629925072193146,0.0149115975946188,-0.776512682437897\n             ,0.906101286411285,-0.389416426420212,-0.165334045886993,0.919881999492645,-0.0601645521819592,-0.387552946805954\n             ,0.950212061405182,0.303586721420288,0.0702292993664742,-0.181978538632393,0.229496166110039,0.956146061420441\n             ,-0.213889330625534,0.483835697174072,0.848619103431702,0.10479624569416,-0.144131794571877,0.983993768692017\n             ,0.075324609875679,0.630104899406433,0.772848010063171,-0.213889330625534,0.483835697174072,0.848619103431702\n             ,-0.181978538632393,0.229496166110039,0.956146061420441,0.919881999492645,-0.0601645521819592,-0.387552946805954\n             ,0.810982346534729,-0.364237248897552,-0.457863301038742,0.946987807750702,-0.279256701469421,-0.158838823437691\n             ,0.917286098003387,-0.397383034229279,0.0259414706379175,0.907455027103424,-0.419752985239029,-0.0182434022426605\n             ,0.370425969362259,-0.053249154239893,-0.927334427833557,0.843434154987335,0.424213349819183,0.329638987779617\n             ,0.619699597358704,0.579480230808258,0.529315650463104,0.631212413311005,0.590215682983398,0.503206074237823\n             ,0.986938416957855,-0.10414332151413,-0.122909314930439,0.906101286411285,-0.389416426420212,-0.165334045886993\n             ,0.843434154987335,0.424213349819183,0.329638987779617,-0.000278991181403399,0.484035164117813,0.875048518180847\n             ,-0.200460329651833,0.603900372982025,0.771440207958221,0.0509466230869293,0.674606919288635,0.73641699552536\n             ,-0.200460329651833,0.603900372982025,0.771440207958221,-0.000278991181403399,0.484035164117813,0.875048518180847\n             ,-0.225308075547218,0.514127254486084,0.827592551708221,-0.646084487438202,0.634681701660156,0.423973977565765\n             ,-0.601623058319092,0.623578310012817,0.499199062585831,-0.506461322307587,0.506999313831329,0.697458744049072\n             ,-0.636041522026062,0.455239772796631,0.623063385486603,-0.569389760494232,0.625551760196686,0.533366978168488\n             ,-0.458326160907745,0.410590946674347,0.788258969783783,-0.313503563404083,0.434664905071259,0.844264149665833\n             ,-0.126709908246994,0.488826990127563,0.863129615783691,0.126011043787003,0.287478059530258,0.949461758136749\n             ,-0.126709908246994,0.488826990127563,0.863129615783691,-0.313503563404083,0.434664905071259,0.844264149665833\n             ,-0.0354647859930992,0.343396455049515,0.938520729541779,0.540099084377289,-0.0461409948766232,0.840335667133331\n             ,0.498305976390839,-0.0497501380741596,0.865572690963745,0.126011043787003,0.287478059530258,0.949461758136749\n             ,0.280613332986832,0.159042209386826,0.946552574634552,0.809420764446259,-0.470037072896957,0.351998805999756\n             ,0.72262305021286,-0.326216995716095,0.609424650669098,0.716558694839478,-0.309423923492432,0.625140368938446\n             ,0.977863430976868,-0.0681029558181763,0.197851315140724,0.977863430976868,-0.0681029558181763,0.197851315140724\n             ,0.946987807750702,-0.279256701469421,-0.158838823437691,0.741691589355469,-0.67026162147522,0.0253561399877071\n             ,0.809420764446259,-0.470037072896957,0.351998805999756,0.946987807750702,-0.279256701469421,-0.158838823437691\n             ,0.810982346534729,-0.364237248897552,-0.457863301038742,0.582424879074097,-0.744178652763367,-0.327077031135559\n             ,0.741691589355469,-0.67026162147522,0.0253561399877071,0.810982346534729,-0.364237248897552,-0.457863301038742\n             ,0.745758533477783,-0.330089628696442,-0.578692495822906,0.508804976940155,-0.739443361759186,-0.440841227769852\n             ,0.582424879074097,-0.744178652763367,-0.327077031135559,0.284903138875961,-0.719545781612396,-0.633311986923218\n             ,0.416897594928741,-0.716307580471039,-0.559553265571594,0.508804976940155,-0.739443361759186,-0.440841227769852\n             ,0.745758533477783,-0.330089628696442,-0.578692495822906,0.515248417854309,-0.441880226135254,-0.734343886375427\n             ,-0.589546144008636,-0.0253028552979231,-0.807338297367096,-0.266710460186005,-0.229353681206703,-0.936088860034943\n             ,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.629925072193146,0.0149115975946188,-0.776512682437897\n             ,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.893975257873535,0.250766932964325,-0.371381372213364\n             ,-0.897937893867493,0.273350894451141,-0.344944715499878,-0.589546144008636,-0.0253028552979231,-0.807338297367096\n             ,-0.95041960477829,0.288634985685349,-0.115725472569466,-0.897937893867493,0.273350894451141,-0.344944715499878\n             ,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.931574642658234,0.319444477558136,-0.173562213778496\n             ,-0.720763742923737,0.630777835845947,0.28743514418602,-0.847473680973053,0.530733585357666,-0.0104993488639593\n             ,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.73642486333847,0.608879089355469,0.294863820075989\n             ,-0.646084487438202,0.634681701660156,0.423973977565765,-0.720763742923737,0.630777835845947,0.28743514418602\n             ,-0.73642486333847,0.608879089355469,0.294863820075989,-0.601623058319092,0.623578310012817,0.499199062585831\n             ,-0.847473680973053,0.530733585357666,-0.0104993488639593,-0.918838560581207,0.321084290742874,-0.229435324668884\n             ,-0.899121463298798,0.345348745584488,-0.268914222717285,-0.860682129859924,0.507934510707855,-0.0350551940500736\n             ,-0.918838560581207,0.321084290742874,-0.229435324668884,-0.95041960477829,0.288634985685349,-0.115725472569466\n             ,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.899121463298798,0.345348745584488,-0.268914222717285\n             ,0.126011043787003,0.287478059530258,0.949461758136749,-0.0354647859930992,0.343396455049515,0.938520729541779\n             ,0.280613332986832,0.159042209386826,0.946552574634552,-0.506461322307587,0.506999313831329,0.697458744049072\n             ,-0.313503563404083,0.434664905071259,0.844264149665833,-0.458326160907745,0.410590946674347,0.788258969783783\n             ,-0.636041522026062,0.455239772796631,0.623063385486603,0.540099084377289,-0.0461409948766232,0.840335667133331\n             ,0.716558694839478,-0.309423923492432,0.625140368938446,0.72262305021286,-0.326216995716095,0.609424650669098\n             ,0.498305976390839,-0.0497501380741596,0.865572690963745,-0.000557535502593964,-0.634240567684174,-0.773135602474213\n             ,0.284903138875961,-0.719545781612396,-0.633311986923218,0.515248417854309,-0.441880226135254,-0.734343886375427\n             ,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.085550844669342,-0.179267361760139,-0.980073630809784\n             ,-0.178665772080421,-0.378166645765305,-0.908332824707031,-0.000557535502593964,-0.634240567684174,-0.773135602474213\n             ,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.085550844669342,-0.179267361760139,-0.980073630809784\n             ,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.273908197879791,-0.125118911266327,-0.953582465648651\n             ,-0.085550844669342,-0.179267361760139,-0.980073630809784,-0.273908197879791,-0.125118911266327,-0.953582465648651\n             ,-0.266710460186005,-0.229353681206703,-0.936088860034943,-0.178665772080421,-0.378166645765305,-0.908332824707031\n             ,0.280117779970169,0.669322490692139,0.688143491744995,0.458152443170547,0.667493462562561,0.586982846260071\n             ,0.562915802001953,0.509836494922638,0.650532484054565,0.291106730699539,0.735121071338654,0.612253129482269\n             ,-0.431082636117935,0.669595658779144,0.604821860790253,-0.285846680402756,0.740470588207245,0.608272194862366\n             ,-0.324628859758377,0.674010813236237,0.663570284843445,-0.658022820949554,0.640722334384918,0.395576566457748\n             ,-0.721357464790344,0.650649428367615,0.237273663282394,-0.557555019855499,0.7959104180336,0.235921680927277\n             ,-0.560215890407562,0.757637023925781,0.334879487752914,-0.677088737487793,-0.402109175920486,-0.616327106952667\n             ,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.405299872159958,-0.415835052728653,-0.814133405685425\n             ,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.737501204013824,0.475387096405029,-0.479686439037323\n             ,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.579810619354248,-0.395008951425552,-0.71259218454361\n             ,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.579810619354248,-0.395008951425552,-0.71259218454361\n             ,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.453488618135452,0.205984279513359,-0.867132365703583\n             ,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.0743019878864288,-0.318207800388336,-0.945104777812958\n             ,0.0686725899577141,-0.344746232032776,-0.936180591583252,0.205058068037033,-0.244612783193588,-0.947689712047577\n             ,0.296686768531799,0.847575604915619,-0.439991503953934,0.454949915409088,0.569741904735565,-0.6844083070755\n             ,0.550657391548157,0.552472710609436,-0.625739872455597,0.339142799377441,0.423890322446823,-0.839820921421051\n             ,0.427927106618881,-0.320324927568436,-0.845145165920258,0.500678837299347,-0.355485200881958,-0.789272427558899\n             ,0.454949915409088,0.569741904735565,-0.6844083070755,-0.940154373645782,-0.000986201339401305,0.34074741601944\n             ,-0.915072500705719,0.126962244510651,0.382783114910126,-0.833327293395996,0.113953985273838,0.540906727313995\n             ,-0.850330471992493,0.108354985713959,0.514973104000092,-0.88858425617218,0.0664631873369217,0.453872948884964\n             ,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.975045323371887,0.00311258574947715,0.221984133124352\n             ,-0.95991450548172,0.12906339764595,0.248810708522797,-0.915072500705719,0.126962244510651,0.382783114910126\n             ,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.999095141887665,-0.00423012021929026,-0.0423198379576206\n             ,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.95991450548172,0.12906339764595,0.248810708522797\n             ,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.999439835548401,-0.0108993193134665,-0.0316409841179848\n             ,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.971041917800903,0.0163660850375891,-0.238347947597504\n             ,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.992459714412689,0.0535954684019089,-0.110232837498188\n             ,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.999095141887665,-0.00423012021929026,-0.0423198379576206\n             ,-0.90544730424881,0.119117729365826,0.407401740550995,-0.830910623073578,0.150519490242004,0.535659790039063\n             ,-0.833327293395996,0.113953985273838,0.540906727313995,-0.915072500705719,0.126962244510651,0.382783114910126\n             ,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.90544730424881,0.119117729365826,0.407401740550995\n             ,-0.915072500705719,0.126962244510651,0.382783114910126,-0.95991450548172,0.12906339764595,0.248810708522797\n             ,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.96833336353302,0.0874056592583656,0.23386062681675\n             ,-0.95991450548172,0.12906339764595,0.248810708522797,-0.995317578315735,0.0929132029414177,-0.0266464799642563\n             ,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.999233186244965,0.0380166918039322,-0.00937180034816265\n             ,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.988875865936279,0.0939552411437035,-0.115312464535236\n             ,-0.446692645549774,0.129568219184875,0.885255753993988,-0.850330471992493,0.108354985713959,0.514973104000092\n             ,-0.833327293395996,0.113953985273838,0.540906727313995,-0.484486788511276,0.136127799749374,0.864142179489136\n             ,-0.833327293395996,0.113953985273838,0.540906727313995,-0.830910623073578,0.150519490242004,0.535659790039063\n             ,-0.504776954650879,0.179731994867325,0.844332098960876,-0.484486788511276,0.136127799749374,0.864142179489136\n             ,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.776555001735687,-0.203016772866249,0.59644490480423\n             ,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.536516189575195,-0.591317057609558,0.602075219154358\n             ,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.776555001735687,-0.203016772866249,0.59644490480423\n             ,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.282705783843994,-0.5980544090271,0.749938905239105\n             ,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.948758661746979,-0.259771883487701,0.179931968450546\n             ,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.282705783843994,-0.5980544090271,0.749938905239105\n             ,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.987079083919525,-0.140233889222145,-0.0775200128555298\n             ,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.52260547876358,-0.713823437690735,0.466196954250336\n             ,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.992392778396606,0.0152386799454689,-0.122165411710739\n             ,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.935397446155548,0.0250490680336952,-0.352709710597992\n             ,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.988875865936279,0.0939552411437035,-0.115312464535236\n             ,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.961289465427399,-0.197325810790062,-0.192315071821213\n             ,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.999439835548401,-0.0108993193134665,-0.0316409841179848\n             ,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.972792744636536,0.0608477629721165,-0.223543986678123\n             ,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.995226204395294,0.0964939147233963,-0.0146211665123701\n             ,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.615352869033813,0.61141961812973,-0.497500658035278\n             ,0.103712424635887,0.131697446107864,0.985849618911743,-0.446692645549774,0.129568219184875,0.885255753993988\n             ,-0.484486788511276,0.136127799749374,0.864142179489136,0.0677588582038879,0.127564132213593,0.989513099193573\n             ,-0.484486788511276,0.136127799749374,0.864142179489136,-0.504776954650879,0.179731994867325,0.844332098960876\n             ,0.0673240348696709,0.131959661841393,0.988966166973114,0.0677588582038879,0.127564132213593,0.989513099193573\n             ,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.508872270584106,0.031244209036231,0.860274851322174\n             ,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.0107409534975886,-0.582138001918793,0.813019037246704\n             ,-0.0107409534975886,-0.582138001918793,0.813019037246704,-0.588486015796661,-0.357772886753082,0.725039839744568\n             ,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.0782936215400696,-0.811185777187347,0.579523682594299\n             ,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.361082255840302,-0.597368240356445,0.716080188751221\n             ,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.0782936215400696,-0.811185777187347,0.579523682594299\n             ,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.361082255840302,-0.597368240356445,0.716080188751221\n             ,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.00733196083456278,-0.679022014141083,0.734081327915192\n             ,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.52260547876358,-0.713823437690735,0.466196954250336\n             ,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.00733196083456278,-0.679022014141083,0.734081327915192\n             ,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.52260547876358,-0.713823437690735,0.466196954250336\n             ,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.332114219665527,-0.935638904571533,-0.119498759508133\n             ,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.895039916038513,-0.34432727098465,-0.283447057008743\n             ,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.332114219665527,-0.935638904571533,-0.119498759508133\n             ,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.895039916038513,-0.34432727098465,-0.283447057008743\n             ,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.543579876422882,-0.26823478937149,-0.795343339443207\n             ,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.924877762794495,-0.0230817683041096,-0.379563301801682\n             ,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.526416659355164,-0.125638738274574,-0.840892672538757\n             ,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.935397446155548,0.0250490680336952,-0.352709710597992\n             ,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.520528793334961,-0.54434335231781,-0.657829761505127\n             ,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.959655940532684,-0.217719197273254,-0.177929356694222\n             ,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.596441090106964,-0.0567259602248669,-0.800649881362915\n             ,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.972792744636536,0.0608477629721165,-0.223543986678123\n             ,-0.615352869033813,0.61141961812973,-0.497500658035278,-0.280504614114761,0.75769966840744,-0.58924388885498\n             ,0.103712424635887,0.131697446107864,0.985849618911743,-0.3530093729496,0.178218960762024,0.918489158153534,-0.342477291822433\n             ,0.228350877761841,0.911353468894959,0.142002120614052,0.141973868012428,0.979631960391998,-0.203233033418655\n             ,-0.00871946662664413,0.979091584682465,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.0107409534975886\n             ,-0.582138001918793,0.813019037246704,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.0107409534975886\n             ,-0.582138001918793,0.813019037246704,-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.405384927988052\n             ,-0.526269018650055,0.747465074062347,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.0444819778203964\n             ,-0.725194454193115,0.687105774879456,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.0782936215400696\n             ,-0.811185777187347,0.579523682594299,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.00733196083456278\n             ,-0.679022014141083,0.734081327915192,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.632588505744934\n             ,-0.619191765785217,0.465224027633667,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.0927847772836685\n             ,-0.869047880172729,0.485949277877808,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.716924250125885\n             ,-0.697136282920837,0.00454333378002048,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.496702879667282\n             ,-0.638544976711273,-0.587832093238831,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.807790637016296\n             ,-0.143092095851898,-0.571838200092316,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.534743189811707\n             ,-0.0985642895102501,-0.839246511459351,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.807790637016296\n             ,-0.143092095851898,-0.571838200092316,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.520528793334961\n             ,-0.54434335231781,-0.657829761505127,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.760540843009949\n             ,0.00420303363353014,-0.649276435375214,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.567457735538483\n             ,-0.508834183216095,-0.647363483905792,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.609844028949738\n             ,0.00468328595161438,-0.792507588863373,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.596441090106964\n             ,-0.0567259602248669,-0.800649881362915,-0.280504614114761,0.75769966840744,-0.58924388885498,-0.679527759552002\n             ,0.357755899429321,-0.64050966501236,-0.850330471992493,0.108354985713959,0.514973104000092,-0.85614150762558\n             ,0.16506227850914,0.489669442176819,-0.866834819316864,0.162685200572014,0.471307665109634,-0.88858425617218\n             ,0.0664631873369217,0.453872948884964,-0.887829720973969,0.160652026534081,0.431218415498734,-0.954534351825714\n             ,0.144535258412361,0.260717809200287,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.934069633483887\n             ,0.0233576260507107,0.356326133012772,-0.954534351825714,0.144535258412361,0.260717809200287,-0.991207242012024\n             ,0.115119017660618,0.0652364492416382,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.976888537406921\n             ,-0.0332014113664627,0.211155027151108,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.793882787227631\n             ,0.349916815757751,-0.497301042079926,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.971041917800903\n             ,0.0163660850375891,-0.238347947597504,-0.446692645549774,0.129568219184875,0.885255753993988,-0.4341821372509\n             ,0.175567016005516,0.883550822734833,-0.85614150762558,0.16506227850914,0.489669442176819,-0.850330471992493\n             ,0.108354985713959,0.514973104000092,0.103712424635887,0.131697446107864,0.985849618911743,0.142002120614052\n             ,0.141973868012428,0.979631960391998,-0.4341821372509,0.175567016005516,0.883550822734833,-0.446692645549774\n             ,0.129568219184875,0.885255753993988,-0.85614150762558,0.16506227850914,0.489669442176819,-0.542121350765228\n             ,0.80557918548584,0.239053606987,-0.545656681060791,0.805297791957855,0.23184959590435,-0.866834819316864,0.162685200572014\n             ,0.471307665109634,-0.887829720973969,0.160652026534081,0.431218415498734,-0.567242085933685,0.801439464092255\n             ,0.189555287361145,-0.613154649734497,0.784870028495789,0.0895571559667587,-0.954534351825714,0.144535258412361\n             ,0.260717809200287,-0.954534351825714,0.144535258412361,0.260717809200287,-0.613154649734497,0.784870028495789\n             ,0.0895571559667587,-0.63306587934494,0.773617923259735,-0.0272569861263037,-0.991207242012024,0.115119017660618\n             ,0.0652364492416382,-0.4341821372509,0.175567016005516,0.883550822734833,-0.252021908760071,0.83885395526886\n             ,0.482502818107605,-0.542121350765228,0.80557918548584,0.239053606987,-0.85614150762558,0.16506227850914,0.489669442176819\n             ,0.142002120614052,0.141973868012428,0.979631960391998,0.134743452072144,0.77269721031189,0.620308935642242,-0.252021908760071\n             ,0.83885395526886,0.482502818107605,-0.4341821372509,0.175567016005516,0.883550822734833,-0.961289465427399,-0.197325810790062\n             ,-0.192315071821213,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.959655940532684,-0.217719197273254\n             ,-0.177929356694222,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.961289465427399,-0.197325810790062\n             ,-0.192315071821213,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.567457735538483,-0.508834183216095\n             ,-0.647363483905792,-0.795754730701447,0.170272067189217,0.58118999004364,-0.887829720973969,0.160652026534081\n             ,0.431218415498734,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.914398610591888,-0.029835456982255\n             ,0.403714030981064,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.914398610591888,-0.029835456982255\n             ,0.403714030981064,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.976888537406921,-0.0332014113664627\n             ,0.211155027151108,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.976888537406921,-0.0332014113664627\n             ,0.211155027151108,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.992125034332275,-0.0701997056603432\n             ,-0.103729829192162,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.992125034332275,-0.0701997056603432\n             ,-0.103729829192162,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.991207242012024,0.115119017660618\n             ,0.0652364492416382,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.63306587934494,0.773617923259735\n             ,-0.0272569861263037,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.973434746265411,0.0614772625267506\n             ,-0.220556899905205,-0.795754730701447,0.170272067189217,0.58118999004364,-0.502963840961456,0.808468639850616\n             ,0.305623710155487,-0.567242085933685,0.801439464092255,0.189555287361145,-0.887829720973969,0.160652026534081\n             ,0.431218415498734,-0.795754730701447,0.170272067189217,0.58118999004364,-0.914398610591888,-0.029835456982255\n             ,0.403714030981064,-0.88858425617218,0.0664631873369217,0.453872948884964,-0.866834819316864,0.162685200572014\n             ,0.471307665109634,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.970968067646027,-0.16826631128788\n             ,0.1700219810009,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.940154373645782,-0.000986201339401305\n             ,0.34074741601944,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.992125034332275,-0.0701997056603432\n             ,-0.103729829192162,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.975045323371887,0.00311258574947715\n             ,0.221984133124352,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.973434746265411,0.0614772625267506\n             ,-0.220556899905205,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.971041917800903,0.0163660850375891\n             ,-0.238347947597504,-0.502963840961456,0.808468639850616,0.305623710155487,-0.795754730701447,0.170272067189217\n             ,0.58118999004364,-0.866834819316864,0.162685200572014,0.471307665109634,-0.545656681060791,0.805297791957855\n             ,0.23184959590435,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.632741153240204,0.704046428203583\n             ,-0.322424083948135,-0.640371739864349,0.527525365352631,-0.558248162269592,-0.982470035552979,0.0214608013629913\n             ,-0.185180932283401,0.859614074230194,0.295270681381226,-0.416987895965576,0.727284967899323,0.664062142372131\n             ,-0.173430144786835,0.739424109458923,0.592256605625153,0.320131361484528,0.480490952730179,0.872772097587585\n             ,-0.0860075280070305,-0.440291285514832,0.870396435260773,0.220348998904228,-0.696859955787659,0.71514618396759\n             ,-0.0543340221047401,0.480490952730179,0.872772097587585,-0.0860075280070305,0.739424109458923,0.592256605625153\n             ,0.320131361484528,0.727284967899323,0.664062142372131,-0.173430144786835,0.859614074230194,0.295270681381226\n             ,-0.416987895965576,0.95859158039093,0.227282658219337,-0.171594634652138,0.452183425426483,0.585657775402069\n             ,-0.672707319259644,0.663050174713135,0.587917149066925,-0.463376611471176,0.618651807308197,0.59744918346405\n             ,-0.510219931602478,0.606457710266113,0.614539504051209,-0.504529714584351,0.818660914897919,0.313737779855728\n             ,-0.481002062559128,0.726223528385162,0.613508462905884,-0.310172140598297,0.668675601482391,0.60236382484436\n             ,-0.435925096273422,0.818660914897919,0.313737779855728,-0.481002062559128,0.837498724460602,0.478580474853516\n             ,-0.263735711574554,0.618651807308197,0.59744918346405,-0.510219931602478,0.266915023326874,0.622528493404388\n             ,-0.735672950744629,0.107837736606598,0.170556277036667,-0.979429244995117,0.606457710266113,0.614539504051209\n             ,-0.504529714584351,-0.745452880859375,0.509112060070038,-0.430238157510757,0.107837736606598,0.170556277036667\n             ,-0.979429244995117,-0.112059034407139,0.629188656806946,-0.769132256507874,-0.907228708267212,0.420285493135452\n             ,-0.0172105636447668,0.760291457176209,0.640448451042175,-0.108548037707806,0.754503428936005,0.630674540996552\n             ,-0.181587845087051,0.837498724460602,0.478580474853516,-0.263735711574554,0.913363456726074,0.407031029462814\n             ,0.00964442919939756,0.786859929561615,0.489207118749619,-0.376201838254929,0.760291457176209,0.640448451042175\n             ,-0.108548037707806,0.913363456726074,0.407031029462814,0.00964442919939756,0.95859158039093,0.227282658219337\n             ,-0.171594634652138,-0.793882787227631,0.349916815757751,-0.497301042079926,0.859614074230194,0.295270681381226\n             ,-0.416987895965576,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.615352869033813,0.61141961812973\n             ,-0.497500658035278,-0.542121350765228,0.80557918548584,0.239053606987,0.618651807308197,0.59744918346405,-0.510219931602478\n             ,0.663050174713135,0.587917149066925,-0.463376611471176,-0.545656681060791,0.805297791957855,0.23184959590435\n             ,-0.567242085933685,0.801439464092255,0.189555287361145,0.668675601482391,0.60236382484436,-0.435925096273422\n             ,0.726223528385162,0.613508462905884,-0.310172140598297,-0.613154649734497,0.784870028495789,0.0895571559667587\n             ,-0.613154649734497,0.784870028495789,0.0895571559667587,0.726223528385162,0.613508462905884,-0.310172140598297\n             ,0.754503428936005,0.630674540996552,-0.181587845087051,-0.63306587934494,0.773617923259735,-0.0272569861263037\n             ,-0.672253370285034,0.372103184461594,-0.640011370182037,0.739069283008575,0.399415373802185,-0.542442619800568\n             ,0.859614074230194,0.295270681381226,-0.416987895965576,-0.793882787227631,0.349916815757751,-0.497301042079926\n             ,-0.640371739864349,0.527525365352631,-0.558248162269592,0.786859929561615,0.489207118749619,-0.376201838254929\n             ,0.739069283008575,0.399415373802185,-0.542442619800568,-0.672253370285034,0.372103184461594,-0.640011370182037\n             ,-0.252021908760071,0.83885395526886,0.482502818107605,0.266915023326874,0.622528493404388,-0.735672950744629\n             ,0.618651807308197,0.59744918346405,-0.510219931602478,-0.542121350765228,0.80557918548584,0.239053606987,0.134743452072144\n             ,0.77269721031189,0.620308935642242,-0.112059034407139,0.629188656806946,-0.769132256507874,0.266915023326874\n             ,0.622528493404388,-0.735672950744629,-0.252021908760071,0.83885395526886,0.482502818107605,-0.500255882740021\n             ,0.598247230052948,0.625974655151367,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.112059034407139\n             ,0.629188656806946,-0.769132256507874,0.134743452072144,0.77269721031189,0.620308935642242,-0.502963840961456\n             ,0.808468639850616,0.305623710155487,0.617954909801483,0.584929347038269,-0.525346875190735,0.668675601482391\n             ,0.60236382484436,-0.435925096273422,-0.567242085933685,0.801439464092255,0.189555287361145,-0.63306587934494\n             ,0.773617923259735,-0.0272569861263037,0.754503428936005,0.630674540996552,-0.181587845087051,0.760291457176209\n             ,0.640448451042175,-0.108548037707806,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.545656681060791\n             ,0.805297791957855,0.23184959590435,0.663050174713135,0.587917149066925,-0.463376611471176,0.617954909801483\n             ,0.584929347038269,-0.525346875190735,-0.502963840961456,0.808468639850616,0.305623710155487,-0.632741153240204\n             ,0.704046428203583,-0.322424083948135,0.760291457176209,0.640448451042175,-0.108548037707806,0.786859929561615\n             ,0.489207118749619,-0.376201838254929,-0.640371739864349,0.527525365352631,-0.558248162269592,0.134743452072144\n             ,0.77269721031189,0.620308935642242,0.142002120614052,0.141973868012428,0.979631960391998,-0.342477291822433\n             ,0.228350877761841,0.911353468894959,-0.500255882740021,0.598247230052948,0.625974655151367,-0.802371442317963\n             ,-0.439784169197083,-0.403472363948822,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.332114219665527\n             ,-0.935638904571533,-0.119498759508133,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.567457735538483\n             ,-0.508834183216095,-0.647363483905792,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.618749499320984\n             ,-0.411593735218048,-0.669133543968201,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.280504614114761\n             ,0.75769966840744,-0.58924388885498,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.679527759552002\n             ,0.357755899429321,-0.64050966501236,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.988875865936279\n             ,0.0939552411437035,-0.115312464535236,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.826611280441284\n             ,-0.0826262384653091,0.556674718856812,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.508872270584106\n             ,0.031244209036231,0.860274851322174,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.536516189575195\n             ,-0.591317057609558,0.602075219154358,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.987079083919525\n             ,-0.140233889222145,-0.0775200128555298,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.802422821521759\n             ,-0.594593703746796,-0.0507543347775936,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.916571378707886\n             ,-0.142677664756775,-0.373550534248352,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.982470035552979\n             ,0.0214608013629913,-0.185180932283401,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.793882787227631\n             ,0.349916815757751,-0.497301042079926,-0.88858425617218,0.0664631873369217,0.453872948884964,-0.914398610591888\n             ,-0.029835456982255,0.403714030981064,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.999095141887665\n             ,-0.00423012021929026,-0.0423198379576206,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.971041917800903\n             ,0.0163660850375891,-0.238347947597504,0.754503428936005,0.630674540996552,-0.181587845087051,0.726223528385162\n             ,0.613508462905884,-0.310172140598297,0.837498724460602,0.478580474853516,-0.263735711574554,0.739069283008575\n             ,0.399415373802185,-0.542442619800568,0.786859929561615,0.489207118749619,-0.376201838254929,0.95859158039093\n             ,0.227282658219337,-0.171594634652138,0.266915023326874,0.622528493404388,-0.735672950744629,-0.112059034407139\n             ,0.629188656806946,-0.769132256507874,0.107837736606598,0.170556277036667,-0.979429244995117,0.668675601482391\n             ,0.60236382484436,-0.435925096273422,0.617954909801483,0.584929347038269,-0.525346875190735,0.818660914897919\n             ,0.313737779855728,-0.481002062559128,0.663050174713135,0.587917149066925,-0.463376611471176,0.818660914897919\n             ,0.313737779855728,-0.481002062559128,0.617954909801483,0.584929347038269,-0.525346875190735,-0.615352869033813\n             ,0.61141961812973,-0.497500658035278,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.280504614114761\n             ,0.75769966840744,-0.58924388885498,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.982470035552979\n             ,0.0214608013629913,-0.185180932283401,-0.640371739864349,0.527525365352631,-0.558248162269592,0.739069283008575\n             ,0.399415373802185,-0.542442619800568,0.95859158039093,0.227282658219337,-0.171594634652138,0.859614074230194\n             ,0.295270681381226,-0.416987895965576,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.280504614114761\n             ,0.75769966840744,-0.58924388885498,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.961289465427399\n             ,-0.197325810790062,-0.192315071821213,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.999439835548401\n             ,-0.0108993193134665,-0.0316409841179848,-0.128415614366531,0.132796317338943,0.982789158821106,-0.3530093729496\n             ,0.178218960762024,0.918489158153534,0.103712424635887,0.131697446107864,0.985849618911743,0.0677588582038879\n             ,0.127564132213593,0.989513099193573,-0.271919548511505,0.128996223211288,0.953635036945343,-0.128415614366531\n             ,0.132796317338943,0.982789158821106,0.0677588582038879,0.127564132213593,0.989513099193573,0.0673240348696709\n             ,0.131959661841393,0.988966166973114,0.107837736606598,0.170556277036667,-0.979429244995117,-0.745452880859375\n             ,0.509112060070038,-0.430238157510757,-0.394719243049622,0.916350066661835,0.0670766159892082,0.606457710266113\n             ,0.614539504051209,-0.504529714584351,0.606457710266113,0.614539504051209,-0.504529714584351,-0.394719243049622\n             ,0.916350066661835,0.0670766159892082,-0.514610290527344,0.855887234210968,0.0513155348598957,0.818660914897919\n             ,0.313737779855728,-0.481002062559128,0.818660914897919,0.313737779855728,-0.481002062559128,-0.514610290527344\n             ,0.855887234210968,0.0513155348598957,-0.0310307368636131,0.989131927490234,-0.14371882379055,0.837498724460602\n             ,0.478580474853516,-0.263735711574554,0.913363456726074,0.407031029462814,0.00964442919939756,0.837498724460602\n             ,0.478580474853516,-0.263735711574554,-0.0310307368636131,0.989131927490234,-0.14371882379055,-0.484726011753082\n             ,0.737569272518158,-0.470140665769577,0.95859158039093,0.227282658219337,-0.171594634652138,0.95859158039093\n             ,0.227282658219337,-0.171594634652138,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.6479212641716\n             ,0.534398972988129,-0.542785227298737,0.452183425426483,0.585657775402069,-0.672707319259644,0.452183425426483\n             ,0.585657775402069,-0.672707319259644,-0.6479212641716,0.534398972988129,-0.542785227298737,-0.621815145015717\n             ,0.744533002376556,-0.24293327331543,0.727284967899323,0.664062142372131,-0.173430144786835,0.727284967899323\n             ,0.664062142372131,-0.173430144786835,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.440291285514832\n             ,0.870396435260773,0.220348998904228,0.739424109458923,0.592256605625153,0.320131361484528,-0.960245311260223\n             ,-0.113252125680447,-0.255152612924576,-0.854438602924347,-0.0391707941889763,-0.518073618412018,-0.845922648906708\n             ,-0.233836725354195,-0.47930708527565,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.98088002204895\n             ,-0.192411512136459,-0.0291934106498957,-0.0231689736247063,-0.380177617073059,0.924623250961304,-0.109985366463661\n             ,-0.239039614796638,0.964760720729828,0.0760682299733162,-0.295749306678772,0.952232122421265,0.15866231918335\n             ,-0.379611045122147,0.91143935918808,0.52398556470871,-0.396742969751358,0.753680408000946,0.790293097496033\n             ,-0.395322471857071,0.468142062425613,0.755637884140015,-0.506735622882843,0.415006548166275,0.481494694948196\n             ,-0.484542727470398,0.730329513549805,0.871467053890228,-0.412256300449371,0.265687584877014,0.755637884140015\n             ,-0.506735622882843,0.415006548166275,0.790293097496033,-0.395322471857071,0.468142062425613,-0.716924250125885\n             ,-0.697136282920837,0.00454333378002048,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.815638482570648\n             ,-0.327178388834,0.477166801691055,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.632588505744934\n             ,-0.619191765785217,0.465224027633667,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.815638482570648\n             ,-0.327178388834,0.477166801691055,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.730245351791382\n             ,-0.126696899533272,0.671334207057953,0.184660375118256,-0.167485639452934,0.968426108360291,-0.326030820608139\n             ,-0.10023545473814,0.940030157566071,-0.378116965293884,-0.19206166267395,0.905615746974945,0.141510874032974\n             ,-0.212751299142838,0.9668048620224,0.641422510147095,-0.270272105932236,0.718004286289215,0.0331840701401234\n             ,-0.163069397211075,0.986056387424469,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.481494694948196\n             ,-0.484542727470398,0.730329513549805,0.817183673381805,-0.296553581953049,0.494233578443527,0.641422510147095\n             ,-0.270272105932236,0.718004286289215,0.481494694948196,-0.484542727470398,0.730329513549805,0.755637884140015\n             ,-0.506735622882843,0.415006548166275,0.92842835187912,-0.2966628074646,0.223633676767349,0.925617933273315,-0.33330973982811\n             ,0.179265230894089,0.755637884140015,-0.506735622882843,0.415006548166275,0.871467053890228,-0.412256300449371\n             ,0.265687584877014,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.965311110019684,-0.0178779885172844\n             ,-0.260489523410797,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.807790637016296,-0.143092095851898\n             ,-0.571838200092316,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.941830277442932,0.142349690198898\n             ,-0.30445408821106,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.785466253757477,-0.00865362863987684\n             ,-0.618843913078308,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.791375637054443,0.071151964366436\n             ,-0.607175409793854,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.883178770542145,0.174471154808998\n             ,-0.435379177331924,0.279067039489746,0.00181126198731363,0.960269927978516,-0.192327111959457,0.128940626978874\n             ,0.972822964191437,0.0315546318888664,0.227497383952141,0.973267316818237,0.421088457107544,0.0603364557027817\n             ,0.905010521411896,0.176409095525742,0.258731871843338,0.949703991413116,0.128309071063995,0.135050594806671\n             ,0.982495903968811,0.228005558252335,0.109595686197281,0.967472076416016,0.239963844418526,0.229667663574219\n             ,0.943223297595978,0.952021479606628,-0.172354578971863,0.252881437540054,0.951565146446228,-0.195825412869453\n             ,0.237015143036842,0.941856145858765,-0.193580731749535,0.27465158700943,0.931146800518036,-0.184283837676048\n             ,0.31465071439743,0.951565146446228,-0.195825412869453,0.237015143036842,0.98254132270813,-0.173451960086823\n             ,0.0672831237316132,0.987110912799835,-0.0946229994297028,0.129068180918694,0.941856145858765,-0.193580731749535\n             ,0.27465158700943,-0.114197492599487,0.229852318763733,0.966502368450165,-0.810181975364685,0.20594097673893\n             ,0.548811018466949,-0.743342161178589,-0.232909336686134,0.627053201198578,-0.328887611627579,-0.327985614538193\n             ,0.885583639144897,0.169450357556343,0.192077651619911,0.966639935970306,-0.114197492599487,0.229852318763733\n             ,0.966502368450165,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.200362399220467,-0.34291222691536\n             ,0.917750597000122,0.234150499105453,0.240436136722565,0.941999971866608,0.708682000637054,0.0549906380474567\n             ,0.703381717205048,0.421088457107544,0.0603364557027817,0.905010521411896,0.0315546318888664,0.227497383952141\n             ,0.973267316818237,0.383701860904694,0.4597148001194,0.800896465778351,0.307897627353668,0.368194788694382,0.877286553382874\n             ,0.176409095525742,0.258731871843338,0.949703991413116,0.239963844418526,0.229667663574219,0.943223297595978\n             ,0.96482926607132,0.118159219622612,0.23482520878315,0.931146800518036,-0.184283837676048,0.31465071439743,0.941856145858765\n             ,-0.193580731749535,0.27465158700943,0.974241256713867,0.0409249700605869,0.221763730049133,0.991360425949097\n             ,0.041219849139452,0.124520778656006,0.974241256713867,0.0409249700605869,0.221763730049133,0.941856145858765\n             ,-0.193580731749535,0.27465158700943,0.987110912799835,-0.0946229994297028,0.129068180918694,0.522907495498657\n             ,0.438181906938553,0.731139063835144,0.459321737289429,0.336945086717606,0.821882903575897,0.307897627353668\n             ,0.368194788694382,0.877286553382874,0.383701860904694,0.4597148001194,0.800896465778351,-0.730245351791382,-0.126696899533272\n             ,0.671334207057953,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.553619503974915,-0.0878534093499184\n             ,0.828122735023499,-0.405384927988052,-0.526269018650055,0.747465074062347,0.0315546318888664,0.227497383952141\n             ,0.973267316818237,0.537278115749359,0.0936880186200142,0.838185369968414,0.618959546089172,0.0886023566126823\n             ,0.780409336090088,0.234150499105453,0.240436136722565,0.941999971866608,-0.192327111959457,0.128940626978874\n             ,0.972822964191437,0.414723992347717,0.00967027805745602,0.909895896911621,0.537278115749359,0.0936880186200142\n             ,0.838185369968414,0.0315546318888664,0.227497383952141,0.973267316818237,-0.439218908548355,-0.51500540971756\n             ,-0.736108779907227,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.385900318622589,-0.542145550251007\n             ,-0.746430933475494,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.883931934833527,-0.461925148963928\n             ,-0.0727287381887436,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.437478572130203,-0.839489638805389\n             ,0.32228809595108,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.696337580680847,-0.401266604661942\n             ,0.595062255859375,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.437478572130203,-0.839489638805389\n             ,0.32228809595108,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.696337580680847,-0.401266604661942\n             ,0.595062255859375,-0.383682757616043,-0.370396196842194,0.845928013324738,0.0664144828915596,-0.803862929344177\n             ,0.591095209121704,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.127582266926765,-0.6490518450737\n             ,0.749969661235809,0.0995035693049431,-0.912259519100189,0.397343188524246,0.453684121370316,-0.692796587944031\n             ,0.560538649559021,-0.0757445394992828,-0.423881083726883,0.902545094490051,-0.248274028301239,-0.562410414218903\n             ,0.788704335689545,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.776257455348969,-0.559176445007324\n             ,0.291111826896667,-0.689171850681305,-0.406394809484482,0.599904477596283,0.0119833052158356,-0.684736132621765\n             ,0.728692531585693,-0.4933140873909,-0.832423627376556,0.252412617206573,-0.631964385509491,-0.724000751972198\n             ,0.276484966278076,-0.248274028301239,-0.562410414218903,0.788704335689545,0.588976085186005,-0.561100006103516\n             ,0.58161324262619,-0.405343025922775,-0.871097385883331,0.277284026145935,-0.4933140873909,-0.832423627376556\n             ,0.252412617206573,0.0119833052158356,-0.684736132621765,0.728692531585693,0.588976085186005,-0.561100006103516\n             ,0.58161324262619,0.80362457036972,-0.592847883701324,0.052143108099699,-0.182750031352043,-0.981905281543732\n             ,-0.0496434457600117,-0.405343025922775,-0.871097385883331,0.277284026145935,0.586520791053772,-0.278485208749771\n             ,-0.760551989078522,0.557888448238373,-0.237554967403412,-0.795190632343292,0.250409841537476,-0.715217471122742\n             ,-0.652502000331879,0.815547049045563,-0.485381871461868,-0.315099239349365,-0.439218908548355,-0.51500540971756\n             ,-0.736108779907227,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.115532882511616,-0.0797315537929535\n             ,-0.990098476409912,-0.38756388425827,0.403812289237976,-0.82869166135788,0.722857892513275,-0.480003207921982\n             ,-0.497064769268036,0.661856412887573,-0.0551184453070164,-0.747601568698883,0.557888448238373,-0.237554967403412\n             ,-0.795190632343292,0.586520791053772,-0.278485208749771,-0.760551989078522,-0.38756388425827,0.403812289237976\n             ,-0.82869166135788,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.0894739627838135,-0.183631375432014\n             ,-0.978914678096771,-0.0492830350995064,-0.186444014310837,-0.981228709220886,0.733602523803711,0.10412222892046\n             ,-0.671554863452911,0.827176570892334,0.131099432706833,-0.546435594558716,0.785422801971436,0.0201532933861017\n             ,-0.618631482124329,0.733602523803711,0.10412222892046,-0.671554863452911,0.784134984016418,-0.509350836277008\n             ,-0.354533582925797,0.873561680316925,0.247193098068237,-0.419267863035202,0.827176570892334,0.131099432706833\n             ,-0.546435594558716,0.313923090696335,0.485718756914139,-0.815799951553345,0.310650020837784,0.28316468000412\n             ,-0.907366693019867,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.0705952271819115,0.538945734500885\n             ,-0.839377045631409,0.163023561239243,0.98268049955368,-0.0881040766835213,-0.237061515450478,0.971401154994965\n             ,-0.0134798940271139,0.24549475312233,0.895091116428375,0.372215270996094,0.460725337266922,0.860505640506744\n             ,0.217398658394814,0.611826419830322,0.748416423797607,0.256010234355927,0.461327522993088,0.762120604515076\n             ,0.454256683588028,0.551901042461395,0.718475461006165,0.423318117856979,0.692905008792877,0.710618555545807\n             ,0.122081570327282,0.692905008792877,0.710618555545807,0.122081570327282,0.551901042461395,0.718475461006165\n             ,0.423318117856979,0.744250357151031,0.605297327041626,0.282323569059372,0.765731871128082,0.635692894458771\n             ,-0.0977200418710709,0.72797954082489,0.659762263298035,-0.1864393055439,0.727798700332642,0.645059943199158\n             ,-0.232823416590691,0.737480342388153,0.641140997409821,0.212275862693787,0.749618530273438,0.631173431873322\n             ,0.199228778481483,0.72797954082489,0.659762263298035,-0.1864393055439,0.749618530273438,0.631173431873322,0.199228778481483\n             ,0.857426404953003,0.506103038787842,0.0931651070713997,0.787813723087311,0.593129634857178,-0.165972396731377\n             ,-0.383682757616043,-0.370396196842194,0.845928013324738,-0.0757445394992828,-0.423881083726883,0.902545094490051\n             ,0.453684121370316,-0.692796587944031,0.560538649559021,0.0664144828915596,-0.803862929344177,0.591095209121704\n             ,-0.689171850681305,-0.406394809484482,0.599904477596283,-0.877826690673828,-0.373566150665283,0.299780994653702\n             ,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.419215679168701,-0.523534297943115,0.741734504699707\n             ,-0.845922648906708,-0.233836725354195,-0.47930708527565,-0.854438602924347,-0.0391707941889763,-0.518073618412018\n             ,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.385900318622589,-0.542145550251007,-0.746430933475494\n             ,-0.437478572130203,-0.839489638805389,0.32228809595108,-0.905556201934814,-0.270013034343719,0.327201753854752\n             ,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.495511651039124,-0.864618480205536,-0.0830851569771767\n             ,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.780203819274902,-0.321271508932114,0.536718428134918\n             ,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.437478572130203,-0.839489638805389,0.32228809595108\n             ,0.0664144828915596,-0.803862929344177,0.591095209121704,-0.485520303249359,-0.413982003927231,0.769992828369141\n             ,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.295072466135025,-0.836212396621704,0.462256520986557\n             ,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.188842684030533,-0.479351043701172,0.857065320014954\n             ,0.453684121370316,-0.692796587944031,0.560538649559021,0.0995035693049431,-0.912259519100189,0.397343188524246\n             ,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.877826690673828,-0.373566150665283,0.299780994653702\n             ,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.187207087874413,-0.466673582792282,0.864389538764954\n             ,0.215633437037468,-0.617008090019226,0.756837606430054,-0.0384488701820374,-0.525311648845673,0.850040793418884\n             ,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.4933140873909,-0.832423627376556,0.252412617206573\n             ,0.505574882030487,-0.704972505569458,0.497401028871536,0.215633437037468,-0.617008090019226,0.756837606430054\n             ,-0.4933140873909,-0.832423627376556,0.252412617206573,-0.405343025922775,-0.871097385883331,0.277284026145935\n             ,0.648859202861786,-0.732072532176971,0.207488730549812,0.505574882030487,-0.704972505569458,0.497401028871536\n             ,-0.405343025922775,-0.871097385883331,0.277284026145935,-0.182750031352043,-0.981905281543732,-0.0496434457600117\n             ,0.557888448238373,-0.237554967403412,-0.795190632343292,0.913924276828766,-0.399497181177139,-0.0717244148254395\n             ,0.724748253822327,-0.680762588977814,-0.106311939656734,0.250409841537476,-0.715217471122742,-0.652502000331879\n             ,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.854438602924347,-0.0391707941889763,-0.518073618412018\n             ,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.115532882511616,-0.0797315537929535,-0.990098476409912\n             ,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.0816480964422226,-0.362786769866943,0.928288400173187\n             ,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.584700465202332,-0.0801375582814217,0.80728143453598\n             ,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.913924276828766,-0.399497181177139,-0.0717244148254395\n             ,0.557888448238373,-0.237554967403412,-0.795190632343292,0.661856412887573,-0.0551184453070164,-0.747601568698883\n             ,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.822551071643829,-0.00935472548007965,-0.568614363670349\n             ,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.0894739627838135,-0.183631375432014,-0.978914678096771\n             ,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.0854111611843109,-0.252843081951141,-0.963729918003082\n             ,-0.0894739627838135,-0.183631375432014,-0.978914678096771,-0.806990265846252,-0.00711527280509472,-0.590521931648254\n             ,-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.791375637054443,0.071151964366436,-0.607175409793854\n             ,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.12953394651413,0.104335330426693,-0.986070513725281\n             ,0.827176570892334,0.131099432706833,-0.546435594558716,0.987110912799835,-0.0946229994297028,0.129068180918694\n             ,0.98254132270813,-0.173451960086823,0.0672831237316132,0.785422801971436,0.0201532933861017,-0.618631482124329\n             ,0.873561680316925,0.247193098068237,-0.419267863035202,0.991360425949097,0.041219849139452,0.124520778656006\n             ,0.987110912799835,-0.0946229994297028,0.129068180918694,0.827176570892334,0.131099432706833,-0.546435594558716\n             ,-0.751268684864044,0.274677604436874,-0.60012298822403,-0.780570030212402,0.394561380147934,-0.484800666570663\n             ,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.0699166879057884,0.326290905475616,-0.942680180072784\n             ,-0.816423416137695,0.517423629760742,0.256369888782501,-0.317345827817917,0.649519979953766,0.69095253944397\n             ,0.24549475312233,0.895091116428375,0.372215270996094,-0.237061515450478,0.971401154994965,-0.0134798940271139\n             ,-0.0108341164886951,0.764748215675354,0.644238173961639,0.533803761005402,0.725452780723572,0.434478789567947\n             ,0.551901042461395,0.718475461006165,0.423318117856979,0.461327522993088,0.762120604515076,0.454256683588028\n             ,0.533803761005402,0.725452780723572,0.434478789567947,0.713100373744965,0.617973983287811,0.331052958965302\n             ,0.744250357151031,0.605297327041626,0.282323569059372,0.551901042461395,0.718475461006165,0.423318117856979\n             ,0.744611740112305,0.447527796030045,0.495249718427658,0.514605224132538,0.383560210466385,0.766852676868439\n             ,0.749618530273438,0.631173431873322,0.199228778481483,0.737480342388153,0.641140997409821,0.212275862693787\n             ,0.514605224132538,0.383560210466385,0.766852676868439,0.787412106990814,0.238013699650764,0.568622589111328\n             ,0.857426404953003,0.506103038787842,0.0931651070713997,0.749618530273438,0.631173431873322,0.199228778481483\n             ,0.976662814617157,0.0512243360280991,0.208580628037453,0.972417175769806,0.114111065864563,0.203429251909256\n             ,0.990084290504456,0.101971529424191,0.0966169014573097,0.989238142967224,-0.144198939204216,-0.0247913636267185\n             ,0.972417175769806,0.114111065864563,0.203429251909256,0.976662814617157,0.0512243360280991,0.208580628037453\n             ,0.942203402519226,0.0765308514237404,0.326183587312698,0.936010003089905,0.160365864634514,0.313317894935608\n             ,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.528048157691956,-0.00915560126304626,0.849165081977844\n             ,-0.460758477449417,0.108215481042862,0.880903542041779,-0.120599381625652,0.0903127938508987,0.988584518432617\n             ,0.453684121370316,-0.692796587944031,0.560538649559021,-0.188842684030533,-0.479351043701172,0.857065320014954\n             ,-0.485520303249359,-0.413982003927231,0.769992828369141,0.0664144828915596,-0.803862929344177,0.591095209121704\n             ,0.243934661149979,-0.119537994265556,0.962396264076233,-0.309459805488586,0.0171791967004538,0.950757324695587\n             ,-0.192327111959457,0.128940626978874,0.972822964191437,0.279067039489746,0.00181126198731363,0.960269927978516\n             ,0.204974547028542,-0.221624046564102,0.953345775604248,-0.326030820608139,-0.10023545473814,0.940030157566071\n             ,-0.309459805488586,0.0171791967004538,0.950757324695587,0.243934661149979,-0.119537994265556,0.962396264076233\n             ,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.378116965293884,-0.19206166267395,0.905615746974945\n             ,-0.326030820608139,-0.10023545473814,0.940030157566071,0.204974547028542,-0.221624046564102,0.953345775604248\n             ,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.322146862745285,-0.331865698099136,0.886615216732025\n             ,-0.378116965293884,-0.19206166267395,0.905615746974945,-0.552228093147278,-0.748099327087402,0.367955982685089\n             ,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.760540843009949,0.00420303363353014,-0.649276435375214\n             ,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.728761196136475,-0.219147056341171,-0.648753881454468\n             ,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.0854111611843109,-0.252843081951141,-0.963729918003082\n             ,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.797997057437897,0.0611037090420723,-0.599555671215057\n             ,-0.0222479663789272,-0.27899968624115,-0.960033416748047,-0.0854111611843109,-0.252843081951141,-0.963729918003082\n             ,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.809815943241119,-0.0024391699116677,-0.586678981781006\n             ,0.936010003089905,0.160365864634514,0.313317894935608,0.913795173168182,0.295857787132263,0.278292179107666\n             ,0.974241256713867,0.0409249700605869,0.221763730049133,0.972417175769806,0.114111065864563,0.203429251909256\n             ,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.725508868694305,-0.0050850510597229,-0.68819397687912\n             ,0.785422801971436,0.0201532933861017,-0.618631482124329,0.98254132270813,-0.173451960086823,0.0672831237316132\n             ,0.501740634441376,-0.243245840072632,0.830113112926483,0.549654603004456,-0.190786004066467,0.8133145570755\n             ,-0.129216328263283,-0.0478254519402981,0.990462481975555,-0.159226596355438,-0.153975084424019,0.975160777568817\n             ,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.631689548492432,-0.334710896015167,0.699240267276764\n             ,-0.333558112382889,-0.317182183265686,0.887769341468811,-0.395515620708466,-0.150387838482857,0.906063437461853\n             ,0.141510874032974,-0.212751299142838,0.9668048620224,-0.378116965293884,-0.19206166267395,0.905615746974945\n             ,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.776257455348969,-0.559176445007324,0.291111826896667\n             ,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.689171850681305,-0.406394809484482,0.599904477596283\n             ,0.974241256713867,0.0409249700605869,0.221763730049133,0.991360425949097,0.041219849139452,0.124520778656006\n             ,0.990084290504456,0.101971529424191,0.0966169014573097,0.972417175769806,0.114111065864563,0.203429251909256\n             ,-0.120599381625652,0.0903127938508987,0.988584518432617,-0.460758477449417,0.108215481042862,0.880903542041779\n             ,-0.565971076488495,0.169359281659126,0.806842088699341,-0.3249591588974,0.21022142469883,0.922067523002625,-0.778803586959839\n             ,0.240923523902893,0.579155206680298,-0.509689390659332,0.284962147474289,0.811796367168427,-0.3249591588974\n             ,0.21022142469883,0.922067523002625,-0.565971076488495,0.169359281659126,0.806842088699341,-0.317345827817917\n             ,0.649519979953766,0.69095253944397,-0.0108341164886951,0.764748215675354,0.644238173961639,0.461327522993088\n             ,0.762120604515076,0.454256683588028,0.24549475312233,0.895091116428375,0.372215270996094,0.460725337266922,0.860505640506744\n             ,0.217398658394814,0.24549475312233,0.895091116428375,0.372215270996094,0.461327522993088,0.762120604515076,0.454256683588028\n             ,0.611826419830322,0.748416423797607,0.256010234355927,0.931353688240051,0.363742500543594,0.0164845213294029\n             ,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.725508868694305,-0.0050850510597229,-0.68819397687912\n             ,0.661856412887573,-0.0551184453070164,-0.747601568698883,0.722857892513275,-0.480003207921982,-0.497064769268036\n             ,0.725508868694305,-0.0050850510597229,-0.68819397687912,0.987223386764526,-0.158934772014618,-0.0113900080323219\n             ,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.661856412887573,-0.0551184453070164,-0.747601568698883\n             ,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.987223386764526,-0.158934772014618,-0.0113900080323219\n             ,0.967770040035248,-0.190110430121422,0.165164038538933,0.92842835187912,-0.2966628074646,0.223633676767349,0.967770040035248\n             ,-0.190110430121422,0.165164038538933,0.969397664070129,-0.16740058362484,0.179569631814957,0.925617933273315\n             ,-0.33330973982811,0.179265230894089,0.92842835187912,-0.2966628074646,0.223633676767349,0.817183673381805,-0.296553581953049\n             ,0.494233578443527,0.858429610729218,-0.151253923773766,0.490123331546783,0.736215591430664,-0.133181810379028\n             ,0.663512766361237,0.641422510147095,-0.270272105932236,0.718004286289215,0.641422510147095,-0.270272105932236\n             ,0.718004286289215,0.736215591430664,-0.133181810379028,0.663512766361237,0.15244060754776,-0.0132473884150386\n             ,0.988223850727081,0.0331840701401234,-0.163069397211075,0.986056387424469,0.27410614490509,-0.107289530336857\n             ,0.955695986747742,-0.309459805488586,0.0171791967004538,0.950757324695587,-0.326030820608139,-0.10023545473814\n             ,0.940030157566071,0.184660375118256,-0.167485639452934,0.968426108360291,-0.528048157691956,-0.00915560126304626\n             ,0.849165081977844,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.0752630904316902,-0.163290411233902\n             ,0.983703076839447,-0.584700465202332,-0.0801375582814217,0.80728143453598,-0.0894739627838135,-0.183631375432014\n             ,-0.978914678096771,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.0222479663789272,-0.27899968624115\n             ,-0.960033416748047,-0.0492830350995064,-0.186444014310837,-0.981228709220886,-0.495511651039124,-0.864618480205536\n             ,-0.0830851569771767,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.845922648906708,-0.233836725354195\n             ,-0.47930708527565,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.757972836494446,-0.133171454071999\n             ,-0.63854718208313,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.495511651039124,-0.864618480205536\n             ,-0.0830851569771767,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.182750031352043,-0.981905281543732\n             ,-0.0496434457600117,0.80362457036972,-0.592847883701324,0.052143108099699,0.815547049045563,-0.485381871461868\n             ,-0.315099239349365,0.250409841537476,-0.715217471122742,-0.652502000331879,0.724748253822327,-0.680762588977814\n             ,-0.106311939656734,0.648859202861786,-0.732072532176971,0.207488730549812,-0.182750031352043,-0.981905281543732\n             ,-0.0496434457600117,0.250409841537476,-0.715217471122742,-0.652502000331879,0.876565277576447,0.158835455775261\n             ,0.4543177485466,0.81756728887558,0.216796487569809,0.533463180065155,0.744038224220276,-0.0333225503563881,0.667305529117584\n             ,0.807695090770721,-0.134995654225349,0.573938012123108,-0.129216328263283,-0.0478254519402981,0.990462481975555\n             ,0.549654603004456,-0.190786004066467,0.8133145570755,0.611190438270569,0.347120821475983,0.711303949356079,0.110788695514202\n             ,0.611092865467072,0.783767402172089,-0.251838445663452,-0.440982908010483,0.861458897590637,0.337114036083221\n             ,-0.517145156860352,0.786711513996124,0.69356244802475,0.349522531032562,0.629924654960632,0.179207041859627\n             ,0.602162182331085,0.778000950813293,0.840604901313782,-0.077635869383812,0.536056041717529,0.169450357556343\n             ,0.192077651619911,0.966639935970306,-0.200362399220467,-0.34291222691536,0.917750597000122,0.417133778333664\n             ,-0.483815759420395,0.769364476203918,0.713100373744965,0.617973983287811,0.331052958965302,0.744611740112305\n             ,0.447527796030045,0.495249718427658,0.737480342388153,0.641140997409821,0.212275862693787,0.744250357151031\n             ,0.605297327041626,0.282323569059372,0.727798700332642,0.645059943199158,-0.232823416590691,0.765731871128082\n             ,0.635692894458771,-0.0977200418710709,0.744250357151031,0.605297327041626,0.282323569059372,0.737480342388153\n             ,0.641140997409821,0.212275862693787,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.733602523803711\n             ,0.10412222892046,-0.671554863452911,0.785422801971436,0.0201532933861017,-0.618631482124329,0.725508868694305\n             ,-0.0050850510597229,-0.68819397687912,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.98254132270813\n             ,-0.173451960086823,0.0672831237316132,0.951565146446228,-0.195825412869453,0.237015143036842,0.967770040035248\n             ,-0.190110430121422,0.165164038538933,0.967770040035248,-0.190110430121422,0.165164038538933,0.951565146446228\n             ,-0.195825412869453,0.237015143036842,0.952021479606628,-0.172354578971863,0.252881437540054,0.969397664070129\n             ,-0.16740058362484,0.179569631814957,0.15244060754776,-0.0132473884150386,0.988223850727081,0.228005558252335\n             ,0.109595686197281,0.967472076416016,0.128309071063995,0.135050594806671,0.982495903968811,-0.00481649860739708\n             ,-0.00974023062735796,0.999940991401672,0.414723992347717,0.00967027805745602,0.909895896911621,-0.192327111959457\n             ,0.128940626978874,0.972822964191437,-0.309459805488586,0.0171791967004538,0.950757324695587,0.27410614490509\n             ,-0.107289530336857,0.955695986747742,-0.460758477449417,0.108215481042862,0.880903542041779,-0.709648728370667\n             ,-0.32101958990097,0.627172350883484,-0.471319168806076,0.566682040691376,0.675817847251892,-0.565971076488495\n             ,0.169359281659126,0.806842088699341,-0.471319168806076,0.566682040691376,0.675817847251892,0.179207041859627\n             ,0.602162182331085,0.778000950813293,-0.24122528731823,-0.215426832437515,0.946256637573242,-0.565971076488495\n             ,0.169359281659126,0.806842088699341,-0.251838445663452,-0.440982908010483,0.861458897590637,-0.0749797448515892\n             ,0.161466658115387,0.984025657176971,0.279067039489746,0.00181126198731363,0.960269927978516,0.337114036083221\n             ,-0.517145156860352,0.786711513996124,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.743342161178589\n             ,-0.232909336686134,0.627053201198578,-0.565971076488495,0.169359281659126,0.806842088699341,-0.24122528731823\n             ,-0.215426832437515,0.946256637573242,-0.565971076488495,0.169359281659126,0.806842088699341,-0.743342161178589\n             ,-0.232909336686134,0.627053201198578,-0.810181975364685,0.20594097673893,0.548811018466949,-0.778803586959839\n             ,0.240923523902893,0.579155206680298,-0.200362399220467,-0.34291222691536,0.917750597000122,-0.24122528731823\n             ,-0.215426832437515,0.946256637573242,0.421088457107544,0.0603364557027817,0.905010521411896,0.417133778333664\n             ,-0.483815759420395,0.769364476203918,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.382766902446747\n             ,0.693923592567444,0.609884858131409,0.353388279676437,0.625863969326019,0.695277690887451,0.533803761005402\n             ,0.725452780723572,0.434478789567947,0.533803761005402,0.725452780723572,0.434478789567947,0.353388279676437\n             ,0.625863969326019,0.695277690887451,0.596079111099243,0.546218872070313,0.588502049446106,0.713100373744965\n             ,0.617973983287811,0.331052958965302,-0.509491384029388,0.564497232437134,0.649431586265564,-0.460758477449417\n             ,0.108215481042862,0.880903542041779,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.778017282485962\n             ,0.0114750172942877,0.628138065338135,0.501740634441376,-0.243245840072632,0.830113112926483,0.204974547028542\n             ,-0.221624046564102,0.953345775604248,0.243934661149979,-0.119537994265556,0.962396264076233,0.549654603004456\n             ,-0.190786004066467,0.8133145570755,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.713192403316498\n             ,-0.572692215442657,0.404203116893768,-0.801663935184479,-0.0182420816272497,0.597496509552002,-0.584700465202332\n             ,-0.0801375582814217,0.80728143453598,0.204974547028542,-0.221624046564102,0.953345775604248,0.501740634441376\n             ,-0.243245840072632,0.830113112926483,0.274976700544357,-0.741329073905945,0.612224638462067,-0.552228093147278\n             ,-0.748099327087402,0.367955982685089,-0.552228093147278,-0.748099327087402,0.367955982685089,0.274976700544357\n             ,-0.741329073905945,0.612224638462067,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.164029136300087\n             ,-0.974515855312347,-0.15301413834095,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.528048157691956\n             ,-0.00915560126304626,0.849165081977844,-0.584700465202332,-0.0801375582814217,0.80728143453598,-0.801663935184479\n             ,-0.0182420816272497,0.597496509552002,0.549654603004456,-0.190786004066467,0.8133145570755,0.243934661149979\n             ,-0.119537994265556,0.962396264076233,0.279067039489746,0.00181126198731363,0.960269927978516,0.611190438270569\n             ,0.347120821475983,0.711303949356079,0.110788695514202,0.611092865467072,0.783767402172089,0.611190438270569\n             ,0.347120821475983,0.711303949356079,0.279067039489746,0.00181126198731363,0.960269927978516,-0.0749797448515892\n             ,0.161466658115387,0.984025657176971,0.69356244802475,0.349522531032562,0.629924654960632,0.421088457107544,0.0603364557027817\n             ,0.905010521411896,-0.24122528731823,-0.215426832437515,0.946256637573242,0.179207041859627,0.602162182331085\n             ,0.778000950813293,0.421088457107544,0.0603364557027817,0.905010521411896,0.69356244802475,0.349522531032562\n             ,0.629924654960632,0.337114036083221,-0.517145156860352,0.786711513996124,0.279067039489746,0.00181126198731363\n             ,0.960269927978516,0.708682000637054,0.0549906380474567,0.703381717205048,0.840604901313782,-0.077635869383812\n             ,0.536056041717529,0.417133778333664,-0.483815759420395,0.769364476203918,0.421088457107544,0.0603364557027817\n             ,0.905010521411896,0.713100373744965,0.617973983287811,0.331052958965302,0.596079111099243,0.546218872070313\n             ,0.588502049446106,0.924569427967072,0.246832609176636,0.290249824523926,0.744611740112305,0.447527796030045\n             ,0.495249718427658,0.274976700544357,-0.741329073905945,0.612224638462067,0.501740634441376,-0.243245840072632\n             ,0.830113112926483,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.23681703209877,-0.796483516693115\n             ,0.556355774402618,-0.419215679168701,-0.523534297943115,0.741734504699707,-0.552228093147278,-0.748099327087402\n             ,0.367955982685089,-0.164029136300087,-0.974515855312347,-0.15301413834095,-0.261260628700256,-0.761488914489746\n             ,0.593192636966705,-0.706475257873535,0.284995973110199,0.647819399833679,-0.768386900424957,0.31679978966713\n             ,0.556075036525726,-0.617434501647949,0.298396319150925,0.727828443050385,-0.471209764480591,0.287038415670395\n             ,0.834008574485779,-0.485232472419739,0.239207372069359,0.84102874994278,-0.566947221755981,0.26147249341011\n             ,0.781154930591583,-0.551642179489136,0.164528906345367,0.817692577838898,-0.439302027225494,0.130682304501534\n             ,0.888783395290375,-0.439302027225494,0.130682304501534,0.888783395290375,-0.551642179489136,0.164528906345367\n             ,0.817692577838898,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.38883912563324,0.0112887192517519\n             ,0.921236515045166,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.38883912563324,0.0112887192517519\n             ,0.921236515045166,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.553619503974915,-0.0878534093499184\n             ,0.828122735023499,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.477214306592941,-0.241928458213806\n             ,0.844829678535461,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.333558112382889,-0.317182183265686\n             ,0.887769341468811,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.660951018333435,-0.242743968963623\n             ,0.710083901882172,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.333558112382889,-0.317182183265686\n             ,0.887769341468811,-0.815638482570648,-0.327178388834,0.477166801691055,-0.836283564567566,-0.213887989521027\n             ,0.504858076572418,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.631689548492432,-0.334710896015167\n             ,0.699240267276764,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.952340602874756,-0.189112782478333\n             ,0.239340081810951,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.815638482570648,-0.327178388834\n             ,0.477166801691055,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.98088002204895,-0.192411512136459\n             ,-0.0291934106498957,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.965311110019684,-0.0178779885172844\n             ,-0.260489523410797,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.960245311260223,-0.113252125680447\n             ,-0.255152612924576,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.97038471698761,0.0723681449890137\n             ,-0.230469912290573,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.939613878726959,-0.00117565772961825\n             ,-0.342234462499619,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.97038471698761,0.0723681449890137\n             ,-0.230469912290573,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.916346251964569,0.129433929920197\n             ,-0.378888338804245,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.916346251964569,0.129433929920197\n             ,-0.378888338804245,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.728761196136475,-0.219147056341171\n             ,-0.648753881454468,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.911869525909424,0.153217226266861\n             ,-0.380812793970108,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.939192354679108,0.142906233668327\n             ,-0.312242686748505,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.883178770542145,0.174471154808998\n             ,-0.435379177331924,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.905240058898926,0.247854217886925\n             ,-0.345121324062347,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.751268684864044,0.274677604436874\n             ,-0.60012298822403,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.952340602874756,-0.189112782478333\n             ,0.239340081810951,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.947529137134552,-0.270958930253983\n             ,-0.16961669921875,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.35503289103508,-0.122166983783245\n             ,0.926837027072906,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.333558112382889,-0.317182183265686\n             ,0.887769341468811,0.0331840701401234,-0.163069397211075,0.986056387424469,0.15244060754776,-0.0132473884150386\n             ,0.988223850727081,-0.00481649860739708,-0.00974023062735796,0.999940991401672,-0.125947520136833,-0.109786510467529\n             ,0.985943257808685,0.0331840701401234,-0.163069397211075,0.986056387424469,-0.125947520136833,-0.109786510467529\n             ,0.985943257808685,-0.109985366463661,-0.239039614796638,0.964760720729828,-0.0231689736247063,-0.380177617073059\n             ,0.924623250961304,0.936010003089905,0.160365864634514,0.313317894935608,0.942203402519226,0.0765308514237404\n             ,0.326183587312698,0.888628959655762,0.438762068748474,0.133515372872353,0.886933207511902,0.205319285392761\n             ,0.413755267858505,0.876565277576447,0.158835455775261,0.4543177485466,0.913795173168182,0.295857787132263,0.278292179107666\n             ,0.839090466499329,0.267581433057785,0.473632037639618,0.81756728887558,0.216796487569809,0.533463180065155,0.835870265960693\n             ,-0.162916868925095,0.524193644523621,0.807695090770721,-0.134995654225349,0.573938012123108,0.744038224220276\n             ,-0.0333225503563881,0.667305529117584,0.754620671272278,-0.10168993473053,0.648233592510223,0.835870265960693\n             ,-0.162916868925095,0.524193644523621,0.754620671272278,-0.10168993473053,0.648233592510223,0.736215591430664\n             ,-0.133181810379028,0.663512766361237,0.858429610729218,-0.151253923773766,0.490123331546783,0.886933207511902\n             ,0.205319285392761,0.413755267858505,0.888628959655762,0.438762068748474,0.133515372872353,0.884826481342316\n             ,0.464208155870438,0.0399109348654747,0.7496537566185,0.27985754609108,0.599749088287354,0.81756728887558,0.216796487569809\n             ,0.533463180065155,0.839090466499329,0.267581433057785,0.473632037639618,0.522907495498657,0.438181906938553\n             ,0.731139063835144,0.383701860904694,0.4597148001194,0.800896465778351,0.744038224220276,-0.0333225503563881\n             ,0.667305529117584,0.81756728887558,0.216796487569809,0.533463180065155,0.383701860904694,0.4597148001194,0.800896465778351\n             ,0.239963844418526,0.229667663574219,0.943223297595978,0.228005558252335,0.109595686197281,0.967472076416016\n             ,0.754620671272278,-0.10168993473053,0.648233592510223,0.744038224220276,-0.0333225503563881,0.667305529117584\n             ,0.239963844418526,0.229667663574219,0.943223297595978,0.736215591430664,-0.133181810379028,0.663512766361237\n             ,0.754620671272278,-0.10168993473053,0.648233592510223,0.228005558252335,0.109595686197281,0.967472076416016\n             ,0.15244060754776,-0.0132473884150386,0.988223850727081,0.459321737289429,0.336945086717606,0.821882903575897\n             ,0.665011644363403,0.0966486409306526,0.740552842617035,0.307897627353668,0.368194788694382,0.877286553382874\n             ,0.925617933273315,-0.33330973982811,0.179265230894089,0.969397664070129,-0.16740058362484,0.179569631814957\n             ,0.858429610729218,-0.151253923773766,0.490123331546783,0.817183673381805,-0.296553581953049,0.494233578443527\n             ,0.969397664070129,-0.16740058362484,0.179569631814957,0.952021479606628,-0.172354578971863,0.252881437540054\n             ,0.835870265960693,-0.162916868925095,0.524193644523621,0.858429610729218,-0.151253923773766,0.490123331546783\n             ,0.835870265960693,-0.162916868925095,0.524193644523621,0.952021479606628,-0.172354578971863,0.252881437540054\n             ,0.931146800518036,-0.184283837676048,0.31465071439743,0.807695090770721,-0.134995654225349,0.573938012123108\n             ,0.876565277576447,0.158835455775261,0.4543177485466,0.807695090770721,-0.134995654225349,0.573938012123108,0.931146800518036\n             ,-0.184283837676048,0.31465071439743,0.96482926607132,0.118159219622612,0.23482520878315,0.913795173168182,0.295857787132263\n             ,0.278292179107666,0.876565277576447,0.158835455775261,0.4543177485466,0.96482926607132,0.118159219622612,0.23482520878315\n             ,0.925617933273315,-0.33330973982811,0.179265230894089,0.817183673381805,-0.296553581953049,0.494233578443527\n             ,0.755637884140015,-0.506735622882843,0.415006548166275,0.92842835187912,-0.2966628074646,0.223633676767349,0.871467053890228\n             ,-0.412256300449371,0.265687584877014,0.881475806236267,-0.330746680498123,0.337056457996368,0.881475806236267\n             ,-0.330746680498123,0.337056457996368,0.871467053890228,-0.412256300449371,0.265687584877014,0.790293097496033\n             ,-0.395322471857071,0.468142062425613,0.505574882030487,-0.704972505569458,0.497401028871536,0.648859202861786\n             ,-0.732072532176971,0.207488730549812,-0.3249591588974,0.21022142469883,0.922067523002625,-0.509689390659332\n             ,0.284962147474289,0.811796367168427,-0.706475257873535,0.284995973110199,0.647819399833679,-0.471209764480591\n             ,0.287038415670395,0.834008574485779,-0.485232472419739,0.239207372069359,0.84102874994278,-0.120599381625652\n             ,0.0903127938508987,0.988584518432617,-0.3249591588974,0.21022142469883,0.922067523002625,-0.485232472419739\n             ,0.239207372069359,0.84102874994278,-0.439302027225494,0.130682304501534,0.888783395290375,-0.0752630904316902\n             ,-0.163290411233902,0.983703076839447,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.38883912563324\n             ,0.0112887192517519,0.921236515045166,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.0816480964422226\n             ,-0.362786769866943,0.928288400173187,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.35503289103508\n             ,-0.122166983783245,0.926837027072906,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.188842684030533\n             ,-0.479351043701172,0.857065320014954,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.353479325771332\n             ,-0.210106566548347,0.911541342735291,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.485520303249359\n             ,-0.413982003927231,0.769992828369141,-0.188842684030533,-0.479351043701172,0.857065320014954,-0.477214306592941\n             ,-0.241928458213806,0.844829678535461,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.780203819274902\n             ,-0.321271508932114,0.536718428134918,-0.485520303249359,-0.413982003927231,0.769992828369141,-0.660951018333435\n             ,-0.242743968963623,0.710083901882172,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.905556201934814\n             ,-0.270013034343719,0.327201753854752,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.836283564567566\n             ,-0.213887989521027,0.504858076572418,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.966925442218781\n             ,-0.254910856485367,-0.00869623944163322,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.952340602874756\n             ,-0.189112782478333,0.239340081810951,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.883178770542145\n             ,0.174471154808998,-0.435379177331924,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.888693332672119\n             ,0.348883032798767,-0.297497481107712,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.916346251964569\n             ,0.129433929920197,-0.378888338804245,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.797997057437897\n             ,0.0611037090420723,-0.599555671215057,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.928009748458862\n             ,0.0632824525237083,-0.367142021656036,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.806906938552856\n             ,0.030128238722682,-0.589909672737122,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.939613878726959\n             ,-0.00117565772961825,-0.342234462499619,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.806990265846252\n             ,-0.00711527280509472,-0.590521931648254,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.960245311260223\n             ,-0.113252125680447,-0.255152612924576,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.822551071643829\n             ,-0.00935472548007965,-0.568614363670349,-0.854438602924347,-0.0391707941889763,-0.518073618412018,0.913924276828766\n             ,-0.399497181177139,-0.0717244148254395,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.92842835187912\n             ,-0.2966628074646,0.223633676767349,0.881475806236267,-0.330746680498123,0.337056457996368,0.648859202861786\n             ,-0.732072532176971,0.207488730549812,0.724748253822327,-0.680762588977814,-0.106311939656734,0.913924276828766\n             ,-0.399497181177139,-0.0717244148254395,0.881475806236267,-0.330746680498123,0.337056457996368,0.52398556470871\n             ,-0.396742969751358,0.753680408000946,0.215633437037468,-0.617008090019226,0.756837606430054,0.505574882030487\n             ,-0.704972505569458,0.497401028871536,0.790293097496033,-0.395322471857071,0.468142062425613,-0.0384488701820374\n             ,-0.525311648845673,0.850040793418884,0.215633437037468,-0.617008090019226,0.756837606430054,0.52398556470871\n             ,-0.396742969751358,0.753680408000946,0.15866231918335,-0.379611045122147,0.91143935918808,-0.0384488701820374\n             ,-0.525311648845673,0.850040793418884,-0.187207087874413,-0.466673582792282,0.864389538764954,-0.776257455348969\n             ,-0.559176445007324,0.291111826896667,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.187207087874413\n             ,-0.466673582792282,0.864389538764954,-0.0384488701820374,-0.525311648845673,0.850040793418884,0.15866231918335\n             ,-0.379611045122147,0.91143935918808,0.0760682299733162,-0.295749306678772,0.952232122421265,0.141510874032974\n             ,-0.212751299142838,0.9668048620224,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.187207087874413\n             ,-0.466673582792282,0.864389538764954,0.0760682299733162,-0.295749306678772,0.952232122421265,0.141510874032974\n             ,-0.212751299142838,0.9668048620224,0.0760682299733162,-0.295749306678772,0.952232122421265,-0.109985366463661\n             ,-0.239039614796638,0.964760720729828,0.184660375118256,-0.167485639452934,0.968426108360291,0.141510874032974\n             ,-0.212751299142838,0.9668048620224,-0.109985366463661,-0.239039614796638,0.964760720729828,-0.125947520136833\n             ,-0.109786510467529,0.985943257808685,0.27410614490509,-0.107289530336857,0.955695986747742,0.184660375118256\n             ,-0.167485639452934,0.968426108360291,-0.125947520136833,-0.109786510467529,0.985943257808685,-0.00481649860739708\n             ,-0.00974023062735796,0.999940991401672,0.414723992347717,0.00967027805745602,0.909895896911621,0.27410614490509\n             ,-0.107289530336857,0.955695986747742,-0.00481649860739708,-0.00974023062735796,0.999940991401672,0.128309071063995\n             ,0.135050594806671,0.982495903968811,0.537278115749359,0.0936880186200142,0.838185369968414,0.414723992347717\n             ,0.00967027805745602,0.909895896911621,0.128309071063995,0.135050594806671,0.982495903968811,0.176409095525742\n             ,0.258731871843338,0.949703991413116,0.665011644363403,0.0966486409306526,0.740552842617035,0.618959546089172\n             ,0.0886023566126823,0.780409336090088,0.537278115749359,0.0936880186200142,0.838185369968414,0.176409095525742\n             ,0.258731871843338,0.949703991413116,0.307897627353668,0.368194788694382,0.877286553382874,0.857426404953003\n             ,0.506103038787842,0.0931651070713997,0.787412106990814,0.238013699650764,0.568622589111328,0.7496537566185,0.27985754609108\n             ,0.599749088287354,0.884826481342316,0.464208155870438,0.0399109348654747,0.818305492401123,0.54065877199173\n             ,-0.195100545883179,0.787813723087311,0.593129634857178,-0.165972396731377,0.857426404953003,0.506103038787842\n             ,0.0931651070713997,0.884826481342316,0.464208155870438,0.0399109348654747,0.913795173168182,0.295857787132263\n             ,0.278292179107666,0.936010003089905,0.160365864634514,0.313317894935608,0.886933207511902,0.205319285392761\n             ,0.413755267858505,0.839090466499329,0.267581433057785,0.473632037639618,0.913795173168182,0.295857787132263\n             ,0.278292179107666,0.96482926607132,0.118159219622612,0.23482520878315,0.974241256713867,0.0409249700605869,0.221763730049133\n             ,-0.917055070400238,0.301483958959579,0.260993033647537,-0.898983955383301,0.272523552179337,0.342868447303772\n             ,-0.617434501647949,0.298396319150925,0.727828443050385,-0.768386900424957,0.31679978966713,0.556075036525726\n             ,-0.816423416137695,0.517423629760742,0.256369888782501,-0.911110818386078,0.327579766511917,0.250137090682983\n             ,-0.768386900424957,0.31679978966713,0.556075036525726,-0.706475257873535,0.284995973110199,0.647819399833679\n             ,-0.816423416137695,0.517423629760742,0.256369888782501,-0.706475257873535,0.284995973110199,0.647819399833679\n             ,-0.509689390659332,0.284962147474289,0.811796367168427,-0.317345827817917,0.649519979953766,0.69095253944397\n             ,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.317345827817917,0.649519979953766,0.69095253944397\n             ,-0.509689390659332,0.284962147474289,0.811796367168427,-0.778803586959839,0.240923523902893,0.579155206680298\n             ,-0.382766902446747,0.693923592567444,0.609884858131409,-0.0108341164886951,0.764748215675354,0.644238173961639\n             ,-0.778803586959839,0.240923523902893,0.579155206680298,-0.810181975364685,0.20594097673893,0.548811018466949\n             ,0.353388279676437,0.625863969326019,0.695277690887451,-0.382766902446747,0.693923592567444,0.609884858131409\n             ,-0.810181975364685,0.20594097673893,0.548811018466949,-0.114197492599487,0.229852318763733,0.966502368450165\n             ,0.596079111099243,0.546218872070313,0.588502049446106,0.353388279676437,0.625863969326019,0.695277690887451\n             ,-0.114197492599487,0.229852318763733,0.966502368450165,0.169450357556343,0.192077651619911,0.966639935970306\n             ,0.924569427967072,0.246832609176636,0.290249824523926,0.596079111099243,0.546218872070313,0.588502049446106\n             ,0.169450357556343,0.192077651619911,0.966639935970306,0.840604901313782,-0.077635869383812,0.536056041717529\n             ,0.744611740112305,0.447527796030045,0.495249718427658,0.924569427967072,0.246832609176636,0.290249824523926\n             ,0.840604901313782,-0.077635869383812,0.536056041717529,0.708682000637054,0.0549906380474567,0.703381717205048\n             ,0.514605224132538,0.383560210466385,0.766852676868439,0.744611740112305,0.447527796030045,0.495249718427658\n             ,0.708682000637054,0.0549906380474567,0.703381717205048,0.234150499105453,0.240436136722565,0.941999971866608\n             ,0.787412106990814,0.238013699650764,0.568622589111328,0.514605224132538,0.383560210466385,0.766852676868439\n             ,0.234150499105453,0.240436136722565,0.941999971866608,0.618959546089172,0.0886023566126823,0.780409336090088\n             ,0.787412106990814,0.238013699650764,0.568622589111328,0.618959546089172,0.0886023566126823,0.780409336090088\n             ,0.665011644363403,0.0966486409306526,0.740552842617035,0.459321737289429,0.336945086717606,0.821882903575897\n             ,0.7496537566185,0.27985754609108,0.599749088287354,0.7496537566185,0.27985754609108,0.599749088287354,0.459321737289429\n             ,0.336945086717606,0.821882903575897,0.522907495498657,0.438181906938553,0.731139063835144,0.839090466499329\n             ,0.267581433057785,0.473632037639618,0.886933207511902,0.205319285392761,0.413755267858505,0.7496537566185,0.27985754609108\n             ,0.599749088287354,0.522907495498657,0.438181906938553,0.731139063835144,-0.768386900424957,0.31679978966713\n             ,0.556075036525726,-0.911110818386078,0.327579766511917,0.250137090682983,-0.917055070400238,0.301483958959579\n             ,0.260993033647537,0.260435909032822,0.0412507019937038,-0.964609503746033,0.159143656492233,-0.20932050049305\n             ,-0.964809954166412,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.183688193559647,-0.183951675891876\n             ,-0.965619206428528,-0.12953394651413,0.104335330426693,-0.986070513725281,-0.896334648132324,0.12926284968853\n             ,-0.424117147922516,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.609844028949738,0.00468328595161438\n             ,-0.792507588863373,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.939192354679108,0.142906233668327\n             ,-0.312242686748505,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.911869525909424,0.153217226266861\n             ,-0.380812793970108,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.791375637054443,0.071151964366436\n             ,-0.607175409793854,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.797997057437897,0.0611037090420723\n             ,-0.599555671215057,-0.791375637054443,0.071151964366436,-0.607175409793854,-0.183688193559647,-0.183951675891876\n             ,-0.965619206428528,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.809815943241119,-0.0024391699116677\n             ,-0.586678981781006,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.183688193559647,-0.183951675891876\n             ,-0.965619206428528,-0.709648728370667,-0.32101958990097,0.627172350883484,-0.460758477449417,0.108215481042862\n             ,0.880903542041779,-0.0749797448515892,0.161466658115387,0.984025657176971,-0.251838445663452,-0.440982908010483\n             ,0.861458897590637,0.884826481342316,0.464208155870438,0.0399109348654747,0.888628959655762,0.438762068748474\n             ,0.133515372872353,0.66844254732132,0.71253913640976,-0.213242888450623,0.818305492401123,0.54065877199173,-0.195100545883179\n             ,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.751268684864044,0.274677604436874,-0.60012298822403\n             ,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.12953394651413,0.104335330426693,-0.986070513725281\n             ,0.310650020837784,0.28316468000412,-0.907366693019867,0.260435909032822,0.0412507019937038,-0.964609503746033\n             ,-0.12953394651413,0.104335330426693,-0.986070513725281,-0.0699166879057884,0.326290905475616,-0.942680180072784\n             ,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.120599381625652,0.0903127938508987,0.988584518432617\n             ,-0.439302027225494,0.130682304501534,0.888783395290375,-0.38883912563324,0.0112887192517519,0.921236515045166\n             ,0.990084290504456,0.101971529424191,0.0966169014573097,0.991360425949097,0.041219849139452,0.124520778656006\n             ,0.873561680316925,0.247193098068237,-0.419267863035202,0.989238142967224,-0.144198939204216,-0.0247913636267185\n             ,0.784134984016418,-0.509350836277008,-0.354533582925797,0.989238142967224,-0.144198939204216,-0.0247913636267185\n             ,0.873561680316925,0.247193098068237,-0.419267863035202,-0.237061515450478,0.971401154994965,-0.0134798940271139\n             ,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.86081600189209,0.504893720149994,-0.0638600736856461\n             ,-0.816423416137695,0.517423629760742,0.256369888782501,0.163023561239243,0.98268049955368,-0.0881040766835213\n             ,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.468789458274841,0.865421831607819,-0.176865667104721\n             ,-0.237061515450478,0.971401154994965,-0.0134798940271139,-0.911110818386078,0.327579766511917,0.250137090682983\n             ,-0.816423416137695,0.517423629760742,0.256369888782501,-0.86081600189209,0.504893720149994,-0.0638600736856461\n             ,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.917055070400238,0.301483958959579,0.260993033647537\n             ,-0.911110818386078,0.327579766511917,0.250137090682983,-0.923302352428436,0.378709852695465,0.0639655441045761\n             ,-0.942716598510742,0.31031545996666,0.12243277579546,-0.898983955383301,0.272523552179337,0.342868447303772\n             ,-0.917055070400238,0.301483958959579,0.260993033647537,-0.942716598510742,0.31031545996666,0.12243277579546\n             ,-0.966511785984039,0.186886444687843,0.175864636898041,-0.907228708267212,0.420285493135452,-0.0172105636447668\n             ,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.457298666238785,0.889312863349915,0.000723629433196038\n             ,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.838867545127869,0.499842166900635,-0.215543583035469\n             ,-0.888693332672119,0.348883032798767,-0.297497481107712,-0.909005224704742,0.416743367910385,0.00586836272850633\n             ,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.838867545127869,0.499842166900635,-0.215543583035469\n             ,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.955984711647034,0.292123109102249,-0.0275191478431225\n             ,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.939192354679108,0.142906233668327,-0.312242686748505\n             ,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.278325170278549,0.959965646266937,0.0316396243870258\n             ,0.0602656826376915,0.93876701593399,-0.339241087436676,-0.297451019287109,0.894863903522491,-0.33277839422226\n             ,-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.468789458274841,0.865421831607819,-0.176865667104721\n             ,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.825409948825836,0.564256370067596,0.0176955871284008\n             ,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.86081600189209,0.504893720149994,-0.0638600736856461\n             ,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.909005224704742,0.416743367910385,0.00586836272850633\n             ,-0.942716598510742,0.31031545996666,0.12243277579546,-0.923302352428436,0.378709852695465,0.0639655441045761\n             ,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.955984711647034,0.292123109102249,-0.0275191478431225\n             ,0.0602656826376915,0.93876701593399,-0.339241087436676,0.313923090696335,0.485718756914139,-0.815799951553345\n             ,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.297451019287109,0.894863903522491,-0.33277839422226\n             ,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.780570030212402,0.394561380147934,-0.484800666570663\n             ,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.297451019287109,0.894863903522491,-0.33277839422226\n             ,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.780570030212402,0.394561380147934,-0.484800666570663\n             ,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.888693332672119,0.348883032798767,-0.297497481107712\n             ,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.955984711647034,0.292123109102249,-0.0275191478431225\n             ,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.942716598510742,0.31031545996666,0.12243277579546\n             ,-0.955984711647034,0.292123109102249,-0.0275191478431225,-0.981271386146545,0.187864378094673,-0.0425844676792622\n             ,-0.966511785984039,0.186886444687843,0.175864636898041,-0.696859955787659,0.71514618396759,-0.0543340221047401\n             ,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.981271386146545,0.187864378094673,-0.0425844676792622\n             ,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.566947221755981,0.26147249341011,0.781154930591583\n             ,-0.617434501647949,0.298396319150925,0.727828443050385,-0.898983955383301,0.272523552179337,0.342868447303772\n             ,-0.500255882740021,0.598247230052948,0.625974655151367,-0.342477291822433,0.228350877761841,0.911353468894959\n             ,-0.471209764480591,0.287038415670395,0.834008574485779,-0.617434501647949,0.298396319150925,0.727828443050385\n             ,-0.566947221755981,0.26147249341011,0.781154930591583,-0.485232472419739,0.239207372069359,0.84102874994278\n             ,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.904579520225525,-0.0986718684434891,0.414728611707687\n             ,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.405384927988052,-0.526269018650055,0.747465074062347\n             ,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.904579520225525,-0.0986718684434891,0.414728611707687\n             ,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.501954138278961,0.0510877333581448,0.863384068012238\n             ,-0.271919548511505,0.128996223211288,0.953635036945343,-0.203233033418655,-0.00871946662664413,0.979091584682465\n             ,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.97038471698761,0.0723681449890137,-0.230469912290573\n             ,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.553619503974915,-0.0878534093499184,0.828122735023499\n             ,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.405384927988052,-0.526269018650055,0.747465074062347\n             ,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.501954138278961,0.0510877333581448,0.863384068012238\n             ,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.295709520578384,-0.414570212364197,0.860632002353668\n             ,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.802371442317963,-0.439784169197083,-0.403472363948822\n             ,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.947529137134552,-0.270958930253983,-0.16961669921875\n             ,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.501954138278961,0.0510877333581448,0.863384068012238\n             ,-0.551642179489136,0.164528906345367,0.817692577838898,-0.3530093729496,0.178218960762024,0.918489158153534\n             ,-0.128415614366531,0.132796317338943,0.982789158821106,-0.271919548511505,0.128996223211288,0.953635036945343\n             ,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.907434463500977,0.401591062545776,-0.123642094433308\n             ,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.440291285514832,0.870396435260773,0.220348998904228\n             ,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.6479212641716,0.534398972988129,-0.542785227298737\n             ,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.907434463500977,0.401591062545776,-0.123642094433308\n             ,-0.898983955383301,0.272523552179337,0.342868447303772,-0.907228708267212,0.420285493135452,-0.0172105636447668\n             ,-0.500255882740021,0.598247230052948,0.625974655151367,-0.745452880859375,0.509112060070038,-0.430238157510757\n             ,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.966511785984039,0.186886444687843,0.175864636898041\n             ,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.394719243049622,0.916350066661835,0.0670766159892082\n             ,-0.966511785984039,0.186886444687843,0.175864636898041,-0.981271386146545,0.187864378094673,-0.0425844676792622\n             ,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.514610290527344,0.855887234210968,0.0513155348598957\n             ,-0.566947221755981,0.26147249341011,0.781154930591583,-0.342477291822433,0.228350877761841,0.911353468894959\n             ,-0.3530093729496,0.178218960762024,0.918489158153534,-0.551642179489136,0.164528906345367,0.817692577838898\n             ,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.484726011753082,0.737569272518158,-0.470140665769577\n             ,-0.0310307368636131,0.989131927490234,-0.14371882379055,-0.514610290527344,0.855887234210968,0.0513155348598957\n             ,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.785466253757477,-0.00865362863987684,-0.618843913078308\n             ,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.526416659355164,-0.125638738274574,-0.840892672538757\n             ,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.916571378707886,-0.142677664756775,-0.373550534248352\n             ,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.534743189811707,-0.0985642895102501,-0.839246511459351\n             ,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.987079083919525,-0.140233889222145,-0.0775200128555298\n             ,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.924877762794495,-0.0230817683041096,-0.379563301801682\n             ,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.992392778396606,0.0152386799454689,-0.122165411710739\n             ,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.948758661746979,-0.259771883487701,0.179931968450546\n             ,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.999233186244965,0.0380166918039322,-0.00937180034816265\n             ,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.801825046539307,-0.262576133012772,0.536777794361115\n             ,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.90544730424881,0.119117729365826,0.407401740550995\n             ,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.801825046539307,-0.262576133012772,0.536777794361115\n             ,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.830910623073578,0.150519490242004,0.535659790039063\n             ,-0.90544730424881,0.119117729365826,0.407401740550995,-0.776555001735687,-0.203016772866249,0.59644490480423\n             ,-0.504776954650879,0.179731994867325,0.844332098960876,-0.830910623073578,0.150519490242004,0.535659790039063\n             ,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.508872270584106,0.031244209036231,0.860274851322174\n             ,0.0673240348696709,0.131959661841393,0.988966166973114,-0.504776954650879,0.179731994867325,0.844332098960876\n             ,-0.508872270584106,0.031244209036231,0.860274851322174,0.0816235020756722,-0.0377316474914551,0.995948731899261\n             ,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.271919548511505,0.128996223211288,0.953635036945343\n             ,0.0673240348696709,0.131959661841393,0.988966166973114,0.0816235020756722,-0.0377316474914551,0.995948731899261\n             ,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.939192354679108,0.142906233668327,-0.312242686748505\n             ,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.536318302154541,-0.443965286016464,0.717814385890961\n             ,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.0444819778203964,-0.725194454193115,0.687105774879456\n             ,-0.00733196083456278,-0.679022014141083,0.734081327915192,-0.24122528731823,-0.215426832437515,0.946256637573242\n             ,-0.200362399220467,-0.34291222691536,0.917750597000122,-0.328887611627579,-0.327985614538193,0.885583639144897\n             ,-0.709648728370667,-0.32101958990097,0.627172350883484,-0.251838445663452,-0.440982908010483,0.861458897590637\n             ,0.179207041859627,0.602162182331085,0.778000950813293,-0.471319168806076,0.566682040691376,0.675817847251892\n             ,-0.509491384029388,0.564497232437134,0.649431586265564,0.110788695514202,0.611092865467072,0.783767402172089\n             ,-0.0749797448515892,0.161466658115387,0.984025657176971,-0.460758477449417,0.108215481042862,0.880903542041779\n             ,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.129216328263283,-0.0478254519402981,0.990462481975555\n             ,0.110788695514202,0.611092865467072,0.783767402172089,-0.509491384029388,0.564497232437134,0.649431586265564\n             ,-0.801663935184479,-0.0182420816272497,0.597496509552002,-0.159226596355438,-0.153975084424019,0.975160777568817\n             ,-0.129216328263283,-0.0478254519402981,0.990462481975555,-0.778017282485962,0.0114750172942877,0.628138065338135\n             ,-0.713192403316498,-0.572692215442657,0.404203116893768,-0.23681703209877,-0.796483516693115,0.556355774402618\n             ,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.801663935184479,-0.0182420816272497,0.597496509552002\n             ,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.164029136300087,-0.974515855312347,-0.15301413834095\n             ,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.713192403316498,-0.572692215442657,0.404203116893768\n             ,-0.127582266926765,-0.6490518450737,0.749969661235809,-0.261260628700256,-0.761488914489746,0.593192636966705\n             ,-0.164029136300087,-0.974515855312347,-0.15301413834095,0.0995035693049431,-0.912259519100189,0.397343188524246\n             ,0.52398556470871,-0.396742969751358,0.753680408000946,0.481494694948196,-0.484542727470398,0.730329513549805\n             ,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.15866231918335,-0.379611045122147,0.91143935918808\n             ,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.468789458274841,0.865421831607819,-0.176865667104721\n             ,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.457298666238785,0.889312863349915,0.000723629433196038\n             ,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.278325170278549,0.959965646266937,0.0316396243870258\n             ,-0.901924610137939,0.307412892580032,0.303363412618637,-0.977742493152618,-0.0699509307742119,-0.197804138064384\n             ,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.899024248123169,0.213699862360954,0.382214277982712\n             ,-0.899024248123169,0.213699862360954,0.382214277982712,-0.955119252204895,-0.281733334064484,-0.0915070921182632\n             ,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.817979872226715,-0.0342942997813225,0.574223697185516\n             ,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.882815718650818,-0.369268298149109,0.290305644273758\n             ,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.572269916534424,-0.327977895736694,0.751623332500458\n             ,-0.761745274066925,0.099917359650135,0.640125453472137,-0.857412815093994,0.318779051303864,0.404008865356445\n             ,-0.899024248123169,0.213699862360954,0.382214277982712,-0.817979872226715,-0.0342942997813225,0.574223697185516\n             ,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.761745274066925,0.099917359650135,0.640125453472137\n             ,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.572269916534424,-0.327977895736694,0.751623332500458\n             ,-0.208346873521805,-0.195467934012413,0.95832347869873,-0.51681649684906,-0.0720630958676338,0.85305780172348\n             ,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.26332488656044,-0.487629622220993,0.832392573356628\n             ,-0.777440845966339,0.387861520051956,0.495125383138657,-0.921807289123535,0.190687090158463,0.337505161762238\n             ,-0.943840563297272,0.1807881295681,0.276551336050034,-0.938613772392273,0.27569842338562,0.207351386547089,-0.9817014336586\n             ,0.106130860745907,0.158109441399574,-0.857412815093994,0.318779051303864,0.404008865356445,-0.761745274066925\n             ,0.099917359650135,0.640125453472137,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.849806487560272\n             ,-0.0963084548711777,0.51822155714035,-0.761745274066925,0.099917359650135,0.640125453472137,-0.51681649684906\n             ,-0.0720630958676338,0.85305780172348,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.565454542636871\n             ,-0.235293716192245,0.790504932403564,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.208346873521805\n             ,-0.195467934012413,0.95832347869873,-0.235414087772369,-0.349107921123505,0.90703022480011,-0.973640561103821\n             ,0.150163590908051,0.171682626008987,-0.9817014336586,0.106130860745907,0.158109441399574,-0.849806487560272\n             ,-0.0963084548711777,0.51822155714035,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.823427438735962\n             ,0.0464033856987953,0.565520942211151,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.565454542636871\n             ,-0.235293716192245,0.790504932403564,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.53584623336792\n             ,-0.0723051279783249,0.841213822364807,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.235414087772369\n             ,-0.349107921123505,0.90703022480011,-0.199428826570511,-0.151153653860092,0.968184232711792,-0.943840563297272\n             ,0.1807881295681,0.276551336050034,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.939433455467224\n             ,0.230843335390091,-0.253330230712891,-0.938613772392273,0.27569842338562,0.207351386547089,-0.977742493152618\n             ,-0.0699509307742119,-0.197804138064384,-0.901924610137939,0.307412892580032,0.303363412618637,-0.938613772392273\n             ,0.27569842338562,0.207351386547089,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.857412815093994\n             ,0.318779051303864,0.404008865356445,-0.777440845966339,0.387861520051956,0.495125383138657,-0.901924610137939\n             ,0.307412892580032,0.303363412618637,-0.899024248123169,0.213699862360954,0.382214277982712,-0.9817014336586\n             ,0.106130860745907,0.158109441399574,-0.921807289123535,0.190687090158463,0.337505161762238,-0.777440845966339\n             ,0.387861520051956,0.495125383138657,-0.857412815093994,0.318779051303864,0.404008865356445,-0.970218658447266\n             ,-0.038191806524992,0.239200875163078,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.734350621700287\n             ,0.677913844585419,0.0340877436101437,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.54743480682373\n             ,0.804430425167084,0.230666100978851,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.938417971134186\n             ,0.0142068117856979,0.345209956169128,-0.798004448413849,0.101907536387444,0.593972861766815,-0.250951796770096\n             ,0.864163637161255,0.436170101165771,-0.54743480682373,0.804430425167084,0.230666100978851,-0.798004448413849\n             ,0.101907536387444,0.593972861766815,-0.507640421390533,0.139722898602486,0.85016393661499,0.0952272266149521\n             ,0.827912211418152,0.552714347839355,-0.250951796770096,0.864163637161255,0.436170101165771,-0.507640421390533\n             ,0.139722898602486,0.85016393661499,-0.146061703562737,0.0914116725325584,0.985043108463287,-0.793523073196411\n             ,-0.0159704424440861,0.608330607414246,-0.798004448413849,0.101907536387444,0.593972861766815,-0.938417971134186\n             ,0.0142068117856979,0.345209956169128,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.516035139560699\n             ,-0.0156707875430584,0.85642409324646,-0.507640421390533,0.139722898602486,0.85016393661499,-0.798004448413849\n             ,0.101907536387444,0.593972861766815,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.182312056422234\n             ,-0.0702576190233231,0.98072737455368,-0.146061703562737,0.0914116725325584,0.985043108463287,-0.507640421390533\n             ,0.139722898602486,0.85016393661499,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.95304924249649\n             ,0.0933544263243675,0.288066118955612,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.987499535083771\n             ,0.0581443458795547,0.146505534648895,-0.97012186050415,0.115440957248211,0.213394016027451,-0.793523073196411\n             ,-0.0159704424440861,0.608330607414246,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.952853083610535\n             ,0.227692499756813,0.200567036867142,-0.799672305583954,0.218887090682983,0.559117794036865,-0.516035139560699\n             ,-0.0156707875430584,0.85642409324646,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.799672305583954\n             ,0.218887090682983,0.559117794036865,-0.508204877376556,0.144576609134674,0.849014341831207,-0.182312056422234\n             ,-0.0702576190233231,0.98072737455368,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.508204877376556\n             ,0.144576609134674,0.849014341831207,-0.14939372241497,0.0765637531876564,0.985809028148651,-0.799672305583954\n             ,0.218887090682983,0.559117794036865,-0.952853083610535,0.227692499756813,0.200567036867142,-0.973640561103821\n             ,0.150163590908051,0.171682626008987,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.508204877376556\n             ,0.144576609134674,0.849014341831207,-0.799672305583954,0.218887090682983,0.559117794036865,-0.823427438735962\n             ,0.0464033856987953,0.565520942211151,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.14939372241497\n             ,0.0765637531876564,0.985809028148651,-0.508204877376556,0.144576609134674,0.849014341831207,-0.53584623336792\n             ,-0.0723051279783249,0.841213822364807,-0.199428826570511,-0.151153653860092,0.968184232711792,-0.938012957572937\n             ,0.237204626202583,-0.252716571092606,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.97012186050415\n             ,0.115440957248211,0.213394016027451,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.987499535083771\n             ,0.0581443458795547,0.146505534648895,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.837948083877563\n             ,0.531638741493225,-0.123301722109318,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.93721479177475\n             ,-0.0726321637630463,0.34110552072525,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.970218658447266\n             ,-0.038191806524992,0.239200875163078,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.93721479177475\n             ,-0.0726321637630463,0.34110552072525,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.95304924249649\n             ,0.0933544263243675,0.288066118955612,-0.952853083610535,0.227692499756813,0.200567036867142,-0.95304924249649\n             ,0.0933544263243675,0.288066118955612,-0.97012186050415,0.115440957248211,0.213394016027451,-0.960990250110626\n             ,0.131045117974281,0.243567124009132,-0.948896527290344,0.107380069792271,0.296757221221924,-0.943840563297272\n             ,0.1807881295681,0.276551336050034,-0.960990250110626,0.131045117974281,0.243567124009132,-0.934666931629181\n             ,0.235346302390099,-0.266476780176163,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.934666931629181\n             ,0.235346302390099,-0.266476780176163,-0.960990250110626,0.131045117974281,0.243567124009132,-0.97012186050415\n             ,0.115440957248211,0.213394016027451,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.960990250110626\n             ,0.131045117974281,0.243567124009132,-0.943840563297272,0.1807881295681,0.276551336050034,-0.921807289123535\n             ,0.190687090158463,0.337505161762238,-0.948896527290344,0.107380069792271,0.296757221221924,0.801646828651428\n             ,-0.0831208676099777,0.591991007328033,0.734746038913727,-0.160801336169243,0.659007728099823,0.70257967710495\n             ,-0.699933767318726,0.128352925181389,0.841358840465546,-0.538884103298187,0.0414636693894863,0.401816725730896\n             ,-0.892981171607971,0.202800214290619,0.70257967710495,-0.699933767318726,0.128352925181389,0.734746038913727\n             ,-0.160801336169243,0.659007728099823,0.503881454467773,-0.329790472984314,0.798336863517761,-0.0260992348194122\n             ,-0.974703729152679,0.221971705555916,0.401816725730896,-0.892981171607971,0.202800214290619,0.503881454467773\n             ,-0.329790472984314,0.798336863517761,0.107415564358234,-0.480258971452713,0.870524644851685,0.498356074094772\n             ,-0.197405740618706,0.844199180603027,0.503881454467773,-0.329790472984314,0.798336863517761,0.734746038913727\n             ,-0.160801336169243,0.659007728099823,0.73037314414978,-0.078302189707756,0.678545415401459,0.147659823298454\n             ,-0.24711586534977,0.957669198513031,0.107415564358234,-0.480258971452713,0.870524644851685,0.503881454467773\n             ,-0.329790472984314,0.798336863517761,0.498356074094772,-0.197405740618706,0.844199180603027,-0.208346873521805\n             ,-0.195467934012413,0.95832347869873,-0.26332488656044,-0.487629622220993,0.832392573356628,0.107415564358234\n             ,-0.480258971452713,0.870524644851685,0.147659823298454,-0.24711586534977,0.957669198513031,0.751119554042816\n             ,-0.269360929727554,0.602713882923126,0.685023248195648,0.00244083511643112,0.728517115116119,0.857912063598633\n             ,-0.151919424533844,0.490823149681091,0.808899104595184,-0.271903991699219,0.521296918392181,0.498356074094772\n             ,-0.197405740618706,0.844199180603027,0.73037314414978,-0.078302189707756,0.678545415401459,0.806595623493195\n             ,-0.339085549116135,0.484173983335495,0.540686428546906,-0.418503105640411,0.729735136032104,0.147659823298454\n             ,-0.24711586534977,0.957669198513031,0.498356074094772,-0.197405740618706,0.844199180603027,0.540686428546906\n             ,-0.418503105640411,0.729735136032104,0.155815690755844,-0.419202774763107,0.894421875476837,-0.208346873521805\n             ,-0.195467934012413,0.95832347869873,0.147659823298454,-0.24711586534977,0.957669198513031,0.155815690755844\n             ,-0.419202774763107,0.894421875476837,-0.235414087772369,-0.349107921123505,0.90703022480011,0.540686428546906\n             ,-0.418503105640411,0.729735136032104,0.806595623493195,-0.339085549116135,0.484173983335495,0.82207328081131\n             ,-0.257045179605484,0.508058369159698,0.566346645355225,-0.257577836513519,0.782882571220398,0.155815690755844\n             ,-0.419202774763107,0.894421875476837,0.540686428546906,-0.418503105640411,0.729735136032104,0.566346645355225\n             ,-0.257577836513519,0.782882571220398,0.190858632326126,-0.215845569968224,0.957592666149139,-0.235414087772369\n             ,-0.349107921123505,0.90703022480011,0.155815690755844,-0.419202774763107,0.894421875476837,0.190858632326126\n             ,-0.215845569968224,0.957592666149139,-0.199428826570511,-0.151153653860092,0.968184232711792,0.980303883552551\n             ,-0.197100415825844,-0.0124758314341307,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.808899104595184\n             ,-0.271903991699219,0.521296918392181,0.857912063598633,-0.151919424533844,0.490823149681091,0.841358840465546\n             ,-0.538884103298187,0.0414636693894863,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.857912063598633\n             ,-0.151919424533844,0.490823149681091,0.801646828651428,-0.0831208676099777,0.591991007328033,0.73037314414978\n             ,-0.078302189707756,0.678545415401459,0.734746038913727,-0.160801336169243,0.659007728099823,0.801646828651428\n             ,-0.0831208676099777,0.591991007328033,0.685023248195648,0.00244083511643112,0.728517115116119,0.73037314414978\n             ,-0.078302189707756,0.678545415401459,0.685023248195648,0.00244083511643112,0.728517115116119,0.751119554042816\n             ,-0.269360929727554,0.602713882923126,0.806595623493195,-0.339085549116135,0.484173983335495,0.733399391174316\n             ,-0.42873340845108,0.527553796768188,0.972478210926056,0.193684622645378,0.129508212208748,0.895388960838318\n             ,0.358975827693939,0.263467311859131,0.69538801908493,-0.360292613506317,0.621791541576386,0.535216987133026\n             ,-0.203684195876122,0.819789946079254,0.730379700660706,0.544567286968231,0.412300884723663,0.44217050075531\n             ,0.718546867370605,0.536819994449615,0.224035635590553,-0.0279745738953352,0.97417938709259,0.224035635590553\n             ,-0.0279745738953352,0.97417938709259,0.44217050075531,0.718546867370605,0.536819994449615,0.0952272266149521\n             ,0.827912211418152,0.552714347839355,-0.146061703562737,0.0914116725325584,0.985043108463287,0.476951867341995\n             ,-0.307240515947342,0.823480546474457,0.658827781677246,-0.438512951135635,0.611271023750305,0.69538801908493\n             ,-0.360292613506317,0.621791541576386,0.535216987133026,-0.203684195876122,0.819789946079254,0.163414120674133\n             ,-0.171451970934868,0.971545219421387,0.476951867341995,-0.307240515947342,0.823480546474457,0.535216987133026\n             ,-0.203684195876122,0.819789946079254,0.224035635590553,-0.0279745738953352,0.97417938709259,-0.182312056422234\n             ,-0.0702576190233231,0.98072737455368,0.163414120674133,-0.171451970934868,0.971545219421387,0.224035635590553\n             ,-0.0279745738953352,0.97417938709259,-0.146061703562737,0.0914116725325584,0.985043108463287,0.817899644374847\n             ,-0.355826288461685,0.452137023210526,0.585005819797516,-0.507527828216553,0.632600724697113,0.754743993282318\n             ,-0.253586798906326,0.605024993419647,0.814589738845825,-0.243902504444122,0.526265263557434,0.839219391345978\n             ,-0.174447894096375,0.515052139759064,0.658827781677246,-0.438512951135635,0.611271023750305,0.476951867341995\n             ,-0.307240515947342,0.823480546474457,0.605567514896393,-0.0923454314470291,0.790417790412903,0.605567514896393\n             ,-0.0923454314470291,0.790417790412903,0.476951867341995,-0.307240515947342,0.823480546474457,0.163414120674133\n             ,-0.171451970934868,0.971545219421387,0.2394889742136,-0.0051474985666573,0.970885455608368,0.2394889742136,-0.0051474985666573\n             ,0.970885455608368,0.163414120674133,-0.171451970934868,0.971545219421387,-0.182312056422234,-0.0702576190233231\n             ,0.98072737455368,-0.14939372241497,0.0765637531876564,0.985809028148651,0.82207328081131,-0.257045179605484\n             ,0.508058369159698,0.839219391345978,-0.174447894096375,0.515052139759064,0.605567514896393,-0.0923454314470291\n             ,0.790417790412903,0.566346645355225,-0.257577836513519,0.782882571220398,0.566346645355225,-0.257577836513519\n             ,0.782882571220398,0.605567514896393,-0.0923454314470291,0.790417790412903,0.2394889742136,-0.0051474985666573\n             ,0.970885455608368,0.190858632326126,-0.215845569968224,0.957592666149139,0.190858632326126,-0.215845569968224\n             ,0.957592666149139,0.2394889742136,-0.0051474985666573,0.970885455608368,-0.14939372241497,0.0765637531876564\n             ,0.985809028148651,-0.199428826570511,-0.151153653860092,0.968184232711792,0.814589738845825,-0.243902504444122\n             ,0.526265263557434,0.9765744805336,-0.21293817460537,-0.0309777203947306,0.983128607273102,-0.182582512497902\n             ,-0.011036628857255,0.817899644374847,-0.355826288461685,0.452137023210526,0.817899644374847,-0.355826288461685\n             ,0.452137023210526,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.972478210926056,0.193684622645378\n             ,0.129508212208748,0.733399391174316,-0.42873340845108,0.527553796768188,0.658827781677246,-0.438512951135635\n             ,0.611271023750305,0.585005819797516,-0.507527828216553,0.632600724697113,0.733399391174316,-0.42873340845108\n             ,0.527553796768188,0.69538801908493,-0.360292613506317,0.621791541576386,0.754743993282318,-0.253586798906326\n             ,0.605024993419647,0.585005819797516,-0.507527828216553,0.632600724697113,0.658827781677246,-0.438512951135635\n             ,0.611271023750305,0.839219391345978,-0.174447894096375,0.515052139759064,0.981736898422241,-0.184043049812317\n             ,-0.0481746941804886,0.809050917625427,-0.256973832845688,0.528583943843842,0.808899104595184,-0.271903991699219\n             ,0.521296918392181,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.814589738845825,-0.243902504444122\n             ,0.526265263557434,0.809050917625427,-0.256973832845688,0.528583943843842,0.981736898422241,-0.184043049812317\n             ,-0.0481746941804886,0.9765744805336,-0.21293817460537,-0.0309777203947306,-0.955119252204895,-0.281733334064484\n             ,-0.0915070921182632,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.985335469245911,0.0123848039656878\n             ,-0.170178011059761,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.882815718650818,-0.369268298149109\n             ,0.290305644273758,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.9922234416008,-0.1217075958848\n             ,0.0260745380073786,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.985335469245911,0.0123848039656878\n             ,-0.170178011059761,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.961426258087158,0.114839658141136\n             ,-0.249942779541016,-0.924062490463257,0.166337832808495,-0.344151526689529,-0.924062490463257,0.166337832808495\n             ,-0.344151526689529,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.939433455467224,0.230843335390091\n             ,-0.253330230712891,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.837948083877563,0.531638741493225\n             ,-0.123301722109318,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.713566780090332,0.700178563594818\n             ,0.0239257458597422,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.734350621700287,0.677913844585419\n             ,0.0340877436101437,-0.54743480682373,0.804430425167084,0.230666100978851,-0.639851093292236,0.713299214839935\n             ,0.28599801659584,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.54743480682373,0.804430425167084\n             ,0.230666100978851,-0.250951796770096,0.864163637161255,0.436170101165771,-0.615591168403625,0.608454763889313\n             ,0.500829696655273,-0.639851093292236,0.713299214839935,0.28599801659584,-0.250951796770096,0.864163637161255\n             ,0.436170101165771,0.0952272266149521,0.827912211418152,0.552714347839355,-0.139664217829704,0.122649051249027\n             ,0.982573747634888,-0.615591168403625,0.608454763889313,0.500829696655273,-0.904506981372833,0.363090604543686\n             ,-0.223679021000862,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.843237459659576,0.525120079517365\n             ,-0.114889100193977,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.938012957572937,0.237204626202583\n             ,-0.252716571092606,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.874023795127869,0.388026893138886\n             ,-0.292433828115463,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.932059943675995,0.251615643501282\n             ,-0.260679513216019,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.850903332233429,0.254370987415314\n             ,-0.459629088640213,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.939433455467224,0.230843335390091\n             ,-0.253330230712891,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.796034395694733,0.305417150259018\n             ,-0.522541463375092,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.850903332233429,0.254370987415314\n             ,-0.459629088640213,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.940755069255829,0.217000797390938\n             ,-0.260558128356934,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.863597929477692,0.181174650788307\n             ,-0.470504373311996,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.938012957572937,0.237204626202583\n             ,-0.252716571092606,-0.866832733154297,0.233201399445534,-0.440701872110367,0.841358840465546,-0.538884103298187\n             ,0.0414636693894863,0.70257967710495,-0.699933767318726,0.128352925181389,0.685771405696869,-0.727804124355316\n             ,0.00433491868898273,0.682205855846405,-0.688040673732758,-0.247376576066017,0.70257967710495,-0.699933767318726\n             ,0.128352925181389,0.401816725730896,-0.892981171607971,0.202800214290619,0.301932573318481,-0.883707880973816\n             ,0.357627093791962,0.685771405696869,-0.727804124355316,0.00433491868898273,0.401816725730896,-0.892981171607971\n             ,0.202800214290619,-0.0260992348194122,-0.974703729152679,0.221971705555916,0.289558619260788,-0.713769853115082\n             ,0.637721240520477,0.301932573318481,-0.883707880973816,0.357627093791962,0.933255016803741,-0.359124660491943\n             ,-0.00803234614431858,0.841358840465546,-0.538884103298187,0.0414636693894863,0.682205855846405,-0.688040673732758\n             ,-0.247376576066017,0.846972167491913,-0.511904895305634,-0.14349739253521,0.980303883552551,-0.197100415825844\n             ,-0.0124758314341307,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.846972167491913,-0.511904895305634\n             ,-0.14349739253521,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.895388960838318,0.358975827693939\n             ,0.263467311859131,0.972478210926056,0.193684622645378,0.129508212208748,0.960353672504425,0.263352990150452\n             ,0.0914659649133682,0.898760318756104,0.357274115085602,0.254135996103287,0.730379700660706,0.544567286968231\n             ,0.412300884723663,0.895388960838318,0.358975827693939,0.263467311859131,0.898760318756104,0.357274115085602\n             ,0.254135996103287,0.750469028949738,0.503480017185211,0.42814028263092,0.44217050075531,0.718546867370605,0.536819994449615\n             ,0.730379700660706,0.544567286968231,0.412300884723663,0.750469028949738,0.503480017185211,0.42814028263092,0.626252830028534\n             ,0.308739811182022,0.715882003307343,0.0952272266149521,0.827912211418152,0.552714347839355,0.44217050075531\n             ,0.718546867370605,0.536819994449615,0.626252830028534,0.308739811182022,0.715882003307343,-0.139664217829704\n             ,0.122649051249027,0.982573747634888,0.960353672504425,0.263352990150452,0.0914659649133682,0.972478210926056\n             ,0.193684622645378,0.129508212208748,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.991423904895782\n             ,0.113214619457722,0.0652767568826675,0.991423904895782,0.113214619457722,0.0652767568826675,0.999559164047241\n             ,-0.0022999900393188,0.0296008456498384,0.983128607273102,-0.182582512497902,-0.011036628857255,0.992731213569641\n             ,-0.118552401661873,0.0207367613911629,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.981736898422241\n             ,-0.184043049812317,-0.0481746941804886,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.98767364025116\n             ,-0.155731916427612,-0.0157585926353931,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.986363470554352\n             ,-0.161528527736664,-0.0315533950924873,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.973673224449158\n             ,-0.222424849867821,-0.0498761273920536,0.9765744805336,-0.21293817460537,-0.0309777203947306,0.981736898422241\n             ,-0.184043049812317,-0.0481746941804886,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.962084114551544\n             ,-0.260001808404922,-0.0824210941791534,0.983128607273102,-0.182582512497902,-0.011036628857255,0.9765744805336\n             ,-0.21293817460537,-0.0309777203947306,0.962084114551544,-0.260001808404922,-0.0824210941791534,0.992731213569641\n             ,-0.118552401661873,0.0207367613911629,-0.901924610137939,0.307412892580032,0.303363412618637,-0.777440845966339\n             ,0.387861520051956,0.495125383138657,-0.938613772392273,0.27569842338562,0.207351386547089,-0.938613772392273\n             ,0.27569842338562,0.207351386547089,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.961426258087158\n             ,0.114839658141136,-0.249942779541016,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.987499535083771\n             ,0.0581443458795547,0.146505534648895,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.987499535083771\n             ,0.0581443458795547,0.146505534648895,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.938012957572937\n             ,0.237204626202583,-0.252716571092606,0.801646828651428,-0.0831208676099777,0.591991007328033,0.857912063598633\n             ,-0.151919424533844,0.490823149681091,0.685023248195648,0.00244083511643112,0.728517115116119,0.857912063598633\n             ,-0.151919424533844,0.490823149681091,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.980303883552551\n             ,-0.197100415825844,-0.0124758314341307,0.733399391174316,-0.42873340845108,0.527553796768188,0.585005819797516\n             ,-0.507527828216553,0.632600724697113,0.817899644374847,-0.355826288461685,0.452137023210526,0.817899644374847\n             ,-0.355826288461685,0.452137023210526,0.983128607273102,-0.182582512497902,-0.011036628857255,0.999559164047241\n             ,-0.0022999900393188,0.0296008456498384,-0.633089065551758,-0.179430231451988,0.75299608707428,-0.268051534891129\n             ,-0.524246156215668,0.808278679847717,-0.0181612316519022,0.599665939807892,0.800044298171997,-0.398783475160599\n             ,0.608131349086761,0.686402201652527,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.0181612316519022\n             ,0.599665939807892,0.800044298171997,0.381472051143646,0.46587747335434,0.798396646976471,0.390523910522461,0.243563205003738\n             ,0.88778829574585,0.381472051143646,0.46587747335434,0.798396646976471,0.241816222667694,-0.361797332763672,0.900348603725433\n             ,0.626252830028534,0.308739811182022,0.715882003307343,0.390523910522461,0.243563205003738,0.88778829574585,0.626252830028534\n             ,0.308739811182022,0.715882003307343,0.241816222667694,-0.361797332763672,0.900348603725433,-0.268051534891129\n             ,-0.524246156215668,0.808278679847717,-0.139664217829704,0.122649051249027,0.982573747634888,-0.139664217829704\n             ,0.122649051249027,0.982573747634888,-0.268051534891129,-0.524246156215668,0.808278679847717,-0.633089065551758\n             ,-0.179430231451988,0.75299608707428,-0.615591168403625,0.608454763889313,0.500829696655273,-0.633089065551758\n             ,-0.179430231451988,0.75299608707428,-0.398783475160599,0.608131349086761,0.686402201652527,-0.541773617267609\n             ,0.383253455162048,0.748062908649445,-0.615591168403625,0.608454763889313,0.500829696655273,-0.541773617267609\n             ,0.383253455162048,0.748062908649445,-0.398783475160599,0.608131349086761,0.686402201652527,-0.0181612316519022\n             ,0.599665939807892,0.800044298171997,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.0181612316519022\n             ,0.599665939807892,0.800044298171997,-0.268051534891129,-0.524246156215668,0.808278679847717,0.241816222667694\n             ,-0.361797332763672,0.900348603725433,0.381472051143646,0.46587747335434,0.798396646976471,-0.948896527290344\n             ,0.107380069792271,0.296757221221924,-0.973640561103821,0.150163590908051,0.171682626008987,-0.952853083610535\n             ,0.227692499756813,0.200567036867142,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.921807289123535\n             ,0.190687090158463,0.337505161762238,-0.9817014336586,0.106130860745907,0.158109441399574,-0.973640561103821\n             ,0.150163590908051,0.171682626008987,-0.948896527290344,0.107380069792271,0.296757221221924,0.809050917625427\n             ,-0.256973832845688,0.528583943843842,0.743283569812775,-0.261148244142532,0.615898609161377,0.751119554042816\n             ,-0.269360929727554,0.602713882923126,0.808899104595184,-0.271903991699219,0.521296918392181,0.743283569812775\n             ,-0.261148244142532,0.615898609161377,0.82207328081131,-0.257045179605484,0.508058369159698,0.806595623493195\n             ,-0.339085549116135,0.484173983335495,0.751119554042816,-0.269360929727554,0.602713882923126,0.754743993282318\n             ,-0.253586798906326,0.605024993419647,0.839219391345978,-0.174447894096375,0.515052139759064,0.82207328081131\n             ,-0.257045179605484,0.508058369159698,0.743283569812775,-0.261148244142532,0.615898609161377,0.809050917625427\n             ,-0.256973832845688,0.528583943843842,0.814589738845825,-0.243902504444122,0.526265263557434,0.754743993282318\n             ,-0.253586798906326,0.605024993419647,0.743283569812775,-0.261148244142532,0.615898609161377,0.69538801908493\n             ,-0.360292613506317,0.621791541576386,0.895388960838318,0.358975827693939,0.263467311859131,0.730379700660706\n             ,0.544567286968231,0.412300884723663,0.535216987133026,-0.203684195876122,0.819789946079254,0.78125125169754\n             ,-0.138539433479309,0.608648777008057,0.878065228462219,-0.00301950192078948,0.47853147983551,0.930242419242859\n             ,-0.158916160464287,0.330748707056046,0.805302381515503,-0.358387529850006,0.472277879714966,0.370588421821594\n             ,-0.193350583314896,0.908449113368988,0.340047508478165,-0.388343751430511,0.856479287147522,0.640090823173523\n             ,-0.393064320087433,0.660139560699463,0.660678803920746,-0.179935500025749,0.728784441947937,-0.709845840930939\n             ,-0.0613325238227844,0.701681673526764,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.562524795532227\n             ,-0.508337914943695,0.652041733264923,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.415467321872711\n             ,-0.0540936067700386,0.907998204231262,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.0792728736996651\n             ,-0.368663102388382,0.926176726818085,-0.0499088205397129,-0.128681614995003,0.990429282188416,-0.542648077011108\n             ,0.604446232318878,0.583247661590576,-0.828080534934998,0.439521878957748,0.347998708486557,-0.678687632083893\n             ,0.530943989753723,0.507426381111145,0.998525857925415,0.0400822311639786,0.0366002470254898,0.930242419242859\n             ,-0.158916160464287,0.330748707056046,0.878065228462219,-0.00301950192078948,0.47853147983551,0.977894842624664\n             ,0.203556552529335,0.0478159449994564,-0.478552311658859,0.59250408411026,0.648017406463623,-0.839360475540161\n             ,0.300623118877411,0.452879399061203,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.723428726196289\n             ,-0.0725482106208801,0.686576724052429,-0.542648077011108,0.604446232318878,0.583247661590576,-0.678687632083893\n             ,0.530943989753723,0.507426381111145,-0.839360475540161,0.300623118877411,0.452879399061203,-0.478552311658859\n             ,0.59250408411026,0.648017406463623,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.801453590393066\n             ,-0.0788522064685822,0.592835962772369,-0.562524795532227,-0.508337914943695,0.652041733264923,-0.679585158824921\n             ,-0.597024917602539,0.426292538642883,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.904659032821655\n             ,-0.172026187181473,0.389870524406433,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.723428726196289\n             ,-0.0725482106208801,0.686576724052429,-0.419204741716385,0.619329035282135,0.66385155916214,-0.478552311658859\n             ,0.59250408411026,0.648017406463623,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.713757753372192\n             ,-0.0291265603154898,0.699786782264709,-0.454762816429138,0.657830238342285,0.60037499666214,-0.542648077011108\n             ,0.604446232318878,0.583247661590576,-0.478552311658859,0.59250408411026,0.648017406463623,-0.419204741716385\n             ,0.619329035282135,0.66385155916214,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.562524795532227\n             ,-0.508337914943695,0.652041733264923,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.882178366184235\n             ,-0.427934050559998,0.196554735302925,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.679585158824921\n             ,-0.597024917602539,0.426292538642883,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.713757753372192\n             ,-0.0291265603154898,0.699786782264709,-0.419204741716385,0.619329035282135,0.66385155916214,-0.713757753372192\n             ,-0.0291265603154898,0.699786782264709,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.211948931217194\n             ,0.670887529850006,0.710624814033508,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.882178366184235\n             ,-0.427934050559998,0.196554735302925,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.829398572444916\n             ,-0.0672809854149818,0.554591119289398,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.713757753372192\n             ,-0.0291265603154898,0.699786782264709,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.998829364776611\n             ,0.0265166759490967,-0.0404574386775494,-0.450191855430603,-0.821828484535217,0.349177956581116,-0.938492894172668\n             ,-0.335133403539658,0.0831665322184563,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.388236194849014\n             ,-0.50770115852356,0.769098341464996,-0.415356457233429,-0.555049777030945,0.720693230628967,-0.845879793167114\n             ,-0.333898961544037,0.415931314229965,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.450191855430603\n             ,-0.821828484535217,0.349177956581116,-0.0997487902641296,0.343725502490997,0.933757483959198,0.129296213388443\n             ,0.717355608940125,0.684604585170746,0.051387831568718,-0.174088895320892,0.983388185501099,-0.380323052406311\n             ,-0.00781864393502474,0.9248206615448,-0.381502002477646,-0.250341862440109,0.889823138713837,0.44838610291481\n             ,-0.404915183782578,0.796864807605743,0.225461423397064,-0.225655317306519,0.947758853435516,-0.450191855430603\n             ,-0.821828484535217,0.349177956581116,-0.388236194849014,-0.50770115852356,0.769098341464996,0.147943705320358\n             ,-0.468890011310577,0.870778322219849,0.477010041475296,-0.793651044368744,0.377596825361252,-0.415356457233429\n             ,-0.555049777030945,0.720693230628967,-0.450191855430603,-0.821828484535217,0.349177956581116,0.477010041475296\n             ,-0.793651044368744,0.377596825361252,0.519910156726837,-0.607850134372711,0.600176334381104,0.129296213388443\n             ,0.717355608940125,0.684604585170746,-0.211948931217194,0.670887529850006,0.710624814033508,-0.380323052406311\n             ,-0.00781864393502474,0.9248206615448,0.225461423397064,-0.225655317306519,0.947758853435516,0.214603096246719\n             ,0.506344735622406,0.835200905799866,0.289558619260788,-0.713769853115082,0.637721240520477,0.051387831568718\n             ,-0.174088895320892,0.983388185501099,0.129296213388443,0.717355608940125,0.684604585170746,0.214603096246719\n             ,0.506344735622406,0.835200905799866,0.870778322219849,-0.383099019527435,0.308188676834106,0.491936594247818\n             ,-0.382108181715012,0.782299041748047,0.332508742809296,-0.680451035499573,0.653011798858643,0.518838703632355\n             ,-0.706463396549225,0.481368720531464,0.44838610291481,-0.404915183782578,0.796864807605743,0.870778322219849\n             ,-0.383099019527435,0.308188676834106,0.518838703632355,-0.706463396549225,0.481368720531464,0.225461423397064\n             ,-0.225655317306519,0.947758853435516,0.423083633184433,0.0620496086776257,0.903963565826416,0.508102118968964\n             ,0.373251259326935,0.776218891143799,0.786464095115662,-0.0169835668057203,0.61740243434906,0.605372726917267\n             ,0.000812157464679331,0.795941710472107,0.650932729244232,-0.458716839551926,0.604868113994598,0.245217740535736\n             ,-0.767790734767914,0.591916918754578,0.319739699363709,-0.689254701137543,0.650149524211884,0.602446496486664\n             ,-0.488442957401276,0.631254017353058,0.508102118968964,0.373251259326935,0.776218891143799,0.395677745342255\n             ,-0.301782160997391,0.867390692234039,0.703794419765472,-0.329490423202515,0.629372298717499,0.786464095115662\n             ,-0.0169835668057203,0.61740243434906,0.703794419765472,-0.329490423202515,0.629372298717499,0.395677745342255\n             ,-0.301782160997391,0.867390692234039,0.245217740535736,-0.767790734767914,0.591916918754578,0.650932729244232\n             ,-0.458716839551926,0.604868113994598,0.650932729244232,-0.458716839551926,0.604868113994598,0.602446496486664\n             ,-0.488442957401276,0.631254017353058,0.605372726917267,0.000812157464679331,0.795941710472107,0.786464095115662\n             ,-0.0169835668057203,0.61740243434906,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.713757753372192\n             ,-0.0291265603154898,0.699786782264709,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.381502002477646\n             ,-0.250341862440109,0.889823138713837,0.214603096246719,0.506344735622406,0.835200905799866,0.225461423397064\n             ,-0.225655317306519,0.947758853435516,0.395677745342255,-0.301782160997391,0.867390692234039,0.508102118968964\n             ,0.373251259326935,0.776218891143799,0.245217740535736,-0.767790734767914,0.591916918754578,0.518838703632355\n             ,-0.706463396549225,0.481368720531464,0.332508742809296,-0.680451035499573,0.653011798858643,0.319739699363709\n             ,-0.689254701137543,0.650149524211884,0.395677745342255,-0.301782160997391,0.867390692234039,0.225461423397064\n             ,-0.225655317306519,0.947758853435516,0.518838703632355,-0.706463396549225,0.481368720531464,0.245217740535736\n             ,-0.767790734767914,0.591916918754578,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.839360475540161\n             ,0.300623118877411,0.452879399061203,-0.678687632083893,0.530943989753723,0.507426381111145,-0.801453590393066\n             ,-0.0788522064685822,0.592835962772369,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.408054858446121\n             ,-0.272179991006851,0.871440947055817,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.703129649162292\n             ,0.0220469851046801,0.710719764232636,-0.0499088205397129,-0.128681614995003,0.990429282188416,-0.0792728736996651\n             ,-0.368663102388382,0.926176726818085,0.340047508478165,-0.388343751430511,0.856479287147522,0.370588421821594\n             ,-0.193350583314896,0.908449113368988,0.329437464475632,-0.321430414915085,0.887780070304871,0.319739699363709\n             ,-0.689254701137543,0.650149524211884,0.332508742809296,-0.680451035499573,0.653011798858643,0.491936594247818\n             ,-0.382108181715012,0.782299041748047,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.829398572444916\n             ,-0.0672809854149818,0.554591119289398,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.562524795532227\n             ,-0.508337914943695,0.652041733264923,0.660678803920746,-0.179935500025749,0.728784441947937,0.640090823173523\n             ,-0.393064320087433,0.660139560699463,0.867793679237366,-0.309993803501129,0.38837856054306,0.884072363376617\n             ,-0.159779712557793,0.439188450574875,0.831244945526123,-0.225508287549019,0.508112013339996,0.82292628288269\n             ,-0.280684322118759,0.493972301483154,0.668613970279694,-0.338565081357956,0.662064254283905,0.654389500617981\n             ,-0.325742691755295,0.682397305965424,0.329437464475632,-0.321430414915085,0.887780070304871,0.280544310808182\n             ,-0.2230264544487,0.933570623397827,0.654389500617981,-0.325742691755295,0.682397305965424,0.668613970279694\n             ,-0.338565081357956,0.662064254283905,-0.866685390472412,0.374831438064575,0.329177558422089,-0.828080534934998\n             ,0.439521878957748,0.347998708486557,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.871505856513977\n             ,0.489616960287094,-0.0274355374276638,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.931710779666901\n             ,0.00594112882390618,0.363152533769608,-0.839360475540161,0.300623118877411,0.452879399061203,0.786464095115662\n             ,-0.0169835668057203,0.61740243434906,0.703794419765472,-0.329490423202515,0.629372298717499,0.650932729244232\n             ,-0.458716839551926,0.604868113994598,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.775201201438904\n             ,-0.315398722887039,0.547345161437988,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.719066202640533\n             ,-0.680389881134033,-0.14146888256073,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.398905754089355\n             ,-0.33735454082489,0.852681756019592,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.63077574968338\n             ,-0.739016532897949,0.236593529582024,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.43298476934433\n             ,-0.720436811447144,0.541751801967621,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.0704309269785881\n             ,-0.316668570041656,0.945917785167694,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.139990076422691\n             ,-0.714202582836151,0.685796916484833,0.289891242980957,-0.786550641059875,0.545253336429596,0.378215909004211\n             ,-0.383805245161057,0.842405080795288,0.378215909004211,-0.383805245161057,0.842405080795288,0.289891242980957\n             ,-0.786550641059875,0.545253336429596,0.526285588741302,-0.789061844348907,0.316867232322693,0.665505409240723\n             ,-0.470593899488449,0.579347848892212,0.175360679626465,-0.976183235645294,-0.127730026841164,0.175360679626465\n             ,-0.976183235645294,-0.127730026841164,0.562327146530151,-0.809826016426086,0.167242258787155,0.526285588741302\n             ,-0.789061844348907,0.316867232322693,0.147943705320358,-0.468890011310577,0.870778322219849,0.280544310808182\n             ,-0.2230264544487,0.933570623397827,0.329437464475632,-0.321430414915085,0.887780070304871,0.491936594247818\n             ,-0.382108181715012,0.782299041748047,0.913633346557617,-0.352534860372543,0.202467978000641,0.477010041475296\n             ,-0.793651044368744,0.377596825361252,0.147943705320358,-0.468890011310577,0.870778322219849,0.491936594247818\n             ,-0.382108181715012,0.782299041748047,0.870778322219849,-0.383099019527435,0.308188676834106,0.505195319652557\n             ,-0.403650730848312,0.762786865234375,0.913633346557617,-0.352534860372543,0.202467978000641,0.870778322219849\n             ,-0.383099019527435,0.308188676834106,0.44838610291481,-0.404915183782578,0.796864807605743,-0.381502002477646\n             ,-0.250341862440109,0.889823138713837,-0.369073897600174,-0.252177625894547,0.89453387260437,0.505195319652557\n             ,-0.403650730848312,0.762786865234375,0.44838610291481,-0.404915183782578,0.796864807605743,-0.88222748041153\n             ,-0.112881354987621,0.457091361284256,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.369073897600174\n             ,-0.252177625894547,0.89453387260437,-0.381502002477646,-0.250341862440109,0.889823138713837,-0.901903212070465\n             ,-0.103399723768234,0.419379383325577,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.998829364776611\n             ,0.0265166759490967,-0.0404574386775494,-0.996204435825348,0.0376567244529724,-0.0784778669476509,-0.716449618339539\n             ,-0.232984632253647,0.657585084438324,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.996204435825348\n             ,0.0376567244529724,-0.0784778669476509,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.829398572444916\n             ,-0.0672809854149818,0.554591119289398,-0.400434404611588,-0.0879500508308411,0.91209489107132,-0.716449618339539\n             ,-0.232984632253647,0.657585084438324,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.417631775140762\n             ,-0.138686746358871,0.897969722747803,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.703214585781097\n             ,0.00478603458032012,0.710961520671844,-0.400434404611588,-0.0879500508308411,0.91209489107132,-0.417631775140762\n             ,-0.138686746358871,0.897969722747803,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.927268087863922\n             ,0.115808911621571,0.356036812067032,-0.918597161769867,0.136136829853058,0.37100675702095,-0.703214585781097\n             ,0.00478603458032012,0.710961520671844,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.967624545097351\n             ,0.222042396664619,-0.119999624788761,-0.918597161769867,0.136136829853058,0.37100675702095,-0.927268087863922\n             ,0.115808911621571,0.356036812067032,0.949489533901215,-0.288099020719528,0.124372407793999,0.943572819232941\n             ,-0.310979694128037,-0.113850839436054,0.968242347240448,-0.211912021040916,-0.132665053009987,0.951669454574585\n             ,-0.257042765617371,0.168090030550957,0.353731364011765,-0.88641881942749,-0.298556119203568,0.536804795265198\n             ,-0.812591671943665,-0.227014124393463,0.891479134559631,-0.356151014566422,-0.280038207769394,0.746579051017761\n             ,-0.327975332736969,-0.578836619853973,0.422129124403,0.115602806210518,-0.899134576320648,0.541264474391937\n             ,0.0936620086431503,-0.835619688034058,0.233156397938728,0.373372942209244,-0.897903501987457,0.156071558594704\n             ,0.248666033148766,-0.955932438373566,-0.383682757616043,-0.370396196842194,0.845928013324738,-0.639851093292236\n             ,0.713299214839935,0.28599801659584,-0.615591168403625,0.608454763889313,0.500829696655273,-0.541773617267609\n             ,0.383253455162048,0.748062908649445,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.536804795265198\n             ,-0.812591671943665,-0.227014124393463,0.722857892513275,-0.480003207921982,-0.497064769268036,0.586520791053772\n             ,-0.278485208749771,-0.760551989078522,0.891479134559631,-0.356151014566422,-0.280038207769394,-0.176827967166901\n             ,-0.795711040496826,-0.579288959503174,0.056479137390852,-0.856393754482269,-0.513224899768829,0.318273335695267\n             ,-0.280295252799988,-0.905613958835602,-0.0838983133435249,-0.180199861526489,-0.980045437812805,-0.613127768039703\n             ,0.486845344305038,-0.622138202190399,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.829805314540863\n             ,0.320066124200821,-0.457144170999527,-0.59022468328476,0.354267239570618,-0.725347936153412,0.233156397938728\n             ,0.373372942209244,-0.897903501987457,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.184135809540749\n             ,0.315396666526794,-0.930923700332642,0.156071558594704,0.248666033148766,-0.955932438373566,-0.866832733154297\n             ,0.233201399445534,-0.440701872110367,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.847418308258057\n             ,0.181933835148811,-0.498780846595764,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.863866031169891\n             ,0.184018969535828,-0.468905657529831,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.874023795127869\n             ,0.388026893138886,-0.292433828115463,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.828140676021576\n             ,-0.416389226913452,0.375237315893173,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.843237459659576\n             ,0.525120079517365,-0.114889100193977,-0.713566780090332,0.700178563594818,0.0239257458597422,0.776516377925873\n             ,0.531664490699768,-0.338164389133453,0.865038812160492,0.500161468982697,0.0393240377306938,0.610888957977295\n             ,-0.781325817108154,0.127846196293831,0.559202313423157,-0.768743932247162,-0.310363441705704,0.277932703495026\n             ,-0.692557215690613,-0.665670990943909,0.467275589704514,0.564712345600128,-0.680259943008423,0.776516377925873\n             ,0.531664490699768,-0.338164389133453,0.559202313423157,-0.768743932247162,-0.310363441705704,-0.153365463018417\n             ,0.631252944469452,-0.760262310504913,0.136670753359795,0.566407382488251,-0.812713861465454,-0.0725360587239265\n             ,-0.598356962203979,-0.797939538955688,-0.398402363061905,-0.552445113658905,-0.732174813747406,0.277932703495026\n             ,-0.692557215690613,-0.665670990943909,-0.0725360587239265,-0.598356962203979,-0.797939538955688,0.136670753359795\n             ,0.566407382488251,-0.812713861465454,0.467275589704514,0.564712345600128,-0.680259943008423,-0.398402363061905\n             ,-0.552445113658905,-0.732174813747406,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.343562453985214\n             ,0.683792293071747,-0.643733561038971,-0.153365463018417,0.631252944469452,-0.760262310504913,0.733602523803711\n             ,0.10412222892046,-0.671554863452911,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.931353688240051\n             ,0.363742500543594,0.0164845213294029,0.809532463550568,0.353956818580627,0.468371391296387,0.639626801013947\n             ,-0.543238401412964,0.543847024440765,0.784134984016418,-0.509350836277008,-0.354533582925797,-0.809815943241119\n             ,-0.0024391699116677,-0.586678981781006,-0.983289659023285,0.179070711135864,0.032787948846817,-0.38756388425827\n             ,0.403812289237976,-0.82869166135788,-0.0492830350995064,-0.186444014310837,-0.981228709220886,-0.0222479663789272\n             ,-0.27899968624115,-0.960033416748047,-0.795176029205322,0.587453246116638,0.150312438607216,-0.728462755680084\n             ,0.461005359888077,-0.506770253181458,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.845747351646423\n             ,-0.528353095054626,0.0745282098650932,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.193201750516891\n             ,-0.134490892291069,-0.971897780895233,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.299906134605408\n             ,-0.817314743995667,-0.491988658905029,0.056479137390852,-0.856393754482269,-0.513224899768829,0.353731364011765\n             ,-0.88641881942749,-0.298556119203568,0.746579051017761,-0.327975332736969,-0.578836619853973,0.318273335695267\n             ,-0.280295252799988,-0.905613958835602,0.604855418205261,-0.787497401237488,-0.118312001228333,0.855425655841827\n             ,0.486632764339447,-0.177300468087196,0.802787482738495,0.346281617879868,0.485408395528793,0.624463975429535\n             ,-0.657274067401886,0.421942621469498,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.725547671318054\n             ,0.0196763575077057,-0.687890529632568,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.299906134605408\n             ,-0.817314743995667,-0.491988658905029,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.177617996931076\n             ,0.0687198787927628,-0.981697201728821,-0.170505315065384,0.193187981843948,-0.96623307466507,-0.566148936748505\n             ,0.251458436250687,-0.785012185573578,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.796081125736237\n             ,0.269071251153946,-0.542084395885468,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.512617945671082\n             ,0.132903546094894,-0.848268508911133,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.769991517066956\n             ,0.178484797477722,-0.612581610679626,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.854514360427856\n             ,0.214296534657478,-0.473161995410919,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.184135809540749\n             ,0.315396666526794,-0.930923700332642,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.613127768039703\n             ,0.486845344305038,-0.622138202190399,0.992731213569641,-0.118552401661873,0.0207367613911629,0.962084114551544\n             ,-0.260001808404922,-0.0824210941791534,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.951669454574585\n             ,-0.257042765617371,0.168090030550957,0.971294820308685,-0.11888038367033,0.206043228507042,0.989946246147156\n             ,-0.126425102353096,-0.0634277909994125,0.972172915935516,-0.00723095051944256,0.234152868390083,0.971294820308685\n             ,-0.11888038367033,0.206043228507042,0.981179654598236,-0.112972341477871,-0.156600564718246,0.968242347240448\n             ,-0.211912021040916,-0.132665053009987,0.943572819232941,-0.310979694128037,-0.113850839436054,0.821827530860901\n             ,-0.195920065045357,-0.53499048948288,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.368462383747101\n             ,-0.106815822422504,-0.923485696315765,0.383778035640717,0.0243120118975639,-0.923105239868164,0.0997140929102898\n             ,0.107741750776768,-0.989165723323822,0.00292694312520325,-0.0230234544724226,-0.99973064661026,-0.804398477077484\n             ,0.375305235385895,-0.460531324148178,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.850323617458344\n             ,0.228136301040649,-0.474239945411682,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.826255619525909\n             ,0.440138310194016,-0.351539462804794,-0.801694869995117,0.527419447898865,-0.281272232532501,-0.904132783412933\n             ,0.388770788908005,-0.177203923463821,0.855425655841827,0.486632764339447,-0.177300468087196,0.604855418205261\n             ,-0.787497401237488,-0.118312001228333,0.441250443458557,-0.840362787246704,-0.314783275127411,0.785753786563873\n             ,0.386755406856537,-0.482712358236313,0.785753786563873,0.386755406856537,-0.482712358236313,0.441250443458557\n             ,-0.840362787246704,-0.314783275127411,0.138132452964783,-0.828281044960022,-0.54301929473877,0.505264282226563\n             ,0.378391265869141,-0.775582432746887,0.505264282226563,0.378391265869141,-0.775582432746887,0.138132452964783\n             ,-0.828281044960022,-0.54301929473877,-0.136814370751381,-0.897029936313629,-0.42026075720787,0.077034167945385\n             ,0.455207884311676,-0.88704651594162,0.077034167945385,0.455207884311676,-0.88704651594162,-0.136814370751381\n             ,-0.897029936313629,-0.42026075720787,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.28214168548584\n             ,0.541098833084106,-0.792217254638672,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.490713983774185\n             ,0.668629288673401,-0.558690071105957,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.302752912044525\n             ,-0.830289721488953,-0.467931240797043,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.479781299829483\n             ,-0.760774612426758,-0.437072038650513,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.728462755680084\n             ,0.461005359888077,-0.506770253181458,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.0315269827842712\n             ,0.564418613910675,0.824886441230774,0.390523910522461,0.243563205003738,0.88778829574585,-0.419215679168701\n             ,-0.523534297943115,0.741734504699707,0.66844254732132,0.71253913640976,-0.213242888450623,0.888628959655762\n             ,0.438762068748474,0.133515372872353,0.886778235435486,0.377031594514847,0.267341554164886,0.399906992912292\n             ,0.90941196680069,-0.11421176046133,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.196683183312416\n             ,0.297644048929214,-0.934196829795837,-0.187843710184097,0.254132181406021,-0.948752641677856,-0.682030558586121\n             ,0.27886825799942,-0.676067173480988,-0.217101514339447,-0.0525678582489491,-0.974732518196106,-0.211497768759727\n             ,-0.562794804573059,-0.799081146717072,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.676543116569519\n             ,-0.0153456926345825,-0.73624312877655,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.857439279556274\n             ,0.218963667750359,-0.465674519538879,-0.876750707626343,0.238855347037315,-0.417440205812454,-0.975552141666412\n             ,0.149593591690063,-0.16099639236927,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.801694869995117\n             ,0.527419447898865,-0.281272232532501,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.894487380981445\n             ,0.445400327444077,-0.0388705171644688,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.876750707626343\n             ,0.238855347037315,-0.417440205812454,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.673633635044098\n             ,0.289073169231415,-0.680187046527863,-0.196683183312416,0.297644048929214,-0.934196829795837,0.243145853281021\n             ,0.221795409917831,-0.944291710853577,0.24560159444809,0.232358887791634,-0.941110610961914,-0.187843710184097\n             ,0.254132181406021,-0.948752641677856,0.900178790092468,-0.431453764438629,0.0593785345554352,0.846972167491913\n             ,-0.511904895305634,-0.14349739253521,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.92520534992218\n             ,-0.376655071973801,-0.0461085550487041,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.9922234416008\n             ,-0.1217075958848,0.0260745380073786,-0.828080534934998,0.439521878957748,0.347998708486557,-0.542648077011108\n             ,0.604446232318878,0.583247661590576,0.605372726917267,0.000812157464679331,0.795941710472107,0.301932573318481\n             ,-0.883707880973816,0.357627093791962,0.423083633184433,0.0620496086776257,0.903963565826416,0.752377092838287\n             ,0.158552542328835,-0.639366745948792,0.333965450525284,0.337952494621277,-0.879917681217194,0.314953178167343\n             ,0.413695752620697,-0.854201555252075,0.69469678401947,0.0795350298285484,-0.714891970157623,-0.625715851783752\n             ,0.58097767829895,-0.520523428916931,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.233997270464897\n             ,0.489457190036774,-0.840045750141144,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.657665491104126\n             ,0.524985373020172,-0.540246665477753,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.801694869995117\n             ,0.527419447898865,-0.281272232532501,-0.625715851783752,0.58097767829895,-0.520523428916931,-0.217736855149269\n             ,0.594750702381134,-0.773861885070801,0.314953178167343,0.413695752620697,-0.854201555252075,0.333965450525284\n             ,0.337952494621277,-0.879917681217194,-0.233997270464897,0.489457190036774,-0.840045750141144,0.268678843975067\n             ,0.187903970479965,-0.944724142551422,0.286524504423141,0.225191175937653,-0.931231796741486,0.676566541194916\n             ,0.144181370735168,-0.722128391265869,0.655851304531097,0.12275330722332,-0.744842708110809,-0.653601109981537\n             ,0.351934164762497,-0.670035779476166,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.214722737669945\n             ,0.271103382110596,-0.938294768333435,-0.663710594177246,0.281592607498169,-0.692960262298584,-0.663710594177246\n             ,0.281592607498169,-0.692960262298584,-0.85853385925293,0.234514445066452,-0.455985277891159,-0.843356728553772\n             ,0.326204419136047,-0.427013009786606,-0.653601109981537,0.351934164762497,-0.670035779476166,0.286524504423141\n             ,0.225191175937653,-0.931231796741486,0.268678843975067,0.187903970479965,-0.944724142551422,-0.214722737669945\n             ,0.271103382110596,-0.938294768333435,-0.214377388358116,0.321097940206528,-0.922463238239288,0.24560159444809\n             ,0.232358887791634,-0.941110610961914,0.243145853281021,0.221795409917831,-0.944291710853577,0.639175117015839\n             ,0.0817547887563705,-0.764703452587128,0.653478145599365,0.112765118479729,-0.748498737812042,-0.892978370189667\n             ,-0.00842274446040392,-0.450020730495453,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.689231038093567\n             ,-0.628963589668274,-0.359674036502838,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.501005291938782\n             ,-0.576619863510132,-0.645370602607727,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.892978370189667\n             ,-0.00842274446040392,-0.450020730495453,-0.676543116569519,-0.0153456926345825,-0.73624312877655,0.0649978742003441\n             ,-0.592735111713409,-0.802770435810089,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.645673513412476\n             ,-0.0602749027311802,-0.761231005191803,0.442950963973999,-0.635696709156036,-0.632205784320831,-0.801694869995117\n             ,0.527419447898865,-0.281272232532501,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.613127768039703\n             ,0.486845344305038,-0.622138202190399,-0.625715851783752,0.58097767829895,-0.520523428916931,-0.625715851783752\n             ,0.58097767829895,-0.520523428916931,-0.613127768039703,0.486845344305038,-0.622138202190399,-0.206791058182716\n             ,0.492802500724792,-0.845211863517761,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.217736855149269\n             ,0.594750702381134,-0.773861885070801,-0.206791058182716,0.492802500724792,-0.845211863517761,0.233156397938728\n             ,0.373372942209244,-0.897903501987457,0.314953178167343,0.413695752620697,-0.854201555252075,0.314953178167343\n             ,0.413695752620697,-0.854201555252075,0.233156397938728,0.373372942209244,-0.897903501987457,0.541264474391937\n             ,0.0936620086431503,-0.835619688034058,0.69469678401947,0.0795350298285484,-0.714891970157623,-0.676543116569519\n             ,-0.0153456926345825,-0.73624312877655,-0.892978370189667,-0.00842274446040392,-0.450020730495453,-0.876750707626343\n             ,0.238855347037315,-0.417440205812454,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.682030558586121\n             ,0.27886825799942,-0.676067173480988,-0.187843710184097,0.254132181406021,-0.948752641677856,-0.217101514339447\n             ,-0.0525678582489491,-0.974732518196106,-0.676543116569519,-0.0153456926345825,-0.73624312877655,0.645673513412476\n             ,-0.0602749027311802,-0.761231005191803,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.24560159444809\n             ,0.232358887791634,-0.941110610961914,0.653478145599365,0.112765118479729,-0.748498737812042,0.987106621265411\n             ,-0.147132456302643,-0.0630284249782562,0.93778657913208,-0.340576171875,-0.0675588026642799,0.872841775417328\n             ,-0.161784738302231,-0.460405200719833,0.892382204532623,-0.0374441854655743,-0.449724316596985,-0.924062490463257\n             ,0.166337832808495,-0.344151526689529,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.804398477077484\n             ,0.375305235385895,-0.460531324148178,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.633183360099792\n             ,0.75979870557785,-0.147596448659897,-0.343562453985214,0.683792293071747,-0.643733561038971,-0.658661007881165\n             ,-0.541524648666382,-0.52241438627243,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.383682757616043\n             ,-0.370396196842194,0.845928013324738,-0.696337580680847,-0.401266604661942,0.595062255859375,-0.639851093292236\n             ,0.713299214839935,0.28599801659584,-0.541773617267609,0.383253455162048,0.748062908649445,-0.127582266926765\n             ,-0.6490518450737,0.749969661235809,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.390523910522461\n             ,0.243563205003738,0.88778829574585,0.626252830028534,0.308739811182022,0.715882003307343,-0.248274028301239\n             ,-0.562410414218903,0.788704335689545,-0.689171850681305,-0.406394809484482,0.599904477596283,0.390523910522461\n             ,0.243563205003738,0.88778829574585,-0.689171850681305,-0.406394809484482,0.599904477596283,-0.419215679168701\n             ,-0.523534297943115,0.741734504699707,-0.0838983133435249,-0.180199861526489,-0.980045437812805,-0.193201750516891\n             ,-0.134490892291069,-0.971897780895233,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.176827967166901\n             ,-0.795711040496826,-0.579288959503174,-0.177617996931076,0.0687198787927628,-0.981697201728821,0.00292694312520325\n             ,-0.0230234544724226,-0.99973064661026,0.0997140929102898,0.107741750776768,-0.989165723323822,-0.170505315065384\n             ,0.193187981843948,-0.96623307466507,-0.217101514339447,-0.0525678582489491,-0.974732518196106,0.194131925702095\n             ,-0.0336651504039764,-0.980397582054138,0.0649978742003441,-0.592735111713409,-0.802770435810089,-0.211497768759727\n             ,-0.562794804573059,-0.799081146717072,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.775201201438904\n             ,-0.315398722887039,0.547345161437988,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.96207994222641\n             ,0.0375091098248959,0.270176410675049,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.408054858446121\n             ,-0.272179991006851,0.871440947055817,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.775201201438904\n             ,-0.315398722887039,0.547345161437988,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.398905754089355\n             ,-0.33735454082489,0.852681756019592,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.0792728736996651\n             ,-0.368663102388382,0.926176726818085,-0.0792728736996651,-0.368663102388382,0.926176726818085,-0.0704309269785881\n             ,-0.316668570041656,0.945917785167694,0.378215909004211,-0.383805245161057,0.842405080795288,0.340047508478165\n             ,-0.388343751430511,0.856479287147522,0.340047508478165,-0.388343751430511,0.856479287147522,0.378215909004211\n             ,-0.383805245161057,0.842405080795288,0.665505409240723,-0.470593899488449,0.579347848892212,0.640090823173523\n             ,-0.393064320087433,0.660139560699463,0.665505409240723,-0.470593899488449,0.579347848892212,0.78835541009903\n             ,-0.474211633205414,0.391942739486694,0.867793679237366,-0.309993803501129,0.38837856054306,0.640090823173523\n             ,-0.393064320087433,0.660139560699463,0.998525857925415,0.0400822311639786,0.0366002470254898,0.92520534992218\n             ,-0.376655071973801,-0.0461085550487041,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.930242419242859\n             ,-0.158916160464287,0.330748707056046,0.930242419242859,-0.158916160464287,0.330748707056046,0.816507577896118\n             ,-0.574229061603546,-0.0598032623529434,0.685771405696869,-0.727804124355316,0.00433491868898273,0.805302381515503\n             ,-0.358387529850006,0.472277879714966,0.301932573318481,-0.883707880973816,0.357627093791962,0.289558619260788\n             ,-0.713769853115082,0.637721240520477,0.423083633184433,0.0620496086776257,0.903963565826416,0.989946246147156\n             ,-0.126425102353096,-0.0634277909994125,0.981179654598236,-0.112972341477871,-0.156600564718246,0.780589640140533\n             ,-0.0567772276699543,-0.622459769248962,0.78181403875351,-0.124027468264103,-0.611051499843597,-0.665158569812775\n             ,0.0713190585374832,0.743288397789001,-0.211948931217194,0.670887529850006,0.710624814033508,-0.0997487902641296\n             ,0.343725502490997,0.933757483959198,-0.211948931217194,0.670887529850006,0.710624814033508,0.129296213388443\n             ,0.717355608940125,0.684604585170746,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.439218908548355\n             ,-0.51500540971756,-0.736108779907227,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.839367032051086\n             ,0.0223368648439646,-0.543105900287628,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.639851093292236\n             ,0.713299214839935,0.28599801659584,-0.696337580680847,-0.401266604661942,0.595062255859375,-0.828140676021576\n             ,-0.416389226913452,0.375237315893173,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.985335469245911\n             ,0.0123848039656878,-0.170178011059761,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.894487380981445\n             ,0.445400327444077,-0.0388705171644688,-0.828080534934998,0.439521878957748,0.347998708486557,-0.9922234416008\n             ,-0.1217075958848,0.0260745380073786,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.665158569812775\n             ,0.0713190585374832,0.743288397789001,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.26332488656044\n             ,-0.487629622220993,0.832392573356628,-0.26332488656044,-0.487629622220993,0.832392573356628,-0.0997487902641296\n             ,0.343725502490997,0.933757483959198,0.051387831568718,-0.174088895320892,0.983388185501099,-0.0260992348194122\n             ,-0.974703729152679,0.221971705555916,0.107415564358234,-0.480258971452713,0.870524644851685,0.508102118968964\n             ,0.373251259326935,0.776218891143799,0.423083633184433,0.0620496086776257,0.903963565826416,0.289558619260788\n             ,-0.713769853115082,0.637721240520477,0.214603096246719,0.506344735622406,0.835200905799866,-0.903217494487762\n             ,-0.152761682868004,0.401076048612595,-0.542648077011108,0.604446232318878,0.583247661590576,-0.454762816429138\n             ,0.657830238342285,0.60037499666214,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.882815718650818\n             ,-0.369268298149109,0.290305644273758,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.843237459659576\n             ,0.525120079517365,-0.114889100193977,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.839367032051086\n             ,0.0223368648439646,-0.543105900287628,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.863866031169891\n             ,0.184018969535828,-0.468905657529831,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.512617945671082\n             ,0.132903546094894,-0.848268508911133,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.725547671318054\n             ,0.0196763575077057,-0.687890529632568,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.177617996931076\n             ,0.0687198787927628,-0.981697201728821,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.441881209611893\n             ,-0.050617303699255,-0.89564436674118,-0.193201750516891,-0.134490892291069,-0.971897780895233,0.00292694312520325\n             ,-0.0230234544724226,-0.99973064661026,-0.177617996931076,0.0687198787927628,-0.981697201728821,-0.193201750516891\n             ,-0.134490892291069,-0.971897780895233,-0.0838983133435249,-0.180199861526489,-0.980045437812805,0.318273335695267\n             ,-0.280295252799988,-0.905613958835602,0.368462383747101,-0.106815822422504,-0.923485696315765,0.00292694312520325\n             ,-0.0230234544724226,-0.99973064661026,-0.0838983133435249,-0.180199861526489,-0.980045437812805,0.989946246147156\n             ,-0.126425102353096,-0.0634277909994125,0.78181403875351,-0.124027468264103,-0.611051499843597,0.746579051017761\n             ,-0.327975332736969,-0.578836619853973,0.891479134559631,-0.356151014566422,-0.280038207769394,0.815547049045563\n             ,-0.485381871461868,-0.315099239349365,0.891479134559631,-0.356151014566422,-0.280038207769394,0.586520791053772\n             ,-0.278485208749771,-0.760551989078522,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.987106621265411\n             ,-0.147132456302643,-0.0630284249782562,0.892382204532623,-0.0374441854655743,-0.449724316596985,0.883630573749542\n             ,-0.0664602965116501,-0.463443666696548,0.881715893745422,0.054974939674139,-0.468566834926605,0.991608023643494\n             ,-0.114275835454464,-0.060452651232481,0.995975911617279,-0.0798337981104851,-0.0407244116067886,0.885001957416534\n             ,0.0480887815356255,-0.463097155094147,0.897607445716858,-0.182163774967194,-0.401394128799438,0.932035446166992\n             ,0.0906825214624405,-0.350836962461472,0.752377092838287,0.158552542328835,-0.639366745948792,0.69469678401947\n             ,0.0795350298285484,-0.714891970157623,0.821827530860901,-0.195920065045357,-0.53499048948288,0.897607445716858\n             ,-0.182163774967194,-0.401394128799438,0.69469678401947,0.0795350298285484,-0.714891970157623,0.541264474391937\n             ,0.0936620086431503,-0.835619688034058,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.821827530860901\n             ,-0.195920065045357,-0.53499048948288,0.541264474391937,0.0936620086431503,-0.835619688034058,0.422129124403\n             ,0.115602806210518,-0.899134576320648,0.881715893745422,0.054974939674139,-0.468566834926605,0.885001957416534\n             ,0.0480887815356255,-0.463097155094147,0.655851304531097,0.12275330722332,-0.744842708110809,0.676566541194916\n             ,0.144181370735168,-0.722128391265869,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.892382204532623\n             ,-0.0374441854655743,-0.449724316596985,0.653478145599365,0.112765118479729,-0.748498737812042,0.639175117015839\n             ,0.0817547887563705,-0.764703452587128,0.897607445716858,-0.182163774967194,-0.401394128799438,0.821827530860901\n             ,-0.195920065045357,-0.53499048948288,0.943572819232941,-0.310979694128037,-0.113850839436054,0.92520534992218\n             ,-0.376655071973801,-0.0461085550487041,0.998525857925415,0.0400822311639786,0.0366002470254898,0.932035446166992\n             ,0.0906825214624405,-0.350836962461472,0.897607445716858,-0.182163774967194,-0.401394128799438,0.92520534992218\n             ,-0.376655071973801,-0.0461085550487041,0.991423904895782,0.113214619457722,0.0652767568826675,0.992731213569641\n             ,-0.118552401661873,0.0207367613911629,0.971294820308685,-0.11888038367033,0.206043228507042,0.972172915935516\n             ,-0.00723095051944256,0.234152868390083,0.991423904895782,0.113214619457722,0.0652767568826675,0.972172915935516\n             ,-0.00723095051944256,0.234152868390083,0.815547049045563,-0.485381871461868,-0.315099239349365,0.80362457036972\n             ,-0.592847883701324,0.052143108099699,0.588976085186005,-0.561100006103516,0.58161324262619,0.995399534702301\n             ,0.0302368272095919,0.0909145176410675,0.80362457036972,-0.592847883701324,0.052143108099699,0.898760318756104\n             ,0.357274115085602,0.254135996103287,0.960353672504425,0.263352990150452,0.0914659649133682,0.588976085186005\n             ,-0.561100006103516,0.58161324262619,0.0119833052158356,-0.684736132621765,0.728692531585693,0.750469028949738\n             ,0.503480017185211,0.42814028263092,0.898760318756104,0.357274115085602,0.254135996103287,0.588976085186005,-0.561100006103516\n             ,0.58161324262619,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.757972836494446,-0.133171454071999\n             ,-0.63854718208313,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.843237459659576,0.525120079517365\n             ,-0.114889100193977,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.757972836494446,-0.133171454071999\n             ,-0.63854718208313,-0.924443244934082,0.266406655311584,-0.272822648286819,0.603638291358948,-0.670441269874573\n             ,-0.431427150964737,0.872841775417328,-0.161784738302231,-0.460405200719833,0.93778657913208,-0.340576171875\n             ,-0.0675588026642799,0.581761598587036,-0.790978848934174,-0.189488589763641,0.932035446166992,0.0906825214624405\n             ,-0.350836962461472,0.998525857925415,0.0400822311639786,0.0366002470254898,0.977894842624664,0.203556552529335\n             ,0.0478159449994564,0.904317140579224,0.203987643122673,-0.3749660551548,0.932035446166992,0.0906825214624405\n             ,-0.350836962461472,0.904317140579224,0.203987643122673,-0.3749660551548,0.74667090177536,0.1879021525383,-0.638102948665619\n             ,0.752377092838287,0.158552542328835,-0.639366745948792,0.333965450525284,0.337952494621277,-0.879917681217194\n             ,0.752377092838287,0.158552542328835,-0.639366745948792,0.74667090177536,0.1879021525383,-0.638102948665619,0.32976895570755\n             ,0.307349354028702,-0.892630279064178,-0.233997270464897,0.489457190036774,-0.840045750141144,0.333965450525284\n             ,0.337952494621277,-0.879917681217194,0.32976895570755,0.307349354028702,-0.892630279064178,-0.232812166213989\n             ,0.426294058561325,-0.874112010002136,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.233997270464897\n             ,0.489457190036774,-0.840045750141144,-0.232812166213989,0.426294058561325,-0.874112010002136,-0.671548306941986\n             ,0.466394305229187,-0.575759708881378,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.657665491104126\n             ,0.524985373020172,-0.540246665477753,-0.671548306941986,0.466394305229187,-0.575759708881378,-0.820989012718201\n             ,0.473643779754639,-0.318808138370514,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.971879303455353\n             ,-0.208401709794998,0.109632924199104,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.975552141666412\n             ,0.149593591690063,-0.16099639236927,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.719066202640533\n             ,-0.680389881134033,-0.14146888256073,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.967361629009247\n             ,-0.0953836515545845,-0.234762668609619,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.703129649162292\n             ,0.0220469851046801,0.710719764232636,-0.93060040473938,0.126688674092293,0.343413561582565,-0.96207994222641\n             ,0.0375091098248959,0.270176410675049,-0.866685390472412,0.374831438064575,0.329177558422089,-0.801453590393066\n             ,-0.0788522064685822,0.592835962772369,-0.678687632083893,0.530943989753723,0.507426381111145,-0.828080534934998\n             ,0.439521878957748,0.347998708486557,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.96207994222641\n             ,0.0375091098248959,0.270176410675049,-0.93060040473938,0.126688674092293,0.343413561582565,-0.964663922786713\n             ,0.191057458519936,-0.18144017457962,0.951669454574585,-0.257042765617371,0.168090030550957,0.968242347240448\n             ,-0.211912021040916,-0.132665053009987,0.981179654598236,-0.112972341477871,-0.156600564718246,0.971294820308685\n             ,-0.11888038367033,0.206043228507042,0.981179654598236,-0.112972341477871,-0.156600564718246,0.968242347240448\n             ,-0.211912021040916,-0.132665053009987,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.780589640140533\n             ,-0.0567772276699543,-0.622459769248962,0.383778035640717,0.0243120118975639,-0.923105239868164,0.780589640140533\n             ,-0.0567772276699543,-0.622459769248962,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.422129124403\n             ,0.115602806210518,-0.899134576320648,0.383778035640717,0.0243120118975639,-0.923105239868164,0.422129124403\n             ,0.115602806210518,-0.899134576320648,0.156071558594704,0.248666033148766,-0.955932438373566,0.0997140929102898\n             ,0.107741750776768,-0.989165723323822,-0.184135809540749,0.315396666526794,-0.930923700332642,-0.170505315065384\n             ,0.193187981843948,-0.96623307466507,0.0997140929102898,0.107741750776768,-0.989165723323822,0.156071558594704\n             ,0.248666033148766,-0.955932438373566,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.170505315065384\n             ,0.193187981843948,-0.96623307466507,-0.184135809540749,0.315396666526794,-0.930923700332642,-0.59022468328476\n             ,0.354267239570618,-0.725347936153412,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.829805314540863\n             ,0.320066124200821,-0.457144170999527,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.566148936748505\n             ,0.251458436250687,-0.785012185573578,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.98767364025116\n             ,-0.155731916427612,-0.0157585926353931,0.949489533901215,-0.288099020719528,0.124372407793999,0.951669454574585\n             ,-0.257042765617371,0.168090030550957,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.854514360427856\n             ,0.214296534657478,-0.473161995410919,-0.850323617458344,0.228136301040649,-0.474239945411682,0.846972167491913\n             ,-0.511904895305634,-0.14349739253521,0.900178790092468,-0.431453764438629,0.0593785345554352,0.973673224449158\n             ,-0.222424849867821,-0.0498761273920536,0.660678803920746,-0.179935500025749,0.728784441947937,0.884072363376617\n             ,-0.159779712557793,0.439188450574875,0.861376106739044,-0.246860504150391,0.443949490785599,0.664143323898315\n             ,-0.190197542309761,0.72300660610199,-0.93060040473938,0.126688674092293,0.343413561582565,-0.703129649162292\n             ,0.0220469851046801,0.710719764232636,-0.698271632194519,0.0533006526529789,0.713845789432526,-0.924485385417938\n             ,0.137891575694084,0.355404943227768,0.519910156726837,-0.607850134372711,0.600176334381104,0.477010041475296\n             ,-0.793651044368744,0.377596825361252,0.913633346557617,-0.352534860372543,0.202467978000641,-0.388236194849014\n             ,-0.50770115852356,0.769098341464996,-0.0647715702652931,-0.0269695688039064,0.997535645961761,0.147943705320358\n             ,-0.468890011310577,0.870778322219849,0.519910156726837,-0.607850134372711,0.600176334381104,0.913633346557617\n             ,-0.352534860372543,0.202467978000641,0.505195319652557,-0.403650730848312,0.762786865234375,0.505195319652557\n             ,-0.403650730848312,0.762786865234375,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.415356457233429\n             ,-0.555049777030945,0.720693230628967,0.519910156726837,-0.607850134372711,0.600176334381104,-0.901903212070465\n             ,-0.103399723768234,0.419379383325577,-0.845879793167114,-0.333898961544037,0.415931314229965,-0.415356457233429\n             ,-0.555049777030945,0.720693230628967,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.845879793167114\n             ,-0.333898961544037,0.415931314229965,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.996204435825348\n             ,0.0376567244529724,-0.0784778669476509,-0.938492894172668,-0.335133403539658,0.0831665322184563,0.682205855846405\n             ,-0.688040673732758,-0.247376576066017,0.685771405696869,-0.727804124355316,0.00433491868898273,0.816507577896118\n             ,-0.574229061603546,-0.0598032623529434,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.900178790092468\n             ,-0.431453764438629,0.0593785345554352,0.949489533901215,-0.288099020719528,0.124372407793999,0.98767364025116\n             ,-0.155731916427612,-0.0157585926353931,0.846972167491913,-0.511904895305634,-0.14349739253521,0.682205855846405\n             ,-0.688040673732758,-0.247376576066017,0.816507577896118,-0.574229061603546,-0.0598032623529434,-0.863597929477692\n             ,0.181174650788307,-0.470504373311996,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.854514360427856\n             ,0.214296534657478,-0.473161995410919,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.863597929477692\n             ,0.181174650788307,-0.470504373311996,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.796034395694733\n             ,0.305417150259018,-0.522541463375092,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.850323617458344\n             ,0.228136301040649,-0.474239945411682,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.798423051834106\n             ,0.345685392618179,-0.492972820997238,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.419204741716385\n             ,0.619329035282135,0.66385155916214,-0.211948931217194,0.670887529850006,0.710624814033508,-0.665158569812775\n             ,0.0713190585374832,0.743288397789001,-0.454762816429138,0.657830238342285,0.60037499666214,0.051387831568718\n             ,-0.174088895320892,0.983388185501099,0.289558619260788,-0.713769853115082,0.637721240520477,-0.0260992348194122\n             ,-0.974703729152679,0.221971705555916,0.559202313423157,-0.768743932247162,-0.310363441705704,0.610888957977295\n             ,-0.781325817108154,0.127846196293831,0.639626801013947,-0.543238401412964,0.543847024440765,0.91938704252243\n             ,-0.184946089982986,-0.347163438796997,0.776516377925873,0.531664490699768,-0.338164389133453,0.467275589704514\n             ,0.564712345600128,-0.680259943008423,0.228658348321915,0.96535587310791,-0.125711753964424,0.287440627813339\n             ,0.955214440822601,-0.070308543741703,0.182189047336578,0.963832557201386,-0.194509625434875,0.136670753359795\n             ,0.566407382488251,-0.812713861465454,-0.153365463018417,0.631252944469452,-0.760262310504913,0.158467367291451\n             ,0.970077335834503,-0.183951318264008,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.0725360587239265\n             ,-0.598356962203979,-0.797939538955688,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.285298675298691\n             ,0.0749257579445839,-0.95550549030304,0.865038812160492,0.500161468982697,0.0393240377306938,0.332606196403503\n             ,0.942266285419464,-0.0388250686228275,0.399906992912292,0.90941196680069,-0.11421176046133,0.886778235435486\n             ,0.377031594514847,0.267341554164886,0.467275589704514,0.564712345600128,-0.680259943008423,0.136670753359795\n             ,0.566407382488251,-0.812713861465454,0.182189047336578,0.963832557201386,-0.194509625434875,0.228658348321915\n             ,0.96535587310791,-0.125711753964424,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.658661007881165\n             ,-0.541524648666382,-0.52241438627243,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.285298675298691\n             ,0.0749257579445839,-0.95550549030304,-0.343562453985214,0.683792293071747,-0.643733561038971,0.191059574484825\n             ,0.965591907501221,-0.17643266916275,0.158467367291451,0.970077335834503,-0.183951318264008,-0.153365463018417\n             ,0.631252944469452,-0.760262310504913,0.277932703495026,-0.692557215690613,-0.665670990943909,0.505863070487976\n             ,-0.10451452434063,-0.856258869171143,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.0725360587239265\n             ,-0.598356962203979,-0.797939538955688,0.277932703495026,-0.692557215690613,-0.665670990943909,0.559202313423157\n             ,-0.768743932247162,-0.310363441705704,0.91938704252243,-0.184946089982986,-0.347163438796997,0.505863070487976\n             ,-0.10451452434063,-0.856258869171143,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.795176029205322\n             ,0.587453246116638,0.150312438607216,-0.845747351646423,-0.528353095054626,0.0745282098650932,-0.439218908548355\n             ,-0.51500540971756,-0.736108779907227,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.845747351646423\n             ,-0.528353095054626,0.0745282098650932,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.549123287200928\n             ,-0.730513632297516,-0.405972242355347,0.536804795265198,-0.812591671943665,-0.227014124393463,0.604855418205261\n             ,-0.787497401237488,-0.118312001228333,0.624463975429535,-0.657274067401886,0.421942621469498,0.722857892513275\n             ,-0.480003207921982,-0.497064769268036,0.722857892513275,-0.480003207921982,-0.497064769268036,0.624463975429535\n             ,-0.657274067401886,0.421942621469498,0.802787482738495,0.346281617879868,0.485408395528793,0.931353688240051\n             ,0.363742500543594,0.0164845213294029,0.931353688240051,0.363742500543594,0.0164845213294029,0.802787482738495\n             ,0.346281617879868,0.485408395528793,0.855425655841827,0.486632764339447,-0.177300468087196,0.809532463550568\n             ,0.353956818580627,0.468371391296387,0.441250443458557,-0.840362787246704,-0.314783275127411,0.604855418205261\n             ,-0.787497401237488,-0.118312001228333,0.536804795265198,-0.812591671943665,-0.227014124393463,0.353731364011765\n             ,-0.88641881942749,-0.298556119203568,0.138132452964783,-0.828281044960022,-0.54301929473877,0.441250443458557\n             ,-0.840362787246704,-0.314783275127411,0.353731364011765,-0.88641881942749,-0.298556119203568,0.056479137390852\n             ,-0.856393754482269,-0.513224899768829,-0.136814370751381,-0.897029936313629,-0.42026075720787,0.138132452964783\n             ,-0.828281044960022,-0.54301929473877,0.056479137390852,-0.856393754482269,-0.513224899768829,-0.176827967166901\n             ,-0.795711040496826,-0.579288959503174,-0.371980756521225,-0.111040212213993,-0.921574950218201,0.0855581760406494\n             ,-0.201314404606819,-0.975782930850983,0.077034167945385,0.455207884311676,-0.88704651594162,-0.28214168548584\n             ,0.541098833084106,-0.792217254638672,-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.203037455677986\n             ,-0.825956046581268,-0.52590149641037,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.302752912044525\n             ,-0.830289721488953,-0.467931240797043,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.490713983774185\n             ,0.668629288673401,-0.558690071105957,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.371980756521225\n             ,-0.111040212213993,-0.921574950218201,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.481908857822418\n             ,-0.755593657493591,-0.443668872117996,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.302752912044525\n             ,-0.830289721488953,-0.467931240797043,-0.728462755680084,0.461005359888077,-0.506770253181458,-0.795176029205322\n             ,0.587453246116638,0.150312438607216,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.983289659023285\n             ,0.179070711135864,0.032787948846817,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.490713983774185\n             ,0.668629288673401,-0.558690071105957,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.562491774559021\n             ,-0.71064704656601,-0.422591775655746,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.481908857822418\n             ,-0.755593657493591,-0.443668872117996,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.633183360099792\n             ,0.75979870557785,-0.147596448659897,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.809815943241119\n             ,-0.0024391699116677,-0.586678981781006,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.658661007881165\n             ,-0.541524648666382,-0.52241438627243,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.809815943241119\n             ,-0.0024391699116677,-0.586678981781006,-0.633183360099792,0.75979870557785,-0.147596448659897,-0.0330419652163982\n             ,0.483641624450684,-0.874642193317413,0.191059574484825,0.965591907501221,-0.17643266916275,-0.343562453985214\n             ,0.683792293071747,-0.643733561038971,0.855425655841827,0.486632764339447,-0.177300468087196,0.785753786563873\n             ,0.386755406856537,-0.482712358236313,0.843447089195251,-0.319755733013153,-0.431686460971832,0.809532463550568\n             ,0.353956818580627,0.468371391296387,0.942203402519226,0.0765308514237404,0.326183587312698,0.976662814617157\n             ,0.0512243360280991,0.208580628037453,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.606497347354889\n             ,-0.734818637371063,0.303648799657822,0.886778235435486,0.377031594514847,0.267341554164886,-0.127582266926765\n             ,-0.6490518450737,0.749969661235809,-0.541773617267609,0.383253455162048,0.748062908649445,-0.0315269827842712\n             ,0.564418613910675,0.824886441230774,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.839367032051086\n             ,0.0223368648439646,-0.543105900287628,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.481908857822418\n             ,-0.755593657493591,-0.443668872117996,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.769991517066956\n             ,0.178484797477722,-0.612581610679626,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.839367032051086\n             ,0.0223368648439646,-0.543105900287628,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.850323617458344\n             ,0.228136301040649,-0.474239945411682,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.796081125736237\n             ,0.269071251153946,-0.542084395885468,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.804398477077484\n             ,0.375305235385895,-0.460531324148178,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.829805314540863\n             ,0.320066124200821,-0.457144170999527,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.871505856513977\n             ,0.489616960287094,-0.0274355374276638,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.81437873840332\n             ,0.501368820667267,-0.292261153459549,-0.820989012718201,0.473643779754639,-0.318808138370514,-0.967624545097351\n             ,0.222042396664619,-0.119999624788761,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.843356728553772\n             ,0.326204419136047,-0.427013009786606,-0.85853385925293,0.234514445066452,-0.455985277891159,-0.892978370189667\n             ,-0.00842274446040392,-0.450020730495453,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.975552141666412\n             ,0.149593591690063,-0.16099639236927,-0.876750707626343,0.238855347037315,-0.417440205812454,0.505264282226563\n             ,0.378391265869141,-0.775582432746887,0.077034167945385,0.455207884311676,-0.88704651594162,0.0855581760406494\n             ,-0.201314404606819,-0.975782930850983,0.585620284080505,-0.30219754576683,-0.752147257328033,0.606497347354889\n             ,-0.734818637371063,0.303648799657822,0.784134984016418,-0.509350836277008,-0.354533582925797,0.639626801013947\n             ,-0.543238401412964,0.543847024440765,0.610888957977295,-0.781325817108154,0.127846196293831,0.865038812160492\n             ,0.500161468982697,0.0393240377306938,0.886778235435486,0.377031594514847,0.267341554164886,0.606497347354889\n             ,-0.734818637371063,0.303648799657822,0.610888957977295,-0.781325817108154,0.127846196293831,0.585620284080505\n             ,-0.30219754576683,-0.752147257328033,0.843447089195251,-0.319755733013153,-0.431686460971832,0.785753786563873\n             ,0.386755406856537,-0.482712358236313,0.505264282226563,0.378391265869141,-0.775582432746887,-0.706070244312286\n             ,0.00520930625498295,-0.708122611045837,-0.879797160625458,-0.457895129919052,-0.127628490328789,0.0757457762956619\n             ,-0.699936747550964,-0.710176825523376,-0.371980756521225,-0.111040212213993,-0.921574950218201,0.585620284080505\n             ,-0.30219754576683,-0.752147257328033,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.66748982667923\n             ,-0.736912310123444,0.106852844357491,0.843447089195251,-0.319755733013153,-0.431686460971832,0.735480666160584\n             ,0.34406366944313,-0.583685159683228,0.91938704252243,-0.184946089982986,-0.347163438796997,0.639626801013947\n             ,-0.543238401412964,0.543847024440765,0.807643234729767,0.341063499450684,0.481028109788895,0.930141091346741\n             ,0.365344673395157,0.0368896275758743,0.272457927465439,0.39542019367218,-0.877159953117371,0.505863070487976\n             ,-0.10451452434063,-0.856258869171143,0.91938704252243,-0.184946089982986,-0.347163438796997,0.162468671798706\n             ,0.414035111665726,-0.89564436674118,-0.719203293323517,0.653926372528076,-0.234791070222855,-0.682009935379028\n             ,0.101576536893845,-0.724254548549652,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.486998409032822\n             ,0.553657293319702,-0.675496935844421,-0.285298675298691,0.0749257579445839,-0.95550549030304,0.0861517861485481\n             ,0.0155389430001378,-0.996160864830017,0.594993591308594,0.323719650506973,-0.735654950141907,-0.316894441843033\n             ,0.476865291595459,-0.819864273071289,0.0861517861485481,0.0155389430001378,-0.996160864830017,0.505863070487976\n             ,-0.10451452434063,-0.856258869171143,0.728234827518463,0.325270414352417,-0.603219032287598,-0.371980756521225\n             ,-0.111040212213993,-0.921574950218201,-0.712427794933319,-0.549001693725586,-0.437085568904877,0.435323119163513\n             ,-0.758436143398285,-0.485044747591019,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.807643234729767\n             ,0.341063499450684,0.481028109788895,0.639626801013947,-0.543238401412964,0.543847024440765,0.809532463550568\n             ,0.353956818580627,0.468371391296387,0.521454632282257,-0.681395709514618,0.513599991798401,0.521454632282257\n             ,-0.681395709514618,0.513599991798401,0.809532463550568,0.353956818580627,0.468371391296387,0.843447089195251\n             ,-0.319755733013153,-0.431686460971832,0.454940408468246,-0.69178706407547,-0.560767233371735,-0.809815943241119\n             ,-0.0024391699116677,-0.586678981781006,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.917265832424164\n             ,-0.397978872060776,0.0153695549815893,-0.983289659023285,0.179070711135864,0.032787948846817,-0.983289659023285\n             ,0.179070711135864,0.032787948846817,-0.917265832424164,-0.397978872060776,0.0153695549815893,-0.205607205629349\n             ,-0.621804177761078,-0.755701839923859,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.682009935379028\n             ,0.101576536893845,-0.724254548549652,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.756093859672546\n             ,0.644391119480133,-0.114376991987228,-0.809815943241119,-0.0024391699116677,-0.586678981781006,0.0855581760406494\n             ,-0.201314404606819,-0.975782930850983,-0.555338084697723,-0.543631553649902,-0.629336416721344,0.512858152389526\n             ,-0.774301767349243,-0.370719999074936,0.585620284080505,-0.30219754576683,-0.752147257328033,0.784134984016418\n             ,-0.509350836277008,-0.354533582925797,0.606497347354889,-0.734818637371063,0.303648799657822,0.989238142967224\n             ,-0.144198939204216,-0.0247913636267185,0.888628959655762,0.438762068748474,0.133515372872353,0.942203402519226\n             ,0.0765308514237404,0.326183587312698,0.886778235435486,0.377031594514847,0.267341554164886,-0.917265832424164\n             ,-0.397978872060776,0.0153695549815893,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.132126957178116\n             ,0.383346885442734,-0.914104819297791,-0.205607205629349,-0.621804177761078,-0.755701839923859,-0.205607205629349\n             ,-0.621804177761078,-0.755701839923859,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.682009935379028\n             ,0.101576536893845,-0.724254548549652,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.706070244312286\n             ,0.00520930625498295,-0.708122611045837,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.719203293323517\n             ,0.653926372528076,-0.234791070222855,-0.879797160625458,-0.457895129919052,-0.127628490328789,-0.879797160625458\n             ,-0.457895129919052,-0.127628490328789,-0.719203293323517,0.653926372528076,-0.234791070222855,0.162468671798706\n             ,0.414035111665726,-0.89564436674118,0.0757457762956619,-0.699936747550964,-0.710176825523376,0.0757457762956619\n             ,-0.699936747550964,-0.710176825523376,0.162468671798706,0.414035111665726,-0.89564436674118,-0.285298675298691\n             ,0.0749257579445839,-0.95550549030304,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.371980756521225\n             ,-0.111040212213993,-0.921574950218201,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.486998409032822\n             ,0.553657293319702,-0.675496935844421,-0.712427794933319,-0.549001693725586,-0.437085568904877,-0.712427794933319\n             ,-0.549001693725586,-0.437085568904877,-0.486998409032822,0.553657293319702,-0.675496935844421,0.594993591308594\n             ,0.323719650506973,-0.735654950141907,0.435323119163513,-0.758436143398285,-0.485044747591019,0.435323119163513\n             ,-0.758436143398285,-0.485044747591019,0.594993591308594,0.323719650506973,-0.735654950141907,0.0861517861485481\n             ,0.0155389430001378,-0.996160864830017,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.0855581760406494\n             ,-0.201314404606819,-0.975782930850983,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.316894441843033\n             ,0.476865291595459,-0.819864273071289,-0.555338084697723,-0.543631553649902,-0.629336416721344,-0.555338084697723\n             ,-0.543631553649902,-0.629336416721344,-0.316894441843033,0.476865291595459,-0.819864273071289,0.728234827518463\n             ,0.325270414352417,-0.603219032287598,0.512858152389526,-0.774301767349243,-0.370719999074936,0.512858152389526\n             ,-0.774301767349243,-0.370719999074936,0.728234827518463,0.325270414352417,-0.603219032287598,0.505863070487976\n             ,-0.10451452434063,-0.856258869171143,0.585620284080505,-0.30219754576683,-0.752147257328033,0.585620284080505\n             ,-0.30219754576683,-0.752147257328033,0.505863070487976,-0.10451452434063,-0.856258869171143,0.272457927465439\n             ,0.39542019367218,-0.877159953117371,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.0887269154191017\n             ,-0.638365030288696,-0.764602899551392,0.272457927465439,0.39542019367218,-0.877159953117371,0.930141091346741\n             ,0.365344673395157,0.0368896275758743,0.66748982667923,-0.736912310123444,0.106852844357491,0.66748982667923\n             ,-0.736912310123444,0.106852844357491,0.930141091346741,0.365344673395157,0.0368896275758743,0.91938704252243\n             ,-0.184946089982986,-0.347163438796997,0.843447089195251,-0.319755733013153,-0.431686460971832,0.843447089195251\n             ,-0.319755733013153,-0.431686460971832,0.91938704252243,-0.184946089982986,-0.347163438796997,0.735480666160584\n             ,0.34406366944313,-0.583685159683228,0.454940408468246,-0.69178706407547,-0.560767233371735,0.454940408468246\n             ,-0.69178706407547,-0.560767233371735,0.735480666160584,0.34406366944313,-0.583685159683228,0.807643234729767\n             ,0.341063499450684,0.481028109788895,0.521454632282257,-0.681395709514618,0.513599991798401,0.526285588741302\n             ,-0.789061844348907,0.316867232322693,0.289891242980957,-0.786550641059875,0.545253336429596,0.133638396859169\n             ,-0.991028487682343,-0.00182732508983463,0.133638396859169,-0.991028487682343,-0.00182732508983463,0.289891242980957\n             ,-0.786550641059875,0.545253336429596,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.0176914222538471\n             ,-0.987810254096985,0.154654189944267,-0.0176914222538471,-0.987810254096985,0.154654189944267,-0.43298476934433\n             ,-0.720436811447144,0.541751801967621,-0.316983908414841,-0.933099091053009,0.169844955205917,-0.316983908414841\n             ,-0.933099091053009,0.169844955205917,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.355301171541214\n             ,-0.934036552906036,0.0365622416138649,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.63077574968338\n             ,-0.739016532897949,0.236593529582024,-0.355301171541214,-0.934036552906036,0.0365622416138649,-0.39702296257019\n             ,-0.910409450531006,-0.116307184100151,-0.39702296257019,-0.910409450531006,-0.116307184100151,-0.63077574968338\n             ,-0.739016532897949,0.236593529582024,-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.387578904628754\n             ,-0.825659334659576,-0.40996253490448,-0.387578904628754,-0.825659334659576,-0.40996253490448,-0.719066202640533\n             ,-0.680389881134033,-0.14146888256073,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.689231038093567\n             ,-0.628963589668274,-0.359674036502838,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.347473174333572\n             ,-0.882382750511169,-0.317274332046509,-0.347473174333572,-0.882382750511169,-0.317274332046509,-0.348667085170746\n             ,-0.872639775276184,-0.341951847076416,-0.348667085170746,-0.872639775276184,-0.341951847076416,-0.65434330701828\n             ,-0.613166451454163,-0.442562788724899,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.501005291938782\n             ,-0.576619863510132,-0.645370602607727,-0.211497768759727,-0.562794804573059,-0.799081146717072,-0.227143570780754\n             ,-0.829574823379517,-0.51010924577713,-0.227143570780754,-0.829574823379517,-0.51010924577713,0.0649978742003441\n             ,-0.592735111713409,-0.802770435810089,-0.113406293094158,-0.831756949424744,-0.543432950973511,-0.113406293094158\n             ,-0.831756949424744,-0.543432950973511,-0.211497768759727,-0.562794804573059,-0.799081146717072,0.0696519389748573\n             ,-0.853706240653992,-0.516075789928436,0.0649978742003441,-0.592735111713409,-0.802770435810089,0.442950963973999\n             ,-0.635696709156036,-0.632205784320831,0.219755545258522,-0.882318615913391,-0.416198641061783,0.526285588741302\n             ,-0.789061844348907,0.316867232322693,0.562327146530151,-0.809826016426086,0.167242258787155,0.78835541009903\n             ,-0.474211633205414,0.391942739486694,0.665505409240723,-0.470593899488449,0.579347848892212,0.991608023643494\n             ,-0.114275835454464,-0.060452651232481,0.82292628288269,-0.280684322118759,0.493972301483154,0.831244945526123\n             ,-0.225508287549019,0.508112013339996,0.995975911617279,-0.0798337981104851,-0.0407244116067886,0.867793679237366\n             ,-0.309993803501129,0.38837856054306,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.988763093948364\n             ,-0.140536084771156,-0.0509620234370232,0.884072363376617,-0.159779712557793,0.439188450574875,0.78835541009903\n             ,-0.474211633205414,0.391942739486694,0.93778657913208,-0.340576171875,-0.0675588026642799,0.987106621265411\n             ,-0.147132456302643,-0.0630284249782562,0.867793679237366,-0.309993803501129,0.38837856054306,0.581761598587036\n             ,-0.790978848934174,-0.189488589763641,0.93778657913208,-0.340576171875,-0.0675588026642799,0.78835541009903\n             ,-0.474211633205414,0.391942739486694,0.562327146530151,-0.809826016426086,0.167242258787155,-0.0647715702652931\n             ,-0.0269695688039064,0.997535645961761,0.280544310808182,-0.2230264544487,0.933570623397827,0.147943705320358\n             ,-0.468890011310577,0.870778322219849,-0.0499088205397129,-0.128681614995003,0.990429282188416,0.370588421821594\n             ,-0.193350583314896,0.908449113368988,0.280544310808182,-0.2230264544487,0.933570623397827,-0.0647715702652931\n             ,-0.0269695688039064,0.997535645961761,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.985335469245911\n             ,0.0123848039656878,-0.170178011059761,-0.924062490463257,0.166337832808495,-0.344151526689529,0.92520534992218\n             ,-0.376655071973801,-0.0461085550487041,0.943572819232941,-0.310979694128037,-0.113850839436054,0.949489533901215\n             ,-0.288099020719528,0.124372407793999,0.900178790092468,-0.431453764438629,0.0593785345554352,0.815547049045563\n             ,-0.485381871461868,-0.315099239349365,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.891479134559631\n             ,-0.356151014566422,-0.280038207769394,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.94812422990799\n             ,0.313342124223709,-0.0536391511559486,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.922418296337128\n             ,0.0309104230254889,0.384953290224075,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.94812422990799\n             ,0.313342124223709,-0.0536391511559486,-0.877985596656799,0.347244709730148,0.329488188028336,-0.939527928829193\n             ,0.186541080474854,0.287210255861282,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.482705980539322\n             ,0.267842918634415,-0.833819627761841,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.923067510128021\n             ,0.218861386179924,-0.316300690174103,0.0640611723065376,0.868370652198792,0.491760730743408,-0.0218884665518999\n             ,0.60806405544281,0.793586194515228,0.432919770479202,0.554768323898315,0.710501611232758,0.272088974714279,0.83392196893692\n             ,0.480147629976273,-0.402506142854691,0.589897632598877,0.70000684261322,-0.0960818529129028,0.882192492485046\n             ,0.460982292890549,-0.147527620196342,0.908096194267273,0.391914486885071,-0.551313877105713,0.631630659103394\n             ,0.545064926147461,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.877985596656799,0.347244709730148\n             ,0.329488188028336,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.850938260555267,-0.0678398907184601\n             ,0.520866394042969,-0.45111495256424,-0.252489358186722,0.856004893779755,-0.697896897792816,0.111968666315079\n             ,0.707391619682312,-0.877985596656799,0.347244709730148,0.329488188028336,-0.675129354000092,-0.135668352246284\n             ,0.725116848945618,-0.0218884665518999,0.60806405544281,0.793586194515228,0.0640611723065376,0.868370652198792\n             ,0.491760730743408,-0.0960818529129028,0.882192492485046,0.460982292890549,-0.402506142854691,0.589897632598877\n             ,0.70000684261322,-0.697896897792816,0.111968666315079,0.707391619682312,-0.45111495256424,-0.252489358186722\n             ,0.856004893779755,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.0958455428481102,-0.0575050786137581\n             ,0.993733763694763,-0.976002871990204,0.137454673647881,0.168892458081245,-0.850299119949341,0.0502048023045063\n             ,0.523899674415588,-0.551313877105713,0.631630659103394,0.545064926147461,-0.683505356311798,0.663009881973267\n             ,0.305349379777908,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.668019652366638,-0.146763682365417\n             ,0.729527354240417,-0.697896897792816,0.111968666315079,0.707391619682312,-0.0958455428481102,-0.0575050786137581\n             ,0.993733763694763,-0.939527928829193,0.186541080474854,0.287210255861282,-0.903742134571075,0.0408328101038933\n             ,0.426125347614288,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.990444839000702,0.137596040964127\n             ,-0.00929243210703135,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.805570960044861,0.0887086465954781\n             ,-0.585820972919464,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.923067510128021,0.218861386179924\n             ,-0.316300690174103,0.568327903747559,-0.132913276553154,0.811995983123779,0.503679692745209,-0.333046585321426\n             ,0.797111511230469,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.0958455428481102,-0.0575050786137581\n             ,0.993733763694763,0.560331284999847,-0.197167843580246,0.804458677768707,0.681288719177246,-0.155398637056351\n             ,0.715329945087433,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.969195008277893,0.116620995104313\n             ,0.216934517025948,0.934698820114136,0.0468888580799103,-0.352334558963776,0.909544348716736,-0.0496345721185207\n             ,0.412632375955582,0.953069984912872,0.0484385639429092,0.298849850893021,0.942743897438049,-0.0672791972756386\n             ,-0.326661080121994,0.76161140203476,-0.261901050806046,0.592752873897552,0.503679692745209,-0.333046585321426\n             ,0.797111511230469,0.568327903747559,-0.132913276553154,0.811995983123779,0.807208120822906,-0.16038890182972\n             ,0.568058490753174,-0.892664194107056,0.187903389334679,-0.409686326980591,-0.964133560657501,0.11603681743145\n             ,0.238708838820457,-0.922418296337128,0.0309104230254889,0.384953290224075,-0.937970280647278,0.291287869215012\n             ,-0.188050955533981,-0.964133560657501,0.11603681743145,0.238708838820457,-0.892664194107056,0.187903389334679\n             ,-0.409686326980591,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.928708910942078,-0.245197176933289\n             ,0.278169125318527,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.713874757289886,0.186937421560287\n             ,-0.674860894680023,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.892664194107056,0.187903389334679\n             ,-0.409686326980591,0.801601529121399,-0.550374329090118,-0.233501866459847,0.681288719177246,-0.155398637056351\n             ,0.715329945087433,0.293806612491608,-0.416160941123962,0.860515952110291,0.364783316850662,-0.883516609668732\n             ,0.293822199106216,0.953069984912872,0.0484385639429092,0.298849850893021,0.909544348716736,-0.0496345721185207\n             ,0.412632375955582,0.871833384037018,0.0184005852788687,0.489456832408905,0.928847432136536,0.162274017930031\n             ,0.333030939102173,0.546681344509125,-0.221680983901024,0.807463347911835,0.560331284999847,-0.197167843580246\n             ,0.804458677768707,0.969195008277893,0.116620995104313,0.216934517025948,0.928847432136536,0.162274017930031\n             ,0.333030939102173,0.332680404186249,-0.441110402345657,0.833513855934143,-0.837489604949951,-0.137019082903862\n             ,0.528996169567108,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.922418296337128,0.0309104230254889\n             ,0.384953290224075,-0.213112205266953,-0.0906345173716545,0.972814738750458,0.0511878095567226,-0.230872601270676\n             ,0.971636593341827,0.161164596676826,-0.331503033638,0.929586827754974,-0.136431202292442,-0.35848480463028,0.923512399196625\n             ,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.246746554970741,-0.163683891296387,-0.95515638589859\n             ,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.482705980539322,0.267842918634415,-0.833819627761841\n             ,0.890334188938141,-0.2436583340168,-0.384624063968658,-0.47929310798645,-0.284916669130325,-0.830120861530304\n             ,-0.383484423160553,-0.10283836722374,-0.917803883552551,0.942743897438049,-0.0672791972756386,-0.326661080121994\n             ,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.652578115463257,-0.0296747144311666,0.757140159606934\n             ,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.850938260555267,-0.0678398907184601,0.520866394042969\n             ,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.389561533927917,-0.191748484969139,0.900818705558777\n             ,-0.45111495256424,-0.252489358186722,0.856004893779755,-0.675129354000092,-0.135668352246284,0.725116848945618\n             ,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.213112205266953,-0.0906345173716545,0.972814738750458\n             ,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.45111495256424,-0.252489358186722,0.856004893779755\n             ,0.0511878095567226,-0.230872601270676,0.971636593341827,0.152829229831696,-0.222570449113846,0.962863266468048\n             ,0.30596736073494,-0.302397102117538,0.902740240097046,0.161164596676826,-0.331503033638,0.929586827754974,0.118139639496803\n             ,-0.728867173194885,0.67438542842865,-0.583520650863647,-0.523498177528381,0.620848834514618,0.546681344509125\n             ,-0.221680983901024,0.807463347911835,0.456334859132767,-0.263855695724487,0.849787414073944,-0.812033832073212\n             ,-0.319456815719604,0.488414168357849,-0.828753769397736,-0.00401695584878325,0.559599041938782,0.681288719177246\n             ,-0.155398637056351,0.715329945087433,0.560331284999847,-0.197167843580246,0.804458677768707,-0.383484423160553\n             ,-0.10283836722374,-0.917803883552551,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.934698820114136\n             ,0.0468888580799103,-0.352334558963776,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.202261254191399\n             ,-0.191956058144569,0.960334956645966,0.332680404186249,-0.441110402345657,0.833513855934143,-0.922418296337128\n             ,0.0309104230254889,0.384953290224075,-0.964133560657501,0.11603681743145,0.238708838820457,0.691331505775452\n             ,-0.716019809246063,-0.0968316718935966,0.0923520997166634,-0.948987245559692,0.301486879587173,-0.775554835796356\n             ,-0.490125626325607,-0.397858709096909,-0.543925106525421,-0.442455142736435,-0.713006973266602,-0.201129660010338\n             ,-0.411518931388855,0.888931393623352,0.202261254191399,-0.191956058144569,0.960334956645966,-0.964133560657501\n             ,0.11603681743145,0.238708838820457,-0.928708910942078,-0.245197176933289,0.278169125318527,0.751028060913086\n             ,-0.474978506565094,-0.458641737699509,0.691331505775452,-0.716019809246063,-0.0968316718935966,-0.543925106525421\n             ,-0.442455142736435,-0.713006973266602,-0.56893402338028,-0.144464939832687,-0.809594929218292,0.505280077457428\n             ,-0.213028207421303,-0.836248159408569,0.751028060913086,-0.474978506565094,-0.458641737699509,-0.56893402338028\n             ,-0.144464939832687,-0.809594929218292,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.828753769397736\n             ,-0.00401695584878325,0.559599041938782,-0.650360941886902,-0.2744460105896,0.708314895629883,0.293806612491608\n             ,-0.416160941123962,0.860515952110291,0.681288719177246,-0.155398637056351,0.715329945087433,-0.587613880634308\n             ,-0.804071664810181,0.0904360190033913,-0.653040766716003,-0.484619319438934,-0.581963837146759,0.801601529121399\n             ,-0.550374329090118,-0.233501866459847,0.364783316850662,-0.883516609668732,0.293822199106216,-0.583520650863647\n             ,-0.523498177528381,0.620848834514618,-0.812033832073212,-0.319456815719604,0.488414168357849,0.560331284999847\n             ,-0.197167843580246,0.804458677768707,0.546681344509125,-0.221680983901024,0.807463347911835,0.0923520997166634\n             ,-0.948987245559692,0.301486879587173,-0.201129660010338,-0.411518931388855,0.888931393623352,-0.928708910942078\n             ,-0.245197176933289,0.278169125318527,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.650360941886902\n             ,-0.2744460105896,0.708314895629883,-0.587613880634308,-0.804071664810181,0.0904360190033913,0.364783316850662\n             ,-0.883516609668732,0.293822199106216,0.293806612491608,-0.416160941123962,0.860515952110291,0.563132643699646\n             ,0.445763438940048,0.695827960968018,0.717245042324066,0.0185855161398649,0.696573138237,0.961548805236816,-0.0192979723215103\n             ,0.273955345153809,0.709949553012848,0.601409435272217,0.366440117359161,-0.937970280647278,0.291287869215012\n             ,-0.188050955533981,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.713874757289886,0.186937421560287\n             ,-0.674860894680023,0.568327903747559,-0.132913276553154,0.811995983123779,-0.0958455428481102,-0.0575050786137581\n             ,0.993733763694763,-0.136431202292442,-0.35848480463028,0.923512399196625,0.161164596676826,-0.331503033638,0.929586827754974\n             ,0.714491784572601,0.142257153987885,0.685028791427612,0.890334188938141,-0.2436583340168,-0.384624063968658\n             ,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.953069984912872,0.0484385639429092,0.298849850893021\n             ,-0.697896897792816,0.111968666315079,0.707391619682312,-0.903742134571075,0.0408328101038933,0.426125347614288\n             ,-0.939527928829193,0.186541080474854,0.287210255861282,-0.877985596656799,0.347244709730148,0.329488188028336\n             ,0.320462375879288,0.819697320461273,0.474763184785843,0.272088974714279,0.83392196893692,0.480147629976273,0.432919770479202\n             ,0.554768323898315,0.710501611232758,0.543301939964294,0.448152214288712,0.709917306900024,0.406093060970306\n             ,0.667463958263397,0.624163687229156,0.807208120822906,-0.16038890182972,0.568058490753174,0.568327903747559\n             ,-0.132913276553154,0.811995983123779,0.714491784572601,0.142257153987885,0.685028791427612,0.871833384037018\n             ,0.0184005852788687,0.489456832408905,-0.939527928829193,0.186541080474854,0.287210255861282,-0.990444839000702\n             ,0.137596040964127,-0.00929243210703135,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.543925106525421\n             ,-0.442455142736435,-0.713006973266602,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.892664194107056\n             ,0.187903389334679,-0.409686326980591,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.543925106525421\n             ,-0.442455142736435,-0.713006973266602,-0.892664194107056,0.187903389334679,-0.409686326980591,0.991721928119659\n             ,-0.0987398326396942,0.0820856466889381,0.681288719177246,-0.155398637056351,0.715329945087433,0.801601529121399\n             ,-0.550374329090118,-0.233501866459847,0.890334188938141,-0.2436583340168,-0.384624063968658,0.991721928119659\n             ,-0.0987398326396942,0.0820856466889381,0.801601529121399,-0.550374329090118,-0.233501866459847,0.890334188938141\n             ,-0.2436583340168,-0.384624063968658,0.801601529121399,-0.550374329090118,-0.233501866459847,-0.653040766716003\n             ,-0.484619319438934,-0.581963837146759,-0.47929310798645,-0.284916669130325,-0.830120861530304,0.928275108337402\n             ,-0.108704164624214,0.355652451515198,0.949140191078186,-0.201623901724815,0.241827890276909,0.76161140203476\n             ,-0.261901050806046,0.592752873897552,0.807208120822906,-0.16038890182972,0.568058490753174,0.406093060970306\n             ,0.667463958263397,0.624163687229156,0.563132643699646,0.445763438940048,0.695827960968018,0.709949553012848\n             ,0.601409435272217,0.366440117359161,0.380683273077011,0.860944807529449,0.337422966957092,0.320462375879288\n             ,0.819697320461273,0.474763184785843,0.543301939964294,0.448152214288712,0.709917306900024,0.717245042324066\n             ,0.0185855161398649,0.696573138237,0.563132643699646,0.445763438940048,0.695827960968018,0.406093060970306,0.667463958263397\n             ,0.624163687229156,0.543301939964294,0.448152214288712,0.709917306900024,0.432919770479202,0.554768323898315\n             ,0.710501611232758,0.538123428821564,-0.0776133164763451,0.839285016059875,0.717245042324066,0.0185855161398649\n             ,0.696573138237,-0.0218884665518999,0.60806405544281,0.793586194515228,-0.141525283455849,-0.0639705210924149\n             ,0.987865567207336,0.538123428821564,-0.0776133164763451,0.839285016059875,0.432919770479202,0.554768323898315\n             ,0.710501611232758,-0.402506142854691,0.589897632598877,0.70000684261322,-0.652125775814056,-0.00108898046892136\n             ,0.758109986782074,-0.141525283455849,-0.0639705210924149,0.987865567207336,-0.0218884665518999,0.60806405544281\n             ,0.793586194515228,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.402506142854691,0.589897632598877\n             ,0.70000684261322,-0.551313877105713,0.631630659103394,0.545064926147461,-0.850299119949341,0.0502048023045063\n             ,0.523899674415588,-0.683505356311798,0.663009881973267,0.305349379777908,-0.551313877105713,0.631630659103394\n             ,0.545064926147461,-0.147527620196342,0.908096194267273,0.391914486885071,-0.258647561073303,0.909015476703644\n             ,0.326790869235992,-0.331648796796799,0.794523477554321,-0.508666396141052,0.0982041954994202,0.744845330715179\n             ,-0.659970700740814,0.00497482251375914,0.164960786700249,-0.986287593841553,-0.522813379764557,0.17926724255085\n             ,-0.833384335041046,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.886800348758698,0.175986841320992\n             ,-0.427333265542984,-0.656110644340515,0.732090890407562,-0.183198615908623,-0.331648796796799,0.794523477554321\n             ,-0.508666396141052,-0.505583822727203,0.0150259397923946,-0.862646639347076,-5.02178700116929e-005,0.0272602327167988\n             ,-0.999628365039825,0.00533884158357978,0.0413248725235462,-0.999131500720978,-0.459000378847122,0.0631367489695549\n             ,-0.886189818382263,0.34263151884079,0.695380985736847,-0.631703197956085,0.632241547107697,0.646320283412933\n             ,-0.427247822284698,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.341541588306427,0.10033044219017\n             ,-0.934496164321899,0.71175479888916,-0.136520832777023,-0.689033508300781,0.433557748794556,-0.0273693483322859\n             ,-0.900710046291351,0.377974539995193,-0.0538287870585918,-0.924249827861786,0.70794689655304,-0.166302517056465\n             ,-0.686407029628754,-0.459000378847122,0.0631367489695549,-0.886189818382263,-0.805570960044861,0.0887086465954781\n             ,-0.585820972919464,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.505583822727203,0.0150259397923946\n             ,-0.862646639347076,0.938030481338501,-0.164544522762299,-0.304998099803925,0.820765018463135,-0.278661012649536\n             ,-0.4986911714077,0.941822648048401,-0.153352871537209,-0.299086838960648,-0.459000378847122,0.0631367489695549\n             ,-0.886189818382263,0.00533884158357978,0.0413248725235462,-0.999131500720978,-0.0723040401935577,-0.562818825244904\n             ,-0.823411822319031,-0.379301369190216,-0.56307464838028,-0.734218895435333,0.433557748794556,-0.0273693483322859\n             ,-0.900710046291351,0.71175479888916,-0.136520832777023,-0.689033508300781,0.471586465835571,-0.672621011734009\n             ,-0.570251822471619,0.282903432846069,-0.614905893802643,-0.736109018325806,-0.379301369190216,-0.56307464838028\n             ,-0.734218895435333,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.805570960044861,0.0887086465954781\n             ,-0.585820972919464,-0.459000378847122,0.0631367489695549,-0.886189818382263,0.820765018463135,-0.278661012649536\n             ,-0.4986911714077,0.938030481338501,-0.164544522762299,-0.304998099803925,0.0390605479478836,-0.798295617103577\n             ,-0.600997805595398,0.433943748474121,-0.801411271095276,-0.411622196435928,0.985846102237701,-0.106943093240261\n             ,0.129114612936974,0.97103625535965,0.0917741134762764,-0.2206040173769,0.850343227386475,-0.422914385795593\n             ,-0.313145011663437,0.846594989299774,-0.529064953327179,0.0580276139080524,0.0982041954994202,0.744845330715179\n             ,-0.659970700740814,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.0896633565425873,0.986825108528137\n             ,-0.134672433137894,0.149676010012627,0.966882228851318,-0.20672644674778,0.380683273077011,0.860944807529449\n             ,0.337422966957092,0.709949553012848,0.601409435272217,0.366440117359161,0.785880386829376,0.614527404308319\n             ,-0.0689060613512993,0.462400853633881,0.884378015995026,0.0637255683541298,0.404174894094467,0.903538584709167\n             ,-0.142339900135994,0.632241547107697,0.646320283412933,-0.427247822284698,0.34263151884079,0.695380985736847\n             ,-0.631703197956085,0.26786082983017,0.938322722911835,-0.218634366989136,-0.652326703071594,-0.073212519288063\n             ,-0.754393696784973,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.458068251609802,-0.324115723371506\n             ,-0.827721238136292,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.458068251609802,-0.324115723371506\n             ,-0.827721238136292,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.0723040401935577,-0.562818825244904\n             ,-0.823411822319031,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.282903432846069,-0.614905893802643\n             ,-0.736109018325806,0.471586465835571,-0.672621011734009,-0.570251822471619,0.642500996589661,-0.273710608482361\n             ,-0.715733826160431,0.383173555135727,-0.262150347232819,-0.885694801807404,0.433943748474121,-0.801411271095276\n             ,-0.411622196435928,0.0390605479478836,-0.798295617103577,-0.600997805595398,0.846594989299774,-0.529064953327179\n             ,0.0580276139080524,0.850343227386475,-0.422914385795593,-0.313145011663437,-0.798132300376892,-0.595748007297516\n             ,0.0898284390568733,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.620602905750275,-0.69584184885025\n             ,-0.361463844776154,-0.348949372768402,-0.852245092391968,0.389759749174118,0.645033359527588,-0.763978242874146\n             ,0.0164063423871994,0.085636705160141,-0.288859754800797,0.95353364944458,-0.826135456562042,-0.335000514984131\n             ,0.453072637319565,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.306766450405121,-0.118458941578865\n             ,0.944384336471558,0.441097766160965,0.233705207705498,0.866495609283447,0.390775859355927,0.856176912784576\n             ,0.338016718626022,-0.15803237259388,0.792331874370575,0.589267313480377,-0.395615994930267,-0.602470278739929\n             ,-0.693193674087524,0.709003627300262,-0.541708946228027,-0.451514393091202,0.415498226881027,-0.625033438205719\n             ,0.660828590393066,-0.722061336040497,-0.559728622436523,0.406609505414963,-0.712907791137695,0.682124972343445\n             ,-0.162689983844757,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.863033890724182,-0.335786253213882\n             ,-0.377385854721069,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.282899647951126,-0.764817118644714\n             ,-0.578811287879944,0.557026505470276,-0.731577336788177,-0.393085300922394,0.466174304485321,-0.668626964092255\n             ,0.579326808452606,-0.705482065677643,-0.662965536117554,0.250542938709259,-0.733190715312958,0.653582453727722\n             ,-0.187780037522316,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.68010026216507,-0.471441000699997\n             ,-0.561433076858521,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.717040240764618,0.690781652927399\n             ,-0.0931341797113419,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.94776064157486,-0.269029259681702\n             ,-0.171385675668716,-0.68010026216507,-0.471441000699997,-0.561433076858521,0.312811404466629,-0.918802380561829\n             ,-0.240730464458466,-0.68010026216507,-0.471441000699997,-0.561433076858521,-0.94776064157486,-0.269029259681702\n             ,-0.171385675668716,0.248996675014496,-0.917850255966187,0.309114098548889,-0.445575803518295,0.0603601969778538\n             ,-0.89320707321167,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.647231996059418,0.709673702716827\n             ,-0.278305560350418,-0.305622786283493,0.734605431556702,-0.605763673782349,0.462542772293091,0.739023745059967\n             ,-0.489793956279755,0.671855986118317,0.740681707859039,-0.000314049131702632,0.999210178852081,0.0289647411555052\n             ,-0.0272047873586416,0.627128839492798,0.0574354380369186,-0.776795089244843,0.596383929252625,0.731881856918335\n             ,0.329659104347229,0.615696132183075,0.768994271755219,0.171947747468948,0.9074946641922,-0.352809637784958,-0.227988600730896\n             ,0.918069958686829,-0.187106743454933,0.3494833111763,0.638639688491821,0.766668796539307,0.0660171657800674\n             ,0.900666058063507,-0.271470785140991,0.339270144701004,0.9074946641922,-0.352809637784958,-0.227988600730896\n             ,0.615696132183075,0.768994271755219,0.171947747468948,0.390775859355927,0.856176912784576,0.338016718626022\n             ,0.441097766160965,0.233705207705498,0.866495609283447,0.812849104404449,-0.351107835769653,0.464757591485977\n             ,0.748181462287903,0.587628960609436,0.308085650205612,0.916947364807129,0.362371891736984,0.167015478014946\n             ,0.847357213497162,0.513431668281555,0.135549768805504,0.882211685180664,0.466362744569778,0.0648712962865829\n             ,0.893702685832977,0.422671288251877,0.150480911135674,0.882211685180664,0.466362744569778,0.0648712962865829\n             ,0.847357213497162,0.513431668281555,0.135549768805504,0.729536890983582,0.676141858100891,0.102995507419109\n             ,0.755123436450958,0.652067601680756,0.0677972882986069,0.719103455543518,0.620088696479797,0.313656240701675\n             ,0.416522979736328,0.747589826583862,0.517318189144135,0.382025003433228,0.832321524620056,0.401618927717209\n             ,0.661795139312744,0.713703632354736,0.229465380311012,0.732339978218079,0.57999724149704,0.356765180826187,0.404268801212311\n             ,0.753554701805115,0.518384099006653,0.416522979736328,0.747589826583862,0.517318189144135,0.719103455543518\n             ,0.620088696479797,0.313656240701675,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.66072803735733\n             ,0.731441617012024,-0.168616935610771,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.709426164627075\n             ,0.694045186042786,-0.1225391253829,-0.471274226903915,0.860716223716736,0.192531064152718,-0.508786559104919\n             ,0.827320158481598,0.238070502877235,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.602886259555817\n             ,0.797378957271576,-0.026737067848444,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.676983892917633\n             ,0.720325946807861,-0.15107399225235,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.632999122142792\n             ,0.753636598587036,-0.177042424678802,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.644031703472137\n             ,0.764946818351746,0.00891846232116222,-0.508786559104919,0.827320158481598,0.238070502877235,-0.52653956413269\n             ,0.801656424999237,0.283024877309799,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.774571657180786\n             ,0.617025077342987,-0.138992056250572,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.727224290370941\n             ,0.663318395614624,-0.176503553986549,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.752022266387939\n             ,0.649503409862518,-0.112284816801548,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.719631135463715\n             ,0.672992944717407,-0.170913591980934,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.972268521785736\n             ,0.233539238572121,0.0123817138373852,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.774571657180786\n             ,0.617025077342987,-0.138992056250572,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.749007999897003\n             ,0.651602983474731,-0.120002493262291,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.774571657180786\n             ,0.617025077342987,-0.138992056250572,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.678524672985077\n             ,0.663206458091736,-0.315850287675858,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.789477050304413\n             ,0.597959935665131,-0.138455465435982,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.721381545066834\n             ,0.602611720561981,-0.341273695230484,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.789477050304413\n             ,0.597959935665131,-0.138455465435982,-0.320632964372635,0.735152721405029,-0.597281336784363,-0.704592347145081\n             ,0.645622909069061,-0.294483691453934,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.350197345018387\n             ,0.671358823776245,-0.653176188468933,-0.300025343894959,0.704358756542206,-0.643322288990021,-0.678524672985077\n             ,0.663206458091736,-0.315850287675858,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.320632964372635\n             ,0.735152721405029,-0.597281336784363,0.177267909049988,0.365930050611496,-0.91360342502594,0.546093285083771\n             ,0.623855233192444,-0.559094548225403,0.500399529933929,0.708592414855957,-0.497490793466568,0.139554411172867\n             ,0.707306206226349,-0.692995309829712,0.139554411172867,0.707306206226349,-0.692995309829712,0.500399529933929\n             ,0.708592414855957,-0.497490793466568,0.483161181211472,0.7082759141922,-0.514684855937958,0.143811240792274\n             ,0.67733633518219,-0.721480309963226,0.627380788326263,0.542527794837952,-0.558620572090149,0.926415085792542\n             ,0.366669327020645,-0.085490919649601,0.968909800052643,-0.119059138000011,-0.21688424050808,0.674115300178528\n             ,-0.0423769503831863,-0.737409472465515,0.500399529933929,0.708592414855957,-0.497490793466568,0.74566113948822\n             ,0.665992856025696,-0.021046232432127,0.711231529712677,0.702188611030579,-0.0328761637210846,0.483161181211472\n             ,0.7082759141922,-0.514684855937958,0.947628259658813,0.256551682949066,0.190215542912483,0.970879018306732,0.17382837831974\n             ,0.164856374263763,0.975513935089111,-0.202585577964783,0.0856255367398262,0.981737434864044,-0.183587238192558\n             ,0.0498724691569805,0.713916897773743,0.653736352920532,0.250901371240616,0.793782532215118,0.557114601135254\n             ,0.24399308860302,0.855198323726654,0.434896290302277,0.281959295272827,0.72310745716095,0.620889782905579,0.302673995494843\n             ,0.996930718421936,0.0329510122537613,0.0710170343518257,0.991389572620392,-0.125116944313049,0.0386327914893627\n             ,0.655400395393372,-0.538768291473389,0.52931934595108,0.814328134059906,-0.0162655059248209,0.580176770687103\n             ,0.738506376743317,0.594660043716431,0.317785710096359,0.878546118736267,0.378491014242172,0.291378289461136\n             ,0.896252334117889,0.421274542808533,0.138778761029243,0.767313122749329,0.622622787952423,0.153530031442642\n             ,0.896252334117889,0.421274542808533,0.138778761029243,0.882211685180664,0.466362744569778,0.0648712962865829\n             ,0.755123436450958,0.652067601680756,0.0677972882986069,0.767313122749329,0.622622787952423,0.153530031442642\n             ,-0.144893556833267,0.857636988162994,0.493421375751495,-0.52653956413269,0.801656424999237,0.283024877309799\n             ,-0.508786559104919,0.827320158481598,0.238070502877235,-0.128903239965439,0.870382308959961,0.475203812122345\n             ,-0.13026924431324,0.905642747879028,0.403535783290863,-0.128903239965439,0.870382308959961,0.475203812122345\n             ,-0.508786559104919,0.827320158481598,0.238070502877235,-0.471274226903915,0.860716223716736,0.192531064152718\n             ,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.667403042316437,0.744478642940521,-0.0180177688598633\n             ,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.891578018665314,0.451290994882584,-0.0377500951290131\n             ,-0.713882029056549,0.360403180122375,0.60040158033371,-0.576912403106689,0.718079209327698,0.389274090528488\n             ,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.911553025245667,0.36151385307312,0.195905029773712\n             ,-0.909857094287872,0.391187280416489,0.138320609927177,-0.816486001014709,0.512708961963654,0.265480846166611\n             ,-0.660224080085754,0.688790798187256,0.299451798200607,-0.752071261405945,0.531812846660614,0.389312088489532\n             ,-0.752071261405945,0.531812846660614,0.389312088489532,-0.660224080085754,0.688790798187256,0.299451798200607\n             ,-0.563141465187073,0.729207098484039,0.388752728700638,-0.646896600723267,0.568207919597626,0.508590757846832\n             ,0.320559591054916,0.729658484458923,0.6040198802948,0.311181455850601,0.925608515739441,0.215441450476646,-0.0790780931711197\n             ,0.992485880851746,0.0933722108602524,-0.202111601829529,0.805501878261566,0.557061612606049,0.614538609981537\n             ,0.667141020298004,0.421028733253479,0.320559591054916,0.729658484458923,0.6040198802948,0.367227405309677,0.346865594387054\n             ,0.86303436756134,0.764663100242615,0.188213542103767,0.616332709789276,0.520070433616638,0.75630134344101,0.396906822919846\n             ,0.522960782051086,0.842813670635223,-0.127189323306084,0.764615535736084,0.640312492847443,0.0732326954603195\n             ,0.941741049289703,0.116148002445698,0.315647602081299,0.413430035114288,0.428488910198212,0.803413271903992\n             ,0.941741049289703,0.116148002445698,0.315647602081299,0.996930718421936,0.0329510122537613,0.0710170343518257\n             ,0.910823285579681,0.270006626844406,0.312245815992355,0.602918326854706,0.515652477741241,0.608762681484222\n             ,0.229550704360008,0.575565576553345,0.784876227378845,0.413430035114288,0.428488910198212,0.803413271903992\n             ,0.910823285579681,0.270006626844406,0.312245815992355,0.152829229831696,-0.222570449113846,0.962863266468048\n             ,0.0511878095567226,-0.230872601270676,0.971636593341827,0.187374159693718,0.57430511713028,0.796909391880035\n             ,0.602918326854706,0.515652477741241,0.608762681484222,0.602918326854706,0.515652477741241,0.608762681484222\n             ,0.187374159693718,0.57430511713028,0.796909391880035,0.00418568449094892,0.628182590007782,0.778054714202881\n             ,0.229550704360008,0.575565576553345,0.784876227378845,-0.407288640737534,0.570921063423157,0.712857007980347\n             ,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.389561533927917,-0.191748484969139,0.900818705558777\n             ,-0.407288640737534,0.570921063423157,0.712857007980347,-0.659538865089417,0.541105389595032,0.521740794181824\n             ,-0.646896600723267,0.568207919597626,0.508590757846832,-0.402498841285706,0.624280869960785,0.669528245925903\n             ,-0.646896600723267,0.568207919597626,0.508590757846832,-0.659538865089417,0.541105389595032,0.521740794181824\n             ,-0.861413061618805,0.450139373540878,0.235249027609825,-0.752071261405945,0.531812846660614,0.389312088489532\n             ,0.522960782051086,0.842813670635223,-0.127189323306084,0.261382073163986,0.943598508834839,-0.203227162361145\n             ,0.505573332309723,0.856702566146851,0.102256514132023,0.764615535736084,0.640312492847443,0.0732326954603195\n             ,-0.33124178647995,0.767114698886871,0.549375951290131,-0.402498841285706,0.624280869960785,0.669528245925903\n             ,-0.646896600723267,0.568207919597626,0.508590757846832,-0.563141465187073,0.729207098484039,0.388752728700638\n             ,-0.699552893638611,0.686573624610901,0.19809702038765,-0.633913338184357,0.759061396121979,-0.148255288600922\n             ,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.923372864723206,0.289372861385345,-0.252281367778778\n             ,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.244611799716949,0.194430083036423,-0.949927389621735\n             ,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.802868485450745,0.579959869384766,0.138017445802689\n             ,-0.421845138072968,0.35173299908638,-0.835661768913269,-0.244611799716949,0.194430083036423,-0.949927389621735\n             ,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.458068251609802,-0.324115723371506,-0.827721238136292\n             ,-0.272203058004379,0.658502340316772,-0.701626777648926,-0.397901207208633,0.642866194248199,-0.654520928859711\n             ,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.244611799716949,0.194430083036423,-0.949927389621735\n             ,-0.421845138072968,0.35173299908638,-0.835661768913269,0.383173555135727,-0.262150347232819,-0.885694801807404\n             ,0.642500996589661,-0.273710608482361,-0.715733826160431,0.633863806724548,0.397778630256653,-0.663316547870636\n             ,0.398143172264099,0.565787017345428,-0.722057580947876,0.390601873397827,0.504608035087585,-0.769935667514801\n             ,0.432219922542572,0.089619405567646,-0.897303879261017,0.62652999162674,-0.0954440459609032,-0.773531258106232\n             ,0.605724632740021,0.555329561233521,-0.569830477237701,0.62652999162674,-0.0954440459609032,-0.773531258106232\n             ,0.886820495128632,-0.356388479471207,-0.294171094894409,0.859436631202698,0.509184420108795,0.0458242334425449\n             ,0.605724632740021,0.555329561233521,-0.569830477237701,0.642500996589661,-0.273710608482361,-0.715733826160431\n             ,0.850343227386475,-0.422914385795593,-0.313145011663437,0.97103625535965,0.0917741134762764,-0.2206040173769\n             ,0.633863806724548,0.397778630256653,-0.663316547870636,0.654246509075165,0.624168276786804,0.427054405212402\n             ,0.599660396575928,0.629723131656647,0.493817895650864,0.970879018306732,0.17382837831974,0.164856374263763,0.933142781257629\n             ,0.297380536794662,0.202013194561005,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.800276517868042\n             ,0.427208811044693,-0.420773267745972,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.305637359619141\n             ,0.797389090061188,-0.520342588424683,0.525696158409119,0.742150247097015,-0.41576024889946,0.723603904247284\n             ,0.683222591876984,0.0980009809136391,0.906324923038483,0.41602036356926,-0.0741765573620796,0.627528429031372\n             ,0.574077785015106,-0.525968432426453,0.367227405309677,0.346865594387054,0.86303436756134,0.320559591054916\n             ,0.729658484458923,0.6040198802948,-0.202111601829529,0.805501878261566,0.557061612606049,-0.27060467004776,0.441340714693069\n             ,0.855565011501312,-0.305637359619141,0.797389090061188,-0.520342588424683,0.133048385381699,0.622710466384888\n             ,-0.771057546138763,0.193036586046219,0.594731748104095,-0.780404388904572,-0.393562406301498,0.580699265003204\n             ,-0.71266895532608,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.909857094287872,0.391187280416489\n             ,0.138320609927177,-0.752071261405945,0.531812846660614,0.389312088489532,-0.861413061618805,0.450139373540878\n             ,0.235249027609825,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.66440737247467,0.746931433677673\n             ,0.0256171077489853,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.66072803735733,0.731441617012024\n             ,-0.168616935610771,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.905105233192444,0.409709483385086\n             ,-0.113677680492401,-0.911553025245667,0.36151385307312,0.195905029773712,-0.664968252182007,0.74531364440918\n             ,0.0482159554958344,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.392663925886154,0.918741226196289\n             ,-0.0415882430970669,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.686884999275208,0.723168194293976\n             ,-0.0722270086407661,0.311181455850601,0.925608515739441,0.215441450476646,0.227211803197861,0.921236932277679\n             ,0.315748870372772,-0.127702474594116,0.976085126399994,0.175925895571709,-0.0790780931711197,0.992485880851746\n             ,0.0933722108602524,0.597852408885956,0.634572505950928,0.489785879850388,0.780855357646942,0.547496914863586\n             ,0.30085226893425,0.505573332309723,0.856702566146851,0.102256514132023,0.227211803197861,0.921236932277679,0.315748870372772\n             ,0.826885938644409,0.48306405544281,0.287938833236694,0.732339978218079,0.57999724149704,0.356765180826187,0.719103455543518\n             ,0.620088696479797,0.313656240701675,0.796578645706177,0.576386570930481,0.182321041822433,0.796578645706177\n             ,0.576386570930481,0.182321041822433,0.719103455543518,0.620088696479797,0.313656240701675,0.661795139312744\n             ,0.713703632354736,0.229465380311012,0.703840851783752,0.696332156658173,0.140461936593056,0.819103598594666\n             ,0.554179012775421,0.148171901702881,0.748181462287903,0.587628960609436,0.308085650205612,0.665187358856201\n             ,-0.279087334871292,0.692557573318481,0.939882814884186,-0.341329634189606,0.010694270953536,-0.384443581104279\n             ,-0.766654908657074,-0.514240622520447,0.685397624969482,-0.694671988487244,-0.218313813209534,0.317059487104416\n             ,-0.547120809555054,0.774681925773621,-0.666895866394043,-0.560438930988312,0.491078555583954,-0.602886259555817\n             ,0.797378957271576,-0.026737067848444,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.66072803735733\n             ,0.731441617012024,-0.168616935610771,-0.640394568443298,0.754049122333527,-0.145961567759514,0.118139639496803\n             ,-0.728867173194885,0.67438542842865,0.910823285579681,0.270006626844406,0.312245815992355,0.807652294635773\n             ,0.443565875291824,0.388519138097763,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.807652294635773\n             ,0.443565875291824,0.388519138097763,0.762879073619843,0.502556324005127,0.406758666038513,0.914847433567047\n             ,-0.40378075838089,0.00391693273559213,0.993199586868286,-5.2900577429682e-006,0.1164241284132,-0.305622786283493\n             ,0.734605431556702,-0.605763673782349,0.121350355446339,0.714234948158264,-0.68930584192276,0.198126867413521\n             ,0.0765141919255257,-0.977185368537903,-0.445575803518295,0.0603601969778538,-0.89320707321167,-0.906213700771332\n             ,0.328242093324661,-0.266521811485291,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.909857094287872\n             ,0.391187280416489,0.138320609927177,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.842867016792297\n             ,-0.00614785309880972,-0.538086771965027,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.923372864723206\n             ,0.289372861385345,-0.252281367778778,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.426684230566025\n             ,0.00725271692499518,-0.904371619224548,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.828169226646423\n             ,0.35357066988945,-0.434883296489716,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.430813580751419\n             ,0.499041646718979,-0.751902282238007,0.239434629678726,0.547067284584045,-0.802115023136139,0.324593335390091\n             ,0.033190730959177,-0.945271134376526,-0.426684230566025,0.00725271692499518,-0.904371619224548,0.896252334117889\n             ,0.421274542808533,0.138778761029243,0.891313195228577,0.424902439117432,0.158173009753227,0.893702685832977\n             ,0.422671288251877,0.150480911135674,0.882211685180664,0.466362744569778,0.0648712962865829,0.797426402568817\n             ,0.177674129605293,0.57666540145874,0.891313195228577,0.424902439117432,0.158173009753227,0.896252334117889,0.421274542808533\n             ,0.138778761029243,0.878546118736267,0.378491014242172,0.291378289461136,0.870848119258881,0.464649528264999\n             ,0.160388246178627,0.908547043800354,0.339474141597748,0.243515089154243,0.855198323726654,0.434896290302277\n             ,0.281959295272827,0.793782532215118,0.557114601135254,0.24399308860302,0.546093285083771,0.623855233192444,-0.559094548225403\n             ,0.809562027454376,0.57842743396759,-0.100154921412468,0.74566113948822,0.665992856025696,-0.021046232432127\n             ,0.500399529933929,0.708592414855957,-0.497490793466568,-0.647231996059418,0.709673702716827,-0.278305560350418\n             ,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.749007999897003,0.651602983474731,-0.120002493262291\n             ,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.734271168708801,0.669210433959961,-0.114031746983528\n             ,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.702043056488037,0.707515060901642,-0.0809816271066666\n             ,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.727224290370941,0.663318395614624,-0.176503553986549\n             ,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.717040240764618,0.690781652927399,-0.0931341797113419\n             ,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.709426164627075,0.694045186042786,-0.1225391253829\n             ,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.650463998317719,0.74002069234848,-0.171072840690613\n             ,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.640394568443298,0.754049122333527,-0.145961567759514\n             ,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.752064287662506,0.658552467823029,-0.0266082808375359\n             ,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.602886259555817,0.797378957271576,-0.026737067848444\n             ,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.599858164787292,0.75833535194397,0.255142569541931\n             ,-0.471274226903915,0.860716223716736,0.192531064152718,-0.471274226903915,0.860716223716736,0.192531064152718\n             ,-0.599858164787292,0.75833535194397,0.255142569541931,-0.15803237259388,0.792331874370575,0.589267313480377\n             ,-0.13026924431324,0.905642747879028,0.403535783290863,0.661795139312744,0.713703632354736,0.229465380311012\n             ,0.382025003433228,0.832321524620056,0.401618927717209,0.390775859355927,0.856176912784576,0.338016718626022\n             ,0.748181462287903,0.587628960609436,0.308085650205612,0.703840851783752,0.696332156658173,0.140461936593056\n             ,0.661795139312744,0.713703632354736,0.229465380311012,0.748181462287903,0.587628960609436,0.308085650205612\n             ,0.819103598594666,0.554179012775421,0.148171901702881,0.755123436450958,0.652067601680756,0.0677972882986069\n             ,0.729536890983582,0.676141858100891,0.102995507419109,0.658155202865601,0.750174701213837,0.0637934505939484\n             ,0.638639688491821,0.766668796539307,0.0660171657800674,0.755123436450958,0.652067601680756,0.0677972882986069\n             ,0.638639688491821,0.766668796539307,0.0660171657800674,0.615696132183075,0.768994271755219,0.171947747468948\n             ,0.767313122749329,0.622622787952423,0.153530031442642,0.738506376743317,0.594660043716431,0.317785710096359\n             ,0.767313122749329,0.622622787952423,0.153530031442642,0.615696132183075,0.768994271755219,0.171947747468948\n             ,0.596383929252625,0.731881856918335,0.329659104347229,0.613771736621857,0.718874037265778,0.326349973678589\n             ,0.632348001003265,0.720907807350159,0.283598184585571,0.713916897773743,0.653736352920532,0.250901371240616\n             ,0.72310745716095,0.620889782905579,0.302673995494843,0.483161181211472,0.7082759141922,-0.514684855937958,0.711231529712677\n             ,0.702188611030579,-0.0328761637210846,0.671855986118317,0.740681707859039,-0.000314049131702632,0.462542772293091\n             ,0.739023745059967,-0.489793956279755,0.143811240792274,0.67733633518219,-0.721480309963226,0.483161181211472\n             ,0.7082759141922,-0.514684855937958,0.462542772293091,0.739023745059967,-0.489793956279755,0.121350355446339\n             ,0.714234948158264,-0.68930584192276,-0.305622786283493,0.734605431556702,-0.605763673782349,-0.647231996059418\n             ,0.709673702716827,-0.278305560350418,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.300025343894959\n             ,0.704358756542206,-0.643322288990021,0.732339978218079,0.57999724149704,0.356765180826187,0.826885938644409\n             ,0.48306405544281,0.287938833236694,0.854411005973816,0.0699176639318466,0.514872193336487,0.764663100242615\n             ,0.188213542103767,0.616332709789276,0.404268801212311,0.753554701805115,0.518384099006653,0.732339978218079\n             ,0.57999724149704,0.356765180826187,0.764663100242615,0.188213542103767,0.616332709789276,0.367227405309677,0.346865594387054\n             ,0.86303436756134,-0.144893556833267,0.857636988162994,0.493421375751495,0.404268801212311,0.753554701805115\n             ,0.518384099006653,0.367227405309677,0.346865594387054,0.86303436756134,-0.27060467004776,0.441340714693069,0.855565011501312\n             ,-0.52653956413269,0.801656424999237,0.283024877309799,-0.713882029056549,0.360403180122375,0.60040158033371\n             ,-0.911553025245667,0.36151385307312,0.195905029773712,-0.66440737247467,0.746931433677673,0.0256171077489853\n             ,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.911553025245667,0.36151385307312,0.195905029773712\n             ,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.632999122142792,0.753636598587036,-0.177042424678802\n             ,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.99501496553421,0.0992259010672569,-0.00997005868703127\n             ,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.752022266387939,0.649503409862518,-0.112284816801548\n             ,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.972268521785736,0.233539238572121,0.0123817138373852\n             ,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.842867016792297,-0.00614785309880972,-0.538086771965027\n             ,-0.350197345018387,0.671358823776245,-0.653176188468933,-0.721381545066834,0.602611720561981,-0.341273695230484\n             ,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.426684230566025,0.00725271692499518,-0.904371619224548\n             ,-0.426684230566025,0.00725271692499518,-0.904371619224548,0.324593335390091,0.033190730959177,-0.945271134376526\n             ,0.177267909049988,0.365930050611496,-0.91360342502594,-0.350197345018387,0.671358823776245,-0.653176188468933\n             ,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.968909800052643,-0.119059138000011,-0.21688424050808\n             ,0.809562027454376,0.57842743396759,-0.100154921412468,0.546093285083771,0.623855233192444,-0.559094548225403\n             ,0.870848119258881,0.464649528264999,0.160388246178627,0.981737434864044,-0.183587238192558,0.0498724691569805\n             ,0.975513935089111,-0.202585577964783,0.0856255367398262,0.908547043800354,0.339474141597748,0.243515089154243\n             ,0.797426402568817,0.177674129605293,0.57666540145874,0.592115879058838,-0.487801223993301,0.641442716121674\n             ,0.991389572620392,-0.125116944313049,0.0386327914893627,0.891313195228577,0.424902439117432,0.158173009753227\n             ,0.893702685832977,0.422671288251877,0.150480911135674,0.891313195228577,0.424902439117432,0.158173009753227\n             ,0.991389572620392,-0.125116944313049,0.0386327914893627,0.941741049289703,0.116148002445698,0.315647602081299\n             ,0.413176476955414,-0.602903485298157,0.682489991188049,-0.695957362651825,-0.547607123851776,0.464510262012482\n             ,-0.430106282234192,-0.644480228424072,-0.632181823253632,0.712531208992004,-0.546411454677582,-0.440152049064636\n             ,-0.360958158969879,-0.844728171825409,-0.395149976015091,0.595698297023773,-0.718034982681274,-0.359957337379456\n             ,0.450368106365204,-0.655529201030731,0.606176614761353,-0.668817758560181,-0.562513589859009,0.486067175865173\n             ,-0.350197345018387,0.671358823776245,-0.653176188468933,0.177267909049988,0.365930050611496,-0.91360342502594\n             ,0.139554411172867,0.707306206226349,-0.692995309829712,-0.320632964372635,0.735152721405029,-0.597281336784363\n             ,-0.320632964372635,0.735152721405029,-0.597281336784363,0.139554411172867,0.707306206226349,-0.692995309829712\n             ,0.143811240792274,0.67733633518219,-0.721480309963226,-0.300025343894959,0.704358756542206,-0.643322288990021\n             ,-0.144893556833267,0.857636988162994,0.493421375751495,-0.128903239965439,0.870382308959961,0.475203812122345\n             ,0.416522979736328,0.747589826583862,0.517318189144135,0.404268801212311,0.753554701805115,0.518384099006653\n             ,-0.128903239965439,0.870382308959961,0.475203812122345,-0.13026924431324,0.905642747879028,0.403535783290863\n             ,0.382025003433228,0.832321524620056,0.401618927717209,0.416522979736328,0.747589826583862,0.517318189144135\n             ,-0.576912403106689,0.718079209327698,0.389274090528488,-0.202111601829529,0.805501878261566,0.557061612606049\n             ,-0.0790780931711197,0.992485880851746,0.0933722108602524,-0.392663925886154,0.918741226196289,-0.0415882430970669\n             ,0.187374159693718,0.57430511713028,0.796909391880035,-0.407288640737534,0.570921063423157,0.712857007980347\n             ,-0.402498841285706,0.624280869960785,0.669528245925903,0.00418568449094892,0.628182590007782,0.778054714202881\n             ,-0.33124178647995,0.767114698886871,0.549375951290131,0.0206130910664797,0.755090355873108,0.655296623706818\n             ,0.00418568449094892,0.628182590007782,0.778054714202881,-0.402498841285706,0.624280869960785,0.669528245925903\n             ,-0.272203058004379,0.658502340316772,-0.701626777648926,0.12256808578968,0.664539575576782,-0.737132430076599\n             ,0.180026173591614,0.22968553006649,-0.956470131874084,-0.421845138072968,0.35173299908638,-0.835661768913269\n             ,-0.421845138072968,0.35173299908638,-0.835661768913269,0.180026173591614,0.22968553006649,-0.956470131874084\n             ,0.154303297400475,0.424244195222855,-0.892304539680481,-0.397901207208633,0.642866194248199,-0.654520928859711\n             ,-0.713882029056549,0.360403180122375,0.60040158033371,-0.27060467004776,0.441340714693069,0.855565011501312\n             ,-0.202111601829529,0.805501878261566,0.557061612606049,-0.576912403106689,0.718079209327698,0.389274090528488\n             ,0.128622680902481,0.604616940021515,-0.786062717437744,0.178336277604103,0.738516449928284,-0.650222778320313\n             ,0.525696158409119,0.742150247097015,-0.41576024889946,0.627528429031372,0.574077785015106,-0.525968432426453\n             ,-0.127702474594116,0.976085126399994,0.175925895571709,-0.410511583089828,0.907221853733063,0.0918080508708954\n             ,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.0790780931711197,0.992485880851746,0.0933722108602524\n             ,0.330185920000076,-0.571054816246033,0.751580774784088,-0.705251336097717,-0.583878993988037,0.402126729488373\n             ,-0.391103744506836,-0.641536116600037,-0.659900963306427,0.717249751091003,-0.62588095664978,-0.306309938430786\n             ,0.0794514417648315,0.574801087379456,-0.814426898956299,0.627380788326263,0.542527794837952,-0.558620572090149\n             ,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.0525061227381229,0.0318809561431408,-0.998111546039581\n             ,-0.15803237259388,0.792331874370575,0.589267313480377,0.390775859355927,0.856176912784576,0.338016718626022\n             ,0.382025003433228,0.832321524620056,0.401618927717209,-0.13026924431324,0.905642747879028,0.403535783290863\n             ,-0.300025343894959,0.704358756542206,-0.643322288990021,0.143811240792274,0.67733633518219,-0.721480309963226\n             ,0.121350355446339,0.714234948158264,-0.68930584192276,-0.305622786283493,0.734605431556702,-0.605763673782349\n             ,-0.144893556833267,0.857636988162994,0.493421375751495,-0.27060467004776,0.441340714693069,0.855565011501312\n             ,-0.713882029056549,0.360403180122375,0.60040158033371,-0.52653956413269,0.801656424999237,0.283024877309799\n             ,0.177267909049988,0.365930050611496,-0.91360342502594,0.0525061227381229,0.0318809561431408,-0.998111546039581\n             ,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.546093285083771,0.623855233192444,-0.559094548225403\n             ,0.198126867413521,0.0765141919255257,-0.977185368537903,0.648241341114044,-0.506932139396667,-0.568157494068146\n             ,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.147367149591446,-0.401798576116562,-0.903792500495911\n             ,-0.112518116831779,-0.874383687973022,-0.47200945019722,0.312811404466629,-0.918802380561829,-0.240730464458466\n             ,0.248996675014496,-0.917850255966187,0.309114098548889,-0.32362487912178,-0.91464102268219,0.242278203368187\n             ,0.671025335788727,-0.589844524860382,-0.449230968952179,0.412575602531433,-0.667341530323029,0.62002956867218\n             ,-0.596454918384552,-0.699760973453522,0.393161654472351,-0.459699749946594,-0.614600539207459,-0.641047835350037\n             ,-0.773792386054993,-0.604486167430878,-0.189319148659706,0.195960283279419,-0.584128737449646,-0.787650465965271\n             ,0.724370837211609,-0.668023765087128,0.170385256409645,-0.180837586522102,-0.611773490905762,0.770085096359253\n             ,-0.72308760881424,-0.507770538330078,-0.468309044837952,0.349896669387817,-0.784230947494507,-0.512400388717651\n             ,0.437470436096191,-0.700090229511261,0.564352095127106,-0.581261277198792,-0.682450115680695,0.443167269229889\n             ,0.326672673225403,-0.732156872749329,0.597688257694244,-0.308205217123032,-0.725507915019989,-0.615343630313873\n             ,0.147367149591446,-0.401798576116562,-0.903792500495911,0.635097622871399,-0.770463764667511,-0.0551052875816822\n             ,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.671025335788727,-0.589844524860382,-0.449230968952179\n             ,-0.459699749946594,-0.614600539207459,-0.641047835350037,-0.259815841913223,-0.928046464920044,-0.266881018877029\n             ,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.459699749946594,-0.614600539207459,-0.641047835350037\n             ,-0.596454918384552,-0.699760973453522,0.393161654472351,-0.303018301725388,-0.938679337501526,0.164502337574959\n             ,0.412575602531433,-0.667341530323029,0.62002956867218,0.918069958686829,-0.187106743454933,0.3494833111763,-0.303018301725388\n             ,-0.938679337501526,0.164502337574959,-0.596454918384552,-0.699760973453522,0.393161654472351,0.918069958686829\n             ,-0.187106743454933,0.3494833111763,0.412575602531433,-0.667341530323029,0.62002956867218,0.671025335788727,-0.589844524860382\n             ,-0.449230968952179,0.964107513427734,-0.248898878693581,-0.0924450159072876,-0.0517404824495316,-0.448792159557343\n             ,-0.892137050628662,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.370716333389282,-0.925935029983521\n             ,-0.0722066015005112,0.0855752229690552,-0.285937607288361,-0.954419493675232,-0.311763912439346,-0.736566066741943\n             ,0.600228011608124,-0.370716333389282,-0.925935029983521,-0.0722066015005112,-0.76872593164444,-0.625621676445007\n             ,-0.132883220911026,-0.414378970861435,-0.48013111948967,0.773152112960815,0.739399373531342,-0.377425998449326\n             ,0.557528674602509,-0.311763912439346,-0.736566066741943,0.600228011608124,-0.414378970861435,-0.48013111948967\n             ,0.773152112960815,0.474026173353195,-0.576446056365967,0.665589272975922,0.627128839492798,0.0574354380369186\n             ,-0.776795089244843,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.887380838394165,-0.451604127883911\n             ,-0.0927843973040581,0.628591895103455,-0.444956034421921,-0.637876510620117,0.628591895103455,-0.444956034421921\n             ,-0.637876510620117,-0.0517404824495316,-0.448792159557343,-0.892137050628662,0.0855752229690552,-0.285937607288361\n             ,-0.954419493675232,0.627128839492798,0.0574354380369186,-0.776795089244843,-0.773792386054993,-0.604486167430878\n             ,-0.189319148659706,-0.180837586522102,-0.611773490905762,0.770085096359253,-0.0959864854812622,-0.913586139678955\n             ,0.395154267549515,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.518468379974365,-0.848432958126068\n             ,0.106546200811863,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.180837586522102,-0.611773490905762\n             ,0.770085096359253,0.724370837211609,-0.668023765087128,0.170385256409645,0.106877602636814,-0.900658130645752\n             ,-0.421179473400116,0.518468379974365,-0.848432958126068,0.106546200811863,0.724370837211609,-0.668023765087128\n             ,0.170385256409645,0.195960283279419,-0.584128737449646,-0.787650465965271,-0.542883276939392,-0.826726615428925\n             ,-0.147651329636574,0.106877602636814,-0.900658130645752,-0.421179473400116,0.195960283279419,-0.584128737449646\n             ,-0.787650465965271,-0.773792386054993,-0.604486167430878,-0.189319148659706,0.349896669387817,-0.784230947494507\n             ,-0.512400388717651,0.149650126695633,-0.977229058742523,-0.150426715612412,0.259535193443298,-0.932749152183533\n             ,0.250240802764893,0.437470436096191,-0.700090229511261,0.564352095127106,-0.72308760881424,-0.507770538330078\n             ,-0.468309044837952,-0.464242279529572,-0.87283843755722,-0.150440096855164,0.149650126695633,-0.977229058742523\n             ,-0.150426715612412,0.349896669387817,-0.784230947494507,-0.512400388717651,-0.581261277198792,-0.682450115680695\n             ,0.443167269229889,-0.32362487912178,-0.91464102268219,0.242278203368187,-0.464242279529572,-0.87283843755722\n             ,-0.150440096855164,-0.72308760881424,-0.507770538330078,-0.468309044837952,0.437470436096191,-0.700090229511261\n             ,0.564352095127106,0.259535193443298,-0.932749152183533,0.250240802764893,-0.32362487912178,-0.91464102268219\n             ,0.242278203368187,-0.581261277198792,-0.682450115680695,0.443167269229889,-0.810118317604065,-0.284595668315887\n             ,-0.512555956840515,-0.551329076290131,-0.707401514053345,-0.4422886967659,-0.63175368309021,-0.695993006229401\n             ,0.341293066740036,-0.94776064157486,-0.269029259681702,-0.171385675668716,0.248996675014496,-0.917850255966187\n             ,0.309114098548889,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.63175368309021,-0.695993006229401\n             ,0.341293066740036,0.438560783863068,-0.682490229606628,0.584697782993317,0.50744092464447,-0.861680567264557\n             ,0.00320711638778448,0.248996675014496,-0.917850255966187,0.309114098548889,0.438560783863068,-0.682490229606628\n             ,0.584697782993317,0.663442254066467,-0.730678737163544,-0.161099433898926,0.0872491523623466,-0.891694486141205\n             ,-0.444149285554886,0.50744092464447,-0.861680567264557,0.00320711638778448,0.663442254066467,-0.730678737163544\n             ,-0.161099433898926,0.165543153882027,-0.540197908878326,-0.825094938278198,-0.810118317604065,-0.284595668315887\n             ,-0.512555956840515,0.0872491523623466,-0.891694486141205,-0.444149285554886,0.165543153882027,-0.540197908878326\n             ,-0.825094938278198,-0.551329076290131,-0.707401514053345,-0.4422886967659,-0.445575803518295,0.0603601969778538\n             ,-0.89320707321167,0.198126867413521,0.0765141919255257,-0.977185368537903,0.147367149591446,-0.401798576116562\n             ,-0.903792500495911,-0.308205217123032,-0.725507915019989,-0.615343630313873,-0.308205217123032,-0.725507915019989\n             ,-0.615343630313873,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.885131180286407,0.0417930334806442\n             ,-0.4634610414505,-0.445575803518295,0.0603601969778538,-0.89320707321167,-0.259815841913223,-0.928046464920044\n             ,-0.266881018877029,-0.311763912439346,-0.736566066741943,0.600228011608124,0.739399373531342,-0.377425998449326\n             ,0.557528674602509,0.964107513427734,-0.248898878693581,-0.0924450159072876,-0.259815841913223,-0.928046464920044\n             ,-0.266881018877029,0.149650126695633,-0.977229058742523,-0.150426715612412,0.518468379974365,-0.848432958126068\n             ,0.106546200811863,0.106877602636814,-0.900658130645752,-0.421179473400116,-0.370716333389282,-0.925935029983521\n             ,-0.0722066015005112,-0.311763912439346,-0.736566066741943,0.600228011608124,0.518468379974365,-0.848432958126068\n             ,0.106546200811863,0.149650126695633,-0.977229058742523,-0.150426715612412,-0.464242279529572,-0.87283843755722\n             ,-0.150440096855164,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.0959864854812622,-0.913586139678955\n             ,0.395154267549515,-0.464242279529572,-0.87283843755722,-0.150440096855164,0.50744092464447,-0.861680567264557\n             ,0.00320711638778448,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.106877602636814,-0.900658130645752\n             ,-0.421179473400116,0.262460827827454,-0.84521484375,0.465538591146469,0.663442254066467,-0.730678737163544,-0.161099433898926\n             ,0.438560783863068,-0.682490229606628,0.584697782993317,-0.63175368309021,-0.695993006229401,0.341293066740036\n             ,-0.551329076290131,-0.707401514053345,-0.4422886967659,0.326672673225403,-0.732156872749329,0.597688257694244\n             ,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.648241341114044,-0.506932139396667,-0.568157494068146\n             ,0.262460827827454,-0.84521484375,0.465538591146469,0.262460827827454,-0.84521484375,0.465538591146469,0.33387279510498\n             ,-0.734721720218658,0.590519189834595,0.323404222726822,-0.738465547561646,0.591674208641052,0.326672673225403\n             ,-0.732156872749329,0.597688257694244,0.326672673225403,-0.732156872749329,0.597688257694244,0.323404222726822\n             ,-0.738465547561646,0.591674208641052,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.308205217123032\n             ,-0.725507915019989,-0.615343630313873,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.0872491523623466\n             ,-0.891694486141205,-0.444149285554886,0.33387279510498,-0.734721720218658,0.590519189834595,0.262460827827454\n             ,-0.84521484375,0.465538591146469,0.106877602636814,-0.900658130645752,-0.421179473400116,0.33387279510498,-0.734721720218658\n             ,0.590519189834595,-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.348949372768402,-0.852245092391968\n             ,0.389759749174118,0.323404222726822,-0.738465547561646,0.591674208641052,0.33387279510498,-0.734721720218658\n             ,0.590519189834595,0.0872491523623466,-0.891694486141205,-0.444149285554886,-0.810118317604065,-0.284595668315887\n             ,-0.512555956840515,-0.798132300376892,-0.595748007297516,0.0898284390568733,0.301147431135178,-0.680567443370819\n             ,0.667935729026794,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.478905022144318,-0.688271999359131\n             ,-0.544914305210114,0.598684668540955,-0.729470372200012,-0.330831676721573,0.296216726303101,-0.720275163650513\n             ,0.627263367176056,-0.75092750787735,-0.519762337207794,0.407375782728195,-0.420935481786728,-0.595206379890442\n             ,-0.684501767158508,0.593356251716614,-0.709651470184326,-0.379898846149445,0.310219675302505,-0.605204224586487\n             ,0.733138203620911,-0.69564962387085,-0.635027050971985,0.335875362157822,-0.338333308696747,-0.796955823898315\n             ,-0.500391840934753,0.522674977779388,-0.842709720134735,-0.129039421677589,-0.207811191678047,-0.962575137615204\n             ,-0.173964604735374,-0.306766450405121,-0.118458941578865,0.944384336471558,-0.181093856692314,-0.00969438999891281\n             ,0.983418047428131,0.261419922113419,-0.95404326915741,0.146496027708054,-0.306935518980026,-0.919691741466522\n             ,0.244862422347069,0.191650301218033,-0.911473155021667,0.363987505435944,0.389462053775787,-0.886311709880829\n             ,-0.250541061162949,-0.201402932405472,-0.92625367641449,-0.318576455116272,-0.40076744556427,-0.847734689712524\n             ,0.347464174032211,0.118260912597179,-0.832547545433044,0.541182935237885,0.262365132570267,-0.963967680931091\n             ,-0.0439422130584717,-0.207801997661591,-0.930255532264709,-0.302395343780518,-0.362296253442764,-0.902348458766937\n             ,0.233470991253853,0.230480119585991,-0.946770370006561,0.224732518196106,0.334644615650177,-0.86758428812027\n             ,-0.367845684289932,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.295633107423782,-0.949930131435394\n             ,-0.10116221010685,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.706917762756348,-0.104018487036228\n             ,0.699605226516724,0.192425221204758,-0.974552154541016,0.114980839192867,-0.395999372005463,-0.883323132991791\n             ,0.250847965478897,-0.211911574006081,-0.951958775520325,-0.221061065793037,0.314595818519592,-0.93869549036026\n             ,-0.140997156500816,0.148850917816162,-0.924228250980377,0.351632624864578,-0.112518116831779,-0.874383687973022\n             ,-0.47200945019722,-0.339713484048843,-0.93720954656601,0.0789492130279541,0.180372029542923,-0.916134834289551\n             ,0.357998490333557,0.312811404466629,-0.918802380561829,-0.240730464458466,-0.201402932405472,-0.92625367641449\n             ,-0.318576455116272,-0.362296253442764,-0.902348458766937,0.233470991253853,0.900666058063507,-0.271470785140991\n             ,0.339270144701004,0.956566870212555,-0.244721978902817,-0.15840108692646,0.191650301218033,-0.911473155021667\n             ,0.363987505435944,0.262365132570267,-0.963967680931091,-0.0439422130584717,-0.211911574006081,-0.951958775520325\n             ,-0.221061065793037,-0.395999372005463,-0.883323132991791,0.250847965478897,0.389462053775787,-0.886311709880829\n             ,-0.250541061162949,-0.200983807444572,-0.912257611751556,-0.356919497251511,-0.339713484048843,-0.93720954656601\n             ,0.0789492130279541,0.230480119585991,-0.946770370006561,0.224732518196106,-0.207811191678047,-0.962575137615204\n             ,-0.173964604735374,-0.40076744556427,-0.847734689712524,0.347464174032211,0.665187358856201,-0.279087334871292\n             ,0.692557573318481,0.812849104404449,-0.351107835769653,0.464757591485977,-0.295633107423782,-0.949930131435394\n             ,-0.10116221010685,0.192425221204758,-0.974552154541016,0.114980839192867,-0.339781731367111,-0.868737757205963\n             ,0.360337555408478,-0.958362400531769,-0.256493717432022,0.125509053468704,0.148850917816162,-0.924228250980377\n             ,0.351632624864578,0.314595818519592,-0.93869549036026,-0.140997156500816,-0.863033890724182,-0.335786253213882\n             ,-0.377385854721069,0.180372029542923,-0.916134834289551,0.357998490333557,0.326997041702271,-0.921505868434906\n             ,-0.209522947669029,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.931363523006439,-0.361005514860153\n             ,-0.0472965724766254,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.191650301218033,-0.911473155021667\n             ,0.363987505435944,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.306935518980026,-0.919691741466522\n             ,0.244862422347069,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.262365132570267,-0.963967680931091\n             ,-0.0439422130584717,0.192425221204758,-0.974552154541016,0.114980839192867,-0.970349133014679,-0.239411488175392\n             ,0.0332369618117809,-0.912856221199036,-0.241108059883118,0.329485028982162,0.124663800001144,-0.874086201190948\n             ,0.469502121210098,0.085636705160141,-0.288859754800797,0.95353364944458,-0.181093856692314,-0.00969438999891281\n             ,0.983418047428131,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.826135456562042,-0.335000514984131\n             ,0.453072637319565,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.480840772390366,-0.73974883556366\n             ,-0.470705687999725,-0.826135456562042,-0.335000514984131,0.453072637319565,-0.814851105213165,-0.0293110944330692\n             ,0.578928768634796,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.295633107423782,-0.949930131435394\n             ,-0.10116221010685,0.261419922113419,-0.95404326915741,0.146496027708054,0.645033359527588,-0.763978242874146\n             ,0.0164063423871994,0.261419922113419,-0.95404326915741,0.146496027708054,-0.181093856692314,-0.00969438999891281\n             ,0.983418047428131,0.085636705160141,-0.288859754800797,0.95353364944458,0.645033359527588,-0.763978242874146\n             ,0.0164063423871994,0.191650301218033,-0.911473155021667,0.363987505435944,-0.395999372005463,-0.883323132991791\n             ,0.250847965478897,-0.722061336040497,-0.559728622436523,0.406609505414963,0.415498226881027,-0.625033438205719\n             ,0.660828590393066,-0.395615994930267,-0.602470278739929,-0.693193674087524,-0.722061336040497,-0.559728622436523\n             ,0.406609505414963,-0.395999372005463,-0.883323132991791,0.250847965478897,-0.200983807444572,-0.912257611751556\n             ,-0.356919497251511,0.389462053775787,-0.886311709880829,-0.250541061162949,0.709003627300262,-0.541708946228027\n             ,-0.451514393091202,-0.395615994930267,-0.602470278739929,-0.693193674087524,-0.200983807444572,-0.912257611751556\n             ,-0.356919497251511,0.389462053775787,-0.886311709880829,-0.250541061162949,0.191650301218033,-0.911473155021667\n             ,0.363987505435944,0.415498226881027,-0.625033438205719,0.660828590393066,0.709003627300262,-0.541708946228027\n             ,-0.451514393091202,0.230480119585991,-0.946770370006561,0.224732518196106,-0.339713484048843,-0.93720954656601\n             ,0.0789492130279541,-0.705482065677643,-0.662965536117554,0.250542938709259,0.466174304485321,-0.668626964092255\n             ,0.579326808452606,-0.282899647951126,-0.764817118644714,-0.578811287879944,-0.705482065677643,-0.662965536117554\n             ,0.250542938709259,-0.339713484048843,-0.93720954656601,0.0789492130279541,-0.112518116831779,-0.874383687973022\n             ,-0.47200945019722,0.334644615650177,-0.86758428812027,-0.367845684289932,0.557026505470276,-0.731577336788177\n             ,-0.393085300922394,-0.282899647951126,-0.764817118644714,-0.578811287879944,-0.112518116831779,-0.874383687973022\n             ,-0.47200945019722,0.334644615650177,-0.86758428812027,-0.367845684289932,0.230480119585991,-0.946770370006561\n             ,0.224732518196106,0.466174304485321,-0.668626964092255,0.579326808452606,0.557026505470276,-0.731577336788177\n             ,-0.393085300922394,-0.384443581104279,-0.766654908657074,-0.514240622520447,-0.666895866394043,-0.560438930988312\n             ,0.491078555583954,-0.339781731367111,-0.868737757205963,0.360337555408478,-0.211911574006081,-0.951958775520325\n             ,-0.221061065793037,0.685397624969482,-0.694671988487244,-0.218313813209534,-0.384443581104279,-0.766654908657074\n             ,-0.514240622520447,-0.211911574006081,-0.951958775520325,-0.221061065793037,0.262365132570267,-0.963967680931091\n             ,-0.0439422130584717,0.317059487104416,-0.547120809555054,0.774681925773621,0.685397624969482,-0.694671988487244\n             ,-0.218313813209534,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.118260912597179,-0.832547545433044\n             ,0.541182935237885,0.317059487104416,-0.547120809555054,0.774681925773621,0.118260912597179,-0.832547545433044\n             ,0.541182935237885,-0.339781731367111,-0.868737757205963,0.360337555408478,-0.666895866394043,-0.560438930988312\n             ,0.491078555583954,0.610170483589172,-0.773055613040924,0.17342720925808,0.812849104404449,-0.351107835769653\n             ,0.464757591485977,0.441097766160965,0.233705207705498,0.866495609283447,0.343847304582596,-0.196072638034821\n             ,0.918327033519745,0.441097766160965,0.233705207705498,0.866495609283447,-0.306766450405121,-0.118458941578865\n             ,0.944384336471558,-0.545982420444489,-0.58450835943222,0.600210964679718,0.343847304582596,-0.196072638034821\n             ,0.918327033519745,-0.207811191678047,-0.962575137615204,-0.173964604735374,-0.314526081085205,-0.770808577537537\n             ,-0.554010331630707,-0.545982420444489,-0.58450835943222,0.600210964679718,-0.306766450405121,-0.118458941578865\n             ,0.944384336471558,0.610170483589172,-0.773055613040924,0.17342720925808,-0.314526081085205,-0.770808577537537\n             ,-0.554010331630707,-0.207811191678047,-0.962575137615204,-0.173964604735374,0.812849104404449,-0.351107835769653\n             ,0.464757591485977,0.712531208992004,-0.546411454677582,-0.440152049064636,0.956566870212555,-0.244721978902817\n             ,-0.15840108692646,0.810173988342285,-0.314327269792557,0.494789332151413,0.413176476955414,-0.602903485298157\n             ,0.682489991188049,0.810173988342285,-0.314327269792557,0.494789332151413,-0.306935518980026,-0.919691741466522\n             ,0.244862422347069,-0.695957362651825,-0.547607123851776,0.464510262012482,0.413176476955414,-0.602903485298157\n             ,0.682489991188049,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.201402932405472,-0.92625367641449\n             ,-0.318576455116272,-0.430106282234192,-0.644480228424072,-0.632181823253632,-0.695957362651825,-0.547607123851776\n             ,0.464510262012482,0.712531208992004,-0.546411454677582,-0.440152049064636,-0.430106282234192,-0.644480228424072\n             ,-0.632181823253632,-0.201402932405472,-0.92625367641449,-0.318576455116272,0.956566870212555,-0.244721978902817\n             ,-0.15840108692646,-0.668817758560181,-0.562513589859009,0.486067175865173,0.450368106365204,-0.655529201030731\n             ,0.606176614761353,0.900666058063507,-0.271470785140991,0.339270144701004,-0.362296253442764,-0.902348458766937\n             ,0.233470991253853,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.360958158969879,-0.844728171825409\n             ,-0.395149976015091,-0.668817758560181,-0.562513589859009,0.486067175865173,-0.362296253442764,-0.902348458766937\n             ,0.233470991253853,-0.128298670053482,-0.92551976442337,-0.356304109096527,0.9074946641922,-0.352809637784958\n             ,-0.227988600730896,0.595698297023773,-0.718034982681274,-0.359957337379456,-0.360958158969879,-0.844728171825409\n             ,-0.395149976015091,0.595698297023773,-0.718034982681274,-0.359957337379456,0.9074946641922,-0.352809637784958\n             ,-0.227988600730896,0.900666058063507,-0.271470785140991,0.339270144701004,0.450368106365204,-0.655529201030731\n             ,0.606176614761353,0.330185920000076,-0.571054816246033,0.751580774784088,0.717249751091003,-0.62588095664978\n             ,-0.306309938430786,0.939882814884186,-0.341329634189606,0.010694270953536,0.665187358856201,-0.279087334871292\n             ,0.692557573318481,-0.40076744556427,-0.847734689712524,0.347464174032211,-0.705251336097717,-0.583878993988037\n             ,0.402126729488373,0.330185920000076,-0.571054816246033,0.751580774784088,0.665187358856201,-0.279087334871292\n             ,0.692557573318481,-0.705251336097717,-0.583878993988037,0.402126729488373,-0.40076744556427,-0.847734689712524\n             ,0.347464174032211,-0.207801997661591,-0.930255532264709,-0.302395343780518,-0.391103744506836,-0.641536116600037\n             ,-0.659900963306427,0.717249751091003,-0.62588095664978,-0.306309938430786,-0.391103744506836,-0.641536116600037\n             ,-0.659900963306427,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.939882814884186,-0.341329634189606\n             ,0.010694270953536,-0.0837006717920303,-0.567485928535461,0.819117784500122,-0.706917762756348,-0.104018487036228\n             ,0.699605226516724,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.623616337776184,-0.765475332736969\n             ,-0.158588007092476,-0.970349133014679,-0.239411488175392,0.0332369618117809,0.192425221204758,-0.974552154541016\n             ,0.114980839192867,0.668955624103546,-0.737108647823334,-0.0957559272646904,-0.623616337776184,-0.765475332736969\n             ,-0.158588007092476,0.192425221204758,-0.974552154541016,0.114980839192867,-0.706917762756348,-0.104018487036228\n             ,0.699605226516724,-0.0837006717920303,-0.567485928535461,0.819117784500122,0.668955624103546,-0.737108647823334\n             ,-0.0957559272646904,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.912856221199036,-0.241108059883118\n             ,0.329485028982162,-0.863033890724182,-0.335786253213882,-0.377385854721069,-0.478905022144318,-0.688271999359131\n             ,-0.544914305210114,0.598684668540955,-0.729470372200012,-0.330831676721573,-0.478905022144318,-0.688271999359131\n             ,-0.544914305210114,-0.863033890724182,-0.335786253213882,-0.377385854721069,0.314595818519592,-0.93869549036026\n             ,-0.140997156500816,0.301147431135178,-0.680567443370819,0.667935729026794,0.124663800001144,-0.874086201190948\n             ,0.469502121210098,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.691426277160645,-0.534520924091339\n             ,0.486021667718887,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.794416427612305,-0.305552929639816\n             ,-0.524919033050537,-0.420935481786728,-0.595206379890442,-0.684501767158508,-0.75092750787735,-0.519762337207794\n             ,0.407375782728195,0.593356251716614,-0.709651470184326,-0.379898846149445,-0.420935481786728,-0.595206379890442\n             ,-0.684501767158508,-0.794416427612305,-0.305552929639816,-0.524919033050537,0.326997041702271,-0.921505868434906\n             ,-0.209522947669029,0.148850917816162,-0.924228250980377,0.351632624864578,0.296216726303101,-0.720275163650513\n             ,0.627263367176056,0.593356251716614,-0.709651470184326,-0.379898846149445,0.326997041702271,-0.921505868434906\n             ,-0.209522947669029,-0.75092750787735,-0.519762337207794,0.407375782728195,0.296216726303101,-0.720275163650513\n             ,0.627263367176056,0.148850917816162,-0.924228250980377,0.351632624864578,-0.958362400531769,-0.256493717432022\n             ,0.125509053468704,-0.338333308696747,-0.796955823898315,-0.500391840934753,-0.69564962387085,-0.635027050971985\n             ,0.335875362157822,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.68010026216507,-0.471441000699997\n             ,-0.561433076858521,0.312811404466629,-0.918802380561829,-0.240730464458466,0.522674977779388,-0.842709720134735\n             ,-0.129039421677589,-0.338333308696747,-0.796955823898315,-0.500391840934753,-0.68010026216507,-0.471441000699997\n             ,-0.561433076858521,0.522674977779388,-0.842709720134735,-0.129039421677589,0.312811404466629,-0.918802380561829\n             ,-0.240730464458466,0.180372029542923,-0.916134834289551,0.357998490333557,0.310219675302505,-0.605204224586487\n             ,0.733138203620911,-0.69564962387085,-0.635027050971985,0.335875362157822,0.310219675302505,-0.605204224586487\n             ,0.733138203620911,0.180372029542923,-0.916134834289551,0.357998490333557,-0.931363523006439,-0.361005514860153\n             ,-0.0472965724766254,0.259535193443298,-0.932749152183533,0.250240802764893,-0.303018301725388,-0.938679337501526\n             ,0.164502337574959,-0.128298670053482,-0.92551976442337,-0.356304109096527,0.334644615650177,-0.86758428812027\n             ,-0.367845684289932,0.918069958686829,-0.187106743454933,0.3494833111763,0.9074946641922,-0.352809637784958,-0.227988600730896\n             ,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.303018301725388,-0.938679337501526,0.164502337574959\n             ,0.956566870212555,-0.244721978902817,-0.15840108692646,0.900666058063507,-0.271470785140991,0.339270144701004\n             ,0.638639688491821,0.766668796539307,0.0660171657800674,0.658155202865601,0.750174701213837,0.0637934505939484\n             ,-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.15803237259388,0.792331874370575,0.589267313480377\n             ,-0.599858164787292,0.75833535194397,0.255142569541931,-0.814851105213165,-0.0293110944330692,0.578928768634796\n             ,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.599858164787292,0.75833535194397,0.255142569541931\n             ,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.970349133014679,-0.239411488175392,0.0332369618117809\n             ,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.752064287662506,0.658552467823029,-0.0266082808375359\n             ,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.863033890724182,-0.335786253213882,-0.377385854721069\n             ,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.600557804107666,0.788931846618652,-0.13006503880024\n             ,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.906549394130707,0.409386157989502,-0.102816209197044\n             ,-0.816486001014709,0.512708961963654,0.265480846166611,-0.909857094287872,0.391187280416489,0.138320609927177\n             ,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.968974888324738,0.149660646915436,0.196696102619171\n             ,-0.660224080085754,0.688790798187256,0.299451798200607,-0.816486001014709,0.512708961963654,0.265480846166611\n             ,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.359505951404572,0.919594466686249,-0.15843440592289\n             ,-0.33124178647995,0.767114698886871,0.549375951290131,-0.563141465187073,0.729207098484039,0.388752728700638\n             ,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.00761284260079265,0.965830504894257,-0.259062647819519\n             ,0.261382073163986,0.943598508834839,-0.203227162361145,-0.00761284260079265,0.965830504894257,-0.259062647819519\n             ,-0.049139030277729,0.993503928184509,-0.10264165699482,0.505573332309723,0.856702566146851,0.102256514132023\n             ,0.413430035114288,0.428488910198212,0.803413271903992,0.158631011843681,0.588066816329956,0.793103754520416\n             ,0.520070433616638,0.75630134344101,0.396906822919846,0.941741049289703,0.116148002445698,0.315647602081299,0.0206130910664797\n             ,0.755090355873108,0.655296623706818,0.158631011843681,0.588066816329956,0.793103754520416,0.229550704360008\n             ,0.575565576553345,0.784876227378845,0.00418568449094892,0.628182590007782,0.778054714202881,0.261382073163986\n             ,0.943598508834839,-0.203227162361145,0.522960782051086,0.842813670635223,-0.127189323306084,0.158631011843681\n             ,0.588066816329956,0.793103754520416,0.0206130910664797,0.755090355873108,0.655296623706818,-0.00761284260079265\n             ,0.965830504894257,-0.259062647819519,0.261382073163986,0.943598508834839,-0.203227162361145,0.0206130910664797\n             ,0.755090355873108,0.655296623706818,-0.33124178647995,0.767114698886871,0.549375951290131,-0.494772285223007\n             ,0.860163271427155,-0.123772047460079,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.64732962846756\n             ,0.721940577030182,-0.244471192359924,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.258335679769516\n             ,0.945306420326233,-0.199144259095192,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.470422893762589\n             ,0.855190873146057,-0.217602774500847,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.00761284260079265\n             ,0.965830504894257,-0.259062647819519,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.303004384040833\n             ,0.934939086437225,-0.184599980711937,-0.049139030277729,0.993503928184509,-0.10264165699482,0.980522811412811\n             ,0.123100526630878,0.153040006756783,0.894985616207123,0.383079379796982,0.228584766387939,0.780855357646942\n             ,0.547496914863586,0.30085226893425,0.962031662464142,0.166659101843834,0.216147840023041,0.980522811412811,0.123100526630878\n             ,0.153040006756783,0.941741049289703,0.116148002445698,0.315647602081299,0.764615535736084,0.640312492847443\n             ,0.0732326954603195,0.894985616207123,0.383079379796982,0.228584766387939,0.916947364807129,0.362371891736984\n             ,0.167015478014946,0.826885938644409,0.48306405544281,0.287938833236694,0.796578645706177,0.576386570930481,0.182321041822433\n             ,0.847357213497162,0.513431668281555,0.135549768805504,0.703840851783752,0.696332156658173,0.140461936593056\n             ,0.729536890983582,0.676141858100891,0.102995507419109,0.847357213497162,0.513431668281555,0.135549768805504\n             ,0.796578645706177,0.576386570930481,0.182321041822433,0.819103598594666,0.554179012775421,0.148171901702881\n             ,0.658155202865601,0.750174701213837,0.0637934505939484,0.729536890983582,0.676141858100891,0.102995507419109\n             ,0.703840851783752,0.696332156658173,0.140461936593056,0.764663100242615,0.188213542103767,0.616332709789276\n             ,0.854411005973816,0.0699176639318466,0.514872193336487,0.597852408885956,0.634572505950928,0.489785879850388\n             ,0.614538609981537,0.667141020298004,0.421028733253479,0.916947364807129,0.362371891736984,0.167015478014946\n             ,0.893702685832977,0.422671288251877,0.150480911135674,0.941741049289703,0.116148002445698,0.315647602081299\n             ,0.980522811412811,0.123100526630878,0.153040006756783,0.780855357646942,0.547496914863586,0.30085226893425,0.597852408885956\n             ,0.634572505950928,0.489785879850388,0.854411005973816,0.0699176639318466,0.514872193336487,0.962031662464142\n             ,0.166659101843834,0.216147840023041,0.227211803197861,0.921236932277679,0.315748870372772,0.311181455850601\n             ,0.925608515739441,0.215441450476646,0.614538609981537,0.667141020298004,0.421028733253479,0.597852408885956\n             ,0.634572505950928,0.489785879850388,0.227211803197861,0.921236932277679,0.315748870372772,0.505573332309723\n             ,0.856702566146851,0.102256514132023,-0.049139030277729,0.993503928184509,-0.10264165699482,-0.127702474594116\n             ,0.976085126399994,0.175925895571709,-0.127702474594116,0.976085126399994,0.175925895571709,-0.049139030277729\n             ,0.993503928184509,-0.10264165699482,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.410511583089828\n             ,0.907221853733063,0.0918080508708954,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.470422893762589\n             ,0.855190873146057,-0.217602774500847,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.410511583089828\n             ,0.907221853733063,0.0918080508708954,0.826885938644409,0.48306405544281,0.287938833236694,0.916947364807129\n             ,0.362371891736984,0.167015478014946,0.962031662464142,0.166659101843834,0.216147840023041,0.854411005973816\n             ,0.0699176639318466,0.514872193336487,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.559431493282318\n             ,0.828812479972839,0.0103096449747682,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.64732962846756\n             ,0.721940577030182,-0.244471192359924,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.686884999275208\n             ,0.723168194293976,-0.0722270086407661,-0.64732962846756,0.721940577030182,-0.244471192359924,-0.891578018665314\n             ,0.451290994882584,-0.0377500951290131,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.905105233192444\n             ,0.409709483385086,-0.113677680492401,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.740322589874268\n             ,0.65516471862793,-0.150604158639908,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.740322589874268\n             ,0.65516471862793,-0.150604158639908,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.694885432720184\n             ,0.706956088542938,-0.131709337234497,-0.709426164627075,0.694045186042786,-0.1225391253829,-0.676983892917633\n             ,0.720325946807861,-0.15107399225235,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.749487936496735\n             ,0.64631062746048,-0.143354147672653,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.749487936496735\n             ,0.64631062746048,-0.143354147672653,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.733190715312958\n             ,0.653582453727722,-0.187780037522316,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.712907791137695\n             ,0.682124972343445,-0.162689983844757,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.794416427612305\n             ,-0.305552929639816,-0.524919033050537,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.600557804107666\n             ,0.788931846618652,-0.13006503880024,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.719631135463715\n             ,0.672992944717407,-0.170913591980934,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.719631135463715\n             ,0.672992944717407,-0.170913591980934,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.749487936496735\n             ,0.64631062746048,-0.143354147672653,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.745954036712646\n             ,0.638815999031067,-0.188326075673103,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.709426164627075\n             ,0.694045186042786,-0.1225391253829,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.745954036712646\n             ,0.638815999031067,-0.188326075673103,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.931363523006439\n             ,-0.361005514860153,-0.0472965724766254,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.63100528717041\n             ,0.719355642795563,-0.290447652339935,-0.816486001014709,0.512708961963654,0.265480846166611,-0.968974888324738\n             ,0.149660646915436,0.196696102619171,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.258335679769516\n             ,0.945306420326233,-0.199144259095192,-0.563141465187073,0.729207098484039,0.388752728700638,-0.660224080085754\n             ,0.688790798187256,0.299451798200607,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.667403042316437\n             ,0.744478642940521,-0.0180177688598633,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.494772285223007\n             ,0.860163271427155,-0.123772047460079,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.63100528717041\n             ,0.719355642795563,-0.290447652339935,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.472927123308182\n             ,0.876888871192932,0.0860569700598717,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.906549394130707\n             ,0.409386157989502,-0.102816209197044,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.63100528717041\n             ,0.719355642795563,-0.290447652339935,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.864171028137207\n             ,0.408056378364563,-0.294445961713791,-0.968974888324738,0.149660646915436,0.196696102619171,-0.834402322769165\n             ,0.550801813602448,0.0197510607540607,0.658155202865601,0.750174701213837,0.0637934505939484,0.819103598594666\n             ,0.554179012775421,0.148171901702881,0.810173988342285,-0.314327269792557,0.494789332151413,0.956566870212555\n             ,-0.244721978902817,-0.15840108692646,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.939418137073517\n             ,0.146129980683327,-0.310063809156418,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.972268521785736\n             ,0.233539238572121,0.0123817138373852,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.785715341567993\n             ,0.180996224284172,0.591516494750977,-0.699552893638611,0.686573624610901,0.19809702038765,-0.923372864723206\n             ,0.289372861385345,-0.252281367778778,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.699552893638611\n             ,0.686573624610901,0.19809702038765,-0.802868485450745,0.579959869384766,0.138017445802689,-0.699533343315125\n             ,0.693202495574951,-0.173561066389084,-0.305637359619141,0.797389090061188,-0.520342588424683,-0.633913338184357\n             ,0.759061396121979,-0.148255288600922,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.397901207208633\n             ,0.642866194248199,-0.654520928859711,-0.397901207208633,0.642866194248199,-0.654520928859711,0.154303297400475\n             ,0.424244195222855,-0.892304539680481,0.133048385381699,0.622710466384888,-0.771057546138763,-0.305637359619141\n             ,0.797389090061188,-0.520342588424683,0.133048385381699,0.622710466384888,-0.771057546138763,0.154303297400475\n             ,0.424244195222855,-0.892304539680481,0.15365432202816,0.571211695671082,-0.806292474269867,0.193036586046219\n             ,0.594731748104095,-0.780404388904572,0.239434629678726,0.547067284584045,-0.802115023136139,0.160101726651192\n             ,0.546482443809509,-0.822024524211884,0.192081093788147,0.0805686637759209,-0.978066265583038,0.324593335390091\n             ,0.033190730959177,-0.945271134376526,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.957430243492126\n             ,0.286320626735687,0.0367132313549519,-0.785715341567993,0.180996224284172,0.591516494750977,-0.90586119890213\n             ,-0.279545783996582,0.31822881102562,-0.699552893638611,0.686573624610901,0.19809702038765,-0.785715341567993\n             ,0.180996224284172,0.591516494750977,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.802868485450745\n             ,0.579959869384766,0.138017445802689,0.72310745716095,0.620889782905579,0.302673995494843,0.738506376743317,0.594660043716431\n             ,0.317785710096359,0.596383929252625,0.731881856918335,0.329659104347229,0.613771736621857,0.718874037265778\n             ,0.326349973678589,0.878546118736267,0.378491014242172,0.291378289461136,0.738506376743317,0.594660043716431\n             ,0.317785710096359,0.72310745716095,0.620889782905579,0.302673995494843,0.855198323726654,0.434896290302277,0.281959295272827\n             ,0.908547043800354,0.339474141597748,0.243515089154243,0.797426402568817,0.177674129605293,0.57666540145874,0.878546118736267\n             ,0.378491014242172,0.291378289461136,0.855198323726654,0.434896290302277,0.281959295272827,0.797426402568817\n             ,0.177674129605293,0.57666540145874,0.908547043800354,0.339474141597748,0.243515089154243,0.975513935089111,-0.202585577964783\n             ,0.0856255367398262,0.543871879577637,-0.524204134941101,0.655296385288239,0.494092851877213,0.035261906683445\n             ,0.868693768978119,0.633758366107941,-0.479115188121796,0.607288181781769,0.970879018306732,0.17382837831974\n             ,0.164856374263763,0.599660396575928,0.629723131656647,0.493817895650864,0.814328134059906,-0.0162655059248209\n             ,0.580176770687103,0.807652294635773,0.443565875291824,0.388519138097763,0.910823285579681,0.270006626844406\n             ,0.312245815992355,0.996930718421936,0.0329510122537613,0.0710170343518257,0.178336277604103,0.738516449928284\n             ,-0.650222778320313,0.390601873397827,0.504608035087585,-0.769935667514801,0.605724632740021,0.555329561233521\n             ,-0.569830477237701,0.525696158409119,0.742150247097015,-0.41576024889946,0.605724632740021,0.555329561233521\n             ,-0.569830477237701,0.859436631202698,0.509184420108795,0.0458242334425449,0.723603904247284,0.683222591876984\n             ,0.0980009809136391,0.525696158409119,0.742150247097015,-0.41576024889946,0.654246509075165,0.624168276786804\n             ,0.427054405212402,0.762879073619843,0.502556324005127,0.406758666038513,0.807652294635773,0.443565875291824\n             ,0.388519138097763,0.599660396575928,0.629723131656647,0.493817895650864,0.599660396575928,0.629723131656647\n             ,0.493817895650864,0.807652294635773,0.443565875291824,0.388519138097763,0.814328134059906,-0.0162655059248209\n             ,0.580176770687103,0.494092851877213,0.035261906683445,0.868693768978119,0.633758366107941,-0.479115188121796\n             ,0.607288181781769,0.494092851877213,0.035261906683445,0.868693768978119,0.814328134059906,-0.0162655059248209\n             ,0.580176770687103,0.655400395393372,-0.538768291473389,0.52931934595108,0.0525061227381229,0.0318809561431408\n             ,-0.998111546039581,0.192081093788147,0.0805686637759209,-0.978066265583038,0.160101726651192,0.546482443809509\n             ,-0.822024524211884,0.0794514417648315,0.574801087379456,-0.814426898956299,0.160101726651192,0.546482443809509\n             ,-0.822024524211884,0.15365432202816,0.571211695671082,-0.806292474269867,0.128622680902481,0.604616940021515\n             ,-0.786062717437744,0.0794514417648315,0.574801087379456,-0.814426898956299,-0.414378970861435,-0.48013111948967\n             ,0.773152112960815,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.0517404824495316,-0.448792159557343\n             ,-0.892137050628662,0.628591895103455,-0.444956034421921,-0.637876510620117,0.887380838394165,-0.451604127883911\n             ,-0.0927843973040581,0.474026173353195,-0.576446056365967,0.665589272975922,-0.551329076290131,-0.707401514053345\n             ,-0.4422886967659,0.165543153882027,-0.540197908878326,-0.825094938278198,0.663442254066467,-0.730678737163544\n             ,-0.161099433898926,-0.348949372768402,-0.852245092391968,0.389759749174118,-0.620602905750275,-0.69584184885025\n             ,-0.361463844776154,0.323404222726822,-0.738465547561646,0.591674208641052,0.343847304582596,-0.196072638034821\n             ,0.918327033519745,-0.545982420444489,-0.58450835943222,0.600210964679718,-0.314526081085205,-0.770808577537537\n             ,-0.554010331630707,0.610170483589172,-0.773055613040924,0.17342720925808,-0.0837006717920303,-0.567485928535461\n             ,0.819117784500122,-0.623616337776184,-0.765475332736969,-0.158588007092476,0.668955624103546,-0.737108647823334\n             ,-0.0957559272646904,0.598684668540955,-0.729470372200012,-0.330831676721573,0.314595818519592,-0.93869549036026\n             ,-0.140997156500816,0.124663800001144,-0.874086201190948,0.469502121210098,0.301147431135178,-0.680567443370819\n             ,0.667935729026794,-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.810118317604065,-0.284595668315887\n             ,-0.512555956840515,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.885131180286407,0.0417930334806442\n             ,-0.4634610414505,0.627128839492798,0.0574354380369186,-0.776795089244843,0.0855752229690552,-0.285937607288361\n             ,-0.954419493675232,0.648241341114044,-0.506932139396667,-0.568157494068146,0.198126867413521,0.0765141919255257\n             ,-0.977185368537903,0.969612717628479,0.0529157817363739,0.238853618502617,0.918069958686829,-0.187106743454933\n             ,0.3494833111763,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.887380838394165,-0.451604127883911\n             ,-0.0927843973040581,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.739399373531342,-0.377425998449326\n             ,0.557528674602509,0.474026173353195,-0.576446056365967,0.665589272975922,-0.647231996059418,0.709673702716827\n             ,-0.278305560350418,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.94776064157486,-0.269029259681702\n             ,-0.171385675668716,-0.702043056488037,0.707515060901642,-0.0809816271066666,0.198126867413521,0.0765141919255257\n             ,-0.977185368537903,0.121350355446339,0.714234948158264,-0.68930584192276,0.462542772293091,0.739023745059967\n             ,-0.489793956279755,0.627128839492798,0.0574354380369186,-0.776795089244843,0.633758366107941,-0.479115188121796\n             ,0.607288181781769,0.655400395393372,-0.538768291473389,0.52931934595108,0.592115879058838,-0.487801223993301\n             ,0.641442716121674,0.543871879577637,-0.524204134941101,0.655296385288239,0.970879018306732,0.17382837831974\n             ,0.164856374263763,0.633758366107941,-0.479115188121796,0.607288181781769,0.543871879577637,-0.524204134941101\n             ,0.655296385288239,0.975513935089111,-0.202585577964783,0.0856255367398262,0.627528429031372,0.574077785015106\n             ,-0.525968432426453,0.906324923038483,0.41602036356926,-0.0741765573620796,0.926415085792542,0.366669327020645\n             ,-0.085490919649601,0.627380788326263,0.542527794837952,-0.558620572090149,0.128622680902481,0.604616940021515\n             ,-0.786062717437744,0.627528429031372,0.574077785015106,-0.525968432426453,0.627380788326263,0.542527794837952\n             ,-0.558620572090149,0.0794514417648315,0.574801087379456,-0.814426898956299,0.15365432202816,0.571211695671082\n             ,-0.806292474269867,0.154303297400475,0.424244195222855,-0.892304539680481,0.178336277604103,0.738516449928284\n             ,-0.650222778320313,0.128622680902481,0.604616940021515,-0.786062717437744,0.193036586046219,0.594731748104095\n             ,-0.780404388904572,0.15365432202816,0.571211695671082,-0.806292474269867,0.160101726651192,0.546482443809509\n             ,-0.822024524211884,0.239434629678726,0.547067284584045,-0.802115023136139,-0.393562406301498,0.580699265003204\n             ,-0.71266895532608,0.193036586046219,0.594731748104095,-0.780404388904572,0.239434629678726,0.547067284584045\n             ,-0.802115023136139,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.430813580751419,0.499041646718979\n             ,-0.751902282238007,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.800276517868042,0.427208811044693\n             ,-0.420773267745972,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.90586119890213,-0.279545783996582\n             ,0.31822881102562,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.936574637889862,0.00382737815380096\n             ,-0.350447237491608,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.875641226768494,-0.338847458362579\n             ,0.344143718481064,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.90586119890213,-0.279545783996582\n             ,0.31822881102562,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.875641226768494,-0.338847458362579\n             ,0.344143718481064,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.906213700771332,0.328242093324661\n             ,-0.266521811485291,-0.921413004398346,-0.24597555398941,0.300822287797928,0.969612717628479,0.0529157817363739\n             ,0.238853618502617,0.632348001003265,0.720907807350159,0.283598184585571,0.613771736621857,0.718874037265778\n             ,0.326349973678589,0.918069958686829,-0.187106743454933,0.3494833111763,0.398143172264099,0.565787017345428,-0.722057580947876\n             ,0.633863806724548,0.397778630256653,-0.663316547870636,0.62652999162674,-0.0954440459609032,-0.773531258106232\n             ,0.432219922542572,0.089619405567646,-0.897303879261017,0.633863806724548,0.397778630256653,-0.663316547870636\n             ,0.97103625535965,0.0917741134762764,-0.2206040173769,0.886820495128632,-0.356388479471207,-0.294171094894409\n             ,0.62652999162674,-0.0954440459609032,-0.773531258106232,-0.458068251609802,-0.324115723371506,-0.827721238136292\n             ,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.12256808578968,0.664539575576782,-0.737132430076599\n             ,-0.272203058004379,0.658502340316772,-0.701626777648926,-0.656110644340515,0.732090890407562,-0.183198615908623\n             ,-0.308493584394455,0.950873613357544,0.02590411901474,-0.0896633565425873,0.986825108528137,-0.134672433137894\n             ,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.576912403106689,0.718079209327698,0.389274090528488\n             ,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.664968252182007,0.74531364440918,0.0482159554958344\n             ,0.320559591054916,0.729658484458923,0.6040198802948,0.614538609981537,0.667141020298004,0.421028733253479,0.311181455850601\n             ,0.925608515739441,0.215441450476646,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.814851105213165\n             ,-0.0293110944330692,0.578928768634796,-0.599858164787292,0.75833535194397,0.255142569541931,0.941741049289703\n             ,0.116148002445698,0.315647602081299,0.991389572620392,-0.125116944313049,0.0386327914893627,0.996930718421936\n             ,0.0329510122537613,0.0710170343518257,-0.861413061618805,0.450139373540878,0.235249027609825,-0.659538865089417\n             ,0.541105389595032,0.521740794181824,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.861413061618805\n             ,0.450139373540878,0.235249027609825,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.837489604949951\n             ,-0.137019082903862,0.528996169567108,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.909857094287872\n             ,0.391187280416489,0.138320609927177,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.559431493282318\n             ,0.828812479972839,0.0103096449747682,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.410511583089828\n             ,0.907221853733063,0.0918080508708954,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.970349133014679\n             ,-0.239411488175392,0.0332369618117809,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.906213700771332\n             ,0.328242093324661,-0.266521811485291,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.921413004398346\n             ,-0.24597555398941,0.300822287797928,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.936574637889862\n             ,0.00382737815380096,-0.350447237491608,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.15803237259388\n             ,0.792331874370575,0.589267313480377,-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.306766450405121\n             ,-0.118458941578865,0.944384336471558,0.819103598594666,0.554179012775421,0.148171901702881,0.939882814884186\n             ,-0.341329634189606,0.010694270953536,0.810173988342285,-0.314327269792557,0.494789332151413,0.748181462287903\n             ,0.587628960609436,0.308085650205612,0.812849104404449,-0.351107835769653,0.464757591485977,0.665187358856201\n             ,-0.279087334871292,0.692557573318481,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.494772285223007\n             ,0.860163271427155,-0.123772047460079,-0.258335679769516,0.945306420326233,-0.199144259095192,0.158631011843681\n             ,0.588066816329956,0.793103754520416,0.413430035114288,0.428488910198212,0.803413271903992,0.229550704360008\n             ,0.575565576553345,0.784876227378845,0.520070433616638,0.75630134344101,0.396906822919846,0.158631011843681,0.588066816329956\n             ,0.793103754520416,0.522960782051086,0.842813670635223,-0.127189323306084,-0.99501496553421,0.0992259010672569\n             ,-0.00997005868703127,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.968974888324738,0.149660646915436\n             ,0.196696102619171,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.64732962846756,0.721940577030182\n             ,-0.244471192359924,-0.669141829013824,0.742036163806915,-0.0403926707804203,0.980522811412811,0.123100526630878\n             ,0.153040006756783,0.962031662464142,0.166659101843834,0.216147840023041,0.916947364807129,0.362371891736984\n             ,0.167015478014946,0.780855357646942,0.547496914863586,0.30085226893425,0.894985616207123,0.383079379796982,0.228584766387939\n             ,0.505573332309723,0.856702566146851,0.102256514132023,0.894985616207123,0.383079379796982,0.228584766387939\n             ,0.764615535736084,0.640312492847443,0.0732326954603195,0.505573332309723,0.856702566146851,0.102256514132023\n             ,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.906549394130707,0.409386157989502,-0.102816209197044\n             ,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.359505951404572,0.919594466686249,-0.15843440592289\n             ,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.258335679769516,0.945306420326233,-0.199144259095192\n             ,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.929460346698761,0.35161367058754,-0.111674793064594\n             ,-0.802868485450745,0.579959869384766,0.138017445802689,0.192081093788147,0.0805686637759209,-0.978066265583038\n             ,0.177267909049988,0.365930050611496,-0.91360342502594,0.324593335390091,0.033190730959177,-0.945271134376526\n             ,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.875641226768494,-0.338847458362579,0.344143718481064\n             ,-0.858353078365326,-0.409084886312485,0.309644252061844,0.918069958686829,-0.187106743454933,0.3494833111763\n             ,0.613771736621857,0.718874037265778,0.326349973678589,0.596383929252625,0.731881856918335,0.329659104347229\n             ,0.592115879058838,-0.487801223993301,0.641442716121674,0.797426402568817,0.177674129605293,0.57666540145874\n             ,0.543871879577637,-0.524204134941101,0.655296385288239,0.177267909049988,0.365930050611496,-0.91360342502594\n             ,0.192081093788147,0.0805686637759209,-0.978066265583038,0.0525061227381229,0.0318809561431408,-0.998111546039581\n             ,0.970879018306732,0.17382837831974,0.164856374263763,0.947628259658813,0.256551682949066,0.190215542912483,0.933142781257629\n             ,0.297380536794662,0.202013194561005,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.828169226646423\n             ,0.35357066988945,-0.434883296489716,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.906213700771332\n             ,0.328242093324661,-0.266521811485291,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.99501496553421\n             ,0.0992259010672569,-0.00997005868703127,0.655400395393372,-0.538768291473389,0.52931934595108,0.991389572620392\n             ,-0.125116944313049,0.0386327914893627,0.592115879058838,-0.487801223993301,0.641442716121674,0.993199586868286\n             ,-5.2900577429682e-006,0.1164241284132,0.914847433567047,-0.40378075838089,0.00391693273559213,0.985846102237701\n             ,-0.106943093240261,0.129114612936974,0.26786082983017,0.938322722911835,-0.218634366989136,0.34263151884079\n             ,0.695380985736847,-0.631703197956085,0.0982041954994202,0.744845330715179,-0.659970700740814,0.149676010012627\n             ,0.966882228851318,-0.20672644674778,0.0982041954994202,0.744845330715179,-0.659970700740814,0.34263151884079\n             ,0.695380985736847,-0.631703197956085,0.341541588306427,0.10033044219017,-0.934496164321899,0.00497482251375914\n             ,0.164960786700249,-0.986287593841553,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,0.377974539995193\n             ,-0.0538287870585918,-0.924249827861786,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.00533884158357978\n             ,0.0413248725235462,-0.999131500720978,0.00533884158357978,0.0413248725235462,-0.999131500720978,0.433557748794556\n             ,-0.0273693483322859,-0.900710046291351,0.282903432846069,-0.614905893802643,-0.736109018325806,-0.0723040401935577\n             ,-0.562818825244904,-0.823411822319031,-0.0723040401935577,-0.562818825244904,-0.823411822319031,0.282903432846069\n             ,-0.614905893802643,-0.736109018325806,0.383173555135727,-0.262150347232819,-0.885694801807404,-0.03597491979599\n             ,-0.262611389160156,-0.964230835437775,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.383173555135727\n             ,-0.262150347232819,-0.885694801807404,0.398143172264099,0.565787017345428,-0.722057580947876,0.12256808578968\n             ,0.664539575576782,-0.737132430076599,0.12256808578968,0.664539575576782,-0.737132430076599,0.398143172264099\n             ,0.565787017345428,-0.722057580947876,0.432219922542572,0.089619405567646,-0.897303879261017,0.180026173591614\n             ,0.22968553006649,-0.956470131874084,0.154303297400475,0.424244195222855,-0.892304539680481,0.180026173591614\n             ,0.22968553006649,-0.956470131874084,0.432219922542572,0.089619405567646,-0.897303879261017,0.390601873397827\n             ,0.504608035087585,-0.769935667514801,0.178336277604103,0.738516449928284,-0.650222778320313,0.154303297400475\n             ,0.424244195222855,-0.892304539680481,0.390601873397827,0.504608035087585,-0.769935667514801,-0.995019972324371\n             ,0.0198635049164295,0.0976764634251595,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.850299119949341\n             ,0.0502048023045063,0.523899674415588,-0.976002871990204,0.137454673647881,0.168892458081245,-0.668019652366638\n             ,-0.146763682365417,0.729527354240417,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.850299119949341\n             ,0.0502048023045063,0.523899674415588,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.147625342011452\n             ,-0.322125315666199,0.935116052627563,-0.141525283455849,-0.0639705210924149,0.987865567207336,-0.652125775814056\n             ,-0.00108898046892136,0.758109986782074,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.147625342011452\n             ,-0.322125315666199,0.935116052627563,0.503679692745209,-0.333046585321426,0.797111511230469,0.538123428821564\n             ,-0.0776133164763451,0.839285016059875,-0.141525283455849,-0.0639705210924149,0.987865567207336,0.717245042324066\n             ,0.0185855161398649,0.696573138237,0.538123428821564,-0.0776133164763451,0.839285016059875,0.503679692745209\n             ,-0.333046585321426,0.797111511230469,0.76161140203476,-0.261901050806046,0.592752873897552,0.949140191078186\n             ,-0.201623901724815,0.241827890276909,0.961548805236816,-0.0192979723215103,0.273955345153809,0.717245042324066\n             ,0.0185855161398649,0.696573138237,0.76161140203476,-0.261901050806046,0.592752873897552,0.949140191078186,-0.201623901724815\n             ,0.241827890276909,0.941822648048401,-0.153352871537209,-0.299086838960648,0.967416942119598,-0.0268917102366686\n             ,-0.251756459474564,0.961548805236816,-0.0192979723215103,0.273955345153809,-0.505583822727203,0.0150259397923946\n             ,-0.862646639347076,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.886800348758698,0.175986841320992\n             ,-0.427333265542984,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.522813379764557,0.17926724255085\n             ,-0.833384335041046,0.00497482251375914,0.164960786700249,-0.986287593841553,-5.02178700116929e-005,0.0272602327167988\n             ,-0.999628365039825,-0.505583822727203,0.0150259397923946,-0.862646639347076,0.341541588306427,0.10033044219017\n             ,-0.934496164321899,0.377974539995193,-0.0538287870585918,-0.924249827861786,-5.02178700116929e-005,0.0272602327167988\n             ,-0.999628365039825,0.00497482251375914,0.164960786700249,-0.986287593841553,0.733689785003662,-0.00598063552752137\n             ,-0.679458260536194,0.70794689655304,-0.166302517056465,-0.686407029628754,0.377974539995193,-0.0538287870585918\n             ,-0.924249827861786,0.341541588306427,0.10033044219017,-0.934496164321899,-0.903742134571075,0.0408328101038933\n             ,0.426125347614288,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.995019972324371,0.0198635049164295\n             ,0.0976764634251595,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.668019652366638,-0.146763682365417\n             ,0.729527354240417,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.903742134571075,0.0408328101038933\n             ,0.426125347614288,-0.697896897792816,0.111968666315079,0.707391619682312,-0.713874757289886,0.186937421560287\n             ,-0.674860894680023,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.932169854640961,0.263871490955353\n             ,-0.247853130102158,-0.482705980539322,0.267842918634415,-0.833819627761841,-0.482705980539322,0.267842918634415\n             ,-0.833819627761841,-0.244611799716949,0.194430083036423,-0.949927389621735,0.505280077457428,-0.213028207421303\n             ,-0.836248159408569,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.929460346698761,0.35161367058754\n             ,-0.111674793064594,-0.861413061618805,0.450139373540878,0.235249027609825,-0.837489604949951,-0.137019082903862\n             ,0.528996169567108,-0.802868485450745,0.579959869384766,0.138017445802689,-0.389561533927917,-0.191748484969139\n             ,0.900818705558777,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.659538865089417,0.541105389595032\n             ,0.521740794181824,-0.407288640737534,0.570921063423157,0.712857007980347,0.0511878095567226,-0.230872601270676\n             ,0.971636593341827,-0.213112205266953,-0.0906345173716545,0.972814738750458,0.187374159693718,0.57430511713028\n             ,0.796909391880035,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.985846102237701,-0.106943093240261\n             ,0.129114612936974,0.846594989299774,-0.529064953327179,0.0580276139080524,0.867540001869202,-0.48896712064743\n             ,-0.0910244435071945,0.914847433567047,-0.40378075838089,0.00391693273559213,0.886820495128632,-0.356388479471207\n             ,-0.294171094894409,0.97103625535965,0.0917741134762764,-0.2206040173769,0.985846102237701,-0.106943093240261\n             ,0.129114612936974,0.762879073619843,0.502556324005127,0.406758666038513,0.859436631202698,0.509184420108795\n             ,0.0458242334425449,0.886820495128632,-0.356388479471207,-0.294171094894409,0.914847433567047,-0.40378075838089\n             ,0.00391693273559213,0.723603904247284,0.683222591876984,0.0980009809136391,0.859436631202698,0.509184420108795\n             ,0.0458242334425449,0.762879073619843,0.502556324005127,0.406758666038513,0.654246509075165,0.624168276786804\n             ,0.427054405212402,0.723603904247284,0.683222591876984,0.0980009809136391,0.654246509075165,0.624168276786804\n             ,0.427054405212402,0.933142781257629,0.297380536794662,0.202013194561005,0.906324923038483,0.41602036356926,-0.0741765573620796\n             ,0.947628259658813,0.256551682949066,0.190215542912483,0.926415085792542,0.366669327020645,-0.085490919649601\n             ,0.906324923038483,0.41602036356926,-0.0741765573620796,0.933142781257629,0.297380536794662,0.202013194561005\n             ,0.926415085792542,0.366669327020645,-0.085490919649601,0.947628259658813,0.256551682949066,0.190215542912483\n             ,0.981737434864044,-0.183587238192558,0.0498724691569805,0.968909800052643,-0.119059138000011,-0.21688424050808\n             ,0.809562027454376,0.57842743396759,-0.100154921412468,0.968909800052643,-0.119059138000011,-0.21688424050808\n             ,0.981737434864044,-0.183587238192558,0.0498724691569805,0.870848119258881,0.464649528264999,0.160388246178627\n             ,0.809562027454376,0.57842743396759,-0.100154921412468,0.870848119258881,0.464649528264999,0.160388246178627\n             ,0.793782532215118,0.557114601135254,0.24399308860302,0.74566113948822,0.665992856025696,-0.021046232432127,0.711231529712677\n             ,0.702188611030579,-0.0328761637210846,0.74566113948822,0.665992856025696,-0.021046232432127,0.793782532215118\n             ,0.557114601135254,0.24399308860302,0.713916897773743,0.653736352920532,0.250901371240616,0.632348001003265,0.720907807350159\n             ,0.283598184585571,0.671855986118317,0.740681707859039,-0.000314049131702632,0.711231529712677,0.702188611030579\n             ,-0.0328761637210846,0.713916897773743,0.653736352920532,0.250901371240616,0.999210178852081,0.0289647411555052\n             ,-0.0272047873586416,0.671855986118317,0.740681707859039,-0.000314049131702632,0.632348001003265,0.720907807350159\n             ,0.283598184585571,0.969612717628479,0.0529157817363739,0.238853618502617,0.999210178852081,0.0289647411555052\n             ,-0.0272047873586416,0.969612717628479,0.0529157817363739,0.238853618502617,0.964107513427734,-0.248898878693581\n             ,-0.0924450159072876,0.739399373531342,-0.377425998449326,0.557528674602509,-0.47929310798645,-0.284916669130325\n             ,-0.830120861530304,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.944391250610352,-0.0824343115091324\n             ,-0.3183234333992,-0.383484423160553,-0.10283836722374,-0.917803883552551,-0.383484423160553,-0.10283836722374\n             ,-0.917803883552551,-0.944391250610352,-0.0824343115091324,-0.3183234333992,-0.698255062103271,-0.555874645709991\n             ,-0.451046735048294,-0.382079601287842,0.0211677625775337,-0.923886954784393,-0.828753769397736,-0.00401695584878325\n             ,0.559599041938782,-0.653040766716003,-0.484619319438934,-0.581963837146759,-0.587613880634308,-0.804071664810181\n             ,0.0904360190033913,-0.650360941886902,-0.2744460105896,0.708314895629883,-0.828753769397736,-0.00401695584878325\n             ,0.559599041938782,-0.812033832073212,-0.319456815719604,0.488414168357849,-0.964972972869873,-0.0338398963212967\n             ,-0.260157763957977,-0.47929310798645,-0.284916669130325,-0.830120861530304,-0.653040766716003,-0.484619319438934\n             ,-0.581963837146759,0.118139639496803,-0.728867173194885,0.67438542842865,-0.944391250610352,-0.0824343115091324\n             ,-0.3183234333992,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.812033832073212,-0.319456815719604\n             ,0.488414168357849,-0.583520650863647,-0.523498177528381,0.620848834514618,0.0390605479478836,-0.798295617103577\n             ,-0.600997805595398,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.867540001869202,-0.48896712064743\n             ,-0.0910244435071945,0.846594989299774,-0.529064953327179,0.0580276139080524,-0.944391250610352,-0.0824343115091324\n             ,-0.3183234333992,0.118139639496803,-0.728867173194885,0.67438542842865,-0.698255062103271,-0.555874645709991\n             ,-0.451046735048294,0.867540001869202,-0.48896712064743,-0.0910244435071945,0.118139639496803,-0.728867173194885\n             ,0.67438542842865,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.751028060913086,-0.474978506565094\n             ,-0.458641737699509,0.332680404186249,-0.441110402345657,0.833513855934143,0.202261254191399,-0.191956058144569\n             ,0.960334956645966,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.202261254191399,-0.191956058144569\n             ,0.960334956645966,-0.201129660010338,-0.411518931388855,0.888931393623352,0.0923520997166634,-0.948987245559692\n             ,0.301486879587173,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.332680404186249,-0.441110402345657\n             ,0.833513855934143,0.751028060913086,-0.474978506565094,-0.458641737699509,0.505280077457428,-0.213028207421303\n             ,-0.836248159408569,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.837489604949951,-0.137019082903862\n             ,0.528996169567108,0.118139639496803,-0.728867173194885,0.67438542842865,0.867540001869202,-0.48896712064743\n             ,-0.0910244435071945,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.871833384037018,0.0184005852788687\n             ,0.489456832408905,0.909544348716736,-0.0496345721185207,0.412632375955582,0.928275108337402,-0.108704164624214\n             ,0.355652451515198,0.807208120822906,-0.16038890182972,0.568058490753174,0.938030481338501,-0.164544522762299\n             ,-0.304998099803925,0.928275108337402,-0.108704164624214,0.355652451515198,0.909544348716736,-0.0496345721185207\n             ,0.412632375955582,0.934698820114136,0.0468888580799103,-0.352334558963776,0.934698820114136,0.0468888580799103\n             ,-0.352334558963776,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.0390605479478836,-0.798295617103577\n             ,-0.600997805595398,0.938030481338501,-0.164544522762299,-0.304998099803925,-0.698255062103271,-0.555874645709991\n             ,-0.451046735048294,0.0390605479478836,-0.798295617103577,-0.600997805595398,-0.382079601287842,0.0211677625775337\n             ,-0.923886954784393,0.456334859132767,-0.263855695724487,0.849787414073944,0.546681344509125,-0.221680983901024\n             ,0.807463347911835,0.928847432136536,0.162274017930031,0.333030939102173,0.928847432136536,0.162274017930031\n             ,0.333030939102173,0.969195008277893,0.116620995104313,0.216934517025948,0.953069984912872,0.0484385639429092\n             ,0.298849850893021,0.871833384037018,0.0184005852788687,0.489456832408905,0.714491784572601,0.142257153987885\n             ,0.685028791427612,0.30596736073494,-0.302397102117538,0.902740240097046,0.456334859132767,-0.263855695724487\n             ,0.849787414073944,0.928847432136536,0.162274017930031,0.333030939102173,0.161164596676826,-0.331503033638,0.929586827754974\n             ,0.30596736073494,-0.302397102117538,0.902740240097046,0.714491784572601,0.142257153987885,0.685028791427612\n             ,0.709949553012848,0.601409435272217,0.366440117359161,0.961548805236816,-0.0192979723215103,0.273955345153809\n             ,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.785880386829376,0.614527404308319,-0.0689060613512993\n             ,0.785880386829376,0.614527404308319,-0.0689060613512993,0.632241547107697,0.646320283412933,-0.427247822284698\n             ,0.404174894094467,0.903538584709167,-0.142339900135994,0.462400853633881,0.884378015995026,0.0637255683541298\n             ,0.632241547107697,0.646320283412933,-0.427247822284698,0.785880386829376,0.614527404308319,-0.0689060613512993\n             ,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.733689785003662,-0.00598063552752137,-0.679458260536194\n             ,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.967416942119598,-0.0268917102366686,-0.251756459474564\n             ,0.941822648048401,-0.153352871537209,-0.299086838960648,0.70794689655304,-0.166302517056465,-0.686407029628754\n             ,0.70794689655304,-0.166302517056465,-0.686407029628754,0.941822648048401,-0.153352871537209,-0.299086838960648\n             ,0.820765018463135,-0.278661012649536,-0.4986911714077,0.71175479888916,-0.136520832777023,-0.689033508300781\n             ,0.71175479888916,-0.136520832777023,-0.689033508300781,0.820765018463135,-0.278661012649536,-0.4986911714077\n             ,0.433943748474121,-0.801411271095276,-0.411622196435928,0.471586465835571,-0.672621011734009,-0.570251822471619\n             ,0.471586465835571,-0.672621011734009,-0.570251822471619,0.433943748474121,-0.801411271095276,-0.411622196435928\n             ,0.850343227386475,-0.422914385795593,-0.313145011663437,0.642500996589661,-0.273710608482361,-0.715733826160431\n             ,-0.683505356311798,0.663009881973267,0.305349379777908,-0.258647561073303,0.909015476703644,0.326790869235992\n             ,-0.343125730752945,0.914759814739227,0.213258653879166,-0.722104966640472,0.687272310256958,0.0788739323616028\n             ,-0.683505356311798,0.663009881973267,0.305349379777908,-0.722104966640472,0.687272310256958,0.0788739323616028\n             ,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.976002871990204,0.137454673647881,0.168892458081245\n             ,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.995019972324371,0.0198635049164295,0.0976764634251595\n             ,-0.976002871990204,0.137454673647881,0.168892458081245,-0.973912477493286,0.184166118502617,-0.132579416036606\n             ,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.99804013967514,0.0525207407772541,0.0340211354196072\n             ,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.970708966255188,0.0394217669963837,-0.23700213432312\n             ,-0.923067510128021,0.218861386179924,-0.316300690174103,-0.990444839000702,0.137596040964127,-0.00929243210703135\n             ,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.946598649024963,0.101268656551838,-0.306097477674484\n             ,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.967456996440887,0.251362770795822,-0.0290456227958202\n             ,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.923067510128021,0.218861386179924,-0.316300690174103\n             ,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.94812422990799,0.313342124223709,-0.0536391511559486\n             ,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.932169854640961,0.263871490955353,-0.247853130102158\n             ,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.94812422990799,0.313342124223709,-0.0536391511559486\n             ,-0.949256777763367,0.266638487577438,-0.166779711842537,0.30596736073494,-0.302397102117538,0.902740240097046\n             ,0.152829229831696,-0.222570449113846,0.962863266468048,0.118139639496803,-0.728867173194885,0.67438542842865\n             ,0.456334859132767,-0.263855695724487,0.849787414073944,0.602918326854706,0.515652477741241,0.608762681484222\n             ,0.910823285579681,0.270006626844406,0.312245815992355,0.118139639496803,-0.728867173194885,0.67438542842865\n             ,0.152829229831696,-0.222570449113846,0.962863266468048,-0.343125730752945,0.914759814739227,0.213258653879166\n             ,-0.308493584394455,0.950873613357544,0.02590411901474,-0.656110644340515,0.732090890407562,-0.183198615908623\n             ,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.973912477493286,0.184166118502617,-0.132579416036606\n             ,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.656110644340515,0.732090890407562,-0.183198615908623\n             ,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.853118479251862,0.0149602368474007,-0.521502673625946\n             ,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.973912477493286,0.184166118502617,-0.132579416036606\n             ,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.946598649024963,0.101268656551838,-0.306097477674484\n             ,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.853118479251862,0.0149602368474007,-0.521502673625946\n             ,-0.805570960044861,0.0887086465954781,-0.585820972919464,0.949140191078186,-0.201623901724815,0.241827890276909\n             ,0.928275108337402,-0.108704164624214,0.355652451515198,0.938030481338501,-0.164544522762299,-0.304998099803925\n             ,0.941822648048401,-0.153352871537209,-0.299086838960648,-0.339781731367111,-0.868737757205963,0.360337555408478\n             ,0.118260912597179,-0.832547545433044,0.541182935237885,0.261419922113419,-0.95404326915741,0.146496027708054\n             ,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.306935518980026,-0.919691741466522,0.244862422347069\n             ,0.810173988342285,-0.314327269792557,0.494789332151413,0.939882814884186,-0.341329634189606,0.010694270953536\n             ,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.890334188938141,-0.2436583340168,-0.384624063968658\n             ,0.953069984912872,0.0484385639429092,0.298849850893021,0.969195008277893,0.116620995104313,0.216934517025948\n             ,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.0872491523623466,-0.891694486141205,-0.444149285554886\n             ,-0.542883276939392,-0.826726615428925,-0.147651329636574,-0.0959864854812622,-0.913586139678955,0.395154267549515\n             ,0.50744092464447,-0.861680567264557,0.00320711638778448,0.314595818519592,-0.93869549036026,-0.140997156500816\n             ,-0.211911574006081,-0.951958775520325,-0.221061065793037,-0.339781731367111,-0.868737757205963,0.360337555408478\n             ,0.124663800001144,-0.874086201190948,0.469502121210098,0.124663800001144,-0.874086201190948,0.469502121210098\n             ,-0.339781731367111,-0.868737757205963,0.360337555408478,0.192425221204758,-0.974552154541016,0.114980839192867\n             ,0.118260912597179,-0.832547545433044,0.541182935237885,-0.40076744556427,-0.847734689712524,0.347464174032211\n             ,-0.207811191678047,-0.962575137615204,-0.173964604735374,0.261419922113419,-0.95404326915741,0.146496027708054\n             ,0.230480119585991,-0.946770370006561,0.224732518196106,-0.362296253442764,-0.902348458766937,0.233470991253853\n             ,-0.201402932405472,-0.92625367641449,-0.318576455116272,0.389462053775787,-0.886311709880829,-0.250541061162949\n             ,-0.200983807444572,-0.912257611751556,-0.356919497251511,0.326997041702271,-0.921505868434906,-0.209522947669029\n             ,0.180372029542923,-0.916134834289551,0.357998490333557,-0.339713484048843,-0.93720954656601,0.0789492130279541\n             ,-0.200983807444572,-0.912257611751556,-0.356919497251511,-0.395999372005463,-0.883323132991791,0.250847965478897\n             ,0.148850917816162,-0.924228250980377,0.351632624864578,0.326997041702271,-0.921505868434906,-0.209522947669029\n             ,0.259535193443298,-0.932749152183533,0.250240802764893,0.334644615650177,-0.86758428812027,-0.367845684289932\n             ,-0.112518116831779,-0.874383687973022,-0.47200945019722,-0.32362487912178,-0.91464102268219,0.242278203368187\n             ,0.248996675014496,-0.917850255966187,0.309114098548889,0.50744092464447,-0.861680567264557,0.00320711638778448\n             ,-0.464242279529572,-0.87283843755722,-0.150440096855164,-0.32362487912178,-0.91464102268219,0.242278203368187\n             ,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.303018301725388,-0.938679337501526,0.164502337574959\n             ,0.259535193443298,-0.932749152183533,0.250240802764893,0.149650126695633,-0.977229058742523,-0.150426715612412\n             ,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.262460827827454,-0.84521484375,0.465538591146469\n             ,0.648241341114044,-0.506932139396667,-0.568157494068146,0.0855752229690552,-0.285937607288361,-0.954419493675232\n             ,-0.407288640737534,0.570921063423157,0.712857007980347,0.187374159693718,0.57430511713028,0.796909391880035\n             ,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.751268684864044,0.274677604436874,-0.60012298822403\n             ,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.883178770542145,0.174471154808998,-0.435379177331924\n             ,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.905240058898926,0.247854217886925,-0.345121324062347\n             ,-0.888693332672119,0.348883032798767,-0.297497481107712,0.850938260555267,-0.0678395256400108,0.520866513252258\n             ,0.922418177127838,0.0309108179062605,0.384953439235687,0.937970161437988,0.291288256645203,-0.188050866127014\n             ,0.9481241106987,0.313342481851578,-0.053639143705368,0.967456996440887,0.251362919807434,-0.0290456917136908\n             ,0.939527928829193,0.186540976166725,0.287210315465927,0.877985596656799,0.347244620323181,0.32948824763298,0.9481241106987\n             ,0.313342481851578,-0.053639143705368,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.923067450523376\n             ,0.21886146068573,-0.316300749778748,0.932169795036316,0.263871729373932,-0.24785327911377,0.482705801725388\n             ,0.267842918634415,-0.833819687366486,-0.0640612170100212,0.868370532989502,0.491760909557343,-0.272089272737503\n             ,0.833921611309052,0.480148106813431,-0.432919979095459,0.554767727851868,0.710501968860626,0.0218879040330648\n             ,0.608063995838165,0.793586194515228,0.402506083250046,0.589897155761719,0.700007259845734,0.551314413547516\n             ,0.63163036108017,0.545064687728882,0.147527933120728,0.908096134662628,0.391914397478104,0.0960818827152252\n             ,0.882192432880402,0.460982412099838,0.675129354000092,-0.135668084025383,0.725116908550262,0.850938260555267\n             ,-0.0678395256400108,0.520866513252258,0.9481241106987,0.313342481851578,-0.053639143705368,0.877985596656799\n             ,0.347244620323181,0.32948824763298,0.451114922761917,-0.252489298582077,0.856004953384399,0.675129354000092\n             ,-0.135668084025383,0.725116908550262,0.877985596656799,0.347244620323181,0.32948824763298,0.697896838188171\n             ,0.111968606710434,0.707391738891602,0.0218879040330648,0.608063995838165,0.793586194515228,0.402506083250046\n             ,0.589897155761719,0.700007259845734,0.0960818827152252,0.882192432880402,0.460982412099838,-0.0640612170100212\n             ,0.868370532989502,0.491760909557343,0.697896838188171,0.111968606710434,0.707391738891602,0.095845490694046\n             ,-0.0575048215687275,0.993733823299408,0.136431142687798,-0.358484745025635,0.923512399196625,0.451114922761917\n             ,-0.252489298582077,0.856004953384399,0.97600269317627,0.13745604455471,0.168892234563828,0.683504700660706,0.663010776042938\n             ,0.305349051952362,0.551314413547516,0.63163036108017,0.545064687728882,0.85029935836792,0.0502043291926384,0.523899376392365\n             ,0.147625222802162,-0.322124987840652,0.935116171836853,0.095845490694046,-0.0575048215687275,0.993733823299408\n             ,0.697896838188171,0.111968606710434,0.707391738891602,0.668019592761993,-0.146763533353806,0.729527413845062\n             ,0.939527928829193,0.186540976166725,0.287210315465927,0.990444839000702,0.137596189975739,-0.00929253362119198\n             ,0.99804013967514,0.0525208227336407,0.0340210981667042,0.903742134571075,0.0408325865864754,0.426125437021255\n             ,0.946598649024963,0.101268604397774,-0.306097507476807,0.923067450523376,0.21886146068573,-0.316300749778748\n             ,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.805570960044861,0.0887085422873497,-0.585820972919464\n             ,-0.568327784538269,-0.132913276553154,0.811996042728424,0.095845490694046,-0.0575048215687275,0.993733823299408\n             ,0.147625222802162,-0.322124987840652,0.935116171836853,-0.503679633140564,-0.333046585321426,0.797111511230469\n             ,-0.560331225395203,-0.197167724370956,0.804458677768707,-0.969194948673248,0.11662120372057,0.21693454682827\n             ,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.681288778781891,-0.15539838373661,0.715329945087433\n             ,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.942743897438049,-0.067279078066349,-0.326661109924316\n             ,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.909544348716736,-0.0496344491839409,0.412632405757904\n             ,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.807208120822906,-0.160388857126236,0.568058490753174\n             ,-0.568327784538269,-0.132913276553154,0.811996042728424,-0.503679633140564,-0.333046585321426,0.797111511230469\n             ,0.892664194107056,0.187903523445129,-0.409686356782913,0.937970161437988,0.291288256645203,-0.188050866127014\n             ,0.922418177127838,0.0309108179062605,0.384953439235687,0.964133620262146,0.116036243736744,0.238708943128586\n             ,0.964133620262146,0.116036243736744,0.238708943128586,0.928708553314209,-0.245198935270309,0.278168857097626\n             ,0.775554299354553,-0.490126490592957,-0.397858679294586,0.892664194107056,0.187903523445129,-0.409686356782913\n             ,0.937970161437988,0.291288256645203,-0.188050866127014,0.892664194107056,0.187903523445129,-0.409686356782913\n             ,0.568934082984924,-0.144464790821075,-0.809594869613647,0.713874757289886,0.186937391757965,-0.674860894680023\n             ,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.364783376455307,-0.883516609668732,0.293822169303894\n             ,-0.293806701898575,-0.416160970926285,0.860515952110291,-0.681288778781891,-0.15539838373661,0.715329945087433\n             ,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.928847432136536,0.162273854017258,0.333030939102173\n             ,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.909544348716736,-0.0496344491839409,0.412632405757904\n             ,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.928847432136536,0.162273854017258,0.333030939102173\n             ,-0.969194948673248,0.11662120372057,0.21693454682827,-0.560331225395203,-0.197167724370956,0.804458677768707\n             ,-0.332680583000183,-0.441110253334045,0.833513855934143,0.922418177127838,0.0309108179062605,0.384953439235687\n             ,0.850938260555267,-0.0678395256400108,0.520866513252258,0.837489545345306,-0.137019574642181,0.528996109962463\n             ,0.21311217546463,-0.0906343460083008,0.972814798355103,0.136431142687798,-0.358484745025635,0.923512399196625\n             ,-0.161164477467537,-0.331503093242645,0.929586827754974,-0.0511879175901413,-0.230872392654419,0.971636593341827\n             ,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.482705801725388,0.267842918634415,-0.833819687366486\n             ,0.244611874222755,0.194429770112038,-0.949927449226379,0.246746584773064,-0.163684040307999,-0.955156326293945\n             ,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.942743897438049,-0.067279078066349,-0.326661109924316\n             ,0.383484452962875,-0.102838270366192,-0.917803883552551,0.479293167591095,-0.284916758537292,-0.830120801925659\n             ,0.837489545345306,-0.137019574642181,0.528996109962463,0.850938260555267,-0.0678395256400108,0.520866513252258\n             ,0.675129354000092,-0.135668084025383,0.725116908550262,0.652578055858612,-0.0296747293323278,0.757140219211578\n             ,0.652578055858612,-0.0296747293323278,0.757140219211578,0.675129354000092,-0.135668084025383,0.725116908550262\n             ,0.451114922761917,-0.252489298582077,0.856004953384399,0.389561533927917,-0.19174836575985,0.900818705558777\n             ,0.389561533927917,-0.19174836575985,0.900818705558777,0.451114922761917,-0.252489298582077,0.856004953384399\n             ,0.136431142687798,-0.358484745025635,0.923512399196625,0.21311217546463,-0.0906343460083008,0.972814798355103\n             ,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.161164477467537,-0.331503093242645,0.929586827754974\n             ,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.152829229831696,-0.222570538520813,0.962863206863403\n             ,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.456334859132767,-0.263855904340744,0.849787354469299\n             ,-0.54668140411377,-0.221681281924248,0.807463228702545,0.583520710468292,-0.523498058319092,0.620848894119263\n             ,0.812033891677856,-0.31945663690567,0.488414198160172,-0.560331225395203,-0.197167724370956,0.804458677768707\n             ,-0.681288778781891,-0.15539838373661,0.715329945087433,0.828753769397736,-0.00401723757386208,0.559598922729492\n             ,0.383484452962875,-0.102838270366192,-0.917803883552551,-0.942743897438049,-0.067279078066349,-0.326661109924316\n             ,-0.934698820114136,0.0468888208270073,-0.352334499359131,0.382079660892487,0.0211679134517908,-0.923886954784393\n             ,-0.202261313796043,-0.191956117749214,0.960334956645966,0.964133620262146,0.116036243736744,0.238708943128586\n             ,0.922418177127838,0.0309108179062605,0.384953439235687,-0.332680583000183,-0.441110253334045,0.833513855934143\n             ,-0.691331505775452,-0.716019868850708,-0.0968314781785011,0.543925285339355,-0.442454695701599,-0.713007152080536\n             ,0.775554299354553,-0.490126490592957,-0.397858679294586,-0.0923527628183365,-0.948987364768982,0.301486223936081\n             ,0.201128974556923,-0.41152036190033,0.888930916786194,0.928708553314209,-0.245198935270309,0.278168857097626\n             ,0.964133620262146,0.116036243736744,0.238708943128586,-0.202261313796043,-0.191956117749214,0.960334956645966\n             ,-0.751028060913086,-0.474978417158127,-0.458641856908798,0.568934082984924,-0.144464790821075,-0.809594869613647\n             ,0.543925285339355,-0.442454695701599,-0.713007152080536,-0.691331505775452,-0.716019868850708,-0.0968314781785011\n             ,-0.505279898643494,-0.213028356432915,-0.836248219013214,0.713874757289886,0.186937391757965,-0.674860894680023\n             ,0.568934082984924,-0.144464790821075,-0.809594869613647,-0.751028060913086,-0.474978417158127,-0.458641856908798\n             ,0.828753769397736,-0.00401723757386208,0.559598922729492,-0.681288778781891,-0.15539838373661,0.715329945087433\n             ,-0.293806701898575,-0.416160970926285,0.860515952110291,0.650361001491547,-0.274446427822113,0.708314716815948\n             ,0.587613701820374,-0.80407178401947,0.0904358923435211,-0.364783376455307,-0.883516609668732,0.293822169303894\n             ,-0.801601707935333,-0.550374031066895,-0.23350191116333,0.653040647506714,-0.484619528055191,-0.581963717937469\n             ,0.583520710468292,-0.523498058319092,0.620848894119263,-0.54668140411377,-0.221681281924248,0.807463228702545\n             ,-0.560331225395203,-0.197167724370956,0.804458677768707,0.812033891677856,-0.31945663690567,0.488414198160172\n             ,-0.0923527628183365,-0.948987364768982,0.301486223936081,0.775554299354553,-0.490126490592957,-0.397858679294586\n             ,0.928708553314209,-0.245198935270309,0.278168857097626,0.201128974556923,-0.41152036190033,0.888930916786194\n             ,0.650361001491547,-0.274446427822113,0.708314716815948,-0.293806701898575,-0.416160970926285,0.860515952110291\n             ,-0.364783376455307,-0.883516609668732,0.293822169303894,0.587613701820374,-0.80407178401947,0.0904358923435211\n             ,-0.563137769699097,0.445758104324341,0.69582724571228,-0.709949254989624,0.60140985250473,0.366439938545227\n             ,-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.717246651649475,0.0185818821191788,0.696571588516235\n             ,0.937970161437988,0.291288256645203,-0.188050866127014,0.713874757289886,0.186937391757965,-0.674860894680023\n             ,0.949256718158722,0.266638696193695,-0.166779711842537,-0.568327784538269,-0.132913276553154,0.811996042728424\n             ,-0.714491605758667,0.14225697517395,0.685028970241547,-0.161164477467537,-0.331503093242645,0.929586827754974\n             ,0.136431142687798,-0.358484745025635,0.923512399196625,0.095845490694046,-0.0575048215687275,0.993733823299408\n             ,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.953069984912872,0.0484387166798115,0.298849910497665\n             ,-0.942743897438049,-0.067279078066349,-0.326661109924316,0.697896838188171,0.111968606710434,0.707391738891602\n             ,0.877985596656799,0.347244620323181,0.32948824763298,0.939527928829193,0.186540976166725,0.287210315465927,0.903742134571075\n             ,0.0408325865864754,0.426125437021255,-0.320462554693222,0.819696664810181,0.474764227867126,-0.406098872423172\n             ,0.667459309101105,0.624164879322052,-0.5433070063591,0.448145478963852,0.709917664527893,-0.432919979095459\n             ,0.554767727851868,0.710501968860626,-0.272089272737503,0.833921611309052,0.480148106813431,-0.807208120822906\n             ,-0.160388857126236,0.568058490753174,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.714491605758667\n             ,0.14225697517395,0.685028970241547,-0.568327784538269,-0.132913276553154,0.811996042728424,0.939527928829193\n             ,0.186540976166725,0.287210315465927,0.967456996440887,0.251362919807434,-0.0290456917136908,0.990444839000702\n             ,0.137596189975739,-0.00929253362119198,0.543925285339355,-0.442454695701599,-0.713007152080536,0.892664194107056\n             ,0.187903523445129,-0.409686356782913,0.775554299354553,-0.490126490592957,-0.397858679294586,0.568934082984924\n             ,-0.144464790821075,-0.809594869613647,0.892664194107056,0.187903523445129,-0.409686356782913,0.543925285339355\n             ,-0.442454695701599,-0.713007152080536,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.801601707935333\n             ,-0.550374031066895,-0.23350191116333,-0.681288778781891,-0.15539838373661,0.715329945087433,-0.890334248542786\n             ,-0.243657946586609,-0.384624123573303,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.991721987724304\n             ,-0.09873928129673,0.0820856168866158,-0.890334248542786,-0.243657946586609,-0.384624123573303,0.479293167591095\n             ,-0.284916758537292,-0.830120801925659,0.653040647506714,-0.484619528055191,-0.581963717937469,-0.801601707935333\n             ,-0.550374031066895,-0.23350191116333,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.807208120822906\n             ,-0.160388857126236,0.568058490753174,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.949140191078186\n             ,-0.201623931527138,0.24182790517807,-0.406098872423172,0.667459309101105,0.624164879322052,-0.320462554693222\n             ,0.819696664810181,0.474764227867126,-0.380683273077011,0.86094468832016,0.337423235177994,-0.709949254989624\n             ,0.60140985250473,0.366439938545227,-0.563137769699097,0.445758104324341,0.69582724571228,-0.5433070063591,0.448145478963852\n             ,0.709917664527893,-0.406098872423172,0.667459309101105,0.624164879322052,-0.563137769699097,0.445758104324341\n             ,0.69582724571228,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.5433070063591,0.448145478963852\n             ,0.709917664527893,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.538123428821564,-0.0776136741042137\n             ,0.839285016059875,-0.432919979095459,0.554767727851868,0.710501968860626,0.0218879040330648,0.608063995838165\n             ,0.793586194515228,-0.432919979095459,0.554767727851868,0.710501968860626,-0.538123428821564,-0.0776136741042137\n             ,0.839285016059875,0.141524657607079,-0.0639704838395119,0.987865626811981,0.402506083250046,0.589897155761719\n             ,0.700007259845734,0.0218879040330648,0.608063995838165,0.793586194515228,0.141524657607079,-0.0639704838395119\n             ,0.987865626811981,0.652125597000122,-0.00108946568798274,0.758110165596008,0.652125597000122,-0.00108946568798274\n             ,0.758110165596008,0.85029935836792,0.0502043291926384,0.523899376392365,0.551314413547516,0.63163036108017,0.545064687728882\n             ,0.402506083250046,0.589897155761719,0.700007259845734,0.683504700660706,0.663010776042938,0.305349051952362\n             ,0.258648008108139,0.909015238285065,0.326791137456894,0.147527933120728,0.908096134662628,0.391914397478104\n             ,0.551314413547516,0.63163036108017,0.545064687728882,0.331649243831635,0.794523119926453,-0.508666634559631\n             ,0.522813856601715,0.179267287254334,-0.833384037017822,-0.00497461529448628,0.164960891008377,-0.986287593841553\n             ,-0.0982039347290993,0.744844913482666,-0.659971237182617,0.522813856601715,0.179267287254334,-0.833384037017822\n             ,0.331649243831635,0.794523119926453,-0.508666634559631,0.656110465526581,0.732090950012207,-0.183199197053909\n             ,0.886800289154053,0.175987064838409,-0.427333384752274,0.505583882331848,0.0150260468944907,-0.862646579742432\n             ,0.459000468254089,0.0631367564201355,-0.886189818382263,-0.00533877313137054,0.0413248650729656,-0.999131500720978\n             ,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.342631131410599,0.695380508899689,-0.631703972816467\n             ,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.733689248561859,-0.00598060339689255,-0.679458796977997\n             ,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.711754858493805,-0.136520877480507,-0.689033389091492\n             ,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.377974569797516,-0.0538287982344627,-0.924249827861786\n             ,-0.433557718992233,-0.0273692850023508,-0.900710046291351,0.459000468254089,0.0631367564201355,-0.886189818382263\n             ,0.505583882331848,0.0150260468944907,-0.862646579742432,0.853118479251862,0.0149601250886917,-0.521502673625946\n             ,0.805570960044861,0.0887085422873497,-0.585820972919464,-0.938030481338501,-0.164544627070427,-0.304998099803925\n             ,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.82076495885849,-0.278661072254181,-0.498691141605377\n             ,0.459000468254089,0.0631367564201355,-0.886189818382263,0.379301398992538,-0.563074827194214,-0.734218776226044\n             ,0.0723040029406548,-0.562818944454193,-0.823411762714386,-0.00533877313137054,0.0413248650729656,-0.999131500720978\n             ,-0.433557718992233,-0.0273692850023508,-0.900710046291351,-0.282903432846069,-0.614905774593353,-0.73610907793045\n             ,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.711754858493805,-0.136520877480507,-0.689033389091492\n             ,0.379301398992538,-0.563074827194214,-0.734218776226044,0.459000468254089,0.0631367564201355,-0.886189818382263\n             ,0.805570960044861,0.0887085422873497,-0.585820972919464,0.652326643466949,-0.0732125490903854,-0.754393696784973\n             ,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.433943778276443,-0.801411330699921,-0.411621987819672\n             ,-0.0390606410801411,-0.798295676708221,-0.600997745990753,-0.938030481338501,-0.164544627070427,-0.304998099803925\n             ,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.846594870090485,-0.529065132141113,0.0580275692045689\n             ,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.971036195755005,0.0917746424674988,-0.220604136586189\n             ,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.149676010012627,0.966881930828094,-0.206727981567383\n             ,0.0896634757518768,0.986824929714203,-0.134673669934273,0.331649243831635,0.794523119926453,-0.508666634559631\n             ,-0.404175013303757,0.903538525104523,-0.142339885234833,-0.267860978841782,0.938322484493256,-0.218635410070419\n             ,-0.342631131410599,0.695380508899689,-0.631703972816467,-0.632241010665894,0.646320343017578,-0.427248448133469\n             ,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.246746584773064,-0.163684040307999,-0.955156326293945\n             ,0.458068341016769,-0.324115723371506,-0.827721178531647,0.379301398992538,-0.563074827194214,-0.734218776226044\n             ,0.458068341016769,-0.324115723371506,-0.827721178531647,0.0359749346971512,-0.262611299753189,-0.964230835437775\n             ,0.0723040029406548,-0.562818944454193,-0.823411762714386,0.379301398992538,-0.563074827194214,-0.734218776226044\n             ,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.383173704147339,-0.262150138616562,-0.885694742202759\n             ,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.471586525440216,-0.672621071338654,-0.570251703262329\n             ,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.85034316778183,-0.422914505004883,-0.313145041465759\n             ,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.0390606410801411,-0.798295676708221,-0.600997745990753\n             ,0.798132300376892,-0.595748007297516,0.0898283571004868,0.348949402570724,-0.852244853973389,0.389760226011276\n             ,0.620603084564209,-0.695841789245605,-0.361463725566864,0.885131120681763,0.0417929887771606,-0.463461130857468\n             ,-0.64503401517868,-0.763977766036987,0.0164064429700375,0.480840384960175,-0.739749372005463,-0.470705211162567\n             ,0.826135098934174,-0.33500149846077,0.453072637319565,-0.0856366232037544,-0.288858771324158,0.953533947467804\n             ,0.306766599416733,-0.118459150195122,0.944384276866913,0.15803250670433,0.792331993579865,0.589267194271088\n             ,-0.390775978565216,0.856176793575287,0.33801680803299,-0.441097885370255,0.233705267310143,0.866495549678802\n             ,0.395615637302399,-0.602471053600311,-0.693193197250366,0.722060799598694,-0.55972957611084,0.406609207391739\n             ,-0.415498435497284,-0.625033140182495,0.660828769207001,-0.709003865718842,-0.541708588600159,-0.451514542102814\n             ,0.712908089160919,0.682124614715576,-0.162689983844757,0.650463998317719,0.740020751953125,-0.17107281088829\n             ,0.863034009933472,-0.335786014795303,-0.377385854721069,0.958362102508545,-0.256494760513306,0.125509008765221\n             ,0.282899409532547,-0.764817476272583,-0.578811049461365,0.705481588840485,-0.662966072559357,0.250542849302292\n             ,-0.466174095869064,-0.668627381324768,0.579326450824738,-0.557026326656342,-0.731577575206757,-0.393085092306137\n             ,0.733190476894379,0.653582632541656,-0.187780305743217,0.931363761425018,-0.361004918813705,-0.0472966246306896\n             ,0.680100440979004,-0.471440553665161,-0.56143319606781,0.717039883136749,0.690781950950623,-0.093134693801403\n             ,0.717039883136749,0.690781950950623,-0.093134693801403,0.680100440979004,-0.471440553665161,-0.56143319606781\n             ,0.94776064157486,-0.269029140472412,-0.171385690569878,0.702042996883392,0.707515120506287,-0.0809817835688591\n             ,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.248996630311012,-0.917850255966187,0.309114128351212\n             ,0.94776064157486,-0.269029140472412,-0.171385690569878,0.680100440979004,-0.471440553665161,-0.56143319606781\n             ,0.445575773715973,0.0603602342307568,-0.89320707321167,0.305622786283493,0.734605193138123,-0.605763852596283\n             ,0.647232055664063,0.709673702716827,-0.278305619955063,0.885131120681763,0.0417929887771606,-0.463461130857468\n             ,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.627128541469574,0.0574355758726597,-0.776795268058777\n             ,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.671855926513672,0.740681767463684,-0.000314092845655978\n             ,-0.596384108066559,0.73188179731369,0.329658985137939,-0.918069899082184,-0.187107101082802,0.349483251571655\n             ,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.615695953369141,0.768994450569153,0.171947792172432\n             ,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.615695953369141,0.768994450569153,0.171947792172432\n             ,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.900666117668152,-0.271470487117767,0.339270144701004\n             ,-0.390775978565216,0.856176793575287,0.33801680803299,-0.748181462287903,0.587628781795502,0.308085918426514\n             ,-0.812849164009094,-0.351107835769653,0.46475750207901,-0.441097885370255,0.233705267310143,0.866495549678802\n             ,-0.916947364807129,0.362371772527695,0.167015537619591,-0.893702745437622,0.422671109437943,0.150480940937996\n             ,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.847357213497162,0.513431549072266,0.135549783706665\n             ,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.755123674869537,0.652067303657532,0.067797377705574\n             ,-0.729536950588226,0.676141858100891,0.102995604276657,-0.847357213497162,0.513431549072266,0.135549783706665\n             ,-0.719103634357452,0.620088398456573,0.313656359910965,-0.661795377731323,0.713703334331512,0.229465648531914\n             ,-0.382025182247162,0.832321286201477,0.401619255542755,-0.416523069143295,0.747589528560638,0.517318487167358\n             ,-0.732339918613434,0.57999724149704,0.356765151023865,-0.719103634357452,0.620088398456573,0.313656359910965\n             ,-0.416523069143295,0.747589528560638,0.517318487167358,-0.404268890619278,0.753554701805115,0.518383979797363\n             ,0.640394508838654,0.754049122333527,-0.145961552858353,0.709426641464233,0.694044709205627,-0.122539132833481\n             ,0.676984488964081,0.720325291156769,-0.15107424557209,0.660727977752686,0.731441617012024,-0.168617248535156\n             ,0.471274465322495,0.860716044902802,0.192531242966652,0.602886617183685,0.797378718852997,-0.0267372038215399\n             ,0.644031763076782,0.764946699142456,0.00891874358057976,0.508786737918854,0.827319860458374,0.238071173429489\n             ,0.740322411060333,0.655164897441864,-0.150604203343391,0.632998824119568,0.753636837005615,-0.177042677998543\n             ,0.660727977752686,0.731441617012024,-0.168617248535156,0.676984488964081,0.720325291156769,-0.15107424557209\n             ,0.664407253265381,0.746931552886963,0.0256172958761454,0.526539385318756,0.801656424999237,0.283025234937668\n             ,0.508786737918854,0.827319860458374,0.238071173429489,0.644031763076782,0.764946699142456,0.00891874358057976\n             ,0.719630718231201,0.67299348115921,-0.170913383364677,0.727223694324493,0.663318991661072,-0.176503792405128\n             ,0.73427015542984,0.669211447238922,-0.114032231271267,0.774570941925049,0.617026031017303,-0.138991788029671\n             ,0.834402143955231,0.550802052021027,0.0197512619197369,0.719630718231201,0.67299348115921,-0.170913383364677\n             ,0.774570941925049,0.617026031017303,-0.138991788029671,0.75202214717865,0.649503469467163,-0.112284608185291\n             ,0.75202214717865,0.649503469467163,-0.112284608185291,0.774570941925049,0.617026031017303,-0.138991788029671\n             ,0.789476454257965,0.597960650920868,-0.13845556974411,0.972268581390381,0.233539223670959,0.0123813217505813\n             ,0.789476454257965,0.597960650920868,-0.13845556974411,0.774570941925049,0.617026031017303,-0.138991788029671\n             ,0.73427015542984,0.669211447238922,-0.114032231271267,0.749007403850555,0.651603639125824,-0.120002605021,0.704592168331146\n             ,0.64562314748764,-0.294483780860901,0.789476454257965,0.597960650920868,-0.13845556974411,0.749007403850555\n             ,0.651603639125824,-0.120002605021,0.678524672985077,0.663206517696381,-0.31585019826889,0.972268581390381,0.233539223670959\n             ,0.0123813217505813,0.789476454257965,0.597960650920868,-0.13845556974411,0.704592168331146,0.64562314748764\n             ,-0.294483780860901,0.721381485462189,0.602611780166626,-0.341273874044418,0.320632994174957,0.735152721405029\n             ,-0.597281336784363,0.350197345018387,0.67135888338089,-0.653176128864288,0.721381485462189,0.602611780166626\n             ,-0.341273874044418,0.704592168331146,0.64562314748764,-0.294483780860901,0.300025343894959,0.704358696937561\n             ,-0.643322348594666,0.320632994174957,0.735152721405029,-0.597281336784363,0.704592168331146,0.64562314748764\n             ,-0.294483780860901,0.678524672985077,0.663206517696381,-0.31585019826889,-0.177267998456955,0.365929782390594\n             ,-0.913603544235229,-0.139554515480995,0.707306146621704,-0.692995369434357,-0.500399649143219,0.708592295646667\n             ,-0.497490882873535,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.139554515480995,0.707306146621704\n             ,-0.692995369434357,-0.143811345100403,0.67733633518219,-0.721480309963226,-0.483161300420761,0.708275854587555\n             ,-0.514684855937958,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.627380669116974,0.542527735233307\n             ,-0.558620691299438,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.968909800052643,-0.119058966636658\n             ,-0.216884210705757,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.500399649143219,0.708592295646667\n             ,-0.497490882873535,-0.483161300420761,0.708275854587555,-0.514684855937958,-0.711231410503387,0.702188730239868\n             ,-0.0328762196004391,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.947628021240234,0.25655260682106\n             ,0.190215468406677,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.975513935089111,-0.202585533261299\n             ,0.085625521838665,-0.970878839492798,0.173829272389412,0.164856299757957,-0.713916778564453,0.653736412525177\n             ,0.250901401042938,-0.723107695579529,0.620889544487,0.302673906087875,-0.855198562145233,0.434895634651184,0.281959563493729\n             ,-0.793782532215118,0.557114601135254,0.243993073701859,-0.996930718421936,0.0329507254064083,0.0710170492529869\n             ,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.655400156974792,-0.538768410682678,0.529319524765015\n             ,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.738506555557251,0.594659924507141,0.317785561084747\n             ,-0.767313361167908,0.622622489929199,0.153530210256577,-0.896252572536469,0.421273946762085,0.13877908885479\n             ,-0.878546297550201,0.378490209579468,0.291378676891327,-0.896252572536469,0.421273946762085,0.13877908885479\n             ,-0.767313361167908,0.622622489929199,0.153530210256577,-0.755123674869537,0.652067303657532,0.067797377705574\n             ,-0.882212042808533,0.466362148523331,0.0648713782429695,0.144893497228622,0.857636988162994,0.493421345949173\n             ,0.128903344273567,0.870382189750671,0.475203901529312,0.508786737918854,0.827319860458374,0.238071173429489\n             ,0.526539385318756,0.801656424999237,0.283025234937668,0.130269169807434,0.905642747879028,0.403535813093185\n             ,0.471274465322495,0.860716044902802,0.192531242966652,0.508786737918854,0.827319860458374,0.238071173429489\n             ,0.128903344273567,0.870382189750671,0.475203901529312,0.669141590595245,0.742036402225494,-0.0403924956917763\n             ,0.891577959060669,0.451291143894196,-0.0377500578761101,0.906549096107483,0.409386813640594,-0.10281577706337\n             ,0.667402267456055,0.744479417800903,-0.0180171187967062,0.71388167142868,0.36040398478508,0.60040146112442,0.911552846431732\n             ,0.361514419317245,0.195904940366745,0.664968013763428,0.745313882827759,0.0482159033417702,0.57691216468811\n             ,0.718079447746277,0.389273971319199,0.909856855869293,0.391187816858292,0.138320595026016,0.752071380615234\n             ,0.531812727451324,0.389312088489532,0.660223960876465,0.688790857791901,0.299451887607574,0.816485822200775\n             ,0.512709319591522,0.265480846166611,0.752071380615234,0.531812727451324,0.389312088489532,0.646896421909332\n             ,0.568208158016205,0.508590698242188,0.563141405582428,0.729207217693329,0.388752609491348,0.660223960876465\n             ,0.688790857791901,0.299451887607574,-0.320559352636337,0.729658544063568,0.604019939899445,0.202111423015594\n             ,0.805501997470856,0.557061493396759,0.0790780261158943,0.992485880851746,0.0933722630143166,-0.311181366443634\n             ,0.925608515739441,0.215441450476646,-0.614538252353668,0.667141258716583,0.421028852462769,-0.76466292142868\n             ,0.188213840126991,0.616332828998566,-0.367227405309677,0.346865743398666,0.863034307956696,-0.320559352636337\n             ,0.729658544063568,0.604019939899445,-0.520070433616638,0.75630134344101,0.396906822919846,-0.941741049289703\n             ,0.11614803224802,0.315647661685944,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.522960901260376\n             ,0.842813611030579,-0.127189248800278,-0.413429826498032,0.428489029407501,0.803413331508636,-0.910823285579681\n             ,0.270006507635117,0.312245815992355,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.941741049289703\n             ,0.11614803224802,0.315647661685944,-0.602918326854706,0.515652418136597,0.608762681484222,-0.910823285579681\n             ,0.270006507635117,0.312245815992355,-0.413429826498032,0.428489029407501,0.803413331508636,-0.229550525546074\n             ,0.57556563615799,0.784876227378845,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.602918326854706\n             ,0.515652418136597,0.608762681484222,-0.187374100089073,0.574305176734924,0.796909391880035,-0.0511879175901413\n             ,-0.230872392654419,0.971636593341827,-0.602918326854706,0.515652418136597,0.608762681484222,-0.229550525546074\n             ,0.57556563615799,0.784876227378845,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.187374100089073\n             ,0.574305176734924,0.796909391880035,0.407288730144501,0.570921003818512,0.712857067584991,0.389561533927917\n             ,-0.19174836575985,0.900818705558777,0.21311217546463,-0.0906343460083008,0.972814798355103,0.407288730144501\n             ,0.570921003818512,0.712857067584991,0.402498751878738,0.624280869960785,0.669528305530548,0.646896421909332\n             ,0.568208158016205,0.508590698242188,0.659538865089417,0.541105449199677,0.521740734577179,0.646896421909332\n             ,0.568208158016205,0.508590698242188,0.752071380615234,0.531812727451324,0.389312088489532,0.861413061618805\n             ,0.450139224529266,0.23524908721447,0.659538865089417,0.541105449199677,0.521740734577179,-0.522960901260376\n             ,0.842813611030579,-0.127189248800278,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.505573391914368\n             ,0.856702506542206,0.102256529033184,-0.261382013559341,0.943598508834839,-0.203227147459984,0.331241726875305\n             ,0.767114758491516,0.549375832080841,0.563141405582428,0.729207217693329,0.388752609491348,0.646896421909332\n             ,0.568208158016205,0.508590698242188,0.402498751878738,0.624280869960785,0.669528305530548,0.699552476406097\n             ,0.686574220657349,0.198096364736557,0.923372685909271,0.289373397827148,-0.252281337976456,0.800276219844818\n             ,0.427209228277206,-0.420773357152939,0.633913099765778,0.759061396121979,-0.14825627207756,0.837489545345306\n             ,-0.137019574642181,0.528996109962463,0.80286830663681,0.57996016740799,0.138016909360886,0.69953316450119,0.693202435970306\n             ,-0.173562079668045,0.244611874222755,0.194429770112038,-0.949927449226379,0.421845316886902,0.35173287987709\n             ,-0.835661768913269,0.272203177213669,0.658502519130707,-0.701626539230347,0.458068341016769,-0.324115723371506\n             ,-0.827721178531647,0.246746584773064,-0.163684040307999,-0.955156326293945,0.244611874222755,0.194429770112038\n             ,-0.949927449226379,0.397901266813278,0.642865896224976,-0.65452116727829,0.421845316886902,0.35173287987709\n             ,-0.835661768913269,0.244611874222755,0.194429770112038,-0.949927449226379,0.69953316450119,0.693202435970306\n             ,-0.173562079668045,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.398143172264099,0.565787076950073\n             ,-0.722057461738586,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.642501175403595,-0.273710697889328\n             ,-0.715733766555786,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.605723857879639,0.555330216884613\n             ,-0.569830656051636,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.432219624519348,0.0896197631955147\n             ,-0.897303998470306,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.605723857879639,0.555330216884613\n             ,-0.569830656051636,-0.859436213970184,0.509185254573822,0.04582304880023,-0.886820614337921,-0.356388121843338\n             ,-0.294171214103699,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.633863687515259,0.397778928279877\n             ,-0.663316428661346,-0.971036195755005,0.0917746424674988,-0.220604136586189,-0.85034316778183,-0.422914505004883\n             ,-0.313145041465759,-0.65424633026123,0.624168395996094,0.42705449461937,-0.93314254283905,0.297381490468979\n             ,0.20201313495636,-0.970878839492798,0.173829272389412,0.164856299757957,-0.599660336971283,0.629722774028778\n             ,0.493818551301956,0.393562316894531,0.580699145793915,-0.71266907453537,0.305637389421463,0.797388851642609\n             ,-0.520342946052551,0.633913099765778,0.759061396121979,-0.14825627207756,0.800276219844818,0.427209228277206\n             ,-0.420773357152939,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.627528488636017,0.574077665805817\n             ,-0.525968492031097,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.723603487014771,0.683223187923431\n             ,0.098000094294548,-0.367227405309677,0.346865743398666,0.863034307956696,0.270604372024536,0.441341161727905\n             ,0.855564832687378,0.202111423015594,0.805501997470856,0.557061493396759,-0.320559352636337,0.729658544063568\n             ,0.604019939899445,0.305637389421463,0.797388851642609,-0.520342946052551,0.393562316894531,0.580699145793915\n             ,-0.71266907453537,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.13304828107357,0.622710764408112\n             ,-0.771057367324829,0.929460346698761,0.351613759994507,-0.111674785614014,0.861413061618805,0.450139224529266\n             ,0.23524908721447,0.752071380615234,0.531812727451324,0.389312088489532,0.909856855869293,0.391187816858292,0.138320595026016\n             ,0.644031763076782,0.764946699142456,0.00891874358057976,0.660727977752686,0.731441617012024,-0.168617248535156\n             ,0.632998824119568,0.753636837005615,-0.177042677998543,0.664407253265381,0.746931552886963,0.0256172958761454\n             ,0.686884999275208,0.723168194293976,-0.0722270235419273,0.664968013763428,0.745313882827759,0.0482159033417702\n             ,0.911552846431732,0.361514419317245,0.195904940366745,0.905105113983154,0.409709811210632,-0.113677680492401\n             ,0.664968013763428,0.745313882827759,0.0482159033417702,0.686884999275208,0.723168194293976,-0.0722270235419273\n             ,0.559431314468384,0.828812599182129,0.0103096608072519,0.392663985490799,0.918741226196289,-0.0415881127119064\n             ,-0.311181366443634,0.925608515739441,0.215441450476646,0.0790780261158943,0.992485880851746,0.0933722630143166\n             ,0.127702310681343,0.976085126399994,0.17592579126358,-0.227211818099022,0.921236872673035,0.315748959779739\n             ,-0.597852468490601,0.634572565555573,0.48978579044342,-0.227211818099022,0.921236872673035,0.315748959779739\n             ,-0.505573391914368,0.856702506542206,0.102256529033184,-0.780855476856232,0.547496676445007,0.300852298736572\n             ,-0.826885998249054,0.483063906431198,0.287938833236694,-0.796578586101532,0.576386690139771,0.182320937514305\n             ,-0.719103634357452,0.620088398456573,0.313656359910965,-0.732339918613434,0.57999724149704,0.356765151023865\n             ,-0.796578586101532,0.576386690139771,0.182320937514305,-0.703840732574463,0.696332275867462,0.140461906790733\n             ,-0.661795377731323,0.713703334331512,0.229465648531914,-0.719103634357452,0.620088398456573,0.313656359910965\n             ,-0.819103717803955,0.554178774356842,0.148171976208687,-0.939882695674896,-0.341330021619797,0.0106942849233747\n             ,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.748181462287903,0.587628781795502,0.308085918426514\n             ,0.384443372488022,-0.766655147075653,-0.514240384101868,0.666895627975464,-0.56043928861618,0.491078466176987\n             ,-0.317059487104416,-0.547120869159698,0.774681866168976,-0.685397565364838,-0.694672048091888,-0.21831376850605\n             ,0.602886617183685,0.797378718852997,-0.0267372038215399,0.640394508838654,0.754049122333527,-0.145961552858353\n             ,0.660727977752686,0.731441617012024,-0.168617248535156,0.644031763076782,0.764946699142456,0.00891874358057976\n             ,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.993199586868286,-4.69008500658674e-006,0.116424031555653\n             ,-0.807652175426483,0.443565607070923,0.388519644737244,-0.910823285579681,0.270006507635117,0.312245815992355\n             ,-0.807652175426483,0.443565607070923,0.388519644737244,-0.993199586868286,-4.69008500658674e-006,0.116424031555653\n             ,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.762878954410553,0.502556443214417,0.40675875544548\n             ,0.305622786283493,0.734605193138123,-0.605763852596283,0.445575773715973,0.0603602342307568,-0.89320707321167\n             ,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.1213503703475,0.714234888553619,-0.689305901527405\n             ,0.906213641166687,0.328242212533951,-0.266521811485291,0.957429826259613,0.286321878433228,0.0367136411368847\n             ,0.909856855869293,0.391187816858292,0.138320595026016,0.995014905929565,0.0992267951369286,-0.00996995531022549\n             ,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.828168988227844,0.353571265935898,-0.434883326292038\n             ,0.923372685909271,0.289373397827148,-0.252281337976456,0.936574637889862,0.00382779608480632,-0.350447237491608\n             ,0.426684230566025,0.0072528044693172,-0.904371619224548,0.430813550949097,0.499041706323624,-0.751902282238007\n             ,0.828168988227844,0.353571265935898,-0.434883326292038,0.842867076396942,-0.00614791456609964,-0.538086712360382\n             ,0.430813550949097,0.499041706323624,-0.751902282238007,0.426684230566025,0.0072528044693172,-0.904371619224548\n             ,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.239434540271759,0.547067582607269,-0.80211478471756\n             ,-0.896252572536469,0.421273946762085,0.13877908885479,-0.882212042808533,0.466362148523331,0.0648713782429695\n             ,-0.893702745437622,0.422671109437943,0.150480940937996,-0.891313374042511,0.424901962280273,0.158173263072968\n             ,-0.797426640987396,0.177673250436783,0.576665341854095,-0.878546297550201,0.378490209579468,0.291378676891327\n             ,-0.896252572536469,0.421273946762085,0.13877908885479,-0.891313374042511,0.424901962280273,0.158173263072968\n             ,-0.870848000049591,0.464649707078934,0.160388261079788,-0.793782532215118,0.557114601135254,0.243993073701859\n             ,-0.855198562145233,0.434895634651184,0.281959563493729,-0.908547103404999,0.339473843574524,0.243515312671661\n             ,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.500399649143219,0.708592295646667,-0.497490882873535\n             ,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.809561967849731,0.578427612781525,-0.10015495121479\n             ,0.647232055664063,0.709673702716827,-0.278305619955063,0.678524672985077,0.663206517696381,-0.31585019826889\n             ,0.749007403850555,0.651603639125824,-0.120002605021,0.702042996883392,0.707515120506287,-0.0809817835688591\n             ,0.73427015542984,0.669211447238922,-0.114032231271267,0.717039883136749,0.690781950950623,-0.093134693801403\n             ,0.702042996883392,0.707515120506287,-0.0809817835688591,0.749007403850555,0.651603639125824,-0.120002605021\n             ,0.727223694324493,0.663318991661072,-0.176503792405128,0.733190476894379,0.653582632541656,-0.187780305743217\n             ,0.717039883136749,0.690781950950623,-0.093134693801403,0.73427015542984,0.669211447238922,-0.114032231271267\n             ,0.709426641464233,0.694044709205627,-0.122539132833481,0.640394508838654,0.754049122333527,-0.145961552858353\n             ,0.650463998317719,0.740020751953125,-0.17107281088829,0.712908089160919,0.682124614715576,-0.162689983844757\n             ,0.640394508838654,0.754049122333527,-0.145961552858353,0.602886617183685,0.797378718852997,-0.0267372038215399\n             ,0.752064108848572,0.658552646636963,-0.0266083907335997,0.650463998317719,0.740020751953125,-0.17107281088829\n             ,0.602886617183685,0.797378718852997,-0.0267372038215399,0.471274465322495,0.860716044902802,0.192531242966652\n             ,0.599858105182648,0.75833523273468,0.255142837762833,0.752064108848572,0.658552646636963,-0.0266083907335997\n             ,0.471274465322495,0.860716044902802,0.192531242966652,0.130269169807434,0.905642747879028,0.403535813093185\n             ,0.15803250670433,0.792331993579865,0.589267194271088,0.599858105182648,0.75833523273468,0.255142837762833,-0.661795377731323\n             ,0.713703334331512,0.229465648531914,-0.748181462287903,0.587628781795502,0.308085918426514,-0.390775978565216\n             ,0.856176793575287,0.33801680803299,-0.382025182247162,0.832321286201477,0.401619255542755,-0.703840732574463\n             ,0.696332275867462,0.140461906790733,-0.819103717803955,0.554178774356842,0.148171976208687,-0.748181462287903\n             ,0.587628781795502,0.308085918426514,-0.661795377731323,0.713703334331512,0.229465648531914,-0.755123674869537\n             ,0.652067303657532,0.067797377705574,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.658155262470245\n             ,0.750174641609192,0.0637935549020767,-0.729536950588226,0.676141858100891,0.102995604276657,-0.755123674869537\n             ,0.652067303657532,0.067797377705574,-0.767313361167908,0.622622489929199,0.153530210256577,-0.615695953369141\n             ,0.768994450569153,0.171947792172432,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.738506555557251\n             ,0.594659924507141,0.317785561084747,-0.596384108066559,0.73188179731369,0.329658985137939,-0.615695953369141\n             ,0.768994450569153,0.171947792172432,-0.767313361167908,0.622622489929199,0.153530210256577,-0.613772094249725\n             ,0.718873798847198,0.326349943876266,-0.723107695579529,0.620889544487,0.302673906087875,-0.713916778564453,0.653736412525177\n             ,0.250901401042938,-0.63234806060791,0.720907807350159,0.283598214387894,-0.483161300420761,0.708275854587555\n             ,-0.514684855937958,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.671855926513672,0.740681767463684\n             ,-0.000314092845655978,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.143811345100403,0.67733633518219\n             ,-0.721480309963226,-0.1213503703475,0.714234888553619,-0.689305901527405,-0.462542802095413,0.739023745059967\n             ,-0.48979389667511,-0.483161300420761,0.708275854587555,-0.514684855937958,0.305622786283493,0.734605193138123\n             ,-0.605763852596283,0.300025343894959,0.704358696937561,-0.643322348594666,0.678524672985077,0.663206517696381\n             ,-0.31585019826889,0.647232055664063,0.709673702716827,-0.278305619955063,-0.732339918613434,0.57999724149704\n             ,0.356765151023865,-0.76466292142868,0.188213840126991,0.616332828998566,-0.854411065578461,0.0699175223708153\n             ,0.514872133731842,-0.826885998249054,0.483063906431198,0.287938833236694,-0.404268890619278,0.753554701805115\n             ,0.518383979797363,-0.367227405309677,0.346865743398666,0.863034307956696,-0.76466292142868,0.188213840126991\n             ,0.616332828998566,-0.732339918613434,0.57999724149704,0.356765151023865,0.144893497228622,0.857636988162994\n             ,0.493421345949173,0.270604372024536,0.441341161727905,0.855564832687378,-0.367227405309677,0.346865743398666\n             ,0.863034307956696,-0.404268890619278,0.753554701805115,0.518383979797363,0.526539385318756,0.801656424999237\n             ,0.283025234937668,0.664407253265381,0.746931552886963,0.0256172958761454,0.911552846431732,0.361514419317245\n             ,0.195904940366745,0.71388167142868,0.36040398478508,0.60040146112442,0.664407253265381,0.746931552886963,0.0256172958761454\n             ,0.632998824119568,0.753636837005615,-0.177042677998543,0.905105113983154,0.409709811210632,-0.113677680492401\n             ,0.911552846431732,0.361514419317245,0.195904940366745,0.834402143955231,0.550802052021027,0.0197512619197369\n             ,0.75202214717865,0.649503469467163,-0.112284608185291,0.939418137073517,0.146130084991455,-0.310063809156418\n             ,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.721381485462189,0.602611780166626,-0.341273874044418\n             ,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.936574637889862,0.00382779608480632,-0.350447237491608\n             ,0.972268581390381,0.233539223670959,0.0123813217505813,0.350197345018387,0.67135888338089,-0.653176128864288\n             ,0.426684230566025,0.0072528044693172,-0.904371619224548,0.842867076396942,-0.00614791456609964,-0.538086712360382\n             ,0.721381485462189,0.602611780166626,-0.341273874044418,0.426684230566025,0.0072528044693172,-0.904371619224548\n             ,0.350197345018387,0.67135888338089,-0.653176128864288,-0.177267998456955,0.365929782390594,-0.913603544235229\n             ,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.674115240573883,-0.0423770807683468,-0.73740953207016\n             ,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.809561967849731,0.578427612781525,-0.10015495121479\n             ,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.870848000049591,0.464649707078934,0.160388261079788\n             ,-0.908547103404999,0.339473843574524,0.243515312671661,-0.975513935089111,-0.202585533261299,0.085625521838665\n             ,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.797426640987396,0.177673250436783,0.576665341854095\n             ,-0.891313374042511,0.424901962280273,0.158173263072968,-0.991389513015747,-0.125117510557175,0.038632795214653\n             ,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.893702745437622,0.422671109437943,0.150480940937996\n             ,-0.941741049289703,0.11614803224802,0.315647661685944,-0.991389513015747,-0.125117510557175,0.038632795214653\n             ,-0.891313374042511,0.424901962280273,0.158173263072968,-0.413176447153091,-0.602903425693512,0.682490050792694\n             ,-0.712531268596649,-0.546411395072937,-0.440152049064636,0.43010625243187,-0.644480228424072,-0.632181823253632\n             ,0.695957362651825,-0.547607183456421,0.464510202407837,0.360958188772202,-0.844728171825409,-0.395149946212769\n             ,0.668817698955536,-0.562513530254364,0.486067235469818,-0.450368136167526,-0.655528962612152,0.606176793575287\n             ,-0.595698416233063,-0.718034863471985,-0.359957367181778,0.350197345018387,0.67135888338089,-0.653176128864288\n             ,0.320632994174957,0.735152721405029,-0.597281336784363,-0.139554515480995,0.707306146621704,-0.692995369434357\n             ,-0.177267998456955,0.365929782390594,-0.913603544235229,0.320632994174957,0.735152721405029,-0.597281336784363\n             ,0.300025343894959,0.704358696937561,-0.643322348594666,-0.143811345100403,0.67733633518219,-0.721480309963226\n             ,-0.139554515480995,0.707306146621704,-0.692995369434357,0.144893497228622,0.857636988162994,0.493421345949173\n             ,-0.404268890619278,0.753554701805115,0.518383979797363,-0.416523069143295,0.747589528560638,0.517318487167358\n             ,0.128903344273567,0.870382189750671,0.475203901529312,0.128903344273567,0.870382189750671,0.475203901529312\n             ,-0.416523069143295,0.747589528560638,0.517318487167358,-0.382025182247162,0.832321286201477,0.401619255542755\n             ,0.130269169807434,0.905642747879028,0.403535813093185,0.57691216468811,0.718079447746277,0.389273971319199,0.392663985490799\n             ,0.918741226196289,-0.0415881127119064,0.0790780261158943,0.992485880851746,0.0933722630143166,0.202111423015594\n             ,0.805501997470856,0.557061493396759,-0.187374100089073,0.574305176734924,0.796909391880035,-0.00418555224314332\n             ,0.628182470798492,0.77805483341217,0.402498751878738,0.624280869960785,0.669528305530548,0.407288730144501,0.570921003818512\n             ,0.712857067584991,0.331241726875305,0.767114758491516,0.549375832080841,0.402498751878738,0.624280869960785\n             ,0.669528305530548,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.0206129420548677,0.755090236663818\n             ,0.655296742916107,0.272203177213669,0.658502519130707,-0.701626539230347,0.421845316886902,0.35173287987709\n             ,-0.835661768913269,-0.180025935173035,0.229685723781586,-0.956470131874084,-0.122567981481552,0.664539813995361\n             ,-0.737132251262665,0.421845316886902,0.35173287987709,-0.835661768913269,0.397901266813278,0.642865896224976\n             ,-0.65452116727829,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.180025935173035,0.229685723781586\n             ,-0.956470131874084,0.71388167142868,0.36040398478508,0.60040146112442,0.57691216468811,0.718079447746277,0.389273971319199\n             ,0.202111423015594,0.805501997470856,0.557061493396759,0.270604372024536,0.441341161727905,0.855564832687378\n             ,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.627528488636017,0.574077665805817,-0.525968492031097\n             ,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.178336516022682,0.738517105579376,-0.650221943855286\n             ,0.127702310681343,0.976085126399994,0.17592579126358,0.0790780261158943,0.992485880851746,0.0933722630143166\n             ,0.392663985490799,0.918741226196289,-0.0415881127119064,0.410511314868927,0.907221972942352,0.0918079540133476\n             ,-0.330185979604721,-0.571054816246033,0.751580774784088,-0.717249631881714,-0.625881135463715,-0.306309938430786\n             ,0.391103774309158,-0.641535997390747,-0.659901022911072,0.705251514911652,-0.583878755569458,0.402126759290695\n             ,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.0525061003863811,0.0318809561431408,-0.998111546039581\n             ,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.627380669116974,0.542527735233307,-0.558620691299438\n             ,0.15803250670433,0.792331993579865,0.589267194271088,0.130269169807434,0.905642747879028,0.403535813093185,-0.382025182247162\n             ,0.832321286201477,0.401619255542755,-0.390775978565216,0.856176793575287,0.33801680803299,0.300025343894959\n             ,0.704358696937561,-0.643322348594666,0.305622786283493,0.734605193138123,-0.605763852596283,-0.1213503703475\n             ,0.714234888553619,-0.689305901527405,-0.143811345100403,0.67733633518219,-0.721480309963226,0.144893497228622\n             ,0.857636988162994,0.493421345949173,0.526539385318756,0.801656424999237,0.283025234937668,0.71388167142868,0.36040398478508\n             ,0.60040146112442,0.270604372024536,0.441341161727905,0.855564832687378,-0.177267998456955,0.365929782390594\n             ,-0.913603544235229,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.674115240573883,-0.0423770807683468\n             ,-0.73740953207016,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.198126822710037,0.0765142217278481\n             ,-0.977185368537903,-0.147367119789124,-0.401798576116562,-0.903792500495911,-0.635097622871399,-0.770463764667511\n             ,-0.0551051236689091,-0.648241400718689,-0.506932020187378,-0.568157553672791,0.11251799762249,-0.874383747577667\n             ,-0.472009360790253,0.323624908924103,-0.91464102268219,0.242278248071671,-0.248996630311012,-0.917850255966187\n             ,0.309114128351212,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.671025335788727,-0.589844524860382\n             ,-0.449230968952179,0.459699690341949,-0.614600598812103,-0.641047835350037,0.596454858779907,-0.699761033058167\n             ,0.393161594867706,-0.412575572729111,-0.667341589927673,0.620029509067535,0.773792564868927,-0.604486048221588\n             ,-0.189318999648094,0.180837735533714,-0.611773073673248,0.770085334777832,-0.724370777606964,-0.668023824691772\n             ,0.170385435223579,-0.195960268378258,-0.58412891626358,-0.787650287151337,0.723087668418884,-0.507770240306854\n             ,-0.468309193849564,0.581261336803436,-0.682449996471405,0.443167299032211,-0.437470376491547,-0.700090348720551\n             ,0.564352035522461,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.326672613620758,-0.732156813144684\n             ,0.597688376903534,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.147367119789124,-0.401798576116562\n             ,-0.903792500495911,0.308205276727676,-0.725507915019989,-0.615343689918518,-0.964107573032379,-0.248898640275002\n             ,-0.0924450159072876,0.259815812110901,-0.928046464920044,-0.266881018877029,0.459699690341949,-0.614600598812103\n             ,-0.641047835350037,-0.671025335788727,-0.589844524860382,-0.449230968952179,0.259815812110901,-0.928046464920044\n             ,-0.266881018877029,0.303018242120743,-0.938679337501526,0.164502277970314,0.596454858779907,-0.699761033058167\n             ,0.393161594867706,0.459699690341949,-0.614600598812103,-0.641047835350037,-0.412575572729111,-0.667341589927673\n             ,0.620029509067535,0.596454858779907,-0.699761033058167,0.393161594867706,0.303018242120743,-0.938679337501526\n             ,0.164502277970314,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.918069899082184,-0.187107101082802\n             ,0.349483251571655,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.671025335788727,-0.589844524860382\n             ,-0.449230968952179,-0.412575572729111,-0.667341589927673,0.620029509067535,0.0517410226166248,-0.448791861534119\n             ,-0.892137169837952,-0.0855747610330582,-0.285937398672104,-0.954419612884521,0.37071630358696,-0.925935029983521\n             ,-0.0722067281603813,0.768725872039795,-0.625621736049652,-0.132883325219154,0.311763882637024,-0.736566185951233\n             ,0.600227952003479,0.414378970861435,-0.480131238698959,0.773152053356171,0.768725872039795,-0.625621736049652\n             ,-0.132883325219154,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.739399552345276,-0.3774254322052\n             ,0.557528793811798,-0.47402635216713,-0.576445937156677,0.665589272975922,0.414378970861435,-0.480131238698959\n             ,0.773152053356171,0.311763882637024,-0.736566185951233,0.600227952003479,-0.627128541469574,0.0574355758726597\n             ,-0.776795268058777,-0.628591358661652,-0.444956004619598,-0.637876987457275,-0.887380957603455,-0.451603919267654\n             ,-0.09278454631567,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.628591358661652,-0.444956004619598\n             ,-0.637876987457275,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.0855747610330582,-0.285937398672104\n             ,-0.954419612884521,0.0517410226166248,-0.448791861534119,-0.892137169837952,0.773792564868927,-0.604486048221588\n             ,-0.189318999648094,0.542883396148682,-0.82672655582428,-0.147651195526123,0.0959865897893906,-0.91358608007431\n             ,0.395154505968094,0.180837735533714,-0.611773073673248,0.770085334777832,-0.518468260765076,-0.848432958126068\n             ,0.106546267867088,-0.724370777606964,-0.668023824691772,0.170385435223579,0.180837735533714,-0.611773073673248\n             ,0.770085334777832,0.0959865897893906,-0.91358608007431,0.395154505968094,-0.106877580285072,-0.900658130645752\n             ,-0.421179503202438,-0.195960268378258,-0.58412891626358,-0.787650287151337,-0.724370777606964,-0.668023824691772\n             ,0.170385435223579,-0.518468260765076,-0.848432958126068,0.106546267867088,0.542883396148682,-0.82672655582428\n             ,-0.147651195526123,0.773792564868927,-0.604486048221588,-0.189318999648094,-0.195960268378258,-0.58412891626358\n             ,-0.787650287151337,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.349896788597107,-0.784230768680573\n             ,-0.512400567531586,-0.437470376491547,-0.700090348720551,0.564352035522461,-0.259535163640976,-0.932749211788177\n             ,0.250240743160248,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.723087668418884,-0.507770240306854\n             ,-0.468309193849564,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.149650141596794,-0.977229058742523\n             ,-0.150426745414734,0.464242339134216,-0.872838377952576,-0.150440022349358,0.581261336803436,-0.682449996471405\n             ,0.443167299032211,0.723087668418884,-0.507770240306854,-0.468309193849564,0.464242339134216,-0.872838377952576\n             ,-0.150440022349358,0.323624908924103,-0.91464102268219,0.242278248071671,-0.437470376491547,-0.700090348720551\n             ,0.564352035522461,0.581261336803436,-0.682449996471405,0.443167299032211,0.323624908924103,-0.91464102268219\n             ,0.242278248071671,-0.259535163640976,-0.932749211788177,0.250240743160248,0.810118317604065,-0.284595668315887\n             ,-0.51255601644516,0.94776064157486,-0.269029140472412,-0.171385690569878,0.631753981113434,-0.695992708206177\n             ,0.341293185949326,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.248996630311012,-0.917850255966187\n             ,0.309114128351212,-0.438560724258423,-0.682490348815918,0.584697723388672,0.631753981113434,-0.695992708206177\n             ,0.341293185949326,0.94776064157486,-0.269029140472412,-0.171385690569878,-0.507440745830536,-0.861680686473846\n             ,0.00320725026540458,-0.663442015647888,-0.730678915977478,-0.161099418997765,-0.438560724258423,-0.682490348815918\n             ,0.584697723388672,-0.248996630311012,-0.917850255966187,0.309114128351212,-0.0872491747140884,-0.891694486141205\n             ,-0.444149196147919,-0.165543153882027,-0.540198087692261,-0.825094819068909,-0.663442015647888,-0.730678915977478\n             ,-0.161099418997765,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.810118317604065,-0.284595668315887\n             ,-0.51255601644516,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.165543153882027,-0.540198087692261\n             ,-0.825094819068909,-0.0872491747140884,-0.891694486141205,-0.444149196147919,0.445575773715973,0.0603602342307568\n             ,-0.89320707321167,0.308205276727676,-0.725507915019989,-0.615343689918518,-0.147367119789124,-0.401798576116562\n             ,-0.903792500495911,-0.198126822710037,0.0765142217278481,-0.977185368537903,0.308205276727676,-0.725507915019989\n             ,-0.615343689918518,0.445575773715973,0.0603602342307568,-0.89320707321167,0.885131120681763,0.0417929887771606\n             ,-0.463461130857468,0.620603084564209,-0.695841789245605,-0.361463725566864,0.259815812110901,-0.928046464920044\n             ,-0.266881018877029,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.739399552345276,-0.3774254322052\n             ,0.557528793811798,0.311763882637024,-0.736566185951233,0.600227952003479,0.259815812110901,-0.928046464920044\n             ,-0.266881018877029,0.311763882637024,-0.736566185951233,0.600227952003479,0.37071630358696,-0.925935029983521\n             ,-0.0722067281603813,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.518468260765076,-0.848432958126068\n             ,0.106546267867088,-0.149650141596794,-0.977229058742523,-0.150426745414734,-0.518468260765076,-0.848432958126068\n             ,0.106546267867088,0.0959865897893906,-0.91358608007431,0.395154505968094,0.464242339134216,-0.872838377952576\n             ,-0.150440022349358,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.0959865897893906,-0.91358608007431\n             ,0.395154505968094,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.464242339134216,-0.872838377952576\n             ,-0.150440022349358,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.262460768222809,-0.84521484375\n             ,0.465538620948792,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.663442015647888,-0.730678915977478\n             ,-0.161099418997765,0.551329076290131,-0.7074014544487,-0.442288815975189,0.631753981113434,-0.695992708206177\n             ,0.341293185949326,-0.438560724258423,-0.682490348815918,0.584697723388672,-0.326672613620758,-0.732156813144684\n             ,0.597688376903534,-0.262460768222809,-0.84521484375,0.465538620948792,-0.648241400718689,-0.506932020187378\n             ,-0.568157553672791,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.262460768222809,-0.84521484375\n             ,0.465538620948792,-0.326672613620758,-0.732156813144684,0.597688376903534,-0.3234041929245,-0.738465428352356\n             ,0.591674447059631,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.326672613620758,-0.732156813144684\n             ,0.597688376903534,0.308205276727676,-0.725507915019989,-0.615343689918518,0.620603084564209,-0.695841789245605\n             ,-0.361463725566864,-0.3234041929245,-0.738465428352356,0.591674447059631,0.542883396148682,-0.82672655582428\n             ,-0.147651195526123,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.262460768222809,-0.84521484375\n             ,0.465538620948792,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.0872491747140884,-0.891694486141205\n             ,-0.444149196147919,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.3234041929245,-0.738465428352356\n             ,0.591674447059631,0.348949402570724,-0.852244853973389,0.389760226011276,0.798132300376892,-0.595748007297516\n             ,0.0898283571004868,-0.333872824907303,-0.734721601009369,0.590519309043884,0.798132300376892,-0.595748007297516\n             ,0.0898283571004868,0.810118317604065,-0.284595668315887,-0.51255601644516,-0.0872491747140884,-0.891694486141205\n             ,-0.444149196147919,-0.301147669553757,-0.68056708574295,0.667935967445374,-0.598684787750244,-0.729470372200012\n             ,-0.330831557512283,0.478905141353607,-0.688271880149841,-0.544914424419403,0.691426575183868,-0.534520328044891\n             ,0.486021935939789,-0.29621621966362,-0.72027575969696,0.627262949943542,-0.593355655670166,-0.709652066230774\n             ,-0.379898726940155,0.420935273170471,-0.595206916332245,-0.68450140953064,0.750927150249481,-0.519762933254242\n             ,0.407375574111938,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.522674918174744,-0.84270977973938\n             ,-0.129039376974106,0.338333457708359,-0.796955585479736,-0.500392079353333,0.695649981498718,-0.635026633739471\n             ,0.335875421762466,0.207811132073402,-0.962575078010559,-0.173964589834213,-0.261420041322708,-0.954043209552765\n             ,0.146496221423149,0.181094169616699,-0.00969368312507868,0.983417987823486,0.306766599416733,-0.118459150195122\n             ,0.944384276866913,0.306935548782349,-0.919691801071167,0.244862332940102,0.201402872800827,-0.92625367641449\n             ,-0.318576484918594,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.191650345921516,-0.911473035812378\n             ,0.363987594842911,0.400767505168915,-0.84773463010788,0.347464233636856,0.207801967859268,-0.930255472660065\n             ,-0.302395612001419,-0.262365102767944,-0.963967621326447,-0.0439423173666,-0.118260890245438,-0.832547545433044\n             ,0.541182935237885,0.362296313047409,-0.902348458766937,0.233470931649208,0.128298655152321,-0.92551976442337\n             ,-0.356304168701172,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.23048010468483,-0.946770489215851\n             ,0.224732384085655,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.192425131797791,-0.974552154541016\n             ,0.114980764687061,0.706917345523834,-0.10402026027441,0.699605345726013,0.814850926399231,-0.0293116569519043\n             ,0.57892906665802,0.395999073982239,-0.883323311805725,0.250847846269608,-0.148850679397583,-0.924228370189667\n             ,0.351632446050644,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.211911484599113,-0.951958835124969\n             ,-0.221060931682587,0.11251799762249,-0.874383747577667,-0.472009360790253,-0.312811404466629,-0.918802440166473\n             ,-0.240730464458466,-0.18037211894989,-0.916134774684906,0.357998490333557,0.339713275432587,-0.937209665775299\n             ,0.0789491534233093,0.201402872800827,-0.92625367641449,-0.318576484918594,-0.956566870212555,-0.244721978902817\n             ,-0.158401101827621,-0.900666117668152,-0.271470487117767,0.339270144701004,0.362296313047409,-0.902348458766937\n             ,0.233470931649208,-0.191650345921516,-0.911473035812378,0.363987594842911,0.395999073982239,-0.883323311805725\n             ,0.250847846269608,0.211911484599113,-0.951958835124969,-0.221060931682587,-0.262365102767944,-0.963967621326447\n             ,-0.0439423173666,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.23048010468483,-0.946770489215851\n             ,0.224732384085655,0.339713275432587,-0.937209665775299,0.0789491534233093,0.200983673334122,-0.912257730960846\n             ,-0.356919288635254,0.207811132073402,-0.962575078010559,-0.173964589834213,-0.812849164009094,-0.351107835769653\n             ,0.46475750207901,-0.665187239646912,-0.279087424278259,0.692557692527771,0.400767505168915,-0.84773463010788\n             ,0.347464233636856,0.295632928609848,-0.949930250644684,-0.101162008941174,0.339781612157822,-0.868737816810608\n             ,0.360337436199188,-0.192425131797791,-0.974552154541016,0.114980764687061,0.958362102508545,-0.256494760513306\n             ,0.125509008765221,0.863034009933472,-0.335786014795303,-0.377385854721069,-0.314595848321915,-0.93869549036026\n             ,-0.140997022390366,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.18037211894989,-0.916134774684906\n             ,0.357998490333557,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.794416069984436,-0.305554151535034\n             ,-0.524918794631958,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.262365102767944,-0.963967621326447\n             ,-0.0439423173666,0.306935548782349,-0.919691801071167,0.244862332940102,-0.191650345921516,-0.911473035812378\n             ,0.363987594842911,0.306935548782349,-0.919691801071167,0.244862332940102,-0.262365102767944,-0.963967621326447\n             ,-0.0439423173666,0.207801967859268,-0.930255472660065,-0.302395612001419,-0.192425131797791,-0.974552154541016\n             ,0.114980764687061,-0.124663934111595,-0.874086141586304,0.469502240419388,0.912856459617615,-0.241107016801834\n             ,0.329485177993774,0.970349192619324,-0.239411205053329,0.0332370884716511,-0.0856366232037544,-0.288858771324158\n             ,0.953533947467804,0.826135098934174,-0.33500149846077,0.453072637319565,0.814850926399231,-0.0293116569519043\n             ,0.57892906665802,0.181094169616699,-0.00969368312507868,0.983417987823486,0.295632928609848,-0.949930250644684\n             ,-0.101162008941174,0.814850926399231,-0.0293116569519043,0.57892906665802,0.826135098934174,-0.33500149846077\n             ,0.453072637319565,0.480840384960175,-0.739749372005463,-0.470705211162567,0.480840384960175,-0.739749372005463\n             ,-0.470705211162567,-0.64503401517868,-0.763977766036987,0.0164064429700375,-0.261420041322708,-0.954043209552765\n             ,0.146496221423149,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.261420041322708,-0.954043209552765\n             ,0.146496221423149,-0.64503401517868,-0.763977766036987,0.0164064429700375,-0.0856366232037544,-0.288858771324158\n             ,0.953533947467804,0.181094169616699,-0.00969368312507868,0.983417987823486,-0.191650345921516,-0.911473035812378\n             ,0.363987594842911,-0.415498435497284,-0.625033140182495,0.660828769207001,0.722060799598694,-0.55972957611084\n             ,0.406609207391739,0.395999073982239,-0.883323311805725,0.250847846269608,0.395615637302399,-0.602471053600311\n             ,-0.693193197250366,0.200983673334122,-0.912257730960846,-0.356919288635254,0.395999073982239,-0.883323311805725\n             ,0.250847846269608,0.722060799598694,-0.55972957611084,0.406609207391739,-0.389462172985077,-0.886311650276184\n             ,-0.250541120767593,0.200983673334122,-0.912257730960846,-0.356919288635254,0.395615637302399,-0.602471053600311\n             ,-0.693193197250366,-0.709003865718842,-0.541708588600159,-0.451514542102814,-0.389462172985077,-0.886311650276184\n             ,-0.250541120767593,-0.709003865718842,-0.541708588600159,-0.451514542102814,-0.415498435497284,-0.625033140182495\n             ,0.660828769207001,-0.191650345921516,-0.911473035812378,0.363987594842911,-0.23048010468483,-0.946770489215851\n             ,0.224732384085655,-0.466174095869064,-0.668627381324768,0.579326450824738,0.705481588840485,-0.662966072559357\n             ,0.250542849302292,0.339713275432587,-0.937209665775299,0.0789491534233093,0.282899409532547,-0.764817476272583\n             ,-0.578811049461365,0.11251799762249,-0.874383747577667,-0.472009360790253,0.339713275432587,-0.937209665775299\n             ,0.0789491534233093,0.705481588840485,-0.662966072559357,0.250542849302292,-0.334644585847855,-0.867584347724915\n             ,-0.367845624685287,0.11251799762249,-0.874383747577667,-0.472009360790253,0.282899409532547,-0.764817476272583\n             ,-0.578811049461365,-0.557026326656342,-0.731577575206757,-0.393085092306137,-0.334644585847855,-0.867584347724915\n             ,-0.367845624685287,-0.557026326656342,-0.731577575206757,-0.393085092306137,-0.466174095869064,-0.668627381324768\n             ,0.579326450824738,-0.23048010468483,-0.946770489215851,0.224732384085655,0.384443372488022,-0.766655147075653\n             ,-0.514240384101868,0.211911484599113,-0.951958835124969,-0.221060931682587,0.339781612157822,-0.868737816810608\n             ,0.360337436199188,0.666895627975464,-0.56043928861618,0.491078466176987,-0.685397565364838,-0.694672048091888\n             ,-0.21831376850605,-0.262365102767944,-0.963967621326447,-0.0439423173666,0.211911484599113,-0.951958835124969\n             ,-0.221060931682587,0.384443372488022,-0.766655147075653,-0.514240384101868,-0.317059487104416,-0.547120869159698\n             ,0.774681866168976,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.262365102767944,-0.963967621326447\n             ,-0.0439423173666,-0.685397565364838,-0.694672048091888,-0.21831376850605,-0.317059487104416,-0.547120869159698\n             ,0.774681866168976,0.666895627975464,-0.56043928861618,0.491078466176987,0.339781612157822,-0.868737816810608\n             ,0.360337436199188,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.610171139240265,-0.773055195808411\n             ,0.173426955938339,-0.343847513198853,-0.196072369813919,0.918327033519745,-0.441097885370255,0.233705267310143\n             ,0.866495549678802,-0.812849164009094,-0.351107835769653,0.46475750207901,-0.441097885370255,0.233705267310143\n             ,0.866495549678802,-0.343847513198853,-0.196072369813919,0.918327033519745,0.545981824398041,-0.584509074687958\n             ,0.600210785865784,0.306766599416733,-0.118459150195122,0.944384276866913,0.207811132073402,-0.962575078010559\n             ,-0.173964589834213,0.306766599416733,-0.118459150195122,0.944384276866913,0.545981824398041,-0.584509074687958\n             ,0.600210785865784,0.314525902271271,-0.770808696746826,-0.554010331630707,-0.610171139240265,-0.773055195808411\n             ,0.173426955938339,-0.812849164009094,-0.351107835769653,0.46475750207901,0.207811132073402,-0.962575078010559\n             ,-0.173964589834213,0.314525902271271,-0.770808696746826,-0.554010331630707,-0.712531268596649,-0.546411395072937\n             ,-0.440152049064636,-0.413176447153091,-0.602903425693512,0.682490050792694,-0.810173809528351,-0.314327657222748\n             ,0.494789302349091,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.810173809528351,-0.314327657222748\n             ,0.494789302349091,-0.413176447153091,-0.602903425693512,0.682490050792694,0.695957362651825,-0.547607183456421\n             ,0.464510202407837,0.306935548782349,-0.919691801071167,0.244862332940102,0.306935548782349,-0.919691801071167\n             ,0.244862332940102,0.695957362651825,-0.547607183456421,0.464510202407837,0.43010625243187,-0.644480228424072\n             ,-0.632181823253632,0.201402872800827,-0.92625367641449,-0.318576484918594,-0.712531268596649,-0.546411395072937\n             ,-0.440152049064636,-0.956566870212555,-0.244721978902817,-0.158401101827621,0.201402872800827,-0.92625367641449\n             ,-0.318576484918594,0.43010625243187,-0.644480228424072,-0.632181823253632,0.668817698955536,-0.562513530254364\n             ,0.486067235469818,0.362296313047409,-0.902348458766937,0.233470931649208,-0.900666117668152,-0.271470487117767\n             ,0.339270144701004,-0.450368136167526,-0.655528962612152,0.606176793575287,0.128298655152321,-0.92551976442337\n             ,-0.356304168701172,0.362296313047409,-0.902348458766937,0.233470931649208,0.668817698955536,-0.562513530254364\n             ,0.486067235469818,0.360958188772202,-0.844728171825409,-0.395149946212769,0.128298655152321,-0.92551976442337\n             ,-0.356304168701172,0.360958188772202,-0.844728171825409,-0.395149946212769,-0.595698416233063,-0.718034863471985\n             ,-0.359957367181778,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.595698416233063,-0.718034863471985\n             ,-0.359957367181778,-0.450368136167526,-0.655528962612152,0.606176793575287,-0.900666117668152,-0.271470487117767\n             ,0.339270144701004,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.330185979604721,-0.571054816246033\n             ,0.751580774784088,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.939882695674896,-0.341330021619797\n             ,0.0106942849233747,-0.717249631881714,-0.625881135463715,-0.306309938430786,0.400767505168915,-0.84773463010788\n             ,0.347464233636856,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.330185979604721,-0.571054816246033\n             ,0.751580774784088,0.705251514911652,-0.583878755569458,0.402126759290695,0.705251514911652,-0.583878755569458\n             ,0.402126759290695,0.391103774309158,-0.641535997390747,-0.659901022911072,0.207801967859268,-0.930255472660065\n             ,-0.302395612001419,0.400767505168915,-0.84773463010788,0.347464233636856,-0.717249631881714,-0.625881135463715\n             ,-0.306309938430786,-0.939882695674896,-0.341330021619797,0.0106942849233747,0.207801967859268,-0.930255472660065\n             ,-0.302395612001419,0.391103774309158,-0.641535997390747,-0.659901022911072,0.0837007611989975,-0.567488670349121\n             ,0.819115877151489,0.623615741729736,-0.765475749969482,-0.158588528633118,0.970349192619324,-0.239411205053329\n             ,0.0332370884716511,0.706917345523834,-0.10402026027441,0.699605345726013,0.970349192619324,-0.239411205053329\n             ,0.0332370884716511,0.623615741729736,-0.765475749969482,-0.158588528633118,-0.668955087661743,-0.737109065055847\n             ,-0.0957564637064934,-0.192425131797791,-0.974552154541016,0.114980764687061,-0.192425131797791,-0.974552154541016\n             ,0.114980764687061,-0.668955087661743,-0.737109065055847,-0.0957564637064934,0.0837007611989975,-0.567488670349121\n             ,0.819115877151489,0.706917345523834,-0.10402026027441,0.699605345726013,0.691426575183868,-0.534520328044891\n             ,0.486021935939789,0.478905141353607,-0.688271880149841,-0.544914424419403,0.863034009933472,-0.335786014795303\n             ,-0.377385854721069,0.912856459617615,-0.241107016801834,0.329485177993774,-0.598684787750244,-0.729470372200012\n             ,-0.330831557512283,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.863034009933472,-0.335786014795303\n             ,-0.377385854721069,0.478905141353607,-0.688271880149841,-0.544914424419403,-0.301147669553757,-0.68056708574295\n             ,0.667935967445374,0.691426575183868,-0.534520328044891,0.486021935939789,0.912856459617615,-0.241107016801834\n             ,0.329485177993774,-0.124663934111595,-0.874086141586304,0.469502240419388,0.958362102508545,-0.256494760513306\n             ,0.125509008765221,0.750927150249481,-0.519762933254242,0.407375574111938,0.420935273170471,-0.595206916332245\n             ,-0.68450140953064,0.794416069984436,-0.305554151535034,-0.524918794631958,-0.593355655670166,-0.709652066230774\n             ,-0.379898726940155,-0.326996743679047,-0.921505987644196,-0.209522947669029,0.794416069984436,-0.305554151535034\n             ,-0.524918794631958,0.420935273170471,-0.595206916332245,-0.68450140953064,-0.148850679397583,-0.924228370189667\n             ,0.351632446050644,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.593355655670166,-0.709652066230774\n             ,-0.379898726940155,-0.29621621966362,-0.72027575969696,0.627262949943542,0.750927150249481,-0.519762933254242\n             ,0.407375574111938,0.958362102508545,-0.256494760513306,0.125509008765221,-0.148850679397583,-0.924228370189667\n             ,0.351632446050644,-0.29621621966362,-0.72027575969696,0.627262949943542,0.338333457708359,-0.796955585479736\n             ,-0.500392079353333,0.680100440979004,-0.471440553665161,-0.56143319606781,0.931363761425018,-0.361004918813705\n             ,-0.0472966246306896,0.695649981498718,-0.635026633739471,0.335875421762466,-0.312811404466629,-0.918802440166473\n             ,-0.240730464458466,0.680100440979004,-0.471440553665161,-0.56143319606781,0.338333457708359,-0.796955585479736\n             ,-0.500392079353333,-0.522674918174744,-0.84270977973938,-0.129039376974106,-0.522674918174744,-0.84270977973938\n             ,-0.129039376974106,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.18037211894989,-0.916134774684906\n             ,0.357998490333557,-0.312811404466629,-0.918802440166473,-0.240730464458466,0.695649981498718,-0.635026633739471\n             ,0.335875421762466,0.931363761425018,-0.361004918813705,-0.0472966246306896,-0.18037211894989,-0.916134774684906\n             ,0.357998490333557,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.259535163640976,-0.932749211788177\n             ,0.250240743160248,-0.334644585847855,-0.867584347724915,-0.367845624685287,0.128298655152321,-0.92551976442337\n             ,-0.356304168701172,0.303018242120743,-0.938679337501526,0.164502277970314,-0.918069899082184,-0.187107101082802\n             ,0.349483251571655,0.303018242120743,-0.938679337501526,0.164502277970314,0.128298655152321,-0.92551976442337\n             ,-0.356304168701172,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.956566870212555,-0.244721978902817\n             ,-0.158401101827621,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.638639569282532,0.766668856143951\n             ,0.0660171955823898,-0.900666117668152,-0.271470487117767,0.339270144701004,0.181094169616699,-0.00969368312507868\n             ,0.983417987823486,0.814850926399231,-0.0293116569519043,0.57892906665802,0.599858105182648,0.75833523273468\n             ,0.255142837762833,0.15803250670433,0.792331993579865,0.589267194271088,0.706917345523834,-0.10402026027441,0.699605345726013\n             ,0.970349192619324,-0.239411205053329,0.0332370884716511,0.752064108848572,0.658552646636963,-0.0266083907335997\n             ,0.599858105182648,0.75833523273468,0.255142837762833,0.912856459617615,-0.241107016801834,0.329485177993774\n             ,0.863034009933472,-0.335786014795303,-0.377385854721069,0.650463998317719,0.740020751953125,-0.17107281088829\n             ,0.752064108848572,0.658552646636963,-0.0266083907335997,0.864170670509338,0.408057361841202,-0.2944455742836\n             ,0.906549096107483,0.409386813640594,-0.10281577706337,0.740322411060333,0.655164897441864,-0.150604203343391\n             ,0.600557744503021,0.788931846618652,-0.130065008997917,0.816485822200775,0.512709319591522,0.265480846166611\n             ,0.968974769115448,0.149661242961884,0.196696132421494,0.995014905929565,0.0992267951369286,-0.00996995531022549\n             ,0.909856855869293,0.391187816858292,0.138320595026016,0.660223960876465,0.688790857791901,0.299451887607574\n             ,0.359505623579025,0.919594645500183,-0.158434361219406,0.631004393100739,0.719356596469879,-0.29044708609581\n             ,0.816485822200775,0.512709319591522,0.265480846166611,0.331241726875305,0.767114758491516,0.549375832080841\n             ,0.00761288125067949,0.965830504894257,-0.259062767028809,0.258335798978806,0.945306360721588,-0.199144557118416\n             ,0.563141405582428,0.729207217693329,0.388752609491348,-0.261382013559341,0.943598508834839,-0.203227147459984\n             ,-0.505573391914368,0.856702506542206,0.102256529033184,0.0491388663649559,0.993503928184509,-0.102641858160496\n             ,0.00761288125067949,0.965830504894257,-0.259062767028809,-0.413429826498032,0.428489029407501,0.803413331508636\n             ,-0.941741049289703,0.11614803224802,0.315647661685944,-0.520070433616638,0.75630134344101,0.396906822919846\n             ,-0.158630818128586,0.588066816329956,0.793103873729706,-0.0206129420548677,0.755090236663818,0.655296742916107\n             ,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.229550525546074,0.57556563615799,0.784876227378845\n             ,-0.158630818128586,0.588066816329956,0.793103873729706,-0.261382013559341,0.943598508834839,-0.203227147459984\n             ,-0.0206129420548677,0.755090236663818,0.655296742916107,-0.158630818128586,0.588066816329956,0.793103873729706\n             ,-0.522960901260376,0.842813611030579,-0.127189248800278,0.00761288125067949,0.965830504894257,-0.259062767028809\n             ,0.331241726875305,0.767114758491516,0.549375832080841,-0.0206129420548677,0.755090236663818,0.655296742916107\n             ,-0.261382013559341,0.943598508834839,-0.203227147459984,0.494772255420685,0.860163271427155,-0.123772226274014\n             ,0.470422744750977,0.855190873146057,-0.217602953314781,0.647329449653625,0.721940755844116,-0.244471147656441\n             ,0.669141590595245,0.742036402225494,-0.0403924956917763,0.258335798978806,0.945306360721588,-0.199144557118416\n             ,0.303004235029221,0.934939086437225,-0.184600368142128,0.470422744750977,0.855190873146057,-0.217602953314781\n             ,0.494772255420685,0.860163271427155,-0.123772226274014,0.00761288125067949,0.965830504894257,-0.259062767028809\n             ,0.0491388663649559,0.993503928184509,-0.102641858160496,0.303004235029221,0.934939086437225,-0.184600368142128\n             ,0.258335798978806,0.945306360721588,-0.199144557118416,-0.980522751808167,0.123100936412811,0.153040006756783\n             ,-0.962031662464142,0.166659042239189,0.216147810220718,-0.780855476856232,0.547496676445007,0.300852298736572\n             ,-0.894985496997833,0.383079677820206,0.228584602475166,-0.980522751808167,0.123100936412811,0.153040006756783\n             ,-0.894985496997833,0.383079677820206,0.228584602475166,-0.76461535692215,0.640312731266022,0.0732325837016106\n             ,-0.941741049289703,0.11614803224802,0.315647661685944,-0.916947364807129,0.362371772527695,0.167015537619591\n             ,-0.847357213497162,0.513431549072266,0.135549783706665,-0.796578586101532,0.576386690139771,0.182320937514305\n             ,-0.826885998249054,0.483063906431198,0.287938833236694,-0.703840732574463,0.696332275867462,0.140461906790733\n             ,-0.796578586101532,0.576386690139771,0.182320937514305,-0.847357213497162,0.513431549072266,0.135549783706665\n             ,-0.729536950588226,0.676141858100891,0.102995604276657,-0.819103717803955,0.554178774356842,0.148171976208687\n             ,-0.703840732574463,0.696332275867462,0.140461906790733,-0.729536950588226,0.676141858100891,0.102995604276657\n             ,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.76466292142868,0.188213840126991,0.616332828998566\n             ,-0.614538252353668,0.667141258716583,0.421028852462769,-0.597852468490601,0.634572565555573,0.48978579044342\n             ,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.916947364807129,0.362371772527695,0.167015537619591\n             ,-0.980522751808167,0.123100936412811,0.153040006756783,-0.941741049289703,0.11614803224802,0.315647661685944\n             ,-0.893702745437622,0.422671109437943,0.150480940937996,-0.780855476856232,0.547496676445007,0.300852298736572\n             ,-0.962031662464142,0.166659042239189,0.216147810220718,-0.854411065578461,0.0699175223708153,0.514872133731842\n             ,-0.597852468490601,0.634572565555573,0.48978579044342,-0.227211818099022,0.921236872673035,0.315748959779739\n             ,-0.597852468490601,0.634572565555573,0.48978579044342,-0.614538252353668,0.667141258716583,0.421028852462769\n             ,-0.311181366443634,0.925608515739441,0.215441450476646,-0.227211818099022,0.921236872673035,0.315748959779739\n             ,0.127702310681343,0.976085126399994,0.17592579126358,0.0491388663649559,0.993503928184509,-0.102641858160496\n             ,-0.505573391914368,0.856702506542206,0.102256529033184,0.127702310681343,0.976085126399994,0.17592579126358\n             ,0.410511314868927,0.907221972942352,0.0918079540133476,0.303004235029221,0.934939086437225,-0.184600368142128\n             ,0.0491388663649559,0.993503928184509,-0.102641858160496,0.303004235029221,0.934939086437225,-0.184600368142128\n             ,0.410511314868927,0.907221972942352,0.0918079540133476,0.559431314468384,0.828812599182129,0.0103096608072519\n             ,0.470422744750977,0.855190873146057,-0.217602953314781,-0.826885998249054,0.483063906431198,0.287938833236694\n             ,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.962031662464142,0.166659042239189,0.216147810220718\n             ,-0.916947364807129,0.362371772527695,0.167015537619591,0.686884999275208,0.723168194293976,-0.0722270235419273\n             ,0.647329449653625,0.721940755844116,-0.244471147656441,0.470422744750977,0.855190873146057,-0.217602953314781\n             ,0.559431314468384,0.828812599182129,0.0103096608072519,0.905105113983154,0.409709811210632,-0.113677680492401\n             ,0.891577959060669,0.451291143894196,-0.0377500578761101,0.647329449653625,0.721940755844116,-0.244471147656441\n             ,0.686884999275208,0.723168194293976,-0.0722270235419273,0.632998824119568,0.753636837005615,-0.177042677998543\n             ,0.740322411060333,0.655164897441864,-0.150604203343391,0.891577959060669,0.451291143894196,-0.0377500578761101\n             ,0.905105113983154,0.409709811210632,-0.113677680492401,0.676984488964081,0.720325291156769,-0.15107424557209\n             ,0.694885969161987,0.706955552101135,-0.131709426641464,0.600557744503021,0.788931846618652,-0.130065008997917\n             ,0.740322411060333,0.655164897441864,-0.150604203343391,0.709426641464233,0.694044709205627,-0.122539132833481\n             ,0.749488353729248,0.646310150623322,-0.143354311585426,0.694885969161987,0.706955552101135,-0.131709426641464\n             ,0.676984488964081,0.720325291156769,-0.15107424557209,0.74595445394516,0.638815522193909,-0.188326209783554\n             ,0.733190476894379,0.653582632541656,-0.187780305743217,0.727223694324493,0.663318991661072,-0.176503792405128\n             ,0.749488353729248,0.646310150623322,-0.143354311585426,0.958362102508545,-0.256494760513306,0.125509008765221\n             ,0.794416069984436,-0.305554151535034,-0.524918794631958,0.74595445394516,0.638815522193909,-0.188326209783554\n             ,0.712908089160919,0.682124614715576,-0.162689983844757,0.694885969161987,0.706955552101135,-0.131709426641464\n             ,0.719630718231201,0.67299348115921,-0.170913383364677,0.834402143955231,0.550802052021027,0.0197512619197369\n             ,0.600557744503021,0.788931846618652,-0.130065008997917,0.694885969161987,0.706955552101135,-0.131709426641464\n             ,0.749488353729248,0.646310150623322,-0.143354311585426,0.727223694324493,0.663318991661072,-0.176503792405128\n             ,0.719630718231201,0.67299348115921,-0.170913383364677,0.749488353729248,0.646310150623322,-0.143354311585426\n             ,0.709426641464233,0.694044709205627,-0.122539132833481,0.712908089160919,0.682124614715576,-0.162689983844757\n             ,0.74595445394516,0.638815522193909,-0.188326209783554,0.794416069984436,-0.305554151535034,-0.524918794631958\n             ,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.733190476894379,0.653582632541656,-0.187780305743217\n             ,0.74595445394516,0.638815522193909,-0.188326209783554,0.864170670509338,0.408057361841202,-0.2944455742836,0.968974769115448\n             ,0.149661242961884,0.196696132421494,0.816485822200775,0.512709319591522,0.265480846166611,0.631004393100739\n             ,0.719356596469879,-0.29044708609581,0.359505623579025,0.919594645500183,-0.158434361219406,0.660223960876465\n             ,0.688790857791901,0.299451887607574,0.563141405582428,0.729207217693329,0.388752609491348,0.258335798978806\n             ,0.945306360721588,-0.199144557118416,0.47292697429657,0.876888990402222,0.0860569775104523,0.494772255420685\n             ,0.860163271427155,-0.123772226274014,0.669141590595245,0.742036402225494,-0.0403924956917763,0.667402267456055\n             ,0.744479417800903,-0.0180171187967062,0.359505623579025,0.919594645500183,-0.158434361219406,0.47292697429657\n             ,0.876888990402222,0.0860569775104523,0.667402267456055,0.744479417800903,-0.0180171187967062,0.631004393100739\n             ,0.719356596469879,-0.29044708609581,0.864170670509338,0.408057361841202,-0.2944455742836,0.631004393100739,0.719356596469879\n             ,-0.29044708609581,0.667402267456055,0.744479417800903,-0.0180171187967062,0.906549096107483,0.409386813640594\n             ,-0.10281577706337,0.600557744503021,0.788931846618652,-0.130065008997917,0.834402143955231,0.550802052021027\n             ,0.0197512619197369,0.968974769115448,0.149661242961884,0.196696132421494,0.864170670509338,0.408057361841202\n             ,-0.2944455742836,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.956566870212555,-0.244721978902817\n             ,-0.158401101827621,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.819103717803955,0.554178774356842\n             ,0.148171976208687,0.75202214717865,0.649503469467163,-0.112284608185291,0.972268581390381,0.233539223670959\n             ,0.0123813217505813,0.875641047954559,-0.338848143815994,0.34414342045784,0.939418137073517,0.146130084991455\n             ,-0.310063809156418,0.905861377716064,-0.279544115066528,0.318229824304581,0.923372685909271,0.289373397827148\n             ,-0.252281337976456,0.699552476406097,0.686574220657349,0.198096364736557,0.785714864730835,0.180998295545578\n             ,0.591516494750977,0.633913099765778,0.759061396121979,-0.14825627207756,0.69953316450119,0.693202435970306,-0.173562079668045\n             ,0.80286830663681,0.57996016740799,0.138016909360886,0.699552476406097,0.686574220657349,0.198096364736557,0.305637389421463\n             ,0.797388851642609,-0.520342946052551,0.397901266813278,0.642865896224976,-0.65452116727829,0.69953316450119\n             ,0.693202435970306,-0.173562079668045,0.633913099765778,0.759061396121979,-0.14825627207756,0.397901266813278\n             ,0.642865896224976,-0.65452116727829,0.305637389421463,0.797388851642609,-0.520342946052551,-0.13304828107357\n             ,0.622710764408112,-0.771057367324829,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.13304828107357\n             ,0.622710764408112,-0.771057367324829,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.153654128313065\n             ,0.571211874485016,-0.806292414665222,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.239434540271759\n             ,0.547067582607269,-0.80211478471756,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.192081272602081\n             ,0.0805686637759209,-0.978066205978394,-0.160101562738419,0.546482741832733,-0.822024405002594,0.921413123607636\n             ,-0.245974183082581,0.300823181867599,0.905861377716064,-0.279544115066528,0.318229824304581,0.785714864730835\n             ,0.180998295545578,0.591516494750977,0.957429826259613,0.286321878433228,0.0367136411368847,0.699552476406097\n             ,0.686574220657349,0.198096364736557,0.80286830663681,0.57996016740799,0.138016909360886,0.957429826259613,0.286321878433228\n             ,0.0367136411368847,0.785714864730835,0.180998295545578,0.591516494750977,-0.723107695579529,0.620889544487,0.302673906087875\n             ,-0.613772094249725,0.718873798847198,0.326349943876266,-0.596384108066559,0.73188179731369,0.329658985137939\n             ,-0.738506555557251,0.594659924507141,0.317785561084747,-0.878546297550201,0.378490209579468,0.291378676891327\n             ,-0.855198562145233,0.434895634651184,0.281959563493729,-0.723107695579529,0.620889544487,0.302673906087875,-0.738506555557251\n             ,0.594659924507141,0.317785561084747,-0.908547103404999,0.339473843574524,0.243515312671661,-0.855198562145233\n             ,0.434895634651184,0.281959563493729,-0.878546297550201,0.378490209579468,0.291378676891327,-0.797426640987396\n             ,0.177673250436783,0.576665341854095,-0.797426640987396,0.177673250436783,0.576665341854095,-0.543871939182281\n             ,-0.524204313755035,0.655296266078949,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.908547103404999\n             ,0.339473843574524,0.243515312671661,-0.494092434644699,0.0352621860802174,0.868693947792053,-0.599660336971283\n             ,0.629722774028778,0.493818551301956,-0.970878839492798,0.173829272389412,0.164856299757957,-0.633758366107941\n             ,-0.479114800691605,0.607288539409637,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.996930718421936\n             ,0.0329507254064083,0.0710170492529869,-0.910823285579681,0.270006507635117,0.312245815992355,-0.807652175426483\n             ,0.443565607070923,0.388519644737244,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.525695741176605\n             ,0.742150485515594,-0.415760308504105,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.390601694583893\n             ,0.504609107971191,-0.769935011863709,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.525695741176605\n             ,0.742150485515594,-0.415760308504105,-0.723603487014771,0.683223187923431,0.098000094294548,-0.859436213970184\n             ,0.509185254573822,0.04582304880023,-0.65424633026123,0.624168395996094,0.42705449461937,-0.599660336971283,0.629722774028778\n             ,0.493818551301956,-0.807652175426483,0.443565607070923,0.388519644737244,-0.762878954410553,0.502556443214417\n             ,0.40675875544548,-0.599660336971283,0.629722774028778,0.493818551301956,-0.494092434644699,0.0352621860802174\n             ,0.868693947792053,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.807652175426483,0.443565607070923\n             ,0.388519644737244,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.655400156974792,-0.538768410682678\n             ,0.529319524765015,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.494092434644699,0.0352621860802174\n             ,0.868693947792053,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.079451210796833,0.574800968170166\n             ,-0.814427018165588,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.192081272602081,0.0805686637759209\n             ,-0.978066205978394,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.079451210796833,0.574800968170166\n             ,-0.814427018165588,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.153654128313065,0.571211874485016\n             ,-0.806292414665222,0.414378970861435,-0.480131238698959,0.773152053356171,-0.47402635216713,-0.576445937156677\n             ,0.665589272975922,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.628591358661652,-0.444956004619598\n             ,-0.637876987457275,0.0517410226166248,-0.448791861534119,-0.892137169837952,0.768725872039795,-0.625621736049652\n             ,-0.132883325219154,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.663442015647888,-0.730678915977478\n             ,-0.161099418997765,-0.165543153882027,-0.540198087692261,-0.825094819068909,0.348949402570724,-0.852244853973389\n             ,0.389760226011276,-0.3234041929245,-0.738465428352356,0.591674447059631,0.620603084564209,-0.695841789245605\n             ,-0.361463725566864,-0.343847513198853,-0.196072369813919,0.918327033519745,-0.610171139240265,-0.773055195808411\n             ,0.173426955938339,0.314525902271271,-0.770808696746826,-0.554010331630707,0.545981824398041,-0.584509074687958\n             ,0.600210785865784,0.0837007611989975,-0.567488670349121,0.819115877151489,-0.668955087661743,-0.737109065055847\n             ,-0.0957564637064934,0.623615741729736,-0.765475749969482,-0.158588528633118,-0.598684787750244,-0.729470372200012\n             ,-0.330831557512283,-0.301147669553757,-0.68056708574295,0.667935967445374,-0.124663934111595,-0.874086141586304\n             ,0.469502240419388,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.798132300376892,-0.595748007297516\n             ,0.0898283571004868,0.885131120681763,0.0417929887771606,-0.463461130857468,0.94776064157486,-0.269029140472412\n             ,-0.171385690569878,0.810118317604065,-0.284595668315887,-0.51255601644516,-0.627128541469574,0.0574355758726597\n             ,-0.776795268058777,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.648241400718689,-0.506932020187378\n             ,-0.568157553672791,-0.0855747610330582,-0.285937398672104,-0.954419612884521,-0.969612717628479,0.0529158711433411\n             ,0.238853633403778,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.918069899082184,-0.187107101082802\n             ,0.349483251571655,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.47402635216713,-0.576445937156677\n             ,0.665589272975922,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.999210119247437,0.0289651956409216\n             ,-0.0272048581391573,0.647232055664063,0.709673702716827,-0.278305619955063,0.702042996883392,0.707515120506287\n             ,-0.0809817835688591,0.94776064157486,-0.269029140472412,-0.171385690569878,0.885131120681763,0.0417929887771606\n             ,-0.463461130857468,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.627128541469574,0.0574355758726597\n             ,-0.776795268058777,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.1213503703475,0.714234888553619\n             ,-0.689305901527405,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.543871939182281,-0.524204313755035\n             ,0.655296266078949,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.655400156974792,-0.538768410682678\n             ,0.529319524765015,-0.970878839492798,0.173829272389412,0.164856299757957,-0.975513935089111,-0.202585533261299\n             ,0.085625521838665,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.633758366107941,-0.479114800691605\n             ,0.607288539409637,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.627380669116974,0.542527735233307\n             ,-0.558620691299438,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.906325161457062,0.416019886732101\n             ,-0.074176587164402,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.079451210796833,0.574800968170166\n             ,-0.814427018165588,-0.627380669116974,0.542527735233307,-0.558620691299438,-0.627528488636017,0.574077665805817\n             ,-0.525968492031097,-0.153654128313065,0.571211874485016,-0.806292414665222,-0.128622829914093,0.604616820812225\n             ,-0.786062777042389,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.154303342103958,0.42424476146698\n             ,-0.892304241657257,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.239434540271759,0.547067582607269\n             ,-0.80211478471756,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.153654128313065,0.571211874485016\n             ,-0.806292414665222,0.393562316894531,0.580699145793915,-0.71266907453537,0.430813550949097,0.499041706323624\n             ,-0.751902282238007,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.193036198616028,0.594731986522675\n             ,-0.780404329299927,0.430813550949097,0.499041706323624,-0.751902282238007,0.393562316894531,0.580699145793915\n             ,-0.71266907453537,0.800276219844818,0.427209228277206,-0.420773357152939,0.828168988227844,0.353571265935898\n             ,-0.434883326292038,0.905861377716064,-0.279544115066528,0.318229824304581,0.858353197574615,-0.409084677696228\n             ,0.309644132852554,0.936574637889862,0.00382779608480632,-0.350447237491608,0.923372685909271,0.289373397827148\n             ,-0.252281337976456,0.875641047954559,-0.338848143815994,0.34414342045784,0.858353197574615,-0.409084677696228\n             ,0.309644132852554,0.905861377716064,-0.279544115066528,0.318229824304581,0.921413123607636,-0.245974183082581\n             ,0.300823181867599,0.875641047954559,-0.338848143815994,0.34414342045784,0.921413123607636,-0.245974183082581\n             ,0.300823181867599,0.906213641166687,0.328242212533951,-0.266521811485291,0.939418137073517,0.146130084991455\n             ,-0.310063809156418,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.918069899082184,-0.187107101082802\n             ,0.349483251571655,-0.613772094249725,0.718873798847198,0.326349943876266,-0.63234806060791,0.720907807350159\n             ,0.283598214387894,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.432219624519348,0.0896197631955147\n             ,-0.897303998470306,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.633863687515259,0.397778928279877\n             ,-0.663316428661346,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.626530051231384,-0.095443420112133\n             ,-0.773531317710876,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.971036195755005,0.0917746424674988\n             ,-0.220604136586189,0.458068341016769,-0.324115723371506,-0.827721178531647,0.272203177213669,0.658502519130707\n             ,-0.701626539230347,-0.122567981481552,0.664539813995361,-0.737132251262665,0.0359749346971512,-0.262611299753189\n             ,-0.964230835437775,0.656110465526581,0.732090950012207,-0.183199197053909,0.331649243831635,0.794523119926453\n             ,-0.508666634559631,0.0896634757518768,0.986824929714203,-0.134673669934273,0.308493763208389,0.950873613357544\n             ,0.0259031727910042,0.57691216468811,0.718079447746277,0.389273971319199,0.664968013763428,0.745313882827759\n             ,0.0482159033417702,0.392663985490799,0.918741226196289,-0.0415881127119064,-0.320559352636337,0.729658544063568\n             ,0.604019939899445,-0.311181366443634,0.925608515739441,0.215441450476646,-0.614538252353668,0.667141258716583\n             ,0.421028852462769,0.706917345523834,-0.10402026027441,0.699605345726013,0.599858105182648,0.75833523273468,0.255142837762833\n             ,0.814850926399231,-0.0293116569519043,0.57892906665802,-0.941741049289703,0.11614803224802,0.315647661685944\n             ,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.991389513015747,-0.125117510557175,0.038632795214653\n             ,0.861413061618805,0.450139224529266,0.23524908721447,0.652578055858612,-0.0296747293323278,0.757140219211578\n             ,0.659538865089417,0.541105449199677,0.521740734577179,0.861413061618805,0.450139224529266,0.23524908721447,0.837489545345306\n             ,-0.137019574642181,0.528996109962463,0.652578055858612,-0.0296747293323278,0.757140219211578,0.957429826259613\n             ,0.286321878433228,0.0367136411368847,0.929460346698761,0.351613759994507,-0.111674785614014,0.909856855869293\n             ,0.391187816858292,0.138320595026016,0.559431314468384,0.828812599182129,0.0103096608072519,0.410511314868927\n             ,0.907221972942352,0.0918079540133476,0.392663985490799,0.918741226196289,-0.0415881127119064,0.912856459617615\n             ,-0.241107016801834,0.329485177993774,0.752064108848572,0.658552646636963,-0.0266083907335997,0.970349192619324\n             ,-0.239411205053329,0.0332370884716511,0.906213641166687,0.328242212533951,-0.266521811485291,0.921413123607636\n             ,-0.245974183082581,0.300823181867599,0.957429826259613,0.286321878433228,0.0367136411368847,0.858353197574615\n             ,-0.409084677696228,0.309644132852554,0.972268581390381,0.233539223670959,0.0123813217505813,0.936574637889862\n             ,0.00382779608480632,-0.350447237491608,0.15803250670433,0.792331993579865,0.589267194271088,0.306766599416733\n             ,-0.118459150195122,0.944384276866913,0.181094169616699,-0.00969368312507868,0.983417987823486,-0.819103717803955\n             ,0.554178774356842,0.148171976208687,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.939882695674896\n             ,-0.341330021619797,0.0106942849233747,-0.748181462287903,0.587628781795502,0.308085918426514,-0.665187239646912\n             ,-0.279087424278259,0.692557692527771,-0.812849164009094,-0.351107835769653,0.46475750207901,0.47292697429657\n             ,0.876888990402222,0.0860569775104523,0.258335798978806,0.945306360721588,-0.199144557118416,0.494772255420685\n             ,0.860163271427155,-0.123772226274014,-0.158630818128586,0.588066816329956,0.793103873729706,-0.229550525546074\n             ,0.57556563615799,0.784876227378845,-0.413429826498032,0.428489029407501,0.803413331508636,-0.520070433616638\n             ,0.75630134344101,0.396906822919846,-0.522960901260376,0.842813611030579,-0.127189248800278,-0.158630818128586\n             ,0.588066816329956,0.793103873729706,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.968974769115448\n             ,0.149661242961884,0.196696132421494,0.834402143955231,0.550802052021027,0.0197512619197369,0.891577959060669\n             ,0.451291143894196,-0.0377500578761101,0.669141590595245,0.742036402225494,-0.0403924956917763,0.647329449653625\n             ,0.721940755844116,-0.244471147656441,-0.980522751808167,0.123100936412811,0.153040006756783,-0.916947364807129\n             ,0.362371772527695,0.167015537619591,-0.962031662464142,0.166659042239189,0.216147810220718,-0.780855476856232\n             ,0.547496676445007,0.300852298736572,-0.505573391914368,0.856702506542206,0.102256529033184,-0.894985496997833\n             ,0.383079677820206,0.228584602475166,-0.894985496997833,0.383079677820206,0.228584602475166,-0.505573391914368\n             ,0.856702506542206,0.102256529033184,-0.76461535692215,0.640312731266022,0.0732325837016106,0.891577959060669\n             ,0.451291143894196,-0.0377500578761101,0.740322411060333,0.655164897441864,-0.150604203343391,0.906549096107483\n             ,0.409386813640594,-0.10281577706337,0.359505623579025,0.919594645500183,-0.158434361219406,0.258335798978806\n             ,0.945306360721588,-0.199144557118416,0.47292697429657,0.876888990402222,0.0860569775104523,0.957429826259613\n             ,0.286321878433228,0.0367136411368847,0.80286830663681,0.57996016740799,0.138016909360886,0.929460346698761,0.351613759994507\n             ,-0.111674785614014,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.324593514204025,0.0331906899809837\n             ,-0.945271074771881,-0.177267998456955,0.365929782390594,-0.913603544235229,0.972268581390381,0.233539223670959\n             ,0.0123813217505813,0.858353197574615,-0.409084677696228,0.309644132852554,0.875641047954559,-0.338848143815994\n             ,0.34414342045784,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.596384108066559,0.73188179731369\n             ,0.329658985137939,-0.613772094249725,0.718873798847198,0.326349943876266,-0.592115700244904,-0.487801969051361\n             ,0.64144229888916,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.797426640987396,0.177673250436783\n             ,0.576665341854095,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.0525061003863811,0.0318809561431408\n             ,-0.998111546039581,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.970878839492798,0.173829272389412\n             ,0.164856299757957,-0.93314254283905,0.297381490468979,0.20201313495636,-0.947628021240234,0.25655260682106,0.190215468406677\n             ,0.800276219844818,0.427209228277206,-0.420773357152939,0.923372685909271,0.289373397827148,-0.252281337976456\n             ,0.828168988227844,0.353571265935898,-0.434883326292038,0.906213641166687,0.328242212533951,-0.266521811485291\n             ,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.939418137073517,0.146130084991455,-0.310063809156418\n             ,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.592115700244904,-0.487801969051361,0.64144229888916\n             ,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.993199586868286,-4.69008500658674e-006,0.116424031555653\n             ,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.914847791194916,-0.403779864311218,0.00391686055809259\n             ,-0.267860978841782,0.938322484493256,-0.218635410070419,-0.149676010012627,0.966881930828094,-0.206727981567383\n             ,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.342631131410599,0.695380508899689,-0.631703972816467\n             ,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.00497461529448628,0.164960891008377,-0.986287593841553\n             ,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.342631131410599,0.695380508899689,-0.631703972816467\n             ,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.00533877313137054,0.0413248650729656,-0.999131500720978\n             ,-0.433557718992233,-0.0273692850023508,-0.900710046291351,-0.377974569797516,-0.0538287982344627,-0.924249827861786\n             ,-0.00533877313137054,0.0413248650729656,-0.999131500720978,0.0723040029406548,-0.562818944454193,-0.823411762714386\n             ,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.433557718992233,-0.0273692850023508,-0.900710046291351\n             ,0.0723040029406548,-0.562818944454193,-0.823411762714386,0.0359749346971512,-0.262611299753189,-0.964230835437775\n             ,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.282903432846069,-0.614905774593353,-0.73610907793045\n             ,0.0359749346971512,-0.262611299753189,-0.964230835437775,-0.122567981481552,0.664539813995361,-0.737132251262665\n             ,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.383173704147339,-0.262150138616562,-0.885694742202759\n             ,-0.122567981481552,0.664539813995361,-0.737132251262665,-0.180025935173035,0.229685723781586,-0.956470131874084\n             ,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.398143172264099,0.565787076950073,-0.722057461738586\n             ,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.390601694583893,0.504609107971191,-0.769935011863709\n             ,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.180025935173035,0.229685723781586,-0.956470131874084\n             ,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.390601694583893,0.504609107971191,-0.769935011863709\n             ,-0.154303342103958,0.42424476146698,-0.892304241657257,0.995019972324371,0.0198635533452034,0.0976764634251595\n             ,0.97600269317627,0.13745604455471,0.168892234563828,0.85029935836792,0.0502043291926384,0.523899376392365,0.878947734832764\n             ,-0.0450414381921291,0.474786430597305,0.668019592761993,-0.146763533353806,0.729527413845062,0.878947734832764\n             ,-0.0450414381921291,0.474786430597305,0.85029935836792,0.0502043291926384,0.523899376392365,0.652125597000122\n             ,-0.00108946568798274,0.758110165596008,0.147625222802162,-0.322124987840652,0.935116171836853,0.668019592761993\n             ,-0.146763533353806,0.729527413845062,0.652125597000122,-0.00108946568798274,0.758110165596008,0.141524657607079\n             ,-0.0639704838395119,0.987865626811981,0.147625222802162,-0.322124987840652,0.935116171836853,0.141524657607079\n             ,-0.0639704838395119,0.987865626811981,-0.538123428821564,-0.0776136741042137,0.839285016059875,-0.503679633140564\n             ,-0.333046585321426,0.797111511230469,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.761611342430115\n             ,-0.261901050806046,0.592752873897552,-0.503679633140564,-0.333046585321426,0.797111511230469,-0.538123428821564\n             ,-0.0776136741042137,0.839285016059875,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.761611342430115\n             ,-0.261901050806046,0.592752873897552,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.961548864841461\n             ,-0.0192971937358379,0.273955136537552,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.961548864841461\n             ,-0.0192971937358379,0.273955136537552,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.941822648048401\n             ,-0.153352990746498,-0.29908686876297,0.505583882331848,0.0150260468944907,-0.862646579742432,0.522813856601715\n             ,0.179267287254334,-0.833384037017822,0.886800289154053,0.175987064838409,-0.427333384752274,0.853118479251862\n             ,0.0149601250886917,-0.521502673625946,0.522813856601715,0.179267287254334,-0.833384037017822,0.505583882331848\n             ,0.0150260468944907,-0.862646579742432,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.00497461529448628\n             ,0.164960891008377,-0.986287593841553,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.00497461529448628\n             ,0.164960891008377,-0.986287593841553,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.377974569797516\n             ,-0.0538287982344627,-0.924249827861786,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.341541200876236\n             ,0.100330114364624,-0.934496402740479,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.707946956157684\n             ,-0.166302591562271,-0.686406970024109,0.903742134571075,0.0408325865864754,0.426125437021255,0.99804013967514\n             ,0.0525208227336407,0.0340210981667042,0.995019972324371,0.0198635533452034,0.0976764634251595,0.878947734832764\n             ,-0.0450414381921291,0.474786430597305,0.668019592761993,-0.146763533353806,0.729527413845062,0.697896838188171\n             ,0.111968606710434,0.707391738891602,0.903742134571075,0.0408325865864754,0.426125437021255,0.878947734832764\n             ,-0.0450414381921291,0.474786430597305,0.713874757289886,0.186937391757965,-0.674860894680023,0.482705801725388\n             ,0.267842918634415,-0.833819687366486,0.932169795036316,0.263871729373932,-0.24785327911377,0.949256718158722\n             ,0.266638696193695,-0.166779711842537,0.482705801725388,0.267842918634415,-0.833819687366486,0.713874757289886\n             ,0.186937391757965,-0.674860894680023,-0.505279898643494,-0.213028356432915,-0.836248219013214,0.244611874222755\n             ,0.194429770112038,-0.949927449226379,0.929460346698761,0.351613759994507,-0.111674785614014,0.80286830663681\n             ,0.57996016740799,0.138016909360886,0.837489545345306,-0.137019574642181,0.528996109962463,0.861413061618805\n             ,0.450139224529266,0.23524908721447,0.389561533927917,-0.19174836575985,0.900818705558777,0.407288730144501,0.570921003818512\n             ,0.712857067584991,0.659538865089417,0.541105449199677,0.521740734577179,0.652578055858612,-0.0296747293323278\n             ,0.757140219211578,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.187374100089073,0.574305176734924\n             ,0.796909391880035,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.993199586868286,-4.69008500658674e-006\n             ,0.116424031555653,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.846594870090485,-0.529065132141113\n             ,0.0580275692045689,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.914847791194916,-0.403779864311218\n             ,0.00391686055809259,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.971036195755005,0.0917746424674988\n             ,-0.220604136586189,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.762878954410553,0.502556443214417\n             ,0.40675875544548,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.886820614337921,-0.356388121843338\n             ,-0.294171214103699,-0.859436213970184,0.509185254573822,0.04582304880023,-0.723603487014771,0.683223187923431\n             ,0.098000094294548,-0.65424633026123,0.624168395996094,0.42705449461937,-0.762878954410553,0.502556443214417\n             ,0.40675875544548,-0.859436213970184,0.509185254573822,0.04582304880023,-0.723603487014771,0.683223187923431\n             ,0.098000094294548,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.93314254283905,0.297381490468979\n             ,0.20201313495636,-0.65424633026123,0.624168395996094,0.42705449461937,-0.947628021240234,0.25655260682106,0.190215468406677\n             ,-0.93314254283905,0.297381490468979,0.20201313495636,-0.906325161457062,0.416019886732101,-0.074176587164402\n             ,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.926415205001831,0.366669058799744,-0.0854909643530846\n             ,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.981737494468689,-0.183587089180946,0.0498724691569805\n             ,-0.947628021240234,0.25655260682106,0.190215468406677,-0.809561967849731,0.578427612781525,-0.10015495121479\n             ,-0.870848000049591,0.464649707078934,0.160388261079788,-0.981737494468689,-0.183587089180946,0.0498724691569805\n             ,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.809561967849731,0.578427612781525,-0.10015495121479\n             ,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.793782532215118,0.557114601135254,0.243993073701859\n             ,-0.870848000049591,0.464649707078934,0.160388261079788,-0.711231410503387,0.702188730239868,-0.0328762196004391\n             ,-0.713916778564453,0.653736412525177,0.250901401042938,-0.793782532215118,0.557114601135254,0.243993073701859\n             ,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.63234806060791,0.720907807350159,0.283598214387894\n             ,-0.713916778564453,0.653736412525177,0.250901401042938,-0.711231410503387,0.702188730239868,-0.0328762196004391\n             ,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.999210119247437,0.0289651956409216,-0.0272048581391573\n             ,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.63234806060791,0.720907807350159,0.283598214387894\n             ,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.999210119247437,0.0289651956409216,-0.0272048581391573\n             ,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.964107573032379,-0.248898640275002,-0.0924450159072876\n             ,-0.969612717628479,0.0529158711433411,0.238853633403778,0.479293167591095,-0.284916758537292,-0.830120801925659\n             ,0.383484452962875,-0.102838270366192,-0.917803883552551,0.944391191005707,-0.0824342668056488,-0.318323493003845\n             ,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.383484452962875,-0.102838270366192,-0.917803883552551\n             ,0.382079660892487,0.0211679134517908,-0.923886954784393,0.698255121707916,-0.555874645709991,-0.451046764850616\n             ,0.944391191005707,-0.0824342668056488,-0.318323493003845,0.828753769397736,-0.00401723757386208,0.559598922729492\n             ,0.650361001491547,-0.274446427822113,0.708314716815948,0.587613701820374,-0.80407178401947,0.0904358923435211\n             ,0.653040647506714,-0.484619528055191,-0.581963717937469,0.828753769397736,-0.00401723757386208,0.559598922729492\n             ,0.653040647506714,-0.484619528055191,-0.581963717937469,0.479293167591095,-0.284916758537292,-0.830120801925659\n             ,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.812033891677856,-0.31945663690567,0.488414198160172\n             ,-0.1181396022439,-0.72886723279953,0.674385368824005,0.583520710468292,-0.523498058319092,0.620848894119263\n             ,0.812033891677856,-0.31945663690567,0.488414198160172,0.964972972869873,-0.0338397771120071,-0.260157763957977\n             ,0.944391191005707,-0.0824342668056488,-0.318323493003845,-0.0390606410801411,-0.798295676708221,-0.600997745990753\n             ,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.867540001869202,-0.488967150449753,-0.0910245105624199\n             ,0.698255121707916,-0.555874645709991,-0.451046764850616,0.944391191005707,-0.0824342668056488,-0.318323493003845\n             ,0.698255121707916,-0.555874645709991,-0.451046764850616,-0.1181396022439,-0.72886723279953,0.674385368824005\n             ,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.993199586868286,-4.69008500658674e-006,0.116424031555653\n             ,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.751028060913086,-0.474978417158127,-0.458641856908798\n             ,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.202261313796043,-0.191956117749214,0.960334956645966\n             ,-0.332680583000183,-0.441110253334045,0.833513855934143,-0.202261313796043,-0.191956117749214,0.960334956645966\n             ,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.0923527628183365,-0.948987364768982,0.301486223936081\n             ,0.201128974556923,-0.41152036190033,0.888930916786194,-0.332680583000183,-0.441110253334045,0.833513855934143\n             ,0.837489545345306,-0.137019574642181,0.528996109962463,0.244611874222755,0.194429770112038,-0.949927449226379\n             ,-0.505279898643494,-0.213028356432915,-0.836248219013214,-0.751028060913086,-0.474978417158127,-0.458641856908798\n             ,-0.1181396022439,-0.72886723279953,0.674385368824005,0.698255121707916,-0.555874645709991,-0.451046764850616\n             ,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.871833384037018,0.0184007696807384,0.489456802606583\n             ,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.928275108337402,-0.108704075217247,0.35565248131752\n             ,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.938030481338501,-0.164544627070427,-0.304998099803925\n             ,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.909544348716736,-0.0496344491839409,0.412632405757904\n             ,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.934698820114136,0.0468888208270073,-0.352334499359131\n             ,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.0390606410801411,-0.798295676708221,-0.600997745990753\n             ,0.382079660892487,0.0211679134517908,-0.923886954784393,0.698255121707916,-0.555874645709991,-0.451046764850616\n             ,0.382079660892487,0.0211679134517908,-0.923886954784393,-0.0390606410801411,-0.798295676708221,-0.600997745990753\n             ,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.928847432136536,0.162273854017258,0.333030939102173\n             ,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.928847432136536,0.162273854017258,0.333030939102173\n             ,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.969194948673248,0.11662120372057,0.21693454682827\n             ,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.928847432136536,0.162273854017258,0.333030939102173\n             ,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.305967152118683,-0.302397131919861,0.902740299701691\n             ,-0.714491605758667,0.14225697517395,0.685028970241547,-0.161164477467537,-0.331503093242645,0.929586827754974\n             ,-0.714491605758667,0.14225697517395,0.685028970241547,-0.305967152118683,-0.302397131919861,0.902740299701691\n             ,-0.709949254989624,0.60140985250473,0.366439938545227,-0.785880029201508,0.614527881145477,-0.0689065307378769\n             ,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.961548864841461,-0.0192971937358379,0.273955136537552\n             ,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.462400823831558,0.884378015995026,0.0637255012989044\n             ,-0.404175013303757,0.903538525104523,-0.142339885234833,-0.632241010665894,0.646320343017578,-0.427248448133469\n             ,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.733689248561859,-0.00598060339689255,-0.679458796977997\n             ,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.785880029201508,0.614527881145477,-0.0689065307378769\n             ,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.707946956157684,-0.166302591562271,-0.686406970024109\n             ,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.967416822910309,-0.0268912296742201,-0.251756906509399\n             ,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.711754858493805,-0.136520877480507,-0.689033389091492\n             ,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.941822648048401,-0.153352990746498,-0.29908686876297\n             ,-0.711754858493805,-0.136520877480507,-0.689033389091492,-0.471586525440216,-0.672621071338654,-0.570251703262329\n             ,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.82076495885849,-0.278661072254181,-0.498691141605377\n             ,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.642501175403595,-0.273710697889328,-0.715733766555786\n             ,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.433943778276443,-0.801411330699921,-0.411621987819672\n             ,0.683504700660706,0.663010776042938,0.305349051952362,0.722103536128998,0.687273919582367,0.0788736194372177\n             ,0.343125909566879,0.914759755134583,0.213258594274521,0.258648008108139,0.909015238285065,0.326791137456894\n             ,0.683504700660706,0.663010776042938,0.305349051952362,0.97600269317627,0.13745604455471,0.168892234563828,0.973912060260773\n             ,0.184168219566345,-0.132579684257507,0.722103536128998,0.687273919582367,0.0788736194372177,0.970708966255188\n             ,0.0394216887652874,-0.237002193927765,0.973912060260773,0.184168219566345,-0.132579684257507,0.97600269317627\n             ,0.13745604455471,0.168892234563828,0.995019972324371,0.0198635533452034,0.0976764634251595,0.946598649024963\n             ,0.101268604397774,-0.306097507476807,0.970708966255188,0.0394216887652874,-0.237002193927765,0.995019972324371\n             ,0.0198635533452034,0.0976764634251595,0.99804013967514,0.0525208227336407,0.0340210981667042,0.923067450523376\n             ,0.21886146068573,-0.316300749778748,0.946598649024963,0.101268604397774,-0.306097507476807,0.99804013967514\n             ,0.0525208227336407,0.0340210981667042,0.990444839000702,0.137596189975739,-0.00929253362119198,0.932169795036316\n             ,0.263871729373932,-0.24785327911377,0.923067450523376,0.21886146068573,-0.316300749778748,0.990444839000702\n             ,0.137596189975739,-0.00929253362119198,0.967456996440887,0.251362919807434,-0.0290456917136908,0.949256718158722\n             ,0.266638696193695,-0.166779711842537,0.932169795036316,0.263871729373932,-0.24785327911377,0.967456996440887\n             ,0.251362919807434,-0.0290456917136908,0.9481241106987,0.313342481851578,-0.053639143705368,0.937970161437988\n             ,0.291288256645203,-0.188050866127014,0.949256718158722,0.266638696193695,-0.166779711842537,0.9481241106987\n             ,0.313342481851578,-0.053639143705368,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.456334859132767\n             ,-0.263855904340744,0.849787354469299,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.152829229831696\n             ,-0.222570538520813,0.962863206863403,-0.602918326854706,0.515652418136597,0.608762681484222,-0.152829229831696\n             ,-0.222570538520813,0.962863206863403,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.910823285579681\n             ,0.270006507635117,0.312245815992355,0.343125909566879,0.914759755134583,0.213258594274521,0.722103536128998\n             ,0.687273919582367,0.0788736194372177,0.656110465526581,0.732090950012207,-0.183199197053909,0.308493763208389\n             ,0.950873613357544,0.0259031727910042,0.973912060260773,0.184168219566345,-0.132579684257507,0.886800289154053\n             ,0.175987064838409,-0.427333384752274,0.656110465526581,0.732090950012207,-0.183199197053909,0.722103536128998\n             ,0.687273919582367,0.0788736194372177,0.853118479251862,0.0149601250886917,-0.521502673625946,0.886800289154053\n             ,0.175987064838409,-0.427333384752274,0.973912060260773,0.184168219566345,-0.132579684257507,0.970708966255188\n             ,0.0394216887652874,-0.237002193927765,0.946598649024963,0.101268604397774,-0.306097507476807,0.805570960044861\n             ,0.0887085422873497,-0.585820972919464,0.853118479251862,0.0149601250886917,-0.521502673625946,0.970708966255188\n             ,0.0394216887652874,-0.237002193927765,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.941822648048401\n             ,-0.153352990746498,-0.29908686876297,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.928275108337402\n             ,-0.108704075217247,0.35565248131752,0.339781612157822,-0.868737816810608,0.360337436199188,0.295632928609848\n             ,-0.949930250644684,-0.101162008941174,-0.261420041322708,-0.954043209552765,0.146496221423149,-0.118260890245438\n             ,-0.832547545433044,0.541182935237885,0.306935548782349,-0.919691801071167,0.244862332940102,0.207801967859268\n             ,-0.930255472660065,-0.302395612001419,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.810173809528351\n             ,-0.314327657222748,0.494789302349091,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.991721987724304\n             ,-0.09873928129673,0.0820856168866158,-0.969194948673248,0.11662120372057,0.21693454682827,-0.953069984912872\n             ,0.0484387166798115,0.298849910497665,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.507440745830536\n             ,-0.861680686473846,0.00320725026540458,0.0959865897893906,-0.91358608007431,0.395154505968094,0.542883396148682\n             ,-0.82672655582428,-0.147651195526123,-0.314595848321915,-0.93869549036026,-0.140997022390366,-0.124663934111595\n             ,-0.874086141586304,0.469502240419388,0.339781612157822,-0.868737816810608,0.360337436199188,0.211911484599113\n             ,-0.951958835124969,-0.221060931682587,-0.124663934111595,-0.874086141586304,0.469502240419388,-0.192425131797791\n             ,-0.974552154541016,0.114980764687061,0.339781612157822,-0.868737816810608,0.360337436199188,-0.118260890245438\n             ,-0.832547545433044,0.541182935237885,-0.261420041322708,-0.954043209552765,0.146496221423149,0.207811132073402\n             ,-0.962575078010559,-0.173964589834213,0.400767505168915,-0.84773463010788,0.347464233636856,-0.23048010468483\n             ,-0.946770489215851,0.224732384085655,-0.389462172985077,-0.886311650276184,-0.250541120767593,0.201402872800827\n             ,-0.92625367641449,-0.318576484918594,0.362296313047409,-0.902348458766937,0.233470931649208,0.200983673334122\n             ,-0.912257730960846,-0.356919288635254,0.339713275432587,-0.937209665775299,0.0789491534233093,-0.18037211894989\n             ,-0.916134774684906,0.357998490333557,-0.326996743679047,-0.921505987644196,-0.209522947669029,0.200983673334122\n             ,-0.912257730960846,-0.356919288635254,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.148850679397583\n             ,-0.924228370189667,0.351632446050644,0.395999073982239,-0.883323311805725,0.250847846269608,-0.259535163640976\n             ,-0.932749211788177,0.250240743160248,0.323624908924103,-0.91464102268219,0.242278248071671,0.11251799762249\n             ,-0.874383747577667,-0.472009360790253,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.248996630311012\n             ,-0.917850255966187,0.309114128351212,0.323624908924103,-0.91464102268219,0.242278248071671,0.464242339134216\n             ,-0.872838377952576,-0.150440022349358,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.259815812110901\n             ,-0.928046464920044,-0.266881018877029,-0.149650141596794,-0.977229058742523,-0.150426745414734,-0.259535163640976\n             ,-0.932749211788177,0.250240743160248,0.303018242120743,-0.938679337501526,0.164502277970314,0.37071630358696\n             ,-0.925935029983521,-0.0722067281603813,-0.0855747610330582,-0.285937398672104,-0.954419612884521,-0.648241400718689\n             ,-0.506932020187378,-0.568157553672791,-0.262460768222809,-0.84521484375,0.465538620948792,0.407288730144501\n             ,0.570921003818512,0.712857067584991,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.187374100089073\n             ,0.574305176734924,0.796909391880035,0.90192449092865,0.307413011789322,0.303363531827927,0.899024188518524,0.213700130581856\n             ,0.382214337587357,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.97774213552475,-0.0699520856142044\n             ,-0.19780558347702,0.899024188518524,0.213700130581856,0.382214337587357,0.817979574203491,-0.0342949964106083\n             ,0.574224054813385,0.882815957069397,-0.369267553091049,0.290305823087692,0.955118477344513,-0.28173553943634\n             ,-0.0915084630250931,0.817979574203491,-0.0342949964106083,0.574224054813385,0.572269201278687,-0.327979475259781\n             ,0.751623213291168,0.665161728858948,0.0713187083601952,0.743285655975342,0.882815957069397,-0.369267553091049\n             ,0.290305823087692,0.761745095252991,0.0999165698885918,0.640125811100006,0.817979574203491,-0.0342949964106083\n             ,0.574224054813385,0.899024188518524,0.213700130581856,0.382214337587357,0.857412695884705,0.318779200315475\n             ,0.404009103775024,0.516816318035126,-0.0720634460449219,0.85305792093277,0.572269201278687,-0.327979475259781\n             ,0.751623213291168,0.817979574203491,-0.0342949964106083,0.574224054813385,0.761745095252991,0.0999165698885918\n             ,0.640125811100006,0.208346754312515,-0.195467948913574,0.95832347869873,0.263325154781342,-0.487631261348724\n             ,0.832391500473022,0.572269201278687,-0.327979475259781,0.751623213291168,0.516816318035126,-0.0720634460449219\n             ,0.85305792093277,0.777440786361694,0.387861609458923,0.495125412940979,0.938613653182983,0.275698870420456,0.207351207733154\n             ,0.943840563297272,0.180788546800613,0.276551008224487,0.921807408332825,0.190687164664268,0.337504833936691\n             ,0.981701374053955,0.106130957603455,0.158109560608864,0.849806606769562,-0.0963085368275642,0.518221437931061\n             ,0.761745095252991,0.0999165698885918,0.640125811100006,0.857412695884705,0.318779200315475,0.404009103775024\n             ,0.849806606769562,-0.0963085368275642,0.518221437931061,0.56545478105545,-0.235293805599213,0.79050475358963\n             ,0.516816318035126,-0.0720634460449219,0.85305792093277,0.761745095252991,0.0999165698885918,0.640125811100006\n             ,0.56545478105545,-0.235293805599213,0.79050475358963,0.235414057970047,-0.349107831716537,0.907030284404755\n             ,0.208346754312515,-0.195467948913574,0.95832347869873,0.516816318035126,-0.0720634460449219,0.85305792093277\n             ,0.973640501499176,0.150164008140564,0.171682879328728,0.823427438735962,0.0464031770825386,0.565521001815796\n             ,0.849806606769562,-0.0963085368275642,0.518221437931061,0.981701374053955,0.106130957603455,0.158109560608864\n             ,0.823427438735962,0.0464031770825386,0.565521001815796,0.535846352577209,-0.072305366396904,0.841213762760162\n             ,0.56545478105545,-0.235293805599213,0.79050475358963,0.849806606769562,-0.0963085368275642,0.518221437931061\n             ,0.535846352577209,-0.072305366396904,0.841213762760162,0.199428960680962,-0.151153594255447,0.968184232711792\n             ,0.235414057970047,-0.349107831716537,0.907030284404755,0.56545478105545,-0.235293805599213,0.79050475358963\n             ,0.943840563297272,0.180788546800613,0.276551008224487,0.938613653182983,0.275698870420456,0.207351207733154\n             ,0.939432919025421,0.230844467878342,-0.253331035375595,0.932059586048126,0.251616179943085,-0.260680228471756\n             ,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.961426019668579,0.11484207212925,-0.249942690134048\n             ,0.938613653182983,0.275698870420456,0.207351207733154,0.90192449092865,0.307413011789322,0.303363531827927,0.857412695884705\n             ,0.318779200315475,0.404009103775024,0.899024188518524,0.213700130581856,0.382214337587357,0.90192449092865,0.307413011789322\n             ,0.303363531827927,0.777440786361694,0.387861609458923,0.495125412940979,0.981701374053955,0.106130957603455\n             ,0.158109560608864,0.857412695884705,0.318779200315475,0.404009103775024,0.777440786361694,0.387861609458923\n             ,0.495125412940979,0.921807408332825,0.190687164664268,0.337504833936691,0.970218658447266,-0.0381909385323524\n             ,0.239201232790947,0.837947964668274,0.531638920307159,-0.123301580548286,0.734350562095642,0.677913904190063\n             ,0.0340876169502735,0.938418209552765,0.0142068490386009,0.345209211111069,0.547434866428375,0.804429769515991\n             ,0.230668216943741,0.79800420999527,0.101907514035702,0.593973159790039,0.938418209552765,0.0142068490386009\n             ,0.345209211111069,0.734350562095642,0.677913904190063,0.0340876169502735,0.250951588153839,0.864162683486938\n             ,0.436172097921371,0.507640182971954,0.139722838997841,0.85016405582428,0.79800420999527,0.101907514035702,0.593973159790039\n             ,0.547434866428375,0.804429769515991,0.230668216943741,-0.0952283963561058,0.827900111675262,0.552732229232788\n             ,0.146060764789581,0.0914121642708778,0.985043168067932,0.507640182971954,0.139722838997841,0.85016405582428\n             ,0.250951588153839,0.864162683486938,0.436172097921371,0.793522596359253,-0.0159706063568592,0.608331143856049\n             ,0.937215089797974,-0.0726325064897537,0.341104626655579,0.938418209552765,0.0142068490386009,0.345209211111069\n             ,0.79800420999527,0.101907514035702,0.593973159790039,0.516034662723541,-0.0156709868460894,0.856424331665039\n             ,0.793522596359253,-0.0159706063568592,0.608331143856049,0.79800420999527,0.101907514035702,0.593973159790039\n             ,0.507640182971954,0.139722838997841,0.85016405582428,0.182312279939651,-0.0702581331133842,0.980727314949036\n             ,0.516034662723541,-0.0156709868460894,0.856424331665039,0.507640182971954,0.139722838997841,0.85016405582428\n             ,0.146060764789581,0.0914121642708778,0.985043168067932,0.95304924249649,0.093354158103466,0.288066178560257\n             ,0.970121920108795,0.115440391004086,0.213393971323967,0.987499356269836,0.0581452213227749,0.146506309509277\n             ,0.910413324832916,-0.164700835943222,0.379501283168793,0.793522596359253,-0.0159706063568592,0.608331143856049\n             ,0.799672067165375,0.218886733055115,0.559118211269379,0.952853143215179,0.227692276239395,0.200567096471787\n             ,0.937215089797974,-0.0726325064897537,0.341104626655579,0.516034662723541,-0.0156709868460894,0.856424331665039\n             ,0.508204519748688,0.144576266407967,0.849014639854431,0.799672067165375,0.218886733055115,0.559118211269379\n             ,0.793522596359253,-0.0159706063568592,0.608331143856049,0.182312279939651,-0.0702581331133842,0.980727314949036\n             ,0.149393752217293,0.076563760638237,0.985809028148651,0.508204519748688,0.144576266407967,0.849014639854431\n             ,0.516034662723541,-0.0156709868460894,0.856424331665039,0.799672067165375,0.218886733055115,0.559118211269379\n             ,0.823427438735962,0.0464031770825386,0.565521001815796,0.973640501499176,0.150164008140564,0.171682879328728\n             ,0.952853143215179,0.227692276239395,0.200567096471787,0.508204519748688,0.144576266407967,0.849014639854431\n             ,0.535846352577209,-0.072305366396904,0.841213762760162,0.823427438735962,0.0464031770825386,0.565521001815796\n             ,0.799672067165375,0.218886733055115,0.559118211269379,0.149393752217293,0.076563760638237,0.985809028148651\n             ,0.199428960680962,-0.151153594255447,0.968184232711792,0.535846352577209,-0.072305366396904,0.841213762760162\n             ,0.508204519748688,0.144576266407967,0.849014639854431,0.938012719154358,0.237205043435097,-0.252717018127441\n             ,0.987499356269836,0.0581452213227749,0.146506309509277,0.970121920108795,0.115440391004086,0.213393971323967\n             ,0.940755069255829,0.217000737786293,-0.260558247566223,0.987499356269836,0.0581452213227749,0.146506309509277\n             ,0.904506981372833,0.363091230392456,-0.223677977919579,0.837947964668274,0.531638920307159,-0.123301580548286\n             ,0.970218658447266,-0.0381909385323524,0.239201232790947,0.937215089797974,-0.0726325064897537,0.341104626655579\n             ,0.910413324832916,-0.164700835943222,0.379501283168793,0.970218658447266,-0.0381909385323524,0.239201232790947\n             ,0.938418209552765,0.0142068490386009,0.345209211111069,0.937215089797974,-0.0726325064897537,0.341104626655579\n             ,0.952853143215179,0.227692276239395,0.200567096471787,0.95304924249649,0.093354158103466,0.288066178560257,0.910413324832916\n             ,-0.164700835943222,0.379501283168793,0.95304924249649,0.093354158103466,0.288066178560257,0.948896646499634\n             ,0.107380241155624,0.296756833791733,0.960990369319916,0.131044924259186,0.24356672167778,0.970121920108795,0.115440391004086\n             ,0.213393971323967,0.943840563297272,0.180788546800613,0.276551008224487,0.932059586048126,0.251616179943085\n             ,-0.260680228471756,0.934666991233826,0.235346615314484,-0.26647624373436,0.960990369319916,0.131044924259186\n             ,0.24356672167778,0.934666991233826,0.235346615314484,-0.26647624373436,0.940755069255829,0.217000737786293,-0.260558247566223\n             ,0.970121920108795,0.115440391004086,0.213393971323967,0.960990369319916,0.131044924259186,0.24356672167778,0.960990369319916\n             ,0.131044924259186,0.24356672167778,0.948896646499634,0.107380241155624,0.296756833791733,0.921807408332825,0.190687164664268\n             ,0.337504833936691,0.943840563297272,0.180788546800613,0.276551008224487,-0.80164510011673,-0.0831164047122002\n             ,0.591993927955627,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.702580034732819,-0.699933290481567\n             ,0.128353402018547,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.401816695928574,-0.892981469631195\n             ,0.202799007296562,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.734745264053345,-0.160798713564873\n             ,0.659009218215942,-0.702580034732819,-0.699933290481567,0.128353402018547,0.026099681854248,-0.974704563617706\n             ,0.221968054771423,-0.10741464048624,-0.480259567499161,0.87052446603775,-0.503881514072418,-0.329790264368057\n             ,0.798336923122406,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.49835604429245,-0.197405397891998\n             ,0.844199240207672,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.734745264053345,-0.160798713564873\n             ,0.659009218215942,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.14765976369381,-0.247115641832352\n             ,0.957669258117676,-0.49835604429245,-0.197405397891998,0.844199240207672,-0.503881514072418,-0.329790264368057\n             ,0.798336923122406,-0.10741464048624,-0.480259567499161,0.87052446603775,0.208346754312515,-0.195467948913574\n             ,0.95832347869873,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.10741464048624,-0.480259567499161\n             ,0.87052446603775,0.263325154781342,-0.487631261348724,0.832391500473022,-0.75111985206604,-0.269361168146133\n             ,0.602713465690613,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.857911825180054,-0.151918008923531\n             ,0.490824013948441,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.49835604429245,-0.197405397891998\n             ,0.844199240207672,-0.540686428546906,-0.418503016233444,0.729735136032104,-0.806595921516418,-0.339085519313812\n             ,0.484173595905304,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.14765976369381,-0.247115641832352\n             ,0.957669258117676,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.540686428546906,-0.418503016233444\n             ,0.729735136032104,-0.49835604429245,-0.197405397891998,0.844199240207672,0.208346754312515,-0.195467948913574\n             ,0.95832347869873,0.235414057970047,-0.349107831716537,0.907030284404755,-0.155815601348877,-0.419202566146851\n             ,0.894421994686127,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.540686428546906,-0.418503016233444\n             ,0.729735136032104,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.822073340415955,-0.257045239210129\n             ,0.508058190345764,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.155815601348877,-0.419202566146851\n             ,0.894421994686127,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.566346526145935,-0.257577747106552\n             ,0.782882690429688,-0.540686428546906,-0.418503016233444,0.729735136032104,0.235414057970047,-0.349107831716537\n             ,0.907030284404755,0.199428960680962,-0.151153594255447,0.968184232711792,-0.190858513116837,-0.215845420956612\n             ,0.957592725753784,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.980304419994354,-0.197097584605217\n             ,-0.0124787287786603,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.808899223804474,-0.271904230117798\n             ,0.521296620368958,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.84135890007019,-0.538883864879608\n             ,0.041464950889349,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.857911825180054,-0.151918008923531\n             ,0.490824013948441,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.730372190475464,-0.0783009603619576\n             ,0.678546547889709,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.80164510011673,-0.0831164047122002\n             ,0.591993927955627,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.730372190475464,-0.0783009603619576\n             ,0.678546547889709,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.75111985206604,-0.269361168146133\n             ,0.602713465690613,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.733399271965027,-0.428732603788376\n             ,0.527554571628571,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.895388603210449,0.358975976705551\n             ,0.26346829533577,-0.972477912902832,0.193684712052345,0.12951023876667,-0.535216987133026,-0.203683137893677\n             ,0.819790184497833,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.442167282104492,0.71852970123291\n             ,0.536845564842224,-0.730377912521362,0.544562876224518,0.412309736013412,-0.224036976695061,-0.0279729403555393\n             ,0.974179148674011,0.146060764789581,0.0914121642708778,0.985043168067932,-0.0952283963561058,0.827900111675262\n             ,0.552732229232788,-0.442167282104492,0.71852970123291,0.536845564842224,-0.476952195167542,-0.30724024772644\n             ,0.823480427265167,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.695387840270996,-0.360292494297028\n             ,0.621791779994965,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.163414344191551,-0.171452105045319\n             ,0.971545159816742,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.535216987133026,-0.203683137893677\n             ,0.819790184497833,-0.476952195167542,-0.30724024772644,0.823480427265167,0.182312279939651,-0.0702581331133842\n             ,0.980727314949036,0.146060764789581,0.0914121642708778,0.985043168067932,-0.224036976695061,-0.0279729403555393\n             ,0.974179148674011,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.817899703979492,-0.355825662612915\n             ,0.452137291431427,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.754743993282318,-0.253586679697037\n             ,0.605025053024292,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.839219510555267,-0.174447998404503\n             ,0.515052020549774,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.476952195167542,-0.30724024772644\n             ,0.823480427265167,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.605567634105682,-0.0923453718423843\n             ,0.790417671203613,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.163414344191551,-0.171452105045319\n             ,0.971545159816742,-0.476952195167542,-0.30724024772644,0.823480427265167,-0.239489018917084,-0.00514746597036719\n             ,0.970885396003723,0.149393752217293,0.076563760638237,0.985809028148651,0.182312279939651,-0.0702581331133842\n             ,0.980727314949036,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.822073340415955,-0.257045239210129\n             ,0.508058190345764,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.605567634105682,-0.0923453718423843\n             ,0.790417671203613,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.566346526145935,-0.257577747106552\n             ,0.782882690429688,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.239489018917084,-0.00514746597036719\n             ,0.970885396003723,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.190858513116837,-0.215845420956612\n             ,0.957592725753784,0.199428960680962,-0.151153594255447,0.968184232711792,0.149393752217293,0.076563760638237\n             ,0.985809028148651,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.81458967924118,-0.243902236223221\n             ,0.526265501976013,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.983128547668457,-0.182582557201386\n             ,-0.011038308031857,-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.817899703979492,-0.355825662612915\n             ,0.452137291431427,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.972477912902832,0.193684712052345\n             ,0.12951023876667,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.658827900886536,-0.438512802124023\n             ,0.61127108335495,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.733399271965027,-0.428732603788376\n             ,0.527554571628571,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.754743993282318,-0.253586679697037\n             ,0.605025053024292,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.658827900886536,-0.438512802124023\n             ,0.61127108335495,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.981736660003662,-0.184043005108833\n             ,-0.0481799468398094,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.808899223804474,-0.271904230117798\n             ,0.521296620368958,-0.809050858020782,-0.2569739818573,0.528584063053131,-0.81458967924118,-0.243902236223221\n             ,0.526265501976013,-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.981736660003662,-0.184043005108833\n             ,-0.0481799468398094,-0.809050858020782,-0.2569739818573,0.528584063053131,0.955118477344513,-0.28173553943634\n             ,-0.0915084630250931,0.992223381996155,-0.121708244085312,0.0260738711804152,0.985335350036621,0.0123839350417256\n             ,-0.170178771018982,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.882815957069397,-0.369267553091049\n             ,0.290305823087692,0.903218030929565,-0.152758419513702,0.401076167821884,0.992223381996155,-0.121708244085312\n             ,0.0260738711804152,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.985335350036621,0.0123839350417256\n             ,-0.170178771018982,0.924062311649323,0.166339710354805,-0.344151109457016,0.961426019668579,0.11484207212925\n             ,-0.249942690134048,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.924062311649323,0.166339710354805\n             ,-0.344151109457016,0.798422634601593,0.345685362815857,-0.49297359585762,0.939432919025421,0.230844467878342\n             ,-0.253331035375595,0.961426019668579,0.11484207212925,-0.249942690134048,0.837947964668274,0.531638920307159\n             ,-0.123301580548286,0.843237340450287,0.525120317935944,-0.114888966083527,0.713566720485687,0.700178623199463\n             ,0.0239254627376795,0.734350562095642,0.677913904190063,0.0340876169502735,0.734350562095642,0.677913904190063\n             ,0.0340876169502735,0.713566720485687,0.700178623199463,0.0239254627376795,0.625909388065338,0.726224660873413\n             ,0.284315198659897,0.547434866428375,0.804429769515991,0.230668216943741,0.547434866428375,0.804429769515991\n             ,0.230668216943741,0.625909388065338,0.726224660873413,0.284315198659897,0.628335058689117,0.550278067588806\n             ,0.549899160861969,0.250951588153839,0.864162683486938,0.436172097921371,0.250951588153839,0.864162683486938\n             ,0.436172097921371,0.628335058689117,0.550278067588806,0.549899160861969,0.139649003744125,0.122624859213829\n             ,0.982578873634338,-0.0952283963561058,0.827900111675262,0.552732229232788,0.904506981372833,0.363091230392456\n             ,-0.223677977919579,0.87714958190918,0.359215557575226,-0.318704843521118,0.843237340450287,0.525120317935944\n             ,-0.114888966083527,0.837947964668274,0.531638920307159,-0.123301580548286,0.938012719154358,0.237205043435097\n             ,-0.252717018127441,0.868426561355591,0.2465450912714,-0.430175423622131,0.87714958190918,0.359215557575226,-0.318704843521118\n             ,0.904506981372833,0.363091230392456,-0.223677977919579,0.932059586048126,0.251616179943085,-0.260680228471756\n             ,0.796033978462219,0.30541729927063,-0.522541999816895,0.850903332233429,0.254371464252472,-0.459628790616989\n             ,0.934666991233826,0.235346615314484,-0.26647624373436,0.939432919025421,0.230844467878342,-0.253331035375595\n             ,0.798422634601593,0.345685362815857,-0.49297359585762,0.796033978462219,0.30541729927063,-0.522541999816895\n             ,0.932059586048126,0.251616179943085,-0.260680228471756,0.850903332233429,0.254371464252472,-0.459628790616989\n             ,0.863597810268402,0.181175544857979,-0.470504224300385,0.940755069255829,0.217000737786293,-0.260558247566223\n             ,0.934666991233826,0.235346615314484,-0.26647624373436,0.863597810268402,0.181175544857979,-0.470504224300385\n             ,0.868426561355591,0.2465450912714,-0.430175423622131,0.938012719154358,0.237205043435097,-0.252717018127441\n             ,0.940755069255829,0.217000737786293,-0.260558247566223,-0.84135890007019,-0.538883864879608,0.041464950889349\n             ,-0.680876314640045,-0.688694536685944,-0.249213308095932,-0.657594680786133,-0.753369987010956,0.00171860994305462\n             ,-0.702580034732819,-0.699933290481567,0.128353402018547,-0.702580034732819,-0.699933290481567,0.128353402018547\n             ,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.298704415559769,-0.948391199111938,0.106441475450993\n             ,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.401816695928574,-0.892981469631195,0.202799007296562\n             ,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.293226510286331,-0.722825050354004,0.625733315944672\n             ,0.026099681854248,-0.974704563617706,0.221968054771423,-0.933254837989807,-0.359125286340714,-0.00803146045655012\n             ,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.680876314640045,-0.688694536685944,-0.249213308095932\n             ,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.980304419994354,-0.197097584605217,-0.0124787287786603\n             ,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.846266686916351,-0.512883901596069,-0.144162610173225\n             ,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.895388603210449,0.358975976705551,0.26346829533577\n             ,-0.912629246711731,0.357585817575455,0.198091477155685,-0.964486479759216,0.261449635028839,0.0375484488904476\n             ,-0.972477912902832,0.193684712052345,0.12951023876667,-0.730377912521362,0.544562876224518,0.412309736013412\n             ,-0.750467360019684,0.503474771976471,0.428149402141571,-0.912629246711731,0.357585817575455,0.198091477155685\n             ,-0.895388603210449,0.358975976705551,0.26346829533577,-0.442167282104492,0.71852970123291,0.536845564842224\n             ,-0.644507586956024,0.336329728364944,0.686652958393097,-0.750467360019684,0.503474771976471,0.428149402141571\n             ,-0.730377912521362,0.544562876224518,0.412309736013412,-0.0952283963561058,0.827900111675262,0.552732229232788\n             ,0.139649003744125,0.122624859213829,0.982578873634338,-0.644507586956024,0.336329728364944,0.686652958393097\n             ,-0.442167282104492,0.71852970123291,0.536845564842224,-0.964486479759216,0.261449635028839,0.0375484488904476\n             ,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.999559104442596,-0.0023001697845757,0.0296011492609978\n             ,-0.972477912902832,0.193684712052345,0.12951023876667,-0.994358837604523,0.088942214846611,0.0577910803258419\n             ,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.983128547668457,-0.182582557201386,-0.011038308031857\n             ,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.978760063648224,-0.199930444359779,-0.0453491657972336\n             ,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.986363708972931,-0.161525458097458,-0.0315617434680462\n             ,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.979109942913055,-0.187053516507149,-0.0797165557742119\n             ,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.980304419994354,-0.197097584605217,-0.0124787287786603\n             ,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.976574420928955,-0.212938129901886,-0.0309790316969156\n             ,-0.961961030960083,-0.248708829283714,-0.113026410341263,-0.978760063648224,-0.199930444359779,-0.0453491657972336\n             ,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.983128547668457,-0.182582557201386,-0.011038308031857\n             ,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.961961030960083,-0.248708829283714,-0.113026410341263\n             ,-0.976574420928955,-0.212938129901886,-0.0309790316969156,0.90192449092865,0.307413011789322,0.303363531827927\n             ,0.938613653182983,0.275698870420456,0.207351207733154,0.777440786361694,0.387861609458923,0.495125412940979\n             ,0.938613653182983,0.275698870420456,0.207351207733154,0.961426019668579,0.11484207212925,-0.249942690134048\n             ,0.939432919025421,0.230844467878342,-0.253331035375595,0.970218658447266,-0.0381909385323524,0.239201232790947\n             ,0.910413324832916,-0.164700835943222,0.379501283168793,0.987499356269836,0.0581452213227749,0.146506309509277\n             ,0.987499356269836,0.0581452213227749,0.146506309509277,0.938012719154358,0.237205043435097,-0.252717018127441\n             ,0.904506981372833,0.363091230392456,-0.223677977919579,-0.80164510011673,-0.0831164047122002,0.591993927955627\n             ,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.857911825180054,-0.151918008923531,0.490824013948441\n             ,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.980304419994354,-0.197097584605217,-0.0124787287786603\n             ,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.733399271965027,-0.428732603788376,0.527554571628571\n             ,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.585005640983582,-0.507526874542236,0.632601678371429\n             ,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.999559104442596,-0.0023001697845757,0.0296011492609978\n             ,-0.983128547668457,-0.182582557201386,-0.011038308031857,0.633086621761322,-0.179429575800896,0.752998232841492\n             ,0.398782223463058,0.608129858970642,0.686404287815094,0.0181612763553858,0.599665701389313,0.800044476985931\n             ,0.268051654100418,-0.524244606494904,0.808279573917389,0.0315268374979496,0.564418375492096,0.824886620044708\n             ,-0.397260129451752,0.234844520688057,0.887148499488831,-0.414126962423325,0.480852067470551,0.772839069366455\n             ,0.0181612763553858,0.599665701389313,0.800044476985931,-0.414126962423325,0.480852067470551,0.772839069366455\n             ,-0.397260129451752,0.234844520688057,0.887148499488831,-0.642944931983948,0.0801258310675621,0.761709690093994\n             ,-0.644507586956024,0.336329728364944,0.686652958393097,-0.278751373291016,-0.37135124206543,0.88566130399704\n             ,-0.644507586956024,0.336329728364944,0.686652958393097,0.139649003744125,0.122624859213829,0.982578873634338\n             ,0.268051654100418,-0.524244606494904,0.808279573917389,-0.278751373291016,-0.37135124206543,0.88566130399704\n             ,0.139649003744125,0.122624859213829,0.982578873634338,0.628335058689117,0.550278067588806,0.549899160861969\n             ,0.633086621761322,-0.179429575800896,0.752998232841492,0.268051654100418,-0.524244606494904,0.808279573917389\n             ,0.633086621761322,-0.179429575800896,0.752998232841492,0.628335058689117,0.550278067588806,0.549899160861969\n             ,0.54774808883667,0.373568952083588,0.74861091375351,0.398782223463058,0.608129858970642,0.686404287815094,0.54774808883667\n             ,0.373568952083588,0.74861091375351,0.0315268374979496,0.564418375492096,0.824886620044708,0.0181612763553858\n             ,0.599665701389313,0.800044476985931,0.398782223463058,0.608129858970642,0.686404287815094,0.0181612763553858\n             ,0.599665701389313,0.800044476985931,-0.414126962423325,0.480852067470551,0.772839069366455,-0.278751373291016\n             ,-0.37135124206543,0.88566130399704,0.268051654100418,-0.524244606494904,0.808279573917389,0.948896646499634\n             ,0.107380241155624,0.296756833791733,0.95304924249649,0.093354158103466,0.288066178560257,0.952853143215179,0.227692276239395\n             ,0.200567096471787,0.973640501499176,0.150164008140564,0.171682879328728,0.921807408332825,0.190687164664268\n             ,0.337504833936691,0.948896646499634,0.107380241155624,0.296756833791733,0.973640501499176,0.150164008140564\n             ,0.171682879328728,0.981701374053955,0.106130957603455,0.158109560608864,-0.809050858020782,-0.2569739818573\n             ,0.528584063053131,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.75111985206604,-0.269361168146133\n             ,0.602713465690613,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.743283689022064,-0.261148422956467\n             ,0.615898430347443,-0.75111985206604,-0.269361168146133,0.602713465690613,-0.806595921516418,-0.339085519313812\n             ,0.484173595905304,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.754743993282318,-0.253586679697037\n             ,0.605025053024292,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.822073340415955,-0.257045239210129\n             ,0.508058190345764,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.809050858020782,-0.2569739818573\n             ,0.528584063053131,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.754743993282318,-0.253586679697037\n             ,0.605025053024292,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.695387840270996,-0.360292494297028\n             ,0.621791779994965,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.730377912521362,0.544562876224518\n             ,0.412309736013412,-0.895388603210449,0.358975976705551,0.26346829533577,-0.734731197357178,-0.22553177177906\n             ,0.639769911766052,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.840797781944275,-0.253655642271042\n             ,0.478244692087173,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.371589094400406,-0.191971749067307\n             ,0.908332765102386,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.640028655529022,-0.393081039190292\n             ,0.660189807415009,-0.340044319629669,-0.38835272192955,0.856476545333862,0.71001797914505,-0.0603355132043362\n             ,0.701593995094299,0.799828112125397,-0.075599230825901,0.595449209213257,0.562524676322937,-0.508338332176209\n             ,0.652041435241699,0.415581941604614,-0.137492552399635,0.899103701114655,-0.738620281219482,0.158259704709053\n             ,0.655281603336334,-0.664949595928192,0.242700353264809,0.706355810165405,-0.635453879833221,-0.442719787359238\n             ,0.632611691951752,0.41880676150322,-0.0415473021566868,0.907124400138855,0.0549214817583561,-0.121100522577763\n             ,0.991119742393494,0.0793883204460144,-0.368574857711792,0.926201999187469,0.409103959798813,-0.270957797765732\n             ,0.8713299036026,-0.938033282756805,-0.126567348837852,0.322605550289154,-0.879705667495728,-0.112221792340279\n             ,0.462086796760559,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.787253379821777,-0.358191251754761\n             ,0.501927375793457,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.644040644168854,-0.339113295078278\n             ,0.685721397399902,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.66814124584198,-0.354110926389694\n             ,0.654364347457886,-0.323071241378784,-0.339786946773529,0.883272171020508,0.542647838592529,0.604447543621063\n             ,0.583246529102325,0.674828827381134,0.533339440822601,0.510054051876068,0.817657768726349,0.451825648546219\n             ,0.356776267290115,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.996665477752686,0.0815145745873451\n             ,0.0036500059068203,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.938033282756805,-0.126567348837852\n             ,0.322605550289154,0.478552430868149,0.592504560947418,0.648016929626465,0.723428726196289,-0.0725484043359756\n             ,0.686576724052429,0.931710660457611,0.00594053184613585,0.363152772188187,0.83936071395874,0.300622671842575\n             ,0.452879250049591,0.542647838592529,0.604447543621063,0.583246529102325,0.478552430868149,0.592504560947418\n             ,0.648016929626465,0.83936071395874,0.300622671842575,0.452879250049591,0.674828827381134,0.533339440822601,0.510054051876068\n             ,0.904658854007721,-0.172026917338371,0.389870554208755,0.679584980010986,-0.597025573253632,0.426291733980179\n             ,0.562524676322937,-0.508338332176209,0.652041435241699,0.799828112125397,-0.075599230825901,0.595449209213257\n             ,0.931710660457611,0.00594053184613585,0.363152772188187,0.723428726196289,-0.0725484043359756,0.686576724052429\n             ,0.679584980010986,-0.597025573253632,0.426291733980179,0.904658854007721,-0.172026917338371,0.389870554208755\n             ,0.419204384088516,0.619329214096069,0.663851618766785,0.713757336139679,-0.0291267577558756,0.699787139892578\n             ,0.723428726196289,-0.0725484043359756,0.686576724052429,0.478552430868149,0.592504560947418,0.648016929626465\n             ,0.454763680696487,0.657829880714417,0.600374758243561,0.419204384088516,0.619329214096069,0.663851618766785\n             ,0.478552430868149,0.592504560947418,0.648016929626465,0.542647838592529,0.604447543621063,0.583246529102325\n             ,0.679584980010986,-0.597025573253632,0.426291733980179,0.88217830657959,-0.427934646606445,0.19655367732048\n             ,0.769319772720337,-0.500670611858368,0.396832406520844,0.562524676322937,-0.508338332176209,0.652041435241699\n             ,0.723428726196289,-0.0725484043359756,0.686576724052429,0.713757336139679,-0.0291267577558756,0.699787139892578\n             ,0.88217830657959,-0.427934646606445,0.19655367732048,0.679584980010986,-0.597025573253632,0.426291733980179\n             ,0.419204384088516,0.619329214096069,0.663851618766785,0.211952582001686,0.670883417129517,0.710627555847168\n             ,0.380322515964508,-0.00781834218651056,0.924820899963379,0.713757336139679,-0.0291267577558756,0.699787139892578\n             ,0.998829364776611,0.0265165809541941,-0.040457472205162,0.828034996986389,-0.0658707618713379,0.556793570518494\n             ,0.769319772720337,-0.500670611858368,0.396832406520844,0.88217830657959,-0.427934646606445,0.19655367732048\n             ,0.882227420806885,-0.112881802022457,0.457091331481934,0.998829364776611,0.0265165809541941,-0.040457472205162\n             ,0.88217830657959,-0.427934646606445,0.19655367732048,0.713757336139679,-0.0291267577558756,0.699787139892578\n             ,0.45019194483757,-0.821827292442322,0.349180638790131,0.392352849245071,-0.511246860027313,0.764647543430328\n             ,0.717177391052246,-0.236680090427399,0.655468583106995,0.938493072986603,-0.335132718086243,0.0831675454974175\n             ,0.415358334779739,-0.555045127868652,0.720695734024048,0.45019194483757,-0.821827292442322,0.349180638790131\n             ,0.938493072986603,-0.335132718086243,0.0831675454974175,0.845881640911102,-0.333893984556198,0.415931522846222\n             ,0.0997511595487595,0.3437180519104,0.933759927749634,-0.0513959974050522,-0.174092352390289,0.983387172222137\n             ,-0.129297733306885,0.717350006103516,0.68461012840271,0.380322515964508,-0.00781834218651056,0.924820899963379\n             ,-0.225461483001709,-0.22565546631813,0.947758793830872,-0.448386162519455,-0.404915392398834,0.796864748001099\n             ,0.381502151489258,-0.250341862440109,0.889823019504547,0.45019194483757,-0.821827292442322,0.349180638790131\n             ,-0.47701033949852,-0.793649733066559,0.377599358558655,-0.147943556308746,-0.468891173601151,0.870777666568756\n             ,0.392352849245071,-0.511246860027313,0.764647543430328,0.415358334779739,-0.555045127868652,0.720695734024048\n             ,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.47701033949852,-0.793649733066559,0.377599358558655\n             ,0.45019194483757,-0.821827292442322,0.349180638790131,-0.129297733306885,0.717350006103516,0.68461012840271\n             ,-0.214603140950203,0.506344437599182,0.835201025009155,-0.225461483001709,-0.22565546631813,0.947758793830872\n             ,0.380322515964508,-0.00781834218651056,0.924820899963379,0.211952582001686,0.670883417129517,0.710627555847168\n             ,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.214603140950203,0.506344437599182,0.835201025009155\n             ,-0.129297733306885,0.717350006103516,0.68461012840271,-0.0513959974050522,-0.174092352390289,0.983387172222137\n             ,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.518838763237,-0.706463754177094,0.481368243694305\n             ,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.491936564445496,-0.3821080327034,0.782299101352692\n             ,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.225461483001709,-0.22565546631813,0.947758793830872\n             ,-0.518838763237,-0.706463754177094,0.481368243694305,-0.870778322219849,-0.383099049329758,0.308188587427139\n             ,-0.664949595928192,0.242700353264809,0.706355810165405,-0.738620281219482,0.158259704709053,0.655281603336334\n             ,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.508101880550385,0.373251050710678,0.776219129562378\n             ,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.644040644168854,-0.339113295078278,0.685721397399902\n             ,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.245217561721802,-0.767791271209717,0.59191632270813\n             ,-0.508101880550385,0.373251050710678,0.776219129562378,-0.786463916301727,-0.0169835556298494,0.617402672767639\n             ,-0.703794181346893,-0.329490482807159,0.629372477531433,-0.395677655935287,-0.301782429218292,0.867390632629395\n             ,-0.703794181346893,-0.329490482807159,0.629372477531433,-0.650932431221008,-0.45871701836586,0.604868352413177\n             ,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.395677655935287,-0.301782429218292,0.867390632629395\n             ,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.786463916301727,-0.0169835556298494,0.617402672767639\n             ,-0.738620281219482,0.158259704709053,0.655281603336334,-0.644040644168854,-0.339113295078278,0.685721397399902\n             ,0.380322515964508,-0.00781834218651056,0.924820899963379,0.381502151489258,-0.250341862440109,0.889823019504547\n             ,0.882227420806885,-0.112881802022457,0.457091331481934,0.713757336139679,-0.0291267577558756,0.699787139892578\n             ,-0.214603140950203,0.506344437599182,0.835201025009155,-0.508101880550385,0.373251050710678,0.776219129562378\n             ,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.225461483001709,-0.22565546631813,0.947758793830872\n             ,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.279380530118942,-0.650672852993011,0.706095814704895\n             ,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.518838763237,-0.706463754177094,0.481368243694305\n             ,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.245217561721802,-0.767791271209717,0.59191632270813\n             ,-0.518838763237,-0.706463754177094,0.481368243694305,-0.225461483001709,-0.22565546631813,0.947758793830872\n             ,0.904658854007721,-0.172026917338371,0.389870554208755,0.799828112125397,-0.075599230825901,0.595449209213257\n             ,0.674828827381134,0.533339440822601,0.510054051876068,0.83936071395874,0.300622671842575,0.452879250049591,0.728648900985718\n             ,-0.0937679037451744,0.678438127040863,0.700942933559418,0.0266663283109665,0.712718665599823,0.41880676150322\n             ,-0.0415473021566868,0.907124400138855,0.409103959798813,-0.270957797765732,0.8713299036026,0.0549214817583561\n             ,-0.121100522577763,0.991119742393494,-0.371589094400406,-0.191971749067307,0.908332765102386,-0.340044319629669\n             ,-0.38835272192955,0.856476545333862,0.0793883204460144,-0.368574857711792,0.926201999187469,-0.635453879833221\n             ,-0.442719787359238,0.632611691951752,-0.787253379821777,-0.358191251754761,0.501927375793457,-0.734731197357178\n             ,-0.22553177177906,0.639769911766052,-0.644040644168854,-0.339113295078278,0.685721397399902,-0.738620281219482\n             ,0.158259704709053,0.655281603336334,0.358441174030304,0.000843510264530778,0.933551967144012,0.072246678173542\n             ,-0.0245807897299528,0.997083842754364,0.0549214817583561,-0.121100522577763,0.991119742393494,0.41880676150322\n             ,-0.0415473021566868,0.907124400138855,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.491936564445496\n             ,-0.3821080327034,0.782299101352692,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.279380530118942\n             ,-0.650672852993011,0.706095814704895,0.415581941604614,-0.137492552399635,0.899103701114655,0.562524676322937\n             ,-0.508338332176209,0.652041435241699,0.769319772720337,-0.500670611858368,0.396832406520844,0.828034996986389\n             ,-0.0658707618713379,0.556793570518494,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.996665477752686\n             ,0.0815145745873451,0.0036500059068203,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.840797781944275\n             ,-0.253655642271042,0.478244692087173,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.884543001651764\n             ,-0.164741396903992,0.436398863792419,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.640028655529022\n             ,-0.393081039190292,0.660189807415009,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.662939727306366\n             ,-0.253610551357269,0.70440936088562,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.840797781944275\n             ,-0.253655642271042,0.478244692087173,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.66814124584198\n             ,-0.354110926389694,0.654364347457886,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.280184537172318\n             ,-0.219449639320374,0.934525847434998,0.883821845054626,0.46681609749794,-0.0306868441402912,0.817657768726349\n             ,0.451825648546219,0.356776267290115,0.900879740715027,0.256662726402283,0.350056976079941,0.901214420795441\n             ,0.431201189756393,-0.0433364585042,0.904658854007721,-0.172026917338371,0.389870554208755,0.83936071395874,0.300622671842575\n             ,0.452879250049591,0.931710660457611,0.00594053184613585,0.363152772188187,-0.786463916301727,-0.0169835556298494\n             ,0.617402672767639,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.703794181346893,-0.329490482807159\n             ,0.629372477531433,0.617214262485504,-0.750285804271698,0.236891880631447,0.713743150234222,-0.689680516719818\n             ,-0.122112594544888,0.969275593757629,-0.197328850626946,0.146854087710381,0.76043301820755,-0.311322569847107\n             ,0.569929718971252,0.432984858751297,-0.720436871051788,0.541751623153687,0.617214262485504,-0.750285804271698\n             ,0.236891880631447,0.76043301820755,-0.311322569847107,0.569929718971252,0.399355500936508,-0.336066722869873\n             ,0.85297966003418,0.399355500936508,-0.336066722869873,0.85297966003418,0.0704309046268463,-0.316668450832367\n             ,0.945917844772339,0.139990121126175,-0.714202702045441,0.685796797275543,0.432984858751297,-0.720436871051788\n             ,0.541751623153687,0.0704309046268463,-0.316668450832367,0.945917844772339,-0.378215819597244,-0.383805155754089\n             ,0.842405080795288,-0.289891123771667,-0.78655070066452,0.545253217220306,0.139990121126175,-0.714202702045441\n             ,0.685796797275543,-0.378215819597244,-0.383805155754089,0.842405080795288,-0.66546767950058,-0.470633089542389\n             ,0.579359292984009,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.289891123771667,-0.78655070066452\n             ,0.545253217220306,-0.175360560417175,-0.976183235645294,-0.127729922533035,-0.526285529136658,-0.789061963558197\n             ,0.316867142915726,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.175360560417175,-0.976183235645294\n             ,-0.127729922533035,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.491936564445496,-0.3821080327034\n             ,0.782299101352692,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.280184537172318,-0.219449639320374\n             ,0.934525847434998,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.870778322219849,-0.383099049329758\n             ,0.308188587427139,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.147943556308746,-0.468891173601151\n             ,0.870777666568756,-0.47701033949852,-0.793649733066559,0.377599358558655,-0.505195796489716,-0.403650432825089\n             ,0.762786626815796,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.870778322219849,-0.383099049329758\n             ,0.308188587427139,-0.913633704185486,-0.352534234523773,0.202467292547226,0.381502151489258,-0.250341862440109\n             ,0.889823019504547,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.505195796489716,-0.403650432825089\n             ,0.762786626815796,0.369075655937195,-0.252174496650696,0.894534051418304,0.882227420806885,-0.112881802022457\n             ,0.457091331481934,0.381502151489258,-0.250341862440109,0.889823019504547,0.369075655937195,-0.252174496650696\n             ,0.894534051418304,0.901904165744781,-0.103395886719227,0.419378310441971,0.901904165744781,-0.103395886719227\n             ,0.419378310441971,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.998829364776611,0.0265165809541941\n             ,-0.040457472205162,0.882227420806885,-0.112881802022457,0.457091331481934,0.717177391052246,-0.236680090427399\n             ,0.655468583106995,0.828034996986389,-0.0658707618713379,0.556793570518494,0.998829364776611,0.0265165809541941\n             ,-0.040457472205162,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.938493072986603,-0.335132718086243\n             ,0.0831675454974175,0.358441174030304,0.000843510264530778,0.933551967144012,0.415581941604614,-0.137492552399635\n             ,0.899103701114655,0.828034996986389,-0.0658707618713379,0.556793570518494,0.717177391052246,-0.236680090427399\n             ,0.655468583106995,0.71001797914505,-0.0603355132043362,0.701593995094299,0.415581941604614,-0.137492552399635\n             ,0.899103701114655,0.358441174030304,0.000843510264530778,0.933551967144012,0.698577165603638,0.0347565114498138\n             ,0.714690029621124,0.71001797914505,-0.0603355132043362,0.701593995094299,0.698577165603638,0.0347565114498138\n             ,0.714690029621124,0.922343671321869,0.13623221218586,0.361556380987167,0.927353084087372,0.117294065654278,0.355328530073166\n             ,0.956080257892609,0.274207085371017,-0.103542387485504,0.927353084087372,0.117294065654278,0.355328530073166\n             ,0.922343671321869,0.13623221218586,0.361556380987167,0.962835073471069,0.210140570998192,-0.169674947857857\n             ,-0.750467360019684,0.503474771976471,0.428149402141571,-0.644507586956024,0.336329728364944,0.686652958393097\n             ,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.011982899159193,-0.684736132621765,0.728692591190338\n             ,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.727824807167053,-0.528583109378815,-0.436887800693512\n             ,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.978760063648224,-0.199930444359779,-0.0453491657972336\n             ,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.944730460643768,-0.313157916069031,-0.0970383062958717\n             ,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.36346247792244,-0.894582808017731,-0.260031878948212\n             ,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.896283984184265,-0.348051100969315,-0.274837076663971\n             ,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.750467360019684,0.503474771976471,0.428149402141571\n             ,-0.011982899159193,-0.684736132621765,0.728692591190338,-0.227918326854706,-0.765941560268402,0.601154506206512\n             ,-0.912629246711731,0.357585817575455,0.198091477155685,-0.797184348106384,-0.0889851674437523,-0.597142159938812\n             ,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.552984535694122,0.0753506049513817,-0.829777300357819\n             ,-0.826197624206543,-0.211467355489731,-0.522186815738678,0.495204418897629,-0.163849160075188,0.853185832500458\n             ,0.628335058689117,0.550278067588806,0.549899160861969,0.625909388065338,0.726224660873413,0.284315198659897\n             ,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.896283984184265,-0.348051100969315,-0.274837076663971\n             ,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.722859144210815,-0.480000674724579,-0.497065395116806\n             ,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.361754894256592,-0.299040019512177,-0.883011043071747\n             ,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.36346247792244,-0.894582808017731,-0.260031878948212\n             ,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.154521003365517,0.240299493074417,-0.958321154117584\n             ,0.184527859091759,0.31499707698822,-0.930981338024139,0.204966142773628,0.497180044651031,-0.843090057373047\n             ,0.868426561355591,0.2465450912714,-0.430175423622131,0.854514420032501,0.21429717540741,-0.473161548376083,0.847418010234833\n             ,0.181933760643005,-0.49878141283989,0.86673891544342,0.195172861218452,-0.458989411592484,0.86673891544342,0.195172861218452\n             ,-0.458989411592484,0.924738705158234,0.24395327270031,-0.29213884472847,0.87714958190918,0.359215557575226,-0.318704843521118\n             ,0.828140437602997,-0.416388809680939,0.375238239765167,0.713566720485687,0.700178623199463,0.0239254627376795\n             ,0.843237340450287,0.525120317935944,-0.114888966083527,0.883931815624237,-0.461925357580185,-0.0727289691567421\n             ,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.506913185119629,-0.816672563552856,-0.275835067033768\n             ,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.865038812160492,0.500161468982697,0.0393235273659229\n             ,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.506913185119629,-0.816672563552856,-0.275835067033768\n             ,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.467275679111481,0.564712703227997,-0.680259525775909\n             ,0.153497099876404,0.630856812000275,-0.76056444644928,0.387114733457565,-0.80674409866333,-0.446437150239944\n             ,0.141500309109688,-0.856403529644012,-0.496538639068604,-0.136648282408714,0.56611156463623,-0.812923669815063\n             ,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.467275679111481,0.564712703227997,-0.680259525775909\n             ,-0.136648282408714,0.56611156463623,-0.812923669815063,0.141500309109688,-0.856403529644012,-0.496538639068604\n             ,0.387114733457565,-0.80674409866333,-0.446437150239944,0.153497099876404,0.630856812000275,-0.76056444644928\n             ,0.343719273805618,0.683673620223999,-0.643775939941406,0.582785487174988,-0.706441342830658,-0.40162381529808\n             ,-0.733602643013,0.104122340679169,-0.671554684638977,-0.784134566783905,-0.509350836277008,-0.354534596204758\n             ,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.809531450271606,0.353956669569016,0.468373239040375\n             ,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.747647523880005,-0.00706110056489706,-0.664058268070221\n             ,0.794842600822449,-0.0390454083681107,-0.605558216571808,-0.00303205195814371,-0.243413895368576,-0.969917774200439\n             ,0.370678871870041,0.354065299034119,-0.858623862266541,0.985135495662689,0.16939789056778,0.0285019427537918\n             ,0.181528016924858,-0.138318374752998,-0.973609566688538,0.287791073322296,-0.680340945720673,-0.67402708530426\n             ,0.412972420454025,-0.0658904165029526,-0.908356904983521,-0.604859709739685,-0.787493765354156,-0.118314750492573\n             ,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.802786946296692,0.346281349658966,0.485409408807755\n             ,-0.855425894260406,0.486632615327835,-0.177299648523331,0.412972420454025,-0.0658904165029526,-0.908356904983521\n             ,0.287791073322296,-0.680340945720673,-0.67402708530426,0.445772647857666,-0.772406101226807,-0.452410876750946\n             ,0.725067377090454,0.0188654419034719,-0.688419461250305,-0.412408858537674,0.0103200003504753,-0.910940408706665\n             ,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.802456378936768,-0.12530305981636,-0.583406329154968\n             ,-0.407887548208237,-0.115010686218739,-0.905759513378143,0.847418010234833,0.181933760643005,-0.49878141283989\n             ,0.854514420032501,0.21429717540741,-0.473161548376083,0.788738131523132,0.260696917772293,-0.556712925434113\n             ,0.767102777957916,0.172567009925842,-0.617878556251526,0.711101770401001,0.454571276903152,-0.536375999450684\n             ,0.700349986553192,0.341331839561462,-0.626899063587189,0.817859530448914,0.310457706451416,-0.484480977058411\n             ,0.811875224113464,0.435735166072845,-0.388578832149506,-0.972312390804291,-0.209807604551315,-0.102904692292213\n             ,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.826197624206543,-0.211467355489731,-0.522186815738678\n             ,-0.944730460643768,-0.313157916069031,-0.0970383062958717,0.804398238658905,0.375304967164993,-0.460531920194626\n             ,0.850323617458344,0.228136360645294,-0.474239885807037,0.796033978462219,0.30541729927063,-0.522541999816895\n             ,0.804398238658905,0.375304967164993,-0.460531920194626,0.904132843017578,0.38877084851265,-0.177203312516212\n             ,0.783251345157623,0.53278785943985,-0.320397257804871,0.811875224113464,0.435735166072845,-0.388578832149506\n             ,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.794855117797852,0.412983626127243,-0.444578289985657\n             ,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.604859709739685,-0.787493765354156,-0.118314750492573\n             ,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.478379726409912,0.39488697052002,-0.784357786178589\n             ,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.461797803640366,-0.839399814605713,-0.286619544029236\n             ,-0.0736050382256508,0.39994078874588,-0.913580656051636,0.135029509663582,-0.80270379781723,-0.580890357494354\n             ,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.478379726409912,0.39488697052002,-0.784357786178589\n             ,-0.0736050382256508,0.39994078874588,-0.913580656051636,0.247284039855003,0.510108411312103,-0.823796093463898\n             ,0.286900162696838,-0.815463900566101,-0.502699613571167,0.135029509663582,-0.80270379781723,-0.580890357494354\n             ,0.468129217624664,-0.774566531181335,-0.425325512886047,0.286900162696838,-0.815463900566101,-0.502699613571167\n             ,0.247284039855003,0.510108411312103,-0.823796093463898,0.525159299373627,0.660153150558472,-0.537034034729004\n             ,0.821175813674927,-0.555518984794617,0.130648210644722,0.468129217624664,-0.774566531181335,-0.425325512886047\n             ,0.525159299373627,0.660153150558472,-0.537034034729004,0.81356155872345,0.572328507900238,0.102750584483147\n             ,0.261260062456131,-0.761487662792206,0.593194544315338,0.419214755296707,-0.523533642292023,0.741735517978668\n             ,-0.397260129451752,0.234844520688057,0.887148499488831,0.0315268374979496,0.564418375492096,0.824886620044708\n             ,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.642944931983948,0.0801258310675621,0.761709690093994\n             ,-0.397260129451752,0.234844520688057,0.887148499488831,0.689028441905975,-0.416694343090057,0.592963397502899\n             ,-0.668442606925964,0.712539076805115,-0.213242903351784,-0.39990708231926,0.909411907196045,-0.114211864769459\n             ,-0.886275291442871,0.375701189041138,0.270859181880951,-0.888629198074341,0.438762098550797,0.133514106273651\n             ,0.749106764793396,0.343264579772949,-0.56657612323761,0.741937816143036,0.455005794763565,-0.492440849542618\n             ,0.797342956066132,0.463364690542221,-0.386700719594955,0.825478971004486,0.333341240882874,-0.455486595630646\n             ,-0.917498290538788,0.153388485312462,-0.36697256565094,-0.738151073455811,0.192115649580956,-0.646702826023102\n             ,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.903565168380737,0.0908703580498695,-0.418703347444534\n             ,0.784849643707275,0.264893710613251,-0.560216426849365,0.808817446231842,0.214464277029037,-0.547557651996613\n             ,0.833951056003571,0.203840136528015,-0.512810707092285,0.841212332248688,0.233560338616371,-0.487659126520157\n             ,0.582049369812012,-0.552822172641754,-0.596327304840088,0.750801265239716,0.03514039888978,-0.659592807292938\n             ,0.847964406013489,0.0018927511991933,-0.530049800872803,0.632658183574677,-0.595792829990387,-0.494746923446655\n             ,0.964388489723206,0.187021419405937,-0.187023624777794,0.974583148956299,0.15406733751297,-0.162637546658516\n             ,0.841212332248688,0.233560338616371,-0.487659126520157,0.833951056003571,0.203840136528015,-0.512810707092285\n             ,0.904132843017578,0.38877084851265,-0.177203312516212,0.883821845054626,0.46681609749794,-0.0306868441402912\n             ,0.789179563522339,0.518753051757813,-0.328771829605103,0.783251345157623,0.53278785943985,-0.320397257804871\n             ,0.215944558382034,0.319608330726624,-0.922614991664886,-0.28614467382431,0.227497309446335,-0.930787920951843\n             ,-0.323528319597244,0.300020337104797,-0.89739465713501,0.224338784813881,0.414775222539902,-0.881835401058197\n             ,-0.233401030302048,0.186044618487358,-0.954416751861572,0.2085961997509,0.239187613129616,-0.948302090167999\n             ,0.168669149279594,0.29014664888382,-0.942000865936279,-0.261592835187912,0.265700459480286,-0.927886009216309\n             ,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.930256605148315,-0.364659577608109,-0.0405716709792614\n             ,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.846266686916351,-0.512883901596069,-0.144162610173225\n             ,0.903218030929565,-0.152758419513702,0.401076167821884,0.542647838592529,0.604447543621063,0.583246529102325\n             ,0.817657768726349,0.451825648546219,0.356776267290115,0.992223381996155,-0.121708244085312,0.0260738711804152\n             ,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.787253379821777,-0.358191251754761,0.501927375793457\n             ,-0.635453879833221,-0.442719787359238,0.632611691951752,-0.298704415559769,-0.948391199111938,0.106441475450993\n             ,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.76449728012085,0.158614858984947,-0.624808132648468\n             ,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.897854268550873,-0.19834990799427,-0.393083959817886\n             ,0.740222573280334,0.520439863204956,-0.4256911277771,0.7084801197052,0.54767894744873,-0.445088446140289,0.783251345157623\n             ,0.53278785943985,-0.320397257804871,0.789179563522339,0.518753051757813,-0.328771829605103,0.216972485184669\n             ,0.595779240131378,-0.773285210132599,0.233416378498077,0.501707494258881,-0.832950413227081,-0.337705463171005\n             ,0.352743804454803,-0.872655034065247,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.903565168380737\n             ,0.0908703580498695,-0.418703347444534,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.638863980770111\n             ,0.0889059156179428,-0.764165282249451,-0.894527077674866,-0.0458483695983887,-0.444656252861023,0.749106764793396\n             ,0.343264579772949,-0.56657612323761,0.825478971004486,0.333341240882874,-0.455486595630646,0.83752965927124\n             ,0.20064052939415,-0.508219838142395,0.794304847717285,0.190871343016624,-0.576756417751312,-0.28614467382431\n             ,0.227497309446335,-0.930787920951843,0.215944558382034,0.319608330726624,-0.922614991664886,0.222743824124336\n             ,0.213152140378952,-0.951289296150208,-0.243201240897179,0.169641554355621,-0.955026090145111,-0.880043566226959\n             ,-0.142866209149361,-0.452893614768982,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.688710927963257\n             ,0.127927929162979,-0.713660776615143,-0.907213628292084,-0.0245506521314383,-0.419953256845474,0.847964406013489\n             ,0.0018927511991933,-0.530049800872803,0.971639752388,-0.0853487625718117,-0.220526039600372,0.698415637016296\n             ,-0.626996219158173,-0.345096111297607,0.632658183574677,-0.595792829990387,-0.494746923446655,-0.107030250132084\n             ,-0.605656087398529,-0.788495600223541,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.700080990791321\n             ,-0.0367838852107525,-0.713115334510803,-0.255131036043167,0.019106624647975,-0.966717660427094,0.711101770401001\n             ,0.454571276903152,-0.536375999450684,0.811875224113464,0.435735166072845,-0.388578832149506,0.783251345157623\n             ,0.53278785943985,-0.320397257804871,0.7084801197052,0.54767894744873,-0.445088446140289,0.216972485184669,0.595779240131378\n             ,-0.773285210132599,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.232910394668579,0.366851598024368\n             ,-0.900651276111603,0.204966142773628,0.497180044651031,-0.843090057373047,-0.826197624206543,-0.211467355489731\n             ,-0.522186815738678,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.704469919204712,0.0606652796268463\n             ,-0.707136392593384,-0.897854268550873,-0.19834990799427,-0.393083959817886,0.784849643707275,0.264893710613251\n             ,-0.560216426849365,0.841212332248688,0.233560338616371,-0.487659126520157,0.847964406013489,0.0018927511991933\n             ,-0.530049800872803,0.750801265239716,0.03514039888978,-0.659592807292938,0.156650885939598,0.00669354572892189\n             ,-0.987631380558014,-0.255131036043167,0.019106624647975,-0.966717660427094,-0.261592835187912,0.265700459480286\n             ,-0.927886009216309,0.168669149279594,0.29014664888382,-0.942000865936279,-0.987256348133087,-0.145976811647415\n             ,-0.063369482755661,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.901192605495453,-0.155655428767204\n             ,-0.404503762722015,-0.937702357769012,-0.340810507535934,-0.0675463825464249,0.924062311649323,0.166339710354805\n             ,-0.344151109457016,0.904132843017578,0.38877084851265,-0.177203312516212,0.804398238658905,0.375304967164993\n             ,-0.460531920194626,0.798422634601593,0.345685362815857,-0.49297359585762,0.633183419704437,0.759799301624298\n             ,-0.14759349822998,0.949472963809967,-0.307868123054504,0.0609782487154007,0.582785487174988,-0.706441342830658\n             ,-0.40162381529808,0.343719273805618,0.683673620223999,-0.643775939941406,0.495204418897629,-0.163849160075188\n             ,0.853185832500458,0.625909388065338,0.726224660873413,0.284315198659897,0.69633674621582,-0.401266545057297\n             ,0.595063328742981,0.54774808883667,0.373568952083588,0.74861091375351,0.0833947658538818,-0.437338054180145\n             ,0.895422101020813,0.127582147717476,-0.649050772190094,0.749970614910126,-0.397260129451752,0.234844520688057\n             ,0.887148499488831,0.419214755296707,-0.523533642292023,0.741735517978668,0.689028441905975,-0.416694343090057\n             ,0.592963397502899,0.788738131523132,0.260696917772293,-0.556712925434113,0.680371522903442,0.248313769698143\n             ,-0.689517855644226,0.468770742416382,0.121921703219414,-0.874865233898163,0.767102777957916,0.172567009925842\n             ,-0.617878556251526,0.16710638999939,-0.594872176647186,-0.786258578300476,-0.107030250132084,-0.605656087398529\n             ,-0.788495600223541,-0.255131036043167,0.019106624647975,-0.966717660427094,0.156650885939598,0.00669354572892189\n             ,-0.987631380558014,0.969275593757629,-0.197328850626946,0.146854087710381,0.955532789230347,0.0592790879309177\n             ,0.288865029811859,0.728648900985718,-0.0937679037451744,0.678438127040863,0.76043301820755,-0.311322569847107\n             ,0.569929718971252,0.399355500936508,-0.336066722869873,0.85297966003418,0.76043301820755,-0.311322569847107\n             ,0.569929718971252,0.728648900985718,-0.0937679037451744,0.678438127040863,0.409103959798813,-0.270957797765732\n             ,0.8713299036026,0.409103959798813,-0.270957797765732,0.8713299036026,0.0793883204460144,-0.368574857711792,0.926201999187469\n             ,0.0704309046268463,-0.316668450832367,0.945917844772339,0.399355500936508,-0.336066722869873,0.85297966003418\n             ,0.0793883204460144,-0.368574857711792,0.926201999187469,-0.340044319629669,-0.38835272192955,0.856476545333862\n             ,-0.378215819597244,-0.383805155754089,0.842405080795288,0.0704309046268463,-0.316668450832367,0.945917844772339\n             ,-0.340044319629669,-0.38835272192955,0.856476545333862,-0.640028655529022,-0.393081039190292,0.660189807415009\n             ,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.378215819597244,-0.383805155754089,0.842405080795288\n             ,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.640028655529022,-0.393081039190292,0.660189807415009\n             ,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.788328349590302,-0.474288523197174,0.39190411567688\n             ,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.938033282756805,-0.126567348837852,0.322605550289154\n             ,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.930256605148315,-0.364659577608109,-0.0405716709792614\n             ,-0.938033282756805,-0.126567348837852,0.322605550289154,-0.787253379821777,-0.358191251754761,0.501927375793457\n             ,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.817072033882141,-0.573431372642517,-0.0597474798560143\n             ,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.635453879833221,-0.442719787359238,0.632611691951752\n             ,-0.664949595928192,0.242700353264809,0.706355810165405,-0.293226510286331,-0.722825050354004,0.625733315944672\n             ,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.802456378936768,-0.12530305981636,-0.583406329154968\n             ,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.980311870574951,-0.142144083976746,-0.137053519487381\n             ,0.665161728858948,0.0713187083601952,0.743285655975342,0.0997511595487595,0.3437180519104,0.933759927749634\n             ,0.211952582001686,0.670883417129517,0.710627555847168,0.211952582001686,0.670883417129517,0.710627555847168\n             ,0.0997511595487595,0.3437180519104,0.933759927749634,-0.129297733306885,0.717350006103516,0.68461012840271,0.433499962091446\n             ,-0.540944635868073,-0.720733463764191,0.757972776889801,-0.133172035217285,-0.63854718208313,0.839367091655731\n             ,0.0223367810249329,-0.543105840682983,0.698725283145905,-0.511526346206665,-0.500123798847198,0.625909388065338\n             ,0.726224660873413,0.284315198659897,0.713566720485687,0.700178623199463,0.0239254627376795,0.828140437602997\n             ,-0.416388809680939,0.375238239765167,0.69633674621582,-0.401266545057297,0.595063328742981,0.985335350036621\n             ,0.0123839350417256,-0.170178771018982,0.992223381996155,-0.121708244085312,0.0260738711804152,0.817657768726349\n             ,0.451825648546219,0.356776267290115,0.883821845054626,0.46681609749794,-0.0306868441402912,0.904132843017578\n             ,0.38877084851265,-0.177203312516212,0.572269201278687,-0.327979475259781,0.751623213291168,0.263325154781342\n             ,-0.487631261348724,0.832391500473022,0.0997511595487595,0.3437180519104,0.933759927749634,0.665161728858948\n             ,0.0713187083601952,0.743285655975342,0.263325154781342,-0.487631261348724,0.832391500473022,-0.10741464048624\n             ,-0.480259567499161,0.87052446603775,0.026099681854248,-0.974704563617706,0.221968054771423,-0.0513959974050522\n             ,-0.174092352390289,0.983387172222137,0.0997511595487595,0.3437180519104,0.933759927749634,-0.508101880550385\n             ,0.373251050710678,0.776219129562378,-0.214603140950203,0.506344437599182,0.835201025009155,-0.293226510286331\n             ,-0.722825050354004,0.625733315944672,-0.664949595928192,0.242700353264809,0.706355810165405,0.903218030929565\n             ,-0.152758419513702,0.401076167821884,0.882815957069397,-0.369267553091049,0.290305823087692,0.665161728858948\n             ,0.0713187083601952,0.743285655975342,0.454763680696487,0.657829880714417,0.600374758243561,0.542647838592529\n             ,0.604447543621063,0.583246529102325,0.87714958190918,0.359215557575226,-0.318704843521118,0.924738705158234\n             ,0.24395327270031,-0.29213884472847,0.843237340450287,0.525120317935944,-0.114888966083527,0.839367091655731\n             ,0.0223367810249329,-0.543105840682983,0.757972776889801,-0.133172035217285,-0.63854718208313,0.86673891544342\n             ,0.195172861218452,-0.458989411592484,0.847418010234833,0.181933760643005,-0.49878141283989,0.468770742416382\n             ,0.121921703219414,-0.874865233898163,0.412972420454025,-0.0658904165029526,-0.908356904983521,0.725067377090454\n             ,0.0188654419034719,-0.688419461250305,0.767102777957916,0.172567009925842,-0.617878556251526,0.412972420454025\n             ,-0.0658904165029526,-0.908356904983521,0.468770742416382,0.121921703219414,-0.874865233898163,0.236234411597252\n             ,0.0899422541260719,-0.967524528503418,0.181528016924858,-0.138318374752998,-0.973609566688538,-0.802456378936768\n             ,-0.12530305981636,-0.583406329154968,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.361754894256592\n             ,-0.299040019512177,-0.883011043071747,-0.407887548208237,-0.115010686218739,-0.905759513378143,-0.993737041950226\n             ,-0.103920765221119,-0.041074700653553,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.771207451820374\n             ,-0.338145196437836,-0.539348602294922,-0.802456378936768,-0.12530305981636,-0.583406329154968,-0.727824807167053\n             ,-0.528583109378815,-0.436887800693512,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.896283984184265\n             ,-0.348051100969315,-0.274837076663971,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.880043566226959\n             ,-0.142866209149361,-0.452893614768982,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.987256348133087\n             ,-0.145976811647415,-0.063369482755661,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.894527077674866\n             ,-0.0458483695983887,-0.444656252861023,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.997484087944031\n             ,-0.0642545074224472,-0.0299487132579088,-0.700080990791321,-0.0367838852107525,-0.713115334510803,-0.901192605495453\n             ,-0.155655428767204,-0.404503762722015,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.688710927963257\n             ,0.127927929162979,-0.713660776615143,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.700080990791321\n             ,-0.0367838852107525,-0.713115334510803,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.621575772762299\n             ,-0.674482524394989,-0.398392915725708,-0.897854268550873,-0.19834990799427,-0.393083959817886,-0.930256605148315\n             ,-0.364659577608109,-0.0405716709792614,-0.944730460643768,-0.313157916069031,-0.0970383062958717,-0.826197624206543\n             ,-0.211467355489731,-0.522186815738678,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.930256605148315\n             ,-0.364659577608109,-0.0405716709792614,-0.897854268550873,-0.19834990799427,-0.393083959817886,-0.94291615486145\n             ,0.0813095048069954,-0.322951853275299,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.994358837604523\n             ,0.088942214846611,0.0577910803258419,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.988070666790009\n             ,-0.152181640267372,-0.0236044656485319,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.993737041950226\n             ,-0.103920765221119,-0.041074700653553,-0.980311870574951,-0.142144083976746,-0.137053519487381,0.924738705158234\n             ,0.24395327270031,-0.29213884472847,0.86673891544342,0.195172861218452,-0.458989411592484,0.757972776889801,-0.133172035217285\n             ,-0.63854718208313,0.843237340450287,0.525120317935944,-0.114888966083527,0.924738705158234,0.24395327270031\n             ,-0.29213884472847,0.757972776889801,-0.133172035217285,-0.63854718208313,0.883931815624237,-0.461925357580185\n             ,-0.0727289691567421,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.997484087944031,-0.0642545074224472\n             ,-0.0299487132579088,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.917498290538788,0.153388485312462\n             ,-0.36697256565094,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.599566876888275,-0.77289891242981\n             ,-0.207718148827553,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.901192605495453,-0.155655428767204\n             ,-0.404503762722015,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.997882843017578,0.0525476969778538\n             ,0.0383221693336964,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.917498290538788,0.153388485312462\n             ,-0.36697256565094,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.76449728012085,0.158614858984947\n             ,-0.624808132648468,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.917498290538788,0.153388485312462\n             ,-0.36697256565094,0.224338784813881,0.414775222539902,-0.881835401058197,-0.323528319597244,0.300020337104797\n             ,-0.89739465713501,-0.337705463171005,0.352743804454803,-0.872655034065247,0.233416378498077,0.501707494258881\n             ,-0.832950413227081,0.740222573280334,0.520439863204956,-0.4256911277771,0.789179563522339,0.518753051757813\n             ,-0.328771829605103,0.797342956066132,0.463364690542221,-0.386700719594955,0.741937816143036,0.455005794763565\n             ,-0.492440849542618,0.799828112125397,-0.075599230825901,0.595449209213257,0.900879740715027,0.256662726402283\n             ,0.350056976079941,0.817657768726349,0.451825648546219,0.356776267290115,0.674828827381134,0.533339440822601\n             ,0.510054051876068,0.971639752388,-0.0853487625718117,-0.220526039600372,0.974583148956299,0.15406733751297,-0.162637546658516\n             ,0.955532789230347,0.0592790879309177,0.288865029811859,0.969275593757629,-0.197328850626946,0.146854087710381\n             ,0.698415637016296,-0.626996219158173,-0.345096111297607,0.971639752388,-0.0853487625718117,-0.220526039600372\n             ,0.969275593757629,-0.197328850626946,0.146854087710381,0.713743150234222,-0.689680516719818,-0.122112594544888\n             ,0.728648900985718,-0.0937679037451744,0.678438127040863,0.955532789230347,0.0592790879309177,0.288865029811859\n             ,0.93097060918808,0.125499755144119,0.342846184968948,0.700942933559418,0.0266663283109665,0.712718665599823\n             ,0.71001797914505,-0.0603355132043362,0.701593995094299,0.927353084087372,0.117294065654278,0.355328530073166\n             ,0.900879740715027,0.256662726402283,0.350056976079941,0.799828112125397,-0.075599230825901,0.595449209213257\n             ,0.900879740715027,0.256662726402283,0.350056976079941,0.927353084087372,0.117294065654278,0.355328530073166\n             ,0.956080257892609,0.274207085371017,-0.103542387485504,0.901214420795441,0.431201189756393,-0.0433364585042\n             ,0.974583148956299,0.15406733751297,-0.162637546658516,0.964388489723206,0.187021419405937,-0.187023624777794\n             ,0.93097060918808,0.125499755144119,0.342846184968948,0.955532789230347,0.0592790879309177,0.288865029811859\n             ,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.980311870574951,-0.142144083976746,-0.137053519487381\n             ,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.978760063648224,-0.199930444359779,-0.0453491657972336\n             ,-0.961961030960083,-0.248708829283714,-0.113026410341263,-0.980311870574951,-0.142144083976746,-0.137053519487381\n             ,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.797184348106384,-0.0889851674437523,-0.597142159938812\n             ,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.412408858537674,0.0103200003504753,-0.910940408706665\n             ,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.797184348106384,-0.0889851674437523,-0.597142159938812\n             ,-0.794891834259033,-0.0708803534507751,-0.602596819400787,0.184527859091759,0.31499707698822,-0.930981338024139\n             ,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.0849575996398926,0.129486069083214,-0.9879350066185\n             ,0.152592211961746,0.243283241987228,-0.957877278327942,0.817859530448914,0.310457706451416,-0.484480977058411\n             ,0.700349986553192,0.341331839561462,-0.626899063587189,0.680371522903442,0.248313769698143,-0.689517855644226\n             ,0.788738131523132,0.260696917772293,-0.556712925434113,0.863597810268402,0.181175544857979,-0.470504224300385\n             ,0.850323617458344,0.228136360645294,-0.474239885807037,0.854514420032501,0.21429717540741,-0.473161548376083\n             ,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.965022444725037,-0.244066029787064,-0.0957262590527534\n             ,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.662939727306366,-0.253610551357269,0.70440936088562\n             ,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.371589094400406,-0.191971749067307,0.908332765102386\n             ,-0.280184537172318,-0.219449639320374,0.934525847434998,-0.848265528678894,-0.243028342723846,0.47051340341568\n             ,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.663156628608704,-0.176363825798035,0.727405726909637\n             ,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.983820915222168,-0.177888512611389,-0.0212618205696344\n             ,-0.894527077674866,-0.0458483695983887,-0.444656252861023,-0.880043566226959,-0.142866209149361,-0.452893614768982\n             ,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.894527077674866,-0.0458483695983887,-0.444656252861023\n             ,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.643724501132965,0.0191281009465456,-0.765018165111542\n             ,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.243201240897179,0.169641554355621,-0.955026090145111\n             ,0.222743824124336,0.213152140378952,-0.951289296150208,0.2085961997509,0.239187613129616,-0.948302090167999\n             ,-0.233401030302048,0.186044618487358,-0.954416751861572,0.833951056003571,0.203840136528015,-0.512810707092285\n             ,0.808817446231842,0.214464277029037,-0.547557651996613,0.794304847717285,0.190871343016624,-0.576756417751312\n             ,0.83752965927124,0.20064052939415,-0.508219838142395,0.962835073471069,0.210140570998192,-0.169674947857857\n             ,0.964388489723206,0.187021419405937,-0.187023624777794,0.833951056003571,0.203840136528015,-0.512810707092285\n             ,0.83752965927124,0.20064052939415,-0.508219838142395,0.964388489723206,0.187021419405937,-0.187023624777794\n             ,0.962835073471069,0.210140570998192,-0.169674947857857,0.922343671321869,0.13623221218586,0.361556380987167\n             ,0.93097060918808,0.125499755144119,0.342846184968948,0.93097060918808,0.125499755144119,0.342846184968948,0.922343671321869\n             ,0.13623221218586,0.361556380987167,0.698577165603638,0.0347565114498138,0.714690029621124,0.700942933559418\n             ,0.0266663283109665,0.712718665599823,0.41880676150322,-0.0415473021566868,0.907124400138855,0.700942933559418\n             ,0.0266663283109665,0.712718665599823,0.698577165603638,0.0347565114498138,0.714690029621124,0.358441174030304\n             ,0.000843510264530778,0.933551967144012,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.913633704185486\n             ,-0.352534234523773,0.202467292547226,-0.47701033949852,-0.793649733066559,0.377599358558655,0.392352849245071\n             ,-0.511246860027313,0.764647543430328,0.072246678173542,-0.0245807897299528,0.997083842754364,0.358441174030304\n             ,0.000843510264530778,0.933551967144012,0.717177391052246,-0.236680090427399,0.655468583106995,0.392352849245071\n             ,-0.511246860027313,0.764647543430328,-0.147943556308746,-0.468891173601151,0.870777666568756,0.072246678173542\n             ,-0.0245807897299528,0.997083842754364,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.505195796489716\n             ,-0.403650432825089,0.762786626815796,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.505195796489716\n             ,-0.403650432825089,0.762786626815796,-0.519910514354706,-0.607847154140472,0.600179076194763,0.415358334779739\n             ,-0.555045127868652,0.720695734024048,0.369075655937195,-0.252174496650696,0.894534051418304,0.901904165744781\n             ,-0.103395886719227,0.419378310441971,0.369075655937195,-0.252174496650696,0.894534051418304,0.415358334779739\n             ,-0.555045127868652,0.720695734024048,0.845881640911102,-0.333893984556198,0.415931522846222,0.845881640911102\n             ,-0.333893984556198,0.415931522846222,0.938493072986603,-0.335132718086243,0.0831675454974175,0.996204316616058\n             ,0.0376579239964485,-0.0784778967499733,0.901904165744781,-0.103395886719227,0.419378310441971,-0.680876314640045\n             ,-0.688694536685944,-0.249213308095932,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.657594680786133\n             ,-0.753369987010956,0.00171860994305462,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.817072033882141\n             ,-0.573431372642517,-0.0597474798560143,-0.680876314640045,-0.688694536685944,-0.249213308095932,0.863597810268402\n             ,0.181175544857979,-0.470504224300385,0.854514420032501,0.21429717540741,-0.473161548376083,0.868426561355591\n             ,0.2465450912714,-0.430175423622131,0.850903332233429,0.254371464252472,-0.459628790616989,0.850323617458344\n             ,0.228136360645294,-0.474239885807037,0.863597810268402,0.181175544857979,-0.470504224300385,0.796033978462219\n             ,0.30541729927063,-0.522541999816895,0.850323617458344,0.228136360645294,-0.474239885807037,0.850903332233429\n             ,0.254371464252472,-0.459628790616989,0.804398238658905,0.375304967164993,-0.460531920194626,0.796033978462219\n             ,0.30541729927063,-0.522541999816895,0.798422634601593,0.345685362815857,-0.49297359585762,0.419204384088516\n             ,0.619329214096069,0.663851618766785,0.454763680696487,0.657829880714417,0.600374758243561,0.665161728858948\n             ,0.0713187083601952,0.743285655975342,0.211952582001686,0.670883417129517,0.710627555847168,-0.0513959974050522\n             ,-0.174092352390289,0.983387172222137,0.026099681854248,-0.974704563617706,0.221968054771423,-0.293226510286331\n             ,-0.722825050354004,0.625733315944672,-0.506913185119629,-0.816672563552856,-0.275835067033768,-0.91961681842804\n             ,-0.250545829534531,-0.302542001008987,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.61088901758194\n             ,-0.78132575750351,0.127846345305443,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.28744050860405\n             ,0.955214440822601,-0.0703088492155075,-0.22865828871727,0.9653559923172,-0.125710710883141,-0.467275679111481\n             ,0.564712703227997,-0.680259525775909,-0.182223752140999,0.96368795633316,-0.195192277431488,-0.158186048269272\n             ,0.96994811296463,-0.184872642159462,0.153497099876404,0.630856812000275,-0.76056444644928,-0.136648282408714\n             ,0.56611156463623,-0.812923669815063,0.387114733457565,-0.80674409866333,-0.446437150239944,0.450898140668869\n             ,-0.00387678225524724,-0.892566978931427,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.141500309109688\n             ,-0.856403529644012,-0.496538639068604,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.886275291442871\n             ,0.375701189041138,0.270859181880951,-0.39990708231926,0.909411907196045,-0.114211864769459,-0.332606077194214\n             ,0.942266285419464,-0.0388254560530186,-0.467275679111481,0.564712703227997,-0.680259525775909,-0.22865828871727\n             ,0.9653559923172,-0.125710710883141,-0.182223752140999,0.96368795633316,-0.195192277431488,-0.136648282408714\n             ,0.56611156463623,-0.812923669815063,0.752802550792694,0.00600722571834922,-0.658219039440155,0.450898140668869\n             ,-0.00387678225524724,-0.892566978931427,0.387114733457565,-0.80674409866333,-0.446437150239944,0.582785487174988\n             ,-0.706441342830658,-0.40162381529808,0.343719273805618,0.683673620223999,-0.643775939941406,0.153497099876404\n             ,0.630856812000275,-0.76056444644928,-0.158186048269272,0.96994811296463,-0.184872642159462,-0.190744638442993\n             ,0.965611159801483,-0.176667913794518,-0.191050976514816,-0.840808987617493,-0.50649756193161,0.141500309109688\n             ,-0.856403529644012,-0.496538639068604,-0.247537314891815,0.00721516087651253,-0.968851506710052,-0.633409440517426\n             ,-0.235751509666443,-0.737030327320099,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.633409440517426\n             ,-0.235751509666443,-0.737030327320099,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.506913185119629\n             ,-0.816672563552856,-0.275835067033768,0.370678871870041,0.354065299034119,-0.858623862266541,0.433499962091446\n             ,-0.540944635868073,-0.720733463764191,0.821175813674927,-0.555518984794617,0.130648210644722,0.81356155872345\n             ,0.572328507900238,0.102750584483147,0.821175813674927,-0.555518984794617,0.130648210644722,0.433499962091446\n             ,-0.540944635868073,-0.720733463764191,0.698725283145905,-0.511526346206665,-0.500123798847198,0.445772647857666\n             ,-0.772406101226807,-0.452410876750946,0.468129217624664,-0.774566531181335,-0.425325512886047,-0.536809802055359\n             ,-0.812587976455688,-0.227015629410744,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.624468743801117\n             ,-0.657272636890411,0.421937793493271,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.722859144210815\n             ,-0.480000674724579,-0.497065395116806,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.802786946296692\n             ,0.346281349658966,0.485409408807755,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.931353390216827\n             ,0.363743156194687,0.0164867397397757,-0.809531450271606,0.353956669569016,0.468373239040375,-0.855425894260406\n             ,0.486632615327835,-0.177299648523331,-0.802786946296692,0.346281349658966,0.485409408807755,-0.461797803640366\n             ,-0.839399814605713,-0.286619544029236,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.536809802055359\n             ,-0.812587976455688,-0.227015629410744,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.140064582228661\n             ,-0.834803938865662,-0.532432377338409,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.36346247792244\n             ,-0.894582808017731,-0.260031878948212,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.0736050382256508\n             ,0.39994078874588,-0.913580656051636,-0.478379726409912,0.39488697052002,-0.784357786178589,-0.515371859073639\n             ,-0.300769984722137,-0.802452027797699,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.140064582228661\n             ,-0.834803938865662,-0.532432377338409,0.135029509663582,-0.80270379781723,-0.580890357494354,0.183815449476242\n             ,-0.694319665431976,-0.695795953273773,-0.0776953548192978,-0.877335965633392,-0.473545104265213,0.3254614174366\n             ,-0.149335280060768,-0.933688282966614,0.247284039855003,0.510108411312103,-0.823796093463898,-0.0736050382256508\n             ,0.39994078874588,-0.913580656051636,-0.0602304749190807,-0.267121762037277,-0.961778700351715,0.135029509663582\n             ,-0.80270379781723,-0.580890357494354,0.286900162696838,-0.815463900566101,-0.502699613571167,0.287791073322296\n             ,-0.680340945720673,-0.67402708530426,0.183815449476242,-0.694319665431976,-0.695795953273773,0.247284039855003\n             ,0.510108411312103,-0.823796093463898,0.3254614174366,-0.149335280060768,-0.933688282966614,0.727754414081573\n             ,0.0140857892110944,-0.685693144798279,0.525159299373627,0.660153150558472,-0.537034034729004,0.287791073322296\n             ,-0.680340945720673,-0.67402708530426,0.286900162696838,-0.815463900566101,-0.502699613571167,0.468129217624664\n             ,-0.774566531181335,-0.425325512886047,0.445772647857666,-0.772406101226807,-0.452410876750946,0.525159299373627\n             ,0.660153150558472,-0.537034034729004,0.727754414081573,0.0140857892110944,-0.685693144798279,0.985135495662689\n             ,0.16939789056778,0.0285019427537918,0.370678871870041,0.354065299034119,-0.858623862266541,0.81356155872345\n             ,0.572328507900238,0.102750584483147,0.179054066538811,0.451375037431717,-0.8741854429245,0.794842600822449,-0.0390454083681107\n             ,-0.605558216571808,0.949472963809967,-0.307868123054504,0.0609782487154007,0.633183419704437,0.759799301624298\n             ,-0.14759349822998,0.949472963809967,-0.307868123054504,0.0609782487154007,0.794842600822449,-0.0390454083681107\n             ,-0.605558216571808,0.752802550792694,0.00600722571834922,-0.658219039440155,0.582785487174988,-0.706441342830658\n             ,-0.40162381529808,0.633183419704437,0.759799301624298,-0.14759349822998,0.343719273805618,0.683673620223999\n             ,-0.643775939941406,-0.190744638442993,0.965611159801483,-0.176667913794518,0.179054066538811,0.451375037431717\n             ,-0.8741854429245,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.809531450271606,0.353956669569016\n             ,0.468373239040375,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.794855117797852,0.412983626127243\n             ,-0.444578289985657,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.952340543270111,-0.189113721251488\n             ,0.239339768886566,0.905556082725525,-0.270015031099319,0.327200382947922,0.966925024986267,-0.254912257194519\n             ,-0.00869798846542835,0.952340543270111,-0.189113721251488,0.239339768886566,0.836283266544342,-0.213887274265289\n             ,0.504858911037445,0.780203700065613,-0.321272552013397,0.53671795129776,0.905556082725525,-0.270015031099319\n             ,0.327200382947922,0.836283266544342,-0.213887274265289,0.504858911037445,0.660950601100922,-0.242743700742722\n             ,0.71008437871933,0.485521018505096,-0.413983583450317,0.769991517066956,0.780203700065613,-0.321272552013397\n             ,0.53671795129776,0.477214813232422,-0.241928040981293,0.844829499721527,0.353479385375977,-0.210105717182159\n             ,0.911541521549225,0.081648163497448,-0.362786680459976,0.928288400173187,0.188842624425888,-0.479352325201035\n             ,0.857064664363861,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.158661097288132,-0.379611909389496\n             ,0.911439180374146,-0.0760671570897102,-0.295749187469482,0.952232241630554,0.109986312687397,-0.239039734005928\n             ,0.964760601520538,-0.52398544549942,-0.396743208169937,0.753680348396301,-0.158661097288132,-0.379611909389496\n             ,0.911439180374146,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.481494218111038,-0.48454275727272\n             ,0.730329811573029,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.790293157100677,-0.395322173833847\n             ,0.468142211437225,-0.75563770532608,-0.50673520565033,0.415007293224335,0.854438722133636,-0.0391706973314285\n             ,-0.518073558807373,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.932186603546143,-9.77104355115443e-006\n             ,-0.361978143453598,0.960243940353394,-0.113252773880959,-0.255157649517059,0.992983877658844,-0.0297704339027405\n             ,0.114441238343716,0.939164042472839,-0.287473499774933,0.187962368130684,0.946958303451538,-0.273756355047226\n             ,-0.168307527899742,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.992983877658844,-0.0297704339027405\n             ,0.114441238343716,0.915004968643188,-0.0659479200839996,0.398016005754471,0.821053445339203,-0.304968655109406\n             ,0.482561200857162,0.939164042472839,-0.287473499774933,0.187962368130684,0.915004968643188,-0.0659479200839996\n             ,0.398016005754471,0.755727231502533,-0.0899055525660515,0.648685872554779,0.658008575439453,-0.304749071598053\n             ,0.688587427139282,0.821053445339203,-0.304968655109406,0.482561200857162,0.353479385375977,-0.210105717182159\n             ,0.911541521549225,0.365955173969269,-0.121213011443615,0.922704815864563,0.0752642378211021,-0.163290247321129\n             ,0.983702957630157,0.081648163497448,-0.362786680459976,0.928288400173187,-0.184660717844963,-0.167485594749451\n             ,0.968426048755646,-0.141511112451553,-0.212750777602196,0.966804921627045,0.37811690568924,-0.192061543464661\n             ,0.90561580657959,0.326031237840652,-0.100235551595688,0.940030038356781,-0.641422271728516,-0.270271867513657\n             ,0.718004584312439,-0.481494218111038,-0.48454275727272,0.730329811573029,0.0231705605983734,-0.380178421735764\n             ,0.924622893333435,-0.0331847779452801,-0.163069307804108,0.986056327819824,-0.817183375358582,-0.296553403139114\n             ,0.494234204292297,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.481494218111038,-0.48454275727272\n             ,0.730329811573029,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.928428411483765,-0.296662479639053\n             ,0.223633751273155,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.75563770532608,-0.50673520565033\n             ,0.415007293224335,-0.925617933273315,-0.333309531211853,0.179265692830086,0.824556231498718,-0.0130053572356701\n             ,-0.565630555152893,0.79849648475647,0.00311785028316081,-0.601991355419159,0.906778931617737,0.0885622203350067\n             ,-0.412199825048447,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.989881575107574,0.137960970401764\n             ,0.0331847853958607,0.992983877658844,-0.0297704339027405,0.114441238343716,0.960284650325775,-0.0229552984237671\n             ,-0.278076320886612,0.937741100788116,0.0962117910385132,-0.333743721246719,0.915004968643188,-0.0659479200839996\n             ,0.398016005754471,0.992983877658844,-0.0297704339027405,0.114441238343716,0.989881575107574,0.137960970401764\n             ,0.0331847853958607,0.948979258537292,0.121414266526699,0.291027426719666,0.755727231502533,-0.0899055525660515\n             ,0.648685872554779,0.915004968643188,-0.0659479200839996,0.398016005754471,0.948979258537292,0.121414266526699\n             ,0.291027426719666,0.808870196342468,0.0797994136810303,0.582547068595886,0.365955173969269,-0.121213011443615\n             ,0.922704815864563,0.399412155151367,0.0118926726281643,0.916694343090057,0.0489731431007385,-0.0354295633733273\n             ,0.998171508312225,0.0752642378211021,-0.163290247321129,0.983702957630157,-0.274106293916702,-0.107289478182793\n             ,0.955695927143097,-0.184660717844963,-0.167485594749451,0.968426048755646,0.326031237840652,-0.100235551595688\n             ,0.940030038356781,0.309460699558258,0.0171790830790997,0.950757026672363,-0.641422271728516,-0.270271867513657\n             ,0.718004584312439,-0.0331847779452801,-0.163069307804108,0.986056327819824,-0.152441054582596,-0.013247330673039\n             ,0.988223791122437,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.817183375358582,-0.296553403139114\n             ,0.494234204292297,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.736215531826019,-0.133181735873222\n             ,0.663512825965881,-0.858429491519928,-0.151253908872604,0.490123569965363,0.79849648475647,0.00311785028316081\n             ,-0.601991355419159,0.770998120307922,0.0437404066324234,-0.63533353805542,0.899548053741455,0.145640388131142\n             ,-0.411827832460403,0.906778931617737,0.0885622203350067,-0.412199825048447,0.978495180606842,0.204968735575676\n             ,-0.0231311116367579,0.989881575107574,0.137960970401764,0.0331847853958607,0.937741100788116,0.0962117910385132\n             ,-0.333743721246719,0.927813827991486,0.152230933308601,-0.340569078922272,0.854383409023285,0.179303303360939\n             ,0.487728714942932,0.808870196342468,0.0797994136810303,0.582547068595886,0.948979258537292,0.121414266526699\n             ,0.291027426719666,0.961814522743225,0.194339916110039,0.1927300542593,-0.414724171161652,0.00967030972242355\n             ,0.909895837306976,-0.274106293916702,-0.107289478182793,0.955695927143097,0.309460699558258,0.0171790830790997\n             ,0.950757026672363,0.192327603697777,0.12894095480442,0.972822844982147,-0.951565086841583,-0.195825457572937\n             ,0.237015262246132,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.96939754486084,-0.16740058362484\n             ,0.179570108652115,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.987223207950592,-0.158936277031899\n             ,-0.0113820992410183,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.951565086841583,-0.195825457572937\n             ,0.237015262246132,-0.982540905475616,-0.173452958464623,0.0672866627573967,0.926154136657715,0.165854901075363\n             ,-0.3387191593647,0.922853767871857,-0.106967732310295,-0.369998395442963,0.978555917739868,-0.185044288635254\n             ,-0.090481773018837,0.978495180606842,0.204968735575676,-0.0231311116367579,0.927813827991486,0.152230933308601\n             ,-0.340569078922272,0.548670411109924,0.271492123603821,0.790729284286499,0.501937747001648,0.161304622888565\n             ,0.849728941917419,0.854383409023285,0.179303303360939,0.487728714942932,0.882719457149506,0.298290461301804\n             ,0.36308279633522,0.709650099277496,-0.321021109819412,0.627169966697693,0.47046023607254,0.569419384002686,0.674113273620605\n             ,-0.180715546011925,0.601944923400879,0.77782016992569,0.251838862895966,-0.440983474254608,0.861458539962769\n             ,0.251838862895966,-0.440983474254608,0.861458539962769,-0.180715546011925,0.601944923400879,0.77782016992569\n             ,-0.692504823207855,0.347807645797729,0.632033944129944,-0.337113708257675,-0.517143785953522,0.78671258687973\n             ,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.420417785644531,0.0594633929431438,0.905380010604858\n             ,-0.0315550751984119,0.227497562766075,0.973267257213593,0.192327603697777,0.12894095480442,0.972822844982147\n             ,-0.17640919983387,0.25873214006424,0.949703872203827,-0.244612783193588,0.231081768870354,0.941682457923889\n             ,-0.228005513548851,0.109595887362957,0.967472076416016,-0.128308832645416,0.135050818324089,0.982495844364166\n             ,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.929407715797424,-0.180255636572838,0.322039186954498\n             ,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.951565086841583,-0.195825457572937,0.237015262246132\n             ,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.941855192184448,-0.19358217716217,0.274653851985931\n             ,-0.98711097240448,-0.0946236401796341,0.129067301750183,-0.982540905475616,-0.173452958464623,0.0672866627573967\n             ,0.777039647102356,0.333707332611084,0.533712267875671,0.65978866815567,0.352559685707092,0.663611769676209,0.760879397392273\n             ,0.00385691528208554,0.648881912231445,0.501708924770355,0.238893568515778,0.831395208835602,0.690571069717407\n             ,0.287569731473923,0.66363787651062,0.509689807891846,0.284962385892868,0.811796009540558,0.324959099292755,0.210221484303474\n             ,0.922067523002625,0.114197269082069,0.229852244257927,0.96650242805481,0.328837275505066,-0.326990753412247\n             ,0.885970175266266,0.743318140506744,-0.232130751013756,0.627370238304138,0.810181796550751,0.205940678715706\n             ,0.548811316490173,-0.169450506567955,0.19207775592804,0.966639876365662,0.199919357895851,-0.342281520366669\n             ,0.918082594871521,0.328837275505066,-0.326990753412247,0.885970175266266,0.114197269082069,0.229852244257927\n             ,0.96650242805481,-0.234150588512421,0.240435913205147,0.942000031471252,-0.0315550751984119,0.227497562766075\n             ,0.973267257213593,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.708681702613831,0.0549901239573956\n             ,0.703382074832916,-0.284107565879822,0.352843284606934,0.891506910324097,-0.244612783193588,0.231081768870354\n             ,0.941682457923889,-0.17640919983387,0.25873214006424,0.949703872203827,-0.224652707576752,0.331979662179947\n             ,0.91614443063736,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.973927080631256,-0.0629245564341545\n             ,0.217960059642792,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.929407715797424,-0.180255636572838\n             ,0.322039186954498,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.98711097240448,-0.0946236401796341\n             ,0.129067301750183,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.973927080631256,-0.0629245564341545\n             ,0.217960059642792,0.405990958213806,0.468467801809311,0.784671425819397,0.317346751689911,0.64952027797699,0.690951824188232\n             ,0.509689807891846,0.284962385892868,0.811796009540558,0.690571069717407,0.287569731473923,0.66363787651062,0.114197269082069\n             ,0.229852244257927,0.96650242805481,0.810181796550751,0.205940678715706,0.548811316490173,0.382766664028168,0.693922400474548\n             ,0.609886407852173,-0.353388220071793,0.625863552093506,0.695278108119965,-0.169450506567955,0.19207775592804\n             ,0.966639876365662,0.114197269082069,0.229852244257927,0.96650242805481,-0.353388220071793,0.625863552093506\n             ,0.695278108119965,-0.596078813076019,0.546218574047089,0.588502645492554,-0.234150588512421,0.240435913205147\n             ,0.942000031471252,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.744610011577606,0.447527408599854\n             ,0.49525260925293,-0.514606833457947,0.383561730384827,0.766850829124451,-0.618925273418427,0.0886659994721413\n             ,0.780429303646088,-0.234150588512421,0.240435913205147,0.942000031471252,-0.514606833457947,0.383561730384827\n             ,0.766850829124451,-0.78737735748291,0.23807966709137,0.568643093109131,-0.284107565879822,0.352843284606934\n             ,0.891506910324097,-0.224652707576752,0.331979662179947,0.91614443063736,-0.702946484088898,0.346591114997864\n             ,0.621080338954926,0.47508293390274,0.0346805192530155,0.879257321357727,0.4305479824543,-0.135443344712257,0.89234721660614\n             ,0.755727231502533,-0.0899055525660515,0.648685872554779,0.808870196342468,0.0797994136810303,0.582547068595886\n             ,0.501937747001648,0.161304622888565,0.849728941917419,0.47508293390274,0.0346805192530155,0.879257321357727\n             ,0.808870196342468,0.0797994136810303,0.582547068595886,0.854383409023285,0.179303303360939,0.487728714942932\n             ,-0.0315550751984119,0.227497562766075,0.973267257213593,-0.234150588512421,0.240435913205147,0.942000031471252\n             ,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.537278592586517,0.0936881303787231,0.83818507194519\n             ,0.192327603697777,0.12894095480442,0.972822844982147,-0.0315550751984119,0.227497562766075,0.973267257213593\n             ,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.414724171161652,0.00967030972242355,0.909895837306976\n             ,0.961814522743225,0.194339916110039,0.1927300542593,0.922054708003998,0.046831239014864,0.384216070175171,0.882719457149506\n             ,0.298290461301804,0.36308279633522,0.854383409023285,0.179303303360939,0.487728714942932,0.882719457149506,0.298290461301804\n             ,0.36308279633522,0.7165766954422,0.119066134095192,0.687270760536194,0.564793407917023,-0.0494600534439087,0.823748826980591\n             ,0.65978866815567,0.352559685707092,0.663611769676209,0.978495180606842,0.204968735575676,-0.0231311116367579\n             ,0.983711898326874,-0.176273837685585,0.0351918712258339,0.922054708003998,0.046831239014864,0.384216070175171\n             ,0.961814522743225,0.194339916110039,0.1927300542593,0.948979258537292,0.121414266526699,0.291027426719666,0.989881575107574\n             ,0.137960970401764,0.0331847853958607,0.978495180606842,0.204968735575676,-0.0231311116367579,0.961814522743225\n             ,0.194339916110039,0.1927300542593,0.778017222881317,0.0114749372005463,0.62813812494278,0.509491503238678,0.564498364925385\n             ,0.649430513381958,-0.110789246857166,0.611093282699585,0.78376704454422,0.129216074943542,-0.0478254444897175\n             ,0.990462481975555,0.129216074943542,-0.0478254444897175,0.990462481975555,-0.110789246857166,0.611093282699585\n             ,0.78376704454422,-0.611190378665924,0.347120583057404,0.711304187774658,-0.549654603004456,-0.190786048769951\n             ,0.8133145570755,-0.279066264629364,0.00181216315831989,0.96027010679245,0.192327603697777,0.12894095480442,0.972822844982147\n             ,0.309460699558258,0.0171790830790997,0.950757026672363,-0.243933483958244,-0.119538404047489,0.962396502494812\n             ,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.858429491519928,-0.151253908872604,0.490123569965363\n             ,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.754620730876923,-0.101689904928207,0.648233532905579\n             ,0.433499962091446,-0.540944635868073,-0.720733463764191,0.198074012994766,-0.129640698432922,-0.971576035022736\n             ,0.385900169610977,-0.542145550251007,-0.746431052684784,0.757972776889801,-0.133172035217285,-0.63854718208313\n             ,0.883931815624237,-0.461925357580185,-0.0727289691567421,0.495510667562485,-0.864618837833405,-0.0830870270729065\n             ,0.437477648258209,-0.839490532875061,0.322287112474442,0.828140437602997,-0.416388809680939,0.375238239765167\n             ,0.69633674621582,-0.401266545057297,0.595063328742981,0.828140437602997,-0.416388809680939,0.375238239765167\n             ,0.437477648258209,-0.839490532875061,0.322287112474442,0.295071959495544,-0.836212575435638,0.462256461381912\n             ,0.69633674621582,-0.401266545057297,0.595063328742981,0.295071959495544,-0.836212575435638,0.462256461381912\n             ,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.495204418897629,-0.163849160075188,0.853185832500458\n             ,0.127582147717476,-0.649050772190094,0.749970614910126,0.0833947658538818,-0.437338054180145,0.895422101020813\n             ,-0.453684002161026,-0.692797005176544,0.560538291931152,-0.0995030105113983,-0.912258505821228,0.39734560251236\n             ,0.00337490346282721,-0.386369347572327,0.92233794927597,0.689028441905975,-0.416694343090057,0.592963397502899\n             ,0.776257395744324,-0.559177398681641,0.291110157966614,0.631964325904846,-0.724000632762909,0.276485413312912\n             ,-0.011982899159193,-0.684736132621765,0.728692591190338,0.00337490346282721,-0.386369347572327,0.92233794927597\n             ,0.631964325904846,-0.724000632762909,0.276485413312912,0.4933140873909,-0.832423627376556,0.252412617206573\n             ,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.011982899159193,-0.684736132621765,0.728692591190338\n             ,0.4933140873909,-0.832423627376556,0.252412617206573,0.405342906713486,-0.871097266674042,0.277284443378448\n             ,-0.227918326854706,-0.765941560268402,0.601154506206512,0.405342906713486,-0.871097266674042,0.277284443378448\n             ,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.805050849914551,-0.582361280918121,0.112909138202667\n             ,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.727824807167053,-0.528583109378815,-0.436887800693512\n             ,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.557889223098755,-0.23755519092083,-0.7951899766922\n             ,0.433499962091446,-0.540944635868073,-0.720733463764191,0.370678871870041,0.354065299034119,-0.858623862266541\n             ,0.116842739284039,-0.105540536344051,-0.987526714801788,0.198074012994766,-0.129640698432922,-0.971576035022736\n             ,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.586520671844482,-0.278485208749771,-0.760552048683167\n             ,-0.557889223098755,-0.23755519092083,-0.7951899766922,-0.661859035491943,-0.0551192909479141,-0.747599124908447\n             ,0.116842739284039,-0.105540536344051,-0.987526714801788,0.370678871870041,0.354065299034119,-0.858623862266541\n             ,-0.00303205195814371,-0.243413895368576,-0.969917774200439,0.0670028999447823,-0.229776233434677,-0.970934331417084\n             ,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.722859144210815,-0.480000674724579,-0.497065395116806\n             ,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.725514113903046,-0.0050869844853878,-0.688188493251801\n             ,-0.747647523880005,-0.00706110056489706,-0.664058268070221,-0.733602643013,0.104122340679169,-0.671554684638977\n             ,-0.747647523880005,-0.00706110056489706,-0.664058268070221,-0.725514113903046,-0.0050869844853878,-0.688188493251801\n             ,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.733602643013,0.104122340679169,-0.671554684638977\n             ,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.827176213264465,0.131099432706833,-0.546436131000519\n             ,-0.733602643013,0.104122340679169,-0.671554684638977,-0.827176213264465,0.131099432706833,-0.546436131000519\n             ,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.784134566783905,-0.509350836277008,-0.354534596204758\n             ,0.11270098388195,0.815884530544281,-0.567125082015991,-0.277701437473297,0.780102908611298,-0.56064373254776\n             ,-0.171155840158463,0.985165357589722,0.0124461855739355,0.227652028203011,0.973727345466614,-0.0054389201104641\n             ,-0.423373013734818,0.789847135543823,0.443730562925339,-0.460725039243698,0.8605055809021,0.217399582266808\n             ,-0.245494201779366,0.895091235637665,0.372215330600739,-0.1829604357481,0.769297182559967,0.61213344335556,-0.594437062740326\n             ,0.745864152908325,0.300551623106003,-0.664495587348938,0.716933071613312,0.210837796330452,-0.590883314609528\n             ,0.718779802322388,0.366350263357162,-0.498491138219833,0.755745649337769,0.424682348966599,-0.664495587348938\n             ,0.716933071613312,0.210837796330452,-0.759507477283478,0.648222267627716,-0.0543712638318539,-0.744540989398956\n             ,0.615887403488159,0.257568180561066,-0.590883314609528,0.718779802322388,0.366350263357162,-0.727959036827087\n             ,0.661616802215576,-0.179830119013786,-0.748579859733582,0.631325542926788,0.202623516321182,-0.737479329109192\n             ,0.641141176223755,0.212278604507446,-0.727798759937286,0.645060181617737,-0.232822522521019,-0.727959036827087\n             ,0.661616802215576,-0.179830119013786,-0.793396532535553,0.592922508716583,-0.137712955474854,-0.856980979442596\n             ,0.504014492034912,0.107484914362431,-0.748579859733582,0.631325542926788,0.202623516321182,-0.833821058273315\n             ,0.528545200824738,-0.159318462014198,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.856980979442596\n             ,0.504014492034912,0.107484914362431,-0.793396532535553,0.592922508716583,-0.137712955474854,-0.948116004467011\n             ,0.0624199733138084,0.311736673116684,-0.886275291442871,0.375701189041138,0.270859181880951,-0.603576362133026\n             ,-0.735800743103027,0.307071357965469,-0.989869713783264,-0.139774799346924,-0.0249191801995039,0.495204418897629\n             ,-0.163849160075188,0.853185832500458,-0.0664141848683357,-0.803863763809204,0.591094017028809,-0.453684002161026\n             ,-0.692797005176544,0.560538291931152,0.0833947658538818,-0.437338054180145,0.895422101020813,0.689028441905975\n             ,-0.416694343090057,0.592963397502899,0.419214755296707,-0.523533642292023,0.741735517978668,0.552227675914764\n             ,-0.748098790645599,0.367957681417465,0.877826869487762,-0.373567342758179,0.299778997898102,0.845922589302063\n             ,-0.233836695551872,-0.479307234287262,0.385900169610977,-0.542145550251007,-0.746431052684784,0.198074012994766\n             ,-0.129640698432922,-0.971576035022736,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.437477648258209\n             ,-0.839490532875061,0.322287112474442,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.966925024986267\n             ,-0.254912257194519,-0.00869798846542835,0.905556082725525,-0.270015031099319,0.327200382947922,0.295071959495544\n             ,-0.836212575435638,0.462256461381912,0.437477648258209,-0.839490532875061,0.322287112474442,0.905556082725525\n             ,-0.270015031099319,0.327200382947922,0.780203700065613,-0.321272552013397,0.53671795129776,-0.0664141848683357\n             ,-0.803863763809204,0.591094017028809,0.295071959495544,-0.836212575435638,0.462256461381912,0.780203700065613\n             ,-0.321272552013397,0.53671795129776,0.485521018505096,-0.413983583450317,0.769991517066956,0.081648163497448\n             ,-0.362786680459976,0.928288400173187,-0.0995030105113983,-0.912258505821228,0.39734560251236,-0.453684002161026\n             ,-0.692797005176544,0.560538291931152,0.188842624425888,-0.479352325201035,0.857064664363861,0.322147607803345\n             ,-0.331866294145584,0.886614739894867,0.187207460403442,-0.466673761606216,0.864389359951019,0.776257395744324\n             ,-0.559177398681641,0.291110157966614,0.877826869487762,-0.373567342758179,0.299778997898102,-0.215633437037468\n             ,-0.617008090019226,0.756837606430054,0.4933140873909,-0.832423627376556,0.252412617206573,0.631964325904846\n             ,-0.724000632762909,0.276485413312912,0.0384484939277172,-0.525311291217804,0.850041031837463,-0.505574762821198\n             ,-0.704972326755524,0.49740144610405,0.405342906713486,-0.871097266674042,0.277284443378448,0.4933140873909,-0.832423627376556\n             ,0.252412617206573,-0.215633437037468,-0.617008090019226,0.756837606430054,-0.648859262466431,-0.732072472572327\n             ,0.20748870074749,0.182749971747398,-0.981905281543732,-0.0496433302760124,0.405342906713486,-0.871097266674042\n             ,0.277284443378448,-0.505574762821198,-0.704972326755524,0.49740144610405,-0.557889223098755,-0.23755519092083\n             ,-0.7951899766922,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.724748373031616,-0.680762529373169\n             ,-0.106311395764351,-0.913924396038055,-0.399497091770172,-0.0717232823371887,0.198074012994766,-0.129640698432922\n             ,-0.971576035022736,0.116842739284039,-0.105540536344051,-0.987526714801788,0.824556231498718,-0.0130053572356701\n             ,-0.565630555152893,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.0752642378211021,-0.163290247321129\n             ,0.983702957630157,0.584701359272003,-0.0801372230052948,0.807280838489532,-0.0995030105113983,-0.912258505821228\n             ,0.39734560251236,0.081648163497448,-0.362786680459976,0.928288400173187,-0.977448999881744,-0.204651221632957\n             ,-0.0520704686641693,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.557889223098755,-0.23755519092083\n             ,-0.7951899766922,-0.913924396038055,-0.399497091770172,-0.0717232823371887,0.824556231498718,-0.0130053572356701\n             ,-0.565630555152893,0.116842739284039,-0.105540536344051,-0.987526714801788,0.0670028999447823,-0.229776233434677\n             ,-0.970934331417084,0.79849648475647,0.00311785028316081,-0.601991355419159,0.584701359272003,-0.0801372230052948\n             ,0.807280838489532,0.0752642378211021,-0.163290247321129,0.983702957630157,0.0489731431007385,-0.0354295633733273\n             ,0.998171508312225,0.528049111366272,-0.00915573351085186,0.849164485931396,-0.725514113903046,-0.0050869844853878\n             ,-0.688188493251801,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.977448999881744,-0.204651221632957\n             ,-0.0520704686641693,-0.987223207950592,-0.158936277031899,-0.0113820992410183,0.79849648475647,0.00311785028316081\n             ,-0.601991355419159,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.0755608975887299,-0.262402594089508\n             ,-0.961995542049408,0.770998120307922,0.0437404066324234,-0.63533353805542,0.784979939460754,0.0750055387616158\n             ,-0.614963889122009,0.772511541843414,0.0615992993116379,-0.632005870342255,0.214329496026039,-0.204933792352676\n             ,-0.95502096414566,0.320743799209595,-0.127513855695724,-0.938543379306793,-0.827176213264465,0.131099432706833\n             ,-0.546436131000519,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.982540905475616,-0.173452958464623\n             ,0.0672866627573967,-0.98711097240448,-0.0946236401796341,0.129067301750183,0.798663914203644,0.0795769542455673\n             ,-0.596492648124695,0.265012234449387,-0.116133384406567,-0.957225978374481,0.119323797523975,0.10215725004673\n             ,-0.987585842609406,0.775733590126038,0.173521965742111,-0.606735110282898,-0.87356162071228,0.247192814946175\n             ,-0.419268190860748,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.98711097240448,-0.0946236401796341\n             ,0.129067301750183,-0.991252839565277,0.0431834943592548,0.124711617827415,0.73961067199707,0.263024806976318\n             ,-0.619511127471924,0.0699164718389511,0.326290965080261,-0.942680180072784,0.11270098388195,0.815884530544281\n             ,-0.567125082015991,0.792211890220642,0.491865277290344,-0.361204653978348,0.405990958213806,0.468467801809311\n             ,0.784671425819397,-0.1829604357481,0.769297182559967,0.61213344335556,-0.245494201779366,0.895091235637665,0.372215330600739\n             ,0.317346751689911,0.64952027797699,0.690951824188232,-0.0522431507706642,0.792317688465118,0.607867777347565\n             ,-0.498491138219833,0.755745649337769,0.424682348966599,-0.590883314609528,0.718779802322388,0.366350263357162\n             ,-0.594345927238464,0.730467915534973,0.336406856775284,-0.594345927238464,0.730467915534973,0.336406856775284\n             ,-0.590883314609528,0.718779802322388,0.366350263357162,-0.744540989398956,0.615887403488159,0.257568180561066\n             ,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744610011577606,0.447527408599854,0.49525260925293\n             ,-0.737479329109192,0.641141176223755,0.212278604507446,-0.748579859733582,0.631325542926788,0.202623516321182\n             ,-0.514606833457947,0.383561730384827,0.766850829124451,-0.514606833457947,0.383561730384827,0.766850829124451\n             ,-0.748579859733582,0.631325542926788,0.202623516321182,-0.856980979442596,0.504014492034912,0.107484914362431\n             ,-0.78737735748291,0.23807966709137,0.568643093109131,-0.882953405380249,0.46945133805275,0.00294615048915148\n             ,-0.702946484088898,0.346591114997864,0.621080338954926,-0.78737735748291,0.23807966709137,0.568643093109131\n             ,-0.856980979442596,0.504014492034912,0.107484914362431,-0.948116004467011,0.0624199733138084,0.311736673116684\n             ,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.989299476146698,0.112728737294674,0.0926214382052422\n             ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.453684002161026,-0.692797005176544,0.560538291931152\n             ,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.485521018505096,-0.413983583450317,0.769991517066956\n             ,0.188842624425888,-0.479352325201035,0.857064664363861,0.552227675914764,-0.748098790645599,0.367957681417465\n             ,-0.204973682761192,-0.221624344587326,0.953345894813538,0.326031237840652,-0.100235551595688,0.940030038356781\n             ,0.37811690568924,-0.192061543464661,0.90561580657959,0.877826869487762,-0.373567342758179,0.299778997898102\n             ,0.552227675914764,-0.748098790645599,0.367957681417465,0.37811690568924,-0.192061543464661,0.90561580657959\n             ,0.322147607803345,-0.331866294145584,0.886614739894867,-0.00303205195814371,-0.243413895368576,-0.969917774200439\n             ,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.0755608975887299,-0.262402594089508,-0.961995542049408\n             ,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.439302206039429,0.130682423710823,0.888783276081085\n             ,0.501708924770355,0.238893568515778,0.831395208835602,0.324959099292755,0.210221484303474,0.922067523002625\n             ,0.120599403977394,0.0903128907084465,0.988584518432617,0.713191568851471,-0.57269150018692,0.404205650091171\n             ,0.801663935184479,-0.0182420387864113,0.597496569156647,0.159226432442665,-0.153974950313568,0.975160837173462\n             ,0.236816734075546,-0.796482741832733,0.556356966495514,0.127582147717476,-0.649050772190094,0.749970614910126\n             ,-0.0995030105113983,-0.912258505821228,0.39734560251236,0.164029166102409,-0.97451639175415,-0.153010532259941\n             ,0.261260062456131,-0.761487662792206,0.593194544315338,0.755727231502533,-0.0899055525660515,0.648685872554779\n             ,0.4305479824543,-0.135443344712257,0.89234721660614,0.356381446123123,-0.306900352239609,0.882498979568481,0.658008575439453\n             ,-0.304749071598053,0.688587427139282,-0.141511112451553,-0.212750777602196,0.966804921627045,0.322147607803345\n             ,-0.331866294145584,0.886614739894867,0.37811690568924,-0.192061543464661,0.90561580657959,0.776257395744324\n             ,-0.559177398681641,0.291110157966614,0.689028441905975,-0.416694343090057,0.592963397502899,0.877826869487762\n             ,-0.373567342758179,0.299778997898102,0.399412155151367,0.0118926726281643,0.916694343090057,0.439302206039429\n             ,0.130682423710823,0.888783276081085,0.120599403977394,0.0903128907084465,0.988584518432617,0.0489731431007385\n             ,-0.0354295633733273,0.998171508312225,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.120599403977394\n             ,0.0903128907084465,0.988584518432617,0.460760354995728,0.108215063810349,0.880902588367462,0.528049111366272\n             ,-0.00915573351085186,0.849164485931396,0.120599403977394,0.0903128907084465,0.988584518432617,0.324959099292755\n             ,0.210221484303474,0.922067523002625,0.565941989421844,0.17062908411026,0.806594908237457,0.460760354995728,0.108215063810349\n             ,0.880902588367462,0.778803884983063,0.240923345088959,0.579154968261719,0.565941989421844,0.17062908411026,0.806594908237457\n             ,0.324959099292755,0.210221484303474,0.922067523002625,0.509689807891846,0.284962385892868,0.811796009540558\n             ,0.778803884983063,0.240923345088959,0.579154968261719,0.509689807891846,0.284962385892868,0.811796009540558\n             ,0.317346751689911,0.64952027797699,0.690951824188232,-0.0522431507706642,0.792317688465118,0.607867777347565\n             ,0.317346751689911,0.64952027797699,0.690951824188232,-0.245494201779366,0.895091235637665,0.372215330600739\n             ,-0.498491138219833,0.755745649337769,0.424682348966599,-0.0522431507706642,0.792317688465118,0.607867777347565\n             ,-0.460725039243698,0.8605055809021,0.217399582266808,-0.594437062740326,0.745864152908325,0.300551623106003\n             ,-0.498491138219833,0.755745649337769,0.424682348966599,-0.245494201779366,0.895091235637665,0.372215330600739\n             ,-0.243933483958244,-0.119538404047489,0.962396502494812,0.309460699558258,0.0171790830790997,0.950757026672363\n             ,0.326031237840652,-0.100235551595688,0.940030038356781,-0.204973682761192,-0.221624344587326,0.953345894813538\n             ,0.159226432442665,-0.153974950313568,0.975160837173462,0.129216074943542,-0.0478254444897175,0.990462481975555\n             ,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.501740396022797,-0.243245616555214,0.830113351345062\n             ,0.801663935184479,-0.0182420387864113,0.597496569156647,0.778017222881317,0.0114749372005463,0.62813812494278\n             ,0.129216074943542,-0.0478254444897175,0.990462481975555,0.159226432442665,-0.153974950313568,0.975160837173462\n             ,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.385900169610977,-0.542145550251007,-0.746431052684784\n             ,0.845922589302063,-0.233836695551872,-0.479307234287262,0.966925024986267,-0.254912257194519,-0.00869798846542835\n             ,0.757972776889801,-0.133172035217285,-0.63854718208313,0.385900169610977,-0.542145550251007,-0.746431052684784\n             ,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.883931815624237,-0.461925357580185,-0.0727289691567421\n             ,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.250410139560699,-0.715217709541321,-0.65250164270401\n             ,-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.805050849914551,-0.582361280918121,0.112909138202667\n             ,-0.724748373031616,-0.680762529373169,-0.106311395764351,-0.250410139560699,-0.715217709541321,-0.65250164270401\n             ,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.648859262466431,-0.732072472572327,0.20748870074749\n             ,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.806389153003693,-0.12540277838707,0.577936589717865\n             ,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.784406840801239,0.0822488218545914,0.614769160747528\n             ,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.417345523834229,-0.483428627252579,0.769492983818054\n             ,0.199919357895851,-0.342281520366669,0.918082594871521,-0.169450506567955,0.19207775592804,0.966639876365662\n             ,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.169450506567955,0.19207775592804,0.966639876365662\n             ,-0.596078813076019,0.546218574047089,0.588502645492554,-0.924569010734558,0.246832668781281,0.290251165628433\n             ,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744540989398956,0.615887403488159,0.257568180561066\n             ,-0.737479329109192,0.641141176223755,0.212278604507446,-0.744610011577606,0.447527408599854,0.49525260925293\n             ,-0.727798759937286,0.645060181617737,-0.232822522521019,-0.737479329109192,0.641141176223755,0.212278604507446\n             ,-0.744540989398956,0.615887403488159,0.257568180561066,-0.759507477283478,0.648222267627716,-0.0543712638318539\n             ,-0.987223207950592,-0.158936277031899,-0.0113820992410183,-0.982540905475616,-0.173452958464623,0.0672866627573967\n             ,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.725514113903046,-0.0050869844853878,-0.688188493251801\n             ,0.460760354995728,0.108215063810349,0.880902588367462,0.565941989421844,0.17062908411026,0.806594908237457,0.47046023607254\n             ,0.569419384002686,0.674113273620605,0.709650099277496,-0.321021109819412,0.627169966697693,0.47046023607254\n             ,0.569419384002686,0.674113273620605,0.565941989421844,0.17062908411026,0.806594908237457,0.238703370094299,-0.21425598859787\n             ,0.947161555290222,-0.180715546011925,0.601944923400879,0.77782016992569,-0.692504823207855,0.347807645797729\n             ,0.632033944129944,-0.180715546011925,0.601944923400879,0.77782016992569,0.238703370094299,-0.21425598859787\n             ,0.947161555290222,-0.420417785644531,0.0594633929431438,0.905380010604858,0.565941989421844,0.17062908411026\n             ,0.806594908237457,0.778803884983063,0.240923345088959,0.579154968261719,0.810181796550751,0.205940678715706\n             ,0.548811316490173,0.743318140506744,-0.232130751013756,0.627370238304138,0.328837275505066,-0.326990753412247\n             ,0.885970175266266,0.238703370094299,-0.21425598859787,0.947161555290222,0.565941989421844,0.17062908411026,0.806594908237457\n             ,0.743318140506744,-0.232130751013756,0.627370238304138,0.810181796550751,0.205940678715706,0.548811316490173\n             ,0.778803884983063,0.240923345088959,0.579154968261719,-0.0522431507706642,0.792317688465118,0.607867777347565\n             ,0.382766664028168,0.693922400474548,0.609886407852173,-0.0522431507706642,0.792317688465118,0.607867777347565\n             ,-0.594345927238464,0.730467915534973,0.336406856775284,-0.353388220071793,0.625863552093506,0.695278108119965\n             ,0.382766664028168,0.693922400474548,0.609886407852173,-0.594345927238464,0.730467915534973,0.336406856775284\n             ,-0.724499702453613,0.627744674682617,0.284669786691666,-0.596078813076019,0.546218574047089,0.588502645492554\n             ,-0.353388220071793,0.625863552093506,0.695278108119965,0.509491503238678,0.564498364925385,0.649430513381958\n             ,0.460760354995728,0.108215063810349,0.880902588367462,0.0749799236655235,0.161466613411903,0.984025657176971\n             ,-0.110789246857166,0.611093282699585,0.78376704454422,-0.110789246857166,0.611093282699585,0.78376704454422\n             ,0.0749799236655235,0.161466613411903,0.984025657176971,-0.279066264629364,0.00181216315831989,0.96027010679245\n             ,-0.611190378665924,0.347120583057404,0.711304187774658,0.778017222881317,0.0114749372005463,0.62813812494278\n             ,0.528049111366272,-0.00915573351085186,0.849164485931396,0.460760354995728,0.108215063810349,0.880902588367462\n             ,0.509491503238678,0.564498364925385,0.649430513381958,0.801663935184479,-0.0182420387864113,0.597496569156647\n             ,0.584701359272003,-0.0801372230052948,0.807280838489532,0.528049111366272,-0.00915573351085186,0.849164485931396\n             ,0.778017222881317,0.0114749372005463,0.62813812494278,-0.0995030105113983,-0.912258505821228,0.39734560251236\n             ,0.584701359272003,-0.0801372230052948,0.807280838489532,0.801663935184479,-0.0182420387864113,0.597496569156647\n             ,0.713191568851471,-0.57269150018692,0.404205650091171,-0.0995030105113983,-0.912258505821228,0.39734560251236\n             ,0.713191568851471,-0.57269150018692,0.404205650091171,0.236816734075546,-0.796482741832733,0.556356966495514\n             ,0.164029166102409,-0.97451639175415,-0.153010532259941,-0.204973682761192,-0.221624344587326,0.953345894813538\n             ,0.552227675914764,-0.748098790645599,0.367957681417465,-0.274976640939713,-0.741328597068787,0.612225234508514\n             ,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.549654603004456,-0.190786048769951,0.8133145570755\n             ,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.204973682761192,-0.221624344587326,0.953345894813538\n             ,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.549654603004456,-0.190786048769951,0.8133145570755\n             ,-0.611190378665924,0.347120583057404,0.711304187774658,-0.279066264629364,0.00181216315831989,0.96027010679245\n             ,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.420417785644531,0.0594633929431438,0.905380010604858\n             ,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.337113708257675,-0.517143785953522,0.78671258687973\n             ,-0.692504823207855,0.347807645797729,0.632033944129944,0.251838862895966,-0.440983474254608,0.861458539962769\n             ,-0.337113708257675,-0.517143785953522,0.78671258687973,-0.279066264629364,0.00181216315831989,0.96027010679245\n             ,0.0749799236655235,0.161466613411903,0.984025657176971,-0.708681702613831,0.0549901239573956,0.703382074832916\n             ,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.417345523834229,-0.483428627252579,0.769492983818054\n             ,-0.840604901313782,-0.077635757625103,0.536056041717529,0.199919357895851,-0.342281520366669,0.918082594871521\n             ,-0.417345523834229,-0.483428627252579,0.769492983818054,-0.420417785644531,0.0594633929431438,0.905380010604858\n             ,0.238703370094299,-0.21425598859787,0.947161555290222,-0.708681702613831,0.0549901239573956,0.703382074832916\n             ,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.924569010734558,0.246832668781281,0.290251165628433\n             ,-0.744610011577606,0.447527408599854,0.49525260925293,-0.724499702453613,0.627744674682617,0.284669786691666\n             ,-0.744610011577606,0.447527408599854,0.49525260925293,-0.924569010734558,0.246832668781281,0.290251165628433\n             ,-0.596078813076019,0.546218574047089,0.588502645492554,0.236816734075546,-0.796482741832733,0.556356966495514\n             ,0.159226432442665,-0.153974950313568,0.975160837173462,-0.501740396022797,-0.243245616555214,0.830113351345062\n             ,-0.274976640939713,-0.741328597068787,0.612225234508514,0.164029166102409,-0.97451639175415,-0.153010532259941\n             ,0.236816734075546,-0.796482741832733,0.556356966495514,-0.274976640939713,-0.741328597068787,0.612225234508514\n             ,0.552227675914764,-0.748098790645599,0.367957681417465,0.261260062456131,-0.761487662792206,0.593194544315338\n             ,0.164029166102409,-0.97451639175415,-0.153010532259941,0.552227675914764,-0.748098790645599,0.367957681417465\n             ,0.419214755296707,-0.523533642292023,0.741735517978668,0.265012234449387,-0.116133384406567,-0.957225978374481\n             ,-0.313530147075653,0.0253957733511925,-0.94923859834671,0.119323797523975,0.10215725004673,-0.987585842609406\n             ,0.917835712432861,0.197176292538643,-0.344527393579483,0.90627920627594,0.138545647263527,-0.399328351020813\n             ,0.798663914203644,0.0795769542455673,-0.596492648124695,0.775733590126038,0.173521965742111,-0.606735110282898\n             ,0.690571069717407,0.287569731473923,0.66363787651062,0.777039647102356,0.333707332611084,0.533712267875671,0.457932114601135\n             ,0.272002577781677,0.846352636814117,0.405990958213806,0.468467801809311,0.784671425819397,0.690571069717407\n             ,0.287569731473923,0.66363787651062,0.501708924770355,0.238893568515778,0.831395208835602,0.548670411109924,0.271492123603821\n             ,0.790729284286499,0.777039647102356,0.333707332611084,0.533712267875671,0.501708924770355,0.238893568515778\n             ,0.831395208835602,0.439302206039429,0.130682423710823,0.888783276081085,0.501937747001648,0.161304622888565\n             ,0.849728941917419,0.548670411109924,0.271492123603821,0.790729284286499,0.399412155151367,0.0118926726281643\n             ,0.916694343090057,0.47508293390274,0.0346805192530155,0.879257321357727,0.501937747001648,0.161304622888565\n             ,0.849728941917419,0.439302206039429,0.130682423710823,0.888783276081085,0.399412155151367,0.0118926726281643\n             ,0.916694343090057,0.365955173969269,-0.121213011443615,0.922704815864563,0.4305479824543,-0.135443344712257\n             ,0.89234721660614,0.47508293390274,0.0346805192530155,0.879257321357727,0.477214813232422,-0.241928040981293\n             ,0.844829499721527,0.356381446123123,-0.306900352239609,0.882498979568481,0.353479385375977,-0.210105717182159\n             ,0.911541521549225,0.658008575439453,-0.304749071598053,0.688587427139282,0.356381446123123,-0.306900352239609\n             ,0.882498979568481,0.477214813232422,-0.241928040981293,0.844829499721527,0.660950601100922,-0.242743700742722\n             ,0.71008437871933,0.821053445339203,-0.304968655109406,0.482561200857162,0.658008575439453,-0.304749071598053\n             ,0.688587427139282,0.660950601100922,-0.242743700742722,0.71008437871933,0.836283266544342,-0.213887274265289\n             ,0.504858911037445,0.939164042472839,-0.287473499774933,0.187962368130684,0.821053445339203,-0.304968655109406\n             ,0.482561200857162,0.836283266544342,-0.213887274265289,0.504858911037445,0.952340543270111,-0.189113721251488\n             ,0.239339768886566,0.960243940353394,-0.113252773880959,-0.255157649517059,0.946958303451538,-0.273756355047226\n             ,-0.168307527899742,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.960284650325775,-0.0229552984237671\n             ,-0.278076320886612,0.946958303451538,-0.273756355047226,-0.168307527899742,0.960243940353394,-0.113252773880959\n             ,-0.255157649517059,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.960284650325775,-0.0229552984237671\n             ,-0.278076320886612,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.906778931617737,0.0885622203350067\n             ,-0.412199825048447,0.937741100788116,0.0962117910385132,-0.333743721246719,0.937741100788116,0.0962117910385132\n             ,-0.333743721246719,0.906778931617737,0.0885622203350067,-0.412199825048447,0.899548053741455,0.145640388131142\n             ,-0.411827832460403,0.927813827991486,0.152230933308601,-0.340569078922272,0.926154136657715,0.165854901075363\n             ,-0.3387191593647,0.902734816074371,0.140678882598877,-0.406545639038086,0.904744982719421,0.140758752822876\n             ,-0.402024179697037,0.93531322479248,0.178703308105469,-0.305375546216965,0.90627920627594,0.138545647263527\n             ,-0.399328351020813,0.917835712432861,0.197176292538643,-0.344527393579483,0.920450210571289,0.249687507748604\n             ,-0.300711780786514,0.946711003780365,0.167055711150169,-0.275373607873917,0.73961067199707,0.263024806976318\n             ,-0.619511127471924,0.917835712432861,0.197176292538643,-0.344527393579483,0.775733590126038,0.173521965742111\n             ,-0.606735110282898,0.227652028203011,0.973727345466614,-0.0054389201104641,0.781636536121368,0.602840006351471\n             ,-0.160088449716568,0.792211890220642,0.491865277290344,-0.361204653978348,0.11270098388195,0.815884530544281\n             ,-0.567125082015991,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.946958303451538,-0.273756355047226\n             ,-0.168307527899742,0.939164042472839,-0.287473499774933,0.187962368130684,0.952340543270111,-0.189113721251488\n             ,0.239339768886566,0.353479385375977,-0.210105717182159,0.911541521549225,0.356381446123123,-0.306900352239609\n             ,0.882498979568481,0.4305479824543,-0.135443344712257,0.89234721660614,0.365955173969269,-0.121213011443615,0.922704815864563\n             ,0.660950601100922,-0.242743700742722,0.71008437871933,0.477214813232422,-0.241928040981293,0.844829499721527\n             ,0.188842624425888,-0.479352325201035,0.857064664363861,0.485521018505096,-0.413983583450317,0.769991517066956\n             ,-0.228005513548851,0.109595887362957,0.967472076416016,-0.152441054582596,-0.013247330673039,0.988223791122437\n             ,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.128308832645416,0.135050818324089,0.982495844364166\n             ,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.0331847779452801,-0.163069307804108,0.986056327819824\n             ,0.125946626067162,-0.109786443412304,0.985943377017975,0.00481598870828748,-0.00974012352526188,0.999940931797028\n             ,-0.0331847779452801,-0.163069307804108,0.986056327819824,0.0231705605983734,-0.380178421735764,0.924622893333435\n             ,0.109986312687397,-0.239039734005928,0.964760601520538,0.125946626067162,-0.109786443412304,0.985943377017975\n             ,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.928428411483765,-0.296662479639053,0.223633751273155\n             ,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.987223207950592,-0.158936277031899,-0.0113820992410183\n             ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.890410006046295,0.22136127948761,0.397704929113388\n             ,-0.888629198074341,0.438762098550797,0.133514106273651,-0.948116004467011,0.0624199733138084,0.311736673116684\n             ,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.784406840801239,0.0822488218545914,0.614769160747528\n             ,-0.890410006046295,0.22136127948761,0.397704929113388,-0.953436672687531,0.152786508202553,0.260028511285782\n             ,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.754620730876923,-0.101689904928207,0.648233532905579\n             ,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.806389153003693,-0.12540277838707,0.577936589717865\n             ,-0.890410006046295,0.22136127948761,0.397704929113388,-0.702946484088898,0.346591114997864,0.621080338954926\n             ,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.888629198074341,0.438762098550797,0.133514106273651\n             ,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.284107565879822,0.352843284606934,0.891506910324097\n             ,-0.702946484088898,0.346591114997864,0.621080338954926,-0.890410006046295,0.22136127948761,0.397704929113388\n             ,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.244612783193588,0.231081768870354,0.941682457923889\n             ,-0.284107565879822,0.352843284606934,0.891506910324097,-0.784406840801239,0.0822488218545914,0.614769160747528\n             ,-0.228005513548851,0.109595887362957,0.967472076416016,-0.244612783193588,0.231081768870354,0.941682457923889\n             ,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.754620730876923,-0.101689904928207,0.648233532905579\n             ,-0.754620730876923,-0.101689904928207,0.648233532905579,-0.736215531826019,-0.133181735873222,0.663512825965881\n             ,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.228005513548851,0.109595887362957,0.967472076416016\n             ,-0.215633437037468,-0.617008090019226,0.756837606430054,-0.52398544549942,-0.396743208169937,0.753680348396301\n             ,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.505574762821198,-0.704972326755524,0.49740144610405\n             ,-0.158661097288132,-0.379611909389496,0.911439180374146,-0.52398544549942,-0.396743208169937,0.753680348396301\n             ,-0.215633437037468,-0.617008090019226,0.756837606430054,0.0384484939277172,-0.525311291217804,0.850041031837463\n             ,-0.0760671570897102,-0.295749187469482,0.952232241630554,0.187207460403442,-0.466673761606216,0.864389359951019\n             ,0.322147607803345,-0.331866294145584,0.886614739894867,-0.141511112451553,-0.212750777602196,0.966804921627045\n             ,0.109986312687397,-0.239039734005928,0.964760601520538,-0.0760671570897102,-0.295749187469482,0.952232241630554\n             ,-0.141511112451553,-0.212750777602196,0.966804921627045,0.125946626067162,-0.109786443412304,0.985943377017975\n             ,0.109986312687397,-0.239039734005928,0.964760601520538,-0.141511112451553,-0.212750777602196,0.966804921627045\n             ,-0.184660717844963,-0.167485594749451,0.968426048755646,0.00481598870828748,-0.00974012352526188,0.999940931797028\n             ,0.125946626067162,-0.109786443412304,0.985943377017975,-0.184660717844963,-0.167485594749451,0.968426048755646\n             ,-0.274106293916702,-0.107289478182793,0.955695927143097,-0.128308832645416,0.135050818324089,0.982495844364166\n             ,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.274106293916702,-0.107289478182793,0.955695927143097\n             ,-0.414724171161652,0.00967030972242355,0.909895837306976,-0.17640919983387,0.25873214006424,0.949703872203827\n             ,-0.128308832645416,0.135050818324089,0.982495844364166,-0.414724171161652,0.00967030972242355,0.909895837306976\n             ,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.224652707576752,0.331979662179947,0.91614443063736\n             ,-0.17640919983387,0.25873214006424,0.949703872203827,-0.537278592586517,0.0936881303787231,0.83818507194519\n             ,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.78737735748291,0.23807966709137,0.568643093109131\n             ,-0.702946484088898,0.346591114997864,0.621080338954926,-0.224652707576752,0.331979662179947,0.91614443063736\n             ,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.925617933273315,-0.333309531211853,0.179265692830086\n             ,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.858429491519928,-0.151253908872604,0.490123569965363\n             ,-0.96939754486084,-0.16740058362484,0.179570108652115,-0.96939754486084,-0.16740058362484,0.179570108652115\n             ,-0.858429491519928,-0.151253908872604,0.490123569965363,-0.835869967937469,-0.162916868925095,0.524194180965424\n             ,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.835869967937469,-0.162916868925095,0.524194180965424\n             ,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.929407715797424,-0.180255636572838,0.322039186954498\n             ,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.829591572284698,0.0585402958095074,0.555293500423431\n             ,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.929407715797424,-0.180255636572838,0.322039186954498\n             ,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.973927080631256,-0.0629245564341545,0.217960059642792\n             ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.989299476146698,0.112728737294674,0.0926214382052422\n             ,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.925617933273315,-0.333309531211853,0.179265692830086\n             ,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.817183375358582,-0.296553403139114,0.494234204292297\n             ,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.881475806236267,-0.330746591091156,0.337056517601013\n             ,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.881475806236267,-0.330746591091156,0.337056517601013\n             ,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.505574762821198,-0.704972326755524,0.49740144610405\n             ,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.871467232704163,-0.412255734205246,0.265687882900238\n             ,0.781636536121368,0.602840006351471,-0.160088449716568,0.920450210571289,0.249687507748604,-0.300711780786514\n             ,0.917835712432861,0.197176292538643,-0.344527393579483,0.904744982719421,0.140758752822876,-0.402024179697037\n             ,0.902734816074371,0.140678882598877,-0.406545639038086,0.772511541843414,0.0615992993116379,-0.632005870342255\n             ,0.784979939460754,0.0750055387616158,-0.614963889122009,0.854438722133636,-0.0391706973314285,-0.518073558807373\n             ,0.960243940353394,-0.113252773880959,-0.255157649517059,0.980879783630371,-0.19241227209568,-0.0291947238147259\n             ,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.845922589302063,-0.233836695551872,-0.479307234287262\n             ,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.928428411483765,-0.296662479639053,0.223633751273155\n             ,-0.925617933273315,-0.333309531211853,0.179265692830086,-0.96939754486084,-0.16740058362484,0.179570108652115\n             ,-0.913924396038055,-0.399497091770172,-0.0717232823371887,-0.881475806236267,-0.330746591091156,0.337056517601013\n             ,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.977448999881744,-0.204651221632957,-0.0520704686641693\n             ,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.881475806236267,-0.330746591091156,0.337056517601013\n             ,-0.913924396038055,-0.399497091770172,-0.0717232823371887,-0.724748373031616,-0.680762529373169,-0.106311395764351\n             ,-0.0760671570897102,-0.295749187469482,0.952232241630554,-0.158661097288132,-0.379611909389496,0.911439180374146\n             ,0.0384484939277172,-0.525311291217804,0.850041031837463,0.187207460403442,-0.466673761606216,0.864389359951019\n             ,0.0384484939277172,-0.525311291217804,0.850041031837463,0.631964325904846,-0.724000632762909,0.276485413312912\n             ,0.776257395744324,-0.559177398681641,0.291110157966614,0.187207460403442,-0.466673761606216,0.864389359951019\n             ,0.920450210571289,0.249687507748604,-0.300711780786514,0.754057705402374,0.374476611614227,-0.539596378803253\n             ,0.769950747489929,0.0194198340177536,-0.637807726860046,0.946711003780365,0.167055711150169,-0.275373607873917\n             ,0.754057705402374,0.374476611614227,-0.539596378803253,0.806110441684723,0.0128834620118141,-0.591624915599823\n             ,0.626454889774323,0.131802603602409,-0.768233299255371,0.227652028203011,0.973727345466614,-0.0054389201104641\n             ,0.485665678977966,0.51228803396225,-0.708300650119781,0.781636536121368,0.602840006351471,-0.160088449716568\n             ,0.978495180606842,0.204968735575676,-0.0231311116367579,0.978555917739868,-0.185044288635254,-0.090481773018837\n             ,0.983711898326874,-0.176273837685585,0.0351918712258339,0.777039647102356,0.333707332611084,0.533712267875671\n             ,0.548670411109924,0.271492123603821,0.790729284286499,0.882719457149506,0.298290461301804,0.36308279633522,0.65978866815567\n             ,0.352559685707092,0.663611769676209,0.922054708003998,0.046831239014864,0.384216070175171,0.7165766954422,0.119066134095192\n             ,0.687270760536194,0.882719457149506,0.298290461301804,0.36308279633522,0.485665678977966,0.51228803396225,-0.708300650119781\n             ,0.806110441684723,0.0128834620118141,-0.591624915599823,0.754057705402374,0.374476611614227,-0.539596378803253\n             ,0.920450210571289,0.249687507748604,-0.300711780786514,0.781636536121368,0.602840006351471,-0.160088449716568\n             ,-0.085037998855114,0.891525149345398,0.444917380809784,-0.0469878204166889,0.559723138809204,0.827346444129944\n             ,0.0470689907670021,0.582839369773865,0.811222970485687,0.101348482072353,0.892875194549561,0.438750922679901\n             ,0.0935290157794952,0.208944618701935,-0.973444640636444,0.0038525490090251,0.171840533614159,-0.985117256641388\n             ,-0.103621512651443,0.603616952896118,-0.790511965751648,-0.0126510011032224,0.631483376026154,-0.775286257266998\n             ,0.933896422386169,0.335515409708023,0.123558923602104,0.693666994571686,0.300759524106979,0.654499650001526\n             ,0.698169589042664,-0.369514137506485,0.613203525543213,0.942301154136658,-0.286070376634598,0.173874363303185\n             ,0.378664463758469,0.883253812789917,-0.276542812585831,0.368075758218765,0.856088101863861,0.362813085317612\n             ,0.639892160892487,0.694699466228485,0.328528076410294,0.675914883613586,0.694170355796814,-0.247520759701729\n             ,0.309483885765076,-0.163968995213509,-0.936661064624786,0.0866431072354317,0.348724126815796,-0.933211922645569\n             ,0.29194575548172,0.445136368274689,-0.846534848213196,0.452584743499756,-0.12309543043375,-0.883184313774109\n             ,0.472137004137039,0.668477177619934,-0.574651956558228,0.306242048740387,0.731363773345947,-0.609362602233887\n             ,0.378664463758469,0.883253812789917,-0.276542812585831,0.675914883613586,0.694170355796814,-0.247520759701729\n             ,0.768324851989746,0.0888023898005486,-0.63386994600296,0.638194561004639,0.569729268550873,-0.517799377441406\n             ,0.29194575548172,0.445136368274689,-0.846534848213196,0.40653070807457,0.0205510575324297,-0.913405954837799\n             ,0.723759770393372,0.0808410197496414,0.685300350189209,0.622246146202087,0.559013962745667,0.548008322715759\n             ,0.826591491699219,0.555592954158783,0.0897942036390305,0.976288020610809,0.129569977521896,0.173416510224342\n             ,0.411225825548172,-0.383013069629669,0.8271604180336,0.330161929130554,-0.399422317743301,0.855251371860504\n             ,0.245776325464249,-0.0611284077167511,0.967397153377533,0.390471458435059,0.0208971817046404,0.920377850532532\n             ,0.15211121737957,-0.123818121850491,0.980576992034912,0.245776325464249,-0.0611284077167511,0.967397153377533\n             ,0.330161929130554,-0.399422317743301,0.855251371860504,0.760879397392273,0.00385691528208554,0.648881912231445\n             ,0.206741601228714,0.69427889585495,-0.689372718334198,0.0479706004261971,0.64763480424881,-0.760439336299896\n             ,0.0983121022582054,0.926145672798157,-0.364127546548843,0.324993640184402,0.89479660987854,-0.306134164333344\n             ,0.0983121022582054,0.926145672798157,-0.364127546548843,0.101348482072353,0.892875194549561,0.438750922679901\n             ,0.320414483547211,0.864260375499725,0.387799590826035,0.324993640184402,0.89479660987854,-0.306134164333344\n             ,0.282659292221069,0.205503165721893,-0.936948299407959,0.413956999778748,-0.385759115219116,-0.824517726898193\n             ,0.319176852703094,-0.387702465057373,-0.864761769771576,0.114235505461693,0.174652293324471,-0.977980971336365\n             ,0.283178418874741,0.436211496591568,0.854124963283539,0.439386487007141,-0.126929730176926,0.889285326004028\n             ,0.800352692604065,-0.0664194524288177,0.595838904380798,0.622246146202087,0.559013962745667,0.548008322715759\n             ,0.826591491699219,0.555592954158783,0.0897942036390305,0.993047595024109,0.00499473372474313,0.117607519030571\n             ,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.827589094638824,0.557050704956055,-0.069215714931488\n             ,0.897543668746948,-0.428973793983459,-0.101964816451073,0.747824549674988,-0.399453073740005,-0.530278921127319\n             ,0.821371793746948,-0.202065214514732,-0.533402323722839,0.983732461929321,-0.14598248898983,-0.104687921702862\n             ,0.821371793746948,-0.202065214514732,-0.533402323722839,0.747824549674988,-0.399453073740005,-0.530278921127319\n             ,0.426769316196442,-0.235881611704826,-0.873056590557098,0.517105877399445,-0.187926828861237,-0.835035920143127\n             ,0.457932114601135,0.272002577781677,0.846352636814117,0.760879397392273,0.00385691528208554,0.648881912231445\n             ,0.330161929130554,-0.399422317743301,0.855251371860504,0.088567815721035,0.174428701400757,0.980678558349609\n             ,-0.085037998855114,0.891525149345398,0.444917380809784,0.101348482072353,0.892875194549561,0.438750922679901\n             ,0.0983121022582054,0.926145672798157,-0.364127546548843,-0.0940461307764053,0.921943545341492,-0.37573316693306\n             ,0.114235505461693,0.174652293324471,-0.977980971336365,0.319176852703094,-0.387702465057373,-0.864761769771576\n             ,0.806110441684723,0.0128834620118141,-0.591624915599823,0.485665678977966,0.51228803396225,-0.708300650119781\n             ,0.897991716861725,-0.426986217498779,0.106271713972092,0.983711898326874,-0.176273837685585,0.0351918712258339\n             ,0.978555917739868,-0.185044288635254,-0.090481773018837,0.897543668746948,-0.428973793983459,-0.101964816451073\n             ,0.897991716861725,-0.426986217498779,0.106271713972092,0.729263663291931,-0.375070512294769,0.572273194789886\n             ,0.922054708003998,0.046831239014864,0.384216070175171,0.983711898326874,-0.176273837685585,0.0351918712258339\n             ,0.937979876995087,0.334741920232773,-0.0902306362986565,0.933896422386169,0.335515409708023,0.123558923602104\n             ,0.942301154136658,-0.286070376634598,0.173874363303185,0.95092248916626,-0.279943495988846,-0.131825938820839\n             ,0.769950747489929,0.0194198340177536,-0.637807726860046,0.754057705402374,0.374476611614227,-0.539596378803253\n             ,0.0866431072354317,0.348724126815796,-0.933211922645569,0.309483885765076,-0.163968995213509,-0.936661064624786\n             ,0.7165766954422,0.119066134095192,0.687270760536194,0.922054708003998,0.046831239014864,0.384216070175171,0.729263663291931\n             ,-0.375070512294769,0.572273194789886,0.397319257259369,-0.209660559892654,0.893409132957459,0.65978866815567\n             ,0.352559685707092,0.663611769676209,0.564793407917023,-0.0494600534439087,0.823748826980591,0.302472561597824\n             ,-0.163718789815903,0.938992261886597,0.0738702192902565,0.343476206064224,0.936251699924469,0.411225825548172\n             ,-0.383013069629669,0.8271604180336,0.698169589042664,-0.369514137506485,0.613203525543213,0.693666994571686\n             ,0.300759524106979,0.654499650001526,0.286839812994003,0.207817569375038,0.935165643692017,0.411225825548172\n             ,-0.383013069629669,0.8271604180336,0.286839812994003,0.207817569375038,0.935165643692017,0.088567815721035,0.174428701400757\n             ,0.980678558349609,0.330161929130554,-0.399422317743301,0.855251371860504,0.368075758218765,0.856088101863861\n             ,0.362813085317612,0.274606496095657,0.656895995140076,0.702195703983307,0.401270300149918,0.638443887233734\n             ,0.65678882598877,0.639892160892487,0.694699466228485,0.328528076410294,0.888468742370605,0.446394234895706,0.106561981141567\n             ,0.784074723720551,0.612660884857178,0.0993655025959015,0.522062003612518,0.681964814662933,0.512225747108459\n             ,0.648745238780975,0.392575055360794,0.651931345462799,0.794647932052612,0.60278457403183,-0.072009839117527\n             ,0.784074723720551,0.612660884857178,0.0993655025959015,0.888468742370605,0.446394234895706,0.106561981141567\n             ,0.891878128051758,0.445774257183075,-0.0764117166399956,0.0935290157794952,0.208944618701935,-0.973444640636444\n             ,-0.0126510011032224,0.631483376026154,-0.775286257266998,0.143443211913109,0.633186459541321,-0.760591149330139\n             ,0.231918528676033,0.24745686352253,-0.940733194351196,0.231918528676033,0.24745686352253,-0.940733194351196\n             ,0.143443211913109,0.633186459541321,-0.760591149330139,0.545021951198578,0.680707216262817,-0.489478081464767\n             ,0.670513987541199,0.40045166015625,-0.624539375305176,0.282659292221069,0.205503165721893,-0.936948299407959\n             ,0.71557879447937,0.306318610906601,-0.62778651714325,0.7308149933815,-0.370514005422592,-0.573261618614197,0.413956999778748\n             ,-0.385759115219116,-0.824517726898193,0.29194575548172,0.445136368274689,-0.846534848213196,0.638194561004639\n             ,0.569729268550873,-0.517799377441406,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.452584743499756\n             ,-0.12309543043375,-0.883184313774109,0.670513987541199,0.40045166015625,-0.624539375305176,0.545021951198578\n             ,0.680707216262817,-0.489478081464767,0.794647932052612,0.60278457403183,-0.072009839117527,0.891878128051758\n             ,0.445774257183075,-0.0764117166399956,0.0983121022582054,0.926145672798157,-0.364127546548843,0.0479706004261971\n             ,0.64763480424881,-0.760439336299896,-0.0566258281469345,0.623355150222778,-0.779885828495026,-0.0940461307764053\n             ,0.921943545341492,-0.37573316693306,0.978555917739868,-0.185044288635254,-0.090481773018837,0.922853767871857\n             ,-0.106967732310295,-0.369998395442963,0.747824549674988,-0.399453073740005,-0.530278921127319,0.897543668746948\n             ,-0.428973793983459,-0.101964816451073,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.638194561004639\n             ,0.569729268550873,-0.517799377441406,0.827589094638824,0.557050704956055,-0.069215714931488,0.995611786842346\n             ,0.0103343157097697,-0.0930073782801628,0.626454889774323,0.131802603602409,-0.768233299255371,0.806110441684723\n             ,0.0128834620118141,-0.591624915599823,0.319176852703094,-0.387702465057373,-0.864761769771576,0.227507263422012\n             ,-0.0530111268162727,-0.972332358360291,0.626454889774323,0.131802603602409,-0.768233299255371,0.227507263422012\n             ,-0.0530111268162727,-0.972332358360291,0.0866431072354317,0.348724126815796,-0.933211922645569,0.754057705402374\n             ,0.374476611614227,-0.539596378803253,0.29194575548172,0.445136368274689,-0.846534848213196,0.0866431072354317\n             ,0.348724126815796,-0.933211922645569,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.40653070807457\n             ,0.0205510575324297,-0.913405954837799,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.319176852703094\n             ,-0.387702465057373,-0.864761769771576,0.413956999778748,-0.385759115219116,-0.824517726898193,0.40653070807457\n             ,0.0205510575324297,-0.913405954837799,0.413956999778748,-0.385759115219116,-0.824517726898193,0.7308149933815\n             ,-0.370514005422592,-0.573261618614197,0.768324851989746,0.0888023898005486,-0.63386994600296,0.40653070807457\n             ,0.0205510575324297,-0.913405954837799,0.827589094638824,0.557050704956055,-0.069215714931488,0.638194561004639\n             ,0.569729268550873,-0.517799377441406,0.768324851989746,0.0888023898005486,-0.63386994600296,0.98238343000412\n             ,0.131090134382248,-0.133184969425201,0.768324851989746,0.0888023898005486,-0.63386994600296,0.7308149933815\n             ,-0.370514005422592,-0.573261618614197,0.95092248916626,-0.279943495988846,-0.131825938820839,0.98238343000412\n             ,0.131090134382248,-0.133184969425201,0.98238343000412,0.131090134382248,-0.133184969425201,0.976288020610809\n             ,0.129569977521896,0.173416510224342,0.826591491699219,0.555592954158783,0.0897942036390305,0.827589094638824\n             ,0.557050704956055,-0.069215714931488,0.95092248916626,-0.279943495988846,-0.131825938820839,0.942301154136658\n             ,-0.286070376634598,0.173874363303185,0.976288020610809,0.129569977521896,0.173416510224342,0.98238343000412\n             ,0.131090134382248,-0.133184969425201,0.942301154136658,-0.286070376634598,0.173874363303185,0.698169589042664\n             ,-0.369514137506485,0.613203525543213,0.723759770393372,0.0808410197496414,0.685300350189209,0.976288020610809\n             ,0.129569977521896,0.173416510224342,0.245776325464249,-0.0611284077167511,0.967397153377533,0.0738702192902565\n             ,0.343476206064224,0.936251699924469,0.283178418874741,0.436211496591568,0.854124963283539,0.390471458435059\n             ,0.0208971817046404,0.920377850532532,0.283178418874741,0.436211496591568,0.854124963283539,0.622246146202087\n             ,0.559013962745667,0.548008322715759,0.723759770393372,0.0808410197496414,0.685300350189209,0.390471458435059\n             ,0.0208971817046404,0.920377850532532,0.723759770393372,0.0808410197496414,0.685300350189209,0.698169589042664\n             ,-0.369514137506485,0.613203525543213,0.411225825548172,-0.383013069629669,0.8271604180336,0.390471458435059\n             ,0.0208971817046404,0.920377850532532,0.15211121737957,-0.123818121850491,0.980576992034912,0.65978866815567\n             ,0.352559685707092,0.663611769676209,0.0738702192902565,0.343476206064224,0.936251699924469,0.245776325464249\n             ,-0.0611284077167511,0.967397153377533,0.378664463758469,0.883253812789917,-0.276542812585831,0.306242048740387\n             ,0.731363773345947,-0.609362602233887,0.206741601228714,0.69427889585495,-0.689372718334198,0.324993640184402\n             ,0.89479660987854,-0.306134164333344,0.101348482072353,0.892875194549561,0.438750922679901,0.0470689907670021\n             ,0.582839369773865,0.811222970485687,0.190875470638275,0.632551431655884,0.750629842281342,0.320414483547211\n             ,0.864260375499725,0.387799590826035,0.190875470638275,0.632551431655884,0.750629842281342,0.274606496095657\n             ,0.656895995140076,0.702195703983307,0.368075758218765,0.856088101863861,0.362813085317612,0.320414483547211\n             ,0.864260375499725,0.387799590826035,0.324993640184402,0.89479660987854,-0.306134164333344,0.320414483547211\n             ,0.864260375499725,0.387799590826035,0.368075758218765,0.856088101863861,0.362813085317612,0.378664463758469\n             ,0.883253812789917,-0.276542812585831,0.937979876995087,0.334741920232773,-0.0902306362986565,0.95092248916626\n             ,-0.279943495988846,-0.131825938820839,0.7308149933815,-0.370514005422592,-0.573261618614197,0.71557879447937\n             ,0.306318610906601,-0.62778651714325,0.223221242427826,0.259100526571274,0.939701676368713,0.648745238780975\n             ,0.392575055360794,0.651931345462799,0.522062003612518,0.681964814662933,0.512225747108459,0.1247773244977,0.633714616298676\n             ,0.763437211513519,0.1247773244977,0.633714616298676,0.763437211513519,-0.0781158208847046,0.611012876033783\n             ,0.787757039070129,0.0274804774671793,0.267909824848175,0.963052034378052,0.223221242427826,0.259100526571274\n             ,0.939701676368713,0.405990958213806,0.468467801809311,0.784671425819397,0.0274804774671793,0.267909824848175\n             ,0.963052034378052,-0.0781158208847046,0.611012876033783,0.787757039070129,-0.1829604357481,0.769297182559967\n             ,0.61213344335556,0.0738702192902565,0.343476206064224,0.936251699924469,0.302472561597824,-0.163718789815903\n             ,0.938992261886597,0.439386487007141,-0.126929730176926,0.889285326004028,0.283178418874741,0.436211496591568\n             ,0.854124963283539,0.397319257259369,-0.209660559892654,0.893409132957459,0.729263663291931,-0.375070512294769\n             ,0.572273194789886,0.796823620796204,-0.217323467135429,0.563775300979614,0.500088214874268,-0.193674385547638\n             ,0.844039142131805,0.622246146202087,0.559013962745667,0.548008322715759,0.800352692604065,-0.0664194524288177\n             ,0.595838904380798,0.993047595024109,0.00499473372474313,0.117607519030571,0.826591491699219,0.555592954158783\n             ,0.0897942036390305,0.796823620796204,-0.217323467135429,0.563775300979614,0.729263663291931,-0.375070512294769\n             ,0.572273194789886,0.897991716861725,-0.426986217498779,0.106271713972092,0.979334354400635,-0.157389283180237\n             ,0.127015009522438,0.979334354400635,-0.157389283180237,0.127015009522438,0.897991716861725,-0.426986217498779\n             ,0.106271713972092,0.897543668746948,-0.428973793983459,-0.101964816451073,0.983732461929321,-0.14598248898983\n             ,-0.104687921702862,0.426769316196442,-0.235881611704826,-0.873056590557098,0.747824549674988,-0.399453073740005\n             ,-0.530278921127319,0.922853767871857,-0.106967732310295,-0.369998395442963,0.795709431171417,0.00568865891546011\n             ,-0.605651795864105,-0.0126510011032224,0.631483376026154,-0.775286257266998,-0.103621512651443,0.603616952896118\n             ,-0.790511965751648,-0.122300885617733,0.731758713722229,-0.670501053333282,-0.0417431555688381,0.749460160732269\n             ,-0.66073215007782,0.143443211913109,0.633186459541321,-0.760591149330139,-0.0126510011032224,0.631483376026154\n             ,-0.775286257266998,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.103472903370857,0.756755590438843\n             ,-0.645456671714783,0.545021951198578,0.680707216262817,-0.489478081464767,0.143443211913109,0.633186459541321\n             ,-0.760591149330139,0.103472903370857,0.756755590438843,-0.645456671714783,0.484853446483612,0.730157256126404\n             ,-0.481443136930466,0.794647932052612,0.60278457403183,-0.072009839117527,0.545021951198578,0.680707216262817\n             ,-0.489478081464767,0.484853446483612,0.730157256126404,-0.481443136930466,0.826110124588013,0.547678649425507\n             ,-0.132628157734871,0.826110124588013,0.547678649425507,-0.132628157734871,0.794824659824371,0.578912436962128\n             ,0.181972846388817,0.784074723720551,0.612660884857178,0.0993655025959015,0.794647932052612,0.60278457403183\n             ,-0.072009839117527,0.522062003612518,0.681964814662933,0.512225747108459,0.784074723720551,0.612660884857178\n             ,0.0993655025959015,0.794824659824371,0.578912436962128,0.181972846388817,0.430720508098602,0.740847587585449\n             ,0.515387892723084,0.1247773244977,0.633714616298676,0.763437211513519,0.522062003612518,0.681964814662933,0.512225747108459\n             ,0.430720508098602,0.740847587585449,0.515387892723084,0.0950676947832108,0.75424587726593,0.649673223495483\n             ,0.0950676947832108,0.75424587726593,0.649673223495483,-0.0567072629928589,0.694658160209656,0.717101395130157\n             ,-0.0781158208847046,0.611012876033783,0.787757039070129,0.1247773244977,0.633714616298676,0.763437211513519\n             ,-0.1829604357481,0.769297182559967,0.61213344335556,-0.0781158208847046,0.611012876033783,0.787757039070129\n             ,-0.0567072629928589,0.694658160209656,0.717101395130157,-0.245767340064049,0.604095578193665,0.758067905902863\n             ,-0.122300885617733,0.731758713722229,-0.670501053333282,-0.0566258281469345,0.623355150222778,-0.779885828495026\n             ,0.0479706004261971,0.64763480424881,-0.760439336299896,-0.0417431555688381,0.749460160732269,-0.66073215007782\n             ,0.103472903370857,0.756755590438843,-0.645456671714783,-0.0417431555688381,0.749460160732269,-0.66073215007782\n             ,0.0479706004261971,0.64763480424881,-0.760439336299896,0.206741601228714,0.69427889585495,-0.689372718334198\n             ,0.484853446483612,0.730157256126404,-0.481443136930466,0.103472903370857,0.756755590438843,-0.645456671714783\n             ,0.206741601228714,0.69427889585495,-0.689372718334198,0.306242048740387,0.731363773345947,-0.609362602233887\n             ,0.472137004137039,0.668477177619934,-0.574651956558228,0.826110124588013,0.547678649425507,-0.132628157734871\n             ,0.484853446483612,0.730157256126404,-0.481443136930466,0.472137004137039,0.668477177619934,-0.574651956558228\n             ,0.675914883613586,0.694170355796814,-0.247520759701729,0.675914883613586,0.694170355796814,-0.247520759701729\n             ,0.639892160892487,0.694699466228485,0.328528076410294,0.794824659824371,0.578912436962128,0.181972846388817\n             ,0.826110124588013,0.547678649425507,-0.132628157734871,0.430720508098602,0.740847587585449,0.515387892723084\n             ,0.794824659824371,0.578912436962128,0.181972846388817,0.639892160892487,0.694699466228485,0.328528076410294\n             ,0.401270300149918,0.638443887233734,0.65678882598877,0.0950676947832108,0.75424587726593,0.649673223495483,0.430720508098602\n             ,0.740847587585449,0.515387892723084,0.401270300149918,0.638443887233734,0.65678882598877,0.274606496095657,0.656895995140076\n             ,0.702195703983307,0.190875470638275,0.632551431655884,0.750629842281342,0.190875470638275,0.632551431655884\n             ,0.750629842281342,0.0470689907670021,0.582839369773865,0.811222970485687,-0.0567072629928589,0.694658160209656\n             ,0.717101395130157,0.0950676947832108,0.75424587726593,0.649673223495483,-0.0567072629928589,0.694658160209656\n             ,0.717101395130157,0.0470689907670021,0.582839369773865,0.811222970485687,-0.0469878204166889,0.559723138809204\n             ,0.827346444129944,-0.245767340064049,0.604095578193665,0.758067905902863,0.0935290157794952,0.208944618701935\n             ,-0.973444640636444,0.114235505461693,0.174652293324471,-0.977980971336365,0.485665678977966,0.51228803396225\n             ,-0.708300650119781,0.0038525490090251,0.171840533614159,-0.985117256641388,0.231918528676033,0.24745686352253\n             ,-0.940733194351196,0.282659292221069,0.205503165721893,-0.936948299407959,0.114235505461693,0.174652293324471\n             ,-0.977980971336365,0.0935290157794952,0.208944618701935,-0.973444640636444,0.231918528676033,0.24745686352253\n             ,-0.940733194351196,0.670513987541199,0.40045166015625,-0.624539375305176,0.71557879447937,0.306318610906601\n             ,-0.62778651714325,0.282659292221069,0.205503165721893,-0.936948299407959,0.891878128051758,0.445774257183075\n             ,-0.0764117166399956,0.937979876995087,0.334741920232773,-0.0902306362986565,0.71557879447937,0.306318610906601\n             ,-0.62778651714325,0.670513987541199,0.40045166015625,-0.624539375305176,0.891878128051758,0.445774257183075\n             ,-0.0764117166399956,0.888468742370605,0.446394234895706,0.106561981141567,0.933896422386169,0.335515409708023\n             ,0.123558923602104,0.937979876995087,0.334741920232773,-0.0902306362986565,0.888468742370605,0.446394234895706\n             ,0.106561981141567,0.648745238780975,0.392575055360794,0.651931345462799,0.693666994571686,0.300759524106979\n             ,0.654499650001526,0.933896422386169,0.335515409708023,0.123558923602104,0.286839812994003,0.207817569375038\n             ,0.935165643692017,0.693666994571686,0.300759524106979,0.654499650001526,0.648745238780975,0.392575055360794\n             ,0.651931345462799,0.223221242427826,0.259100526571274,0.939701676368713,0.088567815721035,0.174428701400757\n             ,0.980678558349609,0.286839812994003,0.207817569375038,0.935165643692017,0.223221242427826,0.259100526571274\n             ,0.939701676368713,0.0274804774671793,0.267909824848175,0.963052034378052,0.405990958213806,0.468467801809311\n             ,0.784671425819397,0.457932114601135,0.272002577781677,0.846352636814117,0.088567815721035,0.174428701400757\n             ,0.980678558349609,0.0274804774671793,0.267909824848175,0.963052034378052,0.777039647102356,0.333707332611084\n             ,0.533712267875671,0.760879397392273,0.00385691528208554,0.648881912231445,0.457932114601135,0.272002577781677\n             ,0.846352636814117,0.926154136657715,0.165854901075363,-0.3387191593647,0.93531322479248,0.178703308105469,-0.305375546216965\n             ,0.795709431171417,0.00568865891546011,-0.605651795864105,0.922853767871857,-0.106967732310295,-0.369998395442963\n             ,0.0910219326615334,-0.210485890507698,-0.97335022687912,0.320743799209595,-0.127513855695724,-0.938543379306793\n             ,0.214329496026039,-0.204933792352676,-0.95502096414566,0.179054066538811,0.451375037431717,-0.8741854429245\n             ,0.902734816074371,0.140678882598877,-0.406545639038086,0.926154136657715,0.165854901075363,-0.3387191593647\n             ,0.927813827991486,0.152230933308601,-0.340569078922272,0.899548053741455,0.145640388131142,-0.411827832460403\n             ,0.899548053741455,0.145640388131142,-0.411827832460403,0.770998120307922,0.0437404066324234,-0.63533353805542\n             ,0.772511541843414,0.0615992993116379,-0.632005870342255,0.902734816074371,0.140678882598877,-0.406545639038086\n             ,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.214329496026039,-0.204933792352676,-0.95502096414566\n             ,0.772511541843414,0.0615992993116379,-0.632005870342255,0.770998120307922,0.0437404066324234,-0.63533353805542\n             ,0.179054066538811,0.451375037431717,-0.8741854429245,0.214329496026039,-0.204933792352676,-0.95502096414566\n             ,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.794842600822449,-0.0390454083681107,-0.605558216571808\n             ,0.564793407917023,-0.0494600534439087,0.823748826980591,0.7165766954422,0.119066134095192,0.687270760536194\n             ,0.397319257259369,-0.209660559892654,0.893409132957459,0.302472561597824,-0.163718789815903,0.938992261886597\n             ,0.439386487007141,-0.126929730176926,0.889285326004028,0.302472561597824,-0.163718789815903,0.938992261886597\n             ,0.397319257259369,-0.209660559892654,0.893409132957459,0.500088214874268,-0.193674385547638,0.844039142131805\n             ,0.800352692604065,-0.0664194524288177,0.595838904380798,0.439386487007141,-0.126929730176926,0.889285326004028\n             ,0.500088214874268,-0.193674385547638,0.844039142131805,0.796823620796204,-0.217323467135429,0.563775300979614\n             ,0.993047595024109,0.00499473372474313,0.117607519030571,0.800352692604065,-0.0664194524288177,0.595838904380798\n             ,0.796823620796204,-0.217323467135429,0.563775300979614,0.979334354400635,-0.157389283180237,0.127015009522438\n             ,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.993047595024109,0.00499473372474313,0.117607519030571\n             ,0.979334354400635,-0.157389283180237,0.127015009522438,0.983732461929321,-0.14598248898983,-0.104687921702862\n             ,0.821371793746948,-0.202065214514732,-0.533402323722839,0.823152184486389,-0.0570015087723732,-0.564952492713928\n             ,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.983732461929321,-0.14598248898983,-0.104687921702862\n             ,0.452584743499756,-0.12309543043375,-0.883184313774109,0.823152184486389,-0.0570015087723732,-0.564952492713928\n             ,0.821371793746948,-0.202065214514732,-0.533402323722839,0.517105877399445,-0.187926828861237,-0.835035920143127\n             ,0.426769316196442,-0.235881611704826,-0.873056590557098,0.309483885765076,-0.163968995213509,-0.936661064624786\n             ,0.452584743499756,-0.12309543043375,-0.883184313774109,0.517105877399445,-0.187926828861237,-0.835035920143127\n             ,0.795709431171417,0.00568865891546011,-0.605651795864105,0.769950747489929,0.0194198340177536,-0.637807726860046\n             ,0.309483885765076,-0.163968995213509,-0.936661064624786,0.426769316196442,-0.235881611704826,-0.873056590557098\n             ,0.946711003780365,0.167055711150169,-0.275373607873917,0.769950747489929,0.0194198340177536,-0.637807726860046\n             ,0.795709431171417,0.00568865891546011,-0.605651795864105,0.93531322479248,0.178703308105469,-0.305375546216965\n             ,0.904744982719421,0.140758752822876,-0.402024179697037,0.90627920627594,0.138545647263527,-0.399328351020813\n             ,0.946711003780365,0.167055711150169,-0.275373607873917,0.93531322479248,0.178703308105469,-0.305375546216965\n             ,0.90627920627594,0.138545647263527,-0.399328351020813,0.904744982719421,0.140758752822876,-0.402024179697037\n             ,0.784979939460754,0.0750055387616158,-0.614963889122009,0.798663914203644,0.0795769542455673,-0.596492648124695\n             ,0.784979939460754,0.0750055387616158,-0.614963889122009,0.320743799209595,-0.127513855695724,-0.938543379306793\n             ,0.265012234449387,-0.116133384406567,-0.957225978374481,0.798663914203644,0.0795769542455673,-0.596492648124695\n             ,-0.245767340064049,0.604095578193665,0.758067905902863,-0.423373013734818,0.789847135543823,0.443730562925339\n             ,-0.1829604357481,0.769297182559967,0.61213344335556,0.127582147717476,-0.649050772190094,0.749970614910126,0.261260062456131\n             ,-0.761487662792206,0.593194544315338,0.0315268374979496,0.564418375492096,0.824886620044708,0.54774808883667\n             ,0.373568952083588,0.74861091375351,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.805050849914551\n             ,-0.582361280918121,0.112909138202667,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.912629246711731\n             ,0.357585817575455,0.198091477155685,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.844159960746765\n             ,0.49836453795433,-0.197551965713501,-0.668442606925964,0.712539076805115,-0.213242903351784,-0.888629198074341\n             ,0.438762098550797,0.133514106273651,0.775733590126038,0.173521965742111,-0.606735110282898,0.119323797523975\n             ,0.10215725004673,-0.987585842609406,0.0699164718389511,0.326290965080261,-0.942680180072784,0.73961067199707\n             ,0.263024806976318,-0.619511127471924,-0.310650229454041,0.283165037631989,-0.907366514205933,0.0699164718389511\n             ,0.326290965080261,-0.942680180072784,0.119323797523975,0.10215725004673,-0.987585842609406,-0.313530147075653\n             ,0.0253957733511925,-0.94923859834671,0.839367091655731,0.0223367810249329,-0.543105840682983,0.725067377090454\n             ,0.0188654419034719,-0.688419461250305,0.445772647857666,-0.772406101226807,-0.452410876750946,0.698725283145905\n             ,-0.511526346206665,-0.500123798847198,0.767102777957916,0.172567009925842,-0.617878556251526,0.725067377090454\n             ,0.0188654419034719,-0.688419461250305,0.839367091655731,0.0223367810249329,-0.543105840682983,0.847418010234833\n             ,0.181933760643005,-0.49878141283989,0.850323617458344,0.228136360645294,-0.474239885807037,0.817859530448914\n             ,0.310457706451416,-0.484480977058411,0.788738131523132,0.260696917772293,-0.556712925434113,0.854514420032501\n             ,0.21429717540741,-0.473161548376083,0.804398238658905,0.375304967164993,-0.460531920194626,0.811875224113464\n             ,0.435735166072845,-0.388578832149506,0.817859530448914,0.310457706451416,-0.484480977058411,0.850323617458344\n             ,0.228136360645294,-0.474239885807037,0.901214420795441,0.431201189756393,-0.0433364585042,0.797342956066132\n             ,0.463364690542221,-0.386700719594955,0.789179563522339,0.518753051757813,-0.328771829605103,0.883821845054626\n             ,0.46681609749794,-0.0306868441402912,0.825478971004486,0.333341240882874,-0.455486595630646,0.797342956066132\n             ,0.463364690542221,-0.386700719594955,0.901214420795441,0.431201189756393,-0.0433364585042,0.956080257892609\n             ,0.274207085371017,-0.103542387485504,0.962835073471069,0.210140570998192,-0.169674947857857,0.83752965927124\n             ,0.20064052939415,-0.508219838142395,0.825478971004486,0.333341240882874,-0.455486595630646,0.956080257892609\n             ,0.274207085371017,-0.103542387485504,0.847964406013489,0.0018927511991933,-0.530049800872803,0.841212332248688\n             ,0.233560338616371,-0.487659126520157,0.974583148956299,0.15406733751297,-0.162637546658516,0.971639752388,-0.0853487625718117\n             ,-0.220526039600372,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.61088901758194,-0.78132575750351\n             ,0.127846345305443,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.784134566783905,-0.509350836277008\n             ,-0.354534596204758,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.61088901758194,-0.78132575750351\n             ,0.127846345305443,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.886275291442871,0.375701189041138\n             ,0.270859181880951,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.86350291967392,-0.290329337120056\n             ,-0.412397265434265,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.478379726409912,0.39488697052002\n             ,-0.784357786178589,0.727754414081573,0.0140857892110944,-0.685693144798279,0.3254614174366,-0.149335280060768\n             ,-0.933688282966614,-0.0490232147276402,-0.692386627197266,-0.71985936164856,0.889379680156708,-0.442159056663513\n             ,-0.116185612976551,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.86350291967392,-0.290329337120056\n             ,-0.412397265434265,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.0535960160195827,-0.641778349876404\n             ,-0.765015006065369,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.807643473148346,0.341063529253006\n             ,0.481027781963348,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.91961681842804,-0.250545829534531\n             ,-0.302542001008987,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.91961681842804,-0.250545829534531\n             ,-0.302542001008987,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.319865703582764,0.368970960378647\n             ,-0.872666239738464,-0.106276124715805,0.407822400331497,-0.906855165958405,0.450898140668869,-0.00387678225524724\n             ,-0.892566978931427,0.752802550792694,0.00600722571834922,-0.658219039440155,0.727935612201691,0.64398717880249\n             ,-0.23535118997097,0.488869249820709,0.539150297641754,-0.685801565647125,-0.571620225906372,0.314757347106934\n             ,-0.757745385169983,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.450898140668869,-0.00387678225524724\n             ,-0.892566978931427,0.294517815113068,0.487916797399521,-0.821703374385834,-0.74421751499176,0.314032524824142\n             ,-0.589511573314667,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.247537314891815,0.00721516087651253\n             ,-0.968851506710052,0.3254614174366,-0.149335280060768,-0.933688282966614,-0.0602304749190807,-0.267121762037277\n             ,-0.961778700351715,-0.434757024049759,-0.760941982269287,-0.481615632772446,0.709877908229828,-0.542047500610352\n             ,-0.44973087310791,-0.807643473148346,0.341063529253006,0.481027781963348,-0.521454632282257,-0.681395828723907\n             ,0.513599872589111,-0.809531450271606,0.353956669569016,0.468373239040375,-0.639626681804657,-0.543238401412964\n             ,0.543847143650055,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.454940319061279,-0.69178706407547\n             ,-0.560767292976379,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.809531450271606,0.353956669569016\n             ,0.468373239040375,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.985135495662689,0.16939789056778\n             ,0.0285019427537918,0.902499437332153,-0.42168003320694,0.0876398980617523,0.707824647426605,0.70638644695282\n             ,-0.00156357116065919,0.985135495662689,0.16939789056778,0.0285019427537918,0.727754414081573,0.0140857892110944\n             ,-0.685693144798279,0.209208816289902,-0.618555307388306,-0.757377743721008,0.902499437332153,-0.42168003320694\n             ,0.0876398980617523,0.752802550792694,0.00600722571834922,-0.658219039440155,0.794842600822449,-0.0390454083681107\n             ,-0.605558216571808,0.707824647426605,0.70638644695282,-0.00156357116065919,0.113118633627892,0.424383550882339\n             ,-0.898388981819153,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.515371859073639,-0.300769984722137\n             ,-0.802452027797699,-0.509106159210205,-0.777470827102661,-0.369256019592285,0.556583344936371,-0.535031855106354\n             ,-0.635575234889984,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.989869713783264,-0.139774799346924\n             ,-0.0249191801995039,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.989299476146698,0.112728737294674\n             ,0.0926214382052422,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.87356162071228,0.247192814946175\n             ,-0.419268190860748,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.784134566783905,-0.509350836277008\n             ,-0.354534596204758,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.989869713783264,-0.139774799346924\n             ,-0.0249191801995039,-0.888629198074341,0.438762098550797,0.133514106273651,-0.886275291442871,0.375701189041138\n             ,0.270859181880951,-0.948116004467011,0.0624199733138084,0.311736673116684,0.902499437332153,-0.42168003320694\n             ,0.0876398980617523,0.209208816289902,-0.618555307388306,-0.757377743721008,0.113118633627892,0.424383550882339\n             ,-0.898388981819153,0.707824647426605,0.70638644695282,-0.00156357116065919,0.209208816289902,-0.618555307388306\n             ,-0.757377743721008,0.727754414081573,0.0140857892110944,-0.685693144798279,0.752802550792694,0.00600722571834922\n             ,-0.658219039440155,0.113118633627892,0.424383550882339,-0.898388981819153,0.727754414081573,0.0140857892110944\n             ,-0.685693144798279,0.889379680156708,-0.442159056663513,-0.116185612976551,0.727935612201691,0.64398717880249\n             ,-0.23535118997097,0.752802550792694,0.00600722571834922,-0.658219039440155,0.889379680156708,-0.442159056663513\n             ,-0.116185612976551,-0.0490232147276402,-0.692386627197266,-0.71985936164856,-0.106276124715805,0.407822400331497\n             ,-0.906855165958405,0.727935612201691,0.64398717880249,-0.23535118997097,-0.0490232147276402,-0.692386627197266\n             ,-0.71985936164856,0.3254614174366,-0.149335280060768,-0.933688282966614,0.450898140668869,-0.00387678225524724\n             ,-0.892566978931427,-0.106276124715805,0.407822400331497,-0.906855165958405,0.3254614174366,-0.149335280060768\n             ,-0.933688282966614,0.709877908229828,-0.542047500610352,-0.44973087310791,0.488869249820709,0.539150297641754\n             ,-0.685801565647125,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.709877908229828,-0.542047500610352\n             ,-0.44973087310791,-0.434757024049759,-0.760941982269287,-0.481615632772446,-0.571620225906372,0.314757347106934\n             ,-0.757745385169983,0.488869249820709,0.539150297641754,-0.685801565647125,-0.434757024049759,-0.760941982269287\n             ,-0.481615632772446,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.247537314891815,0.00721516087651253\n             ,-0.968851506710052,-0.571620225906372,0.314757347106934,-0.757745385169983,-0.0602304749190807,-0.267121762037277\n             ,-0.961778700351715,0.556583344936371,-0.535031855106354,-0.635575234889984,0.294517815113068,0.487916797399521\n             ,-0.821703374385834,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.556583344936371,-0.535031855106354\n             ,-0.635575234889984,-0.509106159210205,-0.777470827102661,-0.369256019592285,-0.74421751499176,0.314032524824142\n             ,-0.589511573314667,0.294517815113068,0.487916797399521,-0.821703374385834,-0.509106159210205,-0.777470827102661\n             ,-0.369256019592285,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.633409440517426,-0.235751509666443\n             ,-0.737030327320099,-0.74421751499176,0.314032524824142,-0.589511573314667,-0.515371859073639,-0.300769984722137\n             ,-0.802452027797699,-0.0535960160195827,-0.641778349876404,-0.765015006065369,-0.319865703582764,0.368970960378647\n             ,-0.872666239738464,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.0535960160195827,-0.641778349876404\n             ,-0.765015006065369,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.952590048313141,0.304238706827164\n             ,-0.00332731963135302,-0.319865703582764,0.368970960378647,-0.872666239738464,-0.667489945888519,-0.736912131309509\n             ,0.106853626668453,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.91961681842804,-0.250545829534531\n             ,-0.302542001008987,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.86350291967392,-0.290329337120056\n             ,-0.412397265434265,-0.454940319061279,-0.69178706407547,-0.560767292976379,-0.735480487346649,0.344063550233841\n             ,-0.583685457706451,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.454940319061279,-0.69178706407547\n             ,-0.560767292976379,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.807643473148346,0.341063529253006\n             ,0.481027781963348,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.526285529136658,-0.789061963558197\n             ,0.316867142915726,-0.133638396859169,-0.991028487682343,-0.00182775978464633,-0.133638396859169,-0.991028487682343\n             ,-0.00182775978464633,-0.289891123771667,-0.78655070066452,0.545253217220306,-0.289891123771667,-0.78655070066452\n             ,0.545253217220306,0.017691396176815,-0.98781031370163,0.15465372800827,0.017691396176815,-0.98781031370163,0.15465372800827\n             ,0.139990121126175,-0.714202702045441,0.685796797275543,0.432984858751297,-0.720436871051788,0.541751623153687\n             ,0.139990121126175,-0.714202702045441,0.685796797275543,0.316983908414841,-0.933099210262299,0.169844269752502\n             ,0.316983908414841,-0.933099210262299,0.169844269752502,0.355301350355148,-0.934036493301392,0.0365620106458664\n             ,0.355301350355148,-0.934036493301392,0.0365620106458664,0.617214262485504,-0.750285804271698,0.236891880631447\n             ,0.432984858751297,-0.720436871051788,0.541751623153687,0.397023230791092,-0.910409390926361,-0.116307109594345\n             ,0.713743150234222,-0.689680516719818,-0.122112594544888,0.617214262485504,-0.750285804271698,0.236891880631447\n             ,0.397023230791092,-0.910409390926361,-0.116307109594345,0.387578755617142,-0.825659155845642,-0.409962981939316\n             ,0.698415637016296,-0.626996219158173,-0.345096111297607,0.713743150234222,-0.689680516719818,-0.122112594544888\n             ,0.387578755617142,-0.825659155845642,-0.409962981939316,0.698415637016296,-0.626996219158173,-0.345096111297607\n             ,0.347473055124283,-0.882382750511169,-0.31727460026741,0.347473055124283,-0.882382750511169,-0.31727460026741\n             ,0.632658183574677,-0.595792829990387,-0.494746923446655,0.366124451160431,-0.844667136669159,-0.390500038862228\n             ,0.582049369812012,-0.552822172641754,-0.596327304840088,0.632658183574677,-0.595792829990387,-0.494746923446655\n             ,0.366124451160431,-0.844667136669159,-0.390500038862228,0.0932797566056252,-0.850050926208496,-0.518374681472778\n             ,0.0932797566056252,-0.850050926208496,-0.518374681472778,-0.107030250132084,-0.605656087398529,-0.788495600223541\n             ,0.16710638999939,-0.594872176647186,-0.786258578300476,-0.0686139315366745,-0.854096055030823,-0.515569627285004\n             ,-0.207464292645454,-0.894959568977356,-0.394975960254669,-0.451495438814163,-0.670070111751556,-0.589201033115387\n             ,-0.107030250132084,-0.605656087398529,-0.788495600223541,-0.451495438814163,-0.670070111751556,-0.589201033115387\n             ,-0.207464292645454,-0.894959568977356,-0.394975960254669,-0.3389513194561,-0.904059052467346,-0.260363727807999\n             ,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.526285529136658,-0.789061963558197,0.316867142915726\n             ,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.788328349590302,-0.474288523197174,0.39190411567688\n             ,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.997484087944031,-0.0642545074224472,-0.0299487132579088\n             ,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.848265528678894,-0.243028342723846,0.47051340341568\n             ,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.884543001651764,-0.164741396903992,0.436398863792419\n             ,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.983820915222168,-0.177888512611389,-0.0212618205696344\n             ,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.867790400981903,-0.310010522603989,0.388372659683228\n             ,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.982089936733246,-0.183242216706276,-0.0438368730247021\n             ,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.788328349590302,-0.474288523197174,0.39190411567688\n             ,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.987256348133087,-0.145976811647415,-0.063369482755661\n             ,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.599566876888275,-0.77289891242981,-0.207718148827553\n             ,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.788328349590302,-0.474288523197174,0.39190411567688\n             ,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.599566876888275,-0.77289891242981,-0.207718148827553\n             ,-0.182520136237144,-0.960930228233337,-0.208085164427757,-0.562327146530151,-0.809826016426086,0.167242348194122\n             ,0.238703370094299,-0.21425598859787,0.947161555290222,0.328837275505066,-0.326990753412247,0.885970175266266\n             ,0.199919357895851,-0.342281520366669,0.918082594871521,0.709650099277496,-0.321021109819412,0.627169966697693\n             ,0.251838862895966,-0.440983474254608,0.861458539962769,0.0749799236655235,0.161466613411903,0.984025657176971\n             ,0.460760354995728,0.108215063810349,0.880902588367462,0.072246678173542,-0.0245807897299528,0.997083842754364\n             ,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.280184537172318,-0.219449639320374,0.934525847434998\n             ,0.0549214817583561,-0.121100522577763,0.991119742393494,0.072246678173542,-0.0245807897299528,0.997083842754364\n             ,-0.280184537172318,-0.219449639320374,0.934525847434998,-0.371589094400406,-0.191971749067307,0.908332765102386\n             ,0.904132843017578,0.38877084851265,-0.177203312516212,0.924062311649323,0.166339710354805,-0.344151109457016\n             ,0.985335350036621,0.0123839350417256,-0.170178771018982,-0.944730460643768,-0.313157916069031,-0.0970383062958717\n             ,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.89118105173111,-0.452543765306473,0.0316311828792095\n             ,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.979109942913055,-0.187053516507149,-0.0797165557742119\n             ,0.781636536121368,0.602840006351471,-0.160088449716568,0.917835712432861,0.197176292538643,-0.344527393579483\n             ,0.792211890220642,0.491865277290344,-0.361204653978348,-0.52398544549942,-0.396743208169937,0.753680348396301\n             ,-0.481494218111038,-0.48454275727272,0.730329811573029,-0.75563770532608,-0.50673520565033,0.415007293224335\n             ,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.882953405380249,0.46945133805275,0.00294615048915148\n             ,-0.833821058273315,0.528545200824738,-0.159318462014198,-0.844159960746765,0.49836453795433,-0.197551965713501\n             ,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.829591572284698,0.0585402958095074,0.555293500423431\n             ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.941641628742218,-0.00888281501829624,0.336499899625778\n             ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.973927080631256,-0.0629245564341545,0.217960059642792\n             ,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.727824807167053,-0.528583109378815,-0.436887800693512\n             ,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.994358837604523,0.088942214846611,0.0577910803258419\n             ,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.644507586956024,0.336329728364944,0.686652958393097\n             ,-0.642944931983948,0.0801258310675621,0.761709690093994,0.495204418897629,-0.163849160075188,0.853185832500458\n             ,0.0833947658538818,-0.437338054180145,0.895422101020813,0.54774808883667,0.373568952083588,0.74861091375351\n             ,0.628335058689117,0.550278067588806,0.549899160861969,0.86673891544342,0.195172861218452,-0.458989411592484\n             ,0.87714958190918,0.359215557575226,-0.318704843521118,0.868426561355591,0.2465450912714,-0.430175423622131,-0.941869378089905\n             ,-0.335682570934296,-0.0141169847920537,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.772903144359589\n             ,-0.524522066116333,-0.357067674398422,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.866889953613281\n             ,-0.48840057849884,-0.0998335108160973,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.865038812160492\n             ,0.500161468982697,0.0393235273659229,-0.332606077194214,0.942266285419464,-0.0388254560530186,-0.28744050860405\n             ,0.955214440822601,-0.0703088492155075,-0.776516318321228,0.531664490699768,-0.33816459774971,0.843789756298065\n             ,-0.527951836585999,-0.0963620916008949,0.843789756298065,-0.527951836585999,-0.0963620916008949,0.843789756298065\n             ,-0.527951836585999,-0.0963620916008949,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.928109109401703\n             ,-0.270218104124069,0.256116449832916,0.943277299404144,-0.202248081564903,0.263293832540512,0.776516377925873\n             ,0.531664490699768,-0.338164389133453,0.287440627813339,0.955214440822601,-0.070308543741703,0.332606196403503\n             ,0.942266285419464,-0.0388250686228275,0.865038812160492,0.500161468982697,0.0393240377306938,0.182520046830177\n             ,-0.960930287837982,-0.208085060119629,0.581761598587036,-0.790978848934174,-0.189488589763641,0.562327146530151\n             ,-0.809826016426086,0.167242258787155,0.198757439851761,-0.919363081455231,-0.339509904384613,0.603638291358948\n             ,-0.670441269874573,-0.431427150964737,0.581761598587036,-0.790978848934174,-0.189488589763641,0.198757439851761\n             ,-0.919363081455231,-0.339509904384613,-0.272133141756058,-0.872126579284668,-0.406618744134903,-0.599566876888275\n             ,-0.77289891242981,-0.207718148827553,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.141517594456673\n             ,-0.947756111621857,-0.285886585712433,-0.141517594456673,-0.947756111621857,-0.285886585712433,-0.141517594456673\n             ,-0.947756111621857,-0.285886585712433,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.709949254989624\n             ,0.60140985250473,0.366439938545227,-0.380683273077011,0.86094468832016,0.337423235177994,-0.462400823831558\n             ,0.884378015995026,0.0637255012989044,0.73961067199707,0.263024806976318,-0.619511127471924,0.792211890220642\n             ,0.491865277290344,-0.361204653978348,0.917835712432861,0.197176292538643,-0.344527393579483,0.0910219326615334\n             ,-0.210485890507698,-0.97335022687912,0.265012234449387,-0.116133384406567,-0.957225978374481,0.320743799209595\n             ,-0.127513855695724,-0.938543379306793,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.116710253059864\n             ,-0.118150681257248,-0.986113131046295,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.310650229454041\n             ,0.283165037631989,-0.907366514205933,-0.277701437473297,0.780102908611298,-0.56064373254776,0.11270098388195\n             ,0.815884530544281,-0.567125082015991,0.0699164718389511,0.326290965080261,-0.942680180072784,0.825562000274658\n             ,0.439345568418503,-0.354150801897049,0.825562000274658,0.439345568418503,-0.354150801897049,0.825562000274658\n             ,0.439345568418503,-0.354150801897049,0.660678803920746,-0.179935500025749,0.728784441947937,0.664143323898315\n             ,-0.190197542309761,0.72300660610199,0.280544310808182,-0.2230264544487,0.933570623397827,0.370588421821594,-0.193350583314896\n             ,0.908449113368988,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.978282392024994,-0.200846880674362\n             ,-0.0512255467474461,0.861376106739044,-0.246860504150391,0.443949490785599,0.884072363376617,-0.159779712557793\n             ,0.439188450574875,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.881938695907593,-0.0529328174889088\n             ,-0.468382596969604,0.978282392024994,-0.200846880674362,-0.0512255467474461,0.988763093948364,-0.140536084771156\n             ,-0.0509620234370232,0.881938695907593,-0.0529328174889088,-0.468382596969604,0.883630573749542,-0.0664602965116501\n             ,-0.463443666696548,0.639175117015839,0.0817547887563705,-0.764703452587128,0.632078886032104,0.0873222127556801\n             ,-0.769968271255493,0.230421900749207,0.163790717720985,-0.95920717716217,0.632078886032104,0.0873222127556801\n             ,-0.769968271255493,0.639175117015839,0.0817547887563705,-0.764703452587128,0.243145853281021,0.221795409917831\n             ,-0.944291710853577,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.227913439273834,0.190211743116379\n             ,-0.954921424388886,0.230421900749207,0.163790717720985,-0.95920717716217,0.243145853281021,0.221795409917831\n             ,-0.944291710853577,-0.686836779117584,0.183132573962212,-0.703361690044403,-0.227913439273834,0.190211743116379\n             ,-0.954921424388886,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.673633635044098,0.289073169231415\n             ,-0.680187046527863,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.850684106349945,0.180962756276131\n             ,-0.493547379970551,-0.686836779117584,0.183132573962212,-0.703361690044403,-0.673633635044098,0.289073169231415\n             ,-0.680187046527863,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.958607912063599,0.205605447292328\n             ,-0.196970209479332,-0.850684106349945,0.180962756276131,-0.493547379970551,-0.857439279556274,0.218963667750359\n             ,-0.465674519538879,-0.93060040473938,0.126688674092293,0.343413561582565,-0.924485385417938,0.137891575694084\n             ,0.355404943227768,-0.958607912063599,0.205605447292328,-0.196970209479332,-0.964663922786713,0.191057458519936\n             ,-0.18144017457962,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.389621406793594,0.0748821347951889\n             ,0.917925834655762,-0.698271632194519,0.0533006526529789,0.713845789432526,-0.703129649162292,0.0220469851046801\n             ,0.710719764232636,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.1855189204216,-0.00743514811620116\n             ,0.982612550258636,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.388236194849014,-0.50770115852356\n             ,0.769098341464996,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.389621406793594,0.0748821347951889\n             ,0.917925834655762,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.0499088205397129,-0.128681614995003\n             ,0.990429282188416,0.319739699363709,-0.689254701137543,0.650149524211884,0.329437464475632,-0.321430414915085\n             ,0.887780070304871,0.668613970279694,-0.338565081357956,0.662064254283905,0.68229067325592,-0.351099163293839\n             ,0.641255617141724,0.811961233615875,-0.33458149433136,0.478303402662277,0.68229067325592,-0.351099163293839\n             ,0.641255617141724,0.668613970279694,-0.338565081357956,0.662064254283905,0.82292628288269,-0.280684322118759\n             ,0.493972301483154,0.98552018404007,-0.14923769235611,-0.0804868638515472,0.811961233615875,-0.33458149433136\n             ,0.478303402662277,0.82292628288269,-0.280684322118759,0.493972301483154,0.991608023643494,-0.114275835454464\n             ,-0.060452651232481,0.881715893745422,0.054974939674139,-0.468566834926605,0.878365039825439,0.0618300177156925\n             ,-0.473974645137787,0.98552018404007,-0.14923769235611,-0.0804868638515472,0.991608023643494,-0.114275835454464\n             ,-0.060452651232481,0.878365039825439,0.0618300177156925,-0.473974645137787,0.881715893745422,0.054974939674139\n             ,-0.468566834926605,0.676566541194916,0.144181370735168,-0.722128391265869,0.696259915828705,0.165328323841095\n             ,-0.6984903216362,0.676566541194916,0.144181370735168,-0.722128391265869,0.286524504423141,0.225191175937653\n             ,-0.931231796741486,0.3039411008358,0.26229527592659,-0.915871679782867,0.696259915828705,0.165328323841095,-0.6984903216362\n             ,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.213439926505089,0.370307356119156,-0.904055237770081\n             ,0.3039411008358,0.26229527592659,-0.915871679782867,0.286524504423141,0.225191175937653,-0.931231796741486,-0.639900922775269\n             ,0.420081675052643,-0.643473565578461,-0.213439926505089,0.370307356119156,-0.904055237770081,-0.214377388358116\n             ,0.321097940206528,-0.922463238239288,-0.653601109981537,0.351934164762497,-0.670035779476166,-0.653601109981537\n             ,0.351934164762497,-0.670035779476166,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.820141792297363\n             ,0.414948493242264,-0.393935561180115,-0.639900922775269,0.420081675052643,-0.643473565578461,-0.843356728553772\n             ,0.326204419136047,-0.427013009786606,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.944865584373474\n             ,0.320159882307053,-0.0687510371208191,-0.820141792297363,0.414948493242264,-0.393935561180115,-0.935219764709473\n             ,0.0955542922019959,0.340930134057999,-0.944865584373474,0.320159882307053,-0.0687510371208191,-0.957767188549042\n             ,0.271569937467575,-0.094508096575737,-0.927268087863922,0.115808911621571,0.356036812067032,-0.709845840930939\n             ,-0.0613325238227844,0.701681673526764,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.935219764709473\n             ,0.0955542922019959,0.340930134057999,-0.927268087863922,0.115808911621571,0.356036812067032,0.602446496486664\n             ,-0.488442957401276,0.631254017353058,0.78125125169754,-0.138539433479309,0.608648777008057,0.805302381515503\n             ,-0.358387529850006,0.472277879714966,0.605372726917267,0.000812157464679331,0.795941710472107,0.602446496486664\n             ,-0.488442957401276,0.631254017353058,0.319739699363709,-0.689254701137543,0.650149524211884,0.408358931541443\n             ,-0.833707392215729,0.371718913316727,0.805302381515503,-0.358387529850006,0.472277879714966,0.685771405696869\n             ,-0.727804124355316,0.00433491868898273,0.301932573318481,-0.883707880973816,0.357627093791962,0.622698485851288\n             ,-0.640293836593628,0.44974485039711,0.78181403875351,-0.124027468264103,-0.611051499843597,0.368462383747101\n             ,-0.106815822422504,-0.923485696315765,0.318273335695267,-0.280295252799988,-0.905613958835602,0.746579051017761\n             ,-0.327975332736969,-0.578836619853973,0.383778035640717,0.0243120118975639,-0.923105239868164,0.368462383747101\n             ,-0.106815822422504,-0.923485696315765,0.78181403875351,-0.124027468264103,-0.611051499843597,0.780589640140533\n             ,-0.0567772276699543,-0.622459769248962,0.872841775417328,-0.161784738302231,-0.460405200719833,0.645673513412476\n             ,-0.0602749027311802,-0.761231005191803,0.653478145599365,0.112765118479729,-0.748498737812042,0.892382204532623\n             ,-0.0374441854655743,-0.449724316596985,0.603638291358948,-0.670441269874573,-0.431427150964737,0.442950963973999\n             ,-0.635696709156036,-0.632205784320831,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.872841775417328\n             ,-0.161784738302231,-0.460405200719833,0.219755545258522,-0.882318615913391,-0.416198641061783,0.442950963973999\n             ,-0.635696709156036,-0.632205784320831,0.603638291358948,-0.670441269874573,-0.431427150964737,0.362535744905472\n             ,-0.881527543067932,-0.302451580762863,-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.176827967166901\n             ,-0.795711040496826,-0.579288959503174,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.217101514339447\n             ,-0.0525678582489491,-0.974732518196106,-0.187843710184097,0.254132181406021,-0.948752641677856,0.24560159444809\n             ,0.232358887791634,-0.941110610961914,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.345599442720413\n             ,-0.564565002918243,-0.74955141544342,0.224707394838333,-0.83567225933075,-0.501157164573669,0.224707394838333\n             ,-0.83567225933075,-0.501157164573669,0.16710638999939,-0.594872176647186,-0.786258578300476,0.156650885939598\n             ,0.00669354572892189,-0.987631380558014,0.422739714384079,7.39172464818694e-005,-0.906251132488251,0.345599442720413\n             ,-0.564565002918243,-0.74955141544342,0.16710638999939,-0.594872176647186,-0.786258578300476,0.394656956195831\n             ,0.265770107507706,-0.879552245140076,0.422739714384079,7.39172464818694e-005,-0.906251132488251,0.156650885939598\n             ,0.00669354572892189,-0.987631380558014,0.168669149279594,0.29014664888382,-0.942000865936279,0.431132704019547\n             ,0.237300783395767,-0.870524525642395,0.394656956195831,0.265770107507706,-0.879552245140076,0.168669149279594\n             ,0.29014664888382,-0.942000865936279,0.2085961997509,0.239187613129616,-0.948302090167999,0.491525501012802,0.22898742556572\n             ,-0.840218663215637,0.431132704019547,0.237300783395767,-0.870524525642395,0.2085961997509,0.239187613129616\n             ,-0.948302090167999,0.222743824124336,0.213152140378952,-0.951289296150208,0.502497434616089,0.354075133800507\n             ,-0.788750350475311,0.491525501012802,0.22898742556572,-0.840218663215637,0.222743824124336,0.213152140378952\n             ,-0.951289296150208,0.215944558382034,0.319608330726624,-0.922614991664886,0.500628232955933,0.440243989229202\n             ,-0.745356738567352,0.502497434616089,0.354075133800507,-0.788750350475311,0.215944558382034,0.319608330726624\n             ,-0.922614991664886,0.224338784813881,0.414775222539902,-0.881835401058197,0.49361053109169,0.523924946784973\n             ,-0.694155097007751,0.500628232955933,0.440243989229202,-0.745356738567352,0.224338784813881,0.414775222539902\n             ,-0.881835401058197,0.233416378498077,0.501707494258881,-0.832950413227081,0.471412837505341,0.597895562648773\n             ,-0.648298442363739,0.49361053109169,0.523924946784973,-0.694155097007751,0.233416378498077,0.501707494258881\n             ,-0.832950413227081,0.216972485184669,0.595779240131378,-0.773285210132599,0.44583061337471,0.492900937795639\n             ,-0.747183859348297,0.471412837505341,0.597895562648773,-0.648298442363739,0.216972485184669,0.595779240131378\n             ,-0.773285210132599,0.204966142773628,0.497180044651031,-0.843090057373047,0.424920648336411,0.331089466810226\n             ,-0.842509508132935,0.44583061337471,0.492900937795639,-0.747183859348297,0.204966142773628,0.497180044651031\n             ,-0.843090057373047,0.184527859091759,0.31499707698822,-0.930981338024139,0.354670226573944,0.281918495893478\n             ,-0.89147686958313,0.424920648336411,0.331089466810226,-0.842509508132935,0.184527859091759,0.31499707698822\n             ,-0.930981338024139,0.152592211961746,0.243283241987228,-0.957877278327942,0.236234411597252,0.0899422541260719\n             ,-0.967524528503418,0.468770742416382,0.121921703219414,-0.874865233898163,0.354670226573944,0.281918495893478\n             ,-0.89147686958313,0.152592211961746,0.243283241987228,-0.957877278327942,0.0293396916240454,-0.0204683300107718\n             ,-0.999359905719757,0.0897360891103745,0.0411871410906315,-0.995113611221313,0.152592211961746,0.243283241987228\n             ,-0.957877278327942,-0.0849575996398926,0.129486069083214,-0.9879350066185,0.181899905204773,-0.161402761936188\n             ,-0.969980180263519,0.0897360891103745,0.0411871410906315,-0.995113611221313,0.0293396916240454,-0.0204683300107718\n             ,-0.999359905719757,0.097769021987915,-0.178414672613144,-0.979085981845856,0.183815449476242,-0.694319665431976\n             ,-0.695795953273773,0.287791073322296,-0.680340945720673,-0.67402708530426,0.210264012217522,-0.226016640663147\n             ,-0.951160073280334,0.183815449476242,-0.694319665431976,-0.695795953273773,0.181899905204773,-0.161402761936188\n             ,-0.969980180263519,0.097769021987915,-0.178414672613144,-0.979085981845856,-0.248274028301239,-0.562410414218903\n             ,0.788704335689545,0.626252830028534,0.308739811182022,0.715882003307343,0.750469028949738,0.503480017185211\n             ,0.42814028263092,0.0119833052158356,-0.684736132621765,0.728692531585693,0.991423904895782,0.113214619457722\n             ,0.0652767568826675,0.80362457036972,-0.592847883701324,0.052143108099699,0.960353672504425,0.263352990150452\n             ,0.0914659649133682,0.815547049045563,-0.485381871461868,-0.315099239349365,0.972172915935516,-0.00723095051944256\n             ,0.234152868390083,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.183815449476242,-0.694319665431976\n             ,-0.695795953273773,0.097769021987915,-0.178414672613144,-0.979085981845856,-0.361754894256592,-0.299040019512177\n             ,-0.883011043071747,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.407887548208237,-0.115010686218739\n             ,-0.905759513378143,-0.361754894256592,-0.299040019512177,-0.883011043071747,0.097769021987915,-0.178414672613144\n             ,-0.979085981845856,0.0293396916240454,-0.0204683300107718,-0.999359905719757,-0.412408858537674,0.0103200003504753\n             ,-0.910940408706665,-0.407887548208237,-0.115010686218739,-0.905759513378143,0.0293396916240454,-0.0204683300107718\n             ,-0.999359905719757,-0.0849575996398926,0.129486069083214,-0.9879350066185,-0.438451677560806,0.0950856506824493\n             ,-0.893710732460022,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.0849575996398926,0.129486069083214\n             ,-0.9879350066185,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.552984535694122,0.0753506049513817\n             ,-0.829777300357819,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.154521003365517,0.240299493074417\n             ,-0.958321154117584,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.314977377653122,0.411381006240845\n             ,-0.855309844017029,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.552984535694122,0.0753506049513817\n             ,-0.829777300357819,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.76449728012085,0.158614858984947\n             ,-0.624808132648468,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.314977377653122,0.411381006240845\n             ,-0.855309844017029,-0.337705463171005,0.352743804454803,-0.872655034065247,-0.738151073455811,0.192115649580956\n             ,-0.646702826023102,-0.76449728012085,0.158614858984947,-0.624808132648468,-0.337705463171005,0.352743804454803\n             ,-0.872655034065247,-0.323528319597244,0.300020337104797,-0.89739465713501,-0.683530271053314,0.162589937448502\n             ,-0.711583316326141,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.323528319597244,0.300020337104797\n             ,-0.89739465713501,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.243201240897179,0.169641554355621\n             ,-0.955026090145111,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.683530271053314,0.162589937448502\n             ,-0.711583316326141,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.643724501132965,0.0191281009465456\n             ,-0.765018165111542,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.243201240897179,0.169641554355621\n             ,-0.955026090145111,-0.233401030302048,0.186044618487358,-0.954416751861572,-0.261592835187912,0.265700459480286\n             ,-0.927886009216309,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.643724501132965,0.0191281009465456\n             ,-0.765018165111542,-0.233401030302048,0.186044618487358,-0.954416751861572,-0.700080990791321,-0.0367838852107525\n             ,-0.713115334510803,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.261592835187912,0.265700459480286\n             ,-0.927886009216309,-0.255131036043167,0.019106624647975,-0.966717660427094,-0.0161609761416912,0.992576837539673\n             ,-0.120540797710419,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.0235754959285259,0.833040595054626\n             ,-0.552709341049194,0.0145869944244623,0.988409578800201,-0.151108130812645,0.707107186317444,1.42954419857233e-007\n             ,-0.707106351852417,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.351822137832642,0.145729631185532\n             ,-0.924653470516205,0.653282701969147,0.27059879899025,-0.707105338573456,0.653282701969147,0.27059879899025\n             ,-0.707105338573456,0.351822137832642,0.145729631185532,-0.924653470516205,0.269274324178696,0.269274234771729\n             ,-0.924652755260468,0.500002682209015,0.500003159046173,-0.707102656364441,0.500002682209015,0.500003159046173\n             ,-0.707102656364441,0.269274324178696,0.269274234771729,-0.924652755260468,0.145730510354042,0.351823717355728\n             ,-0.924652755260468,0.270599722862244,0.653285622596741,-0.707102358341217,0.270599722862244,0.653285622596741\n             ,-0.707102358341217,0.145730510354042,0.351823717355728,-0.924652755260468,-4.91471212171746e-007,0.380813121795654\n             ,-0.92465204000473,-8.65250569859199e-007,0.707113921642303,-0.707099616527557,-8.65250569859199e-007,0.707113921642303\n             ,-0.707099616527557,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,-0.145731240510941,0.351825833320618\n             ,-0.924651801586151,-0.270600706338882,0.653288960456848,-0.707098841667175,-0.270600706338882,0.653288960456848\n             ,-0.707098841667175,-0.145731240510941,0.351825833320618,-0.924651801586151,-0.269273996353149,0.269273847341537\n             ,-0.924652934074402,-0.500002384185791,0.500002264976501,-0.707103490829468,-0.500002384185791,0.500002264976501\n             ,-0.707103490829468,-0.269273996353149,0.269273847341537,-0.924652934074402,-0.351821750402451,0.145729392766953\n             ,-0.924653649330139,-0.653282523155212,0.270598083734512,-0.707105815410614,-0.653282523155212,0.270598083734512\n             ,-0.707105815410614,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.38080957531929,-5.00349642607034e-007\n             ,-0.92465353012085,-0.707108438014984,-4.28863302204263e-007,-0.707105159759521,-0.707108438014984,-4.28863302204263e-007\n             ,-0.707105159759521,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.351821571588516,-0.145729005336761\n             ,-0.924653768539429,-0.653282105922699,-0.270597249269485,-0.707106530666351,-0.653282105922699,-0.270597249269485\n             ,-0.707106530666351,-0.351821571588516,-0.145729005336761,-0.924653768539429,-0.269271582365036,-0.269272118806839\n             ,-0.924654185771942,-0.499998718500137,-0.499999731779099,-0.707107841968536,-0.499998718500137,-0.499999731779099\n             ,-0.707107841968536,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.145729050040245,-0.351821690797806\n             ,-0.924653708934784,-0.270597517490387,-0.653282105922699,-0.707106411457062,-0.270597517490387,-0.653282105922699\n             ,-0.707106411457062,-0.145729050040245,-0.351821690797806,-0.924653708934784,7.21318116347902e-008,-0.380809605121613\n             ,-0.924653470516205,3.76195913531774e-007,-0.707108318805695,-0.707105219364166,3.76195913531774e-007,-0.707108318805695\n             ,-0.707105219364166,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,0.145730197429657,-0.351823180913925\n             ,-0.924652993679047,0.270599752664566,-0.653284311294556,-0.707103490829468,0.270599752664566,-0.653284311294556\n             ,-0.707103490829468,0.145730197429657,-0.351823180913925,-0.924652993679047,0.269273817539215,-0.269274026155472\n             ,-0.924652934074402,0.500002145767212,-0.500002562999725,-0.707103431224823,0.500002145767212,-0.500002562999725\n             ,-0.707103431224823,0.269273817539215,-0.269274026155472,-0.924652934074402,0.351822197437286,-0.145729750394821\n             ,-0.92465341091156,0.653282999992371,-0.270599007606506,-0.707105040550232,0.653282999992371,-0.270599007606506\n             ,-0.707105040550232,0.351822197437286,-0.145729750394821,-0.92465341091156,0.380808919668198,7.69873338413163e-008\n             ,-0.924653768539429,0.707107186317444,1.42954419857233e-007,-0.707106351852417,2.76187535064309e-008,-1.53088933529943e-007\n             ,-1,0.351822137832642,0.145729631185532,-0.924653470516205,0.380808919668198,7.69873338413163e-008,-0.924653768539429\n             ,2.76187535064309e-008,-1.53088933529943e-007,-1,0.269274324178696,0.269274234771729,-0.924652755260468,0.351822137832642\n             ,0.145729631185532,-0.924653470516205,2.76187535064309e-008,-1.53088933529943e-007,-1,0.145730510354042,0.351823717355728\n             ,-0.924652755260468,0.269274324178696,0.269274234771729,-0.924652755260468,2.76187535064309e-008,-1.53088933529943e-007\n             ,-1,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,0.145730510354042,0.351823717355728,-0.924652755260468\n             ,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.145731240510941,0.351825833320618,-0.924651801586151,-4.91471212171746e-007\n             ,0.380813121795654,-0.92465204000473,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.269273996353149,0.269273847341537\n             ,-0.924652934074402,-0.145731240510941,0.351825833320618,-0.924651801586151,2.76187535064309e-008,-1.53088933529943e-007\n             ,-1,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.269273996353149,0.269273847341537,-0.924652934074402\n             ,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.351821750402451\n             ,0.145729392766953,-0.924653649330139,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.351821571588516,-0.145729005336761\n             ,-0.924653768539429,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,2.76187535064309e-008,-1.53088933529943e-007\n             ,-1,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.351821571588516,-0.145729005336761,-0.924653768539429\n             ,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.145729050040245,-0.351821690797806,-0.924653708934784,-0.269271582365036\n             ,-0.269272118806839,-0.924654185771942,2.76187535064309e-008,-1.53088933529943e-007,-1,7.21318116347902e-008\n             ,-0.380809605121613,-0.924653470516205,-0.145729050040245,-0.351821690797806,-0.924653708934784,2.76187535064309e-008\n             ,-1.53088933529943e-007,-1,0.145730197429657,-0.351823180913925,-0.924652993679047,7.21318116347902e-008,-0.380809605121613\n             ,-0.924653470516205,2.76187535064309e-008,-1.53088933529943e-007,-1,0.269273817539215,-0.269274026155472,-0.924652934074402\n             ,0.145730197429657,-0.351823180913925,-0.924652993679047,2.76187535064309e-008,-1.53088933529943e-007,-1,0.351822197437286\n             ,-0.145729750394821,-0.92465341091156,0.269273817539215,-0.269274026155472,-0.924652934074402,2.76187535064309e-008\n             ,-1.53088933529943e-007,-1,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.351822197437286,-0.145729750394821\n             ,-0.92465341091156,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,-0.16665855050087,-0.398711144924164\n             ,-0.901806175708771,-0.166320815682411,-0.355819970369339,-0.919635534286499,-4.25225262006279e-005,-0.53346848487854\n             ,-0.84581995010376,-0.625531196594238,-0.119070827960968,-0.771059572696686,-0.583353996276855,0.174302786588669\n             ,-0.793294787406921,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.474208623170853,-0.238814353942871\n             ,-0.847404181957245,-0.700383901596069,-0.324826598167419,-0.635570704936981,-0.626655638217926,-0.314949661493301\n             ,-0.712817966938019,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.539180338382721,-0.263834714889526\n             ,-0.799797356128693,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.646563589572906,-0.121796235442162\n             ,-0.753074467182159,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.892938792705536,-0.105374619364738\n             ,0.437671780586243,-0.00141415814869106,-0.878426611423492,0.477875143289566,-0.352033823728561,-0.930627882480621\n             ,-0.100019671022892,-0.166118785738945,-0.764228582382202,-0.623184740543365,4.79029440612067e-005,-0.794294953346252\n             ,-0.607532322406769,-0.442375749349594,0.0474703647196293,-0.895572602748871,-0.583353996276855,0.174302786588669\n             ,-0.793294787406921,-0.283784359693527,0.524189174175262,-0.802927255630493,-0.322878926992416,0.229583457112312\n             ,-0.918172419071198,0.343204021453857,-0.33707195520401,-0.876694619655609,-0.193181023001671,-0.0350730493664742\n             ,-0.980536043643951,-0.148570522665977,-0.138561144471169,-0.979146361351013,0.179372578859329,-0.472685307264328\n             ,-0.862782776355743,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.193181023001671,-0.0350730493664742\n             ,-0.980536043643951,0.465988546609879,-0.185971200466156,-0.865025639533997,0.519467711448669,0.00208272109739482\n             ,-0.854487538337708,-0.00083814247045666,0.651532232761383,-0.758620500564575,-0.000496746390126646,0.380419790744781\n             ,-0.924813807010651,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.283784359693527,0.524189174175262\n             ,-0.802927255630493,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.892938792705536,-0.105374619364738\n             ,0.437671780586243,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.616882503032684,-0.380074203014374\n             ,-0.689202189445496,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.397642314434052,-0.650192856788635\n             ,-0.647402346134186,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.720038771629334,-0.514539837837219\n             ,0.465610325336456,-0.134015202522278,-0.116930104792118,-0.984056532382965,-9.11212846403942e-005,-0.237379238009453\n             ,-0.97141706943512,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,-0.166320815682411,-0.355819970369339\n             ,-0.919635534286499,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,-0.127862602472305,-0.339489370584488\n             ,-0.931878805160522,0.188191697001457,0.451240569353104,-0.872333526611328,-7.12665205355734e-005,0.481959730386734\n             ,-0.876193344593048,0.892129957675934,0.00357697787694633,-0.451764702796936,0.519467711448669,0.00208272109739482\n             ,-0.854487538337708,0.465988546609879,-0.185971200466156,-0.865025639533997,0.810467839241028,-0.323448747396469\n             ,-0.488387942314148,0.810467839241028,-0.323448747396469,-0.488387942314148,0.465988546609879,-0.185971200466156\n             ,-0.865025639533997,0.343204021453857,-0.33707195520401,-0.876694619655609,0.604493975639343,-0.595244467258453\n             ,-0.529406309127808,0.604493975639343,-0.595244467258453,-0.529406309127808,0.343204021453857,-0.33707195520401\n             ,-0.876694619655609,0.179372578859329,-0.472685307264328,-0.862782776355743,0.323608160018921,-0.778499960899353\n             ,-0.537787616252899,0.179372578859329,-0.472685307264328,-0.862782776355743,-4.42204545834102e-005,-0.402646452188492\n             ,-0.915355563163757,-0.000123229197924957,-0.83578085899353,-0.549063146114349,0.323608160018921,-0.778499960899353\n             ,-0.537787616252899,-0.000125430116895586,0.848767280578613,-0.528766572475433,-7.12665205355734e-005,0.481959730386734\n             ,-0.876193344593048,0.188191697001457,0.451240569353104,-0.872333526611328,0.329959392547607,0.791166961193085\n             ,-0.514957904815674,0.329959392547607,0.791166961193085,-0.514957904815674,0.188191697001457,0.451240569353104\n             ,-0.872333526611328,0.357724249362946,0.356190264225006,-0.863227546215057,0.620680093765259,0.618018448352814\n             ,-0.482503294944763,0.620680093765259,0.618018448352814,-0.482503294944763,0.357724249362946,0.356190264225006\n             ,-0.863227546215057,0.474322229623795,0.197919875383377,-0.857814729213715,0.817646563053131,0.341178327798843\n             ,-0.463736414909363,0.817646563053131,0.341178327798843,-0.463736414909363,0.474322229623795,0.197919875383377\n             ,-0.857814729213715,0.519467711448669,0.00208272109739482,-0.854487538337708,0.892129957675934,0.00357697787694633\n             ,-0.451764702796936,-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.16665855050087,-0.398711144924164\n             ,-0.901806175708771,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,4.82885420538537e-009,-0.291559427976608\n             ,-0.956552743911743,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.539180338382721,-0.263834714889526\n             ,-0.799797356128693,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.193181023001671,-0.0350730493664742\n             ,-0.980536043643951,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.626655638217926,-0.314949661493301\n             ,-0.712817966938019,-0.625531196594238,-0.119070827960968,-0.771059572696686,-0.474208623170853,-0.238814353942871\n             ,-0.847404181957245,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.700383901596069,-0.324826598167419\n             ,-0.635570704936981,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.646563589572906,-0.121796235442162\n             ,-0.753074467182159,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.197930246591568,-0.385256856679916\n             ,-0.901332795619965,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.474208623170853,-0.238814353942871\n             ,-0.847404181957245,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.481388568878174,-0.302958816289902\n             ,-0.82248467206955,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.148570522665977,-0.138561144471169\n             ,-0.979146361351013,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.442375749349594,0.0474703647196293\n             ,-0.895572602748871,-0.166320815682411,-0.355819970369339,-0.919635534286499,-0.16665855050087,-0.398711144924164\n             ,-0.901806175708771,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.711151361465454,-0.0892844870686531\n             ,-0.697346448898315,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.19164302945137,-0.11858031898737\n             ,-0.974274933338165,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.397642314434052,-0.650192856788635\n             ,-0.647402346134186,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.19164302945137,-0.11858031898737\n             ,-0.974274933338165,-0.127862602472305,-0.339489370584488,-0.931878805160522,-0.322878926992416,0.229583457112312\n             ,-0.918172419071198,-0.134015202522278,-0.116930104792118,-0.984056532382965,-0.166320815682411,-0.355819970369339\n             ,-0.919635534286499,-0.442375749349594,0.0474703647196293,-0.895572602748871,-9.11212846403942e-005,-0.237379238009453\n             ,-0.97141706943512,-0.134015202522278,-0.116930104792118,-0.984056532382965,-0.131448835134506,0.348875522613525\n             ,-0.927904665470123,-0.000496746390126646,0.380419790744781,-0.924813807010651,-0.646563589572906,-0.121796235442162\n             ,-0.753074467182159,-0.193181023001671,-0.0350730493664742,-0.980536043643951,-0.289463877677917,-0.0333973616361618\n             ,-0.956606149673462,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.166118785738945,-0.764228582382202\n             ,-0.623184740543365,-0.127862602472305,-0.339489370584488,-0.931878805160522,2.56711878421356e-008,-0.301535218954086\n             ,-0.953455030918121,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,0.357724249362946,0.356190264225006\n             ,-0.863227546215057,0.188191697001457,0.451240569353104,-0.872333526611328,-0.127862602472305,-0.339489370584488\n             ,-0.931878805160522,-0.19164302945137,-0.11858031898737,-0.974274933338165,-0.289463877677917,-0.0333973616361618\n             ,-0.956606149673462,0.519467711448669,0.00208272109739482,-0.854487538337708,0.474322229623795,0.197919875383377\n             ,-0.857814729213715,-0.19164302945137,-0.11858031898737,-0.974274933338165,4.82885420538537e-009,-0.291559427976608\n             ,-0.956552743911743,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.148570522665977,-0.138561144471169\n             ,-0.979146361351013,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.000613691401667893,-0.000187244397238828\n             ,0.999999821186066,-0.0012283253017813,0.00826878752559423,0.999965071678162,-0.979976892471313,-0.169393971562386\n             ,-0.104646749794483,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.000613691401667893,-0.000187244397238828\n             ,0.999999821186066,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.720038771629334,-0.514539837837219\n             ,0.465610325336456,-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.000991592183709145,-0.117668882012367\n             ,0.993052363395691,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.352033823728561,-0.930627882480621\n             ,-0.100019671022892,-0.00141415814869106,-0.878426611423492,0.477875143289566,0.166359573602676,-0.3556267619133\n             ,-0.919703304767609,0.166693791747093,-0.398688644170761,-0.901809573173523,-8.2697579273372e-006,-0.489702671766281\n             ,-0.871889472007751,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,0.623893320560455,-0.135710507631302\n             ,-0.769636154174805,0.472712248563766,-0.247125968337059,-0.845855712890625,0.441408336162567,-0.158523812890053\n             ,-0.883192420005798,0.581144511699677,0.173393562436104,-0.795113682746887,0.697533905506134,-0.312777817249298\n             ,-0.644683241844177,0.536963045597076,-0.257282644510269,-0.803415417671204,0.480526119470596,-0.309671342372894\n             ,-0.820486605167389,0.624607563018799,-0.328015089035034,-0.70871114730835,0.709162533283234,-0.0900625139474869\n             ,-0.69926905632019,0.642595112323761,-0.116949319839478,-0.757228076457977,0.980213820934296,-0.158584430813789\n             ,-0.118456050753593,0.893694162368774,-0.106106624007225,0.435949683189392,0.167570888996124,-0.767371296882629\n             ,-0.618919491767883,0.351649820804596,-0.93211555480957,-0.08661999553442,-0.00141415814869106,-0.878426611423492\n             ,0.477875143289566,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,0.442176729440689,0.0476577542722225\n             ,-0.895660936832428,0.322174906730652,0.228472575545311,-0.918696701526642,0.282752156257629,0.52211320400238\n             ,-0.804642200469971,0.581144511699677,0.173393562436104,-0.795113682746887,-0.345937311649323,-0.339615941047668\n             ,-0.874636113643646,-0.180230349302292,-0.474406808614731,-0.8616583943367,0.14857217669487,-0.138560771942139\n             ,-0.979146182537079,0.193183556199074,-0.0350735858082771,-0.980535566806793,-0.470687717199326,-0.187841206789017\n             ,-0.86207240819931,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.289462924003601,-0.0333970598876476\n             ,-0.956606388092041,-0.525108873844147,0.00211814977228642,-0.851032376289368,-0.00083814247045666,0.651532232761383\n             ,-0.758620500564575,0.282752156257629,0.52211320400238,-0.804642200469971,0.130474492907524,0.346959501504898\n             ,-0.928760170936584,-0.000496746390126646,0.380419790744781,-0.924813807010651,0.716144323348999,-0.513313174247742\n             ,0.472913175821304,0.61796361207962,-0.383677423000336,-0.686230778694153,0.709162533283234,-0.0900625139474869\n             ,-0.69926905632019,0.893694162368774,-0.106106624007225,0.435949683189392,0.351649820804596,-0.93211555480957\n             ,-0.08661999553442,0.399607270956039,-0.656506419181824,-0.639776051044464,0.61796361207962,-0.383677423000336\n             ,-0.686230778694153,0.716144323348999,-0.513313174247742,0.472913175821304,0.133698701858521,-0.117022633552551\n             ,-0.984088599681854,0.166359573602676,-0.3556267619133,-0.919703304767609,-4.25225262006279e-005,-0.53346848487854\n             ,-0.84581995010376,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.189093619585037,0.45308318734169\n             ,-0.87118262052536,0.12786553800106,-0.339494079351425,-0.931876718997955,2.56711878421356e-008,-0.301535218954086\n             ,-0.953455030918121,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,-0.898149847984314,0.0036230287514627\n             ,-0.439674586057663,-0.815859735012054,-0.325591415166855,-0.477873504161835,-0.470687717199326,-0.187841206789017\n             ,-0.86207240819931,-0.525108873844147,0.00211814977228642,-0.851032376289368,-0.815859735012054,-0.325591415166855\n             ,-0.477873504161835,-0.607874691486359,-0.598318219184875,-0.522018849849701,-0.345937311649323,-0.339615941047668\n             ,-0.874636113643646,-0.470687717199326,-0.187841206789017,-0.86207240819931,-0.607874691486359,-0.598318219184875\n             ,-0.522018849849701,-0.324792563915253,-0.780647575855255,-0.533946752548218,-0.180230349302292,-0.474406808614731\n             ,-0.8616583943367,-0.345937311649323,-0.339615941047668,-0.874636113643646,-0.000123229197924957,-0.83578085899353\n             ,-0.549063146114349,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.180230349302292,-0.474406808614731\n             ,-0.8616583943367,-0.324792563915253,-0.780647575855255,-0.533946752548218,-0.000125430116895586,0.848767280578613\n             ,-0.528766572475433,-0.331108927726746,0.793362975120544,-0.510824918746948,-0.189093619585037,0.45308318734169\n             ,-0.87118262052536,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,-0.331108927726746,0.793362975120544\n             ,-0.510824918746948,-0.623912632465363,0.621031820774078,-0.474396973848343,-0.360539704561234,0.358874976634979\n             ,-0.860941290855408,-0.189093619585037,0.45308318734169,-0.87118262052536,-0.623912632465363,0.621031820774078\n             ,-0.474396973848343,-0.822878837585449,0.343268781900406,-0.452810108661652,-0.479103714227676,0.199860870838165\n             ,-0.854701817035675,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.822878837585449,0.343268781900406\n             ,-0.452810108661652,-0.898149847984314,0.0036230287514627,-0.439674586057663,-0.525108873844147,0.00211814977228642\n             ,-0.851032376289368,-0.479103714227676,0.199860870838165,-0.854701817035675,4.82885420538537e-009,-0.291559427976608\n             ,-0.956552743911743,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,0.166693791747093,-0.398688644170761\n             ,-0.901809573173523,0.197933539748192,-0.385259449481964,-0.901330947875977,0.0890793353319168,-0.28693476319313\n             ,-0.953799426555634,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.14857217669487,-0.138560771942139\n             ,-0.979146182537079,0.536963045597076,-0.257282644510269,-0.803415417671204,0.642595112323761,-0.116949319839478\n             ,-0.757228076457977,0.624607563018799,-0.328015089035034,-0.70871114730835,0.480526119470596,-0.309671342372894\n             ,-0.820486605167389,0.472712248563766,-0.247125968337059,-0.845855712890625,0.623893320560455,-0.135710507631302\n             ,-0.769636154174805,0.642595112323761,-0.116949319839478,-0.757228076457977,0.536963045597076,-0.257282644510269\n             ,-0.803415417671204,0.697533905506134,-0.312777817249298,-0.644683241844177,0.980213820934296,-0.158584430813789\n             ,-0.118456050753593,0.472712248563766,-0.247125968337059,-0.845855712890625,0.255537897348404,-0.293244242668152\n             ,-0.921253621578217,0.197933539748192,-0.385259449481964,-0.901330947875977,0.441408336162567,-0.158523812890053\n             ,-0.883192420005798,0.480526119470596,-0.309671342372894,-0.820486605167389,0.536963045597076,-0.257282644510269\n             ,-0.803415417671204,0.14857217669487,-0.138560771942139,-0.979146182537079,0.255537897348404,-0.293244242668152\n             ,-0.921253621578217,0.442176729440689,0.0476577542722225,-0.895660936832428,0.441408336162567,-0.158523812890053\n             ,-0.883192420005798,0.166693791747093,-0.398688644170761,-0.901809573173523,0.166359573602676,-0.3556267619133\n             ,-0.919703304767609,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.61796361207962,-0.383677423000336\n             ,-0.686230778694153,0.191643193364143,-0.11858157813549,-0.974274754524231,0.289462924003601,-0.0333970598876476\n             ,-0.956606388092041,0.191643193364143,-0.11858157813549,-0.974274754524231,0.61796361207962,-0.383677423000336\n             ,-0.686230778694153,0.399607270956039,-0.656506419181824,-0.639776051044464,0.12786553800106,-0.339494079351425\n             ,-0.931876718997955,0.322174906730652,0.228472575545311,-0.918696701526642,0.442176729440689,0.0476577542722225\n             ,-0.895660936832428,0.166359573602676,-0.3556267619133,-0.919703304767609,0.133698701858521,-0.117022633552551\n             ,-0.984088599681854,0.130474492907524,0.346959501504898,-0.928760170936584,0.133698701858521,-0.117022633552551\n             ,-0.984088599681854,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.000496746390126646,0.380419790744781\n             ,-0.924813807010651,0.642595112323761,-0.116949319839478,-0.757228076457977,0.709162533283234,-0.0900625139474869\n             ,-0.69926905632019,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.193183556199074,-0.0350735858082771\n             ,-0.980535566806793,0.167570888996124,-0.767371296882629,-0.618919491767883,4.79029440612067e-005,-0.794294953346252\n             ,-0.607532322406769,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,0.12786553800106,-0.339494079351425\n             ,-0.931876718997955,0.12786553800106,-0.339494079351425,-0.931876718997955,-0.189093619585037,0.45308318734169\n             ,-0.87118262052536,-0.360539704561234,0.358874976634979,-0.860941290855408,0.191643193364143,-0.11858157813549\n             ,-0.974274754524231,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.191643193364143,-0.11858157813549\n             ,-0.974274754524231,-0.479103714227676,0.199860870838165,-0.854701817035675,-0.525108873844147,0.00211814977228642\n             ,-0.851032376289368,0.14857217669487,-0.138560771942139,-0.979146182537079,-4.42204545834102e-005,-0.402646452188492\n             ,-0.915355563163757,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,0.0890793353319168,-0.28693476319313\n             ,-0.953799426555634,-0.000613691401667893,-0.000187244397238828,0.999999821186066,0.893694162368774,-0.106106624007225\n             ,0.435949683189392,0.980213820934296,-0.158584430813789,-0.118456050753593,-0.0012283253017813,0.00826878752559423\n             ,0.999965071678162,0.716144323348999,-0.513313174247742,0.472913175821304,0.893694162368774,-0.106106624007225\n             ,0.435949683189392,-0.000613691401667893,-0.000187244397238828,0.999999821186066,-0.000991592183709145,-0.117668882012367\n             ,0.993052363395691,0.351649820804596,-0.93211555480957,-0.08661999553442,0.716144323348999,-0.513313174247742\n             ,0.472913175821304,-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.00141415814869106,-0.878426611423492\n             ,0.477875143289566,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.0890797153115273,-0.286934584379196\n             ,-0.953799426555634,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.442375749349594,0.0474703647196293\n             ,-0.895572602748871,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.583353996276855,0.174302786588669\n             ,-0.793294787406921,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.197930246591568,-0.385256856679916\n             ,-0.901332795619965,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.481388568878174,-0.302958816289902\n             ,-0.82248467206955,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.255537241697311,-0.293244957923889\n             ,-0.921253561973572,-0.16665855050087,-0.398711144924164,-0.901806175708771,-0.197930246591568,-0.385256856679916\n             ,-0.901332795619965,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.322878926992416,0.229583457112312\n             ,-0.918172419071198,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.134015202522278,-0.116930104792118\n             ,-0.984056532382965,-0.127862602472305,-0.339489370584488,-0.931878805160522,-0.166118785738945,-0.764228582382202\n             ,-0.623184740543365,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.283784359693527,0.524189174175262\n             ,-0.802927255630493,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.322878926992416,0.229583457112312\n             ,-0.918172419071198,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.397642314434052,-0.650192856788635\n             ,-0.647402346134186,-0.166118785738945,-0.764228582382202,-0.623184740543365,0.465988546609879,-0.185971200466156\n             ,-0.865025639533997,-0.193181023001671,-0.0350730493664742,-0.980536043643951,0.343204021453857,-0.33707195520401\n             ,-0.876694619655609,0.357724249362946,0.356190264225006,-0.863227546215057,-0.19164302945137,-0.11858031898737\n             ,-0.974274933338165,0.474322229623795,0.197919875383377,-0.857814729213715,0.179372578859329,-0.472685307264328\n             ,-0.862782776355743,-0.148570522665977,-0.138561144471169,-0.979146361351013,-4.42204545834102e-005,-0.402646452188492\n             ,-0.915355563163757,0.255537897348404,-0.293244242668152,-0.921253621578217,0.14857217669487,-0.138560771942139\n             ,-0.979146182537079,0.0890793353319168,-0.28693476319313,-0.953799426555634,0.442176729440689,0.0476577542722225\n             ,-0.895660936832428,0.581144511699677,0.173393562436104,-0.795113682746887,0.441408336162567,-0.158523812890053\n             ,-0.883192420005798,0.255537897348404,-0.293244242668152,-0.921253621578217,0.0890793353319168,-0.28693476319313\n             ,-0.953799426555634,0.197933539748192,-0.385259449481964,-0.901330947875977,0.480526119470596,-0.309671342372894\n             ,-0.820486605167389,0.255537897348404,-0.293244242668152,-0.921253621578217,0.472712248563766,-0.247125968337059\n             ,-0.845855712890625,0.166693791747093,-0.398688644170761,-0.901809573173523,0.441408336162567,-0.158523812890053\n             ,-0.883192420005798,0.197933539748192,-0.385259449481964,-0.901330947875977,0.322174906730652,0.228472575545311\n             ,-0.918696701526642,0.133698701858521,-0.117022633552551,-0.984088599681854,0.130474492907524,0.346959501504898\n             ,-0.928760170936584,0.12786553800106,-0.339494079351425,-0.931876718997955,0.399607270956039,-0.656506419181824\n             ,-0.639776051044464,0.167570888996124,-0.767371296882629,-0.618919491767883,0.282752156257629,0.52211320400238\n             ,-0.804642200469971,0.322174906730652,0.228472575545311,-0.918696701526642,0.130474492907524,0.346959501504898\n             ,-0.928760170936584,0.167570888996124,-0.767371296882629,-0.618919491767883,0.399607270956039,-0.656506419181824\n             ,-0.639776051044464,0.351649820804596,-0.93211555480957,-0.08661999553442,-0.470687717199326,-0.187841206789017\n             ,-0.86207240819931,-0.345937311649323,-0.339615941047668,-0.874636113643646,0.193183556199074,-0.0350735858082771\n             ,-0.980535566806793,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.479103714227676,0.199860870838165\n             ,-0.854701817035675,0.191643193364143,-0.11858157813549,-0.974274754524231,-0.180230349302292,-0.474406808614731\n             ,-0.8616583943367,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,0.14857217669487,-0.138560771942139\n             ,-0.979146182537079,-0.646716237068176,0.744295537471771,0.166680246591568,-0.651998162269592,0.691909074783325\n             ,-0.31009703874588,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.391309916973114,0.896766066551209\n             ,0.206608697772026,-0.25070720911026,0.613901972770691,0.748512029647827,-0.556003272533417,0.628243684768677\n             ,0.544215261936188,-0.497222453355789,0.684417903423309,0.533237218856812,-0.142466872930527,0.844133794307709\n             ,0.516857206821442,-0.212957128882408,0.63821679353714,0.739816606044769,0.414917647838593,0.779010057449341\n             ,0.470092207193375,0.181902796030045,0.957158207893372,0.225298702716827,-0.301660984754562,0.907010614871979\n             ,0.293823689222336,0.414917647838593,0.779010057449341,0.470092207193375,-0.212957128882408,0.63821679353714\n             ,0.739816606044769,-0.18118342757225,0.484352648258209,0.855906009674072,0.203874498605728,0.632674932479858\n             ,0.747099459171295,0.251353085041046,0.650286138057709,0.716902732849121,-0.235205337405205,0.51457417011261\n             ,0.824555516242981,-0.263717442750931,0.775425553321838,0.573731958866119,0.199702888727188,0.793615162372589\n             ,0.574711859226227,0.0745275393128395,0.431530833244324,0.899014353752136,-0.421310722827911,0.492505818605423\n             ,0.761534810066223,-0.426660984754562,0.140150994062424,0.893486499786377,0.0708804950118065,0.122446231544018\n             ,0.989940881729126,-0.317988157272339,0.931548714637756,0.176353335380554,-0.391309916973114,0.896766066551209\n             ,0.206608697772026,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.337764918804169,0.929125368595123\n             ,-0.150468930602074,-0.29035672545433,0.911720991134644,0.290616303682327,-0.269276291131973,0.797245502471924\n             ,0.540268361568451,-0.218010768294334,0.827573180198669,0.517294824123383,-0.435499727725983,0.707530975341797\n             ,0.556542754173279,-0.261273354291916,0.592454433441162,0.762059092521667,-0.761694371700287,0.389483571052551\n             ,0.517807185649872,-0.435499727725983,0.707530975341797,0.556542754173279,-0.423358976840973,0.530543863773346\n             ,0.734363913536072,0.0901670306921005,0.507265865802765,0.8570596575737,-0.117755182087421,0.405977427959442\n             ,0.906264901161194,-0.235205337405205,0.51457417011261,0.824555516242981,0.251353085041046,0.650286138057709\n             ,0.716902732849121,0.0708804950118065,0.122446231544018,0.989940881729126,-0.426660984754562,0.140150994062424\n             ,0.893486499786377,-0.384194701910019,0.144494697451591,0.911874830722809,0.0692365244030952,0.127935454249382\n             ,0.989362835884094,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.427128940820694,0.891256213188171\n             ,-0.152391627430916,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.299128979444504,0.822018504142761\n             ,-0.484569281339645,-0.848471641540527,0.145880371332169,0.508738458156586,-0.868030965328217,0.305244266986847\n             ,0.391596972942352,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.786082983016968,-0.551289200782776\n             ,-0.279560059309006,0.0692365244030952,0.127935454249382,0.989362835884094,-0.384194701910019,0.144494697451591\n             ,0.911874830722809,-0.134134471416473,0.255289256572723,0.957515180110931,0.0673762187361717,0.208747074007988\n             ,0.975646018981934,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.874421000480652,0.028505390509963\n             ,-0.484329789876938,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.95565664768219,0.128923356533051\n             ,0.264762312173843,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.676061987876892,-0.682281494140625\n             ,0.278266310691834,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.659405767917633,-0.515389144420624\n             ,-0.547318935394287,-0.847110569477081,0.52096164226532,0.104893282055855,-0.322806298732758,0.932436168193817\n             ,-0.162354081869125,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.873165845870972,0.487039655447006\n             ,0.0193340703845024,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.786065578460693,0.0604399740695953\n             ,0.61518120765686,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.740768253803253,-0.0962792262434959\n             ,0.664825260639191,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201465025544167,-0.344970017671585\n             ,-0.91673743724823,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.534500002861023,-0.166172981262207\n             ,-0.828671395778656,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.342734336853027,-0.423973858356476\n             ,-0.838319361209869,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.639488339424133,-0.334312081336975\n             ,-0.692307770252228,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.936180412769318,-0.215160012245178\n             ,-0.277979135513306,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.943637073040009,-0.318791925907135\n             ,-0.0889983400702477,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.966241955757141,0.0842645391821861\n             ,0.243466570973396,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.909859955310822,-0.283149540424347\n             ,0.303284049034119,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.165860414505005,0.132470846176147\n             ,0.977211236953735,-0.183761566877365,0.212806239724159,0.959658861160278,0.0114754280075431,0.247809365391731\n             ,0.968740820884705,0.000295055127935484,0.143534883856773,0.98964524269104,0.0114754280075431,0.247809365391731\n             ,0.968740820884705,-0.183761566877365,0.212806239724159,0.959658861160278,-0.122193120419979,0.122121326625347\n             ,0.984964549541473,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.144792750477791,-0.430247753858566\n             ,-0.891022980213165,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.342734336853027,-0.423973858356476\n             ,-0.838319361209869,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.342734336853027,-0.423973858356476\n             ,-0.838319361209869,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.554800570011139,-0.511544942855835\n             ,-0.656138777732849,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.838490962982178,-0.395441621541977\n             ,-0.37491175532341,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.922690570354462,-0.371692568063736\n             ,-0.102405093610287,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.952946603298187,-0.258524835109711\n             ,0.158296033740044,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.914080381393433,-0.244995877146721\n             ,0.323162585496902,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.911127626895905,-0.233605042099953\n             ,0.339521944522858,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.917683064937592,-0.215978980064392\n             ,0.333482950925827,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.909859955310822,-0.283149540424347\n             ,0.303284049034119,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.879765868186951,-0.241239860653877\n             ,0.409652799367905,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.229701682925224,-0.369639068841934\n             ,-0.900335550308228,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.281565397977829,-0.490265786647797\n             ,-0.824839651584625,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.281565397977829,-0.490265786647797\n             ,-0.824839651584625,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.550454020500183,-0.472135245800018\n             ,-0.688540995121002,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.794973969459534,-0.455967396497726\n             ,-0.400137633085251,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.925502419471741,-0.354022324085236\n             ,-0.134586229920387,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.939242422580719,-0.304669201374054\n             ,0.158114925026894,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.952732801437378,-0.159682244062424\n             ,0.258460462093353,-0.264800101518631,0.156511932611465,0.951517164707184,-0.352729320526123,0.114327535033226\n             ,0.92871481180191,-0.184806242585182,0.04760567471385,0.981621265411377,-0.139697372913361,0.0780137032270432\n             ,0.987116277217865,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.268173515796661,-0.478363126516342\n             ,-0.836212694644928,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.678428113460541,-0.240620195865631\n             ,-0.69414496421814,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.797606468200684,-0.431223660707474\n             ,-0.421746492385864,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.962320387363434,-0.205677136778831\n             ,-0.177866160869598,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.993262529373169,-0.102700755000114\n             ,0.0536848418414593,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.952732801437378,-0.159682244062424\n             ,0.258460462093353,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.952732801437378,-0.159682244062424\n             ,0.258460462093353,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.946208834648132,0.0787987634539604\n             ,0.313814520835876,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.937714636325836,-0.0839959159493446\n             ,0.337099254131317,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.865155875682831,0.0832358598709106\n             ,0.49454739689827,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.911626994609833,-0.102696627378464\n             ,0.397981941699982,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.709277749061584,0.0713812634348869\n             ,0.701305747032166,-0.962320387363434,-0.205677136778831,-0.177866160869598,-0.888201236724854,-0.231391221284866\n             ,-0.396934121847153,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.939978837966919,-0.283475905656815\n             ,-0.189950495958328,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.977081477642059,-0.212798669934273\n             ,-0.00533603969961405,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.983753859996796,0.00252871820703149\n             ,0.179504722356796,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.983753859996796,0.00252871820703149\n             ,0.179504722356796,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.954774618148804,-0.0549839399755001\n             ,0.292202323675156,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.946208834648132,0.0787987634539604\n             ,0.313814520835876,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.833407461643219,-0.0707383528351784\n             ,0.548113167285919,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.865155875682831,0.0832358598709106\n             ,0.49454739689827,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.527523517608643,-0.0868940651416779\n             ,0.845084846019745,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.197025984525681,-0.816609442234039\n             ,-0.542521715164185,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.746677756309509,-0.64300948381424\n             ,-0.170326471328735,-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.632238566875458,-0.767571091651917\n             ,-0.105399325489998,-0.74617874622345,-0.66409957408905,0.046787291765213,-0.859505951404572,-0.505740880966187\n             ,0.0739976838231087,-0.859505951404572,-0.505740880966187,0.0739976838231087,-0.74617874622345,-0.66409957408905\n             ,0.046787291765213,-0.711586713790894,-0.664516925811768,0.228170141577721,-0.835693418979645,-0.485578000545502\n             ,0.256574630737305,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.835693418979645,-0.485578000545502\n             ,0.256574630737305,-0.711586713790894,-0.664516925811768,0.228170141577721,-0.550154626369476,-0.73190438747406\n             ,0.402052044868469,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.622000575065613,0.0438020005822182\n             ,0.781790673732758,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.726840019226074,-0.113997332751751\n             ,0.677280008792877,-0.381237626075745,0.038385421037674,0.923679828643799,-0.536454916000366,0.0231257192790508\n             ,0.84361207485199,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.609626770019531,-0.0633527785539627\n             ,0.790152907371521,-0.564329564571381,0.12249568849802,0.816411018371582,-0.706152856349945,0.175898715853691\n             ,0.685862839221954,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.622000575065613,0.0438020005822182\n             ,0.781790673732758,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.564329564571381,0.12249568849802\n             ,0.816411018371582,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.536454916000366,0.0231257192790508\n             ,0.84361207485199,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.406585454940796,0.0949709191918373\n             ,0.908663153648376,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.381237626075745,0.038385421037674\n             ,0.923679828643799,-0.352729320526123,0.114327535033226,0.92871481180191,-0.381237626075745,0.038385421037674\n             ,0.923679828643799,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.492890477180481,0.0867519974708557\n             ,0.865755796432495,-0.428126484155655,0.265849471092224,0.863731324672699,-0.600559055805206,0.384851962327957\n             ,0.70086932182312,-0.706152856349945,0.175898715853691,0.685862839221954,-0.564329564571381,0.12249568849802\n             ,0.816411018371582,-0.165860414505005,0.132470846176147,0.977211236953735,-0.28684601187706,0.185986965894699\n             ,0.939749002456665,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.249695494771004,0.0878867655992508\n             ,0.964327812194824,-0.564329564571381,0.12249568849802,0.816411018371582,-0.406585454940796,0.0949709191918373\n             ,0.908663153648376,-0.28684601187706,0.185986965894699,0.939749002456665,-0.428126484155655,0.265849471092224\n             ,0.863731324672699,-0.264800101518631,0.156511932611465,0.951517164707184,-0.249695494771004,0.0878867655992508\n             ,0.964327812194824,-0.381237626075745,0.038385421037674,0.923679828643799,-0.352729320526123,0.114327535033226\n             ,0.92871481180191,-0.183761566877365,0.212806239724159,0.959658861160278,-0.165860414505005,0.132470846176147\n             ,0.977211236953735,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.264800101518631,0.156511932611465\n             ,0.951517164707184,-0.338261693716049,0.297003328800201,0.892954647541046,-0.28684601187706,0.185986965894699\n             ,0.939749002456665,-0.130102187395096,0.286587357521057,0.949179172515869,-0.153394818305969,0.361563980579376\n             ,0.91964203119278,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.130102187395096,0.286587357521057\n             ,0.949179172515869,-0.28684601187706,0.185986965894699,0.939749002456665,-0.165860414505005,0.132470846176147\n             ,0.977211236953735,-0.426482230424881,0.398722440004349,0.811870276927948,-0.52557498216629,0.553365111351013\n             ,0.646187245845795,-0.600559055805206,0.384851962327957,0.70086932182312,-0.428126484155655,0.265849471092224\n             ,0.863731324672699,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.337764918804169,0.929125368595123\n             ,-0.150468930602074,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.504832327365875,0.760625302791595\n             ,-0.40815868973732,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.374457865953445,-0.757000803947449\n             ,-0.535472750663757,-0.347785919904709,0.133236810564995,0.928058683872223,-0.747875332832336,-0.0330392643809319\n             ,0.663016498088837,0.169686332345009,0.978208720684052,-0.119642592966557,-0.0425885356962681,0.988019645214081\n             ,-0.148335143923759,-0.182774692773819,0.975853502750397,0.119596734642982,-0.332666903734207,0.942436695098877\n             ,0.0338508486747742,-0.421310722827911,0.492505818605423,0.761534810066223,-0.654110372066498,0.557340681552887\n             ,0.511381506919861,-0.627907395362854,0.28337550163269,0.724865913391113,-0.426660984754562,0.140150994062424\n             ,0.893486499786377,-0.426660984754562,0.140150994062424,0.893486499786377,-0.627907395362854,0.28337550163269\n             ,0.724865913391113,-0.509144961833954,0.274927198886871,0.815589666366577,-0.384194701910019,0.144494697451591\n             ,0.911874830722809,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.122193120419979,0.122121326625347\n             ,0.984964549541473,-0.183761566877365,0.212806239724159,0.959658861160278,-0.264800101518631,0.156511932611465\n             ,0.951517164707184,-0.275664061307907,0.0508917570114136,0.959905922412872,-0.492890477180481,0.0867519974708557\n             ,0.865755796432495,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.527523517608643,-0.0868940651416779\n             ,0.845084846019745,0.218648448586464,0.688608109951019,-0.691383898258209,0.169686332345009,0.978208720684052\n             ,-0.119642592966557,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.190823212265968,0.973383665084839\n             ,0.126928135752678,0.0462776906788349,0.971960961818695,0.23054338991642,0.370400339365005,0.925967752933502\n             ,-0.0733987167477608,0.315422087907791,0.495868057012558,-0.809088230133057,-0.0405596829950809,0.531582415103912\n             ,-0.846034944057465,0.254257917404175,-0.212425783276558,0.943519055843353,0.444850295782089,-0.346757113933563\n             ,0.825752794742584,0.271333545446396,-0.434894740581512,0.858629524707794,0.142127305269241,-0.253888607025146\n             ,0.956734240055084,0.228504449129105,-0.206080406904221,0.951481223106384,0.15039549767971,-0.209228366613388\n             ,0.966232180595398,0.3562351167202,-0.323089301586151,0.876761019229889,0.419803202152252,-0.320524513721466\n             ,0.84913444519043,0.15039549767971,-0.209228366613388,0.966232180595398,-0.0830294638872147,-0.341880321502686\n             ,0.93606835603714,0.10191734880209,-0.459647685289383,0.882234036922455,0.3562351167202,-0.323089301586151,0.876761019229889\n             ,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.582632660865784,0.528638899326324,-0.617316842079163\n             ,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.484570324420929,0.164985567331314,-0.85905259847641\n             ,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.792521595954895,-0.308754324913025,0.525909006595612\n             ,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.864151895046234,-0.414072304964066,-0.285981833934784\n             ,0.142127305269241,-0.253888607025146,0.956734240055084,0.271333545446396,-0.434894740581512,0.858629524707794\n             ,0.000465182994958013,-0.480507552623749,0.876990437507629,0.000238662076299079,-0.279259294271469,0.96021568775177\n             ,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.794973969459534,-0.455967396497726,-0.400137633085251\n             ,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.656892538070679,-0.430070400238037,-0.619299292564392\n             ,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.797606468200684,-0.431223660707474,-0.421746492385864\n             ,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.554800570011139,-0.511544942855835,-0.656138777732849\n             ,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.888201236724854,-0.231391221284866,-0.396934121847153\n             ,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.550454020500183,-0.472135245800018,-0.688540995121002\n             ,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.898073315620422,-0.295351594686508,-0.325932085514069\n             ,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.678428113460541,-0.240620195865631,-0.69414496421814\n             ,-0.490000605583191,0.777733385562897,0.393738687038422,-0.995725810527802,0.0919083878397942,-0.0091116763651371\n             ,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.415997177362442,0.908823668956757,0.0313992239534855\n             ,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.805140495300293,-0.58423912525177,-0.102046631276608\n             ,-0.868030965328217,0.305244266986847,0.391596972942352,-0.903881251811981,0.372275590896606,0.21073579788208\n             ,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.415997177362442,0.908823668956757,0.0313992239534855\n             ,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.873165845870972,0.487039655447006,0.0193340703845024\n             ,-0.988731265068054,0.125658646225929,0.0813654363155365,-0.997107744216919,-0.0381367467343807,-0.065739631652832\n             ,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.952946603298187,-0.258524835109711,0.158296033740044\n             ,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.939242422580719,-0.304669201374054,0.158114925026894\n             ,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.943637073040009,-0.318791925907135,-0.0889983400702477\n             ,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.960346519947052,-0.250571459531784,0.12226414680481\n             ,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.922690570354462,-0.371692568063736,-0.102405093610287\n             ,-0.962320387363434,-0.205677136778831,-0.177866160869598,-0.993262529373169,-0.102700755000114,0.0536848418414593\n             ,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.925502419471741,-0.354022324085236,-0.134586229920387\n             ,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.977081477642059,-0.212798669934273,-0.00533603969961405\n             ,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.962320387363434,-0.205677136778831,-0.177866160869598\n             ,0.315422087907791,0.495868057012558,-0.809088230133057,0.218648448586464,0.688608109951019,-0.691383898258209\n             ,-0.0404882803559303,0.532536089420319,-0.845438301563263,-0.0405596829950809,0.531582415103912,-0.846034944057465\n             ,0.370400339365005,0.925967752933502,-0.0733987167477608,0.169686332345009,0.978208720684052,-0.119642592966557\n             ,0.218648448586464,0.688608109951019,-0.691383898258209,0.315422087907791,0.495868057012558,-0.809088230133057\n             ,-0.0681053325533867,-0.345358580350876,-0.935996353626251,-0.140057414770126,-0.293910145759583,-0.945516109466553\n             ,-0.0450695939362049,-0.253388822078705,-0.966314017772675,0.00452618766576052,-0.317399501800537,-0.948281109333038\n             ,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.128380045294762,-0.384965181350708,-0.913958609104156\n             ,-0.144822835922241,-0.365306288003922,-0.919552981853485,-0.201079472899437,-0.101671770215034,-0.974284291267395\n             ,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.253343611955643,0.265877068042755,-0.930121719837189\n             ,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.233643680810928,0.587966680526733,-0.774406731128693\n             ,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.233643680810928,0.587966680526733,-0.774406731128693\n             ,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.350932270288467,0.749857068061829,-0.56085729598999\n             ,0.122461646795273,0.908201992511749,0.400215208530426,0.227538049221039,0.872712194919586,0.431971967220306\n             ,-0.355782032012939,0.924564778804779,-0.136378616094589,-0.165674656629562,0.933009803295136,-0.319444298744202\n             ,-0.585451006889343,0.667790055274963,-0.459677666425705,-0.294875234365463,0.607182502746582,-0.737819731235504\n             ,-0.331786870956421,0.242688208818436,-0.911602914333344,-0.665653705596924,0.333070456981659,-0.667809247970581\n             ,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.793157696723938,-0.575152516365051,0.200250893831253\n             ,-0.946829199790955,0.314822763204575,0.066340483725071,-0.968474745750427,0.246992528438568,-0.0324244759976864\n             ,0.203874498605728,0.632674932479858,0.747099459171295,-0.18118342757225,0.484352648258209,0.855906009674072\n             ,-0.153394818305969,0.361563980579376,0.91964203119278,0.0901670306921005,0.507265865802765,0.8570596575737,0.0454900041222572\n             ,0.2624471783638,0.963873505592346,-0.134134471416473,0.255289256572723,0.957515180110931,-0.0718724653124809\n             ,0.221051037311554,0.972610294818878,0.0114754280075431,0.247809365391731,0.968740820884705,0.00928871519863606\n             ,-0.538456916809082,-0.842601835727692,0.120998434722424,-0.617575466632843,-0.777148604393005,0.0646116733551025\n             ,-0.592574059963226,-0.802920520305634,-0.00847726315259933,-0.531524419784546,-0.847000539302826,0.0363553054630756\n             ,-0.593656182289124,-0.803897142410278,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.00847726315259933\n             ,-0.531524419784546,-0.847000539302826,0.0646116733551025,-0.592574059963226,-0.802920520305634,-0.452270448207855\n             ,-0.555824816226959,-0.697502851486206,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.729460597038269\n             ,0.376104354858398,-0.571343004703522,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.559611320495605\n             ,0.189872339367867,-0.806711673736572,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.201079472899437\n             ,-0.101671770215034,-0.974284291267395,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201465025544167\n             ,-0.344970017671585,-0.91673743724823,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201079472899437\n             ,-0.101671770215034,-0.974284291267395,-0.144822835922241,-0.365306288003922,-0.919552981853485,0.0942423716187477\n             ,-0.686610460281372,-0.72089147567749,0.120998434722424,-0.617575466632843,-0.777148604393005,0.00928871519863606\n             ,-0.538456916809082,-0.842601835727692,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.678428113460541\n             ,-0.240620195865631,-0.69414496421814,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.3323914706707\n             ,-0.288453340530396,-0.89794796705246,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.386307686567307\n             ,-0.301311910152435,-0.871766865253448,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.217214897274971\n             ,-0.348953694105148,-0.911618888378143,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.217214897274971\n             ,-0.348953694105148,-0.911618888378143,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.140057414770126\n             ,-0.293910145759583,-0.945516109466553,-0.0681053325533867,-0.345358580350876,-0.935996353626251,-0.439678937196732\n             ,-0.382927387952805,-0.812434017658234,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.201465025544167\n             ,-0.344970017671585,-0.91673743724823,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.128380045294762\n             ,-0.384965181350708,-0.913958609104156,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.120519727468491\n             ,-0.475927352905273,-0.871187806129456,-0.144822835922241,-0.365306288003922,-0.919552981853485,0.490650862455368\n             ,0.719568371772766,0.49140927195549,0.51012510061264,0.705090045928955,0.492565125226974,-0.436571836471558,0.668562531471252\n             ,0.602020919322968,-0.528217673301697,0.774278223514557,0.348538845777512,0.51012510061264,0.705090045928955\n             ,0.492565125226974,0.576555967330933,0.629547953605652,0.520819187164307,-0.206960439682007,0.579236388206482\n             ,0.78844952583313,-0.436571836471558,0.668562531471252,0.602020919322968,-0.206960439682007,0.579236388206482\n             ,0.78844952583313,0.576555967330933,0.629547953605652,0.520819187164307,0.665259420871735,0.743798911571503,-0.0647542923688889\n             ,-0.210487872362137,0.845762014389038,0.490287095308304,-0.877903461456299,0.125808238983154,0.462014973163605\n             ,-0.553295969963074,0.315833359956741,0.770787119865417,-0.18118342757225,0.484352648258209,0.855906009674072\n             ,-0.212957128882408,0.63821679353714,0.739816606044769,-0.301660984754562,0.907010614871979,0.293823689222336\n             ,-0.720441699028015,0.626922428607941,0.296533405780792,-0.877903461456299,0.125808238983154,0.462014973163605\n             ,-0.212957128882408,0.63821679353714,0.739816606044769,-0.25070720911026,0.613901972770691,0.748512029647827\n             ,-0.142466872930527,0.844133794307709,0.516857206821442,0.421662032604218,0.906709790229797,0.00885869562625885\n             ,-0.112783953547478,0.903910756111145,0.412583559751511,-0.491390645503998,0.848508954048157,0.196386933326721\n             ,-0.317988157272339,0.931548714637756,0.176353335380554,-0.337764918804169,0.929125368595123,-0.150468930602074\n             ,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.423358976840973,0.530543863773346,0.734363913536072\n             ,-0.435499727725983,0.707530975341797,0.556542754173279,-0.218010768294334,0.827573180198669,0.517294824123383\n             ,-0.44881072640419,0.73288232088089,0.511324167251587,-0.134134471416473,0.255289256572723,0.957515180110931\n             ,-0.117755182087421,0.405977427959442,0.906264901161194,-0.130102187395096,0.286587357521057,0.949179172515869\n             ,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.153394818305969,0.361563980579376,0.91964203119278\n             ,-0.18118342757225,0.484352648258209,0.855906009674072,-0.553295969963074,0.315833359956741,0.770787119865417\n             ,-0.338261693716049,0.297003328800201,0.892954647541046,-0.130102187395096,0.286587357521057,0.949179172515869\n             ,-0.117755182087421,0.405977427959442,0.906264901161194,0.0901670306921005,0.507265865802765,0.8570596575737\n             ,-0.153394818305969,0.361563980579376,0.91964203119278,-0.553295969963074,0.315833359956741,0.770787119865417\n             ,-0.887027978897095,0.338621288537979,0.313874155282974,-0.554342925548553,0.567035973072052,0.609240651130676\n             ,-0.426482230424881,0.398722440004349,0.811870276927948,0.502047836780548,0.814261257648468,0.291421681642532\n             ,0.251353085041046,0.650286138057709,0.716902732849121,0.199702888727188,0.793615162372589,0.574711859226227\n             ,0.325284242630005,0.933813154697418,0.148940086364746,-0.235205337405205,0.51457417011261,0.824555516242981\n             ,-0.627907395362854,0.28337550163269,0.724865913391113,-0.654110372066498,0.557340681552887,0.511381506919861\n             ,-0.263717442750931,0.775425553321838,0.573731958866119,-0.509144961833954,0.274927198886871,0.815589666366577\n             ,-0.627907395362854,0.28337550163269,0.724865913391113,-0.235205337405205,0.51457417011261,0.824555516242981\n             ,-0.117755182087421,0.405977427959442,0.906264901161194,-0.355782032012939,0.924564778804779,-0.136378616094589\n             ,0.227538049221039,0.872712194919586,0.431971967220306,0.37678524851799,0.791645467281342,0.480968058109283,-0.468000799417496\n             ,0.87750107049942,0.10472384095192,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.559611320495605\n             ,0.189872339367867,-0.806711673736572,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.534500002861023\n             ,-0.166172981262207,-0.828671395778656,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.652629017829895\n             ,0.286883503198624,-0.701265454292297,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.623457789421082\n             ,-0.205396309494972,-0.754395663738251,-0.598303258419037,0.575496375560761,0.557527720928192,-0.708229780197144\n             ,0.558061540126801,-0.432409435510635,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.734153270721436\n             ,0.469748914241791,0.490260034799576,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.559611320495605\n             ,0.189872339367867,-0.806711673736572,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.253343611955643\n             ,0.265877068042755,-0.930121719837189,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.484570324420929\n             ,0.164985567331314,-0.85905259847641,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.729460597038269\n             ,0.376104354858398,-0.571343004703522,-0.729460597038269,0.376104354858398,-0.571343004703522,-0.559611320495605\n             ,0.189872339367867,-0.806711673736572,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.642698705196381\n             ,0.173675417900085,-0.746173679828644,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.452270448207855\n             ,-0.555824816226959,-0.697502851486206,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.484570324420929\n             ,0.164985567331314,-0.85905259847641,-0.646716237068176,0.744295537471771,0.166680246591568,-0.497222453355789\n             ,0.684417903423309,0.533237218856812,-0.556003272533417,0.628243684768677,0.544215261936188,-0.717432975769043\n             ,0.661532044410706,0.218323826789856,-0.142466872930527,0.844133794307709,0.516857206821442,-0.497222453355789\n             ,0.684417903423309,0.533237218856812,-0.269276291131973,0.797245502471924,0.540268361568451,-0.29035672545433\n             ,0.911720991134644,0.290616303682327,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.651998162269592\n             ,0.691909074783325,-0.31009703874588,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.585451006889343\n             ,0.667790055274963,-0.459677666425705,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.474711626768112\n             ,0.621306002140045,-0.623400151729584,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.331786870956421\n             ,0.242688208818436,-0.911602914333344,0.0537682510912418,-0.324202865362167,0.944458305835724,0.0744736939668655\n             ,0.385000914335251,0.919906497001648,0.320094555616379,0.36778724193573,0.873081922531128,0.349699586629868,-0.343658298254013\n             ,0.871555626392365,0.349699586629868,-0.343658298254013,0.871555626392365,0.320094555616379,0.36778724193573\n             ,0.873081922531128,0.600283682346344,0.352708756923676,0.717813372612,0.696352481842041,-0.374734103679657,0.612100958824158\n             ,0.799351274967194,0.345198392868042,0.491808533668518,0.900613248348236,-0.362417966127396,0.239893689751625\n             ,0.696352481842041,-0.374734103679657,0.612100958824158,0.600283682346344,0.352708756923676,0.717813372612,-0.334018349647522\n             ,0.527555286884308,-0.7810999751091,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.21808297932148\n             ,0.578010439872742,-0.786348342895508,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.365642845630646\n             ,0.319204062223434,-0.874307751655579,-0.334018349647522,0.527555286884308,-0.7810999751091,-0.240498825907707\n             ,0.538952767848969,-0.807273328304291,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.182968229055405\n             ,-0.224779292941093,-0.957077264785767,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.363190740346909\n             ,0.022262267768383,-0.931448817253113,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.128380045294762\n             ,-0.384965181350708,-0.913958609104156,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.182968229055405\n             ,-0.224779292941093,-0.957077264785767,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.140057414770126\n             ,-0.293910145759583,-0.945516109466553,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.0463922955095768\n             ,-0.412300795316696,-0.909865856170654,-0.0450695939362049,-0.253388822078705,-0.966314017772675,-0.253343611955643\n             ,0.265877068042755,-0.930121719837189,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.334018349647522\n             ,0.527555286884308,-0.7810999751091,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.363190740346909\n             ,0.022262267768383,-0.931448817253113,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.253343611955643\n             ,0.265877068042755,-0.930121719837189,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.251340746879578\n             ,-0.154538676142693,-0.955481886863709,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.256396502256393\n             ,-0.00964211951941252,-0.966523587703705,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.0387927554547787\n             ,0.555053651332855,-0.830909490585327,-0.294875234365463,0.607182502746582,-0.737819731235504,0.0643617510795593\n             ,0.973314523696899,0.220264464616776,0.0419506318867207,0.986220836639404,0.160026773810387,0.10627294331789\n             ,0.940789699554443,0.321901887655258,0.0643617510795593,0.973314523696899,0.220264464616776,-0.294875234365463\n             ,0.607182502746582,-0.737819731235504,-0.585451006889343,0.667790055274963,-0.459677666425705,0.190607443451881\n             ,0.891252994537354,0.41150563955307,0.10627294331789,0.940789699554443,0.321901887655258,-0.585451006889343,0.667790055274963\n             ,-0.459677666425705,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.717432975769043,0.661532044410706\n             ,0.218323826789856,-0.556003272533417,0.628243684768677,0.544215261936188,0.352456122636795,0.760582089424133\n             ,0.545242667198181,0.287199288606644,0.822433173656464,0.491039961576462,-0.556003272533417,0.628243684768677\n             ,0.544215261936188,-0.25070720911026,0.613901972770691,0.748512029647827,0.540614545345306,0.654488027095795\n             ,0.528565406799316,0.352456122636795,0.760582089424133,0.545242667198181,-0.25070720911026,0.613901972770691\n             ,0.748512029647827,-0.112783953547478,0.903910756111145,0.412583559751511,0.255933493375778,0.96283483505249\n             ,-0.0862965509295464,0.540614545345306,0.654488027095795,0.528565406799316,-0.353226035833359,0.839446485042572\n             ,0.412990301847458,0.875235259532928,0.374192535877228,0.306501507759094,0.799351274967194,0.345198392868042\n             ,0.491808533668518,-0.289120554924011,0.931183099746704,0.222052708268166,-0.293016821146011,0.709561467170715\n             ,0.640830397605896,-0.0522832758724689,0.619819462299347,0.783000826835632,0.916130423545837,0.393186241388321\n             ,0.0781642198562622,0.886379599571228,0.431774586439133,0.167038753628731,0.916130423545837,0.393186241388321\n             ,0.0781642198562622,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.00815227441489697,0.997119009494781\n             ,0.075413390994072,0.941828966140747,0.33263236284256,0.0481028594076633,0.0218184478580952,0.990070343017578\n             ,-0.13886933028698,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.320094555616379,0.36778724193573\n             ,0.873081922531128,0.0744736939668655,0.385000914335251,0.919906497001648,-0.0716726332902908,0.99415910243988\n             ,-0.0806891024112701,-0.193970412015915,0.978859066963196,0.0648878961801529,0.600283682346344,0.352708756923676\n             ,0.717813372612,0.320094555616379,0.36778724193573,0.873081922531128,-0.193970412015915,0.978859066963196,0.0648878961801529\n             ,-0.289120554924011,0.931183099746704,0.222052708268166,0.799351274967194,0.345198392868042,0.491808533668518\n             ,0.600283682346344,0.352708756923676,0.717813372612,-0.528217673301697,0.774278223514557,0.348538845777512,-0.436571836471558\n             ,0.668562531471252,0.602020919322968,-0.293016821146011,0.709561467170715,0.640830397605896,-0.353226035833359\n             ,0.839446485042572,0.412990301847458,-0.355782032012939,0.924564778804779,-0.136378616094589,-0.468000799417496\n             ,0.87750107049942,0.10472384095192,-0.289120554924011,0.931183099746704,0.222052708268166,-0.193970412015915\n             ,0.978859066963196,0.0648878961801529,-0.165674656629562,0.933009803295136,-0.319444298744202,-0.355782032012939\n             ,0.924564778804779,-0.136378616094589,-0.193970412015915,0.978859066963196,0.0648878961801529,-0.0716726332902908\n             ,0.99415910243988,-0.0806891024112701,0.00435609184205532,0.929633140563965,-0.368460655212402,-0.165674656629562\n             ,0.933009803295136,-0.319444298744202,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.0218184478580952\n             ,0.990070343017578,-0.13886933028698,0.122461646795273,0.908201992511749,0.400215208530426,0.0643617510795593\n             ,0.973314523696899,0.220264464616776,0.10627294331789,0.940789699554443,0.321901887655258,0.227538049221039,0.872712194919586\n             ,0.431971967220306,0.227538049221039,0.872712194919586,0.431971967220306,0.10627294331789,0.940789699554443,0.321901887655258\n             ,0.190607443451881,0.891252994537354,0.41150563955307,0.37678524851799,0.791645467281342,0.480968058109283,0.51012510061264\n             ,0.705090045928955,0.492565125226974,0.490650862455368,0.719568371772766,0.49140927195549,0.287199288606644,0.822433173656464\n             ,0.491039961576462,0.352456122636795,0.760582089424133,0.545242667198181,0.490650862455368,0.719568371772766\n             ,0.49140927195549,0.37678524851799,0.791645467281342,0.480968058109283,0.190607443451881,0.891252994537354,0.41150563955307\n             ,0.287199288606644,0.822433173656464,0.491039961576462,0.51012510061264,0.705090045928955,0.492565125226974,0.352456122636795\n             ,0.760582089424133,0.545242667198181,0.540614545345306,0.654488027095795,0.528565406799316,0.576555967330933\n             ,0.629547953605652,0.520819187164307,0.576555967330933,0.629547953605652,0.520819187164307,0.540614545345306\n             ,0.654488027095795,0.528565406799316,0.255933493375778,0.96283483505249,-0.0862965509295464,0.665259420871735\n             ,0.743798911571503,-0.0647542923688889,-0.210487872362137,0.845762014389038,0.490287095308304,0.665259420871735\n             ,0.743798911571503,-0.0647542923688889,0.255933493375778,0.96283483505249,-0.0862965509295464,-0.00815227441489697\n             ,0.997119009494781,0.075413390994072,-0.206960439682007,0.579236388206482,0.78844952583313,-0.210487872362137\n             ,0.845762014389038,0.490287095308304,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.0522832758724689\n             ,0.619819462299347,0.783000826835632,-0.436571836471558,0.668562531471252,0.602020919322968,-0.206960439682007\n             ,0.579236388206482,0.78844952583313,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.293016821146011\n             ,0.709561467170715,0.640830397605896,0.875235259532928,0.374192535877228,0.306501507759094,0.953684031963348\n             ,-0.290462404489517,-0.0782197788357735,0.900613248348236,-0.362417966127396,0.239893689751625,0.799351274967194\n             ,0.345198392868042,0.491808533668518,0.908462584018707,-0.179232552647591,-0.377586334943771,0.886379599571228\n             ,0.431774586439133,0.167038753628731,0.916130423545837,0.393186241388321,0.0781642198562622,0.835292756557465\n             ,-0.124363616108894,-0.53555554151535,0.835292756557465,-0.124363616108894,-0.53555554151535,0.916130423545837\n             ,0.393186241388321,0.0781642198562622,0.941828966140747,0.33263236284256,0.0481028594076633,0.822044253349304\n             ,-0.128348395228386,-0.554770171642303,-0.29514667391777,0.569713115692139,0.767017185688019,0.489128321409225\n             ,0.658302128314972,0.572181582450867,0.443346619606018,0.824227571487427,0.352267920970917,-0.312749028205872\n             ,0.791433751583099,0.525186359882355,0.417629092931747,0.907208979129791,0.0505746938288212,-0.39387321472168\n             ,0.899492859840393,0.18914669752121,-0.312749028205872,0.791433751583099,0.525186359882355,0.443346619606018\n             ,0.824227571487427,0.352267920970917,0.333067029714584,0.789500892162323,-0.515514075756073,0.287465304136276\n             ,0.55735319852829,-0.778923034667969,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.535731971263886\n             ,0.751305878162384,-0.385396867990494,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.550671279430389\n             ,-0.263566613197327,-0.79201877117157,-0.556003570556641,0.531874418258667,-0.638724982738495,0.287465304136276\n             ,0.55735319852829,-0.778923034667969,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.225950360298157\n             ,-0.351854801177979,-0.908374726772308,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.708229780197144\n             ,0.558061540126801,-0.432409435510635,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.529653549194336\n             ,0.324454098939896,-0.783707022666931,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.23223540186882\n             ,0.292309641838074,-0.927697062492371,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.249898374080658\n             ,-0.566836893558502,-0.785013854503632,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.831379592418671\n             ,-0.460717499256134,-0.310720801353455,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.432406663894653\n             ,-0.769645929336548,-0.469754874706268,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.900380790233612\n             ,-0.432869046926498,-0.0440317057073116,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.523446321487427\n             ,-0.84945410490036,-0.0665707886219025,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.919401347637177\n             ,-0.339992344379425,0.197753340005875,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.704255282878876\n             ,-0.136106103658676,0.696778059005737,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.646371781826019\n             ,-0.668279051780701,0.368248045444489,-0.21317532658577,0.371294349431992,0.903712749481201,0.203655928373337\n             ,0.636657357215881,0.743768572807312,0.489128321409225,0.658302128314972,0.572181582450867,-0.29514667391777\n             ,0.569713115692139,0.767017185688019,-0.848471641540527,0.145880371332169,0.508738458156586,-0.29514667391777\n             ,0.569713115692139,0.767017185688019,-0.312749028205872,0.791433751583099,0.525186359882355,-0.868030965328217\n             ,0.305244266986847,0.391596972942352,-0.868030965328217,0.305244266986847,0.391596972942352,-0.312749028205872\n             ,0.791433751583099,0.525186359882355,-0.39387321472168,0.899492859840393,0.18914669752121,-0.903881251811981\n             ,0.372275590896606,0.21073579788208,-0.968474745750427,0.246992528438568,-0.0324244759976864,-0.946829199790955\n             ,0.314822763204575,0.066340483725071,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.535731971263886\n             ,0.751305878162384,-0.385396867990494,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.974632024765015\n             ,0.185502991080284,-0.125223994255066,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.550671279430389\n             ,-0.263566613197327,-0.79201877117157,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.990060329437256\n             ,-0.0573833771049976,-0.128404289484024,-0.720985412597656,0.250006407499313,0.646279215812683,-0.734153270721436\n             ,0.469748914241791,0.490260034799576,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.831379592418671\n             ,-0.460717499256134,-0.310720801353455,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.952506065368652\n             ,0.304441630840302,-0.00689529813826084,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.900380790233612\n             ,-0.432869046926498,-0.0440317057073116,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.873165845870972\n             ,0.487039655447006,0.0193340703845024,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.919401347637177\n             ,-0.339992344379425,0.197753340005875,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.847110569477081\n             ,0.52096164226532,0.104893282055855,-0.792521595954895,-0.308754324913025,0.525909006595612,-0.0522458925843239\n             ,-0.587620496749878,0.807448148727417,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.795908987522125\n             ,-0.482192486524582,0.366086363792419,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.793157696723938\n             ,-0.575152516365051,0.200250893831253,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.154009714722633\n             ,-0.985912680625916,-0.0652465522289276,-0.786082983016968,-0.551289200782776,-0.279560059309006,-0.805140495300293\n             ,-0.58423912525177,-0.102046631276608,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.196655720472336\n             ,-0.712397694587708,-0.673658668994904,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.786082983016968\n             ,-0.551289200782776,-0.279560059309006,-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.18527527153492\n             ,-0.667633235454559,-0.721067905426025,-0.33330100774765,0.819487571716309,0.466208755970001,-0.0801405981183052\n             ,0.901194870471954,0.425940543413162,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.322806298732758\n             ,0.932436168193817,-0.162354081869125,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.355633050203323\n             ,0.924526989459991,-0.137021988630295,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.0175000000745058\n             ,0.99979567527771,0.010117226280272,-0.490000605583191,0.777733385562897,0.393738687038422,-0.415997177362442\n             ,0.908823668956757,0.0313992239534855,-0.0175000000745058,0.99979567527771,0.010117226280272,0.130717054009438\n             ,0.879965662956238,0.456698477268219,-0.568449974060059,0.526249170303345,0.632397353649139,-0.490000605583191\n             ,0.777733385562897,0.393738687038422,0.130717054009438,0.879965662956238,0.456698477268219,0.133888319134712\n             ,0.6242516040802,0.769664764404297,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.141512751579285\n             ,-0.835205972194672,0.531418025493622,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.792521595954895\n             ,-0.308754324913025,0.525909006595612,0.021379429847002,0.751378178596497,0.659525394439697,-0.261273354291916\n             ,0.592454433441162,0.762059092521667,-0.423358976840973,0.530543863773346,0.734363913536072,0.107353128492832\n             ,0.690562188625336,0.715261578559875,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.997107744216919\n             ,-0.0381367467343807,-0.065739631652832,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.740590155124664\n             ,-0.532754123210907,-0.409510970115662,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.0371135324239731\n             ,0.851556301116943,-0.52294784784317,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.582632660865784\n             ,0.528638899326324,-0.617316842079163,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.936180412769318\n             ,-0.215160012245178,-0.277979135513306,-0.740590155124664,-0.532754123210907,-0.409510970115662,-0.542133092880249\n             ,-0.457725584506989,-0.704683601856232,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.988731265068054\n             ,0.125658646225929,0.0813654363155365,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.874497592449188\n             ,-0.478756755590439,-0.0777553021907806,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.938912212848663\n             ,-0.107537157833576,0.326924532651901,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.905584931373596\n             ,-0.288571357727051,0.310873836278915,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.631440281867981\n             ,-0.43637079000473,-0.640986502170563,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,0.00376493413932621\n             ,0.588400185108185,-0.808561086654663,0.0140912849456072,0.990858137607574,0.134169965982437,-0.491390645503998\n             ,0.848508954048157,0.196386933326721,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.024807246401906\n             ,0.980889618396759,-0.192977145314217,0.107353128492832,0.690562188625336,0.715261578559875,-0.423358976840973\n             ,0.530543863773346,0.734363913536072,-0.44881072640419,0.73288232088089,0.511324167251587,0.0436014086008072\n             ,0.880429863929749,0.472167462110519,0.0436014086008072,0.880429863929749,0.472167462110519,0.443346619606018\n             ,0.824227571487427,0.352267920970917,0.489128321409225,0.658302128314972,0.572181582450867,0.107353128492832\n             ,0.690562188625336,0.715261578559875,0.0140912849456072,0.990858137607574,0.134169965982437,0.417629092931747\n             ,0.907208979129791,0.0505746938288212,0.443346619606018,0.824227571487427,0.352267920970917,0.0436014086008072\n             ,0.880429863929749,0.472167462110519,-0.0371135324239731,0.851556301116943,-0.52294784784317,0.333067029714584\n             ,0.789500892162323,-0.515514075756073,0.373418390750885,0.898855626583099,-0.229384630918503,-0.024807246401906\n             ,0.980889618396759,-0.192977145314217,0.128099784255028,-0.105493560433388,-0.986134648323059,0.287465304136276\n             ,0.55735319852829,-0.778923034667969,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.0306792501360178\n             ,-0.0856858864426613,-0.995849788188934,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.23223540186882\n             ,0.292309641838074,-0.927697062492371,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.384585797786713\n             ,-0.351018995046616,-0.853744387626648,-0.249898374080658,-0.566836893558502,-0.785013854503632,0.022180886939168\n             ,-0.312959760427475,-0.949507355690002,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.542133092880249\n             ,-0.457725584506989,-0.704683601856232,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.432406663894653\n             ,-0.769645929336548,-0.469754874706268,-0.740590155124664,-0.532754123210907,-0.409510970115662,-0.874497592449188\n             ,-0.478756755590439,-0.0777553021907806,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.55406641960144\n             ,-0.797906458377838,0.237393528223038,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.874497592449188\n             ,-0.478756755590439,-0.0777553021907806,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.55406641960144\n             ,-0.797906458377838,0.237393528223038,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.905584931373596\n             ,-0.288571357727051,0.310873836278915,0.203655928373337,0.636657357215881,0.743768572807312,-0.0869597047567368\n             ,0.548145830631256,0.831849813461304,-0.261273354291916,0.592454433441162,0.762059092521667,0.021379429847002\n             ,0.751378178596497,0.659525394439697,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.550671279430389\n             ,-0.263566613197327,-0.79201877117157,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.225950360298157\n             ,-0.351854801177979,-0.908374726772308,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.225950360298157\n             ,-0.351854801177979,-0.908374726772308,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,-0.631440281867981\n             ,-0.43637079000473,-0.640986502170563,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.642698705196381\n             ,0.173675417900085,-0.746173679828644,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.661458969116211\n             ,-0.196823701262474,-0.723693668842316,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.210184469819069\n             ,0.149185121059418,-0.966212332248688,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.661458969116211\n             ,-0.196823701262474,-0.723693668842316,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.210184469819069\n             ,0.149185121059418,-0.966212332248688,-0.321419239044189,-0.278268992900848,-0.905127644538879,0.022180886939168\n             ,-0.312959760427475,-0.949507355690002,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.529653549194336\n             ,0.324454098939896,-0.783707022666931,0.0630237460136414,0.258316248655319,-0.964002430438995,0.022180886939168\n             ,-0.312959760427475,-0.949507355690002,-0.362813800573349,0.452378064393997,0.814690291881561,-0.734153270721436\n             ,0.469748914241791,0.490260034799576,-0.720985412597656,0.250006407499313,0.646279215812683,-0.0333014093339443\n             ,0.336885303258896,0.940956592559814,0.0345219671726227,0.469873160123825,0.882058680057526,0.0388557612895966\n             ,0.393748223781586,0.918396770954132,-0.598303258419037,0.575496375560761,0.557527720928192,-0.362813800573349\n             ,0.452378064393997,0.814690291881561,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.659405767917633\n             ,-0.515389144420624,-0.547318935394287,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.598303258419037\n             ,0.575496375560761,0.557527720928192,0.0388557612895966,0.393748223781586,0.918396770954132,-0.0402880981564522\n             ,-0.602410852909088,0.797168791294098,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.598303258419037\n             ,0.575496375560761,0.557527720928192,-0.497222453355789,0.684417903423309,0.533237218856812,-0.646716237068176\n             ,0.744295537471771,0.166680246591568,-0.391309916973114,0.896766066551209,0.206608697772026,-0.269276291131973\n             ,0.797245502471924,0.540268361568451,-0.269276291131973,0.797245502471924,0.540268361568451,-0.391309916973114\n             ,0.896766066551209,0.206608697772026,-0.317988157272339,0.931548714637756,0.176353335380554,-0.218010768294334\n             ,0.827573180198669,0.517294824123383,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.805685818195343\n             ,-0.585970938205719,0.0866512581706047,-0.903881251811981,0.372275590896606,0.21073579788208,-0.946829199790955\n             ,0.314822763204575,0.066340483725071,0.37678524851799,0.791645467281342,0.480968058109283,0.490650862455368,0.719568371772766\n             ,0.49140927195549,-0.528217673301697,0.774278223514557,0.348538845777512,-0.468000799417496,0.87750107049942\n             ,0.10472384095192,-0.317988157272339,0.931548714637756,0.176353335380554,-0.491390645503998,0.848508954048157\n             ,0.196386933326721,-0.44881072640419,0.73288232088089,0.511324167251587,-0.218010768294334,0.827573180198669\n             ,0.517294824123383,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.646716237068176,0.744295537471771\n             ,0.166680246591568,-0.717432975769043,0.661532044410706,0.218323826789856,-0.72230190038681,0.680600225925446\n             ,-0.122732326388359,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.717432975769043,0.661532044410706\n             ,0.218323826789856,0.287199288606644,0.822433173656464,0.491039961576462,0.190607443451881,0.891252994537354\n             ,0.41150563955307,-0.468000799417496,0.87750107049942,0.10472384095192,-0.528217673301697,0.774278223514557,0.348538845777512\n             ,-0.353226035833359,0.839446485042572,0.412990301847458,-0.289120554924011,0.931183099746704,0.222052708268166\n             ,-0.903881251811981,0.372275590896606,0.21073579788208,-0.39387321472168,0.899492859840393,0.18914669752121,-0.482304006814957\n             ,0.870065748691559,-0.101825155317783,-0.946829199790955,0.314822763204575,0.066340483725071,-0.805140495300293\n             ,-0.58423912525177,-0.102046631276608,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.154009714722633\n             ,-0.985912680625916,-0.0652465522289276,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.491390645503998\n             ,0.848508954048157,0.196386933326721,0.0140912849456072,0.990858137607574,0.134169965982437,0.0436014086008072\n             ,0.880429863929749,0.472167462110519,-0.44881072640419,0.73288232088089,0.511324167251587,-0.299128979444504\n             ,0.822018504142761,-0.484569281339645,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.233643680810928\n             ,0.587966680526733,-0.774406731128693,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.322806298732758\n             ,0.932436168193817,-0.162354081869125,-0.847110569477081,0.52096164226532,0.104893282055855,-0.656458854675293\n             ,0.394298911094666,0.643109738826752,-0.33330100774765,0.819487571716309,0.466208755970001,-0.874421000480652\n             ,0.028505390509963,-0.484329789876938,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.93118155002594\n             ,-0.18550032377243,0.31383204460144,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.93118155002594\n             ,-0.18550032377243,0.31383204460144,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.909859955310822\n             ,-0.283149540424347,0.303284049034119,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.879765868186951\n             ,-0.241239860653877,0.409652799367905,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.911626994609833\n             ,-0.102696627378464,0.397981941699982,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.504832327365875\n             ,0.760625302791595,-0.40815868973732,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.197057366371155\n             ,0.623411595821381,-0.756654739379883,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.550154626369476\n             ,-0.73190438747406,0.402052044868469,-0.307830482721329,-0.686485290527344,0.658770322799683,-0.430081337690353\n             ,-0.536487519741058,0.726093113422394,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.350932270288467\n             ,0.749857068061829,-0.56085729598999,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.427128940820694\n             ,0.891256213188171,-0.152391627430916,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.792521595954895\n             ,-0.308754324913025,0.525909006595612,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.968474745750427\n             ,0.246992528438568,-0.0324244759976864,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.326218724250793\n             ,0.625610828399658,-0.70865535736084,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.269162774085999\n             ,0.465141177177429,-0.843323826789856,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.271266043186188\n             ,0.549705266952515,-0.790087878704071,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.326218724250793\n             ,0.625610828399658,-0.70865535736084,-0.334018349647522,0.527555286884308,-0.7810999751091,0.333067029714584\n             ,0.789500892162323,-0.515514075756073,-0.535731971263886,0.751305878162384,-0.385396867990494,-0.482304006814957\n             ,0.870065748691559,-0.101825155317783,0.373418390750885,0.898855626583099,-0.229384630918503,-0.646371781826019\n             ,-0.668279051780701,0.368248045444489,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.919401347637177\n             ,-0.339992344379425,0.197753340005875,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.974632024765015\n             ,0.185502991080284,-0.125223994255066,-0.968474745750427,0.246992528438568,-0.0324244759976864,-0.535731971263886\n             ,0.751305878162384,-0.385396867990494,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.847110569477081\n             ,0.52096164226532,0.104893282055855,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.704255282878876\n             ,-0.136106103658676,0.696778059005737,-0.656458854675293,0.394298911094666,0.643109738826752,-0.793157696723938\n             ,-0.575152516365051,0.200250893831253,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.0983656272292137\n             ,-0.854222357273102,0.510517776012421,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.322806298732758\n             ,0.932436168193817,-0.162354081869125,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.141158223152161\n             ,0.972466349601746,-0.185427963733673,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.504972338676453\n             ,0.857627868652344,-0.0973518118262291,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.0371135324239731\n             ,0.851556301116943,-0.52294784784317,-0.024807246401906,0.980889618396759,-0.192977145314217,-0.966241955757141\n             ,0.0842645391821861,0.243466570973396,-0.905584931373596,-0.288571357727051,0.310873836278915,-0.922896504402161\n             ,-0.346186280250549,0.168573826551437,-0.988731265068054,0.125658646225929,0.0813654363155365,0.287465304136276\n             ,0.55735319852829,-0.778923034667969,0.333067029714584,0.789500892162323,-0.515514075756073,-0.0371135324239731\n             ,0.851556301116943,-0.52294784784317,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.687154352664948\n             ,-0.340534240007401,0.6417595744133,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.905584931373596\n             ,-0.288571357727051,0.310873836278915,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.911127626895905\n             ,-0.233605042099953,0.339521944522858,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.988731265068054\n             ,0.125658646225929,0.0813654363155365,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.623457789421082\n             ,-0.205396309494972,-0.754395663738251,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.639488339424133\n             ,-0.334312081336975,-0.692307770252228,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.936180412769318\n             ,-0.215160012245178,-0.277979135513306,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.656892538070679\n             ,-0.430070400238037,-0.619299292564392,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.568449974060059\n             ,0.526249170303345,0.632397353649139,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.995725810527802\n             ,0.0919083878397942,-0.0091116763651371,-0.490000605583191,0.777733385562897,0.393738687038422,-0.40227422118187\n             ,-0.350243538618088,-0.845875263214111,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.623457789421082\n             ,-0.205396309494972,-0.754395663738251,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.144822835922241\n             ,-0.365306288003922,-0.919552981853485,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.192518308758736\n             ,-0.454994261264801,-0.869434833526611,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.107891380786896\n             ,-0.441889137029648,-0.890557944774628,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.0780564248561859\n             ,-0.38590082526207,-0.919232130050659,-0.0463922955095768,-0.412300795316696,-0.909865856170654,0.022180886939168\n             ,-0.312959760427475,-0.949507355690002,-0.249898374080658,-0.566836893558502,-0.785013854503632,-0.730888843536377\n             ,-0.408141672611237,-0.547011733055115,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.99845689535141\n             ,-0.0306249987334013,-0.0463239327073097,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.831379592418671\n             ,-0.460717499256134,-0.310720801353455,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.568449974060059\n             ,0.526249170303345,0.632397353649139,0.133888319134712,0.6242516040802,0.769664764404297,-0.0333014093339443\n             ,0.336885303258896,0.940956592559814,-0.720985412597656,0.250006407499313,0.646279215812683,-0.661458969116211\n             ,-0.196823701262474,-0.723693668842316,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.542133092880249\n             ,-0.457725584506989,-0.704683601856232,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.249898374080658\n             ,-0.566836893558502,-0.785013854503632,-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.740590155124664\n             ,-0.532754123210907,-0.409510970115662,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.120519727468491\n             ,-0.475927352905273,-0.871187806129456,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.144792750477791\n             ,-0.430247753858566,-0.891022980213165,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.144792750477791\n             ,-0.430247753858566,-0.891022980213165,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.140057414770126\n             ,-0.293910145759583,-0.945516109466553,-0.229701682925224,-0.369639068841934,-0.900335550308228,0.953684031963348\n             ,-0.290462404489517,-0.0782197788357735,0.875235259532928,0.374192535877228,0.306501507759094,0.886379599571228\n             ,0.431774586439133,0.167038753628731,0.908462584018707,-0.179232552647591,-0.377586334943771,0.875235259532928\n             ,0.374192535877228,0.306501507759094,-0.353226035833359,0.839446485042572,0.412990301847458,-0.293016821146011\n             ,0.709561467170715,0.640830397605896,0.886379599571228,0.431774586439133,0.167038753628731,0.417629092931747\n             ,0.907208979129791,0.0505746938288212,0.0140912849456072,0.990858137607574,0.134169965982437,-0.024807246401906\n             ,0.980889618396759,-0.192977145314217,0.373418390750885,0.898855626583099,-0.229384630918503,-0.39387321472168\n             ,0.899492859840393,0.18914669752121,0.417629092931747,0.907208979129791,0.0505746938288212,0.373418390750885\n             ,0.898855626583099,-0.229384630918503,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.192518308758736\n             ,-0.454994261264801,-0.869434833526611,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.342734336853027\n             ,-0.423973858356476,-0.838319361209869,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.0599007532000542\n             ,0.520737946033478,0.851612508296967,-0.761694371700287,0.389483571052551,0.517807185649872,-0.261273354291916\n             ,0.592454433441162,0.762059092521667,-0.0869597047567368,0.548145830631256,0.831849813461304,-0.786082983016968\n             ,-0.551289200782776,-0.279560059309006,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.747875332832336\n             ,-0.0330392643809319,0.663016498088837,-0.848471641540527,0.145880371332169,0.508738458156586,-0.0869597047567368\n             ,0.548145830631256,0.831849813461304,0.203655928373337,0.636657357215881,0.743768572807312,-0.21317532658577\n             ,0.371294349431992,0.903712749481201,-0.347785919904709,0.133236810564995,0.928058683872223,-0.848471641540527\n             ,0.145880371332169,0.508738458156586,-0.747875332832336,-0.0330392643809319,0.663016498088837,-0.21317532658577\n             ,0.371294349431992,0.903712749481201,-0.29514667391777,0.569713115692139,0.767017185688019,0.489128321409225\n             ,0.658302128314972,0.572181582450867,0.203655928373337,0.636657357215881,0.743768572807312,0.021379429847002\n             ,0.751378178596497,0.659525394439697,0.107353128492832,0.690562188625336,0.715261578559875,0.444850295782089\n             ,-0.346757113933563,0.825752794742584,0.254257917404175,-0.212425783276558,0.943519055843353,0.228504449129105\n             ,-0.206080406904221,0.951481223106384,0.419803202152252,-0.320524513721466,0.84913444519043,-0.952732801437378\n             ,-0.159682244062424,0.258460462093353,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.917683064937592\n             ,-0.215978980064392,0.333482950925827,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.687154352664948\n             ,-0.340534240007401,0.6417595744133,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.938912212848663\n             ,-0.107537157833576,0.326924532651901,-0.249380812048912,0.181461036205292,0.951252400875092,0.0534563846886158\n             ,0.983699679374695,0.171689838171005,-0.106476634740829,0.986019790172577,0.128170698881149,0.255933493375778\n             ,0.96283483505249,-0.0862965509295464,-0.112783953547478,0.903910756111145,0.412583559751511,0.181902796030045\n             ,0.957158207893372,0.225298702716827,-0.142466872930527,0.844133794307709,0.516857206821442,-0.29035672545433\n             ,0.911720991134644,0.290616303682327,-0.301660984754562,0.907010614871979,0.293823689222336,-0.301660984754562\n             ,0.907010614871979,0.293823689222336,-0.29035672545433,0.911720991134644,0.290616303682327,-0.435499727725983\n             ,0.707530975341797,0.556542754173279,-0.720441699028015,0.626922428607941,0.296533405780792,-0.720441699028015\n             ,0.626922428607941,0.296533405780792,-0.435499727725983,0.707530975341797,0.556542754173279,-0.761694371700287\n             ,0.389483571052551,0.517807185649872,-0.877903461456299,0.125808238983154,0.462014973163605,0.181902796030045\n             ,0.957158207893372,0.225298702716827,0.414917647838593,0.779010057449341,0.470092207193375,0.421662032604218\n             ,0.906709790229797,0.00885869562625885,-0.142466872930527,0.844133794307709,0.516857206821442,-0.684342086315155\n             ,0.70050323009491,0.202413260936737,-0.887027978897095,0.338621288537979,0.313874155282974,-0.761694371700287\n             ,0.389483571052551,0.517807185649872,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.112783953547478\n             ,0.903910756111145,0.412583559751511,0.421662032604218,0.906709790229797,0.00885869562625885,0.325284242630005\n             ,0.933813154697418,0.148940086364746,0.0534563846886158,0.983699679374695,0.171689838171005,-0.0425885356962681\n             ,0.988019645214081,-0.148335143923759,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.106476634740829\n             ,0.986019790172577,0.128170698881149,-0.182774692773819,0.975853502750397,0.119596734642982,-0.662446260452271\n             ,-0.708414137363434,-0.243545264005661,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.672753393650055\n             ,-0.281969040632248,-0.684029519557953,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.819226324558258\n             ,-0.572083711624146,-0.0398554801940918,-0.977081477642059,-0.212798669934273,-0.00533603969961405,-0.939978837966919\n             ,-0.283475905656815,-0.189950495958328,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.954774618148804\n             ,-0.0549839399755001,0.292202323675156,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.859505951404572\n             ,-0.505740880966187,0.0739976838231087,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.833407461643219\n             ,-0.0707383528351784,0.548113167285919,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.835693418979645\n             ,-0.485578000545502,0.256574630737305,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.527523517608643\n             ,-0.0868940651416779,0.845084846019745,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.680657148361206\n             ,-0.552846014499664,0.480694442987442,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.122193120419979\n             ,0.122121326625347,0.984964549541473,-0.139697372913361,0.0780137032270432,0.987116277217865,0.254257917404175\n             ,-0.212425783276558,0.943519055843353,0.142127305269241,-0.253888607025146,0.956734240055084,0.254257917404175\n             ,-0.212425783276558,0.943519055843353,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.184806242585182\n             ,0.04760567471385,0.981621265411377,0.228504449129105,-0.206080406904221,0.951481223106384,0.228504449129105\n             ,-0.206080406904221,0.951481223106384,-0.184806242585182,0.04760567471385,0.981621265411377,-0.275664061307907\n             ,0.0508917570114136,0.959905922412872,0.15039549767971,-0.209228366613388,0.966232180595398,-0.275664061307907\n             ,0.0508917570114136,0.959905922412872,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.0830294638872147\n             ,-0.341880321502686,0.93606835603714,0.15039549767971,-0.209228366613388,0.966232180595398,0.000295055127935484\n             ,0.143534883856773,0.98964524269104,-0.122193120419979,0.122121326625347,0.984964549541473,0.142127305269241\n             ,-0.253888607025146,0.956734240055084,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.859505951404572\n             ,-0.505740880966187,0.0739976838231087,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.977081477642059\n             ,-0.212798669934273,-0.00533603969961405,-0.819226324558258,-0.572083711624146,-0.0398554801940918,0.00928871519863606\n             ,-0.538456916809082,-0.842601835727692,-0.217214897274971,-0.348953694105148,-0.911618888378143,-0.0681053325533867\n             ,-0.345358580350876,-0.935996353626251,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.672753393650055\n             ,-0.281969040632248,-0.684029519557953,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.00847726315259933\n             ,-0.531524419784546,-0.847000539302826,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.3323914706707\n             ,-0.288453340530396,-0.89794796705246,-0.217214897274971,-0.348953694105148,-0.911618888378143,0.00928871519863606\n             ,-0.538456916809082,-0.842601835727692,-0.00847726315259933,-0.531524419784546,-0.847000539302826,-0.746677756309509\n             ,-0.64300948381424,-0.170326471328735,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.898073315620422\n             ,-0.295351594686508,-0.325932085514069,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.600559055805206\n             ,0.384851962327957,0.70086932182312,-0.789069652557373,0.513498783111572,0.33717668056488,-0.900736033916473\n             ,0.276170164346695,0.335267961025238,-0.706152856349945,0.175898715853691,0.685862839221954,-0.95565664768219\n             ,0.128923356533051,0.264762312173843,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.706152856349945\n             ,0.175898715853691,0.685862839221954,-0.900736033916473,0.276170164346695,0.335267961025238,-0.786065578460693\n             ,0.0604399740695953,0.61518120765686,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.93118155002594\n             ,-0.18550032377243,0.31383204460144,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.88741672039032\n             ,-0.272481471300125,0.371813744306564,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.726840019226074\n             ,-0.113997332751751,0.677280008792877,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.82379025220871\n             ,-0.139535933732986,0.549453675746918,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.492890477180481\n             ,0.0867519974708557,0.865755796432495,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.740768253803253\n             ,-0.0962792262434959,0.664825260639191,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.93118155002594\n             ,-0.18550032377243,0.31383204460144,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.609626770019531\n             ,-0.0633527785539627,0.790152907371521,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.879765868186951\n             ,-0.241239860653877,0.409652799367905,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.52557498216629\n             ,0.553365111351013,0.646187245845795,-0.713905096054077,0.655318558216095,0.246773228049278,-0.789069652557373\n             ,0.513498783111572,0.33717668056488,-0.600559055805206,0.384851962327957,0.70086932182312,-0.554342925548553\n             ,0.567035973072052,0.609240651130676,-0.684342086315155,0.70050323009491,0.202413260936737,-0.713905096054077\n             ,0.655318558216095,0.246773228049278,-0.52557498216629,0.553365111351013,0.646187245845795,-0.854032337665558\n             ,0.444255322217941,-0.270676791667938,-0.95565664768219,0.128923356533051,0.264762312173843,-0.900736033916473\n             ,0.276170164346695,0.335267961025238,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.874421000480652\n             ,0.028505390509963,-0.484329789876938,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.0824920982122421\n             ,0.586886823177338,-0.805455684661865,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.789069652557373\n             ,0.513498783111572,0.33717668056488,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.716631889343262\n             ,0.319041401147842,-0.620202660560608,-0.900736033916473,0.276170164346695,0.335267961025238,-0.713905096054077\n             ,0.655318558216095,0.246773228049278,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.829341650009155\n             ,0.321383953094482,-0.457061111927032,-0.789069652557373,0.513498783111572,0.33717668056488,-0.684342086315155\n             ,0.70050323009491,0.202413260936737,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.73716002702713\n             ,0.672038435935974,0.0704230293631554,-0.713905096054077,0.655318558216095,0.246773228049278,0.0745275393128395\n             ,0.431530833244324,0.899014353752136,0.0482074841856956,0.963629901409149,0.262856423854828,-0.190823212265968\n             ,0.973383665084839,0.126928135752678,-0.421310722827911,0.492505818605423,0.761534810066223,0.199702888727188\n             ,0.793615162372589,0.574711859226227,-0.263717442750931,0.775425553321838,0.573731958866119,-0.106476634740829\n             ,0.986019790172577,0.128170698881149,0.0534563846886158,0.983699679374695,0.171689838171005,-0.190823212265968\n             ,0.973383665084839,0.126928135752678,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.654110372066498\n             ,0.557340681552887,0.511381506919861,-0.421310722827911,0.492505818605423,0.761534810066223,-0.332666903734207\n             ,0.942436695098877,0.0338508486747742,-0.182774692773819,0.975853502750397,0.119596734642982,-0.263717442750931\n             ,0.775425553321838,0.573731958866119,-0.654110372066498,0.557340681552887,0.511381506919861,0.0772658213973045\n             ,-0.858631789684296,0.506736099720001,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.0522458925843239\n             ,-0.587620496749878,0.807448148727417,0.185403272509575,-0.597725808620453,0.779967606067657,0.130717054009438\n             ,0.879965662956238,0.456698477268219,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.0638052001595497\n             ,0.994221389293671,-0.086329497396946,0.105478949844837,0.892287731170654,0.438972383737564,0.133888319134712\n             ,0.6242516040802,0.769664764404297,0.130717054009438,0.879965662956238,0.456698477268219,0.105478949844837,0.892287731170654\n             ,0.438972383737564,0.212958931922913,0.603173196315765,0.768655061721802,0.0345219671726227,0.469873160123825\n             ,0.882058680057526,-0.0333014093339443,0.336885303258896,0.940956592559814,0.245675906538963,0.358359038829803\n             ,0.900678694248199,0.246256619691849,0.328444272279739,0.911856353282928,0.185403272509575,-0.597725808620453\n             ,0.779967606067657,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.141512751579285,-0.835205972194672\n             ,0.531418025493622,0.183785125613213,-0.564789414405823,0.80450975894928,-0.0402880981564522,-0.602410852909088\n             ,0.797168791294098,0.0388557612895966,0.393748223781586,0.918396770954132,0.246256619691849,0.328444272279739\n             ,0.911856353282928,0.183785125613213,-0.564789414405823,0.80450975894928,-0.00957944244146347,-0.984838724136353\n             ,0.173207774758339,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.0983656272292137,-0.854222357273102\n             ,0.510517776012421,0.0772658213973045,-0.858631789684296,0.506736099720001,-0.0333014093339443,0.336885303258896\n             ,0.940956592559814,0.133888319134712,0.6242516040802,0.769664764404297,0.212958931922913,0.603173196315765,0.768655061721802\n             ,0.245675906538963,0.358359038829803,0.900678694248199,-0.286335736513138,0.0160704739391804,-0.95799458026886\n             ,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.365642845630646,0.319204062223434,-0.874307751655579\n             ,-0.291299909353256,0.369882375001907,-0.882230937480927,0.0482074841856956,0.963629901409149,0.262856423854828\n             ,-0.0404882803559303,0.532536089420319,-0.845438301563263,0.218648448586464,0.688608109951019,-0.691383898258209\n             ,-0.190823212265968,0.973383665084839,0.126928135752678,-0.294875234365463,0.607182502746582,-0.737819731235504\n             ,-0.0387927554547787,0.555053651332855,-0.830909490585327,-0.0597109496593475,0.20538541674614,-0.976857900619507\n             ,-0.331786870956421,0.242688208818436,-0.911602914333344,-0.331786870956421,0.242688208818436,-0.911602914333344\n             ,-0.0597109496593475,0.20538541674614,-0.976857900619507,-0.0473092421889305,0.433387726545334,-0.899964928627014\n             ,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.21808297932148,0.578010439872742,-0.786348342895508\n             ,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.0400200858712196,0.538817524909973,-0.841471374034882\n             ,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.240498825907707,0.538952767848969,-0.807273328304291\n             ,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0513396598398685,0.366866230964661,-0.928855955600739\n             ,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.0672369971871376,-0.00775569351390004,-0.997706890106201\n             ,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.182968229055405,-0.224779292941093,-0.957077264785767\n             ,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.055810023099184,-0.2584228515625,-0.964418411254883\n             ,-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.0780564248561859,-0.38590082526207,-0.919232130050659\n             ,-0.182968229055405,-0.224779292941093,-0.957077264785767,-0.000145141151733696,-0.408616960048676,-0.912705957889557\n             ,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-0.0450695939362049,-0.253388822078705,-0.966314017772675\n             ,-0.0463922955095768,-0.412300795316696,-0.909865856170654,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527\n             ,-0.000159720322699286,-0.320416629314423,-0.947276711463928,0.00452618766576052,-0.317399501800537,-0.948281109333038\n             ,-0.0450695939362049,-0.253388822078705,-0.966314017772675,0.169686332345009,0.978208720684052,-0.119642592966557\n             ,0.0492917597293854,0.955946862697601,0.28937155008316,0.0205553397536278,0.989267349243164,-0.144663617014885\n             ,-0.0425885356962681,0.988019645214081,-0.148335143923759,0.370400339365005,0.925967752933502,-0.0733987167477608\n             ,0.0462776906788349,0.971960961818695,0.23054338991642,0.0492917597293854,0.955946862697601,0.28937155008316\n             ,0.169686332345009,0.978208720684052,-0.119642592966557,-0.165674656629562,0.933009803295136,-0.319444298744202\n             ,0.00435609184205532,0.929633140563965,-0.368460655212402,0.0557159669697285,0.916767716407776,0.395515710115433\n             ,0.122461646795273,0.908201992511749,0.400215208530426,-0.000357056385837495,-0.611226499080658,-0.791455626487732\n             ,-0.000515560561325401,-0.726091146469116,-0.68759822845459,0.0942423716187477,-0.686610460281372,-0.72089147567749\n             ,0.0480021014809608,-0.559525310993195,-0.827422022819519,0.122461646795273,0.908201992511749,0.400215208530426\n             ,0.0557159669697285,0.916767716407776,0.395515710115433,0.0419506318867207,0.986220836639404,0.160026773810387\n             ,0.0643617510795593,0.973314523696899,0.220264464616776,-0.0473092421889305,0.433387726545334,-0.899964928627014\n             ,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.21808297932148,0.578010439872742,-0.786348342895508\n             ,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.020222021266818,-0.390664726495743,-0.920310854911804\n             ,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-0.0463922955095768,-0.412300795316696,-0.909865856170654\n             ,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.000159720322699286,-0.320416629314423,-0.947276711463928\n             ,-0.000357056385837495,-0.611226499080658,-0.791455626487732,0.0480021014809608,-0.559525310993195,-0.827422022819519\n             ,0.00452618766576052,-0.317399501800537,-0.948281109333038,-0.0513396598398685,0.366866230964661,-0.928855955600739\n             ,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,-0.286335736513138,0.0160704739391804,-0.95799458026886\n             ,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.352729320526123,0.114327535033226,0.92871481180191\n             ,-0.492890477180481,0.0867519974708557,0.865755796432495,-0.275664061307907,0.0508917570114136,0.959905922412872\n             ,-0.184806242585182,0.04760567471385,0.981621265411377,-0.307830482721329,-0.686485290527344,0.658770322799683\n             ,0.10191734880209,-0.459647685289383,0.882234036922455,-0.0830294638872147,-0.341880321502686,0.93606835603714\n             ,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.384585797786713,-0.351018995046616,-0.853744387626648\n             ,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.642698705196381,0.173675417900085,-0.746173679828644\n             ,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.0812708511948586,-0.898197948932648,-0.432013303041458\n             ,-0.102202795445919,-0.709632575511932,-0.697119891643524,-0.196655720472336,-0.712397694587708,-0.673658668994904\n             ,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.0440049432218075,-0.995802879333496,-0.0802504494786263\n             ,-0.0812708511948586,-0.898197948932648,-0.432013303041458,-0.180760905146599,-0.893208205699921,-0.411709308624268\n             ,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.102202795445919,-0.709632575511932,-0.697119891643524\n             ,-0.105853073298931,-0.664507687091827,-0.739746332168579,-0.18527527153492,-0.667633235454559,-0.721067905426025\n             ,-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.105853073298931,-0.664507687091827,-0.739746332168579\n             ,-0.105340361595154,-0.682143568992615,-0.723590731620789,-0.374457865953445,-0.757000803947449,-0.535472750663757\n             ,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.10163875669241,0.148283883929253,-0.983708024024963\n             ,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.829341650009155,0.321383953094482,-0.457061111927032\n             ,-0.107317022979259,-0.361611425876617,-0.926131844520569,-0.756865978240967,0.644326865673065,0.109529994428158\n             ,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.73716002702713,0.672038435935974,0.0704230293631554\n             ,-0.0824920982122421,0.586886823177338,-0.805455684661865,-0.854032337665558,0.444255322217941,-0.270676791667938\n             ,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.10163875669241,0.148283883929253,-0.983708024024963\n             ,-0.0440049432218075,-0.995802879333496,-0.0802504494786263,-0.154009714722633,-0.985912680625916,-0.0652465522289276\n             ,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.00957944244146347,-0.984838724136353,0.173207774758339\n             ,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.0638052001595497,0.994221389293671,-0.086329497396946\n             ,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.140676811337471,0.965593755245209,-0.218720734119415\n             ,-0.720985412597656,0.250006407499313,0.646279215812683,-0.990060329437256,-0.0573833771049976,-0.128404289484024\n             ,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.568449974060059,0.526249170303345,0.632397353649139\n             ,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.990060329437256,-0.0573833771049976,-0.128404289484024\n             ,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.730888843536377,-0.408141672611237,-0.547011733055115\n             ,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.529653549194336,0.324454098939896,-0.783707022666931\n             ,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.990060329437256,-0.0573833771049976,-0.128404289484024\n             ,0.708686351776123,0.701542615890503,0.0748436823487282,0.471062362194061,0.869565486907959,0.148176074028015\n             ,0.457759588956833,0.863344848155975,-0.21234855055809,0.646372437477112,0.650956153869629,-0.398068875074387\n             ,0.387304782867432,0.59377658367157,0.705283224582672,0.263491213321686,0.831329226493835,0.48935067653656,0.606493294239044\n             ,0.649602949619293,0.458456039428711,0.662577331066132,0.589804947376251,0.46165069937706,0.350325137376785,0.620450079441071\n             ,0.70165091753006,0.394804865121841,0.885042786598206,0.246634021401405,-0.0894755497574806,0.965718626976013\n             ,0.243683651089668,-0.298087060451508,0.801499605178833,0.518403768539429,-0.298087060451508,0.801499605178833\n             ,0.518403768539429,-0.0615167804062366,0.641514480113983,0.764640331268311,0.321956604719162,0.474833071231842\n             ,0.819071114063263,0.350325137376785,0.620450079441071,0.70165091753006,-0.111158438026905,0.66179496049881,0.74139815568924\n             ,-0.0702482014894485,0.80213338136673,0.592998504638672,0.386715173721313,0.754913926124573,0.529675722122192\n             ,0.375614732503891,0.495400130748749,0.783257484436035,0.0745275393128395,0.431530833244324,0.899014353752136\n             ,0.0708804950118065,0.122446231544018,0.989940881729126,0.551036536693573,0.1087965965271,0.827358484268188,0.550135016441345\n             ,0.461672753095627,0.695851802825928,0.396661043167114,0.909007132053375,0.127929911017418,0.372023165225983\n             ,0.906736969947815,-0.19856184720993,0.457759588956833,0.863344848155975,-0.21234855055809,0.471062362194061\n             ,0.869565486907959,0.148176074028015,0.383488237857819,0.890466749668121,0.244960829615593,0.55004757642746,0.676443994045258\n             ,0.489766448736191,0.337217271327972,0.810059905052185,0.479674339294434,0.389103561639786,0.77647876739502,0.495660334825516\n             ,0.388264060020447,0.528846085071564,0.754700541496277,0.55090343952179,0.499813765287399,0.668349921703339,0.55004757642746\n             ,0.676443994045258,0.489766448736191,0.858800172805786,0.271537780761719,0.434430092573166,0.0572854578495026\n             ,0.523676514625549,0.849988996982574,-0.111158438026905,0.66179496049881,0.74139815568924,0.375614732503891,0.495400130748749\n             ,0.783257484436035,0.257902681827545,0.417416572570801,0.871349334716797,0.0708804950118065,0.122446231544018\n             ,0.989940881729126,0.0692365244030952,0.127935454249382,0.989362835884094,0.510494410991669,0.103201098740101\n             ,0.853665590286255,0.551036536693573,0.1087965965271,0.827358484268188,0.372023165225983,0.906736969947815,-0.19856184720993\n             ,0.282073974609375,0.803686380386353,-0.523948907852173,0.320013791322708,0.764963567256927,-0.558947086334229\n             ,0.457759588956833,0.863344848155975,-0.21234855055809,0.916756093502045,0.0901993364095688,0.389130234718323\n             ,0.705088436603546,-0.598325669765472,-0.380600422620773,0.74578994512558,-0.633161306381226,-0.207133173942566\n             ,0.93030720949173,0.248524934053421,0.269747763872147,0.0692365244030952,0.127935454249382,0.989362835884094\n             ,0.0673762187361717,0.208747074007988,0.975646018981934,0.253994464874268,0.250187575817108,0.934287428855896\n             ,0.510494410991669,0.103201098740101,0.853665590286255,0.895810067653656,0.254065722227097,-0.364657372236252\n             ,0.980262100696564,0.00691105145961046,0.197581350803375,0.971711039543152,-0.0647541359066963,0.227122470736504\n             ,0.842455089092255,-0.136532187461853,-0.521179795265198,0.579905271530151,-0.813046872615814,-0.0516200996935368\n             ,0.54582554101944,-0.560542941093445,-0.622788965702057,0.789066255092621,-0.467570185661316,-0.398437708616257\n             ,0.663097739219666,-0.724811255931854,0.186949267983437,0.835493862628937,0.547001540660858,0.0523386560380459\n             ,0.799383401870728,0.596614599227905,-0.0709738805890083,0.238877683877945,0.949131786823273,-0.205149352550507\n             ,0.285585820674896,0.936043798923492,-0.20557901263237,0.635354340076447,0.0863202884793282,0.767381072044373\n             ,0.747986078262329,-0.084919698536396,0.658259391784668,0.80047994852066,-0.0622782073915005,0.596115171909332\n             ,0.813431859016418,0.0690318197011948,0.577549338340759,0.122040368616581,-0.22475291788578,-0.966743111610413\n             ,0.460681647062302,-0.288388341665268,-0.83940726518631,0.346117079257965,-0.47863432765007,-0.80691522359848\n             ,0.150176227092743,-0.476422011852264,-0.866296231746674,0.39206200838089,-0.444667458534241,-0.805331110954285\n             ,0.583753287792206,-0.402651727199554,-0.705055773258209,0.623417019844055,-0.452671766281128,-0.637526035308838\n             ,0.31203830242157,-0.439545303583145,-0.842277884483337,0.996236562728882,0.0134180961176753,-0.0856306329369545\n             ,0.942644000053406,-0.318175673484802,-0.100928120315075,0.829055666923523,-0.40739643573761,-0.383007615804672\n             ,0.946820557117462,-0.166022479534149,-0.275621712207794,0.92408949136734,-0.175655707716942,0.339416593313217\n             ,0.909235060214996,-0.290925145149231,0.297748446464539,0.915336489677429,-0.234250664710999,0.327545046806335\n             ,0.970865368843079,0.0892849490046501,0.222370475530624,0.132409438490868,0.260098040103912,0.956460535526276\n             ,0.0114754280075431,0.247809365391731,0.968740820884705,0.188986584544182,0.217446967959404,0.957601606845856\n             ,0.186875864863396,0.167301252484322,0.968032896518707,0.000295055127935484,0.143534883856773,0.98964524269104\n             ,0.122565753757954,0.118542328476906,0.98535543680191,0.188986584544182,0.217446967959404,0.957601606845856,0.0114754280075431\n             ,0.247809365391731,0.968740820884705,0.140872359275818,-0.399173051118851,-0.905988872051239,0.31203830242157\n             ,-0.439545303583145,-0.842277884483337,0.272795677185059,-0.496994286775589,-0.823759198188782,0.140843346714973\n             ,-0.431618928909302,-0.890992820262909,0.623417019844055,-0.452671766281128,-0.637526035308838,0.546701967716217\n             ,-0.520302414894104,-0.656050562858582,0.272795677185059,-0.496994286775589,-0.823759198188782,0.31203830242157\n             ,-0.439545303583145,-0.842277884483337,0.942644000053406,-0.318175673484802,-0.100928120315075,0.92242443561554\n             ,-0.371073186397552,-0.106947988271713,0.790781438350677,-0.460972279310226,-0.402702450752258,0.829055666923523\n             ,-0.40739643573761,-0.383007615804672,0.915336489677429,-0.234250664710999,0.327545046806335,0.916560828685761\n             ,-0.24360553920269,0.317131847143173,0.941202819347382,-0.301624983549118,0.152183011174202,0.955660283565521\n             ,-0.256323933601379,0.144953340291977,0.909235060214996,-0.290925145149231,0.297748446464539,0.918301284313202\n             ,-0.218417331576347,0.330176681280136,0.916560828685761,-0.24360553920269,0.317131847143173,0.915336489677429\n             ,-0.234250664710999,0.327545046806335,0.885917663574219,-0.280271381139755,0.369591504335403,0.879492223262787\n             ,-0.245268657803535,0.407844007015228,0.918301284313202,-0.218417331576347,0.330176681280136,0.909235060214996\n             ,-0.290925145149231,0.297748446464539,0.140843346714973,-0.431618928909302,-0.890992820262909,0.272795677185059\n             ,-0.496994286775589,-0.823759198188782,0.267562568187714,-0.479633033275604,-0.835680842399597,0.228939339518547\n             ,-0.370276868343353,-0.900267601013184,0.546701967716217,-0.520302414894104,-0.656050562858582,0.549745261669159\n             ,-0.473052263259888,-0.68847781419754,0.267562568187714,-0.479633033275604,-0.835680842399597,0.272795677185059\n             ,-0.496994286775589,-0.823759198188782,0.92242443561554,-0.371073186397552,-0.106947988271713,0.925438106060028\n             ,-0.353884547948837,-0.135388508439064,0.796822428703308,-0.432056725025177,-0.422375500202179,0.790781438350677\n             ,-0.460972279310226,-0.402702450752258,0.916560828685761,-0.24360553920269,0.317131847143173,0.953391134738922\n             ,-0.158550098538399,0.256724029779434,0.960864663124084,-0.249232992529869,0.120921671390533,0.941202819347382\n             ,-0.301624983549118,0.152183011174202,0.265665024518967,0.160569414496422,0.950599610805511,0.140111669898033\n             ,0.0783234462141991,0.987033009529114,0.185034364461899,0.0477372668683529,0.981571912765503,0.353190511465073\n             ,0.114995338022709,0.928457081317902,0.549745261669159,-0.473052263259888,-0.68847781419754,0.678162038326263\n             ,-0.241175547242165,-0.694212198257446,0.385590463876724,-0.303107500076294,-0.871461868286133,0.267562568187714\n             ,-0.479633033275604,-0.835680842399597,0.925438106060028,-0.353884547948837,-0.135388508439064,0.962334990501404\n             ,-0.205602362751961,-0.177873581647873,0.888094663619995,-0.231564551591873,-0.39707151055336,0.796822428703308\n             ,-0.432056725025177,-0.422375500202179,0.960864663124084,-0.249232992529869,0.120921671390533,0.953391134738922\n             ,-0.158550098538399,0.256724029779434,0.983779430389404,0.00275212083943188,0.179361149668694,0.993288457393646\n             ,-0.102479107677937,0.0536287166178226,0.938150525093079,-0.0836314186453819,0.335975229740143,0.946241497993469\n             ,0.0790377557277679,0.313655972480774,0.983779430389404,0.00275212083943188,0.179361149668694,0.953391134738922\n             ,-0.158550098538399,0.256724029779434,0.91181892156601,-0.103688038885593,0.397284656763077,0.86522775888443\n             ,0.0834222286939621,0.494390219449997,0.946241497993469,0.0790377557277679,0.313655972480774,0.938150525093079\n             ,-0.0836314186453819,0.335975229740143,0.823973476886749,-0.140763908624649,0.548865377902985,0.709406793117523\n             ,0.0714843049645424,0.701164722442627,0.86522775888443,0.0834222286939621,0.494390219449997,0.91181892156601\n             ,-0.103688038885593,0.397284656763077,0.962334990501404,-0.205602362751961,-0.177873581647873,0.939977943897247\n             ,-0.283478707075119,-0.189950734376907,0.89782452583313,-0.295981734991074,-0.32604593038559,0.888094663619995\n             ,-0.231564551591873,-0.39707151055336,0.993288457393646,-0.102479107677937,0.0536287166178226,0.983779430389404\n             ,0.00275212083943188,0.179361149668694,0.984757125377655,-0.122858062386513,0.123123273253441,0.977083265781403\n             ,-0.21279039978981,-0.00533624598756433,0.946241497993469,0.0790377557277679,0.313655972480774,0.954775273799896\n             ,-0.0549841597676277,0.292200028896332,0.984757125377655,-0.122858062386513,0.123123273253441,0.983779430389404\n             ,0.00275212083943188,0.179361149668694,0.86522775888443,0.0834222286939621,0.494390219449997,0.833409249782562\n             ,-0.0707181841135025,0.54811304807663,0.954775273799896,-0.0549841597676277,0.292200028896332,0.946241497993469\n             ,0.0790377557277679,0.313655972480774,0.709406793117523,0.0714843049645424,0.701164722442627,0.527580142021179\n             ,-0.0869907140731812,0.845039546489716,0.833409249782562,-0.0707181841135025,0.54811304807663,0.86522775888443\n             ,0.0834222286939621,0.494390219449997,0.661977589130402,-0.708897471427917,-0.243413314223289,0.746676325798035\n             ,-0.643010795116425,-0.17032790184021,0.6322380900383,-0.767571449279785,-0.10539997369051,0.29490727186203,-0.85530948638916\n             ,-0.425999224185944,0.819233179092407,-0.572073757648468,-0.0398566573858261,0.859511733055115,-0.505731165409088\n             ,0.0739971473813057,0.746179103851318,-0.664099156856537,0.0467877462506294,0.6322380900383,-0.767571449279785\n             ,-0.10539997369051,0.859511733055115,-0.505731165409088,0.0739971473813057,0.835695207118988,-0.485575556755066\n             ,0.256573379039764,0.711589336395264,-0.66451358795166,0.228171736001968,0.746179103851318,-0.664099156856537\n             ,0.0467877462506294,0.680691421031952,-0.552797436714172,0.480701744556427,0.550213515758514,-0.731853306293488\n             ,0.402064383029938,0.711589336395264,-0.66451358795166,0.228171736001968,0.835695207118988,-0.485575556755066\n             ,0.256573379039764,0.544267177581787,0.038809709250927,0.838013768196106,0.729275226593018,-0.11221731454134\n             ,0.674955487251282,0.747986078262329,-0.084919698536396,0.658259391784668,0.635354340076447,0.0863202884793282\n             ,0.767381072044373,0.385354042053223,0.042363528162241,0.921795845031738,0.610790312290192,-0.062268540263176\n             ,0.789340078830719,0.729275226593018,-0.11221731454134,0.674955487251282,0.544267177581787,0.038809709250927\n             ,0.838013768196106,0.603610038757324,0.179113283753395,0.776899814605713,0.635354340076447,0.0863202884793282\n             ,0.767381072044373,0.813431859016418,0.0690318197011948,0.577549338340759,0.77562689781189,0.195846498012543\n             ,0.60003924369812,0.428932994604111,0.13583180308342,0.893065631389618,0.544267177581787,0.038809709250927,0.838013768196106\n             ,0.635354340076447,0.0863202884793282,0.767381072044373,0.603610038757324,0.179113283753395,0.776899814605713\n             ,0.255159199237823,0.10554338991642,0.961121380329132,0.385354042053223,0.042363528162241,0.921795845031738,0.544267177581787\n             ,0.038809709250927,0.838013768196106,0.428932994604111,0.13583180308342,0.893065631389618,0.353190511465073,0.114995338022709\n             ,0.928457081317902,0.493080407381058,0.0869515836238861,0.865627586841583,0.610790312290192,-0.062268540263176\n             ,0.789340078830719,0.385354042053223,0.042363528162241,0.921795845031738,0.512751221656799,0.314961016178131\n             ,0.798677444458008,0.603610038757324,0.179113283753395,0.776899814605713,0.77562689781189,0.195846498012543,0.60003924369812\n             ,0.704553008079529,0.389835178852081,0.592987060546875,0.186875864863396,0.167301252484322,0.968032896518707\n             ,0.255159199237823,0.10554338991642,0.961121380329132,0.428932994604111,0.13583180308342,0.893065631389618,0.352489024400711\n             ,0.249785035848618,0.901864171028137,0.603610038757324,0.179113283753395,0.776899814605713,0.512751221656799\n             ,0.314961016178131,0.798677444458008,0.352489024400711,0.249785035848618,0.901864171028137,0.428932994604111\n             ,0.13583180308342,0.893065631389618,0.265665024518967,0.160569414496422,0.950599610805511,0.353190511465073,0.114995338022709\n             ,0.928457081317902,0.385354042053223,0.042363528162241,0.921795845031738,0.255159199237823,0.10554338991642,0.961121380329132\n             ,0.188986584544182,0.217446967959404,0.957601606845856,0.265665024518967,0.160569414496422,0.950599610805511\n             ,0.255159199237823,0.10554338991642,0.961121380329132,0.186875864863396,0.167301252484322,0.968032896518707,0.448167592287064\n             ,0.331256568431854,0.830310106277466,0.287839502096176,0.391564905643463,0.873971045017242,0.238586917519569\n             ,0.344399750232697,0.908000588417053,0.352489024400711,0.249785035848618,0.901864171028137,0.132409438490868\n             ,0.260098040103912,0.956460535526276,0.186875864863396,0.167301252484322,0.968032896518707,0.352489024400711\n             ,0.249785035848618,0.901864171028137,0.238586917519569,0.344399750232697,0.908000588417053,0.545623481273651\n             ,0.394130259752274,0.739564955234528,0.512751221656799,0.314961016178131,0.798677444458008,0.704553008079529\n             ,0.389835178852081,0.592987060546875,0.63835346698761,0.527818858623505,0.560278594493866,0.540044844150543,0.824666082859039\n             ,-0.168158859014511,0.491935312747955,0.72918576002121,-0.475697129964828,0.282073974609375,0.803686380386353\n             ,-0.523948907852173,0.372023165225983,0.906736969947815,-0.19856184720993,0.647948265075684,-0.685174643993378\n             ,-0.332714289426804,0.812437415122986,-0.0575567446649075,0.580200552940369,0.4433753490448,0.161547407507896\n             ,0.881657958030701,0.254503726959229,-0.798789858818054,-0.545126259326935,-0.122356586158276,0.987737119197845\n             ,-0.0969751328229904,0.393054485321045,0.919416308403015,-0.0134849762544036,0.259856075048447,0.961204409599304\n             ,0.0925252288579941,0.0862562954425812,0.984675407409668,-0.151572123169899,0.550135016441345,0.461672753095627\n             ,0.695851802825928,0.551036536693573,0.1087965965271,0.827358484268188,0.736154615879059,0.240016058087349,0.632825970649719\n             ,0.750702619552612,0.512931108474731,0.416349858045578,0.551036536693573,0.1087965965271,0.827358484268188,0.510494410991669\n             ,0.103201098740101,0.853665590286255,0.63226306438446,0.224956437945366,0.741375803947449,0.736154615879059,0.240016058087349\n             ,0.632825970649719,0.140111669898033,0.0783234462141991,0.987033009529114,0.265665024518967,0.160569414496422\n             ,0.950599610805511,0.188986584544182,0.217446967959404,0.957601606845856,0.122565753757954,0.118542328476906\n             ,0.98535543680191,0.275597482919693,0.0508149787783623,0.95992910861969,0.527580142021179,-0.0869907140731812\n             ,0.845039546489716,0.709406793117523,0.0714843049645424,0.701164722442627,0.493080407381058,0.0869515836238861\n             ,0.865627586841583,-0.266191899776459,0.70389860868454,-0.658535182476044,0.266888707876205,0.958940505981445\n             ,0.0959352776408196,0.393054485321045,0.919416308403015,-0.0134849762544036,-0.122356586158276,0.987737119197845\n             ,-0.0969751328229904,0.0462776906788349,0.971960961818695,0.23054338991642,-0.0405596829950809,0.531582415103912\n             ,-0.846034944057465,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.318083673715591,0.947685122489929\n             ,-0.0267524290829897,-0.253998309373856,-0.212244898080826,0.943629682064056,-0.141722351312637,-0.25363889336586\n             ,0.956860542297363,-0.27082097530365,-0.434562891721725,0.858959317207336,-0.444781541824341,-0.346720337867737\n             ,0.825805306434631,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.41981428861618,-0.320506066083908\n             ,0.849135935306549,-0.355942904949188,-0.323049247264862,0.876894414424896,-0.150304853916168,-0.209269061684608\n             ,0.966237485408783,-0.150304853916168,-0.209269061684608,0.966237485408783,-0.355942904949188,-0.323049247264862\n             ,0.876894414424896,-0.101489536464214,-0.459648072719574,0.882283091545105,0.0832947567105293,-0.342013299465179\n             ,0.935996174812317,0.578356921672821,-0.429673582315445,-0.693457901477814,0.37424498796463,0.138061463832855\n             ,-0.91699492931366,0.132010728120804,0.613032221794128,-0.778950989246368,0.526131212711334,0.493667006492615\n             ,-0.692444086074829,0.663097739219666,-0.724811255931854,0.186949267983437,0.789066255092621,-0.467570185661316\n             ,-0.398437708616257,0.958566963672638,0.124525241553783,-0.256208688020706,0.835218191146851,-0.360097140073776\n             ,0.415620774030685,-0.141722351312637,-0.25363889336586,0.956860542297363,0.000238662076299079,-0.279259294271469\n             ,0.96021568775177,0.000465182994958013,-0.480507552623749,0.876990437507629,-0.27082097530365,-0.434562891721725\n             ,0.858959317207336,0.546701967716217,-0.520302414894104,-0.656050562858582,0.623417019844055,-0.452671766281128\n             ,-0.637526035308838,0.829055666923523,-0.40739643573761,-0.383007615804672,0.790781438350677,-0.460972279310226\n             ,-0.402702450752258,0.549745261669159,-0.473052263259888,-0.68847781419754,0.546701967716217,-0.520302414894104\n             ,-0.656050562858582,0.790781438350677,-0.460972279310226,-0.402702450752258,0.796822428703308,-0.432056725025177\n             ,-0.422375500202179,0.678162038326263,-0.241175547242165,-0.694212198257446,0.549745261669159,-0.473052263259888\n             ,-0.68847781419754,0.796822428703308,-0.432056725025177,-0.422375500202179,0.888094663619995,-0.231564551591873\n             ,-0.39707151055336,0.672621726989746,-0.282224327325821,-0.684053659439087,0.678162038326263,-0.241175547242165\n             ,-0.694212198257446,0.888094663619995,-0.231564551591873,-0.39707151055336,0.89782452583313,-0.295981734991074\n             ,-0.32604593038559,-0.00762177817523479,0.899371445178986,0.437118947505951,0.0780242905020714,0.996866285800934\n             ,0.0130291758105159,0.78013014793396,0.624480009078979,-0.0377050787210464,0.849660098552704,0.510039925575256\n             ,0.133928999304771,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.945589601993561,0.313947737216949\n             ,0.0854233801364899,0.93030720949173,0.248524934053421,0.269747763872147,0.74578994512558,-0.633161306381226\n             ,-0.207133173942566,0.238877683877945,0.949131786823273,-0.205149352550507,0.799383401870728,0.596614599227905\n             ,-0.0709738805890083,0.78013014793396,0.624480009078979,-0.0377050787210464,0.0780242905020714,0.996866285800934\n             ,0.0130291758105159,0.986967325210571,0.15194895863533,0.0529817342758179,0.955660283565521,-0.256323933601379\n             ,0.144953340291977,0.942644000053406,-0.318175673484802,-0.100928120315075,0.996236562728882,0.0134180961176753\n             ,-0.0856306329369545,0.92242443561554,-0.371073186397552,-0.106947988271713,0.942644000053406,-0.318175673484802\n             ,-0.100928120315075,0.955660283565521,-0.256323933601379,0.144953340291977,0.941202819347382,-0.301624983549118\n             ,0.152183011174202,0.925438106060028,-0.353884547948837,-0.135388508439064,0.92242443561554,-0.371073186397552\n             ,-0.106947988271713,0.941202819347382,-0.301624983549118,0.152183011174202,0.960864663124084,-0.249232992529869\n             ,0.120921671390533,0.962334990501404,-0.205602362751961,-0.177873581647873,0.925438106060028,-0.353884547948837\n             ,-0.135388508439064,0.960864663124084,-0.249232992529869,0.120921671390533,0.993288457393646,-0.102479107677937\n             ,0.0536287166178226,0.939977943897247,-0.283478707075119,-0.189950734376907,0.962334990501404,-0.205602362751961\n             ,-0.177873581647873,0.993288457393646,-0.102479107677937,0.0536287166178226,0.977083265781403,-0.21279039978981\n             ,-0.00533624598756433,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.0405596829950809,0.531582415103912\n             ,-0.846034944057465,-0.0404882803559303,0.532536089420319,-0.845438301563263,-0.266191899776459,0.70389860868454\n             ,-0.658535182476044,-0.318083673715591,0.947685122489929,-0.0267524290829897,-0.389843672513962,0.518116474151611\n             ,-0.761299669742584,-0.266191899776459,0.70389860868454,-0.658535182476044,-0.122356586158276,0.987737119197845\n             ,-0.0969751328229904,0.0646723359823227,-0.342740118503571,-0.937201499938965,-0.00791200343519449,-0.3136927485466\n             ,-0.949491560459137,0.0445788577198982,-0.252718240022659,-0.966512382030487,0.139385372400284,-0.293043553829193\n             ,-0.945884346961975,0.13675257563591,-0.219145968556404,-0.966060936450958,0.0882615447044373,-0.199013933539391\n             ,-0.976014018058777,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.0786453634500504,-0.439450114965439\n             ,-0.894817590713501,0.196265131235123,0.534957885742188,-0.821766436100006,0.163574278354645,0.575437486171722\n             ,-0.801320910453796,0.37424498796463,0.138061463832855,-0.91699492931366,0.142098233103752,0.253012806177139\n             ,-0.956970512866974,0.196265131235123,0.534957885742188,-0.821766436100006,0.318493723869324,0.728740870952606\n             ,-0.606216490268707,0.320013791322708,0.764963567256927,-0.558947086334229,0.163574278354645,0.575437486171722\n             ,-0.801320910453796,-0.0101916557177901,0.912391781806946,0.409191101789474,0.179319217801094,0.922120809555054\n             ,-0.342837929725647,0.39146089553833,0.900987803936005,-0.187027588486671,-0.112045332789421,0.883429408073425\n             ,0.45497065782547,0.558892965316772,0.631695210933685,-0.537214875221252,0.589160740375519,0.293493062257767\n             ,-0.75282895565033,0.220478102564812,0.225269511342049,-0.949022173881531,0.230260863900185,0.590617835521698\n             ,-0.773401916027069,0.806149482727051,-0.532726168632507,0.257538169622421,0.968841314315796,0.185883238911629\n             ,-0.163688346743584,0.964999854564667,0.254521876573563,-0.0631974339485168,0.775248348712921,-0.624625861644745\n             ,0.0939816311001778,-0.0615167804062366,0.641514480113983,0.764640331268311,0.0572854578495026,0.523676514625549\n             ,0.849988996982574,0.287839502096176,0.391564905643463,0.873971045017242,0.321956604719162,0.474833071231842\n             ,0.819071114063263,0.0454900041222572,0.2624471783638,0.963873505592346,0.0114754280075431,0.247809365391731\n             ,0.968740820884705,0.132409438490868,0.260098040103912,0.956460535526276,0.253994464874268,0.250187575817108\n             ,0.934287428855896,-0.0074951434507966,-0.537373244762421,-0.843311250209808,0.0173844322562218,-0.524197161197662\n             ,-0.851419508457184,-0.0738197043538094,-0.58150452375412,-0.810187101364136,-0.117905855178833,-0.615884125232697\n             ,-0.778964042663574,0.29490727186203,-0.85530948638916,-0.425999224185944,-0.0854567661881447,-0.590025365352631\n             ,-0.802849411964417,0.0173844322562218,-0.524197161197662,-0.851419508457184,0.375436156988144,-0.682113528251648\n             ,-0.627510011196136,0.303897142410278,-0.58835905790329,-0.749319791793823,0.493177682161331,0.0824330747127533\n             ,-0.866014182567596,0.67315399646759,0.330984532833099,-0.661296367645264,0.591645836830139,-0.392304599285126\n             ,-0.7043097615242,0.471546560525894,0.148768365383148,-0.86920177936554,0.122040368616581,-0.22475291788578,-0.966743111610413\n             ,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.125168636441231,-0.0242336299270391,-0.991839468479156\n             ,0.150176227092743,-0.476422011852264,-0.866296231746674,0.0879448130726814,-0.45889338850975,-0.884128153324127\n             ,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.122040368616581,-0.22475291788578,-0.966743111610413\n             ,-0.0924276784062386,-0.684463918209076,-0.723164081573486,-0.0494538806378841,-0.556213021278381,-0.829566955566406\n             ,-0.0074951434507966,-0.537373244762421,-0.843311250209808,-0.117905855178833,-0.615884125232697,-0.778964042663574\n             ,0.678162038326263,-0.241175547242165,-0.694212198257446,0.672621726989746,-0.282224327325821,-0.684053659439087\n             ,0.332537442445755,-0.288520336151123,-0.897872388362885,0.385590463876724,-0.303107500076294,-0.871461868286133\n             ,0.385590463876724,-0.303107500076294,-0.871461868286133,0.332537442445755,-0.288520336151123,-0.897872388362885\n             ,0.216808795928955,-0.349548786878586,-0.911487579345703,0.228939339518547,-0.370276868343353,-0.900267601013184\n             ,0.216808795928955,-0.349548786878586,-0.911487579345703,0.0646723359823227,-0.342740118503571,-0.937201499938965\n             ,0.139385372400284,-0.293043553829193,-0.945884346961975,0.228939339518547,-0.370276868343353,-0.900267601013184\n             ,0.39206200838089,-0.444667458534241,-0.805331110954285,0.174190670251846,-0.475461959838867,-0.862318694591522\n             ,0.150176227092743,-0.476422011852264,-0.866296231746674,0.346117079257965,-0.47863432765007,-0.80691522359848\n             ,0.0786453634500504,-0.439450114965439,-0.894817590713501,0.0879448130726814,-0.45889338850975,-0.884128153324127\n             ,0.113550499081612,-0.486260622739792,-0.866404592990875,0.106468603014946,-0.443950653076172,-0.889703452587128\n             ,-0.373825579881668,0.746838629245758,0.549987733364105,0.617900848388672,0.738122165203094,0.270876914262772\n             ,0.554794549942017,0.63729065656662,0.534849166870117,-0.39384588599205,0.733602285385132,0.553816795349121,-0.39384588599205\n             ,0.733602285385132,0.553816795349121,0.554794549942017,0.63729065656662,0.534849166870117,0.347248166799545,0.561754763126373\n             ,0.75089967250824,-0.460472017526627,0.662255048751831,0.591086983680725,0.347248166799545,0.561754763126373\n             ,0.75089967250824,0.327279478311539,0.828797340393066,0.453853607177734,-0.619935512542725,0.784334897994995\n             ,0.0223318859934807,-0.460472017526627,0.662255048751831,0.591086983680725,0.938301980495453,0.0685238614678383\n             ,0.338959902524948,0.350325137376785,0.620450079441071,0.70165091753006,0.321956604719162,0.474833071231842,0.819071114063263\n             ,0.671115279197693,0.284787148237228,0.684471070766449,0.394804865121841,0.885042786598206,0.246634021401405\n             ,0.350325137376785,0.620450079441071,0.70165091753006,0.938301980495453,0.0685238614678383,0.338959902524948\n             ,0.791727185249329,0.579225897789001,0.194075778126717,0.387304782867432,0.59377658367157,0.705283224582672,0.223836988210678\n             ,0.893291056156158,0.389779537916183,-0.358905464410782,0.931329369544983,0.0617449507117271,0.263491213321686\n             ,0.831329226493835,0.48935067653656,0.565629243850708,0.815166532993317,0.124768301844597,0.540044844150543,0.824666082859039\n             ,-0.168158859014511,0.372023165225983,0.906736969947815,-0.19856184720993,0.396661043167114,0.909007132053375\n             ,0.127929911017418,0.55090343952179,0.499813765287399,0.668349921703339,0.558709442615509,0.701101422309875,0.443058162927628\n             ,0.337217271327972,0.810059905052185,0.479674339294434,0.55004757642746,0.676443994045258,0.489766448736191,0.253994464874268\n             ,0.250187575817108,0.934287428855896,0.132409438490868,0.260098040103912,0.956460535526276,0.238586917519569\n             ,0.344399750232697,0.908000588417053,0.257902681827545,0.417416572570801,0.871349334716797,0.287839502096176\n             ,0.391564905643463,0.873971045017242,0.448167592287064,0.331256568431854,0.830310106277466,0.671115279197693\n             ,0.284787148237228,0.684471070766449,0.321956604719162,0.474833071231842,0.819071114063263,0.238586917519569\n             ,0.344399750232697,0.908000588417053,0.287839502096176,0.391564905643463,0.873971045017242,0.0572854578495026\n             ,0.523676514625549,0.849988996982574,0.257902681827545,0.417416572570801,0.871349334716797,0.671115279197693\n             ,0.284787148237228,0.684471070766449,0.545623481273651,0.394130259752274,0.739564955234528,0.665781199932098\n             ,0.528658747673035,0.526550352573395,0.947060525417328,0.264708548784256,0.181674882769585,-0.0702482014894485\n             ,0.80213338136673,0.592998504638672,-0.111158438026905,0.66179496049881,0.74139815568924,-0.406122446060181,0.842904448509216\n             ,0.352954238653183,-0.243022814393044,0.95173841714859,0.187440201640129,0.375614732503891,0.495400130748749\n             ,0.783257484436035,0.386715173721313,0.754913926124573,0.529675722122192,0.750702619552612,0.512931108474731\n             ,0.416349858045578,0.736154615879059,0.240016058087349,0.632825970649719,0.63226306438446,0.224956437945366,0.741375803947449\n             ,0.257902681827545,0.417416572570801,0.871349334716797,0.375614732503891,0.495400130748749,0.783257484436035\n             ,0.736154615879059,0.240016058087349,0.632825970649719,0.39146089553833,0.900987803936005,-0.187027588486671\n             ,0.53197318315506,0.845954120159149,0.0369608402252197,-0.258110016584396,0.811675071716309,0.523987472057343\n             ,-0.112045332789421,0.883429408073425,0.45497065782547,0.595662355422974,0.236076727509499,-0.767759144306183\n             ,0.460681647062302,-0.288388341665268,-0.83940726518631,0.122040368616581,-0.22475291788578,-0.966743111610413\n             ,0.471546560525894,0.148768365383148,-0.86920177936554,0.493177682161331,0.0824330747127533,-0.866014182567596\n             ,0.527646243572235,-0.330830633640289,-0.782394111156464,0.460681647062302,-0.288388341665268,-0.83940726518631\n             ,0.595662355422974,0.236076727509499,-0.767759144306183,0.737872421741486,0.632259011268616,0.236204952001572\n             ,0.554449737071991,0.577977955341339,0.598771214485168,0.837648034095764,0.514832735061646,-0.182463780045509\n             ,0.652710020542145,0.543907403945923,-0.527384459972382,0.125168636441231,-0.0242336299270391,-0.991839468479156\n             ,0.142098233103752,0.253012806177139,-0.956970512866974,0.37424498796463,0.138061463832855,-0.91699492931366\n             ,0.471546560525894,0.148768365383148,-0.86920177936554,0.591645836830139,-0.392304599285126,-0.7043097615242\n             ,0.67315399646759,0.330984532833099,-0.661296367645264,0.471546560525894,0.148768365383148,-0.86920177936554\n             ,0.37424498796463,0.138061463832855,-0.91699492931366,0.67315399646759,0.330984532833099,-0.661296367645264,0.493177682161331\n             ,0.0824330747127533,-0.866014182567596,0.595662355422974,0.236076727509499,-0.767759144306183,0.471546560525894\n             ,0.148768365383148,-0.86920177936554,0.591645836830139,-0.392304599285126,-0.7043097615242,0.37424498796463,0.138061463832855\n             ,-0.91699492931366,0.578356921672821,-0.429673582315445,-0.693457901477814,0.303897142410278,-0.58835905790329\n             ,-0.749319791793823,0.708686351776123,0.701542615890503,0.0748436823487282,0.780383825302124,0.614288032054901\n             ,0.116838775575161,0.662577331066132,0.589804947376251,0.46165069937706,0.606493294239044,0.649602949619293,0.458456039428711\n             ,0.263491213321686,0.831329226493835,0.48935067653656,0.383488237857819,0.890466749668121,0.244960829615593,0.389103561639786\n             ,0.77647876739502,0.495660334825516,0.606493294239044,0.649602949619293,0.458456039428711,0.589160740375519,0.293493062257767\n             ,-0.75282895565033,0.558892965316772,0.631695210933685,-0.537214875221252,0.74043333530426,0.634463846683502\n             ,-0.221842527389526,0.646372437477112,0.650956153869629,-0.398068875074387,0.181706041097641,0.450920969247818\n             ,-0.873872518539429,0.220478102564812,0.225269511342049,-0.949022173881531,0.589160740375519,0.293493062257767\n             ,-0.75282895565033,0.424405604600906,0.592946588993073,-0.684320271015167,0.0537682510912418,-0.324202865362167\n             ,0.944458305835724,-0.249922096729279,-0.324745059013367,0.912183940410614,-0.175815492868423,0.3834168612957\n             ,0.90668648481369,0.0744736939668655,0.385000914335251,0.919906497001648,-0.249922096729279,-0.324745059013367\n             ,0.912183940410614,-0.629638135433197,-0.332909524440765,0.701945245265961,-0.474767446517944,0.386590272188187\n             ,0.790660321712494,-0.175815492868423,0.3834168612957,0.90668648481369,-0.702542901039124,0.392548084259033,0.593581914901733\n             ,-0.474767446517944,0.386590272188187,0.790660321712494,-0.629638135433197,-0.332909524440765,0.701945245265961\n             ,-0.881015419960022,-0.306221485137939,0.360610902309418,0.258142352104187,0.50887656211853,-0.821222960948944\n             ,0.162849396467209,0.526230156421661,-0.834602832794189,0.145952269434929,0.566527962684631,-0.811014175415039\n             ,0.266342312097549,0.6069176197052,-0.748807609081268,0.263788342475891,0.299328684806824,-0.916961312294006\n             ,0.19240340590477,0.354867070913315,-0.914904534816742,0.162849396467209,0.526230156421661,-0.834602832794189\n             ,0.258142352104187,0.50887656211853,-0.821222960948944,0.0690941736102104,-0.258630573749542,-0.963502049446106\n             ,0.155474439263344,0.00156243739183992,-0.987838685512543,0.235058307647705,0.00269885058514774,-0.971977531909943\n             ,0.13675257563591,-0.219145968556404,-0.966060936450958,0.0786453634500504,-0.439450114965439,-0.894817590713501\n             ,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0690941736102104,-0.258630573749542,-0.963502049446106\n             ,0.13675257563591,-0.219145968556404,-0.966060936450958,0.139385372400284,-0.293043553829193,-0.945884346961975\n             ,0.0445788577198982,-0.252718240022659,-0.966512382030487,0.0458064116537571,-0.413144141435623,-0.909512877464294\n             ,0.106468603014946,-0.443950653076172,-0.889703452587128,0.142098233103752,0.253012806177139,-0.956970512866974\n             ,0.263788342475891,0.299328684806824,-0.916961312294006,0.258142352104187,0.50887656211853,-0.821222960948944\n             ,0.196265131235123,0.534957885742188,-0.821766436100006,0.235058307647705,0.00269885058514774,-0.971977531909943\n             ,0.263788342475891,0.299328684806824,-0.916961312294006,0.142098233103752,0.253012806177139,-0.956970512866974\n             ,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.13675257563591,-0.219145968556404,-0.966060936450958\n             ,0.235058307647705,0.00269885058514774,-0.971977531909943,0.125168636441231,-0.0242336299270391,-0.991839468479156\n             ,0.0882615447044373,-0.199013933539391,-0.976014018058777,-0.0387927554547787,0.555053651332855,-0.830909490585327\n             ,0.0419506318867207,0.986220836639404,0.160026773810387,0.0270950496196747,0.974490761756897,0.222785964608192\n             ,0.230260863900185,0.590617835521698,-0.773401916027069,-0.00269555998966098,0.944226384162903,0.329286128282547\n             ,0.558892965316772,0.631695210933685,-0.537214875221252,0.230260863900185,0.590617835521698,-0.773401916027069\n             ,0.0270950496196747,0.974490761756897,0.222785964608192,-0.0771232843399048,0.899696409702301,0.42964905500412\n             ,0.74043333530426,0.634463846683502,-0.221842527389526,0.558892965316772,0.631695210933685,-0.537214875221252\n             ,-0.00269555998966098,0.944226384162903,0.329286128282547,0.780383825302124,0.614288032054901,0.116838775575161\n             ,-0.166241437196732,0.836733281612396,0.521767377853394,-0.227350860834122,0.778867661952972,0.584531247615814\n             ,0.662577331066132,0.589804947376251,0.46165069937706,0.662577331066132,0.589804947376251,0.46165069937706,-0.227350860834122\n             ,0.778867661952972,0.584531247615814,-0.422318667173386,0.684858381748199,0.593814790248871,0.387304782867432\n             ,0.59377658367157,0.705283224582672,0.387304782867432,0.59377658367157,0.705283224582672,-0.422318667173386,0.684858381748199\n             ,0.593814790248871,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.223836988210678,0.893291056156158\n             ,0.389779537916183,0.457618981599808,0.813868880271912,0.358053594827652,0.37424173951149,0.91025847196579,0.17712339758873\n             ,-0.702542901039124,0.392548084259033,0.593581914901733,-0.800732433795929,0.427052974700928,0.420063436031342\n             ,0.420635163784027,0.68705153465271,0.592474699020386,-0.826933801174164,0.485819309949875,0.283125460147858\n             ,-0.870735168457031,0.449585229158401,0.199231997132301,0.196103185415268,0.611983716487885,0.766171991825104\n             ,-0.870735168457031,0.449585229158401,0.199231997132301,-0.903985500335693,0.390926718711853,0.173165991902351\n             ,0.0825407654047012,0.994074046611786,0.0707375407218933,0.196103185415268,0.611983716487885,0.766171991825104\n             ,0.0218184478580952,0.990070343017578,-0.13886933028698,0.0744736939668655,0.385000914335251,0.919906497001648\n             ,-0.175815492868423,0.3834168612957,0.90668648481369,0.122364826500416,0.988039612770081,-0.0938328057527542\n             ,0.122364826500416,0.988039612770081,-0.0938328057527542,-0.175815492868423,0.3834168612957,0.90668648481369\n             ,-0.474767446517944,0.386590272188187,0.790660321712494,0.261956453323364,0.964480102062225,0.0340141989290714\n             ,0.261956453323364,0.964480102062225,0.0340141989290714,-0.474767446517944,0.386590272188187,0.790660321712494\n             ,-0.702542901039124,0.392548084259033,0.593581914901733,0.37424173951149,0.91025847196579,0.17712339758873,0.617900848388672\n             ,0.738122165203094,0.270876914262772,0.457618981599808,0.813868880271912,0.358053594827652,0.420635163784027\n             ,0.68705153465271,0.592474699020386,0.554794549942017,0.63729065656662,0.534849166870117,0.39146089553833,0.900987803936005\n             ,-0.187027588486671,0.261956453323364,0.964480102062225,0.0340141989290714,0.37424173951149,0.91025847196579\n             ,0.17712339758873,0.53197318315506,0.845954120159149,0.0369608402252197,0.179319217801094,0.922120809555054,-0.342837929725647\n             ,0.122364826500416,0.988039612770081,-0.0938328057527542,0.261956453323364,0.964480102062225,0.0340141989290714\n             ,0.39146089553833,0.900987803936005,-0.187027588486671,0.00435609184205532,0.929633140563965,-0.368460655212402\n             ,0.0218184478580952,0.990070343017578,-0.13886933028698,0.122364826500416,0.988039612770081,-0.0938328057527542\n             ,0.179319217801094,0.922120809555054,-0.342837929725647,-0.0101916557177901,0.912391781806946,0.409191101789474\n             ,-0.112045332789421,0.883429408073425,0.45497065782547,-0.00269555998966098,0.944226384162903,0.329286128282547\n             ,0.0270950496196747,0.974490761756897,0.222785964608192,-0.112045332789421,0.883429408073425,0.45497065782547\n             ,-0.258110016584396,0.811675071716309,0.523987472057343,-0.0771232843399048,0.899696409702301,0.42964905500412\n             ,-0.00269555998966098,0.944226384162903,0.329286128282547,-0.373825579881668,0.746838629245758,0.549987733364105\n             ,-0.166241437196732,0.836733281612396,0.521767377853394,-0.0771232843399048,0.899696409702301,0.42964905500412\n             ,-0.258110016584396,0.811675071716309,0.523987472057343,-0.166241437196732,0.836733281612396,0.521767377853394\n             ,-0.373825579881668,0.746838629245758,0.549987733364105,-0.39384588599205,0.733602285385132,0.553816795349121\n             ,-0.227350860834122,0.778867661952972,0.584531247615814,-0.39384588599205,0.733602285385132,0.553816795349121\n             ,-0.460472017526627,0.662255048751831,0.591086983680725,-0.422318667173386,0.684858381748199,0.593814790248871\n             ,-0.227350860834122,0.778867661952972,0.584531247615814,-0.460472017526627,0.662255048751831,0.591086983680725\n             ,-0.619935512542725,0.784334897994995,0.0223318859934807,-0.20431387424469,0.977353155612946,-0.0551062189042568\n             ,-0.422318667173386,0.684858381748199,0.593814790248871,0.327279478311539,0.828797340393066,0.453853607177734\n             ,0.0825407654047012,0.994074046611786,0.0707375407218933,-0.20431387424469,0.977353155612946,-0.0551062189042568\n             ,-0.619935512542725,0.784334897994995,0.0223318859934807,0.347248166799545,0.561754763126373,0.75089967250824\n             ,0.196103185415268,0.611983716487885,0.766171991825104,0.0825407654047012,0.994074046611786,0.0707375407218933\n             ,0.327279478311539,0.828797340393066,0.453853607177734,0.554794549942017,0.63729065656662,0.534849166870117,0.420635163784027\n             ,0.68705153465271,0.592474699020386,0.196103185415268,0.611983716487885,0.766171991825104,0.347248166799545,0.561754763126373\n             ,0.75089967250824,-0.800732433795929,0.427052974700928,0.420063436031342,-0.702542901039124,0.392548084259033\n             ,0.593581914901733,-0.881015419960022,-0.306221485137939,0.360610902309418,-0.971851825714111,-0.229726418852806\n             ,0.0522474460303783,-0.960497379302979,-0.120281100273132,-0.250952750444412,-0.905991911888123,-0.0693745836615562\n             ,-0.417571365833282,-0.870735168457031,0.449585229158401,0.199231997132301,-0.826933801174164,0.485819309949875\n             ,0.283125460147858,-0.905991911888123,-0.0693745836615562,-0.417571365833282,-0.895736455917358,-0.0740359798073769\n             ,-0.438377469778061,-0.903985500335693,0.390926718711853,0.173165991902351,-0.870735168457031,0.449585229158401\n             ,0.199231997132301,0.430973529815674,0.546808898448944,0.717817425727844,0.42970210313797,0.768015503883362,0.474877148866653\n             ,-0.339239358901978,0.848914384841919,0.405291259288788,-0.365288615226746,0.685251891613007,0.630074620246887\n             ,-0.349254995584488,0.931400954723358,0.102533832192421,-0.339239358901978,0.848914384841919,0.405291259288788\n             ,0.42970210313797,0.768015503883362,0.474877148866653,0.471417188644409,0.872199058532715,0.130516812205315,-0.349305719137192\n             ,0.811025559902191,-0.469279229640961,0.524978220462799,0.717848002910614,-0.457265913486481,0.49711886048317\n             ,0.498656928539276,-0.710080325603485,-0.354273974895477,0.577595055103302,-0.735441267490387,-0.263506501913071\n             ,-0.108145013451576,-0.958576560020447,-0.354273974895477,0.577595055103302,-0.735441267490387,0.49711886048317\n             ,0.498656928539276,-0.710080325603485,0.421276032924652,-0.302525490522385,-0.854988157749176,0.54582554101944\n             ,-0.560542941093445,-0.622788965702057,0.652710020542145,0.543907403945923,-0.527384459972382,0.0589214377105236\n             ,0.108213946223259,-0.99237996339798,0.0839502513408661,-0.381248086690903,-0.920653164386749,-0.248638898134232\n             ,0.048121701925993,-0.967400133609772,0.0589214377105236,0.108213946223259,-0.99237996339798,0.652710020542145\n             ,0.543907403945923,-0.527384459972382,0.442993491888046,0.219760671257973,-0.869173228740692,0.613709151744843\n             ,-0.52058732509613,-0.593590676784515,0.764467060565948,-0.53394079208374,-0.361244171857834,0.218565791845322\n             ,-0.866421818733215,-0.448934614658356,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.764467060565948\n             ,-0.53394079208374,-0.361244171857834,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.428993254899979\n             ,-0.900569558143616,-0.0702797770500183,0.218565791845322,-0.866421818733215,-0.448934614658356,0.891158640384674\n             ,-0.445911049842834,-0.0836637020111084,0.932840287685394,-0.323781669139862,0.158033236861229,0.534525871276855\n             ,-0.813466727733612,0.229246467351913,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.654802083969116\n             ,-0.347440212965012,0.67120748758316,0.646713316440582,-0.673043549060822,0.358851253986359,0.916919708251953\n             ,-0.248773142695427,0.312041908502579,0.685809075832367,-0.12582391500473,0.716822326183319,0.368975192308426\n             ,0.372379690408707,0.851581275463104,0.430973529815674,0.546808898448944,0.717817425727844,-0.365288615226746\n             ,0.685251891613007,0.630074620246887,-0.0639391615986824,0.658531367778778,0.749832093715668,0.916756093502045\n             ,0.0901993364095688,0.389130234718323,0.93030720949173,0.248524934053421,0.269747763872147,0.42970210313797,0.768015503883362\n             ,0.474877148866653,0.430973529815674,0.546808898448944,0.717817425727844,0.93030720949173,0.248524934053421,0.269747763872147\n             ,0.945589601993561,0.313947737216949,0.0854233801364899,0.471417188644409,0.872199058532715,0.130516812205315\n             ,0.42970210313797,0.768015503883362,0.474877148866653,0.968841314315796,0.185883238911629,-0.163688346743584\n             ,0.524978220462799,0.717848002910614,-0.457265913486481,0.517808675765991,0.838519096374512,-0.169587478041649\n             ,0.964999854564667,0.254521876573563,-0.0631974339485168,0.789066255092621,-0.467570185661316,-0.398437708616257\n             ,0.421276032924652,-0.302525490522385,-0.854988157749176,0.49711886048317,0.498656928539276,-0.710080325603485\n             ,0.958566963672638,0.124525241553783,-0.256208688020706,0.837648034095764,0.514832735061646,-0.182463780045509\n             ,0.554449737071991,0.577977955341339,0.598771214485168,0.437207967042923,0.465549558401108,0.76948869228363,0.996942400932312\n             ,0.0589848347008228,-0.051250733435154,0.849660098552704,0.510039925575256,0.133928999304771,0.78013014793396\n             ,0.624480009078979,-0.0377050787210464,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.764467060565948\n             ,-0.53394079208374,-0.361244171857834,0.78013014793396,0.624480009078979,-0.0377050787210464,0.799383401870728\n             ,0.596614599227905,-0.0709738805890083,0.932840287685394,-0.323781669139862,0.158033236861229,0.891158640384674\n             ,-0.445911049842834,-0.0836637020111084,0.799383401870728,0.596614599227905,-0.0709738805890083,0.835493862628937\n             ,0.547001540660858,0.0523386560380459,0.916919708251953,-0.248773142695427,0.312041908502579,0.932840287685394\n             ,-0.323781669139862,0.158033236861229,0.835218191146851,-0.360097140073776,0.415620774030685,0.806149482727051\n             ,-0.532726168632507,0.257538169622421,0.112480655312538,-0.860872745513916,0.496231973171234,0.123612143099308\n             ,-0.593166947364807,0.795533180236816,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.0816513150930405\n             ,-0.993346512317657,-0.0812143534421921,0.0904572755098343,-0.981297671794891,0.169918611645699,0.775248348712921\n             ,-0.624625861644745,0.0939816311001778,0.705088436603546,-0.598325669765472,-0.380600422620773,0.0589963421225548\n             ,-0.720462381839752,-0.690980017185211,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.74578994512558\n             ,-0.633161306381226,-0.207133173942566,0.647948265075684,-0.685174643993378,-0.332714289426804,0.0439913086593151\n             ,-0.675665616989136,-0.735894501209259,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.705088436603546\n             ,-0.598325669765472,-0.380600422620773,0.201858729124069,0.87289696931839,0.444189012050629,0.285585820674896\n             ,0.936043798923492,-0.20557901263237,0.132751479744911,0.960573315620422,-0.244286626577377,-0.00299930199980736\n             ,0.929396331310272,0.36907109618187,0.0780242905020714,0.996866285800934,0.0130291758105159,0.0320413000881672\n             ,0.998972654342651,-0.0320465676486492,0.141466349363327,0.962726950645447,-0.230529963970184,0.238877683877945\n             ,0.949131786823273,-0.205149352550507,-0.00762177817523479,0.899371445178986,0.437118947505951,-0.112318813800812\n             ,0.902268052101135,0.416289359331131,0.0320413000881672,0.998972654342651,-0.0320465676486492,0.0780242905020714\n             ,0.996866285800934,0.0130291758105159,0.135901644825935,0.703174889087677,0.697908222675323,-0.158927887678146\n             ,0.672389388084412,0.722934603691101,-0.112318813800812,0.902268052101135,0.416289359331131,-0.00762177817523479\n             ,0.899371445178986,0.437118947505951,0.663097739219666,-0.724811255931854,0.186949267983437,0.835218191146851\n             ,-0.360097140073776,0.415620774030685,0.123612143099308,-0.593166947364807,0.795533180236816,0.159164875745773\n             ,-0.84468400478363,0.511053323745728,0.114869266748428,0.74843168258667,0.653188347816467,0.0335473045706749\n             ,0.692889869213104,0.720262587070465,0.55090343952179,0.499813765287399,0.668349921703339,0.388264060020447,0.528846085071564\n             ,0.754700541496277,0.946820557117462,-0.166022479534149,-0.275621712207794,0.704087793827057,-0.576694130897522\n             ,-0.414347946643829,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.996236562728882,0.0134180961176753\n             ,-0.0856306329369545,-0.0757745653390884,0.59090781211853,-0.803172528743744,0.526131212711334,0.493667006492615\n             ,-0.692444086074829,0.491935312747955,0.72918576002121,-0.475697129964828,0.0196502637118101,0.849765479564667\n             ,-0.52679455280304,0.765287220478058,-0.345726698637009,-0.542962729930878,0.316276580095291,-0.60947847366333\n             ,-0.726983547210693,0.704087793827057,-0.576694130897522,-0.414347946643829,0.946820557117462,-0.166022479534149\n             ,-0.275621712207794,0.996236562728882,0.0134180961176753,-0.0856306329369545,0.873082160949707,-0.478354394435883\n             ,-0.0943642035126686,0.929248809814453,-0.338162571191788,0.148804187774658,0.986967325210571,0.15194895863533\n             ,0.0529817342758179,0.970865368843079,0.0892849490046501,0.222370475530624,0.91059011220932,-0.28900209069252\n             ,0.295471668243408,0.830892741680145,-0.200436040759087,0.51907867193222,0.92408949136734,-0.175655707716942\n             ,0.339416593313217,0.526131212711334,0.493667006492615,-0.692444086074829,-0.0757745653390884,0.59090781211853\n             ,-0.803172528743744,-0.103349760174751,-0.10200422257185,-0.989400804042816,0.509015023708344,-0.485809624195099\n             ,-0.71055805683136,0.066303126513958,0.98921149969101,0.130631282925606,0.0600598677992821,0.978212475776672\n             ,-0.198728814721107,0.540044844150543,0.824666082859039,-0.168158859014511,0.565629243850708,0.815166532993317\n             ,0.124768301844597,0.0335473045706749,0.692889869213104,0.720262587070465,0.0757396295666695,0.879416644573212\n             ,0.469989240169525,0.558709442615509,0.701101422309875,0.443058162927628,0.55090343952179,0.499813765287399,0.668349921703339\n             ,0.0757396295666695,0.879416644573212,0.469989240169525,0.0335473045706749,0.692889869213104,0.720262587070465\n             ,-0.365288615226746,0.685251891613007,0.630074620246887,-0.339239358901978,0.848914384841919,0.405291259288788\n             ,0.066303126513958,0.98921149969101,0.130631282925606,0.0757396295666695,0.879416644573212,0.469989240169525\n             ,-0.339239358901978,0.848914384841919,0.405291259288788,-0.349254995584488,0.931400954723358,0.102533832192421\n             ,0.0196502637118101,0.849765479564667,-0.52679455280304,0.0600598677992821,0.978212475776672,-0.198728814721107\n             ,-0.343787729740143,0.921479761600494,-0.180790051817894,-0.349305719137192,0.811025559902191,-0.469279229640961\n             ,-0.263506501913071,-0.108145013451576,-0.958576560020447,-0.103349760174751,-0.10200422257185,-0.989400804042816\n             ,-0.0757745653390884,0.59090781211853,-0.803172528743744,-0.354273974895477,0.577595055103302,-0.735441267490387\n             ,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.230070114135742,-0.386967688798904,-0.89292985200882\n             ,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.0589214377105236,0.108213946223259,-0.99237996339798\n             ,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.316276580095291,-0.60947847366333,-0.726983547210693\n             ,0.00693236710503697,-0.478508800268173,-0.878055393695831,-0.23220556974411,-0.496286630630493,-0.836528658866882\n             ,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.873082160949707,-0.478354394435883,-0.0943642035126686\n             ,0.704087793827057,-0.576694130897522,-0.414347946643829,0.218565791845322,-0.866421818733215,-0.448934614658356\n             ,0.929248809814453,-0.338162571191788,0.148804187774658,0.873082160949707,-0.478354394435883,-0.0943642035126686\n             ,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.534525871276855,-0.813466727733612,0.229246467351913\n             ,0.646713316440582,-0.673043549060822,0.358851253986359,0.91059011220932,-0.28900209069252,0.295471668243408\n             ,0.929248809814453,-0.338162571191788,0.148804187774658,0.534525871276855,-0.813466727733612,0.229246467351913\n             ,-0.0639391615986824,0.658531367778778,0.749832093715668,0.114869266748428,0.74843168258667,0.653188347816467\n             ,0.388264060020447,0.528846085071564,0.754700541496277,0.189128592610359,0.522824287414551,0.831194996833801\n             ,0.54582554101944,-0.560542941093445,-0.622788965702057,0.0839502513408661,-0.381248086690903,-0.920653164386749\n             ,-0.263506501913071,-0.108145013451576,-0.958576560020447,0.421276032924652,-0.302525490522385,-0.854988157749176\n             ,0.230070114135742,-0.386967688798904,-0.89292985200882,0.509015023708344,-0.485809624195099,-0.71055805683136\n             ,-0.103349760174751,-0.10200422257185,-0.989400804042816,0.0839502513408661,-0.381248086690903,-0.920653164386749\n             ,0.418020725250244,-0.127127349376678,-0.899498343467712,0.482518672943115,-0.357222050428391,-0.799730002880096\n             ,0.527646243572235,-0.330830633640289,-0.782394111156464,0.493177682161331,0.0824330747127533,-0.866014182567596\n             ,0.00693236710503697,-0.478508800268173,-0.878055393695831,0.482518672943115,-0.357222050428391,-0.799730002880096\n             ,0.418020725250244,-0.127127349376678,-0.899498343467712,-0.027174474671483,-0.150700747966766,-0.988205909729004\n             ,-0.248638898134232,0.048121701925993,-0.967400133609772,-0.23220556974411,-0.496286630630493,-0.836528658866882\n             ,0.00693236710503697,-0.478508800268173,-0.878055393695831,-0.027174474671483,-0.150700747966766,-0.988205909729004\n             ,0.464636594057083,-0.415377110242844,-0.782032430171967,-0.23220556974411,-0.496286630630493,-0.836528658866882\n             ,-0.248638898134232,0.048121701925993,-0.967400133609772,0.442993491888046,0.219760671257973,-0.869173228740692\n             ,0.338892996311188,0.40640527009964,0.84852010011673,0.037119422107935,0.39716312289238,0.916997075080872,0.437207967042923\n             ,0.465549558401108,0.76948869228363,0.554449737071991,0.577977955341339,0.598771214485168,0.579905271530151,-0.813046872615814\n             ,-0.0516200996935368,0.737872421741486,0.632259011268616,0.236204952001572,0.652710020542145,0.543907403945923\n             ,-0.527384459972382,0.54582554101944,-0.560542941093445,-0.622788965702057,0.606493294239044,0.649602949619293\n             ,0.458456039428711,0.389103561639786,0.77647876739502,0.495660334825516,0.471062362194061,0.869565486907959,0.148176074028015\n             ,0.708686351776123,0.701542615890503,0.0748436823487282,0.389103561639786,0.77647876739502,0.495660334825516\n             ,0.337217271327972,0.810059905052185,0.479674339294434,0.396661043167114,0.909007132053375,0.127929911017418\n             ,0.471062362194061,0.869565486907959,0.148176074028015,0.775248348712921,-0.624625861644745,0.0939816311001778\n             ,0.964999854564667,0.254521876573563,-0.0631974339485168,0.945589601993561,0.313947737216949,0.0854233801364899\n             ,0.771648705005646,-0.635727405548096,-0.0202230606228113,-0.258110016584396,0.811675071716309,0.523987472057343\n             ,0.53197318315506,0.845954120159149,0.0369608402252197,0.617900848388672,0.738122165203094,0.270876914262772\n             ,-0.373825579881668,0.746838629245758,0.549987733364105,0.396661043167114,0.909007132053375,0.127929911017418\n             ,0.337217271327972,0.810059905052185,0.479674339294434,0.558709442615509,0.701101422309875,0.443058162927628\n             ,0.565629243850708,0.815166532993317,0.124768301844597,0.646372437477112,0.650956153869629,-0.398068875074387\n             ,0.74043333530426,0.634463846683502,-0.221842527389526,0.780383825302124,0.614288032054901,0.116838775575161\n             ,0.708686351776123,0.701542615890503,0.0748436823487282,0.74043333530426,0.634463846683502,-0.221842527389526\n             ,-0.0771232843399048,0.899696409702301,0.42964905500412,-0.166241437196732,0.836733281612396,0.521767377853394\n             ,0.780383825302124,0.614288032054901,0.116838775575161,0.53197318315506,0.845954120159149,0.0369608402252197\n             ,0.37424173951149,0.91025847196579,0.17712339758873,0.457618981599808,0.813868880271912,0.358053594827652,0.617900848388672\n             ,0.738122165203094,0.270876914262772,0.945589601993561,0.313947737216949,0.0854233801364899,0.964999854564667\n             ,0.254521876573563,-0.0631974339485168,0.517808675765991,0.838519096374512,-0.169587478041649,0.471417188644409\n             ,0.872199058532715,0.130516812205315,0.74578994512558,-0.633161306381226,-0.207133173942566,0.0672344118356705\n             ,-0.90103155374527,-0.428510963916779,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.771648705005646\n             ,-0.635727405548096,-0.0202230606228113,0.565629243850708,0.815166532993317,0.124768301844597,0.558709442615509\n             ,0.701101422309875,0.443058162927628,0.0757396295666695,0.879416644573212,0.469989240169525,0.066303126513958\n             ,0.98921149969101,0.130631282925606,0.282073974609375,0.803686380386353,-0.523948907852173,0.132010728120804\n             ,0.613032221794128,-0.778950989246368,0.163574278354645,0.575437486171722,-0.801320910453796,0.320013791322708\n             ,0.764963567256927,-0.558947086334229,0.285585820674896,0.936043798923492,-0.20557901263237,0.201858729124069\n             ,0.87289696931839,0.444189012050629,0.618469655513763,0.424896746873856,0.661028027534485,0.835493862628937,0.547001540660858\n             ,0.0523386560380459,0.842455089092255,-0.136532187461853,-0.521179795265198,0.971711039543152,-0.0647541359066963\n             ,0.227122470736504,0.929154098033905,-0.212225988507271,0.302708983421326,0.92408949136734,-0.175655707716942\n             ,0.339416593313217,0.929154098033905,-0.212225988507271,0.302708983421326,0.885917663574219,-0.280271381139755\n             ,0.369591504335403,0.909235060214996,-0.290925145149231,0.297748446464539,0.92408949136734,-0.175655707716942\n             ,0.339416593313217,0.879492223262787,-0.245268657803535,0.407844007015228,0.823973476886749,-0.140763908624649\n             ,0.548865377902985,0.91181892156601,-0.103688038885593,0.397284656763077,0.918301284313202,-0.218417331576347\n             ,0.330176681280136,0.491935312747955,0.72918576002121,-0.475697129964828,0.526131212711334,0.493667006492615\n             ,-0.692444086074829,0.132010728120804,0.613032221794128,-0.778950989246368,0.282073974609375,0.803686380386353\n             ,-0.523948907852173,0.550213515758514,-0.731853306293488,0.402064383029938,0.680691421031952,-0.552797436714172\n             ,0.480701744556427,0.430274456739426,-0.536508023738861,0.725963473320007,0.307976216077805,-0.686480343341827\n             ,0.6587073802948,0.318493723869324,0.728740870952606,-0.606216490268707,0.646372437477112,0.650956153869629,-0.398068875074387\n             ,0.457759588956833,0.863344848155975,-0.21234855055809,0.320013791322708,0.764963567256927,-0.558947086334229\n             ,0.835218191146851,-0.360097140073776,0.415620774030685,0.958566963672638,0.124525241553783,-0.256208688020706\n             ,0.968841314315796,0.185883238911629,-0.163688346743584,0.806149482727051,-0.532726168632507,0.257538169622421\n             ,0.266342312097549,0.6069176197052,-0.748807609081268,0.145952269434929,0.566527962684631,-0.811014175415039\n             ,0.181706041097641,0.450920969247818,-0.873872518539429,0.424405604600906,0.592946588993073,-0.684320271015167\n             ,0.196265131235123,0.534957885742188,-0.821766436100006,0.258142352104187,0.50887656211853,-0.821222960948944\n             ,0.266342312097549,0.6069176197052,-0.748807609081268,0.318493723869324,0.728740870952606,-0.606216490268707\n             ,-0.349305719137192,0.811025559902191,-0.469279229640961,-0.343787729740143,0.921479761600494,-0.180790051817894\n             ,0.517808675765991,0.838519096374512,-0.169587478041649,0.524978220462799,0.717848002910614,-0.457265913486481\n             ,0.646713316440582,-0.673043549060822,0.358851253986359,0.534525871276855,-0.813466727733612,0.229246467351913\n             ,0.932840287685394,-0.323781669139862,0.158033236861229,0.916919708251953,-0.248773142695427,0.312041908502579\n             ,0.958566963672638,0.124525241553783,-0.256208688020706,0.49711886048317,0.498656928539276,-0.710080325603485\n             ,0.524978220462799,0.717848002910614,-0.457265913486481,0.968841314315796,0.185883238911629,-0.163688346743584\n             ,0.835493862628937,0.547001540660858,0.0523386560380459,0.618469655513763,0.424896746873856,0.661028027534485\n             ,0.685809075832367,-0.12582391500473,0.716822326183319,0.916919708251953,-0.248773142695427,0.312041908502579\n             ,0.775248348712921,-0.624625861644745,0.0939816311001778,0.0904572755098343,-0.981297671794891,0.169918611645699\n             ,0.112480655312538,-0.860872745513916,0.496231973171234,0.806149482727051,-0.532726168632507,0.257538169622421\n             ,0.285585820674896,0.936043798923492,-0.20557901263237,0.238877683877945,0.949131786823273,-0.205149352550507\n             ,0.141466349363327,0.962726950645447,-0.230529963970184,0.132751479744911,0.960573315620422,-0.244286626577377\n             ,0.540044844150543,0.824666082859039,-0.168158859014511,0.0600598677992821,0.978212475776672,-0.198728814721107\n             ,0.0196502637118101,0.849765479564667,-0.52679455280304,0.491935312747955,0.72918576002121,-0.475697129964828\n             ,0.970865368843079,0.0892849490046501,0.222370475530624,0.986967325210571,0.15194895863533,0.0529817342758179\n             ,0.929248809814453,-0.338162571191788,0.148804187774658,0.91059011220932,-0.28900209069252,0.295471668243408\n             ,-0.354273974895477,0.577595055103302,-0.735441267490387,-0.0757745653390884,0.59090781211853,-0.803172528743744\n             ,0.0196502637118101,0.849765479564667,-0.52679455280304,-0.349305719137192,0.811025559902191,-0.469279229640961\n             ,0.654802083969116,-0.347440212965012,0.67120748758316,0.830892741680145,-0.200436040759087,0.51907867193222\n             ,0.91059011220932,-0.28900209069252,0.295471668243408,0.646713316440582,-0.673043549060822,0.358851253986359\n             ,0.915336489677429,-0.234250664710999,0.327545046806335,0.955660283565521,-0.256323933601379,0.144953340291977\n             ,0.986967325210571,0.15194895863533,0.0529817342758179,0.970865368843079,0.0892849490046501,0.222370475530624\n             ,0.527646243572235,-0.330830633640289,-0.782394111156464,0.482518672943115,-0.357222050428391,-0.799730002880096\n             ,0.583753287792206,-0.402651727199554,-0.705055773258209,0.39206200838089,-0.444667458534241,-0.805331110954285\n             ,0.623417019844055,-0.452671766281128,-0.637526035308838,0.765287220478058,-0.345726698637009,-0.542962729930878\n             ,0.946820557117462,-0.166022479534149,-0.275621712207794,0.829055666923523,-0.40739643573761,-0.383007615804672\n             ,0.135901644825935,0.703174889087677,0.697908222675323,-0.00762177817523479,0.899371445178986,0.437118947505951\n             ,0.849660098552704,0.510039925575256,0.133928999304771,0.961316466331482,0.243311077356339,0.129113554954529\n             ,0.346117079257965,-0.47863432765007,-0.80691522359848,0.460681647062302,-0.288388341665268,-0.83940726518631\n             ,0.527646243572235,-0.330830633640289,-0.782394111156464,0.39206200838089,-0.444667458534241,-0.805331110954285\n             ,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.150176227092743,-0.476422011852264,-0.866296231746674\n             ,0.174190670251846,-0.475461959838867,-0.862318694591522,0.113550499081612,-0.486260622739792,-0.866404592990875\n             ,0.106468603014946,-0.443950653076172,-0.889703452587128,0.0458064116537571,-0.413144141435623,-0.909512877464294\n             ,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0786453634500504,-0.439450114965439,-0.894817590713501\n             ,-0.23220556974411,-0.496286630630493,-0.836528658866882,0.464636594057083,-0.415377110242844,-0.782032430171967\n             ,0.613709151744843,-0.52058732509613,-0.593590676784515,-0.0159856956452131,-0.708547711372375,-0.705481767654419\n             ,0.961316466331482,0.243311077356339,0.129113554954529,0.849660098552704,0.510039925575256,0.133928999304771\n             ,0.764467060565948,-0.53394079208374,-0.361244171857834,0.613709151744843,-0.52058732509613,-0.593590676784515\n             ,0.135901644825935,0.703174889087677,0.697908222675323,0.437207967042923,0.465549558401108,0.76948869228363,0.037119422107935\n             ,0.39716312289238,0.916997075080872,-0.158927887678146,0.672389388084412,0.722934603691101,0.482518672943115\n             ,-0.357222050428391,-0.799730002880096,0.00693236710503697,-0.478508800268173,-0.878055393695831,0.316276580095291\n             ,-0.60947847366333,-0.726983547210693,0.765287220478058,-0.345726698637009,-0.542962729930878,-0.0159856956452131\n             ,-0.708547711372375,-0.705481767654419,0.218565791845322,-0.866421818733215,-0.448934614658356,0.704087793827057\n             ,-0.576694130897522,-0.414347946643829,0.316276580095291,-0.60947847366333,-0.726983547210693,0.113550499081612\n             ,-0.486260622739792,-0.866404592990875,0.140872359275818,-0.399173051118851,-0.905988872051239,0.140843346714973\n             ,-0.431618928909302,-0.890992820262909,0.106468603014946,-0.443950653076172,-0.889703452587128,0.140843346714973\n             ,-0.431618928909302,-0.890992820262909,0.228939339518547,-0.370276868343353,-0.900267601013184,0.139385372400284\n             ,-0.293043553829193,-0.945884346961975,0.106468603014946,-0.443950653076172,-0.889703452587128,-0.971851825714111\n             ,-0.229726418852806,0.0522474460303783,-0.960497379302979,-0.120281100273132,-0.250952750444412,-0.826933801174164\n             ,0.485819309949875,0.283125460147858,-0.800732433795929,0.427052974700928,0.420063436031342,-0.800732433795929\n             ,0.427052974700928,0.420063436031342,-0.826933801174164,0.485819309949875,0.283125460147858,0.420635163784027\n             ,0.68705153465271,0.592474699020386,0.457618981599808,0.813868880271912,0.358053594827652,-0.349254995584488\n             ,0.931400954723358,0.102533832192421,-0.343787729740143,0.921479761600494,-0.180790051817894,0.0600598677992821\n             ,0.978212475776672,-0.198728814721107,0.066303126513958,0.98921149969101,0.130631282925606,0.471417188644409\n             ,0.872199058532715,0.130516812205315,0.517808675765991,0.838519096374512,-0.169587478041649,-0.343787729740143\n             ,0.921479761600494,-0.180790051817894,-0.349254995584488,0.931400954723358,0.102533832192421,0.174190670251846\n             ,-0.475461959838867,-0.862318694591522,0.39206200838089,-0.444667458534241,-0.805331110954285,0.31203830242157\n             ,-0.439545303583145,-0.842277884483337,0.140872359275818,-0.399173051118851,-0.905988872051239,0.4433753490448\n             ,0.161547407507896,0.881657958030701,0.189128592610359,0.522824287414551,0.831194996833801,0.150548562407494\n             ,0.393970012664795,0.906709849834442,0.705088436603546,-0.598325669765472,-0.380600422620773,0.916756093502045\n             ,0.0901993364095688,0.389130234718323,0.812437415122986,-0.0575567446649075,0.580200552940369,0.647948265075684\n             ,-0.685174643993378,-0.332714289426804,0.189128592610359,0.522824287414551,0.831194996833801,0.4433753490448\n             ,0.161547407507896,0.881657958030701,0.368975192308426,0.372379690408707,0.851581275463104,-0.0639391615986824\n             ,0.658531367778778,0.749832093715668,0.916756093502045,0.0901993364095688,0.389130234718323,0.430973529815674\n             ,0.546808898448944,0.717817425727844,0.368975192308426,0.372379690408707,0.851581275463104,0.812437415122986\n             ,-0.0575567446649075,0.580200552940369,-0.365288615226746,0.685251891613007,0.630074620246887,0.0335473045706749\n             ,0.692889869213104,0.720262587070465,0.114869266748428,0.74843168258667,0.653188347816467,-0.0639391615986824\n             ,0.658531367778778,0.749832093715668,-0.444781541824341,-0.346720337867737,0.825805306434631,-0.41981428861618\n             ,-0.320506066083908,0.849135935306549,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.253998309373856\n             ,-0.212244898080826,0.943629682064056,0.953391134738922,-0.158550098538399,0.256724029779434,0.916560828685761\n             ,-0.24360553920269,0.317131847143173,0.918301284313202,-0.218417331576347,0.330176681280136,0.938150525093079\n             ,-0.0836314186453819,0.335975229740143,0.654802083969116,-0.347440212965012,0.67120748758316,0.164040550589561\n             ,0.209489807486534,0.963952660560608,0.92408949136734,-0.175655707716942,0.339416593313217,0.830892741680145\n             ,-0.200436040759087,0.51907867193222,0.0319873727858067,0.984376490116119,0.173146665096283,0.223836988210678\n             ,0.893291056156158,0.389779537916183,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.185543641448021\n             ,0.976534903049469,0.10933043807745,-0.0894755497574806,0.965718626976013,0.243683651089668,0.394804865121841\n             ,0.885042786598206,0.246634021401405,0.383488237857819,0.890466749668121,0.244960829615593,0.263491213321686\n             ,0.831329226493835,0.48935067653656,0.394804865121841,0.885042786598206,0.246634021401405,0.791727185249329,0.579225897789001\n             ,0.194075778126717,0.55004757642746,0.676443994045258,0.489766448736191,0.383488237857819,0.890466749668121,0.244960829615593\n             ,0.791727185249329,0.579225897789001,0.194075778126717,0.938301980495453,0.0685238614678383,0.338959902524948\n             ,0.858800172805786,0.271537780761719,0.434430092573166,0.55004757642746,0.676443994045258,0.489766448736191,-0.0894755497574806\n             ,0.965718626976013,0.243683651089668,0.263491213321686,0.831329226493835,0.48935067653656,-0.358905464410782\n             ,0.931329369544983,0.0617449507117271,-0.298087060451508,0.801499605178833,0.518403768539429,0.761567413806915\n             ,0.64221316576004,0.0870478227734566,0.685486555099487,0.727433860301971,-0.0307916849851608,0.858800172805786\n             ,0.271537780761719,0.434430092573166,0.947060525417328,0.264708548784256,0.181674882769585,-0.243022814393044\n             ,0.95173841714859,0.187440201640129,-0.358905464410782,0.931329369544983,0.0617449507117271,0.223836988210678\n             ,0.893291056156158,0.389779537916183,0.0319873727858067,0.984376490116119,0.173146665096283,0.0862562954425812\n             ,0.984675407409668,-0.151572123169899,0.259856075048447,0.961204409599304,0.0925252288579941,0.185543641448021\n             ,0.976534903049469,0.10933043807745,0.0825407654047012,0.994074046611786,0.0707375407218933,0.661977589130402\n             ,-0.708897471427917,-0.243413314223289,0.375436156988144,-0.682113528251648,-0.627510011196136,0.672621726989746\n             ,-0.282224327325821,-0.684053659439087,0.89782452583313,-0.295981734991074,-0.32604593038559,0.819233179092407\n             ,-0.572073757648468,-0.0398566573858261,0.746676325798035,-0.643010795116425,-0.17032790184021,0.939977943897247\n             ,-0.283478707075119,-0.189950734376907,0.977083265781403,-0.21279039978981,-0.00533624598756433,0.954775273799896\n             ,-0.0549841597676277,0.292200028896332,0.835695207118988,-0.485575556755066,0.256573379039764,0.859511733055115\n             ,-0.505731165409088,0.0739971473813057,0.984757125377655,-0.122858062386513,0.123123273253441,0.833409249782562\n             ,-0.0707181841135025,0.54811304807663,0.680691421031952,-0.552797436714172,0.480701744556427,0.835695207118988\n             ,-0.485575556755066,0.256573379039764,0.954775273799896,-0.0549841597676277,0.292200028896332,0.527580142021179\n             ,-0.0869907140731812,0.845039546489716,0.430274456739426,-0.536508023738861,0.725963473320007,0.680691421031952\n             ,-0.552797436714172,0.480701744556427,0.833409249782562,-0.0707181841135025,0.54811304807663,0.122565753757954\n             ,0.118542328476906,0.98535543680191,-0.141722351312637,-0.25363889336586,0.956860542297363,-0.253998309373856\n             ,-0.212244898080826,0.943629682064056,0.140111669898033,0.0783234462141991,0.987033009529114,-0.253998309373856\n             ,-0.212244898080826,0.943629682064056,-0.228407248854637,-0.205970659852028,0.951528370380402,0.185034364461899\n             ,0.0477372668683529,0.981571912765503,0.140111669898033,0.0783234462141991,0.987033009529114,-0.228407248854637\n             ,-0.205970659852028,0.951528370380402,-0.150304853916168,-0.209269061684608,0.966237485408783,0.275597482919693\n             ,0.0508149787783623,0.95992910861969,0.185034364461899,0.0477372668683529,0.981571912765503,0.275597482919693\n             ,0.0508149787783623,0.95992910861969,-0.150304853916168,-0.209269061684608,0.966237485408783,0.0832947567105293\n             ,-0.342013299465179,0.935996174812317,0.527580142021179,-0.0869907140731812,0.845039546489716,0.000295055127935484\n             ,0.143534883856773,0.98964524269104,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.141722351312637\n             ,-0.25363889336586,0.956860542297363,0.122565753757954,0.118542328476906,0.98535543680191,0.859511733055115,-0.505731165409088\n             ,0.0739971473813057,0.819233179092407,-0.572073757648468,-0.0398566573858261,0.977083265781403,-0.21279039978981\n             ,-0.00533624598756433,0.984757125377655,-0.122858062386513,0.123123273253441,-0.0074951434507966,-0.537373244762421\n             ,-0.843311250209808,-0.0494538806378841,-0.556213021278381,-0.829566955566406,0.0646723359823227,-0.342740118503571\n             ,-0.937201499938965,0.216808795928955,-0.349548786878586,-0.911487579345703,0.672621726989746,-0.282224327325821\n             ,-0.684053659439087,0.375436156988144,-0.682113528251648,-0.627510011196136,0.0173844322562218,-0.524197161197662\n             ,-0.851419508457184,0.332537442445755,-0.288520336151123,-0.897872388362885,0.332537442445755,-0.288520336151123\n             ,-0.897872388362885,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0074951434507966,-0.537373244762421\n             ,-0.843311250209808,0.216808795928955,-0.349548786878586,-0.911487579345703,0.746676325798035,-0.643010795116425\n             ,-0.17032790184021,0.661977589130402,-0.708897471427917,-0.243413314223289,0.89782452583313,-0.295981734991074\n             ,-0.32604593038559,0.939977943897247,-0.283478707075119,-0.189950734376907,0.704553008079529,0.389835178852081\n             ,0.592987060546875,0.77562689781189,0.195846498012543,0.60003924369812,0.960910856723785,0.17212125658989,0.216851592063904\n             ,0.860680103302002,0.465308487415314,0.206682801246643,0.77562689781189,0.195846498012543,0.60003924369812,0.813431859016418\n             ,0.0690318197011948,0.577549338340759,0.980262100696564,0.00691105145961046,0.197581350803375,0.960910856723785\n             ,0.17212125658989,0.216851592063904,0.813431859016418,0.0690318197011948,0.577549338340759,0.80047994852066,-0.0622782073915005\n             ,0.596115171909332,0.929154098033905,-0.212225988507271,0.302708983421326,0.971711039543152,-0.0647541359066963\n             ,0.227122470736504,0.885917663574219,-0.280271381139755,0.369591504335403,0.747986078262329,-0.084919698536396\n             ,0.658259391784668,0.729275226593018,-0.11221731454134,0.674955487251282,0.879492223262787,-0.245268657803535\n             ,0.407844007015228,0.823973476886749,-0.140763908624649,0.548865377902985,0.610790312290192,-0.062268540263176\n             ,0.789340078830719,0.493080407381058,0.0869515836238861,0.865627586841583,0.709406793117523,0.0714843049645424\n             ,0.701164722442627,0.747986078262329,-0.084919698536396,0.658259391784668,0.885917663574219,-0.280271381139755\n             ,0.369591504335403,0.929154098033905,-0.212225988507271,0.302708983421326,0.80047994852066,-0.0622782073915005\n             ,0.596115171909332,0.610790312290192,-0.062268540263176,0.789340078830719,0.823973476886749,-0.140763908624649\n             ,0.548865377902985,0.879492223262787,-0.245268657803535,0.407844007015228,0.729275226593018,-0.11221731454134\n             ,0.674955487251282,0.63835346698761,0.527818858623505,0.560278594493866,0.704553008079529,0.389835178852081,0.592987060546875\n             ,0.860680103302002,0.465308487415314,0.206682801246643,0.7801553606987,0.610978186130524,0.134399503469467,0.665781199932098\n             ,0.528658747673035,0.526550352573395,0.63835346698761,0.527818858623505,0.560278594493866,0.7801553606987,0.610978186130524\n             ,0.134399503469467,0.761567413806915,0.64221316576004,0.0870478227734566,0.895810067653656,0.254065722227097\n             ,-0.364657372236252,0.68595552444458,0.102393850684166,-0.720403015613556,0.960910856723785,0.17212125658989\n             ,0.216851592063904,0.980262100696564,0.00691105145961046,0.197581350803375,0.842455089092255,-0.136532187461853\n             ,-0.521179795265198,0.0516201481223106,0.961737930774689,-0.26906418800354,0.0456644557416439,0.4627845287323\n             ,-0.885293841362,0.585361659526825,0.51231449842453,-0.628399193286896,0.860680103302002,0.465308487415314,0.206682801246643\n             ,0.960910856723785,0.17212125658989,0.216851592063904,0.68595552444458,0.102393850684166,-0.720403015613556,0.810609877109528\n             ,0.241179883480072,-0.533613920211792,0.7801553606987,0.610978186130524,0.134399503469467,0.860680103302002,0.465308487415314\n             ,0.206682801246643,0.810609877109528,0.241179883480072,-0.533613920211792,0.745590567588806,0.664693832397461\n             ,0.047716099768877,0.761567413806915,0.64221316576004,0.0870478227734566,0.7801553606987,0.610978186130524,0.134399503469467\n             ,0.745590567588806,0.664693832397461,0.047716099768877,0.685486555099487,0.727433860301971,-0.0307916849851608\n             ,0.0745275393128395,0.431530833244324,0.899014353752136,0.550135016441345,0.461672753095627,0.695851802825928\n             ,0.266888707876205,0.958940505981445,0.0959352776408196,0.0482074841856956,0.963629901409149,0.262856423854828\n             ,-0.0702482014894485,0.80213338136673,0.592998504638672,0.0319873727858067,0.984376490116119,0.173146665096283\n             ,0.185543641448021,0.976534903049469,0.10933043807745,0.386715173721313,0.754913926124573,0.529675722122192,0.266888707876205\n             ,0.958940505981445,0.0959352776408196,0.550135016441345,0.461672753095627,0.695851802825928,0.750702619552612\n             ,0.512931108474731,0.416349858045578,0.393054485321045,0.919416308403015,-0.0134849762544036,0.393054485321045\n             ,0.919416308403015,-0.0134849762544036,0.750702619552612,0.512931108474731,0.416349858045578,0.386715173721313\n             ,0.754913926124573,0.529675722122192,0.259856075048447,0.961204409599304,0.0925252288579941,-0.0619851760566235\n             ,-0.854239583015442,0.516171097755432,-0.115733034908772,-0.588226437568665,0.800372123718262,0.123612143099308\n             ,-0.593166947364807,0.795533180236816,0.112480655312538,-0.860872745513916,0.496231973171234,-0.112318813800812\n             ,0.902268052101135,0.416289359331131,0.0113279931247234,0.923928916454315,0.382396370172501,0.107348747551441\n             ,0.986339747905731,-0.124940805137157,0.0320413000881672,0.998972654342651,-0.0320465676486492,-0.158927887678146\n             ,0.672389388084412,0.722934603691101,-0.0713663622736931,0.679935038089752,0.729791164398193,0.0113279931247234\n             ,0.923928916454315,0.382396370172501,-0.112318813800812,0.902268052101135,0.416289359331131,0.141376316547394\n             ,0.226959496736526,0.963588178157806,-0.119005374610424,0.237747848033905,0.964009165763855,-0.106734469532967\n             ,0.405797332525253,0.907709360122681,0.037119422107935,0.39716312289238,0.916997075080872,-0.115733034908772\n             ,-0.588226437568665,0.800372123718262,-0.087286576628685,-0.801884651184082,0.591068506240845,0.159164875745773\n             ,-0.84468400478363,0.511053323745728,0.123612143099308,-0.593166947364807,0.795533180236816,-0.0289680454879999\n             ,-0.984227418899536,0.17452010512352,-0.0619851760566235,-0.854239583015442,0.516171097755432,0.112480655312538\n             ,-0.860872745513916,0.496231973171234,0.0904572755098343,-0.981297671794891,0.169918611645699,0.037119422107935\n             ,0.39716312289238,0.916997075080872,-0.106734469532967,0.405797332525253,0.907709360122681,-0.0713663622736931\n             ,0.679935038089752,0.729791164398193,-0.158927887678146,0.672389388084412,0.722934603691101,0.155474439263344\n             ,0.00156243739183992,-0.987838685512543,0.19240340590477,0.354867070913315,-0.914904534816742,0.263788342475891\n             ,0.299328684806824,-0.916961312294006,0.235058307647705,0.00269885058514774,-0.971977531909943,0.0482074841856956\n             ,0.963629901409149,0.262856423854828,0.266888707876205,0.958940505981445,0.0959352776408196,-0.266191899776459\n             ,0.70389860868454,-0.658535182476044,-0.0404882803559303,0.532536089420319,-0.845438301563263,0.230260863900185\n             ,0.590617835521698,-0.773401916027069,0.220478102564812,0.225269511342049,-0.949022173881531,-0.0597109496593475\n             ,0.20538541674614,-0.976857900619507,-0.0387927554547787,0.555053651332855,-0.830909490585327,0.220478102564812\n             ,0.225269511342049,-0.949022173881531,0.181706041097641,0.450920969247818,-0.873872518539429,-0.0473092421889305\n             ,0.433387726545334,-0.899964928627014,-0.0597109496593475,0.20538541674614,-0.976857900619507,0.145952269434929\n             ,0.566527962684631,-0.811014175415039,0.162849396467209,0.526230156421661,-0.834602832794189,-0.0400200858712196\n             ,0.538817524909973,-0.841471374034882,-0.0390528962016106,0.551643908023834,-0.833164989948273,0.162849396467209\n             ,0.526230156421661,-0.834602832794189,0.19240340590477,0.354867070913315,-0.914904534816742,-0.0513396598398685\n             ,0.366866230964661,-0.928855955600739,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0672369971871376\n             ,-0.00775569351390004,-0.997706890106201,0.155474439263344,0.00156243739183992,-0.987838685512543,0.0690941736102104\n             ,-0.258630573749542,-0.963502049446106,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.055810023099184\n             ,-0.2584228515625,-0.964418411254883,0.0690941736102104,-0.258630573749542,-0.963502049446106,0.0340255945920944\n             ,-0.412763565778732,-0.910202443599701,-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.000145141151733696\n             ,-0.408616960048676,-0.912705957889557,0.0458064116537571,-0.413144141435623,-0.909512877464294,0.0445788577198982\n             ,-0.252718240022659,-0.966512382030487,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-8.87226342456415e-005\n             ,-0.255004823207855,-0.966939747333527,0.0445788577198982,-0.252718240022659,-0.966512382030487,-0.00791200343519449\n             ,-0.3136927485466,-0.949491560459137,-0.000159720322699286,-0.320416629314423,-0.947276711463928,-0.122356586158276\n             ,0.987737119197845,-0.0969751328229904,0.0862562954425812,0.984675407409668,-0.151572123169899,0.0205553397536278\n             ,0.989267349243164,-0.144663617014885,0.0492917597293854,0.955946862697601,0.28937155008316,-0.318083673715591\n             ,0.947685122489929,-0.0267524290829897,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0492917597293854\n             ,0.955946862697601,0.28937155008316,0.0462776906788349,0.971960961818695,0.23054338991642,0.179319217801094,0.922120809555054\n             ,-0.342837929725647,-0.0101916557177901,0.912391781806946,0.409191101789474,0.0557159669697285,0.916767716407776\n             ,0.395515710115433,0.00435609184205532,0.929633140563965,-0.368460655212402,-0.000357056385837495,-0.611226499080658\n             ,-0.791455626487732,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.0924276784062386,-0.684463918209076\n             ,-0.723164081573486,-0.000515560561325401,-0.726091146469116,-0.68759822845459,-0.0101916557177901,0.912391781806946\n             ,0.409191101789474,0.0270950496196747,0.974490761756897,0.222785964608192,0.0419506318867207,0.986220836639404\n             ,0.160026773810387,0.0557159669697285,0.916767716407776,0.395515710115433,-0.0473092421889305,0.433387726545334\n             ,-0.899964928627014,0.181706041097641,0.450920969247818,-0.873872518539429,0.145952269434929,0.566527962684631\n             ,-0.811014175415039,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.020222021266818,-0.390664726495743\n             ,-0.920310854911804,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0458064116537571,-0.413144141435623\n             ,-0.909512877464294,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-0.000159720322699286,-0.320416629314423\n             ,-0.947276711463928,-0.00791200343519449,-0.3136927485466,-0.949491560459137,-0.0494538806378841,-0.556213021278381\n             ,-0.829566955566406,-0.000357056385837495,-0.611226499080658,-0.791455626487732,-0.0513396598398685,0.366866230964661\n             ,-0.928855955600739,0.19240340590477,0.354867070913315,-0.914904534816742,0.155474439263344,0.00156243739183992\n             ,-0.987838685512543,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,0.353190511465073,0.114995338022709\n             ,0.928457081317902,0.185034364461899,0.0477372668683529,0.981571912765503,0.275597482919693,0.0508149787783623\n             ,0.95992910861969,0.493080407381058,0.0869515836238861,0.865627586841583,0.307976216077805,-0.686480343341827\n             ,0.6587073802948,0.430274456739426,-0.536508023738861,0.725963473320007,0.0832947567105293,-0.342013299465179\n             ,0.935996174812317,-0.101489536464214,-0.459648072719574,0.882283091545105,0.230070114135742,-0.386967688798904\n             ,-0.89292985200882,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.493177682161331,0.0824330747127533\n             ,-0.866014182567596,0.303897142410278,-0.58835905790329,-0.749319791793823,-0.0341968536376953,-0.89968353509903\n             ,-0.43520113825798,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.0589963421225548,-0.720462381839752\n             ,-0.690980017185211,-0.0373940095305443,-0.711677670478821,-0.701510190963745,-0.0297683943063021,-0.996251881122589\n             ,-0.0812156423926353,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0672344118356705,-0.90103155374527\n             ,-0.428510963916779,-0.0341968536376953,-0.89968353509903,-0.43520113825798,-0.0373940095305443,-0.711677670478821\n             ,-0.701510190963745,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.0439913086593151,-0.675665616989136\n             ,-0.735894501209259,-0.0370400324463844,-0.668275535106659,-0.742991149425507,-0.0370400324463844,-0.668275535106659\n             ,-0.742991149425507,0.0439913086593151,-0.675665616989136,-0.735894501209259,0.254503726959229,-0.798789858818054\n             ,-0.545126259326935,-0.0372622646391392,-0.693815767765045,-0.719187915325165,0.00493840174749494,0.00535354111343622\n             ,-0.999973475933075,-0.0351880826056004,-0.407869398593903,-0.912361979484558,0.810609877109528,0.241179883480072\n             ,-0.533613920211792,0.68595552444458,0.102393850684166,-0.720403015613556,0.254503726959229,-0.798789858818054\n             ,-0.545126259326935,0.810609877109528,0.241179883480072,-0.533613920211792,-0.0351880826056004,-0.407869398593903\n             ,-0.912361979484558,-0.0372622646391392,-0.693815767765045,-0.719187915325165,0.0456644557416439,0.4627845287323\n             ,-0.885293841362,0.00493840174749494,0.00535354111343622,-0.999973475933075,0.68595552444458,0.102393850684166\n             ,-0.720403015613556,0.895810067653656,0.254065722227097,-0.364657372236252,-0.0297683943063021,-0.996251881122589\n             ,-0.0812156423926353,-0.0289680454879999,-0.984227418899536,0.17452010512352,0.0904572755098343,-0.981297671794891\n             ,0.169918611645699,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0516201481223106,0.961737930774689\n             ,-0.26906418800354,0.132751479744911,0.960573315620422,-0.244286626577377,0.141466349363327,0.962726950645447\n             ,-0.230529963970184,0.107348747551441,0.986339747905731,-0.124940805137157,0.437207967042923,0.465549558401108\n             ,0.76948869228363,0.135901644825935,0.703174889087677,0.697908222675323,0.961316466331482,0.243311077356339,0.129113554954529\n             ,0.996942400932312,0.0589848347008228,-0.051250733435154,0.961316466331482,0.243311077356339,0.129113554954529\n             ,0.613709151744843,-0.52058732509613,-0.593590676784515,0.464636594057083,-0.415377110242844,-0.782032430171967\n             ,0.996942400932312,0.0589848347008228,-0.051250733435154,0.837648034095764,0.514832735061646,-0.182463780045509\n             ,0.996942400932312,0.0589848347008228,-0.051250733435154,0.464636594057083,-0.415377110242844,-0.782032430171967\n             ,0.442993491888046,0.219760671257973,-0.869173228740692,-0.554342925548553,0.567035973072052,0.609240651130676\n             ,-0.52557498216629,0.553365111351013,0.646187245845795,-0.426482230424881,0.398722440004349,0.811870276927948\n             ,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.484570324420929,0.164985567331314,-0.85905259847641\n             ,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.134134471416473,0.255289256572723,0.957515180110931\n             ,0.0454900041222572,0.2624471783638,0.963873505592346,0.0673762187361717,0.208747074007988,0.975646018981934\n             ,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.911626994609833,-0.102696627378464,0.397981941699982\n             ,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.386307686567307,-0.301311910152435,-0.871766865253448\n             ,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.229701682925224,-0.369639068841934,-0.900335550308228\n             ,-0.509144961833954,0.274927198886871,0.815589666366577,-0.134134471416473,0.255289256572723,0.957515180110931\n             ,-0.384194701910019,0.144494697451591,0.911874830722809,-0.661458969116211,-0.196823701262474,-0.723693668842316\n             ,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.828345477581024,-0.291038513183594,-0.478686034679413\n             ,-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.746677756309509,-0.64300948381424,-0.170326471328735\n             ,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.00847726315259933,-0.531524419784546,-0.847000539302826\n             ,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.36091136932373,-0.689484357833862,-0.627976357936859\n             ,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.695569396018982,-0.386790245771408,-0.605455636978149\n             ,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.15230655670166,-0.395185917615891,-0.905886709690094\n             ,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.120519727468491,-0.475927352905273,-0.871187806129456\n             ,-0.426482230424881,0.398722440004349,0.811870276927948,-0.428126484155655,0.265849471092224,0.863731324672699\n             ,-0.338261693716049,0.297003328800201,0.892954647541046,-0.338261693716049,0.297003328800201,0.892954647541046\n             ,-0.428126484155655,0.265849471092224,0.863731324672699,-0.28684601187706,0.185986965894699,0.939749002456665\n             ,-0.887027978897095,0.338621288537979,0.313874155282974,-0.553295969963074,0.315833359956741,0.770787119865417\n             ,-0.877903461456299,0.125808238983154,0.462014973163605,0.203874498605728,0.632674932479858,0.747099459171295\n             ,0.502047836780548,0.814261257648468,0.291421681642532,0.414917647838593,0.779010057449341,0.470092207193375\n             ,0.0901670306921005,0.507265865802765,0.8570596575737,0.251353085041046,0.650286138057709,0.716902732849121,0.203874498605728\n             ,0.632674932479858,0.747099459171295,0.203874498605728,0.632674932479858,0.747099459171295,0.251353085041046\n             ,0.650286138057709,0.716902732849121,0.502047836780548,0.814261257648468,0.291421681642532,-0.553295969963074\n             ,0.315833359956741,0.770787119865417,-0.426482230424881,0.398722440004349,0.811870276927948,-0.338261693716049\n             ,0.297003328800201,0.892954647541046,-0.509144961833954,0.274927198886871,0.815589666366577,-0.117755182087421\n             ,0.405977427959442,0.906264901161194,-0.134134471416473,0.255289256572723,0.957515180110931,-0.642698705196381\n             ,0.173675417900085,-0.746173679828644,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.498561441898346\n             ,0.123794674873352,-0.857969343662262,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.665653705596924\n             ,0.333070456981659,-0.667809247970581,-0.474711626768112,0.621306002140045,-0.623400151729584,0.0345219671726227\n             ,0.469873160123825,0.882058680057526,-0.362813800573349,0.452378064393997,0.814690291881561,-0.0333014093339443\n             ,0.336885303258896,0.940956592559814,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.621008992195129\n             ,-0.719995379447937,0.309765249490738,-0.0402880981564522,-0.602410852909088,0.797168791294098,-0.708229780197144\n             ,0.558061540126801,-0.432409435510635,-0.529653549194336,0.324454098939896,-0.783707022666931,-0.875469923019409\n             ,0.442794948816299,-0.193610593676567,-0.21317532658577,0.371294349431992,0.903712749481201,-0.747875332832336\n             ,-0.0330392643809319,0.663016498088837,-0.347785919904709,0.133236810564995,0.928058683872223,-0.362813800573349\n             ,0.452378064393997,0.814690291881561,-0.598303258419037,0.575496375560761,0.557527720928192,-0.734153270721436\n             ,0.469748914241791,0.490260034799576,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.676061987876892\n             ,-0.682281494140625,0.278266310691834,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.210184469819069\n             ,0.149185121059418,-0.966212332248688,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.644763290882111\n             ,0.0604433193802834,-0.761988759040833,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.210184469819069\n             ,0.149185121059418,-0.966212332248688,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.0306792501360178\n             ,-0.0856858864426613,-0.995849788188934,-0.225950360298157,-0.351854801177979,-0.908374726772308,0.128099784255028\n             ,-0.105493560433388,-0.986134648323059,-0.550671279430389,-0.263566613197327,-0.79201877117157,-0.659405767917633\n             ,-0.515389144420624,-0.547318935394287,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.23223540186882\n             ,0.292309641838074,-0.927697062492371,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.210184469819069\n             ,0.149185121059418,-0.966212332248688,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.326218724250793\n             ,0.625610828399658,-0.70865535736084,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.639488339424133\n             ,-0.334312081336975,-0.692307770252228,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.828345477581024\n             ,-0.291038513183594,-0.478686034679413,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.374457865953445\n             ,-0.757000803947449,-0.535472750663757,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.687154352664948\n             ,-0.340534240007401,0.6417595744133,-0.249380812048912,0.181461036205292,0.951252400875092,-0.704255282878876\n             ,-0.136106103658676,0.696778059005737,-0.33330100774765,0.819487571716309,0.466208755970001,-0.249380812048912\n             ,0.181461036205292,0.951252400875092,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.656458854675293\n             ,0.394298911094666,0.643109738826752,-0.249380812048912,0.181461036205292,0.951252400875092,-0.33330100774765\n             ,0.819487571716309,0.466208755970001,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.0534899868071079\n             ,0.977624833583832,-0.203441679477692,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.704255282878876\n             ,-0.136106103658676,0.696778059005737,-0.249380812048912,0.181461036205292,0.951252400875092,-0.656458854675293\n             ,0.394298911094666,0.643109738826752,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.474711626768112\n             ,0.621306002140045,-0.623400151729584,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.662446260452271\n             ,-0.708414137363434,-0.243545264005661,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.197025984525681\n             ,-0.816609442234039,-0.542521715164185,-0.00815227441489697,0.997119009494781,0.075413390994072,0.255933493375778\n             ,0.96283483505249,-0.0862965509295464,-0.106476634740829,0.986019790172577,0.128170698881149,-0.761694371700287\n             ,0.389483571052551,0.517807185649872,-0.887027978897095,0.338621288537979,0.313874155282974,-0.877903461456299\n             ,0.125808238983154,0.462014973163605,0.502047836780548,0.814261257648468,0.291421681642532,0.421662032604218\n             ,0.906709790229797,0.00885869562625885,0.414917647838593,0.779010057449341,0.470092207193375,0.502047836780548\n             ,0.814261257648468,0.291421681642532,0.325284242630005,0.933813154697418,0.148940086364746,0.421662032604218\n             ,0.906709790229797,0.00885869562625885,-0.0681053325533867,-0.345358580350876,-0.935996353626251,0.00452618766576052\n             ,-0.317399501800537,-0.948281109333038,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.554342925548553\n             ,0.567035973072052,0.609240651130676,-0.887027978897095,0.338621288537979,0.313874155282974,-0.684342086315155\n             ,0.70050323009491,0.202413260936737,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.786065578460693\n             ,0.0604399740695953,0.61518120765686,-0.95565664768219,0.128923356533051,0.264762312173843,-0.854032337665558\n             ,0.444255322217941,-0.270676791667938,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.874421000480652\n             ,0.028505390509963,-0.484329789876938,0.199702888727188,0.793615162372589,0.574711859226227,0.0534563846886158\n             ,0.983699679374695,0.171689838171005,0.325284242630005,0.933813154697418,0.148940086364746,-0.263717442750931\n             ,0.775425553321838,0.573731958866119,-0.182774692773819,0.975853502750397,0.119596734642982,-0.106476634740829\n             ,0.986019790172577,0.128170698881149,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.384585797786713\n             ,-0.351018995046616,-0.853744387626648,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.452270448207855\n             ,-0.555824816226959,-0.697502851486206,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.695569396018982\n             ,-0.386790245771408,-0.605455636978149,-0.0402880981564522,-0.602410852909088,0.797168791294098,0.183785125613213\n             ,-0.564789414405823,0.80450975894928,-0.141512751579285,-0.835205972194672,0.531418025493622,0.0345219671726227\n             ,0.469873160123825,0.882058680057526,0.246256619691849,0.328444272279739,0.911856353282928,0.0388557612895966\n             ,0.393748223781586,0.918396770954132,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.430081337690353\n             ,-0.536487519741058,0.726093113422394,-0.0830294638872147,-0.341880321502686,0.93606835603714,-0.560725450515747\n             ,0.635622680187225,-0.530632436275482,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.0824920982122421\n             ,0.586886823177338,-0.805455684661865,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.0801405981183052\n             ,0.901194870471954,0.425940543413162,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.249380812048912\n             ,0.181461036205292,0.951252400875092,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.0534899868071079\n             ,0.977624833583832,-0.203441679477692,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.141158223152161\n             ,0.972466349601746,-0.185427963733673,-0.0638052001595497,0.994221389293671,-0.086329497396946,-0.0801405981183052\n             ,0.901194870471954,0.425940543413162,-0.249380812048912,0.181461036205292,0.951252400875092,-0.0534899868071079\n             ,0.977624833583832,-0.203441679477692,0.665781199932098,0.528658747673035,0.526550352573395,0.545623481273651\n             ,0.394130259752274,0.739564955234528,0.63835346698761,0.527818858623505,0.560278594493866,0.163574278354645,0.575437486171722\n             ,-0.801320910453796,0.132010728120804,0.613032221794128,-0.778950989246368,0.37424498796463,0.138061463832855\n             ,-0.91699492931366,0.253994464874268,0.250187575817108,0.934287428855896,0.0673762187361717,0.208747074007988\n             ,0.975646018981934,0.0454900041222572,0.2624471783638,0.963873505592346,0.938150525093079,-0.0836314186453819\n             ,0.335975229740143,0.918301284313202,-0.218417331576347,0.330176681280136,0.91181892156601,-0.103688038885593\n             ,0.397284656763077,0.385590463876724,-0.303107500076294,-0.871461868286133,0.228939339518547,-0.370276868343353\n             ,-0.900267601013184,0.267562568187714,-0.479633033275604,-0.835680842399597,0.63226306438446,0.224956437945366\n             ,0.741375803947449,0.510494410991669,0.103201098740101,0.853665590286255,0.253994464874268,0.250187575817108\n             ,0.934287428855896,0.482518672943115,-0.357222050428391,-0.799730002880096,0.765287220478058,-0.345726698637009\n             ,-0.542962729930878,0.583753287792206,-0.402651727199554,-0.705055773258209,0.819233179092407,-0.572073757648468\n             ,-0.0398566573858261,0.6322380900383,-0.767571449279785,-0.10539997369051,0.746676325798035,-0.643010795116425\n             ,-0.17032790184021,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0854567661881447,-0.590025365352631\n             ,-0.802849411964417,-0.0738197043538094,-0.58150452375412,-0.810187101364136,0.526131212711334,0.493667006492615\n             ,-0.692444086074829,0.509015023708344,-0.485809624195099,-0.71055805683136,0.578356921672821,-0.429673582315445\n             ,-0.693457901477814,0.140872359275818,-0.399173051118851,-0.905988872051239,0.113550499081612,-0.486260622739792\n             ,-0.866404592990875,0.174190670251846,-0.475461959838867,-0.862318694591522,0.545623481273651,0.394130259752274\n             ,0.739564955234528,0.448167592287064,0.331256568431854,0.830310106277466,0.512751221656799,0.314961016178131\n             ,0.798677444458008,0.448167592287064,0.331256568431854,0.830310106277466,0.352489024400711,0.249785035848618\n             ,0.901864171028137,0.512751221656799,0.314961016178131,0.798677444458008,0.947060525417328,0.264708548784256\n             ,0.181674882769585,0.938301980495453,0.0685238614678383,0.338959902524948,0.671115279197693,0.284787148237228\n             ,0.684471070766449,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.298087060451508,0.801499605178833\n             ,0.518403768539429,-0.406122446060181,0.842904448509216,0.352954238653183,0.0572854578495026,0.523676514625549\n             ,0.849988996982574,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.111158438026905,0.66179496049881\n             ,0.74139815568924,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.406122446060181,0.842904448509216\n             ,0.352954238653183,-0.111158438026905,0.66179496049881,0.74139815568924,0.671115279197693,0.284787148237228,0.684471070766449\n             ,0.448167592287064,0.331256568431854,0.830310106277466,0.545623481273651,0.394130259752274,0.739564955234528\n             ,0.63226306438446,0.224956437945366,0.741375803947449,0.253994464874268,0.250187575817108,0.934287428855896,0.257902681827545\n             ,0.417416572570801,0.871349334716797,0.493177682161331,0.0824330747127533,-0.866014182567596,0.30552539229393\n             ,-0.0599766410887241,-0.950293123722076,0.418020725250244,-0.127127349376678,-0.899498343467712,0.646372437477112\n             ,0.650956153869629,-0.398068875074387,0.424405604600906,0.592946588993073,-0.684320271015167,0.589160740375519\n             ,0.293493062257767,-0.75282895565033,0.141376316547394,0.226959496736526,0.963588178157806,0.037119422107935\n             ,0.39716312289238,0.916997075080872,0.338892996311188,0.40640527009964,0.84852010011673,0.159164875745773,-0.84468400478363\n             ,0.511053323745728,0.114696279168129,-0.973567485809326,0.19751238822937,0.579905271530151,-0.813046872615814\n             ,-0.0516200996935368,0.652710020542145,0.543907403945923,-0.527384459972382,0.837648034095764,0.514832735061646\n             ,-0.182463780045509,0.442993491888046,0.219760671257973,-0.869173228740692,0.368975192308426,0.372379690408707\n             ,0.851581275463104,0.4433753490448,0.161547407507896,0.881657958030701,0.812437415122986,-0.0575567446649075\n             ,0.580200552940369,0.338892996311188,0.40640527009964,0.84852010011673,0.554449737071991,0.577977955341339,0.598771214485168\n             ,0.737872421741486,0.632259011268616,0.236204952001572,0.159164875745773,-0.84468400478363,0.511053323745728\n             ,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.663097739219666,-0.724811255931854,0.186949267983437\n             ,-0.027174474671483,-0.150700747966766,-0.988205909729004,0.418020725250244,-0.127127349376678,-0.899498343467712\n             ,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.0589214377105236,0.108213946223259,-0.99237996339798\n             ,-0.248638898134232,0.048121701925993,-0.967400133609772,-0.027174474671483,-0.150700747966766,-0.988205909729004\n             ,-0.103349760174751,-0.10200422257185,-0.989400804042816,-0.263506501913071,-0.108145013451576,-0.958576560020447\n             ,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.421276032924652,-0.302525490522385,-0.854988157749176\n             ,0.789066255092621,-0.467570185661316,-0.398437708616257,0.54582554101944,-0.560542941093445,-0.622788965702057\n             ,0.0589214377105236,0.108213946223259,-0.99237996339798,-0.027174474671483,-0.150700747966766,-0.988205909729004\n             ,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.424405604600906,0.592946588993073,-0.684320271015167\n             ,0.318493723869324,0.728740870952606,-0.606216490268707,0.266342312097549,0.6069176197052,-0.748807609081268\n             ,0.583753287792206,-0.402651727199554,-0.705055773258209,0.765287220478058,-0.345726698637009,-0.542962729930878\n             ,0.623417019844055,-0.452671766281128,-0.637526035308838,0.0439913086593151,-0.675665616989136,-0.735894501209259\n             ,0.647948265075684,-0.685174643993378,-0.332714289426804,0.254503726959229,-0.798789858818054,-0.545126259326935\n             ,0.654802083969116,-0.347440212965012,0.67120748758316,0.685809075832367,-0.12582391500473,0.716822326183319\n             ,0.164040550589561,0.209489807486534,0.963952660560608,0.201858729124069,0.87289696931839,0.444189012050629,-0.00299930199980736\n             ,0.929396331310272,0.36907109618187,0.164040550589561,0.209489807486534,0.963952660560608,0.618469655513763,0.424896746873856\n             ,0.661028027534485,0.201858729124069,0.87289696931839,0.444189012050629,0.164040550589561,0.209489807486534,0.963952660560608\n             ,0.842455089092255,-0.136532187461853,-0.521179795265198,0.92408949136734,-0.175655707716942,0.339416593313217\n             ,0.0516201481223106,0.961737930774689,-0.26906418800354,0.685809075832367,-0.12582391500473,0.716822326183319\n             ,0.618469655513763,0.424896746873856,0.661028027534485,0.164040550589561,0.209489807486534,0.963952660560608\n             ,0.646372437477112,0.650956153869629,-0.398068875074387,0.318493723869324,0.728740870952606,-0.606216490268707\n             ,0.424405604600906,0.592946588993073,-0.684320271015167,0.661977589130402,-0.708897471427917,-0.243413314223289\n             ,0.29490727186203,-0.85530948638916,-0.425999224185944,0.375436156988144,-0.682113528251648,-0.627510011196136\n             ,0.685486555099487,0.727433860301971,-0.0307916849851608,0.745590567588806,0.664693832397461,0.047716099768877\n             ,0.554396212100983,0.801354885101318,0.224666863679886,0.0825407654047012,0.994074046611786,0.0707375407218933\n             ,0.185543641448021,0.976534903049469,0.10933043807745,-0.20431387424469,0.977353155612946,-0.0551062189042568\n             ,0.858800172805786,0.271537780761719,0.434430092573166,0.938301980495453,0.0685238614678383,0.338959902524948\n             ,0.947060525417328,0.264708548784256,0.181674882769585,-0.406122446060181,0.842904448509216,0.352954238653183\n             ,-0.298087060451508,0.801499605178833,0.518403768539429,-0.358905464410782,0.931329369544983,0.0617449507117271\n             ,-0.406122446060181,0.842904448509216,0.352954238653183,-0.358905464410782,0.931329369544983,0.0617449507117271\n             ,-0.243022814393044,0.95173841714859,0.187440201640129,0.0646723359823227,-0.342740118503571,-0.937201499938965\n             ,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.00791200343519449,-0.3136927485466,-0.949491560459137\n             ,0.665781199932098,0.528658747673035,0.526550352573395,0.761567413806915,0.64221316576004,0.0870478227734566\n             ,0.947060525417328,0.264708548784256,0.181674882769585,0.971711039543152,-0.0647541359066963,0.227122470736504\n             ,0.980262100696564,0.00691105145961046,0.197581350803375,0.813431859016418,0.0690318197011948,0.577549338340759\n             ,0.895810067653656,0.254065722227097,-0.364657372236252,0.842455089092255,-0.136532187461853,-0.521179795265198\n             ,0.585361659526825,0.51231449842453,-0.628399193286896,-0.0702482014894485,0.80213338136673,0.592998504638672\n             ,-0.243022814393044,0.95173841714859,0.187440201640129,0.0319873727858067,0.984376490116119,0.173146665096283\n             ,0.386715173721313,0.754913926124573,0.529675722122192,0.185543641448021,0.976534903049469,0.10933043807745,0.259856075048447\n             ,0.961204409599304,0.0925252288579941,0.303897142410278,-0.58835905790329,-0.749319791793823,0.509015023708344\n             ,-0.485809624195099,-0.71055805683136,0.230070114135742,-0.386967688798904,-0.89292985200882,0.303897142410278\n             ,-0.58835905790329,-0.749319791793823,0.578356921672821,-0.429673582315445,-0.693457901477814,0.509015023708344\n             ,-0.485809624195099,-0.71055805683136,0.114696279168129,-0.973567485809326,0.19751238822937,0.159164875745773\n             ,-0.84468400478363,0.511053323745728,-0.087286576628685,-0.801884651184082,0.591068506240845,0.527580142021179\n             ,-0.0869907140731812,0.845039546489716,0.0832947567105293,-0.342013299465179,0.935996174812317,0.430274456739426\n             ,-0.536508023738861,0.725963473320007,0.585361659526825,0.51231449842453,-0.628399193286896,0.0456644557416439\n             ,0.4627845287323,-0.885293841362,0.895810067653656,0.254065722227097,-0.364657372236252,0.132751479744911,0.960573315620422\n             ,-0.244286626577377,0.0516201481223106,0.961737930774689,-0.26906418800354,-0.00299930199980736,0.929396331310272\n             ,0.36907109618187,0.164040550589561,0.209489807486534,0.963952660560608,0.0516201481223106,0.961737930774689\n             ,-0.26906418800354,0.92408949136734,-0.175655707716942,0.339416593313217,0.0320413000881672,0.998972654342651\n             ,-0.0320465676486492,0.107348747551441,0.986339747905731,-0.124940805137157,0.141466349363327,0.962726950645447\n             ,-0.230529963970184,-0.00299930199980736,0.929396331310272,0.36907109618187,0.0516201481223106,0.961737930774689\n             ,-0.26906418800354,0.164040550589561,0.209489807486534,0.963952660560608,-0.278887689113617,0.155069842934608\n             ,0.947720944881439,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.0194659624248743,-0.00312843942083418\n             ,0.999805629253387,-0.00995929818600416,0.0271856393665075,0.999580800533295,-0.613169372081757,0.156963154673576\n             ,0.774200141429901,-0.564494132995605,0.336166679859161,0.753882169723511,-0.641344308853149,0.404579341411591\n             ,0.651914894580841,-0.636052131652832,0.114426992833614,0.763114809989929,-0.750942230224609,-0.362746059894562\n             ,0.551816165447235,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.630502700805664,-0.217548668384552\n             ,0.745076417922974,-0.651766121387482,-0.189316362142563,0.734411418437958,-0.672568202018738,-0.34249159693718\n             ,0.656011819839478,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.818475067615509,-0.0781779363751411\n             ,0.569198310375214,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.343512952327728,0.508661150932312\n             ,0.789469838142395,0.00251755584031343,0.621276617050171,0.783587276935577,-0.000752673309762031,0.723128914833069\n             ,0.690712690353394,-0.387391060590744,0.579724550247192,0.716831684112549,-0.555378377437592,0.35284760594368\n             ,0.753029525279999,-0.531420171260834,0.370124280452728,0.761971533298492,-0.617133378982544,0.414651036262512\n             ,0.668738305568695,-0.642749607563019,0.417651236057281,0.642215192317963,-0.555378377437592,0.35284760594368\n             ,0.753029525279999,-0.642749607563019,0.417651236057281,0.642215192317963,-0.641344308853149,0.404579341411591\n             ,0.651914894580841,-0.564494132995605,0.336166679859161,0.753882169723511,-0.0194659624248743,-0.00312843942083418\n             ,0.999805629253387,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.261586844921112,-0.0964996665716171\n             ,0.960343718528748,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.237974777817726,0.331118106842041\n             ,0.913087487220764,-0.273963540792465,0.203753486275673,0.939908742904663,0.00488811917603016,0.0790495574474335\n             ,0.996858716011047,0.00906203780323267,0.313269138336182,0.949621140956879,-0.617133378982544,0.414651036262512\n             ,0.668738305568695,-0.531420171260834,0.370124280452728,0.761971533298492,-0.343512952327728,0.508661150932312\n             ,0.789469838142395,-0.387391060590744,0.579724550247192,0.716831684112549,-0.273963540792465,0.203753486275673\n             ,0.939908742904663,-0.278887689113617,0.155069842934608,0.947720944881439,-0.00995929818600416,0.0271856393665075\n             ,0.999580800533295,0.00488811917603016,0.0790495574474335,0.996858716011047,0.230391070246696,-0.334940761327744\n             ,0.913638114929199,-0.308693647384644,-0.0323835387825966,0.950610101222992,-0.363826632499695,-0.186291873455048\n             ,0.912647545337677,-0.1506307721138,-0.438284873962402,0.886124551296234,0.0855588167905808,-0.00326380506157875\n             ,0.996327757835388,0.270083338022232,0.0848804861307144,0.959088265895844,0.283566653728485,0.161925837397575\n             ,0.945182502269745,0.083267405629158,0.0343488194048405,0.995935082435608,0.634447515010834,0.382206737995148\n             ,0.671858906745911,0.563284993171692,0.310863167047501,0.765554785728455,0.58095771074295,0.129276961088181,0.803601682186127\n             ,0.640639364719391,0.166238233447075,0.749630630016327,0.756035923957825,-0.331106662750244,0.56460428237915\n             ,0.663084924221039,-0.243456080555916,0.707847118377686,0.597107112407684,-0.194828405976295,0.778142035007477\n             ,0.672916948795319,-0.2681784927845,0.689393281936646,0.865743160247803,-0.106940761208534,0.488929957151413\n             ,0.758550822734833,-0.0895375981926918,0.645432889461517,0.763749420642853,-0.150436565279961,0.627738535404205\n             ,0.980335772037506,-0.188939213752747,-0.056953851133585,-0.0552290044724941,-0.859539985656738,0.508075475692749\n             ,0.352704226970673,-0.858029365539551,-0.373343408107758,0.396026074886322,-0.763220906257629,0.510545969009399\n             ,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.000752673309762031,0.723128914833069,0.690712690353394\n             ,0.00251755584031343,0.621276617050171,0.783587276935577,0.349495083093643,0.501587808132172,0.791367709636688\n             ,0.386756360530853,0.580943465232849,0.716187238693237,0.55474841594696,0.352636069059372,0.753592729568481,0.642712593078613\n             ,0.417624264955521,0.642269790172577,0.6171053647995,0.41465026140213,0.668764650821686,0.533473014831543,0.369999885559082\n             ,0.760596215724945,0.634447515010834,0.382206737995148,0.671858906745911,0.642712593078613,0.417624264955521\n             ,0.642269790172577,0.55474841594696,0.352636069059372,0.753592729568481,0.563284993171692,0.310863167047501,0.765554785728455\n             ,0.269184499979019,-0.069842740893364,0.96055281162262,0.270083338022232,0.0848804861307144,0.959088265895844\n             ,0.0855588167905808,-0.00326380506157875,0.996327757835388,0.095149926841259,-0.00452130474150181,0.995452702045441\n             ,0.34773051738739,-0.0993074625730515,0.932320535182953,0.403341591358185,-0.0460353009402752,0.913890719413757\n             ,-0.186641603708267,-0.111381784081459,0.976093769073486,-0.323701471090317,-0.00802869722247124,0.946125209331512\n             ,0.205443143844604,0.26053661108017,0.943352401256561,0.00906203780323267,0.313269138336182,0.949621140956879\n             ,0.00488811917603016,0.0790495574474335,0.996858716011047,0.0908891633152962,0.0803348198533058,0.992615461349487\n             ,0.349495083093643,0.501587808132172,0.791367709636688,0.533473014831543,0.369999885559082,0.760596215724945\n             ,0.6171053647995,0.41465026140213,0.668764650821686,0.386756360530853,0.580943465232849,0.716187238693237,0.0908891633152962\n             ,0.0803348198533058,0.992615461349487,0.00488811917603016,0.0790495574474335,0.996858716011047,-0.00995929818600416\n             ,0.0271856393665075,0.999580800533295,0.083267405629158,0.0343488194048405,0.995935082435608,0.681668698787689\n             ,-0.471610575914383,-0.559384763240814,0.980335772037506,-0.188939213752747,-0.056953851133585,0.763749420642853\n             ,-0.150436565279961,0.627738535404205,0.663369238376617,-0.460236370563507,0.590020060539246,0.422998309135437\n             ,-0.288532286882401,0.858965337276459,0.34773051738739,-0.0993074625730515,0.932320535182953,-0.20400233566761\n             ,0.056657962501049,0.97732949256897,0.231048971414566,-0.393600910902023,0.889772295951843,0.663369238376617\n             ,-0.460236370563507,0.590020060539246,0.396026074886322,-0.763220906257629,0.510545969009399,0.352704226970673\n             ,-0.858029365539551,-0.373343408107758,0.681668698787689,-0.471610575914383,-0.559384763240814,-0.186641603708267\n             ,-0.111381784081459,0.976093769073486,0.269184499979019,-0.069842740893364,0.96055281162262,0.0906060114502907\n             ,0.000123244855785742,0.99588680267334,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.0486040636897087\n             ,-0.42794406414032,0.902497410774231,-0.132798001170158,0.175962328910828,0.975398361682892,-0.434367448091507\n             ,0.0498845726251602,0.899353325366974,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.312857300043106\n             ,-0.0701114386320114,0.947208881378174,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.757822096347809\n             ,-0.00610118778422475,0.652432680130005,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.0225364938378334\n             ,-0.576714694499969,0.816634714603424,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.385932207107544\n             ,-0.757268369197845,-0.526878535747528,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.764558732509613\n             ,-0.46812915802002,-0.443063259124756,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.312857300043106\n             ,-0.0701114386320114,0.947208881378174,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.227696925401688\n             ,-0.449939787387848,0.863544046878815,-0.398337602615356,0.261720597743988,0.879107236862183,-0.312857300043106\n             ,-0.0701114386320114,0.947208881378174,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.385932207107544\n             ,-0.757268369197845,-0.526878535747528,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.494366526603699\n             ,-0.309805452823639,0.812171339988709,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.545051276683807\n             ,-0.206261366605759,0.812634825706482,-0.398337602615356,0.261720597743988,0.879107236862183,-0.664829790592194\n             ,0.592853784561157,0.454451024532318,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.398337602615356\n             ,0.261720597743988,0.879107236862183,-0.545051276683807,-0.206261366605759,0.812634825706482,0.462544351816177\n             ,-0.573750495910645,0.675916492938995,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.373196601867676\n             ,-0.775050580501556,0.509922385215759,0.462544351816177,-0.573750495910645,0.675916492938995,-0.545051276683807\n             ,-0.206261366605759,0.812634825706482,-0.789819777011871,-0.316357046365738,0.525454998016357,0.373196601867676\n             ,-0.775050580501556,0.509922385215759,0.692745566368103,-0.565952122211456,0.446991920471191,0.828352034091949\n             ,-0.389868885278702,0.402287393808365,0.462544351816177,-0.573750495910645,0.675916492938995,0.462544351816177\n             ,-0.573750495910645,0.675916492938995,0.243750929832459,-0.884264886379242,0.398322850465775,-0.241606667637825\n             ,-0.822853565216064,0.514332830905914,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.398337602615356\n             ,0.261720597743988,0.879107236862183,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.841920852661133\n             ,-0.371541500091553,0.391313314437866,-0.889869391918182,0.231929391622543,0.39286282658577,-0.664829790592194\n             ,0.592853784561157,0.454451024532318,-0.398337602615356,0.261720597743988,0.879107236862183,-0.49268251657486\n             ,0.733969807624817,0.467495709657669,-0.434220999479294,0.787271618843079,0.437784820795059,-0.775861084461212\n             ,-0.47871196269989,0.410943329334259,-0.664829790592194,0.592853784561157,0.454451024532318,-0.824626564979553\n             ,0.277553707361221,0.492904603481293,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.789819777011871\n             ,-0.316357046365738,0.525454998016357,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.883911490440369\n             ,0.0454356893897057,0.465441823005676,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.789819777011871\n             ,-0.316357046365738,0.525454998016357,-0.627400159835815,-0.604899108409882,0.490373462438583,0.0565900318324566\n             ,-0.86772346496582,0.493815332651138,0.373196601867676,-0.775050580501556,0.509922385215759,0.0855588167905808\n             ,-0.00326380506157875,0.996327757835388,0.083267405629158,0.0343488194048405,0.995935082435608,-0.00995929818600416\n             ,0.0271856393665075,0.999580800533295,-0.0194659624248743,-0.00312843942083418,0.999805629253387,0.095149926841259\n             ,-0.00452130474150181,0.995452702045441,0.0855588167905808,-0.00326380506157875,0.996327757835388,-0.0194659624248743\n             ,-0.00312843942083418,0.999805629253387,-0.041683241724968,-0.0278020035475492,0.998744010925293,0.264413386583328\n             ,0.205984830856323,0.942154884338379,0.0908891633152962,0.0803348198533058,0.992615461349487,0.083267405629158\n             ,0.0343488194048405,0.995935082435608,0.283566653728485,0.161925837397575,0.945182502269745,-0.170626193284988\n             ,-0.221982836723328,0.960005402565002,-0.294902235269547,-0.00327466218732297,0.955521821975708,-0.552981913089752\n             ,0.0302376579493284,0.832644402980804,-0.403701454401016,-0.278951406478882,0.87132728099823,-0.132798001170158\n             ,0.175962328910828,0.975398361682892,-0.0486040636897087,-0.42794406414032,0.902497410774231,0.231048971414566\n             ,-0.393600910902023,0.889772295951843,-0.20400233566761,0.056657962501049,0.97732949256897,-0.775861084461212\n             ,-0.47871196269989,0.410943329334259,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.684404134750366\n             ,-0.533953189849854,0.496472477912903,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.054779440164566\n             ,-0.293895661830902,0.954266488552094,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.308693647384644\n             ,-0.0323835387825966,0.950610101222992,0.243585184216499,-0.228214547038078,0.942647516727448,-0.883911490440369\n             ,0.0454356893897057,0.465441823005676,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.403701454401016\n             ,-0.278951406478882,0.87132728099823,-0.552981913089752,0.0302376579493284,0.832644402980804,-0.586991429328918\n             ,-0.31607523560524,0.745343863964081,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.225288927555084\n             ,-0.849879503250122,0.476392418146133,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.213104128837585\n             ,-0.584437012672424,0.782955944538116,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.672568202018738\n             ,-0.34249159693718,0.656011819839478,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.261586844921112\n             ,-0.0964996665716171,0.960343718528748,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.749688327312469\n             ,-0.105248801410198,0.653368294239044,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.758550822734833\n             ,-0.0895375981926918,0.645432889461517,0.672916948795319,-0.2681784927845,0.689393281936646,0.269184499979019\n             ,-0.069842740893364,0.96055281162262,0.403341591358185,-0.0460353009402752,0.913890719413757,0.662317752838135\n             ,-0.689115524291992,0.294032365083694,0.828352034091949,-0.389868885278702,0.402287393808365,0.230391070246696\n             ,-0.334940761327744,0.913638114929199,0.243750929832459,-0.884264886379242,0.398322850465775,-0.430613458156586\n             ,-0.0293598677963018,0.902058780193329,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.564494132995605\n             ,0.336166679859161,0.753882169723511,-0.613169372081757,0.156963154673576,0.774200141429901,-0.664681375026703\n             ,-0.304605394601822,0.682212769985199,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.430613458156586\n             ,-0.0293598677963018,0.902058780193329,-0.630502700805664,-0.217548668384552,0.745076417922974,-0.237974777817726\n             ,0.331118106842041,0.913087487220764,0.00906203780323267,0.313269138336182,0.949621140956879,0.00251755584031343\n             ,0.621276617050171,0.783587276935577,-0.343512952327728,0.508661150932312,0.789469838142395,-0.25699707865715\n             ,0.0964793935418129,0.961584210395813,-0.278887689113617,0.155069842934608,0.947720944881439,-0.555378377437592\n             ,0.35284760594368,0.753029525279999,-0.564494132995605,0.336166679859161,0.753882169723511,-0.278887689113617\n             ,0.155069842934608,0.947720944881439,-0.273963540792465,0.203753486275673,0.939908742904663,-0.531420171260834\n             ,0.370124280452728,0.761971533298492,-0.555378377437592,0.35284760594368,0.753029525279999,-0.531420171260834\n             ,0.370124280452728,0.761971533298492,-0.273963540792465,0.203753486275673,0.939908742904663,-0.237974777817726\n             ,0.331118106842041,0.913087487220764,-0.343512952327728,0.508661150932312,0.789469838142395,0.563284993171692\n             ,0.310863167047501,0.765554785728455,0.270083338022232,0.0848804861307144,0.959088265895844,0.428336501121521\n             ,-0.0297424420714378,0.903129696846008,0.58095771074295,0.129276961088181,0.803601682186127,0.428336501121521\n             ,-0.0297424420714378,0.903129696846008,0.269184499979019,-0.069842740893364,0.96055281162262,0.672916948795319\n             ,-0.2681784927845,0.689393281936646,0.597107112407684,-0.194828405976295,0.778142035007477,0.00251755584031343\n             ,0.621276617050171,0.783587276935577,0.00906203780323267,0.313269138336182,0.949621140956879,0.205443143844604\n             ,0.26053661108017,0.943352401256561,0.349495083093643,0.501587808132172,0.791367709636688,0.55474841594696,0.352636069059372\n             ,0.753592729568481,0.283566653728485,0.161925837397575,0.945182502269745,0.270083338022232,0.0848804861307144\n             ,0.959088265895844,0.563284993171692,0.310863167047501,0.765554785728455,0.34773051738739,-0.0993074625730515\n             ,0.932320535182953,0.422998309135437,-0.288532286882401,0.858965337276459,0.663369238376617,-0.460236370563507\n             ,0.590020060539246,0.763749420642853,-0.150436565279961,0.627738535404205,0.396026074886322,-0.763220906257629\n             ,0.510545969009399,0.663369238376617,-0.460236370563507,0.590020060539246,0.422998309135437,-0.288532286882401\n             ,0.858965337276459,0.231048971414566,-0.393600910902023,0.889772295951843,0.533473014831543,0.369999885559082\n             ,0.760596215724945,0.264413386583328,0.205984830856323,0.942154884338379,0.283566653728485,0.161925837397575\n             ,0.945182502269745,0.55474841594696,0.352636069059372,0.753592729568481,-0.867058575153351,-0.260521769523621\n             ,0.424662053585052,-0.824626564979553,0.277553707361221,0.492904603481293,-0.323701471090317,-0.00802869722247124\n             ,0.946125209331512,-0.186641603708267,-0.111381784081459,0.976093769073486,0.205443143844604,0.26053661108017\n             ,0.943352401256561,0.264413386583328,0.205984830856323,0.942154884338379,0.533473014831543,0.369999885559082\n             ,0.760596215724945,0.349495083093643,0.501587808132172,0.791367709636688,-0.434220999479294,0.787271618843079\n             ,0.437784820795059,-0.49268251657486,0.733969807624817,0.467495709657669,-0.307226657867432,0.378487527370453\n             ,0.873131692409515,-0.132798001170158,0.175962328910828,0.975398361682892,-0.89117294549942,0.00654474506154656\n             ,0.453616559505463,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.552981913089752,0.0302376579493284\n             ,0.832644402980804,-0.294902235269547,-0.00327466218732297,0.955521821975708,0.0565900318324566,-0.86772346496582\n             ,0.493815332651138,-0.627400159835815,-0.604899108409882,0.490373462438583,-0.20392233133316,-0.215887486934662\n             ,0.954886496067047,-0.054779440164566,-0.293895661830902,0.954266488552094,0.828352034091949,-0.389868885278702\n             ,0.402287393808365,0.692745566368103,-0.565952122211456,0.446991920471191,0.243585184216499,-0.228214547038078\n             ,0.942647516727448,0.230391070246696,-0.334940761327744,0.913638114929199,0.403341591358185,-0.0460353009402752\n             ,0.913890719413757,0.34773051738739,-0.0993074625730515,0.932320535182953,0.763749420642853,-0.150436565279961\n             ,0.627738535404205,0.758550822734833,-0.0895375981926918,0.645432889461517,-0.483883440494537,-0.269137471914291\n             ,0.832719504833221,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.889869391918182,0.231929391622543\n             ,0.39286282658577,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.749688327312469,-0.105248801410198\n             ,0.653368294239044,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.363826632499695,-0.186291873455048\n             ,0.912647545337677,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.243750929832459,-0.884264886379242\n             ,0.398322850465775,0.230391070246696,-0.334940761327744,0.913638114929199,-0.1506307721138,-0.438284873962402\n             ,0.886124551296234,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.403701454401016,-0.278951406478882\n             ,0.87132728099823,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.624233663082123,-0.653565049171448\n             ,0.428001224994659,-0.170626193284988,-0.221982836723328,0.960005402565002,0.231048971414566,-0.393600910902023\n             ,0.889772295951843,-0.0486040636897087,-0.42794406414032,0.902497410774231,-0.225288927555084,-0.849879503250122\n             ,0.476392418146133,0.396026074886322,-0.763220906257629,0.510545969009399,-0.054779440164566,-0.293895661830902\n             ,0.954266488552094,0.243585184216499,-0.228214547038078,0.942647516727448,0.692745566368103,-0.565952122211456\n             ,0.446991920471191,0.0565900318324566,-0.86772346496582,0.493815332651138,-0.624233663082123,-0.653565049171448\n             ,0.428001224994659,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.186641603708267,-0.111381784081459\n             ,0.976093769073486,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.294902235269547,-0.00327466218732297\n             ,0.955521821975708,-0.20392233133316,-0.215887486934662,0.954886496067047,-0.627400159835815,-0.604899108409882\n             ,0.490373462438583,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.307226657867432,0.378487527370453\n             ,0.873131692409515,-0.49268251657486,0.733969807624817,0.467495709657669,-0.889869391918182,0.231929391622543\n             ,0.39286282658577,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.841920852661133,-0.371541500091553\n             ,0.391313314437866,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.0486040636897087,-0.42794406414032\n             ,0.902497410774231,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.434220999479294,0.787271618843079\n             ,0.437784820795059,-0.132798001170158,0.175962328910828,0.975398361682892,-0.20400233566761,0.056657962501049\n             ,0.97732949256897,-0.824626564979553,0.277553707361221,0.492904603481293,-0.363826632499695,-0.186291873455048\n             ,0.912647545337677,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.241606667637825,-0.822853565216064\n             ,0.514332830905914,-0.1506307721138,-0.438284873962402,0.886124551296234,0.095149926841259,-0.00452130474150181\n             ,0.995452702045441,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.20392233133316,-0.215887486934662\n             ,0.954886496067047,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.613169372081757,0.156963154673576\n             ,0.774200141429901,-0.636052131652832,0.114426992833614,0.763114809989929,-0.651766121387482,-0.189316362142563\n             ,0.734411418437958,-0.630502700805664,-0.217548668384552,0.745076417922974,-0.749688327312469,-0.105248801410198\n             ,0.653368294239044,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.750942230224609,-0.362746059894562\n             ,0.551816165447235,-0.818475067615509,-0.0781779363751411,0.569198310375214,0.640639364719391,0.166238233447075\n             ,0.749630630016327,0.58095771074295,0.129276961088181,0.803601682186127,0.597107112407684,-0.194828405976295\n             ,0.778142035007477,0.663084924221039,-0.243456080555916,0.707847118377686,0.756035923957825,-0.331106662750244\n             ,0.56460428237915,0.672916948795319,-0.2681784927845,0.689393281936646,0.758550822734833,-0.0895375981926918\n             ,0.645432889461517,0.865743160247803,-0.106940761208534,0.488929957151413,-0.398337602615356,0.261720597743988\n             ,0.879107236862183,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.0225364938378334,-0.576714694499969\n             ,0.816634714603424,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.000114999507786706,0.00247487379238009\n             ,-0.999996960163116,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.385932207107544,-0.757268369197845\n             ,-0.526878535747528,-0.00530534936115146,0.00112179282587022,-0.99998527765274,-0.000114999507786706,0.00247487379238009\n             ,-0.999996960163116,0.00490783946588635,0.00122942065354437,-0.999987185001373,0.352704226970673,-0.858029365539551\n             ,-0.373343408107758,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.636052131652832,0.114426992833614\n             ,0.763114809989929,-0.504159510135651,-0.0417646616697311,0.862600088119507,-0.651766121387482,-0.189316362142563\n             ,0.734411418437958,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.261586844921112,-0.0964996665716171\n             ,0.960343718528748,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.041683241724968,-0.0278020035475492\n             ,0.998744010925293,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.054779440164566,-0.293895661830902\n             ,0.954266488552094,0.243585184216499,-0.228214547038078,0.942647516727448,-0.308693647384644,-0.0323835387825966\n             ,0.950610101222992,0.230391070246696,-0.334940761327744,0.913638114929199,0.428336501121521,-0.0297424420714378\n             ,0.903129696846008,0.270083338022232,0.0848804861307144,0.959088265895844,0.269184499979019,-0.069842740893364\n             ,0.96055281162262,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.20400233566761,0.056657962501049\n             ,0.97732949256897,0.34773051738739,-0.0993074625730515,0.932320535182953,0.403341591358185,-0.0460353009402752\n             ,0.913890719413757,0.269184499979019,-0.069842740893364,0.96055281162262,-0.186641603708267,-0.111381784081459\n             ,0.976093769073486,-0.307226657867432,0.378487527370453,0.873131692409515,-0.434367448091507,0.0498845726251602\n             ,0.899353325366974,-0.132798001170158,0.175962328910828,0.975398361682892,-0.20392233133316,-0.215887486934662\n             ,0.954886496067047,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.054779440164566,-0.293895661830902\n             ,0.954266488552094,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.697269201278687,-0.168340444564819\n             ,0.696761846542358,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.0908891633152962,0.0803348198533058\n             ,0.992615461349487,0.264413386583328,0.205984830856323,0.942154884338379,0.205443143844604,0.26053661108017,0.943352401256561\n             ,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.294902235269547,-0.00327466218732297,0.955521821975708\n             ,-0.170626193284988,-0.221982836723328,0.960005402565002,0.0906060114502907,0.000123244855785742,0.99588680267334\n             ,0.269184499979019,-0.069842740893364,0.96055281162262,0.095149926841259,-0.00452130474150181,0.995452702045441\n             ,-0.0552290044724941,-0.859539985656738,0.508075475692749,0.0383354164659977,-0.957559168338776,-0.285676121711731\n             ,0.352704226970673,-0.858029365539551,-0.373343408107758,-0.818475067615509,-0.0781779363751411,0.569198310375214\n             ,-0.757822096347809,-0.00610118778422475,0.652432680130005,-0.697269201278687,-0.168340444564819,0.696761846542358\n             ,-0.294902235269547,-0.00327466218732297,0.955521821975708,0.0906060114502907,0.000123244855785742,0.99588680267334\n             ,-0.20392233133316,-0.215887486934662,0.954886496067047,0.0565900318324566,-0.86772346496582,0.493815332651138\n             ,0.692745566368103,-0.565952122211456,0.446991920471191,0.373196601867676,-0.775050580501556,0.509922385215759\n             ,-0.889869391918182,0.231929391622543,0.39286282658577,-0.49268251657486,0.733969807624817,0.467495709657669\n             ,-0.398337602615356,0.261720597743988,0.879107236862183,-0.434220999479294,0.787271618843079,0.437784820795059\n             ,-0.824626564979553,0.277553707361221,0.492904603481293,-0.664829790592194,0.592853784561157,0.454451024532318\n             ,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.627400159835815,-0.604899108409882,0.490373462438583\n             ,-0.789819777011871,-0.316357046365738,0.525454998016357,-0.867058575153351,-0.260521769523621,0.424662053585052\n             ,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.775861084461212,-0.47871196269989,0.410943329334259\n             ,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.824626564979553,0.277553707361221,0.492904603481293\n             ,-0.20400233566761,0.056657962501049,0.97732949256897,0.462544351816177,-0.573750495910645,0.675916492938995\n             ,0.662317752838135,-0.689115524291992,0.294032365083694,0.243750929832459,-0.884264886379242,0.398322850465775\n             ,0.828352034091949,-0.389868885278702,0.402287393808365,0.662317752838135,-0.689115524291992,0.294032365083694\n             ,0.462544351816177,-0.573750495910645,0.675916492938995,-0.883911490440369,0.0454356893897057,0.465441823005676\n             ,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.684404134750366,-0.533953189849854,0.496472477912903\n             ,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.462544351816177,-0.573750495910645,0.675916492938995\n             ,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.430613458156586,-0.0293598677963018,0.902058780193329\n             ,-0.613169372081757,0.156963154673576,0.774200141429901,-0.630502700805664,-0.217548668384552,0.745076417922974\n             ,0.428336501121521,-0.0297424420714378,0.903129696846008,0.597107112407684,-0.194828405976295,0.778142035007477\n             ,0.58095771074295,0.129276961088181,0.803601682186127,-0.0552290044724941,-0.859539985656738,0.508075475692749\n             ,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.0225364938378334,-0.576714694499969,0.816634714603424\n             ,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.0225364938378334,-0.576714694499969,0.816634714603424\n             ,0.0383354164659977,-0.957559168338776,-0.285676121711731,0.980335772037506,-0.188939213752747,-0.056953851133585\n             ,0.681668698787689,-0.471610575914383,-0.559384763240814,0.00490783946588635,0.00122942065354437,-0.999987185001373\n             ,0.681668698787689,-0.471610575914383,-0.559384763240814,0.352704226970673,-0.858029365539551,-0.373343408107758\n             ,0.00490783946588635,0.00122942065354437,-0.999987185001373,-0.764558732509613,-0.46812915802002,-0.443063259124756\n             ,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.00530534936115146,0.00112179282587022,-0.99998527765274\n             ,-0.385932207107544,-0.757268369197845,-0.526878535747528,-0.764558732509613,-0.46812915802002,-0.443063259124756\n             ,-0.00530534936115146,0.00112179282587022,-0.99998527765274,0.0223364941775799,-0.576743245124817,-0.816620051860809\n             ,-0.685902893543243,-0.71078634262085,0.155948713421822,-0.838969886302948,-0.5302734375,0.122227653861046,-0.130363821983337\n             ,-0.434679388999939,-0.89109992980957,0.381297171115875,-0.692393600940704,-0.612538635730743,0.680035650730133\n             ,-0.698283791542053,-0.223497807979584,-0.452180773019791,-0.878205716609955,0.155843734741211,-0.540568292140961\n             ,-0.817409574985504,0.199066668748856,0.727542281150818,-0.685412287712097,0.0298695731908083,-0.470319867134094\n             ,-0.882218599319458,-0.0221261866390705,-0.452180773019791,-0.878205716609955,0.155843734741211,0.680035650730133\n             ,-0.698283791542053,-0.223497807979584,0.683449149131775,-0.689567506313324,0.239570155739784,-0.449864596128464\n             ,-0.877300322055817,-0.167230501770973,-0.470319867134094,-0.882218599319458,-0.0221261866390705,0.727542281150818\n             ,-0.685412287712097,0.0298695731908083,0.598632395267487,-0.692815542221069,0.402052044868469,-0.421292394399643\n             ,-0.875049769878387,-0.238328784704208,-0.449864596128464,-0.877300322055817,-0.167230501770973,0.683449149131775\n             ,-0.689567506313324,0.239570155739784,0.312898457050323,-0.30317035317421,0.900101244449615,-0.108442008495331\n             ,0.0180171951651573,0.993939459323883,-0.201268136501312,-0.0940669924020767,0.975009024143219,-0.0551113523542881\n             ,-0.341195195913315,0.938375473022461,0.365167140960693,-0.260313987731934,-0.893806219100952,0.123946145176888\n             ,-0.156060710549355,-0.979939997196198,0.376559227705002,0.0804113894701004,-0.922896087169647,0.702634871006012\n             ,0.155434265732765,-0.694366157054901,0.91601550579071,-0.263128757476807,-0.302785158157349,0.670127213001251\n             ,-0.275791883468628,-0.6891068816185,0.806311964988709,0.228450000286102,-0.545592904090881,0.915866374969482\n             ,0.261728912591934,-0.304444909095764,0.966503024101257,-0.253703832626343,0.0388099141418934,0.91601550579071\n             ,-0.263128757476807,-0.302785158157349,0.915866374969482,0.261728912591934,-0.304444909095764,0.966637134552002\n             ,0.25298011302948,0.0401717498898506,0.913093268871307,-0.252991795539856,0.319774568080902,0.966503024101257\n             ,-0.253703832626343,0.0388099141418934,0.966637134552002,0.25298011302948,0.0401717498898506,0.914951086044312\n             ,0.242541939020157,0.322549074888229,0.79538756608963,-0.253331542015076,0.550619423389435,0.913093268871307\n             ,-0.252991795539856,0.319774568080902,0.914951086044312,0.242541939020157,0.322549074888229,0.789637267589569\n             ,0.246989637613297,0.561666369438171,0.763365149497986,-0.125001043081284,0.633757352828979,0.79538756608963\n             ,-0.253331542015076,0.550619423389435,0.789637267589569,0.246989637613297,0.561666369438171,0.419073313474655\n             ,0.202598944306374,0.885060012340546,0.661575853824615,0.331751018762589,-0.672501742839813,0.623564124107361\n             ,0.781771123409271,0.00130499247461557,0.796620786190033,0.575817584991455,-0.183927938342094,0.66670024394989\n             ,0.432952612638474,-0.606681823730469,0.42945009469986,0.892923653125763,-0.135129347443581,0.647005915641785\n             ,0.732552111148834,-0.211543783545494,0.688613891601563,0.692343652248383,-0.215571701526642,0.623564124107361\n             ,0.781771123409271,0.00130499247461557,0.42945009469986,0.892923653125763,-0.135129347443581,0.452374219894409\n             ,0.89155113697052,0.0222298968583345,0.689587533473969,0.723532259464264,0.0311464741826057,0.647005915641785\n             ,0.732552111148834,-0.211543783545494,0.452374219894409,0.89155113697052,0.0222298968583345,0.471769779920578\n             ,0.864407062530518,0.173878565430641,0.6768958568573,0.69471287727356,0.243281871080399,0.689587533473969,0.723532259464264\n             ,0.0311464741826057,0.471769779920578,0.864407062530518,0.173878565430641,0.407848834991455,0.861259400844574\n             ,0.303136229515076,0.582376599311829,0.69311785697937,0.424764811992645,0.6768958568573,0.69471287727356,0.243281871080399\n             ,0.598632395267487,-0.692815542221069,0.402052044868469,0.757855832576752,-0.532335162162781,0.37719202041626\n             ,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.421292394399643,-0.875049769878387,-0.238328784704208\n             ,-0.185590207576752,0.0829386487603188,0.979120790958405,-0.108442008495331,0.0180171951651573,0.993939459323883\n             ,0.532896935939789,0.0133537920191884,0.846074759960175,0.419073313474655,0.202598944306374,0.885060012340546\n             ,0.407848834991455,0.861259400844574,0.303136229515076,0.135122209787369,0.838861703872681,0.527307271957397\n             ,0.315021455287933,0.667639553546906,0.674550950527191,0.582376599311829,0.69311785697937,0.424764811992645,-0.949683308601379\n             ,-0.00300553464330733,-0.313197374343872,-0.873431265354156,-0.446991860866547,0.193173810839653,-0.480726420879364\n             ,-0.269600003957748,0.834396779537201,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.949683308601379\n             ,-0.00300553464330733,-0.313197374343872,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.515409469604492\n             ,0.101915791630745,0.850862085819244,-0.683583498001099,0.133054658770561,0.71764200925827,-0.362329810857773\n             ,0.579764425754547,0.729787826538086,-0.633079648017883,0.295362114906311,0.71552175283432,-0.448814660310745\n             ,0.224063515663147,0.865078568458557,-0.152529567480087,0.450641930103302,0.87957751750946,-0.226269230246544\n             ,-0.722853541374207,-0.652904987335205,0.171032205224037,-0.919270157814026,0.354528367519379,-0.198421195149422\n             ,-0.758837580680847,0.620318114757538,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.0536522269248962\n             ,-0.227453172206879,-0.97230988740921,0.967476725578308,-0.220996707677841,0.12308245152235,0.935926675796509\n             ,-0.349802911281586,0.040978018194437,0.577395439147949,-0.441121131181717,-0.687041938304901,0.806311964988709\n             ,0.228450000286102,-0.545592904090881,0.670127213001251,-0.275791883468628,-0.6891068816185,0.365167140960693\n             ,-0.260313987731934,-0.893806219100952,0.702634871006012,0.155434265732765,-0.694366157054901,0.381297171115875\n             ,-0.692393600940704,-0.612538635730743,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.685902893543243\n             ,-0.71078634262085,0.155948713421822,0.0223364941775799,-0.576743245124817,-0.816620051860809,-0.257767707109451\n             ,-0.179750084877014,-0.949339628219604,-0.850510120391846,-0.227078184485435,-0.474413365125656,-0.550249099731445\n             ,0.0241546873003244,-0.834651112556458,-0.303164839744568,0.00688559422269464,-0.952913224697113,0.151356309652328\n             ,0.151358395814896,-0.976822376251221,0.129860803484917,0.240213453769684,-0.961994647979736,-0.246528506278992\n             ,0.0864357575774193,-0.965273320674896,-0.476255148649216,0.154200553894043,-0.865680813789368,0.585507750511169\n             ,-0.785169541835785,0.201716393232346,0.171032205224037,-0.919270157814026,0.354528367519379,-0.226269230246544\n             ,-0.722853541374207,-0.652904987335205,-0.0988442227244377,-0.676099538803101,-0.730150103569031,0.842067956924438\n             ,-0.0588998831808567,0.536145865917206,0.532896935939789,0.0133537920191884,0.846074759960175,0.752812325954437\n             ,-0.289424031972885,0.591191411018372,0.883874535560608,-0.163575857877731,0.438188046216965,0.532896935939789\n             ,0.0133537920191884,0.846074759960175,0.763365149497986,-0.125001043081284,0.633757352828979,0.419073313474655\n             ,0.202598944306374,0.885060012340546,-0.207103610038757,-0.83615118265152,-0.507896959781647,0.757855832576752\n             ,-0.532335162162781,0.37719202041626,0.967476725578308,-0.220996707677841,0.12308245152235,-0.0536522269248962\n             ,-0.227453172206879,-0.97230988740921,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.873431265354156\n             ,-0.446991860866547,0.193173810839653,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.198421195149422\n             ,-0.758837580680847,0.620318114757538,0.935926675796509,-0.349802911281586,0.040978018194437,0.585507750511169\n             ,-0.785169541835785,0.201716393232346,-0.0988442227244377,-0.676099538803101,-0.730150103569031,0.577395439147949\n             ,-0.441121131181717,-0.687041938304901,0.365167140960693,-0.260313987731934,-0.893806219100952,0.0223364941775799\n             ,-0.576743245124817,-0.816620051860809,-0.130363821983337,-0.434679388999939,-0.89109992980957,0.123946145176888\n             ,-0.156060710549355,-0.979939997196198,0.670127213001251,-0.275791883468628,-0.6891068816185,0.91601550579071\n             ,-0.263128757476807,-0.302785158157349,0.680035650730133,-0.698283791542053,-0.223497807979584,0.381297171115875\n             ,-0.692393600940704,-0.612538635730743,0.966503024101257,-0.253703832626343,0.0388099141418934,0.727542281150818\n             ,-0.685412287712097,0.0298695731908083,0.680035650730133,-0.698283791542053,-0.223497807979584,0.91601550579071\n             ,-0.263128757476807,-0.302785158157349,0.966503024101257,-0.253703832626343,0.0388099141418934,0.913093268871307\n             ,-0.252991795539856,0.319774568080902,0.683449149131775,-0.689567506313324,0.239570155739784,0.727542281150818\n             ,-0.685412287712097,0.0298695731908083,0.913093268871307,-0.252991795539856,0.319774568080902,0.79538756608963\n             ,-0.253331542015076,0.550619423389435,0.598632395267487,-0.692815542221069,0.402052044868469,0.683449149131775\n             ,-0.689567506313324,0.239570155739784,0.79538756608963,-0.253331542015076,0.550619423389435,0.763365149497986\n             ,-0.125001043081284,0.633757352828979,0.757855832576752,-0.532335162162781,0.37719202041626,0.598632395267487\n             ,-0.692815542221069,0.402052044868469,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.303164839744568\n             ,0.00688559422269464,-0.952913224697113,0.0183170828968287,-0.00617978628724813,-0.999813139438629,0.123946145176888\n             ,-0.156060710549355,-0.979939997196198,-0.246528506278992,0.0864357575774193,-0.965273320674896,0.129860803484917\n             ,0.240213453769684,-0.961994647979736,0.376559227705002,0.0804113894701004,-0.922896087169647,0.0183170828968287\n             ,-0.00617978628724813,-0.999813139438629,0.796620786190033,0.575817584991455,-0.183927938342094,0.702634871006012\n             ,0.155434265732765,-0.694366157054901,0.376559227705002,0.0804113894701004,-0.922896087169647,0.66670024394989\n             ,0.432952612638474,-0.606681823730469,0.647005915641785,0.732552111148834,-0.211543783545494,0.915866374969482\n             ,0.261728912591934,-0.304444909095764,0.806311964988709,0.228450000286102,-0.545592904090881,0.688613891601563\n             ,0.692343652248383,-0.215571701526642,0.647005915641785,0.732552111148834,-0.211543783545494,0.689587533473969\n             ,0.723532259464264,0.0311464741826057,0.966637134552002,0.25298011302948,0.0401717498898506,0.915866374969482\n             ,0.261728912591934,-0.304444909095764,0.689587533473969,0.723532259464264,0.0311464741826057,0.6768958568573\n             ,0.69471287727356,0.243281871080399,0.914951086044312,0.242541939020157,0.322549074888229,0.966637134552002,0.25298011302948\n             ,0.0401717498898506,0.6768958568573,0.69471287727356,0.243281871080399,0.582376599311829,0.69311785697937,0.424764811992645\n             ,0.789637267589569,0.246989637613297,0.561666369438171,0.914951086044312,0.242541939020157,0.322549074888229\n             ,0.582376599311829,0.69311785697937,0.424764811992645,0.315021455287933,0.667639553546906,0.674550950527191,0.419073313474655\n             ,0.202598944306374,0.885060012340546,0.789637267589569,0.246989637613297,0.561666369438171,-0.512385308742523\n             ,0.0120415911078453,0.858671247959137,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.201268136501312\n             ,-0.0940669924020767,0.975009024143219,-0.108442008495331,0.0180171951651573,0.993939459323883,-0.515409469604492\n             ,0.101915791630745,0.850862085819244,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.108442008495331\n             ,0.0180171951651573,0.993939459323883,-0.185590207576752,0.0829386487603188,0.979120790958405,0.419073313474655\n             ,0.202598944306374,0.885060012340546,-0.152529567480087,0.450641930103302,0.87957751750946,-0.448814660310745\n             ,0.224063515663147,0.865078568458557,-0.185590207576752,0.0829386487603188,0.979120790958405,0.171032205224037\n             ,-0.919270157814026,0.354528367519379,0.312898457050323,-0.30317035317421,0.900101244449615,-0.0551113523542881\n             ,-0.341195195913315,0.938375473022461,-0.198421195149422,-0.758837580680847,0.620318114757538,0.967476725578308\n             ,-0.220996707677841,0.12308245152235,0.842067956924438,-0.0588998831808567,0.536145865917206,0.883874535560608\n             ,-0.163575857877731,0.438188046216965,0.935926675796509,-0.349802911281586,0.040978018194437,0.670127213001251\n             ,-0.275791883468628,-0.6891068816185,0.381297171115875,-0.692393600940704,-0.612538635730743,0.0223364941775799\n             ,-0.576743245124817,-0.816620051860809,0.365167140960693,-0.260313987731934,-0.893806219100952,0.688613891601563\n             ,0.692343652248383,-0.215571701526642,0.806311964988709,0.228450000286102,-0.545592904090881,0.702634871006012\n             ,0.155434265732765,-0.694366157054901,0.796620786190033,0.575817584991455,-0.183927938342094,0.171032205224037\n             ,-0.919270157814026,0.354528367519379,0.585507750511169,-0.785169541835785,0.201716393232346,0.752812325954437\n             ,-0.289424031972885,0.591191411018372,0.312898457050323,-0.30317035317421,0.900101244449615,-0.201268136501312\n             ,-0.0940669924020767,0.975009024143219,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.198421195149422\n             ,-0.758837580680847,0.620318114757538,-0.0551113523542881,-0.341195195913315,0.938375473022461,0.883874535560608\n             ,-0.163575857877731,0.438188046216965,0.752812325954437,-0.289424031972885,0.591191411018372,0.585507750511169\n             ,-0.785169541835785,0.201716393232346,0.935926675796509,-0.349802911281586,0.040978018194437,0.757855832576752\n             ,-0.532335162162781,0.37719202041626,0.763365149497986,-0.125001043081284,0.633757352828979,0.842067956924438\n             ,-0.0588998831808567,0.536145865917206,0.967476725578308,-0.220996707677841,0.12308245152235,0.315021455287933\n             ,0.667639553546906,0.674550950527191,0.135122209787369,0.838861703872681,0.527307271957397,-0.362329810857773\n             ,0.579764425754547,0.729787826538086,-0.152529567480087,0.450641930103302,0.87957751750946,-0.683583498001099\n             ,0.133054658770561,0.71764200925827,-0.515409469604492,0.101915791630745,0.850862085819244,-0.448814660310745\n             ,0.224063515663147,0.865078568458557,-0.633079648017883,0.295362114906311,0.71552175283432,-0.850510120391846\n             ,-0.227078184485435,-0.474413365125656,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.130363821983337\n             ,-0.434679388999939,-0.89109992980957,-0.838969886302948,-0.5302734375,0.122227653861046,0.129860803484917,0.240213453769684\n             ,-0.961994647979736,0.151356309652328,0.151358395814896,-0.976822376251221,0.661575853824615,0.331751018762589\n             ,-0.672501742839813,0.66670024394989,0.432952612638474,-0.606681823730469,-0.476255148649216,0.154200553894043\n             ,-0.865680813789368,-0.246528506278992,0.0864357575774193,-0.965273320674896,-0.303164839744568,0.00688559422269464\n             ,-0.952913224697113,-0.550249099731445,0.0241546873003244,-0.834651112556458,-0.948083400726318,-9.9310447865264e-008\n             ,0.318021833896637,-0.728089213371277,-0.000130440981592983,0.685482382774353,-0.540568292140961,-0.817409574985504\n             ,0.199066668748856,-0.452180773019791,-0.878205716609955,0.155843734741211,-0.999005138874054,6.03368519591641e-008\n             ,-0.0445944853127003,-0.948083400726318,-9.9310447865264e-008,0.318021833896637,-0.452180773019791,-0.878205716609955\n             ,0.155843734741211,-0.470319867134094,-0.882218599319458,-0.0221261866390705,-0.940430045127869,5.90034510139503e-008\n             ,-0.339987248182297,-0.999005138874054,6.03368519591641e-008,-0.0445944853127003,-0.470319867134094,-0.882218599319458\n             ,-0.0221261866390705,-0.449864596128464,-0.877300322055817,-0.167230501770973,-0.852473676204681,-2.95911831926787e-007\n             ,-0.52277010679245,-0.940430045127869,5.90034510139503e-008,-0.339987248182297,-0.449864596128464,-0.877300322055817\n             ,-0.167230501770973,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.728089213371277,-0.000130440981592983\n             ,0.685482382774353,-0.522543489933014,0.0101915588602424,0.852551698684692,-0.685902893543243,-0.71078634262085\n             ,0.155948713421822,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.522543489933014,0.0101915588602424\n             ,0.852551698684692,-0.464085191488266,0.0445687659084797,0.88466864824295,-0.838969886302948,-0.5302734375,0.122227653861046\n             ,-0.685902893543243,-0.71078634262085,0.155948713421822,-0.812868595123291,0.000118661264423281,-0.582447171211243\n             ,-0.852473676204681,-2.95911831926787e-007,-0.52277010679245,-0.421292394399643,-0.875049769878387,-0.238328784704208\n             ,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.472109436988831,-0.00532391341403127,-0.881523847579956\n             ,-0.0988442227244377,-0.676099538803101,-0.730150103569031,-0.226269230246544,-0.722853541374207,-0.652904987335205\n             ,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.472109436988831,-0.00532391341403127,-0.881523847579956\n             ,-0.0536522269248962,-0.227453172206879,-0.97230988740921,0.577395439147949,-0.441121131181717,-0.687041938304901\n             ,-0.0988442227244377,-0.676099538803101,-0.730150103569031,-0.704409718513489,0.000107401865534484,-0.709793627262115\n             ,-0.812868595123291,0.000118661264423281,-0.582447171211243,-0.207103610038757,-0.83615118265152,-0.507896959781647\n             ,-0.0536522269248962,-0.227453172206879,-0.97230988740921,-0.196195036172867,-0.0147135937586427,-0.980454504489899\n             ,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.873431265354156,-0.446991860866547,0.193173810839653\n             ,-0.949683308601379,-0.00300553464330733,-0.313197374343872,0.532896935939789,0.0133537920191884,0.846074759960175\n             ,-0.108442008495331,0.0180171951651573,0.993939459323883,0.312898457050323,-0.30317035317421,0.900101244449615\n             ,0.623564124107361,0.781771123409271,0.00130499247461557,0.688613891601563,0.692343652248383,-0.215571701526642\n             ,0.796620786190033,0.575817584991455,-0.183927938342094,0.312898457050323,-0.30317035317421,0.900101244449615\n             ,0.752812325954437,-0.289424031972885,0.591191411018372,0.532896935939789,0.0133537920191884,0.846074759960175\n             ,0.842067956924438,-0.0588998831808567,0.536145865917206,0.763365149497986,-0.125001043081284,0.633757352828979\n             ,0.532896935939789,0.0133537920191884,0.846074759960175,0.315021455287933,0.667639553546906,0.674550950527191\n             ,-0.152529567480087,0.450641930103302,0.87957751750946,0.419073313474655,0.202598944306374,0.885060012340546\n             ,-0.185590207576752,0.0829386487603188,0.979120790958405,-0.448814660310745,0.224063515663147,0.865078568458557\n             ,-0.515409469604492,0.101915791630745,0.850862085819244,0.151356309652328,0.151358395814896,-0.976822376251221\n             ,0.380553632974625,-0.296130239963531,-0.876062631607056,0.661575853824615,0.331751018762589,-0.672501742839813\n             ,-0.257767707109451,-0.179750084877014,-0.949339628219604,0.123946145176888,-0.156060710549355,-0.979939997196198\n             ,-0.130363821983337,-0.434679388999939,-0.89109992980957,-0.246528506278992,0.0864357575774193,-0.965273320674896\n             ,0.0183170828968287,-0.00617978628724813,-0.999813139438629,-0.303164839744568,0.00688559422269464,-0.952913224697113\n             ,0.66670024394989,0.432952612638474,-0.606681823730469,0.376559227705002,0.0804113894701004,-0.922896087169647\n             ,0.129860803484917,0.240213453769684,-0.961994647979736,-0.838969886302948,-0.5302734375,0.122227653861046,-0.464085191488266\n             ,0.0445687659084797,0.88466864824295,-0.850510120391846,-0.227078184485435,-0.474413365125656,0.376559227705002\n             ,0.0804113894701004,-0.922896087169647,0.123946145176888,-0.156060710549355,-0.979939997196198,0.0183170828968287\n             ,-0.00617978628724813,-0.999813139438629,0.0518634654581547,-0.075635053217411,-0.995785892009735,-0.0710315629839897\n             ,-0.0534634776413441,-0.996040225028992,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.949683308601379\n             ,-0.00300553464330733,-0.313197374343872,-0.461041152477264,-0.00344432867132127,-0.887372076511383,-0.472109436988831\n             ,-0.00532391341403127,-0.881523847579956,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.326529651880264\n             ,-0.00680761877447367,-0.945162415504456,-0.461041152477264,-0.00344432867132127,-0.887372076511383,-0.704409718513489\n             ,0.000107401865534484,-0.709793627262115,-0.0536522269248962,-0.227453172206879,-0.97230988740921,-0.472109436988831\n             ,-0.00532391341403127,-0.881523847579956,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.327883958816528\n             ,-0.01082568988204,-0.944655954837799,-0.226269230246544,-0.722853541374207,-0.652904987335205,-0.391295343637466\n             ,-0.708213090896606,-0.587641179561615,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,-0.326529651880264\n             ,-0.00680761877447367,-0.945162415504456,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.196195036172867\n             ,-0.0147135937586427,-0.980454504489899,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,0.0518634654581547\n             ,-0.075635053217411,-0.995785892009735,0.142189741134644,-0.0967937782406807,-0.9850954413414,-0.0223364103585482\n             ,-0.576743721961975,-0.816619694232941,0.130361214280128,-0.434677690267563,-0.891101121902466,0.839043617248535\n             ,-0.530505955219269,0.120703317224979,0.685371875762939,-0.711494088172913,0.155053615570068,-0.38129711151123\n             ,-0.692395269870758,-0.6125368475914,0.539408206939697,-0.818039894104004,0.199623316526413,0.452180683612823\n             ,-0.878205835819244,0.155843451619148,-0.680036187171936,-0.698283493518829,-0.22349713742733,-0.72754293680191\n             ,-0.68541157245636,0.0298696421086788,-0.680036187171936,-0.698283493518829,-0.22349713742733,0.452180683612823\n             ,-0.878205835819244,0.155843451619148,0.470319837331772,-0.882218599319458,-0.0221268218010664,-0.683448731899261\n             ,-0.68956845998764,0.239568650722504,-0.72754293680191,-0.68541157245636,0.0298696421086788,0.470319837331772\n             ,-0.882218599319458,-0.0221268218010664,0.44986492395401,-0.877299964427948,-0.167231306433678,-0.598632097244263\n             ,-0.69281804561615,0.402048170566559,-0.683448731899261,-0.68956845998764,0.239568650722504,0.44986492395401\n             ,-0.877299964427948,-0.167231306433678,0.421293467283249,-0.875048518180847,-0.238331392407417,0.201270371675491\n             ,-0.0940680578351021,0.975008428096771,0.108443260192871,0.0180166698992252,0.993939340114594,-0.312896370887756\n             ,-0.30316898226738,0.900102436542511,0.0551152527332306,-0.341196656227112,0.938374698162079,-0.199198111891747\n             ,-0.0411539115011692,-0.979094684123993,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.641679227352142\n             ,0.0955243930220604,-0.761001229286194,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.916015803813934\n             ,-0.263128668069839,-0.302784383296967,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.806312918663025\n             ,0.228450119495392,-0.545591473579407,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.966500461101532\n             ,-0.253715485334396,0.0387984029948711,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.915864527225494\n             ,0.261734366416931,-0.304445862770081,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.913034975528717\n             ,-0.253099620342255,0.319855839014053,-0.914388120174408,0.244719073176384,0.32250103354454,-0.966454327106476\n             ,0.253697991371155,0.0400422066450119,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.795308172702789\n             ,-0.253419429063797,0.55069363117218,-0.789120137691498,0.248433187603951,0.561756551265717,-0.914388120174408\n             ,0.244719073176384,0.32250103354454,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.76336532831192\n             ,-0.125000447034836,0.63375723361969,-0.419077694416046,0.202596783638,0.885058403015137,-0.789120137691498,0.248433187603951\n             ,0.561756551265717,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.433125436306,0.08011444658041\n             ,-0.897766172885895,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.676364660263062,0.342619508504868\n             ,-0.652029693126678,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.797359347343445,0.574054718017578\n             ,-0.186223655939102,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.429452449083328,0.892922580242157\n             ,-0.135128989815712,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.688615202903748,0.69234311580658\n             ,-0.215569332242012,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.429452449083328,0.892922580242157\n             ,-0.135128989815712,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.689061939716339,0.724038541316986\n             ,0.0310133062303066,-0.452375322580338,0.891550540924072,0.0222301334142685,-0.452375322580338,0.891550540924072\n             ,0.0222301334142685,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.675342082977295,0.696398377418518\n             ,0.242780566215515,-0.47176668047905,0.864408373832703,0.173880234360695,-0.47176668047905,0.864408373832703\n             ,0.173880234360695,-0.675342082977295,0.696398377418518,0.242780566215515,-0.581114292144775,0.694480895996094\n             ,0.424266964197159,-0.407311707735062,0.861595511436462,0.302903264760971,-0.598632097244263,-0.69281804561615\n             ,0.402048170566559,0.421293467283249,-0.875048518180847,-0.238331392407417,0.207105413079262,-0.836149632930756\n             ,-0.50789874792099,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.532896161079407,0.0133542641997337\n             ,0.846075296401978,0.108443260192871,0.0180166698992252,0.993939340114594,0.185588449239731,0.0829351618885994\n             ,0.979121387004852,-0.419077694416046,0.202596783638,0.885058403015137,-0.407311707735062,0.861595511436462,0.302903264760971\n             ,-0.581114292144775,0.694480895996094,0.424266964197159,-0.315046489238739,0.668025493621826,0.674157023429871\n             ,-0.13514731824398,0.839401423931122,0.526441276073456,0.701747357845306,0.0141455726698041,0.712285459041595\n             ,0.528442323207855,0.0112593621015549,0.848894536495209,0.49128520488739,-0.262695521116257,0.830439567565918\n             ,0.856841146945953,-0.483877241611481,0.178005740046501,0.701747357845306,0.0141455726698041,0.712285459041595\n             ,0.68733537197113,0.112072803080082,0.717641830444336,0.517209410667419,0.0911701247096062,0.850989103317261\n             ,0.528442323207855,0.0112593621015549,0.848894536495209,0.351653456687927,0.578750193119049,0.735790729522705\n             ,0.146949008107185,0.44949945807457,0.881110787391663,0.438047766685486,0.220905914902687,0.871386647224426,0.614956438541412\n             ,0.290624231100082,0.733052670955658,0.204843252897263,-0.720215260982513,-0.66281920671463,0.322322010993958\n             ,-0.727867662906647,-0.605241358280182,0.198422521352768,-0.758837461471558,0.620317757129669,-0.171031460165977\n             ,-0.919269144535065,0.354531347751617,-0.938664674758911,-0.343050718307495,-0.0349972806870937,-0.870814919471741\n             ,-0.427383571863174,-0.242949977517128,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.967477083206177\n             ,-0.220996335148811,0.123080067336559,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.372008502483368\n             ,-0.198910742998123,-0.90666651725769,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.806312918663025\n             ,0.228450119495392,-0.545591473579407,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.0223364103585482\n             ,-0.576743721961975,-0.816619694232941,0.685371875762939,-0.711494088172913,0.155053615570068,0.539408206939697\n             ,-0.818039894104004,0.199623316526413,0.257765382528305,-0.179748728871346,-0.949340522289276,0.304023921489716\n             ,0.0101332226768136,-0.952610492706299,0.551838159561157,0.0304165203124285,-0.833396375179291,0.850508272647858\n             ,-0.227084189653397,-0.474413722753525,-0.178068861365318,0.174752190709114,-0.968376576900482,0.481170386075974\n             ,0.163634076714516,-0.861219465732574,0.249399721622467,0.0914280638098717,-0.964075088500977,-0.131680130958557\n             ,0.240106955170631,-0.961773872375488,-0.585506916046143,-0.7851682305336,0.201723843812943,0.0860703811049461\n             ,-0.674501478672028,-0.73323917388916,0.204843252897263,-0.720215260982513,-0.66281920671463,-0.171031460165977\n             ,-0.919269144535065,0.354531347751617,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.532896161079407\n             ,0.0133542641997337,0.846075296401978,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.883872747421265\n             ,-0.163574352860451,0.438192099332809,-0.419077694416046,0.202596783638,0.885058403015137,-0.76336532831192,-0.125000447034836\n             ,0.63375723361969,-0.532896161079407,0.0133542641997337,0.846075296401978,0.207105413079262,-0.836149632930756\n             ,-0.50789874792099,-0.938664674758911,-0.343050718307495,-0.0349972806870937,-0.967477083206177,-0.220996335148811\n             ,0.123080067336559,-0.757856607437134,-0.532336175441742,0.377189010381699,0.49128520488739,-0.262695521116257\n             ,0.830439567565918,0.198422521352768,-0.758837461471558,0.620317757129669,0.322322010993958,-0.727867662906647\n             ,-0.605241358280182,0.856841146945953,-0.483877241611481,0.178005740046501,-0.935926795005798,-0.349802285432816\n             ,0.0409805364906788,-0.870814919471741,-0.427383571863174,-0.242949977517128,0.0860703811049461,-0.674501478672028\n             ,-0.73323917388916,-0.585506916046143,-0.7851682305336,0.201723843812943,-0.372008502483368,-0.198910742998123\n             ,-0.90666651725769,-0.12762725353241,-0.169139251112938,-0.977293848991394,0.130361214280128,-0.434677690267563\n             ,-0.891101121902466,-0.0223364103585482,-0.576743721961975,-0.816619694232941,-0.67012745141983,-0.27579391002655\n             ,-0.689105927944183,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.680036187171936,-0.698283493518829\n             ,-0.22349713742733,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.966500461101532,-0.253715485334396\n             ,0.0387984029948711,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.680036187171936,-0.698283493518829\n             ,-0.22349713742733,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.966500461101532,-0.253715485334396\n             ,0.0387984029948711,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.683448731899261,-0.68956845998764\n             ,0.239568650722504,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.913034975528717,-0.253099620342255\n             ,0.319855839014053,-0.683448731899261,-0.68956845998764,0.239568650722504,-0.598632097244263,-0.69281804561615\n             ,0.402048170566559,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.795308172702789,-0.253419429063797\n             ,0.55069363117218,-0.598632097244263,-0.69281804561615,0.402048170566559,-0.757856607437134,-0.532336175441742\n             ,0.377189010381699,-0.76336532831192,-0.125000447034836,0.63375723361969,0.257765382528305,-0.179748728871346\n             ,-0.949340522289276,-0.12762725353241,-0.169139251112938,-0.977293848991394,-0.199198111891747,-0.0411539115011692\n             ,-0.979094684123993,0.304023921489716,0.0101332226768136,-0.952610492706299,0.249399721622467,0.0914280638098717\n             ,-0.964075088500977,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.433125436306,0.08011444658041\n             ,-0.897766172885895,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.797359347343445,0.574054718017578\n             ,-0.186223655939102,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.433125436306,0.08011444658041\n             ,-0.897766172885895,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.647002518177032,0.732555210590363\n             ,-0.211543470621109,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.806312918663025,0.228450119495392\n             ,-0.545591473579407,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.647002518177032,0.732555210590363\n             ,-0.211543470621109,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.966454327106476,0.253697991371155\n             ,0.0400422066450119,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.689061939716339,0.724038541316986\n             ,0.0310133062303066,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.914388120174408,0.244719073176384\n             ,0.32250103354454,-0.675342082977295,0.696398377418518,0.242780566215515,-0.675342082977295,0.696398377418518\n             ,0.242780566215515,-0.914388120174408,0.244719073176384,0.32250103354454,-0.789120137691498,0.248433187603951\n             ,0.561756551265717,-0.581114292144775,0.694480895996094,0.424266964197159,-0.581114292144775,0.694480895996094\n             ,0.424266964197159,-0.789120137691498,0.248433187603951,0.561756551265717,-0.419077694416046,0.202596783638,0.885058403015137\n             ,-0.315046489238739,0.668025493621826,0.674157023429871,0.528442323207855,0.0112593621015549,0.848894536495209\n             ,0.108443260192871,0.0180166698992252,0.993939340114594,0.201270371675491,-0.0940680578351021,0.975008428096771\n             ,0.49128520488739,-0.262695521116257,0.830439567565918,0.517209410667419,0.0911701247096062,0.850989103317261\n             ,0.185588449239731,0.0829351618885994,0.979121387004852,0.108443260192871,0.0180166698992252,0.993939340114594\n             ,0.528442323207855,0.0112593621015549,0.848894536495209,-0.419077694416046,0.202596783638,0.885058403015137,0.185588449239731\n             ,0.0829351618885994,0.979121387004852,0.438047766685486,0.220905914902687,0.871386647224426,0.146949008107185\n             ,0.44949945807457,0.881110787391663,-0.171031460165977,-0.919269144535065,0.354531347751617,0.198422521352768\n             ,-0.758837461471558,0.620317757129669,0.0551152527332306,-0.341196656227112,0.938374698162079,-0.312896370887756\n             ,-0.30316898226738,0.900102436542511,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.935926795005798\n             ,-0.349802285432816,0.0409805364906788,-0.883872747421265,-0.163574352860451,0.438192099332809,-0.842067539691925\n             ,-0.0588989481329918,0.536146581172943,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.372008502483368\n             ,-0.198910742998123,-0.90666651725769,-0.0223364103585482,-0.576743721961975,-0.816619694232941,-0.38129711151123\n             ,-0.692395269870758,-0.6125368475914,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.797359347343445\n             ,0.574054718017578,-0.186223655939102,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.806312918663025\n             ,0.228450119495392,-0.545591473579407,-0.171031460165977,-0.919269144535065,0.354531347751617,-0.312896370887756\n             ,-0.30316898226738,0.900102436542511,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.585506916046143\n             ,-0.7851682305336,0.201723843812943,0.201270371675491,-0.0940680578351021,0.975008428096771,0.0551152527332306\n             ,-0.341196656227112,0.938374698162079,0.198422521352768,-0.758837461471558,0.620317757129669,0.49128520488739\n             ,-0.262695521116257,0.830439567565918,-0.883872747421265,-0.163574352860451,0.438192099332809,-0.935926795005798\n             ,-0.349802285432816,0.0409805364906788,-0.585506916046143,-0.7851682305336,0.201723843812943,-0.752809286117554\n             ,-0.289420604705811,0.59119701385498,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.967477083206177\n             ,-0.220996335148811,0.123080067336559,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.76336532831192\n             ,-0.125000447034836,0.63375723361969,-0.315046489238739,0.668025493621826,0.674157023429871,0.146949008107185\n             ,0.44949945807457,0.881110787391663,0.351653456687927,0.578750193119049,0.735790729522705,-0.13514731824398,0.839401423931122\n             ,0.526441276073456,0.68733537197113,0.112072803080082,0.717641830444336,0.614956438541412,0.290624231100082,0.733052670955658\n             ,0.438047766685486,0.220905914902687,0.871386647224426,0.517209410667419,0.0911701247096062,0.850989103317261\n             ,0.850508272647858,-0.227084189653397,-0.474413722753525,0.839043617248535,-0.530505955219269,0.120703317224979\n             ,0.130361214280128,-0.434677690267563,-0.891101121902466,0.257765382528305,-0.179748728871346,-0.949340522289276\n             ,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.669741690158844,0.427952170372009,-0.606879770755768\n             ,-0.676364660263062,0.342619508504868,-0.652029693126678,-0.178068861365318,0.174752190709114,-0.968376576900482\n             ,0.481170386075974,0.163634076714516,-0.861219465732574,0.551838159561157,0.0304165203124285,-0.833396375179291\n             ,0.304023921489716,0.0101332226768136,-0.952610492706299,0.249399721622467,0.0914280638098717,-0.964075088500977\n             ,0.948083400726318,1.65112687966484e-008,0.318021893501282,0.452180683612823,-0.878205835819244,0.155843451619148\n             ,0.539408206939697,-0.818039894104004,0.199623316526413,0.727328240871429,-0.00104458257555962,0.686289012432098\n             ,0.999005138874054,5.02348207476189e-008,-0.0445948578417301,0.470319837331772,-0.882218599319458,-0.0221268218010664\n             ,0.452180683612823,-0.878205835819244,0.155843451619148,0.948083400726318,1.65112687966484e-008,0.318021893501282\n             ,0.940430104732513,-4.52081110324798e-008,-0.339987009763718,0.44986492395401,-0.877299964427948,-0.167231306433678\n             ,0.470319837331772,-0.882218599319458,-0.0221268218010664,0.999005138874054,5.02348207476189e-008,-0.0445948578417301\n             ,0.852473616600037,-2.64333579025333e-007,-0.522770285606384,0.421293467283249,-0.875048518180847,-0.238331392407417\n             ,0.44986492395401,-0.877299964427948,-0.167231306433678,0.940430104732513,-4.52081110324798e-008,-0.339987009763718\n             ,0.727328240871429,-0.00104458257555962,0.686289012432098,0.539408206939697,-0.818039894104004,0.199623316526413\n             ,0.685371875762939,-0.711494088172913,0.155053615570068,0.523545145988464,0.00788477715104818,0.851961433887482\n             ,0.523545145988464,0.00788477715104818,0.851961433887482,0.685371875762939,-0.711494088172913,0.155053615570068\n             ,0.839043617248535,-0.530505955219269,0.120703317224979,0.466128349304199,0.0431555546820164,0.883663952350616\n             ,0.812868714332581,0.000118819662020542,-0.582446992397308,0.207105413079262,-0.836149632930756,-0.50789874792099\n             ,0.421293467283249,-0.875048518180847,-0.238331392407417,0.852473616600037,-2.64333579025333e-007,-0.522770285606384\n             ,0.467949956655502,-0.00741531047970057,-0.883723855018616,0.205130055546761,-0.01137740816921,-0.978668570518494\n             ,0.204843252897263,-0.720215260982513,-0.66281920671463,0.0860703811049461,-0.674501478672028,-0.73323917388916\n             ,0.467949956655502,-0.00741531047970057,-0.883723855018616,0.0860703811049461,-0.674501478672028,-0.73323917388916\n             ,-0.870814919471741,-0.427383571863174,-0.242949977517128,0.801146507263184,0.00023984866857063,-0.59846818447113\n             ,0.801146507263184,0.00023984866857063,-0.59846818447113,-0.938664674758911,-0.343050718307495,-0.0349972806870937\n             ,0.207105413079262,-0.836149632930756,-0.50789874792099,0.812868714332581,0.000118819662020542,-0.582446992397308\n             ,0.205130055546761,-0.01137740816921,-0.978668570518494,0.0140170939266682,-0.019058208912611,-0.999720096588135\n             ,0.0140170939266682,-0.019058208912611,-0.999720096588135,0.856841146945953,-0.483877241611481,0.178005740046501\n             ,0.322322010993958,-0.727867662906647,-0.605241358280182,-0.532896161079407,0.0133542641997337,0.846075296401978\n             ,-0.312896370887756,-0.30316898226738,0.900102436542511,0.108443260192871,0.0180166698992252,0.993939340114594\n             ,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.797359347343445,0.574054718017578,-0.186223655939102\n             ,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.312896370887756,-0.30316898226738,0.900102436542511\n             ,-0.532896161079407,0.0133542641997337,0.846075296401978,-0.752809286117554,-0.289420604705811,0.59119701385498\n             ,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.532896161079407,0.0133542641997337,0.846075296401978\n             ,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.315046489238739,0.668025493621826,0.674157023429871\n             ,-0.419077694416046,0.202596783638,0.885058403015137,0.146949008107185,0.44949945807457,0.881110787391663,0.185588449239731\n             ,0.0829351618885994,0.979121387004852,0.517209410667419,0.0911701247096062,0.850989103317261,0.438047766685486\n             ,0.220905914902687,0.871386647224426,-0.178068861365318,0.174752190709114,-0.968376576900482,-0.676364660263062\n             ,0.342619508504868,-0.652029693126678,-0.444781333208084,-0.232732489705086,-0.864872872829437,0.257765382528305\n             ,-0.179748728871346,-0.949340522289276,0.130361214280128,-0.434677690267563,-0.891101121902466,-0.12762725353241\n             ,-0.169139251112938,-0.977293848991394,0.249399721622467,0.0914280638098717,-0.964075088500977,0.304023921489716\n             ,0.0101332226768136,-0.952610492706299,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.669741690158844\n             ,0.427952170372009,-0.606879770755768,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.433125436306\n             ,0.08011444658041,-0.897766172885895,0.322322010993958,-0.727867662906647,-0.605241358280182,0.204843252897263\n             ,-0.720215260982513,-0.66281920671463,0.205130055546761,-0.01137740816921,-0.978668570518494,-0.870814919471741\n             ,-0.427383571863174,-0.242949977517128,-0.938664674758911,-0.343050718307495,-0.0349972806870937,0.801146507263184\n             ,0.00023984866857063,-0.59846818447113,0.839043617248535,-0.530505955219269,0.120703317224979,0.850508272647858\n             ,-0.227084189653397,-0.474413722753525,0.466128349304199,0.0431555546820164,0.883663952350616,-0.372008502483368\n             ,-0.198910742998123,-0.90666651725769,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.12762725353241\n             ,-0.169139251112938,-0.977293848991394,0.150906592607498,0.329798728227615,0.931912004947662,0.189128592610359\n             ,0.522824287414551,0.831194996833801,0.388264060020447,0.528846085071564,0.754700541496277,0.858800172805786\n             ,0.271537780761719,0.434430092573166,0.743789613246918,0.0799255594611168,-0.663617968559265,0.743789613246918\n             ,0.0799255594611168,-0.663617968559265,0.743789613246918,0.0799255594611168,-0.663617968559265,-0.347785919904709\n             ,0.133236810564995,0.928058683872223,-0.104220665991306,0.344170242547989,0.933104991912842,-0.0869597047567368\n             ,0.548145830631256,0.831849813461304,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.673399865627289\n             ,0.731426298618317,0.107462607324123,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.835862636566162\n             ,0.227462083101273,-0.499594479799271,-0.835862636566162,0.227462083101273,-0.499594479799271,-0.835862636566162\n             ,0.227462083101273,-0.499594479799271,-0.105340361595154,-0.682143568992615,-0.723590731620789,-0.107317022979259\n             ,-0.361611425876617,-0.926131844520569,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.374457865953445\n             ,-0.757000803947449,-0.535472750663757,0.810609877109528,0.241179883480072,-0.533613920211792,0.791842222213745\n             ,0.591257572174072,0.152972057461739,0.745590567588806,0.664693832397461,0.047716099768877,-0.0846520513296127\n             ,0.694811403751373,0.714192628860474,-0.0459145493805408,0.561039865016937,0.826514482498169,0.152771726250649\n             ,0.56620579957962,0.809982597827911,0.165652215480804,0.70129519701004,0.693357288837433,0.165652215480804,0.70129519701004\n             ,0.693357288837433,0.152771726250649,0.56620579957962,0.809982597827911,0.340089678764343,0.499063193798065,0.797041356563568\n             ,0.40163654088974,0.616658449172974,0.677067518234253,0.40163654088974,0.616658449172974,0.677067518234253,0.340089678764343\n             ,0.499063193798065,0.797041356563568,0.490783363580704,0.368656903505325,0.789445221424103,0.591461837291718\n             ,0.452348530292511,0.667498111724854,0.591461837291718,0.452348530292511,0.667498111724854,0.490783363580704\n             ,0.368656903505325,0.789445221424103,0.584496080875397,0.192600935697556,0.788206338882446,0.709483921527863\n             ,0.230550438165665,0.665942311286926,0.709483921527863,0.230550438165665,0.665942311286926,0.584496080875397\n             ,0.192600935697556,0.788206338882446,0.608551204204559,-0.00531027046963573,0.79349684715271,0.739747881889343\n             ,-0.0187778417021036,0.672622084617615,0.739747881889343,-0.0187778417021036,0.672622084617615,0.608551204204559\n             ,-0.00531027046963573,0.79349684715271,0.55970573425293,-0.198335975408554,0.804606914520264,0.678183913230896\n             ,-0.26194903254509,0.686621606349945,0.678183913230896,-0.26194903254509,0.686621606349945,0.55970573425293,-0.198335975408554\n             ,0.804606914520264,0.444581091403961,-0.360417783260345,0.820028483867645,0.53311824798584,-0.466141611337662\n             ,0.706043124198914,0.53311824798584,-0.466141611337662,0.706043124198914,0.444581091403961,-0.360417783260345\n             ,0.820028483867645,0.278635025024414,-0.469717562198639,0.837692022323608,0.324051290750504,-0.603787064552307\n             ,0.728307604789734,0.324051290750504,-0.603787064552307,0.728307604789734,0.278635025024414,-0.469717562198639\n             ,0.837692022323608,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0793530717492104,-0.656251728534698\n             ,0.750357747077942,0.0793530717492104,-0.656251728534698,0.750357747077942,0.0844017341732979,-0.511408865451813\n             ,0.855182647705078,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.167935863137245,-0.616517841815948\n             ,0.769222497940063,-0.167935863137245,-0.616517841815948,0.769222497940063,-0.111898861825466,-0.479868054389954\n             ,0.870175421237946,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.384569972753525,-0.489893972873688\n             ,0.782374441623688,-0.384569972753525,-0.489893972873688,0.782374441623688,-0.283866763114929,-0.379370450973511\n             ,0.880623459815979,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.541184604167938,-0.293485879898071\n             ,0.788026213645935,-0.541184604167938,-0.293485879898071,0.788026213645935,-0.408186405897141,-0.223486140370369\n             ,0.885120213031769,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.616609632968903,-0.0538487322628498\n             ,0.785425305366516,-0.616609632968903,-0.0538487322628498,0.785425305366516,-0.46808922290802,-0.0332756750285625\n             ,0.883054494857788,-0.455481648445129,0.165574789047241,0.874712228775024,-0.600685119628906,0.196671590209007\n             ,0.774917840957642,-0.600685119628906,0.196671590209007,0.774917840957642,-0.455481648445129,0.165574789047241\n             ,0.874712228775024,-0.372059375047684,0.346225291490555,0.861220002174377,-0.495565205812454,0.424222469329834\n             ,0.757925093173981,-0.495565205812454,0.424222469329834,0.757925093173981,-0.372059375047684,0.346225291490555\n             ,0.861220002174377,-0.229102194309235,0.484258502721787,0.844396770000458,-0.315447002649307,0.598084509372711\n             ,0.736741542816162,-0.315447002649307,0.598084509372711,0.736741542816162,-0.229102194309235,0.484258502721787\n             ,0.844396770000458,-0.0459145493805408,0.561039865016937,0.826514482498169,-0.0846520513296127,0.694811403751373\n             ,0.714192628860474,-0.0459145493805408,0.561039865016937,0.826514482498169,-0.00891148950904608,0.421955615282059\n             ,0.906572699546814,0.136559754610062,0.425709754228592,0.894495725631714,0.152771726250649,0.56620579957962,0.809982597827911\n             ,0.152771726250649,0.56620579957962,0.809982597827911,0.136559754610062,0.425709754228592,0.894495725631714,0.273672163486481\n             ,0.376535683870316,0.88505619764328,0.340089678764343,0.499063193798065,0.797041356563568,0.340089678764343,0.499063193798065\n             ,0.797041356563568,0.273672163486481,0.376535683870316,0.88505619764328,0.384000062942505,0.28102844953537,0.879526555538177\n             ,0.490783363580704,0.368656903505325,0.789445221424103,0.490783363580704,0.368656903505325,0.789445221424103\n             ,0.384000062942505,0.28102844953537,0.879526555538177,0.452635645866394,0.15212544798851,0.878623247146606,0.584496080875397\n             ,0.192600935697556,0.788206338882446,0.584496080875397,0.192600935697556,0.788206338882446,0.452635645866394\n             ,0.15212544798851,0.878623247146606,0.470285147428513,0.00726274587213993,0.882484614849091,0.608551204204559\n             ,-0.00531027046963573,0.79349684715271,0.608551204204559,-0.00531027046963573,0.79349684715271,0.470285147428513\n             ,0.00726274587213993,0.882484614849091,0.434570521116257,-0.134057357907295,0.890604913234711,0.55970573425293\n             ,-0.198335975408554,0.804606914520264,0.55970573425293,-0.198335975408554,0.804606914520264,0.434570521116257\n             ,-0.134057357907295,0.890604913234711,0.350383520126343,-0.252725511789322,0.901865363121033,0.444581091403961\n             ,-0.360417783260345,0.820028483867645,0.444581091403961,-0.360417783260345,0.820028483867645,0.350383520126343\n             ,-0.252725511789322,0.901865363121033,0.228896334767342,-0.332815736532211,0.91478967666626,0.278635025024414\n             ,-0.469717562198639,0.837692022323608,0.278635025024414,-0.469717562198639,0.837692022323608,0.228896334767342\n             ,-0.332815736532211,0.91478967666626,0.0866658836603165,-0.363462805747986,0.927568793296814,0.0844017341732979\n             ,-0.511408865451813,0.855182647705078,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0866658836603165\n             ,-0.363462805747986,0.927568793296814,-0.0571252852678299,-0.340407937765121,0.938540935516357,-0.111898861825466\n             ,-0.479868054389954,0.870175421237946,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.0571252852678299\n             ,-0.340407937765121,0.938540935516357,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.283866763114929\n             ,-0.379370450973511,0.880623459815979,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.183149293065071\n             ,-0.2668676674366,0.946170151233673,-0.274222016334534,-0.152747601270676,0.949458003044128,-0.408186405897141\n             ,-0.223486140370369,0.885120213031769,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.274222016334534\n             ,-0.152747601270676,0.949458003044128,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.46808922290802\n             ,-0.0332756750285625,0.883054494857788,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.318153589963913\n             ,-0.0134182879701257,0.947944223880768,-0.308955788612366,0.132258638739586,0.941835463047028,-0.455481648445129\n             ,0.165574789047241,0.874712228775024,-0.455481648445129,0.165574789047241,0.874712228775024,-0.308955788612366\n             ,0.132258638739586,0.941835463047028,-0.247846245765686,0.264629483222961,0.931956827640533,-0.372059375047684\n             ,0.346225291490555,0.861220002174377,-0.372059375047684,0.346225291490555,0.861220002174377,-0.247846245765686\n             ,0.264629483222961,0.931956827640533,-0.143103122711182,0.365745604038239,0.919647574424744,-0.229102194309235\n             ,0.484258502721787,0.844396770000458,-0.229102194309235,0.484258502721787,0.844396770000458,-0.143103122711182\n             ,0.365745604038239,0.919647574424744,-0.00891148950904608,0.421955615282059,0.906572699546814,-0.0459145493805408\n             ,0.561039865016937,0.826514482498169,0.404841154813766,0.621719241142273,0.670498967170715,0.166674554347992\n             ,0.707286298274994,0.686997592449188,0.162125825881958,0.655974566936493,0.737165212631226,0.381767153739929\n             ,0.577166616916656,0.721895158290863,0.59637314081192,0.455737888813019,0.660789012908936,0.404841154813766,0.621719241142273\n             ,0.670498967170715,0.381767153739929,0.577166616916656,0.721895158290863,0.55845445394516,0.424168527126312,0.712888300418854\n             ,0.71536773443222,0.231748938560486,0.659197568893433,0.59637314081192,0.455737888813019,0.660789012908936,0.55845445394516\n             ,0.424168527126312,0.712888300418854,0.668235063552856,0.217623174190521,0.711408495903015,0.74573540687561,-0.019992433488369\n             ,0.665942192077637,0.71536773443222,0.231748938560486,0.659197568893433,0.668235063552856,0.217623174190521,0.711408495903015\n             ,0.69628119468689,-0.0145472744479775,0.717621684074402,0.683374345302582,-0.265446841716766,0.680101037025452\n             ,0.74573540687561,-0.019992433488369,0.665942192077637,0.69628119468689,-0.0145472744479775,0.717621684074402\n             ,0.638800263404846,-0.240928456187248,0.730676174163818,0.536719858646393,-0.471459150314331,0.699755728244781\n             ,0.683374345302582,-0.265446841716766,0.680101037025452,0.638800263404846,-0.240928456187248,0.730676174163818\n             ,0.503562271595001,-0.430930227041245,0.748815178871155,0.325602531433105,-0.610175728797913,0.722266256809235\n             ,0.536719858646393,-0.471459150314331,0.699755728244781,0.503562271595001,-0.430930227041245,0.748815178871155\n             ,0.308857411146164,-0.558854043483734,0.769603312015533,0.0785464271903038,-0.662888288497925,0.744586825370789\n             ,0.325602531433105,-0.610175728797913,0.722266256809235,0.308857411146164,-0.558854043483734,0.769603312015533\n             ,0.0810477286577225,-0.607410430908203,0.790242910385132,-0.171089246869087,-0.622517466545105,0.763675689697266\n             ,0.0785464271903038,-0.662888288497925,0.744586825370789,0.0810477286577225,-0.607410430908203,0.790242910385132\n             ,-0.149094551801682,-0.570135653018951,0.807908475399017,-0.389568954706192,-0.494513541460037,0.776976466178894\n             ,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.149094551801682,-0.570135653018951,0.807908475399017\n             ,-0.350501775741577,-0.452110230922699,0.820210218429565,-0.547417819499969,-0.296164989471436,0.782700479030609\n             ,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.350501775741577,-0.452110230922699,0.820210218429565\n             ,-0.495985597372055,-0.269255638122559,0.825529932975769,-0.623331189155579,-0.0542619191110134,0.78007298707962\n             ,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.495985597372055,-0.269255638122559,0.825529932975769\n             ,-0.56595778465271,-0.0462783649563789,0.823134303092957,-0.607059121131897,0.19852888584137,0.769457936286926\n             ,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.56595778465271,-0.0462783649563789,0.823134303092957\n             ,-0.551003336906433,0.186732366681099,0.813342690467834,-0.500814497470856,0.428098827600479,0.752274036407471\n             ,-0.607059121131897,0.19852888584137,0.769457936286926,-0.551003336906433,0.186732366681099,0.813342690467834\n             ,-0.453138768672943,0.398362696170807,0.797478795051575,-0.31894525885582,0.603455662727356,0.730831801891327\n             ,-0.500814497470856,0.428098827600479,0.752274036407471,-0.453138768672943,0.398362696170807,0.797478795051575\n             ,-0.285550057888031,0.56007307767868,0.777675628662109,-0.085962675511837,0.700907051563263,0.708053469657898\n             ,-0.31894525885582,0.603455662727356,0.730831801891327,-0.285550057888031,0.56007307767868,0.777675628662109\n             ,-0.070789560675621,0.65000593662262,0.756624817848206,0.166674554347992,0.707286298274994,0.686997592449188\n             ,-0.085962675511837,0.700907051563263,0.708053469657898,-0.070789560675621,0.65000593662262,0.756624817848206\n             ,0.162125825881958,0.655974566936493,0.737165212631226,0.449477076530457,0.711219429969788,0.540497243404388\n             ,0.173702031373978,0.810399651527405,0.559535503387451,0.166674554347992,0.707286298274994,0.686997592449188\n             ,0.404841154813766,0.621719241142273,0.670498967170715,0.671196460723877,0.518955230712891,0.529321074485779\n             ,0.449477076530457,0.711219429969788,0.540497243404388,0.404841154813766,0.621719241142273,0.670498967170715\n             ,0.59637314081192,0.455737888813019,0.660789012908936,0.808924913406372,0.25956854224205,0.527508020401001,0.671196460723877\n             ,0.518955230712891,0.529321074485779,0.59637314081192,0.455737888813019,0.660789012908936,0.71536773443222,0.231748938560486\n             ,0.659197568893433,0.844040215015411,-0.0319031029939651,0.53533011674881,0.808924913406372,0.25956854224205\n             ,0.527508020401001,0.71536773443222,0.231748938560486,0.659197568893433,0.74573540687561,-0.019992433488369,0.665942192077637\n             ,0.771810173988342,-0.316096395254135,0.551717400550842,0.844040215015411,-0.0319031029939651,0.53533011674881\n             ,0.74573540687561,-0.019992433488369,0.665942192077637,0.683374345302582,-0.265446841716766,0.680101037025452\n             ,0.601994156837463,-0.554628610610962,0.574447631835938,0.771810173988342,-0.316096395254135,0.551717400550842\n             ,0.683374345302582,-0.265446841716766,0.680101037025452,0.536719858646393,-0.471459150314331,0.699755728244781\n             ,0.357549130916595,-0.715268313884735,0.600458025932312,0.601994156837463,-0.554628610610962,0.574447631835938\n             ,0.536719858646393,-0.471459150314331,0.699755728244781,0.325602531433105,-0.610175728797913,0.722266256809235\n             ,0.0714418441057205,-0.776358008384705,0.626230239868164,0.357549130916595,-0.715268313884735,0.600458025932312\n             ,0.325602531433105,-0.610175728797913,0.722266256809235,0.0785464271903038,-0.662888288497925,0.744586825370789\n             ,-0.2176783233881,-0.729624152183533,0.648278295993805,0.0714418441057205,-0.776358008384705,0.626230239868164\n             ,0.0785464271903038,-0.662888288497925,0.744586825370789,-0.171089246869087,-0.622517466545105,0.763675689697266\n             ,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.2176783233881,-0.729624152183533,0.648278295993805\n             ,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.389568954706192,-0.494513541460037,0.776976466178894\n             ,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.470725387334824,-0.581375122070313,0.663641929626465\n             ,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.547417819499969,-0.296164989471436,0.782700479030609\n             ,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.653564929962158,-0.351642489433289,0.670224189758301\n             ,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.623331189155579,-0.0542619191110134,0.78007298707962\n             ,-0.722602725028992,0.221371009945869,0.654858946800232,-0.741482198238373,-0.0714436993002892,0.667158126831055\n             ,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.607059121131897,0.19852888584137,0.769457936286926\n             ,-0.599480926990509,0.48726087808609,0.634979903697968,-0.722602725028992,0.221371009945869,0.654858946800232\n             ,-0.607059121131897,0.19852888584137,0.769457936286926,-0.500814497470856,0.428098827600479,0.752274036407471\n             ,-0.388752341270447,0.690308272838593,0.610201716423035,-0.599480926990509,0.48726087808609,0.634979903697968\n             ,-0.500814497470856,0.428098827600479,0.752274036407471,-0.31894525885582,0.603455662727356,0.730831801891327\n             ,-0.118887908756733,0.803094327449799,0.583870828151703,-0.388752341270447,0.690308272838593,0.610201716423035\n             ,-0.31894525885582,0.603455662727356,0.730831801891327,-0.085962675511837,0.700907051563263,0.708053469657898\n             ,0.173702031373978,0.810399651527405,0.559535503387451,-0.118887908756733,0.803094327449799,0.583870828151703\n             ,-0.085962675511837,0.700907051563263,0.708053469657898,0.166674554347992,0.707286298274994,0.686997592449188\n             ,0.491414904594421,0.804159760475159,0.334422618150711,0.175544574856758,0.917761504650116,0.356227368116379\n             ,0.173702031373978,0.810399651527405,0.559535503387451,0.449477076530457,0.711219429969788,0.540497243404388\n             ,0.745363593101501,0.583941757678986,0.321628957986832,0.491414904594421,0.804159760475159,0.334422618150711\n             ,0.449477076530457,0.711219429969788,0.540497243404388,0.671196460723877,0.518955230712891,0.529321074485779\n             ,0.90310138463974,0.286846220493317,0.319573432207108,0.745363593101501,0.583941757678986,0.321628957986832,0.671196460723877\n             ,0.518955230712891,0.529321074485779,0.808924913406372,0.25956854224205,0.527508020401001,0.943322658538818,-0.0469927303493023\n             ,0.328533172607422,0.90310138463974,0.286846220493317,0.319573432207108,0.808924913406372,0.25956854224205,0.527508020401001\n             ,0.844040215015411,-0.0319031029939651,0.53533011674881,0.860598742961884,-0.372500419616699,0.34729415178299\n             ,0.943322658538818,-0.0469927303493023,0.328533172607422,0.844040215015411,-0.0319031029939651,0.53533011674881\n             ,0.771810173988342,-0.316096395254135,0.551717400550842,0.666100323200226,-0.64570939540863,0.373322576284409\n             ,0.860598742961884,-0.372500419616699,0.34729415178299,0.771810173988342,-0.316096395254135,0.551717400550842\n             ,0.601994156837463,-0.554628610610962,0.574447631835938,0.38611564040184,-0.829714477062225,0.403098732233047\n             ,0.666100323200226,-0.64570939540863,0.373322576284409,0.601994156837463,-0.554628610610962,0.574447631835938\n             ,0.357549130916595,-0.715268313884735,0.600458025932312,0.0584128089249134,-0.899684309959412,0.432615399360657\n             ,0.38611564040184,-0.829714477062225,0.403098732233047,0.357549130916595,-0.715268313884735,0.600458025932312\n             ,0.0714418441057205,-0.776358008384705,0.626230239868164,-0.272724866867065,-0.846146643161774,0.457883208990097\n             ,0.0584128089249134,-0.899684309959412,0.432615399360657,0.0714418441057205,-0.776358008384705,0.626230239868164\n             ,-0.2176783233881,-0.729624152183533,0.648278295993805,-0.562557637691498,-0.676345586776733,0.475484549999237\n             ,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.2176783233881,-0.729624152183533,0.648278295993805\n             ,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.771963715553284,-0.413211286067963,0.48304083943367\n             ,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.470725387334824,-0.581375122070313,0.663641929626465\n             ,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.872656047344208,-0.0922837853431702,0.479536414146423\n             ,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.653564929962158,-0.351642489433289,0.670224189758301\n             ,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.85104501247406,0.243097007274628,0.465431213378906\n             ,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.741482198238373,-0.0714436993002892,0.667158126831055\n             ,-0.722602725028992,0.221371009945869,0.654858946800232,-0.71004056930542,0.547635197639465,0.442648887634277\n             ,-0.85104501247406,0.243097007274628,0.465431213378906,-0.722602725028992,0.221371009945869,0.654858946800232\n             ,-0.599480926990509,0.48726087808609,0.634979903697968,-0.468671709299088,0.780212640762329,0.414264500141144\n             ,-0.71004056930542,0.547635197639465,0.442648887634277,-0.599480926990509,0.48726087808609,0.634979903697968\n             ,-0.388752341270447,0.690308272838593,0.610201716423035,-0.15956723690033,0.909399926662445,0.384096413850784\n             ,-0.468671709299088,0.780212640762329,0.414264500141144,-0.388752341270447,0.690308272838593,0.610201716423035\n             ,-0.118887908756733,0.803094327449799,0.583870828151703,0.175544574856758,0.917761504650116,0.356227368116379\n             ,-0.15956723690033,0.909399926662445,0.384096413850784,-0.118887908756733,0.803094327449799,0.583870828151703\n             ,0.173702031373978,0.810399651527405,0.559535503387451,0.175544574856758,0.917761504650116,0.356227368116379\n             ,0.491414904594421,0.804159760475159,0.334422618150711,0.50420355796814,0.839778661727905,0.20137183368206,0.172172844409943\n             ,0.959192931652069,0.22428885102272,0.491414904594421,0.804159760475159,0.334422618150711,0.745363593101501,0.583941757678986\n             ,0.321628957986832,0.7711421251297,0.608294606208801,0.187929421663284,0.50420355796814,0.839778661727905,0.20137183368206\n             ,0.745363593101501,0.583941757678986,0.321628957986832,0.90310138463974,0.286846220493317,0.319573432207108,0.936946272850037\n             ,0.296007573604584,0.185771778225899,0.7711421251297,0.608294606208801,0.187929421663284,0.90310138463974,0.286846220493317\n             ,0.319573432207108,0.943322658538818,-0.0469927303493023,0.328533172607422,0.979227960109711,-0.0549116656184196\n             ,0.195185303688049,0.936946272850037,0.296007573604584,0.185771778225899,0.943322658538818,-0.0469927303493023\n             ,0.328533172607422,0.860598742961884,-0.372500419616699,0.34729415178299,0.892272472381592,-0.397068977355957\n             ,0.214909449219704,0.979227960109711,-0.0549116656184196,0.195185303688049,0.860598742961884,-0.372500419616699\n             ,0.34729415178299,0.666100323200226,-0.64570939540863,0.373322576284409,0.687824785709381,-0.684250712394714\n             ,0.242276713252068,0.892272472381592,-0.397068977355957,0.214909449219704,0.666100323200226,-0.64570939540863\n             ,0.373322576284409,0.38611564040184,-0.829714477062225,0.403098732233047,0.393515467643738,-0.877666234970093\n             ,0.273582845926285,0.687824785709381,-0.684250712394714,0.242276713252068,0.38611564040184,-0.829714477062225\n             ,0.403098732233047,0.0584128089249134,-0.899684309959412,0.432615399360657,0.0490523800253868,-0.951213300228119\n             ,0.304609894752502,0.393515467643738,-0.877666234970093,0.273582845926285,0.0584128089249134,-0.899684309959412\n             ,0.432615399360657,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.299019634723663,-0.894943594932556\n             ,0.331154435873032,0.0490523800253868,-0.951213300228119,0.304609894752502,-0.272724866867065,-0.846146643161774\n             ,0.457883208990097,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.603678643703461,-0.716462135314941\n             ,0.349648594856262,-0.299019634723663,-0.894943594932556,0.331154435873032,-0.562557637691498,-0.676345586776733\n             ,0.475484549999237,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.823797225952148,-0.439864456653595\n             ,0.357599437236786,-0.603678643703461,-0.716462135314941,0.349648594856262,-0.771963715553284,-0.413211286067963\n             ,0.48304083943367,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.929643630981445,-0.102520182728767\n             ,0.353909969329834,-0.823797225952148,-0.439864456653595,0.357599437236786,-0.872656047344208,-0.0922837853431702\n             ,0.479536414146423,-0.85104501247406,0.243097007274628,0.465431213378906,-0.90692675113678,0.250015825033188\n             ,0.339080929756165,-0.929643630981445,-0.102520182728767,0.353909969329834,-0.85104501247406,0.243097007274628\n             ,0.465431213378906,-0.71004056930542,0.547635197639465,0.442648887634277,-0.758711993694305,0.570132851600647\n             ,0.315126359462738,-0.90692675113678,0.250015825033188,0.339080929756165,-0.71004056930542,0.547635197639465\n             ,0.442648887634277,-0.468671709299088,0.780212640762329,0.414264500141144,-0.504998087882996,0.81461375951767\n             ,0.285274267196655,-0.758711993694305,0.570132851600647,0.315126359462738,-0.468671709299088,0.780212640762329\n             ,0.414264500141144,-0.15956723690033,0.909399926662445,0.384096413850784,-0.180075660347939,0.950408160686493\n             ,0.253568828105927,-0.504998087882996,0.81461375951767,0.285274267196655,-0.15956723690033,0.909399926662445\n             ,0.384096413850784,0.175544574856758,0.917761504650116,0.356227368116379,0.172172844409943,0.959192931652069\n             ,0.22428885102272,-0.180075660347939,0.950408160686493,0.253568828105927,0.081717848777771,0.0365908145904541\n             ,0.995983600616455,0.136559754610062,0.425709754228592,0.894495725631714,-0.00891148950904608,0.421955615282059\n             ,0.906572699546814,0.081717848777771,0.0365908145904541,0.995983600616455,0.273672163486481,0.376535683870316\n             ,0.88505619764328,0.136559754610062,0.425709754228592,0.894495725631714,0.081717848777771,0.0365908145904541\n             ,0.995983600616455,0.384000062942505,0.28102844953537,0.879526555538177,0.273672163486481,0.376535683870316,0.88505619764328\n             ,0.081717848777771,0.0365908145904541,0.995983600616455,0.452635645866394,0.15212544798851,0.878623247146606\n             ,0.384000062942505,0.28102844953537,0.879526555538177,0.081717848777771,0.0365908145904541,0.995983600616455\n             ,0.470285147428513,0.00726274587213993,0.882484614849091,0.452635645866394,0.15212544798851,0.878623247146606\n             ,0.081717848777771,0.0365908145904541,0.995983600616455,0.434570521116257,-0.134057357907295,0.890604913234711\n             ,0.470285147428513,0.00726274587213993,0.882484614849091,0.081717848777771,0.0365908145904541,0.995983600616455\n             ,0.350383520126343,-0.252725511789322,0.901865363121033,0.434570521116257,-0.134057357907295,0.890604913234711\n             ,0.081717848777771,0.0365908145904541,0.995983600616455,0.228896334767342,-0.332815736532211,0.91478967666626\n             ,0.350383520126343,-0.252725511789322,0.901865363121033,0.081717848777771,0.0365908145904541,0.995983600616455\n             ,0.0866658836603165,-0.363462805747986,0.927568793296814,0.228896334767342,-0.332815736532211,0.91478967666626\n             ,0.081717848777771,0.0365908145904541,0.995983600616455,-0.0571252852678299,-0.340407937765121,0.938540935516357\n             ,0.0866658836603165,-0.363462805747986,0.927568793296814,0.081717848777771,0.0365908145904541,0.995983600616455\n             ,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.0571252852678299,-0.340407937765121,0.938540935516357\n             ,0.081717848777771,0.0365908145904541,0.995983600616455,-0.274222016334534,-0.152747601270676,0.949458003044128\n             ,-0.183149293065071,-0.2668676674366,0.946170151233673,0.081717848777771,0.0365908145904541,0.995983600616455\n             ,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.274222016334534,-0.152747601270676,0.949458003044128\n             ,0.081717848777771,0.0365908145904541,0.995983600616455,-0.308955788612366,0.132258638739586,0.941835463047028\n             ,-0.318153589963913,-0.0134182879701257,0.947944223880768,0.081717848777771,0.0365908145904541,0.995983600616455\n             ,-0.247846245765686,0.264629483222961,0.931956827640533,-0.308955788612366,0.132258638739586,0.941835463047028\n             ,0.081717848777771,0.0365908145904541,0.995983600616455,-0.143103122711182,0.365745604038239,0.919647574424744\n             ,-0.247846245765686,0.264629483222961,0.931956827640533,0.081717848777771,0.0365908145904541,0.995983600616455\n             ,-0.00891148950904608,0.421955615282059,0.906572699546814,-0.143103122711182,0.365745604038239,0.919647574424744\n             ,0.0240920167416334,0.706818819046021,0.706984281539917,0.034081757068634,0.56817638874054,0.82220071554184,0.233674764633179\n             ,0.535661220550537,0.811457395553589,0.2747623026371,0.666023552417755,0.693482756614685,-0.224320411682129,0.654188752174377\n             ,0.722300112247467,-0.163695827126503,0.526300370693207,0.834392964839935,0.034081757068634,0.56817638874054\n             ,0.82220071554184,0.0240920167416334,0.706818819046021,0.706984281539917,-0.436875194311142,0.515262722969055\n             ,0.737322390079498,-0.332944214344025,0.415709882974625,0.846364855766296,-0.163695827126503,0.526300370693207\n             ,0.834392964839935,-0.224320411682129,0.654188752174377,0.722300112247467,-0.584827542304993,0.308754056692123\n             ,0.750098466873169,-0.450771480798721,0.251298606395721,0.856536090373993,-0.332944214344025,0.415709882974625\n             ,0.846364855766296,-0.436875194311142,0.515262722969055,0.737322390079498,-0.648242235183716,0.0625410452485085\n             ,0.758861362934113,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.450771480798721,0.251298606395721\n             ,0.856536090373993,-0.584827542304993,0.308754056692123,0.750098466873169,-0.61853951215744,-0.190050154924393\n             ,0.762423634529114,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.501288175582886,0.0552607960999012\n             ,0.863514006137848,-0.648242235183716,0.0625410452485085,0.758861362934113,-0.499736815690994,-0.414954453706741\n             ,0.760313034057617,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.477663516998291,-0.14585192501545\n             ,0.866351425647736,-0.61853951215744,-0.190050154924393,0.762423634529114,-0.307833850383759,-0.581823825836182\n             ,0.752807676792145,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.383112281560898,-0.324924170970917\n             ,0.864667117595673,-0.499736815690994,-0.414954453706741,0.760313034057617,-0.0688507258892059,-0.668073415756226\n             ,0.740903198719025,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.230319395661354,-0.457817196846008\n             ,0.858694553375244,-0.307833850383759,-0.581823825836182,0.752807676792145,0.184999153017998,-0.662078678607941\n             ,0.726241767406464,0.162060111761093,-0.521743357181549,0.837568163871765,-0.0400415360927582,-0.52651184797287\n             ,0.849224328994751,-0.0688507258892059,-0.668073415756226,0.740903198719025,0.419496387243271,-0.564626634120941\n             ,0.710788011550903,0.348768085241318,-0.444183886051178,0.825264513492584,0.162060111761093,-0.521743357181549\n             ,0.837568163871765,0.184999153017998,-0.662078678607941,0.726241767406464,0.602874755859375,-0.388880640268326\n             ,0.696644723415375,0.494788855314255,-0.304279118776321,0.814001321792603,0.348768085241318,-0.444183886051178\n             ,0.825264513492584,0.419496387243271,-0.564626634120941,0.710788011550903,0.710392951965332,-0.158590719103813\n             ,0.685704588890076,0.580431342124939,-0.120935805141926,0.805278837680817,0.494788855314255,-0.304279118776321\n             ,0.814001321792603,0.602874755859375,-0.388880640268326,0.696644723415375,0.727535784244537,0.0951134264469147\n             ,0.67944473028183,0.594111680984497,0.0810576304793358,0.800288081169128,0.580431342124939,-0.120935805141926\n             ,0.805278837680817,0.710392951965332,-0.158590719103813,0.685704588890076,0.651982724666595,0.337994933128357\n             ,0.678732573986053,0.533979833126068,0.274454295635223,0.799712657928467,0.594111680984497,0.0810576304793358\n             ,0.800288081169128,0.727535784244537,0.0951134264469147,0.67944473028183,0.493931025266647,0.53727263212204,0.683644890785217\n             ,0.408169955015183,0.433131784200668,0.803613185882568,0.533979833126068,0.274454295635223,0.799712657928467\n             ,0.651982724666595,0.337994933128357,0.678732573986053,0.2747623026371,0.666023552417755,0.693482756614685,0.233674764633179\n             ,0.535661220550537,0.811457395553589,0.408169955015183,0.433131784200668,0.803613185882568,0.493931025266647\n             ,0.53727263212204,0.683644890785217,0.034081757068634,0.56817638874054,0.82220071554184,0.0417974554002285,0.434518992900848\n             ,0.899692296981812,0.192422226071358,0.410055339336395,0.891531467437744,0.233674764633179,0.535661220550537\n             ,0.811457395553589,-0.163695827126503,0.526300370693207,0.834392964839935,-0.107358939945698,0.402824491262436\n             ,0.908959031105042,0.0417974554002285,0.434518992900848,0.899692296981812,0.034081757068634,0.56817638874054\n             ,0.82220071554184,-0.332944214344025,0.415709882974625,0.846364855766296,-0.234948098659515,0.319365561008453\n             ,0.918044149875641,-0.107358939945698,0.402824491262436,0.908959031105042,-0.163695827126503,0.526300370693207\n             ,0.834392964839935,-0.450771480798721,0.251298606395721,0.856536090373993,-0.323758065700531,0.195376396179199\n             ,0.925747692584991,-0.234948098659515,0.319365561008453,0.918044149875641,-0.332944214344025,0.415709882974625\n             ,0.846364855766296,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.361866801977158,0.0475688315927982\n             ,0.931015372276306,-0.323758065700531,0.195376396179199,0.925747692584991,-0.450771480798721,0.251298606395721\n             ,0.856536090373993,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.344122022390366,-0.104039087891579\n             ,0.933143019676209,-0.361866801977158,0.0475688315927982,0.931015372276306,-0.501288175582886,0.0552607960999012\n             ,0.863514006137848,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.272957742214203,-0.239076629281044\n             ,0.931845724582672,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.477663516998291,-0.14585192501545\n             ,0.866351425647736,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.157753229141235,-0.339445114135742\n             ,0.927303016185761,-0.272957742214203,-0.239076629281044,0.931845724582672,-0.383112281560898,-0.324924170970917\n             ,0.864667117595673,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.0142518226057291,-0.391459435224533\n             ,0.92008501291275,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.230319395661354,-0.457817196846008\n             ,0.858694553375244,0.162060111761093,-0.521743357181549,0.837568163871765,0.13820318877697,-0.388006061315537\n             ,0.911236047744751,-0.0142518226057291,-0.391459435224533,0.92008501291275,-0.0400415360927582,-0.52651184797287\n             ,0.849224328994751,0.348768085241318,-0.444183886051178,0.825264513492584,0.279189854860306,-0.329605966806412\n             ,0.901894092559814,0.13820318877697,-0.388006061315537,0.911236047744751,0.162060111761093,-0.521743357181549\n             ,0.837568163871765,0.494788855314255,-0.304279118776321,0.814001321792603,0.38951188325882,-0.224056273698807\n             ,0.893352866172791,0.279189854860306,-0.329605966806412,0.901894092559814,0.348768085241318,-0.444183886051178\n             ,0.825264513492584,0.580431342124939,-0.120935805141926,0.805278837680817,0.454289197921753,-0.0856318548321724\n             ,0.886729121208191,0.38951188325882,-0.224056273698807,0.893352866172791,0.494788855314255,-0.304279118776321\n             ,0.814001321792603,0.594111680984497,0.0810576304793358,0.800288081169128,0.464658886194229,0.0669254288077354\n             ,0.88295704126358,0.454289197921753,-0.0856318548321724,0.886729121208191,0.580431342124939,-0.120935805141926\n             ,0.805278837680817,0.533979833126068,0.274454295635223,0.799712657928467,0.419226229190826,0.21297712624073,0.882547497749329\n             ,0.464658886194229,0.0669254288077354,0.88295704126358,0.594111680984497,0.0810576304793358,0.800288081169128\n             ,0.408169955015183,0.433131784200668,0.803613185882568,0.324202924966812,0.332735329866409,0.885539174079895\n             ,0.419226229190826,0.21297712624073,0.882547497749329,0.533979833126068,0.274454295635223,0.799712657928467,0.233674764633179\n             ,0.535661220550537,0.811457395553589,0.192422226071358,0.410055339336395,0.891531467437744,0.324202924966812\n             ,0.332735329866409,0.885539174079895,0.408169955015183,0.433131784200668,0.803613185882568,-0.183556318283081\n             ,0.567722976207733,0.802494645118713,0.0306328255683184,0.613005936145782,0.789484262466431,0.0251268558204174\n             ,0.686642229557037,0.726561188697815,-0.215900436043739,0.635483682155609,0.741314709186554,-0.36688569188118\n             ,0.447914391756058,0.81533282995224,-0.183556318283081,0.567722976207733,0.802494645118713,-0.215900436043739\n             ,0.635483682155609,0.741314709186554,-0.422100454568863,0.500542402267456,0.755836308002472,-0.494506686925888\n             ,0.269742369651794,0.826257944107056,-0.36688569188118,0.447914391756058,0.81533282995224,-0.422100454568863\n             ,0.500542402267456,0.755836308002472,-0.565596282482147,0.300016045570374,0.768173933029175,-0.54912269115448\n             ,0.0573039166629314,0.833774864673615,-0.494506686925888,0.269742369651794,0.826257944107056,-0.565596282482147\n             ,0.300016045570374,0.768173933029175,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.523315012454987\n             ,-0.160613864660263,0.836865901947021,-0.54912269115448,0.0573039166629314,0.833774864673615,-0.626972436904907\n             ,0.0610111244022846,0.776648700237274,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.420577734708786\n             ,-0.354520976543427,0.835122287273407,-0.523315012454987,-0.160613864660263,0.836865901947021,-0.597933351993561\n             ,-0.184150025248528,0.780105412006378,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.2548748254776\n             ,-0.498156249523163,0.828781723976135,-0.420577734708786,-0.354520976543427,0.835122287273407,-0.482387334108353\n             ,-0.40233388543129,0.778093755245209,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.0486774146556854\n             ,-0.572135806083679,0.818713128566742,-0.2548748254776,-0.498156249523163,0.828781723976135,-0.295998096466064\n             ,-0.56403261423111,0.770877659320831,-0.0639727190136909,-0.647417724132538,0.75944572687149,0.170113638043404\n             ,-0.566585600376129,0.806251883506775,-0.0486774146556854,-0.572135806083679,0.818713128566742,-0.0639727190136909\n             ,-0.647417724132538,0.75944572687149,0.182335004210472,-0.641266107559204,0.74533998966217,0.371963411569595\n             ,-0.482319325208664,0.793102324008942,0.170113638043404,-0.566585600376129,0.806251883506775,0.182335004210472\n             ,-0.641266107559204,0.74533998966217,0.409660339355469,-0.546471178531647,0.730443477630615,0.529680788516998\n             ,-0.330754697322845,0.781050324440002,0.371963411569595,-0.482319325208664,0.793102324008942,0.409660339355469\n             ,-0.546471178531647,0.730443477630615,0.587337672710419,-0.375847816467285,0.71677953004837,0.622047901153564\n             ,-0.132383927702904,0.771706521511078,0.529680788516998,-0.330754697322845,0.781050324440002,0.587337672710419\n             ,-0.375847816467285,0.71677953004837,0.691395580768585,-0.152425721287727,0.706214249134064,0.636672735214233\n             ,0.0860606729984283,0.766316771507263,0.622047901153564,-0.132383927702904,0.771706521511078,0.691395580768585\n             ,-0.152425721287727,0.706214249134064,0.707835674285889,0.0936401560902596,0.700142979621887,0.571585476398468\n             ,0.295183837413788,0.765608549118042,0.636672735214233,0.0860606729984283,0.766316771507263,0.707835674285889\n             ,0.0936401560902596,0.700142979621887,0.634431779384613,0.329166561365128,0.699389517307281,0.435493797063828\n             ,0.466814637184143,0.769694268703461,0.571585476398468,0.295183837413788,0.765608549118042,0.634431779384613\n             ,0.329166561365128,0.699389517307281,0.481055945158005,0.522368133068085,0.704071521759033,0.246697977185249\n             ,0.577754318714142,0.778036057949066,0.435493797063828,0.466814637184143,0.769694268703461,0.481055945158005\n             ,0.522368133068085,0.704071521759033,0.268397808074951,0.647146701812744,0.713557183742523,0.0306328255683184\n             ,0.613005936145782,0.789484262466431,0.246697977185249,0.577754318714142,0.778036057949066,0.268397808074951\n             ,0.647146701812744,0.713557183742523,0.0251268558204174,0.686642229557037,0.726561188697815,-0.215900436043739\n             ,0.635483682155609,0.741314709186554,0.0251268558204174,0.686642229557037,0.726561188697815,0.0138044422492385\n             ,0.811234712600708,0.58455765247345,-0.272946208715439,0.75020706653595,0.602237343788147,-0.422100454568863\n             ,0.500542402267456,0.755836308002472,-0.215900436043739,0.635483682155609,0.741314709186554,-0.272946208715439\n             ,0.75020706653595,0.602237343788147,-0.518174409866333,0.589555025100708,0.6196129322052,-0.565596282482147,0.300016045570374\n             ,0.768173933029175,-0.422100454568863,0.500542402267456,0.755836308002472,-0.518174409866333,0.589555025100708\n             ,0.6196129322052,-0.688787519931793,0.350962370634079,0.634347856044769,-0.626972436904907,0.0610111244022846\n             ,0.776648700237274,-0.565596282482147,0.300016045570374,0.768173933029175,-0.688787519931793,0.350962370634079\n             ,0.634347856044769,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.597933351993561,-0.184150025248528\n             ,0.780105412006378,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.761736273765564,0.0666655674576759\n             ,0.644448220729828,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.482387334108353,-0.40233388543129\n             ,0.778093755245209,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.727181673049927,-0.224953591823578\n             ,0.648538887500763,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.295998096466064,-0.56403261423111\n             ,0.770877659320831,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.589768707752228,-0.484505742788315\n             ,0.646085977554321,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.0639727190136909,-0.647417724132538\n             ,0.75944572687149,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.368078649044037,-0.676924169063568\n             ,0.637410223484039,-0.0920489430427551,-0.776246547698975,0.6236732006073,0.182335004210472,-0.641266107559204\n             ,0.74533998966217,-0.0639727190136909,-0.647417724132538,0.75944572687149,-0.0920489430427551,-0.776246547698975\n             ,0.6236732006073,0.201069504022598,-0.769039869308472,0.606752574443817,0.409660339355469,-0.546471178531647\n             ,0.730443477630615,0.182335004210472,-0.641266107559204,0.74533998966217,0.201069504022598,-0.769039869308472\n             ,0.606752574443817,0.471676796674728,-0.656273901462555,0.58891898393631,0.587337672710419,-0.375847816467285\n             ,0.71677953004837,0.409660339355469,-0.546471178531647,0.730443477630615,0.471676796674728,-0.656273901462555\n             ,0.58891898393631,0.6831955909729,-0.45319789648056,0.57258665561676,0.691395580768585,-0.152425721287727,0.706214249134064\n             ,0.587337672710419,-0.375847816467285,0.71677953004837,0.6831955909729,-0.45319789648056,0.57258665561676,0.807079255580902\n             ,-0.187228798866272,0.559971868991852,0.707835674285889,0.0936401560902596,0.700142979621887,0.691395580768585\n             ,-0.152425721287727,0.706214249134064,0.807079255580902,-0.187228798866272,0.559971868991852,0.826618671417236\n             ,0.105725072324276,0.552742063999176,0.634431779384613,0.329166561365128,0.699389517307281,0.707835674285889\n             ,0.0936401560902596,0.700142979621887,0.826618671417236,0.105725072324276,0.552742063999176,0.739149928092957\n             ,0.386077225208282,0.551907360553741,0.481055945158005,0.522368133068085,0.704071521759033,0.634431779384613\n             ,0.329166561365128,0.699389517307281,0.739149928092957,0.386077225208282,0.551907360553741,0.556476175785065\n             ,0.615973055362701,0.557594358921051,0.268397808074951,0.647146701812744,0.713557183742523,0.481055945158005\n             ,0.522368133068085,0.704071521759033,0.556476175785065,0.615973055362701,0.557594358921051,0.303310126066208\n             ,0.764374732971191,0.56897646188736,0.0251268558204174,0.686642229557037,0.726561188697815,0.268397808074951\n             ,0.647146701812744,0.713557183742523,0.303310126066208,0.764374732971191,0.56897646188736,0.0138044422492385\n             ,0.811234712600708,0.58455765247345,-0.272946208715439,0.75020706653595,0.602237343788147,0.0138044422492385\n             ,0.811234712600708,0.58455765247345,-0.000517124892212451,0.923211693763733,0.384291529655457,-0.328935414552689\n             ,0.853318154811859,0.40453627705574,-0.518174409866333,0.589555025100708,0.6196129322052,-0.272946208715439,0.75020706653595\n             ,0.602237343788147,-0.328935414552689,0.853318154811859,0.40453627705574,-0.609814286231995,0.669305503368378\n             ,0.424448668956757,-0.688787519931793,0.350962370634079,0.634347856044769,-0.518174409866333,0.589555025100708\n             ,0.6196129322052,-0.609814286231995,0.669305503368378,0.424448668956757,-0.805227220058441,0.396035611629486\n             ,0.441321760416031,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.688787519931793,0.350962370634079\n             ,0.634347856044769,-0.805227220058441,0.396035611629486,0.441321760416031,-0.888783156871796,0.0704197734594345\n             ,0.452885746955872,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.761736273765564,0.0666655674576759\n             ,0.644448220729828,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.849202871322632,-0.263590753078461\n             ,0.457574456930161,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.727181673049927,-0.224953591823578\n             ,0.648538887500763,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.691821098327637,-0.560874342918396\n             ,0.454756587743759,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.589768707752228,-0.484505742788315\n             ,0.646085977554321,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.437908887863159,-0.781264841556549\n             ,0.444815665483475,-0.0920489430427551,-0.776246547698975,0.6236732006073,-0.368078649044037,-0.676924169063568\n             ,0.637410223484039,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.121754303574562,-0.89501953125\n             ,0.429087340831757,0.201069504022598,-0.769039869308472,0.606752574443817,-0.0920489430427551,-0.776246547698975\n             ,0.6236732006073,-0.121754303574562,-0.89501953125,0.429087340831757,0.213988110423088,-0.886772990226746,0.409686177968979\n             ,0.471676796674728,-0.656273901462555,0.58891898393631,0.201069504022598,-0.769039869308472,0.606752574443817\n             ,0.213988110423088,-0.886772990226746,0.409686177968979,0.523918509483337,-0.757616579532623,0.389264106750488\n             ,0.6831955909729,-0.45319789648056,0.57258665561676,0.471676796674728,-0.656273901462555,0.58891898393631,0.523918509483337\n             ,-0.757616579532623,0.389264106750488,0.766169846057892,-0.525022745132446,0.370587140321732,0.807079255580902\n             ,-0.187228798866272,0.559971868991852,0.6831955909729,-0.45319789648056,0.57258665561676,0.766169846057892,-0.525022745132446\n             ,0.370587140321732,0.908073663711548,-0.220386654138565,0.356134712696075,0.826618671417236,0.105725072324276\n             ,0.552742063999176,0.807079255580902,-0.187228798866272,0.559971868991852,0.908073663711548,-0.220386654138565\n             ,0.356134712696075,0.930448770523071,0.115156330168247,0.347856402397156,0.739149928092957,0.386077225208282\n             ,0.551907360553741,0.826618671417236,0.105725072324276,0.552742063999176,0.930448770523071,0.115156330168247\n             ,0.347856402397156,0.830271482467651,0.436247199773788,0.346897125244141,0.556476175785065,0.615973055362701\n             ,0.557594358921051,0.739149928092957,0.386077225208282,0.551907360553741,0.830271482467651,0.436247199773788\n             ,0.346897125244141,0.621051132678986,0.699568390846252,0.353411287069321,0.303310126066208,0.764374732971191\n             ,0.56897646188736,0.556476175785065,0.615973055362701,0.557594358921051,0.621051132678986,0.699568390846252,0.353411287069321\n             ,0.331061065196991,0.869544088840485,0.366458177566528,0.0138044422492385,0.811234712600708,0.58455765247345\n             ,0.303310126066208,0.764374732971191,0.56897646188736,0.331061065196991,0.869544088840485,0.366458177566528,-0.000517124892212451\n             ,0.923211693763733,0.384291529655457,-0.328935414552689,0.853318154811859,0.40453627705574,-0.000517124892212451\n             ,0.923211693763733,0.384291529655457,-0.00916329398751259,0.9673011302948,0.253465056419373,-0.354367077350616\n             ,0.893833041191101,0.274748027324677,-0.609814286231995,0.669305503368378,0.424448668956757,-0.328935414552689\n             ,0.853318154811859,0.40453627705574,-0.354367077350616,0.893833041191101,0.274748027324677,-0.649618446826935\n             ,0.700406491756439,0.295679837465286,-0.805227220058441,0.396035611629486,0.441321760416031,-0.609814286231995\n             ,0.669305503368378,0.424448668956757,-0.649618446826935,0.700406491756439,0.295679837465286,-0.855028748512268\n             ,0.413159251213074,0.313409119844437,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.805227220058441\n             ,0.396035611629486,0.441321760416031,-0.855028748512268,0.413159251213074,0.313409119844437,-0.942859053611755\n             ,0.0708882212638855,0.325563609600067,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.888783156871796\n             ,0.0704197734594345,0.452885746955872,-0.942859053611755,0.0708882212638855,0.325563609600067,-0.901254296302795\n             ,-0.280208140611649,0.33049076795578,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.849202871322632\n             ,-0.263590753078461,0.457574456930161,-0.901254296302795,-0.280208140611649,0.33049076795578,-0.735823094844818\n             ,-0.592702567577362,0.327518105506897,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.691821098327637\n             ,-0.560874342918396,0.454756587743759,-0.735823094844818,-0.592702567577362,0.327518105506897,-0.468927621841431\n             ,-0.824368357658386,0.317054718732834,-0.121754303574562,-0.89501953125,0.429087340831757,-0.437908887863159\n             ,-0.781264841556549,0.444815665483475,-0.468927621841431,-0.824368357658386,0.317054718732834,-0.136601343750954\n             ,-0.943935394287109,0.300542861223221,0.213988110423088,-0.886772990226746,0.409686177968979,-0.121754303574562\n             ,-0.89501953125,0.429087340831757,-0.136601343750954,-0.943935394287109,0.300542861223221,0.21633192896843,-0.935254573822021\n             ,0.280177354812622,0.523918509483337,-0.757616579532623,0.389264106750488,0.213988110423088,-0.886772990226746\n             ,0.409686177968979,0.21633192896843,-0.935254573822021,0.280177354812622,0.542101740837097,-0.799496412277222\n             ,0.258710563182831,0.766169846057892,-0.525022745132446,0.370587140321732,0.523918509483337,-0.757616579532623\n             ,0.389264106750488,0.542101740837097,-0.799496412277222,0.258710563182831,0.796745836734772,-0.555020034313202\n             ,0.239058271050453,0.908073663711548,-0.220386654138565,0.356134712696075,0.766169846057892,-0.525022745132446\n             ,0.370587140321732,0.796745836734772,-0.555020034313202,0.239058271050453,0.945919096469879,-0.234794244170189\n             ,0.22384974360466,0.930448770523071,0.115156330168247,0.347856402397156,0.908073663711548,-0.220386654138565\n             ,0.356134712696075,0.945919096469879,-0.234794244170189,0.22384974360466,0.969435811042786,0.117914944887161\n             ,0.215151831507683,0.830271482467651,0.436247199773788,0.346897125244141,0.930448770523071,0.115156330168247\n             ,0.347856402397156,0.969435811042786,0.117914944887161,0.215151831507683,0.864136636257172,0.455431222915649\n             ,0.214126899838448,0.621051132678986,0.699568390846252,0.353411287069321,0.830271482467651,0.436247199773788\n             ,0.346897125244141,0.864136636257172,0.455431222915649,0.214126899838448,0.644224345684052,0.732226133346558\n             ,0.220952302217484,0.331061065196991,0.869544088840485,0.366458177566528,0.621051132678986,0.699568390846252\n             ,0.353411287069321,0.644224345684052,0.732226133346558,0.220952302217484,0.339384973049164,0.910898625850677\n             ,0.234694600105286,-0.000517124892212451,0.923211693763733,0.384291529655457,0.331061065196991,0.869544088840485\n             ,0.366458177566528,0.339384973049164,0.910898625850677,0.234694600105286,-0.00916329398751259,0.9673011302948\n             ,0.253465056419373,0.192422226071358,0.410055339336395,0.891531467437744,0.0417974554002285,0.434518992900848\n             ,0.899692296981812,0.0575622506439686,0.0207394547760487,0.998126447200775,0.0417974554002285,0.434518992900848\n             ,0.899692296981812,-0.107358939945698,0.402824491262436,0.908959031105042,0.0575622506439686,0.0207394547760487\n             ,0.998126447200775,-0.107358939945698,0.402824491262436,0.908959031105042,-0.234948098659515,0.319365561008453\n             ,0.918044149875641,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.234948098659515,0.319365561008453\n             ,0.918044149875641,-0.323758065700531,0.195376396179199,0.925747692584991,0.0575622506439686,0.0207394547760487\n             ,0.998126447200775,-0.323758065700531,0.195376396179199,0.925747692584991,-0.361866801977158,0.0475688315927982\n             ,0.931015372276306,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.361866801977158,0.0475688315927982\n             ,0.931015372276306,-0.344122022390366,-0.104039087891579,0.933143019676209,0.0575622506439686,0.0207394547760487\n             ,0.998126447200775,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.272957742214203,-0.239076629281044\n             ,0.931845724582672,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.272957742214203,-0.239076629281044\n             ,0.931845724582672,-0.157753229141235,-0.339445114135742,0.927303016185761,0.0575622506439686,0.0207394547760487\n             ,0.998126447200775,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.0142518226057291,-0.391459435224533\n             ,0.92008501291275,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.0142518226057291,-0.391459435224533\n             ,0.92008501291275,0.13820318877697,-0.388006061315537,0.911236047744751,0.0575622506439686,0.0207394547760487\n             ,0.998126447200775,0.13820318877697,-0.388006061315537,0.911236047744751,0.279189854860306,-0.329605966806412\n             ,0.901894092559814,0.0575622506439686,0.0207394547760487,0.998126447200775,0.279189854860306,-0.329605966806412\n             ,0.901894092559814,0.38951188325882,-0.224056273698807,0.893352866172791,0.0575622506439686,0.0207394547760487\n             ,0.998126447200775,0.38951188325882,-0.224056273698807,0.893352866172791,0.454289197921753,-0.0856318548321724\n             ,0.886729121208191,0.0575622506439686,0.0207394547760487,0.998126447200775,0.454289197921753,-0.0856318548321724\n             ,0.886729121208191,0.464658886194229,0.0669254288077354,0.88295704126358,0.0575622506439686,0.0207394547760487\n             ,0.998126447200775,0.464658886194229,0.0669254288077354,0.88295704126358,0.419226229190826,0.21297712624073,0.882547497749329\n             ,0.0575622506439686,0.0207394547760487,0.998126447200775,0.419226229190826,0.21297712624073,0.882547497749329\n             ,0.324202924966812,0.332735329866409,0.885539174079895,0.0575622506439686,0.0207394547760487,0.998126447200775\n             ,0.324202924966812,0.332735329866409,0.885539174079895,0.192422226071358,0.410055339336395,0.891531467437744\n             ,0.0575622506439686,0.0207394547760487,0.998126447200775\n        }\n        LayerElementUV: 0 {\n            Version: 101\n            Name: \"map1\"\n            MappingInformationType: \"ByPolygonVertex\"\n            ReferenceInformationType: \"IndexToDirect\"\n            UV: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193\n             ,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971\n             ,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189\n             ,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103\n             ,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103\n             ,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133\n             ,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381\n             ,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197\n             ,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381\n             ,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541\n             ,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657\n             ,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227\n             ,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189\n             ,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343\n             ,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041\n             ,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388\n             ,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262\n             ,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384\n             ,0.313490509986877,0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219\n             ,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384\n             ,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711\n             ,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434\n             ,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704\n             ,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295\n             ,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711\n             ,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919\n             ,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714\n             ,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721\n             ,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457\n             ,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533\n             ,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668\n             ,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609\n             ,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641\n             ,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477\n             ,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952\n             ,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179\n             ,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,0.360970288515091\n             ,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543\n             ,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275\n             ,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265\n             ,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347\n             ,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788\n             ,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292\n             ,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701\n             ,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518\n             ,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106\n             ,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773\n             ,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182\n             ,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717\n             ,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852\n             ,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802\n             ,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301\n             ,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902\n             ,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028\n             ,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265\n             ,0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052\n             ,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881\n             ,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353\n             ,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759\n             ,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876\n             ,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883\n             ,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243\n             ,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019\n             ,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086\n             ,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354\n             ,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458\n             ,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145\n             ,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984\n             ,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776\n             ,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498\n             ,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703\n             ,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005\n             ,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,0.609531939029694\n             ,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514\n             ,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136\n             ,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914\n             ,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291\n             ,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054\n             ,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134\n             ,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648\n             ,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641\n             ,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501\n             ,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514\n             ,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916\n             ,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246\n             ,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727\n             ,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926\n             ,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313\n             ,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945\n             ,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699\n             ,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488\n             ,0.0914957895874977,0.80051189661026,0.0865048691630363,0.763055205345154,0.080446183681488,0.719281196594238\n             ,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427\n             ,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571\n             ,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169\n             ,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773\n             ,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855\n             ,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001\n             ,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759\n             ,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486\n             ,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526\n             ,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024\n             ,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928\n             ,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131\n             ,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178\n             ,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772\n             ,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037\n             ,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327\n             ,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132\n             ,0.607026278972626,0.453061938285828,0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618\n             ,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778\n             ,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092\n             ,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932\n             ,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879\n             ,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267\n             ,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111\n             ,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753\n             ,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917\n             ,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712\n             ,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244\n             ,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589\n             ,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853\n             ,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413\n             ,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591\n             ,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181\n             ,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623\n             ,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,0.449466496706009\n             ,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806\n             ,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914\n             ,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502\n             ,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701\n             ,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449\n             ,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809\n             ,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545\n             ,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124\n             ,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685\n             ,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178\n             ,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955\n             ,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233\n             ,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522\n             ,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788\n             ,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333\n             ,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858\n             ,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182\n             ,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,0.34814915060997\n             ,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692\n             ,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521\n             ,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427\n             ,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427\n             ,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801\n             ,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498\n             ,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394\n             ,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777\n             ,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967\n             ,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378\n             ,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182\n             ,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182\n             ,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182\n             ,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894\n             ,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921\n             ,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591\n             ,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558\n             ,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,0.481752008199692\n             ,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365\n             ,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368\n             ,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543\n             ,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411\n             ,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909\n             ,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001\n             ,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795\n             ,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595\n             ,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929\n             ,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319\n             ,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246\n             ,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587\n             ,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095\n             ,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761\n             ,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699\n             ,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986\n             ,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892\n             ,0.494083315134048,0.483844935894012,0.491256147623062,0.476915508508682,0.489434659481049,0.507938206195831\n             ,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422\n             ,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841\n             ,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562\n             ,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153\n             ,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756\n             ,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266\n             ,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123\n             ,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202\n             ,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361\n             ,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219\n             ,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301\n             ,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226\n             ,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947\n             ,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013\n             ,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182\n             ,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135\n             ,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115\n             ,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,0.439141184091568,0.444102138280869\n             ,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231\n             ,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836\n             ,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449\n             ,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095\n             ,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943\n             ,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909\n             ,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634\n             ,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754\n             ,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949\n             ,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469\n             ,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691\n             ,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411\n             ,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387\n             ,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505\n             ,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175\n             ,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884\n             ,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211\n             ,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,0.454729199409485,0.506186008453369\n             ,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238\n             ,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731\n             ,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672\n             ,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634\n             ,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078\n             ,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088\n             ,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222\n             ,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316\n             ,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045\n             ,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819\n             ,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199\n             ,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759\n             ,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362\n             ,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628\n             ,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116\n             ,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052\n             ,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688\n             ,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,0.328943759202957,0.19858555495739,0.362459033727646\n             ,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177\n             ,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235\n             ,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975\n             ,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201\n             ,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482\n             ,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303\n             ,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773\n             ,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051\n             ,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464\n             ,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396\n             ,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856\n             ,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004\n             ,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612\n             ,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315\n             ,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162\n             ,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302\n             ,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666\n             ,0.507564306259155,0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726\n             ,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349\n             ,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645\n             ,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925\n             ,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608\n             ,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729\n             ,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505\n             ,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904\n             ,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256\n             ,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973\n             ,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215\n             ,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334\n             ,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766\n             ,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093\n             ,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483\n             ,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089\n             ,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503\n             ,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906\n             ,0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111\n             ,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224\n             ,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664\n             ,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219\n             ,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386\n             ,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467\n             ,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715\n             ,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145\n             ,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042\n             ,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589\n             ,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911\n             ,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309\n             ,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737\n             ,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353\n             ,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671\n             ,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867\n             ,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591\n             ,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672\n             ,0.271769434213638,0.385051816701889,0.256161749362946,0.422860234975815,0.246646866202354,0.351017981767654\n             ,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217\n             ,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237\n             ,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014\n             ,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803\n             ,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467\n             ,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254\n             ,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278\n             ,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076\n             ,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065\n             ,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293\n             ,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182\n             ,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982\n             ,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318\n             ,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803\n             ,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098\n             ,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775\n             ,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203\n             ,0.148400202393532,0.419813513755798,0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511\n             ,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461\n             ,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083\n             ,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674\n             ,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391\n             ,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467\n             ,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997\n             ,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567\n             ,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925\n             ,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404\n             ,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035\n             ,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767\n             ,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183\n             ,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859\n             ,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175\n             ,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153\n             ,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906\n             ,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072\n             ,0.425704270601273,0.605306565761566,0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718\n             ,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449\n             ,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115\n             ,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521\n             ,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587\n             ,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331\n             ,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873\n             ,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868\n             ,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152\n             ,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234\n             ,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304\n             ,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734\n             ,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086\n             ,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811\n             ,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376\n             ,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811\n             ,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416\n             ,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084\n             ,0.501217484474182,0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821\n             ,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037\n             ,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985\n             ,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476\n             ,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735\n             ,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619\n             ,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169\n             ,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391\n             ,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975\n             ,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484\n             ,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239\n             ,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107\n             ,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224\n             ,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567\n             ,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654\n             ,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557\n             ,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182\n             ,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,0.476730823516846,0.335748642683029\n             ,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566\n             ,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677\n             ,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529\n             ,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426\n             ,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792\n             ,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639\n             ,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413\n             ,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596\n             ,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899\n             ,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912\n             ,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452\n             ,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238\n             ,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541\n             ,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459\n             ,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182\n             ,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286\n             ,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342\n             ,0.201496973633766,0.577669441699982,0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191\n             ,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598\n             ,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243\n             ,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193\n             ,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442\n             ,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465\n             ,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923\n             ,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469\n             ,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606\n             ,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796\n             ,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159\n             ,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455\n             ,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422\n             ,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185\n             ,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441\n             ,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091\n             ,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489\n             ,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,0.594250917434692\n             ,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379\n             ,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832\n             ,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159\n             ,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268\n             ,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897\n             ,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138\n             ,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538\n             ,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041\n             ,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254\n             ,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863\n             ,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607\n             ,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511\n             ,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412\n             ,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093\n             ,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141\n             ,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647\n             ,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053\n             ,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976\n             ,0.574461042881012,0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185\n             ,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219\n             ,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711\n             ,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802\n             ,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016\n             ,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331\n             ,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385\n             ,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885\n             ,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399\n             ,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011\n             ,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597\n             ,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458\n             ,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544\n             ,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551\n             ,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252\n             ,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125\n             ,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748\n             ,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717\n             ,0.56607973575592,0.232950657606125,0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964\n             ,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863\n             ,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499\n             ,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504\n             ,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682\n             ,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619\n             ,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393\n             ,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586\n             ,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585\n             ,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027\n             ,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854\n             ,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075\n             ,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434\n             ,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353\n             ,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043\n             ,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069\n             ,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817\n             ,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957\n             ,0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531\n             ,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966\n             ,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297\n             ,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925\n             ,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983\n             ,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951\n             ,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038\n             ,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843\n             ,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608\n             ,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003\n             ,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476\n             ,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337\n             ,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737\n             ,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529\n             ,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413\n             ,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061\n             ,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845\n             ,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266\n             ,0.0327511876821518,0.240590929985046,0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031\n             ,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075\n             ,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524\n             ,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636\n             ,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248\n             ,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948\n             ,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729\n             ,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808\n             ,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219\n             ,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047\n             ,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019\n             ,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793\n             ,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262\n             ,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278\n             ,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192\n             ,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869\n             ,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409\n             ,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533\n             ,0.459741652011871,0.338231563568115,0.394522905349731,0.594241797924042,0.388592958450317,0.594755053520203\n             ,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798\n             ,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381\n             ,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707\n             ,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858\n             ,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587\n             ,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284\n             ,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955\n             ,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566\n             ,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552\n             ,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576\n             ,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234\n             ,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924\n             ,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093\n             ,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356\n             ,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098\n             ,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198\n             ,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073\n             ,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,0.227975755929947\n             ,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007\n             ,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338\n             ,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182\n             ,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421\n             ,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517\n             ,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137\n             ,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926\n             ,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832\n             ,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685\n             ,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432\n             ,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594\n             ,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892\n             ,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207\n             ,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182\n             ,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094\n             ,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112\n             ,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616\n             ,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905\n             ,0.387614846229553,0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666\n             ,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828\n             ,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714\n             ,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831\n             ,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868\n             ,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372\n             ,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579\n             ,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204\n             ,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623\n             ,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398\n             ,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665\n             ,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624\n             ,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595\n             ,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064\n             ,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547\n             ,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637\n             ,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637\n             ,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986\n             ,0.571574211120605,0.392384350299835,0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761\n             ,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108\n             ,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704\n             ,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631\n             ,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915\n             ,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931\n             ,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868\n             ,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272\n             ,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953\n             ,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621\n             ,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699\n             ,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921\n             ,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247\n             ,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195\n             ,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297\n             ,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018\n             ,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548\n             ,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472\n             ,0.480641216039658,0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786\n             ,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026\n             ,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289\n             ,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217\n             ,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317\n             ,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798\n             ,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684\n             ,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119\n             ,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895\n             ,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566\n             ,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657\n             ,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648\n             ,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405\n             ,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209\n             ,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182\n             ,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049\n             ,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871\n             ,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564\n             ,0.103776723146439,0.271889269351959,0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182\n             ,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592\n             ,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196\n             ,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287\n             ,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677\n             ,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707\n             ,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964\n             ,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558\n             ,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292\n             ,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369\n             ,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879\n             ,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581\n             ,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516\n             ,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948\n             ,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014\n             ,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099\n             ,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017\n             ,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714\n             ,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938\n             ,0.896463871002197,0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987\n             ,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376\n             ,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365\n             ,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283\n             ,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993\n             ,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462\n             ,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861\n             ,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179\n             ,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091\n             ,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416\n             ,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697\n             ,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603\n             ,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436\n             ,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565\n             ,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863\n             ,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596\n             ,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313\n             ,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162\n             ,0.677415728569031,0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415\n             ,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485\n             ,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717\n             ,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492\n             ,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802\n             ,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126\n             ,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353\n             ,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741\n             ,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369\n             ,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915\n             ,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869\n             ,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941\n             ,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857\n             ,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413\n             ,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263\n             ,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628\n             ,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325\n             ,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516\n             ,0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781\n             ,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433\n             ,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901\n             ,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092\n             ,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909\n             ,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625\n             ,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381\n             ,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694\n             ,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245\n             ,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554\n             ,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991\n             ,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085\n             ,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631\n             ,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987\n             ,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418\n             ,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385\n             ,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794\n             ,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,0.821314513683319\n             ,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365\n             ,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282\n             ,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057\n             ,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401\n             ,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807\n             ,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026\n             ,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284\n             ,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427\n             ,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571\n             ,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626\n             ,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966\n             ,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936\n             ,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784\n             ,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101\n             ,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047\n             ,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735\n             ,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461\n             ,0.492020517587662,0.517554759979248,0.489789307117462,0.521288216114044,0.486277997493744,0.524867177009583\n             ,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928\n             ,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064\n             ,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293\n             ,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593\n             ,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712\n             ,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917\n             ,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072\n             ,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667\n             ,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965\n             ,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874\n             ,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538\n             ,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843\n             ,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794\n             ,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585\n             ,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715\n             ,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085\n             ,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027\n             ,0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929\n             ,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339\n             ,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041\n             ,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593\n             ,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257\n             ,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865\n             ,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218\n             ,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002\n             ,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643\n             ,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033\n             ,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496\n             ,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972\n             ,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797\n             ,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385\n             ,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926\n             ,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969\n             ,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651\n             ,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073\n             ,0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589\n             ,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091\n             ,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849\n             ,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145\n             ,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966\n             ,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813\n             ,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549\n             ,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682\n             ,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345\n             ,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198\n             ,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342\n             ,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952\n             ,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792\n             ,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413\n             ,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689\n             ,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692\n             ,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341\n             ,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413\n             ,0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857\n             ,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229\n             ,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389\n             ,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644\n             ,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318\n             ,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391\n             ,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803\n             ,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125\n             ,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302\n             ,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012\n             ,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892\n             ,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605\n             ,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789\n             ,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325\n             ,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422\n             ,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616\n             ,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237\n             ,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,0.536648154258728\n             ,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332\n             ,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705\n             ,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594\n             ,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323\n             ,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961\n             ,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595\n             ,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625\n             ,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077\n             ,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185\n             ,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946\n             ,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793\n             ,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714\n             ,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911\n             ,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424\n             ,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269\n             ,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858\n             ,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366\n             ,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,0.422893911600113\n             ,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989\n             ,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466\n             ,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798\n             ,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643\n             ,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907\n             ,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301\n             ,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673\n             ,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091\n             ,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096\n             ,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179\n             ,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967\n             ,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601\n             ,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869\n             ,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821\n             ,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166\n             ,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871\n             ,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406\n             ,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231\n             ,0.506956994533539,0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583\n             ,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592\n             ,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502\n             ,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902\n             ,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233\n             ,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754\n             ,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585\n             ,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318\n             ,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581\n             ,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387\n             ,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016\n             ,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677\n             ,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467\n             ,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944\n             ,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835\n             ,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048\n             ,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596\n             ,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516\n             ,0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361\n             ,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801\n             ,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539\n             ,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536\n             ,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619\n             ,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706\n             ,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908\n             ,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959\n             ,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276\n             ,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093\n             ,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414\n             ,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312\n             ,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915\n             ,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001\n             ,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493\n             ,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274\n             ,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205\n             ,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969\n             ,0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574\n             ,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417\n             ,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949\n             ,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531\n             ,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658\n             ,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904\n             ,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587\n             ,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482\n             ,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813\n             ,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414\n             ,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549\n             ,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519\n             ,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291\n             ,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079\n             ,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499\n             ,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704\n             ,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482\n             ,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703\n             ,0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315\n             ,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092\n             ,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115\n             ,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262\n             ,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462\n             ,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838\n             ,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031\n             ,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309\n             ,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671\n             ,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812\n             ,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075\n             ,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934\n             ,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445\n             ,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217\n             ,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428\n             ,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437\n             ,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352\n             ,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,0.630282640457153,0.570110380649567,0.638663291931152\n             ,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883\n             ,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946\n             ,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217\n             ,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594\n             ,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294\n             ,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673\n             ,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989\n             ,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215\n             ,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178\n             ,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971\n             ,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697\n             ,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186\n             ,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828\n             ,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862\n             ,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393\n             ,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785\n             ,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137\n             ,0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802\n             ,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093\n             ,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707\n             ,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216\n             ,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906\n             ,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263\n             ,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312\n             ,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126\n             ,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493\n             ,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588\n             ,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353\n             ,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876\n             ,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205\n             ,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334\n             ,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671\n             ,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507\n             ,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395\n             ,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885\n             ,0.543237447738647,0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617\n             ,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816\n             ,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611\n             ,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188\n             ,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624\n             ,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801\n             ,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591\n             ,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872\n             ,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677\n             ,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859\n             ,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067\n             ,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833\n             ,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241\n             ,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753\n             ,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008\n             ,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242\n             ,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127\n             ,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,0.668446362018585\n             ,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944\n             ,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235\n             ,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293\n             ,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594\n             ,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388\n             ,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182\n             ,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292\n             ,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437\n             ,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775\n             ,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452\n             ,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378\n             ,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825\n             ,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676\n             ,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151\n             ,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392\n             ,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709\n             ,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407\n             ,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,0.602044343948364,0.593871057033539,0.612634897232056\n             ,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681\n             ,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495\n             ,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657\n             ,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869\n             ,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949\n             ,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217\n             ,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853\n             ,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542\n             ,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225\n             ,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512\n             ,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641\n             ,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237\n             ,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414\n             ,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135\n             ,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797\n             ,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228\n             ,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131\n             ,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843\n             ,0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426\n             ,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817\n             ,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721\n             ,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778\n             ,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033\n             ,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737\n             ,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438\n             ,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162\n             ,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053\n             ,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346\n             ,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016\n             ,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476\n             ,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299\n             ,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765\n             ,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195\n             ,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172\n             ,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753\n             ,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,0.525910139083862,0.60409289598465,0.548857510089874\n             ,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373\n             ,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253\n             ,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836\n             ,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636\n             ,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746\n             ,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846\n             ,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831\n             ,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435\n             ,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297\n             ,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074\n             ,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185\n             ,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792\n             ,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639\n             ,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363\n             ,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854\n             ,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912\n             ,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238\n             ,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,0.727306187152863,0.436012208461761,0.721607804298401\n             ,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151\n             ,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379\n             ,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726\n             ,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333\n             ,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193\n             ,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743\n             ,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923\n             ,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113\n             ,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407\n             ,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007\n             ,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574\n             ,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586\n             ,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572\n             ,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898\n             ,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817\n             ,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355\n             ,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363\n             ,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242\n             ,0.526827156543732,0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333\n             ,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207\n             ,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915\n             ,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519\n             ,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544\n             ,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841\n             ,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981\n             ,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856\n             ,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776\n             ,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298\n             ,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747\n             ,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119\n             ,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607\n             ,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449\n             ,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216\n             ,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907\n             ,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098\n             ,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478\n             ,0.754323303699493,0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661\n             ,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789\n             ,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656\n             ,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637\n             ,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916\n             ,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998\n             ,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843\n             ,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073\n             ,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256\n             ,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209\n             ,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557\n             ,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847\n             ,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922\n             ,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766\n             ,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067\n             ,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418\n             ,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945\n             ,0.611816823482513,0.769262611865997,0.623659491539001,0.771583199501038,0.616897940635681,0.768544793128967\n             ,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202\n             ,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237\n             ,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586\n             ,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377\n             ,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614\n             ,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228\n             ,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011\n             ,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935\n             ,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187\n             ,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505\n             ,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701\n             ,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249\n             ,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288\n             ,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198\n             ,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798\n             ,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556\n             ,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672\n             ,0.0403527356684208,0.816201508045197,0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954\n             ,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794\n             ,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053\n             ,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458\n             ,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152\n             ,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255\n             ,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333\n             ,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948\n             ,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407\n             ,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442\n             ,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881\n             ,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077\n             ,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848\n             ,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442\n             ,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047\n             ,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607\n             ,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028\n             ,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524\n             ,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,0.602072775363922\n             ,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928\n             ,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683\n             ,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194\n             ,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352\n             ,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337\n             ,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037\n             ,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379\n             ,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186\n             ,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632\n             ,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003\n             ,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204\n             ,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766\n             ,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587\n             ,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284\n             ,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815\n             ,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766\n             ,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552\n             ,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,0.556499540805817,0.599716067314148\n             ,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985\n             ,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148\n             ,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593\n             ,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416\n             ,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805\n             ,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398\n             ,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396\n             ,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575\n             ,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139\n             ,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971\n             ,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255\n             ,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755\n             ,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232\n             ,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146\n             ,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159\n             ,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612\n             ,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088\n             ,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,0.333364248275757,0.551311314105988\n             ,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593\n             ,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938\n             ,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211\n             ,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063\n             ,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969\n             ,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584\n             ,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382\n             ,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772\n             ,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761\n             ,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706\n             ,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931\n             ,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343\n             ,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879\n             ,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235\n             ,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556\n             ,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634\n             ,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232\n             ,0.678222596645355,0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482\n             ,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615\n             ,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465\n             ,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706\n             ,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678\n             ,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646\n             ,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009\n             ,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419\n             ,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097\n             ,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059\n             ,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836\n             ,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826\n             ,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054\n             ,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426\n             ,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095\n             ,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523\n             ,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181\n             ,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434\n             ,0.790905892848969,0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281\n             ,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853\n             ,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474\n             ,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692\n             ,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164\n             ,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879\n             ,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612\n             ,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325\n             ,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094\n             ,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736\n             ,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396\n             ,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113\n             ,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604\n             ,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125\n             ,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454\n             ,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813\n             ,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208\n             ,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171\n             ,0.543534815311432,0.0322365164756775,0.557037770748138,0.0385730713605881,0.557879507541656,0.0331084579229355\n             ,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259\n             ,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881\n             ,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256\n             ,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668\n             ,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886\n             ,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975\n             ,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967\n             ,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853\n             ,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967\n             ,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896\n             ,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146\n             ,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856\n             ,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337\n             ,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159\n             ,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105\n             ,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332\n             ,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896\n             ,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,0.485119014978409\n             ,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301\n             ,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146\n             ,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211\n             ,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664\n             ,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039\n             ,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856\n             ,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987\n             ,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969\n             ,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574\n             ,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758\n             ,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774\n             ,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024\n             ,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848\n             ,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837\n             ,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803\n             ,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771\n             ,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944\n             ,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512\n             ,0.0149797797203064,0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085\n             ,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472\n             ,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837\n             ,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977\n             ,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173\n             ,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594\n             ,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236\n             ,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413\n             ,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082\n             ,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577\n             ,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986\n             ,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726\n             ,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042\n             ,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941\n             ,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664\n             ,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441\n             ,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802\n             ,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249\n             ,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,0.0117701292037964,0.422150850296021\n             ,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992\n             ,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016\n             ,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007\n             ,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679\n             ,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564\n             ,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346\n             ,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245\n             ,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347\n             ,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546\n             ,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375\n             ,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705\n             ,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375\n             ,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682\n             ,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807\n             ,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807\n             ,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299\n             ,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458\n             ,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629\n             ,0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985\n             ,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827\n             ,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793\n             ,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793\n             ,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776\n             ,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835\n             ,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541\n             ,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364\n             ,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124\n             ,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341\n             ,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271\n             ,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038\n             ,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458\n             ,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082\n             ,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593\n             ,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896\n             ,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774\n             ,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903\n             ,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,0.683692932128906,0.0178875774145126\n             ,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999\n             ,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113\n             ,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504\n             ,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518\n             ,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639\n             ,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756\n             ,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693\n             ,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485\n             ,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158\n             ,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789\n             ,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196\n             ,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822\n             ,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684\n             ,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694\n             ,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229\n             ,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909\n             ,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786\n             ,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413\n             ,0.548435807228088,0.0826816782355309,0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547\n             ,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826\n             ,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975\n             ,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443\n             ,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139\n             ,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445\n             ,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139\n             ,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316\n             ,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195\n             ,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783\n             ,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956\n             ,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314\n             ,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949\n             ,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974\n             ,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385\n             ,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161\n             ,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436\n             ,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499\n             ,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,0.139729559421539\n             ,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231\n             ,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978\n             ,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644\n             ,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793\n             ,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138\n             ,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014\n             ,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102\n             ,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719\n             ,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226\n             ,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041\n             ,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953\n             ,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965\n             ,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809\n             ,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625\n             ,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767\n             ,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802\n             ,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031\n             ,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584\n             ,0.147085726261139,0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234\n             ,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214\n             ,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716\n             ,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162\n             ,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652\n             ,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242\n             ,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848\n             ,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742\n             ,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663\n             ,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214\n             ,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676\n             ,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026\n             ,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281\n             ,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501\n             ,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471\n             ,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744\n             ,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386\n             ,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,0.219694241881371\n             ,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547\n             ,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424\n             ,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412\n             ,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308\n             ,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237\n             ,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932\n             ,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395\n             ,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964\n             ,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765\n             ,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439\n             ,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814\n             ,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781\n             ,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738\n             ,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245\n             ,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754\n             ,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616\n             ,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856\n             ,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783\n             ,0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244\n             ,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314\n             ,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028\n             ,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755\n             ,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493\n             ,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161\n             ,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928\n             ,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969\n             ,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313\n             ,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533\n             ,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923\n             ,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585\n             ,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439\n             ,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072\n             ,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595\n             ,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719\n             ,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834\n             ,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461\n             ,0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035\n             ,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961\n             ,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809\n             ,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044\n             ,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767\n             ,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297\n             ,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319\n             ,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439\n             ,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344\n             ,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911\n             ,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438\n             ,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086\n             ,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652\n             ,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257\n             ,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271\n             ,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974\n             ,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378\n             ,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,0.759102463722229\n             ,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889\n             ,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481\n             ,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344\n             ,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916\n             ,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113\n             ,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035\n             ,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333\n             ,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982\n             ,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093\n             ,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449\n             ,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641\n             ,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698\n             ,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721\n             ,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791\n             ,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639\n             ,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339\n             ,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778\n             ,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,0.627090036869049,0.837572515010834,0.626471817493439\n             ,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483\n             ,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444\n             ,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985\n             ,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788\n             ,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789\n             ,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036\n             ,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774\n             ,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535\n             ,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803\n             ,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633\n             ,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265\n             ,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674\n             ,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813\n             ,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729\n             ,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488\n             ,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261\n             ,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986\n             ,0.934876620769501,0.369551956653595,0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266\n             ,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392\n             ,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022\n             ,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875\n             ,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793\n             ,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439\n             ,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034\n             ,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082\n             ,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703\n             ,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909\n             ,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385\n             ,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175\n             ,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853\n             ,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518\n             ,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391\n             ,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864\n             ,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694\n             ,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134\n             ,0.802964627742767,0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116\n             ,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152\n             ,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803\n             ,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513\n             ,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763\n             ,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533\n             ,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202\n             ,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861\n             ,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423\n             ,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336\n             ,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799\n             ,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267\n             ,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692\n             ,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754\n             ,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939\n             ,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019\n             ,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196\n             ,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577\n             ,0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812\n             ,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097\n             ,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148\n             ,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348\n             ,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046\n             ,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397\n             ,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519\n             ,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738\n             ,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629\n             ,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493\n             ,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662\n             ,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985\n             ,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547\n             ,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436\n             ,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933\n             ,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619\n             ,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053\n             ,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845\n             ,0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887\n             ,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403\n             ,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322\n             ,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825\n             ,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938\n             ,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625\n             ,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483\n             ,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074\n             ,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902\n             ,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819\n             ,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989\n             ,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789\n             ,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682\n             ,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013\n             ,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999\n             ,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776\n             ,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199\n             ,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223\n             ,0.108967132866383,0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653\n             ,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344\n             ,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567\n             ,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856\n             ,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633\n             ,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974\n             ,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752\n             ,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382\n             ,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158\n             ,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737\n             ,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058\n             ,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696\n             ,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204\n             ,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509\n             ,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662\n             ,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322\n             ,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012\n             ,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425\n             ,0.00582033395767212,0.928635358810425,0.0301453322172165,0.945208311080933,0.00582033395767212,0.945208311080933\n             ,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514\n             ,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405\n             ,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388\n             ,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033\n             ,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755\n             ,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412\n             ,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607\n             ,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329\n             ,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503\n             ,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658\n             ,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374\n             ,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612\n             ,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965\n             ,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048\n             ,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022\n             ,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702\n             ,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798\n             ,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871\n             ,0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183\n             ,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026\n             ,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686\n             ,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441\n             ,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027\n             ,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965\n             ,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746\n             ,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264\n             ,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264\n             ,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832\n             ,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264\n             ,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832\n             ,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264\n             ,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832\n             ,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264\n             ,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381\n             ,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173\n             ,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599\n             ,0.122953936457634,0.413901716470718,0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718\n             ,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573\n             ,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716\n             ,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406\n             ,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849\n             ,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505\n             ,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527\n             ,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705\n             ,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317\n             ,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891\n             ,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125\n             ,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664\n             ,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005\n             ,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411\n             ,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646\n             ,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727\n             ,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479\n             ,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036\n             ,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,0.920238852500916\n             ,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329\n             ,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139\n             ,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922\n             ,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667\n             ,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966\n             ,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947\n             ,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397\n             ,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714\n             ,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631\n             ,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703\n             ,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422\n             ,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177\n             ,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827\n             ,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016\n             ,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401\n             ,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739\n             ,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815\n             ,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697\n             ,0.803424000740051,0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604\n             ,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905\n             ,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934\n             ,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085\n             ,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821\n             ,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026\n             ,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963\n             ,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214\n             ,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479\n             ,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957\n             ,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588\n             ,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087\n             ,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243\n             ,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692\n             ,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099\n             ,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532\n             ,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791\n             ,0.950862765312195,0.773497998714447,0.940354406833649,0.773665010929108,0.959785580635071,0.773280024528503\n             ,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335\n             ,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843\n             ,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069\n             ,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397\n             ,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759\n             ,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017\n             ,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887\n             ,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721\n             ,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758\n             ,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103\n             ,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348\n             ,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713\n             ,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427\n             ,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438\n             ,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493\n             ,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631\n             ,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805\n             ,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,0.970409572124481,0.583586990833282\n             ,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393\n             ,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073\n             ,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911\n             ,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105\n             ,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717\n             ,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506\n             ,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356\n             ,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778\n             ,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796\n             ,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739\n             ,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681\n             ,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972\n             ,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302\n             ,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529\n             ,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543\n             ,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943\n             ,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554\n             ,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,0.719281017780304,0.983229696750641\n             ,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085\n             ,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348\n             ,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415\n             ,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949\n             ,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395\n             ,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667\n             ,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384\n             ,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288\n             ,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595\n             ,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471\n             ,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626\n             ,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271\n             ,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193\n             ,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487\n             ,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584\n             ,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934\n             ,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863\n             ,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,0.983235836029053\n             ,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457\n             ,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658\n             ,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033\n             ,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761\n             ,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362\n             ,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545\n             ,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561\n             ,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541\n             ,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054\n             ,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947\n             ,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414\n             ,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457\n             ,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947\n             ,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493\n             ,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898\n             ,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854\n             ,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326\n             ,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623\n             ,0.637106657028198,0.177578389644623,0.620323657989502,0.196973383426666,0.620323657989502,0.177578389644623\n             ,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666\n             ,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623\n             ,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666\n             ,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623\n             ,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666\n             ,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623\n             ,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189\n             ,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189\n             ,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649\n             ,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573\n             ,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189\n             ,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194\n             ,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485\n             ,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065\n             ,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296\n             ,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622\n             ,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585\n             ,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,0.206433475017548\n             ,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296\n             ,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334\n             ,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997\n             ,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294\n             ,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981\n             ,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236\n             ,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779\n             ,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528\n             ,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978\n             ,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236\n             ,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572\n             ,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427\n             ,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366\n             ,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857\n             ,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455\n             ,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427\n             ,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821\n             ,0.683457255363464,0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366\n             ,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464\n             ,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882\n             ,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198\n             ,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284\n             ,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007\n             ,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526\n             ,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646\n             ,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012\n             ,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055\n             ,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399\n             ,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395\n             ,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348\n             ,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178\n             ,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298\n             ,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594\n             ,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656\n             ,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895\n             ,0.881043076515198,0.466186791658401,0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712\n             ,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091\n             ,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506\n             ,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358\n             ,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734\n             ,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673\n             ,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688\n             ,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819\n             ,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173\n             ,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504\n             ,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948\n             ,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933\n             ,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462\n             ,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374\n             ,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687\n             ,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874\n             ,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169\n             ,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942\n             ,0.833344876766205,0.484429806470871,0.847736835479736,0.463386803865433,0.846568882465363,0.464255839586258\n             ,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594\n             ,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039\n             ,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058\n             ,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912\n             ,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176\n             ,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588\n             ,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649\n             ,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423\n             ,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892\n             ,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426\n             ,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066\n             ,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939\n             ,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371\n             ,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027\n             ,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941\n             ,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445\n             ,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186\n             ,0.516026794910431,0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303\n             ,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943\n             ,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244\n             ,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319\n             ,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886\n             ,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785\n             ,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449\n             ,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341\n             ,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361\n             ,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546\n             ,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223\n             ,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809\n             ,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425\n             ,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985\n             ,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512\n             ,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143\n             ,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318\n             ,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,0.206447616219521\n             ,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339\n             ,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727\n             ,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211\n             ,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016\n             ,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147\n             ,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817\n             ,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345\n             ,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594\n             ,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496\n             ,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134\n             ,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641\n             ,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343\n             ,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339\n             ,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869\n             ,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087\n             ,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312\n             ,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043\n             ,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437\n             ,0.0736037790775299,0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556\n             ,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207\n             ,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902\n             ,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219\n             ,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598\n             ,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219\n             ,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572\n             ,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219\n             ,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598\n             ,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219\n             ,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598\n             ,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219\n             ,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943\n             ,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219\n             ,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598\n             ,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489\n             ,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489\n             ,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598\n             ,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,0.0853549689054489\n             ,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489\n             ,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489\n             ,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598\n             ,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426\n             ,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639\n             ,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219\n             ,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099\n             ,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099\n             ,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219\n             ,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099\n             ,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099\n             ,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099\n             ,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099\n             ,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572\n             ,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627\n             ,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769\n             ,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969\n             ,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366\n             ,0.26112961769104,0.530635476112366,0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969\n             ,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774\n             ,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333\n             ,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752\n             ,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912\n             ,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969\n             ,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841\n             ,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954\n             ,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874\n             ,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733\n             ,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373\n             ,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841\n             ,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996\n             ,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782\n             ,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402\n             ,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143\n             ,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996\n             ,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,0.674582898616791\n             ,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704\n             ,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878\n             ,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626\n             ,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689\n             ,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491\n             ,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516\n             ,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756\n             ,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491\n             ,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491\n             ,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491\n             ,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838\n             ,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231\n             ,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903\n             ,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491\n             ,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667\n             ,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039\n             ,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127\n             ,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034\n             ,0.279166221618652,0.709953963756561,0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829\n             ,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034\n             ,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919\n             ,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817\n             ,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376\n             ,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107\n             ,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365\n             ,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394\n             ,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512\n             ,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005\n             ,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762\n             ,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073\n             ,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797\n             ,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996\n             ,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961\n             ,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652\n             ,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371\n             ,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471\n             ,0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855\n             ,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857\n             ,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742\n             ,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824\n             ,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165\n             ,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544\n             ,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159\n             ,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304\n             ,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052\n             ,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465\n             ,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604\n             ,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885\n             ,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418\n             ,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952\n             ,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744\n             ,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787\n             ,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271\n             ,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956\n             ,0.310332953929901,0.122801892459393,0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765\n             ,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174\n             ,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895\n             ,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853\n             ,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923\n             ,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062\n             ,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285\n             ,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984\n             ,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487\n             ,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485\n             ,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345\n             ,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459\n             ,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949\n             ,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115\n             ,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371\n             ,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234\n             ,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749\n             ,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003\n             ,0.118860952556133,0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872\n             ,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677\n             ,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736\n             ,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601\n             ,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488\n             ,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379\n             ,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588\n             ,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744\n             ,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365\n             ,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533\n             ,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111\n             ,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683\n             ,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884\n             ,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132\n             ,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009\n             ,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352\n             ,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487\n             ,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753\n             ,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,0.118029937148094\n             ,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147\n             ,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296\n             ,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276\n             ,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258\n             ,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242\n             ,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328\n             ,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209\n             ,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408\n             ,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444\n             ,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744\n             ,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189\n             ,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348\n             ,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553\n             ,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813\n             ,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817\n             ,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151\n             ,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666\n             ,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,0.409544587135315\n             ,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578\n             ,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315\n             ,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427\n             ,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869\n             ,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045\n             ,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953\n             ,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469\n             ,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199\n             ,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483\n             ,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233\n             ,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983\n             ,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259\n             ,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056\n             ,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114\n             ,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344\n             ,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201\n             ,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787\n             ,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,0.244148418307304,0.376309484243393\n             ,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048\n             ,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726\n             ,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136\n             ,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081\n             ,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525\n             ,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041\n             ,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821\n             ,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141\n             ,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401\n             ,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203\n             ,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048\n             ,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252\n             ,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377\n             ,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443\n             ,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231\n             ,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852\n             ,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422\n             ,0.271062970161438,0.0843436047434807,0.268807142972946,0.0709859803318977,0.255287438631058,0.0861772000789642\n             ,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729\n             ,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628\n             ,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696\n             ,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072\n             ,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508\n             ,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894\n             ,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728\n             ,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823\n             ,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232\n             ,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764\n             ,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132\n             ,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678\n             ,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657\n             ,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221\n             ,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614\n             ,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378\n             ,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101\n             ,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,0.0979962795972824\n             ,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462\n             ,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847\n             ,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485\n             ,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251\n             ,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588\n             ,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106\n             ,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207\n             ,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301\n             ,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591\n             ,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064\n             ,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513\n             ,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792\n             ,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899\n             ,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687\n             ,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716\n             ,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147\n             ,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609\n             ,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629\n             ,0.359014123678207,0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587\n             ,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061\n             ,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602\n             ,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129\n             ,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097\n             ,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496\n             ,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871\n             ,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729\n             ,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304\n             ,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162\n             ,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452\n             ,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711\n             ,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926\n             ,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932\n             ,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262\n             ,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124\n             ,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343\n             ,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411\n             ,0.422037154436111,0.454183876514435,0.141791939735413,0.448351323604584,0.145058676600456,0.413058042526245\n             ,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936\n             ,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803\n             ,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148\n             ,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041\n             ,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949\n             ,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288\n             ,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867\n             ,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632\n             ,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136\n             ,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569\n             ,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929\n             ,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264\n             ,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125\n             ,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113\n             ,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998\n             ,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839\n             ,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925\n             ,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089\n             ,0.791049957275391,0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943\n             ,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606\n             ,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799\n             ,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593\n             ,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519\n             ,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899\n             ,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376\n             ,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953\n             ,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894\n             ,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433\n             ,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309\n             ,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157\n             ,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123\n             ,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547\n             ,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583\n             ,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052\n             ,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226\n             ,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263\n             ,0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374\n             ,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441\n             ,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365\n             ,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827\n             ,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052\n             ,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489\n             ,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326\n             ,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963\n             ,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869\n             ,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591\n             ,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551\n             ,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554\n             ,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624\n             ,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777\n             ,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417\n             ,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217\n             ,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178\n             ,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266\n             ,0.587654650211334,0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256\n             ,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718\n             ,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493\n             ,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411\n             ,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719\n             ,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913\n             ,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167\n             ,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882\n             ,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955\n             ,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649\n             ,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325\n             ,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255\n             ,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884\n             ,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861\n             ,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323\n             ,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561\n             ,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732\n             ,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287\n             ,0.0992880389094353,0.55315625667572,0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153\n             ,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077\n             ,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604\n             ,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723\n             ,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099\n             ,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052\n             ,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661\n             ,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696\n             ,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555\n             ,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121\n             ,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921\n             ,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163\n             ,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999\n             ,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799\n             ,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263\n             ,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706\n             ,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333\n             ,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,0.941240012645721,0.446224510669708,0.945038080215454\n             ,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966\n             ,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089\n             ,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791\n             ,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507\n             ,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741\n             ,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681\n             ,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343\n             ,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353\n             ,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989\n             ,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761\n             ,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865\n             ,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874\n             ,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515\n             ,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253\n             ,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576\n             ,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218\n             ,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552\n             ,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,0.356241673231125,0.772000849246979,0.366978108882904\n             ,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864\n             ,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292\n             ,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755\n             ,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155\n             ,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587\n             ,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601\n             ,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909\n             ,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252\n             ,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265\n             ,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148\n             ,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241\n             ,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952\n             ,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867\n             ,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499\n             ,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557\n             ,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203\n             ,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677\n             ,0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819\n             ,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731\n             ,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794\n             ,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986\n             ,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596\n             ,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101\n             ,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689\n             ,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563\n             ,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283\n             ,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966\n             ,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416\n             ,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492\n             ,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293\n             ,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329\n             ,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928\n             ,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628\n             ,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142\n             ,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711\n             ,0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301\n             ,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019\n             ,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856\n             ,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073\n             ,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582\n             ,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101\n             ,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735\n             ,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171\n             ,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546\n             ,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966\n             ,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847\n             ,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669\n             ,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816\n             ,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271\n             ,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969\n             ,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144\n             ,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889\n             ,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,0.90440434217453\n             ,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953\n             ,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483\n             ,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355\n             ,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553\n             ,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552\n             ,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807\n             ,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127\n             ,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769\n             ,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912\n             ,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362\n             ,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681\n             ,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301\n             ,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735\n             ,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558\n             ,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324\n             ,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062\n             ,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897\n             ,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126\n             ,0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627\n             ,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095\n             ,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698\n             ,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184\n             ,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311\n             ,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807\n             ,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608\n             ,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066\n             ,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631\n             ,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364\n             ,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613\n             ,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637\n             ,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822\n             ,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064\n             ,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049\n             ,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388\n             ,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871\n             ,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525\n             ,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,0.014482319355011,0.828360557556152\n             ,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264\n             ,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542\n             ,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714\n             ,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178\n             ,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679\n             ,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773\n             ,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899\n             ,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856\n             ,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726\n             ,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275\n             ,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331\n             ,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956\n             ,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286\n             ,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902\n             ,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064\n             ,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992\n             ,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046\n             ,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065\n             ,0.0374843291938305,0.953755974769592,0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093\n             ,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771\n             ,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919\n             ,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174\n             ,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231\n             ,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546\n             ,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135\n             ,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486\n             ,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434\n             ,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853\n             ,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516\n             ,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148\n             ,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862\n             ,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159\n             ,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281\n             ,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019\n             ,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685\n             ,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583\n             ,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801\n             ,0.0981541946530342,0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569\n             ,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678\n             ,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398\n             ,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311\n             ,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624\n             ,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072\n             ,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534\n             ,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705\n             ,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058\n             ,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392\n             ,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808\n             ,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182\n             ,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251\n             ,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595\n             ,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462\n             ,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561\n             ,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289\n             ,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591\n             ,0.778886675834656,0.0793051347136498,0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062\n             ,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406\n             ,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422\n             ,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273\n             ,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907\n             ,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748\n             ,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067\n             ,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147\n             ,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061\n             ,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285\n             ,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207\n             ,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035\n             ,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842\n             ,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843\n             ,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121\n             ,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181\n             ,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929\n             ,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205\n             ,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,0.493428647518158,0.950604200363159,0.342332631349564\n             ,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105\n             ,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942\n             ,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006\n             ,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132\n             ,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452\n             ,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178\n             ,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055\n             ,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998\n             ,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961\n             ,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459\n             ,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692\n             ,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107\n             ,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555\n             ,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523\n             ,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965\n             ,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491\n             ,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866\n             ,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,0.0616136789321899\n             ,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065\n             ,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058\n             ,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524\n             ,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933\n             ,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833\n             ,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714\n             ,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415\n             ,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849\n             ,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693\n             ,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786\n             ,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248\n             ,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891\n             ,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762\n             ,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805\n             ,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262\n             ,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801\n             ,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649\n             ,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,0.146303951740265\n             ,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852\n             ,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239\n             ,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486\n             ,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104\n             ,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275\n             ,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915\n             ,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366\n             ,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247\n             ,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994\n             ,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727\n             ,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625\n             ,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211\n             ,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571\n             ,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855\n             ,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936\n             ,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028\n             ,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311\n             ,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853\n             ,0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294\n             ,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689\n             ,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475\n             ,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534\n             ,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296\n             ,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262\n             ,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458\n             ,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576\n             ,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224\n             ,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192\n             ,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659\n             ,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292\n             ,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854\n             ,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667\n             ,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954\n             ,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474\n             ,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496\n             ,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,0.368574023246765\n             ,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918\n             ,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234\n             ,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442\n             ,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323\n             ,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508\n             ,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179\n             ,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663\n             ,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915\n             ,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099\n             ,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953\n             ,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099\n             ,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561\n             ,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142\n             ,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527\n             ,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201\n             ,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436\n             ,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195\n             ,0.864213168621063,0.874509155750275,0.815409004688263,0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517\n             ,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533\n             ,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886\n             ,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494\n             ,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446\n             ,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232\n             ,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218\n             ,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085\n             ,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347\n             ,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928\n             ,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136\n             ,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283\n             ,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479\n             ,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532\n             ,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573\n             ,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361\n             ,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852\n             ,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387\n             ,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,0.754678249359131,0.978725790977478,0.543712019920349\n             ,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391\n             ,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577\n             ,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624\n             ,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683\n             ,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114\n             ,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614\n             ,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099\n             ,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604\n             ,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826\n             ,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798\n             ,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116\n             ,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836\n             ,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289\n             ,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151\n             ,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612\n             ,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483\n             ,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287\n             ,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077\n             ,0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059\n             ,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541\n             ,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552\n             ,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615\n             ,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552\n             ,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438\n             ,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544\n             ,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911\n             ,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575\n             ,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466\n             ,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738\n             ,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771\n             ,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833\n             ,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851\n             ,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844\n             ,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017\n             ,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389\n             ,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,0.596252083778381\n             ,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431\n             ,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248\n             ,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647\n             ,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604\n             ,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743\n             ,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143\n             ,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135\n             ,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105\n             ,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598\n             ,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071\n             ,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036\n             ,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016\n             ,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663\n             ,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761\n             ,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498\n             ,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563\n             ,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107\n             ,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,0.123328268527985\n             ,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257\n             ,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906\n             ,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161\n             ,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579\n             ,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338\n             ,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999\n             ,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601\n             ,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367\n             ,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216\n             ,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667\n             ,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579\n             ,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399\n             ,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943\n             ,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309\n             ,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943\n             ,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837\n             ,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907\n             ,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701\n             ,0.0743808746337891,0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449\n             ,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131\n             ,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004\n             ,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825\n             ,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839\n             ,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162\n             ,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248\n             ,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573\n             ,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173\n             ,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551\n             ,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622\n             ,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514\n             ,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694\n             ,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746\n             ,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895\n             ,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794\n             ,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256\n             ,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982\n             ,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,0.235308602452278,0.0271604433655739\n             ,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528\n             ,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348\n             ,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254\n             ,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999\n             ,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315\n             ,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645\n             ,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786\n             ,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184\n             ,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138\n             ,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643\n             ,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822\n             ,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593\n             ,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705\n             ,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004\n             ,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622\n             ,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445\n             ,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276\n             ,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119\n             ,0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756\n             ,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021\n             ,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918\n             ,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715\n             ,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297\n             ,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861\n             ,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532\n             ,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327\n             ,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726\n             ,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033\n             ,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935\n             ,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712\n             ,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401\n             ,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066\n             ,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684\n             ,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507\n             ,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769\n             ,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025\n             ,0.199742212891579,0.168715670704842,0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788\n             ,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238\n             ,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198\n             ,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442\n             ,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422\n             ,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828\n             ,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674\n             ,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872\n             ,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071\n             ,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138\n             ,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372\n             ,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032\n             ,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568\n             ,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736\n             ,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654\n             ,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647\n             ,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486\n             ,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797\n             ,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,0.196686863899231\n             ,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779\n             ,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774\n             ,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293\n             ,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767\n             ,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605\n             ,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791\n             ,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802\n             ,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394\n             ,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095\n             ,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429\n             ,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594\n             ,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718\n             ,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846\n             ,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739\n             ,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413\n             ,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194\n             ,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045\n             ,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878\n             ,0.808161675930023,0.0944669842720032,0.829814612865448,0.092739924788475,0.836659967899323,0.0951223000884056\n             ,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991\n             ,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075\n             ,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593\n             ,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249\n             ,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553\n             ,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703\n             ,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739\n             ,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957\n             ,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137\n             ,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514\n             ,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253\n             ,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445\n             ,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285\n             ,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507\n             ,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174\n             ,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025\n             ,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016\n             ,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484\n             ,0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946\n             ,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923\n             ,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027\n             ,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142\n             ,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955\n             ,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959\n             ,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588\n             ,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862\n             ,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835\n             ,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371\n             ,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649\n             ,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221\n             ,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001\n             ,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212\n             ,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617\n             ,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852\n             ,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272\n             ,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529\n             ,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,0.719165027141571\n             ,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167\n             ,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402\n             ,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059\n             ,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922\n             ,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845\n             ,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484\n             ,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134\n             ,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946\n             ,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799\n             ,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152\n             ,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846\n             ,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344\n             ,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634\n             ,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712\n             ,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767\n             ,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896\n             ,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513\n             ,0.326107054948807,0.852742612361908,0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824\n             ,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436\n             ,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126\n             ,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681\n             ,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107\n             ,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346\n             ,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474\n             ,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814\n             ,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993\n             ,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485\n             ,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569\n             ,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177\n             ,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631\n             ,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575\n             ,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191\n             ,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654\n             ,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791\n             ,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805\n             ,0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105\n             ,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864\n             ,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353\n             ,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369\n             ,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879\n             ,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128\n             ,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803\n             ,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568\n             ,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728\n             ,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048\n             ,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721\n             ,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887\n             ,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493\n             ,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541\n             ,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654\n             ,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739\n             ,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811\n             ,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126\n             ,0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577\n             ,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316\n             ,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024\n             ,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512\n             ,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663\n             ,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183\n             ,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993\n             ,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874\n             ,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672\n             ,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852\n             ,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213\n             ,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545\n             ,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629\n             ,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769\n             ,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438\n             ,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584\n             ,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542\n             ,0.832485556602478,0.200292333960533,0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885\n             ,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341\n             ,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608\n             ,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764\n             ,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994\n             ,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566\n             ,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395\n             ,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244\n             ,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863\n             ,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421\n             ,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298\n             ,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857\n             ,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562\n             ,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951\n             ,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106\n             ,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525\n             ,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025\n             ,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655\n             ,0.0769496187567711,0.269949793815613,0.0977088510990143,0.236902311444283,0.106580346822739,0.257785648107529\n             ,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196\n             ,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211\n             ,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858\n             ,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601\n             ,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026\n             ,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972\n             ,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517\n             ,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404\n             ,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855\n             ,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465\n             ,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925\n             ,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538\n             ,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066\n             ,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374\n             ,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817\n             ,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534\n             ,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956\n             ,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943\n             ,0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938\n             ,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861\n             ,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834\n             ,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809\n             ,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992\n             ,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746\n             ,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456\n             ,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815\n             ,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706\n             ,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789\n             ,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591\n             ,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756\n             ,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574\n             ,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455\n             ,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948\n             ,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651\n             ,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686\n             ,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111\n             ,0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853\n             ,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524\n             ,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924\n             ,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975\n             ,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757\n             ,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691\n             ,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315\n             ,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324\n             ,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381\n             ,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344\n             ,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401\n             ,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844\n             ,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196\n             ,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418\n             ,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398\n             ,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522\n             ,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685\n             ,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437\n             ,0.133912816643715,0.20319464802742,0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524\n             ,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954\n             ,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344\n             ,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936\n             ,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318\n             ,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407\n             ,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033\n             ,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092\n             ,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791\n             ,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299\n             ,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534\n             ,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933\n             ,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886\n             ,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962\n             ,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948\n             ,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535\n             ,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283\n             ,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526\n             ,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,0.232346341013908,0.0509957745671272\n             ,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807\n             ,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112\n             ,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229\n             ,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593\n             ,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723\n             ,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959\n             ,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508\n             ,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872\n             ,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774\n             ,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491\n             ,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963\n             ,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169\n             ,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043\n             ,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012\n             ,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435\n             ,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189\n             ,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613\n             ,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837\n             ,0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475\n             ,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268\n             ,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307\n             ,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897\n             ,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761\n             ,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134\n             ,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111\n             ,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347\n             ,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226\n             ,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311\n             ,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284\n             ,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513\n             ,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504\n             ,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754\n             ,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277\n             ,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662\n             ,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374\n             ,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521\n             ,0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302\n             ,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995\n             ,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124\n             ,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597\n             ,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387\n             ,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505\n             ,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043\n             ,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425\n             ,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526\n             ,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425\n             ,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296\n             ,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193\n             ,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371\n             ,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927\n             ,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216\n             ,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302\n             ,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857\n             ,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,0.0835410356521606\n             ,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049\n             ,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313\n             ,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937\n             ,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547\n             ,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081\n             ,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316\n             ,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013\n             ,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102\n             ,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062\n             ,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082\n             ,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773\n             ,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134\n             ,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551\n             ,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289\n             ,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298\n             ,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368\n             ,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232\n             ,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244\n             ,0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757\n             ,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896\n             ,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648\n             ,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179\n             ,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826\n             ,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774\n             ,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951\n             ,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127\n             ,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092\n             ,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548\n             ,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717\n             ,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938\n             ,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157\n             ,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339\n             ,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889\n             ,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367\n             ,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367\n             ,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,0.0136640649288893,0.0665248408913612\n             ,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612\n             ,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065\n             ,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065\n             ,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556\n             ,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419\n             ,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017\n             ,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845\n             ,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715\n             ,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089\n             ,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965\n             ,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461\n             ,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831\n             ,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829\n             ,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545\n             ,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177\n             ,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883\n             ,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697\n             ,0.314485341310501,0.406984806060791,0.316858559846878,0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387\n             ,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964\n             ,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025\n             ,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207\n             ,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904\n             ,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587\n             ,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769\n             ,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004\n             ,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594\n             ,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897\n             ,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296\n             ,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728\n             ,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203\n             ,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597\n             ,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413\n             ,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161\n             ,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359\n             ,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516\n             ,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,0.313420087099075\n             ,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709\n             ,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498\n             ,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002\n             ,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516\n             ,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431\n             ,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014\n             ,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501\n             ,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879\n             ,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071\n             ,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488\n             ,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054\n             ,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621\n             ,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581\n             ,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979\n             ,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229\n             ,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853\n             ,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206\n             ,0.482427507638931,0.03264981508255,0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678\n             ,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031\n             ,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425\n             ,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013\n             ,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524\n             ,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011\n             ,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245\n             ,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545\n             ,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196\n             ,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861\n             ,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417\n             ,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953\n             ,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225\n             ,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125\n             ,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099\n             ,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026\n             ,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506\n             ,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488\n             ,0.508201599121094,0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518\n             ,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614\n             ,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507\n             ,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112\n             ,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837\n             ,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136\n             ,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232\n             ,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973\n             ,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623\n             ,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763\n             ,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747\n             ,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272\n             ,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616\n             ,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115\n             ,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589\n             ,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448\n             ,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921\n             ,0.36936816573143,0.356859803199768,0.368447452783585,0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833\n             ,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501\n             ,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896\n             ,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043\n             ,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703\n             ,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337\n             ,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932\n             ,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926\n             ,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719\n             ,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722\n             ,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059\n             ,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724\n             ,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386\n             ,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075\n             ,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982\n             ,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831\n             ,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061\n             ,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882\n             ,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,0.472558706998825\n             ,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371\n             ,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662\n             ,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157\n             ,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488\n             ,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213\n             ,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228\n             ,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769\n             ,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445\n             ,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987\n             ,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297\n             ,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301\n             ,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968\n             ,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383\n             ,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316\n             ,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728\n             ,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934\n             ,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062\n             ,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,0.421510130167007\n             ,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138\n             ,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685\n             ,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951\n             ,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986\n             ,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596\n             ,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243\n             ,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912\n             ,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292\n             ,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215\n             ,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973\n             ,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905\n             ,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943\n             ,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512\n             ,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145\n             ,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688\n             ,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501\n             ,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606\n             ,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063\n             ,0.550254046916962,0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256\n             ,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822\n             ,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009\n             ,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872\n             ,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118\n             ,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307\n             ,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597\n             ,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128\n             ,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805\n             ,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793\n             ,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287\n             ,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942\n             ,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822\n             ,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087\n             ,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613\n             ,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501\n             ,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905\n             ,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853\n             ,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,0.0392846465110779\n             ,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323\n             ,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303\n             ,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236\n             ,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301\n             ,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276\n             ,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524\n             ,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811\n             ,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015\n             ,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329\n             ,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264\n             ,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334\n             ,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247\n             ,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133\n             ,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948\n             ,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682\n             ,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794\n             ,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389\n             ,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623\n             ,0.49083137512207,0.0473983287811279,0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202\n             ,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392\n             ,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182\n             ,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062\n             ,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643\n             ,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692\n             ,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449\n             ,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011\n             ,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257\n             ,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773\n             ,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833\n             ,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563\n             ,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795\n             ,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609\n             ,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502\n             ,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668\n             ,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125\n             ,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896\n             ,0.4264976978302,0.349507212638855,0.451796531677246,0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252\n             ,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556\n             ,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646\n             ,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215\n             ,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107\n             ,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446\n             ,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764\n             ,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714\n             ,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638\n             ,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395\n             ,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909\n             ,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372\n             ,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249\n             ,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264\n             ,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609\n             ,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581\n             ,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568\n             ,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235\n             ,0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337\n             ,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889\n             ,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665\n             ,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375\n             ,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789\n             ,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837\n             ,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324\n             ,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636\n             ,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212\n             ,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615\n             ,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548\n             ,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098\n             ,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755\n             ,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362\n             ,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667\n             ,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625\n             ,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563\n             ,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,0.780230820178986\n             ,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454\n             ,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234\n             ,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135\n             ,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538\n             ,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973\n             ,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574\n             ,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557\n             ,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968\n             ,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793\n             ,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841\n             ,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715\n             ,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775\n             ,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791\n             ,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083\n             ,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772\n             ,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374\n             ,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895\n             ,0.664426863193512,0.451735496520996,0.781740605831146,0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182\n             ,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671\n             ,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875\n             ,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996\n             ,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791\n             ,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095\n             ,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036\n             ,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128\n             ,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326\n             ,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032\n             ,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638\n             ,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726\n             ,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397\n             ,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745\n             ,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954\n             ,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098\n             ,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755\n             ,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526\n             ,0.486700624227524,0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725\n             ,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627\n             ,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157\n             ,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655\n             ,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994\n             ,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179\n             ,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507\n             ,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814\n             ,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901\n             ,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877\n             ,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012\n             ,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375\n             ,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355\n             ,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281\n             ,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865\n             ,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833\n             ,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743\n             ,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768\n             ,0.386751741170883,0.617895185947418,0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288\n             ,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473\n             ,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659\n             ,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292\n             ,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964\n             ,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133\n             ,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201\n             ,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293\n             ,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013\n             ,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646\n             ,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588\n             ,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165\n             ,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865\n             ,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227\n             ,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106\n             ,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642\n             ,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765\n             ,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,0.90181291103363,0.50802755355835\n             ,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183\n             ,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227\n             ,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086\n             ,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432\n             ,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513\n             ,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312\n             ,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633\n             ,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022\n             ,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552\n             ,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808\n             ,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386\n             ,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944\n             ,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297\n             ,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484\n             ,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453\n             ,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383\n             ,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065\n             ,0.637537717819214,0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802\n             ,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354\n             ,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872\n             ,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222\n             ,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638\n             ,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807\n             ,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524\n             ,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323\n             ,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165\n             ,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507\n             ,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951\n             ,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215\n             ,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087\n             ,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366\n             ,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399\n             ,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123\n             ,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671\n             ,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,0.564278662204742\n             ,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543\n             ,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744\n             ,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924\n             ,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052\n             ,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235\n             ,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116\n             ,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443\n             ,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149\n             ,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659\n             ,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132\n             ,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731\n             ,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403\n             ,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649\n             ,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019\n             ,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981\n             ,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601\n             ,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013\n             ,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,0.561667025089264,0.981199622154236\n             ,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288\n             ,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623\n             ,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255\n             ,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904\n             ,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255\n             ,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155\n             ,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439\n             ,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626\n             ,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971\n             ,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574\n             ,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566\n             ,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699\n             ,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431\n             ,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864\n             ,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974\n             ,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008\n             ,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,0.991807043552399\n             ,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344\n             ,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207\n             ,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793\n             ,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829\n             ,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166\n             ,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062\n             ,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816\n             ,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186\n             ,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449\n             ,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567\n             ,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317\n             ,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936\n             ,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294\n             ,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198\n             ,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379\n             ,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029\n             ,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272\n             ,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,0.434852063655853\n             ,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239\n             ,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279\n             ,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657\n             ,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565\n             ,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876\n             ,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016\n             ,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383\n             ,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222\n             ,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827\n             ,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765\n             ,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324\n             ,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245\n             ,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762\n             ,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984\n             ,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822\n             ,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933\n             ,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329\n             ,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999\n             ,0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249\n             ,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244\n             ,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762\n             ,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181\n             ,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814\n             ,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899\n             ,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994\n             ,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935\n             ,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381\n             ,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414\n             ,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813\n             ,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488\n             ,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838\n             ,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535\n             ,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539\n             ,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418\n             ,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368\n             ,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535\n             ,0.816003322601318,0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638\n             ,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751\n             ,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699\n             ,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256\n             ,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667\n             ,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938\n             ,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555\n             ,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219\n             ,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725\n             ,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928\n             ,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241\n             ,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347\n             ,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236\n             ,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984\n             ,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482\n             ,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451\n             ,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037\n             ,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,0.830957114696503,0.422840178012848\n             ,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874\n             ,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241\n             ,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053\n             ,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048\n             ,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005\n             ,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648\n             ,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505\n             ,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419\n             ,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017\n             ,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875\n             ,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739\n             ,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724\n             ,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275\n             ,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712\n             ,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713\n             ,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484\n             ,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654\n             ,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,0.143848940730095\n             ,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804\n             ,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559\n             ,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442\n             ,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595\n             ,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341\n             ,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495\n             ,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061\n             ,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041\n             ,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763\n             ,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135\n             ,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448\n             ,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895\n             ,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482\n             ,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856\n             ,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024\n             ,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903\n             ,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879\n             ,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251\n             ,0.898496329784393,0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624\n             ,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211\n             ,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012\n             ,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039\n             ,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086\n             ,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414\n             ,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186\n             ,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828\n             ,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931\n             ,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358\n             ,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491\n             ,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676\n             ,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334\n             ,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113\n             ,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744\n             ,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392\n             ,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881\n             ,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118\n             ,0.331734776496887,0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168\n             ,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905\n             ,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233\n             ,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275\n             ,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514\n             ,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809\n             ,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269\n             ,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484\n             ,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088\n             ,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686\n             ,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914\n             ,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958\n             ,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479\n             ,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966\n             ,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899\n             ,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556\n             ,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412\n             ,0.59907454252243,0.0290243290364742,0.594756245613098,0.0432147420942783,0.550425350666046,0.0373775735497475\n             ,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419\n             ,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893\n             ,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354\n             ,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738\n             ,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304\n             ,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426\n             ,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402\n             ,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334\n             ,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378\n             ,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619\n             ,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026\n             ,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366\n             ,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826\n             ,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357\n             ,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836\n             ,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441\n             ,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111\n             ,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,0.933514356613159,0.0762230306863785\n             ,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583\n             ,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171\n             ,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271\n             ,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103\n             ,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028\n             ,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809\n             ,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838\n             ,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167\n             ,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973\n             ,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605\n             ,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757\n             ,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644\n             ,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991\n             ,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826\n             ,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304\n             ,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994\n             ,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539\n             ,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,0.816710710525513,0.759240210056305\n             ,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558\n             ,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897\n             ,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019\n             ,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033\n             ,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759\n             ,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717\n             ,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223\n             ,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239\n             ,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526\n             ,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592\n             ,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483\n             ,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408\n             ,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798\n             ,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779\n             ,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459\n             ,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879\n             ,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246\n             ,0.591059923171997,0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749\n             ,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677\n             ,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534\n             ,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169\n             ,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977\n             ,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994\n             ,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486\n             ,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222\n             ,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327\n             ,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734\n             ,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447\n             ,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204\n             ,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566\n             ,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782\n             ,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563\n             ,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338\n             ,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982\n             ,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,0.714633941650391,0.916672646999359\n             ,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281\n             ,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264\n             ,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557\n             ,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158\n             ,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866\n             ,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563\n             ,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039\n             ,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088\n             ,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078\n             ,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883\n             ,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169\n             ,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132\n             ,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401\n             ,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909\n             ,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108\n             ,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753\n             ,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,0.974531888961792\n             ,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138\n             ,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187\n             ,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589\n             ,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079\n             ,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315\n             ,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202\n             ,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154\n             ,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924\n             ,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005\n             ,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234\n             ,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851\n             ,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654\n             ,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271\n             ,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883\n             ,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445\n             ,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397\n             ,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582\n             ,0.577414393424988,0.962452411651611,0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158\n             ,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839\n             ,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607\n             ,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543\n             ,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253\n             ,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672\n             ,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351\n             ,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905\n             ,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019\n             ,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227\n             ,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747\n             ,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231\n             ,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234\n             ,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691\n             ,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226\n             ,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641\n             ,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998\n             ,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264\n             ,0.963677108287811,0.872271716594696,0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812\n             ,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783\n             ,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703\n             ,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797\n             ,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947\n             ,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521\n             ,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391\n             ,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042\n             ,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844\n             ,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766\n             ,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196\n             ,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484\n             ,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111\n             ,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917\n             ,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615\n             ,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737\n             ,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799\n             ,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392\n             ,0.978221297264099,0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258\n             ,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409\n             ,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535\n             ,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536\n             ,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968\n             ,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125\n             ,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141\n             ,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401\n             ,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337\n             ,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667\n             ,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989\n             ,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783\n             ,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194\n             ,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954\n             ,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127\n             ,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776\n             ,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616\n             ,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,0.621363580226898,0.682616829872131\n             ,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774\n             ,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151\n             ,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519\n             ,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157\n             ,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333\n             ,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347\n             ,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901\n             ,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676\n             ,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631\n             ,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012\n             ,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048\n             ,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284\n             ,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556\n             ,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512\n             ,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865\n             ,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786\n             ,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893\n             ,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663\n             ,0.105796456336975,0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037\n             ,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948\n             ,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325\n             ,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938\n             ,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369\n             ,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886\n             ,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355\n             ,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094\n             ,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082\n             ,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589\n             ,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694\n             ,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186\n             ,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473\n             ,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644\n             ,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226\n             ,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226\n             ,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872\n             ,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478\n             ,0.292685657739639,0.292649954557419,0.269282728433609,0.292957901954651,0.269526928663254,0.0986065044999123\n             ,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705\n             ,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117\n             ,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519\n             ,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744\n             ,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426\n             ,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368\n             ,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933\n             ,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878\n             ,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548\n             ,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617\n             ,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808\n             ,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183\n             ,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749\n             ,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254\n             ,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987\n             ,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163\n             ,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436\n             ,0.189350441098213,0.114026740193367,0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426\n             ,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571\n             ,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692\n             ,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373\n             ,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542\n             ,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883\n             ,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455\n             ,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385\n             ,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697\n             ,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125\n             ,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356\n             ,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726\n             ,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193\n             ,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982\n             ,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806\n             ,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181\n             ,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542\n             ,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426\n             ,0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398\n             ,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404\n             ,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648\n             ,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877\n             ,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277\n             ,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489\n             ,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004\n             ,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905\n             ,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782\n             ,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988\n             ,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638\n             ,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268\n             ,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245\n             ,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917\n             ,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788\n             ,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177\n             ,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989\n             ,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129\n             ,0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108\n             ,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438\n             ,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261\n             ,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425\n             ,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412\n             ,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362\n             ,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276\n             ,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656\n             ,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407\n             ,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997\n             ,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754\n             ,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773\n             ,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882\n             ,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449\n             ,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259\n             ,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101\n             ,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301\n             ,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,0.727285981178284\n             ,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786\n             ,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446\n             ,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213\n             ,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925\n             ,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267\n             ,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179\n             ,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427\n             ,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392\n             ,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329\n             ,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498\n             ,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209\n             ,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924\n             ,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917\n             ,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705\n             ,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912\n             ,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832\n             ,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272\n             ,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,0.139332994818687\n             ,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374\n             ,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107\n             ,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279\n             ,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471\n             ,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413\n             ,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697\n             ,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824\n             ,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088\n             ,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603\n             ,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676\n             ,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576\n             ,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628\n             ,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526\n             ,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321\n             ,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102\n             ,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627\n             ,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941\n             ,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915\n             ,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,0.157439410686493,0.711707234382629\n             ,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664\n             ,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005\n             ,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458\n             ,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158\n             ,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166\n             ,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454\n             ,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145\n             ,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233\n             ,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521\n             ,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594\n             ,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598\n             ,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266\n             ,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322\n             ,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931\n             ,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497\n             ,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938\n             ,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938\n             ,0.955354988574982,0.376253008842468,0.963590979576111,0.376287996768951,0.955453991889954,0.500213027000427\n             ,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006\n             ,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838\n             ,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933\n             ,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553\n             ,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188\n             ,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537\n             ,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347\n             ,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683\n             ,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111\n             ,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242\n             ,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658\n             ,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144\n             ,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213\n             ,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323\n             ,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323\n             ,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294\n             ,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626\n             ,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544\n             ,0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168\n             ,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645\n             ,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757\n             ,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956\n             ,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759\n             ,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203\n             ,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042\n             ,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595\n             ,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542\n             ,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974\n             ,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268\n             ,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205\n             ,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577\n             ,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812\n             ,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989\n             ,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721\n             ,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015\n             ,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,0.36667200922966\n             ,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842\n             ,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342\n             ,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754\n             ,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837\n             ,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583\n             ,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271\n             ,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587\n             ,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175\n             ,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402\n             ,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994\n             ,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989\n             ,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104\n             ,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712\n             ,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974\n             ,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782\n             ,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666\n             ,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114\n             ,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187\n             ,0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401\n             ,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255\n             ,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059\n             ,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303\n             ,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123\n             ,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032\n             ,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452\n             ,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445\n             ,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429\n             ,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387\n             ,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709\n             ,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402\n             ,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109\n             ,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442\n             ,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282\n             ,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408\n             ,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517\n             ,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282\n             ,0.845073997974396,0.622668981552124,0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298\n             ,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094\n             ,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286\n             ,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411\n             ,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928\n             ,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935\n             ,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314\n             ,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067\n             ,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521\n             ,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277\n             ,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192\n             ,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546\n             ,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193\n             ,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172\n             ,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141\n             ,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388\n             ,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542\n             ,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044\n             ,0.743863999843597,0.51264899969101,0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154\n             ,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909\n             ,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984\n             ,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899\n             ,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105\n             ,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976\n             ,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998\n             ,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619\n             ,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695\n             ,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007\n             ,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931\n             ,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564\n             ,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033\n             ,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737\n             ,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931\n             ,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299\n             ,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065\n             ,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384\n             ,0.595848023891449,0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599\n             ,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592\n             ,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483\n             ,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401\n             ,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512\n             ,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582\n             ,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951\n             ,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396\n             ,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481\n             ,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237\n             ,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964\n             ,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704\n             ,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749\n             ,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684\n             ,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208\n             ,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742\n             ,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174\n             ,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281\n             ,0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759\n             ,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723\n             ,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376\n             ,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672\n             ,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755\n             ,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683\n             ,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141\n             ,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971\n             ,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269\n             ,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896\n             ,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775\n             ,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464\n             ,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984\n             ,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764\n             ,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039\n             ,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961\n             ,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101\n             ,0.408055007457733,0.415430009365082,0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941\n             ,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719\n             ,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322\n             ,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111\n             ,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626\n             ,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244\n             ,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901\n             ,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061\n             ,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729\n             ,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927\n             ,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316\n             ,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683\n             ,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114\n             ,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406\n             ,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311\n             ,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899\n             ,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796\n             ,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,0.726795017719269\n             ,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149\n             ,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808\n             ,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951\n             ,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033\n             ,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387\n             ,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298\n             ,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363\n             ,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417\n             ,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526\n             ,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964\n             ,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122\n             ,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241\n             ,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446\n             ,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312\n             ,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081\n             ,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239\n             ,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273\n             ,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,0.835596978664398\n             ,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875\n             ,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522\n             ,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939\n             ,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865\n             ,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754\n             ,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952\n             ,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264\n             ,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314\n             ,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103\n             ,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874\n             ,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323\n             ,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667\n             ,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542\n             ,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059\n             ,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305\n             ,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476\n             ,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308\n             ,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155\n             ,0.768315017223358,0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553\n             ,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834\n             ,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218\n             ,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777\n             ,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467\n             ,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336\n             ,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919\n             ,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877\n             ,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104\n             ,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976\n             ,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078\n             ,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564\n             ,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191\n             ,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626\n             ,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076\n             ,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927\n             ,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084\n             ,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,0.759728014469147\n             ,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355\n             ,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372\n             ,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758\n             ,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788\n             ,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658\n             ,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692\n             ,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661\n             ,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161\n             ,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619\n             ,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949\n             ,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371\n             ,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718\n             ,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849\n             ,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685\n             ,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787\n             ,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819\n             ,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409\n             ,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148\n             ,0.171581521630287,0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676\n             ,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513\n             ,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359\n             ,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079\n             ,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194\n             ,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539\n             ,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625\n             ,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695\n             ,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744\n             ,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488\n             ,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071\n             ,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704\n             ,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242\n             ,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492\n             ,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816\n             ,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732\n             ,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908\n             ,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763\n             ,0.162967994809151,0.113466002047062,0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327\n             ,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646\n             ,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514\n             ,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084\n             ,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386\n             ,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101\n             ,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385\n             ,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428\n             ,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987\n             ,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883\n             ,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484\n             ,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373\n             ,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658\n             ,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462\n             ,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587\n             ,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865\n             ,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358\n             ,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328\n             ,0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711\n             ,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338\n             ,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066\n             ,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667\n             ,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168\n             ,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753\n             ,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501\n             ,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244\n             ,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687\n             ,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246\n             ,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578\n             ,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489\n             ,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344\n             ,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083\n             ,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861\n             ,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144\n             ,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115\n             ,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,0.698300063610077,0.684771537780762\n             ,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515\n             ,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856\n             ,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278\n             ,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699\n             ,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249\n             ,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716\n             ,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617\n             ,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275\n             ,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222\n             ,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765\n             ,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668\n             ,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356\n             ,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064\n             ,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829\n             ,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163\n             ,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914\n             ,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919\n             ,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,0.199659392237663\n             ,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282\n             ,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348\n             ,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092\n             ,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691\n             ,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254\n             ,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426\n             ,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086\n             ,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411\n             ,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477\n             ,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754\n             ,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387\n             ,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886\n             ,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322\n             ,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393\n             ,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323\n             ,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383\n             ,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805\n             ,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,0.313732326030731\n             ,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783\n             ,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745\n             ,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548\n             ,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141\n             ,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856\n             ,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393\n             ,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819\n             ,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549\n             ,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264\n             ,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259\n             ,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728\n             ,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662\n             ,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994\n             ,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397\n             ,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743\n             ,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432\n             ,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912\n             ,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,0.583523273468018,0.458871752023697\n             ,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586\n             ,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695\n             ,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428\n             ,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084\n             ,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141\n             ,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187\n             ,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701\n             ,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708\n             ,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792\n             ,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552\n             ,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483\n             ,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544\n             ,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508\n             ,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097\n             ,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012\n             ,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559\n             ,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001\n             ,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,0.476934969425201\n             ,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676\n             ,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318\n             ,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923\n             ,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571\n             ,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863\n             ,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219\n             ,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546\n             ,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389\n             ,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969\n             ,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588\n             ,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622\n             ,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012\n             ,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577\n             ,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138\n             ,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649\n             ,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702\n             ,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322\n             ,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,0.441692322492599,0.315481513738632\n             ,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957\n             ,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658\n             ,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431\n             ,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986\n             ,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328\n             ,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529\n             ,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019\n             ,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869\n             ,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414\n             ,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775\n             ,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282\n             ,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705\n             ,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856\n             ,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905\n             ,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138\n             ,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005\n             ,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709\n             ,0.507110118865967,0.265018463134766,0.501041769981384,0.297658920288086,0.484085887670517,0.325823694467545\n             ,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871\n             ,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635\n             ,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287\n             ,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739\n             ,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893\n             ,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312\n             ,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956\n             ,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734\n             ,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363\n             ,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742\n             ,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213\n             ,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713\n             ,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885\n             ,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799\n             ,0.417306035757065,0.26596075296402\n            UVIndex: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32\n             ,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23\n             ,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62\n             ,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81\n             ,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100\n             ,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110\n             ,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124\n             ,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133\n             ,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149\n             ,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151\n             ,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177\n             ,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193\n             ,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199\n             ,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206\n             ,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211\n             ,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225\n             ,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239\n             ,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246\n             ,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,249,254,137,254,249,138,255,256,257\n             ,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243\n             ,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197\n             ,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185\n             ,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275\n             ,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278\n             ,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225\n             ,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139\n             ,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223\n             ,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293\n             ,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139\n             ,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89\n             ,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320\n             ,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333\n             ,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348\n             ,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363\n             ,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375\n             ,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389\n             ,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408\n             ,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,421,418,416,402,401,419,422,399,402,423\n             ,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402\n             ,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426\n             ,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455\n             ,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472\n             ,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479\n             ,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500\n             ,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507\n             ,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527\n             ,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540\n             ,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549\n             ,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555\n             ,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322\n             ,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567\n             ,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372\n             ,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592\n             ,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620\n             ,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609\n             ,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640\n             ,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,649,650,651,380,379,649,648,389,388,652\n             ,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665\n             ,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685\n             ,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704\n             ,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710\n             ,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703\n             ,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736\n             ,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750\n             ,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762\n             ,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436\n             ,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796\n             ,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808\n             ,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826\n             ,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838\n             ,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699\n             ,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783\n             ,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530\n             ,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890\n             ,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777\n             ,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,912,913,912,914,860,861,913,915,914,912\n             ,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904\n             ,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940\n             ,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788\n             ,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970\n             ,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986\n             ,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992\n             ,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980\n             ,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010\n             ,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017\n             ,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026\n             ,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035\n             ,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918\n             ,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050\n             ,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896\n             ,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022\n             ,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729\n             ,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067\n             ,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039\n             ,1075,1076,1077,1078,1079,1080,1077,1080,1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931\n             ,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930\n             ,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031\n             ,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577\n             ,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030\n             ,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091\n             ,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975\n             ,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112\n             ,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811\n             ,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813\n             ,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126\n             ,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138\n             ,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144\n             ,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147\n             ,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159\n             ,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168\n             ,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898\n             ,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180\n             ,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900\n             ,1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187\n             ,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012\n             ,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059\n             ,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861\n             ,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204\n             ,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164\n             ,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216\n             ,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185\n             ,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224\n             ,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230\n             ,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251\n             ,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262\n             ,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267\n             ,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043\n             ,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274\n             ,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286\n             ,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295\n             ,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300\n             ,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,1307,1306,1303,1302,1274\n             ,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314\n             ,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305\n             ,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312\n             ,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334\n             ,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337\n             ,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346\n             ,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348\n             ,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358\n             ,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236\n             ,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374\n             ,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380\n             ,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383\n             ,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305\n             ,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274\n             ,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391\n             ,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400\n             ,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377\n             ,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414\n             ,1411,1400,1401,1400,1411,1410,1402,1415,1416,1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258\n             ,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423\n             ,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357\n             ,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352\n             ,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200\n             ,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335\n             ,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405\n             ,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423\n             ,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338\n             ,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432\n             ,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375\n             ,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440\n             ,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444\n             ,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456\n             ,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466\n             ,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476\n             ,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446\n             ,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477\n             ,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502\n             ,1503,1504,1503,1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507\n             ,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180\n             ,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027\n             ,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519\n             ,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277\n             ,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395\n             ,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995\n             ,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533\n             ,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542\n             ,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523\n             ,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552\n             ,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558\n             ,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563\n             ,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565\n             ,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574\n             ,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353\n             ,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588\n             ,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589\n             ,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,615,1462,1597\n             ,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603\n             ,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611\n             ,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614\n             ,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620\n             ,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627\n             ,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629\n             ,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631\n             ,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403\n             ,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639\n             ,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643\n             ,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891\n             ,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650\n             ,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976\n             ,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542\n             ,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665\n             ,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653\n             ,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840\n             ,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081\n             ,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637\n             ,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752\n             ,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952\n             ,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461\n             ,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633\n             ,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313\n             ,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818\n             ,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979\n             ,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691\n             ,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689\n             ,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922\n             ,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710\n             ,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700\n             ,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588\n             ,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722\n             ,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959\n             ,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330\n             ,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531\n             ,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323\n             ,319,318,1738,1737,1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734\n             ,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742\n             ,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155\n             ,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159\n             ,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746\n             ,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727\n             ,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701\n             ,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764\n             ,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718\n             ,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135\n             ,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758\n             ,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768\n             ,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144\n             ,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698\n             ,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773\n             ,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775\n             ,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749\n             ,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789\n             ,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,775,1792,1793\n             ,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136\n             ,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770\n             ,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804\n             ,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208\n             ,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978\n             ,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809\n             ,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672\n             ,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382\n             ,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071\n             ,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447\n             ,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818\n             ,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820\n             ,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815\n             ,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836\n             ,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841\n             ,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836\n             ,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839\n             ,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127\n             ,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,1856,1857,1854,1857,167,178,1855,660,1216,1858\n             ,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276\n             ,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860\n             ,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207\n             ,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658\n             ,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861\n             ,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877\n             ,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696\n             ,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071\n             ,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760\n             ,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528\n             ,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104\n             ,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673\n             ,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596\n             ,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735\n             ,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810\n             ,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749\n             ,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831\n             ,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462\n             ,1461,1881,1882,1883,1884,1885,1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889\n             ,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882\n             ,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915\n             ,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921\n             ,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927\n             ,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938\n             ,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951\n             ,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958\n             ,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946\n             ,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983\n             ,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996\n             ,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965\n             ,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002\n             ,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009\n             ,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013\n             ,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023\n             ,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040\n             ,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045\n             ,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,2052\n             ,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059\n             ,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051\n             ,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993\n             ,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988\n             ,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034\n             ,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075\n             ,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078\n             ,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081\n             ,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026\n             ,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028\n             ,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088\n             ,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094\n             ,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916\n             ,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101\n             ,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110\n             ,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126\n             ,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139\n             ,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140\n             ,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,2144,2147,2149,2150,2148,2148,2150,2151,2152\n             ,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162\n             ,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143\n             ,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183\n             ,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197\n             ,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183\n             ,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187\n             ,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215\n             ,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231\n             ,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249\n             ,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232\n             ,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234\n             ,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438\n             ,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263\n             ,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283\n             ,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295\n             ,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450\n             ,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307\n             ,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313\n             ,2317,2318,2316,2317,2319,2320,2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323\n             ,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339\n             ,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347\n             ,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361\n             ,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370\n             ,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373\n             ,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645\n             ,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133\n             ,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385\n             ,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345\n             ,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117\n             ,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388\n             ,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399\n             ,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414\n             ,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415\n             ,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434\n             ,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452\n             ,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460\n             ,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,2428\n             ,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476\n             ,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480\n             ,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491\n             ,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408\n             ,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518\n             ,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534\n             ,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544\n             ,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549\n             ,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533\n             ,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544\n             ,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570\n             ,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576\n             ,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580\n             ,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491\n             ,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598\n             ,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611\n             ,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623\n             ,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634\n             ,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,2636,2637,2638,2583,2582,2638,2097,2584\n             ,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651\n             ,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660\n             ,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665\n             ,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684\n             ,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698\n             ,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702\n             ,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717\n             ,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729\n             ,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740\n             ,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865\n             ,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755\n             ,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765\n             ,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317\n             ,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762\n             ,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661\n             ,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806\n             ,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811\n             ,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824\n             ,2825,2645,2826,2827,2828,2829,2827,2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839\n             ,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645\n             ,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854\n             ,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547\n             ,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873\n             ,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884\n             ,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696\n             ,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745\n             ,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897\n             ,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668\n             ,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773\n             ,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618\n             ,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775\n             ,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933\n             ,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939\n             ,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946\n             ,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830\n             ,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958\n             ,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891\n             ,2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777\n             ,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859\n             ,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622\n             ,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732\n             ,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779\n             ,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990\n             ,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998\n             ,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821\n             ,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829\n             ,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922\n             ,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012\n             ,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698\n             ,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838\n             ,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020\n             ,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002\n             ,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028\n             ,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038\n             ,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046\n             ,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,2887,2886,2736,2551,2553,3049,2736\n             ,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882\n             ,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140\n             ,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716\n             ,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009\n             ,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657\n             ,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078\n             ,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651\n             ,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092\n             ,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092\n             ,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596\n             ,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190\n             ,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194\n             ,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099\n             ,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107\n             ,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495\n             ,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115\n             ,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117\n             ,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564\n             ,3119,3120,3121,3010,2921,3122,2896,3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127\n             ,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142\n             ,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153\n             ,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159\n             ,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900\n             ,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173\n             ,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105\n             ,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187\n             ,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192\n             ,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196\n             ,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190\n             ,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214\n             ,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124\n             ,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222\n             ,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152\n             ,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237\n             ,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229\n             ,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240\n             ,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,3248\n             ,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215\n             ,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256\n             ,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268\n             ,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266\n             ,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278\n             ,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147\n             ,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265\n             ,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289\n             ,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301\n             ,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302\n             ,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305\n             ,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918\n             ,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291\n             ,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248\n             ,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198\n             ,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134\n             ,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315\n             ,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319\n             ,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,3325,3326,3327,3326,3325,3328,3329,2436,2433\n             ,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322\n             ,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342\n             ,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351\n             ,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350\n             ,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368\n             ,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373\n             ,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559\n             ,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712\n             ,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383\n             ,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389\n             ,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164\n             ,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394\n             ,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608\n             ,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279\n             ,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297\n             ,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407\n             ,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410\n             ,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416\n             ,3415,2216,3418,3416,3412,2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174\n             ,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426\n             ,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381\n             ,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436\n             ,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069\n             ,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678\n             ,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447\n             ,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452\n             ,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449\n             ,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444\n             ,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364\n             ,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426\n             ,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475\n             ,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478\n             ,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484\n             ,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487\n             ,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492\n             ,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298\n             ,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,2291,3494,3500\n             ,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997\n             ,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303\n             ,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290\n             ,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724\n             ,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493\n             ,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386\n             ,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565\n             ,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421\n             ,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350\n             ,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118\n             ,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868\n             ,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737\n             ,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002\n             ,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874\n             ,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523\n             ,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525\n             ,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452\n             ,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799\n             ,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,2135,3528,2338,3529,3528,2383,2126,2125,3528,3528\n             ,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357\n             ,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339\n             ,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530\n             ,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956\n             ,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064\n             ,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074\n             ,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874\n             ,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609\n             ,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213\n             ,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929\n             ,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808\n             ,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501\n             ,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035\n             ,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032\n             ,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946\n             ,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552\n             ,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065\n             ,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867\n             ,3558,3109,3110,3109,3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903\n             ,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799\n             ,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179\n             ,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511\n             ,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550\n             ,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564\n             ,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562\n             ,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565\n             ,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573\n             ,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984\n             ,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583\n             ,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992\n             ,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591\n             ,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895\n             ,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594\n             ,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095\n             ,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164\n             ,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610\n             ,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,2973,3613,3614,2973\n             ,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612\n             ,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186\n             ,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861\n             ,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957\n             ,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789\n             ,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600\n             ,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243\n             ,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354\n             ,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495\n             ,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315\n             ,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364\n             ,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221\n             ,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258\n             ,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803\n             ,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943\n             ,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153\n             ,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757\n             ,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540\n             ,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519\n             ,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157\n             ,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453\n             ,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997\n             ,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624\n             ,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642\n             ,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660\n             ,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675\n             ,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684\n             ,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694\n             ,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711\n             ,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683\n             ,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733\n             ,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649\n             ,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624\n             ,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630\n             ,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403\n             ,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766\n             ,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784\n             ,3766,3785,3786,3787,3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799\n             ,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816\n             ,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782\n             ,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769\n             ,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793\n             ,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802\n             ,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856\n             ,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843\n             ,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875\n             ,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891\n             ,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903\n             ,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925\n             ,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876\n             ,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940\n             ,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943\n             ,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884\n             ,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932\n             ,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962\n             ,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,2814,2630,2669\n             ,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968\n             ,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957\n             ,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994\n             ,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004\n             ,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957\n             ,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959\n             ,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973\n             ,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013\n             ,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994\n             ,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026\n             ,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039\n             ,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044\n             ,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059\n             ,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046\n             ,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025\n             ,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056\n             ,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080\n             ,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087\n             ,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098\n             ,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109\n             ,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097\n             ,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085\n             ,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102\n             ,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072\n             ,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133\n             ,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123\n             ,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133\n             ,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157\n             ,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166\n             ,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171\n             ,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143\n             ,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179\n             ,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022\n             ,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195\n             ,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200\n             ,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207\n             ,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096\n             ,4209,4213,4113,4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087\n             ,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191\n             ,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132\n             ,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221\n             ,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235\n             ,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243\n             ,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255\n             ,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264\n             ,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220\n             ,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253\n             ,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275\n             ,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286\n             ,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282\n             ,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306\n             ,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238\n             ,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282\n             ,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296\n             ,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315\n             ,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,4322,4326,4327,4325,4324\n             ,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331\n             ,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346\n             ,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321\n             ,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361\n             ,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367\n             ,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374\n             ,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344\n             ,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345\n             ,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391\n             ,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243\n             ,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403\n             ,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298\n             ,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405\n             ,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267\n             ,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315\n             ,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416\n             ,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421\n             ,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431\n             ,4436,4437,4433,4432,4437,4438,4434,4433,4439,4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431\n             ,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451\n             ,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465\n             ,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469\n             ,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475\n             ,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481\n             ,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464\n             ,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490\n             ,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501\n             ,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508\n             ,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515\n             ,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522\n             ,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502\n             ,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536\n             ,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506\n             ,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534\n             ,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529\n             ,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558\n             ,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564\n             ,4568,4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573\n             ,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583\n             ,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579\n             ,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596\n             ,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607\n             ,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621\n             ,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633\n             ,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642\n             ,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653\n             ,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647\n             ,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418\n             ,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621\n             ,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440\n             ,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643\n             ,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519\n             ,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665\n             ,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471\n             ,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525\n             ,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,4506,4496,4495,4542,4546,4527,4526\n             ,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668\n             ,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682\n             ,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693\n             ,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679\n             ,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708\n             ,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702\n             ,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723\n             ,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734\n             ,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676\n             ,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669\n             ,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752\n             ,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751\n             ,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761\n             ,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771\n             ,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759\n             ,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794\n             ,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787\n             ,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808\n             ,4795,4796,4810,4809,4796,4797,4810,4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819\n             ,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832\n             ,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841\n             ,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779\n             ,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849\n             ,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789\n             ,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763\n             ,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864\n             ,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866\n             ,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846\n             ,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876\n             ,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891\n             ,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899\n             ,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900\n             ,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912\n             ,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925\n             ,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940\n             ,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953\n             ,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,4964\n             ,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976\n             ,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992\n             ,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004\n             ,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013\n             ,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984\n             ,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025\n             ,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924\n             ,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031\n             ,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939\n             ,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045\n             ,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956\n             ,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037\n             ,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967\n             ,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057\n             ,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985\n             ,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062\n             ,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007\n             ,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071\n             ,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,5072,5019,5065,5019,5018,5067,5065,5018,5073\n             ,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080\n             ,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093\n             ,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106\n             ,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118\n             ,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120\n             ,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143\n             ,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151\n             ,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163\n             ,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135\n             ,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173\n             ,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076\n             ,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187\n             ,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096\n             ,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185\n             ,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109\n             ,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199\n             ,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122\n             ,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199\n             ,5198,5130,5128,5206,5200,5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138\n             ,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210\n             ,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155\n             ,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211\n             ,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221\n             ,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020\n             ,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167\n             ,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238\n             ,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247\n             ,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260\n             ,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269\n             ,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284\n             ,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293\n             ,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300\n             ,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248\n             ,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301\n             ,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305\n             ,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316\n             ,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,5302,5305,5325\n             ,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338\n             ,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347\n             ,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362\n             ,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371\n             ,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312\n             ,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324\n             ,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367\n             ,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379\n             ,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386\n             ,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398\n             ,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401\n             ,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402\n             ,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425\n             ,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392\n             ,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443\n             ,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449\n             ,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443\n             ,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460\n             ,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425\n             ,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438\n             ,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474\n             ,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476\n             ,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496\n             ,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504\n             ,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479\n             ,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422\n             ,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456\n             ,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457\n             ,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448\n             ,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530\n             ,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483\n             ,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551\n             ,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546\n             ,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563\n             ,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567\n             ,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587\n             ,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547\n             ,5550,5546,5562,5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561\n             ,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591\n             ,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607\n             ,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601\n             ,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590\n             ,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602\n             ,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627\n             ,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601\n             ,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605\n             ,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657\n             ,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672\n             ,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685\n             ,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701\n             ,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672\n             ,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714\n             ,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692\n             ,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735\n             ,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741\n             ,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,5747,5673,5671,5749,5748\n             ,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655\n             ,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745\n             ,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760\n             ,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658\n             ,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695\n             ,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729\n             ,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765\n             ,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783\n             ,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801\n             ,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774\n             ,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790\n             ,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837\n             ,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854\n             ,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862\n             ,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793\n             ,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854\n             ,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823\n             ,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876\n             ,5881,5882,5883,5884,5835,5834,5830,5834,5833,5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800\n             ,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795\n             ,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829\n             ,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806\n             ,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771\n             ,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864\n             ,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885\n             ,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904\n             ,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890\n             ,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918\n             ,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915\n             ,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902\n             ,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887\n             ,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840\n             ,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950\n             ,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965\n             ,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981\n             ,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997\n             ,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013\n             ,5997,5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024\n             ,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035\n             ,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042\n             ,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053\n             ,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062\n             ,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074\n             ,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045\n             ,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013\n             ,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093\n             ,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980\n             ,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101\n             ,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092\n             ,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114\n             ,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941\n             ,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073\n             ,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958\n             ,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024\n             ,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002\n             ,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,6144,6085,6086,6145,6145,6086,6087\n             ,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157\n             ,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169\n             ,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123\n             ,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184\n             ,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081\n             ,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188\n             ,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125\n             ,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969\n             ,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201\n             ,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218\n             ,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229\n             ,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237\n             ,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244\n             ,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256\n             ,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275\n             ,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289\n             ,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305\n             ,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321\n             ,6322,6323,6324,6325,6326,6327,6321,6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332\n             ,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322\n             ,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352\n             ,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362\n             ,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320\n             ,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228\n             ,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386\n             ,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389\n             ,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360\n             ,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348\n             ,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331\n             ,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273\n             ,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383\n             ,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263\n             ,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427\n             ,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429\n             ,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401\n             ,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404\n             ,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,6296\n             ,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322\n             ,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414\n             ,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397\n             ,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445\n             ,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005\n             ,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149\n             ,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113\n             ,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105\n             ,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126\n             ,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125\n             ,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214\n             ,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388\n             ,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405\n             ,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409\n             ,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278\n             ,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408\n             ,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298\n             ,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422\n             ,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,6397,6386,6355,6352,6351,6349,6404,6279,6298\n             ,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222\n             ,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272\n             ,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020\n             ,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457\n             ,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465\n             ,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466\n             ,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497\n             ,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513\n             ,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528\n             ,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506\n             ,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519\n             ,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562\n             ,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557\n             ,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580\n             ,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590\n             ,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597\n             ,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604\n             ,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606\n             ,6497,6496,6498,6487,6544,6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614\n             ,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511\n             ,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553\n             ,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478\n             ,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637\n             ,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628\n             ,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608\n             ,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604\n             ,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639\n             ,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648\n             ,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617\n             ,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664\n             ,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674\n             ,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694\n             ,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631\n             ,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704\n             ,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699\n             ,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705\n             ,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,6601,6678,6677\n             ,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499\n             ,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720\n             ,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735\n             ,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722\n             ,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756\n             ,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733\n             ,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760\n             ,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793\n             ,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796\n             ,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823\n             ,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840\n             ,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856\n             ,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852\n             ,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854\n             ,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872\n             ,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885\n             ,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784\n             ,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925\n             ,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934\n             ,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775\n             ,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961\n             ,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902\n             ,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745\n             ,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980\n             ,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771\n             ,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986\n             ,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801\n             ,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952\n             ,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764\n             ,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784\n             ,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957\n             ,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833\n             ,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962\n             ,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024\n             ,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032\n             ,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048\n             ,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066\n             ,7067,7068,7069,7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082\n             ,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100\n             ,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118\n             ,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133\n             ,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142\n             ,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167\n             ,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184\n             ,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197\n             ,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203\n             ,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891\n             ,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025\n             ,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226\n             ,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239\n             ,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233\n             ,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233\n             ,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040\n             ,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257\n             ,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256\n             ,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,6966,6884,7263,7264,6883\n             ,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937\n             ,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002\n             ,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274\n             ,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279\n             ,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100\n             ,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284\n             ,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285\n             ,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021\n             ,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801\n             ,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289\n             ,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937\n             ,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936\n             ,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941\n             ,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977\n             ,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140\n             ,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297\n             ,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899\n             ,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870\n             ,6907,6935,6814,6905,6905,6814,6813,6806,6776,6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988\n             ,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583\n             ,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623\n             ,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462\n             ,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542\n             ,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669\n             ,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310\n             ,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717\n             ,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924\n             ,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864\n             ,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805\n             ,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913\n             ,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998\n             ,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024\n             ,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313\n             ,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315\n             ,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234\n             ,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084\n             ,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061\n             ,7095,7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091\n             ,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116\n             ,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326\n             ,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146\n             ,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150\n             ,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329\n             ,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177\n             ,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333\n             ,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329\n             ,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281\n             ,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032\n             ,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248\n             ,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248\n             ,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856\n             ,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280\n             ,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234\n             ,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015\n             ,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264\n             ,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,6948,6948,7288,7287,6952,6995,6999\n             ,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804\n             ,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870\n             ,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739\n             ,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920\n             ,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474\n             ,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345\n             ,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361\n             ,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372\n             ,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388\n             ,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391\n             ,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408\n             ,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426\n             ,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439\n             ,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427\n             ,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468\n             ,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482\n             ,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450\n             ,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500\n             ,7501,7502,7499,7503,7504,7505,7506,7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444\n             ,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435\n             ,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526\n             ,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522\n             ,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484\n             ,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393\n             ,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532\n             ,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555\n             ,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465\n             ,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463\n             ,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546\n             ,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554\n             ,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439\n             ,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574\n             ,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534\n             ,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406\n             ,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545\n             ,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463\n             ,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,7504\n             ,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591\n             ,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585\n             ,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621\n             ,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631\n             ,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647\n             ,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657\n             ,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651\n             ,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678\n             ,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411\n             ,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601\n             ,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650\n             ,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708\n             ,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722\n             ,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613\n             ,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736\n             ,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747\n             ,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736\n             ,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623\n             ,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,7759,7676,7675,7645,7760,7758,7761,7760,7645\n             ,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618\n             ,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775\n             ,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661\n             ,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590\n             ,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671\n             ,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617\n             ,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785\n             ,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775\n             ,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783\n             ,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791\n             ,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792\n             ,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724\n             ,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349\n             ,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598\n             ,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519\n             ,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742\n             ,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704\n             ,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399\n             ,7398,7548,7395,7394,7549,7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765\n             ,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506\n             ,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355\n             ,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800\n             ,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811\n             ,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826\n             ,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839\n             ,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859\n             ,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875\n             ,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893\n             ,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903\n             ,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925\n             ,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941\n             ,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959\n             ,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975\n             ,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983\n             ,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994\n             ,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966\n             ,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,7984,7971,7975\n             ,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018\n             ,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035\n             ,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910\n             ,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881\n             ,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033\n             ,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033\n             ,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056\n             ,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020\n             ,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064\n             ,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021\n             ,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884\n             ,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037\n             ,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077\n             ,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814\n             ,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833\n             ,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848\n             ,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854\n             ,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868\n             ,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879\n             ,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888\n             ,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901\n             ,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092\n             ,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093\n             ,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036\n             ,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956\n             ,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985\n             ,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071\n             ,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813\n             ,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993\n             ,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945\n             ,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029\n             ,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057\n             ,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889\n             ,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091\n             ,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829\n             ,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108\n             ,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114\n             ,8113,8115,8116,8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057\n             ,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125\n             ,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780\n             ,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511\n             ,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140\n             ,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132\n             ,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158\n             ,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150\n             ,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177\n             ,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164\n             ,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196\n             ,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188\n             ,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148\n             ,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217\n             ,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211\n             ,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129\n             ,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237\n             ,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251\n             ,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,8245,8244,8220,8220,8244\n             ,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223\n             ,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198\n             ,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159\n             ,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259\n             ,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168\n             ,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238\n             ,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277\n             ,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273\n             ,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303\n             ,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320\n             ,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286\n             ,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343\n             ,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359\n             ,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375\n             ,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393\n             ,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344\n             ,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408\n             ,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370\n             ,8367,8414,8418,8371,8419,8420,8371,8418,8421,8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424\n             ,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395\n             ,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288\n             ,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449\n             ,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356\n             ,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463\n             ,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468\n             ,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362\n             ,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322\n             ,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468\n             ,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458\n             ,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453\n             ,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303\n             ,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494\n             ,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507\n             ,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516\n             ,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424\n             ,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470\n             ,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325\n             ,8310,8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311\n             ,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461\n             ,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510\n             ,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517\n             ,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410\n             ,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290\n             ,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530\n             ,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499\n             ,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480\n             ,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525\n             ,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300\n             ,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439\n             ,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545\n             ,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549\n             ,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551\n             ,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502\n             ,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193\n             ,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258\n             ,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,8264,8263,8203,8201,8184,8185,8183\n             ,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142\n             ,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322\n             ,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350\n             ,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562\n             ,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574\n             ,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582\n             ,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589\n             ,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600\n             ,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580\n             ,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598\n             ,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617\n             ,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626\n             ,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634\n             ,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639\n             ,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646\n             ,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634\n             ,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648\n             ,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665\n             ,8586,8585,8666,8590,8589,8667,8668,8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668\n             ,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618\n             ,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683\n             ,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689\n             ,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587\n             ,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696\n             ,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694\n             ,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652\n             ,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712\n             ,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713\n             ,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730\n             ,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746\n             ,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754\n             ,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767\n             ,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764\n             ,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708\n             ,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783\n             ,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792\n             ,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,8800\n             ,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807\n             ,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823\n             ,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838\n             ,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851\n             ,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812\n             ,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884\n             ,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895\n             ,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907\n             ,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921\n             ,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934\n             ,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936\n             ,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955\n             ,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818\n             ,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665\n             ,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868\n             ,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716\n             ,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680\n             ,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780\n             ,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,8680,8754,8664,8718,8731,8565,8563,8672,8668\n             ,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886\n             ,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817\n             ,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688\n             ,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981\n             ,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942\n             ,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720\n             ,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833\n             ,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709\n             ,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744\n             ,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896\n             ,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011\n             ,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012\n             ,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023\n             ,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905\n             ,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908\n             ,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914\n             ,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929\n             ,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842\n             ,9045,9034,8901,8903,9031,9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055\n             ,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063\n             ,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914\n             ,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014\n             ,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045\n             ,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790\n             ,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004\n             ,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796\n             ,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717\n             ,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098\n             ,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107\n             ,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125\n             ,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140\n             ,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152\n             ,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113\n             ,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171\n             ,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144\n             ,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114\n             ,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,9097,9122,9095\n             ,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182\n             ,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109\n             ,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212\n             ,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207\n             ,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221\n             ,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249\n             ,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270\n             ,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285\n             ,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305\n             ,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316\n             ,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326\n             ,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349\n             ,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365\n             ,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384\n             ,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399\n             ,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412\n             ,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430\n             ,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443\n             ,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450\n             ,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461\n             ,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474\n             ,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488\n             ,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258\n             ,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459\n             ,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338\n             ,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314\n             ,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342\n             ,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510\n             ,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403\n             ,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443\n             ,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444\n             ,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538\n             ,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532\n             ,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561\n             ,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568\n             ,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576\n             ,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566\n             ,9564,9565,9551,9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580\n             ,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583\n             ,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605\n             ,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600\n             ,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631\n             ,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246\n             ,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619\n             ,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605\n             ,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639\n             ,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607\n             ,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603\n             ,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585\n             ,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587\n             ,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609\n             ,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655\n             ,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391\n             ,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659\n             ,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458\n             ,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,9410,9661,9453,9453,9661\n             ,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312\n             ,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316\n             ,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665\n             ,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682\n             ,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482\n             ,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490\n             ,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436\n             ,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556\n             ,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561\n             ,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691\n             ,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446\n             ,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287\n             ,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382\n             ,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473\n             ,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663\n             ,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659\n             ,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414\n             ,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213\n             ,9707,9707,9213,9223,9708,9708,9223,9239,9709,9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517\n             ,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135\n             ,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215\n             ,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689\n             ,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469\n             ,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345\n             ,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717\n             ,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717\n             ,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191\n             ,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166\n             ,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219\n             ,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730\n             ,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164\n             ,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192\n             ,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626\n             ,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609\n             ,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522\n             ,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752\n             ,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754\n             ,9761,9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777\n             ,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790\n             ,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793\n             ,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772\n             ,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820\n             ,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787\n             ,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831\n             ,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771\n             ,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747\n             ,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844\n             ,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862\n             ,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840\n             ,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883\n             ,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905\n             ,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925\n             ,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941\n             ,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957\n             ,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970\n             ,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,9976,9980,9981,9982,9983,9976,9979\n             ,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002\n             ,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016\n             ,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031\n             ,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045\n             ,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053\n             ,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067\n             ,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079\n             ,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015\n             ,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049\n             ,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947\n             ,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117\n             ,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129\n             ,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944\n             ,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930\n             ,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984\n             ,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943\n             ,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970\n             ,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124\n             ,10143,10144,10145,10146,10147,10148,10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005\n             ,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153\n             ,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159\n             ,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974\n             ,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178\n             ,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173\n             ,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193\n             ,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178\n             ,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170\n             ,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216\n             ,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193\n             ,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213\n             ,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221\n             ,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235\n             ,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253\n             ,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250\n             ,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245\n             ,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886\n             ,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897\n             ,9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258\n             ,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264\n             ,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143\n             ,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147\n             ,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161\n             ,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253\n             ,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271\n             ,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232\n             ,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288\n             ,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115\n             ,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152\n             ,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306\n             ,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097\n             ,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093\n             ,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310\n             ,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313\n             ,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945\n             ,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297\n             ,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,10099,9961,9963,10320,10140\n             ,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085\n             ,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126\n             ,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157\n             ,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332\n             ,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221\n             ,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168\n             ,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141\n             ,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122\n             ,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328\n             ,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154\n             ,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341\n             ,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337\n             ,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115\n             ,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300\n             ,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326\n             ,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344\n             ,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154\n             ,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760\n             ,9761,9838,9837,9760,9837,9836,9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845\n             ,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351\n             ,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107\n             ,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075\n             ,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138\n             ,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810\n             ,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358\n             ,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362\n             ,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790\n             ,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855\n             ,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372\n             ,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736\n             ,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858\n             ,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799\n             ,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250\n             ,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215\n             ,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380\n             ,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388\n             ,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,10397,10393\n             ,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384\n             ,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408\n             ,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417\n             ,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396\n             ,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414\n             ,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418\n             ,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439\n             ,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447\n             ,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395\n             ,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442\n             ,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465\n             ,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465\n             ,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467\n             ,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443\n             ,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481\n             ,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487\n             ,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491\n             ,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496\n             ,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,10457,10461\n             ,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453\n             ,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402\n             ,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475\n             ,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516\n             ,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417\n             ,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470\n             ,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528\n             ,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542\n             ,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529\n             ,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549\n             ,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566\n             ,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578\n             ,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581\n             ,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586\n             ,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581\n             ,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531\n             ,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595\n             ,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584\n             ,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,10612,10610\n             ,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619\n             ,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561\n             ,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627\n             ,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638\n             ,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649\n             ,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662\n             ,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672\n             ,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688\n             ,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702\n             ,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710\n             ,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513\n             ,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737\n             ,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751\n             ,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760\n             ,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770\n             ,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762\n             ,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784\n             ,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720\n             ,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,10537,10536\n             ,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754\n             ,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572\n             ,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387\n             ,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799\n             ,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691\n             ,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779\n             ,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654\n             ,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758\n             ,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795\n             ,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809\n             ,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649\n             ,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595\n             ,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768\n             ,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618\n             ,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568\n             ,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490\n             ,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817\n             ,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667\n             ,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,10678,10827\n             ,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686\n             ,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837\n             ,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679\n             ,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706\n             ,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855\n             ,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867\n             ,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854\n             ,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871\n             ,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896\n             ,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905\n             ,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917\n             ,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931\n             ,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944\n             ,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954\n             ,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960\n             ,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948\n             ,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904\n             ,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898\n             ,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,10991,10992\n             ,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004\n             ,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016\n             ,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026\n             ,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042\n             ,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050\n             ,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849\n             ,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005\n             ,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061\n             ,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067\n             ,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076\n             ,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040\n             ,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879\n             ,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996\n             ,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087\n             ,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077\n             ,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983\n             ,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102\n             ,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912\n             ,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,10945,10944\n             ,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095\n             ,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088\n             ,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925\n             ,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960\n             ,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109\n             ,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892\n             ,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846\n             ,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900\n             ,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869\n             ,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120\n             ,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980\n             ,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980\n             ,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856\n             ,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951\n             ,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932\n             ,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058\n             ,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909\n             ,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125\n             ,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,10969,10918\n             ,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142\n             ,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157\n             ,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169\n             ,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183\n             ,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187\n             ,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192\n             ,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201\n             ,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209\n             ,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128\n             ,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152\n             ,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141\n             ,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193\n             ,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189\n             ,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174\n             ,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183\n             ,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225\n             ,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032\n             ,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225\n             ,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,11132,11230\n             ,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202\n             ,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214\n             ,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913\n             ,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192\n             ,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209\n             ,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115\n             ,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512\n             ,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237\n             ,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744\n             ,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661\n             ,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672\n             ,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837\n             ,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262\n             ,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023\n             ,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242\n             ,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253\n             ,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244\n             ,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612\n             ,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,11276,10810\n             ,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778\n             ,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595\n             ,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922\n             ,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119\n             ,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630\n             ,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290\n             ,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807\n             ,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026\n             ,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946\n             ,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805\n             ,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775\n             ,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999\n             ,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762\n             ,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961\n             ,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794\n             ,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725\n             ,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650\n             ,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681\n             ,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,11296,11295,10647,10646,10692,10647\n             ,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648\n             ,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766\n             ,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300\n             ,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309\n             ,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318\n             ,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327\n             ,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329\n             ,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329\n             ,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330\n             ,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348\n             ,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363\n             ,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358\n             ,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379\n             ,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355\n             ,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341\n             ,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366\n             ,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388\n             ,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398\n             ,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11346,11349\n             ,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425\n             ,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422\n             ,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435\n             ,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404\n             ,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413\n             ,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367\n             ,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418\n             ,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355\n             ,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365\n             ,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440\n             ,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411\n             ,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449\n             ,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465\n             ,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462\n             ,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490\n             ,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508\n             ,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526\n             ,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535\n             ,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,11530,11531,11530,11541,11542,11533\n             ,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553\n             ,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554\n             ,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568\n             ,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581\n             ,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581\n             ,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547\n             ,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591\n             ,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467\n             ,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616\n             ,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495\n             ,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543\n             ,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643\n             ,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555\n             ,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653\n             ,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667\n             ,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675\n             ,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683\n             ,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688\n             ,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,11697,11459,11455,11458,11698,11696\n             ,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595\n             ,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608\n             ,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711\n             ,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628\n             ,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719\n             ,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730\n             ,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734\n             ,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743\n             ,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758\n             ,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756\n             ,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657\n             ,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751\n             ,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771\n             ,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782\n             ,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795\n             ,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780\n             ,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713\n             ,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813\n             ,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,11818,11819,11820,11821,11499,11640\n             ,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477\n             ,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519\n             ,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780\n             ,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796\n             ,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475\n             ,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793\n             ,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712\n             ,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707\n             ,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754\n             ,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499\n             ,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630\n             ,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653\n             ,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804\n             ,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786\n             ,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512\n             ,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847\n             ,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831\n             ,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783\n             ,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,11476,11475,11849,11487,11600,11603\n             ,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546\n             ,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874\n             ,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605\n             ,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578\n             ,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611\n             ,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673\n             ,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503\n             ,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539\n             ,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886\n             ,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901\n             ,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913\n             ,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906\n             ,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663\n             ,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736\n             ,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660\n             ,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737\n             ,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846\n             ,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952\n             ,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,11960,11961,11924,11923,11894,11911\n             ,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967\n             ,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468\n             ,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994\n             ,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004\n             ,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022\n             ,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038\n             ,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047\n             ,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054\n             ,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055\n             ,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074\n             ,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071\n             ,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093\n             ,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098\n             ,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061\n             ,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108\n             ,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995\n             ,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126\n             ,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009\n             ,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,12044,12055,12062,12053,12055,12065\n             ,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047\n             ,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077\n             ,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160\n             ,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174\n             ,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182\n             ,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063\n             ,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195\n             ,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204\n             ,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104\n             ,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119\n             ,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218\n             ,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181\n             ,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226\n             ,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233\n             ,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237\n             ,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246\n             ,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263\n             ,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259\n             ,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,11770,11764,12269,12164,12163,12166\n             ,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252\n             ,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231\n             ,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285\n             ,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297\n             ,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309\n             ,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218\n             ,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314\n             ,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323\n             ,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990\n             ,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338\n             ,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282\n             ,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336\n             ,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350\n             ,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349\n             ,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964\n             ,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222\n             ,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148\n             ,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049\n             ,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,12359,12360,12162,11967,11966,11997\n             ,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303\n             ,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321\n             ,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047\n             ,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023\n             ,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311\n             ,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193\n             ,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023\n             ,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283\n             ,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366\n             ,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378\n             ,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074\n             ,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127\n             ,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077\n             ,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102\n             ,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100\n             ,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003\n             ,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395\n             ,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401\n             ,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,12412,12413,12414,12402,12415,12416\n             ,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170\n             ,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239\n             ,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126\n             ,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235\n             ,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360\n             ,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439\n             ,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448\n             ,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354\n             ,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488\n             ,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590\n             ,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596\n             ,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794\n             ,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791\n             ,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865\n             ,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885\n             ,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703\n             ,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839\n             ,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518\n             ,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,12138,12002,11489,11669,12068,12048\n             ,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341\n             ,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976\n             ,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356\n             ,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351\n             ,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335\n             ,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357\n             ,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377\n             ,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212\n             ,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390\n             ,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470\n             ,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488\n             ,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493\n             ,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510\n             ,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504\n             ,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524\n             ,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530\n             ,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545\n             ,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559\n             ,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,12566,12567,12568,12556,12554,12569\n             ,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527\n             ,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582\n             ,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490\n             ,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586\n             ,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505\n             ,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535\n             ,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570\n             ,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514\n             ,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538\n             ,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568\n             ,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470\n             ,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548\n             ,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583\n             ,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583\n             ,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481\n             ,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557\n             ,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476\n             ,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593\n             ,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12609,12608,12613,12614,12612\n             ,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629\n             ,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639\n             ,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615\n             ,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660\n             ,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607\n             ,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685\n             ,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603\n             ,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613\n             ,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628\n             ,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634\n             ,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684\n             ,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620\n             ,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674\n             ,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693\n             ,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696\n             ,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714\n             ,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660\n             ,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687\n             ,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,12711,12707,12706,12712,12718,12720\n             ,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732\n             ,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746\n             ,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755\n             ,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766\n             ,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777\n             ,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742\n             ,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785\n             ,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790\n             ,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749\n             ,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757\n             ,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767\n             ,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787\n             ,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801\n             ,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784\n             ,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810\n             ,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817\n             ,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821\n             ,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773\n             ,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,12794,12740,12757,12800,12755,12833\n             ,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837\n             ,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840\n             ,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850\n             ,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857\n             ,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868\n             ,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874\n             ,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851\n             ,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883\n             ,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869\n             ,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892\n             ,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856\n             ,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901\n             ,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839\n             ,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910\n             ,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898\n             ,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919\n             ,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891\n             ,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928\n             ,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,12914,12915,12933,12932,12915,12916\n             ,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937\n             ,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942\n             ,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930\n             ,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950\n             ,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939\n             ,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876\n             ,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882\n             ,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888\n             ,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964\n             ,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975\n             ,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982\n             ,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962\n             ,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996\n             ,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978\n             ,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005\n             ,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963\n             ,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014\n             ,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981\n             ,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,12985,13022,13023,12989,12987,13023\n             ,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012\n             ,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032\n             ,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021\n             ,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041\n             ,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030\n             ,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050\n             ,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039\n             ,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059\n             ,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048\n             ,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068\n             ,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057\n             ,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077\n             ,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999\n             ,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005\n             ,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078\n        }\n        LayerElementSpecularUV: 0 {\n            Version: 101\n            Name: \"map1\"\n            MappingInformationType: \"ByPolygonVertex\"\n            ReferenceInformationType: \"IndexToDirect\"\n            UV: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193\n             ,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971\n             ,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189\n             ,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103\n             ,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103\n             ,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133\n             ,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381\n             ,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197\n             ,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381\n             ,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541\n             ,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657\n             ,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227\n             ,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189\n             ,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343\n             ,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041\n             ,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388\n             ,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262\n             ,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384\n             ,0.313490509986877,0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219\n             ,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384\n             ,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711\n             ,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434\n             ,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704\n             ,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295\n             ,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711\n             ,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919\n             ,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714\n             ,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721\n             ,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457\n             ,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533\n             ,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668\n             ,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609\n             ,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641\n             ,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477\n             ,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952\n             ,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179\n             ,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,0.360970288515091\n             ,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543\n             ,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275\n             ,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265\n             ,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347\n             ,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788\n             ,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292\n             ,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701\n             ,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518\n             ,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106\n             ,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773\n             ,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182\n             ,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717\n             ,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852\n             ,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802\n             ,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301\n             ,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902\n             ,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028\n             ,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265\n             ,0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052\n             ,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881\n             ,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353\n             ,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759\n             ,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876\n             ,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883\n             ,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243\n             ,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019\n             ,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086\n             ,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354\n             ,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458\n             ,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145\n             ,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984\n             ,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776\n             ,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498\n             ,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703\n             ,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005\n             ,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,0.609531939029694\n             ,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514\n             ,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136\n             ,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914\n             ,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291\n             ,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054\n             ,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134\n             ,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648\n             ,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641\n             ,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501\n             ,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514\n             ,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916\n             ,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246\n             ,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727\n             ,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926\n             ,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313\n             ,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945\n             ,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699\n             ,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488\n             ,0.0914957895874977,0.80051189661026,0.0865048691630363,0.763055205345154,0.080446183681488,0.719281196594238\n             ,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427\n             ,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571\n             ,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169\n             ,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773\n             ,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855\n             ,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001\n             ,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759\n             ,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486\n             ,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526\n             ,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024\n             ,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928\n             ,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131\n             ,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178\n             ,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772\n             ,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037\n             ,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327\n             ,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132\n             ,0.607026278972626,0.453061938285828,0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618\n             ,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778\n             ,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092\n             ,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932\n             ,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879\n             ,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267\n             ,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111\n             ,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753\n             ,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917\n             ,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712\n             ,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244\n             ,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589\n             ,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853\n             ,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413\n             ,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591\n             ,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181\n             ,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623\n             ,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,0.449466496706009\n             ,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806\n             ,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914\n             ,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502\n             ,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701\n             ,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449\n             ,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809\n             ,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545\n             ,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124\n             ,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685\n             ,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178\n             ,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955\n             ,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233\n             ,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522\n             ,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788\n             ,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333\n             ,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858\n             ,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182\n             ,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,0.34814915060997\n             ,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692\n             ,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521\n             ,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427\n             ,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427\n             ,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801\n             ,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498\n             ,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394\n             ,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777\n             ,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967\n             ,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378\n             ,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182\n             ,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182\n             ,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182\n             ,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894\n             ,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921\n             ,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591\n             ,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558\n             ,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,0.481752008199692\n             ,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365\n             ,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368\n             ,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543\n             ,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411\n             ,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909\n             ,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001\n             ,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795\n             ,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595\n             ,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929\n             ,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319\n             ,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246\n             ,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587\n             ,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095\n             ,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761\n             ,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699\n             ,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986\n             ,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892\n             ,0.494083315134048,0.483844935894012,0.491256147623062,0.476915508508682,0.489434659481049,0.507938206195831\n             ,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422\n             ,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841\n             ,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562\n             ,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153\n             ,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756\n             ,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266\n             ,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123\n             ,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202\n             ,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361\n             ,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219\n             ,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301\n             ,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226\n             ,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947\n             ,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013\n             ,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182\n             ,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135\n             ,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115\n             ,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,0.439141184091568,0.444102138280869\n             ,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231\n             ,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836\n             ,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449\n             ,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095\n             ,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943\n             ,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909\n             ,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634\n             ,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754\n             ,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949\n             ,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469\n             ,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691\n             ,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411\n             ,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387\n             ,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505\n             ,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175\n             ,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884\n             ,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211\n             ,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,0.454729199409485,0.506186008453369\n             ,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238\n             ,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731\n             ,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672\n             ,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634\n             ,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078\n             ,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088\n             ,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222\n             ,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316\n             ,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045\n             ,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819\n             ,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199\n             ,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759\n             ,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362\n             ,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628\n             ,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116\n             ,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052\n             ,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688\n             ,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,0.328943759202957,0.19858555495739,0.362459033727646\n             ,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177\n             ,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235\n             ,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975\n             ,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201\n             ,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482\n             ,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303\n             ,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773\n             ,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051\n             ,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464\n             ,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396\n             ,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856\n             ,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004\n             ,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612\n             ,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315\n             ,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162\n             ,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302\n             ,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666\n             ,0.507564306259155,0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726\n             ,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349\n             ,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645\n             ,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925\n             ,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608\n             ,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729\n             ,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505\n             ,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904\n             ,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256\n             ,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973\n             ,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215\n             ,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334\n             ,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766\n             ,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093\n             ,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483\n             ,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089\n             ,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503\n             ,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906\n             ,0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111\n             ,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224\n             ,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664\n             ,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219\n             ,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386\n             ,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467\n             ,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715\n             ,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145\n             ,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042\n             ,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589\n             ,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911\n             ,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309\n             ,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737\n             ,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353\n             ,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671\n             ,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867\n             ,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591\n             ,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672\n             ,0.271769434213638,0.385051816701889,0.256161749362946,0.422860234975815,0.246646866202354,0.351017981767654\n             ,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217\n             ,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237\n             ,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014\n             ,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803\n             ,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467\n             ,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254\n             ,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278\n             ,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076\n             ,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065\n             ,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293\n             ,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182\n             ,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982\n             ,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318\n             ,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803\n             ,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098\n             ,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775\n             ,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203\n             ,0.148400202393532,0.419813513755798,0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511\n             ,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461\n             ,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083\n             ,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674\n             ,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391\n             ,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467\n             ,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997\n             ,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567\n             ,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925\n             ,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404\n             ,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035\n             ,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767\n             ,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183\n             ,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859\n             ,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175\n             ,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153\n             ,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906\n             ,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072\n             ,0.425704270601273,0.605306565761566,0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718\n             ,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449\n             ,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115\n             ,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521\n             ,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587\n             ,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331\n             ,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873\n             ,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868\n             ,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152\n             ,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234\n             ,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304\n             ,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734\n             ,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086\n             ,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811\n             ,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376\n             ,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811\n             ,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416\n             ,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084\n             ,0.501217484474182,0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821\n             ,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037\n             ,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985\n             ,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476\n             ,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735\n             ,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619\n             ,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169\n             ,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391\n             ,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975\n             ,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484\n             ,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239\n             ,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107\n             ,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224\n             ,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567\n             ,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654\n             ,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557\n             ,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182\n             ,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,0.476730823516846,0.335748642683029\n             ,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566\n             ,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677\n             ,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529\n             ,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426\n             ,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792\n             ,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639\n             ,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413\n             ,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596\n             ,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899\n             ,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912\n             ,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452\n             ,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238\n             ,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541\n             ,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459\n             ,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182\n             ,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286\n             ,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342\n             ,0.201496973633766,0.577669441699982,0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191\n             ,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598\n             ,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243\n             ,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193\n             ,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442\n             ,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465\n             ,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923\n             ,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469\n             ,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606\n             ,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796\n             ,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159\n             ,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455\n             ,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422\n             ,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185\n             ,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441\n             ,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091\n             ,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489\n             ,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,0.594250917434692\n             ,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379\n             ,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832\n             ,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159\n             ,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268\n             ,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897\n             ,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138\n             ,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538\n             ,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041\n             ,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254\n             ,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863\n             ,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607\n             ,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511\n             ,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412\n             ,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093\n             ,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141\n             ,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647\n             ,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053\n             ,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976\n             ,0.574461042881012,0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185\n             ,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219\n             ,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711\n             ,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802\n             ,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016\n             ,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331\n             ,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385\n             ,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885\n             ,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399\n             ,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011\n             ,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597\n             ,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458\n             ,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544\n             ,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551\n             ,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252\n             ,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125\n             ,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748\n             ,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717\n             ,0.56607973575592,0.232950657606125,0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964\n             ,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863\n             ,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499\n             ,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504\n             ,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682\n             ,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619\n             ,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393\n             ,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586\n             ,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585\n             ,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027\n             ,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854\n             ,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075\n             ,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434\n             ,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353\n             ,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043\n             ,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069\n             ,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817\n             ,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957\n             ,0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531\n             ,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966\n             ,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297\n             ,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925\n             ,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983\n             ,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951\n             ,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038\n             ,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843\n             ,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608\n             ,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003\n             ,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476\n             ,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337\n             ,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737\n             ,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529\n             ,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413\n             ,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061\n             ,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845\n             ,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266\n             ,0.0327511876821518,0.240590929985046,0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031\n             ,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075\n             ,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524\n             ,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636\n             ,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248\n             ,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948\n             ,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729\n             ,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808\n             ,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219\n             ,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047\n             ,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019\n             ,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793\n             ,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262\n             ,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278\n             ,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192\n             ,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869\n             ,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409\n             ,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533\n             ,0.459741652011871,0.338231563568115,0.394522905349731,0.594241797924042,0.388592958450317,0.594755053520203\n             ,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798\n             ,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381\n             ,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707\n             ,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858\n             ,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587\n             ,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284\n             ,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955\n             ,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566\n             ,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552\n             ,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576\n             ,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234\n             ,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924\n             ,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093\n             ,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356\n             ,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098\n             ,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198\n             ,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073\n             ,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,0.227975755929947\n             ,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007\n             ,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338\n             ,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182\n             ,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421\n             ,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517\n             ,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137\n             ,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926\n             ,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832\n             ,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685\n             ,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432\n             ,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594\n             ,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892\n             ,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207\n             ,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182\n             ,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094\n             ,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112\n             ,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616\n             ,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905\n             ,0.387614846229553,0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666\n             ,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828\n             ,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714\n             ,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831\n             ,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868\n             ,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372\n             ,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579\n             ,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204\n             ,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623\n             ,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398\n             ,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665\n             ,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624\n             ,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595\n             ,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064\n             ,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547\n             ,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637\n             ,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637\n             ,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986\n             ,0.571574211120605,0.392384350299835,0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761\n             ,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108\n             ,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704\n             ,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631\n             ,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915\n             ,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931\n             ,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868\n             ,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272\n             ,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953\n             ,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621\n             ,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699\n             ,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921\n             ,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247\n             ,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195\n             ,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297\n             ,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018\n             ,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548\n             ,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472\n             ,0.480641216039658,0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786\n             ,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026\n             ,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289\n             ,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217\n             ,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317\n             ,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798\n             ,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684\n             ,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119\n             ,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895\n             ,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566\n             ,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657\n             ,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648\n             ,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405\n             ,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209\n             ,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182\n             ,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049\n             ,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871\n             ,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564\n             ,0.103776723146439,0.271889269351959,0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182\n             ,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592\n             ,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196\n             ,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287\n             ,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677\n             ,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707\n             ,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964\n             ,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558\n             ,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292\n             ,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369\n             ,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879\n             ,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581\n             ,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516\n             ,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948\n             ,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014\n             ,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099\n             ,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017\n             ,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714\n             ,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938\n             ,0.896463871002197,0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987\n             ,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376\n             ,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365\n             ,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283\n             ,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993\n             ,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462\n             ,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861\n             ,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179\n             ,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091\n             ,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416\n             ,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697\n             ,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603\n             ,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436\n             ,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565\n             ,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863\n             ,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596\n             ,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313\n             ,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162\n             ,0.677415728569031,0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415\n             ,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485\n             ,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717\n             ,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492\n             ,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802\n             ,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126\n             ,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353\n             ,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741\n             ,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369\n             ,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915\n             ,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869\n             ,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941\n             ,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857\n             ,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413\n             ,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263\n             ,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628\n             ,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325\n             ,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516\n             ,0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781\n             ,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433\n             ,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901\n             ,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092\n             ,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909\n             ,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625\n             ,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381\n             ,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694\n             ,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245\n             ,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554\n             ,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991\n             ,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085\n             ,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631\n             ,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987\n             ,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418\n             ,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385\n             ,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794\n             ,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,0.821314513683319\n             ,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365\n             ,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282\n             ,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057\n             ,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401\n             ,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807\n             ,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026\n             ,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284\n             ,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427\n             ,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571\n             ,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626\n             ,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966\n             ,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936\n             ,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784\n             ,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101\n             ,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047\n             ,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735\n             ,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461\n             ,0.492020517587662,0.517554759979248,0.489789307117462,0.521288216114044,0.486277997493744,0.524867177009583\n             ,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928\n             ,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064\n             ,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293\n             ,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593\n             ,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712\n             ,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917\n             ,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072\n             ,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667\n             ,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965\n             ,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874\n             ,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538\n             ,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843\n             ,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794\n             ,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585\n             ,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715\n             ,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085\n             ,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027\n             ,0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929\n             ,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339\n             ,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041\n             ,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593\n             ,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257\n             ,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865\n             ,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218\n             ,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002\n             ,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643\n             ,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033\n             ,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496\n             ,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972\n             ,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797\n             ,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385\n             ,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926\n             ,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969\n             ,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651\n             ,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073\n             ,0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589\n             ,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091\n             ,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849\n             ,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145\n             ,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966\n             ,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813\n             ,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549\n             ,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682\n             ,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345\n             ,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198\n             ,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342\n             ,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952\n             ,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792\n             ,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413\n             ,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689\n             ,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692\n             ,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341\n             ,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413\n             ,0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857\n             ,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229\n             ,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389\n             ,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644\n             ,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318\n             ,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391\n             ,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803\n             ,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125\n             ,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302\n             ,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012\n             ,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892\n             ,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605\n             ,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789\n             ,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325\n             ,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422\n             ,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616\n             ,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237\n             ,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,0.536648154258728\n             ,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332\n             ,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705\n             ,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594\n             ,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323\n             ,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961\n             ,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595\n             ,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625\n             ,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077\n             ,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185\n             ,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946\n             ,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793\n             ,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714\n             ,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911\n             ,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424\n             ,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269\n             ,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858\n             ,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366\n             ,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,0.422893911600113\n             ,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989\n             ,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466\n             ,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798\n             ,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643\n             ,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907\n             ,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301\n             ,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673\n             ,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091\n             ,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096\n             ,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179\n             ,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967\n             ,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601\n             ,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869\n             ,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821\n             ,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166\n             ,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871\n             ,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406\n             ,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231\n             ,0.506956994533539,0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583\n             ,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592\n             ,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502\n             ,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902\n             ,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233\n             ,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754\n             ,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585\n             ,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318\n             ,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581\n             ,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387\n             ,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016\n             ,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677\n             ,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467\n             ,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944\n             ,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835\n             ,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048\n             ,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596\n             ,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516\n             ,0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361\n             ,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801\n             ,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539\n             ,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536\n             ,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619\n             ,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706\n             ,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908\n             ,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959\n             ,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276\n             ,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093\n             ,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414\n             ,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312\n             ,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915\n             ,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001\n             ,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493\n             ,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274\n             ,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205\n             ,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969\n             ,0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574\n             ,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417\n             ,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949\n             ,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531\n             ,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658\n             ,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904\n             ,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587\n             ,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482\n             ,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813\n             ,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414\n             ,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549\n             ,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519\n             ,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291\n             ,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079\n             ,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499\n             ,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704\n             ,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482\n             ,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703\n             ,0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315\n             ,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092\n             ,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115\n             ,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262\n             ,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462\n             ,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838\n             ,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031\n             ,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309\n             ,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671\n             ,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812\n             ,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075\n             ,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934\n             ,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445\n             ,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217\n             ,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428\n             ,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437\n             ,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352\n             ,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,0.630282640457153,0.570110380649567,0.638663291931152\n             ,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883\n             ,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946\n             ,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217\n             ,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594\n             ,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294\n             ,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673\n             ,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989\n             ,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215\n             ,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178\n             ,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971\n             ,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697\n             ,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186\n             ,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828\n             ,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862\n             ,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393\n             ,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785\n             ,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137\n             ,0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802\n             ,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093\n             ,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707\n             ,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216\n             ,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906\n             ,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263\n             ,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312\n             ,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126\n             ,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493\n             ,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588\n             ,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353\n             ,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876\n             ,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205\n             ,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334\n             ,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671\n             ,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507\n             ,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395\n             ,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885\n             ,0.543237447738647,0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617\n             ,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816\n             ,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611\n             ,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188\n             ,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624\n             ,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801\n             ,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591\n             ,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872\n             ,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677\n             ,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859\n             ,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067\n             ,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833\n             ,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241\n             ,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753\n             ,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008\n             ,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242\n             ,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127\n             ,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,0.668446362018585\n             ,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944\n             ,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235\n             ,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293\n             ,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594\n             ,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388\n             ,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182\n             ,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292\n             ,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437\n             ,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775\n             ,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452\n             ,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378\n             ,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825\n             ,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676\n             ,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151\n             ,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392\n             ,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709\n             ,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407\n             ,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,0.602044343948364,0.593871057033539,0.612634897232056\n             ,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681\n             ,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495\n             ,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657\n             ,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869\n             ,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949\n             ,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217\n             ,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853\n             ,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542\n             ,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225\n             ,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512\n             ,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641\n             ,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237\n             ,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414\n             ,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135\n             ,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797\n             ,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228\n             ,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131\n             ,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843\n             ,0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426\n             ,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817\n             ,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721\n             ,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778\n             ,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033\n             ,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737\n             ,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438\n             ,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162\n             ,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053\n             ,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346\n             ,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016\n             ,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476\n             ,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299\n             ,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765\n             ,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195\n             ,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172\n             ,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753\n             ,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,0.525910139083862,0.60409289598465,0.548857510089874\n             ,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373\n             ,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253\n             ,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836\n             ,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636\n             ,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746\n             ,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846\n             ,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831\n             ,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435\n             ,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297\n             ,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074\n             ,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185\n             ,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792\n             ,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639\n             ,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363\n             ,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854\n             ,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912\n             ,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238\n             ,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,0.727306187152863,0.436012208461761,0.721607804298401\n             ,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151\n             ,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379\n             ,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726\n             ,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333\n             ,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193\n             ,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743\n             ,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923\n             ,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113\n             ,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407\n             ,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007\n             ,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574\n             ,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586\n             ,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572\n             ,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898\n             ,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817\n             ,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355\n             ,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363\n             ,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242\n             ,0.526827156543732,0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333\n             ,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207\n             ,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915\n             ,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519\n             ,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544\n             ,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841\n             ,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981\n             ,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856\n             ,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776\n             ,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298\n             ,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747\n             ,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119\n             ,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607\n             ,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449\n             ,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216\n             ,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907\n             ,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098\n             ,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478\n             ,0.754323303699493,0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661\n             ,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789\n             ,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656\n             ,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637\n             ,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916\n             ,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998\n             ,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843\n             ,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073\n             ,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256\n             ,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209\n             ,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557\n             ,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847\n             ,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922\n             ,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766\n             ,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067\n             ,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418\n             ,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945\n             ,0.611816823482513,0.769262611865997,0.623659491539001,0.771583199501038,0.616897940635681,0.768544793128967\n             ,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202\n             ,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237\n             ,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586\n             ,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377\n             ,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614\n             ,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228\n             ,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011\n             ,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935\n             ,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187\n             ,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505\n             ,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701\n             ,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249\n             ,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288\n             ,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198\n             ,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798\n             ,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556\n             ,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672\n             ,0.0403527356684208,0.816201508045197,0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954\n             ,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794\n             ,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053\n             ,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458\n             ,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152\n             ,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255\n             ,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333\n             ,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948\n             ,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407\n             ,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442\n             ,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881\n             ,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077\n             ,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848\n             ,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442\n             ,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047\n             ,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607\n             ,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028\n             ,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524\n             ,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,0.602072775363922\n             ,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928\n             ,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683\n             ,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194\n             ,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352\n             ,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337\n             ,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037\n             ,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379\n             ,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186\n             ,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632\n             ,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003\n             ,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204\n             ,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766\n             ,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587\n             ,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284\n             ,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815\n             ,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766\n             ,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552\n             ,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,0.556499540805817,0.599716067314148\n             ,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985\n             ,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148\n             ,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593\n             ,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416\n             ,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805\n             ,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398\n             ,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396\n             ,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575\n             ,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139\n             ,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971\n             ,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255\n             ,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755\n             ,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232\n             ,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146\n             ,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159\n             ,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612\n             ,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088\n             ,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,0.333364248275757,0.551311314105988\n             ,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593\n             ,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938\n             ,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211\n             ,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063\n             ,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969\n             ,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584\n             ,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382\n             ,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772\n             ,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761\n             ,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706\n             ,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931\n             ,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343\n             ,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879\n             ,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235\n             ,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556\n             ,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634\n             ,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232\n             ,0.678222596645355,0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482\n             ,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615\n             ,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465\n             ,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706\n             ,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678\n             ,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646\n             ,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009\n             ,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419\n             ,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097\n             ,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059\n             ,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836\n             ,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826\n             ,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054\n             ,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426\n             ,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095\n             ,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523\n             ,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181\n             ,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434\n             ,0.790905892848969,0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281\n             ,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853\n             ,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474\n             ,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692\n             ,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164\n             ,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879\n             ,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612\n             ,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325\n             ,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094\n             ,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736\n             ,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396\n             ,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113\n             ,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604\n             ,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125\n             ,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454\n             ,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813\n             ,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208\n             ,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171\n             ,0.543534815311432,0.0322365164756775,0.557037770748138,0.0385730713605881,0.557879507541656,0.0331084579229355\n             ,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259\n             ,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881\n             ,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256\n             ,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668\n             ,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886\n             ,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975\n             ,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967\n             ,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853\n             ,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967\n             ,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896\n             ,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146\n             ,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856\n             ,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337\n             ,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159\n             ,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105\n             ,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332\n             ,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896\n             ,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,0.485119014978409\n             ,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301\n             ,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146\n             ,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211\n             ,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664\n             ,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039\n             ,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856\n             ,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987\n             ,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969\n             ,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574\n             ,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758\n             ,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774\n             ,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024\n             ,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848\n             ,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837\n             ,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803\n             ,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771\n             ,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944\n             ,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512\n             ,0.0149797797203064,0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085\n             ,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472\n             ,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837\n             ,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977\n             ,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173\n             ,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594\n             ,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236\n             ,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413\n             ,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082\n             ,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577\n             ,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986\n             ,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726\n             ,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042\n             ,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941\n             ,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664\n             ,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441\n             ,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802\n             ,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249\n             ,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,0.0117701292037964,0.422150850296021\n             ,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992\n             ,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016\n             ,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007\n             ,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679\n             ,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564\n             ,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346\n             ,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245\n             ,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347\n             ,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546\n             ,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375\n             ,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705\n             ,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375\n             ,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682\n             ,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807\n             ,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807\n             ,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299\n             ,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458\n             ,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629\n             ,0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985\n             ,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827\n             ,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793\n             ,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793\n             ,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776\n             ,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835\n             ,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541\n             ,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364\n             ,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124\n             ,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341\n             ,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271\n             ,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038\n             ,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458\n             ,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082\n             ,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593\n             ,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896\n             ,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774\n             ,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903\n             ,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,0.683692932128906,0.0178875774145126\n             ,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999\n             ,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113\n             ,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504\n             ,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518\n             ,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639\n             ,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756\n             ,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693\n             ,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485\n             ,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158\n             ,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789\n             ,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196\n             ,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822\n             ,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684\n             ,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694\n             ,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229\n             ,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909\n             ,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786\n             ,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413\n             ,0.548435807228088,0.0826816782355309,0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547\n             ,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826\n             ,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975\n             ,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443\n             ,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139\n             ,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445\n             ,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139\n             ,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316\n             ,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195\n             ,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783\n             ,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956\n             ,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314\n             ,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949\n             ,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974\n             ,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385\n             ,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161\n             ,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436\n             ,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499\n             ,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,0.139729559421539\n             ,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231\n             ,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978\n             ,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644\n             ,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793\n             ,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138\n             ,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014\n             ,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102\n             ,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719\n             ,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226\n             ,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041\n             ,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953\n             ,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965\n             ,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809\n             ,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625\n             ,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767\n             ,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802\n             ,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031\n             ,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584\n             ,0.147085726261139,0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234\n             ,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214\n             ,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716\n             ,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162\n             ,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652\n             ,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242\n             ,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848\n             ,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742\n             ,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663\n             ,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214\n             ,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676\n             ,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026\n             ,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281\n             ,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501\n             ,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471\n             ,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744\n             ,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386\n             ,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,0.219694241881371\n             ,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547\n             ,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424\n             ,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412\n             ,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308\n             ,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237\n             ,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932\n             ,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395\n             ,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964\n             ,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765\n             ,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439\n             ,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814\n             ,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781\n             ,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738\n             ,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245\n             ,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754\n             ,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616\n             ,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856\n             ,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783\n             ,0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244\n             ,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314\n             ,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028\n             ,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755\n             ,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493\n             ,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161\n             ,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928\n             ,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969\n             ,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313\n             ,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533\n             ,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923\n             ,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585\n             ,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439\n             ,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072\n             ,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595\n             ,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719\n             ,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834\n             ,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461\n             ,0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035\n             ,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961\n             ,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809\n             ,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044\n             ,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767\n             ,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297\n             ,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319\n             ,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439\n             ,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344\n             ,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911\n             ,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438\n             ,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086\n             ,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652\n             ,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257\n             ,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271\n             ,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974\n             ,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378\n             ,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,0.759102463722229\n             ,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889\n             ,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481\n             ,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344\n             ,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916\n             ,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113\n             ,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035\n             ,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333\n             ,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982\n             ,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093\n             ,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449\n             ,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641\n             ,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698\n             ,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721\n             ,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791\n             ,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639\n             ,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339\n             ,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778\n             ,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,0.627090036869049,0.837572515010834,0.626471817493439\n             ,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483\n             ,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444\n             ,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985\n             ,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788\n             ,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789\n             ,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036\n             ,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774\n             ,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535\n             ,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803\n             ,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633\n             ,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265\n             ,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674\n             ,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813\n             ,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729\n             ,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488\n             ,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261\n             ,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986\n             ,0.934876620769501,0.369551956653595,0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266\n             ,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392\n             ,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022\n             ,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875\n             ,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793\n             ,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439\n             ,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034\n             ,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082\n             ,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703\n             ,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909\n             ,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385\n             ,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175\n             ,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853\n             ,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518\n             ,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391\n             ,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864\n             ,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694\n             ,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134\n             ,0.802964627742767,0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116\n             ,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152\n             ,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803\n             ,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513\n             ,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763\n             ,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533\n             ,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202\n             ,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861\n             ,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423\n             ,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336\n             ,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799\n             ,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267\n             ,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692\n             ,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754\n             ,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939\n             ,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019\n             ,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196\n             ,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577\n             ,0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812\n             ,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097\n             ,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148\n             ,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348\n             ,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046\n             ,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397\n             ,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519\n             ,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738\n             ,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629\n             ,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493\n             ,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662\n             ,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985\n             ,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547\n             ,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436\n             ,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933\n             ,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619\n             ,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053\n             ,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845\n             ,0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887\n             ,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403\n             ,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322\n             ,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825\n             ,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938\n             ,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625\n             ,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483\n             ,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074\n             ,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902\n             ,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819\n             ,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989\n             ,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789\n             ,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682\n             ,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013\n             ,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999\n             ,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776\n             ,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199\n             ,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223\n             ,0.108967132866383,0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653\n             ,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344\n             ,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567\n             ,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856\n             ,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633\n             ,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974\n             ,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752\n             ,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382\n             ,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158\n             ,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737\n             ,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058\n             ,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696\n             ,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204\n             ,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509\n             ,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662\n             ,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322\n             ,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012\n             ,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425\n             ,0.00582033395767212,0.928635358810425,0.0301453322172165,0.945208311080933,0.00582033395767212,0.945208311080933\n             ,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514\n             ,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405\n             ,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388\n             ,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033\n             ,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755\n             ,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412\n             ,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607\n             ,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329\n             ,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503\n             ,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658\n             ,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374\n             ,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612\n             ,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965\n             ,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048\n             ,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022\n             ,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702\n             ,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798\n             ,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871\n             ,0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183\n             ,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026\n             ,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686\n             ,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441\n             ,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027\n             ,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965\n             ,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746\n             ,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264\n             ,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264\n             ,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832\n             ,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264\n             ,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832\n             ,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264\n             ,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832\n             ,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264\n             ,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381\n             ,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173\n             ,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599\n             ,0.122953936457634,0.413901716470718,0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718\n             ,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573\n             ,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716\n             ,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406\n             ,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849\n             ,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505\n             ,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527\n             ,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705\n             ,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317\n             ,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891\n             ,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125\n             ,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664\n             ,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005\n             ,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411\n             ,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646\n             ,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727\n             ,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479\n             ,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036\n             ,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,0.920238852500916\n             ,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329\n             ,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139\n             ,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922\n             ,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667\n             ,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966\n             ,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947\n             ,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397\n             ,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714\n             ,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631\n             ,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703\n             ,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422\n             ,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177\n             ,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827\n             ,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016\n             ,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401\n             ,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739\n             ,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815\n             ,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697\n             ,0.803424000740051,0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604\n             ,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905\n             ,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934\n             ,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085\n             ,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821\n             ,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026\n             ,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963\n             ,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214\n             ,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479\n             ,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957\n             ,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588\n             ,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087\n             ,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243\n             ,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692\n             ,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099\n             ,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532\n             ,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791\n             ,0.950862765312195,0.773497998714447,0.940354406833649,0.773665010929108,0.959785580635071,0.773280024528503\n             ,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335\n             ,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843\n             ,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069\n             ,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397\n             ,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759\n             ,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017\n             ,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887\n             ,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721\n             ,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758\n             ,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103\n             ,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348\n             ,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713\n             ,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427\n             ,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438\n             ,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493\n             ,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631\n             ,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805\n             ,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,0.970409572124481,0.583586990833282\n             ,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393\n             ,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073\n             ,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911\n             ,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105\n             ,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717\n             ,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506\n             ,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356\n             ,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778\n             ,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796\n             ,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739\n             ,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681\n             ,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972\n             ,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302\n             ,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529\n             ,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543\n             ,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943\n             ,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554\n             ,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,0.719281017780304,0.983229696750641\n             ,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085\n             ,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348\n             ,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415\n             ,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949\n             ,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395\n             ,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667\n             ,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384\n             ,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288\n             ,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595\n             ,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471\n             ,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626\n             ,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271\n             ,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193\n             ,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487\n             ,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584\n             ,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934\n             ,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863\n             ,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,0.983235836029053\n             ,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457\n             ,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658\n             ,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033\n             ,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761\n             ,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362\n             ,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545\n             ,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561\n             ,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541\n             ,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054\n             ,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947\n             ,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414\n             ,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457\n             ,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947\n             ,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493\n             ,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898\n             ,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854\n             ,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326\n             ,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623\n             ,0.637106657028198,0.177578389644623,0.620323657989502,0.196973383426666,0.620323657989502,0.177578389644623\n             ,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666\n             ,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623\n             ,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666\n             ,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623\n             ,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666\n             ,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623\n             ,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189\n             ,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189\n             ,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649\n             ,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573\n             ,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189\n             ,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194\n             ,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485\n             ,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065\n             ,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296\n             ,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622\n             ,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585\n             ,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,0.206433475017548\n             ,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296\n             ,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334\n             ,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997\n             ,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294\n             ,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981\n             ,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236\n             ,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779\n             ,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528\n             ,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978\n             ,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236\n             ,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572\n             ,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427\n             ,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366\n             ,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857\n             ,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455\n             ,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427\n             ,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821\n             ,0.683457255363464,0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366\n             ,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464\n             ,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882\n             ,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198\n             ,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284\n             ,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007\n             ,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526\n             ,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646\n             ,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012\n             ,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055\n             ,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399\n             ,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395\n             ,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348\n             ,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178\n             ,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298\n             ,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594\n             ,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656\n             ,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895\n             ,0.881043076515198,0.466186791658401,0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712\n             ,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091\n             ,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506\n             ,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358\n             ,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734\n             ,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673\n             ,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688\n             ,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819\n             ,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173\n             ,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504\n             ,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948\n             ,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933\n             ,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462\n             ,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374\n             ,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687\n             ,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874\n             ,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169\n             ,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942\n             ,0.833344876766205,0.484429806470871,0.847736835479736,0.463386803865433,0.846568882465363,0.464255839586258\n             ,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594\n             ,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039\n             ,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058\n             ,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912\n             ,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176\n             ,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588\n             ,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649\n             ,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423\n             ,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892\n             ,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426\n             ,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066\n             ,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939\n             ,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371\n             ,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027\n             ,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941\n             ,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445\n             ,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186\n             ,0.516026794910431,0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303\n             ,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943\n             ,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244\n             ,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319\n             ,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886\n             ,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785\n             ,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449\n             ,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341\n             ,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361\n             ,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546\n             ,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223\n             ,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809\n             ,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425\n             ,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985\n             ,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512\n             ,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143\n             ,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318\n             ,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,0.206447616219521\n             ,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339\n             ,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727\n             ,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211\n             ,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016\n             ,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147\n             ,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817\n             ,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345\n             ,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594\n             ,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496\n             ,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134\n             ,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641\n             ,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343\n             ,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339\n             ,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869\n             ,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087\n             ,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312\n             ,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043\n             ,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437\n             ,0.0736037790775299,0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556\n             ,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207\n             ,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902\n             ,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219\n             ,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598\n             ,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219\n             ,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572\n             ,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219\n             ,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598\n             ,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219\n             ,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598\n             ,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219\n             ,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943\n             ,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219\n             ,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598\n             ,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489\n             ,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489\n             ,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598\n             ,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,0.0853549689054489\n             ,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489\n             ,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489\n             ,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598\n             ,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426\n             ,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639\n             ,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219\n             ,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099\n             ,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099\n             ,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219\n             ,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099\n             ,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099\n             ,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099\n             ,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099\n             ,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572\n             ,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627\n             ,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769\n             ,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969\n             ,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366\n             ,0.26112961769104,0.530635476112366,0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969\n             ,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774\n             ,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333\n             ,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752\n             ,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912\n             ,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969\n             ,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841\n             ,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954\n             ,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874\n             ,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733\n             ,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373\n             ,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841\n             ,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996\n             ,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782\n             ,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402\n             ,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143\n             ,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996\n             ,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,0.674582898616791\n             ,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704\n             ,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878\n             ,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626\n             ,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689\n             ,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491\n             ,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516\n             ,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756\n             ,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491\n             ,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491\n             ,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491\n             ,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838\n             ,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231\n             ,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903\n             ,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491\n             ,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667\n             ,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039\n             ,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127\n             ,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034\n             ,0.279166221618652,0.709953963756561,0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829\n             ,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034\n             ,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919\n             ,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817\n             ,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376\n             ,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107\n             ,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365\n             ,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394\n             ,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512\n             ,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005\n             ,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762\n             ,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073\n             ,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797\n             ,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996\n             ,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961\n             ,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652\n             ,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371\n             ,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471\n             ,0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855\n             ,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857\n             ,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742\n             ,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824\n             ,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165\n             ,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544\n             ,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159\n             ,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304\n             ,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052\n             ,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465\n             ,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604\n             ,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885\n             ,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418\n             ,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952\n             ,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744\n             ,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787\n             ,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271\n             ,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956\n             ,0.310332953929901,0.122801892459393,0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765\n             ,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174\n             ,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895\n             ,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853\n             ,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923\n             ,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062\n             ,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285\n             ,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984\n             ,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487\n             ,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485\n             ,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345\n             ,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459\n             ,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949\n             ,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115\n             ,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371\n             ,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234\n             ,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749\n             ,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003\n             ,0.118860952556133,0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872\n             ,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677\n             ,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736\n             ,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601\n             ,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488\n             ,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379\n             ,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588\n             ,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744\n             ,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365\n             ,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533\n             ,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111\n             ,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683\n             ,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884\n             ,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132\n             ,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009\n             ,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352\n             ,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487\n             ,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753\n             ,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,0.118029937148094\n             ,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147\n             ,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296\n             ,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276\n             ,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258\n             ,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242\n             ,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328\n             ,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209\n             ,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408\n             ,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444\n             ,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744\n             ,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189\n             ,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348\n             ,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553\n             ,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813\n             ,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817\n             ,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151\n             ,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666\n             ,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,0.409544587135315\n             ,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578\n             ,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315\n             ,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427\n             ,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869\n             ,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045\n             ,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953\n             ,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469\n             ,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199\n             ,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483\n             ,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233\n             ,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983\n             ,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259\n             ,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056\n             ,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114\n             ,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344\n             ,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201\n             ,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787\n             ,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,0.244148418307304,0.376309484243393\n             ,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048\n             ,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726\n             ,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136\n             ,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081\n             ,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525\n             ,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041\n             ,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821\n             ,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141\n             ,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401\n             ,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203\n             ,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048\n             ,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252\n             ,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377\n             ,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443\n             ,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231\n             ,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852\n             ,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422\n             ,0.271062970161438,0.0843436047434807,0.268807142972946,0.0709859803318977,0.255287438631058,0.0861772000789642\n             ,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729\n             ,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628\n             ,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696\n             ,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072\n             ,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508\n             ,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894\n             ,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728\n             ,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823\n             ,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232\n             ,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764\n             ,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132\n             ,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678\n             ,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657\n             ,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221\n             ,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614\n             ,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378\n             ,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101\n             ,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,0.0979962795972824\n             ,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462\n             ,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847\n             ,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485\n             ,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251\n             ,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588\n             ,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106\n             ,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207\n             ,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301\n             ,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591\n             ,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064\n             ,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513\n             ,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792\n             ,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899\n             ,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687\n             ,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716\n             ,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147\n             ,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609\n             ,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629\n             ,0.359014123678207,0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587\n             ,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061\n             ,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602\n             ,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129\n             ,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097\n             ,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496\n             ,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871\n             ,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729\n             ,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304\n             ,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162\n             ,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452\n             ,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711\n             ,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926\n             ,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932\n             ,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262\n             ,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124\n             ,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343\n             ,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411\n             ,0.422037154436111,0.454183876514435,0.141791939735413,0.448351323604584,0.145058676600456,0.413058042526245\n             ,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936\n             ,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803\n             ,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148\n             ,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041\n             ,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949\n             ,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288\n             ,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867\n             ,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632\n             ,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136\n             ,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569\n             ,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929\n             ,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264\n             ,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125\n             ,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113\n             ,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998\n             ,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839\n             ,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925\n             ,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089\n             ,0.791049957275391,0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943\n             ,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606\n             ,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799\n             ,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593\n             ,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519\n             ,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899\n             ,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376\n             ,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953\n             ,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894\n             ,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433\n             ,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309\n             ,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157\n             ,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123\n             ,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547\n             ,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583\n             ,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052\n             ,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226\n             ,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263\n             ,0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374\n             ,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441\n             ,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365\n             ,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827\n             ,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052\n             ,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489\n             ,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326\n             ,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963\n             ,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869\n             ,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591\n             ,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551\n             ,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554\n             ,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624\n             ,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777\n             ,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417\n             ,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217\n             ,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178\n             ,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266\n             ,0.587654650211334,0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256\n             ,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718\n             ,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493\n             ,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411\n             ,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719\n             ,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913\n             ,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167\n             ,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882\n             ,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955\n             ,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649\n             ,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325\n             ,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255\n             ,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884\n             ,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861\n             ,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323\n             ,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561\n             ,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732\n             ,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287\n             ,0.0992880389094353,0.55315625667572,0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153\n             ,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077\n             ,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604\n             ,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723\n             ,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099\n             ,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052\n             ,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661\n             ,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696\n             ,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555\n             ,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121\n             ,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921\n             ,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163\n             ,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999\n             ,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799\n             ,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263\n             ,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706\n             ,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333\n             ,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,0.941240012645721,0.446224510669708,0.945038080215454\n             ,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966\n             ,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089\n             ,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791\n             ,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507\n             ,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741\n             ,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681\n             ,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343\n             ,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353\n             ,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989\n             ,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761\n             ,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865\n             ,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874\n             ,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515\n             ,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253\n             ,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576\n             ,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218\n             ,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552\n             ,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,0.356241673231125,0.772000849246979,0.366978108882904\n             ,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864\n             ,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292\n             ,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755\n             ,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155\n             ,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587\n             ,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601\n             ,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909\n             ,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252\n             ,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265\n             ,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148\n             ,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241\n             ,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952\n             ,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867\n             ,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499\n             ,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557\n             ,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203\n             ,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677\n             ,0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819\n             ,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731\n             ,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794\n             ,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986\n             ,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596\n             ,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101\n             ,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689\n             ,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563\n             ,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283\n             ,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966\n             ,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416\n             ,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492\n             ,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293\n             ,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329\n             ,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928\n             ,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628\n             ,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142\n             ,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711\n             ,0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301\n             ,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019\n             ,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856\n             ,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073\n             ,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582\n             ,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101\n             ,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735\n             ,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171\n             ,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546\n             ,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966\n             ,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847\n             ,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669\n             ,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816\n             ,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271\n             ,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969\n             ,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144\n             ,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889\n             ,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,0.90440434217453\n             ,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953\n             ,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483\n             ,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355\n             ,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553\n             ,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552\n             ,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807\n             ,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127\n             ,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769\n             ,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912\n             ,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362\n             ,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681\n             ,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301\n             ,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735\n             ,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558\n             ,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324\n             ,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062\n             ,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897\n             ,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126\n             ,0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627\n             ,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095\n             ,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698\n             ,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184\n             ,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311\n             ,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807\n             ,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608\n             ,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066\n             ,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631\n             ,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364\n             ,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613\n             ,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637\n             ,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822\n             ,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064\n             ,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049\n             ,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388\n             ,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871\n             ,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525\n             ,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,0.014482319355011,0.828360557556152\n             ,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264\n             ,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542\n             ,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714\n             ,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178\n             ,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679\n             ,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773\n             ,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899\n             ,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856\n             ,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726\n             ,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275\n             ,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331\n             ,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956\n             ,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286\n             ,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902\n             ,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064\n             ,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992\n             ,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046\n             ,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065\n             ,0.0374843291938305,0.953755974769592,0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093\n             ,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771\n             ,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919\n             ,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174\n             ,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231\n             ,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546\n             ,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135\n             ,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486\n             ,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434\n             ,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853\n             ,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516\n             ,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148\n             ,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862\n             ,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159\n             ,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281\n             ,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019\n             ,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685\n             ,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583\n             ,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801\n             ,0.0981541946530342,0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569\n             ,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678\n             ,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398\n             ,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311\n             ,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624\n             ,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072\n             ,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534\n             ,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705\n             ,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058\n             ,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392\n             ,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808\n             ,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182\n             ,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251\n             ,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595\n             ,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462\n             ,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561\n             ,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289\n             ,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591\n             ,0.778886675834656,0.0793051347136498,0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062\n             ,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406\n             ,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422\n             ,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273\n             ,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907\n             ,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748\n             ,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067\n             ,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147\n             ,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061\n             ,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285\n             ,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207\n             ,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035\n             ,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842\n             ,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843\n             ,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121\n             ,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181\n             ,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929\n             ,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205\n             ,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,0.493428647518158,0.950604200363159,0.342332631349564\n             ,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105\n             ,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942\n             ,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006\n             ,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132\n             ,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452\n             ,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178\n             ,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055\n             ,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998\n             ,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961\n             ,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459\n             ,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692\n             ,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107\n             ,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555\n             ,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523\n             ,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965\n             ,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491\n             ,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866\n             ,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,0.0616136789321899\n             ,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065\n             ,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058\n             ,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524\n             ,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933\n             ,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833\n             ,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714\n             ,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415\n             ,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849\n             ,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693\n             ,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786\n             ,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248\n             ,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891\n             ,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762\n             ,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805\n             ,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262\n             ,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801\n             ,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649\n             ,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,0.146303951740265\n             ,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852\n             ,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239\n             ,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486\n             ,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104\n             ,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275\n             ,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915\n             ,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366\n             ,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247\n             ,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994\n             ,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727\n             ,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625\n             ,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211\n             ,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571\n             ,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855\n             ,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936\n             ,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028\n             ,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311\n             ,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853\n             ,0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294\n             ,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689\n             ,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475\n             ,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534\n             ,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296\n             ,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262\n             ,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458\n             ,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576\n             ,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224\n             ,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192\n             ,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659\n             ,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292\n             ,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854\n             ,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667\n             ,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954\n             ,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474\n             ,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496\n             ,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,0.368574023246765\n             ,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918\n             ,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234\n             ,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442\n             ,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323\n             ,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508\n             ,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179\n             ,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663\n             ,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915\n             ,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099\n             ,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953\n             ,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099\n             ,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561\n             ,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142\n             ,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527\n             ,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201\n             ,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436\n             ,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195\n             ,0.864213168621063,0.874509155750275,0.815409004688263,0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517\n             ,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533\n             ,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886\n             ,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494\n             ,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446\n             ,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232\n             ,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218\n             ,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085\n             ,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347\n             ,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928\n             ,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136\n             ,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283\n             ,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479\n             ,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532\n             ,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573\n             ,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361\n             ,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852\n             ,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387\n             ,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,0.754678249359131,0.978725790977478,0.543712019920349\n             ,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391\n             ,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577\n             ,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624\n             ,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683\n             ,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114\n             ,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614\n             ,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099\n             ,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604\n             ,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826\n             ,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798\n             ,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116\n             ,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836\n             ,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289\n             ,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151\n             ,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612\n             ,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483\n             ,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287\n             ,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077\n             ,0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059\n             ,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541\n             ,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552\n             ,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615\n             ,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552\n             ,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438\n             ,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544\n             ,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911\n             ,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575\n             ,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466\n             ,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738\n             ,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771\n             ,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833\n             ,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851\n             ,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844\n             ,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017\n             ,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389\n             ,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,0.596252083778381\n             ,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431\n             ,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248\n             ,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647\n             ,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604\n             ,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743\n             ,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143\n             ,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135\n             ,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105\n             ,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598\n             ,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071\n             ,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036\n             ,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016\n             ,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663\n             ,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761\n             ,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498\n             ,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563\n             ,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107\n             ,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,0.123328268527985\n             ,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257\n             ,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906\n             ,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161\n             ,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579\n             ,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338\n             ,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999\n             ,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601\n             ,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367\n             ,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216\n             ,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667\n             ,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579\n             ,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399\n             ,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943\n             ,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309\n             ,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943\n             ,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837\n             ,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907\n             ,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701\n             ,0.0743808746337891,0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449\n             ,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131\n             ,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004\n             ,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825\n             ,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839\n             ,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162\n             ,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248\n             ,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573\n             ,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173\n             ,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551\n             ,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622\n             ,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514\n             ,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694\n             ,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746\n             ,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895\n             ,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794\n             ,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256\n             ,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982\n             ,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,0.235308602452278,0.0271604433655739\n             ,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528\n             ,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348\n             ,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254\n             ,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999\n             ,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315\n             ,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645\n             ,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786\n             ,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184\n             ,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138\n             ,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643\n             ,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822\n             ,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593\n             ,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705\n             ,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004\n             ,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622\n             ,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445\n             ,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276\n             ,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119\n             ,0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756\n             ,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021\n             ,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918\n             ,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715\n             ,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297\n             ,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861\n             ,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532\n             ,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327\n             ,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726\n             ,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033\n             ,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935\n             ,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712\n             ,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401\n             ,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066\n             ,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684\n             ,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507\n             ,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769\n             ,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025\n             ,0.199742212891579,0.168715670704842,0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788\n             ,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238\n             ,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198\n             ,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442\n             ,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422\n             ,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828\n             ,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674\n             ,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872\n             ,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071\n             ,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138\n             ,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372\n             ,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032\n             ,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568\n             ,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736\n             ,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654\n             ,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647\n             ,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486\n             ,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797\n             ,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,0.196686863899231\n             ,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779\n             ,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774\n             ,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293\n             ,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767\n             ,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605\n             ,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791\n             ,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802\n             ,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394\n             ,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095\n             ,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429\n             ,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594\n             ,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718\n             ,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846\n             ,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739\n             ,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413\n             ,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194\n             ,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045\n             ,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878\n             ,0.808161675930023,0.0944669842720032,0.829814612865448,0.092739924788475,0.836659967899323,0.0951223000884056\n             ,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991\n             ,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075\n             ,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593\n             ,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249\n             ,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553\n             ,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703\n             ,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739\n             ,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957\n             ,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137\n             ,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514\n             ,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253\n             ,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445\n             ,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285\n             ,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507\n             ,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174\n             ,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025\n             ,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016\n             ,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484\n             ,0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946\n             ,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923\n             ,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027\n             ,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142\n             ,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955\n             ,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959\n             ,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588\n             ,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862\n             ,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835\n             ,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371\n             ,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649\n             ,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221\n             ,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001\n             ,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212\n             ,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617\n             ,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852\n             ,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272\n             ,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529\n             ,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,0.719165027141571\n             ,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167\n             ,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402\n             ,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059\n             ,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922\n             ,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845\n             ,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484\n             ,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134\n             ,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946\n             ,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799\n             ,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152\n             ,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846\n             ,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344\n             ,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634\n             ,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712\n             ,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767\n             ,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896\n             ,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513\n             ,0.326107054948807,0.852742612361908,0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824\n             ,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436\n             ,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126\n             ,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681\n             ,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107\n             ,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346\n             ,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474\n             ,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814\n             ,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993\n             ,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485\n             ,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569\n             ,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177\n             ,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631\n             ,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575\n             ,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191\n             ,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654\n             ,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791\n             ,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805\n             ,0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105\n             ,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864\n             ,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353\n             ,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369\n             ,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879\n             ,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128\n             ,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803\n             ,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568\n             ,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728\n             ,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048\n             ,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721\n             ,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887\n             ,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493\n             ,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541\n             ,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654\n             ,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739\n             ,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811\n             ,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126\n             ,0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577\n             ,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316\n             ,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024\n             ,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512\n             ,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663\n             ,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183\n             ,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993\n             ,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874\n             ,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672\n             ,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852\n             ,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213\n             ,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545\n             ,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629\n             ,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769\n             ,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438\n             ,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584\n             ,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542\n             ,0.832485556602478,0.200292333960533,0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885\n             ,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341\n             ,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608\n             ,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764\n             ,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994\n             ,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566\n             ,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395\n             ,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244\n             ,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863\n             ,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421\n             ,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298\n             ,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857\n             ,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562\n             ,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951\n             ,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106\n             ,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525\n             ,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025\n             ,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655\n             ,0.0769496187567711,0.269949793815613,0.0977088510990143,0.236902311444283,0.106580346822739,0.257785648107529\n             ,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196\n             ,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211\n             ,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858\n             ,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601\n             ,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026\n             ,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972\n             ,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517\n             ,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404\n             ,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855\n             ,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465\n             ,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925\n             ,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538\n             ,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066\n             ,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374\n             ,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817\n             ,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534\n             ,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956\n             ,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943\n             ,0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938\n             ,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861\n             ,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834\n             ,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809\n             ,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992\n             ,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746\n             ,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456\n             ,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815\n             ,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706\n             ,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789\n             ,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591\n             ,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756\n             ,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574\n             ,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455\n             ,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948\n             ,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651\n             ,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686\n             ,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111\n             ,0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853\n             ,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524\n             ,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924\n             ,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975\n             ,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757\n             ,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691\n             ,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315\n             ,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324\n             ,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381\n             ,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344\n             ,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401\n             ,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844\n             ,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196\n             ,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418\n             ,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398\n             ,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522\n             ,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685\n             ,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437\n             ,0.133912816643715,0.20319464802742,0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524\n             ,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954\n             ,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344\n             ,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936\n             ,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318\n             ,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407\n             ,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033\n             ,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092\n             ,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791\n             ,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299\n             ,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534\n             ,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933\n             ,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886\n             ,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962\n             ,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948\n             ,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535\n             ,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283\n             ,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526\n             ,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,0.232346341013908,0.0509957745671272\n             ,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807\n             ,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112\n             ,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229\n             ,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593\n             ,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723\n             ,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959\n             ,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508\n             ,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872\n             ,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774\n             ,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491\n             ,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963\n             ,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169\n             ,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043\n             ,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012\n             ,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435\n             ,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189\n             ,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613\n             ,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837\n             ,0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475\n             ,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268\n             ,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307\n             ,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897\n             ,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761\n             ,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134\n             ,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111\n             ,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347\n             ,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226\n             ,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311\n             ,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284\n             ,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513\n             ,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504\n             ,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754\n             ,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277\n             ,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662\n             ,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374\n             ,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521\n             ,0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302\n             ,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995\n             ,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124\n             ,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597\n             ,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387\n             ,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505\n             ,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043\n             ,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425\n             ,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526\n             ,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425\n             ,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296\n             ,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193\n             ,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371\n             ,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927\n             ,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216\n             ,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302\n             ,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857\n             ,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,0.0835410356521606\n             ,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049\n             ,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313\n             ,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937\n             ,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547\n             ,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081\n             ,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316\n             ,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013\n             ,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102\n             ,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062\n             ,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082\n             ,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773\n             ,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134\n             ,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551\n             ,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289\n             ,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298\n             ,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368\n             ,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232\n             ,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244\n             ,0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757\n             ,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896\n             ,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648\n             ,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179\n             ,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826\n             ,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774\n             ,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951\n             ,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127\n             ,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092\n             ,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548\n             ,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717\n             ,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938\n             ,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157\n             ,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339\n             ,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889\n             ,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367\n             ,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367\n             ,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,0.0136640649288893,0.0665248408913612\n             ,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612\n             ,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065\n             ,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065\n             ,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556\n             ,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419\n             ,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017\n             ,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845\n             ,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715\n             ,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089\n             ,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965\n             ,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461\n             ,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831\n             ,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829\n             ,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545\n             ,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177\n             ,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883\n             ,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697\n             ,0.314485341310501,0.406984806060791,0.316858559846878,0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387\n             ,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964\n             ,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025\n             ,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207\n             ,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904\n             ,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587\n             ,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769\n             ,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004\n             ,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594\n             ,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897\n             ,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296\n             ,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728\n             ,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203\n             ,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597\n             ,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413\n             ,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161\n             ,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359\n             ,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516\n             ,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,0.313420087099075\n             ,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709\n             ,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498\n             ,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002\n             ,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516\n             ,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431\n             ,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014\n             ,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501\n             ,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879\n             ,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071\n             ,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488\n             ,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054\n             ,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621\n             ,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581\n             ,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979\n             ,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229\n             ,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853\n             ,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206\n             ,0.482427507638931,0.03264981508255,0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678\n             ,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031\n             ,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425\n             ,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013\n             ,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524\n             ,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011\n             ,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245\n             ,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545\n             ,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196\n             ,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861\n             ,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417\n             ,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953\n             ,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225\n             ,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125\n             ,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099\n             ,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026\n             ,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506\n             ,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488\n             ,0.508201599121094,0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518\n             ,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614\n             ,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507\n             ,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112\n             ,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837\n             ,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136\n             ,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232\n             ,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973\n             ,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623\n             ,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763\n             ,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747\n             ,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272\n             ,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616\n             ,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115\n             ,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589\n             ,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448\n             ,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921\n             ,0.36936816573143,0.356859803199768,0.368447452783585,0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833\n             ,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501\n             ,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896\n             ,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043\n             ,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703\n             ,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337\n             ,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932\n             ,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926\n             ,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719\n             ,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722\n             ,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059\n             ,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724\n             ,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386\n             ,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075\n             ,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982\n             ,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831\n             ,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061\n             ,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882\n             ,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,0.472558706998825\n             ,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371\n             ,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662\n             ,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157\n             ,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488\n             ,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213\n             ,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228\n             ,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769\n             ,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445\n             ,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987\n             ,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297\n             ,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301\n             ,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968\n             ,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383\n             ,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316\n             ,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728\n             ,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934\n             ,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062\n             ,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,0.421510130167007\n             ,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138\n             ,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685\n             ,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951\n             ,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986\n             ,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596\n             ,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243\n             ,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912\n             ,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292\n             ,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215\n             ,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973\n             ,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905\n             ,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943\n             ,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512\n             ,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145\n             ,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688\n             ,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501\n             ,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606\n             ,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063\n             ,0.550254046916962,0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256\n             ,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822\n             ,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009\n             ,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872\n             ,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118\n             ,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307\n             ,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597\n             ,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128\n             ,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805\n             ,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793\n             ,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287\n             ,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942\n             ,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822\n             ,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087\n             ,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613\n             ,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501\n             ,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905\n             ,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853\n             ,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,0.0392846465110779\n             ,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323\n             ,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303\n             ,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236\n             ,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301\n             ,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276\n             ,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524\n             ,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811\n             ,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015\n             ,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329\n             ,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264\n             ,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334\n             ,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247\n             ,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133\n             ,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948\n             ,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682\n             ,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794\n             ,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389\n             ,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623\n             ,0.49083137512207,0.0473983287811279,0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202\n             ,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392\n             ,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182\n             ,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062\n             ,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643\n             ,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692\n             ,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449\n             ,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011\n             ,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257\n             ,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773\n             ,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833\n             ,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563\n             ,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795\n             ,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609\n             ,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502\n             ,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668\n             ,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125\n             ,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896\n             ,0.4264976978302,0.349507212638855,0.451796531677246,0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252\n             ,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556\n             ,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646\n             ,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215\n             ,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107\n             ,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446\n             ,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764\n             ,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714\n             ,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638\n             ,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395\n             ,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909\n             ,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372\n             ,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249\n             ,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264\n             ,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609\n             ,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581\n             ,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568\n             ,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235\n             ,0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337\n             ,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889\n             ,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665\n             ,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375\n             ,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789\n             ,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837\n             ,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324\n             ,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636\n             ,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212\n             ,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615\n             ,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548\n             ,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098\n             ,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755\n             ,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362\n             ,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667\n             ,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625\n             ,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563\n             ,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,0.780230820178986\n             ,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454\n             ,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234\n             ,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135\n             ,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538\n             ,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973\n             ,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574\n             ,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557\n             ,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968\n             ,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793\n             ,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841\n             ,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715\n             ,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775\n             ,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791\n             ,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083\n             ,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772\n             ,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374\n             ,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895\n             ,0.664426863193512,0.451735496520996,0.781740605831146,0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182\n             ,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671\n             ,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875\n             ,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996\n             ,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791\n             ,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095\n             ,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036\n             ,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128\n             ,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326\n             ,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032\n             ,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638\n             ,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726\n             ,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397\n             ,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745\n             ,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954\n             ,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098\n             ,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755\n             ,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526\n             ,0.486700624227524,0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725\n             ,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627\n             ,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157\n             ,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655\n             ,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994\n             ,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179\n             ,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507\n             ,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814\n             ,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901\n             ,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877\n             ,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012\n             ,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375\n             ,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355\n             ,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281\n             ,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865\n             ,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833\n             ,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743\n             ,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768\n             ,0.386751741170883,0.617895185947418,0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288\n             ,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473\n             ,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659\n             ,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292\n             ,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964\n             ,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133\n             ,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201\n             ,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293\n             ,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013\n             ,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646\n             ,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588\n             ,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165\n             ,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865\n             ,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227\n             ,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106\n             ,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642\n             ,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765\n             ,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,0.90181291103363,0.50802755355835\n             ,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183\n             ,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227\n             ,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086\n             ,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432\n             ,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513\n             ,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312\n             ,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633\n             ,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022\n             ,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552\n             ,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808\n             ,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386\n             ,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944\n             ,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297\n             ,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484\n             ,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453\n             ,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383\n             ,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065\n             ,0.637537717819214,0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802\n             ,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354\n             ,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872\n             ,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222\n             ,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638\n             ,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807\n             ,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524\n             ,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323\n             ,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165\n             ,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507\n             ,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951\n             ,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215\n             ,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087\n             ,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366\n             ,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399\n             ,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123\n             ,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671\n             ,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,0.564278662204742\n             ,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543\n             ,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744\n             ,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924\n             ,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052\n             ,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235\n             ,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116\n             ,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443\n             ,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149\n             ,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659\n             ,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132\n             ,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731\n             ,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403\n             ,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649\n             ,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019\n             ,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981\n             ,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601\n             ,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013\n             ,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,0.561667025089264,0.981199622154236\n             ,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288\n             ,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623\n             ,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255\n             ,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904\n             ,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255\n             ,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155\n             ,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439\n             ,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626\n             ,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971\n             ,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574\n             ,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566\n             ,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699\n             ,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431\n             ,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864\n             ,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974\n             ,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008\n             ,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,0.991807043552399\n             ,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344\n             ,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207\n             ,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793\n             ,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829\n             ,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166\n             ,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062\n             ,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816\n             ,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186\n             ,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449\n             ,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567\n             ,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317\n             ,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936\n             ,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294\n             ,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198\n             ,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379\n             ,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029\n             ,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272\n             ,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,0.434852063655853\n             ,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239\n             ,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279\n             ,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657\n             ,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565\n             ,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876\n             ,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016\n             ,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383\n             ,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222\n             ,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827\n             ,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765\n             ,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324\n             ,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245\n             ,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762\n             ,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984\n             ,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822\n             ,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933\n             ,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329\n             ,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999\n             ,0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249\n             ,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244\n             ,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762\n             ,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181\n             ,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814\n             ,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899\n             ,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994\n             ,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935\n             ,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381\n             ,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414\n             ,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813\n             ,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488\n             ,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838\n             ,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535\n             ,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539\n             ,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418\n             ,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368\n             ,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535\n             ,0.816003322601318,0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638\n             ,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751\n             ,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699\n             ,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256\n             ,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667\n             ,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938\n             ,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555\n             ,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219\n             ,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725\n             ,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928\n             ,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241\n             ,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347\n             ,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236\n             ,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984\n             ,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482\n             ,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451\n             ,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037\n             ,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,0.830957114696503,0.422840178012848\n             ,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874\n             ,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241\n             ,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053\n             ,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048\n             ,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005\n             ,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648\n             ,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505\n             ,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419\n             ,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017\n             ,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875\n             ,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739\n             ,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724\n             ,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275\n             ,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712\n             ,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713\n             ,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484\n             ,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654\n             ,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,0.143848940730095\n             ,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804\n             ,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559\n             ,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442\n             ,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595\n             ,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341\n             ,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495\n             ,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061\n             ,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041\n             ,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763\n             ,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135\n             ,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448\n             ,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895\n             ,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482\n             ,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856\n             ,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024\n             ,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903\n             ,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879\n             ,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251\n             ,0.898496329784393,0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624\n             ,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211\n             ,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012\n             ,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039\n             ,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086\n             ,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414\n             ,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186\n             ,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828\n             ,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931\n             ,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358\n             ,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491\n             ,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676\n             ,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334\n             ,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113\n             ,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744\n             ,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392\n             ,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881\n             ,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118\n             ,0.331734776496887,0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168\n             ,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905\n             ,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233\n             ,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275\n             ,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514\n             ,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809\n             ,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269\n             ,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484\n             ,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088\n             ,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686\n             ,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914\n             ,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958\n             ,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479\n             ,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966\n             ,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899\n             ,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556\n             ,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412\n             ,0.59907454252243,0.0290243290364742,0.594756245613098,0.0432147420942783,0.550425350666046,0.0373775735497475\n             ,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419\n             ,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893\n             ,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354\n             ,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738\n             ,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304\n             ,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426\n             ,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402\n             ,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334\n             ,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378\n             ,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619\n             ,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026\n             ,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366\n             ,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826\n             ,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357\n             ,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836\n             ,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441\n             ,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111\n             ,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,0.933514356613159,0.0762230306863785\n             ,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583\n             ,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171\n             ,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271\n             ,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103\n             ,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028\n             ,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809\n             ,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838\n             ,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167\n             ,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973\n             ,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605\n             ,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757\n             ,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644\n             ,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991\n             ,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826\n             ,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304\n             ,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994\n             ,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539\n             ,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,0.816710710525513,0.759240210056305\n             ,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558\n             ,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897\n             ,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019\n             ,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033\n             ,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759\n             ,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717\n             ,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223\n             ,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239\n             ,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526\n             ,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592\n             ,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483\n             ,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408\n             ,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798\n             ,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779\n             ,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459\n             ,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879\n             ,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246\n             ,0.591059923171997,0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749\n             ,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677\n             ,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534\n             ,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169\n             ,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977\n             ,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994\n             ,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486\n             ,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222\n             ,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327\n             ,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734\n             ,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447\n             ,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204\n             ,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566\n             ,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782\n             ,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563\n             ,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338\n             ,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982\n             ,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,0.714633941650391,0.916672646999359\n             ,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281\n             ,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264\n             ,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557\n             ,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158\n             ,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866\n             ,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563\n             ,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039\n             ,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088\n             ,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078\n             ,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883\n             ,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169\n             ,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132\n             ,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401\n             ,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909\n             ,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108\n             ,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753\n             ,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,0.974531888961792\n             ,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138\n             ,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187\n             ,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589\n             ,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079\n             ,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315\n             ,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202\n             ,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154\n             ,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924\n             ,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005\n             ,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234\n             ,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851\n             ,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654\n             ,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271\n             ,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883\n             ,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445\n             ,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397\n             ,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582\n             ,0.577414393424988,0.962452411651611,0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158\n             ,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839\n             ,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607\n             ,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543\n             ,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253\n             ,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672\n             ,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351\n             ,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905\n             ,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019\n             ,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227\n             ,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747\n             ,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231\n             ,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234\n             ,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691\n             ,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226\n             ,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641\n             ,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998\n             ,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264\n             ,0.963677108287811,0.872271716594696,0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812\n             ,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783\n             ,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703\n             ,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797\n             ,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947\n             ,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521\n             ,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391\n             ,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042\n             ,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844\n             ,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766\n             ,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196\n             ,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484\n             ,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111\n             ,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917\n             ,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615\n             ,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737\n             ,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799\n             ,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392\n             ,0.978221297264099,0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258\n             ,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409\n             ,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535\n             ,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536\n             ,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968\n             ,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125\n             ,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141\n             ,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401\n             ,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337\n             ,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667\n             ,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989\n             ,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783\n             ,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194\n             ,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954\n             ,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127\n             ,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776\n             ,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616\n             ,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,0.621363580226898,0.682616829872131\n             ,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774\n             ,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151\n             ,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519\n             ,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157\n             ,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333\n             ,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347\n             ,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901\n             ,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676\n             ,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631\n             ,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012\n             ,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048\n             ,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284\n             ,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556\n             ,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512\n             ,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865\n             ,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786\n             ,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893\n             ,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663\n             ,0.105796456336975,0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037\n             ,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948\n             ,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325\n             ,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938\n             ,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369\n             ,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886\n             ,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355\n             ,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094\n             ,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082\n             ,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589\n             ,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694\n             ,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186\n             ,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473\n             ,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644\n             ,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226\n             ,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226\n             ,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872\n             ,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478\n             ,0.292685657739639,0.292649954557419,0.269282728433609,0.292957901954651,0.269526928663254,0.0986065044999123\n             ,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705\n             ,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117\n             ,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519\n             ,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744\n             ,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426\n             ,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368\n             ,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933\n             ,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878\n             ,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548\n             ,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617\n             ,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808\n             ,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183\n             ,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749\n             ,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254\n             ,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987\n             ,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163\n             ,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436\n             ,0.189350441098213,0.114026740193367,0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426\n             ,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571\n             ,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692\n             ,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373\n             ,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542\n             ,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883\n             ,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455\n             ,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385\n             ,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697\n             ,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125\n             ,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356\n             ,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726\n             ,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193\n             ,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982\n             ,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806\n             ,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181\n             ,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542\n             ,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426\n             ,0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398\n             ,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404\n             ,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648\n             ,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877\n             ,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277\n             ,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489\n             ,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004\n             ,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905\n             ,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782\n             ,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988\n             ,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638\n             ,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268\n             ,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245\n             ,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917\n             ,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788\n             ,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177\n             ,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989\n             ,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129\n             ,0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108\n             ,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438\n             ,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261\n             ,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425\n             ,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412\n             ,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362\n             ,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276\n             ,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656\n             ,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407\n             ,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997\n             ,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754\n             ,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773\n             ,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882\n             ,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449\n             ,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259\n             ,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101\n             ,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301\n             ,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,0.727285981178284\n             ,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786\n             ,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446\n             ,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213\n             ,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925\n             ,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267\n             ,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179\n             ,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427\n             ,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392\n             ,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329\n             ,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498\n             ,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209\n             ,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924\n             ,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917\n             ,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705\n             ,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912\n             ,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832\n             ,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272\n             ,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,0.139332994818687\n             ,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374\n             ,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107\n             ,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279\n             ,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471\n             ,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413\n             ,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697\n             ,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824\n             ,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088\n             ,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603\n             ,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676\n             ,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576\n             ,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628\n             ,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526\n             ,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321\n             ,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102\n             ,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627\n             ,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941\n             ,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915\n             ,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,0.157439410686493,0.711707234382629\n             ,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664\n             ,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005\n             ,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458\n             ,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158\n             ,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166\n             ,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454\n             ,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145\n             ,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233\n             ,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521\n             ,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594\n             ,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598\n             ,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266\n             ,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322\n             ,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931\n             ,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497\n             ,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938\n             ,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938\n             ,0.955354988574982,0.376253008842468,0.963590979576111,0.376287996768951,0.955453991889954,0.500213027000427\n             ,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006\n             ,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838\n             ,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933\n             ,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553\n             ,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188\n             ,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537\n             ,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347\n             ,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683\n             ,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111\n             ,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242\n             ,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658\n             ,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144\n             ,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213\n             ,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323\n             ,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323\n             ,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294\n             ,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626\n             ,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544\n             ,0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168\n             ,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645\n             ,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757\n             ,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956\n             ,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759\n             ,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203\n             ,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042\n             ,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595\n             ,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542\n             ,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974\n             ,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268\n             ,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205\n             ,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577\n             ,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812\n             ,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989\n             ,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721\n             ,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015\n             ,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,0.36667200922966\n             ,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842\n             ,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342\n             ,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754\n             ,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837\n             ,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583\n             ,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271\n             ,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587\n             ,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175\n             ,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402\n             ,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994\n             ,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989\n             ,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104\n             ,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712\n             ,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974\n             ,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782\n             ,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666\n             ,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114\n             ,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187\n             ,0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401\n             ,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255\n             ,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059\n             ,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303\n             ,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123\n             ,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032\n             ,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452\n             ,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445\n             ,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429\n             ,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387\n             ,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709\n             ,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402\n             ,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109\n             ,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442\n             ,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282\n             ,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408\n             ,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517\n             ,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282\n             ,0.845073997974396,0.622668981552124,0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298\n             ,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094\n             ,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286\n             ,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411\n             ,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928\n             ,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935\n             ,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314\n             ,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067\n             ,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521\n             ,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277\n             ,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192\n             ,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546\n             ,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193\n             ,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172\n             ,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141\n             ,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388\n             ,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542\n             ,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044\n             ,0.743863999843597,0.51264899969101,0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154\n             ,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909\n             ,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984\n             ,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899\n             ,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105\n             ,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976\n             ,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998\n             ,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619\n             ,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695\n             ,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007\n             ,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931\n             ,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564\n             ,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033\n             ,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737\n             ,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931\n             ,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299\n             ,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065\n             ,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384\n             ,0.595848023891449,0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599\n             ,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592\n             ,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483\n             ,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401\n             ,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512\n             ,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582\n             ,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951\n             ,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396\n             ,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481\n             ,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237\n             ,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964\n             ,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704\n             ,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749\n             ,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684\n             ,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208\n             ,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742\n             ,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174\n             ,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281\n             ,0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759\n             ,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723\n             ,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376\n             ,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672\n             ,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755\n             ,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683\n             ,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141\n             ,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971\n             ,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269\n             ,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896\n             ,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775\n             ,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464\n             ,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984\n             ,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764\n             ,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039\n             ,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961\n             ,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101\n             ,0.408055007457733,0.415430009365082,0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941\n             ,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719\n             ,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322\n             ,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111\n             ,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626\n             ,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244\n             ,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901\n             ,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061\n             ,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729\n             ,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927\n             ,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316\n             ,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683\n             ,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114\n             ,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406\n             ,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311\n             ,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899\n             ,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796\n             ,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,0.726795017719269\n             ,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149\n             ,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808\n             ,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951\n             ,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033\n             ,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387\n             ,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298\n             ,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363\n             ,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417\n             ,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526\n             ,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964\n             ,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122\n             ,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241\n             ,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446\n             ,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312\n             ,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081\n             ,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239\n             ,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273\n             ,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,0.835596978664398\n             ,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875\n             ,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522\n             ,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939\n             ,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865\n             ,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754\n             ,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952\n             ,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264\n             ,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314\n             ,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103\n             ,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874\n             ,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323\n             ,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667\n             ,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542\n             ,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059\n             ,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305\n             ,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476\n             ,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308\n             ,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155\n             ,0.768315017223358,0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553\n             ,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834\n             ,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218\n             ,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777\n             ,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467\n             ,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336\n             ,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919\n             ,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877\n             ,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104\n             ,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976\n             ,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078\n             ,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564\n             ,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191\n             ,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626\n             ,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076\n             ,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927\n             ,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084\n             ,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,0.759728014469147\n             ,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355\n             ,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372\n             ,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758\n             ,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788\n             ,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658\n             ,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692\n             ,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661\n             ,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161\n             ,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619\n             ,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949\n             ,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371\n             ,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718\n             ,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849\n             ,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685\n             ,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787\n             ,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819\n             ,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409\n             ,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148\n             ,0.171581521630287,0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676\n             ,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513\n             ,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359\n             ,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079\n             ,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194\n             ,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539\n             ,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625\n             ,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695\n             ,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744\n             ,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488\n             ,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071\n             ,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704\n             ,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242\n             ,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492\n             ,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816\n             ,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732\n             ,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908\n             ,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763\n             ,0.162967994809151,0.113466002047062,0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327\n             ,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646\n             ,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514\n             ,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084\n             ,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386\n             ,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101\n             ,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385\n             ,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428\n             ,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987\n             ,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883\n             ,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484\n             ,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373\n             ,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658\n             ,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462\n             ,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587\n             ,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865\n             ,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358\n             ,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328\n             ,0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711\n             ,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338\n             ,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066\n             ,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667\n             ,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168\n             ,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753\n             ,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501\n             ,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244\n             ,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687\n             ,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246\n             ,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578\n             ,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489\n             ,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344\n             ,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083\n             ,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861\n             ,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144\n             ,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115\n             ,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,0.698300063610077,0.684771537780762\n             ,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515\n             ,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856\n             ,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278\n             ,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699\n             ,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249\n             ,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716\n             ,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617\n             ,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275\n             ,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222\n             ,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765\n             ,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668\n             ,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356\n             ,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064\n             ,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829\n             ,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163\n             ,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914\n             ,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919\n             ,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,0.199659392237663\n             ,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282\n             ,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348\n             ,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092\n             ,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691\n             ,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254\n             ,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426\n             ,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086\n             ,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411\n             ,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477\n             ,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754\n             ,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387\n             ,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886\n             ,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322\n             ,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393\n             ,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323\n             ,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383\n             ,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805\n             ,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,0.313732326030731\n             ,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783\n             ,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745\n             ,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548\n             ,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141\n             ,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856\n             ,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393\n             ,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819\n             ,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549\n             ,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264\n             ,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259\n             ,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728\n             ,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662\n             ,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994\n             ,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397\n             ,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743\n             ,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432\n             ,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912\n             ,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,0.583523273468018,0.458871752023697\n             ,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586\n             ,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695\n             ,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428\n             ,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084\n             ,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141\n             ,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187\n             ,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701\n             ,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708\n             ,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792\n             ,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552\n             ,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483\n             ,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544\n             ,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508\n             ,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097\n             ,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012\n             ,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559\n             ,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001\n             ,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,0.476934969425201\n             ,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676\n             ,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318\n             ,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923\n             ,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571\n             ,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863\n             ,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219\n             ,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546\n             ,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389\n             ,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969\n             ,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588\n             ,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622\n             ,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012\n             ,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577\n             ,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138\n             ,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649\n             ,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702\n             ,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322\n             ,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,0.441692322492599,0.315481513738632\n             ,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957\n             ,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658\n             ,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431\n             ,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986\n             ,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328\n             ,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529\n             ,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019\n             ,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869\n             ,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414\n             ,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775\n             ,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282\n             ,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705\n             ,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856\n             ,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905\n             ,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138\n             ,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005\n             ,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709\n             ,0.507110118865967,0.265018463134766,0.501041769981384,0.297658920288086,0.484085887670517,0.325823694467545\n             ,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871\n             ,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635\n             ,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287\n             ,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739\n             ,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893\n             ,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312\n             ,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956\n             ,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734\n             ,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363\n             ,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742\n             ,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213\n             ,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713\n             ,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885\n             ,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799\n             ,0.417306035757065,0.26596075296402\n            UVIndex: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32\n             ,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23\n             ,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62\n             ,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81\n             ,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100\n             ,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110\n             ,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124\n             ,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133\n             ,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149\n             ,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151\n             ,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177\n             ,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193\n             ,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199\n             ,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206\n             ,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211\n             ,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225\n             ,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239\n             ,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246\n             ,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,249,254,137,254,249,138,255,256,257\n             ,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243\n             ,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197\n             ,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185\n             ,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275\n             ,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278\n             ,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225\n             ,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139\n             ,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223\n             ,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293\n             ,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139\n             ,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89\n             ,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320\n             ,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333\n             ,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348\n             ,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363\n             ,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375\n             ,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389\n             ,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408\n             ,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,421,418,416,402,401,419,422,399,402,423\n             ,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402\n             ,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426\n             ,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455\n             ,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472\n             ,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479\n             ,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500\n             ,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507\n             ,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527\n             ,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540\n             ,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549\n             ,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555\n             ,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322\n             ,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567\n             ,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372\n             ,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592\n             ,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620\n             ,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609\n             ,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640\n             ,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,649,650,651,380,379,649,648,389,388,652\n             ,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665\n             ,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685\n             ,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704\n             ,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710\n             ,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703\n             ,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736\n             ,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750\n             ,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762\n             ,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436\n             ,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796\n             ,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808\n             ,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826\n             ,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838\n             ,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699\n             ,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783\n             ,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530\n             ,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890\n             ,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777\n             ,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,912,913,912,914,860,861,913,915,914,912\n             ,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904\n             ,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940\n             ,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788\n             ,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970\n             ,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986\n             ,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992\n             ,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980\n             ,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010\n             ,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017\n             ,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026\n             ,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035\n             ,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918\n             ,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050\n             ,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896\n             ,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022\n             ,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729\n             ,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067\n             ,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039\n             ,1075,1076,1077,1078,1079,1080,1077,1080,1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931\n             ,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930\n             ,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031\n             ,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577\n             ,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030\n             ,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091\n             ,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975\n             ,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112\n             ,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811\n             ,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813\n             ,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126\n             ,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138\n             ,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144\n             ,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147\n             ,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159\n             ,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168\n             ,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898\n             ,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180\n             ,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900\n             ,1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187\n             ,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012\n             ,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059\n             ,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861\n             ,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204\n             ,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164\n             ,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216\n             ,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185\n             ,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224\n             ,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230\n             ,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251\n             ,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262\n             ,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267\n             ,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043\n             ,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274\n             ,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286\n             ,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295\n             ,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300\n             ,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,1307,1306,1303,1302,1274\n             ,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314\n             ,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305\n             ,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312\n             ,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334\n             ,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337\n             ,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346\n             ,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348\n             ,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358\n             ,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236\n             ,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374\n             ,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380\n             ,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383\n             ,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305\n             ,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274\n             ,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391\n             ,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400\n             ,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377\n             ,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414\n             ,1411,1400,1401,1400,1411,1410,1402,1415,1416,1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258\n             ,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423\n             ,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357\n             ,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352\n             ,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200\n             ,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335\n             ,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405\n             ,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423\n             ,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338\n             ,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432\n             ,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375\n             ,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440\n             ,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444\n             ,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456\n             ,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466\n             ,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476\n             ,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446\n             ,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477\n             ,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502\n             ,1503,1504,1503,1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507\n             ,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180\n             ,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027\n             ,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519\n             ,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277\n             ,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395\n             ,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995\n             ,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533\n             ,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542\n             ,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523\n             ,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552\n             ,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558\n             ,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563\n             ,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565\n             ,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574\n             ,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353\n             ,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588\n             ,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589\n             ,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,615,1462,1597\n             ,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603\n             ,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611\n             ,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614\n             ,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620\n             ,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627\n             ,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629\n             ,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631\n             ,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403\n             ,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639\n             ,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643\n             ,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891\n             ,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650\n             ,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976\n             ,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542\n             ,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665\n             ,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653\n             ,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840\n             ,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081\n             ,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637\n             ,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752\n             ,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952\n             ,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461\n             ,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633\n             ,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313\n             ,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818\n             ,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979\n             ,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691\n             ,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689\n             ,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922\n             ,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710\n             ,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700\n             ,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588\n             ,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722\n             ,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959\n             ,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330\n             ,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531\n             ,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323\n             ,319,318,1738,1737,1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734\n             ,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742\n             ,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155\n             ,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159\n             ,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746\n             ,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727\n             ,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701\n             ,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764\n             ,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718\n             ,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135\n             ,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758\n             ,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768\n             ,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144\n             ,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698\n             ,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773\n             ,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775\n             ,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749\n             ,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789\n             ,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,775,1792,1793\n             ,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136\n             ,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770\n             ,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804\n             ,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208\n             ,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978\n             ,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809\n             ,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672\n             ,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382\n             ,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071\n             ,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447\n             ,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818\n             ,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820\n             ,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815\n             ,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836\n             ,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841\n             ,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836\n             ,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839\n             ,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127\n             ,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,1856,1857,1854,1857,167,178,1855,660,1216,1858\n             ,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276\n             ,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860\n             ,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207\n             ,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658\n             ,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861\n             ,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877\n             ,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696\n             ,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071\n             ,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760\n             ,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528\n             ,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104\n             ,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673\n             ,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596\n             ,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735\n             ,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810\n             ,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749\n             ,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831\n             ,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462\n             ,1461,1881,1882,1883,1884,1885,1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889\n             ,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882\n             ,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915\n             ,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921\n             ,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927\n             ,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938\n             ,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951\n             ,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958\n             ,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946\n             ,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983\n             ,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996\n             ,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965\n             ,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002\n             ,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009\n             ,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013\n             ,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023\n             ,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040\n             ,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045\n             ,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,2052\n             ,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059\n             ,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051\n             ,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993\n             ,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988\n             ,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034\n             ,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075\n             ,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078\n             ,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081\n             ,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026\n             ,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028\n             ,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088\n             ,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094\n             ,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916\n             ,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101\n             ,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110\n             ,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126\n             ,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139\n             ,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140\n             ,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,2144,2147,2149,2150,2148,2148,2150,2151,2152\n             ,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162\n             ,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143\n             ,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183\n             ,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197\n             ,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183\n             ,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187\n             ,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215\n             ,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231\n             ,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249\n             ,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232\n             ,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234\n             ,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438\n             ,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263\n             ,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283\n             ,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295\n             ,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450\n             ,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307\n             ,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313\n             ,2317,2318,2316,2317,2319,2320,2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323\n             ,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339\n             ,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347\n             ,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361\n             ,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370\n             ,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373\n             ,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645\n             ,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133\n             ,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385\n             ,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345\n             ,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117\n             ,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388\n             ,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399\n             ,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414\n             ,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415\n             ,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434\n             ,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452\n             ,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460\n             ,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,2428\n             ,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476\n             ,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480\n             ,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491\n             ,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408\n             ,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518\n             ,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534\n             ,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544\n             ,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549\n             ,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533\n             ,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544\n             ,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570\n             ,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576\n             ,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580\n             ,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491\n             ,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598\n             ,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611\n             ,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623\n             ,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634\n             ,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,2636,2637,2638,2583,2582,2638,2097,2584\n             ,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651\n             ,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660\n             ,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665\n             ,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684\n             ,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698\n             ,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702\n             ,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717\n             ,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729\n             ,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740\n             ,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865\n             ,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755\n             ,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765\n             ,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317\n             ,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762\n             ,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661\n             ,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806\n             ,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811\n             ,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824\n             ,2825,2645,2826,2827,2828,2829,2827,2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839\n             ,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645\n             ,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854\n             ,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547\n             ,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873\n             ,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884\n             ,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696\n             ,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745\n             ,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897\n             ,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668\n             ,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773\n             ,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618\n             ,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775\n             ,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933\n             ,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939\n             ,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946\n             ,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830\n             ,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958\n             ,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891\n             ,2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777\n             ,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859\n             ,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622\n             ,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732\n             ,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779\n             ,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990\n             ,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998\n             ,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821\n             ,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829\n             ,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922\n             ,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012\n             ,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698\n             ,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838\n             ,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020\n             ,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002\n             ,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028\n             ,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038\n             ,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046\n             ,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,2887,2886,2736,2551,2553,3049,2736\n             ,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882\n             ,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140\n             ,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716\n             ,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009\n             ,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657\n             ,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078\n             ,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651\n             ,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092\n             ,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092\n             ,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596\n             ,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190\n             ,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194\n             ,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099\n             ,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107\n             ,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495\n             ,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115\n             ,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117\n             ,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564\n             ,3119,3120,3121,3010,2921,3122,2896,3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127\n             ,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142\n             ,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153\n             ,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159\n             ,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900\n             ,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173\n             ,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105\n             ,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187\n             ,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192\n             ,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196\n             ,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190\n             ,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214\n             ,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124\n             ,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222\n             ,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152\n             ,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237\n             ,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229\n             ,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240\n             ,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,3248\n             ,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215\n             ,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256\n             ,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268\n             ,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266\n             ,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278\n             ,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147\n             ,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265\n             ,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289\n             ,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301\n             ,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302\n             ,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305\n             ,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918\n             ,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291\n             ,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248\n             ,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198\n             ,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134\n             ,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315\n             ,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319\n             ,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,3325,3326,3327,3326,3325,3328,3329,2436,2433\n             ,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322\n             ,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342\n             ,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351\n             ,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350\n             ,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368\n             ,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373\n             ,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559\n             ,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712\n             ,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383\n             ,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389\n             ,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164\n             ,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394\n             ,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608\n             ,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279\n             ,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297\n             ,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407\n             ,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410\n             ,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416\n             ,3415,2216,3418,3416,3412,2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174\n             ,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426\n             ,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381\n             ,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436\n             ,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069\n             ,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678\n             ,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447\n             ,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452\n             ,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449\n             ,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444\n             ,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364\n             ,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426\n             ,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475\n             ,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478\n             ,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484\n             ,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487\n             ,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492\n             ,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298\n             ,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,2291,3494,3500\n             ,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997\n             ,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303\n             ,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290\n             ,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724\n             ,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493\n             ,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386\n             ,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565\n             ,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421\n             ,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350\n             ,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118\n             ,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868\n             ,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737\n             ,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002\n             ,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874\n             ,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523\n             ,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525\n             ,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452\n             ,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799\n             ,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,2135,3528,2338,3529,3528,2383,2126,2125,3528,3528\n             ,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357\n             ,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339\n             ,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530\n             ,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956\n             ,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064\n             ,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074\n             ,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874\n             ,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609\n             ,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213\n             ,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929\n             ,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808\n             ,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501\n             ,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035\n             ,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032\n             ,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946\n             ,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552\n             ,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065\n             ,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867\n             ,3558,3109,3110,3109,3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903\n             ,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799\n             ,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179\n             ,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511\n             ,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550\n             ,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564\n             ,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562\n             ,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565\n             ,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573\n             ,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984\n             ,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583\n             ,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992\n             ,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591\n             ,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895\n             ,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594\n             ,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095\n             ,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164\n             ,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610\n             ,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,2973,3613,3614,2973\n             ,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612\n             ,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186\n             ,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861\n             ,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957\n             ,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789\n             ,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600\n             ,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243\n             ,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354\n             ,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495\n             ,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315\n             ,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364\n             ,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221\n             ,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258\n             ,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803\n             ,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943\n             ,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153\n             ,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757\n             ,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540\n             ,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519\n             ,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157\n             ,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453\n             ,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997\n             ,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624\n             ,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642\n             ,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660\n             ,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675\n             ,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684\n             ,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694\n             ,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711\n             ,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683\n             ,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733\n             ,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649\n             ,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624\n             ,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630\n             ,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403\n             ,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766\n             ,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784\n             ,3766,3785,3786,3787,3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799\n             ,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816\n             ,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782\n             ,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769\n             ,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793\n             ,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802\n             ,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856\n             ,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843\n             ,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875\n             ,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891\n             ,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903\n             ,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925\n             ,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876\n             ,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940\n             ,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943\n             ,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884\n             ,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932\n             ,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962\n             ,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,2814,2630,2669\n             ,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968\n             ,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957\n             ,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994\n             ,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004\n             ,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957\n             ,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959\n             ,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973\n             ,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013\n             ,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994\n             ,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026\n             ,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039\n             ,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044\n             ,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059\n             ,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046\n             ,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025\n             ,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056\n             ,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080\n             ,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087\n             ,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098\n             ,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109\n             ,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097\n             ,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085\n             ,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102\n             ,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072\n             ,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133\n             ,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123\n             ,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133\n             ,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157\n             ,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166\n             ,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171\n             ,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143\n             ,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179\n             ,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022\n             ,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195\n             ,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200\n             ,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207\n             ,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096\n             ,4209,4213,4113,4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087\n             ,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191\n             ,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132\n             ,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221\n             ,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235\n             ,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243\n             ,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255\n             ,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264\n             ,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220\n             ,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253\n             ,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275\n             ,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286\n             ,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282\n             ,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306\n             ,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238\n             ,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282\n             ,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296\n             ,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315\n             ,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,4322,4326,4327,4325,4324\n             ,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331\n             ,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346\n             ,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321\n             ,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361\n             ,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367\n             ,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374\n             ,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344\n             ,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345\n             ,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391\n             ,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243\n             ,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403\n             ,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298\n             ,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405\n             ,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267\n             ,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315\n             ,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416\n             ,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421\n             ,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431\n             ,4436,4437,4433,4432,4437,4438,4434,4433,4439,4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431\n             ,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451\n             ,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465\n             ,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469\n             ,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475\n             ,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481\n             ,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464\n             ,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490\n             ,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501\n             ,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508\n             ,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515\n             ,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522\n             ,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502\n             ,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536\n             ,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506\n             ,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534\n             ,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529\n             ,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558\n             ,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564\n             ,4568,4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573\n             ,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583\n             ,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579\n             ,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596\n             ,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607\n             ,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621\n             ,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633\n             ,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642\n             ,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653\n             ,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647\n             ,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418\n             ,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621\n             ,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440\n             ,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643\n             ,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519\n             ,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665\n             ,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471\n             ,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525\n             ,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,4506,4496,4495,4542,4546,4527,4526\n             ,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668\n             ,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682\n             ,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693\n             ,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679\n             ,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708\n             ,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702\n             ,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723\n             ,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734\n             ,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676\n             ,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669\n             ,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752\n             ,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751\n             ,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761\n             ,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771\n             ,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759\n             ,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794\n             ,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787\n             ,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808\n             ,4795,4796,4810,4809,4796,4797,4810,4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819\n             ,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832\n             ,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841\n             ,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779\n             ,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849\n             ,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789\n             ,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763\n             ,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864\n             ,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866\n             ,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846\n             ,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876\n             ,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891\n             ,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899\n             ,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900\n             ,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912\n             ,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925\n             ,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940\n             ,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953\n             ,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,4964\n             ,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976\n             ,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992\n             ,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004\n             ,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013\n             ,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984\n             ,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025\n             ,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924\n             ,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031\n             ,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939\n             ,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045\n             ,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956\n             ,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037\n             ,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967\n             ,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057\n             ,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985\n             ,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062\n             ,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007\n             ,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071\n             ,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,5072,5019,5065,5019,5018,5067,5065,5018,5073\n             ,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080\n             ,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093\n             ,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106\n             ,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118\n             ,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120\n             ,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143\n             ,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151\n             ,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163\n             ,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135\n             ,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173\n             ,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076\n             ,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187\n             ,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096\n             ,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185\n             ,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109\n             ,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199\n             ,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122\n             ,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199\n             ,5198,5130,5128,5206,5200,5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138\n             ,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210\n             ,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155\n             ,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211\n             ,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221\n             ,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020\n             ,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167\n             ,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238\n             ,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247\n             ,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260\n             ,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269\n             ,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284\n             ,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293\n             ,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300\n             ,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248\n             ,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301\n             ,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305\n             ,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316\n             ,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,5302,5305,5325\n             ,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338\n             ,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347\n             ,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362\n             ,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371\n             ,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312\n             ,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324\n             ,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367\n             ,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379\n             ,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386\n             ,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398\n             ,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401\n             ,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402\n             ,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425\n             ,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392\n             ,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443\n             ,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449\n             ,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443\n             ,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460\n             ,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425\n             ,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438\n             ,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474\n             ,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476\n             ,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496\n             ,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504\n             ,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479\n             ,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422\n             ,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456\n             ,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457\n             ,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448\n             ,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530\n             ,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483\n             ,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551\n             ,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546\n             ,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563\n             ,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567\n             ,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587\n             ,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547\n             ,5550,5546,5562,5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561\n             ,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591\n             ,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607\n             ,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601\n             ,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590\n             ,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602\n             ,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627\n             ,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601\n             ,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605\n             ,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657\n             ,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672\n             ,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685\n             ,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701\n             ,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672\n             ,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714\n             ,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692\n             ,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735\n             ,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741\n             ,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,5747,5673,5671,5749,5748\n             ,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655\n             ,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745\n             ,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760\n             ,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658\n             ,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695\n             ,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729\n             ,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765\n             ,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783\n             ,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801\n             ,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774\n             ,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790\n             ,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837\n             ,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854\n             ,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862\n             ,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793\n             ,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854\n             ,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823\n             ,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876\n             ,5881,5882,5883,5884,5835,5834,5830,5834,5833,5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800\n             ,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795\n             ,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829\n             ,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806\n             ,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771\n             ,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864\n             ,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885\n             ,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904\n             ,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890\n             ,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918\n             ,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915\n             ,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902\n             ,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887\n             ,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840\n             ,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950\n             ,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965\n             ,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981\n             ,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997\n             ,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013\n             ,5997,5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024\n             ,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035\n             ,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042\n             ,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053\n             ,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062\n             ,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074\n             ,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045\n             ,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013\n             ,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093\n             ,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980\n             ,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101\n             ,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092\n             ,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114\n             ,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941\n             ,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073\n             ,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958\n             ,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024\n             ,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002\n             ,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,6144,6085,6086,6145,6145,6086,6087\n             ,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157\n             ,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169\n             ,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123\n             ,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184\n             ,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081\n             ,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188\n             ,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125\n             ,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969\n             ,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201\n             ,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218\n             ,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229\n             ,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237\n             ,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244\n             ,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256\n             ,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275\n             ,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289\n             ,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305\n             ,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321\n             ,6322,6323,6324,6325,6326,6327,6321,6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332\n             ,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322\n             ,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352\n             ,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362\n             ,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320\n             ,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228\n             ,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386\n             ,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389\n             ,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360\n             ,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348\n             ,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331\n             ,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273\n             ,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383\n             ,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263\n             ,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427\n             ,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429\n             ,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401\n             ,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404\n             ,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,6296\n             ,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322\n             ,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414\n             ,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397\n             ,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445\n             ,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005\n             ,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149\n             ,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113\n             ,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105\n             ,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126\n             ,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125\n             ,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214\n             ,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388\n             ,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405\n             ,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409\n             ,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278\n             ,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408\n             ,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298\n             ,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422\n             ,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,6397,6386,6355,6352,6351,6349,6404,6279,6298\n             ,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222\n             ,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272\n             ,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020\n             ,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457\n             ,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465\n             ,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466\n             ,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497\n             ,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513\n             ,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528\n             ,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506\n             ,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519\n             ,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562\n             ,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557\n             ,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580\n             ,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590\n             ,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597\n             ,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604\n             ,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606\n             ,6497,6496,6498,6487,6544,6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614\n             ,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511\n             ,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553\n             ,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478\n             ,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637\n             ,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628\n             ,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608\n             ,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604\n             ,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639\n             ,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648\n             ,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617\n             ,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664\n             ,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674\n             ,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694\n             ,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631\n             ,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704\n             ,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699\n             ,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705\n             ,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,6601,6678,6677\n             ,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499\n             ,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720\n             ,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735\n             ,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722\n             ,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756\n             ,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733\n             ,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760\n             ,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793\n             ,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796\n             ,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823\n             ,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840\n             ,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856\n             ,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852\n             ,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854\n             ,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872\n             ,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885\n             ,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784\n             ,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925\n             ,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934\n             ,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775\n             ,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961\n             ,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902\n             ,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745\n             ,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980\n             ,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771\n             ,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986\n             ,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801\n             ,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952\n             ,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764\n             ,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784\n             ,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957\n             ,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833\n             ,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962\n             ,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024\n             ,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032\n             ,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048\n             ,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066\n             ,7067,7068,7069,7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082\n             ,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100\n             ,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118\n             ,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133\n             ,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142\n             ,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167\n             ,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184\n             ,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197\n             ,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203\n             ,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891\n             ,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025\n             ,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226\n             ,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239\n             ,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233\n             ,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233\n             ,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040\n             ,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257\n             ,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256\n             ,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,6966,6884,7263,7264,6883\n             ,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937\n             ,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002\n             ,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274\n             ,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279\n             ,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100\n             ,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284\n             ,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285\n             ,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021\n             ,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801\n             ,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289\n             ,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937\n             ,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936\n             ,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941\n             ,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977\n             ,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140\n             ,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297\n             ,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899\n             ,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870\n             ,6907,6935,6814,6905,6905,6814,6813,6806,6776,6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988\n             ,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583\n             ,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623\n             ,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462\n             ,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542\n             ,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669\n             ,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310\n             ,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717\n             ,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924\n             ,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864\n             ,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805\n             ,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913\n             ,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998\n             ,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024\n             ,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313\n             ,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315\n             ,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234\n             ,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084\n             ,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061\n             ,7095,7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091\n             ,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116\n             ,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326\n             ,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146\n             ,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150\n             ,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329\n             ,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177\n             ,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333\n             ,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329\n             ,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281\n             ,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032\n             ,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248\n             ,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248\n             ,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856\n             ,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280\n             ,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234\n             ,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015\n             ,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264\n             ,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,6948,6948,7288,7287,6952,6995,6999\n             ,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804\n             ,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870\n             ,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739\n             ,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920\n             ,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474\n             ,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345\n             ,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361\n             ,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372\n             ,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388\n             ,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391\n             ,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408\n             ,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426\n             ,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439\n             ,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427\n             ,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468\n             ,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482\n             ,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450\n             ,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500\n             ,7501,7502,7499,7503,7504,7505,7506,7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444\n             ,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435\n             ,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526\n             ,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522\n             ,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484\n             ,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393\n             ,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532\n             ,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555\n             ,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465\n             ,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463\n             ,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546\n             ,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554\n             ,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439\n             ,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574\n             ,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534\n             ,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406\n             ,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545\n             ,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463\n             ,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,7504\n             ,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591\n             ,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585\n             ,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621\n             ,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631\n             ,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647\n             ,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657\n             ,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651\n             ,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678\n             ,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411\n             ,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601\n             ,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650\n             ,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708\n             ,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722\n             ,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613\n             ,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736\n             ,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747\n             ,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736\n             ,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623\n             ,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,7759,7676,7675,7645,7760,7758,7761,7760,7645\n             ,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618\n             ,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775\n             ,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661\n             ,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590\n             ,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671\n             ,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617\n             ,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785\n             ,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775\n             ,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783\n             ,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791\n             ,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792\n             ,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724\n             ,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349\n             ,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598\n             ,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519\n             ,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742\n             ,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704\n             ,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399\n             ,7398,7548,7395,7394,7549,7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765\n             ,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506\n             ,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355\n             ,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800\n             ,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811\n             ,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826\n             ,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839\n             ,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859\n             ,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875\n             ,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893\n             ,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903\n             ,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925\n             ,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941\n             ,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959\n             ,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975\n             ,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983\n             ,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994\n             ,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966\n             ,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,7984,7971,7975\n             ,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018\n             ,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035\n             ,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910\n             ,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881\n             ,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033\n             ,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033\n             ,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056\n             ,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020\n             ,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064\n             ,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021\n             ,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884\n             ,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037\n             ,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077\n             ,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814\n             ,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833\n             ,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848\n             ,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854\n             ,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868\n             ,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879\n             ,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888\n             ,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901\n             ,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092\n             ,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093\n             ,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036\n             ,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956\n             ,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985\n             ,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071\n             ,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813\n             ,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993\n             ,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945\n             ,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029\n             ,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057\n             ,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889\n             ,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091\n             ,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829\n             ,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108\n             ,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114\n             ,8113,8115,8116,8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057\n             ,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125\n             ,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780\n             ,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511\n             ,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140\n             ,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132\n             ,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158\n             ,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150\n             ,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177\n             ,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164\n             ,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196\n             ,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188\n             ,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148\n             ,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217\n             ,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211\n             ,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129\n             ,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237\n             ,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251\n             ,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,8245,8244,8220,8220,8244\n             ,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223\n             ,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198\n             ,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159\n             ,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259\n             ,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168\n             ,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238\n             ,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277\n             ,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273\n             ,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303\n             ,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320\n             ,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286\n             ,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343\n             ,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359\n             ,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375\n             ,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393\n             ,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344\n             ,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408\n             ,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370\n             ,8367,8414,8418,8371,8419,8420,8371,8418,8421,8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424\n             ,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395\n             ,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288\n             ,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449\n             ,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356\n             ,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463\n             ,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468\n             ,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362\n             ,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322\n             ,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468\n             ,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458\n             ,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453\n             ,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303\n             ,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494\n             ,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507\n             ,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516\n             ,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424\n             ,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470\n             ,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325\n             ,8310,8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311\n             ,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461\n             ,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510\n             ,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517\n             ,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410\n             ,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290\n             ,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530\n             ,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499\n             ,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480\n             ,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525\n             ,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300\n             ,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439\n             ,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545\n             ,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549\n             ,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551\n             ,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502\n             ,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193\n             ,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258\n             ,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,8264,8263,8203,8201,8184,8185,8183\n             ,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142\n             ,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322\n             ,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350\n             ,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562\n             ,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574\n             ,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582\n             ,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589\n             ,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600\n             ,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580\n             ,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598\n             ,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617\n             ,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626\n             ,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634\n             ,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639\n             ,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646\n             ,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634\n             ,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648\n             ,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665\n             ,8586,8585,8666,8590,8589,8667,8668,8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668\n             ,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618\n             ,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683\n             ,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689\n             ,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587\n             ,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696\n             ,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694\n             ,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652\n             ,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712\n             ,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713\n             ,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730\n             ,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746\n             ,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754\n             ,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767\n             ,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764\n             ,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708\n             ,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783\n             ,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792\n             ,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,8800\n             ,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807\n             ,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823\n             ,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838\n             ,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851\n             ,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812\n             ,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884\n             ,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895\n             ,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907\n             ,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921\n             ,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934\n             ,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936\n             ,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955\n             ,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818\n             ,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665\n             ,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868\n             ,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716\n             ,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680\n             ,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780\n             ,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,8680,8754,8664,8718,8731,8565,8563,8672,8668\n             ,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886\n             ,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817\n             ,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688\n             ,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981\n             ,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942\n             ,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720\n             ,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833\n             ,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709\n             ,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744\n             ,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896\n             ,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011\n             ,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012\n             ,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023\n             ,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905\n             ,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908\n             ,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914\n             ,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929\n             ,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842\n             ,9045,9034,8901,8903,9031,9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055\n             ,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063\n             ,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914\n             ,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014\n             ,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045\n             ,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790\n             ,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004\n             ,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796\n             ,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717\n             ,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098\n             ,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107\n             ,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125\n             ,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140\n             ,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152\n             ,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113\n             ,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171\n             ,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144\n             ,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114\n             ,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,9097,9122,9095\n             ,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182\n             ,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109\n             ,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212\n             ,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207\n             ,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221\n             ,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249\n             ,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270\n             ,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285\n             ,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305\n             ,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316\n             ,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326\n             ,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349\n             ,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365\n             ,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384\n             ,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399\n             ,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412\n             ,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430\n             ,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443\n             ,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450\n             ,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461\n             ,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474\n             ,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488\n             ,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258\n             ,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459\n             ,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338\n             ,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314\n             ,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342\n             ,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510\n             ,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403\n             ,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443\n             ,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444\n             ,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538\n             ,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532\n             ,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561\n             ,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568\n             ,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576\n             ,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566\n             ,9564,9565,9551,9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580\n             ,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583\n             ,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605\n             ,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600\n             ,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631\n             ,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246\n             ,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619\n             ,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605\n             ,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639\n             ,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607\n             ,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603\n             ,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585\n             ,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587\n             ,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609\n             ,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655\n             ,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391\n             ,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659\n             ,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458\n             ,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,9410,9661,9453,9453,9661\n             ,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312\n             ,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316\n             ,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665\n             ,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682\n             ,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482\n             ,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490\n             ,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436\n             ,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556\n             ,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561\n             ,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691\n             ,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446\n             ,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287\n             ,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382\n             ,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473\n             ,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663\n             ,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659\n             ,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414\n             ,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213\n             ,9707,9707,9213,9223,9708,9708,9223,9239,9709,9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517\n             ,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135\n             ,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215\n             ,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689\n             ,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469\n             ,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345\n             ,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717\n             ,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717\n             ,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191\n             ,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166\n             ,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219\n             ,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730\n             ,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164\n             ,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192\n             ,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626\n             ,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609\n             ,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522\n             ,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752\n             ,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754\n             ,9761,9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777\n             ,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790\n             ,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793\n             ,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772\n             ,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820\n             ,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787\n             ,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831\n             ,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771\n             ,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747\n             ,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844\n             ,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862\n             ,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840\n             ,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883\n             ,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905\n             ,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925\n             ,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941\n             ,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957\n             ,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970\n             ,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,9976,9980,9981,9982,9983,9976,9979\n             ,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002\n             ,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016\n             ,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031\n             ,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045\n             ,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053\n             ,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067\n             ,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079\n             ,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015\n             ,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049\n             ,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947\n             ,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117\n             ,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129\n             ,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944\n             ,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930\n             ,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984\n             ,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943\n             ,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970\n             ,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124\n             ,10143,10144,10145,10146,10147,10148,10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005\n             ,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153\n             ,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159\n             ,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974\n             ,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178\n             ,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173\n             ,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193\n             ,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178\n             ,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170\n             ,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216\n             ,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193\n             ,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213\n             ,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221\n             ,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235\n             ,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253\n             ,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250\n             ,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245\n             ,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886\n             ,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897\n             ,9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258\n             ,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264\n             ,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143\n             ,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147\n             ,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161\n             ,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253\n             ,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271\n             ,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232\n             ,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288\n             ,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115\n             ,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152\n             ,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306\n             ,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097\n             ,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093\n             ,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310\n             ,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313\n             ,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945\n             ,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297\n             ,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,10099,9961,9963,10320,10140\n             ,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085\n             ,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126\n             ,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157\n             ,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332\n             ,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221\n             ,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168\n             ,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141\n             ,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122\n             ,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328\n             ,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154\n             ,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341\n             ,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337\n             ,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115\n             ,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300\n             ,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326\n             ,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344\n             ,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154\n             ,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760\n             ,9761,9838,9837,9760,9837,9836,9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845\n             ,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351\n             ,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107\n             ,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075\n             ,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138\n             ,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810\n             ,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358\n             ,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362\n             ,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790\n             ,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855\n             ,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372\n             ,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736\n             ,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858\n             ,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799\n             ,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250\n             ,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215\n             ,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380\n             ,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388\n             ,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,10397,10393\n             ,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384\n             ,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408\n             ,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417\n             ,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396\n             ,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414\n             ,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418\n             ,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439\n             ,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447\n             ,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395\n             ,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442\n             ,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465\n             ,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465\n             ,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467\n             ,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443\n             ,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481\n             ,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487\n             ,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491\n             ,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496\n             ,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,10457,10461\n             ,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453\n             ,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402\n             ,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475\n             ,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516\n             ,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417\n             ,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470\n             ,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528\n             ,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542\n             ,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529\n             ,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549\n             ,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566\n             ,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578\n             ,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581\n             ,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586\n             ,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581\n             ,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531\n             ,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595\n             ,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584\n             ,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,10612,10610\n             ,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619\n             ,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561\n             ,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627\n             ,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638\n             ,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649\n             ,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662\n             ,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672\n             ,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688\n             ,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702\n             ,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710\n             ,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513\n             ,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737\n             ,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751\n             ,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760\n             ,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770\n             ,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762\n             ,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784\n             ,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720\n             ,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,10537,10536\n             ,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754\n             ,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572\n             ,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387\n             ,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799\n             ,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691\n             ,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779\n             ,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654\n             ,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758\n             ,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795\n             ,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809\n             ,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649\n             ,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595\n             ,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768\n             ,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618\n             ,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568\n             ,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490\n             ,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817\n             ,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667\n             ,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,10678,10827\n             ,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686\n             ,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837\n             ,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679\n             ,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706\n             ,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855\n             ,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867\n             ,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854\n             ,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871\n             ,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896\n             ,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905\n             ,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917\n             ,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931\n             ,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944\n             ,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954\n             ,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960\n             ,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948\n             ,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904\n             ,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898\n             ,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,10991,10992\n             ,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004\n             ,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016\n             ,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026\n             ,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042\n             ,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050\n             ,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849\n             ,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005\n             ,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061\n             ,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067\n             ,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076\n             ,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040\n             ,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879\n             ,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996\n             ,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087\n             ,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077\n             ,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983\n             ,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102\n             ,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912\n             ,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,10945,10944\n             ,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095\n             ,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088\n             ,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925\n             ,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960\n             ,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109\n             ,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892\n             ,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846\n             ,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900\n             ,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869\n             ,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120\n             ,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980\n             ,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980\n             ,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856\n             ,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951\n             ,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932\n             ,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058\n             ,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909\n             ,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125\n             ,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,10969,10918\n             ,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142\n             ,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157\n             ,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169\n             ,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183\n             ,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187\n             ,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192\n             ,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201\n             ,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209\n             ,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128\n             ,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152\n             ,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141\n             ,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193\n             ,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189\n             ,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174\n             ,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183\n             ,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225\n             ,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032\n             ,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225\n             ,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,11132,11230\n             ,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202\n             ,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214\n             ,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913\n             ,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192\n             ,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209\n             ,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115\n             ,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512\n             ,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237\n             ,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744\n             ,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661\n             ,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672\n             ,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837\n             ,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262\n             ,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023\n             ,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242\n             ,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253\n             ,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244\n             ,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612\n             ,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,11276,10810\n             ,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778\n             ,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595\n             ,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922\n             ,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119\n             ,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630\n             ,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290\n             ,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807\n             ,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026\n             ,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946\n             ,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805\n             ,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775\n             ,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999\n             ,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762\n             ,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961\n             ,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794\n             ,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725\n             ,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650\n             ,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681\n             ,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,11296,11295,10647,10646,10692,10647\n             ,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648\n             ,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766\n             ,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300\n             ,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309\n             ,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318\n             ,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327\n             ,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329\n             ,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329\n             ,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330\n             ,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348\n             ,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363\n             ,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358\n             ,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379\n             ,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355\n             ,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341\n             ,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366\n             ,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388\n             ,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398\n             ,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11346,11349\n             ,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425\n             ,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422\n             ,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435\n             ,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404\n             ,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413\n             ,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367\n             ,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418\n             ,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355\n             ,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365\n             ,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440\n             ,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411\n             ,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449\n             ,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465\n             ,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462\n             ,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490\n             ,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508\n             ,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526\n             ,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535\n             ,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,11530,11531,11530,11541,11542,11533\n             ,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553\n             ,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554\n             ,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568\n             ,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581\n             ,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581\n             ,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547\n             ,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591\n             ,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467\n             ,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616\n             ,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495\n             ,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543\n             ,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643\n             ,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555\n             ,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653\n             ,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667\n             ,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675\n             ,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683\n             ,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688\n             ,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,11697,11459,11455,11458,11698,11696\n             ,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595\n             ,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608\n             ,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711\n             ,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628\n             ,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719\n             ,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730\n             ,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734\n             ,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743\n             ,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758\n             ,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756\n             ,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657\n             ,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751\n             ,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771\n             ,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782\n             ,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795\n             ,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780\n             ,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713\n             ,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813\n             ,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,11818,11819,11820,11821,11499,11640\n             ,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477\n             ,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519\n             ,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780\n             ,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796\n             ,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475\n             ,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793\n             ,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712\n             ,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707\n             ,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754\n             ,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499\n             ,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630\n             ,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653\n             ,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804\n             ,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786\n             ,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512\n             ,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847\n             ,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831\n             ,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783\n             ,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,11476,11475,11849,11487,11600,11603\n             ,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546\n             ,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874\n             ,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605\n             ,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578\n             ,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611\n             ,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673\n             ,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503\n             ,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539\n             ,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886\n             ,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901\n             ,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913\n             ,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906\n             ,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663\n             ,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736\n             ,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660\n             ,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737\n             ,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846\n             ,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952\n             ,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,11960,11961,11924,11923,11894,11911\n             ,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967\n             ,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468\n             ,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994\n             ,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004\n             ,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022\n             ,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038\n             ,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047\n             ,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054\n             ,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055\n             ,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074\n             ,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071\n             ,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093\n             ,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098\n             ,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061\n             ,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108\n             ,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995\n             ,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126\n             ,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009\n             ,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,12044,12055,12062,12053,12055,12065\n             ,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047\n             ,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077\n             ,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160\n             ,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174\n             ,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182\n             ,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063\n             ,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195\n             ,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204\n             ,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104\n             ,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119\n             ,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218\n             ,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181\n             ,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226\n             ,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233\n             ,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237\n             ,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246\n             ,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263\n             ,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259\n             ,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,11770,11764,12269,12164,12163,12166\n             ,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252\n             ,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231\n             ,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285\n             ,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297\n             ,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309\n             ,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218\n             ,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314\n             ,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323\n             ,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990\n             ,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338\n             ,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282\n             ,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336\n             ,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350\n             ,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349\n             ,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964\n             ,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222\n             ,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148\n             ,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049\n             ,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,12359,12360,12162,11967,11966,11997\n             ,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303\n             ,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321\n             ,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047\n             ,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023\n             ,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311\n             ,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193\n             ,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023\n             ,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283\n             ,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366\n             ,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378\n             ,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074\n             ,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127\n             ,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077\n             ,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102\n             ,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100\n             ,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003\n             ,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395\n             ,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401\n             ,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,12412,12413,12414,12402,12415,12416\n             ,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170\n             ,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239\n             ,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126\n             ,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235\n             ,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360\n             ,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439\n             ,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448\n             ,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354\n             ,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488\n             ,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590\n             ,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596\n             ,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794\n             ,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791\n             ,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865\n             ,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885\n             ,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703\n             ,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839\n             ,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518\n             ,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,12138,12002,11489,11669,12068,12048\n             ,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341\n             ,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976\n             ,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356\n             ,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351\n             ,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335\n             ,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357\n             ,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377\n             ,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212\n             ,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390\n             ,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470\n             ,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488\n             ,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493\n             ,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510\n             ,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504\n             ,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524\n             ,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530\n             ,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545\n             ,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559\n             ,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,12566,12567,12568,12556,12554,12569\n             ,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527\n             ,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582\n             ,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490\n             ,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586\n             ,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505\n             ,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535\n             ,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570\n             ,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514\n             ,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538\n             ,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568\n             ,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470\n             ,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548\n             ,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583\n             ,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583\n             ,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481\n             ,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557\n             ,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476\n             ,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593\n             ,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12609,12608,12613,12614,12612\n             ,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629\n             ,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639\n             ,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615\n             ,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660\n             ,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607\n             ,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685\n             ,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603\n             ,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613\n             ,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628\n             ,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634\n             ,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684\n             ,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620\n             ,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674\n             ,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693\n             ,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696\n             ,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714\n             ,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660\n             ,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687\n             ,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,12711,12707,12706,12712,12718,12720\n             ,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732\n             ,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746\n             ,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755\n             ,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766\n             ,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777\n             ,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742\n             ,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785\n             ,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790\n             ,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749\n             ,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757\n             ,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767\n             ,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787\n             ,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801\n             ,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784\n             ,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810\n             ,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817\n             ,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821\n             ,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773\n             ,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,12794,12740,12757,12800,12755,12833\n             ,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837\n             ,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840\n             ,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850\n             ,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857\n             ,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868\n             ,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874\n             ,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851\n             ,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883\n             ,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869\n             ,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892\n             ,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856\n             ,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901\n             ,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839\n             ,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910\n             ,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898\n             ,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919\n             ,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891\n             ,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928\n             ,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,12914,12915,12933,12932,12915,12916\n             ,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937\n             ,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942\n             ,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930\n             ,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950\n             ,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939\n             ,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876\n             ,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882\n             ,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888\n             ,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964\n             ,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975\n             ,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982\n             ,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962\n             ,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996\n             ,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978\n             ,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005\n             ,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963\n             ,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014\n             ,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981\n             ,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,12985,13022,13023,12989,12987,13023\n             ,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012\n             ,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032\n             ,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021\n             ,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041\n             ,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030\n             ,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050\n             ,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039\n             ,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059\n             ,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048\n             ,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068\n             ,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057\n             ,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077\n             ,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999\n             ,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005\n             ,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078\n        }\n        LayerElementBumpUV: 0 {\n            Version: 101\n            Name: \"map1\"\n            MappingInformationType: \"ByPolygonVertex\"\n            ReferenceInformationType: \"IndexToDirect\"\n            UV: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193\n             ,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971\n             ,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189\n             ,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103\n             ,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103\n             ,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133\n             ,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381\n             ,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197\n             ,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381\n             ,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541\n             ,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657\n             ,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227\n             ,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189\n             ,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343\n             ,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041\n             ,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388\n             ,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262\n             ,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384\n             ,0.313490509986877,0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219\n             ,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384\n             ,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711\n             ,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434\n             ,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704\n             ,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295\n             ,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711\n             ,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919\n             ,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714\n             ,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721\n             ,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457\n             ,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533\n             ,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668\n             ,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609\n             ,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641\n             ,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477\n             ,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952\n             ,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179\n             ,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,0.360970288515091\n             ,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543\n             ,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275\n             ,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265\n             ,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347\n             ,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788\n             ,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292\n             ,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701\n             ,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518\n             ,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106\n             ,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773\n             ,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182\n             ,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717\n             ,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852\n             ,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802\n             ,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301\n             ,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902\n             ,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028\n             ,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265\n             ,0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052\n             ,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881\n             ,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353\n             ,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759\n             ,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876\n             ,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883\n             ,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243\n             ,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019\n             ,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086\n             ,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354\n             ,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458\n             ,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145\n             ,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984\n             ,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776\n             ,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498\n             ,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703\n             ,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005\n             ,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,0.609531939029694\n             ,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514\n             ,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136\n             ,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914\n             ,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291\n             ,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054\n             ,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134\n             ,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648\n             ,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641\n             ,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501\n             ,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514\n             ,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916\n             ,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246\n             ,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727\n             ,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926\n             ,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313\n             ,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945\n             ,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699\n             ,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488\n             ,0.0914957895874977,0.80051189661026,0.0865048691630363,0.763055205345154,0.080446183681488,0.719281196594238\n             ,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427\n             ,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571\n             ,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169\n             ,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773\n             ,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855\n             ,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001\n             ,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759\n             ,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486\n             ,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526\n             ,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024\n             ,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928\n             ,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131\n             ,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178\n             ,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772\n             ,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037\n             ,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327\n             ,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132\n             ,0.607026278972626,0.453061938285828,0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618\n             ,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778\n             ,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092\n             ,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932\n             ,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879\n             ,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267\n             ,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111\n             ,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753\n             ,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917\n             ,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712\n             ,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244\n             ,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589\n             ,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853\n             ,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413\n             ,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591\n             ,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181\n             ,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623\n             ,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,0.449466496706009\n             ,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806\n             ,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914\n             ,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502\n             ,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701\n             ,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449\n             ,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809\n             ,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545\n             ,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124\n             ,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685\n             ,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178\n             ,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955\n             ,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233\n             ,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522\n             ,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788\n             ,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333\n             ,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858\n             ,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182\n             ,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,0.34814915060997\n             ,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692\n             ,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521\n             ,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427\n             ,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427\n             ,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801\n             ,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498\n             ,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394\n             ,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777\n             ,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967\n             ,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378\n             ,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182\n             ,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182\n             ,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182\n             ,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894\n             ,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921\n             ,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591\n             ,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558\n             ,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,0.481752008199692\n             ,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365\n             ,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368\n             ,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543\n             ,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411\n             ,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909\n             ,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001\n             ,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795\n             ,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595\n             ,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929\n             ,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319\n             ,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246\n             ,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587\n             ,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095\n             ,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761\n             ,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699\n             ,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986\n             ,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892\n             ,0.494083315134048,0.483844935894012,0.491256147623062,0.476915508508682,0.489434659481049,0.507938206195831\n             ,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422\n             ,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841\n             ,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562\n             ,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153\n             ,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756\n             ,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266\n             ,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123\n             ,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202\n             ,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361\n             ,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219\n             ,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301\n             ,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226\n             ,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947\n             ,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013\n             ,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182\n             ,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135\n             ,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115\n             ,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,0.439141184091568,0.444102138280869\n             ,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231\n             ,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836\n             ,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449\n             ,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095\n             ,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943\n             ,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909\n             ,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634\n             ,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754\n             ,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949\n             ,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469\n             ,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691\n             ,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411\n             ,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387\n             ,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505\n             ,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175\n             ,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884\n             ,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211\n             ,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,0.454729199409485,0.506186008453369\n             ,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238\n             ,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731\n             ,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672\n             ,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634\n             ,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078\n             ,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088\n             ,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222\n             ,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316\n             ,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045\n             ,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819\n             ,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199\n             ,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759\n             ,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362\n             ,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628\n             ,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116\n             ,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052\n             ,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688\n             ,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,0.328943759202957,0.19858555495739,0.362459033727646\n             ,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177\n             ,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235\n             ,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975\n             ,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201\n             ,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482\n             ,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303\n             ,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773\n             ,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051\n             ,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464\n             ,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396\n             ,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856\n             ,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004\n             ,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612\n             ,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315\n             ,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162\n             ,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302\n             ,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666\n             ,0.507564306259155,0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726\n             ,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349\n             ,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645\n             ,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925\n             ,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608\n             ,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729\n             ,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505\n             ,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904\n             ,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256\n             ,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973\n             ,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215\n             ,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334\n             ,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766\n             ,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093\n             ,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483\n             ,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089\n             ,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503\n             ,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906\n             ,0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111\n             ,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224\n             ,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664\n             ,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219\n             ,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386\n             ,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467\n             ,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715\n             ,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145\n             ,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042\n             ,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589\n             ,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911\n             ,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309\n             ,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737\n             ,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353\n             ,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671\n             ,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867\n             ,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591\n             ,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672\n             ,0.271769434213638,0.385051816701889,0.256161749362946,0.422860234975815,0.246646866202354,0.351017981767654\n             ,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217\n             ,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237\n             ,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014\n             ,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803\n             ,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467\n             ,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254\n             ,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278\n             ,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076\n             ,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065\n             ,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293\n             ,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182\n             ,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982\n             ,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318\n             ,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803\n             ,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098\n             ,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775\n             ,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203\n             ,0.148400202393532,0.419813513755798,0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511\n             ,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461\n             ,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083\n             ,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674\n             ,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391\n             ,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467\n             ,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997\n             ,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567\n             ,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925\n             ,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404\n             ,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035\n             ,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767\n             ,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183\n             ,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859\n             ,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175\n             ,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153\n             ,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906\n             ,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072\n             ,0.425704270601273,0.605306565761566,0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718\n             ,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449\n             ,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115\n             ,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521\n             ,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587\n             ,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331\n             ,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873\n             ,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868\n             ,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152\n             ,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234\n             ,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304\n             ,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734\n             ,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086\n             ,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811\n             ,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376\n             ,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811\n             ,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416\n             ,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084\n             ,0.501217484474182,0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821\n             ,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037\n             ,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985\n             ,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476\n             ,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735\n             ,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619\n             ,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169\n             ,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391\n             ,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975\n             ,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484\n             ,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239\n             ,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107\n             ,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224\n             ,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567\n             ,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654\n             ,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557\n             ,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182\n             ,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,0.476730823516846,0.335748642683029\n             ,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566\n             ,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677\n             ,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529\n             ,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426\n             ,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792\n             ,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639\n             ,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413\n             ,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596\n             ,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899\n             ,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912\n             ,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452\n             ,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238\n             ,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541\n             ,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459\n             ,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182\n             ,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286\n             ,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342\n             ,0.201496973633766,0.577669441699982,0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191\n             ,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598\n             ,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243\n             ,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193\n             ,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442\n             ,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465\n             ,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923\n             ,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469\n             ,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606\n             ,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796\n             ,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159\n             ,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455\n             ,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422\n             ,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185\n             ,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441\n             ,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091\n             ,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489\n             ,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,0.594250917434692\n             ,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379\n             ,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832\n             ,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159\n             ,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268\n             ,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897\n             ,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138\n             ,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538\n             ,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041\n             ,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254\n             ,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863\n             ,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607\n             ,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511\n             ,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412\n             ,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093\n             ,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141\n             ,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647\n             ,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053\n             ,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976\n             ,0.574461042881012,0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185\n             ,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219\n             ,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711\n             ,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802\n             ,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016\n             ,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331\n             ,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385\n             ,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885\n             ,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399\n             ,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011\n             ,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597\n             ,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458\n             ,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544\n             ,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551\n             ,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252\n             ,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125\n             ,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748\n             ,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717\n             ,0.56607973575592,0.232950657606125,0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964\n             ,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863\n             ,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499\n             ,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504\n             ,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682\n             ,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619\n             ,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393\n             ,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586\n             ,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585\n             ,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027\n             ,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854\n             ,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075\n             ,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434\n             ,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353\n             ,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043\n             ,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069\n             ,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817\n             ,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957\n             ,0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531\n             ,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966\n             ,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297\n             ,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925\n             ,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983\n             ,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951\n             ,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038\n             ,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843\n             ,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608\n             ,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003\n             ,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476\n             ,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337\n             ,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737\n             ,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529\n             ,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413\n             ,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061\n             ,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845\n             ,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266\n             ,0.0327511876821518,0.240590929985046,0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031\n             ,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075\n             ,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524\n             ,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636\n             ,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248\n             ,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948\n             ,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729\n             ,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808\n             ,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219\n             ,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047\n             ,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019\n             ,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793\n             ,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262\n             ,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278\n             ,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192\n             ,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869\n             ,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409\n             ,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533\n             ,0.459741652011871,0.338231563568115,0.394522905349731,0.594241797924042,0.388592958450317,0.594755053520203\n             ,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798\n             ,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381\n             ,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707\n             ,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858\n             ,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587\n             ,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284\n             ,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955\n             ,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566\n             ,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552\n             ,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576\n             ,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234\n             ,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924\n             ,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093\n             ,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356\n             ,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098\n             ,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198\n             ,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073\n             ,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,0.227975755929947\n             ,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007\n             ,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338\n             ,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182\n             ,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421\n             ,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517\n             ,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137\n             ,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926\n             ,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832\n             ,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685\n             ,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432\n             ,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594\n             ,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892\n             ,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207\n             ,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182\n             ,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094\n             ,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112\n             ,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616\n             ,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905\n             ,0.387614846229553,0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666\n             ,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828\n             ,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714\n             ,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831\n             ,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868\n             ,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372\n             ,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579\n             ,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204\n             ,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623\n             ,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398\n             ,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665\n             ,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624\n             ,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595\n             ,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064\n             ,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547\n             ,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637\n             ,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637\n             ,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986\n             ,0.571574211120605,0.392384350299835,0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761\n             ,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108\n             ,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704\n             ,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631\n             ,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915\n             ,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931\n             ,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868\n             ,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272\n             ,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953\n             ,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621\n             ,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699\n             ,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921\n             ,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247\n             ,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195\n             ,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297\n             ,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018\n             ,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548\n             ,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472\n             ,0.480641216039658,0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786\n             ,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026\n             ,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289\n             ,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217\n             ,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317\n             ,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798\n             ,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684\n             ,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119\n             ,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895\n             ,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566\n             ,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657\n             ,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648\n             ,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405\n             ,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209\n             ,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182\n             ,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049\n             ,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871\n             ,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564\n             ,0.103776723146439,0.271889269351959,0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182\n             ,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592\n             ,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196\n             ,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287\n             ,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677\n             ,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707\n             ,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964\n             ,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558\n             ,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292\n             ,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369\n             ,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879\n             ,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581\n             ,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516\n             ,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948\n             ,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014\n             ,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099\n             ,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017\n             ,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714\n             ,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938\n             ,0.896463871002197,0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987\n             ,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376\n             ,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365\n             ,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283\n             ,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993\n             ,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462\n             ,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861\n             ,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179\n             ,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091\n             ,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416\n             ,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697\n             ,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603\n             ,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436\n             ,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565\n             ,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863\n             ,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596\n             ,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313\n             ,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162\n             ,0.677415728569031,0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415\n             ,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485\n             ,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717\n             ,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492\n             ,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802\n             ,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126\n             ,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353\n             ,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741\n             ,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369\n             ,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915\n             ,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869\n             ,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941\n             ,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857\n             ,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413\n             ,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263\n             ,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628\n             ,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325\n             ,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516\n             ,0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781\n             ,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433\n             ,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901\n             ,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092\n             ,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909\n             ,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625\n             ,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381\n             ,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694\n             ,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245\n             ,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554\n             ,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991\n             ,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085\n             ,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631\n             ,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987\n             ,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418\n             ,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385\n             ,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794\n             ,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,0.821314513683319\n             ,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365\n             ,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282\n             ,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057\n             ,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401\n             ,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807\n             ,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026\n             ,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284\n             ,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427\n             ,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571\n             ,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626\n             ,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966\n             ,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936\n             ,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784\n             ,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101\n             ,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047\n             ,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735\n             ,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461\n             ,0.492020517587662,0.517554759979248,0.489789307117462,0.521288216114044,0.486277997493744,0.524867177009583\n             ,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928\n             ,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064\n             ,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293\n             ,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593\n             ,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712\n             ,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917\n             ,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072\n             ,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667\n             ,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965\n             ,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874\n             ,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538\n             ,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843\n             ,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794\n             ,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585\n             ,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715\n             ,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085\n             ,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027\n             ,0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929\n             ,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339\n             ,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041\n             ,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593\n             ,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257\n             ,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865\n             ,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218\n             ,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002\n             ,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643\n             ,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033\n             ,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496\n             ,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972\n             ,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797\n             ,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385\n             ,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926\n             ,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969\n             ,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651\n             ,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073\n             ,0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589\n             ,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091\n             ,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849\n             ,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145\n             ,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966\n             ,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813\n             ,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549\n             ,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682\n             ,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345\n             ,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198\n             ,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342\n             ,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952\n             ,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792\n             ,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413\n             ,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689\n             ,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692\n             ,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341\n             ,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413\n             ,0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857\n             ,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229\n             ,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389\n             ,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644\n             ,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318\n             ,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391\n             ,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803\n             ,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125\n             ,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302\n             ,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012\n             ,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892\n             ,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605\n             ,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789\n             ,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325\n             ,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422\n             ,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616\n             ,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237\n             ,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,0.536648154258728\n             ,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332\n             ,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705\n             ,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594\n             ,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323\n             ,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961\n             ,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595\n             ,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625\n             ,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077\n             ,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185\n             ,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946\n             ,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793\n             ,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714\n             ,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911\n             ,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424\n             ,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269\n             ,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858\n             ,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366\n             ,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,0.422893911600113\n             ,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989\n             ,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466\n             ,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798\n             ,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643\n             ,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907\n             ,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301\n             ,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673\n             ,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091\n             ,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096\n             ,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179\n             ,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967\n             ,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601\n             ,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869\n             ,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821\n             ,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166\n             ,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871\n             ,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406\n             ,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231\n             ,0.506956994533539,0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583\n             ,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592\n             ,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502\n             ,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902\n             ,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233\n             ,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754\n             ,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585\n             ,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318\n             ,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581\n             ,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387\n             ,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016\n             ,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677\n             ,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467\n             ,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944\n             ,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835\n             ,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048\n             ,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596\n             ,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516\n             ,0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361\n             ,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801\n             ,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539\n             ,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536\n             ,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619\n             ,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706\n             ,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908\n             ,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959\n             ,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276\n             ,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093\n             ,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414\n             ,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312\n             ,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915\n             ,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001\n             ,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493\n             ,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274\n             ,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205\n             ,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969\n             ,0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574\n             ,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417\n             ,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949\n             ,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531\n             ,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658\n             ,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904\n             ,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587\n             ,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482\n             ,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813\n             ,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414\n             ,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549\n             ,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519\n             ,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291\n             ,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079\n             ,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499\n             ,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704\n             ,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482\n             ,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703\n             ,0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315\n             ,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092\n             ,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115\n             ,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262\n             ,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462\n             ,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838\n             ,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031\n             ,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309\n             ,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671\n             ,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812\n             ,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075\n             ,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934\n             ,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445\n             ,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217\n             ,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428\n             ,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437\n             ,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352\n             ,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,0.630282640457153,0.570110380649567,0.638663291931152\n             ,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883\n             ,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946\n             ,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217\n             ,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594\n             ,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294\n             ,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673\n             ,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989\n             ,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215\n             ,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178\n             ,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971\n             ,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697\n             ,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186\n             ,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828\n             ,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862\n             ,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393\n             ,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785\n             ,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137\n             ,0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802\n             ,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093\n             ,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707\n             ,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216\n             ,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906\n             ,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263\n             ,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312\n             ,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126\n             ,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493\n             ,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588\n             ,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353\n             ,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876\n             ,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205\n             ,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334\n             ,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671\n             ,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507\n             ,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395\n             ,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885\n             ,0.543237447738647,0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617\n             ,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816\n             ,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611\n             ,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188\n             ,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624\n             ,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801\n             ,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591\n             ,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872\n             ,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677\n             ,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859\n             ,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067\n             ,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833\n             ,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241\n             ,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753\n             ,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008\n             ,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242\n             ,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127\n             ,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,0.668446362018585\n             ,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944\n             ,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235\n             ,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293\n             ,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594\n             ,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388\n             ,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182\n             ,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292\n             ,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437\n             ,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775\n             ,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452\n             ,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378\n             ,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825\n             ,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676\n             ,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151\n             ,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392\n             ,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709\n             ,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407\n             ,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,0.602044343948364,0.593871057033539,0.612634897232056\n             ,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681\n             ,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495\n             ,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657\n             ,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869\n             ,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949\n             ,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217\n             ,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853\n             ,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542\n             ,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225\n             ,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512\n             ,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641\n             ,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237\n             ,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414\n             ,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135\n             ,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797\n             ,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228\n             ,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131\n             ,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843\n             ,0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426\n             ,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817\n             ,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721\n             ,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778\n             ,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033\n             ,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737\n             ,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438\n             ,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162\n             ,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053\n             ,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346\n             ,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016\n             ,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476\n             ,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299\n             ,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765\n             ,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195\n             ,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172\n             ,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753\n             ,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,0.525910139083862,0.60409289598465,0.548857510089874\n             ,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373\n             ,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253\n             ,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836\n             ,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636\n             ,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746\n             ,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846\n             ,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831\n             ,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435\n             ,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297\n             ,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074\n             ,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185\n             ,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792\n             ,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639\n             ,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363\n             ,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854\n             ,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912\n             ,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238\n             ,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,0.727306187152863,0.436012208461761,0.721607804298401\n             ,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151\n             ,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379\n             ,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726\n             ,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333\n             ,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193\n             ,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743\n             ,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923\n             ,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113\n             ,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407\n             ,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007\n             ,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574\n             ,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586\n             ,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572\n             ,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898\n             ,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817\n             ,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355\n             ,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363\n             ,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242\n             ,0.526827156543732,0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333\n             ,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207\n             ,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915\n             ,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519\n             ,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544\n             ,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841\n             ,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981\n             ,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856\n             ,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776\n             ,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298\n             ,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747\n             ,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119\n             ,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607\n             ,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449\n             ,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216\n             ,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907\n             ,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098\n             ,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478\n             ,0.754323303699493,0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661\n             ,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789\n             ,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656\n             ,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637\n             ,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916\n             ,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998\n             ,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843\n             ,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073\n             ,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256\n             ,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209\n             ,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557\n             ,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847\n             ,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922\n             ,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766\n             ,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067\n             ,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418\n             ,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945\n             ,0.611816823482513,0.769262611865997,0.623659491539001,0.771583199501038,0.616897940635681,0.768544793128967\n             ,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202\n             ,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237\n             ,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586\n             ,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377\n             ,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614\n             ,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228\n             ,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011\n             ,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935\n             ,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187\n             ,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505\n             ,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701\n             ,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249\n             ,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288\n             ,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198\n             ,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798\n             ,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556\n             ,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672\n             ,0.0403527356684208,0.816201508045197,0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954\n             ,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794\n             ,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053\n             ,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458\n             ,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152\n             ,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255\n             ,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333\n             ,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948\n             ,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407\n             ,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442\n             ,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881\n             ,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077\n             ,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848\n             ,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442\n             ,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047\n             ,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607\n             ,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028\n             ,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524\n             ,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,0.602072775363922\n             ,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928\n             ,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683\n             ,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194\n             ,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352\n             ,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337\n             ,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037\n             ,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379\n             ,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186\n             ,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632\n             ,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003\n             ,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204\n             ,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766\n             ,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587\n             ,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284\n             ,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815\n             ,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766\n             ,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552\n             ,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,0.556499540805817,0.599716067314148\n             ,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985\n             ,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148\n             ,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593\n             ,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416\n             ,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805\n             ,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398\n             ,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396\n             ,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575\n             ,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139\n             ,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971\n             ,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255\n             ,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755\n             ,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232\n             ,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146\n             ,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159\n             ,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612\n             ,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088\n             ,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,0.333364248275757,0.551311314105988\n             ,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593\n             ,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938\n             ,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211\n             ,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063\n             ,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969\n             ,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584\n             ,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382\n             ,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772\n             ,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761\n             ,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706\n             ,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931\n             ,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343\n             ,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879\n             ,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235\n             ,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556\n             ,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634\n             ,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232\n             ,0.678222596645355,0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482\n             ,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615\n             ,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465\n             ,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706\n             ,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678\n             ,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646\n             ,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009\n             ,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419\n             ,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097\n             ,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059\n             ,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836\n             ,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826\n             ,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054\n             ,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426\n             ,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095\n             ,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523\n             ,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181\n             ,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434\n             ,0.790905892848969,0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281\n             ,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853\n             ,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474\n             ,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692\n             ,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164\n             ,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879\n             ,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612\n             ,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325\n             ,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094\n             ,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736\n             ,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396\n             ,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113\n             ,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604\n             ,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125\n             ,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454\n             ,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813\n             ,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208\n             ,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171\n             ,0.543534815311432,0.0322365164756775,0.557037770748138,0.0385730713605881,0.557879507541656,0.0331084579229355\n             ,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259\n             ,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881\n             ,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256\n             ,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668\n             ,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886\n             ,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975\n             ,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967\n             ,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853\n             ,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967\n             ,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896\n             ,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146\n             ,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856\n             ,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337\n             ,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159\n             ,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105\n             ,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332\n             ,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896\n             ,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,0.485119014978409\n             ,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301\n             ,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146\n             ,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211\n             ,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664\n             ,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039\n             ,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856\n             ,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987\n             ,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969\n             ,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574\n             ,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758\n             ,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774\n             ,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024\n             ,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848\n             ,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837\n             ,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803\n             ,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771\n             ,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944\n             ,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512\n             ,0.0149797797203064,0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085\n             ,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472\n             ,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837\n             ,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977\n             ,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173\n             ,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594\n             ,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236\n             ,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413\n             ,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082\n             ,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577\n             ,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986\n             ,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726\n             ,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042\n             ,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941\n             ,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664\n             ,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441\n             ,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802\n             ,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249\n             ,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,0.0117701292037964,0.422150850296021\n             ,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992\n             ,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016\n             ,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007\n             ,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679\n             ,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564\n             ,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346\n             ,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245\n             ,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347\n             ,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546\n             ,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375\n             ,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705\n             ,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375\n             ,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682\n             ,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807\n             ,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807\n             ,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299\n             ,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458\n             ,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629\n             ,0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985\n             ,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827\n             ,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793\n             ,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793\n             ,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776\n             ,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835\n             ,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541\n             ,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364\n             ,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124\n             ,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341\n             ,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271\n             ,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038\n             ,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458\n             ,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082\n             ,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593\n             ,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896\n             ,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774\n             ,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903\n             ,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,0.683692932128906,0.0178875774145126\n             ,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999\n             ,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113\n             ,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504\n             ,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518\n             ,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639\n             ,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756\n             ,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693\n             ,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485\n             ,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158\n             ,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789\n             ,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196\n             ,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822\n             ,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684\n             ,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694\n             ,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229\n             ,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909\n             ,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786\n             ,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413\n             ,0.548435807228088,0.0826816782355309,0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547\n             ,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826\n             ,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975\n             ,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443\n             ,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139\n             ,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445\n             ,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139\n             ,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316\n             ,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195\n             ,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783\n             ,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956\n             ,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314\n             ,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949\n             ,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974\n             ,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385\n             ,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161\n             ,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436\n             ,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499\n             ,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,0.139729559421539\n             ,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231\n             ,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978\n             ,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644\n             ,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793\n             ,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138\n             ,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014\n             ,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102\n             ,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719\n             ,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226\n             ,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041\n             ,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953\n             ,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965\n             ,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809\n             ,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625\n             ,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767\n             ,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802\n             ,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031\n             ,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584\n             ,0.147085726261139,0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234\n             ,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214\n             ,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716\n             ,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162\n             ,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652\n             ,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242\n             ,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848\n             ,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742\n             ,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663\n             ,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214\n             ,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676\n             ,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026\n             ,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281\n             ,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501\n             ,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471\n             ,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744\n             ,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386\n             ,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,0.219694241881371\n             ,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547\n             ,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424\n             ,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412\n             ,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308\n             ,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237\n             ,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932\n             ,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395\n             ,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964\n             ,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765\n             ,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439\n             ,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814\n             ,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781\n             ,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738\n             ,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245\n             ,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754\n             ,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616\n             ,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856\n             ,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783\n             ,0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244\n             ,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314\n             ,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028\n             ,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755\n             ,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493\n             ,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161\n             ,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928\n             ,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969\n             ,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313\n             ,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533\n             ,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923\n             ,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585\n             ,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439\n             ,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072\n             ,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595\n             ,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719\n             ,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834\n             ,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461\n             ,0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035\n             ,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961\n             ,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809\n             ,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044\n             ,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767\n             ,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297\n             ,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319\n             ,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439\n             ,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344\n             ,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911\n             ,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438\n             ,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086\n             ,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652\n             ,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257\n             ,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271\n             ,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974\n             ,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378\n             ,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,0.759102463722229\n             ,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889\n             ,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481\n             ,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344\n             ,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916\n             ,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113\n             ,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035\n             ,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333\n             ,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982\n             ,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093\n             ,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449\n             ,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641\n             ,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698\n             ,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721\n             ,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791\n             ,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639\n             ,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339\n             ,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778\n             ,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,0.627090036869049,0.837572515010834,0.626471817493439\n             ,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483\n             ,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444\n             ,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985\n             ,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788\n             ,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789\n             ,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036\n             ,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774\n             ,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535\n             ,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803\n             ,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633\n             ,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265\n             ,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674\n             ,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813\n             ,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729\n             ,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488\n             ,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261\n             ,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986\n             ,0.934876620769501,0.369551956653595,0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266\n             ,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392\n             ,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022\n             ,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875\n             ,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793\n             ,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439\n             ,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034\n             ,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082\n             ,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703\n             ,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909\n             ,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385\n             ,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175\n             ,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853\n             ,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518\n             ,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391\n             ,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864\n             ,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694\n             ,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134\n             ,0.802964627742767,0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116\n             ,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152\n             ,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803\n             ,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513\n             ,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763\n             ,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533\n             ,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202\n             ,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861\n             ,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423\n             ,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336\n             ,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799\n             ,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267\n             ,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692\n             ,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754\n             ,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939\n             ,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019\n             ,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196\n             ,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577\n             ,0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812\n             ,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097\n             ,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148\n             ,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348\n             ,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046\n             ,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397\n             ,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519\n             ,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738\n             ,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629\n             ,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493\n             ,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662\n             ,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985\n             ,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547\n             ,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436\n             ,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933\n             ,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619\n             ,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053\n             ,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845\n             ,0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887\n             ,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403\n             ,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322\n             ,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825\n             ,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938\n             ,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625\n             ,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483\n             ,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074\n             ,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902\n             ,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819\n             ,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989\n             ,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789\n             ,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682\n             ,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013\n             ,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999\n             ,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776\n             ,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199\n             ,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223\n             ,0.108967132866383,0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653\n             ,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344\n             ,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567\n             ,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856\n             ,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633\n             ,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974\n             ,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752\n             ,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382\n             ,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158\n             ,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737\n             ,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058\n             ,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696\n             ,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204\n             ,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509\n             ,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662\n             ,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322\n             ,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012\n             ,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425\n             ,0.00582033395767212,0.928635358810425,0.0301453322172165,0.945208311080933,0.00582033395767212,0.945208311080933\n             ,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514\n             ,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405\n             ,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388\n             ,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033\n             ,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755\n             ,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412\n             ,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607\n             ,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329\n             ,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503\n             ,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658\n             ,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374\n             ,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612\n             ,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965\n             ,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048\n             ,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022\n             ,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702\n             ,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798\n             ,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871\n             ,0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183\n             ,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026\n             ,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686\n             ,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441\n             ,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027\n             ,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965\n             ,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746\n             ,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264\n             ,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264\n             ,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832\n             ,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264\n             ,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832\n             ,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264\n             ,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832\n             ,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264\n             ,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381\n             ,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173\n             ,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599\n             ,0.122953936457634,0.413901716470718,0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718\n             ,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573\n             ,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716\n             ,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406\n             ,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849\n             ,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505\n             ,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527\n             ,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705\n             ,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317\n             ,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891\n             ,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125\n             ,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664\n             ,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005\n             ,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411\n             ,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646\n             ,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727\n             ,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479\n             ,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036\n             ,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,0.920238852500916\n             ,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329\n             ,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139\n             ,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922\n             ,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667\n             ,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966\n             ,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947\n             ,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397\n             ,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714\n             ,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631\n             ,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703\n             ,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422\n             ,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177\n             ,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827\n             ,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016\n             ,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401\n             ,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739\n             ,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815\n             ,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697\n             ,0.803424000740051,0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604\n             ,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905\n             ,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934\n             ,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085\n             ,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821\n             ,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026\n             ,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963\n             ,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214\n             ,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479\n             ,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957\n             ,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588\n             ,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087\n             ,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243\n             ,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692\n             ,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099\n             ,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532\n             ,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791\n             ,0.950862765312195,0.773497998714447,0.940354406833649,0.773665010929108,0.959785580635071,0.773280024528503\n             ,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335\n             ,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843\n             ,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069\n             ,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397\n             ,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759\n             ,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017\n             ,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887\n             ,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721\n             ,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758\n             ,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103\n             ,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348\n             ,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713\n             ,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427\n             ,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438\n             ,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493\n             ,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631\n             ,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805\n             ,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,0.970409572124481,0.583586990833282\n             ,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393\n             ,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073\n             ,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911\n             ,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105\n             ,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717\n             ,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506\n             ,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356\n             ,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778\n             ,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796\n             ,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739\n             ,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681\n             ,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972\n             ,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302\n             ,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529\n             ,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543\n             ,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943\n             ,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554\n             ,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,0.719281017780304,0.983229696750641\n             ,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085\n             ,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348\n             ,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415\n             ,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949\n             ,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395\n             ,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667\n             ,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384\n             ,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288\n             ,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595\n             ,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471\n             ,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626\n             ,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271\n             ,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193\n             ,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487\n             ,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584\n             ,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934\n             ,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863\n             ,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,0.983235836029053\n             ,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457\n             ,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658\n             ,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033\n             ,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761\n             ,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362\n             ,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545\n             ,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561\n             ,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541\n             ,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054\n             ,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947\n             ,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414\n             ,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457\n             ,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947\n             ,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493\n             ,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898\n             ,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854\n             ,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326\n             ,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623\n             ,0.637106657028198,0.177578389644623,0.620323657989502,0.196973383426666,0.620323657989502,0.177578389644623\n             ,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666\n             ,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623\n             ,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666\n             ,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623\n             ,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666\n             ,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623\n             ,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189\n             ,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189\n             ,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649\n             ,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573\n             ,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189\n             ,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194\n             ,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485\n             ,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065\n             ,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296\n             ,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622\n             ,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585\n             ,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,0.206433475017548\n             ,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296\n             ,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334\n             ,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997\n             ,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294\n             ,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981\n             ,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236\n             ,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779\n             ,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528\n             ,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978\n             ,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236\n             ,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572\n             ,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427\n             ,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366\n             ,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857\n             ,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455\n             ,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427\n             ,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821\n             ,0.683457255363464,0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366\n             ,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464\n             ,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882\n             ,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198\n             ,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284\n             ,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007\n             ,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526\n             ,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646\n             ,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012\n             ,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055\n             ,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399\n             ,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395\n             ,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348\n             ,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178\n             ,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298\n             ,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594\n             ,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656\n             ,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895\n             ,0.881043076515198,0.466186791658401,0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712\n             ,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091\n             ,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506\n             ,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358\n             ,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734\n             ,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673\n             ,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688\n             ,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819\n             ,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173\n             ,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504\n             ,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948\n             ,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933\n             ,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462\n             ,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374\n             ,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687\n             ,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874\n             ,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169\n             ,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942\n             ,0.833344876766205,0.484429806470871,0.847736835479736,0.463386803865433,0.846568882465363,0.464255839586258\n             ,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594\n             ,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039\n             ,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058\n             ,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912\n             ,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176\n             ,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588\n             ,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649\n             ,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423\n             ,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892\n             ,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426\n             ,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066\n             ,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939\n             ,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371\n             ,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027\n             ,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941\n             ,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445\n             ,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186\n             ,0.516026794910431,0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303\n             ,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943\n             ,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244\n             ,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319\n             ,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886\n             ,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785\n             ,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449\n             ,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341\n             ,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361\n             ,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546\n             ,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223\n             ,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809\n             ,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425\n             ,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985\n             ,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512\n             ,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143\n             ,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318\n             ,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,0.206447616219521\n             ,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339\n             ,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727\n             ,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211\n             ,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016\n             ,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147\n             ,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817\n             ,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345\n             ,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594\n             ,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496\n             ,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134\n             ,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641\n             ,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343\n             ,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339\n             ,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869\n             ,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087\n             ,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312\n             ,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043\n             ,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437\n             ,0.0736037790775299,0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556\n             ,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207\n             ,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902\n             ,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219\n             ,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598\n             ,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219\n             ,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572\n             ,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219\n             ,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598\n             ,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219\n             ,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598\n             ,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219\n             ,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943\n             ,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219\n             ,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598\n             ,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489\n             ,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489\n             ,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598\n             ,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,0.0853549689054489\n             ,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489\n             ,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489\n             ,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598\n             ,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426\n             ,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639\n             ,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219\n             ,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099\n             ,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099\n             ,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219\n             ,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099\n             ,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099\n             ,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099\n             ,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099\n             ,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572\n             ,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627\n             ,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769\n             ,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969\n             ,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366\n             ,0.26112961769104,0.530635476112366,0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969\n             ,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774\n             ,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333\n             ,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752\n             ,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912\n             ,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969\n             ,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841\n             ,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954\n             ,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874\n             ,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733\n             ,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373\n             ,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841\n             ,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996\n             ,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782\n             ,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402\n             ,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143\n             ,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996\n             ,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,0.674582898616791\n             ,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704\n             ,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878\n             ,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626\n             ,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689\n             ,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491\n             ,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516\n             ,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756\n             ,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491\n             ,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491\n             ,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491\n             ,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838\n             ,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231\n             ,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903\n             ,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491\n             ,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667\n             ,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039\n             ,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127\n             ,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034\n             ,0.279166221618652,0.709953963756561,0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829\n             ,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034\n             ,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919\n             ,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817\n             ,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376\n             ,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107\n             ,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365\n             ,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394\n             ,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512\n             ,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005\n             ,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762\n             ,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073\n             ,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797\n             ,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996\n             ,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961\n             ,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652\n             ,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371\n             ,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471\n             ,0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855\n             ,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857\n             ,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742\n             ,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824\n             ,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165\n             ,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544\n             ,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159\n             ,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304\n             ,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052\n             ,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465\n             ,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604\n             ,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885\n             ,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418\n             ,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952\n             ,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744\n             ,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787\n             ,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271\n             ,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956\n             ,0.310332953929901,0.122801892459393,0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765\n             ,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174\n             ,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895\n             ,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853\n             ,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923\n             ,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062\n             ,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285\n             ,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984\n             ,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487\n             ,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485\n             ,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345\n             ,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459\n             ,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949\n             ,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115\n             ,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371\n             ,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234\n             ,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749\n             ,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003\n             ,0.118860952556133,0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872\n             ,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677\n             ,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736\n             ,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601\n             ,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488\n             ,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379\n             ,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588\n             ,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744\n             ,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365\n             ,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533\n             ,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111\n             ,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683\n             ,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884\n             ,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132\n             ,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009\n             ,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352\n             ,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487\n             ,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753\n             ,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,0.118029937148094\n             ,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147\n             ,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296\n             ,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276\n             ,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258\n             ,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242\n             ,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328\n             ,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209\n             ,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408\n             ,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444\n             ,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744\n             ,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189\n             ,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348\n             ,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553\n             ,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813\n             ,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817\n             ,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151\n             ,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666\n             ,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,0.409544587135315\n             ,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578\n             ,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315\n             ,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427\n             ,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869\n             ,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045\n             ,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953\n             ,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469\n             ,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199\n             ,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483\n             ,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233\n             ,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983\n             ,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259\n             ,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056\n             ,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114\n             ,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344\n             ,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201\n             ,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787\n             ,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,0.244148418307304,0.376309484243393\n             ,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048\n             ,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726\n             ,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136\n             ,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081\n             ,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525\n             ,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041\n             ,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821\n             ,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141\n             ,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401\n             ,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203\n             ,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048\n             ,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252\n             ,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377\n             ,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443\n             ,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231\n             ,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852\n             ,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422\n             ,0.271062970161438,0.0843436047434807,0.268807142972946,0.0709859803318977,0.255287438631058,0.0861772000789642\n             ,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729\n             ,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628\n             ,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696\n             ,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072\n             ,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508\n             ,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894\n             ,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728\n             ,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823\n             ,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232\n             ,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764\n             ,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132\n             ,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678\n             ,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657\n             ,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221\n             ,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614\n             ,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378\n             ,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101\n             ,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,0.0979962795972824\n             ,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462\n             ,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847\n             ,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485\n             ,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251\n             ,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588\n             ,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106\n             ,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207\n             ,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301\n             ,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591\n             ,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064\n             ,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513\n             ,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792\n             ,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899\n             ,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687\n             ,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716\n             ,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147\n             ,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609\n             ,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629\n             ,0.359014123678207,0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587\n             ,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061\n             ,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602\n             ,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129\n             ,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097\n             ,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496\n             ,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871\n             ,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729\n             ,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304\n             ,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162\n             ,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452\n             ,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711\n             ,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926\n             ,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932\n             ,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262\n             ,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124\n             ,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343\n             ,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411\n             ,0.422037154436111,0.454183876514435,0.141791939735413,0.448351323604584,0.145058676600456,0.413058042526245\n             ,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936\n             ,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803\n             ,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148\n             ,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041\n             ,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949\n             ,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288\n             ,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867\n             ,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632\n             ,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136\n             ,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569\n             ,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929\n             ,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264\n             ,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125\n             ,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113\n             ,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998\n             ,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839\n             ,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925\n             ,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089\n             ,0.791049957275391,0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943\n             ,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606\n             ,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799\n             ,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593\n             ,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519\n             ,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899\n             ,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376\n             ,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953\n             ,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894\n             ,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433\n             ,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309\n             ,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157\n             ,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123\n             ,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547\n             ,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583\n             ,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052\n             ,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226\n             ,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263\n             ,0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374\n             ,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441\n             ,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365\n             ,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827\n             ,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052\n             ,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489\n             ,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326\n             ,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963\n             ,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869\n             ,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591\n             ,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551\n             ,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554\n             ,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624\n             ,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777\n             ,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417\n             ,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217\n             ,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178\n             ,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266\n             ,0.587654650211334,0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256\n             ,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718\n             ,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493\n             ,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411\n             ,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719\n             ,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913\n             ,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167\n             ,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882\n             ,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955\n             ,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649\n             ,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325\n             ,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255\n             ,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884\n             ,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861\n             ,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323\n             ,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561\n             ,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732\n             ,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287\n             ,0.0992880389094353,0.55315625667572,0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153\n             ,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077\n             ,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604\n             ,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723\n             ,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099\n             ,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052\n             ,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661\n             ,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696\n             ,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555\n             ,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121\n             ,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921\n             ,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163\n             ,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999\n             ,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799\n             ,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263\n             ,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706\n             ,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333\n             ,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,0.941240012645721,0.446224510669708,0.945038080215454\n             ,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966\n             ,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089\n             ,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791\n             ,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507\n             ,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741\n             ,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681\n             ,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343\n             ,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353\n             ,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989\n             ,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761\n             ,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865\n             ,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874\n             ,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515\n             ,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253\n             ,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576\n             ,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218\n             ,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552\n             ,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,0.356241673231125,0.772000849246979,0.366978108882904\n             ,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864\n             ,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292\n             ,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755\n             ,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155\n             ,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587\n             ,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601\n             ,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909\n             ,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252\n             ,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265\n             ,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148\n             ,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241\n             ,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952\n             ,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867\n             ,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499\n             ,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557\n             ,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203\n             ,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677\n             ,0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819\n             ,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731\n             ,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794\n             ,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986\n             ,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596\n             ,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101\n             ,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689\n             ,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563\n             ,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283\n             ,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966\n             ,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416\n             ,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492\n             ,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293\n             ,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329\n             ,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928\n             ,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628\n             ,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142\n             ,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711\n             ,0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301\n             ,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019\n             ,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856\n             ,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073\n             ,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582\n             ,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101\n             ,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735\n             ,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171\n             ,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546\n             ,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966\n             ,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847\n             ,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669\n             ,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816\n             ,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271\n             ,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969\n             ,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144\n             ,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889\n             ,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,0.90440434217453\n             ,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953\n             ,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483\n             ,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355\n             ,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553\n             ,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552\n             ,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807\n             ,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127\n             ,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769\n             ,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912\n             ,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362\n             ,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681\n             ,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301\n             ,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735\n             ,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558\n             ,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324\n             ,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062\n             ,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897\n             ,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126\n             ,0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627\n             ,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095\n             ,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698\n             ,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184\n             ,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311\n             ,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807\n             ,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608\n             ,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066\n             ,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631\n             ,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364\n             ,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613\n             ,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637\n             ,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822\n             ,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064\n             ,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049\n             ,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388\n             ,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871\n             ,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525\n             ,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,0.014482319355011,0.828360557556152\n             ,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264\n             ,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542\n             ,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714\n             ,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178\n             ,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679\n             ,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773\n             ,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899\n             ,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856\n             ,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726\n             ,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275\n             ,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331\n             ,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956\n             ,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286\n             ,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902\n             ,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064\n             ,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992\n             ,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046\n             ,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065\n             ,0.0374843291938305,0.953755974769592,0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093\n             ,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771\n             ,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919\n             ,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174\n             ,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231\n             ,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546\n             ,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135\n             ,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486\n             ,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434\n             ,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853\n             ,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516\n             ,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148\n             ,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862\n             ,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159\n             ,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281\n             ,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019\n             ,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685\n             ,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583\n             ,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801\n             ,0.0981541946530342,0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569\n             ,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678\n             ,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398\n             ,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311\n             ,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624\n             ,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072\n             ,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534\n             ,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705\n             ,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058\n             ,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392\n             ,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808\n             ,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182\n             ,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251\n             ,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595\n             ,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462\n             ,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561\n             ,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289\n             ,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591\n             ,0.778886675834656,0.0793051347136498,0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062\n             ,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406\n             ,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422\n             ,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273\n             ,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907\n             ,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748\n             ,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067\n             ,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147\n             ,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061\n             ,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285\n             ,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207\n             ,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035\n             ,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842\n             ,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843\n             ,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121\n             ,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181\n             ,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929\n             ,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205\n             ,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,0.493428647518158,0.950604200363159,0.342332631349564\n             ,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105\n             ,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942\n             ,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006\n             ,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132\n             ,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452\n             ,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178\n             ,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055\n             ,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998\n             ,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961\n             ,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459\n             ,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692\n             ,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107\n             ,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555\n             ,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523\n             ,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965\n             ,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491\n             ,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866\n             ,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,0.0616136789321899\n             ,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065\n             ,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058\n             ,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524\n             ,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933\n             ,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833\n             ,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714\n             ,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415\n             ,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849\n             ,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693\n             ,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786\n             ,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248\n             ,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891\n             ,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762\n             ,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805\n             ,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262\n             ,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801\n             ,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649\n             ,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,0.146303951740265\n             ,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852\n             ,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239\n             ,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486\n             ,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104\n             ,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275\n             ,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915\n             ,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366\n             ,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247\n             ,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994\n             ,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727\n             ,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625\n             ,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211\n             ,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571\n             ,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855\n             ,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936\n             ,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028\n             ,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311\n             ,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853\n             ,0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294\n             ,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689\n             ,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475\n             ,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534\n             ,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296\n             ,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262\n             ,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458\n             ,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576\n             ,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224\n             ,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192\n             ,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659\n             ,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292\n             ,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854\n             ,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667\n             ,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954\n             ,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474\n             ,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496\n             ,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,0.368574023246765\n             ,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918\n             ,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234\n             ,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442\n             ,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323\n             ,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508\n             ,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179\n             ,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663\n             ,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915\n             ,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099\n             ,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953\n             ,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099\n             ,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561\n             ,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142\n             ,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527\n             ,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201\n             ,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436\n             ,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195\n             ,0.864213168621063,0.874509155750275,0.815409004688263,0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517\n             ,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533\n             ,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886\n             ,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494\n             ,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446\n             ,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232\n             ,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218\n             ,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085\n             ,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347\n             ,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928\n             ,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136\n             ,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283\n             ,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479\n             ,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532\n             ,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573\n             ,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361\n             ,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852\n             ,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387\n             ,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,0.754678249359131,0.978725790977478,0.543712019920349\n             ,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391\n             ,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577\n             ,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624\n             ,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683\n             ,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114\n             ,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614\n             ,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099\n             ,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604\n             ,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826\n             ,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798\n             ,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116\n             ,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836\n             ,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289\n             ,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151\n             ,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612\n             ,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483\n             ,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287\n             ,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077\n             ,0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059\n             ,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541\n             ,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552\n             ,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615\n             ,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552\n             ,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438\n             ,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544\n             ,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911\n             ,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575\n             ,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466\n             ,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738\n             ,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771\n             ,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833\n             ,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851\n             ,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844\n             ,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017\n             ,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389\n             ,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,0.596252083778381\n             ,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431\n             ,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248\n             ,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647\n             ,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604\n             ,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743\n             ,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143\n             ,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135\n             ,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105\n             ,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598\n             ,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071\n             ,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036\n             ,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016\n             ,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663\n             ,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761\n             ,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498\n             ,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563\n             ,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107\n             ,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,0.123328268527985\n             ,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257\n             ,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906\n             ,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161\n             ,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579\n             ,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338\n             ,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999\n             ,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601\n             ,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367\n             ,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216\n             ,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667\n             ,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579\n             ,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399\n             ,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943\n             ,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309\n             ,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943\n             ,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837\n             ,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907\n             ,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701\n             ,0.0743808746337891,0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449\n             ,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131\n             ,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004\n             ,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825\n             ,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839\n             ,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162\n             ,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248\n             ,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573\n             ,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173\n             ,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551\n             ,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622\n             ,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514\n             ,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694\n             ,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746\n             ,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895\n             ,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794\n             ,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256\n             ,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982\n             ,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,0.235308602452278,0.0271604433655739\n             ,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528\n             ,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348\n             ,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254\n             ,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999\n             ,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315\n             ,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645\n             ,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786\n             ,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184\n             ,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138\n             ,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643\n             ,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822\n             ,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593\n             ,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705\n             ,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004\n             ,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622\n             ,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445\n             ,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276\n             ,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119\n             ,0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756\n             ,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021\n             ,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918\n             ,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715\n             ,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297\n             ,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861\n             ,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532\n             ,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327\n             ,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726\n             ,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033\n             ,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935\n             ,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712\n             ,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401\n             ,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066\n             ,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684\n             ,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507\n             ,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769\n             ,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025\n             ,0.199742212891579,0.168715670704842,0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788\n             ,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238\n             ,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198\n             ,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442\n             ,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422\n             ,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828\n             ,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674\n             ,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872\n             ,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071\n             ,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138\n             ,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372\n             ,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032\n             ,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568\n             ,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736\n             ,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654\n             ,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647\n             ,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486\n             ,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797\n             ,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,0.196686863899231\n             ,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779\n             ,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774\n             ,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293\n             ,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767\n             ,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605\n             ,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791\n             ,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802\n             ,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394\n             ,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095\n             ,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429\n             ,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594\n             ,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718\n             ,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846\n             ,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739\n             ,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413\n             ,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194\n             ,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045\n             ,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878\n             ,0.808161675930023,0.0944669842720032,0.829814612865448,0.092739924788475,0.836659967899323,0.0951223000884056\n             ,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991\n             ,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075\n             ,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593\n             ,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249\n             ,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553\n             ,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703\n             ,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739\n             ,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957\n             ,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137\n             ,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514\n             ,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253\n             ,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445\n             ,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285\n             ,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507\n             ,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174\n             ,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025\n             ,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016\n             ,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484\n             ,0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946\n             ,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923\n             ,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027\n             ,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142\n             ,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955\n             ,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959\n             ,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588\n             ,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862\n             ,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835\n             ,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371\n             ,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649\n             ,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221\n             ,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001\n             ,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212\n             ,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617\n             ,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852\n             ,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272\n             ,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529\n             ,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,0.719165027141571\n             ,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167\n             ,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402\n             ,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059\n             ,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922\n             ,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845\n             ,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484\n             ,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134\n             ,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946\n             ,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799\n             ,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152\n             ,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846\n             ,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344\n             ,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634\n             ,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712\n             ,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767\n             ,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896\n             ,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513\n             ,0.326107054948807,0.852742612361908,0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824\n             ,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436\n             ,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126\n             ,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681\n             ,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107\n             ,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346\n             ,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474\n             ,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814\n             ,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993\n             ,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485\n             ,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569\n             ,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177\n             ,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631\n             ,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575\n             ,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191\n             ,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654\n             ,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791\n             ,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805\n             ,0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105\n             ,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864\n             ,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353\n             ,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369\n             ,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879\n             ,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128\n             ,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803\n             ,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568\n             ,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728\n             ,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048\n             ,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721\n             ,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887\n             ,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493\n             ,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541\n             ,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654\n             ,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739\n             ,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811\n             ,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126\n             ,0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577\n             ,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316\n             ,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024\n             ,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512\n             ,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663\n             ,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183\n             ,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993\n             ,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874\n             ,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672\n             ,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852\n             ,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213\n             ,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545\n             ,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629\n             ,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769\n             ,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438\n             ,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584\n             ,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542\n             ,0.832485556602478,0.200292333960533,0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885\n             ,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341\n             ,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608\n             ,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764\n             ,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994\n             ,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566\n             ,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395\n             ,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244\n             ,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863\n             ,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421\n             ,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298\n             ,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857\n             ,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562\n             ,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951\n             ,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106\n             ,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525\n             ,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025\n             ,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655\n             ,0.0769496187567711,0.269949793815613,0.0977088510990143,0.236902311444283,0.106580346822739,0.257785648107529\n             ,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196\n             ,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211\n             ,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858\n             ,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601\n             ,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026\n             ,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972\n             ,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517\n             ,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404\n             ,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855\n             ,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465\n             ,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925\n             ,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538\n             ,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066\n             ,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374\n             ,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817\n             ,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534\n             ,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956\n             ,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943\n             ,0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938\n             ,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861\n             ,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834\n             ,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809\n             ,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992\n             ,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746\n             ,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456\n             ,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815\n             ,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706\n             ,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789\n             ,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591\n             ,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756\n             ,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574\n             ,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455\n             ,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948\n             ,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651\n             ,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686\n             ,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111\n             ,0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853\n             ,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524\n             ,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924\n             ,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975\n             ,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757\n             ,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691\n             ,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315\n             ,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324\n             ,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381\n             ,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344\n             ,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401\n             ,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844\n             ,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196\n             ,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418\n             ,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398\n             ,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522\n             ,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685\n             ,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437\n             ,0.133912816643715,0.20319464802742,0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524\n             ,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954\n             ,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344\n             ,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936\n             ,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318\n             ,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407\n             ,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033\n             ,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092\n             ,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791\n             ,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299\n             ,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534\n             ,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933\n             ,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886\n             ,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962\n             ,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948\n             ,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535\n             ,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283\n             ,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526\n             ,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,0.232346341013908,0.0509957745671272\n             ,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807\n             ,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112\n             ,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229\n             ,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593\n             ,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723\n             ,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959\n             ,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508\n             ,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872\n             ,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774\n             ,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491\n             ,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963\n             ,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169\n             ,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043\n             ,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012\n             ,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435\n             ,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189\n             ,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613\n             ,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837\n             ,0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475\n             ,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268\n             ,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307\n             ,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897\n             ,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761\n             ,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134\n             ,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111\n             ,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347\n             ,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226\n             ,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311\n             ,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284\n             ,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513\n             ,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504\n             ,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754\n             ,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277\n             ,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662\n             ,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374\n             ,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521\n             ,0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302\n             ,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995\n             ,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124\n             ,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597\n             ,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387\n             ,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505\n             ,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043\n             ,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425\n             ,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526\n             ,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425\n             ,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296\n             ,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193\n             ,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371\n             ,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927\n             ,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216\n             ,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302\n             ,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857\n             ,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,0.0835410356521606\n             ,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049\n             ,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313\n             ,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937\n             ,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547\n             ,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081\n             ,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316\n             ,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013\n             ,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102\n             ,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062\n             ,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082\n             ,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773\n             ,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134\n             ,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551\n             ,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289\n             ,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298\n             ,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368\n             ,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232\n             ,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244\n             ,0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757\n             ,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896\n             ,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648\n             ,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179\n             ,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826\n             ,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774\n             ,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951\n             ,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127\n             ,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092\n             ,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548\n             ,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717\n             ,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938\n             ,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157\n             ,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339\n             ,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889\n             ,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367\n             ,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367\n             ,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,0.0136640649288893,0.0665248408913612\n             ,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612\n             ,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065\n             ,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065\n             ,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556\n             ,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419\n             ,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017\n             ,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845\n             ,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715\n             ,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089\n             ,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965\n             ,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461\n             ,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831\n             ,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829\n             ,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545\n             ,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177\n             ,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883\n             ,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697\n             ,0.314485341310501,0.406984806060791,0.316858559846878,0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387\n             ,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964\n             ,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025\n             ,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207\n             ,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904\n             ,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587\n             ,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769\n             ,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004\n             ,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594\n             ,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897\n             ,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296\n             ,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728\n             ,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203\n             ,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597\n             ,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413\n             ,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161\n             ,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359\n             ,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516\n             ,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,0.313420087099075\n             ,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709\n             ,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498\n             ,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002\n             ,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516\n             ,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431\n             ,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014\n             ,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501\n             ,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879\n             ,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071\n             ,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488\n             ,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054\n             ,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621\n             ,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581\n             ,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979\n             ,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229\n             ,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853\n             ,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206\n             ,0.482427507638931,0.03264981508255,0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678\n             ,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031\n             ,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425\n             ,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013\n             ,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524\n             ,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011\n             ,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245\n             ,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545\n             ,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196\n             ,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861\n             ,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417\n             ,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953\n             ,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225\n             ,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125\n             ,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099\n             ,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026\n             ,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506\n             ,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488\n             ,0.508201599121094,0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518\n             ,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614\n             ,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507\n             ,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112\n             ,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837\n             ,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136\n             ,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232\n             ,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973\n             ,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623\n             ,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763\n             ,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747\n             ,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272\n             ,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616\n             ,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115\n             ,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589\n             ,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448\n             ,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921\n             ,0.36936816573143,0.356859803199768,0.368447452783585,0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833\n             ,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501\n             ,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896\n             ,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043\n             ,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703\n             ,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337\n             ,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932\n             ,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926\n             ,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719\n             ,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722\n             ,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059\n             ,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724\n             ,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386\n             ,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075\n             ,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982\n             ,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831\n             ,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061\n             ,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882\n             ,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,0.472558706998825\n             ,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371\n             ,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662\n             ,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157\n             ,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488\n             ,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213\n             ,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228\n             ,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769\n             ,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445\n             ,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987\n             ,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297\n             ,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301\n             ,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968\n             ,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383\n             ,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316\n             ,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728\n             ,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934\n             ,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062\n             ,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,0.421510130167007\n             ,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138\n             ,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685\n             ,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951\n             ,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986\n             ,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596\n             ,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243\n             ,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912\n             ,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292\n             ,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215\n             ,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973\n             ,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905\n             ,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943\n             ,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512\n             ,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145\n             ,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688\n             ,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501\n             ,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606\n             ,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063\n             ,0.550254046916962,0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256\n             ,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822\n             ,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009\n             ,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872\n             ,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118\n             ,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307\n             ,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597\n             ,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128\n             ,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805\n             ,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793\n             ,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287\n             ,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942\n             ,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822\n             ,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087\n             ,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613\n             ,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501\n             ,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905\n             ,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853\n             ,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,0.0392846465110779\n             ,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323\n             ,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303\n             ,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236\n             ,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301\n             ,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276\n             ,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524\n             ,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811\n             ,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015\n             ,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329\n             ,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264\n             ,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334\n             ,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247\n             ,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133\n             ,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948\n             ,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682\n             ,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794\n             ,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389\n             ,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623\n             ,0.49083137512207,0.0473983287811279,0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202\n             ,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392\n             ,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182\n             ,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062\n             ,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643\n             ,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692\n             ,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449\n             ,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011\n             ,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257\n             ,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773\n             ,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833\n             ,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563\n             ,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795\n             ,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609\n             ,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502\n             ,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668\n             ,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125\n             ,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896\n             ,0.4264976978302,0.349507212638855,0.451796531677246,0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252\n             ,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556\n             ,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646\n             ,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215\n             ,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107\n             ,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446\n             ,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764\n             ,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714\n             ,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638\n             ,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395\n             ,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909\n             ,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372\n             ,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249\n             ,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264\n             ,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609\n             ,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581\n             ,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568\n             ,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235\n             ,0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337\n             ,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889\n             ,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665\n             ,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375\n             ,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789\n             ,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837\n             ,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324\n             ,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636\n             ,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212\n             ,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615\n             ,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548\n             ,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098\n             ,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755\n             ,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362\n             ,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667\n             ,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625\n             ,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563\n             ,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,0.780230820178986\n             ,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454\n             ,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234\n             ,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135\n             ,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538\n             ,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973\n             ,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574\n             ,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557\n             ,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968\n             ,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793\n             ,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841\n             ,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715\n             ,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775\n             ,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791\n             ,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083\n             ,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772\n             ,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374\n             ,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895\n             ,0.664426863193512,0.451735496520996,0.781740605831146,0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182\n             ,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671\n             ,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875\n             ,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996\n             ,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791\n             ,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095\n             ,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036\n             ,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128\n             ,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326\n             ,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032\n             ,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638\n             ,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726\n             ,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397\n             ,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745\n             ,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954\n             ,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098\n             ,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755\n             ,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526\n             ,0.486700624227524,0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725\n             ,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627\n             ,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157\n             ,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655\n             ,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994\n             ,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179\n             ,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507\n             ,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814\n             ,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901\n             ,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877\n             ,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012\n             ,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375\n             ,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355\n             ,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281\n             ,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865\n             ,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833\n             ,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743\n             ,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768\n             ,0.386751741170883,0.617895185947418,0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288\n             ,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473\n             ,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659\n             ,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292\n             ,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964\n             ,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133\n             ,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201\n             ,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293\n             ,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013\n             ,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646\n             ,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588\n             ,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165\n             ,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865\n             ,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227\n             ,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106\n             ,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642\n             ,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765\n             ,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,0.90181291103363,0.50802755355835\n             ,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183\n             ,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227\n             ,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086\n             ,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432\n             ,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513\n             ,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312\n             ,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633\n             ,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022\n             ,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552\n             ,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808\n             ,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386\n             ,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944\n             ,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297\n             ,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484\n             ,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453\n             ,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383\n             ,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065\n             ,0.637537717819214,0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802\n             ,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354\n             ,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872\n             ,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222\n             ,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638\n             ,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807\n             ,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524\n             ,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323\n             ,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165\n             ,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507\n             ,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951\n             ,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215\n             ,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087\n             ,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366\n             ,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399\n             ,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123\n             ,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671\n             ,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,0.564278662204742\n             ,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543\n             ,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744\n             ,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924\n             ,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052\n             ,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235\n             ,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116\n             ,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443\n             ,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149\n             ,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659\n             ,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132\n             ,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731\n             ,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403\n             ,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649\n             ,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019\n             ,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981\n             ,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601\n             ,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013\n             ,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,0.561667025089264,0.981199622154236\n             ,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288\n             ,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623\n             ,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255\n             ,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904\n             ,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255\n             ,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155\n             ,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439\n             ,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626\n             ,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971\n             ,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574\n             ,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566\n             ,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699\n             ,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431\n             ,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864\n             ,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974\n             ,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008\n             ,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,0.991807043552399\n             ,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344\n             ,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207\n             ,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793\n             ,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829\n             ,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166\n             ,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062\n             ,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816\n             ,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186\n             ,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449\n             ,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567\n             ,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317\n             ,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936\n             ,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294\n             ,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198\n             ,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379\n             ,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029\n             ,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272\n             ,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,0.434852063655853\n             ,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239\n             ,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279\n             ,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657\n             ,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565\n             ,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876\n             ,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016\n             ,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383\n             ,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222\n             ,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827\n             ,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765\n             ,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324\n             ,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245\n             ,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762\n             ,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984\n             ,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822\n             ,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933\n             ,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329\n             ,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999\n             ,0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249\n             ,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244\n             ,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762\n             ,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181\n             ,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814\n             ,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899\n             ,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994\n             ,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935\n             ,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381\n             ,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414\n             ,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813\n             ,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488\n             ,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838\n             ,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535\n             ,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539\n             ,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418\n             ,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368\n             ,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535\n             ,0.816003322601318,0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638\n             ,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751\n             ,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699\n             ,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256\n             ,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667\n             ,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938\n             ,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555\n             ,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219\n             ,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725\n             ,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928\n             ,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241\n             ,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347\n             ,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236\n             ,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984\n             ,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482\n             ,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451\n             ,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037\n             ,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,0.830957114696503,0.422840178012848\n             ,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874\n             ,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241\n             ,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053\n             ,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048\n             ,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005\n             ,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648\n             ,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505\n             ,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419\n             ,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017\n             ,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875\n             ,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739\n             ,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724\n             ,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275\n             ,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712\n             ,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713\n             ,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484\n             ,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654\n             ,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,0.143848940730095\n             ,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804\n             ,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559\n             ,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442\n             ,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595\n             ,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341\n             ,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495\n             ,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061\n             ,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041\n             ,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763\n             ,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135\n             ,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448\n             ,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895\n             ,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482\n             ,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856\n             ,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024\n             ,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903\n             ,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879\n             ,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251\n             ,0.898496329784393,0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624\n             ,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211\n             ,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012\n             ,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039\n             ,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086\n             ,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414\n             ,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186\n             ,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828\n             ,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931\n             ,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358\n             ,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491\n             ,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676\n             ,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334\n             ,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113\n             ,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744\n             ,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392\n             ,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881\n             ,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118\n             ,0.331734776496887,0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168\n             ,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905\n             ,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233\n             ,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275\n             ,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514\n             ,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809\n             ,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269\n             ,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484\n             ,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088\n             ,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686\n             ,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914\n             ,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958\n             ,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479\n             ,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966\n             ,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899\n             ,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556\n             ,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412\n             ,0.59907454252243,0.0290243290364742,0.594756245613098,0.0432147420942783,0.550425350666046,0.0373775735497475\n             ,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419\n             ,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893\n             ,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354\n             ,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738\n             ,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304\n             ,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426\n             ,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402\n             ,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334\n             ,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378\n             ,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619\n             ,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026\n             ,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366\n             ,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826\n             ,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357\n             ,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836\n             ,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441\n             ,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111\n             ,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,0.933514356613159,0.0762230306863785\n             ,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583\n             ,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171\n             ,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271\n             ,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103\n             ,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028\n             ,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809\n             ,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838\n             ,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167\n             ,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973\n             ,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605\n             ,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757\n             ,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644\n             ,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991\n             ,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826\n             ,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304\n             ,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994\n             ,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539\n             ,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,0.816710710525513,0.759240210056305\n             ,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558\n             ,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897\n             ,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019\n             ,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033\n             ,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759\n             ,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717\n             ,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223\n             ,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239\n             ,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526\n             ,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592\n             ,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483\n             ,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408\n             ,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798\n             ,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779\n             ,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459\n             ,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879\n             ,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246\n             ,0.591059923171997,0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749\n             ,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677\n             ,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534\n             ,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169\n             ,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977\n             ,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994\n             ,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486\n             ,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222\n             ,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327\n             ,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734\n             ,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447\n             ,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204\n             ,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566\n             ,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782\n             ,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563\n             ,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338\n             ,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982\n             ,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,0.714633941650391,0.916672646999359\n             ,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281\n             ,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264\n             ,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557\n             ,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158\n             ,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866\n             ,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563\n             ,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039\n             ,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088\n             ,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078\n             ,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883\n             ,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169\n             ,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132\n             ,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401\n             ,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909\n             ,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108\n             ,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753\n             ,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,0.974531888961792\n             ,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138\n             ,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187\n             ,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589\n             ,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079\n             ,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315\n             ,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202\n             ,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154\n             ,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924\n             ,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005\n             ,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234\n             ,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851\n             ,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654\n             ,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271\n             ,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883\n             ,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445\n             ,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397\n             ,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582\n             ,0.577414393424988,0.962452411651611,0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158\n             ,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839\n             ,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607\n             ,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543\n             ,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253\n             ,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672\n             ,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351\n             ,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905\n             ,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019\n             ,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227\n             ,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747\n             ,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231\n             ,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234\n             ,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691\n             ,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226\n             ,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641\n             ,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998\n             ,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264\n             ,0.963677108287811,0.872271716594696,0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812\n             ,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783\n             ,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703\n             ,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797\n             ,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947\n             ,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521\n             ,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391\n             ,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042\n             ,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844\n             ,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766\n             ,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196\n             ,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484\n             ,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111\n             ,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917\n             ,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615\n             ,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737\n             ,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799\n             ,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392\n             ,0.978221297264099,0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258\n             ,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409\n             ,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535\n             ,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536\n             ,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968\n             ,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125\n             ,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141\n             ,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401\n             ,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337\n             ,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667\n             ,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989\n             ,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783\n             ,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194\n             ,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954\n             ,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127\n             ,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776\n             ,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616\n             ,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,0.621363580226898,0.682616829872131\n             ,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774\n             ,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151\n             ,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519\n             ,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157\n             ,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333\n             ,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347\n             ,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901\n             ,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676\n             ,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631\n             ,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012\n             ,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048\n             ,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284\n             ,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556\n             ,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512\n             ,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865\n             ,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786\n             ,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893\n             ,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663\n             ,0.105796456336975,0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037\n             ,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948\n             ,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325\n             ,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938\n             ,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369\n             ,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886\n             ,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355\n             ,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094\n             ,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082\n             ,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589\n             ,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694\n             ,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186\n             ,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473\n             ,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644\n             ,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226\n             ,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226\n             ,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872\n             ,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478\n             ,0.292685657739639,0.292649954557419,0.269282728433609,0.292957901954651,0.269526928663254,0.0986065044999123\n             ,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705\n             ,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117\n             ,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519\n             ,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744\n             ,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426\n             ,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368\n             ,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933\n             ,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878\n             ,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548\n             ,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617\n             ,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808\n             ,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183\n             ,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749\n             ,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254\n             ,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987\n             ,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163\n             ,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436\n             ,0.189350441098213,0.114026740193367,0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426\n             ,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571\n             ,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692\n             ,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373\n             ,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542\n             ,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883\n             ,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455\n             ,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385\n             ,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697\n             ,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125\n             ,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356\n             ,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726\n             ,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193\n             ,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982\n             ,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806\n             ,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181\n             ,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542\n             ,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426\n             ,0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398\n             ,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404\n             ,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648\n             ,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877\n             ,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277\n             ,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489\n             ,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004\n             ,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905\n             ,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782\n             ,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988\n             ,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638\n             ,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268\n             ,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245\n             ,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917\n             ,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788\n             ,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177\n             ,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989\n             ,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129\n             ,0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108\n             ,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438\n             ,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261\n             ,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425\n             ,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412\n             ,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362\n             ,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276\n             ,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656\n             ,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407\n             ,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997\n             ,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754\n             ,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773\n             ,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882\n             ,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449\n             ,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259\n             ,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101\n             ,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301\n             ,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,0.727285981178284\n             ,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786\n             ,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446\n             ,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213\n             ,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925\n             ,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267\n             ,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179\n             ,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427\n             ,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392\n             ,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329\n             ,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498\n             ,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209\n             ,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924\n             ,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917\n             ,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705\n             ,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912\n             ,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832\n             ,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272\n             ,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,0.139332994818687\n             ,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374\n             ,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107\n             ,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279\n             ,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471\n             ,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413\n             ,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697\n             ,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824\n             ,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088\n             ,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603\n             ,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676\n             ,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576\n             ,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628\n             ,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526\n             ,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321\n             ,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102\n             ,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627\n             ,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941\n             ,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915\n             ,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,0.157439410686493,0.711707234382629\n             ,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664\n             ,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005\n             ,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458\n             ,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158\n             ,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166\n             ,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454\n             ,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145\n             ,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233\n             ,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521\n             ,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594\n             ,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598\n             ,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266\n             ,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322\n             ,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931\n             ,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497\n             ,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938\n             ,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938\n             ,0.955354988574982,0.376253008842468,0.963590979576111,0.376287996768951,0.955453991889954,0.500213027000427\n             ,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006\n             ,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838\n             ,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933\n             ,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553\n             ,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188\n             ,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537\n             ,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347\n             ,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683\n             ,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111\n             ,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242\n             ,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658\n             ,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144\n             ,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213\n             ,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323\n             ,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323\n             ,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294\n             ,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626\n             ,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544\n             ,0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168\n             ,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645\n             ,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757\n             ,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956\n             ,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759\n             ,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203\n             ,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042\n             ,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595\n             ,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542\n             ,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974\n             ,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268\n             ,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205\n             ,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577\n             ,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812\n             ,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989\n             ,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721\n             ,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015\n             ,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,0.36667200922966\n             ,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842\n             ,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342\n             ,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754\n             ,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837\n             ,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583\n             ,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271\n             ,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587\n             ,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175\n             ,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402\n             ,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994\n             ,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989\n             ,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104\n             ,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712\n             ,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974\n             ,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782\n             ,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666\n             ,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114\n             ,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187\n             ,0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401\n             ,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255\n             ,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059\n             ,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303\n             ,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123\n             ,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032\n             ,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452\n             ,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445\n             ,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429\n             ,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387\n             ,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709\n             ,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402\n             ,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109\n             ,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442\n             ,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282\n             ,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408\n             ,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517\n             ,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282\n             ,0.845073997974396,0.622668981552124,0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298\n             ,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094\n             ,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286\n             ,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411\n             ,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928\n             ,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935\n             ,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314\n             ,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067\n             ,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521\n             ,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277\n             ,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192\n             ,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546\n             ,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193\n             ,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172\n             ,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141\n             ,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388\n             ,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542\n             ,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044\n             ,0.743863999843597,0.51264899969101,0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154\n             ,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909\n             ,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984\n             ,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899\n             ,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105\n             ,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976\n             ,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998\n             ,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619\n             ,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695\n             ,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007\n             ,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931\n             ,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564\n             ,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033\n             ,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737\n             ,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931\n             ,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299\n             ,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065\n             ,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384\n             ,0.595848023891449,0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599\n             ,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592\n             ,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483\n             ,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401\n             ,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512\n             ,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582\n             ,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951\n             ,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396\n             ,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481\n             ,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237\n             ,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964\n             ,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704\n             ,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749\n             ,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684\n             ,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208\n             ,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742\n             ,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174\n             ,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281\n             ,0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759\n             ,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723\n             ,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376\n             ,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672\n             ,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755\n             ,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683\n             ,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141\n             ,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971\n             ,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269\n             ,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896\n             ,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775\n             ,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464\n             ,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984\n             ,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764\n             ,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039\n             ,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961\n             ,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101\n             ,0.408055007457733,0.415430009365082,0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941\n             ,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719\n             ,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322\n             ,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111\n             ,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626\n             ,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244\n             ,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901\n             ,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061\n             ,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729\n             ,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927\n             ,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316\n             ,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683\n             ,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114\n             ,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406\n             ,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311\n             ,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899\n             ,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796\n             ,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,0.726795017719269\n             ,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149\n             ,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808\n             ,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951\n             ,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033\n             ,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387\n             ,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298\n             ,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363\n             ,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417\n             ,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526\n             ,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964\n             ,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122\n             ,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241\n             ,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446\n             ,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312\n             ,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081\n             ,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239\n             ,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273\n             ,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,0.835596978664398\n             ,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875\n             ,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522\n             ,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939\n             ,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865\n             ,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754\n             ,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952\n             ,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264\n             ,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314\n             ,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103\n             ,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874\n             ,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323\n             ,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667\n             ,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542\n             ,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059\n             ,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305\n             ,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476\n             ,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308\n             ,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155\n             ,0.768315017223358,0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553\n             ,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834\n             ,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218\n             ,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777\n             ,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467\n             ,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336\n             ,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919\n             ,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877\n             ,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104\n             ,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976\n             ,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078\n             ,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564\n             ,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191\n             ,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626\n             ,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076\n             ,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927\n             ,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084\n             ,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,0.759728014469147\n             ,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355\n             ,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372\n             ,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758\n             ,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788\n             ,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658\n             ,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692\n             ,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661\n             ,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161\n             ,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619\n             ,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949\n             ,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371\n             ,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718\n             ,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849\n             ,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685\n             ,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787\n             ,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819\n             ,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409\n             ,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148\n             ,0.171581521630287,0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676\n             ,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513\n             ,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359\n             ,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079\n             ,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194\n             ,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539\n             ,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625\n             ,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695\n             ,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744\n             ,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488\n             ,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071\n             ,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704\n             ,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242\n             ,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492\n             ,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816\n             ,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732\n             ,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908\n             ,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763\n             ,0.162967994809151,0.113466002047062,0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327\n             ,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646\n             ,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514\n             ,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084\n             ,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386\n             ,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101\n             ,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385\n             ,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428\n             ,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987\n             ,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883\n             ,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484\n             ,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373\n             ,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658\n             ,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462\n             ,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587\n             ,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865\n             ,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358\n             ,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328\n             ,0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711\n             ,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338\n             ,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066\n             ,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667\n             ,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168\n             ,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753\n             ,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501\n             ,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244\n             ,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687\n             ,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246\n             ,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578\n             ,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489\n             ,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344\n             ,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083\n             ,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861\n             ,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144\n             ,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115\n             ,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,0.698300063610077,0.684771537780762\n             ,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515\n             ,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856\n             ,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278\n             ,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699\n             ,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249\n             ,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716\n             ,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617\n             ,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275\n             ,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222\n             ,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765\n             ,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668\n             ,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356\n             ,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064\n             ,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829\n             ,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163\n             ,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914\n             ,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919\n             ,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,0.199659392237663\n             ,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282\n             ,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348\n             ,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092\n             ,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691\n             ,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254\n             ,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426\n             ,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086\n             ,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411\n             ,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477\n             ,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754\n             ,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387\n             ,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886\n             ,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322\n             ,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393\n             ,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323\n             ,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383\n             ,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805\n             ,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,0.313732326030731\n             ,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783\n             ,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745\n             ,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548\n             ,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141\n             ,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856\n             ,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393\n             ,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819\n             ,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549\n             ,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264\n             ,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259\n             ,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728\n             ,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662\n             ,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994\n             ,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397\n             ,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743\n             ,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432\n             ,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912\n             ,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,0.583523273468018,0.458871752023697\n             ,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586\n             ,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695\n             ,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428\n             ,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084\n             ,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141\n             ,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187\n             ,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701\n             ,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708\n             ,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792\n             ,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552\n             ,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483\n             ,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544\n             ,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508\n             ,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097\n             ,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012\n             ,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559\n             ,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001\n             ,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,0.476934969425201\n             ,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676\n             ,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318\n             ,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923\n             ,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571\n             ,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863\n             ,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219\n             ,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546\n             ,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389\n             ,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969\n             ,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588\n             ,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622\n             ,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012\n             ,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577\n             ,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138\n             ,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649\n             ,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702\n             ,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322\n             ,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,0.441692322492599,0.315481513738632\n             ,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957\n             ,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658\n             ,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431\n             ,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986\n             ,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328\n             ,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529\n             ,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019\n             ,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869\n             ,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414\n             ,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775\n             ,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282\n             ,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705\n             ,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856\n             ,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905\n             ,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138\n             ,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005\n             ,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709\n             ,0.507110118865967,0.265018463134766,0.501041769981384,0.297658920288086,0.484085887670517,0.325823694467545\n             ,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871\n             ,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635\n             ,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287\n             ,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739\n             ,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893\n             ,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312\n             ,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956\n             ,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734\n             ,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363\n             ,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742\n             ,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213\n             ,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713\n             ,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885\n             ,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799\n             ,0.417306035757065,0.26596075296402\n            UVIndex: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32\n             ,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23\n             ,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62\n             ,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81\n             ,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100\n             ,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110\n             ,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124\n             ,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133\n             ,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149\n             ,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151\n             ,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177\n             ,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193\n             ,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199\n             ,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206\n             ,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211\n             ,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225\n             ,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239\n             ,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246\n             ,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,249,254,137,254,249,138,255,256,257\n             ,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243\n             ,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197\n             ,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185\n             ,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275\n             ,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278\n             ,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225\n             ,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139\n             ,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223\n             ,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293\n             ,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139\n             ,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89\n             ,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320\n             ,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333\n             ,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348\n             ,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363\n             ,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375\n             ,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389\n             ,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408\n             ,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,421,418,416,402,401,419,422,399,402,423\n             ,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402\n             ,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426\n             ,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455\n             ,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472\n             ,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479\n             ,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500\n             ,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507\n             ,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527\n             ,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540\n             ,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549\n             ,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555\n             ,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322\n             ,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567\n             ,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372\n             ,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592\n             ,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620\n             ,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609\n             ,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640\n             ,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,649,650,651,380,379,649,648,389,388,652\n             ,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665\n             ,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685\n             ,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704\n             ,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710\n             ,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703\n             ,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736\n             ,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750\n             ,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762\n             ,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436\n             ,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796\n             ,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808\n             ,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826\n             ,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838\n             ,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699\n             ,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783\n             ,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530\n             ,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890\n             ,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777\n             ,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,912,913,912,914,860,861,913,915,914,912\n             ,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904\n             ,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940\n             ,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788\n             ,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970\n             ,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986\n             ,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992\n             ,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980\n             ,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010\n             ,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017\n             ,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026\n             ,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035\n             ,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918\n             ,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050\n             ,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896\n             ,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022\n             ,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729\n             ,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067\n             ,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039\n             ,1075,1076,1077,1078,1079,1080,1077,1080,1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931\n             ,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930\n             ,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031\n             ,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577\n             ,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030\n             ,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091\n             ,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975\n             ,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112\n             ,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811\n             ,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813\n             ,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126\n             ,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138\n             ,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144\n             ,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147\n             ,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159\n             ,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168\n             ,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898\n             ,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180\n             ,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900\n             ,1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187\n             ,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012\n             ,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059\n             ,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861\n             ,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204\n             ,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164\n             ,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216\n             ,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185\n             ,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224\n             ,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230\n             ,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251\n             ,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262\n             ,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267\n             ,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043\n             ,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274\n             ,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286\n             ,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295\n             ,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300\n             ,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,1307,1306,1303,1302,1274\n             ,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314\n             ,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305\n             ,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312\n             ,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334\n             ,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337\n             ,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346\n             ,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348\n             ,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358\n             ,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236\n             ,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374\n             ,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380\n             ,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383\n             ,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305\n             ,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274\n             ,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391\n             ,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400\n             ,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377\n             ,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414\n             ,1411,1400,1401,1400,1411,1410,1402,1415,1416,1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258\n             ,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423\n             ,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357\n             ,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352\n             ,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200\n             ,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335\n             ,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405\n             ,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423\n             ,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338\n             ,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432\n             ,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375\n             ,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440\n             ,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444\n             ,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456\n             ,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466\n             ,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476\n             ,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446\n             ,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477\n             ,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502\n             ,1503,1504,1503,1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507\n             ,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180\n             ,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027\n             ,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519\n             ,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277\n             ,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395\n             ,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995\n             ,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533\n             ,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542\n             ,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523\n             ,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552\n             ,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558\n             ,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563\n             ,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565\n             ,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574\n             ,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353\n             ,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588\n             ,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589\n             ,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,615,1462,1597\n             ,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603\n             ,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611\n             ,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614\n             ,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620\n             ,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627\n             ,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629\n             ,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631\n             ,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403\n             ,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639\n             ,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643\n             ,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891\n             ,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650\n             ,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976\n             ,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542\n             ,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665\n             ,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653\n             ,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840\n             ,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081\n             ,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637\n             ,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752\n             ,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952\n             ,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461\n             ,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633\n             ,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313\n             ,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818\n             ,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979\n             ,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691\n             ,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689\n             ,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922\n             ,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710\n             ,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700\n             ,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588\n             ,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722\n             ,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959\n             ,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330\n             ,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531\n             ,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323\n             ,319,318,1738,1737,1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734\n             ,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742\n             ,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155\n             ,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159\n             ,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746\n             ,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727\n             ,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701\n             ,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764\n             ,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718\n             ,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135\n             ,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758\n             ,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768\n             ,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144\n             ,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698\n             ,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773\n             ,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775\n             ,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749\n             ,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789\n             ,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,775,1792,1793\n             ,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136\n             ,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770\n             ,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804\n             ,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208\n             ,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978\n             ,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809\n             ,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672\n             ,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382\n             ,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071\n             ,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447\n             ,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818\n             ,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820\n             ,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815\n             ,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836\n             ,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841\n             ,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836\n             ,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839\n             ,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127\n             ,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,1856,1857,1854,1857,167,178,1855,660,1216,1858\n             ,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276\n             ,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860\n             ,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207\n             ,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658\n             ,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861\n             ,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877\n             ,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696\n             ,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071\n             ,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760\n             ,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528\n             ,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104\n             ,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673\n             ,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596\n             ,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735\n             ,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810\n             ,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749\n             ,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831\n             ,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462\n             ,1461,1881,1882,1883,1884,1885,1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889\n             ,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882\n             ,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915\n             ,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921\n             ,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927\n             ,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938\n             ,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951\n             ,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958\n             ,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946\n             ,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983\n             ,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996\n             ,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965\n             ,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002\n             ,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009\n             ,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013\n             ,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023\n             ,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040\n             ,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045\n             ,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,2052\n             ,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059\n             ,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051\n             ,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993\n             ,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988\n             ,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034\n             ,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075\n             ,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078\n             ,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081\n             ,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026\n             ,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028\n             ,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088\n             ,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094\n             ,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916\n             ,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101\n             ,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110\n             ,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126\n             ,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139\n             ,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140\n             ,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,2144,2147,2149,2150,2148,2148,2150,2151,2152\n             ,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162\n             ,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143\n             ,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183\n             ,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197\n             ,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183\n             ,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187\n             ,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215\n             ,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231\n             ,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249\n             ,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232\n             ,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234\n             ,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438\n             ,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263\n             ,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283\n             ,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295\n             ,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450\n             ,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307\n             ,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313\n             ,2317,2318,2316,2317,2319,2320,2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323\n             ,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339\n             ,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347\n             ,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361\n             ,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370\n             ,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373\n             ,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645\n             ,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133\n             ,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385\n             ,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345\n             ,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117\n             ,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388\n             ,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399\n             ,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414\n             ,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415\n             ,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434\n             ,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452\n             ,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460\n             ,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,2428\n             ,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476\n             ,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480\n             ,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491\n             ,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408\n             ,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518\n             ,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534\n             ,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544\n             ,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549\n             ,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533\n             ,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544\n             ,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570\n             ,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576\n             ,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580\n             ,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491\n             ,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598\n             ,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611\n             ,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623\n             ,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634\n             ,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,2636,2637,2638,2583,2582,2638,2097,2584\n             ,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651\n             ,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660\n             ,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665\n             ,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684\n             ,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698\n             ,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702\n             ,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717\n             ,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729\n             ,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740\n             ,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865\n             ,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755\n             ,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765\n             ,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317\n             ,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762\n             ,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661\n             ,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806\n             ,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811\n             ,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824\n             ,2825,2645,2826,2827,2828,2829,2827,2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839\n             ,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645\n             ,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854\n             ,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547\n             ,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873\n             ,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884\n             ,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696\n             ,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745\n             ,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897\n             ,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668\n             ,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773\n             ,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618\n             ,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775\n             ,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933\n             ,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939\n             ,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946\n             ,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830\n             ,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958\n             ,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891\n             ,2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777\n             ,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859\n             ,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622\n             ,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732\n             ,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779\n             ,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990\n             ,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998\n             ,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821\n             ,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829\n             ,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922\n             ,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012\n             ,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698\n             ,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838\n             ,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020\n             ,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002\n             ,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028\n             ,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038\n             ,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046\n             ,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,2887,2886,2736,2551,2553,3049,2736\n             ,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882\n             ,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140\n             ,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716\n             ,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009\n             ,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657\n             ,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078\n             ,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651\n             ,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092\n             ,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092\n             ,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596\n             ,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190\n             ,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194\n             ,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099\n             ,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107\n             ,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495\n             ,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115\n             ,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117\n             ,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564\n             ,3119,3120,3121,3010,2921,3122,2896,3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127\n             ,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142\n             ,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153\n             ,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159\n             ,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900\n             ,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173\n             ,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105\n             ,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187\n             ,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192\n             ,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196\n             ,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190\n             ,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214\n             ,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124\n             ,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222\n             ,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152\n             ,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237\n             ,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229\n             ,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240\n             ,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,3248\n             ,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215\n             ,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256\n             ,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268\n             ,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266\n             ,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278\n             ,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147\n             ,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265\n             ,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289\n             ,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301\n             ,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302\n             ,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305\n             ,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918\n             ,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291\n             ,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248\n             ,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198\n             ,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134\n             ,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315\n             ,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319\n             ,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,3325,3326,3327,3326,3325,3328,3329,2436,2433\n             ,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322\n             ,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342\n             ,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351\n             ,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350\n             ,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368\n             ,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373\n             ,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559\n             ,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712\n             ,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383\n             ,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389\n             ,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164\n             ,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394\n             ,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608\n             ,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279\n             ,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297\n             ,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407\n             ,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410\n             ,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416\n             ,3415,2216,3418,3416,3412,2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174\n             ,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426\n             ,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381\n             ,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436\n             ,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069\n             ,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678\n             ,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447\n             ,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452\n             ,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449\n             ,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444\n             ,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364\n             ,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426\n             ,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475\n             ,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478\n             ,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484\n             ,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487\n             ,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492\n             ,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298\n             ,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,2291,3494,3500\n             ,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997\n             ,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303\n             ,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290\n             ,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724\n             ,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493\n             ,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386\n             ,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565\n             ,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421\n             ,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350\n             ,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118\n             ,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868\n             ,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737\n             ,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002\n             ,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874\n             ,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523\n             ,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525\n             ,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452\n             ,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799\n             ,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,2135,3528,2338,3529,3528,2383,2126,2125,3528,3528\n             ,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357\n             ,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339\n             ,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530\n             ,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956\n             ,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064\n             ,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074\n             ,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874\n             ,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609\n             ,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213\n             ,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929\n             ,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808\n             ,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501\n             ,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035\n             ,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032\n             ,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946\n             ,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552\n             ,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065\n             ,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867\n             ,3558,3109,3110,3109,3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903\n             ,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799\n             ,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179\n             ,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511\n             ,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550\n             ,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564\n             ,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562\n             ,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565\n             ,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573\n             ,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984\n             ,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583\n             ,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992\n             ,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591\n             ,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895\n             ,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594\n             ,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095\n             ,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164\n             ,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610\n             ,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,2973,3613,3614,2973\n             ,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612\n             ,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186\n             ,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861\n             ,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957\n             ,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789\n             ,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600\n             ,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243\n             ,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354\n             ,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495\n             ,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315\n             ,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364\n             ,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221\n             ,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258\n             ,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803\n             ,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943\n             ,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153\n             ,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757\n             ,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540\n             ,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519\n             ,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157\n             ,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453\n             ,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997\n             ,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624\n             ,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642\n             ,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660\n             ,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675\n             ,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684\n             ,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694\n             ,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711\n             ,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683\n             ,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733\n             ,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649\n             ,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624\n             ,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630\n             ,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403\n             ,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766\n             ,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784\n             ,3766,3785,3786,3787,3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799\n             ,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816\n             ,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782\n             ,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769\n             ,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793\n             ,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802\n             ,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856\n             ,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843\n             ,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875\n             ,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891\n             ,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903\n             ,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925\n             ,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876\n             ,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940\n             ,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943\n             ,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884\n             ,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932\n             ,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962\n             ,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,2814,2630,2669\n             ,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968\n             ,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957\n             ,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994\n             ,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004\n             ,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957\n             ,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959\n             ,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973\n             ,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013\n             ,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994\n             ,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026\n             ,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039\n             ,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044\n             ,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059\n             ,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046\n             ,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025\n             ,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056\n             ,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080\n             ,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087\n             ,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098\n             ,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109\n             ,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097\n             ,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085\n             ,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102\n             ,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072\n             ,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133\n             ,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123\n             ,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133\n             ,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157\n             ,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166\n             ,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171\n             ,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143\n             ,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179\n             ,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022\n             ,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195\n             ,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200\n             ,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207\n             ,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096\n             ,4209,4213,4113,4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087\n             ,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191\n             ,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132\n             ,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221\n             ,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235\n             ,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243\n             ,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255\n             ,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264\n             ,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220\n             ,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253\n             ,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275\n             ,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286\n             ,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282\n             ,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306\n             ,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238\n             ,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282\n             ,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296\n             ,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315\n             ,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,4322,4326,4327,4325,4324\n             ,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331\n             ,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346\n             ,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321\n             ,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361\n             ,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367\n             ,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374\n             ,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344\n             ,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345\n             ,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391\n             ,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243\n             ,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403\n             ,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298\n             ,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405\n             ,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267\n             ,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315\n             ,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416\n             ,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421\n             ,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431\n             ,4436,4437,4433,4432,4437,4438,4434,4433,4439,4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431\n             ,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451\n             ,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465\n             ,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469\n             ,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475\n             ,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481\n             ,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464\n             ,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490\n             ,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501\n             ,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508\n             ,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515\n             ,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522\n             ,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502\n             ,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536\n             ,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506\n             ,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534\n             ,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529\n             ,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558\n             ,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564\n             ,4568,4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573\n             ,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583\n             ,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579\n             ,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596\n             ,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607\n             ,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621\n             ,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633\n             ,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642\n             ,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653\n             ,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647\n             ,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418\n             ,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621\n             ,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440\n             ,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643\n             ,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519\n             ,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665\n             ,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471\n             ,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525\n             ,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,4506,4496,4495,4542,4546,4527,4526\n             ,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668\n             ,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682\n             ,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693\n             ,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679\n             ,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708\n             ,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702\n             ,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723\n             ,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734\n             ,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676\n             ,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669\n             ,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752\n             ,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751\n             ,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761\n             ,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771\n             ,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759\n             ,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794\n             ,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787\n             ,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808\n             ,4795,4796,4810,4809,4796,4797,4810,4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819\n             ,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832\n             ,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841\n             ,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779\n             ,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849\n             ,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789\n             ,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763\n             ,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864\n             ,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866\n             ,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846\n             ,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876\n             ,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891\n             ,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899\n             ,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900\n             ,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912\n             ,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925\n             ,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940\n             ,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953\n             ,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,4964\n             ,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976\n             ,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992\n             ,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004\n             ,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013\n             ,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984\n             ,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025\n             ,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924\n             ,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031\n             ,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939\n             ,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045\n             ,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956\n             ,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037\n             ,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967\n             ,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057\n             ,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985\n             ,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062\n             ,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007\n             ,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071\n             ,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,5072,5019,5065,5019,5018,5067,5065,5018,5073\n             ,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080\n             ,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093\n             ,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106\n             ,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118\n             ,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120\n             ,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143\n             ,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151\n             ,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163\n             ,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135\n             ,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173\n             ,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076\n             ,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187\n             ,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096\n             ,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185\n             ,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109\n             ,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199\n             ,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122\n             ,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199\n             ,5198,5130,5128,5206,5200,5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138\n             ,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210\n             ,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155\n             ,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211\n             ,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221\n             ,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020\n             ,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167\n             ,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238\n             ,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247\n             ,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260\n             ,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269\n             ,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284\n             ,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293\n             ,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300\n             ,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248\n             ,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301\n             ,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305\n             ,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316\n             ,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,5302,5305,5325\n             ,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338\n             ,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347\n             ,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362\n             ,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371\n             ,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312\n             ,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324\n             ,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367\n             ,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379\n             ,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386\n             ,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398\n             ,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401\n             ,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402\n             ,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425\n             ,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392\n             ,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443\n             ,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449\n             ,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443\n             ,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460\n             ,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425\n             ,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438\n             ,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474\n             ,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476\n             ,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496\n             ,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504\n             ,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479\n             ,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422\n             ,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456\n             ,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457\n             ,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448\n             ,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530\n             ,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483\n             ,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551\n             ,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546\n             ,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563\n             ,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567\n             ,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587\n             ,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547\n             ,5550,5546,5562,5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561\n             ,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591\n             ,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607\n             ,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601\n             ,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590\n             ,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602\n             ,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627\n             ,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601\n             ,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605\n             ,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657\n             ,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672\n             ,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685\n             ,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701\n             ,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672\n             ,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714\n             ,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692\n             ,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735\n             ,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741\n             ,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,5747,5673,5671,5749,5748\n             ,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655\n             ,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745\n             ,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760\n             ,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658\n             ,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695\n             ,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729\n             ,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765\n             ,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783\n             ,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801\n             ,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774\n             ,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790\n             ,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837\n             ,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854\n             ,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862\n             ,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793\n             ,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854\n             ,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823\n             ,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876\n             ,5881,5882,5883,5884,5835,5834,5830,5834,5833,5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800\n             ,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795\n             ,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829\n             ,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806\n             ,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771\n             ,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864\n             ,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885\n             ,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904\n             ,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890\n             ,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918\n             ,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915\n             ,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902\n             ,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887\n             ,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840\n             ,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950\n             ,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965\n             ,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981\n             ,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997\n             ,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013\n             ,5997,5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024\n             ,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035\n             ,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042\n             ,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053\n             ,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062\n             ,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074\n             ,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045\n             ,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013\n             ,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093\n             ,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980\n             ,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101\n             ,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092\n             ,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114\n             ,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941\n             ,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073\n             ,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958\n             ,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024\n             ,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002\n             ,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,6144,6085,6086,6145,6145,6086,6087\n             ,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157\n             ,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169\n             ,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123\n             ,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184\n             ,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081\n             ,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188\n             ,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125\n             ,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969\n             ,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201\n             ,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218\n             ,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229\n             ,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237\n             ,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244\n             ,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256\n             ,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275\n             ,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289\n             ,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305\n             ,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321\n             ,6322,6323,6324,6325,6326,6327,6321,6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332\n             ,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322\n             ,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352\n             ,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362\n             ,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320\n             ,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228\n             ,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386\n             ,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389\n             ,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360\n             ,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348\n             ,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331\n             ,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273\n             ,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383\n             ,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263\n             ,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427\n             ,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429\n             ,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401\n             ,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404\n             ,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,6296\n             ,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322\n             ,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414\n             ,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397\n             ,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445\n             ,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005\n             ,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149\n             ,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113\n             ,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105\n             ,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126\n             ,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125\n             ,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214\n             ,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388\n             ,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405\n             ,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409\n             ,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278\n             ,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408\n             ,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298\n             ,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422\n             ,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,6397,6386,6355,6352,6351,6349,6404,6279,6298\n             ,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222\n             ,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272\n             ,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020\n             ,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457\n             ,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465\n             ,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466\n             ,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497\n             ,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513\n             ,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528\n             ,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506\n             ,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519\n             ,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562\n             ,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557\n             ,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580\n             ,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590\n             ,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597\n             ,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604\n             ,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606\n             ,6497,6496,6498,6487,6544,6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614\n             ,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511\n             ,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553\n             ,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478\n             ,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637\n             ,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628\n             ,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608\n             ,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604\n             ,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639\n             ,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648\n             ,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617\n             ,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664\n             ,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674\n             ,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694\n             ,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631\n             ,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704\n             ,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699\n             ,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705\n             ,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,6601,6678,6677\n             ,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499\n             ,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720\n             ,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735\n             ,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722\n             ,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756\n             ,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733\n             ,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760\n             ,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793\n             ,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796\n             ,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823\n             ,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840\n             ,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856\n             ,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852\n             ,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854\n             ,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872\n             ,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885\n             ,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784\n             ,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925\n             ,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934\n             ,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775\n             ,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961\n             ,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902\n             ,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745\n             ,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980\n             ,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771\n             ,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986\n             ,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801\n             ,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952\n             ,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764\n             ,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784\n             ,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957\n             ,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833\n             ,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962\n             ,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024\n             ,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032\n             ,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048\n             ,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066\n             ,7067,7068,7069,7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082\n             ,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100\n             ,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118\n             ,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133\n             ,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142\n             ,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167\n             ,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184\n             ,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197\n             ,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203\n             ,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891\n             ,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025\n             ,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226\n             ,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239\n             ,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233\n             ,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233\n             ,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040\n             ,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257\n             ,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256\n             ,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,6966,6884,7263,7264,6883\n             ,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937\n             ,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002\n             ,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274\n             ,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279\n             ,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100\n             ,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284\n             ,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285\n             ,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021\n             ,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801\n             ,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289\n             ,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937\n             ,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936\n             ,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941\n             ,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977\n             ,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140\n             ,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297\n             ,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899\n             ,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870\n             ,6907,6935,6814,6905,6905,6814,6813,6806,6776,6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988\n             ,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583\n             ,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623\n             ,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462\n             ,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542\n             ,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669\n             ,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310\n             ,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717\n             ,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924\n             ,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864\n             ,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805\n             ,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913\n             ,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998\n             ,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024\n             ,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313\n             ,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315\n             ,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234\n             ,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084\n             ,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061\n             ,7095,7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091\n             ,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116\n             ,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326\n             ,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146\n             ,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150\n             ,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329\n             ,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177\n             ,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333\n             ,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329\n             ,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281\n             ,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032\n             ,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248\n             ,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248\n             ,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856\n             ,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280\n             ,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234\n             ,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015\n             ,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264\n             ,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,6948,6948,7288,7287,6952,6995,6999\n             ,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804\n             ,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870\n             ,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739\n             ,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920\n             ,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474\n             ,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345\n             ,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361\n             ,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372\n             ,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388\n             ,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391\n             ,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408\n             ,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426\n             ,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439\n             ,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427\n             ,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468\n             ,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482\n             ,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450\n             ,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500\n             ,7501,7502,7499,7503,7504,7505,7506,7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444\n             ,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435\n             ,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526\n             ,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522\n             ,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484\n             ,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393\n             ,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532\n             ,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555\n             ,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465\n             ,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463\n             ,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546\n             ,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554\n             ,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439\n             ,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574\n             ,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534\n             ,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406\n             ,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545\n             ,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463\n             ,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,7504\n             ,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591\n             ,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585\n             ,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621\n             ,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631\n             ,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647\n             ,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657\n             ,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651\n             ,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678\n             ,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411\n             ,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601\n             ,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650\n             ,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708\n             ,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722\n             ,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613\n             ,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736\n             ,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747\n             ,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736\n             ,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623\n             ,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,7759,7676,7675,7645,7760,7758,7761,7760,7645\n             ,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618\n             ,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775\n             ,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661\n             ,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590\n             ,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671\n             ,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617\n             ,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785\n             ,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775\n             ,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783\n             ,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791\n             ,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792\n             ,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724\n             ,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349\n             ,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598\n             ,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519\n             ,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742\n             ,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704\n             ,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399\n             ,7398,7548,7395,7394,7549,7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765\n             ,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506\n             ,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355\n             ,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800\n             ,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811\n             ,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826\n             ,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839\n             ,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859\n             ,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875\n             ,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893\n             ,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903\n             ,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925\n             ,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941\n             ,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959\n             ,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975\n             ,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983\n             ,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994\n             ,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966\n             ,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,7984,7971,7975\n             ,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018\n             ,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035\n             ,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910\n             ,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881\n             ,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033\n             ,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033\n             ,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056\n             ,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020\n             ,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064\n             ,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021\n             ,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884\n             ,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037\n             ,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077\n             ,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814\n             ,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833\n             ,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848\n             ,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854\n             ,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868\n             ,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879\n             ,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888\n             ,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901\n             ,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092\n             ,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093\n             ,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036\n             ,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956\n             ,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985\n             ,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071\n             ,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813\n             ,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993\n             ,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945\n             ,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029\n             ,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057\n             ,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889\n             ,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091\n             ,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829\n             ,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108\n             ,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114\n             ,8113,8115,8116,8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057\n             ,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125\n             ,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780\n             ,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511\n             ,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140\n             ,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132\n             ,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158\n             ,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150\n             ,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177\n             ,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164\n             ,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196\n             ,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188\n             ,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148\n             ,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217\n             ,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211\n             ,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129\n             ,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237\n             ,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251\n             ,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,8245,8244,8220,8220,8244\n             ,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223\n             ,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198\n             ,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159\n             ,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259\n             ,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168\n             ,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238\n             ,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277\n             ,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273\n             ,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303\n             ,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320\n             ,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286\n             ,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343\n             ,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359\n             ,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375\n             ,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393\n             ,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344\n             ,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408\n             ,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370\n             ,8367,8414,8418,8371,8419,8420,8371,8418,8421,8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424\n             ,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395\n             ,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288\n             ,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449\n             ,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356\n             ,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463\n             ,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468\n             ,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362\n             ,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322\n             ,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468\n             ,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458\n             ,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453\n             ,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303\n             ,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494\n             ,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507\n             ,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516\n             ,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424\n             ,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470\n             ,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325\n             ,8310,8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311\n             ,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461\n             ,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510\n             ,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517\n             ,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410\n             ,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290\n             ,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530\n             ,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499\n             ,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480\n             ,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525\n             ,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300\n             ,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439\n             ,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545\n             ,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549\n             ,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551\n             ,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502\n             ,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193\n             ,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258\n             ,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,8264,8263,8203,8201,8184,8185,8183\n             ,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142\n             ,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322\n             ,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350\n             ,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562\n             ,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574\n             ,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582\n             ,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589\n             ,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600\n             ,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580\n             ,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598\n             ,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617\n             ,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626\n             ,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634\n             ,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639\n             ,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646\n             ,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634\n             ,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648\n             ,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665\n             ,8586,8585,8666,8590,8589,8667,8668,8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668\n             ,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618\n             ,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683\n             ,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689\n             ,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587\n             ,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696\n             ,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694\n             ,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652\n             ,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712\n             ,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713\n             ,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730\n             ,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746\n             ,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754\n             ,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767\n             ,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764\n             ,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708\n             ,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783\n             ,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792\n             ,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,8800\n             ,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807\n             ,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823\n             ,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838\n             ,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851\n             ,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812\n             ,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884\n             ,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895\n             ,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907\n             ,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921\n             ,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934\n             ,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936\n             ,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955\n             ,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818\n             ,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665\n             ,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868\n             ,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716\n             ,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680\n             ,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780\n             ,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,8680,8754,8664,8718,8731,8565,8563,8672,8668\n             ,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886\n             ,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817\n             ,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688\n             ,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981\n             ,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942\n             ,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720\n             ,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833\n             ,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709\n             ,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744\n             ,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896\n             ,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011\n             ,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012\n             ,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023\n             ,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905\n             ,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908\n             ,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914\n             ,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929\n             ,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842\n             ,9045,9034,8901,8903,9031,9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055\n             ,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063\n             ,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914\n             ,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014\n             ,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045\n             ,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790\n             ,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004\n             ,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796\n             ,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717\n             ,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098\n             ,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107\n             ,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125\n             ,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140\n             ,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152\n             ,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113\n             ,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171\n             ,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144\n             ,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114\n             ,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,9097,9122,9095\n             ,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182\n             ,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109\n             ,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212\n             ,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207\n             ,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221\n             ,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249\n             ,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270\n             ,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285\n             ,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305\n             ,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316\n             ,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326\n             ,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349\n             ,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365\n             ,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384\n             ,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399\n             ,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412\n             ,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430\n             ,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443\n             ,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450\n             ,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461\n             ,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474\n             ,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488\n             ,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258\n             ,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459\n             ,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338\n             ,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314\n             ,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342\n             ,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510\n             ,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403\n             ,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443\n             ,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444\n             ,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538\n             ,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532\n             ,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561\n             ,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568\n             ,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576\n             ,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566\n             ,9564,9565,9551,9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580\n             ,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583\n             ,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605\n             ,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600\n             ,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631\n             ,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246\n             ,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619\n             ,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605\n             ,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639\n             ,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607\n             ,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603\n             ,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585\n             ,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587\n             ,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609\n             ,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655\n             ,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391\n             ,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659\n             ,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458\n             ,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,9410,9661,9453,9453,9661\n             ,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312\n             ,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316\n             ,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665\n             ,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682\n             ,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482\n             ,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490\n             ,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436\n             ,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556\n             ,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561\n             ,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691\n             ,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446\n             ,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287\n             ,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382\n             ,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473\n             ,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663\n             ,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659\n             ,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414\n             ,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213\n             ,9707,9707,9213,9223,9708,9708,9223,9239,9709,9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517\n             ,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135\n             ,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215\n             ,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689\n             ,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469\n             ,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345\n             ,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717\n             ,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717\n             ,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191\n             ,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166\n             ,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219\n             ,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730\n             ,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164\n             ,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192\n             ,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626\n             ,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609\n             ,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522\n             ,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752\n             ,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754\n             ,9761,9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777\n             ,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790\n             ,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793\n             ,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772\n             ,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820\n             ,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787\n             ,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831\n             ,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771\n             ,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747\n             ,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844\n             ,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862\n             ,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840\n             ,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883\n             ,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905\n             ,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925\n             ,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941\n             ,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957\n             ,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970\n             ,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,9976,9980,9981,9982,9983,9976,9979\n             ,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002\n             ,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016\n             ,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031\n             ,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045\n             ,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053\n             ,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067\n             ,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079\n             ,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015\n             ,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049\n             ,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947\n             ,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117\n             ,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129\n             ,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944\n             ,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930\n             ,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984\n             ,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943\n             ,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970\n             ,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124\n             ,10143,10144,10145,10146,10147,10148,10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005\n             ,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153\n             ,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159\n             ,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974\n             ,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178\n             ,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173\n             ,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193\n             ,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178\n             ,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170\n             ,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216\n             ,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193\n             ,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213\n             ,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221\n             ,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235\n             ,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253\n             ,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250\n             ,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245\n             ,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886\n             ,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897\n             ,9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258\n             ,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264\n             ,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143\n             ,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147\n             ,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161\n             ,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253\n             ,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271\n             ,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232\n             ,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288\n             ,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115\n             ,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152\n             ,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306\n             ,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097\n             ,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093\n             ,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310\n             ,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313\n             ,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945\n             ,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297\n             ,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,10099,9961,9963,10320,10140\n             ,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085\n             ,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126\n             ,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157\n             ,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332\n             ,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221\n             ,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168\n             ,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141\n             ,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122\n             ,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328\n             ,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154\n             ,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341\n             ,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337\n             ,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115\n             ,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300\n             ,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326\n             ,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344\n             ,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154\n             ,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760\n             ,9761,9838,9837,9760,9837,9836,9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845\n             ,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351\n             ,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107\n             ,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075\n             ,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138\n             ,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810\n             ,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358\n             ,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362\n             ,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790\n             ,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855\n             ,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372\n             ,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736\n             ,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858\n             ,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799\n             ,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250\n             ,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215\n             ,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380\n             ,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388\n             ,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,10397,10393\n             ,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384\n             ,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408\n             ,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417\n             ,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396\n             ,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414\n             ,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418\n             ,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439\n             ,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447\n             ,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395\n             ,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442\n             ,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465\n             ,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465\n             ,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467\n             ,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443\n             ,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481\n             ,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487\n             ,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491\n             ,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496\n             ,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,10457,10461\n             ,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453\n             ,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402\n             ,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475\n             ,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516\n             ,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417\n             ,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470\n             ,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528\n             ,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542\n             ,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529\n             ,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549\n             ,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566\n             ,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578\n             ,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581\n             ,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586\n             ,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581\n             ,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531\n             ,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595\n             ,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584\n             ,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,10612,10610\n             ,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619\n             ,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561\n             ,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627\n             ,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638\n             ,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649\n             ,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662\n             ,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672\n             ,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688\n             ,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702\n             ,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710\n             ,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513\n             ,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737\n             ,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751\n             ,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760\n             ,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770\n             ,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762\n             ,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784\n             ,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720\n             ,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,10537,10536\n             ,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754\n             ,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572\n             ,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387\n             ,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799\n             ,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691\n             ,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779\n             ,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654\n             ,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758\n             ,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795\n             ,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809\n             ,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649\n             ,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595\n             ,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768\n             ,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618\n             ,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568\n             ,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490\n             ,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817\n             ,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667\n             ,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,10678,10827\n             ,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686\n             ,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837\n             ,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679\n             ,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706\n             ,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855\n             ,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867\n             ,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854\n             ,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871\n             ,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896\n             ,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905\n             ,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917\n             ,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931\n             ,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944\n             ,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954\n             ,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960\n             ,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948\n             ,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904\n             ,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898\n             ,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,10991,10992\n             ,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004\n             ,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016\n             ,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026\n             ,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042\n             ,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050\n             ,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849\n             ,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005\n             ,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061\n             ,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067\n             ,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076\n             ,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040\n             ,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879\n             ,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996\n             ,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087\n             ,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077\n             ,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983\n             ,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102\n             ,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912\n             ,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,10945,10944\n             ,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095\n             ,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088\n             ,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925\n             ,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960\n             ,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109\n             ,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892\n             ,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846\n             ,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900\n             ,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869\n             ,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120\n             ,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980\n             ,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980\n             ,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856\n             ,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951\n             ,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932\n             ,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058\n             ,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909\n             ,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125\n             ,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,10969,10918\n             ,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142\n             ,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157\n             ,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169\n             ,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183\n             ,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187\n             ,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192\n             ,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201\n             ,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209\n             ,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128\n             ,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152\n             ,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141\n             ,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193\n             ,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189\n             ,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174\n             ,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183\n             ,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225\n             ,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032\n             ,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225\n             ,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,11132,11230\n             ,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202\n             ,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214\n             ,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913\n             ,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192\n             ,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209\n             ,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115\n             ,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512\n             ,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237\n             ,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744\n             ,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661\n             ,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672\n             ,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837\n             ,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262\n             ,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023\n             ,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242\n             ,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253\n             ,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244\n             ,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612\n             ,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,11276,10810\n             ,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778\n             ,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595\n             ,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922\n             ,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119\n             ,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630\n             ,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290\n             ,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807\n             ,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026\n             ,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946\n             ,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805\n             ,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775\n             ,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999\n             ,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762\n             ,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961\n             ,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794\n             ,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725\n             ,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650\n             ,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681\n             ,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,11296,11295,10647,10646,10692,10647\n             ,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648\n             ,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766\n             ,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300\n             ,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309\n             ,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318\n             ,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327\n             ,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329\n             ,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329\n             ,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330\n             ,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348\n             ,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363\n             ,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358\n             ,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379\n             ,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355\n             ,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341\n             ,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366\n             ,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388\n             ,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398\n             ,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11346,11349\n             ,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425\n             ,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422\n             ,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435\n             ,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404\n             ,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413\n             ,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367\n             ,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418\n             ,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355\n             ,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365\n             ,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440\n             ,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411\n             ,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449\n             ,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465\n             ,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462\n             ,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490\n             ,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508\n             ,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526\n             ,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535\n             ,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,11530,11531,11530,11541,11542,11533\n             ,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553\n             ,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554\n             ,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568\n             ,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581\n             ,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581\n             ,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547\n             ,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591\n             ,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467\n             ,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616\n             ,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495\n             ,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543\n             ,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643\n             ,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555\n             ,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653\n             ,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667\n             ,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675\n             ,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683\n             ,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688\n             ,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,11697,11459,11455,11458,11698,11696\n             ,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595\n             ,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608\n             ,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711\n             ,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628\n             ,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719\n             ,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730\n             ,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734\n             ,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743\n             ,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758\n             ,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756\n             ,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657\n             ,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751\n             ,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771\n             ,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782\n             ,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795\n             ,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780\n             ,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713\n             ,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813\n             ,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,11818,11819,11820,11821,11499,11640\n             ,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477\n             ,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519\n             ,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780\n             ,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796\n             ,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475\n             ,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793\n             ,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712\n             ,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707\n             ,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754\n             ,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499\n             ,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630\n             ,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653\n             ,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804\n             ,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786\n             ,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512\n             ,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847\n             ,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831\n             ,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783\n             ,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,11476,11475,11849,11487,11600,11603\n             ,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546\n             ,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874\n             ,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605\n             ,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578\n             ,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611\n             ,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673\n             ,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503\n             ,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539\n             ,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886\n             ,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901\n             ,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913\n             ,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906\n             ,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663\n             ,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736\n             ,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660\n             ,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737\n             ,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846\n             ,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952\n             ,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,11960,11961,11924,11923,11894,11911\n             ,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967\n             ,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468\n             ,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994\n             ,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004\n             ,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022\n             ,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038\n             ,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047\n             ,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054\n             ,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055\n             ,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074\n             ,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071\n             ,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093\n             ,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098\n             ,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061\n             ,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108\n             ,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995\n             ,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126\n             ,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009\n             ,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,12044,12055,12062,12053,12055,12065\n             ,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047\n             ,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077\n             ,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160\n             ,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174\n             ,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182\n             ,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063\n             ,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195\n             ,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204\n             ,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104\n             ,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119\n             ,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218\n             ,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181\n             ,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226\n             ,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233\n             ,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237\n             ,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246\n             ,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263\n             ,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259\n             ,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,11770,11764,12269,12164,12163,12166\n             ,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252\n             ,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231\n             ,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285\n             ,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297\n             ,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309\n             ,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218\n             ,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314\n             ,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323\n             ,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990\n             ,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338\n             ,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282\n             ,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336\n             ,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350\n             ,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349\n             ,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964\n             ,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222\n             ,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148\n             ,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049\n             ,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,12359,12360,12162,11967,11966,11997\n             ,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303\n             ,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321\n             ,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047\n             ,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023\n             ,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311\n             ,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193\n             ,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023\n             ,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283\n             ,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366\n             ,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378\n             ,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074\n             ,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127\n             ,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077\n             ,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102\n             ,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100\n             ,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003\n             ,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395\n             ,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401\n             ,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,12412,12413,12414,12402,12415,12416\n             ,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170\n             ,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239\n             ,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126\n             ,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235\n             ,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360\n             ,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439\n             ,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448\n             ,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354\n             ,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488\n             ,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590\n             ,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596\n             ,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794\n             ,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791\n             ,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865\n             ,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885\n             ,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703\n             ,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839\n             ,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518\n             ,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,12138,12002,11489,11669,12068,12048\n             ,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341\n             ,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976\n             ,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356\n             ,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351\n             ,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335\n             ,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357\n             ,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377\n             ,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212\n             ,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390\n             ,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470\n             ,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488\n             ,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493\n             ,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510\n             ,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504\n             ,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524\n             ,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530\n             ,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545\n             ,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559\n             ,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,12566,12567,12568,12556,12554,12569\n             ,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527\n             ,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582\n             ,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490\n             ,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586\n             ,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505\n             ,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535\n             ,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570\n             ,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514\n             ,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538\n             ,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568\n             ,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470\n             ,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548\n             ,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583\n             ,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583\n             ,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481\n             ,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557\n             ,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476\n             ,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593\n             ,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12609,12608,12613,12614,12612\n             ,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629\n             ,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639\n             ,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615\n             ,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660\n             ,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607\n             ,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685\n             ,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603\n             ,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613\n             ,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628\n             ,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634\n             ,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684\n             ,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620\n             ,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674\n             ,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693\n             ,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696\n             ,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714\n             ,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660\n             ,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687\n             ,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,12711,12707,12706,12712,12718,12720\n             ,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732\n             ,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746\n             ,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755\n             ,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766\n             ,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777\n             ,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742\n             ,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785\n             ,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790\n             ,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749\n             ,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757\n             ,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767\n             ,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787\n             ,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801\n             ,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784\n             ,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810\n             ,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817\n             ,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821\n             ,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773\n             ,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,12794,12740,12757,12800,12755,12833\n             ,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837\n             ,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840\n             ,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850\n             ,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857\n             ,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868\n             ,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874\n             ,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851\n             ,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883\n             ,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869\n             ,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892\n             ,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856\n             ,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901\n             ,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839\n             ,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910\n             ,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898\n             ,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919\n             ,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891\n             ,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928\n             ,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,12914,12915,12933,12932,12915,12916\n             ,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937\n             ,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942\n             ,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930\n             ,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950\n             ,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939\n             ,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876\n             ,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882\n             ,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888\n             ,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964\n             ,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975\n             ,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982\n             ,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962\n             ,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996\n             ,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978\n             ,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005\n             ,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963\n             ,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014\n             ,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981\n             ,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,12985,13022,13023,12989,12987,13023\n             ,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012\n             ,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032\n             ,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021\n             ,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041\n             ,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030\n             ,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050\n             ,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039\n             ,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059\n             ,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048\n             ,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068\n             ,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057\n             ,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077\n             ,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999\n             ,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005\n             ,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078\n        }\n        LayerElementSmoothing: 0 {\n            Version: 101\n            Name: \"\"\n            MappingInformationType: \"ByEdge\"\n            ReferenceInformationType: \"Direct\"\n            Smoothing: 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\n             ,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\n             ,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\n             ,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,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,0,1,1,1,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0\n             ,1,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\n             ,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1\n             ,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,0,0,0,0,0,0,0,0,0,0,1,1,0\n             ,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,1,0,1,0,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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,0,0,0,1,1,1,1,1,1\n             ,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\n             ,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0\n             ,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0\n             ,1,0,1,0,1,0,1,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\n             ,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\n             ,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,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0\n             ,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0\n             ,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0\n             ,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1\n             ,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1\n             ,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1\n             ,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\n             ,1,1,1,1,1,1,1,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,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\n             ,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\n             ,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\n             ,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1\n             ,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,0\n             ,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,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,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\n             ,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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,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\n             ,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,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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,0,1,1\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,0,0,0,0,0,1,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\n             ,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,0,0,0,0,0,0,1,1,1,1,1,1,1\n             ,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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,0,1,1,1,1,0,1,1\n             ,0,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,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,0,1\n             ,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,0,0,0,0\n             ,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,1,1,1,1,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,1,1,1\n             ,1,1,1,1,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\n             ,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\n             ,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1\n             ,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,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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,0,1,1,1,1,1\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0\n             ,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\n             ,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0\n             ,1,0,1,0,1,0,1,0,1,0,1,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,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1\n             ,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1\n             ,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,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,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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,0,1,1,1,0,1\n             ,1,0,1,1,1,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,0,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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,0,1,0,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0\n             ,1,1,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,1,1,0,1,1\n             ,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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,0,1,1,1,0,1,1,1,0,1,0,1,1,1\n             ,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,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\n             ,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,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,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,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,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,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1\n             ,1,1,1,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,0,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,0,1,1,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0\n             ,0,1,0,1,1,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0\n             ,1,1,1,1,1,1,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,0,1,1,1,1\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1\n             ,1,1,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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,0,1,0,1,0,1,0,1\n             ,0,1,0,1,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1\n             ,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,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\n             ,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,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\n             ,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,0\n             ,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1\n             ,1,1,0,1,1,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1\n             ,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n        }\n        LayerElementMaterial: 0 {\n            Version: 101\n            Name: \"\"\n            MappingInformationType: \"ByPolygon\"\n            ReferenceInformationType: \"IndexToDirect\"\n            Materials: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,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\n             ,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\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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,4,4,4,4,4,4,4\n             ,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,4,4,4,4,4,4,4\n             ,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,4,4,4,4,4,4,4\n             ,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\n        }\n        LayerElementTexture: 0 {\n            Version: 101\n            Name: \"\"\n            MappingInformationType: \"ByPolygon\"\n            ReferenceInformationType: \"IndexToDirect\"\n            BlendMode: \"Translucent\"\n            TextureAlpha: 1\n            TextureId: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n             ,0,0,0,0,0,0,0,0,0,0,0,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\n             ,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\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3\n             ,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2\n             ,2,2,2,2,2,2,2,2,2,2,2,2,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,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\n             ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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\n             ,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,4,4,4,4,4,4,4\n             ,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,4,4,4,4,4,4,4\n             ,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,4,4,4,4,4,4,4\n             ,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\n        }\n        LayerElementSpecularTextures: 0 {\n            Version: 101\n            Name: \"\"\n            MappingInformationType: \"ByPolygon\"\n            ReferenceInformationType: \"IndexToDirect\"\n            BlendMode: \"Translucent\"\n            TextureAlpha: 1\n            TextureId: 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5\n             ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8\n             ,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,8,8,7,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n             ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6\n             ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9\n             ,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9\n             ,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9\n             ,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9\n             ,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9\n        }\n        LayerElementBumpTextures: 0 {\n            Version: 101\n            Name: \"\"\n            MappingInformationType: \"ByPolygon\"\n            ReferenceInformationType: \"IndexToDirect\"\n            BlendMode: \"Translucent\"\n            TextureAlpha: 1\n            TextureId: 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10\n             ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13\n             ,13,13,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,13,13,12,13,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12\n             ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11\n             ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,14,14,14,14,14,14,14,14,14,14,14,14,14\n             ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14\n             ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14\n             ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14\n             ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14\n             ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14\n             ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14\n             ,14,14,14,14,14,14,14,14,14\n        }\n        Layer: 0 {\n            Version: 100\n            LayerElement:  {\n                Type: \"LayerElementNormal\"\n                TypedIndex: 0\n            }\n            LayerElement:  {\n                Type: \"LayerElementMaterial\"\n                TypedIndex: 0\n            }\n            LayerElement:  {\n                Type: \"LayerElementTexture\"\n                TypedIndex: 0\n            }\n            LayerElement:  {\n                Type: \"LayerElementSpecularTextures\"\n                TypedIndex: 0\n            }\n            LayerElement:  {\n                Type: \"LayerElementBumpTextures\"\n                TypedIndex: 0\n            }\n            LayerElement:  {\n                Type: \"LayerElementUV\"\n                TypedIndex: 0\n            }\n            LayerElement:  {\n                Type: \"LayerElementSpecularUV\"\n                TypedIndex: 0\n            }\n            LayerElement:  {\n                Type: \"LayerElementBumpUV\"\n                TypedIndex: 0\n            }\n            LayerElement:  {\n                Type: \"LayerElementSmoothing\"\n                TypedIndex: 0\n            }\n        }\n    }\n    Model: \"Model::Producer Perspective\", \"Camera\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",0\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",0\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",0\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0,71.3,287.5\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Roll\", \"Roll\", \"A+\",0\n            Property: \"OpticalCenterX\", \"Real\", \"A+\",0\n            Property: \"OpticalCenterY\", \"Real\", \"A+\",0\n            Property: \"BackgroundColor\", \"Color\", \"A+\",0.63,0.63,0.63\n            Property: \"TurnTable\", \"Real\", \"A+\",0\n            Property: \"DisplayTurnTableIcon\", \"bool\", \"\",1\n            Property: \"Motion Blur Intensity\", \"Real\", \"A+\",1\n            Property: \"UseMotionBlur\", \"bool\", \"\",0\n            Property: \"UseRealTimeMotionBlur\", \"bool\", \"\",1\n            Property: \"ResolutionMode\", \"enum\", \"\",0\n            Property: \"ApertureMode\", \"enum\", \"\",2\n            Property: \"GateFit\", \"enum\", \"\",0\n            Property: \"FieldOfView\", \"FieldOfView\", \"A+\",40\n            Property: \"FieldOfViewX\", \"FieldOfView\", \"A+\",1\n            Property: \"FieldOfViewY\", \"FieldOfView\", \"A+\",1\n            Property: \"FocalLength\", \"Real\", \"A+\",21.3544940948486\n            Property: \"CameraFormat\", \"enum\", \"\",0\n            Property: \"AspectW\", \"double\", \"\",320\n            Property: \"AspectH\", \"double\", \"\",200\n            Property: \"PixelAspectRatio\", \"double\", \"\",1\n            Property: \"UseFrameColor\", \"bool\", \"\",0\n            Property: \"FrameColor\", \"ColorRGB\", \"\",0.3,0.3,0.3\n            Property: \"ShowName\", \"bool\", \"\",1\n            Property: \"ShowGrid\", \"bool\", \"\",1\n            Property: \"ShowOpticalCenter\", \"bool\", \"\",0\n            Property: \"ShowAzimut\", \"bool\", \"\",1\n            Property: \"ShowTimeCode\", \"bool\", \"\",0\n            Property: \"NearPlane\", \"double\", \"\",10\n            Property: \"FarPlane\", \"double\", \"\",4000\n            Property: \"FilmWidth\", \"double\", \"\",0.816\n            Property: \"FilmHeight\", \"double\", \"\",0.612\n            Property: \"FilmAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"FilmSqueezeRatio\", \"double\", \"\",1\n            Property: \"FilmFormatIndex\", \"enum\", \"\",4\n            Property: \"ViewFrustum\", \"bool\", \"\",1\n            Property: \"ViewFrustumNearFarPlane\", \"bool\", \"\",0\n            Property: \"ViewFrustumBackPlaneMode\", \"enum\", \"\",2\n            Property: \"BackPlaneDistance\", \"double\", \"\",100\n            Property: \"BackPlaneDistanceMode\", \"enum\", \"\",0\n            Property: \"ViewCameraToLookAt\", \"bool\", \"\",1\n            Property: \"LockMode\", \"bool\", \"\",0\n            Property: \"LockInterestNavigation\", \"bool\", \"\",0\n            Property: \"FitImage\", \"bool\", \"\",0\n            Property: \"Crop\", \"bool\", \"\",0\n            Property: \"Center\", \"bool\", \"\",1\n            Property: \"KeepRatio\", \"bool\", \"\",1\n            Property: \"BackgroundMode\", \"enum\", \"\",0\n            Property: \"BackgroundAlphaTreshold\", \"double\", \"\",0.5\n            Property: \"ForegroundTransparent\", \"bool\", \"\",1\n            Property: \"DisplaySafeArea\", \"bool\", \"\",0\n            Property: \"SafeAreaDisplayStyle\", \"enum\", \"\",1\n            Property: \"SafeAreaAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"Use2DMagnifierZoom\", \"bool\", \"\",0\n            Property: \"2D Magnifier Zoom\", \"Real\", \"A+\",100\n            Property: \"2D Magnifier X\", \"Real\", \"A+\",50\n            Property: \"2D Magnifier Y\", \"Real\", \"A+\",50\n            Property: \"CameraProjectionType\", \"enum\", \"\",0\n            Property: \"UseRealTimeDOFAndAA\", \"bool\", \"\",0\n            Property: \"UseDepthOfField\", \"bool\", \"\",0\n            Property: \"FocusSource\", \"enum\", \"\",0\n            Property: \"FocusAngle\", \"double\", \"\",3.5\n            Property: \"FocusDistance\", \"double\", \"\",200\n            Property: \"UseAntialiasing\", \"bool\", \"\",0\n            Property: \"AntialiasingIntensity\", \"double\", \"\",0.77777\n            Property: \"UseAccumulationBuffer\", \"bool\", \"\",0\n            Property: \"FrameSamplingCount\", \"int\", \"\",7\n        }\n        MultiLayer: 0\n        MultiTake: 0\n        Hidden: \"True\"\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Camera\"\n        GeometryVersion: 124\n        Position: 0,71.3,287.5\n        Up: 0,1,0\n        LookAt: 0,0,0\n        ShowInfoOnMoving: 1\n        ShowAudio: 0\n        AudioColor: 0,1,0\n        CameraOrthoZoom: 1\n    }\n    Model: \"Model::Producer Top\", \"Camera\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",0\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",0\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",0\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0,4000,0\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Roll\", \"Roll\", \"A+\",0\n            Property: \"OpticalCenterX\", \"Real\", \"A+\",0\n            Property: \"OpticalCenterY\", \"Real\", \"A+\",0\n            Property: \"BackgroundColor\", \"Color\", \"A+\",0.63,0.63,0.63\n            Property: \"TurnTable\", \"Real\", \"A+\",0\n            Property: \"DisplayTurnTableIcon\", \"bool\", \"\",1\n            Property: \"Motion Blur Intensity\", \"Real\", \"A+\",1\n            Property: \"UseMotionBlur\", \"bool\", \"\",0\n            Property: \"UseRealTimeMotionBlur\", \"bool\", \"\",1\n            Property: \"ResolutionMode\", \"enum\", \"\",0\n            Property: \"ApertureMode\", \"enum\", \"\",2\n            Property: \"GateFit\", \"enum\", \"\",0\n            Property: \"FieldOfView\", \"FieldOfView\", \"A+\",40\n            Property: \"FieldOfViewX\", \"FieldOfView\", \"A+\",1\n            Property: \"FieldOfViewY\", \"FieldOfView\", \"A+\",1\n            Property: \"FocalLength\", \"Real\", \"A+\",21.3544940948486\n            Property: \"CameraFormat\", \"enum\", \"\",0\n            Property: \"AspectW\", \"double\", \"\",320\n            Property: \"AspectH\", \"double\", \"\",200\n            Property: \"PixelAspectRatio\", \"double\", \"\",1\n            Property: \"UseFrameColor\", \"bool\", \"\",0\n            Property: \"FrameColor\", \"ColorRGB\", \"\",0.3,0.3,0.3\n            Property: \"ShowName\", \"bool\", \"\",1\n            Property: \"ShowGrid\", \"bool\", \"\",1\n            Property: \"ShowOpticalCenter\", \"bool\", \"\",0\n            Property: \"ShowAzimut\", \"bool\", \"\",1\n            Property: \"ShowTimeCode\", \"bool\", \"\",0\n            Property: \"NearPlane\", \"double\", \"\",1\n            Property: \"FarPlane\", \"double\", \"\",30000\n            Property: \"FilmWidth\", \"double\", \"\",0.816\n            Property: \"FilmHeight\", \"double\", \"\",0.612\n            Property: \"FilmAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"FilmSqueezeRatio\", \"double\", \"\",1\n            Property: \"FilmFormatIndex\", \"enum\", \"\",4\n            Property: \"ViewFrustum\", \"bool\", \"\",1\n            Property: \"ViewFrustumNearFarPlane\", \"bool\", \"\",0\n            Property: \"ViewFrustumBackPlaneMode\", \"enum\", \"\",2\n            Property: \"BackPlaneDistance\", \"double\", \"\",100\n            Property: \"BackPlaneDistanceMode\", \"enum\", \"\",0\n            Property: \"ViewCameraToLookAt\", \"bool\", \"\",1\n            Property: \"LockMode\", \"bool\", \"\",0\n            Property: \"LockInterestNavigation\", \"bool\", \"\",0\n            Property: \"FitImage\", \"bool\", \"\",0\n            Property: \"Crop\", \"bool\", \"\",0\n            Property: \"Center\", \"bool\", \"\",1\n            Property: \"KeepRatio\", \"bool\", \"\",1\n            Property: \"BackgroundMode\", \"enum\", \"\",0\n            Property: \"BackgroundAlphaTreshold\", \"double\", \"\",0.5\n            Property: \"ForegroundTransparent\", \"bool\", \"\",1\n            Property: \"DisplaySafeArea\", \"bool\", \"\",0\n            Property: \"SafeAreaDisplayStyle\", \"enum\", \"\",1\n            Property: \"SafeAreaAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"Use2DMagnifierZoom\", \"bool\", \"\",0\n            Property: \"2D Magnifier Zoom\", \"Real\", \"A+\",100\n            Property: \"2D Magnifier X\", \"Real\", \"A+\",50\n            Property: \"2D Magnifier Y\", \"Real\", \"A+\",50\n            Property: \"CameraProjectionType\", \"enum\", \"\",1\n            Property: \"UseRealTimeDOFAndAA\", \"bool\", \"\",0\n            Property: \"UseDepthOfField\", \"bool\", \"\",0\n            Property: \"FocusSource\", \"enum\", \"\",0\n            Property: \"FocusAngle\", \"double\", \"\",3.5\n            Property: \"FocusDistance\", \"double\", \"\",200\n            Property: \"UseAntialiasing\", \"bool\", \"\",0\n            Property: \"AntialiasingIntensity\", \"double\", \"\",0.77777\n            Property: \"UseAccumulationBuffer\", \"bool\", \"\",0\n            Property: \"FrameSamplingCount\", \"int\", \"\",7\n        }\n        MultiLayer: 0\n        MultiTake: 0\n        Hidden: \"True\"\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Camera\"\n        GeometryVersion: 124\n        Position: 0,4000,0\n        Up: 0,0,-1\n        LookAt: 0,0,0\n        ShowInfoOnMoving: 1\n        ShowAudio: 0\n        AudioColor: 0,1,0\n        CameraOrthoZoom: 1\n    }\n    Model: \"Model::Producer Bottom\", \"Camera\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",0\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",0\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",0\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0,-4000,0\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Roll\", \"Roll\", \"A+\",0\n            Property: \"OpticalCenterX\", \"Real\", \"A+\",0\n            Property: \"OpticalCenterY\", \"Real\", \"A+\",0\n            Property: \"BackgroundColor\", \"Color\", \"A+\",0.63,0.63,0.63\n            Property: \"TurnTable\", \"Real\", \"A+\",0\n            Property: \"DisplayTurnTableIcon\", \"bool\", \"\",1\n            Property: \"Motion Blur Intensity\", \"Real\", \"A+\",1\n            Property: \"UseMotionBlur\", \"bool\", \"\",0\n            Property: \"UseRealTimeMotionBlur\", \"bool\", \"\",1\n            Property: \"ResolutionMode\", \"enum\", \"\",0\n            Property: \"ApertureMode\", \"enum\", \"\",2\n            Property: \"GateFit\", \"enum\", \"\",0\n            Property: \"FieldOfView\", \"FieldOfView\", \"A+\",40\n            Property: \"FieldOfViewX\", \"FieldOfView\", \"A+\",1\n            Property: \"FieldOfViewY\", \"FieldOfView\", \"A+\",1\n            Property: \"FocalLength\", \"Real\", \"A+\",21.3544940948486\n            Property: \"CameraFormat\", \"enum\", \"\",0\n            Property: \"AspectW\", \"double\", \"\",320\n            Property: \"AspectH\", \"double\", \"\",200\n            Property: \"PixelAspectRatio\", \"double\", \"\",1\n            Property: \"UseFrameColor\", \"bool\", \"\",0\n            Property: \"FrameColor\", \"ColorRGB\", \"\",0.3,0.3,0.3\n            Property: \"ShowName\", \"bool\", \"\",1\n            Property: \"ShowGrid\", \"bool\", \"\",1\n            Property: \"ShowOpticalCenter\", \"bool\", \"\",0\n            Property: \"ShowAzimut\", \"bool\", \"\",1\n            Property: \"ShowTimeCode\", \"bool\", \"\",0\n            Property: \"NearPlane\", \"double\", \"\",1\n            Property: \"FarPlane\", \"double\", \"\",30000\n            Property: \"FilmWidth\", \"double\", \"\",0.816\n            Property: \"FilmHeight\", \"double\", \"\",0.612\n            Property: \"FilmAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"FilmSqueezeRatio\", \"double\", \"\",1\n            Property: \"FilmFormatIndex\", \"enum\", \"\",4\n            Property: \"ViewFrustum\", \"bool\", \"\",1\n            Property: \"ViewFrustumNearFarPlane\", \"bool\", \"\",0\n            Property: \"ViewFrustumBackPlaneMode\", \"enum\", \"\",2\n            Property: \"BackPlaneDistance\", \"double\", \"\",100\n            Property: \"BackPlaneDistanceMode\", \"enum\", \"\",0\n            Property: \"ViewCameraToLookAt\", \"bool\", \"\",1\n            Property: \"LockMode\", \"bool\", \"\",0\n            Property: \"LockInterestNavigation\", \"bool\", \"\",0\n            Property: \"FitImage\", \"bool\", \"\",0\n            Property: \"Crop\", \"bool\", \"\",0\n            Property: \"Center\", \"bool\", \"\",1\n            Property: \"KeepRatio\", \"bool\", \"\",1\n            Property: \"BackgroundMode\", \"enum\", \"\",0\n            Property: \"BackgroundAlphaTreshold\", \"double\", \"\",0.5\n            Property: \"ForegroundTransparent\", \"bool\", \"\",1\n            Property: \"DisplaySafeArea\", \"bool\", \"\",0\n            Property: \"SafeAreaDisplayStyle\", \"enum\", \"\",1\n            Property: \"SafeAreaAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"Use2DMagnifierZoom\", \"bool\", \"\",0\n            Property: \"2D Magnifier Zoom\", \"Real\", \"A+\",100\n            Property: \"2D Magnifier X\", \"Real\", \"A+\",50\n            Property: \"2D Magnifier Y\", \"Real\", \"A+\",50\n            Property: \"CameraProjectionType\", \"enum\", \"\",1\n            Property: \"UseRealTimeDOFAndAA\", \"bool\", \"\",0\n            Property: \"UseDepthOfField\", \"bool\", \"\",0\n            Property: \"FocusSource\", \"enum\", \"\",0\n            Property: \"FocusAngle\", \"double\", \"\",3.5\n            Property: \"FocusDistance\", \"double\", \"\",200\n            Property: \"UseAntialiasing\", \"bool\", \"\",0\n            Property: \"AntialiasingIntensity\", \"double\", \"\",0.77777\n            Property: \"UseAccumulationBuffer\", \"bool\", \"\",0\n            Property: \"FrameSamplingCount\", \"int\", \"\",7\n        }\n        MultiLayer: 0\n        MultiTake: 0\n        Hidden: \"True\"\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Camera\"\n        GeometryVersion: 124\n        Position: 0,-4000,0\n        Up: 0,0,-1\n        LookAt: 0,0,0\n        ShowInfoOnMoving: 1\n        ShowAudio: 0\n        AudioColor: 0,1,0\n        CameraOrthoZoom: 1\n    }\n    Model: \"Model::Producer Front\", \"Camera\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",0\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",0\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",0\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0,0,4000\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Roll\", \"Roll\", \"A+\",0\n            Property: \"OpticalCenterX\", \"Real\", \"A+\",0\n            Property: \"OpticalCenterY\", \"Real\", \"A+\",0\n            Property: \"BackgroundColor\", \"Color\", \"A+\",0.63,0.63,0.63\n            Property: \"TurnTable\", \"Real\", \"A+\",0\n            Property: \"DisplayTurnTableIcon\", \"bool\", \"\",1\n            Property: \"Motion Blur Intensity\", \"Real\", \"A+\",1\n            Property: \"UseMotionBlur\", \"bool\", \"\",0\n            Property: \"UseRealTimeMotionBlur\", \"bool\", \"\",1\n            Property: \"ResolutionMode\", \"enum\", \"\",0\n            Property: \"ApertureMode\", \"enum\", \"\",2\n            Property: \"GateFit\", \"enum\", \"\",0\n            Property: \"FieldOfView\", \"FieldOfView\", \"A+\",40\n            Property: \"FieldOfViewX\", \"FieldOfView\", \"A+\",1\n            Property: \"FieldOfViewY\", \"FieldOfView\", \"A+\",1\n            Property: \"FocalLength\", \"Real\", \"A+\",21.3544940948486\n            Property: \"CameraFormat\", \"enum\", \"\",0\n            Property: \"AspectW\", \"double\", \"\",320\n            Property: \"AspectH\", \"double\", \"\",200\n            Property: \"PixelAspectRatio\", \"double\", \"\",1\n            Property: \"UseFrameColor\", \"bool\", \"\",0\n            Property: \"FrameColor\", \"ColorRGB\", \"\",0.3,0.3,0.3\n            Property: \"ShowName\", \"bool\", \"\",1\n            Property: \"ShowGrid\", \"bool\", \"\",1\n            Property: \"ShowOpticalCenter\", \"bool\", \"\",0\n            Property: \"ShowAzimut\", \"bool\", \"\",1\n            Property: \"ShowTimeCode\", \"bool\", \"\",0\n            Property: \"NearPlane\", \"double\", \"\",1\n            Property: \"FarPlane\", \"double\", \"\",30000\n            Property: \"FilmWidth\", \"double\", \"\",0.816\n            Property: \"FilmHeight\", \"double\", \"\",0.612\n            Property: \"FilmAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"FilmSqueezeRatio\", \"double\", \"\",1\n            Property: \"FilmFormatIndex\", \"enum\", \"\",4\n            Property: \"ViewFrustum\", \"bool\", \"\",1\n            Property: \"ViewFrustumNearFarPlane\", \"bool\", \"\",0\n            Property: \"ViewFrustumBackPlaneMode\", \"enum\", \"\",2\n            Property: \"BackPlaneDistance\", \"double\", \"\",100\n            Property: \"BackPlaneDistanceMode\", \"enum\", \"\",0\n            Property: \"ViewCameraToLookAt\", \"bool\", \"\",1\n            Property: \"LockMode\", \"bool\", \"\",0\n            Property: \"LockInterestNavigation\", \"bool\", \"\",0\n            Property: \"FitImage\", \"bool\", \"\",0\n            Property: \"Crop\", \"bool\", \"\",0\n            Property: \"Center\", \"bool\", \"\",1\n            Property: \"KeepRatio\", \"bool\", \"\",1\n            Property: \"BackgroundMode\", \"enum\", \"\",0\n            Property: \"BackgroundAlphaTreshold\", \"double\", \"\",0.5\n            Property: \"ForegroundTransparent\", \"bool\", \"\",1\n            Property: \"DisplaySafeArea\", \"bool\", \"\",0\n            Property: \"SafeAreaDisplayStyle\", \"enum\", \"\",1\n            Property: \"SafeAreaAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"Use2DMagnifierZoom\", \"bool\", \"\",0\n            Property: \"2D Magnifier Zoom\", \"Real\", \"A+\",100\n            Property: \"2D Magnifier X\", \"Real\", \"A+\",50\n            Property: \"2D Magnifier Y\", \"Real\", \"A+\",50\n            Property: \"CameraProjectionType\", \"enum\", \"\",1\n            Property: \"UseRealTimeDOFAndAA\", \"bool\", \"\",0\n            Property: \"UseDepthOfField\", \"bool\", \"\",0\n            Property: \"FocusSource\", \"enum\", \"\",0\n            Property: \"FocusAngle\", \"double\", \"\",3.5\n            Property: \"FocusDistance\", \"double\", \"\",200\n            Property: \"UseAntialiasing\", \"bool\", \"\",0\n            Property: \"AntialiasingIntensity\", \"double\", \"\",0.77777\n            Property: \"UseAccumulationBuffer\", \"bool\", \"\",0\n            Property: \"FrameSamplingCount\", \"int\", \"\",7\n        }\n        MultiLayer: 0\n        MultiTake: 0\n        Hidden: \"True\"\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Camera\"\n        GeometryVersion: 124\n        Position: 0,0,4000\n        Up: 0,1,0\n        LookAt: 0,0,0\n        ShowInfoOnMoving: 1\n        ShowAudio: 0\n        AudioColor: 0,1,0\n        CameraOrthoZoom: 1\n    }\n    Model: \"Model::Producer Back\", \"Camera\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",0\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",0\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",0\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",0,0,-4000\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Roll\", \"Roll\", \"A+\",0\n            Property: \"OpticalCenterX\", \"Real\", \"A+\",0\n            Property: \"OpticalCenterY\", \"Real\", \"A+\",0\n            Property: \"BackgroundColor\", \"Color\", \"A+\",0.63,0.63,0.63\n            Property: \"TurnTable\", \"Real\", \"A+\",0\n            Property: \"DisplayTurnTableIcon\", \"bool\", \"\",1\n            Property: \"Motion Blur Intensity\", \"Real\", \"A+\",1\n            Property: \"UseMotionBlur\", \"bool\", \"\",0\n            Property: \"UseRealTimeMotionBlur\", \"bool\", \"\",1\n            Property: \"ResolutionMode\", \"enum\", \"\",0\n            Property: \"ApertureMode\", \"enum\", \"\",2\n            Property: \"GateFit\", \"enum\", \"\",0\n            Property: \"FieldOfView\", \"FieldOfView\", \"A+\",40\n            Property: \"FieldOfViewX\", \"FieldOfView\", \"A+\",1\n            Property: \"FieldOfViewY\", \"FieldOfView\", \"A+\",1\n            Property: \"FocalLength\", \"Real\", \"A+\",21.3544940948486\n            Property: \"CameraFormat\", \"enum\", \"\",0\n            Property: \"AspectW\", \"double\", \"\",320\n            Property: \"AspectH\", \"double\", \"\",200\n            Property: \"PixelAspectRatio\", \"double\", \"\",1\n            Property: \"UseFrameColor\", \"bool\", \"\",0\n            Property: \"FrameColor\", \"ColorRGB\", \"\",0.3,0.3,0.3\n            Property: \"ShowName\", \"bool\", \"\",1\n            Property: \"ShowGrid\", \"bool\", \"\",1\n            Property: \"ShowOpticalCenter\", \"bool\", \"\",0\n            Property: \"ShowAzimut\", \"bool\", \"\",1\n            Property: \"ShowTimeCode\", \"bool\", \"\",0\n            Property: \"NearPlane\", \"double\", \"\",1\n            Property: \"FarPlane\", \"double\", \"\",30000\n            Property: \"FilmWidth\", \"double\", \"\",0.816\n            Property: \"FilmHeight\", \"double\", \"\",0.612\n            Property: \"FilmAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"FilmSqueezeRatio\", \"double\", \"\",1\n            Property: \"FilmFormatIndex\", \"enum\", \"\",4\n            Property: \"ViewFrustum\", \"bool\", \"\",1\n            Property: \"ViewFrustumNearFarPlane\", \"bool\", \"\",0\n            Property: \"ViewFrustumBackPlaneMode\", \"enum\", \"\",2\n            Property: \"BackPlaneDistance\", \"double\", \"\",100\n            Property: \"BackPlaneDistanceMode\", \"enum\", \"\",0\n            Property: \"ViewCameraToLookAt\", \"bool\", \"\",1\n            Property: \"LockMode\", \"bool\", \"\",0\n            Property: \"LockInterestNavigation\", \"bool\", \"\",0\n            Property: \"FitImage\", \"bool\", \"\",0\n            Property: \"Crop\", \"bool\", \"\",0\n            Property: \"Center\", \"bool\", \"\",1\n            Property: \"KeepRatio\", \"bool\", \"\",1\n            Property: \"BackgroundMode\", \"enum\", \"\",0\n            Property: \"BackgroundAlphaTreshold\", \"double\", \"\",0.5\n            Property: \"ForegroundTransparent\", \"bool\", \"\",1\n            Property: \"DisplaySafeArea\", \"bool\", \"\",0\n            Property: \"SafeAreaDisplayStyle\", \"enum\", \"\",1\n            Property: \"SafeAreaAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"Use2DMagnifierZoom\", \"bool\", \"\",0\n            Property: \"2D Magnifier Zoom\", \"Real\", \"A+\",100\n            Property: \"2D Magnifier X\", \"Real\", \"A+\",50\n            Property: \"2D Magnifier Y\", \"Real\", \"A+\",50\n            Property: \"CameraProjectionType\", \"enum\", \"\",1\n            Property: \"UseRealTimeDOFAndAA\", \"bool\", \"\",0\n            Property: \"UseDepthOfField\", \"bool\", \"\",0\n            Property: \"FocusSource\", \"enum\", \"\",0\n            Property: \"FocusAngle\", \"double\", \"\",3.5\n            Property: \"FocusDistance\", \"double\", \"\",200\n            Property: \"UseAntialiasing\", \"bool\", \"\",0\n            Property: \"AntialiasingIntensity\", \"double\", \"\",0.77777\n            Property: \"UseAccumulationBuffer\", \"bool\", \"\",0\n            Property: \"FrameSamplingCount\", \"int\", \"\",7\n        }\n        MultiLayer: 0\n        MultiTake: 0\n        Hidden: \"True\"\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Camera\"\n        GeometryVersion: 124\n        Position: 0,0,-4000\n        Up: 0,1,0\n        LookAt: 0,0,0\n        ShowInfoOnMoving: 1\n        ShowAudio: 0\n        AudioColor: 0,1,0\n        CameraOrthoZoom: 1\n    }\n    Model: \"Model::Producer Right\", \"Camera\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",0\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",0\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",0\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",4000,0,0\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Roll\", \"Roll\", \"A+\",0\n            Property: \"OpticalCenterX\", \"Real\", \"A+\",0\n            Property: \"OpticalCenterY\", \"Real\", \"A+\",0\n            Property: \"BackgroundColor\", \"Color\", \"A+\",0.63,0.63,0.63\n            Property: \"TurnTable\", \"Real\", \"A+\",0\n            Property: \"DisplayTurnTableIcon\", \"bool\", \"\",1\n            Property: \"Motion Blur Intensity\", \"Real\", \"A+\",1\n            Property: \"UseMotionBlur\", \"bool\", \"\",0\n            Property: \"UseRealTimeMotionBlur\", \"bool\", \"\",1\n            Property: \"ResolutionMode\", \"enum\", \"\",0\n            Property: \"ApertureMode\", \"enum\", \"\",2\n            Property: \"GateFit\", \"enum\", \"\",0\n            Property: \"FieldOfView\", \"FieldOfView\", \"A+\",40\n            Property: \"FieldOfViewX\", \"FieldOfView\", \"A+\",1\n            Property: \"FieldOfViewY\", \"FieldOfView\", \"A+\",1\n            Property: \"FocalLength\", \"Real\", \"A+\",21.3544940948486\n            Property: \"CameraFormat\", \"enum\", \"\",0\n            Property: \"AspectW\", \"double\", \"\",320\n            Property: \"AspectH\", \"double\", \"\",200\n            Property: \"PixelAspectRatio\", \"double\", \"\",1\n            Property: \"UseFrameColor\", \"bool\", \"\",0\n            Property: \"FrameColor\", \"ColorRGB\", \"\",0.3,0.3,0.3\n            Property: \"ShowName\", \"bool\", \"\",1\n            Property: \"ShowGrid\", \"bool\", \"\",1\n            Property: \"ShowOpticalCenter\", \"bool\", \"\",0\n            Property: \"ShowAzimut\", \"bool\", \"\",1\n            Property: \"ShowTimeCode\", \"bool\", \"\",0\n            Property: \"NearPlane\", \"double\", \"\",1\n            Property: \"FarPlane\", \"double\", \"\",30000\n            Property: \"FilmWidth\", \"double\", \"\",0.816\n            Property: \"FilmHeight\", \"double\", \"\",0.612\n            Property: \"FilmAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"FilmSqueezeRatio\", \"double\", \"\",1\n            Property: \"FilmFormatIndex\", \"enum\", \"\",4\n            Property: \"ViewFrustum\", \"bool\", \"\",1\n            Property: \"ViewFrustumNearFarPlane\", \"bool\", \"\",0\n            Property: \"ViewFrustumBackPlaneMode\", \"enum\", \"\",2\n            Property: \"BackPlaneDistance\", \"double\", \"\",100\n            Property: \"BackPlaneDistanceMode\", \"enum\", \"\",0\n            Property: \"ViewCameraToLookAt\", \"bool\", \"\",1\n            Property: \"LockMode\", \"bool\", \"\",0\n            Property: \"LockInterestNavigation\", \"bool\", \"\",0\n            Property: \"FitImage\", \"bool\", \"\",0\n            Property: \"Crop\", \"bool\", \"\",0\n            Property: \"Center\", \"bool\", \"\",1\n            Property: \"KeepRatio\", \"bool\", \"\",1\n            Property: \"BackgroundMode\", \"enum\", \"\",0\n            Property: \"BackgroundAlphaTreshold\", \"double\", \"\",0.5\n            Property: \"ForegroundTransparent\", \"bool\", \"\",1\n            Property: \"DisplaySafeArea\", \"bool\", \"\",0\n            Property: \"SafeAreaDisplayStyle\", \"enum\", \"\",1\n            Property: \"SafeAreaAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"Use2DMagnifierZoom\", \"bool\", \"\",0\n            Property: \"2D Magnifier Zoom\", \"Real\", \"A+\",100\n            Property: \"2D Magnifier X\", \"Real\", \"A+\",50\n            Property: \"2D Magnifier Y\", \"Real\", \"A+\",50\n            Property: \"CameraProjectionType\", \"enum\", \"\",1\n            Property: \"UseRealTimeDOFAndAA\", \"bool\", \"\",0\n            Property: \"UseDepthOfField\", \"bool\", \"\",0\n            Property: \"FocusSource\", \"enum\", \"\",0\n            Property: \"FocusAngle\", \"double\", \"\",3.5\n            Property: \"FocusDistance\", \"double\", \"\",200\n            Property: \"UseAntialiasing\", \"bool\", \"\",0\n            Property: \"AntialiasingIntensity\", \"double\", \"\",0.77777\n            Property: \"UseAccumulationBuffer\", \"bool\", \"\",0\n            Property: \"FrameSamplingCount\", \"int\", \"\",7\n        }\n        MultiLayer: 0\n        MultiTake: 0\n        Hidden: \"True\"\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Camera\"\n        GeometryVersion: 124\n        Position: 4000,0,0\n        Up: 0,1,0\n        LookAt: 0,0,0\n        ShowInfoOnMoving: 1\n        ShowAudio: 0\n        AudioColor: 0,1,0\n        CameraOrthoZoom: 1\n    }\n    Model: \"Model::Producer Left\", \"Camera\" {\n        Version: 232\n        Properties60:  {\n            Property: \"QuaternionInterpolate\", \"bool\", \"\",0\n            Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\n            Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationActive\", \"bool\", \"\",0\n            Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"TranslationMinX\", \"bool\", \"\",0\n            Property: \"TranslationMinY\", \"bool\", \"\",0\n            Property: \"TranslationMinZ\", \"bool\", \"\",0\n            Property: \"TranslationMaxX\", \"bool\", \"\",0\n            Property: \"TranslationMaxY\", \"bool\", \"\",0\n            Property: \"TranslationMaxZ\", \"bool\", \"\",0\n            Property: \"RotationOrder\", \"enum\", \"\",0\n            Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\n            Property: \"RotationStiffnessX\", \"double\", \"\",0\n            Property: \"RotationStiffnessY\", \"double\", \"\",0\n            Property: \"RotationStiffnessZ\", \"double\", \"\",0\n            Property: \"AxisLen\", \"double\", \"\",10\n            Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationActive\", \"bool\", \"\",0\n            Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\n            Property: \"RotationMinX\", \"bool\", \"\",0\n            Property: \"RotationMinY\", \"bool\", \"\",0\n            Property: \"RotationMinZ\", \"bool\", \"\",0\n            Property: \"RotationMaxX\", \"bool\", \"\",0\n            Property: \"RotationMaxY\", \"bool\", \"\",0\n            Property: \"RotationMaxZ\", \"bool\", \"\",0\n            Property: \"InheritType\", \"enum\", \"\",0\n            Property: \"ScalingActive\", \"bool\", \"\",0\n            Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\n            Property: \"ScalingMinX\", \"bool\", \"\",0\n            Property: \"ScalingMinY\", \"bool\", \"\",0\n            Property: \"ScalingMinZ\", \"bool\", \"\",0\n            Property: \"ScalingMaxX\", \"bool\", \"\",0\n            Property: \"ScalingMaxY\", \"bool\", \"\",0\n            Property: \"ScalingMaxZ\", \"bool\", \"\",0\n            Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\n            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\n            Property: \"MinDampRangeX\", \"double\", \"\",0\n            Property: \"MinDampRangeY\", \"double\", \"\",0\n            Property: \"MinDampRangeZ\", \"double\", \"\",0\n            Property: \"MaxDampRangeX\", \"double\", \"\",0\n            Property: \"MaxDampRangeY\", \"double\", \"\",0\n            Property: \"MaxDampRangeZ\", \"double\", \"\",0\n            Property: \"MinDampStrengthX\", \"double\", \"\",0\n            Property: \"MinDampStrengthY\", \"double\", \"\",0\n            Property: \"MinDampStrengthZ\", \"double\", \"\",0\n            Property: \"MaxDampStrengthX\", \"double\", \"\",0\n            Property: \"MaxDampStrengthY\", \"double\", \"\",0\n            Property: \"MaxDampStrengthZ\", \"double\", \"\",0\n            Property: \"PreferedAngleX\", \"double\", \"\",0\n            Property: \"PreferedAngleY\", \"double\", \"\",0\n            Property: \"PreferedAngleZ\", \"double\", \"\",0\n            Property: \"LookAtProperty\", \"object\", \"\"\n            Property: \"UpVectorProperty\", \"object\", \"\"\n            Property: \"Show\", \"bool\", \"\",0\n            Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\n            Property: \"DefaultAttributeIndex\", \"int\", \"\",0\n            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\",-4000,0,0\n            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\",0,0,0\n            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\n            Property: \"Visibility\", \"Visibility\", \"A+\",0\n            Property: \"Color\", \"Color\", \"A\",0.8,0.8,0.8\n            Property: \"Roll\", \"Roll\", \"A+\",0\n            Property: \"OpticalCenterX\", \"Real\", \"A+\",0\n            Property: \"OpticalCenterY\", \"Real\", \"A+\",0\n            Property: \"BackgroundColor\", \"Color\", \"A+\",0.63,0.63,0.63\n            Property: \"TurnTable\", \"Real\", \"A+\",0\n            Property: \"DisplayTurnTableIcon\", \"bool\", \"\",1\n            Property: \"Motion Blur Intensity\", \"Real\", \"A+\",1\n            Property: \"UseMotionBlur\", \"bool\", \"\",0\n            Property: \"UseRealTimeMotionBlur\", \"bool\", \"\",1\n            Property: \"ResolutionMode\", \"enum\", \"\",0\n            Property: \"ApertureMode\", \"enum\", \"\",2\n            Property: \"GateFit\", \"enum\", \"\",0\n            Property: \"FieldOfView\", \"FieldOfView\", \"A+\",40\n            Property: \"FieldOfViewX\", \"FieldOfView\", \"A+\",1\n            Property: \"FieldOfViewY\", \"FieldOfView\", \"A+\",1\n            Property: \"FocalLength\", \"Real\", \"A+\",21.3544940948486\n            Property: \"CameraFormat\", \"enum\", \"\",0\n            Property: \"AspectW\", \"double\", \"\",320\n            Property: \"AspectH\", \"double\", \"\",200\n            Property: \"PixelAspectRatio\", \"double\", \"\",1\n            Property: \"UseFrameColor\", \"bool\", \"\",0\n            Property: \"FrameColor\", \"ColorRGB\", \"\",0.3,0.3,0.3\n            Property: \"ShowName\", \"bool\", \"\",1\n            Property: \"ShowGrid\", \"bool\", \"\",1\n            Property: \"ShowOpticalCenter\", \"bool\", \"\",0\n            Property: \"ShowAzimut\", \"bool\", \"\",1\n            Property: \"ShowTimeCode\", \"bool\", \"\",0\n            Property: \"NearPlane\", \"double\", \"\",1\n            Property: \"FarPlane\", \"double\", \"\",30000\n            Property: \"FilmWidth\", \"double\", \"\",0.816\n            Property: \"FilmHeight\", \"double\", \"\",0.612\n            Property: \"FilmAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"FilmSqueezeRatio\", \"double\", \"\",1\n            Property: \"FilmFormatIndex\", \"enum\", \"\",4\n            Property: \"ViewFrustum\", \"bool\", \"\",1\n            Property: \"ViewFrustumNearFarPlane\", \"bool\", \"\",0\n            Property: \"ViewFrustumBackPlaneMode\", \"enum\", \"\",2\n            Property: \"BackPlaneDistance\", \"double\", \"\",100\n            Property: \"BackPlaneDistanceMode\", \"enum\", \"\",0\n            Property: \"ViewCameraToLookAt\", \"bool\", \"\",1\n            Property: \"LockMode\", \"bool\", \"\",0\n            Property: \"LockInterestNavigation\", \"bool\", \"\",0\n            Property: \"FitImage\", \"bool\", \"\",0\n            Property: \"Crop\", \"bool\", \"\",0\n            Property: \"Center\", \"bool\", \"\",1\n            Property: \"KeepRatio\", \"bool\", \"\",1\n            Property: \"BackgroundMode\", \"enum\", \"\",0\n            Property: \"BackgroundAlphaTreshold\", \"double\", \"\",0.5\n            Property: \"ForegroundTransparent\", \"bool\", \"\",1\n            Property: \"DisplaySafeArea\", \"bool\", \"\",0\n            Property: \"SafeAreaDisplayStyle\", \"enum\", \"\",1\n            Property: \"SafeAreaAspectRatio\", \"double\", \"\",1.33333333333333\n            Property: \"Use2DMagnifierZoom\", \"bool\", \"\",0\n            Property: \"2D Magnifier Zoom\", \"Real\", \"A+\",100\n            Property: \"2D Magnifier X\", \"Real\", \"A+\",50\n            Property: \"2D Magnifier Y\", \"Real\", \"A+\",50\n            Property: \"CameraProjectionType\", \"enum\", \"\",1\n            Property: \"UseRealTimeDOFAndAA\", \"bool\", \"\",0\n            Property: \"UseDepthOfField\", \"bool\", \"\",0\n            Property: \"FocusSource\", \"enum\", \"\",0\n            Property: \"FocusAngle\", \"double\", \"\",3.5\n            Property: \"FocusDistance\", \"double\", \"\",200\n            Property: \"UseAntialiasing\", \"bool\", \"\",0\n            Property: \"AntialiasingIntensity\", \"double\", \"\",0.77777\n            Property: \"UseAccumulationBuffer\", \"bool\", \"\",0\n            Property: \"FrameSamplingCount\", \"int\", \"\",7\n        }\n        MultiLayer: 0\n        MultiTake: 0\n        Hidden: \"True\"\n        Shading: Y\n        Culling: \"CullingOff\"\n        TypeFlags: \"Camera\"\n        GeometryVersion: 124\n        Position: -4000,0,0\n        Up: 0,1,0\n        LookAt: 0,0,0\n        ShowInfoOnMoving: 1\n        ShowAudio: 0\n        AudioColor: 0,1,0\n        CameraOrthoZoom: 1\n    }\n    Pose: \"Pose::skinCluster3\", \"BindPose\" {\n        Type: \"BindPose\"\n        Version: 100\n        Properties60:  {\n        }\n        NbPoseNodes: 59\n        PoseNode:  {\n            Node: \"Model::him\"\n            Matrix: 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1\n        }\n        PoseNode:  {\n            Node: \"Model::Root\"\n            Matrix: 1.33158055981697e-006,-5.5511151231309e-017,1.00000000000003,0,1,1.66752833763587e-010,-1.33158055981693e-006\n             ,0,-1.66752944785748e-010,1.00000000000004,2.22044604925039e-016,0,0.0375633844953955,37.4609861130865,2.23054871115166\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::Pelvis\"\n            Matrix: -1.66752944785752e-010,1.00000000000094,3.33066907387862e-016,0,2.75770739245021e-006,-3.97450655096411e-017\n             ,1.00000000000003,0,1.00000000000091,1.66752833764135e-010,-2.75770739256375e-006,0,0.0375620733105228,37.4609888630758\n             ,1.27468111719239,1\n        }\n        PoseNode:  {\n            Node: \"Model::Spine\"\n            Matrix: 1.24029684198113e-006,0.995498838507049,-0.0947735868260166,0,-1.27428576289917e-006,0.0947735868271358,0.995498838507889\n             ,0,0.999999999999406,-1.1139454664704e-006,1.38609741848246e-006,0,0.0375671700624984,41.2469948552468,1.27108130580428\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::Spine1\"\n            Matrix: 1.03960780457953e-006,0.98074971266116,-0.19526913922047,0,-1.1645631082995e-006,0.195269139221088,0.980749712661819\n             ,0,0.999999999999837,-7.92191801362473e-007,1.34514820815766e-006,0,0.0375726762066018,45.7695196641318,0.836911606169505\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Thigh1\"\n            Matrix: 0.210985191505916,-0.975253732219803,0.0660718325861944,0,0.177993635259534,0.104794326230727,0.978435668241952\n             ,0,-0.961146957227345,-0.194675058661601,0.195698995513005,0,3.5327074628724,37.4609841497582,1.27467801962757\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Thigh\"\n            Matrix: -0.210987587098956,-0.975253163175659,0.0660724603122853,0,-0.177990489435915,0.104794812011874,0.97843623227106\n             ,0,-0.961147083401435,0.194677624807938,-0.195696186916594,0,-3.45758308113989,37.4609935763943,1.27468759391711\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::Spine2\"\n            Matrix: 1.15766800847204e-006,0.995290550202889,-0.0969362439528012,0,-1.28535910910391e-006,0.0969362439538238,0.995290550203612\n             ,0,0.999999999999517,-1.02761825064411e-006,1.3915258848223e-006,0,0.0375774663776998,50.2253922781078,-0.0539313180359257\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Knee2\"\n            Matrix: 0.140922950790799,-0.955665576234115,-0.258542307170597,0,0.237354544212354,-0.220918711872771,0.945969229345032\n             ,0,-0.961146961126678,-0.194674940381941,0.195699024114051,0,7.38470396372674,19.6555865808851,2.48096457007616\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Knee\"\n            Matrix: -0.140926372210181,-0.955665194315514,-0.258541892648224,0,-0.23735235663778,-0.220918035591436,0.945969990525419\n             ,0,-0.961147085585364,0.194677625250286,-0.195696187361257,0,-7.30962477938486,19.6556065018375,2.48098499916812\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::Spine3\"\n            Matrix: 0.0267457025467083,0.997222184485877,-0.0695175881175487,0,0.0695652398894222,0.0675171408584094,0.99529002121809\n             ,0,0.997218805426799,-0.0314557323172693,-0.067566193734535,0,0.037582954481531,54.7475266033293,-0.498784000447107\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Ankle1\"\n            Matrix: -0.00974436259181705,-0.998083556732566,-0.0611084168461832,0,0.261574774854858,-0.0615276811691846,0.963220090472259\n             ,0,-0.965134004335868,-0.00659841591207144,0.261673027918648,0,9.55886480195558,4.91157385166946,-1.50782703524102\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Ankle\"\n            Matrix: 0.00974138551962694,-0.998083577574783,-0.0611084475807566,0,-0.26157229002768,-0.0615269335133899,0.963220845632343\n             ,0,-0.965134744120757,0.00660116199430494,-0.261670363784603,0,-9.48383716527764,4.91159968219961,-1.50780021776383\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::Neck\"\n            Matrix: 0.0524868392889062,0.940038670507985,0.337005085889192,0,0.0529138494736022,-0.339614137295755,0.939075268843438\n             ,0,0.997218760704303,-0.0314568537088636,-0.0675663317258446,0,0.185453422192648,60.2682047905477,-0.886519744810882\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Ball\"\n            Matrix: 0.255589775823783,0.19195411195591,0.947537621302088,0,-0.0564815951498304,0.981381805094744,-0.183574958091845\n             ,0,-0.965134008856972,-0.00659851424383035,0.261672987109975,0,11.1487853847708,-0.714600338285195,4.21443710294172\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Ball\"\n            Matrix: -0.25558666067715,0.191954823954638,0.947538281383767,0,0.0564837267618767,0.981381639119508,-0.183575147793249\n             ,0,-0.965134739912784,0.00660112479013478,-0.261670355112633,0,-11.0737572844988,-0.714570040351037,4.21446814199767\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::Head\"\n            Matrix: 0.0413181877665486,0.987834399898251,0.149920513802912,0,0.062028292927883,-0.152295266367851,0.986386738366224\n             ,0,0.99721878219907,-0.0314563913752569,-0.067566229726332,0,0.392981060570839,63.9850191920975,0.445964203562684\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Clavicle\"\n            Matrix: 0.978469078551498,-0.19899715238426,-0.0547582098290914,0,-0.069589287242088,-0.0683111384044164,-0.995234104790114\n             ,0,0.194308156552106,0.977616366684517,-0.0806884043782442,0,1.34840940139458,60.2019324480378,-1.79660442619341\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Clavicle\"\n            Matrix: -0.987461923011747,-0.13698449419504,0.0784481919759329,0,-0.0695892727841481,-0.0683111257247411,-0.995234106778274\n             ,0,0.141690531380276,-0.988214994757188,0.0579219885650571,0,-1.09138459344411,60.2788924913577,-1.63129036253243\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_eye_joint1\"\n            Matrix: 0.99333167408321,-0.0244486008617004,-0.112669652304996,0,0.107633609793549,-0.153576100459397,0.98225737079121\n             ,0,-0.0413181877665494,-0.98783439989825,-0.149920513802916,0,2.04555419810496,67.8963551483937,2.37140015218962\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_eye_joint\"\n            Matrix: 0.99333167408321,-0.0244486008617004,-0.112669652304996,0,0.107633609793549,-0.153576100459397,0.98225737079121\n             ,0,-0.0413181877665494,-0.98783439989825,-0.149920513802916,0,-0.409936873234029,68.0595129473661,2.4771378649045\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_eyeBall_joint2\"\n            Matrix: 0.0413367875848507,0.987788683622589,0.150216314763167,0,0.124663367302492,-0.154268945761706,0.980132793135531\n             ,0,0.991337639848011,-0.0217890619226689,-0.129518029951179,0,2.05070439627867,67.878345659435,4.23560315393477\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_eyeBall_joint\"\n            Matrix: 0.0387875582448076,0.985236212535225,0.166749169520768,0,0.100028336113103,-0.1698648688521,0.980377689145253\n             ,0,0.994228272900296,-0.0213468072050495,-0.105140166318426,0,-0.429499383170284,68.0711452108758,4.27851568464557\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_UpperArm\"\n            Matrix: 0.674535534616324,-0.734845412587802,0.0707395700590386,0,-0.00572428097575982,-0.101024952776188,-0.994867403846182\n             ,0,0.738220225503697,0.670668478827922,-0.0723513795484483,0,8.04491907067728,58.8400224990099,-2.17136220574529\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_UpperArm\"\n            Matrix: -0.703610256733915,-0.691373653145981,0.164119291692498,0,-0.1347478692944,-0.0969550739362427,-0.986125182940114\n             ,0,0.697693056382247,-0.715962484913526,-0.0249425301025703,0,-7.84944071573371,59.3413887525868,-1.09440146152723\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Forearm\"\n            Matrix: 0.662227001235097,-0.700126797308046,0.266979158818587,0,0.128399382035873,-0.245002469789134,-0.960982554234246\n             ,0,0.738220180823852,0.670668526064849,-0.0723513975612902,0,16.9097893109037,49.1825482190907,-1.24168969306059\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Forearm\"\n            Matrix: -0.662814701550135,-0.65833014375124,0.356760672082372,0,-0.271847634986037,-0.232377145821934,-0.933862759981466\n             ,0,0.697692990233294,-0.715962550614917,-0.0249424944978314,0,-17.0964154474492,50.2552282683214,1.06248452295354\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Hand\"\n            Matrix: 0.525245261158389,-0.819456511598867,0.229365340473718,0,-0.790238340982239,-0.569703536988409,-0.225746104342684\n             ,0,0.315659364239265,-0.0626812373747693,-0.946800025542229,0,24.0787631140926,41.6032895272955,1.6485065671716\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Hand\"\n            Matrix: -0.539910124506363,-0.785857706458226,0.301537587819719,0,0.715295250733165,-0.617193555619553,-0.327757250060974\n             ,0,0.443677562763431,0.0387289149319088,0.895349262736555,0,-24.2717529148383,43.1284417167981,4.92461529417918\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Thumb1\"\n            Matrix: -0.241495132730921,-0.623205901261989,0.74383772606254,0,0.74882388880975,-0.60721234791625,-0.265623820790119\n             ,0,0.61720575088779,0.492856585321279,0.613310267810766,0,23.907239967734,40.0198169594799,3.46924073788322,1\n             \n        }\n        PoseNode:  {\n            Node: \"Model::L_Index1\"\n            Matrix: 0.476186922188061,-0.826192452107739,0.30108482700071,0,-0.714199475385093,-0.563128923203692,-0.415698178519829\n             ,0,0.512996263158813,-0.0170846090838862,-0.858220820124501,0,25.8572264968031,38.1282899455549,4.12055942809326\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Middle1\"\n            Matrix: 0.570318660983103,-0.809442163568181,0.13978575995208,0,-0.773811834783023,-0.586520001785938,-0.239185251125484\n             ,0,0.275593789834533,0.0282439112719806,-0.960859260283435,0,26.2532517128633,38.0536303136344,2.99594441017406\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Ring1\"\n            Matrix: 0.58288563544361,-0.812067739772282,-0.0281118678441426,0,-0.810871911031163,-0.579105536366181,-0.0844006630517097\n             ,0,0.0522593310342686,0.0719910332368333,-0.996035291673013,0,26.6641372400988,38.0871363638132,1.89145970528058\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Pinky1\"\n            Matrix: 0.467138990032661,-0.86540714932335,-0.1812501889475,0,-0.863910088514665,-0.490380893925407,0.114830513043787\n             ,0,-0.188256761855405,0.102942021367097,-0.976709968746014,0,26.5389279380321,38.1112872763109,0.859131146820495\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Thumb1\"\n            Matrix: 0.299955264051308,-0.640285298618272,0.707150444388401,0,-0.814394997426312,-0.557902711924946,-0.159703974445855\n             ,0,0.496777192390993,-0.527995676382642,-0.688790919898989,0,-23.9561106277145,41.5296020162524,6.71234048568143\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Index1\"\n            Matrix: -0.482154356012774,-0.795962880036411,0.366019579093359,0,0.614915285773909,-0.605054061971992,-0.505755637789783\n             ,0,0.624024310384197,-0.0187812660351121,0.781179170712812,0,-25.9153301313679,39.7613856649882,7.62853698134705\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Middle1\"\n            Matrix: -0.595926399395956,-0.772654529636261,0.21880759560448,0,0.696185127521994,-0.632889114944885,-0.338788554082281\n             ,0,0.400247429545363,-0.0495624932684929,0.91506592530629,0,-26.463194722499,39.7164998561171,6.56787767402416\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Ring1\"\n            Matrix: -0.631144710533568,-0.773772868523889,0.0541477347483783,0,0.754157767297867,-0.62847227279389,-0.190443192019585\n             ,0,0.181390093764703,-0.0793613433479259,0.980203763672088,0,-27.0162528423477,39.7804122897328,5.52870707356913\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Pinky1\"\n            Matrix: -0.540667622835062,-0.833617327916268,-0.112963789652428,0,0.839021778202407,-0.544097550461574,-0.000555890927663861\n             ,0,-0.0609999443314432,-0.0950797095804421,0.993598968834152,0,-27.0300412701334,39.8010486385352,4.4888290833198\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Thumb2\"\n            Matrix: -0.135155863907165,-0.701497726806397,0.699738402577797,0,0.775106460820417,-0.51477500599991,-0.366355962170193\n             ,0,0.617205698961515,0.492856600851178,0.61331027335005,0,23.6318315714115,39.3090915103631,4.31753622028422\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Index2\"\n            Matrix: 0.341297822230993,-0.913316665732874,0.222190005900152,0,-0.787623428108624,-0.406891557875956,-0.462697112986676\n             ,0,0.512996245106644,-0.0170845579613056,-0.858220834352026,0,26.5589812285729,36.910733644079,4.56426645349348\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Middle2\"\n            Matrix: 0.499759799299395,-0.858072301605573,0.118118678235241,0,-0.821150580980059,-0.512751598060226,-0.250594545036832\n             ,0,0.2755938001527,0.0282438330507944,-0.960859246286125,0,27.1253418110482,36.8158938867169,3.20969391712155\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Ring2\"\n            Matrix: 0.387236996149533,-0.920820121873301,-0.046237373153508,0,-0.920497964015052,-0.383285351135722,-0.0759990709055018\n             ,0,0.052259374558384,0.0719910279667962,-0.996035292644419,0,27.4821214428528,36.9475330246914,1.85200927333924\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Pinky2\"\n            Matrix: 0.467138990032661,-0.86540714932335,-0.1812501889475,0,-0.863910088514665,-0.490380893925407,0.114830513043787\n             ,0,-0.188256761855405,0.102942021367097,-0.976709968746014,0,27.0676322099866,37.1318253052027,0.653993696506666\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Thumb2\"\n            Matrix: 0.183942672645697,-0.711563369205016,0.678117059737729,0,-0.848161196618615,-0.463571215689533,-0.256367513175262\n             ,0,0.496777269596991,-0.52799564816841,-0.68879096195946,0,-23.6140335044233,40.7993987668532,7.51879688568199\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Index2\"\n            Matrix: -0.364861769159626,-0.891041931293543,0.270037532993132,0,0.690991774155602,-0.45353240699875,-0.562884345430602\n             ,0,0.624024271802067,-0.0187812798263943,0.78117923606601,0,-26.6258774379163,38.588378479262,8.16793742758162\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Middle2\"\n            Matrix: -0.532122282112629,-0.825523064728124,0.188036378951055,0,0.746088418575545,-0.562188027154702,-0.356786686762729\n             ,0,0.400247390778701,-0.0495624225379808,0.915065924284819,0,-27.3744398996367,38.5350163451575,6.902461468954\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Ring2\"\n            Matrix: -0.446935139950889,-0.894507302286969,0.0102839893074999,0,0.875983248722551,-0.439952916617308,-0.197724129284052\n             ,0,0.181390106308193,-0.0793613189517498,0.98020376496034,0,-27.9019606689573,38.6945496193369,5.60469461416785\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Pinky2\"\n            Matrix: -0.5406675646503,-0.833617365648527,-0.112963789690979,0,0.839021814302138,-0.544097494825449,-0.000555860376745012\n             ,0,-0.0609999635143494,-0.0950796971405138,0.993598968846862,0,-27.6419641277959,38.8575661966203,4.36097765072208\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Thumb3\"\n            Matrix: -0.150316369043588,-0.691277124434889,0.706782057371717,0,0.772309497099311,-0.528420538698419,-0.352575863363785\n             ,0,0.61720584336029,0.492856632260411,0.613310211936847,0,23.4449809601311,38.3392942259419,5.2849036370461,1\n             \n        }\n        PoseNode:  {\n            Node: \"Model::L_Index3\"\n            Matrix: 0.341297822230993,-0.913316665732874,0.222190005900152,0,-0.787623428108624,-0.406891557875956,-0.462697112986676\n             ,0,0.512996245106644,-0.0170845579613056,-0.858220834352026,0,26.9217272116612,35.9400189097872,4.80042005026002\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Middle3\"\n            Matrix: 0.444149191605448,-0.890216436988675,0.101223529453903,0,-0.85251369302479,-0.454661417782185,-0.257882648909561\n             ,0,0.275593828665205,0.0282439000328089,-0.960859249476387,0,27.8895391841724,35.5037919764501,3.39031248905482\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Ring3\"\n            Matrix: 0.387236996149533,-0.920820121873301,-0.046237373153508,0,-0.920497964015052,-0.383285351135722,-0.0759990709055018\n             ,0,0.052259374558384,0.0719910279667962,-0.996035292644419,0,28.0197072816314,35.6691937847349,1.78781962542131\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::L_Pinky3\"\n            Matrix: 0.407760983432604,-0.896533476315931,-0.17308589317943,0,-0.893470978416277,-0.430848807188504,0.126802786997145\n             ,0,-0.188256783383293,0.102941959924762,-0.976709963153078,0,27.4688838331264,36.3884799778826,0.498308263782114\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Thumb3\"\n            Matrix: 0.200525290419247,-0.702344061022863,0.683009913076289,0,-0.844394482826131,-0.477423758496535,-0.243031928267996\n             ,0,0.496777164440344,-0.527995735037014,-0.688790961793811,0,-23.3597375381589,39.8156859646858,8.45627353609159\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Index3\"\n            Matrix: -0.364861777469363,-0.891041943274719,0.270037482231165,0,0.690991846413133,-0.453532383677801,-0.562884275518276\n             ,0,0.624024186931544,-0.0187812745593408,0.781179303989205,0,-27.013671960418,37.6413385227463,8.45494644727821\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Middle3\"\n            Matrix: -0.481422853291761,-0.861020641468519,0.163937983653291,0,0.779765361368942,-0.506149369069037,-0.368481784767604\n             ,0,0.400247490114989,-0.0495624334986858,0.91506591765906,0,-28.1881241464277,37.2726865185971,7.18999280407797\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Ring3\"\n            Matrix: -0.446935168407541,-0.894507287994929,0.0102839957306443,0,0.875983239723845,-0.439952948090884,-0.197724099119921\n             ,0,0.181390079649833,-0.0793613055628818,0.980203770977579,0,-28.5224230630313,37.4527394415117,5.61897135092215\n             ,1\n        }\n        PoseNode:  {\n            Node: \"Model::R_Pinky3\"\n            Matrix: -0.482801791338162,-0.8684419272543,-0.112743678120074,0,0.873602569081369,-0.486588709999451,0.00707029180252432\n             ,0,-0.060999963693244,-0.0950796974193541,0.99359897176079,0,-28.1063699787253,38.1415268190634,4.26394683249727\n             ,1\n        }\n    }\n    Material: \"Material::character_anim:headM\", \"\" {\n        Version: 102\n        ShadingModel: \"phong\"\n        MultiLayer: 0\n        Properties60:  {\n            Property: \"ShadingModel\", \"KString\", \"\", \"Phong\"\n            Property: \"MultiLayer\", \"bool\", \"\",0\n            Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"EmissiveFactor\", \"double\", \"\",1\n            Property: \"AmbientColor\", \"ColorRGB\", \"\",0.0495800003409386,0.0495800003409386,0.0495800003409386\n            Property: \"AmbientFactor\", \"double\", \"\",1\n            Property: \"DiffuseColor\", \"ColorRGB\", \"\",1,1,1\n            Property: \"DiffuseFactor\", \"double\", \"\",1\n            Property: \"Bump\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"TransparentColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"TransparencyFactor\", \"double\", \"\",1\n            Property: \"SpecularColor\", \"ColorRGB\", \"\",0.5,0.5,0.5\n            Property: \"SpecularFactor\", \"double\", \"\",1\n            Property: \"ShininessExponent\", \"double\", \"\",1.24573092330083\n            Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"ReflectionFactor\", \"double\", \"\",0.5\n            Property: \"Emissive\", \"Vector3D\", \"\",0,0,0\n            Property: \"Ambient\", \"Vector3D\", \"\",0.0495800003409386,0.0495800003409386,0.0495800003409386\n            Property: \"Diffuse\", \"Vector3D\", \"\",1,1,1\n            Property: \"Specular\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"Shininess\", \"double\", \"\",1.24573092330083\n            Property: \"Opacity\", \"double\", \"\",1\n            Property: \"Reflectivity\", \"double\", \"\",0\n        }\n    }\n    Material: \"Material::character_anim:jacketM\", \"\" {\n        Version: 102\n        ShadingModel: \"phong\"\n        MultiLayer: 0\n        Properties60:  {\n            Property: \"ShadingModel\", \"KString\", \"\", \"Phong\"\n            Property: \"MultiLayer\", \"bool\", \"\",0\n            Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"EmissiveFactor\", \"double\", \"\",1\n            Property: \"AmbientColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"AmbientFactor\", \"double\", \"\",1\n            Property: \"DiffuseColor\", \"ColorRGB\", \"\",1,1,1\n            Property: \"DiffuseFactor\", \"double\", \"\",1\n            Property: \"Bump\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"TransparentColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"TransparencyFactor\", \"double\", \"\",1\n            Property: \"SpecularColor\", \"ColorRGB\", \"\",0.5,0.5,0.5\n            Property: \"SpecularFactor\", \"double\", \"\",1\n            Property: \"ShininessExponent\", \"double\", \"\",1.24573092330083\n            Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"ReflectionFactor\", \"double\", \"\",0.5\n            Property: \"Emissive\", \"Vector3D\", \"\",0,0,0\n            Property: \"Ambient\", \"Vector3D\", \"\",0,0,0\n            Property: \"Diffuse\", \"Vector3D\", \"\",1,1,1\n            Property: \"Specular\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"Shininess\", \"double\", \"\",1.24573092330083\n            Property: \"Opacity\", \"double\", \"\",1\n            Property: \"Reflectivity\", \"double\", \"\",0\n        }\n    }\n    Material: \"Material::character_anim:pantsM\", \"\" {\n        Version: 102\n        ShadingModel: \"phong\"\n        MultiLayer: 0\n        Properties60:  {\n            Property: \"ShadingModel\", \"KString\", \"\", \"Phong\"\n            Property: \"MultiLayer\", \"bool\", \"\",0\n            Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"EmissiveFactor\", \"double\", \"\",1\n            Property: \"AmbientColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"AmbientFactor\", \"double\", \"\",1\n            Property: \"DiffuseColor\", \"ColorRGB\", \"\",1,1,1\n            Property: \"DiffuseFactor\", \"double\", \"\",0.800000011920929\n            Property: \"Bump\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"TransparentColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"TransparencyFactor\", \"double\", \"\",1\n            Property: \"SpecularColor\", \"ColorRGB\", \"\",0.5,0.5,0.5\n            Property: \"SpecularFactor\", \"double\", \"\",1\n            Property: \"ShininessExponent\", \"double\", \"\",1.24573092330083\n            Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"ReflectionFactor\", \"double\", \"\",0.5\n            Property: \"Emissive\", \"Vector3D\", \"\",0,0,0\n            Property: \"Ambient\", \"Vector3D\", \"\",0,0,0\n            Property: \"Diffuse\", \"Vector3D\", \"\",0.800000011920929,0.800000011920929,0.800000011920929\n            Property: \"Specular\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"Shininess\", \"double\", \"\",1.24573092330083\n            Property: \"Opacity\", \"double\", \"\",1\n            Property: \"Reflectivity\", \"double\", \"\",0\n        }\n    }\n    Material: \"Material::character_anim:upBodyM\", \"\" {\n        Version: 102\n        ShadingModel: \"phong\"\n        MultiLayer: 0\n        Properties60:  {\n            Property: \"ShadingModel\", \"KString\", \"\", \"Phong\"\n            Property: \"MultiLayer\", \"bool\", \"\",0\n            Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"EmissiveFactor\", \"double\", \"\",1\n            Property: \"AmbientColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"AmbientFactor\", \"double\", \"\",1\n            Property: \"DiffuseColor\", \"ColorRGB\", \"\",1,1,1\n            Property: \"DiffuseFactor\", \"double\", \"\",1\n            Property: \"Bump\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"TransparentColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"TransparencyFactor\", \"double\", \"\",1\n            Property: \"SpecularColor\", \"ColorRGB\", \"\",0.5,0.5,0.5\n            Property: \"SpecularFactor\", \"double\", \"\",1\n            Property: \"ShininessExponent\", \"double\", \"\",1.19371980378707\n            Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"ReflectionFactor\", \"double\", \"\",0.5\n            Property: \"Emissive\", \"Vector3D\", \"\",0,0,0\n            Property: \"Ambient\", \"Vector3D\", \"\",0,0,0\n            Property: \"Diffuse\", \"Vector3D\", \"\",1,1,1\n            Property: \"Specular\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"Shininess\", \"double\", \"\",1.19371980378707\n            Property: \"Opacity\", \"double\", \"\",1\n            Property: \"Reflectivity\", \"double\", \"\",0\n        }\n    }\n    Material: \"Material::character_anim:eyeBallM\", \"\" {\n        Version: 102\n        ShadingModel: \"phong\"\n        MultiLayer: 0\n        Properties60:  {\n            Property: \"ShadingModel\", \"KString\", \"\", \"Phong\"\n            Property: \"MultiLayer\", \"bool\", \"\",0\n            Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"EmissiveFactor\", \"double\", \"\",1\n            Property: \"AmbientColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"AmbientFactor\", \"double\", \"\",1\n            Property: \"DiffuseColor\", \"ColorRGB\", \"\",1,1,1\n            Property: \"DiffuseFactor\", \"double\", \"\",1\n            Property: \"Bump\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"TransparentColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"TransparencyFactor\", \"double\", \"\",1\n            Property: \"SpecularColor\", \"ColorRGB\", \"\",0.5,0.5,0.5\n            Property: \"SpecularFactor\", \"double\", \"\",1\n            Property: \"ShininessExponent\", \"double\", \"\",65.9860000610352\n            Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\n            Property: \"ReflectionFactor\", \"double\", \"\",0.5\n            Property: \"Emissive\", \"Vector3D\", \"\",0,0,0\n            Property: \"Ambient\", \"Vector3D\", \"\",0,0,0\n            Property: \"Diffuse\", \"Vector3D\", \"\",1,1,1\n            Property: \"Specular\", \"Vector3D\", \"\",0.5,0.5,0.5\n            Property: \"Shininess\", \"double\", \"\",65.9860000610352\n            Property: \"Opacity\", \"double\", \"\",1\n            Property: \"Reflectivity\", \"double\", \"\",0\n        }\n    }\n    Deformer: \"Deformer::Skin_him\", \"Skin\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Skin\"\n        Properties60:  {\n        }\n        Link_DeformAcuracy: 50\n    }\n    Deformer: \"SubDeformer::Cluster_Root\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6514,6515,6516,6517,6518,6519,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6544,6558,6575\n        ,6660,6661,6664,6712,6818,6819,6821,6891,6892,6893,10951,10954,10973,10975,10976,10980,10983,10986,10998,10999,11000\n        ,11001,11020\n        Weights: 0.148829370737076,0.17685829102993,0.113096483051777,0.12204097956419,0.0812638849020004,0.00829269830137491,0.0237471498548985\n        ,0.0290536563843489,0.0317849144339561,0.0604783557355404,0.0725867226719856,0.0152020892128348,0.028587194159627\n        ,0.0811868533492088,0.0760499387979507,0.159019902348518,0.0269343629479408,0.0198612324893475,0.082656018435955,0.0308674443513155\n        ,0.134406641125679,0.0715651735663414,0.0573297701776028,0.0623637847602367,0.0700489580631256,0.0712813660502434\n        ,0.0706327632069588,0.0615008324384689,0.0691068470478058,0.0702681243419647,0.0494278706610203,0.0572692602872849\n        ,0.048890370875597,0.0335745625197887,0.034069836139679,0.0332106426358223,0.0273313820362091,0.0328722968697548,0.033588569611311\n        ,0.0339282527565956,0.0229143295437098,0.0325650237500668,0.0331987328827381,0.0264733470976353,0.0256072301417589\n        ,0.0269183497875929\n        Transform: 6.12303176910625e-017,0.999999999999114,-1.66752672949146e-010,0,0,1.66752672949004e-010,0.999999999999965,0,0.999999999999079\n        ,-6.12303176910646e-017,1.02103191405195e-026,0,-2.23054871114961,-0.0375633907420858,-37.4609861130789,1\n        TransformLink: 6.12303176911753e-017,0,1.00000000000092,0,1.00000000000089,1.667526729493e-010,-6.12303176911731e-017,0,-1.66752672949158e-010\n        ,1.00000000000004,1.02103191405202e-026,0,0.0375633844953997,37.4609861130865,2.23054871115166,1\n    }\n    Deformer: \"SubDeformer::Cluster_Pelvis\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6514,6515,6516,6517,6518,6519,6521,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539\n        ,6540,6541,6542,6544,6545,6549,6558,6568,6569,6574,6575,6576,6577,6578,6579,6590,6591,6593,6594,6601,6602,6603,6644\n        ,6645,6646,6647,6648,6652,6653,6654,6655,6659,6660,6661,6662,6664,6665,6666,6667,6673,6674,6680,6681,6688,6691,6696\n        ,6697,6698,6699,6700,6701,6702,6705,6712,6713,6714,6724,6725,6730,6731,6732,6733,6734,6735,6738,6748,6749,6751,6752\n        ,6760,6761,6762,6805,6806,6807,6811,6812,6813,6817,6818,6819,6820,6821,6822,6823,6824,6831,6832,6838,6839,6847,6856\n        ,6860,6890,6891,6892,6893,6894,6906,6909,6910,10951,10954,10973,10975,10976,10980,10983,10986,10998,10999,11000,11001\n        ,11020\n        Weights: 0.799383759498596,0.75867486000061,0.854301154613495,0.847075760364532,0.899999976158142,0.0894757434725761,0.0345684066414833\n        ,0.0351840741932392,0.949999988079071,0.949999988079071,0.949999988079071,0.910582900047302,0.899999976158142,0.949999988079071\n        ,0.0527760647237301,0.899999976158142,0.899999976158142,0.783881008625031,0.949999988079071,0.949999988079071,0.899999976158142\n        ,0.949999988079071,0.619111835956573,0.591075420379639,0.449584573507309,0.185553684830666,0.805147349834442,0.235315650701523\n        ,0.0519597008824348,0.899999976158142,0.13294880092144,0.117739856243134,0.603049695491791,0.899999976158142,0.283097892999649\n        ,0.887273788452148,0.624301850795746,0.085120789706707,0.783373355865479,0.630953192710876,0.384793758392334,0.0488782748579979\n        ,0.523425757884979,0.474541455507278,0.0999121963977814,0.0011430912418291,0.206513106822968,0.214638784527779,0.176684230566025\n        ,0.113295316696167,0.159522891044617,0.114811077713966,0.455518305301666,0.572888076305389,0.180876806378365,0.899999976158142\n        ,0.899999976158142,0.188521772623062,0.899999976158142,0.289416015148163,0.471739292144775,0.0972785204648972,0.136938780546188\n        ,0.472441554069519,0.562164723873138,0.13294880092144,0.751014232635498,0.104111813008785,0.755477726459503,0.731383979320526\n        ,0.46454194188118,0.158830061554909,0.673907995223999,0.224742695689201,0.0140152266249061,0.0582037307322025,0.899999976158142\n        ,0.0200727786868811,0.0173638090491295,0.193586349487305,0.104791283607483,0.609969437122345,0.899999976158142,0.411259800195694\n        ,0.276800006628037,0.884683132171631,0.630967020988464,0.115955218672752,0.81635719537735,0.671586453914642,0.355839669704437\n        ,0.0490408353507519,0.542843878269196,0.470961928367615,0.103352710604668,0.159476667642593,0.1330576390028,0.0624692253768444\n        ,0.19200786948204,0.3819380402565,0.541414737701416,0.155516654253006,0.899999976158142,0.899999976158142,0.160386845469475\n        ,0.899999976158142,0.167465269565582,0.487605810165405,0.0952591747045517,0.104544185101986,0.474321901798248,0.575775980949402\n        ,0.167334824800491,0.760569870471954,0.0504525750875473,0.0977368652820587,0.1761714220047,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.162171944975853,0.10718097537756,0.499940901994705,0.115701332688332,0.0335655994713306,0.0331794954836369\n        ,0.033482737839222,0.0363343097269535,0.0336760170757771,0.033488791435957,0.0334953814744949,0.0385428369045258,0.0340126343071461\n        ,0.0335763432085514,0.0367633253335953,0.0371963866055012,0.036540824919939\n        Transform: -1.66752994577569e-010,2.75770739236699e-006,0.999999999991485,0,0.999999999999055,-3.97446220415258e-017,1.66752994577685e-010\n        ,0,4.996005878912e-016,0.99999999999236,-2.75770739236458e-006,0,-37.4609888630342,-1.27468122076786,-0.0375585643593996\n        ,1\n        TransformLink: -1.66752994577884e-010,1.00000000000094,4.99600587892144e-016,0,2.75770739238816e-006,-3.97446220418308e-017,1.00000000000003\n        ,0,1.00000000000091,1.66752994579256e-010,-2.75770739239057e-006,0,0.0375620733105271,37.4609888630758,1.27468111719239\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_Spine\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670\n        ,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693\n        ,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,4732,4733,4734,4735,4736\n        ,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759\n        ,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782\n        ,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805\n        ,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828\n        ,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851\n        ,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874\n        ,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897\n        ,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920\n        ,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943\n        ,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966\n        ,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989\n        ,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012\n        ,5013,5301,5302,5308,5315,5316,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5336,5337,5339,5340,5341,5342\n        ,5343,5344,5345,5346,5347,5353,5354,5355,5356,5357,5377,5378,5385,5392,5393,5442,5445,5446,5461,5468,5476,5481,5482\n        ,5530,5531,5739,5740,5741,5747,5748,5749,5750,5751,5752,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5769\n        ,5770,5772,5773,5774,5775,5776,5777,5778,5779,5780,5786,5787,5788,5808,5809,5816,5823,5824,5872,5875,5876,5891,5892\n        ,5910,5911,5959,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515\n        ,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538\n        ,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561\n        ,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582,6583,6584\n        ,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607\n        ,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630\n        ,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653\n        ,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676\n        ,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699\n        ,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722\n        ,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745\n        ,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768\n        ,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791\n        ,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814\n        ,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837\n        ,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860\n        ,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883\n        ,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906\n        ,6907,6908,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,7175,7176,7177,7178,7179,7180,7181\n        ,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204\n        ,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227\n        ,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250\n        ,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273\n        ,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296\n        ,7297,7298,7299,7300,7301,7302,7303,7306,7307,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322\n        ,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345\n        ,7346,7347,7348,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369\n        ,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392\n        ,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416\n        ,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439\n        ,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462\n        ,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485\n        ,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508\n        ,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531\n        ,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554\n        ,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577\n        ,7578,7579,7580,7581,7582,7583,7584,7585,7614,7615,7616,7617,7618,7619,7620,7621,7622,7624,7625,7630,7632,7633,7668\n        ,7669,7670,7671,7672,7674,7681,7692,7694,7695,7696,7709,7710,7716,7717,7718,7719,7720,7721,7722,7723,7724,7798,7799\n        ,7800,7806,7807,7808,7809,7810,7811,7812,7813,7848,7850,7851,7853,7854,7855,7909,7910,7911,7912,7913,7914,7915,7916\n        ,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939\n        ,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962\n        ,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,8000,9108,9109,9110,9111,9112,9113,9114,9115,9116,9118,9119,9126\n        ,9127,9162,9163,9164,9165,9166,9168,9175,9186,9188,9189,9190,9203,9204,9210,9211,9212,9213,9214,9215,9216,9217,9218\n        ,9219,9296,9297,9298,9300,9301,9304,9305,9306,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323\n        ,9329,9330,9331,9350,9351,9352,9353,9359,9361,9363,9364,9365,9366,9367,9368,9374,9375,9376,9377,9424,9425,9426,9427\n        ,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450\n        ,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9473,9474\n        ,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497\n        ,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520\n        ,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9537,9538,9539,9540,9541,9542,9543,9544\n        ,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567\n        ,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590\n        ,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613\n        ,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636\n        ,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659\n        ,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682\n        ,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705\n        ,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728\n        ,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751\n        ,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774\n        ,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797\n        ,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9848,9849,9850\n        ,9851,9852,9853,9854,9855,9856,9857,9858,9881,9882,9883,9884,9885,9915,9916,9927,9928,9929,9930,9931,9932,9933,9934\n        ,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957\n        ,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980\n        ,9981,9984,9985,9986,9987,9988,9989,9990,9994,9995,9996,9997,9999,10000,10001,10002,10003,10004,10005,10006,10007\n        ,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026\n        ,10027,10028,10029,10032,10033,10034,10035,10036,10037,10038,10040,10041,10042,10043,10044,10045,10046,10047,10048\n        ,10049,10050,10051,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161\n        ,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180\n        ,10181,10182,10183,10184,10185,10188,10189,10194,10216,10223,10224,10227,10228,10229,10230,10231,10232,10241,10275\n        ,10276,10277,10285,10448,10449,10456,10585,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598\n        ,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617\n        ,10618,10619,10620,10621,10622,10623,10624,10625,10628,10629,10634,10656,10661,10664,10665,10666,10667,10668,10669\n        ,10670,10677,10709,10710,10711,10712,10720,10876,10877,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918\n        ,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937\n        ,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956\n        ,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10973,10974,10975\n        ,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994\n        ,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013\n        ,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032\n        ,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051\n        ,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070\n        ,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089\n        ,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108\n        ,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127\n        ,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146\n        ,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165\n        ,11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184\n        ,11185,11186,11187,11188,11189,11190,11191,11192\n        Weights: 0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.485887348651886,0.485664427280426\n        ,0.486068248748779,0.486428737640381,0.485347807407379,0.48554915189743,0.485024094581604,0.485015153884888,0.484783440828323\n        ,0.484618633985519,0.484691768884659,0.48446998000145,0.484771847724915,0.484603881835938,0.484998911619186,0.484975725412369\n        ,0.485310763120651,0.485482156276703,0.48562553524971,0.485992193222046,0.485862076282501,0.486377358436584,0.485958486795425\n        ,0.486538648605347,0.488901674747467,0.489226847887039,0.488413363695145,0.487895905971527,0.487497180700302,0.487329483032227\n        ,0.487433940172195,0.487773805856705,0.488253176212311,0.488746970891953,0.48913100361824,0.489307641983032,0.488778561353683\n        ,0.488978236913681,0.488482058048248,0.488169342279434,0.487927585840225,0.487823575735092,0.487883865833282,0.488089084625244\n        ,0.488382279872894,0.488686174154282,0.488922417163849,0.489029705524445,0.485335648059845,0.488437861204147,0.244441643357277\n        ,0.247425943613052,0.246487095952034,0.241566851735115,0.250035226345062,0.250796467065811,0.25156769156456,0.253332167863846\n        ,0.251615196466446,0.253420650959015,0.250169515609741,0.25105145573616,0.247620776295662,0.246866270899773,0.244649648666382\n        ,0.241981253027916,0.242047905921936,0.237693607807159,0.240509778261185,0.235144719481468,0.240449100732803,0.235020831227303\n        ,0.241887286305428,0.237368017435074,0.200827375054359,0.195532456040382,0.205721631646156,0.208878561854362,0.209438517689705\n        ,0.207261577248573,0.202953681349754,0.197683557868004,0.192855000495911,0.189739361405373,0.189154654741287,0.191265761852264\n        ,0.197463110089302,0.194227814674377,0.200458317995071,0.202400833368301,0.202764689922333,0.201455339789391,0.19883306324482\n        ,0.195606157183647,0.192636698484421,0.190710946917534,0.190338432788849,0.191622346639633,0.24601249396801,0.196497097611427\n        ,0.373516350984573,0.376757621765137,0.369537591934204,0.365251928567886,0.382805824279785,0.382776975631714,0.386137038469315\n        ,0.388760268688202,0.380438297986984,0.387044966220856,0.392412126064301,0.379495084285736,0.370759338140488,0.358247369527817\n        ,0.354949980974197,0.368560016155243,0.36077743768692,0.390685200691223,0.387448787689209,0.386936098337173,0.380599111318588\n        ,0.38983428478241,0.39421871304512,0.377999693155289,0.370091617107391,0.366377264261246,0.357207298278809,0.352117955684662\n        ,0.341517567634583,0.388354241847992,0.392351239919662,0.364930152893066,0.375461101531982,0.353334933519363,0.338869631290436\n        ,0.318140685558319,0.374630272388458,0.253818362951279,0.330474436283112,0.336101323366165,0.251405566930771,0.258881658315659\n        ,0.329255163669586,0.258955836296082,0.326492011547089,0.25557616353035,0.322989732027054,0.23970103263855,0.309830665588379\n        ,0.213416919112206,0.286303400993347,0.360161691904068,0.354063391685486,0.364664852619171,0.351037055253983,0.347294807434082\n        ,0.343819558620453,0.332145482301712,0.309136658906937,0.283766984939575,0.182805374264717,0.322982370853424,0.316466480493546\n        ,0.293134987354279,0.276267886161804,0.274140179157257,0.295364439487457,0.303073704242706,0.354633033275604,0.364007532596588\n        ,0.343757838010788,0.334839880466461,0.348560273647308,0.33023327589035,0.317398726940155,0.361911833286285,0.34889817237854\n        ,0.201658248901367,0.193551778793335,0.34731462597847,0.353964239358902,0.359329700469971,0.341922789812088,0.344691544771194\n        ,0.341207295656204,0.337673217058182,0.325471311807632,0.302787721157074,0.373936861753464,0.356122374534607,0.357345730066299\n        ,0.375500559806824,0.368380576372147,0.346033930778503,0.37697446346283,0.37307596206665,0.353593707084656,0.331589162349701\n        ,0.358462393283844,0.329241544008255,0.348726212978363,0.314913302659988,0.291479706764221,0.335428446531296,0.26182433962822\n        ,0.353498190641403,0.244015663862228,0.247688680887222,0.245483666658401,0.242484733462334,0.2377700060606,0.23008830845356\n        ,0.237610965967178,0.241329908370972,0.249271839857101,0.252844214439392,0.24934010207653,0.252829015254974,0.246366634964943\n        ,0.249618053436279,0.232329145073891,0.234494656324387,0.210118144750595,0.209856301546097,0.331883281469345,0.244902163743973\n        ,0.237399041652679,0.247255980968475,0.24386802315712,0.199680224061012,0.193274289369583,0.251673072576523,1,1,1\n        ,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,0.228242665529251,0.433049440383911\n        ,0.063678465783596,0.550755441188812,0.905955851078033,0.277041643857956,0.420005768537521,0.408874332904816,0.334239274263382\n        ,0.426755398511887,0.241860181093216,0.899999976158142,0.500172555446625,0.50339287519455,0.420577973127365,0.428421944379807\n        ,0.167543798685074,0.0129226706922054,0.5,0.36642724275589,0.25941988825798,0.245549902319908,0.302309572696686,0.202298223972321\n        ,0.253012418746948,0.389088153839111,0.188150689005852,0.940474212169647,0.944787383079529,0.545298874378204,0.404611170291901\n        ,0.5118807554245,0.34206211566925,0.193565756082535,0.0798677578568459,0.359307199716568,0.220871970057487,0.201562315225601\n        ,0.553697109222412,0.584769606590271,0.909379601478577,0.911072134971619,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.522571086883545,0.397793114185333,0.326984196901321,0.244352966547012,0.427823901176453\n        ,0.458259165287018,0.461357414722443,0.394107729196548,0.899999976158142,0.27571764588356,0.420828282833099,0.409706592559814\n        ,0.334164440631866,0.426904082298279,0.241386741399765,0.500177025794983,0.503991425037384,0.42418310046196,0.334534138441086\n        ,0.899999976158142,0.194053664803505,0.169082060456276,0.5,0.366859018802643,0.258727252483368,0.244743958115578,0.341296017169952\n        ,0.212976187467575,0.27468204498291,0.370680093765259,0.143536567687988,0.54621148109436,0.405595302581787,0.512151777744293\n        ,0.236699178814888,0.130981206893921,0.079025998711586,0.359673470258713,0.202563613653183,0.173596724867821,0.553828299045563\n        ,0.586015403270721,0.303222894668579,0.908758401870728,0.899999976158142,0.899999976158142,0.899999976158142,0.416867136955261\n        ,0.435121119022369,0.502011477947235,0.507540047168732,0.517787754535675,0.920168399810791,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.944217801094055,0.939911723136902,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.0499768182635307,0.0622557625174522,0.0314086191356182,0.0294202249497175\n        ,0.0173703264445066,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.0223812647163868,0.0184281393885612,0.0165518838912249,0.0271356329321861,0.0262770988047123,0.0286044720560312\n        ,0.899999976158142,0.0176951847970486,0.0220540463924408,0.0550919994711876,0.0200411379337311,0.0253521800041199\n        ,0.016105180606246,0.0171583909541368,0.0850373953580856,0.0758332088589668,0.0980560183525085,0.372282832860947,0.470829576253891\n        ,0.058711938560009,0.202237918972969,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.0271500088274479,0.899999976158142,0.899999976158142,0.899999976158142,0.474399924278259,0.484295248985291,0.473359733819962\n        ,0.486365467309952,0.470664262771606,0.374861598014832,0.366387665271759,0.437676966190338,0.425652414560318,0.46727055311203\n        ,0.195437729358673,0.221567079424858,0.119305938482285,0.0407545492053032,0.196933567523956,0.0379016511142254,0.175045162439346\n        ,0.450425118207932,0.466519892215729,0.479820847511292,0.494895756244659,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.474442213773727,0.317375123500824,0.335670530796051,0.0426778271794319,0.0611641183495522,0.0800886005163193\n        ,0.386461079120636,0.899999976158142,0.402333498001099,0.899999976158142,0.899999976158142,0.483016639947891,0.492276847362518\n        ,0.482892215251923,0.210124060511589,0.273503005504608,0.491192519664764,0.210949346423149,0.480654180049896,0.460385143756866\n        ,0.489091366529465,0.485488176345825,0.409366816282272,0.485847264528275,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.490868449211121,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.406117528676987,0.101345561444759,0.487271994352341,0.498311102390289,0.479613840579987\n        ,0.208456739783287,0.422964990139008,0.287179529666901,0.166849553585052,0.111482918262482,0.485398918390274,0.102656565606594\n        ,0.114537015557289,0.118492007255554,0.132055476307869,0.0896488949656487,0.0687534958124161,0.064977765083313,0.0578959956765175\n        ,0.497809112071991,0.200785055756569,0.134202092885971,0.121802054345608,0.105732023715973,0.0741553604602814,0.055485475808382\n        ,0.0617626309394836,0.899999976158142,0.899999976158142,0.419221252202988,0.0352571569383144,0.0283600147813559,0.400317370891571\n        ,0.49568247795105,0.0277331583201885,0.284585326910019,0.250304728746414,0.425329893827438,0.47427025437355,0.484636008739471\n        ,0.462838232517242,0.478616893291473,0.474339812994003,0.44830396771431,0.305842816829681,0.490415573120117,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.216201022267342,0.409849554300308,0.428201466798782,0.299757570028305\n        ,0.493067115545273,0.477148860692978,0.899999976158142,0.899999976158142,0.0576332211494446,0.179240301251411,0.4087735414505\n        ,0.243735611438751,0.479312092065811,0.899999976158142,0.899999976158142,0.899999976158142,0.0528160966932774,0.0476635284721851\n        ,0.0912690982222557,0.38397690653801,0.0972289070487022,0.200551301240921,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.0280716568231583,0.899999976158142,0.899999976158142,0.899999976158142,0.452894061803818,0.47402435541153,0.483769923448563\n        ,0.47241935133934,0.486981511116028,0.47670915722847,0.470452100038528,0.374543905258179,0.339963465929031,0.443937122821808\n        ,0.425873547792435,0.467277556657791,0.203481242060661,0.226448878645897,0.115699142217636,0.0413811802864075,0.22074756026268\n        ,0.199416875839233,0.0382523499429226,0.171607092022896,0.490018874406815,0.486813902854919,0.433707058429718,0.483929514884949\n        ,0.479347556829453,0.494737774133682,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.47393861413002\n        ,0.335015952587128,0.0346741303801537,0.0523174330592155,0.280055373907089,0.402526408433914,0.899999976158142,0.403372168540955\n        ,0.899999976158142,0.899999976158142,0.480757892131805,0.486051797866821,0.48539599776268,0.482352942228317,0.202147349715233\n        ,0.275057405233383,0.48567208647728,0.0835829302668571,0.0729673504829407,0.209692642092705,0.480644881725311,0.460294842720032\n        ,0.485169321298599,0.409366607666016,0.476667702198029,0.497557014226913,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.487591832876205,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.363091051578522,0.486785143613815,0.492457121610641,0.479441195726395,0.480146616697311\n        ,0.483121246099472,0.484910160303116,0.286455065011978,0.164788633584976,0.115249574184418,0.104643501341343,0.114593736827374\n        ,0.117495730519295,0.129164040088654,0.0909549221396446,0.0774164944887161,0.0694414302706718,0.060987826436758,0.498031169176102\n        ,0.132643029093742,0.0914852172136307,0.0800103396177292,0.055613748729229,0.0585689470171928,0.899999976158142,0.899999976158142\n        ,0.430365353822708,0.0360974445939064,0.0292764361947775,0.413414359092712,0.0287411995232105,0.331874817609787,0.242936596274376\n        ,0.426501959562302,0.474240958690643,0.484399497509003,0.462895035743713,0.491324007511139,0.481851667165756,0.472675174474716\n        ,0.462384283542633,0.304057329893112,0.487220883369446,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.209291517734528,0.393088698387146,0.427878260612488,0.4830022752285,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.303087472915649,0.0536928921937943,0.325082153081894,0.202775940299034,0.476244419813156,0.499079555273056\n        ,0.496010959148407,0.497787863016129,0.0508093200623989,0.421548753976822,0.0662107318639755,0.0445234589278698,0.077688030898571\n        ,0.0827849209308624,0.0493801422417164,0.079817570745945,0.0710747241973877,0.494894951581955,0.47863557934761,0.485665053129196\n        ,0.0818784013390541,0.485051035881042,0.419161200523376,0.492303609848022,0.492112398147583,0.0693842321634293,0.0480330437421799\n        ,0.422746449708939,0.0661759674549103,0.0414951294660568,0.077379547059536,0.0510545521974564,0.077643096446991,0.478472769260406\n        ,0.100985370576382,0.212159022688866,0.0847534462809563,0.0664583668112755,0.469830930233002,0.466865479946136,0.468666285276413\n        ,0.467166066169739,0.475262671709061,0.513434112071991,0.45416596531868,0.0456559956073761,0.0381095334887505,0.04617028683424\n        ,0.458466410636902,0.492889791727066,0.466491162776947,0.467004597187042,0.465437352657318,0.468502849340439,0.497051328420639\n        ,0.48866793513298,0.476463884115219,0.28717103600502,0.336231589317322,0.487657696008682,0.277788311243057,0.282144725322723\n        ,0.256011962890625,0.180214300751686,0.287221610546112,0.264949142932892,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.128804847598076,0.124300897121429,0.119410678744316,0.121989578008652,0.126729294657707,0.12162871658802\n        ,0.0948135182261467,0.13428783416748,0.0900763049721718,0.0886399820446968,0.0841514021158218,0.081154964864254,0.0858331248164177\n        ,0.0372096374630928,0.0309558864682913,0.0244138482958078,0.0176111347973347,0.014983844012022,0.129338786005974,0.0909664332866669\n        ,0.0378601811826229,0.0245837960392237,0.0324109755456448,0.0193320214748383,0.0143751567229629,0.0130134420469403\n        ,0.0144294565543532,0.0651924386620522,0.0683740973472595,0.0874151587486267,0.0967726111412048,0.118158273398876\n        ,0.15954327583313,0.133861139416695,0.120879530906677,0.0863500535488129,0.0355506911873817,0.0342619754374027,0.0312653295695782\n        ,0.0287093352526426,0.021574629470706,0.0168448891490698,0.0118433842435479,0.0115172686055303,0.0134986257180572\n        ,0.0120220622047782,0.0131854433566332,0.0606853812932968,0.0832474008202553,0.093217745423317,0.11446488648653,0.129967495799065\n        ,0.0255544222891331,0.0210145488381386,0.0194068942219019,0.0119495382532477,0.00901409145444632,0.00822153221815825\n        ,0.0083137908950448,0.00901816599071026,0.0524943694472313,0.0553345903754234,0.068617656826973,0.076964758336544\n        ,0.192974328994751,0.188027605414391,0.188158750534058,0.185076355934143,0.14940433204174,0.144968196749687,0.182830169796944\n        ,0.154406279325485,0.174253150820732,0.193655014038086,0.185767650604248,0.246047541499138,0.24127422273159,0.241126343607903\n        ,0.237629055976868,0.235797300934792,0.24693551659584,0.239405423402786,0.038468461483717,0.188023090362549,0.128091588616371\n        ,0.133428320288658,0.138287797570229,0.178264051675797,0.23220020532608,0.241286396980286,0.227848380804062,0.151058748364449\n        ,0.113301075994968,0.11036491394043,0.125564470887184,0.0676738694310188,0.0801245048642159,0.167598038911819,0.128094255924225\n        ,0.232770204544067,0.237745985388756,0.184255436062813,0.179258301854134,0.229751572012901,0.23304195702076,0.17586824297905\n        ,0.238762646913528,0.182600617408752,0.13694255053997,0.233596786856651,0.199792727828026,0.225131019949913,0.228194355964661\n        ,0.172236859798431,0.220965817570686,0.190604701638222,0.183457717299461,0.232855081558228,0.0307963136583567,0.146925538778305\n        ,0.202488541603088,0.0871826484799385,0.049006026238203,0.132937029004097,0.131644994020462,0.130768299102783,0.122386641800404\n        ,0.0836272537708282,0.0803681313991547,0.00396483391523361,0.00633750250563025,0.00248087686486542,0.0016853892011568\n        ,0.00199530832469463,0.00109372811857611,0.00142326357308775,0.0220866464078426,0.0141881955787539,0.00774034112691879\n        ,0.00421709381043911,0.00252895569428802,0.00525286328047514,0.0047554038465023,0.00263063330203295,0.0451593361794949\n        ,0.0221035573631525,0.00112951546907425,0.00106509344186634,0.00172538100741804,0.00144575606100261,0.00125635962467641\n        ,0.00322978175245225,0.00199160212650895,0.00201613828539848,0.00330872484482825,0.00193723302800208,0.00445955852046609\n        ,0.00245628482662141,0.00561189698055387,0.00297321169637144,0.00795925036072731,0.0075264573097229,0.00421811267733574\n        ,0.00596139440312982,0.00241706985980272,0.00402618013322353,0.00628479011356831,0.0041719451546669,0.00203253165818751\n        ,0.00271617225371301,0.00141770753543824,0.00252853706479073,0.00138250086456537,0.00662316475063562,0.00596707733348012\n        ,0.00925629865378141,0.0103338537737727,0.0120895095169544,0.0127093885093927,0.00898659415543079,0.00683298194780946\n        ,0.00487540382891893,0.00407768040895462,0.0348199345171452,0.0649327710270882,0.066335991024971,0.0358296371996403\n        ,0.161739841103554,0.0818046554923058,0.0807016789913177,0.15451543033123,0.0940489768981934,0.0603382438421249,0.0702256262302399\n        ,0.0352267138659954,0.0277259387075901,0.0261700768023729,0.255933821201324,0.346736639738083,0.336984097957611,0.143246442079544\n        ,0.0974620506167412,0.043335136026144,0.031309686601162,0.432955324649811,0.483261168003082,0.478565245866776,0.422408699989319\n        ,0.304098427295685,0.207750976085663,0.146186009049416,0.0112169776111841,0.00671346625313163,0.00299824820831418\n        ,0.00180409394670278,0.00173606141470373,0.0016881157644093,0.00215591676533222,0.00260239094495773,0.00358258979395032\n        ,0.00706381490454078,0.00335836806334555,0.00202733650803566,0.00176701706368476,0.00121282087638974,0.00118987401947379\n        ,0.00561260897666216,0.00241978513076901,0.00387012725695968,0.0596045516431332,0.0244100801646709,0.244619458913803\n        ,0.029373075813055,0.43449404835701,0.486235320568085,0.48059156537056,0.427583009004593,0.307614177465439,0.20915924012661\n        ,0.148607149720192,0.0463326685130596,0.0486371889710426,0.00634428393095732,0.00365646346472204,0.0118476608768106\n        ,0.0321184881031513,0.0478746853768826,0.0106965135782957,0.0764963403344154,0.148223981261253,0.331562787294388,0.467333436012268\n        ,0.469035536050797,0.00947490520775318,0.0101797981187701,0.0101308375597,0.014061757363379,0.0202330444008112,0.0269427467137575\n        ,0.0267547108232975,0.0241191368550062,0.0281163435429335,0.0306482631713152,0.0295060761272907,0.0109167220070958\n        ,0.0117025338113308,0.0124574238434434,0.050898727029562,0.0503738038241863,0.0578904375433922,0.0922311246395111\n        ,0.141333788633347,0.22456730902195,0.227567330002785,0.0177560783922672,0.0190714467316866,0.0195607356727123,0.0255508925765753\n        ,0.052836962044239,0.0918030440807343,0.15401166677475,0.169818848371506,0.344298928976059,0.156067594885826,0.424768060445786\n        ,0.465730160474777,0.319286823272705,0.291175782680511,0.0849423706531525,0.0330376215279102,0.0144369145855308,0.0126413479447365\n        ,0.00879246182739735,0.0079611511901021,0.0291281025856733,0.0667730271816254,0.104921028017998,0.0713702738285065\n        ,0.112708725035191,0.166204929351807,0.13128425180912,0.208592295646667,0.249056994915009,0.319560289382935,0.350937873125076\n        ,0.167568385601044,0.0866376608610153,0.0311222057789564,0.0183327905833721,0.0126609988510609,0.00722455093637109\n        ,0.00863407645374537,0.00679195951670408,0.00553479325026274,0.0042190826497972,0.00392617005854845,0.00431412877514958\n        ,0.00698245875537395,0.0130870034918189,0.0372610092163086,0.142217367887497,0.333639472723007,0.424810439348221,0.00361940916627645\n        ,0.027364544570446,0.00949712097644806,0.0702332332730293,0.0720498561859131,0.0657416209578514,0.0468012802302837\n        ,0.0353254340589046,0.103264316916466,0.10613390058279,0.0849223732948303,0.0626742914319038,0.0477514900267124,0.0023828495759517\n        ,0.00336645683273673,0.00471905944868922,0.00498715182766318,0.0053791287355125,0.00838648993521929,0.0250504445284605\n        ,0.0453383177518845,0.0595372840762138,0.0807408019900322,0.00324741145595908,0.00398993026465178,0.0115005858242512\n        ,0.0220406595617533,0.0313174091279507,0.0482421852648258,0.00227482104673982,0.00196545757353306,0.00375738996081054\n        ,0.083605483174324,0.0822170674800873,0.0831636190414429,0.0630473122000694,0.0481768995523453,0.3446224629879,0.425492912530899\n        ,0.131611213088036,0.113337218761444,0.102451033890247,0.340103626251221,0.338898211717606,0.0360977724194527,0.0380000621080399\n        ,0.471558958292007,0.465493679046631,0.418613165616989,0.329782277345657,0.474898964166641,0.4684838950634,0.419469267129898\n        ,0.332224696874619,0.478455871343613,0.470837116241455,0.42595586180687,0.15671406686306,0.26562574505806,0.26365339756012\n        ,0.257146269083023,0.0138539336621761,0.114299923181534,0.188113182783127,0.0199986882507801,0.0217276699841022,0.0225842781364918\n        ,0.0265044532716274,0.0309454146772623,0.0353365615010262,0.0395141430199146,0.0400376841425896,0.0374672003090382\n        ,0.120118767023087,0.129973024129868,0.0787881836295128,0.0643641352653503,0.0733145847916603,0.0299731642007828,0.0131016932427883\n        ,0.00807503890246153,0.00641247676685452,0.00469847675412893,0.00116353866178542,0.00109649647492915,0.0015472712693736\n        ,0.0015398912364617,0.00181988475378603,0.00185549294110388,0.00183399405796081,0.00189391942694783,0.00124193157535046\n        ,0.0014578535920009,0.0014706157380715,0.00103451905306429,0.00117230892647058,0.00116537837311625,0.00127800682093948\n        ,0.00128758465871215,0.00169459613971412,0.00166226760484278,0.00101601879578084,0.00132098130416125,0.00105506856925786\n        ,0.00109436130151153,0.00142546708229929,0.00165331270545721,0.00175113021396101,0.00116391049232334,0.00149487575981766\n        ,0.00275484379380941,0.00286094797775149,0.00283250957727432,0.00315297488123178,0.00307540665380657,0.00171014678198844\n        ,0.00189925020094961,0.00185286905616522,0.00317150028422475,0.00369846285320818,0.00408397102728486,0.00546123459935188\n        ,0.0460431762039661,0.0475341975688934,0.038765087723732,0.00189711654093117,0.00187039421871305,0.00190330250188708\n        ,0.00195048784371465,0.00183602317702025,0.0025363105814904,0.00109787075780332,0.00116721540689468,0.00113554787822068\n        ,0.00149305525701493,0.00161524920258671,0.057351540774107,0.0321330279111862,0.0826931446790695,0.0506877452135086\n        ,0.0968986079096794,0.0525840595364571,0.0556077249348164,0.0939208716154099,0.0881008803844452,0.0490996241569519\n        ,0.0903309360146523,0.00541983218863606,0.00260564009658992,0.00511829322203994,0.00349382869899273,0.00537390913814306\n        ,0.00596560025587678,0.00700216926634312,0.0063464199192822,0.00247354246675968,0.00279559753835201,0.00530987698584795\n        ,0.00257820077240467,0.00249433261342347,0.0997933968901634,0.0544734485447407,0.0484018176794052,0.00362300151027739\n        ,0.00399520713835955,0.0385792851448059,0.00472923275083303,0.00707319425418973,0.022978238761425,0.0392886884510517\n        ,0.0639106407761574,0.0347827896475792,0.00521091790869832,0.00661726342514157,0.0041303988546133,0.00309630646370351\n        ,0.00707019120454788,0.00562763307243586,0.00834548845887184,0.00777499936521053,0.0427671931684017,0.0307781342417002\n        ,0.0477634370326996,0.0568116456270218,0.0543619580566883,0.0481494814157486,0.0539024993777275,0.0498538091778755\n        ,0.0479667596518993,0.0577677562832832,0.00659023737534881,0.00663879793137312,0.00526854488998652,0.00690277572721243\n        ,0.0539496801793575,0.00554723339155316,0.00560073181986809,0.0486485287547112,0.00913042854517698,0.00652239751070738\n        ,0.0011291156988591,0.00109412742312998,0.00103278865572065,0.00147875573020428,0.00147705664858222,0.0017723172204569\n        ,0.00181253568734974,0.00182461738586426,0.00188483169768006,0.00118751765694469,0.00142098765354604,0.00146216049324721\n        ,0.00114015850704163,0.00115575676318258,0.00132532499264926,0.00134176283609122,0.0017199928406626,0.0016922679496929\n        ,0.00105575239285827,0.00134141428861767,0.00106850953307003,0.0010271678911522,0.00135946099180728,0.00160738476552069\n        ,0.00174183479975909,0.00121512752957642,0.00152292428538203,0.00197672424837947,0.00273400289006531,0.00280472636222839\n        ,0.0028488168027252,0.00316720129922032,0.00305494153872132,0.0017370292916894,0.00188972463365644,0.00180811155587435\n        ,0.00311806984245777,0.0040378887206316,0.00432216608896852,0.00690364046022296,0.00387458363547921,0.00535369943827391\n        ,0.0023983852006495,0.00160886731464416,0.00332784000784159,0.00185783591587096,0.00101551448460668,0.00134352233726531\n        ,0.0238124150782824,0.0478002242743969,0.0526870340108871,0.0381637215614319,0.0153794707730412,0.00393905816599727\n        ,0.00180854869540781,0.00274698971770704,0.0018029633210972,0.00197869702242315,0.00171526428312063,0.00514251785352826\n        ,0.0047717816196382,0.00266478047706187,0.489171802997589,0.488262295722961,0.0431586429476738,0.0143493311479688\n        ,0.00275305891409516,0.00104679516516626,0.00102104444522411,0.00112195441033691,0.00115225685294718,0.00160331535153091\n        ,0.00175481359474361,0.00187249213922769,0.00149584782775491,0.00132315745577216,0.00103499344550073,0.00103408901486546\n        ,0.0608331300318241,0.0343646034598351,0.0864746570587158,0.0532681569457054,0.0959476977586746,0.0519197396934032\n        ,0.0571485608816147,0.0961936935782433,0.0861227437853813,0.0494562238454819,0.0908803790807724,0.00510046212002635\n        ,0.00244628125801682,0.00376808317378163,0.00580758368596435,0.00642081862315536,0.00778972543776035,0.00451423460617661\n        ,0.00583442393690348,0.0062086065299809,0.00240529561415315,0.00264307809993625,0.00508069852367044,0.00245545478537679\n        ,0.0968750342726707,0.0523639731109142,0.0470106676220894,0.00390005228109658,0.00304794777184725,0.00187453755643219\n        ,0.00189462560229003,0.00312620983459055,0.00182634731754661,0.00426232814788818,0.00234097195789218,0.00541879655793309\n        ,0.00286390422843397,0.0077361180447042,0.00739045953378081,0.00410307198762894,0.00611513201147318,0.00248692650347948\n        ,0.00408196216449142,0.00639339722692966,0.00434895092621446,0.00212754565291107,0.00288760499097407,0.00151408067904413\n        ,0.00271663744933903,0.00149647297803313,0.006270463578403,0.00564201502129436,0.00783688575029373,0.0102068949490786\n        ,0.0115534784272313,0.011789258569479,0.0125153223052621,0.00919362623244524,0.00709264166653156,0.00514057138934731\n        ,0.00437394948676229,0.0210229996591806,0.0211294535547495,0.0236893240362406,0.0280384570360184,0.0627929121255875\n        ,0.0637256726622581,0.148144006729126,0.073219008743763,0.159480541944504,0.0803302451968193,0.0883469432592392,0.175800532102585\n        ,0.0797864273190498,0.153079614043236,0.0946589261293411,0.0606883279979229,0.0712572634220123,0.0368200019001961\n        ,0.029294203966856,0.0278862025588751,0.252608448266983,0.345064520835876,0.335890293121338,0.144410610198975,0.0991004928946495\n        ,0.0455374196171761,0.0332835167646408,0.431980043649673,0.483294159173965,0.47867688536644,0.422485083341599,0.30485126376152\n        ,0.209794074296951,0.148937806487083,0.0112794619053602,0.00676137395203114,0.0815660059452057,0.171418637037277,0.00282467366196215\n        ,0.00169222545810044,0.00163030030671507,0.00158798391930759,0.0020512524060905,0.00250268145464361,0.00348014035262167\n        ,0.0069389408454299,0.0034073784481734,0.00208802055567503,0.00185293727554381,0.00129873096011579,0.0012914533726871\n        ,0.00529764918610454,0.00260264379903674,0.019681055098772,0.00415737135335803,0.0573714300990105,0.0260794423520565\n        ,0.241283521056175,0.0313012041151524,0.43357065320015,0.486305832862854,0.480722397565842,0.421222060918808,0.308387398719788\n        ,0.21123956143856,0.151384964585304,0.0513319559395313,0.00637604761868715,0.00370210641995072,0.0116720963269472\n        ,0.0107373110949993,0.0756150707602501,0.146860748529434,0.330495357513428,0.467436373233795,0.469159185886383,0.0102206543087959\n        ,0.010956222191453,0.0108262272551656,0.0147844785824418,0.0208914484828711,0.0274675246328115,0.0268960893154144\n        ,0.0242242868989706,0.027724850922823,0.0302235800772905,0.028852054849267,0.0297430325299501,0.0521327517926693,0.0530193373560905\n        ,0.0581693537533283,0.0927537828683853,0.142314732074738,0.226108208298683,0.229115411639214,0.019042607396841,0.0204018652439117\n        ,0.0207625348120928,0.0267703607678413,0.0535290092229843,0.0909426435828209,0.152808129787445,0.168576091527939,0.343474626541138\n        ,0.155315488576889,0.424900680780411,0.465838462114334,0.320092290639877,0.290643304586411,0.0841367095708847,0.0326586216688156\n        ,0.0142576759681106,0.0126772029325366,0.00866493117064238,0.00799310021102428,0.0292372778058052,0.0670557543635368\n        ,0.105456203222275,0.0716907531023026,0.113329194486141,0.167281061410904,0.13141243159771,0.209005817770958,0.250615149736404\n        ,0.316368371248245,0.349230736494064,0.165242061018944,0.0850486308336258,0.0304153300821781,0.0123343467712402,0.00701207853853703\n        ,0.00838807877153158,0.00656341481953859,0.00529869552701712,0.00399890448898077,0.00370304146781564,0.00407698517665267\n        ,0.00661989906802773,0.0218677837401628,0.0659785270690918,0.13825549185276,0.327767133712769,0.422945559024811,0.00341141130775213\n        ,0.0277226585894823,0.00964815262705088,0.0733150765299797,0.0750653073191643,0.0668630003929138,0.0482793487608433\n        ,0.0364491641521454,0.106386072933674,0.109185293316841,0.0868760198354721,0.0639690756797791,0.0486819483339787,0.0025335478130728\n        ,0.00351265678182244,0.00484719267114997,0.0051118447445333,0.00551333790645003,0.00857016909867525,0.0255201179534197\n        ,0.0461918115615845,0.0607488192617893,0.082602471113205,0.00348183745518327,0.00425211526453495,0.0122325997799635\n        ,0.0232921801507473,0.0329400151968002,0.0505042336881161,0.00243083899840713,0.00211556325666606,0.00381573452614248\n        ,0.333928316831589,0.333637237548828,0.342649161815643,0.148482084274292,0.169741451740265,0.325659662485123,0.165427297353745\n        ,0.190183475613594,0.338564485311508,0.332659870386124,0.424720793962479,0.272170603275299,0.265515953302383,0.400727868080139\n        ,0.3985435962677,0.386788845062256,0.480597913265228,0.483692198991776,0.382549494504929,0.371120661497116,0.389783293008804\n        ,0.388345569372177,0.375611394643784,0.479947537183762,0.477173000574112,0.479976087808609,0.488711804151535,0.264497667551041\n        ,0.480171978473663,0.480196863412857,0.281652390956879,0.386610776185989,0.393351674079895,0.493049114942551,0.476622134447098\n        ,0.493348211050034,0.488274902105331,0.481746703386307,0.479674130678177,0.485377997159958,0.383438646793365,0.38273361325264\n        ,0.478472590446472,0.478911131620407,0.482469409704208,0.25904905796051,0.387419193983078,0.484412759542465,0.374153643846512\n        ,0.384540796279907,0.393201231956482,0.391896665096283,0.389575123786926,0.397310733795166,0.389183044433594,0.395906448364258\n        ,0.391255348920822,0.385995209217072,0.379178792238235,0.480608761310577,0.478224217891693,0.478784024715424,0.483895808458328\n        ,0.485016852617264,0.289588868618011,0.2858946621418,0.282295495271683,0.278777480125427,0.280919998884201,0.284057527780533\n        ,0.275038123130798,0.492896527051926,0.491387784481049,0.488171577453613,0.487669318914413,0.483663886785507,0.483254432678223\n        ,0.487161904573441,0.488301068544388,0.494450151920319,0.493478566408157,0.491661041975021,0.491220772266388,0.488335520029068\n        ,0.488093882799149,0.490230351686478,0.49139529466629,0.447182863950729,0.453413426876068,0.457830518484116,0.455677270889282\n        ,0.451877117156982,0.452926635742188,0.453699231147766,0.452374875545502,0.162077844142914,0.153775423765183,0.144265338778496\n        ,0.130756393074989,0.12773522734642,0.110134489834309,0.100244358181953,0.257783085107803,0.328106373548508,0.337502628564835\n        ,0.339458107948303,0.336772680282593,0.334999978542328,0.337213188409805,0.333657503128052,0.321457594633102,0.240402236580849\n        ,0.236348703503609,0.2256248742342,0.192733883857727,0.178379684686661,0.337512731552124,0.33630096912384,0.00372941023670137\n        ,0.0425253920257092,0.00479376269504428,0.00736830430105329,0.024929778650403,0.0419468656182289,0.0679051578044891\n        ,0.0369835682213306,0.0055746752768755,0.00702597154304385,0.004378626588732,0.00330133899115026,0.00717229535803199\n        ,0.00537879345938563,0.00868201814591885,0.00824112817645073,0.0452413111925125,0.0330644808709621,0.0503015853464603\n        ,0.0586812384426594,0.0568802282214165,0.0477373376488686,0.0552803725004196,0.0545187331736088,0.0527505427598953\n        ,0.0634061843156815,0.00648416765034199,0.00671511329710484,0.00569756980985403,0.00735023058950901,0.0519979819655418\n        ,0.00522345816716552,0.00534566678106785,0.0481486767530441,0.00946079008281231,0.0066124158911407,0.0383318774402142\n        ,0.0402498096227646,0.00106495397631079,0.118589662015438,0.00465148035436869,0.00636514322832227,0.00802721362560987\n        ,0.01302869617939,0.0298224594444036,0.0730650275945663,0.0640791431069374,0.0785257965326309,0.129638075828552,0.00703607313334942\n        ,0.00397564051672816,0.002779102884233,0.00183781166560948,0.00102745718322694,0.00205730739980936,0.00119256286416203\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0363458469510078,0.0490859411656857,0.0230439715087414,0.0270924493670464\n        ,0.0206718631088734,0.0185975339263678,0.0315399616956711,0.0198257975280285,0.0269823614507914,0.0328964106738567\n        ,0.0420869141817093,0.033035896718502,0.0343892797827721,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0205506253987551\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0164824109524488,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0294039398431778\n        ,0.0285390242934227,0.033760379999876,0.25,0.0334517695009708,0.0518122427165508,0.0614676512777805,0.0205193366855383\n        ,0.0269071813672781,0.0314036086201668,0.0327518321573734,0.0268050134181976,0.0195972546935081,0.0420689024031162\n        ,0.25,0.0342525728046894,0.032850906252861,0.25,0.25,0.25,0.25,0.25,0.25,0.0203968714922667,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.25,0.25,0.25,0.25,0.0164006631821394,0.25,0.25,0.25,0.25,0.0283657796680927,0.0336172617971897,0.25,0.0332952253520489\n        ,0.0431861653923988,0.0524789169430733,0.0583099275827408,0.0627204552292824,0.0649085119366646,0.0649517104029655\n        ,0.0558292157948017,0.0712820068001747,0.0773883908987045,0.0595448277890682,0.0459866523742676,0.0631427764892578\n        ,0.0695129185914993,0.0743144378066063,0.0786107704043388,0.0818765684962273,0.0685356482863426,0.085819348692894\n        ,0.0700611248612404,0.0875939428806305,0.0724721848964691,0.0884920507669449,0.0853708758950233,0.0881564021110535\n        ,0.0908025205135345,0.0936112031340599,0.0958083048462868,0.097295954823494,0.0983019843697548,0.0867456123232841\n        ,0.04403305798769,0.0457499995827675,0.089852549135685,0.0920755043625832,0.0464900881052017,0.0950798839330673,0.04793631285429\n        ,0.0969551578164101,0.0981794819235802,0.0453936643898487,0.0594191439449787,0.0714830383658409,0.0849934816360474\n        ,0.0919935032725334,0.0601679086685181,0.031210158020258,0.0784409269690514,0.0928118303418159,0.0457577556371689\n        ,0.0402213782072067,0.115750454366207,0.0459373705089092,0.00880237855017185,0.104578346014023,0.00779814412817359\n        ,0.0330955237150192,0.00620269542559981,0.0458248779177666,0.115556560456753,0.0106787532567978,0.0427076853811741\n        ,0.0520423203706741,0.0623702667653561,0.0579177998006344,0.0646481588482857,0.0645835474133492,0.0556703619658947\n        ,0.0594267956912518,0.0773378387093544,0.0711730420589447,0.0628099739551544,0.0455066487193108,0.0741315335035324\n        ,0.0692554861307144,0.081831268966198,0.0785038098692894,0.0683186501264572,0.0858453959226608,0.0698799192905426\n        ,0.0876429975032806,0.072339653968811,0.0885435417294502,0.0882261097431183,0.0853879749774933,0.0937753990292549\n        ,0.0909218266606331,0.0959855541586876,0.0974629446864128,0.0984429940581322,0.0867866203188896,0.0899530425667763\n        ,0.045818142592907,0.0443416349589825,0.0922174900770187,0.0952682867646217,0.0465697981417179,0.0971475094556808\n        ,0.0479841232299805,0.098355196416378,0.0455138795077801,0.0592054910957813,0.0713467746973038,0.0850033462047577\n        ,0.0920666009187698,0.0600640438497067,0.0311885327100754,0.0783986672759056,0.0402268432080746,0.0457861050963402\n        ,0.0928908884525299,0.0460279919207096,0.11594096571207,0.0825046300888062,0.0336504355072975,0.0550510063767433,0.0327116213738918\n        ,0.0843499973416328,0.0538351610302925,0.115753903985024,0.0459173731505871,0.0423254780471325,0.0473188795149326\n        ,0.0469414778053761,0.0424519367516041,0.0455350130796433,0.0465708039700985,0.0463208556175232,0.0459131821990013\n        ,0.0454256609082222,0.0454010963439941,0.0476120784878731,0.0460077859461308,0.0464699864387512,0.0480568446218967\n        ,0.0285552516579628,0.0279842782765627,0.0420441664755344,0.0346364490687847,0.0459042675793171,0.0479452051222324\n        ,0.0302031561732292,0.0351778902113438,0.0353191234171391,0.0300698410719633,0.0477901250123978,0.0460597239434719\n        ,0.0475746355950832,0.0476561114192009,0.0469396188855171,0.0473422221839428,0.042336743324995,0.0424514710903168\n        ,0.0466025285422802,0.0457513518631458,0.046540342271328,0.0455028414726257,0.0456418693065643,0.0460276454687119\n        ,0.0466801859438419,0.0461235679686069,0.0493917614221573,0.0505173802375793,0.0328598394989967,0.0614248886704445\n        ,0.0582841336727142,0.0327506698668003,0.028565488755703,0.0420595146715641,0.0346313901245594,0.0460008196532726\n        ,0.0476239807903767,0.0496446788311005,0.0461848825216293,0.0553307607769966,0.0574205592274666,0.0306450352072716\n        ,0.0352026782929897,0.0550592020153999,0.0530673302710056,0.0526897385716438,0.0578309148550034,0.0578070469200611\n        ,0.0511235482990742,0.0550271794199944,0.0333066172897816,0.0585754439234734,0.0363343097269535,0.0334516875445843\n        ,0.0499937012791634,0.0477185994386673,0.0502332895994186,0.0329226404428482,0.0596463717520237,0.0602541044354439\n        ,0.0325763672590256,0.0548891797661781,0.0545088052749634,0.0385428369045258,0.0597529001533985,0.0630740821361542\n        ,0.060188289731741,0.0497944205999374,0.0485014282166958,0.0548396296799183,0.0474867112934589,0.0483855456113815\n        ,0.048272006213665,0.0479882210493088,0.0484448708593845,0.033422339707613,0.0332249216735363,0.0367633253335953,0.0371963866055012\n        ,0.0591864511370659,0.0586266443133354,0.0564895682036877,0.0560322143137455,0.0527559295296669,0.0523263998329639\n        ,0.0475462675094604,0.0351889580488205,0.0518597513437271,0.0550283901393414,0.0553474090993404,0.0562724024057388\n        ,0.0565110705792904,0.0470517128705978,0.0469588600099087,0.0484369359910488,0.0455471314489841,0.0457634702324867\n        ,0.036540824919939,0.051483154296875,0.0525423064827919,0.0472937934100628,0.0474919863045216,0.0455344542860985,0.0463755093514919\n        ,0.0482619404792786,0.0477126091718674,0.0420452356338501,0.0387176498770714,0.039597537368536,0.0432965233922005\n        ,0.0378118790686131,0.0393772348761559,0.0388134606182575,0.0400375463068485,0.0406235195696354,0.0418323688209057\n        ,0.0435393676161766,0.0449409149587154,0.0449843443930149,0.0442634783685207,0.0454877987504005,0.0468482598662376\n        ,0.0431497171521187,0.0388540960848331,0.0420254059135914,0.0379814654588699,0.0388836711645126,0.0405762083828449\n        ,0.0420276112854481,0.0438253730535507,0.0379501208662987,0.0464935377240181,0.0470876507461071,0.0479562990367413\n        ,0.0428505316376686,0.0432538129389286,0.0440746434032917,0.043167881667614,0.0358535051345825,0.0463173091411591\n        ,0.0455583706498146,0.0473006889224052,0.0433365665376186,0.0436598360538483,0.041830450296402,0.0425897315144539\n        ,0.0429352596402168,0.0446554943919182,0.0444185100495815,0.0478337593376637,0.0489576756954193,0.0458226874470711\n        ,0.0455644465982914,0.0451333113014698,0.0450351312756538,0.0444156192243099,0.04610550776124,0.0441313832998276,0.0450423546135426\n        ,0.0474513657391071,0.0425930954515934,0.0418335050344467,0.0427580513060093,0.0435871928930283,0.0469574220478535\n        ,0.0477113723754883,0.0432335324585438,0.03575224801898,0.0422356687486172,0.0439734980463982,0.0452122874557972,0.0419878959655762\n        ,0.0434043630957603,0.0424181818962097,0.0476711951196194,0.0470606423914433,0.0485476925969124,0.0440369583666325\n        ,0.0443284660577774,0.0432426556944847,0.0444737486541271,0.0441686771810055,0.0458097457885742,0.0439906790852547\n        ,0.0467772446572781,0.0438812710344791,0.0452282652258873,0.0449860095977783,0.0453792065382004,0.0476871356368065\n        ,0.0482325255870819,0.0461746491491795,0.0417544841766357,0.0429480746388435,0.0392320193350315,0.0384102240204811\n        ,0.037625715136528,0.0392917655408382,0.0385116524994373,0.0399314872920513,0.040337935090065,0.0414942279458046,0.0446748659014702\n        ,0.0447062738239765,0.0433738604187965,0.0440853387117386,0.04347088560462,0.0471675954759121,0.0453428402543068,0.0417539440095425\n        ,0.0385626032948494,0.0376894623041153,0.0385972186923027,0.0403062179684639,0.0417737476527691,0.0438350588083267\n        ,0.0378008708357811,0.0464474521577358,0.0470256581902504,0.0479054264724255,0.0426812805235386,0.0431039035320282\n        ,0.0439547300338745,0.0359450168907642,0.0431542471051216,0.0455041453242302,0.0462410636246204,0.0472339168190956\n        ,0.0431707948446274,0.0435150414705276,0.0422635935246944,0.0415555536746979,0.0426978245377541,0.0444945953786373\n        ,0.0443046689033508,0.0453293025493622,0.045503132045269,0.0486048869788647,0.0449728332459927,0.044301874935627,0.0448818653821945\n        ,0.0458832271397114,0.0472133979201317,0.0448503606021404,0.0439546369016171,0.0423831306397915,0.0434070527553558\n        ,0.0425996817648411,0.041539017111063,0.0469246916472912,0.04325220733881,0.0476763360202312,0.0422559827566147,0.035848829895258\n        ,0.04379603266716,0.0450015254318714,0.0432388633489609,0.0417218655347824,0.0422676876187325,0.0476168803870678,0.0470242872834206\n        ,0.0485067889094353,0.0438692346215248,0.426967233419418,0.0432997718453407,0.427755177021027,0.0439979955554008,0.0456666573882103\n        ,0.421029776334763,0.0463924035429955\n        Transform: 1.24029691597309e-006,-1.27428575571653e-006,0.999999999997432,0,0.99549886814286,0.0947735896485261,-1.11394550754345e-006\n        ,0,-0.0947735896470627,0.995498868141555,1.38609737719942e-006,0,-40.9408718012017,-5.17448571803319,-0.0375229850015673\n        ,1\n        TransformLink: 1.24029687904964e-006,0.995498838507016,-0.0947735868256679,0,-1.27428571778409e-006,0.0947735868273431,0.995498838507936\n        ,0,0.999999999999406,-1.11394550754565e-006,1.38609737720216e-006,0,0.0375671700638182,41.2469948552473,1.27108130581873\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_Spine1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670\n        ,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693\n        ,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,4732,4733,4734,4735,4736\n        ,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759\n        ,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,5301\n        ,5302,5308,5310,5315,5316,5317,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5339,5340,5341\n        ,5342,5343,5344,5345,5346,5347,5353,5354,5355,5356,5357,5377,5378,5385,5390,5392,5393,5422,5435,5436,5440,5441,5442\n        ,5445,5446,5461,5468,5469,5470,5476,5481,5482,5530,5531,5739,5740,5741,5742,5746,5747,5748,5749,5750,5751,5752,5757\n        ,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5769,5770,5772,5773,5774,5775,5776,5777,5778,5779,5780,5782,5786\n        ,5787,5788,5808,5809,5816,5821,5823,5824,5852,5866,5870,5871,5872,5875,5876,5891,5892,5899,5910,5911,5959,6496,6497\n        ,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520\n        ,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6544,6546,6547,6548,6549\n        ,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6571,6575,6579,6581,6583,6584,6585\n        ,6586,6593,6594,6596,6597,6598,6599,6600,6603,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623\n        ,6624,6625,6626,6627,6628,6629,6632,6634,6657,6658,6660,6661,6668,6671,6672,6673,6675,6676,6677,6678,6679,6684,6685\n        ,6686,6687,6692,6693,6694,6695,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6717,6718,6719\n        ,6720,6721,6727,6736,6737,6738,6739,6740,6742,6743,6744,6745,6751,6752,6754,6755,6756,6757,6758,6759,6762,6772,6773\n        ,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6792,6794,6795,6796,6815,6816\n        ,6818,6819,6825,6828,6829,6830,6831,6833,6834,6835,6836,6837,6841,6842,6843,6844,6845,6865,6884,6885,6886,6887,6888\n        ,6889,6891,6892,6893,6894,6895,6896,6897,6898,6899,6901,6902,6905,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921\n        ,6922,9350,9351,9678,9679,9685,9686,9687,9696,9699,9700,9704,9705,9706,9721,9722,9723,9927,9928,9929,9930,9931,9932\n        ,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955\n        ,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978\n        ,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001\n        ,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020\n        ,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038,10039\n        ,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10112,10116,10128,10129,10130,10131,10132\n        ,10133,10134,10135,10136,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158\n        ,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177\n        ,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10192,10193,10194,10197,10216,10223,10224\n        ,10225,10226,10227,10228,10229,10230,10231,10232,10239,10240,10241,10250,10251,10252,10253,10255,10256,10275,10276\n        ,10277,10284,10285,10286,10287,10288,10289,10338,10339,10448,10449,10456,10470,10471,10483,10484,10485,10486,10490\n        ,10550,10570,10571,10572,10573,10575,10583,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596\n        ,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615\n        ,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10628,10629,10632,10633,10634,10637,10656,10661\n        ,10662,10663,10664,10665,10666,10667,10668,10669,10670,10677,10685,10686,10687,10688,10691,10692,10709,10710,10711\n        ,10712,10719,10720,10721,10722,10723,10724,10771,10772,10876,10877,10888,10895,10896,10897,10909,10910,10911,10912\n        ,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931\n        ,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950\n        ,10952,10953,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971\n        ,10972,10974,10977,10978,10979,10981,10982,10984,10985,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996\n        ,10997,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019\n        ,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039\n        ,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058\n        ,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077\n        ,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096\n        ,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115\n        ,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134\n        ,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153\n        ,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172\n        ,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191\n        ,11192\n        Weights: 0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0160846933722496,0.0164203029125929\n        ,0.0159657876938581,0.0154251707717776,0.0168652925640345,0.0166946854442358,0.0172978769987822,0.0174098424613476\n        ,0.0175959542393684,0.0179028194397688,0.0176764037460089,0.0180323757231236,0.0175203327089548,0.0177715346217155\n        ,0.0171755701303482,0.0172060579061508,0.0167375691235065,0.0164956580847502,0.0163211673498154,0.0158238299190998\n        ,0.0160321909934282,0.0153556959703565,0.0159447863698006,0.015207638964057,0.0128046330064535,0.0123249804601073\n        ,0.0134784216061234,0.0141613502055407,0.0146538205444813,0.0148128774017096,0.0146015761420131,0.0140923066064715\n        ,0.0134314354509115,0.0127910561859608,0.0123281786218286,0.0121562043204904,0.0129481069743633,0.0126527966931462\n        ,0.0133569296449423,0.0137679995968938,0.0140651864930987,0.0141647066920996,0.0140419183298945,0.0137354964390397\n        ,0.0133314346894622,0.012936201877892,0.0126501396298409,0.0125458519905806,0.0167935136705637,0.0133372796699405\n        ,0.4118632376194,0.435128420591354,0.452331721782684,0.309406131505966,0.449244529008865,0.0940441563725472,0.407361507415771\n        ,0.404217571020126,0.421248406171799,0.409840732812881,0.392953753471375,0.428104996681213,0.405013799667358,0.0706687644124031\n        ,0.499827414751053,0.496607095003128,0.374263346195221,0.571578025817871,0.405000001192093,0.269432663917542,0.249056547880173\n        ,0.5,0.394996881484985,0.384848088026047,0.389729768037796,0.334900081157684,0.293396413326263,0.328714191913605,0.398442834615707\n        ,0.32771834731102,0.0595257952809334,0.0552126057446003,0.454701125621796,0.40461653470993,0.4881192445755,0.347358107566834\n        ,0.35251322388649,0.440273106098175,0.308558940887451,0.391451150178909,0.371111899614334,0.507824063301086,0.489344775676727\n        ,0.339798629283905,0.363848000764847,0.356653660535812,0.403677821159363,0.446302890777588,0.415230363607407,0.0906204208731651\n        ,0.0889278724789619,0.412925362586975,0.449999988079071,0.0518114231526852,0.0728756785392761,0.0594516582787037,0.0610590726137161\n        ,0.0579790323972702,0.477428883314133,0.401172369718552,0.389459520578384,0.377351671457291,0.502477288246155,0.389182537794113\n        ,0.428046405315399,0.387773752212524,0.402254194021225,0.485787153244019,0.0524009801447392,0.404599189758301,0.42209380865097\n        ,0.410691499710083,0.393934220075607,0.428258091211319,0.405008465051651,0.499823004007339,0.496008574962616,0.376370757818222\n        ,0.384699434041977,0.0788780599832535,0.341655790805817,0.348720580339432,0.5,0.396044343709946,0.385793387889862\n        ,0.390573292970657,0.378742516040802,0.348475426435471,0.358005672693253,0.379805535078049,0.353024065494537,0.119299098849297\n        ,0.453788548707962,0.405600816011429,0.487848222255707,0.389860063791275,0.426657408475876,0.441065758466721,0.30920135974884\n        ,0.392572522163391,0.34356015920639,0.359241247177124,0.341385185718536,0.366231173276901,0.358353018760681,0.349766403436661\n        ,0.446171700954437,0.413984596729279,0.390668451786041,0.0912416279315948,0.412029325962067,0.0845936164259911,0.0729723423719406\n        ,0.0587323158979416,0.447466403245926,0.438775271177292,0.497988551855087,0.492459923028946,0.482212215662003,0.0798316299915314\n        ,0.0531247593462467,0.0527055263519287,0.0659925639629364,0.0599521771073341,0.0557822063565254,0.0600882656872272\n        ,0.0715308338403702,0.0537794753909111,0.0618537701666355,0.0668433904647827,0.0528572015464306,0.0730938166379929\n        ,0.00181005604099482,0.00221109134145081,0.00119374599307776,0.00146303232759237,0.00136578513775021,0.00223155738785863\n        ,0.0690709576010704,0.0473786555230618,0.0920473039150238,0.0891687572002411,0.0381028018891811,0.00387158431112766\n        ,0.00251820357516408,0.00166320090647787,0.00180311361327767,0.00113617500755936,0.00619343807920814,0.0186367426067591\n        ,0.00111796089913696,0.00189601548481733,0.00200709118507802,0.00302449869923294,0.00478658778592944,0.00123879930470139\n        ,0.00197416427545249,0.00173406291287392,0.0183619633316994,0.0167030841112137,0.0173190552741289,0.0156179061159492\n        ,0.0506496839225292,0.050516739487648,0.0377767160534859,0.0546070151031017,0.0417194440960884,0.0459446907043457\n        ,0.0589710585772991,0.0463874600827694,0.00128481700085104,0.020310215651989,0.0542940571904182,0.0669875293970108\n        ,0.0289271455258131,0.0201205685734749,0.0398120880126953,0.0143598988652229,0.0361818224191666,0.00191568059381098\n        ,0.0531524606049061,0.0251301974058151,0.0691704824566841,0.0520155392587185,0.0624980665743351,0.0755863040685654\n        ,0.0785739421844482,0.0241166241466999,0.0203430224210024,0.0184384100139141,0.0401647128164768,0.00786753464490175\n        ,0.0217073261737823,0.089838333427906,0.0157315582036972,0.0600272752344608,0.0427021160721779,0.0384004004299641\n        ,0.0568193718791008,0.0522586293518543,0.035638190805912,0.0346027687191963,0.0764086619019508,0.0884695127606392\n        ,0.0188344158232212,0.070174053311348,0.0326588302850723,0.0264596547931433,0.0506513118743896,0.01990070566535,0.0195501185953617\n        ,0.028569471091032,0.0360912568867207,0.0218110550194979,0.0160472877323627,0.0184787679463625,0.0352999679744244\n        ,0.0516716316342354,0.00237905723042786,0.00159102503675967,0.0226545855402946,0.0271457750350237,0.0474893748760223\n        ,0.0645274966955185,0.0529851205646992,0.0228720381855965,0.0246643126010895,0.0471772253513336,0.0649261623620987\n        ,0.0203444454818964,0.0275691486895084,0.0192651394754648,0.0189470537006855,0.0246421601623297,0.01800193823874,0.0357401669025421\n        ,0.0506223030388355,0.0174189861863852,0.0172808524221182,0.0165687892585993,0.0133684435859323,0.0363536477088928\n        ,0.0501126907765865,0.0500063300132751,0.0454842299222946,0.0584978610277176,0.045951172709465,0.0012955809943378\n        ,0.0180803369730711,0.0527493879199028,0.0667149424552917,0.0293978601694107,0.0208155307918787,0.0405387282371521\n        ,0.0133866406977177,0.04086684435606,0.0363172851502895,0.0116078825667501,0.0158129744231701,0.0509919971227646,0.0182479619979858\n        ,0.0257603283971548,0.0683596357703209,0.0512992851436138,0.0617051981389523,0.0748262330889702,0.0815390720963478\n        ,0.0236504841595888,0.0202212948352098,0.0184010080993176,0.0407758466899395,0.0176970455795527,0.0173410214483738\n        ,0.0224231835454702,0.0889244079589844,0.0594708025455475,0.0424453541636467,0.0379730463027954,0.0561151020228863\n        ,0.0516486801207066,0.0352943167090416,0.0342671312391758,0.0758966356515884,0.0880906879901886,0.0187969096004963\n        ,0.0702414438128471,0.0320881120860577,0.0261492505669594,0.0499122962355614,0.0198557674884796,0.0195044167339802\n        ,0.028232004493475,0.0354873239994049,0.0216745641082525,0.0166845489293337,0.01869329623878,0.0197165627032518,0.018470698967576\n        ,0.0349537320435047,0.0510836020112038,0.0024017239920795,0.00161671859677881,0.0228383634239435,0.00963364727795124\n        ,0.0218189973384142,0.0476066395640373,0.066476434469223,0.0533930957317352,0.0226607136428356,0.0244316216558218\n        ,0.046758908778429,0.0641279742121696,0.0238656513392925,0.0182043109089136,0.0171894691884518,0.0393313504755497\n        ,0.0524248778820038,0.0163537990301847,0.0491573363542557,0.0539665594696999,0.052042193710804,0.0551500394940376\n        ,0.0565586723387241,0.0413413755595684,0.00491613335907459,0.00462120585143566,0.00493934098631144,0.0395209453999996\n        ,0.0472693964838982,0.0580320283770561,0.0528250709176064,0.0546943955123425,0.0498614907264709,0.0141710704192519\n        ,0.0384655743837357,0.0153101915493608,0.0204608496278524,0.0201338287442923,0.0194478500634432,0.0189187098294497\n        ,0.0184417404234409,0.0204847734421492,0.0195690207183361,0.0189714375883341,0.0187409352511168,0.0184062235057354\n        ,0.0201160330325365,0.0121795358136296,0.01349903549999,0.0223800241947174,0.0190002582967281,0.023339007049799,0.0263351127505302\n        ,0.0235265847295523,0.0271546300500631,0.0213052537292242,0.0235639810562134,0.025151539593935,0.0246744081377983\n        ,0.0207709092646837,0.0228502154350281,0.0254615023732185,0.0245288666337729,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.0610730834305286,0.0480313338339329,0.0657686740159988,0.0603674054145813,0.0632295534014702,0.0655892416834831\n        ,0.056696955114603,0.0630388557910919,0.0597760379314423,0.0569867044687271,0.0520362481474876,0.0575678944587708\n        ,0.0568820908665657,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0624931752681732,0.0608663484454155,0.0741311311721802\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0579049400985241,0.0732160955667496,0.073155365884304,0.25,0.25,0.25,0.0630910694599152\n        ,0.075778141617775,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0633393228054047,0.0602369867265224,0.0572502575814724,0.25\n        ,0.0582733973860741,0.0463946387171745,0.0345158390700817,0.0634916201233864,0.0606879107654095,0.0570367276668549\n        ,0.0573146566748619,0.0601356104016304,0.0634386166930199,0.0521964766085148,0.25,0.0571960285305977,0.0579383820295334\n        ,0.25,0.25,0.25,0.25,0.25,0.25,0.0628122016787529,0.0741900429129601,0.0608696937561035,0.25,0.25,0.25,0.25,0.25,0.25\n        ,0.25,0.0731783211231232,0.25,0.25,0.25,0.063268169760704,0.25,0.25,0.25,0.25,0.0605871565639973,0.0575619041919708\n        ,0.25,0.0585609637200832,0.0125644169747829,0.0161781385540962,0.0946971252560616,0.113065972924232,0.0955591946840286\n        ,0.113255612552166,0.115407161414623,0.0166719518601894,0.111046440899372,0.114557966589928,0.115057192742825,0.134647995233536\n        ,0.118201650679111,0.10340691357851,0.0990749299526215,0.0968202129006386,0.0956590920686722,0.0955270379781723,0.0956348106265068\n        ,0.0974334701895714,0.0942233800888062,0.0941582396626472,0.0963840037584305,0.102147005498409,0.0968629568815231\n        ,0.0958827063441277,0.0953153520822525,0.0952657982707024,0.0954933315515518,0.0947557613253593,0.094863660633564\n        ,0.0943074598908424,0.0947857350111008,0.0932449623942375,0.0943935662508011,0.0960135459899902,0.0962416753172874\n        ,0.096434086561203,0.0970151573419571,0.0969958752393723,0.0975823402404785,0.0983297526836395,0.0963755026459694\n        ,0.0478864125907421,0.0472911819815636,0.0966922789812088,0.0968846678733826,0.0468310043215752,0.0975888222455978\n        ,0.0479436703026295,0.0976556986570358,0.0982761457562447,0.0453936643898487,0.0829939991235733,0.131572216749191\n        ,0.095733642578125,0.0931219086050987,0.0330649577081203,0.111474379897118,0.0940181314945221,0.0138383228331804,0.0954996421933174\n        ,0.0963278412818909,0.0489871390163898,0.0639310702681541,0.116211578249931,0.0943464785814285,0.0959200859069824\n        ,0.0470763146877289,0.047386534512043,0.115750454366207,0.0459373705089092,0.0615078397095203,0.114474974572659,0.0102072861045599\n        ,0.114212065935135,0.107755355536938,0.108900405466557,0.113887831568718,0.0153199834749103,0.0134717989712954,0.331447571516037\n        ,0.0140763055533171,0.0571444295346737,0.115523591637611,0.0114414868876338,0.121026553213596,0.0150303114205599,0.0986424684524536\n        ,0.0156874470412731,0.0176794230937958,0.0991439148783684,0.0458248779177666,0.115556560456753,0.0121582960709929\n        ,0.00145241722930223,0.00110338255763054,0.0189089998602867,0.0985106527805328,0.107939377427101,0.113377869129181\n        ,0.115028515458107,0.0350148677825928,0.112978167831898,0.0912709683179855,0.115363225340843,0.0318216159939766,0.110598295927048\n        ,0.0288906805217266,0.103646159172058,0.117995038628578,0.0993009060621262,0.0958817303180695,0.0970390737056732,0.0958659276366234\n        ,0.0957623273134232,0.0975157767534256,0.0964478775858879,0.0942511260509491,0.0943288579583168,0.0971035063266754\n        ,0.102390080690384,0.0955712720751762,0.0961361154913902,0.0957473963499069,0.0955247059464455,0.0949553698301315\n        ,0.0950683504343033,0.0944903567433357,0.0949619114398956,0.0933806076645851,0.0945300683379173,0.0965021103620529\n        ,0.096266895532608,0.0972602441906929,0.0966887548565865,0.0971979051828384,0.0977544412016869,0.0984711647033691\n        ,0.0966334342956543,0.0969574153423309,0.0473992563784122,0.0483118109405041,0.097144216299057,0.0978377535939217\n        ,0.0469192080199718,0.0978628695011139,0.0479916408658028,0.0984536111354828,0.0455138795077801,0.0759637728333473\n        ,0.095848985016346,0.0932484567165375,0.0500443838536739,0.111272752285004,0.0941459313035011,0.0148799484595656,0.0956147909164429\n        ,0.0963888987898827,0.1161749958992,0.0639409199357033,0.0490578524768353,0.0944396182894707,0.0474578179419041,0.0471202805638313\n        ,0.0960363075137138,0.0460279919207096,0.11594096571207,0.0959390848875046,0.113968148827553,0.113645575940609,0.108573324978352\n        ,0.107358492910862,0.0231448579579592,0.0258436370640993,0.108174778521061,0.100355915725231,0.0570258460938931,0.0962649509310722\n        ,0.115307062864304,0.10031446069479,0.120918855071068,0.0240998882800341,0.0352719128131866,0.098014697432518,0.0254631005227566\n        ,0.098651260137558,0.115753903985024,0.0459173731505871,0.00128815008793026,0.00187792407814413,0.00138435524422675\n        ,0.0017597529804334,0.0464554391801357,0.0474064983427525,0.0470624417066574,0.0466079525649548,0.0455350130796433\n        ,0.0468212924897671,0.0437308289110661,0.0440183058381081,0.0454256609082222,0.0454010963439941,0.0361616723239422\n        ,0.0436928942799568,0.043303482234478,0.03602509573102,0.0482787489891052,0.047590360045433,0.0465318225324154,0.0479768924415112\n        ,0.0442606769502163,0.0457951314747334,0.0483870916068554,0.0478363074362278,0.0477668158710003,0.0483069196343422\n        ,0.0367880687117577,0.0436840392649174,0.0369462110102177,0.0368062853813171,0.0470705032348633,0.0474236905574799\n        ,0.046487208455801,0.0466318503022194,0.0468555018305779,0.0457513518631458,0.0437558144330978,0.0455028414726257\n        ,0.0456418693065643,0.0441100299358368,0.0433482155203819,0.0437701754271984,0.0268096122890711,0.025440776720643\n        ,0.0119284018874168,0.0146921891719103,0.0483344532549381,0.0465798899531364,0.0480228587985039,0.0443773195147514\n        ,0.0455287732183933,0.0267925076186657,0.0436607450246811,0.0281855668872595,0.0224408134818077,0.048752348870039\n        ,0.047987125813961,0.0177878737449646,0.0201244056224823,0.0212911684066057,0.0216138940304518,0.0159024260938168\n        ,0.0382708534598351,0.0297725424170494,0.0208371076732874,0.0259721092879772,0.037489291280508,0.0253221485763788\n        ,0.0119044473394752,0.0110253505408764,0.0170450117439032,0.0180079024285078,0.0295708458870649,0.019897572696209\n        ,0.0265107657760382,0.0362237952649593,0.0424570478498936,0.0366268083453178,0.0421036295592785,0.0370111688971519\n        ,0.0360145717859268,0.0358593687415123,0.0354854501783848,0.0213343035429716,0.0219551715999842,0.0275051966309547\n        ,0.0315192379057407,0.0366171412169933,0.0375544615089893,0.0425509549677372,0.04792245849967,0.0371451638638973,0.0319571644067764\n        ,0.0312190800905228,0.0285049546509981,0.0303987730294466,0.0430089570581913,0.04224693775177,0.0362669602036476,0.0455471314489841\n        ,0.0457634702324867,0.0380893014371395,0.0421890206634998,0.0401321649551392,0.0402174852788448,0.0449648573994637\n        ,0.0438278988003731,0.048929788172245,0.0491268672049046,0.0377959571778774,0.034326296299696,0.0331560783088207,0.0366695560514927\n        ,0.032829862087965,0.0312358327209949,0.0328594297170639,0.0316329225897789,0.0337643548846245,0.0326298214495182\n        ,0.0279203932732344,0.0363381430506706,0.0310495290905237,0.028650401160121,0.0452901385724545,0.0487910769879818\n        ,0.0508548691868782,0.035187091678381,0.0386115312576294,0.0337366759777069,0.0337099097669125,0.0345613844692707\n        ,0.0353715158998966,0.0502113327383995,0.0541133023798466,0.0481908470392227,0.0475474782288074,0.0479730777442455\n        ,0.0428487621247768,0.0432051122188568,0.0439012609422207,0.0495737344026566,0.0548233762383461,0.0470600426197052\n        ,0.0479314848780632,0.0474002063274384,0.0433365665376186,0.0436579845845699,0.0344199351966381,0.0330208316445351\n        ,0.0354295782744884,0.0412854179739952,0.0443773530423641,0.0372496731579304,0.030983192846179,0.0308753717690706\n        ,0.0365771092474461,0.0414599291980267,0.0419258736073971,0.0443407259881496,0.0271183177828789,0.0270751696079969\n        ,0.0279165171086788,0.0283128377050161,0.0307662542909384,0.0326637551188469,0.0284421108663082,0.0283898822963238\n        ,0.0488329380750656,0.0487452857196331,0.0516017079353333,0.0552499406039715,0.0516585372388363,0.0262685399502516\n        ,0.0259816572070122,0.0343030691146851,0.0272527150809765,0.0290697049349546,0.0481483936309814,0.0489150248467922\n        ,0.0485729686915874,0.0440369583666325,0.0443004779517651,0.0529002211987972,0.0444244109094143,0.0422025732696056\n        ,0.0433992557227612,0.0430087298154831,0.0371259637176991,0.0356947109103203,0.0366935394704342,0.0428103283047676\n        ,0.0448220446705818,0.0490759424865246,0.0488878265023232,0.0436882935464382,0.0376130416989326,0.0364996418356895\n        ,0.0329779572784901,0.0341395400464535,0.0325955376029015,0.0309378877282143,0.0327054634690285,0.0313573144376278\n        ,0.0336268469691277,0.0325021110475063,0.0309654697775841,0.0362372621893883,0.0277648419141769,0.0284956824034452\n        ,0.0510877929627895,0.0490892678499222,0.0451494082808495,0.0384254641830921,0.0349950790405273,0.0335587300360203\n        ,0.0335502773523331,0.0344194956123829,0.0352435037493706,0.0500917658209801,0.0535659939050674,0.0481077879667282\n        ,0.0474749654531479,0.0479218363761902,0.04267967492342,0.0430561415851116,0.0437839739024639,0.0545541681349278,0.0494237542152405\n        ,0.0478241555392742,0.046966340392828,0.0473311729729176,0.0431707948446274,0.043513223528862,0.0329000502824783,0.0342921055853367\n        ,0.0353162884712219,0.0411745198071003,0.044264130294323,0.0364803969860077,0.0307964682579041,0.0309248808771372\n        ,0.041353452950716,0.0442280955612659,0.0418182425200939,0.0269630569964647,0.0281666107475758,0.0277667213231325\n        ,0.026924280449748,0.0305882766842842,0.0282064899802208,0.0282657127827406,0.0325478427112103,0.0487661845982075\n        ,0.0514672324061394,0.0486907325685024,0.0515044741332531,0.0549807958304882,0.0261166952550411,0.0258255377411842\n        ,0.027095315977931,0.0341812409460545,0.0288916807621717,0.0480824448168278,0.0488349907100201,0.0485314689576626\n        ,0.0438692346215248,0.426702290773392,0.0527382120490074,0.427288204431534,0.0420678332448006,0.0432938933372498,0.411774486303329\n        ,0.0439190529286861\n        Transform: 1.03960774012265e-006,-1.1645631211396e-006,0.999999999997726,0,0.980749677729069,0.195269132266046,-7.92191754171597e-007\n        ,0,-0.195269132265112,0.980749677727561,1.34514825497483e-006,0,-44.7250186963504,-9.75817513334512,-0.0375375437398236\n        ,1\n        TransformLink: 1.03960777715106e-006,0.980749712661095,-0.195269139220145,0,-1.16456316262133e-006,0.195269139221532,0.98074971266186\n        ,0,0.999999999999837,-7.92191754173269e-007,1.34514825497767e-006,0,0.0375726762057927,45.7695196641321,0.836911606184657\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Thigh1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754\n        ,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777\n        ,4778,4779,4780,4781,5330,5333,5476,5481,5482,5530,5531,5752,5765,5767,5910,5911,5959,6502,6503,6504,6505,6508,6509\n        ,6510,6511,6512,6513,6520,6522,6539,6540,6541,6542,6543,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556\n        ,6557,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6576,6577,6578,6579,6580,6581\n        ,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604\n        ,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627\n        ,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650\n        ,6651,6652,6653,6654,6655,6656,6657,6658,6659,6662,6663,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676\n        ,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6703,6704,6706,6707\n        ,6708,6709,6710,6711,6715,6717,6718,6719,6720,6721,6727,6736,6737,6739,6740,6742,6743,6744,6745,6754,6755,6756,6757\n        ,6758,6759,6760,6761,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6786,6787,6788,6789,6790,6792\n        ,6794,6795,6796,6815,6816,6817,6823,6824,6825,6828,6829,6830,6832,6833,6834,6835,6836,6837,6841,6842,6843,6844,6845\n        ,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6884,6885,6886,6887,6888\n        ,6889,6890,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918\n        ,6919,6920,6921,6922,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098\n        ,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121\n        ,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144\n        ,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167\n        ,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190\n        ,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213\n        ,9214,9215,9216,9217,9218,9219,9220,9221,9224,9225,9228,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241\n        ,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264\n        ,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287\n        ,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310\n        ,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333\n        ,9334,9337,9338,9340,9341,9342,9343,9344,9345,9346,9350,9351,9352,9353,9358,9359,9360,9361,9362,9363,9364,9365,9366\n        ,9367,9368,9369,9370,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9387,9388,9389,9390,9391,9394,9395\n        ,9396,9397,9398,9401,9402,9403,9404,9405,9406,9407,9408,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423\n        ,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446\n        ,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469\n        ,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492\n        ,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515\n        ,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538\n        ,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561\n        ,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584\n        ,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607\n        ,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630\n        ,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653\n        ,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676\n        ,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699\n        ,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722\n        ,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745\n        ,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768\n        ,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791\n        ,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814\n        ,9815,9816,9817,9830,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856\n        ,9857,9858,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924\n        ,10942,10943,10944,10945,10946,10947,10948,10949,10950,10952,10953,10958,10959,10960,10961,10962,10963,10966,10967\n        ,10968,10969,10970,10971,10972,10974,10987,10988,10989,10992,11002,11003,11004,11005,11006,11007,11010,11011,11012\n        ,11013,11014,11019,11021,11024,11025,11026,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040\n        ,11041,11042,11043,11046,11047,11048,11049,11050,11051,11057,11058,11059,11065,11066,11067,11068,11069,11070,11071\n        ,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11092,11093,11094,11095\n        ,11096,11100,11101,11103,11104,11105,11106,11107,11108,11109,11110,11186,11188,11191\n        Weights: 0.485887348651886,0.485664427280426,0.486068248748779,0.486428737640381,0.485347807407379,0.48554915189743,0.485024094581604\n        ,0.485015153884888,0.484783440828323,0.484618633985519,0.484691768884659,0.48446998000145,0.484771847724915,0.484603881835938\n        ,0.484998911619186,0.484975725412369,0.485310763120651,0.485482156276703,0.48562553524971,0.485992193222046,0.485862076282501\n        ,0.486377358436584,0.485958486795425,0.486538648605347,0.488901674747467,0.489226847887039,0.488413363695145,0.487895905971527\n        ,0.487497180700302,0.487329483032227,0.487433940172195,0.487773805856705,0.488253176212311,0.488746970891953,0.48913100361824\n        ,0.489307641983032,0.488778561353683,0.488978236913681,0.488482058048248,0.488169342279434,0.487927585840225,0.487823575735092\n        ,0.487883865833282,0.488089084625244,0.488382279872894,0.488686174154282,0.488922417163849,0.489029705524445,0.485335648059845\n        ,0.488437861204147,0.00416137091815472,0.0277236085385084,0.00643570115789771,0.0121639529243112,0.00909974239766598\n        ,0.00479171518236399,0.00500419642776251,0.0411929301917553,0.172316744923592,0.017515791580081,0.0122600849717855\n        ,0.0147061124444008,0.0363224595785141,0.00548371067270637,0.00576615380123258,0.00444313138723373,0.0309221986681223\n        ,0.0243861526250839,0.0407855473458767,0.0334193743765354,0.0287858210504055,0.0404290556907654,0.0133521696552634\n        ,0.0153562361374497,0.00394795602187514,0.294720143079758,0.332147061824799,0.451189517974854,0.440738648176193,0.52694171667099\n        ,0.56053215265274,0.0710113123059273,0.0754943490028381,0.0762333571910858,0.0324223935604095,0.0426231101155281,0.0419300906360149\n        ,0.054236363619566,0.0367760732769966,0.04872802272439,0.0433972254395485,0.0314307063817978,0.0425226949155331,0.0682456791400909\n        ,0.0300944074988365,0.0210858918726444,0.474399924278259,0.484295248985291,0.471498638391495,0.486365467309952,0.523557245731354\n        ,0.619279742240906,0.495875418186188,0.440913885831833,0.57122141122818,0.46727055311203,0.796168506145477,0.768812656402588\n        ,0.275839567184448,0.51499605178833,0.0743753090500832,0.198682188987732,0.411301642656326,0.529948353767395,0.479820847511292\n        ,0.500937938690186,0.0263245217502117,0.0424249768257141,0.0316543057560921,0.0201548170298338,0.522229611873627,0.678726494312286\n        ,0.66076672077179,0.173374861478806,0.30635866522789,0.916980922222137,0.150171235203743,0.0270051024854183,0.595347344875336\n        ,0.0752822607755661,0.0772483572363853,0.461545795202255,0.492276847362518,0.482892215251923,0.200412526726723,0.184160679578781\n        ,0.319056957960129,0.78528881072998,0.516901075839996,0.535338282585144,0.506751537322998,0.510367870330811,0.586331486701965\n        ,0.485847264528275,0.0350798517465591,0.0520882494747639,0.0562988594174385,0.0380594171583653,0.0421464815735817\n        ,0.0588397644460201,0.0591345317661762,0.0170080959796906,0.00808634608983994,0.0766877830028534,0.411884099245071\n        ,0.059490691870451,0.0679867044091225,0.0484188869595528,0.0754582211375237,0.0759724006056786,0.0657854825258255\n        ,0.0559916496276855,0.0736488029360771,0.591260671615601,0.889732003211975,0.487271994352341,0.498950868844986,0.479613840579987\n        ,0.785834491252899,0.572824597358704,0.708657145500183,0.82976233959198,0.885602414608002,0.511381566524506,0.889257073402405\n        ,0.876482963562012,0.872237324714661,0.858885586261749,0.69885516166687,0.712929487228394,0.754870116710663,0.826089322566986\n        ,0.498461186885834,0.796081304550171,0.862102627754211,0.716035425662994,0.776793837547302,0.468493312597275,0.370141059160233\n        ,0.935255467891693,0.0588337853550911,0.0423679687082767,0.364401966333389,0.409932792186737,0.502030313014984,0.424725890159607\n        ,0.206638872623444,0.423550963401794,0.47427025437355,0.512981176376343,0.535405337810516,0.478230774402618,0.450324267148972\n        ,0.350229740142822,0.15829062461853,0.437203019857407,0.072347916662693,0.0704113468527794,0.047590609639883,0.0304904915392399\n        ,0.219705045223236,0.453156352043152,0.565890371799469,0.696279883384705,0.459840565919876,0.470807462930679,0.0758446231484413\n        ,0.0758962407708168,0.19060306251049,0.814237117767334,0.589112102985382,0.650303483009338,0.479312092065811,0.0765506327152252\n        ,0.0573959946632385,0.0422562398016453,0.00594675494357944,0.0069339326582849,0.00750571070238948,0.00675412360578775\n        ,0.00756251020357013,0.0105591025203466,0.00956473592668772,0.0109887747094035,0.0118240602314472,0.0225534420460463\n        ,0.0116446474567056,0.0156345162540674,0.0126503072679043,0.0184017214924097,0.02912762388587,0.00835435185581446\n        ,0.010559193789959,0.013892981223762,0.0155445421114564,0.00457817409187555,0.00558604719117284,0.00587162794545293\n        ,0.00433524837717414,0.00438852561637759,0.00434144446626306,0.0155169852077961,0.0101993773132563,0.0118669904768467\n        ,0.0128709143027663,0.0612366311252117,0.0660941079258919,0.00496103381738067,0.00530405156314373,0.00533060822635889\n        ,0.00517881009727716,0.00564287463203073,0.00555076450109482,0.00627115042880178,0.00655965972691774,0.00349594838917255\n        ,0.00450626295059919,0.0270621012896299,0.0077071120031178,0.00553002953529358,0.0046713505871594,0.00450748903676867\n        ,0.00562692666426301,0.00778896035626531,0.00455631455406547,0.00974517222493887,0.0224243085831404,0.0199902169406414\n        ,0.0152868358418345,0.00588500546291471,0.00600074883550406,0.035562451928854,0.0668709725141525,0.0528643541038036\n        ,0.0286797415465117,0.00771835539489985,0.0144776906818151,0.0277420245110989,0.0613043904304504,0.0195530038326979\n        ,0.00477746222168207,0.00492516811937094,0.00538024539127946,0.00471328524872661,0.0245123784989119,0.00481082545593381\n        ,0.00498686451464891,0.00863044243305922,0.0080834086984396,0.945337295532227,0.575647234916687,0.877002120018005\n        ,0.951153039932251,0.913577795028687,0.906828939914703,0.848201870918274,0.911503732204437,0.92016065120697,0.501849293708801\n        ,0.516874551773071,0.485665053129196,0.90837961435318,0.510997176170349,0.576061427593231,0.504615783691406,0.50214034318924\n        ,0.927559852600098,0.463518470525742,0.459303140640259,0.458389520645142,0.453536838293076,0.437261372804642,0.414019107818604\n        ,0.33054906129837,0.0297942794859409,0.0283474512398243,0.0212143678218126,0.0201682690531015,0.0177914928644896,0.501258254051209\n        ,0.48866793513298,0.470411956310272,0.709233701229095,0.659839570522308,0.487657696008682,0.317249894142151,0.591846823692322\n        ,0.728317379951477,0.0744952410459518,0.0745085701346397,0.0748612061142921,0.0743759348988533,0.073490247130394,0.068679578602314\n        ,0.00504661211743951,0.00530615448951721,0.00626524724066257,0.00732154585421085,0.010610961355269,0.475530505180359\n        ,0.457699716091156,0.394022941589355,0.431551843881607,0.416367381811142,0.316126555204391,0.381182998418808,0.368567585945129\n        ,0.43494439125061,0.470878392457962,0.407958835363388,0.39290863275528,0.484929203987122,0.496927618980408,0.480869024991989\n        ,0.490965217351913,0.490739345550537,0.486781388521194,0.484060883522034,0.499140977859497,0.498905599117279,0.498835623264313\n        ,0.498779982328415,0.499234527349472,0.485513746738434,0.464017033576965,0.538316786289215,0.595498383045197,0.621743261814117\n        ,0.549961924552917,0.665306329727173,0.569559574127197,0.692502319812775,0.582057178020477,0.701874971389771,0.585762798786163\n        ,0.554784119129181,0.538209557533264,0.562252759933472,0.564088642597198,0.517423331737518,0.510753870010376,0.528257966041565\n        ,0.531076014041901,0.504643619060516,0.510926067829132,0.503247678279877,0.50249171257019,0.541680872440338,0.569454193115234\n        ,0.497938424348831,0.500130176544189,0.515246391296387,0.495763182640076,0.456928491592407,0.396899402141571,0.353381723165512\n        ,0.434999793767929,0.276955157518387,0.393005788326263,0.252266436815262,0.366692423820496,0.41437640786171,0.451891839504242\n        ,0.395257085561752,0.480457574129105,0.490162223577499,0.47022956609726,0.464729964733124,0.48442354798317,0.481425791978836\n        ,0.482649832963943,0.499012738466263,0.499266684055328,0.498823940753937,0.499305218458176,0.469599843025208,0.438429415225983\n        ,0.53112256526947,0.542715907096863,0.613118171691895,0.58654773235321,0.563611149787903,0.658518671989441,0.578721225261688\n        ,0.688739597797394,0.549276292324066,0.531564772129059,0.559191882610321,0.521686553955078,0.506235778331757,0.512114107608795\n        ,0.524585604667664,0.506911396980286,0.502553522586823,0.502240002155304,0.533898293972015,0.560736835002899,0.491795599460602\n        ,0.499462336301804,0.509774446487427,0.42494809627533,0.385932326316834,0.304804563522339,0.46055144071579,0.484394311904907\n        ,0.629915058612823,0.60269969701767,0.675524175167084,0.704133987426758,0.708353340625763,0.574112117290497,0.543562710285187\n        ,0.500358045101166,0.497666716575623,0.516063213348389,0.386784434318542,0.262241989374161,0.234151259064674,0.432636260986328\n        ,0.467396587133408,0.594870746135712,0.622586846351624,0.669934093952179,0.701067090034485,0.566249370574951,0.536252975463867\n        ,0.490995824337006,0.499499768018723,0.510661065578461,0.777069509029388,0.838457345962524,0.843078911304474,0.838057816028595\n        ,0.820897698402405,0.821104645729065,0.695372998714447,0.705706894397736,0.698846876621246,0.825857758522034,0.49937179684639\n        ,0.499444335699081,0.0497633591294289,0.0401905253529549,0.264088690280914,0.032361127436161,0.123556450009346,0.100497841835022\n        ,0.0158163420855999,0.195913910865784,0.283509016036987,0.274690121412277,0.157025143504143,0.138220191001892,0.192927986383438\n        ,0.208784431219101,0.107422702014446,0.101228043437004,0.0723254308104515,0.0319409519433975,0.0365838967263699,0.0275654830038548\n        ,0.0399823375046253,0.125946879386902,0.156849190592766,0.187684044241905,0.294972240924835,0.272793799638748,0.243949249386787\n        ,0.252712398767471,0.191005766391754,0.17241595685482,0.289673149585724,0.248418867588043,0.269982844591141,0.171875\n        ,0.250535398721695,0.296302527189255,0.274216443300247,0.0569527558982372,0.0694819986820221,0.0514626353979111,0.0695202350616455\n        ,0.272596299648285,0.243082493543625,0.0595687702298164,0.224856480956078,0.0474274083971977,0.263241499662399,0.146489635109901\n        ,0.248953223228455,0.216691300272942,0.138497024774551,0.130280002951622,0.214497163891792,0.194414034485817,0.043913759291172\n        ,0.0606266558170319,0.0890660583972931,0.106618732213974,0.127299964427948,0.123955383896828,0.110864944756031,0.0777153521776199\n        ,0.0856007188558578,0.101434029638767,0.182961791753769,0.171248659491539,0.193611741065979,0.726457953453064,0.767273843288422\n        ,0.949329018592834,0.947693228721619,0.967044532299042,0.735820055007935,0.937262535095215,0.931118547916412,0.614502966403961\n        ,0.471627980470657,0.859382033348084,0.806083083152771,0.875490844249725,0.610214293003082,0.480199694633484,0.554568469524384\n        ,0.85510516166687,0.743546366691589,0.777026474475861,0.969801247119904,0.937866985797882,0.932415068149567,0.949755430221558\n        ,0.973849058151245,0.919099807739258,0.907524585723877,0.885395228862762,0.895452082157135,0.910394549369812,0.88749772310257\n        ,0.480137258768082,0.587101459503174,0.573359906673431,0.484456360340118,0.488554537296295,0.887721240520477,0.895965039730072\n        ,0.85337495803833,0.121916674077511,0.0986250415444374,0.0632779374718666,0.388292282819748,0.0482536256313324,0.341414570808411\n        ,0.314487129449844,0.210128262639046,0.386271238327026,0.292671471834183,0.311388820409775,0.405498296022415,0.489171802997589\n        ,0.488262295722961,0.943245828151703,0.953772842884064,0.317680716514587,0.895645380020142,0.249509334564209,0.793233335018158\n        ,0.767973661422729,0.833147823810577,0.853008449077606,0.879653215408325,0.84781402349472,0.835546791553497,0.813656985759735\n        ,0.0672668591141701,0.0374465249478817,0.300698459148407,0.801475763320923,0.785678327083588,0.691152572631836,0.71686452627182\n        ,0.757701873779297,0.718370795249939,0.686868906021118,0.64873868227005,0.640286028385162,0.0668506473302841,0.0315555259585381\n        ,0.153499916195869,0.224143803119659,0.247747972607613,0.126997485756874,0.0675384625792503,0.220779538154602,0.304049074649811\n        ,0.23338919878006,0.130519986152649,0.0679196491837502,0.520654916763306,0.528996706008911,0.535331785678864,0.536645412445068\n        ,0.503449976444244,0.43629589676857,0.0170795656740665,0.0109098870307207,0.0372625589370728,0.0495645068585873,0.0435467474162579\n        ,0.0368288569152355,0.030829057097435,0.0521181859076023,0.0281774066388607,0.0246519558131695,0.0654876306653023\n        ,0.0794836431741714,0.0776911079883575,0.0642301216721535,0.932604014873505,0.956792771816254,0.903758704662323,0.932408511638641\n        ,0.890994369983673,0.931350827217102,0.926221489906311,0.89261782169342,0.902318000793457,0.935380637645721,0.897907257080078\n        ,0.900025606155396,0.827858746051788,0.872521638870239,0.931344091892242,0.924168646335602,0.909043908119202,0.849918723106384\n        ,0.928871214389801,0.91679835319519,0.883535027503967,0.891045331954956,0.919581055641174,0.866308569908142,0.890310704708099\n        ,0.930200397968292,0.937199473381042,0.873727262020111,0.795832455158234,0.695792376995087,0.741214990615845,0.804432034492493\n        ,0.719383418560028,0.808071553707123,0.729966223239899,0.82585597038269,0.761204361915588,0.846185445785522,0.832377910614014\n        ,0.801839828491211,0.815158605575562,0.75330924987793,0.79405814409256,0.836123406887054,0.808602333068848,0.704605877399445\n        ,0.801938593387604,0.669931352138519,0.669257760047913,0.761446237564087,0.702609121799469,0.861849069595337,0.868935704231262\n        ,0.845203518867493,0.839983463287354,0.843391120433807,0.861060738563538,0.862018942832947,0.844989657402039,0.836595356464386\n        ,0.835583984851837,0.842704594135284,0.921156764030457,0.928623974323273,0.905190229415894,0.887703061103821,0.916462361812592\n        ,0.915394067764282,0.837085366249084,0.900297462940216,0.814340591430664,0.875716626644135,0.866847991943359,0.797539174556732\n        ,0.873098731040955,0.816916644573212,0.88154935836792,0.899577438831329,0.9063361287117,0.943336188793182,0.953912019729614\n        ,0.95522928237915,0.738879859447479,0.642723858356476,0.649845957756042,0.843090772628784,0.889018356800079,0.940876007080078\n        ,0.953361690044403,0.563094675540924,0.509984493255615,0.513836324214935,0.570927262306213,0.689336657524109,0.78424996137619\n        ,0.84540319442749,0.866505682468414,0.845664799213409,0.884104430675507,0.806906640529633,0.806087851524353,0.745548367500305\n        ,0.693888068199158,0.718158841133118,0.729863703250885,0.762996673583984,0.816202282905579,0.851645767688751,0.798132956027985\n        ,0.756100535392761,0.713165760040283,0.67433774471283,0.671584486961365,0.70308119058609,0.87847501039505,0.76934027671814\n        ,0.934174656867981,0.849386751651764,0.923826694488525,0.958262145519257,0.750459969043732,0.955860435962677,0.56195741891861\n        ,0.507635831832886,0.512480020523071,0.572822690010071,0.686382949352264,0.783281445503235,0.843424558639526,0.940874516963959\n        ,0.861455321311951,0.804872274398804,0.869116067886353,0.874794006347656,0.88017064332962,0.825082838535309,0.655720293521881\n        ,0.525781691074371,0.524721145629883,0.95732182264328,0.954470098018646,0.954534590244293,0.942378044128418,0.926046431064606\n        ,0.906598687171936,0.905266165733337,0.912127315998077,0.897906839847565,0.890105247497559,0.891797184944153,0.882738769054413\n        ,0.933982729911804,0.938160479068756,0.90452766418457,0.884901225566864,0.846039295196533,0.768812417984009,0.766224563121796\n        ,0.961383998394012,0.958616733551025,0.958833813667297,0.948421061038971,0.907738268375397,0.858722865581512,0.812769114971161\n        ,0.79958975315094,0.640108168125153,0.816221296787262,0.566758334636688,0.525440812110901,0.672527134418488,0.694593787193298\n        ,0.863074839115143,0.879387557506561,0.847267925739288,0.855193912982941,0.825581133365631,0.835183918476105,0.89387184381485\n        ,0.886982619762421,0.866321206092834,0.884880602359772,0.860882103443146,0.818597674369812,0.842101633548737,0.776525318622589\n        ,0.742721915245056,0.676555931568146,0.637636542320251,0.806542873382568,0.868393003940582,0.884205520153046,0.849901020526886\n        ,0.834611296653748,0.835323333740234,0.82551372051239,0.809770405292511,0.80741560459137,0.824219048023224,0.819040238857269\n        ,0.85616147518158,0.91714471578598,0.911832690238953,0.847798645496368,0.664743065834045,0.572323858737946,0.819055914878845\n        ,0.9074786901474,0.870977461338043,0.920614838600159,0.918147087097168,0.920683085918427,0.929821848869324,0.932937502861023\n        ,0.888557374477386,0.885168313980103,0.900562405586243,0.912235021591187,0.914624512195587,0.788711607456207,0.804260492324829\n        ,0.812986791133881,0.819072604179382,0.824297904968262,0.859320640563965,0.912963271141052,0.919374227523804,0.917552053928375\n        ,0.906057834625244,0.859798669815063,0.847870171070099,0.949789941310883,0.954140841960907,0.948378205299377,0.935009598731995\n        ,0.80139023065567,0.783727645874023,0.790406882762909,0.65313047170639,0.654624581336975,0.644850671291351,0.837128400802612\n        ,0.818184018135071,0.66686749458313,0.814675390720367,0.791805326938629,0.654394924640656,0.659997522830963,0.56653755903244\n        ,0.696981251239777,0.710933864116669,0.577731668949127,0.570209503173828,0.593225657939911,0.480597913265228,0.483692198991776\n        ,0.605750918388367,0.616306304931641,0.588263213634491,0.579981029033661,0.603322803974152,0.479947537183762,0.477173000574112\n        ,0.479976087808609,0.504442453384399,0.704963505268097,0.500164926052094,0.499887257814407,0.687900900840759,0.581955969333649\n        ,0.581269025802612,0.49304935336113,0.476622134447098,0.49345138669014,0.50255560874939,0.481746703386307,0.479674130678177\n        ,0.50139182806015,0.590379059314728,0.600396871566772,0.478472590446472,0.478911131620407,0.482469409704208,0.716055870056152\n        ,0.588853597640991,0.501409530639648,0.614471137523651,0.600342035293579,0.590613424777985,0.588627755641937,0.588591754436493\n        ,0.579011499881744,0.582310616970062,0.572643458843231,0.580984592437744,0.590848982334137,0.602009296417236,0.480608761310577\n        ,0.478224217891693,0.478784024715424,0.501413822174072,0.503318071365356,0.679476320743561,0.681767165660858,0.685847163200378\n        ,0.695488452911377,0.694636702537537,0.693195402622223,0.702600240707397,0.500504910945892,0.499761641025543,0.499337792396545\n        ,0.499050945043564,0.497844457626343,0.497895330190659,0.498723387718201,0.500584185123444,0.499067336320877,0.498121321201324\n        ,0.496955037117004,0.496602416038513,0.495608180761337,0.495802491903305,0.497365981340408,0.498587638139725,0.544471323490143\n        ,0.535147666931152,0.526269614696503,0.527077794075012,0.524710237979889,0.523556470870972,0.527945518493652,0.533168017864227\n        ,0.825302302837372,0.834179222583771,0.843648850917816,0.857739388942719,0.858728110790253,0.87563282251358,0.88662976026535\n        ,0.726957321166992,0.646619617938995,0.63410347700119,0.628647983074188,0.631692171096802,0.640352308750153,0.639677703380585\n        ,0.646750509738922,0.661692976951599,0.750041663646698,0.753858208656311,0.765080034732819,0.797111213207245,0.812030851840973\n        ,0.656091213226318,0.657804548740387,0.924229085445404,0.945810437202454,0.942111432552338,0.917795717716217,0.968188226222992\n        ,0.946788191795349,0.92444109916687,0.953242957592011,0.935089528560638,0.918654680252075,0.858058393001556,0.881813287734985\n        ,0.912264347076416,0.917832732200623,0.908516407012939,0.91170597076416,0.941785216331482,0.957115828990936,0.935437202453613\n        ,0.923129141330719,0.924030184745789,0.935841739177704,0.926523387432098,0.929085969924927,0.93127703666687,0.917386949062347\n        ,0.916314721107483,0.921677827835083,0.93353807926178,0.919895529747009,0.929590404033661,0.904771506786346,0.917263805866241\n        ,0.935589730739594,0.89923757314682,0.922143816947937,0.951504290103912,0.948889017105103,0.0205629765987396,0.0385227985680103\n        ,0.0589834935963154,0.129257842898369,0.221451789140701,0.3001409471035,0.383116811513901,0.473615288734436,0.508742868900299\n        ,0.572621881961823,0.705073118209839,0.844708263874054,0.85796457529068,0.896636486053467,0.86396312713623,0.836566090583801\n        ,0.855798006057739,0.891260325908661,0.879905521869659,0.897559642791748,0.877030253410339,0.84106719493866,0.0408311784267426\n        ,0.063639223575592,0.121105849742889,0.232397735118866,0.317838340997696,0.391686528921127,0.470170110464096,0.515603005886078\n        ,0.591437518596649,0.761221408843994,0.881025552749634,0.837720394134521,0.729614734649658,0.602391183376312,0.536369681358337\n        ,0.477584779262543,0.348473966121674,0.258798807859421,0.196032047271729,0.08775744587183,0.0421604700386524,0.00849729776382446\n        ,0.00970384292304516,0.00899431388825178,0.00871625915169716,0.00986232236027718,0.00997159723192453,0.0101062580943108\n        ,0.0237986277788877,0.0240418426692486,0.0266467072069645,0.0270236767828465,0.00962186045944691,0.00684724608436227\n        ,0.0235628131777048,0.0101543748751283,0.01648367382586,0.0201386269181967,0.0271529238671064,0.026808263733983,0.0260190926492214\n        ,0.0205551907420158,0.026290524750948,0.0106055960059166,0.0152002796530724,0.0205874461680651,0.0106762526556849\n        ,0.0170283429324627,0.0133009422570467,0.00853356160223484,0.0194792449474335,0.0194181855767965,0.0160052366554737\n        ,0.0124485464766622,0.0106269288808107,0.0101191401481628,0.0109950825572014,0.0130144422873855,0.0134335104376078\n        ,0.0152226435020566,0.013090156018734,0.00847305823117495,0.0104275457561016,0.0122905261814594,0.00950068794190884\n        ,0.00979659147560596,0.0201588086783886,0.0269560553133488,0.0272463820874691,0.0200339201837778,0.0293582603335381\n        ,0.0293869338929653,0.0283271111547947,0.0283295307308435,0.0256121270358562,0.0255378093570471,0.0285402424633503\n        ,0.0187209453433752,0.0239661242812872,0.0270861200988293,0.0092220650985837,0.0259588118642569,0.0193630643188953\n        ,0.0282818600535393,0.0274064168334007,0.0248624049127102,0.0226008743047714,0.0143007067963481,0.0135410754010081\n        ,0.0120240962132812,0.013326863758266,0.0126821780577302,0.0237496141344309,0.024389436468482,0.0216351617127657,0.014059086330235\n        ,0.0112041374668479,0.0149165680631995,0.0200591329485178,0.0233019385486841,0.0178584437817335,0.0134067600592971\n        ,0.0130389947444201,0.0112436562776566,0.0267761740833521,0.0287934467196465,0.0270411297678947,0.0242357961833477\n        ,0.0266406517475843,0.0255027431994677,0.0287998355925083,0.0280229244381189,0.0297579634934664,0.0288060568273067\n        ,0.0237090364098549,0.0293429233133793,0.0285121109336615,0.0119260838255286,0.0113710556179285,0.0111018428578973\n        ,0.0136287482455373,0.0107910009101033,0.0130005907267332,0.0160967893898487,0.0204240214079618,0.0180781949311495\n        ,0.012203661724925,0.0336312055587769,0.0352119654417038,0.0394501127302647\n        Transform: 0.210985148969358,0.177993646213452,-0.961146997467895,0,-0.975253674710361,0.104794319466303,-0.194675045018427,0\n        ,0.0660718200546389,0.978435725440565,0.195699004551353,0,35.704393192953,-5.80168884033437,10.4387178442025,1\n        TransformLink: 0.210985159829393,-0.975253724909579,0.0660718234555528,0,0.177993636191846,0.104794313566051,0.978435670351535,0\n        ,-0.961146974134258,-0.194675040292327,0.195698999800395,0,3.53270865811464,37.4609842735306,1.27467830472218,1\n    }\n    Deformer: \"SubDeformer::Cluster_R_Thigh\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754\n        ,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777\n        ,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800\n        ,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823\n        ,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846\n        ,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869\n        ,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892\n        ,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915\n        ,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938\n        ,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961\n        ,4962,4963,5330,5333,5476,5481,5482,5530,5531,5752,5765,5767,5910,5911,5959,6502,6503,6504,6505,6508,6509,6510,6511\n        ,6512,6513,6520,6521,6522,6523,6524,6546,6547,6548,6550,6551,6552,6553,6554,6555,6556,6557,6559,6560,6561,6562,6563\n        ,6564,6565,6571,6581,6583,6584,6585,6586,6596,6597,6598,6599,6600,6601,6602,6610,6611,6612,6613,6614,6615,6616,6617\n        ,6618,6619,6620,6621,6622,6623,6625,6626,6627,6628,6629,6632,6634,6657,6658,6659,6666,6667,6668,6671,6672,6674,6675\n        ,6676,6677,6678,6679,6684,6685,6686,6687,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706\n        ,6707,6708,6709,6710,6711,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730\n        ,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753\n        ,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776\n        ,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799\n        ,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6820,6822,6823,6824,6825\n        ,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848\n        ,6849,6850,6851,6852,6853,6865,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888\n        ,6889,6890,6894,6895,6896,6897,6898,6899,6901,6902,6905,6906,6907,6908,6912,6913,6914,6915,6916,6917,6918,6919,6920\n        ,6921,6922,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195\n        ,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218\n        ,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241\n        ,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264\n        ,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287\n        ,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310\n        ,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333\n        ,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356\n        ,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379\n        ,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402\n        ,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425\n        ,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448\n        ,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471\n        ,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494\n        ,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517\n        ,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540\n        ,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563\n        ,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586\n        ,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609\n        ,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632\n        ,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655\n        ,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678\n        ,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701\n        ,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724\n        ,7725,7726,7731,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7746,7747,7748,7749,7750,7751,7752,7753\n        ,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776\n        ,7777,7778,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804\n        ,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7828,7830,7831,7832\n        ,7833,7834,7835,7836,7837,7838,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7860,7861,7862,7863,7864,7865,7866\n        ,7867,7868,7869,7870,7873,7877,7878,7882,7883,7884,7885,7886,7887,7888,7889,7901,7902,7904,7905,7906,7907,7908,7909\n        ,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932\n        ,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955\n        ,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7993,7994,7995,7996,7997,7998\n        ,7999,8000,9350,9351,9678,9679,9685,9686,9687,9696,9699,9700,9704,9705,9706,9721,9722,9723,9871,9872,9873,9874,9875\n        ,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9960,10011,10012,10913,10915\n        ,10916,10917,10918,10919,10920,10921,10922,10927,10928,10933,10934,10935,10936,10977,10978,10979,10981,10982,10984\n        ,10985,10990,10991,10993,10994,10995,10996,10997,11008,11015,11016,11017,11018,11022,11023,11111,11114,11115,11116\n        ,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11131,11132,11133,11134,11135,11136,11137\n        ,11143,11144,11145,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166\n        ,11167,11168,11169,11170,11171,11177,11178,11179,11180,11181,11185,11186,11188,11189,11190,11191,11192\n        Weights: 0.0121406214311719,0.0122508415952325,0.0118976887315512,0.0117173595353961,0.0124390851706266,0.0122070135548711\n        ,0.0126539431512356,0.0125598656013608,0.0128371920436621,0.0128599274903536,0.0129400799050927,0.0130276530981064\n        ,0.0129359588027,0.013020683079958,0.0128265898674726,0.0128425154834986,0.012640917673707,0.0125400200486183,0.0124277845025063\n        ,0.0121918143704534,0.0122436741366982,0.0118895908817649,0.01213822606951,0.0117150489240885,0.00939200725406408\n        ,0.00922133028507233,0.0096948491409421,0.0100468639284372,0.0103518152609468,0.0105281351134181,0.0105305276811123\n        ,0.0103600556030869,0.0100622130557895,0.00971498060971498,0.00940981507301331,0.00922850612550974,0.00949476845562458\n        ,0.00939072575420141,0.00967897940427065,0.00989330559968948,0.0100796613842249,0.0101881176233292,0.0101903360337019\n        ,0.0100863538682461,0.00990398414433002,0.00969143025577068,0.00950503349304199,0.00939473509788513,0.0125351883471012\n        ,0.00978698022663593,0.708606839179993,0.705857396125793,0.708693444728851,0.713237941265106,0.703308582305908,0.704482853412628\n        ,0.701644003391266,0.701737105846405,0.701303839683533,0.701177060604095,0.702373325824738,0.702935993671417,0.704565227031708\n        ,0.706540822982788,0.707297801971436,0.711040079593658,0.709844648838043,0.715243935585022,0.711524188518524,0.718027889728546\n        ,0.711881220340729,0.718633353710175,0.710813581943512,0.716881394386292,0.776921927928925,0.781997501850128,0.772049069404602\n        ,0.768704175949097,0.76778769493103,0.769531071186066,0.773449778556824,0.778489351272583,0.783312261104584,0.786642789840698\n        ,0.787595152854919,0.785901963710785,0.780841171741486,0.78394603729248,0.777854740619659,0.775794923305511,0.77521550655365\n        ,0.776267230510712,0.778660953044891,0.781753301620483,0.784719824790955,0.786772966384888,0.787365198135376,0.786332964897156\n        ,0.706616520881653,0.781346321105957,0.595562696456909,0.592740178108215,0.597659587860107,0.60121351480484,0.587876677513123\n        ,0.588220238685608,0.585933327674866,0.583541095256805,0.590661406517029,0.586367666721344,0.58176589012146,0.592983961105347\n        ,0.599109590053558,0.60893440246582,0.613502681255341,0.602687776088715,0.606080293655396,0.583518028259277,0.585001647472382\n        ,0.58845466375351,0.600851058959961,0.592422544956207,0.582261502742767,0.59635716676712,0.610490024089813,0.606726586818695\n        ,0.622400999069214,0.618498742580414,0.636538743972778,0.59371018409729,0.58416748046875,0.622708022594452,0.612394690513611\n        ,0.633858978748322,0.647794663906097,0.667890906333923,0.612781047821045,0.694311738014221,0.628657341003418,0.621947944164276\n        ,0.694720327854156,0.688933193683624,0.629056572914124,0.690963566303253,0.633292555809021,0.698847055435181,0.640542209148407\n        ,0.726858258247375,0.664061963558197,0.764679849147797,0.697108447551727,0.603879392147064,0.610298931598663,0.599850654602051\n        ,0.612626433372498,0.617496013641357,0.623805463314056,0.644330859184265,0.675829410552979,0.703979671001434,0.799726486206055\n        ,0.665815711021423,0.672482788562775,0.693197011947632,0.709540367126465,0.71259331703186,0.691519916057587,0.6813023686409\n        ,0.634478747844696,0.625135600566864,0.645098924636841,0.654494404792786,0.640835642814636,0.658283948898315,0.670843422412872\n        ,0.626901209354401,0.640329897403717,0.779515445232391,0.78886878490448,0.614881157875061,0.607614874839783,0.602537453174591\n        ,0.616504311561584,0.616610765457153,0.621333420276642,0.628176867961884,0.650015115737915,0.684783458709717,0.601844429969788\n        ,0.617423474788666,0.614545404911041,0.60051167011261,0.612510502338409,0.633224368095398,0.600748538970947,0.608348608016968\n        ,0.633217871189117,0.654657900333405,0.628166735172272,0.637831389904022,0.619139134883881,0.660599529743195,0.692957878112793\n        ,0.651106178760529,0.721908807754517,0.633278846740723,0.70828640460968,0.701894283294678,0.702260613441467,0.707958936691284\n        ,0.710699319839478,0.724626004695892,0.713609933853149,0.706369340419769,0.702649652957916,0.696391701698303,0.703982949256897\n        ,0.698264241218567,0.710292994976044,0.705470740795136,0.734420895576477,0.731867372989655,0.766797482967377,0.767536997795105\n        ,0.633915066719055,0.704809010028839,0.71831476688385,0.698667943477631,0.702968120574951,0.780551493167877,0.788594007492065\n        ,0.696524977684021,0.025169862434268,0.17743507027626,0.0417528785765171,0.0149603690952063,0.0314485989511013,0.0341492109000683\n        ,0.0370167717337608,0.00640609161928296,0.0271293967962265,0.0036061517894268,0.00314630009233952,0.0123215476050973\n        ,0.00494522554799914,0.0413915291428566,0.0415283180773258,0.0295643042773008,0.00912562478333712,0.00408301642164588\n        ,0.0054349759593606,0.0047268564812839,0.0043707862496376,0.00671374332159758,0.013554010540247,0.015572807751596\n        ,0.0180529374629259,0.00400473875924945,0.00994897074997425,0.0267131235450506,0.0106267211958766,0.00780256511643529\n        ,0.00644758902490139,0.00672720884904265,0.00755316903814673,0.00798691902309656,0.00861690938472748,0.00955253560096025\n        ,0.0106580853462219,0.00959823466837406,0.0110898446291685,0.0114441076293588,0.0156115349382162,0.011926575563848\n        ,0.0222729928791523,0.0112889474257827,0.0153295481577516,0.012909191660583,0.0292770471423864,0.0152281168848276\n        ,0.00450499448925257,0.00555948540568352,0.00584762869402766,0.00425887666642666,0.00437471829354763,0.00431323004886508\n        ,0.0152728538960218,0.00757876643911004,0.0125082237645984,0.066037654876709,0.0677948594093323,0.0125738857313991\n        ,0.00489287078380585,0.00520963547751307,0.00530074024572968,0.00512120826169848,0.00559488777071238,0.00552204204723239\n        ,0.00626269914209843,0.00658323988318443,0.00344414333812892,0.00447779893875122,0.0270733889192343,0.00785047933459282\n        ,0.00555364228785038,0.00464107654988766,0.00447748182341456,0.005645043682307,0.00791709125041962,0.00454014353454113\n        ,0.00940870586782694,0.0222935806959867,0.00586624816060066,0.00596039881929755,0.0354999750852585,0.0713171139359474\n        ,0.0538405925035477,0.0288048982620239,0.0160065516829491,0.0278465356677771,0.0634250044822693,0.0193962790071964\n        ,0.00478004431352019,0.00492434063926339,0.00523216277360916,0.00458334339782596,0.0267478786408901,0.0244745388627052\n        ,0.00489023560658097,0.0051567037589848,0.0167336519807577,0.00544742727652192,0.00686383992433548,0.0071214591152966\n        ,0.191019386053085,0.220372542738914,0.443121582269669,0.455715000629425,0.227879747748375,0.572845339775085,0.0685657858848572\n        ,0.0767723917961121,0.0764972791075706,0.0284278262406588,0.0561406426131725,0.0431331843137741,0.0424311570823193\n        ,0.04395667091012,0.0319374054670334,0.043060053139925,0.061846885830164,0.0298868026584387,0.021460996940732,0.544690907001495\n        ,0.47402435541153,0.483769923448563,0.471407413482666,0.486981511116028,0.464022278785706,0.524255752563477,0.61997526884079\n        ,0.461970031261444,0.447523772716522,0.571227729320526,0.467277556657791,0.78871762752533,0.764640212059021,0.272586435079575\n        ,0.0581459067761898,0.365322023630142,0.518994212150574,0.0766203030943871,0.195507556200027,0.490018874406815,0.486813902854919\n        ,0.399345725774765,0.483929514884949,0.479347556829453,0.50118488073349,0.0270621925592422,0.0431146696209908,0.0324231758713722\n        ,0.0208385195583105,0.52277660369873,0.661475300788879,0.148517176508904,0.274810284376144,0.717097461223602,0.16009484231472\n        ,0.0273086782544851,0.594453930854797,0.0753901824355125,0.0772575438022614,0.462949275970459,0.486051797866821,0.48539599776268\n        ,0.482352942228317,0.19377213716507,0.187886565923691,0.322050809860229,0.906217455863953,0.918335676193237,0.786625683307648\n        ,0.517066299915314,0.535502195358276,0.510716795921326,0.586380898952484,0.52104240655899,0.498748004436493,0.0355681627988815\n        ,0.0522505939006805,0.0566963478922844,0.0387060903012753,0.042708445340395,0.0591549165546894,0.0594617202877998\n        ,0.0175437070429325,0.00841336604207754,0.0766968280076981,0.415104597806931,0.0602047741413116,0.0683207213878632\n        ,0.0491678677499294,0.0754728838801384,0.0759880915284157,0.0661410689353943,0.0567237138748169,0.0737691223621368\n        ,0.633418679237366,0.486785143613815,0.50536060333252,0.479441195726395,0.480146616697311,0.483121246099472,0.511276483535767\n        ,0.709449052810669,0.831922292709351,0.881674110889435,0.887470006942749,0.876770496368408,0.873567700386047,0.862349271774292\n        ,0.744541883468628,0.785385251045227,0.864405274391174,0.935879349708557,0.498770326375961,0.864026546478271,0.714228093624115\n        ,0.536101758480072,0.401497185230255,0.938651204109192,0.0591612607240677,0.0429156497120857,0.378555536270142,0.424933820962906\n        ,0.499189227819443,0.202586621046066,0.425374507904053,0.474240958690643,0.513405799865723,0.535461008548737,0.491324007511139\n        ,0.481851667165756,0.451976180076599,0.366595089435577,0.160316362977028,0.439833015203476,0.0725618228316307,0.0706432089209557\n        ,0.0478608459234238,0.0311587397009134,0.21308071911335,0.435666292905808,0.566649258136749,0.468619704246521,0.0769848674535751\n        ,0.077823668718338,0.0520382076501846,0.0394917130470276,0.693198621273041,0.185054555535316,0.672030031681061,0.791468799114227\n        ,0.520808458328247,0.49973601102829,0.501943588256836,0.499871522188187,0.0123160965740681,0.948372364044189,0.574645638465881\n        ,0.927067160606384,0.954527795314789,0.914097964763641,0.943775653839111,0.914058208465576,0.517141699790955,0.890655338764191\n        ,0.782427728176117,0.905642569065094,0.930662453174591,0.0174932777881622,0.0198648050427437,0.0209019873291254,0.0241470485925674\n        ,0.0309172626584768,0.0312053728848696,0.0391135588288307,0.339840680360794,0.430046528577805,0.447129368782043,0.458955973386765\n        ,0.459699958562851,0.463844180107117,0.00849306397140026,0.0146585777401924,0.00937444064766169,0.60956734418869,0.711777687072754\n        ,0.739983439445496,0.00504391174763441,0.00535760400816798,0.00569094764068723,0.00670535862445831,0.00806801579892635\n        ,0.0108356466516852,0.0753843709826469,0.0757224038243294,0.0749938189983368,0.0742722302675247,0.0692730024456978\n        ,0.796917974948883,0.802588641643524,0.807209610939026,0.809173047542572,0.808085501194,0.824402511119843,0.843233942985535\n        ,0.803074777126312,0.825077176094055,0.823010802268982,0.829862356185913,0.833508431911469,0.849360466003418,0.801250517368317\n        ,0.793128728866577,0.780713319778442,0.774000704288483,0.794888734817505,0.798239409923553,0.825299918651581,0.801834642887115\n        ,0.805963695049286,0.800087213516235,0.79336816072464,0.778830647468567,0.787423253059387,0.801776587963104,0.858772218227386\n        ,0.854447066783905,0.850737750530243,0.842241585254669,0.826670169830322,0.793108701705933,0.814504384994507,0.817793011665344\n        ,0.837992191314697,0.815393090248108,0.798432469367981,0.810963213443756,0.813634872436523,0.818409025669098,0.805816054344177\n        ,0.799614131450653,0.795112609863281,0.794762969017029,0.803587794303894,0.813179910182953,0.86850494146347,0.858750760555267\n        ,0.849023580551147,0.833366572856903,0.82126647233963,0.872544646263123,0.867573082447052,0.867268443107605,0.845763564109802\n        ,0.836205542087555,0.839719176292419,0.850303113460541,0.860818028450012,0.918317377567291,0.918486177921295,0.909476399421692\n        ,0.903227865695953,0.747987389564514,0.75365674495697,0.749965846538544,0.753709673881531,0.781962871551514,0.783975124359131\n        ,0.756250858306885,0.779371798038483,0.770965278148651,0.749122202396393,0.765678226947784,0.70329737663269,0.708670139312744\n        ,0.705387771129608,0.709230542182922,0.711409032344818,0.704181611537933,0.719209790229797,0.921198844909668,0.752510130405426\n        ,0.799100637435913,0.798319518566132,0.796379506587982,0.763998687267303,0.717124164104462,0.707501947879791,0.722574353218079\n        ,0.807906568050385,0.839753091335297,0.84136825799942,0.82934308052063,0.911288857460022,0.900106549263,0.783974468708038\n        ,0.81630003452301,0.723835170269012,0.718316912651062,0.764115273952484,0.768223702907562,0.724165022373199,0.72052001953125\n        ,0.770703554153442,0.717623770236969,0.768704295158386,0.839786648750305,0.727094113826752,0.779557883739471,0.730585038661957\n        ,0.725931465625763,0.776144564151764,0.735690236091614,0.75948578119278,0.773145437240601,0.7225621342659,0.880705714225769\n        ,0.82598078250885,0.775107979774475,0.871436893939972,0.889169096946716,0.844534039497375,0.845540046691895,0.846522748470306\n        ,0.854915857315063,0.8920778632164,0.894299268722534,0.732543468475342,0.773456871509552,0.950825214385986,0.969283103942871\n        ,0.740236520767212,0.854900181293488,0.799582958221436,0.847225308418274,0.734141290187836,0.769206762313843,0.972008883953094\n        ,0.975831806659698,0.938882350921631,0.914127767086029,0.890340089797974,0.885062396526337,0.895122110843658,0.852914929389954\n        ,0.941078782081604,0.955900371074677,0.783710718154907,0.758698046207428,0.819364070892334,0.802570521831512,0.788347721099854\n        ,0.788150370121002,0.688285827636719,0.733043849468231,0.797011494636536,0.71169650554657,0.801984071731567,0.723223984241486\n        ,0.821078062057495,0.755426645278931,0.842377662658691,0.829339385032654,0.79728102684021,0.816121220588684,0.75395268201828\n        ,0.793606996536255,0.836301624774933,0.81099146604538,0.70647805929184,0.806005716323853,0.672845840454102,0.67341148853302\n        ,0.766445398330688,0.707209527492523,0.856030821800232,0.863097786903381,0.824632585048676,0.828430116176605,0.857899188995361\n        ,0.859728515148163,0.845887064933777,0.838799178600311,0.839101791381836,0.847654759883881,0.932397305965424,0.914330780506134\n        ,0.912998378276825,0.928670585155487,0.812658250331879,0.874298095703125,0.872081577777863,0.815775990486145,0.882383823394775\n        ,0.900112390518188,0.907724559307098,0.945751070976257,0.956339716911316,0.957941651344299,0.736182391643524,0.64156436920166\n        ,0.649076700210571,0.844456791877747,0.890936672687531,0.94377201795578,0.956134855747223,0.562585234642029,0.510322034358978\n        ,0.514137625694275,0.57107138633728,0.690173208713531,0.786438465118408,0.848345816135406,0.866082906723022,0.84492015838623\n        ,0.798344433307648,0.737167000770569,0.686202585697174,0.710266470909119,0.722948431968689,0.757045805454254,0.811590313911438\n        ,0.848826766014099,0.797695994377136,0.75676017999649,0.715186834335327,0.677431404590607,0.675951838493347,0.707814037799835\n        ,0.872733950614929,0.774448871612549,0.854348838329315,0.921636939048767,0.960894465446472,0.747694432735443,0.958584189414978\n        ,0.561441242694855,0.507969915866852,0.512782514095306,0.566574394702911,0.687234282493591,0.785499155521393,0.846379995346069\n        ,0.945776760578156,0.944040477275848,0.860576987266541,0.804284751415253,0.866923034191132,0.937155365943909,0.943481504917145\n        ,0.874237179756165,0.879157423973084,0.823953986167908,0.654940128326416,0.526018619537354,0.524963557720184,0.959881842136383\n        ,0.957106471061707,0.956878066062927,0.944541215896606,0.92781674861908,0.90781444311142,0.905358612537384,0.912126362323761\n        ,0.89648574590683,0.888637125492096,0.889766335487366,0.91316956281662,0.906045854091644,0.899924159049988,0.935516655445099\n        ,0.941309750080109,0.904953300952911,0.885624349117279,0.847198128700256,0.770461857318878,0.76787406206131,0.963826358318329\n        ,0.96113908290863,0.961089909076691,0.950632452964783,0.908831655979156,0.857835710048676,0.81183522939682,0.798646628856659\n        ,0.639582335948944,0.815626800060272,0.566958427429199,0.525693416595459,0.673427164554596,0.694212138652802,0.862183153629303\n        ,0.878029108047485,0.845140874385834,0.854517221450806,0.822884678840637,0.834131062030792,0.893841207027435,0.887415945529938\n        ,0.867077529430389,0.885372996330261,0.861731290817261,0.819874823093414,0.842385053634644,0.777085423469543,0.744409739971161\n        ,0.673969209194183,0.636548519134521,0.80493575334549,0.866995632648468,0.882088422775269,0.866331219673157,0.846528887748718\n        ,0.83049601316452,0.831366002559662,0.820866942405701,0.804013192653656,0.800460815429688,0.816933929920197,0.81192022562027\n        ,0.850354492664337,0.895127296447754,0.925061881542206,0.844556331634521,0.659179925918579,0.570643901824951,0.811593234539032\n        ,0.908195972442627,0.871232807636261,0.924025893211365,0.921512961387634,0.922115802764893,0.931954026222229,0.934867560863495\n        ,0.891904175281525,0.888459205627441,0.902878940105438,0.914022922515869,0.916135847568512,0.792705476284027,0.806619882583618\n        ,0.813966035842896,0.819875657558441,0.825136125087738,0.860069930553436,0.914043009281158,0.920753955841064,0.91921067237854\n        ,0.908249855041504,0.864333271980286,0.852148413658142,0.952171742916107,0.95646870136261,0.950879693031311,0.937963724136353\n        ,0.805840194225311,0.788787066936493,0.790082514286041,0.905307650566101,0.9073566198349,0.906107366085052,0.926503598690033\n        ,0.939972460269928,0.643545925617218,0.566204309463501,0.855476260185242,0.872918725013733,0.88499253988266,0.654054284095764\n        ,0.655697882175446,0.954368114471436,0.951784253120422,0.525358974933624,0.531103730201721,0.576018631458282,0.66177636384964\n        ,0.521119952201843,0.527190089225769,0.574280679225922,0.658276557922363,0.51849240064621,0.525535702705383,0.569722771644592\n        ,0.828037142753601,0.717865943908691,0.718957960605621,0.72654914855957,0.891153514385223,0.866597652435303,0.792984366416931\n        ,0.841738641262054,0.830993831157684,0.825460255146027,0.805268168449402,0.801807880401611,0.801998734474182,0.80620151758194\n        ,0.80648285150528,0.8196861743927,0.856441140174866,0.840847074985504,0.876736998558044,0.897193491458893,0.879593849182129\n        ,0.890488386154175,0.854347586631775,0.834697484970093,0.86210036277771,0.894861817359924,0.475770980119705,0.458353370428085\n        ,0.396623522043228,0.433141261339188,0.417630434036255,0.319892078638077,0.382260203361511,0.368590116500854,0.435862481594086\n        ,0.471226334571838,0.40870589017868,0.392782628536224,0.484944015741348,0.496751010417938,0.480986088514328,0.490831136703491\n        ,0.490555346012115,0.48654118180275,0.483698606491089,0.499076575040817,0.498843401670456,0.49879378080368,0.498762190341949\n        ,0.4991694688797,0.485532969236374,0.464642822742462,0.535651922225952,0.590244889259338,0.615910470485687,0.546950042247772\n        ,0.659544289112091,0.566442787647247,0.687947928905487,0.579388856887817,0.699130892753601,0.583877623081207,0.552021145820618\n        ,0.535593271255493,0.559898853302002,0.56237918138504,0.515810310840607,0.509566366672516,0.526057660579681,0.52871561050415\n        ,0.504014670848846,0.509806096553802,0.502772271633148,0.502121865749359,0.538578569889069,0.565036475658417,0.497771769762039\n        ,0.499860972166061,0.513701200485229,0.495591461658478,0.45454004406929,0.391833573579788,0.347644448280334,0.432123422622681\n        ,0.272249549627304,0.390310823917389,0.250164747238159,0.365234851837158,0.411932826042175,0.449440985918045,0.393866956233978\n        ,0.479107886552811,0.489363878965378,0.4683777987957,0.462633848190308,0.483733534812927,0.4803307056427,0.482127755880356\n        ,0.499041229486465,0.49930602312088,0.498829960823059,0.499354362487793,0.467380285263062,0.434641182422638,0.531138360500336\n        ,0.542760670185089,0.61461478471756,0.587907910346985,0.563326597213745,0.65929239988327,0.577728271484375,0.687950670719147\n        ,0.548891603946686,0.53145968914032,0.558209538459778,0.521568179130554,0.505979537963867,0.511844336986542,0.524451196193695\n        ,0.506610453128815,0.502292513847351,0.501941919326782,0.534197330474854,0.561727583408356,0.491019129753113,0.499508380889893\n        ,0.509556293487549,0.42677640914917,0.388839572668076,0.308941006660461,0.461290061473846,0.484441757202148,0.623691499233246\n        ,0.597078144550323,0.669393360614777,0.699311673641205,0.705560207366943,0.56942743062973,0.540330648422241,0.50005704164505\n        ,0.497496992349625,0.514450132846832,0.381174743175507,0.257222056388855,0.232263743877411,0.428449273109436,0.464983582496643\n        ,0.596508383750916,0.624365866184235,0.670899271965027,0.700318157672882,0.567449569702148,0.536635041236877,0.490132242441177\n        ,0.499542444944382,0.510450124740601,0.836060404777527,0.839611887931824,0.836895942687988,0.819555521011353,0.818680346012115\n        ,0.694415628910065,0.702977180480957,0.69442355632782,0.822489380836487,0.499316424131393,0.499484270811081,0.269271939992905\n        ,0.0363340899348259,0.200038895010948,0.287381142377853,0.278994768857956,0.135241404175758,0.188873007893562,0.20507188141346\n        ,0.10530211776495,0.100710526108742,0.0366321876645088,0.0321969203650951,0.0377073623239994,0.0413589552044868,0.129193872213364\n        ,0.160873353481293,0.298055350780487,0.276435554027557,0.247449889779091,0.255618959665298,0.195023968815804,0.176026284694672\n        ,0.292012274265289,0.250698626041412,0.273236691951752,0.174657389521599,0.252640843391418,0.298453480005264,0.277277916669846\n        ,0.0584391839802265,0.071047268807888,0.0527480281889439,0.0709102898836136,0.272021859884262,0.242320537567139,0.0598576068878174\n        ,0.224342092871666,0.0477189496159554,0.262468338012695,0.146162793040276,0.246551141142845,0.213548183441162,0.136089324951172\n        ,0.128732904791832,0.212865605950356,0.191950678825378,0.0356704853475094,0.0367216020822525,0.0367787405848503,0.0368168205022812\n        ,0.036780372262001,0.036685723811388,0.0367924906313419,0.0366408154368401,0.0358510501682758,0.03602459654212,0.175911843776703\n        ,0.16103008389473,0.182328402996063,0.554998397827148,0.952422797679901,0.93386310338974,0.929259359836578,0.6139115691185\n        ,0.300000011920929,0.607261776924133,0.300000011920929,0.551125824451447,0.938569843769073,0.937819421291351,0.947948038578033\n        ,0.9091557264328,0.904147624969482,0.890257716178894,0.910216808319092,0.880972325801849,0.585072457790375,0.480802029371262\n        ,0.589536905288696,0.576095461845398,0.300000011920929,0.484088629484177,0.487558513879776,0.0334288142621517,0.032782070338726\n        ,0.032839871942997,0.200000002980232,0.335145354270935,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232\n        ,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.308288633823395,0.900275528430939,0.250959098339081\n        ,0.824565351009369,0.847789824008942,0.882460951805115,0.879214882850647,0.852208852767944,0.841133236885071,0.0353639125823975\n        ,0.200000002980232,0.668727517127991,0.699191093444824,0.720621943473816,0.756375908851624,0.744136810302734,0.711437523365021\n        ,0.677942633628845,0.640930593013763,0.633037149906158,0.0355646312236786,0.0357317328453064,0.308352440595627,0.034441702067852\n        ,0.503331482410431,0.520728409290314,0.53005975484848,0.534790754318237,0.535664319992065,0.512462198734283,0.503290057182312\n        ,0.43207922577858,0.0523942671716213,0.0287168957293034,0.0657621473073959,0.0810146406292915,0.0793797895312309,0.0658637285232544\n        ,0.4886814057827,0.93654078245163,0.959634304046631,0.908121883869171,0.935774326324463,0.890292286872864,0.930742979049683\n        ,0.928332030773163,0.895345449447632,0.900514721870422,0.935992121696472,0.898749768733978,0.894806563854218,0.820103764533997\n        ,0.91419917345047,0.877375066280365,0.934875965118408,0.927780985832214,0.916402637958527,0.914490222930908,0.880014002323151\n        ,0.886390507221222,0.917209446430206,0.862820744514465,0.852146029472351,0.887707710266113,0.928047180175781,0.93571674823761\n        ,0.878426074981689,0.919436573982239,0.949093282222748,0.94213742017746,0.919628381729126,0.970703184604645,0.950217664241791\n        ,0.928992509841919,0.956079125404358,0.937943637371063,0.921655356884003,0.861780822277069,0.885524451732636,0.91277140378952\n        ,0.914094805717468,0.910454094409943,0.914847612380981,0.945037424564362,0.960116565227509,0.938776850700378,0.925693988800049\n        ,0.926077365875244,0.934013366699219,0.926871538162231,0.932785332202911,0.935199439525604,0.923216760158539,0.914379596710205\n        ,0.921595096588135,0.937012314796448,0.923063695430756,0.926131665706635,0.899774134159088,0.91342967748642,0.933672666549683\n        ,0.901028752326965,0.92220151424408,0.0339444801211357,0.303750246763229,0.200000002980232,0.300000011920929,0.508266389369965\n        ,0.568917274475098,0.69706529378891,0.837648928165436,0.00947685819119215,0.0099763497710228,0.0164241753518581,0.0136153446510434\n        ,0.0167659018188715,0.0193188674747944,0.0165212638676167,0.0196010749787092,0.0152013218030334,0.0170877762138844\n        ,0.0179032739251852,0.0175033565610647,0.014290276914835,0.015932273119688,0.0180900525301695,0.0179031025618315,0.0781811326742172\n        ,0.0911547169089317,0.137335762381554,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116\n        ,0.212126582860947,0.213561147451401,0.916650414466858,0.860767245292664,0.887980997562408,0.845418572425842,0.738132357597351\n        ,0.605785727500916,0.537369668483734,0.300000011920929,0.200000002980232,0.200000002980232,0.100000001490116,0.0340701937675476\n        ,0.0028827260248363,0.00179311831016093,0.00401651160791516,0.00892997067421675,0.0099483160302043,0.0100685115903616\n        ,0.0091486806049943,0.00919780507683754,0.0162262488156557,0.010299320332706,0.010226528160274,0.0159180611371994\n        ,0.00983505696058273,0.00625966535881162,0.0154218059033155,0.0102562345564365,0.0154791539534926,0.0155376037582755\n        ,0.0240341890603304,0.0147921089082956,0.0244445633143187,0.0284491814672947,0.0287205446511507,0.0280658081173897\n        ,0.0274832937866449,0.0139817874878645,0.00904152262955904,0.0104096597060561,0.0146032851189375,0.015713419765234\n        ,0.0161524098366499,0.0160696785897017,0.00990277994424105,0.00993933063000441,0.0107942000031471,0.0152961015701294\n        ,0.00890574045479298,0.00526867294684052,0.0125740431249142,0.00979874935001135,0.0101370560005307,0.0206324737519026\n        ,0.020552285015583,0.0277900211513042,0.0274502355605364,0.0297787487506866,0.0297703463584185,0.0287828836590052\n        ,0.028711199760437,0.0260352157056332,0.0260036587715149,0.0243596658110619,0.0190564673393965,0.0288612972944975\n        ,0.0274189785122871,0.00950775109231472,0.0198205951601267,0.0264423154294491,0.0287518054246902,0.0278525054454803\n        ,0.0252742879092693,0.0229827482253313,0.014639045111835,0.0138399545103312,0.0122612956911325,0.0136584080755711\n        ,0.0129717355594039,0.0248363558202982,0.0241523422300816,0.0219858847558498,0.0143308853730559,0.0114311994984746\n        ,0.0181903019547462,0.0237003993242979,0.0204702317714691,0.0136737115681171,0.0114700272679329,0.0132998926565051\n        ,0.0271537154912949,0.0246199890971184,0.0273829195648432,0.0291210822761059,0.0270285941660404,0.0283864550292492\n        ,0.0291346069425344,0.0259131416678429,0.0300872698426247,0.0291729345917702,0.0296658203005791,0.0240968931466341\n        ,0.0288406312465668,0.0122615313157439,0.112699277698994,0.109744668006897,0.0139341726899147,0.0110394479706883,0.127745643258095\n        ,0.00968854501843452\n        Transform: -0.210987573672523,-0.177990473315178,-0.961146997997314,0,-0.975253101222208,0.104794805518868,0.194677614514139\n        ,0,0.0660724538480163,0.978436204615115,-0.195696163886547,0,35.72022134769,-5.7883350418252,-10.3666109901212,1\n        TransformLink: -0.210987586997392,-0.975253162814077,0.0660724580208058,0,-0.177990479303431,0.10479480904455,0.978436237533301,0\n        ,-0.961147080740473,0.194677631273532,-0.195696180733625,0,-3.45758310962855,37.4609935830385,1.27468775649854,1\n    }\n    Deformer: \"SubDeformer::Cluster_Spine2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670\n        ,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693\n        ,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,5301,5302,5303,5304,5307\n        ,5308,5309,5310,5311,5312,5313,5314,5317,5319,5324,5325,5326,5327,5328,5329,5335,5336,5337,5338,5340,5341,5342,5343\n        ,5344,5345,5346,5347,5348,5349,5350,5351,5352,5356,5371,5372,5373,5377,5378,5380,5382,5383,5385,5386,5389,5390,5391\n        ,5392,5393,5396,5401,5419,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438\n        ,5439,5440,5441,5442,5451,5458,5460,5464,5465,5469,5470,5471,5472,5473,5485,5487,5488,5490,5491,5492,5493,5494,5495\n        ,5496,5497,5498,5499,5500,5512,5513,5515,5517,5522,5523,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751\n        ,5757,5758,5759,5760,5761,5762,5766,5769,5770,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5787\n        ,5802,5803,5804,5808,5809,5811,5813,5814,5816,5817,5820,5821,5822,5823,5824,5832,5851,5852,5853,5854,5855,5856,5857\n        ,5858,5859,5860,5861,5863,5866,5867,5869,5870,5871,5872,5881,5888,5890,5891,5899,6496,6497,9927,9928,9929,9930,9931\n        ,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954\n        ,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977\n        ,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000\n        ,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019\n        ,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038\n        ,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10083,10084,10085,10086,10093,10094\n        ,10095,10096,10112,10116,10123,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10140,10141,10142,10144\n        ,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163\n        ,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182\n        ,10183,10184,10185,10186,10187,10188,10189,10192,10193,10194,10197,10199,10206,10207,10215,10216,10223,10224,10225\n        ,10226,10227,10228,10229,10230,10232,10239,10240,10241,10250,10251,10252,10253,10255,10256,10274,10275,10276,10277\n        ,10284,10285,10286,10287,10288,10289,10321,10324,10326,10328,10338,10339,10362,10363,10364,10365,10399,10400,10401\n        ,10402,10403,10404,10405,10408,10410,10411,10413,10414,10448,10456,10460,10461,10462,10463,10464,10467,10468,10470\n        ,10471,10472,10473,10474,10475,10482,10483,10484,10485,10486,10490,10491,10492,10493,10494,10495,10496,10497,10527\n        ,10528,10529,10536,10537,10540,10550,10565,10569,10570,10571,10572,10573,10575,10583,10585,10586,10587,10588,10589\n        ,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608\n        ,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10628\n        ,10629,10632,10633,10634,10637,10640,10648,10655,10656,10661,10662,10663,10664,10665,10666,10667,10668,10669,10677\n        ,10685,10686,10687,10688,10691,10692,10709,10710,10711,10712,10719,10720,10721,10722,10723,10724,10756,10758,10761\n        ,10771,10772,10791,10792,10793,10794,10828,10829,10830,10831,10832,10833,10834,10836,10837,10838,10839,10840,10842\n        ,10843,10871,10872,10873,10877,10887,10888,10889,10890,10891,10893,10894,10895,10896,10897,10898,10899,10900,10901\n        ,10902,10903,10904,10905,10906,10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920\n        ,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939\n        ,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,10958\n        ,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977\n        ,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996\n        ,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015\n        ,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034\n        ,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053\n        ,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072\n        ,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091\n        ,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110\n        ,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129\n        ,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148\n        ,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167\n        ,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11187\n        ,11189,11190,11192\n        Weights: 0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5\n        ,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5\n        ,0.5,0.5,0.5,0.5,0.5,0.5,0.359894096851349,0.131822139024735,0.321277141571045,0.160423785448074,0.722898602485657\n        ,0.445386797189713,0.45045331120491,0.402194231748581,0.480391561985016,0.577919542789459,0.447136491537094,0.380231142044067\n        ,0.412134319543839,0.148485705256462,0.318740755319595,0.15874582529068,0.181284919381142,0.272806972265244,0.1451396048069\n        ,0.353126019239426,0.495000004768372,0.563023507595062,0.738020777702332,0.899999976158142,0.238575875759125,0.355732023715973\n        ,0.364720314741135,0.36279034614563,0.504305362701416,0.418273389339447,0.21246899664402,0.484130948781967,1,1,0.717513561248779\n        ,0.609057724475861,1,0.190772294998169,0.189764350652695,0.379646718502045,0.410798698663712,0.310579746961594,0.410809904336929\n        ,0.343109250068665,0.151649907231331,0.372355252504349,0.432689905166626,0.705370366573334,0.446909070014954,0.397691786289215\n        ,0.493638128042221,0.249241650104523,0.408016115427017,0.1743523478508,0.580612659454346,0.316434442996979,0.144477933645248\n        ,0.492175936698914,0.409012824296951,0.168958619236946,0.447480082511902,0.494035720825195,0.534899950027466,0.577429175376892\n        ,0.539071023464203,0.499245464801788,0.450773000717163,0.357262283563614,0.359641790390015,0.300000011920929,0.510655224323273\n        ,0.393249958753586,0.122448980808258,0.300000011920929,0.574471712112427,0.383565634489059,0.390012353658676,0.394759863615036\n        ,0.500222086906433,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.413799285888672,0.550000011920929\n        ,0.150000005960464,0.150000005960464,0.119999997317791,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929\n        ,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929\n        ,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929\n        ,0.300000011920929,0.300000011920929,0.201034501194954,0.283556282520294,0.622648358345032,0.410614639520645,0.15689942240715\n        ,0.363164901733398,0.497522711753845,0.366464495658875,0.144129678606987,0.15396711230278,0.136388406157494,0.110584229230881\n        ,0.319683194160461,0.15707790851593,0.179601892828941,0.271901369094849,0.144837826490402,0.353604793548584,0.232929348945618\n        ,0.334674477577209,0.347276002168655,0.237096637487412,0.355479329824448,0.364682763814926,0.228183850646019,0.328231632709503\n        ,0.286706179380417,0.1999551653862,0.353024065494537,1,0.120854437351227,0.705098867416382,0.570705950260162,0.138418808579445\n        ,0.188803881406784,0.187508851289749,0.377009600400925,0.378021121025085,0.313959717750549,0.391879200935364,0.343293637037277\n        ,0.150570645928383,0.370510280132294,0.43337219953537,0.704165577888489,0.446447998285294,0.397987276315689,0.493255823850632\n        ,0.247754007577896,0.329767942428589,0.584638297557831,0.10365991294384,0.386701285839081,0.469178020954132,0.190165564417839\n        ,0.446778386831284,0.448410719633102,0.496600031852722,0.485161036252975,0.440406888723373,0.500257134437561,0.45028492808342\n        ,0.25,0.394021302461624,0.460566163063049,0.361449152231216,0.384900748729706,0.390994220972061,0.341767132282257\n        ,0.419938653707504,0.170603901147842,0.181894451379776,0.25753927230835,0.41343629360199,0.121487513184547,0.110730439424515\n        ,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5\n        ,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5\n        ,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.5,0.5\n        ,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.5,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.5,0.5,0.5,0.899999976158142,0.5,0.5,0.5,0.5,0.899999976158142\n        ,0.899999976158142,0.5,0.899999976158142,0.0210085958242416,0.0191792137920856,0.0192963965237141,0.0186389740556479\n        ,0.122763067483902,0.0245019607245922,0.0995751470327377,0.0995730087161064,0.0180597361177206,0.0178598538041115\n        ,0.179421439766884,0.171214923262596,0.128943219780922,0.122265592217445,0.131793394684792,0.121538914740086,0.120697997510433\n        ,0.0198810547590256,0.121450372040272,0.116797655820847,0.115617334842682,0.105570323765278,0.105481624603271,0.104324460029602\n        ,0.135003134608269,0.120837047696114,0.10340691357851,0.0984461605548859,0.09486985206604,0.0916204452514648,0.0895644500851631\n        ,0.0894134789705276,0.0967373102903366,0.0844946131110191,0.0784533694386482,0.094071164727211,0.101866342127323,0.0899942740797997\n        ,0.084604375064373,0.0803702101111412,0.0761234313249588,0.0726300999522209,0.0867085829377174,0.069316990673542,0.0856314152479172\n        ,0.0676203221082687,0.0842828527092934,0.067114382982254,0.0686155781149864,0.0656019300222397,0.0627633929252625\n        ,0.0593736432492733,0.057195819914341,0.0551217012107372,0.0533682592213154,0.0668788924813271,0.899999976158142,0.899999976158142\n        ,0.0634551644325256,0.061039824038744,0.899999976158142,0.0573312938213348,0.899999976158142,0.0553891472518444,0.0535443685948849\n        ,0.909212648868561,0.0892795249819756,0.132362753152847,0.0948472172021866,0.0853950530290604,0.0423025786876678,0.120995484292507\n        ,0.0709883868694305,0.0245840400457382,0.0281479936093092,0.899999976158142,0.899999976158142,0.0205661673098803,0.0625068545341492\n        ,0.0935042500495911,0.899999976158142,0.906017541885376,0.120485842227936,0.0772125869989395,0.0612680874764919,0.899999976158142\n        ,0.899999976158142,0.908125281333923,0.906064808368683,0.12110710889101,0.230990335345268,0.125681951642036,0.128095984458923\n        ,0.128825411200523,0.125952377915382,0.0230134893208742,0.0197366271167994,0.0314518921077251,0.331447571516037,0.228125557303429\n        ,0.899999976158142,0.125234216451645,0.232355818152428,0.121031150221825,0.0187431108206511,0.130838826298714,0.0202204361557961\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0279667302966118,0.133586198091507,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0994578823447227,0.0994723290205002\n        ,0.0994878485798836,0.0994757488369942,0.0992683842778206,0.78326690196991,0.651701331138611,0.67856639623642,0.722593247890472\n        ,0.899999976158142,0.908350229263306,0.227162957191467,0.0995369106531143,0.899999976158142,0.899999976158142,0.800000011920929\n        ,0.0994640290737152,0.899999976158142,0.899999976158142,0.675524592399597,0.899999976158142,0.810967564582825,0.810860931873322\n        ,0.811047852039337,0.899999976158142,0.0201524216681719,0.0311778448522091,0.136765494942665,0.131722420454025,0.127948045730591\n        ,0.127072706818581,0.0993012562394142,0.0991286635398865,0.099322073161602,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.0161145962774754,0.0185560490936041,0.0324523970484734,0.122718594968319,0.0994901955127716,0.0995630919933319\n        ,0.038259107619524,0.0896085575222969,0.169828429818153,0.122217774391174,0.124139316380024,0.120667956769466,0.0380419753491879\n        ,0.121132530272007,0.031004436314106,0.103646159172058,0.120674453675747,0.0986567735671997,0.0917479991912842,0.0950431227684021\n        ,0.0894859209656715,0.0896541252732277,0.0968138575553894,0.09412532299757,0.0784110277891159,0.0844981074333191,0.0900865197181702\n        ,0.102103270590305,0.0802971869707108,0.0846083983778954,0.0724213346838951,0.0759714841842651,0.0867259800434113\n        ,0.0690862610936165,0.0856297239661217,0.0673950910568237,0.0842797458171844,0.0669263899326324,0.0652717873454094\n        ,0.0683451294898987,0.0589643530547619,0.0623894222080708,0.0568165369331837,0.0547826141119003,0.0530858412384987\n        ,0.0665799528360367,0.0630895420908928,0.899999976158142,0.899999976158142,0.0606382973492146,0.0568939559161663,0.899999976158142\n        ,0.0549896210432053,0.899999976158142,0.0531911998987198,0.908972263336182,0.0816975012421608,0.094945527613163,0.0854047760367393\n        ,0.0639795660972595,0.120819725096226,0.0708507224917412,0.0260804612189531,0.0219318121671677,0.899999976158142,0.0194744672626257\n        ,0.0623186081647873,0.0935470536351204,0.12045968323946,0.906039774417877,0.899999976158142,0.0771617144346237,0.899999976158142\n        ,0.899999976158142,0.0610728077590466,0.907944023609161,0.0715562850236893,0.125531867146492,0.125799506902695,0.128634288907051\n        ,0.127870187163353,0.0339642949402332,0.038983803242445,0.108174778521061,0.0945930778980255,0.899999976158142,0.0693850517272949\n        ,0.125101238489151,0.0958503782749176,0.120923519134521,0.0301489941775799,0.0456141158938408,0.130416601896286,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.040399719029665,0.13324661552906,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.0976946875452995,0.0977993011474609,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.768164098262787,0.814141035079956,0.632749080657959,0.677894532680511,0.0795049443840981,0.0845270901918411\n        ,0.0980286151170731,0.0894803777337074,0.099321112036705,0.0979417786002159,0.908165276050568,0.0995413362979889,0.899999976158142\n        ,0.899999976158142,0.0994874984025955,0.899999976158142,0.899999976158142,0.899999976158142,0.720643103122711,0.630293428897858\n        ,0.766258358955383,0.899999976158142,0.899999976158142,0.0977180302143097,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        Transform: 1.15766822404049e-006,-1.28535908817908e-006,0.999999999997491,0,0.995290635085167,0.0969362522209254,-1.02761836151786e-006\n        ,0,-0.0969362522195667,0.995290635083767,1.3915257634653e-006,0,-49.9940905212278,-4.81498390970324,-0.0375257788007833\n        ,1\n        TransformLink: 1.15766812530998e-006,0.995290550202856,-0.0969362439524608,0,-1.28535897856143e-006,0.096936243954034,0.995290550203658\n        ,0,0.999999999999517,-1.02761836151994e-006,1.39152576346812e-006,0,0.0375774663830155,50.2253922781078,-0.0539313180187548\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Knee2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904\n        ,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927\n        ,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950\n        ,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973\n        ,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996\n        ,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019\n        ,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042\n        ,4043,4044,4045,4046,4047,4048,4049,4050,4051,6539,6541,6542,6543,6545,6566,6567,6568,6569,6570,6572,6573,6574,6576\n        ,6578,6580,6582,6587,6588,6589,6591,6592,6595,6604,6605,6606,6607,6608,6609,6630,6631,6633,6635,6636,6637,6638,6639\n        ,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6662,6663,6665,6669,6680,6681\n        ,6682,6683,6689,6690,6691,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6866,6867,6868,6869,6870,6871,6903\n        ,6904,6909,6910,6911,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552\n        ,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575\n        ,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598\n        ,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621\n        ,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644\n        ,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667\n        ,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690\n        ,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713\n        ,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736\n        ,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759\n        ,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782\n        ,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805\n        ,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828\n        ,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851\n        ,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874\n        ,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897\n        ,8898,8899,8900,8904,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8919,8920,8921,8922,8923,8924,8925,8926\n        ,8927,8928,8929,8931,8932,8934,8935,8936,8937,8938,8940,8941,8942,8943,8944,8945,8946,8948,8949,8950,8951,8952,8953\n        ,8954,8955,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977\n        ,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000\n        ,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023\n        ,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046\n        ,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069\n        ,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092\n        ,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115\n        ,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138\n        ,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161\n        ,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184\n        ,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207\n        ,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230\n        ,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253\n        ,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276\n        ,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299\n        ,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322\n        ,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345\n        ,9346,9347,9348,9349,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370\n        ,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393\n        ,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416\n        ,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439\n        ,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462\n        ,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485\n        ,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508\n        ,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531\n        ,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554\n        ,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577\n        ,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600\n        ,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623\n        ,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646\n        ,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669\n        ,9670,9671,9672,9673,9674,9675,9676,9677,9680,9681,9682,9683,9684,9688,9689,9692,9693,9694,9698,9702,9703,9707,9708\n        ,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9740\n        ,9741,9742,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768\n        ,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791\n        ,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814\n        ,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837\n        ,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9901,9902\n        ,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925\n        ,9926\n        Weights: 0.217937991023064,0.193066567182541,0.150126114487648,0.17124816775322,0.165598079562187,0.122377060353756,0.148478820919991\n        ,0.0956615433096886,0.140187636017799,0.0787397772073746,0.144371047616005,0.117074072360992,0.101211987435818,0.133439242839813\n        ,0.0911127552390099,0.069226861000061,0.0714743733406067,0.0480961725115776,0.10335074365139,0.126632317900658,0.149800479412079\n        ,0.0685747936367989,0.0428042337298393,0.0310193803161383,0.167778611183167,0.230801030993462,0.163355246186256,0.111697867512703\n        ,0.134922936558723,0.0986230075359344,0.0804232433438301,0.109543345868587,0.0710814893245697,0.0740618333220482,0.134507805109024\n        ,0.0736229047179222,0.0587472394108772,0.0512644127011299,0.0673453360795975,0.0499555207788944,0.0700478702783585\n        ,0.0618133395910263,0.0750201046466827,0.0922682136297226,0.0804645866155624,0.0456821210682392,0.0354322865605354\n        ,0.0335599854588509,0.143076032400131,0.0875507295131683,0.0984939783811569,0.168851777911186,0.165012300014496,0.0927857756614685\n        ,0.159829273819923,0.139958202838898,0.14929561316967,0.069535106420517,0.050439827144146,0.0829839482903481,0.102786235511303\n        ,0.0354951024055481,0.0229150280356407,0.0166076384484768,0.0108027188107371,0.0101655097678304,0.00608651200309396\n        ,0.072212278842926,0.0804904103279114,0.0394822135567665,0.0363513678312302,0.0183210987597704,0.0167477466166019\n        ,0.0103857610374689,0.0103328255936503,0.123184978961945,0.131587728857994,0.103567540645599,0.102400660514832,0.0416419804096222\n        ,0.0209475345909595,0.0313385166227818,0.0538950078189373,0.0102837020531297,0.0172615870833397,0.00782635621726513\n        ,0.0132249752059579,0.0325090512633324,0.0171860456466675,0.0176416132599115,0.0335634164512157,0.0136251226067543\n        ,0.0130008785054088,0.0652362108230591,0.0496616810560226,0.124598667025566,0.0696243494749069,0.0846680551767349\n        ,0.0544763430953026,0.11882134526968,0.172125160694122,0.19344200193882,0.220697969198227,0.200828805565834,0.119947507977486\n        ,0.0879858732223511,0.173677518963814,0.0491216033697128,0.137200742959976,0.0281743127852678,0.114367216825485,0.0199793707579374\n        ,0.0973046720027924,0.223634704947472,0.213968828320503,0.0652075260877609,0.115864135324955,0.0806689858436584,0.0329237170517445\n        ,0.0744070038199425,0.0204459112137556,0.0926106572151184,0.0211250614374876,0.157550111413002,0.165023967623711,0.066793404519558\n        ,0.0384841412305832,0.0155896889045835,0.00648322282359004,0.00328610604628921,0.118579044938087,0.158680856227875\n        ,0.0288678389042616,0.0127693628892303,0.0054703475907445,0.00413582799956203,0.0724539160728455,0.107869297266006\n        ,0.193620681762695,0.221625596284866,0.164402574300766,0.148051723837852,0.139042526483536,0.194092482328415,0.226165369153023\n        ,0.204499185085297,0.235685050487518,0.136574730277061,0.109518423676491,0.106049604713917,0.132017239928246,0.170960187911987\n        ,0.176611080765724,0.14548534154892,0.158295169472694,0.0775470584630966,0.0458164028823376,0.0200561676174402,0.00933938194066286\n        ,0.00501492712646723,0.168417036533356,0.129740998148918,0.0180741064250469,0.0374149270355701,0.00851493515074253\n        ,0.00643268646672368,0.08414426445961,0.121842563152313,0.202866554260254,0.155388861894608,0.00113062001764774,0.0011699030874297\n        ,0.00142485089600086,0.00137593131512403,0.00191429245751351,0.00360467471182346,0.00410669762641191,0.00478810397908092\n        ,0.00366930733434856,0.00185177964158356,0.00651489989832044,0.00790537614375353,0.00180479197297245,0.00497250165790319\n        ,0.00197080755606294,0.00203889538533986,0.00165602355264127,0.00176483765244484,0.00272715580649674,0.00230192486196756\n        ,0.00152403034735471,0.00248730834573507,0.00132022495381534,0.00276284059509635,0.00103867775760591,0.00196949602104723\n        ,0.00180855498183519,0.00192999036516994,0.00233792304061353,0.00125158741138875,0.00667747389525175,0.00140081695280969\n        ,0.00370705616660416,0.00188195053488016,0.0028317216783762,0.0026190890930593,0.00237803836353123,0.00129506958182901\n        ,0.0063701095059514,0.00740096950903535,0.0079770889133215,0.00791583675891161,0.00498282955959439,0.00367825804278255\n        ,0.00346787925809622,0.00271937483921647,0.00141765410080552,0.00240975338965654,0.00307231023907661,0.00263963523320854\n        ,0.0026630477514118,0.00183302361983806,0.00148538441862911,0.00261011580005288,0.0012280666269362,0.00128619314637035\n        ,0.001272784313187,0.00129027420189232,0.00192920712288469,0.00404529366642237,0.00393471261486411,0.00227775750681758\n        ,0.00469678221270442,0.00141284347046167,0.00184910569805652,0.00344931869767606,0.00138123158831149,0.00633459491655231\n        ,0.00395409855991602,0.00769313843920827,0.00885469187051058,0.00468115182593465,0.00788083299994469,0.00721679860725999\n        ,0.00124457373749465,0.00189409160520881,0.00751018477603793,0.00158069364260882,0.00212554424069822,0.00121294870041311\n        ,0.00207396456971765,0.00263531133532524,0.00229365844279528,0.00263653160072863,0.002594891237095,0.00523023307323456\n        ,0.00501290755346417,0.278524190187454,0.394556045532227,0.356071710586548,0.281402856111526,0.488670468330383,0.486498981714249\n        ,0.293616443872452,0.338438272476196,0.367852568626404,0.341589659452438,0.299342811107636,0.591005504131317,0.440767735242844\n        ,0.490833163261414,0.497860908508301,0.510798573493958,0.800929665565491,0.789895832538605,0.820857107639313,0.81392914056778\n        ,0.284495800733566,0.30119326710701,0.553172945976257,0.391654521226883,0.580089569091797,0.624157726764679,0.180358052253723\n        ,0.172835975885391,0.255893439054489,0.203865572810173,0.19896200299263,0.268915176391602,0.918198108673096,0.925586402416229\n        ,0.543842315673828,0.440254360437393,0.312048435211182,0.278778225183487,0.259148359298706,0.256495177745819,0.379354923963547\n        ,0.228678658604622,0.183471709489822,0.190731287002563,0.20325493812561,0.228591680526733,0.489701420068741,0.187608972191811\n        ,0.231067150831223,0.207314938306808,0.13930881023407,0.446447372436523,0.307628959417343,0.162401631474495,0.244091495871544\n        ,0.229731202125549,0.208574816584587,0.213357344269753,0.368181824684143,0.199297100305557,0.151384651660919,0.0941171497106552\n        ,0.499143898487091,0.207266747951508,0.098545603454113,0.509195327758789,0.164197608828545,0.284520030021667,0.87258243560791\n        ,0.937198340892792,0.929506897926331,0.939635574817657,0.937211036682129,0.811447024345398,0.838191568851471,0.830745756626129\n        ,0.814085900783539,0.683981478214264,0.707984209060669,0.814047157764435,0.773857712745667,0.765161633491516,0.841501414775848\n        ,0.568170011043549,0.560819149017334,0.498938947916031,0.499213874340057,0.453529417514801,0.500098705291748,0.605953276157379\n        ,0.360562413930893,0.431189507246017,0.500657081604004,0.499541968107224,0.499347507953644,0.499558687210083,0.499784559011459\n        ,0.289263367652893,0.271083652973175,0.31381094455719,0.364148586988449,0.0104604847729206,0.0117881782352924,0.00920889433473349\n        ,0.00868870317935944,0.0158582646399736,0.012913279235363,0.0122199170291424,0.0147344302386045,0.0398468933999538\n        ,0.0335258916020393,0.0688999518752098,0.0766271725296974,0.186611503362656,0.183087810873985,0.151672527194023,0.0356982983648777\n        ,0.42280113697052,0.452128559350967,0.40513089299202,0.463361591100693,0.436503082513809,0.38639509677887,0.427062779664993\n        ,0.103389844298363,0.172851338982582,0.0250426344573498,0.0206322781741619,0.00760459387674928,0.00763090094551444\n        ,0.00503380922600627,0.00518276123329997,0.00184386631008238,0.00554785551503301,0.0065411957912147,0.00249896850436926\n        ,0.00617913668975234,0.00226741447113454,0.00445352448150516,0.00413006078451872,0.0073011196218431,0.00764281861484051\n        ,0.00377230672165751,0.00695649860426784,0.0105930175632238,0.013415620662272,0.0140805477276444,0.0111596565693617\n        ,0.00858309958130121,0.00860860012471676,0.009040174074471,0.00876380875706673,0.0116116171702743,0.00915669836103916\n        ,0.00767848733812571,0.007785739377141,0.0373207852244377,0.0356807373464108,0.0712771713733673,0.0775921493768692\n        ,0.0338086485862732,0.0711394846439362,0.154912173748016,0.148190930485725,0.179008305072784,0.419658631086349,0.404332429170609\n        ,0.423344492912292,0.461189091205597,0.459054917097092,0.450298726558685,0.468799650669098,0.471357196569443,0.470733731985092\n        ,0.468281656503677,0.461129665374756,0.459681630134583,0.482899278402328,0.46652552485466,0.49783006310463,0.497768074274063\n        ,0.425248622894287,0.440236985683441,0.203102990984917,0.212519079446793,0.173639550805092,0.18523108959198,0.0252952706068754\n        ,0.0382022671401501,0.0494664870202541,0.0247309561818838,0.0959605649113655,0.017598282545805,0.0179799422621727\n        ,0.0963413417339325,0.00837020669132471,0.00975190475583076,0.00930315069854259,0.00995020940899849,0.0112953381612897\n        ,0.014461281709373,0.0136039676144719,0.00938993413001299,0.0104363551363349,0.010656557045877,0.0100247217342258\n        ,0.0326296165585518,0.0194478332996368,0.0119620682671666,0.0225890632718802,0.0124636711552739,0.0057713259011507\n        ,0.0092778904363513,0.010950168594718,0.00912692490965128,0.00848509091883898,0.00771763687953353,0.00625959457829595\n        ,0.00867180153727531,0.00519386120140553,0.00542215025052428,0.00709175365045667,0.00440816627815366,0.00893468875437975\n        ,0.0327585935592651,0.0128655480220914,0.00944874808192253,0.029045645147562,0.00955470465123653,0.0319792591035366\n        ,0.0514524430036545,0.00910031981766224,0.0809905454516411,0.00846797414124012,0.0040576639585197,0.00289000198245049\n        ,0.291601538658142,0.305837243795395,0.495860993862152,0.497062891721725,0.284753739833832,0.497428089380264,0.498450934886932\n        ,0.4991714656353,0.498457342386246,0.498275578022003,0.499232739210129,0.499325484037399,0.498723983764648,0.499112755060196\n        ,0.499192982912064,0.498770505189896,0.499476730823517,0.499507606029511,0.499369323253632,0.498765498399735,0.19354435801506\n        ,0.497004777193069,0.498025625944138,0.499035775661469,0.498643934726715,0.0101069388911128,0.498003214597702,0.498488068580627\n        ,0.124844379723072,0.00847867224365473,0.009872623719275,0.00662050535902381,0.00963056832551956,0.00449067214503884\n        ,0.00523729017004371,0.00585944904014468,0.00689659500494599,0.00176204845774919,0.00231578364036977,0.00216982280835509\n        ,0.00305611151270568,0.00286427279934287,0.00455412268638611,0.00240973522886634,0.00170441914815456,0.174829512834549\n        ,0.463668048381805,0.437743693590164,0.0907380133867264,0.0942813456058502,0.0316141545772552,0.447386860847473,0.494165003299713\n        ,0.254411548376083,0.475739121437073,0.495833784341812,0.481321185827255,0.497110813856125,0.0143417259678245,0.0915817469358444\n        ,0.441890031099319,0.17601589858532,0.0104726823046803,0.0110441735014319,0.00322920642793179,0.180409610271454,0.0045286095701158\n        ,0.0840634927153587,0.073136493563652,0.00281742191873491,0.00334198912605643,0.498167306184769,0.498650819063187\n        ,0.00585331814363599,0.497448414564133,0.48209011554718,0.39910900592804,0.398386210203171,0.421490728855133,0.0171202421188354\n        ,0.159211203455925,0.15203121304512,0.0257838927209377,0.143713772296906,0.27756530046463,0.267116546630859,0.166035607457161\n        ,0.181657657027245,0.202675879001617,0.156768962740898,0.158613741397858,0.25874650478363,0.294418185949326,0.310221552848816\n        ,0.333954304456711,0.306745558977127,0.347377270460129,0.37422052025795,0.396495938301086,0.335510343313217,0.420392662286758\n        ,0.396934300661087,0.311897039413452,0.252103835344315,0.285647630691528,0.31638965010643,0.289389371871948,0.237182766199112\n        ,0.358209788799286,0.330744564533234,0.294395178556442,0.216423064470291,0.235265210270882,0.177145376801491,0.154336825013161\n        ,0.221582189202309,0.203899502754211,0.291168242692947,0.265926122665405,0.222789525985718,0.382866770029068,0.379625827074051\n        ,0.354701280593872,0.298949152231216,0.32309752702713,0.00353628769516945,0.0043956097215414,0.00995998084545136,0.00464406609535217\n        ,0.00191318255383521,0.00239988300018013,0.00144379446282983,0.00101906375493854,0.00216976762749255,0.0185377430170774\n        ,0.00356011069379747,0.0051389541476965,0.00240384507924318,0.0039246529340744,0.00358820962719619,0.00492909690365195\n        ,0.00868967268615961,0.012543841265142,0.00162668875418603,0.00144240353256464,0.00167010014411062,0.00689264992251992\n        ,0.00304925511591136,0.0106126070022583,0.0109203718602657,0.0107194166630507,0.0107699315994978,0.00377897336147726\n        ,0.00214204099029303,0.00185688678175211,0.00528150983154774,0.00216559180989861,0.00740047078579664,0.0178566388785839\n        ,0.0126037206500769,0.00112852884922177,0.00547391129657626,0.00875450298190117,0.0106500312685966,0.00543188489973545\n        ,0.00321708037517965,0.0028818033169955,0.00511367572471499,0.00115782092325389,0.00272735022008419,0.0128676798194647\n        ,0.0186832193285227,0.00801458023488522,0.00457123108208179,0.00317270634695888,0.00154793937690556,0.0102164736017585\n        ,0.00986851658672094,0.009819395840168,0.0100564016029239,0.00538678048178554,0.0102701392024755,0.0117501271888614\n        ,0.0102348234504461,0.0146714728325605,0.0262550786137581,0.0271754302084446,0.051020797342062,0.0325711853802204\n        ,0.0242357943207026,0.0131749734282494,0.0136630134657025,0.017205037176609,0.0239689871668816,0.00827865395694971\n        ,0.0125653436407447,0.003217370249331,0.00539044104516506,0.00601178500801325,0.00432546203956008,0.00686935102567077\n        ,0.00861361064016819,0.0101967453956604,0.00765288062393665,0.00386519869789481,0.00497460691258311,0.00544665800407529\n        ,0.0212502051144838,0.0204925052821636,0.0234464816749096,0.00825588870793581,0.130269840359688,0.116699047386646\n        ,0.102264374494553,0.498141705989838,0.481745272874832,0.497402459383011,0.109394714236259,0.079887181520462,0.0448430106043816\n        ,0.05612413585186,0.348335713148117,0.321103662252426,0.136996060609818,0.825557231903076,0.726665556430817,0.574333310127258\n        ,0.499330878257751,0.4996238052845,0.49933186173439,0.49904191493988,0.498877853155136,0.589865803718567,0.588133454322815\n        ,0.709356665611267,0.82204669713974,0.798275709152222,0.761979937553406,0.801986038684845,0.813846588134766,0.830662250518799\n        ,0.732072174549103,0.738728821277618,0.721726655960083,0.496359467506409,0.483749479055405,0.507127046585083,0.462187528610229\n        ,0.355508267879486,0.394198328256607,0.389929682016373,0.422440081834793,0.370403230190277,0.312455385923386,0.337098896503448\n        ,0.319699198007584,0.357336074113846,0.327188402414322,0.275863766670227,0.237348303198814,0.46007451415062,0.495663166046143\n        ,0.498662918806076,0.896295666694641,0.88693642616272,0.815315902233124,0.586030066013336,0.504073619842529,0.808114111423492\n        ,0.795565605163574,0.7134850025177,0.57805347442627,0.500971138477325,0.496326148509979,0.461786419153214,0.892370939254761\n        ,0.876114130020142,0.794561326503754,0.641628742218018,0.312976479530334,0.201786264777184,0.112239710986614,0.567541480064392\n        ,0.700277745723724,0.779269278049469,0.792389869689941,0.852401494979858,0.863027215003967,0.855158448219299,0.959153354167938\n        ,0.955068171024323,0.826405823230743,0.866171360015869,0.893685817718506,0.875145792961121,0.944960653781891,0.859789371490479\n        ,0.921505987644196,0.849886894226074,0.522505104541779,0.539905965328217,0.603489339351654,0.566338777542114,0.580175757408142\n        ,0.680625438690186,0.614581108093262,0.627249896526337,0.562271416187286,0.527245342731476,0.588694632053375,0.60365891456604\n        ,0.513323426246643,0.501584470272064,0.517501533031464,0.50719553232193,0.506801426410675,0.510469377040863,0.512995004653931\n        ,0.499140977859497,0.498905599117279,0.498835623264313,0.498779982328415,0.499234527349472,0.513076305389404,0.534325361251831\n        ,0.459902405738831,0.40277636051178,0.376346588134766,0.44800540804863,0.332356840372086,0.427796334028244,0.304846733808517\n        ,0.414865493774414,0.295435309410095,0.411079108715057,0.442986249923706,0.460114300251007,0.435196161270142,0.43331316113472\n        ,0.481134057044983,0.487723857164383,0.470089703798294,0.467404961585999,0.493127942085266,0.48733189702034,0.494223415851593\n        ,0.49494481086731,0.456948399543762,0.429066330194473,0.500806391239166,0.498532742261887,0.483417391777039,0.502954125404358\n        ,0.541422784328461,0.601390898227692,0.644598543643951,0.562959849834442,0.720340251922607,0.603916108608246,0.74493545293808\n        ,0.629328787326813,0.583151161670685,0.546524524688721,0.601599276065826,0.518307745456696,0.508589446544647,0.528307914733887\n        ,0.533909976482391,0.513328611850739,0.516984522342682,0.514529645442963,0.499012738466263,0.499266684055328,0.498823940753937\n        ,0.499305218458176,0.529254913330078,0.560231685638428,0.467360258102417,0.455509841442108,0.38519886136055,0.411968350410461\n        ,0.433961093425751,0.33932089805603,0.418325275182724,0.308706313371658,0.448693335056305,0.466994106769562,0.438370853662491\n        ,0.476920962333679,0.492501705884933,0.486679792404175,0.47413045167923,0.491592615842819,0.495432138442993,0.495353788137436\n        ,0.464972317218781,0.438023507595062,0.507173299789429,0.499462336301804,0.489138394594193,0.57302188873291,0.611708164215088\n        ,0.692197263240814,0.537839472293854,0.514241337776184,0.368297398090363,0.395665526390076,0.322331756353378,0.293465346097946\n        ,0.289082944393158,0.424469411373138,0.455118209123611,0.498355507850647,0.501125514507294,0.482653737068176,0.611623883247375\n        ,0.735338807106018,0.763435781002045,0.566104888916016,0.531529128551483,0.403756648302078,0.375872433185577,0.328113824129105\n        ,0.296638131141663,0.432593464851379,0.462690770626068,0.508043050765991,0.499496638774872,0.488325774669647,0.220216602087021\n        ,0.158084243535995,0.153392732143402,0.158346980810165,0.175082996487617,0.175009846687317,0.302030146121979,0.291526287794113\n        ,0.298471540212631,0.170197010040283,0.49937179684639,0.499444335699081,0.867103099822998,0.914438545703888,0.920026957988739\n        ,0.932686567306519,0.89571750164032,0.868821501731873,0.731371462345123,0.947578132152557,0.963693678379059,0.872940897941589\n        ,0.896303176879883,0.976179599761963,0.794882595539093,0.71112322807312,0.721732616424561,0.839061200618744,0.856555044651031\n        ,0.804526925086975,0.789306282997131,0.887579202651978,0.893890917301178,0.91931164264679,0.957172393798828,0.948259770870209\n        ,0.927057504653931,0.945972621440887,0.867647588253021,0.834470868110657,0.810692071914673,0.699405074119568,0.720930814743042\n        ,0.747544467449188,0.738045692443848,0.800284683704376,0.818203568458557,0.705126464366913,0.742816030979156,0.726684033870697\n        ,0.818915724754334,0.740670919418335,0.698642075061798,0.72279292345047,0.924771547317505,0.910344541072845,0.930291533470154\n        ,0.909846127033234,0.72337418794632,0.754449546337128,0.923452615737915,0.768020153045654,0.937496244907379,0.732703745365143\n        ,0.846335530281067,0.747398257255554,0.779557764530182,0.856311082839966,0.863609313964844,0.778908848762512,0.800135552883148\n        ,0.949707448482513,0.932618141174316,0.901033520698547,0.881569683551788,0.858479797840118,0.861806094646454,0.876955330371857\n        ,0.913475751876831,0.902207493782043,0.884879410266876,0.815134942531586,0.827250480651855,0.804454684257507,0.272561937570572\n        ,0.231209844350815,0.0461372584104538,0.0474661439657211,0.0256336480379105,0.26273712515831,0.0582256130874157,0.0627454370260239\n        ,0.384406566619873,0.526714742183685,0.137601256370544,0.191710874438286,0.120221570134163,0.388462126255035,0.518283665180206\n        ,0.444480806589127,0.142405226826668,0.254854619503021,0.221037641167641,0.00602481933310628,0.0129641862586141,0.0140214012935758\n        ,0.0106260320171714,0.0104052014648914,0.0760594680905342,0.090136930346489,0.111144416034222,0.102193497121334,0.087060958147049\n        ,0.110249400138855,0.518938064575195,0.411055415868759,0.424786895513535,0.51365065574646,0.51007604598999,0.106127068400383\n        ,0.098522275686264,0.143285870552063,0.848161458969116,0.87744414806366,0.883877217769623,0.882674098014832,0.814743518829346\n        ,0.609453201293945,0.90973961353302,0.894276797771454,0.656733632087708,0.683802425861359,0.787524402141571,0.609966337680817\n        ,0.700185656547546,0.681110978126526,0.590685248374939,0.812042593955994,0.85488498210907,0.84349662065506,0.0114013524726033\n        ,0.02998979203403,0.82684862613678,0.862479329109192,0.899892747402191,0.952809393405914,0.681385636329651,0.100912190973759\n        ,0.747959554195404,0.205182448029518,0.230525285005569,0.165347367525101,0.145352244377136,0.118710324168205,0.149910762906075\n        ,0.161987856030464,0.183680325746536,0.922620356082916,0.936474502086639,0.950519919395447,0.921152293682098,0.698137700557709\n        ,0.196451008319855,0.212425723671913,0.307027161121368,0.281326144933701,0.241061449050903,0.280320852994919,0.312100201845169\n        ,0.350002586841583,0.358223885297775,0.923398077487946,0.948159337043762,0.952609419822693,0.910579383373261,0.842493653297424\n        ,0.76557469367981,0.74022364616394,0.854901850223541,0.889715433120728,0.871529042720795,0.814254105091095,0.769732594490051\n        ,0.691287755966187,0.756349682807922,0.84500390291214,0.882726013660431,0.943487286567688,0.909797847270966,0.477754294872284\n        ,0.46895295381546,0.463263988494873,0.461836606264114,0.495633959770203,0.562544822692871,0.954037547111511,0.972498118877411\n        ,0.973097383975983,0.965942442417145,0.938558042049408,0.893055737018585,0.87899911403656,0.889513552188873,0.91115391254425\n        ,0.924653291702271,0.933769881725311,0.955277562141418,0.962941586971283,0.918522894382477,0.901508152484894,0.903438150882721\n        ,0.918805599212646,0.00601938785985112,0.00834209378808737,0.00902128033339977,0.0135680222883821,0.0111072529107332\n        ,0.0150740267708898,0.0156109463423491,0.010163702070713,0.00943706650286913,0.0140196084976196,0.0099268015474081\n        ,0.0936370566487312,0.168840080499649,0.122784204781055,0.0621220096945763,0.0685685127973557,0.0819874033331871,0.144232213497162\n        ,0.064440906047821,0.076024703681469,0.113322794437408,0.105542831122875,0.0744545161724091,0.130451485514641,0.00976161099970341\n        ,0.0145163740962744,0.0138357421383262,0.121410675346851,0.200015738606453,0.301278203725815,0.255931317806244,0.191387891769409\n        ,0.277878195047379,0.186294168233871,0.266687244176865,0.167191758751869,0.234919160604477,0.144132137298584,0.158535718917847\n        ,0.192940473556519,0.177407220005989,0.243259996175766,0.200750648975372,0.156268417835236,0.185902982950211,0.292245775461197\n        ,0.194213286042213,0.327614605426788,0.329183489084244,0.234623968601227,0.294932305812836,0.130018100142479,0.123868778347969\n        ,0.144459187984467,0.146622702479362,0.141849026083946,0.12442585080862,0.123008102178574,0.144393637776375,0.154975846409798\n        ,0.15810427069664,0.151754051446915,0.0537906028330326,0.0468266531825066,0.065875843167305,0.0777100026607513,0.0168748777359724\n        ,0.0163245107978582,0.00927029177546501,0.0200852919369936,0.0175574477761984,0.0358083657920361,0.0347359552979469\n        ,0.016555942595005,0.0400237366557121,0.0218191370368004,0.020828140899539,0.0365235395729542,0.0203306749463081,0.0189031958580017\n        ,0.0160851050168276,0.0162520669400692,0.00517894886434078,0.00588505202904344,0.00754177523776889,0.0102942585945129\n        ,0.0103370044380426,0.0127858771011233,0.012725648470223,0.00225719925947487,0.00247967103496194,0.00295583484694362\n        ,0.00343910092487931,0.00394250405952334,0.00460764346644282,0.00465325219556689,0.120615385472775,0.14638939499855\n        ,0.0259825028479099,0.0130146369338036,0.190072625875473,0.251881569623947,0.303522676229477,0.279425084590912,0.26716735959053\n        ,0.233579471707344,0.179389476776123,0.139929533004761,0.197481900453568,0.24097965657711,0.284078896045685,0.323536843061447\n        ,0.327070295810699,0.294761389493942,0.114823281764984,0.226902142167091,0.0431271307170391,0.145354419946671,0.0154700810089707\n        ,0.0150748556479812,0.00514666130766273,0.0122474236413836,0.00207593385130167,0.00224691699258983,0.00269671017304063\n        ,0.00313036795705557,0.00352810276672244,0.00421923352405429,0.00424055708572268,0.00718909921124578,0.131111428141594\n        ,0.1904236972332,0.117000259459019,0.112939313054085,0.0377954840660095,0.0207168702036142,0.00744775822386146,0.00290136318653822\n        ,0.00263731856830418,0.0318821966648102,0.033955492079258,0.0340485014021397,0.0420655496418476,0.0518187135457993\n        ,0.0640029832720757,0.0653755888342857,0.0614099651575089,0.0705062747001648,0.0752784609794617,0.0743302553892136\n        ,0.0811913460493088,0.0129808885976672,0.00815192423760891,0.0342321582138538,0.0194837842136621,0.00951037462800741\n        ,0.00378233869560063,0.00344818504527211,0.0190328881144524,0.0203976389020681,0.0197686478495598,0.0239295717328787\n        ,0.0362217575311661,0.0423260144889355,0.0255603417754173,0.0229577608406544,0.00873913522809744,0.0217538680881262\n        ,0.00433075288310647,0.0036963103339076,0.00499796494841576,0.00928898807615042,0.0450254566967487,0.0831537395715714\n        ,0.135650485754013,0.130224153399467,0.16381923854351,0.155462980270386,0.0740097686648369,0.0420636013150215,0.0245508179068565\n        ,0.0395204722881317,0.0222378242760897,0.0114340204745531,0.0219455249607563,0.0109243430197239,0.00495197344571352\n        ,0.00366251519881189,0.0061621661297977,0.0185748841613531,0.0373528525233269,0.0796886682510376,0.134703129529953\n        ,0.156516999006271,0.154058814048767,0.166036114096642,0.183200716972351,0.187224566936493,0.170882597565651,0.175537288188934\n        ,0.13520647585392,0.0566487982869148,0.0172476153820753,0.00909297820180655,0.00375358271412551,0.00212639267556369\n        ,0.176418080925941,0.0626516193151474,0.118131652474403,0.0054199667647481,0.00607475265860558,0.0113804060965776\n        ,0.02058863081038,0.0292676221579313,0.00431942893192172,0.00483407266438007,0.0111857131123543,0.0219631418585777\n        ,0.0346396937966347,0.207832738757133,0.191206589341164,0.181002408266068,0.174648985266685,0.168996915221214,0.130842283368111\n        ,0.0597061589360237,0.0324756540358067,0.0199867393821478,0.0100693386048079,0.135849490761757,0.14685232937336,0.0373170301318169\n        ,0.021842535585165,0.0178676676005125,0.0135938273742795,0.195307448506355,0.213279038667679,0.204697161912918,0.00610648980364203\n        ,0.00557427806779742,0.00583919091150165,0.00909410696476698,0.0073732896707952,0.00370940519496799,0.012044102884829\n        ,0.0105202021077275,0.00344539806246758,0.00359235098585486,0.00363875622861087,0.0143134286627173,0.0115217352285981\n        ,0.00785835832357407,0.0104260966181755,0.00781506765633821,0.00501787103712559,0.00545677542686462,0.00821452960371971\n        ,0.010861468501389,0.00835950020700693,0.00238670338876545,0.0143737019971013,0.0138825587928295,0.0107513386756182\n        ,0.00915904622524977,0.00299868453294039,0.00963104423135519,0.00679265987128019,0.012193463742733,0.00867342483252287\n        ,0.00494985934346914,0.00614452222362161,0.00640818430110812,0.00739147840067744,0.00805440545082092,0.00842596776783466\n        ,0.00990130472928286,0.0104558849707246,0.00973545853048563,0.0086657702922821,0.00753398612141609,0.00441383477300406\n        ,0.00373748014681041,0.0138004226610065,0.014424704015255,0.0142838153988123,0.0120262494310737,0.0115351295098662\n        ,0.0107753975316882,0.0108194667845964,0.00225539784878492,0.00285463081672788,0.00352868554182351,0.0021801870316267\n        ,0.00267730024643242,0.00316165899857879,0.00324151059612632,0.00410548970103264,0.00519956555217505,0.00550984358415008\n        ,0.0070008379407227,0.00705693243071437,0.00594623200595379,0.00503702042624354,0.0078852828592062,0.00768171390518546\n        ,0.00841241609305143,0.00822311267256737,0.00904565863311291,0.0104596195742488,0.00985451228916645,0.00801316741853952\n        ,0.0107286684215069,0.0114901326596737,0.0124793574213982,0.0123585993424058,0.0101920366287231,0.00971191469579935\n        ,0.0085464296862483,0.00770653877407312,0.00526364566758275,0.00548436446115375,0.00534455617889762,0.00661897333338857\n        ,0.00642301049083471,0.00342081906273961,0.0031899162568152,0.0712230056524277,0.0108023602515459,0.052430871874094\n        ,0.073781818151474,0.00652772095054388,0.0106889866292477,0.00708547234535217,0.00926093105226755,0.0585980378091335\n        ,0.0733336359262466,0.136360675096512,0.11399856954813,0.0794778615236282,0.0758616849780083,0.0815607607364655,0.0789245441555977\n        ,0.0123216593638062,0.00933465082198381,0.0135329077020288,0.0171680320054293,0.0172486528754234,0.0143897123634815\n        ,0.0164850633591414,0.0151780126616359,0.0148288169875741,0.0180841628462076,0.0762000754475594,0.0706229358911514\n        ,0.0600572787225246,0.0717723518610001,0.015342109836638,0.0887890160083771,0.0764502882957459,0.0141895366832614\n        ,0.0898933708667755,0.0702709257602692,0.00957185961306095,0.0102252848446369,0.921268224716187,0.864661574363709\n        ,0.822214543819427,0.812577962875366,0.796024262905121,0.785190284252167,0.79579108953476,0.798974096775055,0.819302141666412\n        ,0.832208096981049,0.901484370231628,0.898276150226593,0.966843247413635,0.980400025844574,0.947536468505859,0.940471768379211\n        ,0.919764041900635,0.792019844055176,0.817002594470978,0.88964307308197,0.902016878128052,0.894849300384521,0.844491899013519\n        ,0.768581807613373,0.694739043712616,0.614177823066711,0.525126099586487,0.490100830793381,0.426283806562424,0.293765276670456\n        ,0.153728500008583,0.0190700236707926,0.0979115888476372,0.128510400652885,0.153869733214378,0.128945022821426,0.0753603354096413\n        ,0.0418420247733593,0.0342198349535465,0.0391802079975605,0.0238109808415174,0.793688833713531,0.822716176509857,0.879287540912628\n        ,0.890917479991913,0.884676992893219,0.851999402046204,0.756732761859894,0.676083326339722,0.605361580848694,0.528316974639893\n        ,0.48301774263382,0.40739181637764,0.237763002514839,0.117609687149525,0.159359708428383,0.268328428268433,0.395739287137985\n        ,0.461845338344574,0.520696938037872,0.648815512657166,0.73719322681427,0.797538042068481,0.895237147808075,0.92297637462616\n        ,0.949268698692322,0.926944434642792\n        Transform: 0.140922901343132,0.237354541727967,-0.961147012620551,0,-0.955665486123911,-0.220918692514086,-0.194674927277414\n        ,0,-0.258542303121038,0.945969218151926,0.195699051049485,0,18.3849263661072,0.242577124515336,10.4387144787704,1\n        \n        TransformLink: 0.140922914308808,-0.955665574050354,-0.258542326908342,0,0.23735453962216,-0.220918690554097,0.945969209759294,0\n        ,-0.961146987859919,-0.194674922262287,0.195699046007975,0,7.38470479382302,19.6555869599185,2.48096468690343,1\n    }\n    Deformer: \"SubDeformer::Cluster_R_Knee\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734\n        ,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757\n        ,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780\n        ,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803\n        ,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826\n        ,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849\n        ,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872\n        ,3873,3874,3875,3876,3877,3878,3879,3880,3881,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795\n        ,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818\n        ,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841\n        ,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864\n        ,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887\n        ,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910\n        ,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933\n        ,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956\n        ,4957,4958,4959,4960,4961,4962,4963,6698,6699,6701,6716,6722,6723,6724,6725,6726,6728,6729,6730,6732,6733,6735,6741\n        ,6746,6747,6749,6750,6753,6763,6764,6765,6766,6767,6768,6769,6770,6771,6791,6793,6797,6798,6799,6800,6801,6802,6803\n        ,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6820,6822,6826,6838,6839,6840,6846,6848,6849,6850,6853,6872\n        ,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6906,6907,6908,7175,7176,7177,7178,7179,7180,7181,7182,7183\n        ,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206\n        ,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229\n        ,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252\n        ,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275\n        ,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298\n        ,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321\n        ,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344\n        ,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367\n        ,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390\n        ,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413\n        ,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436\n        ,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459\n        ,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482\n        ,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505\n        ,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528\n        ,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551\n        ,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574\n        ,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597\n        ,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620\n        ,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643\n        ,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666\n        ,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689\n        ,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712\n        ,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735\n        ,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758\n        ,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781\n        ,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804\n        ,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827\n        ,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850\n        ,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873\n        ,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896\n        ,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919\n        ,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942\n        ,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965\n        ,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988\n        ,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011\n        ,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034\n        ,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057\n        ,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080\n        ,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103\n        ,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126\n        ,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149\n        ,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172\n        ,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195\n        ,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218\n        ,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241\n        ,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264\n        ,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287\n        ,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310\n        ,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333\n        ,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356\n        ,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8371,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384\n        ,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8398,8399,8401,8402,8403,8404,8405,8407,8408,8409,8410,8411\n        ,8412,8413,8415,8416,8417,8418,8419,8420,8421,8422,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436\n        ,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459\n        ,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482\n        ,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505\n        ,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528\n        ,8529,8530,8531,8532,8533,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876\n        ,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899\n        ,9900\n        Weights: 0.220141038298607,0.196640759706497,0.153409913182259,0.173608124256134,0.170320183038712,0.126419186592102,0.152392864227295\n        ,0.0990139618515968,0.14085453748703,0.079532116651535,0.147607132792473,0.121031373739243,0.105083473026752,0.136538848280907\n        ,0.0943783670663834,0.0724063515663147,0.0722803249955177,0.0489093288779259,0.106058277189732,0.128956601023674,0.152325019240379\n        ,0.0713165998458862,0.0447216145694256,0.031447634100914,0.169862657785416,0.232006281614304,0.165772020816803,0.103722266852856\n        ,0.127653449773788,0.0925964862108231,0.0742828398942947,0.102622017264366,0.0663422048091888,0.0716065540909767,0.130576521158218\n        ,0.0677648112177849,0.0536255724728107,0.0473034679889679,0.0628226026892662,0.0479825399816036,0.067742720246315\n        ,0.0573438853025436,0.0696251764893532,0.0868862792849541,0.0757204443216324,0.0417658872902393,0.0329458601772785\n        ,0.0323476977646351,0.138429492712021,0.0827741399407387,0.0930347740650177,0.163813948631287,0.159034430980682,0.0869526043534279\n        ,0.162047952413559,0.142031565308571,0.151230424642563,0.0715784579515457,0.0521086603403091,0.0846825391054153,0.104763366281986\n        ,0.0371469594538212,0.0241532288491726,0.0175831317901611,0.0114828906953335,0.0103546818718314,0.00621779635548592\n        ,0.074313260614872,0.0827364549040794,0.0413508154451847,0.0380601659417152,0.0194987952709198,0.0177487712353468\n        ,0.0106342006474733,0.0105341300368309,0.125118091702461,0.132997080683708,0.105603471398354,0.104569979012012,0.0389265194535255\n        ,0.0191667303442955,0.0287600625306368,0.0502987541258335,0.00945161189883947,0.0159818902611732,0.00747003080323339\n        ,0.0126327406615019,0.0298153646290302,0.0158855058252811,0.0162288565188646,0.0306226052343845,0.0130019411444664\n        ,0.0123899765312672,0.0611419267952442,0.0459677539765835,0.120401263237,0.0655012801289558,0.0809809416532516,0.0507620275020599\n        ,0.120858289301395,0.173239305615425,0.194508209824562,0.221619069576263,0.203462481498718,0.122273154556751,0.09067752212286\n        ,0.177778586745262,0.051736406981945,0.142719075083733,0.0299448184669018,0.119198977947235,0.0204716790467501,0.0987163037061691\n        ,0.224970236420631,0.2149518430233,0.0608539916574955,0.108437448740005,0.0730664432048798,0.0295846927911043,0.0679258480668068\n        ,0.0184821859002113,0.0888713151216507,0.0201829187572002,0.151507362723351,0.159909516572952,0.0684026852250099,0.0399749800562859\n        ,0.0165998600423336,0.00700818002223969,0.00339218555018306,0.119954824447632,0.159810870885849,0.026742946356535\n        ,0.0114951739087701,0.00492738699540496,0.00390063645318151,0.0691457614302635,0.10404796153307,0.197378575801849\n        ,0.223885104060173,0.169401437044144,0.152185380458832,0.139821991324425,0.195010915398598,0.227022230625153,0.205337241292\n        ,0.236822202801704,0.129063829779625,0.10129588842392,0.098905049264431,0.127973169088364,0.164971455931664,0.171554416418076\n        ,0.141118869185448,0.153867691755295,0.0792033225297928,0.047408863902092,0.0212051570415497,0.00996504724025726,0.00513662165030837\n        ,0.169499516487122,0.131101578474045,0.0164731852710247,0.0349107123911381,0.00778661575168371,0.00612845923751593\n        ,0.0805720686912537,0.117815710604191,0.203761518001556,0.150883167982101,0.0263166353106499,0.0260032135993242,0.0250821709632874\n        ,0.0255798380821943,0.0258219204843044,0.0247958730906248,0.0258203968405724,0.0247954521328211,0.0260004531592131\n        ,0.0250848215073347,0.0263162683695555,0.0255927629768848,0.0266841575503349,0.0261857993900776,0.0270041264593601\n        ,0.0267010051757097,0.0271879117935896,0.0269935075193644,0.02718535810709,0.0269825775176287,0.0269987527281046,0.0266757011413574\n        ,0.0266804657876492,0.0261615887284279,0.0143657755106688,0.0146409207955003,0.014243665151298,0.0143082411959767\n        ,0.0145482616499066,0.0149050131440163,0.0152825172990561,0.015573070384562,0.015692763030529,0.0156103633344173,0.0153549471870065\n        ,0.0150005919858813,0.0141262682154775,0.014289983548224,0.0140563026070595,0.0140992347151041,0.0142459003254771\n        ,0.0144590968266129,0.0146814035251737,0.0148508176207542,0.014919743873179,0.0148700829595327,0.0147177278995514\n        ,0.014505572617054,0.0264943614602089,0.0144799686968327,0.0128087373450398,0.0125354304909706,0.0135557120665908\n        ,0.0139769492670894,0.0119528453797102,0.0118387266993523,0.0114311072975397,0.0112328929826617,0.0119501119479537\n        ,0.0109694907441735,0.0105171836912632,0.0115400878712535,0.0127152362838387,0.0141406208276749,0.0138709126040339\n        ,0.0123479459434748,0.014054648578167,0.0105507085099816,0.0112162828445435,0.0103214271366596,0.00832196790724993\n        ,0.00780804269015789,0.009716154076159,0.0109609924256802,0.00889249425381422,0.0117862774059176,0.00957919284701347\n        ,0.0132214203476906,0.0106281461194158,0.0078987218439579,0.00974421761929989,0.00606143195182085,0.00582409603521228\n        ,0.006409399677068,0.00684636645019054,0.00745494896546006,0.00601428793743253,0.0275966115295887,0.0181790292263031\n        ,0.0181697066873312,0.0285454522818327,0.0276724547147751,0.0187410712242126,0.0268586464226246,0.0184552185237408\n        ,0.0250636301934719,0.0172649938613176,0.019733514636755,0.0134406527504325,0.0139356125146151,0.0093548521399498\n        ,0.0149864898994565,0.0151962209492922,0.0146243590861559,0.0157075729221106,0.0155551945790648,0.014719114638865\n        ,0.0116011705249548,0.00815725512802601,0.00698467111214995,0.0114818196743727,0.00595068512484431,0.0059604668058455\n        ,0.00769807770848274,0.00820890627801418,0.00769744720309973,0.00735840713605285,0.00857078935950994,0.00550975417718291\n        ,0.00538937421515584,0.00574404746294022,0.00558742601424456,0.00542253814637661,0.0060554682277143,0.00633684219792485\n        ,0.00555249443277717,0.00549389235675335,0.0122513007372618,0.0115393688902259,0.0162530466914177,0.0160768274217844\n        ,0.0157166384160519,0.0177253689616919,0.0168536193668842,0.0166768617928028,0.0156811382621527,0.0122465901076794\n        ,0.00686993170529604,0.0105261523276567,0.0118814883753657,0.0123907420784235,0.0103754969313741,0.00876099895685911\n        ,0.00992501713335514,0.00972733367234468,0.00843804981559515,0.00654476601630449,0.00710128992795944,0.00654926057904959\n        ,0.0154141951352358,0.0141462627798319,0.0124341379851103,0.0086600873619318,0.00688489247113466,0.00934554636478424\n        ,0.00654751248657703,0.0263030026108027,0.0273692011833191,0.0282624904066324,0.027193795889616,0.0285530146211386\n        ,0.0259348955005407,0.0271139964461327,0.0285574868321419,0.0263970233500004,0.0274529494345188,0.0258188918232918\n        ,0.0267107132822275,0.0244190320372581,0.0250732563436031,0.019841056317091,0.0200264994055033,0.0146815227344632\n        ,0.0144339753314853,0.0155869135633111,0.0274546537548304,0.0249893926084042,0.0289218779653311,0.0288524646311998\n        ,0.0128778191283345,0.0118977092206478,0.0276516489684582,0.00106737855821848,0.00147805246524513,0.00186067610047758\n        ,0.00154843716882169,0.0036833977792412,0.00418908474966884,0.00448016077280045,0.00374782993458211,0.00193444255273789\n        ,0.00644434196874499,0.00766608444973826,0.00174500048160553,0.00267062359489501,0.00478887232020497,0.00191833276767284\n        ,0.00174229417461902,0.00180287600960582,0.00234546139836311,0.00128583842888474,0.00214079977013171,0.00140055792871863\n        ,0.00909567438066006,0.00757129164412618,0.00278374785557389,0.00112155079841614,0.00206252257339656,0.00200117845088243\n        ,0.00242027174681425,0.00110937282443047,0.00150165776722133,0.00248800916597247,0.00127343449275941,0.00167676596902311\n        ,0.00287574343383312,0.00260993512347341,0.00256595364771783,0.00664327759295702,0.00750663643702865,0.00799639988690615\n        ,0.00774700241163373,0.00502653978765011,0.00414060847833753,0.0036840895190835,0.0028526852838695,0.00134008366148919\n        ,0.00286239455454051,0.00227882293984294,0.00194987049326301,0.00147433683741838,0.00247713620774448,0.00126496504526585\n        ,0.00147068768274039,0.00135243590921164,0.00185178325045854,0.00391016947105527,0.004016381688416,0.00242762104608119\n        ,0.00200948468409479,0.00443852646276355,0.00136092700995505,0.00104104517959058,0.00326772313565016,0.00148255017120391\n        ,0.0063310656696558,0.00368746998719871,0.00776247633621097,0.00483347987756133,0.00770892156288028,0.00199186499230564\n        ,0.00678484840318561,0.00392672047019005,0.00797629542648792,0.00253050401806831,0.00546338874846697,0.00483818212524056\n        ,0.00294264638796449,0.0548139214515686,0.0542830303311348,0.0551107376813889,0.0511926561594009,0.0479608401656151\n        ,0.0406333766877651,0.049762561917305,0.0452366508543491,0.0694228634238243,0.0721440538764,0.0708158910274506,0.0708349570631981\n        ,0.0531061626970768,0.151600793004036,0.16706295311451,0.187487840652466,0.20305697619915,0.185971736907959,0.0536451786756516\n        ,0.0685874670743942,0.150415137410164,0.162891030311584,0.158822327852249,0.181840136647224,0.202600136399269,0.195908606052399\n        ,0.179913505911827,0.0658068060874939,0.0661866217851639,0.0506342947483063,0.0491116270422935,0.0422941707074642\n        ,0.0326761230826378,0.0382144711911678,0.0465906858444214,0.062720313668251,0.140485212206841,0.1581671833992,0.149998217821121\n        ,0.150477170944214,0.154587730765343,0.172840252518654,0.185358956456184,0.190242305397987,0.188034802675247,0.18121549487114\n        ,0.17025201022625,0.0618722401559353,0.0479507856070995,0.0469446107745171,0.0404198542237282,0.0365250930190086,0.0973862633109093\n        ,0.107481263577938,0.1095936819911,0.139569535851479,0.152655407786369,0.150148823857307,0.139526158571243,0.12822799384594\n        ,0.0253077670931816,0.022599495947361,0.0183013062924147,0.0162242501974106,0.0368710495531559,0.0366680882871151\n        ,0.0385774858295918,0.0384872518479824,0.0473769642412663,0.0496687814593315,0.0385955348610878,0.0451695919036865\n        ,0.0358225330710411,0.0359686277806759,0.0315400585532188,0.0277408231049776,0.0275891739875078,0.0291530825197697\n        ,0.0292667131870985,0.0293035674840212,0.0269972402602434,0.0237951017916203,0.0364551581442356,0.0372793786227703\n        ,0.0534247048199177,0.0492258481681347,0.0466186590492725,0.0372154116630554,0.0286095775663853,0.028106402605772\n        ,0.028421763330698,0.028885792940855,0.0359596349298954,0.037527784705162,0.0339093990623951,0.0175160877406597,0.0160310510545969\n        ,0.0322983153164387,0.0407855957746506,0.0247920826077461,0.0249441564083099,0.0332219377160072,0.0338853560388088\n        ,0.0262994114309549,0.0262606032192707,0.0346851497888565,0.0247869081795216,0.0316552892327309,0.0168954823166132\n        ,0.0228659026324749,0.0132605377584696,0.0257446225732565,0.0263346303254366,0.0339123904705048,0.0255348067730665\n        ,0.0316641889512539,0.0281443577259779,0.0253598038107157,0.0834964960813522,0.019385414198041,0.0144114922732115\n        ,0.0338635481894016,0.0556614510715008,0.0164240393787622,0.0165059790015221,0.0164197888225317,0.0167112294584513\n        ,0.0193981938064098,0.0205408912152052,0.266567349433899,0.225157037377357,0.0447328165173531,0.0239948108792305,0.258423954248428\n        ,0.141974464058876,0.198101460933685,0.15009517967701,0.264132052659988,0.228737831115723,0.00562358135357499,0.00970039144158363\n        ,0.0523732267320156,0.0809437707066536,0.106471337378025,0.108843788504601,0.0993791148066521,0.143784582614899,0.0121610853821039\n        ,0.0205767769366503,0.214575499296188,0.239684775471687,0.178178697824478,0.195422396063805,0.209848985075951,0.207440286874771\n        ,0.308593571186066,0.263911694288254,0.198621273040771,0.28539165854454,0.192363008856773,0.273256719112396,0.172058612108231\n        ,0.240541025996208,0.148058325052261,0.161714926362038,0.197376787662506,0.176624745130539,0.242707774043083,0.201266199350357\n        ,0.156212627887726,0.18373216688633,0.290508925914764,0.190370336174965,0.324851483106613,0.325155407190323,0.229891330003738\n        ,0.290514171123505,0.135948672890663,0.12972891330719,0.163868829607964,0.158908322453499,0.127753525972366,0.125486969947815\n        ,0.143728271126747,0.15307492017746,0.154907420277596,0.147174850106239,0.0302150081843138,0.0179505366832018,0.0173399485647678\n        ,0.032318964600563,0.0182068049907684,0.0369845628738403,0.0409977771341801,0.0224265139549971,0.02091402746737,0.0367025434970856\n        ,0.0202252976596355,0.0182462017983198,0.0153633151203394,0.0153902797028422,0.00546120433136821,0.00614713365212083\n        ,0.00780274532735348,0.0103121725842357,0.0102445967495441,0.0122391441836953,0.0120558049529791,0.00240382552146912\n        ,0.00261368881911039,0.00308898207731545,0.0035490239970386,0.00399774499237537,0.00459673209115863,0.00458607450127602\n        ,0.121339060366154,0.147182881832123,0.197571039199829,0.26008602976799,0.311032861471176,0.287158697843552,0.273924022912979\n        ,0.239386796951294,0.183864384889603,0.142866030335426,0.197976171970367,0.240400284528732,0.28218087553978,0.320579469203949\n        ,0.322815716266632,0.290193647146225,0.120546653866768,0.222052201628685,0.140751510858536,0.0163820739835501,0.0142385689541698\n        ,0.00542507180944085,0.0115760723128915,0.00221272790804505,0.0023711749818176,0.00282163615338504,0.00317213404923677\n        ,0.00357885169796646,0.00420893495902419,0.00418007094413042,0.00739439064636827,0.00683258147910237,0.132019907236099\n        ,0.191063180565834,0.119362480938435,0.0284428987652063,0.00810533761978149,0.113767258822918,0.038724422454834,0.0212871395051479\n        ,0.00770025048404932,0.00302603910677135,0.00275358185172081,0.0301092397421598,0.0321386978030205,0.0324373990297318\n        ,0.040670283138752,0.0509076714515686,0.0635824501514435,0.0657511055469513,0.0618208535015583,0.0720918327569962\n        ,0.0769494622945786,0.0765324309468269,0.0743149816989899,0.0804609358310699,0.0854995623230934,0.0128151131793857\n        ,0.00777194974943995,0.0344400107860565,0.0195869654417038,0.00954691600054502,0.00379748572595418,0.00346317188814282\n        ,0.0179612133651972,0.0192962810397148,0.0188435316085815,0.0230968538671732,0.0361262373626232,0.0432674884796143\n        ,0.0261948890984058,0.0235383044928312,0.0090101845562458,0.022206012159586,0.00445583695545793,0.00383905950002372\n        ,0.00506020803004503,0.00951316021382809,0.0460106357932091,0.0847913771867752,0.138023719191551,0.131213068962097\n        ,0.166694819927216,0.156544402241707,0.0745199620723724,0.0423311516642571,0.0246866699308157,0.0397612191736698,0.0223495364189148\n        ,0.0114756962284446,0.0221945624798536,0.0110521893948317,0.00496905716136098,0.00389229226857424,0.00643961364403367\n        ,0.0192630626261234,0.0385988131165504,0.0820584818720818,0.112035349011421,0.138285085558891,0.160750851035118,0.158167973160744\n        ,0.170805841684341,0.189076989889145,0.19410303235054,0.177998840808868,0.182540401816368,0.141154646873474,0.0894900858402252\n        ,0.0342159382998943,0.00965154357254505,0.00418656365945935,0.00237840251065791,0.183685347437859,0.062582790851593\n        ,0.118039816617966,0.00520113110542297,0.00584284262731671,0.0112213315442204,0.0201321765780449,0.0286685489118099\n        ,0.00420221220701933,0.00471079163253307,0.0110045308247209,0.0217082388699055,0.0343283303081989,0.204040139913559\n        ,0.189030945301056,0.180175974965096,0.173992961645126,0.168315663933754,0.130297273397446,0.059353269636631,0.0322089642286301\n        ,0.0197652205824852,0.0099091986194253,0.131604447960854,0.14289553463459,0.0357057303190231,0.0209082346409559,0.0171405524015427\n        ,0.0130592565983534,0.191065490245819,0.208427935838699,0.205090165138245,0.00994481611996889,0.00936297792941332\n        ,0.00965779647231102,0.00963758956640959,0.0111713800579309,0.00611869245767593,0.0038256177213043,0.00960911344736815\n        ,0.0110513623803854,0.0102578569203615,0.00362409418448806,0.00338122970424592,0.00906169321388006,0.00970547460019588\n        ,0.00144677876960486,0.00160244794096798,0.00264640781097114,0.00462430063635111,0.0017758650938049,0.00194164353888482\n        ,0.00297714397311211,0.00503711635246873,0.00147938809823245,0.0017682610778138,0.00228582904674113,0.0105864265933633\n        ,0.00957369245588779,0.0102702956646681,0.0098283477127552,0.0924438461661339,0.0143077401444316,0.0122878095135093\n        ,0.133630022406578,0.141978055238724,0.146272510290146,0.160872846841812,0.158548668026924,0.1529251486063,0.143999874591827\n        ,0.14327535033226,0.134030342102051,0.0194255840033293,0.0241993553936481,0.0397681333124638,0.0347787775099278,0.0424629487097263\n        ,0.0764479711651802,0.130649253726006,0.155860245227814,0.130433484911919,0.0997007936239243,0.522098422050476,0.539064466953278\n        ,0.600684404373169,0.564567744731903,0.578698098659515,0.67663186788559,0.613317966461182,0.627128183841705,0.56117171049118\n        ,0.526740491390228,0.587794005870819,0.603702127933502,0.513156652450562,0.501628339290619,0.51724100112915,0.507181763648987\n        ,0.50683331489563,0.510595977306366,0.51329904794693,0.499076575040817,0.498843401670456,0.49879378080368,0.498762190341949\n        ,0.4991694688797,0.512927711009979,0.533550322055817,0.462437272071838,0.407903462648392,0.382052510976791,0.450885593891144\n        ,0.338004499673843,0.430793106555939,0.309323966503143,0.417452901601791,0.298160076141357,0.412941426038742,0.445640444755554\n        ,0.462612688541412,0.43747690320015,0.435000836849213,0.482632666826248,0.488787829875946,0.472163766622543,0.469649881124496\n        ,0.493643283843994,0.488330274820328,0.494619727134705,0.495285451412201,0.459936022758484,0.433365523815155,0.500856637954712\n        ,0.498682528734207,0.484847009181976,0.503007411956787,0.543912529945374,0.606569468975067,0.650449335575104,0.565938055515289\n        ,0.725132644176483,0.606685757637024,0.74704772233963,0.630785703659058,0.585659027099609,0.549062013626099,0.602989912033081\n        ,0.519738018512726,0.509474873542786,0.530255079269409,0.536091029644012,0.514073669910431,0.518159925937653,0.515052437782288\n        ,0.499041229486465,0.49930602312088,0.498829960823059,0.499354362487793,0.531567454338074,0.564122378826141,0.467445582151413\n        ,0.455564588308334,0.383804261684418,0.410712748765945,0.434326201677322,0.338629901409149,0.419354826211929,0.309535533189774\n        ,0.44914898276329,0.467186599969864,0.439384043216705,0.477136939764023,0.492851316928864,0.487034231424332,0.474351823329926\n        ,0.491978049278259,0.495757520198822,0.495674669742584,0.46476948261261,0.43713316321373,0.508034825325012,0.499508380889893\n        ,0.489449739456177,0.571016192436218,0.608602643013,0.687842011451721,0.536954998970032,0.514068126678467,0.374398648738861\n        ,0.40116485953331,0.328352868556976,0.298213601112366,0.291857182979584,0.429039031267166,0.458238869905472,0.498540431261063\n        ,0.501182377338409,0.484154582023621,0.617342472076416,0.740442156791687,0.765326619148254,0.570390999317169,0.534031748771667\n        ,0.402218997478485,0.374190449714661,0.327226936817169,0.297424823045731,0.431489735841751,0.462401211261749,0.508988261222839\n        ,0.499542444944382,0.488626062870026,0.160449832677841,0.156783670186996,0.159524708986282,0.176437810063362,0.177402451634407\n        ,0.303022652864456,0.294236481189728,0.3028225004673,0.17349174618721,0.499316424131393,0.499484270811081,0.861416578292847\n        ,0.912409961223602,0.891903102397919,0.862789690494537,0.725841045379639,0.949873089790344,0.959999978542328,0.790222585201263\n        ,0.706912875175476,0.71718156337738,0.859648823738098,0.808649182319641,0.79305899143219,0.889781832695007,0.894380807876587\n        ,0.959999978542328,0.956703424453735,0.946452438831329,0.980000019073486,0.943891108036041,0.864047408103943,0.82993084192276\n        ,0.696012794971466,0.716923475265503,0.743593811988831,0.734707891941071,0.795767307281494,0.814093708992004,0.702549576759338\n        ,0.740187525749207,0.723242402076721,0.81572687625885,0.738231301307678,0.696267068386078,0.719566822052002,0.922518908977509\n        ,0.90799868106842,0.928278088569641,0.907724499702454,0.723899960517883,0.755184590816498,0.922885239124298,0.768464267253876\n        ,0.936938226222992,0.733437836170197,0.846593260765076,0.749828815460205,0.782762229442596,0.858797311782837,0.865191996097565\n        ,0.780552983283997,0.802658915519714,0.843815445899963,0.85517144203186,0.851339101791382,0.962358355522156,0.959563791751862\n        ,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328\n        ,0.959999978542328,0.959999978542328,0.959999978542328,0.822296917438507,0.837610244750977,0.815930068492889,0.443763226270676\n        ,0.0434230305254459,0.0614212267100811,0.0644745230674744,0.386088460683823,0.699999988079071,0.392738252878189,0.699999988079071\n        ,0.448874175548553,0.014375370927155,0.0140107590705156,0.0121789062395692,0.0883964225649834,0.0934296697378159,0.107252053916454\n        ,0.0872711762785912,0.116611294448376,0.414927542209625,0.519198000431061,0.410463094711304,0.422229081392288,0.699999988079071\n        ,0.515911340713501,0.511167705059052,0.959999978542328,0.959999978542328,0.959999978542328,0.866300702095032,0.821096897125244\n        ,0.863957941532135,0.806740343570709,0.800000011920929,0.894073009490967,0.663112103939056,0.800000011920929,0.800000011920929\n        ,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.802115261554718\n        ,0.896774470806122,0.843385517597198,0.875415921211243,0.820724666118622,0.857815444469452,0.897344946861267,0.955449402332306\n        ,0.690855324268341,0.0965502113103867,0.746420085430145,0.173812687397003,0.150500819087029,0.116230010986328,0.119169160723686\n        ,0.145668879151344,0.156594097614288,0.959999978542328,0.953056275844574,0.924655854701996,0.948967397212982,0.800000011920929\n        ,0.330237716436386,0.299210637807846,0.277687549591064,0.242400661110878,0.254517376422882,0.287185370922089,0.320941507816315\n        ,0.35770645737648,0.365354865789413,0.959999978542328,0.955655336380005,0.915349721908569,0.959999978542328,0.866086006164551\n        ,0.807674944400787,0.851825594902039,0.686647355556488,0.959999978542328,0.94360226392746,0.910253405570984,0.921708941459656\n        ,0.495698720216751,0.477832108736038,0.469940274953842,0.46520921587944,0.464335680007935,0.487537801265717,0.49670997262001\n        ,0.566858947277069,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486\n        ,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.933254480361938,0.954226672649384\n        ,0.997203588485718,0.917994320392609,0.899297475814819,0.901017010211945,0.91645485162735,0.510368406772614,0.00567376147955656\n        ,0.00783961825072765,0.00862109661102295,0.0129706580191851,0.0114124231040478,0.0154891554266214,0.0153114860877395\n        ,0.00997543521225452,0.00986269768327475,0.0140800727531314,0.00998373050242662,0.0988286286592484,0.176372304558754\n        ,0.0798520445823669,0.118268929421902,0.0590761005878448,0.0654688104987144,0.0755378156900406,0.0781648904085159\n        ,0.116748794913292,0.109995000064373,0.0766285732388496,0.133775547146797,0.144544675946236,0.0103117916733027,0.0153879709541798\n        ,0.0144848562777042,0.117053553462029,0.0758993700146675,0.0116922548040748,0.0524738281965256,0.0722815245389938\n        ,0.00605043582618237,0.0100520681589842,0.00665575684979558,0.00875646248459816,0.0561532005667686,0.0707956105470657\n        ,0.132949247956276,0.110543414950371,0.0790862739086151,0.0793771892786026,0.0800021290779114,0.0763092711567879,0.0117054879665375\n        ,0.00873408745974302,0.012912311591208,0.016739085316658,0.0182612165808678,0.0163208656013012,0.0179697703570127\n        ,0.01646638661623,0.0159950032830238,0.0181978512555361,0.0780041739344597,0.0707865208387375,0.0570633821189404,0.0691082701086998\n        ,0.0176486875861883,0.0937477275729179,0.0800698399543762,0.0161298736929893,0.0884751826524735,0.0703100636601448\n        ,0.925126254558563,0.865002751350403,0.818695485591888,0.807025611400604,0.789011359214783,0.777534663677216,0.788373947143555\n        ,0.775901257991791,0.819406390190125,0.906084656715393,0.904069304466248,0.980000019073486,0.950653076171875,0.944453954696655\n        ,0.924925565719604,0.842944860458374,0.785732328891754,0.811322510242462,0.885092079639435,0.980000019073486,0.959999978542328\n        ,0.690811693668365,0.800000011920929,0.699999988079071,0.491733610630035,0.431082755327225,0.301695793867111,0.160689681768417\n        ,0.866851687431335,0.282693952322006,0.396244406700134,0.357076913118362,0.283264219760895,0.487969249486923,0.48589962720871\n        ,0.285435110330582,0.333517074584961,0.360721081495285,0.338640809059143,0.293287128210068,0.585670709609985,0.439837276935577\n        ,0.488081306219101,0.497676163911819,0.509250342845917,0.79224419593811,0.785737931728363,0.814616680145264,0.805732011795044\n        ,0.288319826126099,0.302083253860474,0.547470092773438,0.382642656564713,0.583310306072235,0.627152025699615,0.16984860599041\n        ,0.161324813961983,0.242668092250824,0.194719076156616,0.193076133728027,0.263555347919464,0.924197673797607,0.930089175701141\n        ,0.545478880405426,0.436976879835129,0.312507897615433,0.279589712619781,0.259755164384842,0.257184624671936,0.379078358411789\n        ,0.223878711462021,0.178313493728638,0.185774013400078,0.209724441170692,0.231508731842041,0.489078283309937,0.181608468294144\n        ,0.229795783758163,0.210761219263077,0.130062341690063,0.443184554576874,0.302244246006012,0.156397596001625,0.244913592934608\n        ,0.231316775083542,0.209852263331413,0.214463278651237,0.368181377649307,0.194402411580086,0.146217733621597,0.0835636109113693\n        ,0.499021202325821,0.213828831911087,0.0882539972662926,0.509222984313965,0.159289419651031,0.284890353679657,0.941314816474915\n        ,0.935063123703003,0.943666756153107,0.941324889659882,0.807415008544922,0.83213347196579,0.822709619998932,0.805511653423309\n        ,0.67889791727066,0.705907464027405,0.811904907226563,0.768746256828308,0.769252598285675,0.844982445240021,0.566581130027771\n        ,0.557939112186432,0.498869776725769,0.499205946922302,0.44482946395874,0.499987721443176,0.607680559158325,0.343623101711273\n        ,0.417950123548508,0.500473856925964,0.499595403671265,0.499299347400665,0.49955028295517,0.499799698591232,0.288713306188583\n        ,0.27057296037674,0.313093364238739,0.363294124603271,0.0105788102373481,0.0119627024978399,0.00913762487471104,0.00863190740346909\n        ,0.0167196895927191,0.0136867398396134,0.0129346754401922,0.0155253410339355,0.041066687554121,0.0345800518989563\n        ,0.0700398311018944,0.0779722929000854,0.187142431735992,0.18392226099968,0.151584163308144,0.0362898372113705,0.422039180994034\n        ,0.451437085866928,0.404219388961792,0.463168919086456,0.43609756231308,0.385264873504639,0.4261115193367,0.100049085915089\n        ,0.169540390372276,0.0236841924488544,0.0192988906055689,0.00689365155994892,0.00697705056518316,0.00481623457744718\n        ,0.00500012142583728,0.00159262900706381,0.00495164794847369,0.00587473949417472,0.00218673190101981,0.00557536724954844\n        ,0.00198339577764273,0.00427171634510159,0.00395993422716856,0.00724899023771286,0.0075768306851387,0.00362888071686029\n        ,0.00689652562141418,0.0112851578742266,0.0142028098925948,0.014911531470716,0.0118908761069179,0.00892538111656904\n        ,0.00914312712848186,0.00959681440144777,0.00911114737391472,0.0123588955029845,0.00980997644364834,0.00817553699016571\n        ,0.00812354404479265,0.0385648533701897,0.0368411876261234,0.072588324546814,0.0790384635329247,0.0350004583597183\n        ,0.0725629329681396,0.156130000948906,0.149460017681122,0.179843455553055,0.418746024370193,0.40342652797699,0.422440052032471\n        ,0.460526168346405,0.458358615636826,0.449574530124664,0.468382894992828,0.471038162708282,0.470545202493668,0.467958033084869\n        ,0.460692286491394,0.459357529878616,0.482891708612442,0.465929388999939,0.497931659221649,0.497813880443573,0.424238741397858\n        ,0.43932181596756,0.197344973683357,0.202123180031776,0.169894814491272,0.180889815092087,0.0224198717623949,0.0342224836349487\n        ,0.045203685760498,0.022312106564641,0.0928444340825081,0.0164433289319277,0.0166783984750509,0.0927439257502556,0.00851503014564514\n        ,0.00991012435406446,0.00945863127708435,0.0106856729835272,0.0120738754048944,0.0153764318674803,0.0145045462995768\n        ,0.0097744083032012,0.0110316863283515,0.011228172108531,0.0104443524032831,0.0342458859086037,0.0208848789334297\n        ,0.0129208713769913,0.0238716434687376,0.0135756591334939,0.00637398241087794,0.00917599815875292,0.0111155761405826\n        ,0.00927856750786304,0.0083415349945426,0.00750854006037116,0.00603275885805488,0.00858723465353251,0.00469777034595609\n        ,0.00487428903579712,0.00659612752497196,0.00405896268785,0.0082297483459115,0.0281874220818281,0.0109415305778384\n        ,0.00886029656976461,0.0284117553383112,0.0092842411249876,0.0342590026557446,0.0560368150472641,0.00952684786170721\n        ,0.0863779112696648,0.00806688796728849,0.00389114511199296,0.00306898960843682,0.294876396656036,0.308187693357468\n        ,0.495612591505051,0.496858716011047,0.288310408592224,0.497243225574493,0.498295664787292,0.49911630153656,0.498381614685059\n        ,0.498192936182022,0.499222010374069,0.499349772930145,0.498703926801682,0.499136686325073,0.49921178817749,0.498755186796188\n        ,0.499519914388657,0.499555051326752,0.499421000480652,0.498835802078247,0.180721387267113,0.496883779764175,0.497934907674789\n        ,0.499061793088913,0.498675882816315,0.0102646071463823,0.49796661734581,0.498460471630096,0.129563570022583,0.00909560639411211\n        ,0.0105628436431289,0.0071029276587069,0.0100718205794692,0.00461686495691538,0.0050774859264493,0.00555201712995768\n        ,0.00648870132863522,0.00157895777374506,0.00208959938026965,0.00195883493870497,0.00278144469484687,0.00261728558689356\n        ,0.00434207217767835,0.00259597669355571,0.00188296823762357,0.162212789058685,0.463326036930084,0.437229096889496\n        ,0.0932958349585533,0.0973698645830154,0.032982986420393,0.446509718894959,0.493854820728302,0.255417793989182,0.475229948759079\n        ,0.495688110589981,0.481146574020386,0.497067838907242,0.0132362544536591,0.0880826860666275,0.440971612930298,0.171690061688423\n        ,0.0110826743766665,0.0114450976252556,0.00285618449561298,0.176528409123421,0.00424475502222776,0.0860917866230011\n        ,0.0687148496508598,0.00279257842339575,0.00317180179990828,0.498153626918793,0.498638093471527,0.00624458026140928\n        ,0.497437328100204,0.481990486383438,0.398478388786316,0.397769749164581,0.420945376157761,0.016629746183753,0.156746998429298\n        ,0.150193274021149,0.0260692816227674,0.142986565828323,0.275827318429947,0.265518844127655,0.164150521159172,0.179356217384338\n        ,0.201655998826027,0.155882328748703,0.157176062464714,0.257369130849838,0.292699962854385,0.308371394872665,0.332619607448578\n        ,0.30545511841774,0.346422910690308,0.373265951871872,0.395905733108521,0.33428418636322,0.419889718294144,0.396339476108551\n        ,0.311042726039886,0.251168638467789,0.284843504428864,0.315118014812469,0.288207590579987,0.236284300684929,0.357216745615005\n        ,0.329778403043747,0.292900681495667,0.215388238430023,0.235113203525543,0.177311405539513,0.153885200619698,0.220909103751183\n        ,0.203227922320366,0.290471643209457,0.265276551246643,0.222590640187263,0.382111400365829,0.378728419542313,0.353820085525513\n        ,0.298215985298157,0.32230332493782,0.00384127185679972,0.00470884656533599,0.0104514425620437,0.00500548165291548\n        ,0.00195009738672525,0.00237587676383555,0.00140883540734649,0.00102973112370819,0.00200921390205622,0.018424516543746\n        ,0.00379193644039333,0.00546682765707374,0.00260537373833358,0.00422798423096538,0.00391553714871407,0.00523934373632073\n        ,0.00917614344507456,0.0130695644766092,0.00181645958218724,0.0016190770547837,0.00161480496171862,0.00720509560778737\n        ,0.0033471048809588,0.010807802900672,0.011268611997366,0.0110746510326862,0.0109697869047523,0.00400499766692519\n        ,0.00218103756196797,0.00204763538204134,0.00557699194177985,0.00210049748420715,0.0076933279633522,0.0180913154035807\n        ,0.012464378029108,0.00113955908454955,0.00530168693512678,0.00870633684098721,0.0107687721028924,0.00494451960548759\n        ,0.00292759365402162,0.00259687518700957,0.00461619254201651,0.00104889541398734,0.00255234818905592,0.0124525716528296\n        ,0.0176442191004753,0.00738372420892119,0.00436095427721739,0.00292508560232818,0.00151343178004026,0.0106324488297105\n        ,0.0103887440636754,0.0103587573394179,0.0104789398610592,0.00571152800694108,0.0108468001708388,0.0124202640727162\n        ,0.0108270552009344,0.0154264066368341,0.0271961111575365,0.0281857512891293,0.0520243123173714,0.0335392132401466\n        ,0.0247473139315844,0.0136771816760302,0.014560129493475,0.0181196574121714,0.0251695867627859,0.00895520206540823\n        ,0.0134405633434653,0.00334702897816896,0.00581781379878521,0.00617641629651189,0.0039284210652113,0.00742758205160499\n        ,0.00921225268393755,0.0109213050454855,0.00813751667737961,0.00351928896270692,0.00460217660292983,0.00507055455818772\n        ,0.0222681555896997,0.0214629601687193,0.0244730785489082,0.00889820605516434,0.13249745965004,0.119435474276543,0.105335272848606\n        ,0.498115301132202,0.48156064748764,0.497372984886169,0.112148396670818,0.0752550736069679,0.0404751114547253,0.0515224635601044\n        ,0.346944451332092,0.319727420806885,0.139163225889206,0.825967967510223,0.72717809677124,0.57372260093689,0.499346643686295\n        ,0.499631464481354,0.499337196350098,0.499045014381409,0.498869776725769,0.584369242191315,0.581871628761292,0.704368472099304\n        ,0.828925788402557,0.80715149641037,0.756855845451355,0.799853920936584,0.81432843208313,0.834282636642456,0.724787771701813\n        ,0.729916453361511,0.713068842887878,0.496063411235809,0.479932904243469,0.503707051277161,0.454903155565262,0.344902217388153\n        ,0.38563796877861,0.383142232894897,0.417621582746506,0.367326766252518,0.309257745742798,0.334212064743042,0.3169926404953\n        ,0.355116635560989,0.325188308954239,0.263775318861008,0.228697031736374,0.45619061589241,0.495305687189102,0.498378992080688\n        ,0.90161406993866,0.892532229423523,0.823614180088043,0.58920294046402,0.503884494304657,0.800082147121429,0.787411451339722\n        ,0.705400943756104,0.573275506496429,0.500288963317871,0.495926558971405,0.46147620677948,0.892712831497192,0.876434028148651\n        ,0.794651567935944,0.639523088932037,0.304648637771606,0.192797943949699,0.103648610413074,0.563636004924774,0.693290770053864\n        ,0.77239316701889,0.785526931285858,0.997469186782837,0.997240126132965,0.997250139713287,0.997131943702698,0.996462106704712\n        ,0.996456742286682,0.99651563167572,0.996563136577606,0.996726870536804,0.997069656848907,0.997214317321777,0.997197806835175\n        ,0.918697476387024,0.905072033405304,0.856663286685944,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.774849414825439,0.775606870651245,0.0752632021903992,0.134086862206459,0.108436532318592,0.151968613266945\n        ,0.260086327791214,0.394214272499084,0.462630331516266,0.699999988079071,0.800000011920929,0.800000011920929,0.899999976158142\n        ,0.959999978542328,0.996687591075897,0.980000019073486,0.919819533824921,0.859595537185669,0.83685839176178,0.865764141082764\n        ,0.820731580257416,0.80120724439621\n        Transform: -0.140926346148789,-0.237352328489588,-0.961146982434929,0,-0.955665077054438,-0.220918009829913,0.194677605143504\n        ,0,-0.258541875099369,0.945969867344551,-0.195696175539477,0,18.3954966323429,0.260383799457136,-10.3666111330078\n        ,1\n        TransformLink: -0.140926363663087,-0.955665195824307,-0.258541907230903,0,-0.237352355825338,-0.220918035272932,0.945969976291435\n        ,0,-0.96114709305435,0.194677627549155,-0.195696198062356,0,-7.30962499892272,19.6556066299249,2.48098514166593,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_Spine3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 124,137,138,139,150,170,171,342,343,1740,1790,1791,1793,1794,1795,1796,1797,1798,1799,1818,1819,1820,1847,1848,3422\n        ,3467,3468,3470,3471,3472,3473,3474,3475,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445\n        ,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468\n        ,4469,5303,5304,5307,5308,5309,5310,5311,5312,5313,5314,5317,5319,5350,5351,5365,5366,5367,5368,5369,5370,5371,5372\n        ,5373,5375,5378,5380,5382,5383,5385,5386,5389,5390,5391,5396,5401,5421,5424,5425,5426,5427,5428,5429,5430,5431,5436\n        ,5437,5439,5440,5441,5448,5451,5469,5471,5472,5473,5558,5559,5682,5683,5744,5751,5766,5768,5769,5770,5771,5776,5777\n        ,5778,5779,5780,5782,5783,5784,5785,5802,5803,5804,5808,5809,5811,5813,5814,5816,5817,5818,5820,5821,5822,5824,5832\n        ,5851,5852,5854,5855,5856,5857,5858,5859,5860,5861,5865,5866,5870,5871,5872,5873,5874,5881,5888,5889,5890,5891,5895\n        ,5896,5897,5899,5900,5901,5902,5903,5906,5907,5909,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5924,5925,5926\n        ,5927,5928,5929,5930,5931,5932,5933,5934,5935,5938,5939,5940,5942,5943,5944,5946,5947,5948,5949,5950,5951,5952,5953\n        ,5954,5955,5956,5957,5958,6496,6497,9959,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9981,9982,9983,9991\n        ,9992,9993,9997,9998,10006,10007,10008,10010,10013,10014,10015,10016,10017,10018,10019,10021,10022,10029,10030,10031\n        ,10039,10043,10048,10049,10051,10054,10055,10060,10061,10062,10063,10064,10065,10066,10067,10068,10070,10071,10072\n        ,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10090,10091\n        ,10092,10093,10094,10095,10096,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110\n        ,10111,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125,10126,10127,10128,10129\n        ,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148\n        ,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167\n        ,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10186,10187\n        ,10188,10189,10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200,10201,10202,10203,10204,10205,10206\n        ,10207,10208,10209,10211,10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226\n        ,10227,10228,10229,10230,10231,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246\n        ,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10270,10271,10272,10273\n        ,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10298,10299,10300\n        ,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10321,10324,10326,10328,10329\n        ,10330,10331,10332,10333,10334,10335,10336,10337,10338,10339,10362,10363,10364,10365,10366,10367,10368,10369,10370\n        ,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389\n        ,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407,10409\n        ,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428\n        ,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447\n        ,10449,10450,10451,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10464,10465,10466,10467,10468,10469\n        ,10470,10471,10472,10473,10474,10475,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10490,10491,10492\n        ,10493,10494,10495,10496,10497,10499,10500,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517\n        ,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536\n        ,10537,10538,10539,10540,10541,10542,10543,10544,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555\n        ,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10569,10570,10571,10572,10573,10574\n        ,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586,10587,10588,10589,10590,10591,10592,10593\n        ,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612\n        ,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10626,10627,10628,10629,10630,10631,10632\n        ,10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648,10649,10650,10651\n        ,10653,10654,10655,10656,10657,10658,10659,10660,10661,10662,10663,10664,10665,10666,10667,10668,10670,10671,10672\n        ,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691\n        ,10692,10693,10694,10695,10696,10705,10706,10707,10708,10709,10710,10711,10712,10713,10714,10715,10716,10717,10718\n        ,10719,10720,10721,10722,10723,10724,10733,10734,10735,10738,10739,10740,10741,10742,10743,10746,10747,10748,10749\n        ,10750,10751,10754,10755,10756,10758,10761,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772,10791\n        ,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810\n        ,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829\n        ,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844,10845,10846,10847,10848\n        ,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867\n        ,10868,10869,10870,10871,10872,10873,10874,10875,10876,10878,10879,10880,10881,10882,10883,10884,10885,10886,10887\n        ,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906\n        ,10907,10908,10909,10910,10911,10912,10914,10923,10924,10925,10926,10929,10930,10931,10932,10937,10938,10939,10940\n        ,10941,10955,10956,10957,10964,10965,11009,11027,11028,11044,11045,11052,11053,11054,11055,11056,11060,11061,11062\n        ,11063,11064,11087,11088,11089,11090,11091,11097,11098,11099,11102,11112,11113,11129,11130,11138,11139,11140,11141\n        ,11142,11146,11147,11148,11149,11150,11172,11173,11174,11175,11176,11182,11183,11184,11187\n        Weights: 0.75,0.085762232542038,0.104128152132034,0.106781028211117,0.124402061104774,0.102938070893288,0.172302529215813,0.111800543963909\n        ,0.103759080171585,0.115088522434235,0.12423200905323,0.095378540456295,0.110840901732445,0.117616847157478,0.118899755179882\n        ,0.0713480859994888,0.0956620201468468,0.242636173963547,0.12423200905323,0.107998006045818,0.0882430002093315,0.0698882415890694\n        ,0.0566199608147144,0.0645465701818466,0.11211734265089,0.0914984792470932,0.151150241494179,0.192090138792992,0.12276616692543\n        ,0.118340142071247,0.101025715470314,0.0772408172488213,0.0512937009334564,0.461652457714081,0.459554940462112,0.459844648838043\n        ,0.462225466966629,0.472784638404846,0.467772513628006,0.487117677927017,0.534648895263672,0.575068235397339,0.57318240404129\n        ,0.604590594768524,0.600727379322052,0.601162910461426,0.596206903457642,0.60578978061676,0.603663563728333,0.575768530368805\n        ,0.535132348537445,0.701581835746765,0.545263409614563,0.591261208057404,0.661754131317139,0.658437669277191,0.536858856678009\n        ,0.575587630271912,0.602665722370148,0.597706258296967,0.602555274963379,0.604955315589905,0.607475936412811,0.578075408935547\n        ,0.537131786346436,0.612353384494781,0.661225914955139,0.606588125228882,0.577766060829163,0.53724068403244,0.586965978145599\n        ,0.661505222320557,0.465115785598755,0.452530950307846,0.277101397514343,0.0386030152440071,0.452400863170624,0.288399666547775\n        ,0.434900224208832,0.422080427408218,0.44364920258522,0.422790855169296,0.18050417304039,0.482322633266449,0.282486408948898\n        ,0.390942275524139,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n        ,0.38839054107666,0.387968569993973,0.359195381402969,0.899999976158142,0.0431111082434654,0.399808496236801,0.424760729074478\n        ,0.399594306945801,0.047169242054224,0.294629603624344,0.446909070014954,0.293749272823334,0.42409160733223,0.666466772556305\n        ,0.419387340545654,0.600000023841858,0.5,0.436221748590469,0.392474800348282,0.383285969495773,0.337732255458832,0.344708532094955\n        ,0.41933611035347,0.432212859392166,0.266951441764832,0.600000023841858,0.32977768778801,0.252586364746094,0.253333956003189\n        ,0.899999976158142,0.499777913093567,0.173275351524353,0.5,0.5,0.600000023841858,0.175833567976952,0.18368735909462\n        ,0.203715935349464,0.207051545381546,0.600000023841858,0.0095208901911974,0.0478370748460293,1,0.12961608171463,0.134921371936798\n        ,1,0.0517776012420654,0.110316768288612,0.0806061327457428,0.0495592057704926,0.150415286421776,0.759846448898315\n        ,0.294901102781296,0.429294049739838,0.861581206321716,0.390059977769852,0.387282431125641,0.380919307470322,0.0594810396432877\n        ,0.0504821762442589,0.400211721658707,0.425702005624771,0.399597972631454,0.046536035835743,0.295834451913834,0.75\n        ,0.446447640657425,0.292811393737793,0.423771739006042,0.124108269810677,0.415361732244492,0.600000023841858,0.254057466983795\n        ,0.600000023841858,0.435669839382172,0.42539370059967,0.413400411605835,0.411728411912918,0.418673723936081,0.417498052120209\n        ,0.43069788813591,1,0.264593541622162,0.248868077993393,0.250652760267258,0.134869754314423,0.5,0.5,0.418447643518448\n        ,0.600000023841858,0.699999988079071,0.600000023841858,0.0485693663358688,0.5,0.5,0.699999988079071,0.174534395337105\n        ,1,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.5,0.5,0.5,0.600000023841858,0.5,0.5,0.5,0.5,0.600000023841858\n        ,0.5,0.600000023841858,0.5,0.5,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.5\n        ,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.0141789242625237,0.0153731536120176\n        ,0.00258106738328934,0.0111873541027308,0.012540147639811,0.0160985831171274,0.0158132258802652,0.0117630818858743\n        ,0.0171353444457054,0.0132416011765599,0.0101168863475323,0.00587683590129018,0.00939620938152075,0.00872862990945578\n        ,0.0169561989605427,0.0363818965852261,0.0223651211708784,0.0398627892136574,0.0235235225409269,0.0233923010528088\n        ,0.0204265173524618,0.020949138328433,0.00725673837587237,0.0112239895388484,0.0089893639087677,0.00827483367174864\n        ,0.0159890446811914,0.0124049074947834,0.0115596614778042,0.00993351172655821,0.0130593748763204,0.0169641263782978\n        ,0.00573462061583996,0.0085513973608613,0.00921071413904428,0.0167909264564514,0.0222052801400423,0.0363022610545158\n        ,0.023268872871995,0.0203311648219824,0.0110470624640584,0.00882083363831043,0.00814381148666143,0.957538247108459\n        ,0.958540797233582,0.956538259983063,0.959350943565369,0.961500287055969,0.959985792636871,0.947338461875916,0.953540086746216\n        ,0.955336928367615,0.75,0.75,0.75,0.75,0.75,0.75,0.955077111721039,0.956288516521454,0.961606383323669,0.958412051200867\n        ,0.957542419433594,0.959802865982056,0.95624041557312,0.959717214107513,0.957168877124786,0.939900994300842,0.829129636287689\n        ,0.879289329051971,0.880010366439819,0.959395170211792,0.95811003446579,0.959861755371094,0.959268689155579,0.899999976158142\n        ,0.899999976158142,0.785349428653717,0.957476377487183,0.899999976158142,0.899999976158142,0.95319277048111,0.953531563282013\n        ,0.876276314258575,0.953178107738495,0.956213295459747,0.956434607505798,0.800000011920929,0.800000011920929,0.699999988079071\n        ,0.699999988079071,0.953248918056488,0.95462441444397,0.951935470104218,0.923011600971222,0.959479689598084,0.961464405059814\n        ,0.961166799068451,0.958817422389984,0.961436033248901,0.961288571357727,0.960675239562988,0.887319087982178,0.720000028610229\n        ,0.75,0.899999976158142,0.800000011920929,0.720578551292419,0.800000011920929,0.850000023841858,0.899999976158142\n        ,0.828785061836243,0.776359677314758,0.764668464660645,0.772647380828857,0.765205442905426,0.763894855976105,0.958999872207642\n        ,0.75,0.75,0.75,1,1,0.800000011920929,0.894429683685303,0.894518375396729,0.895675539970398,0.922911643981934,0.730348885059357\n        ,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75\n        ,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.00808052811771631,0.00695882085710764,0.75,0.75,0.00667890813201666,0.75\n        ,0.0041200197301805,0.75,0.75,0.827726483345032,0.736065030097961,0.75,0.75,0.95705246925354,0.951984941959381,0.910732209682465\n        ,0.767530143260956,0.75,0.955445647239685,0.956634402275085,0.961577653884888,0.957822620868683,0.971852004528046\n        ,0.946243524551392,0.960978269577026,0.955973863601685,0.951422214508057,0.957989037036896,0.899999976158142,0.0939868167042732\n        ,0.095717616379261,0.959257662296295,0.5,0.75,0.75,0.75,0.75,0.878020882606506,0.75,0.5,0.75,0.5,0.5,0.5,0.5,0.75\n        ,0.0198027025908232,0.0300513803958893,0.763302564620972,0.75,0.75,0.00716592743992805,0.0123920850455761,0.768499076366425\n        ,0.959338009357452,0.959072470664978,0.958411872386932,0.955592691898346,0.947930335998535,0.95901894569397,0.0324273779988289\n        ,0.764417946338654,0.75,0.75,0.75,0.720000028610229,0.720000028610229,0.899999976158142,0.96061372756958,0.699999988079071\n        ,0.5,0.75,0.75,0.75,0.75,0.959779322147369,0.955917954444885,0.960276246070862,0.956004500389099,0.958375811576843\n        ,0.952684044837952,0.959409594535828,0.960889339447021,0.953610301017761,0.957848727703094,0.95908397436142,0.959031164646149\n        ,0.968548119068146,0.232526525855064,0.75,0.00976004730910063,0.95672219991684,0.951477289199829,0.948371946811676\n        ,0.952519536018372,0.949735760688782,0.952434301376343,0.75,0.75,0.75,0.961228728294373,0.75,0.959927022457123,0.957871973514557\n        ,0.961668848991394,0.961422979831696,0.954932510852814,0.955667316913605,0.9588942527771,0.957856237888336,0.960132479667664\n        ,0.961470305919647,0.954107403755188,0.958635985851288,0.878364622592926,0.879140973091125,0.879786968231201,0.87715870141983\n        ,0.961276412010193,0.960936665534973,0.085561029613018,0.0822171941399574,0.0838226974010468,0.0859100669622421,0.959669351577759\n        ,0.959876298904419,0.960931241512299,0.959267258644104,0.957055270671844,0.959008812904358,0.956428945064545,0.954533338546753\n        ,0.958473145961761,0.94888299703598,0.75,0.0896205604076386,0.0906806141138077,0.0920000523328781,0.0904827415943146\n        ,0.955279529094696,0.95048451423645,0.946091711521149,0.951888501644135,0.928969323635101,0.952318787574768,0.93002837896347\n        ,0.949014604091644,0.954181551933289,0.952441871166229,0.954520225524902,0.956952750682831,0.957884430885315,0.881032288074493\n        ,0.879364728927612,0.878738582134247,0.789911925792694,0.789941310882568,0.75,0.75,0.720000028610229,0.720000028610229\n        ,0.699999988079071,0.699999988079071,0.850000023841858,0.850000023841858,0.800000011920929,0.800000011920929,0.957197785377502\n        ,0.953077971935272,0.939027428627014,0.835327625274658,0.833593666553497,0.0943752005696297,0.0944032445549965,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.850000023841858,0.699999988079071,0.699999988079071\n        ,0.0682986751198769,0.0714335814118385,0.789074778556824,0.0760513916611671,0.0947359576821327,0.954803109169006,0.956382870674133\n        ,0.720000028610229,0.75,0.954493045806885,0.948985457420349,0.78932797908783,0.789512395858765,0.699999988079071,0.850000023841858\n        ,0.800000011920929,0.959878921508789,0.959619164466858,0.94746595621109,0.93335372209549,0.951277136802673,0.923790335655212\n        ,0.881081640720367,0.958416938781738,0.834649443626404,0.836609840393066,0.956299424171448,0.881010353565216,0.836093723773956\n        ,0.880341291427612,0.834789097309113,0.878566384315491,0.899624884128571,0.899553835391998,0.899523794651031,0.899480938911438\n        ,0.850000023841858,0.960817873477936,0.768886864185333,0.790004849433899,0.899999976158142,0.75,0.960687756538391\n        ,0.959923565387726,0.75,0.899999976158142,0.899999976158142,0.960811078548431,0.899999976158142,0.0961230620741844\n        ,0.0984849631786346,0.899999976158142,0.959491372108459,0.75,0.0948158726096153,0.0950082242488861,0.700767397880554\n        ,0.0730230212211609,0.0979870334267616,0.0872775539755821,0.087272122502327,0.0866196677088737,0.0942397788167,0.959409654140472\n        ,0.961271166801453,0.961122095584869,0.957583010196686,0.95744389295578,0.956457555294037,0.944807946681976,0.75,0.75\n        ,0.75,0.75,0.899999976158142,0.899999976158142,0.899999976158142,0.0906759724020958,0.0903674736618996,0.0961243137717247\n        ,0.0936058834195137,0.938084781169891,0.93389755487442,0.950093328952789,0.955193758010864,0.955569982528687,0.954447031021118\n        ,0.962438106536865,0.949910342693329,0.966332674026489,0.75,0.75,0.75,0.75,0.75,0.941100180149078,0.935536861419678\n        ,0.953422069549561,0.960933566093445,0.951039493083954,0.939891397953033,0.950097799301147,0.949685275554657,0.959550976753235\n        ,0.964796185493469,0.880356311798096,0.865171313285828,0.91388601064682,0.938835144042969,0.957113146781921,0.943677246570587\n        ,0.877648413181305,0.928777635097504,0.785357356071472,0.899999976158142,0.957551598548889,0.958083152770996,0.899999976158142\n        ,0.86806857585907,0.948952913284302,0.920421719551086,0.899999976158142,0.850000023841858,0.75,0.75,0.850000023841858\n        ,0.945503354072571,0.916061341762543,0.953746795654297,0.957053661346436,0.951983451843262,0.95653110742569,0.959425270557404\n        ,0.950447499752045,0.957255899906158,0.954313933849335,0.950628340244293,0.950628101825714,0.699999988079071,0.800000011920929\n        ,0.899999976158142,0.800000011920929,0.810391426086426,0.899999976158142,0.850000023841858,0.850000023841858,0.830171585083008\n        ,0.764804065227509,0.75,0.763968825340271,0.921127438545227,1,0.75,1,1,1,1,1,0.800000011920929,1,0.931986749172211\n        ,1,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75\n        ,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.00678260065615177,0.00734655186533928,0.75,0.75,0.0065109939314425\n        ,0.75,0.00402423506602645,0.75,0.822583794593811,1,0.75,0.75,0.955177187919617,0.96015864610672,0.864858448505402\n        ,0.767907500267029,0.75,0.959308981895447,0.959520757198334,0.959039568901062,0.95704460144043,0.952542364597321,0.978068172931671\n        ,0.956893384456635,0.95896989107132,0.904391825199127,0.877550303936005,0.914088070392609,0.959565460681915,0.945497035980225\n        ,0.092599019408226,0.5,0.75,0.75,0.75,0.75,0.879189491271973,0.75,0.5,0.75,0.5,0.5,0.75,0.76336532831192,0.0300193205475807\n        ,0.0197536144405603,0.75,0.0123153384774923,0.00709361396729946,0.75,0.76811808347702,0.925329804420471,0.938286542892456\n        ,0.923435568809509,0.864238500595093,0.915386140346527,0.899999976158142,0.75,0.800000011920929,0.699999988079071\n        ,0.699999988079071,0.800000011920929,0.825247704982758,0.884745538234711,0.75,0.75,0.75,0.75,0.75,0.952121734619141\n        ,0.94670158624649,0.93092143535614,0.924777686595917,0.953759908676147,0.936432063579559,0.946027040481567,0.947521567344666\n        ,0.850173532962799,0.903109967708588,0.873982906341553,0.809221684932709,0.75,0.75,0.0102625312283635,0.75,0.942292749881744\n        ,0.877478003501892,0.942061126232147,0.941333055496216,0.943734705448151,0.943852305412292,0.75,0.75,0.75,0.93719083070755\n        ,0.90915858745575,0.75,0.957259058952332,0.953966915607452,0.959854364395142,0.934671580791473,0.951683163642883,0.959149658679962\n        ,0.959299862384796,0.965592980384827,0.75,0.947899401187897,0.957156240940094,0.947200894355774,0.944532811641693\n        ,0.946368992328644,0.781483590602875,0.960373640060425,0.956585705280304,0.0811243206262589,0.0857763141393662,0.0867564678192139\n        ,0.957601070404053,0.958110451698303,0.960652112960815,0.956212997436523,0.950175523757935,0.953033983707428,0.95390248298645\n        ,0.952684342861176,0.947774291038513,0.925760209560394,0.75,0.0890278890728951,0.0842892453074455,0.0817965343594551\n        ,0.0742781460285187,0.95094621181488,0.948776364326477,0.940522849559784,0.936695992946625,0.931431770324707,0.918804049491882\n        ,0.813201665878296,0.8664271235466,0.84716135263443,0.801027417182922,0.88867199420929,0.931282520294189,0.780009210109711\n        ,0.946900606155396,0.946670413017273,0.947484314441681,0.840196132659912,0.800000011920929,0.800000011920929,0.839022636413574\n        ,0.699999988079071,0.699999988079071,0.75,0.75,0.899999976158142,0.850000023841858,0.850000023841858,0.899999976158142\n        ,0.954739928245544,0.938593447208405,0.883178055286407,0.882882356643677,0.886038482189178,0.899999976158142,0.899999976158142\n        ,0.07585559040308,0.074390210211277,0.09121323376894,0.087418220937252,0.0914874374866486,0.899999976158142,0.081835925579071\n        ,0.0858589857816696,0.0672509297728539,0.0721054747700691,0.720495045185089,0.838570237159729,0.765313267707825,0.899999976158142\n        ,0.933104932308197,0.93582159280777,0.800000011920929,0.699999988079071,0.799659550189972,0.821321725845337,0.838018119335175\n        ,0.837090969085693,0.75,0.850000023841858,0.899999976158142,0.889135122299194,0.92995673418045,0.931536793708801,0.890445470809937\n        ,0.941257774829865,0.887241840362549,0.779425501823425,0.945341825485229,0.88369619846344,0.884203732013702,0.950628221035004\n        ,0.949951648712158,0.883653819561005,0.947980403900146,0.885260403156281,0.942782938480377,0.810312032699585,0.899999976158142\n        ,0.899999976158142,0.899999976158142,0.952167749404907,0.768492162227631,0.840166389942169,0.899999976158142,0.75\n        ,0.75,0.960485398769379,0.959158957004547,0.956989228725433,0.960198104381561,0.960046768188477,0.899999976158142\n        ,0.0983112379908562,0.0983274206519127,0.899999976158142,0.0946391001343727,0.960810780525208,0.0736546814441681,0.0791008844971657\n        ,0.0774789527058601,0.0683221891522408,0.081981897354126,0.0948949903249741,0.0952887535095215,0.899999976158142,0.0700687915086746\n        ,0.0828381180763245,0.0923292860388756,0.0757671371102333,0.0929875746369362,0.0933984667062759,0.0961728468537331\n        ,0.0964640229940414,0.0112190824002028,0.00527462316676974,0.00599608197808266,0.0109401093795896,0.00660790223628283\n        ,0.0231660008430481,0.0244253613054752,0.0114240096881986,0.0173866599798203,0.0214097537100315,0.0169858019798994\n        ,0.0169140622019768,0.0216232407838106,0.00598987704142928,0.0052340873517096,0.0111760459840298,0.0109166782349348\n        ,0.00654197158291936,0.0231000576168299,0.011360595934093,0.0173457507044077,0.0206026155501604,0.0168101955205202\n        ,0.0168885830789804,0.00280827027745545,0.00316052138805389,0.00436065997928381,0.00599541608244181,0.00596329383552074\n        ,0.00793657638132572,0.00531561719253659,0.00536487251520157,0.0040706223808229,0.00725838495418429,0.00932312104851007\n        ,0.00662264693528414,0.00651014456525445,0.00529910530894995,0.0042096390388906,0.00354334083385766,0.0051647606305778\n        ,0.00899781100451946,0.00610579364001751,0.00418041413649917,0.0040243323892355,0.00287933833897114,0.0038571204058826\n        ,0.00323691987432539,0.00287965033203363,0.00544132199138403,0.00374313560314476,0.00607317546382546,0.00863313768059015\n        ,0.00544475764036179,0.0054993792437017,0.00417273631319404,0.00950081180781126,0.0074219973757863,0.00667169876396656\n        ,0.00679259700700641,0.00543491076678038,0.00430912571027875,0.00528056034818292,0.00363293150439858,0.00623954366892576\n        ,0.00917037390172482,0.00430067488923669,0.0041407230310142,0.00296174036338925,0.0039620166644454\n        Transform: 0.0267456942762977,0.0695652391424119,0.997218802892724,0,0.997222072389479,0.0675171332746874,-0.0314557301666788\n        ,0,-0.0695175802535841,0.995289909860946,-0.0675662066985298,0,-54.631121365628,-3.20257583373608,1.65094438652875\n        ,1\n        TransformLink: 0.0267456972775019,0.997222184290371,-0.0695175880543334,0,0.0695652467630354,0.0675171406709482,0.995290018891401\n        ,0,0.997218806791107,-0.0314557302896473,-0.0675662069626633,0,0.0375826209140644,54.7475266028855,-0.498783977877638\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ankle1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904\n        ,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927\n        ,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950\n        ,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973\n        ,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996\n        ,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019\n        ,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042\n        ,4043,4044,4045,4046,4047,4048,4049,4050,4051,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547\n        ,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570\n        ,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593\n        ,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616\n        ,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639\n        ,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662\n        ,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685\n        ,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708\n        ,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731\n        ,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754\n        ,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777\n        ,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800\n        ,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823\n        ,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846\n        ,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869\n        ,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892\n        ,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915\n        ,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938\n        ,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961\n        ,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984\n        ,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007\n        ,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030\n        ,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053\n        ,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076\n        ,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099\n        ,9100,9101,9102,9104,9105,9111,9113,9115,9116,9118,9119,9124,9126,9127,9134,9135,9136,9137,9138,9139,9140,9141,9142\n        ,9143,9144,9147,9148,9149,9150,9151,9152,9154,9157,9162,9164,9168,9174,9175,9181,9182,9183,9184,9185,9196,9197,9198\n        ,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244\n        ,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267\n        ,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290\n        ,9291,9292,9293,9303,9308,9325,9327,9328,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346\n        ,9347,9348,9349,9354,9355,9356,9357,9360,9369,9370,9371,9372,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393\n        ,9394,9395,9396,9397,9398,9399,9400,9402,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421\n        ,9422,9423,9440,9441,9452,9453,9458,9460,9464,9466,9467,9468,9469,9473,9482,9483,9484,9485,9521,9524,9539,9541,9554\n        ,9555,9601,9632,9644,9645,9646,9647,9648,9654,9661,9783,9790,9792,9794,9795,9806,9814,9818,9819,9820,9821,9822,9823\n        ,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9901,9902,9903\n        ,9904,9905,9906,9907,9908,9909,9910,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926\n        Weights: 0.662252962589264,0.716935575008392,0.720179736614227,0.670780777931213,0.768863677978516,0.774946868419647,0.802139163017273\n        ,0.824174582958221,0.820186018943787,0.858241260051727,0.720582842826843,0.775384962558746,0.786859512329102,0.723640918731689\n        ,0.824556350708008,0.845559477806091,0.864950239658356,0.892545998096466,0.704158782958984,0.673352599143982,0.687313973903656\n        ,0.740170121192932,0.78624027967453,0.82932311296463,0.655422866344452,0.613076150417328,0.675190806388855,0.847468376159668\n        ,0.804767429828644,0.820174694061279,0.857121586799622,0.860617458820343,0.874466836452484,0.871271193027496,0.831805944442749\n        ,0.863919794559479,0.877875924110413,0.891996264457703,0.874595880508423,0.893714904785156,0.872262895107269,0.83377343416214\n        ,0.84788590669632,0.80837094783783,0.801326990127563,0.854566514492035,0.841355443000793,0.822431445121765,0.712380409240723\n        ,0.786515653133392,0.800219178199768,0.710730135440826,0.74511331319809,0.824387609958649,0.664935171604156,0.653990149497986\n        ,0.642671227455139,0.6425661444664,0.597245275974274,0.596463561058044,0.635055124759674,0.631588757038116,0.571098744869232\n        ,0.664387047290802,0.568991899490356,0.701522052288055,0.579633116722107,0.650809466838837,0.675891995429993,0.679120242595673\n        ,0.64745831489563,0.736279428005219,0.682271540164948,0.795476019382477,0.722612321376801,0.635961771011353,0.586889326572418\n        ,0.643270611763,0.663508534431458,0.7317253947258,0.717524886131287,0.781114041805267,0.785607278347015,0.624738037586212\n        ,0.718818366527557,0.584580779075623,0.696781635284424,0.792071640491486,0.740076243877411,0.78708153963089,0.82867842912674\n        ,0.716916739940643,0.780235946178436,0.794581592082977,0.821326792240143,0.702947616577148,0.782789766788483,0.716075003147125\n        ,0.797236800193787,0.646848678588867,0.581979751586914,0.590038537979126,0.59087860584259,0.695394396781921,0.688918888568878\n        ,0.726925373077393,0.751364767551422,0.784846127033234,0.815278291702271,0.836895823478699,0.85580587387085,0.879223763942719\n        ,0.880212366580963,0.635002911090851,0.610837399959564,0.835834264755249,0.842389523983002,0.89502215385437,0.889481902122498\n        ,0.909801483154297,0.899769723415375,0.888761699199677,0.883025705814362,0.768488585948944,0.736176431179047,0.620154917240143\n        ,0.61918431520462,0.584584772586823,0.582186162471771,0.599543333053589,0.606371879577637,0.602085590362549,0.759392023086548\n        ,0.743354380130768,0.641951978206635,0.607505738735199,0.743978083133698,0.7264643907547,0.724829494953156,0.66710889339447\n        ,0.777875006198883,0.809260308742523,0.826838612556458,0.597754776477814,0.592020213603973,0.579893112182617,0.613420307636261\n        ,0.810257375240326,0.855723738670349,0.869342446327209,0.83930629491806,0.744189202785492,0.710318505764008,0.721735775470734\n        ,0.69486540555954,0.59639298915863,0.595895648002625,0.567268490791321,0.562873125076294,0.570796370506287,0.581473410129547\n        ,0.586230039596558,0.716825127601624,0.730502545833588,0.619070827960968,0.576398611068726,0.713853776454926,0.700119316577911\n        ,0.579771995544434,0.69603168964386,0.687131941318512,0.587622165679932,0.59562212228775,0.638310849666595,0.495868265628815\n        ,0.504656076431274,0.682099580764771,0.62079256772995,0.619129598140717,0.637898862361908,0.685304403305054,0.392854332923889\n        ,0.545557498931885,0.499303996562958,0.497860908508301,0.481977909803391,0.191958338022232,0.193772777915001,0.167935505509377\n        ,0.176776140928268,0.69019490480423,0.678784191608429,0.433016240596771,0.604192554950714,0.417342305183411,0.372644573450089\n        ,0.808385014533997,0.811666429042816,0.736336946487427,0.764354586601257,0.717962324619293,0.66310316324234,0.0796902030706406\n        ,0.0722345486283302,0.453533738851547,0.546529531478882,0.583387970924377,0.59502637386322,0.581080198287964,0.584292113780975\n        ,0.547285854816437,0.671297550201416,0.709093928337097,0.697784125804901,0.773432612419128,0.701103806495667,0.500118792057037\n        ,0.806355118751526,0.760442793369293,0.784082531929016,0.840699017047882,0.544453740119934,0.655303418636322,0.774261713027954\n        ,0.620487987995148,0.650266408920288,0.633479595184326,0.626469314098358,0.571754097938538,0.715693593025208,0.76426762342453\n        ,0.898551404476166,0.499102562665939,0.779566049575806,0.8974888920784,0.490139544010162,0.744280457496643,0.576716959476471\n        ,0.120298206806183,0.0609138756990433,0.0686163753271103,0.0585639476776123,0.0609014816582203,0.173864901065826,0.151549980044365\n        ,0.160618603229523,0.179077684879303,0.311770230531693,0.289250820875168,0.182548344135284,0.220449775457382,0.232918500900269\n        ,0.1557277739048,0.429737746715546,0.436085075139999,0.498938947916031,0.499213874340057,0.545559585094452,0.498984545469284\n        ,0.392706125974655,0.638633489608765,0.568391859531403,0.498944014310837,0.499541968107224,0.499347507953644,0.499558687210083\n        ,0.499784559011459,0.506308078765869,0.488025993108749,0.471090734004974,0.489009350538254,0.494769752025604,0.494105905294418\n        ,0.495395541191101,0.495655655860901,0.492070853710175,0.493543356657028,0.493890047073364,0.492632776498795,0.52510541677475\n        ,0.503865361213684,0.547393321990967,0.578731000423431,0.578221321105957,0.604531288146973,0.666337788105011,0.618531048297882\n        ,0.458945125341415,0.467843025922775,0.495702832937241,0.471826136112213,0.463245213031769,0.499710947275162,0.503833949565887\n        ,0.741899967193604,0.669493854045868,0.639782190322876,0.693806409835815,0.580596685409546,0.528206884860992,0.497483104467392\n        ,0.497408628463745,0.504603862762451,0.648581326007843,0.624427199363709,0.502325057983398,0.590632736682892,0.498883485794067\n        ,0.497773230075836,0.497934967279434,0.496349453926086,0.496178597211838,0.498113840818405,0.49652174115181,0.494703501462936\n        ,0.493292182683945,0.493460863828659,0.494420170783997,0.495708435773849,0.49569571018219,0.495479911565781,0.495618104934692\n        ,0.494955003261566,0.495421648025513,0.496160745620728,0.496107131242752,0.544339060783386,0.529735803604126,0.589485824108124\n        ,0.60707688331604,0.549736261367798,0.633057951927185,0.630938470363617,0.64998871088028,0.615624070167542,0.498127013444901\n        ,0.500028312206268,0.501803278923035,0.473483175039291,0.478267163038254,0.471729397773743,0.478772342205048,0.475807130336761\n        ,0.478105336427689,0.482067912817001,0.472987681627274,0.476543188095093,0.483400821685791,0.498663365840912,0.49783006310463\n        ,0.497768074274063,0.506945431232452,0.505904972553253,0.742265939712524,0.777076601982117,0.709838807582855,0.723995983600616\n        ,0.920427918434143,0.92652815580368,0.908109724521637,0.886519014835358,0.750078618526459,0.70175689458847,0.739742457866669\n        ,0.779259204864502,0.495814889669418,0.495124042034149,0.495348423719406,0.525247037410736,0.501540124416351,0.515422761440277\n        ,0.54307609796524,0.49530503153801,0.494781821966171,0.494671732187271,0.494987636804581,0.654774129390717,0.76426112651825\n        ,0.695192337036133,0.628502249717712,0.855615854263306,0.789036810398102,0.495361059904099,0.494524925947189,0.495436549186707\n        ,0.495757460594177,0.496141195297241,0.496870189905167,0.495664089918137,0.613348126411438,0.550544440746307,0.569208562374115\n        ,0.592481851577759,0.674045324325562,0.953721344470978,0.98089611530304,0.796355009078979,0.962789952754974,0.862315773963928\n        ,0.959008634090424,0.931809902191162,0.882491052150726,0.883577704429626,0.551375806331635,0.618872940540314,0.838439345359802\n        ,0.677922546863556,0.655788064002991,0.495860993862152,0.497062891721725,0.687699973583221,0.497428089380264,0.498450934886932\n        ,0.4991714656353,0.498457342386246,0.498275578022003,0.499232739210129,0.499325484037399,0.498723983764648,0.499112755060196\n        ,0.499192982912064,0.498770505189896,0.499476730823517,0.499507606029511,0.499369323253632,0.498765498399735,0.801122665405273\n        ,0.497004777193069,0.498025625944138,0.499035775661469,0.498643934726715,0.494946539402008,0.498003214597702,0.498488068580627\n        ,0.812527358531952,0.497725337743759,0.495063692331314,0.505264818668365,0.495184719562531,0.516481697559357,0.507335722446442\n        ,0.497387260198593,0.507205486297607,0.499118983745575,0.498842120170593,0.498915076255798,0.498471945524216,0.498567849397659\n        ,0.497722923755646,0.498795121908188,0.499147802591324,0.820494115352631,0.46927735209465,0.459739953279495,0.73817503452301\n        ,0.774010121822357,0.577046036720276,0.497711896896362,0.494165003299713,0.633301734924316,0.47880819439888,0.495833784341812\n        ,0.48139351606369,0.497110813856125,0.76469612121582,0.795858263969421,0.506770610809326,0.73978990316391,0.494763672351837\n        ,0.494477927684784,0.500276744365692,0.70234751701355,0.49773570895195,0.690812289714813,0.861847698688507,0.498591303825378\n        ,0.799018800258636,0.498167306184769,0.498650819063187,0.5091193318367,0.497448414564133,0.482101559638977,0.44548761844635\n        ,0.44733864068985,0.455966800451279,0.691210627555847,0.687352657318115,0.694997549057007,0.650831580162048,0.691382348537445\n        ,0.511168897151947,0.522735774517059,0.576642036437988,0.559218406677246,0.55339902639389,0.576144576072693,0.581755459308624\n        ,0.527762532234192,0.547392010688782,0.530811905860901,0.519025087356567,0.503949224948883,0.475909888744354,0.48587840795517\n        ,0.44903889298439,0.481809675693512,0.457466155290604,0.448883175849915,0.515073657035828,0.562007606029511,0.499335706233978\n        ,0.529892086982727,0.512110590934753,0.534585952758789,0.494714945554733,0.483254015445709,0.547562420368195,0.59102463722229\n        ,0.530908048152924,0.520111799240112,0.571300983428955,0.57639741897583,0.547903001308441,0.521144568920136,0.503582537174225\n        ,0.506857693195343,0.444775521755219,0.477946311235428,0.467674791812897,0.484626680612564,0.499206751585007,0.49823185801506\n        ,0.497802197933197,0.496602028608322,0.497677952051163,0.499043405056,0.498800069093704,0.518403708934784,0.525831341743469\n        ,0.499872356653214,0.499278098344803,0.499828666448593,0.499938815832138,0.499490469694138,0.569541394710541,0.68333899974823\n        ,0.498219937086105,0.4974305331707,0.498798072338104,0.498037666082382,0.498205900192261,0.510666072368622,0.50631707906723\n        ,0.530737638473511,0.499969571828842,0.499186664819717,0.499278783798218,0.57228696346283,0.538302779197693,0.49847537279129\n        ,0.494693696498871,0.494539827108383,0.494640290737152,0.49461504817009,0.498110502958298,0.498928993940353,0.499923974275589\n        ,0.499071568250656,0.50044584274292,0.50257819890976,0.529922425746918,0.517054378986359,0.569340586662292,0.593726396560669\n        ,0.499435722827911,0.499883413314819,0.497263044118881,0.495622754096985,0.494674980640411,0.497550189495087,0.498391449451447\n        ,0.498559087514877,0.504504323005676,0.499798029661179,0.501299262046814,0.52972686290741,0.595946848392487,0.558468520641327\n        ,0.509782254695892,0.49771437048912,0.498413652181625,0.499226033687592,0.499752223491669,0.494891762733459,0.495065748691559\n        ,0.495090305805206,0.494971811771393,0.497306615114212,0.494864940643311,0.494124948978424,0.494882583618164,0.492664277553558\n        ,0.488881856203079,0.493738561868668,0.511237859725952,0.495989292860031,0.546556949615479,0.512413084506989,0.532420933246613\n        ,0.503437399864197,0.5750692486763,0.61922025680542,0.562155485153198,0.628194510936737,0.578537940979004,0.595672905445099\n        ,0.691051840782166,0.55819296836853,0.54462867975235,0.519611001014709,0.556648969650269,0.507583141326904,0.497512698173523\n        ,0.527811646461487,0.501895308494568,0.497514218091965,0.495734304189682,0.58951598405838,0.702751636505127,0.735632419586182\n        ,0.759821832180023,0.498141705989838,0.4822036921978,0.497402459383011,0.747796297073364,0.848888993263245,0.914315938949585\n        ,0.896286070346832,0.504512190818787,0.490088790655136,0.690164387226105,0.171521663665771,0.271039336919785,0.42390364408493\n        ,0.499330878257751,0.4996238052845,0.49933186173439,0.49904191493988,0.498877853155136,0.402910560369492,0.401398241519928\n        ,0.273808985948563,0.175097554922104,0.199212685227394,0.232243254780769,0.19456385076046,0.183189481496811,0.166510850191116\n        ,0.255079418420792,0.25168913602829,0.27091583609581,0.496359467506409,0.515789389610291,0.492695808410645,0.537370145320892\n        ,0.642270505428314,0.603465437889099,0.605224668979645,0.571839272975922,0.588908016681671,0.621786415576935,0.595558941364288\n        ,0.594146132469177,0.561316013336182,0.547303140163422,0.717162847518921,0.740826785564423,0.535634934902191,0.500117421150208\n        ,0.499933958053589,0.101766638457775,0.111037105321884,0.183134287595749,0.41256394982338,0.495221793651581,0.185607150197029\n        ,0.197905108332634,0.280133128166199,0.416712075471878,0.494052648544312,0.496475011110306,0.523596227169037,0.102055840194225\n        ,0.117517657577991,0.198546633124352,0.351395040750504,0.677316725254059,0.786939442157745,0.883826851844788,0.4284348487854\n        ,0.294497162103653,0.214689984917641,0.201732218265533,0.142618268728256,0.130712449550629,0.135116308927536,0.039704255759716\n        ,0.043820708990097,0.16945244371891,0.13146761059761,0.104484103620052,0.122791580855846,0.0540477894246578,0.135893955826759\n        ,0.074902355670929,0.146088987588882,0.00148449698463082,0.00180044712033123,0.00190533243585378,0.00161935156211257\n        ,0.00256754434667528,0.00247231777757406,0.00311465212143958,0.00306080444715917,0.00206518173217773,0.00141028501093388\n        ,0.00245590414851904,0.00250778347253799,0.00131974171381444,0.00111980270594358,0.00122817605733871,0.00136681995354593\n        ,0.00178884842898697,0.00197217962704599,0.00209920550696552,0.00111105316318572,0.00143118086270988,0.00153342681005597\n        ,0.00161730451509357,0.00108217669185251,0.00127602275460958,0.00116704078391194,0.00126482569612563,0.00127327290829271\n        ,0.00104213762097061,0.00113009929191321,0.00113605090882629,0.00124113645870239,0.00138873723335564,0.00140770059078932\n        ,0.00124231504742056,0.0013095501344651,0.00154323561582714,0.00152960699051619,0.00205415673553944,0.00227937055751681\n        ,0.00211106915958226,0.00291993888095021,0.00182866596151143,0.00118685979396105,0.00230278423987329,0.00110143003985286\n        ,0.00102221255656332,0.00162972358521074,0.00117750989738852,0.00201793806627393,0.00131509616039693,0.00156842230353504\n        ,0.00102850899565965,0.00110244657844305,0.00123351323418319,0.00109587737824768,0.0011475111823529,0.00133768632076681\n        ,0.00156263750977814,0.0018124032067135,0.00228998460806906,0.00124180514831096,0.00104946608189493,0.00122276064939797\n        ,0.00184418284334242,0.00182779424358159,0.118393562734127,0.0736616924405098,0.0249102488160133,0.0221831742674112\n        ,0.0899571180343628,0.112894177436829,0.0035569122992456,0.0474935285747051,0.00326452520675957,0.0028353682719171\n        ,0.00254967133514583,0.00683861877769232,0.00711500784382224,0.00409545283764601,0.00273589114658535,0.003227410139516\n        ,0.00404798192903399,0.00195459253154695,0.00146086083259434,0.00389905762858689,0.00379705731756985,0.00660856440663338\n        ,0.00885148253291845,0.0123358722776175,0.0371558479964733,0.0114142606034875,0.0049864212051034,0.00675698649138212\n        ,0.00125157495494932,0.00423817383125424,0.00477129686623812,0.00646650372073054,0.00695784715935588,0.00672228308394551\n        ,0.00723032187670469,0.00389069109223783,0.00655906740576029,0.00252278638072312,0.0070349182933569,0.00656781531870365\n        ,0.00377465505152941,0.0022606726270169,0.0145900612697005,0.0159324333071709,0.0146114667877555,0.0162585619837046\n        ,0.00300842896103859,0.00186342420056462,0.0134177384898067,0.00533000519499183,0.0120491916313767,0.00303325708955526\n        ,0.00548212928697467,0.00275028543546796,0.00285283708944917,0.00401054183021188,0.00471321679651737,0.0049645071849227\n        ,0.00414479849860072,0.00535947270691395,0.00535075319930911,0.00770913390442729,0.00910867750644684,0.0109262075275183\n        ,0.0109737552702427,0.00946454796940088,0.00697548314929008,0.00968931894749403,0.0109196323901415,0.00148356088902801\n        ,0.00119180616457015,0.00157149462029338,0.00133818294852972,0.00121787074021995,0.0010013849241659,0.00150432379450649\n        ,0.00106834375765175,0.0265174955129623,0.0213357713073492,0.0482362285256386,0.111389972269535,0.178344205021858\n        ,0.00177848618477583,0.038597047328949,0.100632637739182,0.0014194343239069,0.001388642587699,0.00193746259901673\n        ,0.00310551328584552,0.00602176133543253,0.00628630816936493,0.00313000287860632,0.170989155769348,0.139627546072006\n        ,0.151070773601532,0.153013974428177,0.120552375912666,0.0891576483845711,0.0443960651755333,0.00191070046275854,0.00883879698812962\n        ,0.0236061438918114,0.0467715933918953,0.0756872594356537,0.00838399399071932,0.0180896297097206,0.0441901236772537\n        ,0.085140235722065,0.00336254015564919,0.00880239997059107,0.0102470815181732,0.0147635443136096,0.0361023619771004\n        ,0.116256214678288,0.172775134444237,0.00751014146953821,0.00373137649148703,0.00834355410188437,0.0205908212810755\n        ,0.0430315807461739,0.0499112345278263,0.0812323614954948,0.00125892937649041,0.0243157092481852,0.0145227061584592\n        ,0.0245868228375912,0.0315362252295017,0.0573749467730522,0.0648135989904404,0.0631936118006706,0.0577625222504139\n        ,0.043515969067812,0.0366875343024731,0.0112321749329567,0.013560269959271,0.0102249225601554,0.0125839579850435,0.0148925315588713\n        ,0.0148319378495216,0.0134749580174685,0.00117894972208887,0.00133481808006763,0.00110387580934912,0.00105489289853722\n        ,0.00100554316304624,0.00101256731431931,0.00131905952002853,0.00110926921479404,0.00121478259097785,0.00114571722224355\n        ,0.00102083408273757,0.0012131753610447,0.00142305926419795,0.00133616500534117,0.00117117504123598,0.00116741808596998\n        ,0.00118442473467439,0.00101484113838524,0.00115493719931692,0.00110147777013481,0.00105720793362707,0.0010019481414929\n        ,0.0013600290985778,0.00124275567941368,0.00102024816442281,0.00116363493725657,0.00116654590237886,0.00119186111260206\n        ,0.00126692734193057,0.0010253731161356,0.00108020601328462,0.00105418777093291,0.00120234151836485,0.00108549254946411\n        ,0.00124082865659148,0.00112835713662207,0.00100101053249091,0.00140826881397516,0.0752988681197166,0.124789580702782\n        ,0.160499945282936,0.169288575649261,0.18654191493988,0.202812254428864,0.19428688287735,0.195977717638016,0.176482886075974\n        ,0.163506925106049,0.0958758518099785,0.0982898101210594,0.0110053485259414,0.0175644811242819,0.0482322424650192\n        ,0.0564861409366131,0.0773198679089546,0.200308069586754,0.173628240823746,0.102711834013462,0.0539824739098549,0.041170883923769\n        ,0.0225588493049145,0.00827851705253124,0.00417001498863101,0.00216753897257149,0.2001593708992,0.169763833284378\n        ,0.113478347659111,0.0628452077507973,0.0467336252331734,0.0235445890575647,0.00916387978941202,0.00502217374742031\n        ,0.00239629042334855,0.00120741280261427,0.00100570963695645,0.00109773920848966,0.00137963378801942,0.00222949031740427\n        ,0.00335098314099014,0.00546552427113056,0.0150606175884604,0.0319381542503834,0.0473228059709072,0.0694313868880272\n        \n        Transform: -0.00974440814253746,0.261574781949277,-0.965134041092506,0,-0.998083574277973,-0.0615276823665369,-0.00659841607181874\n        ,0,-0.0611084378058367,0.963220134760211,0.261673040260058,0,4.90316612261137,-0.745790957099574,9.65255231474262\n        ,1\n        TransformLink: -0.00974440798755643,-0.998083558403841,-0.0611084368339307,0,0.261574768803395,-0.0615276792743595,0.963220086351959\n        ,0,-0.965134005991403,-0.00659841583183997,0.261673030743233,0,9.55886503187761,4.91157425829824,-1.50782697121848\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_R_Ankle\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734\n        ,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757\n        ,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780\n        ,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803\n        ,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826\n        ,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849\n        ,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872\n        ,3873,3874,3875,3876,3877,3878,3879,3880,3881,7329,7330,7331,7332,7334,7335,7337,7340,7341,7343,7344,7345,7350,7353\n        ,7358,7359,7360,7361,7391,7392,7394,7406,7407,7408,7422,7473,7494,7495,7496,7503,7505,7518,7519,7520,7521,7534,7583\n        ,7584,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607\n        ,7608,7609,7610,7611,7615,7617,7619,7621,7622,7624,7625,7630,7631,7632,7633,7636,7639,7640,7641,7642,7643,7644,7645\n        ,7646,7647,7648,7649,7650,7653,7655,7656,7657,7658,7660,7668,7670,7674,7680,7681,7687,7688,7689,7690,7691,7700,7702\n        ,7703,7704,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747\n        ,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770\n        ,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793\n        ,7794,7795,7796,7821,7822,7823,7824,7825,7826,7827,7829,7830,7839,7840,7841,7842,7843,7844,7845,7846,7849,7856,7857\n        ,7858,7859,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7890,7891,7892,7893,7894,7895,7896,7897,7898\n        ,7899,7900,7901,7902,7903,7904,7905,7906,7907,7926,7940,7947,7949,7951,7952,7963,7971,7973,7974,7975,7976,7977,7978\n        ,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,8001,8002,8003,8004,8005,8006,8007\n        ,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030\n        ,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053\n        ,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076\n        ,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099\n        ,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122\n        ,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145\n        ,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168\n        ,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191\n        ,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214\n        ,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237\n        ,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260\n        ,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283\n        ,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306\n        ,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329\n        ,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352\n        ,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375\n        ,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398\n        ,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421\n        ,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444\n        ,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467\n        ,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490\n        ,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513\n        ,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,9859,9860,9861\n        ,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9879,9880,9881,9882,9892,9893,9894,9895,9896,9897,9898\n        ,9899,9900\n        Weights: 0.65597528219223,0.709011733531952,0.711628913879395,0.66375207901001,0.759973526000977,0.765329241752625,0.795203804969788\n        ,0.816222965717316,0.818207204341888,0.855426013469696,0.711977422237396,0.765679836273193,0.77683424949646,0.715062618255615\n        ,0.816503047943115,0.836960196495056,0.862055420875549,0.889485239982605,0.695444762706757,0.665904521942139,0.679816842079163\n        ,0.73004561662674,0.776868939399719,0.825136184692383,0.648822367191315,0.608231008052826,0.667994916439056,0.85819935798645\n        ,0.814932882785797,0.829913377761841,0.867069661617279,0.869281947612762,0.881918132305145,0.87449187040329,0.836233615875244\n        ,0.87369179725647,0.88720440864563,0.899121880531311,0.881960272789001,0.896691918373108,0.875333070755005,0.843001961708069\n        ,0.857326745986938,0.817641735076904,0.81023383140564,0.86391407251358,0.848222017288208,0.824821889400482,0.71945595741272\n        ,0.795259475708008,0.809440016746521,0.718048810958862,0.753644526004791,0.834041953086853,0.658038258552551,0.647229909896851\n        ,0.636279046535492,0.635104060173035,0.591275751590729,0.590951085090637,0.628393530845642,0.623831152915955,0.565776765346527\n        ,0.655584037303925,0.563940346240997,0.696153104305267,0.576048612594604,0.643130004405975,0.667751610279083,0.66983163356781\n        ,0.639135599136353,0.725501179695129,0.67290997505188,0.789611160755157,0.717039465904236,0.629511773586273,0.582115352153778\n        ,0.636384546756744,0.656113088130951,0.739117980003357,0.725175380706787,0.790050804615021,0.794268727302551,0.628185749053955\n        ,0.724548757076263,0.584488451480865,0.698292374610901,0.801148116588593,0.746210277080536,0.794003248214722,0.837971389293671\n        ,0.718741595745087,0.78249591588974,0.803311944007874,0.830314457416534,0.709548056125641,0.791346609592438,0.7228022813797\n        ,0.806047439575195,0.640056371688843,0.577611863613129,0.585572898387909,0.586568832397461,0.688723087310791,0.681378185749054\n        ,0.717833161354065,0.743086636066437,0.773878395557404,0.805986285209656,0.826895892620087,0.848493158817291,0.874839961528778\n        ,0.877769410610199,0.630060195922852,0.606431543827057,0.844351172447205,0.852287471294403,0.904818415641785,0.898178219795227\n        ,0.917577981948853,0.906475067138672,0.892982959747314,0.885418772697449,0.776828825473785,0.743370175361633,0.614108264446259\n        ,0.612488627433777,0.578422427177429,0.575816452503204,0.594617664813995,0.601395845413208,0.597555696964264,0.766813158988953\n        ,0.751835882663727,0.646396696567535,0.607691049575806,0.750361561775208,0.732623696327209,0.716885983943939,0.660877883434296\n        ,0.768944799900055,0.802345812320709,0.824857711791992,0.593540132045746,0.587819695472717,0.575874269008636,0.608721911907196\n        ,0.82046902179718,0.866474270820618,0.878058969974518,0.843822479248047,0.752577424049377,0.717527389526367,0.728131711483002\n        ,0.701335966587067,0.590925931930542,0.589995682239532,0.562100648880005,0.558030545711517,0.567298531532288,0.577193260192871\n        ,0.581563591957092,0.72448593378067,0.737729609012604,0.622413754463196,0.576157510280609,0.720308303833008,0.706418693065643\n        ,0.5756516456604,0.702696919441223,0.0011795781319961,0.00112896494101733,0.00102828920353204,0.001058503636159,0.00119337264914066\n        ,0.00106297561433166,0.00105914496816695,0.00112405023537576,0.00129260960966349,0.00110061012674123,0.00120096164755523\n        ,0.00110439362470061,0.00113475671969354,0.00120625190902501,0.00139809981919825,0.00129295082297176,0.00111539557110518\n        ,0.00109270925167948,0.00118347734678537,0.00108626356814057,0.00102851632982492,0.0011068059829995,0.00107913860119879\n        ,0.00102953403256834,0.00105880200862885,0.00136339839082211,0.00121706398203969,0.00114103371743113,0.00122526451013982\n        ,0.00110203702934086,0.00123027886729687,0.00113892008084804,0.00114424154162407,0.00116908457130194,0.00124633009545505\n        ,0.00106995261739939,0.00136725208722055,0.00105368765071034,0.00160929455887526,0.00194077589549124,0.00206075864844024\n        ,0.00175796006806195,0.00272555043920875,0.00264457450248301,0.00324998120777309,0.00313259661197662,0.00219884281978011\n        ,0.00152749510016292,0.00256760860793293,0.00256768707185984,0.0014338179025799,0.00121916015632451,0.00133566302247345\n        ,0.00147598213516176,0.00189867184963077,0.00205294857732952,0.00214026914909482,0.00119636079762131,0.00151501852087677\n        ,0.00159123365301639,0.0016437767772004,0.00106482626870275,0.00118096638470888,0.00139029452111572,0.0010679098777473\n        ,0.00122420466504991,0.00130276964046061,0.00128704076632857,0.00109646108467132,0.0011663946788758,0.00114935508463532\n        ,0.00130753719713539,0.00104656210169196,0.00143568706698716,0.00142728083301336,0.00104413845110685,0.00105172116309404\n        ,0.00116641377098858,0.00122365332208574,0.00145702308509499,0.00145369581878185,0.00198867777362466,0.00222442415542901\n        ,0.00210310681723058,0.00292031979188323,0.00178137444891036,0.00112225965131074,0.00230230134911835,0.00102994462940842\n        ,0.00159001746214926,0.0011182960588485,0.00201727566309273,0.00127973523922265,0.00156331283506006,0.00106918648816645\n        ,0.00122230243869126,0.00108542153611779,0.00111366261262447,0.00132836529519409,0.00169839384034276,0.00196366291493177\n        ,0.00245589460246265,0.00135377666447312,0.00114572537131608,0.0010074065066874,0.001139544416219,0.00178096874151379\n        ,0.00182523450348526,0.123235963284969,0.0753501355648041,0.0931120961904526,0.117816068232059,0.00382658536545932\n        ,0.045457985252142,0.00366591010242701,0.00752341700717807,0.00435095373541117,0.00292286323383451,0.00395955424755812\n        ,0.00190321274567395,0.00143028236925602,0.00383550697006285,0.00381829147227108,0.00336781400255859,0.00902270525693893\n        ,0.0128849148750305,0.0199999995529652,0.011979641392827,0.00525866402313113,0.00715382117778063,0.00446873297914863\n        ,0.00504618370905519,0.00680423062294722,0.00727805029600859,0.00710283266380429,0.00761045608669519,0.00406671036034822\n        ,0.00681646214798093,0.00266376044601202,0.00734136626124382,0.00681392010301352,0.00394017994403839,0.00238415785133839\n        ,0.0151917962357402,0.0165377892553806,0.015185103751719,0.0168243162333965,0.00304434704594314,0.00188357208389789\n        ,0.013633968308568,0.00538172433152795,0.0122589133679867,0.00306214136071503,0.00553420465439558,0.00272889854386449\n        ,0.00280646537430584,0.00395028758794069,0.0046858717687428,0.0049549350515008,0.00409943610429764,0.15074747800827\n        ,0.13802894949913,0.13859336078167,0.0366114713251591,0.0394646488130093,0.00432951329275966,0.00327839748933911,0.00322125758975744\n        ,0.00318318116478622,0.00321962824091315,0.0033142757602036,0.0032075101044029,0.0033591843675822,0.00414895033463836\n        ,0.00397540256381035,0.00139672122895718,0.00108024047221988,0.00141620181966573,0.00657118484377861,0.00721793109551072\n        ,0.00716012995690107,0.125166103243828,0.174555525183678,0.133634239435196,0.184101939201355,0.100839555263519,0.00133616954553872\n        ,0.181976735591888,0.101485811173916,0.151200979948044,0.122543193399906,0.158087536692619,0.124445781111717,0.0913600325584412\n        ,0.0419483035802841,0.00197794218547642,0.00463608838617802,0.0444087125360966,0.0723793208599091,0.0501375421881676\n        ,0.0044353692792356,0.0413938835263252,0.0806875303387642,0.00426826579496264,0.120993569493294,0.178608581423759\n        ,0.143479540944099,0.00399883696809411,0.00555829936638474,0.0498151890933514,0.0808451771736145,0.0747244507074356\n        ,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652\n        ,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0114197684451938\n        ,0.0139735713601112,0.00279642338864505,0.0127804530784488,0.0154154840856791,0.0153974965214729,0.0140355518087745\n        ,0.00105739862192422,0.0010168842272833,0.00113954034168273,0.00107212935108691,0.00119830516632646,0.00106814026366919\n        ,0.00102596683427691,0.00136564020067453,0.0716719478368759,0.124523319303989,0.163556218147278,0.174040555953979\n        ,0.192555144429207,0.20968496799469,0.201058372855186,0.216555178165436,0.176410168409348,0.0914620831608772,0.0927850008010864\n        ,0.0199999995529652,0.0454204343259335,0.0527630150318146,0.0724167823791504,0.152738720178604,0.206173092126846,0.178831785917282\n        ,0.106841884553432,0.0199999995529652,0.00605552084743977,0.00442697573453188,0.125580474734306,0.680477499961853\n        ,0.584467530250549,0.592251241207123,0.633143901824951,0.495578348636627,0.504434049129486,0.691548705101013,0.626969277858734\n        ,0.627072930335999,0.64034640789032,0.691565096378326,0.397741913795471,0.545433342456818,0.501227915287018,0.497676163911819\n        ,0.482865214347839,0.20007586479187,0.197468772530556,0.173577681183815,0.184274166822433,0.684533894062042,0.676782727241516\n        ,0.437961488962173,0.61360228061676,0.414381235837936,0.369911134243011,0.819726526737213,0.824492573738098,0.750284850597382\n        ,0.775287508964539,0.726000666618347,0.670123636722565,0.0739083811640739,0.0679146945476532,0.452167540788651,0.550536513328552\n        ,0.579955399036407,0.590891540050507,0.577258586883545,0.5803182721138,0.545221924781799,0.677812218666077,0.716372787952423\n        ,0.704729378223419,0.764798760414124,0.694859147071838,0.500020503997803,0.812475562095642,0.761427819728851,0.779982626438141\n        ,0.851395726203918,0.548225879669189,0.661731421947479,0.782220721244812,0.616512358188629,0.64509129524231,0.628571748733521\n        ,0.62187534570694,0.569682478904724,0.722129046916962,0.771439790725708,0.910011827945709,0.499018520116806,0.771681487560272\n        ,0.908240258693695,0.4902164041996,0.751008927822113,0.573323547840118,0.0569627061486244,0.0632607415318489,0.0546923018991947\n        ,0.0569528415799141,0.177458420395851,0.15703871846199,0.16798897087574,0.187099754810333,0.316656291484833,0.291301727294922\n        ,0.184640720486641,0.225315734744072,0.228931069374084,0.152371928095818,0.43130487203598,0.438795536756516,0.498869776725769\n        ,0.499205946922302,0.554381132125854,0.499159663915634,0.391060262918472,0.655699729919434,0.581697702407837,0.499182015657425\n        ,0.499595403671265,0.499299347400665,0.49955028295517,0.499799698591232,0.505017697811127,0.486934632062912,0.470368415117264\n        ,0.488239347934723,0.494710594415665,0.494018644094467,0.495431184768677,0.495684057474136,0.491640150547028,0.493156641721725\n        ,0.493532657623291,0.492237329483032,0.522314846515656,0.502140820026398,0.544067442417145,0.574277400970459,0.574915885925293\n        ,0.600490629673004,0.664091825485229,0.614323496818542,0.458703994750977,0.46759495139122,0.49502158164978,0.472131460905075\n        ,0.463651090860367,0.501171886920929,0.505290508270264,0.747058033943176,0.673701882362366,0.642837941646576,0.698455512523651\n        ,0.583079934120178,0.52874481678009,0.497591882944107,0.497499942779541,0.504370510578156,0.653982579708099,0.628796756267548\n        ,0.502160012722015,0.593420624732971,0.499008297920227,0.497864127159119,0.498020023107529,0.496375501155853,0.496211588382721\n        ,0.49818554520607,0.496551722288132,0.494357407093048,0.49289858341217,0.492912411689758,0.494054555892944,0.495537310838699\n        ,0.495428442955017,0.495201587677002,0.495444416999817,0.494400411844254,0.495095014572144,0.495912224054337,0.495938241481781\n        ,0.540739595890045,0.526813268661499,0.584814488887787,0.601803541183472,0.545946657657623,0.627271831035614,0.626056015491486\n        ,0.644936084747314,0.611551523208618,0.497566670179367,0.499393194913864,0.501378178596497,0.473256915807724,0.478118002414703\n        ,0.47151792049408,0.47887846827507,0.47583332657814,0.478424072265625,0.482468962669373,0.473071485757828,0.476970911026001\n        ,0.483539015054703,0.499649405479431,0.497931659221649,0.497813880443573,0.50836980342865,0.507277965545654,0.749438107013702\n        ,0.788178980350494,0.714695155620575,0.729622066020966,0.927818417549133,0.933475971221924,0.915226221084595,0.894323170185089\n        ,0.754922032356262,0.706262648105621,0.745560348033905,0.78499960899353,0.495742470026016,0.495044946670532,0.495270699262619\n        ,0.52238667011261,0.500341296195984,0.513158202171326,0.539141952991486,0.495112806558609,0.494484156370163,0.494385927915573\n        ,0.494777828454971,0.646189391613007,0.752212941646576,0.683876216411591,0.620637953281403,0.84437370300293,0.775074124336243\n        ,0.495411992073059,0.494442224502563,0.49536070227623,0.495829224586487,0.496245741844177,0.496983617544174,0.495706379413605\n        ,0.616513133049011,0.551888883113861,0.570059299468994,0.593811511993408,0.678223431110382,0.960020244121552,0.983643352985382\n        ,0.799996078014374,0.963403701782227,0.86243861913681,0.955750465393066,0.925033330917358,0.876249372959137,0.874520301818848\n        ,0.551191985607147,0.61811488866806,0.829396069049835,0.672635018825531,0.651278257369995,0.495612591505051,0.496858716011047\n        ,0.682246148586273,0.497243225574493,0.498295664787292,0.49911630153656,0.498381614685059,0.498192936182022,0.499222010374069\n        ,0.499349772930145,0.498703926801682,0.499136686325073,0.49921178817749,0.498755186796188,0.499519914388657,0.499555051326752\n        ,0.499421000480652,0.498835802078247,0.81444239616394,0.496883779764175,0.497934907674789,0.499061793088913,0.498675882816315\n        ,0.49486768245697,0.49796661734581,0.498460471630096,0.803469717502594,0.49705970287323,0.494718581438065,0.504018425941467\n        ,0.494964092969894,0.514969348907471,0.506780028343201,0.497430324554443,0.506990075111389,0.499210506677628,0.498955190181732\n        ,0.499020576477051,0.498609274625778,0.498691350221634,0.497828960418701,0.498702019453049,0.49905851483345,0.833559393882751\n        ,0.46928659081459,0.459820955991745,0.729598581790924,0.76493626832962,0.571733355522156,0.497356355190277,0.493865221738815\n        ,0.629204213619232,0.47857478260994,0.495688110589981,0.481274753808975,0.497067838907242,0.770751476287842,0.8014115691185\n        ,0.508015990257263,0.745351433753967,0.494458675384521,0.494277447462082,0.500205874443054,0.707429111003876,0.49787762761116\n        ,0.6831995844841,0.869009733200073,0.498603701591492,0.800292253494263,0.498153626918793,0.498638093471527,0.507655739784241\n        ,0.497437328100204,0.482029527425766,0.445579886436462,0.447542548179626,0.456178933382034,0.691224992275238,0.68994003534317\n        ,0.696367621421814,0.646832704544067,0.690497040748596,0.512747287750244,0.52385687828064,0.577970147132874,0.56131386756897\n        ,0.553135573863983,0.57562243938446,0.582246720790863,0.528339803218842,0.5488241314888,0.532852530479431,0.519924283027649\n        ,0.504666149616241,0.476075559854507,0.486094027757645,0.449438631534576,0.482994347810745,0.45784518122673,0.449248284101486\n        ,0.514452159404755,0.561508595943451,0.498755604028702,0.53039538860321,0.512394607067108,0.534120500087738,0.494775086641312\n        ,0.483250230550766,0.548449218273163,0.590691864490509,0.528972744941711,0.518154919147491,0.570011258125305,0.575352251529694\n        ,0.54700493812561,0.520142495632172,0.502695500850677,0.505330801010132,0.444546610116959,0.477938383817673,0.467626750469208\n        ,0.483919441699982,0.498431533575058,0.498079359531403,0.49764558672905,0.496072262525558,0.497497260570526,0.499024957418442\n        ,0.498812049627304,0.517799317836761,0.524429976940155,0.499892085790634,0.499295592308044,0.499847054481506,0.49994283914566\n        ,0.49948513507843,0.569468915462494,0.680891454219818,0.49810403585434,0.497266590595245,0.498697310686111,0.497886002063751\n        ,0.498042225837708,0.509154617786407,0.505030632019043,0.528218388557434,0.499973088502884,0.499091774225235,0.499190449714661\n        ,0.570380747318268,0.535448849201202,0.498326450586319,0.494596093893051,0.494365692138672,0.494462668895721,0.494515120983124\n        ,0.497997492551804,0.498909473419189,0.499929428100586,0.498976171016693,0.499798595905304,0.502025723457336,0.528575539588928\n        ,0.515362143516541,0.56660008430481,0.591955363750458,0.49943020939827,0.499888569116592,0.497349143028259,0.495646834373474\n        ,0.494615614414215,0.497694700956345,0.498536199331284,0.498701572418213,0.504468858242035,0.499821990728378,0.500964164733887\n        ,0.529118895530701,0.595583856105804,0.559608042240143,0.509870648384094,0.497819513082504,0.498537451028824,0.499243289232254\n        ,0.499773025512695,0.494683772325516,0.494805634021759,0.49482062458992,0.494760543107986,0.497144222259521,0.49457660317421\n        ,0.493789881467819,0.49458646774292,0.492286801338196,0.48815643787384,0.492628186941147,0.509193360805511,0.494705110788345\n        ,0.543936431407928,0.510835826396942,0.529115557670593,0.501953482627869,0.569758892059326,0.610815465450287,0.557083010673523\n        ,0.621949911117554,0.572470784187317,0.591342747211456,0.695724725723267,0.55320018529892,0.540745139122009,0.517162621021271\n        ,0.552327692508698,0.507378876209259,0.497698903083801,0.527704477310181,0.50039005279541,0.496325492858887,0.494565069675446\n        ,0.582824468612671,0.695666551589966,0.727506101131439,0.750860035419464,0.498115301132202,0.482150375843048,0.497372984886169\n        ,0.739583432674408,0.856374561786652,0.921864926815033,0.903915703296661,0.506085455417633,0.491403371095657,0.683231711387634\n        ,0.171146184206009,0.270570337772369,0.424545764923096,0.499346643686295,0.499631464481354,0.499337196350098,0.499045014381409\n        ,0.498869776725769,0.407788127660751,0.406853288412094,0.278324812650681,0.1684460490942,0.190583914518356,0.237119317054749\n        ,0.196648374199867,0.182746469974518,0.163020357489586,0.261683225631714,0.259773045778275,0.278990775346756,0.496063411235809\n        ,0.519686937332153,0.49615415930748,0.544732213020325,0.653069257736206,0.612227141857147,0.612312376499176,0.576975464820862\n        ,0.592626690864563,0.625570714473724,0.599093317985535,0.597411274909973,0.564130961894989,0.549682676792145,0.729838013648987\n        ,0.750595331192017,0.539929986000061,0.500865161418915,0.500391781330109,0.0966039299964905,0.105603665113449,0.174986571073532\n        ,0.409532397985458,0.495501756668091,0.193169787526131,0.205573499202728,0.287738084793091,0.421045809984207,0.494261145591736\n        ,0.496202617883682,0.522774279117584,0.10176257789135,0.117253668606281,0.198547959327698,0.353632628917694,0.686014235019684\n        ,0.796516358852386,0.892734885215759,0.432033270597458,0.301140606403351,0.221199050545692,0.208233565092087,0.00253082648850977\n        ,0.00275990343652666,0.00274983723647892,0.00286803673952818,0.00353791960515082,0.00354324467480183,0.00348438322544098\n        ,0.00343684293329716,0.00327312108129263,0.00293036713264883,0.00278568617068231,0.0028021929319948,0.00250480184331536\n        ,0.00308231031522155,0.00499954726547003,0.0106547418981791,0.00859358441084623,0.0010503102093935,0.00117027142550796\n        ,0.00592980580404401,0.00331242568790913,0.0199999995529652,0.0762817785143852,0.13538670539856,0.159179985523224\n        ,0.127241417765617,0.172544106841087,0.19372533261776\n        Transform: 0.00974139876223667,-0.261572280877899,-0.965134713535369,0,-0.99808360954043,-0.0615269355671852,0.00660116218659385\n        ,0,-0.0611084648132926,0.963220827450316,-0.261670358354416,0,4.90243372735329,-0.726168719066309,-9.58014941330076\n        ,1\n        TransformLink: 0.00974139846069232,-0.998083578644817,-0.0611084629216841,0,-0.261572284969406,-0.0615269365295878,0.963220842516991\n        ,0,-0.965134745332177,0.00660116240407219,-0.261670366975266,0,-9.483837235735,4.91159978411053,-1.50780017761377\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_Neck\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 94,95,96,108,109,122,123,124,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149\n        ,150,163,166,167,168,169,170,171,172,173,174,175,176,340,341,342,343,829,830,831,832,882,885,914,915,916,917,998,999\n        ,1010,1011,1089,1092,1093,1147,1148,1154,1155,1156,1157,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742\n        ,1743,1744,1745,1749,1750,1751,1752,1753,1754,1755,1759,1760,1761,1762,1763,1764,1790,1791,1792,1793,1794,1795,1796\n        ,1797,1798,1799,1806,1807,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826\n        ,1827,1828,1829,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,2006,2007,2008,2500,2501,2502,2503,2554,2557,2585\n        ,2586,2587,2588,2676,2677,2688,2689,2770,2773,2774,2829,2830,2836,2837,2838,2839,3408,3409,3410,3411,3412,3413,3414\n        ,3415,3416,3417,3418,3419,3420,3421,3422,3426,3427,3428,3429,3430,3431,3434,3435,3436,3437,3438,3467,3468,3469,3470\n        ,3471,3472,3473,3474,3475,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4098,4099,4155,4156,4157,4158,4159,4160\n        ,4161,4163,4203,4204,4205,4207,4208,4209,4210,4211,4212,4230,4231,4234,4235,4236,4237,4240,4248,4249,4250,4251,4252\n        ,4265,4266,4267,4268,4269,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487\n        ,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510\n        ,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533\n        ,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556\n        ,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579\n        ,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602\n        ,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625\n        ,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648\n        ,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671\n        ,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694\n        ,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717\n        ,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,5303,5304,5305,5306,5309,5311,5313,5314,5318\n        ,5319,5320,5321,5322,5323,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375\n        ,5376,5379,5380,5381,5382,5383,5384,5387,5388,5389,5391,5394,5395,5397,5398,5399,5400,5402,5403,5404,5405,5406,5407\n        ,5408,5409,5410,5411,5412,5414,5415,5416,5417,5418,5425,5426,5427,5428,5429,5430,5431,5439,5444,5447,5448,5449,5450\n        ,5452,5453,5454,5455,5456,5457,5462,5467,5477,5478,5479,5480,5483,5484,5520,5524,5727,5728,5729,5730,5731,5732,5733\n        ,5734,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806\n        ,5807,5810,5811,5812,5813,5814,5815,5818,5819,5820,5822,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837\n        ,5838,5839,5840,5841,5842,5844,5845,5846,5847,5848,5855,5856,5857,5858,5859,5860,5861,5877,5878,5879,5880,5881,5882\n        ,5883,5884,5885,5886,5887,5893,5894,5898,5908,6001,6484,6485,6486,6487,6488,6489,6490,6491,9982,9983,9991,9992,9993\n        ,9998,10030,10031,10039,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064,10065,10066\n        ,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085\n        ,10086,10087,10088,10089,10091,10092,10093,10094,10100,10101,10102,10111,10112,10116,10133,10134,10135,10136,10145\n        ,10192,10200,10202,10205,10208,10209,10210,10211,10212,10213,10214,10215,10217,10218,10219,10220,10221,10222,10233\n        ,10234,10235,10236,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10262,10263,10264\n        ,10265,10266,10267,10268,10269,10278,10279,10280,10282,10283,10284,10286,10287,10288,10289,10290,10291,10292,10293\n        ,10294,10295,10296,10297,10298,10300,10301,10302,10304,10305,10306,10307,10308,10309,10310,10317,10318,10319,10320\n        ,10321,10322,10323,10324,10325,10326,10327,10329,10330,10331,10332,10333,10334,10335,10336,10337,10338,10339,10340\n        ,10341,10342,10343,10344,10345,10346,10347,10348,10349,10350,10351,10352,10353,10354,10355,10356,10357,10358,10359\n        ,10360,10361,10363,10364,10365,10366,10367,10368,10370,10372,10373,10376,10377,10378,10394,10395,10415,10416,10419\n        ,10426,10427,10430,10431,10433,10436,10452,10453,10454,10455,10459,10462,10465,10466,10467,10468,10476,10477,10478\n        ,10479,10480,10481,10482,10483,10484,10485,10486,10487,10488,10489,10490,10494,10495,10497,10498,10499,10500,10501\n        ,10502,10503,10504,10505,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517,10518,10519,10520\n        ,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10541,10542,10543\n        ,10544,10550,10553,10571,10573,10575,10583,10586,10626,10632,10635,10638,10639,10641,10642,10643,10644,10645,10646\n        ,10647,10649,10650,10651,10652,10653,10654,10655,10657,10658,10659,10660,10671,10672,10673,10674,10675,10676,10682\n        ,10683,10685,10686,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10701,10702\n        ,10703,10704,10705,10706,10707,10708,10713,10715,10716,10717,10718,10719,10721,10722,10723,10724,10725,10726,10727\n        ,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10752\n        ,10753,10754,10755,10756,10757,10758,10759,10760,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772\n        ,10773,10774,10775,10776,10777,10778,10779,10780,10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10792\n        ,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10808,10823,10824,10825,10844\n        ,10845,10848,10849,10855,10856,10857,10858,10859,10860,10862,10865,10880,10881,10882,10883,10886,10889,10892,10893\n        ,10894,10898,10901,10902,10903,10904,10905,10906,10907,10908\n        Weights: 0.567255795001984,0.594789087772369,1,0.485924780368805,0.528420746326447,1,1,0.25,0.489311069250107,0.392085492610931\n        ,0.399200916290283,0.367956221103668,0.407303422689438,0.416285485029221,0.430377572774887,0.41740095615387,0.377135217189789\n        ,0.420548111200333,0.393889129161835,0.375083416700363,0.464555472135544,0.463200926780701,0.460871756076813,0.430750489234924\n        ,0.40896874666214,0.415823668241501,0.389805644750595,0.430850774049759,0.406835645437241,1,0.268844544887543,0.450425446033478\n        ,0.456322252750397,0.450362801551819,0.4505615234375,0.37137359380722,0.319888979196548,0.333971530199051,0.377856224775314\n        ,0.461536556482315,0.4345563352108,0.425735384225845,0.447437614202499,0.403514206409454,0.434205532073975,0.309248238801956\n        ,0.318339675664902,0.508810639381409,0.544517993927002,0.517018139362335,0.488460779190063,0.486855179071426,0.488402009010315\n        ,0.565379500389099,0.531720817089081,0.533512532711029,0.570134997367859,0.592637956142426,1,1,0.596871972084045,0.460071235895157\n        ,0.483837783336639,0.496960788965225,0.517288565635681,0.490690231323242,0.527705907821655,0.531510651111603,0.564505398273468\n        ,0.568630576133728,0.412591725587845,0.460467159748077,0.501135110855103,0.431564539670944,1,1,1,1,1,0.278514921665192\n        ,0.315800756216049,1,1,1,0.295491874217987,0.423362791538239,0.427228540182114,0.431595623493195,0.437787711620331\n        ,0.438149452209473,0.441805690526962,0.450171411037445,0.445821523666382,0.43207174539566,0.421678841114044,0.420816749334335\n        ,0.440724223852158,0.449095875024796,0.158272460103035,0.214777141809464,0.23971700668335,0.317722767591476,0.34293207526207\n        ,0.384178310632706,0.453722923994064,0.37018746137619,0.2797671854496,0.272957593202591,0.468755125999451,0.456089347600937\n        ,0.453430771827698,0.367843747138977,0.374986797571182,0.423006445169449,0.391115933656693,0.400139689445496,0.418090730905533\n        ,0.398969799280167,0.45367106795311,0.374496161937714,0.348593175411224,0.337754309177399,0.448754966259003,0.439398765563965\n        ,0.412120491266251,0.40472885966301,0.395856976509094,0.491585850715637,0.417333751916885,1,1,0.446810632944107,0.444157123565674\n        ,0.436623930931091,0.305552244186401,0.321938186883926,0.45570120215416,0.456821322441101,0.421524226665497,0.410207986831665\n        ,0.439488798379898,0.430942058563232,0.486270278692245,0.387218713760376,0.513144791126251,0.553484082221985,0.527101457118988\n        ,0.492273092269897,0.488050699234009,0.493159621953964,0.572631776332855,0.536227822303772,0.536720275878906,0.575529217720032\n        ,0.602228164672852,1,1,0.609866917133331,0.454447686672211,0.484999120235443,0.497838407754898,0.525630235671997,0.493739008903503\n        ,0.554608345031738,0.549289286136627,0.577452898025513,0.585927069187164,0.404821395874023,0.461030542850494,0.52098685503006\n        ,0.475875169038773,1,1,1,1,1,1,0.34978786110878,1,1,1,0.267421126365662,0.413493543863297,0.420259416103363,0.425440341234207\n        ,0.43252557516098,0.431422144174576,0.436633944511414,0.420562446117401,0.409768640995026,0.410564452409744,0.431873440742493\n        ,0.441510498523712,0.178753688931465,0.248801708221436,1,0.341445356607437,0.399679660797119,0.401330173015594,0.312750190496445\n        ,0.289100527763367,0.260428875684738,0.0274547934532166,0.0250113885849714,0.020182766020298,0.0213320329785347,0.016894893720746\n        ,0.0194678697735071,0.0149198956787586,0.0193698238581419,0.0146699715405703,0.0137685351073742,0.0113338427618146\n        ,0.0107923075556755,0.0357030481100082,0.0397298000752926,0.0218236707150936,0.0282798446714878,0.0171993505209684\n        ,0.0227650869637728,0.0176588520407677,0.0130077684298158,0.0150612825527787,0.0187534429132938,0.0210761055350304\n        ,0.0117735685780644,0.0151852741837502,0.013343752361834,0.0096684992313385,0.012965239584446,0.00918575096875429\n        ,0.0302136708050966,0.0265279468148947,0.0199599303305149,0.015185602940619,0.0155232883989811,0.0111408829689026\n        ,0.0331871323287487,0.0244939364492893,0.0269742105156183,0.0207655429840088,0.0188741628080606,0.0187237989157438\n        ,0.038996160030365,0.0349120125174522,0.0274578537791967,0.0220344085246325,0.041811753064394,1,1,1,1,1,1,1,1,1,1\n        ,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\n        ,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\n        ,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\n        ,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\n        ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.195673152804375,0.364670842885971,0.328575611114502,0.335197657346725\n        ,0.085664302110672,0.0847082063555717,0.109214313328266,0.145181283354759,1,0.292138516902924,0.1701730042696,0.268163949251175\n        ,0.274444133043289,0.123346589505672,0.0517623275518417,0.0323195643723011,0.0741127878427505,0.108336910605431,0.0483566932380199\n        ,0.0131363812834024,0.0477573983371258,0.00303209642879665,0.0137467281892896,0.00896062422543764,0.00180904532317072\n        ,0.0341183207929134,0.0385043062269688,0.293479233980179,0.160098940134048,0.155995458364487,0.199746564030647,0.0119855618104339\n        ,0.237626984715462,0.440084129571915,0.233796462416649,0.444397240877151,0.309454947710037,0.160931527614594,0.369414836168289\n        ,0.386035412549973,0.161727607250214,0.106181867420673,0.0822702571749687,0.0846450924873352,0.0603290311992168,0.0332393832504749\n        ,0.0122639155015349,0.0174598526209593,0.0603569746017456,0.263093948364258,0.33202987909317,0.0128398509696126,0.00547032617032528\n        ,0.00472192838788033,0.0279744360595942,0.0175511501729488,0.0347373820841312,0.0315300486981869,0.0298746712505817\n        ,0.0178451966494322,0.00422401027753949,0.00319708767347038,0.00969248823821545,0.00549563439562917,0.0098872184753418\n        ,0.116298198699951,0.113489478826523,0.0818140730261803,0.0848385840654373,0.116220399737358,0.0814184322953224,0.11701412498951\n        ,0.095750592648983,0.00365511584095657,0.019964512437582,0.00232761516235769,0.00926866568624973,0.00592594314366579\n        ,0.00528620649129152,0.273272782564163,0.00890387129038572,0.0180002469569445,0.0394606180489063,0.147415712475777\n        ,0.140457794070244,0.0401500388979912,0.0032884725369513,0.0260648149996996,0.0329115353524685,0.0179773308336735\n        ,0.00425787409767509,0.00778371561318636,0.00381025741808116,0.00544504728168249,0.211386486887932,0.215239286422729\n        ,0.231434643268585,0.408174365758896,0.367100775241852,0.128619104623795,1,0.304448693990707,0.176563605666161,0.274393022060394\n        ,0.283235043287277,0.129507526755333,0.0551842972636223,0.034300934523344,0.078447587788105,0.114036232233047,0.0511978343129158\n        ,0.0139047084376216,0.0508126877248287,0.0317802466452122,0.142172694206238,0.0929999127984047,0.0189517624676228\n        ,0.34366649389267,0.393704414367676,0.294252127408981,0.161952465772629,0.163479775190353,0.213232666254044,0.125898495316505\n        ,0.247030854225159,0.443164050579071,0.233504742383957,0.450279980897903,0.309741675853729,0.162085667252541,0.379501342773438\n        ,0.25,0.168081417679787,0.107104353606701,0.0829724371433258,0.0879543945193291,0.0629429370164871,0.183462262153625\n        ,0.0351017713546753,0.0128694428130984,0.0183484964072704,0.0632648542523384,0.259588420391083,0.0136276334524155\n        ,0.0057412046007812,0.00497032888233662,0.0297496803104877,0.0184993632137775,0.0365210957825184,0.0330784022808075\n        ,0.0315940752625465,0.0185253042727709,0.00435465015470982,0.00335264601744711,0.0100949313491583,0.00577421206980944\n        ,0.0104488199576736,0.117551773786545,0.126195579767227,0.0899995565414429,0.103110551834106,0.140919372439384,0.082244835793972\n        ,0.11901718378067,0.0211004968732595,0.0245979446917772,0.00974327325820923,0.00623384583741426,0.161613687872887\n        ,0.0055119595490396,0.282902300357819,0.00928386207669973,0.018939271569252,0.0417766198515892,0.154402107000351,0.143449380993843\n        ,0.147689074277878,0.0421619713306427,0.0346495062112808,0.00349515746347606,0.220319107174873,0.225046843290329,0.240709781646729\n        ,0.40315368771553,0.378050059080124,0.136889830231667,1,0.314606815576553,0.00275175319984555,0.00350375100970268\n        ,0.00223227171227336,0.00326038477942348,0.00345232943072915,0.00327272177673876,0.00360468029975891,0.00282804574817419\n        ,0.00355280679650605,1,1,0.00362786720506847,0.00348612759262323,1,1,1,1,0.00774744292721152,0.0106565840542316,0.00863821338862181\n        ,0.00595487840473652,0.0128081925213337,0.0164071209728718,0.016546867787838,0.25,0.25,1,0.25,0.25,0.25,0.25,0.00147943664342165\n        ,0.00134516227990389,0.0044733015820384,0.00360238761641085,0.00173059292137623,0.00240649236366153,0.00280290725640953\n        ,0.00358973792754114,0.00190061377361417,0.0248462148010731,0.151691138744354,0.101414285600185,0.101350642740726\n        ,0.00352429714985192,0.00175461545586586,0.00108897860627621,0.00120286992751062,0.00216193147934973,0.0918875187635422\n        ,0.0180216785520315,0.00100491382181644,0.00119083886966109,0.00139025796670467,0.00597331812605262,0.00791144277900457\n        ,0.00467343721538782,0.00444712163880467,0.0175031926482916,0.0186443794518709,0.0193254761397839,0.0109613062813878\n        ,0.0139002539217472,0.0153780998662114,0.0041714389808476,0.00452382443472743,0.00202354602515697,0.5,1,0.25,0.25\n        ,0.25,0.25,0.101412929594517,0.5,0.25,0.5,0.5,0.5,0.5,0.0021704516839236,0.00124227663036436,0.00209963205270469,0.00538497371599078\n        ,0.5,0.0101059842854738,0.0141486637294292,0.0122741842642426,0.0101597858592868,0.0116839092224836,0.00574857275933027\n        ,0.00651532784104347,0.00907000526785851,0.00696895597502589,0.0087407324463129,0.00351020158268511,0.00782129820436239\n        ,1,1,1,1,1,1,1,1,0.00179124786518514,0.00472647324204445,0.00530879013240337,0.00628127250820398,0.00882341712713242\n        ,0.00924219656735659,0.00794229563325644,0.0049978494644165,0.0205187033861876,0.00416509388014674,1,1,1,1,1,1,1,1\n        ,0.0047590765170753,0.00339766312390566,1,1,0.00117793213576078,0.0049570444971323,0.004824782256037,0.0124465888366103\n        ,0.0127216335386038,1,1,1,1,0.0186837278306484,0.0140060009434819,0.00721948593854904,1,1,0.00884454976767302,1,0.00395213393494487\n        ,1,0.0116208745166659,0.013472743332386,0.0186006035655737,0.0184362661093473,0.011931050568819,0.0167338736355305\n        ,0.0170167628675699,0.0126416739076376,0.0168435014784336,0.00547084817662835,0.0172698926180601,1,1,1,1,1,1,1,1,1\n        ,1,1,1,1,1,1,1,1,1,1,1,1,1,0.00125138647854328,0.00204948312602937,0.00359823647886515,0.00145057961344719,0.00187749601900578\n        ,0.00122394051868469,0.00116844475269318,0.0013314897660166,0.00126363977324218,0.00163859105668962,0.00136439059861004\n        ,0.00143550056964159,0.00218372559174895,0.00267671863548458,0.00233855727128685,0.00157993321772665,0.00108630012255162\n        ,0.00163278100080788,0.00147458596620709,0.00104575627483428,0.00109344394877553,0.00156189978588372,0.0027174826245755\n        ,1,0.25,0.00419261958450079,0.00326536339707673,0.00335888448171318,0.00118930672761053,0.00312373973429203,0.25,0.00116739247459918\n        ,0.00136812450364232,1,0.0136201335117221,0.0129918465390801,0.0130262523889542,0.0141849555075169,0.0142200998961926\n        ,0.0202176105231047,0.00510521046817303,0.0147238532081246,0.010338207706809,0.00867407489567995,1,1,1,0.00789877492934465\n        ,0.00324751692824066,0.00364983663894236,0.0022549747955054,1,0.00544625706970692,0.00590713182464242,1,1,1,1,1,0.00919234938919544\n        ,0.00692324060946703,0.0103907808661461,0.0123759154230356,0.016865961253643,0.0124860825017095,0.0155578637495637\n        ,0.25,0.25,0.25,0.25,0.25,0.00203575659543276,0.00208194018341601,0.00567516684532166,0.00245430134236813,0.00209734006784856\n        ,0.0054551437497139,0.00334027502685785,0.00234061665832996,0.00376753066666424,0.0190892461687326,0.101087607443333\n        ,0.102376267313957,0.00378289772197604,0.00555694475769997,0.00121506373398006,0.00127516605425626,0.00153478526044637\n        ,0.00121405138634145,0.0919240638613701,0.00373780587688088,0.00167861278168857,0.00223392457701266,0.00221726926974952\n        ,0.0106646819040179,0.00716324429959059,0.0345897115767002,0.00900897104293108,0.0182691775262356,0.00811813399195671\n        ,0.0113305104896426,0.0197549313306808,0.0211176052689552,0.0061979959718883,0.0087542524561286,0.0139151802286506\n        ,0.00718409521505237,0.00402087578549981,0.00166014290880412,0.00292091490700841,0.00405985442921519,0.00209410861134529\n        ,0.00352013343945146,0.5,0.25,0.25,1,0.25,0.25,0.101336054503918,0.5,0.25,0.5,0.5,0.00412551639601588,0.00775624206289649\n        ,0.00404722802340984,0.00429436750710011,0.00155673618428409,0.0014443468535319,0.00130896712653339,0.00134402082767338\n        ,0.0104999812319875,0.0105549236759543,0.0127923814579844,0.0147713171318173,0.0141640063375235,0.011232266202569\n        ,0.01196941267699,0.0103948712348938,0.00805490650236607,0.00575671857222915,0.0102886073291302,0.0108860861510038\n        ,1,1,1,1,1,1,1,1,0.00152104836888611,0.00132340157870203,0.00119240442290902,0.00119349034503102,0.00247540534473956\n        ,0.00618533464148641,0.00595171796157956,0.00725632114335895,0.0107390712946653,0.00959169398993254,0.00815762672573328\n        ,0.00856028590351343,0.00995538290590048,0.0215687062591314,1,1,1,1,1,1,1,1,0.00500578666105866,0.00820006150752306\n        ,0.00368156004697084,1,1,0.00129385036416352,0.00134667137172073,0.00484176818281412,0.00508514931425452,0.0135751375928521\n        ,0.25,1,1,1,1,0.0191637482494116,0.0159182604402304,0.00941314082592726,1,0.00361253484152257,1,1,0.0125703969970346\n        ,0.0191097129136324,0.0188217274844646,0.0150680541992188,0.0141781587153673,0.0193612296134233,0.0181489326059818\n        ,0.0193812530487776,0.0148670021444559,0.00837697088718414,0.0181021224707365,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n        ,0.00221460894681513,0.00483389338478446,0.00995899457484484,0.00166275002993643,0.00107236753683537,0.00141309737227857\n        ,0.00251308549195528,0.00117712223436683,0.00119686732068658,0.00369730149395764,0.00232940819114447,0.00343035673722625\n        ,0.00512200966477394,0.00415379228070378,0.00224908231757581,0.00186692702118307,0.00240918109193444,0.0036583230830729\n        ,0.00148228707257658,0.00362345040775836,0.00243953289464116,0.00497984746471047,0.00342305307276547,0.00419780611991882\n        ,0.00295878807082772,0.00106835423503071,0.00148653844371438,0.00132255384232849,0.00168555148411542,0.00212236680090427\n        ,0.00320635898970068,0.25,0.25,0.00437035784125328,0.00346185616217554,0.00354567030444741,0.00130656303372234,0.00313585111871362\n        ,0.00616921996697783,0.00590131152421236,0.00172159122303128,0.00200400478206575,0.00266929413191974,0.0020909383893013\n        ,0.00145117833744735,0.0025090635754168,0.00256710313260555,0.00129591429140419,0.00128374621272087\n        Transform: 0.0524868350678716,0.0529138509284646,0.997218759939732,0,0.940038672709068,-0.339614138039713,-0.0314568518442159\n        ,0,0.337005086578302,0.939075270948667,-0.0675663372191003,0,-56.3654154323426,21.2906301347447,1.65101161799859,1\n        \n        TransformLink: 0.0524868349406584,0.94003867043068,0.337005085761497,0,0.052913850775869,-0.339614137060317,0.939075268240515,0,0.997218761307028\n        ,-0.0314568518873467,-0.0675663373117412,0,0.18545326968084,60.2682047899057,-0.886519735148667,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ball\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904\n        ,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927\n        ,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950\n        ,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973\n        ,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996\n        ,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019\n        ,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042\n        ,4043,4044,4045,4046,4047,4048,4049,4050,4051,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547\n        ,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570\n        ,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593\n        ,8594,8595,8596,8597,8598,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617\n        ,8618,8619,8620,8623,8628,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648\n        ,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671\n        ,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694\n        ,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717\n        ,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740\n        ,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763\n        ,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786\n        ,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810\n        ,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833\n        ,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856\n        ,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879\n        ,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902\n        ,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925\n        ,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948\n        ,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971\n        ,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994\n        ,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9010,9011,9012,9013,9014,9015,9016,9017,9018\n        ,9019,9020,9021,9022,9023,9024,9025,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044\n        ,9045,9046,9047,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068\n        ,9069,9070,9071,9072,9073,9074,9075,9077,9078,9079,9086,9087,9141,9222,9223,9224,9225,9226,9227,9229,9233,9234,9235\n        ,9238,9241,9242,9243,9244,9245,9246,9247,9248,9249,9251,9252,9253,9254,9255,9256,9257,9258,9260,9261,9262,9264,9265\n        ,9266,9267,9268,9270,9271,9272,9273,9274,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9332\n        ,9333,9334,9335,9336,9338,9339,9344,9345,9347,9348,9349,9354,9355,9356,9357,9369,9370,9371,9372,9383,9384,9385,9386\n        ,9388,9389,9390,9391,9392,9393,9394,9396,9397,9398,9399,9400,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417\n        ,9418,9419,9420,9421,9422,9423,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834\n        ,9835,9836,9837,9838,9839,9840,9841,9901,9902,9903,9904,9905,9906,9907,9908,9923,9924,9925,9926\n        Weights: 0.119809061288834,0.0899978801608086,0.129694148898125,0.157971039414406,0.0655382722616196,0.102676093578339,0.0493819825351238\n        ,0.0801638662815094,0.0396263524889946,0.0630189478397369,0.135046094655991,0.107540957629681,0.11192848533392,0.142919838428497\n        ,0.0843309238553047,0.0852136611938477,0.0635753720998764,0.0593578219413757,0.192490458488464,0.200015053153038,0.162885546684265\n        ,0.191255062818527,0.170955494046211,0.139657527208328,0.176798492670059,0.156122818589211,0.161453932523727,0.0408337861299515\n        ,0.0603096075356007,0.0812023133039474,0.0624551698565483,0.029839189723134,0.0544516630470753,0.054666955024004,0.0336862355470657\n        ,0.0624573267996311,0.0633768364787102,0.0567393265664577,0.0580587983131409,0.0563296005129814,0.0576892644166946\n        ,0.104413233697414,0.0770940035581589,0.0993608608841896,0.118208408355713,0.0997513458132744,0.123212285339832,0.144008576869965\n        ,0.144543543457985,0.125933632254601,0.101286850869656,0.120418056845665,0.0898743644356728,0.082826592028141,0.175235584378242\n        ,0.206051632761955,0.20803314447403,0.287898749113083,0.352314889431,0.320552468299866,0.262158662080765,0.332916170358658\n        ,0.405986249446869,0.319005310535431,0.420205354690552,0.288312464952469,0.414280354976654,0.276978254318237,0.243617594242096\n        ,0.281397551298141,0.316190302371979,0.245399445295334,0.300980687141418,0.194138199090958,0.267054826021194,0.240853235125542\n        ,0.281522959470749,0.253161817789078,0.234090819954872,0.226632595062256,0.261527568101883,0.187547445297241,0.160497680306435\n        ,0.364978283643723,0.263920068740845,0.407592862844467,0.289993405342102,0.17541928589344,0.242737710475922,0.195276826620102\n        ,0.137758135795593,0.269458144903183,0.206763193011284,0.140182182192802,0.129011526703835,0.172453701496124,0.147585853934288\n        ,0.199256956577301,0.148286879062653,0.234329968690872,0.245895057916641,0.216519474983215,0.188423424959183,0.103776790201664\n        ,0.191133603453636,0.185088723897934,0.0749577209353447,0.166032284498215,0.0475209578871727,0.13492988049984,0.0298269018530846\n        ,0.100796863436699,0.0224829353392124,0.141362354159355,0.175193801522255,0.0989582315087318,0.0417463518679142,0.0243088398128748\n        ,0.0775943920016289,0.0157915055751801,0.0797843635082245,0.0186276473104954,0.0958492234349251,0.0739613026380539\n        ,0.0987996235489845,0.313051700592041,0.342331558465958,0.399825572967529,0.411330610513687,0.397170573472977,0.275049090385437\n        ,0.239233568310738,0.211740121245384,0.243876278400421,0.352577656507492,0.388358443975449,0.183568000793457,0.165666341781616\n        ,0.0815498232841492,0.111265502870083,0.0577223934233189,0.042687963694334,0.0341188460588455,0.208152711391449,0.181814447045326\n        ,0.215607687830925,0.150894671678543,0.0531679205596447,0.0347578637301922,0.0246079619973898,0.0286764390766621,0.0848506242036819\n        ,0.113070398569107,0.132778897881508,0.146839424967766,0.326059967279434,0.358287960290909,0.412675321102142,0.427787512540817\n        ,0.424188673496246,0.250109553337097,0.284029006958008,0.265100747346878,0.23208250105381,0.372414231300354,0.417168736457825\n        ,0.202001944184303,0.178038120269775,0.21736142039299,0.148579463362694,0.0343438498675823,0.0178217813372612,0.0483061522245407\n        ,0.0802863091230392,0.0154612669721246,0.00884495582431555,0.024283966049552,0.040769174695015,0.0130178304389119\n        ,0.0205114874988794,0.0153527930378914,0.016140166670084,0.0136747797951102,0.00986284576356411,0.00427819881588221\n        ,0.00722352927550673,0.00711198942735791,0.0163313783705235,0.0112073970958591,0.00929472502321005,0.0253093186765909\n        ,0.0200225468724966,0.0138108003884554,0.00415289960801601,0.00256811967119575,0.00319767044857144,0.0112569211050868\n        ,0.0154976118355989,0.00776961492374539,0.0317798443138599,0.0830756649374962,0.0679816603660584,0.002111661946401\n        ,0.00217902287840843,0.00262391986325383,0.0132161434739828,0.104563571512699,0.126195386052132,0.159771472215652\n        ,0.159212738275528,0.0733592361211777,0.100023798644543,0.1074343547225,0.111484587192535,0.0233124699443579,0.0703045204281807\n        ,0.010179772041738,0.0060359057970345,0.00849007628858089,0.00860253255814314,0.019992146641016,0.00909887067973614\n        ,0.0370676107704639,0.0633366629481316,0.135420516133308,0.120002366602421,0.157945588231087,0.160173356533051,0.060064110904932\n        ,0.0850093364715576,0.084347702562809,0.00733144860714674,0.00175352673977613,0.0131671754643321,0.00396548444405198\n        ,0.0915219038724899,0.138763025403023,0.00711936876177788,0.001887789927423,0.00187672674655914,0.00180047412868589\n        ,0.00188750913366675,0.0146881053224206,0.0102584706619382,0.00863561127334833,0.00683643994852901,0.00424826936796308\n        ,0.00276495539583266,0.0034044929780066,0.00569254253059626,0.00191985000856221,0.0027708294801414,0.00209227530285716\n        ,0.00309577863663435,0.00212210300378501,0.0015722387470305,0.00134062161669135,0.00130497117061168,0.204428568482399\n        ,0.240890353918076,0.215098306536675,0.146842062473297,0.494769752025604,0.494105905294418,0.495395541191101,0.495655655860901\n        ,0.492070853710175,0.493543356657028,0.493890047073364,0.492632776498795,0.435047715902328,0.462608724832535,0.383706748485565\n        ,0.344641864299774,0.235167190432549,0.212380930781364,0.181989669799805,0.345770686864853,0.118253737688065,0.0800283998250961\n        ,0.0991662740707397,0.0648122876882553,0.100251704454422,0.113893955945969,0.0691032484173775,0.154710173606873,0.157654821872711\n        ,0.335175216197968,0.285561293363571,0.411798715591431,0.464162200689316,0.497483104467392,0.497408628463745,0.493552297353745\n        ,0.345870792865753,0.369031637907028,0.495175987482071,0.403188109397888,0.498849123716354,0.497773230075836,0.497934967279434\n        ,0.496349453926086,0.496178597211838,0.498113840818405,0.49652174115181,0.494703501462936,0.493292182683945,0.492458581924438\n        ,0.494420170783997,0.495708435773849,0.49569571018219,0.495479911565781,0.495618104934692,0.493433386087418,0.495421648025513\n        ,0.496160745620728,0.496107131242752,0.418340176343918,0.434583425521851,0.339237004518509,0.31533095240593,0.416455090045929\n        ,0.295802593231201,0.214149355888367,0.201820328831673,0.205367624759674,0.0822143629193306,0.0956392288208008,0.0748522356152534\n        ,0.0653277561068535,0.0626779273152351,0.0779718831181526,0.0524279996752739,0.0528356619179249,0.0511609353125095\n        ,0.0496504344046116,0.0658826380968094,0.0637751594185829,0.0336999036371708,0.0348111018538475,0.00433988263830543\n        ,0.00446385284885764,0.0678059607744217,0.0538580566644669,0.0546310767531395,0.0104043334722519,0.116521611809731\n        ,0.090772956609726,0.0542768314480782,0.0352695845067501,0.0424237586557865,0.0887500420212746,0.153960809111595,0.280644834041595\n        ,0.242277592420578,0.124399460852146,0.495814889669418,0.495124042034149,0.495348423719406,0.464802771806717,0.487164556980133\n        ,0.470115929841995,0.443319916725159,0.49530503153801,0.494781821966171,0.494671732187271,0.494987636804581,0.312596261501312\n        ,0.216291069984436,0.292845606803894,0.348908662796021,0.131920486688614,0.20519183576107,0.495361059904099,0.494524925947189\n        ,0.495436549186707,0.495757460594177,0.496141195297241,0.496870189905167,0.495664089918137,0.381458014249802,0.444033443927765\n        ,0.423699676990509,0.40310999751091,0.31701996922493,0.01352006662637,0.00623834365978837,0.194196224212646,0.0081644132733345\n        ,0.128129526972771,0.00901213102042675,0.0167376678436995,0.108408644795418,0.035431731492281,0.440156221389771,0.377069413661957\n        ,0.158670663833618,0.0304759200662375,0.0383747220039368,0.00827804021537304,0.00587422773241997,0.0275462977588177\n        ,0.00514383288100362,0.00309813022613525,0.00165706186089665,0.00308532593771815,0.00344883580692112,0.00153451645746827\n        ,0.00134903774596751,0.00255205435678363,0.00177448592148721,0.00161401403602213,0.0024589782115072,0.00104652903974056\n        ,0.00126132590230554,0.00246899691410363,0.00533299054950476,0.00599044188857079,0.00394871924072504,0.00192845857236534\n        ,0.0027121368329972,0.494946539402008,0.00399358989670873,0.00302386237308383,0.0626282393932343,0.493795990943909\n        ,0.495063692331314,0.488114684820175,0.495184719562531,0.479027658700943,0.487426996231079,0.49675327539444,0.485897928476334\n        ,0.499118983745575,0.498842120170593,0.498915076255798,0.498471945524216,0.498567849397659,0.497722923755646,0.498795121908188\n        ,0.499147802591324,0.00467635691165924,0.0670545846223831,0.102516353130341,0.171086966991425,0.131708532571793,0.391339808702469\n        ,0.0549012310802937,0.011670021340251,0.112286701798439,0.0454526841640472,0.00833240710198879,0.0372853241860867\n        ,0.00577836437150836,0.220962136983871,0.112559981644154,0.051339328289032,0.0841941982507706,0.494763672351837,0.494477927684784\n        ,0.496494054794312,0.117242857813835,0.49773570895195,0.225124195218086,0.0650158226490021,0.498591303825378,0.197639212012291\n        ,0.00366536597721279,0.0026983511634171,0.485027343034744,0.00510318018496037,0.0358083508908749,0.155403360724449\n        ,0.154275134205818,0.122542470693588,0.291669100522995,0.153436154127121,0.152971222996712,0.323384523391724,0.164903864264488\n        ,0.211265802383423,0.21014766395092,0.25732234120369,0.259123921394348,0.24392506480217,0.26708647608757,0.259630799293518\n        ,0.213490962982178,0.158189788460732,0.158966541290283,0.147020593285561,0.189305245876312,0.176712840795517,0.13990107178688\n        ,0.154465168714523,0.182679980993271,0.122141182422638,0.154182508587837,0.173029288649559,0.185888528823853,0.215016633272171\n        ,0.153718262910843,0.19850005209446,0.22823129594326,0.147075280547142,0.186001405119896,0.158042415976524,0.192552268505096\n        ,0.233826741576195,0.302742838859558,0.274362176656723,0.202020406723022,0.248197495937347,0.187687203288078,0.230491310358047\n        ,0.270352780818939,0.172357693314552,0.142427876591682,0.177623927593231,0.216424167156219,0.177695736289024,0.49823185801506\n        ,0.497802197933197,0.493438005447388,0.497677952051163,0.499043405056,0.498800069093704,0.480737179517746,0.473599851131439\n        ,0.499872356653214,0.499278098344803,0.499828666448593,0.499938815832138,0.499490469694138,0.428288877010345,0.298123270273209\n        ,0.498219937086105,0.4974305331707,0.498798072338104,0.498037666082382,0.498205900192261,0.484404802322388,0.48499321937561\n        ,0.456718504428864,0.499969571828842,0.499186664819717,0.499278783798218,0.426042973995209,0.454804599285126,0.49847537279129\n        ,0.494693696498871,0.494539827108383,0.494640290737152,0.49461504817009,0.498110502958298,0.498928993940353,0.499923974275589\n        ,0.499071568250656,0.494272619485855,0.496581465005875,0.46791198849678,0.475545167922974,0.412802815437317,0.393669903278351\n        ,0.499435722827911,0.499883413314819,0.497263044118881,0.495622754096985,0.494674980640411,0.497017949819565,0.498391449451447\n        ,0.498559087514877,0.490382015705109,0.499798029661179,0.497542917728424,0.467545807361603,0.391185462474823,0.422848254442215\n        ,0.482203125953674,0.49771437048912,0.498413652181625,0.499226033687592,0.499752223491669,0.494891762733459,0.495065748691559\n        ,0.495090305805206,0.494971811771393,0.497306615114212,0.494864940643311,0.494124948978424,0.494882583618164,0.492664277553558\n        ,0.484863072633743,0.479086011648178,0.437741309404373,0.471439510583878,0.429207265377045,0.474411964416504,0.453916072845459\n        ,0.479357570409775,0.40096178650856,0.372501075267792,0.425279170274735,0.368588149547577,0.416071623563766,0.398315280675888\n        ,0.304622709751129,0.434937685728073,0.446757704019547,0.470192223787308,0.435698121786118,0.488551676273346,0.497512698173523\n        ,0.46674171090126,0.476854473352432,0.48199325799942,0.480819195508957,0.402228116989136,0.166978493332863,0.147668540477753\n        ,0.137913808226585,0.00371660990640521,0.0360510423779488,0.0051951096393168,0.142808973789215,0.0712238401174545\n        ,0.0408410467207432,0.0475897714495659,0.147152066230774,0.188807547092438,0.172839537262917,0.00292108580470085,0.00229511526413262\n        ,0.00176306103821844,0.00133823312353343,0.00133625592570752,0.00191617012023926,0.00224431487731636,0.00722364755347371\n        ,0.0104683004319668,0.0168343223631382,0.0028557509649545,0.00251159467734396,0.00577683001756668,0.00345012429170311\n        ,0.00296396017074585,0.00282692280597985,0.0128484172746539,0.0095820389688015,0.00735749956220388,0.00728109432384372\n        ,0.00222123926505446,0.00233622593805194,0.00484567414969206,0.00572063308209181,0.0406887419521809,0.0657581984996796\n        ,0.067342184484005,0.0861546471714973,0.0813479200005531,0.125508472323418,0.00697338348254561,0.0218249130994082\n        ,0.00429057935252786,0.00421941420063376,0.00140310742426664,0.00193769996985793,0.00202646269463003,0.00154978304635733\n        ,0.00140596809796989,0.00627871742472053,0.00652931304648519,0.00638186885043979,0.0052344617433846,0.00497622787952423\n        ,0.00719883758574724,0.0146173173561692,0.00557320425286889,0.00636823568493128,0.00689202733337879,0.00697624310851097\n        ,0.00970681756734848,0.0112742707133293,0.00393346231430769,0.00402365624904633,0.00522507447749376,0.00604073889553547\n        ,0.00587788922712207,0.00498025165870786,0.00626034289598465,0.00972524099051952,0.00114239507820457,0.00111113348975778\n        ,0.00414171675220132,0.00236102729104459,0.00183009263128042,0.00206261011771858,0.00431667268276215,0.00359163619577885\n        ,0.00402410188689828,0.00112126138992608,0.00112171703949571,0.00105882645584643,0.0145033225417137,0.0118997758254409\n        ,0.00529940519481897,0.00493975775316358,0.0143253924325109,0.0182842966169119,0.00492833275347948,0.00116543157491833\n        ,0.00208847760222852,0.00127227208577096,0.00117679627146572,0.0010990530718118,0.00108396471478045,0.00175433943513781\n        ,0.00203517079353333,0.00282048876397312,0.00822119135409594,0.00263078394345939,0.00141910591628402,0.00192295201122761\n        ,0.00138450774829835,0.00150411960203201,0.00203976663760841,0.00228403392247856,0.00198729173280299,0.00215014256536961\n        ,0.00130972138140351,0.00220602191984653,0.00217434973455966,0.00222587212920189,0.00128076423425227,0.003685612231493\n        ,0.00424104742705822,0.0036343524698168,0.00437509920448065,0.00102109019644558,0.0035608890466392,0.00179338501766324\n        ,0.00302712712436914,0.00102148356381804,0.00169268297031522,0.00118136254604906,0.00139748852234334,0.00162950914818794\n        ,0.0013056379975751,0.00101929879747331,0.00140442245174199,0.00219127861782908,0.00270291790366173,0.00329401204362512\n        ,0.00326476339250803,0.00271518155932426,0.00183340918738395,0.00250248983502388,0.00276692444458604,0.00340437423437834\n        ,0.00259506911970675,0.00460862275213003,0.00593590689823031,0.00691225472837687,0.00340974167920649,0.00509058265015483\n        ,0.00112110888585448,0.00121387781109661,0.0169682279229164,0.00548749091103673,0.00543259875848889,0.0201374050229788\n        ,0.0169682689011097,0.0109495837241411,0.00279454910196364,0.00127399724442512,0.00247281650081277,0.00270849862135947\n        ,0.00316046690568328,0.00136727222707123,0.00219548284076154,0.00320045603439212,0.00428038323298097,0.00147910148371011\n        ,0.00178130087442696,0.00333713716827333,0.0066437222994864,0.0122147183865309,0.0129707679152489,0.00197774101980031\n        ,0.00191754603292793,0.00388525449670851,0.00632278667762876,0.00660149846225977,0.00896979309618473,0.00456717424094677\n        ,0.00206927349790931,0.00231582089327276,0.00252133025787771,0.00406703725457191,0.00486808829009533,0.00824273750185966\n        ,0.00917720515280962,0.00850125029683113,0.0078301252797246,0.00287978257983923,0.00298473541624844,0.00218153605237603\n        ,0.00340549414977431,0.00411564903333783,0.00403880747035146,0.00348933646455407,0.00343293184414506,0.0105488328263164\n        ,0.0172855090349913,0.0181334689259529,0.017433799803257,0.01199746504426,0.00992203690111637,0.00504820328205824\n        ,0.00421494618058205,0.0042849900200963,0.00263979216106236,0.00343404896557331,0.00158844341058284,0.00203547044657171\n        ,0.00423127179965377,0.00304207019507885,0.00291611929424107,0.00767210964113474,0.00936917960643768,0.00764511292800307\n        ,0.00547787873074412,0.00499632721766829,0.00369138456881046,0.00168789469171315,0.00615179724991322,0.0075200037099421\n        ,0.00723410304635763,0.00540610775351524,0.0049501764588058,0.00335015472956002,0.00170559796970338,0.0010561659000814\n        ,0.00194478419143707,0.0029250062070787,0.00340850092470646,0.00362419104203582\n        Transform: 0.255589736853964,-0.0564818010109387,-0.965134033467747,0,0.191954145948709,0.981381637988871,-0.00659877056532776\n        ,0,0.94753756318427,-0.183574891667538,0.261673019249779,0,-6.70568177723435,2.10466317765816,9.65255217683966,1\n        TransformLink: 0.255589751837361,0.191954157201607,0.947537618731615,0,-0.0564818092528826,0.981381781194155,-0.183574918455175,0\n        ,-0.965134018668391,-0.00659877046414227,0.261673015237287,0,11.1487851983253,-0.7145996278846,4.21443668153796,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Ball\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734\n        ,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757\n        ,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780\n        ,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803\n        ,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826\n        ,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849\n        ,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872\n        ,3873,3874,3875,3876,3877,3878,3879,3880,3881,7592,7593,7647,7727,7728,7729,7730,7731,7732,7734,7735,7737,7740,7741\n        ,7743,7744,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7758,7759,7760,7762,7763,7764,7765,7766,7768,7769\n        ,7770,7771,7772,7775,7776,7777,7778,7779,7780,7781,7782,7824,7825,7826,7827,7829,7839,7840,7841,7842,7843,7844,7845\n        ,7846,7857,7858,7871,7872,7874,7875,7876,7877,7879,7880,7881,7901,7902,7904,7905,7906,7907,7973,7974,7975,7976,7977\n        ,7978,7979,7980,7981,7982,7983,7985,7986,7987,7988,7989,7990,7991,7994,8001,8002,8003,8004,8005,8006,8007,8008,8009\n        ,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032\n        ,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055\n        ,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079\n        ,8080,8081,8082,8083,8084,8085,8086,8087,8090,8095,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110\n        ,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133\n        ,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156\n        ,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179\n        ,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202\n        ,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225\n        ,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248\n        ,8249,8250,8251,8252,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273\n        ,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296\n        ,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319\n        ,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342\n        ,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365\n        ,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388\n        ,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411\n        ,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434\n        ,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457\n        ,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8477,8478,8479,8480,8481\n        ,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507\n        ,8508,8509,8510,8511,8512,8513,8514,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531\n        ,8532,8533,9873,9879,9880,9895,9896,9897,9898,9899,9900\n        Weights: 0.123883679509163,0.0943474769592285,0.134961158037186,0.162639766931534,0.0697063133120537,0.108251556754112,0.0524033196270466\n        ,0.0847631022334099,0.0409382507205009,0.0650418773293495,0.14041543006897,0.113288789987564,0.118082284927368,0.148398548364639\n        ,0.0891185849905014,0.0906334742903709,0.0656642466783524,0.0616054534912109,0.198496952652931,0.205138891935349,0.167858138680458\n        ,0.198637783527374,0.178409427404404,0.143416181206703,0.18131497502327,0.159762680530548,0.166233062744141,0.0380784012377262\n        ,0.0574136562645435,0.0774901211261749,0.0586475282907486,0.0280960090458393,0.0517396591603756,0.0539015904068947\n        ,0.033189844340086,0.0585433878004551,0.0591700300574303,0.0535746328532696,0.0552171356976032,0.0553255528211594\n        ,0.0569242052733898,0.0996541529893875,0.0730480924248695,0.0954719707369804,0.114045724272728,0.0943200141191483\n        ,0.118832118809223,0.142830416560173,0.142114534974098,0.121966376900673,0.0975252166390419,0.118137270212173,0.0873210653662682\n        ,0.0790054202079773,0.179913774132729,0.21073853969574,0.212490528821945,0.293317466974258,0.356615632772446,0.324366360902786\n        ,0.26684308052063,0.339021861553192,0.41007000207901,0.326832801103592,0.424576759338379,0.293492197990417,0.417733579874039\n        ,0.282556712627411,0.249511927366257,0.288817554712296,0.32280421257019,0.255000025033951,0.309341222047806,0.199754640460014\n        ,0.272426426410675,0.245370149612427,0.284887552261353,0.258011996746063,0.239316925406456,0.221955522894859,0.255657911300659\n        ,0.181189134716988,0.155432507395744,0.362362623214722,0.259469360113144,0.408041507005692,0.289074867963791,0.169036522507668\n        ,0.237904220819473,0.189767897129059,0.131405979394913,0.268256455659866,0.205114126205444,0.135546118021011,0.123717814683914\n        ,0.170050665736198,0.143152132630348,0.196216776967049,0.143190503120422,0.239085361361504,0.249148860573769,0.219918861985207\n        ,0.191812127828598,0.10781441628933,0.196348652243614,0.191489323973656,0.0791347473859787,0.17438517510891,0.0512946061789989\n        ,0.143159300088882,0.032307855784893,0.104688346385956,0.0235143061727285,0.144969567656517,0.178616628050804,0.0947948545217514\n        ,0.0392751023173332,0.0221151169389486,0.0722370743751526,0.0144961653277278,0.0750427767634392,0.0181457158178091\n        ,0.0943982899188995,0.0716638267040253,0.0967202931642532,0.317489057779312,0.347536385059357,0.404977738857269,0.417175382375717\n        ,0.40199014544487,0.27864933013916,0.242633402347565,0.206443920731544,0.236668929457664,0.348675906658173,0.388408333063126\n        ,0.18049268424511,0.163328364491463,0.0857354551553726,0.11523699015379,0.061653770506382,0.0454688034951687,0.0353203043341637\n        ,0.211448967456818,0.185158059000969,0.218788504600525,0.154455900192261,0.0504671223461628,0.0322298295795918,0.0230359863489866\n        ,0.0282043348997831,0.0824511051177979,0.11091822385788,0.130749419331551,0.144796341657639,0.329870730638504,0.362595438957214\n        ,0.416694194078445,0.432004392147064,0.427564829587936,0.253307223320007,0.287334799766541,0.259040862321854,0.227359682321548\n        ,0.369799613952637,0.41771399974823,0.1991196423769,0.175765603780746,0.220586806535721,0.146419927477837,0.0011718375608325\n        ,0.00114911294076592,0.00105914357118309,0.0153474509716034,0.0122399032115936,0.0149848219007254,0.0193942412734032\n        ,0.00106044148560613,0.00466891191899776,0.00221512629650533,0.00135503942146897,0.00115020526573062,0.00108056294266135\n        ,0.00109034439083189,0.00207694387063384,0.00295530282892287,0.00277027534320951,0.00150005717296153,0.00204197620041668\n        ,0.00146311393473297,0.00159478781279176,0.00215208088047802,0.00239511393010616,0.0021059256978333,0.00226955814287066\n        ,0.00137146469205618,0.00229739327915013,0.00227435654960573,0.0023139282129705,0.00133925990667194,0.00385013013146818\n        ,0.00441626738756895,0.0037888044025749,0.00454087881371379,0.00103383034002036,0.00362318963743746,0.00181189889553934\n        ,0.00308391591534019,0.00103167560882866,0.00170974782668054,0.00116305600386113,0.00138921814505011,0.00162649981211871\n        ,0.00129095150623471,0.00543705886229873,0.00679957866668701,0.0100675327703357,0.00103019457310438,0.00853319466114044\n        ,0.0043475697748363,0.00240783137269318,0.00915769953280687,0.00508745852857828,0.0159079786390066,0.00173971964977682\n        ,0.00541352434083819,0.00204087933525443,0.0211878269910812,0.0177388042211533,0.0112950056791306,0.00260227895341814\n        ,0.00253498554229736,0.00296481139957905,0.00295078824274242,0.00396276684477925,0.0129204485565424,0.0137165049090981\n        ,0.00469488883391023,0.00100137270055711,0.0065825660713017,0.00890141911804676,0.00356663577258587,0.00293150614015758\n        ,0.00308286678045988,0.00346310110762715,0.00427238317206502,0.00420571630820632,0.00364589900709689,0.0032017685007304\n        ,0.0104739516973495,0.0177482850849628,0.0189338531345129,0.0184334814548492,0.0127803916111588,0.0105676529929042\n        ,0.00754354521632195,0.00418343627825379,0.00245327991433442,0.00314569845795631,0.00392649602144957,0.00278305215761065\n        ,0.00265763350762427,0.00431641656905413,0.00809456873685122,0.00984568707644939,0.00806601252406836,0.00101106090005487\n        ,0.00756782200187445,0.0368285477161407,0.0192880965769291,0.0506718531250954,0.0835918933153152,0.0164523981511593\n        ,0.00966632552444935,0.0230161529034376,0.039513636380434,0.0122059863060713,0.0210127718746662,0.0151477660983801\n        ,0.0165873803198338,0.0147293750196695,0.0106907756999135,0.00464768800884485,0.00788442604243755,0.00767996162176132\n        ,0.0167933069169521,0.0118056312203407,0.00999381858855486,0.0271462593227625,0.0211340580135584,0.0145684257149696\n        ,0.00375504838302732,0.00230848137289286,0.00293680862523615,0.010424873791635,0.014182603918016,0.00704707158729434\n        ,0.0299934018403292,0.0809231996536255,0.066321037709713,0.00189393514301628,0.00199611950665712,0.00235355575568974\n        ,0.0124866124242544,0.107536680996418,0.129518747329712,0.162986248731613,0.162497103214264,0.0756997019052505,0.0983090773224831\n        ,0.105313710868359,0.109496608376503,0.0254768114537001,0.0736321210861206,0.0109011856839061,0.00591598078608513\n        ,0.00877636671066284,0.00925613380968571,0.0185419302433729,0.00858956202864647,0.0360243357717991,0.0613816678524017\n        ,0.138574033975601,0.123591922223568,0.161576002836227,0.163661375641823,0.0621361434459686,0.0834685415029526,0.0823424607515335\n        ,0.0064245336689055,0.00196025124751031,0.0144897121936083,0.00350574846379459,0.0897016227245331,0.141786113381386\n        ,0.00172246783040464,0.0016761178849265,0.00164095626678318,0.00172228494193405,0.0151265971362591,0.0108278458938003\n        ,0.00930141005665064,0.00738859688863158,0.00444578099995852,0.00279078749008477,0.0034543676301837,0.00593799585476518\n        ,0.00181633280590177,0.00264560710638762,0.0021140007302165,0.00326533592306077,0.00226045935414732,0.00158813130110502\n        ,0.00125915941316634,0.00140132789965719,0.206268981099129,0.242492392659187,0.216538220643997,0.148466512560844,0.494710594415665\n        ,0.494018644094467,0.495431184768677,0.495684057474136,0.491640150547028,0.493156641721725,0.493532657623291,0.492237329483032\n        ,0.436618506908417,0.463279128074646,0.385892689228058,0.347750276327133,0.237941667437553,0.215587124228477,0.184324011206627\n        ,0.349386662244797,0.119256816804409,0.0809679850935936,0.100759044289589,0.064699612557888,0.100251354277134,0.113563232123852\n        ,0.0685979872941971,0.152892902493477,0.156757727265358,0.333477854728699,0.282245606184006,0.410026401281357,0.464278131723404\n        ,0.497591882944107,0.497499942779541,0.494036823511124,0.341065794229507,0.3653284907341,0.495653241872787,0.401004016399384\n        ,0.499008297920227,0.497864127159119,0.498020023107529,0.496375501155853,0.496211588382721,0.49818554520607,0.496551722288132\n        ,0.494357407093048,0.49289858341217,0.492176055908203,0.494054555892944,0.495537310838699,0.495428442955017,0.495201587677002\n        ,0.495444416999817,0.493240684270859,0.495095014572144,0.495912224054337,0.495938241481781,0.420695513486862,0.436345547437668\n        ,0.342597186565399,0.319157987833023,0.419052869081497,0.300165265798569,0.217813968658447,0.205603912472725,0.208605021238327\n        ,0.0836873129010201,0.0971802547574043,0.0761817321181297,0.0662169381976128,0.0635233893990517,0.0789075344800949\n        ,0.0527386218309402,0.0531285107135773,0.0510307252407074,0.0495729967951775,0.0662362426519394,0.0636715367436409\n        ,0.0335692539811134,0.0344211980700493,0.00413668062537909,0.00437222234904766,0.0673914477229118,0.0534001886844635\n        ,0.0532169044017792,0.00969782378524542,0.115410067141056,0.0894881039857864,0.0497617162764072,0.032301552593708\n        ,0.0395700857043266,0.0833647176623344,0.152233555912972,0.277294039726257,0.237761244177818,0.122256495058537,0.495742470026016\n        ,0.495044946670532,0.495270699262619,0.466927647590637,0.487584829330444,0.471465349197388,0.446353495121002,0.495112806558609\n        ,0.494484156370163,0.494385927915573,0.494777828454971,0.319564700126648,0.226902171969414,0.303202927112579,0.355490446090698\n        ,0.142050608992577,0.21855191886425,0.495411992073059,0.494442224502563,0.49536070227623,0.495829224586487,0.496245741844177\n        ,0.496983617544174,0.495706379413605,0.378789126873016,0.443236827850342,0.423344552516937,0.402129530906677,0.31354683637619\n        ,0.011792303994298,0.00541512854397297,0.19114363193512,0.00818456895649433,0.128277137875557,0.00999050214886665\n        ,0.0189298521727324,0.114223763346672,0.039101779460907,0.440741151571274,0.37799397110939,0.167534962296486,0.0324885621666908\n        ,0.0405340492725372,0.00877480115741491,0.00628257403150201,0.0294434521347284,0.00551354372873902,0.00340866087935865\n        ,0.00176740461029112,0.00323679530993104,0.00361410598270595,0.00155600626021624,0.00130048347637057,0.00259213359095156\n        ,0.00172662572003901,0.00157643074635416,0.00248960056342185,0.00115798017941415,0.00232840934768319,0.00483620120212436\n        ,0.00623246934264898,0.00413015903905034,0.00187641440425068,0.00264824088662863,0.49486768245697,0.00406678952276707\n        ,0.00307907885871828,0.0669666975736618,0.49384468793869,0.494718581438065,0.488878607749939,0.494964092969894,0.480413794517517\n        ,0.488142460584641,0.497017651796341,0.486521184444427,0.499210506677628,0.498955190181732,0.499020576477051,0.498609274625778\n        ,0.498691350221634,0.497828960418701,0.498702019453049,0.49905851483345,0.00422780960798264,0.0673873871564865,0.10294995456934\n        ,0.177105605602264,0.137693867087364,0.395283669233322,0.0561339296400547,0.0122799724340439,0.115378007292748,0.0461952723562717\n        ,0.00862376298755407,0.0375786609947681,0.00586434034630656,0.216012254357338,0.11050571501255,0.0510124005377293\n        ,0.0829584822058678,0.494458675384521,0.494277447462082,0.496937960386276,0.116042479872704,0.49787762761116,0.230708613991737\n        ,0.0622754171490669,0.498603701591492,0.196535959839821,0.00369277526624501,0.00272378325462341,0.486099720001221\n        ,0.00512532843276858,0.0359800010919571,0.155941724777222,0.15468767285347,0.122875675559044,0.292145252227783,0.153312966227531\n        ,0.153439074754715,0.327097982168198,0.166516363620758,0.211425349116325,0.210624262690544,0.257879346609116,0.259329915046692\n        ,0.245208442211151,0.268495231866837,0.260577201843262,0.214291036128998,0.158475875854492,0.158776104450226,0.147456109523773\n        ,0.189878731966019,0.177501514554024,0.140640020370483,0.154655635356903,0.182721480727196,0.122265093028545,0.154412239789963\n        ,0.174505144357681,0.18732276558876,0.216400906443596,0.154486611485481,0.199397787451744,0.229595214128494,0.148008167743683\n        ,0.186971351504326,0.158650085330009,0.193919911980629,0.235914066433907,0.304533690214157,0.276103556156158,0.203738644719124\n        ,0.249767139554024,0.189385861158371,0.232027933001518,0.272078543901443,0.173341989517212,0.143333211541176,0.178553134202957\n        ,0.2178645581007,0.17926512658596,0.498079359531403,0.49764558672905,0.493476301431656,0.497497260570526,0.499024957418442\n        ,0.498812049627304,0.481438368558884,0.475040018558502,0.499892085790634,0.499295592308044,0.499847054481506,0.49994283914566\n        ,0.49948513507843,0.428521871566772,0.300684005022049,0.49810403585434,0.497266590595245,0.498697310686111,0.497886002063751\n        ,0.498042225837708,0.485606074333191,0.485793232917786,0.458712071180344,0.499973088502884,0.499091774225235,0.499190449714661\n        ,0.4280044734478,0.457346051931381,0.498326450586319,0.494596093893051,0.494365692138672,0.494462668895721,0.494515120983124\n        ,0.497997492551804,0.498909473419189,0.499929428100586,0.498976171016693,0.494624406099319,0.497181087732315,0.469323992729187\n        ,0.476944506168365,0.415308624505997,0.395580261945724,0.49943020939827,0.499888569116592,0.497349143028259,0.495646834373474\n        ,0.494615614414215,0.497360795736313,0.498536199331284,0.498701572418213,0.490914940834045,0.499821990728378,0.497986912727356\n        ,0.468328773975372,0.391963601112366,0.422747701406479,0.482745617628098,0.497819513082504,0.498537451028824,0.499243289232254\n        ,0.499773025512695,0.494683772325516,0.494805634021759,0.49482062458992,0.494760543107986,0.497144222259521,0.49457660317421\n        ,0.493789881467819,0.49458646774292,0.492286801338196,0.484647452831268,0.479186058044434,0.438782334327698,0.471755683422089\n        ,0.431316256523132,0.475486993789673,0.456324309110641,0.479926824569702,0.405071496963501,0.380229324102402,0.42947643995285\n        ,0.374703049659729,0.421711415052414,0.402480840682983,0.300346851348877,0.43937224149704,0.450042575597763,0.471916079521179\n        ,0.439534783363342,0.489101856946945,0.497698903083801,0.467224955558777,0.477341830730438,0.482211530208588,0.480961859226227\n        ,0.408277362585068,0.171835973858833,0.153058439493179,0.143804714083672,0.0037693683989346,0.0362889654934406,0.00525405537337065\n        ,0.148268163204193,0.0683703571557999,0.0376599505543709,0.0445618219673634,0.146970078349113,0.188869208097458,0.17760506272316\n        ,0.00288582826033235,0.00225157150998712,0.0017316211014986,0.0013067068066448,0.00132562627550215,0.00190999440383166\n        ,0.00226044724695385,0.00784262921661139,0.0112750744447112,0.0173067096620798,0.00262815481983125,0.00226460210978985\n        ,0.00602485751733184,0.00349772814661264,0.00292510050348938,0.00269699073396623,0.0135289803147316,0.0103104831650853\n        ,0.00794037710875273,0.00787316635251045,0.00202853791415691,0.00213485443964601,0.00454540317878127,0.00540296733379364\n        ,0.040046576410532,0.0651715472340584,0.0666946023702621,0.0855960696935654,0.080752395093441,0.125129029154778,0.00638666842132807\n        ,0.0207076445221901,0.00387939042411745,0.00382913649082184,0.0012292229803279,0.00178197433706373,0.0018641147762537\n        ,0.0013992638560012,0.00126466911751777,0.00674807792529464,0.00701502803713083,0.00686094397678971,0.00567869283258915\n        ,0.00544988224282861,0.007870820350945,0.0157495457679033,0.00552460039034486,0.00631229672580957,0.00680046249181032\n        ,0.00684428494423628,0.00933710113167763,0.0106857251375914,0.00361652881838381,0.00433071563020349,0.00556861003860831\n        ,0.00640778755769134,0.00623950036242604,0.00100142590235919,0.00236925226636231,0.00223838444799185,0.00389867951162159\n        ,0.00501776812598109,0.00396161805838346,0.00699444627389312,0.00672429939731956,0.00506741041317582\n        Transform: -0.255586654162105,0.0564839064701451,-0.965134710701333,0,0.191954875668087,0.981381489803619,0.00660131789598748\n        ,0,0.947538261415516,-0.183575097990927,-0.261670390290558,0,-6.68650920068585,2.10042577148026,-9.58014889758636\n        ,1\n        TransformLink: -0.255586662104494,0.19195488163311,0.947538290860393,0,0.0564839134277388,0.98138161068856,-0.183575120603402,0,-0.965134729663024\n        ,0.00660131802568145,-0.261670395431512,0,-11.0737572515755,-0.714569534984361,4.21446806383396,1\n    }\n    Deformer: \"SubDeformer::Cluster_Head\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 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\n        ,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\n        ,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113\n        ,114,115,116,117,118,119,120,121,125,126,127,129,130,131,132,133,134,135,136,140,141,142,145,146,147,151,152,153,154\n        ,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,172,173,174,175,176,177,178,179,180,181,182,183,184,185\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,331,332,333,334,335,336,337,338,339,341,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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\n        ,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,1000\n        ,1001,1002,1003,1004,1005,1006,1007,1008,1009,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024\n        ,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047\n        ,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070\n        ,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093\n        ,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116\n        ,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139\n        ,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162\n        ,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185\n        ,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208\n        ,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231\n        ,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254\n        ,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277\n        ,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300\n        ,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323\n        ,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346\n        ,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369\n        ,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392\n        ,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415\n        ,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438\n        ,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461\n        ,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484\n        ,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507\n        ,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530\n        ,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1556,1557\n        ,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580\n        ,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603\n        ,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626\n        ,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649\n        ,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672\n        ,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695\n        ,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718\n        ,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1732,1733,1734,1746,1747,1748,1749,1750,1751,1752,1753\n        ,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776\n        ,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1800,1801,1802,1803,1804,1805,1806,1807,1808,1810\n        ,1811,1813,1814,1815,1816,1821,1822,1823,1825,1827,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842\n        ,1843,1844,1845,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869\n        ,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892\n        ,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915\n        ,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938\n        ,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961\n        ,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984\n        ,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2009,2010\n        ,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033\n        ,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056\n        ,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079\n        ,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102\n        ,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125\n        ,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148\n        ,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171\n        ,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194\n        ,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217\n        ,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240\n        ,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263\n        ,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286\n        ,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309\n        ,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332\n        ,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355\n        ,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378\n        ,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401\n        ,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424\n        ,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447\n        ,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470\n        ,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493\n        ,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516\n        ,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539\n        ,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562\n        ,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585\n        ,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608\n        ,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631\n        ,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654\n        ,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2678\n        ,2679,2680,2681,2682,2683,2684,2685,2686,2687,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702\n        ,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725\n        ,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748\n        ,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771\n        ,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794\n        ,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817\n        ,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840\n        ,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863\n        ,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886\n        ,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909\n        ,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932\n        ,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955\n        ,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978\n        ,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001\n        ,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024\n        ,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047\n        ,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070\n        ,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093\n        ,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116\n        ,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139\n        ,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162\n        ,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185\n        ,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208\n        ,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233\n        ,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256\n        ,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279\n        ,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302\n        ,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325\n        ,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348\n        ,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371\n        ,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394\n        ,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3409,3410,3411,3423,3424,3425,3426,3427,3428,3429\n        ,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452\n        ,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3476,3477,3478,3479,3480,3481,3482,3483,3484\n        ,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507\n        ,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530\n        ,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553\n        ,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576\n        ,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599\n        ,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622\n        ,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645\n        ,3646,3647,5303,5304,5305,5306,5309,5314,5319,5371,5372,5373,5380,5382,5383,5403,5730,5802,5803,5804,5811,5813,5814\n        ,6487,10083,10482\n        Weights: 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\n        ,1,1,1,1,1,1,1,1,0.999999761581421,1,1,1,0.999769389629364,0.997745931148529,0.997007310390472,0.999988436698914,1\n        ,1,1,1,1,1,1,1,1,1,1,1,1,0.999866485595703,0.999976813793182,0.99999737739563,1,1,1,1,1,0.348414063453674,0.296818614006042\n        ,0.999929845333099,0.992260038852692,0.986605584621429,0.999526262283325,1,1,1,1,1,0.996576905250549,0.999679207801819\n        ,0.462966173887253,0.405808210372925,0.933403789997101,1,1,1,0.99883645772934,1,1,1,0.999987483024597,0.999998390674591\n        ,0.997568309307098,0.99861341714859,1,1,0.99993509054184,0.305174469947815,0.335230082273483,0.277147561311722,0.357239037752151\n        ,0.382363498210907,0.40365344285965,0.362462073564529,0.300854951143265,0.246836096048355,0.32552570104599,0.262969672679901\n        ,0.284158438444138,0.215933471918106,0.345835387706757,0.960699081420898,0.880206704139709,0.938635408878326,0.956660568714142\n        ,0.877048552036285,0.876426160335541,0.886230409145355,0.936781227588654,0.95302551984787,0.884782373905182,0.946100473403931\n        ,0.892827928066254,0.450425446033478,0.878755748271942,0.932442188262939,0.37913653254509,0.407037675380707,0.415984898805618\n        ,0.259030967950821,0.293490946292877,0.417256742715836,0.340245813131332,0.36240941286087,0.411219507455826,0.977936863899231\n        ,0.967643797397614,0.892272353172302,0.968207836151123,0.960449576377869,0.945745766162872,0.987939298152924,0.982316374778748\n        ,0.978387355804443,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,0.999999821186066,0.996214628219604,0.988707542419434\n        ,0.986609518527985,0.995532214641571,0.973644018173218,0.969042003154755,0.9631507396698,0.984441816806793,0.994842827320099\n        ,1,0.999999821186066,1,0.999999701976776,1,1,0.999998331069946,0.99999988079071,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n        ,1,1,0.999999821186066,0.999997019767761,0.999997437000275,0.999985814094543,0.999905824661255,0.999983549118042,0.9999960064888\n        ,0.999999046325684,0.999969482421875,0.999965369701386,0.999825537204742,0.999794542789459,0.999993860721588,0.999995291233063\n        ,0.999958753585815,0.999951481819153,0.999996781349182,0.999967575073242,0.999789297580719,0.999749004840851,0.999708235263824\n        ,0.999999642372131,0.99999988079071,0.999999523162842,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.990536689758301,0.992207109928131\n        ,0.996704638004303,0.99727863073349,0.998484134674072,0.994708299636841,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.999999701976776\n        ,1,1,1,1,1,1,1,1,1,1,1,0.999996781349182,0.999999821186066,0.999968290328979,0.999798536300659,0.989763081073761,0.996523678302765\n        ,0.976127862930298,0.998997271060944,0.998805344104767,0.998647511005402,0.999073028564453,0.999054372310638,0.999225318431854\n        ,0.999512612819672,0.999987304210663,0.999918818473816,0.993115425109863,0.987185597419739,0.999241054058075,0.997129917144775\n        ,0.131196677684784,0.925822734832764,0.907572150230408,0.972595036029816,0.861486613750458,1,1,1,1,1,1,1,1,1,1,1,1\n        ,1,1,1,1,1,1,1,1,1,1,0.420260190963745,0.554195642471313,0.489969193935394,0.700962424278259,0.748266160488129,0.622093796730042\n        ,0.301548063755035,0.349999994039536,0.150000005960464,0.25,0.100000001490116,0.025000000372529,0.25,0.25,0.837520956993103\n        ,0.837526202201843,0.76023530960083,0.882980525493622,0.899999976158142,0.685573697090149,0.557134389877319,0.349999994039536\n        ,0.620917081832886,0.899999976158142,0.997061192989349,0.999017417430878,0.990700721740723,0.997014939785004,0.992497980594635\n        ,0.997990012168884,0.998118996620178,0.992173731327057,0.977280378341675,0.977026402950287,0.951838552951813,0.944853127002716\n        ,0.893962979316711,0.966057240962982,1,0.974265038967133,0.941445469856262,0.889961361885071,0.999450743198395,0.999087393283844\n        ,0.989352107048035,1,0.997996926307678,0.989772439002991,0.997625052928925,0.999521493911743,0.961557149887085,0.985031843185425\n        ,0.995130717754364,0.966040730476379,0.940969944000244,0.908502101898193,0.838931620121002,0.875945210456848,0.919987916946411\n        ,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,0.999999940395355\n        ,0.999999642372131,0.999997198581696,0.999987363815308,1,1,1,1,1,1,1,1,1,1,1,0.996123313903809,0.951491415500641,0.961500227451324\n        ,0.987795472145081,0.986461222171783,0.99991911649704,0.855317890644073,0.743749916553497,0.663854837417603,1,1,1\n        ,1,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,0.999999821186066,0.999999940395355,1,0.999998986721039\n        ,0.999999701976776,0.999999940395355,1,1,1,1,0.999999940395355,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\n        ,1,1,1,1,1,1,1,1,1,0.997026085853577,0.991087913513184,0.998008549213409,0.990822672843933,0.978451430797577,0.994244694709778\n        ,1,1,0.999999403953552,0.999996662139893,0.999999523162842,0.999999940395355,0.999987065792084,0.999997794628143,0.999999761581421\n        ,0.999999940395355,1,0.996043920516968,0.997313916683197,0.999570369720459,0.99914413690567,0.999780535697937,1,1\n        ,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,0.874475002288818,0.859783411026001\n        ,0.976130604743958,0.985742092132568,0.951068341732025,0.966143608093262,0.9924276471138,0.98901629447937,0.992559731006622\n        ,0.996199905872345,0.915497481822968,0.930785715579987,0.953211188316345,0.943714499473572,0.974188923835754,0.979826152324677\n        ,0.853430390357971,0.909686684608459,0.832501828670502,0.89535117149353,1,1,1,1,1,1,1,0.999999821186066,1,1,1,0.999999046325684\n        ,1,1,1,1,1,1,1,1,0.999951481819153,0.999991178512573,0.999996721744537,0.999953746795654,1,1,1,1,1,1,1,1,0.999999225139618\n        ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999994158744812,0.999984204769135,0.999999582767487,0.999955058097839,0.999902665615082\n        ,0.999990284442902,0.999941945075989,0.999751687049866,0.999426007270813,1,1,1,1,0.999009013175964,0.996857404708862\n        ,0.999781668186188,0.987691402435303,1,1,1,1,1,1,0.99999988079071,1,0.99999988079071,1,0.999999046325684,0.99999988079071\n        ,1,1,1,1,1,1,0.984471559524536,0.989188969135284,0.993452608585358,0.997096359729767,0.994560599327087,0.991468369960785\n        ,1,1,1,1,1,1,1,0.999518752098084,1,1,1,0.999995589256287,0.999955594539642,0.999967575073242,0.999997019767761,0.999997854232788\n        ,0.999779105186462,0.999907195568085,0.9999880194664,0.998803615570068,0.999539971351624,0.980000019073486,0.980000019073486\n        ,0.980000019073486,0.980000019073486,1,0.999998331069946,0.999999940395355,0.99997866153717,0.999966144561768,0.999997615814209\n        ,0.999999940395355,0.999984562397003,0.999997019767761,0.999944269657135,1,1,1,1,0.996774792671204,0.974485635757446\n        ,0.980147957801819,0.997989237308502,0.999999701976776,1,1,1,0.99866509437561,1,1,1,1,1,1,0.999999523162842,0.999999523162842\n        ,1,1,1,1,0.988265216350555,0.989666819572449,0.999395608901978,0.999032855033875,0.999645292758942,0.999818742275238\n        ,1,1,1,0.994995176792145,0.999091386795044,0.99800705909729,0.952490627765656,0.416576504707336,0.347003281116486\n        ,0.345246940851212,0.417088449001312,0.944247424602509,1,1,1,0.949999988079071,0.899999976158142,0.899999976158142\n        ,0.999464333057404,0.999308705329895,0.999829411506653,0.999677062034607,0.997972846031189,1,1,1,1,0.999999344348907\n        ,0.999998927116394,0.999999940395355,0.999999940395355,1,1,1,1,1,1,1,0.999999821186066,0.999999582767487,0.999997854232788\n        ,0.999997019767761,0.999984860420227,0.999987363815308,0.999999344348907,1,1,1,1,1,1,1,0.999996244907379,0.9999680519104\n        ,1,1,1,0.999999105930328,1,1,0.459157198667526,0.988020479679108,0.943029761314392,0.459152907133102,1,1,0.998800873756409\n        ,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999997913837433,1,1,0.999998986721039,0.999984979629517,1,1,1,1,1,0.999965012073517,0.999940872192383\n        ,0.336572200059891,0.393645137548447,0.395924478769302,0.337656915187836,1,1,0.999783635139465,0.999759078025818,1\n        ,1,0.800000011920929,0.800000011920929,0.535878419876099,0.627997994422913,1,1,0.99994820356369,0.999838650226593\n        ,0.999496340751648,0.999844312667847,0.998620271682739,0.920523047447205,0.908557653427124,1,1,0.999999940395355,0.999999940395355\n        ,1,0.993643939495087,0.989085495471954,0.992528975009918,0.995644688606262,0.992834329605103,0.997095108032227,0.999972522258759\n        ,0.999994337558746,0.999965131282806,0.999850511550903,0.999999761581421,0.99986720085144,0.999546825885773,0.999962270259857\n        ,0.999987840652466,0.999996244907379,0.999980807304382,0.999827742576599,0.999969124794006,0.999980330467224,0.99982076883316\n        ,0.999875783920288,0.998700678348541,0.999732792377472,0.999924659729004,0.999531447887421,1,1,0.999959707260132,0.999996244907379\n        ,0.999989688396454,0.587577700614929,0.5,0.55103325843811,0.449999988079071,0.349999994039536,0.449999988079071,0.802620470523834\n        ,0.994896531105042,1,1,1,1,1,1,1,0.999259829521179,0.998212277889252,0.996332228183746,0.998884201049805,0.998849451541901\n        ,1,1,1,1,1,0.280946999788284,0.997190296649933,0.998100638389587,0.99994432926178,0.999985456466675,0.912754893302917\n        ,0.968181848526001,0.87903243303299,0.943862676620483,1,1,0.286551505327225,0.899999976158142,0.899999976158142,1\n        ,1,1,1,1,1,1,1,1,0.75,0.727270424365997,0.99253249168396,0.969400703907013,0.999407887458801,0.996963143348694,1,0.999822497367859\n        ,0.999152302742004,0.999869823455811,0.999400675296783,1,1,0.999988973140717,0.600000023841858,0.604558944702148,0.600000023841858\n        ,1,1,1,1,0.999998569488525,0.999998807907104,0.999997854232788,0.999794840812683,0.999966740608215,0.999977707862854\n        ,0.998860716819763,0.999999642372131,0.99999612569809,0.993585109710693,0.300000011920929,0.25,0.5,0.449999988079071\n        ,0.550000011920929,0.699999988079071,1,0.999955832958221,0.999805808067322,0.999777317047119,0.999945402145386,0.999703824520111\n        ,0.999917566776276,1,0.984215021133423,0.954994142055511,0.988196074962616,1,1,0.999999642372131,1,0.999994695186615\n        ,0.999999761581421,0.999994874000549,1,1,0.999999582767487,0.999995172023773,0.999970853328705,1,1,1,0.999999582767487\n        ,0.986238956451416,0.988411843776703,0.441835135221481,0.933162808418274,0.947231888771057,0.424471318721771,0.348979592323303\n        ,0.999981462955475,0.999907732009888,1,0.999968230724335,0.999855399131775,0.999944865703583,0.999999642372131,0.999989092350006\n        ,0.970000028610229,0.99187308549881,1,1,1,1,1,1,0.99809867143631,0.770597636699677,0.795691609382629,0.999999761581421\n        ,0.999998569488525,0.99999862909317,1,0.998847723007202,0.99910581111908,0.999994575977325,0.999991953372955,0.999996244907379\n        ,0.99998539686203,0.999957919120789,1,1,0.970000028610229,1,0.999999046325684,1,1,0.902129173278809,0.899999976158142\n        ,1,1,0.999837577342987,0.999737501144409,1,0.999938607215881,0.999995172023773,1,1,0.999913096427917,0.999415576457977\n        ,0.997944831848145,0.999560117721558,0.999930918216705,0.324698805809021,0.411464750766754,0.980888724327087,1,1,0.999808788299561\n        ,0.980815947055817,0.212126016616821,0.267991691827774,0.283018052577972,0.23473933339119,1,0.998749792575836,0.906330645084381\n        ,0.953685879707336,0.943308174610138,1,1,1,0.997312426567078,0.991603791713715,1,0.449999988079071,0.449999988079071\n        ,0.699999988079071,0.958194732666016,0.983917653560638,0.980177938938141,0.999990999698639,0.999989449977875,0.999405801296234\n        ,0.999907672405243,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.959780633449554,1,1,0.999953508377075,0.999985635280609\n        ,0.999996602535248,0.99726277589798,0.999643564224243,1,1,1,1,1,0.999996721744537,0.999999105930328,1,0.999999821186066\n        ,0.764749228954315,0.999882757663727,0.999713063240051,0.99859493970871,0.999958097934723,0.999601244926453,0.999603807926178\n        ,0.999942004680634,0.999990224838257,0.999992668628693,1,1,1,0.793075084686279,0.715351104736328,0.999799132347107\n        ,0.99924623966217,0.997733950614929,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\n        ,1,1,1,0.999988198280334,0.999999105930328,0.999990522861481,0.999999225139618,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n        ,1,1,1,1,1,1,1,1,0.999998092651367,1,0.999984800815582,0.999993324279785,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n        ,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\n        ,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\n        ,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\n        ,1,1,0.400000005960464,0.5,0.548623442649841,0.100000001490116,0.200000002980232,0.449999988079071,0.5,0.600000023841858\n        ,0.649999976158142,0.649999976158142,0.408688962459564,0.28953355550766,1,0.999999582767487,0.99999862909317,0.999980986118317\n        ,0.999694406986237,0.998330652713776,0.999876379966736,0.999770939350128,0.998444676399231,1,1,0.84945410490036,0.797120571136475\n        ,0.699999988079071,0.994182348251343,0.988083004951477,0.78735876083374,0.760871648788452,0.636389255523682,0.687809228897095\n        ,0.698961198329926,0.661260545253754,0.850000023841858,0.629232227802277,0.649999976158142,0.600000023841858,0.492218673229218\n        ,0.552437007427216,0.5,0.400000005960464,0.429196774959564,0.452822148799896,0.0500000007450581,0.0500000007450581\n        ,0.0199999995529652,0.0199999995529652,0.100000001490116,0.100000001490116,0.493190944194794,0.699999988079071,0.899999976158142\n        ,0.999776363372803,1,1,1,1,1,1,0.648829102516174,0.844642460346222,0.899999976158142,0.949999988079071,0.899999976158142\n        ,0.949999988079071,0.919702291488647,0.94857931137085,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,0.999999940395355\n        ,1,1,1,1,1,0.999999701976776,0.999998152256012,0.999993979930878,0.999989688396454,1,1,1,1,0.99999737739563,0.999999642372131\n        ,1,1,1,1,0.999999821186066,0.999999344348907,0.99999862909317,1,1,1,1,1,1,1,1,1,1,1,0.999931156635284,0.75,0.699999988079071\n        ,0.999999761581421,0.784333109855652,0.970308423042297,0.989005148410797,0.997170150279999,1,0.876214146614075,0.970000028610229\n        ,1,1,0.989500880241394,0.965273976325989,0.825668215751648,0.708643436431885,0.860360324382782,0.909061014652252,1\n        ,1,1,1,1,1,0.248748660087585,1,1,1,1,1,1,1,1,1,1,0.999795794487,0.999245464801788,0.974902451038361,0.998980283737183\n        ,0.997182130813599,0.999996066093445,0.999979078769684,0.994695901870728,0.992942214012146,0.649999976158142,0.981748402118683\n        ,0.994475185871124,0.954283893108368,0.963509917259216,0.967777073383331,0.976799607276917,0.992380619049072,1,0.987087786197662\n        ,1,0.999923825263977,0.998186767101288,0.998076796531677,0.999949634075165,0.999882221221924,0.999998688697815,1,1\n        ,1,1,0.716326594352722,0.808937311172485,0.893687009811401,0.945370733737946,1,0.977323114871979,1,0.992401897907257\n        ,1,0.999840080738068,0.99998551607132,0.999998927116394,0.999999940395355,0.999539732933044,0.999988734722137,1,0.999999821186066\n        ,0.999999225139618,0.999996721744537,0.987210094928741,0.550000011920929,0.449999988079071,0.999996244907379,0.999999821186066\n        ,0.25324410200119,0.230199247598648,0.150708064436913,0.8916996717453,0.88851273059845,0.911445736885071,0.418018728494644\n        ,0.41413426399231,0.431082844734192,0.434488296508789,0.414009839296341,0.434543877840042,0.450171411037445,0.877384424209595\n        ,0.946977913379669,0.92013680934906,0.437811374664307,0.42350047826767,0.405306279659271,0.391090542078018,0.391201049089432\n        ,0.436842024326324,1,1,1,1,1,0.999999523162842,0.999994337558746,0.999958217144012,1,1,1,1,0.99999874830246,0.999989211559296\n        ,0.999823153018951,0.999800324440002,0.99960058927536,1,0.999998509883881,0.999990463256836,0.999943137168884,0.999967992305756\n        ,0.999999403953552,0.999948978424072,0.999943375587463,0.999969303607941,0.999974608421326,1,1,1,1,0.308542907238007\n        ,0.364742130041122,0.150000005960464,0.27529102563858,0.302062720060349,0.333193153142929,0.356406271457672,0.380277574062347\n        ,0.331978857517242,0.312322288751602,0.247045859694481,0.17919759452343,0.262152791023254,0.327527046203613,0.928611278533936\n        ,0.83008337020874,0.840809226036072,0.92774510383606,0.819531679153442,0.828730583190918,0.849848210811615,0.850720882415771\n        ,0.92991054058075,0.861673176288605,0.932130098342896,0.868334949016571,0.882246673107147,0.868992269039154,0.368733763694763\n        ,0.40806970000267,0.397330462932587,0.312054097652435,0.333123594522476,0.389807045459747,0.949329078197479,0.868522763252258\n        ,0.840067327022552,0.935846924781799,0.856897950172424,0.829582154750824,0.975209772586823,0.967662453651428,0.963314354419708\n        ,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,0.995160698890686,0.984562516212463,0.984086155891418,0.994865477085114\n        ,0.962004959583282,0.962112188339233,1,1,1,0.999999761581421,1,1,0.999998569488525,0.99999988079071,1,1,1,1,1,1,1\n        ,1,1,1,1,1,1,1,1,1,1,1,1,0.99999988079071,0.999997973442078,0.999999701976776,0.999997615814209,0.999988555908203\n        ,0.999916911125183,0.999987483024597,0.999996602535248,0.999997317790985,0.999977290630341,0.999970853328705,0.9998539686203\n        ,0.999813675880432,0.999994397163391,0.999952673912048,0.999995410442352,0.999959945678711,0.999750435352325,0.999721109867096\n        ,0.999999582767487,0.999999701976776,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.985836565494537,0.987700045108795,0.99582427740097\n        ,0.996529221534729,0.997900784015656,0.990917503833771,1,1,1,1,1,1,1,1,1,1,0.999999821186066,0.999999761581421,1,1\n        ,1,1,1,1,1,1,1,1,0.999996244907379,0.999999761581421,0.999965786933899,0.999783754348755,0.985003352165222,0.995484948158264\n        ,0.962019920349121,0.998796164989471,0.998662710189819,0.999032616615295,0.998907327651978,0.999204456806183,0.999488115310669\n        ,0.999988734722137,0.999921441078186,0.983880579471588,0.965352714061737,0.99883633852005,0.994391560554504,0.992079377174377\n        ,0.972146093845367,0.998622000217438,0.972789764404297,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.649999976158142\n        ,0.850000023841858,0.550000011920929,0.850000023841858,0.850000023841858,0.779999971389771,0.460966050624847,0.349999994039536\n        ,0.250713586807251,0.5,0.247225999832153,0.200000002980232,0.300000011920929,0.300000011920929,0.850000023841858,0.835897326469421\n        ,0.757781624794006,0.889005482196808,0.799687623977661,0.880736887454987,0.852680206298828,0.773330271244049,0.899999976158142\n        ,0.657807528972626,0.497373759746552,0.308686256408691,0.535909652709961,0.899999976158142,0.711816906929016,0.993252336978912\n        ,0.995189130306244,0.975707173347473,0.988046526908875,0.984564483165741,0.995169043540955,0.995753824710846,0.984138786792755\n        ,0.997786045074463,0.985440492630005,0.989416182041168,0.967290282249451,0.955546677112579,0.910428762435913,0.949999988079071\n        ,1,0.977843284606934,0.946880638599396,0.95854377746582,0.924271702766418,0.866015911102295,0.892192006111145,0.999153912067413\n        ,0.998677670955658,0.989454507827759,0.995999813079834,0.999111652374268,0.997927010059357,0.99976247549057,0.999900758266449\n        ,0.930000007152557,0.968636333942413,0.978482127189636,0.984394371509552,0.965196907520294,0.899999976158142,0.899999976158142\n        ,0.899999976158142,0.899999976158142,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\n        ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.999996662139893,0.999988734722137,0.999970972537994,1,0.999999403953552\n        ,0.999999940395355,1,0.999999940395355,0.999999582767487,1,1,1,1,1,0.999894440174103,0.998404622077942,0.999730825424194\n        ,0.999733328819275,0.999309360980988,0.999999523162842,0.991441905498505,0.970227301120758,0.978859186172485,1,1,1\n        ,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\n        ,1,1,1,1,1,0.999967992305756,0.999800026416779,0.999064028263092,0.999978423118591,0.999989748001099,1,0.999998867511749\n        ,1,1,0.999998033046722,0.999990582466125,0.999997973442078,0.999999642372131,0.999961972236633,0.999991714954376,0.99999862909317\n        ,0.999999701976776,1,0.999268352985382,0.998100101947784,0.999813914299011,0.999943375587463,0.999878823757172,0.993770956993103\n        ,0.979781270027161,0.991786897182465,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\n        ,1,1,1,1,1,1,1,1,0.824844896793365,0.79753452539444,0.925197064876556,0.94998961687088,0.892102301120758,0.926094353199005\n        ,0.956209540367126,0.938380777835846,0.948715269565582,0.964846730232239,0.84648585319519,0.884519398212433,0.921480536460876\n        ,0.893219888210297,0.915879011154175,0.938445568084717,0.899999976158142,0.913427889347076,0.885498821735382,0.883242189884186\n        ,1,1,1,0.999999761581421,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999993503093719,1,1,0.999992609024048,1,1,1,1,1,1,1,1,1,1,1\n        ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999973356723785,1,1,1,1,0.999961853027344,0.999647974967957,0.999996960163116\n        ,0.997242391109467,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.903084516525269,0.962770581245422,0.979039669036865,0.988998830318451\n        ,0.978517055511475,0.968517661094666,1,1,1,1,1,1,1,0.999994218349457,1,1,1,1,1,1,1,1,1,0.999996185302734,1,0.999996662139893\n        ,0.999975204467773,0.969889760017395,0.971092700958252,0.999808013439178,1,1,1,1,1,1,1,1,0.99994158744812,0.999983012676239\n        ,0.999860167503357,1,1,1,1,0.991058766841888,0.925504803657532,0.942588448524475,0.99311625957489,0.999996066093445\n        ,0.999999403953552,1,1,0.995644509792328,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999119579792023,0.998876392841339,0.999415218830109\n        ,1,1,1,1,1,1,0.927903950214386,0.408307909965515,0.338427692651749,0.334506094455719,0.406669586896896,0.911526322364807\n        ,1,1,1,0.939685106277466,0.908013582229614,0.882593989372253,0.998012900352478,0.997332811355591,0.999821245670319\n        ,0.99934995174408,0.998911142349243,1,1,1,1,1,0.999844431877136,0.99999612569809,0.99999213218689,0.999998986721039\n        ,0.999999642372131,0.99999988079071,1,0.999999940395355,1,1,0.999999940395355,1,0.999999701976776,0.999997913837433\n        ,0.999988555908203,0.999967694282532,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.455325990915298,0.935487270355225,0.935112237930298\n        ,0.462645888328552,1,1,0.996441245079041,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999954044818878,0.999934792518616\n        ,0.332305639982224,0.388771086931229,0.394438505172729,0.336643546819687,1,1,1,1,1,1,0.817862629890442,0.888791799545288\n        ,0.871996223926544,0.926925122737885,1,1,1,1,1,0.999802231788635,0.999353110790253,0.99868243932724,0.999528646469116\n        ,1,0.97871345281601,0.951372623443604,1,1,1,1,1,1,0.992018222808838,0.985607743263245,0.986931025981903,0.992793202400208\n        ,0.98271256685257,0.992969512939453,0.999912321567535,0.999967873096466,0.999861121177673,0.999517500400543,0.999994337558746\n        ,0.999424636363983,0.998278081417084,1,0.999864637851715,0.999949097633362,1,1,1,1,1,1,1,0.997118413448334,0.999441742897034\n        ,0.999845266342163,0.998751521110535,1,1,1,1,1,1,1,0.966132760047913,0.894500434398651,0.933834314346313,0.84791773557663\n        ,0.743246674537659,0.811419129371643,0.850000023841858,0.999857187271118,1,1,1,1,1,1,1,0.99671083688736,0.992562532424927\n        ,0.985294878482819,0.995045244693756,0.997932732105255,1,1,1,1,1,0.278595566749573,0.996629595756531,0.997128784656525\n        ,0.999779880046844,0.999933123588562,0.999375998973846,0.999950766563416,0.999540448188782,0.999971628189087,1,1,0.28972864151001\n        ,0.911683559417725,0.877844750881195,1,1,1,1,1,1,1,1,1,1,0.937691330909729,0.962795853614807,1,1,1,1,1,1,1,1,1,1,1\n        ,1,0.847725927829742,0.91228461265564,0.79233855009079,0.871689975261688,1,1,1,1,1,1,1,1,1,1,0.995091438293457,1,1\n        ,0.978575766086578,0.418494582176209,0.39224100112915,0.608790159225464,0.550000011920929,0.632516980171204,0.784045279026031\n        ,1,0.999818503856659,0.999213695526123,0.999005913734436,0.999743700027466,0.998591482639313,0.999609470367432,1,0.999946653842926\n        ,0.999391973018646,0.999967992305756,0.999391973018646,0.994880020618439,0.999391973018646,1,1,1,0.999995410442352\n        ,0.999966621398926,0.999999225139618,0.999999225139618,0.999992728233337,0.999965846538544,0.999864935874939,1,1,0.999998986721039\n        ,0.999993681907654,0.908143758773804,0.930387914180756,0.429049700498581,0.885662496089935,0.903142273426056,0.408094793558121\n        ,0.329227954149246,0.999907255172729,0.999543070793152,1,0.999873816967011,0.999455451965332,0.999873638153076,1,1\n        ,0.999391973018646,0.999967992305756,1,1,1,1,1,1,0.999896347522736,0.711599826812744,0.745834589004517,1,1,1,1,1,1\n        ,0.999975860118866,0.999959826469421,0.999991416931152,0.999968469142914,0.999915838241577,1,0.981522679328918,0.976607978343964\n        ,0.989433944225311,1,0.999967992305756,0.999552011489868,0.999941349029541,0.958241581916809,1,1,0.999773323535919\n        ,0.99970531463623,0.994279265403748,0.995593905448914,0.999991178512573,1,1,1,1,1,0.999967992305756,1,1,0.310555666685104\n        ,0.397277534008026,0.906521797180176,1,1,1,0.897495031356812,0.209778174757957,0.261431634426117,0.277164131402969\n        ,0.231595560908318,1,1,0.999967992305756,1,0.889366984367371,1,1,1,1,0.999633312225342,0.999985694885254,0.763117611408234\n        ,0.725181221961975,0.82636034488678,0.99178946018219,0.998883247375488,0.998075246810913,1,1,1,1,1,1,1,1,1,1,1,1,1\n        ,1,1,1,1,1,1,1,1,1,1,0.861131191253662,1,1,0.999758005142212,0.999929368495941,0.999975681304932,0.99999988079071\n        ,0.998361766338348,1,1,1,1,0.999999582767487,0.999993681907654,0.999998152256012,0.99999988079071,0.999999463558197\n        ,0.979020714759827,0.97575169801712,1,1,1,1,1,1,1,1,1,1,1,0.994842290878296,0.983159720897675,0.999033391475677,0.996413946151733\n        ,0.990096926689148,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,1,1,0.999999761581421,1,1,1,1,1,1\n        ,1,1,1,1,0.999965131282806,0.999992609024048,0.999973356723785,0.999996185302734,0.999999046325684,1,1,1,1,1,1,1,1\n        ,1,1,1,1,1,1,1,1,1,1,0.999999940395355,1,1,0.999999046325684,0.999999582767487,1,1,0.999996900558472,0.999976396560669\n        ,0.999965965747833,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\n        ,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,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1\n        ,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\n        ,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,0.999999940395355,0.606032192707062,0.702783584594727,0.715117573738098\n        ,0.220490634441376,0.292737722396851,0.52182525396347,0.601603031158447,0.616618871688843,0.727132260799408,0.645783305168152\n        ,0.784240245819092,0.686429858207703,1,1,1,0.999999165534973,0.999993205070496,1,1,1,1,1,1,0.999985694885254,0.999952256679535\n        ,1,1,1,0.932030141353607,0.931214332580566,0.97384238243103,0.765795350074768,0.962967395782471,0.942884683609009\n        ,0.896759152412415,0.881946504116058,0.80953049659729,0.856356859207153,0.848113536834717,0.806062936782837,0.866539835929871\n        ,0.765458106994629,0.746913552284241,0.694321870803833,0.635266363620758,0.599167943000793,0.657683849334717,0.69309937953949\n        ,0.579004049301147,0.497260928153992,0.504618883132935,0.628817796707153,0.100000001490116,0.100000001490116,0.0199999995529652\n        ,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.164457678794861,0.14875328540802,0.272260308265686,0.797969460487366\n        ,0.866278350353241,1,0.843241333961487,0.999112129211426,0.999932169914246,1,0.99931812286377,0.996939718723297,0.933620035648346\n        ,0.937213599681854,0.927313685417175,0.931612193584442,0.957677364349365,0.981823623180389,0.949999988079071,1,0.949999988079071\n        ,0.949999988079071,1,0.965973496437073,0.979378640651703,0.991198360919952,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n        ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999998271465302,0.999995768070221,0.999992251396179,0.999989032745361,1,1,1,1,0.999983668327332\n        ,0.999996900558472,1,1,0.999999940395355,0.999999821186066,0.999999523162842,0.999999165534973,0.99999862909317,0.999999940395355\n        ,0.999999642372131,1,1,1,1,1,1,1,1,1,0.999670386314392,0.938778817653656,0.850560367107391,1,0.860400438308716,0.988599896430969\n        ,0.99865597486496,0.999840021133423,0.963169693946838,0.994880020618439,0.995199978351593,0.996245324611664,0.998159110546112\n        ,0.999204456806183,0.999973356723785,0.999239802360535,0.997623980045319,0.96080356836319,0.891220390796661,0.871136009693146\n        ,0.989015877246857,0.99062043428421,0.99975597858429,0.999982118606567,1,0.998371005058289,0.996509432792664,1,1,0.559376358985901\n        ,1,1,1,1,1,1,1,1,1,1,1,1,0.997700333595276,1,1,0.994149565696716,0.999817132949829,1,0.999771416187286,0.850000023841858\n        ,0.998741507530212,0.999592363834381,0.993519484996796,0.986261963844299,0.993080615997314,0.997539460659027,0.999630749225616\n        ,0.999588549137115,0.999967992305756,0.968575894832611,1,1,1,1,1,1,1,1,1,1,0.928032338619232,0.976496279239655,0.994863092899323\n        ,0.999303340911865,0.999495089054108,0.999927997589111,0.999977767467499,1,1,1,1,1,1,1,1,1,1,1,1,1,0.850000023841858\n        ,0.699999988079071,1,1,1,0.235360309481621,0.222527340054512,0.152716189622879,0.839730203151703,0.847859680652618\n        ,0.872806251049042,0.404381573200226,0.40144407749176,0.423947304487228,0.427471905946732,0.403210192918777,0.428387820720673\n        ,0.841572463512421,0.874131262302399,0.408036857843399,0.38528248667717,0.373308509588242,0.377070516347885,0.424087792634964\n        ,1,1,1,1,1,1,1,0.999999284744263,0.999993503093719,0.999957799911499,1,1,1,1,0.999999940395355,0.999999940395355,0.999998092651367\n        ,0.999986052513123,0.999738574028015,0.999751091003418,0.999558866024017,0.999999761581421,0.999997317790985,0.99998539686203\n        ,0.999933063983917,0.999951422214508,0.999995470046997,0.999896287918091,1,1,1,1,0.349999994039536,1,1,1,0.686159372329712\n        ,0.623571038246155,0.349999994039536,0.214079320430756,1,1,1,1,1,1,1,1,0.999349594116211,1,0.999909162521362,0.949999988079071\n        ,0.993878483772278,1,1,0.999986410140991,0.999998867511749,1,0.999993741512299,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n        ,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,0.913584053516388,0.871200621128082,0.936014592647552,0.942887365818024\n        ,0.817474365234375,0.740597069263458,0.888899803161621,0.878629624843597,0.87686014175415,0.568309545516968,0.932189285755157\n        ,0.883029043674469,0.848667085170746,0.871915221214294,0.811980724334717,0.745295226573944,0.777739644050598,0.573302984237671\n        ,0.686521828174591,0.337067723274231,0.287424027919769,0.285539090633392,0.255632221698761,0.202617704868317,0.289324581623077\n        ,0.913337051868439,0.916339218616486,0.855006694793701,0.938828587532043,0.940479755401611,0.826563715934753,0.790112614631653\n        ,0.883481323719025,0.896900475025177,0.687618970870972,0.885863423347473,0.875031530857086,0.854685246944427,0.804443955421448\n        ,0.830238461494446,0.631611108779907,0.773356795310974,0.477082967758179,0.393136739730835,0.397931814193726,0.397760272026062\n        ,0.328216433525085,0.426256000995636,0.920019030570984,0.960719287395477,0.985030829906464,0.986254632472992,0.856136322021484\n        ,0.790562033653259,0.93674647808075,0.819936394691467,0.885690748691559,0.661754369735718,0.976041197776794,0.747037887573242\n        ,0.630166888237,0.676613986492157,0.522553384304047,0.569085597991943,0.487244963645935,0.49576610326767,0.485332369804382\n        ,0.446525692939758,0.475012540817261,0.427732467651367,0.453264474868774,0.537856459617615,0.969599306583405,0.947482883930206\n        ,0.980467319488525,0.976889669895172,0.855967223644257,0.932356476783752,0.814191162586212,0.880587220191956,0.695309996604919\n        ,0.73822420835495,0.656001031398773,0.587343633174896,0.543010890483856,0.516286194324493,0.520748317241669,0.518919825553894\n        ,0.481668591499329,0.508216023445129,0.460770845413208,0.484409630298615,0.566373646259308,0.965694129467011,0.921841502189636\n        ,0.894006490707397,0.0179339237511158,0.022374426946044,0.0351768396794796,0.0133271468803287,0.0114815225824714,0.051796730607748\n        ,0.0770531296730042,0.128365874290466,0.0722857713699341,0.0740104466676712,0.0232857763767242,0.114134430885315,0.0671189278364182\n        ,0.0153682315722108,0.0401310659945011,0.128179043531418,0.0737554952502251,0.0775797814130783,0.0229898858815432\n        ,0.113985672593117,0.0678060799837112,0.0408220998942852,0.014244195073843,0.0031724120490253\n        Transform: 0.0413181715733012,0.0620282951754813,0.997218779229126,0,0.987834248135006,-0.152295242936304,-0.0314563824956635\n        ,0,0.149920490642125,0.986386586814641,-0.0675662454229578,0,-63.2896897376797,9.28034499228137,1.65098175999686,1\n        \n        TransformLink: 0.0413181779113036,0.987834399663875,0.149920513639184,0,0.0620283045373363,-0.152295265922039,0.986386735688766,0\n        ,0.997218784048189,-0.0314563826476766,-0.0675662457494719,0,0.39298057195007,63.9850191893683,0.445964229859337,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Clavicle\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 140,143,144,148,167,340,342,343,1793,1794,1795,1806,1807,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820\n        ,1821,1822,1823,1824,1825,1826,1827,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,2006,2007,2008,2500,2501,2502\n        ,2503,2554,2585,2586,2587,2588,2676,2770,2773,2774,2829,2830,2836,2837,2838,2839,3408,3409,3410,3411,3418,3422,3426\n        ,3427,3428,3429,3430,3431,3434,3435,3436,3437,3438,3467,3468,3470,3471,3472,3473,3474,3475,4052,4053,4054,4055,4056\n        ,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079\n        ,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102\n        ,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125\n        ,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148\n        ,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171\n        ,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194\n        ,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217\n        ,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240\n        ,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263\n        ,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286\n        ,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309\n        ,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332\n        ,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355\n        ,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378\n        ,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401\n        ,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424\n        ,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447\n        ,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,5305\n        ,5306,5403,5730,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5805,5806,5807\n        ,5810,5812,5815,5819,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844\n        ,5845,5846,5847,5848,5849,5850,5851,5853,5854,5862,5863,5864,5867,5868,5869,5873,5874,5877,5878,5879,5880,5882,5883\n        ,5884,5885,5886,5887,5888,5889,5890,5893,5894,5895,5896,5897,5898,5901,5902,5903,5904,5905,5906,5907,5908,5909,5912\n        ,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935\n        ,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958\n        ,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982\n        ,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005\n        ,6006,6008,6009,6010,6011,6012,6013,6018,6019,6020,6029,6032,6128,6129,6130,6131,6138,6139,6141,6142,6143,6147,6148\n        ,6149,6150,6151,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6172,6175,6176,6189,6190,6191,6192,6193,6194,6195\n        ,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6212,6213,6215,6467,6484,6485,6486,6487\n        ,6488,6489,6491,6492,6493,6494,6495,10477,10478,10479,10480,10481,10499,10500,10506,10507,10508,10509,10510,10511\n        ,10512,10518,10519,10520,10521,10522,10523,10524,10525,10526,10530,10531,10532,10533,10534,10535,10538,10539,10541\n        ,10542,10543,10544,10549,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10630,10631,10635,10636,10638\n        ,10639,10641,10642,10643,10644,10645,10646,10647,10648,10671,10672,10673,10674,10675,10676,10682,10683,10689,10690\n        ,10693,10694,10695,10696,10705,10706,10707,10708,10713,10714,10715,10716,10717,10718,10733,10734,10735,10738,10739\n        ,10740,10741,10742,10746,10747,10748,10749,10750,10751,10754,10755,10756,10758,10761,10762,10763,10764,10765,10766\n        ,10767,10768,10769,10770,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805\n        ,10806,10807,10808,10809,10810,10811,10814,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834\n        ,10841,10844,10845,10848,10849,10850,10851,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866\n        ,10867,10868,10869,10870,10873,10875,10878,10882,10883,10884,10885,10886,10891,10892,10893,10894,10898,10899,10900\n        ,10901,10902,10903,10904,10905,10906,10907,10908\n        Weights: 0.287342876195908,0.218264132738113,0.300880402326584,0.32291778922081,0.127042591571808,0.189787164330482,0.270161539316177\n        ,0.318312853574753,0.317722767591476,0.196519017219543,0.112743601202965,0.219398647546768,0.171351626515388,0.521111190319061\n        ,0.35480409860611,0.320145130157471,0.543612897396088,0.270305871963501,0.236683264374733,0.193796396255493,0.265648812055588\n        ,0.509497165679932,0.496736019849777,0.533007383346558,0.558105051517487,0.235622301697731,0.312426656484604,0.408343434333801\n        ,0.344335377216339,0.340542107820511,0.493481904268265,0.251053929328918,0.176417797803879,0.131792828440666,0.531090795993805\n        ,0.607681572437286,0.578952074050903,0.508088767528534,0.137959614396095,0.262801229953766,0.252974390983582,0.162508279085159\n        ,0.430942058563232,0.502444863319397,0.387218713760376,0.071005567908287,0.103521510958672,0.133009046316147,0.0921264737844467\n        ,0.0481603145599365,0.091205820441246,0.0685205608606339,0.0630872771143913,0.0844610333442688,0.117379494011402,0.102523177862167\n        ,0.0945545136928558,0.165795803070068,0.157553404569626,0.0984221920371056,0.234691560268402,0.186710864305496,0.143213585019112\n        ,0.181670635938644,0.571555435657501,0.300281792879105,0.253574341535568,0.370613515377045,0.62205445766449,0.599633753299713\n        ,0.159768491983414,0.158106833696365,0.121347598731518,0.112758591771126,0.147620886564255,0.10937138646841,0.156569451093674\n        ,0.191426545381546,0.204657435417175,0.181606948375702,0.119416236877441,0.708175778388977,0.537159204483032,0.341445356607437\n        ,0.399679660797119,0.472524672746658,0.557649970054626,0.596433937549591,0.648896038532257,0.312094032764435,0.273928493261337\n        ,0.20211586356163,0.253532528877258,0.19913724064827,0.113372690975666,0.144172891974449,0.0597548261284828,0.119243465363979\n        ,0.0394293665885925,0.213271751999855,0.288261890411377,0.16110073029995,0.136416658759117,0.331749588251114,0.370512872934341\n        ,0.338433563709259,0.311584800481796,0.334039717912674,0.323579847812653,0.297916144132614,0.282470494508743,0.428035527467728\n        ,0.430588960647583,0.428622037172318,0.424005836248398,0.38512909412384,0.430455893278122,0.431900888681412,0.390186578035355\n        ,0.304801762104034,0.382831752300262,0.436085969209671,0.370297282934189,0.494224846363068,0.484575420618057,0.485800296068192\n        ,0.488230407238007,0.487484663724899,0.48967444896698,0.489894092082977,0.49028691649437,0.495027840137482,0.489778876304626\n        ,0.49161484837532,0.496164739131927,0.492680281400681,0.492597579956055,0.481758415699005,0.471920698881149,0.489105343818665\n        ,0.491601377725601,0.491354584693909,0.485707521438599,0.495073169469833,0.494843244552612,0.466411292552948,0.47412383556366\n        ,0.464865773916245,0.482917994260788,0.494209975004196,0.480746239423752,0.427003294229507,0.379820078611374,0.42709743976593\n        ,0.462967693805695,0.346141636371613,0.35866567492485,0.429456263780594,0.482946753501892,0.476407021284103,0.278716742992401\n        ,0.218594446778297,0.168773606419563,0.240790814161301,0.0902368724346161,0.172832623124123,0.0494015403091908,0.130268275737762\n        ,0.186492174863815,0.255184590816498,0.14660407602787,0.306570321321487,0.340423434972763,0.299146622419357,0.27849805355072\n        ,0.299457192420959,0.303629398345947,0.284210860729218,0.413726359605789,0.405999809503555,0.419456332921982,0.356164246797562\n        ,0.345661550760269,0.408305525779724,0.40659299492836,0.350536346435547,0.312975913286209,0.270987153053284,0.413858473300934\n        ,0.341171443462372,0.483744025230408,0.490468919277191,0.488374829292297,0.484011590480804,0.484352439641953,0.49483135342598\n        ,0.487460076808929,0.497192651033401,0.487598240375519,0.488094836473465,0.490725487470627,0.476294726133347,0.45472925901413\n        ,0.467323541641235,0.480455249547958,0.472929209470749,0.483009994029999,0.491576075553894,0.448032379150391,0.457088500261307\n        ,0.446510463953018,0.470288187265396,0.49086919426918,0.465316772460938,0.353975713253021,0.402869999408722,0.403054624795914\n        ,0.444430112838745,0.328001022338867,0.316157102584839,0.407167613506317,0.46914541721344,0.460395693778992,0.226573526859283\n        ,0.179716765880585,0.246300727128983,0.288273096084595,0.0961756333708763,0.174234688282013,0.0480747558176517,0.124625325202942\n        ,0.0303347427397966,0.10171215236187,0.414591491222382,0.40688768029213,0.410651832818985,0.404483884572983,0.36542534828186\n        ,0.323211908340454,0.278422921895981,0.491320610046387,0.489428728818893,0.488226443529129,0.491683721542358,0.492925882339478\n        ,0.491198897361755,0.494440972805023,0.493882149457932,0.501135170459747,0.493873596191406,0.456400662660599,0.480663388967514\n        ,0.494727551937103,0.212771892547607,0.147338449954987,0.191964328289032,0.256925165653229,0.148505166172981,0.0747698768973351\n        ,0.0388709753751755,0.111240945756435,0.386646777391434,0.39567494392395,0.400452464818954,0.335536032915115,0.290832757949829\n        ,0.244191065430641,0.491688162088394,0.495783418416977,0.493266344070435,0.483279794454575,0.502431750297546,0.489663749933243\n        ,0.504642188549042,0.492314904928207,0.437400162220001,0.468595236539841,0.480583399534225,0.246725380420685,0.195764228701591\n        ,0.108041472733021,0.0558412708342075,0.0362572111189365,0.300465404987335,0.34278017282486,0.486127644777298,0.484876960515976\n        ,0.487915635108948,0.491282552480698,0.497506499290466,0.49445840716362,0.482423603534698,0.414954781532288,0.425710588693619\n        ,0.381416827440262,0.461820185184479,0.162621557712555,0.211802735924721,0.0853544026613235,0.045819204300642,0.266586184501648\n        ,0.311163306236267,0.486227840185165,0.490895986557007,0.497843503952026,0.500256538391113,0.475985050201416,0.470192551612854\n        ,0.389865875244141,0.352535128593445,0.40158349275589,0.443223685026169,0.344601839780808,0.439949661493301,0.449354231357574\n        ,0.600000023841858,0.600000023841858,0.585119128227234,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858\n        ,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.36919179558754\n        ,0.374925911426544,0.389459431171417,0.390670835971832,0.414509892463684,0.41056901216507,0.435979396104813,0.42843696475029\n        ,0.451957821846008,0.600000023841858,0.649999976158142,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858\n        ,0.5,0.353585124015808,0.378713309764862,0.409605801105499,0.435899168252945,0.550000011920929,0.600000023841858,0.649999976158142\n        ,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.452943533658981,0.441168695688248,0.441423445940018\n        ,0.440933734178543,0.550000011920929,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858\n        ,0.600000023841858,0.5,0.451606303453445,0.449999988079071,0.445196092128754,0.449999988079071,0.5,0.410163074731827\n        ,0.550000011920929,0.550000011920929,0.5,0.453456491231918,0.453660607337952,0.454501986503601,0.451309412717819,0.442042887210846\n        ,0.411225140094757,0.374216198921204,0.367380231618881,0.350631505250931,0.46471431851387,0.541934013366699,0.541399717330933\n        ,0.472214698791504,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858\n        ,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540618896484375,0.539543628692627,0.408979505300522\n        ,0.403523325920105,0.423235297203064,0.421915978193283,0.440413743257523,0.443479090929031,0.455287665128708,0.461397409439087\n        ,0.542557179927826,0.474392086267471,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858\n        ,0.540664434432983,0.39019450545311,0.413305699825287,0.440004765987396,0.461692869663239,0.493854552507401,0.542806029319763\n        ,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540695428848267,0.492301762104034\n        ,0.492998450994492,0.493540436029434,0.493857055902481,0.545637249946594,0.496385663747787,0.600000023841858,0.600000023841858\n        ,0.600000023841858,0.600000023841858,0.600000023841858,0.544318497180939,0.495441734790802,0.380767822265625,0.496274262666702\n        ,0.496445864439011,0.541243731975555,0.545268177986145,0.491165548563004,0.492123425006866,0.492635935544968,0.493220061063766\n        ,0.492741793394089,0.439888089895248,0.461666733026505,0.438809275627136,0.411170661449432,0.439403742551804,0.406360357999802\n        ,0.399927645921707,0.384916067123413,0.408272355794907,0.437813818454742,0.462262064218521,0.476009368896484,0.473369926214218\n        ,0.465719997882843,0.388347536325455,0.390445053577423,0.390155345201492,0.387774527072906,0.32721534371376,0.332227468490601\n        ,0.312882304191589,0.265351116657257,0.274931788444519,0.276817619800568,0.295409381389618,0.29927259683609,0.298837125301361\n        ,0.303793102502823,0.294210225343704,0.296336442232132,0.274231463670731,0.264867663383484,0.0984181761741638,0.254736602306366\n        ,0.25873875617981,0.138245850801468,0.141562297940254,0.263141125440598,0.274412363767624,0.297334283590317,0.302293747663498\n        ,0.297444730997086,0.29504469037056,0.292524039745331,0.271924585103989,0.262868225574493,0.187646597623825,0.138774082064629\n        ,0.293411880731583,0.272233903408051,0.262759327888489,0.21303403377533,0.138494804501534,0.308960318565369,0.31627756357193\n        ,0.32057198882103,0.143520221114159,0.54930967092514,0.558317601680756,0.601410150527954,0.668936431407928,0.859407842159271\n        ,0.844669342041016,0.818968653678894,0.689110934734344,0.629467904567719,0.934072911739349,0.90171092748642,0.740257918834686\n        ,0.722909212112427,0.772041916847229,0.74228435754776,0.596917271614075,0.570652961730957,0.501783609390259,0.770733416080475\n        ,0.685721516609192,0.490369111299515,0.514139831066132,0.591991603374481,0.572175443172455,0.487940400838852,0.503393948078156\n        ,0.391505509614944,0.932837843894959,0.920459508895874,0.791873812675476,0.83431601524353,0.484917819499969,0.747351765632629\n        ,0.895894348621368,0.781249701976776,0.72469288110733,0.561075389385223,0.520167589187622,0.509442687034607,0.574886918067932\n        ,0.491814941167831,0.482179373502731,0.509530603885651,0.609283030033112,0.511695206165314,0.703715860843658,0.614887654781342\n        ,0.412589967250824,0.468591123819351,0.200000002980232,0.130821987986565,0.0498344413936138,0.800000011920929,0.5\n        ,0.374432504177094,0.139433845877647,0.372645854949951,0.438550859689713,0.249949619174004,0.25,0.688447892665863\n        ,0.756752729415894,0.714166462421417,0.638433933258057,0.549879252910614,0.666928946971893,0.527884304523468,0.548589766025543\n        ,0.658684313297272,0.69450855255127,0.0693961083889008,0.180000007152557,0.0581055544316769,0.452420741319656,0.42332199215889\n        ,0.236328333616257,0.175878316164017,0.180000007152557,0.501450002193451,0.0872168615460396,0.0472639165818691,0.140358105301857\n        ,0.475359320640564,0.481175273656845,0.25,0.253921389579773,0.542810201644897,0.255297660827637,0.25,0.250288337469101\n        ,0.110027000308037,0.149569854140282,0.129948511719704,0.163483023643494,0.170433908700943,0.0789583772420883,0.130037143826485\n        ,0.0977599322795868,0.3859803378582,0.397739320993423,0.181627526879311,0.170861035585403,0.122231982648373,0.113688245415688\n        ,0.0980523452162743,0.113921858370304,0.213507369160652,0.218370392918587,0.218951821327209,0.231220692396164,0.243951767683029\n        ,0.233398959040642,0.422404229640961,0.422159910202026,0.222008794546127,0.242377281188965,0.249843165278435,0.353360027074814\n        ,0.230180963873863,0.246015608310699,0.238067552447319,0.413277089595795,0.198262080550194,0.249708235263824,0.25\n        ,0.25,0.25,0.246774092316628,0.25,0.25,0.25,0.248918384313583,0.242267489433289,0.224540933966637,0.231072202324867\n        ,0.312419831752777,0.29113432765007,0.399637073278427,0.600000023841858,0.393271803855896,0.308805286884308,0.310129761695862\n        ,0.303165584802628,0.272623211145401,0.312031984329224,0.155365735292435,0.389771282672882,0.398966461420059,0.14198449254036\n        ,0.036714855581522,0.374302238225937,0.12066026031971,0.380831450223923,0.353778511285782,0.136191874742508,0.178431421518326\n        ,0.13067390024662,0.279977709054947,0.292773634195328,0.25970059633255,0.176739081740379,0.300000011920929,0.300000011920929\n        ,0.122005775570869,0.23972974717617,0.222396865487099,0.200173661112785,0.0868332833051682,0.20101198554039,0.365400671958923\n        ,0.277413785457611,0.0936562716960907,0.481789469718933,0.236978203058243,0.39022433757782,0.496913224458694,0.497893631458282\n        ,0.371885746717453,0.276244431734085,0.45980367064476,0.0648277550935745,0.00409483723342419,0.00100980454590172,0.00202051992528141\n        ,0.00632891012355685,0.0247978214174509,0.0295577496290207,0.008045744150877,0.0131089640781283,0.0208909809589386\n        ,0.0764315575361252,0.00398753024637699,0.00538884755223989,0.100000001490116,0.0107455933466554,0.00638314755633473\n        ,0.021383011713624,0.00743433879688382,0.0208641234785318,0.0666176676750183,0.100000001490116,0.012950842268765,0.0156243359670043\n        ,0.00565479137003422,0.00672947941347957,0.00293202605098486,0.00203574099577963,0.186777889728546,0.123878009617329\n        ,0.0835776850581169,0.108076155185699,0.0213416274636984,0.00666187796741724,0.0166008118540049,0.0488587208092213\n        ,0.00350723508745432,0.00225304625928402,0.00419815676286817,0.00883233454078436,0.00231246137991548,0.0317243710160255\n        ,0.300000011920929,0.300000011920929,0.0762900784611702,0.0403979457914829,0.0416721440851688,0.0470849089324474,0.111286424100399\n        ,0.0332397967576981,0.181182488799095,0.00807778630405664,0.0166490729898214,0.0129965776577592,0.0273373015224934\n        ,0.0197057314217091,0.00603368505835533,0.103672489523888,0.0565624609589577,0.0216145347803831,0.0167154371738434\n        ,0.00300612882710993,0.00544778537005186,0.00598917761817575,0.00195894809439778,0.00142651202622801,0.484894901514053\n        ,0.684086501598358,0.718907594680786,0.676065981388092,0.40315368771553,0.556465148925781,0.848726749420166,0.621510863304138\n        ,0.0385145246982574,0.0412820167839527,0.0364001467823982,0.016484459862113,0.013350079767406,0.0127451401203871,0.0128253996372223\n        ,0.0140470778569579,0.0141159072518349,0.0433820821344852,0.0467647910118103,0.0264780968427658,0.0254385508596897\n        ,0.0252509098500013,0.0238212086260319,0.0206959210336208,0.0233588702976704,0.0181094761937857,0.0389366447925568\n        ,0.0427717715501785,0.0298443771898746,0.0229412000626326,0.0311520807445049,0.0416259765625,0.0265055652707815,0.0279774852097034\n        ,0.0225728377699852,0.052638191729784,0.0411552786827087,0.022190036252141,0.029569573700428,0.0644005686044693,0.0372306294739246\n        ,0.0174010694026947,0.0159334260970354,0.0642833635210991,0.0247891172766685,0.0386725217103958,0.0488913655281067\n        ,0.0210474915802479,0.0161526277661324,0.0165552590042353,0.0216749012470245,0.0195208117365837,0.0167216528207064\n        ,0.0224301293492317,0.0151196178048849,0.0144087765365839,0.0139210736379027,0.0183347892016172,0.0194267723709345\n        ,0.0171091575175524,0.0175132360309362,0.0197858326137066,0.0189218334853649,0.0205828379839659,0.0198940336704254\n        ,0.0197188314050436,0.0550209023058414,0.0664688125252724,0.0439060628414154,0.0204747263342142,0.0277326870709658\n        ,0.00403420999646187,0.0360795818269253,0.0313406437635422,0.0429699942469597,0.0696650743484497,0.0417818203568459\n        ,0.0495671816170216,0.0916373878717422,0.0601081997156143,0.0219621360301971,0.0245194919407368,0.0292192939668894\n        ,0.0391875095665455,0.027691051363945,0.0345890782773495,0.0757055059075356,0.048767551779747,0.0649795681238174,0.0988612323999405\n        ,0.0283221397548914,0.0221623983234167,0.0295963045209646,0.0308881979435682,0.0275767091661692,0.0283039454370737\n        ,0.0218954849988222,0.0213178470730782,0.0215635728091002,0.0382499136030674,0.0279828310012817,0.0203322749584913\n        ,0.0206757597625256,0.0208319090306759,0.0254390873014927,0.0176928229629993,0.0229123514145613,0.0227153822779655\n        ,0.0223618764430285,0.0181357078254223,0.0191761013120413,0.0245725233107805,0.00946254096925259,0.0106111532077193\n        ,0.0123485242947936,0.0248966719955206,0.020134637132287,0.0190518815070391,0.025281023234129,0.0252148434519768,0.021393371745944\n        ,0.0203799623996019,0.0214727520942688,0.0261586289852858,0.0101737771183252,0.0134961437433958,0.013369576074183\n        ,0.0157628618180752,0.0257200412452221,0.0271620377898216,0.0329086408019066,0.0341657251119614,0.0381906665861607\n        ,0.0430698320269585,0.0974766910076141,0.0675418078899384,0.0754710882902145,0.0998940393328667,0.05403833091259,0.0332547575235367\n        ,0.0195903498679399,0.0257969200611115,0.0235635377466679,0.0227375086396933,0.0098038949072361,0.0109773771837354\n        ,0.0231422260403633,0.0319954268634319,0.0609554350376129,0.0171176232397556,0.0139615209773183,0.00126926240045577\n        ,0.00114938686601818,0.0143906706944108,0.0150092467665672,0.00510499672964215,0.00745106535032392,0.00471863150596619\n        ,0.011429768987,0.0355809293687344,0.0355133190751076,0.102013848721981,0.0956157669425011,0.0119818644598126,0.0129090240225196\n        ,0.0540297590196133,0.0342668630182743,0.0395372025668621,0.0619741417467594,0.0335602201521397,0.0617258436977863\n        ,0.0201867260038853,0.0267706867307425,0.016303826123476,0.0157962460070848,0.0258567780256271,0.0227929409593344\n        ,0.0163461975753307,0.0234469547867775,0.0147395962849259,0.023964473977685,0.00104093307163566,0.0163080170750618\n        ,0.00983362924307585,0.0199874434620142,0.0222630240023136,0.0186568982899189,0.0195088945329189,0.019377188757062\n        ,0.00268315174616873,0.0192961413413286,0.0201760977506638,0.0149978045374155,0.00338341924361885,0.00293034012429416\n        ,0.00150685710832477,0.0279272049665451,0.0144925909116864,0.00557977287098765,0.0227816849946976,0.00450336327776313\n        ,0.00403442652896047,0.00253123859874904,0.00225223274901509\n        Transform: 0.978469015335443,-0.0695892827205353,0.194308144005479,0,-0.198997136937502,-0.0683111362190089,0.977616329180682\n        ,0,-0.0547582084883066,-0.995234101286735,-0.0806883993392753,0,10.562256371274,2.41825540251226,-59.2613642964607\n        ,1\n        TransformLink: 0.978469078077147,-0.19899714969766,-0.0547582119995301,0,-0.0695892830013208,-0.0683111364946372,-0.9952341053024\n        ,0,0.194308151836972,0.977616368583021,-0.080688402591381,0,1.34840957734272,60.2019324479208,-1.79660429498372,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Clavicle\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 94,95,108,109,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,150,163,166,168,169\n        ,170,171,172,173,174,175,176,340,341,342,343,829,830,831,832,882,885,914,915,916,917,998,1011,1089,1092,1093,1147\n        ,1148,1154,1155,1156,1157,1731,1732,1733,1734,1740,1741,1745,1749,1750,1751,1752,1753,1754,1755,1759,1760,1761,1762\n        ,1763,1764,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1824,2006,2008,2557,2689,3470,3471,5305,5306,5320,5321\n        ,5322,5323,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5374,5375,5376,5379,5381,5384,5387,5388\n        ,5394,5395,5396,5397,5398,5399,5400,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417\n        ,5418,5419,5420,5421,5423,5424,5432,5433,5434,5437,5438,5443,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457\n        ,5458,5459,5460,5462,5463,5464,5465,5466,5467,5471,5472,5473,5474,5475,5477,5478,5479,5480,5483,5484,5485,5486,5487\n        ,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510\n        ,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5532,5533,5534,5535\n        ,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558\n        ,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5581,5582,5583\n        ,5584,5585,5586,5587,5588,5590,5591,5592,5593,5594,5600,5601,5603,5604,5612,5621,5622,5633,5634,5635,5636,5641,5642\n        ,5643,5644,5645,5646,5650,5651,5652,5653,5654,5655,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5675,5678,5679\n        ,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5704\n        ,5705,5706,5707,5715,5723,5726,5727,5728,5729,5730,5731,5732,5734,5735,5736,5737,5738,5743,5744,5745,6487,10054,10055\n        ,10060,10061,10062,10063,10064,10065,10066,10074,10075,10076,10077,10078,10079,10080,10081,10082,10087,10088,10089\n        ,10090,10091,10092,10097,10098,10099,10100,10101,10102,10107,10108,10109,10110,10111,10113,10114,10115,10117,10118\n        ,10143,10190,10191,10195,10196,10198,10200,10201,10202,10203,10204,10205,10206,10207,10208,10233,10234,10235,10236\n        ,10237,10238,10246,10247,10254,10257,10258,10259,10260,10261,10270,10271,10272,10273,10278,10279,10280,10281,10282\n        ,10283,10298,10299,10300,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10321\n        ,10324,10326,10328,10329,10330,10331,10332,10333,10334,10335,10336,10337,10362,10363,10364,10365,10366,10367,10368\n        ,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10394,10395,10396,10397\n        ,10398,10399,10400,10412,10413,10414,10415,10416,10419,10420,10421,10422,10426,10427,10428,10429,10430,10431,10432\n        ,10433,10434,10435,10436,10437,10438,10439,10440,10441,10447,10450,10454,10455,10457,10458,10459,10461,10465,10467\n        ,10468,10472,10473,10474,10475,10477,10478,10479,10480,10481,10494,10495,10496,10497\n        Weights: 0.0811896696686745,0.106965370476246,0.0439532324671745,0.0603947602212429,0.504491329193115,0.29615181684494,0.257327705621719\n        ,0.347705841064453,0.225890830159187,0.189256742596626,0.152579382061958,0.211225852370262,0.314609289169312,0.472719848155975\n        ,0.4955133497715,0.511756122112274,0.206776008009911,0.273434907197952,0.348244726657867,0.288756161928177,0.295447260141373\n        ,0.389805644750595,0.216608464717865,0.269484579563141,0.52827388048172,0.0651521161198616,0.155393227934837,0.116333171725273\n        ,0.364117801189423,0.54840350151062,0.488428503274918,0.321933090686798,0.10997598618269,0.217991501092911,0.203374117612839\n        ,0.128395795822144,0.403514206409454,0.434205532073975,0.308789700269699,0.259588360786438,0.0680640563368797,0.10414981842041\n        ,0.132307544350624,0.086383655667305,0.0469684451818466,0.0455419532954693,0.0944439843297005,0.0689528957009315,0.0652325302362442\n        ,0.0889942720532417,0.124588340520859,0.115054629743099,0.0808641090989113,0.078086256980896,0.145058155059814,0.151040598750114\n        ,0.0874453037977219,0.258512765169144,0.197405755519867,0.150129958987236,0.195501983165741,0.583253026008606,0.280665725469589\n        ,0.264542937278748,0.415470987558365,0.555991590023041,0.655387282371521,0.678301155567169,0.129091560840607,0.133147850632668\n        ,0.102706968784332,0.0976598337292671,0.127154722809792,0.0970341414213181,0.0665765851736069,0.0911675244569778,0.123185187578201\n        ,0.153349637985229,0.172009184956551,0.155933886766434,0.093811422586441,0.698477327823639,0.62477844953537,0.645496368408203\n        ,0.253713548183441,0.34293207526207,0.384178310632706,0.470083117485046,0.505369603633881,0.447033524513245,0.566069185733795\n        ,0.250466287136078,0.13798713684082,0.22524531185627,0.0365451537072659,0.098877839744091,0.125019162893295,0.0778745412826538\n        ,0.32728722691536,0.335197657346725,0.548355221748352,0.559520184993744,0.605117619037628,0.66703200340271,0.857504963874817\n        ,0.838888585567474,0.817730724811554,0.68658447265625,0.62231719493866,0.930196166038513,0.901579201221466,0.073124073445797\n        ,0.0728209540247917,0.0774632692337036,0.0730397775769234,0.0615610517561436,0.0576975829899311,0.503667175769806\n        ,0.0770656988024712,0.691126823425293,0.491523891687393,0.518488049507141,0.600300371646881,0.521051943302155,0.570780634880066\n        ,0.485464632511139,0.500299453735352,0.078926146030426,0.932044923305511,0.914662539958954,0.77969491481781,0.83053070306778\n        ,0.48119843006134,0.33202987909317,0.733864486217499,0.885810911655426,0.763347387313843,0.714982330799103,0.552891075611115\n        ,0.51541668176651,0.505415141582489,0.567674338817596,0.490832775831223,0.479702204465866,0.504714846611023,0.591859996318817\n        ,0.507071256637573,0.685161232948303,0.601899802684784,0.278785139322281,0.465399295091629,0.127761036157608,0.295493602752686\n        ,0.165520682930946,0.250842660665512,0.241439938545227,0.263491183519363,0.108098432421684,0.25892972946167,0.497192919254303\n        ,0.497700780630112,0.676034033298492,0.0745359435677528,0.697876036167145,0.622006893157959,0.539307177066803,0.674886465072632\n        ,0.520930409431458,0.541126072406769,0.649991273880005,0.694431722164154,0.384999990463257,0.649999976158142,0.308550924062729\n        ,0.450778424739838,0.649999976158142,0.327679842710495,0.241778329014778,0.420805633068085,0.497350841760635,0.073303334414959\n        ,0.0860887691378593,0.0952140912413597,0.471008658409119,0.478044956922531,0.497991144657135,0.490312159061432,0.537073493003845\n        ,0.498353183269501,0.497871071100235,0.496121853590012,0.191246077418327,0.290554016828537,0.180064454674721,0.224595800042152\n        ,0.330453634262085,0.13161201775074,0.176965922117233,0.163933858275414,0.267501980066299,0.275521218776703,0.249476358294487\n        ,0.233987867832184,0.209987387061119,0.194429218769073,0.164188459515572,0.192451417446136,0.421390801668167,0.431404799222946\n        ,0.430364221334457,0.456319212913513,0.485508620738983,0.463099330663681,0.416302442550659,0.416258484125137,0.438949644565582\n        ,0.480661869049072,0.49902668595314,0.243896454572678,0.319553971290588,0.486177712678909,0.331051826477051,0.407012581825256\n        ,0.27311584353447,0.497810781002045,0.5,0.498094856739044,0.5,0.344194382429123,0.349997818470001,0.497277468442917\n        ,0.5,0.495895445346832,0.480586707592011,0.442554503679276,0.456413328647614,0.298786699771881,0.280739516019821,0.3919517993927\n        ,0.390767812728882,0.384277284145355,0.298110395669937,0.300616472959518,0.293284028768539,0.263502031564713,0.305093467235565\n        ,0.150212869048119,0.384823501110077,0.394534796476364,0.134362503886223,0.0351882837712765,0.365925788879395,0.111604079604149\n        ,0.366223394870758,0.338921874761581,0.126606851816177,0.169872716069222,0.124539494514465,0.267024546861649,0.284294724464417\n        ,0.249173209071159,0.167878016829491,0.074166439473629,0.0663126334547997,0.113084986805916,0.228605255484581,0.218380376696587\n        ,0.198807418346405,0.0853831917047501,0.2009536921978,0.361773580312729,0.27582186460495,0.095493271946907,0.478643804788589\n        ,0.234572812914848,0.384814769029617,0.495410859584808,0.499167263507843,0.365400642156601,0.270231038331985,0.45518159866333\n        ,0.0656886175274849,0.0038784621283412,0.00182033306919038,0.00570681737735868,0.0224756076931953,0.0269702468067408\n        ,0.00732538383454084,0.00128690106794238,0.00738434819504619,0.00386704737320542,0.0120105864480138,0.0196159575134516\n        ,0.0722305700182915,0.00189907208550721,0.00837074406445026,0.00133265019394457,0.00390737317502499,0.00108838721644133\n        ,0.00520020211115479,0.00149579567369074,0.00195087259635329,0.00167434592731297,0.0385287217795849,0.0101689994335175\n        ,0.00581388175487518,0.0194021947681904,0.00715417554602027,0.0199089664965868,0.00318020489066839,0.0635750964283943\n        ,0.0438726767897606,0.0124826999381185,0.0152434539049864,0.00605776254087687,0.0069635221734643,0.00306702312082052\n        ,0.00219031004235148,0.00107819936238229,0.183293163776398,0.123738005757332,0.0837252363562584,0.106336541473866\n        ,0.02176827006042,0.00684678554534912,0.0164734870195389,0.0481944680213928,0.00368563714437187,0.00234336918219924\n        ,0.00420357985422015,0.00932320952415466,0.00249722274020314,0.0306781362742186,0.0462840646505356,0.042948454618454\n        ,0.0715780779719353,0.0368835851550102,0.0379315093159676,0.0431694351136684,0.112874694168568,0.0348013080656528\n        ,0.180167987942696,0.00833920761942863,0.0163257773965597,0.0127486828714609,0.0269198063760996,0.0201910994946957\n        ,0.00653758551925421,0.105009749531746,0.0578845925629139,0.0229682829231024,0.0176938530057669,0.00325983925722539\n        ,0.00534686958417296,0.00589984748512506,0.00204170658253133,0.00146694935392588,0.0015066540800035,0.00157240615226328\n        ,0.0013683115830645,0.481965035200119,0.688069224357605,0.726324617862701,0.680854439735413,0.408174365758896,0.56397271156311\n        ,0.856086015701294,0.628196120262146,0.0358021147549152,0.0388568043708801,0.0347223058342934,0.0159178152680397,0.294692695140839\n        ,0.121550291776657,0.318417549133301,0.152870550751686,0.0297826658934355,0.0287917274981737,0.0230006705969572,0.0213493201881647\n        ,0.021949103102088,0.0226233545690775,0.0245684403926134,0.0207092072814703,0.0198129694908857,0.0292157959192991\n        ,0.0285200476646423,0.0244624875485897,0.0285634938627481,0.0266288779675961,0.0233569946140051,0.0230660326778889\n        ,0.0223205760121346,0.0235582739114761,0.0270807910710573,0.0252497419714928,0.0205877032130957,0.0210633222013712\n        ,0.0520002655684948,0.0519647859036922,0.0151932295411825,0.0169342141598463,0.0237237010151148,0.0229084882885218\n        ,0.0212979335337877,0.0211339090019464,0.0157450083643198,0.0149975558742881,0.0140739753842354,0.0225031841546297\n        ,0.0182464756071568,0.0170384235680103,0.0186013076454401,0.0150382602587342,0.0126649113371968,0.0126809123903513\n        ,0.0219173114746809,0.0171132441610098,0.0192538872361183,0.0219725165516138,0.0210953764617443,0.0230501908808947\n        ,0.0233804732561111,0.0214685052633286,0.0210958626121283,0.0274754408746958,0.0225150212645531,0.0507607273757458\n        ,0.00324849225580692,0.00230311276391149,0.0205044820904732,0.0195952504873276,0.0208354070782661,0.0230906028300524\n        ,0.0224607158452272,0.0257405936717987,0.0201869662851095,0.0517509244382381,0.0203061792999506,0.0184621382504702\n        ,0.0202194061130285,0.0262561142444611,0.0242316443473101,0.0248070918023586,0.0258013997226954,0.0232786629348993\n        ,0.021582905203104,0.0208789668977261,0.0204930528998375,0.0211619697511196,0.0254055745899677,0.0262512918561697\n        ,0.0226288698613644,0.0245581641793251,0.0239381864666939,0.0214787982404232,0.0214498583227396,0.0205761771649122\n        ,0.0259324423968792,0.0252932719886303,0.0207940619438887,0.0208942238241434,0.019823607057333,0.0189799387007952\n        ,0.022341238334775,0.0175818745046854,0.021635364741087,0.0208590421825647,0.0202130284160376,0.0228413138538599,0.0187332164496183\n        ,0.0222814083099365,0.00721948593854904,0.00893825478851795,0.0122251715511084,0.0131850503385067,0.0238036401569843\n        ,0.0233332365751266,0.0189465973526239,0.0196329019963741,0.0217657741159201,0.0186960380524397,0.0192628987133503\n        ,0.0228047538548708,0.0188687704503536,0.00966120511293411,0.00806799624115229,0.00595046579837799,0.00591902295127511\n        ,0.0232310779392719,0.0264482256025076,0.029419269412756,0.0252193752676249,0.0389464311301708,0.0249736830592155\n        ,0.0361362397670746,0.025445282459259,0.0225537400692701,0.0238805040717125,0.0220386572182179,0.0208422690629959\n        ,0.020428255200386,0.0189677346497774,0.0206352658569813,0.021261390298605,0.0100880740210414,0.0100587056949735,0.0217400155961514\n        ,0.0242703147232533,0.0314539447426796,0.0146723967045546,0.016406362876296,0.00290933577343822,0.00303262821398675\n        ,0.0109252370893955,0.00135533628053963,0.0026568693574518,0.0238387305289507,0.023859228938818,0.0229988656938076\n        ,0.0269602816551924,0.0106720477342606,0.0104876281693578,0.019563851878047,0.0196315422654152,0.029798885807395,0.0370448529720306\n        ,0.0274094771593809,0.0410918444395065,0.0189183801412582,0.020300354808569,0.0153505494818091,0.0133901620283723\n        ,0.0227218400686979,0.0189896188676357,0.0139062767848372,0.0196586865931749,0.0152109181508422,0.0214336402714252\n        ,0.0111258868128061,0.00999513454735279,0.0197951514273882,0.0215826574712992,0.0487717166543007,0.041760291904211\n        ,0.0189418196678162,0.00134728313423693,0.0198628734797239,0.00401673326268792,0.00362365040928125,0.00175487017259002\n        ,0.00186694483272731,0.00233244802802801,0.00539519498124719,0.0136201335117221,0.0129918465390801,0.0130262523889542\n        ,0.0141849555075169,0.0142200998961926,0.0060765091329813,0.00598268769681454,0.00254058255814016,0.00413914304226637\n        \n        Transform: -0.987461993727725,-0.0695892778200937,0.141690541961846,0,-0.136984517421225,-0.0683111254337173,-0.988214958114558\n        ,0,0.0784482095958496,-0.99523410378089,0.0579219836329766,0,7.30754685020742,2.41825467121705,59.8176295206032,1\n        \n        TransformLink: -0.987461925929919,-0.136984508016053,0.0784482042097015,0,-0.0695892779054036,-0.0683111255174604,-0.995234105000953\n        ,0,0.141690546310218,-0.988214988442108,0.0579219854105573,0,-1.09138372286622,60.2788924737958,-1.63129026859045\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_eye_joint1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 98,99,106,110,151,152,153,154,155,156,157,158,159,160,161,162,164,165,177,178,179,180,181,182,183,184,185,213,214\n        ,216,217,218,219,220,291,292,324,326,336,337,750,751,752,754,755,796,797,828,833,883,884,942,943,944,945,946,1000\n        ,1053,1087,1088,1090,1091,1149,1153,1162,1201,1746,1747,1748,1756,1757,1758,1830,1831,1832,1833,1834,1835,1836,1837\n        ,1838,1839,1840,1841,1842,1843,1854,1855,1856,1857,1858,1859,1860,1861,1862,1890,1891,1892,1893,1894,1895,1959,1960\n        ,1961,1962,1964,1991,1992,1993,2002,2003,2005,2009,2010,2011,2012,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043\n        ,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066\n        ,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2079,2080,2081,2082,2083,2084,2086,2087,2088,2090,2093,2094\n        ,2095,2096,2097,2098,2099,2100,2101,2173,2178,2179,2180,2265,2269,2270,2271,2319,2320,2321,2322,2323,2324,2325,2326\n        ,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2404,2422,2423,2424,2425,2426,2427,2449,2450,2467,2468\n        ,2469,2470,2475,2499,2504,2508,2509,2510,2511,2512,2555,2556,2560,2595,2596,2597,2598,2609,2610,2617,2618,2619,2620\n        ,2621,2622,2640,2651,2652,2653,2654,2655,2656,2657,2666,2667,2668,2669,2678,2679,2690,2691,2702,2703,2716,2717,2718\n        ,2719,2730,2733,2734,2735,2736,2737,2738,2739,2752,2768,2769,2771,2772,2792,2793,2806,2807,2808,2813,2818,2819,2831\n        ,2835,2844,2851,2852,2853,2854,2855,2856,2880,2897,2898,2910,2911,2913,2914,3164,3165,3166,3167,3168,3169,3170,3171\n        ,3172,3173,3174,3175,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210\n        ,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3230,3235,3236,3237,3238\n        ,3239,3240,3241,3242,3244,3245,3247,3248,3249,3314,3315,3317,3318,3319,3321,3322,3323,3324,3325,3329,3330,3331,3332\n        ,3333,3334,3338,3339,3342,3355,3358,3362,3363,3365,3366,3367,3368,3372,3383,3384,3385,3403,3404,3423,3424,3425,3432\n        ,3433,3472,3480,3484,3485,3500,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568\n        ,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591\n        ,3592,3593,3594,3595,3596,3597,3598,3599,3600,4052,4053,4054,4055,4056,4057,4058,4060,4062,4063,4064,4065,4066,4067\n        ,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090\n        ,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113\n        ,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4130,4131,4132,4133,4134,4135,4136,4137\n        ,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160\n        ,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183\n        ,4184,4185,4186,4187,4188,4189,4190,4191,4193,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208\n        ,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232\n        ,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257\n        ,4258,4259,4260,4261,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4279,4280,4281,4282\n        ,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4302,4303,4304,4305,4306\n        ,4307,4308,4309,4310,4311,4314,4315,4316,4317,4318,4319,4321,4322,4323,4326,4327,4328,4329,4330,4331,4333,4334,4335\n        ,4336,4337,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363\n        ,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386\n        ,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409\n        ,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,5790,5791\n        ,5795,5796,5797,5798,5799,5800,5828,5830,5831,5834,5837,5838,5840,5841,5842,5843,5846,5848,5879,5883,5904,5937,5964\n        ,5965,5966,5967,5968,5969,5970,5971,5972,5975,5977,5980,5981,5985,5989,5990,6004,6020,6141,6159,6162,6192,6467,6485\n        ,6489,6493,6494\n        Weights: 0.0038912461604923,0.00746879680082202,0.00141331483609974,0.01067846827209,0.013077687472105,0.0246206074953079,0.0236639585345984\n        ,0.0152580700814724,0.0286018270999193,0.0310774073004723,0.0312411542981863,0.0261699371039867,0.0184016786515713\n        ,0.0347599051892757,0.024570794776082,0.0318554602563381,0.041717704385519,0.0357340350747108,0.00606823712587357\n        ,0.00972852203994989,0.0188133157789707,0.0098462775349617,0.0125692626461387,0.019047936424613,0.00273100752383471\n        ,0.00462566455826163,0.00593316461890936,0.00270845112390816,0.00425019580870867,0.00877111963927746,0.0125265428796411\n        ,0.0174335725605488,0.00591986905783415,0.00135375326499343,0.00188461295329034,0.00151532597374171,0.00204999255947769\n        ,0.00690315803512931,0.00123022275511175,0.00282211299054325,0.00406783912330866,0.00228741578757763,0.0011156260734424\n        ,0.00105570175219327,0.00231963209807873,0.00712635600939393,0.00509478570893407,0.0051323501393199,0.00548261823132634\n        ,0.00537449773401022,0.00795647688210011,0.00294765923172235,0.00560125382617116,0.0033296609763056,0.00171174516435713\n        ,0.00288268574513495,0.00104738119989634,0.00211143540218472,0.00455130264163017,0.00443605519831181,0.0119684366509318\n        ,0.00844237580895424,0.00610086182132363,0.0057710106484592,0.00910606142133474,0.0129934316501021,0.0254145096987486\n        ,0.0266697257757187,0.0183888282626867,0.0464220605790615,0.0186563823372126,0.0157747473567724,0.0484627932310104\n        ,0.0810441970825195,0.0768198370933533,0.0468261800706387,0.0932487100362778,0.0852285027503967,0.0717913508415222\n        ,0.0682760924100876,0.0428164899349213,0.0595326125621796,0.0388268604874611,0.0580568835139275,0.0475558713078499\n        ,0.0521105714142323,0.035434115678072,0.0606706887483597,0.075504295527935,0.0447081252932549,0.075449101626873,0.0893826857209206\n        ,0.0160036776214838,0.0208015814423561,0.0227869488298893,0.00141787191387266,0.00676626246422529,0.0065395925194025\n        ,0.00140758685301989,0.0207227878272533,0.0193231124430895,0.00740664172917604,0.00680384412407875,0.00158558180555701\n        ,0.00143789895810187,0.00504043977707624,0.00720629096031189,0.00148507207632065,0.0222162082791328,0.0100442161783576\n        ,0.0237202029675245,0.002926493762061,0.00792062189429998,0.0278539098799229,0.0013780000153929,0.0272102281451225\n        ,0.349999994039536,0.150000005960464,0.449999988079071,0.150000005960464,0.150000005960464,0.219999998807907,0.539033949375153\n        ,0.649999976158142,0.749286413192749,0.5,0.752774000167847,0.800000011920929,0.699999988079071,0.699999988079071,0.150000005960464\n        ,0.164102658629417,0.242218345403671,0.110994532704353,0.200312361121178,0.119263090193272,0.147319793701172,0.226669728755951\n        ,0.100000001490116,0.342192471027374,0.502626240253448,0.691313743591309,0.464090317487717,0.100000001490116,0.288183063268662\n        ,0.00674763834103942,0.00481084920465946,0.0242928043007851,0.0119534581899643,0.0154355028644204,0.00483096996322274\n        ,0.00424615060910583,0.0158611889928579,0.00221397657878697,0.0145594794303179,0.0105838282033801,0.0327097326517105\n        ,0.0444533079862595,0.0895712301135063,0.0500000007450581,0.0221567433327436,0.0531193725764751,0.0414562374353409\n        ,0.0757283121347427,0.133984073996544,0.107808001339436,0.00132235384080559,0.010545508004725,0.00400018226355314\n        ,0.00207298039458692,0.0700000002980232,0.0313636586070061,0.0215178523212671,0.0156056005507708,0.034803070127964\n        ,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.00151988526340574,0.0085519477725029,0.0297721326351166\n        ,0.0211408082395792,0.0018999184248969,0.00622903881594539,0.0202187467366457,0.00821313075721264,0.175155088305473\n        ,0.20246547460556,0.0748029351234436,0.0500103756785393,0.1078976765275,0.0739056691527367,0.0437904708087444,0.0616192035377026\n        ,0.0512847304344177,0.0351532548666,0.15351414680481,0.115480601787567,0.0785194784402847,0.106780119240284,0.0841209962964058\n        ,0.061554454267025,0.100000001490116,0.0865721106529236,0.114501155912876,0.116757825016975,0.00275758747011423,0.0395147576928139\n        ,0.0261142645031214,0.0137884160503745,0.00676471227779984,0.0145978583022952,0.0223576165735722,0.0301102176308632\n        ,0.0289073176681995,0.00515285972505808,0.0546868927776814,0.0412694625556469,0.00425857631489635,0.00223806616850197\n        ,0.0238872319459915,0.0314677245914936,0.0603148639202118,0.0919864401221275,0.117405980825424,0.00103968661278486\n        ,0.00140306551475078,0.0181460976600647,0.0135137075558305,0.00193576700985432,0.182137340307236,0.111208200454712\n        ,0.128003790974617,0.0730748623609543,0.0212860628962517,0.0486274063587189,0.00415304768830538,0.00841330084949732\n        ,0.00778522342443466,0.00381538085639477,0.0112824933603406,0.00411980412900448,0.00129261950496584,0.0338672325015068\n        ,0.105499587953091,0.0661656931042671,0.15208226442337,0.256753355264664,0.188580900430679,0.150000005960464,0.00176679529249668\n        ,0.0045908116735518,0.00990359205752611,0.00294763781130314,0.00140576681587845,0.00121235230471939,0.088316410779953\n        ,0.122155249118805,0.0623086728155613,0.0372041761875153,0.152274057269096,0.0877154096961021,0.20766144990921,0.128310024738312\n        ,0.00272386288270354,0.0148188229650259,0.581505417823792,0.60775899887085,0.391209810972214,0.449999988079071,0.367483019828796\n        ,0.21595473587513,0.00511999987065792,0.0337072089314461,0.0243593472987413,0.0595335252583027,0.0494096390902996\n        ,0.288400173187256,0.254165440797806,0.0184773337095976,0.0233920011669397,0.0105660744011402,0.0417584367096424,0.00572074064984918\n        ,0.00440607406198978,0.0402106605470181,0.0455601029098034,0.0595960952341557,0.236882373690605,0.274818778038025\n        ,0.173639640212059,0.00821051653474569,0.00111673469655216,0.00192473467905074,0.0744823962450027,0.0209792852401733\n        ,0.0242483224719763,0.00515718245878816,0.0168403051793575,0.00198370963335037,0.0062483036890626,0.393967807292938\n        ,0.297216445207596,0.284882426261902,0.779509365558624,0.707262277603149,0.47817474603653,0.39839693903923,0.383381128311157\n        ,0.272867739200592,0.354216724634171,0.215759769082069,0.313570141792297,0.0679698660969734,0.0687856376171112,0.0261576380580664\n        ,0.234204679727554,0.0370325855910778,0.0571153126657009,0.103240847587585,0.1180534735322,0.190469533205032,0.143643140792847\n        ,0.151886433362961,0.193937033414841,0.133460149168968,0.234541907906532,0.253086447715759,0.305678099393845,0.364733636379242\n        ,0.400832086801529,0.342316150665283,0.30690062046051,0.42099592089653,0.502739071846008,0.495381146669388,0.371182233095169\n        ,0.899999976158142,0.899999976158142,0.980000019073486,1,1,0.980000019073486,0.980000019073486,0.980000019073486,0.835542321205139\n        ,0.85124671459198,0.727739691734314,0.202030509710312,0.133721649646759,0.156758695840836,0.00306026707403362,0.0663799419999123\n        ,0.0627863854169846,0.0726863443851471,0.0683878138661385,0.0423226542770863,0.0181763526052237,0.0500000007450581\n        ,0.0500000007450581,0.0500000007450581,0.0340265333652496,0.0206213351339102,0.00880161300301552,0.061221182346344\n        ,0.149439617991447,0.139599531888962,0.0114001017063856,0.00134399998933077,0.0368302874267101,0.00511999987065792\n        ,0.00479999976232648,0.00375466677360237,0.00184088898822665,0.00231452425941825,0.0391958728432655,0.108779542148113\n        ,0.128863975405693,0.0109759103506804,0.00937955174595118,0.00162896886467934,0.0034905462525785,0.440623670816422\n        ,0.00229969387874007,0.0058504375629127,0.150000005960464,0.0012159482575953,0.00647590681910515,0.0137380259111524\n        ,0.00691936537623405,0.00245999894104898,0.0314241163432598,0.0719676613807678,0.0235037468373775,0.00513688893988729\n        ,0.150000005960464,0.300000011920929,0.0837228745222092,0.0730877444148064,0.0616817027330399,0.084648534655571,0.0647208988666534\n        ,0.00780501682311296,0.649999976158142,0.31384065747261,0.376428991556168,0.00612152414396405,0.0864159390330315,0.128799378871918\n        ,0.0639853924512863,0.0571126453578472,0.182525634765625,0.259402930736542,0.11110020428896,0.121370367705822,0.123139880597591\n        ,0.431690454483032,0.0678107142448425,0.116970963776112,0.151332914829254,0.128084793686867,0.188019275665283,0.254704773426056\n        ,0.222260326147079,0.426697045564651,0.313478171825409,0.662932276725769,0.712575972080231,0.714460909366608,0.744367778301239\n        ,0.797382295131683,0.710675418376923,0.0866629257798195,0.0836607664823532,0.144993305206299,0.0611713975667953,0.0595202445983887\n        ,0.173436269164085,0.209887385368347,0.116518676280975,0.103099502623081,0.312380999326706,0.114136606454849,0.124968446791172\n        ,0.145314767956734,0.195556074380875,0.169761568307877,0.368388921022415,0.226643174886703,0.522917032241821,0.606863260269165\n        ,0.602068185806274,0.602239727973938,0.671783566474915,0.573743999004364,0.0799809694290161,0.0028724349103868,0.00273489975370467\n        ,0.00224263756535947,0.00261519732885063,0.00237992848269641,0.00147316930815578,0.00201171170920134,0.00189624272752553\n        ,0.00219413707964122,0.00245666946284473,0.00189763796515763,0.00182186311576515,0.00285251555033028,0.00287016853690147\n        ,0.00251814303919673,0.00248833745718002,0.00266813719645143,0.00287493271753192,0.00301240081898868,0.0032727187499404\n        ,0.00284083373844624,0.00320788915269077,0.00359099078923464,0.00412758998572826,0.00315631576813757,0.00323004997335374\n        ,0.00321480701677501,0.00332579459063709,0.00285214022733271,0.00295891449786723,0.00354001857340336,0.00337863969616592\n        ,0.00334977172315121,0.00339434412308037,0.00338804326020181,0.00335639086551964,0.00369864515960217,0.0037561864592135\n        ,0.00450852140784264,0.00450629414990544,0.00589997135102749,0.00577224884182215,0.00300176558084786,0.00284553435631096\n        ,0.0033055804669857,0.00401255441829562,0.00271141226403415,0.00304197636432946,0.0032030027359724,0.00278149824589491\n        ,0.00322267832234502,0.00290161650627851,0.00361466920003295,0.00428378861397505,0.00334629463031888,0.00336101255379617\n        ,0.00307296216487885,0.0032977256923914,0.00341798411682248,0.00368143315427005,0.00296677765436471,0.00290974951349199\n        ,0.00300370645709336,0.00312284333631396,0.00280307792127132,0.00274716271087527,0.00294384569860995,0.00303437188267708\n        ,0.00293560628779233,0.00535764917731285,0.00444378051906824,0.0034510565456003,0.00472006853669882,0.00181388761848211\n        ,0.00337480590678751,0.00235132407397032,0.00315221515484154,0.00429010717198253,0.00224503269419074,0.0047888970002532\n        ,0.00585188902914524,0.00548017863184214,0.00454346882179379,0.00465585617348552,0.00493457354605198,0.00388614949770272\n        ,0.00589821254834533,0.00602432992309332,0.00503173423931003,0.00664270063862205,0.00652361335232854,0.00738831702619791\n        ,0.00736821768805385,0.00598593987524509,0.00570765323936939,0.0052280118688941,0.00812239944934845,0.00690612616017461\n        ,0.00922985840588808,0.00964972749352455,0.0100229699164629,0.00979678798466921,0.00947143416851759,0.00988043006509542\n        ,0.00788048282265663,0.00827876199036837,0.00714467046782374,0.00750800548121333,0.00554124126210809,0.00850069615989923\n        ,0.0075537096709013,0.00673130573704839,0.0071938019245863,0.00710836937651038,0.00676870625466108,0.00553518440574408\n        ,0.00828305631875992,0.00855810195207596,0.00742994295433164,0.00832461938261986,0.0091610960662365,0.00952113978564739\n        ,0.00609192904084921,0.00660995859652758,0.00667747063562274,0.00747788092121482,0.00544685358181596,0.00532601587474346\n        ,0.00636698864400387,0.00747411930933595,0.00729592377319932,0.00196876213885844,0.00167774257715791,0.00197391537949443\n        ,0.00210932898335159,0.00105903821531683,0.0016689149197191,0.00136837980244309,0.00125867768656462,0.00219658622518182\n        ,0.00218117795884609,0.00233970722183585,0.00260340375825763,0.00225786538794637,0.00227275397628546,0.00218520546332002\n        ,0.00229749316349626,0.00238911714404821,0.00247099064290524,0.00225680181756616,0.00237468630075455,0.00242421845905483\n        ,0.00274204649031162,0.00256723049096763,0.00336809456348419,0.00306707480922341,0.00234764581546187,0.00248749298043549\n        ,0.00255475123412907,0.00318171083927155,0.00242847763001919,0.00311959092505276,0.0035705070476979,0.00224441569298506\n        ,0.00123613397590816,0.00155509519390762,0.00416996888816357,0.0040141916833818,0.00318032247014344,0.00434468686580658\n        ,0.00411119963973761,0.00373093411326408,0.00657161371782422,0.00643852632492781,0.00604194169864058,0.00593365449458361\n        ,0.0058493041433394,0.00548689533025026,0.00469370279461145,0.00422931695356965,0.00523619493469596,0.00584275601431727\n        ,0.00618052296340466,0.00250652339309454,0.00213699461892247,0.00138027011416852,0.0027654857840389,0.00286928634159267\n        ,0.00325076188892126,0.0032718819566071,0.00351603957824409,0.00424721231684089,0.00551357073709369,0.00331737310625613\n        ,0.00320188654586673,0.00227472884580493,0.00291172997094691,0.00287038390524685,0.00302322162315249,0.00324240955524147\n        ,0.00419651810079813,0.00167633499950171,0.00501104025170207,0.0055063646286726,0.00934084132313728,0.00949322339147329\n        ,0.00925296358764172,0.00772196892648935,0.00849300436675549,0.00798273459076881,0.004718744661659,0.00585839105769992\n        ,0.00640948535874486,0.0071573075838387,0.0029482904355973,0.00891218427568674,0.0102696055546403,0.00801469944417477\n        ,0.0075694783590734,0.00829983130097389,0.00948033947497606,0.00821911729872227,0.0088095311075449,0.00777143286541104\n        ,0.00785871688276529,0.00711476756259799,0.0069456766359508,0.00646172650158405,0.00789961684495211,0.00749206775799394\n        ,0.00839586462825537,0.00768001656979322,0.00888935849070549,0.00799908488988876,0.0094854049384594,0.00838644616305828\n        ,0.00998248253017664,0.00871728733181953,0.00874925404787064,0.00752222584560514,0.00852789543569088,0.00786581169813871\n        ,0.00688365427777171,0.00592871708795428,0.00658458471298218,0.00701384944841266,0.0074963322840631,0.00806235335767269\n        ,0.00851017609238625,0.00763430166989565,0.00866615958511829,0.0079189445823431,0.00680210301652551,0.00572706665843725\n        ,0.00624250480905175,0.00361610692925751,0.00403973972424865,0.00464699137955904,0.00516547728329897,0.00528786843642592\n        ,0.00489354878664017,0.00416175229474902,0.0033993604592979,0.00355392741039395,0.00360536435618997,0.0021504673641175\n        ,0.0046223346143961,0.00879024062305689,0.0082965986803174,0.0088426573202014,0.0104714669287205,0.00916303694248199\n        ,0.00852636806666851,0.00781917851418257,0.0084534827619791,0.00698069809004664,0.00365751283243299,0.00275685871019959\n        ,0.00306416256353259,0.00407540565356612,0.0031653237529099,0.00355168106034398,0.00319073838181794,0.00358729413710535\n        ,0.00310353306122124,0.00346082681789994,0.0029276676941663,0.00320818251930177,0.00272714579477906,0.0029269983060658\n        ,0.00231565744616091,0.00244255387224257,0.00347824790515006,0.00379278091713786,0.00359018542803824,0.00396385602653027\n        ,0.00367449503391981,0.00409605354070663,0.0036963012535125,0.0041322004981339,0.00274232355877757,0.00358765525743365\n        ,0.00321995210833848,0.00328098819591105,0.00315649411641061,0.00288322917185724,0.00257438328117132,0.00211100280284882\n        ,0.00332666095346212,0.00351023417897522,0.00364485383033752,0.00366668263450265,0.0022805470507592,0.00273415795527399\n        ,0.00324346288107336,0.00332364905625582,0.00318467197939754,0.00286923488602042,0.00251456326805055,0.00203057285398245\n        ,0.00176350364927202,0.00180430873297155,0.00192816136404872,0.00209267088212073,0.00169648032169789,0.00137202127370983\n        ,0.00207436457276344,0.00218321965076029,0.00210944400168955,0.00187669682782143,0.00159703101962805,0.00125271349679679\n        ,0.00105652003549039,0.00199300702661276,0.00113289791624993,0.00123676413204521,0.00255915010347962,0.00141588877886534\n        ,0.00208958005532622,0.00196704873815179,0.00216767517849803,0.00232494808733463,0.00259238597936928,0.00358449853956699\n        ,0.00352447549812496,0.00344475172460079,0.003357496811077,0.00347600504755974,0.00337328994646668,0.00364757981151342\n        ,0.00315107614733279,0.00319626065902412,0.00326616037636995,0.00334058725275099,0.00340767367742956,0.00392938638105989\n        ,0.00355419632978737,0.00237688352353871,0.00454634195193648,0.0019630070310086,0.00281993020325899,0.00906544551253319\n        ,0.00831099599599838,0.00224613631144166,0.0197735726833344,0.00137500802520663,0.00211713276803494,0.00517774606123567\n        ,0.00154388858936727,0.0029610728379339,0.00337772024795413,0.00518400780856609,0.0042556906118989,0.00429127365350723\n        ,0.00385551853105426,0.00231104274280369,0.0017273563425988,0.00102619617246091,0.0148404175415635,0.00504331663250923\n        ,0.00361545896157622,0.00329389865510166,0.00222742976620793,0.00301670958288014,0.00169996067415923,0.00180735485628247\n        ,0.00242576887831092,0.00138427189085633,0.0027351276949048,0.00137489358894527,0.00255316752009094,0.00110148976091295\n        ,0.00185089581646025,0.0012406351743266,0.00199872045777738,0.00163026701193303,0.00174500199500471,0.00111509673297405\n        ,0.00157053663861007,0.00127368152607232,0.0013530672295019,0.00129679474048316,0.0015278987120837,0.00107203773222864\n        ,0.00807942263782024,0.00218584365211427,0.00115716061554849,0.00101477664429694\n        Transform: 0.993331668793896,0.10763360959548,-0.041318187638811,0,-0.024448608213334,-0.153576078058137,-0.987834247540742,0\n        ,-0.112669667543803,0.982257219833786,-0.149920490130099,0,-0.104756966978286,7.87776069093907,67.510384927605,1\n        TransformLink: 0.993331676088063,-0.0244486083928634,-0.112669668371151,0,0.107633625570262,-0.153576100851615,0.982257365618587\n        ,0,-0.0413181939768159,-0.98783439906961,-0.149920513127158,0,2.04555364893807,67.8963551342133,2.37140015377402,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_eye_joint\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 70,71,94,95,98,99,106,108,109,110,120,121,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146\n        ,147,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,171,172,173,174,175,176,177,178,179\n        ,180,181,182,183,184,185,212,213,214,215,216,217,218,219,220,291,292,293,294,295,296,324,325,326,328,329,336,337,339\n        ,340,344,345,346,347,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393\n        ,394,396,397,398,399,400,401,402,403,404,405,406,407,409,410,411,414,416,417,418,420,421,422,423,424,425,426,427,428\n        ,500,501,502,503,504,506,507,508,573,574,575,576,577,578,590,591,644,645,646,647,648,649,650,651,652,653,654,655,656\n        ,657,658,659,660,661,662,663,729,731,750,751,752,753,754,755,775,777,778,779,780,795,796,797,798,803,816,817,825,827\n        ,828,829,830,831,832,833,837,838,839,844,882,883,884,885,914,915,916,917,924,925,926,927,934,935,936,942,943,944,945\n        ,946,947,964,973,974,975,976,977,978,979,980,989,990,998,1000,1001,1004,1005,1006,1007,1011,1012,1013,1023,1024,1025\n        ,1026,1028,1037,1038,1039,1050,1053,1054,1055,1056,1057,1058,1059,1068,1069,1070,1087,1088,1089,1090,1091,1092,1093\n        ,1102,1103,1110,1111,1112,1117,1126,1131,1132,1144,1147,1148,1149,1153,1154,1155,1156,1157,1159,1160,1161,1162,1166\n        ,1167,1169,1170,1171,1172,1173,1174,1201,1207,1218,1221,1231,1232,1235,1506,1507,1508,1509,1510,1511,1512,1513,1514\n        ,1515,1516,1517,1523,1526,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546\n        ,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1570,1571,1572,1573,1574,1575,1576\n        ,1577,1642,1643,1645,1646,1647,1648,1650,1651,1654,1655,1656,1657,1658,1659,1666,1679,1680,1681,1684,1685,1686,1687\n        ,1688,1689,1690,1691,1692,1693,1695,1698,1699,1707,1708,1709,1710,1712,1714,1726,1727,1728,1731,1732,1733,1734,1741\n        ,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1792,1796,1806\n        ,1807,1808,1810,1811,1813,1814,1815,1816,1817,1821,1822,1825,1827,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839\n        ,1840,1841,1842,1843,1844,1845,1846,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1890,1891\n        ,1892,1893,1894,1895,1959,1960,1961,1962,1963,1964,1991,1992,1993,1994,1995,2002,2003,2005,2422,2423,2424,2425,2426\n        ,2427,2467,2468,2469,2470,2475,2499,2500,2501,2502,2503,2504,2512,2554,2555,2556,2557,2560,2585,2586,2587,2588,2617\n        ,2618,2619,2620,2621,2622,2629,2640,2666,2667,2668,2669,2670,2676,2678,2679,2689,2730,2733,2768,2769,2770,2771,2772\n        ,2773,2774,2829,2830,2831,2835,2837,2838,2844,2880,2913,2914,3408,3409,3410,3423,3424,3425,3426,3427,3428,3429,3430\n        ,3431,3432,3433,3434,3435,3436,3437,3438,3486,3487,3499,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612\n        ,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635\n        ,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,5359,5360,5364,5397,5399,5400,5404,5407,5408,5410,5411\n        ,5412,5413,5416,5418,5443,5453,5474,5503,5504,5508,5510,5536,5537,5538,5539,5540,5541,5542,5543,5544,5547,5552,5553\n        ,5554,5557,5561,5562,5576,5592,5644,5662,5665,5684,5726,5728,5732,5736\n        Weights: 0.00225406116805971,0.00299270241521299,0.00314046395942569,0.00142694683745503,0.00384869473055005,0.00592560134828091\n        ,0.00200975174084306,0.00715580768883228,0.00537628959864378,0.00739909242838621,0.00239976635202765,0.00138659891672432\n        ,0.0061279172077775,0.00658823549747467,0.00824131164699793,0.00719038164243102,0.00956671498715878,0.0120942890644073\n        ,0.0133896032348275,0.00891112256795168,0.00740056345239282,0.00646934891119599,0.00637939153239131,0.00126555329188704\n        ,0.00449737347662449,0.00272365752607584,0.00274063716642559,0.00139470375142992,0.0045706620439887,0.00445523951202631\n        ,0.00670536514371634,0.0262232050299644,0.035804707556963,0.0377006456255913,0.0280813500285149,0.0405757576227188\n        ,0.0415965355932713,0.0393838249146938,0.0370488241314888,0.0285728257149458,0.0360037907958031,0.029328715056181\n        ,0.0361984297633171,0.0339969955384731,0.0357963219285011,0.0318237543106079,0.00914799701422453,0.0155569585040212\n        ,0.0171203799545765,0.00547765055671334,0.00529744848608971,0.00671972194686532,0.0112307257950306,0.0072063491679728\n        ,0.00848108436912298,0.0129470666870475,0.0159949082881212,0.0226276535540819,0.0304606538265944,0.0219458937644959\n        ,0.0269811600446701,0.0352062843739986,0.00932966638356447,0.0130579331889749,0.0156794786453247,0.00327899609692395\n        ,0.0085839768871665,0.00914031360298395,0.00356043060310185,0.0175848435610533,0.0184314381331205,0.0194156914949417\n        ,0.00963829085230827,0.00380341988056898,0.00757872546091676,0.00627756444737315,0.00289895292371511,0.00237405230291188\n        ,0.00136809202376753,0.0043934378772974,0.00818693824112415,0.00311475805938244,0.0169690046459436,0.00107458676211536\n        ,0.00117155455518514,0.00565435644239187,0.00999229587614536,0.00254443008452654,0.00318441540002823,0.0741772800683975\n        ,0.0924278497695923,0.0274049881845713,0.138513386249542,0.579739809036255,0.445804357528687,0.510030806064606,0.299037575721741\n        ,0.251733839511871,0.377906203269959,0.698451936244965,0.649999976158142,0.850000023841858,0.75,0.899999976158142\n        ,0.949999988079071,0.75,0.75,0.162479013204575,0.162473782896996,0.239764705300331,0.117019481956959,0.100000001490116\n        ,0.314426273107529,0.442865610122681,0.649999976158142,0.379082888364792,0.100000001490116,0.0029387956019491,0.00929927919059992\n        ,0.00298508838750422,0.00750204036012292,0.00200997781939805,0.00188099674414843,0.00782627891749144,0.0227196458727121\n        ,0.0229735802859068,0.0481614321470261,0.0551468729972839,0.106037020683289,0.0339427515864372,0.0257349461317062\n        ,0.0585545152425766,0.110038615763187,0.01064791996032,0.00200310163199902,0.0102275665849447,0.00237495475448668\n        ,0.0384428389370441,0.0149681828916073,0.00486927153542638,0.0339592806994915,0.0590300299227238,0.0914978757500649\n        ,0.161068394780159,0.124054789543152,0.0800120905041695,0.00387670774944127,0.0485085695981979,0.0384997762739658\n        ,0.0122045539319515,0.013538776896894,0.144682094454765,0.256250083446503,0.336145132780075,0.002973897382617,0.00891208928078413\n        ,0.00199143635109067,0.00917734857648611,0.0215485915541649,0.00575529271736741,0.00395605154335499,0.0026860658545047\n        ,0.125525027513504,0.140216618776321,0.0238694231957197,0.0142579050734639,0.048931673169136,0.0338563732802868,0.00757236639037728\n        ,0.0109836980700493,0.00744025874882936,0.00380006502382457,0.0845025405287743,0.0692142695188522,0.0467887856066227\n        ,0.0562854818999767,0.0258110873401165,0.0201738514006138,0.146569639444351,0.0903132930397987,0.167498186230659,0.10464883595705\n        ,0.00314257550053298,0.0123085863888264,0.0114605892449617,0.00852362066507339,0.00543177081272006,0.00255902297794819\n        ,0.00438370183110237,0.00621197698637843,0.00119641202036291,0.0199999995529652,0.0199999995529652,0.0199999995529652\n        ,0.0199999995529652,0.00286894803866744,0.0183880105614662,0.0147572588175535,0.00148830120451748,0.00124421424698085\n        ,0.0117347855120897,0.0103331999853253,0.00500483578070998,0.00199292507022619,0.00784185156226158,0.00654877489432693\n        ,0.00432892935350537,0.00542736705392599,0.00806710496544838,0.00971512403339148,0.0500000007450581,0.100000001490116\n        ,0.100000001490116,0.00202715280465782,0.00701918220147491,0.00660502957180142,0.00692577799782157,0.00690311519429088\n        ,0.00360431079752743,0.00568113895133138,0.0053304610773921,0.00321385520510376,0.200000002980232,0.200000002980232\n        ,0.464121609926224,0.372001975774765,0.00137971458025277,0.0794769674539566,0.0914423316717148,0.003408428048715,0.00531325163319707\n        ,0.00414136936888099,0.00264358799904585,0.00428298860788345,0.0019509750418365,0.00121530832257122,0.412422329187393\n        ,0.5,0.448966711759567,0.550000011920929,0.649999976158142,0.550000011920929,0.197379514575005,0.0051034651696682\n        ,0.001438521547243,0.00275980518199503,0.00182668399065733,0.00176234217360616,0.0013265140587464,0.0872451215982437\n        ,0.0318181775510311,0.120967552065849,0.0561373271048069,0.00152190367225558,0.100000001490116,0.100000001490116,0.25\n        ,0.272729575634003,0.0074675315991044,0.0305993165820837,0.00303684757091105,0.400000005960464,0.395441085100174,0.400000005960464\n        ,0.00104265799745917,0.00430345255881548,0.699999988079071,0.75,0.5,0.550000011920929,0.449999988079071,0.300000011920929\n        ,0.0157849490642548,0.0450058728456497,0.0118039222434163,0.00920973252505064,0.0071520977653563,0.0172294974327087\n        ,0.0234336089342833,0.0177474711090326,0.0136046605184674,0.00900147948414087,0.0299999993294477,0.00812691077589989\n        ,0.00190130481496453,0.229402348399162,0.204308375716209,0.00115229026414454,0.0299999993294477,0.097870834171772\n        ,0.100000001490116,0.00205515092238784,0.00697201397269964,0.0103997318074107,0.0130104143172503,0.0134130232036114\n        ,0.00165532832033932,0.00309189269319177,0.00234658550471067,0.00112811266444623,0.0012501880992204,0.0936693772673607\n        ,0.0463141165673733,0.0196417048573494,0.00268755247816443,0.00839622225612402,0.550000011920929,0.550000011920929\n        ,0.300000011920929,0.0418052561581135,0.016082338988781,0.0198220461606979,0.027225948870182,0.00273721688427031,0.235250785946846\n        ,0.00140504783485085,0.206924885511398,0.284648895263672,0.001910021295771,0.600000023841858,0.5,0.451376587152481\n        ,0.899999976158142,0.800000011920929,0.550000011920929,0.5,0.400000005960464,0.349999994039536,0.349999994039536,0.591311037540436\n        ,0.71046644449234,0.00166933750733733,0.00155535293743014,0.15054589509964,0.202879443764687,0.300000011920929,0.00581762893125415\n        ,0.011917001567781,0.212641268968582,0.23912838101387,0.363610714673996,0.312190741300583,0.301038801670074,0.338739454746246\n        ,0.150000005960464,0.370767772197723,0.349999994039536,0.400000005960464,0.507781326770782,0.447562992572784,0.5,0.600000023841858\n        ,0.570803225040436,0.547177851200104,0.949999988079071,0.949999988079071,1,1,1,1,0.980000019073486,0.980000019073486\n        ,0.899999976158142,0.899999976158142,0.506809055805206,0.300000011920929,0.100000001490116,0.351170927286148,0.155357539653778\n        ,0.100000001490116,0.0500000007450581,0.100000001490116,0.0500000007450581,0.0802976787090302,0.051420658826828,0.25\n        ,0.300000011920929,0.215666860342026,0.0296915806829929,0.0109948515892029,0.00282987905666232,0.123785838484764,0.0299999993294477\n        ,0.0104991234838963,0.0347260311245918,0.174331799149513,0.291356563568115,0.139639675617218,0.0909389927983284,0.751251339912415\n        ,0.0250975470989943,0.00101973360870034,0.00281789875589311,0.00530411908403039,0.00705776736140251,0.349999994039536\n        ,0.018251609057188,0.00552481040358543,0.0457161329686642,0.0364900603890419,0.0322229117155075,0.0232003647834063\n        ,0.00761937070637941,0.0129122110083699,0.0018132560653612,0.00192320614587516,0.2836734354496,0.191062659025192,0.10631301254034\n        ,0.0546292588114738,0.0226769000291824,0.00759811419993639,0.0127899246290326,0.449999988079071,0.550000011920929\n        ,0.00395371858030558,0.00562301510944963,0.00412268145009875,0.00225640623830259,0.00267837452702224,0.00369340716861188\n        ,0.0384311117231846,0.0382450222969055,0.0308279488235712,0.0295269265770912,0.025489354506135,0.0346145555377007\n        ,0.0300641786307096,0.0206859800964594,0.0266162808984518,0.0330806113779545,0.0355984233319759,0.0343656949698925\n        ,0.028419679030776,0.025199556723237,0.0212426129728556,0.0196652188897133,0.0160835292190313,0.0121408421546221,0.0202507004141808\n        ,0.00168385170400143,0.00484586227685213,0.00330330617725849,0.00781689770519733,0.850000023841858,0.00206114444881678\n        ,0.0028053573332727,0.00538505567237735,0.0067707528360188,0.00783531460911036,0.00340250763110816,0.00121480436064303\n        ,0.00330042955465615,0.00112872116733342,0.001448123017326,0.0040852976962924,0.0229259543120861,0.0306862499564886\n        ,0.0330770649015903,0.0254286862909794,0.0337661243975163,0.0351286977529526,0.034977775067091,0.0342453047633171\n        ,0.0272729713469744,0.0349134095013142,0.0290430206805468,0.034108117222786,0.0333448573946953,0.0355434231460094\n        ,0.00803781766444445,0.0159803424030542,0.00133555091451854,0.00135917204897851,0.00788859557360411,0.00362043548375368\n        ,0.00369403162039816,0.00819585844874382,0.0152367781847715,0.0216128192842007,0.0267653465270996,0.0194449722766876\n        ,0.025431839749217,0.030388668179512,0.0087865786626935,0.0115359928458929,0.0138986716046929,0.00342140183784068\n        ,0.00867122411727905,0.00937425717711449,0.00372696132399142,0.0172722488641739,0.0185647197067738,0.00675679836422205\n        ,0.00549612985923886,0.0025901438202709,0.00203290488570929,0.00122223340440542,0.00404203310608864,0.00779036525636911\n        ,0.00302999676205218,0.0157638750970364,0.00104375998489559,0.00115360273048282,0.00607519876211882,0.0109270857647061\n        ,0.00268194708041847,0.0143921598792076,0.0111151766031981,0.00717192562296987,0.00423647742718458,0.00688508246093988\n        ,0.00912474375218153,0.00378839368931949,0.0198083184659481,0.0161420702934265,0.00262516457587481,0.00211739679798484\n        ,0.00978809595108032,0.00754176918417215,0.00456672580912709,0.00538340536877513,0.00893084891140461,0.0117520065978169\n        ,0.00126411009114236,0.00846298411488533,0.00845142267644405,0.00782160647213459,0.0076493383385241,0.00162299012299627\n        ,0.00385678349994123,0.00648050475865602,0.00575396232306957,0.00336620886810124,0.00382873835042119,0.00597893260419369\n        ,0.00528374360874295,0.00339140510186553,0.00600495748221874,0.00291066849604249,0.00102913880255073,0.0015889568021521\n        ,0.00152235745918006,0.00284664798527956,0.0048015546053648,0.0020070958416909,0.00112610473297536,0.00179676874540746\n        ,0.00196465570479631,0.00165885838214308,0.00152659718878567,0.0021847162861377,0.00660543423146009,0.0121408635750413\n        ,0.00970069132745266,0.0139794517308474,0.0204916838556528,0.01745898835361,0.0123515529558063,0.00713782571256161\n        ,0.00626069633290172,0.0105612594634295,0.0144144389778376,0.0159461796283722,0.00256820418871939,0.0021693769376725\n        ,0.0204103570431471,0.024961069226265,0.00160232768394053,0.00365474610589445,0.00117914832662791,0.0033273680601269\n        ,0.00291148712858558,0.0307696238160133,0.0307900868356228,0.0234009772539139,0.0223564114421606,0.0201896727085114\n        ,0.0292647611349821,0.0272439233958721,0.0177467707544565,0.025606844574213,0.0287475045770407,0.0226978901773691\n        ,0.0148312449455261,0.0135223055258393,0.0114695969969034,0.00944908522069454,0.0149854561313987,0.649999976158142\n        ,0.785920679569244,0.0500000007450581,0.0392807051539421,0.014969184063375,0.0137453535571694,0.143863663077354,0.20943795144558\n        ,0.0632535293698311,0.180063635110855,0.114309228956699,0.338245630264282,0.023958794772625,0.252962082624435,0.369833081960678\n        ,0.323386013507843,0.477446615695953,0.430914372205734,0.512755036354065,0.50423389673233,0.514667630195618,0.553474307060242\n        ,0.524987459182739,0.572267532348633,0.546735525131226,0.462143510580063,0.0304007176309824,0.0525171086192131,0.0195326711982489\n        ,0.023110318928957,0.144032761454582,0.067643515765667,0.185808822512627,0.119412794709206,0.304689973592758,0.26177579164505\n        ,0.343998968601227,0.412656366825104,0.456989109516144,0.483713805675507,0.479251682758331,0.481080204248428,0.518331408500671\n        ,0.491783976554871,0.539229154586792,0.515590369701386,0.433626353740692,0.0343058742582798,0.0781585201621056,0.105993494391441\n        ,0.00213290797546506,0.00410596514120698,0.00179009861312807,0.00126644130796194,0.00189128855708987,0.00469252793118358\n        ,0.0013661136617884,0.00262552103959024,0.00296656228601933,0.00463480222970247,0.00377434235997498,0.00381961558014154\n        ,0.00345237809233367,0.00204208516515791,0.00151749444194138,0.00241850991733372,0.0138494111597538,0.00451441667973995\n        ,0.00281708175316453,0.00240241712890565,0.0032461395021528,0.0010263113072142,0.00295444997027516,0.00199528969824314\n        ,0.00271162413991988,0.00152211741078645,0.00162537593860179,0.00221300823614001,0.00126595702022314,0.00253663677722216\n        ,0.00132007012143731,0.00228379410691559,0.00165127718355507,0.00111555960029364,0.0010408025700599,0.00178179494105279\n        ,0.00145317730493844,0.00163022498600185,0.00105069985147566,0.00140582525637001,0.00115194544196129,0.00129253440536559\n        ,0.00123961386270821,0.00136042467784137,0.00101523788180202,0.00746887130662799,0.00205911742523313,0.00103594770189375\n        \n        Transform: 0.993331668793896,0.10763360959548,-0.041318187638811,0,-0.024448608213334,-0.153576078058137,-0.987834247540742,0\n        ,-0.112669667543803,0.982257219833786,-0.149920490130099,0,2.3502624985163,8.0632495255243,67.5859536222117,1\n        TransformLink: 0.993331676088063,-0.0244486083928634,-0.112669668371151,0,0.107633625570262,-0.153576100851615,0.982257365618587\n        ,0,-0.0413181939768159,-0.98783439906961,-0.149920513127158,0,-0.409937425337364,68.0595129517144,2.47713790625645\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_eyeBall_joint2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 110,1756,1831,1832,1834,1835,1836,1837,1839,1841,1842,1843,1855,1856,1858,1859,2422,2499,2504,2555,2556,2768,2769\n        ,2771,2772,2831,2835,2844,2880,3423,3424,3425,3432,3433,4107,4153,4154,4162,4164,4165,4166,4167,4168,4169,4170,4171\n        ,4172,4173,4174,4175,4176,4180,4184,4185,4232,4233,4238,4239,4270,4274,4276,4277,4279,4280,4281,4282,4298,4299,4300\n        ,4302,4311,4314,4315,4323,4326,4343,4344,4345,5827,5843,5850,5904,5905,11193,11194,11195,11196,11197,11198,11199,11200\n        ,11201,11202,11203,11204,11205,11206,11207,11208,11209,11210,11211,11212,11213,11214,11215,11216,11217,11218,11219\n        ,11220,11221,11222,11223,11224,11225,11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238\n        ,11239,11240,11241,11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,11252,11253,11254,11255,11256,11257\n        ,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272,11273,11274,11275,11276\n        ,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,11294,11295\n        ,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,11306,11307,11308,11309,11310,11311,11312\n        Weights: 0.0485186316072941,0.0405950658023357,0.0581861548125744,0.0492938794195652,0.0534534640610218,0.0509121939539909\n        ,0.0433826372027397,0.0467577017843723,0.0438807941973209,0.0395000539720058,0.0368526205420494,0.0433537662029266\n        ,0.0491937063634396,0.057663019746542,0.0422210991382599,0.0506464838981628,0.0430085472762585,0.0384206995368004\n        ,0.0452539175748825,0.0379151850938797,0.0435524433851242,0.0460081957280636,0.0355520620942116,0.0343122705817223\n        ,0.0299891103059053,0.0388531126081944,0.0409986935555935,0.0306265540421009,0.0394253730773926,0.0457773171365261\n        ,0.0482624992728233,0.0421110391616821,0.0450314655900002,0.0384499169886112,0.0033099977299571,0.00853923615068197\n        ,0.008744727820158,0.00679745338857174,0.00789610296487808,0.00706197181716561,0.00619890773668885,0.00658508809283376\n        ,0.00647423835471272,0.00589318620041013,0.0045215068385005,0.00782360695302486,0.0080419946461916,0.00697724567726254\n        ,0.00778378965333104,0.00851207040250301,0.00889366120100021,0.00702843815088272,0.00684950267896056,0.00677408976480365\n        ,0.00537176569923759,0.00537971500307322,0.00483532808721066,0.00536222383379936,0.00744686694815755,0.00671214517205954\n        ,0.00845018029212952,0.00977900065481663,0.00768665550276637,0.00731138838455081,0.00797605887055397,0.00918637402355671\n        ,0.00951959472149611,0.00827539339661598,0.008237699046731,0.0071938275359571,0.00802947394549847,0.00728526664897799\n        ,0.0083099864423275,0.00441928021609783,0.00478160614147782,0.00835898332297802,0.0100166546180844,0.00872667785733938\n        ,0.041375208646059,0.00343337701633573,0.00580845354124904,0.00458178669214249,0.00493878545239568,1,1,1,1,1,1,1,1\n        ,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\n        ,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\n        Transform: 0.0413367713843446,0.124663369007615,0.991337634166903,0,0.987788531867112,-0.154268921993168,-0.0217890531665547\n        ,0,0.150216291556795,0.980132642457207,-0.12951804433764,0,-67.7704774647754,6.06441864970652,-0.00534795101653618\n        ,1\n        TransformLink: 0.041336777725169,0.987788683388224,0.150216314599115,0,0.124663387373597,-0.154268944720777,0.980132786854868,0,0.991337642531241\n        ,-0.0217890533503982,-0.129518045430439,0,2.05070381711907,67.878345646167,4.23560315542674,1\n    }\n    Deformer: \"SubDeformer::Cluster_R_eyeBall_joint\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 152,155,156,157,160,162,164,179,381,828,833,884,1090,1091,1162,1746,1747,1748,1758,5413,5443,5474,5503,5504,10457\n        ,11313,11314,11315,11316,11317,11318,11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331\n        ,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350\n        ,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365,11366,11367,11368,11369\n        ,11370,11371,11372,11373,11374,11375,11376,11377,11378,11379,11380,11381,11382,11383,11384,11385,11386,11387,11388\n        ,11389,11390,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407\n        ,11408,11409,11410,11411,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425,11426\n        ,11427,11428,11429,11430,11431,11432\n        Weights: 0.0593679919838905,0.0537738427519798,0.0508999116718769,0.0431445837020874,0.0444539561867714,0.0391181632876396\n        ,0.0437302514910698,0.0584536902606487,0.025000000372529,0.0345351696014404,0.0405548587441444,0.0420879870653152\n        ,0.0314351692795753,0.026578277349472,0.0279440488666296,0.0444546975195408,0.0465724915266037,0.0393374674022198\n        ,0.0356687866151333,0.00325712328776717,0.00218713586218655,0.00430441554635763,0.00267448276281357,0.00222410587593913\n        ,0.00167662848252803,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\n        ,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\n        ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n        Transform: 0.0387875421844768,0.100028338340874,0.994228268392548,0,0.985236061125961,-0.169864842686071,-0.0213467985085488\n        ,0,0.166749143805903,0.980377538424147,-0.105140181358115,0,-67.7629265753648,7.41129582551143,2.32996594654076,1\n        \n        TransformLink: 0.0387875481371354,0.985236212328475,0.166749169396613,0,0.100028353235237,-0.169864867979189,0.980377684403767,0\n        ,0.994228275139952,-0.0213467986534205,-0.105140182071657,0,-0.42949996447401,68.0711452162903,4.2785157263196,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_UpperArm\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 1809,1812,1817,1818,1819,1820,1826,1846,1847,1848,1849,2007,3408,3418,3422,3467,3468,3473,3474,3475,4052,4053,4054\n        ,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077\n        ,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100\n        ,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123\n        ,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146\n        ,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169\n        ,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192\n        ,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215\n        ,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238\n        ,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261\n        ,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284\n        ,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307\n        ,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330\n        ,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353\n        ,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376\n        ,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399\n        ,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422\n        ,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445\n        ,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468\n        ,4469,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5805,5806,5807,5810,5812\n        ,5815,5819,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846\n        ,5847,5848,5849,5850,5851,5853,5854,5862,5863,5864,5867,5868,5869,5873,5874,5877,5878,5879,5880,5882,5883,5884,5885\n        ,5886,5887,5888,5889,5890,5893,5894,5895,5896,5897,5898,5901,5902,5903,5904,5905,5906,5907,5908,5909,5912,5913,5914\n        ,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937\n        ,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5960,5961\n        ,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984\n        ,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007\n        ,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030\n        ,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053\n        ,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076\n        ,6077,6080,6081,6082,6083,6084,6086,6089,6093,6102,6110,6111,6112,6113,6114,6115,6128,6129,6130,6131,6132,6133,6134\n        ,6135,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159\n        ,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6183,6187\n        ,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210\n        ,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6225,6226,6227,6228,6232,6233,6234,6440,6441,6442\n        ,6443,6444,6445,6447,6448,6449,6462,6463,6467,6469,6484,6485,6486,6488,6489,6491,6492,6493,6494,6495,10499,10500,10506\n        ,10507,10508,10509,10511,10518,10519,10520,10521,10522,10523,10524,10525,10526,10530,10531,10532,10533,10534,10535\n        ,10538,10539,10541,10542,10543,10544,10545,10546,10547,10548,10549,10551,10552,10553,10554,10555,10556,10557,10558\n        ,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10581,10630,10631,10635,10636,10638,10639,10641,10642\n        ,10643,10644,10645,10646,10647,10648,10671,10672,10673,10674,10675,10676,10678,10679,10680,10681,10682,10683,10684\n        ,10689,10690,10693,10694,10695,10696,10705,10706,10707,10708,10713,10714,10715,10716,10717,10718,10733,10734,10735\n        ,10738,10739,10740,10741,10746,10747,10748,10749,10750,10751,10754,10755,10762,10763,10764,10765,10766,10767,10768\n        ,10769,10770,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811\n        ,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830\n        ,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10844,10845,10846,10847,10848,10849,10850\n        ,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869\n        ,10870,10871,10873,10874,10875,10878,10879,10882,10883,10884,10885,10886,10891,10892,10895,10896,10897,10899\n        Weights: 0.0248133204877377,0.0324307568371296,0.0356169603765011,0.0207698214799166,0.030156422406435,0.034252405166626,0.0145227815955877\n        ,0.0309497360140085,0.0301462095230818,0.0345631539821625,0.0348508656024933,0.0111808087676764,0.0224440488964319\n        ,0.0279246065765619,0.0208277739584446,0.0215720869600773,0.0628888607025146,0.0285741072148085,0.0372246988117695\n        ,0.0393813662230968,0.671951174736023,0.708763182163239,0.777954936027527,0.727325677871704,0.781686902046204,0.867705702781677\n        ,0.837035357952118,0.925296008586884,0.863075733184814,0.948842465877533,0.771288096904755,0.697845637798309,0.824166059494019\n        ,0.849767506122589,0.653732538223267,0.61710000038147,0.649790644645691,0.675434172153473,0.653554141521454,0.663696765899658\n        ,0.689136385917664,0.704505622386932,0.563047289848328,0.560208439826965,0.562112629413605,0.566362500190735,0.601464331150055\n        ,0.558381021022797,0.557335078716278,0.596216917037964,0.678151428699493,0.60462486743927,0.552501976490021,0.614971101284027\n        ,0.498361498117447,0.484575420618057,0.485800296068192,0.488230407238007,0.487484663724899,0.48967444896698,0.486129522323608\n        ,0.49028691649437,0.479702353477478,0.489778876304626,0.49161484837532,0.49787762761116,0.492680281400681,0.492597579956055\n        ,0.511562764644623,0.519893407821655,0.503320753574371,0.502098560333252,0.502025127410889,0.507532954216003,0.498470097780228\n        ,0.497562944889069,0.523999631404877,0.516897320747375,0.526336133480072,0.508612632751465,0.498038053512573,0.510039269924164\n        ,0.562739551067352,0.607795894145966,0.562466561794281,0.527937889099121,0.641221940517426,0.629185378551483,0.561213493347168\n        ,0.509782731533051,0.516025304794312,0.702741324901581,0.760756015777588,0.810972273349762,0.740057587623596,0.892389535903931\n        ,0.807673513889313,0.937207698822021,0.851298034191132,0.797609925270081,0.729173719882965,0.838807702064514,0.679248750209808\n        ,0.643914341926575,0.683527052402496,0.706433594226837,0.685965597629547,0.681573331356049,0.701968908309937,0.574149489402771\n        ,0.581609189510345,0.569718241691589,0.626542508602142,0.637052655220032,0.576336443424225,0.577661514282227,0.633669376373291\n        ,0.669133603572845,0.709506511688232,0.569708585739136,0.640199959278107,0.498486876487732,0.491136640310287,0.465899139642715\n        ,0.466461837291718,0.484352439641953,0.467008382081985,0.487460076808929,0.471763491630554,0.487598240375519,0.497599720954895\n        ,0.490725487470627,0.507308483123779,0.530655086040497,0.519746243953705,0.505765855312347,0.513488173484802,0.50432813167572\n        ,0.498367249965668,0.535860955715179,0.52631139755249,0.53908234834671,0.513603389263153,0.491457641124725,0.51626843214035\n        ,0.629995942115784,0.582840859889984,0.582438230514526,0.541063547134399,0.656917929649353,0.66849946975708,0.579762041568756\n        ,0.516530930995941,0.525534272193909,0.759033679962158,0.805777370929718,0.741298615932465,0.700179159641266,0.890966236591339\n        ,0.812793016433716,0.942499041557312,0.863510012626648,0.962687611579895,0.887522578239441,0.579064846038818,0.585617065429688\n        ,0.583216905593872,0.589302241802216,0.62506777048111,0.665343403816223,0.708398222923279,0.491320610046387,0.489428728818893\n        ,0.488226443529129,0.503230571746826,0.492925882339478,0.49119159579277,0.489473223686218,0.493882149457932,0.482531487941742\n        ,0.493873596191406,0.536814033985138,0.513014674186707,0.499569326639175,0.773965537548065,0.838369727134705,0.793033599853516\n        ,0.730684757232666,0.838671863079071,0.913813412189484,0.95292329788208,0.877314269542694,0.604370296001434,0.595778584480286\n        ,0.592511534690857,0.652695834636688,0.69582200050354,0.741239070892334,0.471526563167572,0.471250087022781,0.495319962501526\n        ,0.505406856536865,0.471759021282196,0.489663749933243,0.475140810012817,0.492314904928207,0.552528321743011,0.520199775695801\n        ,0.480048954486847,0.734615802764893,0.784961819648743,0.873987674713135,0.930249631404877,0.953011870384216,0.682857215404511\n        ,0.642761290073395,0.486127644777298,0.484876960515976,0.487802773714066,0.485596090555191,0.47825613617897,0.498049736022949\n        ,0.509337723255157,0.577197253704071,0.564165592193604,0.606435894966125,0.529352843761444,0.817949295043945,0.768238842487335\n        ,0.898294389247894,0.941824316978455,0.714447021484375,0.671498954296112,0.465435177087784,0.464698791503906,0.465445667505264\n        ,0.469987124204636,0.473710209131241,0.51437783241272,0.599595248699188,0.632000386714935,0.584417045116425,0.542906880378723\n        ,0.640533328056335,0.542687952518463,0.530597150325775,0.400000005960464,0.384298652410507,0.400000005960464,0.383724123239517\n        ,0.381333291530609,0.383433222770691,0.381000250577927,0.383127093315125,0.381277710199356,0.383326292037964,0.382163017988205\n        ,0.383975028991699,0.47921347618103,0.481083244085312,0.61014050245285,0.606766104698181,0.590470552444458,0.591465532779694\n        ,0.566190838813782,0.57214081287384,0.544518530368805,0.554570317268372,0.531055212020874,0.400000005960464,0.335283935070038\n        ,0.383234649896622,0.382744610309601,0.383036494255066,0.384032219648361,0.481736332178116,0.628333568572998,0.603837788105011\n        ,0.573779404163361,0.547561168670654,0.449999988079071,0.400000005960464,0.335080444812775,0.383023858070374,0.382573395967484\n        ,0.382903724908829,0.384047895669937,0.482000142335892,0.5356525182724,0.550000011920929,0.550000011920929,0.550000011920929\n        ,0.449999988079071,0.400000005960464,0.390052914619446,0.389245510101318,0.388679087162018,0.388942748308182,0.389945924282074\n        ,0.489096462726593,0.541556060314178,0.54068124294281,0.550000011920929,0.540895283222198,0.481140583753586,0.572645962238312\n        ,0.449999988079071,0.449999988079071,0.490680992603302,0.535034477710724,0.533327996730804,0.5282963514328,0.528202474117279\n        ,0.540067374706268,0.570852518081665,0.606686115264893,0.61121392250061,0.63078111410141,0.524792909622192,0.449999988079071\n        ,0.449999988079071,0.516527891159058,0.390509039163589,0.389715254306793,0.389851599931717,0.388801574707031,0.389304488897324\n        ,0.388022065162659,0.389052659273148,0.387650609016418,0.389169931411743,0.387800872325897,0.449999988079071,0.449999988079071\n        ,0.577778518199921,0.581358850002289,0.564002513885498,0.563650250434875,0.547590792179108,0.543173015117645,0.53354948759079\n        ,0.526419401168823,0.449999988079071,0.516008198261261,0.390943586826324,0.389945238828659,0.38910847902298,0.388745188713074\n        ,0.388970702886581,0.449999988079071,0.596204936504364,0.573783755302429,0.548210203647614,0.527739763259888,0.5,0.449999988079071\n        ,0.391117632389069,0.389978528022766,0.389020830392838,0.388615101575851,0.388895183801651,0.449999988079071,0.5,0.5\n        ,0.5,0.5,0.449999988079071,0.5,0.394442826509476,0.39354795217514,0.392851710319519,0.392656177282333,0.393025666475296\n        ,0.449999988079071,0.5,0.611612975597382,0.5,0.5,0.449999988079071,0.449999988079071,0.5,0.5,0.5,0.5,0.5,0.548342764377594\n        ,0.528138875961304,0.549952268600464,0.576339483261108,0.548967957496643,0.580441653728485,0.585061550140381,0.601735413074493\n        ,0.579566240310669,0.551377356052399,0.527995407581329,0.514831244945526,0.515691518783569,0.523988962173462,0.150000005960464\n        ,0.150000005960464,0.150000005960464,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232\n        ,0.150000005960464,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116\n        ,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.150000005960464,0.200000002980232\n        ,0.200000002980232,0.200000002980232,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116\n        ,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.100000001490116,0.150000005960464\n        ,0.200000002980232,0.200000002980232,0.200000002980232,0.27412673830986,0.167289391160011,0.115354761481285,0.201556026935577\n        ,0.0854078829288483,0.118652857840061,0.0980373993515968,0.196852833032608,0.319334238767624,0.0512989424169064,0.0455133803188801\n        ,0.225141897797585,0.125852674245834,0.126647189259529,0.236517712473869,0.039642658084631,0.0356426239013672,0.284983724355698\n        ,0.103368081152439,0.0672476515173912,0.0664668381214142,0.0355801954865456,0.0285070389509201,0.259743124246597,0.424105197191238\n        ,0.433663100004196,0.3836570084095,0.0306853652000427,0.0658317655324936,0.187660560011864,0.0972413942217827,0.255493760108948\n        ,0.237476676702499,0.0979085341095924,0.213220462203026,0.242596372961998,0.417047560214996,0.443311303853989,0.452294915914536\n        ,0.389263302087784,0.485368460416794,0.510531723499298,0.485199838876724,0.386874854564667,0.475898832082748,0.289770364761353\n        ,0.372936189174652,0.555619776248932,0.525600433349609,0.0963400900363922,0.400000005960464,0.159999996423721,0.200000002980232\n        ,0.25,0.604445457458496,0.400000005960464,0.607856810092926,0.200000002980232,0.250050365924835,0.25,0.290451616048813\n        ,0.218649312853813,0.275064080953598,0.354624599218369,0.443818986415863,0.035328347235918,0.462831854820251,0.432470977306366\n        ,0.299539059400558,0.151089325547218,0.159999996423721,0.119999997317791,0.159999996423721,0.390148997306824,0.40856060385704\n        ,0.263671666383743,0.324121683835983,0.119999997317791,0.453196138143539,0.312783122062683,0.352736085653305,0.259641885757446\n        ,0.515015542507172,0.513885915279388,0.25,0.246078610420227,0.422540277242661,0.244702324271202,0.25,0.249711647629738\n        ,0.289972990751266,0.350430130958557,0.370051473379135,0.336516976356506,0.329566091299057,0.321041613817215,0.369962871074677\n        ,0.302240073680878,0.603537738323212,0.594955384731293,0.318372488021851,0.329138964414597,0.273266732692719,0.280394911766052\n        ,0.30194765329361,0.286078155040741,0.286492615938187,0.281629592180252,0.281048178672791,0.268779307603836,0.256048232316971\n        ,0.266601055860519,0.57342404127121,0.570661962032318,0.277991205453873,0.257622718811035,0.250156819820404,0.636170923709869\n        ,0.269819021224976,0.253984391689301,0.26193243265152,0.581623613834381,0.301737904548645,0.250291764736176,0.25,0.25\n        ,0.25,0.253225922584534,0.25,0.25,0.25,0.251081615686417,0.257732510566711,0.275459051132202,0.268927812576294,0.684864163398743\n        ,0.70682168006897,0.597854673862457,0.400000005960464,0.598615825176239,0.682989597320557,0.67874550819397,0.69228321313858\n        ,0.722083210945129,0.681694328784943,0.838652670383453,0.604545176029205,0.59822154045105,0.854656279087067,0.960296213626862\n        ,0.619710147380829,0.873738169670105,0.616327583789825,0.643613696098328,0.857911109924316,0.812362492084503,0.862970173358917\n        ,0.720022320747375,0.703288555145264,0.736754536628723,0.811635494232178,0.699999988079071,0.699999988079071,0.872642815113068\n        ,0.752733886241913,0.771798610687256,0.796925663948059,0.907861709594727,0.796585321426392,0.632541060447693,0.720515251159668\n        ,0.904353618621826,0.516643166542053,0.761389434337616,0.608241140842438,0.501608371734619,0.497893631458282,0.626036822795868\n        ,0.721234023571014,0.537346363067627,0.932626843452454,0.884767174720764,0.728157877922058,0.818203866481781,0.945107996463776\n        ,0.96215945482254,0.962549090385437,0.955218255519867,0.95369279384613,0.934603452682495,0.911027312278748,0.93795645236969\n        ,0.899999976158142,0.944583356380463,0.923703551292419,0.902863442897797,0.94034343957901,0.911679923534393,0.937895774841309\n        ,0.977745413780212,0.937895774841309,0.875791609287262,0.935270428657532,0.977102100849152,0.876445770263672,0.782918393611908\n        ,0.779361724853516,0.849494099617004,0.800993323326111,0.670758605003357,0.639913201332092,0.914563477039337,0.899999976158142\n        ,0.436270833015442,0.899999976158142,0.899999976158142,0.446738928556442,0.899999976158142,0.899999976158142,0.507570087909698\n        ,0.899999976158142,0.645191788673401,0.899999976158142,0.50766259431839,0.900056779384613,0.888832092285156,0.22633358836174\n        ,0.238661527633667,0.0754047632217407,0.202322289347649,0.0670094043016434,0.0905131101608276,0.21491114795208,0.0889049097895622\n        ,0.0970706418156624,0.262058734893799,0.0366747006773949,0.0293817147612572,0.0843997374176979,0.0237083174288273\n        ,0.0845616087317467,0.0877782180905342,0.0251938421279192,0.0351834110915661,0.101867720484734,0.104017481207848,0.0342402532696724\n        ,0.00395678542554379,0.00787932239472866,0.0644239708781242,0.0501892194151878,0.011177022010088,0.00876086298376322\n        ,0.00236685667186975,0.00262700393795967,0.0177492592483759,0.0270002540200949,0.00567461596801877,0.0109919682145119\n        ,0.00504005933180451,0.0101816318929195,0.00111566262785345,0.244774356484413,0.245710656046867,0.161167815327644\n        ,0.129841148853302,0.550000011920929,0.550000011920929,0.899999976158142,0.923249185085297,0.963105201721191,0.966649770736694\n        ,0.499764204025269,0.49950385093689,0.398110508918762,0.11331570148468,0.967785358428955,0.931321263313293,0.961978733539581\n        ,0.918358266353607,0.899999976158142,0.906760454177856,0.804405212402344,0.800993323326111,0.813079595565796,0.944771707057953\n        ,0.993404805660248,0.991805374622345,0.994329869747162,0.995069265365601,0.986856520175934,0.985380828380585,0.900154709815979\n        ,0.30867263674736,0.373795926570892,0.335957050323486,0.0618258863687515,0.803212404251099,0.870715856552124,0.9056676030159\n        ,0.873792052268982,0.954519331455231,0.975940942764282,0.962519526481628,0.927388370037079,0.953723430633545,0.945045053958893\n        ,0.703007698059082,0.649999976158142,0.550000011920929,0.891666114330292,0.771452724933624,0.80041229724884,0.975884914398193\n        ,0.971213459968567,0.0259718224406242,0.0012870270293206,0.00200663669966161,0.029718391597271,0.00127148546744138\n        ,0.550000011920929,0.0947002172470093,0.960593581199646,0.699999988079071,0.699999988079071,0.900747776031494,0.949926972389221\n        ,0.94882196187973,0.940486431121826,0.88645213842392,0.965311646461487,0.816892683506012,0.990643560886383,0.980519413948059\n        ,0.983963012695313,0.969162106513977,0.97836834192276,0.993345022201538,0.891930460929871,0.936130821704865,0.977292537689209\n        ,0.981002569198608,0.99278736114502,0.973240435123444,0.833459258079529,0.990656852722168,0.878318190574646,0.925347745418549\n        ,0.824953973293304,0.499562233686447,0.396667510271072,0.41030552983284,0.498761624097824,0.280284285545349,0.237335756421089\n        ,0.30772477388382,0.899999976158142,0.198815822601318,0.0269320420920849,0.0825262069702148,0.0013631657930091,0.277416676282883\n        ,0.0998596251010895,0.0227861143648624,0.421255558729172,0.39227157831192,0.387923717498779,0.241641104221344,0.387358397245407\n        ,0.235032498836517,0.899999976158142,0.0737694650888443,0.0730752050876617,0.714662909507751,0.801311314105988,0.51268196105957\n        ,0.0958159640431404,0.0955943614244461,0.0479661673307419,0.0832242593169212,0.065484806895256,0.0121975634247065\n        ,0.0638823583722115,0.931115567684174,0.927065253257751,0.937691807746887,0.971710443496704,0.0130868805572391,0.0134305208921433\n        ,0.0142362248152494,0.0124444514513016,0.00878832675516605,0.00935584492981434,0.0142447035759687,0.0179274175316095\n        ,0.0196094270795584,0.0110583864152431,0.0136709315702319,0.0157110877335072,0.0130274835973978,0.0200563613325357\n        ,0.0199966225773096,0.0141086541116238,0.0296928975731134,0.0144526325166225,0.0194817539304495,0.0254780128598213\n        ,0.0564162321388721,0.0327776856720448,0.0240716673433781,0.0244537517428398,0.0639102533459663,0.0245793573558331\n        ,0.0386718362569809,0.0488913655281067,0.150000005960464,0.25,0.25,0.150000005960464,0.0290121491998434,0.0260587334632874\n        ,0.0245764590799809,0.0191784016788006,0.0230613481253386,0.0223486497998238,0.0250147357583046,0.0255272854119539\n        ,0.0297513008117676,0.0315962955355644,0.0310370977967978,0.300000011920929,0.200000002980232,0.100000001490116,0.200000002980232\n        ,0.100000001490116,0.100000001490116,0.150000005960464,0.150000005960464,0.200000002980232,0.0232919920235872,0.021919434890151\n        ,0.0169797874987125,0.0198447946459055,0.0152793126180768,0.0129596162587404,0.0160284861922264,0.0172904022037983\n        ,0.0389271304011345,0.0530599653720856,0.0379460118710995,0.0178657043725252,0.0232501439750195,0.0033667734824121\n        ,0.0344650968909264,0.022616570815444,0.0295472107827663,0.0618020556867123,0.0412753038108349,0.0489884726703167\n        ,0.200000002980232,0.300000011920929,0.300000011920929,0.200000002980232,0.0818059369921684,0.0538022443652153,0.25\n        ,0.0117521230131388,0.0175466556102037,0.00896589178591967,0.0186237078160048,0.0159933008253574,0.00700326915830374\n        ,0.0725999176502228,0.0467990785837173,0.0598451197147369,0.0907235890626907,0.0269097052514553,0.100000001490116\n        ,0.022157235071063,0.0218270290642977,0.0214322656393051,0.0171046778559685,0.0158396698534489,0.016515176743269,0.0149005027487874\n        ,0.0257846564054489,0.0189873352646828,0.015676299110055,0.0149392280727625,0.0261617973446846,0.0244224686175585\n        ,0.0294471122324467,0.032239593565464,0.0307376030832529,0.200000002980232,0.00128650886472315,0.00292351190000772\n        ,0.00493186060339212,0.00264519662596285,0.00147427699994296,0.00343792489729822,0.0104314740747213,0.00621141539886594\n        ,0.0075686234049499,0.00646165106445551,0.0112000769004226,0.0216709971427917,0.0229892302304506,0.0251554101705551\n        ,0.0266251973807812,0.029200442135334,0.0369292497634888,0.0856243371963501,0.0637016594409943,0.0739372000098228\n        ,0.0939565300941467,0.0531358830630779,0.0332136414945126,0.200000002980232,0.025435546413064,0.0291993785649538,0.0291943531483412\n        ,0.150000005960464,0.200000002980232,0.200000002980232,0.150000005960464,0.300000011920929,0.300000011920929,0.25\n        ,0.25,0.100000001490116,0.150000005960464,0.150000005960464,0.100000001490116,0.0197086650878191,0.0257528014481068\n        ,0.0543842241168022,0.100000001490116,0.100000001490116,0.00103605363983661,0.0010513128945604,0.00975374132394791\n        ,0.0106005435809493,0.00368177169002593,0.00513071101158857,0.00379393436014652,0.100000001490116,0.150000005960464\n        ,0.100000001490116,0.300000011920929,0.25,0.200000002980232,0.150000005960464,0.150000005960464,0.0276906862854958\n        ,0.0262255556881428,0.200000002980232,0.300000011920929,0.0933467522263527,0.0796394571661949,0.150000005960464,0.150000005960464\n        ,0.25,0.150000005960464,0.100000001490116,0.0526373125612736,0.032817617058754,0.0278576482087374,0.0460938476026058\n        ,0.0238594505935907,0.0493467636406422,0.200000002980232,0.0257651209831238,0.100000001490116,0.100000001490116,0.0203086417168379\n        ,0.0267641171813011,0.100000001490116,0.0280830003321171,0.100000001490116,0.0327643901109695,0.100000001490116,0.00101729144807905\n        ,0.100000001490116,0.0273743886500597,0.150000005960464,0.100000001490116,0.0151567989960313,0.0151161625981331,0.0236284919083118\n        ,0.0195639282464981,0.0170303732156754,0.00267774448730052,0.0167572274804115,0.200000002980232,0.300000011920929\n        ,0.150000005960464,0.00178090971894562\n        Transform: 0.67453550615253,-0.00572428005084888,0.738220184069585,0,-0.734845382925873,-0.101024949199617,0.670668459615116\n        ,0,0.0707395621326574,-0.994867443570327,-0.0723513736431941,0,37.9653360667959,3.83014441425826,-45.5581705043554\n        ,1\n        TransformLink: 0.674535525364217,-0.734845403855267,0.0707395641474163,0,-0.00572427983321724,-0.101024945358745,-0.99486740574642\n        ,0,0.738220225293056,0.670668497066384,-0.0723513776834179,0,8.04491980264829,58.8400225859223,-2.17136188975424,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_UpperArm\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 137,150,170,1740,1741,1745,1790,1791,1792,1797,1798,1799,5014,5015,5020,5021,5023,5025,5026,5029,5031,5032,5034,5037\n        ,5039,5040,5041,5042,5043,5044,5045,5052,5053,5060,5061,5062,5066,5067,5069,5070,5071,5072,5073,5074,5075,5076,5077\n        ,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100\n        ,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123\n        ,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146\n        ,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5320,5321,5322,5323,5335,5338,5358,5359\n        ,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5374,5375,5376,5379,5381,5384,5387,5388,5394,5395,5396,5397\n        ,5398,5399,5400,5402,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5423\n        ,5424,5432,5433,5434,5437,5438,5443,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457,5458,5459,5460,5462,5463\n        ,5464,5465,5466,5467,5471,5472,5473,5474,5475,5477,5478,5479,5480,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492\n        ,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515\n        ,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540\n        ,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563\n        ,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586\n        ,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609\n        ,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632\n        ,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655\n        ,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678\n        ,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701\n        ,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724\n        ,5725,5726,5727,5728,5729,5731,5732,5734,5735,5736,5737,5738,5743,5744,5745,10054,10055,10060,10061,10062,10063,10064\n        ,10065,10066,10074,10075,10076,10077,10078,10079,10080,10081,10082,10087,10088,10089,10090,10091,10092,10097,10098\n        ,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10113,10114,10115,10117,10118,10119\n        ,10120,10121,10122,10123,10124,10125,10126,10139,10143,10190,10191,10195,10196,10198,10200,10201,10202,10203,10204\n        ,10205,10206,10207,10208,10233,10234,10235,10236,10237,10238,10242,10243,10244,10245,10246,10247,10248,10254,10257\n        ,10258,10259,10260,10261,10270,10271,10272,10273,10278,10279,10280,10281,10282,10283,10298,10299,10300,10303,10304\n        ,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10329,10330,10331,10332,10333,10334,10335\n        ,10336,10337,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382\n        ,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10406\n        ,10407,10408,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425\n        ,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444\n        ,10445,10446,10447,10450,10451,10454,10455,10457,10458,10459,10461,10463,10465,10469,10470,10472,10473,10474,10496\n        \n        Weights: 0.020969782024622,0.0784795209765434,0.0287694744765759,0.0504049845039845,0.0261336229741573,0.0225135684013367,0.0190182253718376\n        ,0.0650658458471298,0.113102801144123,0.0287809018045664,0.0305631123483181,0.0367412269115448,0.045618362724781,0.0385712683200836\n        ,0.0391182713210583,0.0349155254662037,0.0142096001654863,0.0279263593256474,0.0288654919713736,0.0265222284942865\n        ,0.0278860032558441,0.00829831324517727,0.0135858133435249,0.0204892382025719,0.0301536526530981,0.0261204000562429\n        ,0.0271750949323177,0.0435376390814781,0.0434467270970345,0.00748020503669977,0.0093948757275939,0.0218596905469894\n        ,0.0117206927388906,0.0366483367979527,0.0317994430661201,0.0213397722691298,0.0211695693433285,0.0263021904975176\n        ,0.0158387552946806,0.00751717295497656,0.0293513089418411,0.0307456348091364,0.0290009211748838,0.0319274589419365\n        ,0.0178887881338596,0.0296053178608418,0.0360307134687901,0.0467014126479626,0.0487850047647953,0.0501099713146687\n        ,0.063944086432457,0.0667659044265747,0.0546446703374386,0.0509453266859055,0.0416330173611641,0.0405608154833317\n        ,0.0397334024310112,0.0379403904080391,0.0407577157020569,0.034948106855154,0.0280988253653049,0.0205933395773172\n        ,0.0142618026584387,0.0142017956823111,0.0748932734131813,0.106558777391911,0.121540211141109,0.145699858665466,0.146187573671341\n        ,0.154134750366211,0.167685657739639,0.16518197953701,0.163050159811974,0.157242730259895,0.14082844555378,0.140541359782219\n        ,0.140519261360168,0.147883668541908,0.144016921520233,0.131500884890556,0.114455841481686,0.0923147946596146,0.0699141025543213\n        ,0.066122405230999,0.0590536631643772,0.0526484176516533,0.0622121058404446,0.0769118964672089,0.103977158665657,0.121694050729275\n        ,0.138020798563957,0.143885031342506,0.13387306034565,0.133046522736549,0.136080756783485,0.141146317124367,0.147136986255646\n        ,0.128097504377365,0.120865821838379,0.108399629592896,0.128162771463394,0.102392926812172,0.0810344889760017,0.163100302219391\n        ,0.161350920796394,0.178334593772888,0.181064888834953,0.0655111968517303,0.063481405377388,0.0538437478244305,0.0520751960575581\n        ,0.0496388413012028,0.158261224627495,0.0590182505548,0.102999188005924,0.0509957335889339,0.0919065028429031,0.0938780084252357\n        ,0.0241554547101259,0.0186226647347212,0.0187003705650568,0.0800475478172302,0.0831176042556763,0.0880568027496338\n        ,0.0845041275024414,0.0829988718032837,0.0914682894945145,0.015033345669508,0.0151413809508085,0.00812804233282804\n        ,0.0082727400586009,0.281471788883209,0.172315835952759,0.120438225567341,0.209621414542198,0.100000001490116,0.100000001490116\n        ,0.0907326862215996,0.126658961176872,0.104050524532795,0.205078601837158,0.329326122999191,0.0560089275240898,0.0488733053207397\n        ,0.023843826726079,0.0134323202073574,0.0135761043056846,0.0251511782407761,0.00432062614709139,0.00379811157472432\n        ,0.296586275100708,0.0109487390145659,0.0712462216615677,0.0683919787406921,0.0371147282421589,0.0302848219871521\n        ,0.0929126441478729,0.26749175786972,0.429890275001526,0.439371526241302,0.0802547633647919,0.0334492512047291,0.0723082572221756\n        ,0.20095394551754,0.104419782757759,0.255707621574402,0.251929551362991,0.108305208384991,0.231429785490036,0.254417687654495\n        ,0.426591217517853,0.449845910072327,0.458420038223267,0.398676633834839,0.487502425909042,0.513588309288025,0.490238398313522\n        ,0.404504626989365,0.481194138526917,0.308680564165115,0.386695474386215,0.382963806390762,0.534600675106049,0.127761036157608\n        ,0.295493572950363,0.165520697832108,0.356632709503174,0.372464150190353,0.436508804559708,0.169452592730522,0.441070288419724\n        ,0.498201429843903,0.497700780630112,0.304001420736313,0.023136442527175,0.291925728321075,0.371426731348038,0.454690366983414\n        ,0.0379913710057735,0.470165699720383,0.440873682498932,0.310548096895218,0.15815258026123,0.314999997615814,0.349999994039536\n        ,0.391449093818665,0.394605964422226,0.349999994039536,0.372320175170898,0.458221673965454,0.565859317779541,0.459301829338074\n        ,0.276696681976318,0.263911247253418,0.184785902500153,0.520172536373138,0.521955013275146,0.497991144657135,0.481275767087936\n        ,0.430014997720718,0.483669489622116,0.497871071100235,0.496094435453415,0.508753895759583,0.703245341777802,0.519935548305511\n        ,0.47540420293808,0.663387179374695,0.568387985229492,0.52303409576416,0.536066174507141,0.432498008012772,0.424478769302368\n        ,0.450523644685745,0.466012120246887,0.490012615919113,0.505570769309998,0.535811543464661,0.507548570632935,0.578609168529511\n        ,0.568595170974731,0.564144194126129,0.539054274559021,0.514491379261017,0.536900699138641,0.579529047012329,0.576918005943298\n        ,0.561050355434418,0.51742285490036,0.500973284244537,0.456103533506393,0.380446046590805,0.510196566581726,0.368948191404343\n        ,0.587899506092072,0.426884144544601,0.500829041004181,0.5,0.498094856739044,0.5,0.355805635452271,0.350002199411392\n        ,0.497277468442917,0.5,0.502760708332062,0.517215073108673,0.554297804832459,0.540830671787262,0.698667883872986,0.717258453369141\n        ,0.605572402477264,0.607015371322632,0.608008205890656,0.694056332111359,0.688709139823914,0.702353835105896,0.731380879878998\n        ,0.688754320144653,0.843828856945038,0.609543561935425,0.602585256099701,0.86238420009613,0.961804509162903,0.628379642963409\n        ,0.883107841014862,0.631122589111328,0.658645212650299,0.867809116840363,0.821233332157135,0.869235575199127,0.729809761047363\n        ,0.71179723739624,0.747385561466217,0.820916950702667,0.75,0.75,0.881841719150543,0.764201819896698,0.77573162317276\n        ,0.798143088817596,0.909145712852478,0.79645836353302,0.636041641235352,0.721963107585907,0.902325689792633,0.519720673561096\n        ,0.763687491416931,0.613580465316772,0.503093123435974,0.499536067247391,0.63247549533844,0.727182567119598,0.541991591453552\n        ,0.931566298007965,0.883416652679443,0.722454011440277,0.816012442111969,0.946555495262146,0.963951587677002,0.965491712093353\n        ,0.958467066287994,0.95552670955658,0.934015333652496,0.903437912464142,0.935317099094391,0.945562958717346,0.946810066699982\n        ,0.925385355949402,0.907459557056427,0.927021265029907,0.90165764093399,0.956426799297333,0.968130826950073,0.946015894412994\n        ,0.90613055229187,0.965386986732483,0.974541842937469,0.87210077047348,0.702958166599274,0.720231473445892,0.846153914928436\n        ,0.649999976158142,0.574937224388123,0.632389008998871,0.89529275894165,0.740150988101959,0.489543944597244,0.54209840297699\n        ,0.585827589035034,0.490893453359604,0.662932693958282,0.498560518026352,0.504462003707886,0.768023788928986,0.568614304065704\n        ,0.647481024265289,0.504329919815063,0.716663599014282,0.822241127490997,0.200000002980232,0.200000002980232,0.200000002980232\n        ,0.21500101685524,0.261308073997498,0.244109690189362,0.244453296065331,0.153650611639023,0.434145867824554,0.312636703252792\n        ,0.914587438106537,0.923531234264374,0.964551270008087,0.969183504581451,0.499596208333969,0.499518573284149,0.383198082447052\n        ,0.104722216725349,0.967589974403381,0.931951761245728,0.957806706428528,0.921492457389832,0.901055753231049,0.905746698379517\n        ,0.649999976158142,0.649999976158142,0.649999976158142,0.944011509418488,0.992870390415192,0.991427659988403,0.993892729282379\n        ,0.994505882263184,0.98496025800705,0.983531951904297,0.901892483234406,0.285406172275543,0.353163778781891,0.200000002980232\n        ,0.0540348961949348,0.806423962116241,0.870517492294312,0.90487414598465,0.874945402145386,0.952277839183807,0.974283814430237\n        ,0.961661517620087,0.927177667617798,0.949196338653564,0.940062880516052,0.649999976158142,0.649999976158142,0.649999976158142\n        ,0.886188805103302,0.755742967128754,0.745639085769653,0.973658859729767,0.967490673065186,0.307189017534256,0.961516320705414\n        ,0.75,0.75,0.906072795391083,0.953899383544922,0.953052282333374,0.944958209991455,0.884655654430389,0.963573634624481\n        ,0.817773759365082,0.990259230136871,0.980742156505585,0.984100639820099,0.969443380832672,0.97771281003952,0.992744565010071\n        ,0.890227973461151,0.934164881706238,0.975787281990051,0.979732811450958,0.991906225681305,0.972508788108826,0.719477832317352\n        ,0.990604877471924,0.868284523487091,0.924786448478699,0.810649394989014,0.49951246380806,0.44170954823494,0.405982732772827\n        ,0.49727800488472,0.200000002980232,0.200000002980232,0.200000002980232,0.952634513378143,0.200000002980232,0.27403461933136\n        ,0.649999976158142,0.38769394159317,0.383743822574615,0.23994854092598,0.382569253444672,0.664508998394012,0.649999976158142\n        ,0.649999976158142,0.515626490116119,0.100544266402721,0.0509672276675701,0.087710902094841,0.0689265504479408,0.0132357580587268\n        ,0.0673551708459854,0.934560120105743,0.929938912391663,0.939364671707153,0.9720698595047,0.294692665338516,0.121550291776657\n        ,0.318417549133301,0.00905121956020594,0.00918134674429893,0.0127136269584298,0.00864315219223499,0.00791239645332098\n        ,0.0114359743893147,0.0152849052101374,0.0093435849994421,0.00830323528498411,0.0142276557162404,0.0138462735339999\n        ,0.00945782754570246,0.00942206755280495,0.014098109677434,0.014433647505939,0.0178906451910734,0.0143724717199802\n        ,0.0173722356557846,0.00999974180012941,0.014885607175529,0.018461562693119,0.0190013404935598,0.0467968657612801\n        ,0.0458732806146145,0.030040280893445,0.0285561420023441,0.100000001490116,0.0229084882885218,0.0212979335337877,0.0210412256419659\n        ,0.200000002980232,0.200000002980232,0.300000011920929,0.300000011920929,0.0272503532469273,0.0286084562540054,0.0298874154686928\n        ,0.0449934229254723,0.0163005162030458,0.0198944453150034,0.0216402430087328,0.0210471544414759,0.022859338670969\n        ,0.100000001490116,0.280000001192093,0.25,0.100000001490116,0.200000002980232,0.100000001490116,0.200000002980232\n        ,0.150000005960464,0.100000001490116,0.200000002980232,0.0452159754931927,0.0238535013049841,0.0278255958110094,0.0225818119943142\n        ,0.0214288476854563,0.0191271770745516,0.0149979013949633,0.0175532065331936,0.0187588352710009,0.0202955156564713\n        ,0.018536027520895,0.0447154492139816,0.00276468903757632,0.00197926862165332,0.0182143114507198,0.0188962891697884\n        ,0.0188498459756374,0.0163978934288025,0.0165616180747747,0.0256021749228239,0.0200647842139006,0.25,0.25,0.280000001192093\n        ,0.280000001192093,0.0475268326699734,0.0186371058225632,0.300000011920929,0.0100746294483542,0.0147060882300138,0.00839911866933107\n        ,0.0143435792997479,0.0122731113806367,0.00548796262592077,0.0226557962596416,0.0203133597970009,0.019662719219923\n        ,0.0199346318840981,0.020324582234025,0.0183906629681587,0.0200679711997509,0.0244641546159983,0.0194248016923666\n        ,0.0148040950298309,0.0158901512622833,0.0168812870979309,0.0146031798794866,0.018282238394022,0.0178614798933268\n        ,0.0153546407818794,0.0164247564971447,0.00759732443839312,0.00682812184095383,0.0230845659971237,0.0228842049837112\n        ,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.00130664382595569,0.00277592497877777,0.00490613374859095\n        ,0.00331772165372968,0.00152155803516507,0.00266357441432774,0.0092479046434164,0.00556127540767193,0.00729139242321253\n        ,0.0100202336907387,0.00581458257511258,0.0200388133525848,0.0211897641420364,0.023265078663826,0.0219263006001711\n        ,0.0309158023446798,0.0220311246812344,0.032503891736269,0.0242764744907618,0.0222708638757467,0.0228765457868576\n        ,0.0218025259673595,0.0208405908197165,0.0202518124133348,0.100000001490116,0.100000001490116,0.100000001490116,0.200000002980232\n        ,0.200000002980232,0.25,0.25,0.280000001192093,0.280000001192093,0.300000011920929,0.300000011920929,0.150000005960464\n        ,0.150000005960464,0.200000002980232,0.200000002980232,0.018878472968936,0.0199749954044819,0.0287722535431385,0.150000005960464\n        ,0.150000005960464,0.00271546677686274,0.00256413081660867,0.150000005960464,0.300000011920929,0.21673309803009,0.300000011920929\n        ,0.280000001192093,0.25,0.200000002980232,0.200000002980232,0.00260717002674937,0.0190196018666029,0.018177967518568\n        ,0.280000001192093,0.25,0.0214217882603407,0.0231172982603312,0.200000002980232,0.200000002980232,0.300000011920929\n        ,0.150000005960464,0.200000002980232,0.0189244467765093,0.0192747078835964,0.0219515785574913,0.0287356525659561,0.0202676299959421\n        ,0.0340243764221668,0.100000001490116,0.0197208076715469,0.150000005960464,0.150000005960464,0.0182612538337708,0.100000001490116\n        ,0.150000005960464,0.100000001490116,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116\n        ,0.100000001490116,0.150000005960464,0.0247486010193825,0.200000002980232,0.100000001490116,0.0153244733810425,0.0152284130454063\n        ,0.0495516546070576,0.0565993711352348,0.016888216137886,0.00252965185791254,0.200000002980232,0.0175220146775246\n        ,0.299232631921768,0.25,0.100000001490116,0.100000001490116,0.100000001490116,0.00133510527666658\n        Transform: -0.703610227813238,-0.134747865534422,0.697693066516033,0,-0.691373621028306,-0.096955071047359,-0.715962418756415\n        ,0,0.164119304174336,-0.986125037071657,-0.0249425411674709,0,35.6837354126809,3.61653635564703,47.935408778235,1\n        \n        TransformLink: -0.703610240098373,-0.691373633099789,0.164119307039882,0,-0.134747884155574,-0.0969550844458286,-0.986125173346802\n        ,0,0.697693115008514,-0.71596246851869,-0.024942542901078,0,-7.84944240647482,59.3413889809175,-1.09440139796442,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Forearm\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074\n        ,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4097,4100,4101,4102,4103,4104,4105,4106,4108,4109,4110\n        ,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133\n        ,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4177,4178,4179,4181\n        ,4182,4183,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4206,4213,4214,4215\n        ,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4241,4242,4243,4244,4245,4246,4247,4253,4254\n        ,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4271,4272,4273,4275,4283,4284,4285,4286,4287,4288,4289,4290,4291\n        ,4292,4293,4294,4295,4296,4297,4303,4304,4305,4306,4307,4308,4309,4310,4316,4317,4318,4319,4320,4321,4322,4327,4328\n        ,4329,4330,4331,4332,4333,4334,4335,4336,4337,4340,4341,4342,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356\n        ,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379\n        ,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402\n        ,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425\n        ,4426,4427,4428,4429,4430,5849,5864,5868,5893,5894,5898,5922,5923,5926,5927,5936,5937,5941,5945,5960,5961,5962,5964\n        ,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5983,5984,5985,5988,5989,5990\n        ,5991,5992,5993,5994,5995,5996,5998,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017\n        ,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040\n        ,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063\n        ,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086\n        ,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109\n        ,6110,6111,6112,6113,6114,6115,6116,6129,6130,6131,6132,6133,6134,6135,6137,6138,6139,6140,6141,6143,6144,6145,6146\n        ,6147,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170\n        ,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6187,6188,6189,6192,6193,6194,6195,6196,6197\n        ,6198,6199,6200,6201,6202,6203,6205,6206,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222\n        ,6223,6224,6225,6226,6227,6228,6229,6232,6233,6234,6440,6441,6442,6443,6444,6445,6447,6448,6449,6460,6462,6463,6464\n        ,6467,6469,6492,6493,6494,6495,10539,10549,10551,10552,10555,10556,10557,10558,10559,10630,10875\n        Weights: 0.0130823627114296,0.0145733961835504,0.017686540260911,0.0165265779942274,0.0167959500104189,0.0174484252929688,0.016780024394393\n        ,0.0140524292364717,0.0157845802605152,0.011062566190958,0.0132460324093699,0.0114357797428966,0.0128355557098985\n        ,0.0119939977303147,0.0116653498262167,0.00951695907860994,0.00925766211003065,0.0104927280917764,0.00973798986524343\n        ,0.00984845124185085,0.00993507821112871,0.00975114479660988,0.00607633776962757,0.00599473621696234,0.0056743398308754\n        ,0.00550404144451022,0.0102502526715398,0.00793300196528435,0.00754921929910779,0.0102707156911492,0.0141946421936154\n        ,0.00958449020981789,0.00787202641367912,0.0113529870286584,0.00406387401744723,0.00311212101951241,0.00396739272400737\n        ,0.00514390412718058,0.00437091197818518,0.00351857556961477,0.00339764193631709,0.00385786732658744,0.0028420789167285\n        ,0.00624275812879205,0.0056178723461926,0.00572511414065957,0.00517163006588817,0.00433397479355335,0.00553302885964513\n        ,0.0072903516702354,0.00947430171072483,0.00743232667446136,0.00597157049924135,0.00983333308249712,0.0094017731025815\n        ,0.00638639880344272,0.00423615192994475,0.00463204644620419,0.0131842866539955,0.016205782070756,0.0168030690401793\n        ,0.0144315091893077,0.0155597217381001,0.0161190386861563,0.0124592166393995,0.0160823706537485,0.0127456905320287\n        ,0.0113515695556998,0.0123431896790862,0.00939201284199953,0.00981035921722651,0.011846162378788,0.0105248801410198\n        ,0.00992137007415295,0.00986271444708109,0.00993407983332872,0.00622597057372332,0.00636665616184473,0.00579370558261871\n        ,0.0106505611911416,0.0107622062787414,0.00796970538794994,0.00837728101760149,0.00980836246162653,0.0121828624978662\n        ,0.0142783168703318,0.0083105219528079,0.0117224548012018,0.00993642210960388,0.00767917418852448,0.00782968103885651\n        ,0.00963418465107679,0.010017391294241,0.00670335255563259,0.0124240284785628,0.0128281209617853,0.0104267252609134\n        ,0.00943842064589262,0.0117991222068667,0.0113033540546894,0.00881361775100231,0.010496262460947,0.0065448647364974\n        ,0.00950655899941921,0.00414708536118269,0.00531409168615937,0.0037915192078799,0.00361050292849541,0.00724903866648674\n        ,0.00917193572968245,0.0109936781227589,0.00282893585972488,0.00443767942488194,0.0038344138301909,0.00314834783785045\n        ,0.0100808590650558,0.0118633136153221,0.0118824616074562,0.00881960522383451,0.010578534565866,0.0101805999875069\n        ,0.00759252207353711,0.00988966319710016,0.00481296144425869,0.0045322859659791,0.0038556563667953,0.00742341438308358\n        ,0.00923402141779661,0.0108389323577285,0.0161522999405861,0.0171369854360819,0.0165906008332968,0.013085457496345\n        ,0.0101299583911896,0.0139119019731879,0.0115892337635159,0.00417448533698916,0.00503682112321258,0.00557324243709445\n        ,0.00721208564937115,0.00927688833326101,0.00580374430865049,0.0161867532879114,0.0157619155943394,0.0146748851984739\n        ,0.0115098869428039,0.0139557290822268,0.0118313496932387,0.00582014210522175,0.00960609689354897,0.00758995581418276\n        ,0.0119165414944291,0.00834765192121267,0.0101902317255735,0.00910148024559021,0.010863583534956,0.00955894403159618\n        ,0.010891298763454,0.00956323184072971,0.0128869153559208,0.0114246951416135,0.0122718652710319,0.0106279756873846\n        ,0.0111806727945805,0.00986453052610159,0.00981386378407478,0.00890371669083834,0.00823746528476477,0.00938957463949919\n        ,0.0100798653438687,0.0100390641018748,0.0116790756583214,0.0110674453899264,0.00995259359478951,0.00855241715908051\n        ,0.00950765889137983,0.0102941719815135,0.0102250250056386,0.0117573412135243,0.01140396296978,0.00521518662571907\n        ,0.00453681312501431,0.00546662602573633,0.00642735743895173,0.00689548952504992,0.00665472960099578,0.00734960194677114\n        ,0.00683766510337591,0.00571336830034852,0.00265343068167567,0.00448240898549557,0.010069171898067,0.00889439694583416\n        ,0.00931901391595602,0.0115090440958738,0.0130113819614053,0.00939598213881254,0.0112784979864955,0.0129523808136582\n        ,0.011606689542532,0.00683522317558527,0.00530915660783648,0.00553609151393175,0.00718199368566275,0.00632563466206193\n        ,0.00673306873068213,0.00695765623822808,0.00761112431064248,0.00759197911247611,0.00851711817085743,0.00801968108862638\n        ,0.00914121046662331,0.00810293573886156,0.00927212275564671,0.00706543633714318,0.00801382400095463,0.00976375490427017\n        ,0.0113250613212585,0.00917198788374662,0.0104699106886983,0.008320945315063,0.00925183948129416,0.00746653834357858\n        ,0.00805097725242376,0.00470049539580941,0.00601205229759216,0.00583647331222892,0.00677375914528966,0.00773503351956606\n        ,0.00837157387286425,0.00845489930361509,0.00722456257790327,0.0102738551795483,0.00940028857439756,0.00814017094671726\n        ,0.00690067606046796,0.00386490998789668,0.00445980951189995,0.00563889276236296,0.00669783353805542,0.00779449241235852\n        ,0.00851565226912498,0.00859024841338396,0.00727401813492179,0.00593474367633462,0.00519725400954485,0.0045314054004848\n        ,0.00405027437955141,0.00266629084944725,0.0022423192858696,0.00348280230537057,0.00426881341263652,0.00503883510828018\n        ,0.00546713080257177,0.00537728983908892,0.0044288095086813,0.0035017451737076,0.00562617788091302,0.0025928404647857\n        ,0.00231737154535949,0.0061970972456038,0.00331592443399131,0.00674485834315419,0.00590951694175601,0.00519637437537313\n        ,0.00445498526096344,0.004665806889534,0.0081846471875906,0.00666993763297796,0.00779372174292803,0.00913236383348703\n        ,0.00815228745341301,0.00982468761503696,0.011363198980689,0.0101974476128817,0.00896517001092434,0.0075426627881825\n        ,0.00640195840969682,0.00575173040851951,0.00700918631628156,0.00673683220520616,0.0317902453243732,0.0211220774799585\n        ,0.0194973219186068,0.01398088876158,0.0204283185303211,0.00319192162714899,0.0104818921536207,0.00730531290173531\n        ,0.00450129853561521,0.00591684225946665,0.00417169742286205,0.00356268719770014,0.0104690222069621,0.00509927375242114\n        ,0.00186102197039872,0.00145455589517951,0.001659722533077,0.00481847347691655,0.00597766879945993,0.00810802355408669\n        ,0.00285123847424984,0.00348622654564679,0.0038478837814182,0.00459734443575144,0.00294839451089501,0.00143713282886893\n        ,0.00252975267358124,0.00263041467405856,0.00343446247279644,0.0047440086491406,0.00173946388531476,0.00166033732239157\n        ,0.00497205508872867,0.00735520524904132,0.00511531252413988,0.00298283714801073,0.0026974487118423,0.0096267145127058\n        ,0.00457618525251746,0.00590613065287471,0.00405954755842686,0.00201193033717573,0.00443566776812077,0.00177055958192796\n        ,0.00127172539941967,0.00133948377333581,0.00157687079627067,0.00116036820691079,0.00138072378467768,0.00185424415394664\n        ,0.00173488212749362,0.00211239885538816,0.110307686030865,0.270310074090958,0.180308550596237,0.0525071881711483\n        ,0.0310453362762928,0.0122003210708499,0.0146832931786776,0.0376727655529976,0.0653965249657631,0.0889726653695107\n        ,0.0620435625314713,0.100000001490116,0.0414770133793354,0.0541006587445736,0.019134471192956,0.05965656042099,0.0883200764656067\n        ,0.0621042251586914,0.0222545862197876,0.0621042251586914,0.124208390712738,0.0647295713424683,0.0228978954255581\n        ,0.118719235062599,0.215932756662369,0.219186872243881,0.143957927823067,0.199006676673889,0.328733921051025,0.359697282314301\n        ,0.0854365229606628,0.100000001490116,0.561005890369415,0.100000001490116,0.100000001490116,0.548947274684906,0.100000001490116\n        ,0.100000001490116,0.492050230503082,0.100000001490116,0.352902323007584,0.100000001490116,0.490042060613632,0.099943220615387\n        ,0.111167907714844,0.766309976577759,0.753124237060547,0.901639759540558,0.788366317749023,0.910683929920197,0.895671486854553\n        ,0.778757274150848,0.895110487937927,0.888791561126709,0.73319685459137,0.947233974933624,0.955398559570313,0.902906775474548\n        ,0.955532312393188,0.900637269020081,0.896606624126434,0.953525960445404,0.936966776847839,0.888297438621521,0.881877779960632\n        ,0.928057014942169,0.988516747951508,0.977068960666656,0.928149878978729,0.945951581001282,0.959586977958679,0.95492297410965\n        ,0.983144521713257,0.965573668479919,0.971107244491577,0.96269965171814,0.965506434440613,0.952936172485352,0.973325133323669\n        ,0.987694561481476,0.976295530796051,0.993065416812897,0.995336413383484,0.98855584859848,0.991537272930145,0.980835735797882\n        ,0.96312689781189,0.967631757259369,0.859552204608917,0.924339771270752,0.934046864509583,0.924542844295502,0.932335555553436\n        ,0.829179406166077,0.84100079536438,0.670541524887085,0.984790861606598,0.807817339897156,0.832724750041962,0.961030125617981\n        ,0.975924670696259,0.895998060703278,0.860245585441589,0.953859925270081,0.750764131546021,0.750919044017792,0.833233892917633\n        ,0.863375008106232,0.449999988079071,0.449999988079071,0.859209895133972,0.065053902566433,0.0300639923661947,0.0115915685892105\n        ,0.499764204025269,0.49950385093689,0.601146101951599,0.882238209247589,0.915871739387512,0.0243195462971926,0.0466393828392029\n        ,0.0380212739109993,0.0137503705918789,0.0791014283895493,0.195594787597656,0.199006676673889,0.186920404434204,0.0388490706682205\n        ,0.0013784485636279,0.00267337798140943,0.0028356306720525,0.0120388474315405,0.0138825234025717,0.0989195108413696\n        ,0.690626382827759,0.625692307949066,0.662807583808899,0.935847699642181,0.00865662377327681,0.0046409317292273,0.00987609662115574\n        ,0.0168349966406822,0.0235452111810446,0.0170978829264641,0.020403016358614,0.0229209307581186,0.0423493310809135\n        ,0.0523267090320587,0.296992301940918,0.349999994039536,0.449999988079071,0.103338062763214,0.227065414190292,0.198603168129921\n        ,0.0149681465700269,0.0262108184397221,0.94562828540802,0.972592830657959,0.965178906917572,0.936788022518158,0.817106544971466\n        ,0.817820966243744,0.982129037380219,0.753523230552673,0.449999988079071,0.898417294025421,0.00714429467916489,0.0214342530816793\n        ,0.00914276763796806,0.00893051736056805,0.0117370849475265,0.00181147246621549,0.00124722113832831,0.00145479803904891\n        ,0.00118767411913723,0.00261793099343777,0.00285224639810622,0.00317385280504823,0.00173605617601424,0.00373418163508177\n        ,0.00669426564127207,0.00210592360235751,0.00411897618323565,0.020949462428689,0.165792167186737,0.00323831802234054\n        ,0.119074746966362,0.0746522545814514,0.172979086637497,0.499562233686447,0.601501882076263,0.588120579719543,0.500665545463562\n        ,0.715467512607574,0.754183232784271,0.689664840698242,0.100000001490116,0.754693031311035,0.791724503040314,0.945742607116699\n        ,0.905741691589355,0.97682249546051,0.830595850944519,0.719328463077545,0.892614543437958,0.958270907402039,0.577101588249207\n        ,0.606267750263214,0.610401690006256,0.755581021308899,0.611320614814758,0.761284351348877,0.100000001490116,0.915168702602386\n        ,0.912965893745422,0.836812496185303,0.285337090492249,0.198688685894012,0.922615230083466,0.00135110120754689,0.896957993507385\n        ,0.0293768588453531,0.0304955970495939,0.0248932670801878,0.0114057706668973,0.00152966915629804,0.00443700607866049\n        ,0.00404184451326728,0.00181462150067091,0.00150442542508245,0.00210763537324965,0.0020971957128495,0.00152598856948316\n        ,0.00385429011657834,0.00210404885001481,0.00414984626695514\n        Transform: 0.662226976029194,0.128399379241995,0.738220153937706,0,-0.700126772726758,-0.245002464392823,0.670668514419641,0\n        ,0.266979179766694,-0.960982491477815,-0.0723514007076572,0,23.5674058806897,8.68539591712661,-45.5581716402116,1\n        \n        TransformLink: 0.662227010399801,-0.700126809064423,0.266979193623327,0,0.128399384753513,-0.245002474909506,-0.960982532727804,0\n        ,0.738220170844411,0.670668529779279,-0.0723514023646477,0,16.9097890202485,49.1825481658111,-1.24169085897477,1\n    }\n    Deformer: \"SubDeformer::Cluster_R_Forearm\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036\n        ,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059\n        ,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082\n        ,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105\n        ,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128\n        ,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151\n        ,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5169,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187\n        ,5188,5189,5190,5191,5192,5199,5206,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5226\n        ,5228,5232,5233,5234,5235,5236,5237,5243,5244,5245,5246,5247,5250,5251,5252,5253,5254,5255,5260,5261,5262,5263,5264\n        ,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287\n        ,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5419,5432,5433,5462,5466,5467,5478,5486,5489,5507,5508,5514,5516\n        ,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550\n        ,5551,5552,5553,5554,5555,5556,5557,5560,5561,5562,5563,5564,5565,5566,5567,5568,5570,5571,5574,5575,5576,5577,5578\n        ,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601\n        ,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624\n        ,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647\n        ,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670\n        ,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695\n        ,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719\n        ,5720,5721,5722,5723,5724,5725,5726,5735,5736,5737,5738,10097,10107,10108,10109,10110,10113,10115,10117,10143,10190\n        ,10447,10458\n        Weights: 0.9543816447258,0.961428701877594,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.96088171005249\n        ,0.965084493160248,0.850000023841858,0.985790371894836,0.850000023841858,0.972073614597321,0.97113448381424,0.850000023841858\n        ,0.850000023841858,0.973477780818939,0.850000023841858,0.972114026546478,0.991701662540436,0.850000023841858,0.986414194107056\n        ,0.850000023841858,0.850000023841858,0.97951078414917,0.850000023841858,0.969846367835999,0.97387957572937,0.972824931144714\n        ,0.956462383270264,0.956553280353546,0.992519795894623,0.990605115890503,0.850000023841858,0.850000023841858,0.850000023841858\n        ,0.850000023841858,0.850000023841858,0.850000023841858,0.978140294551849,0.988279283046722,0.850000023841858,0.850000023841858\n        ,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.963351666927338,0.96820056438446,0.978660225868225\n        ,0.850000023841858,0.850000023841858,0.850000023841858,0.978830456733704,0.973697781562805,0.850000023841858,0.984161257743835\n        ,0.992482841014862,0.97064870595932,0.969254374504089,0.97099906206131,0.968072533607483,0.982111215591431,0.970394670963287\n        ,0.9639692902565,0.953298568725586,0.951214969158173,0.94989001750946,0.936055898666382,0.933234095573425,0.945355355739594\n        ,0.949054658412933,0.958366990089417,0.959439158439636,0.960266590118408,0.962059617042542,0.959242284297943,0.965051889419556\n        ,0.971901178359985,0.979406654834747,0.985738217830658,0.985798180103302,0.925106704235077,0.893441200256348,0.878459811210632\n        ,0.854300141334534,0.853812396526337,0.845865249633789,0.832314372062683,0.834818005561829,0.836949825286865,0.842757284641266\n        ,0.859171569347382,0.85945862531662,0.859480738639832,0.852116346359253,0.855983078479767,0.868499100208282,0.885544180870056\n        ,0.907685220241547,0.930085897445679,0.93387758731842,0.940946340560913,0.947351574897766,0.937787890434265,0.923088073730469\n        ,0.896022856235504,0.878305971622467,0.861979186534882,0.856114983558655,0.866126954555511,0.866953492164612,0.863919258117676\n        ,0.858853697776794,0.852863013744354,0.871902525424957,0.879134178161621,0.891600370407104,0.871837258338928,0.897607088088989\n        ,0.918965518474579,0.836899697780609,0.838649094104767,0.821665406227112,0.818935096263886,0.934488832950592,0.936518609523773\n        ,0.94615626335144,0.947924792766571,0.950361132621765,0.841738760471344,0.94098174571991,0.897000789642334,0.949004292488098\n        ,0.908093512058258,0.906121969223022,0.97584456205368,0.981377363204956,0.981299638748169,0.91995245218277,0.916882395744324\n        ,0.911943197250366,0.915495872497559,0.917001128196716,0.908531725406647,0.984966635704041,0.984858632087708,0.991871953010559\n        ,0.991727232933044,0.521788418292999,0.5,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858\n        ,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858\n        ,0.850000023841858,0.850000023841858,0.850000023841858,0.523450016975403,0.5,0.850000023841858,0.5,0.5,0.5,0.5,0.850000023841858\n        ,0.850000023841858,0.500762045383453,0.850000023841858,0.501719176769257,0.850000023841858,0.507238328456879,0.850000023841858\n        ,0.509424269199371,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858\n        ,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.56866580247879,0.583622395992279,0.797594547271729\n        ,0.765617549419403,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858\n        ,0.850000023841858,0.688585638999939,0.715473115444183,0.55484527349472,0.579463958740234,0.647413372993469,0.698794841766357\n        ,0.710158050060272,0.679414689540863,0.624432146549225,0.572763860225677,0.564231753349304,0.595975279808044,0.615636348724365\n        ,0.618266224861145,0.635786294937134,0.655548989772797,0.66695636510849,0.662471175193787,0.643863558769226,0.626260459423065\n        ,0.600856244564056,0.603469014167786,0.620764255523682,0.640294432640076,0.65158623456955,0.64712917804718,0.628702044487\n        ,0.611316680908203,0.607571363449097,0.609140694141388,0.619702994823456,0.631768584251404,0.638790547847748,0.63597971200943\n        ,0.624578416347504,0.613943815231323,0.658988177776337,0.627193629741669,0.0218165908008814,0.0352623462677002,0.026454109698534\n        ,0.0141577869653702,0.0133350491523743,0.00319730537012219,0.0023472539614886,0.006200619507581,0.00615918589755893\n        ,0.00416851649060845,0.0035773750860244,0.00362570304423571,0.0050879311747849,0.00134382385294884,0.00219823117367923\n        ,0.00314766634255648,0.00275600934401155,0.00179083226248622,0.00145914521999657,0.00168375414796174,0.00128154177218676\n        ,0.00476005533710122,0.00583797786384821,0.00796274747699499,0.0028400057926774,0.00349170388653874,0.00393921649083495\n        ,0.00469232723116875,0.00309628201648593,0.00155989686027169,0.00251230737194419,0.00267865019850433,0.0034107556566596\n        ,0.00453887553885579,0.00168139557354152,0.00159857992548496,0.00477183097973466,0.00724268518388271,0.00510938372462988\n        ,0.00212487136013806,0.00301838270388544,0.00266955746337771,0.00942323636263609,0.00439173029735684,0.00573972193524241\n        ,0.00425780797377229,0.00218753656372428,0.00465337699279189,0.00195707939565182,0.00140292302239686,0.00148765055928379\n        ,0.00176502706017345,0.00127081223763525,0.00102934951428324,0.00145317963324487,0.00194567546714097,0.00177611515391618\n        ,0.00231837830506265,0.111892938613892,0.276097327470779,0.182606264948845,0.051285233348608,0.0299078412353992,0.0116401230916381\n        ,0.0140904020518065,0.0365951769053936,0.0643474012613297,0.0880153402686119,0.0602120384573936,0.0534202642738819\n        ,0.0403952412307262,0.053735539317131,0.0189040284603834,0.0706033632159233,0.0886967703700066,0.042857114225626,0.0307560451328754\n        ,0.0531281605362892,0.0931760966777802,0.0337394736707211,0.0239218175411224,0.123133383691311,0.295537739992142,0.278025776147842\n        ,0.147490873932838,0.349999994039536,0.424458980560303,0.367260605096817,0.103883504867554,0.259470343589783,0.507120609283447\n        ,0.45574676990509,0.411120414733887,0.504086971282959,0.33675828576088,0.501042604446411,0.495202124118805,0.231570228934288\n        ,0.429100096225739,0.351507425308228,0.493275076150894,0.280151754617691,0.175297662615776,0.800000011920929,0.800000011920929\n        ,0.800000011920929,0.777994394302368,0.733412683010101,0.750932455062866,0.751800656318665,0.840702414512634,0.564836502075195\n        ,0.684945344924927,0.0456191003322601,0.0653706043958664,0.0292139910161495,0.0110846934840083,0.499919772148132,0.499518573284149\n        ,0.616083443164825,0.89096063375473,0.0247959773987532,0.0469798818230629,0.0385838113725185,0.0137804802507162,0.0535802431404591\n        ,0.0805884152650833,0.349999994039536,0.349999994039536,0.349999994039536,0.0399816893041134,0.00100753747392446,0.00152242206968367\n        ,0.00296934437938035,0.00323700485751033,0.0138339176774025,0.0156798865646124,0.0972830429673195,0.713951766490936\n        ,0.646363317966461,0.800000011920929,0.943829536437988,0.00899034179747105,0.00499350856989622,0.01054213847965,0.0174784269183874\n        ,0.0253205075860024,0.0185488481074572,0.0213725566864014,0.0238320827484131,0.0466594398021698,0.0571891218423843\n        ,0.349999994039536,0.349999994039536,0.349999994039536,0.108780957758427,0.242685750126839,0.253124505281448,0.016670374199748\n        ,0.0297163967043161,0.690966308116913,0.00730973202735186,0.0209887269884348,0.0087518123909831,0.00851652212440968\n        ,0.0112668741494417,0.00201677973382175,0.00141855166293681,0.00159147719386965,0.00131093349773437,0.00273123872466385\n        ,0.00297377584502101,0.00332834711298347,0.0019080612109974,0.00410206848755479,0.0073396610096097,0.00110366602893919\n        ,0.00239244638942182,0.00473452545702457,0.0217749625444412,0.280029624700546,0.00338610471226275,0.128973752260208\n        ,0.0733335092663765,0.187143608927727,0.49951246380806,0.555980682373047,0.592231094837189,0.502066969871521,0.800000011920929\n        ,0.800000011920929,0.800000011920929,0.0454950891435146,0.800000011920929,0.722404003143311,0.349999994039536,0.610655307769775\n        ,0.614362716674805,0.756966769695282,0.615937829017639,0.333031117916107,0.349999994039536,0.349999994039536,0.00139323866460472\n        ,0.0287067573517561,0.0301683470606804,0.0249928496778011,0.011644403450191,0.0015737182693556,0.00375572172924876\n        ,0.0017695747083053,0.00410313904285431,0.00949179194867611,0.00190033111721277,0.00247855274938047,0.00380051089450717\n        ,0.00995506718754768,0.00198078528046608,0.00330763752572238,0.00164033786859363\n        Transform: -0.662814698738925,-0.271847628397838,0.697693006595292,0,-0.658330136901758,-0.232377138971596,-0.715962487814441\n        ,0,0.356760627249285,-0.933862798146209,-0.0249425019495575,0,21.3737221209514,8.0227624562824,47.9354098901974,1\n        \n        TransformLink: -0.662814672774643,-0.658330111113149,0.356760613273986,0,-0.271847630152989,-0.232377140471911,-0.933862804175582\n        ,0,0.697693045796623,-0.715962528042281,-0.0249425033510038,0,-17.0964165332061,50.2552287047925,1.06248635465806\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Hand\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6019,6032,6038,6041,6046,6048,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067\n        ,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090\n        ,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113\n        ,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6135,6136,6137,6139,6143,6158,6177,6178,6179,6180,6181\n        ,6182,6183,6184,6185,6186,6188,6217,6218,6220,6221,6222,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235\n        ,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6260\n        ,6271,6272,6274,6275,6276,6277,6278,6281,6282,6300,6301,6302,6303,6304,6307,6308,6309,6326,6327,6329,6330,6331,6332\n        ,6333,6335,6336,6337,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6367,6368,6370\n        ,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393\n        ,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416\n        ,6417,6418,6419,6420,6421,6422,6423,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440\n        ,6442,6443,6445,6446,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6464,6465,6466,6468,6469\n        ,6471,6472,6473,6475,6476,6478,6479,6481,6482,6483\n        Weights: 0.00130479945801198,0.00115911138709635,0.00175872875843197,0.00271619227714837,0.00106285652145743,0.0015120297903195\n        ,0.00488520367071033,0.00525947473943233,0.0152240814641118,0.0058322437107563,0.0144255012273788,0.00942893140017986\n        ,0.00434530852362514,0.0114153744652867,0.0101915383711457,0.00324962823651731,0.0111104818060994,0.0106603158637881\n        ,0.00879672635346651,0.0153704714030027,0.0104524334892631,0.0109532186761498,0.0155204143375158,0.0213428996503353\n        ,0.00706385681405663,0.0102087017148733,0.0292237475514412,0.00535075040534139,0.0103372754529119,0.00476671941578388\n        ,0.00251900753937662,0.0204347223043442,0.0258889235556126,0.0137172415852547,0.0270151142030954,0.0225172936916351\n        ,0.0296244621276855,0.0124627286568284,0.0151561014354229,0.0168448686599731,0.00965970754623413,0.00927151646465063\n        ,0.00500783044844866,0.00339167006313801,0.00459962524473667,0.0060916724614799,0.0131798479706049,0.0255049075931311\n        ,0.0152906086295843,0.110847167670727,0.0640205889940262,0.0492582283914089,0.0529643408954144,0.0609882585704327\n        ,0.163887873291969,0.151392802596092,0.314569145441055,0.0119036193937063,0.181643426418304,0.155784979462624,0.0354310423135757\n        ,0.0217668879777193,0.0815117955207825,0.106855973601341,0.0321793593466282,0.00307321944274008,0.00231335498392582\n        ,0.00378830498084426,0.0047411723062396,0.111192271113396,0.796268939971924,0.776784062385559,0.978859066963196,0.98049396276474\n        ,0.972140312194824,0.974617958068848,0.86642324924469,0.79427707195282,0.951687097549438,0.844824910163879,0.833017945289612\n        ,0.00297021493315697,0.981817245483398,0.0783289968967438,0.00117522315122187,0.00118728959932923,0.00153656990732998\n        ,0.0214405823498964,0.0220679994672537,0.0280335266143084,0.0257828701287508,0.175093457102776,0.175840079784393,0.014129888266325\n        ,0.236173659563065,0.964483380317688,0.966105341911316,0.00487766275182366,0.00121384067460895,0.00104836956597865\n        ,0.00261064269579947,0.00527278799563646,0.0016196146607399,0.191565632820129,0.00648218113929033,0.0210572946816683\n        ,0.00848367344588041,0.0187208727002144,0.163910433650017,0.959246575832367,0.969912648200989,0.00222233613021672\n        ,0.00535696605220437,0.0144689073786139,0.980347037315369,0.970510244369507,0.985016524791718,0.977311074733734,0.979323983192444\n        ,0.979390799999237,0.985957503318787,0.983055531978607,0.987015068531036,0.995343744754791,0.972897946834564,0.484119653701782\n        ,0.470623850822449,0.491619795560837,0.994537591934204,0.969956040382385,0.218082129955292,0.35081872344017,0.00539582036435604\n        ,0.34410172700882,0.00174769177101552,0.020339347422123,0.00183528068009764,0.00886431150138378,0.0222514942288399\n        ,0.0158319640904665,0.320180326700211,0.04841323569417,0.397936344146729,0.309453368186951,0.206016972661018,0.347281217575073\n        ,0.0044247810728848,0.191069826483727,0.0211531389504671,0.459793508052826,0.204510793089867,0.157113015651703,0.370152801275253\n        ,0.00862766150385141,0.00548374000936747,0.431275308132172,0.31342825293541,0.472878903150558,0.270284116268158,0.358282715082169\n        ,0.203067094087601,0.283760100603104,0.00640271510928869,0.00861588399857283,0.00290981493890285,0.0124844554811716\n        ,0.412148624658585,0.0235857348889112,0.43615585565567,0.494468510150909,0.492149859666824,0.583465158939362,0.614591658115387\n        ,0.47902324795723,0.0368059240281582,0.179605558514595,0.093951515853405,0.0709963366389275,0.528760671615601,0.00757221970707178\n        ,0.00689148018136621,0.00146077561657876,0.00115335988812149,0.00185912323649973,0.00343802105635405,0.00929137691855431\n        ,0.00599377509206533,0.0103735150769353,0.0123039186000824,0.00861450098454952,0.0111370049417019,0.00242832745425403\n        ,0.00318639865145087,0.0104857282713056,0.00409229006618261,0.00196978286840022,0.00119663344230503,0.00250004953704774\n        ,0.00289106229320169,0.00217845221050084,0.00413126405328512,0.0133866397663951,0.0123976143077016,0.0206668935716152\n        ,0.0215567238628864,0.0301417876034975,0.0713586881756783,0.560532927513123,0.603163719177246,0.804462194442749,0.766411006450653\n        ,0.804961740970612,0.65153706073761,0.576698124408722,0.960165858268738,0.364009708166122,0.789578795433044,0.732573091983795\n        ,0.514938175678253,0.972435057163239,0.954573690891266,0.965797305107117,0.983198702335358,0.943976640701294,0.928566694259644\n        ,0.987579226493835,0.973949670791626,0.983637511730194,0.969260632991791,0.390069872140884,0.995344936847687,0.41723170876503\n        ,0.504042029380798,0.701698005199432,0.0107290036976337,0.00334366434253752,0.00361302401870489,0.453608155250549\n        ,0.400738775730133,0.471676975488663,0.800864040851593,0.939786970615387,0.42675507068634,0.605584919452667,0.790349185466766\n        ,0.525061130523682,0.883583009243011,0.923232853412628,0.904953896999359,0.86821836233139,0.943565130233765,0.911553740501404\n        ,0.00109791976865381,0.00112204707693309,0.00190161785576493,0.0025254930369556,0.882194042205811,0.0070715737529099\n        ,0.00892249215394259,0.927492499351501,0.957062900066376,0.887509346008301,0.936216056346893,0.948306977748871,0.522060811519623\n        ,0.758114814758301,0.863632440567017,0.691744744777679,0.269960701465607,0.157683476805687,0.972856402397156,0.0662615373730659\n        ,0.951834917068481,0.634501338005066,0.04736552760005,0.00515583343803883,0.318909585475922,0.400039374828339,0.44497874379158\n        ,0.412904262542725,0.422368437051773,0.36232003569603,0.435642629861832,0.115776337683201,0.112991780042648,0.519146800041199\n        \n        Transform: 0.525245239000652,-0.790238300444755,0.31565934973444,0,-0.819456473838864,-0.569703518321511,-0.0626812335023225\n        ,0,0.229365355566028,-0.22574608595525,-0.946799976133382,0,21.0667191574115,43.1016445023767,-3.43213608283347,1\n        \n        TransformLink: 0.525245270545199,-0.819456523052794,0.229365369340976,0,-0.790238327627501,-0.569703537918265,-0.2257460937205,0\n        ,0.31565936333484,-0.0626812362029865,-0.946800016926909,0,24.0787627570046,41.6032892634726,1.64850555767672,1\n    }\n    Deformer: \"SubDeformer::Cluster_R_Hand\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 5016,5017,5018,5019,5022,5024,5027,5028,5030,5033,5035,5036,5038,5046,5047,5048,5049,5050,5051,5054,5055,5056,5057\n        ,5058,5059,5063,5064,5065,5068,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178\n        ,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201\n        ,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224\n        ,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247\n        ,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270\n        ,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293\n        ,5294,5295,5296,5297,5298,5299,5300,5587,5591,5594,5604,5610,5611,5612,5613,5618,5620,5621,5626,5627,5628,5629,5630\n        ,5632,5633,5640,5642,5645,5646,5661,5680,5709,5710,5717,5719,5720,5721,5722,5723,6923,6924,6925,6926,6927,6928,6929\n        ,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952\n        ,6953,6954,6955,6956,6957,6959,6963,6974,6975,6977,6978,6979,6980,6981,6984,6985,7003,7004,7005,7006,7007,7010,7011\n        ,7029,7030,7032,7033,7034,7035,7036,7038,7039,7040,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064\n        ,7065,7066,7067,7070,7071,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7087,7088,7089,7090,7091\n        ,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114\n        ,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139\n        ,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7159,7160,7161,7163,7164\n        ,7166,7167,7169,7170,7171,7172,7173,7174\n        Weights: 0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464\n        ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464\n        ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464\n        ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464\n        ,0.150000005960464,0.478211551904678,1,1,1,1,1,1,0.5,1,1,1,1,1,1,1,0.150000005960464,0.150000005960464,0.150000005960464\n        ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464\n        ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.476549983024597,1,1,1\n        ,1,1,1,0.5,1,1,1,1,1,1,0.150000005960464,1,1,1,0.5,0.5,0.5,0.5,0.150000005960464,0.150000005960464,0.499237954616547\n        ,0.150000005960464,0.498280823230743,0.150000005960464,0.492761671543121,0.150000005960464,0.490575730800629,0.150000005960464\n        ,0.150000005960464,1,0.150000005960464,1,0.150000005960464,1,1,1,0.150000005960464,0.150000005960464,0.150000005960464\n        ,0.150000005960464,0.150000005960464,0.150000005960464,1,1,1,1,1,0.43133419752121,0.416377604007721,0.202405482530594\n        ,0.234382465481758,0.150000005960464,1,1,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464\n        ,0.150000005960464,1,1,1,1,0.311414361000061,0.284526914358139,0.445154696702957,0.420536041259766,0.352586656808853\n        ,0.30120512843132,0.289841949939728,0.320585310459137,0.375567853450775,0.427236169576645,0.435768216848373,0.404024720191956\n        ,0.384363621473312,0.381733804941177,0.364213705062866,0.344451010227203,0.33304363489151,0.337528795003891,0.356136411428452\n        ,0.373739540576935,0.399143755435944,0.396531015634537,0.379235744476318,0.359705597162247,0.348413735628128,0.35287082195282\n        ,0.371297925710678,0.388683319091797,0.392428636550903,0.390859305858612,0.380297005176544,0.368231445550919,0.361209481954575\n        ,0.364020258188248,0.375421583652496,0.386056154966354,0.341011792421341,0.372806400060654,1,1,1,0.00116238882765174\n        ,0.00126314430963248,0.00127484649419785,0.00115499168168753,0.002157126320526,0.00122782762628049,0.00155618181452155\n        ,0.00316519476473331,0.00129367306362838,0.00159544369671494,0.00123375444673002,0.00481545180082321,0.00362198776565492\n        ,0.00342102046124637,0.0025759288109839,0.00383124360814691,0.00162800203543156,0.00126475747674704,0.00289244158193469\n        ,0.00115937925875187,0.00149133347440511,0.0011821809457615,0.00141481403261423,0.00124221364967525,0.00153389351908118\n        ,0.00119169999379665,0.00243614916689694,0.00110688724089414,0.00127081596292555,0.00211558281444013,0.00100069667678326\n        ,0.0010915391612798,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.980131089687347,0.972969591617584,0.984836518764496,0.979745507240295\n        ,0.976824939250946,0.975857794284821,0.982909977436066,0.980634093284607,0.989108204841614,0.995466649532318,0.979120552539825\n        ,0.460078805685043,0.459079802036285,0.480023443698883,0.992386698722839,0.975788593292236,0.138774245977402,0.343353152275085\n        ,0.00259447447024286,0.276375085115433,0.0248107090592384,0.0122508257627487,0.025913767516613,0.014011156745255,0.277671813964844\n        ,0.0515360981225967,0.380510330200195,0.249686777591705,0.148735642433167,0.335018038749695,0.00630574533715844,0.173127308487892\n        ,0.0223309826105833,0.442807972431183,0.139312252402306,0.139563262462616,0.357817381620407,0.011000263504684,0.413820147514343\n        ,0.269777983427048,0.461716413497925,0.253329813480377,0.356669843196869,0.186188355088234,0.220778793096542,0.00349638611078262\n        ,0.0110432421788573,0.0015514426631853,0.00884688831865788,0.382615059614182,0.021647721529007,0.416930913925171,0.494424849748611\n        ,0.490876406431198,0.62108588218689,0.640656173229218,0.47115883231163,0.0474152453243732,0.260224372148514,0.133849367499352\n        ,0.0852451249957085,0.555279970169067,0.00700232526287436,0.010713710449636,0.00243271933868527,0.00105389696545899\n        ,0.0027286084368825,0.00499552441760898,0.0102303149178624,0.00594911677762866,0.0118187936022878,0.0127267623320222\n        ,0.00834109634160995,0.0117082539945841,0.00214929180219769,0.00271061388775706,0.0104626463726163,0.00442534405738115\n        ,0.00153978925663978,0.00266948714852333,0.00231324881315231,0.00142847280949354,0.00443828664720058,0.0104610789567232\n        ,0.00884981267154217,0.022325336933136,0.0158318430185318,0.0256853923201561,0.0783745720982552,0.57348096370697,0.621407747268677\n        ,0.828966498374939,0.774004817008972,0.819439351558685,0.668650686740875,0.582747161388397,0.966136991977692,0.334902942180634\n        ,0.80157071352005,0.726243376731873,0.515989422798157,0.967205703258514,0.947406470775604,0.958869814872742,0.978822588920593\n        ,0.934976994991302,0.91591876745224,0.981829702854156,0.968005239963531,0.977376699447632,0.962073385715485,0.376457810401917\n        ,0.992758095264435,0.402833461761475,0.492891848087311,0.673506021499634,0.0103504024446011,0.00493862433359027,0.447454303503037\n        ,0.384990841150284,0.465120375156403,0.800574660301209,0.931973874568939,0.408383995294571,0.558285415172577,0.778715252876282\n        ,0.581696271896362,0.878262996673584,0.91571843624115,0.89141857624054,0.856104969978333,1,0.901411950588226,1,0.918534278869629\n        ,1,0.874900579452515,0.928177952766418,0.940730452537537,0.504734337329865,0.806382894515991,0.88244241476059,0.68834376335144\n        ,0.284145832061768,1,1,0.653447806835175,0.0394690781831741,0.264194279909134,0.358842074871063,0.421661764383316\n        ,0.382513344287872,0.406745463609695,0.338808655738831,0.411881446838379,0.121384337544441,0.155007690191269,0.524047017097473\n        ,1,1,1\n        Transform: -0.539910064473397,0.715295240266879,0.443677536411028,0,-0.785857646383377,-0.617193463603956,0.0387289250314665\n        ,0,0.301537519568316,-0.327757234066569,0.895349240611154,0,19.3032950598201,45.5941437919841,4.68926169427989,1\n        TransformLink: -0.539910067817437,-0.785857651250743,0.301537521435949,0,0.715295342735177,-0.617193552018866,-0.327757281018826\n        ,0,0.443677559210366,0.0387289270216368,0.895349286620627,0,-24.2717555485735,43.1284436014007,4.92461773900622,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Thumb1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6041,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072\n        ,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6089,6090,6091,6092,6093,6094,6095,6096\n        ,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6116,6117,6118,6119,6120,6121\n        ,6122,6123,6124,6125,6126,6127,6135,6136,6137,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6188,6220,6221,6224\n        ,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6250,6353,6355,6356,6358\n        ,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381\n        ,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6403,6404,6405\n        ,6406,6407,6408,6409,6410,6413,6419,6420,6425,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6445,6446,6448,6449\n        ,6450,6451,6452,6453,6454,6456,6457,6458,6459,6460,6461,6464,6465,6466,6468,6469,6481,6482,6483\n        Weights: 0.00159759109374136,0.00247123767621815,0.00295475963503122,0.0077313999645412,0.00347915571182966,0.00788113940507174\n        ,0.00438647763803601,0.00198627333156765,0.00456920033320785,0.00394627405330539,0.00149479776155204,0.00498084956780076\n        ,0.0045593879185617,0.00389673910103738,0.0053889025002718,0.00434868596494198,0.00466193072497845,0.00575977610424161\n        ,0.00650691241025925,0.00277097732760012,0.0038960506208241,0.00847896747291088,0.00217573903501034,0.00471446616575122\n        ,0.00265942816622555,0.00134018436074257,0.00880127213895321,0.0104272356256843,0.0025074842851609,0.00591300847008824\n        ,0.00400860561057925,0.00504888221621513,0.00428155763074756,0.00490744644775987,0.00415540672838688,0.00185257231350988\n        ,0.0034409835934639,0.00126996927428991,0.00180447299499065,0.00182313250843436,0.00459778308868408,0.00878611020743847\n        ,0.00689603015780449,0.0274771600961685,0.0106862084940076,0.0132547691464424,0.0176012106239796,0.00608202582225204\n        ,0.00622645253315568,0.00652747694402933,0.0127935614436865,0.002189856255427,0.00902560912072659,0.00980143714696169\n        ,0.00303600518964231,0.00200605415739119,0.0202941447496414,0.0301873274147511,0.0108516663312912,0.00138832733500749\n        ,0.00105692853685468,0.00181000796146691,0.00204267911612988,0.027459803968668,0.194376647472382,0.211311653256416\n        ,0.0143799241632223,0.0139722237363458,0.0235288999974728,0.0229588188230991,0.128103569149971,0.197381421923637,0.0392584875226021\n        ,0.141111671924591,0.154612764716148,0.00147584686055779,0.014051241800189,0.00496605504304171,0.0069593284279108\n        ,0.0040521421469748,0.00478092953562737,0.00771074322983623,0.00695881806313992,0.00556631200015545,0.00246958923526108\n        ,0.00889166165143251,0.022413456812501,0.0212120581418276,0.00200483039952815,0.00163757242262363,0.00320822768844664\n        ,0.0478605479001999,0.00297751650214195,0.00626803236082196,0.00324841495603323,0.00309346639551222,0.00481143221259117\n        ,0.0272986982017756,0.0201074331998825,0.00103253370616585,0.00216887542046607,0.00447408715263009,0.0121217016130686\n        ,0.0195227228105068,0.00604483531787992,0.0104366512969136,0.0123603446409106,0.0124463373795152,0.00555362459272146\n        ,0.00640094606205821,0.015989737585187,0.00246398895978928,0.0972976014018059,0.0578067973256111,0.465059280395508\n        ,0.380723357200623,0.422929733991623,0.458774000406265,0.092535063624382,0.274851739406586,0.232820615172386,0.00305847125127912\n        ,0.00748487003147602,0.0182876884937286,0.00735447648912668,0.00302722817286849,0.0059708533808589,0.0140878790989518\n        ,0.0213838182389736,0.0202675182372332,0.0249171163886786,0.0320472456514835,0.0313042849302292,0.0334601327776909\n        ,0.013205399736762,0.0161251649260521,0.0353358276188374,0.0189561918377876,0.0175694078207016,0.0115405488759279\n        ,0.0251711886376143,0.033161573112011,0.0268362518399954,0.0510043613612652,0.426536828279495,0.349578112363815,0.436885267496109\n        ,0.484621107578278,0.478504449129105,0.492120414972305,0.424962937831879,0.391250789165497,0.19102568924427,0.228269383311272\n        ,0.191427558660507,0.345326334238052,0.418538182973862,0.0294552650302649,0.0147695094347,0.261895328760147,0.481220096349716\n        ,0.0170786399394274,0.0281957481056452,0.0150331221520901,0.00732234213501215,0.0262191146612167,0.0131651647388935\n        ,0.00237191957421601,0.00544905196875334,0.00206797500140965,0.0344606004655361,0.00109131261706352,0.198616206645966\n        ,0.44857582449913,0.0926235690712929,0.0629098638892174,0.0645485669374466,0.0908042192459106,0.0431784391403198,0.0665719956159592\n        ,0.00115764292422682,0.112029992043972,0.00399026228114963,0.00503641506657004,0.0523641631007195,0.0312329083681107\n        ,0.063860610127449,0.0429957583546638,0.0335627309978008,0.19743774831295,0.114430151879787,0.0259818006306887,0.463000237941742\n        ,0.00479828519746661,0.0177750047296286,0.00974856596440077,0.0449162684381008,0.35066893696785,0.463127940893173\n        ,0.0020702350884676,0.497311651706696,0.503731489181519,0.457812607288361\n        Transform: -0.241495099703434,0.748823868440869,0.617205703028192,0,-0.623205875017562,-0.607212304548738,0.492856574902623,0\n        ,0.743837685515158,-0.26562378413437,0.613310235141847,0,28.1335141022105,7.31972621211066,-36.6074359315937,1\n        TransformLink: -0.241495112205703,-0.623205907281104,0.743837724023843,0,0.748823895817871,-0.607212326748421,-0.265623793845576\n        ,0,0.61720574758735,0.492856610484397,0.613310279419772,0,23.9072401077965,40.019816957261,3.46924110783787,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Index1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6117,6118,6119,6120,6121,6123,6124,6125,6126,6127,6136,6185,6186,6230,6231,6235,6236,6238,6239,6240,6241,6242,6243\n        ,6245,6250,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349\n        ,6350,6351,6352,6353,6354,6355,6356,6357,6362,6394,6395,6396,6397,6398,6399,6400,6401,6403,6404,6405,6406,6407,6408\n        ,6409,6410,6411,6412,6413,6415,6418,6419,6420,6421,6422,6423,6424,6425,6427,6428,6429,6431,6432,6433,6434,6435,6436\n        ,6437,6438,6439,6446,6450,6451,6452,6453,6454,6455,6456,6457,6458,6461,6466,6478,6479,6480,6483\n        Weights: 0.00371436937712133,0.00494377221912146,0.00263386126607656,0.00218590977601707,0.00185694906394929,0.00206264993175864\n        ,0.00298752659000456,0.00426755286753178,0.00718114338815212,0.00587730761617422,0.00168352981563658,0.00520978355780244\n        ,0.00493870163336396,0.00560601847246289,0.00409966241568327,0.00274549331516027,0.00369933270849288,0.00374366831965745\n        ,0.00306748598814011,0.00304535985924304,0.00253631826490164,0.00310266017913818,0.00145082944072783,0.00372593943029642\n        ,0.0044119730591774,0.512684762477875,0.695699751377106,0.632200360298157,0.776936829090118,0.691368758678436,0.499650865793228\n        ,0.514966368675232,0.54956066608429,0.423678308725357,0.00362533191218972,0.0122475698590279,0.0173689760267735,0.0190478153526783\n        ,0.00414237612858415,0.0305128712207079,0.0233743507415056,0.0281667727977037,0.0429911389946938,0.0580260083079338\n        ,0.0308641213923693,0.476867467164993,0.550444364547729,0.507946193218231,0.542712569236755,0.494468510150909,0.492149859666824\n        ,0.274605512619019,0.293562948703766,0.494670271873474,0.325606614351273,0.00381355290301144,0.00167523242998868,0.00164477236103266\n        ,0.00221550418063998,0.00144181016366929,0.00109618133865297,0.00171595136635005,0.00399577850475907,0.0344652831554413\n        ,0.00270954403094947,0.00151923589874059,0.00400778744369745,0.00674853380769491,0.00620432337746024,0.00295892870053649\n        ,0.0103678619489074,0.00600593723356724,0.00103968544863164,0.00440405542030931,0.0028966658283025,0.565459847450256\n        ,0.469368457794189,0.272410869598389,0.476170718669891,0.491343110799789,0.106734871864319,0.071705125272274,0.125662431120873\n        ,0.0645021125674248,0.0104111544787884,0.00976197328418493,0.359163969755173,0.00594769092276692,0.0161525495350361\n        ,0.0120403580367565,0.00650829821825027,0.0132051296532154,0.0192908421158791,0.00605902681127191,0.00987514760345221\n        ,0.00226790015585721,0.00873659271746874,0.00513577414676547,0.0196360442787409,0.00865437649190426,0.0073253489099443\n        ,0.0213408451527357,0.0177945960313082,0.00902661215513945,0.259924441576004,0.00377326039597392,0.00483903102576733\n        ,0.600874423980713,0.53497850894928,0.02568169683218,0.00841941591352224\n        Transform: 0.476186898697672,-0.714199454111438,0.512996243940419,0,-0.826192420685591,-0.563128902688112,-0.0170846068296861\n        ,0,0.30108483017946,-0.415698154205959,-0.858220797655617,0,17.9477939682589,41.6512675908134,-9.0769042840432,1\n        TransformLink: 0.476186920862355,-0.826192459141696,0.30108484419381,0,-0.714199470747975,-0.563128915805617,-0.415698163889218,0\n        ,0.512996260553214,-0.0170846073829516,-0.858220825448115,0,25.8572264784377,38.1282898492032,4.12055842343868,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Middle1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6119,6120,6121,6122,6125,6136,6185,6186,6230,6231,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6249,6250\n        ,6300,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6315,6316,6318,6320,6321,6322,6323,6324,6325,6326,6327\n        ,6328,6353,6354,6356,6401,6402,6403,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6417,6419,6420,6425,6426,6427\n        ,6428,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6450,6451,6452,6453,6454,6455,6456,6457,6458,6461,6465,6475\n        ,6476\n        Weights: 0.00412716390565038,0.00334790674969554,0.00247386749833822,0.00131288380362093,0.00478683551773429,0.00244800793007016\n        ,0.00789336860179901,0.00774389877915382,0.00784872099757195,0.00588024314492941,0.00478576263412833,0.00626767612993717\n        ,0.00613046204671264,0.00850861892104149,0.00524820294231176,0.00511750066652894,0.00595254916697741,0.00744087295606732\n        ,0.00562278227880597,0.00201658881269395,0.0165302008390427,0.00264852098189294,0.00964223500341177,0.771893739700317\n        ,0.77039760351181,0.820030331611633,0.36432346701622,0.423502087593079,0.594969689846039,0.490104913711548,0.418671399354935\n        ,0.0125696966424584,0.0014935287181288,0.00192902889102697,0.00668199779465795,0.00570874242112041,0.00863724667578936\n        ,0.00920366495847702,0.0100211091339588,0.128556668758392,0.00183883716817945,0.427183836698532,0.430036187171936\n        ,0.0196738447993994,0.527762174606323,0.64354407787323,0.478188276290894,0.00859897024929523,0.00973446387797594,0.0340385884046555\n        ,0.00638306746259332,0.56878536939621,0.161186441779137,0.00647852476686239,0.0104820244014263,0.0129652433097363\n        ,0.00652002496644855,0.0194364041090012,0.062188807874918,0.0101987821981311,0.0084811132401228,0.00866235606372356\n        ,0.0206532515585423,0.00225880974903703,0.0242175608873367,0.0204420946538448,0.418661445379257,0.562414765357971\n        ,0.460900753736496,0.186287403106689,0.0159904323518276,0.0341598056256771,0.00508690346032381,0.0102104907855392\n        ,0.0117530338466167,0.00734900729730725,0.0172924008220434,0.0216865725815296,0.00719740614295006,0.0119991423562169\n        ,0.0114067317917943,0.00656844489276409,0.0289940275251865,0.0121338376775384,0.0108049148693681,0.455316990613937\n        ,0.0266528204083443,0.0129107730463147,0.0223489850759506,0.00559531105682254,0.00153321924153715,0.54115879535675\n        ,0.558823943138123\n        Transform: 0.570318626472898,-0.773811772846064,0.275593770724241,0,-0.809442113089849,-0.586519973135601,0.028243909598697,0\n        ,0.139785791831067,-0.239185245855052,-0.960859105614745,0,15.4107018618584,43.3508755303443,-5.43133537051692,1\n        TransformLink: 0.570318661979152,-0.809442163483183,0.139785800533693,0,-0.77381183435103,-0.586520019754033,-0.23918526486624,0\n        ,0.275593807727066,0.0282439133908888,-0.960859234625286,0,26.2532520446477,38.0536303940709,2.99594460225472,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ring1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6274,6277,6278,6279,6280,6281,6282,6283,6285,6286,6287,6290,6291,6293,6294,6295,6296,6297,6298,6299,6301,6302,6430\n        ,6471,6472,6473,6474\n        Weights: 0.636881113052368,0.64725536108017,0.770711004734039,0.324779361486435,0.371644020080566,0.644023895263672,0.495609492063522\n        ,0.184649080038071,0.00116098043508828,0.0132631380110979,0.442761778831482,0.00111894879955798,0.00623618019744754\n        ,0.0150064034387469,0.0145346531644464,0.0168191604316235,0.0195216089487076,0.037700742483139,0.446998029947281,0.424838811159134\n        ,0.478186815977097,0.512804090976715,0.556056439876556,0.654269754886627,0.558543562889099,0.545004069805145,0.013606695458293\n        \n        Transform: 0.582885664221684,-0.81087194489037,0.0522593330921746,0,-0.812067782193689,-0.57910556765076,0.0719910370836576,0\n        ,-0.0281118424327725,-0.084400665792594,-0.996035240596412,0,15.4403653620145,43.8373141656814,-2.25142242053959,1\n        \n        TransformLink: 0.582885631511836,-0.812067736622806,-0.0281118408552176,0,-0.810871910930541,-0.579105543397453,-0.0844006622578409\n        ,0,0.0522593358187756,0.071991040839749,-0.996035292563984,0,26.6641374331222,38.0871364365867,1.89145925166464,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Pinky1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6246,6247,6248,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270\n        ,6271,6272,6273,6275,6276,6416,6470\n        Weights: 0.507474660873413,0.490716248750687,0.498910874128342,0.766794085502625,0.626131474971771,0.534704625606537,0.623797118663788\n        ,0.558018565177917,0.576629400253296,0.479758083820343,0.00651619024574757,0.0263325236737728,0.488740682601929,0.030104698613286\n        ,0.0135515499860048,0.0173956081271172,0.0141944829374552,0.00693258456885815,0.0144957825541496,0.0226971209049225\n        ,0.055401973426342,0.0273477323353291,0.0195371117442846,0.471582263708115,0.484038800001144,0.0752825513482094,0.533363699913025\n        ,0.55875962972641,0.577449381351471,0.0189471412450075\n        Transform: 0.46713900074045,-0.863910014408551,-0.188256754586628,0,-0.865407114918385,-0.490380886739592,0.102942014820845,0\n        ,-0.181250153437913,0.114830509928814,-0.97670992775668,0,20.7401281878819,41.51763584013,1.91200099905934,1\n        TransformLink: 0.467139029382885,-0.865407167980465,-0.181250164551191,0,-0.863910037660342,-0.490380899937996,0.114830513019431\n        ,0,-0.188256764556457,0.102942020272518,-0.976709979481948,0,26.5389261131629,38.1112859796014,0.859130680551072,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Thumb1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 5610,5613,5626,5627,5628,5629,5630,5640,5717,6938,6939,6940,6941,6942,6943,6944,6945,6953,7056,7058,7059,7061,7062\n        ,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085\n        ,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7106,7107,7108,7109\n        ,7110,7111,7112,7113,7116,7122,7123,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7150,7151,7152\n        ,7153,7156,7157,7169,7170,7171\n        Weights: 0.00117834086995572,0.00185435765888542,0.00218916381709278,0.00165725930128247,0.00153683964163065,0.00117011729162186\n        ,0.00181572057772428,0.00142473354935646,0.00112519657704979,0.0120337009429932,0.0176298543810844,0.0058772643096745\n        ,0.00901230424642563,0.0135681601241231,0.0142464553937316,0.00650400621816516,0.00706358160823584,0.0124409534037113\n        ,0.00218535028398037,0.0649432241916656,0.0371046252548695,0.458596736192703,0.341233342885971,0.401548683643341,0.451044887304306\n        ,0.0650122687220573,0.274735152721405,0.276568412780762,0.00614429172128439,0.0060535091906786,0.0265965759754181\n        ,0.0063732503913343,0.00581173552200198,0.00778278242796659,0.0180601254105568,0.0219534132629633,0.0191538892686367\n        ,0.0263300146907568,0.0315652005374432,0.0293215438723564,0.0334162600338459,0.0118432277813554,0.013966896571219\n        ,0.0339761525392532,0.0192808117717505,0.0143059594556689,0.00743300141766667,0.0268707405775785,0.0281048789620399\n        ,0.0191535260528326,0.0545883439481258,0.427406132221222,0.33634215593338,0.441167950630188,0.490224152803421,0.483224272727966\n        ,0.493799120187759,0.414857596158981,0.374179124832153,0.167420074343681,0.220849931240082,0.177327692508698,0.328664183616638\n        ,0.412713706493378,0.0247516389936209,0.0111677721142769,0.267518728971481,0.479819446802139,0.0197998341172934,0.0317522473633289\n        ,0.0172765497118235,0.00883822608739138,0.0289071407169104,0.0154305025935173,0.00267817359417677,0.00531181460246444\n        ,0.0370833277702332,0.00141901499591768,0.208139926195145,0.388550370931625,0.0929949060082436,0.0676976293325424\n        ,0.0705112963914871,0.0944326370954514,0.0724598839879036,0.0573470108211041,0.067487895488739,0.047105111181736,0.037431426346302\n        ,0.153220906853676,0.0980262160301209,0.0206126980483532,0.448262453079224,0.334237396717072,0.470356494188309,0.503118216991425\n        ,0.476589530706406,0.455160111188889\n        Transform: 0.299955290163138,-0.814394980290346,0.496777211674741,0,-0.640285237271459,-0.557902697734118,-0.527995609111184\n        ,0,0.70715038790913,-0.159704046697343,-0.688790892093755,0,29.029916536771,4.7317295503175,38.4517010471098,1\n        TransformLink: 0.299955280479185,-0.640285216600072,0.707150365079025,0,-0.814394991209243,-0.557902705214128,-0.159704048838554\n        ,0,0.496777284049562,-0.527995686034173,-0.688790992442797,0,-23.956111524808,41.5296033876418,6.71234561535597,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Index1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6938,6939,6942,6943,6944,6945,6946,6948,6953,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045\n        ,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7065,7097,7098,7099,7100,7101,7103,7104\n        ,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7118,7121,7122,7123,7124,7125,7126,7127,7128,7130,7131,7132\n        ,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7149,7150,7151,7152,7156,7166,7167,7168,7171\n        Weights: 0.0028345063328743,0.0034583390224725,0.00352103868499398,0.00366821466013789,0.00313717871904373,0.00359226879663765\n        ,0.00116448593325913,0.00275600515305996,0.00362914521247149,0.516221463680267,0.704328000545502,0.626512408256531\n        ,0.788698315620422,0.758932828903198,0.491405695676804,0.50881016254425,0.517794549465179,0.377093970775604,0.00629057269543409\n        ,0.0051807276904583,0.0198304392397404,0.0193320792168379,0.00171411549672484,0.037797424942255,0.027088450267911\n        ,0.0283459965139627,0.0328404195606709,0.0557266399264336,0.0329632498323917,0.479581147432327,0.584652662277222,0.496655881404877\n        ,0.558867752552032,0.494424849748611,0.492634028196335,0.283073902130127,0.292983174324036,0.508531212806702,0.341628015041351\n        ,0.00316119496710598,0.00137431977782398,0.001358114881441,0.00221375562250614,0.00133413984440267,0.00170696689747274\n        ,0.00347282318398356,0.0293117240071297,0.00315881427377462,0.0017423335229978,0.00493387132883072,0.00811068899929523\n        ,0.00765371881425381,0.00381668144837022,0.0124431811273098,0.00749050639569759,0.00156867934856564,0.00560529157519341\n        ,0.00357585120946169,0.573042452335358,0.473697155714035,0.297389835119247,0.473060458898544,0.484047085046768,0.100287444889545\n        ,0.080564945936203,0.121525146067142,0.0695379748940468,0.0116193136200309,0.011608568020165,0.390105187892914,0.00705760065466166\n        ,0.0181731842458248,0.0144127681851387,0.00774019164964557,0.0163207482546568,0.0230593774467707,0.0117224948480725\n        ,0.0103925261646509,0.023034455254674,0.0102231930941343,0.00876631308346987,0.0257692635059357,0.0157899931073189\n        ,0.0079519534483552,0.268854886293411,0.00414057867601514,0.619400978088379,0.560737490653992,0.0276894252747297,0.00791016221046448\n        \n        Transform: -0.482154341627574,0.614915306728794,0.624024315663636,0,-0.795962863734002,-0.605054025618336,-0.0187812526913695\n        ,0,0.366019549322665,-0.505755636317744,0.781179185458219,0,16.3612037448649,43.8516961637896,10.9593100868548,1\n        TransformLink: -0.482154341588848,-0.795962863670071,0.366019549293266,0,0.614915323925831,-0.605054042539588,-0.505755650461966\n        ,0,0.62402431454957,-0.0187812526578394,0.781179184063586,0,-25.9153304969333,39.7613861936677,7.62853778503809,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Middle1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6952,6953,7003,7006,7007,7008,7009,7010,7011,7012,7013,7014\n        ,7016,7018,7019,7021,7023,7024,7026,7027,7028,7029,7030,7031,7056,7059,7104,7105,7106,7109,7110,7111,7112,7113,7114\n        ,7115,7116,7117,7118,7120,7122,7123,7128,7129,7130,7131,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147\n        ,7148,7149,7150,7151,7152,7163,7164\n        Weights: 0.00500072818249464,0.00594224268570542,0.00633213529363275,0.00784198846668005,0.00608585309237242,0.00622750772163272\n        ,0.0074488609097898,0.00871003977954388,0.00458542117848992,0.00190111703705043,0.0126460809260607,0.00359231326729059\n        ,0.00814132858067751,0.780165672302246,0.840406358242035,0.831347942352295,0.338731288909912,0.319924503564835,0.591757655143738\n        ,0.483411818742752,0.406764596700668,0.0154762221500278,0.00170462974347174,0.00772825255990028,0.00779491337016225\n        ,0.0104415100067854,0.00672159111127257,0.0107284439727664,0.0477143339812756,0.403345257043839,0.414985597133636\n        ,0.0198577605187893,0.536106884479523,0.687484502792358,0.474653422832489,0.00896497163921595,0.0292559992522001,0.00563854072242975\n        ,0.594972848892212,0.157949775457382,0.00806060433387756,0.012730622664094,0.0161999184638262,0.00852251797914505\n        ,0.0236726757138968,0.0721689537167549,0.014659053646028,0.0109589444473386,0.0114774499088526,0.0247667580842972\n        ,0.00337542127817869,0.0307328347116709,0.0237923245877028,0.428632140159607,0.56472510099411,0.461676090955734,0.184774100780487\n        ,0.019334252923727,0.050190407782793,0.00608722772449255,0.0115801775828004,0.0143293524160981,0.00884373113512993\n        ,0.0217493902891874,0.0264030154794455,0.0144056649878621,0.0137261711061001,0.0345770604908466,0.0144937243312597\n        ,0.0130718080326915,0.46775695681572,0.0246061757206917,0.0115793980658054,0.0221886523067951,0.57551372051239,0.565304398536682\n        \n        Transform: -0.595926373558608,0.696185103154453,0.400247416304471,0,-0.772654477421632,-0.632889052852795,-0.0495624802253882\n        ,0,0.218807554470381,-0.338788561157854,0.915065841994784,0,13.4799143483701,45.7845417929185,6.55023107646816,1\n        TransformLink: -0.595926415228335,-0.772654531448946,0.218807569770343,0,0.696185144753957,-0.632889090670137,-0.338788581401659\n        ,0,0.400247444766019,-0.0495624837497705,0.915065907065011,0,-26.4631940713707,39.7164996481656,6.56787952339484,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Ring1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6977,6980,6981,6982,6983,6984,6985,6986,6989,6990,6994,6996,6997,6998,6999,7000,7001,7002,7004,7005,7133,7159,7160\n        ,7161,7162\n        Weights: 0.676510512828827,0.711042284965515,0.829476058483124,0.284224897623062,0.288607120513916,0.649124681949615,0.49312686920166\n        ,0.10552641004324,0.0175852011889219,0.433233708143234,0.0090728122740984,0.0159076135605574,0.0128143411129713,0.0188714507967234\n        ,0.0214142464101315,0.0388879030942917,0.434706896543503,0.407617390155792,0.474976152181625,0.521292865276337,0.564831256866455\n        ,0.709270298480988,0.603561341762543,0.563409507274628,0.0152496118098497\n        Transform: -0.631144692091481,0.754157801208302,0.181390099390447,0,-0.773772857679433,-0.628472225444924,-0.0793613346788445\n        ,0,0.0541476720279378,-0.190443212726648,0.980203759768997,0,13.4304721353298,46.4283095780335,2.63824609290169,1\n        \n        TransformLink: -0.631144674405108,-0.773772835996235,0.0541476705105744,0,0.75415784302433,-0.628472260292024,-0.190443223286214\n        ,0,0.181390099342531,-0.0793613346578803,0.980203759510066,0,-27.0162545645575,39.7804139060557,5.52870940901063,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Pinky1\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6949,6950,6951,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973\n        ,6974,6975,6976,6978,6979,7119,7158\n        Weights: 0.53295224905014,0.508521616458893,0.50278514623642,0.849367201328278,0.616192400455475,0.518803417682648,0.696697235107422\n        ,0.526841044425964,0.527325034141541,0.436812698841095,0.00324418325908482,0.0118504920974374,0.478200852870941,0.0372413694858551\n        ,0.0150805469602346,0.0169007889926434,0.00679425150156021,0.0106759835034609,0.0182724725455046,0.0236268937587738\n        ,0.047363169491291,0.0316543094813824,0.0231564771384001,0.459268122911453,0.478319853544235,0.0776866674423218,0.499195128679276\n        ,0.556424200534821,0.571000456809998,0.0213689096271992\n        Transform: -0.54066753815205,0.839021766035349,-0.0609999351852652,0,-0.833617247257869,-0.544097469756582,-0.0950797010971079\n        ,0,-0.112963852852558,-0.000555909862120531,0.993598931414121,0,19.0716507875639,44.3369412603016,-2.32465685100485\n        ,1\n        TransformLink: -0.540667573950472,-0.833617302452938,-0.112963860332067,0,0.839021858736889,-0.544097529872631,-0.000555909923541703\n        ,0,-0.0609999365174668,-0.095079703173591,0.99359895311372,0,-27.0300436247199,39.8010506213175,4.48883125500148,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Thumb2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6358,6359,6360,6361,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381\n        ,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6459,6468,6481,6482\n        Weights: 0.472210496664047,0.387133657932281,0.427147477865219,0.443163722753525,0.685069382190704,0.724653661251068,0.673102736473084\n        ,0.536649942398071,0.617036104202271,0.495746076107025,0.556665480136871,0.49608501791954,0.491237044334412,0.484662413597107\n        ,0.486869364976883,0.482354670763016,0.477824419736862,0.480040609836578,0.477701425552368,0.492183148860931,0.490344226360321\n        ,0.47708922624588,0.488475769758224,0.490408599376678,0.495934039354324,0.514282166957855,0.548796355724335,0.577970862388611\n        ,0.592904388904572,0.534782707691193,0.59475177526474,0.509904384613037,0.484549164772034,0.478367120027542,0.422609061002731\n        ,0.247988402843475,0.463127940893173,0.369489639997482,0.365565955638886\n        Transform: -0.135155843776122,0.775106471512664,0.617205682872185,0,-0.701497726450692,-0.514774994311568,0.492856609979176,0\n        ,0.699738398946368,-0.366355940099343,0.613310269759096,0,27.7480724005536,3.49990679714409,-36.6074357556818,1\n        TransformLink: -0.135155845224675,-0.701497733969098,0.699738406445918,0,0.775106462370004,-0.514774988239612,-0.366355935778043\n        ,0,0.617205695239839,0.492856619855105,0.613310282048693,0,23.6318316390265,39.3090914394466,4.31753641469087,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Index2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351\n        ,6352,6357,6418,6421,6422,6423,6424,6478,6479,6480\n        Weights: 0.0128679797053337,0.0311662908643484,0.00870265159755945,0.0184976477175951,0.02268429659307,0.497807532548904,0.465071231126785\n        ,0.433350116014481,0.552651107311249,0.704526364803314,0.617996513843536,0.475178509950638,0.481539070606232,0.497695684432983\n        ,0.515092432498932,0.473771840333939,0.477837771177292,0.502260267734528,0.480913937091827,0.475129336118698,0.476394355297089\n        ,0.0324806794524193,0.445389032363892,0.0190046336501837,0.0207288712263107,0.0156876035034657,0.476336061954498,0.491859197616577\n        ,0.525479137897491,0.615624308586121,0.0330850556492805,0.0259174816310406,0.472873747348785\n        Transform: 0.341297846079195,-0.787623412947761,0.512996243916672,0,-0.913316686228974,-0.40689157673435,-0.0170845552668777\n        ,0,0.222190046083139,-0.462697109835494,-0.858220815284256,0,23.6325310830361,38.0490136421109,-9.07690618566701,1\n        \n        TransformLink: 0.341297844147108,-0.913316681058689,0.222190044825321,0,-0.787623404054734,-0.406891572140151,-0.462697104611198\n        ,0,0.512996245923281,-0.0170845553337047,-0.858220818641226,0,26.5589805331897,36.9107329270075,4.56426544744836,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Middle2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6300,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324\n        ,6325,6326,6327,6328,6402,6426,6475,6476,6477\n        Weights: 0.035529550164938,0.0237998683005571,0.02204336412251,0.631926834583282,0.574653387069702,0.0330993868410587,0.490843802690506\n        ,0.558352828025818,0.574839949607849,0.651658654212952,0.537214756011963,0.484952598810196,0.487971544265747,0.497786968946457\n        ,0.484419077634811,0.48267862200737,0.523305237293243,0.48245307803154,0.488846242427826,0.868825256824493,0.770056843757629\n        ,0.526960432529449,0.512958109378815,0.527758955955505,0.0363789610564709,0.0384134836494923,0.478188276290894,0.0621519312262535\n        ,0.0342778228223324,0.0404716730117798,0.0176376178860664,0.483157634735107\n        Transform: 0.499759814432716,-0.821150509243367,0.275593784113431,0,-0.85807227136564,-0.512751602155499,0.0282438364463708,0\n        ,0.118118717124342,-0.250594541726914,-0.960859110891337,0,17.6554166237736,41.9557259278084,-5.43133409867866,1\n        TransformLink: 0.499759851243271,-0.858072334568235,0.118118725824553,0,-0.821150518533048,-0.512751607956261,-0.250594544561892\n        ,0,0.275593817426644,0.028243839860428,-0.960859227038021,0,27.1253398134896,36.8158922231038,3.20969323129932,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ring2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6274,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298\n        ,6299,6301,6302,6430,6471,6472,6473,6474\n        Weights: 0.0352816879749298,0.0397219471633434,0.0205946918576956,0.6727254986763,0.621281743049622,0.00786225218325853,0.495609492063522\n        ,0.806967973709106,0.611252129077911,0.581453204154968,0.644257962703705,0.541119575500488,0.486171543598175,0.47906419634819\n        ,0.498831510543823,0.507536768913269,0.48268136382103,0.435824930667877,0.465312838554382,0.446213185787201,0.468680292367935\n        ,0.510018289089203,0.497348576784134,0.525787651538849,0.478186815977097,0.0253856051713228,0.0158547200262547,0.0227557364851236\n        ,0.0358967743813992,0.008476871997118,0.470450043678284\n        Transform: 0.387236956053206,-0.920497931608774,0.0522593739742223,0,-0.920820074405675,-0.38328532604609,0.0719910237843163\n        ,0,-0.0462373391529367,-0.0759990671060605,-0.996035235121564,0,23.4655692344814,39.5994352902992,-2.25142353466758\n        ,1\n        TransformLink: 0.387236971119137,-0.920820110231315,-0.0462373409518574,0,-0.920497985495389,-0.383285348483891,-0.0759990715551009\n        ,0,0.0522593771475496,0.0719910281558015,-0.996035295603456,0,27.4821224471454,36.9475336992182,1.85200853561197,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Pinky2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6246,6247,6248,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270\n        ,6271,6272,6273,6275,6276,6416,6470\n        Weights: 0.00755235506221652,0.0340460389852524,0.00846235267817974,0.0141114005818963,0.0211576595902443,0.452955424785614\n        ,0.029446117579937,0.437771379947662,0.390317171812058,0.51088809967041,0.677973389625549,0.69030100107193,0.484176695346832\n        ,0.678302764892578,0.488589286804199,0.48065397143364,0.499816417694092,0.509559392929077,0.486769676208496,0.441025704145432\n        ,0.501901745796204,0.48899382352829,0.4646817445755,0.466712713241577,0.473297029733658,0.549367606639862,0.391996681690216\n        ,0.0391606763005257,0.0295384153723717,0.472831279039383\n        Transform: 0.46713900074045,-0.863910014408551,-0.188256754586628,0,-0.865407114918385,-0.490380886739592,0.102942014820845,0\n        ,-0.181250153437913,0.114830509928814,-0.97670992775668,0,19.6083352155855,41.5176353883872,1.91200119143013,1\n        TransformLink: 0.467139029382885,-0.865407167980465,-0.181250164551191,0,-0.863910037660342,-0.490380899937996,0.114830513019431\n        ,0,-0.188256764556457,0.102942020272518,-0.976709979481947,0,27.0676304296537,37.1318239873771,0.653993257848812,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Thumb2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 7061,7062,7063,7064,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084\n        ,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7153,7157,7169,7170\n        Weights: 0.462549269199371,0.343993365764618,0.403216421604156,0.432211607694626,0.690147161483765,0.665228009223938,0.63617742061615\n        ,0.552315056324005,0.596552550792694,0.496286422014236,0.546528279781342,0.494744300842285,0.488472163677216,0.483908146619797\n        ,0.487448483705521,0.480925589799881,0.477854013442993,0.481168687343597,0.477437734603882,0.493003726005554,0.491661250591278\n        ,0.477780610322952,0.488146930932999,0.492865741252899,0.501138925552368,0.51694792509079,0.568934202194214,0.616943299770355\n        ,0.594912886619568,0.543474555015564,0.624541223049164,0.503936529159546,0.487898200750351,0.481148064136505,0.41353514790535\n        ,0.246037870645523,0.470356494188309,0.358776807785034,0.347928255796433\n        Transform: 0.183942706555208,-0.848161170706559,0.496777292207143,0,-0.711563310515749,-0.463571214563958,-0.527995586438497\n        ,0,0.678117009277356,-0.256367565452164,-0.688790932416489,0,28.2763608448924,0.812496319989121,38.4516975354302,1\n        \n        TransformLink: 0.183942717143272,-0.711563351474578,0.678117048310957,0,-0.848161195233266,-0.463571227969282,-0.256367572865675\n        ,0,0.496777309132162,-0.527995604427112,-0.688790955883342,0,-23.6140336280634,40.799399288542,7.51879685717006,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Index2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054\n        ,7055,7057,7060,7121,7124,7125,7126,7127,7166,7167,7168\n        Weights: 0.0196526702493429,0.0388948395848274,0.0153781063854694,0.0233097579330206,0.0186757519841194,0.504974246025085,0.478513270616531\n        ,0.458382576704025,0.606969714164734,0.609241485595703,0.638486862182617,0.468806743621826,0.480103701353073,0.499032914638519\n        ,0.494927585124969,0.467299968004227,0.476862788200378,0.501342952251434,0.476703554391861,0.472311437129974,0.482087790966034\n        ,0.0294203441590071,0.457078576087952,0.0218525212258101,0.0127347502857447,0.0168898552656174,0.0218900591135025\n        ,0.47575369477272,0.488809376955032,0.514865398406982,0.566685616970062,0.0377235636115074,0.0243574362248182,0.468955308198929\n        \n        Transform: -0.364861736148864,0.690991750298911,0.62402424274074,0,-0.891041856361616,-0.453532359830624,-0.0187812728650537\n        ,0,0.270037487465404,-0.562884314957988,0.781179199772702,0,22.4634473604217,40.4969438613113,10.9593087714919,1\n        TransformLink: -0.364861764998285,-0.891041926815814,0.270037508817122,0,0.690991783176016,-0.453532381409508,-0.562884341739794\n        ,0,0.624024283991176,-0.0187812741065691,0.781179251411694,0,-26.6258772092054,38.5883785902394,8.16793760109114,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Middle2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 7003,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027\n        ,7028,7029,7030,7031,7105,7129,7163,7164,7165\n        Weights: 0.0448785312473774,0.01941136457026,0.0281076356768608,0.655481696128845,0.679150938987732,0.0478179343044758,0.489845812320709\n        ,0.558489799499512,0.535889983177185,0.585264027118683,0.52188766002655,0.481962472200394,0.487495481967926,0.491933614015579\n        ,0.480631649494171,0.482351124286652,0.514230608940125,0.48048734664917,0.487918704748154,0.951218128204346,0.80142742395401\n        ,0.555743455886841,0.518873155117035,0.50983989238739,0.0447485186159611,0.0386889614164829,0.476235747337341,0.0652661770582199\n        ,0.0468938462436199,0.0375622734427452,0.0262309741228819,0.480987906455994\n        Transform: -0.532122228623454,0.74608839556489,0.400247370639833,0,-0.82552298459893,-0.562187946808888,-0.0495624079488831,0\n        ,0.188036317084237,-0.356786672901474,0.915065869188404,0,15.9470803705496,44.5503810501042,6.55022768199521,1\n        TransformLink: -0.532122270746827,-0.825523049948226,0.188036331969396,0,0.746088461598279,-0.562187996565961,-0.356786704479278\n        ,0,0.400247396680201,-0.0495624111734473,0.915065928723215,0,-27.3744402201115,38.5350169717286,6.90246296248997,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Ring2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6977,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001\n        ,7002,7004,7005,7133,7159,7160,7161,7162\n        Weights: 0.0382037088274956,0.0364896692335606,0.0195562429726124,0.712645888328552,0.707021296024323,0.0143969738855958,0.49312686920166\n        ,0.88950514793396,0.551682949066162,0.570190012454987,0.586169481277466,0.540175020694733,0.484207719564438,0.478153556585312\n        ,0.499409109354019,0.496039986610413,0.479123532772064,0.434379041194916,0.46566715836525,0.442066639661789,0.463463187217712\n        ,0.490535736083984,0.496567964553833,0.541257619857788,0.474976152181625,0.0333678238093853,0.0247717965394259,0.0228563323616982\n        ,0.0331150405108929,0.0127192800864577,0.467338800430298\n        Transform: -0.446935098472743,0.875983214247907,0.181390098903514,0,-0.894507223525503,-0.439952872930471,-0.0793613109964566\n        ,0,0.0102839187608737,-0.197724114126782,0.980203752580189,0,22.0845507828728,42.5736111092596,2.63824563864957,1\n        \n        TransformLink: -0.446935136832639,-0.894507300299969,0.0102839196435299,0,0.875983260367471,-0.439952896093511,-0.197724124536742\n        ,0,0.181390102125802,-0.0793613124062637,0.980203769992933,0,-27.901960584903,38.6945500401361,5.60469591815982,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Pinky2\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6949,6950,6951,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973\n        ,6974,6975,6976,6978,6979,7119,7158\n        Weights: 0.00631227903068066,0.0288749616593122,0.0153481028974056,0.0111556136980653,0.0370478443801403,0.474144101142883\n        ,0.0249618031084538,0.470720201730728,0.42764550447464,0.556730091571808,0.641176640987396,0.702353775501251,0.478462547063828\n        ,0.590432405471802,0.486605674028397,0.479619711637497,0.496470123529434,0.494648188352585,0.482276678085327,0.43053936958313\n        ,0.488811641931534,0.479370653629303,0.454167634248734,0.459241479635239,0.477396637201309,0.509645402431488,0.413587629795074\n        ,0.0568801686167717,0.0476182997226715,0.466875940561295\n        Transform: -0.54066747996728,0.839021802135076,-0.0609999543681701,0,-0.833617284990114,-0.544097414120462,-0.0950796886571807\n        ,0,-0.112963852891107,-0.000555879311200584,0.99359893142683,0,17.9398612556826,44.3369390457035,-2.32465801551563\n        ,1\n        TransformLink: -0.540667515765707,-0.8336173401852,-0.112963860370618,0,0.839021894836614,-0.544097474236501,-0.000555879372618377\n        ,0,-0.0609999557003723,-0.0950796907336637,0.993598953126431,0,-27.6419664270552,38.8575682082219,4.36097974240904\n        ,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Thumb3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6079,6091,6092,6094,6096,6097,6100,6101,6103,6104,6107,6108,6109,6116,6117,6118,6122,6123,6124,6126,6127,6184,6224\n        ,6350,6354,6355,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376\n        ,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399\n        ,6400,6404,6405,6446,6459,6464,6465,6466,6468,6481,6482,6483,6566,6567,6570,6572,6573,6580,6582,6587,6588,6589,6605\n        ,6606,6607,6608,6609,6630,6631,6633,6635,6636,6637,6640,6641,6642,6643,6649,6663,6669,6682,6683,6689,6855,6858,6859\n        ,6862,6863,6864,6866,6867,6868,6869,6870,6903,6904,6911,9314,9316,9329,9352,9353,9428,9429,9430,9431,9432,9433,9434\n        ,9435,9448,9449,9450,9455,9457,9459,9461,9462,9463,9475,9476,9477,9478,9479,9480,9481,9486,9487,9488,9489,9490,9491\n        ,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9506,9507,9508,9509,9510,9513,9514,9515,9516,9517,9518,9519\n        ,9520,9522,9523,9531,9538,9540,9542,9544,9546,9547,9548,9549,9550,9551,9556,9557,9558,9559,9560,9561,9562,9567,9568\n        ,9569,9570,9571,9572,9573,9574,9577,9578,9579,9580,9581,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597\n        ,9598,9599,9600,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621\n        ,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9635,9636,9637,9640,9641,9642,9649,9650,9651,9652,9662,9663,9664\n        ,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9680,9681,9682,9683,9684,9688,9689,9690,9691,9692\n        ,9693,9694,9695,9697,9698,9701,9702,9703,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9724\n        ,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747\n        ,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770\n        ,9771,9772,9773,9774,9775,9776,9777,9778,9779,9799,9800,9801,9802,9803,9804,9805,9810,9811,9813,9849,9851,9852,9853\n        ,9854,9855,9856,9857,9858\n        Weights: 0.00149820931255817,0.00138663349207491,0.00258206482976675,0.00212346576154232,0.00344013841822743,0.00489160418510437\n        ,0.00107892986852676,0.00209578522481024,0.00151363876648247,0.00168884394224733,0.0021959962323308,0.00271111493930221\n        ,0.00310902716591954,0.00213803281076252,0.00564004061743617,0.00696052052080631,0.00111033720895648,0.00341050652787089\n        ,0.0053539639338851,0.00688229827210307,0.00649200333282351,0.0014114435762167,0.00588079309090972,0.00492632342502475\n        ,0.00596584053710103,0.0446317344903946,0.00557761080563068,0.0259243100881577,0.05253741517663,0.0559712648391724\n        ,0.0270659644156694,0.0530976578593254,0.0325066484510899,0.035634271800518,0.323588341474533,0.455188989639282,0.363215416669846\n        ,0.495746076107025,0.439982146024704,0.49608501791954,0.491237044334412,0.484662413597107,0.486869364976883,0.482354670763016\n        ,0.477824419736862,0.480040609836578,0.477701425552368,0.492183148860931,0.490344226360321,0.47708922624588,0.488475769758224\n        ,0.490052223205566,0.491328775882721,0.458046555519104,0.415151000022888,0.393014430999756,0.351960003376007,0.0252938233315945\n        ,0.0432725250720978,0.0325434282422066,0.00927298329770565,0.0129866236820817,0.0139118302613497,0.0106906080618501\n        ,0.00391026306897402,0.00286733661778271,0.00310411211103201,0.00216891011223197,0.00204042112454772,0.00304773822426796\n        ,0.00282205501571298,0.00232247146777809,0.00350804161280394,0.0190506651997566,0.00137466262094676,0.00171561446040869\n        ,0.00999070610851049,0.0263785943388939,0.0174223799258471,0.0177107490599155,0.0146211693063378,0.00217383401468396\n        ,0.00175195629708469,0.00127440562937409,0.00187887821812183,0.00171487790066749,0.00149286584928632,0.00251029059290886\n        ,0.00156333390623331,0.00117121625225991,0.00126078014727682,0.00140605447813869,0.00230707740411162,0.00234857969917357\n        ,0.00221398449502885,0.00196380750276148,0.00137024174910039,0.00224497076123953,0.00133721902966499,0.0020017025526613\n        ,0.00232847104780376,0.00133163447026163,0.00192440755199641,0.00171626394148916,0.00157908024266362,0.0012935638660565\n        ,0.00231205811724067,0.00100099062547088,0.00109254475682974,0.0019734192173928,0.00168480223510414,0.00182580389082432\n        ,0.00142278173007071,0.0010410676477477,0.00153141666669399,0.00154780084267259,0.00201118993572891,0.00259579555131495\n        ,0.00223182025365531,0.00237108976580203,0.00265182740986347,0.00186769140418619,0.00367331691086292,0.00130162853747606\n        ,0.00129232939798385,0.0017205880722031,0.00136861728969961,0.00145484495442361,0.00100917939562351,0.0021941545419395\n        ,0.00188804056961089,0.00195067189633846,0.00165543414186686,0.00101901881862432,0.00102479092311114,0.00212220335379243\n        ,0.00114350859075785,0.00128554948605597,0.00123686867300421,0.00305265444330871,0.00291923386976123,0.00195410684682429\n        ,0.00105387123767287,0.00137196411378682,0.00153346301522106,0.00194630993064493,0.00169592432212085,0.00111660454422235\n        ,0.00186238554306328,0.00155351380817592,0.00250041089020669,0.00318694044835866,0.0032063857652247,0.00272415089420974\n        ,0.00245766364969313,0.00402964977547526,0.00341994944028556,0.0052446280606091,0.00654846709221601,0.00386982690542936\n        ,0.00455573340877891,0.00550030590966344,0.00639821263030171,0.00862144120037556,0.00814477447420359,0.0100691318511963\n        ,0.0101043749600649,0.00709112267941237,0.00818463880568743,0.00296359532512724,0.00321070617064834,0.00207592872902751\n        ,0.00333278137259185,0.00632657762616873,0.00672197481617332,0.00220432667993009,0.00154417741578072,0.00266806920990348\n        ,0.00424164813011885,0.00453092344105244,0.0031485699582845,0.00186956557445228,0.00134828640148044,0.0010057658655569\n        ,0.00159944279585034,0.00834708474576473,0.0086600948125124,0.00148575787898153,0.00140404503326863,0.00301717966794968\n        ,0.00333177810534835,0.0031098450999707,0.00239596702158451,0.00381142972037196,0.00410086335614324,0.00282490067183971\n        ,0.00170151132624596,0.00125974882394075,0.00221156352199614,0.00152939255349338,0.0064187771640718,0.0073395143263042\n        ,0.00633658794686198,0.00388056435622275,0.00348237995058298,0.00124342960771173,0.00193079898599535,0.00246216403320432\n        ,0.00223845848813653,0.00386203173547983,0.00439270539209247,0.005020497366786,0.00632684724405408,0.00307083316147327\n        ,0.00286118732765317,0.00213557784445584,0.00129702757112682,0.00121187209151685,0.00251098163425922,0.00800847075879574\n        ,0.00886239018291235,0.00887640286237001,0.00767807802185416,0.00670932326465845,0.00401021400466561,0.00502444198355079\n        ,0.00238260510377586,0.00547388335689902,0.00776300393044949,0.00480005796998739,0.0028238866943866,0.00190474814735353\n        ,0.00193470239173621,0.00288113416172564,0.00389803969301283,0.00367174437269568,0.00390818109735847,0.00355087663047016\n        ,0.00268725026398897,0.00454041082412004,0.0035445315297693,0.00171094539109617,0.00341316545382142,0.00697055878117681\n        ,0.00964019820094109,0.00920553877949715,0.00569045403972268,0.00306147919036448,0.00185962207615376,0.00222978158853948\n        ,0.00188676745165139,0.00173016346525401,0.00136094342451543,0.00119532260578126,0.00134551979135722,0.00201214803382754\n        ,0.00433872221037745,0.00494116824120283,0.0048528490588069,0.00373621983453631,0.00260420818813145,0.00111460161861032\n        ,0.00214701052755117,0.00107349210884422,0.00131016981322318,0.00134573271498084,0.00137586984783411,0.00183277728501707\n        ,0.00205387198366225,0.00181044160854071,0.00195832783356309,0.00171237147878855,0.00127034331671894,0.00683472445234656\n        ,0.00616391934454441,0.00666100112721324,0.00529539445415139,0.00470123440027237,0.00376344588585198,0.00785322301089764\n        ,0.00749101815745234,0.00359520222991705,0.00375024485401809,0.00510285887867212,0.0165347177535295,0.0120284659788013\n        ,0.0136821400374174,0.0208208095282316,0.0121704069897532,0.00668172631412745,0.0071162823587656,0.0137389861047268\n        ,0.0208119451999664,0.0127062760293484,0.00445901975035667,0.0161651168018579,0.0138529241085052,0.0140357566997409\n        ,0.0165641214698553,0.0206819456070662,0.01622024923563,0.0097760334610939,0.00927293580025434,0.00617081159725785\n        ,0.00917889270931482,0.0165512580424547,0.0100768441334367,0.0127015858888626,0.0150537947192788,0.00986745487898588\n        ,0.0064253699965775,0.00897261500358582,0.00977715570479631,0.0120841050520539,0.0137787126004696,0.0152517901733518\n        ,0.0186050273478031,0.0209942348301411,0.0180246215313673,0.0144900577142835,0.0112779578194022,0.010276542045176\n        ,0.00792760029435158,0.0171343702822924,0.0179134495556355,0.0175734963268042,0.0137078361585736,0.0129081830382347\n        ,0.0119716376066208,0.0115421507507563,0.00434318883344531,0.00599595671519637,0.00866668857634068,0.00924254860728979\n        ,0.0130253322422504,0.0132820680737495,0.00989582482725382,0.00758609594777226,0.00430233962833881,0.00572281144559383\n        ,0.00791021436452866,0.00848311930894852,0.011293787509203,0.0113278347998858,0.00868441443890333,0.00685539748519659\n        ,0.00510429078713059,0.00733340112492442,0.0107003068551421,0.0117350667715073,0.0164118018001318,0.0164599809795618\n        ,0.012408996000886,0.00942008569836617,0.00473457621410489,0.00436365557834506,0.00367337069474161,0.00328112719580531\n        ,0.00449102418497205,0.00377309625037014,0.00327134947292507,0.00724644213914871,0.0145453428849578,0.0169037282466888\n        ,0.019414534792304,0.0191765520721674,0.0144556574523449,0.0133972251787782,0.0110455770045519,0.00914285890758038\n        ,0.00429244339466095,0.0043087056837976,0.0039505329914391,0.00353592447936535,0.00316647044382989,0.00297523243352771\n        ,0.00270455866120756,0.00102158123627305,0.00184092985000461,0.00203118450008333,0.00171120732557029,0.00121729238890111\n        ,0.001143594738096,0.00112271460238844,0.00306950928643346,0.00121603487059474,0.00207205256447196,0.00437572225928307\n        ,0.00116132642142475,0.00153699307702482,0.0022282893769443,0.00355688342824578,0.00518744718283415,0.00414137402549386\n        ,0.00526373228058219,0.00548378052189946\n        Transform: -0.150316349336557,0.772309497534129,0.617205824895878,0,-0.691277111630371,-0.528420530153593,0.492856640794005,0\n        ,0.706782058456871,-0.352575833811562,0.613310194135305,0,26.2919663830623,4.01581780486913,-36.6074352156097,1\n        TransformLink: -0.15031636014454,-0.691277161334284,0.706782109275615,0,0.772309547535657,-0.528420564365051,-0.352575856638331,0\n        ,0.617205767563365,0.492856595012341,0.613310137164658,0,23.4449784066569,38.3392924705161,5.2849000587628,1\n    }\n    Deformer: \"SubDeformer::Cluster_L_Index3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6303,6312,6314,6317,6318,6319,6320,6323,6324,6325,6326,6327,6328,6329,6330,6332,6333,6334,6335,6336,6337,6338,6339\n        ,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6351,6352,6418,6421,6422,6423,6424,6426,6427,6455,6475,6477,6478\n        ,6479,6480,9690,9691,9695,9697,9701,9709,9735,9736,9737,9738,9739,9743,9744,9745,9746,9747\n        Weights: 0.00129172543529421,0.00132386665791273,0.0102978684008121,0.023387661203742,0.0202862359583378,0.0210154503583908\n        ,0.0131963603198528,0.0310754030942917,0.0289298985153437,0.0213378369808197,0.00458353338763118,0.00461415899917483\n        ,0.0256056245416403,0.00156837981194258,0.00284981518052518,0.00149840523954481,0.0021868369076401,0.00197000638581812\n        ,0.0135596552863717,0.00847333390265703,0.0207607746124268,0.29146534204483,0.369206309318542,0.475178509950638,0.481539070606232\n        ,0.497695684432983,0.45072677731514,0.473771840333939,0.477837771177292,0.45277014374733,0.457344979047775,0.475129336118698\n        ,0.0342537313699722,0.0230790339410305,0.00212693749926984,0.00162085669580847,0.0367642305791378,0.0134540442377329\n        ,0.364172965288162,0.308993935585022,0.00256865425035357,0.00292015401646495,0.00128136458806694,0.00546527421101928\n        ,0.0140916919335723,0.00372047512792051,0.00346140190958977,0.472873747348785,0.00581017322838306,0.00588010810315609\n        ,0.00412550196051598,0.00392747716978192,0.00405125552788377,0.00431024795398116,0.00382395950146019,0.00403719209134579\n        ,0.00546633033081889,0.00556815648451447,0.00421888194978237,0.0034736858215183,0.0036936835385859,0.00476250844076276\n        ,0.00477577652782202,0.00371923088096082\n        Transform: 0.341297846079195,-0.787623412947761,0.512996243916672,0,-0.913316686228974,-0.40689157673435,-0.0170845552668776\n        ,0,0.222190046083139,-0.462697109835494,-0.858220815284256,0,22.5696856853696,38.049012840111,-9.07690578638614,1\n        \n        TransformLink: 0.341297844147108,-0.913316681058689,0.222190044825321,0,-0.787623404054734,-0.406891572140152,-0.462697104611198\n        ,0,0.512996245923281,-0.0170845553337046,-0.858220818641226,0,26.9217265395714,35.9400181764268,4.80041908558635,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Middle3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6288,6289,6290,6292,6293,6294,6295,6296,6297,6298,6299,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316\n        ,6317,6318,6319,6320,6321,6322,6323,6324,6325,6328,6340,6341,6343,6344,6345,6346,6347,6348,6424,6474,6477,6480\n        Weights: 0.014571632258594,0.0314285829663277,0.00121804932132363,0.0216398369520903,0.113343708217144,0.0645012483000755,0.0907544791698456\n        ,0.0472875647246838,0.0558902733027935,0.017894497141242,0.0183007605373859,0.00250962004065514,0.00116259243804961\n        ,0.00177814660128206,0.0104236043989658,0.0174920316785574,0.404900193214417,0.344944804906845,0.459532350301743,0.484952598810196\n        ,0.487971544265747,0.491063833236694,0.484419077634811,0.48267862200737,0.447204828262329,0.48245307803154,0.487936288118362\n        ,0.00191004655789584,0.227206647396088,0.0147803528234363,0.0280758254230022,0.431229382753372,0.0180178489536047\n        ,0.0322740189731121,0.0178740713745356,0.00366789777763188,0.0290819946676493,0.0161577016115189,0.0019784311298281\n        ,0.00371509045362473,0.0188771914690733,0.00367660750634968,0.0454932413995266,0.483157634735107,0.0285708270967007\n        \n        Transform: 0.444149185987956,-0.852513629457775,0.275593811819462,0,-0.890216396056314,-0.454661404019702,0.028243899034468,0\n        ,0.101223567194035,-0.25788265192211,-0.960859095070715,0,18.8757617638073,40.7927182930377,-5.43133705084128,1\n        TransformLink: 0.444149211847771,-0.890216447887616,0.101223573087601,0,-0.852513678154366,-0.454661429990501,-0.257882666652674\n        ,0,0.275593848328492,0.0282439027760518,-0.960859222359615,0,27.8895386829017,35.5037913764696,3.39031262789266,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Ring3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6262,6263,6264,6266,6267,6268,6269,6270,6273,6279,6280,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293\n        ,6294,6295,6296,6297,6298,6299,6300,6301,6305,6310,6311,6313,6314,6315,6316,6317,6319,6414,6470,6474,6477\n        Weights: 0.0092698922380805,0.0212964508682489,0.00166295794770122,0.0119648510590196,0.0952514484524727,0.0141067132353783\n        ,0.00670324685052037,0.0510993860661983,0.00714946305379272,0.00109227269422263,0.00494632869958878,0.00435620592907071\n        ,0.00662066554650664,0.387978374958038,0.416656672954559,0.337617635726929,0.0103567326441407,0.486171543598175,0.47906419634819\n        ,0.498831510543823,0.482970893383026,0.48268136382103,0.435824930667877,0.455651253461838,0.446213185787201,0.464510530233383\n        ,0.396390706300735,0.0377589128911495,0.031072786077857,0.00150687724817544,0.0224732290953398,0.00124005973339081\n        ,0.00769013585522771,0.0019029772374779,0.0234128329902887,0.0137590598315001,0.0054404535330832,0.0225245822221041\n        ,0.0112551087513566,0.0140783805400133,0.00170884584076703,0.0353902839124203,0.470450043678284,0.0195930507034063\n        \n        Transform: 0.387236956053206,-0.920497931608773,0.0522593739742223,0,-0.920820074405675,-0.38328532604609,0.0719910237843162\n        ,0,-0.0462373391529367,-0.0759990671060605,-0.996035235121564,0,22.0773077684876,39.5994348948192,-2.25142358930824\n        ,1\n        TransformLink: 0.387236971119137,-0.920820110231315,-0.0462373409518574,0,-0.920497985495389,-0.383285348483891,-0.0759990715551009\n        ,0,0.0522593771475496,0.0719910281558015,-0.996035295603456,0,28.0197082511753,35.6691944754238,1.78781893239835,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_L_Pinky3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6237,6243,6244,6245,6247,6248,6249,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266\n        ,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6283,6286,6287,6288,6289,6291,6292,6302,6402\n        ,6411,6412,6414,6415,6416,6417,6428,6430,6470,6471,6472,6473,6476\n        Weights: 0.0028082043863833,0.00591129856184125,0.00213855970650911,0.00684588542208076,0.00461385771632195,0.00100696296431124\n        ,0.00220880098640919,0.00101241818629205,0.00189215911086649,0.00694409897550941,0.00265500461682677,0.00246238824911416\n        ,0.012714060023427,0.00751850241795182,0.315340012311935,0.282398045063019,0.0182183086872101,0.290860831737518,0.488589286804199\n        ,0.48065397143364,0.484326124191284,0.483070969581604,0.486769676208496,0.441025704145432,0.428589582443237,0.476955205202103\n        ,0.4646817445755,0.0394535250961781,0.0268322117626667,0.368200391530991,0.00765684433281422,0.026226406916976,0.00414335122331977\n        ,0.00356931705027819,0.00267733377404511,0.00140286923851818,0.00212792283855379,0.00176225416362286,0.00486125983297825\n        ,0.00576191581785679,0.0130852656438947,0.0104430476203561,0.00325614050962031,0.0129974083974957,0.00201679929159582\n        ,0.00505299167707562,0.00323858973570168,0.00118227885104716,0.00599130569025874,0.00718945031985641,0.00294233672320843\n        ,0.00191051140427589,0.0024373906198889,0.00133377616293728,0.472831279039383,0.00406493013724685,0.00552025018259883\n        ,0.00154034374281764,0.00117001007311046\n        Transform: 0.407760985670509,-0.893470954340694,-0.188256780336324,0,-0.896533461841144,-0.430848801096772,0.102941957451532\n        ,0,-0.173085860177758,0.126802791082548,-0.976709938167127,0,21.509000619089,40.1573955629144,1.91200401428515,1\n        TransformLink: 0.407760991938071,-0.896533475621468,-0.173085862838205,0,-0.893470969097868,-0.430848808212964,0.126802793176909\n        ,0,-0.188256786876179,0.102941961027635,-0.976709972097069,0,27.4688834342309,36.3884796586712,0.498307394296883,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Thumb3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804\n        ,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827\n        ,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850\n        ,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873\n        ,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896\n        ,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919\n        ,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942\n        ,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,6722,6723\n        ,6728,6729,6741,6746,6747,6763,6764,6766,6767,6768,6769,6770,6771,6791,6797,6798,6801,6802,6809,6840,6846,6849,6850\n        ,6852,6853,6873,6879,6880,6881,6882,6907,6908,7053,7057,7058,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070\n        ,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093\n        ,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7107,7108,7153,7156,7157,7169,7170,7171,7175,7176,7177,7178,7179\n        ,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202\n        ,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225\n        ,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248\n        ,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271\n        ,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294\n        ,7295,7296,7297,7298,7299,7300,7301,7302,7303,7316,7322,7323,7336,7338,7339,7352,7354,7355,7356,7357,7362,7363,7364\n        ,7365,7366,7367,7368,7369,7370,7371,7372,7376,7377,7378,7379,7380,7383,7384,7385,7386,7387,7388,7390,7399,7409,7411\n        ,7413,7414,7415,7416,7417,7418,7424,7425,7427,7428,7429,7430,7431,7432,7437,7438,7439,7440,7441,7442,7443,7444,7445\n        ,7446,7449,7450,7451,7452,7453,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7474,7475\n        ,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7497,7498,7499,7500,7501\n        ,7502,7504,7509,7510,7513,7514,7515,7522,7523,7524,7525,7535,7536,7537,7540,7541,7542,7543,7544,7545,7546,7549,7550\n        ,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573\n        ,7574,7575,7576,7577,7578,7579,7580,7581,7582,7806,7808,7913,7914,7917,7933,7934,7935,7957,7958,7959,7967,7970\n        Weights: 0.0206349026411772,0.0207134280353785,0.0197373144328594,0.0196153838187456,0.0208342466503382,0.0199247840791941\n        ,0.020967910066247,0.0201352816075087,0.0210805311799049,0.0203174632042646,0.0211408846080303,0.0204198118299246\n        ,0.0211298149079084,0.0204070769250393,0.0210484024137259,0.0202776417136192,0.0209195241332054,0.0200689751654863\n        ,0.0207806546241045,0.0198448244482279,0.0206709150224924,0.0196701399981976,0.0206186510622501,0.0195889733731747\n        ,0.00788491498678923,0.00782912876456976,0.00798560492694378,0.00810904148966074,0.00822552479803562,0.00830235239118338\n        ,0.00831402372568846,0.00825399998575449,0.00813997536897659,0.00800746586173773,0.00789522379636765,0.0078317066654563\n        ,0.00756945041939616,0.00753615191206336,0.00763061735779047,0.00770501187071204,0.00777393067255616,0.00781835243105888\n        ,0.00782459136098623,0.00778975104913116,0.00772374542430043,0.0076460363343358,0.00757865281775594,0.00753908278420568\n        ,0.0208766013383865,0.00767658930271864,0.0181122086942196,0.0179667640477419,0.0192471258342266,0.0195576250553131\n        ,0.017364664003253,0.0171640403568745,0.0164985246956348,0.0164657682180405,0.0169501658529043,0.015617867000401,0.015304802916944\n        ,0.0159808788448572,0.0174158401787281,0.0186776164919138,0.0176764409989119,0.0164042636752129,0.0190876293927431\n        ,0.0152460727840662,0.0163333211094141,0.0142878238111734,0.0102278674021363,0.00993511267006397,0.0138036357238889\n        ,0.0146821737289429,0.0105258813127875,0.0151098612695932,0.010812477208674,0.0161618869751692,0.0113155674189329\n        ,0.010036863386631,0.013737072236836,0.00630041444674134,0.00632011285051703,0.00639667548239231,0.00648933136835694\n        ,0.00651344237849116,0.0065743844024837,0.0242732800543308,0.0226891804486513,0.0237810015678406,0.0253286696970463\n        ,0.0245126951485872,0.0229471866041422,0.0232219379395247,0.0217602085322142,0.0205131359398365,0.019203070551157\n        ,0.0137072140350938,0.0126667339354753,0.00796764250844717,0.00723331281915307,0.0209724307060242,0.0204414576292038\n        ,0.0208601392805576,0.0206289663910866,0.0196539610624313,0.017655873671174,0.0119224833324552,0.00687668472528458\n        ,0.00526865758001804,0.0059863431379199,0.00525120692327619,0.00509030371904373,0.00596990715712309,0.00598286464810371\n        ,0.00556904869154096,0.00575726106762886,0.00705313589423895,0.00537844654172659,0.00546752708032727,0.00539919128641486\n        ,0.00507829757407308,0.00518155843019485,0.00542729906737804,0.0054210158996284,0.00563446758314967,0.00527805602177978\n        ,0.0065749972127378,0.00604006601497531,0.0215511415153742,0.0223440397530794,0.0224162228405476,0.0238475557416677\n        ,0.0218440778553486,0.0207823850214481,0.0184687711298466,0.0122669553384185,0.00555890798568726,0.0136925457045436\n        ,0.0145726623013616,0.0157181173563004,0.0136122927069664,0.0103479130193591,0.0108167203143239,0.0125496638938785\n        ,0.0101373661309481,0.00664365477859974,0.00665161525830626,0.00682164169847965,0.017512883991003,0.0179883632808924\n        ,0.012053057551384,0.00690233474597335,0.00658051390200853,0.00692128064110875,0.00667546642944217,0.021394906565547\n        ,0.0230478588491678,0.0239932388067245,0.0223625525832176,0.0229776855558157,0.0193508043885231,0.0216651074588299\n        ,0.0237432606518269,0.0216814745217562,0.0233111679553986,0.020858034491539,0.0221959985792637,0.018921347334981,0.01983792334795\n        ,0.0134088853374124,0.0136114526540041,0.00840287376195192,0.00817271880805492,0.0186147596687078,0.0228341855108738\n        ,0.019296795129776,0.0251542255282402,0.0243113692849875,0.00689046317711473,0.00623401440680027,0.0241503212600946\n        ,0.00160878302995116,0.00129173509776592,0.00135680811945349,0.0012447964400053,0.0023350368719548,0.00148189126048237\n        ,0.0011633113026619,0.00110392994247377,0.00112566619645804,0.00116727291606367,0.00214046915061772,0.0021126929204911\n        ,0.00183219206519425,0.00118055264465511,0.00219332682900131,0.00100228341761976,0.00213657296262681,0.00122010568156838\n        ,0.00124321086332202,0.00112911232281476,0.00185839796904475,0.00145611027255654,0.00128630979452282,0.00131676276214421\n        ,0.00158617389388382,0.00108790420927107,0.00129958556499332,0.00112535338848829,0.00239369086921215,0.00157444574870169\n        ,0.00148654624354094,0.00162770645692945,0.00123939570039511,0.00106196757405996,0.00331193278543651,0.00375480088405311\n        ,0.030896969139576,0.00342011218890548,0.0314387418329716,0.0545489490032196,0.0613855123519897,0.0314983911812305\n        ,0.0380797535181046,0.0281153731048107,0.0474898740649223,0.357097029685974,0.441101938486099,0.374418169260025,0.496286422014236\n        ,0.446939200162888,0.494744300842285,0.488472163677216,0.483908146619797,0.487448483705521,0.480925589799881,0.477854013442993\n        ,0.481168687343597,0.477437734603882,0.493003726005554,0.491661250591278,0.477780610322952,0.488146930932999,0.491288512945175\n        ,0.490701496601105,0.453511834144592,0.400647670030594,0.362474709749222,0.346060484647751,0.0186582077294588,0.0302668269723654\n        ,0.0325701758265495,0.006045778747648,0.00994227733463049,0.0142911607399583,0.0085002314299345,0.00303881824947894\n        ,0.00225531472824514,0.00293149356730282,0.00189879583194852,0.00170789589174092,0.00283215427771211,0.00307905371300876\n        ,0.00244881375692785,0.0215538665652275,0.00817420054227114,0.0198179297149181,0.0167206320911646,0.0204745102673769\n        ,0.0128827076405287,0.0194632522761822,0.0188274458050728,0.0182689521461725,0.0176447071135044,0.0172243285924196\n        ,0.0133353779092431,0.012190000154078,0.0174007099121809,0.0154236424714327,0.0162051524966955,0.0151703329756856\n        ,0.0145016135647893,0.0117002241313457,0.00993908103555441,0.00885243806988001,0.00738500291481614,0.00533117121085525\n        ,0.00415570707991719,0.018776623532176,0.0151461735367775,0.00989001058042049,0.00656149117276073,0.00867951009422541\n        ,0.00545969419181347,0.00419409060850739,0.0036546946503222,0.00388043047860265,0.0102285426110029,0.0109922336414456\n        ,0.011212820187211,0.011874170973897,0.0128773888573051,0.014671872369945,0.0134199876338243,0.0147367622703314,0.0129374144598842\n        ,0.00857102498412132,0.00913834292441607,0.00777323078364134,0.00717859389260411,0.00542860059067607,0.00449881935492158\n        ,0.0031835213303566,0.00312779331579804,0.0037035767454654,0.00317463185638189,0.00338264461606741,0.00893745757639408\n        ,0.0100510297343135,0.0108140856027603,0.0117486612871289,0.0122409416362643,0.00451468676328659,0.00393110932782292\n        ,0.00373097020201385,0.00271735526621342,0.00212495261803269,0.00191046798136085,0.00185692752711475,0.00193583639338613\n        ,0.0038805129006505,0.00357974087819457,0.00360461231321096,0.0035831171553582,0.0221672374755144,0.0216475501656532\n        ,0.0232979413121939,0.0227267239242792,0.0212558414787054,0.0213878713548183,0.0223234593868256,0.0210523474961519\n        ,0.0189590454101563,0.0212541595101357,0.0170140545815229,0.0229142792522907,0.0224664770066738,0.0243328101933002\n        ,0.0238737054169178,0.0234900992363691,0.0218856371939182,0.0175896864384413,0.0038775650318712,0.0221874229609966\n        ,0.0193830914795399,0.0190263278782368,0.0187140088528395,0.0205218344926834,0.0220660660415888,0.0231052581220865\n        ,0.0211554951965809,0.0121488925069571,0.0109862107783556,0.0107390657067299,0.0111830253154039,0.00352118560113013\n        ,0.00373788271099329,0.0161291547119617,0.0148201314732432,0.0186025146394968,0.0189929381012917,0.0184073783457279\n        ,0.0186326559633017,0.0197839718312025,0.0201774407178164,0.0187430661171675,0.018826674669981,0.0170398093760014\n        ,0.00637531839311123,0.0164432302117348,0.00738882645964623,0.0185393039137125,0.0195395369082689,0.0177061557769775\n        ,0.01780916005373,0.0182453524321318,0.0152524942532182,0.0192229803651571,0.00500145647674799,0.00770826498046517\n        ,0.0079919770359993,0.00751691404730082,0.00616343040019274,0.00610489910468459,0.00630897469818592,0.00628916407003999\n        ,0.00598625093698502,0.0048967176117003,0.00479170912876725,0.00100405083503574,0.00160079426132143,0.00141929858364165\n        ,0.00125143490731716,0.00160475785378367,0.00141920440364629,0.00139734172262251,0.00224228156730533,0.00232772389426827\n        ,0.00225778995081782,0.00207510311156511,0.00256772199645638,0.0027859196998179,0.00332566141150892,0.0031807953491807\n        ,0.00739510217681527,0.0069126570597291,0.00621898286044598,0.00728207407519221,0.00265317363664508,0.00284682074561715\n        ,0.00182450644206256,0.00242256047204137,0.0055518732406199,0.0061364620923996,0.00198462349362671,0.00135667133145034\n        ,0.00205559935420752,0.00380312139168382,0.00420815823599696,0.00297090061940253,0.0017306130612269,0.00121383473742753\n        ,0.0013610718306154,0.00124339619651437,0.0023764178622514,0.00226104166358709,0.00185194308869541,0.00342356716282666\n        ,0.00380428275093436,0.00267043663188815,0.00157270825002342,0.00113264902029186,0.0018668407574296,0.00228324695490301\n        ,0.00129903561901301,0.00562178948894143,0.00653486745432019,0.00579681154340506,0.00362190813757479,0.0032473006285727\n        ,0.0010425541549921,0.00166034791618586,0.00213556736707687,0.00193362182471901,0.0033060503192246,0.00376513623632491\n        ,0.00419513089582324,0.00159871904179454,0.00179069326259196,0.00211882498115301,0.00271622347645462,0.00255756848491728\n        ,0.00192118179984391,0.0011733747087419,0.00109545432496816,0.00220512063242495,0.00709376437589526,0.00795820541679859\n        ,0.00799622107297182,0.00710853468626738,0.00609957706183195,0.00381770473904908,0.00473736319690943,0.00222578062675893\n        ,0.00509891239926219,0.00686382222920656,0.00414189184084535,0.00239852466620505,0.00162839086260647,0.00162805255968124\n        ,0.00251073832623661,0.00347989099100232,0.00331477355211973,0.00349547853693366,0.00321043259464204,0.00244455621577799\n        ,0.00413611950352788,0.00327009102329612,0.00156419666018337,0.00257822382263839,0.00607397267594934,0.00823282450437546\n        ,0.00776788638904691,0.00473087746649981,0.00330061535350978,0.0025250562466681,0.00152857240755111,0.00183194293640554\n        ,0.00153524335473776,0.00137504853773862,0.00150840170681477,0.00229560048319399,0.00346118840388954,0.00357474712654948\n        ,0.00299402745440602,0.00216723675839603,0.00185670738574117,0.00111249752808362,0.00113845674786717,0.00119416764937341\n        ,0.00159454462118447,0.00178431125823408,0.00155328854452819,0.00169874343555421,0.00148680072743446,0.00110015727113932\n        ,0.00114206888247281,0.0010633486090228,0.00107124063652009,0.00571294734254479,0.00447713444009423,0.00330340163782239\n        ,0.00269269663840532,0.00229857652448118,0.00221802247688174,0.0020226901397109,0.00163530313875526,0.00180016760714352\n        ,0.00272176787257195,0.00381707167252898,0.00220523751340806,0.00238436763174832,0.00327288988046348,0.00446160836145282\n        ,0.00157232687342912,0.00185892870649695,0.00203555263578892,0.0046623470261693,0.00693457946181297,0.00711830705404282\n        ,0.00647621788084507,0.00254868599586189,0.00479469215497375,0.00661462964490056,0.00463264249265194,0.00530045060440898\n        ,0.00568296201527119,0.00735452771186829,0.00869803410023451,0.00973954610526562,0.0102844815701246,0.0102041307836771\n        ,0.00881630834192038,0.00401451764628291,0.00498052220791578,0.0047067110426724,0.00366361252963543,0.00462863780558109\n        ,0.00309047941118479,0.00190148048568517,0.00101162947248667,0.00110797781962901,0.00139670318458229,0.00118378805927932\n        ,0.00152170250657946,0.00218712538480759,0.00209142896346748,0.00139660085551441,0.00129944365471601,0.00151631084736437\n        ,0.0012562193442136,0.00226996839046478,0.00154895684681833\n        Transform: 0.200525319605825,-0.844394449148324,0.496777179549792,0,-0.702343995267135,-0.477423749021522,-0.527995666348737\n        ,0,0.683009852073652,-0.243031979744324,-0.68879092601797,0,26.872808589569,1.33926660969347,38.4516999417911,1\n        TransformLink: 0.200525329728245,-0.702344030721116,0.683009886551655,0,-0.844394478650866,-0.477423765702369,-0.243031988235689\n        ,0,0.496777214538215,-0.527995703535904,-0.688790974530079,0,-23.359737863823,39.8156867725917,8.45627455609007,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Index3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 7017,7020,7021,7022,7023,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043\n        ,7044,7045,7046,7047,7048,7049,7050,7051,7052,7054,7055,7121,7124,7125,7126,7127,7128,7129,7130,7149,7163,7165,7166\n        ,7167,7168\n        Weights: 0.0101615088060498,0.0229801908135414,0.0135756079107523,0.0224668979644775,0.0134341223165393,0.0261847041547298\n        ,0.031180327758193,0.0206251200288534,0.00532444892451167,0.00404853792861104,0.0273718051612377,0.00240944442339242\n        ,0.0034473619889468,0.00143961887806654,0.00180354132317007,0.00161263684276491,0.00291394721716642,0.00918020773679018\n        ,0.0127796493470669,0.0143848909065127,0.383575648069382,0.356072396039963,0.468806743621826,0.480103701353073,0.499032914638519\n        ,0.461361408233643,0.467299968004227,0.476862788200378,0.464165151119232,0.463425189256668,0.472311437129974,0.0294841714203358\n        ,0.024617824703455,0.00234879832714796,0.00223406916484237,0.0408354513347149,0.0222049206495285,0.380914241075516\n        ,0.347071617841721,0.00238839536905289,0.00339022045955062,0.00366555782966316,0.00173941173125058,0.00441070273518562\n        ,0.0152303511276841,0.00406680861487985,0.00302362628281116,0.468955308198929\n        Transform: -0.3648617444586,0.690991822556432,0.624024157870216,0,-0.891041868342784,-0.453532336509674,-0.018781267598003,0\n        ,0.270037436703439,-0.562884245045661,0.781179267695882,0,21.400601210705,40.4969467539201,10.9593068147554,1\n        TransformLink: -0.364861773308025,-0.891041938796993,0.270037458055156,0,0.690991855433542,-0.453532358088559,-0.562884271827465\n        ,0,0.624024199120653,-0.0187812688395182,0.781179319334886,0,-27.0136717272842,37.6413386384827,8.45494659509225,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Middle3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6991,6992,6995,6996,6997,6998,6999,7000,7001,7002,7008,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021\n        ,7022,7023,7025,7026,7027,7028,7031,7043,7044,7046,7047,7048,7049,7050,7051,7126,7127,7162,7165,7168\n        Weights: 0.016761826351285,0.0327525436878204,0.0260655898600817,0.115334317088127,0.0583750233054161,0.0969952940940857,0.0520107224583626\n        ,0.0599400214850903,0.0216762609779835,0.0182991288602352,0.00387279852293432,0.0026070331223309,0.0157421063631773\n        ,0.0266785137355328,0.437584847211838,0.410475611686707,0.476766288280487,0.481962472200394,0.487495481967926,0.49189567565918\n        ,0.480631649494171,0.482351124286652,0.465472191572189,0.48048734664917,0.487918704748154,0.197620660066605,0.0147266173735261\n        ,0.0349608920514584,0.449677228927612,0.0217390302568674,0.0425560437142849,0.0204605255275965,0.00591357192024589\n        ,0.038311630487442,0.0179284252226353,0.00165145879145712,0.00414461409673095,0.0224138833582401,0.00393291655927897\n        ,0.00567780341953039,0.0500728152692318,0.480987906455994,0.0343999676406384\n        Transform: -0.481422785176836,0.779765319558555,0.40024746206003,0,-0.86102053658501,-0.506149284513552,-0.0495624164792142,0\n        ,0.163937923853037,-0.368481771624397,0.915065812642581,0,17.3434308995453,43.4950490005919,6.55023114588821,1\n        TransformLink: -0.481422830726269,-0.861020618049782,0.163937939363893,0,0.779765422628502,-0.506149351416733,-0.368481820330585\n        ,0,0.400247499891431,-0.0495624211638551,0.915065899134627,0,-28.1881253078821,37.2726877484919,7.18999535488276,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Ring3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6964,6965,6966,6969,6970,6971,6972,6973,6976,6982,6983,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996\n        ,6997,6998,6999,7000,7001,7002,7003,7004,7008,7012,7013,7014,7016,7017,7018,7019,7020,7022,7117,7158,7162,7165\n        Weights: 0.00131166935898364,0.0117081198841333,0.0238597877323627,0.0171741582453251,0.115294389426708,0.0155567303299904\n        ,0.0101941684260964,0.0685082525014877,0.0103107020258904,0.00144403614103794,0.00316327856853604,0.00744051160290837\n        ,0.00404223706573248,0.447492778301239,0.429092288017273,0.389249831438065,0.0174639020115137,0.484207719564438,0.478153556585312\n        ,0.499409109354019,0.489902287721634,0.479123532772064,0.434379041194916,0.463143467903137,0.442066639661789,0.463111817836761\n        ,0.410636335611343,0.0470488779246807,0.0328258499503136,0.00182847154792398,0.0277167167514563,0.00191423017531633\n        ,0.00806708075106144,0.0110489251092076,0.00255572586320341,0.0283467769622803,0.0148475430905819,0.00837578997015953\n        ,0.0282952189445496,0.0123175773769617,0.0165584031492472,0.00247255084104836,0.0448792017996311,0.467338800430298\n        ,0.0227938573807478\n        Transform: -0.446935126929394,0.875983205249199,0.181390072245155,0,-0.894507209233465,-0.439952904404043,-0.0793612976075897\n        ,0,0.0102839251840173,-0.197724083962654,0.980203758597428,0,20.6962879889423,42.5736113822138,2.63824437762395,1\n        \n        TransformLink: -0.446935165289291,-0.894507286007929,0.0102839260666741,0,0.875983251368767,-0.439952927567088,-0.197724094372613\n        ,0,0.181390075467443,-0.0793612990173966,0.980203776010172,0,-28.522422974648,37.4527398650693,5.61897255820232,1\n        \n    }\n    Deformer: \"SubDeformer::Cluster_R_Pinky3\", \"Cluster\" {\n        Version: 100\n        MultiLayer: 0\n        Type: \"Cluster\"\n        Properties60:  {\n            Property: \"SrcModel\", \"object\", \"\"\n            Property: \"SrcModelReference\", \"object\", \"\"\n        }\n        UserData: \"\", \"\"\n        Indexes: 6940,6941,6946,6947,6948,6950,6951,6952,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969\n        ,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,6989,6990,6991,6992,6994,6995,7005,7105\n        ,7114,7115,7117,7118,7119,7120,7131,7133,7158,7159,7160,7161,7164\n        Weights: 0.0029540981631726,0.00340022752061486,0.00514190411195159,0.00215059868060052,0.00547736883163452,0.0035235860850662\n        ,0.00184328865725547,0.0031976499594748,0.00340661476366222,0.00445797480642796,0.00196587364189327,0.00159703753888607\n        ,0.0202187430113554,0.00549371214583516,0.355474561452866,0.285276889801025,0.0310857817530632,0.371014595031738,0.486605674028397\n        ,0.479619711637497,0.495799422264099,0.493786364793777,0.482276678085327,0.43053936958313,0.448268443346024,0.47878086566925\n        ,0.454167634248734,0.055576641112566,0.0302723329514265,0.402357220649719,0.0076139303855598,0.0356811620295048,0.00618526106700301\n        ,0.00278126355260611,0.00223208218812943,0.00168520596344024,0.00120828486979008,0.00146028422750533,0.00699549773707986\n        ,0.0091273644939065,0.0148227522149682,0.0109403412789106,0.00498492131009698,0.0156873147934675,0.00253135734237731\n        ,0.00485804071649909,0.00442179199308157,0.00194254226516932,0.0086732842028141,0.0095840310677886,0.00492342142388225\n        ,0.00308714248239994,0.00303195556625724,0.00201294617727399,0.466875940561295,0.00367911183275282,0.00448152981698513\n        ,0.00220942520536482,0.00171917770057917\n        Transform: -0.482801733001442,0.873602557741718,-0.0609999574633026,0,-0.868441857024725,-0.486588658706075,-0.0950796906612072\n        ,0,-0.112743748995228,0.00707027705556755,0.9935989294111,0,20.0346283563877,43.0828852057132,-2.32465793019685,1\n        \n        TransformLink: -0.48280176903813,-0.868441921845883,-0.112743757410506,0,0.873602609728157,-0.486588687662048,0.00707027747630639\n        ,0,-0.0609999589935695,-0.0950796930464106,0.993598954336881,0,-28.1063709762603,38.141527963791,4.26394901497251\n        ,1\n    }\n    Video: \"Video::character_anim:file2\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"head.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"head.tga\"\n        RelativeFilename: \"head.tga\"\n    }\n    Video: \"Video::character_anim:file1\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"jacket.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"jacket.tga\"\n        RelativeFilename: \"jacket.tga\"\n    }\n    Video: \"Video::character_anim:file6\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"pants.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"pants.tga\"\n        RelativeFilename: \"pants.tga\"\n    }\n    Video: \"Video::character_anim:file8\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"upBodyC.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"upBodyC.tga\"\n        RelativeFilename: \"upBodyC.tga\"\n    }\n    Video: \"Video::character_anim:file13\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"upBodyC.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"upBodyC.tga\"\n        RelativeFilename: \"upBodyC.tga\"\n    }\n    Video: \"Video::character_anim:soldier_bindPose:file9\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"headS.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"headS.tga\"\n        RelativeFilename: \"headS.tga\"\n    }\n    Video: \"Video::character_anim:file10\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"jacketS.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"jacketS.tga\"\n        RelativeFilename: \"jacketS.tga\"\n    }\n    Video: \"Video::character_anim:file12\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"pantsS.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"pantsS.tga\"\n        RelativeFilename: \"pantsS.tga\"\n    }\n    Video: \"Video::character_anim:file11\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"upBodyS.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"upBodyS.tga\"\n        RelativeFilename: \"upBodyS.tga\"\n    }\n    Video: \"Video::character_anim:file15\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"upBodyS.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"upBodyS.tga\"\n        RelativeFilename: \"upBodyS.tga\"\n    }\n    Video: \"Video::character_anim:file3\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"headN.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"headN.tga\"\n        RelativeFilename: \"headN.tga\"\n    }\n    Video: \"Video::character_anim:file4\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"jacketN.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"jacketN.tga\"\n        RelativeFilename: \"jacketN.tga\"\n    }\n    Video: \"Video::character_anim:file7\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"pantsN.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"pantsN.tga\"\n        RelativeFilename: \"pantsN.tga\"\n    }\n    Video: \"Video::character_anim:file5\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"upbodyN.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"upbodyN.tga\"\n        RelativeFilename: \"upbodyN.tga\"\n    }\n    Video: \"Video::character_anim:file14\", \"Clip\" {\n        Type: \"Clip\"\n        Properties60:  {\n            Property: \"FrameRate\", \"double\", \"\",0\n            Property: \"LastFrame\", \"int\", \"\",0\n            Property: \"Width\", \"int\", \"\",0\n            Property: \"Height\", \"int\", \"\",0\n            Property: \"Path\", \"charptr\", \"\", \"upbodyN.tga\"\n            Property: \"StartFrame\", \"int\", \"\",0\n            Property: \"StopFrame\", \"int\", \"\",0\n            Property: \"PlaySpeed\", \"double\", \"\",1\n            Property: \"Offset\", \"KTime\", \"\",0\n            Property: \"InterlaceMode\", \"enum\", \"\",0\n            Property: \"FreeRunning\", \"bool\", \"\",0\n            Property: \"Loop\", \"bool\", \"\",0\n            Property: \"AccessMode\", \"enum\", \"\",0\n        }\n        UseMipMap: 0\n        Filename: \"upbodyN.tga\"\n        RelativeFilename: \"upbodyN.tga\"\n    }\n    Texture: \"Texture::character_anim:file2\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file2\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file2\"\n        FileName: \"head.tga\"\n        RelativeFilename: \"head.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file1\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file1\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file1\"\n        FileName: \"jacket.tga\"\n        RelativeFilename: \"jacket.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file6\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file6\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file6\"\n        FileName: \"pants.tga\"\n        RelativeFilename: \"pants.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file8\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file8\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file8\"\n        FileName: \"upBodyC.tga\"\n        RelativeFilename: \"upBodyC.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file13\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file13\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file13\"\n        FileName: \"upBodyC.tga\"\n        RelativeFilename: \"upBodyC.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:soldier_bindPose:file9\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:soldier_bindPose:file9\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:soldier_bindPose:file9\"\n        FileName: \"headS.tga\"\n        RelativeFilename: \"headS.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file10\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file10\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file10\"\n        FileName: \"jacketS.tga\"\n        RelativeFilename: \"jacketS.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file12\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file12\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file12\"\n        FileName: \"pantsS.tga\"\n        RelativeFilename: \"pantsS.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file11\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file11\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file11\"\n        FileName: \"upBodyS.tga\"\n        RelativeFilename: \"upBodyS.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file15\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file15\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file15\"\n        FileName: \"upBodyS.tga\"\n        RelativeFilename: \"upBodyS.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file3\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file3\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file3\"\n        FileName: \"headN.tga\"\n        RelativeFilename: \"headN.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file4\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file4\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file4\"\n        FileName: \"jacketN.tga\"\n        RelativeFilename: \"jacketN.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file7\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file7\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file7\"\n        FileName: \"pantsN.tga\"\n        RelativeFilename: \"pantsN.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file5\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file5\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file5\"\n        FileName: \"upbodyN.tga\"\n        RelativeFilename: \"upbodyN.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    Texture: \"Texture::character_anim:file14\", \"TextureVideoClip\" {\n        Type: \"TextureVideoClip\"\n        Version: 202\n        TextureName: \"Texture::character_anim:file14\"\n        Properties60:  {\n            Property: \"Translation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\n            Property: \"Scaling\", \"Vector\", \"A+\",1,1,1\n            Property: \"Texture alpha\", \"Number\", \"A+\",1\n            Property: \"TextureTypeUse\", \"enum\", \"\",0\n            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",0\n            Property: \"UseMaterial\", \"bool\", \"\",1\n            Property: \"UseMipMap\", \"bool\", \"\",0\n            Property: \"CurrentMappingType\", \"enum\", \"\",0\n            Property: \"UVSwap\", \"bool\", \"\",0\n            Property: \"WrapModeU\", \"enum\", \"\",0\n            Property: \"WrapModeV\", \"enum\", \"\",0\n            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\n            Property: \"VideoProperty\", \"object\", \"\"\n        }\n        Media: \"Video::character_anim:file14\"\n        FileName: \"upbodyN.tga\"\n        RelativeFilename: \"upbodyN.tga\"\n        ModelUVTranslation: 0,0\n        ModelUVScaling: 1,1\n        Texture_Alpha_Source: \"None\"\n        Cropping: 0,0,0,0\n    }\n    GlobalSettings:  {\n        Version: 1000\n        Properties60:  {\n            Property: \"UpAxis\", \"int\", \"\",1\n            Property: \"UpAxisSign\", \"int\", \"\",1\n            Property: \"FrontAxis\", \"int\", \"\",2\n            Property: \"FrontAxisSign\", \"int\", \"\",1\n            Property: \"CoordAxis\", \"int\", \"\",0\n            Property: \"CoordAxisSign\", \"int\", \"\",1\n            Property: \"UnitScaleFactor\", \"double\", \"\",1\n        }\n    }\n}\n\n; Object relations\n;------------------------------------------------------------------\n\nRelations:  {\n    Model: \"Model::Root\", \"LimbNode\" {\n    }\n    Model: \"Model::Pelvis\", \"LimbNode\" {\n    }\n    Model: \"Model::Spine\", \"LimbNode\" {\n    }\n    Model: \"Model::Spine1\", \"LimbNode\" {\n    }\n    Model: \"Model::Spine2\", \"LimbNode\" {\n    }\n    Model: \"Model::Spine3\", \"LimbNode\" {\n    }\n    Model: \"Model::Neck\", \"LimbNode\" {\n    }\n    Model: \"Model::Head\", \"LimbNode\" {\n    }\n    Model: \"Model::L_eye_joint1\", \"LimbNode\" {\n    }\n    Model: \"Model::R_eye_joint\", \"LimbNode\" {\n    }\n    Model: \"Model::L_eyeBall_joint2\", \"LimbNode\" {\n    }\n    Model: \"Model::R_eyeBall_joint\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Clavicle\", \"LimbNode\" {\n    }\n    Model: \"Model::L_UpperArm\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Forearm\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Hand\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Thumb1\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Thumb2\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Thumb3\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Index1\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Index2\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Index3\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Middle1\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Middle2\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Middle3\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Ring1\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Ring2\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Ring3\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Pinky1\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Pinky2\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Pinky3\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Clavicle\", \"LimbNode\" {\n    }\n    Model: \"Model::R_UpperArm\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Forearm\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Hand\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Thumb1\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Thumb2\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Thumb3\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Index1\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Index2\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Index3\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Middle1\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Middle2\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Middle3\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Ring1\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Ring2\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Ring3\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Pinky1\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Pinky2\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Pinky3\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Thigh1\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Knee2\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Ankle1\", \"LimbNode\" {\n    }\n    Model: \"Model::L_Ball\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Thigh\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Knee\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Ankle\", \"LimbNode\" {\n    }\n    Model: \"Model::R_Ball\", \"LimbNode\" {\n    }\n    Model: \"Model::him\", \"Mesh\" {\n    }\n    Model: \"Model::Producer Perspective\", \"Camera\" {\n    }\n    Model: \"Model::Producer Top\", \"Camera\" {\n    }\n    Model: \"Model::Producer Bottom\", \"Camera\" {\n    }\n    Model: \"Model::Producer Front\", \"Camera\" {\n    }\n    Model: \"Model::Producer Back\", \"Camera\" {\n    }\n    Model: \"Model::Producer Right\", \"Camera\" {\n    }\n    Model: \"Model::Producer Left\", \"Camera\" {\n    }\n    Model: \"Model::Camera_Switcher\", \"CameraSwitcher\" {\n    }\n    Material: \"Material::character_anim:headM\", \"\" {\n    }\n    Material: \"Material::character_anim:jacketM\", \"\" {\n    }\n    Material: \"Material::character_anim:pantsM\", \"\" {\n    }\n    Material: \"Material::character_anim:upBodyM\", \"\" {\n    }\n    Material: \"Material::character_anim:eyeBallM\", \"\" {\n    }\n    Texture: \"Texture::character_anim:file2\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file1\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file6\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file8\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file13\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:soldier_bindPose:file9\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file10\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file12\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file11\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file15\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file3\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file4\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file7\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file5\", \"TextureVideoClip\" {\n    }\n    Texture: \"Texture::character_anim:file14\", \"TextureVideoClip\" {\n    }\n    Video: \"Video::character_anim:file2\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file1\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file6\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file8\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file13\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:soldier_bindPose:file9\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file10\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file12\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file11\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file15\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file3\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file4\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file7\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file5\", \"Clip\" {\n    }\n    Video: \"Video::character_anim:file14\", \"Clip\" {\n    }\n    Deformer: \"Deformer::Skin_him\", \"Skin\" {\n    }\n    Deformer: \"SubDeformer::Cluster_Root\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_Pelvis\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_Spine\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_Spine1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Thigh1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Thigh\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_Spine2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Knee2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Knee\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_Spine3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ankle1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Ankle\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_Neck\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ball\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Ball\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_Head\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Clavicle\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Clavicle\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_eye_joint1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_eye_joint\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_eyeBall_joint2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_eyeBall_joint\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_UpperArm\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_UpperArm\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Forearm\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Forearm\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Hand\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Hand\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Thumb1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Index1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Middle1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ring1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Pinky1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Thumb1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Index1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Middle1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Ring1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Pinky1\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Thumb2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Index2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Middle2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ring2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Pinky2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Thumb2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Index2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Middle2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Ring2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Pinky2\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Thumb3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Index3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Middle3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Ring3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_L_Pinky3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Thumb3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Index3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Middle3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Ring3\", \"Cluster\" {\n    }\n    Deformer: \"SubDeformer::Cluster_R_Pinky3\", \"Cluster\" {\n    }\n    Pose: \"Pose::skinCluster3\", \"BindPose\" {\n    }\n}\n\n; Object connections\n;------------------------------------------------------------------\n\nConnections:  {\n    Connect: \"OO\", \"Model::Root\", \"Model::Scene\"\n    Connect: \"OO\", \"Model::him\", \"Model::Scene\"\n    Connect: \"OO\", \"Model::Pelvis\", \"Model::Root\"\n    Connect: \"OO\", \"Model::Spine\", \"Model::Pelvis\"\n    Connect: \"OO\", \"Model::Spine1\", \"Model::Spine\"\n    Connect: \"OO\", \"Model::L_Thigh1\", \"Model::Spine\"\n    Connect: \"OO\", \"Model::R_Thigh\", \"Model::Spine\"\n    Connect: \"OO\", \"Model::Spine2\", \"Model::Spine1\"\n    Connect: \"OO\", \"Model::Spine3\", \"Model::Spine2\"\n    Connect: \"OO\", \"Model::Neck\", \"Model::Spine3\"\n    Connect: \"OO\", \"Model::Head\", \"Model::Neck\"\n    Connect: \"OO\", \"Model::L_Clavicle\", \"Model::Neck\"\n    Connect: \"OO\", \"Model::R_Clavicle\", \"Model::Neck\"\n    Connect: \"OO\", \"Model::L_eye_joint1\", \"Model::Head\"\n    Connect: \"OO\", \"Model::R_eye_joint\", \"Model::Head\"\n    Connect: \"OO\", \"Model::L_eyeBall_joint2\", \"Model::Head\"\n    Connect: \"OO\", \"Model::R_eyeBall_joint\", \"Model::Head\"\n    Connect: \"OO\", \"Model::L_UpperArm\", \"Model::L_Clavicle\"\n    Connect: \"OO\", \"Model::L_Forearm\", \"Model::L_UpperArm\"\n    Connect: \"OO\", \"Model::L_Hand\", \"Model::L_Forearm\"\n    Connect: \"OO\", \"Model::L_Thumb1\", \"Model::L_Hand\"\n    Connect: \"OO\", \"Model::L_Index1\", \"Model::L_Hand\"\n    Connect: \"OO\", \"Model::L_Middle1\", \"Model::L_Hand\"\n    Connect: \"OO\", \"Model::L_Ring1\", \"Model::L_Hand\"\n    Connect: \"OO\", \"Model::L_Pinky1\", \"Model::L_Hand\"\n    Connect: \"OO\", \"Model::L_Thumb2\", \"Model::L_Thumb1\"\n    Connect: \"OO\", \"Model::L_Thumb3\", \"Model::L_Thumb2\"\n    Connect: \"OO\", \"Model::L_Index2\", \"Model::L_Index1\"\n    Connect: \"OO\", \"Model::L_Index3\", \"Model::L_Index2\"\n    Connect: \"OO\", \"Model::L_Middle2\", \"Model::L_Middle1\"\n    Connect: \"OO\", \"Model::L_Middle3\", \"Model::L_Middle2\"\n    Connect: \"OO\", \"Model::L_Ring2\", \"Model::L_Ring1\"\n    Connect: \"OO\", \"Model::L_Ring3\", \"Model::L_Ring2\"\n    Connect: \"OO\", \"Model::L_Pinky2\", \"Model::L_Pinky1\"\n    Connect: \"OO\", \"Model::L_Pinky3\", \"Model::L_Pinky2\"\n    Connect: \"OO\", \"Model::R_UpperArm\", \"Model::R_Clavicle\"\n    Connect: \"OO\", \"Model::R_Forearm\", \"Model::R_UpperArm\"\n    Connect: \"OO\", \"Model::R_Hand\", \"Model::R_Forearm\"\n    Connect: \"OO\", \"Model::R_Thumb1\", \"Model::R_Hand\"\n    Connect: \"OO\", \"Model::R_Index1\", \"Model::R_Hand\"\n    Connect: \"OO\", \"Model::R_Middle1\", \"Model::R_Hand\"\n    Connect: \"OO\", \"Model::R_Ring1\", \"Model::R_Hand\"\n    Connect: \"OO\", \"Model::R_Pinky1\", \"Model::R_Hand\"\n    Connect: \"OO\", \"Model::R_Thumb2\", \"Model::R_Thumb1\"\n    Connect: \"OO\", \"Model::R_Thumb3\", \"Model::R_Thumb2\"\n    Connect: \"OO\", \"Model::R_Index2\", \"Model::R_Index1\"\n    Connect: \"OO\", \"Model::R_Index3\", \"Model::R_Index2\"\n    Connect: \"OO\", \"Model::R_Middle2\", \"Model::R_Middle1\"\n    Connect: \"OO\", \"Model::R_Middle3\", \"Model::R_Middle2\"\n    Connect: \"OO\", \"Model::R_Ring2\", \"Model::R_Ring1\"\n    Connect: \"OO\", \"Model::R_Ring3\", \"Model::R_Ring2\"\n    Connect: \"OO\", \"Model::R_Pinky2\", \"Model::R_Pinky1\"\n    Connect: \"OO\", \"Model::R_Pinky3\", \"Model::R_Pinky2\"\n    Connect: \"OO\", \"Model::L_Knee2\", \"Model::L_Thigh1\"\n    Connect: \"OO\", \"Model::L_Ankle1\", \"Model::L_Knee2\"\n    Connect: \"OO\", \"Model::L_Ball\", \"Model::L_Ankle1\"\n    Connect: \"OO\", \"Model::R_Knee\", \"Model::R_Thigh\"\n    Connect: \"OO\", \"Model::R_Ankle\", \"Model::R_Knee\"\n    Connect: \"OO\", \"Model::R_Ball\", \"Model::R_Ankle\"\n    Connect: \"OO\", \"Material::character_anim:headM\", \"Model::him\"\n    Connect: \"OO\", \"Material::character_anim:jacketM\", \"Model::him\"\n    Connect: \"OO\", \"Material::character_anim:pantsM\", \"Model::him\"\n    Connect: \"OO\", \"Material::character_anim:upBodyM\", \"Model::him\"\n    Connect: \"OO\", \"Material::character_anim:eyeBallM\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file2\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file1\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file6\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file8\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file13\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:soldier_bindPose:file9\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file10\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file12\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file11\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file15\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file3\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file4\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file7\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file5\", \"Model::him\"\n    Connect: \"OO\", \"Texture::character_anim:file14\", \"Model::him\"\n    Connect: \"OO\", \"Deformer::Skin_him\", \"Model::him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_Root\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_Pelvis\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_Spine\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_Spine1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Thigh1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Thigh\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_Spine2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Knee2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Knee\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_Spine3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Ankle1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Ankle\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_Neck\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Ball\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Ball\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_Head\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Clavicle\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Clavicle\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_eye_joint1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_eye_joint\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_eyeBall_joint2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_eyeBall_joint\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_UpperArm\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_UpperArm\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Forearm\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Forearm\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Hand\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Hand\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Thumb1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Index1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Middle1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Ring1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Pinky1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Thumb1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Index1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Middle1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Ring1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Pinky1\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Thumb2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Index2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Middle2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Ring2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Pinky2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Thumb2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Index2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Middle2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Ring2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Pinky2\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Thumb3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Index3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Middle3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Ring3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_L_Pinky3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Thumb3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Index3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Middle3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Ring3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"SubDeformer::Cluster_R_Pinky3\", \"Deformer::Skin_him\"\n    Connect: \"OO\", \"Model::Root\", \"SubDeformer::Cluster_Root\"\n    Connect: \"OO\", \"Model::Pelvis\", \"SubDeformer::Cluster_Pelvis\"\n    Connect: \"OO\", \"Model::Spine\", \"SubDeformer::Cluster_Spine\"\n    Connect: \"OO\", \"Model::Spine1\", \"SubDeformer::Cluster_Spine1\"\n    Connect: \"OO\", \"Model::L_Thigh1\", \"SubDeformer::Cluster_L_Thigh1\"\n    Connect: \"OO\", \"Model::R_Thigh\", \"SubDeformer::Cluster_R_Thigh\"\n    Connect: \"OO\", \"Model::Spine2\", \"SubDeformer::Cluster_Spine2\"\n    Connect: \"OO\", \"Model::L_Knee2\", \"SubDeformer::Cluster_L_Knee2\"\n    Connect: \"OO\", \"Model::R_Knee\", \"SubDeformer::Cluster_R_Knee\"\n    Connect: \"OO\", \"Model::Spine3\", \"SubDeformer::Cluster_Spine3\"\n    Connect: \"OO\", \"Model::L_Ankle1\", \"SubDeformer::Cluster_L_Ankle1\"\n    Connect: \"OO\", \"Model::R_Ankle\", \"SubDeformer::Cluster_R_Ankle\"\n    Connect: \"OO\", \"Model::Neck\", \"SubDeformer::Cluster_Neck\"\n    Connect: \"OO\", \"Model::L_Ball\", \"SubDeformer::Cluster_L_Ball\"\n    Connect: \"OO\", \"Model::R_Ball\", \"SubDeformer::Cluster_R_Ball\"\n    Connect: \"OO\", \"Model::Head\", \"SubDeformer::Cluster_Head\"\n    Connect: \"OO\", \"Model::L_Clavicle\", \"SubDeformer::Cluster_L_Clavicle\"\n    Connect: \"OO\", \"Model::R_Clavicle\", \"SubDeformer::Cluster_R_Clavicle\"\n    Connect: \"OO\", \"Model::L_eye_joint1\", \"SubDeformer::Cluster_L_eye_joint1\"\n    Connect: \"OO\", \"Model::R_eye_joint\", \"SubDeformer::Cluster_R_eye_joint\"\n    Connect: \"OO\", \"Model::L_eyeBall_joint2\", \"SubDeformer::Cluster_L_eyeBall_joint2\"\n    Connect: \"OO\", \"Model::R_eyeBall_joint\", \"SubDeformer::Cluster_R_eyeBall_joint\"\n    Connect: \"OO\", \"Model::L_UpperArm\", \"SubDeformer::Cluster_L_UpperArm\"\n    Connect: \"OO\", \"Model::R_UpperArm\", \"SubDeformer::Cluster_R_UpperArm\"\n    Connect: \"OO\", \"Model::L_Forearm\", \"SubDeformer::Cluster_L_Forearm\"\n    Connect: \"OO\", \"Model::R_Forearm\", \"SubDeformer::Cluster_R_Forearm\"\n    Connect: \"OO\", \"Model::L_Hand\", \"SubDeformer::Cluster_L_Hand\"\n    Connect: \"OO\", \"Model::R_Hand\", \"SubDeformer::Cluster_R_Hand\"\n    Connect: \"OO\", \"Model::L_Thumb1\", \"SubDeformer::Cluster_L_Thumb1\"\n    Connect: \"OO\", \"Model::L_Index1\", \"SubDeformer::Cluster_L_Index1\"\n    Connect: \"OO\", \"Model::L_Middle1\", \"SubDeformer::Cluster_L_Middle1\"\n    Connect: \"OO\", \"Model::L_Ring1\", \"SubDeformer::Cluster_L_Ring1\"\n    Connect: \"OO\", \"Model::L_Pinky1\", \"SubDeformer::Cluster_L_Pinky1\"\n    Connect: \"OO\", \"Model::R_Thumb1\", \"SubDeformer::Cluster_R_Thumb1\"\n    Connect: \"OO\", \"Model::R_Index1\", \"SubDeformer::Cluster_R_Index1\"\n    Connect: \"OO\", \"Model::R_Middle1\", \"SubDeformer::Cluster_R_Middle1\"\n    Connect: \"OO\", \"Model::R_Ring1\", \"SubDeformer::Cluster_R_Ring1\"\n    Connect: \"OO\", \"Model::R_Pinky1\", \"SubDeformer::Cluster_R_Pinky1\"\n    Connect: \"OO\", \"Model::L_Thumb2\", \"SubDeformer::Cluster_L_Thumb2\"\n    Connect: \"OO\", \"Model::L_Index2\", \"SubDeformer::Cluster_L_Index2\"\n    Connect: \"OO\", \"Model::L_Middle2\", \"SubDeformer::Cluster_L_Middle2\"\n    Connect: \"OO\", \"Model::L_Ring2\", \"SubDeformer::Cluster_L_Ring2\"\n    Connect: \"OO\", \"Model::L_Pinky2\", \"SubDeformer::Cluster_L_Pinky2\"\n    Connect: \"OO\", \"Model::R_Thumb2\", \"SubDeformer::Cluster_R_Thumb2\"\n    Connect: \"OO\", \"Model::R_Index2\", \"SubDeformer::Cluster_R_Index2\"\n    Connect: \"OO\", \"Model::R_Middle2\", \"SubDeformer::Cluster_R_Middle2\"\n    Connect: \"OO\", \"Model::R_Ring2\", \"SubDeformer::Cluster_R_Ring2\"\n    Connect: \"OO\", \"Model::R_Pinky2\", \"SubDeformer::Cluster_R_Pinky2\"\n    Connect: \"OO\", \"Model::L_Thumb3\", \"SubDeformer::Cluster_L_Thumb3\"\n    Connect: \"OO\", \"Model::L_Index3\", \"SubDeformer::Cluster_L_Index3\"\n    Connect: \"OO\", \"Model::L_Middle3\", \"SubDeformer::Cluster_L_Middle3\"\n    Connect: \"OO\", \"Model::L_Ring3\", \"SubDeformer::Cluster_L_Ring3\"\n    Connect: \"OO\", \"Model::L_Pinky3\", \"SubDeformer::Cluster_L_Pinky3\"\n    Connect: \"OO\", \"Model::R_Thumb3\", \"SubDeformer::Cluster_R_Thumb3\"\n    Connect: \"OO\", \"Model::R_Index3\", \"SubDeformer::Cluster_R_Index3\"\n    Connect: \"OO\", \"Model::R_Middle3\", \"SubDeformer::Cluster_R_Middle3\"\n    Connect: \"OO\", \"Model::R_Ring3\", \"SubDeformer::Cluster_R_Ring3\"\n    Connect: \"OO\", \"Model::R_Pinky3\", \"SubDeformer::Cluster_R_Pinky3\"\n    Connect: \"OO\", \"Video::character_anim:file2\", \"Texture::character_anim:file2\"\n    Connect: \"OO\", \"Video::character_anim:file1\", \"Texture::character_anim:file1\"\n    Connect: \"OO\", \"Video::character_anim:file6\", \"Texture::character_anim:file6\"\n    Connect: \"OO\", \"Video::character_anim:file8\", \"Texture::character_anim:file8\"\n    Connect: \"OO\", \"Video::character_anim:file13\", \"Texture::character_anim:file13\"\n    Connect: \"OO\", \"Video::character_anim:soldier_bindPose:file9\", \"Texture::character_anim:soldier_bindPose:file9\"\n    Connect: \"OO\", \"Video::character_anim:file10\", \"Texture::character_anim:file10\"\n    Connect: \"OO\", \"Video::character_anim:file12\", \"Texture::character_anim:file12\"\n    Connect: \"OO\", \"Video::character_anim:file11\", \"Texture::character_anim:file11\"\n    Connect: \"OO\", \"Video::character_anim:file15\", \"Texture::character_anim:file15\"\n    Connect: \"OO\", \"Video::character_anim:file3\", \"Texture::character_anim:file3\"\n    Connect: \"OO\", \"Video::character_anim:file4\", \"Texture::character_anim:file4\"\n    Connect: \"OO\", \"Video::character_anim:file7\", \"Texture::character_anim:file7\"\n    Connect: \"OO\", \"Video::character_anim:file5\", \"Texture::character_anim:file5\"\n    Connect: \"OO\", \"Video::character_anim:file14\", \"Texture::character_anim:file14\"\n}\n;Takes and animation section\n;----------------------------------------------------\n\nTakes:  {\n    Current: \"Take 001\"\n    Take: \"Take 001\" {\n        FileName: \"Take_001.tak\"\n        LocalTime: 1924423250,57732697500\n        ReferenceTime: 1924423250,57732697500\n        \n        ;Models animation\n        ;----------------------------------------------------\n        Model: \"Model::Pelvis\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: -0.77721095085144\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-0.586211264133453,U,s,0.891356229782104,-0.783023536205292,a,0.329832986317342\n                                        ,0.989898998959688,1539538600,-0.584405720233917,U,s,-0.783023536205292,-1.83774936199188\n                                        ,a,0.989898998959688,0.989999008961604,3079077200,-0.638412833213806,U,s,-1.83774936199188\n                                        ,-2.22997069358826,a,0.989999008961604,0.989999008961604,4618615800,-0.706922352313995\n                                        ,U,s,-2.22997069358826,-1.59893095493317,a,0.989999008961604,0.989999008961604,6158154400\n                                        ,-0.78707754611969,U,s,-1.59893095493317,-0.599919855594635,a,0.989999008961604,0.989898998959688\n                                        ,7697693000,-0.81351774930954,U,s,-0.599919855594635,0.0918889045715332,a,0.989898998959688\n                                        ,0.989898998959688,9237231600,-0.827072203159332,U,s,0.0918889045715332,0.977147459983826\n                                        ,a,0.989898998959688,0.989898998959688,10776770200,-0.807391822338104,U,s,0.977147459983826\n                                        ,1.53036570549011,a,0.989898998959688,0.989999008961604,12316308800,-0.761929035186768\n                                        ,U,s,1.53036570549011,1.57329618930817,a,0.989999008961604,0.989898998959688,13855847400\n                                        ,-0.70536744594574,U,s,1.57329618930817,1.09736680984497,a,0.989898998959688,0.989898998959688\n                                        ,15395386000,-0.657042622566223,U,s,1.09736680984497,0.147239595651627,a,0.988698878936702\n                                        ,0.988698878936702,16927226907,-0.632291913032532,U,s,0.147239595651627,-1.29068064689636\n                                        ,a,0.989999008961604,0.989999008961604,18474463200,-0.647729754447937,U,s,-1.29068064689636\n                                        ,-3.26958799362183,a,0.989898998959688,0.989898998959688,20014001800,-0.718261241912842\n                                        ,U,s,-3.26958799362183,-5.00180864334106,a,0.989898998959688,0.989999008961604,21553540400\n                                        ,-0.865702271461487,U,s,-5.00180864334106,-4.28291749954224,a,0.989999008961604,0.989898998959688\n                                        ,23093079000,-1.05171513557434,U,s,-4.28291749954224,-0.809386909008026,a,0.989898998959688\n                                        ,0.989898998959688,24632617600,-1.15123009681702,U,s,-0.809386909008026,1.67561900615692\n                                        ,a,0.989898998959688,0.989898998959688,26172156200,-1.10567426681519,U,s,1.67561900615692\n                                        ,2.34441637992859,a,0.989898998959688,0.989898998959688,27711694800,-1.03952217102051\n                                        ,U,s,2.34441637992859,2.40952062606812,a,0.989898998959688,0.989898998959688,29251233400\n                                        ,-0.949379861354828,U,s,2.40952062606812,1.60205042362213,a,0.989898998959688,0.989898998959688\n                                        ,30790772000,-0.878887474536896,U,s,1.60205042362213,2.42144179344177,a,0.989898998959688\n                                        ,0.989898998959688,32330310599,-0.842576503753662,U,s,2.42144179344177,1.93180024623871\n                                        ,a,0.988698878936702,0.988698878936702,33862151507,-0.718515813350677,U,s,1.93180024623871\n                                        ,0.225274741649628,a,0.989999008961604,0.989999008961604,35409387800,-0.715310513973236\n                                        ,U,s,0.225274741649628,0.226091459393501,a,0.989898998959688,0.989898998959688,36948926400\n                                        ,-0.70350444316864,U,s,0.226091459393501,0.110689401626587,a,0.989898998959688,0.989898998959688\n                                        ,38488465000,-0.70023775100708,U,s,0.110689401626587,0.268695652484894,a,0.989898998959688\n                                        ,0.989898998959688,40028003600,-0.696125149726868,U,s,0.268695652484894,0.475359857082367\n                                        ,a,0.989898998959688,0.989898998959688,41567542200,-0.682324707508087,U,s,0.475359857082367\n                                        ,0.480681329965591,a,0.989898998959688,0.989898998959688,43107080800,-0.664434492588043\n                                        ,U,s,0.480681329965591,0.325607687234879,a,0.989898998959688,0.989898998959688,44646619400\n                                        ,-0.65027928352356,U,s,0.325607687234879,0.142082884907722,a,0.989898998959688,0.989898998959688\n                                        ,46186158000,-0.642727315425873,U,s,0.142082884907722,-0.195977404713631,a,0.989898998959688\n                                        ,0.989898998959688,47725696599,-0.640807092189789,U,s,-0.195977404713631,-0.954082429409027\n                                        ,a,0.989898998959688,0.989898998959688,49265235200,-0.655792474746704,U,s,-0.954082429409027\n                                        ,-1.98120319843292,a,0.989999008961604,0.989898998959688,50804773799,-0.704412579536438\n                                        ,U,s,-1.98120319843292,-1.21149754524231,a,0.989898998959688,0.989898998959688,52344312400\n                                        ,-0.787872672080994,U,s,-1.21149754524231,1.17007434368134,a,0.989999008961604,0.989898998959688\n                                        ,53883850999,-0.785179078578949,U,s,1.17007434368134,1.94099128246307,a,0.989898998959688\n                                        ,0.989898998959688,55423389600,-0.709867715835571,U,s,1.94099128246307,1.85406816005707\n                                        ,a,0.989898998959688,0.989898998959688,56962928200,-0.655779659748077,U,s,1.85406816005707\n                                        ,2.3169207572937,a,0.989898998959688,0.989898998959688,58502466800,-0.586263179779053\n                                        ,U,s,2.31692051887512,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.13318836688995\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-0.0680352821946144,U,s,0,0,n,1539538600,-0.484822779893875,U,b,0,0,n,3079077200\n                                        ,-0.896862685680389,U,b,0,0,n,4618615800,-1.29121971130371,U,b,0,0,n,6158154400,-1.61329710483551\n                                        ,U,b,0,0,n,7697693000,-1.81701695919037,U,b,0,0,n,9237231600,-1.96915543079376,U,b\n                                        ,0,0,n,10776770200,-1.99336910247803,U,b,0,0,n,12316308800,-2.04106712341309,U,b,0\n                                        ,0,n,13855847400,-2.16073536872864,U,b,0,0,n,15395386000,-2.2587673664093,U,b,0,0\n                                        ,n,16934924599,-2.35977530479431,U,b,0,0,n,18474463200,-2.44943070411682,U,b,0,0,n\n                                        ,20014001800,-2.52878975868225,U,b,0,0,n,21553540400,-2.56177806854248,U,b,0,0,n,23093079000\n                                        ,-2.52751469612122,U,b,0,0,n,24632617600,-2.400151014328,U,b,0,0,n,26172156200,-2.23361873626709\n                                        ,U,b,0,0,n,27711694800,-1.91174876689911,U,b,0,0,n,29251233400,-1.48990726470947,U\n                                        ,b,0,0,n,30790772000,-1.02353608608246,U,b,0,0,n,32330310599,-0.647188246250153,U\n                                        ,b,0,0,n,33869849199,-0.19083833694458,U,b,0,0,n,35409387800,0.168048664927483,U,b\n                                        ,0,0,n,36948926400,0.385989785194397,U,b,0,0,n,38488465000,0.560447871685028,U,b,0\n                                        ,0,n,40028003600,0.701425850391388,U,b,0,0,n,41567542200,0.819226562976837,U,b,0,0\n                                        ,n,43107080800,0.924100160598755,U,b,0,0,n,44646619400,1.05119812488556,U,b,0,0,n\n                                        ,46186158000,1.14897549152374,U,b,0,0,n,47725696599,1.19904029369354,U,b,0,0,n,49265235200\n                                        ,1.20627641677856,U,b,0,0,n,50804773799,1.20042335987091,U,b,0,0,n,52344312400,1.12073743343353\n                                        ,U,b,0,0,n,53883850999,0.937063157558441,U,b,0,0,n,55423389600,0.681434571743011,U\n                                        ,b,0,0,n,56962928200,0.268267124891281,U,b,0,0,n,58502466800,-0.0679674819111824,U\n                                        ,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.656980156898499\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-0.0685768127441406,U,s,0,0,n,1539538600,-0.0664628073573112,U,b,0,0,n,3079077200\n                                        ,-0.0538290292024612,U,b,0,0,n,4618615800,0.0590434558689594,U,b,0,0,n,6158154400\n                                        ,0.0739317536354065,U,b,0,0,n,7697693000,-0.0169619247317314,U,b,0,0,n,9237231600\n                                        ,0.131332248449326,U,b,0,0,n,10776770200,0.422134339809418,U,b,0,0,n,12316308800,0.662825345993042\n                                        ,U,b,0,0,n,13855847400,0.842476487159729,U,b,0,0,n,15395386000,1.00516140460968,U\n                                        ,b,0,0,n,16934924599,1.07768261432648,U,b,0,0,n,18474463200,1.06222343444824,U,b,0\n                                        ,0,n,20014001800,0.982780933380127,U,b,0,0,n,21553540400,0.781412482261658,U,b,0,0\n                                        ,n,23093079000,0.445465862751007,U,b,0,0,n,24632617600,0.117520071566105,U,b,0,0,n\n                                        ,26172156200,-0.154809415340424,U,b,0,0,n,27711694800,-0.283741056919098,U,b,0,0,n\n                                        ,29251233400,-0.35413321852684,U,b,0,0,n,30790772000,-0.419941127300262,U,b,0,0,n\n                                        ,32330310599,-0.580337226390839,U,b,0,0,n,33869849199,-0.660466730594635,U,b,0,0,n\n                                        ,35409387800,-0.796723783016205,U,b,0,0,n,36948926400,-1.05828070640564,U,b,0,0,n\n                                        ,38488465000,-1.06743264198303,U,b,0,0,n,40028003600,-0.767730951309204,U,b,0,0,n\n                                        ,41567542200,-0.484414279460907,U,b,0,0,n,43107080800,-0.248645156621933,U,b,0,0,n\n                                        ,44646619400,0.0259702987968922,U,b,0,0,n,46186158000,0.187835603952408,U,b,0,0,n\n                                        ,47725696599,0.397310495376587,U,b,0,0,n,49265235200,0.597966015338898,U,b,0,0,n,50804773799\n                                        ,0.69969254732132,U,b,0,0,n,52344312400,0.64907044172287,U,b,0,0,n,53883850999,0.512211322784424\n                                        ,U,b,0,0,n,55423389600,0.352724701166153,U,b,0,0,n,56962928200,0.179142206907272,U\n                                        ,b,0,0,n,58502466800,-0.0685265585780144,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 39.7229881286621\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,42.5624885559082,U,s,0,0,n,1539538600,58.9101219177246,U,b,0,0,n,3079077200,73.3717346191406\n                                        ,U,b,0,0,n,4618615800,78.4863357543945,U,b,0,0,n,6158154400,126.048858642578,U,b,0\n                                        ,0,n,7697693000,157.502502441406,U,b,0,0,n,9237231600,160.312484741211,U,b,0,0,n,10776770200\n                                        ,169.266326904297,U,b,0,0,n,12316308800,160.485046386719,U,b,0,0,n,13855847400,164.456771850586\n                                        ,U,b,0,0,n,15395386000,154.204498291016,U,b,0,0,n,16934924599,143.332977294922,U,b\n                                        ,0,0,n,18474463200,135.768539428711,U,b,0,0,n,20014001800,133.454193115234,U,b,0,0\n                                        ,n,21553540400,137.921951293945,U,b,0,0,n,23093079000,145.168930053711,U,b,0,0,n,24632617600\n                                        ,154.882476806641,U,b,0,0,n,26172156200,153.05793762207,U,b,0,0,n,27711694800,149.928756713867\n                                        ,U,b,0,0,n,29251233400,148.561538696289,U,b,0,0,n,30790772000,140.271331787109,U,b\n                                        ,0,0,n,32330310599,137.499862670898,U,b,0,0,n,33869849199,123.417930603027,U,b,0,0\n                                        ,n,35409387800,71.790412902832,U,b,0,0,n,36948926400,17.6000232696533,U,b,0,0,n,38488465000\n                                        ,12.7495594024658,U,b,0,0,n,40028003600,7.17537069320679,U,b,0,0,n,41567542200,8.1723804473877\n                                        ,U,b,0,0,n,43107080800,5.18220710754395,U,b,0,0,n,44646619400,3.8655412197113,U,b\n                                        ,0,0,n,46186158000,6.03672981262207,U,b,0,0,n,47725696599,17.8067798614502,U,b,0,0\n                                        ,n,49265235200,34.8303871154785,U,b,0,0,n,50804773799,46.3451385498047,U,b,0,0,n,52344312400\n                                        ,38.4966621398926,U,b,0,0,n,53883850999,27.1907367706299,U,b,0,0,n,55423389600,30.035099029541\n                                        ,U,b,0,0,n,56962928200,33.3133888244629,U,b,0,0,n,58502466800,42.5024452209473,U,s\n                                        ,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -93.1371078491211\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-92.9608688354492,U,s,0,0,n,1539538600,-92.3037109375,U,b,0,0,n,3079077200,-91.8646621704102\n                                        ,U,b,0,0,n,4618615800,-91.2107315063477,U,b,0,0,n,6158154400,-91.1477737426758,U,b\n                                        ,0,0,n,7697693000,-92.1820831298828,U,b,0,0,n,9237231600,-92.546257019043,U,b,0,0\n                                        ,n,10776770200,-91.8497314453125,U,b,0,0,n,12316308800,-91.6086883544922,U,b,0,0,n\n                                        ,13855847400,-91.9885635375977,U,b,0,0,n,15395386000,-92.2334899902344,U,b,0,0,n,16934924599\n                                        ,-92.4352035522461,U,b,0,0,n,18474463200,-92.852912902832,U,b,0,0,n,20014001800,-93.618522644043\n                                        ,U,b,0,0,n,21553540400,-94.3734664916992,U,b,0,0,n,23093079000,-95.2876892089844,U\n                                        ,b,0,0,n,24632617600,-96.0415115356445,U,b,0,0,n,26172156200,-96.5568771362305,U,b\n                                        ,0,0,n,27711694800,-96.4432373046875,U,b,0,0,n,29251233400,-95.8869171142578,U,b,0\n                                        ,0,n,30790772000,-94.9207763671875,U,b,0,0,n,32330310599,-93.9866485595703,U,b,0,0\n                                        ,n,33869849199,-92.4012680053711,U,b,0,0,n,35409387800,-91.2419815063477,U,b,0,0,n\n                                        ,36948926400,-92.9509735107422,U,b,0,0,n,38488465000,-94.4393920898438,U,b,0,0,n,40028003600\n                                        ,-94.1270599365234,U,b,0,0,n,41567542200,-94.1195220947266,U,b,0,0,n,43107080800,-94.3053512573242\n                                        ,U,b,0,0,n,44646619400,-94.1212005615234,U,b,0,0,n,46186158000,-94.1551818847656,U\n                                        ,b,0,0,n,47725696599,-93.4074020385742,U,b,0,0,n,49265235200,-93.0420074462891,U,b\n                                        ,0,0,n,50804773799,-92.9979400634766,U,b,0,0,n,52344312400,-93.1628799438477,U,b,0\n                                        ,0,n,53883850999,-93.5466461181641,U,b,0,0,n,55423389600,-93.8350830078125,U,b,0,0\n                                        ,n,56962928200,-93.3850555419922,U,b,0,0,n,58502466800,-92.9633102416992,U,s,0,0,n\n                                        \n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 42.0879821777344\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,38.731258392334,U,s,0,0,n,1539538600,22.2215995788574,U,b,0,0,n,3079077200,7.96535730361938\n                                        ,U,b,0,0,n,4618615800,2.2967631816864,U,b,0,0,n,6158154400,-46.0885543823242,U,b,0\n                                        ,0,n,7697693000,-78.1182403564453,U,b,0,0,n,9237231600,-80.9945831298828,U,b,0,0,n\n                                        ,10776770200,-90.3858032226563,U,b,0,0,n,12316308800,-81.4422378540039,U,b,0,0,n,13855847400\n                                        ,-85.3753433227539,U,b,0,0,n,15395386000,-75.089225769043,U,b,0,0,n,16934924599,-64.0760955810547\n                                        ,U,b,0,0,n,18474463200,-56.303524017334,U,b,0,0,n,20014001800,-53.4196929931641,U\n                                        ,b,0,0,n,21553540400,-57.2339668273926,U,b,0,0,n,23093079000,-63.9712257385254,U,b\n                                        ,0,0,n,24632617600,-73.0183258056641,U,b,0,0,n,26172156200,-71.0355911254883,U,b,0\n                                        ,0,n,27711694800,-68.0635604858398,U,b,0,0,n,29251233400,-66.1372528076172,U,b,0,0\n                                        ,n,30790772000,-57.5177345275879,U,b,0,0,n,32330310599,-55.0261917114258,U,b,0,0,n\n                                        ,33869849199,-41.1560554504395,U,b,0,0,n,35409387800,11.1745405197144,U,b,0,0,n,36948926400\n                                        ,65.7362442016602,U,b,0,0,n,38488465000,71.4870300292969,U,b,0,0,n,40028003600,76.9713668823242\n                                        ,U,b,0,0,n,41567542200,76.0979537963867,U,b,0,0,n,43107080800,78.8197174072266,U,b\n                                        ,0,0,n,44646619400,79.5356521606445,U,b,0,0,n,46186158000,76.7964477539063,U,b,0,0\n                                        ,n,47725696599,64.4692001342773,U,b,0,0,n,49265235200,47.0431022644043,U,b,0,0,n,50804773799\n                                        ,35.4176902770996,U,b,0,0,n,52344312400,43.3232192993164,U,b,0,0,n,53883850999,54.767749786377\n                                        ,U,b,0,0,n,55423389600,51.6523208618164,U,b,0,0,n,56962928200,48.0519027709961,U,b\n                                        ,0,0,n,58502466800,38.7908897399902,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::Spine1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.54331636428833\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.00359953427687287\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -1.3350340566376e-007\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 2.96879076957703\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,4.24219846725464,U,s,0,0,n,1539538600,4.09500217437744,U,b,0,0,n,3079077200,3.75727224349976\n                                        ,U,b,0,0,n,4618615800,3.21977591514587,U,b,0,0,n,6158154400,2.98786306381226,U,b,0\n                                        ,0,n,7697693000,3.02787780761719,U,b,0,0,n,9237231600,2.58821439743042,U,b,0,0,n,10776770200\n                                        ,2.20839238166809,U,b,0,0,n,12316308800,1.65968203544617,U,b,0,0,n,13855847400,1.17191326618195\n                                        ,U,b,0,0,n,15395386000,0.650164425373077,U,b,0,0,n,16934924599,0.0350813679397106\n                                        ,U,b,0,0,n,18474463200,-0.611182034015656,U,b,0,0,n,20014001800,-1.36630296707153\n                                        ,U,b,0,0,n,21553540400,-2.08521461486816,U,b,0,0,n,23093079000,-2.74521613121033,U\n                                        ,b,0,0,n,24632617600,-3.32405662536621,U,b,0,0,n,26172156200,-3.6505982875824,U,b\n                                        ,0,0,n,27711694800,-3.64787554740906,U,b,0,0,n,29251233400,-3.85458874702454,U,b,0\n                                        ,0,n,30790772000,-4.04946231842041,U,b,0,0,n,32330310599,-4.01488494873047,U,b,0,0\n                                        ,n,33869849199,-3.89935493469238,U,b,0,0,n,35409387800,-3.8894522190094,U,b,0,0,n\n                                        ,36948926400,-4.13314723968506,U,b,0,0,n,38488465000,-4.20187330245972,U,b,0,0,n,40028003600\n                                        ,-3.68334913253784,U,b,0,0,n,41567542200,-2.98915076255798,U,b,0,0,n,43107080800,-2.23437857627869\n                                        ,U,b,0,0,n,44646619400,-1.19385135173798,U,b,0,0,n,46186158000,-0.189459353685379\n                                        ,U,b,0,0,n,47725696599,0.899639129638672,U,b,0,0,n,49265235200,1.8381507396698,U,b\n                                        ,0,0,n,50804773799,2.51898312568665,U,b,0,0,n,52344312400,3.05208849906921,U,b,0,0\n                                        ,n,53883850999,3.27331972122192,U,b,0,0,n,55423389600,3.50903797149658,U,b,0,0,n,56962928200\n                                        ,3.82337141036987,U,b,0,0,n,58502466800,4.24205255508423,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.549681961536407\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-1.0188729763031,U,s,0,0,n,1539538600,-0.706613957881927,U,b,0,0,n,3079077200,-0.498464226722717\n                                        ,U,b,0,0,n,4618615800,-0.510826349258423,U,b,0,0,n,6158154400,-1.25446689128876,U\n                                        ,b,0,0,n,7697693000,-2.77893257141113,U,b,0,0,n,9237231600,-3.21131634712219,U,b,0\n                                        ,0,n,10776770200,-3.29442143440247,U,b,0,0,n,12316308800,-3.50326347351074,U,b,0,0\n                                        ,n,13855847400,-3.79705500602722,U,b,0,0,n,15395386000,-3.91211247444153,U,b,0,0,n\n                                        ,16934924599,-3.87932634353638,U,b,0,0,n,18474463200,-3.95266246795654,U,b,0,0,n,20014001800\n                                        ,-4.12907981872559,U,b,0,0,n,21553540400,-4.55836009979248,U,b,0,0,n,23093079000,-5.19780969619751\n                                        ,U,b,0,0,n,24632617600,-5.86074018478394,U,b,0,0,n,26172156200,-5.68002367019653,U\n                                        ,b,0,0,n,27711694800,-5.17586898803711,U,b,0,0,n,29251233400,-4.47586488723755,U,b\n                                        ,0,0,n,30790772000,-3.99478769302368,U,b,0,0,n,32330310599,-3.67567181587219,U,b,0\n                                        ,0,n,33869849199,-2.0935046672821,U,b,0,0,n,35409387800,-0.309897571802139,U,b,0,0\n                                        ,n,36948926400,2.26589298248291,U,b,0,0,n,38488465000,3.79127883911133,U,b,0,0,n,40028003600\n                                        ,3.97652554512024,U,b,0,0,n,41567542200,4.17300510406494,U,b,0,0,n,43107080800,4.38630676269531\n                                        ,U,b,0,0,n,44646619400,3.81272101402283,U,b,0,0,n,46186158000,3.2877721786499,U,b\n                                        ,0,0,n,47725696599,1.86536264419556,U,b,0,0,n,49265235200,0.483337074518204,U,b,0\n                                        ,0,n,50804773799,-0.597803354263306,U,b,0,0,n,52344312400,-0.540770590305328,U,b,0\n                                        ,0,n,53883850999,-0.0805377140641212,U,b,0,0,n,55423389600,-0.169987320899963,U,b\n                                        ,0,0,n,56962928200,-0.527960360050201,U,b,0,0,n,58502466800,-1.01844823360443,U,s\n                                        ,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -5.84038019180298\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-5.99660539627075,U,s,0,0,n,1539538600,-6.28699254989624,U,b,0,0,n,3079077200,-6.49149513244629\n                                        ,U,b,0,0,n,4618615800,-6.63033771514893,U,b,0,0,n,6158154400,-6.67092180252075,U,b\n                                        ,0,0,n,7697693000,-6.54867601394653,U,b,0,0,n,9237231600,-6.52371501922607,U,b,0,0\n                                        ,n,10776770200,-6.38706922531128,U,b,0,0,n,12316308800,-6.25086688995361,U,b,0,0,n\n                                        ,13855847400,-6.18417310714722,U,b,0,0,n,15395386000,-6.17102575302124,U,b,0,0,n,16934924599\n                                        ,-6.11461734771729,U,b,0,0,n,18474463200,-6.0587682723999,U,b,0,0,n,20014001800,-6.08407068252563\n                                        ,U,b,0,0,n,21553540400,-6.10600519180298,U,b,0,0,n,23093079000,-6.18422508239746,U\n                                        ,b,0,0,n,24632617600,-6.18777847290039,U,b,0,0,n,26172156200,-6.25842952728271,U,b\n                                        ,0,0,n,27711694800,-6.22124862670898,U,b,0,0,n,29251233400,-6.21349954605103,U,b,0\n                                        ,0,n,30790772000,-6.34050703048706,U,b,0,0,n,32330310599,-6.31043243408203,U,b,0,0\n                                        ,n,33869849199,-6.14738082885742,U,b,0,0,n,35409387800,-5.91470098495483,U,b,0,0,n\n                                        ,36948926400,-5.68788385391235,U,b,0,0,n,38488465000,-5.62817096710205,U,b,0,0,n,40028003600\n                                        ,-5.64318656921387,U,b,0,0,n,41567542200,-5.70680856704712,U,b,0,0,n,43107080800,-5.78077697753906\n                                        ,U,b,0,0,n,44646619400,-5.82882928848267,U,b,0,0,n,46186158000,-5.85919094085693,U\n                                        ,b,0,0,n,47725696599,-5.89719581604004,U,b,0,0,n,49265235200,-5.93372535705566,U,b\n                                        ,0,0,n,50804773799,-5.89044189453125,U,b,0,0,n,52344312400,-5.83110952377319,U,b,0\n                                        ,0,n,53883850999,-5.82194566726685,U,b,0,0,n,55423389600,-5.91956281661987,U,b,0,0\n                                        ,n,56962928200,-5.92924785614014,U,b,0,0,n,58502466800,-5.99667501449585,U,s,0,0,n\n                                        \n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::Spine2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.54404973983765\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.00359953194856644\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 6.19496276499376e-008\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 2.77687907218933\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,4.21171998977661,U,s,0,0,n,1539538600,4.2712836265564,U,b,0,0,n,3079077200,4.21304178237915\n                                        ,U,b,0,0,n,4618615800,4.13557195663452,U,b,0,0,n,6158154400,4.05944347381592,U,b,0\n                                        ,0,n,7697693000,3.62540078163147,U,b,0,0,n,9237231600,2.85986256599426,U,b,0,0,n,10776770200\n                                        ,2.18297958374023,U,b,0,0,n,12316308800,1.17655670642853,U,b,0,0,n,13855847400,0.347820192575455\n                                        ,U,b,0,0,n,15395386000,-0.366577237844467,U,b,0,0,n,16934924599,-1.09029531478882\n                                        ,U,b,0,0,n,18474463200,-1.74698579311371,U,b,0,0,n,20014001800,-2.44420027732849,U\n                                        ,b,0,0,n,21553540400,-2.97867250442505,U,b,0,0,n,23093079000,-3.39718413352966,U,b\n                                        ,0,0,n,24632617600,-3.89829802513123,U,b,0,0,n,26172156200,-4.24523448944092,U,b,0\n                                        ,0,n,27711694800,-4.61545133590698,U,b,0,0,n,29251233400,-5.1646728515625,U,b,0,0\n                                        ,n,30790772000,-5.51125335693359,U,b,0,0,n,32330310599,-5.47752332687378,U,b,0,0,n\n                                        ,33869849199,-5.44819688796997,U,b,0,0,n,35409387800,-5.32071018218994,U,b,0,0,n,36948926400\n                                        ,-4.96187162399292,U,b,0,0,n,38488465000,-4.81472444534302,U,b,0,0,n,40028003600,-4.13895320892334\n                                        ,U,b,0,0,n,41567542200,-3.27768659591675,U,b,0,0,n,43107080800,-2.37439298629761,U\n                                        ,b,0,0,n,44646619400,-1.28811514377594,U,b,0,0,n,46186158000,-0.288704723119736,U\n                                        ,b,0,0,n,47725696599,0.67198520898819,U,b,0,0,n,49265235200,1.60916042327881,U,b,0\n                                        ,0,n,50804773799,2.30767464637756,U,b,0,0,n,52344312400,2.86376881599426,U,b,0,0,n\n                                        ,53883850999,3.23078083992004,U,b,0,0,n,55423389600,3.68322896957397,U,b,0,0,n,56962928200\n                                        ,4.08369541168213,U,b,0,0,n,58502466800,4.21172285079956,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.67002356052399\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,1.02220392227173,U,s,0,0,n,1539538600,0.167892381548882,U,b,0,0,n,3079077200,-0.637000322341919\n                                        ,U,b,0,0,n,4618615800,-0.925316989421844,U,b,0,0,n,6158154400,-1.36520564556122,U\n                                        ,b,0,0,n,7697693000,-1.84533095359802,U,b,0,0,n,9237231600,-2.23502159118652,U,b,0\n                                        ,0,n,10776770200,-2.01210498809814,U,b,0,0,n,12316308800,-1.81131029129028,U,b,0,0\n                                        ,n,13855847400,-1.84087896347046,U,b,0,0,n,15395386000,-1.74684023857117,U,b,0,0,n\n                                        ,16934924599,-1.53738188743591,U,b,0,0,n,18474463200,-1.4414336681366,U,b,0,0,n,20014001800\n                                        ,-1.29482781887054,U,b,0,0,n,21553540400,-1.30542862415314,U,b,0,0,n,23093079000,-1.32650983333588\n                                        ,U,b,0,0,n,24632617600,-1.40518617630005,U,b,0,0,n,26172156200,-1.25028300285339,U\n                                        ,b,0,0,n,27711694800,-0.850792050361633,U,b,0,0,n,29251233400,-0.589711844921112,U\n                                        ,b,0,0,n,30790772000,0.0867897123098373,U,b,0,0,n,32330310599,0.569887399673462,U\n                                        ,b,0,0,n,33869849199,1.26170039176941,U,b,0,0,n,35409387800,1.79960250854492,U,b,0\n                                        ,0,n,36948926400,2.37976002693176,U,b,0,0,n,38488465000,2.57381725311279,U,b,0,0,n\n                                        ,40028003600,2.38427472114563,U,b,0,0,n,41567542200,2.21694493293762,U,b,0,0,n,43107080800\n                                        ,2.23055410385132,U,b,0,0,n,44646619400,2.21480751037598,U,b,0,0,n,46186158000,2.36171722412109\n                                        ,U,b,0,0,n,47725696599,2.17892503738403,U,b,0,0,n,49265235200,1.92848348617554,U,b\n                                        ,0,0,n,50804773799,1.6868542432785,U,b,0,0,n,52344312400,1.66690671443939,U,b,0,0\n                                        ,n,53883850999,1.72546064853668,U,b,0,0,n,55423389600,1.68861603736877,U,b,0,0,n,56962928200\n                                        ,1.40967237949371,U,b,0,0,n,58502466800,1.02225828170776,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 5.42585277557373\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,4.80606698989868,U,s,0,0,n,1539538600,4.26464557647705,U,b,0,0,n,3079077200,3.94525647163391\n                                        ,U,b,0,0,n,4618615800,3.7967050075531,U,b,0,0,n,6158154400,3.74953985214233,U,b,0\n                                        ,0,n,7697693000,3.87530541419983,U,b,0,0,n,9237231600,3.94919872283936,U,b,0,0,n,10776770200\n                                        ,4.26064586639404,U,b,0,0,n,12316308800,4.54842376708984,U,b,0,0,n,13855847400,4.6888599395752\n                                        ,U,b,0,0,n,15395386000,4.71331167221069,U,b,0,0,n,16934924599,4.81206798553467,U,b\n                                        ,0,0,n,18474463200,4.90908050537109,U,b,0,0,n,20014001800,4.85114526748657,U,b,0,0\n                                        ,n,21553540400,4.82134103775024,U,b,0,0,n,23093079000,4.70961236953735,U,b,0,0,n,24632617600\n                                        ,4.72870874404907,U,b,0,0,n,26172156200,4.50869178771973,U,b,0,0,n,27711694800,4.48198318481445\n                                        ,U,b,0,0,n,29251233400,4.35396671295166,U,b,0,0,n,30790772000,4.0003228187561,U,b\n                                        ,0,0,n,32330310599,4.0010232925415,U,b,0,0,n,33869849199,4.12131357192993,U,b,0,0\n                                        ,n,35409387800,4.45102882385254,U,b,0,0,n,36948926400,4.70578002929688,U,b,0,0,n,38488465000\n                                        ,4.82036638259888,U,b,0,0,n,40028003600,4.94186496734619,U,b,0,0,n,41567542200,5.00629329681396\n                                        ,U,b,0,0,n,43107080800,5.04687213897705,U,b,0,0,n,44646619400,5.13646745681763,U,b\n                                        ,0,0,n,46186158000,5.23398971557617,U,b,0,0,n,47725696599,5.24857759475708,U,b,0,0\n                                        ,n,49265235200,5.22112941741943,U,b,0,0,n,50804773799,5.31984567642212,U,b,0,0,n,52344312400\n                                        ,5.44548368453979,U,b,0,0,n,53883850999,5.50193071365356,U,b,0,0,n,55423389600,5.27972841262817\n                                        ,U,b,0,0,n,56962928200,5.16126871109009,U,b,0,0,n,58502466800,4.80600023269653,U,s\n                                        ,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.999999940395355\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::Spine3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.5439600944519\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.00439895549789071\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 2.22052122467176e-007\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 2.87556838989258\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,4.26669597625732,U,s,0,0,n,1539538600,4.27680253982544,U,b,0,0,n,3079077200,4.17009782791138\n                                        ,U,b,0,0,n,4618615800,4.07435750961304,U,b,0,0,n,6158154400,3.9749960899353,U,b,0\n                                        ,0,n,7697693000,3.52316498756409,U,b,0,0,n,9237231600,2.73670935630798,U,b,0,0,n,10776770200\n                                        ,2.0722713470459,U,b,0,0,n,12316308800,1.07881498336792,U,b,0,0,n,13855847400,0.249576792120934\n                                        ,U,b,0,0,n,15395386000,-0.458571910858154,U,b,0,0,n,16934924599,-1.17001628875732\n                                        ,U,b,0,0,n,18474463200,-1.82126951217651,U,b,0,0,n,20014001800,-2.50925016403198,U\n                                        ,b,0,0,n,21553540400,-3.0449001789093,U,b,0,0,n,23093079000,-3.46653723716736,U,b\n                                        ,0,0,n,24632617600,-3.97277998924255,U,b,0,0,n,26172156200,-4.3066520690918,U,b,0\n                                        ,0,n,27711694800,-4.65047311782837,U,b,0,0,n,29251233400,-5.1808910369873,U,b,0,0\n                                        ,n,30790772000,-5.4833869934082,U,b,0,0,n,32330310599,-5.42137479782104,U,b,0,0,n\n                                        ,33869849199,-5.35843563079834,U,b,0,0,n,35409387800,-5.21149396896362,U,b,0,0,n,36948926400\n                                        ,-4.83615112304688,U,b,0,0,n,38488465000,-4.6847825050354,U,b,0,0,n,40028003600,-4.01465129852295\n                                        ,U,b,0,0,n,41567542200,-3.15834784507751,U,b,0,0,n,43107080800,-2.25137376785278,U\n                                        ,b,0,0,n,44646619400,-1.16114020347595,U,b,0,0,n,46186158000,-0.149704769253731,U\n                                        ,b,0,0,n,47725696599,0.802072882652283,U,b,0,0,n,49265235200,1.7240469455719,U,b,0\n                                        ,0,n,50804773799,2.4079372882843,U,b,0,0,n,52344312400,2.96216678619385,U,b,0,0,n\n                                        ,53883850999,3.3323380947113,U,b,0,0,n,55423389600,3.78085255622864,U,b,0,0,n,56962928200\n                                        ,4.16305780410767,U,b,0,0,n,58502466800,4.26670169830322,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.50368475914001\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,0.787933647632599,U,s,0,0,n,1539538600,-0.0718894153833389,U,b,0,0,n,3079077200\n                                        ,-0.876808941364288,U,b,0,0,n,4618615800,-1.16508829593658,U,b,0,0,n,6158154400,-1.60057973861694\n                                        ,U,b,0,0,n,7697693000,-2.04907512664795,U,b,0,0,n,9237231600,-2.39522051811218,U,b\n                                        ,0,0,n,10776770200,-2.13475513458252,U,b,0,0,n,12316308800,-1.87663209438324,U,b,0\n                                        ,0,n,13855847400,-1.85837459564209,U,b,0,0,n,15395386000,-1.7230316400528,U,b,0,0\n                                        ,n,16934924599,-1.47123837471008,U,b,0,0,n,18474463200,-1.33587408065796,U,b,0,0,n\n                                        ,20014001800,-1.14628183841705,U,b,0,0,n,21553540400,-1.12079334259033,U,b,0,0,n,23093079000\n                                        ,-1.1088809967041,U,b,0,0,n,24632617600,-1.14973270893097,U,b,0,0,n,26172156200,-0.975321590900421\n                                        ,U,b,0,0,n,27711694800,-0.558445692062378,U,b,0,0,n,29251233400,-0.272979378700256\n                                        ,U,b,0,0,n,30790772000,0.416422963142395,U,b,0,0,n,32330310599,0.89169704914093,U\n                                        ,b,0,0,n,33869849199,1.56528568267822,U,b,0,0,n,35409387800,2.0847864151001,U,b,0\n                                        ,0,n,36948926400,2.63056588172913,U,b,0,0,n,38488465000,2.81273245811462,U,b,0,0,n\n                                        ,40028003600,2.59515976905823,U,b,0,0,n,41567542200,2.38934993743896,U,b,0,0,n,43107080800\n                                        ,2.35858821868896,U,b,0,0,n,44646619400,2.28465604782104,U,b,0,0,n,46186158000,2.37341809272766\n                                        ,U,b,0,0,n,47725696599,2.13284397125244,U,b,0,0,n,49265235200,1.82704448699951,U,b\n                                        ,0,0,n,50804773799,1.54720211029053,U,b,0,0,n,52344312400,1.4956259727478,U,b,0,0\n                                        ,n,53883850999,1.53234124183655,U,b,0,0,n,55423389600,1.47209131717682,U,b,0,0,n,56962928200\n                                        ,1.1745845079422,U,b,0,0,n,58502466800,0.787983417510986,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.25706577301025\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,2.6328809261322,U,s,0,0,n,1539538600,2.08385896682739,U,b,0,0,n,3079077200,1.75937294960022\n                                        ,U,b,0,0,n,4618615800,1.60967719554901,U,b,0,0,n,6158154400,1.56865286827087,U,b,0\n                                        ,0,n,7697693000,1.71073079109192,U,b,0,0,n,9237231600,1.78903245925903,U,b,0,0,n,10776770200\n                                        ,2.10083317756653,U,b,0,0,n,12316308800,2.38934850692749,U,b,0,0,n,13855847400,2.52897930145264\n                                        ,U,b,0,0,n,15395386000,2.55087852478027,U,b,0,0,n,16934924599,2.64600205421448,U,b\n                                        ,0,0,n,18474463200,2.73904800415039,U,b,0,0,n,20014001800,2.67513680458069,U,b,0,0\n                                        ,n,21553540400,2.63869524002075,U,b,0,0,n,23093079000,2.51980686187744,U,b,0,0,n,24632617600\n                                        ,2.52859234809875,U,b,0,0,n,26172156200,2.30488014221191,U,b,0,0,n,27711694800,2.27742004394531\n                                        ,U,b,0,0,n,29251233400,2.1473240852356,U,b,0,0,n,30790772000,1.79020631313324,U,b\n                                        ,0,0,n,32330310599,1.79111814498901,U,b,0,0,n,33869849199,1.92334270477295,U,b,0,0\n                                        ,n,35409387800,2.27183723449707,U,b,0,0,n,36948926400,2.55550336837769,U,b,0,0,n,38488465000\n                                        ,2.68779468536377,U,b,0,0,n,40028003600,2.80555462837219,U,b,0,0,n,41567542200,2.86495971679688\n                                        ,U,b,0,0,n,43107080800,2.89918780326843,U,b,0,0,n,44646619400,2.97587370872498,U,b\n                                        ,0,0,n,46186158000,3.06427073478699,U,b,0,0,n,47725696599,3.07335162162781,U,b,0,0\n                                        ,n,49265235200,3.04690766334534,U,b,0,0,n,50804773799,3.15141630172729,U,b,0,0,n,52344312400\n                                        ,3.27663040161133,U,b,0,0,n,53883850999,3.32874035835266,U,b,0,0,n,55423389600,3.10568165779114\n                                        ,U,b,0,0,n,56962928200,2.98690795898438,U,b,0,0,n,58502466800,2.63281226158142,U,s\n                                        ,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1.00000011920929\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.00000011920929\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::Neck\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 5.53625154495239\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.00288246641866863\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 5.17475982064752e-008\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -6.63933753967285\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-6.50985336303711,U,s,0,0,n,1539538600,-6.34243774414063,U,b,0,0,n,3079077200,-6.17116498947144\n                                        ,U,b,0,0,n,4618615800,-5.87293672561646,U,b,0,0,n,6158154400,-5.55335283279419,U,b\n                                        ,0,0,n,7697693000,-5.16724252700806,U,b,0,0,n,9237231600,-4.86049747467041,U,b,0,0\n                                        ,n,10776770200,-4.56406736373901,U,b,0,0,n,12316308800,-4.35878133773804,U,b,0,0,n\n                                        ,13855847400,-4.1984076499939,U,b,0,0,n,15395386000,-4.01876831054688,U,b,0,0,n,16934924599\n                                        ,-3.94514966011047,U,b,0,0,n,18474463200,-3.90984058380127,U,b,0,0,n,20014001800,-3.87429475784302\n                                        ,U,b,0,0,n,21553540400,-3.91103887557983,U,b,0,0,n,23093079000,-3.95947742462158,U\n                                        ,b,0,0,n,24632617600,-3.98367023468018,U,b,0,0,n,26172156200,-4.059006690979,U,b,0\n                                        ,0,n,27711694800,-4.12500429153442,U,b,0,0,n,29251233400,-4.20732021331787,U,b,0,0\n                                        ,n,30790772000,-4.26929712295532,U,b,0,0,n,32330310599,-4.3888988494873,U,b,0,0,n\n                                        ,33869849199,-4.51629686355591,U,b,0,0,n,35409387800,-4.82515239715576,U,b,0,0,n,36948926400\n                                        ,-5.16099500656128,U,b,0,0,n,38488465000,-5.4272632598877,U,b,0,0,n,40028003600,-5.64088487625122\n                                        ,U,b,0,0,n,41567542200,-5.92425155639648,U,b,0,0,n,43107080800,-6.19848823547363,U\n                                        ,b,0,0,n,44646619400,-6.3860936164856,U,b,0,0,n,46186158000,-6.53064870834351,U,b\n                                        ,0,0,n,47725696599,-6.60066270828247,U,b,0,0,n,49265235200,-6.60256814956665,U,b,0\n                                        ,0,n,50804773799,-6.59214687347412,U,b,0,0,n,52344312400,-6.64807653427124,U,b,0,0\n                                        ,n,53883850999,-6.63038301467896,U,b,0,0,n,55423389600,-6.58388376235962,U,b,0,0,n\n                                        ,56962928200,-6.55215167999268,U,b,0,0,n,58502466800,-6.50949907302856,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.94592773914337\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,3.10782909393311,U,s,0,0,n,1539538600,3.15372705459595,U,b,0,0,n,3079077200,3.26352620124817\n                                        ,U,b,0,0,n,4618615800,3.30459785461426,U,b,0,0,n,6158154400,3.31880855560303,U,b,0\n                                        ,0,n,7697693000,3.29872751235962,U,b,0,0,n,9237231600,3.13967609405518,U,b,0,0,n,10776770200\n                                        ,2.92873477935791,U,b,0,0,n,12316308800,2.65748357772827,U,b,0,0,n,13855847400,2.3400297164917\n                                        ,U,b,0,0,n,15395386000,2.1075394153595,U,b,0,0,n,16934924599,1.84664964675903,U,b\n                                        ,0,0,n,18474463200,1.65942215919495,U,b,0,0,n,20014001800,1.39008951187134,U,b,0,0\n                                        ,n,21553540400,1.17455327510834,U,b,0,0,n,23093079000,0.948708355426788,U,b,0,0,n\n                                        ,24632617600,0.663798213005066,U,b,0,0,n,26172156200,0.37201651930809,U,b,0,0,n,27711694800\n                                        ,0.142322227358818,U,b,0,0,n,29251233400,-0.291439920663834,U,b,0,0,n,30790772000\n                                        ,-0.494728177785873,U,b,0,0,n,32330310599,-0.605236172676086,U,b,0,0,n,33869849199\n                                        ,-0.874600470066071,U,b,0,0,n,35409387800,-1.04559946060181,U,b,0,0,n,36948926400\n                                        ,-1.14511287212372,U,b,0,0,n,38488465000,-1.08204221725464,U,b,0,0,n,40028003600,-1.01589608192444\n                                        ,U,b,0,0,n,41567542200,-0.755206346511841,U,b,0,0,n,43107080800,-0.465363204479218\n                                        ,U,b,0,0,n,44646619400,-0.0203571431338787,U,b,0,0,n,46186158000,0.389585077762604\n                                        ,U,b,0,0,n,47725696599,0.828381180763245,U,b,0,0,n,49265235200,1.28664910793304,U\n                                        ,b,0,0,n,50804773799,1.70117425918579,U,b,0,0,n,52344312400,1.99125242233276,U,b,0\n                                        ,0,n,53883850999,2.28074097633362,U,b,0,0,n,55423389600,2.57186055183411,U,b,0,0,n\n                                        ,56962928200,2.87960648536682,U,b,0,0,n,58502466800,3.10924959182739,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 28.7092266082764\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,28.8077507019043,U,s,0,0,n,1539538600,29.0686359405518,U,b,0,0,n,3079077200,29.230375289917\n                                        ,U,b,0,0,n,4618615800,29.4623489379883,U,b,0,0,n,6158154400,29.5202732086182,U,b,0\n                                        ,0,n,7697693000,29.3986206054688,U,b,0,0,n,9237231600,29.4671821594238,U,b,0,0,n,10776770200\n                                        ,29.613374710083,U,b,0,0,n,12316308800,29.572452545166,U,b,0,0,n,13855847400,29.5821571350098\n                                        ,U,b,0,0,n,15395386000,29.4724025726318,U,b,0,0,n,16934924599,29.2568225860596,U,b\n                                        ,0,0,n,18474463200,28.9960174560547,U,b,0,0,n,20014001800,28.753662109375,U,b,0,0\n                                        ,n,21553540400,28.610689163208,U,b,0,0,n,23093079000,28.4758110046387,U,b,0,0,n,24632617600\n                                        ,28.5176010131836,U,b,0,0,n,26172156200,28.3947124481201,U,b,0,0,n,27711694800,28.2426300048828\n                                        ,U,b,0,0,n,29251233400,28.2624759674072,U,b,0,0,n,30790772000,28.4060916900635,U,b\n                                        ,0,0,n,32330310599,28.5278511047363,U,b,0,0,n,33869849199,28.5773525238037,U,b,0,0\n                                        ,n,35409387800,28.598762512207,U,b,0,0,n,36948926400,28.4639167785645,U,b,0,0,n,38488465000\n                                        ,28.4530296325684,U,b,0,0,n,40028003600,28.7801837921143,U,b,0,0,n,41567542200,28.9436645507813\n                                        ,U,b,0,0,n,43107080800,29.1370334625244,U,b,0,0,n,44646619400,29.283561706543,U,b\n                                        ,0,0,n,46186158000,29.2753925323486,U,b,0,0,n,47725696599,29.1297664642334,U,b,0,0\n                                        ,n,49265235200,28.9833030700684,U,b,0,0,n,50804773799,28.7680988311768,U,b,0,0,n,52344312400\n                                        ,28.6983242034912,U,b,0,0,n,53883850999,28.7783298492432,U,b,0,0,n,55423389600,28.7602767944336\n                                        ,U,b,0,0,n,56962928200,28.7654609680176,U,b,0,0,n,58502466800,28.807746887207,U,s\n                                        ,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.999999940395355\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::Head\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 3.95389556884766\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.09085840449552e-006\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 9.73389049363504e-008\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 1.423987865448\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-1.80691289901733,U,s,0,0,n,1539538600,-1.97035908699036,U,b,0,0,n,3079077200,-1.99738276004791\n                                        ,U,b,0,0,n,4618615800,-1.61678695678711,U,b,0,0,n,6158154400,-1.11915063858032,U,b\n                                        ,0,0,n,7697693000,-0.518654227256775,U,b,0,0,n,9237231600,0.552345931529999,U,b,0\n                                        ,0,n,10776770200,1.4349992275238,U,b,0,0,n,12316308800,2.70627760887146,U,b,0,0,n\n                                        ,13855847400,3.98707342147827,U,b,0,0,n,15395386000,4.94014596939087,U,b,0,0,n,16934924599\n                                        ,6.09693002700806,U,b,0,0,n,18474463200,7.33829879760742,U,b,0,0,n,20014001800,8.36240577697754\n                                        ,U,b,0,0,n,21553540400,9.40591526031494,U,b,0,0,n,23093079000,10.5001678466797,U,b\n                                        ,0,0,n,24632617600,11.5033760070801,U,b,0,0,n,26172156200,12.3442878723145,U,b,0,0\n                                        ,n,27711694800,13.1462364196777,U,b,0,0,n,29251233400,13.7641925811768,U,b,0,0,n,30790772000\n                                        ,14.2128038406372,U,b,0,0,n,32330310599,14.6460361480713,U,b,0,0,n,33869849199,14.5374450683594\n                                        ,U,b,0,0,n,35409387800,14.0290603637695,U,b,0,0,n,36948926400,13.5150384902954,U,b\n                                        ,0,0,n,38488465000,12.9726638793945,U,b,0,0,n,40028003600,12.0242357254028,U,b,0,0\n                                        ,n,41567542200,10.7238969802856,U,b,0,0,n,43107080800,9.58399200439453,U,b,0,0,n,44646619400\n                                        ,8.19679546356201,U,b,0,0,n,46186158000,6.7331109046936,U,b,0,0,n,47725696599,5.37427806854248\n                                        ,U,b,0,0,n,49265235200,3.82038307189941,U,b,0,0,n,50804773799,2.52216649055481,U,b\n                                        ,0,0,n,52344312400,1.22062146663666,U,b,0,0,n,53883850999,0.124715946614742,U,b,0\n                                        ,0,n,55423389600,-0.726902782917023,U,b,0,0,n,56962928200,-1.34747731685638,U,b,0\n                                        ,0,n,58502466800,-1.80652630329132,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.918177843093872\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-0.00161192461382598,U,s,0,0,n,1539538600,0.578881621360779,U,b,0,0,n,3079077200\n                                        ,1.42044842243195,U,b,0,0,n,4618615800,1.96717536449432,U,b,0,0,n,6158154400,2.79733824729919\n                                        ,U,b,0,0,n,7697693000,3.69697856903076,U,b,0,0,n,9237231600,4.48847103118896,U,b,0\n                                        ,0,n,10776770200,4.87794494628906,U,b,0,0,n,12316308800,4.99018144607544,U,b,0,0,n\n                                        ,13855847400,5.06639528274536,U,b,0,0,n,15395386000,4.82608127593994,U,b,0,0,n,16934924599\n                                        ,4.55009651184082,U,b,0,0,n,18474463200,4.32160615921021,U,b,0,0,n,20014001800,3.79053521156311\n                                        ,U,b,0,0,n,21553540400,3.46875333786011,U,b,0,0,n,23093079000,2.92119479179382,U,b\n                                        ,0,0,n,24632617600,2.32047009468079,U,b,0,0,n,26172156200,1.57333052158356,U,b,0,0\n                                        ,n,27711694800,0.525623679161072,U,b,0,0,n,29251233400,0.257216960191727,U,b,0,0,n\n                                        ,30790772000,-0.402374744415283,U,b,0,0,n,32330310599,-0.882453620433807,U,b,0,0,n\n                                        ,33869849199,-1.94104313850403,U,b,0,0,n,35409387800,-2.51266551017761,U,b,0,0,n,36948926400\n                                        ,-2.92598605155945,U,b,0,0,n,38488465000,-2.86707091331482,U,b,0,0,n,40028003600,-2.72080659866333\n                                        ,U,b,0,0,n,41567542200,-2.48648309707642,U,b,0,0,n,43107080800,-2.54744982719421,U\n                                        ,b,0,0,n,44646619400,-2.4865415096283,U,b,0,0,n,46186158000,-2.50900363922119,U,b\n                                        ,0,0,n,47725696599,-2.17134070396423,U,b,0,0,n,49265235200,-1.68576562404633,U,b,0\n                                        ,0,n,50804773799,-1.20596015453339,U,b,0,0,n,52344312400,-0.864884853363037,U,b,0\n                                        ,0,n,53883850999,-0.826086103916168,U,b,0,0,n,55423389600,-0.678050816059113,U,b,0\n                                        ,0,n,56962928200,-0.438873142004013,U,b,0,0,n,58502466800,-0.000742652104236186,U\n                                        ,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -18.9311122894287\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-17.5020866394043,U,s,0,0,n,1539538600,-16.2671375274658,U,b,0,0,n,3079077200,-15.3190317153931\n                                        ,U,b,0,0,n,4618615800,-14.6331357955933,U,b,0,0,n,6158154400,-14.4730443954468,U,b\n                                        ,0,0,n,7697693000,-14.6115694046021,U,b,0,0,n,9237231600,-14.9904623031616,U,b,0,0\n                                        ,n,10776770200,-15.3826704025269,U,b,0,0,n,12316308800,-16.064432144165,U,b,0,0,n\n                                        ,13855847400,-16.074275970459,U,b,0,0,n,15395386000,-16.0850944519043,U,b,0,0,n,16934924599\n                                        ,-16.1272392272949,U,b,0,0,n,18474463200,-16.2498207092285,U,b,0,0,n,20014001800,-16.3057804107666\n                                        ,U,b,0,0,n,21553540400,-16.5470848083496,U,b,0,0,n,23093079000,-16.474048614502,U\n                                        ,b,0,0,n,24632617600,-16.5594730377197,U,b,0,0,n,26172156200,-16.5632972717285,U,b\n                                        ,0,0,n,27711694800,-16.7160797119141,U,b,0,0,n,29251233400,-16.4269790649414,U,b,0\n                                        ,0,n,30790772000,-15.9650468826294,U,b,0,0,n,32330310599,-15.7378406524658,U,b,0,0\n                                        ,n,33869849199,-15.3399515151978,U,b,0,0,n,35409387800,-15.4762744903564,U,b,0,0,n\n                                        ,36948926400,-15.7865495681763,U,b,0,0,n,38488465000,-16.3693962097168,U,b,0,0,n,40028003600\n                                        ,-16.8539447784424,U,b,0,0,n,41567542200,-17.3382911682129,U,b,0,0,n,43107080800,-17.4360446929932\n                                        ,U,b,0,0,n,44646619400,-17.5780067443848,U,b,0,0,n,46186158000,-17.8373641967773,U\n                                        ,b,0,0,n,47725696599,-18.1145343780518,U,b,0,0,n,49265235200,-18.5177230834961,U,b\n                                        ,0,0,n,50804773799,-18.8919982910156,U,b,0,0,n,52344312400,-18.9383563995361,U,b,0\n                                        ,0,n,53883850999,-18.9389743804932,U,b,0,0,n,55423389600,-18.7123146057129,U,b,0,0\n                                        ,n,56962928200,-18.2596683502197,U,b,0,0,n,58502466800,-17.5019493103027,U,s,0,0,n\n                                        \n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1.00000011920929\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.00000011920929\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_eye_joint1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.22069501876831\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.4060525894165\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.39484596252441\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 3.26757836341858\n                        KeyVer: 4005\n                        KeyCount: 6\n                        Key: 3848846500,3.71123075485229,U,s,58.4978866577148,0,n,9622116250,11.0234661102295,U\n                                        ,s,0,0,n,15395386000,3.71123075485229,U,s,0,0,n,38488465000,3.71123075485229,U,s,0\n                                        ,0,n,44261734750,2,U,s,0,0,n,55808274250,3.71123075485229,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_eye_joint\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.29626369476318\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.33319282531738\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -1.0660924911499\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 3.26757836341858\n                        KeyVer: 4005\n                        KeyCount: 6\n                        Key: 3848846500,3.71123075485229,U,s,58.4978866577148,0,n,9622116250,11.0234661102295,U\n                                        ,s,0,0,n,15395386000,3.71123075485229,U,s,0,0,n,38488465000,3.71123075485229,U,s,0\n                                        ,0,n,44261734750,2,U,s,0,0,n,55808274250,3.71123075485229,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_eyeBall_joint2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.48259973526001\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 3.2479395866394\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.27459120750427\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 1.07939505577087\n                        KeyVer: 4005\n                        KeyCount: 9\n                        Key: 0,4.6336350440979,U,s,0,0,n,3848846500,2.58416104316711,U,s,0,0,n,7697693000,2.18038606643677\n                                        ,U,s,0,0,n,19244232500,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,1.6339545249939\n                                        ,U,s,0,-4.90186357498169,n,42337311500,-3.50988411903381,U,s,-4.90186357498169,24.4305572509766\n                                        ,n,50035004500,0,U,s,24.4305572509766,27.8018093109131,n,57732697500,4.6336350440979\n                                        ,U,s,27.8018093109131,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0\n                        KeyVer: 4005\n                        KeyCount: 9\n                        Key: 0,0,U,s,0,0,n,3848846500,0,U,s,0,0,n,7697693000,0,U,s,0,0,n,19244232500,0,U,s,0,0\n                                        ,n,30790772000,0,U,s,0,0,n,34639618500,0,U,s,0,0,n,42337311500,0,U,s,0,0,n,50035004500\n                                        ,0,U,s,0,0,n,57732697500,0,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.00536951329559088\n                        KeyVer: 4005\n                        KeyCount: 9\n                        Key: 0,0.0343648828566074,U,s,0,0,n,3848846500,0,U,s,0,0,n,7697693000,6.8687949180603,U\n                                        ,s,0,0,n,19244232500,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,0,U,s,0,0,n,42337311500\n                                        ,0,U,s,0,0,n,50035004500,0,U,s,0,0,n,57732697500,0.0343648828566074,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_eyeBall_joint\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.57700967788696\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 3.10706281661987\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -1.20767879486084\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 0.292065471410751\n                        KeyVer: 4005\n                        KeyCount: 9\n                        Key: 0,1.86921894550323,U,s,0,0,n,3848846500,2.58416104316711,U,s,0,0,n,7697693000,2.18038606643677\n                                        ,U,s,0,0,n,19244232500,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,1.6339545249939\n                                        ,U,s,0,-4.90186357498169,n,42337311500,-3.50988411903381,U,s,-4.90186357498169,0,n\n                                        ,50035004500,0,U,s,0,0,n,57732697500,1.86921894550323,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.0640802830457687\n                        KeyVer: 4005\n                        KeyCount: 9\n                        Key: 0,0.41011381149292,U,s,0,0,n,3848846500,0,U,s,0,0,n,7697693000,0,U,s,0,0,n,19244232500\n                                        ,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,0,U,s,0,0,n,42337311500,0,U,s,0,0\n                                        ,n,50035004500,0,U,s,0,0,n,57732697500,0.41011381149292,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.30150443315506\n                        KeyVer: 4005\n                        KeyCount: 9\n                        Key: 0,1.92962849140167,U,s,0,0,n,3848846500,0,U,s,0,0,n,7697693000,6.8687949180603,U,s\n                                        ,0,0,n,19244232500,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,0,U,s,0,0,n,42337311500\n                                        ,0,U,s,0,0,n,50035004500,0,U,s,0,0,n,57732697500,1.92962849140167,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_UpperArm\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 6.71029043197632\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,6.70492362976074,U,s,0,0,n,1539538600,6.71029472351074,U,b,0,0,n,3079077200,6.7145791053772\n                                        ,U,b,0,0,n,4618615800,6.72306871414185,U,b,0,0,n,6158154400,6.73136234283447,U,b,0\n                                        ,0,n,7697693000,6.74064540863037,U,b,0,0,n,9237231600,6.74988317489624,U,b,0,0,n,10776770200\n                                        ,6.75938081741333,U,b,0,0,n,12316308800,6.76633453369141,U,b,0,0,n,13855847400,6.77258920669556\n                                        ,U,b,0,0,n,15395386000,6.77790832519531,U,b,0,0,n,16934924599,6.78056287765503,U,b\n                                        ,0,0,n,18474463200,6.78159475326538,U,b,0,0,n,20014001800,6.78307914733887,U,b,0,0\n                                        ,n,21553540400,6.78289890289307,U,b,0,0,n,23093079000,6.78241062164307,U,b,0,0,n,24632617600\n                                        ,6.78321647644043,U,b,0,0,n,26172156200,6.78207731246948,U,b,0,0,n,27711694800,6.78065013885498\n                                        ,U,b,0,0,n,29251233400,6.77971506118774,U,b,0,0,n,30790772000,6.77910661697388,U,b\n                                        ,0,0,n,32330310599,6.77692222595215,U,b,0,0,n,33869849199,6.77424430847168,U,b,0,0\n                                        ,n,35409387800,6.766930103302,U,b,0,0,n,36948926400,6.75801753997803,U,b,0,0,n,38488465000\n                                        ,6.75124311447144,U,b,0,0,n,40028003600,6.74721002578735,U,b,0,0,n,41567542200,6.74049711227417\n                                        ,U,b,0,0,n,43107080800,6.7338342666626,U,b,0,0,n,44646619400,6.72872543334961,U,b\n                                        ,0,0,n,46186158000,6.72364711761475,U,b,0,0,n,47725696599,6.71943998336792,U,b,0,0\n                                        ,n,49265235200,6.71657228469849,U,b,0,0,n,50804773799,6.71349239349365,U,b,0,0,n,52344312400\n                                        ,6.70969724655151,U,b,0,0,n,53883850999,6.70849370956421,U,b,0,0,n,55423389600,6.70741271972656\n                                        ,U,b,0,0,n,56962928200,6.70566749572754,U,b,0,0,n,58502466800,6.70491981506348,U,s\n                                        ,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.844819128513336\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,0.887522101402283,U,s,0,0,n,1539538600,0.863622903823853,U,b,0,0,n,3079077200,0.844627976417542\n                                        ,U,b,0,0,n,4618615800,0.804719626903534,U,b,0,0,n,6158154400,0.764341175556183,U,b\n                                        ,0,0,n,7697693000,0.717564165592194,U,b,0,0,n,9237231600,0.669339299201965,U,b,0,0\n                                        ,n,10776770200,0.617936432361603,U,b,0,0,n,12316308800,0.578567922115326,U,b,0,0,n\n                                        ,13855847400,0.541216611862183,U,b,0,0,n,15395386000,0.508421957492828,U,b,0,0,n,16934924599\n                                        ,0.489598900079727,U,b,0,0,n,18474463200,0.48047736287117,U,b,0,0,n,20014001800,0.466469615697861\n                                        ,U,b,0,0,n,21553540400,0.462405294179916,U,b,0,0,n,23093079000,0.459077715873718,U\n                                        ,b,0,0,n,24632617600,0.445806592702866,U,b,0,0,n,26172156200,0.442016631364822,U,b\n                                        ,0,0,n,27711694800,0.440998107194901,U,b,0,0,n,29251233400,0.427376478910446,U,b,0\n                                        ,0,n,30790772000,0.421175062656403,U,b,0,0,n,32330310599,0.427798241376877,U,b,0,0\n                                        ,n,33869849199,0.428231120109558,U,b,0,0,n,35409387800,0.457660555839539,U,b,0,0,n\n                                        ,36948926400,0.497647345066071,U,b,0,0,n,38488465000,0.535084784030914,U,b,0,0,n,40028003600\n                                        ,0.559000313282013,U,b,0,0,n,41567542200,0.605636775493622,U,b,0,0,n,43107080800,0.651965856552124\n                                        ,U,b,0,0,n,44646619400,0.69654244184494,U,b,0,0,n,46186158000,0.736880421638489,U\n                                        ,b,0,0,n,47725696599,0.77210545539856,U,b,0,0,n,49265235200,0.799710333347321,U,b\n                                        ,0,0,n,50804773799,0.824783504009247,U,b,0,0,n,52344312400,0.848529458045959,U,b,0\n                                        ,0,n,53883850999,0.859884083271027,U,b,0,0,n,55423389600,0.86971640586853,U,b,0,0\n                                        ,n,56962928200,0.881754159927368,U,b,0,0,n,58502466800,0.88755214214325,U,s,0,0,n\n                                        \n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.0320546366274357\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-0.127745091915131,U,s,0,0,n,1539538600,-0.145422741770744,U,b,0,0,n,3079077200\n                                        ,-0.170472517609596,U,b,0,0,n,4618615800,-0.193888619542122,U,b,0,0,n,6158154400,-0.212876334786415\n                                        ,U,b,0,0,n,7697693000,-0.228747516870499,U,b,0,0,n,9237231600,-0.224704831838608,U\n                                        ,b,0,0,n,10776770200,-0.214349955320358,U,b,0,0,n,12316308800,-0.189209207892418,U\n                                        ,b,0,0,n,13855847400,-0.15633636713028,U,b,0,0,n,15395386000,-0.13415415585041,U,b\n                                        ,0,0,n,16934924599,-0.10144080221653,U,b,0,0,n,18474463200,-0.0757490321993828,U,b\n                                        ,0,0,n,20014001800,-0.0395854488015175,U,b,0,0,n,21553540400,-0.007827153429389,U\n                                        ,b,0,0,n,23093079000,0.0257970038801432,U,b,0,0,n,24632617600,0.0636618435382843,U\n                                        ,b,0,0,n,26172156200,0.107155330479145,U,b,0,0,n,27711694800,0.142453283071518,U,b\n                                        ,0,0,n,29251233400,0.203028917312622,U,b,0,0,n,30790772000,0.230993941426277,U,b,0\n                                        ,0,n,32330310599,0.250197023153305,U,b,0,0,n,33869849199,0.29137721657753,U,b,0,0\n                                        ,n,35409387800,0.329647749662399,U,b,0,0,n,36948926400,0.361892372369766,U,b,0,0,n\n                                        ,38488465000,0.367755472660065,U,b,0,0,n,40028003600,0.366333961486816,U,b,0,0,n,41567542200\n                                        ,0.345156729221344,U,b,0,0,n,43107080800,0.319288522005081,U,b,0,0,n,44646619400,0.269180327653885\n                                        ,U,b,0,0,n,46186158000,0.22319570183754,U,b,0,0,n,47725696599,0.171182468533516,U\n                                        ,b,0,0,n,49265235200,0.113110974431038,U,b,0,0,n,50804773799,0.0609440170228481,U\n                                        ,b,0,0,n,52344312400,0.02670475281775,U,b,0,0,n,53883850999,-0.0130311502143741,U\n                                        ,b,0,0,n,55423389600,-0.0532764717936516,U,b,0,0,n,56962928200,-0.0952207893133163\n                                        ,U,b,0,0,n,58502466800,-0.127948939800262,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 9.80766296386719\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,16.9826946258545,U,s,0,0,n,1539538600,15.2837333679199,U,b,0,0,n,3079077200,12.0478639602661\n                                        ,U,b,0,0,n,4618615800,8.41190242767334,U,b,0,0,n,6158154400,2.71401858329773,U,b,0\n                                        ,0,n,7697693000,-4.82485151290894,U,b,0,0,n,9237231600,-14.3338193893433,U,b,0,0,n\n                                        ,10776770200,-23.7518463134766,U,b,0,0,n,12316308800,-31.0170440673828,U,b,0,0,n,13855847400\n                                        ,-34.6520652770996,U,b,0,0,n,15395386000,-36.7015991210938,U,b,0,0,n,16934924599,-37.3537254333496\n                                        ,U,b,0,0,n,18474463200,-36.9178771972656,U,b,0,0,n,20014001800,-36.8466300964355,U\n                                        ,b,0,0,n,21553540400,-37.2962875366211,U,b,0,0,n,23093079000,-38.6570053100586,U,b\n                                        ,0,0,n,24632617600,-40.3761177062988,U,b,0,0,n,26172156200,-41.8821411132813,U,b,0\n                                        ,0,n,27711694800,-43.0481491088867,U,b,0,0,n,29251233400,-42.8388023376465,U,b,0,0\n                                        ,n,30790772000,-42.094352722168,U,b,0,0,n,32330310599,-40.7864265441895,U,b,0,0,n\n                                        ,33869849199,-38.3787155151367,U,b,0,0,n,35409387800,-35.8413162231445,U,b,0,0,n,36948926400\n                                        ,-32.3488426208496,U,b,0,0,n,38488465000,-28.7637310028076,U,b,0,0,n,40028003600,-25.234806060791\n                                        ,U,b,0,0,n,41567542200,-21.5375747680664,U,b,0,0,n,43107080800,-16.471170425415,U\n                                        ,b,0,0,n,44646619400,-11.5995597839355,U,b,0,0,n,46186158000,-7.04941606521606,U,b\n                                        ,0,0,n,47725696599,-1.98724484443665,U,b,0,0,n,49265235200,2.71954369544983,U,b,0\n                                        ,0,n,50804773799,6.87707614898682,U,b,0,0,n,52344312400,10.3503646850586,U,b,0,0,n\n                                        ,53883850999,13.1687927246094,U,b,0,0,n,55423389600,15.5003986358643,U,b,0,0,n,56962928200\n                                        ,16.5852966308594,U,b,0,0,n,58502466800,16.984582901001,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 60.3215827941895\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,55.3202247619629,U,s,0,0,n,1539538600,55.8422508239746,U,b,0,0,n,3079077200,57.1821212768555\n                                        ,U,b,0,0,n,4618615800,59.2548980712891,U,b,0,0,n,6158154400,61.8618850708008,U,b,0\n                                        ,0,n,7697693000,63.9062004089355,U,b,0,0,n,9237231600,64.3101577758789,U,b,0,0,n,10776770200\n                                        ,62.8249626159668,U,b,0,0,n,12316308800,59.9055480957031,U,b,0,0,n,13855847400,56.5925331115723\n                                        ,U,b,0,0,n,15395386000,53.1379661560059,U,b,0,0,n,16934924599,49.4230499267578,U,b\n                                        ,0,0,n,18474463200,45.5307197570801,U,b,0,0,n,20014001800,42.5207977294922,U,b,0,0\n                                        ,n,21553540400,39.7794303894043,U,b,0,0,n,23093079000,38.4957427978516,U,b,0,0,n,24632617600\n                                        ,37.6857261657715,U,b,0,0,n,26172156200,37.6584358215332,U,b,0,0,n,27711694800,38.1105613708496\n                                        ,U,b,0,0,n,29251233400,39.090259552002,U,b,0,0,n,30790772000,41.0284881591797,U,b\n                                        ,0,0,n,32330310599,43.6994552612305,U,b,0,0,n,33869849199,46.8158378601074,U,b,0,0\n                                        ,n,35409387800,49.7433662414551,U,b,0,0,n,36948926400,52.8002319335938,U,b,0,0,n,38488465000\n                                        ,55.3008880615234,U,b,0,0,n,40028003600,58.1388778686523,U,b,0,0,n,41567542200,60.3930511474609\n                                        ,U,b,0,0,n,43107080800,62.332691192627,U,b,0,0,n,44646619400,63.6795768737793,U,b\n                                        ,0,0,n,46186158000,64.0322418212891,U,b,0,0,n,47725696599,63.7863159179688,U,b,0,0\n                                        ,n,49265235200,63.0327033996582,U,b,0,0,n,50804773799,61.553783416748,U,b,0,0,n,52344312400\n                                        ,60.0933990478516,U,b,0,0,n,53883850999,58.5298194885254,U,b,0,0,n,55423389600,57.0240211486816\n                                        ,U,b,0,0,n,56962928200,56.0361404418945,U,b,0,0,n,58502466800,55.3211936950684,U,s\n                                        ,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 41.7058372497559\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,55.2040405273438,U,s,0,0,n,1539538600,52.8664703369141,U,b,0,0,n,3079077200,48.1119689941406\n                                        ,U,b,0,0,n,4618615800,42.4333686828613,U,b,0,0,n,6158154400,33.6661376953125,U,b,0\n                                        ,0,n,7697693000,22.3993339538574,U,b,0,0,n,9237231600,9.23760795593262,U,b,0,0,n,10776770200\n                                        ,-4.42471551895142,U,b,0,0,n,12316308800,-15.7571239471436,U,b,0,0,n,13855847400,-22.9064769744873\n                                        ,U,b,0,0,n,15395386000,-28.384593963623,U,b,0,0,n,16934924599,-32.1765480041504,U\n                                        ,b,0,0,n,18474463200,-34.3293991088867,U,b,0,0,n,20014001800,-36.0268135070801,U,b\n                                        ,0,0,n,21553540400,-36.5310897827148,U,b,0,0,n,23093079000,-36.3647804260254,U,b,0\n                                        ,0,n,24632617600,-35.6887817382813,U,b,0,0,n,26172156200,-34.4839859008789,U,b,0,0\n                                        ,n,27711694800,-32.8246421813965,U,b,0,0,n,29251233400,-29.8716449737549,U,b,0,0,n\n                                        ,30790772000,-27.3139991760254,U,b,0,0,n,32330310599,-24.8920955657959,U,b,0,0,n,33869849199\n                                        ,-22.1051235198975,U,b,0,0,n,35409387800,-20.3003692626953,U,b,0,0,n,36948926400,-17.1650848388672\n                                        ,U,b,0,0,n,38488465000,-13.7075223922729,U,b,0,0,n,40028003600,-10.035083770752,U\n                                        ,b,0,0,n,41567542200,-5.99591302871704,U,b,0,0,n,43107080800,0.598311722278595,U,b\n                                        ,0,0,n,44646619400,7.38008689880371,U,b,0,0,n,46186158000,14.5007495880127,U,b,0,0\n                                        ,n,47725696599,22.3570003509521,U,b,0,0,n,49265235200,29.7417755126953,U,b,0,0,n,50804773799\n                                        ,36.7603721618652,U,b,0,0,n,52344312400,42.6216659545898,U,b,0,0,n,53883850999,47.6522636413574\n                                        ,U,b,0,0,n,55423389600,51.803897857666,U,b,0,0,n,56962928200,54.003833770752,U,b,0\n                                        ,0,n,58502466800,55.2058143615723,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Forearm\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 13.1421842575073\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.00144292858317e-009\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -3.49096410445782e-007\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 33.6098442077637\n                        KeyVer: 4005\n                        KeyCount: 34\n                        Key: 0,33.1224403381348,U,s,0,0,n,1539538600,32.457447052002,U,b,0,0,n,3079077200,31.5667266845703\n                                        ,U,b,0,0,n,4618615800,30.6230945587158,U,b,0,0,n,6158154400,29.1058235168457,U,b,0\n                                        ,0,n,7697693000,27.9974880218506,U,b,0,0,n,9237231600,26.9857597351074,U,b,0,0,n,10776770200\n                                        ,28.2865829467773,U,b,0,0,n,12316308800,28.7060928344727,U,b,0,0,n,13855847400,29.6066951751709\n                                        ,U,b,0,0,n,15395386000,30.2187213897705,U,b,0,0.291801244020462,n,16927226907,30.479700088501\n                                        ,U,b,0.291801244020462,0,n,16934924599,30.4797306060791,U,b,0,0,n,18474463200,30.3821811676025\n                                        ,U,b,0,0,n,20014001800,30.2519302368164,U,b,0,0,n,21553540400,32.4879837036133,U,b\n                                        ,0,0,n,23093079000,34.8040733337402,U,b,0,0,n,24632617600,37.1908416748047,U,b,0,0\n                                        ,n,26172156200,39.7268104553223,U,b,0,0,n,27711694800,41.327465057373,U,b,0,0,n,29251233400\n                                        ,42.6436882019043,U,b,0,0,n,30790772000,43.6135673522949,U,b,0,0,n,32330310599,44.1939086914063\n                                        ,U,b,0,0.765070915222168,n,33862151507,44.8781661987305,U,b,0.765070915222168,0,n\n                                        ,33869849199,44.878246307373,U,b,0,0,n,35409387800,45.6656455993652,U,b,0,0,n,36948926400\n                                        ,45.7556114196777,U,b,0,0,n,38488465000,44.8779182434082,U,b,0,0,n,43107080800,35.0560188293457\n                                        ,U,s,0,0,n,52344312400,33.6024856567383,U,b,0,0,n,53883850999,33.241039276123,U,b\n                                        ,0,0,n,55423389600,33.156364440918,U,b,0,0,n,56962928200,33.0711517333984,U,b,0,0\n                                        ,n,58502466800,33.1224403381348,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 17.2327537536621\n                        KeyVer: 4005\n                        KeyCount: 34\n                        Key: 0,15.9406099319458,U,s,0,0,n,1539538600,15.0744190216064,U,b,0,0,n,3079077200,14.4963121414185\n                                        ,U,b,0,0,n,4618615800,14.1559629440308,U,b,0,0,n,6158154400,13.4684705734253,U,b,0\n                                        ,0,n,7697693000,13.2306642532349,U,b,0,0,n,9237231600,13.6654262542725,U,b,0,0,n,10776770200\n                                        ,15.0204601287842,U,b,0,0,n,12316308800,16.6233959197998,U,b,0,0,n,13855847400,18.8415203094482\n                                        ,U,b,0,0,n,15395386000,21.0987339019775,U,b,0,2.51604461669922,n,16927226907,23.3490123748779\n                                        ,U,b,2.51604461669922,0,n,16934924599,23.3492755889893,U,b,0,0,n,18474463200,25.5145130157471\n                                        ,U,b,0,0,n,20014001800,26.8924980163574,U,b,0,0,n,21553540400,28.4013957977295,U,b\n                                        ,0,0,n,23093079000,29.082836151123,U,b,0,0,n,24632617600,29.4776000976563,U,b,0,0\n                                        ,n,26172156200,30.0483322143555,U,b,0,0,n,27711694800,30.6130046844482,U,b,0,0,n,29251233400\n                                        ,32.0320091247559,U,b,0,0,n,30790772000,33.3066329956055,U,b,0,0,n,32330310599,34.1900024414063\n                                        ,U,b,0,0.681286036968231,n,33862151507,34.7993240356445,U,b,0.681286036968231,0,n\n                                        ,33869849199,34.7993965148926,U,b,0,0,n,35409387800,34.4317779541016,U,b,0,0,n,36948926400\n                                        ,33.3744621276855,U,b,0,99.9999313354492,n,38488465000,31.6565208435059,U,p,100,-48.1283378601074\n                                        ,n,n,43107080800,23.2906723022461,U,s,-48.1283378601074,0,n,52344312400,17.2180194854736\n                                        ,U,b,0,0,n,53883850999,16.7862148284912,U,b,0,0,n,55423389600,16.5630378723145,U,b\n                                        ,0,0,n,56962928200,16.2038249969482,U,b,0,0,n,58502466800,15.9406099319458,U,s,0,0\n                                        ,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -13.2919816970825\n                        KeyVer: 4005\n                        KeyCount: 34\n                        Key: 0,-11.7080917358398,U,s,25.1469478607178,14.2490406036377,a,0.329832986317342,0.989898998959688\n                                        ,1539538600,-11.0514917373657,U,s,14.2490406036377,3.51003432273865,a,0.989898998959688\n                                        ,0.329932996319258,3079077200,-10.7581558227539,U,s,3.51003432273865,0.856608271598816\n                                        ,a,0.329932996319258,0.329832986317342,4618615800,-10.8174896240234,U,s,0.856608271598816\n                                        ,-2.06585907936096,a,0.329832986317342,0.329832986317342,6158154400,-10.7010488510132\n                                        ,U,s,-2.06585907936096,-19.8205280303955,a,0.329832986317342,0.329832986317342,7697693000\n                                        ,-10.9552135467529,U,s,-19.8205280303955,-37.5635147094727,a,0.329832986317342,0.329832986317342\n                                        ,9237231600,-12.0224170684814,U,s,-37.5635147094727,-50.4399909973145,a,0.329832986317342\n                                        ,0.329832986317342,10776770200,-13.4594478607178,U,s,-50.4399909973145,-65.4337615966797\n                                        ,a,0.329832986317342,0.329932996319258,12316308800,-15.3850831985474,U,s,-65.4337615966797\n                                        ,-75.2507934570313,a,0.329932996319258,0.329932996319258,13855847400,-17.8216991424561\n                                        ,U,s,-75.2507934570313,-78.0096740722656,a,0.329932996319258,0.329832986317342,15395386000\n                                        ,-20.4018020629883,U,s,-78.0096740722656,-80.2831573486328,a,0.32943294630968,0.32943294630968\n                                        ,16927226907,-23.0058403015137,U,s,-80.2831573486328,-80.3789749145508,a,0.41224122789572\n                                        ,0.416641667980002,16934924599,-23.022575378418,U,s,-80.3789749145508,-77.584098815918\n                                        ,a,0.333333336384385,0.329832986317342,18474463200,-25.7554149627686,U,s,-77.584098815918\n                                        ,-67.3053665161133,a,0.329832986317342,0.329832986317342,20014001800,-28.1961002349854\n                                        ,U,s,-67.3053665161133,-59.4396514892578,a,0.329832986317342,0.329832986317342,21553540400\n                                        ,-30.2424392700195,U,s,-59.4396514892578,-52.189884185791,a,0.329832986317342,0.329832986317342\n                                        ,23093079000,-32.1587448120117,U,s,-52.189884185791,-39.6041717529297,a,0.329832986317342\n                                        ,0.329832986317342,24632617600,-33.7217636108398,U,s,-39.6041717529297,-30.695894241333\n                                        ,a,0.329832986317342,0.329832986317342,26172156200,-34.7990226745605,U,s,-30.695894241333\n                                        ,-27.6352214813232,a,0.329832986317342,0.329832986317342,27711694800,-35.7681579589844\n                                        ,U,s,-27.6352214813232,-13.5598373413086,a,0.329832986317342,0.329932996319258,29251233400\n                                        ,-36.6413688659668,U,s,-13.5598373413086,8.68964004516602,a,0.329932996319258,0.329832986317342\n                                        ,30790772000,-36.6721458435059,U,s,8.68964004516602,35.5419616699219,a,0.329832986317342\n                                        ,0.329932996319258,32330310599,-36.0620613098145,U,s,35.5419616699219,72.1478118896484\n                                        ,a,0.32943294630968,0.32943294630968,33862151507,-34.3172492980957,U,s,72.1478118896484\n                                        ,72.6112747192383,a,0.41224122789572,0.416641667980002,33869849199,-34.3021697998047\n                                        ,U,s,72.6112747192383,93.8272705078125,a,0.333333336384385,0.329832986317342,35409387800\n                                        ,-31.235876083374,U,s,93.8272705078125,92.1630859375,a,0.329832986317342,0.329932996319258\n                                        ,36948926400,-28.043363571167,U,s,92.1630859375,83.6906509399414,a,0.329932996319258\n                                        ,0.989999008961604,38488465000,-25.0916709899902,U,s,83.6906509399414,51.5209655761719\n                                        ,a,0.329932996319258,0.109910992105142,43107080800,-18.5216178894043,U,s,51.5209655761719\n                                        ,9.80166339874268,a,0.0549054910516134,0.0549054910516134,52344312400,-13.1216468811035\n                                        ,U,s,9.80166339874268,8.2679443359375,a,0.329832986317342,0.329932996319258,53883850999\n                                        ,-12.8299226760864,U,s,8.2679443359375,11.2652015686035,a,0.329932996319258,0.329932996319258\n                                        ,55423389600,-12.5704507827759,U,s,11.2652015686035,12.9353876113892,a,0.329932996319258\n                                        ,0.329832986317342,56962928200,-12.0789098739624,U,s,12.9353876113892,9.31368160247803\n                                        ,a,0.329832986317342,0.329832986317342,58502466800,-11.7080917358398,U,s,9.31368064880371\n                                        ,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Hand\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 10.8255519866943\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 5.22714969974913e-007\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 9.90214175544679e-007\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -82.1016998291016\n                        KeyVer: 4005\n                        KeyCount: 4\n                        Key: 0,-74.1737670898438,U,s,0,0,n,28866348750,-72.7173690795898,U,s,0,-2.33024477958679\n                                        ,n,44261734750,-94.1353530883789,U,s,-2.33024477958679,0,n,57732697500,-74.1737670898438\n                                        ,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 2.46786618232727\n                        KeyVer: 4005\n                        KeyCount: 4\n                        Key: 0,10.0695886611938,U,s,0,0,n,28866348750,-16.6371746063232,U,s,0,42.7308235168457\n                                        ,n,44261734750,-12.567925453186,U,s,42.7308235168457,0,n,57732697500,10.0695886611938\n                                        ,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.1264545917511\n                        KeyVer: 4005\n                        KeyCount: 4\n                        Key: 0,3.06235289573669,U,s,0,0,n,28866348750,-10.0715522766113,U,s,0,0,n,44261734750,3.22521877288818\n                                        ,U,s,0,0,n,57732697500,3.06235289573669,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Thumb1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.62510848045349\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.626630425453186\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -1.67875993251801\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 119.229835510254\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,118.393394470215,U,s,5.76857757568359,0,n,28866348750,121.998748779297,U,s,0,-5.76857757568359\n                                        ,n,57732697500,118.393394470215,U,s,-5.76857757568359,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 30.9591827392578\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,28.7888736724854,U,s,14.9676542282104,0,n,28866348750,38.1436576843262,U,s,0,-14.9676542282104\n                                        ,n,57732697500,28.7888736724854,U,s,-14.9676542282104,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 19.9485893249512\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,18.4379501342773,U,s,10.4181985855103,0,n,28866348750,24.9493236541748,U,s,0,-10.4181985855103\n                                        ,n,57732697500,18.4379501342773,U,s,-10.4181985855103,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Thumb2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.1404322385788\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 2.85936584987212e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,2.859354026441e-006,U,s,0,0,n,1539538600,2.85936357613537e-006,U,b,0,0,n,3079077200\n                                        ,2.85935880128818e-006,U,b,0,0,n,4618615800,2.85934333987825e-006,U,b,0,0,n,6158154400\n                                        ,2.85935334431997e-006,U,b,0,0,n,7697693000,2.85937585431384e-006,U,b,0,0,n,9237231600\n                                        ,2.85934697785706e-006,U,b,0,0,n,10776770200,2.85934856947279e-006,U,b,0,0,n,12316308800\n                                        ,2.85936812360887e-006,U,b,0,0,n,13855847400,2.85935698229878e-006,U,b,0,0,n,15395386000\n                                        ,2.85934765997808e-006,U,b,0,0,n,16934924599,2.8593317438208e-006,U,b,0,0,n,18474463200\n                                        ,2.85935857391451e-006,U,b,0,0,n,20014001800,2.85934129351517e-006,U,b,0,0,n,21553540400\n                                        ,2.85933947452577e-006,U,b,0,0,n,23093079000,2.85934697785706e-006,U,b,0,0,n,24632617600\n                                        ,2.85938244815043e-006,U,b,0,0,n,26172156200,2.85934675048338e-006,U,b,0,0,n,27711694800\n                                        ,2.85933879240474e-006,U,b,0,0,n,29251233400,2.85936357613537e-006,U,b,0,0,n,30790772000\n                                        ,2.85932924271037e-006,U,b,0,0,n,32330310599,2.85934129351517e-006,U,b,0,0,n,33869849199\n                                        ,2.85938540400821e-006,U,b,0,0,n,35409387800,2.85935652755143e-006,U,b,0,0,n,36948926400\n                                        ,2.85935902866186e-006,U,b,0,0,n,38488465000,2.85934970634116e-006,U,b,0,0,n,40028003600\n                                        ,2.85934561361501e-006,U,b,0,0,n,41567542200,2.85935470856202e-006,U,b,0,0,n,43107080800\n                                        ,2.85935061583587e-006,U,b,0,0,n,44646619400,2.85934856947279e-006,U,b,0,0,n,46186158000\n                                        ,2.85935107058322e-006,U,b,0,0,n,47725696599,2.85936084765126e-006,U,b,0,0,n,49265235200\n                                        ,2.85934606836236e-006,U,b,0,0,n,50804773799,2.85935948340921e-006,U,b,0,0,n,52344312400\n                                        ,2.8593669867405e-006,U,b,0,0,n,53883850999,2.85934493149398e-006,U,b,0,0,n,55423389600\n                                        ,2.85936107502494e-006,U,b,0,0,n,56962928200,2.85933651866799e-006,U,b,0,0,n,58502466800\n                                        ,2.85935630017775e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -1.81425923528877e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-1.81426310064126e-006,U,s,0,0,n,1539538600,-1.81425798473356e-006,U,b,0,0,n,3079077200\n                                        ,-1.81425969003612e-006,U,b,0,0,n,4618615800,-1.81426662493323e-006,U,b,0,0,n,6158154400\n                                        ,-1.81426025847031e-006,U,b,0,0,n,7697693000,-1.81425377832056e-006,U,b,0,0,n,9237231600\n                                        ,-1.8142668523069e-006,U,b,0,0,n,10776770200,-1.81427822099067e-006,U,b,0,0,n,12316308800\n                                        ,-1.81427958523273e-006,U,b,0,0,n,13855847400,-1.81426014478348e-006,U,b,0,0,n,15395386000\n                                        ,-1.8142668523069e-006,U,b,0,0,n,16934924599,-1.81426605649904e-006,U,b,0,0,n,18474463200\n                                        ,-1.8142650333175e-006,U,b,0,0,n,20014001800,-1.81426287326758e-006,U,b,0,0,n,21553540400\n                                        ,-1.81426423750963e-006,U,b,0,0,n,23093079000,-1.8142650333175e-006,U,b,0,0,n,24632617600\n                                        ,-1.81425798473356e-006,U,b,0,0,n,26172156200,-1.81426230483339e-006,U,b,0,0,n,27711694800\n                                        ,-1.81426526069117e-006,U,b,0,0,n,29251233400,-1.81426048584399e-006,U,b,0,0,n,30790772000\n                                        ,-1.81427037659887e-006,U,b,0,0,n,32330310599,-1.81426673862006e-006,U,b,0,0,n,33869849199\n                                        ,-1.81425264145219e-006,U,b,0,0,n,35409387800,-1.81426219114655e-006,U,b,0,0,n,36948926400\n                                        ,-1.81426025847031e-006,U,b,0,0,n,38488465000,-1.81426275958074e-006,U,b,0,0,n,40028003600\n                                        ,-1.81426435119647e-006,U,b,0,0,n,41567542200,-1.8142626458939e-006,U,b,0,0,n,43107080800\n                                        ,-1.81426059953083e-006,U,b,0,0,n,44646619400,-1.81426275958074e-006,U,b,0,0,n,46186158000\n                                        ,-1.81426389644912e-006,U,b,0,0,n,47725696599,-1.81425798473356e-006,U,b,0,0,n,49265235200\n                                        ,-1.81426423750963e-006,U,b,0,0,n,50804773799,-1.81426037215715e-006,U,b,0,0,n,52344312400\n                                        ,-1.8142590079151e-006,U,b,0,0,n,53883850999,-1.8142659428122e-006,U,b,0,0,n,55423389600\n                                        ,-1.81426457857015e-006,U,b,0,0,n,56962928200,-1.81426139533869e-006,U,b,0,0,n,58502466800\n                                        ,-1.81425775735988e-006,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 2.84072734757501e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,2.84072734757501e-006,U,s,0,0,n,28866348750,2.84072734757501e-006,U,s,0,0,n,57732697500\n                                        ,2.84072734757501e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.12636920796194e-008\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-3.12636920796194e-008,U,s,0,0,n,28866348750,-3.12636920796194e-008,U,s,0,0,n,57732697500\n                                        ,-3.12636920796194e-008,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 17.8534507751465\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,17.8534507751465,U,s,0,0,n,28866348750,17.8534507751465,U,s,0,0,n,57732697500,17.8534507751465\n                                        ,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Thumb3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.38246870040894\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -7.17560169505305e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-7.17653620085912e-007,U,s,0,0,n,1539538600,-7.1756937813916e-007,U,b,0,0,n,3079077200\n                                        ,-7.17618945600407e-007,U,b,0,0,n,4618615800,-7.17691989393643e-007,U,b,0,0,n,6158154400\n                                        ,-7.17637703928631e-007,U,b,0,0,n,7697693000,-7.17514240022865e-007,U,b,0,0,n,9237231600\n                                        ,-7.17667546723533e-007,U,b,0,0,n,10776770200,-7.17693012575182e-007,U,b,0,0,n,12316308800\n                                        ,-7.17629006885545e-007,U,b,0,0,n,13855847400,-7.17605075806205e-007,U,b,0,0,n,15395386000\n                                        ,-7.17643956704705e-007,U,b,0,0,n,16934924599,-7.17697162144759e-007,U,b,0,0,n,18474463200\n                                        ,-7.17614057066385e-007,U,b,0,0,n,20014001800,-7.17667091976182e-007,U,b,0,0,n,21553540400\n                                        ,-7.17654870641127e-007,U,b,0,0,n,23093079000,-7.17643558800773e-007,U,b,0,0,n,24632617600\n                                        ,-7.17528223503905e-007,U,b,0,0,n,26172156200,-7.17642706149491e-007,U,b,0,0,n,27711694800\n                                        ,-7.1768266707295e-007,U,b,0,0,n,29251233400,-7.17556815743592e-007,U,b,0,0,n,30790772000\n                                        ,-7.17706939212803e-007,U,b,0,0,n,32330310599,-7.17659133897541e-007,U,b,0,0,n,33869849199\n                                        ,-7.1748956997908e-007,U,b,0,0,n,35409387800,-7.17618377166218e-007,U,b,0,0,n,36948926400\n                                        ,-7.17610532774415e-007,U,b,0,0,n,38488465000,-7.17649186299241e-007,U,b,0,0,n,40028003600\n                                        ,-7.17661009730364e-007,U,b,0,0,n,41567542200,-7.17626903679047e-007,U,b,0,0,n,43107080800\n                                        ,-7.17648504178214e-007,U,b,0,0,n,44646619400,-7.17653279025399e-007,U,b,0,0,n,46186158000\n                                        ,-7.17646344128298e-007,U,b,0,0,n,47725696599,-7.17615932899207e-007,U,b,0,0,n,49265235200\n                                        ,-7.17679540684912e-007,U,b,0,0,n,50804773799,-7.17594559773715e-007,U,b,0,0,n,52344312400\n                                        ,-7.17553803042392e-007,U,b,0,0,n,53883850999,-7.17685793460987e-007,U,b,0,0,n,55423389600\n                                        ,-7.17604962119367e-007,U,b,0,0,n,56962928200,-7.17740476829931e-007,U,b,0,0,n,58502466800\n                                        ,-7.17610760148091e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.67166808246111e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,3.67168331649737e-006,U,s,0,0,n,1539538600,3.67167922377121e-006,U,b,0,0,n,3079077200\n                                        ,3.6716903650813e-006,U,b,0,0,n,4618615800,3.6716644444823e-006,U,b,0,0,n,6158154400\n                                        ,3.67168991033395e-006,U,b,0,0,n,7697693000,3.67168536286044e-006,U,b,0,0,n,9237231600\n                                        ,3.67165307579853e-006,U,b,0,0,n,10776770200,3.67159896086378e-006,U,b,0,0,n,12316308800\n                                        ,3.67157917935401e-006,U,b,0,0,n,13855847400,3.67167763215548e-006,U,b,0,0,n,15395386000\n                                        ,3.67164307135681e-006,U,b,0,0,n,16934924599,3.67166194337187e-006,U,b,0,0,n,18474463200\n                                        ,3.6716514841828e-006,U,b,0,0,n,20014001800,3.67166967407684e-006,U,b,0,0,n,21553540400\n                                        ,3.67165966963512e-006,U,b,0,0,n,23093079000,3.67165739589836e-006,U,b,0,0,n,24632617600\n                                        ,3.67168718184985e-006,U,b,0,0,n,26172156200,3.67167149306624e-006,U,b,0,0,n,27711694800\n                                        ,3.67166012438247e-006,U,b,0,0,n,29251233400,3.67167262993462e-006,U,b,0,0,n,30790772000\n                                        ,3.67162942893629e-006,U,b,0,0,n,32330310599,3.67164807357767e-006,U,b,0,0,n,33869849199\n                                        ,3.67171492143825e-006,U,b,0,0,n,35409387800,3.67167103831889e-006,U,b,0,0,n,36948926400\n                                        ,3.67168286175001e-006,U,b,0,0,n,38488465000,3.67166921932949e-006,U,b,0,0,n,40028003600\n                                        ,3.67165853276674e-006,U,b,0,0,n,41567542200,3.67166921932949e-006,U,b,0,0,n,43107080800\n                                        ,3.67168422599207e-006,U,b,0,0,n,44646619400,3.67167217518727e-006,U,b,0,0,n,46186158000\n                                        ,3.67166489922965e-006,U,b,0,0,n,47725696599,3.67170014214935e-006,U,b,0,0,n,49265235200\n                                        ,3.67167422155035e-006,U,b,0,0,n,50804773799,3.67167444892402e-006,U,b,0,0,n,52344312400\n                                        ,3.67166694559273e-006,U,b,0,0,n,53883850999,3.67166671821906e-006,U,b,0,0,n,55423389600\n                                        ,3.67165603165631e-006,U,b,0,0,n,56962928200,3.67171014659107e-006,U,b,0,0,n,58502466800\n                                        ,3.67169059245498e-006,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -7.58698934077984e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-7.82498500484508e-006,U,s,0,0,n,28866348750,-5.53656627744203e-006,U,s,0,0,n,57732697500\n                                        ,-7.82498500484508e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.2017899229686e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-2.85129135590978e-006,U,s,0,0,n,28866348750,-6.2214699028118e-006,U,s,0,0,n,57732697500\n                                        ,-2.85129135590978e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 8.96595764160156\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,15.5345325469971,U,s,-45.3005142211914,0,n,28866348750,-12.7782897949219,U,s,0,45.3005142211914\n                                        ,n,57732697500,15.5345325469971,U,s,45.3005142211914,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.00000011920929\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Index1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.34874391555786\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.0162533205002546\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -1.56133377552032\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 12.0142822265625\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,12.0415687561035,U,s,0,0,n,28866348750,11.7792024612427,U,s,0,0,n,57732697500,12.0415687561035\n                                        ,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.66459441184998\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,0.729777991771698,U,s,6.44700956344604,0,n,28866348750,4.75915908813477,U,s,0,-6.44700956344604\n                                        ,n,57732697500,0.729777991771698,U,s,-6.44700956344604,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.92592287063599\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,4.65305233001709,U,s,-5.01468372344971,0,n,28866348750,1.51887476444244,U,s,0,5.01468372344971\n                                        ,n,57732697500,4.65305233001709,U,s,5.01468372344971,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Index2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.47369563579559\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 9.02053685081228e-008\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,9.01809471542947e-008,U,s,0,0,n,1539538600,9.02013539416657e-008,U,b,0,0,n,3079077200\n                                        ,9.01859493751545e-008,U,b,0,0,n,4618615800,9.01821408660908e-008,U,b,0,0,n,6158154400\n                                        ,9.01852672541281e-008,U,b,0,0,n,7697693000,9.02065266927821e-008,U,b,0,0,n,9237231600\n                                        ,9.01911789696896e-008,U,b,0,0,n,10776770200,9.0199193891749e-008,U,b,0,0,n,12316308800\n                                        ,9.02173837857845e-008,U,b,0,0,n,13855847400,9.01934527064441e-008,U,b,0,0,n,15395386000\n                                        ,9.02007286640583e-008,U,b,0,0,n,16934924599,9.01750354387332e-008,U,b,0,0,n,18474463200\n                                        ,9.02003307601262e-008,U,b,0,0,n,20014001800,9.01879957382334e-008,U,b,0,0,n,21553540400\n                                        ,9.01891326066107e-008,U,b,0,0,n,23093079000,9.01899852578936e-008,U,b,0,0,n,24632617600\n                                        ,9.02112446965475e-008,U,b,0,0,n,26172156200,9.01916337170405e-008,U,b,0,0,n,27711694800\n                                        ,9.01825387700228e-008,U,b,0,0,n,29251233400,9.02052761375671e-008,U,b,0,0,n,30790772000\n                                        ,9.01858356883167e-008,U,b,0,0,n,32330310599,9.01923158380669e-008,U,b,0,0,n,33869849199\n                                        ,9.0205332980986e-008,U,b,0,0,n,35409387800,9.01928274288366e-008,U,b,0,0,n,36948926400\n                                        ,9.01924863683234e-008,U,b,0,0,n,38488465000,9.01877115211391e-008,U,b,0,0,n,40028003600\n                                        ,9.01918042472971e-008,U,b,0,0,n,41567542200,9.01911221262708e-008,U,b,0,0,n,43107080800\n                                        ,9.01843577594263e-008,U,b,0,0,n,44646619400,9.01877115211391e-008,U,b,0,0,n,46186158000\n                                        ,9.01908379091765e-008,U,b,0,0,n,47725696599,9.01838461686566e-008,U,b,0,0,n,49265235200\n                                        ,9.01811745279701e-008,U,b,0,0,n,50804773799,9.01978864931152e-008,U,b,0,0,n,52344312400\n                                        ,9.02067540664575e-008,U,b,0,0,n,53883850999,9.01823113963474e-008,U,b,0,0,n,55423389600\n                                        ,9.01991370483302e-008,U,b,0,0,n,56962928200,9.01576981959806e-008,U,b,0,0,n,58502466800\n                                        ,9.01910652828519e-008,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 5.82350480726745e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,5.82326151743473e-007,U,s,0,0,n,1539538600,5.82349230171531e-007,U,b,0,0,n,3079077200\n                                        ,5.82332347676129e-007,U,b,0,0,n,4618615800,5.82336895149638e-007,U,b,0,0,n,6158154400\n                                        ,5.82340476285026e-007,U,b,0,0,n,7697693000,5.82341385779728e-007,U,b,0,0,n,9237231600\n                                        ,5.82342522648105e-007,U,b,0,0,n,10776770200,5.82314441999188e-007,U,b,0,0,n,12316308800\n                                        ,5.82295001549937e-007,U,b,0,0,n,13855847400,5.82351447064866e-007,U,b,0,0,n,15395386000\n                                        ,5.82351106004353e-007,U,b,0,0,n,16934924599,5.82377083446772e-007,U,b,0,0,n,18474463200\n                                        ,5.82343091082294e-007,U,b,0,0,n,20014001800,5.8235173128196e-007,U,b,0,0,n,21553540400\n                                        ,5.82367988499755e-007,U,b,0,0,n,23093079000,5.82358779865899e-007,U,b,0,0,n,24632617600\n                                        ,5.82318875785859e-007,U,b,0,0,n,26172156200,5.82356449285726e-007,U,b,0,0,n,27711694800\n                                        ,5.82357188250171e-007,U,b,0,0,n,29251233400,5.82354857669998e-007,U,b,0,0,n,30790772000\n                                        ,5.82372024382494e-007,U,b,0,0,n,32330310599,5.82362361001287e-007,U,b,0,0,n,33869849199\n                                        ,5.82329448661767e-007,U,b,0,0,n,35409387800,5.82343602673063e-007,U,b,0,0,n,36948926400\n                                        ,5.82338316235109e-007,U,b,0,0,n,38488465000,5.82341101562633e-007,U,b,0,0,n,40028003600\n                                        ,5.82344796384859e-007,U,b,0,0,n,41567542200,5.82344682698022e-007,U,b,0,0,n,43107080800\n                                        ,5.82339623633743e-007,U,b,0,0,n,44646619400,5.82343147925712e-007,U,b,0,0,n,46186158000\n                                        ,5.82340021537675e-007,U,b,0,0,n,47725696599,5.82328937070997e-007,U,b,0,0,n,49265235200\n                                        ,5.82332177145872e-007,U,b,0,0,n,50804773799,5.82350423883327e-007,U,b,0,0,n,52344312400\n                                        ,5.82350480726745e-007,U,b,0,0,n,53883850999,5.82337179366732e-007,U,b,0,0,n,55423389600\n                                        ,5.82336895149638e-007,U,b,0,0,n,56962928200,5.82324446440907e-007,U,b,0,0,n,58502466800\n                                        ,5.82345819566399e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 7.5388690845557e-008\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-3.31086305038752e-008,U,s,0,0,n,28866348750,1.01013483799761e-006,U,s,0,0,n,57732697500\n                                        ,-3.31086305038752e-008,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.20740196002589e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-3.20717754220823e-006,U,s,0,0,n,28866348750,-3.20933622788289e-006,U,s,0,0,n,57732697500\n                                        ,-3.20717754220823e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 15.1926651000977\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,16.6813163757324,U,s,-10.2665567398071,0,n,28866348750,10.2647180557251,U,s,0,10.2665567398071\n                                        ,n,57732697500,16.6813163757324,U,s,10.2665567398071,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Index3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.06284534931183\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.39810509836025e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,1.39732492243638e-007,U,s,0,0,n,1539538600,1.3980223911858e-007,U,b,0,0,n,3079077200\n                                        ,1.39752614813915e-007,U,b,0,0,n,4618615800,1.39736016535608e-007,U,b,0,0,n,6158154400\n                                        ,1.39755968575628e-007,U,b,0,0,n,7697693000,1.39812925681326e-007,U,b,0,0,n,9237231600\n                                        ,1.39759947614948e-007,U,b,0,0,n,10776770200,1.39741928251169e-007,U,b,0,0,n,12316308800\n                                        ,1.39762278195121e-007,U,b,0,0,n,13855847400,1.39782855512749e-007,U,b,0,0,n,15395386000\n                                        ,1.39791211495321e-007,U,b,0,0,n,16934924599,1.39762050821446e-007,U,b,0,0,n,18474463200\n                                        ,1.39785186092922e-007,U,b,0,0,n,20014001800,1.39765745643672e-007,U,b,0,0,n,21553540400\n                                        ,1.39783026043006e-007,U,b,0,0,n,23093079000,1.39776943797187e-007,U,b,0,0,n,24632617600\n                                        ,1.39798999043705e-007,U,b,0,0,n,26172156200,1.39775465868297e-007,U,b,0,0,n,27711694800\n                                        ,1.39756082262466e-007,U,b,0,0,n,29251233400,1.39815313104918e-007,U,b,0,0,n,30790772000\n                                        ,1.39769895213249e-007,U,b,0,0,n,32330310599,1.39782400765398e-007,U,b,0,0,n,33869849199\n                                        ,1.39803034926445e-007,U,b,0,0,n,35409387800,1.39772225793422e-007,U,b,0,0,n,36948926400\n                                        ,1.39768587814615e-007,U,b,0,0,n,38488465000,1.39760402362299e-007,U,b,0,0,n,40028003600\n                                        ,1.39764154027944e-007,U,b,0,0,n,41567542200,1.39769383622479e-007,U,b,0,0,n,43107080800\n                                        ,1.39751193728443e-007,U,b,0,0,n,44646619400,1.39759151807084e-007,U,b,0,0,n,46186158000\n                                        ,1.39761539230676e-007,U,b,0,0,n,47725696599,1.39746191507584e-007,U,b,0,0,n,49265235200\n                                        ,1.3973340173834e-007,U,b,0,0,n,50804773799,1.39792518893955e-007,U,b,0,0,n,52344312400\n                                        ,1.39813835176028e-007,U,b,0,0,n,53883850999,1.39737267090823e-007,U,b,0,0,n,55423389600\n                                        ,1.39780070185225e-007,U,b,0,0,n,56962928200,1.39676615162898e-007,U,b,0,0,n,58502466800\n                                        ,1.39774897434108e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 2.21882010009722e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,2.21871368921711e-006,U,s,0,0,n,1539538600,2.21881691686576e-006,U,b,0,0,n,3079077200\n                                        ,2.21874915951048e-006,U,b,0,0,n,4618615800,2.21872642214294e-006,U,b,0,0,n,6158154400\n                                        ,2.21876712203084e-006,U,b,0,0,n,7697693000,2.21881509787636e-006,U,b,0,0,n,9237231600\n                                        ,2.21874961425783e-006,U,b,0,0,n,10776770200,2.21863956539892e-006,U,b,0,0,n,12316308800\n                                        ,2.21860045712674e-006,U,b,0,0,n,13855847400,2.21880782191874e-006,U,b,0,0,n,15395386000\n                                        ,2.21878758566163e-006,U,b,0,0,n,16934924599,2.21884261009109e-006,U,b,0,0,n,18474463200\n                                        ,2.21877462536213e-006,U,b,0,0,n,20014001800,2.2187832655618e-006,U,b,0,0,n,21553540400\n                                        ,2.21883010453894e-006,U,b,0,0,n,23093079000,2.21880645767669e-006,U,b,0,0,n,24632617600\n                                        ,2.21875552597339e-006,U,b,0,0,n,26172156200,2.21879395212454e-006,U,b,0,0,n,27711694800\n                                        ,2.21878553929855e-006,U,b,0,0,n,29251233400,2.21883988160698e-006,U,b,0,0,n,30790772000\n                                        ,2.21880782191874e-006,U,b,0,0,n,32330310599,2.21880964090815e-006,U,b,0,0,n,33869849199\n                                        ,2.21880395656626e-006,U,b,0,0,n,35409387800,2.21877712647256e-006,U,b,0,0,n,36948926400\n                                        ,2.21876962314127e-006,U,b,0,0,n,38488465000,2.21876280193101e-006,U,b,0,0,n,40028003600\n                                        ,2.21876166506263e-006,U,b,0,0,n,41567542200,2.21877621697786e-006,U,b,0,0,n,43107080800\n                                        ,2.2187573449628e-006,U,b,0,0,n,44646619400,2.21876325667836e-006,U,b,0,0,n,46186158000\n                                        ,2.21875416173134e-006,U,b,0,0,n,47725696599,2.21874188355287e-006,U,b,0,0,n,49265235200\n                                        ,2.21872051042737e-006,U,b,0,0,n,50804773799,2.21880964090815e-006,U,b,0,0,n,52344312400\n                                        ,2.2188221464603e-006,U,b,0,0,n,53883850999,2.21872892325337e-006,U,b,0,0,n,55423389600\n                                        ,2.2187573449628e-006,U,b,0,0,n,56962928200,2.21868208427622e-006,U,b,0,0,n,58502466800\n                                        ,2.21879372475087e-006,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -7.97497079929599e-007\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-7.97497079929599e-007,U,s,0,0,n,28866348750,-7.97497079929599e-007,U,s,0,0,n,57732697500\n                                        ,-7.97497079929599e-007,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 7.67177255056595e-007\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,7.67177255056595e-007,U,s,0,0,n,28866348750,7.67177255056595e-007,U,s,0,0,n,57732697500\n                                        ,7.67177255056595e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -6.41338004925274e-008\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-6.41338004925274e-008,U,s,0,0,n,28866348750,-6.41338004925274e-008,U,s,0,0,n,57732697500\n                                        ,-6.41338004925274e-008,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Middle1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.35998678207397\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.000294537370791659\n                        KeyVer: 4005\n                        KeyCount: 32\n                        Key: 0,-0.000294537399895489,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600,-0.000294537370791659\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,-0.000294537399895489,U\n                                        ,b,0,0,a,0.329832986317342,0.329832986317342,4618615800,-0.000294537399895489,U,b\n                                        ,0,0,a,0.329832986317342,0.329832986317342,6158154400,-0.000294537370791659,U,s,0\n                                        ,0,a,0.329832986317342,0.329832986317342,7697693000,-0.000294537399895489,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,9237231600,-0.000294537370791659,U,b,0,0,a\n                                        ,0.329832986317342,0.329832986317342,10776770200,-0.000294537370791659,U,b,0,0,a,0.329832986317342\n                                        ,0.329832986317342,12316308800,-0.000294537370791659,U,b,0,0,a,0.329832986317342,0.329832986317342\n                                        ,13855847400,-0.000294537399895489,U,s,0,0,a,0.329832986317342,0.329832986317342,15395386000\n                                        ,-0.000294537370791659,U,s,0,0,a,0.32943294630968,0.32943294630968,16927226907,-0.000294537399895489\n                                        ,U,b,0,0,a,0.33033303632692,0.989999008961604,18474463200,-0.000294537399895489,U\n                                        ,b,0,0,a,0.989898998959688,0.329832986317342,20014001800,-0.000294537370791659,U,b\n                                        ,0,0,a,0.329832986317342,0.329832986317342,21553540400,-0.000294537370791659,U,b,0\n                                        ,0,a,0.329832986317342,0.989898998959688,23093079000,-0.000294537399895489,U,b,0,0\n                                        ,a,0.989898998959688,0.329832986317342,24632617600,-0.000294537399895489,U,b,0,0,a\n                                        ,0.329832986317342,0.989898998959688,26172156200,-0.000294537370791659,U,s,0,0,a,0.989898998959688\n                                        ,0.329832986317342,27711694800,-0.000294537399895489,U,b,0,0,a,0.329832986317342,0.329832986317342\n                                        ,29251233400,-0.000294537399895489,U,b,0,0,a,0.329832986317342,0.329832986317342,30790772000\n                                        ,-0.000294537399895489,U,b,0,0,a,0.329832986317342,0.329832986317342,32330310599,-0.000294537370791659\n                                        ,U,s,0,0,a,0.32943294630968,0.32943294630968,33862151507,-0.000294537399895489,U,b\n                                        ,0,0,a,0.33033303632692,0.33033303632692,35409387800,-0.000294537399895489,U,b,0,0\n                                        ,a,0.329832986317342,0.989898998959688,43107080800,-0.000294537399895489,U,s,0,0,a\n                                        ,0.989898998959688,0.329832986317342,44646619400,-0.000294537399895489,U,b,0,0,a,0.329832986317342\n                                        ,0.329832986317342,46186158000,-0.000294537370791659,U,b,0,0,a,0.329832986317342,0.329832986317342\n                                        ,47725696599,-0.000294537370791659,U,b,0,0,a,0.329832986317342,0.329832986317342,53883850999\n                                        ,-0.000294537370791659,U,s,0,0,a,0.329832986317342,0.989898998959688,55423389600,-0.000294537370791659\n                                        ,U,b,0,0,a,0.989898998959688,0.329832986317342,56962928200,-0.000294537399895489,U\n                                        ,s,0,0,a,0.329832986317342,0.329832986317342,58502466800,-0.000294537370791659,U,s\n                                        ,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -0.366859555244446\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 1.96983647346497\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,2.01983451843262,U,s,0,0,n,28866348750,1.53908538818359,U,s,0,0,n,57732697500,2.01983451843262\n                                        ,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.10134339332581\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,0.871148407459259,U,s,0,0,n,28866348750,3.08456206321716,U,s,0,0,n,57732697500,0.871148407459259\n                                        ,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 14.2388792037964\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,16.4038619995117,U,s,-14.9309139251709,0,n,28866348750,7.07204008102417,U,s,0,14.9309139251709\n                                        ,n,57732697500,16.4038619995117,U,s,14.9309139251709,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Middle2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.52912437915802\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 7.80884704454365e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,7.80865661909047e-007,U,s,0,0,n,1539538600,7.8088197597026e-007,U,b,0,0,n,3079077200\n                                        ,7.8087049359965e-007,U,b,0,0,n,4618615800,7.80863388172293e-007,U,b,0,0,n,6158154400\n                                        ,7.80869470418111e-007,U,b,0,0,n,7697693000,7.80888228746335e-007,U,b,0,0,n,9237231600\n                                        ,7.8086998200888e-007,U,b,0,0,n,10776770200,7.80873051553499e-007,U,b,0,0,n,12316308800\n                                        ,7.80886580287188e-007,U,b,0,0,n,13855847400,7.80875041073159e-007,U,b,0,0,n,15395386000\n                                        ,7.80878281148034e-007,U,b,0,0,n,16934924599,7.80859750193486e-007,U,b,0,0,n,18474463200\n                                        ,7.80878735895385e-007,U,b,0,0,n,20014001800,7.80869243044435e-007,U,b,0,0,n,21553540400\n                                        ,7.80870550443069e-007,U,b,0,0,n,23093079000,7.80877428496751e-007,U,b,0,0,n,24632617600\n                                        ,7.8089044563967e-007,U,b,0,0,n,26172156200,7.80873165240337e-007,U,b,0,0,n,27711694800\n                                        ,7.80864638727508e-007,U,b,0,0,n,29251233400,7.80885727635905e-007,U,b,0,0,n,30790772000\n                                        ,7.80864979788021e-007,U,b,0,0,n,32330310599,7.80871971528541e-007,U,b,0,0,n,33869849199\n                                        ,7.8088896771078e-007,U,b,0,0,n,35409387800,7.8087401789162e-007,U,b,0,0,n,36948926400\n                                        ,7.8087447263897e-007,U,b,0,0,n,38488465000,7.80869129357598e-007,U,b,0,0,n,40028003600\n                                        ,7.8087100519042e-007,U,b,0,0,n,41567542200,7.80872596806148e-007,U,b,0,0,n,43107080800\n                                        ,7.80867594585288e-007,U,b,0,0,n,44646619400,7.80869356731273e-007,U,b,0,0,n,46186158000\n                                        ,7.8087151678119e-007,U,b,0,0,n,47725696599,7.80869299887854e-007,U,b,0,0,n,49265235200\n                                        ,7.80863956606481e-007,U,b,0,0,n,50804773799,7.80878679051966e-007,U,b,0,0,n,52344312400\n                                        ,7.80885841322743e-007,U,b,0,0,n,53883850999,7.80863786076225e-007,U,b,0,0,n,55423389600\n                                        ,7.80878451678291e-007,U,b,0,0,n,56962928200,7.80847301484755e-007,U,b,0,0,n,58502466800\n                                        ,7.80873790517944e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -3.64346448122888e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-3.64378536232834e-007,U,s,0,0,n,1539538600,-3.64348068160325e-007,U,b,0,0,n,3079077200\n                                        ,-3.64370009720005e-007,U,b,0,0,n,4618615800,-3.64367906513507e-007,U,b,0,0,n,6158154400\n                                        ,-3.64361767424271e-007,U,b,0,0,n,7697693000,-3.64355059900845e-007,U,b,0,0,n,9237231600\n                                        ,-3.64359834748029e-007,U,b,0,0,n,10776770200,-3.64392406027036e-007,U,b,0,0,n,12316308800\n                                        ,-3.64411050668423e-007,U,b,0,0,n,13855847400,-3.64347613412974e-007,U,b,0,0,n,15395386000\n                                        ,-3.6434880712477e-007,U,b,0,0,n,16934924599,-3.64324193924404e-007,U,b,0,0,n,18474463200\n                                        ,-3.64356480986316e-007,U,b,0,0,n,20014001800,-3.64349887149729e-007,U,b,0,0,n,21553540400\n                                        ,-3.64332493063557e-007,U,b,0,0,n,23093079000,-3.64343520686816e-007,U,b,0,0,n,24632617600\n                                        ,-3.64376035122405e-007,U,b,0,0,n,26172156200,-3.6434931871554e-007,U,b,0,0,n,27711694800\n                                        ,-3.64346362857759e-007,U,b,0,0,n,29251233400,-3.64340451142198e-007,U,b,0,0,n,30790772000\n                                        ,-3.64331924629369e-007,U,b,0,0,n,32330310599,-3.64338404779119e-007,U,b,0,0,n,33869849199\n                                        ,-3.64365348559659e-007,U,b,0,0,n,35409387800,-3.64356878890248e-007,U,b,0,0,n,36948926400\n                                        ,-3.64362335858459e-007,U,b,0,0,n,38488465000,-3.64361596894014e-007,U,b,0,0,n,40028003600\n                                        ,-3.64357163107343e-007,U,b,0,0,n,41567542200,-3.64356139925803e-007,U,b,0,0,n,43107080800\n                                        ,-3.64363359039999e-007,U,b,0,0,n,44646619400,-3.64359038940165e-007,U,b,0,0,n,46186158000\n                                        ,-3.64362222171621e-007,U,b,0,0,n,47725696599,-3.64374216133001e-007,U,b,0,0,n,49265235200\n                                        ,-3.64372738204111e-007,U,b,0,0,n,50804773799,-3.64348068160325e-007,U,b,0,0,n,52344312400\n                                        ,-3.64346135484084e-007,U,b,0,0,n,53883850999,-3.64367394922738e-007,U,b,0,0,n,55423389600\n                                        ,-3.64363529570255e-007,U,b,0,0,n,56962928200,-3.64385300599679e-007,U,b,0,0,n,58502466800\n                                        ,-3.643543209364e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 7.24273192531655e-008\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,8.6035655044725e-008,U,s,0,0,n,28866348750,-4.48137171815688e-008,U,s,0,0,n,57732697500\n                                        ,8.6035655044725e-008,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 4.3645964069583e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,4.36437630924047e-006,U,s,0,0,n,28866348750,4.36649179391679e-006,U,s,0,0,n,57732697500\n                                        ,4.36437630924047e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 16.150936126709\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,17.1974830627441,U,s,-7.21756458282471,0,n,28866348750,12.686505317688,U,s,0,7.21756458282471\n                                        ,n,57732697500,17.1974830627441,U,s,7.21756458282471,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Middle3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.52912795543671\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 7.2803447892511e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,7.2797962502591e-007,U,s,0,0,n,1539538600,7.28029647234507e-007,U,b,0,0,n,3079077200\n                                        ,7.27997132798919e-007,U,b,0,0,n,4618615800,7.27972462755133e-007,U,b,0,0,n,6158154400\n                                        ,7.27997928606783e-007,U,b,0,0,n,7697693000,7.28044085462898e-007,U,b,0,0,n,9237231600\n                                        ,7.27987355730875e-007,U,b,0,0,n,10776770200,7.27965300484357e-007,U,b,0,0,n,12316308800\n                                        ,7.27980989267962e-007,U,b,0,0,n,13855847400,7.280130489562e-007,U,b,0,0,n,15395386000\n                                        ,7.28010661532608e-007,U,b,0,0,n,16934924599,7.27989515780791e-007,U,b,0,0,n,18474463200\n                                        ,7.28010434158932e-007,U,b,0,0,n,20014001800,7.27995541183191e-007,U,b,0,0,n,21553540400\n                                        ,7.28005090877559e-007,U,b,0,0,n,23093079000,7.28003385574993e-007,U,b,0,0,n,24632617600\n                                        ,7.28034422081691e-007,U,b,0,0,n,26172156200,7.28005772998586e-007,U,b,0,0,n,27711694800\n                                        ,7.27986218862497e-007,U,b,0,0,n,29251233400,7.28039196928876e-007,U,b,0,0,n,30790772000\n                                        ,7.27985536741471e-007,U,b,0,0,n,32330310599,7.28002703453967e-007,U,b,0,0,n,33869849199\n                                        ,7.28046018139139e-007,U,b,0,0,n,35409387800,7.28004977190722e-007,U,b,0,0,n,36948926400\n                                        ,7.28005886685423e-007,U,b,0,0,n,38488465000,7.27993040072761e-007,U,b,0,0,n,40028003600\n                                        ,7.27993267446436e-007,U,b,0,0,n,41567542200,7.28000770777726e-007,U,b,0,0,n,43107080800\n                                        ,7.27991448457033e-007,U,b,0,0,n,44646619400,7.27992812699085e-007,U,b,0,0,n,46186158000\n                                        ,7.27994518001651e-007,U,b,0,0,n,47725696599,7.27994972749002e-007,U,b,0,0,n,49265235200\n                                        ,7.2797462280505e-007,U,b,0,0,n,50804773799,7.28021234408516e-007,U,b,0,0,n,52344312400\n                                        ,7.28036923192121e-007,U,b,0,0,n,53883850999,7.27973826997186e-007,U,b,0,0,n,55423389600\n                                        ,7.28007933048502e-007,U,b,0,0,n,56962928200,7.2794119887476e-007,U,b,0,0,n,58502466800\n                                        ,7.28010888906283e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 6.76120862408425e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,6.75938849781232e-007,U,s,0,0,n,1539538600,6.76115803344146e-007,U,b,0,0,n,3079077200\n                                        ,6.76003082844545e-007,U,b,0,0,n,4618615800,6.75943056194228e-007,U,b,0,0,n,6158154400\n                                        ,6.76024683343712e-007,U,b,0,0,n,7697693000,6.76129161547578e-007,U,b,0,0,n,9237231600\n                                        ,6.7598290343085e-007,U,b,0,0,n,10776770200,6.75802084515453e-007,U,b,0,0,n,12316308800\n                                        ,6.75761157253874e-007,U,b,0,0,n,13855847400,6.76091076456942e-007,U,b,0,0,n,15395386000\n                                        ,6.76045829095528e-007,U,b,0,0,n,16934924599,6.76112335895596e-007,U,b,0,0,n,18474463200\n                                        ,6.76036506774835e-007,U,b,0,0,n,20014001800,6.76036847835348e-007,U,b,0,0,n,21553540400\n                                        ,6.76105400998495e-007,U,b,0,0,n,23093079000,6.76072772876068e-007,U,b,0,0,n,24632617600\n                                        ,6.76042930081167e-007,U,b,0,0,n,26172156200,6.76061972626485e-007,U,b,0,0,n,27711694800\n                                        ,6.76030026625085e-007,U,b,0,0,n,29251233400,6.76153604217689e-007,U,b,0,0,n,30790772000\n                                        ,6.76049467074336e-007,U,b,0,0,n,32330310599,6.76072545502393e-007,U,b,0,0,n,33869849199\n                                        ,6.76126774123986e-007,U,b,0,0,n,35409387800,6.76039917379967e-007,U,b,0,0,n,36948926400\n                                        ,6.76034346724919e-007,U,b,0,0,n,38488465000,6.76010245115322e-007,U,b,0,0,n,40028003600\n                                        ,6.76003310218221e-007,U,b,0,0,n,41567542200,6.76035881497228e-007,U,b,0,0,n,43107080800\n                                        ,6.76006095545745e-007,U,b,0,0,n,44646619400,6.76010358802159e-007,U,b,0,0,n,46186158000\n                                        ,6.75997569032916e-007,U,b,0,0,n,47725696599,6.75995693200093e-007,U,b,0,0,n,49265235200\n                                        ,6.75940100336447e-007,U,b,0,0,n,50804773799,6.76096760798828e-007,U,b,0,0,n,52344312400\n                                        ,6.76125296195096e-007,U,b,0,0,n,53883850999,6.75948399475601e-007,U,b,0,0,n,55423389600\n                                        ,6.76012177791563e-007,U,b,0,0,n,56962928200,6.75872911415354e-007,U,b,0,0,n,58502466800\n                                        ,6.76072318128718e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 3.09046095026133e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,3.09046095026133e-006,U,s,0,0,n,28866348750,3.09046095026133e-006,U,s,0,0,n,57732697500\n                                        ,3.09046095026133e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -2.7093806238554e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-2.7093806238554e-006,U,s,0,0,n,28866348750,-2.7093806238554e-006,U,s,0,0,n,57732697500\n                                        ,-2.7093806238554e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.80611896514893\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,3.80611896514893,U,s,0,0,n,28866348750,3.80611896514893,U,s,0,0,n,57732697500,3.80611896514893\n                                        ,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Ring1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.29501485824585\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.0947425812482834\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.806466221809387\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -8.98741436004639\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-8.98537254333496,U,s,0,0,n,28866348750,-9.0050106048584,U,s,0,0,n,57732697500,-8.98537254333496\n                                        ,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.27314984798431\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-1.4012713432312,U,s,0,0,n,28866348750,-0.169334262609482,U,s,0,0,n,57732697500\n                                        ,-1.4012713432312,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 19.2985076904297\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,20.5749187469482,U,s,-8.8028450012207,0,n,28866348750,15.0731420516968,U,s,0,8.8028450012207\n                                        ,n,57732697500,20.5749187469482,U,s,8.8028450012207,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.999999940395355\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Ring2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.40333545207977\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.16687704121432e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,1.16687192530662e-006,U,s,0,0,n,1539538600,1.16687738227483e-006,U,b,0,0,n,3079077200\n                                        ,1.16687454010389e-006,U,b,0,0,n,4618615800,1.16686840101465e-006,U,b,0,0,n,6158154400\n                                        ,1.16687408535654e-006,U,b,0,0,n,7697693000,1.16688136131415e-006,U,b,0,0,n,9237231600\n                                        ,1.16686965156987e-006,U,b,0,0,n,10776770200,1.16686828732782e-006,U,b,0,0,n,12316308800\n                                        ,1.16687283480132e-006,U,b,0,0,n,13855847400,1.16687408535654e-006,U,b,0,0,n,15395386000\n                                        ,1.16687328954868e-006,U,b,0,0,n,16934924599,1.1668670367726e-006,U,b,0,0,n,18474463200\n                                        ,1.16687465379073e-006,U,b,0,0,n,20014001800,1.16687101581192e-006,U,b,0,0,n,21553540400\n                                        ,1.16687112949876e-006,U,b,0,0,n,23093079000,1.16687226636714e-006,U,b,0,0,n,24632617600\n                                        ,1.16688249818253e-006,U,b,0,0,n,26172156200,1.1668739716697e-006,U,b,0,0,n,27711694800\n                                        ,1.16686874207517e-006,U,b,0,0,n,29251233400,1.16687988338526e-006,U,b,0,0,n,30790772000\n                                        ,1.16686578621739e-006,U,b,0,0,n,32330310599,1.16687078843825e-006,U,b,0,0,n,33869849199\n                                        ,1.16688488560612e-006,U,b,0,0,n,35409387800,1.1668739716697e-006,U,b,0,0,n,36948926400\n                                        ,1.16687510853808e-006,U,b,0,0,n,38488465000,1.16687147055927e-006,U,b,0,0,n,40028003600\n                                        ,1.16687090212508e-006,U,b,0,0,n,41567542200,1.16687272111449e-006,U,b,0,0,n,43107080800\n                                        ,1.16687226636714e-006,U,b,0,0,n,44646619400,1.16687101581192e-006,U,b,0,0,n,46186158000\n                                        ,1.16687249374081e-006,U,b,0,0,n,47725696599,1.16687328954868e-006,U,b,0,0,n,49265235200\n                                        ,1.16686976525671e-006,U,b,0,0,n,50804773799,1.16687579065911e-006,U,b,0,0,n,52344312400\n                                        ,1.166877268588e-006,U,b,0,0,n,53883850999,1.16686862838833e-006,U,b,0,0,n,55423389600\n                                        ,1.16687431273022e-006,U,b,0,0,n,56962928200,1.16686669571209e-006,U,b,0,0,n,58502466800\n                                        ,1.16687510853808e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -2.30216258501059e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-2.30247451327159e-007,U,s,0,0,n,1539538600,-2.30217693797385e-007,U,b,0,0,n,3079077200\n                                        ,-2.30238043741338e-007,U,b,0,0,n,4618615800,-2.30241511189888e-007,U,b,0,0,n,6158154400\n                                        ,-2.30232245712614e-007,U,b,0,0,n,7697693000,-2.3021996753414e-007,U,b,0,0,n,9237231600\n                                        ,-2.30233695219795e-007,U,b,0,0,n,10776770200,-2.30264788569912e-007,U,b,0,0,n,12316308800\n                                        ,-2.30277549917446e-007,U,b,0,0,n,13855847400,-2.30218802244053e-007,U,b,0,0,n,15395386000\n                                        ,-2.30223065500468e-007,U,b,0,0,n,16934924599,-2.30204392437372e-007,U,b,0,0,n,18474463200\n                                        ,-2.30227726660814e-007,U,b,0,0,n,20014001800,-2.3022445816423e-007,U,b,0,0,n,21553540400\n                                        ,-2.302089967543e-007,U,b,0,0,n,23093079000,-2.3021695483294e-007,U,b,0,0,n,24632617600\n                                        ,-2.3023744688544e-007,U,b,0,0,n,26172156200,-2.30221900210381e-007,U,b,0,0,n,27711694800\n                                        ,-2.30223179187306e-007,U,b,0,0,n,29251233400,-2.30209110441137e-007,U,b,0,0,n,30790772000\n                                        ,-2.30213430540971e-007,U,b,0,0,n,32330310599,-2.30214908469861e-007,U,b,0,0,n,33869849199\n                                        ,-2.30225282393803e-007,U,b,0,0,n,35409387800,-2.30227868769362e-007,U,b,0,0,n,36948926400\n                                        ,-2.30231506748169e-007,U,b,0,0,n,38488465000,-2.30231620435006e-007,U,b,0,0,n,40028003600\n                                        ,-2.30230966735689e-007,U,b,0,0,n,41567542200,-2.30227726660814e-007,U,b,0,0,n,43107080800\n                                        ,-2.30234576292787e-007,U,b,0,0,n,44646619400,-2.30231535169878e-007,U,b,0,0,n,46186158000\n                                        ,-2.30234121545436e-007,U,b,0,0,n,47725696599,-2.30240772225443e-007,U,b,0,0,n,49265235200\n                                        ,-2.3024441020425e-007,U,b,0,0,n,50804773799,-2.30219114882857e-007,U,b,0,0,n,52344312400\n                                        ,-2.30215732699435e-007,U,b,0,0,n,53883850999,-2.30240715382024e-007,U,b,0,0,n,55423389600\n                                        ,-2.30233240472444e-007,U,b,0,0,n,56962928200,-2.30257029443237e-007,U,b,0,0,n,58502466800\n                                        ,-2.30224657116196e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 2.20680271922902e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,2.20680271922902e-006,U,s,0,0,n,28866348750,2.20680271922902e-006,U,s,0,0,n,57732697500\n                                        ,2.20680271922902e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.11167731581463e-008\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-3.11167731581463e-008,U,s,0,0,n,28866348750,-3.11167731581463e-008,U,s,0,0,n,57732697500\n                                        ,-3.11167731581463e-008,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 25.5660648345947\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,25.5660648345947,U,s,0,0,n,28866348750,25.5660648345947,U,s,0,0,n,57732697500,25.5660648345947\n                                        ,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1.00000011920929\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Ring3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.38826143741608\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 2.13072965493666e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,2.13108478419599e-007,U,s,0,0,n,1539538600,2.13075622923498e-007,U,b,0,0,n,3079077200\n                                        ,2.13098815038393e-007,U,b,0,0,n,4618615800,2.13101998269849e-007,U,b,0,0,n,6158154400\n                                        ,2.13095404433261e-007,U,b,0,0,n,7697693000,2.13075736610335e-007,U,b,0,0,n,9237231600\n                                        ,2.1309097064659e-007,U,b,0,0,n,10776770200,2.13113480640459e-007,U,b,0,0,n,12316308800\n                                        ,2.13117459679779e-007,U,b,0,0,n,13855847400,2.1307801034709e-007,U,b,0,0,n,15395386000\n                                        ,2.13079715649656e-007,U,b,0,0,n,16934924599,2.13072439692041e-007,U,b,0,0,n,18474463200\n                                        ,2.13083581002138e-007,U,b,0,0,n,20014001800,2.13089151657186e-007,U,b,0,0,n,21553540400\n                                        ,2.13071189136826e-007,U,b,0,0,n,23093079000,2.13078692468116e-007,U,b,0,0,n,24632617600\n                                        ,2.13085058931028e-007,U,b,0,0,n,26172156200,2.1308198938641e-007,U,b,0,0,n,27711694800\n                                        ,2.13088128475647e-007,U,b,0,0,n,29251233400,2.13061184695107e-007,U,b,0,0,n,30790772000\n                                        ,2.13078465094441e-007,U,b,0,0,n,32330310599,2.13075736610335e-007,U,b,0,0,n,33869849199\n                                        ,2.13068688026397e-007,U,b,0,0,n,35409387800,2.13086309486243e-007,U,b,0,0,n,36948926400\n                                        ,2.13087560041458e-007,U,b,0,0,n,38488465000,2.13093130696507e-007,U,b,0,0,n,40028003600\n                                        ,2.13096996048989e-007,U,b,0,0,n,41567542200,2.13086195799406e-007,U,b,0,0,n,43107080800\n                                        ,2.13096541301638e-007,U,b,0,0,n,44646619400,2.13092675949156e-007,U,b,0,0,n,46186158000\n                                        ,2.13093017009669e-007,U,b,0,0,n,47725696599,2.13102111956687e-007,U,b,0,0,n,49265235200\n                                        ,2.13105749935494e-007,U,b,0,0,n,50804773799,2.13078237720765e-007,U,b,0,0,n,52344312400\n                                        ,2.1307198494469e-007,U,b,0,0,n,53883850999,2.13101770896174e-007,U,b,0,0,n,55423389600\n                                        ,2.13088128475647e-007,U,b,0,0,n,56962928200,2.13127236747823e-007,U,b,0,0,n,58502466800\n                                        ,2.13085854738893e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -2.23952710598496e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-2.24095174417016e-007,U,s,0,0,n,1539538600,-2.23953122713283e-007,U,b,0,0,n,3079077200\n                                        ,-2.24035488827212e-007,U,b,0,0,n,4618615800,-2.24123510861318e-007,U,b,0,0,n,6158154400\n                                        ,-2.24031509787892e-007,U,b,0,0,n,7697693000,-2.23915066044356e-007,U,b,0,0,n,9237231600\n                                        ,-2.24094833356503e-007,U,b,0,0,n,10776770200,-2.24237396651006e-007,U,b,0,0,n,12316308800\n                                        ,-2.24231115453222e-007,U,b,0,0,n,13855847400,-2.23988791958618e-007,U,b,0,0,n,15395386000\n                                        ,-2.24051007080561e-007,U,b,0,0,n,16934924599,-2.24029804485326e-007,U,b,0,0,n,18474463200\n                                        ,-2.24034835127895e-007,U,b,0,0,n,20014001800,-2.24052826069965e-007,U,b,0,0,n,21553540400\n                                        ,-2.24014740979328e-007,U,b,0,0,n,23093079000,-2.24029008677462e-007,U,b,0,0,n,24632617600\n                                        ,-2.23967106194323e-007,U,b,0,0,n,26172156200,-2.24020311634376e-007,U,b,0,0,n,27711694800\n                                        ,-2.24072493892891e-007,U,b,0,0,n,29251233400,-2.23925383124879e-007,U,b,0,0,n,30790772000\n                                        ,-2.24092957523681e-007,U,b,0,0,n,32330310599,-2.24042139507219e-007,U,b,0,0,n,33869849199\n                                        ,-2.23881215788424e-007,U,b,0,0,n,35409387800,-2.24027701278828e-007,U,b,0,0,n,36948926400\n                                        ,-2.24017753680528e-007,U,b,0,0,n,38488465000,-2.24060357822964e-007,U,b,0,0,n,40028003600\n                                        ,-2.24070646481778e-007,U,b,0,0,n,41567542200,-2.24038132046189e-007,U,b,0,0,n,43107080800\n                                        ,-2.24052456587742e-007,U,b,0,0,n,44646619400,-2.24061295739375e-007,U,b,0,0,n,46186158000\n                                        ,-2.24067832732544e-007,U,b,0,0,n,47725696599,-2.24032163487209e-007,U,b,0,0,n,49265235200\n                                        ,-2.24111090574297e-007,U,b,0,0,n,50804773799,-2.23979327529378e-007,U,b,0,0,n,52344312400\n                                        ,-2.2394777943191e-007,U,b,0,0,n,53883850999,-2.24117286506953e-007,U,b,0,0,n,55423389600\n                                        ,-2.24046431185343e-007,U,b,0,0,n,56962928200,-2.24157759021182e-007,U,b,0,0,n,58502466800\n                                        ,-2.23990554104603e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 0\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 9.02113819122314\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,9.02113819122314,U,s,0,0,n,28866348750,9.02113819122314,U,s,0,0,n,57732697500,9.02113819122314\n                                        ,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Pinky1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 3.97267842292786\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.223487868905067\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.74283754825592\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -20.6544322967529\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-20.6544322967529,U,s,0,0,n,28866348750,-20.6544322967529,U,s,0,0,n,57732697500\n                                        ,-20.6544322967529,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.819446563720703\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-0.819446563720703,U,s,0,0,n,28866348750,-0.819446563720703,U,s,0,0,n,57732697500\n                                        ,-0.819446563720703,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 22.4568309783936\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,22.4568309783936,U,s,0,0,n,28866348750,22.4568309783936,U,s,0,0,n,57732697500,22.4568309783936\n                                        ,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Pinky2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.13179302215576\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -2.16195689972665e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-2.16194939639536e-006,U,s,0,0,n,1539538600,-2.16195576285827e-006,U,b,0,0,n,3079077200\n                                        ,-2.16195098801109e-006,U,b,0,0,n,4618615800,-2.16195371649519e-006,U,b,0,0,n,6158154400\n                                        ,-2.16195167013211e-006,U,b,0,0,n,7697693000,-2.16195439861622e-006,U,b,0,0,n,9237231600\n                                        ,-2.16195667235297e-006,U,b,0,0,n,10776770200,-2.16195417124254e-006,U,b,0,0,n,12316308800\n                                        ,-2.16195280700049e-006,U,b,0,0,n,13855847400,-2.161957354474e-006,U,b,0,0,n,15395386000\n                                        ,-2.16195871871605e-006,U,b,0,0,n,16934924599,-2.16195985558443e-006,U,b,0,0,n,18474463200\n                                        ,-2.1619564449793e-006,U,b,0,0,n,20014001800,-2.16195485336357e-006,U,b,0,0,n,21553540400\n                                        ,-2.16195940083708e-006,U,b,0,0,n,23093079000,-2.16195712710032e-006,U,b,0,0,n,24632617600\n                                        ,-2.16195098801109e-006,U,b,0,0,n,26172156200,-2.16195576285827e-006,U,b,0,0,n,27711694800\n                                        ,-2.16195667235297e-006,U,b,0,0,n,29251233400,-2.16195712710032e-006,U,b,0,0,n,30790772000\n                                        ,-2.16196167457383e-006,U,b,0,0,n,32330310599,-2.16195962821075e-006,U,b,0,0,n,33869849199\n                                        ,-2.16195076063741e-006,U,b,0,0,n,35409387800,-2.16195439861622e-006,U,b,0,0,n,36948926400\n                                        ,-2.16195371649519e-006,U,b,0,0,n,38488465000,-2.16195462598989e-006,U,b,0,0,n,40028003600\n                                        ,-2.16195553548459e-006,U,b,0,0,n,41567542200,-2.16195553548459e-006,U,b,0,0,n,43107080800\n                                        ,-2.16195189750579e-006,U,b,0,0,n,44646619400,-2.16195439861622e-006,U,b,0,0,n,46186158000\n                                        ,-2.16195485336357e-006,U,b,0,0,n,47725696599,-2.16194939639536e-006,U,b,0,0,n,49265235200\n                                        ,-2.16195167013211e-006,U,b,0,0,n,50804773799,-2.16195599023195e-006,U,b,0,0,n,52344312400\n                                        ,-2.16195712710032e-006,U,b,0,0,n,53883850999,-2.16195508073724e-006,U,b,0,0,n,55423389600\n                                        ,-2.16195599023195e-006,U,b,0,0,n,56962928200,-2.16194598579023e-006,U,b,0,0,n,58502466800\n                                        ,-2.16195348912152e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -4.03594668796359e-008\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-4.03794615522202e-008,U,s,0,0,n,1539538600,-4.03593958253623e-008,U,b,0,0,n,3079077200\n                                        ,-4.03723561248626e-008,U,b,0,0,n,4618615800,-4.03788362746127e-008,U,b,0,0,n,6158154400\n                                        ,-4.03698550144327e-008,U,b,0,0,n,7697693000,-4.03582589569851e-008,U,b,0,0,n,9237231600\n                                        ,-4.03736066800775e-008,U,b,0,0,n,10776770200,-4.03946955884749e-008,U,b,0,0,n,12316308800\n                                        ,-4.03997546527535e-008,U,b,0,0,n,13855847400,-4.03613853450224e-008,U,b,0,0,n,15395386000\n                                        ,-4.03677518079348e-008,U,b,0,0,n,16934924599,-4.03571789320267e-008,U,b,0,0,n,18474463200\n                                        ,-4.03680360250291e-008,U,b,0,0,n,20014001800,-4.03675812776783e-008,U,b,0,0,n,21553540400\n                                        ,-4.03579178964719e-008,U,b,0,0,n,23093079000,-4.03600779463886e-008,U,b,0,0,n,24632617600\n                                        ,-4.03679791816103e-008,U,b,0,0,n,26172156200,-4.03641138291277e-008,U,b,0,0,n,27711694800\n                                        ,-4.0368092868448e-008,U,b,0,0,n,29251233400,-4.03520061809104e-008,U,b,0,0,n,30790772000\n                                        ,-4.03653075409238e-008,U,b,0,0,n,32330310599,-4.03625222133996e-008,U,b,0,0,n,33869849199\n                                        ,-4.03565536544193e-008,U,b,0,0,n,35409387800,-4.0368092868448e-008,U,b,0,0,n,36948926400\n                                        ,-4.03684339289612e-008,U,b,0,0,n,38488465000,-4.03713897867419e-008,U,b,0,0,n,40028003600\n                                        ,-4.03721287511871e-008,U,b,0,0,n,41567542200,-4.03679791816103e-008,U,b,0,0,n,43107080800\n                                        ,-4.03719582209305e-008,U,b,0,0,n,44646619400,-4.03732087761455e-008,U,b,0,0,n,46186158000\n                                        ,-4.03726403419569e-008,U,b,0,0,n,47725696599,-4.03721287511871e-008,U,b,0,0,n,49265235200\n                                        ,-4.03789499614504e-008,U,b,0,0,n,50804773799,-4.03620106226299e-008,U,b,0,0,n,52344312400\n                                        ,-4.03589979214303e-008,U,b,0,0,n,53883850999,-4.037298140247e-008,U,b,0,0,n,55423389600\n                                        ,-4.03709918828099e-008,U,b,0,0,n,56962928200,-4.03870785703475e-008,U,b,0,0,n,58502466800\n                                        ,-4.03644548896409e-008,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 0\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Pinky3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 0.858954668045044\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 6.74906289077626e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,6.74954435453401e-007,U,s,0,0,n,1539538600,6.74907767006516e-007,U,b,0,0,n,3079077200\n                                        ,6.74937950861931e-007,U,b,0,0,n,4618615800,6.74953241741605e-007,U,b,0,0,n,6158154400\n                                        ,6.74933858135773e-007,U,b,0,0,n,7697693000,6.74903787967196e-007,U,b,0,0,n,9237231600\n                                        ,6.7493999722501e-007,U,b,0,0,n,10776770200,6.749794465577e-007,U,b,0,0,n,12316308800\n                                        ,6.7498342559702e-007,U,b,0,0,n,13855847400,6.74913906095753e-007,U,b,0,0,n,15395386000\n                                        ,6.74924876875593e-007,U,b,0,0,n,16934924599,6.74912882914214e-007,U,b,0,0,n,18474463200\n                                        ,6.74925104249269e-007,U,b,0,0,n,20014001800,6.74933914979192e-007,U,b,0,0,n,21553540400\n                                        ,6.7491055233404e-007,U,b,0,0,n,23093079000,6.7491953359422e-007,U,b,0,0,n,24632617600\n                                        ,6.74912485010282e-007,U,b,0,0,n,26172156200,6.7492055677576e-007,U,b,0,0,n,27711694800\n                                        ,6.7493550659492e-007,U,b,0,0,n,29251233400,6.74885086482391e-007,U,b,0,0,n,30790772000\n                                        ,6.74931982302951e-007,U,b,0,0,n,32330310599,6.7491953359422e-007,U,b,0,0,n,33869849199\n                                        ,6.74878492645803e-007,U,b,0,0,n,35409387800,6.74924763188756e-007,U,b,0,0,n,36948926400\n                                        ,6.74919874654734e-007,U,b,0,0,n,38488465000,6.74940679346037e-007,U,b,0,0,n,40028003600\n                                        ,6.74937723488256e-007,U,b,0,0,n,41567542200,6.7493300548449e-007,U,b,0,0,n,43107080800\n                                        ,6.74938348765863e-007,U,b,0,0,n,44646619400,6.74937155054067e-007,U,b,0,0,n,46186158000\n                                        ,6.74937325584324e-007,U,b,0,0,n,47725696599,6.74940679346037e-007,U,b,0,0,n,49265235200\n                                        ,6.74954094392888e-007,U,b,0,0,n,50804773799,6.74913849252334e-007,U,b,0,0,n,52344312400\n                                        ,6.74904867992154e-007,U,b,0,0,n,53883850999,6.7495199118639e-007,U,b,0,0,n,55423389600\n                                        ,6.74932095989789e-007,U,b,0,0,n,56962928200,6.74976604386757e-007,U,b,0,0,n,58502466800\n                                        ,6.74920727306016e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 5.44045349215594e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,5.43983901479805e-007,U,s,0,0,n,1539538600,5.44046997674741e-007,U,b,0,0,n,3079077200\n                                        ,5.44012209502398e-007,U,b,0,0,n,4618615800,5.43964858934487e-007,U,b,0,0,n,6158154400\n                                        ,5.44011015790602e-007,U,b,0,0,n,7697693000,5.44067574992368e-007,U,b,0,0,n,9237231600\n                                        ,5.43977137112961e-007,U,b,0,0,n,10776770200,5.43919611573074e-007,U,b,0,0,n,12316308800\n                                        ,5.43934106644883e-007,U,b,0,0,n,13855847400,5.4402357818617e-007,U,b,0,0,n,15395386000\n                                        ,5.43990836376906e-007,U,b,0,0,n,16934924599,5.43996407031955e-007,U,b,0,0,n,18474463200\n                                        ,5.44006184099999e-007,U,b,0,0,n,20014001800,5.43995554380672e-007,U,b,0,0,n,21553540400\n                                        ,5.44007548342051e-007,U,b,0,0,n,23093079000,5.44003853519826e-007,U,b,0,0,n,24632617600\n                                        ,5.44050408279873e-007,U,b,0,0,n,26172156200,5.44012038972141e-007,U,b,0,0,n,27711694800\n                                        ,5.43983446732454e-007,U,b,0,0,n,29251233400,5.44058821105864e-007,U,b,0,0,n,30790772000\n                                        ,5.43966734767309e-007,U,b,0,0,n,32330310599,5.43995838597766e-007,U,b,0,0,n,33869849199\n                                        ,5.44094007182139e-007,U,b,0,0,n,35409387800,5.44010219982738e-007,U,b,0,0,n,36948926400\n                                        ,5.44018348591635e-007,U,b,0,0,n,38488465000,5.43995440693834e-007,U,b,0,0,n,40028003600\n                                        ,5.44022668691468e-007,U,b,0,0,n,41567542200,5.44001295565977e-007,U,b,0,0,n,43107080800\n                                        ,5.44000329227856e-007,U,b,0,0,n,44646619400,5.43994246982038e-007,U,b,0,0,n,46186158000\n                                        ,5.43992314305797e-007,U,b,0,0,n,47725696599,5.44014710612828e-007,U,b,0,0,n,49265235200\n                                        ,5.43974636002531e-007,U,b,0,0,n,50804773799,5.44031706795067e-007,U,b,0,0,n,52344312400\n                                        ,5.44047850326024e-007,U,b,0,0,n,53883850999,5.43968042165943e-007,U,b,0,0,n,55423389600\n                                        ,5.44003057711961e-007,U,b,0,0,n,56962928200,5.43954683962511e-007,U,b,0,0,n,58502466800\n                                        ,5.44030001492501e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -2.65944640887028e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-2.65944640887028e-006,U,s,0,0,n,28866348750,-2.65944640887028e-006,U,s,0,0,n,57732697500\n                                        ,-2.65944640887028e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 2.59772286881343e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,2.59772286881343e-006,U,s,0,0,n,28866348750,2.59772286881343e-006,U,s,0,0,n,57732697500\n                                        ,2.59772286881343e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.87032294273376\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,3.87032294273376,U,s,0,0,n,28866348750,3.87032294273376,U,s,0,0,n,57732697500,3.87032294273376\n                                        ,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.999999940395355\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_UpperArm\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 6.88650560379028\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,6.88245630264282,U,s,0,0,n,1539538600,6.88259840011597,U,b,0,0,n,3079077200,6.88238525390625\n                                        ,U,b,0,0,n,4618615800,6.88271951675415,U,b,0,0,n,6158154400,6.8830771446228,U,b,0\n                                        ,0,n,7697693000,6.88339233398438,U,b,0,0,n,9237231600,6.88417434692383,U,b,0,0,n,10776770200\n                                        ,6.8849720954895,U,b,0,0,n,12316308800,6.88582515716553,U,b,0,0,n,13855847400,6.88667011260986\n                                        ,U,b,0,0,n,15395386000,6.88687133789063,U,b,0,0,n,16934924599,6.88717222213745,U,b\n                                        ,0,0,n,18474463200,6.88726329803467,U,b,0,0,n,20014001800,6.88735723495483,U,b,0,0\n                                        ,n,21553540400,6.8875527381897,U,b,0,0,n,23093079000,6.88767910003662,U,b,0,0,n,24632617600\n                                        ,6.88765716552734,U,b,0,0,n,26172156200,6.88749742507935,U,b,0,0,n,27711694800,6.88721561431885\n                                        ,U,b,0,0,n,29251233400,6.8863377571106,U,b,0,0,n,30790772000,6.88587093353271,U,b\n                                        ,0,0,n,32330310599,6.88577938079834,U,b,0,0,n,33869849199,6.88491153717041,U,b,0,0\n                                        ,n,35409387800,6.88456678390503,U,b,0,0,n,36948926400,6.88431692123413,U,b,0,0,n,38488465000\n                                        ,6.88466644287109,U,b,0,0,n,40028003600,6.88480854034424,U,b,0,0,n,41567542200,6.88560199737549\n                                        ,U,b,0,0,n,43107080800,6.88611030578613,U,b,0,0,n,44646619400,6.88689136505127,U,b\n                                        ,0,0,n,46186158000,6.88726663589478,U,b,0,0,n,47725696599,6.88753175735474,U,b,0,0\n                                        ,n,49265235200,6.88752698898315,U,b,0,0,n,50804773799,6.88715219497681,U,b,0,0,n,52344312400\n                                        ,6.88638591766357,U,b,0,0,n,53883850999,6.88557863235474,U,b,0,0,n,55423389600,6.88470077514648\n                                        ,U,b,0,0,n,56962928200,6.8834753036499,U,b,0,0,n,58502466800,6.88245010375977,U,s\n                                        ,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.05879163742065\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-1.11210310459137,U,s,0,0,n,1539538600,-1.09878540039063,U,b,0,0,n,3079077200,-1.08663582801819\n                                        ,U,b,0,0,n,4618615800,-1.05570733547211,U,b,0,0,n,6158154400,-1.01684212684631,U,b\n                                        ,0,0,n,7697693000,-0.963702917098999,U,b,0,0,n,9237231600,-0.916648924350739,U,b,0\n                                        ,0,n,10776770200,-0.869555950164795,U,b,0,0,n,12316308800,-0.82675576210022,U,b,0\n                                        ,0,n,13855847400,-0.788120031356812,U,b,0,0,n,15395386000,-0.749440610408783,U,b,0\n                                        ,0,n,16934924599,-0.720489740371704,U,b,0,0,n,18474463200,-0.699754238128662,U,b,0\n                                        ,0,n,20014001800,-0.674665689468384,U,b,0,0,n,21553540400,-0.663979589939117,U,b,0\n                                        ,0,n,23093079000,-0.654358148574829,U,b,0,0,n,24632617600,-0.641892373561859,U,b,0\n                                        ,0,n,26172156200,-0.632123947143555,U,b,0,0,n,27711694800,-0.624120116233826,U,b,0\n                                        ,0,n,29251233400,-0.609970092773438,U,b,0,0,n,30790772000,-0.609074056148529,U,b,0\n                                        ,0,n,32330310599,-0.620391249656677,U,b,0,0,n,33869849199,-0.622004628181458,U,b,0\n                                        ,0,n,35409387800,-0.651685118675232,U,b,0,0,n,36948926400,-0.685647010803223,U,b,0\n                                        ,0,n,38488465000,-0.722791314125061,U,b,0,0,n,40028003600,-0.760441720485687,U,b,0\n                                        ,0,n,41567542200,-0.814907848834991,U,b,0,0,n,43107080800,-0.870589911937714,U,b,0\n                                        ,0,n,44646619400,-0.923455595970154,U,b,0,0,n,46186158000,-0.965631067752838,U,b,0\n                                        ,0,n,47725696599,-0.997197389602661,U,b,0,0,n,49265235200,-1.02122688293457,U,b,0\n                                        ,0,n,50804773799,-1.03968989849091,U,b,0,0,n,52344312400,-1.06232905387878,U,b,0,0\n                                        ,n,53883850999,-1.07863926887512,U,b,0,0,n,55423389600,-1.08932709693909,U,b,0,0,n\n                                        ,56962928200,-1.1033319234848,U,b,0,0,n,58502466800,-1.11214053630829,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.188849896192551\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,0.0333683639764786,U,s,0,0,n,1539538600,0.0211677849292755,U,b,0,0,n,3079077200\n                                        ,-0.000747203070204705,U,b,0,0,n,4618615800,-0.0202529914677143,U,b,0,0,n,6158154400\n                                        ,-0.0397112108767033,U,b,0,0,n,7697693000,-0.0607960000634193,U,b,0,0,n,9237231600\n                                        ,-0.0570149980485439,U,b,0,0,n,10776770200,-0.0449538640677929,U,b,0,0,n,12316308800\n                                        ,-0.022233871743083,U,b,0,0,n,13855847400,0.00965593196451664,U,b,0,0,n,15395386000\n                                        ,0.0280408840626478,U,b,0,0,n,16934924599,0.0547827035188675,U,b,0,0,n,18474463200\n                                        ,0.0736185312271118,U,b,0,0,n,20014001800,0.103232830762863,U,b,0,0,n,21553540400\n                                        ,0.131252929568291,U,b,0,0,n,23093079000,0.161355525255203,U,b,0,0,n,24632617600,0.199970364570618\n                                        ,U,b,0,0,n,26172156200,0.240238711237907,U,b,0,0,n,27711694800,0.271609336137772,U\n                                        ,b,0,0,n,29251233400,0.332380324602127,U,b,0,0,n,30790772000,0.363912492990494,U,b\n                                        ,0,0,n,32330310599,0.386451750993729,U,b,0,0,n,33869849199,0.428943753242493,U,b,0\n                                        ,0,n,35409387800,0.468638628721237,U,b,0,0,n,36948926400,0.498659014701843,U,b,0,0\n                                        ,n,38488465000,0.505474805831909,U,b,0,0,n,40028003600,0.513310372829437,U,b,0,0,n\n                                        ,41567542200,0.498017489910126,U,b,0,0,n,43107080800,0.478882491588593,U,b,0,0,n,44646619400\n                                        ,0.434307992458344,U,b,0,0,n,46186158000,0.389823317527771,U,b,0,0,n,47725696599,0.335614562034607\n                                        ,U,b,0,0,n,49265235200,0.274973213672638,U,b,0,0,n,50804773799,0.218344405293465,U\n                                        ,b,0,0,n,52344312400,0.183387950062752,U,b,0,0,n,53883850999,0.146207123994827,U,b\n                                        ,0,0,n,55423389600,0.10589012503624,U,b,0,0,n,56962928200,0.0645858347415924,U,b,0\n                                        ,0,n,58502466800,0.033165380358696,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 42.592903137207\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,44.7109642028809,U,s,0,0,n,1539538600,44.272403717041,U,b,0,0,n,3079077200,43.291561126709\n                                        ,U,b,0,0,n,4618615800,43.3829116821289,U,b,0,0,n,6158154400,43.6068267822266,U,b,0\n                                        ,0,n,7697693000,43.4459953308105,U,b,0,0,n,9237231600,43.0552024841309,U,b,0,0,n,10776770200\n                                        ,41.6393737792969,U,b,0,0,n,12316308800,37.9690895080566,U,b,0,0,n,13855847400,31.3963508605957\n                                        ,U,b,0,0,n,15395386000,22.7831439971924,U,b,0,0,n,16934924599,13.964674949646,U,b\n                                        ,0,0,n,18474463200,6.32410335540771,U,b,0,0,n,20014001800,0.700515985488892,U,b,0\n                                        ,0,n,21553540400,-2.7228217124939,U,b,0,0,n,23093079000,-5.49841022491455,U,b,0,0\n                                        ,n,24632617600,-7.20295286178589,U,b,0,0,n,26172156200,-8.62187576293945,U,b,0,0,n\n                                        ,27711694800,-8.92302703857422,U,b,0,0,n,29251233400,-9.35063076019287,U,b,0,0,n,30790772000\n                                        ,-9.08850574493408,U,b,0,0,n,32330310599,-8.68125152587891,U,b,0,0,n,33869849199,-8.28847694396973\n                                        ,U,b,0,0,n,35409387800,-7.52204132080078,U,b,0,0,n,36948926400,-6.15359163284302,U\n                                        ,b,0,0,n,38488465000,-1.47163212299347,U,b,0,0,n,40028003600,6.91400480270386,U,b\n                                        ,0,0,n,41567542200,17.7424201965332,U,b,0,0,n,43107080800,26.93092918396,U,b,0,0,n\n                                        ,44646619400,34.2462463378906,U,b,0,0,n,46186158000,38.5572624206543,U,b,0,0,n,47725696599\n                                        ,40.7695350646973,U,b,0,0,n,49265235200,41.7207336425781,U,b,0,0,n,50804773799,42.4444732666016\n                                        ,U,b,0,0,n,52344312400,42.6203880310059,U,b,0,0,n,53883850999,42.8334159851074,U,b\n                                        ,0,0,n,55423389600,43.0791053771973,U,b,0,0,n,56962928200,43.5645904541016,U,b,0,0\n                                        ,n,58502466800,44.7094650268555,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -47.3313064575195\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-43.0158767700195,U,s,0,0,n,1539538600,-45.6029663085938,U,b,0,0,n,3079077200,-48.0605049133301\n                                        ,U,b,0,0,n,4618615800,-50.648006439209,U,b,0,0,n,6158154400,-53.4504776000977,U,b\n                                        ,0,0,n,7697693000,-56.3326301574707,U,b,0,0,n,9237231600,-59.084415435791,U,b,0,0\n                                        ,n,10776770200,-61.5016593933105,U,b,0,0,n,12316308800,-63.4038963317871,U,b,0,0,n\n                                        ,13855847400,-64.1003952026367,U,b,0,0,n,15395386000,-63.621452331543,U,b,0,0,n,16934924599\n                                        ,-62.5017356872559,U,b,0,0,n,18474463200,-61.0732574462891,U,b,0,0,n,20014001800,-59.551872253418\n                                        ,U,b,0,0,n,21553540400,-58.070556640625,U,b,0,0,n,23093079000,-56.5911140441895,U\n                                        ,b,0,0,n,24632617600,-55.0813217163086,U,b,0,0,n,26172156200,-53.6943817138672,U,b\n                                        ,0,0,n,27711694800,-52.849666595459,U,b,0,0,n,29251233400,-52.7011375427246,U,b,0\n                                        ,0,n,30790772000,-53.8000259399414,U,b,0,0,n,32330310599,-55.2822875976563,U,b,0,0\n                                        ,n,33869849199,-57.2988662719727,U,b,0,0,n,35409387800,-59.7174911499023,U,b,0,0,n\n                                        ,36948926400,-62.4018516540527,U,b,0,0,n,38488465000,-65.99462890625,U,b,0,0,n,40028003600\n                                        ,-68.4427185058594,U,b,0,0,n,41567542200,-69.6117553710938,U,b,0,0,n,43107080800,-68.3976135253906\n                                        ,U,b,0,0,n,44646619400,-66.1394271850586,U,b,0,0,n,46186158000,-62.2528190612793,U\n                                        ,b,0,0,n,47725696599,-57.9086112976074,U,b,0,0,n,49265235200,-53.8200759887695,U,b\n                                        ,0,0,n,50804773799,-50.375431060791,U,b,0,0,n,52344312400,-46.767578125,U,b,0,0,n\n                                        ,53883850999,-43.7340431213379,U,b,0,0,n,55423389600,-41.9834632873535,U,b,0,0,n,56962928200\n                                        ,-41.5572471618652,U,b,0,0,n,58502466800,-43.0149421691895,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -50.2629508972168\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-54.2321128845215,U,s,0,0,n,1539538600,-51.0129318237305,U,b,0,0,n,3079077200,-47.2773628234863\n                                        ,U,b,0,0,n,4618615800,-44.4629287719727,U,b,0,0,n,6158154400,-41.6325950622559,U,b\n                                        ,0,0,n,7697693000,-38.3350219726563,U,b,0,0,n,9237231600,-34.9066696166992,U,b,0,0\n                                        ,n,10776770200,-30.7234077453613,U,b,0,0,n,12316308800,-25.2174110412598,U,b,0,0,n\n                                        ,13855847400,-18.3443241119385,U,b,0,0,n,15395386000,-10.7217864990234,U,b,0,0,n,16934924599\n                                        ,-3.2672700881958,U,b,0,0,n,18474463200,3.68774342536926,U,b,0,0,n,20014001800,10.3418025970459\n                                        ,U,b,0,0,n,21553540400,16.7105865478516,U,b,0,0,n,23093079000,22.5491790771484,U,b\n                                        ,0,0,n,24632617600,27.0719585418701,U,b,0,0,n,26172156200,30.8997974395752,U,b,0,0\n                                        ,n,27711694800,32.9091148376465,U,b,0,0,n,29251233400,34.8520469665527,U,b,0,0,n,30790772000\n                                        ,34.9141273498535,U,b,0,0,n,32330310599,34.3758888244629,U,b,0,0,n,33869849199,33.4146194458008\n                                        ,U,b,0,0,n,35409387800,31.3182525634766,U,b,0,0,n,36948926400,27.9123840332031,U,b\n                                        ,0,0,n,38488465000,19.4038982391357,U,b,0,0,n,40028003600,7.27591276168823,U,b,0,0\n                                        ,n,41567542200,-7.29632997512817,U,b,0,0,n,43107080800,-19.9258899688721,U,b,0,0,n\n                                        ,44646619400,-30.3807048797607,U,b,0,0,n,46186158000,-37.7786407470703,U,b,0,0,n,47725696599\n                                        ,-42.8919448852539,U,b,0,0,n,49265235200,-46.0507659912109,U,b,0,0,n,50804773799,-48.7455291748047\n                                        ,U,b,0,0,n,52344312400,-50.5439529418945,U,b,0,0,n,53883850999,-52.0665893554688,U\n                                        ,b,0,0,n,55423389600,-53.0927314758301,U,b,0,0,n,56962928200,-53.7251434326172,U,b\n                                        ,0,0,n,58502466800,-54.2313537597656,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.00000011920929\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Forearm\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 13.1421842575073\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 9.03095610738092e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,9.03094473869714e-007,U,s,0,0,n,1539538600,9.03094303339458e-007,U,b,0,0,n,3079077200\n                                        ,9.03093734905269e-007,U,b,0,0,n,4618615800,9.0309367806185e-007,U,b,0,0,n,6158154400\n                                        ,9.03094473869714e-007,U,b,0,0,n,7697693000,9.03095894955186e-007,U,b,0,0,n,9237231600\n                                        ,9.03094530713133e-007,U,b,0,0,n,10776770200,9.0309168854219e-007,U,b,0,0,n,12316308800\n                                        ,9.03091461168515e-007,U,b,0,0,n,13855847400,9.03095269677578e-007,U,b,0,0,n,15395386000\n                                        ,9.0309470124339e-007,U,b,0,0,n,16934924599,9.03096463389375e-007,U,b,0,0,n,18474463200\n                                        ,9.03094303339458e-007,U,b,0,0,n,20014001800,9.03094985460484e-007,U,b,0,0,n,21553540400\n                                        ,9.03096406545956e-007,U,b,0,0,n,23093079000,9.03095326520997e-007,U,b,0,0,n,24632617600\n                                        ,9.03092427506635e-007,U,b,0,0,n,26172156200,9.03093450688175e-007,U,b,0,0,n,27711694800\n                                        ,9.03094360182877e-007,U,b,0,0,n,29251233400,9.03095610738092e-007,U,b,0,0,n,30790772000\n                                        ,9.03094928617065e-007,U,b,0,0,n,32330310599,9.0309418965262e-007,U,b,0,0,n,33869849199\n                                        ,9.03094758086809e-007,U,b,0,0,n,35409387800,9.03094132809201e-007,U,b,0,0,n,36948926400\n                                        ,9.03093621218432e-007,U,b,0,0,n,38488465000,9.03093962278945e-007,U,b,0,0,n,40028003600\n                                        ,9.03094758086809e-007,U,b,0,0,n,41567542200,9.03094303339458e-007,U,b,0,0,n,43107080800\n                                        ,9.03094246496039e-007,U,b,0,0,n,44646619400,9.03094417026296e-007,U,b,0,0,n,46186158000\n                                        ,9.03094530713133e-007,U,b,0,0,n,47725696599,9.03094246496039e-007,U,b,0,0,n,49265235200\n                                        ,9.03093223314499e-007,U,b,0,0,n,50804773799,9.03095497051254e-007,U,b,0,0,n,52344312400\n                                        ,9.03095610738092e-007,U,b,0,0,n,53883850999,9.03094758086809e-007,U,b,0,0,n,55423389600\n                                        ,9.03094019122364e-007,U,b,0,0,n,56962928200,9.03093621218432e-007,U,b,0,0,n,58502466800\n                                        ,9.03094132809201e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.16086266138882e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,3.16086016027839e-006,U,s,0,0,n,1539538600,3.16086334350985e-006,U,b,0,0,n,3079077200\n                                        ,3.16086152452044e-006,U,b,0,0,n,4618615800,3.16086061502574e-006,U,b,0,0,n,6158154400\n                                        ,3.16086152452044e-006,U,b,0,0,n,7697693000,3.16086129714677e-006,U,b,0,0,n,9237231600\n                                        ,3.16086129714677e-006,U,b,0,0,n,10776770200,3.16086084239942e-006,U,b,0,0,n,12316308800\n                                        ,3.16086016027839e-006,U,b,0,0,n,13855847400,3.16086061502574e-006,U,b,0,0,n,15395386000\n                                        ,3.16086084239942e-006,U,b,0,0,n,16934924599,3.16086129714677e-006,U,b,0,0,n,18474463200\n                                        ,3.16086197926779e-006,U,b,0,0,n,20014001800,3.16086311613617e-006,U,b,0,0,n,21553540400\n                                        ,3.16086220664147e-006,U,b,0,0,n,23093079000,3.16086106977309e-006,U,b,0,0,n,24632617600\n                                        ,3.16086311613617e-006,U,b,0,0,n,26172156200,3.16086243401514e-006,U,b,0,0,n,27711694800\n                                        ,3.16086061502574e-006,U,b,0,0,n,29251233400,3.16086334350985e-006,U,b,0,0,n,30790772000\n                                        ,3.16086016027839e-006,U,b,0,0,n,32330310599,3.16086038765206e-006,U,b,0,0,n,33869849199\n                                        ,3.16086425300455e-006,U,b,0,0,n,35409387800,3.16086197926779e-006,U,b,0,0,n,36948926400\n                                        ,3.16086084239942e-006,U,b,0,0,n,38488465000,3.16086152452044e-006,U,b,0,0,n,40028003600\n                                        ,3.16086061502574e-006,U,b,0,0,n,41567542200,3.16086288876249e-006,U,b,0,0,n,43107080800\n                                        ,3.16086129714677e-006,U,b,0,0,n,44646619400,3.16086152452044e-006,U,b,0,0,n,46186158000\n                                        ,3.16086129714677e-006,U,b,0,0,n,47725696599,3.16086152452044e-006,U,b,0,0,n,49265235200\n                                        ,3.16086061502574e-006,U,b,0,0,n,50804773799,3.16086197926779e-006,U,b,0,0,n,52344312400\n                                        ,3.16086266138882e-006,U,b,0,0,n,53883850999,3.16086016027839e-006,U,b,0,0,n,55423389600\n                                        ,3.16086084239942e-006,U,b,0,0,n,56962928200,3.16085993290471e-006,U,b,0,0,n,58502466800\n                                        ,3.16086288876249e-006,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -31.568567276001\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-27.7261695861816,U,s,0,0,n,1539538600,-29.6609439849854,U,b,0,0,n,3079077200,-31.5949764251709\n                                        ,U,b,0,0,n,4618615800,-35.7342720031738,U,b,0,0,n,6158154400,-40.892707824707,U,b\n                                        ,0,0,n,7697693000,-46.4121017456055,U,b,0,0,n,9237231600,-51.6381874084473,U,b,0,0\n                                        ,n,10776770200,-55.9239044189453,U,b,0,0,n,12316308800,-58.2801818847656,U,b,0,0,n\n                                        ,13855847400,-57.1786880493164,U,b,0,0,n,15395386000,-53.5339889526367,U,b,0,0,n,16934924599\n                                        ,-48.9106674194336,U,b,0,0,n,18474463200,-44.8686256408691,U,b,0,0,n,20014001800,-41.754581451416\n                                        ,U,b,0,0,n,21553540400,-40.5539512634277,U,b,0,0,n,23093079000,-39.6324348449707,U\n                                        ,b,0,0,n,24632617600,-39.1769638061523,U,b,0,0,n,26172156200,-38.9859313964844,U,b\n                                        ,0,0,n,27711694800,-38.7443199157715,U,b,0,0,n,29251233400,-38.4244194030762,U,b,0\n                                        ,0,n,30790772000,-37.52294921875,U,b,0,0,n,32330310599,-36.308967590332,U,b,0,0,n\n                                        ,33869849199,-35.0522346496582,U,b,0,0,n,35409387800,-34.0215034484863,U,b,0,0,n,36948926400\n                                        ,-33.4848518371582,U,b,0,0,n,38488465000,-34.0698165893555,U,b,0,0,n,40028003600,-35.2642517089844\n                                        ,U,b,0,0,n,41567542200,-35.4080848693848,U,b,0,0,n,43107080800,-36.1590576171875,U\n                                        ,b,0,0,n,44646619400,-35.7662811279297,U,b,0,0,n,46186158000,-35.5249710083008,U,b\n                                        ,0,0,n,47725696599,-35.0557327270508,U,b,0,0,n,49265235200,-33.7227058410645,U,b,0\n                                        ,0,n,50804773799,-32.1659545898438,U,b,0,0,n,52344312400,-31.4579391479492,U,b,0,0\n                                        ,n,53883850999,-30.8312454223633,U,b,0,0,n,55423389600,-29.9926071166992,U,b,0,0,n\n                                        ,56962928200,-29.0235500335693,U,b,0,0,n,58502466800,-27.7261695861816,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -28.5609245300293\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-24.6704254150391,U,s,0,0,n,1539538600,-25.5822467803955,U,b,0,0,n,3079077200,-26.4931449890137\n                                        ,U,b,0,0,n,4618615800,-26.9835796356201,U,b,0,0,n,6158154400,-27.3237171173096,U,b\n                                        ,0,0,n,7697693000,-27.5145320892334,U,b,0,0,n,9237231600,-27.5624809265137,U,b,0,0\n                                        ,n,10776770200,-27.4805736541748,U,b,0,0,n,12316308800,-27.0183219909668,U,b,0,0,n\n                                        ,13855847400,-26.1534118652344,U,b,0,0,n,15395386000,-24.9254951477051,U,b,0,0,n,16934924599\n                                        ,-23.6142330169678,U,b,0,0,n,18474463200,-22.4983978271484,U,b,0,0,n,20014001800,-21.7781925201416\n                                        ,U,b,0,0,n,21553540400,-21.6476192474365,U,b,0,0,n,23093079000,-21.4602146148682,U\n                                        ,b,0,0,n,24632617600,-21.2377166748047,U,b,0,0,n,26172156200,-20.916618347168,U,b\n                                        ,0,0,n,27711694800,-20.1269855499268,U,b,0,0,n,29251233400,-18.7667579650879,U,b,0\n                                        ,0,n,30790772000,-17.314847946167,U,b,0,0,n,32330310599,-15.7393226623535,U,b,0,0\n                                        ,n,33869849199,-14.2488050460815,U,b,0,0,n,35409387800,-13.052116394043,U,b,0,0,n\n                                        ,36948926400,-12.3581953048706,U,b,0,0,n,38488465000,-12.8951530456543,U,b,0,0,n,40028003600\n                                        ,-14.3822441101074,U,b,0,0,n,41567542200,-16.146312713623,U,b,0,0,n,43107080800,-19.2456340789795\n                                        ,U,b,0,0,n,44646619400,-21.8024406433105,U,b,0,0,n,46186158000,-24.5287075042725,U\n                                        ,b,0,0,n,47725696599,-26.7379531860352,U,b,0,0,n,49265235200,-28.2615509033203,U,b\n                                        ,0,0,n,50804773799,-28.4822025299072,U,b,0,0,n,52344312400,-28.5755023956299,U,b,0\n                                        ,0,n,53883850999,-28.2299671173096,U,b,0,0,n,55423389600,-27.2983951568604,U,b,0,0\n                                        ,n,56962928200,-26.1843681335449,U,b,0,0,n,58502466800,-24.6704254150391,U,s,0,0,n\n                                        \n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -47.7509155273438\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-49.6838607788086,U,s,0,0,n,1539538600,-50.6199417114258,U,b,0,0,n,3079077200,-51.557861328125\n                                        ,U,b,0,0,n,4618615800,-49.7577285766602,U,b,0,0,n,6158154400,-46.8222465515137,U,b\n                                        ,0,0,n,7697693000,-43.2557334899902,U,b,0,0,n,9237231600,-39.5619697570801,U,b,0,0\n                                        ,n,10776770200,-36.2417984008789,U,b,0,0,n,12316308800,-33.3665580749512,U,b,0,0,n\n                                        ,13855847400,-31.9531345367432,U,b,0,0,n,15395386000,-31.4414196014404,U,b,0,0,n,16934924599\n                                        ,-31.4410591125488,U,b,0,0,n,18474463200,-31.5651226043701,U,b,0,0,n,20014001800,-32.1318359375\n                                        ,U,b,0,0,n,21553540400,-32.7886123657227,U,b,0,0,n,23093079000,-33.3577423095703,U\n                                        ,b,0,0,n,24632617600,-33.5156517028809,U,b,0,0,n,26172156200,-33.3990211486816,U,b\n                                        ,0,0,n,27711694800,-32.8718185424805,U,b,0,0,n,29251233400,-31.8555145263672,U,b,0\n                                        ,0,n,30790772000,-30.9343128204346,U,b,0,0,n,32330310599,-30.0077571868896,U,b,0,0\n                                        ,n,33869849199,-29.1602630615234,U,b,0,0,n,35409387800,-28.4759864807129,U,b,0,0,n\n                                        ,36948926400,-28.0388641357422,U,b,0,0,n,38488465000,-28.2292537689209,U,b,0,0,n,40028003600\n                                        ,-29.1356811523438,U,b,0,0,n,41567542200,-30.9728355407715,U,b,0,0,n,43107080800,-33.586296081543\n                                        ,U,b,0,0,n,44646619400,-36.4988479614258,U,b,0,0,n,46186158000,-39.3635520935059,U\n                                        ,b,0,0,n,47725696599,-41.9775428771973,U,b,0,0,n,49265235200,-44.7888259887695,U,b\n                                        ,0,0,n,50804773799,-46.8367042541504,U,b,0,0,n,52344312400,-47.9202156066895,U,b,0\n                                        ,0,n,53883850999,-48.5339088439941,U,b,0,0,n,55423389600,-48.9236145019531,U,b,0,0\n                                        ,n,56962928200,-49.3116493225098,U,b,0,0,n,58502466800,-49.6838607788086,U,s,0,0,n\n                                        \n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.99999988079071\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Hand\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 10.8255529403687\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 4.45484261035745e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,4.45505378365851e-007,U,s,0,0,n,1539538600,4.45480878852322e-007,U,b,0,0,n,3079077200\n                                        ,4.45492645440027e-007,U,b,0,0,n,4618615800,4.45506771029613e-007,U,b,0,0,n,6158154400\n                                        ,4.45494777068234e-007,U,b,0,0,n,7697693000,4.4548150412993e-007,U,b,0,0,n,9237231600\n                                        ,4.45501626700207e-007,U,b,0,0,n,10776770200,4.4552140820997e-007,U,b,0,0,n,12316308800\n                                        ,4.45524932501939e-007,U,b,0,0,n,13855847400,4.45494350742592e-007,U,b,0,0,n,15395386000\n                                        ,4.45504554136278e-007,U,b,0,0,n,16934924599,4.4548897903951e-007,U,b,0,0,n,18474463200\n                                        ,4.45495658141226e-007,U,b,0,0,n,20014001800,4.45494606537977e-007,U,b,0,0,n,21553540400\n                                        ,4.45495714984645e-007,U,b,0,0,n,23093079000,4.4549796029969e-007,U,b,0,0,n,24632617600\n                                        ,4.45481362021383e-007,U,b,0,0,n,26172156200,4.45497818191143e-007,U,b,0,0,n,27711694800\n                                        ,4.45486790567884e-007,U,b,0,0,n,29251233400,4.45498272938494e-007,U,b,0,0,n,30790772000\n                                        ,4.45500859314052e-007,U,b,0,0,n,32330310599,4.45495089707038e-007,U,b,0,0,n,33869849199\n                                        ,4.45491792788744e-007,U,b,0,0,n,35409387800,4.45492418066351e-007,U,b,0,0,n,36948926400\n                                        ,4.45490741185495e-007,U,b,0,0,n,38488465000,4.45487671640876e-007,U,b,0,0,n,40028003600\n                                        ,4.45500489831829e-007,U,b,0,0,n,41567542200,4.4549099698088e-007,U,b,0,0,n,43107080800\n                                        ,4.45490030642759e-007,U,b,0,0,n,44646619400,4.45496056045158e-007,U,b,0,0,n,46186158000\n                                        ,4.45506486812519e-007,U,b,0,0,n,47725696599,4.45496084466868e-007,U,b,0,0,n,49265235200\n                                        ,4.45508533175598e-007,U,b,0,0,n,50804773799,4.45484431566001e-007,U,b,0,0,n,52344312400\n                                        ,4.45484232614035e-007,U,b,0,0,n,53883850999,4.45510607960387e-007,U,b,0,0,n,55423389600\n                                        ,4.45500546675248e-007,U,b,0,0,n,56962928200,4.45514729108254e-007,U,b,0,0,n,58502466800\n                                        ,4.45485284217284e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -7.54761458665598e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-7.54803863856068e-007,U,s,0,0,n,1539538600,-7.54753614273795e-007,U,b,0,0,n,3079077200\n                                        ,-7.54783684442373e-007,U,b,0,0,n,4618615800,-7.54806421809917e-007,U,b,0,0,n,6158154400\n                                        ,-7.54783513912116e-007,U,b,0,0,n,7697693000,-7.54766801946971e-007,U,b,0,0,n,9237231600\n                                        ,-7.54789937218447e-007,U,b,0,0,n,10776770200,-7.54816198877961e-007,U,b,0,0,n,12316308800\n                                        ,-7.54819893700187e-007,U,b,0,0,n,13855847400,-7.54783172851603e-007,U,b,0,0,n,15395386000\n                                        ,-7.54783457068697e-007,U,b,0,0,n,16934924599,-7.54763050281326e-007,U,b,0,0,n,18474463200\n                                        ,-7.54781865452969e-007,U,b,0,0,n,20014001800,-7.54774191591423e-007,U,b,0,0,n,21553540400\n                                        ,-7.54764414523379e-007,U,b,0,0,n,23093079000,-7.54779023282026e-007,U,b,0,0,n,24632617600\n                                        ,-7.54793973101187e-007,U,b,0,0,n,26172156200,-7.54769530431076e-007,U,b,0,0,n,27711694800\n                                        ,-7.54784082346305e-007,U,b,0,0,n,29251233400,-7.54762993437907e-007,U,b,0,0,n,30790772000\n                                        ,-7.54784366563399e-007,U,b,0,0,n,32330310599,-7.54791642521013e-007,U,b,0,0,n,33869849199\n                                        ,-7.54766460886458e-007,U,b,0,0,n,35409387800,-7.54781979139807e-007,U,b,0,0,n,36948926400\n                                        ,-7.54798008983926e-007,U,b,0,0,n,38488465000,-7.54784423406818e-007,U,b,0,0,n,40028003600\n                                        ,-7.54786924517248e-007,U,b,0,0,n,41567542200,-7.54774703182193e-007,U,b,0,0,n,43107080800\n                                        ,-7.54783457068697e-007,U,b,0,0,n,44646619400,-7.54787436108018e-007,U,b,0,0,n,46186158000\n                                        ,-7.54795678403752e-007,U,b,0,0,n,47725696599,-7.547882887593e-007,U,b,0,0,n,49265235200\n                                        ,-7.54803807012649e-007,U,b,0,0,n,50804773799,-7.54765324018081e-007,U,b,0,0,n,52344312400\n                                        ,-7.54760719701153e-007,U,b,0,0,n,53883850999,-7.54806933400687e-007,U,b,0,0,n,55423389600\n                                        ,-7.54790960399987e-007,U,b,0,0,n,56962928200,-7.5481824524104e-007,U,b,0,0,n,58502466800\n                                        ,-7.54764414523379e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 71.1884765625\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,70.2174301147461,U,s,6.69688367843628,0,n,28866348750,74.4029769897461,U,s,0,-6.69688367843628\n                                        ,n,57732697500,70.2174301147461,U,s,-6.69688367843628,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 10.1721467971802\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,13.6377296447754,U,s,-5.11763715744019,0,n,28866348750,-15.4095659255981,U,s,0,5.55830955505371\n                                        ,n,57732697500,13.6377296447754,U,s,1.81601226329803,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -14.7731218338013\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 0,-17.1805534362793,U,s,1.74017906188965,0,n,28866348750,4.56886625289917,U,s,0,-1.81865096092224\n                                        ,n,57732697500,-17.1805534362793,U,s,0.652443706989288,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Thumb1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.62510800361633\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.626631021499634\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.67876040935516\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -129.154998779297\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-128.393569946289,U,s,-5.62631416320801,0,n,28866348750,-131.675582885742\n                                        ,U,s,0,5.2512264251709,n,57732697500,-128.393569946289,U,s,5.2512264251709,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -42.0322799682617\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-47.8535804748535,U,s,43.014533996582,0,n,28866348750,-22.7617683410645\n                                        ,U,s,0,-40.146900177002,n,57732697500,-47.8535804748535,U,s,-40.146900177002,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 34.3628196716309\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,34.2815361022949,U,s,0,0,n,28866348750,35.0631332397461,U,s,0,0,n,57732697500\n                                        ,34.2815361022949,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.999999940395355\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Thumb2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.14043200016022\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.38291397888679e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-1.38295240503794e-006,U,s,0,0,a,0.989898998959688,0.329832986317342,1539538600\n                                        ,-1.38291181883687e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,-1.38293626150698e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,4618615800,-1.38295297347213e-006,U\n                                        ,s,0,0,a,0.329832986317342,0.989898998959688,6158154400,-1.38293694362801e-006,U,s\n                                        ,0,0,a,0.989898998959688,0.989898998959688,7697693000,-1.38291193252371e-006,U,s,0\n                                        ,0,a,0.989898998959688,0.329832986317342,9237231600,-1.3829402405463e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.989898998959688,10776770200,-1.38297832563694e-006,U,s,0,0\n                                        ,a,0.989898998959688,0.329832986317342,12316308800,-1.38298469209985e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,13855847400,-1.38293171403348e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,15395386000,-1.38295069973537e-006,U,s,0,0\n                                        ,a,0.32943294630968,0.32943294630968,16927226907,-1.38291579787619e-006,U,s,0,0,a\n                                        ,0.33033303632692,0.989999008961604,18474463200,-1.38293444251758e-006,U,s,0,0,a,0.989898998959688\n                                        ,0.329832986317342,20014001800,-1.38292796236783e-006,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,21553540400,-1.38292227802594e-006,U,s,0,0,a,0.329832986317342\n                                        ,0.989898998959688,23093079000,-1.3829333056492e-006,U,s,0,0,a,0.989898998959688,0.989898998959688\n                                        ,24632617600,-1.38293285090185e-006,U,s,0,0,a,0.989898998959688,0.989898998959688\n                                        ,26172156200,-1.38292602969159e-006,U,s,0,0,a,0.989898998959688,0.329832986317342\n                                        ,27711694800,-1.38293194140715e-006,U,s,0,0,a,0.329832986317342,0.989898998959688\n                                        ,29251233400,-1.38292261908646e-006,U,s,0,0,a,0.989898998959688,0.329832986317342\n                                        ,30790772000,-1.38293898999109e-006,U,s,0,0,a,0.329832986317342,0.989898998959688\n                                        ,32330310599,-1.38294194584887e-006,U,s,0,0,a,0.988698878936702,0.988698878936702\n                                        ,33862151507,-1.38292148221808e-006,U,s,0,0,a,0.989999008961604,0.33033303632692,35409387800\n                                        ,-1.38293353302288e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,36948926400\n                                        ,-1.38294376483827e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,38488465000\n                                        ,-1.38293160034664e-006,U,s,0,0,a,0.329832986317342,0.989898998959688,40028003600\n                                        ,-1.38294240059622e-006,U,s,0,0,a,0.989898998959688,0.989898998959688,41567542200\n                                        ,-1.38292568863108e-006,U,s,0,0,a,0.989898998959688,0.989898998959688,43107080800\n                                        ,-1.38293376039655e-006,U,s,0,0,a,0.989898998959688,0.329832986317342,44646619400\n                                        ,-1.38293557938596e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,46186158000\n                                        ,-1.382945356454e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,47725696599,-1.3829402405463e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,49265235200,-1.38295342821948e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,50804773799,-1.38292000428919e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,52344312400,-1.38291284201841e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.989898998959688,53883850999,-1.38295456508786e-006\n                                        ,U,s,0,0,a,0.989898998959688,0.989898998959688,55423389600,-1.38294035423314e-006\n                                        ,U,s,0,0,a,0.989898998959688,0.329832986317342,56962928200,-1.38296331897436e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,58502466800,-1.38291920848133e-006\n                                        ,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 7.55724443024519e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,7.55730525270337e-007,U,s,0,0,n,1539538600,7.55724158807425e-007,U,b,0,0,n,3079077200\n                                        ,7.55726432544179e-007,U,b,0,0,n,4618615800,7.55730070522986e-007,U,b,0,0,n,6158154400\n                                        ,7.55727796786232e-007,U,b,0,0,n,7697693000,7.55721202949644e-007,U,b,0,0,n,9237231600\n                                        ,7.55728706280934e-007,U,b,0,0,n,10776770200,7.55741666580434e-007,U,b,0,0,n,12316308800\n                                        ,7.55744167690864e-007,U,b,0,0,n,13855847400,7.55725750423153e-007,U,b,0,0,n,15395386000\n                                        ,7.55739165470004e-007,U,b,0,0,n,16934924599,7.55725523049477e-007,U,b,0,0,n,18474463200\n                                        ,7.55726432544179e-007,U,b,0,0,n,20014001800,7.55728024159907e-007,U,b,0,0,n,21553540400\n                                        ,7.55730297896662e-007,U,b,0,0,n,23093079000,7.5572938840196e-007,U,b,0,0,n,24632617600\n                                        ,7.55718019718188e-007,U,b,0,0,n,26172156200,7.55729843149311e-007,U,b,0,0,n,27711694800\n                                        ,7.55728478907258e-007,U,b,0,0,n,29251233400,7.5572938840196e-007,U,b,0,0,n,30790772000\n                                        ,7.55735527491197e-007,U,b,0,0,n,32330310599,7.55729843149311e-007,U,b,0,0,n,33869849199\n                                        ,7.55716882849811e-007,U,b,0,0,n,35409387800,7.55725295675802e-007,U,b,0,0,n,36948926400\n                                        ,7.55721657696995e-007,U,b,0,0,n,38488465000,7.5572938840196e-007,U,b,0,0,n,40028003600\n                                        ,7.55734617996495e-007,U,b,0,0,n,41567542200,7.55724840928451e-007,U,b,0,0,n,43107080800\n                                        ,7.55726659917855e-007,U,b,0,0,n,44646619400,7.55729161028285e-007,U,b,0,0,n,46186158000\n                                        ,7.55729843149311e-007,U,b,0,0,n,47725696599,7.5572938840196e-007,U,b,0,0,n,49265235200\n                                        ,7.55731434765039e-007,U,b,0,0,n,50804773799,7.55724613554776e-007,U,b,0,0,n,52344312400\n                                        ,7.557243861811e-007,U,b,0,0,n,53883850999,7.55731434765039e-007,U,b,0,0,n,55423389600\n                                        ,7.55728478907258e-007,U,b,0,0,n,56962928200,7.55733253754443e-007,U,b,0,0,n,58502466800\n                                        ,7.55725068302127e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 2.74146850642865e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,2.74146850642865e-006,U,s,0,0,n,28866348750,2.74146850642865e-006,U,s,0\n                                        ,0,n,57732697500,2.74146850642865e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.38374729835778e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-3.38374729835778e-006,U,s,0,0,n,28866348750,-3.38374729835778e-006,U,s\n                                        ,0,0,n,57732697500,-3.38374729835778e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 32.0624504089355\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,32.0624504089355,U,s,0,0,n,28866348750,32.0624504089355,U,s,0,0,n,57732697500\n                                        ,32.0624504089355,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Thumb3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.38246870040894\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 3.77754112435014e-008\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,3.76322191186773e-008,U,s,0,0,a,0.989898998959688,0.329832986317342,1539538600,3.77719686639466e-008\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,3.76808770852222e-008,U\n                                        ,s,0,0,a,0.329832986317342,0.989898998959688,4618615800,3.76404045709933e-008,U,s\n                                        ,0,0,a,0.989898998959688,0.329832986317342,6158154400,3.76873003915534e-008,U,s,0\n                                        ,0,a,0.329832986317342,0.329832986317342,7697693000,3.77729350020672e-008,U,s,0,0\n                                        ,a,0.329832986317342,0.989898998959688,9237231600,3.76847708594141e-008,U,s,0,0,a\n                                        ,0.989898998959688,0.329832986317342,10776770200,3.75169122435182e-008,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,12316308800,3.74917590306723e-008,U,s,0,0,a,0.329832986317342,0.989898998959688\n                                        ,13855847400,3.77125957129465e-008,U,s,0,0,a,0.989898998959688,0.329832986317342,15395386000\n                                        ,3.76077764485672e-008,U,s,0,0,a,0.32943294630968,0.32943294630968,16927226907,3.77704338916374e-008\n                                        ,U,s,0,0,a,0.33033303632692,0.33033303632692,18474463200,3.76979301108804e-008,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,20014001800,3.77237370230432e-008,U,s,0\n                                        ,0,a,0.329832986317342,0.329832986317342,21553540400,3.77505671167455e-008,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,23093079000,3.76988396055822e-008,U,s,0,0,a\n                                        ,0.329832986317342,0.329832986317342,24632617600,3.76899436105305e-008,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,26172156200,3.77384026251093e-008,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,27711694800,3.76901709842059e-008,U,s,0,0,a,0.329832986317342,0.329832986317342,29251233400\n                                        ,3.77612821012008e-008,U,s,0,0,a,0.329832986317342,0.329832986317342,30790772000,3.76607545149454e-008\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,32330310599,3.7644809935955e-008,U\n                                        ,s,0,0,a,0.32943294630968,0.32943294630968,33862151507,3.77930291506345e-008,U,s,0\n                                        ,0,a,0.33033303632692,0.33033303632692,35409387800,3.77034439225099e-008,U,s,0,0,a\n                                        ,0.329832986317342,0.989898998959688,36948926400,3.76604702978511e-008,U,s,0,0,a,0.989898998959688\n                                        ,0.989898998959688,38488465000,3.76914215394208e-008,U,s,0,0,a,0.989898998959688,0.989898998959688\n                                        ,40028003600,3.76581397176778e-008,U,s,0,0,a,0.989898998959688,0.989898998959688,41567542200\n                                        ,3.77330025003175e-008,U,s,0,0,a,0.989898998959688,0.329832986317342,43107080800,3.76886646336061e-008\n                                        ,U,s,0,0,a,0.329832986317342,0.989898998959688,44646619400,3.76871867047157e-008,U\n                                        ,s,0,0,a,0.989898998959688,0.989898998959688,46186158000,3.76680588942691e-008,U,s\n                                        ,0,0,a,0.989898998959688,0.989898998959688,47725696599,3.7665415675292e-008,U,s,0\n                                        ,0,a,0.989898998959688,0.989898998959688,49265235200,3.76342939034657e-008,U,s,0,0\n                                        ,a,0.989898998959688,0.989898998959688,50804773799,3.77455933175952e-008,U,s,0,0,a\n                                        ,0.989898998959688,0.989898998959688,52344312400,3.77763456071989e-008,U,s,0,0,a,0.989898998959688\n                                        ,0.989898998959688,53883850999,3.76364823750919e-008,U,s,0,0,a,0.989898998959688,0.989898998959688\n                                        ,55423389600,3.76837476778746e-008,U,s,0,0,a,0.989898998959688,0.989898998959688,56962928200\n                                        ,3.75963793430856e-008,U,s,0,0,a,0.989898998959688,0.989898998959688,58502466800,3.77501123693946e-008\n                                        ,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -3.12997121909575e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-3.12995462081744e-006,U,s,0,0,n,1539538600,-3.12996940010635e-006,U,b,0,0,n,3079077200\n                                        ,-3.12997303808515e-006,U,b,0,0,n,4618615800,-3.12995643980685e-006,U,b,0,0,n,6158154400\n                                        ,-3.12996394313814e-006,U,b,0,0,n,7697693000,-3.12998872686876e-006,U,b,0,0,n,9237231600\n                                        ,-3.12995712192787e-006,U,b,0,0,n,10776770200,-3.12989959638799e-006,U,b,0,0,n,12316308800\n                                        ,-3.12988913719892e-006,U,b,0,0,n,13855847400,-3.12997303808515e-006,U,b,0,0,n,15395386000\n                                        ,-3.12991028295073e-006,U,b,0,0,n,16934924599,-3.12996667162224e-006,U,b,0,0,n,18474463200\n                                        ,-3.12996667162224e-006,U,b,0,0,n,20014001800,-3.12994006890222e-006,U,b,0,0,n,21553540400\n                                        ,-3.12992960971314e-006,U,b,0,0,n,23093079000,-3.12995121021231e-006,U,b,0,0,n,24632617600\n                                        ,-3.13002465190948e-006,U,b,0,0,n,26172156200,-3.12993688567076e-006,U,b,0,0,n,27711694800\n                                        ,-3.12996917273267e-006,U,b,0,0,n,29251233400,-3.12992597173434e-006,U,b,0,0,n,30790772000\n                                        ,-3.12993211082357e-006,U,b,0,0,n,32330310599,-3.12996485263284e-006,U,b,0,0,n,33869849199\n                                        ,-3.12997326545883e-006,U,b,0,0,n,35409387800,-3.12996644424857e-006,U,b,0,0,n,36948926400\n                                        ,-3.1299957754527e-006,U,b,0,0,n,38488465000,-3.12996780849062e-006,U,b,0,0,n,40028003600\n                                        ,-3.12993620354973e-006,U,b,0,0,n,41567542200,-3.12996940010635e-006,U,b,0,0,n,43107080800\n                                        ,-3.12997099172208e-006,U,b,0,0,n,44646619400,-3.12996030515933e-006,U,b,0,0,n,46186158000\n                                        ,-3.12995121021231e-006,U,b,0,0,n,47725696599,-3.12995575768582e-006,U,b,0,0,n,49265235200\n                                        ,-3.12994984597026e-006,U,b,0,0,n,50804773799,-3.12997394757986e-006,U,b,0,0,n,52344312400\n                                        ,-3.1299707643484e-006,U,b,0,0,n,53883850999,-3.12994734485983e-006,U,b,0,0,n,55423389600\n                                        ,-3.12995848616993e-006,U,b,0,0,n,56962928200,-3.12994507112307e-006,U,b,0,0,n,58502466800\n                                        ,-3.12997190121678e-006,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -7.38412791179144e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-7.46143268770538e-006,U,s,0,0,n,28866348750,-6.7181163103669e-006,U,s\n                                        ,0,0,n,57732697500,-7.46143268770538e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 2.46886565946625e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,2.29402030527126e-006,U,s,0,0,n,28866348750,3.97522580897203e-006,U,s,0\n                                        ,0,n,57732697500,2.29402030527126e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 2.01478266716003\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-1.12266278266907,U,s,23.1830959320068,0,n,28866348750,12.4008083343506\n                                        ,U,s,0,-21.6375541687012,n,57732697500,-1.12266278266907,U,s,-21.6375541687012,0,n\n                                        \n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Index1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.34874391555786\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.0162522289901972\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.56133341789246\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -11.8456792831421\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-11.7885713577271,U,s,0,0,n,28866348750,-12.3376865386963,U,s,0,0,n,57732697500\n                                        ,-11.7885713577271,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -2.26736164093018\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-3.69511246681213,U,s,10.5498819351196,0,n,28866348750,2.45898532867432\n                                        ,U,s,0,-9.84655666351318,n,57732697500,-3.69511246681213,U,s,-9.84655666351318,0,n\n                                        \n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.35604390501976\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-4.27189636230469,U,s,34.196605682373,0,n,28866348750,15.6761236190796\n                                        ,U,s,0,-31.9168300628662,n,57732697500,-4.27189636230469,U,s,-31.9168300628662,0,n\n                                        \n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Index2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.47369468212128\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.31795149577374e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-3.31797764374642e-006,U,s,0,0,n,1539538600,-3.31794581143186e-006,U,b,0,0,n,3079077200\n                                        ,-3.31796331920486e-006,U,b,0,0,n,4618615800,-3.31798537445138e-006,U,b,0,0,n,6158154400\n                                        ,-3.31796832142572e-006,U,b,0,0,n,7697693000,-3.31795786223665e-006,U,b,0,0,n,9237231600\n                                        ,-3.31796582031529e-006,U,b,0,0,n,10776770200,-3.31798446495668e-006,U,b,0,0,n,12316308800\n                                        ,-3.31798082697787e-006,U,b,0,0,n,13855847400,-3.31796627506264e-006,U,b,0,0,n,15395386000\n                                        ,-3.31796877617307e-006,U,b,0,0,n,16934924599,-3.31795286001579e-006,U,b,0,0,n,18474463200\n                                        ,-3.31796627506264e-006,U,b,0,0,n,20014001800,-3.31796036334708e-006,U,b,0,0,n,21553540400\n                                        ,-3.31795081365271e-006,U,b,0,0,n,23093079000,-3.31796309183119e-006,U,b,0,0,n,24632617600\n                                        ,-3.31798560182506e-006,U,b,0,0,n,26172156200,-3.31795263264212e-006,U,b,0,0,n,27711694800\n                                        ,-3.31797605213069e-006,U,b,0,0,n,29251233400,-3.31794740304758e-006,U,b,0,0,n,30790772000\n                                        ,-3.31796877617307e-006,U,b,0,0,n,32330310599,-3.31797923536215e-006,U,b,0,0,n,33869849199\n                                        ,-3.31794944941066e-006,U,b,0,0,n,35409387800,-3.31796832142572e-006,U,b,0,0,n,36948926400\n                                        ,-3.31798378283565e-006,U,b,0,0,n,38488465000,-3.31797400576761e-006,U,b,0,0,n,40028003600\n                                        ,-3.31796991304145e-006,U,b,0,0,n,41567542200,-3.31796036334708e-006,U,b,0,0,n,43107080800\n                                        ,-3.31797264152556e-006,U,b,0,0,n,44646619400,-3.31797309627291e-006,U,b,0,0,n,46186158000\n                                        ,-3.3179712772835e-006,U,b,0,0,n,47725696599,-3.31796877617307e-006,U,b,0,0,n,49265235200\n                                        ,-3.31798082697787e-006,U,b,0,0,n,50804773799,-3.31795445163152e-006,U,b,0,0,n,52344312400\n                                        ,-3.31795104102639e-006,U,b,0,0,n,53883850999,-3.31798219121993e-006,U,b,0,0,n,55423389600\n                                        ,-3.31797218677821e-006,U,b,0,0,n,56962928200,-3.31798923980386e-006,U,b,0,0,n,58502466800\n                                        ,-3.31795627062093e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.01659298429513e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,3.01628602983328e-007,U,s,0,0,n,1539538600,3.01669331292942e-007,U,b,0,0,n,3079077200\n                                        ,3.01649805578563e-007,U,b,0,0,n,4618615800,3.01622179676997e-007,U,b,0,0,n,6158154400\n                                        ,3.01645826539243e-007,U,b,0,0,n,7697693000,3.01660492141309e-007,U,b,0,0,n,9237231600\n                                        ,3.016315304194e-007,U,b,0,0,n,10776770200,3.01623686027597e-007,U,b,0,0,n,12316308800\n                                        ,3.01620872278363e-007,U,b,0,0,n,13855847400,3.01640199040776e-007,U,b,0,0,n,15395386000\n                                        ,3.01651311929163e-007,U,b,0,0,n,16934924599,3.01649407674631e-007,U,b,0,0,n,18474463200\n                                        ,3.01641904343342e-007,U,b,0,0,n,20014001800,3.01647560263518e-007,U,b,0,0,n,21553540400\n                                        ,3.01648015010869e-007,U,b,0,0,n,23093079000,3.01643694911036e-007,U,b,0,0,n,24632617600\n                                        ,3.01651169820616e-007,U,b,0,0,n,26172156200,3.01642728572915e-007,U,b,0,0,n,27711694800\n                                        ,3.01659497381479e-007,U,b,0,0,n,29251233400,3.01642273825564e-007,U,b,0,0,n,30790772000\n                                        ,3.01646281286594e-007,U,b,0,0,n,32330310599,3.01648896083861e-007,U,b,0,0,n,33869849199\n                                        ,3.01636134736327e-007,U,b,0,0,n,35409387800,3.01647503420099e-007,U,b,0,0,n,36948926400\n                                        ,3.01643439115651e-007,U,b,0,0,n,38488465000,3.01656626788827e-007,U,b,0,0,n,40028003600\n                                        ,3.01643211741975e-007,U,b,0,0,n,41567542200,3.01647617106937e-007,U,b,0,0,n,43107080800\n                                        ,3.01652619327797e-007,U,b,0,0,n,44646619400,3.01642955946591e-007,U,b,0,0,n,46186158000\n                                        ,3.01625107113068e-007,U,b,0,0,n,47725696599,3.01644206501805e-007,U,b,0,0,n,49265235200\n                                        ,3.01624282883495e-007,U,b,0,0,n,50804773799,3.01660151080796e-007,U,b,0,0,n,52344312400\n                                        ,3.01659156320966e-007,U,b,0,0,n,53883850999,3.01618115372548e-007,U,b,0,0,n,55423389600\n                                        ,3.01633804156154e-007,U,b,0,0,n,56962928200,3.01613965802972e-007,U,b,0,0,n,58502466800\n                                        ,3.01659326851222e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 3.5970981571154e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,3.5970981571154e-006,U,s,0,0,n,28866348750,3.5970981571154e-006,U,s,0,0\n                                        ,n,57732697500,3.5970981571154e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 2.03909712581662e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,2.03909712581662e-006,U,s,0,0,n,28866348750,2.03909712581662e-006,U,s,0\n                                        ,0,n,57732697500,2.03909712581662e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 18.2982807159424\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,18.2982807159424,U,s,0,0,n,28866348750,18.2982807159424,U,s,0,0,n,57732697500\n                                        ,18.2982807159424,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Index3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.0628467798233\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -7.71003385580116e-008\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-7.71386226006143e-008,U,s,0,0,n,1539538600,-7.70982637732232e-008,U,b,0,0,n,3079077200\n                                        ,-7.71246106978651e-008,U,b,0,0,n,4618615800,-7.71447048464324e-008,U,b,0,0,n,6158154400\n                                        ,-7.71294992318872e-008,U,b,0,0,n,7697693000,-7.71144357258891e-008,U,b,0,0,n,9237231600\n                                        ,-7.71126451581949e-008,U,b,0,0,n,10776770200,-7.71653390074789e-008,U,b,0,0,n,12316308800\n                                        ,-7.71609336425172e-008,U,b,0,0,n,13855847400,-7.71170221014472e-008,U,b,0,0,n,15395386000\n                                        ,-7.71531176724238e-008,U,b,0,0,n,16934924599,-7.70924941662088e-008,U,b,0,0,n,18474463200\n                                        ,-7.7120574815126e-008,U,b,0,0,n,20014001800,-7.71129862187081e-008,U,b,0,0,n,21553540400\n                                        ,-7.70926931181748e-008,U,b,0,0,n,23093079000,-7.7117732644183e-008,U,b,0,0,n,24632617600\n                                        ,-7.71619284023473e-008,U,b,0,0,n,26172156200,-7.70921531056956e-008,U,b,0,0,n,27711694800\n                                        ,-7.71545956013142e-008,U,b,0,0,n,29251233400,-7.70800738791877e-008,U,b,0,0,n,30790772000\n                                        ,-7.71372867802711e-008,U,b,0,0,n,32330310599,-7.71590862314042e-008,U,b,0,0,n,33869849199\n                                        ,-7.70688473039627e-008,U,b,0,0,n,35409387800,-7.71287318457325e-008,U,b,0,0,n,36948926400\n                                        ,-7.7157551459095e-008,U,b,0,0,n,38488465000,-7.71487975725904e-008,U,b,0,0,n,40028003600\n                                        ,-7.71357804296713e-008,U,b,0,0,n,41567542200,-7.71094619267387e-008,U,b,0,0,n,43107080800\n                                        ,-7.71431132307043e-008,U,b,0,0,n,44646619400,-7.71366046592448e-008,U,b,0,0,n,46186158000\n                                        ,-7.71198926940997e-008,U,b,0,0,n,47725696599,-7.71329098370188e-008,U,b,0,0,n,49265235200\n                                        ,-7.71404984334367e-008,U,b,0,0,n,50804773799,-7.71092345530633e-008,U,b,0,0,n,52344312400\n                                        ,-7.70986900988646e-008,U,b,0,0,n,53883850999,-7.71377699493314e-008,U,b,0,0,n,55423389600\n                                        ,-7.71271402300044e-008,U,b,0,0,n,56962928200,-7.71527766119107e-008,U,b,0,0,n,58502466800\n                                        ,-7.71110535424668e-008,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -3.79914951054161e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-3.79939081085467e-007,U,s,0,0,n,1539538600,-3.79892810542515e-007,U,b,0,0,n,3079077200\n                                        ,-3.79915803705444e-007,U,b,0,0,n,4618615800,-3.79951302420523e-007,U,b,0,0,n,6158154400\n                                        ,-3.79914297354844e-007,U,b,0,0,n,7697693000,-3.79913927872622e-007,U,b,0,0,n,9237231600\n                                        ,-3.79955338303262e-007,U,b,0,0,n,10776770200,-3.79888234647296e-007,U,b,0,0,n,12316308800\n                                        ,-3.79891218926787e-007,U,b,0,0,n,13855847400,-3.79943912776071e-007,U,b,0,0,n,15395386000\n                                        ,-3.79847961085034e-007,U,b,0,0,n,16934924599,-3.79937176830936e-007,U,b,0,0,n,18474463200\n                                        ,-3.79929417704261e-007,U,b,0,0,n,20014001800,-3.79914922632452e-007,U,b,0,0,n,21553540400\n                                        ,-3.79921345938783e-007,U,b,0,0,n,23093079000,-3.79919327997413e-007,U,b,0,0,n,24632617600\n                                        ,-3.79913245751595e-007,U,b,0,0,n,26172156200,-3.7993547152837e-007,U,b,0,0,n,27711694800\n                                        ,-3.79873171141298e-007,U,b,0,0,n,29251233400,-3.79941553774188e-007,U,b,0,0,n,30790772000\n                                        ,-3.79890224166957e-007,U,b,0,0,n,32330310599,-3.79885705115157e-007,U,b,0,0,n,33869849199\n                                        ,-3.79988108534235e-007,U,b,0,0,n,35409387800,-3.7991398471604e-007,U,b,0,0,n,36948926400\n                                        ,-3.79918958515191e-007,U,b,0,0,n,38488465000,-3.7988257872712e-007,U,b,0,0,n,40028003600\n                                        ,-3.79902758140815e-007,U,b,0,0,n,41567542200,-3.79926063942548e-007,U,b,0,0,n,43107080800\n                                        ,-3.79894345314824e-007,U,b,0,0,n,44646619400,-3.79919470105961e-007,U,b,0,0,n,46186158000\n                                        ,-3.79961505814208e-007,U,b,0,0,n,47725696599,-3.79910204628686e-007,U,b,0,0,n,49265235200\n                                        ,-3.79945703343765e-007,U,b,0,0,n,50804773799,-3.79904719238766e-007,U,b,0,0,n,52344312400\n                                        ,-3.79916855308693e-007,U,b,0,0,n,53883850999,-3.79959232077454e-007,U,b,0,0,n,55423389600\n                                        ,-3.79940843231452e-007,U,b,0,0,n,56962928200,-3.79954315121722e-007,U,b,0,0,n,58502466800\n                                        ,-3.79906310854494e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 6.12122676102445e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,6.12122676102445e-006,U,s,0,0,n,28866348750,6.12122676102445e-006,U,s,0\n                                        ,0,n,57732697500,6.12122676102445e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.18875880161795e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,1.18875880161795e-006,U,s,0,0,n,28866348750,1.18875880161795e-006,U,s,0\n                                        ,0,n,57732697500,1.18875880161795e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 13.211012840271\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,13.211012840271,U,s,0,0,n,28866348750,13.211012840271,U,s,0,0,n,57732697500\n                                        ,13.211012840271,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Middle1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.35998678207397\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.000293526856694371\n                        KeyVer: 4005\n                        KeyCount: 30\n                        Key: 0,-0.000293526856694371,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600,-0.00029352682759054\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,-0.000293526856694371,U\n                                        ,b,0,0,a,0.329832986317342,0.329832986317342,4618615800,-0.000293526856694371,U,b\n                                        ,0,0,a,0.329832986317342,0.329832986317342,6158154400,-0.00029352682759054,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,7697693000,-0.000293526856694371,U,b,0,0,a\n                                        ,0.329832986317342,0.329832986317342,9237231600,-0.000293526856694371,U,b,0,0,a,0.329832986317342\n                                        ,0.989898998959688,13855847400,-0.000293526856694371,U,s,0,0,a,0.989898998959688,0.329832986317342\n                                        ,15395386000,-0.000293526856694371,U,b,0,0,a,0.32943294630968,0.32943294630968,16927226907\n                                        ,-0.00029352682759054,U,b,0,0,a,0.33033303632692,0.33033303632692,18474463200,-0.00029352682759054\n                                        ,U,b,0,0,a,0.329832986317342,0.329832986317342,20014001800,-0.000293526856694371,U\n                                        ,b,0,0,a,0.329832986317342,0.989898998959688,21553540400,-0.000293526856694371,U,b\n                                        ,0,0,a,0.989898998959688,0.329832986317342,23093079000,-0.000293526856694371,U,b,0\n                                        ,0,a,0.329832986317342,0.329832986317342,24632617600,-0.00029352682759054,U,s,0,0\n                                        ,a,0.329832986317342,0.989898998959688,26172156200,-0.000293526856694371,U,b,0,0,a\n                                        ,0.989898998959688,0.329832986317342,27711694800,-0.000293526856694371,U,b,0,0,a,0.329832986317342\n                                        ,0.989898998959688,38488465000,-0.000293526856694371,U,s,0,0,a,0.989898998959688,0.329832986317342\n                                        ,40028003600,-0.000293526856694371,U,b,0,0,a,0.329832986317342,0.329832986317342,41567542200\n                                        ,-0.00029352682759054,U,s,0,0,a,0.329832986317342,0.329832986317342,43107080800,-0.000293526856694371\n                                        ,U,b,0,0,a,0.329832986317342,0.329832986317342,44646619400,-0.000293526856694371,U\n                                        ,b,0,0,a,0.329832986317342,0.329832986317342,47725696599,-0.000293526856694371,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,49265235200,-0.000293526856694371,U,b,0\n                                        ,0,a,0.329832986317342,0.989898998959688,50804773799,-0.00029352682759054,U,s,0,0\n                                        ,a,0.989898998959688,0.329832986317342,52344312400,-0.000293526856694371,U,b,0,0,a\n                                        ,0.329832986317342,0.329832986317342,53883850999,-0.000293526856694371,U,b,0,0,a,0.329832986317342\n                                        ,0.989898998959688,55423389600,-0.000293526856694371,U,s,0,0,a,0.989898998959688,0.329832986317342\n                                        ,56962928200,-0.000293526856694371,U,b,0,0,a,0.329832986317342,0.989898998959688,58502466800\n                                        ,-0.00029352682759054,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.366859257221222\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -1.12324810028076\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-1.08737802505493,U,s,0,0,n,28866348750,-1.43228244781494,U,s,0,0,n,57732697500\n                                        ,-1.08737802505493,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.13205850124359\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-2.17822742462158,U,s,7.73031377792358,0,n,28866348750,2.33112192153931\n                                        ,U,s,0,-7.21495866775513,n,57732697500,-2.17822742462158,U,s,-7.21495866775513,0,n\n                                        \n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.1130610704422\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-1.06622469425201,U,s,16.1030979156494,0,n,28866348750,8.32724857330322\n                                        ,U,s,0,-15.0295572280884,n,57732697500,-1.06622469425201,U,s,-15.0295572280884,0,n\n                                        \n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Middle2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.52912306785584\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.33934121954371e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-3.33935849994305e-006,U,s,0,0,n,1539538600,-3.33933348883875e-006,U,b,0,0,n,3079077200\n                                        ,-3.33934849550133e-006,U,b,0,0,n,4618615800,-3.33936213792185e-006,U,b,0,0,n,6158154400\n                                        ,-3.33935031449073e-006,U,b,0,0,n,7697693000,-3.33934099217004e-006,U,b,0,0,n,9237231600\n                                        ,-3.33934895024868e-006,U,b,0,0,n,10776770200,-3.33936941387947e-006,U,b,0,0,n,12316308800\n                                        ,-3.33936873175844e-006,U,b,0,0,n,13855847400,-3.3393478133803e-006,U,b,0,0,n,15395386000\n                                        ,-3.33935690832732e-006,U,b,0,0,n,16934924599,-3.33933689944388e-006,U,b,0,0,n,18474463200\n                                        ,-3.33934895024868e-006,U,b,0,0,n,20014001800,-3.33934440277517e-006,U,b,0,0,n,21553540400\n                                        ,-3.33933758156491e-006,U,b,0,0,n,23093079000,-3.33934735863295e-006,U,b,0,0,n,24632617600\n                                        ,-3.33936031893245e-006,U,b,0,0,n,26172156200,-3.33933894580696e-006,U,b,0,0,n,27711694800\n                                        ,-3.33935508933791e-006,U,b,0,0,n,29251233400,-3.33933553520183e-006,U,b,0,0,n,30790772000\n                                        ,-3.33935327034851e-006,U,b,0,0,n,32330310599,-3.33936009155877e-006,U,b,0,0,n,33869849199\n                                        ,-3.3393330340914e-006,U,b,0,0,n,35409387800,-3.33934985974338e-006,U,b,0,0,n,36948926400\n                                        ,-3.3393607736798e-006,U,b,0,0,n,38488465000,-3.33935372509586e-006,U,b,0,0,n,40028003600\n                                        ,-3.33935372509586e-006,U,b,0,0,n,41567542200,-3.33934326590679e-006,U,b,0,0,n,43107080800\n                                        ,-3.33935327034851e-006,U,b,0,0,n,44646619400,-3.33935395246954e-006,U,b,0,0,n,46186158000\n                                        ,-3.33935349772219e-006,U,b,0,0,n,47725696599,-3.33935213348013e-006,U,b,0,0,n,49265235200\n                                        ,-3.33936600327434e-006,U,b,0,0,n,50804773799,-3.33934099217004e-006,U,b,0,0,n,52344312400\n                                        ,-3.33934121954371e-006,U,b,0,0,n,53883850999,-3.33936100105348e-006,U,b,0,0,n,55423389600\n                                        ,-3.33935304297484e-006,U,b,0,0,n,56962928200,-3.33936714014271e-006,U,b,0,0,n,58502466800\n                                        ,-3.33934053742269e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 2.41871944695049e-009\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,2.3942163807078e-009,U,s,0,0,n,1539538600,2.42808084749413e-009,U,b,0,0,n,3079077200\n                                        ,2.4102888573907e-009,U,b,0,0,n,4618615800,2.39039366078941e-009,U,b,0,0,n,6158154400\n                                        ,2.41043096593785e-009,U,b,0,0,n,7697693000,2.42268072270235e-009,U,b,0,0,n,9237231600\n                                        ,2.39428743498138e-009,U,b,0,0,n,10776770200,2.39342057284375e-009,U,b,0,0,n,12316308800\n                                        ,2.39033681737055e-009,U,b,0,0,n,13855847400,2.40321185174253e-009,U,b,0,0,n,15395386000\n                                        ,2.41988118432346e-009,U,b,0,0,n,16934924599,2.41068676132272e-009,U,b,0,0,n,18474463200\n                                        ,2.4056134861894e-009,U,b,0,0,n,20014001800,2.41136888234905e-009,U,b,0,0,n,21553540400\n                                        ,2.41017517055298e-009,U,b,0,0,n,23093079000,2.40761721670424e-009,U,b,0,0,n,24632617600\n                                        ,2.4178632429539e-009,U,b,0,0,n,26172156200,2.40468978063291e-009,U,b,0,0,n,27711694800\n                                        ,2.42715714193764e-009,U,b,0,0,n,29251233400,2.40325448430667e-009,U,b,0,0,n,30790772000\n                                        ,2.41257680499984e-009,U,b,0,0,n,32330310599,2.41657005517482e-009,U,b,0,0,n,33869849199\n                                        ,2.39467112805869e-009,U,b,0,0,n,35409387800,2.41227837705082e-009,U,b,0,0,n,36948926400\n                                        ,2.40983411003981e-009,U,b,0,0,n,38488465000,2.42387443449843e-009,U,b,0,0,n,40028003600\n                                        ,2.40905251303047e-009,U,b,0,0,n,41567542200,2.41102782183589e-009,U,b,0,0,n,43107080800\n                                        ,2.41894326791225e-009,U,b,0,0,n,44646619400,2.40780195781554e-009,U,b,0,0,n,46186158000\n                                        ,2.38799202634254e-009,U,b,0,0,n,47725696599,2.40974884491152e-009,U,b,0,0,n,49265235200\n                                        ,2.38901520788204e-009,U,b,0,0,n,50804773799,2.42150122176099e-009,U,b,0,0,n,52344312400\n                                        ,2.41820430346706e-009,U,b,0,0,n,53883850999,2.38571828958811e-009,U,b,0,0,n,55423389600\n                                        ,2.39909070387512e-009,U,b,0,0,n,56962928200,2.38347297454311e-009,U,b,0,0,n,58502466800\n                                        ,2.42098963099124e-009,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 3.29875911120325e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,3.29875911120325e-006,U,s,0,0,n,28866348750,3.29875911120325e-006,U,s,0\n                                        ,0,n,57732697500,3.29875911120325e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.02836747323454e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-3.02836747323454e-006,U,s,0,0,n,28866348750,-3.02836747323454e-006,U,s\n                                        ,0,0,n,57732697500,-3.02836747323454e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 18.566930770874\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,18.566930770874,U,s,0,0,n,28866348750,18.566930770874,U,s,0,0,n,57732697500\n                                        ,18.566930770874,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Middle3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.529128074646\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.97209737962112e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-1.97213785213535e-006,U,s,0,0,n,1539538600,-1.97209669750009e-006,U,b,0,0,n,3079077200\n                                        ,-1.97211966224131e-006,U,b,0,0,n,4618615800,-1.97214194486151e-006,U,b,0,0,n,6158154400\n                                        ,-1.9721253465832e-006,U,b,0,0,n,7697693000,-1.97210192709463e-006,U,b,0,0,n,9237231600\n                                        ,-1.9721160242625e-006,U,b,0,0,n,10776770200,-1.9721799162653e-006,U,b,0,0,n,12316308800\n                                        ,-1.97217923414428e-006,U,b,0,0,n,13855847400,-1.9721132957784e-006,U,b,0,0,n,15395386000\n                                        ,-1.97216104425024e-006,U,b,0,0,n,16934924599,-1.97209419638966e-006,U,b,0,0,n,18474463200\n                                        ,-1.97211988961499e-006,U,b,0,0,n,20014001800,-1.9721151147678e-006,U,b,0,0,n,21553540400\n                                        ,-1.97210329133668e-006,U,b,0,0,n,23093079000,-1.97212057173601e-006,U,b,0,0,n,24632617600\n                                        ,-1.97213512365124e-006,U,b,0,0,n,26172156200,-1.97210283658933e-006,U,b,0,0,n,27711694800\n                                        ,-1.97213853425637e-006,U,b,0,0,n,29251233400,-1.97209647012642e-006,U,b,0,0,n,30790772000\n                                        ,-1.9721410353668e-006,U,b,0,0,n,32330310599,-1.97215013031382e-006,U,b,0,0,n,33869849199\n                                        ,-1.97207600649563e-006,U,b,0,0,n,35409387800,-1.97212352759379e-006,U,b,0,0,n,36948926400\n                                        ,-1.97213898900372e-006,U,b,0,0,n,38488465000,-1.97213489627757e-006,U,b,0,0,n,40028003600\n                                        ,-1.972137397388e-006,U,b,0,0,n,41567542200,-1.97210783881019e-006,U,b,0,0,n,43107080800\n                                        ,-1.97213284991449e-006,U,b,0,0,n,44646619400,-1.97213080355141e-006,U,b,0,0,n,46186158000\n                                        ,-1.97212557395687e-006,U,b,0,0,n,47725696599,-1.97212966668303e-006,U,b,0,0,n,49265235200\n                                        ,-1.97214262698253e-006,U,b,0,0,n,50804773799,-1.97210420083138e-006,U,b,0,0,n,52344312400\n                                        ,-1.97209601537907e-006,U,b,0,0,n,53883850999,-1.97213967112475e-006,U,b,0,0,n,55423389600\n                                        ,-1.97212602870422e-006,U,b,0,0,n,56962928200,-1.97215263142425e-006,U,b,0,0,n,58502466800\n                                        ,-1.97210692931549e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -3.19399333648107e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-3.19387453373565e-007,U,s,0,0,n,1539538600,-3.19370826673548e-007,U,b,0,0,n,3079077200\n                                        ,-3.19379097390993e-007,U,b,0,0,n,4618615800,-3.19400442094775e-007,U,b,0,0,n,6158154400\n                                        ,-3.193697750703e-007,U,b,0,0,n,7697693000,-3.19400896842126e-007,U,b,0,0,n,9237231600\n                                        ,-3.19428352213436e-007,U,b,0,0,n,10776770200,-3.19262795756003e-007,U,b,0,0,n,12316308800\n                                        ,-3.19261602044207e-007,U,b,0,0,n,13855847400,-3.19422412076165e-007,U,b,0,0,n,15395386000\n                                        ,-3.1923704568726e-007,U,b,0,0,n,16934924599,-3.19429517503522e-007,U,b,0,0,n,18474463200\n                                        ,-3.19394558800923e-007,U,b,0,0,n,20014001800,-3.1937526046022e-007,U,b,0,0,n,21553540400\n                                        ,-3.19389812375448e-007,U,b,0,0,n,23093079000,-3.19375601520733e-007,U,b,0,0,n,24632617600\n                                        ,-3.19380490054755e-007,U,b,0,0,n,26172156200,-3.19407860160936e-007,U,b,0,0,n,27711694800\n                                        ,-3.19307787322032e-007,U,b,0,0,n,29251233400,-3.19418973049324e-007,U,b,0,0,n,30790772000\n                                        ,-3.19315631713835e-007,U,b,0,0,n,32330310599,-3.19313130603405e-007,U,b,0,0,n,33869849199\n                                        ,-3.19509098289927e-007,U,b,0,0,n,35409387800,-3.19371935120216e-007,U,b,0,0,n,36948926400\n                                        ,-3.19376169954921e-007,U,b,0,0,n,38488465000,-3.19322651876064e-007,U,b,0,0,n,40028003600\n                                        ,-3.19338226972832e-007,U,b,0,0,n,41567542200,-3.19399305226398e-007,U,b,0,0,n,43107080800\n                                        ,-3.19340898613518e-007,U,b,0,0,n,44646619400,-3.19374862556288e-007,U,b,0,0,n,46186158000\n                                        ,-3.19427044814802e-007,U,b,0,0,n,47725696599,-3.1935778110892e-007,U,b,0,0,n,49265235200\n                                        ,-3.19390778713569e-007,U,b,0,0,n,50804773799,-3.19379608981762e-007,U,b,0,0,n,52344312400\n                                        ,-3.19402971626914e-007,U,b,0,0,n,53883850999,-3.19409821258887e-007,U,b,0,0,n,55423389600\n                                        ,-3.19402261084178e-007,U,b,0,0,n,56962928200,-3.1939069344844e-007,U,b,0,0,n,58502466800\n                                        ,-3.19379893198857e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -5.25195036971127e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-5.25195036971127e-006,U,s,0,0,n,28866348750,-5.25195036971127e-006,U,s\n                                        ,0,0,n,57732697500,-5.25195036971127e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -6.89941970222208e-008\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-6.89941970222208e-008,U,s,0,0,n,28866348750,-6.89941970222208e-008,U,s\n                                        ,0,0,n,57732697500,-6.89941970222208e-008,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.59999227523804\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,3.59999227523804,U,s,0,0,n,28866348750,3.59999227523804,U,s,0,0,n,57732697500\n                                        ,3.59999227523804,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Ring1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 4.29501342773438\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.0947411805391312\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -0.806465566158295\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 9.92037773132324\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,9.83023166656494,U,s,0,0,n,28866348750,10.6970157623291,U,s,0,0,n,57732697500\n                                        ,9.83023166656494,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 6.50482177734375\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,7.67222261428833,U,s,-8.62611293792725,0,n,28866348750,2.64032316207886\n                                        ,U,s,0,8.05103969573975,n,57732697500,7.67222261428833,U,s,8.05103969573975,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 12.5329875946045\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,10.9412078857422,U,s,11.7619199752808,0,n,28866348750,17.8023262023926\n                                        ,U,s,0,-10.9777908325195,n,57732697500,10.9412078857422,U,s,-10.9777908325195,0,n\n                                        \n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Ring2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.40333533287048\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 3.56238683707488e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,3.56237524101743e-006,U,s,0,0,n,1539538600,3.56238729182223e-006,U,b,0,0,n,3079077200\n                                        ,3.562381152733e-006,U,b,0,0,n,4618615800,3.56237478627008e-006,U,b,0,0,n,6158154400\n                                        ,3.56237978849094e-006,U,b,0,0,n,7697693000,3.56238683707488e-006,U,b,0,0,n,9237231600\n                                        ,3.56237978849094e-006,U,b,0,0,n,10776770200,3.56236432708101e-006,U,b,0,0,n,12316308800\n                                        ,3.56236432708101e-006,U,b,0,0,n,13855847400,3.56238138010667e-006,U,b,0,0,n,15395386000\n                                        ,3.56237069354393e-006,U,b,0,0,n,16934924599,3.56238524545915e-006,U,b,0,0,n,18474463200\n                                        ,3.56237978849094e-006,U,b,0,0,n,20014001800,3.562381152733e-006,U,b,0,0,n,21553540400\n                                        ,3.56238251697505e-006,U,b,0,0,n,23093079000,3.56237956111727e-006,U,b,0,0,n,24632617600\n                                        ,3.56238069798565e-006,U,b,0,0,n,26172156200,3.56238251697505e-006,U,b,0,0,n,27711694800\n                                        ,3.56238024323829e-006,U,b,0,0,n,29251233400,3.56238228960137e-006,U,b,0,0,n,30790772000\n                                        ,3.56237546839111e-006,U,b,0,0,n,32330310599,3.56237501364376e-006,U,b,0,0,n,33869849199\n                                        ,3.56238751919591e-006,U,b,0,0,n,35409387800,3.56238024323829e-006,U,b,0,0,n,36948926400\n                                        ,3.56237842424889e-006,U,b,0,0,n,38488465000,3.56238001586462e-006,U,b,0,0,n,40028003600\n                                        ,3.56237660525949e-006,U,b,0,0,n,41567542200,3.5623829717224e-006,U,b,0,0,n,43107080800\n                                        ,3.56238047061197e-006,U,b,0,0,n,44646619400,3.56237774212786e-006,U,b,0,0,n,46186158000\n                                        ,3.56237592313846e-006,U,b,0,0,n,47725696599,3.56237865162257e-006,U,b,0,0,n,49265235200\n                                        ,3.56237364940171e-006,U,b,0,0,n,50804773799,3.56238570020651e-006,U,b,0,0,n,52344312400\n                                        ,3.56238706444856e-006,U,b,0,0,n,53883850999,3.56237410414906e-006,U,b,0,0,n,55423389600\n                                        ,3.56237842424889e-006,U,b,0,0,n,56962928200,3.56237114829128e-006,U,b,0,0,n,58502466800\n                                        ,3.56238433596445e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 8.68510085183516e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,8.68497863848461e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,1539538600,8.68517304297711e-007\n                                        ,U,s,0,0,a,0.989898998959688,0.989898998959688,3079077200,8.68507527229667e-007,U\n                                        ,s,0,0,a,0.989898998959688,0.989898998959688,4618615800,8.68494510086748e-007,U,s\n                                        ,0,0,a,0.989898998959688,0.989898998959688,6158154400,8.68508038820437e-007,U,s,0\n                                        ,0,a,0.989898998959688,0.989898998959688,7697693000,8.68512643137365e-007,U,s,0,0\n                                        ,a,0.989898998959688,0.989898998959688,9237231600,8.68494453243329e-007,U,s,0,0,a\n                                        ,0.989898998959688,0.989898998959688,10776770200,8.68507186169154e-007,U,s,0,0,a,0.989898998959688\n                                        ,0.989898998959688,12316308800,8.6850587877052e-007,U,s,0,0,a,0.989898998959688,0.989898998959688\n                                        ,13855847400,8.68500023898378e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,15395386000\n                                        ,8.68523216013273e-007,U,s,0,0,a,0.988698878936702,0.988698878936702,16927226907,8.68503150286415e-007\n                                        ,U,s,0,0,a,0.989999008961604,0.989999008961604,18474463200,8.68503605033766e-007,U\n                                        ,s,0,0,a,0.989898998959688,0.989898998959688,20014001800,8.68507925133599e-007,U,s\n                                        ,0,0,a,0.989898998959688,0.989898998959688,21553540400,8.68505537710007e-007,U,s,0\n                                        ,0,a,0.989898998959688,0.989898998959688,23093079000,8.68505765083682e-007,U,s,0,0\n                                        ,a,0.989898998959688,0.989898998959688,24632617600,8.68512302076851e-007,U,s,0,0,a\n                                        ,0.989898998959688,0.989898998959688,26172156200,8.6850138814043e-007,U,s,0,0,a,0.989898998959688\n                                        ,0.989898998959688,27711694800,8.68522192831733e-007,U,s,0,0,a,0.989898998959688,0.989898998959688\n                                        ,29251233400,8.68499455464189e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,30790772000\n                                        ,8.68513211571553e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,32330310599,8.68516167429334e-007\n                                        ,U,s,0,0,a,0.988698878936702,0.988698878936702,33862151507,8.68488029936998e-007,U\n                                        ,s,0,0,a,0.989999008961604,0.989999008961604,35409387800,8.68509005158558e-007,U,s\n                                        ,0,0,a,0.989898998959688,0.989898998959688,36948926400,8.68508038820437e-007,U,s,0\n                                        ,0,a,0.989898998959688,0.989898998959688,38488465000,8.68519464347628e-007,U,s,0,0\n                                        ,a,0.989898998959688,0.989898998959688,40028003600,8.68509800966422e-007,U,s,0,0,a\n                                        ,0.989898998959688,0.989898998959688,41567542200,8.68505992457358e-007,U,s,0,0,a,0.989898998959688\n                                        ,0.989898998959688,43107080800,8.68515201091213e-007,U,s,0,0,a,0.989898998959688,0.989898998959688\n                                        ,44646619400,8.68506162987615e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,46186158000\n                                        ,8.6849092895136e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,47725696599,8.68509005158558e-007\n                                        ,U,s,0,0,a,0.989898998959688,0.989898998959688,49265235200,8.68495078520937e-007,U\n                                        ,s,0,0,a,0.989898998959688,0.989898998959688,50804773799,8.68513495788648e-007,U,s\n                                        ,0,0,a,0.989898998959688,0.989898998959688,52344312400,8.68509971496678e-007,U,s,0\n                                        ,0,a,0.989898998959688,0.989898998959688,53883850999,8.68491213168454e-007,U,s,0,0\n                                        ,a,0.989898998959688,0.989898998959688,55423389600,8.68499171247095e-007,U,s,0,0,a\n                                        ,0.989898998959688,0.989898998959688,56962928200,8.68491838446062e-007,U,s,0,0,a,0.989898998959688\n                                        ,0.989898998959688,58502466800,8.68512927354459e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -8.52487929137169e-008\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-8.52487929137169e-008,U,s,0,0,n,28866348750,-8.52487929137169e-008,U,s\n                                        ,0,0,n,57732697500,-8.52487929137169e-008,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.5643117876607e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-1.5643117876607e-006,U,s,0,0,n,28866348750,-1.5643117876607e-006,U,s,0\n                                        ,0,n,57732697500,-1.5643117876607e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 27.2881908416748\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,27.2881908416748,U,s,0,0,n,28866348750,27.2881908416748,U,s,0,0,n,57732697500\n                                        ,27.2881908416748,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Ring3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.38826143741608\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -2.60250772043946e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-2.60247333017105e-007,U,s,0,0,n,1539538600,-2.60244718219838e-007,U,b,0,0,n,3079077200\n                                        ,-2.60243240290947e-007,U,b,0,0,n,4618615800,-2.60250430983433e-007,U,b,0,0,n,6158154400\n                                        ,-2.60243410821204e-007,U,b,0,0,n,7697693000,-2.60244632954709e-007,U,b,0,0,n,9237231600\n                                        ,-2.60256229012157e-007,U,b,0,0,n,10776770200,-2.60231502124952e-007,U,b,0,0,n,12316308800\n                                        ,-2.60233861126835e-007,U,b,0,0,n,13855847400,-2.60253358419504e-007,U,b,0,0,n,15395386000\n                                        ,-2.60230706317088e-007,U,b,0,0,n,16934924599,-2.60254921613523e-007,U,b,0,0,n,18474463200\n                                        ,-2.60248157246679e-007,U,b,0,0,n,20014001800,-2.60247503547362e-007,U,b,0,0,n,21553540400\n                                        ,-2.6025406896224e-007,U,b,0,0,n,23093079000,-2.60248327776935e-007,U,b,0,0,n,24632617600\n                                        ,-2.60231558968371e-007,U,b,0,0,n,26172156200,-2.60256115325319e-007,U,b,0,0,n,27711694800\n                                        ,-2.60228944171104e-007,U,b,0,0,n,29251233400,-2.60260776485666e-007,U,b,0,0,n,30790772000\n                                        ,-2.60240426541714e-007,U,b,0,0,n,32330310599,-2.60233207427518e-007,U,b,0,0,n,33869849199\n                                        ,-2.60267484009091e-007,U,b,0,0,n,35409387800,-2.60242813965306e-007,U,b,0,0,n,36948926400\n                                        ,-2.60236191707008e-007,U,b,0,0,n,38488465000,-2.60231786342047e-007,U,b,0,0,n,40028003600\n                                        ,-2.60242131844279e-007,U,b,0,0,n,41567542200,-2.60248299355226e-007,U,b,0,0,n,43107080800\n                                        ,-2.60235907489914e-007,U,b,0,0,n,44646619400,-2.60243552929751e-007,U,b,0,0,n,46186158000\n                                        ,-2.60257479567372e-007,U,b,0,0,n,47725696599,-2.60240824445646e-007,U,b,0,0,n,49265235200\n                                        ,-2.60250033079501e-007,U,b,0,0,n,50804773799,-2.60245229810607e-007,U,b,0,0,n,52344312400\n                                        ,-2.60251795225486e-007,U,b,0,0,n,53883850999,-2.602575648325e-007,U,b,0,0,n,55423389600\n                                        ,-2.60250686778818e-007,U,b,0,0,n,56962928200,-2.60247873029584e-007,U,b,0,0,n,58502466800\n                                        ,-2.60245940353343e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.2035725660553e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,1.20449072937845e-007,U,s,0,0,n,1539538600,1.20370714284945e-007,U,b,0,0,n,3079077200\n                                        ,1.20411201010029e-007,U,b,0,0,n,4618615800,1.20444070716985e-007,U,b,0,0,n,6158154400\n                                        ,1.20422782856622e-007,U,b,0,0,n,7697693000,1.20343500498166e-007,U,b,0,0,n,9237231600\n                                        ,1.20395938552065e-007,U,b,0,0,n,10776770200,1.20617116294852e-007,U,b,0,0,n,12316308800\n                                        ,1.2062621124187e-007,U,b,0,0,n,13855847400,1.20375929668626e-007,U,b,0,0,n,15395386000\n                                        ,1.20569225714462e-007,U,b,0,0,n,16934924599,1.20345760024065e-007,U,b,0,0,n,18474463200\n                                        ,1.20406284054297e-007,U,b,0,0,n,20014001800,1.20415066362511e-007,U,b,0,0,n,21553540400\n                                        ,1.20401139724891e-007,U,b,0,0,n,23093079000,1.20426136618335e-007,U,b,0,0,n,24632617600\n                                        ,1.20381201895725e-007,U,b,0,0,n,26172156200,1.20394105351807e-007,U,b,0,0,n,27711694800\n                                        ,1.20455027285971e-007,U,b,0,0,n,29251233400,1.20384882507096e-007,U,b,0,0,n,30790772000\n                                        ,1.20493183430881e-007,U,b,0,0,n,32330310599,1.20480706300441e-007,U,b,0,0,n,33869849199\n                                        ,1.20285704952039e-007,U,b,0,0,n,35409387800,1.20415279525332e-007,U,b,0,0,n,36948926400\n                                        ,1.20412607884646e-007,U,b,0,0,n,38488465000,1.20445307061345e-007,U,b,0,0,n,40028003600\n                                        ,1.20471383979748e-007,U,b,0,0,n,41567542200,1.20383191415385e-007,U,b,0,0,n,43107080800\n                                        ,1.20435686312703e-007,U,b,0,0,n,44646619400,1.20424715532863e-007,U,b,0,0,n,46186158000\n                                        ,1.20417595894651e-007,U,b,0,0,n,47725696599,1.20441328022025e-007,U,b,0,0,n,49265235200\n                                        ,1.20457954722042e-007,U,b,0,0,n,50804773799,1.20376597578797e-007,U,b,0,0,n,52344312400\n                                        ,1.20353675470142e-007,U,b,0,0,n,53883850999,1.20445491802457e-007,U,b,0,0,n,55423389600\n                                        ,1.20414625826015e-007,U,b,0,0,n,56962928200,1.20476613574283e-007,U,b,0,0,n,58502466800\n                                        ,1.20379070267518e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 1.73695445937483e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,1.73695445937483e-006,U,s,0,0,n,28866348750,1.73695445937483e-006,U,s,0\n                                        ,0,n,57732697500,1.73695445937483e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -8.55293436075044e-009\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,-8.55293436075044e-009,U,s,0,0,n,28866348750,-8.55293436075044e-009,U,s\n                                        ,0,0,n,57732697500,-8.55293436075044e-009,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 13.044979095459\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,13.044979095459,U,s,0,0,n,28866348750,13.044979095459,U,s,0,0,n,57732697500\n                                        ,13.044979095459,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Pinky1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 3.97267866134644\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.223486974835396\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -1.74283790588379\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 24.3684997558594\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,24.3867149353027,U,s,0,0,n,28866348750,24.2115783691406,U,s,0,0,n,57732697500\n                                        ,24.3867149353027,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 5.07718563079834\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,6.66169738769531,U,s,-11.7082147598267,0,n,28866348750,-0.168094426393509\n                                        ,U,s,0,10.9276666641235,n,57732697500,6.66169738769531,U,s,10.9276666641235,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 23.8567218780518\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,24.572681427002,U,s,-5.29033708572388,0,n,28866348750,21.4866504669189\n                                        ,U,s,0,4.9376482963562,n,57732697500,24.572681427002,U,s,4.9376482963562,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Pinky2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 1.13179266452789\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -4.5721540118393e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-4.57215764981811e-006,U,s,0,0,n,1539538600,-4.5721531023446e-006,U,b,0,0,n,3079077200\n                                        ,-4.57215355709195e-006,U,b,0,0,n,4618615800,-4.57215855931281e-006,U,b,0,0,n,6158154400\n                                        ,-4.57215537608135e-006,U,b,0,0,n,7697693000,-4.5721512833552e-006,U,b,0,0,n,9237231600\n                                        ,-4.57215901406016e-006,U,b,0,0,n,10776770200,-4.57216219729162e-006,U,b,0,0,n,12316308800\n                                        ,-4.57216265203897e-006,U,b,0,0,n,13855847400,-4.57215628557606e-006,U,b,0,0,n,15395386000\n                                        ,-4.57215719507076e-006,U,b,0,0,n,16934924599,-4.57215628557606e-006,U,b,0,0,n,18474463200\n                                        ,-4.57215719507076e-006,U,b,0,0,n,20014001800,-4.57215628557606e-006,U,b,0,0,n,21553540400\n                                        ,-4.57215901406016e-006,U,b,0,0,n,23093079000,-4.57215719507076e-006,U,b,0,0,n,24632617600\n                                        ,-4.57214900961844e-006,U,b,0,0,n,26172156200,-4.57215901406016e-006,U,b,0,0,n,27711694800\n                                        ,-4.5721512833552e-006,U,b,0,0,n,29251233400,-4.57216128779692e-006,U,b,0,0,n,30790772000\n                                        ,-4.57215810456546e-006,U,b,0,0,n,32330310599,-4.57215446658665e-006,U,b,0,0,n,33869849199\n                                        ,-4.57215810456546e-006,U,b,0,0,n,35409387800,-4.572154921334e-006,U,b,0,0,n,36948926400\n                                        ,-4.57215173810255e-006,U,b,0,0,n,38488465000,-4.57215173810255e-006,U,b,0,0,n,40028003600\n                                        ,-4.57215719507076e-006,U,b,0,0,n,41567542200,-4.57215537608135e-006,U,b,0,0,n,43107080800\n                                        ,-4.5721531023446e-006,U,b,0,0,n,44646619400,-4.57215583082871e-006,U,b,0,0,n,46186158000\n                                        ,-4.57216083304957e-006,U,b,0,0,n,47725696599,-4.572154921334e-006,U,b,0,0,n,49265235200\n                                        ,-4.57215992355486e-006,U,b,0,0,n,50804773799,-4.5721521928499e-006,U,b,0,0,n,52344312400\n                                        ,-4.57215446658665e-006,U,b,0,0,n,53883850999,-4.57215992355486e-006,U,b,0,0,n,55423389600\n                                        ,-4.57215719507076e-006,U,b,0,0,n,56962928200,-4.57215946880751e-006,U,b,0,0,n,58502466800\n                                        ,-4.57215446658665e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -2.5465004682701e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-2.54649876296753e-007,U,s,0,0,n,1539538600,-2.54645897257433e-007,U,b,0,0,n,3079077200\n                                        ,-2.54647886777093e-007,U,b,0,0,n,4618615800,-2.54651922659832e-007,U,b,0,0,n,6158154400\n                                        ,-2.54646977282391e-007,U,b,0,0,n,7697693000,-2.54650160513847e-007,U,b,0,0,n,9237231600\n                                        ,-2.54654480613681e-007,U,b,0,0,n,10776770200,-2.5463407382631e-007,U,b,0,0,n,12316308800\n                                        ,-2.54633675922378e-007,U,b,0,0,n,13855847400,-2.54653343745304e-007,U,b,0,0,n,15395386000\n                                        ,-2.54631970619812e-007,U,b,0,0,n,16934924599,-2.54653741649236e-007,U,b,0,0,n,18474463200\n                                        ,-2.54649592079659e-007,U,b,0,0,n,20014001800,-2.54647375186323e-007,U,b,0,0,n,21553540400\n                                        ,-2.54649194175727e-007,U,b,0,0,n,23093079000,-2.54647602559999e-007,U,b,0,0,n,24632617600\n                                        ,-2.54647886777093e-007,U,b,0,0,n,26172156200,-2.54651354225643e-007,U,b,0,0,n,27711694800\n                                        ,-2.54638962360332e-007,U,b,0,0,n,29251233400,-2.54652775311115e-007,U,b,0,0,n,30790772000\n                                        ,-2.54640212915547e-007,U,b,0,0,n,32330310599,-2.54639815011615e-007,U,b,0,0,n,33869849199\n                                        ,-2.54664143994887e-007,U,b,0,0,n,35409387800,-2.54646977282391e-007,U,b,0,0,n,36948926400\n                                        ,-2.54647716246836e-007,U,b,0,0,n,38488465000,-2.54640667662898e-007,U,b,0,0,n,40028003600\n                                        ,-2.54643111929909e-007,U,b,0,0,n,41567542200,-2.54649933140172e-007,U,b,0,0,n,43107080800\n                                        ,-2.54643282460165e-007,U,b,0,0,n,44646619400,-2.54647829933674e-007,U,b,0,0,n,46186158000\n                                        ,-2.54654480613681e-007,U,b,0,0,n,47725696599,-2.54645271979825e-007,U,b,0,0,n,49265235200\n                                        ,-2.54650387887523e-007,U,b,0,0,n,50804773799,-2.5464754571658e-007,U,b,0,0,n,52344312400\n                                        ,-2.54650501574361e-007,U,b,0,0,n,53883850999,-2.54653286901885e-007,U,b,0,0,n,55423389600\n                                        ,-2.546515247559e-007,U,b,0,0,n,56962928200,-2.5465101316513e-007,U,b,0,0,n,58502466800\n                                        ,-2.54647375186323e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 1.28670376398077e-006\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,1.28670376398077e-006,U,s,0,0,n,28866348750,1.28670376398077e-006,U,s,0\n                                        ,0,n,57732697500,1.28670376398077e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 2.94697493075091e-008\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,2.94697493075091e-008,U,s,0,0,n,28866348750,2.94697493075091e-008,U,s,0\n                                        ,0,n,57732697500,2.94697493075091e-008,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 21.8681793212891\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,21.8681793212891,U,s,0,0,n,28866348750,21.8681793212891,U,s,0,0,n,57732697500\n                                        ,21.8681793212891,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Pinky3\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 0.858952879905701\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -2.68376516032731e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-2.68374424194917e-006,U,s,0,0,n,1539538600,-2.68375606538029e-006,U,b,0,0,n,3079077200\n                                        ,-2.68374810730165e-006,U,b,0,0,n,4618615800,-2.68374810730165e-006,U,b,0,0,n,6158154400\n                                        ,-2.68374515144387e-006,U,b,0,0,n,7697693000,-2.68376174972218e-006,U,b,0,0,n,9237231600\n                                        ,-2.68376129497483e-006,U,b,0,0,n,10776770200,-2.68370308731392e-006,U,b,0,0,n,12316308800\n                                        ,-2.68370990852418e-006,U,b,0,0,n,13855847400,-2.68376243184321e-006,U,b,0,0,n,15395386000\n                                        ,-2.68371172751358e-006,U,b,0,0,n,16934924599,-2.68376265921688e-006,U,b,0,0,n,18474463200\n                                        ,-2.68374992629106e-006,U,b,0,0,n,20014001800,-2.68374810730165e-006,U,b,0,0,n,21553540400\n                                        ,-2.68375447376457e-006,U,b,0,0,n,23093079000,-2.68374787992798e-006,U,b,0,0,n,24632617600\n                                        ,-2.68374219558609e-006,U,b,0,0,n,26172156200,-2.68375833911705e-006,U,b,0,0,n,27711694800\n                                        ,-2.68372855316557e-006,U,b,0,0,n,29251233400,-2.68376220446953e-006,U,b,0,0,n,30790772000\n                                        ,-2.68373150902335e-006,U,b,0,0,n,32330310599,-2.68372764367086e-006,U,b,0,0,n,33869849199\n                                        ,-2.68378425971605e-006,U,b,0,0,n,35409387800,-2.68374537881755e-006,U,b,0,0,n,36948926400\n                                        ,-2.68374219558609e-006,U,b,0,0,n,38488465000,-2.68373219114437e-006,U,b,0,0,n,40028003600\n                                        ,-2.68373696599156e-006,U,b,0,0,n,41567542200,-2.68375379164354e-006,U,b,0,0,n,43107080800\n                                        ,-2.68373673861788e-006,U,b,0,0,n,44646619400,-2.6837449240702e-006,U,b,0,0,n,46186158000\n                                        ,-2.68375765699602e-006,U,b,0,0,n,47725696599,-2.68374037659669e-006,U,b,0,0,n,49265235200\n                                        ,-2.68374424194917e-006,U,b,0,0,n,50804773799,-2.68375629275397e-006,U,b,0,0,n,52344312400\n                                        ,-2.68376675194304e-006,U,b,0,0,n,53883850999,-2.68374947154371e-006,U,b,0,0,n,55423389600\n                                        ,-2.68375333689619e-006,U,b,0,0,n,56962928200,-2.68373901235464e-006,U,b,0,0,n,58502466800\n                                        ,-2.68375606538029e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.09315595359294e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,3.09369966089434e-007,U,s,0,0,n,1539538600,3.09317897517758e-007,U,b,0,0,n,3079077200\n                                        ,3.09344557081204e-007,U,b,0,0,n,4618615800,3.09368999751314e-007,U,b,0,0,n,6158154400\n                                        ,3.09350127736252e-007,U,b,0,0,n,7697693000,3.09307495172106e-007,U,b,0,0,n,9237231600\n                                        ,3.09342908622057e-007,U,b,0,0,n,10776770200,3.09443464630021e-007,U,b,0,0,n,12316308800\n                                        ,3.09445852053614e-007,U,b,0,0,n,13855847400,3.09332733650081e-007,U,b,0,0,n,15395386000\n                                        ,3.09415440824523e-007,U,b,0,0,n,16934924599,3.09314202695532e-007,U,b,0,0,n,18474463200\n                                        ,3.09344272864109e-007,U,b,0,0,n,20014001800,3.0934671713112e-007,U,b,0,0,n,21553540400\n                                        ,3.09340407511627e-007,U,b,0,0,n,23093079000,3.09353765715059e-007,U,b,0,0,n,24632617600\n                                        ,3.09324718728021e-007,U,b,0,0,n,26172156200,3.0933824746171e-007,U,b,0,0,n,27711694800\n                                        ,3.09360814298998e-007,U,b,0,0,n,29251233400,3.09334041048714e-007,U,b,0,0,n,30790772000\n                                        ,3.09387246488768e-007,U,b,0,0,n,32330310599,3.09378435758845e-007,U,b,0,0,n,33869849199\n                                        ,3.09283734623023e-007,U,b,0,0,n,35409387800,3.09345580262743e-007,U,b,0,0,n,36948926400\n                                        ,3.09344386550947e-007,U,b,0,0,n,38488465000,3.09356778416259e-007,U,b,0,0,n,40028003600\n                                        ,3.09376218865509e-007,U,b,0,0,n,41567542200,3.09330630443583e-007,U,b,0,0,n,43107080800\n                                        ,3.09353879401897e-007,U,b,0,0,n,44646619400,3.0935274253352e-007,U,b,0,0,n,46186158000\n                                        ,3.09357460537285e-007,U,b,0,0,n,47725696599,3.0935819950173e-007,U,b,0,0,n,49265235200\n                                        ,3.09375309370807e-007,U,b,0,0,n,50804773799,3.09324320824089e-007,U,b,0,0,n,52344312400\n                                        ,3.09313975321857e-007,U,b,0,0,n,53883850999,3.09371444018325e-007,U,b,0,0,n,55423389600\n                                        ,3.09350582483603e-007,U,b,0,0,n,56962928200,3.09387701236119e-007,U,b,0,0,n,58502466800\n                                        ,3.09324605041184e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 0\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 5.75897359848022\n                        KeyVer: 4005\n                        KeyCount: 3\n                        Key: 1924423250,5.75897359848022,U,s,0,0,n,28866348750,5.75897359848022,U,s,0,0,n,57732697500\n                                        ,5.75897359848022,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Thigh1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: -3.76930594444275\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.355237752199173\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.4951446056366\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -14.2042036056519\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,-13.2836256027222,U,s,0,0,n,1539538600,-12.2141666412354,U,b,0,0,n,3079077200,-11.8840589523315\n                                        ,U,b,0,0,n,4618615800,-12.0185041427612,U,b,0,0,n,6158154400,-12.0497541427612,U,b\n                                        ,0,0,n,7697693000,-12.1892185211182,U,b,0,0,n,9237231600,-12.0069074630737,U,b,0,0\n                                        ,n,10776770200,-12.2866773605347,U,b,0,0,n,12316308800,-12.3045291900635,U,b,0,0,n\n                                        ,13855847400,-12.0746250152588,U,b,0,0,n,15395386000,-11.8951368331909,U,b,0,0.138859555125237\n                                        ,n,16927226907,-11.7709445953369,U,b,0.138859555125237,0,n,16934924599,-11.7709302902222\n                                        ,U,b,0,0,n,18474463200,-11.5127363204956,U,b,0,0,n,20014001800,-11.1116437911987,U\n                                        ,b,0,0,n,21553540400,-10.6088209152222,U,b,0,0,n,23093079000,-10.1082258224487,U,b\n                                        ,0,0,n,24632617600,-9.36892223358154,U,b,0,0,n,26172156200,-8.69697093963623,U,b,0\n                                        ,0,n,27711694800,-9.10406017303467,U,b,0,0,n,29251233400,-9.87619972229004,U,b,0,0\n                                        ,n,30790772000,-11.4092969894409,U,b,0,0,n,32330310599,-12.5566968917847,U,b,0,-1.53721296787262\n                                        ,n,33862151507,-13.9315366744995,U,b,-1.53721296787262,0,n,33869849199,-13.9316968917847\n                                        ,U,b,0,0,n,35409387800,-14.9620933532715,U,b,0,0,n,36948926400,-14.8479108810425,U\n                                        ,b,0,0,n,38488465000,-14.1059827804565,U,b,0,0,n,40028003600,-14.0971784591675,U,b\n                                        ,0,0,n,41567542200,-13.7362461090088,U,b,0,0,n,43107080800,-13.3009443283081,U,b,0\n                                        ,0,n,44646619400,-13.7619428634644,U,b,0,0,n,46186158000,-13.6813917160034,U,b,0,0\n                                        ,n,47725696599,-14.1359052658081,U,b,0,0,n,49265235200,-14.410059928894,U,b,0,0,n\n                                        ,50804773799,-14.497706413269,U,b,0,0,n,52344312400,-14.1498508453369,U,b,0,0,n,53883850999\n                                        ,-13.8505201339722,U,b,0,0,n,55423389600,-13.4876661300659,U,b,0,0,n,56962928200,-13.3948163986206\n                                        ,U,b,0,0,n,58502466800,-13.2835645675659,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -164.144622802734\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,-168.131698608398,U,s,0,0,n,1539538600,-169.400680541992,U,b,0,0,n,3079077200,-171.672409057617\n                                        ,U,b,0,0,n,4618615800,-173.129058837891,U,b,0,0,n,6158154400,-174.804214477539,U,b\n                                        ,0,0,n,7697693000,-176.701934814453,U,b,0,0,n,9237231600,-177.908096313477,U,b,0,0\n                                        ,n,10776770200,-177.560592651367,U,b,0,0,n,12316308800,-177.799987792969,U,b,0,0,n\n                                        ,13855847400,-178.922256469727,U,b,0,0,n,15395386000,-179.568496704102,U,b,0,-0.446175903081894\n                                        ,n,16927226907,-179.967544555664,U,b,-0.446175903081894,0,n,16934924599,-179.967590332031\n                                        ,U,b,0,0,n,18474463200,-180.582260131836,U,b,0,0,n,20014001800,-181.524795532227,U\n                                        ,b,0,0,n,21553540400,-182.733673095703,U,b,0,0,n,23093079000,-184.078094482422,U,b\n                                        ,0,0,n,24632617600,-185.216995239258,U,b,0,0,n,26172156200,-185.507827758789,U,b,0\n                                        ,0,n,27711694800,-184.374404907227,U,b,0,0,n,29251233400,-182.320236206055,U,b,0,0\n                                        ,n,30790772000,-179.286239624023,U,b,0,0,n,32330310599,-177.198211669922,U,b,0,3.8426399230957\n                                        ,n,33862151507,-173.761459350586,U,b,3.8426399230957,0,n,33869849199,-173.76106262207\n                                        ,U,b,0,0,n,35409387800,-169.894729614258,U,b,0,0,n,36948926400,-166.017166137695,U\n                                        ,b,0,0,n,38488465000,-162.788818359375,U,b,0,0,n,40028003600,-162.659088134766,U,b\n                                        ,0,0,n,41567542200,-161.72607421875,U,b,0,0,n,43107080800,-159.943923950195,U,b,0\n                                        ,0,n,44646619400,-159.311767578125,U,b,0,0,n,46186158000,-158.277862548828,U,b,0,0\n                                        ,n,47725696599,-159.686279296875,U,b,0,0,n,49265235200,-161.404632568359,U,b,0,0,n\n                                        ,50804773799,-163.537399291992,U,b,0,0,n,52344312400,-164.257064819336,U,b,0,0,n,53883850999\n                                        ,-164.530349731445,U,b,0,0,n,55423389600,-165.145874023438,U,b,0,0,n,56962928200,-166.572967529297\n                                        ,U,b,0,0,n,58502466800,-168.131164550781,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -29.484790802002\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,-30.3268051147461,U,s,-16.2599067687988,30.8690700531006,a,0.329832986317342,0.989898998959688\n                                        ,1539538600,-30.0833187103271,U,s,30.8690700531006,52.7339057922363,a,0.989898998959688\n                                        ,0.989898998959688,3079077200,-28.2688674926758,U,s,52.7339057922363,47.5948524475098\n                                        ,a,0.989898998959688,0.989898998959688,4618615800,-26.5677261352539,U,s,47.5948524475098\n                                        ,40.2852516174316,a,0.989898998959688,0.329832986317342,6158154400,-25.0958766937256\n                                        ,U,s,40.2852516174316,51.1244087219238,a,0.329832986317342,0.329832986317342,7697693000\n                                        ,-23.8820419311523,U,s,51.1244087219238,86.3232574462891,a,0.329832986317342,0.329832986317342\n                                        ,9237231600,-21.6875839233398,U,s,86.3232574462891,94.9324188232422,a,0.329832986317342\n                                        ,0.329832986317342,10776770200,-18.1271591186523,U,s,94.9324188232422,88.7693023681641\n                                        ,a,0.329832986317342,0.329832986317342,12316308800,-15.3587560653687,U,s,88.7693023681641\n                                        ,87.2586822509766,a,0.329832986317342,0.329832986317342,13855847400,-12.2092046737671\n                                        ,U,s,87.2586822509766,74.8988418579102,a,0.329832986317342,0.989898998959688,15395386000\n                                        ,-9.54151058197021,U,s,74.8988418579102,64.3027648925781,a,0.988698878936702,0.988698878936702\n                                        ,16927226907,-7.2294225692749,U,s,64.3027648925781,64.1804428100586,a,0.989999008961604\n                                        ,0.437743778384174,16934924599,-7.21602773666382,U,s,64.1804428100586,57.4942398071289\n                                        ,a,0.333333336384385,0.329832986317342,18474463200,-5.25926876068115,U,s,57.4942398071289\n                                        ,60.7072525024414,a,0.329932996319258,0.329932996319258,20014001800,-3.38397908210754\n                                        ,U,s,60.7072525024414,71.6988296508789,a,0.329932996319258,0.329832986317342,21553540400\n                                        ,-1.21211922168732,U,s,71.6988296508789,102.656715393066,a,0.329832986317342,0.329832986317342\n                                        ,23093079000,1.39594352245331,U,s,102.656715393066,124.031280517578,a,0.329832986317342\n                                        ,0.329832986317342,24632617600,5.6316614151001,U,s,124.031280517578,93.2759857177734\n                                        ,a,0.329832986317342,0.329832986317342,26172156200,9.66469669342041,U,s,93.2759857177734\n                                        ,68.0053787231445,a,0.329832986317342,0.989999008961604,27711694800,11.8500604629517\n                                        ,U,s,68.0053787231445,50.909049987793,a,0.989999008961604,0.329832986317342,29251233400\n                                        ,14.1983880996704,U,s,50.909049987793,1.23435175418854,a,0.329832986317342,0.329832986317342\n                                        ,30790772000,15.2439975738525,U,s,1.23435175418854,-73.9931030273438,a,0.329832986317342\n                                        ,0.329832986317342,32330310599,14.2806787490845,U,s,-73.9931030273438,-154.180709838867\n                                        ,a,0.32943294630968,0.32943294630968,33862151507,10.345269203186,U,s,-154.180709838867\n                                        ,-155.0078125,a,0.41224122789572,0.416641667980002,33869849199,10.3130598068237,U\n                                        ,s,-155.0078125,-194.773559570313,a,0.333233326382469,0.329832986317342,35409387800\n                                        ,3.97229838371277,U,s,-194.773559570313,-200.194900512695,a,0.329932996319258,0.329932996319258\n                                        ,36948926400,-2.67822957038879,U,s,-200.194900512695,-177.585296630859,a,0.329932996319258\n                                        ,0.989898998959688,38488465000,-9.37403011322021,U,s,-177.585296630859,-155.605087280273\n                                        ,a,0.989898998959688,0.989999008961604,40028003600,-14.5172500610352,U,s,-155.605087280273\n                                        ,-140.417861938477,a,0.989999008961604,0.989898998959688,41567542200,-19.7477035522461\n                                        ,U,s,-140.417861938477,-108.721839904785,a,0.989898998959688,0.329932996319258,43107080800\n                                        ,-23.8784408569336,U,s,-108.721839904785,-85.6574325561523,a,0.329932996319258,0.329932996319258\n                                        ,44646619400,-26.9958267211914,U,s,-85.6574325561523,-62.7225227355957,a,0.329932996319258\n                                        ,0.329932996319258,46186158000,-29.5889358520508,U,s,-62.7225227355957,-22.8538475036621\n                                        ,a,0.329932996319258,0.329932996319258,47725696599,-31.1773281097412,U,s,-22.8538475036621\n                                        ,20.2175846099854,a,0.329932996319258,0.989898998959688,49265235200,-31.1125259399414\n                                        ,U,s,20.2175846099854,25.5363693237305,a,0.989898998959688,0.329832986317342,50804773799\n                                        ,-29.8294887542725,U,s,25.5363693237305,10.4301090240479,a,0.329832986317342,0.329932996319258\n                                        ,52344312400,-29.4101009368896,U,s,10.4301090240479,-4.55454111099243,a,0.329932996319258\n                                        ,0.329832986317342,53883850999,-29.134147644043,U,s,-4.55454111099243,-10.3504514694214\n                                        ,a,0.329832986317342,0.329832986317342,55423389600,-29.713737487793,U,s,-10.3504514694214\n                                        ,-9.19140243530273,a,0.329832986317342,0.329932996319258,56962928200,-29.8241786956787\n                                        ,U,s,-9.19140243530273,-20.9477634429932,a,0.329932996319258,0.329832986317342,58502466800\n                                        ,-30.3264980316162,U,s,-20.9477634429932,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Knee2\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 18.257194519043\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -6.12689859735838e-007\n                        KeyVer: 4005\n                        KeyCount: 18\n                        Key: 0,-6.12688950241136e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600\n                                        ,-6.12690030266094e-007,U,s,0,0,a,0.329832986317342,0.989898998959688,3079077200,-6.12690087109513e-007\n                                        ,U,s,0,0,a,0.989898998959688,0.329832986317342,4618615800,-6.12689973422675e-007,U\n                                        ,s,0,0,a,0.329832986317342,0.329832986317342,6158154400,-6.12689575518743e-007,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,7697693000,-6.12689404988487e-007,U,s,0\n                                        ,0,a,0.329832986317342,0.989898998959688,9237231600,-6.12690143952932e-007,U,b,0,0\n                                        ,a,0.989898998959688,0.329832986317342,10776770200,-6.12690143952932e-007,U,b,0,0\n                                        ,a,0.329832986317342,0.329832986317342,44646619400,-6.12689632362162e-007,U,b,0,0\n                                        ,a,0.329832986317342,0.329832986317342,46186158000,-6.12689632362162e-007,U,b,0,0\n                                        ,a,0.329832986317342,0.989898998959688,47725696599,-6.12690939760796e-007,U,s,0,0\n                                        ,a,0.989898998959688,0.329832986317342,49265235200,-6.12690143952932e-007,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,50804773799,-6.12690030266094e-007,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,52344312400,-6.12689859735838e-007,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,53883850999,-6.12689291301649e-007,U,s,0,0\n                                        ,a,0.329832986317342,0.989898998959688,55423389600,-6.12689859735838e-007,U,s,0,0\n                                        ,a,0.989898998959688,0.989898998959688,56962928200,-6.12689973422675e-007,U,s,0,0\n                                        ,a,0.989898998959688,0.329832986317342,58502466800,-6.12689575518743e-007,U,s,0,0\n                                        ,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1.20223648991669e-006\n                        KeyVer: 4005\n                        KeyCount: 11\n                        Key: 0,1.2022368309772e-006,U,s,0,0,a,0.329832986317342,0.989898998959688,1539538600,1.20223614885617e-006\n                                        ,U,s,0,0,a,0.989898998959688,0.329832986317342,3079077200,1.20223603516934e-006,U\n                                        ,s,0,0,a,0.329832986317342,0.329832986317342,47725696599,1.2022359214825e-006,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,49265235200,1.20223614885617e-006,U,s,0\n                                        ,0,a,0.329832986317342,0.989898998959688,50804773799,1.20223626254301e-006,U,s,0,0\n                                        ,a,0.989898998959688,0.329832986317342,52344312400,1.20223660360352e-006,U,s,0,0,a\n                                        ,0.329832986317342,0.329832986317342,53883850999,1.20223717203771e-006,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,55423389600,1.20223660360352e-006,U,b,0,0,a,0.329832986317342,0.329832986317342\n                                        ,56962928200,1.20223660360352e-006,U,b,0,0,a,0.329832986317342,0.329832986317342,58502466800\n                                        ,1.20223614885617e-006,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 9.30474472045898\n                        KeyVer: 4005\n                        KeyCount: 45\n                        Key: 0,1.81418752670288,U,s,194.129928588867,52.9732894897461,a,0.329832986317342,0.329932996319258\n                                        ,1539538600,5.93257427215576,U,s,52.9732894897461,-24.1927452087402,a,0.329932996319258\n                                        ,0.989898998959688,3079077200,5.34574031829834,U,s,-24.1927452087402,-41.609748840332\n                                        ,a,0.989898998959688,0.329832986317342,4618615800,4.31972455978394,U,s,-41.609748840332\n                                        ,-48.0340309143066,a,0.329832986317342,0.329932996319258,6158154400,2.57175731658936\n                                        ,U,s,-48.0340309143066,-32.6010665893555,a,0.329932996319258,0.329832986317342,7697693000\n                                        ,1.11745595932007,U,s,-32.6010665893555,-7.37948131561279,a,0.329832986317342,0.329932996319258\n                                        ,9237231600,0.398352712392807,U,s,-7.37948131561279,7.84316921234131,a,0.329932996319258\n                                        ,0.329832986317342,10776770200,0.625490546226501,U,s,7.84316921234131,0.109712585806847\n                                        ,a,0.329832986317342,0.329832986317342,12316308800,0.921230614185333,U,s,0.109712585806847\n                                        ,-4.38973760604858,a,0.329832986317342,0.989999008961604,13855847400,0.632804691791534\n                                        ,U,s,-4.38973760604858,3.15626621246338,a,0.989999008961604,0.989999008961604,15395386000\n                                        ,0.628581464290619,U,s,3.15626621246338,3.77498412132263,a,0.988698878936702,0.32943294630968\n                                        ,16927226907,0.84120124578476,U,s,3.77498412132263,3.99858736991882,a,0.33033303632692\n                                        ,0.33033303632692,18474463200,0.878030121326447,U,s,3.99858736991882,6.27476596832275\n                                        ,a,0.329832986317342,0.329832986317342,20014001800,1.10740196704865,U,s,6.27476596832275\n                                        ,5.91541194915771,a,0.329832986317342,0.329832986317342,21553540400,1.29634785652161\n                                        ,U,s,5.91541194915771,11.4999532699585,a,0.329832986317342,0.329832986317342,23093079000\n                                        ,1.50176274776459,U,s,11.4999532699585,16.1096305847168,a,0.329832986317342,0.329832986317342\n                                        ,24632617600,2.06301116943359,U,s,16.1096305847168,24.2444667816162,a,0.329832986317342\n                                        ,0.989999008961604,26172156200,2.57573819160461,U,s,24.2444667816162,62.7332801818848\n                                        ,a,0.989999008961604,0.989999008961604,27711694800,3.67930889129639,U,s,62.7332801818848\n                                        ,105.38550567627,a,0.989999008961604,0.329832986317342,29251233400,6.75795698165894\n                                        ,U,s,105.38550567627,85.576286315918,a,0.329832986317342,0.329832986317342,30790772000\n                                        ,10.7050094604492,U,s,85.576286315918,30.2960338592529,a,0.329832986317342,0.329832986317342\n                                        ,32330310599,12.4630432128906,U,s,30.2960338592529,17.6096153259277,a,0.329032906302018\n                                        ,0.329032906302018,33092382207,12.7792701721191,U,s,17.6096153259277,11.2530336380005\n                                        ,a,0.329832986317342,0.329932996319258,33862151507,13.0456886291504,U,s,11.2530336380005\n                                        ,4.37883949279785,a,0.330733076334582,0.330733076334582,34639618500,13.1547317504883\n                                        ,U,s,4.37883949279785,-34.1706962585449,a,0.329832986317342,0.329832986317342,35409387800\n                                        ,13.1934251785278,U,s,-34.1706962585449,-84.1081161499023,a,0.329832986317342,0.329932996319258\n                                        ,36948926400,9.62158298492432,U,s,-84.1081161499023,-26.9458656311035,a,0.329932996319258\n                                        ,0.989898998959688,38488465000,7.58621692657471,U,s,-26.9458656311035,37.4692192077637\n                                        ,a,0.989898998959688,0.329932996319258,40028003600,7.82519245147705,U,s,37.4692192077637\n                                        ,90.2785415649414,a,0.329932996319258,0.329932996319258,41567542200,10.0841646194458\n                                        ,U,s,90.2785415649414,91.5232086181641,a,0.329932996319258,0.329932996319258,43107080800\n                                        ,13.8437623977661,U,s,91.5232086181641,67.8866882324219,a,0.329932996319258,0.329832986317342\n                                        ,44646619400,16.1857128143311,U,s,67.8866882324219,-8.14556312561035,a,0.329832986317342\n                                        ,0.329832986317342,46186158000,18.3695411682129,U,s,-8.14556312561035,-45.6888465881348\n                                        ,a,0.329832986317342,0.989898998959688,46955927300,17.619945526123,U,s,-45.6888465881348\n                                        ,-55.9278259277344,a,0.989898998959688,0.329932996319258,47725696599,16.8465805053711\n                                        ,U,s,-55.9278259277344,-66.6511077880859,a,0.329932996319258,0.329832986317342,48495465900\n                                        ,15.7556838989258,U,s,-66.6511077880859,-80.388801574707,a,0.329832986317342,0.329832986317342\n                                        ,49265235200,14.6248760223389,U,s,-80.388801574707,-94.2590789794922,a,0.329832986317342\n                                        ,0.329832986317342,50035004500,13.076057434082,U,s,-94.2590789794922,-91.139762878418\n                                        ,a,0.329832986317342,0.329832986317342,50804773799,11.4829072952271,U,s,-91.139762878418\n                                        ,-87.2333374023438,a,0.329832986317342,0.329832986317342,51574543100,10.038064956665\n                                        ,U,s,-87.2333374023438,-86.3350677490234,a,0.329832986317342,0.329932996319258,52344312400\n                                        ,8.57512950897217,U,s,-86.3350677490234,-64.0796279907227,a,0.329932996319258,0.329832986317342\n                                        ,53883850999,5.79336643218994,U,s,-64.0796279907227,-39.2254371643066,a,0.329832986317342\n                                        ,0.329832986317342,55423389600,4.30315446853638,U,s,-39.2254371643066,-37.3297080993652\n                                        ,a,0.329832986317342,0.329832986317342,56962928200,3.17833757400513,U,s,-37.3297080993652\n                                        ,-44.500114440918,a,0.329832986317342,0.329832986317342,58502466800,1.81450724601746\n                                        ,U,s,-44.500114440918,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.54519647359848\n                        KeyVer: 4005\n                        KeyCount: 45\n                        Key: 0,1.0333206653595,U,s,2.22026991844177,9.14059162139893,a,0.329832986317342,0.989999008961604\n                                        ,1539538600,1.22266829013824,U,s,9.14059162139893,21.6986980438232,a,0.989999008961604\n                                        ,0.329832986317342,3079077200,1.642693400383,U,s,21.6986980438232,27.1240997314453\n                                        ,a,0.329832986317342,0.329832986317342,4618615800,2.66924810409546,U,s,27.1240997314453\n                                        ,19.390588760376,a,0.329832986317342,0.329832986317342,6158154400,3.45096683502197\n                                        ,U,s,19.390588760376,11.624716758728,a,0.329832986317342,0.329832986317342,7697693000\n                                        ,3.96195411682129,U,s,11.624716758728,-0.127701058983803,a,0.329832986317342,0.989898998959688\n                                        ,9237231600,4.22594785690308,U,s,-0.127701058983803,-5.46230506896973,a,0.989898998959688\n                                        ,0.329832986317342,10776770200,3.95344066619873,U,s,-5.46230506896973,-5.22423696517944\n                                        ,a,0.329832986317342,0.329932996319258,12316308800,3.86179423332214,U,s,-5.22423696517944\n                                        ,-9.92412948608398,a,0.329932996319258,0.329832986317342,13855847400,3.60515832901001\n                                        ,U,s,-9.92412948608398,-12.0255632400513,a,0.329832986317342,0.329832986317342,15395386000\n                                        ,3.20018553733826,U,s,-12.0255632400513,-8.03401565551758,a,0.32943294630968,0.32943294630968\n                                        ,16927226907,2.805908203125,U,s,-8.03401565551758,-3.49452376365662,a,0.33033303632692\n                                        ,0.33033303632692,18474463200,2.66782855987549,U,s,-3.49452376365662,0.017708333209157\n                                        ,a,0.329832986317342,0.989999008961604,20014001800,2.57195353507996,U,s,0.017708333209157\n                                        ,1.28147387504578,a,0.989999008961604,0.989898998959688,21553540400,2.6690092086792\n                                        ,U,s,1.28147387504578,-4.58256483078003,a,0.989898998959688,0.989999008961604,23093079000\n                                        ,2.6573851108551,U,s,-4.58256483078003,-14.0580501556396,a,0.989999008961604,0.329932996319258\n                                        ,24632617600,2.3635048866272,U,s,-14.0580501556396,-24.4900951385498,a,0.329932996319258\n                                        ,0.329832986317342,26172156200,1.7201817035675,U,s,-24.4900951385498,-22.5931930541992\n                                        ,a,0.329832986317342,0.329932996319258,27711694800,0.730831742286682,U,s,-22.5931930541992\n                                        ,-10.0418930053711,a,0.329932996319258,0.329932996319258,29251233400,0.213968724012375\n                                        ,U,s,-10.0418930053711,9.95317649841309,a,0.329932996319258,0.989898998959688,30790772000\n                                        ,0.0613721869885921,U,s,9.95317649841309,29.2297325134277,a,0.989898998959688,0.329932996319258\n                                        ,32330310599,0.877513766288757,U,s,29.2297325134277,32.1885070800781,a,0.329032906302018\n                                        ,0.329032906302018,33092382207,1.39714980125427,U,s,32.1885070800781,41.177318572998\n                                        ,a,0.329932996319258,0.329832986317342,33862151507,1.94401609897614,U,s,41.177318572998\n                                        ,50.1457176208496,a,0.330733076334582,0.330733076334582,34639618500,2.78181314468384\n                                        ,U,s,50.1457176208496,47.9676322937012,a,0.329832986317342,0.329832986317342,35409387800\n                                        ,3.62578082084656,U,s,47.9676322937012,44.1055908203125,a,0.329832986317342,0.329832986317342\n                                        ,36948926400,5.04667377471924,U,s,44.1055908203125,18.5542163848877,a,0.329832986317342\n                                        ,0.329832986317342,38488465000,6.56615352630615,U,s,18.5542163848877,-17.2352771759033\n                                        ,a,0.329832986317342,0.329832986317342,40028003600,6.28362131118774,U,s,-17.2352771759033\n                                        ,-33.3809356689453,a,0.329832986317342,0.329832986317342,41567542200,5.4171347618103\n                                        ,U,s,-33.3809356689453,-39.7079734802246,a,0.329832986317342,0.329932996319258,43107080800\n                                        ,4.05822563171387,U,s,-39.7079734802246,-33.1259880065918,a,0.329932996319258,0.329932996319258\n                                        ,44646619400,2.76993680000305,U,s,-33.1259880065918,-21.7700099945068,a,0.329932996319258\n                                        ,0.989898998959688,46186158000,1.84982657432556,U,s,-21.7700099945068,-16.9209938049316\n                                        ,a,0.989898998959688,0.989898998959688,46955927300,1.53560388088226,U,s,-16.9209938049316\n                                        ,-19.8570499420166,a,0.989898998959688,0.329932996319258,47725696599,1.28579342365265\n                                        ,U,s,-19.8570499420166,-20.8969783782959,a,0.329932996319258,0.329832986317342,48495465900\n                                        ,0.873702108860016,U,s,-20.8969783782959,-22.1892337799072,a,0.329832986317342,0.329832986317342\n                                        ,49265235200,0.589227437973022,U,s,-22.1892337799072,-21.4657459259033,a,0.329832986317342\n                                        ,0.329932996319258,50035004500,0.134061023592949,U,s,-21.4657459259033,-16.9220371246338\n                                        ,a,0.329932996319258,0.329932996319258,50804773799,-0.12629745900631,U,s,-16.9220371246338\n                                        ,-15.0932025909424,a,0.329932996319258,0.329832986317342,51574543100,-0.430006891489029\n                                        ,U,s,-15.0932025909424,-7.58093118667603,a,0.329832986317342,0.329832986317342,52344312400\n                                        ,-0.629404246807098,U,s,-7.58093118667603,7.61642932891846,a,0.329832986317342,0.329832986317342\n                                        ,53883850999,-0.589907944202423,U,s,7.61642932891846,15.9369230270386,a,0.329832986317342\n                                        ,0.329832986317342,55423389600,-0.121642306447029,U,s,15.9369230270386,17.323673248291\n                                        ,a,0.329832986317342,0.329832986317342,56962928200,0.472553580999374,U,s,17.323673248291\n                                        ,16.3192653656006,a,0.329832986317342,0.329832986317342,58502466800,1.03326916694641\n                                        ,U,s,16.319263458252,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -24.0315208435059\n                        KeyVer: 4005\n                        KeyCount: 45\n                        Key: 0,-25.8006839752197,U,s,-130.330780029297,-65.4564056396484,a,0.329832986317342,0.989898998959688\n                                        ,1539538600,-29.0638046264648,U,s,-65.4564056396484,-92.7109680175781,a,0.989898998959688\n                                        ,0.989898998959688,3079077200,-30.1644439697266,U,s,-92.7109680175781,-127.378082275391\n                                        ,a,0.989898998959688,0.989999008961604,4618615800,-35.2445335388184,U,s,-127.378082275391\n                                        ,-91.8508148193359,a,0.989999008961604,0.329832986317342,6158154400,-38.6563148498535\n                                        ,U,s,-91.8508148193359,-46.246753692627,a,0.329832986317342,0.329832986317342,7697693000\n                                        ,-41.3679237365723,U,s,-46.246753692627,8.53437328338623,a,0.329832986317342,0.329832986317342\n                                        ,9237231600,-41.7394332885742,U,s,8.53437328338623,34.2648391723633,a,0.329832986317342\n                                        ,0.329832986317342,10776770200,-40.7989654541016,U,s,34.2648391723633,46.4164657592773\n                                        ,a,0.329832986317342,0.329832986317342,12316308800,-39.4551124572754,U,s,46.4164657592773\n                                        ,56.5433082580566,a,0.329832986317342,0.329932996319258,13855847400,-37.704532623291\n                                        ,U,s,56.5433082580566,52.8721351623535,a,0.329932996319258,0.329832986317342,15395386000\n                                        ,-35.6855583190918,U,s,52.8721351623535,39.1674118041992,a,0.32943294630968,0.32943294630968\n                                        ,16927226907,-34.1875419616699,U,s,39.1674118041992,33.5525894165039,a,0.33033303632692\n                                        ,0.33033303632692,18474463200,-33.079475402832,U,s,33.5525894165039,26.8174934387207\n                                        ,a,0.329832986317342,0.329832986317342,20014001800,-31.9439277648926,U,s,26.8174934387207\n                                        ,15.073938369751,a,0.329832986317342,0.329832986317342,21553540400,-31.2916412353516\n                                        ,U,s,15.073938369751,35.2768707275391,a,0.329832986317342,0.329832986317342,23093079000\n                                        ,-30.9389991760254,U,s,35.2768707275391,79.0143432617188,a,0.329832986317342,0.329932996319258\n                                        ,24632617600,-28.9398498535156,U,s,79.0143432617188,46.361213684082,a,0.329932996319258\n                                        ,0.329832986317342,26172156200,-25.6713752746582,U,s,46.361213684082,-21.644495010376\n                                        ,a,0.329832986317342,0.329932996319258,27711694800,-25.8491020202637,U,s,-21.644495010376\n                                        ,-69.0499038696289,a,0.329932996319258,0.329932996319258,29251233400,-27.1143417358398\n                                        ,U,s,-69.0499038696289,-163.921768188477,a,0.329932996319258,0.329832986317342,30790772000\n                                        ,-30.452428817749,U,s,-163.921768188477,-293.044891357422,a,0.329832986317342,0.329932996319258\n                                        ,32330310599,-38.0424613952637,U,s,-293.044891357422,-323.243774414063,a,0.329032906302018\n                                        ,0.329032906302018,33092382207,-43.3964958190918,U,s,-323.243774414063,-302.538848876953\n                                        ,a,0.329832986317342,0.329932996319258,33862151507,-48.7490463256836,U,s,-302.538848876953\n                                        ,-285.546569824219,a,0.330733076334582,0.330733076334582,34639618500,-53.5363502502441\n                                        ,U,s,-285.546569824219,-266.167053222656,a,0.329832986317342,0.329832986317342,35409387800\n                                        ,-58.325984954834,U,s,-266.167053222656,-217.637603759766,a,0.329832986317342,0.329832986317342\n                                        ,36948926400,-65.7841415405273,U,s,-217.637603759766,-176.96760559082,a,0.329832986317342\n                                        ,0.329832986317342,38488465000,-72.8351593017578,U,s,-176.96760559082,-96.6970367431641\n                                        ,a,0.329832986317342,0.329832986317342,40028003600,-77.5819854736328,U,s,-96.6970367431641\n                                        ,-4.47452545166016,a,0.329832986317342,0.329932996319258,41567542200,-79.281623840332\n                                        ,U,s,-4.47452545166016,77.028450012207,a,0.329932996319258,0.329832986317342,43107080800\n                                        ,-77.8802871704102,U,s,77.028450012207,153.994293212891,a,0.329832986317342,0.329932996319258\n                                        ,44646619400,-74.1464004516602,U,s,153.994293212891,259.077087402344,a,0.329932996319258\n                                        ,0.329832986317342,46186158000,-67.6139984130859,U,s,259.077087402344,290.722808837891\n                                        ,a,0.329832986317342,0.329932996319258,46955927300,-62.7701683044434,U,s,290.722808837891\n                                        ,342.586730957031,a,0.329932996319258,0.329832986317342,47725696599,-57.9232368469238\n                                        ,U,s,342.586730957031,394.540954589844,a,0.329832986317342,0.329832986317342,48495465900\n                                        ,-51.3506126403809,U,s,394.540954589844,410.081268310547,a,0.329832986317342,0.989999008961604\n                                        ,49265235200,-44.7718696594238,U,s,410.081268310547,425.72802734375,a,0.989999008961604\n                                        ,0.989898998959688,50035004500,-37.6812400817871,U,s,425.72802734375,336.179473876953\n                                        ,a,0.989898998959688,0.989898998959688,50804773799,-30.5809364318848,U,s,336.179473876953\n                                        ,246.536163330078,a,0.989898998959688,0.989898998959688,51574543100,-26.4752559661865\n                                        ,U,s,246.536163330078,183.887603759766,a,0.989898998959688,0.989898998959688,52344312400\n                                        ,-22.3630638122559,U,s,183.887603759766,11.3673486709595,a,0.989898998959688,0.989898998959688\n                                        ,53883850999,-20.42307472229,U,s,11.3673486709595,-51.8789176940918,a,0.989898998959688\n                                        ,0.989898998959688,55423389600,-21.6052417755127,U,s,-51.8789176940918,-62.925838470459\n                                        ,a,0.989898998959688,0.329832986317342,56962928200,-23.8816699981689,U,s,-62.925838470459\n                                        ,-52.1918067932129,a,0.329832986317342,0.989898998959688,58502466800,-25.8002967834473\n                                        ,U,s,-52.1918067932129,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Ankle1\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 15.4280042648315\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.32429221366692e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-1.32424702314893e-007,U,s,0,0,n,1539538600,-1.3243084140413e-007,U,b,0,0,n,3079077200\n                                        ,-1.32430699295583e-007,U,b,0,0,n,4618615800,-1.32429192944983e-007,U,b,0,0,n,6158154400\n                                        ,-1.32431296151481e-007,U,b,0,0,n,7697693000,-1.32427146581904e-007,U,b,0,0,n,9237231600\n                                        ,-1.32429562427205e-007,U,b,0,0,n,10776770200,-1.32428397137119e-007,U,b,0,0,n,12316308800\n                                        ,-1.32427530274981e-007,U,b,0,0,n,13855847400,-1.32429775590026e-007,U,b,0,0,n,15395386000\n                                        ,-1.32428525034811e-007,U,b,0,0,n,16934924599,-1.32427928178913e-007,U,b,0,0,n,18474463200\n                                        ,-1.32427615540109e-007,U,b,0,0,n,20014001800,-1.32427814492075e-007,U,b,0,0,n,21553540400\n                                        ,-1.32428681354213e-007,U,b,0,0,n,23093079000,-1.32428908727888e-007,U,b,0,0,n,24632617600\n                                        ,-1.32427601329255e-007,U,b,0,0,n,26172156200,-1.32430159283103e-007,U,b,0,0,n,27711694800\n                                        ,-1.32429676114043e-007,U,b,0,0,n,29251233400,-1.32428624510794e-007,U,b,0,0,n,30790772000\n                                        ,-1.32429747168317e-007,U,b,0,0,n,32330310599,-1.32428894517034e-007,U,b,0,0,n,33869849199\n                                        ,-1.32428525034811e-007,U,b,0,0,n,35409387800,-1.32429192944983e-007,U,b,0,0,n,36948926400\n                                        ,-1.32429448740368e-007,U,b,0,0,n,38488465000,-1.32429107679855e-007,U,b,0,0,n,40028003600\n                                        ,-1.32429249788402e-007,U,b,0,0,n,41567542200,-1.32428411347973e-007,U,b,0,0,n,43107080800\n                                        ,-1.32427601329255e-007,U,b,0,0,n,44646619400,-1.32429391896949e-007,U,b,0,0,n,46186158000\n                                        ,-1.32429079258145e-007,U,b,0,0,n,47725696599,-1.32428283450281e-007,U,b,0,0,n,49265235200\n                                        ,-1.32430670873873e-007,U,b,0,0,n,50804773799,-1.3243283092379e-007,U,b,0,0,n,52344312400\n                                        ,-1.32428553456521e-007,U,b,0,0,n,53883850999,-1.32427146581904e-007,U,b,0,0,n,55423389600\n                                        ,-1.32430443500198e-007,U,b,0,0,n,56962928200,-1.32430884036694e-007,U,b,0,0,n,58502466800\n                                        ,-1.32429462951222e-007,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 3.40772317031224e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,3.40773340212763e-007,U,s,0,0,n,1539538600,3.40769702233956e-007,U,b,0,0,n,3079077200\n                                        ,3.40771123319428e-007,U,b,0,0,n,4618615800,3.40771464379941e-007,U,b,0,0,n,6158154400\n                                        ,3.40771975970711e-007,U,b,0,0,n,7697693000,3.40773738116695e-007,U,b,0,0,n,9237231600\n                                        ,3.40771066476009e-007,U,b,0,0,n,10776770200,3.40770725415496e-007,U,b,0,0,n,12316308800\n                                        ,3.40770213824726e-007,U,b,0,0,n,13855847400,3.40773055995669e-007,U,b,0,0,n,15395386000\n                                        ,3.40772203344386e-007,U,b,0,0,n,16934924599,3.40773055995669e-007,U,b,0,0,n,18474463200\n                                        ,3.40771066476009e-007,U,b,0,0,n,20014001800,3.40770270668145e-007,U,b,0,0,n,21553540400\n                                        ,3.40771919127292e-007,U,b,0,0,n,23093079000,3.40770668572077e-007,U,b,0,0,n,24632617600\n                                        ,3.40771066476009e-007,U,b,0,0,n,26172156200,3.40772260187805e-007,U,b,0,0,n,27711694800\n                                        ,3.40772658091737e-007,U,b,0,0,n,29251233400,3.40769190643186e-007,U,b,0,0,n,30790772000\n                                        ,3.40772032814129e-007,U,b,0,0,n,32330310599,3.40772317031224e-007,U,b,0,0,n,33869849199\n                                        ,3.40768906426092e-007,U,b,0,0,n,35409387800,3.40769986451051e-007,U,b,0,0,n,36948926400\n                                        ,3.40772146500967e-007,U,b,0,0,n,38488465000,3.40771293849684e-007,U,b,0,0,n,40028003600\n                                        ,3.40771691753616e-007,U,b,0,0,n,41567542200,3.4077049804182e-007,U,b,0,0,n,43107080800\n                                        ,3.40771975970711e-007,U,b,0,0,n,44646619400,3.40771464379941e-007,U,b,0,0,n,46186158000\n                                        ,3.40770895945752e-007,U,b,0,0,n,47725696599,3.40772032814129e-007,U,b,0,0,n,49265235200\n                                        ,3.40771180162847e-007,U,b,0,0,n,50804773799,3.40771919127292e-007,U,b,0,0,n,52344312400\n                                        ,3.40772373874643e-007,U,b,0,0,n,53883850999,3.4077351074302e-007,U,b,0,0,n,55423389600\n                                        ,3.4077299915225e-007,U,b,0,0,n,56962928200,3.40771805440454e-007,U,b,0,0,n,58502466800\n                                        ,3.40770611728658e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -4.13260126113892\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,-4.32539510726929,U,s,9.74764537811279,4.05216360092163,a,0.329832986317342,0.329832986317342\n                                        ,1539538600,-4.09539794921875,U,s,4.05216360092163,-2.47291088104248,a,0.329832986317342\n                                        ,0.989898998959688,3079077200,-4.05525064468384,U,s,-2.47291088104248,-3.71995997428894\n                                        ,a,0.989898998959688,0.329832986317342,4618615800,-4.26025867462158,U,s,-3.71995997428894\n                                        ,-1.77611613273621,a,0.329832986317342,0.329832986317342,6158154400,-4.30324792861938\n                                        ,U,s,-1.77611613273621,-2.0417697429657,a,0.329832986317342,0.329832986317342,7697693000\n                                        ,-4.37866640090942,U,s,-2.0417697429657,-1.22031581401825,a,0.329832986317342,0.329932996319258\n                                        ,9237231600,-4.43936586380005,U,s,-1.22031581401825,-0.52849018573761,a,0.329932996319258\n                                        ,0.329832986317342,10776770200,-4.46002101898193,U,s,-0.52849018573761,-0.346072882413864\n                                        ,a,0.329832986317342,0.329832986317342,12316308800,-4.47459888458252,U,s,-0.346072882413864\n                                        ,0.254544079303741,a,0.329832986317342,0.989999008961604,13855847400,-4.48309230804443\n                                        ,U,s,0.254544079303741,1.14349162578583,a,0.989999008961604,0.989898998959688,15395386000\n                                        ,-4.45762920379639,U,s,1.14349162578583,1.17684686183929,a,0.988698878936702,0.32943294630968\n                                        ,16927226907,-4.40725564956665,U,s,1.17684686183929,1.09380698204041,a,0.33033303632692\n                                        ,0.33033303632692,18474463200,-4.37946081161499,U,s,1.09380698204041,0.879288733005524\n                                        ,a,0.329932996319258,0.329832986317342,20014001800,-4.33421754837036,U,s,0.879288733005524\n                                        ,0.103470966219902,a,0.329832986317342,0.329932996319258,21553540400,-4.32084178924561\n                                        ,U,s,0.103470966219902,-0.147961094975472,a,0.329932996319258,0.329932996319258,23093079000\n                                        ,-4.32731914520264,U,s,-0.147961094975472,1.2626736164093,a,0.329932996319258,0.329832986317342\n                                        ,24632617600,-4.3307056427002,U,s,1.2626736164093,12.7735137939453,a,0.329832986317342\n                                        ,0.989898998959688,26172156200,-4.24314117431641,U,s,12.7735137939453,9.73235416412354\n                                        ,a,0.989898998959688,0.329832986317342,27711694800,-3.47913837432861,U,s,9.73235416412354\n                                        ,-4.947838306427,a,0.329832986317342,0.329932996319258,29251233400,-3.59431743621826\n                                        ,U,s,-4.947838306427,-4.38255453109741,a,0.329932996319258,0.329832986317342,30790772000\n                                        ,-3.80899429321289,U,s,-4.38255453109741,-1.2689870595932,a,0.329832986317342,0.329832986317342\n                                        ,32330310599,-3.88648772239685,U,s,-1.2689870595932,-4.06507015228271,a,0.32943294630968\n                                        ,0.32943294630968,33862151507,-3.89376759529114,U,s,-4.06507015228271,-4.99182987213135\n                                        ,a,0.330733076334582,0.330733076334582,34639618500,-3.99542260169983,U,s,-4.99182987213135\n                                        ,5.46055746078491,a,0.329832986317342,0.329832986317342,35409387800,-4.06162929534912\n                                        ,U,s,5.46055746078491,19.8186435699463,a,0.329832986317342,0.329832986317342,36179157100\n                                        ,-3.81340384483337,U,s,19.8186435699463,25.3652954101563,a,0.329832986317342,0.329832986317342\n                                        ,36948926400,-3.40100789070129,U,s,25.3652954101563,-0.754699647426605,a,0.329832986317342\n                                        ,0.329932996319258,38488465000,-2.51406288146973,U,s,-0.754699647426605,-18.140983581543\n                                        ,a,0.329932996319258,0.329832986317342,40028003600,-3.45132112503052,U,s,-18.140983581543\n                                        ,-4.29616785049438,a,0.329832986317342,0.329832986317342,41567542200,-3.72346186637878\n                                        ,U,s,-4.29616785049438,-5.04416275024414,a,0.329832986317342,0.329932996319258,43107080800\n                                        ,-3.73773217201233,U,s,-5.04416275024414,-7.36480903625488,a,0.329932996319258,0.329832986317342\n                                        ,44646619400,-4.05973958969116,U,s,-7.36480903625488,-4.57957124710083,a,0.329832986317342\n                                        ,0.329832986317342,46186158000,-4.22871971130371,U,s,-4.57957124710083,-2.90831589698792\n                                        ,a,0.329832986317342,0.989898998959688,47725696599,-4.36504411697388,U,s,-2.90831589698792\n                                        ,1.5592041015625,a,0.989898998959688,0.329832986317342,49265235200,-4.422607421875\n                                        ,U,s,1.5592041015625,4.79565095901489,a,0.329832986317342,0.329832986317342,50804773799\n                                        ,-4.26109743118286,U,s,4.79565095901489,2.64324450492859,a,0.329832986317342,0.329832986317342\n                                        ,52344312400,-4.10289716720581,U,s,2.64324450492859,-0.756991982460022,a,0.329832986317342\n                                        ,0.329932996319258,53883850999,-4.08488082885742,U,s,-0.756991982460022,-2.26865172386169\n                                        ,a,0.329932996319258,0.329932996319258,55423389600,-4.15336322784424,U,s,-2.26865172386169\n                                        ,-2.58092784881592,a,0.329932996319258,0.329832986317342,56962928200,-4.23612451553345\n                                        ,U,s,-2.58092784881592,-2.77712535858154,a,0.329832986317342,0.329832986317342,58502466800\n                                        ,-4.32542514801025,U,s,-2.77712512016296,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.2486013174057\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,-4.39260387420654,U,s,-141.690704345703,15.0195608139038,a,0.329932996319258,0.329832986317342\n                                        ,1539538600,-6.5037899017334,U,s,15.0195608139038,69.885856628418,a,0.329832986317342\n                                        ,0.329932996319258,3079077200,-3.39129996299744,U,s,69.885856628418,17.0479202270508\n                                        ,a,0.329932996319258,0.329832986317342,4618615800,-1.84473204612732,U,s,17.0479202270508\n                                        ,-13.2429885864258,a,0.329832986317342,0.329932996319258,6158154400,-2.25477194786072\n                                        ,U,s,-13.2429885864258,-10.4475107192993,a,0.329932996319258,0.329832986317342,7697693000\n                                        ,-2.72759819030762,U,s,-10.4475107192993,-1.36680102348328,a,0.329832986317342,0.329832986317342\n                                        ,9237231600,-2.95127272605896,U,s,-1.36680102348328,3.86600971221924,a,0.329832986317342\n                                        ,0.329832986317342,10776770200,-2.81871819496155,U,s,3.86600971221924,3.55171632766724\n                                        ,a,0.329832986317342,0.329932996319258,12316308800,-2.69353866577148,U,s,3.55171632766724\n                                        ,5.42495107650757,a,0.329932996319258,0.329832986317342,13855847400,-2.58193707466125\n                                        ,U,s,5.42495107650757,8.89757347106934,a,0.329832986317342,0.329932996319258,15395386000\n                                        ,-2.33187532424927,U,s,8.89757347106934,7.47240829467773,a,0.32943294630968,0.32943294630968\n                                        ,16927226907,-1.99119889736176,U,s,7.47240829467773,5.06358671188354,a,0.33033303632692\n                                        ,0.33033303632692,18474463200,-1.83607292175293,U,s,5.06358671188354,2.93787670135498\n                                        ,a,0.329932996319258,0.329932996319258,20014001800,-1.65275371074677,U,s,2.93787670135498\n                                        ,-0.644476354122162,a,0.329932996319258,0.329832986317342,21553540400,-1.64021444320679\n                                        ,U,s,-0.644476354122162,-1.21098136901855,a,0.329832986317342,0.329832986317342,23093079000\n                                        ,-1.69571876525879,U,s,-1.21098136901855,3.59024667739868,a,0.329832986317342,0.329832986317342\n                                        ,24632617600,-1.72094655036926,U,s,3.59024667739868,19.5544548034668,a,0.329832986317342\n                                        ,0.329832986317342,26172156200,-1.45636904239655,U,s,19.5544548034668,6.8838210105896\n                                        ,a,0.329832986317342,0.329832986317342,27711694800,-0.417316168546677,U,s,6.8838210105896\n                                        ,-23.6667728424072,a,0.329832986317342,0.989999008961604,29251233400,-0.997447669506073\n                                        ,U,s,-23.6667728424072,-27.6384887695313,a,0.989999008961604,0.329932996319258,30790772000\n                                        ,-1.99510109424591,U,s,-27.6384887695313,-20.6314907073975,a,0.329932996319258,0.329832986317342\n                                        ,32330310599,-2.84001350402832,U,s,-20.6314907073975,-14.4286499023438,a,0.32943294630968\n                                        ,0.32943294630968,33862151507,-3.36819434165955,U,s,-14.4286499023438,-14.1201543807983\n                                        ,a,0.330733076334582,0.330733076334582,34639618500,-3.59864139556885,U,s,-14.1201543807983\n                                        ,-44.0417213439941,a,0.329832986317342,0.329932996319258,35409387800,-3.84161567687988\n                                        ,U,s,-44.0417213439941,-72.1685180664063,a,0.329932996319258,0.329932996319258,36179157100\n                                        ,-5.06669902801514,U,s,-72.1685180664063,-92.2684020996094,a,0.329932996319258,0.329832986317342\n                                        ,36948926400,-6.24723291397095,U,s,-92.2684020996094,-10.7165861129761,a,0.329832986317342\n                                        ,0.329932996319258,38488465000,-10.7519359588623,U,s,-10.7165861129761,64.6330413818359\n                                        ,a,0.329932996319258,0.329832986317342,40028003600,-6.96167230606079,U,s,64.6330413818359\n                                        ,-23.8557739257813,a,0.329832986317342,0.329832986317342,41567542200,-6.44306659698486\n                                        ,U,s,-23.8557739257813,5.55087614059448,a,0.329832986317342,0.989898998959688,43107080800\n                                        ,-8.55205726623535,U,s,5.55087614059448,-7.78578901290894,a,0.989898998959688,0.329832986317342\n                                        ,44646619400,-6.07300806045532,U,s,-7.78578901290894,-29.1614742279053,a,0.329832986317342\n                                        ,0.329832986317342,46186158000,-9.07110977172852,U,s,-29.1614742279053,23.7467479705811\n                                        ,a,0.329832986317342,0.329932996319258,47725696599,-8.01710605621338,U,s,23.7467479705811\n                                        ,74.8689193725586,a,0.329932996319258,0.329832986317342,49265235200,-7.48799276351929\n                                        ,U,s,74.8689193725586,97.6885147094727,a,0.329832986317342,0.329832986317342,50804773799\n                                        ,-3.02584481239319,U,s,97.6885147094727,31.8904228210449,a,0.329832986317342,0.989898998959688\n                                        ,52344312400,-0.975425541400909,U,s,31.8904228210449,-13.7700748443604,a,0.989898998959688\n                                        ,0.329932996319258,53883850999,-0.899817049503326,U,s,-13.7700748443604,-34.2314033508301\n                                        ,a,0.329932996319258,0.329932996319258,55423389600,-1.89343047142029,U,s,-34.2314033508301\n                                        ,-37.491153717041,a,0.329932996319258,0.329832986317342,56962928200,-3.18191051483154\n                                        ,U,s,-37.491153717041,-35.1646728515625,a,0.329832986317342,0.329832986317342,58502466800\n                                        ,-4.39284086227417,U,s,-35.1646728515625,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 7.7121057510376\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,2.03562951087952,U,s,-161.67399597168,-118.380531311035,a,0.329932996319258,0.329932996319258\n                                        ,1539538600,-2.63194608688354,U,s,-118.380531311035,55.3296165466309,a,0.329932996319258\n                                        ,0.329832986317342,3079077200,-5.85640668869019,U,s,55.3296165466309,174.577880859375\n                                        ,a,0.329832986317342,0.329832986317342,4618615800,1.05669522285461,U,s,174.577880859375\n                                        ,129.264419555664,a,0.329832986317342,0.329832986317342,6158154400,5.78211784362793\n                                        ,U,s,129.264419555664,99.0617980957031,a,0.329832986317342,0.329832986317342,7697693000\n                                        ,9.6743221282959,U,s,99.0617980957031,72.8863754272461,a,0.329832986317342,0.329832986317342\n                                        ,9237231600,12.3862371444702,U,s,72.8863754272461,58.0020599365234,a,0.329832986317342\n                                        ,0.329932996319258,10776770200,14.5334129333496,U,s,58.0020599365234,48.2341804504395\n                                        ,a,0.329932996319258,0.329832986317342,12316308800,16.2530422210693,U,s,48.2341804504395\n                                        ,39.9828071594238,a,0.329832986317342,0.989898998959688,13855847400,17.7490253448486\n                                        ,U,s,39.9828071594238,38.2857398986816,a,0.989898998959688,0.329932996319258,15395386000\n                                        ,18.9185619354248,U,s,38.2857398986816,42.9545936584473,a,0.32943294630968,0.988698878936702\n                                        ,16927226907,20.2921028137207,U,s,42.9545936584473,44.3140602111816,a,0.989999008961604\n                                        ,0.33033303632692,18474463200,21.7834510803223,U,s,44.3140602111816,50.8310546875\n                                        ,a,0.329932996319258,0.329832986317342,20014001800,23.2556667327881,U,s,50.8310546875\n                                        ,64.5632171630859,a,0.329832986317342,0.329932996319258,21553540400,25.1721878051758\n                                        ,U,s,64.5632171630859,62.2702217102051,a,0.329932996319258,0.329832986317342,23093079000\n                                        ,27.5598812103271,U,s,62.2702217102051,35.573673248291,a,0.329832986317342,0.329832986317342\n                                        ,24632617600,29.3235359191895,U,s,35.573673248291,-14.324291229248,a,0.329832986317342\n                                        ,0.989898998959688,26172156200,29.9314594268799,U,s,-14.324291229248,-37.4581413269043\n                                        ,a,0.989898998959688,0.329932996319258,27711694800,28.3685836791992,U,s,-37.4581413269043\n                                        ,-35.560173034668,a,0.329932996319258,0.329832986317342,29251233400,27.4342517852783\n                                        ,U,s,-35.560173034668,-65.4666748046875,a,0.329832986317342,0.329832986317342,30790772000\n                                        ,25.9979038238525,U,s,-65.4666748046875,-165.275817871094,a,0.329832986317342,0.329832986317342\n                                        ,32330310599,23.0698051452637,U,s,-165.275817871094,-417.481628417969,a,0.32943294630968\n                                        ,0.32943294630968,33862151507,15.0461130142212,U,s,-417.481628417969,-510.007232666016\n                                        ,a,0.330733076334582,0.330733076334582,34639618500,6.49447965621948,U,s,-510.007232666016\n                                        ,-488.744293212891,a,0.329932996319258,0.329832986317342,35409387800,-2.05903577804565\n                                        ,U,s,-488.744293212891,-464.919006347656,a,0.329832986317342,0.329832986317342,36179157100\n                                        ,-9.79699802398682,U,s,-464.919006347656,-339.172912597656,a,0.329832986317342,0.329832986317342\n                                        ,36948926400,-17.5563354492188,U,s,-339.172912597656,38.9781265258789,a,0.329832986317342\n                                        ,0.329932996319258,38488465000,-20.4362754821777,U,s,38.9781265258789,146.666244506836\n                                        ,a,0.329932996319258,0.329932996319258,40028003600,-14.9577932357788,U,s,146.666244506836\n                                        ,103.148651123047,a,0.329932996319258,0.329832986317342,41567542200,-10.6585273742676\n                                        ,U,s,103.148651123047,100.493087768555,a,0.329832986317342,0.329932996319258,43107080800\n                                        ,-8.08121681213379,U,s,100.493087768555,107.79753112793,a,0.329932996319258,0.989898998959688\n                                        ,44646619400,-3.95898866653442,U,s,107.79753112793,78.6896133422852,a,0.989898998959688\n                                        ,0.329932996319258,46186158000,-0.894715130329132,U,s,78.6896133422852,48.7677841186523\n                                        ,a,0.329932996319258,0.989898998959688,47725696599,1.28698587417603,U,s,48.7677841186523\n                                        ,38.2192649841309,a,0.989898998959688,0.329832986317342,49265235200,2.35647058486938\n                                        ,U,s,38.2192649841309,94.5176086425781,a,0.329832986317342,0.329832986317342,50804773799\n                                        ,3.83493685722351,U,s,94.5176086425781,71.8776702880859,a,0.329832986317342,0.329832986317342\n                                        ,52344312400,8.6576452255249,U,s,71.8776702880859,-28.8926753997803,a,0.329832986317342\n                                        ,0.329832986317342,53883850999,8.62678146362305,U,s,-28.8926753997803,-66.4608917236328\n                                        ,a,0.329832986317342,0.329832986317342,55423389600,6.73146677017212,U,s,-66.4608917236328\n                                        ,-70.4398040771484,a,0.329832986317342,0.329932996319258,56962928200,4.19605588912964\n                                        ,U,s,-70.4398040771484,-59.1947631835938,a,0.329932996319258,0.329832986317342,58502466800\n                                        ,2.03547978401184,U,s,-59.1947631835938,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.999999940395355\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::L_Ball\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 5.25022077560425\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 6.27384853363037\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -7.13063798229996e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-7.13062263457687e-007,U,s,0,0,n,1539538600,-7.13064252977347e-007,U,b,0,0,n,3079077200\n                                        ,-7.13063059265551e-007,U,b,0,0,n,4618615800,-7.13062945578713e-007,U,b,0,0,n,6158154400\n                                        ,-7.13063741386577e-007,U,b,0,0,n,7697693000,-7.13062377144524e-007,U,b,0,0,n,9237231600\n                                        ,-7.13063514012902e-007,U,b,0,0,n,10776770200,-7.13061240276147e-007,U,b,0,0,n,12316308800\n                                        ,-7.13061808710336e-007,U,b,0,0,n,13855847400,-7.13062831891875e-007,U,b,0,0,n,15395386000\n                                        ,-7.13062263457687e-007,U,b,0,0,n,16934924599,-7.13064423507603e-007,U,b,0,0,n,18474463200\n                                        ,-7.13063741386577e-007,U,b,0,0,n,20014001800,-7.13062149770849e-007,U,b,0,0,n,21553540400\n                                        ,-7.13063229795807e-007,U,b,0,0,n,23093079000,-7.1306408244709e-007,U,b,0,0,n,24632617600\n                                        ,-7.13063855073415e-007,U,b,0,0,n,26172156200,-7.13062036084011e-007,U,b,0,0,n,27711694800\n                                        ,-7.13062831891875e-007,U,b,0,0,n,29251233400,-7.13063400326064e-007,U,b,0,0,n,30790772000\n                                        ,-7.13063172952388e-007,U,b,0,0,n,32330310599,-7.13062831891875e-007,U,b,0,0,n,33869849199\n                                        ,-7.13062888735294e-007,U,b,0,0,n,35409387800,-7.13064423507603e-007,U,b,0,0,n,36948926400\n                                        ,-7.13062377144524e-007,U,b,0,0,n,38488465000,-7.13062320301106e-007,U,b,0,0,n,40028003600\n                                        ,-7.13063627699739e-007,U,b,0,0,n,41567542200,-7.13063172952388e-007,U,b,0,0,n,43107080800\n                                        ,-7.13062831891875e-007,U,b,0,0,n,44646619400,-7.13062149770849e-007,U,b,0,0,n,46186158000\n                                        ,-7.1306311610897e-007,U,b,0,0,n,47725696599,-7.13062775048456e-007,U,b,0,0,n,49265235200\n                                        ,-7.13062263457687e-007,U,b,0,0,n,50804773799,-7.1306408244709e-007,U,b,0,0,n,52344312400\n                                        ,-7.13063741386577e-007,U,b,0,0,n,53883850999,-7.13062036084011e-007,U,b,0,0,n,55423389600\n                                        ,-7.13063059265551e-007,U,b,0,0,n,56962928200,-7.13063059265551e-007,U,b,0,0,n,58502466800\n                                        ,-7.13064764568117e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 5.08523999087629e-006\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.36317566507205e-006\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 104.594673156738\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.00000011920929\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Thigh\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: -3.76930618286133\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -0.355218410491943\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -3.49514603614807\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 8.09784317016602\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,8.13890838623047,U,s,0,0,n,1539538600,10.4559097290039,U,b,0,0,n,3079077200,12.6900405883789\n                                        ,U,b,0,0,n,4618615800,14.3592472076416,U,b,0,0,n,6158154400,14.9395666122437,U,b,0\n                                        ,0,n,7697693000,14.6955480575562,U,b,0,0,n,9237231600,14.6885299682617,U,b,0,0,n,10776770200\n                                        ,14.4477453231812,U,b,0,0,n,12316308800,13.5716781616211,U,b,0,0,n,13855847400,12.9075708389282\n                                        ,U,b,0,0,n,15395386000,12.3170547485352,U,b,0,0,n,16934924599,12.0576553344727,U,b\n                                        ,0,0,n,18474463200,11.7479782104492,U,b,0,0,n,20014001800,11.6292343139648,U,b,0,0\n                                        ,n,21553540400,11.2741165161133,U,b,0,0,n,23093079000,10.9358444213867,U,b,0,0,n,24632617600\n                                        ,11.292366027832,U,b,0,0,n,26172156200,11.1135787963867,U,b,0,0,n,27711694800,10.4199151992798\n                                        ,U,b,0,0,n,29251233400,10.0009384155273,U,b,0,0,n,30790772000,9.50582122802734,U,b\n                                        ,0,0,n,32330310599,9.31429290771484,U,b,0,0,n,33869849199,9.77639007568359,U,b,0,0\n                                        ,n,35409387800,10.2498245239258,U,b,0,0,n,36948926400,10.8965682983398,U,b,0,0,n,38488465000\n                                        ,11.3111343383789,U,b,0,0,n,40028003600,11.2807998657227,U,b,0,0,n,41567542200,11.2647018432617\n                                        ,U,b,0,0,n,43107080800,10.985710144043,U,b,0,0,n,44646619400,10.3349380493164,U,b\n                                        ,0,0,n,46186158000,9.57946014404297,U,b,0,0,n,47725696599,8.78844451904297,U,b,0,0\n                                        ,n,49265235200,8.24538421630859,U,b,0,0,n,50804773799,8.02498626708984,U,b,0,0,n,52344312400\n                                        ,8.11133575439453,U,b,0,0,n,53883850999,8.28810882568359,U,b,0,0,n,55423389600,8.34142303466797\n                                        ,U,b,0,0,n,56962928200,8.20201873779297,U,b,0,0,n,58502466800,8.13889408111572,U,s\n                                        ,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 184.387466430664\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,179.733291625977,U,s,0,0,n,1539538600,177.354415893555,U,b,0,0,n,3079077200,175.408050537109\n                                        ,U,b,0,0,n,4618615800,173.510025024414,U,b,0,0,n,6158154400,171.439361572266,U,b,0\n                                        ,0,n,7697693000,169.868743896484,U,b,0,0,n,9237231600,170.614151000977,U,b,0,0,n,10776770200\n                                        ,172.182434082031,U,b,0,0,n,12316308800,172.454177856445,U,b,0,0,n,13855847400,171.841583251953\n                                        ,U,b,0,0,n,15395386000,171.499893188477,U,b,0,0,n,16934924599,172.289947509766,U,b\n                                        ,0,0,n,18474463200,172.611389160156,U,b,0,0,n,20014001800,172.557968139648,U,b,0,0\n                                        ,n,21553540400,171.321441650391,U,b,0,0,n,23093079000,169.995880126953,U,b,0,0,n,24632617600\n                                        ,169.60888671875,U,b,0,0,n,26172156200,170.620300292969,U,b,0,0,n,27711694800,172.555572509766\n                                        ,U,b,0,0,n,29251233400,173.827926635742,U,b,0,0,n,30790772000,175.786422729492,U,b\n                                        ,0,0,n,32330310599,177.860076904297,U,b,0,0,n,33869849199,180.205993652344,U,b,0,0\n                                        ,n,35409387800,182.448120117188,U,b,0,0,n,36948926400,185.314956665039,U,b,0,0,n,38488465000\n                                        ,187.09130859375,U,b,0,0,n,40028003600,187.048217773438,U,b,0,0,n,41567542200,186.995986938477\n                                        ,U,b,0,0,n,43107080800,187.292724609375,U,b,0,0,n,44646619400,187.249710083008,U,b\n                                        ,0,0,n,46186158000,187.398681640625,U,b,0,0,n,47725696599,186.483459472656,U,b,0,0\n                                        ,n,49265235200,185.469512939453,U,b,0,0,n,50804773799,184.599639892578,U,b,0,0,n,52344312400\n                                        ,184.348175048828,U,b,0,0,n,53883850999,184.17919921875,U,b,0,0,n,55423389600,183.276473999023\n                                        ,U,b,0,0,n,56962928200,181.455642700195,U,b,0,0,n,58502466800,179.733093261719,U,s\n                                        ,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.917054355144501\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,21.0498638153076,U,s,0,0,n,1539538600,20.9923229217529,U,b,0,0,n,3079077200,20.0640850067139\n                                        ,U,b,0,0,n,4618615800,14.9082317352295,U,b,0,0,n,6158154400,6.61269998550415,U,b,0\n                                        ,0,n,7697693000,-0.474900990724564,U,b,0,0,n,9237231600,-6.31338691711426,U,b,0,0\n                                        ,n,10776770200,-11.0324878692627,U,b,0,0,n,12316308800,-15.7814054489136,U,b,0,0,n\n                                        ,13855847400,-19.5785846710205,U,b,0,0,n,15395386000,-23.0278339385986,U,b,0,0,n,16934924599\n                                        ,-25.4901599884033,U,b,0,0,n,18474463200,-27.0115375518799,U,b,0,0,n,20014001800,-27.1809406280518\n                                        ,U,b,0,0,n,21553540400,-27.8667469024658,U,b,0,0,n,23093079000,-29.4008769989014,U\n                                        ,b,0,0,n,24632617600,-28.6771717071533,U,b,0,0,n,26172156200,-31.2101612091064,U,b\n                                        ,0,0,n,27711694800,-34.6378364562988,U,b,0,0,n,29251233400,-35.1856231689453,U,b,0\n                                        ,0,n,30790772000,-34.0636138916016,U,b,0,0,n,32330310599,-33.1878089904785,U,b,0,0\n                                        ,n,33869849199,-32.1789131164551,U,b,0,0,n,35409387800,-30.6028327941895,U,b,0,0,n\n                                        ,36948926400,-29.7387866973877,U,b,0,0,n,38488465000,-28.0667896270752,U,b,0,0,n,40028003600\n                                        ,-24.5129261016846,U,b,0,0,n,41567542200,-21.3655872344971,U,b,0,0,n,43107080800,-17.8813343048096\n                                        ,U,b,0,0,n,44646619400,-14.2252674102783,U,b,0,0,n,46186158000,-11.2198505401611,U\n                                        ,b,0,0,n,47725696599,-8.8955249786377,U,b,0,0,n,49265235200,-6.28085517883301,U,b\n                                        ,0,0,n,50804773799,-2.79683113098145,U,b,0,0,n,52344312400,1.60481095314026,U,b,0\n                                        ,0,n,53883850999,6.27302360534668,U,b,0,0,n,55423389600,10.420973777771,U,b,0,0,n\n                                        ,56962928200,15.4698629379272,U,b,0,0,n,58502466800,21.0474834442139,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Knee\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 18.257194519043\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -1.20693221106194e-006\n                        KeyVer: 4005\n                        KeyCount: 22\n                        Key: 0,-1.20693243843562e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600\n                                        ,-1.20693198368826e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,-1.20693175631459e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,4618615800,-1.20693198368826e-006,U\n                                        ,s,0,0,a,0.329832986317342,0.329832986317342,7697693000,-1.20693266580929e-006,U,s\n                                        ,0,0,a,0.329832986317342,0.989898998959688,9237231600,-1.2069330068698e-006,U,s,0\n                                        ,0,a,0.989898998959688,0.329832986317342,13855847400,-1.20693289318297e-006,U,s,0\n                                        ,0,a,0.329832986317342,0.329832986317342,15395386000,-1.20693277949613e-006,U,s,0\n                                        ,0,a,0.32943294630968,0.988698878936702,16927226907,-1.20693221106194e-006,U,s,0,0\n                                        ,a,0.989999008961604,0.330133016323089,20014001800,-1.20693255212245e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,21553540400,-1.20693312055664e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,23093079000,-1.20693346161715e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.989898998959688,24632617600,-1.20693289318297e-006,U,s,0,0\n                                        ,a,0.989898998959688,0.329832986317342,26172156200,-1.20693255212245e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,32330310599,-1.20693277949613e-006,U,s,0,0\n                                        ,a,0.32943294630968,0.32943294630968,33862151507,-1.2069330068698e-006,U,s,0,0,a,0.33033303632692\n                                        ,0.33033303632692,35409387800,-1.20693152894091e-006,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,36948926400,-1.20693243843562e-006,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,38488465000,-1.20693232474878e-006,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,41567542200,-1.20693152894091e-006,U,b,0,0,a,0.329832986317342,0.329832986317342\n                                        ,43107080800,-1.20693152894091e-006,U,b,0,0,a,0.329832986317342,0.329832986317342\n                                        ,58502466800,-1.20693266580929e-006,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -1.28146643874061e-006\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-1.28146621136693e-006,U,s,0,0,n,1539538600,-1.28146643874061e-006,U,b,0,0,n,3079077200\n                                        ,-1.28146666611428e-006,U,b,0,0,n,4618615800,-1.28146677980112e-006,U,b,0,0,n,6158154400\n                                        ,-1.28146689348796e-006,U,b,0,0,n,7697693000,-1.28146712086163e-006,U,b,0,0,n,9237231600\n                                        ,-1.2814670071748e-006,U,b,0,0,n,10776770200,-1.28146723454847e-006,U,b,0,0,n,12316308800\n                                        ,-1.28146723454847e-006,U,b,0,0,n,13855847400,-1.28146734823531e-006,U,b,0,0,n,15395386000\n                                        ,-1.28146734823531e-006,U,b,0,0,n,16934924599,-1.28146734823531e-006,U,b,0,0,n,18474463200\n                                        ,-1.28146723454847e-006,U,b,0,0,n,20014001800,-1.28146734823531e-006,U,b,0,0,n,21553540400\n                                        ,-1.2814670071748e-006,U,b,0,0,n,23093079000,-1.28146689348796e-006,U,b,0,0,n,24632617600\n                                        ,-1.28146655242745e-006,U,b,0,0,n,26172156200,-1.28146632505377e-006,U,b,0,0,n,27711694800\n                                        ,-1.2814660976801e-006,U,b,0,0,n,29251233400,-1.28146587030642e-006,U,b,0,0,n,30790772000\n                                        ,-1.28146575661958e-006,U,b,0,0,n,32330310599,-1.28146552924591e-006,U,b,0,0,n,33869849199\n                                        ,-1.28146541555907e-006,U,b,0,0,n,35409387800,-1.28146564293274e-006,U,b,0,0,n,36948926400\n                                        ,-1.28146518818539e-006,U,b,0,0,n,38488465000,-1.28146530187223e-006,U,b,0,0,n,40028003600\n                                        ,-1.28146541555907e-006,U,b,0,0,n,41567542200,-1.28146564293274e-006,U,b,0,0,n,43107080800\n                                        ,-1.28146575661958e-006,U,b,0,0,n,44646619400,-1.28146598399326e-006,U,b,0,0,n,46186158000\n                                        ,-1.28146632505377e-006,U,b,0,0,n,47725696599,-1.28146632505377e-006,U,b,0,0,n,49265235200\n                                        ,-1.28146632505377e-006,U,b,0,0,n,50804773799,-1.28146643874061e-006,U,b,0,0,n,52344312400\n                                        ,-1.28146643874061e-006,U,b,0,0,n,53883850999,-1.28146655242745e-006,U,b,0,0,n,55423389600\n                                        ,-1.28146655242745e-006,U,b,0,0,n,56962928200,-1.28146655242745e-006,U,b,0,0,n,58502466800\n                                        ,-1.28146643874061e-006,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: -1.3035603761673\n                        KeyVer: 4005\n                        KeyCount: 46\n                        Key: 0,-3.83886694908142,U,s,-65.4377517700195,-32.7567138671875,a,0.329832986317342,0.329832986317342\n                                        ,1539538600,-5.47544145584106,U,s,-32.7567138671875,-10.673171043396,a,0.329832986317342\n                                        ,0.329832986317342,3079077200,-6.02264785766602,U,s,-10.673171043396,-3.56411671638489\n                                        ,a,0.329832986317342,0.329832986317342,3848846500,-6.15267562866211,U,s,-3.56411671638489\n                                        ,12.7318000793457,a,0.329832986317342,0.329932996319258,4618615800,-6.14145183563232\n                                        ,U,s,12.7318000793457,30.8554954528809,a,0.329932996319258,0.329832986317342,5388385100\n                                        ,-5.72828197479248,U,s,30.8554954528809,41.5662994384766,a,0.329832986317342,0.329832986317342\n                                        ,6158154400,-5.1129355430603,U,s,41.5662994384766,97.7905349731445,a,0.329832986317342\n                                        ,0.329832986317342,7697693000,-3.41769289970398,U,s,97.7905349731445,67.737548828125\n                                        ,a,0.329832986317342,0.329932996319258,9237231600,1.4064337015152,U,s,67.737548828125\n                                        ,-34.1675758361816,a,0.329932996319258,0.989999008961604,10776770200,1.09814345836639\n                                        ,U,s,-34.1675758361816,-75.906608581543,a,0.989999008961604,0.329832986317342,12316308800\n                                        ,-0.871404409408569,U,s,-75.906608581543,-86.5799331665039,a,0.329832986317342,0.989999008961604\n                                        ,13855847400,-3.96229696273804,U,s,-86.5799331665039,-45.685417175293,a,0.989999008961604\n                                        ,0.329832986317342,15395386000,-6.64339971542358,U,s,-45.685417175293,-12.9293050765991\n                                        ,a,0.32943294630968,0.32943294630968,16927226907,-7.01290655136108,U,s,-12.9293050765991\n                                        ,-13.0051908493042,a,0.989999008961604,0.989999008961604,16934924599,-7.01560831069946\n                                        ,U,s,-13.0051908493042,-12.5258827209473,a,0.333233326382469,0.329732976315427,17704693900\n                                        ,-7.24634265899658,U,s,-12.5258827209473,-14.0146265029907,a,0.329932996319258,0.329832986317342\n                                        ,18474463200,-7.43358707427979,U,s,-14.0146265029907,-13.9197549819946,a,0.329832986317342\n                                        ,0.329832986317342,19244232500,-7.71349668502808,U,s,-13.9197549819946,-30.7581348419189\n                                        ,a,0.329832986317342,0.329832986317342,20014001800,-7.89757871627808,U,s,-30.7581348419189\n                                        ,-47.3696899414063,a,0.329832986317342,0.329832986317342,20783771100,-8.73876762390137\n                                        ,U,s,-47.3696899414063,-42.1735229492188,a,0.329832986317342,0.989898998959688,21553540400\n                                        ,-9.4765682220459,U,s,-42.1735229492188,3.36946868896484,a,0.989898998959688,0.329932996319258\n                                        ,23093079000,-10.7427177429199,U,s,3.36946868896484,54.3450241088867,a,0.329932996319258\n                                        ,0.329832986317342,24632617600,-9.25193691253662,U,s,54.3450241088867,51.5244369506836\n                                        ,a,0.329832986317342,0.329832986317342,26172156200,-7.11971664428711,U,s,51.5244369506836\n                                        ,1.43827128410339,a,0.329832986317342,0.329932996319258,27711694800,-5.81697463989258\n                                        ,U,s,1.43827128410339,-43.6094627380371,a,0.329932996319258,0.329932996319258,29251233400\n                                        ,-7.02383184432983,U,s,-43.6094627380371,23.64377784729,a,0.329932996319258,0.989898998959688\n                                        ,30790772000,-8.72427272796631,U,s,23.64377784729,79.5574951171875,a,0.989898998959688\n                                        ,0.329932996319258,32330310599,-5.44757986068726,U,s,79.5574951171875,65.8555603027344\n                                        ,a,0.32943294630968,0.32943294630968,33862151507,-3.42922854423523,U,s,65.8555603027344\n                                        ,66.0146560668945,a,0.427942798196455,0.427042708179215,33869849199,-3.41549158096313\n                                        ,U,s,66.0146560668945,67.9337921142578,a,0.333333336384385,0.329832986317342,35409387800\n                                        ,-1.05307996273041,U,s,67.9337921142578,59.9620399475098,a,0.329932996319258,0.329832986317342\n                                        ,36948926400,1.11505162715912,U,s,59.9620399475098,22.8400268554688,a,0.329832986317342\n                                        ,0.329832986317342,38488465000,2.94438982009888,U,s,22.8400268554688,-8.95402336120605\n                                        ,a,0.329832986317342,0.329832986317342,40028003600,2.63772010803223,U,s,-8.95402336120605\n                                        ,-9.99001502990723,a,0.329832986317342,0.329832986317342,41567542200,2.34745502471924\n                                        ,U,s,-9.99001502990723,-15.5926685333252,a,0.329832986317342,0.989898998959688,43107080800\n                                        ,1.97171902656555,U,s,-15.5926685333252,-15.0171041488647,a,0.989898998959688,0.329832986317342\n                                        ,44646619400,1.30794370174408,U,s,-15.0171041488647,-13.935583114624,a,0.329832986317342\n                                        ,0.329832986317342,46186158000,0.970578730106354,U,s,-13.935583114624,-19.2272720336914\n                                        ,a,0.329832986317342,0.329832986317342,47725696599,0.378904849290848,U,s,-19.2272720336914\n                                        ,-18.6979751586914,a,0.329832986317342,0.329832986317342,49265235200,-0.311239272356033\n                                        ,U,s,-18.6979751586914,-17.1783008575439,a,0.329832986317342,0.329832986317342,50804773799\n                                        ,-0.86762672662735,U,s,-17.1783008575439,-18.7269515991211,a,0.329832986317342,0.329932996319258\n                                        ,52344312400,-1.45645952224731,U,s,-18.7269515991211,-24.0576171875,a,0.329932996319258\n                                        ,0.329832986317342,53883850999,-2.1160900592804,U,s,-24.0576171875,-24.175199508667\n                                        ,a,0.329832986317342,0.329832986317342,55423389600,-3.06030058860779,U,s,-24.175199508667\n                                        ,-11.6847877502441,a,0.329832986317342,0.329932996319258,56962928200,-3.72777009010315\n                                        ,U,s,-11.6847877502441,4.99379825592041,a,0.329932996319258,0.329832986317342,58502466800\n                                        ,-3.83928656578064,U,s,4.99379825592041,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -4.911376953125\n                        KeyVer: 4005\n                        KeyCount: 46\n                        Key: 0,-0.228155642747879,U,s,0,0,n,1539538600,-0.811639308929443,U,b,0,0,n,3079077200\n                                        ,-1.64818203449249,U,b,0,-114.167961120605,n,3848846500,-2.9167149066925,U,b,-114.167961120605\n                                        ,0,n,4618615800,-4.18524789810181,U,b,0,-160.033386230469,n,5388385100,-5.96339702606201\n                                        ,U,b,-160.033386230469,0,n,6158154400,-7.74154567718506,U,b,0,0,n,7697693000,-10.2137126922607\n                                        ,U,b,0,0,n,9237231600,-12.423620223999,U,b,0,0,n,10776770200,-12.2334461212158,U,b\n                                        ,0,0,n,12316308800,-10.8227052688599,U,b,0,0,n,13855847400,-9.4316291809082,U,b,0\n                                        ,0,n,15395386000,-7.97578763961792,U,b,0,0.914577424526215,n,16927226907,-7.15781545639038\n                                        ,U,b,0.914577424526215,0,n,16934924599,-7.15772008895874,U,b,0,53.3083877563477,n\n                                        ,17704693900,-6.56540489196777,U,b,53.3083877563477,0,n,18474463200,-5.97308921813965\n                                        ,U,b,0,85.7711639404297,n,19244232500,-5.02007627487183,U,b,85.7711639404297,0,n,20014001800\n                                        ,-4.067063331604,U,b,0,110.031806945801,n,20783771100,-2.84448766708374,U,b,110.031806945801\n                                        ,0,n,21553540400,-1.62191212177277,U,b,0,0,n,23093079000,0.0515954382717609,U,b,0\n                                        ,0,n,24632617600,0.90336149930954,U,b,0,0,n,26172156200,-0.21460597217083,U,b,0,0\n                                        ,n,27711694800,-2.61649298667908,U,b,0,0,n,29251233400,-3.17312788963318,U,b,0,0,n\n                                        ,30790772000,-3.04500341415405,U,b,0,0,n,32330310599,-4.89813137054443,U,b,0,-1.68756556510925\n                                        ,n,33862151507,-6.40744256973267,U,b,-1.68756556510925,0,n,33869849199,-6.40761852264404\n                                        ,U,b,0,0,n,35409387800,-7.69687986373901,U,b,0,0,n,36948926400,-8.72749900817871,U\n                                        ,b,0,0,n,38488465000,-9.32710456848145,U,b,0,0,n,40028003600,-9.26736164093018,U,b\n                                        ,0,0,n,41567542200,-8.86744499206543,U,b,0,0,n,43107080800,-8.46683788299561,U,b,0\n                                        ,0,n,44646619400,-7.87265777587891,U,b,0,0,n,46186158000,-7.40904760360718,U,b,0,0\n                                        ,n,47725696599,-6.88351774215698,U,b,0,0,n,49265235200,-6.23764181137085,U,b,0,0,n\n                                        ,50804773799,-5.53875160217285,U,b,0,0,n,52344312400,-4.79519653320313,U,b,0,0,n,53883850999\n                                        ,-3.9627366065979,U,b,0,0,n,55423389600,-2.96677875518799,U,b,0,0,n,56962928200,-1.73351609706879\n                                        ,U,b,0,0,n,58502466800,-0.228413239121437,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -31.2710037231445\n                        KeyVer: 4005\n                        KeyCount: 46\n                        Key: 0,-11.1023902893066,U,s,-136.703628540039,-179.398712158203,a,0.329932996319258,0.329832986317342\n                                        ,1539538600,-16.3707637786865,U,s,-179.398712158203,-321.511352539063,a,0.329832986317342\n                                        ,0.329832986317342,3079077200,-23.0623073577881,U,s,-321.511352539063,-382.070037841797\n                                        ,a,0.329832986317342,0.329832986317342,3848846500,-29.4272041320801,U,s,-382.070037841797\n                                        ,-383.119934082031,a,0.329832986317342,0.329832986317342,4618615800,-35.7979736328125\n                                        ,U,s,-383.119934082031,-385.101470947266,a,0.329832986317342,0.329832986317342,5388385100\n                                        ,-42.197868347168,U,s,-385.101470947266,-319.499084472656,a,0.329832986317342,0.329832986317342\n                                        ,6158154400,-48.6346893310547,U,s,-319.499084472656,-193.644668579102,a,0.329832986317342\n                                        ,0.329932996319258,7697693000,-54.8373107910156,U,s,-193.644668579102,-174.349456787109\n                                        ,a,0.329932996319258,0.329832986317342,9237231600,-61.5443344116211,U,s,-174.349456787109\n                                        ,-94.1779251098633,a,0.329832986317342,0.989999008961604,10776770200,-66.4606094360352\n                                        ,U,s,-94.1779251098633,1.92078578472137,a,0.989999008961604,0.329832986317342,12316308800\n                                        ,-67.8228607177734,U,s,1.92078578472137,78.1268463134766,a,0.329832986317342,0.329832986317342\n                                        ,13855847400,-66.3325576782227,U,s,78.1268463134766,154.451126098633,a,0.329832986317342\n                                        ,0.329932996319258,15395386000,-62.6144065856934,U,s,154.451126098633,239.89631652832\n                                        ,a,0.32943294630968,0.32943294630968,16927226907,-56.0858154296875,U,s,239.89631652832\n                                        ,240.929107666016,a,0.41224122789572,0.416641667980002,16934924599,-56.0357246398926\n                                        ,U,s,240.929107666016,263.124572753906,a,0.333333336384385,0.329732976315427,17704693900\n                                        ,-51.6695671081543,U,s,263.124572753906,303.863250732422,a,0.329832986317342,0.329832986317342\n                                        ,18474463200,-47.2607688903809,U,s,303.863250732422,342.831085205078,a,0.329832986317342\n                                        ,0.329832986317342,19244232500,-41.5407943725586,U,s,342.831085205078,315.467651367188\n                                        ,a,0.329832986317342,0.989898998959688,20014001800,-35.833065032959,U,s,315.467651367188\n                                        ,287.81201171875,a,0.989898998959688,0.329932996319258,20783771100,-31.0252056121826\n                                        ,U,s,287.81201171875,241.030059814453,a,0.329932996319258,0.989999008961604,21553540400\n                                        ,-26.239330291748,U,s,241.030059814453,135.619232177734,a,0.989999008961604,0.329832986317342\n                                        ,23093079000,-21.2798290252686,U,s,135.619232177734,19.1176490783691,a,0.329832986317342\n                                        ,0.329932996319258,24632617600,-17.1980495452881,U,s,19.1176490783691,-150.848510742188\n                                        ,a,0.329932996319258,0.329932996319258,26172156200,-20.0053195953369,U,s,-150.848510742188\n                                        ,-149.752151489258,a,0.329932996319258,0.329932996319258,27711694800,-27.25461769104\n                                        ,U,s,-149.752151489258,-41.52490234375,a,0.329932996319258,0.329832986317342,29251233400\n                                        ,-29.9887962341309,U,s,-41.52490234375,-49.0444793701172,a,0.329832986317342,0.989898998959688\n                                        ,30790772000,-30.0229434967041,U,s,-49.0444793701172,-142.539901733398,a,0.989898998959688\n                                        ,0.329832986317342,32330310599,-33.2584266662598,U,s,-142.539901733398,-159.207260131836\n                                        ,a,0.32943294630968,0.32943294630968,33862151507,-39.4770202636719,U,s,-159.207260131836\n                                        ,-158.648056030273,a,0.41224122789572,0.416641667980002,33869849199,-39.5101280212402\n                                        ,U,s,-158.648056030273,-117.724967956543,a,0.333233326382469,0.329832986317342,35409387800\n                                        ,-43.8483276367188,U,s,-117.724967956543,-73.9477920532227,a,0.329932996319258,0.329832986317342\n                                        ,36948926400,-47.355110168457,U,s,-73.9477920532227,-12.7894954681396,a,0.329832986317342\n                                        ,0.329832986317342,38488465000,-48.7781791687012,U,s,-12.7894954681396,26.1094913482666\n                                        ,a,0.329832986317342,0.989898998959688,40028003600,-48.2077407836914,U,s,26.1094913482666\n                                        ,39.9343223571777,a,0.989898998959688,0.329832986317342,41567542200,-47.0375480651855\n                                        ,U,s,39.9343223571777,55.9686050415039,a,0.329832986317342,0.329932996319258,43107080800\n                                        ,-45.5454521179199,U,s,55.9686050415039,61.9067649841309,a,0.329932996319258,0.329832986317342\n                                        ,44646619400,-43.3063049316406,U,s,61.9067649841309,61.1157836914063,a,0.329832986317342\n                                        ,0.329932996319258,46186158000,-41.4183349609375,U,s,61.1157836914063,74.0412902832031\n                                        ,a,0.329932996319258,0.329832986317342,47725696599,-39.2319221496582,U,s,74.0412902832031\n                                        ,85.5019149780273,a,0.329832986317342,0.329832986317342,49265235200,-36.482250213623\n                                        ,U,s,85.5019149780273,90.0004653930664,a,0.329832986317342,0.329832986317342,50804773799\n                                        ,-33.5317916870117,U,s,90.0004653930664,96.6699905395508,a,0.329832986317342,0.329832986317342\n                                        ,52344312400,-30.4822196960449,U,s,96.6699905395508,109.934501647949,a,0.329832986317342\n                                        ,0.989999008961604,53883850999,-27.0871276855469,U,s,109.934501647949,136.903701782227\n                                        ,a,0.989898998959688,0.329832986317342,55423389600,-23.1532516479492,U,s,136.903701782227\n                                        ,180.694869995117,a,0.329832986317342,0.329832986317342,56962928200,-17.9602127075195\n                                        ,U,s,180.694869995117,230.502288818359,a,0.329832986317342,0.329832986317342,58502466800\n                                        ,-11.1069278717041,U,s,230.50227355957,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Ankle\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 15.4280042648315\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.89655921190024e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,1.89654741689083e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600,1.89656731208743e-007\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,1.8965687331729e-007,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,4618615800,1.8965587855746e-007,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,6158154400,1.89655708027203e-007,U,s,0,0,a\n                                        ,0.329832986317342,0.329832986317342,7697693000,1.89655935400879e-007,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,9237231600,1.89656333304811e-007,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,10776770200,1.89656816473871e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,12316308800\n                                        ,1.89657413329769e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,13855847400,1.89658805993531e-007\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,15395386000,1.89657328064641e-007,U\n                                        ,s,0,0,a,0.32943294630968,0.32943294630968,16927226907,1.8965687331729e-007,U,s,0\n                                        ,0,a,0.33033303632692,0.33033303632692,18474463200,1.89657185956094e-007,U,s,0,0,a\n                                        ,0.329832986317342,0.329832986317342,20014001800,1.89654599580535e-007,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,21553540400,1.8965337744703e-007,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,23093079000,1.89652041626687e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,24632617600\n                                        ,1.89653405868739e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,26172156200,1.89655054327886e-007\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,27711694800,1.8965286585626e-007,U\n                                        ,s,0,0,a,0.329832986317342,0.329832986317342,29251233400,1.89655025906177e-007,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,30790772000,1.89654485893698e-007,U,s,0\n                                        ,0,a,0.329832986317342,0.329832986317342,32330310599,1.89655736448913e-007,U,s,0,0\n                                        ,a,0.32943294630968,0.32943294630968,33862151507,1.89653462712158e-007,U,s,0,0,a,0.33033303632692\n                                        ,0.989999008961604,35409387800,1.89658663884984e-007,U,s,0,0,a,0.989898998959688,0.329832986317342\n                                        ,36948926400,1.89655736448913e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,38488465000\n                                        ,1.8965587855746e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,40028003600,1.89655935400879e-007\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,41567542200,1.8965639014823e-007,U\n                                        ,s,0,0,a,0.329832986317342,0.329832986317342,43107080800,1.8965585013575e-007,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,44646619400,1.8965536696669e-007,U,s,0\n                                        ,0,a,0.329832986317342,0.329832986317342,46186158000,1.8965587855746e-007,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,47725696599,1.89654826954211e-007,U,s,0,0,a\n                                        ,0.329832986317342,0.989898998959688,49265235200,1.89654713267373e-007,U,s,0,0,a,0.989898998959688\n                                        ,0.989898998959688,50804773799,1.89655736448913e-007,U,s,0,0,a,0.989898998959688,0.329832986317342\n                                        ,52344312400,1.89656105931135e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,53883850999\n                                        ,1.89655537496947e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,55423389600,1.89655111171305e-007\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,56962928200,1.89655281701562e-007,U\n                                        ,s,0,0,a,0.329832986317342,0.329832986317342,58502466800,1.89655480653528e-007,U,s\n                                        ,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 5.16880504619621e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,5.1687857194338e-007,U,s,0,0,n,1539538600,5.16879936185433e-007,U,b,0,0,n,3079077200\n                                        ,5.16879481438082e-007,U,b,0,0,n,4618615800,5.16878856160474e-007,U,b,0,0,n,6158154400\n                                        ,5.16878969847312e-007,U,b,0,0,n,7697693000,5.1688107305381e-007,U,b,0,0,n,9237231600\n                                        ,5.16877321388165e-007,U,b,0,0,n,10776770200,5.16877321388165e-007,U,b,0,0,n,12316308800\n                                        ,5.16877435075003e-007,U,b,0,0,n,13855847400,5.16879254064406e-007,U,b,0,0,n,15395386000\n                                        ,5.1688004987227e-007,U,b,0,0,n,16934924599,5.16880959366972e-007,U,b,0,0,n,18474463200\n                                        ,5.16878401413123e-007,U,b,0,0,n,20014001800,5.16877889822354e-007,U,b,0,0,n,21553540400\n                                        ,5.1687857194338e-007,U,b,0,0,n,23093079000,5.16879140377569e-007,U,b,0,0,n,24632617600\n                                        ,5.16880618306459e-007,U,b,0,0,n,26172156200,5.16878230882867e-007,U,b,0,0,n,27711694800\n                                        ,5.16878742473637e-007,U,b,0,0,n,29251233400,5.16876411893463e-007,U,b,0,0,n,30790772000\n                                        ,5.1687857194338e-007,U,b,0,0,n,32330310599,5.16879936185433e-007,U,b,0,0,n,33869849199\n                                        ,5.16878458256542e-007,U,b,0,0,n,35409387800,5.16878515099961e-007,U,b,0,0,n,36948926400\n                                        ,5.16880163559108e-007,U,b,0,0,n,38488465000,5.16880163559108e-007,U,b,0,0,n,40028003600\n                                        ,5.16878685630218e-007,U,b,0,0,n,41567542200,5.1687754876184e-007,U,b,0,0,n,43107080800\n                                        ,5.16878799317055e-007,U,b,0,0,n,44646619400,5.16879140377569e-007,U,b,0,0,n,46186158000\n                                        ,5.16878799317055e-007,U,b,0,0,n,47725696599,5.1687908353415e-007,U,b,0,0,n,49265235200\n                                        ,5.16878287726286e-007,U,b,0,0,n,50804773799,5.16879651968338e-007,U,b,0,0,n,52344312400\n                                        ,5.16880675149878e-007,U,b,0,0,n,53883850999,5.1687857194338e-007,U,b,0,0,n,55423389600\n                                        ,5.16880334089365e-007,U,b,0,0,n,56962928200,5.16876866640814e-007,U,b,0,0,n,58502466800\n                                        ,5.16879993028851e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 4.14072751998901\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,4.35679054260254,U,s,0,0,n,1539538600,4.44680213928223,U,b,0,0,n,3079077200,4.17091608047485\n                                        ,U,b,0,0,n,4618615800,4.04248237609863,U,b,0,0,n,6158154400,4.12370872497559,U,b,0\n                                        ,0,n,7697693000,4.07194995880127,U,b,0,0,n,9237231600,3.9996132850647,U,b,0,0,n,10776770200\n                                        ,4.48966693878174,U,b,0,0,n,12316308800,4.31029891967773,U,b,0,0,n,13855847400,4.23501920700073\n                                        ,U,b,0,0,n,15395386000,4.17848873138428,U,b,0,0,n,16934924599,4.22898149490356,U,b\n                                        ,0,0,n,18474463200,4.24592113494873,U,b,0,0,n,20014001800,4.25822877883911,U,b,0,0\n                                        ,n,21553540400,4.4825644493103,U,b,0,0,n,23093079000,4.84366750717163,U,b,0,0,n,24632617600\n                                        ,4.80804347991943,U,b,0,0,n,26172156200,4.36219692230225,U,b,0,0,n,27711694800,4.15001630783081\n                                        ,U,b,0,0,n,29251233400,4.13865327835083,U,b,0,0,n,30790772000,4.24137020111084,U,b\n                                        ,0,0,n,32330310599,4.42545557022095,U,b,0,0,n,33869849199,4.25567150115967,U,b,0,0\n                                        ,n,35409387800,4.19248485565186,U,b,0,0,n,36948926400,4.22397708892822,U,b,0,0,n,38488465000\n                                        ,4.319167137146,U,b,0,0,n,40028003600,4.32930755615234,U,b,0,0,n,41567542200,4.32822227478027\n                                        ,U,b,0,0,n,43107080800,4.32375192642212,U,b,0,0,n,44646619400,4.27604341506958,U,b\n                                        ,0,0,n,46186158000,4.25706911087036,U,b,0,0,n,47725696599,4.21590518951416,U,b,0,0\n                                        ,n,49265235200,4.17489862442017,U,b,0,0,n,50804773799,4.14333009719849,U,b,0,0,n,52344312400\n                                        ,4.14024543762207,U,b,0,0,n,53883850999,4.16894388198853,U,b,0,0,n,55423389600,4.19347047805786\n                                        ,U,b,0,0,n,56962928200,4.29721927642822,U,b,0,0,n,58502466800,4.35731649398804,U,s\n                                        ,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.20476734638214\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,2.99853110313416,U,s,0,0,n,1539538600,3.20828461647034,U,b,0,0,n,3079077200,3.32988381385803\n                                        ,U,b,0,0,n,4618615800,2.93672728538513,U,b,0,0,n,6158154400,2.18759441375732,U,b,0\n                                        ,0,n,7697693000,2.19795346260071,U,b,0,0,n,9237231600,2.30332565307617,U,b,0,0,n,10776770200\n                                        ,-1.63251161575317,U,b,0,0,n,12316308800,0.016129607334733,U,b,0,0,n,13855847400,0.893061399459839\n                                        ,U,b,0,0,n,15395386000,2.35970544815063,U,b,0,0,n,16934924599,1.57121956348419,U,b\n                                        ,0,0,n,18474463200,2.28286409378052,U,b,0,0,n,20014001800,1.54342901706696,U,b,0,0\n                                        ,n,21553540400,3.41273379325867,U,b,0,0,n,23093079000,5.18153429031372,U,b,0,0,n,24632617600\n                                        ,6.26558351516724,U,b,0,0,n,26172156200,5.24189281463623,U,b,0,0,n,27711694800,3.38173460960388\n                                        ,U,b,0,0,n,29251233400,0.934875428676605,U,b,0,0,n,30790772000,-0.950364351272583\n                                        ,U,b,0,0,n,32330310599,-1.64491772651672,U,b,0,0,n,33869849199,-1.14289402961731,U\n                                        ,b,0,0,n,35409387800,-0.148089364171028,U,b,0,0,n,36948926400,0.957562983036041,U\n                                        ,b,0,0,n,38488465000,1.99892556667328,U,b,0,0,n,40028003600,1.98226845264435,U,b,0\n                                        ,0,n,41567542200,1.89037907123566,U,b,0,0,n,43107080800,1.80209422111511,U,b,0,0,n\n                                        ,44646619400,1.49238002300262,U,b,0,0,n,46186158000,1.38304305076599,U,b,0,0,n,47725696599\n                                        ,1.17027914524078,U,b,0,0,n,49265235200,1.01487386226654,U,b,0,0,n,50804773799,1.03787541389465\n                                        ,U,b,0,0,n,52344312400,1.2356733083725,U,b,0,0,n,53883850999,1.57354724407196,U,b\n                                        ,0,0,n,55423389600,1.90853095054626,U,b,0,0,n,56962928200,2.5185649394989,U,b,0,0\n                                        ,n,58502466800,3.00181150436401,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 25.1047039031982\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,24.1624279022217,U,s,0,0,n,1539538600,23.6075916290283,U,b,0,0,n,3079077200,21.5899677276611\n                                        ,U,b,0,0,n,4618615800,15.8137855529785,U,b,0,0,n,6158154400,2.50735831260681,U,b,0\n                                        ,0,n,7697693000,-14.5010004043579,U,b,0,0,n,9237231600,-12.909008026123,U,b,0,0,n\n                                        ,10776770200,-7.25075197219849,U,b,0,0,n,12316308800,-5.14674043655396,U,b,0,0,n,13855847400\n                                        ,-3.33845448493958,U,b,0,0,n,15395386000,-0.0320573784410954,U,b,0,0,n,16934924599\n                                        ,2.53520441055298,U,b,0,0,n,18474463200,4.18526077270508,U,b,0,0,n,20014001800,5.50827693939209\n                                        ,U,b,0,0,n,21553540400,6.09051847457886,U,b,0,0,n,23093079000,11.2608890533447,U,b\n                                        ,0,0,n,24632617600,18.9397392272949,U,b,0,0,n,26172156200,20.4814205169678,U,b,0,0\n                                        ,n,27711694800,16.4507923126221,U,b,0,0,n,29251233400,5.76726961135864,U,b,0,0,n,30790772000\n                                        ,-3.40555834770203,U,b,0,0,n,32330310599,-5.79667568206787,U,b,0,0,n,33869849199,0.831438004970551\n                                        ,U,b,0,0,n,35409387800,6.01630163192749,U,b,0,0,n,36948926400,10.1481599807739,U,b\n                                        ,0,0,n,38488465000,13.3435354232788,U,b,0,0,n,40028003600,15.8721389770508,U,b,0,0\n                                        ,n,41567542200,17.9210548400879,U,b,0,0,n,43107080800,19.7113342285156,U,b,0,0,n,44646619400\n                                        ,20.9869022369385,U,b,0,0,n,46186158000,22.2164764404297,U,b,0,0,n,47725696599,22.8926696777344\n                                        ,U,b,0,0,n,49265235200,23.3938636779785,U,b,0,0,n,50804773799,24.2555408477783,U,b\n                                        ,0,0,n,52344312400,25.2619552612305,U,b,0,0,n,53883850999,25.9738693237305,U,b,0,0\n                                        ,n,55423389600,26.2068958282471,U,b,0,0,n,56962928200,25.6610794067383,U,b,0,0,n,58502466800\n                                        ,24.1615524291992,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 0.999999940395355\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 0.999999940395355\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 0.999999940395355\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        Model: \"Model::R_Ball\" {\n            Version: 1.1\n            Channel: \"Transform\" {\n                Channel: \"T\" {\n                    Channel: \"X\" {\n                        Default: 5.25022077560425\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,5.25022077560425,U,s,0,0,n,1539538600,5.25022125244141,U,b,0,0,n,3079077200,5.25022077560425\n                                        ,U,b,0,0,n,4618615800,5.25022077560425,U,b,0,0,n,6158154400,5.25022029876709,U,b,0\n                                        ,0,n,7697693000,5.25022077560425,U,b,0,0,n,9237231600,5.25022077560425,U,b,0,0,n,10776770200\n                                        ,5.25022029876709,U,b,0,0,n,12316308800,5.25022077560425,U,b,0,0,n,13855847400,5.25022125244141\n                                        ,U,b,0,0,n,15395386000,5.25022077560425,U,b,0,0,n,16934924599,5.25022077560425,U,b\n                                        ,0,0,n,18474463200,5.25022077560425,U,b,0,0,n,20014001800,5.25022077560425,U,b,0,0\n                                        ,n,21553540400,5.25022077560425,U,b,0,0,n,23093079000,5.25022077560425,U,b,0,0,n,24632617600\n                                        ,5.25022125244141,U,b,0,0,n,26172156200,5.25022077560425,U,b,0,0,n,27711694800,5.25022077560425\n                                        ,U,b,0,0,n,29251233400,5.25022077560425,U,b,0,0,n,30790772000,5.25022077560425,U,b\n                                        ,0,0,n,32330310599,5.24553966522217,U,b,0,0,n,33869849199,5.25022077560425,U,b,0,0\n                                        ,n,35409387800,5.25022077560425,U,b,0,0,n,36948926400,5.25022029876709,U,b,0,0,n,38488465000\n                                        ,5.25022125244141,U,b,0,0,n,40028003600,5.25022077560425,U,b,0,0,n,41567542200,5.25022125244141\n                                        ,U,b,0,0,n,43107080800,5.25022077560425,U,b,0,0,n,44646619400,5.25022077560425,U,b\n                                        ,0,0,n,46186158000,5.25022077560425,U,b,0,0,n,47725696599,5.25022077560425,U,b,0,0\n                                        ,n,49265235200,5.25022077560425,U,b,0,0,n,50804773799,5.25022077560425,U,b,0,0,n,52344312400\n                                        ,5.25022077560425,U,b,0,0,n,53883850999,5.25025701522827,U,b,0,0,n,55423389600,5.25022077560425\n                                        ,U,b,0,0,n,56962928200,5.25022077560425,U,b,0,0,n,58502466800,5.25022077560425,U,s\n                                        ,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 6.27385330200195\n                        KeyVer: 4005\n                        KeyCount: 12\n                        Key: 0,6.27384948730469,U,s,0,0,a,0.989898998959688,0.329932996319258,29251233400,6.27384948730469\n                                        ,U,s,0,0.0586938820779324,a,0.329832986317342,0.329932996319258,30790772000,6.27384948730469\n                                        ,U,s,0.0586938820779324,-0.000738290196750313,a,0.329932996319258,0.329832986317342\n                                        ,32330310599,6.2777624130249,U,s,-0.000738290196750313,-0.0594321824610233,a,0.32943294630968\n                                        ,0.32943294630968,33862151507,6.27384948730469,U,s,-0.0594321824610233,0,a,0.33033303632692\n                                        ,0.33033303632692,35409387800,6.27384948730469,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,50804773799,6.27384948730469,U,s,0,-0.000479221373097971,a,0.329832986317342,0.989898998959688\n                                        ,52344312400,6.27384948730469,U,s,-0.000479221373097971,0,a,0.989898998959688,0.329832986317342\n                                        ,53883850999,6.27381753921509,U,s,0,0.000479221343994141,a,0.329832986317342,0.329832986317342\n                                        ,55423389600,6.27384948730469,U,s,0.000479221343994141,0,a,0.329832986317342,0.989898998959688\n                                        ,56962928200,6.27384948730469,U,s,0,0,a,0.989898998959688,0.329832986317342,58502466800\n                                        ,6.27384948730469,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: -4.15015392718487e-007\n                        KeyVer: 4005\n                        KeyCount: 39\n                        Key: 0,-4.15014994814555e-007,U,s,0,0,n,1539538600,-4.15016188526351e-007,U,b,0,0,n,3079077200\n                                        ,-4.1501525060994e-007,U,b,0,0,n,4618615800,-4.15015705357291e-007,U,b,0,0,n,6158154400\n                                        ,-4.15015023236265e-007,U,b,0,0,n,7697693000,-4.1501624536977e-007,U,b,0,0,n,9237231600\n                                        ,-4.15016302213189e-007,U,b,0,0,n,10776770200,-4.15014028476435e-007,U,b,0,0,n,12316308800\n                                        ,-4.15015591670453e-007,U,b,0,0,n,13855847400,-4.15015477983616e-007,U,b,0,0,n,15395386000\n                                        ,-4.15015108501393e-007,U,b,0,0,n,16934924599,-4.15016558008574e-007,U,b,0,0,n,18474463200\n                                        ,-4.15016046417804e-007,U,b,0,0,n,20014001800,-4.15015108501393e-007,U,b,0,0,n,21553540400\n                                        ,-4.15014909549427e-007,U,b,0,0,n,23093079000,-4.15016501165155e-007,U,b,0,0,n,24632617600\n                                        ,-4.15015676935582e-007,U,b,0,0,n,26172156200,-4.15014199006691e-007,U,b,0,0,n,27711694800\n                                        ,-4.15015449561906e-007,U,b,0,0,n,29251233400,-4.15015392718487e-007,U,b,0,0,n,30790772000\n                                        ,-4.15015591670453e-007,U,b,0,0,n,32330310599,-0.00437366124242544,U,b,0,0,n,33869849199\n                                        ,-4.15015477983616e-007,U,b,0,0,n,35409387800,-4.15016700117121e-007,U,b,0,0,n,36948926400\n                                        ,-4.15014625332333e-007,U,b,0,0,n,38488465000,-4.15014625332333e-007,U,b,0,0,n,40028003600\n                                        ,-4.15015222188231e-007,U,b,0,0,n,41567542200,-4.15015534827035e-007,U,b,0,0,n,43107080800\n                                        ,-4.15015392718487e-007,U,b,0,0,n,44646619400,-4.15014881127718e-007,U,b,0,0,n,46186158000\n                                        ,-4.15015108501393e-007,U,b,0,0,n,47725696599,-4.15015392718487e-007,U,b,0,0,n,49265235200\n                                        ,-4.15014113741563e-007,U,b,0,0,n,50804773799,-4.1501627379148e-007,U,b,0,0,n,52344312400\n                                        ,-4.15015222188231e-007,U,b,0,0,n,53883850999,0.00507054105401039,U,b,0,0,n,55423389600\n                                        ,-4.15015534827035e-007,U,b,0,0,n,56962928200,-4.1501476744088e-007,U,b,0,0,n,58502466800\n                                        ,-4.15016359056608e-007,U,s,0,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 1\n                }\n                Channel: \"R\" {\n                    Channel: \"X\" {\n                        Default: 1.04748585272318e-006\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,1.04740752249199e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600,1.0474093414814e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,1.0474111604708e-006,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,4618615800,1.04741309314704e-006,U,s,0\n                                        ,0,a,0.329832986317342,0.329832986317342,6158154400,1.04741502582328e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,7697693000,1.04741707218636e-006,U,s,0,0,a\n                                        ,0.329832986317342,0.329832986317342,9237231600,1.04741889117577e-006,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,10776770200,1.04742093753885e-006,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,12316308800,1.04742287021509e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,13855847400\n                                        ,1.04742480289133e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,15395386000,1.04742673556757e-006\n                                        ,U,s,0,0,a,0.32943294630968,0.32943294630968,16927226907,1.04742866824381e-006,U,b\n                                        ,0,0,a,0.989999008961604,0.989999008961604,16934924599,1.04742866824381e-006,U,b,0\n                                        ,0,a,0.333333336384385,0.329832986317342,18474463200,1.04743048723321e-006,U,s,0,0\n                                        ,a,0.329832986317342,0.329832986317342,20014001800,1.04743219253578e-006,U,s,0,0,a\n                                        ,0.329832986317342,0.329832986317342,21553540400,1.04743389783835e-006,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,23093079000,1.04743548945407e-006,U,s,0,0,a,0.329832986317342,0.329832986317342\n                                        ,24632617600,1.04743696738296e-006,U,s,0,0,a,0.329832986317342,0.989898998959688,26172156200\n                                        ,1.04743821793818e-006,U,s,0,0,a,0.989898998959688,0.329832986317342,27711694800,1.04743946849339e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.329832986317342,29251233400,1.04744049167493e-006,U\n                                        ,s,0,0.259752601385117,a,0.329832986317342,0.989999008961604,30790772000,1.04744083273545e-006\n                                        ,U,s,0.259752601385117,0,a,0.989999008961604,0.989898998959688,32330310599,0.0173178873956203\n                                        ,U,s,0,-0.263019979000092,a,0.988698878936702,0.988698878936702,33862151507,1.04738626305334e-006\n                                        ,U,s,-0.263019979000092,0,a,0.989999008961604,0.989999008961604,33869849199,-5.36707411811221e-005\n                                        ,U,s,0,0,a,0.333333336384385,0.329832986317342,35409387800,1.04743332940416e-006,U\n                                        ,s,0,0,a,0.329832986317342,0.329832986317342,36948926400,1.04745549833751e-006,U,s\n                                        ,0,0,a,0.329832986317342,0.989898998959688,38488465000,1.04747243767633e-006,U,s,0\n                                        ,0,a,0.989898998959688,0.989898998959688,40028003600,1.04748460216797e-006,U,s,0,0\n                                        ,a,0.989898998959688,0.329832986317342,41567542200,1.04749278762029e-006,U,s,0,0,a\n                                        ,0.329832986317342,0.329832986317342,43107080800,1.04749733509379e-006,U,s,0,0,a,0.329832986317342\n                                        ,0.989898998959688,44646619400,1.04749892670952e-006,U,s,0,0,a,0.989898998959688,0.989898998959688\n                                        ,46186158000,1.0474982445885e-006,U,s,0,0,a,0.989898998959688,0.989898998959688,47725696599\n                                        ,1.04749574347807e-006,U,s,0,0,a,0.989898998959688,0.329832986317342,49265235200,1.04749210549926e-006\n                                        ,U,s,0,0,a,0.329832986317342,0.989898998959688,50804773799,1.0474880127731e-006,U\n                                        ,s,0,0,a,0.989898998959688,0.329832986317342,52344312400,1.04748369267327e-006,U,s\n                                        ,0,0,a,0.329832986317342,0.329832986317342,53883850999,1.0474801683813e-006,U,s,0\n                                        ,0,a,0.329832986317342,0.989898998959688,55423389600,1.04747766727087e-006,U,s,0,0\n                                        ,a,0.989898998959688,0.329832986317342,56962928200,1.047476871463e-006,U,s,0,0,a,0.329832986317342\n                                        ,0.329832986317342,58502466800,1.04747857676557e-006,U,s,0,0,n\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: -3.46426012876044e-011\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,0,U,s,0,0,n,1539538600,-1.62844401591783e-012,U,b,0,0,n,3079077200,-2.44266607808685e-012\n                                        ,U,b,0,0,n,4618615800,-3.6639992255505e-012,U,b,0,0,n,6158154400,-5.29244313304811e-012\n                                        ,U,b,0,0,n,7697693000,-6.51377606367132e-012,U,b,0,0,n,9237231600,-8.1422204048498e-012\n                                        ,U,b,0,0,n,10776770200,-9.77066431234741e-012,U,b,0,0,n,12316308800,-1.1399108219845e-011\n                                        ,U,b,0,0,n,13855847400,-1.26204411504682e-011,U,b,0,0,n,15395386000,-1.42488850579658e-011\n                                        ,U,b,0,0,n,16927226907,-1.50630116019235e-011,U,b,0,0,n,16934924599,-1.50631070117146e-011\n                                        ,U,b,0,0,n,18474463200,-1.66915509192123e-011,U,b,0,0,n,20014001800,-1.75057728729611e-011\n                                        ,U,b,0,0,n,21553540400,-1.83199948267099e-011,U,b,0,0,n,23093079000,-1.8727106670946e-011\n                                        ,U,b,0,0,n,24632617600,-1.91342167804587e-011,U,b,0,0,n,26172156200,-1.91342167804587e-011\n                                        ,U,b,0,0,n,27711694800,-1.91342167804587e-011,U,b,0,0,n,29251233400,-1.8727106670946e-011\n                                        ,U,b,0,0,n,30790772000,-1.66915509192123e-011,U,b,0,0,n,32330310599,0.0284744128584862\n                                        ,U,b,0,-0.0318336263298988,n,33862151507,3.32293461724475e-006,U,b,-0.0318336263298988\n                                        ,0,n,33869849199,-7.7351094279754e-012,U,b,0,0,n,35409387800,-2.56479924104491e-011\n                                        ,U,b,0,0,n,36948926400,-3.33831018384245e-011,U,b,0,0,n,38488465000,-3.90826572493896e-011\n                                        ,U,b,0,0,n,40028003600,-4.2746656908621e-011,U,b,0,0,n,41567542200,-4.51893210351439e-011\n                                        ,U,b,0,0,n,43107080800,-4.60035447236162e-011,U,b,0,0,n,44646619400,-4.55964328793801e-011\n                                        ,U,b,0,0,n,46186158000,-4.43751008161186e-011,U,b,0,0,n,47725696599,-4.19324332201487e-011\n                                        ,U,b,0,0,n,49265235200,-3.9896877468415e-011,U,b,0,0,n,50804773799,-3.70471014976559e-011\n                                        ,U,b,0,0,n,52344312400,-3.41973255268968e-011,U,b,0,0,n,53883850999,-3.13475460866908e-011\n                                        ,U,b,0,0,n,55423389600,-2.97191021791932e-011,U,b,0,0,n,56962928200,-2.84977701159317e-011\n                                        ,U,b,0,0,n,58502466800,-2.8090660006419e-011,U,s,0,0,n\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 104.594665527344\n                        KeyVer: 4005\n                        KeyCount: 41\n                        Key: 0,104.594665527344,U,s,0,0,a,0.329832986317342,0.333333336384385,1539538600,104.594665527344\n                                        ,U,s,0,0,a,0.333333336384385,0.333333336384385,3079077200,104.594665527344,U,s,0,0\n                                        ,a,0.333333336384385,0.333333336384385,4618615800,104.594665527344,U,s,0,0,a,0.333333336384385\n                                        ,0.333333336384385,6158154400,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385\n                                        ,7697693000,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,9237231600\n                                        ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,10776770200,104.594665527344\n                                        ,U,s,0,0,a,0.333333336384385,0.333333336384385,12316308800,104.594665527344,U,s,0\n                                        ,0,a,0.333333336384385,0.333333336384385,13855847400,104.594665527344,U,s,0,0,a,0.333333336384385\n                                        ,0.333333336384385,15395386000,104.594665527344,U,s,0,0,a,0.332833286374807,0.332833286374807\n                                        ,16927226907,104.594665527344,U,s,0,0,a,0.989999008961604,0.989999008961604,16934924599\n                                        ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,18474463200,104.594665527344\n                                        ,U,s,0,0,a,0.333333336384385,0.333333336384385,20014001800,104.594665527344,U,s,0\n                                        ,0,a,0.333333336384385,0.333333336384385,21553540400,104.594665527344,U,s,0,0,a,0.333333336384385\n                                        ,0.333333336384385,23093079000,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385\n                                        ,24632617600,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,26172156200\n                                        ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,27711694800,104.594665527344\n                                        ,U,s,0,0,a,0.333333336384385,0.329832986317342,29251233400,104.594665527344,U,s,0\n                                        ,0.641149818897247,a,0.329832986317342,0.329832986317342,30790772000,104.594665527344\n                                        ,U,s,0.641149818897247,-0.00806480553001165,a,0.329832986317342,0.989898998959688\n                                        ,32330310599,104.637405395508,U,s,-0.00806480553001165,-0.649214625358582,a,0.988698878936702\n                                        ,0.32943294630968,33862151507,104.594665527344,U,s,-0.649214625358582,0,a,0.989999008961604\n                                        ,0.989999008961604,33869849199,104.594528198242,U,s,0,0,a,0.333233326382469,0.329832986317342\n                                        ,35409387800,104.594665527344,U,b,0,0,a,0.329832986317342,0.333333336384385,36948926400\n                                        ,104.594665527344,U,b,0,0,a,0.333333336384385,0.333333336384385,38488465000,104.594665527344\n                                        ,U,s,0,0,a,0.333333336384385,0.333333336384385,40028003600,104.594665527344,U,s,0\n                                        ,0,a,0.333333336384385,0.333333336384385,41567542200,104.594665527344,U,s,0,0,a,0.333333336384385\n                                        ,0.333333336384385,43107080800,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385\n                                        ,44646619400,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,46186158000\n                                        ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,47725696599,104.594665527344\n                                        ,U,s,0,0,a,0.333333336384385,0.333333336384385,49265235200,104.594665527344,U,s,0\n                                        ,0,a,0.333333336384385,0.333333336384385,50804773799,104.594665527344,U,s,0,0,a,0.333333336384385\n                                        ,0.333333336384385,52344312400,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385\n                                        ,53883850999,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,55423389600\n                                        ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,56962928200,104.594665527344\n                                        ,U,s,0,0,a,0.333333336384385,0.329832986317342,58502466800,104.594665527344,U,s,0\n                                        ,0,n\n                        Color: 0,0,1\n                    }\n                    LayerType: 2\n                }\n                Channel: \"S\" {\n                    Channel: \"X\" {\n                        Default: 1\n                        Color: 1,0,0\n                    }\n                    Channel: \"Y\" {\n                        Default: 1.00000011920929\n                        Color: 0,1,0\n                    }\n                    Channel: \"Z\" {\n                        Default: 1\n                        Color: 0,0,1\n                    }\n                    LayerType: 3\n                }\n            }\n            Channel: \"Visibility\" {\n                Default: 1\n                Color: 0.75,0,0\n                LayerType: 1\n            }\n            Channel: \"liw\" {\n                Default: 0\n                Color: 1,1,1\n            }\n        }\n        \n        ;Generic nodes animation\n        ;----------------------------------------------------\n        \n        ;Textures animation\n        ;----------------------------------------------------\n        \n        ;Materials animation\n        ;----------------------------------------------------\n        \n        \n        ;Constraints animation\n        ;----------------------------------------------------\n    }\n}\n;Version 5 settings\n;------------------------------------------------------------------\n\nVersion5:  {\n    AmbientRenderSettings:  {\n        Version: 101\n        AmbientLightColor: 0.4,0.4,0.4,0\n    }\n    FogOptions:  {\n        FlogEnable: 0\n        FogMode: 0\n        FogDensity: 0.002\n        FogStart: 0.3\n        FogEnd: 1000\n        FogColor: 1,1,1,1\n    }\n    Settings:  {\n        FrameRate: \"24\"\n        TimeFormat: 1\n        SnapOnFrames: 0\n        ReferenceTimeIndex: -1\n        TimeLineStartTime: 46186158000\n        TimeLineStopTime: 1385584740000\n    }\n    RendererSetting:  {\n        DefaultCamera: \"Producer Perspective\"\n        DefaultViewingMode: 0\n    }\n}\n"
  },
  {
    "path": "Tests/Assets/Models/Dude/dude_2011.fbx",
    "content": "; FBX 7.1.0 project file\n; Copyright (C) 1997-2010 Autodesk Inc. and/or its licensors.\n; All rights reserved.\n; ----------------------------------------------------\n\nFBXHeaderExtension:  {\n\tFBXHeaderVersion: 1003\n\tFBXVersion: 7100\n\tCreationTimeStamp:  {\n\t\tVersion: 1000\n\t\tYear: 2018\n\t\tMonth: 1\n\t\tDay: 18\n\t\tHour: 16\n\t\tMinute: 31\n\t\tSecond: 31\n\t\tMillisecond: 435\n\t}\n\tCreator: \"FBX SDK/FBX Plugins version 2013.3\"\n\tSceneInfo: \"SceneInfo::GlobalInfo\", \"UserData\" {\n\t\tType: \"UserData\"\n\t\tVersion: 100\n\t\tMetaData:  {\n\t\t\tVersion: 100\n\t\t\tTitle: \"\"\n\t\t\tSubject: \"\"\n\t\t\tAuthor: \"\"\n\t\t\tKeywords: \"\"\n\t\t\tRevision: \"\"\n\t\t\tComment: \"\"\n\t\t}\n\t\tProperties70:  {\n\t\t\tP: \"DocumentUrl\", \"KString\", \"Url\", \"\", \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\FBX 2011\\dude_2011.fbx\"\n\t\t\tP: \"SrcDocumentUrl\", \"KString\", \"Url\", \"\", \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\FBX 2011\\dude_2011.fbx\"\n\t\t\tP: \"Original\", \"Compound\", \"\", \"\"\n\t\t\tP: \"Original|ApplicationVendor\", \"KString\", \"\", \"\", \"\"\n\t\t\tP: \"Original|ApplicationName\", \"KString\", \"\", \"\", \"\"\n\t\t\tP: \"Original|ApplicationVersion\", \"KString\", \"\", \"\", \"\"\n\t\t\tP: \"Original|DateTime_GMT\", \"DateTime\", \"\", \"\", \"\"\n\t\t\tP: \"Original|FileName\", \"KString\", \"\", \"\", \"\"\n\t\t\tP: \"LastSaved\", \"Compound\", \"\", \"\"\n\t\t\tP: \"LastSaved|ApplicationVendor\", \"KString\", \"\", \"\", \"\"\n\t\t\tP: \"LastSaved|ApplicationName\", \"KString\", \"\", \"\", \"\"\n\t\t\tP: \"LastSaved|ApplicationVersion\", \"KString\", \"\", \"\", \"\"\n\t\t\tP: \"LastSaved|DateTime_GMT\", \"DateTime\", \"\", \"\", \"\"\n\t\t}\n\t}\n}\nGlobalSettings:  {\n\tVersion: 1000\n\tProperties70:  {\n\t\tP: \"UpAxis\", \"int\", \"Integer\", \"\",1\n\t\tP: \"UpAxisSign\", \"int\", \"Integer\", \"\",1\n\t\tP: \"FrontAxis\", \"int\", \"Integer\", \"\",2\n\t\tP: \"FrontAxisSign\", \"int\", \"Integer\", \"\",1\n\t\tP: \"CoordAxis\", \"int\", \"Integer\", \"\",0\n\t\tP: \"CoordAxisSign\", \"int\", \"Integer\", \"\",1\n\t\tP: \"OriginalUpAxis\", \"int\", \"Integer\", \"\",-1\n\t\tP: \"OriginalUpAxisSign\", \"int\", \"Integer\", \"\",1\n\t\tP: \"UnitScaleFactor\", \"double\", \"Number\", \"\",1\n\t\tP: \"OriginalUnitScaleFactor\", \"double\", \"Number\", \"\",1\n\t\tP: \"AmbientColor\", \"ColorRGB\", \"Color\", \"\",0.4,0.4,0.4\n\t\tP: \"DefaultCamera\", \"KString\", \"\", \"\", \"Producer Perspective\"\n\t\tP: \"TimeMode\", \"enum\", \"\", \"\",11\n\t\tP: \"TimeSpanStart\", \"KTime\", \"Time\", \"\",46186158000\n\t\tP: \"TimeSpanStop\", \"KTime\", \"Time\", \"\",1385584740000\n\t\tP: \"CustomFrameRate\", \"double\", \"Number\", \"\",-1\n\t}\n}\n\n; Documents Description\n;------------------------------------------------------------------\n\nDocuments:  {\n\tCount: 1\n\tDocument: 124844976, \"\", \"Scene\" {\n\t\tProperties70:  {\n\t\t\tP: \"SourceObject\", \"object\", \"\", \"\"\n\t\t\tP: \"ActiveAnimStackName\", \"KString\", \"\", \"\", \"Take 001\"\n\t\t}\n\t\tRootNode: 0\n\t}\n}\n\n; Document References\n;------------------------------------------------------------------\n\nReferences:  {\n}\n\n; Object definitions\n;------------------------------------------------------------------\n\nDefinitions:  {\n\tVersion: 100\n\tCount: 710\n\tObjectType: \"GlobalSettings\" {\n\t\tCount: 1\n\t}\n\tObjectType: \"Model\" {\n\t\tCount: 60\n\t\tPropertyTemplate: \"FbxNode\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"QuaternionInterpolate\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"RotationOffset\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"RotationPivot\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"ScalingOffset\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"ScalingPivot\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"TranslationActive\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"TranslationMin\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"TranslationMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"TranslationMinX\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"TranslationMinY\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"TranslationMinZ\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"TranslationMaxX\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"TranslationMaxY\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"TranslationMaxZ\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"RotationOrder\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"RotationSpaceForLimitOnly\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"RotationStiffnessX\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"RotationStiffnessY\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"RotationStiffnessZ\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"AxisLen\", \"double\", \"Number\", \"\",10\n\t\t\t\tP: \"PreRotation\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"PostRotation\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"RotationMin\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"RotationMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"RotationMinX\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"RotationMinY\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"RotationMinZ\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"RotationMaxX\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"RotationMaxY\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"RotationMaxZ\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"ScalingActive\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"ScalingMin\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",1,1,1\n\t\t\t\tP: \"ScalingMinX\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"ScalingMinY\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"ScalingMinZ\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"ScalingMaxX\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"ScalingMaxY\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"ScalingMaxZ\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"GeometricTranslation\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"GeometricRotation\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"GeometricScaling\", \"Vector3D\", \"Vector\", \"\",1,1,1\n\t\t\t\tP: \"MinDampRangeX\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MinDampRangeY\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MinDampRangeZ\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MaxDampRangeX\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MaxDampRangeY\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MaxDampRangeZ\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MinDampStrengthX\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MinDampStrengthY\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MinDampStrengthZ\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MaxDampStrengthX\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MaxDampStrengthY\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"MaxDampStrengthZ\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"LookAtProperty\", \"object\", \"\", \"\"\n\t\t\t\tP: \"UpVectorProperty\", \"object\", \"\", \"\"\n\t\t\t\tP: \"Show\", \"bool\", \"\", \"\",1\n\t\t\t\tP: \"NegativePercentShapeSupport\", \"bool\", \"\", \"\",1\n\t\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",-1\n\t\t\t\tP: \"Freeze\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"LODBox\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A\",0,0,0\n\t\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A\",0,0,0\n\t\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\",1,1,1\n\t\t\t\tP: \"Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t\t\tP: \"Visibility Inheritance\", \"Visibility Inheritance\", \"\", \"\",1\n\t\t\t}\n\t\t}\n\t}\n\tObjectType: \"NodeAttribute\" {\n\t\tCount: 59\n\t\tPropertyTemplate: \"FbxCameraSwitcher\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"Color\", \"ColorRGB\", \"Color\", \"\",0.8,0.8,0.8\n\t\t\t\tP: \"Camera Index\", \"Integer\", \"\", \"A\",1\n\t\t\t}\n\t\t}\n\t}\n\tObjectType: \"Geometry\" {\n\t\tCount: 1\n\t\tPropertyTemplate: \"FbxMesh\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"Color\", \"ColorRGB\", \"Color\", \"\",0.8,0.8,0.8\n\t\t\t\tP: \"BBoxMin\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"BBoxMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"Primary Visibility\", \"bool\", \"\", \"\",1\n\t\t\t\tP: \"Casts Shadows\", \"bool\", \"\", \"\",1\n\t\t\t\tP: \"Receive Shadows\", \"bool\", \"\", \"\",1\n\t\t\t}\n\t\t}\n\t}\n\tObjectType: \"Texture\" {\n\t\tCount: 15\n\t\tPropertyTemplate: \"FbxFileTexture\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"TextureTypeUse\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"Texture alpha\", \"Number\", \"\", \"A\",1\n\t\t\t\tP: \"CurrentMappingType\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"WrapModeU\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"WrapModeV\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"UVSwap\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"PremultiplyAlpha\", \"bool\", \"\", \"\",1\n\t\t\t\tP: \"Translation\", \"Vector\", \"\", \"A\",0,0,0\n\t\t\t\tP: \"Rotation\", \"Vector\", \"\", \"A\",0,0,0\n\t\t\t\tP: \"Scaling\", \"Vector\", \"\", \"A\",1,1,1\n\t\t\t\tP: \"TextureRotationPivot\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"TextureScalingPivot\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",1\n\t\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"default\"\n\t\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"UseMipMap\", \"bool\", \"\", \"\",0\n\t\t\t}\n\t\t}\n\t}\n\tObjectType: \"Video\" {\n\t\tCount: 15\n\t\tPropertyTemplate: \"FbxVideo\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"ImageSequence\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"ImageSequenceOffset\", \"int\", \"Integer\", \"\",0\n\t\t\t\tP: \"FrameRate\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"LastFrame\", \"int\", \"Integer\", \"\",0\n\t\t\t\tP: \"Width\", \"int\", \"Integer\", \"\",0\n\t\t\t\tP: \"Height\", \"int\", \"Integer\", \"\",0\n\t\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"\"\n\t\t\t\tP: \"StartFrame\", \"int\", \"Integer\", \"\",0\n\t\t\t\tP: \"StopFrame\", \"int\", \"Integer\", \"\",0\n\t\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",0\n\t\t\t\tP: \"Offset\", \"KTime\", \"Time\", \"\",0\n\t\t\t\tP: \"InterlaceMode\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"FreeRunning\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"Loop\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"AccessMode\", \"enum\", \"\", \"\",0\n\t\t\t}\n\t\t}\n\t}\n\tObjectType: \"Deformer\" {\n\t\tCount: 59\n\t}\n\tObjectType: \"Pose\" {\n\t\tCount: 1\n\t}\n\tObjectType: \"AnimationStack\" {\n\t\tCount: 1\n\t\tPropertyTemplate: \"FbxAnimStack\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"Description\", \"KString\", \"\", \"\", \"\"\n\t\t\t\tP: \"LocalStart\", \"KTime\", \"Time\", \"\",0\n\t\t\t\tP: \"LocalStop\", \"KTime\", \"Time\", \"\",0\n\t\t\t\tP: \"ReferenceStart\", \"KTime\", \"Time\", \"\",0\n\t\t\t\tP: \"ReferenceStop\", \"KTime\", \"Time\", \"\",0\n\t\t\t}\n\t\t}\n\t}\n\tObjectType: \"AnimationLayer\" {\n\t\tCount: 1\n\t\tPropertyTemplate: \"FbxAnimLayer\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"Weight\", \"Number\", \"\", \"A\",100\n\t\t\t\tP: \"Mute\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"Solo\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"Lock\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"Color\", \"ColorRGB\", \"Color\", \"\",0.8,0.8,0.8\n\t\t\t\tP: \"BlendMode\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"RotationAccumulationMode\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"ScaleAccumulationMode\", \"enum\", \"\", \"\",0\n\t\t\t\tP: \"BlendModeBypass\", \"ULongLong\", \"\", \"\",0\n\t\t\t}\n\t\t}\n\t}\n\tObjectType: \"AnimationCurveNode\" {\n\t\tCount: 270\n\t\tPropertyTemplate: \"FbxAnimCurveNode\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"d\", \"Compound\", \"\", \"\"\n\t\t\t}\n\t\t}\n\t}\n\tObjectType: \"AnimationCurve\" {\n\t\tCount: 222\n\t}\n\tObjectType: \"Material\" {\n\t\tCount: 5\n\t\tPropertyTemplate: \"FbxSurfacePhong\" {\n\t\t\tProperties70:  {\n\t\t\t\tP: \"ShadingModel\", \"KString\", \"\", \"\", \"Phong\"\n\t\t\t\tP: \"MultiLayer\", \"bool\", \"\", \"\",0\n\t\t\t\tP: \"EmissiveColor\", \"Color\", \"\", \"A\",0,0,0\n\t\t\t\tP: \"EmissiveFactor\", \"Number\", \"\", \"A\",1\n\t\t\t\tP: \"AmbientColor\", \"Color\", \"\", \"A\",0.2,0.2,0.2\n\t\t\t\tP: \"AmbientFactor\", \"Number\", \"\", \"A\",1\n\t\t\t\tP: \"DiffuseColor\", \"Color\", \"\", \"A\",0.8,0.8,0.8\n\t\t\t\tP: \"DiffuseFactor\", \"Number\", \"\", \"A\",1\n\t\t\t\tP: \"Bump\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"NormalMap\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\t\tP: \"BumpFactor\", \"double\", \"Number\", \"\",1\n\t\t\t\tP: \"TransparentColor\", \"Color\", \"\", \"A\",0,0,0\n\t\t\t\tP: \"TransparencyFactor\", \"Number\", \"\", \"A\",0\n\t\t\t\tP: \"DisplacementColor\", \"ColorRGB\", \"Color\", \"\",0,0,0\n\t\t\t\tP: \"DisplacementFactor\", \"double\", \"Number\", \"\",1\n\t\t\t\tP: \"VectorDisplacementColor\", \"ColorRGB\", \"Color\", \"\",0,0,0\n\t\t\t\tP: \"VectorDisplacementFactor\", \"double\", \"Number\", \"\",1\n\t\t\t\tP: \"SpecularColor\", \"Color\", \"\", \"A\",0.2,0.2,0.2\n\t\t\t\tP: \"SpecularFactor\", \"Number\", \"\", \"A\",1\n\t\t\t\tP: \"ShininessExponent\", \"Number\", \"\", \"A\",20\n\t\t\t\tP: \"ReflectionColor\", \"Color\", \"\", \"A\",0,0,0\n\t\t\t\tP: \"ReflectionFactor\", \"Number\", \"\", \"A\",1\n\t\t\t}\n\t\t}\n\t}\n}\n\n; Object properties\n;------------------------------------------------------------------\n\nObjects:  {\n\tNodeAttribute: 125164624, \"NodeAttribute::\", \"CameraSwitcher\" {\n\t\tProperties70:  {\n\t\t\tP: \"Camera Index\", \"Integer\", \"\", \"A+\",100\n\t\t}\n\t\tVersion: 101\n\t\tName: \"Model::Camera Switcher\"\n\t\tCameraId: 100\n\t\tCameraName: 100\n\t\tCameraIndexName: \n\t}\n\tNodeAttribute: 125067472, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125067824, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125064304, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125064656, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125290432, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125290784, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125288320, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125292192, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125285856, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125289728, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125286560, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125287968, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125286208, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125288672, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125291136, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125291488, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125284448, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125291840, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125284800, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125285152, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125285504, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125286912, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125289024, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125287264, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125287616, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125289376, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125290080, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125986480, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125984368, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125987888, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125988592, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125984016, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125982256, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125984720, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125986832, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125985776, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125988944, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125982608, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125981552, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125986128, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125989296, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125982960, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125988240, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125983312, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125983664, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125985072, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125987184, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125981904, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125985424, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 125987536, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 126063936, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 126064992, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 126066048, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 126071328, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 126070976, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 126069920, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 126067104, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tNodeAttribute: 126065344, \"NodeAttribute::\", \"LimbNode\" {\n\t\tTypeFlags: \"Skeleton\"\n\t}\n\tGeometry: 125738640, \"Geometry::\", \"Mesh\" {\n\t\tVertices: *34299 {\n\t\t\ta: 0.623793363571167,65.1128845214844,5.13387632369995,0.0422774255275726,64.9956970214844,5.01735305786133,-0.0264466553926468,64.9082183837891,5.00032997131348,-0.179756164550781,64.7790222167969,4.91852188110352,0.325537592172623,65.1139144897461,5.11669683456421,0.466457337141037,65.1115264892578,5.12619018554688,-0.251792371273041,64.6404418945313,4.83475875854492,1.17611312866211,64.9081497192383,4.99786615371704,1.229975938797,64.8112030029297,4.97873592376709,1.35875833034515,64.6602325439453,4.89207983016968,0.917911291122437,65.0681762695313,5.1065149307251,0.781586170196533,65.1051177978516,5.03205871582031,1.09732794761658,65.0128784179688,5.03322553634644,0.137362271547318,65.0869979858398,5.04972410202026,0.0620876252651215,64.8320541381836,4.96379709243774,0.140958309173584,64.8800735473633,4.98378229141235,-0.0571245849132538,64.7189102172852,4.92748022079468,0.228947132825851,64.8898010253906,5.00581216812134,0.316976398229599,64.8996047973633,5.02985382080078,0.452559441328049,64.906867980957,5.01395797729492,0.600856900215149,64.8984298706055,5.04465341567993,1.12346565723419,64.7505950927734,4.94624662399292,1.05264699459076,64.8100967407227,4.96849727630615,0.966790914535522,64.8332214355469,4.99361562728882,0.880976319313049,64.8564453125,5.02073812484741,0.747775435447693,64.8827056884766,5.01342105865479,0.0452732741832733,64.6292190551758,4.89672803878784,0.122229993343353,64.6522216796875,4.91772842407227,0.209659367799759,64.6546325683594,4.94005537033081,0.297129482030869,64.6571273803711,4.9643931388855,0.432055622339249,64.6558151245117,4.94884538650513,0.58029317855835,64.6465911865234,4.97957277297974,1.10663449764252,64.5475311279297,4.87918663024902,1.03390467166901,64.5820541381836,4.9024510383606,1.40576934814453,64.512451171875,4.80627107620239,0.947489738464355,64.5978851318359,4.92786550521851,0.861116051673889,64.6138000488281,4.9552845954895,0.727327466011047,64.6323776245117,4.94827938079834,1.01195073127747,64.3154525756836,4.82282686233521,1.45188724994659,64.3472137451172,4.66289949417114,\n0.925535917282104,64.3312759399414,4.84824132919312,0.839162230491638,64.3471908569336,4.87565994262695,0.705373644828796,64.3657684326172,4.86865520477295,-0.177379310131073,64.5866241455078,4.86361455917358,0.0233194231987,64.3626098632813,4.81710386276245,0.100276112556458,64.385612487793,4.83810424804688,-0.327593684196472,64.4846115112305,4.69348287582397,0.187705457210541,64.3880233764648,4.86043071746826,0.275175601243973,64.3905181884766,4.88476848602295,0.410101801156998,64.3892059326172,4.86922121047974,0.558339357376099,64.3799819946289,4.89994859695435,1.08468067646027,64.2809219360352,4.79956245422363,1.06065464019775,70.8534545898438,4.76268863677979,1.13732481002808,72.418815612793,2.19126605987549,1.13400912284851,72.1023101806641,3.42027258872986,1.12417089939117,71.8792266845703,3.85004806518555,0.62932276725769,65.1465225219727,5.30447387695313,0.625903844833374,65.0976638793945,5.32506656646729,0.615944027900696,64.9603424072266,5.36244630813599,0.610984563827515,64.8877182006836,5.40017414093018,0.630598306655884,65.1751098632813,5.25026416778564,0.629361748695374,65.1725463867188,5.18983459472656,0.512664914131165,63.6718902587891,5.14163732528687,0.529050230979919,63.8910675048828,5.11033630371094,0.541939496994019,64.0722885131836,5.04615640640259,0.43946561217308,62.9340286254883,4.19746780395508,0.485344499349594,63.3730735778809,4.89445734024048,0.462659686803818,63.1349334716797,4.64441919326782,0.555222749710083,64.2537155151367,5.00397300720215,0.880172610282898,68.3598251342773,5.46416473388672,0.858006715774536,68.0974426269531,5.35318899154663,0.849440932273865,67.9892425537109,5.34090089797974,0.904710054397583,68.6925506591797,5.39708185195923,0.709403038024902,66.0338897705078,5.97735166549683,0.705547690391541,65.9931945800781,5.93586921691895,0.743143796920776,66.4381942749023,6.1241774559021,0.753129124641418,66.5676574707031,6.12357091903687,0.760891556739807,66.6766815185547,6.08543300628662,0.733507633209229,66.3163452148438,6.11094665527344,0.689875245094299,65.8638381958008,5.60512256622314,\n0.624589085578918,65.1533660888672,4.99830102920532,0.62416410446167,65.1353530883789,5.05449390411377,0.624347448348999,65.1218795776367,5.12571716308594,0.638351678848267,65.2610092163086,5.3154878616333,0.634988903999329,65.2251205444336,5.28104448318481,0.631260514259338,65.1875839233398,5.23275852203369,0.798808693885803,67.2536087036133,5.69974708557129,0.791501402854919,67.1474075317383,5.75169134140015,0.781278014183044,66.9964904785156,5.83483648300171,0.590098738670349,64.6425552368164,5.28635549545288,0.601859569549561,64.7733993530273,5.38283586502075,0.571767449378967,64.4464263916016,5.10084295272827,0.664491891860962,65.6135482788086,5.25263929367065,0.646058797836304,65.3668518066406,5.2884316444397,0.308831185102463,61.5862121582031,2.65170550346375,0.278255134820938,61.2063217163086,2.57932591438293,0.24938228726387,60.845588684082,2.51997470855713,0.433875113725662,62.9745635986328,3.69008111953735,0.444906324148178,63.2859725952148,2.93291902542114,0.433557480573654,63.1402702331543,2.927166223526,0.810639500617981,67.4434204101563,5.53539562225342,0.770475149154663,66.8228073120117,5.98658132553101,0.680776953697205,65.8014297485352,5.35610294342041,0.67123281955719,65.692626953125,5.28961133956909,1.0142970085144,70.1763305664063,5.10739469528198,0.984624624252319,69.7768020629883,5.1758246421814,0.445801049470901,63.2715072631836,3.04997110366821,0.438935846090317,63.0870819091797,3.47903776168823,0.373842626810074,62.3733596801758,2.89807319641113,0.341937512159348,61.9855003356934,2.78416061401367,0.400814205408096,62.7189445495605,2.91482043266296,1.0299117565155,70.3926239013672,5.04423379898071,0.634009838104248,65.2811813354492,4.97222805023193,0.627241492271423,65.1924057006836,4.97727298736572,0.44109907746315,63.1557693481445,3.29633045196533,0.626932263374329,65.1415252685547,5.18783950805664,0.71958339214325,66.147705078125,6.05837154388428,0.449921995401382,63.0109786987305,4.46015787124634,0.432886034250259,62.927562713623,3.8436872959137,0.433378845453262,62.9117012023926,3.9436240196228,\n0.837226748466492,67.8408203125,5.29701995849609,0.823479652404785,67.6511611938477,5.34922075271606,0.174876749515533,59.8354759216309,2.7228786945343,0.192694664001465,60.1533355712891,2.33161687850952,0.155011057853699,59.5214004516602,2.97793006896973,1.0879967212677,71.2529602050781,4.55878782272339,1.11250460147858,71.6562576293945,4.17292976379395,0.887781143188477,68.4619064331055,5.44826936721802,-2.06441426277161,63.4675140380859,-2.31350040435791,-1.87283957004547,63.8040542602539,-2.42601108551025,-2.28081321716309,63.8607978820801,-1.77618479728699,-2.41751766204834,63.5461616516113,-1.80403280258179,-1.77159559726715,64.1679763793945,-2.40934991836548,-2.17487287521362,64.1741485595703,-1.71712112426758,-2.34561896324158,64.0813293457031,-1.03868758678436,-2.43121266365051,63.8074989318848,-1.12634778022766,-2.62995195388794,63.5505790710449,-1.26813459396362,-2.32942581176758,63.1775054931641,-2.33953905105591,-2.68021106719971,63.3241882324219,-1.86289167404175,-2.83212876319885,63.293758392334,-1.41155290603638,0.339464277029037,63.2583236694336,-3.07789540290833,-0.0916713774204254,63.7588081359863,-2.953280210495,-0.233077645301819,63.389591217041,-2.97743105888367,-0.396398603916168,63.0210418701172,-2.96684408187866,0.161560475826263,62.8935432434082,-3.11426734924316,-1.12091016769409,63.6399192810059,-2.79150557518005,-1.32885909080505,63.2648010253906,-2.76139807701111,-0.939272999763489,64.0175476074219,-2.7674343585968,0.308333724737167,62.861701965332,-3.10737586021423,-2.79351949691772,60.0759315490723,2.50330710411072,-3.11513829231262,60.3012847900391,2.13080883026123,-1.4380030632019,66.2845840454102,-1.5249457359314,-1.68420386314392,65.8793869018555,-1.51027750968933,-1.19783592224121,65.8847274780273,-1.72575259208679,-0.887153267860413,66.2650299072266,-1.72689175605774,-1.93221962451935,65.4429626464844,-1.45040309429169,-1.56653869152069,65.4700698852539,-1.8891019821167,-0.951906085014343,65.4582290649414,-2.19403076171875,-0.684996604919434,65.8686676025391,-2.06346368789673,\n-0.501625418663025,66.2598571777344,-1.95176911354065,-0.157869458198547,65.8251113891602,-2.2592875957489,0.00298556685447693,66.1865081787109,-2.01925182342529,-0.445116281509399,65.395263671875,-2.4208869934082,0.129518032073975,65.4026107788086,-2.51539325714111,0.24567648768425,65.8147354125977,-2.35661506652832,0.578288197517395,66.160285949707,-2.21924948692322,-0.0176074653863907,64.1389007568359,-2.8841404914856,0.430291742086411,64.3759689331055,-2.81420874595642,0.00262081623077393,64.4665832519531,-2.74427199363709,-2.74265122413635,63.011302947998,-0.449708819389343,-2.96583390235901,62.7592010498047,-0.600131273269653,-2.93298935890198,63.1129875183105,-0.97790539264679,-2.72992539405823,63.3584899902344,-0.826003909111023,-2.22467613220215,63.7582168579102,-0.313466429710388,-2.49392008781433,63.3240051269531,-0.347863137722015,-2.49500870704651,63.6343879699707,-0.709853410720825,-2.28075981140137,63.9004173278809,-0.64413845539093,-2.03079032897949,66.0994262695313,-0.543434143066406,-2.02758860588074,65.6578598022461,-0.326893508434296,-1.99442374706268,65.7801361083984,-0.957743167877197,-1.86024069786072,66.2031021118164,-1.13348805904388,-2.09660172462463,65.1525650024414,-0.313202559947968,-2.14117383956909,65.3427810668945,-0.786990880966187,-1.98699486255646,66.6393585205078,-0.585755109786987,-1.73072242736816,66.7498626708984,-1.14894211292267,-1.34470677375793,66.7577743530273,-1.53486847877502,-1.89628708362579,69.1311111450195,2.62288928031921,0.461941629648209,71.0155410766602,4.6341404914856,0.769903659820557,70.9342880249023,4.7560338973999,0.393971890211105,71.3228454589844,4.3484320640564,0.694467186927795,71.2877655029297,4.4684100151062,-0.172988802194595,71.1251373291016,4.25246858596802,0.152568727731705,71.0860900878906,4.45920085906982,-0.184596970677376,71.4623413085938,3.89338612556458,0.116147547960281,71.3699722290039,4.17397785186768,0.357630580663681,71.639892578125,3.95606780052185,0.0574007332324982,71.5874862670898,3.90052580833435,-1.18433821201324,71.1008758544922,3.03325295448303,\n-1.36386454105377,70.8319702148438,2.79870414733887,-1.13077282905579,70.9053573608398,3.3064124584198,-1.276251912117,70.6632461547852,3.12109637260437,-1.31896269321442,70.2930374145508,3.04443264007568,-1.53664886951447,70.4180374145508,2.49737644195557,-0.924969553947449,71.0770645141602,3.52221941947937,-0.963448882102966,71.315803527832,3.27536654472351,-0.7299964427948,71.4047164916992,3.49164271354675,-0.738705515861511,71.1481018066406,3.73645663261414,-1.66465246677399,69.2676544189453,3.08997631072998,0.684095621109009,71.6607284545898,4.06998348236084,-2.09345149993896,68.400390625,1.93266224861145,-2.09846615791321,69.1359786987305,1.85471093654633,-1.77208375930786,68.6125183105469,2.84838652610779,-0.425840139389038,67.4173126220703,-2.12641859054565,-0.444946348667145,66.9872665405273,-2.04204487800598,0.0742237567901611,66.9431304931641,-2.1808226108551,0.0994564592838287,67.3768844604492,-2.27369236946106,-0.465237021446228,66.660774230957,-1.98393750190735,0.0518084764480591,66.6103744506836,-2.13401126861572,0.606598854064941,66.5368499755859,-2.26371574401855,0.63420832157135,66.8952255249023,-2.26730966567993,0.665441274642944,67.3235931396484,-2.37448167800903,-2.18526387214661,68.4904861450195,1.25674867630005,-2.20559358596802,69.1680679321289,1.06190967559814,-1.86733984947205,70.4976425170898,0.793606281280518,-1.86910903453827,70.4748077392578,0.210348963737488,-1.65718531608582,71.1225891113281,0.216397732496262,-1.72112834453583,71.1484146118164,0.786884486675262,-1.71093416213989,70.4660339355469,-0.419810354709625,-1.55366683006287,71.0983810424805,-0.377163052558899,-1.2832944393158,71.517448425293,-0.310984015464783,-1.39519059658051,71.5979537963867,0.232911288738251,-1.44035971164703,71.6525344848633,0.801234483718872,-1.27187788486481,71.34326171875,2.61364054679871,-1.01177322864532,71.6174545288086,2.77098083496094,-1.38939499855042,71.5504455566406,1.75797700881958,-1.08889937400818,71.8652496337891,1.81313228607178,-0.74492084980011,72.0827941894531,1.89287924766541,-0.679477095603943,71.8006057739258,3.0528781414032,\n-0.384253442287445,71.6459732055664,3.53229069709778,-0.736573576927185,71.5655136108398,3.30104160308838,-1.20245289802551,71.2317047119141,2.86649751663208,-0.984832644462585,71.4752960205078,3.08777546882629,-1.61843776702881,71.0413589477539,1.70116806030273,-1.44768965244293,70.9303665161133,2.50166463851929,-1.33164775371552,71.0731735229492,2.69956064224243,-1.78161239624023,70.4285507202148,1.67380654811859,-1.65697824954987,69.7183303833008,2.4452691078186,-1.93330693244934,69.7481460571289,1.73944473266602,-2.04953861236572,69.7643280029297,0.870465576648712,-2.0847156047821,69.6122741699219,0.240052491426468,-2.21328973770142,68.8860549926758,0.352373659610748,-2.15788102149963,69.0321273803711,-0.0473507642745972,-2.01036024093628,68.7924041748047,-0.596657037734985,-1.86665296554565,69.6412582397461,-0.480478763580322,-1.08253812789917,70.3630447387695,-1.48609256744385,-1.4549126625061,70.4271240234375,-1.00956308841705,-1.58159184455872,69.6048049926758,-1.11043727397919,-1.19795942306519,69.5328140258789,-1.60922169685364,-1.65997362136841,68.7545547485352,-1.16319763660431,-1.27194666862488,68.6893005371094,-1.65528035163879,0.884846210479736,70.1233215332031,-2.18640089035034,0.329216808080673,70.1774215698242,-2.13138198852539,0.246300905942917,69.3600082397461,-2.32711124420166,0.818426251411438,69.3075408935547,-2.38610339164734,-0.190193891525269,70.240478515625,-1.9975426197052,-0.287689328193665,69.4182357788086,-2.17903733253479,-0.364626199007034,68.5993804931641,-2.25770878791809,0.175294786691666,68.5530624389648,-2.41484355926514,0.754991292953491,68.5060806274414,-2.47641658782959,0.411148875951767,70.8600692749023,-1.84431052207947,-0.0863446593284607,70.9077682495117,-1.72282290458679,0.94322395324707,70.8149337768555,-1.89682793617249,0.993964195251465,71.3831176757813,-1.49712753295898,0.487515836954117,71.4137268066406,-1.4516818523407,0.0114119648933411,71.4324493408203,-1.35220336914063,0.171863883733749,72.4325866699219,0.866378843784332,0.166664987802505,72.3487548828125,0.250142991542816,\n0.631345391273499,72.4095993041992,0.257073789834976,0.644669651985168,72.5073013305664,0.888128995895386,0.144611001014709,72.1218948364258,-0.340507626533508,0.603707551956177,72.1698837280273,-0.353997588157654,1.07387113571167,72.1656646728516,-0.363423585891724,1.10328590869904,72.4085540771484,0.256878972053528,1.12456631660461,72.5422897338867,0.894255757331848,-0.0688050091266632,71.7613525390625,3.57035827636719,-0.198761284351349,71.9391479492188,3.1220076084137,0.246166497468948,72.0193099975586,3.20735216140747,0.300596982240677,71.8274002075195,3.6315336227417,0.618768572807312,72.3814544677734,2.14557886123657,0.189862847328186,72.3270111083984,2.08805894851685,0.656815767288208,72.0691986083984,3.30047488212585,-1.24922847747803,67.0721435546875,-1.47265577316284,-1.64732575416565,67.085205078125,-1.07984530925751,-1.28425788879395,67.4800109863281,-1.55364918708801,-1.65446174144745,67.5020599365234,-1.08178448677063,-2.00189471244812,67.5220642089844,-0.539918541908264,-2.03291440010071,67.0123901367188,-0.627920508384705,-0.739609897136688,72.1798858642578,0.821248114109039,-1.10824263095856,71.9677429199219,0.809981882572174,-1.07681393623352,71.8874206542969,0.241177350282669,-0.721254944801331,72.0790863037109,0.241950035095215,-1.02308547496796,71.7721328735352,-0.268278181552887,-0.707126379013062,71.9153366088867,-0.297060012817383,0.666726231575012,71.8662490844727,3.73314380645752,-1.42754173278809,69.7128295898438,2.99285793304443,-0.794471621513367,71.4553451538086,-1.0209869146347,-1.09145736694336,71.4641647338867,-0.734061598777771,-1.28578495979309,71.0498123168945,-0.884373784065247,-0.933363318443298,71.0004043579102,-1.28397178649902,-0.954343557357788,71.6858749389648,-0.602074861526489,-0.709899842739105,71.7383422851563,-0.715290188789368,0.0906289517879486,71.8268127441406,-0.883029103279114,0.553733825683594,71.8441314697266,-0.939245700836182,1.03747177124023,71.8286056518555,-0.967041611671448,-0.291723728179932,72.2477798461914,2.00242471694946,-0.301306486129761,72.3543243408203,0.842659592628479,\n-0.295482009649277,72.2357177734375,0.245020747184753,-0.305113077163696,72.0344848632813,-0.321331322193146,-0.346078991889954,71.7884368896484,-0.808658123016357,-0.421383619308472,71.4455490112305,-1.21783924102783,-0.657468199729919,70.3004379272461,-1.796630859375,-0.534033060073853,70.9538116455078,-1.54974794387817,-0.76512598991394,69.4727096557617,-1.95073318481445,-0.843601584434509,68.6411819458008,-2.01231694221497,-0.889499425888062,67.033317565918,-1.82536506652832,-0.884638786315918,67.4514007568359,-1.89685273170471,-0.879774689674377,66.7174377441406,-1.74827265739441,-0.40679395198822,67.9422988891602,-2.22397255897522,0.129094123840332,67.9017868041992,-2.3778989315033,0.705568194389343,67.8573837280273,-2.43779754638672,-1.29681801795959,68.0120544433594,-1.62619566917419,-0.879484057426453,67.9764556884766,-1.98163914680481,-1.66664028167725,68.0569229125977,-1.13294267654419,-1.94688200950623,68.1262588500977,-0.687186002731323,-2.22190642356873,68.6718826293945,0.0814464390277863,-2.18926191329956,68.394660949707,-0.173482000827789,-2.06173467636108,66.306396484375,0.270789951086044,-2.03981709480286,65.7306137084961,0.327027827501297,-2.06686520576477,67.1133804321289,0.350221276283264,-2.01718997955322,66.6979598999023,0.292773723602295,-0.620941758155823,62.5681838989258,-3.13921141624451,-1.52735507488251,62.8993644714355,-2.7649040222168,-0.0263519883155823,62.3843193054199,-3.27164506912231,0.266734391450882,62.367244720459,-3.30643272399902,-1.37798225879669,68.0458755493164,4.30455589294434,-1.23890924453735,67.8901596069336,4.39161729812622,-1.43552124500275,68.0907287597656,4.22251605987549,-1.28076350688934,67.986457824707,4.39524173736572,0.377546519041061,66.1876831054688,5.38781976699829,0.33715084195137,66.2498168945313,5.33403825759888,0.493069380521774,66.3186111450195,5.56546497344971,0.470149666070938,66.2436141967773,5.58433151245117,0.451400071382523,66.16796875,5.62085103988647,0.535398364067078,66.2377853393555,5.81744813919067,0.593458414077759,66.2331314086914,5.81274890899658,\n0.445247083902359,66.1955871582031,5.84110355377197,0.493781477212906,66.1784286499023,5.84145402908325,0.0803782045841217,66.1922836303711,5.48261594772339,0.106357663869858,66.206787109375,5.45738172531128,0.0774464905261993,66.1107559204102,5.32893705368042,0.0359638035297394,66.0874252319336,5.3862099647522,0.274233907461166,66.2866439819336,5.69237518310547,0.244374066591263,66.2979049682617,5.6972279548645,0.32149413228035,66.1605453491211,5.30414915084839,0.156754016876221,66.2658386230469,5.50283670425415,0.133003234863281,66.2512588500977,5.53825330734253,0.545724391937256,66.2574234008789,5.68059349060059,0.555025815963745,66.2231369018555,5.74878978729248,0.565698027610779,66.312385559082,5.67399978637695,0.387897282838821,66.275505065918,5.78750658035278,0.0725316107273102,68.0971984863281,4.81859064102173,0.186211168766022,67.9832305908203,4.79445362091064,0.0166653990745544,68.0633850097656,4.81086206436157,0.267844706773758,67.927001953125,4.79169082641602,0.178097784519196,67.8924331665039,4.82363080978394,0.105673998594284,67.9410552978516,4.81362056732178,-0.0145852118730545,68.1976623535156,4.87628984451294,-0.0746597349643707,68.1509475708008,4.83993434906006,-0.173541575670242,68.2407302856445,4.87500667572021,-0.127273947000504,68.3139801025391,4.9223108291626,-0.300742149353027,68.2938079833984,4.91189670562744,-0.443478852510452,68.3190078735352,4.9248104095459,-0.432409286499023,68.3772811889648,4.93697929382324,-0.277704924345016,68.3658905029297,4.93379592895508,0.210827171802521,67.8577880859375,4.80922031402588,0.16913914680481,67.867546081543,4.71750736236572,0.158061116933823,67.8893356323242,4.74556255340576,0.203786790370941,67.8361282348633,4.79896926879883,-1.1378835439682,67.9149475097656,4.43347692489624,0.0872756242752075,67.9351577758789,4.71599531173706,-0.00252395868301392,68.0402450561523,4.70042610168457,-0.0927540212869644,68.1412048339844,4.73561239242554,-0.0440879017114639,68.0379867553711,4.56870937347412,-1.09579980373383,67.8964080810547,4.44191598892212,-0.501146733760834,67.7124328613281,4.86643886566162,\n-0.306639730930328,67.7238540649414,4.85340309143066,-0.131456553936005,67.8459854125977,4.80462980270386,-0.219726994633675,67.845085144043,4.84498119354248,-0.0507929772138596,67.7854232788086,4.78806924819946,-0.183810830116272,67.7487487792969,4.83533430099487,-0.294530749320984,67.8366775512695,4.8951997756958,-0.000747025012969971,67.6982879638672,4.80181217193604,0.0821308493614197,67.8313140869141,4.79887533187866,0.170370429754257,67.7679824829102,4.79952669143677,0.257696539163589,67.78662109375,4.7972469329834,0.139520168304443,67.8359069824219,4.80803346633911,0.313444048166275,67.7976684570313,4.79915237426758,-0.940548300743103,67.803108215332,4.6640248298645,-1.05381369590759,67.7698516845703,4.51773548126221,-0.00845268368721008,67.8782958984375,4.77604341506958,0.0435402989387512,67.8875503540039,4.78089952468872,0.089642345905304,67.8812484741211,4.75279998779297,-0.296882510185242,67.5243301391602,4.80978488922119,-0.518619477748871,67.4850387573242,4.78477621078491,-0.707731544971466,67.7342910766602,4.82214641571045,-1.04207479953766,67.6393814086914,4.56365013122559,-0.153744623064995,67.6036682128906,4.81377696990967,0.103864789009094,67.4183578491211,4.80526781082153,-0.0238534063100815,67.3293762207031,4.79401826858521,-0.214757233858109,67.2739562988281,4.78187656402588,-0.880071043968201,67.9217834472656,4.74224853515625,-0.680235683917999,67.8459320068359,4.87497568130493,-0.492535322904587,67.8295288085938,4.89924955368042,0.221289843320847,67.7520599365234,4.79656267166138,0.282921820878983,67.7299575805664,4.8082160949707,-1.01416158676147,67.8835830688477,4.59305000305176,-1.03361797332764,67.9288711547852,4.50020408630371,-0.98690927028656,67.9790649414063,4.58982563018799,-0.954205393791199,67.9623489379883,4.6548285484314,-0.367387235164642,64.9672012329102,4.65457773208618,-0.376518785953522,64.9429931640625,4.59082984924316,-0.364164084196091,64.9272155761719,4.62442445755005,-0.387651979923248,64.9273834228516,4.52254867553711,-0.372781217098236,64.9137496948242,4.57795190811157,\n-0.325812309980392,64.9677581787109,4.66768264770508,-0.2934929728508,65.0070037841797,4.77406311035156,0.0896200835704803,65.1711578369141,5.16201257705688,0.0752068161964417,65.1293258666992,5.18869733810425,0.306521564722061,65.1608276367188,5.26091337203979,0.303164333105087,65.1222839355469,5.29255628585815,-0.403771758079529,64.9382934570313,4.73152828216553,-0.426909625530243,64.9066925048828,4.77113580703735,-0.482801020145416,64.9239120483398,4.67571449279785,-0.315706521272659,64.9495010375977,4.91079902648926,-0.352145075798035,64.8978958129883,4.89442443847656,-0.430014610290527,64.8176879882813,4.84076070785522,-0.612703680992126,64.8882446289063,4.68541955947876,0.140789210796356,65.1614990234375,5.06094169616699,0.117839068174362,65.1946105957031,5.10699844360352,0.0427363812923431,65.1752243041992,5.04936122894287,0.0711185038089752,65.1374664306641,5.01369571685791,-0.0689185112714767,65.1361846923828,5.03231048583984,-0.0299543887376785,65.1474304199219,4.98878335952759,-0.0116341114044189,65.0947113037109,4.97372961044312,-0.0863916128873825,65.1224822998047,4.91171884536743,-0.127361476421356,65.0179977416992,5.08845901489258,-0.254649817943573,65.0161056518555,4.95347929000854,-0.0846455544233322,65.1145553588867,5.05634784698486,0.277950078248978,64.9772415161133,5.3225359916687,0.228391140699387,64.8919067382813,5.34354543685913,0.0256715714931488,65.0050430297852,5.23427677154541,0.318023234605789,65.1712036132813,5.14985322952271,0.311097830533981,65.187873840332,5.2046685218811,0.455786734819412,65.1104125976563,5.31833410263062,0.458984225988388,65.1497344970703,5.28762722015381,-0.198425605893135,65.0952301025391,4.92032051086426,-0.166533440351486,65.0903778076172,4.88122797012329,0.442113250494003,64.9704818725586,5.35210371017456,0.426556438207626,64.891227722168,5.38417100906372,0.460857778787613,65.1714782714844,5.23062992095947,0.463440865278244,65.1675262451172,5.17260313034058,-0.0820308774709702,65.0459442138672,4.89202976226807,-0.136149242520332,65.0765151977539,4.83672428131104,\n-0.138348579406738,64.9979934692383,4.81805753707886,0.0212104022502899,63.1957321166992,4.60476016998291,0.014591783285141,63.4088325500488,4.82474660873413,0.0333658158779144,63.6850280761719,5.05261611938477,0.247710734605789,63.6851692199707,5.11107349395752,0.271986216306686,63.8935699462891,5.08359003067017,0.0659575760364532,63.8828468322754,5.03491592407227,0.112435579299927,64.0491027832031,4.98340797424316,0.306000739336014,64.0654220581055,5.02008056640625,-0.0462554842233658,64.1683197021484,4.87989664077759,0.19654643535614,64.2306365966797,4.95268440246582,0.0293864905834198,63.0530662536621,4.33955764770508,0.224212020635605,62.9917640686035,4.25159072875977,-0.765367031097412,63.3923377990723,3.83371591567993,-0.651477217674255,63.2802734375,3.78344511985779,-0.495274901390076,63.1926078796387,3.74888515472412,-0.151985064148903,63.9648361206055,4.85739088058472,-0.913377046585083,63.5252494812012,3.9269597530365,-1.02425754070282,63.6739387512207,3.92811274528503,-0.826150894165039,63.6318016052246,4.27187967300415,-0.730976521968842,63.445384979248,4.18613243103027,-0.600782513618469,63.3088493347168,4.06153249740601,0.226796835660934,63.3959312438965,4.87644529342651,0.219289809465408,63.1641044616699,4.63506507873535,-0.241868630051613,63.5709114074707,4.81857585906982,-0.229720890522003,63.7968864440918,4.90630340576172,0.355975478887558,64.2465591430664,4.98120021820068,0.790874361991882,68.2815475463867,5.40977621078491,0.601127862930298,68.0573806762695,5.25249767303467,0.596381306648254,68.1045684814453,5.25249910354614,0.711288332939148,68.1173934936523,5.32674694061279,0.709404587745667,68.0025939941406,5.31436395645142,0.730903506278992,68.6883010864258,5.42940425872803,0.527809977531433,68.0526580810547,5.16016721725464,0.48125085234642,68.0487747192383,5.05965137481689,0.497682601213455,68.1295394897461,5.09887170791626,0.553024291992188,66.0458145141602,5.9037504196167,0.543367385864258,66.0735397338867,5.94976902008057,0.608531594276428,66.0497436523438,5.96904802322388,0.615544080734253,66.0097961425781,5.92822217941284,\n0.311814934015274,66.6080169677734,5.82792091369629,0.303657621145248,66.5355834960938,5.84635210037231,0.303891092538834,66.4423294067383,5.8451623916626,0.534069180488586,65.900146484375,5.59989976882935,0.445289999246597,66.0324401855469,5.63547468185425,0.19013500213623,65.9237213134766,5.27445840835571,0.248411864042282,66.0125198364258,5.31187200546265,0.355401009321213,66.0270233154297,5.45005798339844,0.36849918961525,65.9021224975586,5.36541795730591,0.468226164579391,66.4609451293945,6.06767511367798,0.398465186357498,66.4604797363281,5.99520444869995,0.403927952051163,66.5763702392578,6.01220273971558,0.481254249811172,66.5852890014648,6.07205533981323,0.423365563154221,66.67236328125,5.97987413406372,0.501110553741455,66.6854095458984,6.03886842727661,-0.108507618308067,66.4573135375977,5.36215257644653,-0.00540593266487122,66.5347900390625,5.43890762329102,0.0397471785545349,66.5337600708008,5.20846939086914,0.106978118419647,66.6758041381836,5.37109851837158,-0.0288374274969101,66.4802627563477,5.17677354812622,-0.13063670694828,66.3856201171875,5.25176382064819,-0.131238698959351,66.3111114501953,5.16853904724121,-0.0889036506414413,66.4072723388672,5.15994358062744,-0.0695089995861053,66.2565612792969,5.09908008575439,-0.0347457826137543,66.4038543701172,5.13775730133057,-0.111543387174606,66.0502624511719,5.29291200637817,-0.0859223157167435,66.0216064453125,5.22113990783691,-0.140995234251022,66.1301803588867,5.16212177276611,-0.176501885056496,66.1772994995117,5.22717523574829,-0.0662545412778854,66.0122299194336,5.10803079605103,-0.0630548298358917,66.1422271728516,5.06855535507202,-0.111702397465706,66.0850524902344,5.345139503479,-0.0245998352766037,66.0480041503906,5.36004734039307,-0.0117437839508057,66.0069274902344,5.31585597991943,-0.0957345366477966,66.1489410400391,5.40095901489258,-0.0271564722061157,66.0927505493164,5.40800809860229,0.048024594783783,66.0424957275391,5.34305477142334,0.0678019225597382,66.0012054443359,5.29897117614746,-0.0270158648490906,66.2692489624023,5.50255537033081,\n0.0342166125774384,66.2017593383789,5.49587297439575,0.136669307947159,66.0409698486328,5.27193641662598,0.589970827102661,66.4517822265625,6.10982465744019,0.602482318878174,66.5799026489258,6.1108193397522,0.617652654647827,66.6855926513672,6.07464265823364,0.471429198980331,66.3372344970703,6.05087423324585,0.586342811584473,66.3283615112305,6.09568166732788,-0.170357286930084,66.2484970092773,5.29768991470337,-0.142111584544182,66.2994613647461,5.37951040267944,0.0933360159397125,66.2600784301758,5.55985736846924,0.0511030554771423,66.3218994140625,5.56224727630615,0.482154756784439,66.1159133911133,5.88775968551636,0.0899962484836578,66.5365219116211,5.51782989501953,0.0510095059871674,66.4304580688477,5.54727172851563,-0.040442943572998,66.3938293457031,5.48892450332642,0.604585409164429,65.8763122558594,5.60510492324829,0.315579742193222,66.3502731323242,5.83340358734131,0.344145625829697,66.2855911254883,5.81716537475586,0.427275151014328,66.0847091674805,5.59603023529053,0.216442435979843,66.3406295776367,5.69978904724121,0.212495654821396,66.3996963500977,5.69720506668091,-1.5725245475769,68.1800994873047,3.91071939468384,-1.50637865066528,68.1347732543945,4.07610607147217,0.656096935272217,68.4091491699219,5.44423151016235,0.637661695480347,68.2986373901367,5.434485912323,0.499500125646591,68.3267974853516,5.51218271255493,0.512825489044189,68.4433288574219,5.55519723892212,0.508580207824707,65.8326110839844,5.39012861251831,0.402165621519089,66.3396530151367,5.9828839302063,-1.81354486942291,64.5644378662109,2.97059988975525,-1.93136477470398,64.6418838500977,2.75137257575989,-1.95731270313263,64.8901138305664,2.83552479743958,-1.84961891174316,64.7845611572266,3.09832501411438,-2.01690983772278,64.6968231201172,2.52522659301758,-2.04829406738281,64.9380722045898,2.62030720710754,-2.02419638633728,65.1593399047852,2.70687079429626,-1.95266103744507,65.0892105102539,2.95585203170776,-1.81269764900208,65.0109481811523,3.18123745918274,-1.02156329154968,67.5455551147461,4.57637357711792,-0.764275670051575,67.4825820922852,4.73440980911255,\n-0.896280884742737,67.224853515625,4.66984891891479,-1.14410126209259,67.3386840820313,4.51541137695313,-0.55177116394043,67.267936706543,4.77729320526123,-1.1068480014801,67.7565994262695,4.48404884338379,-1.05273461341858,67.6993713378906,4.53898859024048,-0.111181184649467,65.4405899047852,5.10773086547852,-0.0561369508504868,65.3391342163086,5.14034557342529,0.125633955001831,65.4179916381836,5.23909091949463,0.113990187644959,65.3392562866211,5.24592781066895,0.111880213022232,65.2643585205078,5.20026922225952,-0.0477806478738785,65.2671127319336,5.10454702377319,0.174226105213165,65.2245025634766,4.97604894638062,0.157422542572021,65.2043838500977,5.00838422775269,0.0547326505184174,65.2380447387695,4.87922716140747,0.0697361826896667,65.1666259765625,4.91322135925293,0.0213787853717804,65.1525268554688,4.98430442810059,0.138899087905884,65.1861419677734,5.06382036209106,0.328762203454971,65.3688430786133,5.31849336624146,0.315944105386734,65.3194351196289,5.2904839515686,0.303560465574265,65.2702255249023,5.22354459762573,0.390564888715744,65.2960891723633,5.28231906890869,0.320711404085159,65.20703125,5.02729845046997,0.312472552061081,65.1896743774414,5.06831502914429,0.299265295267105,65.1769027709961,5.12665605545044,-0.210386320948601,65.280632019043,5.01384258270264,-0.183789789676666,65.1958465576172,4.99877452850342,0.523830056190491,65.1652374267578,5.00263690948486,0.525573372840881,65.1469955444336,5.05865240097046,0.525611877441406,65.1278686523438,5.12980985641479,-0.0135367214679718,65.2102432250977,4.81425046920776,-0.119428813457489,65.1035995483398,4.7038140296936,-0.0122914016246796,65.141471862793,4.82254409790039,-0.136682495474815,65.0725326538086,4.72591781616211,-0.164990901947021,65.0656280517578,4.78104448318481,-0.0685207843780518,65.1274337768555,4.88056612014771,0.534092545509338,65.2353057861328,5.28844594955444,0.529576301574707,65.1784286499023,5.25725317001343,0.536379456520081,65.2778472900391,5.3163046836853,-0.781278729438782,64.9023666381836,4.58818006515503,-0.683728218078613,65.082633972168,4.68330574035645,\n-0.550516605377197,65.0189590454102,4.68632316589355,-0.566328406333923,65.2899017333984,4.78666210174561,-0.518296241760254,65.1661224365234,4.75740098953247,-0.464072287082672,65.0068054199219,4.69205713272095,0.294271200895309,65.2052536010742,5.18574190139771,0.371871501207352,65.1948089599609,5.19161796569824,0.375409930944443,65.1688232421875,5.13242673873901,0.379584163427353,65.2474670410156,5.23729133605957,-0.277781784534454,65.0891571044922,4.89954948425293,-0.320617944002151,65.1713562011719,4.89474630355835,0.379270881414413,65.1757278442383,5.07146787643433,0.381683140993118,65.1935119628906,5.02361011505127,0.0217822194099426,67.9152297973633,4.67433166503906,-0.0366468280553818,67.9465713500977,4.53814792633057,-0.209568098187447,67.9163360595703,4.72592782974243,-0.185183897614479,67.8871536254883,4.76847219467163,-0.11489549279213,67.9430084228516,4.64322090148926,-0.07878278195858,67.9076614379883,4.70778560638428,-0.486432611942291,67.8622817993164,4.85848760604858,-0.479252845048904,67.8834075927734,4.80050659179688,-0.31166011095047,67.8833236694336,4.79053115844727,-0.302128821611404,67.8629302978516,4.8461799621582,-0.0699242502450943,67.9439544677734,4.58363962173462,-0.0321404486894608,67.9271011352539,4.68475675582886,-0.84839916229248,67.9442901611328,4.72416257858276,-0.817674279212952,67.9537811279297,4.68964529037476,-0.642622470855713,67.8963775634766,4.78840732574463,-0.66112619638443,67.8770141601563,4.84315013885498,-0.976640462875366,67.9922256469727,4.56396627426147,-0.922485947608948,67.9768447875977,4.64150190353394,-0.944518089294434,67.9910888671875,4.53432559967041,-0.890174746513367,67.9810943603516,4.61109304428101,-2.61214447021484,68.4235382080078,0.626309394836426,-2.61460733413696,68.2048645019531,0.565218269824982,-2.60449290275574,67.9082107543945,0.529542624950409,-2.41717648506165,67.9139709472656,0.834124386310577,-2.41839075088501,68.1474990844727,0.901697635650635,-2.40960621833801,68.3388442993164,0.98421710729599,-2.03543877601624,67.8588485717773,2.5323314666748,\n-1.99847674369812,68.0756683349609,2.65659737586975,-2.12697720527649,67.8789138793945,2.17562532424927,-2.1407904624939,68.0801773071289,2.15506458282471,-2.15716886520386,68.2771759033203,1.95663928985596,-1.9116598367691,68.2668304443359,2.82119727134705,-0.399414658546448,66.313850402832,4.90973949432373,-0.46922767162323,66.1981811523438,4.83644199371338,-0.541793346405029,66.0904388427734,4.79319524765015,-0.690685033798218,66.273811340332,4.80406522750854,-0.668297290802002,66.404541015625,4.84742307662964,-0.557000637054443,66.4967193603516,4.87973260879517,-1.25525510311127,64.6040115356445,3.93202066421509,-1.28677356243134,64.9492340087891,4.04414558410645,-0.452210426330566,66.988639831543,4.77221202850342,-0.407773971557617,66.8490829467773,4.83213043212891,-0.669095873832703,66.7760162353516,4.68708944320679,-0.744894623756409,66.9653625488281,4.75742101669312,-0.116209656000137,66.1586456298828,5.00018882751465,-0.166509792208672,66.2036666870117,4.95744848251343,-0.0504381358623505,66.3249435424805,5.04221248626709,-0.155897364020348,66.0759048461914,4.94396877288818,-0.219209671020508,66.0934219360352,4.89901351928711,-0.269795179367065,66.1559677124023,4.75622940063477,-0.206839874386787,66.2887268066406,4.83997058868408,-0.0960048139095306,66.4099960327148,4.98053693771362,-0.189794600009918,66.5924453735352,4.98823595046997,-0.292384445667267,66.4564895629883,4.94714450836182,-1.09283316135406,66.6220779418945,4.31481504440308,-1.11839640140533,66.4353790283203,4.1522331237793,-1.34252917766571,66.4763870239258,3.97234845161438,-1.34927034378052,66.656120300293,4.13074445724487,-1.31199634075165,65.4082412719727,3.95422267913818,-1.28974056243896,65.5870590209961,4.02625274658203,-1.25334906578064,65.7742919921875,4.101806640625,-1.00320780277252,66.3806610107422,4.33500385284424,-0.939937949180603,66.6072235107422,4.44677925109863,-1.02820551395416,65.3601608276367,4.4644570350647,-0.967733502388,65.5154876708984,4.53393268585205,-1.18165278434753,65.3615188598633,4.31486988067627,-1.10994076728821,65.5396423339844,4.38164329528809,\n-1.05721974372864,65.7129745483398,4.48102855682373,-0.89256489276886,65.6604461669922,4.60488033294678,-0.806287407875061,65.7862396240234,4.6733775138855,-0.966511964797974,65.8407745361328,4.56615924835205,-0.0335729718208313,66.6911773681641,5.04780769348145,0.0759113132953644,66.7483749389648,5.1440544128418,0.0238386392593384,66.4921112060547,5.08664512634277,-0.0408133268356323,66.8121566772461,5.04976224899292,0.081950843334198,66.860221862793,5.14150333404541,-0.171659141778946,66.7482986450195,4.98865556716919,-0.170493364334106,66.8839721679688,4.97727346420288,-0.0232710093259811,66.9545211791992,5.03047323226929,0.135811060667038,67.0183563232422,5.14650106430054,-0.0391866117715836,66.4145812988281,5.1172890663147,-1.37148487567902,65.4394378662109,3.73456621170044,-1.35712015628815,65.6117324829102,3.79800224304199,-1.32312762737274,65.7973327636719,3.86948752403259,0.0183311402797699,67.0959701538086,4.96626901626587,0.142358392477036,67.2082595825195,5.07538461685181,-0.140984281897545,67.0089492797852,4.90126895904541,0.185467749834061,67.3298034667969,4.99041795730591,-0.746942579746246,65.6734161376953,4.62390184402466,-0.359695255756378,66.0493392944336,4.73637294769287,-0.428380846977234,65.9834823608398,4.74483966827393,-1.16383278369904,64.5658493041992,4.12072086334229,-1.15625607967377,64.9629516601563,4.25756406784058,-1.20151329040527,65.9678268432617,4.16606521606445,-0.694171845912933,66.6185607910156,4.68004035949707,-0.820064544677734,66.4109878540039,4.66304492950439,-0.887491345405579,66.7378692626953,4.55708074569702,-0.371411561965942,66.5277709960938,4.95121288299561,-0.405768245458603,66.7212524414063,4.91648244857788,-0.558909773826599,66.6490173339844,4.81410980224609,-0.917269349098206,66.2333068847656,4.6307692527771,-1.25942957401276,66.0038757324219,3.94744896888733,-1.39873218536377,65.0957946777344,3.61290645599365,-1.39295423030853,64.7964248657227,3.55453634262085,-1.35852468013763,64.7153930664063,3.68139219284058,-1.3772064447403,65.0264739990234,3.76843571662903,-2.07197546958923,64.6383666992188,0.931430459022522,\n-2.08498668670654,65.0384979248047,0.906979918479919,-2.06042790412903,65.3805236816406,0.877483546733856,-2.05097699165344,65.1512985229492,1.2759302854538,-2.06015038490295,64.8550186157227,1.30809426307678,-2.02402448654175,64.4673690795898,1.37764811515808,-0.317405670881271,64.1438674926758,4.73388910293579,-0.199191853404045,64.3656463623047,4.92192602157593,0.0584587752819061,64.4125900268555,5.01743650436401,0.323728114366531,65.7889404296875,5.27015924453735,0.27680429816246,65.713134765625,5.23587036132813,0.100094795227051,65.8025588989258,5.14045476913452,0.16403341293335,65.8722991943359,5.20320177078247,0.672230005264282,68.5570983886719,5.43079471588135,-1.4498655796051,65.2241744995117,3.42291474342346,-1.47264587879181,64.8126754760742,3.36299705505371,-1.70768797397614,65.3423156738281,3.26869869232178,0.445904701948166,66.7886428833008,5.8851146697998,0.457289844751358,66.9578247070313,5.61104488372803,0.546737313270569,66.986572265625,5.79516410827637,0.524746656417847,66.8179473876953,5.94628763198853,0.32802876830101,66.7540588378906,5.70246267318726,0.559999704360962,67.1466827392578,5.70663118362427,0.664358973503113,67.1507263183594,5.74432706832886,0.65339183807373,67.0009765625,5.82805252075195,0.566108703613281,67.267822265625,5.64640045166016,0.671553015708923,67.2614898681641,5.68974256515503,-0.050879642367363,68.516845703125,5.41659116744995,0.0356159210205078,68.4701309204102,5.42639017105103,-0.0643284767866135,68.6498718261719,5.38900327682495,0.0299199819564819,68.5855102539063,5.41929721832275,-0.1483254134655,70.409065246582,4.80879259109497,-0.281782209873199,70.0384140014648,4.80547046661377,-0.274167895317078,70.3873748779297,4.66984558105469,-0.255148202180862,69.788200378418,4.88298845291138,-0.396128743886948,69.6997528076172,4.846275806427,-0.454765975475311,70.0203094482422,4.78745889663696,-0.442509591579437,70.3879318237305,4.53379154205322,-0.835795640945435,63.4386901855469,3.51720428466797,-0.953054666519165,63.552604675293,3.55810213088989,-0.67583042383194,63.3441200256348,3.49282073974609,\n0.406194537878037,64.6415786743164,5.26836204528809,0.415552586317062,64.7716598510742,5.37029790878296,0.213078200817108,64.6159896850586,5.18863344192505,0.240144103765488,64.7654647827148,5.33822298049927,-2.11256265640259,66.0385513305664,0.873668432235718,-1.94346523284912,64.8523025512695,0.400435388088226,-2.05047631263733,65.3201141357422,0.366720616817474,-1.57476997375488,64.3679351806641,1.78875243663788,-1.07562649250031,63.6925163269043,3.55823540687561,-1.17126393318176,63.8498039245605,3.55429005622864,-0.390977293252945,70.8356475830078,4.3555736541748,-0.744130969047546,70.8145904541016,4.00300979614258,-2.03400230407715,65.742919921875,1.28652930259705,-1.8791264295578,66.3266220092773,2.87983322143555,-2.03246521949768,66.411979675293,2.61124539375305,-1.82173979282379,66.2470703125,3.17122912406921,-1.86850535869598,66.0474166870117,3.08610796928406,-1.98421514034271,66.1042938232422,2.81830239295959,-2.08096957206726,66.1626129150391,2.53493142127991,-1.84771418571472,67.1879348754883,2.95442819595337,-1.80135297775269,67.0301895141602,3.23959875106812,-1.76515674591064,66.785041809082,3.07056713104248,-1.87070560455322,66.8938522338867,2.78359508514404,-1.70357024669647,66.9201354980469,3.48094010353088,-1.69575119018555,66.6819305419922,3.3398289680481,-0.139177143573761,68.8369216918945,5.33272504806519,-0.0133581459522247,68.7448959350586,5.38222455978394,-0.509039878845215,63.362361907959,3.27057361602783,-0.262469559907913,63.2758140563965,3.27482867240906,-0.699285864830017,63.4942016601563,3.1197497844696,-0.683854222297668,63.4490356445313,3.25789666175842,-0.0951341688632965,65.6181488037109,5.05984973907471,-0.0582968145608902,65.8303070068359,5.02478265762329,0.124396234750748,65.5714721679688,5.22218894958496,-0.760870814323425,69.1461181640625,4.90825128555298,-0.785614848136902,69.2844390869141,4.80389881134033,-0.508977234363556,69.2027816772461,5.00977611541748,-1.54019856452942,63.1496925354004,1.83554863929749,-1.44083988666534,62.6188354492188,1.92539572715759,-1.33062088489532,62.0820846557617,2.01348876953125,\n-1.80600261688232,62.2738304138184,1.6899915933609,-1.88436985015869,62.8275032043457,1.60266172885895,-1.94922614097595,63.3644943237305,1.52231955528259,-0.0513340383768082,65.9179153442383,5.04434442520142,-0.19064649939537,65.8681106567383,4.94524908065796,-0.183843195438385,65.9644622802734,4.94034814834595,-0.808202028274536,68.6531295776367,5.0890908241272,-0.595443367958069,68.5742263793945,5.154221534729,-0.396508872509003,68.4809265136719,5.19436264038086,-1.70305275917053,64.4079360961914,2.08354473114014,-1.74098002910614,64.472038269043,1.84414160251617,-1.74135506153107,64.3974456787109,2.35125732421875,-1.59747552871704,64.2888259887695,2.34509325027466,-1.48897337913513,68.5760726928711,4.09610462188721,-1.40559566020966,68.6938400268555,4.24785947799683,-1.45287621021271,68.5857849121094,4.25322437286377,-1.34823858737946,68.7632751464844,4.3747091293335,-1.37033426761627,68.5849533081055,4.42276239395142,-2.09475660324097,65.2050933837891,2.49065113067627,-2.16352653503418,65.2407379150391,2.2720046043396,-2.13584589958191,65.6896286010742,2.43884897232056,-2.04241967201233,65.6157836914063,2.68238019943237,-1.98007988929749,65.5083999633789,2.85055589675903,-1.95554280281067,65.7304077148438,2.97573184967041,-2.04487562179565,65.7516098022461,2.72064995765686,-2.03574252128601,65.9118804931641,2.75876307487488,-1.91338920593262,65.8771209716797,3.0145218372345,-2.13501143455505,65.9259414672852,2.47491431236267,-1.25092124938965,64.1620712280273,3.57095456123352,-1.56101667881012,64.4123153686523,3.2118501663208,-1.47741937637329,64.2375869750977,3.20888209342957,-1.61829733848572,64.3333435058594,3.0396671295166,-1.41418766975403,64.1123580932617,3.13771891593933,-1.62954115867615,64.3046188354492,2.78890919685364,-0.808276295661926,69.8435897827148,4.60829305648804,-0.824947237968445,70.0887680053711,4.56946516036987,-0.813838243484497,70.4376373291016,4.31216812133789,-0.600288033485413,64.1812286376953,4.45011425018311,-0.505940973758698,63.940616607666,4.6615161895752,-0.783298969268799,64.0240707397461,4.29003620147705,\n-0.921410918235779,63.9113693237305,4.18760967254639,-0.941422820091248,64.3103332519531,4.20115423202515,-0.759661674499512,64.3785247802734,4.38072729110718,0.147928476333618,66.7239532470703,5.34744739532471,0.174289703369141,66.8014602661133,5.31767988204956,0.670596718788147,70.221435546875,5.0761866569519,0.670153975486755,69.8623809814453,5.15234136581421,0.674422025680542,69.5756072998047,5.2115650177002,0.440570801496506,69.6572647094727,5.20759725570679,0.42556032538414,69.9269866943359,5.12856292724609,0.430853515863419,70.2512741088867,5.03137493133545,-0.90849757194519,62.6430702209473,2.36282968521118,-0.947414755821228,63.0990028381348,2.35613656044006,-0.329749047756195,62.8400077819824,2.7103910446167,-0.315626204013824,62.4643325805664,2.68951559066772,0.263793796300888,64.4568786621094,5.05091381072998,0.403211146593094,64.4612045288086,5.07767200469971,-1.39945721626282,64.1531295776367,2.29242897033691,-0.207591384649277,70.7967300415039,4.52281379699707,0.0430980920791626,70.7885131835938,4.67768573760986,-0.101195529103279,64.6073379516602,5.09178304672241,-0.0652517527341843,64.7951049804688,5.23603582382202,-1.10083091259003,63.8160858154297,3.92026376724243,-1.13330459594727,63.9689064025879,3.88364458084106,-0.88843297958374,63.7760963439941,4.24809598922729,0.0729179680347443,65.9188919067383,5.20343208312988,0.0801597237586975,65.8802871704102,5.14752531051636,0.0183428525924683,65.8659210205078,5.08235120773315,0.0127083361148834,65.9394607543945,5.16200304031372,-1.93992030620575,67.2547225952148,2.58971214294434,-1.95857298374176,67.5483322143555,2.71937894821167,-1.93557977676392,67.5112228393555,3.04516434669495,-2.03416466712952,67.3294143676758,2.27365493774414,-2.02730870246887,67.6041946411133,2.41377878189087,-1.9924556016922,67.8220825195313,2.85915374755859,-1.96827554702759,67.7863311767578,3.1956627368927,-0.350411772727966,65.6730117797852,4.88298177719116,-0.356381922960281,65.5427932739258,4.86791706085205,-0.243584454059601,65.6547775268555,4.94647455215454,-0.254453182220459,65.4844512939453,4.99992895126343,\n-0.363168507814407,65.4404754638672,4.91674470901489,-0.272338837385178,63.1153030395508,3.72361707687378,-0.0289112478494644,63.0413627624512,3.70450663566589,-0.670747756958008,61.767951965332,2.3687744140625,-0.804776668548584,62.2013702392578,2.36921405792236,-0.259763211011887,62.0463714599609,2.62303972244263,-0.177231281995773,61.6228904724121,2.54752326011658,-1.9927704334259,66.9824752807617,2.5082311630249,-2.05750274658203,67.0365829467773,2.24574327468872,-0.17700007557869,69.483772277832,5.03800296783447,-0.298267304897308,69.5041885375977,4.97279596328735,-0.928951978683472,64.6156616210938,4.38640880584717,-0.891277432441711,64.9078826904297,4.47258186340332,-0.779518723487854,68.4324493408203,4.99159145355225,-1.02257990837097,68.3955917358398,4.80787563323975,0.34947481751442,68.0630874633789,4.85545587539673,0.423168927431107,68.0462036132813,4.90282201766968,0.342937141656876,70.5613250732422,4.89104413986206,0.147651463747025,70.5392761230469,4.86807298660278,-1.2157906293869,63.8193016052246,3.07285928726196,-1.10651934146881,63.7029571533203,3.07594728469849,-1.2298492193222,63.8758430480957,2.68809795379639,-1.44278490543365,64.0540924072266,2.70295476913452,-1.05901253223419,69.2478637695313,4.56301927566528,0.474990516901016,67.7075805664063,5.08277940750122,0.364992707967758,67.7215957641602,4.92603778839111,-1.09955096244812,70.7294235229492,3.56823682785034,-0.959166765213013,70.7751235961914,3.73905348777771,-0.93732762336731,70.4110260009766,4.03635215759277,-1.04437601566315,70.397331237793,3.90019869804382,-1.09157884120941,70.2968444824219,3.71844005584717,-0.315446317195892,63.432933807373,2.81047368049622,-0.31975319981575,63.3010559082031,2.76526927947998,-0.650783777236938,63.4768257141113,2.6024923324585,-0.637265503406525,63.5470428466797,2.6762809753418,-0.927510976791382,63.6720161437988,2.41135168075562,-0.933242917060852,63.7730255126953,2.48379826545715,-2.02392649650574,66.1573867797852,1.58263778686523,-2.07431602478027,66.1202239990234,1.66325640678406,-2.05163955688477,65.893913269043,1.64001560211182,\n-1.99583303928375,65.9085083007813,1.55370533466339,-2.12772655487061,66.1783981323242,1.76517724990845,-2.0209858417511,65.6275253295898,1.60138118267059,-1.98261296749115,65.6147766113281,1.51146507263184,-1.5341135263443,64.1635208129883,2.74776482582092,-1.312180519104,63.9692573547363,3.08655452728271,-1.15575242042542,69.7564849853516,4.01516532897949,-1.1415137052536,69.8439407348633,4.19292688369751,-1.14436554908752,69.5396728515625,4.26946496963501,-1.18450546264648,69.4577713012695,4.09269237518311,-1.07104623317719,69.8846588134766,4.34977245330811,-1.0616762638092,69.5953521728516,4.4445161819458,-1.24094617366791,69.2243041992188,4.1032886505127,-2.03621077537537,66.3975296020508,0.914780795574188,-2.04223775863647,66.7845764160156,0.975087583065033,-2.09031414985657,66.5847930908203,1.37293410301209,-2.02425837516785,66.1338958740234,1.3306941986084,-0.78000795841217,66.1221771240234,4.73541688919067,-0.623443305492401,65.9943084716797,4.75739336013794,-1.57149791717529,68.5909423828125,3.5501401424408,-1.6832492351532,68.5774765014648,3.2073016166687,-1.4975346326828,68.9557037353516,3.64432191848755,0.340592056512833,68.1518402099609,5.09618616104126,0.235334187746048,68.158561706543,5.09759378433228,0.41490575671196,68.1203460693359,4.91284275054932,0.264055222272873,68.1476898193359,4.90246868133545,0.128037631511688,68.2148361206055,4.91389608383179,0.0906608700752258,68.243896484375,5.10406923294067,0.314071863889694,67.8479843139648,4.79379749298096,0.562735438346863,67.48779296875,5.44729280471802,0.538991689682007,65.3839263916016,5.28918361663818,0.577238440513611,65.6157073974609,5.26028776168823,-1.06519198417664,64.5729827880859,4.26825094223022,-0.474201023578644,65.2277221679688,4.79333591461182,-0.499527037143707,65.3600311279297,4.80795907974243,0.416984349489212,65.6513366699219,5.29502534866333,0.347670465707779,65.46923828125,5.29197025299072,-1.80286026000977,64.601318359375,1.68279564380646,-1.7073689699173,64.5272598266602,1.6213926076889,-1.80837976932526,64.6741714477539,1.50764513015747,\n-1.8718740940094,64.7724533081055,1.58767604827881,-0.815224170684814,63.6127471923828,2.81109523773193,-2.26979184150696,68.4025268554688,1.87078094482422,-2.2208297252655,68.2557067871094,1.97225749492645,-2.37703514099121,68.6007461547852,1.66589772701263,-2.26262497901917,68.4405975341797,1.81961536407471,-1.03683507442474,64.9424285888672,4.38036823272705,-0.540904700756073,61.3368988037109,2.35497760772705,-0.41677650809288,60.9281539916992,2.3291540145874,-0.325470447540283,63.4140090942383,2.96501040458679,-0.594686388969421,63.5077323913574,2.89057016372681,-0.981541395187378,63.6064987182617,3.27650785446167,-1.10026836395264,63.7169075012207,3.26976680755615,0.526109218597412,68.14697265625,5.26719665527344,0.568230986595154,68.1727981567383,5.35188436508179,0.386983662843704,68.1658706665039,5.28233337402344,0.448243707418442,68.1876449584961,5.35850811004639,-0.532591819763184,65.5348815917969,4.79324674606323,-0.523976564407349,65.6869888305664,4.78611993789673,0.00548842549324036,60.8566741943359,2.45223522186279,-0.0831018388271332,61.2306098937988,2.49952602386475,0.0188752114772797,68.3327026367188,5.30487537384033,-0.0704790055751801,68.363037109375,5.28680944442749,-2.15657114982605,67.4172897338867,2.03161334991455,-2.16407775878906,67.4641799926758,1.9778904914856,-2.15711736679077,67.6560134887695,2.05931353569031,-2.13285875320435,67.6450576782227,2.12807035446167,-2.17298078536987,67.6296005249023,1.98325932025909,-2.14432954788208,67.4562301635742,1.92806100845337,-2.16967344284058,67.8814086914063,2.09683799743652,-2.21320962905884,67.8581390380859,2.04574823379517,-2.18964791297913,68.0818328857422,2.05832767486572,-1.10682272911072,68.3520812988281,4.70458507537842,-1.15601515769959,68.3128433227539,4.61932134628296,0.207888931035995,68.7812576293945,5.28072357177734,0.263615399599075,68.5072784423828,5.41212558746338,0.464819699525833,68.8843994140625,5.4324893951416,0.398692756891251,68.7625350952148,5.45540761947632,-1.25822556018829,70.451057434082,3.21246004104614,0.339573413133621,67.0314331054688,5.40791082382202,\n0.345676153898239,67.1595001220703,5.31332588195801,0.257675498723984,66.9607238769531,5.37208271026611,0.27671816945076,67.0952606201172,5.29533100128174,-0.346919864416122,64.5955657958984,4.886794090271,-0.269924342632294,64.8229598999023,5.07238912582397,0.471486002206802,69.3630905151367,5.26161623001099,-1.0702668428421,68.2463302612305,4.70731925964355,-1.12266719341278,68.2153015136719,4.63162517547607,-0.994616150856018,68.2830963134766,4.80261564254761,-1.21383774280548,70.1628952026367,3.43133807182312,-1.29199075698853,70.0936126708984,3.19760370254517,-1.54211235046387,66.7447891235352,3.85741925239563,-1.62783098220825,66.8216247558594,3.68867087364197,-1.64418721199036,67.0815963745117,3.87778115272522,-1.56714427471161,66.9721908569336,4.04104709625244,-1.7402982711792,67.1906433105469,3.70685386657715,-1.69936990737915,67.5307006835938,4.00219488143921,-1.67731153964996,67.329833984375,4.1088399887085,-1.59077250957489,67.2291412353516,4.29393005371094,-1.95055508613586,65.1543350219727,1.46215105056763,-1.56346881389618,69.2975921630859,3.26897525787354,-1.4090815782547,69.4477081298828,3.40556597709656,-1.74627792835236,64.440071105957,1.54838252067566,-0.734020113945007,68.327018737793,4.86467933654785,-0.588288068771362,68.3583221435547,4.91467189788818,-0.612378001213074,68.3541793823242,5.02480363845825,-0.440865159034729,68.3609390258789,5.06021976470947,-0.777303099632263,68.3321228027344,4.97459363937378,-0.592226624488831,68.4283676147461,5.0551962852478,-0.553448915481567,64.6106491088867,4.63129711151123,-2.06321501731873,64.8149185180664,2.1156005859375,-1.96014213562012,64.6624221801758,2.01800656318665,-2.00579595565796,64.7556381225586,1.88240575790405,-2.09146332740784,64.8734741210938,1.97533786296844,-2.03775382041931,64.8883743286133,1.79650235176086,-2.08510828018188,64.9430160522461,1.88319373130798,-0.757157921791077,64.6142654418945,4.48394203186035,-0.614307522773743,68.9632034301758,5.11051034927368,-0.794221878051758,68.9102096557617,5.09240007400513,-0.80116593837738,69.030632019043,5.000319480896,\n-0.522611021995544,68.8117065429688,5.20736932754517,-0.591552793979645,68.7441177368164,5.20382118225098,0.17551189661026,69.9622344970703,5.07451820373535,0.165461927652359,70.2903289794922,4.94730806350708,0.194429904222488,69.6949996948242,5.19657707214355,-2.11258745193481,66.1687545776367,1.8726019859314,-2.16341876983643,65.9415130615234,1.83260381221771,-2.11326837539673,66.3250961303711,1.86445963382721,-2.12052845954895,66.2355880737305,2.01137447357178,-2.17510890960693,65.9578628540039,1.98067176342011,-2.17870330810547,65.7067718505859,1.92334616184235,-2.15139293670654,65.689697265625,1.78150403499603,-0.486087083816528,64.3405914306641,4.7109055519104,-2.1408896446228,66.2031402587891,2.26762771606445,-2.19596338272095,65.9495010375977,2.19994449615479,-2.20460176467896,65.7087783813477,2.1474175453186,-1.99888551235199,63.9207420349121,1.44241523742676,-1.61844539642334,63.6698875427246,1.73408043384552,-2.11890387535095,63.9976463317871,-0.342489182949066,-2.13630628585815,64.3602828979492,-0.346500098705292,-2.03976392745972,63.9575653076172,0.41189306974411,-2.06836891174316,63.4655876159668,0.399017214775085,-2.16437578201294,62.9744300842285,0.377947419881821,-2.14121961593628,65.2657470703125,1.87458062171936,-2.0932993888855,65.2478637695313,1.74254786968231,-1.51281440258026,64.6265411376953,3.29674959182739,-2.05109286308289,64.7572555541992,2.30762910842896,-1.933061003685,64.5889587402344,2.20823669433594,-1.90012407302856,64.5380249023438,2.43933463096619,-1.31578600406647,66.8648910522461,4.27143526077271,-1.30149531364441,67.0518417358398,4.42273664474487,-1.10101783275604,68.8673095703125,4.8091459274292,-1.07546055316925,69.011474609375,4.71746587753296,-1.42160642147064,65.5252685546875,3.52144980430603,-1.40683698654175,65.6822128295898,3.57834124565125,-1.58224856853485,65.6108703613281,3.29807591438293,-1.57773494720459,65.7677688598633,3.37011218070984,-1.54902422428131,65.9346160888672,3.42232990264893,-1.39247977733612,65.8589630126953,3.64873790740967,0.682592511177063,67.4627838134766,5.50372314453125,\n-0.0231511294841766,67.9797210693359,4.53457832336426,0.0689001083374023,67.9140777587891,4.6100025177002,-1.12562048435211,70.0753631591797,3.87472653388977,-1.07722532749176,70.1355972290039,4.04010963439941,-1.01903128623962,70.1703643798828,4.19287395477295,-2.32464599609375,68.0832672119141,2.01199150085449,-1.20537066459656,69.1091156005859,4.41851234436035,-1.26697885990143,69.1107482910156,4.23781585693359,-2.11697959899902,64.9762344360352,2.40753579139709,-2.1550624370575,65.013916015625,2.20364284515381,-1.74699115753174,64.4294586181641,2.85393071174622,-1.83707749843597,64.4808044433594,2.65622782707214,-1.74542367458344,64.3839721679688,2.58440184593201,0.461882144212723,65.7179183959961,5.31436204910278,-1.21816754341125,68.5262603759766,4.68819999694824,-1.1211758852005,68.6093826293945,4.88013124465942,-1.2851630449295,68.4350738525391,4.530442237854,0.635958552360535,66.828239440918,5.97853088378906,-1.26056778430939,68.8390579223633,4.57395887374878,-1.2935973405838,68.7086868286133,4.65042591094971,0.37334069609642,68.1957473754883,5.35311079025269,0.246664017438889,68.2045364379883,5.33756542205811,0.584861993789673,65.7197570800781,5.3216290473938,0.519932627677917,65.7092132568359,5.32898473739624,-0.447787255048752,63.2590141296387,3.48250794410706,-0.178221330046654,63.1808700561523,3.47902083396912,-1.355189204216,68.3519134521484,4.40949535369873,-0.941252827644348,67.045654296875,4.67198657989502,-1.01300930976868,66.9293823242188,4.6082558631897,0.459396570920944,65.6318435668945,5.29486227035522,0.576122164726257,65.8132858276367,5.38352203369141,-1.74535763263702,68.283805847168,3.39701509475708,-1.67534267902374,68.249870300293,3.62321925163269,-1.66290307044983,68.0045700073242,3.77771782875061,-1.77787244319916,68.0544128417969,3.52214884757996,-1.83792591094971,68.1034927368164,3.3171329498291,-2.01141786575317,62.4788932800293,1.08764457702637,-2.03550362586975,63.0831871032715,1.03389322757721,-2.08057498931885,63.6488494873047,0.996630012989044,-0.727405667304993,63.7856407165527,4.48693656921387,\n0.403872281312943,65.4369735717773,5.29749917984009,0.212884962558746,66.9366912841797,5.31471633911133,-2.08154916763306,64.1719741821289,0.963233709335327,-1.63406300544739,61.1202850341797,1.91978907585144,-1.71581184864044,61.6675415039063,1.79084861278534,-1.21979427337646,61.5442085266113,2.10970258712769,-1.11507868766785,61.0497703552246,2.22066450119019,0.397110790014267,65.3379211425781,5.3165454864502,0.150394052267075,69.1584396362305,5.24437236785889,0.25466313958168,68.3417129516602,5.44970941543579,0.385993629693985,68.3356323242188,5.45527410507202,-1.99925017356873,64.411994934082,0.410330653190613,-1.75443303585052,65.9802856445313,3.32582831382751,-1.78535091876984,65.8136138916016,3.24826383590698,-1.83421552181244,65.6668930053711,3.21271967887878,-1.54078459739685,67.6767730712891,4.0923023223877,-1.53024888038635,67.7846069335938,4.08631801605225,-1.48656177520752,67.670166015625,4.18855333328247,-0.0336967706680298,68.2866058349609,5.11544227600098,-0.163565188646317,68.3031311035156,5.08582973480225,-0.0391643792390823,68.3049163818359,5.13495540618896,-1.37579870223999,67.9069976806641,4.26235771179199,-1.52683842182159,67.8808059692383,4.10175180435181,-1.481609582901,67.9332046508789,4.13464260101318,-1.81708836555481,67.308219909668,3.50301480293274,-1.89029633998871,67.4270095825195,3.34287810325623,-1.76982736587524,67.7455520629883,3.71983504295349,-1.77171719074249,67.5614318847656,3.75459861755371,-2.19584512710571,67.2965621948242,1.77712988853455,-2.24088382720947,67.2952575683594,1.7981219291687,-2.2440721988678,67.1937026977539,1.73284959793091,-2.19305682182312,67.1954498291016,1.71282660961151,-2.2493724822998,67.2783508300781,1.84175550937653,-2.2523455619812,67.1691207885742,1.77946817874908,-2.23360681533813,67.0472564697266,1.73493158817291,-2.22762441635132,67.0837478637695,1.69295918941498,-2.17817640304565,67.0792694091797,1.67337989807129,-2.20355939865112,66.9430236816406,1.71033716201782,-2.20649123191834,66.9891357421875,1.68191468715668,-2.15764904022217,66.8303604125977,1.69480717182159,\n-2.16480088233948,66.9624557495117,1.67032980918884,-2.06757593154907,66.5061492919922,2.32285475730896,-2.10238003730774,66.5130615234375,2.10629987716675,-2.09369444847107,66.5944900512695,1.94952178001404,-1.70596849918365,66.1777954101563,3.40870594978333,-1.55709671974182,66.1401290893555,3.50885915756226,-0.797003388404846,65.1296768188477,4.57803392410278,-0.741232514381409,65.3470916748047,4.63011360168457,-1.89674711227417,65.4108810424805,3.107266664505,-1.34887731075287,66.069221496582,3.7221884727478,-2.14270448684692,64.8188018798828,-0.334672451019287,-0.930856823921204,65.1602783203125,4.46657943725586,-0.869108200073242,65.3729095458984,4.52292776107788,-2.12190103530884,65.0732574462891,1.88043594360352,-2.15592980384827,65.0524444580078,2.02393579483032,-2.18910598754883,65.2617797851563,2.05802536010742,0.512521862983704,68.5822525024414,5.50223302841187,-1.98135113716125,65.1861190795898,1.54213905334473,-1.6288822889328,66.6003341674805,3.56421518325806,-1.55428493022919,66.532600402832,3.74061942100525,-2.1121072769165,66.5616455078125,1.80101943016052,-2.10204029083252,66.4258270263672,1.90585076808929,-2.13509225845337,66.374397277832,1.7990757226944,-2.35635566711426,67.3067321777344,0.812714219093323,-2.39229607582092,67.6440200805664,0.794500529766083,-2.57374215126038,67.5606384277344,0.517772197723389,-2.5351095199585,67.119384765625,0.561946094036102,-1.21843302249908,68.1966247558594,4.51577281951904,-1.88325524330139,67.767219543457,3.43066549301147,-1.81970810890198,67.9292221069336,3.48891401290894,-1.75683486461639,67.9004592895508,3.69498109817505,-1.8772451877594,67.9753952026367,3.26425886154175,-1.53521847724915,68.5107879638672,3.81524801254272,-1.3711564540863,68.828971862793,3.95661473274231,-1.41476547718048,68.9009323120117,3.81379532814026,-1.80806887149811,68.30419921875,3.1439528465271,-1.87774705886841,68.1662673950195,3.07762551307678,-2.6015841960907,68.5840148925781,0.712429046630859,-2.52507567405701,68.69482421875,0.882501721382141,-2.48019790649414,68.5404968261719,0.898567080497742,\n0.500611424446106,68.1400527954102,5.193274974823,0.348428159952164,68.1519470214844,5.17658805847168,-2.0661473274231,65.0544357299805,1.75413143634796,-1.92961394786835,64.9724426269531,1.54710781574249,-1.90213859081268,64.9244155883789,1.46848058700562,-2.34519624710083,67.8858871459961,1.96922051906586,-2.38531565666199,68.0801696777344,1.97755885124207,-2.28863024711609,67.8838806152344,2.00988554954529,-2.44026684761047,68.2774887084961,1.92449355125427,-2.37290835380554,68.284049987793,1.94873142242432,-2.10232996940613,66.960578918457,1.67264628410339,-2.07494330406189,66.904296875,1.65739774703979,-2.05417490005493,66.9678649902344,1.66187787055969,-2.04683780670166,67.0705718994141,1.67697703838348,-2.11067008972168,66.8728408813477,1.66792440414429,-2.75847244262695,67.9617462158203,0.94255542755127,-2.73985648155212,67.7981796264648,0.92533802986145,-2.75659584999084,68.088752746582,0.982750296592712,-2.79887843132019,68.0288391113281,1.05075478553772,-2.77713751792908,67.9088439941406,0.994415462017059,-2.75649619102478,67.7685165405273,0.977071523666382,-2.35955667495728,67.7633590698242,1.34055125713348,-2.25957608222961,67.6356582641602,1.41453206539154,-2.37699103355408,67.6495971679688,1.24427485466003,-2.45081090927124,67.7506256103516,1.17347347736359,-2.36532330513,66.464485168457,1.54881620407104,-2.35082054138184,66.3426284790039,1.57185876369476,-2.27199625968933,66.5775146484375,1.62538266181946,-2.1869649887085,66.3295822143555,1.72240126132965,-2.29197859764099,66.1882400512695,1.61246955394745,-2.4648904800415,66.2750930786133,1.26518499851227,-2.49455857276917,66.4529876708984,1.30809855461121,-2.48511815071106,66.6359558105469,1.3474086523056,-2.27331113815308,67.9336547851563,1.74671864509583,-2.29868316650391,67.9050064086914,1.65444278717041,-2.34973835945129,67.957633972168,1.62568306922913,-2.36209845542908,68.0078201293945,1.64591896533966,-2.33179688453674,67.892692565918,1.55466496944427,-2.40474534034729,67.9688491821289,1.53484129905701,-2.4497275352478,68.0374603271484,1.53600335121155,\n-2.13426208496094,66.7055740356445,1.7371917963028,-2.18047690391541,66.6938400268555,1.68803453445435,-2.11631941795349,66.7367782592773,1.77710032463074,-2.17466807365417,66.7814331054688,1.65517473220825,-2.17853713035584,66.5098495483398,1.71980178356171,-2.24601554870605,66.6240310668945,1.63700735569,-2.23596453666687,66.7149353027344,1.61178421974182,-2.08406949043274,66.2603149414063,1.58167397975922,-2.12804293632507,66.2284851074219,1.63206398487091,-2.15880513191223,66.2021179199219,1.48221611976624,-2.20739459991455,66.1964111328125,1.55108535289764,-2.1796190738678,66.2102890014648,1.69114816188812,-2.51349091529846,68.4639205932617,1.8059241771698,-2.43427896499634,68.4770355224609,1.82119417190552,-2.59442925453186,68.6118392944336,1.63751804828644,-2.50176239013672,68.6313934326172,1.64476716518402,-2.73913168907166,68.7284088134766,1.22234892845154,-2.62747955322266,68.7517471313477,1.21627235412598,-2.47974514961243,68.7250289916992,1.15428924560547,-2.73278260231018,68.6157150268555,0.694849789142609,-2.74724912643433,68.4496536254883,0.59031093120575,-2.70658230781555,68.7177963256836,0.83696711063385,-2.81796073913574,68.6995697021484,0.851444661617279,-2.8422474861145,68.60498046875,0.71686464548111,-2.85389399528503,68.4456481933594,0.619735836982727,-2.82498502731323,67.9058685302734,0.533349275588989,-2.72819066047668,67.9063491821289,0.496379375457764,-2.7461109161377,68.2178268432617,0.52613776922226,-2.84833526611328,68.2153625488281,0.559641242027283,-2.59032201766968,66.4807510375977,0.928826689720154,-2.50743699073792,66.4137268066406,0.886127471923828,-2.57565426826477,66.6966857910156,0.700164079666138,-2.65918207168579,66.7431793212891,0.74626624584198,-2.42311024665833,66.4989776611328,0.856422662734985,-2.48622512817383,66.7392807006836,0.686086356639862,-2.63933992385864,67.0922927856445,0.552085697650909,-2.72536826133728,67.115592956543,0.598837077617645,-2.29795503616333,66.2649078369141,1.18770742416382,-2.3826699256897,66.2012023925781,1.22903323173523,-2.16459393501282,66.6759796142578,1.23249101638794,\n-2.24789547920227,66.8142013549805,1.06252408027649,-2.40808701515198,68.0817337036133,1.90571987628937,-2.46647810935974,68.26220703125,1.85624074935913,-2.36823225021362,67.9038314819336,1.90009796619415,-2.36028814315796,67.9237442016602,1.82882857322693,-2.3948814868927,68.0829315185547,1.82897078990936,-2.44945406913757,68.2431030273438,1.78114855289459,-2.54854297637939,68.42822265625,1.74963080883026,-2.6382532119751,68.5577239990234,1.59853911399841,-2.52954077720642,68.3862228393555,1.68799185752869,-2.62005686759949,68.4959335327148,1.55760312080383,-2.19158935546875,67.5043563842773,1.83474671840668,-2.2549786567688,67.5419082641602,1.82864689826965,-2.26400327682495,67.695068359375,1.94132459163666,-2.20915555953979,67.6728439331055,1.95828580856323,-2.30236792564392,67.5678024291992,1.79972159862518,-2.31646919250488,67.7085952758789,1.90358877182007,-2.34178495407104,67.745491027832,1.84141647815704,-2.3300633430481,67.6228179931641,1.74513912200928,-2.33315491676331,67.6771469116211,1.68879354000092,-2.34013700485229,67.7836227416992,1.77808821201324,-2.17727994918823,67.4078979492188,1.65498471260071,-2.1150004863739,67.3318939208984,1.61912786960602,-2.25076627731323,67.3621215820313,1.53202605247498,-2.26577138900757,67.4494552612305,1.69418442249298,-2.28935408592224,67.4065933227539,1.55708074569702,-2.3228223323822,67.4442901611328,1.53922665119171,-2.30612254142761,67.4830856323242,1.6766813993454,-2.34880518913269,67.5227890014648,1.49410128593445,-2.33438611030579,67.5519332885742,1.62673580646515,-2.35062432289124,67.5983047485352,1.4495689868927,-2.33806562423706,67.6189117431641,1.57298302650452,-2.07442927360535,67.3096008300781,1.71361863613129,-2.0579662322998,67.1960144042969,1.64540350437164,-2.10641956329346,67.2131118774414,1.55172228813171,-2.07167983055115,67.2885665893555,1.79033148288727,-2.05283141136169,67.1832122802734,1.72549331188202,-2.24906277656555,67.233528137207,1.46235346794128,-2.37582874298096,67.4185333251953,1.25283980369568,-2.39941954612732,67.5392837524414,1.22935318946838,\n-2.05542635917664,66.9686737060547,1.61104881763458,-2.07500028610229,66.8846893310547,1.63040161132813,-2.10767555236816,66.8996429443359,1.57998013496399,-2.08964848518372,66.9766006469727,1.54973709583282,-2.12712836265564,66.8336639404297,1.64053738117218,-2.16737270355225,66.848876953125,1.591912150383,-2.82919478416443,68.3537750244141,0.74912703037262,-2.82582116127014,68.1682891845703,0.711574137210846,-2.86528205871582,68.1946105957031,0.634979069232941,-2.870121717453,68.4046325683594,0.683867454528809,-2.8079206943512,67.9082412719727,0.69920939207077,-2.84394145011902,67.9072952270508,0.615303337574005,-2.7978687286377,68.5528030395508,0.910629868507385,-2.81523394584656,68.4792175292969,0.811958968639374,-2.85784006118774,68.5469284057617,0.763306260108948,-2.83717560768127,68.6300964355469,0.879186511039734,-2.68762493133545,68.2952194213867,0.798494935035706,-2.6736946105957,68.4139099121094,0.8592609167099,-2.65705442428589,68.4872665405273,0.95888340473175,-2.67805957794189,68.1334381103516,0.766467034816742,-2.65559458732605,67.9030075073242,0.76434600353241,-2.73749089241028,68.2249603271484,1.0578727722168,-2.69270253181458,68.3444595336914,1.16103792190552,-2.71204996109009,68.2930679321289,1.21945893764496,-2.77048492431641,68.175422668457,1.13487410545349,-2.63352560997009,67.5799560546875,1.02114772796631,-2.67514133453369,67.7353134155273,1.02102887630463,-2.57827067375183,67.3931198120117,1.05846285820007,-2.64737629890442,67.3829498291016,1.01509618759155,-2.7053394317627,67.5997467041016,0.976101994514465,-2.68225765228271,68.2328872680664,1.24680197238922,-2.45428347587585,67.5438613891602,1.13627517223358,-2.43049907684326,67.4107666015625,1.15062642097473,-2.47426509857178,67.6697387695313,1.13195335865021,-2.67037224769592,67.9171600341797,1.083904504776,-2.65577864646912,68.0389175415039,1.26876902580261,-2.57660245895386,67.9674682617188,1.26852560043335,-2.29113817214966,67.7997055053711,1.58391487598419,-2.31978893280029,67.7765121459961,1.46570944786072,-2.27869296073914,67.8374938964844,1.65944612026215,\n-2.26554083824158,67.7095642089844,1.63142323493958,-2.2527186870575,67.6555862426758,1.52753853797913,-2.26989126205444,67.8075942993164,1.70676386356354,-2.30208992958069,68.2076568603516,1.70677042007446,-2.28334522247314,68.0717086791992,1.74444186687469,-2.39567375183105,68.4204559326172,1.54522335529327,-2.3316535949707,68.3273010253906,1.6405383348465,-2.62854361534119,68.5050277709961,1.2722384929657,-2.76896858215332,68.5801391601563,1.22542345523834,-2.7824718952179,68.6579818725586,1.22165441513062,-2.6289496421814,66.6553268432617,0.996821522712708,-2.56351447105408,66.5315704345703,1.15648031234741,-2.52996206283569,66.344856262207,1.09837055206299,-2.62781405448914,66.8359298706055,1.06403136253357,-2.55787539482117,66.7241516113281,1.21213781833649,-2.69484448432922,66.8672332763672,0.824295282363892,-2.68732142448425,66.9964828491211,0.903414249420166,-2.75447058677673,67.180046081543,0.6838738322258,-2.73578643798828,67.2482757568359,0.771346628665924,-2.60194778442383,67.2986831665039,0.862867832183838,-2.57602429389954,67.0869674682617,0.987282276153564,-2.53736877441406,66.9584503173828,1.13130593299866,-2.40219926834106,66.7655639648438,1.39116287231445,-2.49304604530334,66.9413528442383,1.30590271949768,-2.31333184242249,66.832275390625,1.52665853500366,-2.34573650360107,68.098030090332,1.64575755596161,-2.55503010749817,68.0456085205078,1.40283942222595,-2.533766746521,68.2806854248047,1.38818860054016,-2.57358312606812,68.3652420043945,1.36234879493713,-2.39148902893066,68.3013381958008,1.52705693244934,-2.59726929664612,67.2168426513672,1.11286020278931,-2.60383558273315,67.1575469970703,1.05543875694275,-2.64444184303284,67.3427810668945,0.951573252677917,-2.54468846321106,67.0989074707031,1.23312520980835,-2.55772280693054,67.0329055786133,1.18720102310181,-2.47545433044434,66.8608551025391,1.26244115829468,-2.48018312454224,67.0151901245117,1.34009265899658,-2.49003434181213,67.9725036621094,1.40447103977203,-2.24871706962585,66.9028015136719,1.52435684204102,-2.17792510986328,66.9602737426758,1.51861321926117,\n-2.36117172241211,67.2902297973633,1.26231455802917,-2.40379786491394,67.3136672973633,1.18727135658264,-2.31025338172913,67.2599411010742,1.36735677719116,-2.31600856781006,67.3657836914063,1.38705325126648,-2.69393849372864,67.5986022949219,0.917282581329346,-2.62711954116821,67.6268463134766,0.791336178779602,-2.77453708648682,67.6083908081055,0.709925651550293,-2.80314612388611,67.5798187255859,0.621610939502716,-2.77983713150024,67.5536193847656,0.535829544067383,-2.68887400627136,67.546272277832,0.493257313966751,-2.15245199203491,67.48681640625,1.88970601558685,-2.61377906799316,68.4213485717773,1.28537845611572,-2.33221817016602,68.2851104736328,1.61027157306671,-2.52214312553406,67.2510299682617,1.14891350269318,-2.46499300003052,67.1464996337891,1.25916314125061,-2.4064736366272,67.0748901367188,1.35577189922333,-2.68517780303955,67.8506240844727,1.03942346572876,-2.09176898002625,67.2419281005859,2.0933837890625,-2.09170913696289,67.0456008911133,2.05867290496826,0.675862431526184,70.4403457641602,5.01316404342651,-2.48955917358398,67.7451782226563,1.12540864944458,-2.20359206199646,67.1085662841797,1.84291386604309,-2.19012713432312,66.9737243652344,1.79033398628235,-2.20991563796997,67.2426681518555,1.89791309833527,-2.09453439712524,66.6815643310547,1.84149312973022,-2.17911314964294,66.9004058837891,1.75177586078644,0.0687145888805389,65.3117828369141,4.87543821334839,0.18367612361908,65.2635955810547,4.96013975143433,0.192545831203461,65.3534393310547,4.95118999481201,0.0785710513591766,65.417350769043,4.88140153884888,0.336994379758835,65.3211212158203,4.9930853843689,0.327651888132095,65.2403335571289,5.00603055953979,0.534512162208557,65.2889404296875,4.97892236709595,0.526553988456726,65.2026748657227,4.98258638381958,-0.109990268945694,65.3372421264648,4.74806261062622,-0.00115635991096497,65.3187561035156,4.83178281784058,-0.054225817322731,65.5103607177734,4.83793926239014,-0.185681968927383,65.6051254272461,4.77223634719849,0.395980924367905,65.3078460693359,4.99508666992188,0.386684328317642,65.2271118164063,5.00326728820801,\n-0.205163270235062,64.9350357055664,4.734947681427,-0.203319564461708,65.0073699951172,4.75313425064087,-0.276345819234848,64.9634017944336,4.62664127349854,-0.323267042636871,64.8058090209961,4.59223985671997,-0.327579498291016,64.9277038574219,4.58566236495972,-0.50356388092041,65.0628128051758,4.19650650024414,-0.491817593574524,64.9390640258789,4.35416173934937,-0.443149298429489,64.9613342285156,4.3975830078125,-0.36993744969368,65.0640411376953,4.43474769592285,-0.364744365215302,64.9534912109375,4.50175857543945,-0.268373221158981,65.0690689086914,4.54617214202881,-0.576209306716919,64.7099075317383,4.22456932067871,-0.603554666042328,64.4508361816406,4.17889499664307,-0.479074120521545,64.1535491943359,4.31969261169434,-0.429672032594681,64.7676544189453,4.46571350097656,-0.998232007026672,65.2647399902344,2.62271499633789,-0.781265616416931,65.1804504394531,3.44368028640747,-0.752240419387817,65.5978240966797,3.42348694801331,-0.92962121963501,65.7276992797852,2.60776495933533,-0.58737176656723,65.4784240722656,4.08026075363159,-0.583475053310394,65.915657043457,4.0708703994751,-0.707480788230896,66.0363235473633,3.40916109085083,-0.830390572547913,66.1534271240234,2.60511755943298,-0.741786599159241,64.3012237548828,3.70394229888916,-0.827998399734497,64.4452972412109,3.46786713600159,-0.947544813156128,64.2723922729492,2.87818431854248,-0.822114109992981,65.5357513427734,4.56504726409912,-1.08950412273407,65.1832885742188,4.39228105545044,-1.21951842308044,65.1810684204102,4.22904491424561,-1.33032810688019,65.2273254394531,3.87632966041565,-1.38224756717682,65.2686386108398,3.67232608795166,-1.64987790584564,65.4768676757813,3.2867226600647,-1.43295180797577,65.376823425293,3.47241187095642,-1.85966444015503,65.5411682128906,3.15919160842896,-1.96488916873932,65.6133270263672,2.94387912750244,-0.973559021949768,68.2446670532227,4.70256948471069,-1.02049541473389,68.1897964477539,4.61681318283081,-1.06434941291809,68.1228103637695,4.53617668151855,-0.590007543563843,68.3077087402344,4.90223217010498,-0.72842800617218,68.2762680053711,4.84922885894775,\n-0.940981149673462,68.1581344604492,4.69737195968628,-0.995903253555298,68.117546081543,4.6331353187561,-1.03320860862732,68.069221496582,4.57753133773804,-1.09829914569855,68.0365753173828,4.47835111618042,-1.05841517448425,68.0265045166016,4.52373600006104,0.249237090349197,68.0983352661133,4.85169363021851,0.127800285816193,68.1846084594727,4.86725997924805,-2.44647169113159,66.2694778442383,1.05975723266602,-2.36160278320313,66.3522186279297,1.02327644824982,0.233039170503616,66.6890335083008,5.58757209777832,0.248356133699417,66.8787384033203,5.41538524627686,0.469486087560654,67.1167907714844,5.5086350440979,0.47046759724617,67.2418670654297,5.4121208190918,-1.22514951229095,67.2148361206055,4.48621845245361,-1.42725384235382,67.3811721801758,4.3224048614502,-1.33798241615295,67.4984664916992,4.35396575927734,-0.214410543441772,63.382080078125,4.57266569137573,-0.176733359694481,63.2210464477539,4.41520738601685,-1.18296527862549,67.8958969116211,4.41951560974121,-1.20839166641235,67.9621887207031,4.43898963928223,-0.409916251897812,68.4089508056641,5.10556697845459,-0.237362772226334,67.8769073486328,4.81267929077148,-0.255254685878754,67.897575378418,4.76290845870972,-1.02679443359375,67.9520568847656,4.46889686584473,-0.992527961730957,67.9447250366211,4.44149971008301,-1.00401294231415,67.9494171142578,4.40595436096191,-1.00196027755737,67.9380111694336,4.41646957397461,-1.04129183292389,67.9330291748047,4.43989944458008,-1.0483146905899,67.9335632324219,4.4260139465332,-1.06923139095306,67.9194717407227,4.45858764648438,-1.04573953151703,67.9483795166016,4.43263816833496,-1.0139251947403,68.0074691772461,4.50251865386963,-0.990009665489197,68.0527420043945,4.55499219894409,-0.947413086891174,68.0283889770508,4.5327730178833,-0.973318338394165,68.0027770996094,4.48081588745117,-0.956710577011108,68.104850769043,4.60656881332397,-0.907191634178162,68.1515960693359,4.66468477249146,-0.873238205909729,68.1471939086914,4.63191032409668,-0.917339205741882,68.0944900512695,4.57990694046021,-0.708987832069397,68.2673873901367,4.80131673812866,\n-0.689555525779724,68.2583999633789,4.75340509414673,-0.581971883773804,68.2942047119141,4.84593439102173,-0.447553277015686,68.3020629882813,4.86063146591187,-0.451622754335403,68.2851867675781,4.79645013809204,-0.573941111564636,68.2806396484375,4.78963708877563,-0.31475442647934,68.281120300293,4.83769607543945,-0.329124331474304,68.2647171020508,4.76704216003418,-0.193136766552925,68.2300796508789,4.79123258590698,-0.213612675666809,68.2171020507813,4.71035766601563,-0.112608820199966,68.1355895996094,4.6355185508728,-0.186013326048851,68.3514709472656,5.14183807373047,-0.18675434589386,68.4225311279297,5.23559284210205,-0.451187640428543,69.5371398925781,4.87085676193237,-1.18403208255768,67.5705947875977,4.4710865020752,-1.29267728328705,67.6782913208008,4.37641668319702,-1.38265776634216,67.6513671875,4.30017375946045,-1.4575617313385,67.609748840332,4.21382236480713,-1.39131927490234,67.705680847168,4.29635667800903,-1.29264390468597,67.7282791137695,4.37633895874023,-1.15236067771912,68.1383743286133,4.55469751358032,-1.13733613491058,67.862419128418,4.44054317474365,-1.11288726329803,67.8705215454102,4.4455680847168,-1.07821583747864,67.8209838867188,4.48720645904541,-1.09485197067261,67.8670425415039,4.45601940155029,-1.1000372171402,67.8218536376953,4.47205066680908,-1.22510802745819,67.8049926757813,4.39712762832642,-1.29998290538788,67.8019409179688,4.34031867980957,-0.259932279586792,65.0047607421875,4.60047054290771,-0.262750178575516,64.9955215454102,4.55957126617432,-0.244600981473923,65.0229721069336,4.71917581558228,-0.255681931972504,65.6577682495117,4.72834491729736,-0.179298251867294,65.3393096923828,4.6863489151001,-0.341047585010529,65.7184677124023,4.63478422164917,-0.267672032117844,65.3511581420898,4.59057331085205,-0.180459335446358,65.0894927978516,4.63350772857666,-0.457273423671722,65.7878799438477,4.44790649414063,-0.384857714176178,65.3761215209961,4.44260740280151,0.525668621063232,65.1329040527344,5.20273685455322,0.120540618896484,65.202507019043,5.13624382019043,-0.026151716709137,65.1853408813477,5.05632019042969,\n-0.124853268265724,65.1389312744141,4.94539880752563,-0.324009239673615,64.983528137207,4.84973907470703,-0.28112405538559,65.0180969238281,4.90463590621948,-0.242152556777,65.0598373413086,4.86043071746826,-0.213738337159157,65.0627899169922,4.83013391494751,-0.192905440926552,65.0304260253906,4.79355049133301,-0.191578432917595,64.9678497314453,4.7730507850647,-0.359162360429764,64.3923187255859,4.60463619232178,-0.376596063375473,64.8579635620117,4.55342674255371,-0.407346963882446,64.8546981811523,4.53383636474609,-0.5311678647995,64.8800201416016,4.31810760498047,-0.480386972427368,64.8527069091797,4.4069972038269,-0.707698166370392,64.8196716308594,3.99317455291748,-0.408344089984894,64.8723983764648,4.52740621566772,-0.209093883633614,65.0713348388672,4.83990383148193,0.216405957937241,66.4818344116211,5.68653631210327,0.236346572637558,66.556770324707,5.66543197631836,0.460717171430588,66.1719589233398,5.94584178924561,0.446475178003311,66.1731948852539,5.89363384246826,0.502419114112854,66.169075012207,6.01105356216431,0.594793558120728,66.1596145629883,6.04629945755005,-0.100737050175667,63.1172065734863,4.34412145614624,-0.500222563743591,63.2063865661621,3.99288964271545,-0.364104866981506,63.1175727844238,3.94540190696716,-0.141184508800507,63.0437088012695,3.90080761909485,0.0887111127376556,62.9745178222656,3.8652503490448,0.211537271738052,63.0444030761719,4.45856428146362,0.0237708687782288,63.0873718261719,4.4538459777832,-1.42223107814789,64.5043640136719,3.36612296104431,-1.38911879062653,64.3296508789063,3.35790133476257,-1.20891559123993,63.8583641052246,3.27533435821533,-1.28675091266632,64.0161285400391,3.29017400741577,-0.686650097370148,63.6125526428223,4.48471069335938,-0.600071787834167,63.4264526367188,4.32255554199219,-0.497820943593979,63.2878799438477,4.18092155456543,-0.407934963703156,63.1828956604004,4.10707521438599,-0.263942271471024,63.0995025634766,4.05776023864746,-0.026168629527092,63.0137100219727,4.01293087005615,0.200198352336884,62.9460601806641,3.96981835365295,-1.22186529636383,63.9980354309082,3.55282139778137,\n-1.34261906147003,64.1619567871094,3.33094644546509,-0.316497594118118,65.9085998535156,4.86637306213379,0.124538689851761,65.9196166992188,5.23827791213989,0.124102115631104,65.908805847168,5.19611930847168,-0.736087679862976,65.537353515625,4.63726377487183,-0.185255855321884,64.904670715332,5.07743406295776,-0.0432551503181458,64.882209777832,5.23776292800903,-0.257672071456909,65.0048141479492,4.55685949325562,-0.859925270080566,64.7443389892578,3.3762354850769,-1.01947462558746,64.7168502807617,2.64527273178101,-1.64008462429047,64.293586730957,2.55414342880249,0.23989400267601,68.1633071899414,5.17229270935059,0.0469035506248474,68.2709426879883,5.16547060012817,0.131891995668411,66.6772384643555,5.44688415527344,0.439351290464401,67.8868865966797,4.88458061218262,0.181970685720444,67.4981689453125,4.82476377487183,0.352258652448654,67.3958129882813,5.17973613739014,0.298032134771347,67.2773361206055,5.20969247817993,-0.398242056369781,68.650390625,5.26332569122314,-0.806961536407471,68.8160171508789,5.12768363952637,-1.12555575370789,68.7801895141602,4.8606653213501,-1.26904928684235,68.6233596801758,4.6575722694397,-1.32087528705597,68.4356689453125,4.48058128356934,0.723448395729065,67.8533172607422,5.28542041778564,0.634040713310242,67.8667144775391,5.23758697509766,0.533391118049622,67.8840103149414,5.0360255241394,0.425834208726883,67.9190979003906,4.88724946975708,0.256425350904465,67.8387145996094,4.80163764953613,0.577364087104797,67.875862121582,5.14433765411377,-1.19939863681793,67.7417373657227,4.43186807632446,-1.30322372913361,67.6050643920898,4.37825393676758,-1.37182521820068,67.6045379638672,4.31879234313965,-1.42154228687286,67.5515365600586,4.27276706695557,-1.18892192840576,67.6365585327148,4.45693063735962,-1.2075526714325,67.6961288452148,4.42678356170654,0.0146072804927826,68.2122268676758,4.87960386276245,0.367377370595932,66.2688446044922,5.80207395553589,0.444115966558456,66.1817398071289,5.86155652999878,0.470569044351578,66.1363906860352,5.86054944992065,0.456080108880997,66.0712661743164,5.70314168930054,\n0.00119155645370483,65.9672470092773,5.24612140655518,0.0713672339916229,65.955696105957,5.25750255584717,0.105267703533173,66.0630264282227,5.28856992721558,0.207570225000381,66.2081146240234,5.21952438354492,0.196638345718384,66.1596984863281,5.1656756401062,0.251285821199417,66.159553527832,5.21587753295898,-1.52112138271332,67.4812774658203,4.2046365737915,-1.54435980319977,67.5658187866211,4.10998916625977,-1.40774393081665,67.797233581543,4.23939990997314,-1.69101858139038,67.6965103149414,3.9439685344696,-1.65526449680328,67.7714920043945,3.87997126579285,-1.92212677001953,68.0300598144531,2.96836996078491,-1.94505167007446,67.5534439086914,3.29091906547546,-1.6261522769928,67.8814544677734,3.90463185310364,-1.59110057353973,67.9744415283203,3.92852735519409,0.287541657686234,67.9501724243164,4.80866003036499,0.601750493049622,67.6797180175781,5.29253816604614,0.700850963592529,67.6643142700195,5.33945846557617,0.533695816993713,67.6939697265625,5.19175720214844,0.256553322076797,67.4606246948242,4.98889303207397,0.363055914640427,67.4773635864258,5.13336992263794,0.422433763742447,67.4761352539063,5.19667863845825,0.447697192430496,67.4347915649414,5.25947570800781,-0.234858900308609,68.7217788696289,5.30162906646729,-0.380013138055801,68.9322204589844,5.23441600799561,-0.19159409403801,68.5782623291016,5.33443927764893,0.611650705337524,69.025032043457,5.25725412368774,-0.0934067666530609,69.0297393798828,5.23564195632935,-0.236638098955154,69.0935440063477,5.12780380249023,0.242130964994431,69.4098815917969,5.304123878479,-0.791982531547546,69.6056900024414,4.68712282180786,0.67888879776001,69.3228073120117,5.25025939941406,-0.503783106803894,65.9258346557617,4.74787187576294,-0.290703296661377,66.0148468017578,4.86166954040527,-0.236907988786697,65.411262512207,5.0018482208252,-0.355312466621399,65.3383560180664,4.9142689704895,-1.17474091053009,68.0606689453125,4.50648593902588,-1.24219930171967,68.1220626831055,4.46310710906982,-1.37572658061981,68.2389984130859,4.36748313903809,-1.3957325220108,68.2586822509766,4.32999277114868,\n-1.38216733932495,68.4170150756836,4.36642837524414,-1.42205548286438,68.2507705688477,4.26028251647949,-1.41753029823303,68.4400863647461,4.31222629547119,-1.4866498708725,68.27197265625,4.11681365966797,-1.46908164024353,68.4764251708984,4.19546127319336,0.0572300851345062,69.4563446044922,5.22767162322998,-0.0102332234382629,69.7210998535156,5.15357160568237,-0.0220333337783813,70.0018997192383,5.02607250213623,-0.0343590080738068,70.2648239135742,4.93354511260986,0.344821780920029,69.0631103515625,5.3681001663208,-1.34608554840088,69.3578491210938,3.73755097389221,-1.37849032878876,69.7391204833984,3.18851804733276,-1.31606471538544,69.7685699462891,3.37895488739014,-1.25033664703369,69.8133697509766,3.59308171272278,-1.21369969844818,69.6207275390625,3.85165095329285,0.423030167818069,68.4400939941406,5.4689826965332,0.194957137107849,68.0033798217773,4.80440950393677,0.122356653213501,68.0959701538086,4.81445550918579,-0.838517904281616,66.8712310791016,4.67926502227783,-1.06327414512634,66.7840118408203,4.47974014282227,-2.60383653640747,62.1017799377441,0.254392862319946,-2.33156847953796,62.5004920959473,0.327738046646118,-2.05626964569092,61.8457069396973,1.17941951751709,-2.1639678478241,61.142276763916,1.32716286182404,-0.771766066551209,60.0984153747559,2.80394649505615,-0.939229965209961,60.3516654968262,2.50065851211548,-0.310370951890945,60.2703285217285,2.32014560699463,-1.56072759628296,60.1842727661133,2.62462735176086,-0.949292778968811,59.9602317810059,2.90389752388,-2.92457056045532,60.5393753051758,1.63607156276703,-2.75430107116699,61.2119789123535,0.789340019226074,-2.44197249412537,60.5091209411621,1.91451597213745,-1.59654784202576,60.4476547241211,2.28525972366333,-2.58778691291809,60.2590637207031,2.32570648193359,-2.91699957847595,61.8118133544922,0.140143811702728,-2.03705453872681,64.9678649902344,-1.31896328926086,-1.87585914134979,64.9871215820313,-1.8019540309906,-2.11881303787231,64.5967330932617,-1.20581030845642,-1.94959533214569,64.6411895751953,-1.80150365829468,-1.43170213699341,64.6117782592773,-2.23662328720093,\n-1.24593210220337,64.9559478759766,-2.24559617042542,-0.540337324142456,64.896110534668,-2.54498171806335,-0.671869218349457,64.5543212890625,-2.60237717628479,0.0126664638519287,64.8239212036133,-2.72488737106323,0.5079665184021,65.3369598388672,-2.61204290390015,0.546129822731018,65.7667388916016,-2.32232403755188,-2.20329976081848,64.9069519042969,-0.739322066307068,-2.18769431114197,64.462272644043,-0.677212119102478,0.463694781064987,64.7991104125977,-2.77165102958679,-2.27892565727234,64.3324508666992,-1.07254493236542,-2.0687301158905,64.4105453491211,-1.73562741279602,-1.58865058422089,64.3944396972656,-2.31272482872009,-0.803160071372986,64.3040618896484,-2.61304879188538,-2.17260718345642,64.1474533081055,-0.634068369865417,-2.23544073104858,68.3914413452148,1.6720415353775,-2.17444276809692,68.3635177612305,1.75480437278748,-2.36962985992432,68.4567031860352,1.23169255256653,-2.25269293785095,68.4188461303711,1.27125549316406,-2.42794322967529,68.6118011474609,1.21498787403107,-2.1344735622406,68.3156204223633,0.896306276321411,-2.11035704612732,68.1960906982422,0.642302989959717,-2.10437488555908,67.963981628418,0.454863429069519,-2.25228142738342,68.4410018920898,1.77542805671692,-2.1859073638916,68.3270263671875,1.83723652362823,-2.30826497077942,68.5220718383789,1.64130914211273,-2.2535080909729,68.2871856689453,0.984555840492249,-2.12622618675232,68.102180480957,0.832027614116669,-2.11575055122375,67.8841934204102,0.746406614780426,-2.07402586936951,67.2652893066406,0.737824559211731,-2.09191298484802,67.5917205810547,0.344757199287415,-2.14096450805664,67.9786911010742,-0.321571588516235,-2.25128054618835,68.1278533935547,0.880027770996094,-2.2435462474823,67.8972549438477,0.804336190223694,-2.21857976913452,67.6182479858398,0.770642638206482,-2.09578418731689,67.5765914916992,0.710018455982208,-2.18941140174866,67.295768737793,0.797770977020264,-2.33974528312683,67.0231170654297,0.866563677787781,-2.13609290122986,66.8364105224609,1.03708910942078,-2.11306619644165,66.7260665893555,1.1648668050766,\n-3.31807923316956,61.4019966125488,0.0489473938941956,-3.42274594306946,60.5364532470703,1.49111914634705,-3.62020564079285,60.3799934387207,2.00422358512878,0.210002303123474,61.6859016418457,-3.54641151428223,-0.353588879108429,61.750129699707,-3.50249814987183,-1.02169609069824,62.0449752807617,-3.41312146186829,-1.83803629875183,62.3993988037109,-2.93643712997437,-2.82967305183411,63.0794563293457,-2.32267451286316,-3.1057333946228,63.1476707458496,-1.548499584198,-3.29211664199829,62.7537803649902,-0.629818201065063,-1.75604820251465,67.4462509155273,3.88761067390442,0.336564511060715,66.9118804931641,5.50027084350586,-0.711230635643005,65.6814422607422,4.64888429641724,-0.645659685134888,65.7985458374023,4.70442295074463,-0.430258810520172,64.9535446166992,4.65565013885498,-0.261302918195724,65.0195770263672,4.75829744338989,0.369330316781998,63.6228065490723,-2.97760391235352,0.400962799787521,64.0273132324219,-2.9543445110321,-0.137128278613091,68.2986831665039,4.91825723648071,2.77166199684143,63.0941047668457,-2.39661741256714,2.63027358055115,63.4563598632813,-2.50340533256531,3.06407999992371,63.4481048583984,-1.86804676055908,3.14984703063965,63.1162910461426,-1.89971852302551,2.58670663833618,63.8314628601074,-2.48425579071045,3.00956273078918,63.7738456726074,-1.80622553825378,3.18711543083191,63.6541328430176,-1.13377809524536,3.22662782669067,63.3706436157227,-1.22358846664429,3.37862420082092,63.0866508483887,-1.37140333652496,2.98798322677612,62.7669372558594,-2.4309287071228,3.37319898605347,62.8567924499512,-1.96693086624146,3.53397512435913,62.8022232055664,-1.52096652984619,0.846301555633545,63.6863899230957,-2.96940112113953,0.928462862968445,63.2999114990234,-2.99739456176758,1.03355467319489,62.9106292724609,-2.99142003059387,0.457932859659195,62.870662689209,-3.11936116218567,1.85002052783966,63.4105224609375,-2.84256649017334,1.99884569644928,63.0078659057617,-2.81859064102173,1.72941708564758,63.8114891052246,-2.8133008480072,3.13575959205627,59.6181221008301,2.40139698982239,3.4752357006073,59.792423248291,2.01754117012024,\n2.61229562759399,65.9718399047852,-1.594557762146,2.79375314712524,65.5336303710938,-1.58723974227905,2.30689334869385,65.6141204833984,-1.78598785400391,2.0583975315094,66.03759765625,-1.77751684188843,2.97375583648682,65.0641708374023,-1.53472137451172,2.6017963886261,65.1482315063477,-1.96074271202087,1.98257291316986,65.2316513061523,-2.24446511268616,1.78643119335175,65.677848815918,-2.10593962669373,1.66918849945068,66.0922393798828,-1.98907852172852,1.25248622894287,65.7162246704102,-2.283527135849,1.15729212760925,66.0973815917969,-2.03909087181091,1.46467399597168,65.2478103637695,-2.45371031761169,0.895084381103516,65.3434982299805,-2.52855086326599,0.849041104316711,65.7681503295898,-2.36698508262634,0.833850264549255,64.0731582641602,-2.89877438545227,0.868939161300659,64.3996887207031,-2.75916123390198,3.43512058258057,62.534309387207,-0.555885553359985,3.61170029640198,62.251335144043,-0.713178634643555,3.62065267562866,62.6069641113281,-1.09054219722748,3.46297883987427,62.8803291320801,-0.932440757751465,3.04286408424377,63.3514938354492,-0.403999030590057,3.24094867706299,62.8811912536621,-0.446427464485168,3.27729225158691,63.1887054443359,-0.809061408042908,3.10877823829651,63.4842834472656,-0.736767888069153,3.20282506942749,65.6953277587891,-0.633383631706238,3.13929629325867,65.258918762207,-0.415696263313293,3.10375952720642,65.3865051269531,-1.04536521434784,3.03015112876892,65.8255081176758,-1.21753859519959,3.13037347793579,64.7489776611328,-0.403037965297699,3.18739819526672,64.9313507080078,-0.878572702407837,3.24098968505859,66.2357025146484,-0.675608038902283,2.9856231212616,66.3857040405273,-1.23000144958496,2.59243869781494,66.4537811279297,-1.60253596305847,3.43516945838928,68.4953765869141,2.93542647361755,3.64341020584106,68.7033767700195,2.52767944335938,1.67240488529205,70.9220733642578,4.61333656311035,1.35996758937836,70.8887329101563,4.74589204788208,1.77693021297455,71.216064453125,4.3246636390686,1.47888708114624,71.2272033691406,4.45492839813232,2.30322051048279,70.9339447021484,4.20990991592407,\n1.98278081417084,70.9447708129883,4.42774534225464,2.35416674613953,71.2663192749023,3.84975266456604,2.05257272720337,71.2204666137695,4.14069652557373,1.84807145595551,71.5248184204102,3.93045210838318,2.13462781906128,71.4271011352539,3.86482501029968,3.25662088394165,70.7579803466797,2.95692658424377,3.38463449478149,70.4653244018555,2.71709227561951,3.18304753303528,70.5722732543945,3.23227119445801,3.28323173522949,70.3111953735352,3.04273319244385,3.26597952842712,69.9390258789063,2.96563172340393,3.48145318031311,70.0305786132813,2.41113090515137,3.01352572441101,70.7729568481445,3.45452928543091,3.07973289489746,71.0036239624023,3.20587682723999,2.87021660804749,71.1267395019531,3.42976593971252,2.84779906272888,70.8711776733398,3.67481565475464,3.45156717300415,68.8726272583008,3.00204420089722,1.53275537490845,71.5952072143555,4.05539703369141,3.70240545272827,67.952880859375,1.83304941654205,3.81758189201355,68.67919921875,1.75303256511688,3.44886875152588,68.2093963623047,2.75865435600281,1.76600730419159,67.2480773925781,-2.16408967971802,1.72176253795624,66.8199768066406,-2.07928395271301,1.19753456115723,66.8563919067383,-2.20012879371643,1.23600828647614,67.2891235351563,-2.29322600364685,1.69368076324463,66.4940795898438,-2.02104258537292,1.17020428180695,66.5240249633789,-2.15323305130005,3.78381276130676,68.0296020507813,1.1541588306427,3.90121912956238,68.6965560913086,0.956952571868896,3.76204657554626,70.0629730224609,0.696854710578918,3.74036574363709,70.0416870117188,0.113939613103867,3.63069581985474,70.7143020629883,0.125515431165695,3.7172954082489,70.7285079956055,0.693414866924286,3.56128549575806,70.058952331543,-0.510423541069031,3.50447249412537,70.7078247070313,-0.464096665382385,3.30403637886047,71.1632614135742,-0.389826118946075,3.44547486305237,71.2241973876953,0.149715274572372,3.51787281036377,71.2697067260742,0.716017782688141,3.36593508720398,70.9851684570313,2.53393077850342,3.15651845932007,71.2956085205078,2.69934105873108,3.48455619812012,71.1741180419922,1.67420899868011,\n3.23799276351929,71.5311584472656,1.73876643180847,2.93440222740173,71.7987060546875,1.82964313030243,2.86609172821045,71.5268402099609,2.99194097518921,2.56718611717224,71.4180908203125,3.48156476020813,2.8948769569397,71.2851181030273,3.23862838745117,3.28889083862305,70.8849182128906,2.78930521011353,3.1189181804657,71.1584320068359,3.01724481582642,3.63068342208862,70.6360549926758,1.61095190048218,3.47237133979797,70.5504837036133,2.41710424423218,3.38644814491272,70.7088851928711,2.6184709072113,3.69685077667236,70.0055541992188,1.57964885234833,3.49112677574158,69.3208389282227,2.35678911209106,3.74448370933533,69.3097534179688,1.64186108112335,3.83206868171692,69.3102035522461,0.769378960132599,3.82193875312805,69.1562118530273,0.138535410165787,3.87746357917786,68.6364898681641,0.55125892162323,3.84130167961121,68.4185638427734,0.248314082622528,3.79534506797791,68.5724639892578,-0.149668216705322,3.59410548210144,68.3596725463867,-0.692980408668518,3.58642220497131,69.22021484375,-0.574200391769409,2.88847541809082,70.0564346313477,-1.5543417930603,3.28233027458191,70.0613479614258,-1.09098148345947,3.27779316902161,69.229606628418,-1.19395482540131,2.87084484100342,69.2186584472656,-1.67915177345276,3.22291541099548,68.3775405883789,-1.24711942672729,2.81288981437683,68.3739013671875,-1.72548604011536,1.44374704360962,70.0913619995117,-2.15053725242615,1.39350318908691,69.2714309692383,-2.34682774543762,1.97094690799713,70.0736083984375,-2.03468585014343,1.93484580516815,69.2466201782227,-2.21723556518555,1.8824747800827,68.4258804321289,-2.29632949829102,1.33679258823395,68.46337890625,-2.43480634689331,1.47740232944489,70.7777404785156,-1.86263632774353,1.98017990589142,70.7482147216797,-1.75833988189697,1.50036382675171,71.3355255126953,-1.46908926963806,1.97681868076324,71.2807006835938,-1.38598275184631,2.04763340950012,72.2877502441406,0.834140300750732,2.01885151863098,72.2057418823242,0.218309640884399,1.56952464580536,72.337158203125,0.24094945192337,1.5929172039032,72.4340896606445,0.87183153629303,\n1.98563992977142,71.9797439575195,-0.372149109840393,1.53915750980377,72.0976638793945,-0.370075106620789,2.27466726303101,71.5804061889648,3.53008103370667,2.41497802734375,71.7373428344727,3.0770857334137,1.99079954624176,71.8846054077148,3.17736721038818,1.92208516597748,71.7022018432617,3.60366559028625,1.64213752746582,72.3024368286133,2.12799048423767,2.05538964271545,72.182975769043,2.05599641799927,1.59609460830688,71.9966735839844,3.28433179855347,2.54851698875427,66.7789077758789,-1.53792715072632,2.95708656311035,66.7296829223633,-1.15898084640503,2.64293694496155,67.1767807006836,-1.62114572525024,3.02803945541382,67.140510559082,-1.16226232051849,3.39273285865784,67.1055374145508,-0.632635354995728,3.34214329719543,66.5973663330078,-0.720301151275635,2.90744972229004,71.8982849121094,0.758566498756409,3.2385573387146,71.6321182250977,0.735273957252502,3.17576289176941,71.5590744018555,0.16808870434761,2.85406494140625,71.8030242919922,0.18050143122673,3.08760619163513,71.4547348022461,-0.33892822265625,2.79656958580017,71.6448059082031,-0.357277631759644,1.56994235515594,71.796516418457,3.7176206111908,3.28240466117859,69.3491592407227,2.9119086265564,2.78750729560852,71.1787643432617,-1.08255004882813,3.09195494651794,71.1411590576172,-0.805961489677429,3.21514344215393,70.7022857666016,-0.961730718612671,2.84587121009827,70.7086029052734,-1.34892511367798,2.99508047103882,71.3809432983398,-0.669953227043152,2.75786018371582,71.4705963134766,-0.774890303611755,1.97513401508331,71.6813049316406,-0.915417790412903,1.51852643489838,71.7696380615234,-0.955827593803406,2.51590299606323,72.031005859375,1.95417010784149,2.50209856033325,72.1378707885742,0.794477701187134,2.45773005485535,72.0231399536133,0.197701543569565,2.41701221466064,71.8243026733398,-0.368116199970245,2.40306186676025,71.5761642456055,-0.855907320976257,2.41083145141602,71.2268676757813,-1.26651608943939,2.44847583770752,70.0606231689453,-1.85001230239868,2.43527793884277,70.7245407104492,-1.60078120231628,2.42250514030457,69.2265930175781,-2.00551891326904,\n2.37029147148132,68.3930358886719,-2.06755375862122,2.1752552986145,66.7966842651367,-1.87803864479065,2.23217368125916,67.2107467651367,-1.95042085647583,2.11980867385864,66.4858322143555,-1.79982614517212,1.82443225383759,67.7700271606445,-2.26232051849365,1.28373324871063,67.8126373291016,-2.39774370193481,2.7345130443573,67.7007904052734,-1.69548153877258,2.30476355552673,67.7305908203125,-2.03636646270752,3.1234712600708,67.6870727539063,-1.21527004241943,3.42609477043152,67.7113952636719,-0.779530763626099,3.80768942832947,68.2063293457031,-0.0221836566925049,3.72419857978821,67.9380645751953,-0.275116086006165,3.29296040534973,65.8929443359375,0.178759336471558,3.18487477302551,65.3272018432617,0.237231612205505,3.42458319664001,66.6893692016602,0.255840361118317,3.30981183052063,66.2866516113281,0.201219111680985,1.17992103099823,62.429141998291,-3.17016243934631,2.13867163658142,62.6163024902344,-2.8279116153717,0.559984564781189,62.3390464782715,-3.28172254562378,3.02245187759399,67.7061004638672,4.22892618179321,2.86418676376343,67.5733489990234,4.32109785079956,3.08335709571838,67.7418212890625,4.144850730896,2.92042183876038,67.6620712280273,4.32303619384766,1.04059529304504,66.1364822387695,5.37642431259155,1.08818566799164,66.1918182373047,5.32113075256348,0.952670454978943,66.2831268310547,5.55756616592407,0.964439511299133,66.2054443359375,5.57583618164063,0.972594499588013,66.1277236938477,5.61189317703247,0.907071590423584,66.2090911865234,5.81105995178223,0.848858714103699,66.2134170532227,5.80835962295532,0.990434408187866,66.1534957885742,5.83173322677612,0.939881920814514,66.1439819335938,5.8337869644165,1.33801198005676,66.0951766967773,5.4610013961792,1.31371986865997,66.1135635375977,5.4366307258606,1.32314586639404,66.0145721435547,5.3075270652771,1.36248826980591,65.984992980957,5.36341142654419,1.16821324825287,66.2176132202148,5.67701053619385,1.19959616661072,66.2241516113281,5.68081045150757,1.08892726898193,66.1012878417969,5.29095935821533,1.27456474304199,66.1795272827148,5.48362493515015,\n1.2969925403595,66.1613845825195,5.51824808120728,0.895212769508362,66.2304382324219,5.67458629608154,0.883696556091309,66.2878265380859,5.66853427886963,1.05750358104706,66.2238006591797,5.77599811553955,1.61541330814362,67.9780654907227,4.79207324981689,1.48483347892761,67.8829650878906,4.77213430404663,1.66513204574585,67.9361038208008,4.78252983093262,1.39549088478088,67.8399353027344,4.77230978012085,1.47990763187408,67.7919158935547,4.80125713348389,1.55855202674866,67.8288879394531,4.788649559021,1.7188355922699,68.0638198852539,4.84649801254272,1.76975238323212,68.0085372924805,4.80823421478271,1.88238084316254,68.0819931030273,4.83967161178589,1.84954607486725,68.1613540649414,4.88833522796631,2.01740455627441,68.1148223876953,4.87205505371094,2.16267466545105,68.1177825927734,4.88001871109009,2.16110157966614,68.1770324707031,4.89240455627441,2.0064640045166,68.1895217895508,4.89453840255737,1.44177711009979,67.7627487182617,4.78806447982788,1.45658624172211,67.7608642578125,4.72944355010986,1.49655413627625,67.7859954833984,4.72255802154541,1.44505512714386,67.7402877807617,4.77763557434082,1.50603425502777,67.7715835571289,4.66046762466431,2.81941747665405,67.6532592773438,4.37944507598877,2.80845141410828,67.7050094604492,4.4054799079895,2.76364207267761,67.6946411132813,4.37451553344727,2.76965069770813,67.6132354736328,4.3663182258606,1.57247996330261,67.8204727172852,4.69046926498413,1.67675852775574,67.9105834960938,4.67156410217285,1.78256213665009,67.9964065551758,4.70338153839111,1.71295940876007,67.9023132324219,4.53851175308228,2.72553372383118,67.6013565063477,4.37623929977417,2.71776938438416,67.6938323974609,4.41837549209595,2.12454390525818,67.5096969604492,4.82131147384644,1.93376386165619,67.5508728027344,4.81489753723145,1.80381166934967,67.7050094604492,4.75677299499512,1.75186026096344,67.6921310424805,4.78685522079468,1.86624801158905,67.6840209960938,4.80912971496582,1.68831598758698,67.6511459350586,4.75817966461182,1.81566560268402,67.594367980957,4.80096960067749,1.94054734706879,67.6641006469727,4.85678577423096,\n1.6259890794754,67.5726852416992,4.77385330200195,1.56445646286011,67.7168655395508,4.77339839935303,1.46761655807495,67.6678161621094,4.77723121643066,1.38416063785553,67.6996536254883,4.77788639068604,1.50879895687103,67.7301864624023,4.78449964523315,1.33086597919464,67.719108581543,4.78166580200195,2.56548237800598,67.5324020385742,4.60376691818237,2.66723799705505,67.4825439453125,4.453782081604,1.63220357894897,67.7453384399414,4.76484489440918,1.57864618301392,67.7543640136719,4.77227354049683,1.68848466873169,67.7535629272461,4.72987937927246,1.64251971244812,67.7787399291992,4.73566055297852,1.58031296730042,67.7742691040039,4.69857931137085,1.54594111442566,67.7606811523438,4.75637054443359,1.89201819896698,67.3553237915039,4.77216386795044,2.10411429405212,67.2825393676758,4.7396993637085,2.33040165901184,67.4997177124023,4.76993036270142,2.63719081878662,67.3552932739258,4.50041532516479,1.76297199726105,67.4556732177734,4.78083467483521,1.47983765602112,67.3121185302734,4.78161907196045,1.59192776679993,67.2046203613281,4.76624822616577,1.77153718471527,67.1205902099609,4.74773836135864,2.52664160728455,67.6587448120117,4.68369770050049,2.32218456268311,67.6141052246094,4.82337379455566,2.13513088226318,67.6266403198242,4.85408782958984,1.41478621959686,67.6599044799805,4.77605009078979,1.35092687606812,67.6474914550781,4.78986024856567,2.64810514450073,67.6008148193359,4.53010749816895,2.67109847068787,67.642822265625,4.43653106689453,2.63573479652405,67.699348449707,4.52756357192993,2.60309267044067,67.6876831054688,4.59368944168091,1.56230914592743,64.7970581054688,4.62223815917969,1.57280242443085,64.7770004272461,4.55793142318726,1.53890252113342,64.7756271362305,4.5918984413147,1.5733095407486,64.7759780883789,4.48884582519531,1.55842363834381,64.7646331787109,4.54476022720337,1.52267169952393,64.8155517578125,4.6362829208374,1.50113117694855,64.8684310913086,4.74321937561035,1.16122794151306,65.0884170532227,5.14359521865845,1.16995275020599,65.044792175293,5.16988229751587,0.948817014694214,65.1112442016602,5.24987411499023,\n0.9472975730896,65.0725479125977,5.28148555755615,1.59930920600891,64.80029296875,4.69645118713379,1.617396235466,64.7488555908203,4.73600006103516,1.67197442054749,64.7575378417969,4.63868093490601,1.54642188549042,64.7513046264648,4.86179351806641,1.6091810464859,64.6602401733398,4.80571365356445,1.79511940479279,64.7023315429688,4.64403676986694,1.10575973987579,65.0869903564453,5.04435682296753,1.13507974147797,65.1160659790039,5.089515209198,1.20430386066437,65.0855331420898,5.02939796447754,1.16926229000092,65.0526809692383,4.99482154846191,1.30799674987793,65.0298690795898,5.00864553451538,1.26975691318512,65.0470809936523,4.96644496917725,1.24305903911591,64.9978332519531,4.95216512680054,1.31903052330017,65.0139694213867,4.88756418228149,1.34949314594269,64.9039611816406,5.06307601928711,1.4702981710434,64.882926940918,4.92383337020874,1.32103002071381,65.0060195922852,5.0321888923645,0.950963616371155,64.9252700805664,5.31096935272217,0.987527966499329,64.8332901000977,5.33049821853638,1.20135700702667,64.9142684936523,5.21407079696655,0.935256481170654,65.1235504150391,5.13924503326416,0.946526408195496,65.1388092041016,5.19374752044678,0.79563307762146,65.0841751098633,5.31249284744263,0.797460436820984,65.1235961914063,5.28180932998657,1.42578208446503,64.9698181152344,4.89240550994873,1.39220714569092,64.9700241088867,4.85443782806396,0.792876124382019,64.9543151855469,5.34882354736328,0.793111681938171,64.8629302978516,5.37787103652954,0.797000050544739,65.1455230712891,5.22485256195068,0.791859984397888,65.1421661376953,5.16695880889893,1.30230617523193,64.9390640258789,4.86823749542236,1.35855317115784,64.9611053466797,4.81103515625,1.34803688526154,64.8832244873047,4.79251050949097,0.90659487247467,63.1273765563965,4.58954286575317,0.953348994255066,63.336353302002,4.80861186981201,0.984978079795837,63.6115493774414,5.0362606048584,0.775317549705505,63.6444320678711,5.10200548171997,0.782387137413025,63.8541603088379,5.0748176574707,0.982545137405396,63.8120765686035,5.01916217803955,0.960399866104126,63.9836273193359,4.968834400177,\n0.77299952507019,64.0293655395508,5.01205444335938,1.13187718391418,64.0773544311523,4.85964822769165,0.904144406318665,64.1760025024414,4.94052267074585,0.867566585540771,62.9883422851563,4.32515239715576,0.662752270698547,62.9579086303711,4.24405288696289,1.68722319602966,63.2029724121094,3.79156351089478,1.55583417415619,63.1098403930664,3.74550795555115,1.38694024085999,63.0472755432129,3.71653580665588,1.20429515838623,63.8601112365723,4.8340802192688,1.8569747209549,63.3113479614258,3.87934565544128,1.98933351039886,63.4412536621094,3.87631845474243,1.79896724224091,63.4291114807129,4.22676181793213,1.67343926429749,63.2597351074219,4.14480829238892,1.51965522766113,63.1451263427734,4.02508878707886,0.743568658828735,63.356029510498,4.86756324768066,0.707159996032715,63.1264381408691,4.62668037414551,1.23128128051758,63.4571571350098,4.79325723648071,1.25696194171906,63.6821022033691,4.8807520866394,0.750115871429443,64.2161331176758,4.97442626953125,0.95448911190033,68.2689056396484,5.40696430206299,1.10210275650024,68.0186996459961,5.24388742446899,1.11403250694275,68.0646057128906,5.24360227584839,1.00505876541138,68.0947189331055,5.32169723510742,0.988877415657043,67.9810104370117,5.30956077575684,1.07680690288544,68.6615905761719,5.42346000671387,1.17063009738922,68.0030288696289,5.14911937713623,1.21258020401001,67.992301940918,5.04708242416382,1.21008718013763,68.0745315551758,5.08662796020508,0.863151907920837,66.0218658447266,5.8984203338623,0.878515362739563,66.0476531982422,5.94400930404663,0.811168670654297,66.0340957641602,5.96556520462036,0.796718120574951,65.9958038330078,5.92510843276978,1.18504989147186,66.5405960083008,5.81291246414185,1.18261909484863,66.4677200317383,5.83124494552612,1.16803658008575,66.3756103515625,5.83031034469604,0.849136829376221,65.8758163452148,5.59448528289795,0.958329796791077,65.9928283691406,5.62665700912476,1.18129503726959,65.8471908569336,5.25742292404175,1.13864850997925,65.9437789916992,5.29657173156738,1.03993558883667,65.9741668701172,5.43829298019409,1.00494194030762,65.8529815673828,5.35447978973389,\n1.01620256900787,66.4186325073242,6.05825710296631,1.08254957199097,66.4076614379883,5.98344707489014,1.09551954269409,66.5229644775391,6.00031614303589,1.0225692987442,66.5434951782227,6.06275177001953,1.08995115756989,66.6208877563477,5.96841812133789,1.01719057559967,66.6455612182617,6.02999830245972,1.56110656261444,66.3283996582031,5.33345746994019,1.47379839420319,66.4205780029297,5.41348457336426,1.42117702960968,66.4270935058594,5.18472719192505,1.3821359872818,66.5773391723633,5.34918260574341,1.47961628437042,66.3637924194336,5.15084791183472,1.56818747520447,66.2544479370117,5.2225661277771,1.55450403690338,66.1809539794922,5.13956642150879,1.52715849876404,66.2824859619141,5.13216829299927,1.4827972650528,66.1366958618164,5.07240104675293,1.47239136695862,66.2874755859375,5.11185455322266,1.49927139282227,65.9258880615234,5.26522731781006,1.46711909770966,65.9016876220703,5.19444799423218,1.53615379333496,66.0006866455078,5.13329648971558,1.58067262172699,66.0416259765625,5.1969747543335,1.44239354133606,65.8957443237305,5.08210182189941,1.45783531665802,66.0247955322266,5.04241561889648,1.506551861763,65.9601058959961,5.31732654571533,1.41535568237305,65.9368209838867,5.33529901504517,1.39484643936157,65.898323059082,5.29168033599854,1.50249338150024,66.0255355834961,5.37349081039429,1.42638659477234,65.9805221557617,5.38302612304688,1.34220838546753,65.9425659179688,5.32081174850464,1.31483519077301,65.904914855957,5.27753877639771,1.45656311511993,66.1546936035156,5.47705745697021,1.38550686836243,66.0974273681641,5.47264814376831,1.25200283527374,65.9548492431641,5.25276708602905,0.896006941795349,66.4281616210938,6.10456466674805,0.90334677696228,66.5566787719727,6.10564804077148,0.903348088264465,66.6635284423828,6.06973218917847,0.993480682373047,66.2969284057617,6.0419020652771,0.880164980888367,66.3056716918945,6.09063196182251,1.58793973922729,66.1127395629883,5.2674708366394,1.57066059112549,66.1672134399414,5.35007286071777,1.33825790882111,66.163948059082,5.53846120834351,1.38953459262848,66.2185516357422,5.53924417495728,\n0.943351864814758,66.0803070068359,5.87983322143555,1.38254451751709,66.4367218017578,5.49561500549316,1.40577471256256,66.3258514404297,5.52398777008057,1.48847639560699,66.2757797241211,5.46264743804932,0.776017904281616,65.8630752563477,5.60215854644775,1.1419643163681,66.2864685058594,5.81920003890991,1.10327231884003,66.2269744873047,5.80411815643311,0.982795000076294,66.0418167114258,5.58648300170898,1.23382449150085,66.262077331543,5.68230390548706,1.24669885635376,66.3198471069336,5.67943048477173,3.22172045707703,67.809928894043,3.82832098007202,3.15530824661255,67.8338470458984,4.00156021118164,3.15509080886841,67.7748489379883,3.99598979949951,3.07769012451172,67.8231201171875,4.18973302841187,1.10835039615631,68.3742294311523,5.43645858764648,1.10926449298859,68.2622299194336,5.42638063430786,1.25268363952637,68.2686462402344,5.49923801422119,1.25887644290924,68.3857269287109,5.54237508773804,0.856779098510742,65.8057250976563,5.38414430618286,1.05993151664734,66.2888641357422,5.97157907485962,2.87275648117065,64.2026062011719,2.89005708694458,2.99350666999817,64.2616271972656,2.66672921180725,3.06010127067566,64.5027084350586,2.74929118156433,2.94652581214905,64.4142456054688,3.01589393615723,3.07869410514832,64.3033828735352,2.43764901161194,3.14995956420898,64.5367050170898,2.53096532821655,3.16307401657104,64.7588119506836,2.61771774291992,3.09017300605774,64.6998519897461,2.86918115615845,2.94763731956482,64.6433868408203,3.09942221641541,2.60297060012817,67.2657012939453,4.51407909393311,2.34461688995361,67.2425384521484,4.6809778213501,2.4332230091095,66.9677734375,4.61262559890747,2.69015502929688,67.0426330566406,4.44951248168945,2.10328006744385,67.0629348754883,4.73166131973267,2.73677968978882,67.3821334838867,4.40822982788086,2.71642827987671,67.4613952636719,4.41833877563477,2.65608310699463,67.4130172729492,4.47524547576904,1.39902520179749,65.3239822387695,5.08177518844604,1.33020997047424,65.2320861816406,5.11651849746704,1.16617429256439,65.337646484375,5.22120761871338,1.16582405567169,65.2580413818359,5.22784996032715,\n1.15485346317291,65.1838226318359,5.18234348297119,1.30968177318573,65.1623001098633,5.08121681213379,1.07950747013092,65.1546020507813,4.96049022674561,1.09411942958832,65.1320648193359,4.99228525161743,1.19628489017487,65.1498947143555,4.8596076965332,1.17167019844055,65.08154296875,4.89428281784058,1.21968996524811,65.0599975585938,4.96370887756348,1.11150693893433,65.1110458374023,5.0471043586731,0.960742354393005,65.3200454711914,5.3076319694519,0.964861273765564,65.2693252563477,5.27933168411255,0.967252373695374,65.2189712524414,5.2121376991272,0.887307524681091,65.2577362060547,5.27378177642822,0.933913707733154,65.1596832275391,5.01675939559937,0.940787792205811,65.1411590576172,5.05751657485962,0.953863739967346,65.1263656616211,5.11540555953979,1.46924197673798,65.1509399414063,4.98497533798218,1.42944991588593,65.0712814331055,4.97104835510254,0.726064443588257,65.1496200561523,4.99916076660156,0.723457217216492,65.1317138671875,5.055251121521,0.722915172576904,65.1126403808594,5.12641906738281,1.25722050666809,65.1121215820313,4.79240989685059,1.34165704250336,64.9907913208008,4.67870283126831,1.24571990966797,65.0443420410156,4.80092239379883,1.35468363761902,64.9573822021484,4.70028591156006,1.38346302509308,64.9460678100586,4.75443172454834,1.30107736587524,65.0216827392578,4.85702705383301,0.736445665359497,65.2196731567383,5.28496837615967,0.731112122535706,65.1628646850586,5.25378942489624,0.741668343544006,65.2620010375977,5.3127760887146,1.96044337749481,64.690673828125,4.54105854034424,1.89501965045929,64.8835220336914,4.63898515701294,1.75379693508148,64.8410415649414,4.64671897888184,1.81441962718964,65.1060791015625,4.74574422836304,1.74698913097382,64.9912109375,4.71846771240234,1.66675806045532,64.8422775268555,4.65543508529663,0.965164661407471,65.153450012207,5.1742115020752,0.887127876281738,65.155029296875,5.18276166915894,0.877623200416565,65.1300506591797,5.12379503250122,0.889152407646179,65.2081298828125,5.22853326797485,1.50251054763794,64.9516983032227,4.86895179748535,1.5572634935379,65.0263519287109,4.86247158050537,\n0.872787117958069,65.1376190185547,5.06298589706421,0.871499061584473,65.1556854248047,5.01519203186035,1.63267862796783,67.7908554077148,4.64664506912231,1.69053792953491,67.8132095336914,4.50846290588379,1.86208045482636,67.7431945800781,4.69083738327026,1.83597791194916,67.7311019897461,4.73373460769653,1.76971423625946,67.7824783325195,4.61141586303711,1.73197448253632,67.7678527832031,4.67666387557983,2.13273811340332,67.6600494384766,4.81347227096558,2.12690806388855,67.6821746826172,4.75571489334106,1.96110379695892,67.7085876464844,4.75144004821777,1.95040476322174,67.6890106201172,4.80746603012085,1.72490096092224,67.7901763916016,4.55446481704712,1.68810820579529,67.7942810058594,4.65519142150879,2.49819946289063,67.6858901977539,4.66664505004883,2.4681339263916,67.7000732421875,4.63317203521729,2.28982353210449,67.6699523925781,4.73800802230835,2.30699634552002,67.6478424072266,4.79213714599609,2.62672972679138,67.713996887207,4.50203514099121,2.57353758811951,67.7069091796875,4.58141613006592,2.5938196182251,67.7178802490234,4.47351264953613,2.54124069213867,67.7161407470703,4.55211734771729,4.17357540130615,67.8996047973633,0.509683907032013,4.1403603553772,67.6832962036133,0.449121415615082,4.08362770080566,67.3917999267578,0.414594709873199,3.90992999076843,67.4254379272461,0.725381076335907,3.94927668571472,67.6558380126953,0.792257249355316,3.97278380393982,67.8460464477539,0.8745236992836,3.58249139785767,67.4250793457031,2.43577671051025,3.66378712654114,67.4318084716797,2.07610011100769,3.74723982810974,67.8212814331055,1.85516107082367,3.53273034095764,67.8464584350586,2.72762513160706,1.81092512607574,66.1431884765625,4.87175035476685,1.85961425304413,66.0183639526367,4.79641628265381,1.91326582431793,65.90087890625,4.75100040435791,2.08881855010986,66.059196472168,4.75629425048828,2.08825278282166,66.1917037963867,4.80004692077637,1.99359023571014,66.2997894287109,4.83589601516724,2.36032509803772,64.3248443603516,3.86987996101379,2.44826078414917,64.6608505249023,3.97995185852051,1.96192157268524,66.8022384643555,4.73072004318237,\n1.8986679315567,66.6709976196289,4.79249000549316,2.14057230949402,66.5590744018555,4.63880014419556,2.24688816070557,66.7343597412109,4.70600175857544,1.51051247119904,66.0330352783203,4.97222995758057,1.56563603878021,66.0699157714844,4.92767810821533,1.4725159406662,66.2073516845703,5.01603746414185,1.53508925437927,65.9453430175781,4.91490650177002,1.59876596927643,65.9530487060547,4.86776781082153,1.6534435749054,66.0074615478516,4.72317504882813,1.61450529098511,66.1480941772461,4.80866765975952,1.52846145629883,66.2845687866211,4.95261716842651,1.64934742450714,66.4504470825195,4.95662689208984,1.72839331626892,66.3004608154297,4.91241359710693,2.52269864082336,66.3429107666016,4.25267505645752,2.51373910903931,66.1549377441406,4.08980846405029,2.73523330688477,66.1615371704102,3.90226435661316,2.77488350868225,66.3376922607422,4.05986309051514,2.54053902626038,65.1107788085938,3.88801002502441,2.54846215248108,65.2907028198242,3.96028590202332,2.5438380241394,65.4811019897461,4.03654479980469,2.39782929420471,66.1180648803711,4.27655076980591,2.37393355369568,66.3513565063477,4.38982439041138,2.27032828330994,65.1054763793945,4.40776538848877,2.23681831359863,65.2680511474609,4.47885704040527,2.41696572303772,65.0836639404297,4.25302076339722,2.37576246261597,65.2705078125,4.32173538208008,2.35369086265564,65.4496002197266,4.42240571975708,2.18725490570068,65.4226531982422,4.55194759368896,2.123694896698,65.5600128173828,4.6230206489563,2.28663229942322,65.5895919799805,4.51024770736694,1.51225531101227,66.5718231201172,5.021240234375,1.4161981344223,66.644889831543,5.12101936340332,1.42633509635925,66.3838272094727,5.06254053115845,1.53803825378418,66.6902465820313,5.0226263999939,1.42731106281281,66.7563400268555,5.11838150024414,1.65536999702454,66.6072387695313,4.95725440979004,1.67465090751648,66.7415084838867,4.94556093215942,1.54190278053284,66.8336715698242,5.00357246398926,1.39855873584747,66.9208526611328,5.12479829788208,1.47772538661957,66.2974624633789,5.09121799468994,2.59657120704651,65.133056640625,3.66636753082275,\n2.6109926700592,65.3053436279297,3.72980260848999,2.60834908485413,65.493782043457,3.801917552948,1.52033245563507,66.9799957275391,4.94045448303223,1.41880643367767,67.1096954345703,5.0534462928772,1.66209173202515,66.8697357177734,4.87027931213379,1.3919837474823,67.2366409301758,4.96968173980713,2.00205206871033,65.6056671142578,4.64997816085815,2.04608273506165,65.457763671875,4.57589817047119,2.27062916755676,64.3006744384766,4.06169319152832,2.32876181602478,64.6938705444336,4.19766807556152,2.52454304695129,65.6801376342773,4.10202598571777,2.1409318447113,66.399658203125,4.63131332397461,2.23282361030579,66.1752700805664,4.6105751991272,2.34595704078674,66.4882125854492,4.50150775909424,1.81751644611359,66.3587646484375,4.91359186172485,1.87995064258575,66.5447616577148,4.87719774246216,2.01660585403442,66.4501571655273,4.7698450088501,2.30044889450073,65.9848556518555,4.57546710968018,2.57980298995972,65.7074432373047,3.88146424293518,2.5665864944458,64.7896194458008,3.54475498199463,2.51294469833374,64.4948425292969,3.4874062538147,2.47084093093872,64.4197158813477,3.61557745933533,2.54000449180603,64.7240219116211,3.70111060142517,3.06965947151184,64.2413635253906,0.843061864376068,3.14307951927185,64.6348190307617,0.817125797271729,3.17030668258667,64.9766464233398,0.787583470344543,3.13940739631653,64.7505416870117,1.18672370910645,3.10409641265869,64.4562759399414,1.21933686733246,3.01130676269531,64.0785903930664,1.29110634326935,1.39091527462006,64.0119705200195,4.70452880859375,1.31462967395782,64.2487564086914,4.89590787887573,1.07064962387085,64.3344345092773,5.00004005432129,1.02853214740753,65.7345199584961,5.25804567337036,1.06206750869751,65.6524963378906,5.22237396240234,1.24704384803772,65.713996887207,5.1207423210144,1.19674646854401,65.7925643920898,5.18545246124268,1.11466372013092,68.5229339599609,5.42319107055664,2.63029646873474,64.9091415405273,3.35278916358948,2.58759641647339,64.4991760253906,3.2932140827179,2.89777517318726,64.9867172241211,3.18954491615295,1.0823005437851,66.739501953125,5.87417697906494,\n1.08765780925751,66.9091491699219,5.60021114349365,1.01002395153046,66.950798034668,5.78720188140869,1.01102554798126,66.7803955078125,5.93792963027954,1.1871634721756,66.6877212524414,5.68769645690918,1.01847362518311,67.1112899780273,5.6987509727478,0.917320609092712,67.1311950683594,5.73997926712036,0.90803050994873,66.9813232421875,5.82367610931396,1.02897262573242,67.2320785522461,5.63844585418701,0.925348520278931,67.2418899536133,5.68538045883179,1.82211816310883,68.3722305297852,5.38440036773682,1.72986388206482,68.3393173217773,5.39727163314819,1.85487186908722,68.5016860961914,5.35601806640625,1.75295293331146,68.4524688720703,5.38968372344971,2.18797636032104,70.2286682128906,4.76863861083984,2.26277923583984,69.8419494628906,4.76173734664917,2.30417919158936,70.1883010864258,4.6255316734314,2.20072603225708,69.5985870361328,4.84077930450439,2.32512545585632,69.4896392822266,4.79950618743896,2.43021702766418,69.7975463867188,4.73787498474121,2.46586561203003,70.1633682250977,4.48380565643311,1.7530769109726,63.2388000488281,3.47270965576172,1.88775670528412,63.3332633972168,3.50927734375,1.57975447177887,63.1699600219727,3.45405411720276,0.770951867103577,64.613410949707,5.26209306716919,0.785154342651367,64.7431182861328,5.36394596099854,0.955015659332275,64.5587005615234,5.17588186264038,0.956335425376892,64.7101593017578,5.32591438293457,3.32264757156372,65.618896484375,0.780253946781158,2.9574408531189,64.4738998413086,0.316204011440277,3.13376069068909,64.9198226928711,0.27761971950531,2.56642246246338,64.0481872558594,1.71757841110229,2.03027939796448,63.4526977539063,3.50485467910767,2.14873170852661,63.5934638977051,3.497230052948,2.46903705596924,70.7225952148438,4.26248502731323,2.84281134605408,70.6446990966797,3.84263586997986,3.21379804611206,65.3377227783203,1.1963357925415,3.20485281944275,65.93408203125,2.79245543479919,3.36020851135254,65.9955978393555,2.51856184005737,3.14592552185059,65.8635025024414,3.08585023880005,3.15856194496155,65.6592636108398,2.99970817565918,3.27241349220276,65.6984176635742,2.72795724868774,\n3.36723446846008,65.7419509887695,2.44129371643066,3.30855917930603,66.7898025512695,2.86580801010132,3.24830770492554,66.6402893066406,3.15281105041504,3.16916584968567,66.4040451049805,2.98576140403748,3.28029775619507,66.4961318969727,2.69506525993347,3.14309644699097,66.5459136962891,3.3976411819458,3.09399890899658,66.3121109008789,3.25750803947449,1.95557272434235,68.6751861572266,5.29672241210938,1.81888711452484,68.6034317016602,5.35073375701904,1.41024601459503,63.2141647338867,3.23758721351624,1.15360486507416,63.1664695739746,3.25049090385437,1.5957545042038,63.2730178833008,3.21871757507324,1.40879082679749,65.5020294189453,5.03400230407715,1.4037721157074,65.717414855957,4.9996542930603,1.19037282466888,65.4891662597656,5.20386838912964,2.60248494148254,68.8864212036133,4.85044574737549,2.64458465576172,69.0195922851563,4.74494361877441,2.36588907241821,68.9808120727539,4.96036577224731,2.346923828125,62.8495674133301,1.76874101161957,2.17040228843689,62.3400039672852,1.86332964897156,1.98219120502472,61.8262977600098,1.95655155181885,2.47003626823425,61.9436645507813,1.61649990081787,2.62941479682922,62.4789848327637,1.5250837802887,2.77312874794006,62.999870300293,1.44115698337555,1.41100990772247,65.8050079345703,5.01921081542969,1.53756165504456,65.7346725463867,4.91554641723633,1.54546129703522,65.830940246582,4.91062641143799,2.57974934577942,68.3915405273438,5.03086280822754,2.35975360870361,68.3460540771484,5.10343074798584,2.15034532546997,68.2842788696289,5.15059041976929,2.70931816101074,64.0672454833984,2.00770950317383,2.74843382835388,64.1253967285156,1.76698267459869,2.80714631080627,64.0711135864258,2.29739952087402,2.70221138000488,64.0294647216797,2.25056958198547,2.59571003913879,63.9650650024414,2.27302551269531,3.20630860328674,68.2135391235352,4.01540756225586,3.14722442626953,68.3423080444336,4.16961050033569,3.1775176525116,68.2282562255859,4.17364263534546,3.08311438560486,68.6121978759766,4.19453144073486,3.10557079315186,68.4193954467773,4.29816150665283,3.10166668891907,68.2396621704102,4.34590244293213,\n3.23239278793335,64.7937698364258,2.39909362792969,3.29830861091614,64.8190155029297,2.1781325340271,3.34556007385254,65.2663955688477,2.34464025497437,3.25028228759766,65.2071228027344,2.59141540527344,3.17798399925232,65.1101379394531,2.7619047164917,3.19209694862366,65.3329467773438,2.88725996017456,3.2748589515686,65.3408660888672,2.6292200088501,3.29173731803894,65.5005340576172,2.66720008850098,3.17430877685547,65.4842987060547,2.92708039283752,3.38223314285278,65.4999389648438,2.38008999824524,2.27588939666748,63.889762878418,3.51033973693848,2.60826468467712,64.0904006958008,3.14019298553467,2.49879050254822,63.9305763244629,3.14054346084595,2.41469717025757,63.8167266845703,3.07191205024719,2.6449613571167,63.9745788574219,2.7154438495636,2.74609088897705,69.5691452026367,4.54720497131348,2.79885339736938,69.8089599609375,4.50718355178833,2.83263349533081,70.1560897827148,4.24949645996094,1.66631972789764,64.006217956543,4.41115856170654,1.54344177246094,63.7823791503906,4.62629365921021,1.81746780872345,63.8232612609863,4.24533700942993,1.9330667257309,63.6909599304199,4.13855075836182,2.01452040672302,64.0820999145508,4.15035057067871,1.85161864757538,64.1769027709961,4.33584785461426,1.34827721118927,66.6312789916992,5.32681751251221,1.33312034606934,66.7119827270508,5.29776334762573,1.35957944393158,70.1682434082031,5.06434488296509,1.30751574039459,69.8131713867188,5.14138650894165,1.26131451129913,69.5302886962891,5.20147800445557,1.50465273857117,69.5750961303711,5.18930959701538,1.55817043781281,69.8395385742188,5.10909700393677,1.59938907623291,70.1610488891602,5.01129102706909,1.66334295272827,62.4444999694824,2.31862783432007,1.77151620388031,62.8890686035156,2.30940628051758,1.13388705253601,62.7269973754883,2.68523573875427,1.06157386302948,62.3579978942871,2.6658456325531,0.875809192657471,64.4096298217773,5.04039573669434,0.73970353603363,64.4352264404297,5.07188892364502,2.37753105163574,63.8615036010742,2.22751426696777,2.0526864528656,70.6333465576172,4.64314699172974,1.26074552536011,64.5021820068359,5.06837511062622,\n1.25899064540863,64.6928482055664,5.21327638626099,2.08650135993958,63.5699844360352,3.86548352241516,2.14077305793762,63.7161102294922,3.82737326622009,1.88180673122406,63.562198638916,4.20048427581787,1.29388749599457,65.8246231079102,5.18244791030884,1.27890062332153,65.787727355957,5.12692308425903,1.33551824092865,65.7642211914063,5.05971336364746,1.35508978366852,65.8358154296875,5.13893175125122,3.39741015434265,66.8426208496094,2.49798011779785,3.46531867980957,67.1295471191406,2.62615919113159,3.44804573059082,67.0955429077148,2.95263624191284,3.49114727973938,66.9027862548828,2.17869186401367,3.53133225440979,67.1750030517578,2.31824254989624,3.54556512832642,67.3944778442383,2.76397252082825,3.52769446372986,67.3619766235352,3.10120415687561,1.66327261924744,65.5175399780273,4.84837293624878,1.6486691236496,65.3879776000977,4.83345651626587,1.55714344978333,65.515739440918,4.91552543640137,1.54356360435486,65.3456115722656,4.96902656555176,1.64133775234222,65.2857055664063,4.88229322433472,1.15404975414276,63.0051612854004,3.69910192489624,0.901649951934814,62.9695129394531,3.68851327896118,1.29445350170136,61.6162147521973,2.3349986076355,1.49334478378296,62.0239295959473,2.32971668243408,0.939993143081665,61.9537353515625,2.60241937637329,0.790918231010437,61.5481300354004,2.5308837890625,3.40503931045532,66.5657043457031,2.41545963287354,3.4683039188385,66.6099319458008,2.1507716178894,2.08212614059448,69.3093414306641,4.99917554855347,2.20279026031494,69.3110733032227,4.92981052398682,2.05538940429688,64.3852386474609,4.33511734008789,2.02214121818542,64.6891555786133,4.49180173873901,2.51422572135925,68.1781311035156,4.93498277664185,2.74233198165894,68.1048965454102,4.74316835403442,1.33793914318085,67.9867706298828,4.83846712112427,1.26418793201447,67.9812622070313,4.88836717605591,1.72899913787842,70.4542999267578,4.86722230911255,1.88850796222687,70.4923553466797,4.80114221572876,1.91768753528595,70.4026031494141,4.83765125274658,2.48615074157715,70.5057220458984,4.35005807876587,2.77934885025024,70.4354629516602,4.04117774963379,\n2.17157745361328,63.5577545166016,3.01464104652405,2.0459156036377,63.459545135498,3.02176666259766,2.18099522590637,63.6124877929688,2.62947630882263,2.41914415359497,63.7559013366699,2.63658022880554,2.90074110031128,68.9421310424805,4.49496364593506,1.16719198226929,67.6541290283203,5.07088279724121,1.27261769771576,67.6515121459961,4.91043853759766,3.13415884971619,70.4025344848633,3.49547290802002,3.00836896896362,70.4687805175781,3.67086410522461,2.91557312011719,70.3788909912109,3.87965750694275,2.94108152389526,70.1115646362305,3.96969389915466,3.04004549980164,70.0819702148438,3.83000016212463,3.06503176689148,69.9759063720703,3.64700102806091,1.21417355537415,63.3148307800293,2.784184217453,1.19664418697357,63.1839752197266,2.73920702934265,1.54497134685516,63.3072853088379,2.56475400924683,1.544917345047,63.3785438537598,2.63877606391907,1.8416827917099,63.4582023620605,2.36375784873962,1.86531913280487,63.556941986084,2.4356997013092,3.27756834030151,65.7480545043945,1.49152147769928,3.32438254356384,65.7033843994141,1.57046961784363,3.2664635181427,65.4832916259766,1.54861390590668,3.21064281463623,65.5065155029297,1.46422207355499,3.38953733444214,65.7523956298828,1.67035269737244,3.1939902305603,65.2248687744141,1.5117518901825,3.15106582641602,65.218391418457,1.42323327064514,2.96880340576172,70.7074890136719,3.58743643760681,2.52766156196594,63.849910736084,2.67795538902283,2.29024934768677,63.691104888916,3.02464008331299,3.0556173324585,69.4313125610352,3.94278478622437,3.06104874610901,69.5194473266602,4.12069797515869,3.01978588104248,69.218147277832,4.19789600372314,3.04081892967224,69.1315231323242,4.02007246017456,3.00306487083435,69.5700912475586,4.27975177764893,2.95265007019043,69.285400390625,4.37552213668823,3.06109118461609,68.8921356201172,4.02935028076172,3.30373907089233,65.985221862793,0.823003649711609,3.37114906311035,66.3666000366211,0.88204824924469,3.40155816078186,66.1607513427734,1.27854585647583,3.2656843662262,65.7254486083984,1.23977637290955,2.15141582489014,65.8958358764648,4.68503475189209,\n1.97792518138886,65.7934494018555,4.71268367767334,3.27143931388855,68.2170104980469,3.46690511703491,3.36802220344543,68.1874542236328,3.12048625946045,3.40568804740906,68.5598831176758,3.17628622055054,3.36138033866882,68.5961532592773,3.37867641448975,3.28634023666382,68.7167587280273,3.6459379196167,1.36855494976044,68.0724639892578,5.07851886749268,1.47358274459839,68.0629501342773,5.07631206512451,1.28406882286072,68.0532379150391,4.89790439605713,1.43688583374023,68.0571365356445,4.88231134414673,1.58190584182739,68.1025772094727,4.88890886306763,1.62977468967438,68.1250610351563,5.0776162147522,1.33778488636017,67.7689437866211,4.77620267868042,1.05926036834717,67.4494552612305,5.43875932693481,0.754440307617188,65.3672866821289,5.28548049926758,0.751253128051758,65.6022720336914,5.25729703903198,2.17934894561768,64.3224639892578,4.21248769760132,1.71412336826324,65.0587615966797,4.75572490692139,1.75993835926056,65.1855773925781,4.76912593841553,0.916168451309204,65.6128005981445,5.28644561767578,0.956570863723755,65.4222259521484,5.28150510787964,2.82387208938599,64.2440795898438,1.60327672958374,2.71610569953918,64.1857147216797,1.54536700248718,2.8345205783844,64.3156814575195,1.42784821987152,2.91504144668579,64.4028472900391,1.50540399551392,1.73535168170929,63.4158134460449,2.767258644104,3.87476706504822,67.928092956543,1.76517486572266,3.80734848976135,67.7902603149414,1.86865186691284,4.00409650802612,68.1080474853516,1.55622589588165,3.87178349494934,67.9669494628906,1.71418404579163,2.21187043190002,64.6915817260742,4.3245325088501,1.09960293769836,61.2102317810059,2.32678270339966,0.913408160209656,60.8254432678223,2.30629253387451,1.22644782066345,63.2941818237305,2.93833780288696,1.50415539741516,63.3456764221191,2.85449743270874,1.91454017162323,63.3828811645508,3.22673344612122,2.04850459098816,63.4737892150879,3.21564912796021,1.19043982028961,68.0956802368164,5.25577878952026,1.15569794178009,68.12744140625,5.34178733825684,1.33125197887421,68.0929641723633,5.26610374450684,1.27669787406921,68.1236801147461,5.34426927566528,\n1.81892287731171,65.3533172607422,4.75283145904541,1.83351361751556,65.5049514770508,4.74560260772705,0.489630132913589,60.8192939758301,2.44391441345215,0.636119484901428,61.1750755310059,2.48716497421265,1.72115516662598,68.2012634277344,5.27561855316162,1.81343591213226,68.2175674438477,5.25443077087402,3.61724925041199,66.9714813232422,1.93237948417664,3.63002371788025,67.0168075561523,1.87830793857574,3.65537023544312,67.2072143554688,1.95941495895386,3.6320812702179,67.1999359130859,2.02898907661438,3.66461253166199,67.1989288330078,1.90811610221863,3.60759997367859,67.0121231079102,1.8292031288147,3.66415858268738,67.1588439941406,1.85774981975555,3.70364260673523,67.4279174804688,1.99589407444,3.74132084846497,67.3983764648438,1.94340825080872,3.75281167030334,67.6230087280273,1.95619535446167,2.81532144546509,68.0492401123047,4.63717555999756,2.85496854782104,68.0031509399414,4.55038499832153,1.60250473022461,68.6735763549805,5.25675439834595,1.5099128484726,68.4110488891602,5.39070510864258,1.36978161334991,68.8145217895508,5.41693639755249,1.41716694831848,68.6838989257813,5.43790340423584,3.23023343086243,70.1785354614258,3.18463897705078,1.2082679271698,66.9643630981445,5.39298105239868,1.21866321563721,67.0920944213867,5.29832220077515,1.27707099914551,66.8820114135742,5.35456275939941,1.27629065513611,67.0180816650391,5.278151512146,1.4946049451828,64.4533767700195,4.85514402389526,1.45980274677277,64.6893997192383,5.04266023635864,1.43082308769226,69.2890243530273,5.24512767791748,2.76308536529541,67.9503479003906,4.64143562316895,2.80748581886292,67.9118423461914,4.56407785415649,2.69727182388306,67.9980316162109,4.73916387557983,2.77209401130676,67.8514709472656,4.54306507110596,3.1554057598114,69.8255310058594,3.3562445640564,3.21396946907043,69.7456893920898,3.1201605796814,2.96959733963013,66.3964309692383,3.77987670898438,3.06027674674988,66.4596405029297,3.60809707641602,3.12278532981873,66.7135238647461,3.79585146903992,3.035489320755,66.616813659668,3.96194195747375,3.22859811782837,66.8069839477539,3.62145400047302,\n3.25045347213745,67.1485061645508,3.91712236404419,3.20148730278015,66.953125,4.02498865127563,3.10689544677734,66.8664321899414,4.21319150924683,3.04706168174744,64.7684555053711,1.37625753879547,3.36234951019287,68.9172592163086,3.1843159198761,3.23758554458618,69.0889282226563,3.32570433616638,2.73865675926209,64.0937805175781,1.47130036354065,2.44877791404724,68.0812683105469,4.80997705459595,2.31137037277222,68.1344299316406,4.86483573913574,2.33828735351563,68.1263580322266,4.97409057617188,2.17115354537964,68.1592559814453,5.01532745361328,2.49606013298035,68.0793762207031,4.9183349609375,2.33080887794495,68.2026672363281,5.00495862960815,1.6921523809433,64.4372634887695,4.59270191192627,3.12855386734009,64.4140548706055,2.02637028694153,3.00002670288086,64.2794342041016,1.9327564239502,3.05478620529175,64.3649063110352,1.79543006420136,3.16064596176147,64.4679489135742,1.88507044315338,3.10378193855286,64.4913864135742,1.70813536643982,3.16189479827881,64.5378875732422,1.79301404953003,1.88884961605072,64.4099655151367,4.4384651184082,2.43658375740051,68.7276382446289,5.05807542800903,2.60550928115845,68.6477127075195,5.03396940231323,2.62770128250122,68.7658843994141,4.94138765335083,2.4056396484375,68.6070098876953,5.12689208984375,2.38367676734924,68.5143890380859,5.15268611907959,2.24653244018555,68.5764846801758,5.18992710113525,1.80867230892181,69.8361434936523,5.04644918441772,1.86460244655609,70.1591415405273,4.91810512542725,1.75314748287201,69.5746459960938,5.16978740692139,3.37677645683289,65.7449111938477,1.77825689315796,3.39073538780212,65.5126647949219,1.73714506626129,3.40116405487061,65.8993225097656,1.76968371868134,3.39961576461792,65.8093719482422,1.91650032997131,3.40984797477722,65.5266418457031,1.88468360900879,3.37290668487549,65.2781295776367,1.82793116569519,3.33846926689148,65.2658081054688,1.68715047836304,1.58690357208252,64.180534362793,4.67527723312378,3.42349815368652,65.7735061645508,2.17199325561523,3.43665051460266,65.5146026611328,2.10313749313354,3.40644407272339,65.2755355834961,2.05098104476929,\n2.90480470657349,63.5421180725098,1.35813617706299,2.5005624294281,63.3518524169922,1.66328740119934,2.97416019439697,63.6044006347656,-0.43002325296402,3.04686117172241,63.9600830078125,-0.435582518577576,2.91562366485596,63.574951171875,0.32672530412674,2.86793184280396,63.0844421386719,0.314177632331848,2.88664984703064,62.5844268798828,0.291136026382446,3.26654148101807,64.8482055664063,1.78163802623749,3.21196222305298,64.8382339477539,1.65136682987213,2.5964367389679,64.3092498779297,3.22612452507019,3.11429333686829,64.3584213256836,2.21885251998901,2.96850609779358,64.2104949951172,2.12399363517761,2.93605613708496,64.1646041870117,2.3562159538269,2.7786602973938,66.5487518310547,4.20106410980225,2.79840517044067,66.7352828979492,4.35227203369141,2.8922290802002,68.5589828491211,4.74051427841187,2.88598251342773,68.7056045532227,4.64938116073608,2.65196180343628,65.2107467651367,3.4514377117157,2.66340517997742,65.3679428100586,3.5083863735199,2.81611132621765,65.2712554931641,3.22248196601868,2.83819365501404,65.4268035888672,3.29421615600586,2.83722853660584,65.595947265625,3.34694361686707,2.67875480651855,65.5446090698242,3.5787661075592,0.938983798027039,67.442985534668,5.49931669235229,1.68217599391937,67.8480529785156,4.50526905059814,1.58377194404602,67.7971115112305,4.58396673202515,3.06999850273132,69.7514114379883,3.80261707305908,3.03709864616394,69.8179168701172,3.96939754486084,2.99018239974976,69.8608093261719,4.12396812438965,3.88476777076721,67.6038284301758,1.9052711725235,3.01904988288879,68.7829437255859,4.34590721130371,3.07396841049194,68.7755737304688,4.16320896148682,3.2163782119751,64.5644302368164,2.31587195396423,3.25280594825745,64.5963668823242,2.11069822311401,2.78232908248901,64.0797348022461,2.77608585357666,2.87242197990417,64.1171722412109,2.57528614997864,2.76459431648254,64.0357437133789,2.5068883895874,0.882707834243774,65.685432434082,5.30712938308716,2.95145273208618,68.2043228149414,4.61653709411621,2.87497973442078,68.3008270263672,4.81145000457764,2.99823188781738,68.1043395996094,4.45682430267334,\n0.903877377510071,66.8075485229492,5.97392654418945,3.03742647171021,68.507209777832,4.50008964538574,3.052649974823,68.3731079101563,4.57572746276855,1.35172784328461,68.1202011108398,5.33629560470581,1.47764658927917,68.1094818115234,5.31640863418579,0.76178765296936,65.7061004638672,5.31858825683594,0.824543237686157,65.6856994628906,5.32374954223633,1.34113502502441,63.1208915710449,3.45176196098328,1.06281006336212,63.0850524902344,3.45769143104553,3.0163848400116,68.0236511230469,4.37825489044189,3.0504937171936,68.0117492675781,4.33377456665039,2.45020818710327,66.7837905883789,4.61369800567627,2.50105261802673,66.6580581665039,4.54786014556885,0.871286630630493,65.6000442504883,5.2877836227417,0.786885976791382,65.7970123291016,5.37989950180054,3.39077138900757,67.8872375488281,3.30874085426331,3.32414698600769,67.8638610839844,3.53729343414307,3.27949452400208,67.6229629516602,3.69277310371399,3.39195346832275,67.6552505493164,3.43329548835754,3.45178842544556,67.695068359375,3.22621893882751,2.68379044532776,62.1163673400879,1.00694859027863,2.79847860336304,62.7099494934082,0.950812101364136,2.92852449417114,63.2620849609375,0.910539209842682,1.73240518569946,63.5957183837891,4.44465970993042,0.896305441856384,65.3989562988281,5.28903579711914,1.31565749645233,66.8515472412109,5.29576349258423,3.00862669944763,63.7789497375488,0.875749468803406,2.13105821609497,60.8295783996582,1.85507833957672,2.29136896133423,61.3581352233887,1.72197782993317,1.79348528385162,61.3115463256836,2.0579137802124,1.61798405647278,60.8387413024902,2.17369174957275,0.888431429862976,65.2999801635742,5.30810165405273,1.71592605113983,69.0375595092773,5.2174654006958,1.49462974071503,68.2459716796875,5.42839813232422,1.36418902873993,68.2601013183594,5.4384617805481,2.94529867172241,64.0302200317383,0.325349271297455,3.04379439353943,65.6097946166992,3.24336194992065,3.04610061645508,65.4405670166016,3.16522622108459,3.07062745094299,65.2881851196289,3.12842082977295,3.11933541297913,67.3169555664063,4.01220989227295,3.1252748966217,67.4251403808594,4.00630378723145,\n3.06806111335754,67.3184967041016,4.11027336120605,1.75952875614166,68.1481475830078,5.08462238311768,1.88930642604828,68.1446228027344,5.05054712295532,1.76840484142303,68.1653518676758,5.10388898849487,2.99754190444946,67.5693283081055,4.18719387054443,3.12188291549683,67.479606628418,4.05562591552734,3.10169529914856,67.5793075561523,4.05587005615234,3.31551313400269,66.9119186401367,3.41480135917664,3.40057134628296,67.0184936523438,3.25194454193115,3.3433620929718,67.3507537841797,3.63195514678955,3.30712413787842,67.1692810058594,3.66730928421021,3.62881422042847,66.8468246459961,1.67702209949493,3.67381048202515,66.8385696411133,1.69646668434143,3.65914416313171,66.7378997802734,1.63139164447784,3.60834813117981,66.7475128173828,1.61311852931976,3.68108868598938,66.820442199707,1.7398294210434,3.66513466835022,66.7122192382813,1.6777651309967,3.57989692687988,66.4964752197266,1.61093735694885,3.58889770507813,66.5416641235352,1.58230996131897,3.51673626899719,66.3922271728516,1.59728240966797,3.54323554039001,66.521728515625,1.57222628593445,3.39948201179504,66.0840225219727,2.22889304161072,3.4275176525116,66.0860824584961,2.01125836372375,3.42608070373535,66.1682968139648,1.85465395450592,3.02907490730286,65.8121948242188,3.32732510566711,2.87969517707825,65.7975540161133,3.43260478973389,1.95452749729156,64.9040222167969,4.5913233757019,1.9281359910965,65.1237182617188,4.64037895202637,3.08949017524719,65.0258865356445,3.021568775177,2.67047142982483,65.7588806152344,3.65310835838318,3.12394952774048,64.4121551513672,-0.425189852714539,2.14358901977539,64.9229049682617,4.41373920440674,2.11716294288635,65.1423263549805,4.47160339355469,3.21812272071838,64.6609420776367,1.7886575460434,3.25343632698059,64.6347808837891,1.93096566200256,3.31948947906494,64.8364486694336,1.96334993839264,1.27868580818176,68.5230865478516,5.48906517028809,3.08508467674255,64.7949295043945,1.45506238937378,3.02310347557068,66.2411422729492,3.48426175117493,2.94506549835205,66.185188293457,3.66328954696655,3.43415141105652,66.1334075927734,1.70569670200348,\n3.40694761276245,66.0004730224609,1.81116831302643,3.42804837226868,65.9448547363281,1.70346283912659,3.75594592094421,66.8347854614258,0.707662761211395,3.84257817268372,67.1626129150391,0.687342405319214,3.99951863288879,67.0531005859375,0.404798299074173,3.89515900611877,66.6228866577148,0.451429814100266,2.89523768424988,67.8790054321289,4.44507217407227,2.87735891342163,67.9539031982422,4.47966957092285,3.44882583618164,67.3555145263672,3.33902382850647,3.23236560821533,68.1426696777344,3.73330855369568,3.12400317192078,68.4818954467773,3.87935709953308,3.17323422431946,68.5466842651367,3.73494172096252,3.17530918121338,68.6816024780273,3.91267061233521,3.11129069328308,68.6374282836914,4.03024244308472,3.44718813896179,67.8984298706055,3.05363130569458,3.49256610870361,67.7516098022461,2.98532676696777,4.19071578979492,68.0595779418945,0.595690429210663,4.13797330856323,68.1803588867188,0.767984509468079,4.07051801681519,68.0346984863281,0.785980641841888,1.21203315258026,68.0851211547852,5.18104791641235,1.36357915401459,68.0735702514648,5.15914058685303,3.15585994720459,64.651237487793,1.66438138484955,3.00136947631836,64.5917129516602,1.46235930919647,2.96417832374573,64.5486755371094,1.38484394550323,1.9572046995163,65.494743347168,4.64888525009155,3.87331128120422,67.4057464599609,1.86234366893768,3.94303107261658,67.5915451049805,1.86879432201386,4.02576684951782,67.7782363891602,1.8133624792099,3.96108222007751,67.7949905395508,1.83986985683441,3.44512820243835,66.4780807495117,1.56252491474152,3.43452668190002,66.544075012207,1.56754410266876,4.16763210296631,67.3066482543945,0.752300679683685,4.20861339569092,67.4810333251953,0.767211616039276,4.22824621200562,67.6161880493164,0.803533613681793,4.31191396713257,67.4798049926758,0.92854231595993,4.27010297775269,67.3647155761719,0.873295187950134,4.22759103775024,67.2292633056641,0.857036769390106,3.96591925621033,67.3817825317383,1.17504632472992,3.84721398353577,67.2841262817383,1.23387622833252,3.73140645027161,67.1730880737305,1.3115656375885,3.84368395805359,67.1692886352539,1.13736081123352,\n3.9296715259552,67.2579803466797,1.06381285190582,4.02764272689819,67.3290405273438,1.01120853424072,3.62845778465271,65.8809585571289,1.46909356117249,3.58848738670349,66.1250152587891,1.52465927600861,3.46977925300598,65.8928146362305,1.62517940998077,3.54804134368896,65.7373275756836,1.51209759712219,3.69628596305847,65.9059600830078,1.3513650894165,3.72170567512512,66.0722503662109,1.36401319503784,3.63475179672241,65.7507247924805,1.33598518371582,3.80204892158508,67.4645614624023,1.6423020362854,3.81955742835999,67.4326095581055,1.54928922653198,3.89767050743103,67.5244903564453,1.53833293914795,3.84696125984192,67.4156188964844,1.44847130775452,3.98500466346741,67.5406188964844,1.42541027069092,3.5180983543396,66.2538375854492,1.59009373188019,3.46437072753906,66.3058853149414,1.68118560314178,3.52468132972717,66.3413772583008,1.55722069740295,3.48903250694275,66.0722503662109,1.62239384651184,3.5735285282135,66.2663726806641,1.51193714141846,3.35272622108459,65.8405303955078,1.48823237419128,3.39298939704895,65.8021926879883,1.53717470169067,3.41420316696167,65.7718048095703,1.38643348217011,3.46366572380066,65.758544921875,1.45361733436584,3.44315075874329,65.7761459350586,1.59451007843018,4.12264156341553,67.9515380859375,1.69186997413635,4.04694747924805,67.9766082763672,1.70980203151703,4.21951961517334,68.0857162475586,1.5204074382782,4.13125371932983,68.1192398071289,1.530766248703,4.36612987518311,68.1797943115234,1.10023164749146,4.25924062728882,68.2200164794922,1.09791100025177,4.1071252822876,68.2164459228516,1.04108142852783,4.32454586029053,68.07080078125,0.573556303977966,4.3097767829895,67.9047622680664,0.469022572040558,4.31919193267822,68.1753234863281,0.716215848922729,4.42688226699829,68.1401824951172,0.726928353309631,4.43175458908081,68.043342590332,0.591847240924835,4.41548633575439,67.8843612670898,0.494797825813293,4.30114936828613,67.3556518554688,0.410873055458069,4.20437002182007,67.3710784912109,0.377230167388916,4.27088451385498,67.6760330200195,0.405537307262421,4.37260341644287,67.6578216552734,0.435535669326782,\n3.8642098903656,65.9823837280273,0.817893385887146,3.77061247825623,65.9289932250977,0.778227150440216,3.87505173683167,66.1986083984375,0.589296579360962,3.96625018119812,66.2316131591797,0.632395684719086,3.69940090179443,66.0262451171875,0.751195728778839,3.79279160499573,66.2544708251953,0.578169524669647,3.9935986995697,66.5801467895508,0.438086152076721,4.08373022079468,66.5898590087891,0.481809765100479,3.54882621765137,65.7025451660156,1.30097436904907,3.47937512397766,65.772590637207,1.25227952003479,3.581782579422,66.3640899658203,0.962329745292664,3.96330523490906,67.5897827148438,1.79621553421021,4.04697608947754,67.7592926025391,1.7442946434021,3.89645266532898,67.4201278686523,1.79242742061615,3.8892285823822,67.4412078857422,1.7214183807373,3.94782614707947,67.5932006835938,1.7199592590332,4.02466678619385,67.7432250976563,1.66987860202789,4.1498556137085,67.9110260009766,1.63450610637665,4.2531623840332,68.0256195068359,1.48009717464447,4.12253856658936,67.8726043701172,1.5736631155014,4.22431135177612,67.9674606323242,1.43996977806091,3.6584689617157,67.0526580810547,1.73420250415802,3.70589375495911,67.2161331176758,1.85662436485291,3.77640986442566,67.0984420776367,1.69524645805359,3.81549096107483,67.2351303100586,1.79819941520691,3.84403109550476,67.2678833007813,1.73510146141052,3.81034016609192,67.1487045288086,1.63960492610931,3.81980538368225,67.2020645141602,1.58304333686829,3.8460910320282,67.3059692382813,1.67176628112793,3.62339448928833,66.9600143432617,1.55528903007507,3.54900121688843,66.8945693969727,1.52178120613098,3.6070408821106,66.8924865722656,1.46785020828247,3.68474149703979,66.9038314819336,1.43001317977905,3.76875758171082,66.9739532470703,1.43453121185303,3.76291394233704,67.0144805908203,1.57237350940704,3.80492234230042,67.0476531982422,1.38833773136139,3.79968523979187,67.0783081054688,1.52131009101868,3.81678700447083,67.1221084594727,1.34357035160065,3.81176257133484,67.1440734863281,1.46728658676147,3.50874066352844,66.8785171508789,1.61766111850739,3.4727201461792,66.7689819335938,1.55034828186035,\n3.51999497413635,66.7786865234375,1.45502161979675,3.5054178237915,66.8579483032227,1.6944785118103,3.46841979026794,66.7569046020508,1.63060021400452,3.58814311027527,66.776741027832,1.40819585323334,3.807368516922,66.9411163330078,1.14656984806061,3.84839510917664,67.056884765625,1.12197256088257,3.43414974212646,66.544807434082,1.51670002937317,3.44125318527222,66.4587707519531,1.53559422492981,3.47409510612488,66.4686737060547,1.48404669761658,3.4670684337616,66.5475540161133,1.45423448085785,4.38141489028931,67.7970275878906,0.625199139118195,4.34833574295044,67.6143646240234,0.588272631168365,4.38872814178467,67.6345138549805,0.510305225849152,4.42740917205811,67.841178894043,0.558445572853088,4.2903265953064,67.3601684570313,0.577212631702423,4.32288837432861,67.3539276123047,0.49212783575058,4.38653898239136,67.9980850219727,0.787152171134949,4.38902473449707,67.9229583740234,0.688140153884888,4.43982934951782,67.9834518432617,0.637882053852081,4.43614435195923,68.0685043334961,0.75418084859848,4.23430633544922,67.7607574462891,0.679528534412384,4.24083995819092,67.8800277709961,0.740421533584595,4.23906660079956,67.9548034667969,0.840360522270203,4.19893836975098,67.6024551391602,0.648272752761841,4.14131736755371,67.3782043457031,0.647528231143951,4.23399543762207,67.748893737793,0.875052452087402,4.23211860656738,67.8589401245117,0.968259572982788,4.27247667312622,67.753776550293,1.0994166135788,4.31989812850952,67.6349105834961,0.991671323776245,4.02612638473511,67.1929244995117,0.955600678920746,3.97565674781799,67.0437240600586,0.957537412643433,3.90903830528259,66.8881912231445,0.988696575164795,4.06195783615112,66.8649139404297,0.899783492088318,4.15113639831543,67.0703430175781,0.85826051235199,4.23475360870361,67.6988067626953,1.12792015075684,4.17958831787109,67.5111541748047,1.15129017829895,3.79353785514832,67.3299026489258,1.47933793067932,3.81423401832581,67.3028945922852,1.36028480529785,3.78962540626526,67.3689498901367,1.5551506280899,3.90460419654846,67.3995056152344,1.31119799613953,3.75604748725891,67.24462890625,1.52793085575104,\n3.7315526008606,67.1935272216797,1.42468738555908,3.77796149253845,67.3406295776367,1.60282015800476,3.87115454673767,67.7310028076172,1.6006715297699,3.8330671787262,67.5994567871094,1.63931965827942,3.99071335792542,67.9273452758789,1.4354612827301,3.91644883155823,67.8448715209961,1.53315281867981,4.22433996200562,67.9758987426758,1.1544588804245,4.37294626235962,68.028694152832,1.10267627239227,4.39809846878052,68.1035537719727,1.09824275970459,4.42650461196899,68.103515625,0.912913143634796,4.40633726119995,68.1802520751953,0.900287568569183,4.38934421539307,68.0283737182617,0.932290434837341,3.93147158622742,66.1487808227539,0.884068429470062,3.85331177711487,66.0361099243164,1.0461950302124,3.78953862190247,65.8569183349609,0.989757895469666,3.96036219596863,66.3272476196289,0.950800895690918,3.87919926643372,66.2271347045898,1.10150444507599,4.0231728553772,66.348518371582,0.708833396434784,4.03828191757202,66.4771881103516,0.78782194852829,4.12526702880859,66.6488571166992,0.565632522106171,4.12027359008789,66.7189025878906,0.653512239456177,3.99896168708801,66.7890167236328,0.74941873550415,3.94511961936951,66.5834579467773,0.875204086303711,3.89214205741882,66.4620132446289,1.02080261707306,3.65220642089844,66.1826477050781,1.42512059211731,3.6650333404541,66.3706741333008,1.42390918731689,3.8919985294342,67.7197341918945,1.52481913566589,4.08569812774658,67.5328598022461,1.28870582580566,4.10027456283569,67.7684555053711,1.27417016029358,4.15168952941895,67.8459701538086,1.24676203727722,3.9676787853241,67.8103256225586,1.41776275634766,3.99032139778137,66.7081985473633,0.999640047550201,3.92440438270569,66.5994186401367,1.12194168567657,3.82049965858459,66.3747329711914,1.15423321723938,3.85150742530823,66.5263061523438,1.23127043247223,3.55067896842957,66.5179595947266,1.42015624046326,3.77352738380432,66.8165588378906,1.15687823295593,3.78132176399231,66.7271575927734,1.16200530529022,3.8440535068512,66.7906646728516,1.06329357624054,3.72218108177185,66.7941589355469,1.26367807388306,3.72475647926331,66.6822204589844,1.25772345066071,\n3.7447817325592,66.8978118896484,1.28288722038269,4.10149478912354,67.1040878295898,0.743085324764252,4.07173776626587,67.109619140625,0.676203727722168,4.21170806884766,67.068962097168,0.589853882789612,4.23256063461304,67.0365829467773,0.500688910484314,4.2025899887085,67.0144882202148,0.415823400020599,4.11017560958862,67.0213012695313,0.376402735710144,3.61900401115417,67.0411911010742,1.7905125617981,4.22887229919434,67.9261016845703,1.06965661048889,3.90949845314026,67.8031692504883,1.50299596786499,4.04360151290894,67.2837524414063,0.968169152736664,3.52845144271851,66.807975769043,1.99678945541382,3.49707794189453,66.6140747070313,1.96261894702911,1.38582074642181,70.3855285644531,5.0009617805481,3.60986256599426,66.6596984863281,1.74299871921539,3.63856530189514,66.7910919189453,1.79739606380463,3.55062937736511,66.4580001831055,1.65329933166504,1.19366502761841,65.2249298095703,4.85610389709473,1.0756311416626,65.1947250366211,4.9448094367981,1.08035385608673,65.2848892211914,4.93593168258667,1.20033538341522,65.3307418823242,4.86212158203125,0.934173107147217,65.275016784668,4.98282194137573,0.931443929672241,65.1937103271484,4.99565315246582,0.733690142631531,65.273567199707,4.97549915313721,0.728435397148132,65.1870880126953,4.97911643981934,1.36970221996307,65.2229843139648,4.72263145446777,1.26224589347839,65.2212066650391,4.81006860733032,1.34426963329315,65.4023818969727,4.81390333175659,1.48638927936554,65.4760208129883,4.74349927902222,0.87395191192627,65.2709426879883,4.98687171936035,0.871021270751953,65.1897125244141,4.9949426651001,1.40152037143707,64.8109817504883,4.70733404159546,1.41142177581787,64.882698059082,4.72538137435913,1.47247123718262,64.828369140625,4.59658479690552,1.47469854354858,64.7096939086914,4.5597128868103,1.49344825744629,64.6655349731445,4.56101655960083,1.51618897914886,64.7853393554688,4.55397367477417,1.69742560386658,64.8928680419922,4.15867900848389,1.67222082614899,64.7719802856445,4.31696891784668,1.6290580034256,64.8013305664063,4.36196804046631,1.57378756999969,64.9139556884766,4.40134048461914,\n1.55398416519165,64.8053512573242,4.46878147125244,1.47806465625763,64.9342193603516,4.51615619659424,1.71596801280975,64.5329208374023,4.18517351150513,1.70165550708771,64.2728500366211,4.13927602767944,1.59862303733826,64.0150375366211,4.11862373352051,1.58835256099701,64.6118316650391,4.4310302734375,2.16316890716553,65.0206298828125,2.56838035583496,1.96401083469391,64.9684829711914,3.39649748802185,1.9987086057663,65.3854217529297,3.37620663642883,2.16594982147217,65.4886856079102,2.55456161499023,1.84000194072723,65.2910003662109,4.03854179382324,1.90293252468109,65.7236785888672,4.02813720703125,2.0213098526001,65.8256301879883,3.36226153373718,2.13319611549377,65.9246063232422,2.55418252944946,1.79898393154144,64.1050491333008,3.66027426719666,1.79431402683258,63.91064453125,3.43513488769531,1.89816915988922,64.2348022460938,3.42101287841797,1.96954953670502,64.0471496582031,2.82804870605469,2.09718370437622,65.3103561401367,4.51487350463867,2.30125498771667,64.9214782714844,4.33400440216064,2.42373561859131,64.8997650146484,4.166428565979,2.52821660041809,64.9293899536133,3.81001329421997,2.57886266708374,64.9627914428711,3.6042468547821,2.8619487285614,65.1285095214844,3.20917820930481,2.63870978355408,65.0624465942383,3.40243268013,3.07463717460632,65.1601791381836,3.07438635826111,3.18227171897888,65.2159042358398,2.85541558265686,2.66716241836548,67.9635620117188,4.63999700546265,2.70216584205627,67.9023666381836,4.55283260345459,2.73243880271912,67.8296508789063,4.47092199325562,2.30487561225891,68.0841827392578,4.85247802734375,2.43493890762329,68.0320129394531,4.79486036300659,2.62153291702271,67.8830718994141,4.63614368438721,2.66734838485718,67.8346939086914,4.57017517089844,2.69487380981445,67.781364440918,4.51345729827881,2.75075697898865,67.7393798828125,4.41219806671143,2.71137380599976,67.7354278564453,4.45894527435303,1.4422105550766,68.006217956543,4.83119010925293,1.57590889930725,68.0727996826172,4.84237146377563,4.24951314926147,67.9796752929688,0.988760828971863,4.14486789703369,68.2400207519531,0.891078293323517,\n4.29771661758423,68.2195129394531,0.894079685211182,3.69419884681702,65.7953414916992,0.954218089580536,3.62183690071106,65.8902282714844,0.920439660549164,1.26706755161285,66.6091918945313,5.56980037689209,1.27517330646515,66.7994613647461,5.39773750305176,1.09651041030884,67.0683746337891,5.49785852432251,1.11143863201141,67.1923751831055,5.40110492706299,2.7501916885376,66.9078903198242,4.41789484024048,2.96971368789673,67.0416793823242,4.24683427810669,2.90063047409058,67.1711959838867,4.28111696243286,2.85137224197388,67.1216125488281,4.30856609344482,1.16678643226624,63.2754364013672,4.54892730712891,1.09948623180389,63.1225090026855,4.3932728767395,3.52014875411987,66.5681915283203,1.41023874282837,2.81077241897583,67.5875396728516,4.35087585449219,2.84671950340271,67.6490783691406,4.36929512023926,2.91685771942139,67.739143371582,4.34629249572754,2.14950728416443,68.2113342285156,5.06157875061035,1.88744533061981,67.7128448486328,4.7761607170105,1.90658605098724,67.7306594848633,4.72575330734253,2.66684770584106,67.666862487793,4.40541458129883,2.63094758987427,67.6649475097656,4.37922382354736,2.64179491996765,67.6679153442383,4.34329414367676,2.63837647438049,67.6569290161133,4.35390377044678,2.67725443840027,67.6459045410156,4.37598991394043,2.68379712104797,67.645393371582,4.36187076568604,2.70340514183044,67.6281814575195,4.39374732971191,2.68375492095947,67.6604156494141,4.36853933334351,2.63108110427856,67.6936798095703,4.37489652633667,2.67721843719482,67.6891937255859,4.39469718933105,2.66379165649414,67.723503112793,4.43931007385254,2.64891314506531,67.7717742919922,4.49245023727417,2.60378289222717,67.7730255126953,4.47100353240967,2.62222838401794,67.7251586914063,4.41901969909668,2.62578678131104,67.8282318115234,4.544997215271,2.58604288101196,67.8818740844727,4.60464668273926,2.55071640014648,67.8828201293945,4.57306337356567,2.58477163314819,67.8289108276367,4.51952791213989,2.41274118423462,68.0263519287109,4.7476634979248,2.39053511619568,68.0205841064453,4.70046854019165,2.29294395446777,68.0722198486328,4.79652309417725,\n2.16190576553345,68.1005783081055,4.81578254699707,2.16114211082459,68.0834503173828,4.75154447555542,2.28100919723511,68.0602035522461,4.74056959152222,2.02676129341125,68.1003265380859,4.79745244979858,2.03602194786072,68.0820999145508,4.72639274597168,1.89723575115204,68.0686798095703,4.75530529022217,1.91270339488983,68.0529327392578,4.67381286621094,1.79788935184479,67.9880752563477,4.60268306732178,1.92080700397491,68.1887969970703,5.105628490448,1.93564641475677,68.258659362793,5.19911479949951,2.35538291931152,69.3204345703125,4.8226203918457,2.7937285900116,67.7508544921875,4.45168733596802,2.88425230979919,67.3557815551758,4.30462741851807,2.96637773513794,67.3155670166016,4.22542715072632,3.03101301193237,67.2631759643555,4.13667774200439,2.98313593864441,67.367919921875,4.22117328643799,2.8918879032135,67.4051818847656,4.30441951751709,2.82269477844238,67.8825607299805,4.52608156204224,2.82237696647644,67.8314743041992,4.48638391494751,2.84394216537476,67.7091445922852,4.39417934417725,2.76129055023193,67.5614013671875,4.37353801727295,2.81881189346313,67.542121887207,4.35720634460449,2.89298915863037,67.5231018066406,4.31164932250977,2.74356412887573,67.5781784057617,4.37403583526611,2.7083146572113,67.5445709228516,4.41160869598389,2.72057390213013,67.5724487304688,4.39044380187988,2.73355674743652,67.5681076049805,4.3847131729126,2.72890734672546,67.5457611083984,4.39651870727539,2.78715944290161,67.4943618774414,4.36204719543457,2.83767509460449,67.4912948608398,4.32730150222778,2.90921020507813,67.4769439697266,4.26797485351563,1.46171438694,64.871826171875,4.57088136672974,1.46168184280396,64.8623657226563,4.52993297576904,1.45342350006104,64.8918609619141,4.68999195098877,1.56209766864777,65.5174102783203,4.69710302352905,1.4363579750061,65.2145614624023,4.6585807800293,1.65252137184143,65.5645446777344,4.60052061080933,1.52217984199524,65.2129592895508,4.55981159210205,1.39736211299896,64.9676742553711,4.60638952255249,1.77157056331635,65.6157836914063,4.40959930419922,1.63668429851532,65.2200317382813,4.40786361694336,\n0.726122140884399,65.1174240112305,5.19929122924805,1.13462257385254,65.1242065429688,5.11881446838379,1.27412569522858,65.0849456787109,5.03397226333618,1.36068820953369,65.0242233276367,4.91986703872681,1.5302517414093,64.8403625488281,4.81787014007568,1.49507963657379,64.8809509277344,4.87410831451416,1.46148920059204,64.9282989501953,4.8311505317688,1.43284630775452,64.9356536865234,4.80183410644531,1.40760779380798,64.9272537231445,4.76524639129639,1.39444208145142,64.8453903198242,4.74579191207886,1.5011979341507,64.1316986083984,4.44672012329102,1.55279195308685,64.7089920043945,4.52026653289795,1.58199083805084,64.7010955810547,4.49964618682861,1.70078897476196,64.7076950073242,4.27974700927734,1.64948379993439,64.6882553100586,4.37039136886597,1.85476243495941,64.6218185424805,3.94913387298584,1.58547294139862,64.7184600830078,4.49313879013062,1.42990434169769,64.9447860717773,4.81173467636108,1.25507736206055,66.4016342163086,5.6686840057373,1.24616432189941,66.4787979125977,5.64807605743408,0.97510838508606,66.1322402954102,5.9370002746582,0.987578868865967,66.1314163208008,5.88433408737183,0.935709834098816,66.1356201171875,6.00360631942749,0.844236493110657,66.1403579711914,6.04201221466064,1.00607120990753,63.0317497253418,4.32509899139404,1.40227580070496,63.0594825744629,3.96019172668457,1.25259900093079,62.9927406311035,3.91761565208435,1.01959240436554,62.9540824890137,3.88085770606995,0.780723452568054,62.9210891723633,3.85335659980774,0.690417647361755,63.0074348449707,4.45033359527588,0.882281303405762,63.0210838317871,4.43909072875977,2.49059963226318,64.2022399902344,3.29887342453003,2.43080735206604,64.0347061157227,3.29224872589111,2.17769908905029,63.5968742370605,3.21712899208069,2.27928495407104,63.7407913208008,3.22888469696045,1.66551721096039,63.4309310913086,4.4442834854126,1.5459178686142,63.2607612609863,4.28567314147949,1.41883444786072,63.139892578125,4.14798021316528,1.31143248081207,63.0501441955566,4.07752418518066,1.15474736690521,62.9899597167969,4.0333776473999,0.905233979225159,62.9417953491211,3.99692273139954,\n0.669827342033386,62.909797668457,3.96174693107605,2.22140121459961,63.7321739196777,3.49364185333252,2.35822939872742,63.8762016296387,3.26734066009521,1.66536605358124,65.7555770874023,4.83231115341187,1.24421012401581,65.8331680297852,5.21903419494629,1.2415417432785,65.8225250244141,5.17691421508789,1.94282019138336,65.3339538574219,4.64607572555542,1.38889932632446,64.7831268310547,5.05037975311279,1.25069510936737,64.7823028564453,5.21552419662476,1.45800125598907,64.8723449707031,4.52737236022949,1.97246038913727,64.5256500244141,3.32755517959595,2.10083770751953,64.4759292602539,2.59164428710938,2.70098495483398,63.9992523193359,2.42093873023987,1.47236037254334,68.0681533813477,5.15111064910889,1.67923533916473,68.144905090332,5.13741636276245,1.36034119129181,66.582389831543,5.42577075958252,1.22313511371613,67.8263702392578,4.87110996246338,1.41561686992645,67.4029159545898,4.80356073379517,1.24386429786682,67.3269653320313,5.16441249847412,1.28025853633881,67.2014999389648,5.19281053543091,2.18041920661926,68.451286315918,5.21900701522827,2.60483956336975,68.5525817871094,5.06904554367065,2.90485191345215,68.4689865112305,4.79139518737793,3.01555633544922,68.2925415039063,4.58393335342407,3.03188824653625,68.0995864868164,4.40577125549316,3.07575488090515,68.1117324829102,4.32803773880005,3.11300373077393,68.1376419067383,4.27170753479004,0.951111435890198,67.8357391357422,5.28150749206543,1.03982937335968,67.8353805541992,5.23061275482178,1.1349960565567,67.8375625610352,5.02568531036377,1.24151837825775,67.8561248779297,4.87322998046875,1.39355981349945,67.7509155273438,4.78209352493286,1.0940203666687,67.8359756469727,5.13545799255371,2.80376482009888,67.4326477050781,4.36306619644165,2.88349223136902,67.2817993164063,4.30629730224609,2.94912886619568,67.2709045410156,4.24452877044678,2.98852252960205,67.2110366821289,4.19697189331055,2.77813315391541,67.3302536010742,4.38874912261963,2.80464458465576,67.3863372802734,4.357825756073,2.70970630645752,67.5081481933594,4.41629791259766,2.68796753883362,67.5142364501953,4.43299722671509,\n1.6923543214798,68.0826873779297,4.85076808929443,1.07724368572235,66.2140274047852,5.78987312316895,0.990124940872192,66.1395797729492,5.85217237472534,0.957006216049194,66.0988311767578,5.85218954086304,0.955944538116455,66.0326766967773,5.69455099105835,1.37360000610352,65.8612747192383,5.2225341796875,1.30291390419006,65.8606109619141,5.23633575439453,1.28696703910828,65.9717864990234,5.26826047897339,1.2058436870575,66.1310348510742,5.20236778259277,1.2073700428009,66.081657409668,5.14830446243286,1.15509605407715,66.0897750854492,5.2003436088562,3.07375311851501,67.1264953613281,4.12566518783569,3.10644316673279,67.2067260742188,4.03005695343018,3.01146101951599,67.4560241699219,4.16344738006592,3.26566362380981,67.3137969970703,3.85877799987793,3.23967552185059,67.3935546875,3.79584240913391,3.00219583511353,67.4986190795898,4.20324993133545,3.23345947265625,67.4361953735352,3.82250928878784,3.47227358818054,67.1351623535156,3.1978120803833,3.20911312103271,67.6038055419922,3.84602642059326,1.38017463684082,67.8658065795898,4.78988122940063,1.04489850997925,67.6455078125,5.28492164611816,0.946268200874329,67.6453552246094,5.33524036407471,1.11085093021393,67.6494064331055,5.18183755874634,1.3418071269989,67.3768310546875,4.97024059295654,1.24413287639618,67.4093322753906,5.11822652816772,1.18746721744537,67.4170608520508,5.1835298538208,1.15831828117371,67.3799209594727,5.24726247787476,2.03133249282837,68.5468063354492,5.26267957687378,2.20468068122864,68.7326507568359,5.18999338150024,1.96770107746124,68.4115371704102,5.29732751846313,1.24037265777588,68.9764862060547,5.24644804000854,1.93664562702179,68.8729934692383,5.20075178146362,2.08420419692993,68.9143524169922,5.08791589736938,1.66595792770386,69.2999420166016,5.27965211868286,2.69618439674377,69.3363647460938,4.62717247009277,1.21942925453186,69.2810668945313,5.24096918106079,2.30219793319702,70.5151748657227,4.51481103897095,1.65603744983673,65.8645401000977,4.82821130752563,1.5150705575943,65.2759857177734,4.97173738479614,1.61782228946686,65.1860046386719,4.88035678863525,\n2.83090734481812,67.7513885498047,4.43764114379883,2.90546679496765,67.8018112182617,4.39182186126709,3.05201172828674,67.8971252441406,4.29138422012329,3.07350969314575,67.9136047363281,4.25318050384521,3.08565521240234,68.0720443725586,4.28964042663574,3.09590840339661,67.9019241333008,4.18263244628906,3.12226796150208,68.0895614624023,4.23420143127441,3.15805292129517,67.9133453369141,4.03698539733887,1.85307800769806,69.3176803588867,5.19680690765381,1.95780122280121,69.5691375732422,5.11974716186523,2.00819277763367,69.8451461791992,4.99117994308472,2.05755305290222,70.1033020019531,4.89759159088135,1.51351356506348,68.9728775024414,5.34801340103149,3.17292428016663,69.0089263916016,3.65988326072693,3.24468231201172,69.3821563720703,3.10906028747559,3.19405722618103,69.4203338623047,3.30144023895264,3.1433367729187,69.4741287231445,3.5175678730011,3.16293168067932,68.8886337280273,3.85672426223755,3.23307037353516,68.7058258056641,3.79092526435852,1.34411311149597,68.3689804077148,5.45315217971802,1.47962760925293,67.904182434082,4.78232955932617,1.56587851047516,67.9845123291016,4.78964614868164,2.32223176956177,66.6271820068359,4.62494134902954,2.52399301528931,66.5070343017578,4.41808605194092,3.18077445030212,68.1741943359375,4.13968563079834,3.18250513076782,61.6550064086914,0.15494367480278,2.97731566429138,62.090576171875,0.236494928598404,2.63404870033264,61.4835586547852,1.09880757331848,2.63750290870667,60.7715454101563,1.24464046955109,1.15286767482758,59.9498062133789,2.77086806297302,1.34675312042236,60.1751556396484,2.46136975288391,0.707067012786865,60.1917724609375,2.30265927314758,1.93906819820404,59.9140472412109,2.56447672843933,1.31039726734161,59.7857666015625,2.86505627632141,3.30667567253113,60.0582466125488,1.52897572517395,3.21281981468201,60.7512435913086,0.686783790588379,2.83494830131531,60.101676940918,1.82382214069366,2.0032696723938,60.1697044372559,2.2233898639679,2.95462036132813,59.8311195373535,2.23044967651367,3.44337105751038,61.3207168579102,0.0308288335800171,3.00886535644531,64.578254699707,-1.40568685531616,\n2.83613109588623,64.6232986450195,-1.88293862342834,3.03651714324951,64.1986770629883,-1.29441452026367,2.85587859153748,64.2701568603516,-1.88409495353699,2.3250470161438,64.3217086791992,-2.30119037628174,2.19409990310669,64.6903381347656,-2.30471992492676,1.47786962985992,64.7402801513672,-2.5796685218811,1.55335366725922,64.3825149536133,-2.64062190055847,0.9145188331604,64.7542877197266,-2.74038743972778,3.18349647521973,64.4910278320313,-0.831904411315918,3.10196471214294,64.0538482666016,-0.768124938011169,3.15863394737244,63.9126052856445,-1.1659996509552,2.94038534164429,64.0237808227539,-1.82171845436096,2.44409084320068,64.0830612182617,-2.38203501701355,1.64424133300781,64.1150970458984,-2.65511178970337,3.04022526741028,63.7449569702148,-0.723660707473755,3.83235144615173,67.9229354858398,1.56775510311127,3.77065491676331,67.9044799804688,1.65262651443481,3.95984673500061,67.9680023193359,1.12290859222412,3.83990359306335,67.9484176635742,1.16654276847839,4.05559206008911,68.0735244750977,0.94489711523056,4.04066514968872,68.1123504638672,1.10381245613098,3.96631550788879,67.9070129394531,0.998717308044434,3.69450688362122,67.8655624389648,0.79612410068512,3.64366936683655,67.7518081665039,0.54340922832489,3.59573769569397,67.5238571166992,0.356896281242371,3.86012148857117,67.9690551757813,1.670374751091,3.77919220924377,67.8664474487305,1.73471486568451,3.92326807975769,68.0409240722656,1.53420841693878,3.83544135093689,67.9114608764648,0.998802065849304,3.76413035392761,67.9968872070313,0.952667593955994,3.810711145401,67.8189544677734,0.880330681800842,3.65141010284424,67.6560745239258,0.732728004455566,3.60468745231628,67.442512512207,0.648090064525604,3.46820783615112,66.8373565673828,0.642570853233337,3.52254128456116,67.1582183837891,0.248262137174606,3.60760736465454,67.5348358154297,-0.420371651649475,3.78048825263977,67.6621246337891,0.776360392570496,3.73487710952759,67.4356536865234,0.701585710048676,3.66625213623047,67.1638641357422,0.669500708580017,3.53652048110962,67.141716003418,0.613216578960419,\n3.58888530731201,66.8496170043945,0.698460042476654,3.69785666465759,66.5569381713867,0.76279604434967,3.47390913963318,66.4032516479492,0.940670549869537,3.77345776557922,60.8544502258301,-0.0729393362998962,3.79325795173645,59.9792976379395,1.36709403991699,3.981778383255,59.7930335998535,1.87356519699097,0.777940273284912,61.6627578735352,-3.52194452285767,1.48603999614716,61.8513412475586,-3.45622205734253,2.36290335655212,62.0750350952148,-3.00863814353943,3.46754050254822,62.5932464599609,-2.43091034889221,3.77708125114441,62.6162300109863,-1.66679668426514,3.93208146095276,62.1959915161133,-0.753983974456787,3.28955364227295,67.0566711425781,3.80089235305786,1.19604671001434,66.8455123901367,5.48549938201904,1.62394678592682,64.794921875,4.62034463882446,1.47073328495026,64.8858413696289,4.72852897644043,1.85679113864899,68.1447296142578,4.88398790359497,1.74986064434052,65.9342269897461,4.76275300979614,1.80883491039276,65.8382873535156,4.73427295684814,1.89601337909698,65.7000503540039,4.67515993118286,1.7078458070755,68.1302337646484,4.88863897323608,1.68416428565979,68.1078338623047,4.86055564880371,0.00038185715675354,68.2644119262695,4.91810369491577,0.00735509395599365,68.2456970214844,4.89325475692749,2.08362030982971,63.940242767334,4.07634019851685,2.23859047889709,63.9939613342285,3.83288836479187,2.36071610450745,64.0901718139648,3.55181813240051,-1.03999102115631,64.1953964233398,4.12683153152466,-1.18111038208008,64.2263336181641,3.89086365699768,-1.30252110958099,64.3730163574219,3.61477756500244,-1.02499151229858,65.8723907470703,4.46659708023071,2.35556626319885,65.6158218383789,4.39196586608887,0.873621225357056,68.2819519042969,5.43281412124634,-2.36207580566406,66.7793350219727,1.48702847957611,-1.83337068557739,67.5775299072266,3.52100348472595,-1.13330495357513,67.8164596557617,4.45990085601807,3.02833318710327,67.7973480224609,4.23777866363525,0.964009761810303,69.5016860961914,5.21233224868774,0.943135738372803,69.2242813110352,5.24404191970825,0.703629970550537,68.9851608276367,5.32800006866455,\n0.921748876571655,68.9331893920898,5.30737543106079,1.14702486991882,68.9563522338867,5.31911516189575,-1.53307449817657,69.9197540283203,-1.07180321216583,0.652912974357605,65.5594787597656,4.85395431518555,0.656846284866333,65.6249160766602,4.75969839096069,0.658797264099121,65.6604156494141,4.71234512329102,0.661505103111267,65.7168884277344,4.6145977973938,0.665562868118286,65.8118057250977,4.4242901802063,0.674360871315002,66.0109024047852,4.04174327850342,0.671546220779419,66.1222076416016,3.37795090675354,0.651402831077576,66.0390167236328,2.57964992523193,0.60585629940033,65.5844116210938,1.97188603878021,0.570160269737244,65.118896484375,1.98627030849457,0.526925444602966,64.5698013305664,1.93749856948853,0.511002540588379,64.1597747802734,2.85311627388,0.493809551000595,64.1792678833008,3.5948166847229,0.525675535202026,64.0711288452148,4.17445087432861,0.541215419769287,64.1743774414063,4.63787937164307,0.250819176435471,65.5190734863281,4.86307859420776,0.228494554758072,65.5870208740234,4.76983070373535,0.196436315774918,65.6303787231445,4.72285842895508,0.15733814239502,65.6800079345703,4.62622213363647,0.099937379360199,65.7448501586914,4.43832969665527,0.0486626923084259,66.0053558349609,4.05459928512573,-0.0147473067045212,66.1213455200195,3.39184832572937,-0.0894939303398132,66.0962219238281,2.59238362312317,-0.161882400512695,65.6560592651367,2.28982543945313,-0.214036017656326,65.1918106079102,2.30449271202087,-0.246274381875992,64.6433258056641,2.29138565063477,-0.218271285295486,64.2160797119141,2.86565065383911,-0.174487501382828,64.2654724121094,3.5662088394165,-0.042945459485054,64.1155548095703,4.20135974884033,0.0312285125255585,64.2037506103516,4.64215660095215,1.04420983791351,65.4587783813477,4.85055589675903,1.07440137863159,65.5217056274414,4.7552924156189,1.11115729808807,65.5597534179688,4.70713710784912,1.15413916110992,65.6030502319336,4.60909032821655,1.21435952186584,65.6588134765625,4.41917610168457,1.29186642169952,65.9093704223633,4.03323268890381,1.34964776039124,66.015998840332,3.36839866638184,\n1.39229929447174,65.9818115234375,2.56691646575928,1.3859030008316,65.5365524291992,2.26322388648987,1.36666464805603,65.0697708129883,2.27732515335083,1.3138815164566,64.5228652954102,2.26457142829895,1.24027609825134,64.1034622192383,2.84058260917664,1.16210687160492,64.0930633544922,3.62342405319214,1.10009157657623,64.0964889526367,4.17122077941895,1.0526248216629,64.1909713745117,4.50982093811035,1.89644730091095,67.7359085083008,4.67418622970581,1.81632149219513,67.7875213623047,4.61641120910645,2.12802863121033,67.6517791748047,4.72160243988037,1.98360979557037,67.7028198242188,4.71778392791748,1.77853500843048,67.8334732055664,4.57319593429565,1.75040686130524,67.8640594482422,4.5403995513916,2.42679309844971,67.6176147460938,4.63404083251953,2.54108619689941,67.6052627563477,4.51983451843262,2.48956918716431,67.6133270263672,4.57629919052124,1.74333274364471,67.8989181518555,4.53774070739746,1.93537843227386,67.7207946777344,4.6994047164917,2.57160806655884,67.5975723266602,4.45073556900024,2.5858838558197,67.6601409912109,4.42239618301392,2.58265948295593,67.6481552124023,4.43020439147949,2.57664966583252,67.6871948242188,4.4448299407959,2.55325865745544,67.770622253418,4.51302242279053,2.56909608840942,67.7202301025391,4.47619247436523,2.50709199905396,67.8812103271484,4.58537578582764,2.53704166412354,67.8295440673828,4.54725313186646,2.36653184890747,68.0211791992188,4.67595386505127,2.16523623466492,68.0977172851563,4.71221017837524,2.27045369148254,68.0672378540039,4.70446872711182,2.05515193939209,68.1021881103516,4.69430780410767,1.94643938541412,68.0781097412109,4.65700387954712,1.84540617465973,68.0238876342773,4.60649824142456,2.27108001708984,67.6280059814453,4.70892524719238,1.98273718357086,67.7163162231445,4.56902360916138,1.9115127325058,67.7589797973633,4.53995370864868,2.13523030281067,67.6635894775391,4.58285903930664,2.03138518333435,67.6998062133789,4.58159112930298,1.87199437618256,67.7949829101563,4.52198696136475,1.8542720079422,67.8257751464844,4.5079026222229,2.36474823951721,67.6484298706055,4.5119104385376,\n2.31572771072388,67.6422805786133,4.5551061630249,1.86171853542328,67.868896484375,4.5054759979248,2.41878652572632,67.6660537719727,4.43914270401001,2.44726538658142,67.6855010986328,4.43181991577148,2.46289682388306,67.7375793457031,4.46374797821045,2.44555950164795,67.7956695556641,4.49104022979736,2.45723295211792,67.7605285644531,4.47634077072144,2.4117910861969,67.8728866577148,4.51987743377686,2.43361759185791,67.8368377685547,4.50457382202148,2.31002712249756,67.9707336425781,4.55646896362305,2.16502261161804,68.0245590209961,4.57177495956421,2.24073529243469,68.0030136108398,4.56828546524048,2.08600091934204,68.0280380249023,4.56502389907837,2.00812268257141,68.0116424560547,4.55059480667114,1.93588101863861,67.9740905761719,4.53102397918701,2.23815989494324,67.6467971801758,4.57702589035034,-0.212368905544281,67.8996810913086,4.63779544830322,-0.485981106758118,67.8154220581055,4.7144570350647,-0.314577341079712,67.8651428222656,4.70246028900146,-0.0699974000453949,67.9629440307617,4.49406051635742,-0.0349433273077011,67.9887771606445,4.4476261138916,-0.826956033706665,67.8586120605469,4.60484981536865,-0.956437468528748,67.8552551269531,4.4510293006897,-0.900565505027771,67.865234375,4.52698564529419,-0.0208806097507477,68.0293426513672,4.44375610351563,-0.258073717355728,67.8792419433594,4.67536354064941,-0.998348236083984,67.8886108398438,4.3549690246582,-1.00609660148621,67.9421310424805,4.31744146347046,-1.00461220741272,67.9233016967773,4.3282585144043,-0.949204087257385,68.0249328613281,4.44410514831543,-0.976211071014404,67.9849166870117,4.39273262023926,-0.874837517738342,68.1462326049805,4.54314088821411,-0.919130444526672,68.0910263061523,4.49123859405518,-0.689786434173584,68.2753372192383,4.66390991210938,-0.450264871120453,68.3228759765625,4.70611143112183,-0.573601424694061,68.3050308227539,4.69983911514282,-0.326902955770493,68.3137054443359,4.67624616622925,-0.210561603307724,68.2769317626953,4.61912107467651,-0.10955773293972,68.1954116821289,4.54428195953369,-0.650413751602173,67.8144989013672,4.70292139053345,\n-0.229091107845306,67.9318695068359,4.42529535293579,-0.494329631328583,67.8742752075195,4.40578269958496,-0.360107153654099,67.9088897705078,4.41941356658936,-0.122926339507103,67.9665222167969,4.44002151489258,-0.759347319602966,67.912353515625,4.40942287445068,-0.858121633529663,67.9182205200195,4.40049695968628,-0.81566846370697,67.9212646484375,4.40700912475586,-0.126330554485321,68.0354919433594,4.45229911804199,-0.893098115921021,67.9021987915039,4.38819122314453,-0.896688580513,67.9520492553711,4.40433549880981,-0.87952196598053,67.9892578125,4.42123937606812,-0.852579474449158,68.0385284423828,4.44430255889893,-0.796185731887817,68.1190872192383,4.48092985153198,-0.829913258552551,68.0828094482422,4.46386814117432,-0.65356719493866,68.2033767700195,4.52140235900879,-0.466939032077789,68.2333831787109,4.5374698638916,-0.563301205635071,68.2218780517578,4.53163146972656,-0.369929194450378,68.2275085449219,4.53461980819702,-0.277927368879318,68.2034759521484,4.52329397201538,-0.197574734687805,68.1487274169922,4.49941539764404,-0.622779250144959,67.8752670288086,4.40379571914673,-0.141183137893677,67.9313125610352,4.56592798233032,-0.105590149760246,67.9471282958984,4.52999401092529,-0.317027002573013,43.3981781005859,-4.17614793777466,-0.834381639957428,43.4859733581543,-4.23113298416138,-1.51100981235504,44.4054069519043,-4.25199365615845,-1.4732049703598,44.902889251709,-4.17614889144897,-0.0162359997630119,43.5158843994141,-4.1427001953125,-1.28199899196625,45.1632194519043,-4.1427001953125,0.158467993140221,43.6501235961914,-4.15208005905151,-1.10729598999023,45.2974548339844,-4.15208101272583,0.628645002841949,43.7916564941406,-4.30703783035278,0.32362699508667,43.5572891235352,-4.30703687667847,-1.15446102619171,45.4809532165527,-4.3070387840271,-0.849443018436432,45.7153167724609,-4.3070387840271,0.727638006210327,44.0849380493164,-4.165198802948,0.563943028450012,43.9616775512695,-4.165198802948,-0.701821029186249,45.6090087890625,-4.16520023345947,-0.538125991821289,45.7322692871094,-4.165198802948,\n1.17372703552246,44.2080078125,-4.30703783035278,0.886372923851013,43.9871635437012,-4.30703783035278,-0.591714978218079,45.910831451416,-4.30703783035278,-0.304394006729126,46.1316452026367,-4.30703783035278,1.43661201000214,44.6284790039063,-4.19403791427612,1.11930799484253,44.3859214782715,-4.165198802948,-0.146456003189087,46.0332565307617,-4.16520023345947,0.170848995447159,46.2758102416992,-4.19403791427612,1.68137609958649,44.8160705566406,-3.78847002983093,1.56688797473907,44.7282600402832,-4.0851788520813,0.301124006509781,46.3755912780762,-4.0851788520813,0.415612012147903,46.4634017944336,-3.78847002983093,-1.59946060180664,44.3374443054199,-3.79821419715881,-0.914093196392059,43.419677734375,-3.78314900398254,-0.0272600017488003,43.5074119567871,-3.7880527973175,-1.29302394390106,45.1547470092773,-3.7880527973175,0.181598216295242,43.6708488464355,-3.79498100280762,-1.07914197444916,45.3190879821777,-3.79843235015869,-0.701821029186249,45.6090126037598,-3.81037211418152,0.563943028450012,43.9616775512695,-3.81037211418152,0.727638006210327,44.0849342346191,-3.81037211418152,-0.538125991821289,45.7322692871094,-3.81037211418152,-0.148130998015404,46.0319519042969,-3.81037211418152,1.11763298511505,44.3846168518066,-3.81037211418152,1.26549303531647,44.4971542358398,-3.82166981697083,-0.000269999989541247,46.1444854736328,-3.82167100906372,1.30914115905762,44.5305786132813,-3.86609816551209,0.0433779992163181,46.1779098510742,-3.8660991191864,-0.367087990045547,43.3597106933594,-3.78918409347534,0.378194004297256,43.486270904541,-3.92864799499512,0.683211982250214,43.7206382751465,-3.92864799499512,0.94093906879425,43.9161491394043,-3.92864799499512,1.228276014328,44.1369781494141,-3.92864799499512,0.443740993738174,43.4009666442871,-3.79230833053589,0.748758971691132,43.6353302001953,-3.79230904579163,1.2905980348587,44.0491600036621,-3.79230833053589,1.00648701190948,43.8308448791504,-3.79230833053589,1.37339198589325,44.5797996520996,-3.80079698562622,0.107629001140594,46.2271347045898,-3.80079770088196,\n-0.358994990587235,46.20263671875,-3.92864799499512,-0.646282017230988,45.9818458557129,-3.92864799499512,-0.904009938240051,45.7863349914551,-3.92864799499512,-1.20902800559998,45.5519676208496,-3.92864799499512,-1.52326595783234,44.8644218444824,-3.78918409347534,-0.427762001752853,46.2854347229004,-3.79230833053589,-0.711830019950867,46.0671539306641,-3.79230904579163,-0.969556987285614,45.8716430664063,-3.79230833053589,-1.27457499504089,45.6372756958008,-3.79230904579163,-13.6780347824097,1.56476700305939,-0.962452054023743,-13.5355319976807,2.28442907333374,-0.326824009418488,-13.7296142578125,1.90572786331177,0.0347840003669262,-13.8451042175293,1.28352797031403,-0.534878015518188,-13.2113485336304,3.41421222686768,0.780472993850708,-13.4375886917114,2.95067405700684,1.12730300426483,-12.3108987808228,4.26939582824707,1.75078189373016,-12.5499305725098,3.72543716430664,2.15108489990234,-10.9267930984497,4.62305116653442,2.39914608001709,-11.0607147216797,4.0776162147522,2.87612700462341,-13.7357864379883,1.83517897129059,0.0675569996237755,-13.4553098678589,2.88778805732727,1.16740500926971,-13.4221811294556,2.62378597259521,1.13361215591431,-13.659797668457,1.58253502845764,0.0165539998561144,-12.5724210739136,3.66829299926758,2.19642400741577,-12.595648765564,3.34137725830078,2.16981601715088,-11.067608833313,3.99253296852112,2.89867806434631,-11.0777006149292,3.67775297164917,2.90849208831787,-13.8719444274902,1.31002199649811,0.425152987241745,-13.8813171386719,0.922089993953705,-0.131953999400139,-13.7507238388062,1.20414614677429,-0.352847993373871,-13.7218284606934,2.18296194076538,1.73859214782715,-12.8380451202393,2.85210108757019,2.91106700897217,-11.2669439315796,3.18960094451904,3.69444298744202,-13.8856010437012,1.00176298618317,-0.627758979797363,-13.7876510620117,0.865270912647247,-1.45944786071777,-13.8358287811279,1.2590719461441,-0.456277012825012,-7.71573686599731,2.20191693305969,1.16589915752411,-7.56110048294067,1.46297514438629,0.62024998664856,-7.64086675643921,1.2053279876709,1.01679396629334,\n-7.77079105377197,1.89633202552795,1.61284804344177,-8.34208297729492,3.50494909286499,2.02134108543396,-8.44800853729248,3.08205199241638,2.58425903320313,-9.51651096343994,3.81002974510193,2.96585988998413,-9.35363388061523,4.35058403015137,2.47706699371338,-7.82847023010254,1.84765613079071,1.64134502410889,-7.96436500549316,1.67664396762848,1.67775213718414,-8.53395843505859,2.79537510871887,2.64249300956726,-8.46099376678467,3.02799868583679,2.64509105682373,-9.57126045227051,3.48190593719482,3.04697799682617,-9.54757595062256,3.76337790489197,3.0204439163208,-7.85036659240723,0.923666000366211,1.44919002056122,-7.84358215332031,1.19052505493164,1.1865119934082,-7.67029094696045,0.892737984657288,0.995962023735046,-7.72204780578613,0.665284991264343,1.10715901851654,-7.96370410919189,1.32437098026276,2.04898595809937,-8.62763500213623,2.38745093345642,3.37738871574402,-9.67886352539063,2.98630094528198,3.90722489356995,-7.50302839279175,0.0706660002470016,0.16516999900341,-7.65504312515259,0.57694798707962,1.02590584754944,-7.63006162643433,0.858869016170502,0.922900974750519,-7.45552921295166,0.293835997581482,-0.0636129975318909,-7.47746133804321,0.77325302362442,0.103377990424633,-7.6795711517334,1.16882801055908,1.05913496017456,-13.8515253067017,1.04447174072266,-0.519836008548737,-13.9187040328979,0.749768018722534,-0.385737001895905,-13.9613208770752,0.689105987548828,-0.524842023849487,-14.1618280410767,0.693732023239136,0.904721021652222,-14.2566156387329,0.201043993234634,1.2078560590744,-14.2272043228149,-0.0554590001702309,0.292737007141113,-14.1005353927612,0.453911006450653,0.102949999272823,-14.0750226974487,1.22226297855377,2.3223569393158,-14.1696844100952,0.757678985595703,2.74612402915955,-13.1613607406616,1.81473004817963,3.52351808547974,-13.3137845993042,1.41021299362183,4.07391881942749,-11.5029983520508,2.21419310569763,4.46008491516113,-11.6761035919189,1.73573398590088,5.00057792663574,-14.1197128295898,0.75049501657486,0.84908801317215,-13.9271574020386,0.81058794260025,0.591765999794006,\n-13.8647260665894,1.32616198062897,2.01072406768799,-13.9969501495361,1.2639479637146,2.23578906059265,-13.0012092590332,1.92415702342987,3.13362169265747,-13.0971918106079,1.85302400588989,3.45393371582031,-11.3908538818359,2.33619499206543,4.02878093719482,-11.4788293838501,2.24708294868469,4.36365699768066,-14.0445289611816,0.489760965108871,-0.225505992770195,-14.1171455383301,-0.207783997058868,-0.640401005744934,-14.0550327301025,0.529439985752106,0.105508998036385,-13.9215707778931,0.662356019020081,0.12636099755764,-7.83413791656494,-0.0283060017973185,1.913419008255,-8.06515884399414,0.286482006311417,2.91064691543579,-7.95277881622314,0.834507048130035,2.67236089706421,-7.780601978302,0.469280004501343,1.68146514892578,-8.78317642211914,1.03417301177979,4.53717422485352,-8.70439052581787,1.56782102584839,4.13548183441162,-9.94776630401611,1.60068798065186,5.2044620513916,-9.77998733520508,2.07577204704285,4.66377878189087,-7.95914030075073,0.885506987571716,2.59952688217163,-8.74676513671875,1.62127304077148,4.04322910308838,-8.78474044799805,1.72587299346924,3.80446791648865,-8.04425525665283,0.948602974414825,2.30370092391968,-9.76146507263184,2.11520910263062,4.5624737739563,-9.8388090133667,2.19951796531677,4.26146602630615,-7.76102113723755,0.52852201461792,1.38592100143433,-7.91985082626343,0.685284018516541,1.6529289484024,-7.53962087631226,-0.179324001073837,0.333211004734039,-7.71288299560547,0.445039004087448,1.31922614574432,-7.65219831466675,-0.232834994792938,0.904438018798828,-7.80965709686279,0.549328029155731,1.63786089420319,-13.9975500106812,0.58357697725296,-0.134222000837326,-14.0162773132324,-0.11387600004673,-1.19407498836517,-13.9406709671021,0.152143001556396,-1.3564670085907,-13.8613548278809,0.385596007108688,-1.58571898937225,-13.3260583877563,1.52340304851532,-0.926805019378662,-13.6498346328735,0.799180924892426,-0.197821021080017,-13.6360759735107,1.163419008255,0.459197998046875,-13.214916229248,2.19469499588013,-0.354411989450455,-13.3867931365967,1.8975909948349,1.65856885910034,\n-12.879186630249,3.26200866699219,0.666939973831177,-12.6128787994385,2.55630111694336,2.73621797561646,-12.0652027130127,4.01996278762817,1.44470298290253,-11.2527093887329,2.92929005622864,3.43369626998901,-10.8725614547729,4.34354496002197,2.04087495803833,-13.4099502563477,0.802688002586365,-1.48420095443726,-13.4805784225464,0.323792994022369,-1.59506595134735,-8.03701400756836,0.645461976528168,1.01014995574951,-7.90348291397095,1.52642500400543,0.427454024553299,-8.08730697631836,2.19412302970886,0.955696940422058,-8.23932838439941,1.26469194889069,1.94163298606873,-8.62477397918701,3.40587210655212,1.72736203670502,-8.85360431671143,2.13062691688538,3.05519890785217,-9.42286491394043,4.11251783370972,2.11699104309082,-9.80203533172607,2.76634788513184,3.57874298095703,-7.79784631729126,0.794174075126648,-0.103330008685589,-7.82158517837524,0.364942997694016,-0.290657997131348,-13.8217973709106,-0.170460999011993,0.398487001657486,-13.8654460906982,0.0600179992616177,1.26387298107147,-13.8260746002197,0.517706990242004,2.71623492240906,-13.1112518310547,1.06115102767944,3.8931291103363,-11.643946647644,1.41572594642639,4.7784481048584,-13.7150077819824,-0.346439003944397,-0.612541973590851,-13.6095657348633,-0.241651996970177,-1.15343594551086,-8.24737453460693,-0.15752400457859,1.85458099842072,-8.44620132446289,0.104812011122704,2.83339309692383,-9.08258628845215,0.769033014774323,4.3923487663269,-10.0709543228149,1.28220784664154,4.95027685165405,-8.06989288330078,-0.31148499250412,0.740787029266357,-7.96294832229614,-0.289009004831314,0.219812005758286,-13.4217224121094,2.3107750415802,-0.375806987285614,-13.5710763931274,1.59470999240875,-1.01851904392242,-13.103946685791,3.42879104614258,0.713451981544495,-12.2277145385742,4.27713680267334,1.65429794788361,-10.9000606536865,4.61849594116211,2.28014898300171,-13.5571355819702,-0.0426359996199608,-1.52019703388214,-13.7583179473877,0.376628011465073,-1.67076504230499,-13.8444566726685,-0.00786899961531162,-1.59044694900513,-13.687385559082,0.836558997631073,-1.54808294773102,\n-7.63128089904785,1.51451098918915,0.516359984874725,-7.79104614257813,2.23954701423645,1.06171703338623,-8.39723968505859,3.52309203147888,1.89859700202942,-9.36298179626465,4.34764623641968,2.35511302947998,-7.54345893859863,0.770093977451324,-0.0295189991593361,-7.52011299133301,0.315405994653702,-0.201513007283211,-7.88312101364136,-0.0476690009236336,-0.189381003379822,-7.54605770111084,-0.0761459991335869,-0.107980996370316,-14.1586351394653,-0.138848006725311,0.337846010923386,-14.1826257705688,0.10935901850462,1.25752902030945,-14.1024370193481,0.650152027606964,2.78769397735596,-13.2866096496582,1.29429996013641,4.09255599975586,-11.6883716583252,1.60427713394165,5.0113639831543,-13.9429140090942,-0.219302996993065,-1.2073849439621,-14.0385818481445,-0.306542009115219,-0.675978004932404,-8.16566753387451,0.194731995463371,2.91308689117432,-7.9301438331604,-0.113416999578476,1.92874503135681,-8.86132144927979,0.920903027057648,4.54089879989624,-10.0087671279907,1.47676694393158,5.21392393112183,-7.72993421554565,-0.324436992406845,0.821264028549194,-7.6232590675354,-0.286345988512039,0.279785007238388,-13.9344873428345,0.0526309981942177,-1.52636194229126,-7.47345447540283,-0.0321439988911152,-0.00272500002756715,13.6780347824097,1.56476700305939,-0.962452054023743,13.5355319976807,2.28442907333374,-0.326824009418488,13.7296142578125,1.90572786331177,0.0347840003669262,13.8451042175293,1.28352797031403,-0.534878015518188,13.2113485336304,3.41421222686768,0.780472993850708,13.4375886917114,2.95067405700684,1.12730300426483,12.3108987808228,4.26939582824707,1.75078189373016,12.5499305725098,3.72543716430664,2.15108489990234,10.9267930984497,4.62305116653442,2.39914608001709,11.0607147216797,4.0776162147522,2.87612700462341,13.7357864379883,1.83517897129059,0.0675569996237755,13.4553098678589,2.88778805732727,1.16740500926971,13.4221811294556,2.62378597259521,1.13361215591431,13.659797668457,1.58253502845764,0.0165539998561144,12.5724210739136,3.66829299926758,2.19642400741577,12.595648765564,3.34137725830078,2.16981601715088,\n11.067608833313,3.99253296852112,2.89867806434631,11.0777006149292,3.67775297164917,2.90849208831787,13.8719444274902,1.31002199649811,0.425152987241745,13.8813171386719,0.922089993953705,-0.131953999400139,13.7507238388062,1.20414614677429,-0.352847993373871,13.7218284606934,2.18296194076538,1.73859214782715,12.8380451202393,2.85210108757019,2.91106700897217,11.2669439315796,3.18960094451904,3.69444298744202,13.8856010437012,1.00176298618317,-0.627758979797363,13.7876510620117,0.865270912647247,-1.45944786071777,13.8358287811279,1.2590719461441,-0.456277012825012,7.71573686599731,2.20191693305969,1.16589915752411,7.56110048294067,1.46297514438629,0.62024998664856,7.64086675643921,1.2053279876709,1.01679396629334,7.77079105377197,1.89633202552795,1.61284804344177,8.34208297729492,3.50494909286499,2.02134108543396,8.44800853729248,3.08205199241638,2.58425903320313,9.51651096343994,3.81002974510193,2.96585988998413,9.35363388061523,4.35058403015137,2.47706699371338,7.82847023010254,1.84765613079071,1.64134502410889,7.96436500549316,1.67664396762848,1.67775213718414,8.53395843505859,2.79537510871887,2.64249300956726,8.46099376678467,3.02799868583679,2.64509105682373,9.57126045227051,3.48190593719482,3.04697799682617,9.54757595062256,3.76337790489197,3.0204439163208,7.85036659240723,0.923666000366211,1.44919002056122,7.84358215332031,1.19052505493164,1.1865119934082,7.67029094696045,0.892737984657288,0.995962023735046,7.72204780578613,0.665284991264343,1.10715901851654,7.96370410919189,1.32437098026276,2.04898595809937,8.62763500213623,2.38745093345642,3.37738871574402,9.67886352539063,2.98630094528198,3.90722489356995,7.50302839279175,0.0706660002470016,0.16516999900341,7.65504312515259,0.57694798707962,1.02590584754944,7.63006162643433,0.858869016170502,0.922900974750519,7.45552921295166,0.293835997581482,-0.0636129975318909,7.47746133804321,0.77325302362442,0.103377990424633,7.6795711517334,1.16882801055908,1.05913496017456,13.8515253067017,1.04447174072266,-0.519836008548737,13.9187040328979,0.749768018722534,-0.385737001895905,\n13.9613208770752,0.689105987548828,-0.524842023849487,14.1618280410767,0.693732023239136,0.904721021652222,14.2566156387329,0.201043993234634,1.2078560590744,14.2272043228149,-0.0554590001702309,0.292737007141113,14.1005353927612,0.453911006450653,0.102949999272823,14.0750226974487,1.22226297855377,2.3223569393158,14.1696844100952,0.757678985595703,2.74612402915955,13.1613607406616,1.81473004817963,3.52351808547974,13.3137845993042,1.41021299362183,4.07391881942749,11.5029983520508,2.21419310569763,4.46008491516113,11.6761035919189,1.73573398590088,5.00057792663574,14.1197128295898,0.75049501657486,0.84908801317215,13.9271574020386,0.81058794260025,0.591765999794006,13.8647260665894,1.32616198062897,2.01072406768799,13.9969501495361,1.2639479637146,2.23578906059265,13.0012092590332,1.92415702342987,3.13362169265747,13.0971918106079,1.85302400588989,3.45393371582031,11.3908538818359,2.33619499206543,4.02878093719482,11.4788293838501,2.24708294868469,4.36365699768066,14.0445289611816,0.489760965108871,-0.225505992770195,14.1171455383301,-0.207783997058868,-0.640401005744934,14.0550327301025,0.529439985752106,0.105508998036385,13.9215707778931,0.662356019020081,0.12636099755764,7.83413791656494,-0.0283060017973185,1.913419008255,8.06515884399414,0.286482006311417,2.91064691543579,7.95277881622314,0.834507048130035,2.67236089706421,7.780601978302,0.469280004501343,1.68146514892578,8.78317642211914,1.03417301177979,4.53717422485352,8.70439052581787,1.56782102584839,4.13548183441162,9.94776630401611,1.60068798065186,5.2044620513916,9.77998733520508,2.07577204704285,4.66377878189087,7.95914030075073,0.885506987571716,2.59952688217163,8.74676513671875,1.62127304077148,4.04322910308838,8.78474044799805,1.72587299346924,3.80446791648865,8.04425525665283,0.948602974414825,2.30370092391968,9.76146507263184,2.11520910263062,4.5624737739563,9.8388090133667,2.19951796531677,4.26146602630615,7.76102113723755,0.52852201461792,1.38592100143433,7.91985082626343,0.685284018516541,1.6529289484024,7.53962087631226,-0.179324001073837,0.333211004734039,\n7.71288299560547,0.445039004087448,1.31922614574432,7.65219831466675,-0.232834994792938,0.904438018798828,7.80965709686279,0.549328029155731,1.63786089420319,13.9975500106812,0.58357697725296,-0.134222000837326,14.0162773132324,-0.11387600004673,-1.19407498836517,13.9406709671021,0.152143001556396,-1.3564670085907,13.8613548278809,0.385596007108688,-1.58571898937225,13.3260583877563,1.52340304851532,-0.926805019378662,13.6498346328735,0.799180924892426,-0.197821021080017,13.6360759735107,1.163419008255,0.459197998046875,13.214916229248,2.19469499588013,-0.354411989450455,13.3867931365967,1.8975909948349,1.65856885910034,12.879186630249,3.26200866699219,0.666939973831177,12.6128787994385,2.55630111694336,2.73621797561646,12.0652027130127,4.01996278762817,1.44470298290253,11.2527093887329,2.92929005622864,3.43369626998901,10.8725614547729,4.34354496002197,2.04087495803833,13.4099502563477,0.802688002586365,-1.48420095443726,13.4805784225464,0.323792994022369,-1.59506595134735,8.03701400756836,0.645461976528168,1.01014995574951,7.90348291397095,1.52642500400543,0.427454024553299,8.08730697631836,2.19412302970886,0.955696940422058,8.23932838439941,1.26469194889069,1.94163298606873,8.62477397918701,3.40587210655212,1.72736203670502,8.85360431671143,2.13062691688538,3.05519890785217,9.42286491394043,4.11251783370972,2.11699104309082,9.80203533172607,2.76634788513184,3.57874298095703,7.79784631729126,0.794174075126648,-0.103330008685589,7.82158517837524,0.364942997694016,-0.290657997131348,13.8217973709106,-0.170460999011993,0.398487001657486,13.8654460906982,0.0600179992616177,1.26387298107147,13.8260746002197,0.517706990242004,2.71623492240906,13.1112518310547,1.06115102767944,3.8931291103363,11.643946647644,1.41572594642639,4.7784481048584,13.7150077819824,-0.346439003944397,-0.612541973590851,13.6095657348633,-0.241651996970177,-1.15343594551086,8.24737453460693,-0.15752400457859,1.85458099842072,8.44620132446289,0.104812011122704,2.83339309692383,9.08258628845215,0.769033014774323,4.3923487663269,10.0709543228149,1.28220784664154,4.95027685165405,\n8.06989288330078,-0.31148499250412,0.740787029266357,7.96294832229614,-0.289009004831314,0.219812005758286,13.4217224121094,2.3107750415802,-0.375806987285614,13.5710763931274,1.59470999240875,-1.01851904392242,13.103946685791,3.42879104614258,0.713451981544495,12.2277145385742,4.27713680267334,1.65429794788361,10.9000606536865,4.61849594116211,2.28014898300171,13.5571355819702,-0.0426359996199608,-1.52019703388214,13.7583179473877,0.376628011465073,-1.67076504230499,13.8444566726685,-0.00786899961531162,-1.59044694900513,13.687385559082,0.836558997631073,-1.54808294773102,7.63128089904785,1.51451098918915,0.516359984874725,7.79104614257813,2.23954701423645,1.06171703338623,8.39723968505859,3.52309203147888,1.89859700202942,9.36298179626465,4.34764623641968,2.35511302947998,7.54345893859863,0.770093977451324,-0.0295189991593361,7.52011299133301,0.315405994653702,-0.201513007283211,7.88312101364136,-0.0476690009236336,-0.189381003379822,7.54605770111084,-0.0761459991335869,-0.107980996370316,14.1586351394653,-0.138848006725311,0.337846010923386,14.1826257705688,0.10935901850462,1.25752902030945,14.1024370193481,0.650152027606964,2.78769397735596,13.2866096496582,1.29429996013641,4.09255599975586,11.6883716583252,1.60427713394165,5.0113639831543,13.9429140090942,-0.219302996993065,-1.2073849439621,14.0385818481445,-0.306542009115219,-0.675978004932404,8.16566753387451,0.194731995463371,2.91308689117432,7.9301438331604,-0.113416999578476,1.92874503135681,8.86132144927979,0.920903027057648,4.54089879989624,10.0087671279907,1.47676694393158,5.21392393112183,7.72993421554565,-0.324436992406845,0.821264028549194,7.6232590675354,-0.286345988512039,0.279785007238388,13.9344873428345,0.0526309981942177,-1.52636194229126,7.47345447540283,-0.0321439988911152,-0.00272500002756715,10.7124395370483,57.0556602478027,-6.04039001464844,11.3695554733276,57.217170715332,-5.78218126296997,11.4667978286743,56.4108619689941,-5.70864200592041,10.7735166549683,56.329948425293,-6.00628137588501,12.6069326400757,57.5657844543457,-4.83701992034912,\n12.6863536834717,56.5795631408691,-4.74567937850952,13.3836278915405,57.7985610961914,-3.45969557762146,13.4556169509888,56.6929550170898,-3.40973043441772,13.5839586257935,57.8815231323242,-1.86121022701263,13.6550102233887,56.7342262268066,-1.84742498397827,12.3341121673584,57.7085723876953,-4.77183103561401,11.0727882385254,57.3072090148926,-5.68556499481201,13.0607481002808,57.9960670471191,-3.43343567848206,13.2453107833862,58.0991554260254,-1.88054573535919,10.4601907730103,57.1115608215332,-6.06003665924072,10.0851039886475,57.3179016113281,-6.09067630767822,10.4496412277222,57.3653335571289,-5.84987211227417,10.676438331604,57.221809387207,-5.81656265258789,11.0296907424927,57.836612701416,-5.64854335784912,11.9441976547241,58.6488418579102,-4.79833269119263,12.582670211792,59.116268157959,-3.46573519706726,12.736496925354,59.2816390991211,-1.91715252399445,10.4555358886719,58.6530647277832,-5.65306329727173,11.2547769546509,59.5086250305176,-4.84232950210571,11.7785902023315,60.1175575256348,-3.51702165603638,11.8950414657593,60.3289756774902,-1.96966993808746,9.57929134368896,56.9524612426758,-6.27373933792114,9.19234466552734,57.3395614624023,-6.29679536819458,9.7266731262207,57.8835411071777,-6.21597003936768,10.1856927871704,57.5712623596191,-6.24911499023438,9.97100353240967,56.2237091064453,-6.13345384597778,9.34849166870117,56.7671585083008,-6.17100095748901,10.2850532531738,58.4537925720215,-6.10226821899414,10.7824363708496,57.8354225158691,-6.08034324645996,8.88277912139893,58.869197845459,-6.15048742294312,8.15592193603516,58.9244689941406,-6.1637921333313,8.21378612518311,59.6352043151855,-5.90438842773438,9.02373790740967,59.5423164367676,-5.92333841323853,8.31526947021484,60.9121170043945,-5.008704662323,9.30575180053711,60.8378715515137,-5.03566408157349,8.3420991897583,61.7613945007324,-3.71743059158325,9.44917964935303,61.6983299255371,-3.69644641876221,8.28723239898682,62.0546913146973,-2.17042446136475,9.43372058868408,61.9951782226563,-2.1109459400177,9.44623279571533,60.5709953308105,-4.94560480117798,\n9.10982704162598,59.2528686523438,-5.80368280410767,9.64699649810791,61.3797302246094,-3.63885402679443,9.65449810028076,61.658317565918,-2.09661841392517,9.19142436981201,58.6108055114746,-5.92598390579224,9.15252304077148,58.2418937683105,-6.14308214187622,8.9415225982666,58.6167831420898,-6.15146541595459,9.03530979156494,58.8484725952148,-5.91531658172607,10.3890905380249,60.1902389526367,-4.89191007614136,9.66245079040527,59.1945419311523,-5.73063850402832,10.7704238891602,60.9125442504883,-3.57478475570679,10.8405637741089,61.1608543395996,-2.03123736381531,8.80425930023193,57.7260208129883,-6.3200306892395,9.25882434844971,58.3663139343262,-6.24290418624878,8.73712539672852,57.6652565002441,-6.2053050994873,8.21891403198242,57.6878395080566,-6.23664903640747,8.06321239471436,58.1146774291992,-6.24825286865234,9.66301536560059,58.9449691772461,-6.14769983291626,9.12459373474121,57.2783203125,-6.17943382263184,9.51206493377686,56.8916168212891,-6.1587438583374,9.03224182128906,57.1845245361328,-6.18972444534302,8.61232662200928,57.4968490600586,-6.2152943611145,10.9453954696655,57.8632202148438,-5.74091577529907,10.350643157959,57.4555130004883,-5.97056674957275,10.3734855651855,58.5632514953613,-5.76876640319824,9.6894416809082,59.1076164245605,-5.81734275817871,9.28597164154053,58.5109214782715,-6.03513240814209,10.2982120513916,57.1268005371094,2.01532077789307,10.3618040084839,56.4006576538086,2.00044465065002,11.08203125,56.4769401550293,1.77409958839417,10.9784908294678,57.2843399047852,1.82306373119354,12.3940715789795,56.6297569274902,0.938472449779511,12.3065929412842,57.617374420166,1.00379812717438,13.2963943481445,56.7202949523926,-0.313323259353638,13.220666885376,57.826545715332,-0.290488749742508,12.0420293807983,57.7587356567383,0.908468961715698,10.6932783126831,57.3723831176758,1.69494712352753,12.9023599624634,58.0232734680176,-0.353199779987335,10.056619644165,57.4328308105469,1.79342937469482,9.66926383972168,57.3893241882324,1.99637413024902,10.0453290939331,57.1828155517578,2.00800490379334,\n10.2855052947998,57.2889518737793,1.78608930110931,11.6523027420044,58.6989669799805,0.878273189067841,10.6546821594238,57.9010162353516,1.64438211917877,12.4245052337646,59.1434364318848,-0.389839947223663,10.9627838134766,59.5587730407715,0.836178302764893,10.0838317871094,58.7168960571289,1.57561039924622,11.6203145980835,60.1447372436523,-0.438937902450562,9.14701271057129,57.0266990661621,2.13300395011902,9.7873067855835,57.4932861328125,2.10201096534729,9.30038547515869,57.9567565917969,2.07426238059998,8.76009178161621,57.4137916564941,2.10942983627319,9.09187984466553,56.9637870788574,2.01281023025513,9.12253379821777,56.4475059509277,2.02332544326782,9.55038642883301,56.2959442138672,2.04649186134338,9.86799907684326,58.5254211425781,2.00840091705322,10.3644466400146,57.9072036743164,2.04850101470947,8.46854972839355,58.9403343200684,1.90522265434265,8.63267230987549,59.6094818115234,1.68190681934357,7.82902050018311,59.7012825012207,1.57835364341736,7.74421215057373,58.995174407959,1.84293389320374,9.00541400909424,60.8894577026367,0.805153012275696,8.02298831939697,60.9623184204102,0.675447344779968,9.28621673583984,61.7263221740723,-0.527239799499512,8.18287944793701,61.7887420654297,-0.621023893356323,9.15414905548096,60.621166229248,0.734693169593811,8.73031616210938,59.318042755127,1.57682824134827,9.48860740661621,61.4069328308105,-0.558619141578674,8.52665519714355,58.6880378723145,1.91666579246521,8.73706245422363,58.3132476806641,1.93657350540161,8.79835987091064,58.6783180236816,1.71814370155334,8.64437675476074,58.9156112670898,1.68733644485474,9.28746700286865,59.2589454650879,1.56188571453094,10.0971956253052,60.2403717041016,0.784696280956268,10.6122608184814,60.9397087097168,-0.498890727758408,8.37201976776123,57.8002471923828,2.08593034744263,8.83267974853516,58.4394950866699,2.04456353187561,8.31695175170898,57.7374114990234,1.96601176261902,7.79827928543091,57.7600860595703,1.94363927841187,7.64259576797485,58.1869201660156,1.93169260025024,9.24502658843994,59.0167579650879,1.98113739490509,\n8.92779922485352,56.8394050598145,2.01041603088379,8.70467948913574,57.3504486083984,1.98683440685272,8.61167430877686,57.256763458252,1.98925125598907,8.19163417816162,57.5690956115723,1.96611356735229,9.94584655761719,57.525032043457,1.90172684192657,10.5613842010498,57.9291648864746,1.72713911533356,9.99026870727539,58.6290702819824,1.68385112285614,9.30534172058105,59.1735763549805,1.65241873264313,8.88112354278564,58.5804481506348,1.83815741539001,10.6770095825195,56.2945251464844,-5.6465892791748,11.2824172973633,56.3772201538086,-5.38556575775146,11.1279258728027,57.0764274597168,-5.44551849365234,10.5325889587402,56.9753379821777,-5.668053150177,12.4072904586792,56.5365180969238,-4.50114870071411,12.2783660888672,57.4414901733398,-4.57866668701172,13.107325553894,56.6325569152832,-3.28944134712219,12.956844329834,57.6888580322266,-3.33421206474304,13.288010597229,56.6680717468262,-1.86571216583252,13.1303119659424,57.7768707275391,-1.88361310958862,11.0010108947754,59.2677192687988,-4.5934591293335,9.69742584228516,57.7487487792969,-5.73776483535767,11.4663410186768,59.8099174499512,-3.39544725418091,11.5693311691284,59.9995307922363,-1.98350858688354,9.28171920776367,56.7352981567383,-5.80496978759766,9.47168254852295,56.3339920043945,-5.79171323776245,9.90828132629395,56.1729278564453,-5.76813793182373,8.86398029327393,59.3201179504395,-5.58211421966553,8.1619234085083,59.4702033996582,-5.57333850860596,8.09944534301758,58.8493728637695,-5.80169248580933,8.80362987518311,58.6593933105469,-5.7381386756897,9.16833877563477,60.5241088867188,-4.76580858230591,8.25944137573242,60.6478080749512,-4.75074100494385,8.2769718170166,61.420337677002,-3.58010292053223,9.33507061004639,61.2787055969238,-3.55214762687683,8.22487926483154,61.6865692138672,-2.1703794002533,9.33380794525146,61.5399169921875,-2.11206364631653,8.55876350402832,57.4518356323242,-5.84847402572632,8.15613555908203,57.6380157470703,-5.87087488174438,7.99083137512207,58.0734748840332,-5.88351821899414,10.7725353240967,57.1374664306641,1.46592569351196,\n10.9317245483398,56.4374504089355,1.43446028232574,10.3026676177979,56.3588180541992,1.63343214988709,10.107006072998,57.0631408691406,1.5913724899292,12.0061445236206,57.4882507324219,0.715340316295624,12.1415195465088,56.5821571350098,0.667407095432281,12.9622240066528,56.6574783325195,-0.467617064714432,12.8089008331299,57.7142639160156,-0.457129806280136,9.50034141540527,58.1038665771484,1.45586562156677,10.7501258850098,59.2968711853027,0.63189959526062,11.3219013214111,59.834716796875,-0.586458146572113,8.89888954162598,56.8010444641113,1.64008665084839,9.08884716033936,56.3997383117676,1.65345370769501,9.52541637420654,56.2386856079102,1.67762064933777,7.7251033782959,58.9136619567871,1.47833013534546,7.81123399734497,59.5304336547852,1.24668753147125,8.50855350494385,59.381160736084,1.33006381988525,8.40606021881104,58.7755432128906,1.52266371250153,7.99366998672485,60.6934432983398,0.417815059423447,8.8961181640625,60.5708656311035,0.528197646141052,8.13187026977539,61.445255279541,-0.758278369903564,9.18712902069092,61.3041152954102,-0.675066649913788,8.17593479156494,57.517578125,1.59658348560333,7.7733006477356,57.7037582397461,1.57428932189941,7.60796737670898,58.1392364501953,1.5622410774231,10.763858795166,56.2821884155273,-5.95393514633179,11.4453239440918,56.3634719848633,-5.66015243530273,12.6503982543945,56.5307769775391,-4.70776414871216,13.4095573425293,56.6416015625,-3.391108751297,13.6064786911011,56.6820526123047,-1.84945964813232,9.93995380401611,56.1746597290039,-6.08649778366089,9.49487972259521,56.3378257751465,-6.11084508895874,8.1636962890625,59.6161727905273,-5.85762119293213,8.10515403747559,58.9174652099609,-6.11392068862915,8.26453495025635,60.8779907226563,-4.97167921066284,8.29004001617432,61.715991973877,-3.69916963577271,8.23561573028564,62.0055694580078,-2.1726450920105,8.01162910461426,58.0859870910645,-6.20253276824951,8.17909812927246,57.642017364502,-6.19002056121826,8.96710681915283,57.1409759521484,-5.82494354248047,8.99288368225098,57.1476135253906,-6.14383411407471,9.30475997924805,56.736442565918,-6.12413787841797,\n8.5791015625,57.455696105957,-6.1678032875061,11.065601348877,56.4286880493164,1.72450625896454,10.3575248718262,56.3519821166992,1.9482342004776,12.3621492385864,56.5802879333496,0.897935330867767,13.2524452209473,56.668586730957,-0.335663348436356,9.52427101135254,56.2460517883301,1.99746978282928,9.07919597625732,56.4092216491699,1.97316372394562,7.6988205909729,58.9872550964355,1.78824877738953,7.7839732170105,59.6813888549805,1.52703857421875,7.9762864112854,60.9274864196777,0.634021580219269,8.13292789459229,61.742977142334,-0.643724203109741,7.59594821929932,58.1573753356934,1.88143527507782,7.76341438293457,57.7134094238281,1.89398753643036,8.58425617218018,57.2067337036133,1.62053740024567,8.88907718658447,56.8078346252441,1.95986318588257,8.57719612121582,57.2189979553223,1.94022345542908,8.16341876983643,57.5270957946777,1.91619777679443,9.54316806793213,56.3752670288086,-6.15696382522583,9.10171604156494,58.2966079711914,2.16415286064148,9.0726432800293,58.4523010253906,2.27199339866638,7.67046976089478,57.2544784545898,2.45488667488098,7.76439476013184,57.1340179443359,2.34261202812195,7.50693845748901,56.9871940612793,2.48459267616272,7.63928031921387,56.9295234680176,2.3653404712677,7.49976921081543,56.674201965332,2.51717662811279,7.63379526138306,56.6900596618652,2.3902690410614,7.65088319778442,56.3993949890137,2.54390692710876,7.74941062927246,56.4798049926758,2.41072201728821,7.91978979110718,56.236400604248,2.55762553215027,7.9551477432251,56.355094909668,2.4212167263031,8.23443508148193,56.228874206543,2.55465221405029,8.19587802886963,56.3493423461914,2.41894102096558,8.5105094909668,56.378849029541,2.53578400611877,8.40709781646729,56.4640884399414,2.40450549125671,9.80013942718506,57.6939811706543,2.34205198287964,9.65831279754639,57.7164344787598,2.21775436401367,9.80730724334717,58.006965637207,2.30946803092957,9.66379642486572,57.9558944702148,2.1928231716156,9.65619373321533,58.2817726135254,2.28273773193359,9.54818153381348,58.1661415100098,2.17237114906311,9.38728809356689,58.4447746276855,2.26901984214783,\n9.34244537353516,58.2908554077148,2.16187739372253,9.04439544677734,58.5109443664551,2.0685338973999,7.60246086120605,57.2915229797363,2.25414371490479,7.41537761688232,56.9857330322266,2.28812718391418,7.40717649459839,56.6276779174805,2.32540369033813,7.58005428314209,56.3132934570313,2.35598564147949,7.8876895904541,56.1268119812012,2.37167835235596,8.24765110015869,56.1182098388672,2.36827683448792,8.56348419189453,56.2897834777832,2.34669184684753,9.87666797637939,57.6434135437012,2.1486828327179,9.88486957550049,58.0014686584473,2.11140513420105,9.711989402771,58.315860748291,2.08082342147827,9.40435600280762,58.5023384094238,2.06513118743896,7.89354467391968,57.5541725158691,2.19163465499878,7.53492975234985,57.3593597412109,2.21614170074463,7.32250690460205,57.012149810791,2.25473022460938,7.31319618225098,56.6055946350098,2.2970564365387,7.50949048995972,56.2486190795898,2.33177995681763,7.85879421234131,56.0368804931641,2.34959721565247,8.26751136779785,56.0271224975586,2.34573411941528,8.62612819671631,56.2219314575195,2.32122707366943,8.83854961395264,56.5691299438477,2.28263998031616,8.84786224365234,56.9756927490234,2.24031329154968,8.65156650543213,57.3326644897461,2.20558881759644,8.3022632598877,57.5444030761719,2.18777060508728,7.89016580581665,57.4804611206055,1.55401968955994,7.53544425964355,57.2877616882324,1.57826209068298,7.32532835006714,56.9443244934082,1.61643016338348,7.31611824035645,56.5421905517578,1.65829622745514,7.51028060913086,56.1890907287598,1.69264352321625,7.85579109191895,55.9796562194824,1.71026754379272,8.26007080078125,55.9699859619141,1.70644688606262,8.61478996276855,56.1626892089844,1.68220448493958,8.82490634918213,56.5061225891113,1.64403653144836,8.83411598205566,56.9082641601563,1.60216987133026,8.63995456695557,57.2613563537598,1.56782293319702,8.29444313049316,57.4707984924316,1.55019891262054,8.08557796478271,56.8008575439453,2.39255380630493,9.37066745758057,58.0004348754883,2.19909453392029,7.95090341567993,57.4940376281738,2.41830825805664,8.03185844421387,57.3665313720703,2.30692052841187,\n8.34259605407715,57.040771484375,2.35386204719543,8.65734004974365,56.7145500183105,2.36715579032898,8.76843547821045,56.6418800354004,2.49703741073608,8.46897029876709,58.0325546264648,2.13008427619934,8.51177406311035,57.9731674194336,2.34515070915222,8.56678771972656,57.8315696716309,2.23553681373596,8.8566312789917,57.5205993652344,2.27647852897644,9.1578254699707,57.2154922485352,2.29245519638062,9.28428745269775,57.1679306030273,2.41954469680786,9.35760879516602,57.106273651123,2.21566128730774,9.41757202148438,58.2211647033691,-6.37134647369385,8.07729625701904,57.0513572692871,-6.45569038391113,7.98838758468628,57.1577568054199,-6.58496856689453,9.39362621307373,58.3627853393555,-6.49816751480103,7.95128870010376,56.8461570739746,-6.45800352096558,7.82368993759155,56.8895606994629,-6.58799409866333,7.94460821151733,56.6054725646973,-6.45401096343994,7.81495904922485,56.5749664306641,-6.58277559280396,8.05904579162598,56.3937911987305,-6.44478559494019,7.96453428268433,56.2982864379883,-6.57071495056152,8.26393795013428,56.267822265625,-6.43279695510864,8.23233413696289,56.1336479187012,-6.55504512786865,8.50438404083252,56.261344909668,-6.42125701904297,8.54660892486572,56.125171661377,-6.53996276855469,8.71595478057861,56.3760681152344,-6.41325855255127,8.82314300537109,56.2751235961914,-6.52950954437256,9.97066688537598,57.636344909668,-6.33459901809692,10.1165437698364,57.5984039306641,-6.45013761520386,9.97734546661377,57.8770370483398,-6.33859014511108,10.1252737045288,57.9129905700684,-6.45535469055176,9.86290836334229,58.0887222290039,-6.34781646728516,9.97570037841797,58.1896705627441,-6.46741533279419,9.6580171585083,58.2146797180176,-6.35980606079102,9.7078971862793,58.3543128967285,-6.48308515548706,7.91374015808105,57.219108581543,-6.39272308349609,9.35880374908447,58.445743560791,-6.30441761016846,7.72532224655151,56.9122772216797,-6.3961820602417,7.71533393859863,56.5523872375488,-6.39021348953247,7.88645076751709,56.2358589172363,-6.37641716003418,8.19282341003418,56.0475082397461,-6.35848951339722,\n8.55235767364502,56.0378112792969,-6.34123420715332,8.86871910095215,56.2093658447266,-6.32927560806274,10.1858406066895,57.5712661743164,-6.24947023391724,10.1958293914795,57.9311676025391,-6.25543737411499,10.0247116088867,58.2476959228516,-6.26923513412476,9.71834087371826,58.4360466003418,-6.28716278076172,8.20472621917725,57.4861259460449,-6.35204792022705,7.84551382064819,57.2913436889648,-6.36562538146973,7.63157510757446,56.9429512023926,-6.36955308914185,7.62023305892944,56.534309387207,-6.36277627944946,7.814528465271,56.1749076843262,-6.34711170196533,8.16239833831787,55.9610481262207,-6.3267560005188,8.57063388824463,55.9500350952148,-6.30716323852539,8.92984580993652,56.1448211669922,-6.29358530044556,9.14378356933594,56.4932136535645,-6.28965759277344,9.15512657165527,56.90185546875,-6.29643392562866,8.96083068847656,57.2612571716309,-6.31209850311279,8.61295986175537,57.4751167297363,-6.33245468139648,7.82315683364868,57.2974548339844,-5.72415924072266,8.17846775054932,57.490119934082,-5.71072673797607,7.61154174804688,56.9528427124023,-5.72804355621338,7.60032320022583,56.548641204834,-5.72134017944336,7.79250907897949,56.1931419372559,-5.70584535598755,8.13660049438477,55.9816055297852,-5.68571043014526,8.54040145874023,55.9707107543945,-5.66633129119873,8.89571189880371,56.1633796691895,-5.65289926528931,9.10732746124268,56.5079917907715,-5.64901494979858,9.11854648590088,56.9122009277344,-5.65571737289429,8.92636108398438,57.2676963806152,-5.6712121963501,8.58226871490479,57.4792327880859,-5.69134712219238,8.39713573455811,56.7132110595703,-6.45354127883911,8.35801219940186,56.7312316894531,-5.65404605865479,9.10042572021484,56.5588111877441,-6.51249361038208,9.00266551971436,56.6640510559082,-6.39528465270996,8.68764209747314,56.9858283996582,-6.43258762359619,8.39200592041016,57.326042175293,-6.43588542938232,8.31364345550537,57.4366760253906,-6.5648775100708,9.71927833557129,57.9539375305176,-6.35817623138428,9.53972148895264,58.2807655334473,-6.29448080062866,9.78838539123535,58.0285758972168,-6.27875709533691,\n9.99997234344482,57.7374534606934,-6.26315259933472,9.20345973968506,57.4698867797852,-6.39538192749023,9.48666667938232,57.1501922607422,-6.36494207382202,9.60848426818848,57.07861328125,-6.48131608963013,9.66481113433838,57.0322380065918,-6.26956367492676,9.57754898071289,57.319652557373,-6.27979326248169,9.37460803985596,57.6449127197266,-6.2954273223877,9.076340675354,57.8779449462891,-6.31346797943115,8.78176498413086,57.9659423828125,-6.32823324203491,8.85363483428955,57.899730682373,-6.53152275085449,8.90478801727295,57.7736015319824,-6.40361595153809,8.62180233001709,57.0199012756348,-6.05530881881714,8.20690155029297,57.2244300842285,-6.10898733139038,8.17655849456787,57.2355613708496,-5.83204317092896,8.59145927429199,57.0310325622559,-5.77836561203003,7.79200172424316,57.4289627075195,-6.16266393661499,7.76165914535522,57.4400939941406,-5.88572072982788,7.49404430389404,57.5786743164063,-6.40941333770752,7.46370267868042,57.5898094177246,-6.13247013092041,7.16427659988403,57.7414360046387,-6.46620416641235,7.13393402099609,57.7525672912598,-6.18926095962524,6.54581737518311,58.0482940673828,-6.54360771179199,6.51547479629517,58.0594291687012,-6.26666355133057,6.10629081726074,57.9500389099121,-6.57935810089111,6.07594680786133,57.9611740112305,-6.30241441726685,6.51593399047852,57.963924407959,-6.63410091400146,6.2043285369873,57.902961730957,-6.66317367553711,7.13439416885376,57.6570701599121,-6.55669927597046,7.46416234970093,57.494312286377,-6.49990797042847,7.76211929321289,57.344596862793,-6.25315952301025,8.1770191192627,57.1400680541992,-6.19948053359985,8.5919189453125,56.9355392456055,-6.14580249786377,7.687584400177,56.2433242797852,-5.8429012298584,7.2726845741272,56.4478530883789,-5.89657926559448,6.97472810745239,56.5975685119629,-6.1433277130127,6.64495849609375,56.760326385498,-6.200119972229,6.02649831771851,57.0671882629395,-6.27752161026001,5.82846117019653,57.4524879455566,-6.31333494186401,5.85880327224731,57.4413528442383,-6.59027910232544,5.95684099197388,57.3942832946777,-6.67409420013428,\n6.10631132125854,57.1332359313965,-6.64275789260864,6.72477197647095,56.8263854980469,-6.56535577774048,7.05454254150391,56.6636238098145,-6.50856494903564,7.35249805450439,56.5139007568359,-6.26181602478027,7.7673978805542,56.3093719482422,-6.20813894271851,6.05684041976929,57.0560569763184,-6.55446577072144,6.67530250549316,56.749195098877,-6.47706317901611,7.00507020950317,56.5864448547363,-6.42027235031128,7.30302715301514,56.4367218017578,-6.17352294921875,7.7179274559021,56.2321929931641,-6.11984539031982,-3.61213994026184,63.0742874145508,0.9124436378479,-3.35697841644287,62.0683555603027,1.8799649477005,-3.08504390716553,62.3842697143555,2.03850078582764,-3.30717325210571,63.3338012695313,1.14116930961609,-2.58666610717773,62.4479675292969,1.94942438602448,-2.8619236946106,63.388801574707,1.0897604227066,-2.32412028312683,62.3157958984375,1.72282636165619,-2.54204511642456,63.1886177062988,0.857616245746613,-2.59025049209595,61.6884994506836,1.16627395153046,-2.85399842262268,62.5235786437988,0.263086229562759,-3.17207551002502,61.7568206787109,1.39954209327698,-3.43519830703735,62.611499786377,0.514534771442413,-3.63598537445068,63.2521781921387,0.69645893573761,-3.32681488990784,63.5149726867676,0.927509665489197,-3.29148149490356,64.2173690795898,-0.109086737036705,-3.62270712852478,63.9034881591797,-0.306464165449142,-2.8858904838562,63.5703086853027,0.875525891780853,-2.83971810340881,64.1814880371094,-0.0564945302903652,-2.55843424797058,63.3702926635742,0.642616629600525,-2.50405740737915,63.9123001098633,-0.123237006366253,-2.8638768196106,62.6970977783203,0.108471132814884,-2.77562379837036,63.1545944213867,-0.604941248893738,-3.46092629432678,62.7867164611816,0.294167369604111,-3.43210530281067,63.3568954467773,-0.579706788063049,-3.256014585495,64.5693740844727,-1.60241901874542,-3.58352303504944,64.0412521362305,-0.546477496623993,-3.24679207801819,64.355598449707,-0.348915934562683,-2.92236948013306,64.8243789672852,-1.32648360729218,-2.79290914535522,64.3191986083984,-0.297434836626053,-2.51000738143921,64.7322540283203,-1.14120411872864,\n-2.45186758041382,64.0473709106445,-0.362849801778793,-2.19106101989746,64.3612518310547,-1.09568011760712,-2.70859456062317,63.2933158874512,-0.840461909770966,-2.43458151817322,63.6225776672363,-1.45423483848572,-3.38490152359009,63.4919891357422,-0.821362257003784,-3.0491464138031,63.9436988830566,-1.78154337406158,-2.57595777511597,64.9778366088867,-2.6725537776947,-3.1440896987915,64.6701354980469,-1.83323156833649,-2.81245827674866,64.9234924316406,-1.55989825725555,-2.3226158618927,65.2118072509766,-2.34885287284851,-2.39819836616516,64.8362884521484,-1.37234389781952,-1.97928023338318,65.0992202758789,-2.01913595199585,-2.0773754119873,64.4590759277344,-1.32713222503662,-1.72631311416626,64.6864547729492,-1.87331461906433,-2.31362891197205,63.7234535217285,-1.68494808673859,-1.92199409008026,63.942066192627,-2.33426547050476,-2.93078923225403,64.038932800293,-2.01300573348999,-2.42004132270813,64.294548034668,-2.75134778022766,-2.39229536056519,65.0288314819336,-2.85661482810974,-2.14243960380554,65.269775390625,-2.53773021697998,-1.26141941547394,65.4044723510742,-3.14796590805054,-1.37994861602783,65.1316375732422,-3.55027008056641,-1.79749488830566,65.1639251708984,-2.20590353012085,-1.05894148349762,65.2965240478516,-2.71703100204468,-1.54621398448944,64.7531356811523,-2.05670237541199,-0.918171525001526,64.8731536865234,-2.47819972038269,-1.73880863189697,63.9987030029297,-2.52019095420837,-1.05267798900604,64.1080093383789,-2.95110249519348,-2.23095893859863,64.3469390869141,-2.93175864219666,-1.30283260345459,64.4658584594727,-3.51517343521118,-1.14292597770691,65.1440811157227,-3.65478587150574,-1.02547371387482,65.4231796264648,-3.2559015750885,0.13047032058239,65.4414825439453,-3.54996991157532,0.0952271744608879,65.1560363769531,-3.93723583221436,-0.822809159755707,65.3192520141602,-2.82474994659424,0.159597724676132,65.3439025878906,-3.07465958595276,-0.683079063892365,64.8978118896484,-2.58284640312195,0.165363445878029,64.9232025146484,-2.7937171459198,-0.813165485858917,64.1283264160156,-3.05124926567078,\n0.108703263103962,64.14697265625,-3.26859927177429,-1.06255924701691,64.4810638427734,-3.61365294456482,0.0793721079826355,64.4871368408203,-3.85984587669373,-2.75332641601563,61.2146377563477,2.80682158470154,-3.02745985984802,62.1653861999512,2.20834875106812,-3.29413962364197,61.8534240722656,2.05397295951843,-2.98762607574463,60.9160995483398,2.68516731262207,-2.5285222530365,62.2322120666504,2.12074708938599,-2.30419564247131,61.3310317993164,2.74024105072021,-2.26474595069885,62.1056976318359,1.90227031707764,-2.0128014087677,61.2975273132324,2.49436450004578,-2.51925134658813,61.4904861450195,1.42052376270294,-2.23242950439453,60.658992767334,2.08475351333618,-2.83238387107849,60.6267929077148,2.28150844573975,-3.10810112953186,61.546142578125,1.58604788780212,-1.99876511096954,60.0553932189941,2.86955976486206,-2.24390172958374,61.076831817627,2.8048152923584,-2.69164276123047,60.940975189209,2.86721706390381,-2.63764548301697,59.9638633728027,2.75425934791565,-2.76606631278992,60.4017868041992,2.44312739372253,-2.16079878807068,60.4579582214355,2.27013802528381,-1.13655304908752,65.2722549438477,-3.20241522789001,-1.22373235225677,65.0585403442383,-3.51007008552551,-0.974662899971008,65.1921691894531,-2.87555885314941,-0.859975397586823,64.8638610839844,-2.68954801559448,-0.959364235401154,64.2740859985352,-3.04318070411682,-1.15380275249481,64.5525436401367,-3.47173738479614,-3.31022834777832,63.2359428405762,0.919619858264923,-3.53940153121948,63.0512771606445,0.743501126766205,-2.97155117988586,63.2838172912598,0.874339401721954,-2.72124218940735,63.1311111450195,0.687183558940887,-2.96068978309631,62.6333312988281,0.285006642341614,-3.40652298927307,62.6991806030273,0.436503946781158,-3.4934549331665,63.9235954284668,-0.430678248405457,-3.23643088340759,64.1706924438477,-0.287341684103012,-2.87822294235229,64.1393966674805,-0.254750579595566,-2.61495733261108,63.9441452026367,-0.299727559089661,-2.81512451171875,63.3578414916992,-0.668448567390442,-3.34042429924011,63.5154266357422,-0.633352518081665,\n-3.10319185256958,64.5544204711914,-1.68715798854828,-2.838214635849,64.7433624267578,-1.48133432865143,-2.51200199127197,64.6696395874023,-1.33998775482178,-2.25697326660156,64.3717269897461,-1.3023225069046,-2.43367147445679,63.8228034973145,-1.54456543922424,-2.92679381370544,64.0788040161133,-1.82429134845734,-2.22023415565491,65.1060409545898,-2.46578550338745,-2.41531682014465,64.9314041137695,-2.70062112808228,-1.94377982616425,65.021842956543,-2.21043109893799,-1.7426495552063,64.6985168457031,-2.09731411933899,-1.89084160327911,64.1259384155273,-2.44964075088501,-2.28149557113647,64.4059677124023,-2.76189875602722,-3.04034876823425,62.1378059387207,1.9870936870575,-3.23064041137695,61.8979263305664,1.89186644554138,-2.63217568397522,62.1806526184082,1.90964543819427,-2.44575428962708,62.0799980163574,1.75566875934601,-2.62495112419128,61.6172981262207,1.41981995105743,-3.0793662071228,61.6779861450195,1.53219282627106,-2.69351363182068,61.0704765319824,2.73514080047607,-2.83499526977539,60.821403503418,2.6821186542511,-2.32376790046692,61.1692924499512,2.68417191505432,-2.09564399719238,61.1407737731934,2.50819373130798,-2.24191975593567,60.6346855163574,2.28552436828613,-2.71739792823792,60.6012229919434,2.43733906745911,-2.911208152771,60.6353797912598,2.75616860389709,-1.96656572818756,61.0282936096191,2.59466052055359,4.28434991836548,62.8252143859863,0.3774034678936,4.02987480163574,63.1023750305176,0.644034564495087,3.87156915664673,62.1648445129395,1.56714284420013,4.09929990768433,61.8331680297852,1.37475287914276,3.58609437942505,63.185417175293,0.652862966060638,3.37072014808655,62.2600593566895,1.54577028751373,3.22592759132385,63.0066833496094,0.466796100139618,3.07226300239563,62.145580291748,1.35718357563019,3.4125759601593,62.3259162902832,-0.161517307162285,3.22108316421509,61.505199432373,0.772515833377838,4.02672004699707,62.3761367797852,0.0089394748210907,3.83216571807861,61.5358924865723,0.924957275390625,4.28998422622681,63.0021743774414,0.159421265125275,4.18255949020386,63.6572914123535,-0.835323393344879,\n3.9013032913208,63.9904899597168,-0.596446633338928,4.03187084197998,63.2828521728516,0.428909122943878,3.45939421653748,63.9827995300293,-0.483302682638168,3.5923113822937,63.3659706115723,0.436583310365677,3.10158205032349,63.7354850769043,-0.503058195114136,3.22455739974976,63.1878814697266,0.250778764486313,3.25768327713013,62.9642868041992,-1.01373946666718,3.41239428520203,62.4991264343262,-0.316789388656616,3.92296314239502,63.1248970031738,-1.07806241512299,4.03345727920532,62.5503234863281,-0.213627681136131,3.68707180023193,64.3503799438477,-2.07286024093628,3.41031622886658,64.624626159668,-1.75556659698486,3.83346271514893,64.1322708129883,-0.828650236129761,4.12010908126831,63.7982597351074,-1.06845033168793,3.02172446250916,64.5577697753906,-1.51601755619049,3.3892765045166,64.1241989135742,-0.716319501399994,2.68918180465698,64.2073211669922,-1.42635130882263,3.02615571022034,63.874584197998,-0.734024167060852,2.83533811569214,63.4563522338867,-1.8113089799881,3.16836261749268,63.1079406738281,-1.23866653442383,3.41911268234253,63.7396774291992,-2.2198121547699,3.85219359397888,63.2637176513672,-1.31172442436218,2.89598488807678,64.8052444458008,-3.04331517219543,2.7037570476532,65.0532608032227,-2.68942427635193,3.27638959884644,64.7314376831055,-1.97245848178864,3.5516083240509,64.4589385986328,-2.28691077232361,2.40160512924194,64.9610366821289,-2.31597256660461,2.88653588294983,64.6695938110352,-1.73042178153992,2.14520502090454,64.564338684082,-2.13563776016235,2.55170559883118,64.3130645751953,-1.64078557491302,2.22989583015442,63.811107635498,-2.61558604240417,2.69096708297729,63.5655975341797,-2.02404379844666,2.688316822052,64.1334228515625,-3.09747505187988,3.27685332298279,63.8431282043457,-2.43361616134644,2.69275808334351,64.8684387207031,-3.20116209983826,1.60463094711304,65.0374984741211,-3.75249838829041,1.55874860286713,65.3155136108398,-3.33905458450317,2.50376582145691,65.1232223510742,-2.85254383087158,1.40982067584991,65.2186508178711,-2.88430953025818,2.20072984695435,65.0378112792969,-2.47681260108948,\n1.27623987197876,64.8039398193359,-2.62688946723938,1.94657623767853,64.6429672241211,-2.29336524009705,1.29752290248871,64.0338745117188,-3.11034798622131,2.02724313735962,63.8799133300781,-2.7753689289093,1.4913341999054,64.3777236938477,-3.70449876785278,2.48030972480774,64.1983337402344,-3.25097990036011,1.35693752765656,65.0652313232422,-3.8241708278656,1.31205260753632,65.3494491577148,-3.41428828239441,1.16322147846222,65.2566070556641,-2.95932054519653,1.03120362758636,64.8437347412109,-2.69900345802307,1.04845011234283,64.0696029663086,-3.17738890647888,1.24141275882721,64.4083938598633,-3.76976609230042,3.57369923591614,61.0150680541992,2.37812209129334,3.77027344703674,60.702938079834,2.22727346420288,4.0471248626709,61.6218643188477,1.5565527677536,3.82378196716309,61.9492835998535,1.74413049221039,3.3227744102478,62.0476493835449,1.72428119182587,3.12788796424866,61.1596908569336,2.37217926979065,3.02454996109009,61.9388618469238,1.54388356208801,2.80449461936951,61.1455764770508,2.16795825958252,3.1727123260498,61.3109474182129,1.03485369682312,2.92642593383789,60.4962692260742,1.73520374298096,3.54420852661133,60.4256591796875,1.84945070743561,3.78081870079041,61.3288497924805,1.11927652359009,2.76325130462646,59.9051856994629,2.54690003395081,3.37375426292419,59.7742500305176,2.34694623947144,3.50367212295532,60.7455596923828,2.44744181632996,3.06101846694946,60.9095001220703,2.44536972045898,2.86796164512634,60.2993392944336,1.92940402030945,3.48629307746887,60.2045707702637,2.01948738098145,1.45098149776459,64.9741744995117,-3.69130253791809,1.41963732242584,65.1916275024414,-3.37561774253845,1.29856872558594,65.1204681396484,-3.02958917617798,1.18962597846985,64.7992172241211,-2.82842588424683,1.20325589179993,64.2058715820313,-3.18971633911133,1.35525119304657,64.4734039306641,-3.64174580574036,4.18821001052856,62.8075332641602,0.219903469085693,3.99690103530884,63.0054588317871,0.424512445926666,3.6588876247406,63.0746803283691,0.425081789493561,3.37655878067017,62.9387741088867,0.274015486240387,\n3.52792119979858,62.4286651611328,-0.154641181230545,3.99334812164307,62.4657745361328,-0.0648872926831245,4.03926610946655,63.6859970092773,-0.941070854663849,3.81991457939148,63.9481201171875,-0.765456974506378,3.46811485290527,63.9392204284668,-0.684758543968201,3.18946385383606,63.761058807373,-0.693017423152924,3.30093741416931,63.1649284362793,-1.08285391330719,3.83501696586609,63.2890968322754,-1.11953735351563,3.5235903263092,64.3453979492188,-2.1361677646637,3.30114650726318,64.5497131347656,-1.89731824398041,2.99297952651978,64.4960021972656,-1.7129887342453,2.7271716594696,64.2145156860352,-1.64003252983093,2.83482527732849,63.656623840332,-1.90154302120209,3.3008348941803,63.8823738098145,-2.24625611305237,2.73043322563171,64.7690963745117,-3.04928207397461,2.58011960983276,64.9546203613281,-2.79104351997375,2.33586597442627,64.886848449707,-2.500408411026,2.13193011283875,64.576301574707,-2.35984539985657,2.19507622718811,63.9970550537109,-2.72649145126343,2.55687785148621,64.2533493041992,-3.0897331237793,3.80498099327087,61.9218826293945,1.52327609062195,3.96527743339539,61.6709518432617,1.40429544448853,3.39359378814697,61.9905891418457,1.50135791301727,3.18217921257019,61.9024810791016,1.37433695793152,3.28509950637817,61.4308815002441,1.01937413215637,3.7534167766571,61.4624671936035,1.06922543048859,3.49584770202637,60.8752517700195,2.31576895713806,3.61298704147339,60.6180191040039,2.24522376060486,3.12953925132751,60.9972839355469,2.31467223167419,2.87844681739807,60.9838790893555,2.17116379737854,2.96134185791016,60.4705619812012,1.93296670913696,3.44989609718323,60.4066925048828,2.01946258544922,3.68666195869446,60.4272689819336,2.30911779403687,2.7553985118866,60.8793525695801,2.27471375465393,7.27801418304443,38.8856239318848,2.99167585372925,7.27827167510986,38.9228096008301,2.99137020111084,7.23183059692383,38.9346237182617,2.94782590866089,7.23140668869019,38.8737411499023,2.948326587677,7.29706525802612,38.9548759460449,2.99014902114868,7.26260185241699,38.9871253967285,2.9458270072937,\n7.32935428619385,38.9732360839844,2.9883394241333,7.31547117233276,39.0171813964844,2.94286394119263,7.36649465560913,38.972957611084,2.98642635345459,7.37627649307251,39.0167350769043,2.93973159790039,7.39852857589722,38.9541320800781,2.98492193222046,7.42872381210327,38.9859046936035,2.93726921081543,7.41687250137329,38.9217910766602,2.98422956466675,7.45876121520996,38.9329528808594,2.93613576889038,7.41661548614502,38.8846054077148,2.98453521728516,7.45833969116211,38.8720664978027,2.93663644790649,7.39782238006592,38.8525352478027,2.98575687408447,7.42757081985474,38.8195648193359,2.93863534927368,7.36553049087524,38.8341789245605,2.9875659942627,7.37470006942749,38.7895088195801,2.94159841537476,7.32839202880859,38.8344497680664,2.98947954177856,7.31389379501343,38.7899589538574,2.94473075866699,7.29635715484619,38.8532829284668,2.9909839630127,7.26144552230835,38.8207893371582,2.94719362258911,7.18508529663086,38.9275054931641,2.0414457321167,7.18466186523438,38.8666191101074,2.04194688796997,7.21585369110107,38.9800071716309,2.0394458770752,7.26872682571411,39.0100593566895,2.03648328781128,7.3295316696167,39.0096130371094,2.0333514213562,7.38197994232178,38.9787864685059,2.03088855743408,7.41201877593994,38.9258308410645,2.02975559234619,7.41159391403198,38.8649444580078,2.03025579452515,7.38082551956177,38.812442779541,2.03225469589233,7.32795286178589,38.7823905944824,2.03521823883057,7.26714944839478,38.7828369140625,2.0383505821228,7.21470022201538,38.8136672973633,2.04081296920776,7.22681045532227,38.9149703979492,1.99354636669159,7.22654962539673,38.8777847290039,1.99385249614716,7.24560308456421,38.9470405578613,1.9923255443573,7.27789306640625,38.9653968811035,1.99051570892334,7.31503295898438,38.9651222229004,1.9886029958725,7.34706735610962,38.9462890625,1.98709845542908,7.36541128158569,38.9139518737793,1.98640644550323,7.36515426635742,38.8767623901367,1.98671197891235,7.346360206604,38.8446960449219,1.98793375492096,7.31406831741333,38.8263397216797,1.9897426366806,7.276930809021,38.8266143798828,1.99165594577789,\n7.24489736557007,38.8454437255859,1.99316024780273,7.34744358062744,38.9037055969238,2.98795223236084,7.29598045349121,38.895866394043,1.99012982845306,-9.78334426879883,33.6398735046387,4.95875310897827,-9.77644729614258,33.6859130859375,4.96339130401611,-9.73664379119873,33.7019157409668,4.89703321456909,-9.74793434143066,33.6265411376953,4.88943862915039,-9.76406002044678,33.7222595214844,4.98891019821167,-9.7163610458374,33.7614250183105,4.93881559371948,-9.74949932098389,33.7391777038574,5.02847194671631,-9.69252109527588,33.7891273498535,5.00358915328979,-9.73666667938232,33.7321357727051,5.07147693634033,-9.67151069641113,33.7775955200195,5.07400035858154,-9.72900199890137,33.7030143737793,5.1064019203186,-9.65896129608154,33.7299194335938,5.13118028640747,-9.72855758666992,33.6596221923828,5.12388706207275,-9.65823459625244,33.6588745117188,5.15980815887451,-9.73545360565186,33.613582611084,5.11924982070923,-9.66952514648438,33.58349609375,5.1522159576416,-9.74784278869629,33.5772361755371,5.09372901916504,-9.6898078918457,33.523983001709,5.11043310165405,-9.76240253448486,33.5603179931641,5.0541672706604,-9.71364879608154,33.4962844848633,5.04565811157227,-9.77523517608643,33.5673599243164,5.01116228103638,-9.73465728759766,33.5078163146973,4.97524881362915,-9.7829008102417,33.5964813232422,4.97623777389526,-9.74720764160156,33.555492401123,4.91806745529175,-8.68862438201904,33.5623207092285,4.5660605430603,-8.69991493225098,33.486946105957,4.55846548080444,-8.6683406829834,33.6218338012695,4.60784196853638,-8.64450073242188,33.6495361328125,4.67261600494385,-8.62349128723145,33.6380043029785,4.74302673339844,-8.61094093322754,33.5903282165527,4.80020713806152,-8.61021518707275,33.5192794799805,4.82883739471436,-8.62150573730469,33.443904876709,4.8212423324585,-8.6417875289917,33.384391784668,4.77945995330811,-8.66562843322754,33.3566932678223,4.71468496322632,-8.68663787841797,33.3682250976563,4.6442756652832,-8.69918727874756,33.415901184082,4.58709478378296,-8.62269496917725,33.5322341918945,4.59902667999268,\n-8.6295919418335,33.486198425293,4.59438753128052,-8.61030673980713,33.5685844421387,4.62454605102539,-8.59574604034424,33.5855026245117,4.66410827636719,-8.58291435241699,33.5784606933594,4.70711278915405,-8.57524967193604,33.5493392944336,4.74203681945801,-8.57480525970459,33.5059471130371,4.75952243804932,-8.58170127868652,33.4599075317383,4.75488424301147,-8.59408950805664,33.4235610961914,4.72936534881592,-8.60865020751953,33.4066429138184,4.68980169296265,-8.62148189544678,33.4136848449707,4.64679718017578,-8.62914752960205,33.4428062438965,4.61187362670898,-9.75595092773438,33.6497459411621,5.04131889343262,-8.60219860076904,33.4960746765137,4.67695474624634,-9.74101448059082,35.714599609375,3.85751342773438,-9.86602973937988,35.7726554870605,3.47347187995911,-9.97085666656494,35.6495018005371,3.47345089912415,-9.870774269104,35.5752906799316,3.83032155036926,-9.68454742431641,35.8668441772461,3.81067728996277,-9.79458618164063,35.8733024597168,3.47374320030212,-9.52666187286377,35.9182891845703,4.02155208587646,-9.62035369873047,35.9681434631348,3.76721882820129,-9.54553604125977,35.8229598999023,4.08965349197388,-9.4582986831665,35.9390258789063,4.01036548614502,-9.5352258682251,36.0346794128418,3.7266902923584,-9.4575366973877,35.8144416809082,4.11982440948486,-9.5669527053833,35.6657867431641,4.17208671569824,-9.62007713317871,35.4551315307617,4.32985925674438,-9.50944805145264,35.4093933105469,4.42615509033203,-9.46608638763428,35.6384925842285,4.23215818405151,-9.78408527374268,35.5054550170898,3.9941668510437,-9.63376522064209,36.0123100280762,3.45799255371094,-9.72309112548828,35.9531021118164,3.46987771987915,-9.35143184661865,35.9486656188965,3.99241375923157,-8.98878192901611,35.9121856689453,3.88087320327759,-9.06758308410645,36.0587348937988,3.56467628479004,-9.41837596893311,36.0752944946289,3.68297219276428,-9.3454122543335,35.8030281066895,4.13016843795776,-8.97745895385742,35.7535247802734,4.02928638458252,-9.35027408599854,35.6183891296387,4.25739240646362,-8.97404384613037,35.5641059875488,4.16093111038208,\n-9.37691307067871,35.3826560974121,4.46194314956665,-8.96559906005859,35.3266754150391,4.36308479309082,-9.16642284393311,36.040111541748,3.34176683425903,-9.50882720947266,36.0511817932129,3.43420505523682,-8.51512336730957,35.82080078125,3.67910408973694,-8.62055587768555,35.9603652954102,3.40104579925537,-8.49166774749756,35.6696319580078,3.80719947814941,-8.47049617767334,35.4844856262207,3.93344354629517,-8.40306663513184,35.2210350036621,4.14138460159302,-8.73949146270752,35.9448280334473,3.21085333824158,-10.2052211761475,33.757396697998,4.50592947006226,-9.97318077087402,34.9937400817871,4.2854528427124,-10.1497535705566,35.0821075439453,3.97291660308838,-10.4171237945557,33.715633392334,4.16602897644043,-10.0163803100586,33.7997207641602,4.9263710975647,-9.80999088287354,34.9454536437988,4.70469665527344,-9.86767196655273,33.8091239929199,5.06170845031738,-9.67784786224365,34.9037628173828,4.83877611160278,-9.66173553466797,33.803092956543,5.10906410217285,-9.48658180236816,34.878044128418,4.87704467773438,-9.1462287902832,33.7655029296875,5.0027813911438,-8.97988986968994,34.8264312744141,4.76251649856567,-8.54841613769531,33.7106056213379,4.77185153961182,-8.3776159286499,34.7554130554199,4.5395975112915,-9.95896339416504,35.483642578125,3.87343168258667,-9.84402561187744,35.3857116699219,4.11188650131226,-10.0861339569092,35.5603713989258,3.4769971370697,-9.69511127471924,35.3164482116699,4.50688219070435,-9.57850933074951,35.2590255737305,4.63353776931763,-9.41642093658447,35.2251739501953,4.67538499832153,-8.95109081268311,35.1678276062012,4.5689754486084,-8.36990261077881,35.0727005004883,4.36221933364868,-8.25675678253174,34.9143447875977,4.01728248596191,-8.8719654083252,33.5756645202637,3.51776742935181,-8.56477737426758,35.4037742614746,3.1792995929718,-8.38611030578613,35.3297424316406,3.55534768104553,-8.21022415161133,34.9344329833984,4.36779880523682,-8.22092342376709,34.7294998168945,4.4049391746521,-8.21338939666748,34.7530708312988,4.25973176956177,-8.21366500854492,34.9857864379883,4.27177286148071,\n-8.35896968841553,34.9792594909668,4.4604549407959,-8.40291786193848,35.7454528808594,3.54616498947144,-8.50260543823242,35.858699798584,3.32037091255188,-8.37730026245117,35.6140022277832,3.64707708358765,-8.41612148284912,35.5419960021973,3.4203827381134,-8.47990322113037,35.6955146789551,3.2742965221405,-8.34787940979004,35.4510459899902,3.76454997062683,-8.31959056854248,35.2991485595703,3.85887670516968,-8.59974193572998,35.8291664123535,3.16135144233704,-8.54978466033936,35.6963768005371,3.14328336715698,-8.39429187774658,33.6788864135742,4.62394094467163,-8.42716217041016,33.648307800293,4.40201473236084,-9.89840602874756,35.2682952880859,4.19409036636353,-10.0428628921509,35.3748893737793,3.91542863845825,-10.1934928894043,35.4644393920898,3.47839403152466,-10.3314628601074,35.1783294677734,3.44022393226624,-9.74534225463867,35.2012710571289,4.60747194290161,-9.62170696258545,35.1468811035156,4.74077701568604,-9.44297790527344,35.1148834228516,4.78078842163086,-8.95193004608154,35.0592346191406,4.66892528533936,-8.269118309021,35.1063690185547,4.06393909454346,-9.38967800140381,35.7668380737305,3.82832741737366,-9.42735767364502,35.4890785217285,4.0159912109375,-9.74074840545654,35.5043563842773,3.45244264602661,-9.52049541473389,35.7991027832031,3.45902061462402,-9.08410167694092,35.7472190856934,3.73782849311829,-9.07610988616943,35.4251823425293,3.9787495136261,-9.41947460174561,35.8356666564941,3.45036768913269,-9.18242740631104,35.8244323730469,3.40057396888733,-8.65144538879395,35.6751365661621,3.54329299926758,-8.60013294219971,35.4023666381836,3.74025058746338,-8.77639675140381,35.7341575622559,3.28729295730591,-9.52271366119385,35.0278701782227,4.49346399307251,-9.93948078155518,35.3462600708008,3.43713688850403,-9.04946708679199,34.9420700073242,4.46935939788818,-8.44690418243408,34.8676719665527,4.28323364257813,-8.76131248474121,35.4674453735352,3.30297207832336,-8.88348388671875,34.560848236084,3.4589376449585,-8.76171779632568,35.6798629760742,3.27803158760071,-10.0887289047241,33.6657524108887,4.40896081924438,\n-10.1630764007568,33.6840438842773,4.47010660171509,-10.3646583557129,33.6449432373047,4.14517593383789,-10.2802152633667,33.633186340332,4.11683940887451,-10.6405515670776,33.5438613891602,3.26456880569458,-10.4338436126709,33.516487121582,3.20561170578003,-10.4148750305176,33.5800399780273,3.67706537246704,-10.5326728820801,33.5909233093262,3.69249868392944,-9.90896511077881,33.709846496582,4.81917142868042,-9.97772789001465,33.7272644042969,4.88665962219238,-9.79854488372803,33.7178726196289,4.92589521408081,-9.84343433380127,33.7358093261719,5.00927448272705,-9.64190673828125,33.7133178710938,4.95843362808228,-9.6579065322876,33.7306976318359,5.05241680145264,-9.21004486083984,33.6847229003906,4.86349678039551,-9.17902374267578,33.6972389221191,4.95234203338623,-8.68776798248291,33.6452522277832,4.68041706085205,-8.61485767364502,33.6486396789551,4.73948431015015,-10.0402870178223,35.0881271362305,3.38248467445374,-10.6457843780518,33.6627044677734,3.13593530654907,-10.4437322616577,33.634449005127,3.07819509506226,-10.5912199020386,33.6596031188965,3.71049070358276,-10.6880941390991,33.6161956787109,3.30864119529724,-8.47219657897949,33.6223754882813,4.61491537094116,-8.46827793121338,33.6228790283203,4.40820407867432,-10.6944246292114,33.7458763122559,3.16912603378296,-0.122992999851704,43.4906578063965,6.96594190597534,-0.126481994986534,42.5673217773438,6.96594142913818,-0.126481994986534,42.5673217773438,6.38594198226929,-0.122992999851704,43.4906578063965,6.38594198226929,0.597185015678406,42.4653396606445,6.96594190597534,0.612924516201019,42.4631614685059,6.38594770431519,0.729595005512238,41.8761787414551,6.96593952178955,0.729551017284393,41.8645477294922,6.38594102859497,0.731296002864838,42.3263778686523,6.38594198226929,0.731275975704193,42.3209381103516,6.96594142913818,0.597548007965088,41.7322731018066,6.96594142913818,-0.129894003272057,41.6643905639648,6.96594190597534,-0.129894003272057,41.6643905639648,6.38594102859497,0.609617590904236,41.7334442138672,6.38594722747803,-0.133908003568649,40.6020469665527,6.96594142913818,\n-0.13390801846981,40.6020545959473,6.3859429359436,-0.234284996986389,40.5024223327637,6.96594190597534,-0.234284996986389,40.5024223327637,6.38594102859497,-0.261011004447937,41.7705078125,7.05283880233765,-0.265424996614456,40.6400299072266,7.05284023284912,0.462424010038376,41.8389549255371,7.05283880233765,0.60971999168396,42.2453231811523,7.05284023284912,0.608789026737213,41.9991340637207,7.05283832550049,-0.258341014385223,42.4770355224609,7.05283880233765,0.452903985977173,42.3955726623535,7.05283880233765,-0.254509001970291,43.4910354614258,7.05283880233765,-0.222614005208015,43.5910339355469,6.38594198226929,-0.222614005208015,43.5910339355469,6.96594142913818,-0.720449984073639,40.5042610168457,6.96594142913818,-0.720449984073639,40.5042610168457,6.38594198226929,-0.744120001792908,40.6419563293457,7.05283880233765,-2.12365031242371,39.5727958679199,6.96594142913818,-2.1295530796051,39.5666122436523,6.38594198226929,-2.12485098838806,39.7394599914551,7.05283880233765,-2.7805540561676,41.780948638916,7.05283880233765,-2.77405595779419,43.5006904602051,7.0528416633606,-2.77367949485779,43.6007080078125,6.96594858169556,-2.773677110672,43.6006736755371,6.38594198226929,-2.22244691848755,39.5865783691406,6.96594190597534,-3.35621309280396,41.3325271606445,6.96594142913818,-3.34770727157593,41.3433380126953,6.38594198226929,-2.21525001525879,39.5751762390137,6.38594198226929,-2.22836995124817,39.7522430419922,7.05283880233765,-3.29831385612488,41.4371223449707,7.05284023284912,-3.34866428375244,41.512393951416,6.96594190597534,-3.34866428375244,41.512393951416,6.38594198226929,-2.88055300712585,41.8218193054199,6.96594190597534,-2.87405395507813,43.5010528564453,6.96594190597534,-2.87405395507813,43.5010528564453,6.38594341278076,-2.88055300712585,41.8218193054199,6.38594198226929,-22.4020500183105,48.1817207336426,1.54338073730469,-21.9378795623779,47.5264930725098,0.964988231658936,-24.7054176330566,45.0436820983887,3.28460216522217,-24.3645610809326,44.4632720947266,2.86222863197327,-24.1518211364746,45.5265579223633,4.87630271911621,\n-24.5619010925293,45.4206123352051,4.05836725234985,-22.384069442749,48.530200958252,2.35600328445435,-22.1372318267822,48.7162055969238,3.37709856033325,-21.8083248138428,43.6105880737305,5.06077337265015,-19.1979789733887,46.1232490539551,4.08673620223999,-22.164608001709,44.1487350463867,5.74446392059326,-19.3826751708984,46.7098121643066,4.98189163208008,-21.5868129730225,48.536376953125,4.22997140884399,-23.6013107299805,45.3508186340332,5.63922548294067,-23.1435661315918,45.1739349365234,6.00655937194824,-20.9026660919189,48.1520385742188,4.80538845062256,-23.7835960388184,43.9319152832031,2.81814455986023,-21.0593452453613,46.5162734985352,0.742828786373138,-19.3185253143311,45.769229888916,3.21123647689819,-22.5982704162598,43.4730453491211,3.63622760772705,-19.7424182891846,45.6002197265625,1.78484308719635,-22.1106472015381,43.5050811767578,4.48459529876709,-23.2739486694336,43.5893974304199,2.90428400039673,-20.3708744049072,45.9203720092773,1.06325078010559,-22.7010631561279,44.7575988769531,6.06966114044189,-20.2916965484619,47.6790084838867,5.20238351821899,-21.4682216644287,48.5379943847656,4.07685518264771,-21.7997226715088,48.6303443908691,3.49851107597351,-22.1923599243164,48.2021217346191,1.5099401473999,-21.9199409484863,47.7049674987793,0.963749051094055,-19.2681007385254,46.0355033874512,3.33348369598389,-19.3146953582764,46.3306922912598,3.93647480010986,-23.4840717315674,45.0589866638184,5.87233924865723,-22.8347396850586,44.6621704101563,6.08595991134644,-24.4846878051758,44.5031890869141,3.10009932518005,-24.6617679595947,44.782642364502,3.41746973991394,-23.3162288665771,43.638298034668,3.18752980232239,-23.7745971679688,43.8534393310547,2.93733525276184,-20.3229217529297,46.124324798584,0.996055424213409,-19.7163581848145,45.8205032348633,1.76762294769287,-24.60475730896,45.2035064697266,3.98160099983215,-24.0964794158936,45.3257904052734,4.83113479614258,-24.1667976379395,44.1854057312012,2.91812348365784,-22.1245307922363,43.8912582397461,5.55091381072998,-22.0114917755127,43.6447410583496,5.10274362564087,\n-23.6671695709229,45.305061340332,5.63549709320068,-22.1414070129395,48.3773384094238,1.94118678569794,-22.1155433654785,48.4054985046387,2.18899011611938,-20.8544502258301,48.1285552978516,4.59779596328735,-22.8147830963135,43.5122756958008,3.69179534912109,-24.6724586486816,45.0163688659668,3.85816407203674,-22.255407333374,43.5268859863281,4.54903697967529,-19.7616958618164,47.168327331543,4.8857307434082,-20.1421985626221,47.6117973327637,5.04017925262451,-22.4245796203613,44.2923469543457,5.93594074249268,-19.41969871521,46.6725616455078,4.51129245758057,-19.3608703613281,45.8563117980957,2.67447733879089,-20.7665348052979,46.4529418945313,0.719281196594238,-21.1806507110596,46.8724899291992,0.734371244907379,-22.0227737426758,48.5846862792969,2.84799718856812,-21.5573883056641,47.3186416625977,0.904423534870148,-19.3374500274658,45.7312431335449,1.88695085048676,-19.5699977874756,45.7080688476563,1.2679615020752,-20.1725769042969,46.0857086181641,0.725336492061615,-20.6738948822021,46.4570732116699,0.412560313940048,-21.1447601318359,46.9291381835938,0.417648464441299,-21.5717449188232,47.4324417114258,0.604677438735962,-22.0146598815918,47.9422149658203,0.768847227096558,-22.2993946075439,48.4316864013672,1.26660573482513,-22.2835540771484,48.7297515869141,2.02767109870911,-22.1839542388916,48.9587860107422,2.82406663894653,-21.8414707183838,48.9177017211914,3.55330300331116,-21.4668483734131,48.8133392333984,4.20687675476074,-21.0063438415527,48.5632362365723,4.71491765975952,-20.5050296783447,48.1918716430664,5.02769327163696,-19.9782161712646,47.7596397399902,5.25458002090454,-19.5416946411133,47.2631225585938,5.10708808898926,-19.1298408508301,46.6791572570801,4.68784427642822,-18.939790725708,46.2231750488281,4.04214715957642,-18.9805450439453,45.9853324890137,3.3668098449707,-19.0853824615479,45.7828369140625,2.6220817565918,-18.1600589752197,46.6569938659668,1.37307822704315,-18.426139831543,46.6431617736816,0.695582926273346,-19.0699462890625,47.0431938171387,0.107480309903622,-19.6161346435547,47.4477996826172,-0.233294531702995,\n-20.1226425170898,47.9667549133301,-0.200760871171951,-20.5982398986816,48.5077171325684,-0.040066946297884,-21.0171203613281,49.0453948974609,0.249932289123535,-21.2495079040527,49.4981117248535,0.785253524780273,-21.3609409332275,49.9169731140137,1.53120338916779,-21.2518730163574,50.1637191772461,2.39346218109131,-20.8882293701172,50.1286926269531,3.18859696388245,-20.480073928833,50.0149917602539,3.90067601203918,-19.978343963623,49.7425003051758,4.45419454574585,-19.4052658081055,49.3570365905762,4.90646600723267,-18.8617305755615,48.8644409179688,5.02746105194092,-18.3861312866211,48.3234825134277,4.86676645278931,-17.9452476501465,47.6973037719727,4.41543531417847,-17.7366161346436,47.2030220031738,3.72183990478516,-17.7712059020996,46.9338340759277,2.98540925979614,-17.8854274749756,46.713207244873,2.17401576042175,-18.1495018005371,46.9325866699219,1.49883544445038,-17.9191188812256,47.0114860534668,2.24770545959473,-17.8125629425049,47.2173118591309,3.00464653968811,-17.7659759521484,47.3819618225098,3.36750364303589,-18.0165863037109,47.9198875427246,4.21446561813354,-18.3593807220459,48.4160575866699,4.58793210983276,-18.7763690948486,48.9096298217773,4.77557802200317,-19.2775058746338,49.3733863830566,4.68725728988647,-20.2334575653076,49.9592819213867,3.79440307617188,-20.6715030670166,50.0821533203125,3.03220653533936,-20.9079055786133,50.0307273864746,2.31216287612915,-20.9988117218018,49.7934913635254,1.50833106040955,-20.8822746276855,49.4387969970703,0.836857914924622,-20.654182434082,49.0165824890137,0.539040386676788,-20.2702236175537,48.5287246704102,0.225860998034477,-20.011625289917,48.1967315673828,0.169654786586761,-19.7482299804688,47.9482192993164,-0.0239475779235363,-18.9396018981934,47.2326812744141,0.31434291601181,-18.4715461730957,46.9784736633301,0.830715239048004,-21.0599403381348,50.2913818359375,3.28496885299683,-20.6517868041992,50.1776809692383,3.99704837799072,-21.423583984375,50.3264122009277,2.48983407020569,-21.5326519012451,50.079662322998,1.62757539749146,-22.4552669525146,48.8924407958984,2.12404298782349,\n-22.3556652069092,49.1214752197266,2.92043828964233,-22.0131816864014,49.080394744873,3.6496753692627,-21.6385593414307,48.9760284423828,4.3032488822937,-21.1780529022217,48.7259254455566,4.81128883361816,-20.1500568389893,49.9051895141602,4.55056667327881,-19.8145771026611,46.1965484619141,0.465458303689957,-19.2947864532471,46.6395530700684,0.164982780814171,-19.851354598999,46.3646507263184,0.545339286327362,-19.3213081359863,46.8249206542969,0.248330503702164,-18.4488430023193,46.8108177185059,0.76314902305603,-19.6774959564209,45.7687377929688,1.3232489824295,-18.8787593841553,45.8631553649902,3.38570284843445,-18.9835968017578,45.6606597900391,2.64097476005554,-17.7836418151855,46.5910263061523,2.1929087638855,-17.6694202423096,46.811653137207,3.00430226325989,-17.6151103973389,46.9004898071289,2.97250294685364,-17.7293338775635,46.6798629760742,2.16110944747925,-17.6784820556641,46.8914909362793,2.22928833961487,-17.5719261169434,47.0973129272461,2.98622941970825,-19.0120277404785,45.8349990844727,3.41211867332459,-19.1168651580811,45.6325035095215,2.66739082336426,-19.2995853424072,45.8851699829102,3.37879276275635,-19.3923530578613,45.7059783935547,2.71978616714478,-23.6020965576172,42.4886283874512,4.21740007400513,-24.0390434265137,42.5906944274902,3.76165699958801,-24.4657897949219,42.7697563171387,3.48394298553467,-24.9110813140869,43.0958671569824,3.48783564567566,-25.2296810150146,43.3942337036133,3.6277711391449,-25.4390163421631,43.6843681335449,3.91812968254089,-25.6448230743408,44.0140953063965,4.5360369682312,-25.4211101531982,44.173267364502,5.21521854400635,-25.0152473449707,44.1889839172363,5.87159967422485,-24.5331020355225,44.0858268737793,6.39444398880005,-24.2935276031494,43.9908142089844,6.32334661483765,-23.6125564575195,43.6142311096191,6.57493114471436,-23.1792774200439,43.2090682983398,6.38589477539063,-22.8766670227051,42.7984848022461,5.98477125167847,-22.8129253387451,42.4254875183105,5.29610729217529,-22.7085399627686,43.4084663391113,3.62266159057617,-23.2508773803711,43.5571594238281,3.10341167449951,\n-23.7290058135986,43.7791404724121,2.83729338645935,-24.2031059265137,44.1235504150391,2.83552932739258,-24.5413093566895,44.4444618225098,2.9929051399231,-24.7613124847412,44.7580223083496,3.31627941131592,-24.8992767333984,45.2632522583008,3.92786908149719,-24.6648254394531,45.4869651794434,4.45191526412964,-24.0667724609375,45.5779266357422,5.56209564208984,-23.6824283599854,45.3489074707031,5.97707366943359,-23.4934158325195,45.0926094055176,5.96880340576172,-22.7836380004883,44.6977272033691,6.22604417800903,-22.3307552337646,44.27001953125,6.01956701278687,-22.0103874206543,43.8350105285645,5.59420156478882,-21.9547653198242,43.440372467041,4.84743356704712,-23.7006778717041,42.5842094421387,4.29594802856445,-22.9873161315918,42.6391448974609,5.46495914459229,-23.060697555542,42.8498802185059,5.78238868713379,-23.2499942779541,43.226188659668,6.30128717422485,-23.6414680480957,43.5781860351563,6.44240856170654,-24.5210266113281,43.9476547241211,6.11971950531006,-24.898904800415,44.0220222473145,5.69627857208252,-25.2336368560791,44.0161056518555,5.16977643966675,-25.3931694030762,43.8623733520508,4.60062789916992,-25.4039688110352,43.7053184509277,4.01024484634399,-25.2397403717041,43.4337997436523,3.71354222297668,-24.8973350524902,43.1546020507813,3.67040634155273,-24.4386367797852,42.8376426696777,3.65668988227844,-24.0960559844971,42.6828956604004,3.8564293384552,-24.7833137512207,45.0106201171875,3.81515216827393,-25.447660446167,43.914134979248,4.38937330245972,-24.2597980499268,43.9135971069336,6.20571947097778,-25.4134788513184,43.8154411315918,4.35810327529907,-24.985466003418,44.268180847168,5.78709697723389,-24.8653507232666,44.1018943786621,5.61898374557495,-25.3341484069824,44.2546806335449,5.22318649291992,-25.1503314971924,44.096851348877,5.17074155807495,-24.1012134552002,45.5726890563965,5.49815893173218,-24.6343822479248,45.4915962219238,4.50843048095703,-25.2383289337158,44.3627853393555,5.23182153701782,-24.6551876068115,45.3935508728027,4.63619089126587,-24.9477596282959,44.3740348815918,5.70174646377563,\n-24.210880279541,45.461124420166,5.46096467971802,-25.0922203063965,44.3756713867188,5.19212770462036,-24.5868301391602,45.2690048217773,4.67591428756714,-24.840389251709,44.3854217529297,5.59939527511597,-24.2017631530762,45.327564239502,5.39071893692017,-21.8714790344238,43.4021072387695,4.89463138580322,-22.733699798584,42.3764038085938,5.31425333023071,-21.9884815216064,43.612491607666,5.1719913482666,-22.8765773773193,42.6221656799316,5.60099172592163,-21.8782711029053,43.5508041381836,5.19777011871338,-22.7452659606934,42.5296897888184,5.6197304725647,-23.5394515991211,43.6381874084473,6.61610221862793,-23.1375846862793,43.2624015808105,6.44077062606812,-22.3505821228027,44.2464332580566,6.10100269317627,-22.7706279754639,44.6431274414063,6.29250907897949,-22.7341136932373,44.7321548461914,6.18907356262207,-22.3140659332275,44.3354606628418,5.99756574630737,-22.3951377868652,44.3589134216309,5.93493366241455,-22.7750091552734,44.7120819091797,6.09634160995483,-23.6365718841553,43.5489616394043,6.58618783950806,-23.2347049713135,43.1731758117676,6.41085624694824,-23.6633892059326,43.5155258178711,6.46327352523804,-23.3002948760986,43.1890449523926,6.3323826789856,-23.2172451019287,42.6339797973633,5.04120302200317,-22.6529445648193,42.6419715881348,4.88354730606079,-22.7472667694092,42.721263885498,4.90590715408325,-22.4277858734131,43.1294479370117,4.67683029174805,-22.3620510101318,43.0246162414551,4.65405035018921,-22.1816253662109,43.4426612854004,4.50388669967651,-24.0265216827393,42.5450248718262,3.7071475982666,-24.4532699584961,42.7240867614746,3.42943382263184,-23.7164859771729,43.733470916748,2.78278398513794,-23.2383575439453,43.5114898681641,3.04890275001526,-23.2117614746094,43.6130676269531,3.0797917842865,-23.6898899078369,43.8350486755371,2.81367349624634,-23.735481262207,43.9093475341797,2.91371536254883,-23.2771129608154,43.694206237793,3.16390991210938,-24.0792198181152,42.5373382568359,3.78909802436829,-24.5059661865234,42.7164001464844,3.51138377189636,-24.13623046875,42.6295394897461,3.88387060165405,\n-24.4788150787354,42.7842864990234,3.68413090705872,-22.1667804718018,43.211009979248,5.33818578720093,-22.1515426635742,43.0689430236816,5.03093194961548,-22.385612487793,42.9532775878906,5.44468927383423,-22.3880958557129,42.7875366210938,5.14605522155762,-22.2405643463135,43.1241111755371,5.37409496307373,-22.1619033813477,43.16552734375,5.23982000350952,-22.1553688049316,43.1046142578125,5.10808849334717,-22.2210655212402,42.9862403869629,5.06476593017578,-22.3165550231934,42.8726425170898,5.11123847961426,-22.3873310089111,42.8386306762695,5.23811817169189,-22.3864707946777,42.8959579467773,5.34140396118164,-22.3239517211914,43.0259017944336,5.41468000411987,-22.3121013641357,42.9663772583008,5.27273082733154,-22.3124008178711,42.9463119506836,5.23658084869385,-22.2876300811768,42.9582099914551,5.19217300415039,-22.254207611084,42.997974395752,5.17590713500977,-22.2312145233154,43.0394058227539,5.19106960296631,-22.2335014343262,43.0607223510742,5.23717641830444,-22.2610340118408,43.0462265014648,5.28417253494263,-22.2902202606201,43.0118560791016,5.29837703704834,-22.2552661895752,42.9270706176758,5.29389572143555,-22.2555656433105,42.9070053100586,5.25774621963501,-22.2307929992676,42.9189071655273,5.21333789825439,-22.1973705291748,42.958667755127,5.19707250595093,-22.1743774414063,43.0000991821289,5.21223497390747,-22.1766662597656,43.0214157104492,5.25834131240845,-22.2041969299316,43.0069198608398,5.30533790588379,-22.2333831787109,42.9725532531738,5.3195424079895,-22.2273292541504,42.9329032897949,5.28440809249878,-22.2275142669678,42.9205322265625,5.26211595535278,-22.2122364044189,42.9278678894043,5.23473072052002,-22.1916275024414,42.9523849487305,5.22470045089722,-22.1774463653564,42.9779396057129,5.23405075073242,-22.178861618042,42.991081237793,5.26248359680176,-22.1958351135254,42.9821434020996,5.29146432876587,-22.2138366699219,42.9609489440918,5.30022382736206,-22.3022117614746,43.4858360290527,5.72577333450317,-22.6179618835449,43.9109115600586,6.1435604095459,-22.5559597015381,43.1822204589844,5.84017658233643,\n-22.868013381958,43.598258972168,6.25151443481445,-23.1094093322754,42.983512878418,6.14117527008057,0.0135970851406455,49.8888130187988,5.46461820602417,-0.0439089983701706,46.9334030151367,5.46729421615601,-0.181864738464355,56.3130836486816,-4.71527814865112,-0.172646686434746,57.6230239868164,-4.51124048233032,0.0305423717945814,61.7640762329102,-3.31285810470581,-0.0491822399199009,60.4813423156738,-3.89235258102417,-0.0625703707337379,51.1098365783691,-4.30081701278687,-0.0205972474068403,49.2944297790527,-3.22874736785889,-0.176884800195694,54.6524085998535,-4.77034664154053,1.17273511932581e-005,52.8985023498535,5.39261341094971,0.137227490544319,54.0256233215332,5.28923416137695,-0.136817902326584,52.6190414428711,-4.49335432052612,0.184443131089211,54.9490509033203,5.17759370803833,0.241316020488739,56.303783416748,4.55678033828735,-7.75623239065986e-017,44.6220588684082,5.95007181167603,-7.75623239065986e-017,44.1932983398438,-2.4703152179718,0.052837498486042,51.2362060546875,5.59731817245483,0.335718125104904,59.506462097168,2.47581624984741,0.318446129560471,58.4727668762207,3.11742997169495,-5.00296115875244,57.2223930358887,-5.05353212356567,-3.89901828765869,57.3001937866211,-4.94295692443848,-3.80570006370544,58.7004356384277,-5.00134325027466,-5.01546001434326,58.6748123168945,-4.51018762588501,-2.33792757987976,49.2690544128418,5.31126832962036,-3.19219017028809,46.8397331237793,5.11824417114258,-4.16545343399048,46.8441047668457,5.14115715026855,-4.33468294143677,48.3736190795898,4.74083423614502,-0.508937001228333,46.9681167602539,5.79316377639771,-0.459551274776459,49.8549499511719,5.72826194763184,-4.9380989074707,44.0710144042969,-0.0603329986333847,-5.70313310623169,45.5682716369629,-0.12718839943409,-6.18036985397339,45.2744522094727,1.05097448825836,-5.83846712112427,44.3852729797363,1.56467497348785,-5.37826013565063,46.895393371582,-1.29639673233032,-7.40615081787109,51.1274833679199,-0.183409884572029,-6.76184320449829,49.4113388061523,-0.870985507965088,-6.24649906158447,49.6185493469238,-1.80992066860199,\n-7.16691017150879,51.5537223815918,-1.74251294136047,-4.96109008789063,46.449836730957,4.62802600860596,-5.02808284759521,47.667839050293,4.1308741569519,-5.50866508483887,49.6626396179199,4.08968114852905,-4.43541669845581,49.9843826293945,4.87894105911255,-5.99175930023193,47.1326713562012,0.551007688045502,-6.54927587509155,49.1226081848145,-0.0480374731123447,-6.34458684921265,48.3535385131836,1.34890067577362,-6.20943117141724,46.6569442749023,1.74234962463379,-5.83220386505127,49.9621200561523,-2.57093405723572,-6.44042301177979,51.9786491394043,-3.23154377937317,-4.97103071212769,50.3766403198242,-3.72068238258362,-2.57297945022583,50.9226188659668,-4.10634851455688,-3.04856324195862,52.3631401062012,-4.5895528793335,-5.39983701705933,52.1313934326172,-4.45549535751343,-4.20102405548096,43.5664901733398,5.19080018997192,-5.09468984603882,43.6128387451172,4.61228513717651,-5.75057411193848,44.0617218017578,3.85488200187683,-6.00133609771729,46.3558654785156,3.68154311180115,-6.32964134216309,44.886531829834,2.16583490371704,-4.61951017379761,59.6811981201172,0.797900199890137,-5.18459749221802,60.2807922363281,0.704080522060394,-4.56298160552979,60.2502746582031,0.991760969161987,-4.66016292572021,59.2584419250488,1.81895363330841,-5.68881893157959,59.1940536499023,1.79819095134735,-5.18220567703247,60.3577499389648,0.0792717710137367,-4.42179536819458,60.3886947631836,0.423252910375595,-6.16989278793335,61.7052993774414,-2.4096360206604,-4.9240550994873,62.3232688903809,-2.90676879882813,-5.13821315765381,62.3888282775879,-1.62733566761017,-6.35365962982178,61.7394332885742,-1.29647183418274,-3.29271292686462,63.0202407836914,-1.85308480262756,-3.05310773849487,62.9706840515137,-2.64070582389832,-2.5487334728241,58.6095314025879,3.81683444976807,-2.42541718482971,55.9129295349121,5.45159578323364,-3.72787094116211,55.709228515625,5.43201351165771,-4.43703937530518,58.3423347473145,3.65203523635864,-4.73564958572388,60.7290840148926,-3.89975166320801,-3.89599299430847,60.6723747253418,-4.30670547485352,-4.26608657836914,47.8940963745117,-2.71014308929443,\n-2.33043313026428,48.7191696166992,-3.23936223983765,-2.05022978782654,57.4430694580078,-5.1027364730835,-1.96963977813721,55.880916595459,-5.11452007293701,-2.16026568412781,58.8478927612305,-4.83823204040527,-0.645922422409058,58.7460327148438,3.64485883712769,-0.68452650308609,56.2766342163086,5.19728088378906,-2.88014340400696,60.6445121765137,-4.31239032745361,-0.918300688266754,49.2085800170898,-3.41392731666565,-1.5696405172348,51.1897010803223,-4.15839719772339,-2.58754658699036,59.5622673034668,2.69001436233521,-4.594557762146,59.1206893920898,2.84920859336853,-1.72525858879089,54.378116607666,-4.8572883605957,-0.665218472480774,52.951229095459,5.54827356338501,-0.759148120880127,53.6747779846191,5.45814752578735,-5.81344699859619,47.5758666992188,3.06518507003784,-6.35021162033081,49.6599311828613,1.88136398792267,-6.05563068389893,58.0019264221191,3.26532244682312,-6.29915761947632,58.448902130127,2.8508608341217,-5.25224447250366,55.6491203308105,4.969970703125,-4.55231380462646,61.0196113586426,-0.239496752619743,-5.43997573852539,60.8021011352539,-0.191684767603874,-6.04992532730103,61.4153099060059,-0.325486749410629,-5.06683301925659,61.9652404785156,-0.78337424993515,-2.01689052581787,52.3396987915039,-4.56934595108032,-4.11964130401611,55.5003929138184,-5.05728578567505,-0.133614599704742,59.0669021606445,-4.4751033782959,-6.16877794265747,60.5145454406738,0.550737738609314,-5.96397542953491,60.5219535827637,-0.148668453097343,-6.5405535697937,60.81005859375,-0.272704929113388,-5.74670171737671,59.9476547241211,1.13532936573029,-6.77210903167725,60.3752555847168,1.38928270339966,-6.52460813522339,58.5361785888672,2.17649149894714,-6.68791389465332,58.7010536193848,2.22907447814941,-6.27624559402466,59.3210983276367,1.79491090774536,-7.46848487854004,59.7941474914551,2.08688426017761,-7.75415468215942,59.1501045227051,2.26238036155701,-7.81153011322021,61.3239059448242,-0.382952928543091,-7.29381418228149,61.1288414001465,-0.944032788276672,-7.46071624755859,60.8121109008789,1.02310824394226,-6.85135412216187,61.2363624572754,-0.92545074224472,\n-6.8177695274353,60.8522338867188,0.5522101521492,-6.40969181060791,55.401611328125,3.81819677352905,-6.88170289993286,57.552074432373,2.49769401550293,-6.20172452926636,53.3832397460938,2.31489658355713,-6.36324214935303,51.7953987121582,2.1042845249176,-7.04831647872925,52.6200332641602,0.252361595630646,-7.28402996063232,53.6452026367188,0.16018034517765,-0.694299697875977,54.651237487793,5.72144031524658,-3.57418870925903,54.2588043212891,5.43804931640625,-3.32706022262573,53.3785057067871,5.03736639022827,-4.77684831619263,53.3375396728516,4.4062705039978,-5.07331657409668,54.2058448791504,4.84667634963989,-2.14672422409058,53.4957542419434,5.21924448013306,-2.29173636436462,54.3981246948242,5.64961671829224,-5.99193096160889,54.214729309082,4.02423715591431,-6.32433986663818,54.4655952453613,3.40305590629578,-6.84397315979004,55.3699760437012,2.83058953285217,-5.94443607330322,51.708423614502,4.05636835098267,-2.04570722579956,52.4807548522949,5.54989433288574,-6.27668046951294,54.5082397460938,2.19852471351624,-6.68165445327759,55.0434265136719,2.18652367591858,-5.65278625488281,53.3934936523438,3.7850239276886,-4.87148952484131,51.864917755127,4.85457754135132,-3.16624927520752,52.145923614502,5.3819727897644,-2.62237215042114,50.6626281738281,5.40696811676025,-8.41484260559082,60.4155578613281,1.57534170150757,-8.83414459228516,61.0870361328125,0.103286720812321,-0.429187029600143,44.5688095092773,5.94135522842407,-3.39157700538635,43.7743873596191,5.51495599746704,-6.54397678375244,60.8124046325684,-3.20612573623657,-6.18393325805664,60.7584075927734,-3.15727949142456,-6.73055362701416,61.3397254943848,-1.89037048816681,-7.12801933288574,61.1413993835449,-2.07482528686523,-3.82461071014404,54.202262878418,-4.79300689697266,-7.56537818908691,61.2854270935059,-1.97838175296783,-3.41479253768921,62.6111488342285,-0.930265963077545,-7.66061592102051,60.9895057678223,-2.96556806564331,-7.23512315750122,60.0191764831543,-3.89410877227783,-6.22283267974854,59.731559753418,-4.06070184707642,-4.73881864547729,59.5047225952148,-4.55289316177368,\n-7.84283971786499,54.1470756530762,-2.38503170013428,-6.86101531982422,54.433349609375,-3.65812921524048,-7.79491281509399,53.7588539123535,-0.228861659765244,-2.26250076293945,44.192440032959,-2.14107060432434,-5.80761480331421,55.130687713623,-4.84916019439697,-5.7725682258606,54.2856330871582,-4.57562637329102,-7.54521226882935,56.7853012084961,-4.26201248168945,-7.75341081619263,55.0225067138672,-3.3477029800415,-7.28053140640259,55.2495574951172,-4.16975021362305,-6.94179582595825,57.1727485656738,-4.17385244369507,-3.07096242904663,44.1793899536133,-1.37161779403687,-0.431658685207367,51.0969543457031,5.59628582000732,-6.80107975006104,50.7735061645508,0.0954368412494659,-7.76311159133911,54.0241966247559,-0.301495224237442,-7.44548082351685,54.1859931945801,0.0743789598345757,-6.75493192672729,54.6499519348145,1.31245946884155,-7.18617343902588,58.267749786377,2.41894459724426,-6.98509931564331,58.0105361938477,2.40028405189514,-5.56892108917236,43.7037506103516,3.96434211730957,-9.09653759002686,61.2269897460938,-1.50791823863983,-7.51727819442749,57.9505767822266,-4.34716653823853,-6.89555788040161,58.792911529541,-4.38299942016602,-7.62991142272949,58.7892837524414,-4.1893367767334,-0.478152990341187,43.5242080688477,5.80299520492554,-3.50020909309387,43.5624122619629,5.78555011749268,-8.60066223144531,60.8792953491211,-2.64818215370178,-8.10863590240479,59.867431640625,-3.61165523529053,-7.92280101776123,54.623119354248,-2.55926966667175,-7.9593391418457,55.3963432312012,-2.68657779693604,-8.18213939666748,55.0373420715332,-2.67853426933289,-8.11448860168457,55.3380355834961,-3.37380743026733,-8.08938598632813,55.7524185180664,-3.29892182350159,-7.93057060241699,54.3846206665039,-0.261126399040222,-7.75561332702637,55.1170883178711,-1.67782986164093,-7.59425258636475,54.67236328125,-0.427858233451843,-6.79058885574341,55.7474899291992,1.87186169624329,-7.11697340011597,56.5882987976074,2.24229073524475,-7.24335622787476,55.9228935241699,2.49578619003296,-7.12432050704956,55.3387107849121,2.03639507293701,\n-7.1244478225708,54.9274826049805,0.763150691986084,-7.26573514938354,54.6200256347656,0.920579612255096,-7.5579628944397,54.5143737792969,0.165195435285568,-7.27818441390991,54.7909660339355,-0.0486234277486801,-7.35125160217285,57.4009628295898,2.53132128715515,-7.41011142730713,57.6769714355469,2.50238084793091,-8.53023815155029,59.0593490600586,2.27440071105957,-9.06899929046631,59.9608154296875,1.7973073720932,-8.88298988342285,60.295108795166,1.89493358135223,-8.21960163116455,59.1651039123535,2.56374311447144,-7.46124601364136,57.5798568725586,2.30548739433289,-7.6955394744873,57.913932800293,2.32873606681824,-7.51820802688599,57.9574584960938,2.49965953826904,-9.46251106262207,60.6362113952637,0.4064701795578,-9.31418800354004,61.0124816894531,0.382610023021698,-6.8989520072937,55.382080078125,1.36610519886017,-7.92569446563721,56.9639663696289,-4.34455442428589,-7.51057100296021,57.2705192565918,-4.31482410430908,-7.89591503143311,57.3142204284668,-4.40296173095703,-7.37515687942505,57.2835006713867,2.34248971939087,-7.30052852630615,56.7208023071289,2.55324769020081,-9.63988018035889,60.9473609924316,-1.19915819168091,-9.46856594085693,61.3043594360352,-1.2989444732666,-9.27958202362061,60.755500793457,-2.4731273651123,-9.07314586639404,61.0160331726074,-2.67641758918762,-7.95075511932373,57.947681427002,-4.51332521438599,-8.13483333587646,58.8517189025879,-4.33059501647949,-8.73000431060791,59.7835388183594,-3.44021344184875,-8.48867511749268,59.9324913024902,-3.72010040283203,-8.34878540039063,58.7928733825684,-4.02249336242676,-8.22158813476563,58.0632476806641,-4.18288135528564,-8.01778411865234,57.130428314209,-3.94697332382202,-8.05079460144043,57.4037895202637,-4.01655721664429,-5.67244100570679,44.0079154968262,1.06051099300385,-5.80713796615601,43.9371109008789,1.50510704517365,-7.45419216156006,56.1586456298828,-1.29048562049866,-8.28530311584473,56.6873512268066,-2.61842083930969,-8.6239013671875,57.5741500854492,-3.51662087440491,-7.06550312042236,56.9819793701172,0.424003332853317,-6.98706388473511,56.4588165283203,1.49204194545746,\n-7.16970539093018,55.3181915283203,-0.13018873333931,-7.15138053894043,55.2580871582031,0.648422956466675,-8.14474773406982,57.25341796875,1.78825891017914,-8.47859382629395,57.2579498291016,1.99721741676331,-9.05362892150879,58.1805534362793,2.35215330123901,-9.83308410644531,57.4026870727539,2.20573568344116,-9.64915084838867,59.5587844848633,1.99272048473358,-10.1421051025391,60.1832733154297,0.716989398002625,-9.10313892364502,56.9268455505371,1.638108253479,-10.6574897766113,56.644100189209,1.67002630233765,-7.56710195541382,57.1711387634277,1.84745657444,-8.48157787322998,55.0172271728516,-0.216014891862869,-7.0231614112854,56.4469947814941,-0.28096815943718,-7.16446113586426,56.3610076904297,-0.615244030952454,-8.39256477355957,54.9758796691895,-0.616515576839447,-8.50124835968018,55.7217483520508,1.73240280151367,-9.41024780273438,56.5547943115234,2.06916451454163,-7.88820028305054,56.8479080200195,1.19110143184662,-9.09678936004639,56.8670043945313,-3.44182705879211,-8.34248447418213,56.1166343688965,-2.58545112609863,-8.21704578399658,55.0028915405273,1.15598487854004,-9.90963077545166,55.8720932006836,-3.56037259101868,-9.06782722473145,54.9145317077637,-2.63912296295166,-8.62874794006348,54.9908294677734,-1.18219780921936,-7.649001121521,55.1071319580078,-0.538050770759583,-10.340726852417,58.6142463684082,1.99010813236237,-10.8593845367432,59.2226715087891,0.763373553752899,-11.012113571167,57.6644592285156,1.87140822410584,-11.2696666717529,59.1985969543457,-1.52713632583618,-10.6699409484863,59.8837432861328,-1.89451503753662,-10.8999452590942,59.7691764831543,-0.652961134910584,-11.4934072494507,58.7517471313477,-0.260973364114761,-9.99734973907471,60.7780532836914,-1.08868741989136,-10.6349620819092,58.9184379577637,-2.31953024864197,-9.99201107025146,59.2885208129883,-2.83282876014709,-9.1008825302124,59.7472343444824,-3.3547728061676,-9.48565769195557,60.6213226318359,-2.42824769020081,-9.63987922668457,58.4990463256836,-3.35429525375366,-10.0067596435547,58.0339851379395,-3.24089646339417,-8.68969440460205,58.21142578125,-3.91057538986206,\n-11.4933223724365,58.2437973022461,0.7555051445961,-14.079628944397,51.5313491821289,-1.75432026386261,-15.3577547073364,50.4500312805176,-1.08153355121613,-14.7907867431641,50.5980491638184,-0.796776831150055,-13.3921184539795,51.4282913208008,-0.533235013484955,-11.9978437423706,52.0623245239258,-0.24705570936203,-10.251615524292,53.4479827880859,0.0441180802881718,-10.1969766616821,53.3028335571289,-0.340612351894379,-11.9713344573975,51.9814376831055,-0.58304238319397,-13.6772937774658,51.6746406555176,1.87144458293915,-12.632607460022,52.1185760498047,2.51966714859009,-12.5650129318237,51.5652618408203,1.17271864414215,-13.7069854736328,51.3117408752441,1.151162981987,-11.374698638916,52.2686195373535,1.14971232414246,-11.4781999588013,52.9149055480957,2.49313879013062,-9.74384593963623,54.5315742492676,2.21795177459717,-13.9736175537109,52.368595123291,2.47570753097534,-13.1968288421631,52.962287902832,3.10246396064758,-14.8301277160645,52.6071395874023,2.11761546134949,-14.2657508850098,52.8922119140625,2.13393473625183,-14.4684648513794,52.1536636352539,2.14125990867615,-14.8657751083374,51.7047424316406,2.20066118240356,-14.8201179504395,53.070125579834,2.05547261238098,-14.1463689804077,53.445671081543,2.12267684936523,-15.0371074676514,52.2935600280762,-2.07219195365906,-16.2619514465332,51.1877555847168,-1.39485847949982,-15.8765563964844,50.9944725036621,-1.46031129360199,-14.5988140106201,51.8026733398438,-2.22906160354614,-17.1141986846924,50.1530723571777,-0.656818032264709,-16.1127605438232,49.9333915710449,-0.649384915828705,-15.7860059738159,49.9094886779785,-0.118252269923687,-14.3615608215332,51.0999221801758,1.76429009437561,-15.3237085342407,50.4653549194336,1.89021146297455,-18.9265270233154,52.0916786193848,2.08394813537598,-18.2440147399902,52.6426467895508,1.4875899553299,-17.8324413299561,52.9939117431641,2.0628867149353,-18.2371978759766,52.0618019104004,3.29557943344116,-15.5986242294312,49.897388458252,0.180025562644005,-16.1771202087402,48.9824981689453,0.648494422435761,-15.8943605422974,49.4016189575195,1.68389463424683,\n-15.0275983810425,50.1505317687988,1.01311051845551,-16.5464572906494,51.6605796813965,3.32884478569031,-15.4696502685547,50.710880279541,2.66894578933716,-17.7275943756104,51.8120422363281,3.08908557891846,-16.9035873413086,53.2870559692383,2.3514256477356,-15.8416471481323,52.9759292602539,2.68076205253601,-19.8595390319824,50.9323654174805,3.22305417060852,-18.8802871704102,50.6448135375977,4.20212316513062,-18.1262359619141,49.6349830627441,4.5990252494812,-20.3983383178711,50.4655838012695,1.90877258777618,-20.2319946289063,50.4357147216797,1.16225552558899,-20.1870269775391,50.027660369873,0.646689832210541,-19.9135608673096,49.7892875671387,0.368544578552246,-18.6255340576172,47.3748207092285,0.111035406589508,-17.3023681640625,48.6882209777832,-0.212918892502785,-18.8274440765381,48.9921684265137,-0.369614362716675,-11.2789144515991,52.7401924133301,-2.49145722389221,-12.936861038208,52.1631240844727,-2.09757351875305,-12.2275257110596,52.1928596496582,-0.912774920463562,-10.5374174118042,53.401309967041,-0.792993426322937,-16.3899230957031,48.9935150146484,0.133493438363075,-16.6946067810059,49.0124168395996,-0.605560779571533,-17.0542774200439,48.5133399963379,0.351435780525208,-18.2206153869629,47.0674438476563,0.796007394790649,-12.8616600036621,54.1305847167969,2.49924993515015,-12.0359754562378,53.8261222839355,2.99227213859558,-13.5405406951904,53.2507095336914,2.46743822097778,-10.4204120635986,55.5134124755859,2.56823205947876,-12.3428859710693,53.5515251159668,-3.40832281112671,-13.5257186889648,52.5651512145996,-2.6235671043396,-18.2112407684326,49.9638214111328,-0.76670640707016,-18.4898586273193,49.53125,-0.511448681354523,-17.11106300354,50.5295639038086,-0.92558091878891,-13.3685293197632,53.7153778076172,-2.68515563011169,-12.1484384536743,56.8107490539551,0.557642042636871,-12.1036748886108,56.5559844970703,0.99444192647934,-13.0235824584961,55.6834754943848,1.18073070049286,-13.4592247009277,55.5429267883301,0.952362835407257,-14.877911567688,54.3908309936523,1.14372169971466,-14.8840246200562,53.8452568054199,1.51513016223907,\n-14.330548286438,50.7510681152344,-0.0111402757465839,-16.7873268127441,48.4305381774902,1.50344741344452,-16.7642364501953,48.5701866149902,1.02926099300385,-16.5800800323486,48.3761558532715,1.93620872497559,-18.0195808410645,47.1744804382324,1.6593029499054,-11.1290073394775,57.0205192565918,-3.73677539825439,-11.8914222717285,58.0101776123047,-2.49101114273071,-12.6511726379395,57.3129272460938,-2.62014579772949,-12.0716953277588,56.2566299438477,-3.62442135810852,-14.2039346694946,55.8782081604004,-1.99054050445557,-14.2394742965698,54.8764915466309,-1.69854950904846,-13.3633728027344,54.7506828308105,-2.51998615264893,-12.8050441741943,55.4120407104492,-3.20260739326477,-15.5451545715332,54.3909187316895,-0.944691777229309,-15.6051340103149,53.6398811340332,-1.19103765487671,-18.6171264648438,50.7980270385742,-0.42991316318512,-18.7923183441162,50.4993553161621,-0.173323720693588,-18.8255710601807,49.7969970703125,-0.24158239364624,-15.4429044723511,52.9892845153809,-1.97211527824402,-17.1787643432617,52.7444152832031,-0.410667061805725,-17.0103073120117,52.2682647705078,-0.746182978153229,-14.5044660568237,55.9602584838867,-0.556629240512848,-15.4355049133301,54.7218017578125,0.240091517567635,-18.9051361083984,49.2556838989258,-0.212960779666901,-11.3375291824341,56.0898933410645,2.17179417610168,-11.0171632766724,54.711296081543,-3.56722521781921,-10.0315380096436,53.8144073486328,-2.67064666748047,-9.3803129196167,53.8204650878906,1.42993497848511,-9.84768962860107,53.8808174133301,-0.888922214508057,-9.65566444396973,53.9683685302734,-0.00864173006266356,-9.65421772003174,53.7139053344727,-0.368462741374969,-11.5770902633667,58.701343536377,-1.27429091930389,-11.7678966522217,58.0280494689941,-0.0459968149662018,-10.9296398162842,58.6693992614746,-2.24099469184875,-11.9043874740601,56.7409973144531,0.94693797826767,-11.4768314361572,56.4381294250488,1.56433737277985,-11.6599178314209,56.2103996276855,1.59167802333832,-11.4014825820923,56.7989845275879,1.64399898052216,-11.7768106460571,57.2847061157227,0.964253008365631,\n-11.8873796463013,57.0615272521973,0.340082973241806,-12.1598997116089,58.4843826293945,-1.42520177364349,-12.9499549865723,57.8103370666504,-1.27406144142151,-11.8083772659302,57.8043518066406,-0.143025532364845,-12.4767713546753,57.3775024414063,0.146502330899239,-13.7413520812988,55.7738189697266,0.647366166114807,-13.3479604721069,54.4060974121094,2.3595118522644,-16.6586666107178,51.6323089599609,-1.1572380065918,-12.2062034606934,55.6152458190918,1.59468448162079,-16.2585430145264,53.7987480163574,1.81818199157715,-15.4065914154053,53.470832824707,2.19790458679199,-16.9875087738037,53.5469665527344,0.917690515518188,-18.654182434082,51.5154151916504,0.383005619049072,-19.3796482086182,51.2564315795898,0.973189532756805,-19.3383960723877,50.9063301086426,0.826740324497223,-18.549898147583,51.0804443359375,0.245433732867241,-16.8411140441895,48.938648223877,3.71082305908203,-17.8749370574951,49.8132171630859,4.56413221359253,-16.6467800140381,48.3975677490234,2.77507829666138,-13.2260084152222,51.3968048095703,0.032488327473402,-20.513069152832,50.4961700439453,2.56306648254395,-19.5767478942871,49.4250297546387,-0.103127479553223,-19.1159076690674,50.2191734313965,-0.157384023070335,-19.263822555542,50.430233001709,0.27906745672226,-19.3878326416016,50.5774154663086,0.466669023036957,-19.7247257232666,49.628490447998,0.250612646341324,-19.1858215332031,50.315013885498,0.205716267228127,-17.4128494262695,53.1083679199219,1.88863396644592,-17.6651172637939,51.6837005615234,-0.421823114156723,-17.3898468017578,51.0755653381348,-0.691629111766815,-8.74059391021729,58.7906532287598,-3.90513944625854,-3.631098985672,59.8498306274414,1.73694729804993,-3.33879423141479,60.3737182617188,1.17213428020477,-3.50298547744751,60.2044410705566,1.69284284114838,-0.836800396442413,62.0290718078613,-3.44790577888489,-2.63942551612854,59.934383392334,2.14702224731445,-3.34576869010925,61.2543296813965,-0.264682769775391,-0.774065554141998,59.8994979858398,2.45401930809021,-2.98916459083557,60.147777557373,1.79330563545227,-10.2027149200439,53.1423873901367,1.3846652507782,\n-10.5530920028687,53.7772369384766,2.34635376930237,-11.2281942367554,54.6697654724121,2.78025221824646,-11.9775266647339,55.267162322998,2.30929613113403,-6.1092848777771,44.5726852416992,2.80859422683716,-6.12484836578369,46.5345611572266,2.53054237365723,-6.09523248672485,47.9618530273438,2.03063750267029,-6.58994388580322,50.2920265197754,0.863238930702209,-6.74691867828369,52.2777366638184,0.972675979137421,-6.81625986099243,53.5835075378418,1.24111199378967,-5.93246269226074,53.3926849365234,3.18568468093872,-6.16047334671021,51.7383117675781,3.05703854560852,-5.93553829193115,49.6501426696777,2.96717262268066,-4.85589504241943,45.5259628295898,-0.946087539196014,-3.58722996711731,45.8115081787109,-1.97504353523254,-2.34073543548584,46.1230392456055,-2.12600135803223,-0.0774050205945969,46.1967735290527,-2.60712957382202,5.56892108917236,43.7037506103516,3.96434211730957,4.48863840103149,56.9230079650879,-5.69664287567139,3.43093514442444,57.0666656494141,-5.43046188354492,3.40443229675293,58.473014831543,-5.48987340927124,4.66533231735229,58.3694610595703,-5.16612005233765,2.36688876152039,49.2839813232422,5.31314182281494,3.19219017028809,46.8397331237793,5.11824417114258,4.16545295715332,46.8440971374512,5.14115619659424,4.33468341827393,48.3736190795898,4.74083375930786,0.508937060832977,46.9681167602539,5.79316377639771,0.502217352390289,49.8629951477051,5.73104858398438,5.70313215255737,45.5682716369629,-0.127191007137299,6.14905118942261,45.2268676757813,0.909955978393555,5.83846712112427,44.3852729797363,1.56467497348785,5.37825775146484,46.895393371582,-1.29640114307404,4.25761890411377,44.1189155578613,-0.763117015361786,7.27880954742432,50.8724212646484,-0.798126339912415,6.68353366851807,49.3247604370117,-1.0536345243454,6.16005086898804,49.5483131408691,-1.94401621818542,6.86691427230835,51.265064239502,-2.45111012458801,4.96109008789063,46.449836730957,4.62802600860596,5.02808284759521,47.667839050293,4.1308741569519,5.53708267211914,49.6380195617676,4.03002834320068,4.46608209609985,49.9669990539551,4.83955383300781,\n5.94960832595825,47.0691604614258,0.362407803535461,6.48950576782227,49.0330696105957,-0.268296957015991,6.3097038269043,48.253059387207,1.12767565250397,6.20942878723145,46.6569290161133,1.74234902858734,5.76492261886597,49.9179992675781,-2.65865802764893,6.17157793045044,51.7974472045898,-3.6365602016449,4.89619207382202,50.3520011901855,-3.80600094795227,2.45370006561279,50.8995170593262,-4.16592597961426,2.78574156761169,52.2776679992676,-4.72317218780518,5.22372245788574,52.0617218017578,-4.64406442642212,5.75057411193848,44.0617218017578,3.85488200187683,6.00133609771729,46.3558654785156,3.68154311180115,6.32964134216309,44.886531829834,2.16583490371704,5.0522313117981,59.3761291503906,0.142580911517143,5.63601207733154,59.9394836425781,-0.0290815383195877,5.05815505981445,59.9468002319336,0.339870452880859,5.20350742340088,58.9473190307617,1.15062999725342,6.21389818191528,58.8186149597168,0.991709470748901,5.55427598953247,60.0190963745117,-0.648190140724182,4.85060977935791,60.0962257385254,-0.205008938908577,6.28012418746948,61.3125953674316,-3.25320029258728,5.01990127563477,62.0096130371094,-3.58053207397461,5.4082088470459,62.0561714172363,-2.34191989898682,6.61399984359741,61.3304023742676,-2.17510962486267,3.59240055084229,62.8030700683594,-2.31959319114685,3.24620890617371,62.7719917297363,-3.06752300262451,3.27989220619202,58.4411926269531,3.45477151870728,2.94624018669128,55.8268890380859,5.22996759414673,4.4201488494873,55.4504318237305,4.97116231918335,5.11019134521484,58.0659942626953,3.06510710716248,4.59976577758789,60.4346237182617,-4.53228282928467,3.71103858947754,60.432430267334,-4.82212781906128,4.24048233032227,47.8875045776367,-2.74390602111816,2.2951455116272,48.7120323181152,-3.25419235229492,1.602987408638,57.3326644897461,-5.33708143234253,1.54593241214752,55.7688674926758,-5.29807567596436,1.80850923061371,58.7227096557617,-5.10714054107666,1.35066735744476,58.688549041748,3.52788400650024,1.20924663543701,56.2557487487793,5.11581087112427,2.70396065711975,60.468376159668,-4.69074726104736,\n0.87622195482254,49.2063636779785,-3.42336797714233,1.4183566570282,51.2010498046875,-4.23545169830322,3.29036021232605,59.3768653869629,2.29175066947937,5.26882553100586,58.8095779418945,2.18090462684631,1.35060226917267,54.3036766052246,-4.98019742965698,0.850216865539551,52.9374542236328,5.52145624160767,1.05006265640259,53.6734428405762,5.41406202316284,5.81344699859619,47.5758666992188,3.06518483161926,6.34982872009277,49.6443710327148,1.84685409069061,6.69955635070801,57.5995979309082,2.40108251571655,6.91256666183472,58.0321769714355,1.95568668842316,5.89234447479248,55.3229560852051,4.32070875167847,4.9299464225769,60.7205200195313,-0.881977498531342,5.80054426193237,60.4475479125977,-0.953298270702362,6.42415618896484,61.0218505859375,-1.17068159580231,5.42477989196777,61.6343116760254,-1.49424481391907,1.71520781517029,52.2933311462402,-4.67891263961792,3.61277961730957,55.2839317321777,-5.49603891372681,6.60325908660889,60.111686706543,-0.314645409584045,6.30694484710693,60.1349029541016,-0.980097889900208,6.87847661972046,60.386791229248,-1.18192577362061,6.22908735275269,59.5699081420898,0.323896825313568,7.30415058135986,59.9312591552734,0.435530573129654,7.05011034011841,58.1080017089844,1.25672173500061,7.22903156280518,58.2620811462402,1.2861168384552,6.80232667922974,58.9085731506348,0.908758163452148,8.05034351348877,59.3046455383301,1.03538930416107,8.31608581542969,58.6432113647461,1.17352378368378,8.15271186828613,60.8203582763672,-1.46462738513947,7.55289936065674,60.6605415344238,-1.94998788833618,7.96316814422607,60.3256072998047,-0.0219536330550909,7.12460422515869,60.7955284118652,-1.8724068403244,7.26642370223999,60.4079856872559,-0.402079552412033,6.96106004714966,54.9798698425293,2.91225099563599,7.3847861289978,57.1020774841309,1.53105282783508,6.33556509017944,53.1691551208496,2.24800658226013,6.38739442825317,51.7313346862793,1.9785293340683,6.99435949325562,52.3350715637207,-0.392119348049164,7.24284791946411,53.2762145996094,-0.646061599254608,1.09672713279724,54.6509094238281,5.66392612457275,\n3.91681504249573,54.1869354248047,5.21350336074829,3.56772255897522,53.3176498413086,4.87186765670776,4.99570178985596,53.2408180236816,4.15648555755615,5.41516971588135,54.0682334899902,4.48723363876343,2.40486001968384,53.4610290527344,5.10914897918701,2.67556929588318,54.3597373962402,5.49190044403076,6.34653997421265,53.9616470336914,3.4741063117981,6.76198863983154,54.0528297424316,2.51639223098755,7.25544500350952,54.9252510070801,1.87526834011078,6.03137254714966,51.6402435302734,3.89728951454163,2.19503688812256,52.4480400085449,5.4863452911377,6.55881500244141,54.1315307617188,1.74270081520081,6.97313547134399,54.627758026123,1.31097435951233,5.82921028137207,53.250675201416,3.49645662307739,5.00494384765625,51.803596496582,4.69906425476074,3.32392287254334,52.107292175293,5.27886629104614,2.70612764358521,50.6459274291992,5.35879135131836,8.95623588562012,59.8676338195801,0.398345559835434,9.21463108062744,60.5177345275879,-1.11962747573853,0.429187029600143,44.5688095092773,5.94135522842407,3.39157700538635,43.7743873596191,5.51495599746704,6.48670291900635,60.4013862609863,-4.08903360366821,6.13385438919067,60.3698768615723,-3.99188446998596,6.88159799575806,60.9103698730469,-2.81267642974854,7.23734951019287,60.6882858276367,-3.04816651344299,3.2792387008667,54.0415382385254,-5.19849443435669,7.69188165664673,60.8041801452637,-3.01215386390686,3.81181836128235,62.3832054138184,-1.41991281509399,7.63446426391602,60.5070648193359,-4.00190258026123,7.02769565582275,59.5692939758301,-4.86050128936768,5.98615837097168,59.3464622497559,-4.88793516159058,4.43807315826416,59.2152633666992,-5.17468309402466,7.48376131057739,53.6780166625977,-3.37918519973755,6.3647928237915,54.0280265808105,-4.5154709815979,7.6963939666748,53.3148078918457,-1.19267594814301,4.89050340652466,47.2557334899902,-1.76517140865326,2.20206737518311,44.176586151123,-2.11065602302551,5.20034837722778,54.7842864990234,-5.57468938827515,5.18321180343628,53.9617309570313,-5.2604660987854,7.08188724517822,56.3239288330078,-5.25308752059937,\n7.30654048919678,54.5502128601074,-4.35706996917725,6.73623943328857,54.8074378967285,-5.11946773529053,6.52136135101318,56.7480926513672,-5.08606290817261,0.548441827297211,51.1162757873535,5.59805917739868,6.73783445358276,50.6204032897949,-0.270794987678528,7.66648387908936,53.5671539306641,-1.28985047340393,7.40937566757202,53.744556427002,-0.876519441604614,6.90980339050293,54.2402229309082,0.442960977554321,7.72015905380249,57.7975692749023,1.40894997119904,7.5026683807373,57.5535583496094,1.41864967346191,9.26576328277588,60.6478004455566,-2.75207567214966,7.11589050292969,57.489013671875,-5.33865261077881,6.54909181594849,58.3688354492188,-5.29395627975464,7.30115747451782,58.3183250427246,-5.20100736618042,3.58825278282166,44.1539001464844,-1.20879817008972,0.478152990341187,43.5242080688477,5.80299520492554,8.5999231338501,60.3367500305176,-3.81362628936768,7.92004871368408,59.3618507385254,-4.69769620895386,7.58691596984863,54.1857376098633,-3.51837372779846,7.62936019897461,54.9134559631348,-3.71389770507813,7.84505176544189,54.5696830749512,-3.6901912689209,7.6837592124939,54.8446426391602,-4.42535209655762,7.68500471115112,55.2548599243164,-4.36773157119751,7.85799980163574,53.9139366149902,-1.27666687965393,7.55024337768555,54.6720161437988,-2.64854741096497,7.51451921463013,54.1958045959473,-1.45155954360962,7.09713840484619,55.3094367980957,0.930883824825287,7.52256345748901,56.1265335083008,1.25037324428558,7.63995981216431,55.4534378051758,1.48735105991364,7.42369079589844,54.8798332214355,1.05067873001099,7.22643661499023,54.4748229980469,-0.209205031394959,7.36536359786987,54.1761131286621,-0.0283166989684105,7.55160713195801,54.0616989135742,-0.807652056217194,7.26050710678101,54.3323860168457,-1.03370535373688,7.84417057037354,56.9216651916504,1.50173914432526,7.91579103469849,57.1935577392578,1.46395790576935,9.0794734954834,58.5038986206055,1.08123564720154,9.6045093536377,59.3718109130859,0.532063603401184,9.45469379425049,59.7166938781738,0.652444005012512,8.81791400909424,58.6277008056641,1.40934801101685,\n7.93373203277588,57.0942649841309,1.26238405704498,8.18951320648193,57.4128837585449,1.25242710113525,8.03991603851318,57.4667205810547,1.44550204277039,9.84859180450439,60.0270957946777,-0.901974380016327,9.72230529785156,60.4120292663574,-0.907228112220764,7.11321926116943,54.9401054382324,0.416695415973663,7.46061944961548,56.4794769287109,-5.38321113586426,7.07095384597778,56.8105850219727,-5.30281114578247,7.44288110733032,56.8303985595703,-5.44225835800171,7.83499431610107,56.8037376403809,1.31190943717957,7.75429630279541,56.2459411621094,1.5331916809082,9.8271369934082,60.3333282470703,-2.51816701889038,9.66667366027832,60.7007904052734,-2.59547328948975,9.28712558746338,60.169864654541,-3.73113465309143,9.07193183898926,60.4436950683594,-3.90585684776306,7.52197933197021,57.4596366882324,-5.56169700622559,7.78535032272339,58.3495597839355,-5.40928411483765,8.55235385894775,59.238410949707,-4.61119842529297,8.28533267974854,59.4034004211426,-4.85664129257202,8.03475379943848,58.2761001586914,-5.13257741928101,7.84158325195313,57.5565795898438,-5.27125883102417,7.61331510543823,56.6373863220215,-5.00607490539551,7.65373134613037,56.9084320068359,-5.08063411712646,5.80713796615601,43.9371109008789,1.50510704517365,7.3530068397522,55.691593170166,-2.29376339912415,8.03426742553711,56.1774253845215,-3.71008014678955,8.29852867126465,57.0403785705566,-4.66321849822998,7.24841451644897,56.5388069152832,-0.523982167243958,7.28487110137939,56.0086479187012,0.525032520294189,7.17531681060791,54.8657188415527,-1.1021511554718,7.25835037231445,54.8035736083984,-0.32792392373085,8.51945972442627,56.7277908325195,0.659157574176788,8.87804126739502,56.7104835510254,0.821199893951416,9.55239772796631,57.593677520752,1.09148192405701,10.2546634674072,56.7690773010254,0.844668745994568,10.179328918457,58.933349609375,0.649220526218414,10.5340662002563,59.5311012268066,-0.683946847915649,9.42648220062256,56.3423805236816,0.382613807916641,10.9501304626465,55.9625473022461,0.205978751182556,7.95104789733887,56.6816635131836,0.796007633209229,\n8.44216823577881,54.4834175109863,-1.36270153522491,7.08089637756348,56.0021209716797,-1.23660385608673,7.17018461227417,55.9088592529297,-1.5865033864975,8.29757881164551,54.4494361877441,-1.74737429618835,8.76838493347168,55.1770248413086,0.562280178070068,9.76492881774902,55.9499664306641,0.769929647445679,8.15985107421875,56.3417167663574,0.103748373687267,8.7318811416626,56.3046493530273,-4.64982652664185,8.0565242767334,55.6012763977051,-3.69083595275879,8.36456489562988,54.4798698425293,0.0324799977242947,9.45730209350586,55.2612190246582,-4.87259960174561,8.68892574310303,54.3544425964355,-3.84225082397461,8.45584487915039,54.4519424438477,-2.33978295326233,7.58108425140381,54.6267395019531,-1.56997954845428,10.803614616394,57.9473037719727,0.557450473308563,11.1893653869629,58.5272026062012,-0.730563282966614,11.3919620513916,56.9577827453613,0.353395909070969,11.2849111557007,58.487174987793,-3.05534601211548,10.6853227615356,59.2101516723633,-3.341463804245,11.0728950500488,59.0761032104492,-2.14175462722778,11.6487598419189,58.0217895507813,-1.82899582386017,10.1849002838135,60.1414604187012,-2.45615744590759,10.5328998565674,58.2507591247559,-3.75378155708313,9.85113716125488,58.6626205444336,-4.17732286453247,8.92834758758545,59.1785507202148,-4.57636260986328,9.48854160308838,60.0228309631348,-3.71386504173279,9.38311672210693,57.8990173339844,-4.64321899414063,9.73202896118164,57.411376953125,-4.57831954956055,8.3504810333252,57.673942565918,-5.06515073776245,11.753791809082,57.5105323791504,-0.819628119468689,13.5520429611206,50.6597862243652,-3.62653398513794,14.8387975692749,49.4975662231445,-3.12753367424011,14.3257875442505,49.6796455383301,-2.76960182189941,13.0302572250366,50.5948715209961,-2.32351136207581,11.7298135757446,51.3138999938965,-1.85474872589111,10.1291513442993,52.8051300048828,-1.33680272102356,10.0141677856445,52.6653289794922,-1.71004021167755,11.653247833252,51.2362632751465,-2.18375134468079,13.6517715454102,50.8126182556152,0.0197342503815889,12.7338953018188,51.3184585571289,0.80093240737915,\n12.4508266448975,50.7762031555176,-0.522256553173065,13.5613031387329,50.4516372680664,-0.696429312229156,11.3147611618042,51.5529403686523,-0.387636542320251,11.6386957168579,52.1857452392578,0.926828563213348,9.98794555664063,53.9091873168945,0.881002962589264,14.0697689056396,51.4840431213379,0.575597643852234,13.4233169555664,52.122631072998,1.29878723621368,14.883472442627,51.6699066162109,0.104338467121124,14.3454475402832,51.9897499084473,0.195351988077164,14.5005655288696,51.2399139404297,0.178431913256645,14.8733034133911,50.7667045593262,0.185657918453217,14.8942441940308,52.1328659057617,0.0421440452337265,14.2605962753296,52.5496520996094,0.197932198643684,14.5038642883301,51.3617706298828,-4.07377243041992,15.737006187439,50.1784324645996,-3.56298232078552,15.3349475860596,50.0099906921387,-3.57508039474487,14.0185060501099,50.9000205993652,-4.1680588722229,16.6143341064453,49.0891990661621,-2.94213104248047,15.6112413406372,48.932746887207,-2.79887890815735,15.3581924438477,48.9271278381348,-2.22846102714539,14.2779426574707,50.1965675354004,-0.176210388541222,15.2065629959106,49.5023574829102,-0.178400054574013,18.8974895477295,50.898624420166,-0.478858798742294,18.1767578125,51.4938545227051,-0.980138778686523,17.8693199157715,51.8677978515625,-0.356124639511108,18.3772220611572,50.9069023132324,0.814730048179626,15.2123289108276,48.9255409240723,-1.90760374069214,15.7901344299316,47.974178314209,-1.51748132705688,15.6763391494751,48.4058074951172,-0.455212146043777,14.7757940292358,49.2104644775391,-1.00625038146973,16.6845760345459,50.6124000549316,1.07724034786224,15.471227645874,49.734935760498,0.572513163089752,17.8297843933105,50.6904792785645,0.679857194423676,17.0080585479736,52.2174072265625,0.0537054538726807,15.982780456543,51.9721145629883,0.524463653564453,19.9009113311768,49.6782341003418,0.529042065143585,19.0464401245117,49.4485168457031,1.63235700130463,19.8845977783203,47.4652900695801,2.17451047897339,18.2908992767334,48.4863052368164,2.13154292106628,19.1496639251709,46.7251663208008,2.3065185546875,\n20.3633670806885,48.2683410644531,1.22568118572235,20.227331161499,49.1841583251953,-0.843863546848297,21.2155895233154,48.3137245178223,-0.224301800131798,21.1416397094727,48.1011810302734,-1.18668389320374,19.9603595733643,49.1679573059082,-1.56102073192596,20.4522113800049,47.2690353393555,1.70770359039307,20.674388885498,47.2088775634766,1.5593044757843,20.6281108856201,48.3302116394043,0.792369723320007,21.6778507232666,47.1973571777344,0.721642732620239,21.0242614746094,48.3415603637695,0.267527908086777,20.9462394714355,48.3692169189453,0.526706457138062,21.4729061126709,47.2075042724609,1.10189342498779,21.5099945068359,46.11474609375,-1.94946956634521,20.4426021575928,47.4525527954102,-2.20505023002625,20.9361572265625,47.7230949401855,-1.9036910533905,22.1175422668457,46.4725112915039,-1.48421800136566,19.5445919036865,44.3666687011719,0.688282608985901,19.5302467346191,44.692985534668,1.52009499073029,17.8531379699707,46.0471343994141,1.05797076225281,17.7322750091553,45.8862266540527,0.195022255182266,20.5843486785889,45.6073188781738,2.28768253326416,20.9611434936523,45.4621658325195,2.34939908981323,22.9492454528809,44.9821395874023,1.39771020412445,22.6773262023926,44.8726272583008,1.98021054267883,22.6979026794434,44.490119934082,-1.13779997825623,23.2042541503906,44.9444885253906,-0.658016979694366,19.9612426757813,44.5874671936035,-1.609126329422,20.6078147888184,45.28662109375,-2.0672402381897,21.3356609344482,44.4521217346191,-1.30426454544067,21.6464214324951,43.5439834594727,-0.783927083015442,19.5299625396729,44.2604904174805,-0.854487121105194,20.8051986694336,43.4793281555176,-0.203381508588791,20.7594833374023,43.5421180725098,0.38550791144371,19.4293518066406,44.3882141113281,-0.0389625653624535,20.6675872802734,43.4807777404785,1.03413915634155,20.6311225891113,43.5597991943359,1.6413449048996,21.0593681335449,44.0559005737305,2.13398694992065,20.1234664916992,45.3325843811035,2.12659621238709,23.3103694915771,42.2877006530762,3.15818119049072,23.8232288360596,42.6492958068848,3.02135586738586,\n22.3560600280762,44.6905479431152,2.43583106994629,21.6826972961426,44.3796463012695,2.56239581108093,23.9890842437744,42.8250274658203,2.72608661651611,24.3131427764893,43.0077095031738,2.03234481811523,24.4801712036133,42.9811019897461,0.232601284980774,24.1847267150879,42.6429634094238,-0.0108417542651296,22.0007915496826,43.8926124572754,-0.990081965923309,23.3663368225098,42.3684387207031,-0.0917138755321503,22.9723930358887,42.1976127624512,-0.0821428894996643,22.3297519683838,42.1772079467773,0.570432305335999,22.2577972412109,42.2479438781738,1.11369383335114,22.3680763244629,42.0717086791992,2.5445351600647,22.6504745483398,42.0502853393555,2.88002109527588,21.2856063842773,44.1733818054199,2.28947234153748,19.8208160400391,48.7657203674316,-2.06408476829529,19.4979515075684,48.5461578369141,-2.30182480812073,18.0380630493164,46.2183685302734,-2.37314629554749,19.1660690307617,46.720775604248,-2.66062784194946,16.7683372497559,47.6135559082031,-2.52141618728638,18.2744197845459,47.821891784668,-2.88349103927612,23.1817455291748,42.2414321899414,3.10395359992981,23.5672283172607,41.5250053405762,3.27665758132935,23.7341976165771,41.6387405395508,3.36136937141418,24.3066692352295,41.2696952819824,0.388287603855133,24.0551853179932,41.0985374450684,0.514059066772461,23.5084838867188,40.8745460510254,1.19112884998322,23.3923263549805,40.9361343383789,1.66240167617798,23.0847988128662,41.0231781005859,2.68329548835754,23.1890926361084,41.2674446105957,3.08469200134277,24.8623371124268,42.1539611816406,2.3654510974884,24.3057193756104,41.9787712097168,3.14068388938904,24.0696849822998,41.8692207336426,3.21461319923401,10.7589426040649,52.0450668334961,-3.98465609550476,12.4153480529785,51.3634567260742,-3.81533980369568,11.8754205703735,51.4325981140137,-2.54589605331421,10.2960405349731,52.7441749572754,-2.20458698272705,15.9318618774414,47.9740142822266,-2.05650401115417,16.1347522735596,47.9769058227539,-2.82994937896729,16.5880832672119,47.4521827697754,-1.92803871631622,17.7106666564941,45.9340896606445,-1.63855528831482,\n23.7912216186523,40.9780197143555,0.784069895744324,22.7547168731689,42.299747467041,0.201494812965393,13.0838747024536,53.3122024536133,0.741282343864441,12.3147010803223,53.0580444335938,1.34236586093903,13.695728302002,52.3916130065918,0.622015416622162,10.765793800354,54.8451499938965,1.13273775577545,11.7384357452393,52.7919425964355,-5.03997898101807,12.9520015716553,51.7299842834473,-4.41759347915649,17.6725082397461,48.8319664001465,-3.19804859161377,17.9552898406982,48.3816871643066,-2.98082900047302,16.5986347198486,49.4662818908691,-3.20961785316467,12.8604173660278,52.8880577087402,-4.46232604980469,12.285062789917,56.0400619506836,-1.09787619113922,12.2836780548096,55.786750793457,-0.657949447631836,13.1637325286865,54.8574714660645,-0.593619048595428,13.5549449920654,54.6908378601074,-0.878011286258698,14.9113826751709,53.4512100219727,-0.874684035778046,14.9332523345947,52.9047508239746,-0.505171656608582,13.9861345291138,49.8578948974609,-1.92976760864258,16.4741477966309,47.3813934326172,-0.750219583511353,16.3961734771729,47.5242347717285,-1.21755838394165,16.3241100311279,47.3382835388184,-0.29325008392334,17.6349182128906,46.0498580932617,-0.756506145000458,10.711404800415,56.3316230773926,-5.2165961265564,11.6953134536743,57.2661972045898,-4.08915567398071,12.385479927063,56.5232162475586,-4.31653118133545,11.6108388900757,55.5096321105957,-5.22905683517456,13.9158315658569,54.9912452697754,-3.89582562446594,13.9274816513062,53.9880409240723,-3.60703206062317,12.9425249099731,53.9209365844727,-4.30237054824829,12.3398990631104,54.6189117431641,-4.90633010864258,15.2897844314575,53.4183158874512,-3.03394627571106,15.2687854766846,52.6660461425781,-3.28293323516846,18.1716041564941,49.6376266479492,-2.92257332801819,18.360689163208,49.327465057373,-2.69066572189331,18.3403129577637,48.6247024536133,-2.75979685783386,14.9622840881348,52.0302391052246,-4.03225135803223,16.8739185333252,51.6703147888184,-2.71794319152832,16.6322479248047,51.207103729248,-3.02567052841187,14.4114046096802,55.0481872558594,-2.51585531234741,\n15.3617715835571,53.7503852844238,-1.84661114215851,22.0626430511475,47.1380500793457,0.312653362751007,23.082405090332,45.2025375366211,1.05454277992249,23.2344989776611,45.1784515380859,0.212265536189079,22.2545776367188,46.898063659668,-0.650525093078613,24.5121994018555,43.0798530578613,1.89935684204102,24.700626373291,43.029182434082,1.0951064825058,22.3342418670654,44.1472129821777,-0.985363841056824,23.7739334106445,42.4582595825195,0.0253795459866524,25.094820022583,42.0181274414063,0.63675594329834,24.8828163146973,41.7729644775391,0.360459506511688,18.3888912200928,48.079345703125,-2.7398579120636,19.6137313842773,46.7993927001953,-2.47372817993164,11.6554641723633,55.3646430969238,0.613879203796387,10.4787845611572,54.0332679748535,-5.02370643615723,9.56866645812988,53.1961708068848,-3.99867963790894,9.47764873504639,53.225643157959,0.15219347178936,9.63113117218018,53.2664108276367,-2.20873069763184,9.56535720825195,53.3620910644531,-1.31098282337189,9.49947357177734,53.1097564697266,-1.66624176502228,11.5917978286743,57.9705467224121,-2.84412407875061,11.9037704467773,57.2813911437988,-1.64989614486694,10.819263458252,57.9833908081055,-3.71461486816406,12.0918092727661,55.9841041564941,-0.678950130939484,11.7332038879395,55.7060317993164,-0.00828365050256252,11.9036540985107,55.4671478271484,-0.00489721540361643,11.692066192627,56.0705604553223,0.0792707055807114,12.0020923614502,56.5346641540527,-0.646912157535553,12.0133199691772,56.3076477050781,-1.27933478355408,12.1341848373413,57.7180938720703,-3.07127356529236,12.8935451507568,56.995174407959,-3.0251157283783,11.9166917800903,57.0560073852539,-1.75054311752319,12.5898990631104,56.586841583252,-1.55191695690155,13.8073215484619,54.9048728942871,-1.21922385692596,13.5632257461548,53.557258605957,0.536115407943726,16.1892242431641,50.5962142944336,-3.3828821182251,12.4069385528564,54.8388900756836,-0.0730054900050163,16.3304214477539,52.7708168029785,-0.389918386936188,15.5185346603394,52.4953842163086,0.102539211511612,16.9141445159912,52.4776306152344,-1.37935245037079,\n18.3628005981445,50.3478164672852,-2.12511992454529,19.1434917449951,50.0413246154785,-1.63698732852936,19.0610008239746,49.695125579834,-1.77505218982697,18.2138481140137,49.9208297729492,-2.24553346633911,16.8566780090332,47.8757438659668,1.42759299278259,18.0488719940186,48.6800994873047,2.13007593154907,16.5044593811035,47.3519020080566,0.528880298137665,12.9402542114258,50.571460723877,-1.74043500423431,22.1152286529541,41.9466590881348,2.25192022323608,20.4308776855469,49.204704284668,-0.211134687066078,22.0665168762207,46.7259864807129,-0.941627204418182,21.0119819641113,47.8783187866211,-1.3603481054306,23.1058826446533,44.9971618652344,-0.0795651748776436,24.6004333496094,42.9618148803711,0.871560215950012,25.3450222015381,42.1090126037598,1.43619477748871,25.2234687805176,42.0636825561523,1.21761846542358,19.0784664154053,48.2057571411133,-2.72225308418274,19.8962860107422,47.0656585693359,-2.43542766571045,20.9766960144043,45.5458106994629,-1.92559599876404,24.6982593536377,40.952953338623,0.358907043933868,24.1927070617676,40.5977745056152,0.382595211267471,25.3028049468994,39.9894943237305,0.288388758897781,24.8059501647949,39.6957168579102,0.346591711044312,25.1876049041748,41.3445816040039,0.634206295013428,25.3709888458252,41.4191017150879,0.950496912002563,25.8578147888184,40.4478416442871,0.830263614654541,25.7993278503418,40.3204307556152,0.513917446136475,25.7801952362061,38.3923225402832,0.405306428670883,26.1005973815918,38.6033821105957,0.414937376976013,25.4721603393555,38.2417297363281,0.933774352073669,26.3225708007813,37.9900283813477,0.540673732757568,26.0681343078613,37.7213554382324,1.00822830200195,26.9082546234131,38.2915687561035,0.749213039875031,26.5941677093506,38.8570823669434,0.646034121513367,24.4965305328369,39.4820251464844,0.818610429763794,26.4576644897461,37.7728614807129,0.577100872993469,27.0060615539551,38.1100616455078,0.721827626228333,26.7886180877686,37.0538597106934,0.865942239761353,26.3225383758545,37.6534957885742,1.00922620296478,26.8767929077148,37.1728324890137,0.468527495861053,\n27.3362140655518,37.5333251953125,0.568650424480438,26.9089126586914,36.9463882446289,0.83524751663208,27.2755012512207,36.5016174316406,0.330541372299194,27.1422691345215,36.4382171630859,0.698461651802063,27.4169120788574,37.3746147155762,0.559433698654175,27.6172657012939,36.7529067993164,0.433391004800797,27.6500587463379,35.8810615539551,0.272548139095306,27.4733486175537,35.7689361572266,0.551467180252075,27.1704921722412,36.2463798522949,0.662050426006317,27.6621761322021,36.5758056640625,0.369325369596481,27.8887329101563,36.0022964477539,0.326096922159195,27.7101459503174,35.7865028381348,0.795266091823578,27.417350769043,36.4184913635254,1.01918590068817,27.7454051971436,36.5266799926758,0.829174995422363,27.9386329650879,35.9596900939941,0.679637730121613,27.4934635162354,37.3412284851074,0.980259478092194,27.0495414733887,37.0782127380371,1.16021084785461,27.7116069793701,36.7087478637695,0.851239860057831,26.650333404541,37.6419792175293,1.37471866607666,27.4007320404053,37.5071411132813,1.03993594646454,27.0318088531494,38.0435752868652,1.17184197902679,26.4400997161865,37.4421005249023,2.04593300819397,26.6612987518311,37.5791244506836,1.56387555599213,27.5257396697998,36.7985382080078,1.59476542472839,27.252779006958,36.6252250671387,2.00045323371887,27.1135292053223,38.1128196716309,1.73599755764008,27.8796730041504,37.1851119995117,1.79905617237091,27.3627796173096,36.5155220031738,2.01364994049072,27.9746055603027,35.7752990722656,1.58363437652588,27.7661838531494,35.6817970275879,1.94547843933105,28.3251419067383,36.1039810180664,1.7449312210083,27.9955158233643,36.9921951293945,1.80444490909576,28.4029026031494,34.9839820861816,1.58109271526337,28.1856861114502,34.848575592041,1.88748633861542,27.7915382385254,35.4960746765137,1.9382655620575,28.4168186187744,35.9179153442383,1.75137233734131,28.6992263793945,35.1313018798828,1.7256453037262,28.3781414031982,34.8804969787598,2.25901389122009,27.9310855865479,35.6697311401367,2.39866852760315,28.6852798461914,35.0521774291992,2.21204161643982,28.3788299560547,35.8418731689453,2.34064173698425,\n28.2824611663818,36.0258941650391,2.37827920913696,27.9731998443604,36.9341583251953,2.44280982017517,27.471607208252,36.6702003479004,2.49169683456421,26.5937404632568,37.5661163330078,2.55073118209839,27.8806591033936,37.1366653442383,2.46509552001953,27.0677833557129,38.1636085510254,2.43924880027771,26.1258983612061,37.3881416320801,3.04604911804199,26.5572929382324,37.5719413757324,2.62185740470886,27.3054351806641,36.6506423950195,2.89670968055725,26.9249095916748,36.5646018981934,3.28057646751404,26.9879112243652,38.1367683410645,2.92280745506287,27.6747379302979,37.1117057800293,3.17924690246582,27.7615966796875,36.9150314331055,3.23563146591187,28.2383708953857,35.9730453491211,3.32715606689453,27.871862411499,35.6653060913086,3.07638382911682,27.5263328552246,35.4128036499023,3.39707732200623,28.3017101287842,34.8627967834473,3.21868848800659,27.9842147827148,34.7188110351563,3.48127365112305,28.3142108917236,35.7948036193848,3.34757208824158,28.5679912567139,34.9831886291504,3.40694642066956,28.1073131561279,34.7972373962402,3.87777209281921,27.6106281280518,35.5863075256348,3.86808156967163,28.4313812255859,34.9209785461426,3.87717008590698,28.1370372772217,35.7406539916992,3.9042637348175,27.0665016174316,36.4050979614258,3.31043982505798,27.510648727417,35.5919876098633,3.40624260902405,27.0221843719482,36.6047554016113,3.79309582710266,27.5394611358643,36.8876075744629,3.83840227127075,28.0492992401123,35.9131050109863,3.90735578536987,26.6743221282959,38.1594886779785,3.67190909385681,26.1993770599365,37.6065101623535,3.60492968559265,27.4188442230225,37.0833053588867,3.8506007194519,26.3732204437256,38.1710357666016,3.81811428070068,26.1211948394775,37.6256675720215,3.729327917099,26.3689670562744,38.1229438781738,4.14238786697388,26.0806045532227,37.6261596679688,3.831378698349,25.6204929351807,37.5335235595703,4.13789939880371,26.5901908874512,36.8493919372559,4.29961729049683,26.0924530029297,36.7544097900391,4.50640773773193,26.8835201263428,37.3182640075684,4.58951425552368,26.2052230834961,36.6018562316895,4.58425235748291,\n27.0373764038086,36.1325798034668,4.5937819480896,26.5271606445313,36.0083427429199,4.82670307159424,27.3855781555176,35.2786750793457,4.88182163238525,27.0250186920166,35.1469802856445,5.07152080535889,26.6071300506592,35.8096046447754,4.84630966186523,27.3304958343506,36.2740478515625,4.92522811889648,27.5788135528564,35.4574508666992,5.12497615814209,27.0628986358643,35.2529602050781,5.45621109008789,26.5958919525146,36.0889739990234,5.29514455795288,27.0041675567627,36.2450065612793,5.42881679534912,27.3649311065674,35.4346160888672,5.50301694869995,26.1548156738281,36.876579284668,5.06085157394409,25.5146293640137,37.8111763000488,4.68628072738647,26.5431079864502,37.3230209350586,5.13250923156738,25.9985046386719,38.1869125366211,4.74417495727539,25.8601264953613,38.4725189208984,4.65872764587402,25.379301071167,38.041332244873,4.60675239562988,24.8795471191406,38.6019477844238,4.33086013793945,24.8324947357178,38.3304977416992,4.05487537384033,25.2847557067871,37.7632865905762,4.32127714157104,24.2327289581299,39.4822654724121,4.69844198226929,24.5814819335938,39.0382881164551,4.36362171173096,24.5726547241211,39.3343391418457,4.62598991394043,24.3039608001709,39.6546897888184,4.67785024642944,24.988748550415,38.6693725585938,4.54520559310913,23.3804588317871,38.7108688354492,4.23522806167603,24.0566806793213,38.8694267272949,4.58743762969971,23.7426376342773,38.347526550293,5.05098819732666,23.1989231109619,38.1966209411621,4.90307235717773,23.9056186676025,38.6819915771484,5.32080602645874,23.1362209320068,37.7694129943848,5.23940420150757,23.7630577087402,38.2689514160156,5.09673023223877,23.7901935577393,37.8711585998535,5.49010467529297,23.9807529449463,38.3736877441406,5.77518558502197,23.5361366271973,37.5237312316895,6.10112524032593,23.0678863525391,37.4616851806641,5.86668682098389,23.7495536804199,37.8985443115234,6.32710599899292,23.2475433349609,37.5488967895508,6.44766569137573,22.8217315673828,37.5743827819824,6.23360919952393,23.3994960784912,37.9742126464844,6.59987640380859,23.0917453765869,38.1686515808105,6.06353569030762,\n22.8577537536621,37.8568840026855,5.88337469100952,23.012113571167,37.7846069335938,6.54836654663086,23.4866733551025,38.3189849853516,6.24945592880249,23.0492630004883,38.7583618164063,5.61055421829224,22.8870544433594,38.4511108398438,5.23353481292725,23.5309505462646,38.9028968811035,5.63903284072876,23.0816688537598,38.9113273620605,5.43069744110107,22.903959274292,38.6048736572266,5.06207942962646,23.5692825317383,39.0464859008789,5.50390243530273,23.1787662506104,39.5135841369629,4.73982095718384,22.9653015136719,39.0761489868164,4.45135879516602,23.7099552154541,39.643383026123,4.94727754592896,23.1316452026367,39.6058540344238,4.39698171615601,23.2359008789063,39.7697334289551,4.56437253952026,23.8059616088867,39.9706344604492,4.65126800537109,22.8236141204834,40.5319900512695,3.22857236862183,23.2926731109619,40.7458877563477,3.48519134521484,23.3760948181152,41.0617523193359,3.17902445793152,23.8505458831787,41.1859550476074,3.43207764625549,23.7036972045898,41.0978317260742,3.33670973777771,23.6273307800293,40.8063163757324,3.54599738121033,23.8023815155029,40.8397178649902,3.72936797142029,23.864990234375,40.3513641357422,0.763435900211334,26.0925273895264,37.3577766418457,2.46653962135315,25.1522541046143,38.3267784118652,2.33084297180176,24.2588024139404,41.0395889282227,3.48043417930603,24.0651969909668,40.6324920654297,3.8392653465271,25.5185146331787,41.4591979980469,1.35679078102112,25.653772354126,41.5190391540527,1.6309654712677,25.9954280853271,40.7029228210449,1.54055678844452,25.8710231781006,40.5874977111816,1.27703082561493,26.0212421417236,40.74462890625,2.01458048820496,27.0484008789063,38.6537818908691,2.09933829307556,26.9103240966797,38.5200996398926,1.7544903755188,25.8416957855225,40.7435646057129,1.77245020866394,26.9660968780518,38.5935897827148,1.06645917892456,26.9331588745117,38.5272674560547,1.37321221828461,27.0709819793701,38.1172180175781,0.946545481681824,26.7614231109619,38.6556396484375,0.834723055362701,26.2733211517334,38.2470092773438,4.53884506225586,26.247579574585,38.6773948669434,4.36139822006226,\n25.8889560699463,38.9593696594238,4.29162311553955,26.644458770752,37.085147857666,5.1886773109436,26.9800910949707,37.083366394043,4.67532682418823,26.9348583221436,36.4211692810059,5.37596225738525,27.2591381072998,36.4549560546875,4.88776636123657,26.5561027526855,38.6125755310059,3.46944952011108,26.9216537475586,38.2097854614258,3.33311867713928,26.8688983917236,38.6367416381836,3.23217034339905,26.8833427429199,38.5423469543457,2.40460467338562,25.8038959503174,40.8302612304688,2.23062658309937,27.186222076416,38.2038040161133,2.10988116264343,26.2264060974121,38.6139297485352,3.97575259208679,24.5834217071533,41.3079147338867,3.27626419067383,24.8852310180664,40.5095405578613,3.75876450538635,25.4011859893799,40.703010559082,3.19607472419739,25.1859474182129,41.5070991516113,2.65838599205017,25.6491737365723,40.8988571166992,2.67949414253235,25.6597290039063,40.8177680969238,3.02372980117798,25.122709274292,42.1687240600586,2.20631384849548,25.4116878509521,41.62255859375,2.47316360473633,18.6652545928955,49.0274696350098,-2.71728754043579,18.8835830688477,49.226978302002,-2.30565118789673,19.0407295227051,49.365291595459,-2.1370997428894,19.2852344512939,48.3980293273926,-2.39254927635193,18.7893352508545,49.1171913146973,-2.36733150482178,19.810115814209,48.9623527526855,-1.67176043987274,23.0315437316895,40.908805847168,2.42655611038208,17.4380874633789,52.009090423584,-0.472728759050369,18.2713642120361,46.4929962158203,1.71778869628906,18.4343547821045,46.4846496582031,1.90123617649078,25.4729385375977,41.5712852478027,2.26492691040039,25.2154121398926,42.1438407897949,1.88524603843689,25.9024715423584,40.8810386657715,2.52124524116516,25.5942573547363,41.5684204101563,2.04436349868774,25.6221370697021,41.5452880859375,1.8506965637207,26.7846965789795,38.5711326599121,2.87396049499512,24.2903747558594,39.2600364685059,2.27982521057129,23.56321144104,40.0693969726563,1.32033908367157,25.473295211792,39.0388641357422,4.46131086349487,24.5607967376709,39.9796295166016,4.38208770751953,24.531322479248,42.9018974304199,0.635185480117798,\n25.1442775726318,41.987964630127,0.959975838661194,17.2868213653564,50.5812377929688,-2.79002928733826,16.9400997161865,49.9927215576172,-3.01769161224365,22.0741806030273,42.0393333435059,1.58685779571533,23.2135009765625,40.9123229980469,2.01415634155273,22.84716796875,40.2443580627441,2.65073156356812,8.43788433074951,58.2488059997559,-5.06908559799194,22.8853321075439,39.2420883178711,4.04786348342896,20.1032047271729,47.3067436218262,-2.26983070373535,27.8083629608154,35.7866897583008,0.489041179418564,26.5843887329102,37.6299057006836,1.49316310882568,26.2961502075195,37.4816856384277,1.81986856460571,26.9315319061279,38.103832244873,1.47392988204956,28.5599994659424,34.891429901123,1.93208718299866,25.8117942810059,37.4354019165039,3.28776264190674,26.7924709320068,38.083984375,2.64168548583984,28.3647136688232,34.7375602722168,3.58996033668518,25.9461326599121,37.5993270874023,3.64939475059509,25.5401210784912,37.5742073059082,3.82962965965271,27.3658351898193,35.2051162719727,5.2496919631958,23.554235458374,38.9353561401367,3.55190014839172,24.2575073242188,39.0156440734863,3.84028148651123,23.1536922454834,39.5488891601563,2.57533121109009,4.21192502975464,59.6024436950684,1.20553481578827,3.87961935997009,60.1460342407227,0.683042943477631,4.10153722763062,59.9645767211914,1.17759025096893,0.886674761772156,61.9747085571289,-3.56468176841736,3.29183435440063,59.7472953796387,1.7451434135437,3.74813604354858,61.0305709838867,-0.745337963104248,1.48638010025024,59.8282012939453,2.30086016654968,3.60340857505798,59.9398307800293,1.34661877155304,10.2422742843628,52.4975051879883,-0.000607038440648466,10.7581825256348,53.1050300598145,0.902385234832764,11.5402479171753,53.9515991210938,1.23755180835724,12.2552671432495,54.5028038024902,0.66737699508667,2.27535820007324,45.8665199279785,-2.50945448875427,3.42833256721497,45.5274429321289,-1.78932905197144,4.05796194076538,45.2589874267578,-1.40885472297668,4.60915374755859,44.9898719787598,-0.930403530597687,5.24233913421631,44.666446685791,-0.0869212374091148,\n-4.25761461257935,44.1189155578613,-0.763114631175995,-6.03212308883667,43.845027923584,2.36041808128357,-5.83559989929199,43.7850875854492,3.04091644287109,-5.30527019500732,44.0394668579102,0.50008898973465,3.50020909309387,43.5624122619629,5.78555011749268,5.09468984603882,43.6128387451172,4.61228513717651,4.20102405548096,43.5664901733398,5.19080018997192,4.9380989074707,44.0710144042969,-0.0603329986333847,6.03212308883667,43.845027923584,2.36041808128357,5.67244100570679,44.0079154968262,1.06051099300385,5.30527019500732,44.0394668579102,0.50008898973465,5.31654071807861,43.6553688049316,4.30916976928711,-7.75623239065986e-017,43.5387115478516,5.84340620040894,-5.27845695614815e-005,33.3007431030273,2.05420589447021,-8.22455185698345e-005,33.2863311767578,1.1840980052948,-3.33971934196597e-006,33.5464897155762,2.91496634483337,-0.0216123331338167,34.086296081543,4.46552181243896,-0.0209378246217966,36.0812835693359,5.91989803314209,0.0214357674121857,40.9322090148926,5.86233282089233,0.000330000009853393,43.5154304504395,6.32375717163086,0.0163603387773037,42.6093482971191,6.2076268196106,-7.75623239065986e-017,44.1866607666016,-2.73809719085693,-7.75623239065986e-017,43.0882110595703,-2.73308086395264,-7.75623239065986e-017,41.1124305725098,-3.11592626571655,-7.75623239065986e-017,38.7960510253906,-3.92060899734497,-7.75623239065986e-017,37.1677017211914,-4.09805393218994,-7.75623239065986e-017,35.5332374572754,-3.72692203521729,-7.75623239065986e-017,34.4388084411621,-2.60908508300781,-7.75623239065986e-017,33.9057998657227,-1.05233216285706,-7.75623239065986e-017,40.3612594604492,-3.36505818367004,-7.75623239065986e-017,40.9668617248535,-2.97700309753418,-0.021883649751544,34.9344253540039,5.3594274520874,0.0219422280788422,38.3137702941895,5.65279293060303,-2.06331396412907e-010,33.4434928894043,0.294710874557495,-7.75623239065986e-017,37.981876373291,-4.00933170318604,-7.75623239065986e-017,39.5786552429199,-3.6428337097168,0.016111932694912,36.9298248291016,5.72457551956177,-7.75623239065986e-017,36.350471496582,-3.91248798370361,\n0.814909756183624,33.3780937194824,2.90381836891174,0.932765364646912,33.2268142700195,2.00603055953979,1.22708594799042,33.3489303588867,2.8274359703064,2.75687050819397,36.3014907836914,5.40374183654785,3.5030312538147,36.7397232055664,5.33827209472656,1.25800061225891,34.1628379821777,4.3538761138916,2.02382874488831,34.1971549987793,4.5708212852478,3.47264003753662,40.8046646118164,5.64674711227417,4.18744277954102,40.976692199707,5.10877799987793,5.14671087265015,41.2881736755371,4.74443769454956,1.62547600269318,40.8144302368164,6.03513288497925,5.77770185470581,43.7241973876953,4.21209239959717,5.29317903518677,43.5865287780762,4.95701169967651,5.08752679824829,42.6901473999023,5.04328632354736,4.34233283996582,43.5406455993652,5.61575651168823,4.17514419555664,42.6370620727539,5.60567569732666,3.46193909645081,42.6481056213379,5.76057195663452,3.47859120368958,43.5532836914063,5.99722957611084,3.43521809577942,42.6959381103516,5.98223733901978,1.42388653755188,36.1319541931152,5.72585105895996,3.40727496147156,40.9113006591797,5.82985496520996,1.57330799102783,42.6485214233398,6.22713947296143,1.58111011981964,43.5325012207031,6.25356292724609,5.83585691452026,39.4078598022461,4.92551565170288,7.0226731300354,39.7226982116699,1.82336485385895,6.7251763343811,40.6819534301758,1.25125098228455,5.85274076461792,38.5889129638672,-1.75322699546814,5.36832094192505,36.3024063110352,-3.52680969238281,5.2288670539856,34.9626655578613,-3.10190200805664,4.03269290924072,35.0155754089355,-3.88902568817139,3.9318573474884,36.8120727539063,-4.35974216461182,6.22724580764771,36.1577568054199,-1.94789063930511,5.26579904556274,39.0528678894043,-3.06897306442261,5.97235774993896,33.2114219665527,-2.53228330612183,4.39906072616577,32.8998641967773,-3.10125088691711,1.36317300796509,33.4801025390625,-1.84129047393799,1.09546613693237,34.4467086791992,-2.68856716156006,2.17296242713928,33.0436477661133,-2.6845920085907,0.895317554473877,33.7961120605469,-1.49867248535156,2.15257096290588,35.343318939209,-3.91910099983215,3.68432450294495,39.1226043701172,-3.77887201309204,\n4.3945517539978,36.7878608703613,5.68821334838867,6.84634876251221,39.6859741210938,3.44338226318359,6.85820627212524,38.0219192504883,4.15880107879639,5.12256383895874,44.0850296020508,-0.662708640098572,5.07416200637817,43.1190338134766,-1.0839581489563,3.94724798202515,43.0901641845703,-1.78187119960785,4.41386079788208,44.1070861816406,-1.39090013504028,5.10807847976685,37.1020164489746,5.3708872795105,3.92581939697266,35.0171241760254,5.48070430755615,4.79267168045044,35.4377059936523,5.29423522949219,0.795329332351685,33.1274223327637,1.13712930679321,0.989203810691834,32.4371757507324,0.0683181583881378,3.06665587425232,32.5945091247559,4.35868883132935,1.45700669288635,40.4501914978027,-3.34169721603394,1.73029398918152,41.279899597168,-2.65792369842529,6.56671047210693,36.2014427185059,-1.10563158988953,5.91551494598389,41.8584251403809,0.232219994068146,6.44283723831177,41.8459777832031,1.37607705593109,6.03975009918213,40.6554222106934,-0.198134005069733,6.39490938186646,38.2275466918945,-0.677325069904327,6.91662931442261,39.7310752868652,2.6323184967041,1.83349096775055,37.0975799560547,-4.27652215957642,1.56641674041748,38.9513626098633,-3.91081118583679,3.50512456893921,40.6196136474609,-3.00334811210632,4.33383369445801,34.2510070800781,5.19123935699463,7.39133644104004,37.5306282043457,1.03786599636078,6.60190296173096,37.1033821105957,4.54294300079346,6.40375185012817,37.7048988342285,4.72016429901123,5.96765041351318,37.515453338623,5.11439895629883,5.89599943161011,36.2985420227051,5.10671806335449,7.37723875045776,38.6811370849609,3.11948132514954,5.88621282577515,44.0235214233398,0.907807588577271,5.91183280944824,43.0774421691895,0.39118629693985,6.32332801818848,43.0385551452637,1.20373177528381,6.07704210281372,43.9742317199707,1.41692113876343,6.26329946517944,43.8762435913086,2.40513157844543,6.55381441116333,42.9839019775391,2.05214643478394,6.02948570251465,42.7914657592773,3.67581176757813,2.12726092338562,43.1003265380859,-2.51028513908386,2.32953906059265,44.1899299621582,-2.3960747718811,\n6.52310943603516,41.8832359313965,1.90106904506683,5.01420450210571,40.7571983337402,-2.03109741210938,3.62999892234802,41.6226119995117,-2.09058308601379,5.07654714584351,41.8539772033691,-1.2768919467926,1.74856305122375,41.446159362793,-2.7613410949707,6.6666374206543,41.9713020324707,1.90715312957764,6.58360290527344,41.9356079101563,1.37447500228882,5.17393112182617,41.9912605285645,-1.28132402896881,3.6604700088501,41.7834548950195,-2.16389107704163,6.04397821426392,41.9637260437012,0.200174003839493,7.44213581085205,36.6004333496094,1.16769206523895,7.92302513122559,32.6457328796387,-0.528758764266968,6.8061203956604,39.5952911376953,1.30259311199188,4.5844669342041,37.8577919006348,5.41912412643433,5.30243349075317,38.3342590332031,5.31651830673218,7.53545331954956,34.2902183532715,-0.67992115020752,7.87608909606934,36.6887588500977,1.07710671424866,4.71270799636841,34.922981262207,5.38027715682983,3.87385606765747,33.8004875183105,5.0019474029541,3.42617630958557,33.1789436340332,4.64112043380737,7.63047361373901,37.6648254394531,1.16357791423798,7.10544157028198,32.4796295166016,-1.40169179439545,6.13836097717285,32.2281188964844,-2.17795896530151,4.79551649093628,31.888032913208,-2.52016830444336,2.77830147743225,31.6644554138184,-2.11853051185608,1.35830628871918,31.4676284790039,-0.379713386297226,1.24095845222473,31.4523525238037,0.875401377677917,1.28563523292542,31.4966773986816,1.93234145641327,1.7512218952179,31.7267608642578,2.83344197273254,7.01957130432129,38.2649040222168,3.67450428009033,3.44437503814697,34.0655136108398,4.96053028106689,2.73415112495422,33.0613288879395,4.6151008605957,2.04167532920837,32.9766311645508,4.17566061019897,1.34300255775452,32.4887313842773,2.8340015411377,0.986135005950928,32.4462547302246,2.02241730690002,1.01812207698822,32.2924423217773,1.13504540920258,2.62103891372681,32.0797386169434,3.92770099639893,6.25751686096191,42.8987197875977,3.04582142829895,6.04216051101685,43.8070030212402,3.22801208496094,3.08791637420654,38.6117668151855,5.49701166152954,1.54153025150299,38.4154205322266,5.78113460540771,\n1.47424268722534,36.9438629150391,5.92009258270264,2.93614816665649,37.1169738769531,5.52249622344971,3.87624454498291,37.4765739440918,5.41282415390015,1.34507369995117,35.0776443481445,5.1326584815979,2.54694414138794,35.6014175415039,5.09529161453247,1.67743611335754,38.09423828125,-4.09251165390015,3.87088441848755,38.1073760986328,-4.12555122375488,5.3170599937439,37.6776351928711,-3.29789161682129,6.11478328704834,37.1026458740234,-1.88399529457092,6.49657773971558,36.9398536682129,-0.926609635353088,5.82635879516602,39.6921195983887,-1.53293943405151,5.03867244720459,39.8959846496582,-2.59106040000916,3.54611992835999,39.9083786010742,-3.3810977935791,1.41777455806732,39.6628646850586,-3.62027859687805,5.54055452346802,40.7690849304199,-1.08194398880005,5.49603080749512,41.856201171875,-0.522336006164551,5.60895442962646,41.9774932861328,-0.54057502746582,5.49299716949463,43.0982360839844,-0.212771996855736,5.50438833236694,44.0542755126953,0.256163358688354,1.99303114414215,36.2204513549805,-4.09781169891357,3.98227500915527,35.9138259887695,-4.1243839263916,5.28660011291504,35.5719833374023,-3.34177470207214,7.44574117660522,35.3674850463867,-0.307296603918076,3.89755582809448,38.8450965881348,5.16094303131104,4.99822235107422,39.3205108642578,5.13173723220825,6.45847272872925,41.8677444458008,2.8785502910614,6.1457724571228,41.7619590759277,3.46116876602173,0.765930593013763,33.2394866943359,0.199775099754334,6.97464942932129,33.6411361694336,-1.5275069475174,3.34150075912476,35.9524040222168,5.1044602394104,2.66343665122986,34.5371398925781,4.79501628875732,6.34700489044189,39.5354843139648,4.11105871200562,5.79346656799316,41.582836151123,3.95337581634521,5.71175098419189,42.7628898620605,4.28730201721191,5.51993751525879,43.6509590148926,4.6083869934082,-0.815094530582428,33.3783988952637,2.90374517440796,-0.933338344097137,33.2275924682617,2.00579643249512,-1.2274729013443,33.3488845825195,2.82644486427307,-2.75376105308533,36.3082656860352,5.42266178131104,-1.25820052623749,34.1625328063965,4.3541407585144,\n-2.02781987190247,34.1995391845703,4.5605411529541,-3.47264003753662,40.8046646118164,5.64674711227417,-5.45668506622314,41.3959541320801,4.4593939781189,-4.58708095550537,41.1039962768555,4.92208909988403,-1.62547600269318,40.8144302368164,6.03513288497925,-5.4484691619873,42.7392082214355,4.79399728775024,-5.77770185470581,43.7241973876953,4.21209239959717,-5.29317903518677,43.5865287780762,4.95701169967651,-3.46193599700928,42.6480674743652,5.76056671142578,-3.47859120368958,43.5532836914063,5.99722957611084,-3.43521809577942,42.6959381103516,5.98223733901978,-1.42269885540009,36.1321029663086,5.72401666641235,-3.40727496147156,40.9113006591797,5.82985496520996,-1.57330799102783,42.6485214233398,6.22713947296143,-1.58111011981964,43.5325012207031,6.25356292724609,-3.66835045814514,36.4985618591309,5.38381719589233,-5.79204177856445,39.4113311767578,4.94667863845825,-7.0226731300354,39.7226982116699,1.82336485385895,-6.7251763343811,40.6819534301758,1.25125098228455,-5.85274076461792,38.419017791748,-1.75322699546814,-5.78756046295166,40.3183822631836,-1.30541849136353,-5.36832094192505,36.3024063110352,-3.52680969238281,-5.2288670539856,34.9626655578613,-3.10190200805664,-4.03269290924072,35.0155754089355,-3.88902568817139,-3.9318573474884,36.8120727539063,-4.35974216461182,-6.22724771499634,36.1577682495117,-1.94789123535156,-5.26579904556274,39.0528678894043,-3.06897306442261,-5.97415399551392,33.3147354125977,-2.52801775932312,-4.40103721618652,32.9904479980469,-3.09865427017212,-1.3545548915863,33.4727592468262,-1.85239458084106,-1.09546613693237,34.4467086791992,-2.68856716156006,-2.12230801582336,34.2555770874023,-2.91455101966858,-2.18139433860779,33.1093902587891,-2.68757343292236,-0.895317554473877,33.7961120605469,-1.49867248535156,-2.15257096290588,35.343318939209,-3.91910099983215,-6.99374008178711,38.9632263183594,1.23011684417725,-7.25476980209351,39.1672859191895,1.80217695236206,-3.68432450294495,39.1226043701172,-3.77887201309204,-7.03208589553833,38.9501571655273,3.54810166358948,-6.8550271987915,39.6846504211426,3.43728446960449,\n-6.85820627212524,38.0219192504883,4.15880107879639,-5.12256383895874,44.0850296020508,-0.662708640098572,-5.07416200637817,43.1190338134766,-1.0839581489563,-3.9472484588623,43.0901641845703,-1.7818706035614,-4.41386079788208,44.1070861816406,-1.39090013504028,-5.10153818130493,37.1012496948242,5.36786413192749,-4.79267168045044,35.4377059936523,5.29423522949219,-0.803963482379913,33.1355094909668,1.13691902160645,-0.989203810691834,32.4371757507324,0.0683181583881378,-3.37483978271484,34.7629356384277,5.09840297698975,-1.45700669288635,40.4501914978027,-3.34169721603394,-1.73029398918152,41.279899597168,-2.65792369842529,-6.56719064712524,36.2016067504883,-1.10578656196594,-5.91551494598389,41.8584251403809,0.232219994068146,-6.44283723831177,41.8459777832031,1.37607705593109,-6.03975009918213,40.6554222106934,-0.198134005069733,-6.20767879486084,39.6629943847656,-0.267598986625671,-7.23072290420532,39.1555252075195,2.58811020851135,-6.91986083984375,39.7321853637695,2.6331958770752,-1.83349096775055,37.0975799560547,-4.27652215957642,-1.56641674041748,38.9513626098633,-3.91081118583679,-3.50512456893921,40.6196136474609,-3.00334811210632,-6.30732154846191,31.5682735443115,-2.05524492263794,-7.18444347381592,31.8184814453125,-1.26540243625641,-4.33383369445801,34.2510070800781,5.19123935699463,-7.39133644104004,37.5306282043457,1.03786599636078,-6.60190296173096,37.1033821105957,4.54294300079346,-5.96765041351318,37.515453338623,5.11439895629883,-5.89599943161011,36.2985420227051,5.10671806335449,-7.37121391296387,37.4857940673828,1.52764689922333,-7.52424764633179,38.2782287597656,2.63499093055725,-5.88621282577515,44.0235214233398,0.64057981967926,-5.91183280944824,43.0774421691895,0.123958557844162,-6.32332801818848,43.0385551452637,1.20373177528381,-6.07704210281372,43.9742317199707,1.41692113876343,-6.26329946517944,43.8762435913086,2.40513157844543,-6.55381441116333,42.9839019775391,2.05214643478394,-6.02948570251465,42.7914657592773,3.67581176757813,-2.13525223731995,43.1005859375,-2.50097489356995,-2.32953906059265,44.1899299621582,-2.3960747718811,\n-6.52310943603516,41.8832359313965,1.90106904506683,-5.01420545578003,40.7571983337402,-2.03109574317932,-3.63676381111145,41.6236991882324,-2.08075261116028,-5.07654762268066,41.8539772033691,-1.27689123153687,-1.74856305122375,41.446159362793,-2.7613410949707,-6.6666374206543,41.9713020324707,1.90715312957764,-6.58360290527344,41.9356079101563,1.37447500228882,-5.17393159866333,41.9912605285645,-1.28132331371307,-3.66729927062988,41.7845306396484,-2.15401744842529,-6.04397821426392,41.9637260437012,0.200174003839493,-6.13817310333252,35.4240798950195,-2.05124926567078,-6.8061203956604,39.5952911376953,1.30259311199188,-3.89585041999817,37.3545570373535,5.36638212203979,-5.27055740356445,38.3294830322266,5.32894420623779,-5.80193281173706,38.5906982421875,5.0371413230896,-6.67177486419678,38.838623046875,4.1148796081543,-7.2227783203125,37.7002792358398,3.50522708892822,-4.71270799636841,34.922981262207,5.38027715682983,-3.87385606765747,33.8004875183105,5.0019474029541,-3.42617630958557,33.1789436340332,4.73271560668945,-7.10551691055298,32.4807167053223,-1.39546012878418,-6.13810777664185,32.2308578491211,-2.16028618812561,-4.80070447921753,31.8894596099854,-2.51312136650085,-2.77957320213318,31.6670188903809,-2.11773061752319,-1.35933804512024,31.468542098999,-0.381132036447525,-1.24095845222473,31.4523525238037,0.513632297515869,-1.28563523292542,31.4966773986816,1.93234145641327,-1.7512218952179,31.7267608642578,2.83344197273254,-7.01010322570801,38.2587280273438,3.45386791229248,-2.21827101707459,32.9870643615723,4.24474334716797,-1.34323954582214,32.4883155822754,2.83370661735535,-0.986135005950928,32.4462547302246,2.02241730690002,-1.01812207698822,32.2924423217773,1.3158106803894,-2.62103891372681,32.0797386169434,3.92770099639893,-6.25751686096191,42.8987197875977,3.04582142829895,-6.04216051101685,43.8070030212402,3.22801208496094,-3.0857834815979,38.6119651794434,5.49794054031372,-1.54153025150299,38.4154205322266,5.78113460540771,-1.47438716888428,36.9435920715332,5.92864465713501,-2.93922257423401,37.1136054992676,5.5228476524353,\n-1.34475648403168,35.0796165466309,5.12902164459229,-2.53913545608521,35.605598449707,5.09833669662476,-1.67743504047394,38.0942153930664,-4.0925087928772,-3.87088441848755,38.1073760986328,-4.12555122375488,-5.3170599937439,37.6776351928711,-3.29789161682129,-6.11478328704834,37.1026458740234,-1.88399529457092,-6.49664258956909,36.9398765563965,-0.926629424095154,-6.36891555786133,38.7568817138672,-0.362202167510986,-5.82635879516602,39.3835487365723,-1.53293943405151,-5.03867244720459,39.8959846496582,-2.59106040000916,-3.54611992835999,39.9083786010742,-3.3810977935791,-1.41777455806732,39.6628646850586,-3.62027859687805,-5.54055452346802,40.7690849304199,-1.08194398880005,-5.49603080749512,41.856201171875,-0.522336006164551,-5.60895442962646,41.9774932861328,-0.54057502746582,-5.49299716949463,43.0982360839844,-0.479999780654907,-5.50438833236694,44.0542755126953,-0.0110644111409783,-1.99303114414215,36.2204513549805,-4.09781169891357,-3.98227500915527,35.9138259887695,-4.1243839263916,-5.28660011291504,35.5719833374023,-3.34177470207214,-4.4788703918457,39.1287841796875,5.13459396362305,-6.45847272872925,41.784423828125,2.8785502910614,-6.1457724571228,41.6194610595703,3.46116876602173,-4.63133525848389,42.6636047363281,5.32448053359985,-4.75305843353271,43.5604667663574,5.33120679855347,-7.44574117660522,35.3674850463867,-0.307296603918076,-0.765930593013763,33.2394866943359,0.199775099754334,-6.56689834594727,35.3885688781738,-1.30802595615387,-6.95459890365601,33.9223136901855,-1.50603950023651,-7.33988666534424,37.5106315612793,2.67807340621948,-6.3889856338501,37.875617980957,-0.605510652065277,-7.2694787979126,37.9696998596191,1.09678852558136,-7.34313821792603,38.1378936767578,1.5938401222229,2.54588627815247,31.5141983032227,3.90785717964172,7.35676193237305,36.611213684082,0.0735180079936981,1.76136982440948,30.7708950042725,-0.30973556637764,1.99895298480988,31.0155296325684,3.09628009796143,4.97575998306274,31.3360900878906,-2.19620847702026,6.30475044250488,31.5676937103271,-2.05935525894165,1.4699159860611,30.8071784973145,2.04358291625977,\n3.12279558181763,30.9744472503662,-1.80761325359344,7.18444299697876,31.8184814453125,-1.26540327072144,7.60904788970947,38.0021514892578,1.4394623041153,6.92367172241211,37.4992141723633,4.23017835617065,7.33489608764648,38.8762969970703,2.96697282791138,8.05961799621582,32.2336196899414,-0.364079624414444,7.2227783203125,37.7002792358398,3.50522708892822,7.99379205703735,36.6208305358887,1.01282215118408,7.57951307296753,37.86865234375,1.19116532802582,7.60626697540283,38.0132713317871,3.52246165275574,2.92987728118896,32.3107681274414,4.24027919769287,-2.54588627815247,31.5141983032227,3.90785717964172,-7.35676193237305,36.611213684082,0.0735180079936981,-1.76136982440948,30.7708950042725,-0.30973556637764,-1.99895298480988,31.0155296325684,3.09628009796143,-4.97575998306274,31.3360900878906,-2.19620823860168,-1.4699159860611,30.8071784973145,2.04358291625977,-3.12279558181763,30.9744472503662,-1.80761325359344,-6.92367172241211,37.4992141723633,4.23017835617065,-7.92302513122559,32.6457328796387,-0.429989874362946,-7.53545331954956,34.2902183532715,-0.679921090602875,-8.05961799621582,32.2336196899414,-0.364079624414444,-2.92987728118896,32.3107681274414,4.24027919769287,6.71319198608398,40.9277381896973,1.88174486160278,6.6584153175354,40.9530601501465,2.80434918403625,6.40892744064331,40.8210372924805,3.42478704452515,6.16580247879028,40.730842590332,4.11610317230225,5.24478960037231,40.4570274353027,5.07763576507568,4.09946584701538,40.003002166748,5.10969161987305,3.26685166358948,39.7574501037598,5.55594730377197,1.59205174446106,39.6368942260742,5.92203807830811,0.0218058526515961,39.6724739074707,5.78261089324951,-1.59205174446106,39.6368942260742,5.92203807830811,-3.26731586456299,39.7573318481445,5.55723333358765,-4.62337350845337,40.2267990112305,5.05230140686035,-5.74155473709106,40.6005477905273,4.75555038452148,-6.41632032394409,40.8238906860352,3.43074584007263,-6.66259670257568,40.9543685913086,2.805419921875,-6.71319198608398,40.9277381896973,1.88174486160278,6.96116399765015,37.8924865722656,0.236995846033096,\n6.53837490081787,39.545482635498,0.625087022781372,6.49494075775146,40.6730422973633,0.764400660991669,6.71600389480591,35.0457725524902,-1.27530515193939,5.8884334564209,35.0911750793457,-2.19964599609375,6.23003673553467,39.5202827453613,-0.280717462301254,-4.23733997344971,33.8883094787598,-3.31580758094788,-5.55170154571533,34.1430282592773,-2.73199439048767,-6.73952388763428,34.6517181396484,-1.38723611831665,2.27997398376465,34.040943145752,-3.00337839126587,4.2042031288147,34.010986328125,-3.35272359848022,5.61063671112061,33.969596862793,-2.70036911964417,6.52647972106934,41.9636688232422,2.90919852256775,6.23724269866943,41.8537979125977,3.54334712028503,5.89144325256348,41.6963653564453,4.04102087020874,5.23887634277344,41.4213523864746,4.82535839080811,4.29452753067017,41.1218376159668,5.21275663375854,3.47159290313721,40.9850463867188,5.65788459777832,-6.54996919631958,41.8910331726074,2.9947304725647,-6.23255920410156,41.7566947937012,3.59965658187866,-5.5538182258606,41.5054779052734,4.59554147720337,-4.69729375839233,41.2445487976074,5.07512426376343,-3.47165608406067,40.9741363525391,5.65721082687378,-23.6263427734375,43.013599395752,6.47430896759033,-23.7729072570801,43.1372222900391,6.58026456832886,-24.7628192901611,42.8174591064453,3.71304368972778,-24.5079193115234,42.6303253173828,3.80450463294983,-23.8901023864746,42.3696022033691,4.40267133712769,-23.2607154846191,42.4850196838379,5.82348585128784,-23.2944355010986,42.733642578125,6.23423337936401,-24.9903984069824,43.7264289855957,5.74327707290649,-24.3464870452881,43.513370513916,6.43716669082642,-24.1099834442139,43.3889198303223,6.47907829284668,-24.2180614471436,42.4923400878906,4.03699064254761,-25.4617786407471,43.6127967834473,4.0622730255127,-25.304744720459,43.3559913635254,3.76097178459167,-25.5957698822021,43.7158012390137,4.88774299621582,-25.5078639984131,43.6638641357422,4.65497446060181,-25.1738891601563,42.5260353088379,3.73804807662964,-24.6930446624756,42.1397438049316,3.69490194320679,-25.8416652679443,41.6027069091797,3.753737449646,\n-25.3609161376953,41.2780914306641,3.74570178985596,-25.5961322784424,42.946418762207,4.07511329650879,-25.7301807403564,43.0309448242188,4.41291189193726,-26.2887325286865,42.0926628112793,4.36350917816162,-26.2815189361572,41.9631805419922,4.04271125793457,-26.3981914520264,40.0381469726563,3.94070935249329,-26.700496673584,40.2688484191895,3.99253249168396,-26.031810760498,39.866283416748,4.42348146438599,-26.9415378570557,39.6701011657715,4.1496410369873,-26.6437759399414,39.3840065002441,4.57978057861328,-27.4736957550049,40.0068969726563,4.43392086029053,-27.1415252685547,40.5520286560059,4.28695392608643,-25.0047302246094,41.0434036254883,4.17262172698975,-27.0838451385498,39.4616813659668,4.20486354827881,-27.5854930877686,39.8320007324219,4.42073726654053,-27.4173030853271,38.7636375427246,4.53872299194336,-26.8994770050049,39.3322372436523,4.61534118652344,-27.5505905151367,38.8895950317383,4.15631341934204,-27.9687995910645,39.2777709960938,4.31590127944946,-27.5471420288086,38.6640548706055,4.52497625350952,-28.0055732727051,38.2453079223633,4.07616996765137,-27.8282165527344,38.1721115112305,4.42304611206055,-28.0598011016846,39.1244735717773,4.31831836700439,-28.3139152526855,38.5171012878418,4.22306823730469,-28.4227142333984,37.6497230529785,4.07181930541992,-28.217414855957,37.5255508422852,4.32485485076904,-27.8730697631836,37.9825782775879,4.39158630371094,-28.3780708312988,38.3434410095215,4.16639280319214,-28.6439151763916,37.7854652404785,4.15652751922607,-28.4176254272461,37.5569000244141,4.59826374053955,-28.0582599639893,38.1683197021484,4.77799558639526,-28.4014892578125,38.297679901123,4.63346862792969,-28.6482925415039,37.744571685791,4.51374578475952,-28.0808868408203,39.0941696166992,4.7457594871521,-27.6341457366943,38.8030586242676,4.86536312103271,-28.3536701202393,38.4771766662598,4.65000343322754,-27.1750984191895,39.3397560119629,5.02171897888184,-27.9707336425781,39.2536811828613,4.79168939590454,-27.5544815063477,39.7653503417969,4.87039470672607,-26.8892860412598,39.1242294311523,5.65932321548462,\n-27.1643943786621,39.2769088745117,5.21089363098145,-28.0640392303467,38.5519676208496,5.3613109588623,-27.7503108978271,38.3601455688477,5.72724676132202,-27.5549240112305,39.8371887207031,5.44011735916138,-28.3622589111328,38.9591102600098,5.60978889465332,-27.8641948699951,38.2575073242188,5.75561332702637,-28.5736103057861,37.5589599609375,5.41511964797974,-28.3246059417725,37.4510269165039,5.74597024917603,-28.8778953552246,37.9082946777344,5.62078475952148,-28.4881896972656,38.7738189697266,5.63155937194824,-29.0471324920654,36.796085357666,5.47368192672729,-28.7995357513428,36.6460189819336,5.74858140945435,-28.3623027801514,37.2672958374023,5.74302959442139,-28.9793586730957,37.7283210754395,5.64031219482422,-29.3114433288574,36.9610900878906,5.65622091293335,-28.9377841949463,36.6883697509766,6.14251613616943,-28.4273624420166,37.4474029541016,6.21729612350464,-29.2370700836182,36.8791809082031,6.13663291931152,-28.8671531677246,37.6475410461426,6.21940517425537,-28.7552375793457,37.8249931335449,6.24292993545532,-28.3837375640869,38.711784362793,6.26133489608765,-27.8976879119873,38.416675567627,6.24330282211304,-26.9654140472412,39.2554931640625,6.17968940734863,-28.276517868042,38.9079895019531,6.27008581161499,-27.4117317199707,39.8820152282715,6.13056707382202,-26.4471855163574,39.0464172363281,6.60819530487061,-26.9194221496582,39.2587203979492,6.24522972106934,-27.6800098419189,38.385009765625,6.62230777740479,-27.2573795318604,38.2736320495605,6.9517560005188,-27.26926612854,39.8481636047363,6.59906101226807,-27.9782104492188,38.8671264648438,6.95007228851318,-28.0688438415527,38.6760520935059,7.01848316192627,-28.5870819091797,37.7654495239258,7.17742586135864,-28.2777462005615,37.4363899230957,6.88086128234863,-27.9086799621582,37.1613502502441,7.15313673019409,-28.7339859008789,36.6618309020996,7.08320379257202,-28.3936653137207,36.4971008300781,7.30121755599976,-28.6705112457275,37.592227935791,7.20863342285156,-28.9643859863281,36.7978897094727,7.30511474609375,-28.4570426940918,36.5814056396484,7.71035099029541,\n-27.9176807403564,37.3377952575684,7.63046169281006,-28.7698287963867,36.7252349853516,7.75289964675903,-28.4236831665039,37.5247077941895,7.73659610748291,-27.4033813476563,38.1232032775879,7.00110530853271,-27.8806934356689,37.3391571044922,7.15934276580811,-27.2819881439209,38.3176307678223,7.47253370285034,-27.7696685791016,38.6321830749512,7.5859317779541,-28.3256855010986,37.6912994384766,7.72710371017456,-26.8567867279053,39.8479804992676,7.2989673614502,-26.4308338165283,39.2665863037109,7.17094659805298,-27.6364707946777,38.8198776245117,7.58093309402466,-26.5386028289795,39.8399963378906,7.40321207046509,-26.3355560302734,39.2802734375,7.28359174728394,-26.4937152862549,39.7903518676758,7.72415590286255,-26.2816333770752,39.2777862548828,7.37923860549927,-25.7911376953125,39.1551628112793,7.62134981155396,-26.7711887359619,38.5325317382813,7.91517496109009,-26.2570724487305,38.405632019043,8.05340671539307,-26.9927787780762,39.0176429748535,8.23996162414551,-26.3676681518555,38.260124206543,8.14638519287109,-27.2187328338623,37.843936920166,8.26996326446533,-26.6905918121338,37.6869506835938,8.43252944946289,-27.5778198242188,37.0123481750488,8.60592555999756,-27.2039623260498,36.8574829101563,8.74586391448975,-26.7794971466064,37.493537902832,8.46357822418213,-27.455057144165,38.0021095275879,8.637282371521,-27.7249240875244,37.2018547058105,8.87214088439941,-27.182933807373,36.963996887207,9.13169574737549,-26.6903743743896,37.7697410583496,8.90561294555664,-27.0663108825684,37.950511932373,9.09242057800293,-27.4639053344727,37.1640396118164,9.21800422668457,-26.2363605499268,38.5291175842285,8.61067199707031,-25.5951328277588,39.4232940673828,8.14927768707275,-26.5826759338379,38.9987297058105,8.73210430145264,-26.0422592163086,39.8283958435059,8.27025318145752,-25.8990154266357,40.1051177978516,8.16572380065918,-25.4575862884521,39.6448440551758,8.05125999450684,-24.9653930664063,40.1741714477539,7.70815801620483,-24.9730854034424,39.9014778137207,7.42950582504272,-25.4200038909912,39.3626289367676,7.75683259963989,\n-24.2210006713867,41.0106048583984,7.98147630691528,-24.6388511657715,40.5908088684082,7.69859838485718,-24.576192855835,40.8846054077148,7.95612287521362,-24.2833976745605,41.1872444152832,7.96993923187256,-25.0402679443359,40.2473983764648,7.93497562408447,-23.489013671875,40.1892395019531,7.41091966629028,-24.1003112792969,40.3884086608887,7.85036611557007,-23.76003074646,39.8458709716797,8.26958274841309,-23.2517566680908,39.6617813110352,8.05038833618164,-23.8638591766357,40.1887512207031,8.5574779510498,-23.1712284088135,39.2300567626953,8.37701511383057,-23.7789897918701,39.7685356140137,8.3179931640625,-23.7777690887451,39.3715591430664,8.7131233215332,-23.8962688446045,39.8838386535645,9.01914501190186,-23.4659900665283,39.0062866210938,9.28580474853516,-23.0384254455566,38.9159851074219,8.99066925048828,-23.623067855835,39.3927841186523,9.53688907623291,-23.1323223114014,39.0118255615234,9.59018325805664,-22.7384910583496,39.0114517211914,9.32059097290039,-23.2353954315186,39.445182800293,9.75967407226563,-22.9911422729492,39.6222114562988,9.18593120574951,-22.8035850524902,39.2971458435059,8.97720813751221,-22.871150970459,39.2318687438965,9.65723705291748,-23.3471965789795,39.7962341308594,9.4227352142334,-22.9731788635254,40.2100143432617,8.72885417938232,-22.8828563690186,39.8947982788086,8.33472442626953,-23.4366111755371,40.3843574523926,8.82137107849121,-23.0198669433594,40.3654747009277,8.55435657501221,-22.9130306243896,40.0500450134277,8.16645908355713,-23.4837207794189,40.530647277832,8.69202995300293,-23.1712074279785,40.9755668640137,7.88031339645386,-23.0264263153076,40.5268325805664,7.56757783889771,-23.6603927612305,41.1375503540039,8.156907081604,-23.1650218963623,41.0661544799805,7.53386211395264,-23.235279083252,41.2355422973633,7.71307706832886,-23.774694442749,41.4714393615723,7.87514686584473,-22.9597644805908,41.9761009216309,6.33067464828491,-23.3756122589111,42.2179107666016,6.64725112915039,-23.4795513153076,42.5396881103516,6.35377931594849,-23.9068374633789,42.6923294067383,6.66793060302734,\n-23.7800006866455,42.5955772399902,6.5540189743042,-23.6945686340332,42.2989540100098,6.75234365463257,-23.8408679962158,42.3424911499023,6.9574875831604,-24.3331031799316,41.8716430664063,4.02914953231812,-26.4941844940186,39.0164794921875,6.02960872650146,-25.5218563079834,39.9251556396484,5.76432228088379,-24.3132247924805,42.571662902832,6.771484375,-24.0989532470703,42.1516990661621,7.10267925262451,-25.8187999725342,43.0784912109375,4.83520603179932,-25.9118518829346,43.1455383300781,5.12484979629517,-26.3130931854248,42.3528518676758,5.08477687835693,-26.2328262329102,42.2309722900391,4.80738353729248,-26.2721271514893,42.3940773010254,5.55777406692505,-27.4076194763184,40.3714485168457,5.78906440734863,-27.3259334564209,40.2308349609375,5.42932653427124,-26.127269744873,42.3827819824219,5.2936635017395,-27.4691963195801,40.310604095459,4.7547812461853,-27.3994464874268,40.2410430908203,5.05457639694214,-27.6189594268799,39.8422622680664,4.65212154388428,-27.294132232666,40.3606758117676,4.49731540679932,-26.3379230499268,39.9064865112305,8.10357666015625,-26.3093795776367,40.3351631164551,7.92245149612427,-25.9464550018311,40.5943756103516,7.80378723144531,-26.6902542114258,38.767448425293,8.80242824554443,-27.0914497375488,38.7889060974121,8.33900260925293,-26.9938430786133,38.1222038269043,9.0299596786499,-27.3781890869141,38.1783409118652,8.58977794647217,-26.7387390136719,40.2936134338379,7.08049869537354,-27.1438694000244,39.9151344299316,6.99638652801514,-27.078519821167,40.3383636474609,6.88743591308594,-27.2102470397949,40.2485847473145,6.06977415084839,-26.0227088928223,42.4649887084961,5.74219417572021,-27.5707168579102,39.9309616088867,5.81999683380127,-26.3443927764893,40.2721290588379,7.53774356842041,-24.6449184417725,42.8606872558594,6.61178350448608,-24.9284400939941,42.0807762145996,7.13394355773926,-25.5023517608643,42.3086242675781,6.64509868621826,-25.3115196228027,43.0999031066895,6.07989645004272,-25.8049125671387,42.5218391418457,6.16582107543945,-25.7740497589111,42.4401054382324,6.50868082046509,\n-25.2683982849121,43.7581748962402,5.62061786651611,-25.55246925354,43.2300834655762,5.92629480361938,-23.2498245239258,42.3686256408691,5.56239986419678,-25.6443176269531,43.1836395263672,5.72843170166016,-25.404899597168,43.7405166625977,5.31508016586304,-26.0778408050537,42.5206146240234,6.04322719573975,-25.7941913604736,43.1893310546875,5.52624320983887,-25.8493099212646,43.1688117980957,5.33820009231567,-27.0476417541504,40.2691268920898,6.52142858505249,-24.6178779602051,40.8027114868164,5.59365653991699,-23.9773197174072,41.5689315795898,4.54149913787842,-25.5075569152832,40.646915435791,7.91557359695435,-24.5568523406982,41.5289115905762,7.71010732650757,-25.4690227508545,43.5844230651855,4.3893346786499,-23.4851150512695,42.3853034973145,5.17827129364014,-23.0789699554443,41.6929740905762,5.76250648498535,-22.9913101196289,40.6891403198242,7.15628480911255,-28.5560054779053,37.5645484924316,4.30806970596313,-27.0946807861328,39.3230667114258,5.13024616241455,-26.7749156951904,39.1556663513184,5.41575574874878,-27.4108295440674,39.8179130554199,5.15595531463623,-29.1609916687012,36.7120780944824,5.84303522109985,-26.1010341644287,39.0728492736816,6.80517244338989,-27.1171913146973,39.7844200134277,6.29439306259155,-28.754114151001,36.5392189025879,7.46010780334473,-26.174861907959,39.2433433532715,7.18090915679932,-25.7506484985352,39.1920318603516,7.30489063262939,-27.5133361816406,36.9361305236816,8.96808910369873,-23.738862991333,40.4270858764648,6.7562952041626,-24.3904209136963,40.5501098632813,7.136474609375,-23.4358806610107,41.0184288024902,5.73205804824829,-25.4248676300049,43.9473648071289,4.77484750747681,-25.4191493988037,43.8811645507813,4.5657262802124,-24.9597187042236,43.013126373291,3.73045754432678,-10.3164577484131,31.3168678283691,5.01786422729492,-10.4693489074707,31.2689456939697,4.63314199447632,-10.5240421295166,31.170467376709,4.48853874206543,-10.660719871521,31.3138275146484,3.91740942001343,-10.77490234375,31.469934463501,3.34196209907532,-10.6482152938843,31.5425624847412,2.44958591461182,\n-10.7324857711792,30.8154754638672,2.55173945426941,-10.7644014358521,31.6591262817383,3.23164176940918,-10.2808208465576,30.2793865203857,5.12975692749023,-10.6183176040649,30.2281265258789,4.64286136627197,-10.7760057449341,30.1664028167725,4.10758399963379,-10.9403457641602,30.1010570526123,3.54219555854797,-10.7129125595093,30.5542430877686,2.78098440170288,-10.5687103271484,27.5677471160889,5.52671241760254,-10.8588371276855,27.1532573699951,5.07090520858765,-11.0879936218262,26.626407623291,4.60105657577515,-11.1306085586548,26.04709815979,4.08966159820557,-11.0336875915527,25.9920654296875,3.46891665458679,-10.1512355804443,31.335147857666,5.21716260910034,-10.1344223022461,30.2982311248779,5.32907390594482,-10.4207248687744,27.5892753601074,5.72850036621094,-10.5767116546631,26.8494491577148,5.02568817138672,-10.4960432052612,27.2717418670654,5.53186178207397,-10.8061676025391,26.3513717651367,4.55436325073242,-10.9394845962524,25.787410736084,4.06502723693848,-10.9920883178711,25.724142074585,3.48293972015381,-11.0105819702148,25.9963417053223,3.22727370262146,-10.8338022232056,29.7751216888428,2.6583685874939,-10.8335161209106,29.8614139556885,2.92862701416016,-10.7086763381958,30.6338901519775,2.42993354797363,-10.7769727706909,30.848165512085,2.06661295890808,-10.7256050109863,31.4149341583252,1.97352004051209,-10.5714511871338,32.3552322387695,2.34100723266602,-10.6839933395386,31.7842426300049,1.91300749778748,-9.78507804870605,31.3338642120361,5.21721887588501,-9.87252616882324,30.2970352172852,5.36267328262329,-10.1591758728027,27.5860157012939,5.76210689544678,-10.4396133422852,27.3521747589111,5.68618774414063,-10.1944417953491,27.2868728637695,5.69989347457886,-10.2716274261475,27.1709403991699,5.48325634002686,-10.3740825653076,26.7456321716309,4.97552013397217,-10.6062746047974,26.249885559082,4.5052752494812,-10.6482419967651,25.6966972351074,3.98919558525085,-10.8514442443848,25.6230316162109,3.45295071601868,-11.0032596588135,25.8384418487549,3.3116455078125,-10.8768291473389,25.7538566589355,3.20788168907166,\n-10.8864469528198,25.9693126678467,3.08493828773499,-10.7101306915283,29.7232685089111,2.51960349082947,-10.6073989868164,30.6013603210449,2.29236936569214,-10.6865501403809,30.8208541870117,1.92806482315063,-10.635461807251,31.3915271759033,1.83091568946838,-10.5932502746582,31.7602348327637,1.76836478710175,-9.30952262878418,27.6096858978271,5.51130199432373,-9.36321449279785,27.1908302307129,5.43078088760376,-9.49075031280518,27.0709991455078,5.24157238006592,-10.0877647399902,26.1372394561768,4.31180095672607,-10.194766998291,25.6682167053223,3.90583229064941,-10.329719543457,25.5889053344727,3.29478788375854,-10.3173160552979,25.7066307067871,3.03983330726624,-10.3007287979126,25.9241466522217,2.91840529441834,-9.58683490753174,30.544189453125,2.06859755516052,-9.49680805206299,30.7271423339844,1.58154821395874,-9.35418319702148,31.3025550842285,1.47600340843201,-9.26891422271729,31.6173439025879,1.4452668428421,-10.1851902008057,32.705379486084,4.81975841522217,-10.3326625823975,32.658447265625,4.44952201843262,-10.5901002883911,32.6262359619141,4.10170269012451,-10.6844825744629,32.5894355773926,3.782958984375,-10.7659769058228,31.854585647583,3.87953209877014,-10.6804103851318,31.72825050354,4.22633266448975,-10.767786026001,32.5557403564453,3.49398136138916,-10.8224496841431,31.9832763671875,3.56911110877991,-10.6785020828247,32.4997863769531,3.11047172546387,-10.0196094512939,32.7230186462402,5.0197606086731,-9.6869421005249,32.7223472595215,5.02937936782837,-10.0704555511475,33.6436462402344,4.67708396911621,-10.2198791503906,33.6019630432129,4.2960090637207,-10.4739217758179,33.5704498291016,3.95791888237,-10.5781259536743,33.525318145752,3.62588310241699,-10.6515369415283,33.4999389648438,3.3558030128479,-9.90494632720947,33.6611785888672,4.87709617614746,-9.5853099822998,33.6472320556641,4.89282941818237,-9.81949043273926,29.6289615631104,2.35337352752686,-10.4194192886353,32.6480674743652,4.33592128753662,-10.5391340255737,31.3583889007568,4.50618028640747,-10.6981973648071,31.5539741516113,3.89310121536255,\n-10.811616897583,31.6938400268555,3.3666524887085,-10.7361822128296,32.5229110717773,3.25604343414307,-10.6453189849854,33.4683799743652,3.12315583229065,-10.3043689727783,33.5925903320313,4.19207048416138,-10.6319732666016,33.4152908325195,3.01470398902893,-10.3322820663452,32.3530235290527,2.34796810150146,-10.4097709655762,31.530782699585,2.44121956825256,-10.4909515380859,31.4116535186768,2.01891303062439,-10.4493608474731,31.7783679962158,1.95387315750122,-9.30763244628906,31.3428630828857,1.69849765300751,-9.27701187133789,31.7112808227539,1.63962948322296,-10.4460687637329,32.5039863586426,3.1677417755127,-10.5314064025879,31.6679840087891,3.2867476940155,-10.0142679214478,33.5728530883789,4.17846965789795,-9.86453628540039,33.6150016784668,4.55991649627686,-9.97907161712646,32.6791954040527,4.70206594467163,-10.2583742141724,32.6154098510742,4.15401935577393,-10.3493843078613,33.5028266906738,3.56188273429871,-10.2622365951538,33.5427513122559,3.85136222839355,-10.4926147460938,32.5556602478027,3.59924221038818,-9.80005741119385,33.6264266967773,4.66476440429688,-9.81684875488281,32.6917915344238,4.80013179779053,-8.66097354888916,32.6172485351563,4.52869319915771,-9.61614990234375,33.617748260498,4.65667963027954,-8.78214836120605,33.6332511901855,4.21878576278687,-10.4077816009521,33.4588775634766,3.14650082588196,-10.4150419235229,33.4819145202637,3.32972025871277,-10.50719165802,32.5252380371094,3.34993386268616,-10.3950653076172,33.4113655090332,3.04695606231689,-10.6592054367065,32.8283767700195,2.68546414375305,-10.4200668334961,32.8382186889648,2.69870090484619,-10.1139011383057,33.5614242553711,4.05157613754272,-9.27635383605957,28.1130962371826,5.45821094512939,-8.77882862091064,32.6230430603027,4.73766326904297,-8.70695400238037,33.5800857543945,4.55812740325928,-8.99448394775391,31.0272312164307,5.08935070037842,-9.15069961547852,29.4090843200684,5.3089280128479,-8.69561290740967,32.595043182373,4.38728666305542,-9.04243087768555,32.6055297851563,3.77995300292969,-9.26224613189697,32.6090660095215,3.21469688415527,\n-9.35247230529785,32.4662780761719,2.86970043182373,-9.35247230529785,31.6366233825684,2.86970067024231,-9.52705860137939,31.4878177642822,2.16713285446167,-4.29888534545898,21.2389469146729,2.84800100326538,-3.93148970603943,21.6375637054443,2.01565790176392,-2.89970541000366,24.9143161773682,2.17081499099731,-2.62015056610107,26.2532806396484,2.3701069355011,-4.41971921920776,21.6550331115723,4.03259515762329,-8.20820713043213,24.2063522338867,5.04386711120605,-8.81881809234619,23.5065650939941,4.60944509506226,-9.62073135375977,24.0104999542236,1.51200270652771,-9.83751201629639,22.8306541442871,2.4107723236084,-9.29598808288574,23.2301254272461,4.08172798156738,-2.31491231918335,29.7624473571777,3.23570966720581,-2.28898024559021,28.4519901275635,2.82041788101196,-9.44373893737793,26.8204231262207,1.29200780391693,-9.5324125289917,25.5558605194092,1.46676802635193,-3.17484617233276,23.3372783660889,2.0396089553833,-7.73149299621582,25.2387638092041,5.56792831420898,-6.34912157058716,24.9886512756348,5.79081058502197,-6.1414589881897,23.8302707672119,5.62265491485596,-8.50175857543945,30.9236011505127,0.143369674682617,-8.91572570800781,29.3362884521484,0.629053473472595,-9.6224308013916,23.0851593017578,1.67339825630188,-9.57697582244873,22.9747257232666,3.24728608131409,-3.43016672134399,22.3351707458496,1.91197001934052,-5.56419515609741,22.756872177124,5.25122785568237,-4.97053909301758,22.3994827270508,4.87527322769165,-10.183985710144,24.0114269256592,1.48732244968414,-10.3995380401611,23.0030460357666,2.38215231895447,-10.1714305877686,23.2381954193115,1.69905114173889,-10.0658826828003,24.2001304626465,3.24561882019043,-10.1078948974609,23.1566581726074,3.35979390144348,-9.73544216156006,24.5126132965088,4.35015201568604,-9.77918720245361,23.3942604064941,4.31036186218262,-9.15197277069092,24.8433399200439,5.12198305130005,-9.17974853515625,23.6991958618164,5.01077795028687,-8.81389045715332,25.4027652740479,5.52354097366333,-8.11821174621582,25.076171875,6.03452777862549,-8.62082099914551,24.2555313110352,5.50145721435547,\n-4.94333648681641,24.0129108428955,6.1410551071167,-5.44337701797485,22.7728080749512,5.75631809234619,-6.00277996063232,23.6588459014893,6.15437316894531,-5.51579332351685,24.4081516265869,6.2461986541748,-4.21660566329956,23.4138717651367,5.43742179870605,-4.60753440856934,22.092170715332,5.30762243270874,-3.64753818511963,22.7981567382813,4.36176633834839,-3.97580409049988,21.4336051940918,4.30237817764282,-3.93899321556091,21.0546340942383,3.03482794761658,-3.00800609588623,22.134693145752,2.17809700965881,-3.47336459159851,21.4021892547607,2.19615602493286,-10.2548227310181,25.4462604522705,2.23816800117493,-10.0921211242676,25.3244571685791,1.40582799911499,-10.1016530990601,25.5772495269775,4.32744646072388,-9.49295043945313,25.6799545288086,5.24583053588867,-8.74037933349609,26.1106243133545,5.74385833740234,-7.91368246078491,26.0554676055908,6.26549863815308,-4.82580804824829,24.7727489471436,6.31932830810547,-3.97736215591431,24.154411315918,5.67784929275513,-3.38183975219727,23.6130828857422,4.72761106491089,-2.68674302101135,23.211181640625,2.26280474662781,-9.40937805175781,29.5380821228027,0.473168909549713,-9.00727462768555,31.0707683563232,0.0614502280950546,-9.27804946899414,31.2962856292725,1.37091720104218,-9.69148540496826,29.6239604949951,1.64869022369385,-8.30988502502441,32.8178291320801,5.27076625823975,-8.49545383453369,30.7285480499268,5.71441602706909,-7.65233707427979,30.4246578216553,6.46737289428711,-7.61286640167236,32.386043548584,6.16658735275269,-4.8137845993042,30.9995460510254,6.55148696899414,-5.17962551116943,29.5996227264404,6.77977800369263,-4.09050512313843,30.391019821167,6.23229169845581,-2.47493076324463,29.0429763793945,4.76166772842407,-2.26273012161255,28.844123840332,4.130455493927,-1.83292031288147,28.6096267700195,3.26814723014832,-8.04264640808105,34.5006980895996,-0.720708727836609,-7.95204257965088,35.5625,4.51369094848633,-7.40072584152222,35.2431945800781,5.5053391456604,-4.30788898468018,32.4267234802246,6.14424514770508,-3.70565128326416,31.6386547088623,5.78515100479126,\n-2.07473802566528,29.742862701416,4.24215078353882,-1.89405024051666,29.2105312347412,3.50888156890869,-7.91234683990479,36.6562614440918,0.0448120012879372,-7.69625759124756,37.7195739746094,3.7429211139679,-7.29021406173706,37.5362548828125,4.64640092849731,-6.16034173965454,36.3572311401367,5.5187726020813,-4.74860525131226,34.8689727783203,5.76224040985107,-3.77248501777649,33.7298736572266,5.60572528839111,-3.26117038726807,32.9967346191406,5.2520923614502,-6.08498001098633,25.5943832397461,6.55991077423096,-6.18661165237427,24.7244873046875,6.31633234024048,-10.0716009140015,24.0060024261475,1.4139244556427,-10.0697593688965,23.165225982666,1.6226841211319,-10.3156270980835,22.8844871520996,2.36132836341858,-10.029746055603,23.0400581359863,3.33455991744995,-9.70546817779541,23.283145904541,4.26745891571045,-9.1259241104126,23.5924777984619,4.93032312393188,-8.48777198791504,24.2007484436035,5.37533950805664,-7.91638708114624,25.1751689910889,5.94517946243286,-6.03314876556396,23.5322189331055,5.99998188018799,-5.52076005935669,22.6739807128906,5.62737798690796,-4.69226598739624,22.0745868682861,5.19560813903809,-4.09655714035034,21.4006404876709,4.22978782653809,-4.06289386749268,21.0164031982422,3.00006198883057,-3.60996341705322,21.3400974273682,2.08173608779907,-9.97756958007813,25.3492584228516,1.34460115432739,-3.06863784790039,22.1662006378174,2.02713704109192,-2.74755239486694,23.2384338378906,2.15618586540222,-8.82112979888916,31.0097255706787,-0.0560440123081207,-1.86797857284546,28.614429473877,3.1319215297699,-7.94068431854248,34.379695892334,-0.816163599491119,-1.89337337017059,29.1634712219238,3.36262130737305,-7.79942846298218,36.6775054931641,-0.0194739997386932,-7.60380077362061,37.7963676452637,3.67964386940002,-7.22692108154297,37.5835647583008,4.55090570449829,-6.1025857925415,36.4501762390137,5.41515636444092,-4.72125434875488,34.9616813659668,5.66096448898315,-3.76971030235291,33.8117027282715,5.53015184402466,-3.28945708274841,33.111946105957,5.19547367095947,-2.06053113937378,30.4330711364746,3.89472961425781,\n-2.10025668144226,30.606517791748,3.93692255020142,-6.30683612823486,24.863639831543,6.18582439422607,-6.11436796188354,23.6850185394287,6.04688310623169,-7.78097343444824,26.0277538299561,6.21321439743042,-9.29177093505859,29.477855682373,0.412787765264511,-2.07259583473206,30.3804836273193,4.01975345611572,-6.21463012695313,25.6692790985107,6.46301651000977,-7.55111742019653,30.3920917510986,6.39775085449219,-7.45050239562988,32.3329658508301,6.15083980560303,-7.27913808822632,35.1760787963867,5.55547094345093,-6.99305248260498,37.2315101623535,4.84737014770508,-6.91676378250122,37.2658882141113,4.76304244995117,-2.28811597824097,26.3853244781494,2.56221866607666,-2.23476219177246,26.3820266723633,2.68446254730225,-2.61036849021912,26.5165481567383,3.75161123275757,-2.90822100639343,26.7460823059082,4.73223924636841,-3.56000971794128,27.1050662994385,5.75402736663818,-4.27271509170532,27.3566989898682,6.4875373840332,-5.66520214080811,27.6100559234619,6.7059268951416,-5.7662296295166,27.5774803161621,6.57018709182739,-7.6766791343689,27.9425983428955,6.35362434387207,-7.80297374725342,27.9894924163818,6.4398775100708,-8.66915988922119,28.0921421051025,5.84028482437134,-9.87279415130615,26.798620223999,1.15454745292664,-9.99865055084229,26.792085647583,1.22897827625275,-10.1591415405273,26.8642349243164,2.07426524162292,-2.20996499061584,29.9731330871582,4.60764837265015,-2.10399508476257,30.5140609741211,4.07979536056519,-5.30119848251343,29.6463642120361,6.68332195281982,-4.92222452163696,31.0695972442627,6.47152519226074,-4.48160314559937,32.5191307067871,6.0656886100769,-4.14768695831299,34.1093292236328,5.51155948638916,-4.15120220184326,34.2035255432129,5.43701601028442,-1.98364222049713,27.8785266876221,2.93078923225403,-1.94235408306122,27.87815284729,3.06318759918213,-2.36977767944336,28.0997009277344,3.98143076896667,-2.63067173957825,28.2976512908936,4.7458701133728,-4.41857099533081,29.2386493682861,6.59666156768799,-7.56398439407349,30.5628261566162,6.71118402481079,-7.49685859680176,32.181510925293,6.48458242416382,\n-7.468101978302,32.5037994384766,6.4351601600647,-7.3045482635498,35.2156181335449,5.87828588485718,-6.73865842819214,32.2596702575684,6.63548994064331,-6.20531892776489,36.3156089782715,5.84047269821167,-7.05880689620972,37.1785850524902,5.21333408355713,-4.72433471679688,34.8476142883301,6.0802116394043,-6.41811656951904,34.4748916625977,6.24666404724121,-7.55984258651733,30.338529586792,6.73191165924072,-7.69254875183105,27.9261207580566,6.6812539100647,-7.82909297943115,26.0347461700439,6.52567291259766,-6.32481861114502,25.6593074798584,6.7205548286438,-7.95692873001099,25.1614246368408,6.27644300460815,-6.40386581420898,24.8511695861816,6.50110149383545,-5.83545446395874,27.5759601593018,6.88720178604126,-5.36732721328735,29.6078033447266,7.00625324249268,-4.96170663833618,31.019079208374,6.80995941162109,-5.2938666343689,29.7915210723877,6.99704647064209,-4.8523211479187,31.2468891143799,6.76324796676636,-4.41397762298584,32.6190986633301,6.37181329727173,-5.5450701713562,31.6847229003906,6.82576894760132,-5.13066625595093,33.2722244262695,6.48147821426392,-4.08279800415039,34.1065979003906,5.84938621520996,-8.26431655883789,35.4175186157227,0.438631266355515,-8.11979484558105,35.6021957397461,4.41319370269775,-8.47711849212646,32.8561134338379,5.23995113372803,-8.70630931854248,30.8051433563232,5.64721870422363,-8.90147686004639,28.0989265441895,5.80129289627075,-8.94633674621582,26.8793144226074,5.76223707199097,-8.9966287612915,26.0767917633057,5.69587278366089,-8.94582271575928,25.184455871582,5.4431848526001,-9.03204917907715,25.4176197052002,5.50921106338501,-9.29705619812012,25.0721836090088,5.14672422409058,-9.88245296478271,24.7685241699219,4.34585094451904,-10.1949939727783,24.4736366271973,3.25530242919922,-10.2092380523682,24.4950656890869,2.25282216072083,-10.2866735458374,24.5622482299805,2.40504479408264,-10.3208980560303,25.4584903717041,2.32878184318542,-10.2282390594482,26.8746757507324,2.19782257080078,-9.76998329162598,29.6250152587891,1.78370225429535,-8.92996597290039,33.1470336914063,1.12682414054871,\n-8.41434097290039,35.5315437316895,0.57951408624649,-8.01955699920654,36.6328430175781,0.68460077047348,-10.1855125427246,24.3762168884277,2.39254546165466,-4.88428688049316,27.5448017120361,6.62644290924072,-5.35536670684814,25.2809295654297,6.34503364562988,-2.41899251937866,31.5349407196045,4.39026832580566,-2.42222929000854,31.4518260955811,4.50084161758423,-2.70244908332825,30.6618022918701,5.13954162597656,-3.01469254493713,29.4937610626221,5.50692224502563,-3.18643069267273,28.6368103027344,5.63183641433716,-2.88213300704956,32.440502166748,4.80782842636108,-2.88537335395813,32.3740043640137,4.91404724121094,-3.25417995452881,31.2281646728516,5.60531949996948,-3.57900738716125,29.9968357086182,6.06741666793823,-3.84910750389099,29.0165786743164,6.32851791381836,-3.78587698936462,22.6147346496582,4.40958499908447,-4.40473413467407,23.2173252105713,5.3618688583374,-5.05243253707886,23.7748394012451,5.98046350479126,-5.15192556381226,23.9108238220215,6.03752183914185,-5.09901189804077,24.0283966064453,6.06259202957153,-4.98978471755981,24.8948726654053,6.22997379302979,-4.42884540557861,27.3927001953125,6.41243886947632,-3.99426865577698,29.0578422546387,6.27595472335815,-3.70775318145752,30.0652732849121,5.9921236038208,-3.36599230766296,31.2928047180176,5.52768707275391,-3.21600556373596,23.382287979126,3.66167640686035,-3.13256430625916,23.4489612579346,3.96262264251709,-2.60371732711792,26.5579433441162,3.99766564369202,-2.36950469017029,28.1366233825684,4.2071647644043,-2.27195620536804,28.888053894043,4.36787366867065,-2.10059666633606,29.8359222412109,4.44796895980835,-3.65240097045898,22.6352996826172,4.09371852874756,-3.45793771743774,22.3002586364746,3.45713114738464,-5.93335342407227,23.5488815307617,6.10497140884399,-3.43184065818787,31.3598518371582,5.57760047912598,-3.32914447784424,31.375696182251,5.48063993453979,-3.22046899795532,31.3329010009766,5.47011470794678,-2.69772386550903,30.7720069885254,4.98422145843506,-2.19492959976196,30.0498847961426,4.42499971389771,-8.23526859283447,35.5774803161621,4.07809209823608,\n-7.92610263824463,36.6413269042969,3.91050696372986,-8.87887573242188,32.999683380127,1.01147544384003,-8.57392024993896,32.4365539550781,-0.315257996320724,-8.39839649200439,32.313835144043,-0.395357549190521,-7.97919321060181,35.5220642089844,-0.356160432100296,-7.86904096603394,35.527904510498,-0.407945513725281,-1.97695231437683,29.7982711791992,3.62867569923401,-1.983323097229,29.7955074310303,3.76431751251221,-7.58679962158203,37.4158172607422,1.93770897388458,-7.68300867080688,37.3115768432617,1.93738102912903,-8.13943958282471,36.6269798278809,1.88212752342224,-8.5756254196167,35.5532608032227,1.8499995470047,-7.59529972076416,37.4961585998535,2.80867648124695,-7.67323303222656,37.3749008178711,2.84015107154846,-8.04368209838867,36.6341552734375,2.89631700515747,-8.44843769073486,35.5653686523438,2.96404600143433,-7.65189218521118,37.476619720459,0.7927166223526,-7.81682682037354,37.3234367370605,0.713629484176636,-7.95430898666382,36.6380043029785,0.543556153774261,-9.06007099151611,33.3199729919434,2.17655181884766,-8.49046039581299,34.5470542907715,4.30356645584106,-8.2700252532959,34.4476547241211,4.76078844070435,-8.10432147979736,34.3945121765137,4.835862159729,-10.2321319580078,26.9309692382813,2.76746225357056,-9.23867607116699,32.4755554199219,2.36720180511475,-9.01028919219971,33.5867919921875,3.4520092010498,-10.8878717422485,26.9042167663574,2.97664642333984,-11.0122699737549,26.9303855895996,3.1198832988739,-11.033429145813,26.9423446655273,3.3592324256897,-11.1435317993164,27.0207023620605,3.98125410079956,-11.048360824585,27.2650470733643,4.51753187179565,-10.8523368835449,27.507209777832,5.0268440246582,-10.5490579605103,27.7487545013428,5.500075340271,-10.4028263092041,27.7594146728516,5.7024450302124,-10.1423120498657,27.7449855804443,5.73791122436523,-6.21765995025635,31.8104839324951,6.43567132949829,-6.20972585678101,31.6967830657959,6.77317142486572,-6.41693687438965,30.1916389465332,6.91217041015625,-6.4039478302002,30.032678604126,6.60236120223999,-6.44509267807007,29.9831085205078,6.92495393753052,\n-6.80701875686646,27.7775402069092,6.78988933563232,-7.08851909637451,25.8666687011719,6.62717199325562,-7.16845560073853,25.0319118499756,6.39875030517578,-7.1069540977478,25.0596961975098,6.07496929168701,-7.04650259017944,25.1148319244385,5.67837047576904,-10.8846216201782,19.2333583831787,2.99382495880127,-10.8735446929932,18.8200950622559,3.42978501319885,-10.8541011810303,18.3279361724854,2.93692708015442,-10.8832063674927,18.8148536682129,2.53401899337769,-10.5200786590576,17.9692115783691,4.34590482711792,-10.4846277236938,17.3935279846191,3.72583603858948,-9.73058032989502,17.2792644500732,5.04154920578003,-8.62687110900879,16.9248275756836,5.41275405883789,-10.3979377746582,18.2120380401611,4.33148908615112,-10.7226848602295,19.0455799102783,3.37352299690247,-9.62259387969971,17.5917854309082,5.03659582138062,-8.54744338989258,17.1974773406982,5.40801620483398,-10.830249786377,19.4356498718262,2.91760802268982,-10.7492761611938,19.799617767334,2.88753604888916,-10.7113447189331,19.2958393096924,3.12222003936768,-10.6793050765991,19.3370323181152,3.71836709976196,-10.3031015396118,18.9596462249756,4.79261493682861,-9.37976932525635,18.4917240142822,5.57988595962524,-8.29885768890381,18.1507701873779,5.97931909561157,-10.5200023651123,20.1408176422119,4.01744413375854,-10.1408576965332,19.8712902069092,5.0645899772644,-9.1905345916748,19.5542163848877,5.89608812332153,-8.09999942779541,19.2621593475342,6.31005191802979,-10.6673736572266,20.3554096221924,2.97603225708008,-10.6598329544067,19.6969032287598,2.0004780292511,-10.7596883773804,19.3268871307373,2.08992290496826,-10.4535999298096,21.4124336242676,3.39937400817871,-10.2665662765503,21.9323348999023,3.11421298980713,-10.0877733230591,22.2021808624268,3.65796494483948,-10.3209276199341,21.613899230957,3.94974088668823,-9.45490837097168,22.599365234375,4.69469785690308,-9.74240303039551,21.900821685791,5.07761812210083,-8.51956844329834,22.74631690979,5.46489000320435,-8.80372142791748,21.9650821685791,5.91362905502319,-7.38228607177734,22.6113510131836,5.85867595672607,\n-7.64917707443237,21.797420501709,6.33266592025757,-9.71762371063232,21.6514225006104,4.97159385681152,-10.2602586746216,21.3834095001221,3.80861616134644,-8.81839847564697,21.6574687957764,5.79326295852661,-7.70153617858887,21.4740352630615,6.20392799377441,-10.3768091201782,21.0263004302979,3.39235901832581,-10.5269012451172,20.9093341827393,3.0945188999176,-10.4725208282471,21.2443161010742,3.25417709350586,-10.3247337341309,21.2503776550293,3.48597979545593,-9.9367561340332,20.8117370605469,5.13730812072754,-10.357063293457,20.9667377471924,4.0233039855957,-9.07955837249756,20.6500606536865,5.98157691955566,-7.97893238067627,20.4087715148926,6.39955759048462,-10.3478708267212,21.2740516662598,2.29400300979614,-10.3102588653564,21.5990142822266,2.51279091835022,-10.6137924194336,20.0307559967041,2.17805695533752,-10.5380973815918,20.4603633880615,2.3185830116272,-10.4403657913208,20.9075145721436,2.34123802185059,-10.5755195617676,19.6662559509277,3.11494088172913,-4.94140100479126,17.8739280700684,4.00129222869873,-4.97612380981445,17.4636917114258,3.53536009788513,-5.33359622955322,17.0651969909668,3.87273693084717,-5.26266002655029,17.5366821289063,4.38091611862183,-6.29105854034424,16.4343070983887,4.43670701980591,-6.21092700958252,16.9835529327393,5.07637119293213,-7.39537382125854,16.3496284484863,4.7204909324646,-7.39244985580444,16.7444496154785,5.43789577484131,-6.20721101760864,17.2534675598145,5.04187917709351,-5.27760076522827,17.8000946044922,4.29654598236084,-7.3501033782959,17.071985244751,5.42181491851807,-5.03394889831543,18.2387256622314,4.07053804397583,-4.78293418884277,18.4348983764648,3.89891910552979,-4.87793016433716,18.0741367340088,3.92661571502686,-5.10237407684326,18.0128650665283,4.07302713394165,-6.11509895324707,18.0017032623291,5.50254487991333,-5.29883909225464,18.1063289642334,4.63043785095215,-7.23719167709351,17.9726581573486,5.96456384658813,-5.95145320892334,18.9130210876465,5.77475690841675,-5.18693590164185,18.920955657959,4.92147922515869,-7.04634428024292,19.0347785949707,6.28103971481323,\n-4.6217041015625,18.9564056396484,4.13157510757446,-4.62470102310181,18.3164520263672,3.02352404594421,-4.7248101234436,17.9464931488037,3.11292791366577,-4.51037693023682,20.0530071258545,4.40684223175049,-4.71004295349121,20.3304882049561,4.90087223052979,-4.56726694107056,20.9394416809082,4.59377288818359,-4.35948419570923,20.5811710357666,4.11555480957031,-5.43325090408325,20.9151668548584,5.8080849647522,-5.26133918762207,21.6401462554932,5.40557098388672,-6.46559047698975,21.430269241333,6.30997800827026,-6.23515176773071,22.2238006591797,5.85213756561279,-5.52689790725708,20.6928539276123,5.68198585510254,-4.81517601013184,20.1379241943359,4.73164081573486,-6.54590797424316,21.1376686096191,6.1784839630127,-4.5201358795166,19.8827934265137,4.26319885253906,-4.56601285934448,19.5458679199219,4.10498094558716,-4.73723888397217,19.736328125,4.3483510017395,-4.71576499938965,19.9674053192139,4.4367880821228,-4.97689390182495,19.7361011505127,4.93532705307007,-5.74875497817993,19.8537902832031,5.84723806381226,-6.81026935577393,20.1309928894043,6.36625528335571,-4.31273984909058,19.8936004638672,3.31704807281494,-4.27538108825684,20.218620300293,3.53579592704773,-4.57782793045044,18.6501159667969,3.20124411582947,-4.50393390655518,19.0801334381104,3.34146690368652,-4.40440893173218,19.5268745422363,3.36442470550537,-10.8431606292725,18.7861003875732,2.44014716148376,-10.8136606216431,18.3081283569336,2.83754062652588,-10.4479379653931,17.3849391937256,3.61761784553528,-10.7177801132202,19.3129863739014,1.98497116565704,-10.6137723922729,19.7006969451904,1.89566814899445,-10.0405826568604,22.2164440155029,3.56492018699646,-10.2168340682983,21.952543258667,3.02945613861084,-9.41473770141602,22.6083793640137,4.58975505828857,-8.49272918701172,22.7543716430664,5.34907007217407,-7.37042284011841,22.621467590332,5.80231285095215,-10.2635154724121,21.6095638275146,2.41238903999329,-10.303807258606,21.2677593231201,2.18731999397278,-10.4946060180664,20.4584579467773,2.21803116798401,-10.568359375,20.0347576141357,2.07991313934326,\n-10.3974113464355,20.8989925384521,2.24075198173523,-5.01321506500244,17.4525814056396,3.42841100692749,-6.31224870681763,16.4389591217041,4.31868124008179,-7.50874900817871,16.3715438842773,4.59366989135742,-4.75371122360229,17.9487895965576,2.99597120285034,-4.64967203140259,18.3364906311035,2.90667319297791,-4.38688993453979,20.619026184082,4.01771926879883,-4.5924391746521,20.9702587127686,4.48846530914307,-5.2790470123291,21.6623973846436,5.2908182144165,-6.23852682113647,22.2387561798096,5.73119115829468,-4.29944610595703,20.2453670501709,3.42338895797729,-4.3397068977356,19.9035568237305,3.19832611083984,-4.6042652130127,18.6705570220947,3.09091997146606,-4.53046989440918,19.0942478179932,3.22904109954834,-4.43331813812256,19.5347919464111,3.25175809860229,-7.14405488967896,23.9239101409912,5.65244483947754,-7.72733306884766,24.1056079864502,5.47485208511353,-6.49145746231079,23.8214664459229,5.74526596069336,-6.57458209991455,23.7810745239258,5.88676261901855,-7.17207098007202,23.8744888305664,5.79700756072998,-6.33581447601318,22.3091201782227,5.86684417724609,-7.37212753295898,22.6595153808594,5.87273836135864,-8.39966011047363,22.7811946868896,5.51699161529541,-7.70609426498413,24.041223526001,5.63918304443359,-10.4553146362305,20.3231563568115,3.23345708847046,-4.8855938911438,18.9875259399414,4.20944452285767,-12.9825353622437,10.6990766525269,0.844066858291626,-9.8389253616333,9.49735069274902,3.17830562591553,-11.0604057312012,9.69466495513916,2.83606219291687,-12.2783145904541,10.1694393157959,2.32021045684814,-11.1309700012207,17.2452526092529,2.54634737968445,-6.70162296295166,9.45798778533936,2.01733946800232,-6.35541391372681,13.8766040802002,2.74241423606873,-10.977728843689,15.8941841125488,3.68716859817505,-10.7990818023682,16.9118976593018,3.76513743400574,-10.4266233444214,17.058614730835,3.71678614616394,-6.86694240570068,15.0654487609863,4.30618381500244,-6.77264976501465,16.0406074523926,4.2553129196167,-6.98142719268799,16.3520584106445,4.27755880355835,-7.20883512496948,14.8501043319702,4.19879293441772,\n-7.98394060134888,14.8931560516357,4.27120780944824,-7.44306898117065,13.9275770187378,4.12924718856812,-8.74346828460693,12.9331617355347,3.70751571655273,-9.87979412078857,12.9458312988281,3.54778790473938,-9.63815402984619,11.1837491989136,3.82065033912659,-10.0478620529175,13.1829557418823,3.4830207824707,-9.99559593200684,15.3371992111206,3.90790176391602,-10.7288208007813,15.5589847564697,3.66854119300842,-10.4732303619385,16.7847728729248,4.27841186523438,-10.7414121627808,16.6679668426514,3.98403811454773,-10.7801752090454,16.2029762268066,4.13446187973022,-10.5451440811157,16.0811061859131,4.50478982925415,-10.8121566772461,15.845027923584,3.79723620414734,-10.5918312072754,15.5369853973389,3.99283981323242,-9.8531322479248,16.5995903015137,4.68393802642822,-10.0126037597656,15.9286870956421,4.81835794448853,-9.79456615447998,16.833423614502,4.26952695846558,-10.0595607757568,15.3670091629028,4.39897203445435,-9.90972423553467,15.9085750579834,4.89311122894287,-9.76378726959229,16.6339874267578,4.74866676330566,-9.63790130615234,16.8885154724121,4.3174467086792,-10.073974609375,13.2618465423584,3.8615391254425,-10.0949974060059,13.3742513656616,4.06807279586792,-9.93121242523193,13.1100921630859,3.85573220252991,-9.93566513061523,13.3040990829468,4.16085386276245,-8.04547023773193,16.2815895080566,5.02835702896118,-7.9120717048645,16.4583759307861,4.65794610977173,-8.78007221221924,13.1069211959839,4.28314590454102,-8.10359859466553,15.5371837615967,5.12908601760864,-8.78834533691406,12.9926528930664,4.06723880767822,-7.94412708282471,16.2080841064453,4.99466705322266,-8.15055847167969,14.9756393432617,4.70975494384766,-7.21701669692993,16.1169757843018,4.808424949646,-6.93839693069458,15.8880319595337,4.60305595397949,-7.13570690155029,15.0910511016846,4.39565181732178,-7.50561809539795,14.9041223526001,4.49521207809448,-7.49339818954468,15.455249786377,5.00152015686035,-7.12892198562622,15.4541702270508,4.72877597808838,-11.960880279541,8.69771385192871,-0.577697277069092,-11.5644798278809,8.31119823455811,0.719232320785522,\n-9.98414611816406,7.77302694320679,2.08830571174622,-7.71604347229004,7.88915014266968,0.612167298793793,-7.12976217269897,8.13741683959961,-0.166500449180603,-5.55260038375854,13.8195657730103,2.01810598373413,-8.30417728424072,14.0667724609375,4.03354072570801,-8.42895317077637,14.1100664138794,4.42929649353027,-8.49184799194336,14.1423807144165,4.64357471466064,-9.92403411865234,14.4718418121338,4.48916864395142,-10.0594902038574,14.4750490188599,4.39139747619629,-10.0653839111328,14.5165367126465,4.18185234069824,-10.0170516967773,14.4528198242188,3.73347544670105,-10.6282987594604,14.4023456573486,3.52199649810791,-11.1519660949707,14.6864976882935,3.16790533065796,-6.0496187210083,16.210147857666,3.62929964065552,-5.52847290039063,16.432502746582,2.72674059867859,-5.1138014793396,16.7278308868408,1.33719766139984,-4.04904317855835,20.0559196472168,2.61531281471252,-2.9605450630188,24.8765544891357,1.97136247158051,-8.53282833099365,25.5782012939453,-0.167569786310196,-7.2937650680542,25.4874401092529,-1.2387101650238,-6.69637012481689,20.8182544708252,-0.437250256538391,-6.78883934020996,19.5983657836914,-0.931529581546783,-7.79493093490601,21.0932102203369,-0.550122499465942,-8.24923992156982,19.919095993042,-0.793532073497772,-9.85042095184326,21.1344356536865,1.4140750169754,-6.34611320495605,30.1234512329102,-2.03741860389709,-3.00656962394714,29.5073680877686,-1.64515149593353,-7.61297512054443,30.4295654296875,-1.03620731830597,-6.9022479057312,23.9386539459229,-0.779977381229401,-7.73476505279541,24.0522499084473,-0.513817012310028,-8.55404090881348,24.098482131958,-0.00429400010034442,-6.07827711105347,23.7995223999023,-0.819948017597198,-9.09116077423096,24.1179275512695,0.669364988803864,-8.82097244262695,21.1544666290283,-0.0337934046983719,-10.2090940475464,19.7163257598877,1.54994201660156,-4.55348634719849,20.4048652648926,0.333448827266693,-3.93064165115356,20.2453536987305,1.51111578941345,-9.47872734069824,19.8350925445557,-0.205843016505241,-4.6202917098999,19.166784286499,0.233948364853859,\n-4.28858947753906,18.9484272003174,1.52898347377777,-11.0581102371216,15.5564050674438,-2.05969452857971,-9.50326728820801,15.4665489196777,-3.09563803672791,-7.92887163162231,15.1350746154785,-3.01180362701416,-11.6202058792114,11.8649482727051,-3.26003575325012,-11.0205383300781,9.33058452606201,-3.03233504295349,-9.53904724121094,9.11799430847168,-3.27702498435974,-11.9436025619507,10.5540609359741,-3.18816900253296,-10.7425470352173,18.7471675872803,1.2680721282959,-8.49007797241211,11.4475383758545,-3.97062849998474,-5.36550998687744,17.0619297027588,3.7610821723938,-5.16892051696777,17.7754745483398,0.453923910856247,-5.31424140930176,17.0466690063477,0.200038015842438,-7.15298080444336,18.741907119751,-1.61566770076752,-7.37722444534302,17.8142032623291,-2.12625551223755,-9.97894859313965,18.9974765777588,-0.436901986598969,-10.341685295105,18.2764854431152,-0.9609055519104,-8.89304828643799,18.1247253417969,-2.02328205108643,-8.64704895019531,19.093147277832,-1.49808049201965,-13.1437149047852,9.83644771575928,-0.0898819267749786,-7.65170097351074,8.7472505569458,-2.73987889289856,-8.46947383880615,10.3621530532837,-4.15896272659302,-8.62954139709473,8.94725894927979,-3.22196006774902,-12.451057434082,9.42442798614502,1.84179270267487,-11.1691188812256,9.07114124298096,2.62692499160767,-9.90255355834961,8.8194408416748,2.72341012954712,-7.16649913787842,8.72556114196777,1.34422612190247,-5.3003306388855,17.4527645111084,2.83650398254395,-3.26730012893677,23.4545974731445,1.46349477767944,-8.75578308105469,16.6359462738037,4.55581665039063,-9.19984149932861,23.223331451416,0.919034540653229,-8.06709289550781,23.1356105804443,-0.251145720481873,-7.29653930664063,23.1012573242188,-0.328930914402008,-6.29547739028931,23.0096740722656,-0.55564147233963,-4.18616390228271,22.5705108642578,0.401069700717926,-3.58845591545105,22.4750595092773,1.47205495834351,-5.47275114059448,14.6036062240601,-0.850140690803528,-6.11708164215088,10.841118812561,-1.87295246124268,-6.24943923950195,9.87539100646973,-2.08078861236572,\n-7.33695316314697,8.59652614593506,-1.79107713699341,-5.08327388763428,17.59348487854,1.47210896015167,-4.16270542144775,20.8470230102539,2.31506681442261,-3.93086719512939,21.1655197143555,1.51504921913147,-4.44866847991943,21.3714351654053,0.426523655653,-6.53822183609009,21.7981338500977,-0.452313303947449,-7.59814071655273,22.0085067749023,-0.446690887212753,-8.50289535522461,22.029935836792,-0.0925770252943039,-9.50238704681396,22.0265922546387,1.2452974319458,-9.9237585067749,22.0253047943115,1.93845045566559,-10.0915231704712,22.1119232177734,2.2798593044281,-4.96741628646851,14.2409353256226,0.383612722158432,-5.56505680084229,10.3705987930298,-0.355221420526505,-5.70119285583496,9.17764377593994,-0.628493666648865,-12.0434112548828,15.1893663406372,1.87365484237671,-13.1068925857544,11.2270574569702,-0.273940622806549,-13.0960330963135,10.077766418457,-0.766599833965302,-11.8764390945435,9.0099458694458,-1.23530924320221,-11.2157173156738,17.9049034118652,1.06689035892487,-12.2845411300659,15.3625402450562,0.230948716402054,-8.41444396972656,9.42227172851563,2.86235332489014,-8.31547164916992,8.57957553863525,2.64106416702271,-8.73727798461914,7.74562072753906,1.61132657527924,-4.36162328720093,19.290943145752,2.58747148513794,-4.14960670471191,19.6016788482666,1.52699172496796,-4.56807804107666,19.7895317077637,0.255820155143738,-6.74493312835693,20.2061576843262,-0.660114347934723,-8.02211284637451,20.5025787353516,-0.674666404724121,-9.1498498916626,20.4374542236328,-0.119818203151226,-10.0297594070435,20.4253807067871,1.48200845718384,-4.66221380233765,18.1281929016113,2.47184419631958,-8.2876443862915,11.0393209457397,3.44339275360107,-6.68867588043213,11.1985206604004,2.32214212417603,-5.47720193862915,11.5189723968506,-0.246140405535698,-5.84426736831665,11.9166507720947,-1.67456555366516,-8.32313919067383,12.6680364608765,-3.58693480491638,-9.90711784362793,12.8571147918701,-3.5450963973999,-11.3485116958618,13.0391597747803,-2.74964785575867,-12.8485689163208,12.8292036056519,-0.356148988008499,-12.7300281524658,12.3465728759766,1.19345235824585,\n-11.7639751434326,11.9589366912842,2.69383668899536,-10.679515838623,11.5935859680176,3.43924808502197,-8.73316478729248,13.1642179489136,4.12282800674438,-9.32520866394043,12.4223680496216,3.61370396614075,-8.1046724319458,12.4125928878784,3.56111311912537,-8.73285865783691,13.2765378952026,4.34218788146973,-9.93310737609863,13.5609140396118,4.23305797576904,-10.0881977081299,13.585015296936,4.12997817993164,-10.072416305542,13.4894390106201,3.91964173316956,-4.44678640365601,18.7491111755371,2.5683581829071,-1.67838835716248,30.9184226989746,3.30307817459106,-1.89689028263092,29.7673435211182,3.16651940345764,-1.48467254638672,30.6766414642334,-0.48382967710495,-1.7151745557785,29.5061206817627,-0.388914227485657,-6.41028499603271,31.5402603149414,-2.31122922897339,-6.5544581413269,30.2641086578369,-2.10232305526733,-3.24189710617065,29.6542873382568,-1.98031175136566,-3.03120398521423,30.9302921295166,-2.10327386856079,-7.3973708152771,31.8299655914307,-1.48837494850159,-4.9675407409668,29.930456161499,-2.2727963924408,-4.79024934768677,31.2233638763428,-2.47925400733948,-9.770339012146,25.5654220581055,1.26073324680328,-9.85008811950684,24.02073097229,1.29150104522705,-9.17105197906494,25.6180114746094,0.238064646720886,-2.88398265838623,23.4223175048828,1.98747265338898,-2.61478137969971,24.807092666626,2.1091001033783,-2.56298756599426,24.7260589599609,1.49513530731201,-5.90561532974243,25.2055416107178,-1.69911050796509,-7.58888959884644,25.4344844818115,-1.33208465576172,-7.79577255249023,23.9981422424316,-0.78133100271225,-6.14341640472412,23.8105087280273,-1.14786982536316,-8.66501331329346,25.5624618530273,-0.423734158277512,-8.7342700958252,24.0813789367676,-0.242949396371841,-9.33136463165283,24.1186485290527,0.482575416564941,-8.29786491394043,32.2326049804688,-0.562160134315491,-8.68968200683594,30.9222812652588,-0.11330646276474,-7.68600034713745,30.5278968811035,-1.28661370277405,-2.92589402198792,23.4454593658447,1.46366250514984,-9.41505527496338,25.5495491027832,1.24658966064453,-4.78476047515869,29.7980289459229,-1.9929701089859,\n-5.70963573455811,25.2698745727539,-1.25907444953918,-4.05296611785889,24.9229850769043,-1.07812261581421,-1.94002258777618,29.5671463012695,2.09152460098267,-1.39111661911011,29.5243148803711,1.60391390323639,-1.16515398025513,30.6779403686523,1.79934179782867,-1.99050807952881,29.5482559204102,0.0322921723127365,-3.18263959884644,24.8409614562988,0.259835541248322,-3.07358360290527,24.7372646331787,-0.0272905211895704,-3.43370652198792,23.3883876800537,-0.0178845003247261,-3.67771339416504,23.4529304504395,0.146148890256882,-7.45057773590088,25.4977970123291,-1.47797501087189,-8.73250484466553,25.5885562896729,-0.433179765939713,-3.90392780303955,24.9208126068115,-1.19340264797211,-2.86472368240356,24.7657909393311,-0.011822797358036,-1.67441141605377,29.4105987548828,0.0618886798620224,-1.62392604351044,29.4356174468994,2.00085210800171,-1.67769014835358,29.4277153015137,-0.223505362868309,-2.7168333530426,29.4735317230225,-1.74457061290741,-6.49990940093994,30.0751152038574,-2.27876472473145,-7.80963659286499,30.3906288146973,-1.30389845371246,-6.38909339904785,30.0582504272461,-2.29767990112305,-4.85936498641968,29.7197151184082,-2.37516093254089,-4.67512845993042,29.6648483276367,-2.31193327903748,-2.94767832756042,29.4246482849121,-1.96411395072937,-7.28996992111206,25.404899597168,-1.47658205032349,-5.74078607559204,25.2103366851807,-1.61829805374146,-2.64102792739868,24.8287105560303,1.95682787895203,-2.86312246322632,24.7931175231934,0.245301082730293,-8.79531478881836,30.7474327087402,-0.181498900055885,-9.689621925354,25.6373138427734,1.0596616268158,-8.80739498138428,25.5922794342041,-0.354497760534287,-7.88753986358643,30.4436473846436,-1.22313511371613,-4.01765489578247,24.8804779052734,-1.40720963478088,-5.62358236312866,25.1768970489502,-1.58816146850586,-7.27921152114868,7.94315719604492,1.11295449733734,-8.45061302185059,7.78688621520996,2.35225319862366,-9.98027992248535,7.93115139007568,2.6541576385498,-11.047269821167,8.17732429504395,2.32532548904419,-12.2088813781738,8.54818725585938,1.43931353092194,\n-12.7967157363892,8.97920799255371,-0.303374022245407,-12.7254018783569,9.27799606323242,-1.02359855175018,-11.641375541687,9.70815277099609,-3.30064821243286,-8.47558498382568,9.39766216278076,-3.92700147628784,-6.57959508895874,8.94561100006104,-2.03293538093567,-6.16128015518188,8.42148208618164,-0.628806829452515,-5.90454864501953,11.2130336761475,1.26543307304382,-5.86439990997314,9.76661205291748,1.05129361152649,-6.4172043800354,8.82000827789307,0.554828345775604,-6.70876121520996,8.10266876220703,0.363239943981171,-11.5861968994141,9.22538471221924,-2.12491774559021,-12.200852394104,9.57963943481445,-2.46441507339478,-12.4662971496582,10.3750247955322,-2.37286257743835,-12.2984609603882,11.5450801849365,-1.93835651874542,-12.0142498016357,12.9365711212158,-1.61892592906952,-11.8456659317017,15.5341367721558,-1.05990767478943,-10.8601474761963,18.0437698364258,0.00694957328960299,-10.4829511642456,18.8434734344482,0.322913497686386,-9.9399585723877,19.8044834136963,0.532618045806885,-9.69186401367188,20.4600238800049,0.586481034755707,-9.4355001449585,21.1805152893066,0.577586591243744,-9.07950115203857,22.0507411956787,0.495223522186279,-8.69851875305176,23.1948986053467,0.245849296450615,-10.6943483352661,7.97740316390991,1.57557725906372,-13.0784387588501,3.61403799057007,-0.387950003147125,-12.8692493438721,4.23402261734009,-1.01961994171143,-13.2165336608887,2.53907871246338,-1.87767601013184,-13.5263395309448,2.08693170547485,-1.34906196594238,-12.6889476776123,3.79180359840393,-3.03223824501038,-12.6107130050659,5.16541290283203,-1.5162969827652,-7.36189794540405,2.22572088241577,-0.511403024196625,-7.24243593215942,1.49262166023254,-1.1971937417984,-7.38548421859741,2.73870873451233,-0.895566046237946,-10.3434047698975,5.47505474090576,1.90369594097137,-9.15979862213135,5.06887292861938,1.77098703384399,-10.1975927352905,6.29252099990845,1.84975600242615,-12.2415580749512,5.60246610641479,0.202421009540558,-12.090048789978,5.80620241165161,-0.00566900009289384,-12.0125188827515,5.61300611495972,-2.9149649143219,\n-12.4945268630981,5.89366149902344,-1.5122481584549,-12.288122177124,8.53469848632813,-0.661285996437073,-10.0408840179443,7.49992418289185,2.37230896949768,-10.8403167724609,7.73344993591309,1.77250003814697,-11.8306217193604,8.09218406677246,0.793708145618439,-12.4908933639526,4.76606798171997,0.651835978031158,-11.4628305435181,5.29583501815796,1.38202595710754,-11.2533559799194,6.22149276733398,1.20992994308472,-7.73828792572021,4.31135606765747,-0.0834570005536079,-7.36683702468872,5.3244800567627,-0.599408984184265,-7.6968674659729,5.50474500656128,0.0933770015835762,-8.26981353759766,3.98673677444458,1.2019350528717,-7.79680776596069,2.94683361053467,0.581601023674011,-7.7964768409729,3.48446178436279,0.153815001249313,-7.51640558242798,2.0345447063446,0.0756840035319328,-7.43048810958862,0.782142877578735,-0.238389015197754,-7.2607421875,0.956801772117615,-0.765235006809235,-6.80239152908325,7.91194725036621,-0.18758200109005,-7.47235488891602,7.62311172485352,0.697570025920868,-7.10959148406982,5.24039697647095,-1.22375595569611,-7.15163803100586,2.74867963790894,-1.48444199562073,-13.5382461547852,1.32446682453156,-2.14271998405457,-13.7687711715698,1.20945179462433,-1.80898201465607,-13.7865257263184,0.619542837142944,-1.92636489868164,-13.8336715698242,0.692019820213318,-1.84797203540802,-13.275411605835,1.67556774616241,-2.74921131134033,-7.40010452270508,0.384649813175201,-0.667990982532501,-7.50181102752686,0.383126795291901,-0.246661990880966,-7.4935622215271,0.295691817998886,-0.348820000886917,-12.5759296417236,3.31683683395386,-0.301581025123596,-13.0212831497192,1.85254681110382,-1.13734900951386,-12.1232957839966,3.64946269989014,-2.99026703834534,-9.45137023925781,4.73715019226074,1.26457500457764,-10.3113994598389,5.03661108016968,1.32882297039032,-11.0880308151245,4.88765811920166,1.00634694099426,-8.09423446655273,1.9600578546524,-0.0253519993275404,-7.59573745727539,2.73560667037964,-1.80734515190125,-7.79568910598755,1.32014381885529,-1.33666396141052,-8.01313209533691,0.81684684753418,-0.335142999887466,\n-13.0765466690063,0.547282814979553,-1.87284886837006,-13.2974462509155,1.06627893447876,-1.44371700286865,-13.384578704834,0.557447791099548,-1.44182395935059,-13.3176727294922,0.441362798213959,-1.55895602703094,-12.6973543167114,1.59488666057587,-2.65003705024719,-7.99213790893555,0.389781802892685,-0.759375989437103,-8.08319854736328,0.458545804023743,-0.323071002960205,-8.32713985443115,2.78943872451782,0.408313006162643,-11.4524984359741,5.48662090301514,-2.54562592506409,-11.9944133758545,4.41262006759644,0.512112021446228,-8.72068881988525,3.83208870887756,0.878419995307922,-7.89028644561768,4.91850280761719,-1.55553901195526,-8.07210922241211,0.331777811050415,-0.469390988349915,-13.578953742981,0.723118782043457,-2.18435406684875,-7.49672365188599,7.75520133972168,0.68902975320816,-6.83512830734253,8.03997993469238,-0.185473844408989,-7.51865577697754,7.76859617233276,0.681343555450439,-7.49779415130615,7.75494289398193,0.689776122570038,-10.035210609436,7.63272142410278,2.3439085483551,-10.8281936645508,7.86738109588623,1.75704264640808,-11.800537109375,8.24606800079346,0.791858673095703,-12.2553968429565,8.65648651123047,-0.652927100658417,-11.0982122421265,8.02239799499512,-3.42560195922852,-9.46175289154053,7.83151817321777,-3.76968502998352,-9.53649520874023,9.05328750610352,-3.69054698944092,-11.2665252685547,9.25102138519287,-3.36247611045837,-7.74278497695923,7.43448352813721,-2.94955992698669,-7.38186693191528,8.56259822845459,-3.01850891113281,-9.60508728027344,6.65043973922729,-3.84368181228638,-11.0673961639404,6.79414558410645,-3.49132299423218,-10.9090061187744,5.57353115081787,-3.57667922973633,-9.63772296905518,5.45862197875977,-3.88288307189941,-8.27865886688232,4.78107595443726,-0.436830013990402,-8.41143703460693,5.26224374771118,-3.16524219512939,-8.09701728820801,6.30043649673462,-3.07590699195862,-8.33622741699219,4.25156307220459,-0.654892027378082,-8.56227493286133,4.79242277145386,-0.544656991958618,-8.30243015289307,5.03695392608643,-2.40793538093567,-7.96504688262939,4.61126375198364,-2.47431945800781,\n-10.6739253997803,5.43777275085449,-3.33545923233032,-9.72132396697998,5.32747507095337,-3.48603796958923,-8.81702327728271,5.16764783859253,-2.94468188285828,-12.6551265716553,-1.1994891166687,-3.36292910575867,-12.6812009811401,-1.81898605823517,-3.45780301094055,-12.3639993667603,-1.8203901052475,-4.15120506286621,-12.3217802047729,-0.63344419002533,-4.16046380996704,-12.2639923095703,-0.401669174432755,8.50428581237793,-12.5707387924194,0.20113180577755,8.32594203948975,-10.8718614578247,0.0163587927818298,8.17275428771973,-10.9237976074219,-0.546308159828186,8.32784652709961,-14.7877540588379,-1.05375719070435,2.97234511375427,-14.9249362945557,-0.975921213626862,3.67831110954285,-14.9135770797729,-1.4562371969223,3.6388852596283,-14.836766242981,-1.48871624469757,3.06584906578064,-14.3331708908081,-1.00264811515808,1.14896094799042,-14.330602645874,-1.48213016986847,1.29319405555725,-13.8479719161987,-1.26087915897369,0.0456670001149178,-13.8695812225342,-0.733412146568298,0.03099500015378,-13.1961078643799,-0.682488203048706,-1.74533605575562,-13.2561845779419,-0.267994195222855,-1.52676200866699,-11.4108591079712,-0.704488158226013,-1.43015098571777,-12.3429641723633,-1.29646420478821,0.430689007043839,-11.3169937133789,-0.633855223655701,-5.43679094314575,-11.3333263397217,0.324207812547684,-5.34990787506104,-12.2897281646729,0.29148280620575,-4.15824413299561,-8.32677936553955,0.285849809646606,-4.91607284545898,-8.31762981414795,-0.635810136795044,-4.98647403717041,-7.6367335319519,-0.634946227073669,-3.36898493766785,-7.64520740509033,0.290466815233231,-3.37043809890747,-8.45136737823486,-0.397370189428329,-0.0700289979577065,-8.27342128753662,-0.602357149124146,-0.857776939868927,-8.65068626403809,-1.2792421579361,1.60765111446381,-8.70820045471191,-0.889460206031799,1.7451479434967,-8.64849853515625,-1.00339412689209,3.05018901824951,-8.62150001525879,-1.4825621843338,3.14198398590088,-9.57847595214844,-0.684286117553711,7.05243635177612,-9.74707221984863,-1.13764321804047,7.29845905303955,-9.13314819335938,-0.710844159126282,4.47330093383789,\n-8.91466617584229,-0.682887196540833,2.9658670425415,-8.77879047393799,-0.749664187431335,3.01093411445618,-8.95795822143555,-0.772237181663513,4.49947786331177,-8.83813381195068,-1.01499819755554,2.99324297904968,-8.99276161193848,-1.04494822025299,4.47025680541992,-9.83040523529053,-0.401700139045715,6.98186683654785,-9.82599067687988,-0.687571167945862,6.98602962493896,-10.9493865966797,-0.0893782079219818,7.89767122268677,-10.8741941452026,0.094377800822258,7.85318899154663,-10.0532426834106,-0.354868203401566,6.91146230697632,-10.897255897522,0.103166803717613,7.72143602371216,-14.7188110351563,-0.979119181632996,3.75472784042358,-14.6068019866943,-1.05330717563629,3.03254795074463,-14.5829191207886,-0.793511152267456,3.01690411567688,-14.697904586792,-0.660182237625122,3.76196217536926,-13.7142362594604,-0.10202220082283,7.11313772201538,-14.6809797286987,-0.7016361951828,5.42782211303711,-14.631495475769,-0.364508181810379,5.4440450668335,-13.6660346984863,0.0949728041887283,7.06012010574341,-14.3699359893799,-0.789545178413391,3.0537269115448,-14.5029563903809,-0.657171249389648,3.8249819278717,-14.4187536239624,-0.348812192678452,5.51281881332397,-13.6329202651978,0.0565158165991306,6.87230396270752,-14.1662549972534,-0.738821148872375,1.21650302410126,-14.1754846572876,-1.00521314144135,1.21228504180908,-13.6872749328613,-0.738984107971191,0.0732659995555878,-13.7096109390259,-0.471031188964844,0.033585999161005,-14.035943031311,-0.733028173446655,1.27240085601807,-13.4088859558105,-0.425395220518112,0.0608309991657734,-13.2755498886108,-0.115318208932877,-1.12270414829254,-13.0557823181152,-0.0804621875286102,-1.07290995121002,-13.068621635437,-0.272237211465836,-1.50460398197174,-12.1045236587524,0.593280792236328,-4.14091396331787,-12.1193447113037,0.299488812685013,-4.08871221542358,-11.7931108474731,0.634377837181091,-4.0986008644104,-11.2735862731934,0.719097793102264,-5.15583181381226,-11.0836772918701,0.714048802852631,-4.91463613510132,-11.2509965896606,0.347086817026138,-5.14843416213989,-9.70920753479004,0.712418794631958,-4.88926315307617,\n-9.66789436340332,0.723107814788818,-5.11510419845581,-8.42803859710693,0.688478827476501,-4.66739702224731,-8.63442325592041,0.710941791534424,-4.48368692398071,-9.70443153381348,0.322440803050995,-5.12207412719727,-8.41786479949951,0.301627814769745,-4.63700103759766,-8.54096221923828,1.32825684547424,-4.59067678451538,-8.0074405670166,1.22241985797882,-3.54224491119385,-8.04832363128662,3.33798861503601,-3.17081809043884,-8.67496490478516,3.68233776092529,-4.08474493026733,-7.8871545791626,0.281323790550232,-3.40791130065918,-7.85482978820801,0.642930805683136,-3.39109182357788,-8.13710689544678,0.850011765956879,-0.800619006156921,-8.28289604187012,2.25278782844543,-0.764258027076721,-8.43003940582275,-0.157711207866669,-0.858825087547302,-8.32692623138428,0.194879800081253,-0.860629975795746,-8.52881240844727,1.08460581302643,1.5599889755249,-8.53865146636963,1.25685679912567,0.95725691318512,-8.5357666015625,1.04977083206177,0.68256801366806,-8.56322479248047,0.566658794879913,1.55015695095062,-8.61183166503906,-0.425197243690491,-0.065311998128891,-8.89294719696045,-0.911311149597168,1.74111795425415,-8.79252433776855,-0.633555173873901,1.78056597709656,-8.5108757019043,-0.101994186639786,0.000698000018019229,-12.351466178894,0.262531816959381,7.76197957992554,-12.4312696456909,0.319948792457581,7.95019292831421,-12.4569158554077,0.0845468044281006,8.01053619384766,-13.8941841125488,0.467521786689758,3.5477340221405,-14.2799406051636,0.0541978180408478,3.53433966636658,-14.2880802154541,0.228603810071945,3.23221206665039,-13.9849233627319,0.619996786117554,3.28688502311707,-13.6181030273438,0.60854184627533,6.72478246688843,-14.4104146957397,0.390134811401367,5.51559019088745,-14.0933837890625,0.810905814170837,5.57533311843872,-13.5700387954712,0.956074774265289,6.39302587509155,-13.8625802993774,0.872631728649139,1.93436586856842,-13.1583271026611,1.43147194385529,2.3733389377594,-13.2172756195068,0.964958786964417,2.69189310073853,-13.7842702865601,0.587464809417725,2.18322610855103,-12.4318504333496,2.01933884620667,2.85682392120361,\n-12.5068588256836,1.38099682331085,3.19997715950012,-10.8144855499268,1.08549284934998,7.2902398109436,-12.2734613418579,1.22508585453033,7.33208894729614,-12.0701723098755,1.55995881557465,6.43063402175903,-10.6623516082764,1.37352383136749,6.64068698883057,-10.2347812652588,1.02646374702454,6.79868507385254,-9.9075870513916,0.466396808624268,6.90527582168579,-10.8436546325684,0.709422826766968,7.58692121505737,-9.14296531677246,0.764719843864441,4.57133388519287,-8.77550888061523,0.210297808051109,4.60690784454346,-9.33541011810303,1.13661181926727,5.08978414535522,-9.58052635192871,1.00581681728363,4.8911828994751,-9.13905906677246,1.31009376049042,4.46836519241333,-8.60823631286621,2.43657970428467,1.41375398635864,-9.29010486602783,2.85858273506165,1.81270503997803,-9.71137714385986,1.92487692832947,4.1512770652771,-10.0960521697998,3.6826000213623,1.92870700359344,-10.3535137176514,2.31923270225525,3.88383197784424,-11.0846672058105,3.66235661506653,1.6281658411026,-11.884204864502,3.3869047164917,1.2024530172348,-11.4515314102173,2.37581968307495,3.49674892425537,-12.5265493392944,2.84761667251587,0.686360001564026,-9.78671073913574,1.51062774658203,5.43640899658203,-10.3746118545532,1.4129958152771,4.93102598190308,-11.4895238876343,1.64424395561218,3.8477509021759,-12.6008195877075,2.62157368659973,-1.41014099121094,-12.6772747039795,2.34999775886536,-1.6421799659729,-11.6258430480957,3.59273362159729,-3.56614398956299,-11.6031827926636,3.99701476097107,-3.46526503562927,-12.4911642074585,2.62973380088806,-1.39286494255066,-11.5037336349487,4.0191216468811,-3.41252398490906,-11.6477117538452,4.7365288734436,-2.9123420715332,-10.6752662658691,5.05888700485229,-3.54006409645081,-10.7329788208008,4.73007202148438,-4.00870704650879,-10.6857452392578,4.2472767829895,-3.93189001083374,-9.69830322265625,4.9626088142395,-3.85036325454712,-8.79135131835938,4.77585315704346,-3.6133337020874,-9.78085136413574,4.31696367263794,-4.04107522964478,-8.89351463317871,4.26686573028564,-3.65700674057007,-8.9768648147583,4.52922391891479,-3.72932100296021,\n-9.71503639221191,4.64414882659912,-4.14905595779419,-8.40865230560303,3.99431371688843,-2.67772603034973,-8.20167064666748,4.30993890762329,-2.70235347747803,-8.29178237915039,3.96888780593872,-2.69999694824219,-8.25935554504395,3.6027410030365,-2.96513390541077,-8.38647270202637,2.6651337146759,-0.669996023178101,-10.858624458313,3.8950297832489,-4.24050617218018,-10.7416467666626,4.23215389251709,-4.03672790527344,-8.85915946960449,4.25843381881714,-3.7103579044342,-8.82767200469971,3.88678979873657,-3.7574679851532,-12.3203287124634,0.834373831748962,7.62035703659058,-9.93011093139648,3.94925880432129,-4.2280740737915,-9.87972068786621,4.26634979248047,-4.15164184570313,-12.9109563827515,2.17576670646667,-0.0332330018281937,-14.0064544677734,0.482846796512604,4.31903982162476,-14.3811511993408,0.0602388046681881,4.10731220245361,-13.4566841125488,0.878975749015808,4.61020994186401,-13.403115272522,1.2346738576889,5.79850912094116,-11.8692226409912,1.38857781887054,5.39097785949707,-10.4531908035278,1.27224385738373,5.82744979858398,-9.69781684875488,0.861148834228516,6.06470108032227,-9.44259929656982,0.973586857318878,5.75430202484131,-9.40438365936279,-0.639721155166626,5.52785587310791,-9.22590160369873,-0.697531223297119,5.58653020858765,-9.23768520355225,-0.931419134140015,5.58402299880981,-9.00774478912354,-0.931771218776703,5.6596360206604,-9.0374927520752,-1.4571191072464,5.59735012054443,-9.46249103546143,-1.257688164711,6.91396951675415,-13.292179107666,-1.68793714046478,5.62558317184448,-13.1693201065063,-1.85254228115082,4.26037883758545,-8.5069637298584,2.64702773094177,-0.68382602930069,-9.65490818023682,0.303108811378479,-5.39795684814453,-9.64590740203857,-0.636101245880127,-5.46976900100708,-13.3323211669922,0.870737791061401,0.106257990002632,-13.1983003616333,1.25750684738159,0.129934996366501,-14.1630382537842,0.0562498010694981,1.75165700912476,-11.8925170898438,1.22653579711914,-4.12294006347656,-11.7359161376953,3.29843640327454,-3.70321798324585,-12.968563079834,0.846431851387024,-1.85224604606628,\n-11.1305932998657,1.33086395263672,-5.03836584091187,-10.9273080825806,3.65749144554138,-4.48123788833618,-9.87257671356201,1.327556848526,-5.05620718002319,-9.91583061218262,3.76873588562012,-4.53192090988159,-8.98668956756592,-0.574045181274414,1.79792904853821,-8.65672206878662,-0.0279552042484283,-0.0313559994101524,-8.17943000793457,0.660911798477173,-3.50347018241882,-8.47450065612793,0.253890812397003,-0.846231997013092,-14.9321527481079,-0.684710144996643,5.33120679855347,-14.0031642913818,-0.023091197013855,7.31090211868286,-8.79455852508545,-1.03195118904114,4.34719085693359,-8.28165912628174,-0.135623186826706,-0.846274018287659,-9.4740161895752,0.293323814868927,6.17530202865601,-13.4723253250122,0.37716081738472,0.10164900124073,-8.48273468017578,0.658774793148041,0.337684005498886,-10.9609279632568,-1.51077425479889,7.06002187728882,-10.3187446594238,1.55065274238586,4.2269082069397,-9.59263896942139,3.9511775970459,-4.19415378570557,-9.63356876373291,4.28190660476685,-4.09221982955933,-13.0830707550049,1.09166383743286,4.85074090957642,-9.5009822845459,3.79010367393494,-4.45402717590332,-9.49314403533936,1.32746577262878,-4.98887491226196,-9.63443660736084,-1.82345807552338,-5.55305099487305,-9.14707946777344,-1.8240339756012,-5.37717390060425,-9.14474105834961,-1.13805913925171,-5.32897996902466,-10.1296558380127,-1.30436015129089,1.09980797767639,-9.15706825256348,-0.688938140869141,-1.10642194747925,-9.71644687652588,-0.692696213722229,-1.20543694496155,-11.7091445922852,-1.29876112937927,0.632021009922028,-10.6817436218262,-0.69933021068573,-1.29824805259705,-7.84287738800049,-1.89942610263824,-2.52330207824707,-8.77875328063965,-1.89924108982086,-2.67817401885986,-9.01303195953369,-1.89940023422241,-1.40217304229736,-8.07610702514648,-1.89954710006714,-1.25296998023987,-10.542236328125,-1.89899623394012,-2.25901699066162,-10.6337862014771,-1.89908516407013,-1.68281614780426,-9.75798606872559,-1.89925706386566,-1.52582097053528,-9.58230209350586,-1.8990843296051,-2.78612995147705,-8.86343860626221,-1.17721211910248,-2.69335007667542,\n-7.78657960891724,-1.1398001909256,-2.53283405303955,-9.17301654815674,-1.17705416679382,-3.33671307563782,-9.17317295074463,-1.82107496261597,-3.33675527572632,-10.0160961151123,-1.82078611850739,-4.27497577667236,-10.0307245254517,-1.17681121826172,-4.27237892150879,-8.3118782043457,-1.82325625419617,-5.07190084457397,-7.62548351287842,-1.82155406475067,-3.3740599155426,-8.46506309509277,-1.13791620731354,-5.08362579345703,-8.46026515960693,-1.82274115085602,-5.12706708908081,-11.4767608642578,-1.1769061088562,-3.52011871337891,-10.9006538391113,-1.23844015598297,-2.66865038871765,-11.4770784378052,-1.82114708423615,-3.52008390426636,-9.84247589111328,-1.1772221326828,-3.25193810462952,-9.96317100524902,-1.8214031457901,-3.27331566810608,-10.9190912246704,-1.82132935523987,-2.74039530754089,-10.428861618042,-1.1769951581955,-4.06018114089966,-10.4610366821289,-1.82123816013336,-4.06565284729004,-9.48378562927246,-1.17734205722809,-2.86669707298279,-10.6097259521484,-1.23897421360016,-2.20649099349976,-12.8990774154663,-1.20657515525818,-2.6168200969696,-13.1171998977661,-1.82286524772644,-2.07190489768982,-11.3591508865356,-1.82394111156464,-1.71986413002014,-11.2742357254028,-1.23886716365814,-2.35520100593567,-11.2741947174072,-1.82093739509583,-2.35528588294983,-11.9274044036865,-1.17659318447113,-3.287513256073,-11.9275131225586,-1.82061421871185,-3.28761601448059,-12.8821115493774,-1.82100307941437,-2.7364559173584,-11.2960643768311,-1.82078015804291,-5.52506399154663,-10.5416698455811,-1.17897522449493,-4.52999687194824,-10.5710735321045,-1.82089614868164,-4.57293176651001,-11.9882869720459,-1.82064211368561,-3.82067108154297,-11.9701585769653,-1.17954611778259,-3.78295111656189,-13.7229709625244,-1.85246515274048,4.07452917098999,-13.9891834259033,-1.68774104118347,5.40032720565796,-13.3896598815918,-1.89254415035248,2.17091298103333,-13.7069931030273,-1.89270734786987,3.45311307907104,-11.6803979873657,-1.17183661460876,6.71803712844849,-10.9550170898438,-1.17081785202026,6.93465709686279,-10.0661144256592,-1.52309918403625,3.26630568504334,\n-10.6154489517212,-1.52297914028168,3.08849000930786,-10.1624965667725,-1.52329015731812,4.62233781814575,-10.7236423492432,-1.30241513252258,6.45850467681885,-10.2997093200684,-1.48579919338226,5.18572616577148,-10.8345613479614,-1.48584806919098,5.01272392272949,-11.3562002182007,-1.30212819576263,6.27257680892944,-10.0881805419922,-1.51421213150024,2.65602207183838,-10.8880701065063,-1.30171120166779,0.885369002819061,-13.4678926467896,-1.15898716449738,6.16615104675293,-13.9943208694458,-1.15951919555664,5.99605989456177,-13.3655796051025,-1.30129718780518,5.60819101333618,-13.8941955566406,-1.30118119716644,5.4372501373291,-13.5430736541748,-1.52252817153931,3.4598650932312,-12.7836818695068,-1.5225031375885,2.36680197715759,-13.270396232605,-1.52238821983337,2.19731903076172,-12.9867782592773,-1.51305818557739,1.67463314533234,-10.7792692184448,-1.52316725254059,4.49874496459961,-13.0751523971558,-1.52264511585236,3.7069079875946,-13.1476764678955,-1.49484920501709,4.1362509727478,-10.7174825668335,-1.52064311504364,2.52428197860718,-12.4709463119507,-1.5205591917038,1.93447399139404,-13.6438522338867,-1.49474310874939,3.9940299987793,-12.8745965957642,-0.650946140289307,8.4034481048584,-13.9453248977661,-0.722079157829285,7.74784088134766,-13.9156303405762,-0.485151201486588,7.62993192672729,-12.8607053756714,-0.398309201002121,8.34536361694336,-13.4607906341553,-1.44669365882874,6.27358388900757,-11.708643913269,-1.46391832828522,6.78241014480591,-10.7793197631836,-1.82315039634705,4.49869823455811,-13.0701332092285,-1.82262897491455,3.70686101913452,-12.7837543487549,-1.82248628139496,2.36675405502319,-10.6154985427856,-1.82296216487885,3.08844399452209,-10.7160301208496,-1.82060623168945,2.52090001106262,-12.4723234176636,-1.8205281496048,1.93119895458221,-11.8795261383057,-1.81423282623291,1.03212344646454,-10.8229579925537,-1.80831921100616,1.30289947986603,-11.3640203475952,-1.61824405193329,6.26081991195679,-10.8520259857178,-1.78294909000397,5.05374383926392,-9.80314826965332,-1.43848013877869,7.41763782501221,\n-10.9754028320313,-0.861802220344543,8.42994117736816,-12.2961120605469,-0.648356199264526,8.61242866516113,-8.65401077270508,-1.82298004627228,3.72613310813904,-8.86539459228516,-1.82339334487915,5.04450702667236,-8.8872184753418,-1.48762512207031,5.0599570274353,-8.66806697845459,-1.48891818523407,3.69247674942017,-10.1625461578369,-1.82327306270599,4.62229013442993,-10.0661649703979,-1.82308197021484,3.26626110076904,-10.0813932418823,-1.82114517688751,2.65210604667664,-10.0750875473022,-1.81434404850006,1.47501397132874,-8.62293529510498,-1.80442404747009,2.03740906715393,-8.63533592224121,-1.81966722011566,3.12709999084473,-9.42062568664551,-1.61854815483093,6.85899353027344,-9.02965927124023,-1.78175115585327,5.64660120010376,-10.7314548492432,-1.61851632595062,6.44674682617188,-10.3171739578247,-1.78289532661438,5.22674703598022,-14.3864679336548,-0.906111121177673,7.10352420806885,-14.9273662567139,-1.45178020000458,5.79180288314819,-14.9044742584229,-1.14286315441132,5.70820713043213,-14.3360147476196,-0.648855209350586,7.0174560546875,-14.0326690673828,-1.44597220420837,6.05647897720337,-15.0419406890869,-1.61634719371796,5.06266784667969,-14.8922185897827,-1.7823361158371,3.67723703384399,-15.0164432525635,-1.25586915016174,5.13094186782837,-14.8399982452393,-1.82216322422028,3.04614806175232,-14.5743312835693,-1.8219473361969,1.77490186691284,-14.5593872070313,-1.48710322380066,1.7604968547821,-13.992299079895,-1.81486225128174,0.45016798377037,-14.2750339508057,-1.8190780878067,1.25383996963501,-12.6187791824341,-1.81137526035309,0.900829017162323,-13.035008430481,-1.82034909725189,1.6709531545639,-14.0747489929199,0.169742807745934,2.96360206604004,-14.34694480896,-0.806760251522064,2.41914296150208,-14.0129976272583,0.0151758203282952,1.98685896396637,-13.2320461273193,0.995352864265442,3.41252398490906,-13.8183240890503,0.575311779975891,3.10841703414917,-11.7101907730103,1.42806780338287,4.60914897918701,-12.8916282653809,1.14636778831482,4.1383581161499,-11.7699680328369,1.73828685283661,4.85970020294189,\n-9.52198696136475,1.08574879169464,4.41844892501831,-13.3160743713379,0.899752855300903,3.86537027359009,-13.3713436126709,1.15496385097504,4.15981292724609,-13.8948783874512,0.679575800895691,3.84310698509216,-12.9768419265747,1.39769685268402,4.42352294921875,-9.23659324645996,0.350918799638748,5.31175899505615,-9.15367317199707,0.277039796113968,5.81538581848145,-9.48372840881348,0.930315792560577,5.38133716583252,-14.5383815765381,-0.811367094516754,2.29166293144226,-14.5298585891724,-1.02179610729218,2.27179598808289,-14.6525802612305,-1.08479416370392,2.15895390510559,-13.2846403121948,1.05016481876373,3.67264294624329,-13.2940397262573,0.677316784858704,-0.52591997385025,-13.2968921661377,1.02870881557465,-0.218290001153946,-13.3114624023438,1.28549885749817,0.0937940031290054,-9.78981685638428,3.95010662078857,-4.1819109916687,-9.70335102081299,1.32425081729889,-4.92063999176025,-9.75296592712402,3.74058198928833,-4.40943193435669,-13.1841850280762,0.992721796035767,-0.190662994980812,-8.36301803588867,0.635875821113586,0.348857998847961,-8.41664695739746,1.24883985519409,0.968972980976105,-8.41362190246582,1.04680180549622,0.699701011180878,-7.68235921859741,-1.1401481628418,-3.09662795066834,-7.67167282104492,-1.82158994674683,-3.12445998191834,-13.410304069519,0.684789776802063,-0.563890993595123,-8.49754047393799,8.82586765289307,-3.57137799263,-8.56192398071289,7.63300037384033,-3.55192399024963,-8.88008213043213,6.491539478302,-3.68741536140442,-8.98423480987549,5.36043310165405,-3.71636414527893,-9.18995761871338,5.24069166183472,-3.38439154624939,-9.29192543029785,4.87892913818359,-3.74415731430054,-9.34595108032227,4.58668661117554,-3.93918871879578,-9.5681037902832,4.3049521446228,-3.94899106025696,-12.3848676681519,6.678795337677,-1.08676695823669,-12.0569562911987,6.41276931762695,0.186367496848106,-10.1192378997803,6.89622259140015,2.11103248596191,-7.58461141586304,6.56392812728882,0.395473510026932,-7.08461380004883,6.61821365356445,-0.39349552989006,-11.2925672531128,9.14094638824463,-3.39495158195496,\n-9.52544784545898,8.93857860565186,-3.73352289199829,-8.47273540496826,8.70798873901367,-3.6010115146637,-7.35740089416504,8.44426250457764,-3.02813529968262,-11.0158061981201,7.09106349945068,1.53347992897034,-11.9018383026123,7.38752317428589,0.497046887874603,-12.3512144088745,7.81623363494873,-0.921400249004364,-12.3507328033447,4.70240497589111,-2.97360157966614,-8.2618465423584,4.38370370864868,-1.30719125270844,-8.53772068023682,4.85830402374268,-1.03485834598541,-8.34664154052734,4.26936388015747,-1.26588129997253,-8.46986484527588,3.1554388999939,-1.43624365329742,-8.34628105163574,3.21852278709412,-1.53164660930634,-8.2733736038208,2.7988555431366,-1.6545318365097,-8.17590713500977,2.74774932861328,-1.86189317703247,-8.07227325439453,1.03621578216553,-2.17143201828003,-8.3486795425415,0.427448570728302,-1.97930431365967,-8.09087753295898,0.418905317783356,-2.12586092948914,-8.15859699249268,0.0618062913417816,-2.13336801528931,-7.8818793296814,0.132020547986031,-2.43179988861084,-7.8618049621582,-0.623425841331482,-2.48126220703125,-7.97514820098877,2.84113550186157,-0.698743879795074,-7.91939783096313,1.88133490085602,-0.698509812355042,-7.37556505203247,4.11418771743774,-0.738027811050415,-7.12800025939941,4.14944124221802,-1.3378928899765,-7.79018020629883,4.17661905288696,-1.64111828804016,-6.94105863571167,8.39327621459961,-1.99834716320038,-6.91890287399292,8.2821159362793,-2.00474405288696,-7.22366333007813,7.12326192855835,-1.87451314926147,-7.480544090271,5.81974315643311,-2.27981424331665,-7.95554208755493,5.07282066345215,-2.32199144363403,-12.2233734130859,8.90837287902832,-1.41941320896149,-12.2676200866699,8.78210067749023,-1.39806830883026,-12.2785034179688,7.96867084503174,-1.64899885654449,-12.2156171798706,6.74982690811157,-1.95364665985107,-12.2535228729248,5.75333404541016,-2.21360635757446,-12.4807224273682,4.93390893936157,-2.24494934082031,-12.7721185684204,3.99579477310181,-2.10383653640747,-8.63093948364258,7.60015678405762,1.80671334266663,-8.62113475799561,7.46664953231812,1.82989954948425,\n-8.63788414001465,6.70167589187622,1.52909469604492,-8.69423484802246,5.93398475646973,1.25737953186035,-8.65503120422363,4.89050817489624,1.31877195835114,-8.62190437316895,4.41484546661377,1.42706036567688,-9.01820659637451,4.20061016082764,1.03565382957459,-11.8353872299194,6.78268384933472,-2.71999740600586,-11.9059467315674,8.04110717773438,-2.52659678459167,-11.954478263855,9.0095157623291,-2.44830703735352,-11.9236574172974,9.11659240722656,-2.40354752540588,13.0784387588501,3.61403799057007,-0.387950003147125,12.8692493438721,4.23402261734009,-1.01961994171143,13.2165336608887,2.53907871246338,-1.87767601013184,13.5263395309448,2.08693170547485,-1.34906196594238,12.6889476776123,3.79180359840393,-3.03223824501038,12.6107130050659,5.16541290283203,-1.5162969827652,7.36189794540405,2.22572088241577,-0.511403024196625,7.24243593215942,1.49262166023254,-1.1971937417984,7.38548421859741,2.73870873451233,-0.895566046237946,10.3434047698975,5.47505474090576,1.90369594097137,9.15979862213135,5.06887292861938,1.77098703384399,10.1975927352905,6.29252099990845,1.84975600242615,12.2415580749512,5.60246610641479,0.202421009540558,12.090048789978,5.80620241165161,-0.00566900009289384,12.0125188827515,5.61300611495972,-2.9149649143219,12.4945268630981,5.89366149902344,-1.5122481584549,12.288122177124,8.53469848632813,-0.661285996437073,10.0408840179443,7.49992418289185,2.37230896949768,10.8403167724609,7.73344993591309,1.77250003814697,11.8306217193604,8.09218406677246,0.793708145618439,12.4908933639526,4.76606798171997,0.651835978031158,11.4628305435181,5.29583501815796,1.38202595710754,11.2533559799194,6.22149276733398,1.20992994308472,7.73828792572021,4.31135606765747,-0.0834570005536079,7.36683702468872,5.3244800567627,-0.599408984184265,7.6968674659729,5.50474500656128,0.0933770015835762,8.26981353759766,3.98673677444458,1.2019350528717,7.79680776596069,2.94683361053467,0.581601023674011,7.7964768409729,3.48446178436279,0.153815001249313,7.51640558242798,2.0345447063446,0.0756840035319328,7.43048810958862,0.782142877578735,-0.238389015197754,\n7.2607421875,0.956801772117615,-0.765235006809235,6.80239152908325,7.91194725036621,-0.18758200109005,7.47235488891602,7.62311172485352,0.697570025920868,7.10959148406982,5.24039697647095,-1.22375595569611,7.15163803100586,2.74867963790894,-1.48444199562073,13.5382461547852,1.32446682453156,-2.14271998405457,13.7687711715698,1.20945179462433,-1.80898201465607,13.7865257263184,0.619542837142944,-1.92636489868164,13.8336715698242,0.692019820213318,-1.84797203540802,13.275411605835,1.67556774616241,-2.74921131134033,7.40010452270508,0.384649813175201,-0.667990982532501,7.50181102752686,0.383126795291901,-0.246661990880966,7.4935622215271,0.295691817998886,-0.348820000886917,12.5759296417236,3.31683683395386,-0.301581025123596,13.0212831497192,1.85254681110382,-1.13734900951386,12.1232957839966,3.64946269989014,-2.99026703834534,9.45137023925781,4.73715019226074,1.26457500457764,10.3113994598389,5.03661108016968,1.32882297039032,11.0880308151245,4.88765811920166,1.00634694099426,8.09423446655273,1.9600578546524,-0.0253519993275404,7.59573745727539,2.73560667037964,-1.80734515190125,7.79568910598755,1.32014381885529,-1.33666396141052,8.01313209533691,0.81684684753418,-0.335142999887466,13.0765466690063,0.547282814979553,-1.87284886837006,13.2974462509155,1.06627893447876,-1.44371700286865,13.384578704834,0.557447791099548,-1.44182395935059,13.3176727294922,0.441362798213959,-1.55895602703094,12.6973543167114,1.59488666057587,-2.65003705024719,7.99213790893555,0.389781802892685,-0.759375989437103,8.08319854736328,0.458545804023743,-0.323071002960205,8.32713985443115,2.78943872451782,0.408313006162643,11.4524984359741,5.48662090301514,-2.54562592506409,11.9944133758545,4.41262006759644,0.512112021446228,8.72068881988525,3.83208870887756,0.878419995307922,7.89028644561768,4.91850280761719,-1.55553901195526,8.07210922241211,0.331777811050415,-0.469390988349915,13.578953742981,0.723118782043457,-2.18435406684875,10.6943483352661,7.97740316390991,1.57557725906372,7.49672365188599,7.75520133972168,0.68902975320816,6.83512830734253,8.03997993469238,-0.185473844408989,\n7.51865577697754,7.76859617233276,0.681343555450439,7.49779415130615,7.75494289398193,0.689776122570038,10.035210609436,7.63272142410278,2.3439085483551,10.8281936645508,7.86738109588623,1.75704264640808,11.800537109375,8.24606800079346,0.791858673095703,12.2553968429565,8.65648651123047,-0.652927100658417,11.0982122421265,8.02239799499512,-3.42560195922852,9.46175289154053,7.83151817321777,-3.76968502998352,9.53649520874023,9.05328750610352,-3.69054698944092,11.2665252685547,9.25102138519287,-3.36247611045837,7.74278497695923,7.43448352813721,-2.94955992698669,7.38186693191528,8.56259822845459,-3.01850891113281,9.60508728027344,6.65043973922729,-3.84368181228638,11.0673961639404,6.79414558410645,-3.49132299423218,10.9090061187744,5.57353115081787,-3.57667922973633,9.63772296905518,5.45862197875977,-3.88288307189941,8.27865886688232,4.78107595443726,-0.436830013990402,8.41143703460693,5.26224374771118,-3.16524219512939,8.09701728820801,6.30043649673462,-3.07590699195862,8.33622741699219,4.25156307220459,-0.654892027378082,8.56227493286133,4.79242277145386,-0.544656991958618,8.30243015289307,5.03695392608643,-2.40793538093567,7.96504688262939,4.61126375198364,-2.47431945800781,10.6739253997803,5.43777275085449,-3.33545923233032,9.72132396697998,5.32747507095337,-3.48603796958923,8.81702327728271,5.16764783859253,-2.94468188285828,12.6551265716553,-1.1994891166687,-3.36292910575867,12.6812009811401,-1.81898605823517,-3.45780301094055,12.3639993667603,-1.8203901052475,-4.15120506286621,12.3217802047729,-0.63344419002533,-4.16046380996704,12.2639923095703,-0.401669174432755,8.50428581237793,12.5707387924194,0.20113180577755,8.32594203948975,10.8718614578247,0.0163587927818298,8.17275428771973,10.9237976074219,-0.546308159828186,8.32784652709961,14.7877540588379,-1.05375719070435,2.97234511375427,14.9249362945557,-0.975921213626862,3.67831110954285,14.9135770797729,-1.4562371969223,3.6388852596283,14.836766242981,-1.48871624469757,3.06584906578064,14.3331708908081,-1.00264811515808,1.14896094799042,14.330602645874,-1.48213016986847,1.29319405555725,\n13.8479719161987,-1.26087915897369,0.0456670001149178,13.8695812225342,-0.733412146568298,0.03099500015378,13.1961078643799,-0.682488203048706,-1.74533605575562,13.2561845779419,-0.267994195222855,-1.52676200866699,11.4108591079712,-0.704488158226013,-1.43015098571777,12.3429641723633,-1.29646420478821,0.430689007043839,11.3169937133789,-0.633855223655701,-5.43679094314575,11.3333263397217,0.324207812547684,-5.34990787506104,12.2897281646729,0.29148280620575,-4.15824413299561,8.32677936553955,0.285849809646606,-4.91607284545898,8.31762981414795,-0.635810136795044,-4.98647403717041,7.6367335319519,-0.634946227073669,-3.36898493766785,7.64520740509033,0.290466815233231,-3.37043809890747,8.45136737823486,-0.397370189428329,-0.0700289979577065,8.27342128753662,-0.602357149124146,-0.857776939868927,8.65068626403809,-1.2792421579361,1.60765111446381,8.70820045471191,-0.889460206031799,1.7451479434967,8.64849853515625,-1.00339412689209,3.05018901824951,8.62150001525879,-1.4825621843338,3.14198398590088,9.57847595214844,-0.684286117553711,7.05243635177612,9.74707221984863,-1.13764321804047,7.29845905303955,9.13314819335938,-0.710844159126282,4.47330093383789,8.91466617584229,-0.682887196540833,2.9658670425415,8.77879047393799,-0.749664187431335,3.01093411445618,8.95795822143555,-0.772237181663513,4.49947786331177,8.83813381195068,-1.01499819755554,2.99324297904968,8.99276161193848,-1.04494822025299,4.47025680541992,9.83040523529053,-0.401700139045715,6.98186683654785,9.82599067687988,-0.687571167945862,6.98602962493896,10.9493865966797,-0.0893782079219818,7.89767122268677,10.8741941452026,0.094377800822258,7.85318899154663,10.0532426834106,-0.354868203401566,6.91146230697632,10.897255897522,0.103166803717613,7.72143602371216,14.7188110351563,-0.979119181632996,3.75472784042358,14.6068019866943,-1.05330717563629,3.03254795074463,14.5829191207886,-0.793511152267456,3.01690411567688,14.697904586792,-0.660182237625122,3.76196217536926,13.7142362594604,-0.10202220082283,7.11313772201538,14.6809797286987,-0.7016361951828,5.42782211303711,\n14.631495475769,-0.364508181810379,5.4440450668335,13.6660346984863,0.0949728041887283,7.06012010574341,14.3699359893799,-0.789545178413391,3.0537269115448,14.5029563903809,-0.657171249389648,3.8249819278717,14.4187536239624,-0.348812192678452,5.51281881332397,13.6329202651978,0.0565158165991306,6.87230396270752,14.1662549972534,-0.738821148872375,1.21650302410126,14.1754846572876,-1.00521314144135,1.21228504180908,13.6872749328613,-0.738984107971191,0.0732659995555878,13.7096109390259,-0.471031188964844,0.033585999161005,14.035943031311,-0.733028173446655,1.27240085601807,13.4088859558105,-0.425395220518112,0.0608309991657734,13.2755498886108,-0.115318208932877,-1.12270414829254,13.0557823181152,-0.0804621875286102,-1.07290995121002,13.068621635437,-0.272237211465836,-1.50460398197174,12.1045236587524,0.593280792236328,-4.14091396331787,12.1193447113037,0.299488812685013,-4.08871221542358,11.7931108474731,0.634377837181091,-4.0986008644104,11.2735862731934,0.719097793102264,-5.15583181381226,11.0836772918701,0.714048802852631,-4.91463613510132,11.2509965896606,0.347086817026138,-5.14843416213989,9.70920753479004,0.712418794631958,-4.88926315307617,9.66789436340332,0.723107814788818,-5.11510419845581,8.42803859710693,0.688478827476501,-4.66739702224731,8.63442325592041,0.710941791534424,-4.48368692398071,9.70443153381348,0.322440803050995,-5.12207412719727,8.41786479949951,0.301627814769745,-4.63700103759766,8.54096221923828,1.32825684547424,-4.59067678451538,8.0074405670166,1.22241985797882,-3.54224491119385,8.04832363128662,3.33798861503601,-3.17081809043884,8.67496490478516,3.68233776092529,-4.08474493026733,7.8871545791626,0.281323790550232,-3.40791130065918,7.85482978820801,0.642930805683136,-3.39109182357788,8.13710689544678,0.850011765956879,-0.800619006156921,8.28289604187012,2.25278782844543,-0.764258027076721,8.43003940582275,-0.157711207866669,-0.858825087547302,8.32692623138428,0.194879800081253,-0.860629975795746,8.52881240844727,1.08460581302643,1.5599889755249,8.53865146636963,1.25685679912567,0.95725691318512,\n8.5357666015625,1.04977083206177,0.68256801366806,8.56322479248047,0.566658794879913,1.55015695095062,8.61183166503906,-0.425197243690491,-0.065311998128891,8.89294719696045,-0.911311149597168,1.74111795425415,8.79252433776855,-0.633555173873901,1.78056597709656,8.5108757019043,-0.101994186639786,0.000698000018019229,12.351466178894,0.262531816959381,7.76197957992554,12.4312696456909,0.319948792457581,7.95019292831421,12.4569158554077,0.0845468044281006,8.01053619384766,13.8941841125488,0.467521786689758,3.5477340221405,14.2799406051636,0.0541978180408478,3.53433966636658,14.2880802154541,0.228603810071945,3.23221206665039,13.9849233627319,0.619996786117554,3.28688502311707,13.6181030273438,0.60854184627533,6.72478246688843,14.4104146957397,0.390134811401367,5.51559019088745,14.0933837890625,0.810905814170837,5.57533311843872,13.5700387954712,0.956074774265289,6.39302587509155,13.8625802993774,0.872631728649139,1.93436586856842,13.1583271026611,1.43147194385529,2.3733389377594,13.2172756195068,0.964958786964417,2.69189310073853,13.7842702865601,0.587464809417725,2.18322610855103,12.4318504333496,2.01933884620667,2.85682392120361,12.5068588256836,1.38099682331085,3.19997715950012,10.8144855499268,1.08549284934998,7.2902398109436,12.2734613418579,1.22508585453033,7.33208894729614,12.0701723098755,1.55995881557465,6.43063402175903,10.6623516082764,1.37352383136749,6.64068698883057,10.2347812652588,1.02646374702454,6.79868507385254,9.9075870513916,0.466396808624268,6.90527582168579,10.8436546325684,0.709422826766968,7.58692121505737,9.14296531677246,0.764719843864441,4.57133388519287,8.77550888061523,0.210297808051109,4.60690784454346,9.33541011810303,1.13661181926727,5.08978414535522,9.58052635192871,1.00581681728363,4.8911828994751,9.13905906677246,1.31009376049042,4.46836519241333,8.60823631286621,2.43657970428467,1.41375398635864,9.29010486602783,2.85858273506165,1.81270503997803,9.71137714385986,1.92487692832947,4.1512770652771,10.0960521697998,3.6826000213623,1.92870700359344,10.3535137176514,2.31923270225525,3.88383197784424,\n11.0846672058105,3.66235661506653,1.6281658411026,11.884204864502,3.3869047164917,1.2024530172348,11.4515314102173,2.37581968307495,3.49674892425537,12.5265493392944,2.84761667251587,0.686360001564026,9.78671073913574,1.51062774658203,5.43640899658203,10.3746118545532,1.4129958152771,4.93102598190308,11.4895238876343,1.64424395561218,3.8477509021759,12.6008195877075,2.62157368659973,-1.41014099121094,12.6772747039795,2.34999775886536,-1.6421799659729,11.6258430480957,3.59273362159729,-3.56614398956299,11.6031827926636,3.99701476097107,-3.46526503562927,12.4911642074585,2.62973380088806,-1.39286494255066,11.5037336349487,4.0191216468811,-3.41252398490906,11.6477117538452,4.7365288734436,-2.9123420715332,10.6752662658691,5.05888700485229,-3.54006409645081,10.7329788208008,4.73007202148438,-4.00870704650879,10.6857452392578,4.2472767829895,-3.93189001083374,9.69830322265625,4.9626088142395,-3.85036325454712,8.79135131835938,4.77585315704346,-3.6133337020874,9.78085136413574,4.31696367263794,-4.04107522964478,8.89351463317871,4.26686573028564,-3.65700674057007,8.9768648147583,4.52922391891479,-3.72932100296021,9.71503639221191,4.64414882659912,-4.14905595779419,8.40865230560303,3.99431371688843,-2.67772603034973,8.20167064666748,4.30993890762329,-2.70235347747803,8.29178237915039,3.96888780593872,-2.69999694824219,8.25935554504395,3.6027410030365,-2.96513390541077,8.38647270202637,2.6651337146759,-0.669996023178101,10.858624458313,3.8950297832489,-4.24050617218018,10.7416467666626,4.23215389251709,-4.03672790527344,8.85915946960449,4.25843381881714,-3.7103579044342,8.82767200469971,3.88678979873657,-3.7574679851532,12.3203287124634,0.834373831748962,7.62035703659058,9.93011093139648,3.94925880432129,-4.2280740737915,9.87972068786621,4.26634979248047,-4.15164184570313,12.9109563827515,2.17576670646667,-0.0332330018281937,14.0064544677734,0.482846796512604,4.31903982162476,14.3811511993408,0.0602388046681881,4.10731220245361,13.4566841125488,0.878975749015808,4.61020994186401,13.403115272522,1.2346738576889,5.79850912094116,\n11.8692226409912,1.38857781887054,5.39097785949707,10.4531908035278,1.27224385738373,5.82744979858398,9.69781684875488,0.861148834228516,6.06470108032227,9.44259929656982,0.973586857318878,5.75430202484131,9.40438365936279,-0.639721155166626,5.52785587310791,9.22590160369873,-0.697531223297119,5.58653020858765,9.23768520355225,-0.931419134140015,5.58402299880981,9.00774478912354,-0.931771218776703,5.6596360206604,9.0374927520752,-1.4571191072464,5.59735012054443,9.46249103546143,-1.257688164711,6.91396951675415,13.292179107666,-1.68793714046478,5.62558317184448,13.1693201065063,-1.85254228115082,4.26037883758545,8.5069637298584,2.64702773094177,-0.68382602930069,9.65490818023682,0.303108811378479,-5.39795684814453,9.64590740203857,-0.636101245880127,-5.46976900100708,13.3323211669922,0.870737791061401,0.106257990002632,13.1983003616333,1.25750684738159,0.129934996366501,14.1630382537842,0.0562498010694981,1.75165700912476,11.8925170898438,1.22653579711914,-4.12294006347656,11.7359161376953,3.29843640327454,-3.70321798324585,12.968563079834,0.846431851387024,-1.85224604606628,11.1305932998657,1.33086395263672,-5.03836584091187,10.9273080825806,3.65749144554138,-4.48123788833618,9.87257671356201,1.327556848526,-5.05620718002319,9.91583061218262,3.76873588562012,-4.53192090988159,8.98668956756592,-0.574045181274414,1.79792904853821,8.65672206878662,-0.0279552042484283,-0.0313559994101524,8.17943000793457,0.660911798477173,-3.50347018241882,8.47450065612793,0.253890812397003,-0.846231997013092,14.9321527481079,-0.684710144996643,5.33120679855347,14.0031642913818,-0.023091197013855,7.31090211868286,8.79455852508545,-1.03195118904114,4.34719085693359,8.28165912628174,-0.135623186826706,-0.846274018287659,9.4740161895752,0.293323814868927,6.17530202865601,13.4723253250122,0.37716081738472,0.10164900124073,8.48273468017578,0.658774793148041,0.337684005498886,10.9609279632568,-1.51077425479889,7.06002187728882,10.3187446594238,1.55065274238586,4.2269082069397,9.59263896942139,3.9511775970459,-4.19415378570557,9.63356876373291,4.28190660476685,-4.09221982955933,\n13.0830707550049,1.09166383743286,4.85074090957642,9.5009822845459,3.79010367393494,-4.45402717590332,9.49314403533936,1.32746577262878,-4.98887491226196,9.63443660736084,-1.82345807552338,-5.55305099487305,9.14707946777344,-1.8240339756012,-5.37717390060425,9.14474105834961,-1.13805913925171,-5.32897996902466,10.1296558380127,-1.30436015129089,1.09980797767639,9.15706825256348,-0.688938140869141,-1.10642194747925,9.71644687652588,-0.692696213722229,-1.20543694496155,11.7091445922852,-1.29876112937927,0.632021009922028,10.6817436218262,-0.69933021068573,-1.29824805259705,7.84287738800049,-1.89942610263824,-2.52330207824707,8.77875328063965,-1.89924108982086,-2.67817401885986,9.01303195953369,-1.89940023422241,-1.40217304229736,8.07610702514648,-1.89954710006714,-1.25296998023987,10.542236328125,-1.89899623394012,-2.25901699066162,10.6337862014771,-1.89908516407013,-1.68281614780426,9.75798606872559,-1.89925706386566,-1.52582097053528,9.58230209350586,-1.8990843296051,-2.78612995147705,8.86343860626221,-1.17721211910248,-2.69335007667542,7.78657960891724,-1.1398001909256,-2.53283405303955,9.17301654815674,-1.17705416679382,-3.33671307563782,9.17317295074463,-1.82107496261597,-3.33675527572632,10.0160961151123,-1.82078611850739,-4.27497577667236,10.0307245254517,-1.17681121826172,-4.27237892150879,8.3118782043457,-1.82325625419617,-5.07190084457397,7.62548351287842,-1.82155406475067,-3.3740599155426,8.46506309509277,-1.13791620731354,-5.08362579345703,8.46026515960693,-1.82274115085602,-5.12706708908081,11.4767608642578,-1.1769061088562,-3.52011871337891,10.9006538391113,-1.23844015598297,-2.66865038871765,11.4770784378052,-1.82114708423615,-3.52008390426636,9.84247589111328,-1.1772221326828,-3.25193810462952,9.96317100524902,-1.8214031457901,-3.27331566810608,10.9190912246704,-1.82132935523987,-2.74039530754089,10.428861618042,-1.1769951581955,-4.06018114089966,10.4610366821289,-1.82123816013336,-4.06565284729004,9.48378562927246,-1.17734205722809,-2.86669707298279,10.6097259521484,-1.23897421360016,-2.20649099349976,\n12.8990774154663,-1.20657515525818,-2.6168200969696,13.1171998977661,-1.82286524772644,-2.07190489768982,11.3591508865356,-1.82394111156464,-1.71986413002014,11.2742357254028,-1.23886716365814,-2.35520100593567,11.2741947174072,-1.82093739509583,-2.35528588294983,11.9274044036865,-1.17659318447113,-3.287513256073,11.9275131225586,-1.82061421871185,-3.28761601448059,12.8821115493774,-1.82100307941437,-2.7364559173584,11.2960643768311,-1.82078015804291,-5.52506399154663,10.5416698455811,-1.17897522449493,-4.52999687194824,10.5710735321045,-1.82089614868164,-4.57293176651001,11.9882869720459,-1.82064211368561,-3.82067108154297,11.9701585769653,-1.17954611778259,-3.78295111656189,13.7229709625244,-1.85246515274048,4.07452917098999,13.9891834259033,-1.68774104118347,5.40032720565796,13.3896598815918,-1.89254415035248,2.17091298103333,13.7069931030273,-1.89270734786987,3.45311307907104,11.6803979873657,-1.17183661460876,6.71803712844849,10.9550170898438,-1.17081785202026,6.93465709686279,10.0661144256592,-1.52309918403625,3.26630568504334,10.6154489517212,-1.52297914028168,3.08849000930786,10.1624965667725,-1.52329015731812,4.62233781814575,10.7236423492432,-1.30241513252258,6.45850467681885,10.2997093200684,-1.48579919338226,5.18572616577148,10.8345613479614,-1.48584806919098,5.01272392272949,11.3562002182007,-1.30212819576263,6.27257680892944,10.0881805419922,-1.51421213150024,2.65602207183838,10.8880701065063,-1.30171120166779,0.885369002819061,13.4678926467896,-1.15898716449738,6.16615104675293,13.9943208694458,-1.15951919555664,5.99605989456177,13.3655796051025,-1.30129718780518,5.60819101333618,13.8941955566406,-1.30118119716644,5.4372501373291,13.5430736541748,-1.52252817153931,3.4598650932312,12.7836818695068,-1.5225031375885,2.36680197715759,13.270396232605,-1.52238821983337,2.19731903076172,12.9867782592773,-1.51305818557739,1.67463314533234,10.7792692184448,-1.52316725254059,4.49874496459961,13.0751523971558,-1.52264511585236,3.7069079875946,13.1476764678955,-1.49484920501709,4.1362509727478,10.7174825668335,-1.52064311504364,2.52428197860718,\n12.4709463119507,-1.5205591917038,1.93447399139404,13.6438522338867,-1.49474310874939,3.9940299987793,12.8745965957642,-0.650946140289307,8.4034481048584,13.9453248977661,-0.722079157829285,7.74784088134766,13.9156303405762,-0.485151201486588,7.62993192672729,12.8607053756714,-0.398309201002121,8.34536361694336,13.4607906341553,-1.44669365882874,6.27358388900757,11.708643913269,-1.46391832828522,6.78241014480591,10.7793197631836,-1.82315039634705,4.49869823455811,13.0701332092285,-1.82262897491455,3.70686101913452,12.7837543487549,-1.82248628139496,2.36675405502319,10.6154985427856,-1.82296216487885,3.08844399452209,10.7160301208496,-1.82060623168945,2.52090001106262,12.4723234176636,-1.8205281496048,1.93119895458221,11.8795261383057,-1.81423282623291,1.03212344646454,10.8229579925537,-1.80831921100616,1.30289947986603,11.3640203475952,-1.61824405193329,6.26081991195679,10.8520259857178,-1.78294909000397,5.05374383926392,9.80314826965332,-1.43848013877869,7.41763782501221,10.9754028320313,-0.861802220344543,8.42994117736816,12.2961120605469,-0.648356199264526,8.61242866516113,8.65401077270508,-1.82298004627228,3.72613310813904,8.86539459228516,-1.82339334487915,5.04450702667236,8.8872184753418,-1.48762512207031,5.0599570274353,8.66806697845459,-1.48891818523407,3.69247674942017,10.1625461578369,-1.82327306270599,4.62229013442993,10.0661649703979,-1.82308197021484,3.26626110076904,10.0813932418823,-1.82114517688751,2.65210604667664,10.0750875473022,-1.81434404850006,1.47501397132874,8.62293529510498,-1.80442404747009,2.03740906715393,8.63533592224121,-1.81966722011566,3.12709999084473,9.42062568664551,-1.61854815483093,6.85899353027344,9.02965927124023,-1.78175115585327,5.64660120010376,10.7314548492432,-1.61851632595062,6.44674682617188,10.3171739578247,-1.78289532661438,5.22674703598022,14.3864679336548,-0.906111121177673,7.10352420806885,14.9273662567139,-1.45178020000458,5.79180288314819,14.9044742584229,-1.14286315441132,5.70820713043213,14.3360147476196,-0.648855209350586,7.0174560546875,14.0326690673828,-1.44597220420837,6.05647897720337,\n15.0419406890869,-1.61634719371796,5.06266784667969,14.8922185897827,-1.7823361158371,3.67723703384399,15.0164432525635,-1.25586915016174,5.13094186782837,14.8399982452393,-1.82216322422028,3.04614806175232,14.5743312835693,-1.8219473361969,1.77490186691284,14.5593872070313,-1.48710322380066,1.7604968547821,13.992299079895,-1.81486225128174,0.45016798377037,14.2750339508057,-1.8190780878067,1.25383996963501,12.6187791824341,-1.81137526035309,0.900829017162323,13.035008430481,-1.82034909725189,1.6709531545639,14.0747489929199,0.169742807745934,2.96360206604004,14.34694480896,-0.806760251522064,2.41914296150208,14.0129976272583,0.0151758203282952,1.98685896396637,13.2320461273193,0.995352864265442,3.41252398490906,13.8183240890503,0.575311779975891,3.10841703414917,11.7101907730103,1.42806780338287,4.60914897918701,12.8916282653809,1.14636778831482,4.1383581161499,11.7699680328369,1.73828685283661,4.85970020294189,9.52198696136475,1.08574879169464,4.41844892501831,13.3160743713379,0.899752855300903,3.86537027359009,13.3713436126709,1.15496385097504,4.15981292724609,13.8948783874512,0.679575800895691,3.84310698509216,12.9768419265747,1.39769685268402,4.42352294921875,9.23659324645996,0.350918799638748,5.31175899505615,9.15367317199707,0.277039796113968,5.81538581848145,9.48372840881348,0.930315792560577,5.38133716583252,14.5383815765381,-0.811367094516754,2.29166293144226,14.5298585891724,-1.02179610729218,2.27179598808289,14.6525802612305,-1.08479416370392,2.15895390510559,13.2846403121948,1.05016481876373,3.67264294624329,13.2940397262573,0.677316784858704,-0.52591997385025,13.2968921661377,1.02870881557465,-0.218290001153946,13.3114624023438,1.28549885749817,0.0937940031290054,9.78981685638428,3.95010662078857,-4.1819109916687,9.70335102081299,1.32425081729889,-4.92063999176025,9.75296592712402,3.74058198928833,-4.40943193435669,13.1841850280762,0.992721796035767,-0.190662994980812,8.36301803588867,0.635875821113586,0.348857998847961,8.41664695739746,1.24883985519409,0.968972980976105,8.41362190246582,1.04680180549622,0.699701011180878,\n7.68235921859741,-1.1401481628418,-3.09662795066834,7.67167282104492,-1.82158994674683,-3.12445998191834,13.410304069519,0.684789776802063,-0.563890993595123,8.49754047393799,8.82586765289307,-3.57137799263,8.56192398071289,7.63300037384033,-3.55192399024963,8.88008213043213,6.491539478302,-3.68741536140442,8.98423480987549,5.36043310165405,-3.71636414527893,9.18995761871338,5.24069166183472,-3.38439154624939,9.29192543029785,4.87892913818359,-3.74415731430054,9.34595108032227,4.58668661117554,-3.93918871879578,9.5681037902832,4.3049521446228,-3.94899106025696,12.3848676681519,6.678795337677,-1.08676695823669,12.0569562911987,6.41276931762695,0.186367496848106,10.1192378997803,6.89622259140015,2.11103248596191,7.58461141586304,6.56392812728882,0.395473510026932,7.08461380004883,6.61821365356445,-0.39349552989006,11.2925672531128,9.14094638824463,-3.39495158195496,9.52544784545898,8.93857860565186,-3.73352289199829,8.47273540496826,8.70798873901367,-3.6010115146637,7.35740089416504,8.44426250457764,-3.02813529968262,11.0158061981201,7.09106349945068,1.53347992897034,11.9018383026123,7.38752317428589,0.497046887874603,12.3512144088745,7.81623363494873,-0.921400249004364,12.3507328033447,4.70240497589111,-2.97360157966614,8.2618465423584,4.38370370864868,-1.30719125270844,8.53772068023682,4.85830402374268,-1.03485834598541,8.34664154052734,4.26936388015747,-1.26588129997253,8.46986484527588,3.1554388999939,-1.43624365329742,8.34628105163574,3.21852278709412,-1.53164660930634,8.2733736038208,2.7988555431366,-1.6545318365097,8.17590713500977,2.74774932861328,-1.86189317703247,8.07227325439453,1.03621578216553,-2.17143201828003,8.3486795425415,0.427448570728302,-1.97930431365967,8.09087753295898,0.418905317783356,-2.12586092948914,8.15859699249268,0.0618062913417816,-2.13336801528931,7.8818793296814,0.132020547986031,-2.43179988861084,7.8618049621582,-0.623425841331482,-2.48126220703125,7.97514820098877,2.84113550186157,-0.698743879795074,7.91939783096313,1.88133490085602,-0.698509812355042,7.37556505203247,4.11418771743774,-0.738027811050415,\n7.12800025939941,4.14944124221802,-1.3378928899765,7.79018020629883,4.17661905288696,-1.64111828804016,6.94105863571167,8.39327621459961,-1.99834716320038,6.91890287399292,8.2821159362793,-2.00474405288696,7.22366333007813,7.12326192855835,-1.87451314926147,7.480544090271,5.81974315643311,-2.27981424331665,7.95554208755493,5.07282066345215,-2.32199144363403,12.2233734130859,8.90837287902832,-1.41941320896149,12.2676200866699,8.78210067749023,-1.39806830883026,12.2785034179688,7.96867084503174,-1.64899885654449,12.2156171798706,6.74982690811157,-1.95364665985107,12.2535228729248,5.75333404541016,-2.21360635757446,12.4807224273682,4.93390893936157,-2.24494934082031,12.7721185684204,3.99579477310181,-2.10383653640747,8.63093948364258,7.60015678405762,1.80671334266663,8.62113475799561,7.46664953231812,1.82989954948425,8.63788414001465,6.70167589187622,1.52909469604492,8.69423484802246,5.93398475646973,1.25737953186035,8.65503120422363,4.89050817489624,1.31877195835114,8.62190437316895,4.41484546661377,1.42706036567688,9.01820659637451,4.20061016082764,1.03565382957459,11.8353872299194,6.78268384933472,-2.71999740600586,11.9059467315674,8.04110717773438,-2.52659678459167,11.954478263855,9.0095157623291,-2.44830703735352,11.9236574172974,9.11659240722656,-2.40354752540588,11.960880279541,8.69771385192871,-0.577697277069092,11.5644798278809,8.31119823455811,0.719232320785522,9.98414611816406,7.77302694320679,2.08830571174622,7.71604347229004,7.88915014266968,0.612167298793793,7.12976217269897,8.13741683959961,-0.166500449180603,11.0205383300781,9.33058452606201,-3.03233504295349,9.53904724121094,9.11799430847168,-3.27702498435974,7.65170097351074,8.7472505569458,-2.73987889289856,8.62954139709473,8.94725894927979,-3.22196006774902,7.33695316314697,8.59652614593506,-1.79107713699341,11.8764390945435,9.0099458694458,-1.23530924320221,8.73727798461914,7.74562072753906,1.61132657527924,11.5861968994141,9.22538471221924,-2.12491774559021,10.8846216201782,19.2333583831787,2.99382495880127,10.8735446929932,18.8200950622559,3.42978501319885,\n10.8541011810303,18.3279361724854,2.93692708015442,10.8832063674927,18.8148536682129,2.53401899337769,10.5200786590576,17.9692115783691,4.34590482711792,10.4846277236938,17.3935279846191,3.72583603858948,9.73058032989502,17.2792644500732,5.04154920578003,8.62687110900879,16.9248275756836,5.41275405883789,10.3979377746582,18.2120380401611,4.33148908615112,10.7226848602295,19.0455799102783,3.37352299690247,9.62259387969971,17.5917854309082,5.03659582138062,8.54744338989258,17.1974773406982,5.40801620483398,10.830249786377,19.4356498718262,2.91760802268982,10.7492761611938,19.799617767334,2.88753604888916,10.7113447189331,19.2958393096924,3.12222003936768,10.6793050765991,19.3370323181152,3.71836709976196,10.3031015396118,18.9596462249756,4.79261493682861,9.37976932525635,18.4917240142822,5.57988595962524,8.29885768890381,18.1507701873779,5.97931909561157,10.5200023651123,20.1408176422119,4.01744413375854,10.1408576965332,19.8712902069092,5.0645899772644,9.1905345916748,19.5542163848877,5.89608812332153,8.09999942779541,19.2621593475342,6.31005191802979,10.6673736572266,20.3554096221924,2.97603225708008,10.6598329544067,19.6969032287598,2.0004780292511,10.7596883773804,19.3268871307373,2.08992290496826,10.4535999298096,21.4124336242676,3.39937400817871,10.2665662765503,21.9323348999023,3.11421298980713,10.0877733230591,22.2021808624268,3.65796494483948,10.3209276199341,21.613899230957,3.94974088668823,9.45490837097168,22.599365234375,4.69469785690308,9.74240303039551,21.900821685791,5.07761812210083,8.51956844329834,22.74631690979,5.46489000320435,8.80372142791748,21.9650821685791,5.91362905502319,7.38228607177734,22.6113510131836,5.85867595672607,7.64917707443237,21.797420501709,6.33266592025757,9.71762371063232,21.6514225006104,4.97159385681152,10.2602586746216,21.3834095001221,3.80861616134644,8.81839847564697,21.6574687957764,5.79326295852661,7.70153617858887,21.4740352630615,6.20392799377441,10.3768091201782,21.0263004302979,3.39235901832581,10.5269012451172,20.9093341827393,3.0945188999176,10.4725208282471,21.2443161010742,3.25417709350586,\n10.3247337341309,21.2503776550293,3.48597979545593,9.9367561340332,20.8117370605469,5.13730812072754,10.357063293457,20.9667377471924,4.0233039855957,9.07955837249756,20.6500606536865,5.98157691955566,7.97893238067627,20.4087715148926,6.39955759048462,10.3478708267212,21.2740516662598,2.29400300979614,10.3102588653564,21.5990142822266,2.51279091835022,10.6137924194336,20.0307559967041,2.17805695533752,10.5380973815918,20.4603633880615,2.3185830116272,10.4403657913208,20.9075145721436,2.34123802185059,10.5755195617676,19.6662559509277,3.11494088172913,4.94140291213989,17.8739356994629,4.00129413604736,4.97612380981445,17.4636917114258,3.53536009788513,5.33359622955322,17.0651969909668,3.87273693084717,5.26266002655029,17.5366821289063,4.38091611862183,6.29105854034424,16.4343070983887,4.43670701980591,6.21092700958252,16.9835529327393,5.07637119293213,7.39537382125854,16.3496284484863,4.7204909324646,7.39244985580444,16.7444496154785,5.43789577484131,6.20721101760864,17.2534675598145,5.04187917709351,5.27760076522827,17.8000946044922,4.29654598236084,7.3501033782959,17.071985244751,5.42181491851807,5.03394889831543,18.2387256622314,4.07053804397583,4.78293418884277,18.4348983764648,3.89891910552979,4.87793016433716,18.0741367340088,3.92661571502686,5.10237407684326,18.0128650665283,4.07302713394165,6.11509895324707,18.0017032623291,5.50254487991333,5.29883909225464,18.1063289642334,4.63043785095215,7.23719167709351,17.9726581573486,5.96456384658813,5.95145320892334,18.9130210876465,5.77475690841675,5.18693590164185,18.920955657959,4.92147922515869,7.04634428024292,19.0347785949707,6.28103971481323,4.6217041015625,18.9564056396484,4.13157510757446,4.62470102310181,18.3164520263672,3.02352404594421,4.7248101234436,17.9464931488037,3.11292791366577,4.51037693023682,20.0530071258545,4.40684223175049,4.71004295349121,20.3304882049561,4.90087223052979,4.56726694107056,20.9394416809082,4.59377288818359,4.35948419570923,20.5811710357666,4.11555480957031,5.43325090408325,20.9151668548584,5.8080849647522,5.26133918762207,21.6401462554932,5.40557098388672,\n6.46559047698975,21.430269241333,6.30997800827026,6.23514795303345,22.2237873077393,5.85213422775269,5.52689790725708,20.6928539276123,5.68198585510254,4.81517601013184,20.1379241943359,4.73164081573486,6.54590797424316,21.1376686096191,6.1784839630127,4.5201358795166,19.8827934265137,4.26319885253906,4.56601285934448,19.5458679199219,4.10498094558716,4.73723888397217,19.736328125,4.3483510017395,4.71576499938965,19.9674053192139,4.4367880821228,4.97689390182495,19.7361011505127,4.93532705307007,5.74875497817993,19.8537902832031,5.84723806381226,6.81026935577393,20.1309928894043,6.36625528335571,4.31273984909058,19.8936004638672,3.31704807281494,4.27538108825684,20.218620300293,3.53579592704773,4.57782793045044,18.6501159667969,3.20124411582947,4.50393390655518,19.0801334381104,3.34146690368652,4.40440893173218,19.5268745422363,3.36442470550537,10.8431606292725,18.7861003875732,2.44014716148376,10.8136548995972,18.3081188201904,2.8375391960144,10.4479379653931,17.3849391937256,3.61761784553528,10.7177801132202,19.3129863739014,1.98497116565704,10.6137723922729,19.7006969451904,1.89566814899445,10.0405826568604,22.2164440155029,3.56492018699646,10.2168340682983,21.952543258667,3.02945613861084,9.41473770141602,22.6083793640137,4.58975505828857,8.49272918701172,22.7543716430664,5.34907007217407,7.37042284011841,22.621467590332,5.80231285095215,10.2635154724121,21.6095638275146,2.41238903999329,10.303807258606,21.2677593231201,2.18731999397278,10.4946060180664,20.4584579467773,2.21803116798401,10.568359375,20.0347576141357,2.07991313934326,10.3974113464355,20.8989925384521,2.24075198173523,5.01321506500244,17.4525814056396,3.42841100692749,6.31224870681763,16.4389591217041,4.31868124008179,7.50874900817871,16.3715438842773,4.59366989135742,4.75371122360229,17.9487895965576,2.99597120285034,4.64967203140259,18.3364906311035,2.90667319297791,4.38688993453979,20.619026184082,4.01771926879883,4.5924391746521,20.9702587127686,4.48846530914307,5.2790470123291,21.6623973846436,5.2908182144165,6.23852682113647,22.2387561798096,5.73119115829468,\n4.29944610595703,20.2453670501709,3.42338895797729,4.3397068977356,19.9035568237305,3.19832611083984,4.60426807403564,18.6705703735352,3.09092211723328,4.53046989440918,19.0942478179932,3.22904109954834,4.43331813812256,19.5347919464111,3.25175809860229,6.38370084762573,22.9831581115723,5.70846033096313,7.14405488967896,23.9239101409912,5.65244483947754,7.72733306884766,24.1056079864502,5.47485208511353,6.49145746231079,23.8214664459229,5.74526596069336,6.57458209991455,23.7810745239258,5.88676261901855,7.17207098007202,23.8744888305664,5.79700756072998,6.33581447601318,22.3091201782227,5.86684417724609,7.37212753295898,22.6595153808594,5.87273836135864,8.39966011047363,22.7811946868896,5.51699161529541,7.70609426498413,24.041223526001,5.63918304443359,10.4553146362305,20.3231563568115,3.23345708847046,4.8855938911438,18.9875259399414,4.20944452285767,12.9825353622437,10.6990766525269,0.844066858291626,9.8389253616333,9.49735069274902,3.17830562591553,11.5044794082642,12.9690208435059,2.80792570114136,10.7127485275269,12.5645351409912,3.36476016044617,11.0604057312012,9.69466495513916,2.83606219291687,12.2644348144531,10.1694393157959,2.32021045684814,11.1309700012207,17.2452526092529,2.54634737968445,6.70162296295166,9.45798778533936,2.01733946800232,6.35549068450928,13.8766345977783,2.74235939979553,5.24501037597656,15.4749479293823,2.42005228996277,6.03702163696289,15.1854915618896,3.31086182594299,6.57275533676147,12.4051599502563,2.47686791419983,10.977728843689,15.8941841125488,3.68716859817505,10.7990818023682,16.9118976593018,3.76513743400574,10.4266233444214,17.058614730835,3.71678614616394,4.87146949768066,15.9931001663208,1.07368099689484,6.86694240570068,15.0654487609863,4.30618381500244,6.77264976501465,16.0406074523926,4.2553129196167,6.98142719268799,16.3520584106445,4.27755880355835,7.20883512496948,14.8501043319702,4.19879293441772,7.98394060134888,14.8931560516357,4.27120780944824,7.44306898117065,13.9275770187378,4.12924718856812,8.74346828460693,12.9331617355347,3.70751571655273,9.87979412078857,12.9458312988281,3.54778790473938,\n9.6381721496582,11.1837501525879,3.82064890861511,10.0478620529175,13.1829557418823,3.4830207824707,9.99559593200684,15.3371992111206,3.90790176391602,10.7288208007813,15.5589847564697,3.66854119300842,6.74331283569336,16.3392333984375,4.03310918807983,10.4732303619385,16.7847728729248,4.27841186523438,10.7414121627808,16.6679668426514,3.98403811454773,10.7801752090454,16.2029762268066,4.13446187973022,10.5451440811157,16.0811061859131,4.50478982925415,10.8121566772461,15.845027923584,3.79723620414734,10.5918312072754,15.5369853973389,3.99283981323242,9.8531322479248,16.5995903015137,4.68393802642822,10.0126037597656,15.9286870956421,4.81835794448853,9.79456615447998,16.833423614502,4.26952695846558,10.0595607757568,15.3670091629028,4.39897203445435,9.90972423553467,15.9085750579834,4.89311122894287,9.76378726959229,16.6339874267578,4.74866676330566,9.63790130615234,16.8885154724121,4.3174467086792,10.073974609375,13.2618465423584,3.8615391254425,10.0949974060059,13.3742513656616,4.06807279586792,9.93121242523193,13.1100921630859,3.85573220252991,9.93567180633545,13.3041086196899,4.1608567237854,8.04547023773193,16.2815895080566,5.02835702896118,7.9120717048645,16.4583759307861,4.65794610977173,8.78007221221924,13.1069211959839,4.28314590454102,8.10359859466553,15.5371837615967,5.12908601760864,8.78834533691406,12.9926528930664,4.06723880767822,7.94412708282471,16.2080841064453,4.99466705322266,8.15055847167969,14.9756393432617,4.70975494384766,7.21701669692993,16.1169757843018,4.808424949646,6.93839693069458,15.8880319595337,4.60305595397949,7.13570690155029,15.0910511016846,4.39565181732178,7.50561809539795,14.9041223526001,4.49521207809448,7.49339818954468,15.455249786377,5.00152015686035,7.12892198562622,15.4541702270508,4.72877597808838,5.54436635971069,13.8168067932129,2.02238321304321,8.30417728424072,14.0667724609375,4.03354072570801,8.42895317077637,14.1100664138794,4.42929649353027,8.49184799194336,14.1423807144165,4.64357471466064,9.92403411865234,14.4718418121338,4.48916864395142,10.0594902038574,14.4750490188599,4.39139747619629,\n10.0653839111328,14.5165367126465,4.18185234069824,10.0170516967773,14.4528198242188,3.73347544670105,10.6282987594604,14.4023456573486,3.52199649810791,11.1519660949707,14.6864976882935,3.16790533065796,6.04845094680786,16.2096138000488,3.63020849227905,5.52223777770996,16.4311771392822,2.7282702922821,5.10262775421143,16.7274036407471,1.33499121665955,4.29888534545898,21.2389469146729,2.84800100326538,3.93148970603943,21.6375637054443,2.01565790176392,2.9605450630188,24.8765544891357,1.97136247158051,2.89970541000366,24.9143161773682,2.17081499099731,2.62015056610107,26.2532806396484,2.3701069355011,4.41971921920776,21.6550331115723,4.03259515762329,8.53282833099365,25.5782012939453,-0.167569786310196,7.2937650680542,25.4874401092529,-1.2387101650238,6.69556617736816,20.8177394866943,-0.44059631228447,6.78883934020996,19.5983657836914,-0.931529581546783,8.20820713043213,24.2063522338867,5.04386711120605,8.81881809234619,23.5065650939941,4.60944509506226,4.55811882019043,23.5142288208008,-0.732890009880066,7.79413414001465,21.0973491668701,-0.54935747385025,8.24923992156982,19.919095993042,-0.793531358242035,9.85042095184326,21.1344356536865,1.4140750169754,9.62073135375977,24.0104999542236,1.51200270652771,9.83751201629639,22.8306541442871,2.4107723236084,9.29598808288574,23.2301254272461,4.08172798156738,2.31491231918335,29.7624473571777,3.23570966720581,6.26165246963501,30.276439666748,-2.03741860389709,2.92210912704468,29.6239356994629,-1.64515149593353,7.52851438522339,30.5461311340332,-1.03620731830597,2.28898024559021,28.4519901275635,2.82041788101196,9.5324125289917,25.5558605194092,1.46676802635193,7.73476505279541,24.0522499084473,-0.513817012310028,3.17484617233276,23.3372783660889,2.0396089553833,8.55404090881348,24.098482131958,-0.00429400010034442,6.07827711105347,23.7995223999023,-0.819948017597198,9.09116077423096,24.1179275512695,0.669364988803864,10.2090940475464,19.7163257598877,1.54994201660156,4.54618835449219,20.4038715362549,0.327896654605865,3.909832239151,20.236291885376,1.51313841342926,\n4.62226486206055,19.1657886505127,0.235345333814621,4.29495668411255,18.9505310058594,1.53156208992004,7.73149299621582,25.2387638092041,5.56792831420898,6.34912157058716,24.9886512756348,5.79081058502197,6.1414589881897,23.8302707672119,5.62265491485596,9.50326728820801,15.4665489196777,-3.09563803672791,7.92887163162231,15.1350746154785,-3.01180362701416,9.81278514862061,13.9111709594727,-3.44924473762512,9.84451770782471,11.6013212203979,-3.94717597961426,9.64504241943359,10.5313568115234,-4.39961624145508,10.7425470352173,18.7471675872803,1.2680721282959,8.20433902740479,13.5760927200317,-3.37232685089111,8.49007797241211,11.4475383758545,-3.97062849998474,5.36550998687744,17.0619297027588,3.7610821723938,5.17229700088501,17.7759780883789,0.455138176679611,5.34495162963867,17.0478000640869,0.207327455282211,7.15298080444336,18.741907119751,-1.61566770076752,7.37722444534302,17.8142032623291,-2.12625551223755,8.89304828643799,18.1247253417969,-2.02328205108643,8.64704895019531,19.093147277832,-1.49808049201965,13.1437149047852,9.83644771575928,0.425810605287552,6.79427766799927,10.1194458007813,-3.59274291992188,8.46947383880615,10.3621530532837,-4.15896272659302,7.37660598754883,38.6802215576172,1.84768354892731,7.32925224304199,38.8696250915527,2.05189299583435,8.50175857543945,30.9236011505127,0.143369674682617,9.24204730987549,28.3038425445557,0.935694634914398,12.451057434082,9.42442798614502,1.84179270267487,11.1691188812256,9.07114124298096,2.62692499160767,9.90255355834961,8.8194408416748,2.72341012954712,7.16649913787842,8.72556114196777,1.34422612190247,5.30278015136719,17.4545993804932,2.83680200576782,3.26730012893677,23.4545974731445,1.46349477767944,8.75579071044922,16.6359596252441,4.55582046508789,9.6224308013916,23.0851593017578,1.67339825630188,9.57697582244873,22.9747257232666,3.24728608131409,9.19984149932861,23.223331451416,0.919034540653229,8.06709289550781,23.1356105804443,-0.251145720481873,6.29547739028931,23.0096740722656,-0.55564147233963,4.18616390228271,22.5705108642578,0.401069700717926,\n3.58845591545105,22.4750595092773,1.47205495834351,3.43016672134399,22.3351707458496,1.91197001934052,5.4775652885437,14.6034002304077,-0.848178505897522,5.46263837814331,12.9252481460571,-1.43349719047546,6.11545467376709,10.8410673141479,-1.87363421916962,6.24943923950195,9.87539100646973,-2.08078861236572,5.08252668380737,17.5950775146484,1.47334945201874,5.56419515609741,22.756872177124,5.25122785568237,4.97053909301758,22.3994827270508,4.87527322769165,3.88732552528381,21.1598033905029,1.50911855697632,4.44807863235474,21.3713245391846,0.426176756620407,6.54054069519043,21.7982597351074,-0.450584977865219,8.50001525878906,22.0293464660645,-0.0887655019760132,9.50238704681396,22.0265922546387,1.2452974319458,9.9237585067749,22.0253047943115,1.93845045566559,10.0915231704712,22.1119232177734,2.2798593044281,4.97010898590088,14.2412166595459,0.382829368114471,5.13274669647217,12.6117677688599,-0.0833398848772049,5.56505680084229,10.3705987930298,-0.355221420526505,5.70119285583496,9.17764377593994,-0.628493666648865,5.30814981460571,16.3194942474365,-0.1225531026721,7.52781343460083,17.0894050598145,-2.39299297332764,9.06356906890869,17.390739440918,-2.41181421279907,12.0434112548828,15.1893663406372,1.87365484237671,12.5517129898071,13.4664974212646,1.38936769962311,13.1068925857544,11.2270574569702,-0.273940622806549,13.0960330963135,10.077766418457,-0.766599833965302,11.6978235244751,16.5182456970215,2.36682105064392,11.2157173156738,17.9049034118652,1.06689035892487,11.7930545806885,16.9751167297363,0.794650077819824,12.2942228317261,15.3654108047485,0.229736045002937,12.6215677261353,13.7141962051392,-0.279336333274841,8.41444396972656,9.42227172851563,2.86235332489014,8.31547164916992,8.57957553863525,2.64106416702271,4.13291549682617,19.6004199981689,1.52886092662811,4.56665515899658,19.7877254486084,0.25340074300766,6.74493312835693,20.2061576843262,-0.660114347934723,8.02215194702148,20.5025272369385,-0.674675583839417,10.0297594070435,20.4253807067871,1.48200845718384,4.66221380233765,18.1281929016113,2.47184419631958,\n8.28762149810791,11.0393047332764,3.44345617294312,6.68867588043213,11.1985206604004,2.32214212417603,5.4771900177002,11.5190696716309,-0.246227294206619,5.85303068161011,11.9172916412354,-1.67039966583252,8.32313919067383,12.6680364608765,-3.58693480491638,9.90711784362793,12.8571147918701,-3.5450963973999,12.8485689163208,12.8292036056519,-0.356148988008499,12.7300281524658,12.3465728759766,1.19345235824585,11.7639751434326,11.9589366912842,2.69383668899536,10.6790237426758,11.5936756134033,3.43812823295593,8.73316478729248,13.1642179489136,4.12282800674438,9.32520294189453,12.4223604202271,3.61370158195496,8.1046724319458,12.4125928878784,3.56111311912537,8.73285865783691,13.2765378952026,4.34218788146973,9.93310737609863,13.5609140396118,4.23305797576904,10.0881977081299,13.585015296936,4.12997817993164,10.072416305542,13.4894390106201,3.91964173316956,1.67838835716248,30.9184226989746,3.30307817459106,1.89689028263092,29.7673435211182,3.16651940345764,1.48467254638672,30.6766414642334,-0.48382967710495,1.7151745557785,29.5061206817627,-0.388914227485657,6.41028499603271,31.5402603149414,-2.31122946739197,6.5544581413269,30.2641086578369,-2.10232305526733,3.24189710617065,29.6542873382568,-1.98031175136566,3.03120398521423,30.9302921295166,-2.10327386856079,7.3973708152771,31.8299655914307,-1.48837518692017,4.9675407409668,29.930456161499,-2.2727963924408,4.79024934768677,31.2233638763428,-2.47925400733948,9.770339012146,25.5654220581055,1.26073324680328,9.85008811950684,24.02073097229,1.29150104522705,2.88398265838623,23.4223175048828,1.98747265338898,2.61478137969971,24.807092666626,2.1091001033783,2.56298756599426,24.7260589599609,1.49513530731201,4.08464431762695,24.8278770446777,-1.19701743125916,4.46618032455444,23.4818077087402,-1.05908119678497,5.79780006408691,25.2055416107178,-1.48177099227905,7.58888959884644,25.4344844818115,-1.33208465576172,7.79577255249023,23.9981422424316,-0.78133100271225,6.17394542694092,23.8105087280273,-1.08923745155334,8.74819564819336,25.5624618530273,-0.352819919586182,8.8174524307251,24.0813789367676,-0.17203514277935,\n8.29786491394043,32.2326049804688,-0.562160134315491,8.68968200683594,30.9222812652588,-0.11330646276474,7.68600034713745,30.5278968811035,-1.28661370277405,2.92589497566223,23.4454669952393,1.463662981987,10.183985710144,24.0114269256592,1.48732244968414,10.3995380401611,23.0030460357666,2.38215231895447,10.1714305877686,23.2381954193115,1.69905114173889,10.0658826828003,24.2001304626465,3.24561882019043,10.1078948974609,23.1566581726074,3.35979390144348,9.73544216156006,24.5126132965088,4.35015201568604,9.77918720245361,23.3942604064941,4.31036186218262,9.15197277069092,24.8433399200439,5.12198305130005,9.17974853515625,23.6991958618164,5.01077795028687,8.81389045715332,25.4027652740479,5.52354097366333,8.11821174621582,25.076171875,6.03452777862549,8.62082099914551,24.2555313110352,5.50145721435547,4.94333648681641,24.0129108428955,6.1410551071167,5.44337701797485,22.7728080749512,5.75631809234619,6.00277996063232,23.6588459014893,6.15437316894531,5.51579332351685,24.4081516265869,6.2461986541748,4.21660566329956,23.4138717651367,5.43742179870605,4.60753440856934,22.092170715332,5.30762243270874,3.64753818511963,22.7981567382813,4.36176633834839,3.97580409049988,21.4336051940918,4.30237817764282,3.93899321556091,21.0546340942383,3.03482794761658,3.00800609588623,22.134693145752,2.17809700965881,3.47336459159851,21.4021892547607,2.19615602493286,10.2548227310181,25.4462604522705,2.23816800117493,10.0921211242676,25.3244571685791,1.40582799911499,10.3297166824341,25.5889053344727,3.29478859901428,10.1016530990601,25.8635997772217,4.32744646072388,9.49295043945313,25.9888610839844,5.24583053588867,8.74037933349609,26.1106243133545,5.74385833740234,7.91368246078491,26.0554676055908,6.26549863815308,4.82580804824829,24.7727489471436,6.31932830810547,3.97736215591431,24.154411315918,5.67784929275513,3.38183975219727,23.6130828857422,4.72761106491089,2.68674302101135,23.211181640625,2.26280474662781,10.0458040237427,28.1991653442383,1.91037487983704,9.79188060760498,28.2899017333984,0.875848591327667,10.1743211746216,28.1533126831055,3.07424855232239,\n10.0320882797241,28.1667823791504,4.24908638000488,8.97226333618164,31.0707683563232,-0.0124146156013012,9.27804946899414,31.2962856292725,1.37091720104218,8.99170207977295,33.3099365234375,1.86456072330475,9.47235774993896,31.3706016540527,2.61665606498718,8.30988502502441,32.8178291320801,5.27076625823975,8.49545383453369,30.7285480499268,5.71441602706909,9.12849426269531,31.0272274017334,5.08935260772705,8.80402851104736,33.1465034484863,4.67227029800415,7.65233707427979,30.4246578216553,6.46737289428711,7.61286640167236,32.386043548584,6.16658735275269,4.8137845993042,30.9995460510254,6.55148696899414,5.17962551116943,29.5996227264404,6.77977800369263,4.09050512313843,30.391019821167,6.23229169845581,2.47493076324463,29.0429763793945,4.76166772842407,2.26273012161255,28.844123840332,4.130455493927,1.83292031288147,28.6096267700195,3.26814723014832,8.04264640808105,34.5006980895996,-0.720708727836609,7.95204257965088,35.5625,4.51369094848633,7.40072584152222,35.2431945800781,5.5053391456604,4.30788898468018,32.4267234802246,6.14424514770508,3.70565128326416,31.6386547088623,5.78515100479126,2.07473659515381,29.7428436279297,4.24214792251587,1.89405024051666,29.2105312347412,3.50888156890869,7.91234683990479,36.6562614440918,0.0448120012879372,7.69625759124756,37.7195739746094,3.7429211139679,7.29021406173706,37.5362548828125,4.64640092849731,6.16034173965454,36.3572311401367,5.5187726020813,4.74860525131226,34.8689727783203,5.76224040985107,3.77248501777649,33.7298736572266,5.60572528839111,3.26117038726807,32.9967346191406,5.2520923614502,6.08498001098633,25.5943832397461,6.55991077423096,6.18661165237427,24.7244873046875,6.31633234024048,9.40803623199463,31.2745361328125,3.8881824016571,9.07090282440186,33.3454704284668,3.53791260719299,10.0716009140015,24.0060024261475,1.4139244556427,10.0697593688965,23.165225982666,1.6226841211319,10.3156270980835,22.8844871520996,2.36132836341858,10.029746055603,23.0400581359863,3.33455991744995,9.70546817779541,23.283145904541,4.26745891571045,9.1259241104126,23.5924777984619,4.93032312393188,\n8.48777198791504,24.2007484436035,5.37533950805664,7.91638708114624,25.1751689910889,5.94517946243286,6.03314876556396,23.5322189331055,5.99998188018799,5.52076005935669,22.6739807128906,5.62737798690796,4.69226598739624,22.0745868682861,5.19560813903809,4.09655714035034,21.4006404876709,4.22978782653809,4.06289386749268,21.0164031982422,3.00006198883057,3.60996341705322,21.3400974273682,2.08173608779907,9.97756958007813,25.3492584228516,1.34460115432739,3.06863784790039,22.1662006378174,2.02713704109192,9.65499496459961,28.2802486419678,0.782940268516541,2.74755239486694,23.2384338378906,2.15618586540222,8.82112979888916,31.0097255706787,-0.0560440123081207,1.86797857284546,28.614429473877,3.1319215297699,7.94068431854248,34.379695892334,-0.816163599491119,1.89337337017059,29.1634712219238,3.36262130737305,7.79942846298218,36.6775054931641,-0.0194739997386932,7.60380077362061,37.7963676452637,3.67964386940002,7.22692108154297,37.5835647583008,4.55090570449829,6.1025857925415,36.3641624450684,5.41515636444092,4.72125434875488,34.9616813659668,5.66096448898315,3.76971030235291,33.8117027282715,5.53015184402466,3.28945708274841,33.111946105957,5.19547367095947,2.10025668144226,30.606517791748,3.93692255020142,6.30683612823486,24.863639831543,6.18582439422607,6.11436796188354,23.6850185394287,6.04688310623169,7.78097343444824,26.0277538299561,6.21321439743042,6.21463012695313,25.6692790985107,6.46301651000977,7.55111742019653,30.3920917510986,6.39775085449219,7.45050239562988,32.3329658508301,6.15083980560303,7.27913808822632,35.1760787963867,5.55547094345093,6.99305248260498,37.2315101623535,4.84737014770508,6.91676378250122,37.2658882141113,4.76304244995117,2.28811478614807,26.3853092193604,2.56221723556519,2.23476266860962,26.3820323944092,2.68446326255798,2.61036849021912,26.5165481567383,3.75161123275757,2.90822100639343,26.7460823059082,4.73223924636841,3.56000971794128,27.1050662994385,5.75402736663818,4.27271509170532,27.3566989898682,6.4875373840332,5.66520214080811,27.6100559234619,6.7059268951416,5.7662296295166,27.5774803161621,6.57018709182739,\n7.6766791343689,27.9425983428955,6.35362434387207,7.80297374725342,27.9894924163818,6.4398775100708,8.66915988922119,28.0921421051025,5.84028482437134,9.47067070007324,28.122034072876,5.24188470840454,2.20996499061584,29.9731330871582,4.56600332260132,2.10399508476257,30.5140609741211,4.07979536056519,5.30119848251343,29.6463642120361,6.68332195281982,4.92222452163696,31.0695972442627,6.47152519226074,4.48160314559937,32.5191307067871,6.0656886100769,4.14768695831299,34.1093292236328,5.51155948638916,4.15120220184326,34.2035255432129,5.43701601028442,1.98364222049713,27.8785266876221,2.93078923225403,1.94235408306122,27.87815284729,3.06318759918213,2.36977767944336,28.0997009277344,3.98143076896667,2.63067173957825,28.2976512908936,4.7458701133728,4.41857099533081,29.2386493682861,6.59666156768799,7.56398439407349,30.5628261566162,6.71118402481079,7.49685859680176,32.181510925293,6.48458242416382,7.468101978302,32.5037994384766,6.4351601600647,7.3045482635498,35.2156181335449,5.87828588485718,6.73865842819214,32.2596702575684,6.63548994064331,6.20531892776489,36.3156089782715,5.84047269821167,7.05880689620972,37.1785850524902,5.21333408355713,4.72433471679688,34.8476142883301,6.0802116394043,6.41811656951904,34.4748916625977,6.24666404724121,7.55984258651733,30.338529586792,6.73191165924072,7.69254875183105,27.9261207580566,6.6812539100647,7.82909297943115,26.0347461700439,6.52567291259766,6.32481861114502,25.6593074798584,6.7205548286438,7.95692873001099,25.1614246368408,6.27644300460815,6.40386581420898,24.8511695861816,6.50110149383545,5.83545446395874,27.5759601593018,6.88720178604126,5.36732721328735,29.6078033447266,7.00625324249268,4.96170663833618,31.019079208374,6.80995941162109,5.2938666343689,29.7915210723877,6.99704647064209,4.8523211479187,31.2468891143799,6.76324796676636,4.41397762298584,32.6190986633301,6.37181329727173,5.5450701713562,31.6847229003906,6.82576894760132,5.13066625595093,33.2722244262695,6.48147821426392,4.08279800415039,34.1065979003906,5.84938621520996,8.26431655883789,35.4175186157227,0.438631266355515,\n8.11979484558105,35.6021957397461,4.41319370269775,8.47711849212646,32.8561134338379,5.23995113372803,8.70630931854248,30.8051433563232,5.64721870422363,8.90147686004639,28.0989265441895,5.80129289627075,8.9966287612915,26.0767917633057,5.69587278366089,8.94582271575928,25.184455871582,5.4431848526001,9.03204917907715,25.4176197052002,5.50921106338501,9.29705619812012,25.0721836090088,5.14672422409058,9.88245296478271,24.7685241699219,4.34585094451904,10.1949939727783,24.4736366271973,3.25530242919922,10.2092380523682,24.4950656890869,2.25282216072083,10.2866735458374,24.5622482299805,2.40504479408264,10.3209056854248,25.4585094451904,2.32878351211548,10.1164855957031,28.1952266693115,2.0103747844696,9.35418319702148,31.3025550842285,1.47600424289703,8.92996597290039,33.1470336914063,1.12682414054871,8.36096000671387,35.5315437316895,0.640533804893494,7.96617650985718,36.6328430175781,0.68460077047348,10.1855125427246,24.3762168884277,2.39254546165466,4.88428688049316,27.5448017120361,6.62644290924072,5.35536670684814,25.2809295654297,6.34503364562988,2.41899251937866,31.5349407196045,4.39026832580566,2.42222929000854,31.4518260955811,4.50084161758423,2.73904395103455,30.6618022918701,5.13954162597656,3.01469254493713,29.4937610626221,5.50692224502563,3.18643069267273,28.6368103027344,5.63183641433716,2.88213300704956,32.440502166748,4.80782842636108,2.88537335395813,32.3740043640137,4.91404724121094,3.25417995452881,31.2281646728516,5.60531949996948,3.57900738716125,29.9968357086182,6.06741666793823,3.84910750389099,29.0165786743164,6.32851791381836,3.78587698936462,22.6147346496582,4.40958499908447,4.40473413467407,23.2173252105713,5.3618688583374,5.05243253707886,23.7748394012451,5.98046350479126,5.15192556381226,23.9108238220215,6.03752183914185,5.09901189804077,24.0283966064453,6.06259202957153,4.98978471755981,24.8948726654053,6.22997379302979,4.42884540557861,27.3927001953125,6.41243886947632,3.99426865577698,29.0578422546387,6.27595472335815,3.70775318145752,30.0652732849121,5.9921236038208,3.36599230766296,31.2928047180176,5.52768707275391,\n3.21600556373596,23.382287979126,3.66167640686035,3.13256430625916,23.4489612579346,3.96262264251709,2.60371732711792,26.5579433441162,3.99766564369202,2.36950469017029,28.1366233825684,4.2071647644043,2.27195620536804,28.888053894043,4.36787366867065,2.10059666633606,29.8359222412109,4.44796895980835,3.65240097045898,22.6352996826172,4.09371852874756,3.45793771743774,22.3002586364746,3.45713114738464,5.93335342407227,23.5488815307617,6.10497140884399,8.28321838378906,35.4727020263672,4.0598840713501,8.21437072753906,35.5108833312988,3.94676041603088,8.23526859283447,35.5774803161621,4.07809209823608,8.98128318786621,33.3073310852051,1.50170826911926,8.80344772338867,33.7087898254395,1.31972646713257,8.37926006317139,35.5428810119629,0.895102500915527,9.05762958526611,33.3395156860352,3.25746941566467,8.79792022705078,33.7233619689941,3.65049529075623,8.32604217529297,35.6871376037598,0.887703597545624,8.37180233001709,35.6292266845703,1.01363062858582,7.92610263824463,36.6413269042969,3.91050696372986,9.65692615509033,34.4289665222168,3.45484137535095,9.65652179718018,34.4304313659668,1.51501369476318,9.64732360839844,36.1605224609375,1.23773038387299,9.6471118927002,36.1608505249023,3.73834991455078,8.90835475921631,36.0127983093262,4.05285596847534,8.04823875427246,38.801326751709,3.066978931427,8.04919147491455,38.7976417541504,1.90342044830322,8.91025924682617,36.0060348510742,0.912298798561096,8.98512554168701,35.85498046875,0.943507790565491,9.66490745544434,35.9975662231445,1.24367785453796,9.66507625579834,35.9963912963867,3.73160123825073,8.98733711242676,35.8529968261719,4.02006530761719,8.58648204803467,38.6790885925293,1.94465684890747,8.5863561630249,38.6800575256348,3.02977108955383,8.05947399139404,38.9483451843262,2.96082544326782,8.3496265411377,37.876407623291,1.19929134845734,9.70539474487305,34.3412780761719,3.23126864433289,9.09271430969238,37.9376640319824,3.39191293716431,9.04487419128418,37.9428787231445,3.58865451812744,9.60724449157715,34.5523490905762,3.56974840164185,9.73832893371582,35.9771957397461,3.46515989303589,\n9.29694271087646,36.0857925415039,3.90996932983398,8.72676181793213,38.6951217651367,2.94520330429077,8.65796184539795,38.7216682434082,2.94792580604553,8.65403747558594,38.6301765441895,3.03623008728027,8.65191173553467,37.937370300293,1.26801216602325,8.31970977783203,38.7574996948242,1.91880691051483,8.65421104431152,38.628044128418,1.93424451351166,9.04490661621094,37.9410629272461,1.38660764694214,9.34207344055176,35.9353485107422,3.8918993473053,9.34069728851318,35.9380073547363,1.07297730445862,8.72695350646973,38.6949348449707,2.0697033405304,8.65809059143066,38.7215995788574,2.0669732093811,8.05986881256104,38.9483337402344,2.05407619476318,9.70482158660889,34.3420333862305,1.77387404441834,9.73829746246338,35.9785690307617,1.59816265106201,9.09149074554443,37.9406356811523,1.67303395271301,8.87478923797607,35.9269828796387,1.03641319274902,9.2094841003418,35.9949035644531,1.16528415679932,9.29795265197754,36.0840759277344,1.05569672584534,9.5132417678833,36.056079864502,1.33062779903412,9.62839031219482,36.0285873413086,1.6688996553421,9.74010372161865,36.1250686645508,1.59929883480072,9.6286153793335,36.0278968811035,3.39043879508972,9.74026870727539,36.1246604919434,3.46993517875671,9.51327228546143,36.0559005737305,3.64421725273132,9.20956325531006,35.9938201904297,3.79994034767151,8.87504005432129,35.9276924133301,3.92794609069824,8.37112808227539,38.8416557312012,2.06099200248718,8.37003135681152,38.8421287536621,2.9540810585022,8.31944561004639,38.7596626281738,3.05168437957764,8.65036487579346,37.9585037231445,3.69329905509949,8.33966159820557,37.9150276184082,3.76029419898987,9.63536262512207,34.6465492248535,3.56787443161011,9.71852207183838,34.5815124511719,3.4976921081543,9.76471328735352,34.5473899841309,3.26735043525696,9.76347923278809,34.56298828125,1.74737155437469,9.71766757965088,34.592529296875,1.47125852108002,9.63161945343018,34.6595687866211,1.3942711353302,9.60330772399902,34.5609931945801,1.39289259910584,8.2984733581543,38.0600166320801,1.24847328662872,8.60289287567139,38.0795478820801,1.30549657344818,\n8.97101306915283,38.050895690918,1.3974621295929,9.00732898712158,38.0661354064941,1.67648065090179,9.00812816619873,38.0641098022461,3.38718843460083,8.97093868255615,38.052806854248,3.57767224311829,8.60173034667969,38.0949897766113,3.65988159179688,8.29121208190918,38.0429191589355,3.71564388275146,8.25728702545166,38.1638870239258,1.49070048332214,8.52094841003418,38.2038345336914,1.5344785451889,8.83392238616943,38.2279777526855,1.6033970117569,8.87556648254395,38.2440948486328,1.82842564582825,8.875901222229,38.2435035705566,3.21620106697083,8.83407974243164,38.2287864685059,3.36956572532654,8.52165985107422,38.2090759277344,3.43147039413452,8.25486278533936,38.1729011535645,3.47432494163513,8.57520580291748,36.9442749023438,1.05579495429993,8.92019557952881,37.056266784668,1.16185414791107,9.29137802124023,37.1757545471191,1.31216907501221,9.36106109619141,37.1578140258789,1.63616633415222,9.36175537109375,37.1561241149902,3.4309241771698,9.29125690460205,37.1768264770508,3.66350221633911,8.91891670227051,37.1471099853516,3.80163431167603,8.56927108764648,37.0888748168945,3.90657520294189,8.83453559875488,33.546947479248,1.04526650905609,8.76492404937744,33.456356048584,0.906054317951202,8.39243221282959,33.0780563354492,-0.461591124534607,8.27371215820313,32.9051399230957,-0.532841503620148,8.87887573242188,32.999683380127,1.01147544384003,8.57392024993896,32.4365539550781,-0.315257996320724,8.42005634307861,32.313835144043,-0.395357549190521,8.54056930541992,34.598030090332,3.85518980026245,9.29729080200195,35.2026748657227,3.79490661621094,9.48871803283691,35.2909469604492,3.72988700866699,9.69179916381836,35.2889518737793,3.61464691162109,9.75152111053467,35.2622909545898,3.36625528335571,9.75088977813721,35.2707824707031,1.672767162323,9.69128799438477,35.2950477600098,1.35746812820435,9.48615837097168,35.2987899780273,1.23362421989441,9.29421615600586,35.2079849243164,1.16820025444031,8.59135437011719,34.6258354187012,1.10741424560547,8.59774780273438,34.5392456054688,0.842900216579437,8.51461982727051,34.4369354248047,0.672342777252197,\n8.21594047546387,33.7888870239258,-0.589591026306152,8.08582305908203,33.6414337158203,-0.667325794696808,7.97919321060181,35.5220642089844,-0.356160432100296,7.86904096603394,35.527904510498,-0.407945513725281,9.41505527496338,25.5495491027832,1.24658966064453,4.65747976303101,29.993688583374,-1.9929701089859,5.70963573455811,25.2698745727539,-1.25907444953918,4.05296611785889,24.9229850769043,-1.07812261581421,1.94002258777618,29.5671463012695,2.09152460098267,1.39111661911011,29.5243148803711,1.60391390323639,1.16515398025513,30.6779403686523,1.79934179782867,1.99050807952881,29.5482559204102,0.0322921723127365,3.18263959884644,24.8409614562988,0.259835541248322,3.07358360290527,24.7372646331787,-0.0272905211895704,3.43370652198792,23.3883876800537,-0.0178845003247261,3.67771339416504,23.4529304504395,0.146148890256882,7.49344301223755,25.4977970123291,-1.50432002544403,8.73250484466553,25.5885562896729,-0.433179765939713,3.90392780303955,24.9208126068115,-1.19340264797211,2.86472368240356,24.7657909393311,-0.011822797358036,1.67441141605377,29.4105987548828,0.0618886798620224,1.62392604351044,29.4356174468994,2.00085210800171,1.67769014835358,29.4277153015137,-0.223505362868309,2.7168333530426,29.4735317230225,-1.74457061290741,6.45831537246704,30.1916770935059,-2.30510973930359,7.7251763343811,30.5071926116943,-1.30389845371246,6.30463266372681,30.1748123168945,-2.29767990112305,4.73208427429199,29.9153747558594,-2.37516093254089,4.5478458404541,29.8604946136475,-2.31193232536316,2.86321783065796,29.5412120819092,-1.96411395072937,7.28996992111206,25.404899597168,-1.47658205032349,5.74078845977783,25.2103481292725,-1.61829876899719,2.64102792739868,24.8287105560303,1.95682787895203,2.86312246322632,24.7931175231934,0.245301082730293,8.77632522583008,30.8639965057373,-0.043558195233345,9.689621925354,25.6373138427734,1.0596616268158,8.80739498138428,25.5922794342041,-0.354497760534287,7.8030800819397,30.560209274292,-1.22313511371613,4.01765489578247,24.8804779052734,-1.40720963478088,5.62358236312866,25.1768970489502,-1.58816146850586,\n1.97695231437683,29.7982711791992,3.62867569923401,1.983323097229,29.7955074310303,3.76431751251221,7.27921152114868,7.94315719604492,1.11295449733734,8.45061302185059,7.78688621520996,2.35225319862366,9.98027992248535,7.93115139007568,2.6541576385498,11.047269821167,8.17732429504395,2.32532548904419,12.2088813781738,8.54818725585938,1.43931353092194,12.7967157363892,8.97920799255371,-0.303374022245407,12.7254018783569,9.27799606323242,-1.02359855175018,9.60103511810303,9.58114910125732,-4.08662033081055,8.47558498382568,9.39766216278076,-3.92700147628784,7.04356861114502,9.15869903564453,-3.36116600036621,6.57959508895874,8.94561100006104,-2.03293538093567,6.16128015518188,8.42148208618164,-0.628806829452515,5.64768552780151,12.3261880874634,1.44831931591034,5.9045262336731,11.2130880355835,1.26543354988098,5.8640022277832,9.76654434204102,1.05148673057556,6.4172043800354,8.82000827789307,0.554828345775604,6.70876121520996,8.10266876220703,0.363239943981171,12.200852394104,9.57963943481445,-2.46441507339478,12.4662971496582,10.3750247955322,-2.37286257743835,12.2984609603882,11.5450801849365,-1.93835651874542,12.0142498016357,12.9365711212158,-1.61892592906952,11.9773483276367,13.8030195236206,-1.4678817987442,11.8417062759399,15.5326137542725,-1.05799794197083,11.2553758621216,17.1266117095947,-0.394293993711472,10.8601474761963,18.0437698364258,0.00694957328960299,10.4829511642456,18.8434734344482,0.322913497686386,9.9399585723877,19.8044834136963,0.532618045806885,9.69186401367188,20.4600238800049,0.586481034755707,9.4355001449585,21.1805152893066,0.577586591243744,9.07950115203857,22.0507411956787,0.495223522186279,8.69851875305176,23.1948986053467,0.245849296450615,6.16310691833496,31.7836303710938,6.44500494003296,7.04650259017944,25.1148319244385,5.67837047576904,7.1069540977478,25.0596961975098,6.07496929168701,7.16845560073853,25.0319118499756,6.39875030517578,7.08851909637451,25.8666687011719,6.62717199325562,6.80701875686646,27.7775402069092,6.78988933563232,6.44509267807007,29.9831085205078,6.92495393753052,\n6.4039478302002,30.032678604126,6.60236120223999,6.41693687438965,30.1916389465332,6.91217041015625,6.20972585678101,31.6967830657959,6.77317142486572,-6.54231739044189,12.6112308502197,2.51405692100525,-5.62890911102295,12.6281480789185,1.56339108943939,-5.08411502838135,13.020073890686,0.0338337942957878,-5.60205984115601,13.3931608200073,-1.27092814445496,-8.1321964263916,13.9843788146973,-3.27790832519531,-9.74130058288574,14.2703952789307,-3.36757755279541,-11.2661638259888,14.2782869338989,-2.45767784118652,-11.9547777175903,14.0997133255005,-1.39795982837677,-12.5701141357422,13.9658508300781,-0.201430022716522,-12.4840297698975,13.6959028244019,1.45385241508484,-11.4584693908691,13.1931886672974,2.85491061210632,-10.697582244873,12.8946161270142,3.39300060272217,-6.09357261657715,14.955735206604,3.21051430702209,-5.30345153808594,15.0847148895264,2.32294702529907,-4.65844058990479,15.4953756332397,0.879150092601776,-5.3569164276123,15.7576780319214,-0.361837923526764,-7.63014793395996,16.5907344818115,-2.55088973045349,-9.18150901794434,16.8746166229248,-2.59523558616638,-10.7870645523071,16.9461994171143,-1.46924579143524,-11.3884553909302,16.7632884979248,-0.545281529426575,-11.8917779922485,16.6512069702148,0.681422531604767,-11.7337970733643,16.379919052124,2.31548643112183,-4.29751968383789,24.8999042510986,-1.23498022556305,-4.68551063537598,23.5386791229248,-1.07134437561035,-4.90844106674194,23.582426071167,-0.784929275512695,-5.06855154037476,22.799654006958,-0.584399402141571,-5.32814025878906,21.655574798584,-0.376716136932373,-5.36390161514282,20.6551761627197,-0.347969770431519,-5.5555419921875,20.0228042602539,-0.38139283657074,-5.59836912155151,19.3803081512451,-0.498663604259491,-5.93225002288818,18.2411861419678,-0.859450995922089,-6.02198886871338,17.4772243499756,-1.10206782817841,-6.18644666671753,16.2123355865479,-1.70700764656067,-6.38514518737793,14.8989009857178,-2.24836111068726,-6.56212663650513,13.678539276123,-2.60871553421021,-6.80606079101563,12.2707643508911,-2.95792460441589,\n-7.0539927482605,11.1793432235718,-3.29677653312683,-7.20544815063477,10.1790170669556,-3.73171949386597,-7.26315689086914,9.19534206390381,-3.44793200492859,-10.0475654602051,11.6314668655396,-4.09846067428589,-10.0540437698364,10.5353965759277,-4.18405389785767,-9.9586124420166,9.60340690612793,-3.94887590408325,11.2027616500854,9.68085098266602,-3.46960878372192,11.4367513656616,10.549054145813,-3.45530366897583,11.2972002029419,11.8169927597046,-3.32886862754822,11.1392621994019,13.012734413147,-2.86512422561646,11.1196727752686,13.9444828033447,-2.67804932594299,10.8612976074219,15.5450296401978,-2.19082450866699,10.4322099685669,17.3136310577393,-1.5093207359314,10.1309051513672,18.2544040679932,-1.11548435688019,9.73401069641113,19.0150680541992,-0.632054448127747,9.29386520385742,19.8477249145508,-0.29420593380928,9.02189445495605,20.4448375701904,-0.182775765657425,8.72895908355713,21.1493473052979,-0.079991951584816,7.38872718811035,21.8982887268066,-0.293966174125671,7.18128442764282,23.0726432800293,-0.403393626213074,4.94621467590332,22.7787132263184,-0.587266862392426,5.13886499404907,21.6332550048828,-0.364601194858551,5.25503253936768,20.6421451568604,-0.341791093349457,5.42467212677002,20.0016403198242,-0.356989920139313,5.51656103134155,19.3624057769775,-0.464608579874039,5.83164167404175,18.1995677947998,-0.796680629253387,5.99487543106079,17.471996307373,-1.08526873588562,6.09748268127441,16.7805137634277,-1.46871149539948,6.26286697387695,14.8802556991577,-2.18778109550476,6.45515012741089,13.1925020217896,-2.67920064926147,6.63633728027344,12.2249088287354,-2.88158559799194,6.9144926071167,11.1545562744141,-3.08205604553223,2.08748078346252,44.8266448974609,-3.61138391494751,1.88030695915222,44.8266448974609,-3.81855821609497,1.73669397830963,45.5486373901367,-3.81855821609497,1.92809784412384,45.6279182434082,-3.61138391494751,1.3277200460434,46.1607093811035,-3.81855821609497,1.47421503067017,46.307201385498,-3.61138391494751,0.715646982192993,46.5696830749512,-3.81855893135071,0.794929981231689,46.7610855102539,-3.61138391494751,\n-0.00634199986234307,46.7132949829102,-3.81855893135071,-0.00634199986234307,46.920467376709,-3.61138391494751,-0.728331029415131,46.5696830749512,-3.81855893135071,-0.807613015174866,46.7610855102539,-3.61138391494751,-1.34040415287018,46.1607093811035,-3.81855821609497,-1.48689794540405,46.307201385498,-3.61138391494751,-1.74937784671783,45.5486335754395,-3.81855893135071,-1.94078195095062,45.6279182434082,-3.61138391494751,-1.89299011230469,44.8266448974609,-3.81855893135071,-2.10016393661499,44.8266448974609,-3.61138391494751,-1.74937784671783,44.1046562194824,-3.81855821609497,-1.94078195095062,44.0253753662109,-3.61138391494751,-1.34040415287018,43.4925842285156,-3.81855821609497,-1.48689794540405,43.3460884094238,-3.61138510704041,-0.728331029415131,43.083610534668,-3.81855821609497,-0.807613015174866,42.8922080993652,-3.61138391494751,-0.00634100008755922,42.939998626709,-3.81855821609497,-0.00634100008755922,42.7328224182129,-3.61138272285461,0.715647995471954,43.083610534668,-3.81855821609497,0.794929981231689,42.8922080993652,-3.61138391494751,1.32772099971771,43.4925842285156,-3.81855821609497,1.47421503067017,43.3460922241211,-3.61138391494751,1.73669505119324,44.1046562194824,-3.81855821609497,1.92809915542603,44.0253753662109,-3.61138391494751,-0.0702939033508301,46.9095268249512,-2.83078742027283,-0.00634199986234307,44.8266448974609,-3.81855893135071,-0.00774500099942088,48.5321197509766,-4.27275657653809,-2.79399394989014,48.5291366577148,-4.25684595108032,-1.97193670272827,49.2199897766113,-4.70548629760742,-0.0079365773126483,49.2231712341309,-4.72618436813354,-3.93324613571167,48.1487579345703,-3.40063524246216,-2.86614584922791,49.3610649108887,-4.13264656066895,-2.95772695541382,48.5543785095215,-4.20622110366821,-3.24585890769959,47.8829612731934,-3.85739922523499,-3.16376090049744,46.6581039428711,-3.27878475189209,-3.93707990646362,48.0531578063965,-3.37293791770935,-3.2502818107605,47.7346115112305,-3.79583311080933,-2.82787704467773,46.7353248596191,-3.73126482963562,-3.13004899024963,46.5379753112793,-3.27038884162903,\n-2.78846979141235,46.5956077575684,-3.71025991439819,-2.77864789962769,44.5108299255371,-3.70978999137878,-3.10399317741394,44.4963989257813,-3.17587113380432,-0.00774674257263541,42.1210021972656,-3.3051495552063,-1.71360194683075,42.1770324707031,-3.16398596763611,-1.34515404701233,42.3104934692383,-3.69572424888611,-0.00774500146508217,42.3095550537109,-3.69797968864441,-2.17577815055847,49.2368698120117,-4.64067125320435,-1.4881579875946,50.2866439819336,-4.61767959594727,-1.25603806972504,49.8282089233398,-4.99077701568604,-1.59205400943756,46.349178314209,-3.77787971496582,-2.68635511398315,46.6700057983398,-3.77787971496582,-2.76875805854797,46.9001617431641,-3.77554607391357,-0.831133008003235,46.8742370605469,-3.77787899971008,-2.67803001403809,44.5424156188965,-3.77787899971008,-2.01448392868042,45.6905746459961,-3.77787899971008,-2.18441390991211,44.7907295227051,-3.77787899971008,-0.00948680471628904,50.4008445739746,-4.60829496383667,-0.00942133273929358,49.8690757751465,-5.05734491348267,-1.13300633430481,49.8691291809082,-5.00537014007568,-2.76524996757507,43.1158752441406,-3.17091298103333,-2.48791909217834,43.2134246826172,-3.70322799682617,-1.46523594856262,42.3661613464355,-3.70073199272156,-1.15198469161987,49.7354354858398,-5.01462888717651,-0.00865909457206726,49.7371101379395,-5.06615304946899,-0.00774500006809831,42.4267349243164,-3.77787899971008,-1.36082100868225,42.4239044189453,-3.77787899971008,-0.82917308807373,42.7932014465332,-3.77787899971008,-0.00774500006809831,42.6284027099609,-3.77787899971008,-0.00774500006809831,47.0389404296875,-3.80383110046387,-1.53621804714203,43.2656326293945,-3.77787899971008,-2.01435494422913,43.9812316894531,-3.77787899971008,-0.00774500006809831,47.7899284362793,-3.90835189819336,-2.88847088813782,48.390251159668,-4.16416501998901,-3.15139889717102,47.7899284362793,-3.85440111160278,-2.3965790271759,43.2774925231934,-3.77787899971008,-2.85712099075317,47.7899284362793,-3.90835189819336,-0.00774500006809831,44.4963836669922,-2.88441801071167,-0.00774500379338861,43.1158981323242,-2.87946343421936,\n1.95598769187927,49.219898223877,-4.70561122894287,2.7785050868988,48.5291366577148,-4.25684595108032,3.93082571029663,48.1475028991699,-3.40081644058228,3.23036909103394,47.8829612731934,-3.85739922523499,2.94223666191101,48.5543785095215,-4.20622110366821,2.85060954093933,49.3610458374023,-4.13265657424927,3.15620064735413,46.6549911499023,-3.27752184867859,2.81238603591919,46.7353248596191,-3.73126459121704,3.23479199409485,47.7346115112305,-3.79583311080933,3.92158389091492,48.0531539916992,-3.37293839454651,2.76315808296204,44.5108299255371,-3.70978999137878,2.77297902107239,46.5956077575684,-3.71025967597961,3.13004899024963,46.537971496582,-3.27039289474487,3.08850169181824,44.4963836669922,-3.17586994171143,1.32966256141663,42.3104934692383,-3.69572329521179,1.66867196559906,42.1703910827637,-3.14673805236816,2.16000866889954,49.2367668151855,-4.64066600799561,1.23720574378967,49.8278503417969,-4.99131345748901,1.46432018280029,50.2877388000488,-4.62241172790527,1.57656502723694,46.349178314209,-3.77787971496582,0.815643012523651,46.8742370605469,-3.77787899971008,2.75326800346375,46.9001617431641,-3.77554607391357,2.67086505889893,46.6700057983398,-3.77787971496582,1.99899387359619,45.6905746459961,-3.77787899971008,2.66253995895386,44.5424156188965,-3.77787899971008,2.16892409324646,44.7907295227051,-3.77787899971008,1.11472451686859,49.868824005127,-5.00572633743286,2.74976110458374,43.1158752441406,-3.17091298103333,2.47242999076843,43.2134246826172,-3.70322799682617,1.44974386692047,42.3661613464355,-3.70073080062866,1.13459324836731,49.7351531982422,-5.01477098464966,0.813682913780212,42.7932014465332,-3.77787899971008,1.34533095359802,42.4239044189453,-3.77787899971008,1.52072787284851,43.2656326293945,-3.77787899971008,1.99886500835419,43.9812316894531,-3.77787899971008,2.87298202514648,48.390251159668,-4.16416501998901,3.13590908050537,47.7899284362793,-3.85440111160278,2.38108801841736,43.2774925231934,-3.77787899971008,2.84163093566895,47.7899284362793,-3.90835189819336,-4.58376359939575,63.043212890625,-0.74325555562973,\n-4.32382106781006,63.199146270752,-2.11853528022766,-5.61950731277466,62.6101608276367,-2.02238321304321,-5.5639181137085,62.6561889648438,-0.627221822738647,-3.81792235374451,61.6314811706543,1.93067765235901,-4.23066997528076,62.7958450317383,0.643227458000183,-4.50719594955444,62.3577041625977,0.684112071990967,-4.24381637573242,61.2449722290039,1.89936196804047,-4.83367252349854,60.567813873291,3.36426424980164,-4.02966737747192,60.8557052612305,3.31201100349426,-4.2675518989563,61.3561515808105,2.65948343276978,-5.05083751678467,61.1046981811523,2.70250844955444,-4.2227029800415,59.0873870849609,4.58839559555054,-3.1375093460083,59.3523139953613,4.54741859436035,-2.95601749420166,59.3083114624023,4.45222663879395,-1.78824007511139,59.4734725952148,4.38385057449341,-2.04711675643921,60.3847465515137,3.65144824981689,-3.29090762138367,60.1977424621582,3.68307900428772,0.571158766746521,60.8396873474121,5.0963306427002,-0.839762628078461,60.8675537109375,5.13892889022827,-0.867940545082092,59.7659683227539,5.27337598800659,0.544704496860504,59.7316017150879,5.23783779144287,-6.39116334915161,62.2082328796387,-0.568828225135803,-6.51852989196777,62.1134452819824,-1.99753320217133,-5.04658603668213,61.0131149291992,1.97637069225311,-5.38415002822876,62.0700721740723,0.693856477737427,-6.20381593704224,61.7258529663086,0.790133476257324,-5.95493364334106,60.6742477416992,2.05090570449829,-6.10866117477417,59.5777435302734,2.72402358055115,-5.58027458190918,59.5957260131836,2.72076964378357,-6.3722677230835,60.6542625427246,2.03971314430237,-2.61364102363586,58.3588180541992,5.07920122146606,-1.34503436088562,58.123950958252,5.24714374542236,-0.906973481178284,58.397289276123,5.45396566390991,0.50952011346817,58.3454170227051,5.40429639816284,-5.79731750488281,61.9858093261719,-3.4841206073761,-6.64396810531616,61.690299987793,-3.41667151451111,-6.98294544219971,60.5666580200195,1.96027648448944,-7.32416105270386,61.496711730957,0.851831436157227,-7.35325860977173,61.2873115539551,0.723838567733765,-6.97983884811401,60.3939323425293,1.76361238956451,\n-0.967165589332581,57.3445663452148,5.59643316268921,0.468669772148132,57.2876739501953,5.54235649108887,-7.52687740325928,56.2300033569336,3.33295869827271,-7.61058712005615,55.2209396362305,2.84668350219727,-7.5824499130249,55.3210792541504,3.7516176700592,-7.54807090759277,56.2279281616211,3.62562227249146,-7.93686151504517,58.7858695983887,-4.79697370529175,-8.15877056121826,58.8994178771973,-4.62168502807617,-8.16490364074707,58.9746856689453,-4.9071307182312,-7.90763759613037,58.8739242553711,-4.98211908340454,-7.96249437332153,53.4727363586426,1.87367284297943,-7.73882818222046,53.5761909484863,1.88744831085205,-8.21688365936279,53.0939102172852,0.0579092763364315,-8.36908531188965,53.0343475341797,0.124661922454834,-6.6935658454895,53.8076362609863,4.69332361221313,-7.47776079177856,55.1806678771973,3.96003985404968,-7.20041465759277,53.4745635986328,4.326331615448,-6.71329784393311,52.4803886413574,4.68359184265137,-6.11323595046997,55.6096496582031,-5.85344552993774,-5.36878347396851,53.065486907959,-5.65250778198242,-6.28663635253906,53.3525581359863,-5.50807046890259,-7.25142240524292,55.2232780456543,-5.57690858840942,-6.5656213760376,52.5676918029785,-4.90726852416992,-6.05972480773926,51.4805221557617,-4.63228845596313,-6.8934383392334,51.4382705688477,-4.08465576171875,-7.4780101776123,53.3036689758301,-4.63438510894775,-8.09913444519043,52.0839996337891,-1.7106853723526,-7.95109605789185,52.5316047668457,-3.3199098110199,-7.54325914382935,51.3055038452148,-3.03992581367493,-7.89064073562622,51.2711715698242,-1.57859110832214,-7.34243583679199,53.1391639709473,2.97148561477661,-7.72463750839233,52.8233032226563,1.86843764781952,-7.47193384170532,51.8114624023438,1.93101298809052,-6.97390651702881,52.0725975036621,3.13220763206482,-2.20823454856873,55.570972442627,6.08277320861816,-3.19988632202148,53.8476066589355,6.19407176971436,-1.59189522266388,52.2857933044434,6.59298801422119,0.0742019414901733,53.7155609130859,6.43243837356567,4.71617744857156e-010,52.2723007202148,6.92303466796875,-1.00653862953186,51.9871368408203,6.87207269668579,\n-4.69440269470215,51.794303894043,-5.06654739379883,-4.19027042388916,51.1079444885254,-4.80165195465088,-5.59660387039185,50.505672454834,-4.25932693481445,-6.42431688308716,50.2381935119629,-3.64198398590088,-7.11456871032715,50.1765480041504,-2.64489150047302,-7.54669952392578,50.2063140869141,-1.27075219154358,-7.87716817855835,51.4646224975586,0.311745405197144,-7.48381662368774,50.4245948791504,0.464674741029739,-7.13096857070923,50.6294746398926,2.01429176330566,-6.53003597259521,50.9027862548828,3.39372110366821,-6.73277521133423,52.2691230773926,4.57926988601685,-6.16375160217285,51.0633430480957,5.00885963439941,-3.75121450424194,50.402400970459,-4.5294942855835,-5.08280038833618,49.6628837585449,-3.84394526481628,-5.94112730026245,49.2127494812012,-3.15987420082092,-6.69155025482178,49.0641174316406,-2.19040656089783,-7.06008195877075,48.9655342102051,-0.943751931190491,-7.02285242080688,49.0458526611328,0.573255360126495,-6.71472215652466,49.3308906555176,2.09821772575378,-2.58982849121094,51.0738563537598,6.59774255752563,-3.55670809745789,49.7771186828613,6.5001277923584,-3.00732898712158,49.3212928771973,6.79382085800171,-2.01268601417542,50.7967338562012,6.85560035705566,-4.8608660697937,49.268138885498,-3.67571473121643,-5.84528207778931,48.3474311828613,-2.86911988258362,-6.37699604034424,48.1191711425781,-1.8216849565506,-6.74047231674194,48.0109062194824,-0.690343976020813,-6.82137680053711,47.9547233581543,0.649387001991272,-6.5790491104126,47.9910316467285,2.10321021080017,-6.25911617279053,49.4032783508301,3.64200615882874,-6.25825023651123,47.9997749328613,3.76795077323914,-6.06466388702393,49.4190444946289,4.19036960601807,-5.70988321304321,48.0457077026367,4.83566284179688,-5.44931507110596,49.5626525878906,5.51248121261597,-4.90697479248047,48.1723861694336,5.99959182739258,-6.3240818977356,46.956859588623,-1.68728196620941,-6.63816499710083,46.9563941955566,-0.538152992725372,-6.8033881187439,46.9570236206055,0.677780985832214,-6.67517471313477,46.9568824768066,2.0741720199585,-6.44183683395386,46.9564170837402,3.87416791915894,\n-5.754075050354,46.9542045593262,5.31309509277344,-4.68217277526855,46.987190246582,6.47571611404419,-6.23779010772705,46.8432464599609,-1.71466600894928,-5.16316509246826,46.4165267944336,-2.17705106735229,-6.20514297485352,46.4165267944336,-0.0732529982924461,-6.5817289352417,46.8283920288086,-0.480120033025742,-6.74122285842896,46.8339805603027,0.608999013900757,-6.32486486434937,46.4132232666016,2.05160284042358,-6.63257074356079,46.8119354248047,2.06915593147278,-6.11156702041626,46.4165267944336,3.76738452911377,-6.40335369110107,46.8159255981445,3.87055206298828,-5.7106761932373,46.8290824890137,5.30438184738159,-5.2943868637085,46.4165267944336,5.02039861679077,-5.7909722328186,52.3580474853516,5.50828695297241,-6.10384559631348,51.189281463623,5.15083789825439,-4.62400197982788,50.9104385375977,6.0946216583252,-5.3449330329895,49.7196502685547,5.73267936706543,-6.56144762039185,55.3431663513184,4.69130802154541,-7.36446571350098,56.6810684204102,3.84224009513855,-5.36580228805542,53.7305793762207,5.65301322937012,-3.89188385009766,52.3838729858398,6.17686653137207,-4.51043176651001,48.5544776916504,6.20510101318359,-5.98190259933472,56.9579467773438,4.80389547348022,-6.68937587738037,58.2481575012207,3.90044522285461,-4.60328149795532,55.290901184082,5.6990442276001,-4.99980068206787,57.5341339111328,4.98933744430542,-3.26686596870422,57.0321769714355,5.57355833053589,-3.75316452980042,58.0651702880859,5.14952659606934,-5.31166410446167,58.3614234924316,4.52154731750488,-6.15540170669556,58.9271240234375,3.77175760269165,-7.20317459106445,61.9830055236816,-1.89761126041412,-7.35737085342407,61.5284652709961,-3.30922079086304,-6.54331970214844,59.2050437927246,2.63021373748779,-6.27166366577148,58.902774810791,2.84936618804932,-6.29670572280884,58.9856071472168,2.92897891998291,-6.54550552368164,59.3159370422363,2.77967119216919,-1.39726603031158,60.5229339599609,3.58534479141235,-1.57510507106781,60.4082717895508,2.89312291145325,-2.00851607322693,60.4639854431152,3.49718189239502,-1.71285247802734,60.5445404052734,3.71867203712463,\n-1.78574860095978,60.459228515625,3.82921481132507,-1.48285102844238,59.5390167236328,4.49514532089233,-1.19663047790527,58.3662300109863,5.17178916931152,-3.87157917022705,47.958366394043,6.67540788650513,-0.636969029903412,60.8942604064941,4.83841991424561,-0.79024863243103,60.962833404541,5.07085466384888,0.457402557134628,60.361930847168,3.63983082771301,-1.26206767559052,60.3948707580566,3.71665692329407,-0.516775727272034,60.7121925354004,4.86698389053345,0.545945823192596,60.6655578613281,4.80527925491333,-1.90578651428223,50.7142028808594,6.84204292297363,-1.50750613212585,50.2555236816406,6.44407510757446,-0.874659955501556,51.203067779541,6.49364566802979,-0.924962282180786,51.8707618713379,6.86492204666138,-2.91349101066589,49.2260665893555,6.78605461120605,-3.75853896141052,47.8829345703125,6.66740846633911,-3.25709509849548,47.6898155212402,6.37078380584717,-2.45923495292664,48.8440284729004,6.41991806030273,-4.50668096542358,46.8707466125488,6.50796604156494,-4.11206912994385,46.4815940856934,6.28245401382446,-7.5585765838623,59.0654640197754,-5.5283989906311,-7.46995878219604,60.3856201171875,-4.44866323471069,-6.76721334457397,60.624568939209,-4.52078628540039,-6.14805173873901,58.5227699279785,-5.91488933563232,-8.05864524841309,60.3752021789551,-3.9132387638092,-8.06969451904297,60.5055313110352,-4.10362768173218,-0.00834100041538477,51.369815826416,6.50502157211304,1.2595011700256e-009,52.1202964782715,6.91541719436646,-5.90425300598145,46.973030090332,-2.72414398193359,-8.31435585021973,53.2308464050293,-2.7188241481781,-8.39944076538086,53.1169281005859,-2.95668482780457,-8.44471454620361,52.7640647888184,-1.54682695865631,-8.36096572875977,52.8903388977051,-1.48194587230682,-7.62678861618042,61.6284866333008,-0.48501443862915,-7.60568618774414,61.9373779296875,-0.485954850912094,-8.07814884185791,52.3394584655762,0.190092623233795,0.550290882587433,60.8882865905762,4.76571989059448,-1.7434366941452,50.909969329834,-5.18805742263794,-2.33943367004395,51.3982582092285,-5.23224210739136,-1.76871800422668,51.3153953552246,-5.25926828384399,\n-1.69533109664917,50.9382476806641,-5.19738101959229,-4.09396886825562,56.196460723877,-6.40887975692749,-3.05688333511353,52.6637115478516,-5.79943561553955,-4.14210891723633,52.8269729614258,-5.78603363037109,-5.18700265884399,55.8667755126953,-6.07534456253052,-5.05381393432617,60.7147941589355,-4.91381597518921,-5.34420251846313,58.4481544494629,-6.16356611251831,-5.99727916717529,60.7204170227051,-4.61755514144897,-4.70381879806519,62.4490394592285,-3.59227013587952,-1.3623218536377,64.8544158935547,-4.02434396743774,-2.69535136222839,64.7236633300781,-3.15585780143738,-2.63330173492432,64.7342224121094,-3.04266667366028,-1.30076444149017,64.8649139404297,-3.91433906555176,-2.93277454376221,64.6463317871094,-3.40469479560852,-1.52712595462799,64.7705841064453,-4.34073972702026,-1.74185812473297,63.4781951904297,-4.48097562789917,-3.31157374382019,63.4204177856445,-3.58641505241394,-7.94449377059937,61.180793762207,-3.00423622131348,-7.80348062515259,61.544132232666,-1.70561361312866,-7.8006796836853,61.8012619018555,-1.78784132003784,-7.95154476165771,61.3721466064453,-3.14195728302002,0.214391976594925,55.7572250366211,6.01338577270508,-3.25250649452209,49.7038879394531,-4.46880578994751,-4.53439283370972,48.4554710388184,-3.65794110298157,-4.01119709014893,48.0481262207031,-3.33346700668335,-7.51859521865845,58.8452682495117,-5.10757112503052,-6.20120143890381,58.3351211547852,-5.41772556304932,-6.19232892990112,57.6690216064453,-5.42325019836426,-7.71127843856812,56.8944816589355,-5.13498258590698,-6.16023826599121,57.5443153381348,-5.9100923538208,-5.33519744873047,57.9585075378418,-6.16003465652466,-1.66215860843658,50.8016624450684,-5.12652063369751,-4.62410402297974,48.569221496582,-3.68546104431152,-3.34473991394043,49.8112754821777,-4.51330900192261,-4.8910608291626,52.1097564697266,-5.17195892333984,-2.69803500175476,51.9790115356445,-5.39096403121948,-3.83595895767212,52.0539054870605,-5.2710337638855,-3.91096091270447,63.7480812072754,-0.699044585227966,-3.8998658657074,62.8821792602539,0.582818329334259,\n-3.79263281822205,62.8982276916504,0.564997851848602,-3.80441069602966,63.750545501709,-0.67096471786499,-3.5259120464325,61.7640151977539,1.78173208236694,-3.43862271308899,61.7851028442383,1.7415474653244,-3.04325079917908,60.1873435974121,2.77890586853027,-2.90677165985107,60.2012214660645,2.76055693626404,-5.70347547531128,60.2030410766602,3.3857159614563,-5.14836645126343,58.5717124938965,4.55252075195313,-5.91897249221802,60.7943534851074,2.75335693359375,-3.71688389778137,60.1887817382813,2.95689511299133,-3.28231477737427,60.2721557617188,3.00297999382019,-7.00085020065308,62.0723876953125,-0.526914358139038,-6.71971225738525,61.6056213378906,0.844036161899567,-5.56729745864868,59.691104888916,3.52987718582153,-5.71301651000977,59.4423065185547,3.64712882041931,-3.57847571372986,60.3826675415039,3.64219069480896,-3.41484713554382,60.31640625,3.62375426292419,-3.43720960617065,64.3827590942383,-2.05497550964355,-3.33806347846985,64.373649597168,-2.02164340019226,-7.5117359161377,56.8763389587402,-5.5517840385437,-7.51681709289551,55.0600738525391,-5.11080932617188,-8.18808746337891,56.4836807250977,-4.69205474853516,-8.17397975921631,56.5143508911133,-4.92143249511719,-8.42611789703369,56.3473014831543,-4.90101623535156,-8.42153263092041,56.3091087341309,-4.70873975753784,-4.25242900848389,63.668643951416,-0.809715628623962,-3.75736117362976,64.2761764526367,-2.15908741950989,-1.82880520820618,62.7808952331543,-4.68377876281738,-3.51832127571106,62.9156723022461,-3.66607904434204,-0.0918186083436012,61.6059226989746,-5.04513835906982,0.089295506477356,64.9278793334961,-3.91856741905212,-1.20361995697021,64.9284820556641,-3.66630864143372,-1.78249406814575,61.6841812133789,-4.69612216949463,-2.43641114234924,64.776237487793,-2.89365482330322,-3.68809533119202,61.2370948791504,-3.70195460319519,-3.11960220336914,64.4344711303711,-1.89050722122192,-4.29324579238892,61.4706230163574,-2.09579682350159,-4.03043651580811,60.6889381408691,-5.23682403564453,-3.69434881210327,62.3061599731445,-4.30991125106812,-1.99904704093933,61.890754699707,-5.26441860198975,\n-2.32371950149536,60.5881652832031,-6.12655019760132,-4.32064247131348,58.4800796508789,-6.37245512008667,-2.7642867565155,58.7345886230469,-7.30046129226685,-2.64850378036499,56.3666534423828,-6.92448711395264,-4.32152223587036,58.2924957275391,-6.41741704940796,-2.77837133407593,58.5525093078613,-7.33459043502808,-1.8128000497818,52.6286926269531,-5.84308671951294,-1.77487003803253,51.920768737793,-5.47106218338013,0.0356562063097954,64.7234802246094,-4.61506748199463,-1.38461744785309,64.9285125732422,-4.06673717498779,0.0609728880226612,64.8952407836914,-4.32138061523438,-2.71697616577148,64.7673110961914,-3.17705631256104,-3.46257162094116,64.443473815918,-2.06530833244324,-3.94199109077454,62.983268737793,0.581296861171722,-3.94407916069031,63.8352203369141,-0.665212631225586,-3.57530069351196,61.8030242919922,1.82063889503479,-3.06104803085327,60.3160057067871,2.79525184631348,-3.7186131477356,63.8903579711914,-0.602997303009033,-3.56484341621399,63.8104438781738,-0.593017041683197,-3.23749470710754,64.4939117431641,-1.95676457881927,-3.70114326477051,63.0644645690918,0.599607229232788,-3.36165261268616,61.9484100341797,1.65959894657135,-3.19595909118652,61.9603424072266,1.56978213787079,-3.56866765022278,63.0705299377441,0.546214044094086,-2.75167322158813,60.3334846496582,2.76962637901306,-2.56414723396301,60.1364898681641,2.75010204315186,0.0847144201397896,64.9677810668945,-4.00475406646729,-1.25541496276855,64.9892730712891,-3.77600860595703,-2.51733064651489,64.8335800170898,-2.96126484870911,0.0734657272696495,64.8587341308594,-4.12000608444214,-4.24810981750488,61.576530456543,-0.733366727828979,-3.94838953018188,61.1668014526367,0.518226802349091,-3.37294268608093,60.2822761535645,1.5179226398468,-2.91200637817383,59.3908653259277,2.5849940776825,-6.82584142684937,60.637638092041,2.02972936630249,-6.59677457809448,60.6480178833008,2.03354120254517,-6.9548020362854,61.5892181396484,0.870841264724731,-7.18994903564453,61.5924530029297,0.911215424537659,-7.22396469116211,62.0687561035156,-0.500075042247772,\n-7.47647523880005,62.0667533874512,-0.490093559026718,-7.61475467681885,61.5042686462402,-3.26833868026733,-7.74038124084473,60.527774810791,-4.30577659606934,-7.99301433563232,60.5206069946289,-4.27950382232666,-7.87079572677612,61.5232963562012,-3.24266457557678,-7.81935739517212,58.9824333190918,-5.09903573989868,-8.0924129486084,59.000919342041,-5.0706901550293,-7.83214282989502,58.866828918457,-5.02819395065308,-8.1098804473877,56.5675201416016,-4.97241449356079,-8.10898971557617,56.3552360534668,-5.11795043945313,-8.26838397979736,56.3286285400391,-5.13145208358765,-8.23261260986328,53.706787109375,-4.17268705368042,-8.0557107925415,53.6533622741699,-4.25916910171509,-8.14530372619629,52.7733764648438,-3.29093050956726,-8.30707454681396,52.8478546142578,-3.19642877578735,-8.27628803253174,52.3263549804688,-1.67589509487152,-8.42832279205322,52.4776878356934,-1.63117837905884,-8.18632793426514,52.5547828674316,0.146052852272987,-8.37635612487793,52.7546501159668,0.149770796298981,-7.51249170303345,53.3124504089355,2.78690814971924,-7.64465665817261,53.5720977783203,2.76785397529602,-7.95363235473633,53.2975158691406,1.8700042963028,-7.80556631088257,53.0341033935547,1.87100756168365,-6.48617029190063,59.484561920166,2.74641704559326,-6.29842090606689,59.5460929870605,2.73247408866882,-7.69457101821899,61.9715614318848,-1.835329413414,-8.43411827087402,55.0426902770996,-4.61854219436646,-8.34623622894287,55.1561393737793,-4.43017435073853,-7.64096307754517,60.1501045227051,-3.87785243988037,-7.49625825881958,61.0798950195313,-2.9828155040741,-7.35370254516602,61.4221534729004,-1.73613929748535,-7.17622709274292,61.5010375976563,-0.51791113615036,-6.91523408889771,61.202823638916,0.605588138103485,-6.57774353027344,60.3290176391602,1.66084718704224,-6.35670948028564,59.2731742858887,2.49360775947571,-7.50422096252441,53.8342018127441,2.74940204620361,-7.2566556930542,53.8614730834961,2.78290176391602,-7.49353122711182,53.6159477233887,1.90764617919922,-7.94503307342529,53.1864814758301,0.0282176788896322,-7.9549708366394,52.8700256347656,-1.50859487056732,\n-7.96328639984131,53.1706809997559,-2.78903388977051,-8.31184387207031,54.0695686340332,-3.66722226142883,-7.92632246017456,54.0190582275391,-3.66191935539246,-7.70141124725342,58.7751426696777,-4.54647636413574,-6.27638864517212,59.5400161743164,2.53925251960754,-6.50607967376709,60.5526657104492,1.92643594741821,-8.07038593292236,52.2434234619141,-1.69248294830322,-7.96759462356567,52.7209930419922,-3.31808614730835,-7.61819267272949,60.4214286804199,-4.24296760559082,-7.4810209274292,61.4227981567383,-3.22135496139526,-7.79561758041382,53.6034355163574,-4.36914300918579,-7.85904312133789,53.6684265136719,-4.26431846618652,-7.98485136032104,52.4866142272949,0.106641910970211,-7.42254686355591,53.2007141113281,2.78653001785278,-7.6494402885437,52.9461784362793,1.86628890037537,-7.57653474807739,58.8754005432129,-5.12168979644775,-7.72405338287354,58.9478569030762,-5.06216478347778,-7.11246538162231,61.9350814819336,-0.519005000591278,-7.32182884216309,61.8542060852051,-1.85933899879456,-6.84792947769165,61.4917144775391,0.795687735080719,-7.43170070648193,61.9802703857422,-1.8671942949295,-7.86005878448486,56.6191177368164,-5.02617025375366,-7.60842800140381,58.8298263549805,-5.02760219573975,-8.06415367126465,54.8332481384277,-4.83862638473511,-7.88765335083008,54.8009834289551,-4.77773761749268,-6.18232488632202,59.4378967285156,2.77493143081665,-7.85013294219971,56.4070434570313,-5.10472011566162,-7.81204700469971,54.7497901916504,-4.8719916343689,-7.95052146911621,56.4441223144531,-5.01730966567993,-8.27874279022217,54.9120445251465,-4.80373048782349,-8.25146007537842,56.3314056396484,-4.55567598342896,-7.93210744857788,54.9821128845215,-4.23069047927856,-7.95408296585083,56.4088516235352,-4.54346561431885,-7.97020149230957,56.5552177429199,-4.67629384994507,-7.72650098800659,58.7269325256348,-4.77987480163574,-7.64762830734253,53.7170715332031,2.75160121917725,-7.28203105926514,53.4123115539551,4.17407703399658,-4.18460321426392,46.4165229797363,6.23691034317017,-4.5854868888855,46.8244400024414,6.45518922805786,\n-8.3947172164917,53.9242362976074,-3.91152191162109,-7.25358581542969,53.5158271789551,2.94256782531738,-3.30491423606873,60.279857635498,3.50280833244324,-2.20571994781494,60.4498519897461,3.47556161880493,-5.74956703186035,59.5254211425781,3.4650239944458,-5.77024984359741,59.4889335632324,2.80213236808777,-5.85364294052124,46.8418388366699,-2.67328810691834,-6.75361680984497,58.3276672363281,3.71880674362183,-7.33256578445435,57.0262031555176,3.78657269477844,-6.23516368865967,58.9689674377441,3.59735703468323,-7.36459541320801,57.0623016357422,3.44520807266235,-7.56687450408936,56.1604690551758,2.89003968238831,-3.955890417099,56.2655372619629,2.80547332763672,-3.54599189758301,54.1063079833984,2.12714576721191,-6.78145313262939,58.3291358947754,3.44112706184387,-6.25753211975098,58.9583015441895,3.36031484603882,0.56591659784317,60.9374847412109,4.97343397140503,-3.91471815109253,60.7840843200684,-4.01472616195679,-4.06285715103149,59.9045066833496,-4.85574150085449,-4.18883037567139,53.0629119873047,-2.34154367446899,-4.15138673782349,53.1954498291016,-3.86174035072327,-4.19567823410034,53.9706230163574,-4.67239284515381,-4.24513530731201,54.9201240539551,-5.19692230224609,-4.33705139160156,56.3626861572266,-5.52872800827026,-4.16411161422729,58.473560333252,-5.76605749130249,-4.11923313140869,61.3103981018066,-2.24004507064819,-0.0120536936447024,63.4881744384766,-4.744140625,-0.0509749911725521,62.7385063171387,-4.96958208084106,-0.121715128421783,61.8404769897461,-5.5955662727356,-0.219929397106171,60.4644813537598,-6.40453100204468,-0.35008579492569,58.7120552062988,-7.50968503952026,-0.349118828773499,58.5352592468262,-7.54023218154907,-0.364377319812775,56.3196563720703,-7.08939933776855,-0.00144085090141743,52.6201858520508,-5.85287761688232,-1.02361262577233e-007,51.9188804626465,-5.5001220703125,-3.83015230909223e-006,51.363037109375,-5.26660108566284,-6.7137269070372e-005,50.9873809814453,-5.21520471572876,0.450963288545609,60.508602142334,3.4765157699585,0.404867559671402,60.425853729248,2.83471751213074,\n0.0632549822330475,64.8636856079102,-4.27300882339478,-0.000179281443706714,50.8601722717285,-5.14019870758057,-3.47588324546814,61.0890274047852,0.217192783951759,-3.13839221000671,60.2152214050293,1.27245187759399,-3.94175624847412,61.3892822265625,-1.02181816101074,-2.91735887527466,59.1593780517578,2.10521245002747,-2.83891701698303,58.7850646972656,2.45940685272217,-3.85023283958435,57.039306640625,3.17870736122131,-3.35745644569397,58.208324432373,3.05376410484314,5.02010917663574,62.7402877807617,-1.39398121833801,5.98073148727417,62.2920417785645,-1.40944695472717,5.84480476379395,62.2485504150391,-2.79916501045227,4.58750486373901,62.9180603027344,-2.72233581542969,4.53454971313477,61.3680229187012,1.36474180221558,4.92724514007568,60.9556922912598,1.27796185016632,5.0937385559082,62.0548629760742,0.0335866399109364,4.84226131439209,62.5096626281738,0.0284772422164679,5.66547679901123,60.236644744873,2.65287804603577,5.82473182678223,60.7616577148438,1.96561753749847,5.06012487411499,61.0619354248047,2.02747178077698,4.88142251968384,60.5746269226074,2.7082257270813,4.07134485244751,59.1249313354492,4.05896949768066,5.13338470458984,58.7922744750977,3.95445871353149,3.87628078460693,59.0928039550781,3.98929190635681,4.1595983505249,59.9627342224121,3.17825675010681,2.93709421157837,60.2275314331055,3.31373262405396,2.72253322601318,59.331241607666,4.07821607589722,1.9496830701828,59.6775894165039,5.08236646652222,1.97389197349548,60.7787818908691,4.94828033447266,6.77855348587036,61.7928314208984,-1.46116161346436,6.70602655410767,61.6963119506836,-2.89358234405518,5.71692848205566,60.6736068725586,1.24707210063934,6.60397052764893,60.2781143188477,1.19995760917664,6.74615859985352,61.3173828125,-0.0873100385069847,5.94421911239624,61.7127494812012,-0.0737143903970718,6.7779107093811,59.1712684631348,1.85087597370148,7.01390647888184,60.2320327758789,1.13271343708038,6.25608396530151,59.2223815917969,1.91877949237823,3.5621395111084,58.1640663146973,4.66100358963013,2.31515717506409,58.0082550048828,4.99951696395874,\n1.9252108335495,58.3083686828613,5.2624683380127,6.61228370666504,61.2721672058105,-4.31486797332764,5.78448820114136,61.620491027832,-4.26886224746704,7.6016001701355,60.1066246032715,0.972079873085022,7.56118869781494,59.9352760314941,0.778364241123199,7.84638595581055,60.8078804016113,-0.306033760309219,7.84799766540527,61.0181465148926,-0.17617954313755,1.84402525424957,57.2621192932129,5.42611074447632,7.84366416931152,56.018798828125,2.73109889030457,7.86818790435791,56.0672607421875,3.04531097412109,7.81051063537598,55.2174682617188,3.32655167579651,7.76036882400513,55.0956077575684,2.4961199760437,7.52259826660156,58.2982444763184,-5.84445095062256,7.47733116149902,58.3895835876465,-6.01985549926758,7.74510812759399,58.4728469848633,-5.98513507843018,7.77278757095337,58.396900177002,-5.70114850997925,8.0009765625,53.3985481262207,1.69253599643707,8.34988784790039,52.8600234985352,-0.242909118533134,8.18604564666748,52.8621520996094,-0.427325069904327,7.79039335250854,53.4825401306152,1.65745162963867,6.76972055435181,53.78125,4.58681106567383,6.74381017684937,52.4613380432129,4.63611125946045,7.25243473052979,53.4489440917969,4.23940467834473,7.68194818496704,55.0910224914551,3.6018500328064,5.40927171707153,55.2473602294922,-6.6052680015564,6.67838954925537,54.8764305114746,-6.32514047622681,6.1772665977478,53.3371505737305,-5.64527893066406,5.27864599227905,53.0355377197266,-5.73614311218262,6.51485586166382,52.558177947998,-4.9832935333252,7.3298282623291,53.212947845459,-4.86323070526123,6.85315132141113,51.4256782531738,-4.15692138671875,6.02868127822876,51.4665603637695,-4.66744089126587,8.04285430908203,51.997142791748,-1.87290894985199,7.8516902923584,51.2169647216797,-1.67703640460968,7.4989013671875,51.2678337097168,-3.12093544006348,7.84028339385986,52.4213790893555,-3.53092503547668,7.39905166625977,53.0712471008301,2.81852841377258,6.99802494049072,52.0388793945313,3.06340503692627,7.4852933883667,51.7712135314941,1.84239041805267,7.74805688858032,52.7701301574707,1.74453580379486,2.49818396568298,55.5261459350586,5.98455810546875,\n1.59213578701019,52.2858848571777,6.59295415878296,3.31338953971863,53.8208084106445,6.13590621948242,1.00655484199524,51.987133026123,6.87206411361694,4.69296979904175,51.7932968139648,-5.0672492980957,5.59105348587036,50.501651763916,-4.26247692108154,4.19015407562256,51.1079292297363,-4.80176305770874,6.42200231552124,50.2364692687988,-3.64404988288879,7.53672075271606,50.1936721801758,-1.29669344425201,7.11090564727783,50.1742286682129,-2.65364718437195,7.1360936164856,50.606201171875,1.96596682071686,7.47889614105225,50.4056777954102,0.423853397369385,7.86668872833252,51.4170875549316,0.213643938302994,6.53962087631226,50.8843116760254,3.36214828491211,6.75999784469604,52.2459869384766,4.53328800201416,6.17791032791138,51.0448303222656,4.98255777359009,5.08084535598755,49.6625213623047,-3.84669017791748,3.74644875526428,50.4024467468262,-4.53450059890747,5.94028806686401,49.2121620178223,-3.16044616699219,7.05950546264648,48.9649200439453,-0.944683134555817,6.69013833999634,49.0631523132324,-2.19327402114868,6.71513605117798,49.3276290893555,2.09133768081665,7.02219152450562,49.0446014404297,0.570955514907837,2.5901517868042,51.0738487243652,6.59761619567871,2.01463341712952,50.7975616455078,6.85545969009399,3.00734329223633,49.3213005065918,6.79381513595581,3.55670809745789,49.7771186828613,6.50012254714966,5.84528207778931,48.3474311828613,-2.86912393569946,4.86086177825928,49.2681350708008,-3.67572164535522,6.74047231674194,48.0109100341797,-0.690348029136658,6.37699508666992,48.1191711425781,-1.82168889045715,6.5790491104126,47.9910316467285,2.10320591926575,6.82137680053711,47.9547271728516,0.649383008480072,6.2605767250061,49.3998908996582,3.63599109649658,6.25825023651123,47.9997749328613,3.76794600486755,6.0664758682251,49.4155921936035,4.18459320068359,5.70988321304321,48.045711517334,4.83565807342529,5.45038986206055,49.5616111755371,5.51070880889893,4.90697479248047,48.1723861694336,5.999587059021,6.63816022872925,46.9563903808594,-0.53816032409668,6.3240818977356,46.956859588623,-1.68728601932526,\n6.67517042160034,46.9568786621094,2.07415676116943,6.80337762832642,46.9570121765137,0.677764475345612,6.44183683395386,46.9564170837402,3.87416291236877,5.754075050354,46.9542045593262,5.3130898475647,4.68217277526855,46.987190246582,6.47571086883545,6.23777198791504,46.8432350158691,-1.71467792987823,6.5817289352417,46.8283920288086,-0.480123966932297,6.20514297485352,46.4165267944336,-0.0732569992542267,5.16316509246826,46.4165267944336,-2.17705488204956,6.74122285842896,46.8339805603027,0.608995020389557,6.63257074356079,46.8119354248047,2.06915068626404,6.32486486434937,46.4132232666016,2.051598072052,6.40335369110107,46.8159294128418,3.8705472946167,6.11156702041626,46.4165267944336,3.76737928390503,5.7106761932373,46.8290863037109,5.30437707901001,5.29440116882324,46.4165306091309,5.02038335800171,5.82818698883057,52.3400382995605,5.46586132049561,6.11576223373413,51.1763458251953,5.13107061386108,4.62575817108154,50.9086380004883,6.09249019622803,5.34580421447754,49.7185516357422,5.73114681243896,6.88634872436523,55.2414398193359,4.26491832733154,7.81537961959839,56.4428901672363,3.10454225540161,5.42916774749756,53.7004776000977,5.59347772598267,3.90357780456543,52.3780746459961,6.16836404800415,4.51044845581055,48.5544815063477,6.20508909225464,6.60144710540771,56.7064781188965,4.13254833221436,7.42722702026367,57.8029670715332,2.94404196739197,4.89352321624756,55.1826019287109,5.48351907730103,5.78202342987061,57.2390213012695,4.32452249526978,4.67166042327881,57.801399230957,4.58475971221924,4.01073789596558,56.894344329834,5.16899347305298,6.15560865402222,57.9998016357422,3.74463558197021,6.92412900924683,58.5149536132813,2.88590669631958,7.38834810256958,61.5227546691895,-2.88627982139587,7.32209014892578,61.0654411315918,-4.30384731292725,7.17171764373779,58.7724380493164,1.70093142986298,7.20097732543945,58.8823394775391,1.84825837612152,6.95743131637573,58.6734466552734,2.02751755714417,6.91365003585815,58.4868774414063,1.95597612857819,2.29422402381897,60.406494140625,3.33521890640259,2.62562608718872,60.4076957702637,3.42470979690552,\n2.8831045627594,60.3096923828125,3.16574025154114,2.35357308387756,60.2916717529297,2.62549471855164,2.43926358222961,59.4155426025391,4.22939109802246,2.70725798606873,60.3175086975098,3.5247802734375,2.17027854919434,58.2606430053711,4.94453430175781,3.87157917022705,47.958366394043,6.67540216445923,1.73453235626221,60.8194580078125,4.67773103713989,1.92173361778259,60.8772926330566,4.8870964050293,1.60810160636902,60.6451683044434,4.7230052947998,2.17018938064575,60.2866172790527,3.4840943813324,1.90597474575043,50.7140579223633,6.8419189453125,0.925008773803711,51.8707427978516,6.86490345001221,0.874659955501556,51.203067779541,6.4936408996582,1.50750613212585,50.2555236816406,6.44406890869141,2.91349101066589,49.2260704040527,6.78604793548584,2.45935893058777,48.8440933227539,6.41992044448853,3.25709509849548,47.6898155212402,6.37077903747559,3.75853896141052,47.8829345703125,6.66740322113037,4.11207056045532,46.4815940856934,6.2824501991272,4.50787830352783,46.8712158203125,6.50769376754761,7.06748962402344,58.6041259765625,-6.51940870285034,5.58650636672974,58.1526374816895,-6.70998191833496,6.5185112953186,60.2055053710938,-5.42098045349121,7.20817947387695,59.9226379394531,-5.44320011138916,7.85527229309082,60.0032234191895,-5.18264484405518,7.86182594299316,59.8730316162109,-4.99195289611816,5.90363550186157,46.9726486206055,-2.72434210777283,8.0023193359375,52.8689422607422,-3.46774172782898,8.18311977386475,52.5618095397949,-2.12080335617065,8.31355285644531,52.5244979858398,-2.01270055770874,8.17157459259033,52.8635215759277,-3.48772740364075,7.97537708282471,61.1363525390625,-1.54216086864471,7.97375965118408,61.4459686279297,-1.54156196117401,8.06719875335693,52.2686042785645,0.0422511026263237,1.74116504192352,50.9104499816895,-5.18946409225464,1.69455194473267,50.938419342041,-5.19785785675049,1.76796686649323,51.315559387207,-5.25972318649292,2.33868432044983,51.3983879089355,-5.23276329040527,3.34593772888184,55.9631690979004,-6.91077470779419,4.4542236328125,55.5674438476563,-6.72269487380981,4.11547374725342,52.8102531433105,-5.79912376403809,\n3.04623699188232,52.662525177002,-5.80529499053955,4.7768440246582,60.404712677002,-5.57990789413452,5.75010442733765,60.3498764038086,-5.41351699829102,4.75339508056641,58.1296501159668,-6.84774398803711,4.71762418746948,62.1518669128418,-4.2306342124939,1.50592255592346,64.7639465332031,-4.21869039535522,1.46053183078766,64.7778167724609,-4.10143899917603,2.88753223419189,64.5600814819336,-3.41674184799194,2.93297648429871,64.5461273193359,-3.53721570968628,3.12937784194946,64.4551162719727,-3.81544661521912,3.40257287025452,63.2086334228516,-4.04134321212769,1.73337090015411,63.3685760498047,-4.71644878387451,1.62099945545197,64.6712875366211,-4.55404853820801,7.92197704315186,60.6803283691406,-4.07929086685181,7.9223952293396,60.8714447021484,-4.21751689910889,7.98260641098022,61.3034210205078,-2.85725903511047,7.9803261756897,61.0462760925293,-2.775066614151,3.25250363349915,49.7038879394531,-4.46881198883057,4.53436708450317,48.4554595947266,-3.65795111656189,4.00473260879517,48.0447540283203,-3.33397936820984,5.85138654708862,46.840446472168,-2.67395663261414,7.07243394851685,58.3854103088379,-6.09397554397583,7.17485189437866,56.4456405639648,-6.08475971221924,5.64443731307983,57.2957077026367,-6.22380256652832,5.69429159164429,57.9599113464355,-6.22372102737427,5.54111957550049,57.1751289367676,-6.69997549057007,4.7143702507019,57.6415023803711,-6.84087228775024,1.65925490856171,50.8022842407227,-5.12830448150635,4.62409734725952,48.5692176818848,-3.68546772003174,3.3447380065918,49.8112754821777,-4.51331520080566,4.89040231704712,52.1094703674316,-5.17248201370239,3.83429098129272,52.0528259277344,-5.27164268493652,2.69767594337463,51.9788131713867,-5.39102792739868,4.40495777130127,63.4857749938965,-1.2625036239624,4.30352926254272,63.4948043823242,-1.22033095359802,4.4049711227417,62.6396560668945,0.00955635961145163,4.5124077796936,62.6168365478516,0.012831655330956,4.14361429214478,61.5459403991699,1.22779977321625,4.23402643203735,61.5192489624023,1.25594413280487,3.65562963485718,59.9942283630371,2.31590938568115,\n3.79219460487366,59.971736907959,2.31575870513916,6.50562334060669,59.8179397583008,2.55847120285034,6.01156568527222,58.2197151184082,3.79637217521667,6.67060565948486,60.3972473144531,1.90033161640167,4.06411933898926,60.0404319763184,2.50520944595337,4.48241949081421,59.9301567077637,2.40133738517761,7.37859296798706,61.6188278198242,-1.50121402740479,7.25604486465454,61.1647911071777,-0.102911353111267,6.50256204605103,59.056999206543,2.81944441795349,6.35826969146729,59.3149490356445,2.721843957901,4.45006227493286,60.1294288635254,3.09820365905762,4.2816104888916,60.0736389160156,3.10226726531982,3.69943690299988,64.1516723632813,-2.49848079681396,3.79356122016907,64.1546859741211,-2.54490923881531,6.93305683135986,56.4514427185059,-6.45735263824463,7.1187219619751,54.7801704406738,-5.70982217788696,7.65068674087524,55.986930847168,-5.7503662109375,7.90676307678223,55.8224563598633,-5.73489713668823,7.90906000137329,55.8690299987793,-5.89676713943481,7.6163010597229,56.0209197998047,-5.96489715576172,4.72273540496826,63.3855476379395,-1.41784250736237,4.089439868927,64.0286712646484,-2.69076085090637,1.74827790260315,62.6680641174316,-4.92615270614624,3.56462407112122,62.6922607421875,-4.14599704742432,1.63201665878296,61.5764808654785,-4.92748069763184,1.40187895298004,64.8462982177734,-3.8428521156311,3.62237238883972,61.0065078735352,-4.19728803634644,2.7155454158783,64.6137237548828,-3.24273586273193,3.50488996505737,64.2255172729492,-2.33936190605164,4.45189476013184,61.1947822570801,-2.68833804130554,3.71968483924866,60.4444808959961,-5.7619457244873,1.90570795536041,60.4547576904297,-6.41312456130981,1.78253972530365,61.7714767456055,-5.52064943313599,3.61369633674622,62.0756454467773,-4.80508089065552,3.71505951881409,58.2266159057617,-6.91692638397217,2.06690287590027,58.582202911377,-7.62780857086182,1.87300276756287,56.233268737793,-7.22203969955444,2.06480956077576,58.3997421264648,-7.66275072097778,3.69810247421265,58.0395393371582,-6.9608006477356,1.80736494064331,52.627140045166,-5.84420299530029,\n1.77482128143311,51.9207649230957,-5.47108364105225,1.52690613269806,64.8366775512695,-4.26401567459106,2.95424270629883,64.5884246826172,-3.56131982803345,3.82105803489685,64.2137298583984,-2.55882334709167,4.44773387908936,63.5705223083496,-1.23381400108337,4.56020164489746,62.7150917053223,0.00521660875529051,4.29055643081665,61.5549163818359,1.28767418861389,3.820068359375,60.0989570617676,2.32900953292847,4.23661613464355,63.6394309997559,-1.14201641082764,3.61627316474915,64.2777328491211,-2.4211540222168,4.08088636398315,63.5692825317383,-1.11106669902802,4.32959079742432,62.8111572265625,0.0554711557924747,4.19177198410034,62.8257484436035,0.0203920770436525,3.89149308204651,61.7367897033691,1.08955907821655,4.06670093536377,61.7141036987305,1.15627789497375,3.31134176254272,59.9511604309082,2.35199689865112,3.51177382469177,60.1359214782715,2.34523463249207,1.44212925434113,64.9041900634766,-3.95878839492798,2.79005265235901,64.6661758422852,-3.32087755203247,4.59750556945801,61.2975196838379,-1.33271491527557,4.44407510757446,60.9020805358887,-0.050418708473444,3.9542498588562,60.0511589050293,1.02145600318909,3.58570837974548,59.1861000061035,2.14514493942261,7.46005249023438,60.1870269775391,1.06176793575287,7.72928524017334,61.1218643188477,-0.099658414721489,7.4911060333252,61.1335639953613,-0.107961818575859,7.23469543457031,60.211742401123,1.09636998176575,7.6026177406311,61.6010932922363,-1.50467109680176,7.85354232788086,61.5832023620605,-1.52880024909973,7.58060598373413,61.024974822998,-4.29792022705078,7.83845376968384,61.0277900695801,-4.30706691741943,7.75668811798096,60.0238265991211,-5.34664630889893,7.5037727355957,60.0469360351563,-5.33866596221924,7.37802457809448,58.5030746459961,-6.12875556945801,7.65302801132202,58.5042724609375,-6.13754463195801,7.5514497756958,56.0784530639648,-6.00459623336792,7.39580821990967,58.3873252868652,-6.05571556091309,7.56811094284058,55.8945083618164,-6.07503032684326,7.72437191009521,55.8604278564453,-6.10517883300781,7.94746828079224,53.4626121520996,-4.68562650680542,\n8.12087535858154,52.6563034057617,-3.59320259094238,7.98409414291382,52.6108474731445,-3.61697459220886,7.79246187210083,53.4315605163574,-4.71312999725342,8.32955551147461,52.3089904785156,-1.95941710472107,8.19500160217285,52.1938438415527,-1.93116629123688,8.35969161987305,52.6222801208496,-0.128375396132469,8.17062091827393,52.446907043457,-0.0797580704092979,7.54251289367676,53.2749137878418,2.70170998573303,7.8333420753479,52.9743881225586,1.73005509376526,7.98573923110962,53.232494354248,1.71330320835114,7.67541980743408,53.5338287353516,2.68187379837036,7.14839839935303,59.0544967651367,1.82258713245392,6.9647159576416,59.127742767334,1.83381080627441,7.88196182250977,61.4802398681641,-2.89073824882507,7.88646030426025,54.7431411743164,-5.30194425582886,8.00986385345459,54.6648483276367,-5.39890146255493,7.4752779006958,60.6076583862305,-3.99723291397095,7.43943119049072,59.6744346618652,-4.89964628219604,7.51739263534546,61.0375709533691,-1.51349818706512,7.52377939224243,60.9528846740723,-2.7441828250885,7.14563941955566,59.8961524963379,0.73099958896637,7.39199209213257,60.7515411376953,-0.363818407058716,6.97304630279541,58.852725982666,1.59043073654175,7.54417419433594,53.7861213684082,2.64293193817139,7.55737066268921,53.504020690918,1.63623857498169,7.32090377807617,53.7854270935059,2.61769080162048,7.75661754608154,52.5243797302246,-2.16908431053162,7.91260290145874,52.9445953369141,-0.47870346903801,7.62479257583618,52.7934036254883,-3.5379102230072,7.93610763549805,53.7130928039551,-4.43796062469482,7.46001863479614,53.6113471984863,-4.54856824874878,7.32284927368164,58.3012428283691,-5.56446504592896,6.91650867462158,59.1238822937012,1.64534842967987,7.12459278106689,60.1227226257324,1.00286984443665,7.82696485519409,52.5805435180664,-3.59217143058777,8.0003719329834,52.1331100463867,-1.9022125005722,7.38473224639893,59.9482002258301,-5.25951147079468,7.44957780838013,60.9518547058105,-4.23299884796143,7.60987138748169,53.4526710510254,-4.67666912078857,7.62339115142822,53.471435546875,-4.66339111328125,\n7.97040414810181,52.3984222412109,-0.0770895406603813,7.6742148399353,52.8929214477539,1.74059414863586,7.45490074157715,53.1620025634766,2.69405269622803,7.28658056259155,58.4743881225586,-6.07923126220703,7.12813520431519,58.4115791320801,-6.11802101135254,7.48142004013062,61.4747543334961,-1.50783348083496,7.50276231765747,61.386604309082,-2.86380004882813,7.36917638778687,61.0432739257813,-0.167612627148628,7.61826324462891,61.505558013916,-2.88692474365234,7.29809474945068,56.1448822021484,-6.0284366607666,7.17253828048706,58.3644065856934,-6.02467107772827,7.49792051315308,54.4862670898438,-5.41966819763184,7.64897298812866,54.4940605163574,-5.52677631378174,6.84884357452393,59.0268630981445,1.89198553562164,7.32031297683716,55.9670791625977,-6.02316665649414,7.46523427963257,54.4825439453125,-5.43019723892212,7.42112350463867,55.9880981445313,-5.96717405319214,7.85625123977661,54.5564002990723,-5.53066444396973,7.71944952011108,55.8298721313477,-5.62672662734985,7.40257692337036,54.5230598449707,-5.19606494903564,7.45128011703491,55.952320098877,-5.53696393966675,7.31318140029907,58.2525405883789,-5.79890871047974,7.67960977554321,53.6778106689453,2.66356253623962,7.33716917037964,53.3778991699219,4.07644844055176,4.58557033538818,46.8244705200195,6.45516347885132,4.18643522262573,46.4173583984375,6.2367730140686,8.0888032913208,53.643497467041,-4.51548433303833,7.30244922637939,53.4554786682129,2.81885719299316,4.15430736541748,60.0445747375488,2.99739599227905,3.07431745529175,60.2833061218262,3.11780214309692,6.51938056945801,59.1384315490723,2.63372302055359,6.42166137695313,59.0671195983887,1.94542253017426,7.88250541687012,56.670524597168,2.90646123886108,7.47096586227417,57.8794250488281,2.75547099113464,6.98250722885132,58.5520515441895,2.70177412033081,7.87610721588135,56.7039985656738,2.56541967391968,3.62003445625305,54.0705528259277,2.01497745513916,4.35950183868408,56.0360908508301,2.3617308139801,7.8411693572998,55.9505004882813,2.3005964756012,7.45279407501221,57.8907775878906,2.48846650123596,\n6.97201442718506,58.5410118103027,2.4639265537262,3.77591037750244,60.54150390625,-4.53581762313843,3.75388956069946,59.6579475402832,-5.38537883758545,3.87403392791748,53.0283088684082,-4.10121250152588,4.05640459060669,52.9318008422852,-2.49800205230713,3.67261528968811,53.7791290283203,-5.10175609588623,3.76318836212158,56.1157188415527,-6.03812885284424,3.62933421134949,54.6652641296387,-5.69135808944702,3.64157605171204,58.2273483276367,-6.29494380950928,4.25032615661621,61.0464019775391,-2.80713868141174,3.93137216567993,60.8553848266602,-0.284698814153671,3.68501901626587,59.9999961853027,0.810119271278381,4.24393701553345,61.1310844421387,-1.57645356655121,3.51242613792419,58.9565696716309,1.66955041885376,3.45302963256836,58.5907211303711,2.03509664535522,4.39278316497803,56.8092651367188,2.67253184318542,3.99217295646667,57.9946212768555,2.56758642196655,-1.9451812505722,48.5540313720703,7.05008602142334,-2.88036394119263,47.2062530517578,6.9493350982666,2.00000022232416e-006,47.285816192627,7.22094917297363,3.21344077747199e-006,48.5572471618652,7.20578908920288,-3.66780614852905,46.4437103271484,6.73270893096924,-2.98246002197266,47.3362045288086,6.8494701385498,-3.29654788970947,45.2115325927734,6.20724058151245,-2.97479510307312,45.3718414306641,6.77764701843262,-3.66930103302002,46.3445625305176,6.72885417938232,-4.11189603805542,46.3690757751465,6.27710723876953,-2.94320297241211,43.8507385253906,6.76719856262207,-2.94428610801697,45.2708053588867,6.77928829193115,-3.26226568222046,45.0992164611816,6.20986461639404,-3.16876101493835,43.85009765625,6.33915233612061,-0.557020604610443,50.877254486084,6.89918661117554,3.89344168070238e-005,50.9400787353516,6.95981454849243,-2.1163113117218,48.5933418273926,6.94620084762573,-1.17099833488464,49.9643783569336,6.95489454269409,-2.84906697273254,45.4440536499023,6.8901515007019,1.99999999495049e-006,45.4150581359863,7.22095012664795,-0.468086004257202,50.7088088989258,7.01618194580078,-1.0025759935379,49.9190406799316,7.05751132965088,1.99999999495049e-006,49.9196815490723,7.15778112411499,\n1.99999999495049e-006,50.7577705383301,7.07369613647461,-2.73341989517212,43.9191513061523,6.89355516433716,-2.80263996124268,45.261646270752,6.89093923568726,-2.79571104049683,43.9527893066406,6.89077138900757,-2.77869391441345,43.9286155700684,6.8909330368042,0.837190985679626,47.2849349975586,7.16878604888916,2.88017201423645,47.1976318359375,6.94976615905762,1.94533896446228,48.554027557373,7.05293798446655,0.838710308074951,48.5568695068359,7.1693868637085,2.98243093490601,47.3361625671387,6.84954833984375,3.54886031150818,46.446361541748,6.74474096298218,3.28606700897217,45.1828422546387,6.17913007736206,4.11189746856689,46.3690757751465,6.27710056304932,3.55020809173584,46.3415832519531,6.74072933197021,2.97079205513,45.372314453125,6.77908515930176,3.25704121589661,45.0800476074219,6.18504095077515,2.94356989860535,45.2685203552246,6.78080987930298,2.93479108810425,42.5988655090332,6.77791547775269,3.24675297737122,42.5850105285645,6.18504190444946,0.0936160013079643,40.4183006286621,6.31432294845581,1.80426895618439,40.7649269104004,6.17281484603882,1.56931388378143,40.8476257324219,6.78117704391479,0.0940760001540184,40.5215911865234,6.84962701797485,0.55705201625824,50.8772354125977,6.8991756439209,2.11631488800049,48.5933418273926,6.94620180130005,1.17104506492615,49.9643478393555,6.95486879348755,2.8494119644165,45.4549102783203,6.89148092269897,0.837190985679626,45.4196968078613,7.16878700256348,2.78077006340027,42.5592460632324,6.89321994781494,2.80284094810486,45.2339134216309,6.89408779144287,0.944576621055603,42.5303039550781,7.15080547332764,0.956659018993378,41.7727088928223,7.09940958023071,0.527495980262756,50.6699638366699,7.01148223876953,0.616011023521423,49.9191474914551,7.07405233383179,2.90801191329956,41.7502784729004,6.18008518218994,2.64309000968933,41.8141670227051,6.76414060592651,2.52337694168091,41.9013900756836,6.89366817474365,0.922152042388916,41.6571197509766,7.09069061279297,1.45313203334808,40.9517402648926,6.92551517486572,0.837190985679626,43.927433013916,7.16878604888916,\n0.813260972499847,42.7279319763184,7.16479253768921,0.15913499891758,40.6518440246582,6.99034643173218,0.794148981571198,41.5362701416016,7.07269096374512,0.0887290015816689,41.374153137207,7.05423450469971,0.0941329970955849,40.6955986022949,6.99861001968384,-3.13838791847229,42.6130409240723,6.32387399673462,-3.26221466064453,44.0694198608398,6.23347902297974,-3.24675226211548,42.5850143432617,6.18504285812378,-0.0795200020074844,40.4146957397461,6.32123184204102,-1.88202798366547,40.7029190063477,6.31644296646118,-1.95030295848846,40.6417236328125,6.1728138923645,0.00137399998493493,40.3522758483887,6.19228601455688,-2.90801095962524,41.6718215942383,6.18008518218994,-2.80467009544373,41.7286109924316,6.31891775131226,-0.0565429963171482,41.5774726867676,6.41380262374878,0.183767005801201,42.8373527526855,6.46496486663818,0.766995012760162,41.7014617919922,6.38969039916992,0.779220998287201,42.5201301574707,6.412926197052,-2.65576696395874,43.816291809082,6.35690927505493,-2.28221297264099,44.7476234436035,6.38247966766357,0.492428988218308,43.7169036865234,6.50650691986084,-2.34957098960876,44.7631492614746,6.80527067184448,-2.63184905052185,43.9335823059082,6.77300977706909,-2.75362801551819,43.8020896911621,6.76373910903931,-2.85343503952026,43.7929992675781,6.7601056098938,-3.08508396148682,43.7641830444336,6.34934329986572,0.0073039997369051,40.5181350708008,6.33164548873901,0.00711399968713522,40.6192741394043,6.86009168624878,0.0021959999576211,41.4194297790527,6.92533683776855,0.0886150002479553,41.5416145324707,6.93843269348145,0.752610981464386,41.6465682983398,6.96640920639038,0.839954078197479,41.7378120422363,6.97836208343506,0.829775989055634,42.4621353149414,7.02978610992432,0.308362007141113,42.9499549865723,7.01195287704468,0.592455983161926,43.6637420654297,7.0512809753418,0.548740029335022,43.797119140625,7.05331707000732,-2.22960901260376,44.834888458252,6.81731414794922,1.00222396850586,49.9190101623535,7.05242395401001,0.712882995605469,43.7436065673828,7.17660188674927,0.436836034059525,42.993408203125,7.14151620864868,\n0.44938200712204,42.8950881958008,7.1425633430481,0.760550975799561,42.5867233276367,7.03366994857788,0.349283695220947,42.8066101074219,7.01089096069336,-2.27854204177856,44.9713134765625,6.93464040756226,-2.4537980556488,44.838996887207,6.9288330078125,-2.66944789886475,43.828182220459,6.77966976165771,-3.48061609268188,46.3870391845703,6.85841941833496,3.36415982246399,46.3881607055664,6.86008977890015,0.129004999995232,41.4312324523926,7.06026840209961,0.650452017784119,43.8818321228027,7.17853546142578,0.00137400033418089,44.501277923584,6.19228839874268,-3.24675226211548,44.4756126403809,6.1850438117981,3.24675393104553,44.4756088256836,6.18504190444946,4.35723781585693,44.9269981384277,-3.06430101394653,4.20686101913452,44.5086288452148,-2.60326099395752,3.16264009475708,45.398624420166,-3.16831994056702,3.57114100456238,45.5947380065918,-3.45228695869446,5.55237007141113,43.980396270752,-2.19991302490234,6.67470979690552,43.9787368774414,-0.224023014307022,6.31194019317627,43.7362670898438,-0.0468970015645027,5.23977899551392,43.736270904541,-1.9288409948349,6.90005779266357,43.9754829406738,1.66610896587372,6.53845596313477,43.736270904541,1.6933468580246,6.47570991516113,43.9787483215332,3.77523016929626,6.11093282699585,43.736270904541,3.6173369884491,5.71423721313477,43.9800720214844,5.26094388961792,5.39516019821167,43.736270904541,5.00863409042358,4.5068302154541,43.0173568725586,6.71068477630615,3.8624849319458,44.0270805358887,6.72748899459839,3.86133074760437,43.2510986328125,6.73151302337646,4.1599760055542,43.0165672302246,6.75368595123291,4.41140079498291,45.0878067016602,-3.13809490203857,3.70397090911865,45.7253112792969,-3.48307609558105,3.6730170249939,46.5381202697754,-3.50487089157104,6.74866199493408,44.1178932189941,-0.262822985649109,5.61278676986694,44.1258735656738,-2.25409603118896,6.97845458984375,44.1179275512695,1.66033387184143,6.54842185974121,44.1179313659668,3.80660700798035,5.77661085128784,44.1179275512695,5.30757999420166,5.09513711929321,44.1158256530762,6.08221197128296,\n4.96704292297363,46.6533241271973,-2.9723949432373,4.23939514160156,47.4797668457031,-3.46190404891968,5.6166729927063,46.0167655944824,-2.27231693267822,6.7576265335083,46.0249862670898,-0.307812005281448,6.98658800125122,46.0249862670898,1.64253485202789,6.54742813110352,46.023365020752,3.82207179069519,5.7770791053772,46.0249862670898,5.30545997619629,4.52522087097168,45.9979934692383,6.61583089828491,5.02412891387939,46.6864738464355,-2.82322406768799,4.2154974937439,47.717903137207,-3.42620491981506,6.68231153488159,46.1601257324219,-0.273110002279282,5.52933979034424,46.1710929870605,-2.25459098815918,6.90578651428223,46.1637344360352,1.66331815719604,6.4721794128418,46.1696243286133,3.81302690505981,5.71073007583618,46.1610069274902,5.26226902008057,5.20670795440674,43.9803771972656,5.83740520477295,5.0913519859314,43.7362670898438,5.42968511581421,4.50698804855347,44.0270805358887,6.71417999267578,3.87607789039612,44.9406585693359,6.71766185760498,4.46607112884521,46.162181854248,6.55947113037109,3.26401996612549,44.0270805358887,6.30392122268677,3.26221466064453,43.1915435791016,6.26908779144287,3.69603180885315,43.2056159973145,6.66914415359497,3.70050883293152,44.0270805358887,6.67167663574219,3.69871997833252,44.9089088439941,6.65976047515869,3.73038101196289,45.0226974487305,6.6564416885376,4.39459419250488,46.1120834350586,6.60449552536011,4.1795129776001,42.9080085754395,6.08973979949951,4.4638237953186,42.9240798950195,6.62885093688965,4.05561113357544,42.9231109619141,6.67985582351685,3.63112378120422,42.9080848693848,6.22523784637451,4.89740705490112,43.4067001342773,5.70116996765137,5.05598783493042,43.6971015930176,6.0030779838562,4.99314498901367,43.2068557739258,6.0667781829834,4.90012121200562,43.1914596557617,5.69916915893555,3.52447295188904,45.694995880127,-3.47522020339966,3.12204694747925,45.4987182617188,-3.1952600479126,3.47449827194214,46.5611686706543,-3.49852108955383,4.12536478042603,47.728214263916,-3.46878504753113,3.50353479385376,46.6779747009277,-3.49861788749695,4.75802898406982,42.9235229492188,6.33804559707642,\n4.64909791946411,42.9079895019531,5.87496423721313,5.02522420883179,43.937801361084,6.16055011749268,4.76127290725708,43.0176582336426,6.45881605148315,4.95539808273315,43.2558250427246,6.22033405303955,6.31194019317627,46.048698425293,-0.0468959994614124,5.23977899551392,46.048698425293,-1.9288409948349,6.53845596313477,46.048698425293,1.69334900379181,6.11093282699585,46.048698425293,3.6173369884491,5.39516019821167,46.048698425293,5.00863313674927,4.20467329025269,46.8199806213379,-2.60328888893127,5.0913519859314,46.048698425293,5.42968320846558,4.64909791946411,45.2204208374023,5.87496185302734,3.63112378120422,45.220516204834,6.22523498535156,4.90012121200562,45.5038909912109,5.69916582107544,3.63112378120422,44.0643005371094,6.22523641586304,4.64909791946411,44.0360984802246,5.87496280670166,4.18724584579468,44.0952682495117,6.05039691925049,4.17664241790771,45.2204666137695,6.0375280380249,-4.35723781585693,44.9269981384277,-3.06429600715637,-3.57114100456238,45.5947341918945,-3.45228290557861,-3.16264033317566,45.3986282348633,-3.16831612586975,-4.20686149597168,44.5086250305176,-2.60325527191162,-5.55237007141113,43.980396270752,-2.1999089717865,-5.23977899551392,43.736270904541,-1.92883586883545,-6.31194114685059,43.7362670898438,-0.0468919984996319,-6.67470979690552,43.9787368774414,-0.224019005894661,-6.90005731582642,43.9754791259766,1.66611385345459,-6.53845596313477,43.7362670898438,1.69335186481476,-6.47570991516113,43.9787483215332,3.77523493766785,-6.11093282699585,43.736270904541,3.61734175682068,-5.71423721313477,43.9800682067871,5.26094913482666,-5.39516019821167,43.736270904541,5.00863885879517,-3.86133074760437,43.2510986328125,6.73151588439941,-3.8624849319458,44.0270805358887,6.72749376296997,-4.5068302154541,43.0173568725586,6.71069049835205,-4.1599760055542,43.0165634155273,6.75369119644165,-3.6730170249939,46.5381202697754,-3.50486707687378,-3.70397090911865,45.7253112792969,-3.48307180404663,-4.41140079498291,45.0878067016602,-3.13809108734131,-5.61278676986694,44.1258735656738,-2.25409197807312,\n-6.74866199493408,44.1178932189941,-0.262818992137909,-6.97845458984375,44.1179275512695,1.66033899784088,-6.54842185974121,44.1179275512695,3.80661201477051,-5.77661085128784,44.1179275512695,5.30758476257324,-5.09513711929321,44.1158256530762,6.08221578598022,-4.96704292297363,46.6533241271973,-2.97239089012146,-4.23939514160156,47.4797630310059,-3.46189999580383,-5.6166729927063,46.0167655944824,-2.27231311798096,-6.7576265335083,46.0249824523926,-0.307808011770248,-6.98658990859985,46.0249977111816,1.64253950119019,-6.5467529296875,46.0249862670898,3.82645010948181,-5.7770791053772,46.0249862670898,5.30546522140503,-4.52522087097168,45.997989654541,6.61583709716797,-4.21549797058105,47.717903137207,-3.42620134353638,-5.02412891387939,46.6864738464355,-2.82322001457214,-5.52933979034424,46.1710929870605,-2.25458693504334,-6.68231153488159,46.1601219177246,-0.273106008768082,-6.90578651428223,46.1637344360352,1.66332304477692,-6.4721794128418,46.1696243286133,3.81303095817566,-5.71073007583618,46.1610069274902,5.26227378845215,-5.0913519859314,43.7362670898438,5.42968893051147,-5.20670700073242,43.9803771972656,5.83740901947021,-4.50698804855347,44.0270805358887,6.71418523788452,-3.87607789039612,44.9406547546387,6.71766710281372,-4.46607112884521,46.162181854248,6.55947637557983,-3.70050883293152,44.0270805358887,6.67168140411377,-3.69603180885315,43.2056159973145,6.66914796829224,-3.26221466064453,43.1915435791016,6.26909208297729,-3.69871997833252,44.9089088439941,6.65976428985596,-4.39459419250488,46.1120834350586,6.60450220108032,-3.73038101196289,45.0226974487305,6.65644645690918,-4.1795129776001,42.9080085754395,6.08974409103394,-3.63112378120422,42.9080848693848,6.22524213790894,-4.05561113357544,42.9231109619141,6.67986106872559,-4.4638237953186,42.9240798950195,6.62885522842407,-4.89740705490112,43.4067001342773,5.70117378234863,-4.90012121200562,43.1914596557617,5.69917297363281,-4.99314498901367,43.2068557739258,6.06678199768066,-5.05598783493042,43.6970977783203,6.00308179855347,-3.52447295188904,45.6949920654297,-3.47521591186523,\n-3.47449827194214,46.5611686706543,-3.49851703643799,-3.12204694747925,45.4987144470215,-3.19525599479675,-3.50353479385376,46.6779747009277,-3.49861311912537,-4.12536478042603,47.728214263916,-3.46878027915955,-4.75802898406982,42.9235229492188,6.338050365448,-4.64909791946411,42.9079895019531,5.87496900558472,-4.76127290725708,43.0176582336426,6.45881986618042,-5.02522420883179,43.937801361084,6.16055393218994,-4.95539808273315,43.2558250427246,6.22033786773682,-6.31194114685059,46.048698425293,-0.0468919984996319,-5.23977947235107,46.048698425293,-1.92883563041687,-6.53845596313477,46.0486946105957,1.69335401058197,-6.11093282699585,46.048698425293,3.61734104156494,-5.39516019821167,46.048698425293,5.00863790512085,-4.21931791305542,46.8235893249512,-2.58396697044373,-5.0913519859314,46.048698425293,5.42968797683716,-4.64909791946411,45.2204170227051,5.87496709823608,-3.63112378120422,45.220516204834,6.2252402305603,-4.90012121200562,45.5038909912109,5.69917106628418,-3.26221466064453,45.2414894104004,6.18593168258667,2.03844881057739,68.1314392089844,4.71636962890625,2.05418825149536,68.0794219970703,4.76884031295776,2.12670016288757,68.0813217163086,4.76280927658081,2.13114523887634,68.1338043212891,4.70866203308105,2.19507813453674,68.0568237304688,4.75808525085449,2.25008773803711,68.0092468261719,4.75530862808228,2.28430032730103,67.9450073242188,4.75485610961914,2.29309630393982,67.8727798461914,4.75678539276123,2.27528381347656,67.8023223876953,4.76083755493164,2.32086563110352,67.7770233154297,4.70616626739502,2.23327350616455,67.7431411743164,4.76646614074707,2.26711440086365,67.701416015625,4.71336317062378,2.17273592948914,67.7032470703125,4.77291059494019,2.10184621810913,67.6880340576172,4.77929925918579,2.03018355369568,67.6995162963867,4.78476858139038,2.00745582580566,67.6458053588867,4.73675870895386,1.96742045879364,67.7361755371094,4.78858423233032,1.92725241184235,67.6927185058594,4.74163007736206,1.92203557491302,67.7930603027344,4.79022836685181,1.86928141117096,67.7654724121094,4.74372434616089,\n1.90016043186188,67.8624725341797,4.78947591781616,1.84137117862701,67.8542327880859,4.74275922775269,1.90474617481232,67.9350509643555,4.78643226623535,1.847292304039,67.9470062255859,4.73886489868164,1.93517506122589,68.0009918212891,4.7815089225769,1.88624346256256,68.0312652587891,4.73256587982178,1.98733770847321,68.0513763427734,4.77536773681641,1.95296609401703,68.0956497192383,4.72471523284912,2.07810592651367,67.9858093261719,4.81110239028931,2.11499071121216,67.9867706298828,4.80803298950195,2.14977192878723,67.9743194580078,4.80562925338745,2.17775440216064,67.9501266479492,4.80421733856201,2.19515538215637,67.9174423217773,4.80398750305176,2.19962882995605,67.8806915283203,4.80496883392334,2.19057011604309,67.8448638916016,4.80702972412109,2.16919946670532,67.8147659301758,4.80989170074463,2.1384072303772,67.7944564819336,4.81317090988159,2.1023485660553,67.7867279052734,4.81642007827759,2.06589555740356,67.7925643920898,4.81920480728149,2.03397178649902,67.8112258911133,4.82114267349243,2.01088571548462,67.8401565551758,4.82197904586792,1.99975907802582,67.8754653930664,4.82159662246704,2.00209093093872,67.9123840332031,4.82005023956299,2.01756978034973,67.945930480957,4.81754398345947,2.04410243034363,67.9715576171875,4.81442022323608,2.26357483863831,68.1887893676758,4.60977554321289,2.14037084579468,68.2330932617188,4.61827802658081,2.21853685379028,68.1024398803711,4.70262718200684,2.36262941360474,68.1028823852539,4.60478496551514,2.28882169723511,68.0415725708008,4.69908380508423,2.42415642738342,67.9870071411133,4.60398387908936,2.33250641822815,67.9594192504883,4.69850826263428,2.43984627723694,67.8567886352539,4.60747480392456,2.34369158744812,67.8670883178711,4.70098161697388,2.40758061408997,67.7298278808594,4.61479139328003,2.33171582221985,67.6232604980469,4.62494516372681,2.22249889373779,67.5514907836914,4.63656139373779,2.18969225883484,67.6504592895508,4.72160148620605,2.0946786403656,67.5241928100586,4.6480770111084,2.09906029701233,67.6310577392578,4.72976684570313,1.96552002429962,67.5450668334961,4.65792894363403,\n1.85246551036835,67.6113052368164,4.66479301452637,1.77078425884247,67.7139358520508,4.66774082183838,1.73150682449341,67.8391189575195,4.66637134552002,1.73993837833405,67.9699325561523,4.66087293624878,1.79494035243988,68.0887222290039,4.6519889831543,1.88908398151398,68.1794357299805,4.64091300964355,2.00965571403503,68.2298355102539,4.62914705276489,2.29062795639038,68.2429504394531,4.53268909454346,2.14468884468079,68.2954483032227,4.54275846481323,2.40796232223511,68.1412124633789,4.52677392959595,2.48084354400635,68.0039367675781,4.52582359313965,2.49942827224731,67.8496780395508,4.52996158599854,2.46120810508728,67.6992874145508,4.53862953186035,2.37134337425232,67.5730590820313,4.55065488815308,2.24197125434875,67.488037109375,4.56441736221313,2.0905647277832,67.4557037353516,4.57805633544922,1.93757116794586,67.4804458618164,4.5897274017334,1.80365431308746,67.5588989257813,4.59785890579224,1.70689928531647,67.6804809570313,4.60134840011597,1.66037392616272,67.8287658691406,4.59972667694092,1.67036104202271,67.9837188720703,4.59321308135986,1.7355135679245,68.1244354248047,4.58268737792969,1.84703052043915,68.2318878173828,4.56956911087036,1.98985159397125,68.2915802001953,4.55563402175903,2.30957412719727,68.2843017578125,4.44576740264893,2.1458683013916,68.3431777954102,4.45706796646118,2.44119143486023,68.170166015625,4.43913745880127,2.52294492721558,68.0161819458008,4.43807029724121,2.54379224777222,67.8431625366211,4.44271183013916,2.50091958045959,67.6744613647461,4.45243501663208,2.40011501312256,67.5328598022461,4.4659252166748,2.25499439239502,67.4374923706055,4.48136138916016,2.08515572547913,67.4012222290039,4.49665832519531,1.91353785991669,67.4289703369141,4.50975227355957,1.76331794261932,67.516975402832,4.51887226104736,1.65478467941284,67.6533584594727,4.52278709411621,1.60259556770325,67.8196868896484,4.52097129821777,1.61379909515381,67.9935073852539,4.51366329193115,1.68688297271729,68.1513519287109,4.50185585021973,1.81197583675385,68.2718963623047,4.48714160919189,1.97218191623688,68.3388442993164,4.47150850296021,\n2.32086038589478,68.3233871459961,4.25451898574829,2.13876128196716,68.3888778686523,4.26708793640137,2.46726417541504,68.1964263916016,4.24714183807373,2.55820322036743,68.0251541137695,4.24595880508423,2.58139300346375,67.8326797485352,4.25111961364746,2.53370261192322,67.64501953125,4.26193523406982,2.4215726852417,67.4875183105469,4.27694129943848,2.26014852523804,67.3814315795898,4.29411125183105,2.07122921943665,67.3410949707031,4.31112957000732,1.88032972812653,67.3719635009766,4.32569408416748,1.71323370933533,67.4698486328125,4.33583784103394,1.59250628948212,67.6215515136719,4.34019422531128,1.53445327281952,67.8065719604492,4.33817100524902,1.54691541194916,67.9999160766602,4.33004283905029,1.62820971012115,68.1754989624023,4.31690883636475,1.7673567533493,68.3095779418945,4.30053997039795,1.94556367397308,68.3840560913086,4.28315162658691,2.10303449630737,67.8890228271484,4.85801267623901,-0.401673823595047,68.2626037597656,4.81145429611206,-0.333675175905228,68.2515182495117,4.80779314041138,-0.492083430290222,68.2955322265625,4.76572847366333,-0.469050973653793,68.2483596801758,4.81560564041138,-0.565762519836426,68.2473220825195,4.7709493637085,-0.526709139347076,68.210693359375,4.81968927383423,-0.566860020160675,68.1547012329102,4.82315301895142,-0.584085166454315,68.0879287719727,4.82552909851074,-0.6286860704422,68.0027618408203,4.7796425819397,-0.576050519943237,68.019416809082,4.82649564743042,-0.587471961975098,67.9247817993164,4.77890682220459,-0.54384970664978,67.9583969116211,4.82592344284058,-0.520929932594299,67.8669509887695,4.7763032913208,-0.491825878620148,67.9131240844727,4.82388973236084,-0.438049018383026,67.8370819091797,4.77218246459961,-0.427004039287567,67.8897171020508,4.82066822052002,-0.350022345781326,67.8391876220703,4.76710271835327,-0.358147501945496,67.8913116455078,4.81669425964355,-0.268739879131317,67.8729934692383,4.76174640655518,-0.29454579949379,67.917724609375,4.81250524520874,-0.205177009105682,67.9339447021484,4.75684022903442,-0.244792744517326,67.9653625488281,4.80866718292236,\n-0.167918771505356,68.0137939453125,4.75304555892944,-0.215609461069107,68.0278167724609,4.80569553375244,-0.210934340953827,68.0966186523438,4.80399560928345,-0.231399670243263,68.1625137329102,4.80379486083984,-0.243023544549942,68.2550659179688,4.75231981277466,-0.274243175983429,68.2165756225586,4.80512046813965,-0.397167980670929,68.1712265014648,4.85259628295898,-0.362578332424164,68.1655883789063,4.85073518753052,-0.431439906358719,68.1639862060547,4.85470724105835,-0.460768967866898,68.1448211669922,4.85678434371948,-0.481190860271454,68.1163482666016,4.85854816436768,-0.489952266216278,68.0823822021484,4.85975456237793,-0.485866904258728,68.0475311279297,4.8602466583252,-0.469486117362976,68.016487121582,4.85995531082153,-0.443025648593903,67.9934463500977,4.85892200469971,-0.410052180290222,67.981559753418,4.85728168487549,-0.375026494264603,67.9823760986328,4.85526323318481,-0.342675715684891,67.9958038330078,4.85312986373901,-0.317367970943451,68.0200347900391,4.85117816925049,-0.302523404359818,68.0517959594727,4.8496675491333,-0.30014505982399,68.086799621582,4.84880304336548,-0.310555160045624,68.1203155517578,4.84870004653931,-0.332347273826599,68.147819519043,4.84937334060669,-0.405963122844696,68.3137969970703,4.76042127609253,-0.413887143135071,68.4289398193359,4.67132329940796,-0.541986584663391,68.4016723632813,4.67922115325928,-0.65154641866684,68.3299026489258,4.68698501586914,-0.617045938968658,68.1757125854492,4.77537441253662,-0.727770805358887,68.2233047485352,4.69356727600098,-0.639008700847626,68.0903472900391,4.77840995788574,-0.760363519191742,68.0962982177734,4.69807577133179,-0.744924187660217,67.9660186767578,4.69990539550781,-0.68353796005249,67.8500595092773,4.69880676269531,-0.584494113922119,67.7640991210938,4.69492959976196,-0.461170017719269,67.7197189331055,4.68879699707031,-0.330221712589264,67.7229461669922,4.68123626708984,-0.209333449602127,67.773323059082,4.67326974868774,-0.114833027124405,67.8640441894531,4.66597318649292,-0.0594805926084518,67.9828796386719,4.66033124923706,\n-0.161998301744461,68.1017684936523,4.7508749961853,-0.0507552772760391,68.1137466430664,4.65710687637329,-0.188213258981705,68.1859817504883,4.7506217956543,-0.0898344367742538,68.2389984130859,4.65673589706421,-0.171438992023468,68.3417053222656,4.65926599502563,-0.319029599428177,68.2996673583984,4.75573968887329,-0.284548223018646,68.4080123901367,4.66435813903809,-0.419725298881531,68.4932861328125,4.59760236740112,-0.571463823318481,68.4609832763672,4.60695934295654,-0.70124226808548,68.3759689331055,4.61615180969238,-0.791532039642334,68.2497024536133,4.62395000457764,-0.830140590667725,68.099250793457,4.62929105758667,-0.811852097511292,67.9449310302734,4.63145875930786,-0.739137053489685,67.8075790405273,4.63015794754028,-0.621815919876099,67.7057495117188,4.62556457519531,-0.475735068321228,67.653190612793,4.6183009147644,-0.32062166929245,67.6569976806641,4.60934495925903,-0.17742520570755,67.716667175293,4.59990930557251,-0.0654841512441635,67.8241500854492,4.59126472473145,8.11517238616943e-005,67.9648971557617,4.58458089828491,0.0104170143604279,68.1199264526367,4.58076286315918,-0.0358732938766479,68.2682876586914,4.58032131195068,-0.132537245750427,68.3899536132813,4.58331823348999,-0.266519635915756,68.4684753417969,4.58935165405273,-0.425818026065826,68.5429992675781,4.51325798034668,-0.596028089523315,68.5067749023438,4.5237512588501,-0.741604566574097,68.4114074707031,4.53406715393066,-0.842885971069336,68.2697677612305,4.54281139373779,-0.886193156242371,68.1010131835938,4.54880475997925,-0.865679383277893,67.9279022216797,4.55123567581177,-0.784112572669983,67.7738265991211,4.54977703094482,-0.652509689331055,67.6595993041992,4.54462480545044,-0.488645672798157,67.6006393432617,4.53647327423096,-0.314649075269699,67.6049194335938,4.52642869949341,-0.154019773006439,67.6718597412109,4.51584339141846,-0.0284524857997894,67.7924118041992,4.50614738464355,0.045093297958374,67.9502868652344,4.49865293502808,0.0566878318786621,68.1241989135742,4.49436807632446,0.00476294755935669,68.2906188964844,4.49387311935425,\n-0.103666737675667,68.4271087646484,4.49723625183105,-0.253960758447647,68.5151901245117,4.50400161743164,-0.437931269407272,68.5923614501953,4.32444953918457,-0.627265989780426,68.5520629882813,4.33612251281738,-0.789196729660034,68.4459838867188,4.3475980758667,-0.901857972145081,68.2884292602539,4.35732746124268,-0.950031757354736,68.1007080078125,4.36399078369141,-0.92721152305603,67.9081573486328,4.36669635772705,-0.836480498313904,67.7367706298828,4.36507177352905,-0.690092802047729,67.6097183227539,4.35933971405029,-0.507818579673767,67.5441284179688,4.3502779006958,-0.314273238182068,67.5488815307617,4.33910369873047,-0.135598540306091,67.6233520507813,4.32732772827148,0.00407609343528748,67.757438659668,4.31654453277588,0.085885614156723,67.9330596923828,4.30820465087891,0.0987821817398071,68.1265029907227,4.30343818664551,0.0410231649875641,68.3116149902344,4.3028883934021,-0.0795898139476776,68.4634323120117,4.3066291809082,-0.246766522526741,68.5614242553711,4.31415462493896,-0.391969442367554,68.0767288208008,4.9009370803833\n\t\t} \n\t\tPolygonVertexIndex: *46575 {\n\t\t\ta: 2,1,15,-15,3,2,14,-17,1,13,17,-16,4,5,19,-19,5,0,20,-20,6,3,16,-44,7,8,21,-23,21,8,9,-35,12,7,22,-24,11,10,24,-26,0,11,25,-21,10,12,23,-25,13,4,18,-18,14,15,27,-27,16,14,-27,15,17,28,-28,18,19,30,-30,19,20,31,-31,22,21,32,-34,21,34,-33,23,22,33,-36,25,24,36,-38,20,25,37,-32,24,23,35,-37,17,18,29,-29,26,27,45,-45,43,26,44,-47,27,28,47,-46,29,30,49,-49,30,31,50,-50,33,32,51,-39,32,34,39,-52,35,33,38,-41,37,36,41,-43,31,37,42,-51,36,35,40,-42,28,29,48,-48,128,131,130,-130,132,129,130,-134,134,133,130,-136,136,135,130,-132,138,137,1797,1798,-140,128,137,138,-132,136,131,138,-140,141,1806,140,-143,143,146,145,-143,141,142,145,-148,132,147,145,-130,128,129,145,-147,140,148,-145,151,154,153,-153,155,152,153,-157,157,156,153,-159,159,158,153,-155,159,161,160,-159,157,158,160,-163,163,162,160,-165,165,164,160,-162,166,168,167,-1808,169,172,171,-171,171,139,1798,1799,-171,136,139,171,-173,173,176,175,-175,169,174,175,-173,136,172,175,-136,134,135,175,-177,177,180,179,-179,181,178,179,-183,155,182,179,-153,151,152,179,-181,180,177,183,-185,180,184,185,-152,190,189,187,-189,190,188,52,-126,194,193,191,-193,194,192,187,-190,196,194,189,-196,193,194,-197,200,199,197,-199,200,198,202,-202,204,197,199,-204,204,203,206,-206,208,195,189,-191,208,190,125,-127,211,186,210,-210,212,215,214,-214,216,213,214,-218,218,217,214,-220,220,219,214,-216,222,221,209,-211,223,226,225,-225,227,224,225,-229,229,228,225,-231,231,230,225,-227,235,234,232,-234,235,233,237,-237,238,239,205,-194,237,239,-239,197,204,241,-241,232,240,241,-234,237,233,241,-240,205,239,241,-205,232,234,242,-244,242,245,202,-244,246,247,210,-187,202,245,247,-247,226,223,245,-243,226,242,234,-232,223,224,249,-249,249,251,250,222,-249,252,251,249,-254,227,253,249,-225,247,248,222,-211,245,223,248,-248,254,257,256,3506,-256,227,255,3506,256,-254,252,253,256,-259,259,258,256,-258,260,263,262,-262,264,261,262,-266,266,265,262,-268,268,267,262,-264,264,270,269,-262,260,261,269,-272,272,271,269,-274,274,273,269,-271,275,278,277,-277,279,276,277,-281,281,280,277,\n-283,283,282,277,-279,193,196,284,-239,237,238,284,-286,286,285,284,-288,195,287,284,-197,288,53,283,-279,288,278,275,-290,290,54,53,-289,290,288,289,-287,185,184,292,-292,293,291,292,-295,295,294,292,-297,183,296,292,-185,297,300,299,-299,231,298,299,-231,229,230,299,-302,302,301,299,-301,298,231,234,-236,298,235,236,-298,195,208,303,-288,286,287,303,-291,54,290,303,-56,126,55,303,-209,246,186,207,-305,246,304,201,-203,202,198,244,-244,232,244,-241,197,240,244,-199,193,205,206,-192,305,308,307,-307,229,306,307,-229,227,228,307,-256,254,255,307,-309,302,310,309,-302,229,301,309,-307,305,306,309,-311,279,280,312,-312,274,311,312,-274,272,273,312,-314,281,313,312,-281,285,286,289,-315,285,314,236,-238,314,289,275,-316,314,315,297,-237,279,317,316,-277,275,276,316,-316,297,315,316,-301,302,300,316,-318,279,311,318,-318,302,317,318,-311,305,310,318,-320,274,319,318,-312,254,308,321,-321,264,320,321,-271,274,270,321,-320,305,319,321,-309,264,265,322,-321,254,320,322,-258,259,257,322,-324,266,323,322,-266,293,325,324,-292,185,291,324,-327,216,326,324,-214,212,213,324,-326,266,267,328,-328,212,327,328,-216,220,215,328,-330,268,329,328,-268,259,323,331,-331,293,330,331,-326,212,325,331,-328,266,327,331,-324,293,294,332,-331,259,330,332,-259,252,258,332,-334,295,333,332,-295,250,251,-335,335,334,251,-253,336,183,177,-338,339,338,295,-297,183,336,339,-297,154,151,185,-327,154,326,216,-160,161,159,216,-218,161,217,218,-166,340,1795,1796,-342,143,340,341,-147,128,146,341,-138,341,1796,1797,-138,144,342,340,-144,342,1794,1795,-341,148,343,342,-145,343,1793,1794,-343,348,351,350,-350,356,355,353,-355,360,359,358,-358,349,363,-349,365,364,361,-363,357,358,364,-366,366,352,-368,352,366,-352,350,351,366,-369,369,353,-356,375,374,373,-372,376,1666,379,-1809,380,383,382,-382,379,383,-1809,374,386,385,-385,385,387,-385,372,390,389,-376,372,377,391,-391,374,375,389,-387,389,1112,385,-387,392,1111,1112,389,-391,399,397,400,-396,398,401,403,-403,405,404,406,-388,402,405,410,-410,387,411,410,-406,407,415,590,591,-415,399,416,401,-399,395,\n412,416,-400,416,418,417,-402,419,418,416,-413,407,414,421,-421,395,400,422,-395,402,409,396,-399,404,403,-424,404,423,424,-407,423,403,401,417,-1647,425,428,427,-427,407,420,428,-426,432,430,431,-434,434,433,431,-436,439,438,436,-438,431,1804,-441,443,441,-445,441,1592,-441,441,442,446,445,-445,447,450,449,-449,449,452,451,436,-449,453,449,-451,453,454,452,-450,437,436,451,-458,439,437,460,-459,462,448,436,-439,447,448,462,-462,56,464,463,-58,438,439,463,-465,465,457,451,-467,456,455,457,-466,460,437,457,-456,459,468,467,-459,439,458,467,-464,463,467,58,-58,59,58,467,-469,56,60,469,-465,438,464,469,-463,461,462,469,-471,61,470,469,-61,454,453,-472,454,472,466,451,-453,473,472,454,-472,62,63,478,-478,476,477,478,-480,480,479,478,-482,64,481,478,-64,487,486,789,-789,488,487,788,-791,490,493,492,-492,494,493,490,-487,474,496,495,-476,476,475,495,-478,62,477,495,-67,67,66,495,-497,476,479,498,-498,498,479,480,-490,481,499,483,-481,68,499,481,-65,501,504,503,-503,500,503,70,-3497,71,70,503,-505,505,72,3504,-3504,505,763,127,-73,509,512,511,-511,74,73,511,-513,519,520,348,-364,521,520,519,-519,522,525,524,-524,523,524,514,-516,514,524,526,-514,527,526,524,-526,531,530,528,-530,533,528,530,-533,535,536,-535,536,535,-538,530,537,535,-533,538,541,540,-540,540,536,543,-543,540,542,-540,538,546,545,-545,547,544,545,-549,360,548,545,-550,550,549,545,-547,552,548,360,-358,547,548,552,-552,553,550,518,-520,75,76,555,-555,522,554,555,-526,527,525,555,-557,77,556,555,-77,522,557,558,-555,75,554,558,-79,534,541,559,-534,528,533,559,-561,547,560,559,-545,538,544,559,-542,357,365,561,-553,551,552,561,-563,529,566,565,-565,551,562,565,-567,560,547,551,-567,348,520,570,352,-352,570,520,521,-518,515,572,571,-569,568,571,362,-570,365,362,571,-562,561,571,572,-563,578,577,576,-576,516,517,521,-580,568,580,523,-516,522,523,580,-558,567,512,509,-517,74,512,567,-80,516,509,563,-518,581,584,583,-583,585,582,583,-587,587,586,583,-589,589,588,583,-585,593,592,591,-591,419,412,413,-595,600,599,597,-599,606,605,603,-605,606,604,608,-608,610,609,\n599,-601,610,600,601,-612,604,603,613,-615,604,614,615,-609,598,616,617,-603,80,81,619,-619,82,620,619,-82,623,626,625,-625,83,629,627,-85,85,84,627,-629,633,631,632,-635,634,632,635,-985,615,638,637,-637,611,636,637,-640,638,642,619,-621,619,642,643,-619,613,643,642,-615,615,614,642,-639,385,411,-388,649,648,646,-648,649,647,396,-410,650,653,652,-652,422,400,653,-651,648,649,655,-655,645,654,655,-645,411,644,655,-411,409,410,655,-650,656,659,658,-658,420,421,659,-657,427,428,661,-661,662,660,661,-664,657,663,661,-657,420,656,661,-429,665,668,667,-667,669,668,665,-665,673,672,670,-672,673,671,675,-675,677,680,679,-679,681,680,677,-677,687,686,685,-685,536,690,689,-689,691,688,689,-693,695,694,689,-691,697,676,693,-695,700,699,698,-702,710,709,707,-709,710,708,712,-712,714,711,712,-714,716,719,718,-716,696,715,718,-721,721,720,718,-723,723,722,718,-720,536,537,724,-691,695,690,724,-718,530,717,724,-538,703,726,725,-703,727,726,703,-705,723,729,728,-723,721,722,728,-731,713,712,732,1802,-1804,736,683,682,-736,708,707,1203,-1498,680,738,739,-680,696,741,-698,741,696,720,-743,743,738,680,-682,703,702,709,-711,703,710,711,-705,737,745,727,-705,699,745,737,-706,749,746,747,-749,749,748,682,-684,751,754,753,-753,755,754,751,-751,758,757,756,-483,759,762,761,-761,521,518,762,-760,763,575,69,-128,766,589,765,-765,527,770,767,-527,769,774,773,-773,775,772,773,-777,86,776,773,-88,88,87,773,-775,779,777,778,-781,785,784,782,-787,787,786,782,-784,89,90,792,-792,793,791,792,-795,459,794,792,-469,59,468,792,-91,795,336,337,-753,797,751,752,-338,750,751,797,-797,191,206,802,-802,752,753,803,-796,807,806,804,-809,809,808,804,-806,810,813,812,-812,814,811,812,-816,815,812,804,-807,804,812,813,-806,779,780,817,-817,822,824,761,-824,829,832,831,-831,833,832,829,-829,823,834,836,-836,691,836,834,-543,840,843,-843,798,840,-842,848,847,845,-847,849,852,851,-851,853,852,849,-588,854,857,856,-856,851,855,856,-859,809,858,856,-809,807,808,856,-858,860,862,-862,861,862,864,-864,866,786,787,-868,785,786,866,-866,868,870,869,-757,871,870,872,\n-3492,873,872,870,-869,531,874,875,716,-531,877,880,879,-879,881,880,877,-877,885,884,883,-883,791,793,886,-888,791,887,91,-90,889,191,-802,892,891,793,-795,892,794,459,-1638,893,895,871,-895,491,492,895,-894,896,899,898,-898,898,823,-762,898,761,-898,823,898,-835,542,834,898,-900,810,902,901,-901,903,900,901,-905,670,904,901,-906,906,905,901,-903,908,910,909,-908,912,488,790,-1136,913,912,1135,-1137,915,916,885,-883,917,916,915,-915,903,919,918,-901,810,900,918,-814,630,923,-923,801,802,867,-788,822,823,835,-910,931,930,933,-933,939,938,-941,941,940,938,-938,942,945,944,-944,944,946,883,884,-944,947,946,944,-946,948,951,950,-950,954,953,950,-952,938,203,199,-938,203,938,802,-207,838,837,924,-1060,955,956,863,-865,933,930,956,-956,957,960,959,-959,961,958,959,-963,964,967,966,-966,795,803,967,-965,969,678,679,-969,969,968,714,-714,976,975,973,-975,976,974,978,-978,979,373,-375,982,981,93,-93,983,735,3491,-873,633,634,984,-986,824,987,986,-761,798,841,988,-990,990,989,988,-992,927,507,508,-976,674,996,993,-995,736,735,983,-998,818,1001,1000,-820,820,992,1001,818,-822,1001,945,942,-1001,992,947,945,-1002,789,1003,1002,-789,930,931,1002,-1004,1007,1006,1004,-1006,1007,1005,576,-578,95,1011,1010,-97,917,1011,95,-95,894,871,3491,-3493,1013,1012,778,-778,1014,1017,1016,-1016,1018,1019,-1017,1016,1019,-1016,1021,1018,1016,-1021,672,1020,1016,-1018,780,1026,1025,-818,201,1029,-201,629,83,93,-982,599,609,987,-825,891,892,1035,-1035,503,1005,1004,-503,797,178,181,-797,337,177,178,-798,1038,1037,1023,-1025,1023,1037,1039,-926,597,599,824,-823,1029,201,1041,-1041,1029,1040,941,-938,499,887,886,-484,91,887,499,-69,744,968,679,-740,1042,1045,1044,-1044,814,1043,1044,-1047,1047,1800,-1049,1049,1048,1044,-1046,748,747,1619,-3494,954,803,753,-1051,755,1053,-991,1057,1056,1055,-383,1055,1056,1058,-1055,107,97,913,-1137,1034,1035,445,-1061,1061,1064,1063,-1063,841,1062,1063,-989,988,1063,1065,-992,1066,1065,1063,-1065,1060,445,446,-1068,339,964,965,-339,1068,825,-1071,536,688,-544,543,688,691,-543,1076,1078,952,-1078,950,1077,952,-950,\n1079,1076,1077,-1081,1081,1080,1077,-1083,1082,1077,950,-954,756,757,1083,-869,884,110,99,-944,98,942,943,-100,1079,1080,1085,-1085,809,1084,1085,-859,851,858,1085,-1087,1081,1086,1085,-1081,1011,998,999,-1011,917,914,998,-1012,975,508,-974,500,576,1005,-504,69,575,576,500,-3497,682,748,3493,-3493,735,682,3492,-3492,755,1087,1088,-1054,833,828,1088,-1088,1089,1092,1091,-1091,1093,1092,1089,-174,1081,1082,1095,-1095,714,968,744,-3495,705,744,739,-707,1096,584,581,-861,765,589,584,-1097,793,891,757,-759,1061,1062,1098,-1098,585,1097,1098,-1100,842,1099,1098,-841,840,1098,1062,-842,932,933,843,-889,1045,1042,701,-1101,1045,1100,1101,-1050,1070,1103,1102,-1070,1103,1070,825,826,-935,1107,1106,1104,-1106,1107,1105,1109,-1109,1110,100,121,-1689,1112,1111,645,-645,385,1112,644,-412,957,958,1114,-1114,941,1113,1114,-941,939,940,1114,-1116,961,1115,1114,-959,674,1022,-674,1022,674,-995,672,673,1022,-1021,959,1117,934,-963,963,1118,1117,959,-961,883,1088,828,-883,909,910,597,-823,1058,924,925,-1040,585,586,1119,-1098,1061,1097,1119,-1121,850,1120,1119,-850,587,849,1119,-587,581,582,1122,-1122,864,1121,1122,-1124,842,1123,1122,-1100,585,1099,1122,-583,1124,759,760,-987,579,521,759,-1125,951,967,803,-955,951,948,966,-968,1023,925,1126,-1126,873,1060,-1068,922,983,-873,1100,701,698,-1731,1023,1125,1127,-1025,527,556,1128,-771,77,101,1128,-557,1118,847,1129,-1118,1117,1129,1103,-935,1102,1103,1129,-1131,848,1130,1129,-848,1133,982,92,-104,1136,1135,818,-820,818,1135,790,-822,924,837,1126,-926,894,3492,3493,-860,1134,1140,982,-1134,986,1140,1134,-1125,579,1124,1134,-1142,102,1141,1134,-1134,915,829,830,-915,882,828,829,-916,798,947,-889,1143,1145,1144,-574,1146,1145,1143,-1143,1148,832,833,-1150,831,832,1148,-1148,871,1150,869,-871,793,758,-887,1151,1140,986,-988,875,719,-717,723,719,875,-1153,1087,1153,1149,-834,755,750,1153,-1088,946,947,798,-1054,883,946,1053,-1089,886,758,482,-484,1155,1156,830,-832,1157,1156,1155,-1155,1151,987,609,-1159,1151,1158,629,-982,938,939,867,-803,1028,1720,1159,-1026,1083,757,891,-1035,778,1160,1026,\n-781,1012,1132,1160,-779,877,105,104,-877,3501,105,877,-879,1153,1162,1091,-1150,750,796,1162,-1154,807,857,1164,-1164,1108,1163,1164,-1108,1106,1107,1164,-1166,854,1165,1164,-858,1047,1678,1166,-1681,1166,1168,-1168,1167,1681,1680,-1167,1166,1678,1567,-1169,866,1115,961,-866,867,939,1115,-867,1172,1174,-1174,814,1046,1175,-812,810,811,1175,-1177,1177,3498,-1179,922,872,873,-1068,1179,1182,1181,-1181,1183,1180,1181,-1185,1185,1184,1181,-1187,1187,1186,1181,-1183,1185,1186,1189,-1189,1190,1188,1189,-1192,1187,1191,1189,-1187,809,805,1192,-1085,1079,1084,1192,-1194,919,1193,1192,-919,918,1192,805,-814,1108,1196,1195,-1164,807,1163,1195,-807,1197,923,630,-632,1197,631,633,-1199,932,888,947,-993,588,1199,853,-588,589,766,1199,-589,1200,745,699,-701,745,1200,1109,-728,1201,1090,1091,-1163,922,923,997,-984,1202,997,923,-1198,1202,1197,1198,-1204,1066,1064,1205,-1205,1094,1204,1205,-1207,850,1206,1205,-1121,1061,1120,1205,-1065,1207,763,505,-1028,1207,578,575,-764,953,1208,1095,-1083,954,1050,1208,-954,98,106,1000,-943,814,815,1209,-1044,1042,1043,1209,-1211,1210,1209,1195,-1197,1195,1209,815,-807,998,1156,1157,-1000,914,830,1156,-999,1092,1148,1149,-1092,1147,1148,1092,-1094,916,109,108,-886,917,94,109,-917,1206,1086,1081,-1095,850,851,1086,-1207,885,108,110,-885,1211,1213,1078,-1213,1079,1212,1078,-1077,952,1078,-1214,1215,1216,666,-668,1217,1216,1215,-1215,1177,1221,1220,-1220,906,1219,1220,-1223,1146,1222,1220,-1146,1144,1145,1220,-1222,845,844,-847,970,1223,1224,-1226,1226,971,211,-676,970,971,1226,-1143,675,1227,-1227,1226,1227,1146,-1143,1143,1223,970,-1143,573,844,1223,-1144,1229,1230,-1229,1230,669,664,-1229,1232,973,508,-1232,1232,1231,1004,-1007,506,1231,508,-508,502,1004,1231,506,-502,1066,1204,1233,-1066,1094,1095,1233,-1205,1233,1234,991,-1066,990,991,1234,-1236,1050,1235,1234,-1209,1095,1208,1234,-1234,1236,1238,1116,-1238,1239,1237,1116,-1241,994,1240,1116,-1023,1116,1238,1021,-1023,1241,1244,1243,-1243,1245,1190,1241,-1243,1241,1191,1187,-1245,1241,1190,-1192,1249,1248,1246,-1251,1251,1250,1246,-1248,1252,\n1255,1254,-1254,1257,1262,1261,-1261,1263,1262,1257,-1257,1264,1267,1266,-1266,1268,1265,1266,-1270,1270,1269,1266,-1268,1271,1273,1190,-1273,1272,1190,-1275,1211,1271,1272,-1276,1258,1275,1272,-1277,1277,1276,1272,-1275,948,949,1279,-1279,1280,1278,1279,-1282,1260,1281,1279,-1283,952,1282,1279,-950,1260,1282,1259,-1258,1259,1275,1258,-1257,1211,1275,1259,-1214,952,1213,1259,-1283,1239,1240,1284,-1284,1285,1283,1284,-1287,995,1286,1284,993,-997,993,1284,1240,-995,1288,1287,1285,-1287,1288,1286,995,-1290,664,1291,1290,-1229,1229,1228,1290,-1293,1293,1292,1290,-1295,1295,1294,1290,-1292,1296,1299,1298,-1298,666,1297,1298,-666,664,665,1298,-1292,1295,1291,1298,-1300,1300,1303,1302,-1302,1304,1301,1302,-1306,1217,1305,1302,-1307,1307,1306,1302,-1304,1305,1217,1214,-1788,1304,1305,-1788,1281,1309,1308,-1281,1260,1261,1309,-1282,966,1280,1308,-1311,1239,1313,1312,-1238,1236,1237,1312,-1315,1315,1314,1312,-1317,1317,1316,1312,-1314,1285,1319,1318,-1284,1239,1283,1318,-1314,1317,1313,1318,-1321,1321,1320,1318,-1320,1322,1325,1324,-1324,1326,1323,1324,-1328,1236,1327,1324,-1239,1021,1238,1324,-1326,1236,1314,1328,-1328,1326,1327,1328,-1330,1330,1329,1328,-1332,1315,1331,1328,-1315,1332,1333,-1323,1332,1334,-1334,1335,1336,1334,-1333,1337,1336,1335,-1339,1326,1338,1335,-1324,1322,1323,1335,-1333,1337,1338,1340,-1340,1341,1339,1340,-1343,1330,1342,1340,-1330,1326,1329,1340,-1339,1333,1345,1344,-1344,1346,1343,1344,-1348,1348,1345,1333,-1335,1350,1339,1341,-1255,1337,1339,1350,-1350,1344,1351,1243,1244,-1348,1242,1243,1351,-1353,1353,1352,1351,-1355,1345,1354,1351,-1345,1190,1245,1355,-1275,1277,1274,1355,-1357,1353,1356,1355,-1353,1242,1352,1355,-1246,1357,1360,1359,-1359,1361,1358,1359,-1363,1296,1362,1359,-1300,1295,1299,1359,-1361,1363,1366,1365,-1365,1357,1364,1365,-1361,1295,1360,1365,-1295,1293,1294,1365,-1367,1364,1357,1367,-1369,1364,1368,1369,-1364,1370,1358,1361,-1372,1367,1357,1358,-1371,1372,1375,1374,-1374,1249,1375,1372,-1249,1372,1368,1367,-1249,1369,1368,1372,-1374,1379,1378,1376,-1381,1251,1380,1376,-1378,1374,\n1375,-1382,1383,1382,1376,-1379,1376,1382,1384,-1378,1254,1384,1382,-1351,1349,1350,1382,-1384,1385,1387,1386,-1250,1387,1385,1255,-1253,1388,1390,1268,-1390,1389,1253,1392,-1392,1389,1391,-1389,1253,1389,-1253,1392,1253,1341,-1343,1392,1342,1330,-1392,1393,1391,1330,-1332,1393,1331,1315,-1265,1264,1265,1390,-1394,1391,1393,1390,-1389,1268,1390,-1266,1316,1317,1394,-1396,1316,1395,1264,-1316,1320,1321,1396,-1398,1320,1397,1394,-1318,1398,1396,1321,-1400,1400,1366,1363,-1400,1293,1366,1400,-1288,1319,1285,1287,-1401,1319,1400,1399,-1322,1300,1403,1402,-1402,1404,1401,1402,-1406,1263,1405,1402,-1263,1261,1262,1402,-1404,1404,1407,1406,-1402,1300,1401,1406,-1304,1307,1303,1406,-1409,1409,1408,1406,-1408,1407,1411,1410,-1410,1412,1411,1407,-1405,1258,1276,1277,3497,-1414,1413,1263,1256,-1259,1416,1264,1395,-1395,1264,1416,-1268,1417,1418,1381,-1387,1374,1381,1418,-1420,1396,1419,1418,-1421,1270,1420,1418,-1418,1379,1423,1422,-1422,1424,1421,1422,-1426,1412,1425,1422,-1412,1410,1411,1422,-1424,1412,1426,1414,-1426,1424,1425,1414,-1428,1414,1426,1413,-3498,1270,1417,1428,-1270,1268,1269,1428,-1390,1387,1428,-1387,1386,1428,-1418,1277,1356,1429,-1416,1353,1430,1429,-1357,1349,1383,1432,-1432,1349,1431,1433,-1435,1334,1434,1433,-1349,1379,1380,1435,-1424,1251,1247,1435,-1381,1246,1370,1371,-1248,1248,1367,1370,-1247,1436,1435,1247,-1372,1435,1436,1410,-1424,1436,1437,1409,-1411,1371,1361,1437,-1437,1296,1439,1438,-1363,1361,1362,1438,-1438,1409,1437,1438,-1409,1307,1408,1438,-1440,1307,1439,1440,-1307,1217,1306,1440,-1217,666,1216,1440,-1298,1296,1297,1440,-1440,1015,1180,1183,-1015,1179,1180,1015,-1020,1347,1244,1187,-1183,1347,1182,1179,-1347,1343,1441,1322,-1334,1019,1441,1343,-1347,1442,1396,-1399,1396,1442,-1420,1374,1419,1442,-1374,1394,1397,1443,-1417,1416,1443,1420,1270,-1268,1396,1420,1443,-1398,1249,1386,-1376,1375,1386,-1382,1383,1378,1444,-1433,1432,1444,1445,-1432,1424,1445,1444,-1422,1379,1421,1444,-1379,1429,1446,1427,-1416,1424,1427,1446,-1446,1431,1445,1446,-1434,1430,1348,1433,1446,-1430,1251,1377,1447,-1251,\n1249,1250,1447,-1386,1278,966,-949,1278,1280,-967,903,1448,1449,-920,1322,1441,1018,-1326,1021,1325,-1019,1019,1018,-1442,111,1450,876,-105,1253,1254,-1342,1377,1384,1451,-1448,1447,1451,1255,-1386,1254,1255,1451,-1385,1334,1336,1337,-1435,1434,1337,-1350,1185,1453,1452,-1185,1183,1184,1452,-1455,1454,1452,1449,-1449,1449,1452,1453,1455,-1195,1211,1455,1273,-1272,1455,1453,1456,-1274,1273,1456,1188,-1191,1185,1188,1456,-1454,1014,1183,-1455,1014,1454,-1449,1458,603,605,-1458,1458,1457,1460,-1460,1458,1459,1461,-1463,1458,1462,613,-604,112,113,1464,-1464,80,618,1464,-114,1466,621,622,-1466,1466,1465,1468,-1468,1464,1470,1469,-1464,1461,1469,1470,-1463,613,1462,1470,-644,618,643,1470,-1465,450,447,13,-2,450,1,2,-454,447,461,4,-14,1471,1473,-1473,1474,1473,-1472,434,1472,1473,-1476,1473,1474,-1476,5,470,61,-1,4,461,470,-6,471,453,2,-4,471,3,6,-474,1476,1479,1478,-1478,432,1477,1478,-1481,1481,1480,1478,-1480,1482,1485,1484,-1484,1484,1485,-1475,1486,1489,1488,-1488,1476,1487,1488,-1491,1491,1490,1488,-1493,1493,1492,1488,-1490,1484,1494,-1484,1482,1483,1494,-1496,1496,1495,-1495,1498,1202,1203,-708,1202,1498,736,-998,1499,683,736,-1499,1499,1498,707,-710,1499,709,702,-1501,1499,1500,749,-684,1500,1501,746,-750,702,725,1501,-1501,1503,1104,1106,-1503,1503,1502,766,-765,766,1502,1504,-1200,853,1199,1504,-1506,854,1505,1504,-1166,1106,1165,1504,-1503,852,1505,854,-856,851,852,-856,1037,1507,1506,-1040,1054,1058,1039,-1507,1055,1509,381,-383,1510,1509,1055,-1055,1054,1506,1511,-1511,1512,1511,1506,-1508,1512,1507,1508,-1514,1515,1513,1508,-1515,1515,1514,388,-394,1398,1399,1363,-1370,1369,1373,1442,-1399,1288,1289,1229,-1293,1288,1292,1293,-1288,1029,937,199,-201,114,819,1000,-107,819,114,107,-1137,1405,1426,1412,-1405,1263,1413,1426,-1406,1261,1403,1518,-1310,1308,1309,1518,-1520,1304,1519,1518,-1302,1300,1301,1518,-1404,674,675,211,-210,1346,1179,-1020,1017,904,670,-673,903,904,1017,1014,-1449,1521,1520,771,-1802,768,1522,1030,-1802,1030,1522,1523,-1032,775,1523,1522,-773,769,772,1522,-769,1524,1101,1139,-1139,1524,1138,\n592,-594,490,799,789,-487,491,800,799,-491,476,497,1527,-476,475,1527,1528,-475,869,489,482,-757,1430,1354,1345,-1349,1353,1354,-1431,1530,347,345,-1530,1530,1529,-389,838,1059,1531,-840,1059,924,1058,-1057,396,647,1532,-398,400,397,1532,-654,652,653,1532,-1534,646,1533,1532,-648,1534,660,662,-1536,426,427,660,-1535,1536,1538,-1538,1538,1536,-1540,1535,1537,1538,-1535,426,1534,1538,-1541,393,1540,1538,-1540,1536,1541,-1540,1541,393,-1540,1541,1542,1515,-394,1513,1515,1542,-1544,1544,1543,1542,-1546,1536,1545,1542,-1542,1513,1543,1546,-1513,1511,1512,1546,-1548,1548,1547,1546,-1550,1544,1549,1546,-1544,1550,1510,1511,-1548,1550,1547,1548,-1552,1510,1550,1552,-1510,381,1509,1552,-1554,1554,1553,1552,-1556,1551,1555,1552,-1551,1554,1557,1556,-1554,381,1553,1556,-381,378,380,1556,-1559,1559,1558,1556,-1558,1559,1560,391,-1559,378,1558,391,-378,392,390,391,-1561,1057,382,383,379,-1171,1531,1057,1170,-1562,1531,1561,1562,-840,785,1563,-922,1565,1569,1568,-1567,1566,1568,1168,-1568,1572,388,-1572,1572,393,-389,393,1574,426,-1541,426,1574,-1574,1571,1575,-1573,393,1572,-1575,1573,1574,1572,-1576,1577,1576,1529,-346,432,1579,1578,-431,429,430,1578,-1581,625,1580,1578,-625,622,1578,-1580,1578,622,-625,1468,1465,1582,-1582,1583,1581,1582,-1585,1481,1584,1582,-1586,622,1585,1582,-1466,1583,1584,1587,-1587,1587,1479,1476,-1491,1481,1479,1587,-1585,641,635,1804,429,-641,446,442,635,-633,85,628,1588,-116,82,115,1588,-621,638,620,1588,-638,637,1588,628,-640,609,610,612,-1159,629,1158,612,-628,627,612,639,-629,1589,608,615,-637,1589,636,611,-602,1590,607,608,-1590,1590,1589,601,-603,1591,626,607,-1591,443,456,1593,-1593,1593,1594,435,-1593,1805,435,1594,-1596,466,1595,1594,-466,456,465,1594,-1594,1805,1595,1596,-1473,1471,1472,1596,-1598,473,1597,1596,-473,466,472,1596,-1596,1474,1471,1598,-1485,1474,1485,1599,-1476,434,1475,1599,-1601,1482,1600,1599,-1486,432,1602,1601,-1478,1601,1482,1603,-1477,1601,1476,-1478,1482,1601,-1603,434,1600,1604,-434,432,433,1604,-1603,1482,1602,1604,-1601,46,1598,1471,-1598,46,1597,473,-7,431,440,1592,\n-436,625,1605,-1581,1580,1605,640,-430,868,1083,-874,873,1083,1034,-1061,767,771,513,-527,562,572,1606,-566,565,1606,1607,-565,513,1607,1606,-515,514,1606,572,-516,771,1520,1607,-514,1609,1608,580,568,-570,580,1608,1610,-558,510,1610,-1609,510,1608,1609,563,-510,557,1610,1611,-559,558,1611,116,-79,116,1611,511,-74,511,1611,1610,-511,1613,487,488,-1615,494,486,487,-1614,1615,912,913,-1617,1614,488,912,-1616,474,1618,1617,-497,67,496,1617,-118,65,117,1617,-486,484,485,1617,-1619,1612,1618,474,-1529,484,1618,-1613,913,97,118,-1617,860,1620,1619,-1097,1622,1621,799,-801,799,1621,1003,-790,930,1003,1621,-957,863,956,1621,-1623,1150,871,-896,869,1150,498,-490,498,1150,1623,-498,492,1623,1150,-896,497,1623,1624,-1528,1527,1624,1625,-1529,494,1625,1624,-494,492,493,1624,-1624,1528,1625,1626,-1613,1612,1626,1627,-485,1614,1627,1626,-1614,494,1613,1626,-1626,484,1627,1628,-486,485,1628,1629,-66,1616,1629,1628,-1616,1614,1615,1628,-1628,65,1629,-120,1616,118,119,-1630,894,859,1630,-894,893,1630,800,-492,859,1620,1631,-1631,1630,1631,1622,-801,863,1622,1631,-862,860,861,1631,-1621,747,746,764,-766,1501,1503,764,-747,1104,1503,1501,-726,726,1105,1104,-726,727,1109,1105,-727,1196,1108,1109,-1201,1210,1196,1200,-701,1210,700,701,-1043,1619,747,765,-1097,859,3493,1619,-1621,1605,625,626,-1592,1605,1591,617,-641,641,640,617,-617,907,909,835,-1633,567,516,579,-1142,567,1141,102,-80,761,824,-761,896,897,1634,-1634,518,1633,1634,-763,761,762,1634,-898,1635,1497,1203,-1199,1635,1008,1009,-1803,1198,633,985,1008,-1636,630,922,1067,-447,1636,444,445,-1036,1637,460,455,-1637,1637,1636,1035,-893,606,607,626,-624,606,623,621,-606,1457,605,621,-1467,1457,1466,1467,-1461,622,1579,1638,-1586,1481,1585,1638,-1481,432,1480,1638,-1580,1476,1603,1639,-1488,1486,1487,1639,-1641,1496,1640,1639,-1496,1482,1495,1639,-1604,1169,3486,977,-979,366,354,-369,367,356,354,-367,931,820,821,-1003,1002,821,790,-789,1235,1050,753,-755,1235,754,755,-991,864,1641,-956,955,1641,843,-934,840,798,888,-844,864,862,-1122,862,860,581,-1122,864,1123,-1642,843,1641,1123,\n-843,973,1232,1642,-975,1132,1642,1232,1006,-1132,1012,1643,1642,-1133,978,1643,1171,-1170,1013,1171,1643,-1013,1644,531,529,-565,1644,564,1607,-1521,1033,1152,-1033,1656,1657,1645,936,-936,71,504,1654,-121,504,501,1655,-1655,506,507,1656,-1660,501,506,1659,-1656,875,874,1644,1520,-1522,874,531,-1645,423,1646,-425,1648,729,723,-1034,731,729,1648,-1648,1071,1072,-1650,1649,1072,838,-840,838,1072,1650,-838,1651,1126,837,-1651,1651,1650,1069,-1103,1102,1130,1652,-1652,1126,1651,1652,-1126,1125,1652,1653,-1128,848,1653,1652,-1131,1654,1655,1687,-1689,927,1657,1656,-508,1658,406,-980,387,1658,-385,979,374,384,-1659,1659,1656,935,-1690,413,412,395,-395,1576,1577,1569,-1661,1565,1566,1662,-1662,1526,1661,1662,-1664,1567,1663,1662,-1567,1526,1564,1664,-1662,1565,1661,1664,-1666,595,1660,-1666,1665,1660,1569,-1566,1575,1571,-3500,408,1573,1575,-596,3499,1571,1529,-1577,407,596,-416,1573,425,-427,408,407,425,-1574,1564,1526,593,-591,1524,593,1526,-1526,926,927,-976,1517,3487,1666,-1729,361,1667,569,-363,1667,1668,1609,-570,563,1609,1668,-1670,356,1668,-356,1668,356,-1670,369,355,1668,-1668,517,1670,352,-571,367,352,1670,-357,896,1672,1671,-900,542,899,1671,-540,538,539,1671,-547,550,546,1671,-1673,550,553,1673,-550,360,549,1673,-360,896,1633,-1673,518,550,1672,-1634,353,369,368,-355,358,1674,349,-365,358,359,-1675,1673,1675,1674,-360,349,1674,1675,-1677,553,1676,1675,-1674,349,1676,-364,553,519,363,-1677,356,1670,-1670,1669,1670,517,-564,1567,1678,1677,-1664,1526,1663,1677,-1526,1049,1525,1677,-1049,1047,1048,1677,-1679,1679,1167,1168,-1569,1679,1568,1569,-1578,1680,1177,1178,-1048,1177,1680,-1682,1679,1577,345,-1173,1167,1679,1172,-1174,906,1222,1682,-906,670,905,1682,-672,675,671,1682,-1228,1146,1227,1682,-1223,906,902,1683,-1220,1177,1219,1683,-3499,810,1176,1683,-903,1167,1173,1684,-1682,1681,1684,1221,-1178,1144,1221,1684,-1686,1174,1685,1684,-1174,574,1685,1174,-347,1144,1685,574,-574,1172,344,346,-1175,1686,373,1645,-1658,1645,373,-980,1645,979,406,424,-937,926,1686,1657,-928,1110,1688,1687,-981,1654,1688,121,-121,1689,\n935,1691,-1693,935,936,1690,-1692,1033,1031,-1649,776,86,100,-1111,776,1110,980,-776,1691,1690,731,-1648,1647,1693,1692,-1692,1689,1692,1693,980,-1688,1523,775,980,-1694,1031,1523,1693,1647,-1649,1646,417,731,-1691,424,1646,1690,-937,728,729,731,417,-419,728,418,419,-731,816,1695,1694,-780,825,1068,1695,827,-827,1694,1695,1068,-1072,777,1696,1562,-1014,779,1694,1696,-778,1027,1720,-1029,920,1698,1159,-1717,1159,1698,817,-1026,817,1698,1699,-817,921,1699,1698,-921,816,1699,827,-1696,1563,827,1699,-922,1075,1700,1036,-880,962,1701,865,-962,826,1701,962,-935,1701,1563,785,-866,1563,1701,826,-828,878,1702,3502,-3502,1702,3503,3504,-3503,781,889,-784,787,783,889,-802,1450,187,192,-929,881,876,1450,-929,188,187,-1451,52,188,1450,-112,1649,1696,1694,-1072,839,1562,1696,-1650,1561,1171,1013,-1563,1171,1561,1170,-1170,1803,1703,969,-714,734,678,969,-1704,1009,1703,1803,-1803,836,1704,1632,-836,1008,908,907,-1010,985,911,908,-1009,1009,907,1632,734,-1704,1704,733,734,-1633,693,733,1704,-693,597,1705,616,-599,616,1705,1706,-642,641,1706,984,-636,984,1706,911,-986,1514,1707,1530,-389,1530,1707,1708,-348,1570,1218,1708,-1708,1708,1218,1137,-1710,1137,1711,1710,-1710,344,1709,1710,1712,-347,1713,1712,1710,-1712,346,1712,1714,-575,574,1714,-574,1714,1715,844,-574,1713,1715,1714,-1713,1508,1038,-1571,1570,1038,1024,-1219,1218,1024,1127,-1138,1075,1717,1716,-1701,784,1717,1718,-783,782,1718,1719,781,-784,1719,1718,1073,-1075,1073,1718,1717,-1076,1073,880,881,-1075,1075,879,880,-1074,878,879,1036,-1703,1159,1720,1700,-1717,1700,1720,1697,-1037,1036,1697,3503,-1703,1697,505,-3504,929,1074,881,-929,1719,1074,929,-782,781,929,890,-890,970,1052,1051,-972,971,1051,207,-212,972,1721,1052,-971,201,304,1722,-1042,1040,1041,1722,-1724,1052,1723,1722,-1052,207,1051,1722,-305,1040,1723,-1725,1052,1721,1724,-1724,957,1725,-961,963,960,1725,-1722,970,1225,-973,1113,941,1040,-1725,1725,1724,-1722,1028,1726,1207,-1028,1161,1726,1026,-1161,1007,577,1161,-1132,1006,1007,-1132,1207,1726,-579,963,1721,972,-1226,1118,1224,845,-848,1224,1118,963,-1226,\n373,1686,1727,-372,370,371,1727,-1729,1516,976,977,-1518,926,975,976,-1517,1517,977,3486,-3488,1516,1727,1686,-927,1517,1728,1727,-1517,741,681,676,-698,743,681,741,-743,743,742,685,-687,684,685,721,-731,592,687,684,-595,594,413,591,-593,413,394,414,-592,394,422,421,-415,659,421,422,-651,659,650,651,-659,1729,687,1138,-1140,1138,687,-593,686,687,-1730,1100,1730,1139,-1102,698,706,740,-1731,1730,740,1729,-1140,1653,1711,1137,-1128,848,1713,1711,-1654,844,1715,-847,1211,1212,1194,-1456,1079,1193,1194,-1213,1734,1733,1732,-1732,1737,1736,-1736,1735,122,123,-1738,1731,1732,174,-170,1738,1739,-1736,1740,1741,1790,-1792,1740,1742,1734,-1742,1734,1743,-1155,1738,1743,1742,-1745,1744,149,1739,-1739,999,1157,1736,-1738,1736,1157,1154,-1744,1733,1155,831,-1148,1734,1154,1155,-1734,1735,1739,124,-123,1735,1736,1743,-1739,1734,1742,-1744,1745,1790,-1742,1734,1731,1745,-1742,1745,170,1799,-1791,1010,999,1737,-124,1010,123,-97,155,156,1747,-1747,1748,1746,1747,-1750,1750,1749,1747,-1752,157,1751,1747,-157,157,162,1752,-1752,1750,1751,1752,-1754,168,1753,1752,-1755,163,1754,1752,-163,1755,163,164,-1757,165,1756,-165,181,182,1757,-1202,1090,1201,1757,-1759,1748,1758,1757,-1747,155,1746,1757,-183,168,1754,1759,-168,1759,1754,163,-1756,1748,1749,1761,-1761,134,1760,1761,-134,132,133,1761,-1763,1750,1762,1761,-1750,1750,1753,1763,-1763,132,1762,1763,-148,141,147,1763,-167,168,166,1763,-1754,1090,1758,1764,-1090,173,1089,1764,-177,134,176,1764,-1761,1748,1760,1764,-1759,1768,1767,1765,-1767,1768,1766,209,-222,1767,669,1230,-1770,1771,1770,250,-335,1771,334,335,-1773,674,1774,1773,-997,995,996,1773,-1776,1765,1775,1773,-1775,1769,1289,995,-1776,1769,1775,1765,-1768,1766,1774,674,-210,1765,1774,-1767,1768,1776,669,-1768,1770,1776,1768,-222,222,250,1770,-222,1770,1771,-1778,1778,1777,1771,-1773,1779,338,-966,1780,1781,295,-339,335,1781,1780,-1773,295,1781,-334,335,252,333,-1782,1770,1777,1782,-1777,669,1776,1782,-669,667,668,1782,-1784,1778,1783,1782,-1778,1778,1785,1784,-1784,667,1783,1784,-1216,1214,1215,1784,-1787,1779,1786,1784,-1786,\n1308,1519,1311,-1311,1304,1787,1311,-1520,1785,1778,1772,-1781,1785,1780,338,-1780,1788,1786,1779,-966,1787,1214,1786,1788,-1312,1789,965,-967,1789,966,-1311,965,1789,-1789,1311,1788,1789,-1311,211,207,-187,1791,1792,150,-1741,730,419,594,-685,696,697,694,-696,742,720,721,-686,3494,711,-715,1033,723,-1153,796,181,1201,-1163,174,1732,1093,-174,1732,1733,1147,-1094,1745,1731,169,-171,1524,1525,1049,-1102,1800,1046,1044,-1049,1178,1175,1046,-1801,1047,1178,-1801,1161,1160,1132,-1132,920,1716,1717,-785,785,921,920,-785,1069,1650,1072,-1072,1069,1071,1068,-1071,1059,1056,1057,-1532,535,534,533,-533,528,560,566,-530,1030,1032,1521,-1802,1030,1031,1033,-1033,1152,875,1521,-1033,768,1801,771,-768,769,768,767,-771,774,769,770,-1129,88,774,1128,-102,1449,1194,1193,-920,689,694,693,-693,732,1497,1635,-1803,708,1497,732,-713,734,733,677,-679,677,733,693,-677,696,695,717,-716,715,717,530,-717,440,1804,442,-442,635,442,-1805,600,598,602,-602,1591,1590,602,-618,611,639,612,-611,982,1140,1151,-982,102,1133,-104,1706,1705,910,-912,1705,597,-911,1637,459,458,-461,456,443,444,1636,-456,699,705,706,-699,738,686,1729,-741,706,739,738,-741,852,853,-1506,376,370,1728,-1667,372,375,371,-371,376,377,372,-371,1659,1689,1687,-1656,1658,387,-407,540,541,534,-537,350,361,364,-350,368,369,1667,361,-351,1726,1028,1025,-1027,482,489,480,-484,434,435,-1806,434,1805,-1473,339,336,795,-965,166,1807,1806,-142,144,143,142,-141,150,149,-1745,1740,150,1744,-1743,376,1808,378,-378,378,1808,383,-381,1508,1507,1037,-1039,1769,1230,1229,-1290,1491,1586,1587,-1491,623,624,622,-622,1809,1810,1811,-1813,1813,1814,1811,-1811,1815,1816,1811,-1815,1817,1812,1811,-1817,1809,1812,1819,-1819,1817,1820,1819,-1813,1819,1820,3474,3473,-1819,1821,1822,140,-1807,1823,1822,1825,-1827,1821,1827,1825,-1823,1813,1810,1825,-1828,1809,1826,1825,-1811,140,1824,-149,1828,1829,-3422,1830,1831,1832,-1834,1834,1835,1832,-1832,1836,1837,1832,-1836,1838,1833,1832,-1838,1838,1837,1839,-1841,1836,1841,1839,-1838,1842,1843,1839,-1842,165,1840,1839,-1844,1844,1807,167,-1846,1846,1847,1848,\n-1850,1848,1847,3475,3474,-1821,1817,1849,1848,-1821,1850,1851,1852,-1854,1846,1849,1852,-1852,1817,1816,1852,-1850,1815,1853,1852,-1817,1854,1855,1856,-1858,1858,1859,1856,-1856,1834,1831,1856,-1860,1830,1857,1856,-1832,1861,1860,1854,-1858,1861,1857,1830,-1863,1863,1864,-1886,1866,1865,1867,-1869,1866,1868,125,-53,1870,1869,1871,-1873,1870,1872,1867,-1866,1874,1873,1867,-1873,1871,1874,-1873,1876,1875,1877,-1879,1876,1878,1879,-1881,1881,1877,1875,-1883,1881,1882,1883,-1885,1868,1867,1873,-1887,1868,1886,126,-126,1887,1888,1864,-1890,1890,1891,1892,-1894,1894,1895,1892,-1892,218,219,1892,-1896,220,1893,1892,-220,1888,1887,1896,-1898,1898,1899,1900,-1902,1902,1903,1900,-1900,1904,1905,1900,-1904,1906,1901,1900,-1906,1908,1907,1909,-1911,1908,1910,1911,-1913,1913,1871,1883,-1915,1912,1913,-1915,1875,1915,1916,-1883,1907,1908,1916,-1916,1912,1914,1916,-1909,1883,1882,1916,-1915,1917,1909,1907,-1919,1918,1907,-1920,1917,1918,1880,-1921,1920,1880,1921,-1923,1921,1864,1888,-1923,1917,1920,1898,-1902,1917,1901,1906,-1910,1898,1923,1924,-1900,1897,1925,1924,-1924,1926,1927,1924,-1926,1928,1929,1924,-1928,1902,1899,1924,-1930,1898,1920,1922,-1924,1922,1888,1897,-1924,1930,1931,1932,-1934,1902,1929,1932,-1932,1928,1934,1932,-1930,1935,1933,1932,-1935,260,1936,1937,-264,1938,1939,1937,-1937,1940,1941,1937,-1940,268,263,1937,-1942,1938,1936,1942,-1944,260,271,1942,-1937,272,1944,1942,-272,1945,1943,1942,-1945,1946,1947,1948,-1950,1950,1951,1948,-1948,281,282,1948,-1952,283,1949,1948,-283,1871,1913,1952,-1875,1912,1953,1952,-1914,1954,1955,1952,-1954,1873,1874,1952,-1956,1949,283,53,-1957,1949,1956,1957,-1947,1956,53,54,-1959,1956,1958,1954,-1958,1862,1959,1960,-1862,1961,1962,1960,-1960,1963,1964,1960,-1963,1860,1861,1960,-1965,1965,1966,1967,-1969,1906,1905,1967,-1967,1904,1969,1967,-1906,1970,1968,1967,-1970,1910,1909,1906,-1967,1910,1966,1965,-1912,1873,1955,1971,-1887,1954,1958,1971,-1956,54,55,1971,-1959,126,1886,1971,-56,1972,1885,1864,-1922,1972,1921,1880,-1880,1880,1918,1919,-1877,1907,1915,-1920,1875,1876,1919,-1916,\n1883,1871,1869,-1885,1973,1974,1975,-1977,1904,1903,1975,-1975,1902,1931,1975,-1904,1930,1976,1975,-1932,1970,1969,1977,-1979,1904,1974,1977,-1970,1973,1978,1977,-1975,1950,1979,1980,-1952,1945,1944,1980,-1980,272,313,1980,-1945,281,1951,1980,-314,1981,1957,1954,-1954,1981,1953,1912,-1912,1982,1946,1957,-1982,1982,1981,1911,-1966,1950,1947,1983,-1985,1946,1982,1983,-1948,1965,1968,1983,-1983,1970,1984,1983,-1969,1950,1984,1985,-1980,1970,1978,1985,-1985,1973,1986,1985,-1979,1945,1979,1985,-1987,1930,1987,1988,-1977,1938,1943,1988,-1988,1945,1986,1988,-1944,1973,1976,1988,-1987,1938,1987,1989,-1940,1930,1933,1989,-1988,1935,1990,1989,-1934,1940,1939,1989,-1991,1961,1959,1991,-1993,1862,1993,1991,-1960,1894,1891,1991,-1994,1890,1992,1991,-1892,1940,1994,1995,-1942,1890,1893,1995,-1995,220,329,1995,-1894,268,1941,1995,-330,1935,1996,1997,-1991,1961,1992,1997,-1997,1890,1994,1997,-1993,1940,1990,1997,-1995,1961,1996,1998,-1963,1935,1934,1998,-1997,1928,1999,1998,-1935,1963,1962,1998,-2000,1928,1927,2000,-2002,1926,2000,-1928,2003,1854,1860,-2003,2002,1860,1964,-2006,1993,1862,1830,-1834,1993,1833,1838,-1895,1895,1894,1838,-1841,1895,1840,165,-219,2006,2007,3472,-3472,1823,1826,2007,-2007,1809,1818,2007,-1827,2007,1818,3473,-3473,1824,1823,2006,-2009,2008,2006,3471,-3471,148,1824,2008,-344,343,2008,3470,-1794,2009,2012,2010,-2855,2011,2009,2854,-2857,2013,2016,2017,2242,-2193,2013,2014,2015,-2017,2018,2019,2032,-2034,2020,2018,-2034,2021,2019,2018,-2021,2022,2023,2024,-2026,2024,2023,-3351,2026,2027,2241,-3344,2027,2026,2029,-2031,2028,2013,2192,-2192,2014,2013,-2029,2023,2029,2014,-3351,2022,2030,2029,-2024,2031,2019,-2022,2017,2016,-2032,2015,2032,2031,-2017,2031,2032,-2020,2034,2035,2039,-2037,2035,2037,2038,-2040,2041,2040,2034,-2037,2041,2042,3480,-2041,2040,3480,2043,-3343,3480,2042,2044,-2048,2044,2045,2046,-2048,2043,3480,-2048,2038,2048,2049,-2051,2049,2051,-2085,2049,2048,-2052,2052,2049,2084,-2084,2050,2049,-2053,2054,2055,2056,-2054,2036,2039,2057,-2059,2036,2058,2059,-2042,2038,2050,2057,-2040,2057,2050,2052,\n-2794,2060,2058,2057,2793,-2793,2061,2056,2055,-2063,2063,2064,2085,-2087,2067,2065,-2067,2067,2069,2064,-2071,2074,2073,2072,-2076,2074,2075,2051,-2077,2077,2088,-2272,2078,2077,2271,-2271,2072,2079,2080,-2076,2081,2082,2080,-2080,2083,2084,2080,-2083,2051,2075,2080,-2085,2077,2087,2265,2264,-2089,2069,2068,2071,-2090,2064,2069,2089,-2086,2085,2089,2091,-2093,2089,2071,2090,-2092,2093,2094,2087,-2078,2070,2064,2063,-2096,2068,2066,2079,-2073,2065,2081,2079,-2067,2074,2076,2097,-2097,2073,2074,-2097,2096,2097,-3319,2093,2077,2098,-2102,2098,2099,2100,-2102,2102,2103,2104,2113,-3479,2105,2106,2104,-2104,2107,2108,2104,-2107,2104,2108,3264,-2114,2110,2109,2111,-2113,2110,2112,2130,-2133,2116,2114,3264,3265,-2129,2114,2116,2117,2118,-2116,2119,2120,2121,-2123,2121,2120,2109,2123,-2125,2125,2122,-2122,2125,2121,2124,-2127,2116,2128,2127,-3309,2127,2128,2137,-2130,2127,2129,2110,-2133,2129,2123,2109,-2111,3309,2132,2130,-2132,2133,2134,2120,-2120,2134,2111,2109,-2121,56,57,2135,-2137,2135,57,58,-2140,2130,2112,2135,-2140,2111,2136,2135,-2113,2137,2138,2123,-2130,3308,2127,2132,-3310,2131,2130,2139,-2141,59,2140,2139,-59,56,2136,2141,-61,2111,2134,2141,-2137,2133,2142,2141,-2135,61,60,2141,-2143,2126,2143,-2126,2126,2124,2123,2138,-2145,2145,2143,2126,-2145,2147,2146,3190,-3190,2148,2147,3189,-2170,62,2149,2150,-64,2148,2151,2150,-2150,2152,2153,2150,-2152,64,63,2150,-2154,2154,2155,2152,-2162,2157,65,3301,-3301,2156,2157,3300,-3300,2462,2460,2159,-2161,2159,2460,2461,-2159,2158,2162,2165,-2167,2162,2163,2164,-2166,2146,2147,2167,-2169,2148,2149,2167,-2148,62,66,2167,-2150,67,2168,2167,-67,2148,2169,2170,-2152,2170,2161,2152,-2152,68,64,2153,-2172,2153,2152,2155,-2172,69,3496,2172,2250,-2250,2172,2175,2683,-2251,2173,2174,2175,-2177,2175,2174,2682,-2684,71,2176,2175,-71,2174,2173,2178,2910,-2683,2178,2179,2180,-2911,2181,2182,2183,-2185,2183,2182,3282,-3284,116,73,2183,-3284,74,2184,2183,-74,2185,2186,3278,-3280,2186,2185,2198,-2197,2187,2186,2196,-2196,2186,2187,2244,-3279,2188,2189,2235,-2182,2190,2191,2192,-2194,2194,\n2195,2196,-2198,2199,2197,2196,-2199,2201,2238,2232,-2201,2203,2201,2200,-2203,2204,2202,2200,-2206,2207,2204,2205,-2207,2207,2206,-2209,2208,2209,-2208,2202,2204,2207,-2210,2210,2211,2212,-2214,2212,2214,2215,-2209,2212,2211,-2215,2210,2216,2217,-2219,2219,2220,2217,-2217,2025,2221,2217,-2221,2222,2218,2217,-2222,2223,2224,2220,-2220,2224,2022,2025,-2221,2191,2225,3352,-2029,2191,2190,2222,-2226,75,2226,2227,-77,2194,2197,2227,-2227,2199,2228,2227,-2198,77,76,2227,-2229,2229,2230,3283,-3283,2194,2226,2230,-2230,75,78,2230,-2227,2230,78,116,-3284,2206,2205,2231,-2214,2200,2232,2231,-2206,2219,2216,2231,-2233,2210,2213,2231,-2217,2233,2234,2244,-2244,2027,2030,2233,-2244,2022,2224,2233,-2031,2223,2234,2233,-2225,2182,3280,-3283,2182,2181,2235,3281,-3281,2201,2236,2237,-2239,2237,2236,3279,-3279,2234,2237,3278,-2245,2223,2238,2237,-2235,74,79,2239,-2185,2239,2188,2181,-2185,2238,2223,2219,-2233,2240,2241,2027,-2244,2187,2240,2243,-2245,2240,2187,2195,-2255,2241,2240,2254,3280,-3282,2192,2242,2189,-2194,2245,2246,-2248,2247,2246,2248,-2012,2249,2250,2251,-2253,2683,2685,2251,-2251,2253,2193,2189,-2189,2254,2229,3282,-3281,2194,2229,2254,-2196,2255,2256,2257,-2259,2259,2260,2257,-2257,2261,2262,2257,-2261,2263,2258,2257,-2263,2264,2265,2266,-2268,2085,2092,2268,-2087,2269,2270,-2272,2269,2271,2088,-3339,2273,2272,2274,-2276,2273,2275,2276,-2278,2291,2273,2277,-2293,2279,2278,2280,-2282,2279,2281,2282,-2284,2275,2274,2284,-2286,2275,2285,2286,-2277,2289,2288,2278,-2280,2289,2279,2283,-2291,2272,2273,2291,-3382,80,2293,2294,-82,2294,2293,2318,-2318,2295,2294,2317,-2314,82,81,2294,-2296,2299,2298,2296,-2298,2299,2300,2301,-2299,2302,2303,2314,-2288,2304,2302,2287,-2841,83,84,2302,-2305,85,2303,2302,-85,2118,2305,2306,-2308,2308,2309,2307,-2307,2290,2311,2312,-2314,2286,2314,2312,-2312,2312,2314,2303,-3261,2295,2313,2312,-3261,2316,2315,2102,3478,-2311,2288,2289,2317,-2319,2290,2313,2317,-2290,2052,2083,2319,-2794,2322,2321,2323,-2325,2322,2324,2081,-2066,2070,2095,2325,-2329,2325,2326,2327,-2329,2323,2329,2330,-2325,2320,\n2319,2330,-2330,2083,2082,2330,-2320,2081,2324,2330,-2083,2094,2093,2331,-2335,2331,2332,2333,-2335,2100,2335,2336,-2102,2337,2338,2336,-2336,2332,2331,2336,-2339,2093,2101,2336,-2332,2339,2340,2343,-2345,2340,2341,2342,-2344,2346,2347,2348,-2346,2349,2350,2353,-2355,2350,2351,2352,-2354,2420,2421,2356,-2356,2092,2403,2357,-2269,2357,2358,2359,-2361,2208,2361,2362,-2364,2364,2365,2362,-2362,2368,2363,2362,-2368,2369,2368,2367,-2371,2370,2367,2366,-2350,2372,2371,2379,-2379,2372,2378,2409,-2418,2373,2372,2417,-2880,2372,2373,2374,-2372,2376,2375,2398,-2400,2377,2376,2399,-2401,2383,2376,2377,-2385,2378,2379,2411,-2417,2381,2380,2382,-2384,2381,2383,2384,-2386,2386,2385,2384,-2388,2386,2387,2644,-2646,2369,2388,2390,-2369,2388,2389,2202,-2391,2389,2388,2391,-2393,2369,2393,2391,-2389,2394,2395,2391,-2394,2396,2392,2391,-2396,2208,2363,2397,-2210,2368,2390,2397,-2364,2202,2209,2397,-2391,2399,2398,2785,-2787,2790,2400,2399,-2787,2396,2395,2401,-2403,2394,2403,2401,-2396,2091,2401,2403,-2093,2386,2405,2406,-2386,3482,2351,2350,-3482,3481,2350,2349,-2367,2407,2355,2356,-2409,2409,2377,2400,-2418,2381,2385,2406,-3156,2381,3155,2882,-2381,2411,2379,2412,-2411,2369,2370,-2414,2413,2370,2349,-2355,2369,2413,2414,-2394,2393,2414,2358,-2395,2415,2354,2353,-2411,3495,2409,2378,-2417,2383,2382,2375,-2377,2879,2417,2400,-2791,2420,2419,2418,-2422,2418,2419,2437,-2437,2422,2423,2426,-2428,2423,2424,2425,-2427,2154,2428,2429,-2431,2190,2193,2431,-2435,2431,2432,2433,-2435,72,127,2435,-2178,2436,2437,2263,-2439,2439,2198,2185,-2444,3477,2440,2439,-2444,2442,2439,2440,-2442,2199,2198,2439,-2443,2443,2185,3279,-3182,2441,2444,2445,-2447,2447,2448,2445,-2445,86,87,2445,-2449,88,2446,2445,-88,2449,2450,2690,-2692,2451,2452,2450,-2450,2450,2452,2705,-2843,2690,2450,2842,-2814,2454,2455,2453,3394,-3394,2456,2454,3393,-3393,2457,2458,2454,-2457,2459,2455,2454,-2459,2680,2460,2462,-2493,2461,2460,2680,-2682,89,2463,2464,-91,2465,2466,2464,-2464,2131,2140,2464,-2467,59,90,2464,-2141,2424,2003,2002,-2468,2468,2469,2423,-2423,2469,2003,2424,\n-2424,2471,2461,2681,-3294,2472,2471,3293,-3295,1884,1869,2473,-2475,2425,2424,2467,-2476,2476,2477,2485,-2485,2478,2476,2484,-2488,2479,2480,2476,-2479,2481,2477,2476,-2481,2482,2483,2484,-2486,2486,2487,2484,-2484,2451,2488,2489,-2453,2489,2488,3375,-3375,2841,2704,2489,-3375,2452,2489,2704,-2706,2490,2491,2678,-2680,2492,2490,2679,-2671,2490,2492,2462,-2817,2491,2490,2816,-2818,2494,2433,2495,-2494,2498,2497,3377,-3230,2499,2500,2503,-2505,2500,2501,2502,-2504,2214,2505,2507,-2365,2505,2494,2506,-2508,2509,2508,3322,-2753,2510,2509,2752,-3322,2511,2512,2742,-2780,2513,2514,2511,2779,-2781,2470,2511,2515,-2561,2511,2514,-2516,2470,2512,-2512,2517,2518,2516,2900,-2902,2519,2520,2517,2901,-2905,2521,2518,2517,-2521,2261,2522,2525,-2527,2522,2523,2524,-2526,2527,2528,2529,-2531,2524,2531,2529,-2529,2481,2480,2529,-2532,2479,2530,2529,-2481,2533,2534,2802,-2256,2534,2535,2536,-2803,2537,2538,2458,-2458,2538,2539,2459,-2459,2428,2541,2542,-2541,2544,3488,2407,-2662,2540,2542,2544,-2546,2389,2547,2546,2203,-2203,2548,2549,2552,-2554,2549,2550,2551,-2553,2554,2555,2556,-2558,2619,2618,2556,2555,-2622,2559,2558,2465,-2464,2559,2463,89,-92,2470,2560,-2623,2473,1869,-2562,2466,2465,2562,-2564,2466,2563,3309,-2132,2164,2163,2564,-2567,2564,2565,2543,-2567,2567,2568,2569,-2571,2569,2433,-2495,2569,2568,-2434,2494,2505,-2570,2214,2570,2569,-2506,2482,2571,2572,-2574,2574,2575,2572,-2572,2345,2576,2572,-2576,2577,2573,2572,-2577,2579,2578,2580,-2582,2579,2581,-2583,2173,3329,3333,-2179,2178,3333,3330,-2180,2584,2817,2816,-2584,2583,2816,2462,-2161,2585,2586,2587,-2589,2586,2554,2557,-2588,2574,2571,2589,-2591,2482,2485,2589,-2572,2589,2485,2477,-2872,2590,2589,2871,-2873,2591,2456,3392,-3392,2592,2591,3374,-3376,2594,2593,2661,-2676,2718,2596,2595,-2739,2508,2595,2596,-2808,2597,2598,3331,-3363,3109,2599,1870,-1866,2601,2600,2599,2553,-2756,2599,2600,2561,1869,-1871,2474,2473,2602,-2604,2602,2459,2539,-2604,2494,2493,2580,-2507,3328,3364,3363,-3330,3328,120,121,-3365,2607,2604,2605,-2607,2497,2608,2638,-3378,2608,2497,2496,2750,\n-2785,2610,2609,3367,-3367,2474,2613,-2613,2614,2615,2612,-2614,2616,2611,2612,-2616,2617,2618,2619,-2621,2622,2620,2619,-2622,2623,2624,2625,-2627,2625,2624,2627,-2759,2628,2625,2758,-2764,2629,2626,2625,-2629,2630,2612,2611,1877,-1882,2630,1884,-2475,2630,1881,-1885,2474,2612,-2631,2739,2595,2508,-2510,2604,2607,2631,-2633,2631,2536,2535,-2633,2633,2634,2635,-2637,2637,2638,2635,-2635,2635,2638,2608,-2799,2639,2636,2635,2798,-2800,2475,2467,2640,-2644,2640,2641,2642,-2644,2644,2352,2351,-2646,2646,2647,2648,-2650,2647,1889,1863,-2649,2646,2649,-2651,2652,2651,2653,-2655,2652,2654,2655,-2657,2038,2037,-2658,3365,3363,2658,3369,-3369,3365,3368,3367,-2610,2822,2660,2659,-2834,2659,2660,92,-94,2662,2663,2582,-3383,2662,3382,2316,-2311,2309,2662,2310,-2308,2308,2663,2662,-2310,2432,2664,2665,-2496,2512,2666,2743,-2743,2470,2667,2666,-2513,2668,2669,2666,-2668,2666,2669,2745,-2744,2180,2179,2598,-2654,2555,2554,2499,-2770,2621,2555,2769,-2734,2606,2670,2622,-2561,2586,2585,2501,-2501,2554,2586,2500,-2500,2671,2672,2919,-2958,2673,2674,2671,2957,-2960,2347,2672,2671,-2675,2407,2408,2675,-2662,2676,2677,2839,-2839,2585,2676,2838,-2502,2622,2670,2679,-2621,2679,2678,2617,-2621,2605,2670,-2607,2604,2681,2680,-2606,2683,2682,2684,-2686,2579,2686,2687,-2579,2663,2686,2579,-2583,2686,2663,2308,2877,-3308,2687,2686,3307,-2916,94,95,2689,-2589,95,96,2688,-2690,2407,3488,3489,-2356,2690,2813,3314,-3316,2691,2690,3315,-2854,2692,2693,2694,-2696,2697,2696,2694,-2694,2699,2700,-2702,2346,2695,2694,-2700,3333,3329,3363,-3366,2702,2596,2718,-2717,2703,2702,2716,-2718,2702,2703,2808,-2807,2706,3395,-3374,2705,2704,2707,-3403,1878,2708,-1880,2840,2833,2659,-2305,2659,93,83,-2305,2495,2665,2284,-2275,2709,2710,3184,-3184,2563,2562,2713,-2715,1854,2003,2469,-1856,2469,2468,1858,-1856,3376,2715,3373,-3396,2551,2715,3376,-2757,2716,2718,3164,-3166,2719,2717,2716,3165,-3167,2493,2495,2274,-2273,2176,3328,3329,-2174,71,120,3328,-2177,2708,2720,2721,-1880,2611,2616,2720,-2709,91,68,2171,-2560,2171,2155,2558,-2560,2722,2723,2724,-2726,2486,2726,\n2724,-2724,2727,2728,-3477,2729,2725,2724,-2729,3490,2420,2355,-3490,2425,2475,2629,-2731,2731,2732,2649,-2649,1863,1885,2731,-2649,2733,2427,-2669,2427,2733,2769,-2769,2735,2734,2738,-2737,2046,2735,2736,-2738,2736,2738,2595,-2740,2736,2739,3195,-2738,2817,2584,97,-108,2714,2713,2740,-2118,2741,2742,2743,-2745,2746,2744,2743,-2746,2117,2740,2747,-2119,2005,2004,2641,-2641,2005,2640,2467,-2003,2748,2750,-2497,2753,2751,-2749,2551,2756,2754,-2553,2754,2756,3392,-3394,2755,2754,3393,-3395,2208,2215,-2362,2361,2215,2214,-2365,2757,2758,2627,-2760,2760,2761,2758,-2758,2762,2763,2758,-2762,2429,2428,2540,-2765,98,99,2618,-2618,2760,2765,2766,-2762,2481,2531,2766,-2766,2524,2767,2766,-2532,2762,2761,2766,-2768,2585,2588,2689,-2677,2689,2688,2677,-2677,2180,2653,-2652,2499,2504,2768,-2770,1850,2770,2773,-2775,2770,2771,2772,-2774,2775,2776,2763,-2763,2628,2763,2776,-2888,2263,2437,2777,-2259,2777,2533,2255,-2259,2562,2465,2430,-2430,2741,2778,2779,-2743,2259,2780,2779,-2779,2607,2606,2560,-2516,2781,2374,2722,-2726,2781,2725,2729,-2783,2750,2749,2783,-2785,2786,2785,2787,-2789,2786,2788,2789,-2791,2791,3364,121,-101,2791,2658,3363,-3365,2633,2794,2795,-2635,2616,2615,2795,-2795,2614,2796,2795,-2616,2637,2634,2795,-2797,2701,2347,2346,-2700,2701,2672,-2348,2701,2700,-2798,2672,2701,2797,-2920,2798,2608,2784,-2811,2519,2799,2798,2810,-2521,2580,2493,2272,-2582,3164,2718,2738,-2735,2259,2778,2800,-2261,2741,2801,2800,-2779,2523,2522,2800,-2802,2261,2260,2800,-2523,2255,2802,2803,-2257,2536,2804,2803,-2803,2513,2780,2803,-2805,2259,2256,2803,-2781,2193,2253,2805,-2432,2805,2664,2432,-2432,2643,2626,2629,-2476,2643,2642,2623,-2627,2702,2806,2807,-2597,2747,2740,-2546,2544,2661,-2594,2781,2782,2821,-3407,2781,3406,2371,-2375,2806,2808,3325,-3325,2807,2806,3324,-3324,2199,2442,2809,-2229,2809,2442,2441,-2447,88,101,2809,-2447,77,2228,2809,-102,2783,2811,2810,-2785,2521,2520,2810,-2812,2843,2812,2813,-2843,2813,2812,2684,2911,-3315,2814,103,92,-2661,2815,2814,2660,-2823,3322,2508,2807,-3324,2818,2819,3387,-3327,2819,2818,2898,-2898,\n2821,2820,2360,-3406,2820,2821,2782,-3186,2664,2805,2815,-2823,2253,2823,2815,-2806,102,2814,2815,-2824,2824,2825,2827,-2829,2825,2245,2826,-2828,2829,2830,2503,-2503,2830,2831,2504,-2504,2543,2542,2541,-2833,2465,2558,-2431,2822,2833,2665,-2665,2547,2389,-2393,2834,2547,2392,-2397,2422,2427,2768,-2836,2768,2504,2831,-2836,2836,2837,2838,-2840,2837,2502,2501,-2839,2840,2284,2665,-2834,2614,2613,2603,-2540,2474,2603,-2614,2841,3374,2591,-3392,2429,2764,2713,-2563,2550,2549,105,-3502,2549,2548,104,-106,2468,2422,2835,-2845,2835,2831,2772,-2845,2479,2845,2846,-2531,2789,2788,2846,-2846,2787,2847,2846,-2789,2527,2530,2846,-2848,2727,3356,2848,-3355,2848,2849,-2851,2849,2848,3356,-3358,2848,2850,3233,-3355,2614,2539,2538,-2797,2538,2537,2637,-2797,2852,2851,3484,-2044,2853,2851,2852,-3228,3358,2854,2010,-3242,2855,2856,2854,-3359,2486,2483,2857,-2727,2482,2858,2857,-2484,2859,2860,2857,-2859,2545,2544,2593,-2748,2861,2862,2863,-2865,2865,2866,2863,-2863,2863,2866,2867,-2869,2864,2863,2868,-2871,2869,2870,2868,-2868,2481,2765,2871,-2478,2760,2872,2871,-2766,2874,2478,2487,-2889,2875,2874,2888,-2890,2789,2845,2874,-2876,2479,2478,2874,-2846,2305,2594,2876,-2307,2876,2594,2675,-2882,2308,2306,2876,-2878,2438,2263,2262,-2879,2262,2261,2526,-2879,1858,2468,2844,-2881,2844,2772,2771,-2881,2876,2881,2882,-2878,2746,2883,2884,-2745,2775,2885,2884,-2884,2523,2801,2884,-2886,2741,2744,2884,-2802,2435,2886,2706,-2178,2435,2249,2252,-2887,2730,2629,2628,-2888,98,2617,2678,-107,2486,2723,2888,-2488,2722,2889,2888,-2724,114,106,2678,-2492,114,2491,2817,-108,2774,2773,2830,-2830,2773,2772,2831,-2831,94,2588,2587,-110,2587,2557,108,-110,2852,2043,2047,2046,-2738,2524,2523,2885,-2768,2885,2775,2762,-2768,108,2557,2556,-111,2556,2618,99,-111,2890,2891,2759,-2893,2760,2757,2759,-2892,2627,2892,-2760,2893,2894,2895,-2897,2894,2342,2341,-2896,2897,2898,3236,-3238,2859,2899,2827,-2827,2899,2577,2828,-2828,2646,2902,2901,-2901,2903,2904,2901,-2903,2824,2905,2647,-2647,2905,2348,1889,-2648,2348,2905,-2907,2906,2905,2824,-2829,2245,2825,2900,-2517,\n2825,2824,2646,-2901,2909,2907,2339,-2345,2908,2907,-2910,2910,2180,2651,-2912,2910,2911,2684,-2683,2746,2745,2912,-2884,2912,2745,2669,-2914,2887,2776,2912,-2914,2775,2883,2912,-2777,2668,2914,2913,-2670,2730,2887,2913,-2915,2915,2406,-2406,3483,2405,2386,-2646,2687,2915,2405,-3484,2916,2917,2797,-2701,2918,2919,2797,-2918,2864,2870,2920,2921,-3017,2869,2920,-2871,2922,2923,2926,-2928,2923,2924,2925,-2927,2928,2929,2932,-2934,2929,2930,2931,-2933,2939,2934,-2939,2934,2936,-2938,2937,2940,2938,-2935,2938,2940,3069,-3069,2939,2938,3068,-3072,2941,2942,-2944,2943,2942,2944,-2946,2946,2869,-2948,2946,2948,-2870,2946,2950,-2949,2623,2951,2952,-2625,2953,2954,2952,-2952,2937,2955,2952,-2955,2627,2624,2952,-2956,2937,2936,-2956,2935,2949,-2937,2890,2892,2936,-2950,2627,2955,2936,-2893,2918,2956,2957,-2920,2958,2959,2957,-2957,2959,2958,2960,-2962,2959,2961,2962,-2674,2339,2907,2963,-2965,2908,2965,2963,-2908,2966,2967,2963,-2966,2968,2964,2963,-2968,2969,2970,2971,-2973,2341,2340,2971,-2971,2339,2964,2971,-2341,2968,2972,2971,-2965,2973,2974,2975,-2977,2977,2978,2975,-2975,2896,2979,2975,-2979,2980,2976,2975,-2980,2978,3465,2893,-2897,2937,2954,2981,-2941,2953,2982,2981,-2955,2981,2982,3180,-3180,2940,2981,3179,-3070,2642,2982,-2954,2642,2983,3180,-2983,2918,2917,2984,-2986,2916,2986,2984,-2918,2987,2988,2984,-2987,2989,2985,2984,-2989,2958,2956,2990,-2992,2918,2985,2990,-2957,2989,2992,2990,-2986,2993,2991,2990,-2993,2995,2994,2996,-2998,2995,2997,2916,-2701,2916,2997,2998,-2987,2996,2999,2998,-2998,3000,3001,2998,-3000,2987,2986,2998,-3002,3002,2994,-3004,3002,3003,3004,-3006,3002,3005,3006,-3008,3002,3007,2996,-2995,3006,3008,3009,-3008,3010,3011,3009,-3009,3000,2999,3009,-3012,2996,3007,3009,-3000,3003,3012,3013,-3015,3015,3016,3013,-3013,3013,3016,2921,-3021,3014,3013,3020,-3024,3017,3014,3023,-3192,3017,3191,3090,3095,-3095,3005,3004,3017,3094,-3097,3003,3014,3017,-3005,3018,3019,3008,-3007,3019,2931,3010,-3009,2920,3021,3020,-2922,3022,3023,3020,-3022,2920,2869,2948,-3022,2948,2950,3022,-3022,3024,3025,3026,-3028,\n3028,3029,3026,-3026,2969,2972,3026,-3030,2968,3027,3026,-2973,3030,3031,3032,-3034,3024,3027,3032,-3032,2968,2967,3032,-3028,2966,3033,3032,-2968,3035,3034,3024,-3032,3035,3031,3030,-3037,3024,3034,3037,-3026,3037,3038,3028,-3026,2925,2924,3039,-3043,3040,3041,3042,-3040,3040,3039,3035,-3037,3039,2924,3034,-3036,3043,3044,3047,-2928,3044,3045,3046,-3048,3042,3048,3049,-2926,3041,3048,-3043,3045,3044,3019,-3019,3044,3043,2931,-3020,2928,2933,2925,-3050,3050,2944,-3053,3051,3055,2930,-2930,2928,3053,3051,-2930,3011,3010,2930,-3056,3011,3055,3054,-3001,3001,3000,3054,-3057,3001,3056,2941,-2988,2941,3056,3052,-2943,3054,3050,3052,-3057,2944,2942,-3053,3058,3057,2989,-2989,3058,2988,2987,-2942,3060,3059,2993,-2993,3060,2992,2989,-3058,3062,2993,3059,-3062,2960,3063,3064,-3066,3062,3066,3064,-3064,3030,3033,3064,-3067,2966,3065,3064,-3034,3063,2960,2958,-2992,3063,2991,2993,-3063,2973,3067,3068,-3070,3070,3071,3068,-3068,3070,3067,3072,-3074,2973,2976,3072,-3068,2980,3074,3072,-2977,3075,3073,3072,-3075,3070,3073,3077,-3079,3073,3075,3076,-3078,3089,3080,3079,-3089,3079,2939,3071,-3089,3079,2935,-2940,2943,2945,3085,3105,-3082,3058,2941,2943,3081,-3058,2945,3082,3083,-3086,3082,3049,3048,-3084,3041,3084,3083,-3049,3059,3085,3083,-3085,3046,3086,3077,-3077,3086,3087,3078,-3078,3088,3078,3087,-3090,3082,2945,2944,-3054,2928,3049,3082,-3054,3022,2950,3080,-3091,3090,3080,3089,-3096,3045,3018,3091,-3094,3092,3093,-3092,3092,3091,3094,-3096,3018,3096,3094,-3092,3047,3046,3076,-3098,3047,3097,2922,-2928,3034,2924,2923,-3038,2923,2922,3038,-3038,3098,3038,2922,-3098,3076,3098,-3098,3028,3038,3098,-3100,3098,3076,3075,-3100,2969,3029,3100,-3102,3028,3099,3100,-3030,3075,3074,3100,-3100,2980,3101,3100,-3075,2980,2979,3102,-3102,2896,2895,3102,-2980,2341,2970,3102,-2896,2969,3101,3102,-2971,2697,2693,2862,-2862,2693,2692,2865,-2863,2864,3016,3015,-2862,3015,3012,3103,-2698,3012,3003,2994,-3104,3061,3059,3084,-3105,3057,3081,3105,-3061,3059,3060,3105,-3086,3046,3045,3093,-3087,3093,3092,3087,-3087,3089,3087,3092,-3096,3043,2927,2926,\n-3107,2926,2925,2933,-3107,2951,2623,-2643,2951,2642,-2954,2574,2590,3108,-3108,3108,2590,2872,-2874,2994,2995,2698,-3104,2700,2696,2698,-2996,52,111,3109,-1867,111,104,2548,-3110,2930,3010,-2932,2931,3043,3106,-2933,2933,2932,-3107,3005,3096,-3007,3006,3096,-3019,2574,2692,2695,-2576,2692,3107,-3112,2867,2866,3110,-3113,2865,3111,3110,-2867,2890,2947,2873,-2892,2947,2869,2867,-3113,2947,3112,3110,3108,-2874,2692,3111,-2866,3113,2280,2278,-3115,3113,3114,3115,-3117,3118,3117,3115,-3115,3118,3114,2278,-2289,112,3119,3120,-114,3120,3119,3125,-3127,2318,2293,3120,-3127,80,113,3120,-2294,3121,2297,2296,-3123,3121,3122,3123,-3125,3117,3118,3126,-3126,2288,2318,3126,-3119,7,12,2119,-2123,7,2122,2125,-9,2133,2119,12,-11,3127,3128,-3130,3130,3127,3129,-3132,2107,3132,3129,-3129,3129,3132,-3132,2133,10,11,-2143,11,0,61,-2143,9,8,2125,-2144,9,2143,2145,-35,3133,3134,3135,-3137,2105,3137,3135,-3135,3138,3136,3135,-3138,3139,3140,3141,-3143,3142,3141,-3132,3143,3144,3145,-3147,3133,3147,3145,-3145,3148,3149,3145,-3148,3150,3146,3145,-3150,3141,3140,3151,-3153,3139,3153,3151,-3141,3154,3152,3151,-3154,2881,2675,2408,-3157,2881,3156,2380,-2883,3156,2408,2356,-3158,3156,3157,2382,-2381,3157,2356,2421,-3159,3157,3158,2375,-2383,3158,2421,2418,-3160,2398,2375,3158,-3160,3159,2418,2436,-3162,2398,3159,3161,-2786,3160,2787,2785,-3162,3160,3161,2436,-2439,2438,2878,3162,-3161,2526,3163,3162,-2879,2527,2847,3162,-3164,2787,3160,3162,-2848,2525,2528,2527,-3164,2524,2528,-2526,2734,2735,3167,-3169,2735,2046,2045,-3168,3164,2734,3168,-3170,3165,3164,3169,-3171,3165,3170,3171,-3167,3172,3166,3171,-3174,3172,3173,2062,-2056,3174,2597,3362,-3404,3175,3174,3403,-3405,3174,3175,2655,-2655,3176,3036,3030,-3067,3176,3066,3062,-3062,3040,3036,3176,-3105,3061,3104,-3177,2908,3177,3178,-2966,2962,2961,3178,-3178,2960,3065,3178,-2962,2966,2965,3178,-3066,3071,3070,3078,-3089,2977,2974,3179,-3181,2973,3069,3179,-2975,2348,2347,1887,-1890,2697,2861,-3016,2346,2345,2575,-2696,3182,3181,3316,2546,-2548,2443,3181,3182,-3478,2447,2444,3183,-3185,2441,2440,\n3183,-2445,2820,2266,-2361,3186,3187,-3189,2012,2009,3500,-3195,2009,2011,2248,-3501,2169,3189,3296,-3296,3189,3190,3297,-3297,2532,2565,2564,-3303,2564,2163,2472,-3303,2472,2163,2162,-2472,2162,2158,2461,-2472,2170,2169,3295,-2833,2541,2161,2170,-2833,2161,2541,2428,-2155,3022,3090,3191,-3024,3192,2010,2012,-3194,3192,3193,2053,-2057,3193,2012,3194,-3239,2656,2851,2853,-3316,2065,2067,3196,-2323,2070,2328,3196,-2068,2327,3197,3196,-2329,2321,2322,3196,-3198,2100,2099,3198,-2336,3198,3199,2337,-2336,3200,3201,-3203,3202,3203,-3201,3199,3198,3202,-3202,2099,3204,3202,-3199,2061,3203,3202,-3205,3200,3203,-3206,3206,3200,-3206,3205,2061,2062,-3208,3205,3203,-2062,3205,3207,-3207,2062,3173,3208,-3208,3171,3209,3208,-3174,3210,3211,3208,-3210,3206,3207,3208,-3212,3171,3170,3212,-3210,3169,3213,3212,-3171,3214,3215,3212,-3214,3210,3209,3212,-3216,3213,3169,3168,-3217,3213,3216,3217,-3215,3168,3167,3218,-3217,2045,3219,3218,-3168,3220,3221,3218,-3220,3217,3216,3218,-3222,3220,3219,3222,-3224,2045,2044,3222,-3220,2042,3224,3222,-2045,3225,3223,3222,-3225,3225,3224,2059,-3227,2042,2041,2059,-3225,2060,3226,2059,-2059,3227,2852,2737,-3196,2510,3228,3227,-3196,3228,2691,2853,-3228,2449,2691,3228,-3373,2498,3229,2592,-3376,2457,2592,-3230,2055,2054,3230,-3173,3230,2719,3166,-3173,3338,2088,2264,3188,3187,-3336,3231,3232,3234,-3236,3232,3233,2850,-3235,2719,3237,-3237,3193,3238,2054,-2054,3239,3240,3192,-2057,3240,3241,2010,-3193,3242,3239,-2057,3242,2056,-2062,3243,3244,-2100,2061,3204,2099,-3245,3239,3242,3245,-3247,2061,3244,3245,-3243,3243,3246,3245,-3245,3247,3248,3240,-3240,3248,3249,3241,-3241,2105,2103,3250,-3252,2102,3252,3250,-2104,2300,2299,3250,-3253,2297,3251,-3251,3250,2299,-2298,3124,3253,3254,-3122,3255,3256,3254,-3254,3138,3257,3254,-3257,2297,3121,3254,-3258,3255,3258,3259,-3257,3259,3147,3133,-3137,3138,3256,3259,-3137,2118,2307,2310,-2116,85,115,3260,-2304,82,2295,3260,-116,2284,2840,2287,-2286,2311,2290,2283,-3262,2311,3261,2276,-2287,3261,2283,2282,-3263,3261,3262,2277,-2277,3262,2282,2301,-3264,3262,3263,\n2292,-2278,3265,3264,2108,-3267,2137,2128,3265,-3267,3479,3267,3266,-2109,2138,2137,3266,-3268,3479,3128,3268,-3268,3127,3269,3268,-3129,2145,2144,3268,-3270,2138,3267,3268,-2145,3130,3131,3141,-3271,3127,39,-3270,3131,3132,3271,-3143,2107,3272,3271,-3133,3139,3142,3271,-3273,2105,3134,3273,-3275,3273,3133,3275,-3140,3273,3134,-3134,3139,3274,-3274,2107,2106,3276,-3273,2105,3274,3276,-2107,3139,3272,3276,-3275,3269,39,34,-2146,2300,3252,-3278,3277,3252,2102,-2316,2764,2540,-2546,2764,2545,2740,-2714,3181,3279,2236,-3317,3190,3284,3298,-3298,3284,2156,3299,-3299,2158,2166,3285,-2160,3285,3286,2160,-2160,2160,3286,3287,-2584,3287,3288,2584,-2584,3284,3190,2146,-3291,2156,3284,-3291,2146,2168,3289,-3291,67,117,3289,-2169,65,2157,3289,-118,2156,3290,3289,-2158,97,2584,3288,-119,2533,2777,3291,-3293,3291,2777,2437,-2420,3490,3291,2419,-2421,2604,2632,3293,-2682,2535,3294,3293,-2633,2832,2566,-2544,2164,2566,2832,-3296,2166,2165,3296,-3298,2164,3295,3296,-2166,3286,3285,3298,-3300,2166,3297,3298,-3286,3288,3287,3300,-3302,3286,3299,3300,-3288,118,3288,3301,-120,65,119,-3302,3302,2472,3294,-3304,3292,2532,3302,-3304,2535,2534,3303,-3295,2533,3292,3303,-2535,2879,2790,2789,-2876,2373,2879,2875,-2890,2373,2889,2722,-2375,3263,2301,2300,-3278,3263,3277,2315,-2293,2291,2292,2315,-2317,2291,2316,3382,-3382,3304,2506,2580,-2579,2823,2253,2188,-2240,2823,2239,79,-103,2495,2433,-2433,2567,3305,3306,-2569,2190,2434,3306,-3306,2433,2568,3306,-2435,3307,2877,2882,-3156,2406,2915,3307,-3156,2593,2305,2118,-2748,2116,3308,2714,-2118,3308,3309,2563,-2715,2298,2301,2282,-2282,2298,2281,2280,-2297,3122,2296,2280,-3114,3122,3113,3116,-3124,2297,3257,3310,-3252,3138,3137,3310,-3258,2105,3251,3310,-3138,3133,3144,3311,-3276,3143,3312,3311,-3145,3154,3153,3311,-3313,3139,3275,3311,-3154,2043,3485,-3343,2426,2425,2730,-2915,2426,2914,2668,-2428,2536,2631,3313,-2805,2631,2607,2515,-3314,3313,2514,2513,-2805,2651,2652,3314,-2912,3314,2652,2656,-3316,2236,2201,2203,-3317,2396,2712,-2835,2712,2711,-2835,3330,2609,2610,3317,-3332,2598,2179,3330,-3332,\n2546,3316,-2204,2073,2096,3318,2090,-2072,3319,3320,2402,-2405,3320,2712,2396,-2403,2753,3321,2752,-2752,3322,3323,2783,-2750,2783,3323,3324,-2812,2521,2811,3324,-3326,2521,3325,3326,-3328,2818,3326,3325,-2809,3332,2657,-2077,2038,2657,3332,-2049,3332,2076,-2052,2051,2048,-3333,3334,3235,3249,-3249,3334,3248,3247,-2271,3231,3335,3336,-3233,3187,3337,3336,-3336,3233,3232,3336,-3338,3339,2269,3338,-3232,3338,3335,-3232,2270,2269,3339,-3335,3339,3231,3235,-3335,3340,2270,3239,-3247,2270,3340,-2079,3243,3341,3340,-3247,3340,3341,-2079,2270,3247,-3240,2077,2078,3341,-2099,3341,3243,2099,-2099,3188,2264,-2268,3186,3188,2267,-3186,3186,3185,2782,-2730,2247,2011,2856,-3362,2245,2247,3361,-2827,2597,2653,-2599,3175,3404,3342,-3486,3343,2241,3281,-3345,2020,2033,3343,-3345,2235,3345,3344,-3282,2021,2020,-3345,3344,3345,-2022,2031,2021,3346,-2018,2189,2242,2017,-3347,2567,2570,3347,-3349,2214,2211,3347,-2571,2210,2218,3347,-2212,2222,3348,3347,-2219,2222,2221,3349,-2226,2025,2024,3349,-2222,3349,2024,3350,-3352,2225,3349,3351,-3353,2222,2190,3305,-3349,2567,3348,-3306,2032,2015,2026,3343,-2034,2015,2014,2029,-2027,2014,3352,3351,-3351,2014,2028,-3353,3346,2021,-3346,3345,2235,2189,-3347,3233,3337,3353,-3355,3187,3186,3353,-3338,2729,2728,3353,-3187,2727,3354,3353,-2729,3234,2850,2849,-3356,3234,3355,3249,-3236,3356,2727,2860,-2860,2859,3357,-3357,3359,2855,2849,-3358,2859,3359,-3358,3241,3249,3355,-3359,3355,2849,2855,-3359,2828,2577,2576,-2907,2576,2345,2348,-2907,2577,2899,3360,-2574,2859,2858,3360,-2900,2482,2573,3360,-2859,2855,3359,3361,-2857,3359,2859,2826,-3362,3331,3317,2037,-3363,2037,3317,-2658,2657,3317,2610,2097,-2077,3333,3365,2609,-3331,3184,2710,3320,3319,-3370,2712,3320,-2711,2791,100,86,-2449,2791,2448,2447,-2659,3366,3367,3319,-2405,3319,3367,3368,-3370,3369,2658,2447,-3185,2610,3366,3318,-2098,3366,2404,2090,-3319,2091,2090,2404,2402,-2402,2488,3371,2498,-3376,2488,2451,3370,-3372,2753,2748,3371,-3371,3370,2451,2449,-3373,2706,3373,-2178,2841,3391,3376,-3396,2756,3376,3391,-3393,2638,2637,2537,-3378,3377,2537,\n2457,-3230,2473,2561,3379,-2603,2453,2455,-3380,2453,3379,2600,-2602,2459,2602,3379,-2456,3228,2510,3321,-3373,3321,2753,3370,-3373,3483,2645,2351,-3483,2365,2364,2507,-3381,2507,2506,3304,-3381,3381,3382,2582,-2582,2054,3238,3383,-3231,3383,3238,3194,-3385,2897,3237,3383,-3385,2719,3230,3383,-3238,3385,3500,2248,3388,-3387,3384,3385,2819,-2898,2819,3385,3386,-3388,3389,3387,3386,-3389,2248,2246,3390,-3389,3390,2245,-2517,3390,2246,-2246,3390,2516,-3408,3389,3388,-3391,3389,3390,-3408,2719,3236,-2718,2703,2717,3236,-2899,2898,2818,2808,-2704,2553,2552,2754,-2756,2551,2550,3378,-2716,3373,2715,3378,-3506,2755,3394,2453,-2602,2650,2649,2732,-3397,1879,2721,3397,-1973,2720,3398,3397,-2722,2732,2731,3397,-3399,1885,1972,3397,-2732,3396,2732,3398,-3400,2720,3399,-3399,3400,3396,2633,-2637,2639,3400,-2637,3400,2639,2903,-3402,2646,2650,3401,-2903,2903,2902,-3402,2720,2616,2794,-3400,3399,2794,2633,-3397,2707,2706,2886,-3403,2251,2685,2812,-2844,2684,2812,-2686,2886,2252,-3403,2904,2903,2639,-2800,2519,2904,-2800,2037,2035,3403,-3363,2034,3404,3403,-2036,2653,2597,3174,-2655,3485,2043,-3485,2414,2413,2354,-2416,2414,2415,2359,-2359,2403,2394,2358,-2358,2266,2268,2357,-2361,2086,2268,2266,-2266,2063,2086,2265,-2088,2095,2063,2087,-2095,2325,2095,2094,-2335,2325,2334,2333,-2327,2359,3405,-2361,2379,2371,3406,-2413,3406,2821,3405,-2413,2518,2521,3327,-3408,2516,2518,-3408,3387,3389,3327,-3327,3327,3389,-3408,2733,2668,2667,-2471,2760,2891,2873,-2873,3408,3409,3410,-3412,3409,2774,2829,-3411,3410,2829,2502,-2838,3412,3413,-3415,122,3412,3414,-124,1846,1851,3409,-3409,3409,1851,1850,-2775,3412,3416,-3416,3418,3417,3468,-3468,3418,3411,3419,-3418,2836,3420,-3412,3420,3415,3421,-3420,3421,3415,3416,-1829,3417,3419,3421,-1830,3469,3468,3417,-1830,3414,3413,2839,-2678,2839,3413,3420,-2837,2836,3411,3410,-2838,3416,3412,122,-125,3415,3420,3413,-3413,3419,3411,-3421,3408,3411,3418,-3423,3422,3418,-3468,1847,1846,3408,-3423,1847,3422,3467,-3476,123,3414,2677,-2689,123,2688,-97,1834,3423,3424,-1836,3425,3426,3424,-3424,3427,3428,3424,\n-3427,1836,1835,3424,-3429,1836,3428,3429,-1842,3427,3430,3429,-3429,1845,3431,3429,-3431,1842,1841,3429,-3432,1755,1756,1843,-1843,165,1843,-1757,1858,2880,3432,-1860,2771,3433,3432,-2881,3425,3423,3432,-3434,1834,1859,3432,-3424,1845,167,1759,-3432,1759,1755,1842,-3432,3425,3434,3435,-3427,1815,1814,3435,-3435,1813,3436,3435,-1815,3427,3426,3435,-3437,3427,3436,3437,-3431,1813,1827,3437,-3437,1821,1844,3437,-1828,1845,3430,3437,-1845,2771,2770,3438,-3434,1850,1853,3438,-2771,1815,3434,3438,-1854,3425,3433,3438,-3435,3440,3439,3441,-3443,3440,3442,1896,-1888,2962,3177,3443,-3445,3441,3444,3443,-3446,3443,2909,2344,-3446,2000,1926,3446,-3448,2000,3447,3448,-2002,2347,2674,3449,-3451,2673,3451,3449,-2675,3439,3450,3449,-3452,3451,2673,2962,-3445,3451,3444,3441,-3440,3440,1887,2347,-3451,3439,3440,-3451,1896,3442,3452,-3454,3441,3445,3452,-3443,2344,3454,3452,-3446,3446,3453,3452,-3455,1925,1897,1896,-3454,3448,3447,3455,-3457,3446,3455,-3448,2641,2004,-3458,3458,2004,1963,-3460,1928,2001,3459,-2000,1963,1999,-3460,3446,3454,3460,-3456,2344,2343,3460,-3455,2342,3461,3460,-2344,3456,3455,3460,-3462,3456,3461,3462,-3464,2342,2894,3462,-3462,2893,3464,3462,-2895,3457,3463,3462,-3465,2977,3180,2983,-3466,3458,3448,3456,-3464,3458,3463,3457,-2005,3465,2983,3466,3464,-2894,3466,2641,3457,-3465,2642,2641,-3467,2642,3466,-2984,1863,1889,-1865,2353,2352,2411,-2411,2384,2377,2409,-3496,2834,2711,3182,-2548,2005,1964,1963,-2005,3476,2728,2724,-2727,2860,3476,2726,-2858,2727,3476,-2861,2843,2842,2705,-3403,3395,2707,2704,-2842,2457,2456,2591,-2593,2749,2751,2752,-3323,2749,2750,2748,-2752,2739,2509,2510,-3196,2496,2497,2498,3371,-2749,2709,3477,3182,-2712,3477,2709,3183,-2441,2709,2711,2712,-2711,2416,2411,2352,-2645,2362,2365,2366,-2368,2113,2114,2115,-3479,2310,3478,-2116,2286,2285,2287,-2315,102,103,-2815,3381,2581,-2273,2410,2359,-2416,2525,3163,-2527,2040,3342,3404,-2035,2212,2208,2206,-2214,2558,2155,2154,-2431,2107,3479,-2109,2107,3128,-3480,1844,1821,1806,-1808,1824,140,1822,-1824,2435,127,69,-2250,2793,2319,2320,-2793,\n2977,3465,-2979,1925,3453,3446,-1927,2001,3448,3458,-3460,3443,3177,2908,-2910,3111,3107,3108,-3111,3148,3147,3259,-3259,1161,577,578,-1727,2843,3402,2252,-2252,2650,3396,3400,-3402,405,402,403,-405,2072,2073,2071,-2069,2708,1878,1877,-2612,692,1704,836,-692,2366,2365,-3381,910,908,-912,443,1592,-442,3264,2114,-2114,2935,3079,3080,-2951,3040,3104,3084,-3042,2946,2947,2890,-2950,2946,2949,2935,-2951,2944,3050,3051,-3054,3054,3055,3051,-3051,3380,3481,-2367,3304,3482,3481,-3381,2687,3483,3482,3304,-2579,738,743,-687,2412,3405,2359,-2411,1866,3109,-1866,3484,2851,2656,-2656,3175,3485,3484,-2656,1170,379,3486,-1170,3487,3486,-380,379,1666,-3488,1642,1643,978,-975,889,890,-192,2553,2599,3109,-2549,1113,1724,1725,-958,890,929,928,192,-192,505,1697,-1028,345,347,344,-1173,1708,1709,344,-348,846,1715,1713,-849,232,243,-245,1389,1428,1387,-1253,2700,2699,2694,-2697,3488,2544,2542,-2544,3489,3488,2543,-2566,2532,3490,3489,-2566,3292,3291,3490,-2533,3494,744,705,-738,704,711,3494,-738,2387,3495,2416,-2645,2384,3495,-2388,2172,3496,70,-2176,2698,2696,2697,-3104,2692,2574,-3108,1415,1427,1414,-3498,415,1564,-591,1508,1570,1707,-1515,1529,1571,-389,2067,2066,2068,-2070,399,398,396,-398,408,596,-408,3498,1683,-1177,1178,3498,1176,-1176,1664,1564,415,-597,596,408,-596,596,595,1665,-1665,595,3499,1576,-1661,1575,3499,-596,2593,2594,-2306,630,446,632,-632,1027,1697,-1721,2706,2707,-3396,3384,3194,3500,-3386,845,1224,1223,-845,2820,3185,2267,-2267,1020,1022,-1022,2550,3501,3502,-3379,3378,3502,3504,-3506,3505,3504,72,-2178,3373,3505,-2178,2600,3379,-2562,3148,3542,3543,-3150,3549,3550,3141,-3153,3548,3549,3152,-3155,3270,3551,51,-40,3141,3550,3551,-3271,3149,3543,3544,-3151,3255,3540,3541,-3259,3258,3541,3542,-3149,3124,3538,3539,-3254,3253,3539,3540,-3256,1460,1467,3522,1461,-1460,3123,3537,3538,-3125,3146,3150,3544,-3546,3143,3546,3547,-3313,3312,3547,3548,-3155,3146,3545,3546,-3144,3507,3522,3523,-3509,3509,3508,3523,-3525,3510,3509,3524,-3526,3511,3510,3525,-3527,3512,3511,3526,-3528,3513,3512,3527,-3529,3514,3513,3528,-3530,3515,\n3514,3529,-3531,3516,3515,3530,-3532,3517,3516,3531,-3533,3518,3517,3532,-3534,3533,3534,3519,-3519,3534,3535,3520,-3520,3521,3520,3535,-3537,50,3521,3536,44,45,47,48,-50,112,3507,3537,3117,3125,-3120,3522,1467,1468,-3524,3524,3523,1468,-1582,3525,3524,1581,-1584,3526,3525,1583,-1587,3527,3526,1586,-1492,3528,3527,1491,-1493,3529,3528,1492,-1494,3530,3529,1493,-1490,3531,3530,1489,-1487,3532,3531,1486,-1641,3533,3532,1640,-1497,1496,1494,3534,-3534,1494,1484,3535,-3535,44,3536,1598,-47,1461,3522,3507,112,1463,-1470,3537,3507,3508,-3539,3539,3538,3508,-3510,3540,3539,3509,-3511,3541,3540,3510,-3512,3542,3541,3511,-3513,3543,3542,3512,-3514,3544,3543,3513,-3515,3545,3544,3514,-3516,3546,3545,3515,-3517,3547,3546,3516,-3518,3548,3547,3517,-3519,3518,3519,3549,-3549,3519,3520,3550,-3550,3551,3550,3520,-3522,51,3551,3521,50,42,41,40,-39,3117,3537,3123,3116,-3116,429,1804,431,-431,3127,3130,3270,-40,43,46,-7,1484,1598,3536,-3536,16,26,-44,2323,2321,3552,-3554,2327,2326,3554,-3556,2329,2323,3553,-3557,2792,2320,3556,-3558,2338,2337,3559,-3561,2332,2338,3560,-3559,2060,2792,3557,-3562,3197,2327,3555,-3563,2321,3197,3562,-3553,2337,3199,3563,-3560,3201,3200,3564,-3566,3199,3201,3565,-3564,3564,3200,3206,-3567,3211,3210,3567,-3569,3206,3211,3568,-3567,3215,3214,3569,-3571,3210,3215,3570,-3568,3214,3217,3571,-3570,3221,3220,3572,-3574,3217,3221,3573,-3572,3220,3223,3574,-3573,3223,3225,3575,-3575,3225,3226,3576,-3576,3576,3226,2060,-3562,2326,2333,3577,-3555,3577,2333,2332,-3559,3553,3552,3578,-3580,3555,3554,3580,-3582,3556,3553,3579,-3583,3557,3556,3582,-3584,3560,3559,-3585,3561,3557,3583,-3587,3562,3555,3581,-3579,3552,3562,-3579,3559,3563,3587,-3585,3565,3564,-3589,3563,3565,3588,-3588,3589,3588,3564,-3567,3568,3567,3590,-3592,3566,3568,3591,-3590,3570,3569,3592,-3594,3567,3570,3593,-3591,3569,3571,3594,-3593,3573,3572,3595,-3597,3571,3573,3596,-3595,3572,3574,3597,-3596,3574,3575,3598,-3598,3575,3576,3599,-3599,3586,3599,3576,-3562,3554,3577,3600,-3581,3585,3600,3577,-3559,3582,3579,3586,-3584,3584,3585,3558,-3561,3647,\n654,645,-3605,651,652,3603,-3603,645,1111,3605,-3605,3606,657,658,-3625,662,663,3608,-3608,663,657,3606,-3609,1111,392,3609,-3606,3609,392,1560,-3624,652,1533,3610,-3604,1533,646,3601,-3611,1535,662,3607,-3612,1536,1537,3613,-3613,1537,1535,3611,-3614,1544,1545,3615,-3615,1548,1549,3617,-3617,1549,1544,3614,-3618,1551,1548,3616,-3619,1554,1555,3620,-3620,1555,1551,3618,-3621,1557,1554,3619,-3622,1559,1557,3621,-3623,1560,1559,3622,-3624,658,651,3602,-3625,3628,3646,-3648,3602,3603,3627,-3627,3604,3605,-3629,3629,3606,3624,-3646,3607,3608,3631,-3631,3608,3606,3629,-3632,3605,3609,3632,-3629,3632,3609,3623,-3645,3610,3627,-3604,3611,3607,3630,-3634,3612,3613,-3635,3613,3611,3633,-3635,3614,3615,3635,-3637,3635,3615,3612,-3635,3616,3617,3638,-3638,3617,3614,3636,-3639,3618,3616,3637,-3640,3619,3620,3641,-3641,3620,3618,3639,-3642,3621,3619,3640,-3643,3622,3621,3642,-3644,3623,3622,3643,-3645,3624,3602,3626,-3646,3625,3627,-3611,3625,3610,-3602,3625,3601,3646,-3629,3601,646,648,-3647,3646,648,654,-3648,3628,3647,-3605,2320,2329,-3557,2621,2733,2470,-2623,1053,798,989,-991,1536,3612,3615,-1546,931,932,992,-821,2934,2935,-2937,2935,2934,-2940,3497,1277,-1416,1259,1256,-1258,3313,2515,-2515,2605,2680,-2493,2605,2492,-2671,3648,3649,3650,-3652,3652,3648,3651,-3654,3654,3652,3653,-3656,3656,3657,3658,-3660,3660,3661,3662,-3664,3664,3665,3666,-3668,3668,3669,3670,-3672,3672,3673,3674,-3676,3677,3649,3648,-3693,3692,3648,3652,-3679,3680,3678,3652,-3655,3693,3657,3656,-3695,3683,3661,3660,-3685,3695,3665,3664,-3697,3690,3688,3669,-3669,3697,3693,3694,-3699,3699,3700,3695,-3697,3691,3671,3670,-3690,3703,3667,3666,-3705,3685,3663,3662,-3683,3705,3659,3658,-3707,3681,3655,3653,-3680,3707,3679,3653,-3652,3676,3707,3651,-3651,3708,3703,3704,-3710,3710,3705,3706,-3712,3676,3650,3649,-3678,3657,3654,3655,-3659,3706,3658,3655,-3682,3693,3680,3654,-3658,3694,3656,3661,-3684,3705,3682,3662,-3660,3659,3662,3661,-3657,3665,3660,3663,-3667,3704,3666,3663,-3686,3695,3684,3660,-3666,3696,3664,3669,-3688,3703,3686,3670,-3668,3667,3670,3669,-3665,\n3673,3668,3671,-3675,3674,3671,3691,-3703,3673,3701,3690,-3669,3669,3688,-3688,3673,3672,-3702,3675,3674,-3703,3670,3686,-3690,3681,3711,-3707,3680,3693,-3698,3683,3698,-3695,3682,3705,-3711,3685,3709,-3705,3684,3695,-3701,3687,3699,-3697,3686,3703,-3709,3712,3715,3714,-3714,3713,3714,3717,-3717,3716,3717,3719,-3719,3718,3719,3721,-3721,3722,3725,3724,-3724,3723,3724,3727,-3727,3726,3727,3729,-3729,3725,3732,3731,-3731,3730,3733,3724,-3726,3733,3734,3727,-3725,3734,3735,3729,-3728,3736,3715,3712,-3738,3738,3732,3725,-3723,3739,3742,3741,-3741,3743,3744,3742,-3740,3743,3746,3745,-3745,3720,3721,3745,-3747,3747,3750,3749,-3749,3750,3752,3751,-3750,3752,3728,3729,-3752,3753,3756,3755,-3755,3749,3758,3757,-3749,3751,3759,3758,-3750,3729,3735,3759,-3752,3760,3763,3762,-3762,3762,3764,3740,-3742,3765,3747,3748,-3755,3748,3757,3753,-3755,3738,3722,3714,-3716,3723,3717,3714,-3723,3726,3719,3717,-3724,3728,3721,3719,-3727,3715,3736,3766,-3739,3736,3768,3767,-3767,3765,3741,3742,-3748,3747,3742,3744,-3751,3750,3744,3745,-3753,3752,3745,3721,-3729,3741,3765,3755,-3763,3762,3755,3756,-3762,3769,3772,3771,-3771,3770,3774,3773,-3770,3774,3776,3775,-3774,3776,3778,3777,-3776,3779,3782,3781,-3781,3782,3784,3783,-3782,3784,3786,3785,-3784,3781,3733,3730,-3781,3783,3734,3733,-3782,3785,3735,3734,-3784,3787,3788,3771,-3773,3789,3779,3780,-3791,3791,3794,3793,-3793,3792,3793,3796,-3796,3795,3796,3798,-3798,3797,3798,3777,-3779,3799,3802,3801,-3801,3800,3801,3804,-3804,3804,3785,3786,-3804,3805,3756,3753,-3807,3802,3757,3758,-3802,3801,3758,3759,-3805,3759,3735,3785,-3805,3761,3808,3807,-3761,3808,3794,3791,-3810,3810,3806,3802,-3800,3806,3753,3757,-3803,3772,3769,3779,-3790,3769,3773,3782,-3780,3773,3775,3784,-3783,3775,3777,3786,-3785,3772,3789,3811,-3788,3787,3811,3767,-3769,3799,3793,3794,-3811,3800,3796,3793,-3800,3803,3798,3796,-3801,3777,3798,3803,-3787,3805,3810,3794,-3809,3756,3805,3808,-3762,3787,3768,3813,-3813,3736,3814,3813,-3769,3815,3818,3817,-3817,3819,3817,3818,-3821,3821,3819,3820,-3823,3823,3821,3822,-3825,3816,3826,\n3825,-3816,3827,3830,3829,-3829,3831,3829,3830,-3833,3833,3831,3832,-3835,3824,3833,3834,-3824,3835,3836,3827,-3829,3817,3838,3837,-3817,3819,3839,3838,-3818,3821,3840,3839,-3820,3841,3840,3821,-3824,3842,3843,3816,-3838,3844,3845,3830,-3828,3832,3830,3845,-3847,3834,3832,3846,-3848,3834,3847,3841,-3824,3827,3849,3848,-3845,3815,3851,3850,-3819,3820,3818,3850,-3853,3822,3820,3852,-3854,3824,3822,3853,-3855,3855,3857,3856,-3827,3825,3858,3851,-3816,3829,3860,3859,-3829,3831,3861,3860,-3830,3833,3862,3861,-3832,3824,3854,3862,-3834,3828,3859,3863,-3836,3836,3835,3863,-3865,3836,3864,3866,-3866,3837,3838,3868,-3868,3839,3869,3868,-3839,3840,3870,3869,-3840,3841,3871,3870,-3841,3855,3843,3872,-3858,3842,3837,3867,-3874,3845,3844,3875,-3875,3846,3845,3874,-3877,3847,3846,3876,-3878,3847,3877,3871,-3842,3844,3848,3878,-3876,3848,3849,3879,-3879,3849,3865,3866,-3880,3826,3856,3858,-3826,3843,3842,3873,-3873,3851,3712,3713,-3851,3713,3716,3852,-3851,3852,3716,3718,-3854,3718,3720,3854,-3854,3857,3880,3814,-3857,3737,3712,3851,-3859,3860,3739,3740,-3860,3861,3743,3739,-3861,3862,3746,3743,-3862,3854,3720,3746,-3863,3859,3740,3764,-3864,3863,3764,3763,-3865,3763,3881,3866,-3865,3770,3771,3867,-3869,3774,3770,3868,-3870,3776,3774,3869,-3871,3871,3778,3776,-3871,3812,3880,3857,-3873,3867,3771,3788,-3874,3875,3791,3792,-3875,3792,3795,3876,-3875,3876,3795,3797,-3878,3877,3797,3778,-3872,3809,3791,3875,-3879,3807,3809,3878,-3880,3866,3881,3807,-3880,3814,3737,3858,-3857,3873,3788,3812,-3873,3730,3731,3790,-3781,3731,3732,3766,-3768,3811,3790,3731,-3768,3813,3814,-3881,3765,3754,-3756,3762,3763,-3765,3760,3881,-3764,3813,3880,-3813,3810,3805,-3807,3808,3809,-3808,3760,3807,-3882,3814,3736,-3738,3787,3812,-3789,3827,3836,-3866,3865,3849,-3828,3843,3855,-3817,3816,3855,-3827,3738,3766,-3733,3790,3811,-3790,3882,3883,3884,-3886,3883,3886,3887,-3885,3886,3888,3889,-3888,3888,3890,3891,-3890,3892,3893,3894,-3896,3893,3896,3897,-3895,3896,3898,3899,-3898,3895,3900,3901,-3903,3900,3895,3894,-3904,3903,3894,3897,-3905,3904,3897,3899,-3906,\n3906,3907,3882,-3886,3908,3892,3895,-3903,3909,3910,3911,-3913,3913,3909,3912,-3915,3913,3914,3915,-3917,3890,3916,3915,-3892,3917,3918,3919,-3921,3920,3919,3921,-3923,3922,3921,3899,-3899,3923,3924,3925,-3927,3919,3918,3927,-3929,3921,3919,3928,-3930,3899,3921,3929,-3906,3930,3931,3932,-3934,3932,3911,3910,-3935,3935,3924,3918,-3918,3918,3924,3923,-3928,3908,3885,3884,-3893,3893,3892,3884,-3888,3896,3893,3887,-3890,3898,3896,3889,-3892,3885,3908,3936,-3907,3906,3936,3937,-3939,3935,3917,3912,-3912,3917,3920,3914,-3913,3920,3922,3915,-3915,3922,3898,3891,-3916,3911,3932,3925,-3936,3932,3931,3926,-3926,3939,3940,3941,-3943,3940,3939,3943,-3945,3944,3943,3945,-3947,3946,3945,3947,-3949,3949,3950,3951,-3953,3952,3951,3953,-3955,3954,3953,3955,-3957,3951,3950,3900,-3904,3953,3951,3903,-3905,3955,3953,3904,-3906,3957,3942,3941,-3959,3959,3960,3950,-3950,3961,3962,3963,-3965,3962,3965,3966,-3964,3965,3967,3968,-3967,3967,3948,3947,-3969,3969,3970,3971,-3973,3970,3973,3974,-3972,3974,3973,3956,-3956,3975,3976,3923,-3927,3972,3971,3928,-3928,3971,3974,3929,-3929,3929,3974,3955,-3906,3931,3930,3977,-3979,3978,3979,3961,-3965,3980,3969,3972,-3977,3976,3972,3927,-3924,3942,3959,3949,-3940,3939,3949,3952,-3944,3943,3952,3954,-3946,3945,3954,3956,-3948,3942,3957,3981,-3960,3957,3938,3937,-3982,3969,3980,3964,-3964,3970,3969,3963,-3967,3973,3970,3966,-3969,3947,3956,3973,-3969,3975,3978,3964,-3981,3926,3931,3978,-3976,3957,3982,3983,-3939,3906,3938,3983,-3985,3985,3986,3987,-3989,3989,3990,3988,-3988,3991,3992,3990,-3990,3993,3994,3992,-3992,3986,3985,3995,-3997,3997,3998,3999,-4001,4001,4002,4000,-4000,4003,4004,4002,-4002,3994,3993,4004,-4004,4005,3998,3997,-4007,3987,3986,4007,-4009,3989,3987,4008,-4010,3991,3989,4009,-4011,4011,3993,3991,-4011,4012,4007,3986,-4014,4014,3997,4000,-4016,4002,4016,4015,-4001,4004,4017,4016,-4003,4004,3993,4011,-4018,3997,4014,4018,-4020,3985,3988,4020,-4022,3990,4022,4020,-3989,3992,4023,4022,-3991,3994,4024,4023,-3993,4025,3996,4026,-4028,3995,3985,4021,-4029,3999,3998,4029,-4031,4001,3999,4030,\n-4032,4003,4001,4031,-4033,3994,4003,4032,-4025,3998,4005,4033,-4030,4006,4034,4033,-4006,4006,4035,4036,-4035,4007,4037,4038,-4009,4009,4008,4038,-4040,4010,4009,4039,-4041,4011,4010,4040,-4042,4025,4027,4042,-4014,4012,4043,4037,-4008,4015,4044,4045,-4015,4016,4046,4044,-4016,4017,4047,4046,-4017,4017,4011,4041,-4048,4014,4045,4048,-4019,4018,4048,4049,-4020,4019,4049,4036,-4036,3996,3995,4028,-4027,4013,4042,4043,-4013,4021,4020,3883,-3883,3883,4020,4022,-3887,4022,4023,3888,-3887,3888,4023,4024,-3891,4027,4026,3984,-4051,3907,4028,4021,-3883,4030,4029,3910,-3910,4031,4030,3909,-3914,4032,4031,3913,-3917,4024,4032,3916,-3891,4029,4033,3934,-3911,4033,4034,3933,-3935,3933,4034,4036,-4052,3940,4038,4037,-3942,3944,4039,4038,-3941,3946,4040,4039,-3945,4041,4040,3946,-3949,3982,4042,4027,-4051,4037,4043,3958,-3942,4045,4044,3962,-3962,3962,4044,4046,-3966,4046,4047,3967,-3966,4047,4041,3948,-3968,3979,4048,4045,-3962,3977,4049,4048,-3980,4036,4049,3977,-4052,3984,4026,4028,-3908,4043,4042,3982,-3959,3900,3950,3960,-3902,3901,3937,3936,-3903,3981,3937,3901,-3961,3983,4050,-3985,3935,3925,-3925,3932,3934,-3934,3930,3933,-4052,3983,3982,-4051,3980,3976,-3976,3978,3977,-3980,3930,4051,-3978,3984,3907,-3907,3957,3958,-3983,3997,4035,-4007,4035,3997,-4020,4013,3986,-4026,3986,3996,-4026,3908,3902,-3937,3960,3959,-3982,4052,4053,4054,-4056,4053,4056,4057,-4055,4056,4058,4059,-4058,4058,4060,4061,-4060,4062,4056,4053,-4064,4064,4058,4056,-4063,4065,4060,4058,-4065,4066,4067,4068,-4070,4070,4071,4062,-4064,4071,4072,4064,-4063,4072,4073,4065,-4065,4074,4075,4071,-4071,4075,4076,4072,-4072,4076,4077,4073,-4073,4082,4083,4067,-4067,4055,4082,4066,-4053,4063,4053,4052,-4070,4068,4070,4063,-4070,4081,4080,4084,-4086,4086,4087,4088,-4090,4090,4091,4089,-4089,4092,4093,4091,-4091,4094,4095,4093,-4093,4096,4097,4089,-4092,4098,4096,4091,-4094,4099,4098,4093,-4096,4100,4101,4102,-4104,4096,4104,4105,-4098,4098,4106,4104,-4097,4099,4107,4106,-4099,4104,4075,4074,-4106,4106,4076,4075,-4105,4107,4077,4076,-4107,4108,4109,4080,-4080,4110,\n4111,4102,-4102,4102,4112,4087,-4087,4097,4103,4086,-4090,4097,4105,4100,-4104,4084,4080,4109,-4114,4114,4115,4083,-4117,4114,4116,4117,-4111,4085,4118,4119,-4082,4085,4084,4120,-4119,4113,4121,4120,-4085,4113,4109,4122,-4122,4108,4110,4101,-4110,4108,4079,4114,-4111,4078,4081,4067,-4116,4118,4070,4068,-4120,4074,4070,4118,-4121,4100,4105,4121,-4123,4121,4105,4074,-4121,4123,4124,4125,-4127,4127,4128,4126,-4126,4129,4130,4128,-4128,4061,4060,4130,-4130,4131,4132,4126,-4129,4133,4131,4128,-4131,4065,4133,4130,-4061,4134,4135,4136,-4138,4131,4138,4139,-4133,4133,4140,4138,-4132,4065,4073,4140,-4134,4138,4141,4142,-4140,4140,4143,4141,-4139,4073,4077,4143,-4141,4144,4145,4146,-4148,4136,4135,4148,-4150,4124,4123,4136,-4151,4132,4137,4123,-4127,4132,4139,4134,-4138,4151,4146,4145,-4153,4153,4154,4155,-4157,4154,4157,4158,-4156,4157,4159,4160,-4159,4159,4095,4094,-4161,4161,4157,4154,-4163,4163,4159,4157,-4162,4099,4095,4159,-4164,4164,4165,4166,-4168,4168,4169,4161,-4163,4169,4170,4163,-4162,4170,4107,4099,-4164,4142,4141,4169,-4169,4141,4143,4170,-4170,4143,4077,4107,-4171,4171,4147,4146,-4173,4173,4165,4164,-4175,4164,4153,4156,-4176,4162,4154,4153,-4168,4166,4168,4162,-4168,4172,4146,4151,-4177,4177,4148,4178,-4180,4180,4179,4178,-4174,4152,4145,4181,-4183,4183,4151,4152,-4183,4176,4151,4183,-4185,4185,4172,4176,-4185,4165,4173,4171,-4173,4178,4147,4171,-4174,4148,4144,4147,-4179,4144,4148,4135,-4146,4134,4139,4182,-4182,4142,4183,4182,-4140,4166,4185,4184,-4169,4142,4168,4184,-4184,4186,4187,4188,-4190,4187,4190,4191,-4189,4191,4190,4192,-4194,4193,4192,4194,-4196,4188,4191,4196,-4198,4191,4193,4198,-4197,4193,4195,4199,-4199,4189,4197,4200,-4202,4189,4201,4202,-4187,4203,4204,4205,-4207,4204,4203,4207,-4209,4209,4208,4207,-4211,4211,4209,4210,-4213,4203,4197,4196,-4208,4207,4196,4198,-4211,4210,4198,4199,-4213,4213,4197,4206,-4215,4215,4214,4206,-4206,4216,4217,4218,-4220,4217,4216,4220,-4222,4222,4221,4220,-4224,4194,4222,4223,-4196,4216,4224,4225,-4221,4220,4225,4226,-4224,4223,4226,4199,-4196,4227,4224,4219,-4229,\n4229,4228,4219,-4219,4230,4231,4232,-4234,4231,4234,4235,-4233,4235,4234,4236,-4238,4237,4236,4211,-4213,4232,4235,4225,-4225,4225,4235,4237,-4227,4237,4212,4199,-4227,4238,4239,4233,-4225,4240,4230,4233,-4240,4187,4186,4241,-4243,4190,4187,4242,-4244,4192,4190,4243,-4245,4194,4192,4244,-4246,4186,4202,4246,-4242,4202,4201,4247,-4247,4205,4204,4248,-4250,4208,4250,4248,-4205,4208,4209,4251,-4251,4209,4211,4252,-4252,4205,4249,4253,-4216,4215,4253,4254,-4215,4200,4255,4256,-4258,4200,4257,4247,-4202,4255,4213,4258,-4257,4213,4214,4254,-4259,4218,4217,4259,-4261,4221,4261,4259,-4218,4221,4222,4262,-4262,4222,4194,4245,-4263,4218,4260,4263,-4230,4229,4263,4264,-4229,4231,4230,4265,-4267,4234,4231,4266,-4268,4236,4234,4267,-4269,4211,4236,4268,-4253,4230,4240,4269,-4266,4240,4239,4270,-4270,4271,4227,4272,-4274,4227,4228,4264,-4273,4238,4271,4273,-4275,4238,4274,4270,-4240,4054,4242,4241,-4056,4057,4243,4242,-4055,4059,4244,4243,-4058,4061,4245,4244,-4060,4241,4246,4082,-4056,4246,4247,4275,-4083,4087,4249,4248,-4089,4088,4248,4250,-4091,4090,4250,4251,-4093,4092,4251,4252,-4095,4112,4253,4249,-4088,4111,4254,4253,-4113,4083,4257,4256,-4117,4275,4247,4257,-4084,4256,4258,4117,-4117,4258,4254,4111,-4118,4124,4260,4259,-4126,4125,4259,4261,-4128,4127,4261,4262,-4130,4129,4262,4245,-4062,4150,4263,4260,-4125,4149,4264,4263,-4151,4155,4266,4265,-4157,4158,4267,4266,-4156,4160,4268,4267,-4159,4094,4252,4268,-4161,4265,4269,4175,-4157,4269,4270,4174,-4176,4273,4272,4177,-4180,4272,4264,4149,-4178,4180,4274,4273,-4180,4174,4270,4274,-4181,4052,4066,-4070,4082,4275,-4084,4115,4067,-4084,4086,4103,-4103,4102,4111,-4113,4111,4110,-4118,4109,4101,-4123,4067,4081,-4120,4067,4119,-4069,4122,4101,-4101,4123,4137,-4137,4136,4149,-4151,4153,4164,-4168,4164,4175,-4175,4148,4177,-4150,4174,4180,-4174,4172,4185,-4166,4135,4181,-4146,4135,4134,-4182,4185,4166,-4166,4188,4197,-4190,4197,4203,-4207,4197,4255,-4201,4255,4197,-4214,4224,4216,-4220,4232,4224,-4234,4224,4227,-4272,4271,4238,-4225,4276,4277,4344,-4346,4279,4278,4280,-4282,4281,\n4280,4282,-4284,4283,4282,4284,-4286,4285,4284,4286,-4288,4287,4286,4288,-4290,4289,4288,4290,-4292,4347,4348,4292,-4294,4293,4292,4294,-4296,4295,4294,4296,-4298,4297,4296,4298,-4300,4299,4298,4277,-4277,4277,4300,4343,-4345,4278,4301,4302,-4281,4280,4302,4303,-4283,4282,4303,4304,-4285,4284,4304,4305,-4287,4286,4305,4306,-4289,4288,4306,4307,-4291,4348,4349,4308,-4293,4292,4308,4309,-4295,4294,4309,4310,-4297,4296,4310,4311,-4299,4298,4311,4300,-4278,4301,4313,4314,-4303,4302,4314,4315,-4304,4303,4315,4316,-4305,4304,4316,4317,-4306,4305,4317,4318,-4307,4306,4318,4319,-4308,4307,4319,-4321,4312,4324,4325,-4314,4313,4325,4326,-4315,4314,4326,4327,-4316,4315,4327,4328,-4317,4316,4328,4329,-4318,4317,4329,4330,-4319,4318,4330,4331,-4320,4319,4331,4332,-4321,4320,4332,4333,-4322,4321,4333,4334,-4323,4322,4334,4335,-4324,4323,4335,4324,-4313,4336,4279,-4282,4336,4281,-4284,4336,4283,-4286,4336,4285,-4288,4336,4287,-4290,4336,4289,-4292,4346,4347,4293,-4338,4346,4337,4276,-4346,4337,4293,4295,-4298,4276,4337,4297,-4300,4312,4313,-4302,4338,4312,4301,-4279,4339,4338,4278,-4280,4336,4340,4339,-4280,4336,4291,4341,-4341,4291,4290,4342,-4342,4290,4307,4320,-4343,4344,4343,4312,-4339,4345,4344,4338,-4340,4340,4346,4345,-4340,4340,4341,4347,-4347,4341,4342,4348,-4348,4342,4320,4349,-4349,4430,4415,4416,-4430,4351,4354,4355,-4353,4354,4356,4357,-4356,4356,4358,4359,-4358,4358,4360,4361,-4360,4360,4362,4363,-4362,4362,4364,4365,-4364,4413,4422,4423,-4413,4366,4368,4369,-4368,4368,4370,4371,-4370,4370,4372,4373,-4372,4372,4350,4353,-4374,4428,4429,4416,-4387,4352,4355,4376,-4375,4355,4357,4377,-4377,4357,4359,4378,-4378,4359,4361,4379,-4379,4361,4363,4380,-4380,4363,4365,4381,-4381,4394,4412,4423,-4425,4367,4369,4383,-4383,4369,4371,4384,-4384,4371,4373,4385,-4385,4373,4353,4375,-4386,4374,4376,4388,-4388,4376,4377,4389,-4389,4377,4378,4390,-4390,4378,4379,4391,-4391,4379,4380,4392,-4392,4380,4381,4393,-4393,4381,4394,-4394,4382,4383,-4421,4383,4384,4419,-4421,4384,4385,4418,-4420,4385,4375,-4419,4386,4387,4398,-4400,4387,4388,\n4400,-4399,4388,4389,4401,-4401,4389,4390,4402,-4402,4390,4391,4403,-4403,4391,4392,4404,-4404,4392,4393,4405,-4405,4393,4394,4406,-4406,4394,4395,4407,-4407,4395,4396,4408,-4408,4396,4397,4409,-4409,4397,4386,4399,-4410,4410,4354,-4352,4410,4356,-4355,4410,4358,-4357,4410,4360,-4359,4410,4362,-4361,4410,4364,-4363,4368,4366,4417,-4371,4372,4370,4417,-4351,4399,4398,-4412,4398,4400,-4412,4400,4401,-4412,4401,4402,-4412,4402,4403,-4412,4403,4404,-4412,4404,4405,-4412,4405,4406,-4412,4406,4407,-4412,4407,4408,-4412,4408,4409,-4412,4409,4399,-4412,4386,4374,-4388,4381,4365,4412,-4395,4364,4413,4412,-4366,4414,4413,4364,-4411,4415,4414,4410,-4352,4416,4415,4351,-4353,4386,4416,4352,-4375,4421,4422,4413,-4415,4430,4421,4414,-4416,4427,4428,4386,-4398,4426,4427,4397,-4397,4425,4426,4396,-4396,4424,4425,4395,-4395,4417,4366,4422,-4422,4423,4422,4366,-4368,4424,4423,4367,-4383,4382,4420,4425,-4425,4420,4419,4426,-4426,4419,4418,4427,-4427,4418,4375,4428,-4428,4375,4353,4429,-4429,4350,4430,4429,-4354,4350,4417,4421,-4431,4431,4432,4433,-4435,4432,4435,4436,-4434,4435,4437,4438,-4437,4437,4439,4440,-4439,4439,4441,4442,-4441,4442,4441,4443,-4445,4441,4445,4446,-4444,4441,4439,4447,-4446,4439,4437,4448,-4448,4437,4435,4449,-4449,4435,4432,4450,-4450,4432,4431,4451,-4451,4444,4443,4458,-4458,4443,4446,4459,-4459,4446,4445,4460,-4460,4445,4447,4461,-4461,4447,4448,4462,-4462,4448,4449,4463,-4463,4449,4450,4464,-4464,4457,4458,4465,-4457,4459,4460,4465,-4459,4460,4461,4466,-4466,4461,4462,4467,-4467,4462,4463,4468,-4468,4463,4464,4469,-4469,4465,4466,4455,-4457,4466,4467,4454,-4456,4467,4468,4453,-4455,4468,4469,4452,-4454,4470,4471,4472,-4474,4472,4474,4475,-4474,4474,4476,4477,-4476,4477,4476,4478,-4480,4479,4478,4480,-4482,4481,4480,4471,-4471,4482,4483,4484,-4486,4484,4483,4486,-4488,4487,4486,4488,-4490,4488,4490,4491,-4490,4490,4492,4493,-4492,4492,4482,4485,-4494,4494,4495,4496,-4498,4497,4496,4498,-4500,4498,4500,4501,-4500,4500,4502,4503,-4502,4502,4504,4505,-4504,4504,4495,4494,-4506,4506,4507,4508,-4510,4508,4510,4511,\n-4510,4510,4512,4513,-4512,4512,4514,4515,-4514,4515,4514,4516,-4518,4516,4507,4506,-4518,4518,4519,4520,-4522,4520,4519,4522,-4524,4523,4522,4524,-4526,4524,4526,4527,-4526,4526,4528,4529,-4528,4528,4518,4521,-4530,4530,4531,4532,-4534,4532,4531,4534,-4536,4535,4534,4536,-4538,4536,4538,4539,-4538,4538,4540,4541,-4540,4540,4530,4533,-4542,4542,4543,4544,-4546,4546,4543,4542,-4548,4548,4546,4547,-4550,4550,4548,4549,-4552,4552,4553,4550,-4552,4545,4544,4553,-4553,4554,4555,4556,-4558,4557,4558,4559,-4555,4521,4520,4560,-4562,4520,4523,4562,-4561,4523,4525,4563,-4563,4525,4527,4564,-4564,4564,4527,4529,-4566,4529,4521,4561,-4566,4560,4531,4530,-4562,4562,4534,4531,-4561,4563,4536,4534,-4563,4538,4536,4563,-4565,4540,4538,4564,-4566,4561,4530,4540,-4566,4470,4473,4566,-4568,4473,4475,4568,-4567,4568,4475,4477,-4570,4569,4477,4479,-4571,4570,4479,4481,-4572,4481,4470,4567,-4572,4572,4485,4484,-4574,4566,4483,4482,-4568,4484,4487,4574,-4574,4568,4486,4483,-4567,4487,4489,4575,-4575,4569,4488,4486,-4569,4489,4491,4576,-4576,4490,4488,4569,-4571,4576,4491,4493,-4578,4492,4490,4570,-4572,4493,4485,4572,-4578,4567,4482,4492,-4572,4578,4494,4497,-4580,4573,4496,4495,-4573,4497,4499,4580,-4580,4574,4498,4496,-4574,4499,4501,4581,-4581,4575,4500,4498,-4575,4501,4503,4582,-4582,4502,4500,4575,-4577,4582,4503,4505,-4584,4504,4502,4576,-4578,4505,4494,4578,-4584,4495,4504,4577,-4573,4506,4509,4584,-4586,4579,4508,4507,-4579,4509,4511,4586,-4585,4580,4510,4508,-4580,4511,4513,4587,-4587,4581,4512,4510,-4581,4587,4513,4515,-4589,4514,4512,4581,-4583,4588,4515,4517,-4590,4516,4514,4582,-4584,4517,4506,4585,-4590,4507,4516,4583,-4579,4584,4519,4518,-4586,4586,4522,4519,-4585,4587,4524,4522,-4587,4526,4524,4587,-4589,4528,4526,4588,-4590,4518,4528,4589,-4586,4590,4472,4471,-4592,4592,4474,4472,-4591,4476,4474,4592,-4594,4478,4476,4593,-4595,4480,4478,4594,-4596,4591,4471,4480,-4596,4596,4542,4545,-4598,4544,4543,4590,-4592,4598,4547,4542,-4597,4543,4546,4592,-4591,4599,4549,4547,-4599,4546,4548,4593,-4593,4551,4549,4599,-4601,4593,4548,\n4550,-4595,4552,4551,4600,-4602,4594,4550,4553,-4596,4597,4545,4552,-4602,4553,4544,4591,-4596,4597,4602,4556,-4597,4556,4555,4598,-4597,4555,4603,4599,-4599,4603,4559,4600,-4600,4600,4559,4558,-4602,4601,4558,4602,-4598,4604,4605,4606,-4608,4606,4605,4608,-4610,4609,4608,4610,-4612,4610,4612,4613,-4612,4612,4614,4615,-4614,4614,4604,4607,-4616,4616,4617,4618,-4620,4618,4620,4621,-4620,4620,4622,4623,-4622,4623,4622,4624,-4626,4625,4624,4626,-4628,4627,4626,4617,-4617,4628,4629,4630,-4632,4629,4632,4633,-4631,4633,4632,4634,-4636,4635,4634,4636,-4638,4637,4636,4638,-4640,4639,4638,4628,-4632,4640,4641,4642,-4644,4642,4641,4644,-4646,4645,4644,4646,-4648,4647,4646,4648,-4650,4648,4650,4651,-4650,4651,4650,4640,-4644,4652,4653,4654,-4656,4654,4656,4657,-4656,4656,4658,4659,-4658,4659,4658,4660,-4662,4661,4660,4662,-4664,4663,4662,4653,-4653,4664,4533,4532,-4666,4532,4535,4666,-4666,4535,4537,4667,-4667,4667,4537,4539,-4669,4668,4539,4541,-4670,4669,4541,4533,-4665,4670,4671,4672,-4674,4674,4675,4670,-4674,4676,4677,4675,-4675,4678,4679,4677,-4677,4680,4679,4678,-4682,4671,4680,4681,-4673,4682,4683,4684,-4686,4683,4682,4686,-4688,4653,4688,4689,-4655,4654,4689,4690,-4657,4656,4690,4691,-4659,4658,4691,4692,-4661,4692,4693,4662,-4661,4662,4693,4688,-4654,4689,4688,4664,-4666,4690,4689,4665,-4667,4691,4690,4666,-4668,4668,4692,4691,-4668,4669,4693,4692,-4669,4688,4693,4669,-4665,4604,4694,4695,-4606,4605,4695,4696,-4609,4696,4697,4610,-4609,4697,4698,4612,-4611,4698,4699,4614,-4613,4614,4699,4694,-4605,4700,4701,4618,-4618,4695,4694,4616,-4620,4618,4701,4702,-4621,4696,4695,4619,-4622,4620,4702,4703,-4623,4697,4696,4621,-4624,4622,4703,4704,-4625,4625,4698,4697,-4624,4704,4705,4626,-4625,4627,4699,4698,-4626,4626,4705,4700,-4618,4694,4699,4627,-4617,4706,4707,4629,-4629,4701,4700,4631,-4631,4629,4707,4708,-4633,4702,4701,4630,-4634,4632,4708,4709,-4635,4703,4702,4633,-4636,4634,4709,4710,-4637,4637,4704,4703,-4636,4710,4711,4638,-4637,4639,4705,4704,-4638,4638,4711,4706,-4629,4631,4700,4705,-4640,4640,4712,4713,-4642,4707,\n4706,4643,-4643,4641,4713,4714,-4645,4708,4707,4642,-4646,4644,4714,4715,-4647,4709,4708,4645,-4648,4715,4716,4648,-4647,4649,4710,4709,-4648,4716,4717,4650,-4649,4651,4711,4710,-4650,4650,4717,4712,-4641,4643,4706,4711,-4652,4713,4712,4652,-4656,4714,4713,4655,-4658,4715,4714,4657,-4660,4661,4716,4715,-4660,4663,4717,4716,-4662,4652,4712,4717,-4664,4718,4719,4607,-4607,4720,4718,4606,-4610,4611,4721,4720,-4610,4613,4722,4721,-4612,4615,4723,4722,-4614,4719,4723,4615,-4608,4724,4725,4671,-4671,4672,4719,4718,-4674,4726,4724,4670,-4676,4673,4718,4720,-4675,4727,4726,4675,-4678,4674,4720,4721,-4677,4679,4728,4727,-4678,4721,4722,4678,-4677,4680,4729,4728,-4680,4722,4723,4681,-4679,4725,4729,4680,-4672,4681,4723,4719,-4673,4725,4724,4684,-4731,4684,4724,4726,-4686,4685,4726,4727,-4732,4731,4727,4728,-4687,4728,4729,4687,-4687,4729,4725,4730,-4688,4602,4557,-4557,4555,4554,-4604,4603,4554,-4560,4558,4557,-4603,4730,4684,-4684,4685,4731,-4683,4731,4686,-4683,4687,4730,-4684,4732,4733,4734,-4736,4733,4736,4737,-4735,4736,4738,4739,-4738,4738,4740,4741,-4740,4740,4742,4743,-4742,4742,4744,4745,-4744,4744,4746,4747,-4746,4746,4748,4749,-4748,4748,4750,4751,-4750,4750,4752,4753,-4752,4752,4754,4755,-4754,4754,4732,4735,-4756,4735,4734,4756,-4758,4734,4737,4758,-4757,4737,4739,4759,-4759,4739,4741,4760,-4760,4741,4743,4761,-4761,4743,4745,4762,-4762,4745,4747,4763,-4763,4747,4749,4764,-4764,4749,4751,4765,-4765,4751,4753,4766,-4766,4753,4755,4767,-4767,4755,4735,4757,-4768,4757,4756,4768,-4770,4756,4758,4770,-4769,4758,4759,4771,-4771,4759,4760,4772,-4772,4760,4761,4773,-4773,4761,4762,4774,-4774,4762,4763,4775,-4775,4763,4764,4776,-4776,4764,4765,4777,-4777,4765,4766,4778,-4778,4766,4767,4779,-4779,4767,4757,4769,-4780,4780,4733,-4733,4780,4736,-4734,4780,4738,-4737,4780,4740,-4739,4780,4742,-4741,4780,4744,-4743,4780,4746,-4745,4780,4748,-4747,4780,4750,-4749,4780,4752,-4751,4780,4754,-4753,4780,4732,-4755,4769,4768,-4782,4768,4770,-4782,4770,4771,-4782,4771,4772,-4782,4772,4773,-4782,4773,4774,-4782,4774,4775,-4782,4775,\n4776,-4782,4776,4777,-4782,4777,4778,-4782,4778,4779,-4782,4779,4769,-4782,4782,4783,4784,-4786,4783,4786,4787,-4785,4786,4788,4789,-4788,4788,4790,4791,-4790,4790,4792,4793,-4792,4792,4794,4795,-4794,4794,4796,4797,-4796,4796,4798,4799,-4798,4798,4800,4801,-4800,4800,4802,4803,-4802,4802,4804,4805,-4804,4804,4782,4785,-4806,4785,4784,4806,-4808,4784,4787,4808,-4807,4787,4789,4809,-4809,4789,4791,4810,-4810,4791,4793,4811,-4811,4793,4795,4812,-4812,4795,4797,4813,-4813,4797,4799,4814,-4814,4799,4801,4815,-4815,4801,4803,4816,-4816,4803,4805,4817,-4817,4805,4785,4807,-4818,4807,4806,4818,-4820,4806,4808,4820,-4819,4808,4809,4821,-4821,4809,4810,4822,-4822,4810,4811,4823,-4823,4811,4812,4824,-4824,4812,4813,4825,-4825,4813,4814,4826,-4826,4814,4815,4827,-4827,4815,4816,4828,-4828,4816,4817,4829,-4829,4817,4807,4819,-4830,4830,4783,-4783,4830,4786,-4784,4830,4788,-4787,4830,4790,-4789,4830,4792,-4791,4830,4794,-4793,4830,4796,-4795,4830,4798,-4797,4830,4800,-4799,4830,4802,-4801,4830,4804,-4803,4830,4782,-4805,4819,4818,-4832,4818,4820,-4832,4820,4821,-4832,4821,4822,-4832,4822,4823,-4832,4823,4824,-4832,4824,4825,-4832,4825,4826,-4832,4826,4827,-4832,4827,4828,-4832,4828,4829,-4832,4829,4819,-4832,4832,4833,4834,-4836,4832,4836,4837,-4834,4838,4839,4836,-4841,4838,4841,4842,-4840,4838,4840,4843,-4842,4844,4845,4846,-4848,4844,4832,4848,-4846,4844,4840,4836,-4833,4844,4847,4843,-4841,4839,4842,4849,-4851,4839,4850,4837,-4837,4851,4852,4853,-4855,4851,4855,4856,-4853,4851,4841,4843,-4856,4851,4854,4842,-4842,4857,4858,4856,-4856,4857,4859,4860,-4859,4857,4847,4846,-4860,4857,4855,4843,-4848,4854,4853,4861,-4863,4854,4862,4849,-4843,4852,4863,4864,-4854,4852,4856,4865,-4864,4858,4866,4865,-4857,4858,4860,4867,-4867,4853,4864,4868,-4862,4869,4870,4871,-4873,4873,4874,4870,-4870,4873,4875,4876,-4875,4877,4878,4876,-4876,4877,4879,4880,-4879,4879,4881,4882,-4881,4848,4835,4883,-4885,4835,4834,4885,-4884,4845,4886,4887,-4847,4845,4848,4884,-4887,4859,4888,4889,-4861,4859,4846,4887,-4889,4860,4889,4890,-4868,4891,4892,4893,\n-4895,4895,4896,4897,-4899,4895,4899,4882,-4897,4895,4898,4890,-4900,4900,4901,4864,-4864,4900,4902,4903,-4905,4900,4863,4865,-4903,4905,4902,4865,-4867,4905,4894,4903,-4903,4905,4866,4867,-4907,4901,4907,4868,-4865,4901,4904,4908,-4908,4909,4896,4882,-4882,4909,4910,4897,-4897,4911,4912,4871,-4871,4911,4884,4883,-4913,4912,4913,4914,-4872,4912,4883,4885,-4914,4915,4916,4887,-4887,4915,4874,4876,-4917,4915,4911,4870,-4875,4915,4886,4884,-4912,4917,4918,4889,-4889,4917,4878,4880,-4919,4917,4916,4876,-4879,4917,4888,4887,-4917,4918,4899,4890,-4890,4918,4880,4882,-4900,4919,4898,4897,-4892,4919,4867,4890,-4899,4920,4921,4922,-4924,4920,4924,4925,-4922,4920,4926,4927,-4925,4924,4928,4929,-4926,4924,4927,4930,-4929,4921,4931,4932,-4923,4921,4925,4933,-4932,4925,4929,4934,-4934,4934,4929,4935,-4937,4928,4937,4935,-4930,4833,4837,4923,-4923,4862,4926,4923,-4850,4862,4861,4927,-4927,4861,4868,4930,-4928,4938,4939,4940,-4942,4942,4943,4944,-4946,4944,4941,4940,-4946,4946,4947,4939,-4939,4946,4948,4949,-4948,4950,4951,4949,-4949,4950,4952,4953,-4952,4952,4954,4955,-4954,4834,4922,4932,-4886,4892,4936,4935,-4894,4893,4935,4937,-4909,4907,4908,4937,-4931,4913,4932,4956,-4915,4957,4958,4943,-4943,4869,4872,4940,-4940,4959,4945,4940,-4873,4959,4960,4942,-4946,4873,4947,4949,-4876,4873,4869,4939,-4948,4877,4951,4953,-4880,4877,4875,4949,-4952,4879,4953,4955,-4882,4961,4962,4910,-4910,4961,4909,4881,-4956,4963,4957,4942,-4961,4959,4872,4871,-4915,4963,4960,4959,-4915,4963,4914,4956,-4958,4897,4910,-4892,4910,4892,-4892,4893,4904,-4904,4893,4903,-4895,4908,4904,-4894,4867,4919,-4907,4894,4906,-4892,4891,4906,-4920,4904,4901,-4901,4906,4894,-4906,4923,4926,-4921,4930,4937,-4929,4922,4834,-4834,4923,4837,-4851,4923,4850,-4850,4957,4956,-4959,4930,4868,-4908,4885,4932,-4914,4835,4848,-4833,4943,4958,4956,4932,4931,4948,4946,4938,4941,-4945,4954,4934,4936,-4893,4950,4948,4931,4933,4934,4954,-4953,4964,4965,4966,-4968,4968,4969,4966,-4966,4970,4971,4972,-4974,4974,4975,4976,-4978,4975,4978,4979,-4977,4978,4980,4981,-4980,4975,4982,4983,\n-4979,4984,4982,4975,-4975,4973,4985,4986,-4971,4965,4987,4988,-4969,4989,4987,4965,-4965,4967,4990,4991,-4965,4980,4992,4993,-4982,4983,4994,4992,-4981,4988,4987,4982,-4985,4992,4995,4996,-4994,4997,4995,4992,-4995,4998,4997,4994,-4983,4987,4999,4998,-4983,5000,4999,4989,-4992,4990,5001,5000,-4992,5002,5003,5004,-5006,5006,5007,5003,-5003,5008,5009,5004,-5004,5010,5008,5007,-4999,4999,5011,5010,-4999,5001,5012,5011,-5001,5013,5009,5008,-5011,5012,5013,5010,-5012,4968,4973,4972,-4970,4970,4974,4977,-4972,4974,4970,4986,-4985,4968,4988,4985,-4974,4995,5002,5005,-4997,4997,5006,5002,-4996,5007,5006,4997,-4999,4986,4985,4988,-4985,4978,4983,-4981,4964,4991,-4990,4983,4982,-4995,4987,4989,-5000,5003,5007,-5009,4999,5000,-5012,5017,5016,5014,-5016,5020,5019,5018,-5022,5024,5022,5023,-5026,5018,5027,5026,-5022,5027,5028,5029,-5027,5030,5017,5015,-5032,5032,5035,5033,-5035,5022,5035,5032,-5024,5033,5036,5037,-5035,5030,5031,5037,-5037,5014,5016,5019,-5021,5024,5025,5039,-5039,5026,5040,5041,-5022,5042,5043,5015,-5015,5044,5045,5023,-5033,5046,5047,5038,-5029,5048,5049,5016,-5018,5050,5051,5030,-5037,5052,5053,5034,-5038,5054,5055,5018,-5020,5030,5051,5056,5048,-5018,5057,5058,5022,-5025,5027,5018,5055,-5060,5020,5061,5060,5042,-5015,5062,5040,5026,-5030,5059,5046,5028,-5028,5033,5063,5050,-5037,5016,5049,5064,5054,-5020,5035,5065,5063,-5034,5058,5065,5035,-5023,5039,5025,5066,-5068,5024,5068,-5058,5023,5045,5069,-5026,5032,5034,5053,5070,-5045,5071,5052,5037,-5032,5072,5071,-5032,5073,5061,-5021,5029,5039,5067,-5063,5038,5039,5029,-5029,5038,5047,5068,-5025,5025,5069,-5067,5041,5073,5020,-5022,5074,5072,5031,-5016,5043,5074,-5016,5075,5076,5096,-5096,5076,5144,5145,-5097,5077,5078,5098,5097,5147,-5147,5078,5079,5099,-5099,5079,5080,5100,-5100,5080,5081,5101,-5101,5081,5082,5102,-5102,5082,5083,5103,-5103,5139,5136,5137,-5139,5087,5088,5108,-5108,5088,5089,5109,-5109,5089,5090,5110,-5110,5090,5091,5111,-5111,5091,5092,5112,-5112,5112,5092,5093,-5114,5150,5151,5152,-5154,5094,5075,5095,-5115,5095,5096,-5149,5147,5148,5096,\n-5146,5097,5098,5131,-5133,5098,5099,5130,-5132,5099,5100,5129,-5131,5100,5101,5128,-5130,5101,5102,5127,-5129,5102,5103,5126,-5128,5103,5104,5125,-5127,5104,5105,5124,-5126,5105,5106,5123,-5125,5122,5123,5106,5107,-5109,5108,5109,5121,-5123,5109,5110,5120,-5122,5110,5111,5119,-5121,5111,5112,5118,-5120,5112,5113,5117,-5119,5154,5155,5156,-5158,5114,5095,5115,-5117,5075,5094,5070,-5054,5159,5158,5160,-5162,5093,5092,5045,-5045,5092,5091,5069,-5046,5091,5090,5066,-5070,5090,5089,5067,-5067,5089,5088,5062,-5068,5088,5087,-5063,5087,5086,5040,-5063,5086,5085,5041,-5041,5085,5084,5073,-5042,5084,5083,5061,-5074,5083,5082,5042,-5062,5082,5081,5043,-5043,5081,5080,5074,-5044,5080,5079,5072,-5075,5079,5078,5071,-5073,5078,5077,5052,-5072,5077,5149,5053,-5053,5149,5075,-5054,5106,5105,5134,-5136,5105,5104,5136,-5135,5104,5103,5137,-5137,5103,5083,5138,-5138,5083,5084,5139,-5139,5084,5085,5140,-5140,5085,5086,5141,-5141,5086,5087,5142,-5142,5087,5107,5143,-5143,5107,5106,5135,-5144,5135,5141,5142,-5144,5140,5134,5136,-5140,5135,5134,5140,-5142,5149,5146,5144,-5077,5146,5147,5145,-5145,5148,5097,5132,-5134,5095,5148,5133,-5116,5076,5075,-5150,5077,5146,-5150,5097,5148,-5148,5158,5150,-5094,5094,5114,5152,-5152,5113,5093,5150,-5154,5153,5154,-5114,5114,5116,5156,-5156,5116,5117,5157,-5157,5117,5113,5154,-5158,5093,5044,5160,-5159,5044,5070,5161,-5161,5070,5094,5159,-5162,5094,5151,-5160,5159,5151,5150,-5159,5152,5155,5154,-5154,5114,5155,-5153,5162,5163,5178,-5178,5248,5249,5250,-5252,5164,5165,5180,-5180,5165,5166,5181,-5181,5166,5167,5182,-5182,5207,5168,5183,-5207,5168,5169,5184,-5184,5169,5212,5215,-5185,5170,5171,5186,-5186,5187,5172,5173,-5189,5230,5231,5232,-5234,5174,5175,5298,-5300,5243,5244,5245,-5247,5245,5177,-5248,5177,5178,5050,-5064,5252,5253,5254,-5256,5179,5180,5056,-5052,5180,5181,5048,-5057,5181,5182,5049,-5049,5054,5064,5206,-5184,5183,5184,5055,-5055,5055,5184,5215,5214,-5186,5185,5186,5059,-5056,5186,5187,-5060,5234,5235,5236,-5238,5189,5190,5057,-5069,5226,5228,5224,-5192,5176,5242,5192,-5163,5176,5227,\n5193,-5243,5175,5174,5195,5300,-5195,5239,5238,5240,-5242,5208,5172,-5198,5171,5170,5198,-5198,5170,5210,5211,-5199,5169,5168,5200,-5200,5200,5168,5207,-5210,5167,5166,5202,-5202,5166,5165,5203,-5203,5165,5164,5204,-5204,5257,5256,5258,-5260,5163,5162,5192,-5206,5058,5057,-5227,5167,5207,5206,-5183,5209,5207,5167,-5202,5187,5186,5171,-5173,5197,5172,-5172,5059,5187,-5047,5206,5064,5049,-5183,5047,5046,5187,-5189,5172,5208,5196,-5174,5210,5212,5213,-5212,5212,5169,5199,-5214,5214,5210,5170,-5186,5221,5220,5222,-5224,5215,5212,5216,-5218,5212,5210,5218,-5217,5210,5214,5219,-5219,5214,5215,5217,-5220,5217,5216,5220,-5222,5216,5218,5222,-5221,5218,5219,5223,-5223,5219,5217,5221,-5224,5260,5265,5266,5261,5224,-5229,5190,5228,5226,-5058,5175,5229,5262,-5299,5227,5229,5175,-5195,5238,5230,-5174,5174,5299,5297,5189,5232,-5232,5188,5173,5230,-5234,5233,5234,-5189,5189,5068,5236,-5236,5068,5047,5237,-5237,5047,5188,5234,-5238,5173,5196,5240,-5239,5196,5195,5241,-5241,5195,5174,5239,-5242,5174,5231,-5240,5232,5235,5234,-5234,5189,5235,-5233,5239,5231,5230,-5239,5227,5194,-5194,5225,5176,5244,-5244,5191,5224,5246,-5246,5224,5261,-5247,5191,5245,-5248,5065,5058,5226,5191,-5248,5227,5176,5225,-5230,5164,5249,-5258,5164,5179,5250,-5250,5178,5163,5248,-5252,5251,5252,-5179,5179,5051,5254,-5254,5051,5050,5255,-5255,5050,5178,5252,-5256,5163,5205,5258,-5257,5205,5204,5259,-5259,5204,5164,5257,-5260,5257,5249,5248,-5257,5256,5248,-5164,5179,5253,-5251,5250,5253,5252,-5252,5264,5265,-5261,5229,5225,5263,5269,5270,-5263,5266,5267,-5262,5269,5263,-5269,5262,5270,-5272,5288,5289,5290,5291,5292,5293,5294,-5296,5270,5269,5273,-5273,5269,5268,5274,-5274,5268,5267,5275,-5275,5267,5266,5276,-5276,5266,5265,5277,-5277,5265,5264,5278,-5278,5279,5278,5264,-5272,5271,5270,5272,-5280,5272,5273,5281,-5281,5273,5274,5282,-5282,5274,5275,5283,-5283,5275,5276,5284,-5284,5276,5277,5285,-5285,5277,5278,5286,-5286,5278,5279,5287,-5287,5279,5272,5280,-5288,5280,5281,5289,-5289,5281,5282,5290,-5290,5282,5283,5291,-5291,5283,5284,5292,-5292,5284,5285,5293,\n-5293,5285,5286,5294,-5294,5286,5287,5295,-5295,5287,5280,5288,-5296,5246,5261,5267,5268,5263,-5244,5243,5263,-5226,5296,5260,5228,-5191,5297,5296,5190,-5190,5298,5262,5271,5264,5260,-5297,5299,5298,5296,-5298,5063,5065,5247,-5178,5244,5176,-5163,5244,5162,5177,-5246,5320,5323,5322,-5322,5324,5327,5326,-5326,5301,5329,5328,-5303,5330,5333,5332,-5332,5335,5338,5337,-5337,5326,5327,5340,-5340,5327,5342,5341,-5341,5343,5346,5345,-5345,5347,5337,5338,-5349,5349,5352,5351,-5351,5339,5354,5353,-5327,5355,5354,5339,-5357,5346,5343,5332,-5358,5358,5362,5361,-5728,5359,5360,5364,-5364,5365,5368,5367,-5367,5360,5729,5728,-5365,5371,5374,5373,-5373,5360,5358,5727,-5730,5366,5370,5376,-5376,5349,5350,5378,-5378,5303,5380,5379,-5305,5381,5379,5321,-5323,5372,5383,5382,-5372,5730,5305,5306,-5385,5385,5386,5307,-5309,5731,5361,5388,-5388,5380,5303,5309,-5390,5310,5311,5391,-5391,5741,5345,5346,-5741,5392,5340,5341,-5748,5356,5339,5340,-5393,5388,5395,5394,-5375,5374,5394,5396,-5374,5728,5732,5397,-5365,5363,5364,5397,-5399,5398,5397,5400,-5400,5384,5376,5370,-5731,5389,5309,5312,-5402,5401,5312,5307,-5387,5321,5379,5380,-5403,5381,5403,5304,-5380,5363,5405,5404,-5360,5399,5406,5405,-5399,5409,5362,5411,-5411,5412,5413,5410,-5412,5415,5418,5406,-5418,5406,5418,5404,-5406,5408,5404,5418,-5417,5359,5404,5408,-5408,5419,5396,5394,-5421,5744,5424,5423,-5744,5311,5313,5425,-5392,5426,5429,5428,-5428,5391,5425,5431,-5431,5313,5314,5383,-5426,5425,5383,5372,-5432,5427,5430,5431,-5427,5419,5434,5433,-5433,5747,5341,5435,-5747,5390,5391,5430,-5437,5437,5433,5434,-5439,5431,5372,5373,-5427,5440,5342,5442,-5442,5440,5435,5341,-5343,5407,5411,5362,-5359,5412,5408,5416,-5444,5411,5407,5408,-5413,5444,5443,5416,-5415,5740,5346,5357,-5740,5388,5374,5371,-5388,5315,5302,5328,-5446,5353,5446,5325,-5327,5447,5450,5449,-5449,5342,5327,5324,-5443,5451,5402,5380,-5390,5361,5409,5395,-5389,5452,5414,5415,-5451,5417,5406,5399,-5369,5366,5375,5448,-5366,5449,5450,5415,-5418,5368,5399,5400,-5368,5439,5428,5429,-5433,5429,5426,5373,-5397,5432,5429,5396,-5420,\n5454,5447,5456,-5456,5322,5376,5384,-5382,5457,5375,5376,-5323,5458,5459,5348,-5339,5338,5335,5460,-5459,5337,5334,-5337,5449,5417,5368,-5366,5461,5750,5751,-5317,5451,5463,5462,-5403,5464,5467,5466,-5466,5461,5468,5749,-5751,5350,5351,5401,-5387,5386,5385,5378,-5351,5320,5462,5466,-5468,5462,5463,5459,-5467,5347,5348,5352,-5350,5348,5459,5463,-5353,5451,5351,5352,-5464,5442,5469,5390,-5437,5328,5329,5324,-5326,5446,5445,5328,-5326,5301,5317,5469,-5330,5329,5469,5442,-5325,5423,5460,5335,-5471,5428,5439,5435,-5441,5440,5441,5427,-5429,5436,5430,5427,-5442,5745,5746,5435,-5440,5471,5460,5424,-5473,5470,5335,5336,-5345,5344,5336,5334,-5344,5423,5470,5742,-5744,5473,5472,5424,-5745,5470,5344,5345,-5743,5474,5475,5409,-5411,5475,5420,5395,-5410,6502,6503,5739,-5358,5400,5397,5732,-5454,5367,5400,5453,-5370,5366,5367,5369,-5371,5318,5733,5382,-5320,5382,5733,5387,-5372,5414,5452,5477,-5445,5478,5480,5479,-5468,5479,5455,5456,-5324,6513,5315,5445,-5482,5481,5445,5446,-5483,5454,5455,5484,-5484,5455,5479,5480,-5485,5458,5460,5471,-5486,5486,5489,5488,-5488,5490,5492,5491,-5488,5493,5496,5495,-5495,5497,5500,5499,-5499,5420,5475,5502,-5502,5503,5506,5505,-5505,5502,5509,5508,-5508,5510,5504,5505,-5512,5498,5496,5512,-5498,5492,5490,5499,-5501,5465,5485,5487,-5489,5464,5465,5488,-5514,5514,5464,5513,-5516,5472,5499,5490,-5472,5516,5494,5517,-5502,5508,5509,5506,-5504,5475,5474,5509,-5503,5518,5510,5511,-5520,5520,5518,5519,-5522,5478,5514,5515,-5523,5480,5478,5522,-5524,5524,5520,5521,-5526,5526,5524,5525,-5524,5507,5516,5501,-5503,5443,5505,5506,-5414,5443,5444,5511,-5506,5509,5474,5413,-5507,5444,5477,5519,-5512,5477,5483,5521,-5520,5527,5526,5523,-5523,5483,5484,5525,-5522,5484,5480,5523,-5526,5419,5420,5501,-5518,5419,5517,5495,-5435,5434,5495,5496,-5439,5473,5438,5496,-5499,5485,5471,5490,-5488,5513,5488,5489,-5529,5528,5529,5515,-5514,5529,5527,5522,-5516,5333,6502,5357,-5333,5323,5456,5457,-5323,5456,5447,5448,-5458,5317,5310,5390,-5470,5314,5319,5382,-5384,5532,5533,5486,-5492,5533,5534,5489,-5487,5512,5493,5536,-5536,\n5500,5497,5538,-5538,5539,5507,5508,-5541,5541,5542,5540,-5509,5504,5510,5544,-5544,5542,5546,5545,-5541,5547,5535,5536,-5495,5548,5551,5550,-5550,5552,5554,5545,-5554,5555,5534,5533,-5557,5554,5552,5557,-5536,5556,5559,5558,-5556,5556,5532,5560,-5560,5549,5535,5557,-5549,5549,5537,5538,-5536,5500,5537,5561,-5493,5550,5561,5537,-5550,5551,5560,5532,-5551,5543,5544,5563,-5563,5543,5562,5541,-5504,5542,5541,5562,-5565,5565,5568,5567,-5567,5510,5518,5569,-5545,5566,5571,5570,-5566,5571,5566,5573,-5573,5574,5576,5534,-5576,5562,5563,5577,-5565,5578,5581,5580,-5580,5582,5585,5584,-5584,5586,5589,5588,-5588,5735,5684,5592,-5737,5593,5586,5587,-5595,5595,5598,5597,-5597,5599,5595,5596,-5601,5601,5604,5603,-5603,5603,5579,5606,-5606,5607,5606,5579,-5581,5598,5609,5608,-5598,5610,5613,5612,-5612,5614,5617,5616,-5616,5618,5619,5598,-5596,5618,5622,5621,-5621,5623,5624,5613,-5611,5122,5121,5625,-5625,5123,5122,5624,-5624,5626,5627,5126,-5126,5628,5629,5128,-5128,5132,5131,-5631,5630,5131,5632,-5632,5633,5636,5635,-5635,5637,5639,5631,-5639,5630,5631,5639,-5641,5132,5630,5640,-5134,5637,5638,5606,-5608,5641,5643,5594,-5643,5737,5736,5592,-5645,5590,5591,5587,-5589,5591,5642,5594,-5588,5634,5635,5581,-5579,5634,5646,5645,-5634,5647,5649,5605,-5649,5646,5604,5601,-5651,5651,5654,5653,-5653,5655,5656,5653,-5655,5617,5614,5657,-5590,5658,5659,5615,-5617,5660,5116,5661,-5659,5133,5640,5661,-5116,5662,5665,5664,-5664,5666,5669,5668,-5668,5667,5671,5670,-5667,5578,5579,5603,-5605,5647,5674,5673,-5673,5675,5668,5650,-5602,5671,5677,5676,-5671,5670,5679,5678,-5667,5680,5632,5131,-5131,5648,5638,5631,-5633,5646,5634,5578,-5605,5737,5644,5681,-5739,5559,5683,5682,-5559,5592,5684,5557,-5553,5685,5683,5559,-5561,5557,5684,5686,-5549,5553,5644,5592,-5553,5686,5687,5551,-5549,5558,5682,5665,-5663,5688,5689,5568,-5566,5565,5570,5690,-5689,5652,5693,5692,-5692,5564,5577,5695,-5695,5691,5696,5651,-5653,5694,5695,5691,-5693,5570,5574,5575,-5691,5575,5662,5663,-5691,5555,5558,5662,-5576,5564,5694,5546,-5543,5644,5553,5546,-5682,5663,5664,5698,-5698,\n5518,5520,5573,-5570,5520,5524,5572,-5574,5699,5697,5698,-5701,5700,5698,5678,-5702,5701,5678,5679,-5656,5600,5702,5656,-5600,5667,5668,5675,-5672,5703,5675,5601,-5603,5645,5650,5668,-5670,5702,5600,5643,-5642,5702,5641,5704,-5654,5705,5706,5656,-5656,5670,5676,5707,-5680,5708,5711,5710,-5710,5596,5597,5593,-5644,5597,5608,5586,-5594,5618,5713,5712,-5620,5714,5609,5619,-5713,5689,5695,5577,-5569,5568,5577,5563,-5568,5705,5621,5622,-5707,5583,5686,5684,-5736,5582,5590,5588,-5716,5715,5588,5589,-5658,5130,5129,5717,-5681,5687,5685,5560,-5552,5585,5635,5636,-5585,5585,5715,5581,-5636,5674,5680,5717,-5719,5629,5628,5720,-5720,5721,5722,5718,-5718,5116,5115,-5662,5705,5707,5723,-5622,5118,5714,5712,-5120,5708,5709,5610,-5612,5716,5623,5610,-5710,5620,5723,5612,-5614,5713,5620,5613,-5626,5119,5713,5625,-5121,5627,5628,5127,-5127,5722,5721,5629,-5720,5677,5671,5675,-5704,5724,5711,5676,-5678,5724,5677,5703,-5726,5649,5725,5703,-5603,5649,5602,5603,-5606,5696,5691,5695,-5690,5569,5573,5566,-5568,5544,5569,5567,-5564,5706,5622,5595,-5600,5640,5639,5659,-5662,5574,5571,5572,-5727,5524,5526,5726,-5573,5714,5118,5117,-5661,5714,5660,5616,-5610,5704,5738,5681,-5694,5652,5653,5704,-5694,5698,5664,5666,-5679,5669,5666,5664,-5666,5682,5645,5669,-5666,5633,5645,5682,-5684,5636,5633,5683,-5686,5584,5636,5685,-5688,5583,5584,5687,-5687,5688,5690,5663,-5698,5721,5717,5129,5128,-5630,5639,5637,5615,-5660,5637,5607,5614,-5616,5580,5657,5614,-5608,5581,5715,5657,-5581,5700,5651,5696,-5700,5701,5654,5651,-5701,5507,5539,5547,-5517,5576,5726,5526,-5528,5534,5576,5527,-5530,5330,6504,5530,-5334,5333,5530,-5532,5333,5531,-6503,5394,5395,-5421,5361,5731,-5728,5361,5362,-5410,5337,5347,5377,-5335,5359,5407,5358,-5361,5306,5403,5381,-5385,5405,5363,-5399,5436,5441,-5443,5343,5331,-5333,5416,5418,5415,-5415,5448,5375,-5458,5459,5458,-5486,5466,5459,-5466,5460,5423,-5425,5452,5450,5447,-5455,5448,5449,-5366,5385,5308,-5752,5459,5485,-5466,5464,5514,-5468,5320,5321,5402,-5463,5401,5351,5451,-5390,5433,5745,5439,-5433,5421,5437,5473,-5745,5345,5741,\n5393,-5743,5343,5334,-5332,5387,5733,-5732,5467,5479,5323,-5321,5514,5478,-5468,5476,5354,-5356,5353,5482,-5447,5443,5413,-5413,5413,5474,-5411,5454,5483,5477,-5453,5438,5473,-5438,5491,5486,-5488,5493,5512,-5497,5494,5495,-5518,5498,5499,-5473,5472,5473,-5499,5561,5532,-5492,5550,5532,-5562,5561,5491,-5493,5493,5494,-5537,5538,5512,-5536,5543,5503,-5505,5540,5545,-5540,5497,5512,-5539,5533,5532,-5557,5553,5545,-5547,5547,5539,5545,-5555,5494,5516,-5548,5508,5503,-5542,5681,5692,-5694,5646,5650,-5646,5617,5609,-5617,5619,5609,-5599,5648,5632,-5681,5120,5625,-5122,5643,5593,-5595,5585,5582,-5716,5707,5611,-5613,5660,5658,-5617,5711,5672,-5674,5673,5718,-5712,5707,5708,-5612,5720,5711,-5720,5605,5606,-5639,5716,5709,-5711,5546,5694,-5693,5555,5575,-5535,5692,5681,-5547,5576,5574,-5727,5707,5655,-5680,5702,5653,-5657,5643,5600,-5597,5722,5711,-5719,5125,5124,5716,-5627,5608,5589,-5587,5624,5625,-5614,5707,5705,-5656,5608,5609,-5618,5626,5716,-5711,5627,5626,-5711,5716,5124,5123,-5624,5674,5648,-5681,5673,5674,-5719,5627,5710,5720,-5629,5620,5621,-5724,5713,5618,-5621,5712,5713,-5120,5707,5711,-5709,5707,5612,-5724,5647,5725,-5650,5711,5724,-5673,5647,5648,-5675,5710,5711,-5721,5711,5722,-5720,5647,5672,-5726,5672,5724,-5726,5676,5711,-5708,5688,5699,-5690,5661,5659,-5659,5656,5706,-5600,5618,5595,-5623,5571,5574,-5571,5589,5608,-5618,5605,5638,-5649,5697,5699,-5689,5689,5699,-5697,5701,5655,-5655,5535,5547,-5555,5528,5489,-5535,5529,5528,-5535,5731,5734,5729,-5728,5583,5735,5590,-5583,5736,5591,5590,-5736,5642,5591,5736,-5738,5642,5737,5738,-5642,5704,5641,-5739,5355,5739,6503,-5477,5356,5740,5739,-5356,5392,5741,5740,-5357,5393,5741,5392,-5748,5743,5742,5393,-5423,5421,5744,5743,-5423,5437,5421,5745,-5434,5421,5422,5746,-5746,5393,5747,5746,-5423,5334,5748,-5332,5748,5334,5377,-5750,5750,5749,5377,-5379,5750,5378,5385,-5752,5753,5754,5755,-5757,5757,5758,5759,-5761,5301,5302,5761,-5763,6508,6500,5765,6510,-6512,6499,6500,6508,-5768,5768,5769,5770,-5772,5759,5772,5773,-5761,5760,5773,5774,-5776,5776,5777,5778,-5780,5780,\n5781,5771,-5771,5782,5783,5784,-5786,5772,5759,6507,-6507,5786,5787,5772,-6507,5779,5788,5764,-5777,5790,5791,5789,-5838,5789,6484,5792,-5794,5790,5794,5795,-5792,5796,5797,5798,-5800,5791,5795,6485,-6487,5802,5803,5804,-5806,5791,6486,6484,-5790,5797,5806,5807,-5802,5782,5808,5809,-5784,5303,5304,5810,-5812,5812,5755,5754,-5811,5803,5802,5813,-5815,5305,6487,5815,-5307,5816,5308,5307,-5818,6488,5818,5819,-5793,5811,5820,5309,-5304,5310,5821,5822,-5312,5823,5787,5779,-5779,5823,5824,5774,-5774,5787,5823,5773,-5773,5819,5805,5825,-5827,5805,5804,5827,-5826,6485,5795,5828,-6490,5794,5829,5828,-5796,5829,5830,5831,-5829,5815,6487,5801,-5808,5820,5832,5312,-5310,5832,5817,5307,-5313,5754,5833,5811,-5811,5812,5810,5304,-5404,5794,5790,5834,-5836,5830,5829,5835,-5837,5790,5837,5838,-5835,5839,5840,5841,-5794,5842,5841,5840,-5844,5846,5844,5845,-5849,5845,5847,5836,-5849,5836,5835,5834,-5849,5838,5846,5848,-5835,5849,5850,5825,-5828,5851,5852,5853,-5855,5311,5822,5855,-5314,5856,5857,5858,-5860,5822,5860,5861,-5856,5313,5855,5814,-5315,5855,5861,5803,-5815,5857,5856,5861,-5861,5849,5862,5863,-5865,5824,5852,5865,-5775,5821,5866,5860,-5823,5867,5868,5864,-5864,5861,5856,5804,-5804,5863,5862,5869,-5868,5870,5871,5872,-5776,5870,5775,5774,-5866,5837,5789,5793,-5842,5842,5873,5846,-5839,5841,5842,5838,-5838,5874,5844,5846,-5874,5787,5786,5788,-5780,5819,5818,5802,-5806,5315,5875,5761,-5303,6507,5759,5758,-5877,5877,5878,5879,-5881,5816,5751,-5309,5775,5872,5757,-5761,5881,5820,5811,-5834,5792,5819,5826,-5840,5882,5880,5845,-5845,5847,5799,5830,-5837,5797,5796,5878,-5807,5879,5847,5845,-5881,5799,5798,5831,-5831,5869,5862,5859,-5859,5859,5827,5804,-5857,5862,5849,5827,-5860,5884,5885,5886,-5878,5755,5812,5815,-5808,5887,5755,5807,-5807,5888,5771,5781,-5890,5771,5888,5890,-5769,5770,5769,5766,-5892,5879,5796,5799,-5848,5815,5812,5403,-5307,5881,5833,5893,-5895,5895,5896,5897,-5899,6497,5892,-6497,5783,5817,5832,-5785,5817,5783,5809,-5817,5753,5898,5897,-5894,5893,5897,5889,-5895,5780,5782,5785,-5782,5780,5891,5808,-5783,5781,5785,\n5894,-5890,5881,5894,5785,-5785,5872,5866,5821,-5900,5761,5758,5757,-5763,5876,5758,5761,-5876,5301,5762,5899,-5318,5762,5757,5872,-5900,5853,5900,5768,-5891,5858,5870,5865,-5870,5870,5858,5857,-5872,5866,5871,5857,-5861,5851,5869,5865,-5853,5901,5902,5854,-5891,5900,5777,5769,-5769,5777,5776,5766,-5770,5853,5852,5824,-5901,5903,5851,5854,-5903,5900,5824,5778,-5778,5904,5840,5839,-5906,5905,5839,5826,-5851,6509,5788,5786,-5753,5831,5883,6489,-5829,5798,5800,5883,-5832,5797,5801,5800,-5799,5318,5319,5813,-6491,5813,5802,5818,-6491,5844,5874,5906,-5883,5884,5882,5906,-5913,5907,5898,5908,-5910,5908,5756,5886,-5886,6498,6499,5767,-5911,6513,5911,5875,-5316,5911,6505,5876,-5876,5884,5912,5913,-5886,5885,5913,5909,-5909,5888,5914,5901,-5891,5915,5916,5917,-5919,5919,5916,5920,-5922,5922,5923,5924,-5926,5926,5927,5928,-5930,5850,5930,5931,-5906,5932,5933,5934,-5936,5931,5936,5937,-5939,5939,5940,5934,-5934,5927,5926,5941,-5926,5921,5929,5928,-5920,5896,5917,5916,-5915,5895,5942,5917,-5897,5943,5944,5942,-5896,5902,5901,5919,-5929,5945,5930,5946,-5924,5937,5932,5935,-5939,5905,5931,5938,-5905,5947,5948,5940,-5940,5949,5950,5948,-5948,5907,5951,5944,-5944,5909,5952,5951,-5908,5953,5954,5950,-5950,5955,5952,5954,-5954,5936,5931,5930,-5946,5873,5843,5935,-5935,5873,5934,5940,-5875,5938,5935,5843,-5905,5874,5940,5948,-5907,5906,5948,5950,-5913,5956,5951,5952,-5956,5912,5950,5954,-5914,5913,5954,5952,-5910,5849,5946,5930,-5851,5849,5864,5924,-5947,5864,5868,5925,-5925,5903,5927,5925,-5869,5914,5916,5919,-5902,5942,5957,5918,-5918,5957,5942,5944,-5959,5958,5944,5951,-5957,5765,5764,5788,-6510,5756,5755,5887,-5887,5886,5887,5878,-5878,5317,5899,5821,-5311,5314,5814,5813,-5320,5960,5920,5915,-5962,5961,5915,5918,-5963,5941,5963,5964,-5923,5929,5965,5966,-5927,5967,5968,5937,-5937,5969,5937,5968,-5971,5933,5971,5972,-5940,5970,5968,5973,-5975,5975,5923,5964,-5964,5976,5977,5978,-5980,5980,5981,5973,-5983,5983,5984,5961,-5963,5982,5963,5985,-5981,5984,5983,5986,-5988,5984,5987,5988,-5961,5977,5976,5985,-5964,5977,5963,5966,-5966,5929,\n5921,5989,-5966,5978,5977,5965,-5990,5979,5978,5960,-5989,5971,5990,5991,-5973,5971,5932,5969,-5991,5970,5992,5990,-5970,5993,5994,5995,-5997,5939,5972,5997,-5948,5994,5993,5998,-6000,5999,6000,6001,-5995,6002,6003,5962,-6005,5990,5992,6005,-5992,6006,6007,6008,-6010,6010,6011,6012,-6014,6014,6015,6016,-6018,6492,6493,6020,-6193,6021,6022,6015,-6015,6023,6024,6025,-6027,6027,6028,6024,-6024,6029,6030,6031,-6033,6031,6033,6034,-6008,6035,6008,6007,-6035,6026,6025,6036,-6038,6038,6039,6040,-6042,6042,6043,6044,-6046,6046,6023,6026,-6048,6046,6048,6049,-6051,6051,6038,6041,-6053,6053,6052,6054,-6056,6056,6051,6052,-6054,6057,6058,6059,-6061,6056,6061,6062,-6064,6064,6065,6066,-6068,6068,6069,6070,-6072,6072,6073,6074,-6076,6076,6077,6062,-6062,6078,6064,6067,-6080,6080,6068,6071,-6082,6082,6083,6084,-6086,6086,6087,6088,-6090,6090,6091,6073,-6073,6092,6093,6073,-6092,6094,6095,6096,-6098,6098,6099,6078,-6080,6080,6081,6100,-6102,6085,6102,6103,-6105,6105,6106,6088,-6088,6107,6108,6109,-6093,6110,6070,6069,-6112,6082,6112,6113,-6084,6112,6114,6115,-6114,6094,6116,6117,-6119,6103,6119,6120,-6105,6106,6105,6121,-6123,6108,6107,6123,-6125,6125,6099,6098,-6127,6127,6095,6094,-6119,6128,6129,6130,-6132,6132,6133,6114,-6135,6112,6135,6134,-6115,6082,6086,6135,-6113,6087,6086,6082,-6086,6104,6120,6136,-6138,6132,6035,6034,-6134,6138,6139,6022,-6141,6494,6141,6020,-6494,6018,6016,6015,-6020,6019,6015,6022,-6140,6055,6093,6076,-6054,6129,6006,6009,-6131,6129,6128,6142,-6144,6144,6145,6033,-6147,6143,6147,6029,-6033,6148,6149,6150,-6152,6152,6151,6150,-6154,6045,6017,6154,-6043,6155,6044,6043,-6157,6157,6155,6158,-6076,6086,6089,6158,-6136,6159,6160,6161,-6163,6163,6164,6165,-6167,6164,6163,6167,-6169,6006,6032,6031,-6008,6144,6169,6170,-6172,6172,6029,6147,-6166,6168,6167,6173,-6175,6167,6163,6175,-6177,6177,6178,6179,-6181,6181,6182,6179,-6179,6103,6102,6183,-6185,6101,6100,6185,-6187,6187,6188,6113,-6116,6145,6115,6114,-6134,6143,6032,6006,-6130,6494,6495,6189,-6142,5987,5986,6190,-6192,6020,5980,5985,-6193,6193,5988,5987,-6192,\n5985,5976,6194,-6193,5981,5980,6020,-6142,6194,5976,5979,-6196,5986,6159,6162,-6191,6196,5993,5996,-6198,5993,6196,6198,-5999,6149,6199,6200,-6202,5992,6202,6203,-6006,6199,6149,6148,-6205,6202,6200,6199,-6204,5998,6198,6003,-6003,6003,6198,6160,-6160,5983,6003,6159,-5987,5992,5970,5974,-6203,6141,6189,5974,-5982,6160,6205,6206,-6162,5947,5997,6001,-5950,5949,6001,6000,-5954,6207,6208,6206,-6206,6208,6209,6175,-6207,6209,6152,6176,-6176,6028,6027,6153,-6211,6164,6168,6172,-6166,6211,6030,6029,-6173,6142,6166,6165,-6148,6210,6138,6140,-6029,6210,6150,6212,-6139,6213,6152,6153,-6215,6167,6176,6215,-6174,6216,6217,6218,-6220,6024,6140,6021,-6026,6025,6021,6014,-6037,6046,6047,6220,-6222,6222,6220,6047,-6038,6197,5996,6005,-6204,5996,5995,5991,-6006,6213,6214,6050,-6050,6011,6492,6192,-6195,6010,6223,6016,-6019,6223,6154,6017,-6017,6077,6076,6092,-6110,6224,6107,6092,-6092,6058,6057,6225,-6066,6058,6065,6064,-6178,6064,6078,6178,-6178,6181,6178,6078,-6100,6059,6180,6226,-6228,6228,6226,6180,-6180,6179,6182,6229,-6229,6182,6230,6231,-6230,6067,6066,6063,-6063,6096,6079,6067,-6063,6096,6095,6098,-6080,6095,6127,6126,-6099,6188,6187,6232,-6234,6234,6068,6080,-6184,6184,6183,6080,-6102,6184,6101,6186,-6120,6120,6119,6235,-6237,6235,6237,6238,-6237,6239,6240,6241,-6243,6243,6238,6237,-6245,6245,6243,6246,-6248,6248,6246,6244,-6250,6238,6243,6245,-6251,6251,6246,6248,-6253,6253,6254,6251,-6256,6251,6252,6256,-6256,6257,6255,6258,-6260,6258,6255,6260,-6262,6258,6262,6263,-6265,6265,6266,6262,-6259,6264,6263,6267,-6269,6269,6268,6267,-6271,6271,6272,6268,-6274,6274,6254,6253,-6273,6275,6276,6274,-6273,6277,6278,6279,-6281,6278,6281,6282,-6280,6283,6279,6284,-6286,6286,6284,6279,-6288,6288,6289,6290,-6285,6288,6284,6291,-6293,6290,6289,6293,-6295,6293,6295,6296,-6295,6297,6298,6299,-6295,6280,6299,6300,-6278,6300,6299,6301,-6303,6303,6304,6305,-6307,6304,6307,6308,-6306,6309,6310,6311,-6306,6312,6311,6313,-6315,6313,6311,6315,-6317,6317,6318,6312,-6315,6317,6319,6320,-6319,6321,6322,6318,-6324,6324,6323,6318,-6326,6326,6327,6323,\n-6329,6327,6326,6329,-6331,6329,6331,6332,-6331,6333,6332,6334,-6336,6332,6331,6336,-6335,6337,6334,6338,-6340,6340,6341,6342,-6339,6340,6338,6343,-6345,6345,6346,6342,-6342,6347,6346,6345,-6349,6335,6349,6350,-6334,6350,6349,6351,-6353,6352,6353,6354,-6351,6354,6355,6356,-6358,6358,6359,6360,-6362,6359,6355,6362,-6361,6363,6364,6365,-6367,6367,6365,6364,-6359,6368,6366,6369,-6371,6369,6367,6371,-6371,6372,6373,6368,-6371,6370,6371,6374,-6373,6375,6376,6373,-6373,6374,6377,6375,-6373,6378,6379,6376,-6381,6378,6380,6377,-6382,6382,6383,6379,-6379,6378,6381,6384,-6383,6385,6386,6383,-6383,6385,6382,6384,-6388,6388,6389,6386,-6386,6387,6390,6388,-6386,6391,6389,6388,-6393,6390,6393,6392,-6389,6394,6395,6396,-6124,6397,6398,6399,-6401,6397,6118,6117,-6399,6379,6383,6366,-6369,6368,6373,6376,-6380,6386,6389,6363,-6367,6401,6236,6238,-6251,6247,6402,6403,-6246,6371,6367,6384,-6382,6381,6377,6374,-6372,6367,6358,6390,-6388,6393,6390,6358,-6362,6404,6397,6400,-6406,6397,6404,6127,-6119,6406,6231,6230,-6408,6406,6407,6408,-6410,6410,6411,6412,-6414,6414,6415,6276,-6417,6414,6416,6248,-6418,6353,6418,6419,-6421,6351,6421,6422,-6337,6423,6347,6343,-6425,6347,6348,6344,-6344,6425,6326,6426,-6428,6428,6411,6410,-6430,6328,6324,6309,-6309,6325,6310,6309,-6325,6325,6320,6315,-6311,6320,6319,6316,-6316,6430,6281,6412,-6412,6430,6411,6428,-6303,6287,6282,6301,-6299,6296,6291,6286,-6298,6292,6291,6296,-6296,6271,6260,6256,-6276,6261,6260,6271,-6274,6269,6265,6261,-6274,6419,6418,6331,-6432,6242,6237,6235,-6240,6244,6237,6242,-6250,6432,6433,6434,-6436,6435,6125,6126,-6433,6436,6437,6419,-6432,6181,6099,6125,-6439,6439,6438,6125,-6436,6435,6434,6437,-6440,6437,6434,6420,-6420,6195,5979,5988,-6194,6013,6012,6131,-6131,6013,6130,6009,-6224,6171,6440,6232,-6188,6111,6441,6442,-6111,6443,6232,6440,-6445,6445,6060,6059,-6228,6058,6177,6180,-6060,6107,6224,6446,-6124,6089,6088,6090,-6073,6075,6158,6089,-6073,6137,6136,6121,-6106,6085,6137,6105,-6088,6084,6234,6183,-6103,6213,6049,6447,-6216,6074,6448,6220,-6223,6216,6039,6038,-6218,6225,6217,\n6038,-6052,6063,6225,6051,-6057,6048,6041,6040,-6448,6221,6054,6041,-6049,6448,6449,6054,-6222,6450,6451,6438,-6440,6439,6437,6436,-6451,6450,6452,6429,-6454,6452,6436,6425,-6428,6453,6410,6413,-6455,6408,6413,6415,-6415,6407,6454,6413,-6409,6454,6407,6230,-6452,6414,6417,6409,-6409,6452,6427,6455,-6430,6426,6307,6455,-6428,6403,6456,6250,-6246,6457,6401,6250,-6457,6136,6120,6236,-6402,6353,6458,6362,-6355,6360,6362,6458,-6460,6400,6392,6393,-6406,6445,6110,6442,-6219,6227,6070,6110,-6446,6226,6071,6070,-6228,6081,6071,6226,-6229,6228,6460,6100,-6082,6460,6461,6185,-6101,6239,6185,6461,-6241,6229,6231,6461,-6461,6240,6461,6231,-6407,6240,6406,6409,-6242,6409,6417,6249,-6242,6444,6441,6111,-6444,6174,6211,6172,-6169,6462,6174,6173,-6220,6462,6463,6211,-6175,6146,6030,6211,-6464,6146,6033,6031,-6031,6204,6197,6203,-6200,5997,5995,5994,-6002,5972,5991,5995,-5998,6090,6088,6106,-6465,6464,6106,6122,-6466,6121,6466,6465,-6123,6090,6464,6224,-6092,6224,6464,6465,-6447,6214,6027,6023,-6051,6135,6158,6156,-6135,6093,6055,6449,-6074,6002,6467,6000,-6000,5953,6000,6467,-5956,6222,6157,6075,-6075,6222,6037,6044,-6158,6083,6113,6188,-6235,6212,6201,6189,-6496,6149,6201,6212,-6151,6206,6175,6163,-6162,6166,6162,6161,-6164,6190,6162,6166,-6143,6128,6191,6190,-6143,6131,6193,6191,-6129,6012,6195,6193,-6132,6011,6194,6195,-6013,6196,6205,6160,-6199,6268,6272,6257,-6260,6283,6285,6294,-6300,6311,6322,6321,-6306,6323,6327,6303,-6307,6424,6338,6334,-6423,6337,6339,6346,-6350,6346,6423,6421,-6350,6421,6423,6424,-6423,6287,6298,6297,-6287,6265,6269,6270,-6267,6392,6400,6399,-6392,6124,6117,6116,-6109,6396,6398,6117,-6125,6399,6398,6396,-6396,6391,6395,6394,-6469,6459,6433,6405,-6394,6432,6126,6127,-6405,6096,6062,6077,-6098,6111,6069,6469,-6444,6068,6234,6469,-6070,6469,6233,6232,-6444,6109,6108,6116,-6098,6134,6156,6043,-6133,6132,6043,6042,-6036,6008,6035,6042,-6155,6009,6008,6154,-6224,6208,6207,6204,-6149,6209,6208,6148,-6152,5936,5945,5975,-5968,6004,5956,5955,-6468,5962,5958,5956,-6005,5765,5959,-6511,5765,6509,-5960,5825,5850,-5827,\n5792,6484,-6489,5792,5839,-5794,5891,5780,-5771,5835,5829,-5795,5866,5872,-5872,5776,5764,-5764,5878,5887,-5807,5889,5914,-5889,5897,5896,-5890,5890,5854,-5854,5878,5796,-5880,5889,5896,-5915,5753,5893,5833,-5755,5898,5753,5756,-5909,5895,5898,-5944,5832,5820,5881,-5785,5869,5851,-5868,5867,5851,-5904,5778,5824,-5824,5776,5763,-5767,5818,6488,-6491,5943,5898,-5908,5752,5786,6506,-6513,6507,5876,-6506,5873,5842,-5844,5843,5840,-5905,5868,5867,-5904,5920,5916,-5916,5922,5925,-5942,5923,5946,-5925,5927,5902,-5929,5902,5927,-5904,5989,5920,-5961,5978,5989,-5961,5989,5921,-5921,5922,5964,-5924,5966,5963,-5942,5971,5933,-5933,5968,5967,-5974,5975,5982,5973,-5968,5926,5966,-5942,5961,5984,-5961,5981,5974,-5974,5923,5975,-5946,5937,5969,-5933,6189,6201,-6201,6143,6142,-6148,6045,6044,-6038,6047,6026,-6038,6145,6187,-6116,6449,6055,-6055,6184,6119,-6104,6137,6085,-6105,6140,6022,-6022,6013,6223,-6011,6215,6040,-6040,6076,6093,-6093,6157,6044,-6156,6219,6170,-6170,6170,6219,-6441,6215,6039,-6217,6442,6441,-6220,6083,6234,-6085,6033,6133,-6035,6225,6218,-6218,5974,6200,-6203,5983,5962,-6004,6200,5974,-6190,6004,6467,-6003,6215,6176,-6153,6210,6153,-6151,6140,6024,-6029,6444,6440,-6220,6225,6066,-6066,6036,6014,-6018,6052,6041,-6055,6215,6152,-6214,6036,6045,-6038,6057,6218,-6226,6060,6218,-6058,6225,6063,-6067,6171,6187,-6146,6234,6188,-6234,6239,6119,-6187,6239,6186,-6186,6246,6243,-6245,6251,6254,-6248,6247,6246,-6252,6257,6253,-6256,6255,6256,-6261,6261,6265,-6259,6262,6470,-6264,6266,6470,-6263,6470,6267,-6264,6270,6267,-6471,6266,6270,-6471,6264,6268,-6260,6268,6269,-6274,6272,6253,-6258,6271,6275,-6273,6276,6471,-6275,6277,6472,-6472,6471,6278,-6278,6473,6412,-6282,6281,6278,-6472,6472,6247,-6255,6254,6274,-6472,6473,6415,-6413,6283,6280,-6280,6279,6282,-6288,6284,6286,-6292,6290,6285,-6285,6288,6474,-6290,6292,6474,-6289,6474,6293,-6290,6295,6293,-6475,6474,6292,-6296,6294,6285,-6291,6296,6297,-6295,6280,6283,-6300,6298,6301,-6300,6303,6475,-6403,6402,6277,-6304,6476,6302,-6429,6302,6476,-6301,6304,6300,-6477,6307,6304,\n-6477,6455,6476,-6429,6303,6277,-6305,6304,6277,-6301,6321,6306,-6306,6305,6308,-6310,6311,6310,-6316,6312,6322,-6312,6313,6477,-6315,6316,6477,-6314,6477,6317,-6315,6319,6317,-6478,6477,6316,-6320,6318,6322,-6313,6320,6325,-6319,6306,6321,-6324,6328,6323,-6325,6327,6478,-6304,6478,6479,-6476,6475,6303,-6479,6478,6333,-6480,6333,6357,-6480,6478,6332,-6334,6337,6335,-6335,6422,6334,-6337,6338,6424,-6344,6342,6339,-6339,6340,6480,-6342,6344,6480,-6341,6480,6345,-6342,6348,6345,-6481,6480,6344,-6349,6346,6339,-6343,6347,6423,-6347,6349,6335,-6338,6421,6351,-6350,6357,6333,-6351,6350,6354,-6358,6356,6479,-6358,6362,6355,-6355,6363,6481,-6483,6482,6364,-6364,6358,6364,-6360,6359,6364,-6483,6482,6356,-6356,6355,6359,-6483,6365,6369,-6367,6367,6369,-6366,6375,6380,-6377,6377,6380,-6376,6394,6123,-6467,6396,6124,-6124,6383,6386,-6367,6468,6481,-6364,6363,6389,-6469,6483,6481,-6469,6468,6466,-6484,6466,6123,-6447,6121,6457,-6467,6457,6483,-6467,6401,6457,-6122,6483,6457,-6457,6456,6481,-6484,6481,6456,-6483,6472,6402,-6248,6479,6356,-6404,6403,6475,-6480,6403,6402,-6476,6402,6472,-6278,6356,6482,-6457,6456,6403,-6357,6367,6387,-6385,6241,6249,-6243,6417,6248,-6250,6418,6353,-6353,6353,6420,-6459,6458,6433,-6460,6252,6248,-6417,6331,6418,-6337,6351,6418,-6353,6331,6329,-6432,6329,6326,-6426,6433,6420,-6435,6426,6328,-6309,6328,6426,-6327,6420,6433,-6459,6256,6252,-6417,6282,6281,-6431,6430,6301,-6283,6301,6430,-6303,6472,6254,-6472,6308,6307,-6427,6351,6336,-6419,6181,6451,-6183,6454,6451,-6454,6453,6429,-6411,6136,6401,-6122,6170,6440,-6172,6445,6218,-6061,6085,6084,-6103,6048,6447,-6050,6221,6048,-6047,6220,6448,-6222,6215,6216,-6220,6215,6447,-6041,6453,6451,-6451,6429,6455,-6429,6182,6451,-6231,6181,6438,-6452,6450,6436,-6453,6425,6436,-6432,6329,6425,-6432,6307,6476,-6456,6415,6413,-6413,6473,6276,-6416,6275,6416,-6277,6256,6416,-6276,6471,6473,-6282,6276,6473,-6472,6330,6332,-6479,6327,6330,-6479,6235,6119,-6240,6468,6394,-6467,6361,6360,-6460,6393,6361,-6460,6144,6146,-6464,6219,6169,-6463,6144,6171,-6146,6218,6442,-6220,\n6460,6228,-6230,6219,6441,-6445,6074,6073,-6449,6448,6073,-6450,6144,6463,-6170,6169,6463,-6463,6173,6215,-6220,6196,6197,-6208,6466,6446,-6466,6158,6155,-6157,6153,6027,-6215,6046,6050,-6024,5999,5998,-6003,6017,6045,-6037,6033,6145,-6134,6205,6196,-6208,6259,6258,-6265,6391,6399,-6396,6389,6391,-6469,6404,6405,-6434,6433,6432,-6405,6094,6097,-6117,6077,6109,-6098,6234,6233,-6470,6197,6204,-6208,6209,6151,-6153,6056,6053,-6062,6061,6053,-6077,5963,5982,-5976,5957,5962,-5919,5958,5962,-5958,6488,6484,6486,-6492,6011,6010,6018,-6493,6493,6492,6018,-6020,6139,6494,6493,-6020,6139,6138,6495,-6495,6212,6495,-6139,5316,5751,6496,-5893,6497,6496,5809,-5809,5891,6498,6497,-5809,5891,5766,6499,-6499,5766,5763,6500,-6500,5765,6500,5763,-5765,5660,5117,-5117,6515,6590,6540,-6515,6539,6516,6514,-6541,6540,6541,-6540,6659,6684,6889,-6891,6544,6517,6516,-6540,6545,6544,6539,-6542,6546,6547,6916,-6918,6693,6548,6888,-6888,6661,6662,6659,-6661,6915,6548,6693,-6915,6521,6519,6549,-6561,6548,6547,6889,-6889,6916,6547,6548,-6916,6552,6694,6695,-6552,6553,6554,6552,-6552,6505,6556,6557,-6556,6695,6512,6506,-6552,6532,6664,6558,-6519,6537,6661,6660,-6534,6891,6892,6533,-6661,6559,6549,-6547,6559,6546,-6918,6505,6555,6554,-6554,6560,6561,6520,-6522,6559,6557,6560,-6550,6561,6560,6557,-6557,6556,6505,5911,-6562,6671,6905,6599,-6566,6682,6567,6568,-6682,6566,6668,6669,-6571,6601,6526,6535,-6667,6680,6538,6526,-6602,6572,6573,6910,-6912,6576,6574,-6910,6577,6529,6528,-6576,6648,6656,6652,-6654,6648,6653,6654,-6648,6635,6631,6641,-6690,6632,6563,6863,-6606,6568,6578,6680,-6682,6910,6573,6576,-6910,6668,6566,6569,-6668,6582,6692,6562,-6608,6583,6584,6585,-6587,6587,6580,6588,-6590,6632,6605,6900,-6902,6576,6573,6643,-6645,6647,6654,6655,-6647,6591,6655,6590,-6689,6592,6651,6652,6656,-6872,6574,6576,6644,6645,-6592,6855,6900,6605,-6631,6570,6904,6682,-6567,6902,6597,-6565,6610,6865,6600,6581,-6650,6588,6580,6690,-6692,6577,6574,6591,-6689,6686,6687,6886,-6886,6569,6601,6666,-6668,6622,6603,6593,-6595,6618,6619,6586,-6586,6572,6642,6643,-6574,\n6642,6572,6689,-6642,6589,6588,-6605,6606,6607,6608,-6610,6608,6587,6589,-6610,6864,6582,6607,-6607,6679,6611,6612,-6679,6613,6612,6611,-6615,6614,6615,6616,-6614,6658,6550,6617,-6658,6618,6523,6522,-6620,6619,6522,5316,-5893,6586,6619,5892,-5911,5767,6508,6583,-6587,6510,6611,6679,-6512,6614,6611,6510,-5960,6509,6615,6614,-5960,5752,6550,6658,6615,-6510,6563,6600,6865,-6864,6884,6885,6600,-6564,6564,6884,6563,-6633,6623,6621,6603,-6623,6628,6624,6618,-6586,6624,6524,6523,-6619,6625,6626,6613,-6617,6627,6628,6585,-6585,6612,6629,6677,-6679,6626,6629,6612,-6614,6594,6531,6524,-6625,6622,6594,6624,-6629,6627,6623,6622,-6629,6629,6596,6676,-6678,6626,6597,6596,-6630,6625,6620,6597,-6627,6621,6672,6673,-6604,6593,6603,6673,-6675,6593,6674,6536,-6531,6570,6669,6670,-6596,6620,6686,6885,-6885,6625,6912,6686,-6621,6507,6505,-6554,5911,6513,6520,-6562,6688,6534,6529,-6578,6562,6634,6587,-6609,6562,6608,-6608,6649,6582,6864,-6868,6609,6589,-6638,6676,6596,6598,-6676,6630,6605,6640,6868,-6637,6664,6665,6542,-6559,6593,6530,6531,-6595,6564,6632,6901,-6903,6634,6633,6580,-6588,6631,6866,6862,-6642,6862,6859,6642,-6642,6642,6859,6858,-6644,6643,6858,6861,-6645,6644,6861,6856,-6646,6646,6860,-6648,6648,6647,6860,-6858,6640,6605,6863,-6870,6637,6589,-6605,6604,6588,6650,-6639,6650,6588,6691,-6652,6652,6545,6541,-6654,6541,6540,6654,-6654,6590,6655,6654,-6541,6639,6651,-6593,6650,6651,6639,-6639,6610,6649,6867,-6871,6857,6854,6656,-6649,6871,6656,-6855,6615,6658,6657,-6617,6891,6660,6659,-6891,6518,6558,6661,-6538,6558,6542,6662,-6662,6663,6662,6542,-6544,6664,6532,6517,-6545,6665,6664,6544,-6546,6666,6535,6525,-6603,6666,6602,6579,-6668,6571,6668,6667,-6580,6668,6571,6565,-6670,6670,6669,6565,-6600,6571,6672,6671,-6566,6672,6571,6579,-6674,6673,6579,6602,-6675,6674,6602,6525,-6537,6888,6889,6684,-6686,6887,6888,6685,-6563,6885,6886,6581,-6601,6621,6675,6671,-6673,6677,6676,6623,-6628,6677,6627,6584,-6679,6583,6679,6678,-6585,6511,6679,6583,-6509,6623,6676,6675,-6622,6680,6601,6569,-6682,6566,6682,6681,-6570,6578,6527,6538,-6681,\n6684,6659,6662,-6664,6684,6663,6633,-6686,6562,6685,6633,-6635,6687,6686,6912,-6914,6515,6534,6688,-6591,6855,6683,6903,-6596,6543,6542,6665,-6691,6690,6665,6545,-6692,6652,6651,6691,-6546,6633,6663,-6544,6581,6692,6582,-6650,6581,6886,6887,-6693,6687,6693,6887,-6887,6693,6687,6913,-6915,6550,6695,6694,-6618,6550,5752,6512,-6696,5482,6709,6711,-6711,6713,6702,-6706,6844,6709,5482,-6846,6713,6711,6709,6922,-6703,6817,6841,6793,-6821,6894,6895,6841,-6818,6895,6896,6717,-6842,6713,6705,6714,-6712,6715,6710,6711,-6715,6710,6715,5481,-5483,6829,6828,6757,-6722,6736,6737,6718,-6793,6808,6807,6812,-6812,6729,6733,6804,-6804,6735,6724,6839,-6839,6757,6828,6736,-6793,6736,6828,6851,-6853,6766,6827,6753,-6874,6739,6740,6759,-6759,6841,6717,6794,-6794,6759,6740,6897,-6899,6760,6823,6535,-6527,6760,6725,6824,-6824,6853,6737,6736,-6853,6879,6767,-6742,6837,6836,6773,-6773,6774,6775,6772,-6774,6775,6774,6777,-6777,6816,6815,6778,-6708,6779,6780,6522,-6524,6780,6779,6744,-6746,6522,6780,5461,-5317,6780,6745,6501,5468,-5462,5530,6504,6837,-6773,6775,5531,5530,-6773,6502,5531,6775,-6777,6503,6502,6776,-6817,6778,6815,6918,-6920,6785,6779,6523,-6525,6752,6785,6524,-6532,6783,6789,6785,-6753,6790,6835,6834,-6755,6786,6787,6755,-6782,6777,6774,6787,-6787,6773,6836,6835,-6791,6744,6779,6785,-6790,6751,6832,6831,-6763,6735,6838,6538,-6528,6726,6753,6827,-6827,6724,6735,-6733,6721,6757,6756,-6834,6898,6899,6718,-6760,6759,6718,6737,-6759,5481,6715,6520,-6514,6709,6844,6921,-6923,6717,6795,-6795,6809,6797,6879,-6742,6769,6798,-6748,6786,6781,6842,-6919,6815,6777,6786,-6919,6731,6734,6730,-6733,6793,6794,6746,-6717,6795,6768,6746,-6795,6768,6795,6796,-6742,6739,6809,6741,-6797,6849,6801,6880,-6882,6801,6764,6882,-6881,6803,6804,6878,-6877,6806,6874,-6806,6808,6875,6877,-6808,6808,6811,6810,-6815,6771,6809,6739,-6759,6798,6765,-6748,6750,6747,-6766,6810,6811,6698,-6702,6698,6811,6812,-6698,6748,6697,6812,-6814,6800,6883,6814,-6811,6872,6875,6808,-6815,6883,6872,-6815,6776,6777,6815,-6817,6893,6894,6817,-6819,6819,6818,6817,-6821,6821,6712,\n6699,-6823,6701,6698,6696,-6701,6696,6697,6514,-6517,6521,6520,6715,-6715,6521,6714,6705,-6520,6537,6533,6818,-6820,6532,6518,6712,-6822,6700,6696,6516,-6518,6705,6702,6894,-6894,6519,6705,6893,-6893,6893,6818,6533,-6893,6712,6518,6537,-6820,6699,6712,6819,-6821,6535,6823,6761,-6526,6823,6824,6738,-6762,6720,6826,6827,-6852,6720,6851,6828,-6830,6831,6832,6761,-6739,6721,6833,-6783,6835,6788,6784,-6835,6835,6836,6743,-6789,6742,6743,6836,-6838,6504,5330,6742,-6838,6838,6760,6526,-6539,6838,6839,6725,-6761,6848,6908,-6847,6803,6876,6763,-6803,6729,6803,6802,-6729,6907,6723,6724,-6907,6839,6724,6723,-6841,6725,6839,6840,-6723,6824,6725,6722,-6826,6738,6824,6825,-6728,6831,6738,6727,-6831,6762,6831,6830,-6783,6789,6783,6784,-6789,6788,6743,6744,-6790,6745,6744,6743,-6743,5330,6501,6745,-6743,6700,6517,6532,-6822,6701,6700,6821,-6823,6920,6921,6844,-6707,6706,6844,6845,-6709,5353,5354,6708,-6846,6719,6899,6781,-6756,6833,6756,6754,-6835,6782,6833,6834,-6785,6784,6783,6762,-6783,6783,6752,6751,-6763,6751,6752,6531,-6531,6753,6726,6791,-6849,6846,6873,6753,-6849,6749,6847,6748,-6814,6804,6805,6874,-6879,6730,6749,6805,6804,-6734,6847,6749,6730,-6735,6751,6530,6536,-6833,6832,6536,6525,-6762,6735,6527,6528,-6732,6734,6731,6528,-6530,6847,6734,6529,-6535,6515,6748,6847,-6535,6515,6514,6697,-6749,6829,6721,6782,-6831,6720,6829,6830,-6728,6826,6720,6727,-6826,6726,6826,6825,-6723,6791,6726,6722,-6841,6791,6840,-6724,6801,6849,6728,-6803,6763,6764,6801,-6803,6848,6791,6723,6907,-6909,6750,6716,6746,-6748,6769,6747,6746,-6769,6822,6699,6793,-6717,6701,6822,6716,-6751,6701,6750,6799,6800,-6811,6820,6793,-6700,6739,6796,-6741,6896,6897,6740,-6718,6920,6706,6778,-6920,6707,6778,6706,-6709,5354,5476,6707,-6709,6756,6757,6792,-6720,6754,6756,6719,-6756,6790,6754,6755,-6788,6787,6774,6773,-6791,6758,6737,6853,-6772,6771,6850,6797,-6810,6770,6853,6852,-6767,6771,6853,6770,-6851,6852,6851,6827,-6767,6807,6806,6813,-6813,6546,6890,6889,-6548,6549,6891,6890,-6547,6519,6892,6891,-6550,6702,6704,6895,-6895,6704,6703,6896,-6896,6703,6843,6897,\n-6897,6842,6898,6897,-6844,6842,6781,6899,-6899,6750,6765,-6800,6646,6655,6591,-6646,6806,6805,6749,-6814,6597,6620,6884,-6565,6719,6792,6718,-6900,6670,6855,-6596,6900,6599,6905,-6902,6598,6596,6597,-6903,6900,6855,6670,-6600,6697,6696,-6699,6633,6543,6690,-6581,6887,6562,-6693,6768,6741,6767,-6770,6740,6796,6795,-6718,6595,6903,6904,-6571,6732,6730,-6734,6724,6732,-6907,6735,6731,-6733,6578,6575,6528,-6528,6689,6903,6683,-6636,6572,6911,6904,6903,-6690,6904,6567,-6683,6598,6905,6671,-6676,6901,6905,6598,-6903,6906,6732,6733,-6730,6728,6907,6906,-6730,6908,6907,6728,-6850,6846,6908,6849,-6882,6909,6574,6577,-6576,6568,6910,6909,-6579,6909,6575,-6579,6911,6910,6568,-6568,6904,6911,-6568,6657,6912,6625,-6617,6617,6913,6912,-6658,6694,6914,6913,-6618,6552,6915,6914,-6695,6554,6916,6915,-6553,6555,6917,6916,-6555,6559,6917,6555,-6558,6919,6918,6842,-6844,6703,6920,6919,-6844,6703,6704,6921,-6921,6922,6921,6704,-6703,6926,6939,6938,-6926,6938,6939,6941,-6941,6942,6945,6944,-6944,6946,6947,6940,-6942,6948,6950,6949,-6947,6951,6952,6947,-6950,6941,6953,6948,-6947,6954,6955,6951,-6950,6956,6958,6954,-6958,6954,6958,6959,-6956,6960,6962,6961,-6959,6961,6964,6963,-6959,6961,6967,6966,-6966,6968,6961,6965,-6970,6967,6971,6970,-6967,6972,6973,6970,-6972,6974,6976,6971,-6976,6977,6975,6956,-6958,6978,6975,6977,-6980,6980,6983,6982,-6982,6981,6982,6985,-6985,6986,6988,6987,-6983,6989,6990,6982,-6988,6991,6987,6993,-6993,6991,6995,6994,-6988,6993,6997,6996,-6993,6996,6997,6999,-6999,7000,6997,7002,-7002,6983,6980,7003,-7003,7003,7005,7004,-7003,7006,7009,7008,-7008,7007,7008,7011,-7011,7012,7008,7014,-7014,7015,7017,7016,-7015,7016,7019,7018,-7015,7020,7017,7015,-7022,7020,7021,7023,-7023,7024,7026,7021,-7026,7027,7028,7021,-7027,7029,7031,7026,-7031,7030,7033,7032,-7030,7032,7033,7035,-7035,7036,7038,7037,-7036,7035,7037,7039,-7035,7040,7042,7041,-7038,7043,7041,7045,-7045,7043,7047,7046,-7042,7048,7044,7045,-7050,7050,7051,7048,-7050,7038,7036,7053,-7053,7053,7055,7054,-7053,7055,7053,7057,-7057,7057,7060,7059,-7059,7061,7064,\n7063,-7063,7062,7063,7065,-7059,7066,7069,7068,-7068,7070,7061,7067,-7069,7071,7073,7072,-7070,7072,7073,7074,-7071,7075,7073,7071,-7077,7073,7075,7077,-7075,7078,7075,7076,-7080,7077,7075,7078,-7081,7081,7083,7079,-7083,7081,7084,7080,-7084,7085,7081,7082,-7087,7081,7085,7087,-7085,7088,7085,7086,-7090,7088,7090,7087,-7086,7091,7088,7089,-7093,7090,7088,7091,-7094,7094,7095,7091,-7093,7093,7091,7095,-7097,7097,6928,7099,-7099,7100,7103,7102,-7102,7100,7101,6923,-6925,7082,7071,7069,-7087,7071,7082,7079,-7077,7089,7069,7066,-7093,7104,6953,6941,-6940,6950,6948,7106,-7106,7074,7084,7087,-7071,7084,7074,7077,-7081,7070,7090,7093,-7062,7096,7064,7061,-7094,7107,7108,7103,-7101,7100,6924,6932,-7108,7109,7110,6936,-6938,7109,7112,7111,-7111,7113,7116,7115,-7115,7117,7119,6979,-7119,7117,7120,6951,-7120,7056,7123,7122,-7122,7054,7039,7125,-7125,7126,7127,7046,-7051,7050,7046,7047,-7052,7128,7130,7129,-7030,7131,7132,7113,-7115,7031,7011,7012,-7028,7028,7027,7012,-7014,7028,7013,7018,-7024,7023,7018,7019,-7023,7133,7114,7115,-6985,7133,7005,7131,-7115,6990,7001,7004,-6986,6999,7000,6989,-6995,6995,6998,6999,-6995,6974,6978,6959,-6964,6964,6976,6974,-6964,6972,6976,6964,-6969,7122,7134,7034,-7122,6945,6942,6938,-6941,6947,6952,6945,-6941,7135,7138,7137,-7137,7138,7135,6931,-6931,7139,7134,7122,-7141,7142,7138,6930,-7142,7138,7142,7140,-7138,7140,7122,7123,-7138,7144,7142,7141,-7146,7142,7144,7139,-7141,7144,7147,7132,-7147,7146,7130,7128,-7140,7147,7148,7116,-7114,7111,7117,7118,-7117,7110,7111,7116,-7149,7148,7145,6936,-7111,7117,7111,7112,-7121,7146,7132,7149,-7131,7129,7130,7149,-7011,7106,6948,6953,-7151,7151,7150,6953,-7105,6933,7104,6939,-6927,7056,7057,7065,-7153,7063,7153,7152,-7066,7103,7108,7096,-7096,6942,6943,7154,-6935,6943,7109,6937,-7155,6943,6944,7112,-7110,7112,6944,6952,-7121,6927,7155,-7157,6971,6962,6960,-6976,6986,7002,6997,-6989,7014,7008,7024,-7026,7026,7009,7006,-7031,7127,7125,7037,-7042,7040,7052,7049,-7043,7049,7052,7124,-7127,7124,7125,7127,-7127,6990,6989,7000,-7002,6968,6969,6973,-6973,7095,7094,\n7102,-7104,7099,6929,6923,-7102,7102,7098,7099,-7102,7094,7157,7097,-7099,7153,7096,7108,-7137,7135,7107,6932,-6932,6942,6934,-6936,6949,6947,-6947,6954,6950,-6958,6950,6954,-6950,6960,6958,-6957,6958,6963,-6960,6964,6961,-6969,6965,6966,-7159,6969,6965,-7159,7158,6966,-6971,6973,7158,-6971,6969,7158,-6974,6967,6962,-6972,6971,6976,-6973,6975,6960,-6957,6974,6975,-6979,6979,6977,-7160,6980,7159,-7161,7159,6980,-6982,7161,6984,-7116,6984,7159,-6982,7160,6957,-6951,6957,7159,-6978,7161,7115,-7119,6986,6982,-6984,6982,6990,-6986,6987,6994,-6990,6993,6987,-6989,6991,6992,-7163,6995,6991,-7163,7162,6992,-6997,6998,7162,-6997,7162,6998,-6996,6997,6993,-6989,6999,6997,-7001,6983,7002,-6987,7001,7002,-7005,7006,7105,-7164,7105,7006,-6981,7164,7131,-7006,7005,7003,-7165,7007,7164,-7004,7010,7164,-7008,7149,7131,-7165,7006,7007,-6981,7007,7003,-6981,7024,7008,-7010,7008,7012,-7012,7014,7018,-7014,7015,7014,-7026,7016,7017,-7166,7019,7016,-7166,7165,7017,-7021,7022,7165,-7021,7165,7022,-7020,7021,7015,-7026,7023,7021,-7029,7009,7026,-7025,7031,7027,-7027,7030,7006,-7167,7166,7163,-7168,7163,7166,-7007,7166,7167,-7037,7036,7167,-7061,7166,7036,-7036,7040,7037,-7039,7125,7039,-7038,7041,7046,-7128,7045,7041,-7043,7043,7044,-7169,7047,7043,-7169,7168,7044,-7049,7051,7168,-7049,7168,7051,-7048,7049,7045,-7043,7050,7049,-7127,7052,7040,-7039,7124,7052,-7055,7060,7053,-7037,7053,7060,-7058,7059,7060,-7168,7065,7057,-7059,7066,7170,-7170,7170,7066,-7068,7061,7062,-7068,7062,7170,-7068,7170,7058,-7060,7058,7170,-7063,7068,7069,-7073,7070,7068,-7073,7078,7079,-7084,7080,7078,-7084,7097,7156,-6929,7099,6928,-6930,7086,7069,-7090,7157,7066,-7170,7066,7157,-7093,7171,7157,-7170,7157,7171,-7157,7156,7143,-6929,6927,7156,-7152,7151,7156,-7172,7104,6927,-7152,7171,7150,-7152,7150,7171,-7170,7169,7170,-7151,7160,6950,-7106,7167,7106,-7060,7106,7167,-7164,7106,7163,-7106,7105,6980,-7161,7059,7150,-7171,7150,7059,-7107,7070,7087,-7091,6944,6945,-6953,7120,6952,-6952,7121,7055,-7057,7056,7152,-7124,7152,7153,-7137,6955,7119,-6952,7034,7039,-7122,\n7054,7055,-7122,7034,7134,-7033,7032,7128,-7030,7136,7137,-7124,7129,7011,-7032,7031,7029,-7130,7123,7152,-7137,6959,7119,-6956,6985,7133,-6985,7133,6985,-7005,7004,7005,-7134,7160,7159,-6958,7011,7129,-7011,7054,7121,-7040,7148,7147,-7146,7147,7113,-7133,6933,6927,-7105,7147,7144,-7146,7132,7131,-7150,7144,7146,-7140,7128,7134,-7140,7032,7134,-7129,7010,7149,-7165,7118,7115,-7117,7161,7118,-6980,6978,6979,-7120,6959,6978,-7120,7159,6984,-7162,6979,7159,-7162,7033,7166,-7036,7030,7166,-7034,7174,6938,6942,-6936,7157,7156,-7098,7064,7153,-7064,7096,7153,-7065,7156,7155,-7144,6962,6967,-6962,7094,7098,-7103,7092,7157,-7095,7107,7136,-7109,7136,7107,-7136,5213,7141,6930,5198,-5212,5197,6931,-5209,5196,5208,6931,-6933,6923,5195,5196,-6925,5194,5300,6929,-6929,6928,7143,5193,-5195,7143,7155,5242,-5194,7155,6927,5192,-5243,5258,5205,5192,6927,-6934,5202,5203,7174,-6936,6935,6934,5201,-5203,5209,5201,6934,-7155,5199,7172,6936,-7146,5213,5199,7145,-7142,7172,7173,6937,-6937,7173,5209,7154,-6938,5196,6932,-6925,6930,6931,5197,-5199,6923,6929,5300,-5196,5259,5258,6933,-6927,6925,5204,5259,-6927,6925,6938,-7175,6925,7174,5203,-5205,6553,6551,6506,-6508,5482,5353,-6846,5476,6503,6816,-6708,5347,5349,-5378,6501,5330,5331,-5749,6501,5748,5749,-5469,5751,5816,5809,-6497,6586,5910,-5768,5892,6497,6498,-5911,7177,7184,7183,7175,-7177,7177,7178,7185,-7185,7178,7179,7186,-7186,7180,7181,7179,-7183,7181,7187,7186,-7180,7572,7573,7183,-7185,7571,7572,7184,-7186,7570,7571,7185,-7187,7569,7570,7186,-7204,7193,7175,7183,-7195,7183,7573,7574,-7195,7188,7189,7196,-7198,7196,7189,7190,-7199,7190,7191,7199,-7199,7191,7192,7200,-7200,7568,7569,7203,-7203,7202,7203,7187,-7205,7205,7181,7180,-7207,7206,7180,7207,-7209,7209,7193,7194,-7211,7194,7574,7575,-7211,7211,7195,7212,-7214,7213,7212,7197,-7215,7197,7196,7215,-7215,7215,7196,7198,-7217,7198,7199,7217,-7217,7217,7199,7200,-7219,7200,7219,7220,-7219,7220,7219,7201,-7222,7567,7568,7202,-7223,7222,7202,7204,-7224,7224,7205,7206,-7226,7225,7206,7208,-7227,7209,7296,7294,-7250,7227,7211,7213,-7229,\n7213,7214,7229,-7229,7215,7229,-7215,7230,7216,7217,-7232,7231,7217,7218,-7233,7233,7220,7221,-7235,7221,7567,7564,-7235,7222,7223,7235,-7258,7236,7224,7225,-7238,7237,7225,7226,-7239,7175,7239,7240,-7177,7241,7242,7243,-7245,7242,7245,7246,-7244,7247,7207,7180,-7183,7193,7248,7239,-7176,7209,7249,7248,-7194,7239,7250,7251,-7241,7241,7252,7253,-7243,7242,7253,7254,-7246,7248,7255,7250,-7240,7249,7256,7255,-7249,7204,7181,-7206,7223,7204,7205,-7225,7258,7241,7244,-7260,7260,7259,7244,-7244,7260,7243,7246,-7262,7262,7261,7246,-7246,7245,7254,7263,-7263,7258,7264,7252,-7242,7258,7259,7176,-7241,7259,7260,7178,-7178,7260,7261,7179,-7179,7261,7262,7247,-7183,7264,7258,7240,-7252,7262,7263,7265,-7248,7266,7267,7268,-7270,7270,7271,7269,-7269,7267,7266,7272,-7274,7274,7275,7276,-7278,7278,7279,7277,-7281,7275,7281,7282,-7277,7283,7282,7284,-7286,7286,7287,7280,-7289,7289,7286,7288,-7273,7207,7266,7269,-7209,7250,7275,7274,-7252,7252,7279,7278,-7254,7253,7278,7287,-7255,7290,7291,7266,-7208,7265,7289,7291,-7291,7255,7281,7275,-7251,7256,7284,7281,-7256,7295,7285,7284,-7257,7264,7292,7279,-7253,7254,7287,7286,-7264,7251,7274,7292,-7265,7263,7286,7289,-7266,7256,7249,7294,-7296,7233,7232,7218,-7221,7224,7236,7235,-7224,7226,7271,-7239,7187,7203,-7187,7188,7212,-7196,7188,7197,-7213,7192,7219,-7201,7192,7201,-7220,7247,7290,-7208,7176,7259,-7178,7179,7261,-7183,7287,7278,-7281,7291,7289,-7273,7281,7284,-7283,7279,7292,-7278,7274,7277,-7293,7208,7269,-7227,7290,7247,-7266,7291,7272,-7267,7271,7226,-7270,7204,7187,-7182,7297,7296,7209,-7211,7293,7297,7210,-7576,7282,7283,7298,-7277,7276,7298,7299,-7278,7277,7299,7300,-7281,7288,7280,7300,7301,-7273,7272,7301,7302,-7274,7273,7302,7303,-7268,7267,7303,7270,-7269,7495,7329,7331,7330,-7504,7341,7520,7519,-7519,7517,7516,7347,-7346,7532,7347,-7517,7232,7494,7493,7354,-7232,7354,7493,7492,-7356,7505,7390,7391,-7345,7359,7358,7341,-7346,7360,7359,7345,-7348,7526,7527,7347,-7533,7498,7497,7233,-7235,7257,7499,7498,-7565,7376,7543,7542,-7484,7449,7371,7370,-7451,7524,7523,7515,-7515,7529,\n7456,7374,-7531,7456,7455,7375,-7375,7467,7462,7461,-7464,7481,7467,7463,-7481,7379,7451,7450,-7371,7513,7525,7524,-7515,7531,7530,7374,-7382,7382,7381,7374,-7376,7537,7536,7525,-7514,7355,7489,7488,-7230,7370,7372,7380,-7380,7371,7458,7372,-7371,7311,7324,7393,-7393,7312,7325,7395,-7395,7313,7396,7395,-7326,7313,7310,7397,-7397,7319,7399,7398,-7310,7327,7401,7400,-7322,7328,7402,7401,-7328,7308,7403,7402,-7329,7308,7304,7404,-7404,7326,7407,7405,-7306,7311,7392,7406,-7318,7318,7408,7407,-7327,7317,7406,7444,-7317,7315,7410,-7455,7315,7314,7412,-7411,6873,6846,7546,-7414,6797,7414,7415,-6880,6767,7432,7416,-6770,6769,7416,7417,-6799,6799,6765,7453,-7419,6799,7418,7419,-6801,7310,7309,7398,-7398,7321,7423,7422,-7321,7331,7329,7392,-7394,7395,7333,7330,-7395,7396,7335,7333,-7396,7397,7337,7335,-7397,7339,7340,7398,-7400,7343,7423,7400,-7535,7346,7342,7401,-7403,7348,7346,7402,-7404,7349,7348,7403,-7405,7407,7350,7351,-7406,7392,7329,7353,-7407,7357,7339,7399,-7425,7361,7350,7407,-7409,7406,7353,7445,-7445,7362,7425,7444,-7446,7544,7543,7376,-7412,7410,7375,7455,-7455,7412,7382,7375,-7411,7545,7383,7413,-7547,7384,7385,7415,-7415,7431,7386,7416,-7433,7386,7387,7417,-7417,7452,7388,7418,-7454,7388,7389,7419,-7419,7420,7426,7548,-7548,7426,7420,7421,-7449,7442,7441,7428,-7369,7398,7340,7337,-7398,7440,7439,7371,-7450,7427,7390,7439,-7441,7422,7391,7390,-7428,7423,7343,7391,-7423,7499,7257,7235,-7237,7409,7425,7362,-7364,7323,7425,7409,-7323,7448,7539,7381,-7427,7434,7433,7454,-7456,7471,7474,7581,-7583,7355,7492,7491,-7490,7344,7391,-7344,7400,7423,-7322,7381,7382,7548,-7427,7368,7428,7429,-7370,7430,7378,7369,-7430,7385,7431,7432,-7416,6879,7415,7432,-6768,7306,7307,7433,7408,-7319,7433,7434,7361,-7409,7361,7434,7435,-7527,7435,7528,7527,-7527,7360,7436,7437,-7360,7359,7437,7438,-7359,7504,7439,7390,-7506,7441,7442,7357,-7425,7444,7425,7323,-7317,7394,7330,7331,-7394,7324,7312,7394,-7394,7404,7304,7305,-7406,7351,7349,7404,-7406,7447,7508,7509,-7374,7581,7474,7475,-7581,7578,7477,7476,-7578,7479,7481,7480,-7479,7387,7452,\n7453,-7418,6765,6798,7417,-7454,7307,7315,7454,-7434,7434,7455,7456,-7436,7435,7456,7529,-7529,7438,7515,7523,-7523,7458,7371,7439,-7505,7428,7459,7460,-7430,7460,7577,7576,-7430,7578,7579,7449,-7478,7463,7461,7429,-7577,7429,7461,7462,-7431,7480,7576,7450,-7479,7431,7465,7464,-7387,7386,7464,7466,-7388,7468,7428,7441,-7470,7471,7427,7440,-7475,7399,7472,7470,-7425,7427,7471,7473,-7423,7422,7473,7583,-7585,7469,7441,7424,-7471,7474,7440,7449,-7476,7580,7475,7449,-7580,7476,7450,7576,-7578,7450,7476,7477,-7450,7451,7479,7478,-7451,7387,7466,7482,-7453,7473,7471,7582,-7584,7320,7422,7584,-7586,7377,7484,7562,-7564,7366,7485,7486,-7368,7367,7486,7487,-7444,7356,7443,7487,7488,-7490,7490,7338,-7492,7492,7336,7490,-7492,7493,7334,7336,-7493,7494,7332,7334,-7494,7495,7503,-7497,7497,7352,7495,-7497,7498,7446,7352,-7498,7498,7499,7365,-7447,7365,7499,7236,7237,-7365,7542,7500,7501,-7484,7483,7559,7383,-7546,7503,7332,7494,-7497,7338,7356,7489,-7492,7358,7438,7522,-7522,7358,7521,7520,-7342,7448,7421,7506,-7508,7447,7539,7538,-7509,7457,7373,7509,-7511,7457,7510,7437,-7437,7507,7506,7511,-7513,7508,7538,7537,-7514,7509,7508,7513,-7515,7515,7510,7509,-7515,7437,7510,7515,-7439,7536,7535,-7526,7527,7528,7436,-7361,7528,7529,7457,-7437,7457,7529,7530,-7374,7447,7373,7530,-7532,7539,7447,-7532,7527,7360,-7348,7526,7532,-7534,7533,7532,7516,7348,-7350,7369,7378,7377,7563,-7367,7368,7369,7366,-7368,7357,7442,7443,-7357,7339,7357,7356,-7339,7340,7339,7338,-7491,7337,7340,7490,-7337,7335,7337,7336,-7335,7333,7335,7334,-7333,7330,7333,7332,-7504,7483,7501,7502,-7560,7365,7364,7363,-7363,7446,7365,7362,-7446,7352,7446,7445,-7354,7495,7352,7353,-7330,7350,7361,7526,-7534,7349,7351,7350,-7534,7517,7346,7348,-7517,7342,7346,7517,-7519,7342,7534,7400,-7402,7534,7342,7518,-7520,7344,7343,7534,-7520,7344,7519,-7521,7505,7344,7520,-7522,7504,7505,7521,-7523,7458,7504,7522,-7524,7372,7458,7523,-7525,7535,7380,7372,7524,-7526,7419,7389,7512,-7512,6883,6800,7419,-7512,7539,7448,7507,-7539,7539,7531,-7382,7540,7561,7562,-7485,7384,7541,7484,-7378,\n7384,7377,7378,-7386,7431,7385,7378,-7431,7465,7431,7430,-7463,7464,7465,7462,-7468,7466,7464,7467,-7482,7482,7466,7481,-7480,7452,7482,7479,-7452,7388,7452,7451,-7380,7389,7388,7379,-7381,7389,7380,7535,7536,-7513,7512,7536,-7538,7538,7507,7512,-7538,7484,7541,-7541,6881,6880,6882,7544,-7412,7542,7364,7237,7238,-7501,7363,7364,7542,-7544,7409,7363,7543,-7545,6882,7322,7409,-7545,7459,7428,7579,-7579,7511,7506,6872,-6884,7376,7545,7546,-7412,6846,6881,7411,-7547,7442,7368,7367,-7444,7548,7382,7412,-7548,7314,7547,-7413,7414,7553,7554,-7385,6797,6850,7553,-7415,7541,7384,7554,-7556,7540,7541,7555,-7557,7561,7540,7556,7566,-7286,7550,7549,7557,-7559,7502,7551,7550,-7559,7560,7552,7501,-7501,7549,6770,6766,-7558,7554,7553,7549,-7551,7555,7554,7550,-7552,7556,7555,7551,-7553,6766,6873,7413,-7558,7413,7383,7558,-7558,7558,7383,-7560,7502,7501,7552,-7552,7556,7552,7560,-7567,7271,7565,7560,-7501,7485,7562,7561,7295,-7295,7563,7562,7485,-7367,7231,7354,-7231,7229,7230,7354,-7356,7487,7293,-7228,7564,7498,-7235,7488,7228,-7230,7488,7487,7227,-7229,7232,7233,7497,7496,-7495,7487,7486,7296,7297,-7294,7303,7565,7271,-7271,7303,7302,7301,-7566,7561,7285,-7296,7283,7285,7566,7299,-7299,7566,7560,7565,-7300,7485,7294,7296,-7487,7565,7301,7300,-7300,7257,7564,7567,-7223,7221,7201,7568,-7568,7201,7192,7569,-7569,7570,7569,7192,-7192,7571,7570,7191,-7191,7189,7572,7571,-7191,7188,7573,7572,-7190,7574,7573,7188,-7196,7575,7574,7195,-7212,7227,7293,7575,-7212,7271,7500,-7239,7230,7229,7215,-7217,7576,7480,-7464,7459,7578,7577,-7461,7468,7580,7579,-7429,7469,7581,7580,-7469,7470,7582,7581,-7470,7472,7583,7582,-7471,7399,7584,7583,-7473,7319,7585,7584,-7400,7517,7345,7341,-7519,7549,7553,-6851,7549,6850,-6771,7586,7589,7588,-7588,7587,7588,7591,-7591,7590,7591,7761,-7593,7594,7595,7587,-7591,7596,7594,7590,-7593,7597,7596,7592,-7594,7600,7639,7599,-7599,7601,7595,7594,-7603,7602,7594,7596,-7604,7603,7596,7597,-7605,7605,7601,7602,-7607,7606,7602,7603,-7608,7607,7603,7604,-7609,7599,7636,7610,-7599,7589,7586,7598,-7612,7595,7600,7586,-7588,\n7601,7639,7600,-7596,7612,7615,7614,-7614,7616,7614,7615,-7618,7618,7616,7617,-7620,7620,7618,7619,-7622,7622,7617,7615,-7624,7624,7619,7617,-7623,7625,7621,7619,-7625,7626,7629,7628,-7628,7622,7623,7631,-7631,7624,7622,7630,-7633,7625,7624,7632,-7634,7630,7631,7605,-7607,7632,7630,7606,-7608,7633,7632,7607,-7609,7634,7638,7627,-7629,7628,7612,7613,-7636,7623,7615,7612,-7630,7623,7629,7626,-7632,7626,7627,7609,-7726,7599,7609,7637,-7637,7637,7609,7627,-7639,7609,7599,7639,-7726,7640,7643,7642,-7642,7644,7642,7643,-7646,7646,7644,7645,-7648,7648,7645,7643,-7650,7650,7647,7645,-7649,7597,7593,7647,-7651,7651,7654,7653,-7653,7648,7649,7656,-7656,7650,7648,7655,-7658,7597,7650,7657,-7605,7655,7656,7659,-7659,7657,7655,7658,-7661,7604,7657,7660,-7609,7662,7684,7652,-7654,7641,7663,7653,-7641,7649,7643,7640,-7655,7649,7654,7651,-7657,7664,7667,7666,-7666,7668,7669,7671,-7671,7670,7671,7620,-7622,7672,7673,7665,-7669,7674,7672,7668,-7671,7625,7674,7670,-7622,7675,7678,7677,-7677,7679,7673,7672,-7681,7680,7672,7674,-7682,7681,7674,7625,-7634,7659,7679,7680,-7659,7658,7680,7681,-7661,7660,7681,7633,-7609,7676,7686,7682,-7676,7675,7683,7667,-7665,7673,7678,7664,-7666,7677,7678,7673,-7680,7685,7661,7652,-7685,7676,7661,7685,-7687,7588,7589,7687,-7689,7591,7588,7688,-7690,7687,7589,7611,-7691,7690,7611,7610,-7692,7613,7614,7692,-7694,7614,7616,7694,-7693,7616,7618,7695,-7695,7618,7620,7696,-7696,7635,7613,7693,-7698,7634,7635,7697,-7699,7636,7637,7699,-7701,7610,7636,7700,-7692,7699,7637,7638,-7702,7701,7638,7634,-7699,7641,7642,7830,-7703,7642,7644,7703,-7831,7644,7646,7704,-7704,7663,7641,7702,-7706,7662,7663,7705,-7707,7666,7667,7707,-7709,7669,7666,7708,-7710,7671,7669,7709,-7711,7620,7671,7710,-7697,7707,7667,7683,-7712,7711,7683,7682,-7713,7714,7685,7684,-7714,7713,7684,7662,-7707,7686,7685,7714,-7716,7682,7686,7715,-7713,7586,7600,-7599,7598,7610,-7612,7612,7628,-7630,7628,7635,-7635,7640,7653,-7655,7653,7663,-7663,7664,7678,-7676,7675,7682,-7684,7723,7722,7720,-7725,7716,7720,7719,-7719,7719,7721,7710,-7719,7710,7721,\n7722,-7697,7696,7722,7723,-7696,7723,7724,7717,-7696,7717,7724,7720,-7717,7720,7722,7721,-7720,7725,7605,7631,-7627,7639,7601,7605,-7726,7661,7726,7651,-7653,7726,7659,7656,-7652,7677,7679,7659,-7727,7661,7676,7677,-7727,7665,7666,7669,-7669,9871,9872,7795,-7795,7890,7879,7732,-7892,7793,7792,7748,-7735,7900,7729,7728,-7746,7736,7731,-7736,7796,7795,9872,-9874,7749,7750,7751,-7753,7736,7735,7750,-7750,7753,7734,7748,-7755,7751,7753,7754,-7753,7755,7749,7752,-7757,7757,7736,7749,-7756,7754,7748,7747,-7759,7752,7754,7758,-7757,7755,7756,7759,-7761,7790,7758,7747,-7792,7789,7756,7758,-7791,7764,7762,7746,-7745,7765,7763,7762,-7765,7849,7766,-7768,7759,7788,7787,-7770,7764,7744,7743,-7771,7765,7764,7770,-7769,7766,7760,7759,7769,-7772,7704,7767,7766,-7772,7786,7785,7741,-7773,7787,7786,7772,-7770,7739,7773,7774,-7739,7775,7776,7740,-7738,7773,7777,7778,-7775,7778,7777,7776,-7776,7775,7737,7738,-7775,7759,7756,7789,-7789,7771,7769,7777,-7774,7776,7772,7741,-7741,7777,7769,7772,-7777,7753,7750,7735,-7735,7730,7729,7900,-7900,7745,7728,7879,-7891,7742,7740,7741,-7786,7792,7791,7747,-7749,7891,7732,7985,-7985,9860,7784,7733,-9860,7742,7903,9859,-7734,9880,7731,7877,-9880,7753,7751,-7751,7774,7778,-7776,7977,7843,7839,-7979,7976,7844,7843,-7978,7844,7976,7975,-7846,7845,7975,7974,-7881,7880,7974,7973,-7847,7782,7783,7987,-7974,7743,7903,7742,-7786,7901,7770,7743,7785,-7787,7904,7901,7786,-7788,7788,7905,7904,-7788,7789,7906,7905,-7789,7906,7789,7790,-7908,7746,7762,7907,7790,-7792,9870,7746,7791,-7793,7793,9869,9870,-7793,7793,7873,9868,-9870,7878,9867,9868,-7874,7908,7820,7883,-7883,7948,7848,7855,-7855,9887,9888,7802,-7886,7310,7694,7695,7717,-7310,7848,7318,7326,-7856,7812,9883,9884,-7854,7818,7996,7997,-7888,7802,7804,7886,-7886,7698,7868,7867,-7806,7868,7698,7697,-7870,7325,7312,7693,-7693,7911,7943,7942,-7913,7915,7916,7911,-7913,7913,7919,7918,-7915,7915,7918,7919,-7917,7914,7935,7917,-7914,7315,7307,7306,7798,7941,-7315,7322,7937,7317,7316,-7324,7920,7922,7932,-7922,7809,7852,7851,-7811,9883,7948,7854,-9885,7936,7925,\n7924,-7924,7851,8000,7811,-7811,7866,7865,7803,-7815,7814,7998,7999,-7867,7867,7999,7998,-7806,7887,7886,7804,-7819,7712,7715,7714,7882,-7798,7862,7861,7797,-7818,7883,7820,7819,-7885,9885,9886,7801,-7865,7815,7700,-7889,7815,7996,7995,-7829,7925,7936,7947,-7947,7946,7947,9882,-9882,9881,9882,7929,-7927,7926,7929,7928,-7928,7931,7930,7927,-7929,7930,7931,7932,-7923,7585,7716,7718,-7321,6872,7506,7909,-6876,7896,7895,9898,-7825,9899,9900,7980,-7828,7897,7992,7991,-7875,7828,7995,7994,-7878,7824,7991,7992,-7897,7895,7894,7829,-9899,7889,7705,7847,-7861,7689,7688,7731,-7737,7738,7703,-7740,9890,7834,7833,-9890,7835,7838,7837,-7837,7836,7994,7995,-7836,7838,7833,7834,-7838,9863,7823,9892,-9894,7821,7822,9864,-9866,9865,9866,7993,-7822,7823,9863,9864,-7823,7829,7894,9894,-9896,7990,7989,7979,-7876,7980,7989,7990,-7828,7981,7841,9896,-9898,7995,7996,7818,-7836,7835,7818,7804,-7839,7838,7804,7802,-7834,7833,7802,9888,-9890,7827,7990,7991,-7825,7824,9898,9899,-7828,9896,7841,7829,-9896,7871,7872,7858,-7858,7690,7691,7815,-7829,7933,7917,7935,-7935,7310,7313,-7695,7717,7319,-7310,7718,7710,7327,-7322,7718,7321,-7321,7853,7852,7809,-7813,7865,7864,7801,-7804,9899,7841,7981,-9901,7839,7843,7730,-7728,7844,7729,7730,-7844,7729,7844,7845,-7729,7728,7845,7880,-7880,7879,7880,7846,-7733,7846,7986,7985,-7733,7796,7860,7847,-7796,7795,7847,7830,-7795,7703,7704,-7740,7862,7817,7816,-7864,7761,7760,-7850,7760,7766,-7850,7311,7813,7850,-7325,7694,7313,7325,-7693,7687,7828,7877,7731,-7689,7592,7761,7849,-7594,7593,7849,7767,7646,-7648,7773,7739,7704,-7772,7689,7736,7757,7761,-7592,7697,7693,-7870,7850,7867,7868,-7325,7866,7999,8000,-7852,7865,7866,7851,-7853,7864,7865,7852,-7854,9884,9885,7864,-7854,7862,7863,7854,-7856,7305,7855,-7327,7892,7871,7857,-7894,7856,7870,9861,-9863,7831,7832,9890,-9890,7819,7831,9889,-9889,7884,7819,9888,-9888,7856,9862,9893,-9893,7893,7857,9895,-9895,7831,7819,7820,-7861,7796,7832,7831,-7861,7711,7712,7797,-7862,7711,7861,7305,-7305,7308,7707,-7305,7708,7707,-7309,7328,7709,7708,-7309,7869,7324,-7869,7693,\n7312,7324,-7870,7982,7858,7872,-7984,7832,7796,9873,-9875,7832,9874,9891,-9891,7834,9890,9891,-9876,7837,7834,9875,-9877,7836,7837,9876,-9878,7994,7836,9877,-9879,7875,7839,7727,-7875,7979,7978,7839,-7876,7730,7899,7898,-7728,9880,7734,7735,-7732,7874,7727,7898,-7898,7882,7883,7817,-7798,7817,7883,7884,-7817,9886,7816,7884,-9888,9886,9887,7885,-7802,7886,7803,7801,-7886,7814,7803,7886,-7888,7887,7997,7998,-7815,7714,7713,7908,-7883,7701,7805,-7889,7705,7889,-7707,7891,7984,9860,-9860,7898,7899,9869,-9869,7768,7770,-7902,7744,7902,-7744,7768,7901,-7905,7904,7905,7765,-7769,7906,7763,7765,-7906,7763,7906,7907,-7763,7702,7830,-7848,7706,7889,7908,-7714,7705,7702,-7848,7701,7698,-7806,7699,7701,-7889,7700,7699,-7889,7815,7691,-7701,7755,7760,7761,-7758,7767,7704,-7647,7912,7942,7941,-7945,7911,7916,6878,-6875,6876,7919,7913,-6764,7914,7918,7938,-7807,7943,6877,6875,-7910,7916,7919,6876,-6879,7808,7935,7914,-7807,7917,6764,6763,-7914,7915,7807,7938,-7919,7915,7912,7944,-7808,7317,7920,7921,-7312,7311,7921,7932,-7814,7848,7936,7923,-7319,7318,7923,7924,-7307,7306,7924,7925,-7799,7947,7936,7848,-7949,9882,7947,7948,-9884,7929,9882,9883,-7813,7800,7939,7926,-7928,7929,7809,7810,-7929,7927,7930,7799,-7801,7810,7811,7931,-7929,7922,7920,7317,7937,7799,-7931,7813,7932,7931,-7812,6882,7933,7934,-7323,7934,7935,7808,-7323,7933,6882,6764,-7918,7925,7946,7945,-7799,7421,7420,7547,7910,-7910,7319,7717,7716,-7586,7850,7813,7811,-8001,7999,7867,7850,-8001,7888,7805,7998,-7998,7815,7888,7997,-7997,9879,7877,7994,-9879,9867,7878,7993,-9867,7990,7875,7874,-7992,9881,7926,7939,-7941,7910,7314,7941,-7943,7943,7909,7910,-7943,7940,7945,7946,-9882,7799,7950,7949,-7801,7940,7951,7952,-7946,7953,7944,7941,-7955,7955,7956,7807,-7945,7957,7958,7808,-7807,7959,7806,7938,-7961,7961,7938,7807,-7963,7800,7963,7964,-7940,7954,7941,7798,-7966,7965,7798,7945,-7967,7322,7967,7968,-7938,7937,7968,7969,-7800,7808,7970,7967,-7323,7939,7972,7971,-7941,7314,7910,-7548,7506,7421,-7910,7968,7967,7970,-7970,7969,7970,7808,-7800,7799,7808,7958,-7951,7950,7958,\n7957,-7950,7949,7957,7806,-7801,7800,7806,7959,-7964,7963,7959,7960,-7965,7964,7960,7938,-7940,7939,7938,7961,-7973,7972,7961,7962,-7972,7971,7962,7807,-7941,7940,7807,7956,-7952,7951,7956,7955,-7953,7952,7955,7944,-7946,7945,7944,7953,-7967,7966,7953,7954,-7966,7973,7974,7881,-7783,7974,7975,7781,-7882,7976,8001,7781,-7976,8001,7976,7977,-7781,7779,7780,7977,-7979,7876,7779,7978,-7980,7979,7989,7988,-7877,7825,7988,7989,-7981,7980,9900,7826,-7826,7981,7842,7826,-9901,7842,7981,9897,-7841,7973,7987,7986,-7847,7870,7784,9860,-9862,7985,7871,7892,-7985,7986,7872,7871,-7986,7983,7872,7986,-7988,7902,7903,-7744,7745,7890,7903,-7903,7828,7687,-7691,7860,7820,7908,-7890,7305,7862,-7856,8002,8003,8004,-8006,8007,8003,8014,-8016,8016,8492,8521,-8521,7781,8074,8523,-7882,8075,8001,7780,-8077,8022,8014,8003,-8003,8023,8024,8014,-8023,8074,7781,8001,-8076,8024,8023,8011,-8014,8018,8021,8076,-8078,8482,8489,8024,-8014,8015,8481,8480,-8018,8519,8530,8016,-8521,8526,8525,8482,-8014,8031,8032,8033,-8009,8509,8508,8010,-8038,8483,8525,8526,-8028,8038,8039,8005,-8005,8039,8038,8040,-8042,8004,8006,8042,-8039,8043,8032,8044,-8046,8010,8508,8025,-8031,8029,8031,8008,-8031,8047,8046,8002,-8006,8050,8049,8012,-8012,8016,8064,8243,-8493,8009,8054,8053,-8038,8046,8065,8022,-8003,8065,8051,8023,-8023,8051,8050,8011,-8024,8049,8529,8528,-8013,8066,8063,8029,-8029,8052,8055,8032,-8032,8053,8510,8509,-8038,8057,8047,8005,-8040,8056,8059,8040,-8070,8058,8057,8039,-8042,8060,8056,8069,-8043,8048,8060,8042,-8007,8055,8062,8044,-8033,8068,8061,8043,-8046,8063,8052,8031,-8030,8059,8058,8041,-8041,8062,8068,8045,-8045,8070,8035,8034,-8072,8004,8522,-8007,8526,8013,8011,8012,-8528,8009,8037,-8011,8024,8481,8015,-8015,7782,7881,8523,8073,-8073,8027,8526,8527,-8026,8015,8017,-8008,8069,8040,-8039,8042,8069,-8039,8033,8032,-8044,8009,8033,-8044,8009,8043,8061,-8055,8026,8484,8483,-8028,8072,8070,8071,7783,-7783,8073,8035,8070,-8073,8073,8523,8524,-8036,8074,8019,8524,-8524,8075,8020,8019,-8075,8020,8075,8076,-8022,8077,8076,7780,-7780,8081,8080,8486,\n-8486,8485,8532,8533,-8082,8078,8079,8084,-8086,8472,8083,8488,-8488,8090,8474,8473,-8083,8085,8530,8531,-8079,8036,8514,-8514,8085,8084,8087,-8087,8474,8090,8089,-8476,8086,8016,8530,-8086,8514,8036,8067,-8516,8493,8094,8093,-8495,8080,8081,7825,-7827,7783,8071,8511,-7860,7840,8083,8472,-7843,8016,8086,8095,-8065,8095,8086,8087,-8097,8475,8089,8097,-8477,8515,8067,8494,-8094,8098,8101,8100,-8100,8396,8391,8392,-8396,8102,8105,8104,-8104,8399,8400,8397,-8399,8106,8109,8108,-8108,8403,8404,8401,-8403,8110,8113,8112,-8112,8113,8115,8114,-8113,8117,8112,8114,-8117,8118,8101,8120,-8120,8121,8124,8123,-8123,8125,8128,8127,-8127,8129,8130,8127,-8129,8104,8105,8132,-8132,8133,8136,8135,-8135,8135,8136,8138,-8138,8139,8142,8141,-8141,8143,8144,8142,-8140,8145,8148,8147,-8147,8149,8152,8151,-8151,8153,8147,8148,-8155,8155,8151,8152,-8157,8157,8160,8159,-8159,8161,8162,8160,-8158,8162,8164,8163,-8161,8163,8165,8159,-8161,8166,8167,8165,-8164,8164,8168,8166,-8164,8169,8166,8168,-8171,8171,8167,8166,-8170,8172,8175,8174,-8174,8173,8174,8177,-8177,8181,8180,8179,-8179,8174,8183,8182,-8178,8499,8185,8184,-8501,8503,8502,8187,-8187,8188,8191,8190,-8190,8192,8195,8194,-8194,8194,8135,8137,-8194,8196,8156,8152,-8198,8198,8197,8152,-8150,8199,8202,8201,-8201,8203,8206,8205,-8205,8207,8210,8209,-8209,8208,8209,8212,-8212,8213,8216,8215,-8215,8217,8213,8219,-8219,8220,8223,8222,-8222,8224,8221,8188,-8226,8226,8227,8224,-8226,8529,8049,8228,-8227,8226,8228,8229,-8228,8230,8050,-8052,8230,8231,8211,-8233,8211,8231,8233,-8209,8223,8235,8234,-8223,8236,8232,8211,-8213,8237,8240,8239,-8239,8046,8243,8242,-8242,8245,8243,8064,8095,-8245,8246,8242,8243,-8246,8476,8097,8248,-8478,8479,8478,8251,-8251,8251,8254,8253,-8251,8097,8093,8094,-8249,8497,8257,8185,-8499,8258,8239,8240,-8260,8260,8255,8256,-8262,8219,8213,8214,-8263,8259,8264,8263,-8259,8265,8207,8208,-8234,8151,8155,8154,-8149,8266,8267,8204,-8206,8205,8269,8268,-8267,8216,8271,8270,-8216,8272,8273,8234,-8272,8274,8143,8139,-8276,8275,8139,8140,-8277,8277,8131,8279,-8279,8281,8406,8405,\n-8281,8150,8151,8148,-8146,8066,8225,8282,-8092,8282,8496,8495,-8092,8119,8283,8284,-8119,8285,8287,8207,-8287,8288,8290,8238,-8290,8291,8288,8289,-8293,8292,8294,8293,-8292,8194,8295,8134,-8136,8296,8295,8194,-8196,8501,8298,8187,-8503,8175,8297,8183,-8175,8120,8115,8165,-8168,8159,8165,8115,-8114,8158,8159,8113,-8111,8146,8106,8107,-8146,8145,8107,8299,-8151,8150,8299,8300,-8150,8149,8300,8103,-8199,8140,8141,8104,-8132,8276,8140,8131,-8278,8137,8138,8301,-8130,8137,8129,8128,-8194,8192,8193,8128,-8126,8302,8504,8503,-8187,8177,8182,8124,-8122,8176,8177,8121,-8284,8119,8120,8167,-8172,8143,8274,8303,-8219,8144,8143,8218,-8220,8196,8144,8219,-8263,8156,8203,8204,-8156,8155,8204,8267,-8155,8161,8287,8304,-8163,8168,8164,8290,-8289,8170,8168,8288,-8292,8291,8293,8172,-8171,8178,8179,8297,-8176,8501,8500,8184,-8299,8296,8305,8191,-8296,8134,8295,8191,-8222,8411,8414,8415,-8411,8417,8418,8419,-8417,8170,8172,8173,-8170,8169,8173,8176,-8172,8196,8197,8142,-8145,8197,8198,8141,-8143,8206,8214,8215,-8270,8228,8230,8232,-8230,8236,8307,8229,-8233,8244,8247,8252,-8246,8245,8252,8249,-8247,8203,8262,8214,-8207,8308,8309,8260,-8262,8270,8310,8269,-8216,8420,8422,8423,-8422,8311,8181,8178,-8313,8103,8104,8141,-8199,8171,8176,8283,-8120,8196,8262,8203,-8157,8172,8312,8178,-8176,8284,8315,8314,-8314,8319,8117,8116,-8321,8321,8324,8323,-8323,8341,8346,8343,-8345,8325,8328,8327,-8327,8359,8357,8313,-8315,8330,8321,8322,-8330,8329,8322,8323,-8318,8324,8126,8317,-8324,8126,8324,8321,-8331,8338,8333,8334,-8338,8331,8334,8333,-8333,8469,8331,8332,-8471,8122,8123,8336,-8336,8335,8338,8337,-8123,8341,8344,8340,-8340,8342,8340,8344,-8344,8345,8342,8343,-8347,8339,8345,8346,-8342,8328,8347,8318,-8328,8325,8348,8347,-8329,8326,8320,8348,-8326,8327,8318,8320,-8327,8349,8356,8350,-8115,8116,8114,8350,-8352,8352,8116,8351,-8354,8354,8352,8353,-8356,8349,8354,8355,-8357,8118,8284,8313,-8358,8357,8100,8101,-8119,8329,8331,8469,-8331,8329,8347,8342,8345,8334,-8332,8342,8347,8348,-8341,8340,8348,-8353,8334,8345,-8359,8353,8351,8350,-8357,8359,8314,\n8315,-8359,8358,8361,8360,-8360,8359,8360,8100,-8358,8339,8354,8361,8358,-8346,8361,8098,8099,-8361,8361,8354,8349,-8099,8363,8429,8430,-8363,8365,8432,8433,-8365,8438,8436,8435,-8438,8367,8102,8394,-8367,8370,8385,8369,-8369,8371,8374,8373,-8373,8375,8388,8376,-8317,8377,8393,8427,-8379,8386,8387,8390,-8382,8319,8389,8384,-8118,8368,8375,8130,-8414,8385,8373,8387,-8387,8369,8382,8389,-8389,8367,8371,8279,-8133,8377,8378,-8380,8109,8381,8390,-8109,8384,8383,8434,-8112,8373,8385,-8371,8370,8372,-8374,8378,8426,8431,-8381,8391,8394,8393,-8393,8377,8395,8392,-8394,8395,8377,8366,-8397,8366,8394,8391,-8397,8385,8386,8398,-8398,8399,8398,8386,-8383,8369,8400,8399,-8383,8369,8385,8397,-8401,8388,8389,8402,-8402,8403,8402,8389,-8320,8376,8404,8403,-8320,8376,8388,8401,-8405,8281,8280,8379,-8388,8406,8281,8387,-8374,8405,8406,8373,-8375,8405,8374,8379,-8281,8407,8132,8105,-8409,8105,8102,8409,-8409,8367,8306,8409,-8103,8407,8306,8367,-8133,8410,8413,8412,-8412,8412,8370,8414,-8412,8370,8368,8415,-8415,8410,8415,8368,-8414,8416,8419,8130,-8376,8316,8417,8416,-8376,8316,8127,8418,-8418,8418,8127,8130,-8420,8420,8421,8278,-8280,8371,8422,8420,-8280,8422,8371,8372,-8424,8421,8423,8372,-8279,8424,8427,8426,-8426,8426,8378,8428,-8426,8378,8427,8424,-8429,8429,8431,8108,-8431,8362,8430,8108,-8391,8363,8380,8431,-8430,8109,8434,8433,-8433,8364,8433,8434,-8384,8381,8365,8364,-8384,8432,8365,8381,-8110,8435,8436,8111,-8113,8117,8437,8435,-8113,8437,8117,8384,-8439,8436,8438,8384,-8112,8318,8317,8316,-8377,8126,8127,8316,-8318,8413,8130,8129,-8302,8394,8103,8300,-8394,8427,8300,8299,-8427,8431,8299,8107,-8109,8439,8440,8153,-8202,8210,8207,8287,-8442,8209,8210,8443,-8443,8236,8212,8445,-8445,8235,8444,8446,-8235,8224,8447,8220,-8222,8307,8447,8227,-8230,8235,8223,8447,-8308,8444,8235,8307,-8237,8448,8199,8450,-8450,8445,8448,8449,-8452,8444,8445,8451,-8447,8452,8454,8273,-8454,8452,8221,8222,-8455,8133,8274,8275,-8137,8276,8138,8136,-8276,8277,8301,8138,-8277,8218,8303,8272,-8218,8133,8134,8221,-8453,8273,8272,8303,-8454,8271,8216,8217,\n-8273,8271,8234,8446,-8271,8270,8446,8451,-8311,8451,8449,8268,-8311,8274,8133,8453,-8304,8266,8268,8449,-8451,8267,8266,8450,-8201,8154,8267,8200,-8154,8147,8153,8440,-8456,8146,8147,8455,-8457,8457,8456,8158,-8111,8109,8106,8457,-8435,8455,8440,8161,-8158,8455,8157,8158,-8457,8456,8457,8106,-8147,8434,8457,8110,-8112,8439,8443,8210,-8442,8442,8445,8212,-8210,8458,8202,8199,-8449,8442,8443,8202,-8459,8439,8201,8202,-8444,8440,8439,8441,-8162,8301,8277,8412,-8414,8162,8304,8459,-8165,8460,8461,8237,-8239,8240,8237,8241,-8243,8259,8240,8242,-8247,8246,8249,8264,-8260,8264,8249,8462,-8264,8294,8464,8463,-8294,8465,8286,8461,-8461,8237,8461,8286,-8242,8186,8192,8125,-8303,8195,8192,8186,-8188,8298,8296,8195,-8188,8296,8298,8184,-8467,8467,8468,8185,-8258,8189,8282,8225,-8189,8309,8479,8250,-8261,8250,8253,8255,-8261,8497,8496,8282,-8258,8257,8282,8189,-8468,8468,8467,8189,-8191,8312,8463,8464,-8312,8464,8462,8308,-8312,8332,8333,8338,8335,8336,-8471,8356,8355,-8354,8099,8100,-8361,8408,8409,8306,-8408,8424,8425,-8429,8362,8390,8380,-8364,8098,8349,8114,-8102,8122,8337,8315,-8285,8505,8126,-8331,8336,8123,8469,-8471,8120,8101,8114,-8116,8284,8283,8121,-8123,8468,8190,8305,-8467,8185,8468,8466,-8185,8261,8256,8180,-8182,8308,8261,8181,-8312,8462,8249,8309,-8309,8263,8462,8464,-8295,8258,8263,8294,-8293,8292,8289,8239,-8259,8460,8238,8290,-8472,8459,8465,8460,-8472,8459,8304,8285,-8466,8505,8504,8302,-8127,8477,8248,8251,-8479,8248,8094,8254,-8252,8095,8096,8247,-8245,8533,7988,7825,-8082,8206,8269,-8206,8213,8217,-8217,8427,8393,-8301,8221,8191,-8189,8233,8231,-8066,8233,8065,-8047,8286,8207,-8266,8268,8269,-8311,8431,8426,-8300,8285,8286,-8466,8471,8290,-8165,8103,8394,-8103,8277,8278,-8413,8131,8132,-8280,8458,8448,-8446,8447,8224,-8228,8220,8447,-8224,8287,8161,-8442,8200,8450,-8200,8452,8453,-8134,8273,8454,-8235,8454,8222,-8235,8200,8201,-8154,8442,8458,-8446,8286,8265,-8242,8463,8172,-8294,8164,8459,-8472,8126,8302,-8126,8305,8296,-8467,8172,8463,-8313,8185,8499,-8499,8239,8289,-8239,8285,8304,-8288,8190,8191,-8306,\n8091,8495,-8494,7842,8472,8080,-7827,8080,8472,8487,-8487,8079,8473,8474,-8085,8084,8474,8475,-8088,8087,8475,8476,-8097,8096,8476,8477,-8248,8247,8477,8478,-8253,8249,8252,8478,-8480,8309,8249,-8480,8491,8490,8021,-8019,8489,8020,8021,-8491,8482,8019,8020,-8490,8482,8525,8524,-8020,8035,8524,8525,-8484,8484,8034,8035,-8484,8484,8513,8512,-8035,8078,8531,8532,-8486,8485,8486,8079,-8079,8487,8473,8079,-8487,8488,8082,8473,-8488,8481,8490,8491,-8481,8489,8490,8481,-8025,8006,8522,8521,-8493,8492,8243,8048,-8007,8265,8233,8046,-8242,8051,8065,8231,-8231,8049,8050,-8229,8091,8493,8494,-8093,8495,8254,8094,-8494,8496,8253,8254,-8496,8255,8253,8496,-8498,8255,8497,8498,-8257,8499,8180,8256,-8499,8180,8499,8500,-8180,8297,8179,8500,-8502,8297,8501,8502,-8184,8182,8183,8502,-8504,8504,8124,8182,-8504,8123,8124,8504,-8506,8123,8505,8330,-8470,8054,8507,8506,-8054,8053,8506,8088,-8511,8055,8061,8068,-8063,8055,8052,8507,8054,-8062,8066,8506,8507,8052,-8064,8067,8088,8092,-8495,8506,8066,-8089,8092,8066,-8092,8060,8047,8057,-8057,8057,8058,8059,-8057,8047,8060,8048,8243,-8047,8066,8092,-8089,8025,8508,8026,-8028,8036,8026,8508,-8510,8509,8510,8067,-8037,8088,8067,-8511,8028,8029,-8031,8030,8008,-8011,8025,8527,8528,8028,-8031,8012,8528,-8528,8071,8034,8512,-8512,8511,8083,7840,-7860,8083,8511,8512,-8489,8488,8512,8513,-8083,8082,8513,8514,-8091,8090,8514,8515,-8090,8089,8515,8093,-8098,8077,7779,7876,-8517,8077,8516,8517,-8019,8518,8491,8018,-8518,8519,8480,8491,-8519,8520,8017,8480,-8520,8521,8007,8017,-8521,8522,8003,8007,-8522,8004,8003,-8523,8528,8529,8066,-8029,8226,8225,8066,-8530,7876,7988,8533,-8517,8517,8516,8533,-8533,8531,8518,8517,-8533,8519,8518,8531,-8531,8484,8026,8036,-8514,8379,8374,8366,-8378,8370,8412,8278,-8373,8009,8010,8008,-8034,8354,8339,8340,-8353,8390,8387,8379,-8381,8380,8379,-8379,8374,8371,8367,-8367,8388,8375,8368,-8370,8382,8383,8384,-8390,8382,8386,8381,-8384,8318,8376,8319,-8321,8116,8352,8348,-8321,8329,8317,8318,-8348,8334,8358,8315,-8338,8230,8228,-8051,7545,7376,-7484,7558,7559,-7503,8534,\n8537,8536,-8536,8539,8547,8546,-8536,8548,9053,9054,-9026,9069,9078,9056,-8608,8608,8609,9068,-8603,8554,8534,8535,-8547,8555,8554,8546,-8557,8607,8608,8602,-9070,8556,8545,8543,-8556,8550,8610,8609,-8554,9015,8545,8556,-9023,8547,8549,9013,-9015,9052,9053,8548,-9064,9059,8545,9015,-9059,8563,8540,8565,-8565,9042,8569,8542,-9042,9016,8559,9059,-9059,8570,8536,8537,-8572,8571,8573,8572,-8571,8536,8570,8574,-8539,8575,8577,8576,-8565,8542,8562,8557,-9042,8561,8562,8540,-8564,8579,8537,8534,-8579,8582,8543,8544,-8582,8548,9025,8776,-8597,8541,8569,8585,-8587,8578,8534,8554,-8598,8597,8554,8555,-8584,8583,8555,8543,-8583,8581,8544,9061,-9063,8598,8560,8561,-8596,8584,8563,8564,-8588,8585,8569,9042,-9044,8589,8571,8537,-8580,8588,8601,8572,-8592,8590,8573,8571,-8590,8592,8574,8601,-8589,8580,8538,8574,-8593,8587,8564,8576,-8595,8600,8577,8575,-8594,8595,8561,8563,-8585,8591,8572,8573,-8591,8594,8576,8577,-8601,8603,8604,8566,-8568,8536,8538,-9056,9059,9060,8544,8543,-8546,8541,8542,-8570,8556,8546,8547,-9015,9070,8605,8606,9056,-9079,8559,8557,9060,-9060,8547,8539,-8550,8601,8570,-8573,8574,8570,-8602,8565,8575,-8565,8541,8575,-8566,8541,8586,8593,-8576,8558,8559,9016,-9018,8605,9070,9071,8604,-8604,8606,8605,8603,-8568,8606,8567,9057,-9057,8607,9056,9057,-8552,8608,8607,8551,-8553,8552,8553,8609,-8609,8610,9067,9068,-8610,8614,9018,9019,-8614,9018,8614,9066,-9066,8611,8618,8617,-8613,9005,9020,9021,-8617,8623,8615,9006,-9008,8618,8611,9064,-9064,8568,9046,-9048,8618,8619,8620,-8618,9007,9008,8622,-8624,8619,8618,9063,-8549,9047,9048,8599,-8569,9026,9027,8626,-8628,8613,9073,9072,-8615,9074,9075,9005,-8617,8548,8596,8628,-8620,8628,8629,8620,-8620,9008,9009,8630,-8623,9048,8626,9027,-8600,8631,8632,8633,-8635,8929,8928,8925,-8925,8635,8636,8637,-8639,8932,8931,8930,-8934,8639,8640,8641,-8643,8936,8935,8934,-8938,8643,8644,8645,-8647,8646,8645,8647,-8649,8650,8649,8647,-8646,8651,8652,8653,-8635,8654,8655,8656,-8658,8658,8659,8660,-8662,8662,8661,8660,-8664,8637,8664,8665,-8639,8666,8667,8668,-8670,8668,8670,8671,-8670,\n8672,8673,8674,-8676,8676,8672,8675,-8678,8678,8679,8680,-8682,8682,8683,8684,-8686,8686,8687,8681,-8681,8688,8689,8685,-8685,8690,8691,8692,-8694,8694,8690,8693,-8696,8695,8693,8696,-8698,8696,8693,8692,-8699,8699,8696,8698,-8701,8697,8696,8699,-8702,8702,8703,8701,-8700,8704,8702,8699,-8701,8705,8706,8707,-8709,8706,8709,8710,-8708,8714,8711,8712,-8714,8707,8710,8715,-8717,9032,9033,8717,-8719,9036,8719,8720,-9036,8721,8722,8723,-8725,8725,8726,8727,-8729,8727,8726,8670,-8669,8729,8730,8685,-8690,8731,8682,8685,-8731,8732,8733,8734,-8736,8736,8737,8738,-8740,8740,8741,8742,-8744,8741,8744,8745,-8743,8746,8747,8748,-8750,8750,8751,8752,-8747,8753,8754,8755,-8757,8757,8758,8721,-8755,8759,8758,8757,-8761,9062,8759,8761,-8582,8759,8760,8762,-8762,8763,8583,-8583,8763,8765,8744,-8765,8744,8741,8766,-8765,8756,8755,8767,-8769,8769,8745,8744,-8766,8770,8771,8772,-8774,8578,8774,8775,-8777,8778,8777,8628,8596,-8777,8779,8778,8776,-8776,9009,9010,8781,-8631,9012,8783,8784,-9012,8784,8783,8786,-8788,8630,8781,8627,-8627,9030,9031,8718,-8791,8791,8792,8773,-8773,8793,8794,8789,-8789,8752,8795,8747,-8747,8792,8791,8796,-8798,8798,8766,8741,-8741,8684,8681,8687,-8689,8799,8738,8737,-8801,8738,8799,8801,-8803,8749,8748,8803,-8805,8805,8804,8767,-8807,8807,8808,8672,-8677,8808,8809,8673,-8673,8810,8811,8812,-8665,8814,8813,8938,-8940,8683,8678,8681,-8685,8598,8624,8815,-8759,8815,8624,9028,-9030,8652,8651,8817,-8817,8818,8819,8740,-8821,8821,8822,8771,-8824,8824,8825,8822,-8822,8825,8824,8826,-8828,8727,8668,8667,-8829,8829,8728,8727,-8829,9034,9035,8720,-8832,8708,8707,8716,-8831,8653,8700,8698,-8649,8692,8646,8648,-8699,8691,8643,8646,-8693,8679,8678,8640,-8640,8678,8683,8832,-8641,8683,8682,8833,-8833,8682,8731,8636,-8834,8673,8664,8637,-8675,8809,8810,8664,-8674,8670,8662,8834,-8672,8670,8726,8661,-8663,8725,8658,8661,-8727,8835,8719,9036,-9038,8710,8654,8657,-8716,8709,8816,8654,-8711,8652,8704,8700,-8654,8676,8751,8836,-8808,8677,8752,8751,-8677,8729,8795,8752,-8678,8689,8688,8737,-8737,8688,8687,8800,-8738,8694,8695,8837,\n-8821,8701,8821,8823,-8698,8703,8824,8821,-8702,8824,8703,8705,-8827,8711,8708,8830,-8713,9034,8831,8717,-9034,8829,8828,8724,-8839,8667,8754,8724,-8829,8944,8943,8948,-8948,8950,8949,8952,-8952,8703,8702,8706,-8706,8702,8704,8709,-8707,8729,8677,8675,-8731,8730,8675,8674,-8732,8739,8802,8748,-8748,8761,8762,8765,-8764,8769,8765,8762,-8841,8777,8778,8785,-8781,8778,8779,8782,-8786,8736,8739,8747,-8796,8841,8794,8793,-8843,8803,8748,8802,-8844,8953,8954,8956,-8956,8844,8845,8711,-8715,8636,8731,8674,-8638,8704,8652,8816,-8710,8729,8689,8736,-8796,8705,8708,8711,-8846,8817,8846,8847,-8849,8852,8853,8649,-8651,8854,8855,8856,-8858,8874,8877,8876,-8880,8858,8859,8860,-8862,8892,8847,8846,-8891,8863,8862,8855,-8855,8862,8850,8856,-8856,8857,8856,8850,-8660,8659,8863,8854,-8858,8871,8870,8867,-8867,8864,8865,8866,-8868,9002,9003,8865,-8865,8655,8868,8869,-8657,8868,8655,8870,-8872,8874,8872,8873,-8878,8875,8876,8877,-8874,8878,8879,8876,-8876,8872,8874,8879,-8879,8861,8860,8851,-8881,8858,8861,8880,-8882,8859,8858,8881,-8854,8860,8859,8853,-8852,8882,8647,8883,-8890,8649,8884,8883,-8648,8885,8886,8884,-8650,8887,8888,8886,-8886,8882,8889,8888,-8888,8651,8890,8846,-8818,8890,8651,8634,-8634,8862,8863,9002,-8865,8862,8864,8867,8878,8875,-8881,8875,8873,8881,-8881,8873,8885,-8882,8867,8891,-8879,8886,8889,8883,-8885,8892,8891,8848,-8848,8891,8892,8893,-8895,8892,8890,8633,-8894,8872,8878,8891,8894,-8888,8894,8893,8632,-8632,8894,8631,8882,-8888,8896,8895,8963,-8963,8898,8897,8966,-8966,8971,8970,8968,-8970,8900,8899,8927,-8636,8903,8901,8902,-8919,8904,8905,8906,-8908,8908,8849,8909,-8922,8910,8911,8960,-8927,8919,8914,8923,-8921,8852,8650,8917,-8923,8901,8946,8663,-8909,8918,8919,8920,-8907,8902,8921,8922,-8916,8900,8665,8812,-8905,8910,8912,-8912,8642,8641,8923,-8915,8917,8644,8967,-8917,8906,8903,-8919,8903,8906,-8906,8911,8913,8964,-8960,8924,8925,8926,-8928,8910,8926,8925,-8929,8928,8929,8899,-8911,8899,8929,8924,-8928,8918,8930,8931,-8920,8932,8915,8919,-8932,8902,8915,8932,-8934,8902,8933,8930,-8919,8921,8934,8935,-8923,\n8936,8852,8922,-8936,8909,8852,8936,-8938,8909,8937,8934,-8922,8814,8920,8912,-8814,8939,8906,8920,-8815,8938,8907,8906,-8940,8938,8813,8912,-8908,8940,8941,8638,-8666,8638,8941,8942,-8636,8900,8635,8942,-8840,8940,8665,8900,-8840,8943,8944,8945,-8947,8945,8944,8947,-8904,8903,8947,8948,-8902,8943,8946,8901,-8949,8949,8908,8663,-8953,8849,8908,8949,-8951,8849,8950,8951,-8661,8951,8952,8663,-8661,8953,8812,8811,-8955,8904,8812,8953,-8956,8955,8956,8905,-8905,8954,8811,8905,-8957,8957,8958,8959,-8961,8959,8958,8961,-8912,8911,8961,8957,-8961,8962,8963,8641,-8965,8895,8923,8641,-8964,8896,8962,8964,-8914,8642,8965,8966,-8968,8897,8916,8967,-8967,8914,8916,8897,-8899,8965,8642,8914,-8899,8968,8645,8644,-8970,8650,8645,8968,-8971,8970,8971,8917,-8651,8969,8644,8917,-8972,8851,8909,8849,-8851,8659,8850,8849,-8661,8946,8834,8662,-8664,8927,8926,8833,-8637,8960,8959,8832,-8834,8964,8641,8640,-8833,8972,8734,8686,-8974,8743,8974,8820,-8741,8742,8975,8976,-8744,8769,8977,8978,-8746,8768,8767,8979,-8978,8757,8754,8753,-8981,8840,8762,8760,-8981,8768,8840,8980,-8757,8977,8769,8840,-8769,8981,8982,8983,-8733,8978,8984,8982,-8982,8977,8979,8984,-8979,8985,8986,8806,-8988,8985,8987,8755,-8755,8666,8669,8808,-8808,8809,8808,8669,-8672,8810,8809,8671,-8835,8751,8750,8805,-8837,8666,8985,8754,-8668,8806,8986,8836,-8806,8804,8805,8750,-8750,8804,8803,8979,-8768,8803,8843,8984,-8980,8984,8843,8801,-8983,8807,8836,8986,-8667,8799,8983,8982,-8802,8800,8733,8983,-8800,8687,8686,8733,-8801,8680,8988,8973,-8687,8679,8989,8988,-8681,8990,8643,8691,-8990,8642,8967,8990,-8640,8988,8690,8694,-8974,8988,8989,8691,-8691,8989,8679,8639,-8991,8967,8644,8643,-8991,8972,8974,8743,-8977,8975,8742,8745,-8979,8991,8981,8732,-8736,8975,8991,8735,-8977,8972,8976,8735,-8735,8973,8694,8974,-8973,8834,8946,8945,-8811,8695,8697,8992,-8838,8993,8771,8770,-8995,8773,8775,8774,-8771,8792,8779,8775,-8774,8779,8792,8797,-8783,8797,8796,8995,-8783,8827,8826,8996,-8998,8998,8993,8994,-8820,8770,8774,8819,-8995,8719,8835,8658,-8726,8728,8720,8719,-8726,8831,8720,8728,\n-8830,8829,8999,8717,-8832,9000,8790,8718,-9002,8722,8721,8758,-8816,8842,8793,8783,-9013,8783,8793,8788,-8787,9030,8790,8815,-9030,8790,9000,8722,-8816,9001,8723,8722,-9001,8845,8844,8997,-8997,8997,8844,8841,-8996,8865,9003,8869,8868,8871,-8867,8889,8886,-8889,8632,8893,-8634,8941,8940,8839,-8943,8957,8961,-8959,8895,8896,8913,-8924,8631,8634,8647,-8883,8655,8817,8848,-8871,9038,8863,-8660,8869,9003,9002,-8657,8653,8648,8647,-8635,8817,8655,8654,-8817,9001,8999,8838,-8724,8718,8717,8999,-9002,8794,8714,8713,-8790,8841,8844,8714,-8795,8995,8841,8842,-8783,8796,8827,8997,-8996,8791,8825,8827,-8797,8825,8791,8772,-8823,8993,9004,8823,-8772,8992,9004,8993,-8999,8992,8998,8818,-8838,9038,8659,8835,-9038,9010,9011,8784,-8782,8781,8784,8787,-8628,8628,8777,8780,-8630,9066,8614,9072,-9080,8739,8738,-8803,8746,8749,-8751,8960,8833,-8927,8754,8721,-8725,8766,8597,-8765,8766,8578,-8598,8819,8798,-8741,8801,8843,-8803,8964,8832,-8960,8818,8998,-8820,9004,8697,-8824,8636,8635,-8928,8810,8945,-8812,8664,8812,-8666,8991,8978,-8982,8980,8760,-8758,8753,8756,-8981,8820,8974,-8695,8733,8732,-8984,8985,8666,-8987,8806,8767,-8988,8987,8767,-8756,8733,8686,-8735,8975,8978,-8992,8819,8774,-8799,8996,8826,-8706,8697,9004,-8993,8659,8658,-8836,8838,8999,-8830,8705,8845,-8997,8718,9031,-9033,8772,8771,-8823,8818,8820,-8838,8723,8838,-8725,8624,9026,-9029,9075,9073,8613,-9006,8613,9019,9020,-9006,8612,8617,9007,-9007,8617,8620,9008,-9008,8620,8629,9009,-9009,8629,8780,9010,-9010,8780,8785,9011,-9011,8782,9012,9011,-8786,8842,9012,-8783,9024,8550,8553,-9024,9022,9023,8553,-8553,9015,9022,8552,-8552,9015,8551,9057,-9059,8567,9016,9058,-9058,9017,9016,8567,-8567,9017,8566,9045,-9047,8611,9018,9065,-9065,9018,8611,8612,-9020,9020,9019,8612,-9007,9021,9020,9006,-8616,9014,9013,9024,-9024,9022,8556,9014,-9024,8538,9025,9054,-9056,9025,8538,8580,-8777,8798,8774,8578,-8767,8583,8763,8764,-8598,8581,8761,-8583,8624,8625,9027,-9027,9028,9026,8627,-8788,9029,9028,8787,-8787,8788,9030,9029,-8787,8788,8789,9031,-9031,9032,9031,8789,-8714,8713,8712,9033,\n-9033,8830,9034,9033,-8713,8830,8716,9035,-9035,8715,9036,9035,-8717,9037,9036,8715,-8658,8656,9038,9037,-8658,8656,9002,8863,-9039,8586,8585,9039,-9041,8585,9043,8621,-9040,8587,8594,8600,-8594,8587,8593,8586,9040,-8585,8598,8595,8584,9040,-9040,8599,9027,8625,-8622,9039,8621,-8599,8625,8624,-8599,8592,8588,8589,-8580,8589,8588,8591,-8591,8579,8578,8776,8580,-8593,8598,8621,-8626,8557,8559,8558,-9042,8568,9042,9041,-8559,9042,8568,8599,-9044,8621,9043,-8600,8560,8562,-8562,8562,8542,-8541,8557,8562,8560,9061,-9061,8544,9060,-9062,8604,9044,9045,-8567,9044,9076,9074,-8617,8616,9021,9045,-9045,9021,8615,9046,-9046,8615,8623,9047,-9047,8623,8622,9048,-9048,8622,8630,8626,-9049,8610,9049,9077,-9068,8610,8550,9050,-9050,9051,9050,8550,-9025,9052,9051,9024,-9014,9053,9052,9013,-8550,9054,9053,8549,-8540,9055,9054,8539,-8536,8536,9055,-8536,9061,8560,8598,-9063,8759,9062,8598,-8759,9077,9049,9066,-9080,9050,9065,9066,-9050,9064,9065,9050,-9052,9052,9063,9064,-9052,9017,9046,8568,-8559,8912,8910,8899,-8908,8903,8905,8811,-8946,8541,8565,8540,-8543,8887,8885,8873,-8873,8923,8913,8912,-8921,8913,8911,-8913,8907,8899,8900,-8905,8921,8902,8901,-8909,8915,8922,8917,-8917,8915,8916,8914,-8920,8851,8853,8852,-8910,8649,8853,8881,-8886,8862,8880,8851,-8851,8867,8870,8848,-8892,8763,8582,-8762,9080,9081,9082,-9084,9081,9084,9085,-9083,9084,9086,9263,-9086,9088,9084,9081,-9090,9090,9086,9084,-9089,9091,9087,9086,-9091,9094,9092,9093,-9134,9095,9096,9088,-9090,9096,9097,9090,-9089,9097,9098,9091,-9091,9099,9100,9096,-9096,9100,9101,9097,-9097,9101,9102,9098,-9098,9093,9092,9104,-9131,9083,9105,9092,-9081,9089,9081,9080,-9095,9095,9089,9094,-9134,9106,9107,9108,-9110,9110,9111,9109,-9109,9112,9113,9111,-9111,9114,9115,9113,-9113,9116,9117,9109,-9112,9118,9116,9111,-9114,9119,9118,9113,-9116,9120,9121,9122,-9124,9116,9124,9125,-9118,9118,9126,9124,-9117,9119,9127,9126,-9119,9124,9100,9099,-9126,9126,9101,9100,-9125,9127,9102,9101,-9127,9128,9122,9121,-9133,9122,9129,9107,-9107,9117,9123,9106,-9110,9117,9125,9120,-9124,9120,9220,9103,\n-9122,9093,9130,9131,-9104,9131,9132,9121,-9104,9103,9220,9133,-9094,9134,9135,9136,-9138,9138,9139,9137,-9137,9140,9141,9139,-9139,9142,9143,9137,-9140,9144,9142,9139,-9142,9091,9144,9141,-9088,9145,9146,9147,-9149,9142,9149,9150,-9144,9144,9151,9149,-9143,9091,9098,9151,-9145,9149,9152,9153,-9151,9151,9154,9152,-9150,9098,9102,9154,-9152,9156,9147,9146,-9179,9135,9134,9147,-9158,9143,9148,9134,-9138,9143,9150,9145,-9149,9158,9159,9160,-9162,9162,9164,9165,-9164,9164,9115,9114,-9166,9166,9162,9159,-9168,9168,9164,9162,-9167,9119,9115,9164,-9169,9169,9170,9171,-9173,9173,9174,9166,-9168,9174,9175,9168,-9167,9175,9127,9119,-9169,9153,9152,9174,-9174,9152,9154,9175,-9175,9154,9102,9127,-9176,9170,9169,9176,-9181,9169,9158,9161,-9178,9167,9159,9158,-9173,9171,9173,9167,-9173,9179,9178,9146,-9156,9170,9180,9179,-9156,9082,9182,9181,-9084,9085,9183,9182,-9083,9181,9184,9105,-9084,9184,9185,9104,-9106,9107,9187,9186,-9109,9108,9186,9188,-9111,9110,9188,9189,-9113,9112,9189,9190,-9115,9129,9191,9187,-9108,9128,9192,9191,-9130,9130,9194,9193,-9132,9104,9185,9194,-9131,9193,9195,9132,-9132,9195,9192,9128,-9133,9135,9196,9340,-9137,9136,9340,9197,-9139,9138,9197,9198,-9141,9157,9199,9196,-9136,9156,9200,9199,-9158,9160,9202,9201,-9162,9163,9203,9202,-9161,9165,9204,9203,-9164,9114,9190,9204,-9166,9201,9205,9177,-9162,9205,9206,9176,-9178,9208,9207,9178,-9180,9207,9200,9156,-9179,9180,9209,9208,-9180,9176,9206,9209,-9181,9080,9092,-9095,9092,9105,-9105,9106,9123,-9123,9122,9128,-9130,9134,9148,-9148,9147,9156,-9158,9158,9169,-9173,9169,9177,-9177,9218,9219,9215,-9218,9211,9213,9214,-9216,9214,9213,9210,9204,-9217,9204,9190,9217,-9217,9190,9189,9218,-9218,9218,9189,9212,-9220,9212,9211,9215,-9220,9215,9214,9216,-9218,9220,9120,9125,-9100,9133,9220,9099,-9096,9155,9146,9145,-9222,9221,9145,9150,-9154,9171,9221,9153,-9174,9155,9221,9171,-9171,9159,9162,9163,-9161,9232,9231,9281,-9231,9407,9408,9229,-9400,9290,9234,9249,-9290,9239,9240,-9251,9416,9246,9223,-9227,9292,9231,9232,-9292,9241,9238,9232,9230,-9244,9236,9235,-9229,9293,\n9237,9231,-9293,9251,9254,9253,-9253,9236,9251,9252,-9236,9255,9256,9249,-9235,9253,9254,9256,-9256,9257,9258,9254,-9252,9259,9257,9251,-9237,9256,9260,9248,-9250,9254,9258,9260,-9257,9257,9262,9261,-9259,9287,9288,9248,-9261,9286,9287,9260,-9259,9266,9245,9247,-9265,9267,9266,9264,-9266,9360,9269,-9269,9261,9271,9284,-9286,9266,9272,9244,-9246,9267,9270,9272,-9267,9268,9273,9271,9261,-9263,9198,9273,9268,-9270,9283,9274,9242,-9283,9284,9271,9274,-9284,9240,9239,9276,-9276,9277,9238,9241,-9279,9275,9276,9280,-9280,9280,9277,9278,-9280,9277,9276,9239,-9239,9261,9285,9286,-9259,9273,9275,9279,-9272,9278,9241,9242,-9275,9279,9278,9274,-9272,9255,9234,9235,-9253,9227,9415,9416,-9227,9246,9407,9399,-9224,9250,9291,9232,9238,-9240,9225,9418,9246,-9417,9243,9282,9242,-9242,9289,9249,9248,-9289,9231,9237,9383,-9282,9408,9831,9832,-9230,9830,9233,9230,-9282,9243,9230,9233,-9420,9395,9228,9394,-9397,9255,9252,-9254,9276,9277,-9281,9822,9823,9347,-9355,9821,9822,9354,-9356,9355,9356,9820,-9822,9356,9400,9819,-9821,9400,9357,9818,-9820,9070,9818,9834,-9072,9244,9282,9243,-9420,9417,9283,9282,9244,-9273,9420,9284,9283,-9418,9285,9284,9420,-9422,9286,9285,9421,-9423,9422,9423,9287,-9287,9247,9288,9287,9423,-9265,9225,9289,9288,-9248,9290,9289,9225,-9225,9290,9224,9391,-9391,9397,9390,9391,-9399,9203,9204,9374,-9376,9376,9295,-9368,9208,9401,9328,-9208,9791,9366,9367,-9360,9203,9375,9299,-9203,9402,9918,9919,-9328,9305,9189,-9189,9359,9367,9368,-9321,9306,9915,9366,-9792,9303,9403,9404,-9309,9192,9309,9380,-9382,9381,9382,-9192,9362,9186,9187,-9312,9426,9427,9785,-9787,9430,9427,9426,-9432,9428,9429,9433,-9435,9430,9431,9434,-9434,9429,9428,9432,-9451,9317,9313,9784,9296,9297,-9299,9352,9353,9318,-9781,9914,9319,-9365,9451,9437,9438,-9440,9364,9319,9321,-9849,9917,9325,9377,-9917,9380,9309,9846,-9848,9910,9911,9845,-9845,9401,9402,9327,-9329,9324,9405,-9195,9324,9337,9843,-9845,9439,9789,9790,-9452,9789,9440,9441,-9791,9442,9445,9441,-9441,9442,9443,9444,-9446,9447,9444,9443,-9447,9436,9447,9446,-9436,9850,9330,9213,-9212,9374,9210,\n9213,-9332,6854,6857,9424,-9634,9906,9907,9841,-9841,9387,9922,9923,-9370,9903,9904,9838,-9838,9901,9902,9836,-9836,9413,9392,9837,-9839,9337,9395,9842,-9844,9332,9333,9388,-9390,9411,9412,9335,-9340,9406,9373,9358,-9200,9183,9236,9228,-9183,9340,9291,9250,-9198,9920,9921,9342,-9342,9908,9909,9843,-9843,9346,9345,9344,-9344,9369,9923,9924,-9371,9906,9840,9839,-9906,9333,9332,9334,-9339,9410,9925,9926,-9372,9836,9393,9824,-9836,9826,9827,9348,-9350,9910,9844,9843,-9910,9346,9343,9303,-9309,9327,9919,9920,-9342,9903,9837,9836,-9903,9336,9349,9339,-9336,9385,9371,9372,-9387,9184,9337,9324,-9186,9448,9449,9450,-9433,9305,9188,-9313,9212,9304,-9330,9213,9330,-9332,9846,9912,9379,-9848,9825,9826,9349,-9337,9347,9222,9227,-9355,9355,9354,9227,-9227,9226,9223,9356,-9356,9223,9399,9400,-9357,9399,9229,9357,-9401,9357,9229,9832,-9834,9293,9292,9358,-9374,9292,9291,9340,-9359,9197,9250,9240,-9199,9376,9377,9325,-9327,9263,9360,-9263,9262,9360,-9269,9310,9361,9363,-9324,9188,9186,9362,-9313,9181,9182,9228,9395,-9338,9086,9087,9360,-9264,9087,9141,9140,9269,-9361,9275,9273,9198,-9241,9183,9085,9263,9259,-9237,9191,9382,-9188,9363,9361,9381,-9381,9379,9364,9848,-9848,9364,9379,9913,-9915,9377,9366,9915,-9917,9376,9367,9366,-9378,9295,9368,-9368,9409,9410,9371,-9386,9369,9370,9384,-9384,9348,9372,9371,-9927,9372,9348,9827,-9829,9341,9373,9328,-9328,9293,9373,9341,-9343,9294,9205,-9202,9206,9205,9376,-9327,9382,9381,-9362,9187,9382,9361,-9312,9369,9383,9237,-9388,9828,9829,9386,-9373,9237,9293,9342,-9388,9342,9921,9922,-9388,9389,9388,9344,-9346,9908,9842,9841,-9908,9234,9394,9228,-9236,9393,9392,9222,-9348,9824,9393,9347,-9824,9227,9222,9414,-9416,9290,9390,9394,-9235,9394,9390,9397,-9397,9392,9413,9414,-9223,9206,9326,9401,9208,-9210,9326,9325,9402,-9402,9917,9918,9402,-9326,9404,9403,9302,-9308,9845,9911,9912,-9847,9195,9405,-9310,9199,9200,-9407,9233,9408,9407,-9420,9830,9831,9408,-9234,9384,9370,9410,-9410,9370,9924,9925,-9411,9338,9334,9412,-9412,9838,9904,9905,-9840,9398,9413,9838,-9840,9413,9398,9391,-9415,9414,9391,9224,\n-9416,9416,9415,9224,-9226,9270,9417,-9273,9245,9418,9225,-9248,9245,9244,-9419,9270,9420,-9418,9420,9270,9267,-9422,9422,9421,9267,-9266,9265,9264,9423,-9423,9196,9358,-9341,9199,9358,-9197,9195,9309,-9193,9193,9405,-9196,9194,9405,-9194,9324,9194,-9186,9257,9259,9263,-9263,9269,9140,-9199,9427,9787,9784,-9786,9426,6856,6861,-9432,6858,6859,9428,-9435,9429,9314,9781,-9434,9786,9424,6857,-6861,9431,6861,6858,-9435,9316,9314,9429,-9451,9432,9428,6859,-6863,9430,9433,9781,-9316,9430,9315,9787,-9428,9318,9310,9436,-9436,9436,9310,9323,9321,-9448,9359,9320,9437,-9452,9320,9297,9438,-9438,9297,9296,9439,-9439,9790,9791,9359,-9452,9441,9306,9791,-9791,9442,9440,9783,-9783,9441,9445,9322,-9307,9301,9443,9442,-9783,9445,9444,9319,-9323,9443,9301,9300,-9447,9319,9444,9447,-9322,9446,9300,9780,9318,-9436,6866,9352,9449,-9449,9449,9352,9316,-9451,9448,9432,6862,-6867,9439,9296,9788,-9790,9630,9455,9456,-9454,9455,9457,9458,-9457,9457,9459,9460,-9459,9617,9461,9462,-9464,9464,9645,9646,-9648,9644,9645,9464,-9469,9659,9643,-9471,9452,9476,9475,-9623,9477,9621,9623,-9625,9477,9478,9620,-9622,9478,9479,9619,-9621,9461,9480,9481,-9463,9632,9467,9521,-9521,9483,9468,9464,-9483,9484,9470,9468,-9484,9653,9659,9470,-9655,9476,9487,9486,-9476,9488,9477,9624,-9626,9478,9477,9488,-9490,9479,9478,9489,-9575,9480,9573,9572,-9482,9631,9632,9520,-9570,9483,9482,9568,-9568,9484,9483,9567,-9567,9487,9490,9491,-9487,9493,9488,9625,-9627,9496,9574,9489,-9523,9586,9631,9569,-9502,9584,9565,9655,-9657,9564,9565,9584,-9584,9627,9665,9492,9493,-9627,9613,9614,9496,-9498,9587,9588,9858,-9858,9857,9858,9604,-9606,9577,9578,9500,-9502,9651,9641,9642,-9651,9656,9657,9504,-9585,9584,9504,9505,-9584,9612,9662,-9665,9494,9507,9508,-9500,9595,9591,9589,-9591,9609,9608,9591,-9596,9509,9500,9578,-9580,9640,9641,9651,-9653,9658,9511,9504,-9658,9512,9505,9504,-9512,9514,9515,9508,-9508,9595,9590,9593,-9593,9609,9595,9592,-9595,9509,9579,9580,-9519,9510,9509,9518,-9520,9640,9652,-9640,9615,9616,9479,-9575,9614,9615,9574,-9497,9500,9509,9510,-9503,9501,9500,9502,\n-9587,9522,9523,9497,-9497,9497,9669,9764,-9663,9493,9668,9523,-9523,9489,9488,9493,-9523,9597,9596,9855,-9855,9854,9855,9603,-9603,9577,9501,9569,-9571,9585,9566,9567,-9638,9310,9524,9525,-9362,9311,9526,9527,-9363,9312,9362,9527,-9529,9312,9528,9529,-9306,9329,9304,9530,-9532,9374,9331,9532,-9534,9375,9374,9533,-9535,9299,9375,9534,-9536,9299,9535,9536,-9295,9368,9295,9537,-9540,9310,9318,9538,-9525,9320,9368,9539,-9542,9538,9318,9353,-9541,9297,9320,9541,9563,-9299,9317,9298,9563,-9583,9317,9582,-9544,9317,9543,9545,-9314,9546,6855,6630,-6637,6867,6864,9548,-9548,6606,6609,9549,-9563,6609,6637,9550,-9550,6638,9551,9581,-6605,6638,6639,9552,-9552,6592,9638,9552,-6640,9553,9424,9425,-9817,9305,9529,9530,-9305,9331,9330,9554,-9556,9454,9525,9524,-9453,9527,9526,9453,-9457,9528,9527,9456,-9459,9529,9528,9458,-9461,9462,9531,9530,-9464,9466,9661,9532,-9556,9469,9534,9533,-9466,9471,9535,9534,-9470,9472,9536,9535,-9472,9539,9537,9474,-9474,9524,9538,9476,-9453,9481,9556,9531,-9463,9485,9541,9539,-9474,9476,9538,9540,-9488,9556,9481,9572,-9572,9563,9541,9485,-9565,9487,9540,9542,-9491,9759,9762,9763,-9761,9543,9582,9583,-9506,9776,9777,9544,-9507,9545,9543,9505,-9513,9778,9779,9546,-9514,9514,9547,9548,-9516,9561,9562,9549,-9517,9516,9549,9550,-9518,9580,9581,9551,-9519,9518,9551,9552,-9520,9638,9639,9519,-9553,9553,9816,9817,-9577,9530,9529,9460,-9464,9554,9557,9520,-9522,9555,9554,9521,-9467,9353,9352,9542,-9541,9495,9494,9499,-9499,9600,9598,9853,-9853,9329,9531,9851,-9851,9479,9616,9618,-9620,9467,9466,-9522,9532,9331,-9556,9573,9495,9498,-9573,9572,9498,9558,-9572,9498,9499,9559,-9559,9560,9559,9499,-9509,9560,9508,9515,-9562,9515,9548,9562,-9562,6864,6606,9562,-9549,9570,9569,9520,-9558,9853,9854,9602,-9600,9598,9597,9854,-9854,9526,9525,9454,-9454,9361,9525,9526,-9312,9536,9537,9295,-9295,9474,9537,9536,-9473,9575,9503,9636,-9636,9607,9606,9608,-9610,9607,9609,9594,-9611,9517,9550,9581,-9581,6604,9581,9550,-6638,9564,9583,9582,-9564,9558,9559,9588,-9588,9588,9559,9849,-9859,9604,9858,9849,-9579,9559,9560,9590,-9590,\n9591,9849,9559,-9590,9590,9560,9561,-9594,9561,9516,9592,-9594,9516,9517,9594,-9593,9596,9558,9856,-9856,9855,9856,9577,-9604,9597,9571,9558,-9597,9598,9556,9571,-9598,9531,9556,9598,-9601,9531,9600,9852,-9852,9557,9554,9601,-9600,9602,9570,9557,-9600,9602,9603,9577,-9571,9578,9577,9605,-9605,9857,9605,9577,-9857,9579,9578,9606,-9608,9608,9606,9578,-9850,9579,9607,9610,-9581,9517,9580,9610,-9595,9852,9853,9599,-9602,9851,9852,9601,-9555,9850,9851,9554,-9331,9777,6635,-9545,9611,9775,9776,-9507,9507,9612,9672,-9515,9507,9494,9613,-9613,9494,9495,9614,-9614,9573,9615,9614,-9496,9573,9480,9616,-9616,9617,9618,-9462,9619,9618,9617,-9460,9620,9619,9459,-9458,9621,9620,9457,-9456,9622,9623,-9631,9624,9623,9622,-9476,9624,9475,9486,-9626,9625,9486,9491,-9627,9627,9761,9758,-9758,9775,9611,9628,-9775,9778,9611,-9507,6636,9629,9513,-9547,9630,9623,9621,-9456,9461,9618,9616,-9481,9459,9617,9463,-9461,9642,9568,9649,-9651,9568,9482,9648,-9650,9482,9464,9647,-9649,9485,9653,9565,-9565,9576,9634,9633,-9554,9575,9635,9634,-9577,9585,9637,9636,-9504,9634,9639,9638,-9634,9635,9640,9639,-9635,9636,9641,9640,-9636,9642,9641,9636,-9638,9637,9567,9568,-9643,9469,9644,9643,-9472,9645,9644,9469,-9466,9646,9661,9466,-9468,9647,9646,-9468,9648,9647,9467,-9633,9649,9648,9632,-9632,9650,9649,9631,-9587,9651,9650,9586,-9503,9652,9651,9502,-9511,9519,9639,9652,-9511,9654,9484,9566,-9656,9655,9566,9585,-9657,9585,9503,9657,-9657,9575,9658,9657,-9504,9511,9576,9817,-9513,9654,9470,-9485,9653,9660,-9660,9660,9472,9471,9643,-9660,9629,9628,-9612,9758,9761,9762,-9760,9452,9622,9630,9453,-9455,9565,9653,9654,-9656,9473,9660,9653,-9486,9472,9660,9473,-9475,9646,9645,9465,-9662,9465,9533,9532,-9662,9628,9667,9773,-9775,9667,9670,-9672,6636,6868,-9630,9493,9492,-9669,9612,9613,9497,-9663,9523,9669,-9498,6868,9670,9667,9628,-9630,6865,6610,9678,-9688,9688,6640,6869,-9734,9753,9754,9676,-9718,9705,9696,9695,-9705,9772,9681,9703,-9772,9700,9685,9705,-9705,9713,9682,9703,-9712,9718,9683,9693,-9717,9694,9677,9720,-9720,9663,9720,9677,-9665,9699,9679,9706,\n-9722,9706,9687,9722,-9722,9750,9712,9680,-9750,9702,9766,9767,-9684,9693,9768,9769,-9709,9707,9674,9730,-9730,9730,9674,9732,-9732,9672,9664,9677,-9757,6865,9687,9706,-9352,9749,9680,9670,-6869,9689,9668,9492,-9708,9689,9673,9523,-9669,9752,9753,9717,-9716,9773,9667,9681,-9773,9669,9523,9673,-9693,9662,9764,9765,-9685,9694,9676,9754,-9756,9694,9755,9756,-9678,9696,9686,9697,-9696,9690,9737,9738,-9692,9736,9737,9690,-9710,9688,9733,9734,-9699,9698,9734,9735,-9702,9750,9751,9675,-9713,9703,9682,9770,-9772,9701,9735,9736,-9710,9706,9679,9350,-9352,9492,9665,9674,-9708,9770,9682,9708,-9770,9671,9670,9680,-9711,9671,9710,9681,-9668,9703,9681,9710,-9712,9710,9680,9712,-9712,9712,9675,9713,-9712,9708,9682,9713,-9715,9713,9675,9715,-9715,9714,9716,9693,-9709,9715,9717,9716,-9715,9717,9676,9718,-9717,9720,9684,9702,-9720,9702,9683,9718,-9720,9718,9676,9694,-9720,9663,9662,9684,-9721,9705,9685,9699,-9722,9687,9678,9723,-9723,9723,9686,9696,-9723,9721,9722,9696,-9706,9752,9715,9675,-9752,9724,9691,9738,-9740,9739,9740,9725,-9725,9514,9725,9740,-9548,9684,9765,9766,-9703,9692,9673,9727,-9727,9683,9767,9768,-9694,9727,9673,9689,-9729,9728,9689,9707,-9730,9732,9674,9665,-9667,9733,6869,6863,-9742,9734,9733,9741,-9743,9735,9734,9742,-9744,9736,9735,9743,-9745,9744,9745,9737,-9737,9738,9737,9745,-9747,9739,9738,9746,-9748,9747,9748,9740,-9740,9547,9740,9748,-6871,6863,9350,9679,-9742,9742,9741,9679,-9700,9743,9742,9699,9685,-9701,9744,9743,9700,-9705,9704,9695,9745,-9745,9746,9745,9695,-9698,9747,9746,9697,9686,-9724,9723,9678,9748,-9748,9748,9678,6610,-6871,9688,9749,6868,-6641,9698,9750,9749,-9689,9698,9701,9751,-9751,9709,9752,9751,-9702,9709,9690,9753,-9753,9690,9691,9754,-9754,9755,9754,9691,-9725,9756,9755,9724,-9726,9514,9672,9756,-9726,9612,9664,-9673,9627,9757,9666,-9666,6631,9760,9763,-6867,9761,9627,9626,-9492,9491,9490,9762,-9762,9542,9763,9762,-9491,6866,9763,9542,-9353,9764,9669,9692,-9766,9766,9765,9692,-9727,9767,9766,9726,-9728,9768,9767,9727,-9729,9769,9768,9728,-9730,9730,9770,9769,-9730,9771,9770,9730,-9732,9732,\n9772,9771,-9732,9666,9773,9772,-9733,9774,9773,9666,-9758,9758,9775,9774,-9758,9775,9758,9759,-9777,9759,9760,9777,-9777,6870,6867,-9548,9329,9850,9211,-9213,9299,9294,9201,-9203,9638,6871,6854,-9634,9506,9544,9779,-9779,6683,9779,9544,-6636,9363,9848,9321,-9324,9847,9848,9363,-9381,9405,9845,9846,-9310,9324,9844,9845,-9406,9396,9841,9842,-9396,9840,9841,9396,-9398,9398,9839,9840,-9398,9836,9837,9392,-9394,9425,9785,9784,-9314,9786,9785,9425,-9425,9789,9788,9783,-9441,9300,9301,9792,-9794,9783,9788,9795,-9795,9796,9797,9784,-9788,9798,9787,9315,-9800,9800,9314,9316,-9802,9802,9803,9781,-9315,9804,9805,9315,-9782,9301,9782,9807,-9807,9797,9808,9296,-9785,9808,9809,9788,-9297,9352,9780,9811,-9811,9780,9300,9812,-9812,9316,9352,9810,-9814,9782,9783,9814,-9816,9313,9816,-9426,9817,9816,9545,-9513,9313,9545,-9817,9633,9424,-9554,9811,9812,9813,-9811,9812,9300,9316,-9814,9300,9793,9801,-9317,9793,9792,9800,-9802,9792,9301,9314,-9801,9301,9806,9802,-9315,9806,9807,9803,-9803,9807,9782,9781,-9804,9782,9815,9804,-9782,9815,9814,9805,-9805,9814,9783,9315,-9806,9783,9794,9799,-9316,9794,9795,9798,-9800,9795,9788,9787,-9799,9788,9809,9796,-9788,9809,9808,9797,-9797,9818,9070,9078,-9820,9819,9078,9069,-9821,9821,9820,9069,-8603,8602,9068,9822,-9822,9067,9823,9822,-9069,9077,9824,9823,-9068,9824,9077,9079,-9836,9072,9901,9835,-9080,9073,9075,9826,-9826,9075,9074,9827,-9827,9827,9074,9076,-9829,9818,9357,9833,-9835,9383,9384,9830,-9282,9831,9830,9384,-9410,9832,9831,9409,-9386,9833,9832,9385,-9387,9829,9834,9833,-9387,9829,9071,-9835,9849,9591,-9609,9587,9857,9856,-9559,9418,9244,-9420,9246,9418,9419,-9408,9337,9184,-9182,9328,9373,9406,9200,-9208,9629,9611,-9514,9644,9468,9470,-9644,9638,6592,-6872,9658,9575,-9577,9658,9576,-9512,9294,9295,9376,-9206,9374,9204,-9211,9305,9304,9212,-9190,9381,9191,-9193,6646,6645,-6857,6646,6856,-6861,9786,6860,6856,-9427,6806,6877,-6875,6806,6807,-6878,7911,6874,6877,-7944,7783,7983,-7988,7859,7982,7983,-7784,9076,9829,-9829,9076,9071,-9830,9044,8604,9071,-9077,9778,9513,-9612,6631,9777,-9761,6631,\n6635,-9778,6683,6855,9546,-9780,9662,9663,-9665,7891,9859,7903,-7891,7892,9861,9860,-7985,7893,9862,9861,-7893,9862,7893,9894,-9894,9863,9893,9894,-7895,7895,9864,9863,-7895,9865,9864,7895,-7897,7992,9866,9865,-7897,7897,9867,9866,-7993,7898,9868,9867,-7898,7900,9870,9869,-7900,7746,9870,7902,-7745,7902,9870,7900,-7746,7740,7742,7733,-9872,9872,9871,7733,-7785,9873,9872,7784,-7871,7856,9874,9873,-7871,9874,7856,9892,-9892,9892,7823,9875,-9892,7822,9876,9875,-7824,9877,9876,7822,-7822,7821,7993,9878,-9878,7993,7878,9879,-9879,9880,9879,7878,-7874,7793,7734,9880,-7874,7737,9871,7794,-7739,7737,7740,-9872,7794,7830,7703,-7739,7863,9885,9884,-7855,9886,9885,7863,-7817,7858,9896,9895,-7858,7982,9897,9896,-7859,7840,9897,7982,-7860,7929,7812,-7810,9899,9898,7829,-7842,9901,9072,9073,-9826,9336,9902,9901,-9826,9903,9902,9336,-9336,9904,9903,9335,-9413,9905,9904,9412,-9335,9906,9905,9334,-9333,9907,9906,9332,-9390,9908,9907,9389,-9346,9909,9908,9345,-9347,9910,9909,9346,-9309,9911,9910,9308,-9405,9912,9911,9404,-9308,9913,9379,9912,-9308,9378,9913,9307,-9303,9914,9913,9378,-9366,9322,9319,-9915,9322,9914,-9366,7327,7710,7709,-7329,7711,7304,-7708,7305,7861,-7863,9322,9365,9915,-9307,9916,9915,9365,-9379,9917,9916,9378,-9303,9918,9917,9302,-9404,9919,9918,9403,-9304,9343,9920,9919,-9304,9921,9920,9343,-9345,9922,9921,9344,-9389,9923,9922,9388,-9334,9338,9924,9923,-9334,9925,9924,9338,-9412,9339,9926,9925,-9412,9348,9926,9339,-9350,5882,5884,5877,-5881,9927,9928,9929,-9931,9930,9929,9931,-9933,9932,9931,9933,-9935,9934,9933,9935,-9937,9936,9935,9937,-9939,9938,9937,9939,-9941,9940,9939,9941,-9943,9942,9941,9943,-9945,9944,9943,9945,-9947,9946,9945,9947,-9949,9948,9947,9949,-9951,9950,9949,9951,-9953,9952,9951,9953,-9955,9954,9953,9955,-9957,9956,9955,9957,-9959,9958,9957,9928,-9928,9960,9929,-9929,9960,9931,-9930,9960,9933,-9932,9960,9935,-9934,9960,9937,-9936,9960,9939,-9938,9960,9941,-9940,9960,9943,-9942,9960,9945,-9944,9960,9947,-9946,9960,9949,-9948,9960,9951,-9950,9960,9953,-9952,9960,9955,-9954,9960,9957,-9956,9960,9928,\n-9958,9961,9962,9963,-9965,9965,9966,9967,-9969,9969,9970,9971,-9973,9973,9974,9975,-9977,9977,9978,9979,-9981,9981,9966,9982,-9984,9984,9985,9986,-9988,9988,9985,9989,-9991,9991,9992,9993,-9983,9994,9976,9975,-9996,9995,9996,9978,-9995,9997,9998,9964,-9964,9999,10000,10001,-10003,9944,9990,9989,-9943,9942,9989,9984,-9941,9940,9984,9987,-9939,9987,10003,9936,-9939,9952,10002,10001,-9951,9950,10001,10004,-9949,9948,10004,10005,-9947,9946,10005,9990,-9945,10007,9962,9961,10006,-10011,9972,9986,9985,-9975,9970,9965,9968,-9972,9969,9972,9974,-9974,10007,10008,9968,-9968,9971,10008,9986,-9973,9981,9963,9962,-9968,9975,9988,10009,-9996,9996,9995,10009,-10001,9983,9997,9963,-9982,9998,9997,9993,-9993,9974,9985,9988,-9976,9979,10000,9999,-9981,10004,10001,10000,-10010,9988,9990,10005,-10010,10006,10003,9986,-10011,10011,9959,9973,-9977,10011,9976,9994,-10013,10012,9994,9978,-9978,10013,10014,9961,-9965,10015,10016,10017,-10019,10019,10020,10021,-10023,10023,10024,10025,-10027,10027,10028,9977,-9981,10029,10030,10031,-10019,10032,10033,10034,-10036,10036,10035,10037,-10039,9991,10031,10039,-9993,10040,10041,10023,-10027,10028,10042,10041,-10041,10043,10013,9964,-9999,10044,10045,9999,-10003,9927,9930,10036,-10039,9930,9932,10032,-10037,9932,9934,10033,-10033,9936,10003,10033,-9935,9952,9954,10044,-10003,9954,9956,10046,-10045,9956,9958,10047,-10047,9958,9927,10038,-10048,10006,9961,10014,10048,-10052,10035,10034,10020,-10025,10022,10021,10016,-10016,10024,10020,10019,-10026,10016,10049,10048,-10018,10021,10020,10034,-10050,10029,10017,10014,-10014,10023,10041,10050,-10038,10050,10041,10042,-10046,10030,10029,10013,-10044,10039,10043,9998,-9993,10024,10023,10037,-10036,10027,9980,9999,-10046,10045,10044,10046,-10051,10037,10050,10047,-10039,10034,10003,10006,-10052,10011,10026,10025,-9960,10040,10026,10011,-10013,10028,10040,10012,-9978,10008,10010,-9987,9981,9967,-9967,10008,10007,-10011,9971,9968,-10009,9962,10007,-9968,9983,9993,-9998,10000,9979,-9997,9982,9993,-9984,9978,9996,-9980,9989,9985,-9985,10004,10009,-10006,9987,\n9986,-10004,10049,10034,-10052,10029,10018,-10018,10049,10051,-10049,10021,10049,-10017,10014,10017,-10049,10030,10043,-10040,10045,10042,-10028,10031,10030,-10040,10027,10042,-10029,10036,10032,-10036,10046,10047,-10051,10033,10003,-10035,10052,10053,10054,-10056,10056,10057,10058,-10060,10060,10061,10062,-10064,10061,10060,10064,-10066,10066,10067,10068,-10070,10070,10071,10072,-10074,10074,10055,10054,-10076,10076,10077,10078,-10080,10080,10081,10079,-10083,10083,10084,10067,-10067,10073,10072,10085,-10087,10075,10054,10087,-10089,10089,10090,10091,-10093,10086,10085,10093,-10095,10095,10096,10097,-10099,10099,10100,10101,-10103,10103,10104,10105,-10107,10107,10108,10109,-10111,10111,10112,10113,-10115,10115,10116,10117,-10119,10119,10120,10121,-10123,10123,10124,10125,-10127,10127,10128,10129,-10131,10131,10130,10129,-10133,10133,10134,10135,-10117,10117,10116,10135,-10137,10122,10121,10137,-10139,10125,10139,10140,-10142,10126,10125,10141,-10143,10143,10126,10142,-10145,10134,10145,10146,-10136,10136,10135,10146,-10148,10138,10137,10148,-10150,10141,10140,10150,-10152,10152,10153,10154,-10156,10147,10146,10156,-10158,10149,10148,10158,-10160,10150,10160,10161,-10152,10162,10151,10161,-10164,10164,10162,10163,-10166,10166,10164,10165,-10168,10159,10158,10168,-10170,10160,10170,10171,-10162,10163,10161,10171,-10173,10165,10163,10172,-10174,10167,10165,10173,-10175,10175,10176,10177,-10179,10179,10177,10180,-10182,10181,10180,10182,-10184,10184,10183,10182,-10186,10186,10107,10110,-10188,10188,10186,10187,-10190,10190,10191,10108,-10108,10192,10190,10107,-10187,10193,10192,10186,-10189,10153,10188,10189,-10195,10195,10196,10191,-10191,10128,10197,10192,-10194,10190,10192,10197,-10196,10152,10193,10188,-10154,10129,10128,10193,-10153,10198,10197,10199,-10201,10127,10199,10197,-10129,10201,10202,10196,-10196,10203,10075,10088,-10205,10205,10206,10207,-10209,10209,10210,10211,-10213,10071,10213,10214,-10073,10072,10214,10215,-10086,10155,10132,10129,-10153,10216,10194,10167,-10175,10217,10209,10212,-10219,10219,10220,\n10221,-10223,10223,10224,10225,-10227,10227,10228,10229,-10231,10228,10231,10232,-10230,10233,10234,10235,-10237,10100,10237,10238,-10102,10226,10225,10239,-10241,10136,10137,10121,-10118,10147,10148,10137,-10137,10157,10158,10148,-10148,10241,10168,10158,-10158,10242,10243,10244,-10246,10246,10091,10090,-10248,10105,10245,10244,-10107,10248,10119,10122,-10140,10138,10140,10139,-10123,10149,10150,10140,-10139,10159,10160,10150,-10150,10169,10170,10160,-10160,10221,10217,10249,-10223,10220,10209,10217,-10222,10250,10251,10252,-10254,10254,10255,10256,-10258,10258,10259,10236,-10261,10258,10260,10087,-10262,10262,10263,10264,-10266,10266,10267,10268,-10270,10270,10271,10272,-10274,10065,10064,10200,-10084,10274,10093,10127,-10131,10275,9966,9965,-10277,10277,10176,10276,-9966,10278,10279,10280,-10282,10282,10283,10257,-10112,10112,10111,10257,-10257,9982,9966,10275,-10285,10157,10156,10285,-10242,10156,10145,10286,-10286,10286,10145,10251,-10251,10115,10113,10112,-10288,10255,10288,10289,-10257,10290,10291,10292,-10294,10291,10294,10295,-10293,10295,10294,10296,-10298,10298,10299,10064,-10061,10063,10300,10298,-10061,10056,10059,10301,-10303,10303,10074,10075,-10204,10082,10079,10078,-10305,10093,10084,10199,-10128,10200,10064,10299,-10199,10199,10084,10083,-10201,10299,10305,10306,-10202,10307,10066,10069,-10309,10067,10214,10213,-10069,10215,10214,10067,-10085,10264,10263,10309,-10311,10311,10282,10111,-10115,10281,10311,10114,-10313,10313,10314,10315,-10317,10283,10282,10236,-10260,10279,10236,10282,-10281,10280,10282,10311,-10282,10279,10278,10233,-10237,10052,10058,10057,-10318,10059,10058,10077,-10077,10269,10053,10318,-10267,10319,10320,10269,-10269,10321,10322,10323,-10325,10324,10323,10325,-10327,10327,10328,10326,-10326,10329,10330,10331,-10333,10333,10329,10332,-10335,10335,10254,10336,-10338,10255,10254,10335,-10339,10251,10288,10339,-10253,10259,10258,10329,-10334,10336,10283,10259,-10334,10254,10257,10283,-10337,10340,10267,10341,-10343,10343,10341,10267,-10267,10344,10343,10266,-10319,10317,10057,10345,\n-10347,10057,10056,10347,-10346,10056,10302,10348,-10348,10349,10350,10327,-10352,10352,10353,10354,-10356,10354,10353,10356,-10358,10358,10359,10323,-10323,10359,10360,10325,-10324,10360,10351,10327,-10326,10293,10292,10352,-10350,10264,10310,10351,-10361,10265,10264,10360,-10360,10361,10265,10359,-10359,10262,10341,10343,-10264,10263,10343,10344,-10310,10291,10290,10346,-10346,10290,10309,10344,-10347,10291,10345,10347,-10295,10294,10347,10348,-10297,10297,10296,10348,-10357,10295,10297,10356,-10354,10292,10295,10353,-10353,10350,10362,10328,-10328,10363,10355,10354,-10365,10364,10354,10357,-10366,10366,10367,10368,-10370,10370,10371,10369,-10369,10372,10373,10374,-10376,10376,10377,10374,-10374,10102,10378,10379,-10315,10380,10381,10314,-10380,10382,10383,10384,-10386,10385,10384,10386,-10388,10387,10386,10388,-10390,10390,10391,10392,-10394,10394,10395,10367,-10367,10089,10366,10369,-10091,10090,10369,10371,-10248,10273,10272,10396,-10376,10101,10238,10374,-10378,10315,10397,10398,-10317,10243,10385,10387,-10245,10244,10387,10389,-10107,10106,10389,10392,-10104,10237,10399,10400,-10271,10246,10271,10401,-10403,10092,10091,10403,-10405,10205,10092,10404,-10406,10406,10407,10408,-10105,10245,10105,10409,-10411,10242,10245,10410,-10412,10412,10242,10411,-10414,10100,10414,10399,-10238,10415,10080,10082,-10417,10120,10119,10417,-10419,10419,10420,10204,-10235,10421,10120,10418,-10423,10119,10248,10423,-10418,10124,10123,10424,-10426,10234,10426,10427,-10420,10428,10303,10203,-10430,10416,10082,10304,-10431,10430,10368,10367,-10417,10428,10370,10368,-10431,10420,10372,10431,-10430,10376,10373,10419,-10428,10432,10379,10378,-10434,10383,10434,10435,-10423,10386,10384,10418,-10418,10423,10388,10386,-10418,10393,10388,10423,-10426,10395,10436,10080,-10416,10102,10377,10376,-10379,10433,10378,10427,-10427,10437,10281,10312,-10439,10435,10439,10437,-10439,10380,10439,10435,-10435,10440,10381,10380,-10435,10441,10316,10398,-10443,10443,10444,10313,-10442,10099,10102,10314,-10314,10444,10445,10099,-10314,10058,10052,10055,\n-10078,10077,10055,10074,-10079,10271,10246,10247,-10273,10309,10290,10293,-10311,10074,10303,10304,-10079,10053,10052,10317,-10319,10318,10317,10346,-10345,10310,10293,10349,-10352,10247,10371,10396,-10273,10091,10246,10402,-10404,10303,10428,10430,-10305,10088,10087,10260,-10236,10104,10103,10446,-10407,10096,10123,10447,-10098,10447,10123,10126,-10144,10144,10142,10164,-10167,10204,10088,10235,-10235,10185,10448,10449,-10185,10261,10087,10054,-10054,10237,10270,10273,-10239,10330,10320,10319,-10332,10258,10261,10330,-10330,10372,10375,10396,-10432,10393,10392,10389,-10389,10238,10273,10375,-10375,10103,10392,10391,-10447,10271,10270,10400,-10402,10104,10408,10409,-10106,10203,10204,10420,-10430,10124,10425,10423,-10249,10373,10372,10420,-10420,10390,10393,10425,-10425,10125,10124,10248,-10140,10312,10115,10118,-10439,10120,10421,10117,-10122,10412,10450,10243,-10243,10113,10115,10312,-10115,10256,10289,10287,-10113,10288,10255,10338,-10340,10434,10383,10382,-10441,10450,10382,10385,-10244,10412,10413,10442,-10399,10438,10421,10422,-10436,10383,10422,10418,-10385,10289,10288,10134,-10134,10134,10288,10251,-10146,10362,10350,10355,-10364,10350,10349,10352,-10356,10370,10428,10429,-10432,10371,10370,10431,-10397,10287,10133,10116,-10116,10455,10081,10080,-10437,10092,10205,10208,-10090,10436,10395,10394,-10208,10089,10208,10394,-10367,10367,10395,10415,-10417,10224,10223,10227,-10231,10151,10162,10142,-10142,10390,10424,10123,-10452,10452,10453,10348,-10303,10062,10059,10076,-10064,10063,10076,10079,-10301,10300,10079,10081,-10299,10062,10061,10301,-10060,10454,10305,10081,-10456,10302,10301,10308,-10453,10210,10356,10453,-10212,10175,10168,10241,-10457,10179,10170,10169,-10179,10172,10171,10181,-10184,10173,10172,10183,-10185,10174,10173,10184,-10450,10132,10155,10223,-10227,10223,10155,10154,-10228,10227,10154,10216,-10229,10216,10174,10231,-10229,10131,10132,10226,-10241,10181,10171,10170,-10180,10275,10286,10250,-10285,10241,10285,10276,-10457,10285,10286,10275,-10277,10178,10169,10168,-10176,10196,10457,10458,\n-10192,10098,10108,10191,-10459,10108,10097,10447,-10110,10143,10144,10187,-10111,10166,10167,10194,-10190,10110,10109,10447,-10144,10189,10187,10144,-10167,10202,10459,10457,-10197,10306,10454,10459,-10203,10095,10098,10458,-10461,10096,10461,10462,-10464,10457,10464,10460,-10459,10459,10465,10464,-10458,10454,10455,10465,-10460,10070,10466,10218,-10072,10069,10068,10453,-10453,10218,10212,10213,-10072,10212,10211,10068,-10214,10467,10400,10399,-10469,10411,10410,10469,-10471,10413,10411,10470,-10472,10443,10442,10472,-10474,10468,10399,10414,-10475,10445,10444,10473,-10475,10475,10401,10400,-10468,10442,10413,10471,-10473,10337,10336,10333,-10335,10466,10249,10217,-10219,10267,10340,10476,-10269,10268,10476,10477,-10320,10331,10478,10479,-10333,10332,10479,10480,-10335,10481,10482,10335,-10338,10482,10483,10338,-10336,10484,10485,10252,-10340,10485,10486,10253,-10253,10209,10487,10488,-10211,10220,10219,10487,-10210,10265,10361,10489,-10263,10490,9991,9982,-10285,10262,10489,10342,-10342,10477,10478,10331,-10320,10483,10484,10339,-10339,10486,10490,10284,-10254,10480,10481,10337,-10335,10153,10194,10216,-10155,10448,10232,10231,-10450,10433,10278,10281,-10433,10491,10492,10404,-10404,10493,10491,10403,-10403,10492,10494,10405,-10405,10494,10495,10206,-10406,10496,10460,10464,-10498,10207,10464,-10466,10462,10095,10460,-10497,10493,10402,10401,-10476,10463,10469,10409,-10409,10398,10397,10450,-10413,10450,10397,10440,-10383,10315,10381,10440,-10398,10498,10499,10500,-10502,10502,10503,10504,-10506,10506,10507,10508,-10510,10509,10510,10511,-10507,10512,10513,10514,-10516,10070,10073,10516,-10518,10518,10519,10500,-10500,10520,10521,10522,-10524,10524,10525,10521,-10527,10527,10512,10515,-10529,10073,10086,10529,-10517,10519,10530,10531,-10501,10532,10533,10534,-10536,10086,10094,10536,-10530,10537,10538,10539,-10541,10541,10542,10543,-10545,10545,10546,10547,-10549,10549,10550,10551,-10553,10553,10554,10555,-10557,10557,10558,10559,-10561,10561,10562,10563,-10565,10565,10566,10567,-10569,10569,10130,10570,-10572,\n10131,10572,10570,-10131,10573,10560,10574,-10576,10559,10576,10574,-10561,10562,10577,10578,-10564,10567,10579,10580,-10582,10566,10582,10579,-10568,10583,10584,10582,-10567,10575,10574,10585,-10587,10576,10587,10585,-10575,10577,10588,10589,-10579,10579,10590,10591,-10581,10592,10593,10594,-10596,10587,10596,10597,-10586,10588,10598,10599,-10590,10591,10590,10600,-10602,10602,10603,10600,-10591,10604,10605,10603,-10603,10606,10607,10605,-10605,10598,10608,10609,-10600,10601,10600,10610,-10612,10603,10612,10610,-10601,10605,10613,10612,-10604,10607,10614,10613,-10606,10615,10616,10617,-10619,10619,10620,10621,-10618,10620,10622,10623,-10622,10624,10625,10623,-10623,10626,10627,10550,-10550,10628,10629,10627,-10627,10630,10549,10552,-10632,10632,10626,10549,-10631,10633,10628,10626,-10633,10595,10634,10629,-10629,10635,10630,10631,-10637,10571,10633,10632,-10638,10630,10635,10637,-10633,10592,10595,10628,-10634,10570,10592,10633,-10572,10638,10639,10640,-10638,10569,10571,10637,-10641,10641,10635,10636,-10643,10643,10644,10530,-10520,10645,10646,10647,-10649,10649,10650,10651,-10653,10517,10516,10653,-10655,10516,10529,10655,-10654,10593,10592,10570,-10573,10656,10614,10607,-10635,10657,10658,10650,-10650,10219,10222,10659,-10661,10661,10662,10663,-10665,10665,10666,10667,-10669,10668,10667,10669,-10671,10671,10672,10673,-10675,10544,10543,10675,-10677,10662,10240,10239,-10664,10576,10559,10563,-10579,10587,10576,10578,-10590,10596,10587,10589,-10600,10677,10596,10599,-10610,10678,10679,10680,-10682,10682,10683,10535,-10535,10547,10546,10680,-10680,10684,10581,10562,-10562,10577,10562,10581,-10581,10588,10577,10580,-10592,10598,10588,10591,-10602,10608,10598,10601,-10612,10659,10222,10249,-10658,10660,10659,10657,-10650,10685,10686,10687,-10689,10689,10690,10691,-10693,10693,10694,10672,-10696,10693,10696,10531,-10695,10697,10698,10699,-10701,10701,10702,10703,-10705,10705,10706,10707,-10709,10510,10527,10639,-10512,10274,10130,10569,-10537,10709,10710,10015,-10019,10618,10711,10710,-10713,10713,10714,10715,-10717,\n10717,10553,10690,-10719,10556,10691,10690,-10554,10031,10719,10709,-10019,10596,10677,10720,-10598,10597,10720,10721,-10587,10721,10685,10688,-10587,10557,10722,10556,-10556,10692,10691,10723,-10725,10725,10726,10727,-10729,10728,10727,10729,-10731,10729,10731,10732,-10731,10733,10506,10511,-10735,10507,10506,10733,-10736,10502,10736,10737,-10504,10738,10643,10519,-10519,10525,10739,10522,-10522,10536,10569,10640,-10529,10639,10638,10734,-10512,10640,10639,10527,-10529,10734,10641,10740,-10742,10513,10512,10742,-10744,10515,10514,10654,-10654,10655,10528,10515,-10654,10699,10744,10745,-10701,10746,10554,10553,-10718,10714,10747,10554,-10747,10748,10749,10750,-10752,10718,10695,10672,-10718,10716,10715,10717,-10673,10715,10714,10746,-10718,10716,10672,10671,-10714,10498,10752,10505,-10505,10503,10520,10523,-10505,10702,10701,10753,-10502,10754,10703,10702,-10756,10321,10756,10757,-10323,10756,10758,10759,-10758,10760,10759,10758,-10762,10762,10763,10764,-10766,10766,10767,10763,-10763,10768,10769,10770,-10690,10692,10771,10768,-10690,10688,10687,10772,-10725,10695,10766,10762,-10694,10770,10766,10695,-10719,10689,10770,10718,-10691,10340,10342,10773,-10705,10774,10701,10704,-10774,10775,10753,10701,-10775,10752,10776,10777,-10506,10505,10777,10778,-10503,10502,10778,10779,-10737,10780,10781,10760,-10783,10783,10784,10785,-10787,10785,10787,10788,-10787,10358,10322,10757,-10790,10789,10757,10759,-10791,10790,10759,10760,-10782,10726,10780,10783,-10728,10699,10790,10781,-10745,10698,10789,10790,-10700,10361,10358,10789,-10699,10697,10700,10774,-10774,10700,10745,10775,-10775,10725,10776,10775,-10746,10776,10725,10728,-10778,10728,10730,10778,-10778,10730,10732,10779,-10779,10731,10788,10779,-10733,10729,10786,10788,-10732,10727,10783,10786,-10730,10782,10760,10761,-10792,10792,10793,10785,-10785,10793,10794,10787,-10786,10795,10796,10797,-10799,10799,10797,10796,-10801,10801,10802,10803,-10805,10805,10804,10803,-10807,10542,10751,10807,-10809,10809,10807,10751,-10811,10811,10812,10813,-10815,10812,10815,10816,-10814,\n10815,10817,10818,-10817,10819,10820,10821,-10823,10823,10795,10798,-10825,10532,10535,10796,-10796,10535,10683,10800,-10797,10706,10802,10825,-10708,10543,10806,10803,-10676,10750,10749,10826,-10828,10681,10680,10815,-10813,10680,10546,10817,-10816,10546,10545,10821,-10818,10676,10705,10828,-10830,10682,10830,10831,-10709,10533,10832,10833,-10535,10645,10834,10832,-10534,10835,10548,10836,-10838,10679,10838,10839,-10548,10678,10840,10838,-10680,10841,10842,10840,-10679,10544,10676,10829,-10844,10844,10845,10525,-10525,10564,10846,10847,-10562,10848,10674,10644,-10850,10850,10851,10846,-10565,10561,10847,10852,-10685,10568,10853,10854,-10566,10674,10848,10855,-10857,10857,10858,10643,-10739,10845,10859,10739,-10526,10859,10845,10798,-10798,10857,10859,10797,-10800,10849,10858,10860,-10802,10805,10855,10848,-10805,10861,10862,10808,-10808,10814,10851,10863,-10865,10816,10847,10846,-10814,10852,10847,10816,-10819,10820,10853,10852,-10819,10824,10844,10524,-10866,10542,10808,10805,-10807,10862,10856,10855,-10809,10866,10867,10747,-10715,10863,10867,10866,-10869,10809,10864,10863,-10869,10869,10864,10809,-10811,10870,10871,10826,-10750,10541,10748,10751,-10543,10504,10523,10499,-10499,10523,10522,10518,-10500,10708,10707,10683,-10683,10745,10744,10726,-10726,10518,10522,10739,-10739,10501,10753,10752,-10499,10753,10775,10776,-10753,10744,10781,10780,-10727,10683,10707,10825,-10801,10534,10833,10830,-10683,10738,10739,10859,-10858,10530,10673,10694,-10532,10548,10835,10874,-10546,10540,10539,10875,-10566,10875,10583,10566,-10566,10584,10606,10604,-10583,10644,10674,10673,-10531,10625,10624,10876,-10878,10696,10501,10500,-10532,10676,10675,10706,-10706,10765,10764,10754,-10756,10693,10762,10765,-10697,10801,10860,10825,-10803,10820,10818,10817,-10822,10675,10803,10802,-10707,10545,10874,10822,-10822,10708,10831,10828,-10706,10548,10547,10839,-10837,10643,10858,10849,-10645,10568,10684,10852,-10854,10804,10848,10849,-10802,10819,10854,10853,-10821,10567,10581,10684,-10569,10747,10867,10558,-10558,10559,10850,10564,-10564,\n10841,10678,10681,-10879,10555,10554,10747,-10558,10691,10556,10722,-10724,10724,10772,10771,-10693,10864,10869,10811,-10815,10878,10681,10812,-10812,10841,10826,10871,-10843,10867,10863,10851,-10851,10814,10813,10846,-10852,10723,10573,10575,-10725,10575,10586,10688,-10725,10791,10792,10784,-10783,10782,10784,10783,-10781,10799,10860,10858,-10858,10800,10825,10860,-10800,10722,10557,10560,-10574,10647,10865,-10884,10533,10532,10646,-10646,10865,10647,10823,-10825,10532,10795,10823,-10647,10798,10845,10844,-10825,10664,10666,10665,-10662,10590,10579,10582,-10603,10819,10879,10565,-10855,10880,10736,10779,-10882,10508,10507,10520,-10504,10507,10735,10521,-10521,10735,10733,10526,-10522,10508,10503,10737,-10510,10882,10883,10526,-10742,10743,10737,10736,-10881,10652,10651,10881,-10789,10615,10712,10677,-10610,10619,10616,10608,-10612,10612,10622,10620,-10611,10613,10624,10622,-10613,10614,10876,10624,-10614,10572,10662,10661,-10594,10661,10665,10594,-10594,10665,10668,10656,-10595,10656,10668,10670,-10615,10131,10240,10662,-10573,10620,10619,10611,-10611,10709,10719,10685,-10722,10677,10712,10710,-10721,10720,10710,10709,-10722,10616,10615,10609,-10609,10636,10631,10884,-10886,10631,10552,10538,-10885,10552,10551,10875,-10540,10583,10550,10627,-10585,10606,10629,10634,-10608,10550,10583,10875,-10552,10629,10606,10584,-10628,10642,10636,10885,-10887,10740,10642,10886,-10883,10537,10887,10884,-10539,10540,10888,10889,-10891,10885,10884,10887,-10892,10886,10885,10891,-10893,10882,10886,10892,-10884,10070,10517,10658,-10467,10513,10880,10881,-10515,10658,10517,10654,-10651,10650,10654,10514,-10652,10893,10894,10829,-10829,10840,10895,10896,-10839,10842,10897,10895,-10841,10872,10898,10899,-10872,10894,10900,10843,-10830,10901,10893,10828,-10832,10871,10899,10897,-10843,10769,10767,10766,-10771,10466,10658,10657,-10250,10704,10703,10476,-10341,10703,10754,10477,-10477,10764,10763,10479,-10479,10763,10767,10480,-10480,10481,10769,10768,-10483,10482,10768,10771,-10484,10484,10772,10687,-10486,10485,10687,10686,-10487,10649,\n10652,10488,-10488,10660,10649,10487,-10220,10698,10697,10489,-10362,10490,10719,10031,-9992,10697,10773,10342,-10490,10477,10754,10764,-10479,10483,10771,10772,-10485,10486,10686,10719,-10491,10480,10767,10769,-10482,10595,10594,10656,-10635,10877,10876,10670,-10670,10862,10861,10714,-10714,10902,10833,10832,-10904,10904,10830,10833,-10903,10903,10832,10834,-10906,10905,10834,10648,-10907,10907,10908,10891,-10888,10648,10891,10908,-10907,10889,10907,10887,-10538,10904,10901,10831,-10831,10888,10836,10839,-10897,10826,10841,10878,-10828,10878,10811,10869,-10828,10750,10827,10869,-10811,10306,10202,-10202,10260,10236,-10236,10093,10274,-10095,10162,10164,-10143,10156,10146,-10146,10215,10093,-10086,10438,10118,-10422,10179,10178,-10178,10276,10176,-10457,10234,10233,-10427,10133,10287,-10290,10201,10195,-10199,10198,10195,-10198,10305,10299,-10299,10065,10307,-10062,10083,10066,-10066,10065,10066,-10308,10299,10201,-10199,10215,10084,-10094,10281,10437,-10433,10053,10269,-10321,10443,10441,-10443,10414,10099,-10446,10314,10381,-10316,10394,10208,-10208,10441,10313,-10317,10414,10100,-10100,10439,10432,-10438,10379,10439,-10381,10427,10378,-10377,10377,10102,-10102,10379,10432,-10440,10320,10330,-10262,10118,10117,-10422,10405,10206,-10206,10390,10451,-10392,10406,10451,-10408,10446,10451,-10407,10096,10463,-10124,10391,10451,-10447,10053,10320,-10262,10175,10456,-10177,10356,10348,-10454,10081,10305,-10299,10307,10301,-10062,10307,10308,-10302,10250,10253,-10285,10306,10305,-10455,10097,10108,-10099,10095,10461,-10097,10069,10452,-10309,10068,10211,-10454,10278,10433,-10427,10278,10426,-10234,10445,10474,-10415,10443,10473,-10445,10174,10449,-10232,10461,10095,-10463,10408,10407,-10464,10451,10123,-10464,10410,10409,-10470,10407,10451,-10464,10740,10641,-10643,10694,10673,-10673,10536,10094,-10275,10602,10582,-10605,10597,10586,-10586,10655,10529,-10537,10867,10850,-10559,10619,10617,-10617,10710,10711,-10016,10674,10856,-10672,10573,10723,-10723,10641,10638,-10636,10638,10637,-10636,10741,10733,-10735,10510,10509,\n-10743,10527,10510,-10513,10510,10742,-10513,10734,10638,-10642,10655,10536,-10529,10714,10861,-10867,10501,10755,-10703,10872,10871,-10871,10843,10873,-10542,10751,10750,-10811,10823,10647,-10647,10870,10749,-10749,10843,10541,-10545,10868,10866,-10862,10807,10809,-10869,10855,10805,-10809,10806,10543,-10543,10807,10868,-10862,10755,10696,-10766,10558,10850,-10560,10834,10645,-10649,10819,10822,-10880,10835,10837,-10880,10874,10835,-10880,10540,10565,-10889,10822,10874,-10880,10501,10696,-10756,10615,10618,-10713,10883,10892,-10648,10788,10881,-10780,10526,10733,-10742,10742,10509,-10738,10742,10737,-10744,10685,10719,-10687,10740,10882,-10742,10539,10538,-10553,10537,10540,-10891,10513,10743,-10881,10514,10881,-10652,10713,10856,-10863,10713,10671,-10857,10873,10843,-10901,10614,10670,-10877,10890,10889,-10538,10836,10888,-10838,10879,10888,-10566,10838,10896,-10840,10837,10888,-10880,10909,10910,10911,-10913,10913,10914,10229,-10233,10915,10916,10917,-10919,10919,10920,10921,-10923,10923,10924,10239,-10226,10925,10926,10224,-10231,10925,10230,10229,-10915,10911,10910,10927,-10929,10929,10930,10931,-10933,10224,10926,10923,-10226,10930,10909,10912,-10932,10933,10934,10935,-10937,10937,10938,10939,-10941,10667,10941,10942,-10670,10943,10944,10945,-10947,10947,10948,10949,-10951,10951,10952,10953,-10955,10239,10924,10955,-10664,10956,10666,10664,-10958,10667,10666,10956,-10942,10958,10938,10937,-10960,10960,10961,10962,-10964,10964,10932,10931,-10966,10955,10957,10664,-10664,10965,10931,10912,-10941,10966,10950,10949,-10968,10968,10960,10969,-10971,10967,10953,10952,-10967,10962,10958,10971,-10973,10973,10974,10975,-10977,10977,10922,10978,-10980,10980,10981,10982,-10984,10984,10985,10977,-10980,10981,10986,10977,-10986,10982,10981,10985,-10985,10987,10986,10988,-10990,10986,10987,10990,-10978,10991,10990,10987,-10993,10991,10993,10994,-10991,10990,10995,10996,-10998,10986,10998,10999,-11001,10988,10986,11001,-11003,10989,10988,11003,-11005,10992,10987,11005,-11007,10992,11007,11008,-10992,10937,10940,10912,-10912,\n10959,10937,10911,-10929,11009,10965,10940,-10940,10972,11010,11011,-11013,10974,10973,10970,-10970,10989,11013,11014,-10988,11015,10927,10934,-11017,11005,11014,11012,-11012,10998,10951,10954,-11000,10997,10996,10919,-10923,10927,10916,10920,-10935,10948,10946,10958,-10962,11017,10994,10933,-10996,11018,10910,10914,-10914,10916,10927,11018,-10918,10929,10932,10924,-10924,10910,10909,10925,-10915,10909,10930,10926,-10926,10926,10930,10929,-10924,10941,10938,11019,-10943,11019,10958,10946,-10946,10924,10932,10964,-10956,10956,10939,10938,-10942,10960,10968,10967,-10950,10953,10967,10968,-10971,10957,11009,10939,-10957,11004,11003,10963,-10963,10964,11009,10957,-10956,11002,11001,11020,-10975,11006,11005,11011,-11011,11008,11007,11021,-11016,10994,10993,11016,-10934,10961,10960,10949,-10949,10976,10975,11000,-11000,10920,10919,10935,-10935,10995,10933,10936,-10997,11012,11014,11013,-10973,10970,10973,10954,-10954,11015,11016,10993,-11009,11013,11004,10962,-10973,11010,11021,11007,-11007,11020,11001,11000,-10976,10999,10954,10973,-10977,11002,10974,10969,-11004,10935,10919,10996,-10937,10959,10928,11021,-10972,10913,10232,10918,-10918,10920,10916,10915,-10922,10669,10942,10945,-10945,10943,10946,10948,-10948,10986,10981,10980,-10999,11022,10983,10982,-11024,11022,11024,10952,-10984,10232,10448,-10919,11018,10927,-10911,10928,10927,-11016,11016,10934,-10934,11019,10938,-10959,10963,10969,-10961,10961,10958,-10963,11020,10975,-10975,11021,10928,-11016,10997,10922,-10978,10965,11009,-10965,10971,11010,-10973,10971,10958,-10960,10951,10983,-10953,10921,10978,-10923,11010,10971,-11022,11008,10993,-10992,11000,11001,-10987,11002,11003,-10989,11006,11007,-10993,11004,11013,-10990,10963,11003,-10970,10990,11017,-10996,10994,11017,-10991,11005,10987,-11015,10977,10990,-10998,11018,10913,-10918,11019,10945,-10943,10951,10998,-10981,10951,10980,-10984,10950,10966,-11025,10966,10952,-11025,10984,10979,-11024,10982,10984,-11024,11025,11026,11027,-11029,11029,11030,11031,-11033,11033,11034,11031,-11031,11035,11036,11034,-11034,11037,\n11038,11036,-11036,11039,11040,11041,-11043,11043,11044,11053,-11053,11046,11047,11054,-11056,11048,11046,11055,-11057,11049,11048,11056,-11058,11050,11049,11057,-11059,11051,11050,11058,-11060,10711,10618,11060,-11062,10617,11062,11063,-10619,10617,10621,11064,-11063,10621,10623,11065,-11065,10623,10625,11066,-11066,11037,11067,11068,-11039,11070,11040,11069,-11060,10625,10877,11071,-11067,11072,11073,11074,-11076,11072,11075,11076,-10948,10944,10943,11077,-11079,11079,11080,11081,-11083,11083,11084,11085,-11087,11054,11047,11043,-11053,11029,11032,11026,-11026,11087,11088,10025,-11090,10022,11090,11091,-10020,11092,11080,11079,-11094,11094,11069,11095,-11097,11069,11051,-11060,11068,11067,11084,-11084,11074,11073,11082,-11082,11085,11092,11093,-11087,11043,11025,11028,-11045,11047,11046,11030,-11030,11048,11033,11030,-11047,11048,11049,11035,-11034,11049,11050,11037,-11036,11050,11051,11067,-11038,11087,11089,11045,-11045,11091,11090,11053,-11046,11060,11052,11053,-11062,11062,11055,11054,-11064,11062,11064,11056,-11056,11064,11065,11057,-11057,11065,11066,11058,-11058,11066,11071,11059,-11059,11075,11074,11041,-11041,11076,11075,11040,-11071,11059,11078,11077,-11071,11080,11039,11042,-11082,11084,11094,11096,-11086,11047,11029,11025,-11044,11063,11054,11052,-11061,11080,11092,11095,-11040,11041,11074,11081,-11043,11096,11095,11092,-11086,11067,11051,11094,-11085,11071,10877,10944,-11079,10947,11076,11077,-10944,11088,11087,11028,-11028,11090,10022,10711,-11062,10019,11091,11089,-10026,11097,11098,11032,-11032,11099,11097,11031,-11035,11100,11099,11034,-11037,11101,11100,11036,-11039,11098,11102,11026,-11033,11102,10025,11027,-11027,11103,11101,11038,-11069,11108,11093,11079,-11110,11108,11083,11086,-11094,11106,11103,11068,-11084,11107,11082,11073,-11073,11069,11040,-11040,10618,11063,-11061,11039,11095,-11070,11094,11051,-11070,11071,11078,-11060,11070,11077,-11077,10022,10015,-10712,11087,11044,-11029,11091,11045,-11090,11061,11053,-11091,11027,10025,-11089,11053,11044,-11046,10947,11105,11107,-11073,11104,11108,\n11109,-11111,11104,11106,11083,-11109,11107,11109,11079,-11083,11105,11110,11109,-11108,11105,10947,-10944,11111,11112,11113,-11115,11115,11116,11117,-11119,11119,11118,11117,-11121,11121,11119,11120,-11123,11123,11121,11122,-11125,11125,11126,11127,-11129,11129,11131,-11139,11132,11133,11141,-11141,11133,11134,11142,-11142,11134,11135,11143,-11143,11135,11136,11144,-11144,11136,11137,11145,-11145,11138,11139,-11130,10277,11146,11147,-10177,10177,10176,11148,-11150,10177,11149,11150,-10181,10180,11150,11151,-10183,10182,11151,11152,-10186,11123,11124,11153,-11155,11155,11126,11156,-11146,10185,11152,11157,-10449,10978,11158,11159,-11161,10978,10921,11161,-11159,10918,11162,11163,-10916,11164,11165,11166,-11168,11168,11169,11170,-11172,11138,11131,11132,-11141,11115,11111,11114,-11117,11172,11173,9973,-11175,9970,9969,11175,-11177,11177,11178,11164,-11168,11179,11155,11180,-11182,11145,11137,-11156,11153,11168,11171,-11155,11159,11166,11165,-11161,11170,11169,11178,-11178,11131,11130,11112,-11112,11132,11115,11118,-11134,11134,11133,11118,-11120,11134,11119,11121,-11136,11135,11121,11123,-11137,11136,11123,11154,-11138,11172,11130,11129,-11174,11175,11129,11139,-11177,11147,11146,11139,-11139,11149,11148,11140,-11142,11149,11141,11142,-11151,11150,11142,11143,-11152,11151,11143,11144,-11153,11152,11144,11145,-11158,11158,11126,11125,-11160,11161,11156,11126,-11159,11145,11156,11163,-11163,11167,11166,11128,-11128,11171,11170,11181,-11181,11132,11131,11111,-11116,11148,11147,11138,-11141,11167,11127,11179,-11178,11125,11128,11166,-11160,11181,11170,11177,-11180,11154,11171,11180,-11138,11157,11162,10918,-10449,10921,10915,11163,-11162,11174,11113,11112,-11173,11176,11146,10277,-9971,9969,9973,11173,-11176,11182,11117,11116,-11184,11184,11120,11117,-11183,11185,11122,11120,-11185,11186,11124,11122,-11186,11183,11116,11114,-11188,11187,11114,11113,-9974,11188,11153,11124,-11187,11189,11190,11164,-11179,11189,11178,11169,-11192,11191,11168,11153,-11189,11190,11192,10978,11160,-11166,11155,11127,-11127,10176,11147,-11149,\n11127,11155,-11180,11180,11155,-11138,11157,11145,-11163,11156,11161,-11164,9970,10277,-9966,11172,11112,-11131,11175,11173,-11130,11146,11176,-11140,11165,11164,-11191,11169,11168,-11192,11113,11174,-9974,11131,11129,-11131,10883,10865,10524,-10527,10648,10647,-10892,10207,10455,-10437,10455,10207,-10466,10206,10464,-10208,10495,10497,10464,-10207,10891,10647,-10893,11193,11194,11195,-11197,11196,11195,11197,-11241,11240,11197,11198,-11243,11242,11198,11199,-11245,11244,11199,11200,-11247,11246,11200,11201,-11203,11202,11201,11203,-11205,11204,11203,11205,-11251,11250,11205,11206,-11253,11252,11206,11207,-11209,11208,11207,11209,-11211,11210,11209,11211,-11213,11212,11211,11213,-11215,11214,11213,11215,-11217,11216,11215,11217,-11219,11218,11217,11219,-11221,11220,11219,11194,-11194,11194,11221,11222,-11196,11195,11222,11223,-11198,11197,11223,11224,-11199,11198,11224,11225,-11200,11199,11225,11226,-11201,11200,11226,11227,-11202,11201,11227,11228,-11204,11203,11228,11229,-11206,11205,11229,11230,-11207,11206,11230,11231,-11208,11207,11231,11232,-11210,11209,11232,11233,-11212,11211,11233,11234,-11214,11213,11234,11235,-11216,11215,11235,11236,-11218,11217,11236,11237,-11220,11219,11237,11221,-11195,11238,11239,11196,-11241,11241,11238,11240,-11243,11243,11241,11242,-11245,11245,11243,11244,-11247,11247,11245,11246,-11203,11248,11247,11202,-11205,11249,11248,11204,-11251,11251,11249,11250,-11253,11253,11251,11252,-11209,11254,11253,11208,-11211,11255,11254,11210,-11213,11256,11255,11212,-11215,11257,11256,11214,-11217,11258,11257,11216,-11219,11259,11258,11218,-11221,11260,11259,11220,-11194,11239,11260,11193,-11197,11261,11262,11239,-11239,11263,11261,11238,-11242,11264,11263,11241,-11244,11265,11264,11243,-11246,11266,11265,11245,-11248,11267,11266,11247,-11249,11268,11267,11248,-11250,11269,11268,11249,-11252,11270,11269,11251,-11254,11271,11270,11253,-11255,11272,11271,11254,-11256,11273,11272,11255,-11257,11274,11273,11256,-11258,11275,11274,11257,-11259,11276,11275,11258,-11260,11277,11276,11259,-11261,11262,\n11277,11260,-11240,11278,11279,11262,-11262,11280,11278,11261,-11264,11281,11280,11263,-11265,11282,11281,11264,-11266,11283,11282,11265,-11267,11284,11283,11266,-11268,11285,11284,11267,-11269,11286,11285,11268,-11270,11287,11286,11269,-11271,11288,11287,11270,-11272,11289,11288,11271,-11273,11290,11289,11272,-11274,11291,11290,11273,-11275,11292,11291,11274,-11276,11293,11292,11275,-11277,11294,11293,11276,-11278,11279,11294,11277,-11263,11279,11278,11295,-11297,11278,11280,11297,-11296,11280,11281,11298,-11298,11281,11282,11299,-11299,11282,11283,11300,-11300,11283,11284,11301,-11301,11284,11285,11302,-11302,11285,11286,11303,-11303,11286,11287,11304,-11304,11287,11288,11305,-11305,11288,11289,11306,-11306,11289,11290,11307,-11307,11290,11291,11308,-11308,11291,11292,11309,-11309,11292,11293,11310,-11310,11293,11294,11311,-11311,11294,11279,11296,-11312,11312,11222,-11222,11312,11223,-11223,11312,11224,-11224,11312,11225,-11225,11312,11226,-11226,11312,11227,-11227,11312,11228,-11228,11312,11229,-11229,11312,11230,-11230,11312,11231,-11231,11312,11232,-11232,11312,11233,-11233,11312,11234,-11234,11312,11235,-11235,11312,11236,-11236,11312,11237,-11237,11312,11221,-11238,11358,11313,11314,-11380,11315,11316,11313,-11359,11317,11318,11316,-11316,11362,11319,11318,-11318,11364,11320,11319,-11363,11321,11322,11320,-11365,11323,11324,11322,-11322,11325,11326,11324,-11324,11327,11328,11326,-11326,11329,11330,11328,-11328,11331,11332,11330,-11330,11333,11334,11332,-11332,11335,11336,11334,-11334,11374,11337,11336,-11336,11376,11338,11337,-11375,11339,11340,11338,-11377,11379,11314,11340,-11340,11313,11341,11342,-11315,11316,11343,11341,-11314,11318,11344,11343,-11317,11319,11345,11344,-11319,11320,11346,11345,-11320,11322,11347,11346,-11321,11324,11348,11347,-11323,11326,11349,11348,-11325,11328,11350,11349,-11327,11330,11351,11350,-11329,11332,11352,11351,-11331,11334,11353,11352,-11333,11336,11354,11353,-11335,11337,11355,11354,-11337,11338,11356,11355,-11338,11340,11357,11356,-11339,11314,11342,11357,-11341,11315,11358,\n11359,-11361,11317,11315,11360,-11362,11362,11317,11361,-11364,11364,11362,11363,-11366,11321,11364,11365,-11367,11323,11321,11366,-11368,11325,11323,11367,-11369,11327,11325,11368,-11370,11329,11327,11369,-11371,11331,11329,11370,-11372,11333,11331,11371,-11373,11335,11333,11372,-11374,11374,11335,11373,-11376,11376,11374,11375,-11378,11339,11376,11377,-11379,11379,11339,11378,-11381,11358,11379,11380,-11360,11360,11359,11381,-11383,11361,11360,11382,-11384,11363,11361,11383,-11385,11365,11363,11384,-11386,11366,11365,11385,-11387,11367,11366,11386,-11388,11368,11367,11387,-11389,11369,11368,11388,-11390,11370,11369,11389,-11391,11371,11370,11390,-11392,11372,11371,11391,-11393,11373,11372,11392,-11394,11375,11373,11393,-11395,11377,11375,11394,-11396,11378,11377,11395,-11397,11380,11378,11396,-11398,11359,11380,11397,-11382,11382,11381,11398,-11400,11383,11382,11399,-11401,11384,11383,11400,-11402,11385,11384,11401,-11403,11386,11385,11402,-11404,11387,11386,11403,-11405,11388,11387,11404,-11406,11389,11388,11405,-11407,11390,11389,11406,-11408,11391,11390,11407,-11409,11392,11391,11408,-11410,11393,11392,11409,-11411,11394,11393,11410,-11412,11395,11394,11411,-11413,11396,11395,11412,-11414,11397,11396,11413,-11415,11381,11397,11414,-11399,11399,11398,11415,-11417,11400,11399,11416,-11418,11401,11400,11417,-11419,11402,11401,11418,-11420,11403,11402,11419,-11421,11404,11403,11420,-11422,11405,11404,11421,-11423,11406,11405,11422,-11424,11407,11406,11423,-11425,11408,11407,11424,-11426,11409,11408,11425,-11427,11410,11409,11426,-11428,11411,11410,11427,-11429,11412,11411,11428,-11430,11413,11412,11429,-11431,11414,11413,11430,-11432,11398,11414,11431,-11416,11342,11341,-11433,11341,11343,-11433,11343,11344,-11433,11344,11345,-11433,11345,11346,-11433,11346,11347,-11433,11347,11348,-11433,11348,11349,-11433,11349,11350,-11433,11350,11351,-11433,11351,11352,-11433,11352,11353,-11433,11353,11354,-11433,11354,11355,-11433,11355,11356,-11433,11356,11357,-11433,11357,11342,-11433\n\t\t} \n\t\tEdges: *23455 {\n\t\t\ta: 0,4,16,20,23,24,29,32,36,40,44,48,3,1,2,7,6,9,10,15,13,14,17,18,25,27,26,35,34,37,39,38,42,30,46,50,55,53,54,60,61,66,64,65,68,69,72,74,73,76,81,80,83,85,84,88,92,96,99,104,107,111,121,123,129,128,131,133,140,8,12,105,22,102,31,101,100,108,144,113,112,116,115,136,120,119,124,132,293,545,603,604,1099,1126,1128,1132,1147,1160,1175,1203,1204,1223,2486,1232,1242,4963,1248,1333,1348,1356,1441,1502,1509,1517,1518,1812,1813,1829,1844,1997,2179,2252,2249,2338,2450,2581,2709,2731,2867,2870,3067,4406,2377,3104,3108,2444,3120,4088,4166,4173,4225,4408,4763,4958,4991,4992,5008,5096,5187,5369,5744,6285,6332,6357,6739,4762,1791,149,148,147,146,153,152,150,157,156,154,161,158,162,169,167,174,166,178,873,182,181,180,179,186,185,189,187,194,197,196,195,6887,201,200,199,198,205,204,202,209,208,206,213,210,216,215,214,221,225,224,222,229,226,6449,176,231,230,237,236,235,234,238,246,250,249,248,247,253,251,257,262,266,265,264,263,270,269,267,273,271,278,282,281,280,284,285,6092,290,289,287,288,294,292,298,297,295,296,302,300,306,303,305,309,313,312,310,311,317,315,316,321,320,318,325,323,324,609,329,326,333,337,336,335,334,341,340,339,338,345,344,342,349,348,346,353,350,357,355,354,361,360,359,358,365,364,362,369,368,366,373,370,377,376,374,375,381,379,380,385,383,382,384,388,386,392,391,390,395,393,399,406,407,620,618,411,409,410,420,416,414,413,418,424,422,427,432,431,430,436,434,433,435,441,440,438,442,446,458,457,455,454,462,459,467,466,471,468,475,474,473,472,479,478,476,483,482,480,487,484,490,489,488,495,494,499,498,496,503,500,507,506,505,504,511,510,508,515,514,512,519,516,522,521,527,526,531,530,528,532,539,536,543,542,547,544,551,550,555,554,553,559,558,556,563,562,560,564,571,570,569,568,574,572,579,578,583,580,587,590,594,593,598,602,611,610,613,617,621,629,634,633,632,631,637,635,641,646,649,648,647,653,658,662,661,660,665,663,670,669,671,678,677,680,686,685,688,693,692,691,697,701,706,709,708,713,718,717,719,726,725,724,729,727,733,741,740,745,750,749,751,757,756,755,762,761,765,763,770,774,773,772,777,\n775,782,781,783,790,789,788,793,791,797,805,804,809,814,813,815,825,821,820,822,826,829,828,830,831,835,841,844,849,852,857,860,858,864,871,870,879,878,5719,4507,13860,889,887,886,888,914,892,921,891,893,890,896,897,895,894,903,904,1255,899,898,902,901,906,908,911,910,909,913,918,917,5282,919,6172,925,924,922,923,947,6829,948,6837,4648,6895,4633,933,931,930,932,934,940,939,938,937,941,942,4512,946,945,950,954,964,4382,4381,5461,1013,965,4524,993,1016,968,966,967,969,970,1018,973,977,976,974,975,5510,980,979,978,982,981,1467,989,988,985,991,995,1005,999,998,1000,1002,1009,1008,1007,1012,1011,972,1015,1020,1019,1023,1022,1037,1033,1031,1030,1032,1035,4708,1039,1041,1040,1038,1045,1044,1042,1049,1048,1046,1047,1058,1059,6773,1055,1054,1053,1057,1062,1060,1061,1067,1066,1065,1064,1071,1069,1068,1070,1075,1073,1077,1076,1109,1108,4807,1083,1082,1087,1119,1086,1085,1094,1095,1091,1088,1098,1097,1096,1101,1103,1111,1107,1104,1106,1115,1118,1117,1116,1122,1125,1131,1134,1133,1138,1143,1142,1144,1150,1149,1152,1151,1159,1156,1195,1196,1163,1162,1161,1167,1166,1164,1171,1170,1168,1172,1218,2828,4996,4995,1176,1177,1180,4496,1214,1190,1191,1187,1185,1184,1186,1188,1194,1193,1192,1198,1202,1207,1210,1211,1215,1209,1217,1216,1220,1227,1226,1225,1224,1228,1229,1235,1236,3210,3206,2202,1247,1246,1245,1244,1249,1251,1271,1267,1266,1422,1258,1259,1253,1252,1256,1263,1262,1261,1260,1265,1270,1269,1275,1272,1276,1277,1279,1283,1282,1280,1286,1292,1360,1289,1288,1284,1290,1297,1296,1295,1294,1301,1300,1299,1298,1303,1357,1308,1307,1306,1305,1312,1311,1309,1316,1315,1313,1320,1317,1327,1328,1324,1321,1332,1329,1330,1336,1335,1334,1339,1337,1344,1343,1345,1350,1351,1349,1355,1359,1358,1364,1363,1367,1365,1379,1374,1375,1380,1443,1384,1383,1382,1381,1386,1388,1440,1437,1392,1409,1408,1405,4939,1394,1395,1401,1400,1404,1403,1402,1407,1412,1416,5716,5713,1420,1421,2245,1419,1418,1425,1424,1432,1426,1427,1434,1436,1444,1449,1448,1447,1446,1453,1452,1450,1457,1456,1454,1461,1458,1465,987,1463,1462,1469,1468,5505,1473,1472,1470,1471,1487,4801,\n1477,1476,1474,1475,1481,1479,1480,1485,1482,1483,4776,1488,1493,1492,1491,1495,1496,1498,1499,1500,1505,1504,1503,1541,1507,1506,4175,5238,4720,1513,1512,1510,1511,1520,1515,1516,1514,1521,2993,1523,5220,1525,1524,1522,1527,1533,1532,1531,1530,1537,1536,1534,4773,4754,4753,1539,1538,1544,1543,1548,1546,1581,1580,1558,1560,1559,1557,1564,1562,1572,1567,1568,1566,1565,1570,1576,1575,1574,1579,1577,1583,1596,1591,1592,1590,1589,1594,1600,1599,1598,1604,1603,1601,1607,1605,1619,1620,1616,1614,1613,1615,1617,1624,1623,1621,1622,1628,1626,1627,1635,1636,1632,1630,1629,1631,1633,1723,1768,5802,6214,1640,1639,1637,1638,1644,1643,1642,1641,1648,5954,1645,1655,1650,1652,1649,1656,1653,1654,1736,1659,1658,1657,3014,1660,1746,1704,1708,1707,6250,1760,1664,1663,1661,1662,1668,1666,1667,1672,1671,1669,2165,1677,1676,1697,6766,1696,1675,1674,1673,1680,1679,1684,1683,1739,1688,1685,1691,1690,1695,1703,1702,1701,1705,1711,1710,1709,1716,1715,5397,1718,5922,5951,6757,5948,1725,1724,1722,1756,1759,1727,2521,1730,1735,1734,1740,6205,6209,1744,6207,2342,1751,1748,1754,1753,1762,1763,1764,1761,1766,1775,1776,1772,1770,1769,1771,1773,1780,1779,1778,1777,1788,1784,1782,1781,1783,1786,1240,1789,1790,1796,1795,1794,1793,1799,1798,4470,1797,4911,1804,1803,1802,1801,1808,1807,1805,1811,1809,1816,2261,1818,1820,1819,1817,1827,5882,1822,1824,1823,1821,1828,1825,1179,1178,1183,1182,2739,1832,1831,1830,1836,1835,1833,1839,1837,1845,1848,1847,1855,1856,1852,1849,4484,4480,5018,1860,1859,1858,1863,1862,1871,1884,1866,1868,1867,1865,1872,1869,1876,1875,1874,1873,1880,1879,1877,1882,1887,1892,1891,1890,2216,2221,2220,2736,1893,1896,1895,1894,2569,5848,1903,1904,1900,1898,1897,1899,1901,1911,1912,1908,1905,1907,1906,1909,2131,2130,5407,4515,1917,1915,1913,1914,1918,1916,1921,3159,2713,1920,1922,1919,1929,1930,1926,1924,1923,1925,1927,1934,1933,1932,1931,1938,1937,1935,1941,1939,1946,2748,1949,1948,1947,1953,1951,1952,1960,1961,1957,1954,1956,1962,1965,1964,1963,1966,1967,1973,1970,1974,1975,1976,1985,1986,1982,1980,1979,1981,1983,1989,1990,2108,1988,\n1987,1994,1993,1992,1996,2775,2001,6084,13841,2005,2003,2002,2017,2013,2011,2010,2012,2015,2021,2020,2019,2018,2024,2022,2026,2029,2034,2038,2037,2036,2035,2042,2041,2039,2046,2045,2043,2050,2047,2054,2053,5939,6800,2055,2059,2069,2070,2066,2064,2063,2067,2073,2072,2071,2077,5843,4668,2081,2080,2079,2636,5522,5894,6077,2085,2083,2089,2088,2090,2091,2092,2571,2570,5751,5364,2099,2127,2096,2095,2094,2100,2097,2104,2103,2102,2101,2106,2105,2113,2110,2117,2116,2115,2114,2425,2438,2119,2121,2118,2124,2141,2137,2135,2134,2139,2145,2144,2143,2142,2149,2148,2146,2620,2626,2157,2153,2151,2150,2152,2155,2161,2160,2158,2163,3169,3166,6097,2169,2168,2166,2167,2173,2171,2172,5278,2176,2174,2177,2180,2178,2181,2184,1969,2187,1529,2188,2192,2191,2190,2189,2194,2196,2195,2200,2199,2197,2204,2203,2201,2226,2774,3002,2207,3362,2206,2208,2205,2212,2211,2472,2468,2217,2214,2213,2215,2218,2222,2224,2232,2231,2230,2235,2237,2241,2240,2238,2239,2243,5209,5936,5214,2253,2247,2246,2248,2250,2259,2258,2265,2264,2263,2262,2268,2267,2266,2270,2274,3250,2616,2272,2279,2276,2318,2314,2313,2281,2280,5827,2853,2285,2284,2290,2294,2292,4462,5360,5754,2298,2297,2296,2299,2301,2303,2305,5854,5855,2312,2311,2317,2316,6015,2322,2326,2325,2324,2328,2330,2331,2339,2346,2345,2344,2343,2350,2349,2347,2353,2355,2357,2354,2361,2364,2362,2365,6091,6087,2367,2366,2368,2376,2371,2372,2370,2369,2375,2374,4520,2635,2378,2384,2383,2382,2388,2387,2386,2385,2391,2389,2395,2394,2400,2397,2404,2403,2407,2566,2410,2409,5815,5401,6041,6049,6046,6042,2413,2422,2421,2420,2419,2423,2430,2429,2427,2434,2433,2431,2441,2440,2445,2447,2454,2453,2452,2457,2455,2462,2461,2463,2467,2469,2476,2490,2502,2495,2497,2496,2500,2509,2510,2506,2504,2503,2505,2507,2513,2514,2512,2519,2530,2526,2523,2525,2532,2534,2538,2537,2536,2542,2541,2539,2545,2543,2552,2554,2553,2558,2557,2556,2560,2561,2564,2563,2565,2575,2574,2572,2573,2579,2577,2578,2580,5741,2585,961,956,960,957,2595,2594,2593,2598,2596,2603,2602,2604,2609,2608,2613,3246,2619,2618,2623,2622,2629,2627,2638,2641,2640,2646,2645,2649,\n2647,2658,2657,2656,2662,2661,2659,2665,2663,2678,2674,2671,2679,2684,2691,2693,2694,2696,2690,2689,2688,2703,2702,2707,2706,2710,2715,2714,2718,2724,2723,2725,6148,5337,5336,2764,2729,2752,2058,2057,2062,2061,2734,2742,5984,6212,6239,4473,4472,2749,2799,2755,2753,2760,2759,2761,2765,2767,2773,2782,2783,2779,2777,2776,2778,2780,2790,2791,2787,2784,2786,2793,2792,2797,2845,2802,2809,2808,2803,2811,2810,2815,2836,2837,2833,2831,2830,2834,2841,2840,2843,2847,2851,2857,2858,2863,2866,2868,2875,2874,2876,2879,2885,2884,2883,2888,2886,2893,2892,2894,2904,2903,2902,2913,2915,5916,5280,5344,5660,5665,2922,2921,2926,2925,2931,2930,2934,6673,13951,5653,2938,2942,2941,2940,2939,2946,2945,2943,2950,2949,2947,2954,2951,2958,2957,2956,2962,2961,2959,2963,2969,2968,2974,2973,2977,6274,2989,3082,2984,2985,2983,2994,2991,2998,2997,3004,3003,3008,3011,3016,3017,3022,3019,6401,3024,3030,3027,3034,3033,3038,3037,3036,3042,3041,3039,3045,3043,3051,3053,3055,3054,3060,3059,3064,3068,3073,3072,3078,3077,3080,3087,3089,2380,3102,3095,3103,3105,4656,3111,2443,3126,3125,3124,3123,3127,3133,3140,3141,3137,3135,3134,3138,5979,3145,3144,3143,3142,3149,3148,3146,3152,3150,3157,3185,3162,6161,3164,3163,3161,3171,3172,3168,3165,3167,3174,3173,3177,3180,3184,3193,3190,3191,3188,3198,3197,3195,3202,3200,3203,3214,3213,3217,3221,3220,3227,3226,3230,3228,1721,5210,3239,3238,3237,3236,3243,3242,3240,3244,3249,3255,3254,3253,3252,3259,3257,3256,3260,3262,3273,3268,3270,3269,3267,3274,3271,3695,3278,3276,3275,3277,3285,3340,3282,3286,3280,3279,3281,3283,3290,3289,3288,3287,3294,3293,3291,3298,3295,3302,3301,3300,3299,3305,3304,3309,3308,3306,3313,3312,3310,3317,3314,3321,3320,3319,3325,3324,3322,3329,3328,3326,3330,3335,3338,3344,3353,3352,3351,3357,3356,3354,3360,3358,3370,3367,3368,3374,3373,3377,3376,3375,3382,3381,3386,3385,3383,3390,3387,3394,3393,3392,3391,3397,3395,3401,3406,3410,3409,3408,3407,3414,3413,3411,3418,3417,3415,3422,3419,3431,3430,3432,3435,3441,6588,3438,3444,3443,3442,3449,3448,3453,3452,3450,3457,3454,3460,3459,3458,3464,3469,3468,\n3473,3470,3477,3476,3475,3474,3481,3480,3478,3484,3482,3489,3492,3491,3497,3496,3501,3500,3498,3502,3508,3507,3506,3510,3509,3515,3513,3512,3519,3518,3516,3522,3520,3531,3530,3529,3535,3534,3532,3538,3536,3547,3546,3545,3544,3551,3550,3548,3567,3552,4052,3555,3562,3563,3559,3556,3558,3565,3564,3572,3571,3576,3575,3573,3577,3583,3582,3588,3587,3591,3589,3600,3599,3598,3597,3604,3603,3601,3607,3605,3612,3616,3615,3614,3613,3619,3617,3623,3628,3632,3631,3630,3634,3635,3644,3640,3637,3639,3651,3660,3647,3646,3645,3649,3653,3655,3667,3675,3662,3664,3663,3661,3668,3665,3670,3671,3673,3672,3678,3677,3682,3680,3687,3693,3691,3689,3688,3690,3699,3698,3697,3696,3703,3702,3701,3700,3705,3708,3713,3711,3716,3721,3718,3725,3724,3728,3727,3740,3739,3738,3742,3748,3747,3746,3750,3756,3755,3753,3763,3764,3760,3757,3759,3768,3776,3775,3774,3773,3780,3779,3777,3783,3781,3788,3791,3790,3789,3795,3800,3799,3804,3801,3812,3806,3805,3807,3809,3872,3817,3890,3818,3827,3825,3822,3844,3832,3831,3830,3829,3836,3835,3840,3839,3837,3841,3848,3847,3846,3845,3852,3851,3849,3855,3853,3860,3863,3862,3861,3868,3867,4042,3870,3875,3874,3879,3882,3889,3888,3892,3891,3898,3897,3896,3900,3902,3901,3905,3903,3909,3908,3912,3915,3917,3926,3923,3928,3932,3931,3936,3941,3940,3939,3945,3949,3954,3957,3956,3961,3965,3978,3971,3973,3982,3985,3994,3988,3987,3991,3997,3995,3999,4003,4007,4006,4010,4019,4026,4025,4030,4029,4034,4032,4041,4040,4046,4050,4059,4058,4063,4065,4072,4149,4073,4071,4077,4076,4086,4085,4094,4093,4097,4106,4113,4112,4111,4118,4117,4120,4125,4129,4128,4134,4133,4137,4146,4153,4152,4150,4156,4157,4155,4159,4161,4160,4163,4169,4168,4167,4184,4171,4177,4176,4174,4180,4181,4179,4183,4182,4188,4186,4192,4201,4199,4204,4207,4212,4211,4210,4215,4213,4219,4218,4216,4221,4223,4234,4237,4242,4241,4240,4239,4246,4245,4243,4250,4247,4254,4253,4252,4251,4256,4257,4261,4260,4259,4258,4265,4264,4262,4269,4268,4266,4273,4270,4275,4274,4280,4279,4283,4281,6748,1729,1728,4287,4284,4289,4295,4292,4299,4305,4303,4302,4309,4308,4313,4319,4318,4316,4323,4321,\n4326,4325,4331,4330,4334,4332,4343,4348,4347,4349,4372,4354,4362,4356,4355,4359,4364,4365,4370,4367,4374,4373,4378,4377,4375,4380,6183,986,4386,4394,4392,4403,4411,4421,4420,4426,4425,4429,4427,4438,4442,4451,5357,4452,4456,4455,4461,4460,4465,4463,4474,4471,4478,5635,5520,4488,4492,4483,4479,4489,4493,4495,4499,4509,4508,4506,4511,2133,2132,4658,4523,4522,4527,4532,4531,4533,4544,4539,4540,4537,4547,4546,4545,4550,4549,4553,4551,4558,4557,4562,4559,4564,4563,4566,4570,4569,4576,4575,4580,4579,4577,4581,4587,4586,4592,4591,4596,4595,4593,4597,4604,4601,4607,4608,4611,4610,4616,4615,4620,4619,4617,4621,4627,4626,4625,4631,4636,4635,4640,4637,4643,4642,4641,949,4652,4657,4661,4660,5819,4663,4667,4666,5478,13928,4672,2911,4676,4674,4671,4669,4670,4703,4678,4679,4677,4680,4688,4689,4684,4683,4691,4690,4694,4699,4700,4701,4706,4705,4704,4711,4710,4714,4712,4718,4716,4725,4724,4723,4729,4728,4726,4733,4732,4730,4734,4741,4740,4739,6910,4742,4750,1528,4756,4761,4760,4765,4769,4784,4777,4781,4790,4787,4794,4798,4795,4802,4806,4803,4804,5170,4810,4809,4808,4813,4812,4811,6871,4817,4821,4819,4829,4828,4834,4833,4837,4835,4845,4844,4849,4848,4854,4853,4855,4861,4860,4859,4866,4865,4864,4863,4872,4875,4874,4879,4888,4885,4892,4898,4897,4901,4905,4912,4917,4916,4921,4920,4925,4923,4932,4936,4935,4942,4941,4946,4944,4949,4954,4953,4957,4961,5003,5006,4975,4971,4968,4970,4983,4979,4976,4978,4986,4985,4984,4990,4994,4999,5000,5009,5013,5012,5011,5109,5016,5015,5020,5025,5030,5033,5035,5040,5039,5042,5048,5047,5052,5051,5056,5054,5064,5063,5068,5067,5072,5070,5080,5079,5084,5083,5088,5086,5095,5103,5102,5106,5111,5110,5114,5119,5126,5128,5136,5129,5137,5148,5152,2359,5168,5171,5176,5180,5179,5184,5195,5194,5193,5198,5196,5207,5204,5208,5221,5227,5224,5228,5225,2009,5236,5239,5244,5247,5251,5250,5255,5263,5262,5268,5267,5271,5269,13832,5284,5281,5290,5288,5299,5305,5304,5308,5323,5331,5330,5333,5339,5338,5343,5353,5350,5395,5358,5359,5363,5383,5391,1028,1029,5399,5400,5396,5393,5440,5403,5402,5405,5410,5409,5417,5415,5412,5419,5422,\n5421,5426,5430,5429,5432,5368,5367,5437,5372,5371,5362,5375,5446,5445,5444,5447,5448,5376,5377,994,990,5465,5464,5463,5486,5469,5468,5467,5473,5472,5470,5474,5485,5479,5480,5487,5498,5499,13967,5496,5504,5507,5515,5521,5524,927,5530,5529,5550,5534,5533,5540,5539,5542,5541,5545,5557,5552,5551,5561,5560,5559,5565,5569,5574,5577,5576,5581,5584,5595,5594,5599,5602,5601,5608,5607,5609,5614,5621,5629,5628,2910,5633,5637,2898,2899,5646,5643,5650,2900,2906,2905,2901,5651,5657,5668,5667,5672,5676,5712,5684,5683,5691,5696,5695,5699,5705,5704,5706,5710,5725,5722,5723,5728,5734,5740,5438,2583,5439,2582,5456,5777,5755,5760,5763,5752,5747,5768,5766,5748,5770,5769,5749,5775,5781,5790,5788,5799,5732,5805,5804,5806,5810,5816,5809,5818,5817,5822,6065,6071,5829,5828,5833,5838,5837,5840,5845,5853,5852,5857,5856,5860,5864,1239,5872,5881,5880,5889,5887,4664,5902,5910,5925,5918,5919,5926,5931,5930,5938,5934,5944,5947,5956,6799,5960,5961,5968,5964,5972,5971,5982,5977,5976,5980,5986,5985,5989,5988,5987,5994,5993,5999,5996,6002,6001,6005,6008,6007,6016,6020,6024,5830,6030,6027,6028,6026,6032,6031,6036,6035,6040,6047,6057,6060,2850,6074,6080,6095,6088,6086,6100,6099,6105,6104,6108,6106,6116,6115,6118,6126,6127,6122,6121,6129,6134,6154,6149,6147,6159,6160,6169,6170,6175,6174,5528,6176,6178,6188,6196,6203,6211,6215,6217,6221,6225,6231,6234,6237,6245,2699,2700,6247,6251,6252,6255,6258,6262,2821,4126,6270,4127,6279,6280,6289,6278,6277,6283,6282,6281,6284,6286,6291,6292,6293,6294,6295,6301,6299,6300,6303,6305,6304,6306,6307,6309,6308,6321,6311,6315,6317,6322,6331,6343,6348,6355,6362,6361,6360,6366,6365,6363,6370,6369,6367,6371,6377,6376,6382,6381,6386,6385,6383,6387,6394,6393,6395,6391,6400,6399,6405,6404,6408,6406,6416,6421,6415,6425,6424,6423,6428,6426,6433,6432,6434,6440,6439,6444,6448,6456,6455,6460,6464,6473,6472,6470,6471,6477,6475,6502,6481,6478,6485,6482,6489,6492,6491,6490,6497,6496,6501,6498,6505,6510,6524,6518,6517,6521,6535,6531,6530,6532,6536,6538,6545,6542,6540,6539,6543,6548,6556,6555,6560,6565,6564,6566,6572,6571,6570,6576,6581,6580,\n6585,6582,6587,6591,3425,6597,6609,6605,6602,6613,6611,6616,6618,6350,6297,6627,6628,883,875,855,867,164,6296,6341,241,240,165,163,856,854,874,882,1681,1741,1757,2518,220,6654,6325,6345,833,2352,6676,6669,6236,2351,6064,2282,2862,2852,6143,6145,2859,6139,5831,6687,6695,2411,4516,5811,4514,1278,6713,4454,4458,4457,6712,5386,4453,6727,6731,6735,1732,1731,2975,1647,1719,5211,1720,6638,1977,1052,4752,1051,4751,1501,1489,2732,2750,2632,2052,5955,2008,2522,6821,4340,6179,926,5527,944,6836,5380,5365,5457,1285,5596,6852,5591,5361,6138,2333,4818,4815,4830,2405,6880,175,177,232,233,1241,2478,5661,2923,6298,6310,6889,6629,928,929,935,1554,2587,3426,3440,3429,6483,6488,6480,3189,4122,4745,2288,6797,5901,5098,5758,332,6918,6919,6920,6921,6922,6923,6925,6926,6927,6929,6930,6933,6936,6935,6937,6938,6939,6947,7648,6951,6952,6953,6954,6955,6956,6960,6962,6963,6967,6968,6970,6973,6974,6975,6976,6977,6978,6980,6981,6982,6984,6985,6988,6990,6991,6992,6993,6997,6998,7000,7001,7004,13394,7007,7008,7009,7010,7011,7012,7017,7018,7022,7023,7024,7025,7027,7029,7031,7034,7038,7039,7040,7041,7042,7043,7045,7047,7049,7050,7055,7054,7057,7060,7061,7062,7066,7065,7067,7068,7070,7072,7074,7073,7075,7076,7078,7080,7082,7081,7084,7085,7089,7088,7090,7091,7094,7093,7095,7096,7098,7099,7102,7101,7103,7064,7063,7106,7107,7109,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7123,7125,7127,7128,7133,7134,7135,7136,7137,7138,7139,7140,7141,7143,7144,7145,7147,7148,7151,7153,7152,7154,7155,7158,7157,7159,7161,7160,7162,7163,7164,7166,7167,7168,7169,7172,7174,7176,7183,7186,7188,7189,7192,7191,7193,7195,7198,7200,7196,7197,7203,7205,7208,7210,7211,7212,7214,7215,7217,7218,7219,7221,7222,7223,7225,7229,7232,7238,7239,7240,7241,7243,7245,7246,7247,7250,7253,7254,7255,7256,7258,7259,7261,7262,7263,7265,7269,7271,7272,7273,7275,7278,7279,7282,7285,7286,7287,7288,7289,7290,7291,7293,7295,7297,7298,7303,7304,7306,7307,7310,7311,7313,7317,537,7320,7321,7324,7323,7328,7329,7332,7331,7334,7335,7336,7338,7339,7341,7342,7343,7345,7349,7350,7351,7352,7353,7355,7357,\n7358,7359,7362,7365,7369,7372,7375,7376,7379,7383,7390,7393,7397,7400,7403,7411,7413,7414,7415,7416,7418,7420,7422,7425,7430,7431,7432,7434,7437,7441,7442,7443,7446,7448,7450,7457,7460,7464,7465,7468,7472,7474,7475,7476,7478,7482,7485,7490,7491,7494,7497,7498,7504,7505,7506,7507,7510,7512,7514,7522,7523,7526,7529,7530,7536,7538,7539,7540,7541,7542,7546,7548,7549,7553,7554,7555,7558,7560,7562,7569,7570,7571,7574,7576,7578,7586,7587,7590,7593,7594,7600,7605,7602,7604,7603,7611,7608,7610,13504,9849,7615,7619,7622,7627,7632,7637,7639,7641,7650,7651,7658,7664,7668,7665,11808,7678,7677,7679,7672,7673,7681,7685,7688,7691,7692,7693,7695,7694,7699,7707,7713,7704,7705,7706,7714,7718,7727,7726,7728,7729,7682,7684,7687,7735,7738,7740,7739,7741,7736,7737,7743,7744,7746,7748,7747,7756,7760,7759,7761,7757,7765,7766,7767,7768,7769,7770,7774,7776,7782,7786,7783,7784,7785,7788,7789,7792,7796,7803,7808,7810,7811,7812,7817,7816,7859,7819,7883,7821,7820,7822,7860,7823,7825,7826,7829,7828,7830,7834,7838,7839,7840,7842,7843,7845,7778,7847,7849,7771,7815,7814,7854,7855,7831,7861,7865,7873,7868,7870,7869,7875,7876,7878,7881,7882,7884,7887,7886,7892,7894,7897,7893,7899,7902,7906,7905,7907,7903,7904,7909,7910,7914,7915,7917,7918,7919,7921,7927,7926,7928,7929,7931,13652,7943,13654,7934,7924,7941,7940,7942,7944,7945,7946,7947,7950,7949,7951,7952,7953,7955,7958,7959,7938,7961,7965,7967,7972,7969,7932,7978,7933,7980,7984,7981,7983,7989,7990,7991,7997,8000,8005,8004,7966,7971,7999,8014,8015,7995,7994,8016,8021,8022,8025,8028,8029,8035,8036,8037,8042,8043,8044,8047,8049,8048,8052,8056,8057,8058,8060,8061,8063,8064,8065,8067,8071,8074,8072,8073,8080,8076,8091,8087,8086,8075,8092,8097,8096,8098,8093,8095,8094,8101,8102,8103,8105,8109,8112,8055,8117,8120,8118,8130,8126,8127,8141,8142,8143,8144,8137,8151,8149,14013,8885,8154,8159,8158,8162,8163,8164,8165,8171,8174,8178,8183,8186,8194,8195,8198,7710,7676,7709,8201,8200,8202,8188,8204,8205,8185,8189,8184,8206,8209,8216,8217,8214,8218,8220,8221,8225,8222,8224,8229,8230,8228,8235,8236,8237,8238,8239,8240,\n8241,8242,8243,8245,8314,8247,8248,8249,8250,8251,8252,8254,8255,8256,8258,8259,8262,8263,8267,8264,8266,8271,8276,8277,8279,8280,8281,8284,8286,8287,8288,8294,8295,8300,8302,8304,8312,8313,8212,8316,8320,8322,8327,8332,8336,8339,8196,8351,8352,8353,8210,8356,8359,8363,8368,8371,8211,8379,7700,8383,7674,7675,8398,8397,8382,8329,8191,8334,8330,8328,8400,8401,8402,8404,8406,8405,8135,8408,8139,8410,8409,8415,8418,8419,8390,8389,8197,8369,8427,8428,8429,8430,8431,8432,8434,8435,8436,8438,8439,8442,7856,8444,8445,8446,8448,8449,8451,7836,8453,7832,8459,8458,8460,8461,8464,8463,8466,8471,8470,8472,8473,8476,8475,8477,8479,8480,8481,8484,12117,8487,8486,8489,8492,8493,8468,8469,8498,8499,8500,8503,8506,8513,8516,8514,8515,8517,8519,8518,8520,8522,8526,8531,8533,8534,8539,8540,8538,8542,8543,8545,9530,8546,8547,8548,8549,8550,8551,8553,8523,8509,8563,8562,8505,8508,8504,8568,8570,8576,8599,8579,8581,8582,8580,8584,8586,8588,8591,8593,8589,8592,8590,8595,8596,8597,8600,8602,8604,8612,8615,8617,8613,8616,8614,8619,8620,8621,8623,8624,8626,8628,8630,8635,8640,8639,8641,8636,8638,8637,8646,8643,8644,8645,8647,8652,8651,8653,8648,8650,8649,8658,8657,8661,8664,8663,8665,8666,8667,8668,8669,8670,8671,13649,8674,8684,8677,8675,8678,8679,8686,8682,8687,8688,8695,8701,8700,8703,8704,8707,8716,8690,8692,8720,8719,8721,8722,8725,8714,8726,8727,8729,8730,8735,8740,8739,8741,8737,8744,8745,8746,8747,8748,8751,8752,8755,8758,8760,8761,8764,8705,8706,8709,8710,8780,8781,8782,8783,8784,8659,12546,8791,8792,8803,8805,8806,8807,8840,8824,8825,8831,8832,8836,8835,8838,13141,8717,8713,8847,8711,8809,8693,8856,8855,8854,8655,8656,8862,8867,8866,8868,8863,8865,8864,8870,8871,8872,8873,8875,8879,8878,8880,8876,8877,8884,8136,10447,8860,8887,8888,8889,8890,8894,8895,8901,8898,8900,8905,8893,8910,8911,8912,8913,8914,8915,8917,8919,8921,8922,8926,8930,8931,8933,8942,8943,8947,8951,8952,8954,8955,8958,8085,8089,8090,8084,8967,8968,8969,8971,8972,8974,8976,8978,8986,8983,8985,8987,8991,8988,8990,8999,8995,9004,9005,9006,9009,9010,9011,9012,9015,9019,\n9020,9022,9023,9026,9027,9028,9013,9030,9031,9017,9034,9014,9018,9035,9036,9037,9051,9055,8961,9070,9068,9067,9069,9383,9075,9080,9079,9081,9076,9078,9077,9083,9088,9087,9089,9084,9086,9085,9091,9099,9103,9104,9108,9109,9113,9115,9118,9119,9123,9124,9128,9131,9132,9137,9136,9138,9133,9135,9134,9140,9141,9142,9143,9144,9145,9147,9149,9151,9152,12355,9156,9161,9160,9164,9169,9168,9165,9167,9175,9172,9173,9174,13885,9181,10211,9183,9182,9186,9185,9184,9189,9194,9193,9195,9190,9192,9191,9197,9198,9204,9200,9199,9207,9206,9209,9213,9111,9215,9218,9219,9221,9222,9223,9229,9233,9232,9234,9230,9231,9236,9237,9238,9239,9240,9242,9244,9247,9249,9253,9254,9255,9256,9257,9258,9260,9261,9262,9264,9265,9268,9270,9269,9274,9275,9291,9287,9292,9296,9298,9293,9295,9294,9301,9302,9303,9305,9320,11984,12430,10395,9329,9336,9346,9345,9344,9350,9355,9358,9360,9356,9357,9363,9364,9375,9377,9374,9378,9387,12529,9399,9391,9392,9393,9394,9395,9397,9398,9401,9402,9201,9404,9405,9202,9205,9406,9409,9410,9411,9412,9413,9415,9418,9422,9425,9428,9426,9430,9431,9433,9443,9332,9445,9448,9450,9446,9447,9452,9453,9454,9455,9456,9457,9459,9379,9464,9470,9473,9475,9471,9474,9472,9477,9479,8733,8734,8732,9481,9486,9485,9487,9482,9484,9483,9490,9491,9493,9492,9494,9495,9498,9497,9499,13821,9501,9502,9513,9517,9519,9179,9178,9520,9528,9532,9536,9537,9538,9539,9540,9544,9545,9548,9549,9551,9553,9559,9557,9558,9568,9569,9580,9584,9585,9589,9592,9594,9326,9601,9598,9597,9052,9053,9054,9058,9057,9610,9607,8959,8965,8966,9618,9616,9621,8147,9622,8411,8412,9624,9625,9628,9646,9647,9642,9644,9643,13889,8927,8928,8929,9661,9662,9663,9664,9666,11375,9668,9674,9670,9671,11374,9672,9675,9680,9684,9689,9049,8935,13100,9700,9704,9713,9711,9714,9715,12524,12860,9719,9720,9721,8146,8138,9727,9724,9734,9731,9683,9686,9687,9328,9682,9742,9750,9759,9760,9761,9764,9766,9769,13647,9775,9776,9777,9778,9779,9780,9782,9783,9788,9786,9789,9790,9797,9795,9796,9803,9798,9808,9807,9806,9814,9813,9817,9816,9819,9820,9815,9330,9827,9824,9830,9834,9835,9836,9837,9542,9839,9840,9541,\n9100,9554,9841,9844,9846,9847,9850,9981,9384,9859,9861,12554,9860,9862,9871,9347,9737,9864,9876,9882,9416,9884,9885,9417,9886,9887,9889,9890,9420,9893,9421,9896,9897,9899,9901,9902,9903,9904,9907,9909,9910,9911,9917,9923,9920,9928,9930,9812,9566,9811,9562,9933,9938,9937,9939,9934,9936,9935,9941,9942,9947,9944,8718,9950,9953,9951,9159,9958,9960,9961,9962,9101,9965,9106,9968,9102,9107,9571,9110,9972,9974,9973,9976,9979,9980,9982,9983,9385,9386,9986,8773,9987,9988,9991,9990,8778,9996,9997,13707,7806,7802,7807,7801,10001,10002,10003,10006,10008,10009,10010,10016,10017,10021,10025,10026,9462,9463,10035,9467,9468,9563,9561,9331,10049,10050,10052,10053,10057,10059,9158,10065,10066,10068,10069,9162,10073,10075,10081,10084,10082,10093,10088,10102,10101,10105,9325,10107,9691,10097,9334,9690,10115,10123,10124,10129,10131,10034,10038,10033,10138,10139,10145,10146,10151,10191,10158,10159,9286,9061,9284,9065,9062,9066,9335,10172,10167,11753,10175,11774,10162,10184,10186,10187,10188,10194,9573,9575,9216,10195,10199,10201,10196,10200,10198,10197,10203,10208,10207,10204,10206,10213,10214,10216,9514,9515,10219,10225,10224,10228,10235,10231,10232,10237,10241,9603,10238,10240,9599,10245,9702,8529,10250,10252,10261,8937,10149,8940,10269,10265,10277,10278,10274,10275,10280,10281,10282,10285,10287,10288,10289,10295,10300,10301,10302,10316,10313,11818,10319,10323,7666,10331,7670,10336,10337,10339,10340,10343,10344,10346,12788,10349,10351,10352,10353,10354,10355,10356,10358,10360,10361,10362,10367,10365,10370,10366,10372,9310,10375,9314,9311,11368,10379,10383,10388,10390,10396,10397,10405,9634,10413,10409,10410,8698,8697,8775,8853,10421,10417,10418,9327,10401,10402,10425,10424,10427,10428,10429,10431,10432,10434,10436,10438,10445,10449,10443,10444,9948,10454,10457,10460,10381,10463,10385,10382,10386,9600,9832,10476,10478,10488,10485,10322,10498,10506,10512,10513,10514,10515,10519,10520,10523,10527,10529,10524,10526,10525,10174,10173,10532,10535,10540,10539,10536,10538,9120,9121,9122,10543,10544,10546,10547,9126,10550,9127,10551,10556,10555,\n10552,10554,10560,10561,10565,10567,10569,10575,10578,10577,10580,8160,10583,10584,10152,8156,8155,10590,10591,10598,10595,10596,10605,10606,10600,10612,10615,9640,10624,10625,10628,10029,10631,9581,10627,10634,10637,10633,10640,10645,10644,10646,10641,10643,10642,10648,10653,10652,10654,10649,10651,10650,14733,10711,10661,10660,10657,10658,11170,10662,10663,10674,10675,10676,10679,10678,10680,10681,10682,10684,10685,10715,13783,11417,10709,10688,13775,10690,10691,10692,10694,10695,10697,10698,10699,10701,10705,10707,10710,10713,10720,10721,9582,10724,9587,10727,9583,9588,10729,10730,10731,10734,10733,10737,10738,10739,10740,10741,10744,10745,10747,10748,10751,10752,10753,10754,10755,10757,10759,10761,10764,10768,10769,10770,10771,10772,10773,10775,10776,10777,10779,10780,10783,10789,10790,10792,10793,10797,10807,10808,10804,10806,10812,10813,10814,10815,10816,10819,10820,10822,10823,10826,10828,10829,10830,10832,10835,10836,10839,10842,10844,10843,10845,10846,10848,10850,10852,10853,10855,10856,10859,10860,10862,10866,10867,10868,10869,10871,10872,10873,10876,10877,10875,10879,10882,10883,10884,10886,10887,10889,10891,10893,10898,10899,10900,10901,10902,10903,10905,10635,10914,10924,10932,10937,10936,10933,10935,10908,10909,10940,10941,10944,10912,10947,10913,10953,10950,10956,10957,10958,10959,10960,10961,10963,10965,10967,10968,10972,10973,10974,10975,10977,10979,10981,10984,10989,10988,10991,10994,10995,10997,11001,11000,10998,11005,11008,11011,11009,11006,11007,11017,11013,11015,11020,11025,11024,11026,11021,11023,11022,11028,11032,11040,11036,11038,11044,11030,11046,13789,11048,11049,11055,11212,11063,11051,11078,11053,11054,11059,11061,11064,11068,11069,11072,11071,11075,11076,11086,11085,11088,11092,11094,11093,11096,11100,11104,11101,11103,11105,11106,11107,11108,11109,11110,11112,11114,11116,11117,11124,11129,11130,10668,11132,11133,10672,11136,10669,10673,10667,11138,11139,11140,11142,11145,11146,11149,11152,11158,11159,11154,11156,11155,11169,11161,11219,11165,11176,11180,11182,11029,11186,11188,11183,\n11190,11191,11194,11184,11197,11173,11198,11203,11202,11199,11201,11206,11208,11164,11163,11213,11220,11221,11227,11230,11228,11232,11229,11234,10921,11236,11237,10926,10922,10927,10920,11243,11244,11246,11254,11251,11257,11260,11261,11270,11266,11267,11273,11274,11275,11277,11281,11284,11289,11290,11293,11297,11309,11305,11307,10636,11314,11322,11317,11319,11318,11327,11692,11175,11330,11174,11341,11338,11224,11354,11350,11351,11358,11364,11406,11363,11365,11371,11372,11384,11379,11391,11397,11410,11413,11414,11427,11424,11411,11412,11408,11433,11435,11436,11438,11440,11439,11441,11444,11442,11448,11449,11450,11451,11458,11465,11467,11468,11470,11472,11471,11454,11455,11456,11474,11476,11460,11482,11484,11487,11492,11493,11494,11495,11496,11498,11499,11500,11501,11503,11505,11509,11518,11521,11523,11524,11525,11526,11527,11528,11530,11531,11534,11535,11536,11537,11538,11540,11541,11542,11543,11544,11545,11546,11547,11549,11550,11551,11553,11554,11557,11559,11560,11561,11562,11563,11566,11569,8817,8813,8814,8816,11573,11575,11572,11580,11581,11583,11588,11589,11591,11596,11597,11601,11610,11608,11613,11604,11617,11619,11620,11622,11623,11627,11629,11634,9740,9739,9746,9745,10047,11647,11642,11644,11643,11651,11652,11655,11656,11659,11658,11661,11663,11664,11666,11668,11669,7857,11681,11684,11688,11691,11696,11697,11698,11701,11703,11705,10470,11167,10799,10802,10798,11717,11719,11725,11404,11739,11735,8909,9717,11749,9716,11745,11747,10181,10182,12654,12659,11756,11755,11757,11764,8054,8050,11779,11784,8051,11794,10917,10919,10916,11806,11809,11811,11813,11761,11816,9440,11971,11823,11824,11827,11830,11831,11837,11839,11842,11840,11843,11846,11847,11848,11849,11850,11853,11855,11856,11857,11860,11863,11865,11866,11867,11869,11870,11872,11873,11878,11881,11882,11884,11885,11888,11889,11891,11895,11897,11898,11900,11901,11904,11905,11907,11911,11914,11915,11917,11918,11921,11922,11924,11925,11928,11929,11931,11935,11937,11938,11939,11941,11944,11945,11948,11951,11953,11954,11955,7793,11960,10495,10325,11967,11969,11972,\n11978,9074,11981,11986,11988,11991,11989,11997,12001,10308,12005,12007,12002,12004,12003,12009,10533,12011,10534,11817,12013,12016,10329,12020,12017,12019,12024,12026,12029,12030,12031,12036,12032,12038,12039,12040,12042,12045,12049,12054,12053,12050,12052,12058,12059,12060,12061,12062,12066,12068,12069,12071,12075,12076,12077,12079,12080,12082,12083,12084,12086,12090,12091,12092,12093,13731,12098,8566,9527,12105,12108,8556,8561,8557,8524,8528,8525,12121,12122,12124,12129,12130,12132,12136,12137,12138,12140,7936,7937,7923,12145,12146,13687,12152,12150,12158,12160,12161,12163,12164,12168,12170,12177,12178,12183,12184,12186,12187,12193,12195,12196,12197,12198,12199,12200,12201,12205,12209,12210,12213,14035,12180,12225,12226,12230,12233,8892,8358,8192,8180,8179,8181,8908,8393,8349,8395,8298,8344,8343,8167,8348,8296,8168,8173,8169,12242,12246,12251,12255,12254,12252,12259,12263,12262,12260,12274,12275,12268,12278,12282,12272,12269,12291,12294,12295,12296,8998,9001,9002,8997,12306,12309,12313,11793,11769,11792,12319,11767,11768,11771,11772,12321,12323,12243,12244,8083,12248,12329,12331,8079,8082,8077,8078,12337,12339,12346,11776,11777,11780,12354,12358,12353,12360,8859,8861,11605,8772,8774,12370,12374,12300,12382,12385,12390,12398,12395,12402,12410,12411,12412,12415,12417,12425,9635,9639,9636,7962,7963,12435,7976,8011,9225,12445,12448,12453,12456,12459,12460,12463,12471,12472,12474,12475,12479,12481,12486,7722,7724,8962,12492,12498,12499,12503,12510,10153,9654,9655,9656,9659,12519,12240,11736,12521,12522,12525,11737,12541,7900,12544,12548,12545,12547,12552,9097,9094,9098,9092,9093,12559,10121,10166,12557,10120,12562,10117,10116,12567,10170,12569,12571,12570,9370,9751,9369,9276,12527,12530,9337,9282,12576,12577,12578,12585,12581,9281,9278,7813,7862,12590,12589,12592,12595,12596,12597,12598,12599,12601,12602,11999,12608,8457,8456,12609,12611,12612,12000,12618,12625,12624,12629,7837,12627,12631,12632,12636,7833,12643,12651,12655,7671,12668,7753,7701,7702,12680,12677,12678,12683,12684,12682,12689,12691,12694,12695,12700,12702,\n12703,12704,12706,12710,12713,12718,12719,12722,12735,7716,7697,7698,12727,12728,12749,12731,8272,8273,12758,12764,12765,10309,12768,12772,10299,10298,12781,12782,12784,10297,10305,10306,10296,12790,12791,10330,10334,12795,12794,12797,12798,12803,12811,12818,12819,12822,12666,12830,12662,12663,12838,12839,9338,9339,12842,9679,9504,9367,9993,9366,9368,9372,9511,9503,12854,12864,12867,9390,9388,9389,12870,12872,9509,9506,12856,9507,9505,12857,12886,12882,8787,12846,12899,12900,12894,12895,12903,12905,11979,12909,12911,9046,9321,9042,9040,9041,9323,11983,9730,9736,12923,9380,9072,9073,13036,12930,12934,12935,12931,9341,9343,11968,12946,10326,12962,12958,13762,9626,9521,8496,12967,9525,12393,9522,9523,12969,12970,12977,12974,12975,12979,12989,12990,12988,12995,10168,12986,12987,12997,13000,13002,13003,13005,13007,13016,13021,13026,12575,10259,8950,9318,12914,9868,8946,8949,8944,8945,9870,9874,9865,13037,9733,12916,9348,12939,13049,9799,9801,13052,13053,13055,13056,13060,13062,13071,13069,13070,13075,13074,13077,13078,13082,13086,13087,13083,13112,9698,13105,13107,13084,13117,11671,13122,13125,11675,11676,11678,11680,11672,8829,13139,8660,13148,13155,13159,13163,13167,13170,10178,10176,13172,10111,10109,10108,8820,13177,13181,13185,13186,13012,10169,13191,13019,9567,11418,11419,11369,13205,13206,13208,13207,13217,13218,13219,13220,13222,13225,13227,13234,13232,13233,13235,13240,13239,13241,13245,13243,13244,13247,13246,13248,13249,13267,13263,13265,13216,13277,13287,13295,13303,13307,13308,13309,13311,13312,13314,13315,13316,13318,13322,13324,13325,13327,13328,13331,13332,13334,13338,13340,13342,13347,13348,13350,13351,13355,13357,13364,13370,13371,13372,13375,13377,13378,13379,13385,13387,13388,13391,13395,13403,13404,13407,13411,13419,13418,13420,13421,13423,13425,13429,13430,13436,13433,13440,13441,13443,13447,13448,13449,13450,13451,13454,13457,13461,13469,13474,13475,13476,13478,13481,13482,13485,13488,13492,13497,13494,13496,13495,13502,13501,13550,13503,13505,13506,13508,13509,13515,13516,13519,13522,13523,13529,\n13531,13532,13533,13535,13538,13539,13542,13545,13548,10785,13553,13559,13563,13560,13569,13237,13258,13261,7662,7654,7634,7646,6944,7015,13238,13291,7014,13298,6943,6945,7633,7635,7655,8754,8841,8694,13906,6994,13209,13211,13288,7614,9784,13596,13595,10177,9785,9693,9044,8941,13607,9043,9696,10147,8936,13102,9319,9316,13615,9857,9095,9071,9826,8213,13585,11742,13632,8897,13635,13577,8822,9315,8672,10613,8793,10623,13799,13796,8685,8681,8736,7911,7913,7912,8565,8465,8483,10155,9512,10042,9271,8497,7979,8689,8821,11637,11673,7754,12672,7790,9277,8227,7715,12741,7683,12531,9697,9772,12151,12154,12159,9852,6950,6948,7005,8883,8134,10327,13236,13252,6972,6971,13257,7752,7749,7758,9741,7772,7779,8577,10784,13549,13439,13444,13427,13432,13428,13434,10574,11407,12095,6142,13606,13050,6094,971,7824,9699,5953,12959,2051,9272,1056,7935,11162,11326,10683,10687,11047,11050,7667,7185,8797,8802,8795,8798,10619,12955,10616,6818,13669,5897,11380,10321,10320,12674,13135,12487,13827,5277,5525,6186,5526,9660,5346,5342,11821,1999,9340,5890,2122,13094,6135,6083,13857,9694,6011,5718,5991,6267,408,3881,3648,9669,9177,9176,9651,9650,13890,9793,12301,2182,1968,2257,2256,2747,2489,2360,13901,2517,6643,8842,8845,13583,1230,1231,8133,9665,11402,13927,3816,5517,6017,5501,7818,12543,7872,5484,13946,2932,5688,2933,13959,5488,13962,5494,5503,5495,9324,8541,4758,5825,9692,13013,11760,12984,11759,3158,4476,11752,2275,5874,2873,10267,5878,5873,14004,5876,6068,1237,1238,13041,14008,13042,12937,456,14182,14031,14027,14204,14178,14020,14170,14044,14162,14052,14061,14032,14190,14194,14186,14150,14087,14088,14224,14089,14096,14093,14232,14097,14104,14101,14240,14105,14244,14109,14248,14113,14252,14117,14256,14121,14128,14125,14130,14131,14266,14135,14140,14137,14141,14149,14085,14157,14086,14092,14091,14166,14095,14100,14099,14174,14103,14108,14107,14112,14111,14116,14115,14120,14119,14124,14123,14198,14127,14200,14129,14134,14133,14139,14143,14062,14065,14219,14066,14054,14053,14228,14057,14046,14045,14236,14049,14022,14021,14042,14041,14072,14071,14073,\n14082,14075,14074,14260,14078,14262,14028,14025,14024,14272,14037,14033,14151,1050,12179,14208,58,14305,14307,14306,14309,14311,14310,14317,14314,14319,14318,14327,14407,14321,14323,14322,14326,14331,14330,14399,14335,14334,14338,14341,14342,14345,14347,14346,14350,14354,14355,14357,14359,14358,14362,14365,14367,14366,14370,14373,14374,14377,14379,14378,14382,14385,14386,14389,14390,14393,14394,14401,14402,14409,14411,14410,14413,14415,14414,14419,14418,14423,14422,14509,14425,14426,14430,14429,14434,14433,14439,14440,14443,14444,14447,14449,14452,14454,14456,14455,14459,14462,14464,14463,14467,14470,14471,14474,14476,14475,14479,14482,14483,14486,14487,14490,14491,14493,14498,14499,14501,14506,14504,14550,14520,14518,14519,14515,14700,14522,14523,14525,14532,14530,14531,14535,14538,14539,14546,14547,14551,14556,14555,14560,14558,14559,14563,14654,14568,14566,14567,14572,14570,14571,14575,14580,14579,14584,14582,14583,14587,14592,14591,14596,14595,14543,14599,14544,14527,14603,14528,14698,14611,14609,14610,14614,14702,14613,14615,14622,14620,14621,14625,14628,14629,14693,14641,14640,14644,14643,14647,14656,14652,14650,14651,14660,14658,14659,14663,14668,14667,14672,14670,14671,14675,14680,14679,14684,14683,14633,14687,14634,14617,14691,14618,14635,14695,14606,14605,14705,14516,14513,14607,14315,13200,2820,9376,2093,10659,10656,3815,3341,3336,9157,12505,5316,14750,9613,14754,14755,14756,14757,14758,14760,14761,14762,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14861,14794,14841,14805,14833,14923,14932,14810,14825,14786,14788,14789,14792,14793,14797,14798,14800,14801,14802,14804,14806,14808,14809,14811,14813,14814,14816,14817,14818,14819,14821,14926,14930,14822,14824,14826,14828,14829,14830,14832,14834,14836,14837,14838,14840,14842,14845,14846,14849,14850,14852,14853,14854,14856,14857,14862,14864,14869,14870,14875,14877,14878,14880,14886,14888,14893,14894,14899,14900,14901,14902,14903,14904,14910,14912,14916,14917,14919,14918,14934,\n14939,14940,14945,14946,14951,14952,14957,14961,14960,14959,14958,14965,14964,14963,14969,14968,14967,14973,14972,14971,14977,14976,14975,14974,14981,14980,14979,14985,14984,14983,14989,14988,14987,14986,14991,14990,14995,14994,14999,14998,15005,15004,15002,15009,15006,15013,15012,15011,15010,15017,15015,15014,15020,15019,15018,15025,15023,15029,15028,15027,15026,15032,15031,15030,15036,15034,15041,15040,15039,15038,15044,15043,15042,15047,15046,15051,15057,15056,15055,15054,15061,15059,15058,15065,15064,15062,15067,15073,15071,15074,15078,15082,15088,15087,15092,15091,15090,15096,15094,15100,15104,15112,15111,15116,15121,15120,15119,15118,15124,15123,15122,15128,15127,15126,15132,15131,15130,15137,15136,15135,15134,15140,15139,15138,15144,15143,15142,15148,15146,15150,15154,15161,15159,15158,15165,15164,15162,15169,15168,15167,15166,15173,15172,15171,15177,15176,15175,15181,15179,15185,15184,15183,15182,15189,15188,15187,15192,15190,15197,15196,15194,15200,15198,15204,15212,15211,15210,15217,15216,15214,15221,15219,15218,15229,15227,15231,15235,15239,15244,15243,15249,15247,15252,15250,15254,15258,15269,15266,15277,15276,15275,15279,15278,15285,15284,15283,15282,15289,15288,15286,15293,15292,15290,15297,15296,15294,15300,15299,15298,15305,15304,15303,15302,15309,15308,15306,15313,15312,15310,15316,15314,15321,15319,15318,15324,15323,15322,15327,15326,15331,15330,15337,15334,15341,15339,15338,15345,15343,15342,15349,15348,15353,15352,15355,15360,15359,15358,15364,15363,15362,15369,15368,15373,15372,15377,15376,15381,15380,15379,15378,15383,15382,15388,15387,15386,15391,15390,15395,15394,15399,15404,15403,15409,15408,15413,15412,15411,15417,15416,15415,15419,15418,15423,15422,15427,15426,15432,15431,15430,15437,15436,15441,15440,15439,15445,15444,15449,15448,15451,15456,15455,15460,15459,15464,15462,15467,15472,15476,15474,15479,15484,15487,15492,15491,15490,15497,15500,15498,15502,15506,15516,15520,15519,15523,15522,15529,15527,15533,15537,15538,15545,15542,15548,15552,15550,15555,15560,15569,15573,15570,15575,15578,\n15583,15587,15593,15591,15594,15600,15607,15630,15635,15646,15647,15648,15649,15650,15651,15652,15654,15655,15656,15658,15659,15660,15662,15663,15664,15665,15666,15667,15668,15670,15671,15672,15674,15675,15676,15677,15680,15681,15684,15685,15688,15689,15690,15691,15693,15694,15697,15698,15699,15700,15701,15702,15704,15705,15707,15708,15709,15710,15712,15714,15715,15716,15717,15719,15720,15721,15723,15725,15726,15727,15728,15729,15731,15732,15733,15736,15737,15740,15742,15743,15744,15745,15746,15748,15749,15750,15751,15753,15756,15758,15760,15765,15769,15773,15775,15776,15779,15780,15781,15783,15785,15787,15791,15799,15800,15803,15806,15807,15808,15809,15811,15812,15813,15815,15816,15817,15819,15820,15821,15822,15823,15824,15825,15827,15828,15829,15831,15832,15833,15835,15837,15841,15845,15846,15848,15849,15850,15851,15853,15854,15855,15856,15857,15858,15859,15860,15862,15863,15864,15866,15868,15870,15871,15872,15873,15874,15875,15876,15879,15881,15882,15883,15885,15887,15889,15891,15899,15900,15901,15902,15903,15905,15906,15908,15909,15914,15916,15920,15924,15928,15931,15932,15934,15936,15939,15941,15945,15949,15954,15957,15962,15963,15964,15968,15969,15970,15971,15972,15973,15974,15975,15977,15978,15979,15981,15982,15983,15985,15987,15988,15989,15990,15991,15992,15993,15994,15995,15997,15998,15999,16001,16003,16005,16006,16008,16009,16011,16012,16013,16016,16017,16020,16021,16022,16025,16026,16028,16029,16030,16032,16033,16034,16035,16038,16039,16044,16047,16048,16049,16051,16052,16053,16054,16055,16058,16059,16062,16063,16066,16067,16068,16069,16072,16073,16075,16076,16077,16080,16081,16084,16085,16088,16091,16092,16094,16095,16098,16099,16100,16102,16103,16104,16108,16109,16112,16113,16116,16117,16119,16120,16121,16122,16123,16126,16127,16128,16130,16131,16134,16135,16140,16143,16144,16147,16148,16151,16153,16156,16159,16163,16165,16168,16171,16176,16179,16180,16181,16182,16187,16189,16193,16197,16203,16207,16208,16212,16213,16214,16216,16218,16222,16229,16230,16233,16235,16239,16241,16244,16247,16254,16258,16261,\n16264,16269,16272,16276,16278,16280,16285,16286,16297,16316,16323,16334,16335,16336,16337,16338,16339,16340,16342,16343,16344,16346,16347,16348,16350,16352,16353,16354,16357,16358,16361,16362,16363,16364,16365,16366,16367,16369,16370,16371,16374,16375,16378,16379,16381,16382,16383,16386,16387,16468,16406,16522,16390,16391,16393,16394,16396,16400,16401,16402,16407,16408,16409,16410,16411,16412,16413,16414,16415,16417,16418,16419,16421,16422,16423,16425,16426,16427,16429,16430,16433,16434,16437,16438,16439,16440,16441,16442,16443,16444,16446,16447,16450,16451,16454,16456,16458,16462,16466,16467,16469,16470,16471,16473,16474,16475,16477,16478,16479,16483,16488,16489,16490,16491,16492,16493,16495,16496,16497,16498,16499,16500,16503,16504,16506,16507,16511,16512,16514,16516,16519,16525,16523,16524,16526,16528,16533,16535,16537,16542,16543,16544,16545,16546,16547,16549,16550,16551,16553,16555,16557,16558,16559,16561,16562,16565,16566,16570,16571,16572,16573,16574,16575,16576,16578,16579,16583,16586,16587,16588,16590,16591,16595,16598,16599,16600,16601,16603,16604,16605,16607,16608,16609,16610,16611,16615,16618,16620,16621,16622,16623,16624,16625,16626,16627,16628,16630,16631,16632,16634,16636,16638,16640,16641,16642,16645,16649,16650,16651,16652,16653,16654,16655,16657,16658,16659,16662,16667,16669,16671,16678,16680,16681,16682,16684,16685,16686,16688,16689,16692,16693,16694,16700,16701,16702,16703,16704,16705,16706,16708,16709,16711,16712,16713,16714,16717,16720,16721,16722,16725,16727,16729,16730,16734,16740,16743,16745,16746,16750,16752,16758,16759,16760,16761,16762,16763,16764,16767,16768,16769,16771,16772,16773,16775,16776,16777,16779,16780,16783,16784,16786,16787,16788,16789,16791,16792,16794,16795,16796,16797,16799,16800,16801,16802,16804,16805,16806,16808,16809,16810,16812,16816,16820,16822,16823,16824,16825,16826,16829,16830,16831,16832,16833,16835,16836,16837,16838,16840,16841,16842,16844,16846,16847,16848,16851,16852,16855,16858,16859,16860,16861,16862,16865,16866,16867,16868,16869,16870,16871,16872,16875,16876,\n16877,16879,16881,16883,16885,16888,16894,16895,16896,16897,16898,16901,16903,16904,16905,16908,16909,16912,16913,16916,16917,16919,16920,16923,16924,16927,16928,16929,16930,16931,16935,16936,16939,16940,16943,16944,16947,16948,16950,16951,16952,16953,16955,16958,16959,16960,16964,16967,16968,16969,16970,16971,16975,16976,16980,16983,16984,16987,16988,16991,16992,16993,16996,16997,17000,17001,17004,17007,17008,17011,17012,17014,17015,17016,17017,17020,17022,17024,17025,17027,17030,17032,17034,17038,17042,17047,17051,17052,17054,17056,17060,17064,17068,17070,17074,17077,17078,17080,17085,17087,17092,17094,17096,17100,17104,17110,17114,17117,17118,17120,17122,17126,17135,17139,17140,17143,17145,17148,17150,17157,17177,17181,17207,17209,17224,17238,17242,17243,17246,17457,17247,17248,17249,17251,17252,17253,17255,17256,17257,17259,17260,17261,17263,17264,17265,17267,17268,17269,17467,17272,17273,17275,17276,17277,17279,17280,17281,17283,17284,17285,17287,17289,17290,17291,17294,17295,17296,17299,17300,17303,17304,17307,17308,17311,17312,17315,17316,17320,17323,17324,17327,17328,17331,17332,17335,17368,17338,17339,17340,17343,17344,17347,17348,17351,17352,17355,17356,17359,17360,17363,17400,17404,17408,17412,17365,17366,17367,17370,17371,17374,17375,17378,17379,17382,17383,17386,17387,17390,17391,17394,17395,17398,17399,17402,17403,17406,17407,17410,17413,17415,17418,17421,17424,17427,17430,17442,17434,17433,17436,17364,17449,17453,17450,17481,17454,17458,17459,17463,17464,17491,17468,17495,17472,17475,17477,17292,17245,17244,17482,17438,17487,17431,17271,17270,17319,17318,17828,17505,17767,17543,17502,17503,17504,17506,17507,17508,17510,17511,17512,17514,17515,17516,17518,17519,17520,17522,17523,17524,17752,17533,17803,17530,17531,17532,17534,17535,17536,17538,17539,17540,17542,17544,17553,17591,17551,17552,17555,17556,17559,17560,17563,17564,17567,17568,17571,17572,17581,17579,17580,17583,17584,17587,17588,17592,17549,17597,17635,17595,17596,17599,17600,17603,17604,17607,17608,17611,17612,17615,17616,17807,17619,17622,\n17667,17625,17671,17629,17675,17679,17636,17637,17638,17640,17641,17644,17645,17648,17649,17652,17653,17656,17657,17660,17661,17664,17665,17668,17669,17672,17673,17676,17677,17681,17685,17683,17686,17689,17692,17695,17698,17759,17710,17711,17713,17716,17719,17722,17725,17728,17731,17734,17737,17740,17618,17745,17749,17574,17526,17529,17775,17756,17763,17760,17500,17499,17548,17703,17702,17707,17817,17633,17813,17630,17809,17626,17623,17799,17797,17772,17528,17527,17577,17576,17791,17792,17787,17788,17783,17784,17821,17780,17825,17546,17498,17501,17776,17836,17837,17838,17839,17840,17841,17842,17844,17845,17846,17848,17849,17850,17852,17853,17854,17857,17858,17859,17860,17861,17862,17865,17866,17869,17870,17873,17874,17877,17878,17881,17882,17950,17946,17942,17938,17887,17915,17885,17886,17889,17890,17893,17894,17897,17898,17901,17902,17905,17906,17909,17910,17913,17914,17917,17921,17922,17925,17926,17929,17930,17933,17934,17937,17941,17945,17949,17952,17953,17954,17955,17956,17957,17958,17960,17961,17962,17965,17966,17967,17969,17970,17971,17973,17975,17976,17977,17978,17979,17981,17982,17983,17985,17986,17987,17988,17989,17990,17992,17993,17994,17996,17998,18000,18001,18002,18003,18005,18006,18007,18008,18009,18010,18012,18013,18014,18016,18017,18018,18020,18022,18024,18025,18026,18027,18028,18029,18030,18032,18033,18034,18036,18037,18038,18041,18042,18043,18044,18046,18048,18049,18050,18051,18053,18054,18055,18057,18058,18059,18060,18061,18062,18064,18065,18066,18068,18070,18072,18073,18074,18075,18077,18078,18079,18081,18082,18083,18084,18085,18086,18088,18089,18090,18092,18094,18096,18097,18098,18099,18100,18102,18103,18104,18106,18107,18108,18110,18111,18112,18113,18115,18117,18119,18120,18121,18122,18123,18124,18125,18126,18129,18130,18131,18133,18134,18137,18138,18141,18142,18146,18147,18150,18152,18154,18156,18160,18167,18171,18177,18178,18179,18181,18182,18186,18187,18190,18191,18194,18195,18198,18200,18202,18203,18204,18206,18209,18210,18212,18217,18218,18220,18225,18226,18231,18234,18235,18239,18242,18248,\n18250,18251,18252,18254,18257,18258,18260,18265,18266,18268,18273,18274,18279,18282,18283,18287,18290,18297,18298,18299,18300,18302,18305,18306,18308,18313,18314,18316,18322,18323,18327,18330,18331,18335,18338,18344,18346,18348,18352,18359,18363,18368,18370,18371,18372,18375,18378,18379,18382,18383,18386,18387,18391,18392,18394,18395,18397,18399,18400,18403,18405,18408,18411,18413,18418,18419,18422,18426,18427,18430,18435,18440,18441,18442,18445,18448,18449,18452,18453,18458,18461,18464,18465,18466,18467,18469,18470,18471,18473,18474,18475,18476,18477,18478,18480,18481,18482,18484,18486,18488,18489,18490,18491,18492,18493,18494,18496,18497,18498,18501,18502,18503,18505,18506,18507,18509,18511,18512,18513,18514,18515,18516,18517,18518,18521,18522,18523,18525,18526,18527,18529,18530,18531,18533,18535,18536,18537,18538,18539,18541,18542,18543,18545,18546,18547,18549,18550,18551,18552,18553,18554,18557,18559,18560,18561,18562,18563,18564,18565,18566,18568,18569,18570,18573,18574,18575,18577,18578,18579,18581,18583,18584,18586,18587,18589,18590,18593,18594,18598,18599,18602,18603,18607,18608,18609,18610,18611,18612,18613,18615,18616,18617,18619,18620,18621,18623,18624,18626,18627,18628,18630,18632,18633,18634,18635,18637,18638,18639,18640,18641,18642,18645,18646,18649,18650,18653,18654,18656,18657,18661,18665,18667,18671,18675,18676,18680,18688,18689,18690,18693,18694,18696,18697,18700,18701,18704,18705,18709,18712,18713,18715,18717,18719,18721,18722,18727,18729,18730,18735,18737,18738,18740,18744,18745,18748,18753,18760,18761,18763,18765,18767,18769,18770,18775,18777,18778,18783,18785,18786,18788,18792,18793,18796,18801,18808,18809,18810,18813,18815,18817,18818,18823,18825,18826,18831,18832,18833,18836,18840,18841,18844,18849,18857,18859,18863,18867,18868,18872,18880,18881,18883,18884,18887,18888,18889,18892,18893,18896,18897,18900,18904,18905,18907,18908,18910,18912,18915,18918,18920,18923,18926,18928,18929,18933,18936,18937,18941,18944,18953,18954,18955,18958,18962,18963,18966,18967,18969,18974,18976,18980,18990,18992,\n19000,19001,19002,19003,19004,19005,19006,19008,19009,19010,19012,19013,19014,19016,19017,19018,19020,19021,19022,19024,19025,19026,19028,19029,19030,19032,19033,19034,19036,19037,19038,19040,19041,19042,19044,19046,19049,19050,19051,19053,19054,19057,19058,19061,19062,19065,19066,19069,19070,19073,19074,19077,19078,19081,19082,19085,19086,19089,19090,19094,19097,19098,19099,19101,19102,19105,19106,19109,19110,19113,19114,19117,19118,19121,19122,19125,19126,19129,19130,19133,19134,19137,19138,19142,19144,19146,19147,19150,19153,19156,19159,19162,19165,19168,19171,19174,19181,19182,19184,19187,19190,19193,19196,19199,19202,19205,19208,19211,19216,19217,19218,19219,19220,19221,19222,19224,19225,19226,19228,19229,19230,19232,19233,19234,19236,19237,19238,19240,19241,19242,19244,19245,19246,19248,19249,19250,19252,19253,19254,19256,19257,19258,19260,19262,19265,19266,19267,19269,19270,19273,19274,19277,19278,19281,19282,19285,19286,19289,19290,19293,19294,19297,19298,19301,19302,19305,19306,19310,19313,19314,19315,19317,19318,19321,19322,19325,19326,19329,19330,19333,19334,19337,19338,19341,19342,19345,19346,19349,19350,19353,19354,19358,19360,19362,19363,19366,19369,19372,19375,19378,19381,19384,19387,19390,19397,19398,19400,19403,19406,19409,19412,19415,19418,19421,19424,19427,19432,19433,19434,19435,19436,19437,19438,19440,19441,19442,19443,19444,19445,19446,19449,19450,19452,19453,19454,19455,19456,19457,19458,19460,19465,19469,19470,19471,19473,19476,19477,19478,19479,19480,19481,19482,19484,19486,19489,19492,19493,19495,19496,19497,19498,19500,19502,19509,19510,19511,19513,19516,19517,19518,19521,19522,19524,19525,19529,19530,19533,19534,19536,19537,19538,19539,19540,19541,19543,19544,19545,19546,19548,19549,19551,19552,19553,19554,19556,19557,19558,19560,19561,19562,19563,19565,19566,19568,19569,19570,19574,19576,19577,19578,19582,19585,19586,19588,19589,19590,19591,19592,19593,19594,19595,19596,19597,19598,19601,19602,19604,19605,19607,19608,19609,19610,19611,19614,19616,19619,19620,19621,19626,19627,19628,19629,\n19632,19633,19634,19636,19639,19640,19641,19644,19645,19647,19648,19650,19652,19653,19654,19658,19660,19661,19663,19664,19666,19668,19676,19677,19679,19680,19682,19684,19692,19700,19702,19703,19704,19708,19709,19710,19711,19712,19713,19714,19716,19717,19718,19720,19721,19722,19725,19726,19728,19729,19730,19733,19734,19737,19738,19741,19742,19743,19744,19745,19749,19751,19752,19753,19754,19757,19761,19764,19765,19766,19767,19768,19769,19770,19771,19772,19774,19776,19777,19779,19780,19781,19782,19784,19785,19787,19788,19789,19790,19792,19793,19794,19796,19798,19800,19802,19806,19807,19810,19811,19812,19813,19814,19816,19817,19819,19821,19823,19824,19827,19828,19829,19832,19834,19840,19842,19850,19852,19853,19855,19859,19860,19863,19867,19871,19874,19877,19879,19882,19884,19892,19894,19895,19917,19922,19937,19946,19943,19954,19955,19956,19957,19958,19959,19961,19962,19963,19964,19965,19966,19967,19968,19969,19970,19971,19972,19974,19975,19976,19978,19979,19980,19982,19985,19986,19987,19988,19990,19991,19992,19994,19997,19998,19999,20000,20002,20003,20004,20006,20007,20009,20011,20013,20014,20015,20016,20018,20021,20022,20024,20025,20026,20027,20030,20031,20032,20033,20034,20035,20038,20039,20040,20041,20042,20043,20045,20046,20047,20049,20050,20051,20052,20053,20054,20055,20058,20059,20060,20062,20065,20066,20070,20072,20074,20076,20080,20083,20086,20088,20090,20122,20123,20121,20120,20127,20126,20125,20124,20130,20129,20128,20131,20134,20133,20132,20138,20137,20136,20140,20143,20142,20145,20144,20147,20146,20150,20148,20153,20154,20152,20159,20157,20161,20163,20167,20166,20165,20169,20168,20170,20172,20175,20173,20176,20179,20177,20180,20183,20182,20181,20184,20187,20185,20188,20191,20189,20192,20195,20193,20196,20199,20197,20201,20202,20205,20208,20206,20211,20212,20215,20214,20213,20218,20221,20222,20227,20226,20231,20232,20236,20235,20239,20245,20244,20246,20248,20247,20251,20252,20257,20256,20259,20262,20263,20265,20266,20268,20271,20269,20278,20282,20284,20288,20291,20292,20295,20303,20309,20313,20317,20321,20325,\n20484,20480,20476,20472,20333,20337,20341,20345,20349,20354,20361,20297,20305,20311,20315,20319,20323,20327,20396,20400,20404,20410,20335,20339,20343,20347,20351,20356,20363,20298,20296,20304,20310,20314,20318,20322,20326,20336,20334,20338,20342,20350,20364,20438,20366,20375,20373,20377,20381,20385,20389,20393,20397,20401,20405,20412,20414,20418,20422,20426,20430,20440,20444,20442,20452,20450,20454,20458,20462,20466,20470,20473,20477,20481,20485,20489,20490,20493,20497,20501,20505,20509,20513,20439,20614,20431,20427,20423,20419,20415,20408,20406,20402,20398,20394,20390,20386,20382,20378,20374,20581,20585,20520,20522,20521,20524,20525,20528,20330,20532,20331,20536,20332,20540,20541,20544,20545,20548,20549,20552,20553,20557,20559,20563,20300,20299,20301,20306,20308,20572,20307,20371,20582,20579,20367,20574,20512,20516,20571,20368,20597,20602,20357,20600,20358,20606,20359,20360,20608,20613,20433,20611,20434,20615,20435,20436,20598,20631,20445,20623,20446,20627,20447,20448,20635,20596,20607,20641,20355,20346,20329,20648,20656,20660,20664,20814,20672,20676,20680,20824,20685,20692,20902,20758,20650,20658,20662,20666,20816,20674,20678,20682,20740,20687,20747,20898,20980,20651,20649,20659,20657,20661,20665,20669,20673,20683,20681,20686,20695,20693,20706,20704,20714,20712,20716,20720,20726,20728,20735,20737,20839,20750,20748,20757,20756,20767,20760,20764,20766,20842,20942,20778,20841,20776,20777,20786,20781,20784,20785,20794,20790,20792,20793,20796,20797,20800,20801,20810,21020,20809,20813,20670,20668,20671,20684,20773,20741,20724,20830,20774,20821,20772,20789,20779,20846,20780,20844,20850,20845,20734,20852,20733,20677,20861,20863,20862,20865,20866,20869,20870,20874,20877,20879,20856,20881,20857,20885,20858,20859,20753,20967,20895,20812,20909,20752,20751,20988,20897,20906,20911,20918,20688,20916,20689,20922,20690,20691,20924,20929,20743,20927,20744,20931,20745,20746,20912,20947,20768,20939,20769,20943,20770,20771,20910,20923,20953,20951,20965,20761,20755,20970,20968,20696,20974,20697,20972,20698,20699,20702,20754,20759,20998,\n20990,20652,20994,20653,21000,20654,20655,21002,21007,20707,21005,20708,21009,20709,20710,21019,20992,20803,21017,20804,21021,20805,20806,20991,21030,21036,21001,21044,21052,20892,20903,21046,21049,20893,21042,20894,21076,21051,21055,21047,21056,21048,21059,21058,21071,21069,21070,21073,21074,21077,21078,21081,21082,21085,21086,21089,21090,21095,21092,21098,21103,21101,21102,21105,21106,21109,21110,21113,21114,21117,21118,21121,21122,21125,21126,21130,21135,21133,21060,21137,21061,21141,21062,21145,21063,21149,21064,21153,21065,21157,21066,21067,20976,21168,21176,21173,20915,21177,21186,20904,20914,20694,21094,20701,20765,20985,21197,20700,21213,21289,21299,21304,21311,21314,21355,21359,21410,21422,21486,21625,21704,21721,21913,21917,21205,21204,21203,21202,21209,21208,21207,21206,21212,21211,21210,21217,21216,21215,21214,22717,21221,21220,21219,21218,21225,21224,21223,21228,21227,21226,21233,21232,21231,21230,21237,21236,21234,21241,21240,21239,21238,21244,21243,21242,21249,21248,21246,21253,21252,21251,21258,21274,21256,21255,21254,21261,21260,21259,21265,21264,21263,21262,21699,21266,21273,21272,21271,21270,21281,21280,21279,21278,21285,21284,21283,21288,21287,21286,21293,21291,21290,21296,21295,21294,21301,21300,21298,21305,21303,21302,21309,21308,21307,21313,21312,21317,21316,21315,21329,23016,21318,23027,21322,21333,21332,21331,21330,21336,21335,21340,21345,21344,21349,21348,21347,21352,21350,21357,21356,21361,21365,21364,21367,21366,21372,21371,21370,21376,21375,21374,21401,21400,21381,21380,21379,21378,21385,21383,21382,21511,21476,21389,21388,21387,21386,21391,21397,21396,21394,21405,21404,21402,23035,23031,21407,21406,21412,21411,21417,21416,21415,21414,21421,21420,21419,21424,21423,21428,21432,21430,21437,21436,21435,21434,23030,23041,21439,21445,21444,21449,21448,21446,21452,21533,21457,21456,21455,21454,21458,21465,21462,21469,21468,21466,21477,21474,21484,21489,21488,21491,21490,21497,21496,21495,21494,21572,21500,21505,21502,21507,21506,21513,21512,21510,21517,21516,21520,21519,21525,21528,21695,21532,\n21530,21537,21545,21544,21543,21542,21548,21546,21553,21550,21557,21555,21554,21560,21559,21563,21568,21590,23058,21575,21574,21573,21580,21579,21578,21577,23053,21581,21588,21586,21596,21594,21593,21599,21598,21604,21602,22645,21607,21609,21616,21614,21613,21620,21618,21621,21627,21626,21636,21635,21633,21640,21638,21642,21648,23037,21656,21655,21654,21653,21660,21659,21663,22714,21669,21680,21678,21677,21682,21681,21688,22731,23014,21692,21696,21703,21701,21711,21710,21716,21715,21714,21713,21720,21719,21717,21724,21723,21728,21727,21732,21731,21730,21735,21740,21739,21744,21743,21742,21741,21748,21747,21746,21745,21752,21751,21750,21749,21756,21755,21754,21753,21760,21759,21758,21764,21763,21762,21761,21768,21767,21766,21765,21772,21771,21769,21775,21774,21773,21780,21778,21784,21782,21781,21788,21787,21792,21791,21789,21795,21793,21800,21799,21798,21797,21804,21802,21806,21812,21811,21809,21816,21815,21813,21820,21819,21817,21824,21823,21828,21827,21825,21832,21831,21829,21833,21840,21839,21837,21842,21846,21850,21854,21853,21860,21857,21862,21872,21875,21874,21879,21884,21881,21892,21891,21894,21893,21897,21901,21906,21911,22624,21924,21923,21922,21921,21926,21925,21932,21931,21930,21929,21936,21935,21934,21940,21939,21937,21944,21942,21941,21948,21947,21946,21951,21950,21949,21956,21955,21953,21960,21959,21958,21957,21964,21963,21962,21961,21968,21967,21965,21972,21971,21970,21975,21974,21973,21979,21978,21977,21983,21981,21987,21985,21991,21990,21993,21999,21997,22004,22003,22002,22008,22007,22006,22012,22011,22016,22015,22014,22013,22019,22018,22023,22022,22021,22028,22027,22026,22032,22031,22030,22029,22035,22034,22040,22039,22038,22037,22044,22043,22042,22041,22048,22047,22046,22045,22152,22997,22056,22055,22053,22060,22059,22058,22057,22064,22063,22061,22068,22067,22066,22065,22072,22071,22070,22069,22076,22073,22079,22078,22077,22084,22083,22082,22081,22088,22087,22086,22085,22092,22090,22089,22096,22095,22094,22093,22100,22098,22097,22103,22102,22112,22109,22116,22113,22118,22123,22122,22121,22127,22126,\n22125,22124,22131,22130,22129,22128,22135,22134,22143,22141,22147,22146,22145,22144,23004,22150,22156,22155,22153,22163,22161,22166,22165,22164,22171,22170,22169,22168,22175,22174,22172,22179,22178,22177,22176,22183,22181,22180,22187,22186,22185,22191,22189,22188,22195,22194,22193,22197,22203,22202,22201,22200,22207,22206,22205,22204,22210,22209,22208,22215,22219,22218,22217,22216,22223,22221,22220,22226,22225,22224,22230,22229,22228,22235,22232,22239,22236,23007,22245,22250,22249,22248,22255,22253,22050,22259,22256,22262,22261,22264,22269,22268,22275,22273,22279,22277,22276,22282,22281,22287,22286,22285,22284,22291,22290,22289,22293,22292,22299,22297,22302,22300,22306,22304,22311,22313,22318,22317,22323,22322,22321,22326,22325,22329,22335,22334,22332,22339,22338,22337,22343,22342,22346,22345,22344,22350,22355,22352,22359,22356,22363,22361,22367,22366,22365,22371,22369,22368,22374,22373,22379,22378,22377,22376,22383,22382,22381,22385,22390,22389,22388,22395,22393,22392,22398,22396,22402,22406,22404,22412,22415,22414,22419,22877,22422,22421,22424,22430,22428,22433,22432,22439,22438,22436,22443,22442,22441,22447,22445,22444,22453,22452,22451,22455,22462,22460,22466,22463,22470,22468,22467,22474,22473,22471,22475,22479,22908,22486,22484,22490,22494,22492,22491,22498,22497,22502,22499,22510,22514,22522,22520,22525,22524,22530,22529,22527,22532,22538,22541,22540,22546,22545,22552,22558,22559,22566,22570,22574,22408,22049,22582,22589,22593,22596,22606,22604,22608,22614,22613,22619,22616,22623,22688,22626,22630,22651,22661,22673,22675,22694,22708,22709,22729,22732,22759,22765,22763,22775,22782,22796,22803,22809,22817,22829,22827,22835,22833,22837,22836,22839,22843,22842,22847,22850,22853,22863,22872,22876,22879,22890,22893,22896,22901,22920,22926,22930,22942,22951,22950,22985,22638,21257,21276,21267,21268,21338,22720,21306,21339,21691,21702,21706,22990,22989,22994,22411,22051,22052,22151,22148,22246,22247,22543,21480,21686,21320,21481,23020,21321,22713,21666,21675,21408,21667,22711,21409,21672,21652,22704,21440,21649,21324,\n21441,21325,22625,23048,21582,23054,21569,21583,21571,21570,23012,23049,25519,23110,23063,23064,23065,23066,23067,23068,23069,23070,23072,23073,23074,25463,23794,23083,23084,23085,23086,23087,23088,23089,23090,23093,23094,23095,23096,23097,23098,23099,23100,23101,23103,23104,23105,23106,23107,23111,23112,23113,23115,23116,23117,23118,23120,23121,23125,23126,23127,23128,23129,23130,23132,23133,23134,23135,23583,23139,23140,23141,23142,23143,23148,23149,23150,23151,23152,23153,23154,23157,23158,23159,23160,23162,23163,23165,23166,23167,23169,23170,23172,23174,23175,23176,23177,23178,23180,23181,23184,23185,23186,23188,23189,23191,23192,23193,23195,23200,23201,23202,23203,23205,23206,23209,23212,23213,23216,23217,23218,23221,23223,23224,23225,23228,23232,23233,23239,23241,23242,23243,23245,23246,23247,23123,23249,23252,23253,23254,23255,23256,23258,23259,23261,23260,23264,23265,23266,23262,23270,23272,23263,23250,23276,23277,23279,23280,23281,23282,23283,23285,23286,23288,23289,23290,23291,23292,23293,23294,23297,23298,23301,23305,23307,23308,23309,23310,23311,23312,23313,23314,23316,23317,23320,23321,23323,23325,23329,23330,23332,23333,23334,23335,23339,23122,23343,23344,23345,23347,23352,23355,23357,23361,23364,23365,23370,23372,23373,23374,23375,23380,23383,23386,23389,23390,23391,23392,23394,23395,23396,23400,23401,23403,23408,23579,23412,23414,23415,23423,23424,23425,23426,23428,23430,23431,23434,23435,23437,23438,23440,23441,23444,23445,23446,23447,23472,26338,23456,23457,23458,23459,23460,23461,23462,26340,23466,23468,23474,23476,23477,23479,23480,23482,23484,23486,23487,23491,23497,23498,23500,23501,23502,23504,23509,23511,23512,23518,23519,23521,23522,23524,23528,23530,23534,23538,23539,23540,23541,23542,23543,23547,23552,23554,23557,23559,23562,23564,23565,23568,23569,23570,23572,23573,23574,23578,23587,23589,23595,23596,23602,23603,23604,23605,23606,23607,23609,26341,23614,23615,23618,23619,23601,23623,23624,23627,23630,23631,23634,23635,23636,23637,23638,23639,23640,23641,23642,23643,23644,23645,23646,23647,\n23648,23649,23650,23651,23652,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23665,23667,23668,23669,23670,23672,23674,23676,23677,23678,23679,23682,23683,23685,23687,23689,23690,23691,23692,23693,23694,23696,23700,23702,23703,23705,23706,23707,23709,23710,23711,23713,23714,23715,23718,23719,23721,23722,23723,23725,23729,23730,23731,23733,23736,23740,23744,23748,23600,23750,23753,23756,23762,23767,23768,23771,23774,23777,23782,23783,23788,23789,23793,23797,23800,23803,25439,23814,23815,23816,23817,23820,23821,23822,23823,23824,23825,23826,23827,23828,23830,23831,23833,23834,23836,23837,23838,23839,23840,23843,23844,23845,23846,23847,23849,23850,23851,23852,23853,23854,23855,23856,23857,23858,23859,23861,23862,23863,23864,23867,23868,23869,23871,23872,23873,23875,23877,23879,23881,23883,23884,23889,23891,23893,23894,23895,23896,23898,23899,23900,23902,23903,23906,23907,23908,23909,23911,23912,23915,23916,23917,23918,23919,23920,23922,23923,23924,23925,23927,23928,23930,23931,23932,23933,23934,23935,23936,23937,23938,23939,23940,23941,24149,26321,23946,23947,23949,23950,23951,23952,23953,23954,23955,23957,23958,23959,23960,23961,23962,23963,23964,23965,23966,23969,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,24001,24002,24003,24004,24005,24006,24007,24008,24009,24010,24011,24012,24013,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24025,24026,24028,24029,24030,24032,24033,24034,24035,24036,24037,24038,24039,24040,24041,24042,24043,24045,24046,24047,24049,24050,24051,24052,24053,24054,24055,24057,24059,24060,24061,24062,24063,24064,24065,24066,24067,24069,24070,24071,24072,24073,24074,24076,24077,24078,24079,24080,24082,24083,24084,24086,24087,24088,24089,24090,24091,24092,24095,24096,24097,24099,24100,24101,24102,24104,24105,24106,24109,24110,24111,24112,24113,24114,24115,24116,24117,24118,24119,24122,24123,24129,24131,24132,24133,24134,24136,24138,24139,24140,24141,26322,24143,24153,\n24146,24148,24154,24155,24156,24158,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24173,24174,24175,24176,24177,24178,24180,24181,24182,24183,24184,24186,24188,24189,24190,24191,24192,24193,24195,24196,24198,24199,24200,24201,24202,24203,24204,24205,24207,24208,24209,24210,24214,24215,24216,24217,24218,24220,24221,24223,24224,24225,24227,24228,24229,24230,24231,24232,24233,24234,24235,24237,24239,24240,24241,24243,24244,24245,24246,24247,24249,24250,24253,26327,24260,24263,24264,24265,24266,24268,23944,24270,24273,24275,24276,24281,24284,24285,24286,24288,24290,24292,24293,24295,24296,24298,24299,24300,24301,24302,24303,24304,24308,24309,24310,24312,24315,24317,24319,24321,24322,24328,24331,24332,24334,24335,24336,24339,24340,24344,24346,24347,24349,24350,24351,24352,24354,24355,24359,24360,24361,24363,24366,24369,24370,24373,24374,24376,24378,24379,24380,24382,24384,24385,24387,24388,24390,24391,24392,24393,24394,24395,24396,24400,24403,24404,24405,24406,24408,24409,24411,24413,24415,24419,24421,24429,24426,24427,24430,24435,24437,24438,24441,24443,24444,24445,24448,24449,24451,24457,24458,24459,24460,24461,24462,24465,24467,24468,24470,24471,24472,24475,24477,24478,24481,24483,24487,24491,24492,24493,24494,24496,24497,24501,24504,24505,24507,24508,24509,24510,24511,24512,24514,24515,24516,24517,24518,24520,24521,24522,24523,24524,24525,24526,24527,24528,24529,24532,24533,24534,24536,24537,24538,24539,24540,24541,24543,24544,24546,24547,24548,24549,24551,24552,24553,24554,24555,24556,24557,24558,24559,24561,24563,24564,24565,24566,24568,24569,24570,24571,24572,24573,24574,24576,24577,24578,24579,24581,24582,24583,24584,24585,24586,24587,24588,24590,24591,24592,24593,24594,24596,24597,24598,24599,24600,24601,24603,24604,24605,24607,24608,24609,24610,24611,24612,24614,24615,24616,24617,24618,24619,24620,24623,24624,24625,24626,24627,24628,24629,24630,24631,24632,24634,24635,24636,24637,24638,24639,24640,24641,24643,24644,24645,24646,24647,24649,24650,24651,24652,24654,24655,24656,24657,24658,24660,24661,\n24662,24663,24664,24665,24667,24668,24669,24670,24671,24672,24674,24675,24676,24677,24679,24680,24682,24683,24684,24685,24686,24687,24688,24689,24691,24692,24693,24694,24695,24697,24698,24700,24701,24702,24703,24704,24707,24708,24709,24710,24711,24712,24714,24715,24716,24717,24718,24719,24720,24721,24722,24723,24724,24726,24727,24728,24729,24730,24732,24733,24734,24735,24736,24737,24738,24739,24740,24742,24743,24745,24747,24748,24750,24751,24753,24754,24755,24758,24759,24760,24761,24763,24764,24765,24766,24767,24769,24771,24772,24774,24775,24777,24780,24781,24782,24783,24785,24786,24787,24790,24792,24793,24794,24795,24798,24799,24800,24801,24802,24803,24804,24805,24806,24808,24811,24813,24819,24821,24822,24825,24826,24827,24828,24831,24833,24839,24841,24845,24846,24848,24849,24851,24854,24856,24857,24859,24860,24861,24862,24863,24864,24865,24866,24867,24868,24869,24871,24872,24873,24874,24875,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24887,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24906,24907,24908,24911,24914,24915,24917,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24933,24934,24935,24936,24937,24941,24942,24943,24945,24947,24948,24949,24950,24952,24956,24958,24959,24960,24961,24962,24964,24966,24967,24969,24972,24973,24974,24977,24979,24980,24983,24989,24991,24993,24996,24997,24998,24999,25001,25002,25003,25004,25006,25008,25009,25010,25013,25019,25020,25023,25025,25031,25033,25034,25038,25041,25043,25044,25045,25046,25047,25049,25050,25052,25054,25057,25058,25062,25064,25065,25066,25067,25069,25070,25071,25073,25074,25075,25077,25080,25082,25083,25084,25085,25086,25087,25089,25090,25092,25093,25094,25095,25097,25098,25104,25105,25107,25111,25112,25114,25115,25118,25119,25122,25125,25129,25130,25131,25132,25136,25137,25138,25140,25142,25144,25145,25146,25150,25157,25158,25159,25162,25163,25166,25168,25171,25173,25177,25180,25183,25184,25186,25188,25190,25194,25196,25197,25198,25199,25202,25205,25210,25214,25224,25225,25228,25229,25230,25231,25235,25240,\n25242,25244,25247,25248,25251,25252,25254,25255,25257,25260,25262,25267,25268,25272,25273,25274,25275,25284,25286,25293,25294,25298,25302,24425,23945,25310,25315,25317,25319,25321,25322,25324,25327,25329,25330,25332,25333,25335,25336,25337,25338,25339,25340,25352,25356,25358,25360,25362,25365,25369,25370,25372,25373,25374,25375,25377,25381,25384,25387,25388,25391,25394,25400,25401,25404,25408,25413,25419,25421,25425,25427,25428,25430,25433,25434,25522,25438,25464,25468,25472,25492,25499,25503,25541,25547,25549,25561,25566,25568,25589,25595,25599,25617,25619,25626,25628,25630,25631,25634,25636,25637,25641,25644,25647,25661,25670,25671,25676,25683,25686,25689,25697,25700,25701,25703,25711,25712,25716,25725,25726,25728,25731,25736,25742,25752,25753,25755,25756,25757,25758,25761,25763,25766,25767,25769,25772,25773,25774,25776,25785,25788,25789,25791,25794,25799,25815,25816,25817,25818,25819,25821,25823,25825,25827,25829,25832,25833,25835,25837,25842,25851,25854,25855,25857,25860,25865,25881,25882,25884,25885,25886,25890,25891,25893,25894,25896,25899,25908,25911,25912,25914,25917,25922,25940,25944,25950,25951,25952,25953,25957,25961,25962,25964,25968,25974,25981,25982,25989,25991,25993,25995,25997,25998,25999,26003,26004,26005,26007,26012,26015,26016,26020,26022,26026,26027,26028,26039,26054,26056,26058,26063,26065,26067,26071,26075,26076,26079,26081,26090,26093,26094,26109,26110,26113,26141,26162,26172,26175,26181,26189,26201,26207,26209,26224,26230,26239,26240,26276,26296,26304,25448,23124,23145,23138,23137,23211,23168,25511,23179,23210,23575,23588,23592,26312,26313,26316,24422,23943,23942,24142,24145,24259,24258,25277,25508,23464,26334,23465,23613,26342,26346,23610,26350,23080,23076,22477,22457,22537,22198,22138,22119,22114,22110,22108,22104,21685,22632,22629,25518,23109,23371,23079,23082,23075,23612,26336,25442,23078,23077,22192,26363,26430,26365,26646,26482,26715,27616,26766,26946,26801,26905,27012,26748,26368,26902,26903,26378,26382,26383,26387,27921,26403,27051,26414,26418,26415,27929,26384,26419,26420,26421,26669,\n26425,26764,26907,26893,26369,26379,26798,26439,26441,26400,26364,26446,26449,26402,26401,26453,26454,26460,26463,26651,26508,26468,26568,26471,26521,26926,26476,26473,26486,26507,26489,26856,26878,26859,26512,26522,26923,26809,27035,26528,26530,26531,26532,26534,26535,26517,26541,26549,26361,26560,26561,26596,26491,27019,26731,26752,26957,26575,26774,26582,26679,26915,26595,26693,26829,26821,26837,26825,26816,26838,26877,26612,26511,26537,26613,26614,26617,26510,26621,26527,26574,26972,26626,26627,26629,26631,26632,26633,26634,26635,26671,26638,26639,26643,26598,26599,26759,26601,26648,26656,26654,26657,26664,26665,27053,26674,26571,26735,26594,26689,26698,26706,26707,26690,26691,26717,26597,26721,26722,26726,26727,26730,26734,26699,26701,26705,26484,26745,26917,26687,26738,26590,27905,26938,26960,26467,26753,26817,26822,26826,26830,26564,26550,26776,27026,26780,26495,26797,26685,27002,26773,26808,26526,26813,26786,26871,26849,26794,26504,26505,26602,26609,26543,26542,27792,26547,26503,26795,26792,26577,26783,26576,26785,26611,26847,26853,26854,26553,26499,26498,26502,26501,26546,26545,26848,26552,26866,26497,26496,26556,26886,26637,26640,26440,26429,26375,27754,26392,26438,26393,26394,26431,26897,26391,26999,26900,26428,26427,26796,26480,26918,26592,26920,26523,26475,26931,26751,26466,26932,26933,26740,26942,26744,26789,26961,26965,26967,26728,26970,26708,26625,26628,26659,26790,26513,26986,26514,26469,26472,27857,26603,26485,26470,26739,26702,26529,26372,26371,26951,26950,26954,26754,26586,27043,27011,26416,26757,26788,26686,27016,26585,26551,26360,26559,26914,26479,26494,26925,26474,26607,27018,26506,27022,26911,26533,26615,26579,27023,26581,26580,26852,27001,26525,26524,27041,26397,26411,26413,26412,26423,26572,26710,26422,26448,26770,27356,27390,27351,27417,27072,27084,27770,27766,27552,27062,27061,27060,27711,27555,27941,27431,27064,27065,27063,27409,27415,27066,27094,27088,27070,27089,27303,27091,27096,27188,27105,27451,27101,27504,27495,27116,27444,27508,27642,27493,27878,27299,27844,27602,27115,27256,27337,\n27350,27368,27355,27104,27103,27111,27148,27131,27467,27527,27180,27302,27346,27360,27357,27147,27129,27717,27563,27259,27128,27134,27133,27132,27140,27301,27297,27142,27438,27437,27442,27246,27365,27331,27344,27126,27678,27832,27287,27305,27741,27151,27157,27311,27155,27342,27470,27160,27159,27165,27163,27162,27169,27168,27167,27205,27172,27171,27175,27174,27179,27181,27183,27187,27472,27194,27195,27202,27229,27559,27523,27569,27220,27227,27234,27525,27242,27238,27223,27725,27211,27215,27222,27219,27460,27226,27225,27228,27230,27232,27465,27617,27475,27243,27494,27520,27455,27457,27251,27657,27583,27289,27264,27268,27488,27327,27325,27329,27130,27591,27304,27369,27284,27282,27343,27296,27386,27122,27106,27716,27076,27680,27136,27137,27278,27279,27310,27309,27315,27553,27318,27689,27787,27320,27492,27114,27489,27112,27113,27599,27594,27330,27750,27107,27339,27281,27312,27286,27352,27364,27110,27336,27108,27109,27751,27359,27735,27338,27292,27173,27170,27385,27391,27389,27393,27271,27399,27402,27395,27078,27379,27378,27405,27380,27407,27435,27383,27384,27411,27545,27387,27143,27144,27441,27149,27512,27254,27646,27446,27253,27100,27102,27099,27516,27245,27517,27453,27244,27260,27261,27120,27461,27459,27224,27464,27236,27161,27158,27192,27118,27480,27117,27500,27487,27501,27505,27509,27513,27521,27533,27541,27080,27075,27085,27290,27940,27781,27774,27548,27946,27069,27561,27565,27571,27575,27654,27584,27590,27627,27598,27606,27214,27218,27581,27609,27146,27248,27250,27622,27626,27458,27638,27650,27661,27662,27485,27585,27659,27483,27316,27671,27673,27682,27686,27688,27077,27700,27703,27709,27721,27059,27068,27534,27734,27124,27447,27125,27740,27154,27732,27127,26362,26376,26895,26436,26399,26451,26450,27177,26642,26641,26694,26913,26478,26477,26993,26992,26493,26492,26749,26714,26434,26433,26769,26747,26481,26883,26868,26565,40223,26833,26814,26845,26616,26624,26619,26841,26509,26676,26782,26876,26573,26812,26875,26793,26842,26555,27361,27586,40230,27332,27596,27326,27333,27285,27738,27317,27322,27319,27321,27362,27890,\n27744,26681,26589,26678,26587,26588,26390,27040,26388,26389,26404,26405,26374,26373,27758,26891,27423,26435,27419,27422,27082,27376,27767,27079,27771,27083,27775,27698,27778,27141,27263,27262,27348,26548,27593,26682,27558,27808,26562,26539,26538,27815,26806,26570,27805,26367,27392,27034,26955,27156,27696,26566,27298,27257,27618,27851,27855,27017,27839,26567,27864,27867,26465,27810,27496,27846,27879,27497,27886,27669,27484,27897,26490,27895,26519,27894,26488,26487,27860,26695,27909,26758,27913,27010,27917,27049,26395,26398,27925,26410,26386,26385,26444,27208,27291,27210,27209,27549,27705,27275,27546,27073,27276,29107,28255,29081,27956,29146,28860,29084,29069,28411,28298,28484,28581,28303,28578,29039,27955,27954,27953,27960,27959,27958,27964,27963,27962,27961,27968,27966,27965,27972,27971,27970,27969,27976,27975,27974,27973,27978,27977,27984,27982,27981,27988,27987,27986,27985,27991,27990,27996,27995,27994,27993,27999,27998,27997,28004,28003,28002,28001,28008,28007,28005,28011,28010,28009,28016,28014,28013,28020,28019,28018,28017,28024,28022,28021,28028,28027,28025,28032,28031,28030,28029,28036,28035,28034,28040,28039,28038,28037,28044,28042,28041,28048,28047,28046,28045,28051,28050,28049,28055,28054,28053,28060,28059,28058,28064,28063,28062,28061,28068,28067,28066,28071,28070,28069,28076,28075,28074,28073,28080,28079,28078,28084,28083,28082,28081,28088,28087,28086,28085,28091,28090,28089,28096,28095,28093,28100,28099,28098,28104,28103,28102,28101,28108,28106,28105,28112,28111,28110,28109,28115,28114,28113,28120,28119,28118,28124,28123,28122,28121,28127,28126,28132,28131,28130,28129,28136,28135,28134,28133,28139,28138,28137,28144,28143,28141,28148,28146,28145,28152,28151,28150,28155,28154,28153,28160,28159,28158,28164,28163,28162,28161,28168,28167,28166,28165,28172,28171,28170,28176,28175,28174,28173,28180,28178,28177,28184,28183,28182,28181,28188,28187,28186,28192,28191,28189,28195,28194,28200,28199,28197,28204,28203,28208,28207,28206,28205,28211,28210,28209,28216,28215,28213,28219,28218,28224,28223,28221,28226,28225,\n28232,28231,28229,28236,28235,28240,28238,28237,28244,28243,28248,28247,28246,28245,28252,28251,28250,28249,28256,28254,28259,28257,28267,28265,28272,28269,28276,28275,28274,28279,28277,28287,28285,28289,28296,28294,28293,28299,28304,28302,28301,28307,28306,28305,28312,28311,28310,28309,28316,28315,28314,28313,28319,28318,28317,28324,28323,28322,28321,28328,28327,28326,28325,28332,28331,28330,28329,28335,28340,28339,28338,28337,28344,28342,28341,28348,28347,28346,28345,28352,28356,28355,28354,28359,28364,28363,28361,28366,28365,28372,28371,28370,28369,28376,28375,28374,28373,28377,28384,28383,28382,28381,28385,28392,28391,28389,28395,28394,28393,28400,28398,28402,28408,28407,28406,28405,28412,28410,28416,28415,28413,28419,29067,28420,28417,28423,28422,28427,28878,28991,28432,28431,28429,28434,28440,28439,28438,28437,28444,28443,28441,28448,28446,28445,28452,28451,28449,28456,28458,28457,28463,28467,28466,28472,28471,28476,28475,28480,28477,28481,28488,28487,28486,28490,28489,28496,28494,28499,28500,28498,28503,28501,28506,28511,28510,29092,28513,28515,28514,29050,28518,28516,28522,28520,28527,28525,28530,28528,28535,28533,28532,28538,28537,28536,28543,28542,28541,28553,28557,28561,28563,28560,28564,28571,28569,28568,28575,28574,28572,28576,28582,28587,28586,28594,28603,28602,28606,28609,28610,28616,28630,28629,28633,28632,28631,28636,28639,28637,28640,28645,28643,28646,28651,28650,28654,28663,28666,28665,28669,28672,28673,28693,28692,28691,28696,28695,28699,28697,28701,28705,28703,28706,28711,28709,28713,28720,28729,28732,28731,28735,28738,28739,28759,28758,28762,28761,28760,28768,28767,28771,28770,28774,28777,28786,28789,28788,28792,28795,28796,28814,28822,28828,28827,28826,28831,28833,28835,28840,28838,28846,28852,28857,28856,28867,28865,28869,28873,28871,28876,28875,28877,28882,28881,28885,28886,28889,28894,28896,28900,28902,28901,28906,28913,28928,28932,28936,28937,28941,28945,28947,28949,28954,28957,28955,28964,28967,28972,28986,29003,29017,29020,29026,29030,29043,29061,29073,29086,29088,29096,29109,29117,29116,\n29119,29124,29125,29128,29115,29078,29072,29079,29103,29153,29105,29036,29147,27557,27206,21562,22644,29175,22689,23376,23463,26652,29194,29196,29200,29201,29204,29205,29206,29207,29193,29191,29192,29197,29198,29202,29208,29209,30767,29236,29241,29244,29248,29228,29230,29231,29574,30774,29237,29238,29239,29242,29243,29245,29246,29249,29250,29581,29254,29257,29258,29259,29260,29262,29263,29265,29266,29267,29268,29270,29271,29276,30778,29277,29278,29279,29281,29282,29283,29285,29286,29290,29291,29293,29294,29298,29299,29300,29301,29302,29305,29306,29307,29310,29314,29315,29316,29318,29319,29322,29323,29623,29328,29330,29331,29333,29334,29339,29341,29342,29345,29346,29347,29349,29350,29356,29357,29359,29361,29362,29365,29366,29367,29368,29369,29371,29372,29373,29374,29375,29376,29377,29379,29382,29383,29384,29327,29388,29391,29392,29393,29395,29396,29397,29400,29401,29403,29404,29407,29408,29413,29417,29215,29219,29223,29227,29255,29311,29358,29418,29420,29421,29422,29425,29428,29429,29430,29433,29435,29436,29438,29439,29443,29445,29447,29449,29451,29455,29457,29461,29463,29464,29466,29467,29468,29469,29470,29471,29473,29475,29476,29477,29478,29479,29480,29481,29482,29483,29484,29485,29486,29487,29488,29490,29491,29492,29493,29494,29495,29496,29497,29498,29500,29501,29502,29504,29506,29508,29510,29512,29515,29516,29518,29519,29521,29522,29523,29525,29526,29530,29531,29534,29538,29539,29544,29547,29627,29326,29556,29537,29325,30693,29558,29563,29566,29567,29195,29226,29572,29578,29584,29598,29603,29609,29411,29324,29626,29632,29633,29636,29637,29640,29641,29645,29646,29649,29650,29653,29654,29657,30088,30042,29852,29769,29773,30119,29820,30046,29816,29999,30077,29812,29788,29792,29859,29824,29781,30083,29780,29808,29796,29800,30573,29662,29661,30404,29865,30256,30400,29869,30252,30396,29873,30388,29876,29668,30445,30018,29884,29691,29670,29888,29671,29892,29897,30091,30263,29901,30424,29676,30262,29678,29684,29683,30291,30384,29904,29690,29692,29689,29696,29693,30345,29908,29913,29994,30278,30272,30271,30059,30568,30234,\n30233,30029,30028,30145,30148,29714,29713,30352,29722,29727,29726,30230,30031,30030,29740,29762,30476,29752,29747,29749,30585,30284,30503,29936,30034,29944,30111,29763,29952,30095,30243,29761,29685,29686,29687,29772,29771,29770,29776,29775,29774,29778,29777,29783,29782,29787,29786,29785,29791,29790,29789,29794,29793,29798,29797,29803,29802,29801,29807,29811,29810,29805,29813,29998,29821,30559,29923,29826,29825,29831,29830,29832,29834,29833,29838,29837,29842,29841,29847,29846,29850,29849,30599,30304,29854,29858,29857,29856,29863,29861,29866,29864,29868,29872,29879,29877,29885,29887,29891,29895,29806,29898,29896,29902,29907,29906,29911,29814,30074,29916,29995,29924,29922,29928,29933,29939,29937,29941,29945,29949,29953,30023,29956,29963,29969,29979,29976,29983,29980,29985,29880,29965,29961,29992,30002,30380,30248,29881,29967,29966,30027,30033,29940,30511,30036,29943,30005,30043,30048,30004,30052,30318,30055,30061,30060,30065,30064,30134,29973,29972,30072,29964,29917,30238,30237,29996,30082,30090,29818,29819,29919,29914,30267,30420,30266,29760,30239,29759,29977,30044,30357,30098,30307,29962,29975,29715,29716,29737,29738,29948,30531,30113,29951,29822,29823,30007,29926,30125,29725,30311,29721,30314,29766,29765,30139,30141,30140,30143,30152,29731,30157,29730,29735,29732,30165,29729,30163,30515,30164,30169,29733,30168,30171,30173,30174,30181,30194,30011,30175,30179,30180,30185,30184,30177,30009,30008,30197,30100,30101,30203,30149,30104,30103,30161,30211,30110,30109,29736,30107,30217,30527,30216,30188,30190,30226,30281,30227,30231,30228,30711,30232,30236,30241,29757,29758,30244,30014,30246,30247,30013,30251,29682,30255,29677,30289,30261,30265,29707,29701,29705,29706,30277,29991,30634,30410,30287,29664,30260,30245,29663,30067,30138,30070,29688,30320,30306,30305,30491,30097,30096,30331,30313,30316,30484,30322,30321,30326,30330,29744,29718,29719,30131,30369,29669,30444,30443,29667,30456,29665,29666,30298,30300,30467,30297,30471,30133,29720,29717,29741,29742,29754,29673,30054,29697,30343,30056,30347,30129,29723,29724,29748,29745,\n29698,30365,29700,29675,30373,30376,30382,30392,30414,30416,29660,29712,30053,30432,30366,30371,30437,29883,30452,29882,30459,30463,30475,30340,30482,30543,30339,29756,29753,30309,30324,30000,30308,30360,30001,30499,30553,30500,30506,30519,30523,30535,30539,30547,30501,30560,30279,29710,30572,29920,30557,30280,29711,29709,30488,29932,30587,29935,29829,29959,29957,29958,30601,30604,30629,30636,30644,30625,30648,30630,30652,30651,30642,30609,30606,30605,30615,30614,30619,30618,30658,30626,30639,30628,30627,30632,30411,30283,30655,30633,30673,30496,30676,30497,30375,30229,29679,30686,30688,30692,29704,29353,29708,30563,30698,30694,29702,30728,30715,30672,30733,30678,30624,30622,30623,30670,30680,30721,29351,29352,30748,29308,30752,29252,30758,29224,30762,29220,30763,29216,29213,29212,29234,29233,29274,29273,29630,29336,30582,29845,29836,30160,30154,30159,30105,30580,30106,30578,30147,30797,30202,30801,30102,30805,30010,30809,30221,30813,30189,30817,30225,30144,29672,30827,30637,30834,30833,30832,30831,30838,30837,30836,30842,30841,30840,30853,30846,30844,30843,30850,30847,30854,30851,30857,30858,30862,30861,30859,30866,30865,30870,30869,30874,30873,30871,30878,30877,30882,30881,30885,30890,30889,30888,30892,30891,30902,30901,30900,30899,30906,30905,30903,30910,30909,30907,30914,30913,30911,30918,30917,30915,30922,30919,30926,30923,30930,30929,30928,30927,30934,30933,30932,30938,30937,30942,30941,30946,30944,30950,30954,30958,30956,30962,30961,30959,30966,30965,30969,30883,30977,30982,30972,30976,30975,30895,30855,30973,30990,30989,30988,30987,30994,30993,30991,30998,30997,30995,31008,31002,31001,30999,31006,31003,31010,31014,31013,31012,31011,31018,31017,31016,31022,31021,31025,31030,31029,31028,31034,31033,31037,31040,31042,31045,31044,31043,31050,31049,31053,31058,31057,31056,31055,31069,31059,31211,31062,31061,31060,31066,31064,31070,31068,31067,31074,31071,31075,31082,31081,31080,31079,31086,31085,31083,31090,31089,31094,31097,31095,31101,31109,31114,31112,31111,31116,31115,31122,31126,31129,31107,31127,31123,31133,\n31137,31142,31146,31149,31153,31157,31161,31165,31169,31173,31177,31182,31186,31189,31193,31197,31201,31205,31209,31213,31217,31221,31226,31230,31234,31238,31241,31245,31134,31132,31138,31141,31145,31144,31150,31148,31152,31156,31160,31166,31170,31167,31174,31172,30884,31181,30955,31190,31188,31192,31196,31202,31206,31203,31210,31208,31214,31218,31225,31229,31228,31233,31231,31039,31242,31108,30856,31293,31281,31298,31278,31277,31275,31276,31280,31279,31285,31284,31289,31271,31292,31274,31273,31272,31303,30974,30985,31124,31312,31322,31315,31311,31912,31344,31478,31903,31336,31505,32158,31476,31347,31349,31455,31441,31468,31431,32166,31379,31341,31444,31414,31400,31345,31348,31904,31354,31355,31356,31357,31359,31361,31362,31364,31365,31366,31368,31370,31372,31373,31374,31377,31380,31381,31384,31387,31388,31389,31941,31566,31399,32176,31403,31398,31401,31402,31405,31409,31421,31407,31408,31420,32171,31412,31415,31416,31419,31425,31424,31426,31429,31432,31433,31436,31438,31439,31440,31442,31443,31445,31446,31447,31448,31451,31453,31457,31463,31465,31466,31474,32554,32514,32521,32512,31536,31342,31920,31499,31332,31486,31489,31548,31430,31411,31434,31410,31553,31394,31460,31390,31397,31392,31393,31573,31490,31339,31578,31334,31333,31350,32058,32049,31702,31653,32295,32131,31595,31601,31896,32133,31615,31622,31598,31628,31878,31658,31992,31668,31892,32310,31948,31947,31684,32150,31870,32366,31692,32118,31748,31886,31603,32092,32084,31806,40299,31760,32099,31820,31775,31785,31780,32016,32040,31790,31789,31796,31794,31793,31507,31955,31803,31801,31831,31518,32526,31898,31834,31708,31621,31705,32140,31847,31843,40348,31862,31856,31905,31880,32123,31610,31833,31516,31906,31521,31526,31527,31531,31534,31535,31922,31931,31928,31932,31935,31787,31590,31591,31938,31943,31406,31942,31983,31783,31962,31975,32062,31630,31949,31988,32339,31666,31667,31996,31890,31609,32002,32004,31592,31605,31824,32019,32015,31868,31867,32069,31517,32522,32039,32038,31926,32057,31704,31706,31703,31939,31940,31713,40383,31683,31894,31685,31682,31981,\n31619,31620,32047,32051,31625,31626,31979,32012,31353,32558,31866,31865,32071,32076,31506,31585,32097,32100,32532,31827,31768,31769,31508,32357,31483,31916,32508,31530,31701,31587,31588,31709,31710,31596,32027,31616,31617,31614,31694,31717,31700,32199,32188,31778,32020,31839,31721,31335,31485,31337,31338,32008,31497,32010,32011,40291,32035,31774,31757,31754,31765,32107,32115,31481,32106,31343,31480,31346,31574,31579,31582,40292,32013,31502,31543,31544,32165,32576,32574,31552,31549,32173,31554,31557,31558,31563,31564,31569,31540,32186,31589,31586,32146,32153,31779,32149,32151,31716,31715,31966,31752,32368,32330,32220,31634,32223,31639,32228,31642,31633,32232,32218,31635,32241,32237,31647,31649,31643,32221,31645,31640,32245,31636,32253,32255,31665,31664,31662,32263,32261,31677,32267,31676,32271,31675,31733,32288,31737,32291,31736,31732,32294,31739,32298,31738,31741,31745,32259,31663,31743,32311,32313,31876,31873,31875,31648,31723,31674,31756,31809,31795,31696,31669,31735,32227,31641,34652,32125,32251,31638,32240,31680,31688,31613,31611,31799,31772,31770,32304,31657,32317,32246,32226,32285,32472,32286,32284,32376,32484,31655,31654,32371,32214,31631,31632,32229,32215,32216,32325,32496,31725,32324,31727,31724,31670,32276,31593,32382,32380,32452,32384,32386,32388,32390,32391,32395,32393,32392,32399,32397,32396,32400,32402,32403,32404,32406,32407,32468,32492,32408,32410,32409,32414,32418,32500,32420,32422,32421,32426,32428,32429,32434,32480,32432,32476,32433,32425,32381,32385,32419,32329,32331,31751,32488,32464,32460,32456,32448,32444,32415,31539,32507,31533,32511,31529,31520,31525,32520,31523,32525,31519,32529,32101,31826,32537,31759,32542,31836,40242,32072,32569,31498,32560,31495,31496,32562,31923,31538,32551,31537,32534,31829,32531,31828,31825,31764,31854,31762,31763,31815,40300,40357,31797,31720,31767,31718,31719,32347,31612,31686,32142,31690,31687,31678,31986,31679,31746,31340,32570,32167,31872,31781,32005,32515,32540,32543,32549,32587,32588,32589,32590,32768,32777,34636,32685,32642,32621,32593,32594,32592,32595,32792,\n34690,32626,32828,32831,32838,32607,32610,32611,32614,32832,32620,32622,32628,34447,32630,34449,32634,32648,32813,32790,32709,32713,32678,32673,32643,32644,32645,32646,32819,34466,34621,32649,32650,32654,32655,32656,32658,32660,32661,32662,32663,32664,32665,32667,32668,32669,32670,32677,32675,32679,32683,32703,32692,32715,32731,32755,32727,32723,32739,32743,32808,32751,32687,32691,32695,32699,32707,32711,32719,32735,32747,32759,32680,32682,32686,32684,32742,32693,32694,32696,32700,32714,32712,32718,32716,32883,32726,32729,32730,32728,32734,32737,32738,32744,32748,32750,32805,32764,32796,32802,32605,32599,32786,32816,32763,32765,32766,32814,32785,32784,32827,32618,32624,32606,32603,34479,32843,32846,34419,34486,32855,32853,32873,32871,34591,34425,32875,32859,32878,32867,34520,34519,32887,32886,33245,32904,32908,32911,34429,34592,32921,32920,32919,32918,32929,32928,32927,32926,32937,32936,32935,32934,32945,32944,32943,32942,32948,32947,32946,32953,32954,32957,32955,32961,32959,32958,32965,32964,32963,32962,32969,32967,32966,32973,32972,32971,32977,32976,32975,32974,32981,32980,32979,32985,32984,32983,32982,32989,32987,32986,32993,32992,32991,32990,32997,32996,32995,32994,33001,33000,32998,33005,33004,33002,33009,33008,33007,33006,33013,33011,33010,33016,33015,33014,33019,33018,33025,33023,33022,33027,33026,33030,33033,33034,33037,33041,33040,33039,33038,33045,33044,33043,33047,33046,33049,33051,33050,34543,33055,33054,34556,33060,33059,33065,33064,33063,33062,33069,33068,33067,33066,33072,33070,33077,33076,33074,33081,33078,33085,33084,33083,33082,33089,33088,33087,33086,33093,33092,33091,33090,33097,33096,33095,33101,33100,33099,33098,33105,33104,33103,33102,33109,33108,33107,33106,33113,33112,33111,33110,33117,33115,33114,33120,33119,33124,33123,33129,34319,33132,33131,33130,33135,33134,33139,33138,33137,33144,33141,33148,33147,33146,33145,33152,33151,33150,33149,33156,33158,33161,34299,34433,33163,34442,33168,33167,33443,33171,33170,33187,34535,33179,33178,33185,33182,33186,33189,33193,33192,33195,33194,33201,33198,\n33205,33203,33209,33207,33206,33212,33211,33210,33216,33215,33214,33221,33220,33219,33218,33225,33224,33222,33229,33228,33233,33232,33231,33230,33236,33237,33241,33244,33243,33242,33248,34525,33250,33251,33257,33256,33255,33254,33261,33260,33259,33258,33265,33262,33267,33266,33271,33270,33277,33274,33283,33279,33278,33282,33289,33287,33286,33293,33297,33300,33298,33304,33303,33308,33307,33312,33311,33317,33315,33321,33325,33324,33323,33328,33333,33337,33339,34557,33341,33345,33344,33349,33353,33352,33351,33357,33361,33358,33364,33362,33368,33372,33371,33370,33377,33375,33381,33383,33387,33389,33392,33396,33395,33394,33401,33400,33801,33419,33423,33429,33428,33426,33430,33432,33435,33434,33438,33157,33439,33446,33453,33451,33450,33455,33454,33465,33464,33462,33478,33485,33484,33483,33482,33913,33912,33489,33567,33493,33492,33491,33490,33501,33500,33499,33498,33513,33521,33529,33528,33523,33526,33537,33535,33540,33525,33538,33544,33545,33549,33496,33553,33563,33571,33577,33576,33581,33585,33589,33574,33597,33598,33602,33550,33617,33614,33546,33586,33607,33638,33609,33629,33632,33631,33630,33645,33639,33620,33653,33654,33657,33658,33666,33669,33670,33674,33673,33672,33671,33678,33677,33682,34216,34751,34764,33891,33486,33689,33698,33683,33701,33720,33667,33696,33675,33708,33687,32923,33730,33729,33728,32925,33738,33747,32932,33745,33751,33752,33763,32940,33761,33767,33771,33768,33779,33787,33783,33235,33795,33794,33792,33798,33797,33405,33810,33809,33808,33813,33403,33817,33827,33828,33407,33825,33833,33843,33841,33461,33459,33850,33844,33859,33858,33857,33856,33861,33652,33870,33869,33868,33883,33656,33881,33880,33887,33899,33897,33660,33662,33906,33900,33923,33693,33926,33924,33930,33928,33932,33939,33938,33937,33936,33943,33942,33947,33946,33945,33951,33950,33949,33954,33953,33952,33957,33956,33961,33960,33967,33965,33975,33974,33973,33972,33979,33978,33976,33982,33987,33986,33985,33984,33990,33988,33994,33992,33996,34000,34006,34005,34011,34014,34017,34022,34026,34030,34029,34033,34039,34043,34042,34046,34051,34050,\n34055,34054,34059,34057,34056,34062,34061,34067,34065,33716,34083,34080,34084,34091,34088,34095,34093,34102,34105,34110,34109,34115,34113,34112,34119,34117,34123,34125,34130,34129,34134,34133,34132,34139,34137,34136,34142,34146,34144,34151,34152,34159,34158,34163,34161,34160,34164,34170,34259,34173,34178,34182,34187,34190,34188,34194,34193,34192,32952,32950,33832,33509,33604,33643,33649,33508,33512,33514,33506,33515,34200,33524,33522,33530,33533,33532,33497,33495,33554,33494,33560,33558,33562,33566,33559,33625,33575,33580,33584,33582,33588,33590,33592,33635,33502,33628,33505,34224,33681,33680,33679,33665,33664,33663,33712,33715,33717,33692,33694,33854,34343,33706,33705,33704,33726,33725,32922,32924,33737,32931,33668,32933,33750,33699,32930,32939,33676,32941,33777,33234,33778,33789,33804,33800,33404,33402,33812,33408,33406,33458,33460,33866,33724,33862,33651,33876,33655,33888,33710,33659,34221,34226,34231,34227,34245,34244,34243,34253,34251,34265,34269,34271,34277,34276,34281,34278,34284,34283,34288,32688,34291,34295,32891,32862,32903,32852,32854,34320,34379,34326,34338,34350,34367,34381,32938,33409,33661,34412,32900,32861,32858,34421,32860,32876,32877,32912,32913,33164,33165,34437,34293,33169,33166,34168,32633,32631,32632,34454,32640,34465,32810,32811,34477,34720,32844,34482,34417,32856,32857,34450,32627,34490,34453,34492,34446,34682,32778,32591,34501,34694,34503,32689,34323,33128,34515,34410,32888,32889,34521,34409,33246,33247,34532,34176,33180,33181,34537,34397,33056,33057,34548,33390,34551,33281,33061,33058,33334,33335,34564,34286,34229,34571,34569,34570,34574,34582,34577,32915,34586,34598,34603,34601,34596,34618,32672,34624,32647,34626,32720,34575,34634,32674,32789,32612,32895,32896,34650,34472,34648,34470,34471,34664,32868,32884,32885,32917,32625,32623,34677,34680,34679,34721,34685,34686,34689,32598,32638,32596,32597,34698,34499,32767,32600,32601,32825,32824,32651,34459,32653,32639,32773,32774,34640,34639,34706,32708,33121,34676,33503,33252,33416,33412,33384,33268,33196,33444,33440,32909,32872,32851,32845,33536,\n32960,33052,33048,33188,33172,33176,33174,34668,34660,34656,32849,32863,33153,33184,33264,33032,32956,32635,32636,32865,32864,32847,34475,34715,32848,32869,33732,33709,33691,33721,33703,32803,33618,33685,33875,33684,33727,34734,33714,33688,33702,33700,33686,33695,33915,33488,33543,33606,33621,32842,32893,32898,32897,34302,33126,30675,30286,30663,34800,34799,34798,34797,34978,34985,36842,34894,34849,34830,34802,34801,34803,34808,35002,36899,34833,35039,35044,35045,34820,34817,34824,34821,35043,34831,34829,34839,36654,34837,36652,34841,34859,35020,34997,34918,34922,34885,34882,34856,34855,34854,34853,35032,36675,36830,34858,34857,34861,34868,34867,34865,34871,34870,34869,34876,34875,34874,34880,34879,34878,34877,34886,34888,34892,34896,34916,34903,34928,34944,34968,34940,34936,34952,34956,35017,34964,34900,34904,34908,34912,34920,34924,34932,34948,34960,34972,34891,34889,34893,34895,34949,34902,34901,34907,34911,34921,34923,34925,34927,35094,34933,34938,34937,34939,34941,34946,34945,34955,34959,34957,35013,34975,35004,35010,34814,34812,34827,34992,35026,34976,34974,34973,35028,34993,34994,35040,34825,34835,34813,34816,36686,35056,35053,36617,36628,36695,35068,35062,35080,35082,36800,36630,35086,35072,35091,35079,36723,36724,35098,35099,35448,35109,35113,35118,36634,36799,35124,35125,35126,35127,35132,35133,35134,35135,35140,35141,35142,35143,35148,35149,35150,35151,35153,35154,35155,35156,35163,35160,35162,35164,35166,35167,35168,35169,35170,35171,35172,35174,35175,35176,35177,35178,35180,35181,35182,35183,35184,35185,35186,35188,35189,35190,35191,35192,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35207,35208,35209,35211,35212,35213,35214,35215,35216,35218,35219,35221,35222,35223,35226,35227,35228,35230,35231,35234,35235,35239,35236,35243,35240,35244,35245,35246,35247,35248,35249,35250,35254,35255,35252,35258,35259,36748,35262,35263,36759,35265,35266,35268,35269,35270,35271,35272,35273,35274,35275,35277,35279,35280,35281,35283,35284,35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,\n35297,35298,35299,35300,35301,35302,35304,35305,35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317,35318,35319,35320,35322,35323,35325,35326,35329,35330,35338,36525,35335,35336,35337,35340,35341,35344,35345,35346,35347,35350,35351,35352,35353,35354,35355,35356,35357,35358,35360,35367,35364,36506,36638,35370,36645,35373,35374,35650,35378,35379,35394,36740,35386,35387,35388,35391,35395,35392,35396,35397,35402,35403,35404,35407,35408,35410,35412,35414,35415,35417,35418,35419,35421,35422,35423,35424,35425,35426,35427,35428,35429,35431,35432,35433,35436,35437,35438,35439,35441,35440,35444,35449,35450,35451,35453,36734,35459,35458,35460,35461,35462,35463,35464,35465,35466,35467,35468,35471,35474,35475,35478,35479,35480,35483,35490,35486,35487,35491,35492,35494,35495,35496,35500,35505,35507,35509,35510,35513,35514,35517,35518,35520,35522,35524,35528,35529,35530,35533,35536,35540,35546,36766,35544,35548,35549,35552,35556,35557,35558,35560,35564,35567,35569,35571,35573,35577,35578,35579,35580,35582,35584,35590,35594,35592,35597,35601,35602,35603,35604,35605,36008,35626,35630,35632,35633,35635,35639,35637,35642,35643,35647,35359,35646,35655,35656,35658,35659,35662,35663,35668,35669,35671,35687,35688,35689,35690,35691,36120,36121,35692,35774,35696,35697,35698,35699,35704,35705,35706,35707,35716,35724,35732,35733,35730,35735,35740,35742,35745,35728,35747,35749,35748,35752,35701,35756,35770,35778,35780,35781,35784,35788,35792,35783,35800,35807,35811,35759,35823,35819,35755,35795,35816,35848,35814,35832,35837,35838,35839,35850,35847,35826,35858,35857,35862,35861,35869,35874,35873,35877,35878,35879,35880,35881,35882,35885,36423,36956,36973,36094,35695,35894,35901,35892,35906,35924,35876,35903,35884,35914,35896,35130,35935,35936,35937,35128,35943,35950,35137,35952,35954,35961,35966,35145,35968,35970,35974,35977,35982,35990,35986,35442,35998,35999,36001,36003,36004,35608,36015,36016,36017,36020,35610,36024,36030,36037,35614,36032,36040,36046,36048,35664,35666,36055,36053,36062,36063,36064,36065,36068,35859,36075,\n36076,36077,36086,35863,36088,36089,36090,36102,36104,35867,35865,36111,36109,36126,35898,36131,36133,36135,36137,36141,36142,36143,36144,36145,36146,36147,36150,36151,36152,36154,36155,36156,36159,36160,36161,36164,36165,36168,36169,36170,36172,36178,36179,36180,36181,36182,36183,36185,36187,36190,36191,36192,36193,36195,36197,36199,36201,36205,36209,36211,36212,36214,36219,36224,36227,36231,36235,36236,36240,36242,36246,36247,36251,36254,36255,36258,36259,36262,36264,36265,36267,36268,36270,36272,35921,36286,36289,36293,36294,36297,36298,36300,36307,36312,36315,36316,36318,36320,36321,36322,36324,36326,36332,36335,36336,36339,36340,36341,36342,36344,36345,36347,36351,36353,36354,36361,36362,36363,36366,36368,36369,36373,36375,36466,36380,36383,36387,36390,36395,36397,36399,36400,36401,35157,35159,36041,35712,35809,35852,35854,35713,35717,35723,35715,35722,36403,35729,35731,35739,35736,35737,35700,35702,35763,35703,35765,35767,35771,35775,35766,35828,35782,35785,35789,35791,35793,35799,35797,35842,35711,35833,35708,36431,35886,35887,35888,35870,35871,35872,35917,35922,35920,35899,35897,36059,36549,35909,35910,35911,35931,35932,35131,35129,35944,35138,35875,35136,35955,35908,35139,35146,35883,35144,35984,35443,35983,35996,36013,36009,35609,35611,36021,35613,35615,35667,35665,36071,35933,36067,35860,36085,35864,36097,35919,35868,36426,36429,36438,36435,36448,36449,36450,36456,36458,36468,36472,36478,36480,36481,36484,36487,36489,36490,36493,34899,36498,36502,35102,35069,35110,35063,35061,36524,36585,36530,36542,36554,36573,36589,35147,35612,35866,36619,35105,35070,35065,36626,35071,35085,35084,35117,35116,35369,35368,36642,36496,35372,35375,36377,34842,34844,34843,36663,34851,36668,35023,35022,36680,36923,35055,36691,36622,35067,35066,36659,34840,36699,36656,36697,36655,36891,34991,34804,36704,36903,36710,34898,36527,35332,36721,36614,35097,35096,36730,36615,35455,35454,36735,36385,35385,35384,36746,36603,35261,35260,36751,35599,36756,35484,35264,35267,35543,35542,36767,36495,36433,36776,36778,36777,36781,36790,36786,\n35122,36796,36806,36808,36810,36802,36825,34883,36827,34860,36833,34931,36780,36838,34881,34998,34823,36852,35104,36856,36859,36677,36853,36679,36678,36869,35078,35093,35092,35120,34834,34836,36880,36885,36886,36930,36888,36895,36892,34805,34845,34807,34806,36907,36706,34979,34811,34810,35034,35035,34864,36666,34862,34852,34981,34980,36846,36847,36913,34919,35324,36881,35710,35457,35621,35617,35589,35473,35401,35649,35645,35112,35081,35064,35054,35101,35741,35165,35257,35253,35393,35377,35381,35383,36873,36865,36861,35058,35076,35363,35389,35469,35237,35161,34848,34847,35074,35075,35060,36682,36920,35059,35077,35941,35913,35900,35929,35912,35015,35822,35890,36078,35891,35930,36941,35923,35895,35905,35907,35889,35904,36118,35693,35750,35817,35825,35050,35049,36882,34815,34809,35025,34996,36510,35100,35107,36857,36922,36511,35334,36997,36998,36999,37000,37001,37002,37003,37005,37006,37007,37018,37009,37011,37012,37013,37016,37017,37020,37022,37021,37025,37026,37028,37029,37030,37033,37034,37037,37038,37040,37041,37042,37045,37046,37050,37053,37054,37055,37059,37060,37065,37066,37067,37068,37069,37070,37072,37073,37074,37076,37077,37078,37080,37081,37082,37084,37085,37088,37089,37092,37093,37094,37095,37096,37097,37098,37099,37101,37102,37105,37106,37109,37111,37113,37117,37121,37123,37125,37126,37128,37129,37130,37134,37052,37142,37145,37139,37143,37144,37064,37024,37138,37153,37154,37155,37156,37157,37158,37160,37161,37162,37164,37175,37165,37166,37168,37169,37172,37173,37177,37178,37179,37180,37181,37182,37183,37185,37186,37190,37193,37194,37195,37197,37198,37202,37207,37205,37210,37211,37212,37213,37214,37218,37221,37222,37223,37224,37234,37228,37380,37225,37226,37227,37229,37231,37233,37235,37236,37237,37240,37244,37245,37246,37247,37248,37249,37250,37252,37253,37254,37257,37262,37264,37266,37274,37277,37279,37280,37283,37284,37285,37289,37294,37276,37296,37292,37298,37302,37305,37309,37314,37318,37322,37326,37330,37334,37338,37342,37345,37349,37354,37358,37362,37366,37370,37374,37378,37382,37386,37389,37393,37397,\n37401,37406,37410,37297,37299,37301,37306,37310,37311,37313,37315,37319,37323,37327,37329,37333,37336,37337,37339,37051,37346,37124,37353,37355,37359,37363,37365,37369,37372,37373,37375,37377,37381,37390,37394,37395,37398,37400,37208,37405,37275,37023,37459,37447,37462,37446,37441,37442,37444,37443,37448,37449,37451,37452,37455,37440,37460,37437,37438,37439,37473,37137,37150,37291,37480,37486,37485,37481,38065,37673,37515,37660,38058,38310,37504,37498,37524,37691,37690,38276,37654,37528,37526,37635,37510,37646,37611,38319,37765,37559,37512,37507,37521,37511,37594,37578,37514,37768,37527,37517,37771,38057,37536,37535,37534,37533,37539,37537,37544,37542,37541,37548,37546,37552,37550,37549,37556,37553,37558,37557,37562,37567,37566,37565,38098,37760,37579,38336,37583,37580,37577,37584,37581,37591,37604,37586,37585,37596,38326,37588,37593,37592,37597,37600,37601,37608,37605,37610,37609,37614,37620,37619,37618,37624,37623,37621,37628,37627,37626,37631,37629,37633,37643,37641,37648,37656,37522,37684,40107,37506,38073,37500,37499,37530,37501,37525,37674,37736,37612,37589,37616,37590,37748,37576,37638,37572,37573,37570,37569,37762,37681,37509,37773,37519,37665,37520,37532,37529,39046,37850,37851,38452,38263,40505,38042,38837,38441,38264,38265,37815,37816,37803,38102,37825,37826,38040,37852,37855,37858,38419,38412,38104,38105,40457,38271,38033,38437,37873,38250,37916,37921,37806,37807,37952,40521,40429,37956,40131,38226,37951,37993,37957,37958,37963,37960,37973,38182,37974,37981,40513,37979,40445,37698,38114,37980,37982,38164,37709,38004,38023,38005,37882,39743,39514,39585,37817,38189,38012,38014,37954,38024,38026,37994,38056,37853,37854,38406,38043,38044,38255,37922,38046,40475,37847,38006,37711,38063,37714,37717,37716,37720,37725,37724,38079,38086,38081,37967,38090,37969,37792,37791,38094,38041,38096,37587,38097,38195,38137,38108,37965,38116,38130,38192,37823,38103,38140,39919,40468,37859,40487,38148,37784,37790,38156,37805,40530,37985,38207,37986,38027,38285,38028,38174,37710,38175,38176,38083,37780,37794,38183,37781,37919,\n38095,37869,38092,40465,37870,40462,38139,37819,37818,38187,37795,37821,37820,38134,38166,37683,40155,38287,38029,38030,38202,37934,38199,38214,37931,38216,37953,40437,37699,37774,38228,38225,38000,38306,38238,38221,37948,37947,37700,37701,39942,38243,37776,38300,37663,38069,37721,37786,37785,37800,37880,37812,37797,37814,37813,40453,37884,38350,37962,38018,37887,37505,37661,37503,37502,38162,37686,37998,38159,38295,37995,38293,37955,40425,37943,38234,38246,37657,38235,37516,37658,37513,37769,37772,37777,37992,38165,37697,37732,37740,38316,37671,37670,38278,37696,37741,37744,38331,37747,37752,37751,37754,37753,37757,37735,38341,37787,38274,37961,38272,38270,37885,37886,38121,38464,37924,39954,38831,38370,37827,38375,37838,38378,37835,37828,38382,38372,37834,38397,38393,37846,37844,37842,38377,37840,37837,38401,37833,38409,38407,37914,37913,38416,38418,37860,38420,37861,38424,37862,37895,38431,37896,37902,37900,38443,37903,38448,37904,37899,38453,37909,38413,37910,37907,37911,38467,38465,38035,38038,38036,37845,37893,37863,39038,38845,38482,38484,38486,38488,38490,38494,38496,39408,38990,39326,38869,38502,38505,38873,38536,38877,38880,39051,38509,38507,38511,39228,38515,38516,38519,38520,38523,38525,38533,38531,38534,38535,38538,39351,38893,39231,38553,38554,38561,38559,38568,38575,38576,38577,38591,38574,39238,39833,38601,38582,38974,39196,38606,38607,38996,38976,39005,38618,38619,39342,39360,38626,38629,38630,39186,38635,38709,38637,38638,38636,39011,38647,38696,39346,38659,38656,38662,39247,39249,38664,38663,39014,38941,38678,39067,38682,38679,38681,39055,39204,38732,38697,38530,38529,38528,38702,38703,38586,38711,38713,38734,38735,38736,38738,38739,38740,38744,38745,38747,38748,38751,38752,38753,38755,38756,38757,38760,38761,38764,38765,38767,38768,38769,38771,38775,38776,38773,38784,38785,38781,38971,38797,39181,38919,38799,38800,38802,38927,38809,38807,38808,38811,38812,38815,38816,38818,38819,38823,38824,40023,39282,38835,38839,38840,38841,38842,38844,38847,38849,38853,38857,38858,38860,38868,38866,38870,38874,\n38772,38879,38881,38883,38886,38887,38890,38780,38896,38908,38917,38920,38925,38928,38930,38932,38936,38940,38944,38948,39369,38960,38963,38962,38965,38968,38865,38585,39212,39175,37915,38864,38998,39001,39002,39081,39006,39008,38937,39017,38934,38793,38789,38904,38905,38595,38730,38592,38570,38573,38569,39265,38589,38728,38901,38900,38583,38579,38907,38560,38558,39199,38557,39036,39044,38543,38545,38547,39027,38565,38788,39363,39052,38957,38729,39113,38617,38616,38650,38649,38677,39065,38942,38796,38794,38598,38915,38597,39291,38594,38733,38700,38590,39079,39077,38608,38609,39091,38640,39089,38641,38644,38639,39101,38642,39098,38669,39105,38646,38670,38673,39108,38718,39116,38725,39120,39135,39031,39030,39127,38978,39133,39134,39171,39136,39032,39114,38724,38723,39087,39145,38614,38615,39153,39155,39056,39057,38643,39059,39162,38674,39062,39242,39187,39192,39193,38605,38604,38689,38690,38687,38686,38492,38987,39207,39213,38988,39217,38521,39221,38517,38512,39222,38514,38513,38550,38549,39235,38581,38599,38603,39414,39240,39382,38480,39224,39223,39208,38495,38566,38587,39330,38563,38527,39294,37926,39280,39281,39285,39053,39054,39307,39289,39292,38950,39296,38685,39300,38651,38622,38621,39264,39312,39313,38500,38497,38499,38498,39269,39274,39270,39266,38620,38623,38654,38653,38506,39276,38542,39353,39354,39357,38593,38625,38624,38655,38658,38541,39375,38539,38504,38977,38524,38493,38489,38485,38481,38483,39384,38544,38508,38510,39277,39398,39374,39377,39314,39319,38862,38863,39320,39323,39334,39338,38951,38827,39287,39431,39647,38634,39478,39507,38600,39705,39876,39420,39425,38710,38707,38706,39434,39419,39418,39189,38666,39015,38668,39063,38676,38684,39440,39584,39688,39499,39612,39573,39448,39449,39471,39656,39509,39479,39441,39745,39588,39472,39597,39455,39532,39456,39592,39467,39498,39494,39459,39460,39552,39451,39576,39541,39477,39483,39442,39443,39523,39524,39519,39558,39537,39538,39468,39543,39551,39767,39452,39553,39555,39652,39755,39566,39750,39570,39636,39464,39454,39462,39480,39513,39522,39521,39582,39759,\n39453,39561,39516,39600,39598,39488,39463,39465,39605,39609,39466,39620,39618,39617,39621,39529,39632,39469,39623,39628,39470,39635,39473,39637,39641,39474,39475,39481,39654,39482,39659,39484,39657,39661,39485,39450,39790,39530,39781,39487,39676,39546,39671,39772,39677,39679,39855,39491,39690,39689,39495,39698,39697,39500,39501,39497,39702,39502,39504,39505,39457,39506,39706,39445,39446,39565,39564,39569,39568,39562,39580,39724,39559,39557,39556,39674,39673,39736,39675,39681,39742,39710,39709,39714,39713,39718,39717,39722,39721,39761,39723,39730,39729,39734,39733,39774,39735,39489,39518,39785,39490,39572,39571,39793,39670,39798,39527,39802,39447,39808,39545,39812,39548,39510,39188,39883,39821,39884,39239,39890,39388,38912,38913,39831,39237,38910,39386,39836,38911,39826,38708,39846,39540,39851,39684,39493,39492,39859,39692,39863,39496,39864,39594,39871,39577,39872,39458,39415,39534,39243,39416,39183,39244,38921,39184,39893,38918,38185,39907,38929,39912,38926,40414,38449,37905,38379,37836,38167,37868,38403,37831,38390,37865,38050,37879,37938,38460,37856,38469,38400,38380,38446,40061,38438,38440,39960,40073,37848,37849,39951,38368,37830,37829,38385,38436,38367,38366,38477,40085,37891,38478,37897,37892,37811,38427,37789,39964,39966,40041,39970,39968,39974,39972,39971,39975,39977,39978,39979,39981,39982,39986,39984,39983,39990,39988,39987,40057,40081,39994,39992,39993,39996,40000,40089,40006,40004,40005,40008,40014,40013,40016,40069,40018,40065,40017,40009,39965,39969,39999,38833,38832,38956,38955,38830,40019,37925,40077,40053,40049,40045,40037,40033,39995,37728,40098,37726,40102,37722,37715,37718,40109,37712,40112,37708,40116,38232,38001,38055,40129,38052,40133,38003,40138,38173,38201,40160,38820,38813,39824,39248,38805,39542,38633,38632,39422,39741,39915,40145,37693,40151,38280,37688,37687,40159,38078,37729,40142,37730,37942,40122,37999,37941,37944,38020,37946,37937,38303,38299,37930,37988,39935,37929,37978,38218,37888,37949,37890,37889,39927,37878,38269,37875,37874,37867,38142,37866,39086,39159,39092,38985,38983,38984,\n38981,39130,38979,38980,38721,39028,38719,38720,39109,39110,38611,39151,38613,38610,37918,39082,37508,40176,38324,38031,37959,37783,40249,40190,38503,38826,40201,39367,37782,37779,37801,37822,40221,26832,27328,40229,40239,40246,40164,39245,39180,40259,31500,31503,32156,31501,40276,32556,40280,32014,31805,32029,31810,31818,31812,31811,31814,31813,40304,32359,32162,31583,32160,31580,40312,31575,31570,40317,40326,40327,40331,31331,40335,31352,40336,32075,40345,32078,32088,32087,40355,32091,32096,32095,40361,32355,40367,31509,32109,40374,40372,31786,31729,32367,31731,31728,31607,32280,31672,31608,31714,31997,31712,31711,31597,32128,32023,31594,31791,31851,32017,31792,32083,32079,32031,40342,31808,31807,31822,40286,32033,31823,40391,31864,40395,31835,32548,32289,31776,31755,31761,31858,31900,31758,32539,40413,40124,37940,37939,40421,38022,37936,37935,37989,38297,40433,37990,37928,37927,40441,38220,37976,37975,40449,38010,37877,37876,38048,38267,38049,38145,40461,40469,38146,37857,40472,31884,32053,32052,32584,37809,37808,40493,38150,40497,37871,40501,38258,37799,37798,40506,38016,37972,37971,40517,38210,37933,37932,40522,37984,40529,38289,37997,37996,38170,22683,23598,40542,40543,40544,40545,40547,40548,40549,40551,40552,40553,40555,40556,40557,40559,40560,40561,40563,40564,40565,40567,40568,40569,40571,40572,40573,40575,40576,40577,40579,40580,40581,40583,40584,40585,40587,40588,40589,40591,40592,40593,40595,40596,40597,40599,40600,40601,40603,40605,40606,40608,40609,40612,40615,40618,40621,40624,40627,40630,40633,40636,40639,40642,40645,40648,40654,40655,40656,40657,40658,40659,40660,40661,40662,40663,40664,40665,40666,40667,40668,40669,40670,40671,40672,40673,40674,40675,40676,40677,40678,40679,40680,40681,40682,40683,40684,40685,40686,40687,40688,40689,40690,40692,40693,40694,40695,40696,40698,40699,40701,40702,40703,40704,40705,40706,40708,40711,40712,40716,40718,40719,40722,40724,40727,40728,40731,40732,40735,40738,40740,40743,40745,40746,40747,40749,40754,40755,40756,40758,40759,40760,40763,40765,40766,40767,40768,\n40769,40773,40774,40775,40780,40782,40787,40789,40794,40797,40799,40800,40801,40741,40803,40804,40806,40809,40810,40814,40815,40816,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40831,40832,40834,40835,40836,40837,40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849,40851,40852,40854,40855,40856,40858,40859,40862,40863,40864,40866,40868,40870,40872,40873,40876,40880,40884,40888,40889,40892,40893,40897,40901,40905,40906,40907,40909,40911,40914,40916,40917,40918,40922,40923,40924,40925,40927,40929,40930,40931,40934,40935,40939,40940,40951,40954,40957,40960,40903,40963,40964,40966,40971,40976,40742,40991,40995,41014,40902,41029,41031,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41061,41062,41063,41064,41065,41066,41067,41068,41069,41070,41071,41072,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41087,41089,41090,41091,41093,41094,41095,41096,41097,41098,41099,41101,41102,41103,41104,41105,41106,41107,41108,41109,41110,41111,41112,41113,41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125,41126,41127,41128,41129,41130,41131,41132,41133,41134,41135,41136,41137,41138,41139,41140,41142,41143,41144,41145,41146,41147,41150,41151,41153,41154,41155,41156,41157,41158,41159,41162,41163,41164,41166,41167,41168,41169,41170,41174,41175,41177,41178,41179,41181,41182,41183,41184,41185,41186,41187,41189,41190,41191,41193,41194,41195,41196,41197,41198,41200,41202,41203,41204,41206,41207,41208,41210,41211,41213,41214,41215,41216,41217,41218,41222,41223,41226,41227,41230,41231,41232,41233,41234,41235,41236,41237,41238,41239,41241,41242,41243,41244,41246,41247,41248,41250,41251,41252,41254,41255,41256,41257,41259,41260,41263,41264,41267,41268,41270,41271,41272,41273,41275,41276,41277,41279,41282,41284,41291,41292,41293,41294,41295,41296,41300,41301,41303,41304,41306,41307,41308,41309,41310,41311,41312,41313,41314,41315,41316,41317,41318,41321,41322,41324,41328,41329,41331,41332,41334,41335,41336,41337,41338,41339,41340,\n41341,41342,41343,41344,41345,41346,41347,41348,41349,41350,41352,41353,41354,41355,41356,41357,41358,41361,41362,41363,41364,41366,41368,41372,41376,41379,41380,41381,41382,41383,41384,41386,41387,41388,41390,41392,41394,41395,41396,41400,41404,41408,41412,41413,41414,41416,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41433,41434,41435,41436,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41449,41450,41451,41452,41453,41455,41456,41458,41459,41460,41461,41463,41464,41465,41466,41467,41468,41469,41470,41471,41475,41478,41479,41481,41482,41484,41485,41486,41489,41491,41492,41494,41495,41496,41497,41498,41500,41501,41502,41503,41504,41505,41506,41509,41510,41511,41512,41513,41515,41516,41517,41521,41522,41523,41524,41527,41530,41531,41532,41533,41538,41544,41545,41546,41547,41548,41550,41551,41552,41554,41559,41561,41562,41563,41564,41567,41568,41570,41571,41572,41573,41574,41575,41577,41579,41580,41582,41589,41592,41594,41595,41597,41599,41600,41601,41602,41604,41605,41607,41608,41609,41610,41611,41613,41614,41615,41616,41617,41619,41620,41621,41622,41623,41624,41626,41627,41628,41629,41630,41631,41634,41635,41636,41637,41638,41641,41643,41644,41647,41652,41653,41654,41655,41656,41659,41660,41663,41665,41666,41667,41669,41670,41673,41674,41676,41677,41678,41679,41680,41681,41682,41683,41685,41686,41687,41688,41689,41691,41692,41693,41696,41701,41702,41703,41705,41707,41711,41712,41715,41716,41718,41722,41725,41727,41728,41730,41734,41738,41742,41743,41747,41752,41753,41756,41758,41759,41762,41763,41764,41765,41766,41767,41768,41769,41771,41772,41773,41774,41775,41776,41777,41779,41780,41781,41782,41783,41784,41785,41787,41788,41789,41790,41791,41793,41794,41795,41797,41798,41799,41800,41801,41802,41803,41804,41805,41807,41808,41810,41814,41817,41818,41819,41821,41823,41824,41825,41826,41828,41830,41834,41837,41838,41840,41841,41842,41843,41844,41845,41846,41847,41849,41850,41851,41852,41854,41855,41856,41857,41858,41859,41861,41862,41863,41866,41867,41868,41870,41871,41872,\n41873,41876,41878,41879,41881,41882,41883,41884,41885,41886,41887,41888,41890,41891,41893,41894,41897,41898,41899,41900,41901,41902,41904,41906,41907,41910,41911,41912,41914,41916,41919,41920,41921,41922,41923,41925,41927,41928,41930,41931,41932,41933,41934,41935,41937,41939,41940,41944,41946,41947,41948,41949,41951,41952,41954,41957,41959,41960,41962,41963,41964,41965,41967,41968,41971,41972,41975,41976,41978,41979,41980,41981,41982,41983,41987,41988,41989,41994,41998,42002,42006,42009,42014,42025,42030,42038,42039,42041,42042,42044,42045,42046,42051,42053,42055,42060,42061,42062,42067,42070,42072,42074,42077,42082,42094,42098,42101,42111,42119,42124,42126,42129,42132,42133,42141,42146,42150,42152,42157,42159,42160,42169,42171,42177,42179,42187,42192,45641,42207,42202,42206,42209,42217,42219,42221,42226,42227,42228,42229,42231,42232,42234,42238,42242,42245,42248,42249,42196,42251,42253,42254,42256,42257,42258,42260,42262,42263,42264,42266,42267,42269,42271,42275,42279,42281,42283,42286,42289,42290,42293,42299,42304,42306,42309,42310,42320,42321,42322,42324,42327,42328,42330,42333,42335,42339,42348,42349,42352,42353,42355,42358,42359,42360,42361,42362,42363,42364,42365,42368,42369,42373,42376,42377,42378,42381,42383,42385,42389,42392,42394,42395,42397,42398,42399,42402,42403,42404,42405,42406,42407,42410,42411,42413,42414,42415,42416,42419,42422,42427,42428,42433,42434,42437,42438,42440,42441,42442,42445,42446,42448,42449,42451,42452,42453,42456,42457,42459,42460,42461,42464,42465,42466,42469,42473,42474,42476,42479,42481,42484,42488,42492,42494,42496,42504,42506,42508,42510,42512,42513,42515,42516,42519,42520,42521,42524,42525,42526,42528,42530,42531,45650,42535,42538,42542,42543,42544,42546,42548,42552,42555,42559,42560,42561,42562,42563,42564,42565,42566,42567,42568,42569,42570,42571,42572,42573,42575,42576,42577,42578,42580,42581,42582,42583,42584,42586,42587,42588,42589,42590,42591,42592,42593,42594,42595,42597,42598,42600,42601,42603,42604,42605,42607,42608,42609,42610,42612,42613,42615,42616,42617,42618,42619,\n42620,42621,42622,42623,42624,42625,42626,42627,42628,42629,42630,42631,42632,42633,42634,42635,42636,42637,42638,42639,42640,42641,42642,42643,42644,42645,42646,42647,42648,42649,42650,42651,42652,42655,42656,42657,42658,42659,42660,42663,42664,42665,42667,42668,42669,42670,42671,42672,42675,42676,42678,42680,42681,42682,42683,42684,42687,42688,42689,42691,42692,42693,42695,42696,42697,42698,42699,42700,42701,42703,42704,42705,42708,42709,42710,42711,42712,42714,42715,42716,42718,42719,42720,42722,42723,42724,42725,42728,42729,42730,42731,42732,42735,42736,42739,42740,42743,42744,42745,42746,42747,42748,42749,42750,42751,42752,42753,42755,42756,42758,42759,42760,42762,42763,42764,42766,42767,42769,42770,42771,42774,42775,42778,42779,42780,42782,42783,42785,42786,42787,42789,42790,42792,42798,42799,42803,42804,42805,42806,42810,42811,42813,42814,42815,42816,42818,42819,42820,42821,42822,42823,42824,42825,42826,42828,42829,42830,42832,42833,42838,42839,42841,42842,42843,42844,42846,42848,42849,42850,42851,42852,42853,42854,42855,42856,42857,42858,42860,42861,42862,42863,42864,42865,42866,42868,42869,42870,42871,42873,42876,42878,42882,42886,42887,42890,42891,42892,42893,42894,42895,42896,42898,42900,42902,42903,42904,42906,42910,42914,42918,42922,42925,42926,42930,42931,42932,42933,42934,42935,42936,42937,42938,42939,42940,42941,42942,42943,42944,42945,42947,42948,42949,42950,42951,42952,42953,42954,42955,42956,42957,42958,42959,42960,42961,42965,42966,42967,42968,42970,42971,42972,42973,42974,42975,42976,42977,42978,42979,42980,42981,42982,42983,42987,42988,42992,42993,42996,42997,42998,42999,43001,43003,43004,43006,43008,43009,43010,43011,43012,43013,43014,43016,43017,43018,43019,43020,43021,43023,43025,43026,43029,43030,43031,43032,43033,43035,43038,43039,43040,43045,43046,43048,43055,43056,43057,43058,43060,43061,43062,43064,43066,43067,43071,43072,43073,43075,43078,43079,43080,43082,43083,43084,43085,43086,43087,43089,43092,43094,43101,43103,43104,43106,43107,43109,43112,43113,43114,43115,43117,43118,43119,43120,\n43121,43123,43124,43125,43127,43129,43130,43131,43132,43133,43134,43135,43136,43138,43139,43140,43141,43142,43143,43144,43148,43149,43150,43151,43153,43155,43158,43164,43165,43166,43167,43170,43171,43174,43175,43176,43177,43180,43181,43184,43185,43187,43188,43189,43190,43191,43192,43193,43194,43195,43196,43197,43201,43202,43205,43206,43210,43211,43212,43213,43215,43217,43219,43226,43228,43230,43232,43235,43236,43238,43241,43244,43248,43251,43252,43255,43265,43266,43267,43268,43270,43271,43272,43275,43276,43277,43278,43279,43281,43282,43283,43284,43285,43286,43287,43289,43290,43291,43292,43293,43294,43295,43297,43298,43299,43300,43301,43302,43303,43304,43305,43307,43308,43309,43311,43312,43313,43314,43315,43317,43318,43320,43322,43324,43327,43328,43329,43331,43333,43336,43337,43338,43340,43342,43344,43348,43349,43351,43352,43353,43354,43355,43356,43357,43358,43359,43360,43361,43363,43364,43366,43367,43368,43369,43370,43371,43372,43373,43375,43376,43379,43380,43382,43385,43386,43387,43388,43390,43391,43392,43393,43395,43396,43397,43398,43399,43400,43402,43404,43405,43407,43408,43409,43412,43413,43414,43415,43416,43418,43419,43420,43424,43426,43427,43430,43431,43432,43433,43434,43435,43437,43439,43440,43442,43443,43444,43445,43446,43447,43449,43454,43455,43456,43458,43459,43461,43462,43464,43466,43467,43469,43471,43472,43474,43475,43477,43478,43479,43482,43483,43486,43487,43488,43490,44309,44321,43491,44311,43496,43500,43504,43508,43513,43516,43529,43532,43539,43540,43544,43545,43548,43549,43550,43551,43555,43557,43564,43565,43566,43567,43572,43576,43578,43581,43584,43596,43600,43605,43611,43619,43628,43630,43631,43637,43638,43645,43648,43652,43658,43659,43661,43666,43671,43673,43679,43681,43687,43698,43699,43703,43707,43712,43718,43720,43724,43726,43727,43730,43732,43733,43735,43737,43739,43743,43748,43750,43751,43752,43753,43754,43757,43759,43760,43761,43762,43763,43765,43766,43767,43769,43770,43772,43774,43778,43782,43784,43787,43791,43792,43796,43807,43809,43812,43823,43824,43825,43827,43828,43831,43833,43834,43836,\n43838,43852,43853,43854,43856,43857,43858,43859,43862,43863,43864,43865,43868,43869,43872,43873,43876,43879,43880,43882,43884,43888,43892,43894,43895,43897,43898,43899,43900,43902,43903,43906,43907,43908,43909,43910,43911,44411,43914,43917,43919,43922,43931,43935,43939,43941,43943,43946,43948,43952,43954,43956,43960,43963,43965,43971,43974,43991,44003,44005,44007,44009,44010,44012,44013,44014,44017,44020,44021,44023,44024,44025,44026,44027,44029,44032,44034,44037,44038,44042,44044,44045,44048,44052,44057,44065,44073,44077,44083,44086,44092,44093,44099,44100,44101,44104,44116,44120,44124,44126,44139,44142,44156,44164,44166,44167,44169,44173,44190,44205,44216,44233,44237,44261,44263,44269,44272,44277,44278,44283,44287,44288,44290,44302,44304,44310,44312,44327,44330,44340,44350,44353,44354,44357,44359,44381,44396,44403,44419,44421,44430,44431,44432,44433,44434,44435,44437,44438,44439,44440,44441,44442,44443,44444,44445,44446,44447,44449,44450,44451,44453,44457,44459,44460,44461,44462,44463,44464,44465,44467,44470,44472,44474,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44486,44487,44488,44489,44490,44491,44492,44493,44494,44495,44496,44497,44499,44500,44502,44504,44505,44508,44510,44512,44513,44514,44515,44516,44517,44518,44520,44521,44522,44528,44529,44530,44532,44533,44534,44535,44536,44537,44538,44540,44542,44543,44544,44545,44546,44547,44548,44549,44550,44551,44552,44553,44554,44555,44556,44557,44558,44559,44561,44562,44563,44565,44569,44570,44571,44572,44573,44575,44576,44578,44580,44581,44582,44583,44584,44586,44587,44588,44589,44590,44591,44592,44593,44595,44596,44597,44599,44600,44601,44603,44604,44605,44606,44607,44608,44613,44617,44618,44621,44622,44623,44624,44625,44627,44629,44630,44631,44632,44634,44635,44636,44637,44638,44639,44641,44642,44644,44647,44649,44650,44651,44652,44654,44655,44656,44657,44658,44659,44660,44661,44662,44663,44665,44667,44668,44671,44673,44675,44679,44686,44687,44688,44690,44693,44696,44698,44703,44705,44709,44710,44715,44717,44718,44723,44724,44725,44729,44731,44732,\n44733,44735,44736,44743,44745,44747,44752,44756,44759,44764,44766,44770,44772,44775,44777,44784,44785,44791,44792,44793,44795,44797,44800,44803,44805,44809,44812,44814,44816,44817,44818,44819,44820,44823,44830,44837,44851,44855,44861,44864,44888,44908,44913,44914,44919,44920,44924,44925,44926,44927,44928,44929,44930,44931,44932,44933,44935,44936,44937,44939,44940,44941,44943,44944,44945,44946,44947,44948,45089,44952,44953,44956,44960,44964,44968,44951,45093,44950,44954,44955,44959,44958,44962,44963,44966,44967,44970,44971,44973,44974,44975,44976,44977,44978,44981,44982,44985,44986,44989,44990,44992,44993,44994,44996,44997,45001,45002,45004,45005,45006,45007,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45020,45021,45022,45023,45025,45027,45029,45031,45032,45033,45034,45035,45036,45037,45038,45040,45042,45043,45044,45045,45046,45047,45048,45052,45054,45056,45058,45059,45061,45063,45065,45068,45070,45071,45076,45080,45084,45088,45090,45092,45094,45095,45097,45099,45101,45104,45108,45112,45116,45120,45122,45126,45127,45129,44999,45131,45133,45135,45137,45146,45148,45149,45160,45164,45166,45168,45172,45174,45176,45178,45180,45183,45184,45186,45187,45190,45191,45194,45195,45198,45199,45200,45203,45204,45207,45210,45267,45279,45271,45219,45222,45285,45229,44998,44949,45011,45223,45226,45211,45275,45215,45214,45213,45270,45269,45264,45263,45286,45287,45288,45289,45290,45291,45292,45293,45294,45296,45297,45298,45300,45301,45302,45304,45305,45306,45307,45308,45309,45452,45427,45311,45313,45317,45321,45325,45329,45330,45333,45334,45316,45314,45315,45319,45318,45322,45323,45326,45327,45331,45336,45337,45338,45341,45342,45343,45345,45346,45349,45350,45353,45354,45357,45358,45359,45360,45361,45365,45366,45368,45369,45370,45371,45373,45374,45376,45377,45378,45380,45381,45382,45383,45384,45385,45386,45387,45389,45391,45392,45394,45396,45397,45398,45399,45401,45402,45403,45404,45405,45407,45408,45409,45410,45411,45413,45415,45417,45419,45421,45424,45426,45428,45430,45431,45433,45438,45441,45445,45449,45451,45453,45455,\n45457,45460,45462,45464,45466,45469,45473,45477,45481,45483,45485,45487,45362,45492,45494,45496,45498,45500,45502,45507,45512,45513,45525,45527,45533,45535,45537,45539,45541,45545,45547,45549,45550,45551,45554,45555,45558,45559,45562,45565,45566,45569,45570,45571,45574,45575,45576,45578,45581,45582,45583,45586,45587,45588,45591,45592,45363,45312,45310,43701,43700,44371,42199,42534,42532,45647,44030,45639,45657,45658,45659,45660,45662,45663,45666,45667,45670,45671,45674,45675,45678,45679,45680,45682,45683,45684,45686,45687,45690,45691,45694,45695,45696,45698,45699,45700,45702,45703,45704,45706,45707,45708,45710,45711,45712,45714,45715,45716,45718,45719,45720,45722,45724,45725,45726,45727,45730,45731,45734,45735,45738,45739,45742,45743,45746,45747,45750,45751,45754,45755,45758,45759,45762,45763,45766,45767,45770,45771,45774,45775,45778,45779,45782,45783,45786,45787,45790,45793,45794,45664,45796,45797,45668,45800,45801,45672,45804,45805,45676,45808,45809,45812,45813,45816,45817,45688,45820,45821,45692,45824,45825,45828,45829,45832,45833,45836,45837,45840,45841,45844,45845,45848,45849,45852,45853,45856,45857,45861,45862,45864,45865,45868,45869,45872,45873,45876,45877,45880,45881,45884,45885,45888,45889,45892,45893,45896,45897,45900,45901,45904,45905,45908,45909,45912,45913,45916,45917,45920,45921,45924,45925,45929,45930,45932,45933,45936,45937,45940,45941,45944,45945,45948,45949,45952,45953,45956,45957,45960,45961,45964,45965,45968,45969,45972,45973,45976,45977,45980,45981,45984,45985,45988,45989,45992,45993,45999,46000,45998,46003,46002,46007,46006,46011,46010,46015,46014,46019,46018,46023,46022,46027,46026,46031,46030,46035,46034,46039,46038,46043,46042,46047,46046,46051,46050,46055,46054,46059,46058,46063,46065,46067,46068,46071,46074,46077,46080,46083,46086,46089,46092,46095,46098,46101,46104,46107,46110,46116,46117,46118,46120,46121,46123,46124,46125,46127,46128,46129,46132,46133,46136,46137,46139,46140,46141,46143,46144,46145,46147,46148,46149,46151,46152,46153,46155,46156,46157,46159,46160,46161,46163,46164,46165,\n46167,46168,46169,46171,46172,46173,46176,46177,46179,46181,46184,46185,46186,46188,46189,46192,46193,46196,46197,46200,46201,46204,46205,46208,46209,46212,46213,46216,46217,46220,46221,46224,46225,46228,46229,46232,46233,46236,46237,46240,46241,46244,46245,46249,46253,46254,46255,46258,46259,46131,46262,46263,46135,46266,46267,46270,46271,46274,46275,46278,46279,46282,46283,46286,46287,46290,46291,46294,46295,46298,46299,46302,46303,46175,46306,46307,46310,46311,46183,46314,46315,46119,46318,46321,46322,46323,46326,46327,46330,46331,46334,46335,46338,46339,46342,46343,46346,46347,46350,46351,46354,46355,46358,46359,46362,46363,46366,46367,46370,46371,46374,46375,46378,46379,46382,46383,46386,46389,46390,46391,46394,46395,46398,46399,46402,46403,46406,46407,46410,46411,46414,46415,46418,46419,46422,46423,46426,46427,46430,46431,46434,46435,46438,46439,46442,46443,46446,46447,46450,46451,46454,46457,46458,46459,46462,46463,46466,46467,46470,46471,46474,46475,46478,46479,46482,46483,46486,46487,46490,46491,46494,46495,46498,46499,46502,46503,46506,46507,46510,46511,46514,46515,46518,46519,46522,46525,46526,46528,46531,46534,46537,46540,46543,46546,46549,46552,46555,46558,46561,46564,46567,46570\n\t\t} \n\t\tGeometryVersion: 124\n\t\tLayerElementNormal: 0 {\n\t\t\tVersion: 101\n\t\t\tName: \"\"\n\t\t\tMappingInformationType: \"ByPolygonVertex\"\n\t\t\tReferenceInformationType: \"Direct\"\n\t\t\tNormals: *139725 {\n\t\t\t\ta: 0.329279124736786,0.0702807679772377,-0.941613435745239,0.256420314311981,0.112910509109497,-0.959947824478149,0.103707693517208,0.287299185991287,-0.952210009098053,0.0421824865043163,0.312842935323715,-0.948867738246918,0.574346244335175,0.00941364839673042,-0.81855833530426,0.329279124736786,0.0702807679772377,-0.941613435745239,0.0421824865043163,0.312842935323715,-0.948867738246918,0.120905123651028,0.330013185739517,-0.936201512813568,0.256420314311981,0.112910509109497,-0.959947824478149,0.298426777124405,0.233343333005905,-0.925468742847443,0.208192959427834,0.283492356538773,-0.936102449893951,0.103707693517208,0.287299185991287,-0.952210009098053,0.171656653285027,0.421078413724899,-0.890632927417755,0.0610933229327202,0.52752286195755,-0.847341299057007,0.0474854707717896,0.340129047632217,-0.939179122447968,0.0890781953930855,0.32302126288414,-0.942190170288086,0.0610933229327202,0.52752286195755,-0.847341299057007,-0.0717302039265633,0.599237322807312,-0.797351539134979,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.0474854707717896,0.340129047632217,-0.939179122447968,0.74884694814682,0.0258232615888119,-0.662239730358124,0.574346244335175,0.00941364839673042,-0.81855833530426,0.120905123651028,0.330013185739517,-0.936201512813568,0.317967116832733,0.377013236284256,-0.869918346405029,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.677631020545959,0.0696527808904648,-0.732096076011658,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.191734448075294,0.31677782535553,-0.928918600082397,0.0384715124964714,0.615228533744812,-0.787409543991089,\n0.00547882029786706,0.479039758443832,-0.877776086330414,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.0384715124964714,0.615228533744812,-0.787409543991089,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.00547882029786706,0.479039758443832,-0.877776086330414,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.0109683563932776,0.278000682592392,-0.96051824092865,0.298426777124405,0.233343333005905,-0.925468742847443,0.171656653285027,0.421078413724899,-0.890632927417755,0.0890781953930855,0.32302126288414,-0.942190170288086,0.208192959427834,0.283492356538773,-0.936102449893951,0.0421824865043163,0.312842935323715,-0.948867738246918,0.103707693517208,0.287299185991287,-0.952210009098053,0.188222825527191,0.266046136617661,-0.945405542850494,0.130089670419693,0.341309607028961,-0.930905163288116,0.120905123651028,0.330013185739517,-0.936201512813568,0.0421824865043163,0.312842935323715,-0.948867738246918,0.130089670419693,0.341309607028961,-0.930905163288116,0.103707693517208,0.287299185991287,-0.952210009098053,0.208192959427834,0.283492356538773,-0.936102449893951,0.236986353993416,0.25183042883873,-0.938306391239166,0.188222825527191,0.266046136617661,-0.945405542850494,0.0890781953930855,0.32302126288414,-0.942190170288086,0.0474854707717896,0.340129047632217,-0.939179122447968,0.0502305738627911,0.265573531389236,-0.962781190872192,0.0688691660761833,0.267364770174026,-0.961131155490875,0.0474854707717896,0.340129047632217,-0.939179122447968,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.0191163346171379,0.267036914825439,-0.963496685028076,0.0502305738627911,0.265573531389236,-0.962781190872192,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.186463221907616,0.337504178285599,-0.922671318054199,\n-0.173782542347908,0.294062882661819,-0.939854621887207,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.186463221907616,0.337504178285599,-0.922671318054199,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.0415995456278324,0.272834479808807,-0.961161196231842,-0.0542660467326641,0.303808957338333,-0.951186299324036,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0415995456278324,0.272834479808807,-0.961161196231842,0.0191163346171379,0.267036914825439,-0.963496685028076,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.0734905749559402,0.278112560510635,-0.957733035087585,0.208192959427834,0.283492356538773,-0.936102449893951,0.0890781953930855,0.32302126288414,-0.942190170288086,0.0688691660761833,0.267364770174026,-0.961131155490875,0.236986353993416,0.25183042883873,-0.938306391239166,0.130089670419693,0.341309607028961,-0.930905163288116,0.188222825527191,0.266046136617661,-0.945405542850494,0.163174018263817,0.444838464260101,-0.880620777606964,0.243700608611107,0.544483065605164,-0.802588403224945,0.317967116832733,0.377013236284256,-0.869918346405029,0.130089670419693,0.341309607028961,-0.930905163288116,0.243700608611107,0.544483065605164,-0.802588403224945,0.735658526420593,0.230637982487679,-0.636877298355103,0.188222825527191,0.266046136617661,-0.945405542850494,0.236986353993416,0.25183042883873,-0.938306391239166,0.189078122377396,0.441867411136627,-0.87692791223526,0.163174018263817,0.444838464260101,-0.880620777606964,0.0688691660761833,0.267364770174026,-0.961131155490875,\n0.0502305738627911,0.265573531389236,-0.962781190872192,0.057487852871418,0.456679046154022,-0.88777220249176,0.0718594193458557,0.455831170082092,-0.88716071844101,0.0502305738627911,0.265573531389236,-0.962781190872192,0.0191163346171379,0.267036914825439,-0.963496685028076,0.017586937174201,0.584774792194366,-0.811005055904388,0.057487852871418,0.456679046154022,-0.88777220249176,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.186463221907616,0.337504178285599,-0.922671318054199,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.147772952914238,0.520121157169342,-0.84121173620224,-0.186463221907616,0.337504178285599,-0.922671318054199,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.147772952914238,0.520121157169342,-0.84121173620224,-0.175480470061302,0.520782589912415,-0.835459232330322,-0.0415995456278324,0.272834479808807,-0.961161196231842,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.0663426592946053,0.518996477127075,-0.85219794511795,-0.0419603176414967,0.516997694969177,-0.854957699775696,0.0191163346171379,0.267036914825439,-0.963496685028076,-0.0415995456278324,0.272834479808807,-0.961161196231842,-0.0419603176414967,0.516997694969177,-0.854957699775696,0.017586937174201,0.584774792194366,-0.811005055904388,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.175480470061302,0.520782589912415,-0.835459232330322,-0.0663426592946053,0.518996477127075,-0.85219794511795,0.236986353993416,0.25183042883873,-0.938306391239166,0.0688691660761833,0.267364770174026,-0.961131155490875,0.0718594193458557,0.455831170082092,-0.88716071844101,0.189078122377396,0.441867411136627,-0.87692791223526,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.716141760349274,0.576233267784119,-0.393822461366653,\n-0.844549179077148,0.385287135839462,-0.371874392032623,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.854649007320404,0.375557482242584,-0.358513176441193,-0.931051731109619,0.363819122314453,0.027898857370019,-0.854649007320404,0.375557482242584,-0.358513176441193,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.539133667945862,0.764685809612274,-0.352973729372025,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.322734087705612,0.735918641090393,-0.5952028632164,-0.449203163385391,0.892682015895844,0.0365421921014786,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.539133667945862,0.764685809612274,-0.352973729372025,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.539133667945862,0.764685809612274,-0.352973729372025,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.00542618287727237,0.149814411997795,-0.98869925737381,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.304371774196625,0.115475252270699,-0.945528030395508,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.156535282731056,0.121644385159016,-0.980152726173401,\n-0.304371774196625,0.115475252270699,-0.945528030395508,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.304371774196625,0.115475252270699,-0.945528030395508,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.304371774196625,0.115475252270699,-0.945528030395508,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.000760512368287891,0.207898333668709,-0.978150188922882,-0.0685182884335518,0.227593377232552,-0.971342623233795,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.437141418457031,0.161669790744781,-0.88474303483963,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.335503816604614,0.489175528287888,-0.805074214935303,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.335503816604614,0.489175528287888,-0.805074214935303,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.437141418457031,0.161669790744781,-0.88474303483963,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.239463403820992,0.198724672198296,-0.950350344181061,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.335503816604614,0.489175528287888,-0.805074214935303,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.335503816604614,0.489175528287888,-0.805074214935303,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.257477760314941,0.382379919290543,-0.887406766414642,\n-0.127526223659515,0.388497859239578,-0.912582278251648,-0.257477760314941,0.382379919290543,-0.887406766414642,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.0627769380807877,0.434968650341034,-0.898254573345184,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.0627769380807877,0.434968650341034,-0.898254573345184,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.239463403820992,0.198724672198296,-0.950350344181061,-0.127602562308311,0.294543892145157,-0.947080492973328,-0.1575877815485,0.232581928372383,-0.959724843502045,0.00121181993745267,0.232196122407913,-0.9726682305336,0.002942921128124,0.253444164991379,-0.967345535755157,-0.749469220638275,0.428192466497421,0.504922866821289,-0.803582847118378,0.542061448097229,0.245812878012657,-0.710639357566834,0.646875619888306,0.27666512131691,-0.617127954959869,0.561533391475677,0.551210701465607,-0.710639357566834,0.646875619888306,0.27666512131691,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.449203163385391,0.892682015895844,0.0365421921014786,-0.448102563619614,0.672870218753815,0.588599801063538,-0.617127954959869,0.561533391475677,0.551210701465607,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.710639357566834,0.646875619888306,0.27666512131691,-0.803582847118378,0.542061448097229,0.245812878012657,-0.844134092330933,0.36929926276207,0.388658910989761,-0.856849551200867,0.411835759878159,0.310161501169205,-0.817325711250305,0.505672991275787,0.276176601648331,-0.767612516880035,0.418656378984451,0.485281258821487,-0.749469220638275,0.428192466497421,0.504922866821289,-0.767612516880035,0.418656378984451,0.485281258821487,-0.817325711250305,0.505672991275787,0.276176601648331,-0.803582847118378,0.542061448097229,0.245812878012657,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.803582847118378,0.542061448097229,0.245812878012657,-0.817325711250305,0.505672991275787,0.276176601648331,-0.87062680721283,0.491043627262115,-0.0297505091875792,\n-0.931051731109619,0.363819122314453,0.027898857370019,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.817325711250305,0.505672991275787,0.276176601648331,-0.856849551200867,0.411835759878159,0.310161501169205,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.941607177257538,0.224361434578896,-0.25107353925705,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.982630908489227,0.117604449391365,0.143546640872955,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.941607177257538,0.224361434578896,-0.25107353925705,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.941607177257538,0.224361434578896,-0.25107353925705,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.941607177257538,0.224361434578896,-0.25107353925705,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.142651379108429,0.65512877702713,0.741927802562714,-0.241419494152069,0.682447910308838,0.689914107322693,-0.229512825608253,0.568260371685028,0.790192425251007,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.142651379108429,0.65512877702713,0.741927802562714,-0.0943122506141663,0.53818953037262,0.837530434131622,0.0543623231351376,0.513473629951477,0.85638165473938,0.0616534538567066,0.625403761863709,0.777861833572388,-0.325974881649017,0.679336845874786,0.657451033592224,\n-0.429686725139618,0.66762501001358,0.607985317707062,-0.428986668586731,0.611180424690247,0.665153324604034,-0.279750615358353,0.610641419887543,0.74084860086441,-0.325974881649017,0.679336845874786,0.657451033592224,-0.279750615358353,0.610641419887543,0.74084860086441,-0.229512825608253,0.568260371685028,0.790192425251007,-0.241419494152069,0.682447910308838,0.689914107322693,-0.309171378612518,0.749882876873016,0.584883511066437,-0.325974881649017,0.679336845874786,0.657451033592224,-0.241419494152069,0.682447910308838,0.689914107322693,-0.237944751977921,0.77955037355423,0.579382002353668,-0.429686725139618,0.66762501001358,0.607985317707062,-0.325974881649017,0.679336845874786,0.657451033592224,-0.309171378612518,0.749882876873016,0.584883511066437,-0.928196668624878,0.146431341767311,0.342065423727036,-0.85773640871048,0.318832546472549,0.403279215097427,-0.856573581695557,0.327088385820389,0.399117648601532,-0.91119110584259,0.208402961492538,0.355385720729828,-0.928196668624878,0.146431341767311,0.342065423727036,-0.91119110584259,0.208402961492538,0.355385720729828,-0.930396974086761,0.1596420109272,0.329963505268097,-0.939980566501617,0.104119330644608,0.324954867362976,-0.759151995182037,0.445082813501358,0.474962621927261,-0.856573581695557,0.327088385820389,0.399117648601532,-0.85773640871048,0.318832546472549,0.403279215097427,-0.76142829656601,0.432304978370667,0.483052164316177,-0.759151995182037,0.445082813501358,0.474962621927261,-0.76142829656601,0.432304978370667,0.483052164316177,-0.637912154197693,0.524314641952515,0.564058721065521,-0.6037238240242,0.569068074226379,0.558282196521759,-0.183231085538864,0.776099979877472,0.603402972221375,-0.237944751977921,0.77955037355423,0.579382002353668,-0.241419494152069,0.682447910308838,0.689914107322693,-0.142651379108429,0.65512877702713,0.741927802562714,-0.183231085538864,0.776099979877472,0.603402972221375,-0.142651379108429,0.65512877702713,0.741927802562714,0.0616534538567066,0.625403761863709,0.777861833572388,0.0704773217439651,0.772313952445984,0.631319284439087,\n-0.933935105800629,0.157070308923721,0.321082711219788,-0.914615273475647,0.203247100114822,0.349527567625046,-0.961739301681519,0.162645190954208,0.22046323120594,-0.907475471496582,0.340031713247299,0.246711865067482,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.221233636140823,-0.176490515470505,-0.959117710590363,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.370549231767654,-0.159934684634209,-0.91493946313858,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.370549231767654,-0.159934684634209,-0.91493946313858,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.0269717872142792,-0.128648608922958,-0.991323411464691,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.028486518189311,-0.148915618658066,-0.988439500331879,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.028486518189311,-0.148915618658066,-0.988439500331879,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.221233636140823,-0.176490515470505,-0.959117710590363,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.927974164485931,0.372219532728195,-0.0177929922938347,-0.907475471496582,0.340031713247299,0.246711865067482,-0.961739301681519,0.162645190954208,0.22046323120594,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.958630919456482,0.250774264335632,-0.134681105613709,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.958630919456482,0.250774264335632,-0.134681105613709,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.85549122095108,0.405467689037323,-0.32207253575325,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.85549122095108,0.405467689037323,-0.32207253575325,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.800187706947327,0.59970623254776,-0.00721557484939694,\n-0.766045868396759,0.61859118938446,-0.174696043133736,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.646523416042328,0.744809150695801,0.165126398205757,-0.824783802032471,0.538173019886017,0.173497721552849,-0.855047225952148,0.419915407896042,0.304245471954346,-0.702866315841675,0.640832006931305,0.30872842669487,-0.646523416042328,0.744809150695801,0.165126398205757,-0.702866315841675,0.640832006931305,0.30872842669487,-0.49023100733757,0.783868074417114,0.381083190441132,-0.458671659231186,0.872726500034332,0.167238742113113,-0.429586619138718,0.728146016597748,0.53409618139267,-0.583837151527405,0.631729662418365,0.509952783584595,-0.6037238240242,0.569068074226379,0.558282196521759,-0.429686725139618,0.66762501001358,0.607985317707062,-0.49023100733757,0.783868074417114,0.381083190441132,-0.583837151527405,0.631729662418365,0.509952783584595,-0.429586619138718,0.728146016597748,0.53409618139267,-0.856573581695557,0.327088385820389,0.399117648601532,-0.759151995182037,0.445082813501358,0.474962621927261,-0.74214094877243,0.521113991737366,0.421505630016327,-0.849531948566437,0.369736075401306,0.376285374164581,-0.855047225952148,0.419915407896042,0.304245471954346,-0.849531948566437,0.369736075401306,0.376285374164581,-0.74214094877243,0.521113991737366,0.421505630016327,-0.702866315841675,0.640832006931305,0.30872842669487,-0.49023100733757,0.783868074417114,0.381083190441132,-0.702866315841675,0.640832006931305,0.30872842669487,-0.74214094877243,0.521113991737366,0.421505630016327,-0.583837151527405,0.631729662418365,0.509952783584595,-0.6037238240242,0.569068074226379,0.558282196521759,-0.583837151527405,0.631729662418365,0.509952783584595,-0.74214094877243,0.521113991737366,0.421505630016327,-0.759151995182037,0.445082813501358,0.474962621927261,-0.855047225952148,0.419915407896042,0.304245471954346,-0.824783802032471,0.538173019886017,0.173497721552849,-0.932598233222961,0.310681849718094,0.183677315711975,-0.922844409942627,0.263350307941437,0.281078040599823,\n-0.932598233222961,0.310681849718094,0.183677315711975,-0.953923344612122,0.216998100280762,0.207224562764168,-0.930396974086761,0.1596420109272,0.329963505268097,-0.922844409942627,0.263350307941437,0.281078040599823,-0.896636784076691,0.291213989257813,0.333521902561188,-0.936677098274231,0.272290170192719,0.220213681459427,-0.961739301681519,0.162645190954208,0.22046323120594,-0.914615273475647,0.203247100114822,0.349527567625046,-0.930396974086761,0.1596420109272,0.329963505268097,-0.953923344612122,0.216998100280762,0.207224562764168,-0.936677098274231,0.272290170192719,0.220213681459427,-0.896636784076691,0.291213989257813,0.333521902561188,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.953923344612122,0.216998100280762,0.207224562764168,-0.932598233222961,0.310681849718094,0.183677315711975,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.932598233222961,0.310681849718094,0.183677315711975,-0.824783802032471,0.538173019886017,0.173497721552849,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.958630919456482,0.250774264335632,-0.134681105613709,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.958630919456482,0.250774264335632,-0.134681105613709,\n-0.936677098274231,0.272290170192719,0.220213681459427,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.961739301681519,0.162645190954208,0.22046323120594,-0.953923344612122,0.216998100280762,0.207224562764168,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.936677098274231,0.272290170192719,0.220213681459427,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.688417077064514,0.155676782131195,-0.708411395549774,-0.83020544052124,0.164738476276398,-0.532559931278229,-0.833487510681152,0.195669800043106,-0.516731977462769,-0.811532735824585,0.254749119281769,-0.525849342346191,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.811532735824585,0.254749119281769,-0.525849342346191,-0.833487510681152,0.195669800043106,-0.516731977462769,-0.83020544052124,0.164738476276398,-0.532559931278229,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.83020544052124,0.164738476276398,-0.532559931278229,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.83020544052124,0.164738476276398,-0.532559931278229,-0.688417077064514,0.155676782131195,-0.708411395549774,0.00778961461037397,0.31232625246048,-0.949942946434021,-0.00349890603683889,0.173883408308029,-0.984760046005249,-0.164242103695869,0.181451722979546,-0.969587445259094,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.164242103695869,0.181451722979546,-0.969587445259094,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.164242103695869,0.181451722979546,-0.969587445259094,\n-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.164242103695869,0.181451722979546,-0.969587445259094,-0.00349890603683889,0.173883408308029,-0.984760046005249,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.1039934232831,0.492859244346619,-0.863872170448303,-0.135065674781799,0.320166707038879,-0.937683582305908,0.00778961461037397,0.31232625246048,-0.949942946434021,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.1039934232831,0.492859244346619,-0.863872170448303,0.0223272144794464,0.483893781900406,-0.874841868877411,0.0394280813634396,0.674713432788849,-0.737025916576386,0.0223272144794464,0.483893781900406,-0.874841868877411,-0.1039934232831,0.492859244346619,-0.863872170448303,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.1039934232831,0.492859244346619,-0.863872170448303,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.0709519162774086,0.962512910366058,-0.261791497468948,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.0709519162774086,0.962512910366058,-0.261791497468948,-0.0524508766829968,0.905246913433075,-0.421636074781418,0.0622152015566826,0.901260554790497,-0.428787440061569,-0.0524508766829968,0.905246913433075,-0.421636074781418,-0.0709519162774086,0.962512910366058,-0.261791497468948,0.0692925006151199,0.95879065990448,-0.27553403377533,0.0761537179350853,0.996121823787689,-0.044066745787859,0.0692925006151199,0.95879065990448,-0.27553403377533,-0.0709519162774086,0.962512910366058,-0.261791497468948,-0.100280947983265,0.994407773017883,-0.0331186950206757,\n-0.429686725139618,0.66762501001358,0.607985317707062,-0.309171378612518,0.749882876873016,0.584883511066437,-0.291583627462387,0.822390556335449,0.488521039485931,-0.429586619138718,0.728146016597748,0.53409618139267,-0.49023100733757,0.783868074417114,0.381083190441132,-0.429586619138718,0.728146016597748,0.53409618139267,-0.291583627462387,0.822390556335449,0.488521039485931,-0.280090749263763,0.893176853656769,0.351829946041107,-0.205079987645149,0.915316820144653,0.346608310937881,-0.280090749263763,0.893176853656769,0.351829946041107,-0.291583627462387,0.822390556335449,0.488521039485931,-0.227190643548965,0.852716088294983,0.470382422208786,-0.237944751977921,0.77955037355423,0.579382002353668,-0.227190643548965,0.852716088294983,0.470382422208786,-0.291583627462387,0.822390556335449,0.488521039485931,-0.309171378612518,0.749882876873016,0.584883511066437,-0.126044631004334,0.975940346717834,0.177913352847099,0.0787876397371292,0.981232225894928,0.175999522209167,0.0761537179350853,0.996121823787689,-0.044066745787859,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.126044631004334,0.975940346717834,0.177913352847099,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.175430566072464,0.967789888381958,0.180573478341103,-0.160089418292046,0.924165964126587,0.346826493740082,0.0780636146664619,0.932616472244263,0.352324455976486,0.0787876397371292,0.981232225894928,0.175999522209167,-0.126044631004334,0.975940346717834,0.177913352847099,-0.160089418292046,0.924165964126587,0.346826493740082,-0.126044631004334,0.975940346717834,0.177913352847099,-0.175430566072464,0.967789888381958,0.180573478341103,-0.205079987645149,0.915316820144653,0.346608310937881,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.778471529483795,0.0903224870562553,-0.621147274971008,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.676815629005432,0.0292502902448177,-0.735571205615997,\n-0.778471529483795,0.0903224870562553,-0.621147274971008,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.778471529483795,0.0903224870562553,-0.621147274971008,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.778471529483795,0.0903224870562553,-0.621147274971008,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.566805422306061,0.799840569496155,-0.197450518608093,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.566805422306061,0.799840569496155,-0.197450518608093,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.566805422306061,0.799840569496155,-0.197450518608093,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.566805422306061,0.799840569496155,-0.197450518608093,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.824783802032471,0.538173019886017,0.173497721552849,-0.646523416042328,0.744809150695801,0.165126398205757,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.646523416042328,0.744809150695801,0.165126398205757,-0.458671659231186,0.872726500034332,0.167238742113113,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.237944751977921,0.77955037355423,0.579382002353668,-0.183231085538864,0.776099979877472,0.603402972221375,-0.184141546487808,0.85766065120697,0.480114668607712,\n-0.227190643548965,0.852716088294983,0.470382422208786,-0.205079987645149,0.915316820144653,0.346608310937881,-0.227190643548965,0.852716088294983,0.470382422208786,-0.184141546487808,0.85766065120697,0.480114668607712,-0.160089418292046,0.924165964126587,0.346826493740082,0.0780636146664619,0.932616472244263,0.352324455976486,-0.160089418292046,0.924165964126587,0.346826493740082,-0.184141546487808,0.85766065120697,0.480114668607712,0.0752492547035217,0.86371123790741,0.498337715864182,0.0704773217439651,0.772313952445984,0.631319284439087,0.0752492547035217,0.86371123790741,0.498337715864182,-0.184141546487808,0.85766065120697,0.480114668607712,-0.183231085538864,0.776099979877472,0.603402972221375,-0.896636784076691,0.291213989257813,0.333521902561188,-0.914615273475647,0.203247100114822,0.349527567625046,-0.90123462677002,0.253379285335541,0.351532429456711,-0.893953561782837,0.312333762645721,0.321394920349121,-0.896636784076691,0.291213989257813,0.333521902561188,-0.893953561782837,0.312333762645721,0.321394920349121,-0.939980566501617,0.104119330644608,0.324954867362976,-0.930396974086761,0.1596420109272,0.329963505268097,-0.930396974086761,0.1596420109272,0.329963505268097,-0.91119110584259,0.208402961492538,0.355385720729828,-0.897303998470306,0.274592310190201,0.345607608556747,-0.922844409942627,0.263350307941437,0.281078040599823,-0.855047225952148,0.419915407896042,0.304245471954346,-0.897303998470306,0.274592310190201,0.345607608556747,-0.849531948566437,0.369736075401306,0.376285374164581,-0.856573581695557,0.327088385820389,0.399117648601532,-0.849531948566437,0.369736075401306,0.376285374164581,-0.897303998470306,0.274592310190201,0.345607608556747,-0.91119110584259,0.208402961492538,0.355385720729828,-0.429686725139618,0.66762501001358,0.607985317707062,-0.6037238240242,0.569068074226379,0.558282196521759,-0.637912154197693,0.524314641952515,0.564058721065521,-0.428986668586731,0.611180424690247,0.665153324604034,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.555550515651703,0.455664992332459,-0.695509195327759,\n-0.735395610332489,0.421848356723785,-0.530318140983582,-0.622987747192383,0.608749032020569,-0.491234064102173,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.622987747192383,0.608749032020569,-0.491234064102173,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.85549122095108,0.405467689037323,-0.32207253575325,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.85549122095108,0.405467689037323,-0.32207253575325,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.811532735824585,0.254749119281769,-0.525849342346191,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.811532735824585,0.254749119281769,-0.525849342346191,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.555550515651703,0.455664992332459,-0.695509195327759,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.350460797548294,0.80544102191925,-0.477956026792526,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.622987747192383,0.608749032020569,-0.491234064102173,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.622987747192383,0.608749032020569,-0.491234064102173,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.350460797548294,0.80544102191925,-0.477956026792526,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.0524508766829968,0.905246913433075,-0.421636074781418,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.136522889137268,0.827674627304077,-0.544349312782288,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.136522889137268,0.827674627304077,-0.544349312782288,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.0733590647578239,0.681655049324036,-0.727986812591553,0.0394280813634396,0.674713432788849,-0.737025916576386,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.0537863597273827,0.825741946697235,-0.561477720737457,\n0.0535563454031944,0.82038402557373,-0.569299399852753,0.0622152015566826,0.901260554790497,-0.428787440061569,0.0535563454031944,0.82038402557373,-0.569299399852753,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.0524508766829968,0.905246913433075,-0.421636074781418,-0.280090749263763,0.893176853656769,0.351829946041107,-0.205079987645149,0.915316820144653,0.346608310937881,-0.175430566072464,0.967789888381958,0.180573478341103,-0.275193452835083,0.944830358028412,0.177662998437881,-0.280090749263763,0.893176853656769,0.351829946041107,-0.275193452835083,0.944830358028412,0.177662998437881,-0.458671659231186,0.872726500034332,0.167238742113113,-0.49023100733757,0.783868074417114,0.381083190441132,-0.275193452835083,0.944830358028412,0.177662998437881,-0.175430566072464,0.967789888381958,0.180573478341103,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.272943913936615,0.961116194725037,-0.0419191792607307,-0.275193452835083,0.944830358028412,0.177662998437881,-0.272943913936615,0.961116194725037,-0.0419191792607307,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.458671659231186,0.872726500034332,0.167238742113113,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.236552119255066,0.898081064224243,-0.370801120996475,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.272943913936615,0.961116194725037,-0.0419191792607307,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.272943913936615,0.961116194725037,-0.0419191792607307,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.236552119255066,0.898081064224243,-0.370801120996475,\n-0.147578522562981,0.903031170368195,-0.403429329395294,-0.136522889137268,0.827674627304077,-0.544349312782288,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.236552119255066,0.898081064224243,-0.370801120996475,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.236552119255066,0.898081064224243,-0.370801120996475,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.350460797548294,0.80544102191925,-0.477956026792526,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.350460797548294,0.80544102191925,-0.477956026792526,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.271187722682953,0.674484729766846,-0.686678647994995,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.271187722682953,0.674484729766846,-0.686678647994995,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.136522889137268,0.827674627304077,-0.544349312782288,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.555550515651703,0.455664992332459,-0.695509195327759,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.443566411733627,0.305741757154465,-0.84247899055481,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.443566411733627,0.305741757154465,-0.84247899055481,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.271187722682953,0.674484729766846,-0.686678647994995,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.271187722682953,0.674484729766846,-0.686678647994995,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.555550515651703,0.455664992332459,-0.695509195327759,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.443566411733627,0.305741757154465,-0.84247899055481,-0.641130149364471,0.283854395151138,-0.713006854057312,\n-0.443566411733627,0.305741757154465,-0.84247899055481,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.688417077064514,0.155676782131195,-0.708411395549774,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.688417077064514,0.155676782131195,-0.708411395549774,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.542270302772522,0.0508554428815842,-0.838663637638092,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.542270302772522,0.0508554428815842,-0.838663637638092,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.562148034572601,-0.142533272504807,-0.814661800861359,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.370549231767654,-0.159934684634209,-0.91493946313858,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.370549231767654,-0.159934684634209,-0.91493946313858,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.562148034572601,-0.142533272504807,-0.814661800861359,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.37091401219368,-0.0905782580375671,-0.924239337444305,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.37091401219368,-0.0905782580375671,-0.924239337444305,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.221233636140823,-0.176490515470505,-0.959117710590363,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.221233636140823,-0.176490515470505,-0.959117710590363,\n-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.0252742562443018,-0.106068439781666,-0.994037568569183,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.0252742562443018,-0.106068439781666,-0.994037568569183,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.542270302772522,0.0508554428815842,-0.838663637638092,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.725374639034271,-0.054319828748703,-0.68620765209198,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.725374639034271,-0.054319828748703,-0.68620765209198,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.562148034572601,-0.142533272504807,-0.814661800861359,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.562148034572601,-0.142533272504807,-0.814661800861359,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.37091401219368,-0.0905782580375671,-0.924239337444305,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.37091401219368,-0.0905782580375671,-0.924239337444305,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.542270302772522,0.0508554428815842,-0.838663637638092,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.725374639034271,-0.054319828748703,-0.68620765209198,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.725374639034271,-0.054319828748703,-0.68620765209198,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.86995929479599,-0.0271206852048635,-0.492377251386642,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.86995929479599,-0.0271206852048635,-0.492377251386642,\n-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.437141418457031,0.161669790744781,-0.88474303483963,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.437141418457031,0.161669790744781,-0.88474303483963,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.239463403820992,0.198724672198296,-0.950350344181061,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.239463403820992,0.198724672198296,-0.950350344181061,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.0269717872142792,-0.128648608922958,-0.991323411464691,\n0.000681107048876584,0.225692093372345,-0.974198460578918,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.109456099569798,0.459850668907166,-0.881224572658539,-0.211731195449829,0.50760555267334,-0.835168540477753,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.211731195449829,0.50760555267334,-0.835168540477753,-0.322734087705612,0.735918641090393,-0.5952028632164,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.0685182884335518,0.227593377232552,-0.971342623233795,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.0301786828786135,0.377186805009842,-0.925645351409912,-0.109456099569798,0.459850668907166,-0.881224572658539,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.000760512368287891,0.207898333668709,-0.978150188922882,0.0102010685950518,0.341328680515289,-0.939888656139374,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.0685182884335518,0.227593377232552,-0.971342623233795,0.0102010685950518,0.341328680515289,-0.939888656139374,0.010585374198854,0.345912545919418,-0.938207030296326,-0.0301786828786135,0.377186805009842,-0.925645351409912,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.861315131187439,0.181052923202515,0.474716812372208,-0.83081316947937,0.301315695047379,0.467929810285568,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.575954735279083,-0.540566444396973,0.613240599632263,\n-0.811837613582611,0.121092565357685,-0.571188449859619,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.0667830258607864,-0.603913366794586,-0.794247210025787,-0.890724420547485,-0.0131717119365931,-0.454352855682373,0.485446602106094,-0.599754393100739,0.636110246181488,0.775241792201996,-0.45661398768425,0.436467438936234,0.615995168685913,-0.740946054458618,0.267486304044724,0.43514209985733,-0.748737931251526,0.500042855739594,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.743858754634857,0.1927819699049,0.639929115772247,-0.861315131187439,0.181052923202515,0.474716812372208,0.151796370744705,-0.893162906169891,0.423341274261475,0.315651625394821,-0.933804154396057,0.168445229530334,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.358404159545898,-0.845226526260376,0.396407097578049,0.43514209985733,-0.748737931251526,0.500042855739594,0.615995168685913,-0.740946054458618,0.267486304044724,0.315651625394821,-0.933804154396057,0.168445229530334,0.151796370744705,-0.893162906169891,0.423341274261475,-0.753281593322754,0.510852336883545,0.414242386817932,-0.864985883235931,0.37462642788887,0.333847969770432,-0.735505998134613,0.630867898464203,0.247055947780609,-0.864985883235931,0.37462642788887,0.333847969770432,-0.753281593322754,0.510852336883545,0.414242386817932,-0.83081316947937,0.301315695047379,0.467929810285568,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.83081316947937,0.301315695047379,0.467929810285568,-0.753281593322754,0.510852336883545,0.414242386817932,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.0667830258607864,-0.603913366794586,-0.794247210025787,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.0110307689756155,-0.0793537572026253,0.996785461902618,-0.00827599223703146,-0.428946763277054,0.903291881084442,\n0.033345639705658,-0.401991754770279,0.915035903453827,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.758384525775909,0.243889003992081,0.604459345340729,-0.468296974897385,-0.39009964466095,0.792792677879334,-0.758384525775909,0.243889003992081,0.604459345340729,-0.100514478981495,0.314375013113022,0.943962454795837,-0.468296974897385,-0.39009964466095,0.792792677879334,-0.426155984401703,-0.544485569000244,0.722444832324982,-0.726677179336548,-0.644755423069,0.237130090594292,-0.685877442359924,-0.687307178974152,0.239125445485115,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.426155984401703,-0.544485569000244,0.722444832324982,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.632458329200745,-0.745043694972992,0.211911231279373,-0.726677179336548,-0.644755423069,0.237130090594292,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.685877442359924,-0.687307178974152,0.239125445485115,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.685877442359924,-0.687307178974152,0.239125445485115,-0.660850763320923,0.309517800807953,0.683721423149109,-0.758384525775909,0.243889003992081,0.604459345340729,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.887657046318054,-0.456045299768448,0.063934437930584,-0.852710962295532,0.37292954325676,0.365797132253647,-0.660850763320923,0.309517800807953,0.683721423149109,-0.685877442359924,-0.687307178974152,0.239125445485115,\n-0.726677179336548,-0.644755423069,0.237130090594292,0.255169302225113,-0.0558453612029552,0.965282320976257,0.330043107271194,0.436470597982407,0.83699756860733,0.185406669974327,0.360577255487442,0.914116144180298,0.134034633636475,-0.240539237856865,0.961340487003326,0.133207947015762,0.0763719230890274,0.988141179084778,0.0240508019924164,0.026220079511404,0.999366819858551,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0475814715027809,0.0593862198293209,0.997100412845612,0.0266619008034468,0.262281715869904,0.964622974395752,-0.0073667336255312,-0.00580848380923271,0.999956011772156,-0.144208893179893,0.115719296038151,0.982757806777954,-0.100514478981495,0.314375013113022,0.943962454795837,-0.0475814715027809,0.0593862198293209,0.997100412845612,0.0266619008034468,0.262281715869904,0.964622974395752,0.0432916954159737,0.796547591686249,0.603023827075958,-0.069992259144783,0.555320203304291,0.828686058521271,-0.100514478981495,0.314375013113022,0.943962454795837,0.24859219789505,0.926495909690857,0.282501816749573,0.0432916954159737,0.796547591686249,0.603023827075958,0.0266619008034468,0.262281715869904,0.964622974395752,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.401081025600433,-0.243629589676857,0.883050739765167,0.255169302225113,-0.0558453612029552,0.965282320976257,0.0791192501783371,-0.0643641576170921,0.994785130023956,0.0240508019924164,0.026220079511404,0.999366819858551,0.133207947015762,0.0763719230890274,0.988141179084778,0.134034633636475,-0.240539237856865,0.961340487003326,0.0174392946064472,-0.157727032899857,0.987328767776489,0.0791192501783371,-0.0643641576170921,0.994785130023956,0.255169302225113,-0.0558453612029552,0.965282320976257,0.0791192501783371,-0.0643641576170921,0.994785130023956,-0.271942734718323,0.215774357318878,0.93781054019928,-0.402321964502335,0.279689967632294,0.871728479862213,\n0.0240508019924164,0.026220079511404,0.999366819858551,-0.158640176057816,0.0965946391224861,0.982600033283234,-0.271942734718323,0.215774357318878,0.93781054019928,0.0791192501783371,-0.0643641576170921,0.994785130023956,0.0174392946064472,-0.157727032899857,0.987328767776489,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.284841567277908,0.292440235614777,0.912876784801483,-0.498006135225296,0.389301002025604,0.77487713098526,0.134034633636475,-0.240539237856865,0.961340487003326,0.185406669974327,0.360577255487442,0.914116144180298,-0.0424226783216,0.296286582946777,0.954156458377838,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.0475814715027809,0.0593862198293209,0.997100412845612,-0.069992259144783,0.555320203304291,0.828686058521271,0.187445163726807,0.511297464370728,0.838712811470032,0.133207947015762,0.0763719230890274,0.988141179084778,-0.0073667336255312,-0.00580848380923271,0.999956011772156,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.0073667336255312,-0.00580848380923271,0.999956011772156,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.466067016124725,0.290591061115265,0.835666418075562,-0.144208893179893,0.115719296038151,0.982757806777954,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.0241487547755241,-0.0255803689360619,0.999381065368652,0.0240508019924164,0.026220079511404,0.999366819858551,-0.402321964502335,0.279689967632294,0.871728479862213,-0.474541217088699,0.29422801733017,0.829602658748627,-0.847861528396606,0.113259613513947,0.517979800701141,-0.602232098579407,0.563644886016846,0.565350294113159,-0.702935457229614,0.63435697555542,0.321672111749649,-0.807841360569,0.43371844291687,0.399099737405777,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.498006135225296,0.389301002025604,0.77487713098526,-0.602232098579407,0.563644886016846,0.565350294113159,-0.847861528396606,0.113259613513947,0.517979800701141,\n0.792737483978271,-0.494514644145966,-0.356402337551117,0.759971797466278,-0.612702488899231,0.216883733868599,0.336174368858337,0.935995519161224,0.104399025440216,0.879603147506714,0.140207409858704,-0.454576879739761,-0.134053289890289,0.873388648033142,-0.468211501836777,0.879603147506714,0.140207409858704,-0.454576879739761,0.336174368858337,0.935995519161224,0.104399025440216,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.225193619728088,0.461788326501846,0.85792738199234,-0.13601952791214,0.794801294803619,0.591430127620697,-0.350341945886612,0.815486073493958,0.460698395967484,-0.450388491153717,0.534071862697601,0.715484082698822,0.336174368858337,0.935995519161224,0.104399025440216,0.279289931058884,0.161584615707397,0.94651335477829,-0.328838348388672,0.935817182064056,0.126931354403496,-0.761701762676239,0.421244710683823,0.492304056882858,-0.630214631557465,0.655408442020416,0.416256308555603,-0.673884630203247,0.467902958393097,0.571792244911194,-0.630214631557465,0.655408442020416,0.416256308555603,-0.702385485172272,0.688902199268341,0.179076477885246,-0.328838348388672,0.935817182064056,0.126931354403496,-0.630214631557465,0.655408442020416,0.416256308555603,-0.124414332211018,0.380547553300858,0.91635400056839,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.713547646999359,0.198780298233032,0.671815574169159,-0.673884630203247,0.467902958393097,0.571792244911194,0.327664911746979,0.551296949386597,-0.767272710800171,0.30904021859169,0.371187627315521,-0.875621974468231,0.120067529380322,0.82549375295639,-0.55149233341217,-0.0351283065974712,0.990967154502869,-0.12942211329937,0.120067529380322,0.82549375295639,-0.55149233341217,-0.0348765477538109,0.952687978744507,-0.301942437887192,-0.394997388124466,0.90861302614212,0.135644435882568,-0.350341945886612,0.815486073493958,0.460698395967484,-0.0351283065974712,0.990967154502869,-0.12942211329937,0.532891869544983,0.203911662101746,-0.821246802806854,0.120067529380322,0.82549375295639,-0.55149233341217,0.30904021859169,0.371187627315521,-0.875621974468231,\n0.532891869544983,0.203911662101746,-0.821246802806854,0.516829967498779,0.529717087745667,-0.67252254486084,-0.0348765477538109,0.952687978744507,-0.301942437887192,0.120067529380322,0.82549375295639,-0.55149233341217,-0.450388491153717,0.534071862697601,0.715484082698822,-0.350341945886612,0.815486073493958,0.460698395967484,-0.394997388124466,0.90861302614212,0.135644435882568,-0.548773884773254,0.701416075229645,0.454821705818176,-0.225193619728088,0.461788326501846,0.85792738199234,-0.450388491153717,0.534071862697601,0.715484082698822,-0.484222084283829,0.366713851690292,0.794386506080627,-0.245125457644463,0.30829644203186,0.919166386127472,0.0420866049826145,0.997517287731171,0.0564619302749634,-0.0351283065974712,0.990967154502869,-0.12942211329937,-0.350341945886612,0.815486073493958,0.460698395967484,-0.13601952791214,0.794801294803619,0.591430127620697,0.327664911746979,0.551296949386597,-0.767272710800171,-0.0351283065974712,0.990967154502869,-0.12942211329937,0.0420866049826145,0.997517287731171,0.0564619302749634,0.201275274157524,0.759530663490295,-0.618547856807709,0.0685662999749184,0.738678991794586,0.670561015605927,-0.0397870242595673,0.770527541637421,0.636163771152496,-0.0782447457313538,0.412172168493271,0.907739996910095,0.0410983338952065,0.381287395954132,0.923542559146881,-0.13601952791214,0.794801294803619,0.591430127620697,-0.225193619728088,0.461788326501846,0.85792738199234,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.0397870242595673,0.770527541637421,0.636163771152496,-0.523407638072968,0.841484844684601,0.133969098329544,-0.548773884773254,0.701416075229645,0.454821705818176,-0.394997388124466,0.90861302614212,0.135644435882568,-0.262664377689362,0.933591663837433,-0.243749871850014,-0.728943645954132,0.505101680755615,0.462075144052505,-0.655175447463989,0.41560024023056,0.630889534950256,-0.548773884773254,0.701416075229645,0.454821705818176,-0.523407638072968,0.841484844684601,0.133969098329544,-0.484222084283829,0.366713851690292,0.794386506080627,-0.450388491153717,0.534071862697601,0.715484082698822,\n-0.548773884773254,0.701416075229645,0.454821705818176,-0.655175447463989,0.41560024023056,0.630889534950256,-0.261222988367081,0.14337170124054,0.954571664333344,-0.12591940164566,0.150871932506561,0.980500876903534,-0.101943291723728,0.319687753915787,0.942022979259491,-0.245125457644463,0.30829644203186,0.919166386127472,-0.225193619728088,0.461788326501846,0.85792738199234,-0.245125457644463,0.30829644203186,0.919166386127472,-0.101943291723728,0.319687753915787,0.942022979259491,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.101943291723728,0.319687753915787,0.942022979259491,0.0325647220015526,0.328354388475418,0.943993091583252,0.0410983338952065,0.381287395954132,0.923542559146881,0.0226862858980894,0.138102903962135,0.990158021450043,0.0325647220015526,0.328354388475418,0.943993091583252,-0.101943291723728,0.319687753915787,0.942022979259491,-0.12591940164566,0.150871932506561,0.980500876903534,0.0685662999749184,0.738678991794586,0.670561015605927,0.078812912106514,0.980074644088745,0.182324379682541,0.0115500893443823,0.988494396209717,0.150815844535828,-0.0397870242595673,0.770527541637421,0.636163771152496,-0.13601952791214,0.794801294803619,0.591430127620697,-0.0397870242595673,0.770527541637421,0.636163771152496,0.0115500893443823,0.988494396209717,0.150815844535828,0.0420866049826145,0.997517287731171,0.0564619302749634,0.201275274157524,0.759530663490295,-0.618547856807709,0.0420866049826145,0.997517287731171,0.0564619302749634,0.0115500893443823,0.988494396209717,0.150815844535828,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0339763574302197,0.937289535999298,-0.346891850233078,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0115500893443823,0.988494396209717,0.150815844535828,0.078812912106514,0.980074644088745,0.182324379682541,0.516829967498779,0.529717087745667,-0.67252254486084,0.532891869544983,0.203911662101746,-0.821246802806854,0.784418284893036,-0.0482183061540127,-0.61835503578186,0.516829967498779,0.529717087745667,-0.67252254486084,\n0.26505383849144,0.683794975280762,-0.679831504821777,-0.262664377689362,0.933591663837433,-0.243749871850014,-0.394997388124466,0.90861302614212,0.135644435882568,-0.0348765477538109,0.952687978744507,-0.301942437887192,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.26505383849144,0.683794975280762,-0.679831504821777,0.516829967498779,0.529717087745667,-0.67252254486084,0.784418284893036,-0.0482183061540127,-0.61835503578186,-0.00443782517686486,-0.271711438894272,0.962368547916412,0.0352616421878338,0.240770235657692,0.969941377639771,-0.1695187240839,0.251378893852234,0.952928125858307,-0.185788631439209,-0.25801420211792,0.948109328746796,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.185788631439209,-0.25801420211792,0.948109328746796,-0.1695187240839,0.251378893852234,0.952928125858307,-0.375643879175186,0.212974905967712,0.901960849761963,-0.330226361751556,0.315774649381638,0.889514982700348,-0.375643879175186,0.212974905967712,0.901960849761963,-0.1695187240839,0.251378893852234,0.952928125858307,-0.159210100769997,0.301312178373337,0.940139949321747,0.0384946875274181,0.285418510437012,0.957629561424255,-0.159210100769997,0.301312178373337,0.940139949321747,-0.1695187240839,0.251378893852234,0.952928125858307,0.0352616421878338,0.240770235657692,0.969941377639771,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.84095025062561,-0.471284002065659,0.265883654356003,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.641941249370575,-0.68879646062851,0.336854338645935,\n-0.734584510326386,-0.658318638801575,0.16432324051857,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.35957869887352,-0.654971122741699,0.66461718082428,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.35957869887352,-0.654971122741699,0.66461718082428,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.185788631439209,-0.25801420211792,0.948109328746796,-0.00443782517686486,-0.271711438894272,0.962368547916412,-0.185788631439209,-0.25801420211792,0.948109328746796,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.0397491529583931,-0.678164541721344,0.733834326267242,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.0397491529583931,-0.678164541721344,0.733834326267242,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.375643879175186,0.212974905967712,0.901960849761963,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.375643879175186,0.212974905967712,0.901960849761963,-0.330226361751556,0.315774649381638,0.889514982700348,-0.490771174430847,0.254273563623428,0.833359837532043,-0.159210100769997,0.301312178373337,0.940139949321747,-0.15314356982708,-0.075783796608448,0.985293805599213,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.330226361751556,0.315774649381638,0.889514982700348,0.00911593530327082,-0.103348582983017,0.994603395462036,-0.15314356982708,-0.075783796608448,0.985293805599213,-0.159210100769997,0.301312178373337,0.940139949321747,0.0384946875274181,0.285418510437012,0.957629561424255,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.360249727964401,-0.149908572435379,0.920732080936432,-0.261337131261826,-0.401412606239319,0.877821683883667,\n-0.523851454257965,-0.504004776477814,0.686701416969299,-0.0928481444716454,-0.394505769014359,0.914190590381622,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.00295650074258447,-0.253587752580643,0.967307865619659,-0.0108760436996818,-0.349400758743286,0.936910271644592,0.00262317061424255,-0.184787794947624,0.982774972915649,-0.00295650074258447,-0.253587752580643,0.967307865619659,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.360249727964401,-0.149908572435379,0.920732080936432,0.0744598954916,0.293609887361526,0.953020930290222,0.0348379723727703,0.239972576498985,0.970154345035553,0.0381993055343628,0.285694986581802,0.957558989524841,-0.109741598367691,0.221520185470581,0.968961119651794,0.0744598954916,0.293609887361526,0.953020930290222,0.205764874815941,0.144822359085083,0.967826068401337,0.026632534340024,0.124120466411114,0.991909682750702,0.0348379723727703,0.239972576498985,0.970154345035553,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.305121690034866,-0.661639988422394,0.684933066368103,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.055518988519907,-0.839309513568878,0.540811538696289,-0.0377944894134998,-0.657056510448456,0.752893269062042,-0.305121690034866,-0.661639988422394,0.684933066368103,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.531166195869446,0.151813089847565,0.833555817604065,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.861315131187439,0.181052923202515,0.474716812372208,-0.743858754634857,0.1927819699049,0.639929115772247,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.531166195869446,0.151813089847565,0.833555817604065,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.481455624103546,0.182786270976067,0.857198715209961,-0.760103762149811,0.153783366084099,0.631342172622681,-0.775605142116547,-0.0662227943539619,0.627734959125519,\n-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.760103762149811,0.153783366084099,0.631342172622681,-0.872271299362183,0.143087893724442,0.467620134353638,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.872271299362183,0.143087893724442,0.467620134353638,-0.760103762149811,0.153783366084099,0.631342172622681,-0.719690024852753,0.419174522161484,0.553479015827179,-0.849210619926453,0.33398848772049,0.409014731645584,-0.44353261590004,0.469896525144577,0.763201177120209,-0.719690024852753,0.419174522161484,0.553479015827179,-0.760103762149811,0.153783366084099,0.631342172622681,-0.481455624103546,0.182786270976067,0.857198715209961,-0.762500584125519,0.610563993453979,0.214019775390625,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.72613924741745,0.535442233085632,0.431304275989532,-0.884765982627869,0.444219619035721,-0.140918776392937,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.522650301456451,0.406982094049454,-0.749134302139282,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.522650301456451,0.406982094049454,-0.749134302139282,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.522650301456451,0.406982094049454,-0.749134302139282,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.976188123226166,-0.133096665143967,-0.171295195817947,-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.979476630687714,-0.044322844594717,0.196624115109444,\n-0.912571549415588,-0.364975243806839,0.184407845139503,-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.233076319098473,-0.804329991340637,0.546560764312744,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.710427701473236,-0.480556935071945,0.514157176017761,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.710427701473236,-0.480556935071945,0.514157176017761,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.151400625705719,-0.629788994789124,0.761868536472321,0.485446602106094,-0.599754393100739,0.636110246181488,-0.151400625705719,-0.629788994789124,0.761868536472321,-0.162659510970116,-0.713988304138184,0.681001126766205,0.439482539892197,-0.499404758214951,0.74662572145462,0.0642944201827049,-0.547998011112213,0.834004998207092,0.439482539892197,-0.499404758214951,0.74662572145462,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.233076319098473,-0.804329991340637,0.546560764312744,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.151400625705719,-0.629788994789124,0.761868536472321,0.485446602106094,-0.599754393100739,0.636110246181488,0.43514209985733,-0.748737931251526,0.500042855739594,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.151400625705719,-0.629788994789124,0.761868536472321,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.00470763072371483,0.279436647891998,0.960152566432953,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.531166195869446,0.151813089847565,0.833555817604065,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.0296379756182432,0.164347007870674,0.985957264900208,-0.186078935861588,0.178288474678993,0.966223537921906,-0.217106208205223,-0.0510895028710365,0.974810123443604,-0.522818684577942,-0.0568677671253681,0.850544929504395,\n-0.217106208205223,-0.0510895028710365,0.974810123443604,-0.186078935861588,0.178288474678993,0.966223537921906,-0.481455624103546,0.182786270976067,0.857198715209961,-0.44353261590004,0.469896525144577,0.763201177120209,-0.481455624103546,0.182786270976067,0.857198715209961,-0.186078935861588,0.178288474678993,0.966223537921906,-0.155023440718651,0.460458368062973,0.874039947986603,0.0497331917285919,0.445011228322983,0.894142985343933,-0.155023440718651,0.460458368062973,0.874039947986603,-0.186078935861588,0.178288474678993,0.966223537921906,0.0296379756182432,0.164347007870674,0.985957264900208,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.217106208205223,-0.0510895028710365,0.974810123443604,0.0126708010211587,-0.0581304989755154,0.99822860956192,-0.217106208205223,-0.0510895028710365,0.974810123443604,-0.239064574241638,-0.198313489556313,0.950536668300629,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.976188123226166,-0.133096665143967,-0.171295195817947,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.884765982627869,0.444219619035721,-0.140918776392937,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.884765982627869,0.444219619035721,-0.140918776392937,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.710427701473236,-0.480556935071945,0.514157176017761,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.710427701473236,-0.480556935071945,0.514157176017761,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.976188123226166,-0.133096665143967,-0.171295195817947,0.43514209985733,-0.748737931251526,0.500042855739594,0.151796370744705,-0.893162906169891,0.423341274261475,\n-0.34064969420433,-0.564744412899017,0.751679182052612,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.72613924741745,0.535442233085632,0.431304275989532,-0.690247058868408,0.178245946764946,0.701275527477264,-0.639836966991425,0.246874988079071,0.727778375148773,-0.659900903701782,0.452796697616577,0.59958815574646,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.639836966991425,0.246874988079071,0.727778375148773,-0.690247058868408,0.178245946764946,0.701275527477264,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.690247058868408,0.178245946764946,0.701275527477264,-0.861315131187439,0.181052923202515,0.474716812372208,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.936657905578613,0.0257524941116571,0.349297523498535,-0.864985883235931,0.37462642788887,0.333847969770432,-0.83081316947937,0.301315695047379,0.467929810285568,-0.936657905578613,0.0257524941116571,0.349297523498535,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.358404159545898,-0.845226526260376,0.396407097578049,-0.692233920097351,-0.67291522026062,0.260762959718704,0.151796370744705,-0.893162906169891,0.423341274261475,-0.358404159545898,-0.845226526260376,0.396407097578049,\n-0.647243857383728,-0.405161768198013,0.645692884922028,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.069260835647583,0.0269219465553761,0.997235238552094,-0.0737119764089584,-0.466615557670593,0.881383299827576,0.14743447303772,-0.460478246212006,0.875341594219208,0.244968578219414,-0.0767860040068626,0.966485559940338,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.055518988519907,-0.839309513568878,0.540811538696289,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.923407673835754,-0.172809228301048,0.342717438936234,\n-0.871014952659607,-0.424263268709183,0.247656226158142,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.923407673835754,-0.172809228301048,0.342717438936234,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.923407673835754,-0.172809228301048,0.342717438936234,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.706978023052216,-0.108872137963772,0.698805391788483,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.923407673835754,-0.172809228301048,0.342717438936234,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.530206859111786,0.100595757365227,0.841879546642303,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.158640176057816,0.0965946391224861,0.982600033283234,0.0174392946064472,-0.157727032899857,0.987328767776489,-0.126811400055885,-0.181621968746185,0.975157618522644,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.53056800365448,-0.207617223262787,0.821822762489319,0.579925835132599,-0.717766225337982,-0.3853540122509,0.645713806152344,-0.220039650797844,-0.731188178062439,0.392777740955353,-0.563973963260651,-0.726401448249817,0.293798208236694,-0.882029175758362,-0.368384540081024,0.579925835132599,-0.717766225337982,-0.3853540122509,0.293798208236694,-0.882029175758362,-0.368384540081024,0.0681579038500786,-0.994212329387665,0.0830442756414413,0.161769852042198,-0.974958479404449,0.152598813176155,-0.218783125281334,-0.517780601978302,0.827065408229828,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.377197057008743,-0.298063486814499,0.876858353614807,\n-0.218783125281334,-0.517780601978302,0.827065408229828,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.28600937128067,-0.592511594295502,0.753079414367676,-0.188662573695183,-0.633236289024353,0.750611901283264,0.293798208236694,-0.882029175758362,-0.368384540081024,0.392777740955353,-0.563973963260651,-0.726401448249817,-0.0193124283105135,-0.74210524559021,-0.670005083084106,-0.0615345053374767,-0.946400821208954,-0.317078918218613,0.293798208236694,-0.882029175758362,-0.368384540081024,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.0973072052001953,-0.992754817008972,0.0704923868179321,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.53056800365448,-0.207617223262787,0.821822762489319,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.406814515590668,-0.530913829803467,0.743392527103424,-0.070097453892231,-0.765305280685425,-0.639839172363281,-0.0787644907832146,-0.96135801076889,-0.263793289661407,-0.169070288538933,-0.950376808643341,-0.261149764060974,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.169070288538933,-0.950376808643341,-0.261149764060974,-0.0787644907832146,-0.96135801076889,-0.263793289661407,0.65024209022522,-0.683634519577026,-0.331404685974121,0.24199965596199,-0.948591530323029,0.203986048698425,0.340434432029724,-0.915098071098328,0.216101616621017,0.626364231109619,-0.75530606508255,-0.192822501063347,0.00068405584897846,-0.208776980638504,0.977963030338287,-0.0389158241450787,-0.199694201350212,0.979085206985474,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.0353972837328911,-0.630800306797028,0.775137424468994,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0353972837328911,-0.630800306797028,0.775137424468994,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.447912156581879,-0.140877023339272,0.882909059524536,\n-0.505191087722778,-0.124014981091022,0.854050517082214,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.194900542497635,-0.331308722496033,0.923172950744629,-0.194900542497635,-0.331308722496033,0.923172950744629,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.0973072052001953,-0.992754817008972,0.0704923868179321,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.188662573695183,-0.633236289024353,0.750611901283264,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.169070288538933,-0.950376808643341,-0.261149764060974,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.169070288538933,-0.950376808643341,-0.261149764060974,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.208596497774124,-0.74006187915802,-0.639371454715729,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.0193124283105135,-0.74210524559021,-0.670005083084106,-0.208596497774124,-0.74006187915802,-0.639371454715729,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.0973072052001953,-0.992754817008972,0.0704923868179321,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.758384525775909,0.243889003992081,0.604459345340729,0.24859219789505,0.926495909690857,0.282501816749573,-0.100514478981495,0.314375013113022,0.943962454795837,0.00664448039606214,0.89234858751297,0.451297968626022,-0.109012864530087,0.977998495101929,0.177862659096718,-0.183847695589066,0.966428518295288,0.179488003253937,\n0.12853179872036,0.854913532733917,0.502595722675323,0.00664448039606214,0.89234858751297,0.451297968626022,0.12853179872036,0.854913532733917,0.502595722675323,0.187445163726807,0.511297464370728,0.838712811470032,-0.069992259144783,0.555320203304291,0.828686058521271,0.0171615201979876,0.876817524433136,0.480516880750656,0.046251967549324,0.890573501586914,0.452481597661972,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.0424226783216,0.296286582946777,0.954156458377838,0.185406669974327,0.360577255487442,0.914116144180298,0.046251967549324,0.890573501586914,0.452481597661972,0.0171615201979876,0.876817524433136,0.480516880750656,-0.109012864530087,0.977998495101929,0.177862659096718,0.00664448039606214,0.89234858751297,0.451297968626022,0.080908939242363,0.956137537956238,0.281522214412689,0.00727432640269399,0.986923277378082,0.161026418209076,-0.106629706919193,0.951739728450775,0.287787467241287,0.00727432640269399,0.986923277378082,0.161026418209076,0.080908939242363,0.956137537956238,0.281522214412689,0.171542316675186,0.957118153572083,0.233448192477226,0.24859219789505,0.926495909690857,0.282501816749573,0.171542316675186,0.957118153572083,0.233448192477226,0.080908939242363,0.956137537956238,0.281522214412689,0.0432916954159737,0.796547591686249,0.603023827075958,-0.069992259144783,0.555320203304291,0.828686058521271,0.0432916954159737,0.796547591686249,0.603023827075958,0.080908939242363,0.956137537956238,0.281522214412689,0.00664448039606214,0.89234858751297,0.451297968626022,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.00044033964513801,0.857838094234467,0.51391988992691,0.225808262825012,0.957561135292053,-0.179129242897034,0.438933074474335,0.880430459976196,-0.179387643933296,-0.498006135225296,0.389301002025604,0.77487713098526,-0.284841567277908,0.292440235614777,0.912876784801483,-0.00044033964513801,0.857838094234467,0.51391988992691,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.702935457229614,0.63435697555542,0.321672111749649,\n-0.602232098579407,0.563644886016846,0.565350294113159,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.323215007781982,0.943282067775726,0.0758355185389519,0.477838784456253,0.792661190032959,-0.378626853227615,-0.323215007781982,0.943282067775726,0.0758355185389519,-0.0831757560372353,0.939581155776978,0.33206781744957,0.510045230388641,0.828637421131134,-0.230681270360947,0.438933074474335,0.880430459976196,-0.179387643933296,0.510045230388641,0.828637421131134,-0.230681270360947,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.498006135225296,0.389301002025604,0.77487713098526,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.602232098579407,0.563644886016846,0.565350294113159,0.618943631649017,0.169027715921402,-0.767032206058502,0.486043959856033,0.298038214445114,-0.821543991565704,0.426036864519119,0.191680565476418,-0.884166955947876,0.590149700641632,0.106324933469296,-0.800261437892914,0.699705183506012,0.427644014358521,-0.572305202484131,0.486043959856033,0.298038214445114,-0.821543991565704,0.618943631649017,0.169027715921402,-0.767032206058502,0.622634530067444,0.273028820753098,-0.733335912227631,-0.922386527061462,0.136373192071915,0.361393809318542,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.961905956268311,0.126988083124161,0.242096945643425,-0.922386527061462,0.136373192071915,0.361393809318542,-0.961905956268311,0.126988083124161,0.242096945643425,-0.92311555147171,0.291509866714478,0.250758200883865,-0.482406258583069,0.640618324279785,0.597404718399048,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.514883160591125,0.0328956842422485,0.856628954410553,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.514883160591125,0.0328956842422485,0.856628954410553,\n-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.0252015665173531,-0.364970922470093,0.930677771568298,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.438263714313507,0.241573825478554,0.865775406360626,-0.281328231096268,0.118911549448967,0.952215552330017,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.899924099445343,0.231058403849602,0.369795471429825,-0.8117955327034,0.118040002882481,0.571886837482452,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.8117955327034,0.118040002882481,0.571886837482452,-0.739963114261627,0.167704880237579,0.651405930519104,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.8117955327034,0.118040002882481,0.571886837482452,-0.899924099445343,0.231058403849602,0.369795471429825,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.0252015665173531,-0.364970922470093,0.930677771568298,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.405952632427216,-0.25302666425705,0.878168523311615,\n-0.337558269500732,-0.222729057073593,0.914574325084686,-0.847808718681335,0.127517849206924,0.514742314815521,-0.755013465881348,0.127179101109505,0.64325749874115,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.383932620286942,0.132088497281075,0.913864493370056,-0.462802797555923,0.335958212614059,0.820332646369934,-0.383932620286942,0.132088497281075,0.913864493370056,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.585166156291962,0.298548936843872,0.753955662250519,-0.736577808856964,0.297644317150116,0.607339262962341,-0.585166156291962,0.298548936843872,0.753955662250519,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.755013465881348,0.127179101109505,0.64325749874115,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.926096200942993,0.356152534484863,0.124503806233406,-0.899924099445343,0.231058403849602,0.369795471429825,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.899924099445343,0.231058403849602,0.369795471429825,-0.926096200942993,0.356152534484863,0.124503806233406,-0.849758863449097,0.226472169160843,0.476046502590179,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.849758863449097,0.226472169160843,0.476046502590179,-0.926096200942993,0.356152534484863,0.124503806233406,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.949614703655243,0.0149662410840392,0.313062191009521,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.917545735836029,0.0924613624811172,0.386730790138245,\n-0.736577808856964,0.297644317150116,0.607339262962341,-0.701379120349884,0.42103236913681,0.575151324272156,-0.566419124603271,0.446817666292191,0.692476272583008,-0.585166156291962,0.298548936843872,0.753955662250519,-0.462802797555923,0.335958212614059,0.820332646369934,-0.585166156291962,0.298548936843872,0.753955662250519,-0.566419124603271,0.446817666292191,0.692476272583008,-0.389257401227951,0.367899239063263,0.844469547271729,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.271065413951874,-0.201962277293205,0.941134810447693,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.514883160591125,0.0328956842422485,0.856628954410553,-0.670063674449921,0.104801684617996,0.734868168830872,-0.739276468753815,0.150933310389519,0.656269311904907,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.383932620286942,0.132088497281075,0.913864493370056,-0.447645485401154,0.239924728870392,0.861423015594482,-0.611212015151978,0.257414042949677,0.74843692779541,-0.670063674449921,0.104801684617996,0.734868168830872,-0.514883160591125,0.0328956842422485,0.856628954410553,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.933271765708923,0.0356566943228245,0.357396692037582,\n-0.949614703655243,0.0149662410840392,0.313062191009521,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.917545735836029,0.0924613624811172,0.386730790138245,-0.895226001739502,0.157463803887367,0.416863977909088,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.917545735836029,0.0924613624811172,0.386730790138245,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.895226001739502,0.157463803887367,0.416863977909088,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.971317529678345,-0.00673383427783847,0.237690657377243,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.953642725944519,-0.152424976229668,0.259484380483627,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.953642725944519,-0.152424976229668,0.259484380483627,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.354619354009628,-0.125306099653244,0.926576197147369,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.510507762432098,-0.444001197814941,0.736372709274292,\n-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.456958532333374,-0.310317039489746,0.833601951599121,0.205764874815941,0.144822359085083,0.967826068401337,0.244968578219414,-0.0767860040068626,0.966485559940338,0.00927210599184036,-0.101372048258781,0.99480539560318,0.026632534340024,0.124120466411114,0.991909682750702,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.706978023052216,-0.108872137963772,0.698805391788483,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.44353261590004,0.469896525144577,0.763201177120209,-0.487235128879547,0.602307498455048,0.632319211959839,-0.709937155246735,0.54696124792099,0.443646997213364,-0.719690024852753,0.419174522161484,0.553479015827179,-0.594367325305939,0.527927815914154,0.606646299362183,-0.16526772081852,0.578359544277191,0.798865914344788,-0.179719179868698,0.465985059738159,0.866348028182983,-0.654083967208862,0.394615858793259,0.64533132314682,-0.636985540390015,0.443951308727264,0.630203664302826,-0.654083967208862,0.394615858793259,0.64533132314682,-0.179719179868698,0.465985059738159,0.866348028182983,-0.162020102143288,0.560337007045746,0.812263488769531,0.0571579374372959,0.555576980113983,0.829498171806335,-0.162020102143288,0.560337007045746,0.812263488769531,-0.179719179868698,0.465985059738159,0.866348028182983,0.0507387444376946,0.459851264953613,0.886545181274414,0.0581676289439201,0.571192860603333,0.818752288818359,0.0507387444376946,0.459851264953613,0.886545181274414,-0.179719179868698,0.465985059738159,0.866348028182983,-0.16526772081852,0.578359544277191,0.798865914344788,-0.298522680997849,0.122926026582718,0.946453094482422,-0.410987347364426,-0.221517965197563,0.884318470954895,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.0186418443918228,0.221836999058723,0.974905550479889,\n-0.409960985183716,0.234984055161476,0.881314098834991,-0.506407201290131,0.224265813827515,0.832620322704315,-0.49151623249054,0.284042507410049,0.823244571685791,-0.37480103969574,0.327312290668488,0.867404639720917,-0.469541937112808,0.464283794164658,0.750979959964752,-0.37480103969574,0.327312290668488,0.867404639720917,-0.49151623249054,0.284042507410049,0.823244571685791,-0.593105614185333,0.348213493824005,0.725929081439972,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.0135245211422443,-0.380902349948883,0.924516320228577,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.261222988367081,0.14337170124054,0.954571664333344,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.12591940164566,0.150871932506561,0.980500876903534,0.0226862858980894,0.138102903962135,0.990158021450043,-0.12591940164566,0.150871932506561,0.980500876903534,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.0135245211422443,-0.380902349948883,0.924516320228577,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.428986668586731,0.611180424690247,0.665153324604034,\n-0.637912154197693,0.524314641952515,0.564058721065521,-0.664581894874573,0.481633543968201,0.571279287338257,-0.542732357978821,0.501746475696564,0.673566699028015,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.926191806793213,0.116400174796581,0.35863596200943,-0.914867162704468,0.153272107243538,0.373531401157379,-0.910374224185944,0.148485288023949,0.3862264752388,-0.939631521701813,0.153399094939232,0.305877894163132,-0.910374224185944,0.148485288023949,0.3862264752388,-0.914867162704468,0.153272107243538,0.373531401157379,-0.926795780658722,0.133818626403809,0.3509162068367,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.956733524799347,-0.225288674235344,0.18413570523262,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.956733524799347,-0.225288674235344,0.18413570523262,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.914867162704468,0.153272107243538,0.373531401157379,-0.926191806793213,0.116400174796581,0.35863596200943,-0.914867162704468,0.153272107243538,0.373531401157379,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.926795780658722,0.133818626403809,0.3509162068367,-0.298522680997849,0.122926026582718,0.946453094482422,-0.0186418443918228,0.221836999058723,0.974905550479889,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.235767140984535,0.346122115850449,0.908082246780396,-0.529072642326355,0.217875778675079,0.820129454135895,-0.392426759004593,0.205112621188164,0.896621465682983,-0.55286180973053,-0.0385416857898235,0.832381188869476,\n-0.563694715499878,0.0446579419076443,0.824775099754334,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.530328452587128,0.10359351336956,0.841439306735992,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.918760776519775,0.045384906232357,0.392197400331497,-0.921404659748077,0.300344526767731,0.246589884161949,-0.912839949131012,0.366738528013229,0.179516360163689,-0.938549876213074,0.168846443295479,0.301023334264755,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.912092506885529,0.0284031052142382,0.408999383449554,-0.894654810428619,0.0708979144692421,0.441096633672714,\n-0.927375435829163,0.0604105368256569,0.369222611188889,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.958259165287018,0.0577557012438774,0.280006498098373,-0.939631521701813,0.153399094939232,0.305877894163132,-0.958259165287018,0.0577557012438774,0.280006498098373,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.910374224185944,0.148485288023949,0.3862264752388,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.910374224185944,0.148485288023949,0.3862264752388,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.894654810428619,0.0708979144692421,0.441096633672714,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.629563450813293,0.348871290683746,0.694218039512634,-0.37480103969574,0.327312290668488,0.867404639720917,-0.469541937112808,0.464283794164658,0.750979959964752,-0.639506042003632,0.483837932348251,0.597438633441925,-0.409960985183716,0.234984055161476,0.881314098834991,-0.37480103969574,0.327312290668488,0.867404639720917,-0.629563450813293,0.348871290683746,0.694218039512634,-0.590761244297028,0.21027672290802,0.778963983058929,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.669090986251831,0.108672223985195,0.735192239284515,-0.626672208309174,0.255842447280884,0.736088693141937,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.77647191286087,0.0245032440871,0.629675269126892,-0.669090986251831,0.108672223985195,0.735192239284515,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.653488278388977,-0.259704351425171,0.710989952087402,\n-0.573286294937134,-0.272017657756805,0.772883713245392,-0.669090986251831,0.108672223985195,0.735192239284515,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.762500584125519,0.610563993453979,0.214019775390625,-0.805146157741547,0.523773431777954,0.278210490942001,-0.859274387359619,0.29542076587677,0.417581170797348,-0.847808718681335,0.127517849206924,0.514742314815521,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.027668621391058,0.211265400052071,0.977037012577057,-0.0867536216974258,0.288804531097412,0.953449428081512,0.0307731032371521,0.261024415493011,0.964841604232788,0.0340906009078026,0.177746370434761,0.983485698699951,-0.16978645324707,0.304286330938339,0.937327265739441,-0.0867536216974258,0.288804531097412,0.953449428081512,-0.027668621391058,0.211265400052071,0.977037012577057,-0.0915354415774345,0.261345416307449,0.960895359516144,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.397862493991852,-0.0639909207820892,0.915210664272308,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.136693820357323,-0.553743422031403,0.821390867233276,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.136693820357323,-0.553743422031403,0.821390867233276,-0.0301125477999449,-0.572418868541718,0.819408237934113,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.52777773141861,0.480110883712769,0.700674116611481,-0.428986668586731,0.611180424690247,0.665153324604034,-0.542732357978821,0.501746475696564,0.673566699028015,-0.493602007627487,-0.18142081797123,0.850554823875427,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.493602007627487,-0.18142081797123,0.850554823875427,-0.253225147724152,-0.35441780090332,0.900147259235382,\n-0.261222988367081,0.14337170124054,0.954571664333344,-0.498029559850693,0.248690649867058,0.830734312534332,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.77647191286087,0.0245032440871,0.629675269126892,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.84095025062561,-0.471284002065659,0.265883654356003,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.968327283859253,-0.0703691765666008,0.239563062787056,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.968327283859253,-0.0703691765666008,0.239563062787056,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.957215070724487,-0.128876686096191,0.259094893932343,\n-0.976993918418884,-0.160521164536476,0.140413165092468,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.978964686393738,0.106371738016605,0.174106821417809,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.578717350959778,0.160483196377754,0.799582004547119,-0.619005084037781,0.113047316670418,0.777208507061005,-0.552518010139465,0.180195555090904,0.813789546489716,-0.522611916065216,0.119792513549328,0.844112873077393,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.438927531242371,-0.110836811363697,0.891660153865814,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.968327283859253,-0.0703691765666008,0.239563062787056,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.968327283859253,-0.0703691765666008,0.239563062787056,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.571020781993866,-0.291943371295929,0.767270684242249,\n-0.542732357978821,0.501746475696564,0.673566699028015,-0.664581894874573,0.481633543968201,0.571279287338257,-0.639506042003632,0.483837932348251,0.597438633441925,-0.469541937112808,0.464283794164658,0.750979959964752,-0.529072642326355,0.217875778675079,0.820129454135895,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.530328452587128,0.10359351336956,0.841439306735992,-0.552518010139465,0.180195555090904,0.813789546489716,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.713391602039337,-0.697049975395203,-0.0720673725008965,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.788669764995575,0.415443122386932,0.453218460083008,-0.793161690235138,0.389079302549362,0.468520849943161,-0.867791414260864,0.325389176607132,0.375579476356506,-0.937809467315674,0.204933196306229,0.280206710100174,-0.867791414260864,0.325389176607132,0.375579476356506,-0.793161690235138,0.389079302549362,0.468520849943161,-0.891881763935089,0.246565267443657,0.379147052764893,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.389989584684372,-0.185713946819305,0.901897132396698,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.397862493991852,-0.0639909207820892,0.915210664272308,-0.389989584684372,-0.185713946819305,0.901897132396698,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.995428025722504,-0.0233537666499615,-0.0926159843802452,\n-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.793161690235138,0.389079302549362,0.468520849943161,-0.76142829656601,0.432304978370667,0.483052164316177,-0.85773640871048,0.318832546472549,0.403279215097427,-0.891881763935089,0.246565267443657,0.379147052764893,-0.76142829656601,0.432304978370667,0.483052164316177,-0.793161690235138,0.389079302549362,0.468520849943161,-0.664581894874573,0.481633543968201,0.571279287338257,-0.637912154197693,0.524314641952515,0.564058721065521,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.713391602039337,-0.697049975395203,-0.0720673725008965,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.974589943885803,0.150285556912422,0.166098326444626,-0.958487570285797,0.190219804644585,0.212409943342209,-0.940992951393127,0.168072536587715,0.293741136789322,-0.957204222679138,0.181513637304306,0.225416928529739,-0.8270303606987,0.233872473239899,0.511198997497559,-0.957204222679138,0.181513637304306,0.225416928529739,-0.940992951393127,0.168072536587715,0.293741136789322,-0.786397933959961,0.197700291872025,0.58522891998291,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.981885612010956,0.00184334872756153,0.189465641975403,\n-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.196050360798836,-0.216366931796074,0.956425428390503,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.196050360798836,-0.216366931796074,0.956425428390503,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.20097516477108,-0.349854558706284,0.914992213249207,0.138299137353897,-0.216322302818298,0.966477155685425,0.0996207222342491,0.155612200498581,0.982782065868378,0.0314028672873974,0.188204348087311,0.981627702713013,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.194900542497635,-0.331308722496033,0.923172950744629,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.500701189041138,-0.0503258183598518,0.864156007766724,-0.392426759004593,0.205112621188164,0.896621465682983,-0.129117503762245,0.13854855298996,0.981902718544006,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.384387612342834,0.0363270901143551,0.922456741333008,\n-0.740522086620331,-0.668854534626007,0.065273717045784,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.846795618534088,-0.531082570552826,0.0298077315092087,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.846795618534088,-0.531082570552826,0.0298077315092087,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.482406258583069,0.640618324279785,0.597404718399048,0.517754137516022,0.73391991853714,0.439650118350983,0.0937898680567741,0.660230219364166,0.745184183120728,0.00488457176834345,0.505567967891693,0.862772941589355,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.432196706533432,-0.877966165542603,-0.205867424607277,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.354942172765732,-0.909834563732147,-0.214981570839882,\n-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.0633096471428871,-0.774920701980591,0.62887978553772,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.0633096471428871,-0.774920701980591,0.62887978553772,0.14743447303772,-0.460478246212006,0.875341594219208,-0.0737119764089584,-0.466615557670593,0.881383299827576,0.00247630476951599,-0.186591759324074,0.982434391975403,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.250480443239212,-0.173854321241379,0.952383458614349,-0.000449120096163824,-0.222807794809341,0.974862277507782,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.284990429878235,-0.166815251111984,0.943903148174286,0.00247630476951599,-0.186591759324074,0.982434391975403,-0.00140566960908473,-0.234566405415535,0.97209906578064,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.77647191286087,0.0245032440871,0.629675269126892,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.450571924448013,-0.714681327342987,0.534991204738617,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.410987347364426,-0.221517965197563,0.884318470954895,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.884575426578522,-0.272238790988922,0.378698289394379,\n-0.933359444141388,0.180034801363945,-0.310527950525284,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.884575426578522,-0.272238790988922,0.378698289394379,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.0186418443918228,0.221836999058723,0.974905550479889,-0.110501579940319,0.212603434920311,0.970870316028595,-0.215113177895546,0.235299572348595,0.947818756103516,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.939980566501617,0.104119330644608,0.324954867362976,-0.942853271961212,0.10562913864851,0.316022574901581,-0.928196668624878,0.146431341767311,0.342065423727036,-0.0389158241450787,-0.199694201350212,0.979085206985474,0.00068405584897846,-0.208776980638504,0.977963030338287,0.0314028672873974,0.188204348087311,0.981627702713013,0.0996207222342491,0.155612200498581,0.982782065868378,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.129117503762245,0.13854855298996,0.981902718544006,-0.392426759004593,0.205112621188164,0.896621465682983,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.493602007627487,-0.18142081797123,0.850554823875427,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.0633096471428871,-0.774920701980591,0.62887978553772,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.523851454257965,-0.504004776477814,0.686701416969299,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,\n-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.982630908489227,0.117604449391365,0.143546640872955,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.741787433624268,-0.27885103225708,0.609912693500519,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.392426759004593,0.205112621188164,0.896621465682983,-0.529072642326355,0.217875778675079,0.820129454135895,-0.942853271961212,0.10562913864851,0.316022574901581,-0.939980566501617,0.104119330644608,0.324954867362976,-0.946860730648041,0.157310754060745,0.280549645423889,-0.945931136608124,0.172555223107338,0.274661630392075,-0.942853271961212,0.10562913864851,0.316022574901581,-0.945931136608124,0.172555223107338,0.274661630392075,-0.937809467315674,0.204933196306229,0.280206710100174,-0.891881763935089,0.246565267443657,0.379147052764893,-0.15314356982708,-0.075783796608448,0.985293805599213,-0.136693820357323,-0.553743422031403,0.821390867233276,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.0301125477999449,-0.572418868541718,0.819408237934113,-0.136693820357323,-0.553743422031403,0.821390867233276,-0.15314356982708,-0.075783796608448,0.985293805599213,0.00911593530327082,-0.103348582983017,0.994603395462036,-0.787644863128662,0.107126019895077,0.606745064258575,-0.525317013263702,-0.0670165792107582,0.848263382911682,\n-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.739276468753815,0.150933310389519,0.656269311904907,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.841734766960144,0.21214547753334,0.496464431285858,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.953642725944519,-0.152424976229668,0.259484380483627,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.995428025722504,-0.0233537666499615,-0.0926159843802452,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.0848771035671234,-0.827450573444366,0.55508691072464,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0848771035671234,-0.827450573444366,0.55508691072464,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.0771657377481461,-0.907520055770874,-0.412859290838242,\n-0.0777209997177124,-0.922415435314178,-0.378297746181488,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.713547646999359,0.198780298233032,0.671815574169159,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.713547646999359,0.198780298233032,0.671815574169159,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.296029925346375,0.469678968191147,0.831725895404816,-0.406924575567245,0.55693382024765,0.724042177200317,-0.431310623884201,0.54215931892395,0.721134126186371,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.979476630687714,-0.044322844594717,0.196624115109444,\n-0.979476630687714,-0.044322844594717,0.196624115109444,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.986240923404694,0.124055705964565,-0.109266042709351,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.986240923404694,0.124055705964565,-0.109266042709351,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.397862493991852,-0.0639909207820892,0.915210664272308,0.0111285699531436,-0.0777815505862236,0.9969083070755,0.00655650394037366,-0.135652124881744,0.990734815597534,-0.389989584684372,-0.185713946819305,0.901897132396698,-0.0528050363063812,-0.813004612922668,0.579857885837555,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.389989584684372,-0.185713946819305,0.901897132396698,0.00655650394037366,-0.135652124881744,0.990734815597534,-0.989431083202362,0.138839796185493,-0.0418281517922878,\n-0.986240923404694,0.124055705964565,-0.109266042709351,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.979892313480377,0.170224979519844,0.104088805615902,-0.939631521701813,0.153399094939232,0.305877894163132,-0.979892313480377,0.170224979519844,0.104088805615902,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.958259165287018,0.0577557012438774,0.280006498098373,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.958259165287018,0.0577557012438774,0.280006498098373,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.986240923404694,0.124055705964565,-0.109266042709351,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.250480443239212,-0.173854321241379,0.952383458614349,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.438927531242371,-0.110836811363697,0.891660153865814,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.0928481444716454,-0.394505769014359,0.914190590381622,0.14743447303772,-0.460478246212006,0.875341594219208,-0.0633096471428871,-0.774920701980591,0.62887978553772,-0.261337131261826,-0.401412606239319,0.877821683883667,0.00927210599184036,-0.101372048258781,0.99480539560318,0.244968578219414,-0.0767860040068626,0.966485559940338,0.14743447303772,-0.460478246212006,0.875341594219208,-0.0928481444716454,-0.394505769014359,0.914190590381622,-0.0108760436996818,-0.349400758743286,0.936910271644592,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.953642725944519,-0.152424976229668,0.259484380483627,\n-0.931119084358215,-0.21125616133213,0.297301381826401,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.960240244865417,0.158970504999161,0.229493051767349,-0.985882997512817,0.0816566720604897,0.146174341440201,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.910772800445557,0.214318007230759,0.352931588888168,-0.985882997512817,0.0816566720604897,0.146174341440201,-0.960240244865417,0.158970504999161,0.229493051767349,-0.844134092330933,0.36929926276207,0.388658910989761,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.787644863128662,0.107126019895077,0.606745064258575,-0.82659912109375,0.121020883321762,0.549625158309937,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.787644863128662,0.107126019895077,0.606745064258575,-0.739276468753815,0.150933310389519,0.656269311904907,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.704794883728027,-0.197958365082741,0.681231737136841,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.80333799123764,-0.434850186109543,0.406882554292679,\n-0.740851521492004,-0.347129315137863,0.575013279914856,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.706978023052216,-0.108872137963772,0.698805391788483,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.704794883728027,-0.197958365082741,0.681231737136841,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.897795557975769,-0.43993416428566,0.0205198600888252,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.897795557975769,-0.43993416428566,0.0205198600888252,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.749754548072815,-0.661690354347229,-0.00583517225459218,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.749754548072815,-0.661690354347229,-0.00583517225459218,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.713391602039337,-0.697049975395203,-0.0720673725008965,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.749491930007935,-0.0978431180119514,0.654743134975433,\n-0.431310623884201,0.54215931892395,0.721134126186371,-0.704075336456299,0.454022943973541,0.546022951602936,-0.715115904808044,0.391270339488983,0.57923811674118,-0.451172351837158,0.441036701202393,0.775841593742371,-0.704075336456299,0.454022943973541,0.546022951602936,-0.431310623884201,0.54215931892395,0.721134126186371,-0.406924575567245,0.55693382024765,0.724042177200317,-0.530960738658905,0.402330845594406,0.74579530954361,-0.737271249294281,0.345291316509247,0.580693602561951,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.137671425938606,0.655901074409485,0.742186188697815,0.0635503008961678,0.655404150485992,0.752600014209747,0.0513622872531414,0.468802571296692,0.881808400154114,-0.185234054923058,0.48134982585907,0.856732606887817,-0.660850763320923,0.309517800807953,0.683721423149109,-0.852710962295532,0.37292954325676,0.365797132253647,-0.106629706919193,0.951739728450775,0.287787467241287,0.171542316675186,0.957118153572083,0.233448192477226,-0.758384525775909,0.243889003992081,0.604459345340729,-0.660850763320923,0.309517800807953,0.683721423149109,0.171542316675186,0.957118153572083,0.233448192477226,0.24859219789505,0.926495909690857,0.282501816749573,-0.974589943885803,0.150285556912422,0.166098326444626,-0.957204222679138,0.181513637304306,0.225416928529739,-0.924049556255341,0.299373358488083,0.237714126706123,-0.960206747055054,0.212085798382759,0.18172125518322,-0.937809467315674,0.204933196306229,0.280206710100174,-0.960206747055054,0.212085798382759,0.18172125518322,-0.924049556255341,0.299373358488083,0.237714126706123,-0.867791414260864,0.325389176607132,0.375579476356506,-0.788669764995575,0.415443122386932,0.453218460083008,\n-0.867791414260864,0.325389176607132,0.375579476356506,-0.924049556255341,0.299373358488083,0.237714126706123,-0.824751377105713,0.366082817316055,0.431008726358414,-0.8270303606987,0.233872473239899,0.511198997497559,-0.824751377105713,0.366082817316055,0.431008726358414,-0.924049556255341,0.299373358488083,0.237714126706123,-0.957204222679138,0.181513637304306,0.225416928529739,-0.482406258583069,0.640618324279785,0.597404718399048,-0.559565424919128,0.213157281279564,0.80090606212616,-0.922386527061462,0.136373192071915,0.361393809318542,-0.559565424919128,0.213157281279564,0.80090606212616,-0.482406258583069,0.640618324279785,0.597404718399048,0.00488457176834345,0.505567967891693,0.862772941589355,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.922386527061462,0.136373192071915,0.361393809318542,-0.559565424919128,0.213157281279564,0.80090606212616,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.940992951393127,0.168072536587715,0.293741136789322,-0.88217681646347,0.30687540769577,0.357199609279633,-0.737271249294281,0.345291316509247,0.580693602561951,-0.786397933959961,0.197700291872025,0.58522891998291,-0.929433286190033,0.240452021360397,0.27988663315773,-0.938261330127716,0.284641981124878,0.196582421660423,-0.88217681646347,0.30687540769577,0.357199609279633,-0.940992951393127,0.168072536587715,0.293741136789322,-0.958487570285797,0.190219804644585,0.212409943342209,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.552518010139465,0.180195555090904,0.813789546489716,-0.619005084037781,0.113047316670418,0.777208507061005,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.529072642326355,0.217875778675079,0.820129454135895,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.35664427280426,-0.676209807395935,0.64462798833847,\n-0.892671883106232,-0.425682097673416,0.14809350669384,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.897795557975769,-0.43993416428566,0.0205198600888252,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.897795557975769,-0.43993416428566,0.0205198600888252,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.749754548072815,-0.661690354347229,-0.00583517225459218,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.749754548072815,-0.661690354347229,-0.00583517225459218,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.386017560958862,-0.663375020027161,0.641033530235291,\n-0.616519212722778,-0.455342262983322,0.642314195632935,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.995428025722504,-0.0233537666499615,-0.0926159843802452,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.571020781993866,-0.291943371295929,0.767270684242249,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.741787433624268,-0.27885103225708,0.609912693500519,-0.44353261590004,0.469896525144577,0.763201177120209,-0.155023440718651,0.460458368062973,0.874039947986603,-0.148301675915718,0.617360651493073,0.772575199604034,-0.487235128879547,0.602307498455048,0.632319211959839,0.0497331917285919,0.445011228322983,0.894142985343933,0.0604556538164616,0.606487095355988,0.792791604995728,-0.148301675915718,0.617360651493073,0.772575199604034,-0.155023440718651,0.460458368062973,0.874039947986603,\n-0.938261330127716,0.284641981124878,0.196582421660423,-0.921404659748077,0.300344526767731,0.246589884161949,-0.854642570018768,0.365032374858856,0.369239091873169,-0.88217681646347,0.30687540769577,0.357199609279633,-0.88217681646347,0.30687540769577,0.357199609279633,-0.854642570018768,0.365032374858856,0.369239091873169,-0.704075336456299,0.454022943973541,0.546022951602936,-0.737271249294281,0.345291316509247,0.580693602561951,-0.715115904808044,0.391270339488983,0.57923811674118,-0.704075336456299,0.454022943973541,0.546022951602936,-0.854642570018768,0.365032374858856,0.369239091873169,-0.878912448883057,0.190948858857155,0.437094360589981,-0.918760776519775,0.045384906232357,0.392197400331497,-0.878912448883057,0.190948858857155,0.437094360589981,-0.854642570018768,0.365032374858856,0.369239091873169,-0.921404659748077,0.300344526767731,0.246589884161949,0.152057304978371,-0.511582612991333,0.845672428607941,0.138299137353897,-0.216322302818298,0.966477155685425,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.0233143605291843,-0.495335191488266,0.868389010429382,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.00260085915215313,-0.437005490064621,0.899455070495605,\n0.028565090149641,-0.175006538629532,0.984152793884277,0.138299137353897,-0.216322302818298,0.966477155685425,0.152057304978371,-0.511582612991333,0.845672428607941,-0.230118215084076,-0.0391505397856236,0.972374856472015,0.028565090149641,-0.175006538629532,0.984152793884277,-0.00260085915215313,-0.437005490064621,0.899455070495605,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.00260085915215313,-0.437005490064621,0.899455070495605,-0.0971510037779808,-0.777255237102509,0.621639728546143,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0971510037779808,-0.777255237102509,0.621639728546143,-0.00260085915215313,-0.437005490064621,0.899455070495605,0.152057304978371,-0.511582612991333,0.845672428607941,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.438927531242371,-0.110836811363697,0.891660153865814,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.913328051567078,0.257958859205246,0.315101653337479,-0.898379147052765,0.257861793041229,0.355558961629868,-0.873595476150513,0.228950142860413,0.429433107376099,-0.927467882633209,0.10914921015501,0.357616752386093,-0.927535772323608,0.260400146245956,0.26808425784111,-0.898379147052765,0.257861793041229,0.355558961629868,-0.913328051567078,0.257958859205246,0.315101653337479,-0.899272859096527,0.337114810943604,0.278679043054581,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.838127374649048,0.00188649771735072,0.545471370220184,\n-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.77647191286087,0.0245032440871,0.629675269126892,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.626672208309174,0.255842447280884,0.736088693141937,-0.669090986251831,0.108672223985195,0.735192239284515,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.10322830080986,-0.541345357894897,0.834439396858215,0.0824021622538567,0.119332544505596,0.98942893743515,0.028565090149641,-0.175006538629532,0.984152793884277,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.129117503762245,0.13854855298996,0.981902718544006,-0.859274387359619,0.29542076587677,0.417581170797348,-0.755013465881348,0.127179101109505,0.64325749874115,-0.847808718681335,0.127517849206924,0.514742314815521,-0.736577808856964,0.297644317150116,0.607339262962341,-0.755013465881348,0.127179101109505,0.64325749874115,-0.859274387359619,0.29542076587677,0.417581170797348,-0.808332681655884,0.323168575763702,0.49209788441658,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.999627947807312,0.018455671146512,0.020082326605916,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.999627947807312,0.018455671146512,0.020082326605916,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.711766242980957,-0.226245254278183,0.664982616901398,\n-0.702881813049316,-0.068748727440834,0.707976579666138,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.354619354009628,-0.125306099653244,0.926576197147369,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.256247758865356,0.183180019259453,0.94909542798996,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.599762678146362,0.237867310643196,0.764005124568939,0.0824021622538567,0.119332544505596,0.98942893743515,-0.129117503762245,0.13854855298996,0.981902718544006,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.0553458705544472,-0.183565944433212,0.981448113918304,0.0824021622538567,0.119332544505596,0.98942893743515,-0.0553458705544472,-0.183565944433212,0.981448113918304,-0.0389158241450787,-0.199694201350212,0.979085206985474,0.0996207222342491,0.155612200498581,0.982782065868378,-0.793161690235138,0.389079302549362,0.468520849943161,-0.788669764995575,0.415443122386932,0.453218460083008,-0.639506042003632,0.483837932348251,0.597438633441925,-0.664581894874573,0.481633543968201,0.571279287338257,-0.38422480225563,0.137366592884064,0.912963151931763,-0.113911136984825,0.222564980387688,0.968240201473236,-0.365421146154404,0.118911430239677,0.923215806484222,-0.215113177895546,0.235299572348595,0.947818756103516,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.110501579940319,0.212603434920311,0.970870316028595,\n-0.0186418443918228,0.221836999058723,0.974905550479889,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.027668621391058,0.211265400052071,0.977037012577057,0.0304032936692238,0.174695551395416,0.984152972698212,0.0344220362603664,0.22930283844471,0.972746253013611,-0.0915354415774345,0.261345416307449,0.960895359516144,0.0284836571663618,0.148866042494774,0.988447070121765,0.0304032936692238,0.174695551395416,0.984152972698212,-0.027668621391058,0.211265400052071,0.977037012577057,0.0340906009078026,0.177746370434761,0.983485698699951,-0.999627947807312,0.018455671146512,0.020082326605916,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.999627947807312,0.018455671146512,0.020082326605916,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.894654810428619,0.0708979144692421,0.441096633672714,-0.708954691886902,-0.0861286148428917,0.69997501373291,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.708954691886902,-0.0861286148428917,0.69997501373291,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.708954691886902,-0.0861286148428917,0.69997501373291,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.912092506885529,0.0284031052142382,0.408999383449554,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.708954691886902,-0.0861286148428917,0.69997501373291,-0.894654810428619,0.0708979144692421,0.441096633672714,\n-0.841734766960144,0.21214547753334,0.496464431285858,-0.721355617046356,0.238694369792938,0.650131583213806,-0.772696316242218,0.194377049803734,0.604282975196838,-0.77285635471344,0.360512226819992,0.522229790687561,-0.772696316242218,0.194377049803734,0.604282975196838,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.807132244110107,0.16207791864872,0.567686796188354,-0.807132244110107,0.16207791864872,0.567686796188354,-0.800202667713165,0.314497977495193,0.510653257369995,-0.77285635471344,0.360512226819992,0.522229790687561,-0.772696316242218,0.194377049803734,0.604282975196838,-0.772696316242218,0.194377049803734,0.604282975196838,-0.721355617046356,0.238694369792938,0.650131583213806,-0.774853527545929,0.101396143436432,0.62395578622818,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.629563450813293,0.348871290683746,0.694218039512634,-0.824751377105713,0.366082817316055,0.431008726358414,-0.8270303606987,0.233872473239899,0.511198997497559,-0.590761244297028,0.21027672290802,0.778963983058929,-0.639506042003632,0.483837932348251,0.597438633441925,-0.788669764995575,0.415443122386932,0.453218460083008,-0.824751377105713,0.366082817316055,0.431008726358414,-0.629563450813293,0.348871290683746,0.694218039512634,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.830214977264404,0.100066982209682,0.548388242721558,-0.809095621109009,0.140354558825493,0.570670545101166,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.956733524799347,-0.225288674235344,0.18413570523262,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.956733524799347,-0.225288674235344,0.18413570523262,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.903163015842438,0.185778304934502,0.387017965316772,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.571020781993866,-0.291943371295929,0.767270684242249,\n-0.573286294937134,-0.272017657756805,0.772883713245392,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.157021999359131,0.633807837963104,-0.757384777069092,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.773173451423645,0.234929323196411,-0.589076459407806,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.963089942932129,0.0112352445721626,0.268945276737213,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.773173451423645,0.234929323196411,-0.589076459407806,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.773173451423645,0.234929323196411,-0.589076459407806,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.773173451423645,0.234929323196411,-0.589076459407806,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.687806069850922,-0.158765524625778,-0.708319365978241,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.687806069850922,-0.158765524625778,-0.708319365978241,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.687806069850922,-0.158765524625778,-0.708319365978241,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.939631521701813,0.153399094939232,0.305877894163132,-0.926795780658722,0.133818626403809,0.3509162068367,-0.97424703836441,0.120223365724087,0.190758988261223,-0.979892313480377,0.170224979519844,0.104088805615902,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.979892313480377,0.170224979519844,0.104088805615902,\n-0.97424703836441,0.120223365724087,0.190758988261223,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.97424703836441,0.120223365724087,0.190758988261223,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.97424703836441,0.120223365724087,0.190758988261223,-0.926795780658722,0.133818626403809,0.3509162068367,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.813457071781158,-0.0988521501421928,0.573162972927094,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.813457071781158,-0.0988521501421928,0.573162972927094,-0.926191806793213,0.116400174796581,0.35863596200943,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.706978023052216,-0.108872137963772,0.698805391788483,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.838247179985046,-0.0138563737273216,0.54511433839798,\n-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.571020781993866,-0.291943371295929,0.767270684242249,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.968295395374298,-0.216806933283806,-0.124091781675816,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.968295395374298,-0.216806933283806,-0.124091781675816,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.968295395374298,-0.216806933283806,-0.124091781675816,-0.971085906028748,-0.227177411317825,0.0733662322163582,\n-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.968295395374298,-0.216806933283806,-0.124091781675816,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.0374716036021709,0.192808955907822,0.98052054643631,0.205764874815941,0.144822359085083,0.967826068401337,0.0744598954916,0.293609887361526,0.953020930290222,0.139874473214149,0.332423865795136,0.932700097560883,-0.0374716036021709,0.192808955907822,0.98052054643631,-0.069260835647583,0.0269219465553761,0.997235238552094,0.244968578219414,-0.0767860040068626,0.966485559940338,0.205764874815941,0.144822359085083,0.967826068401337,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.995428025722504,-0.0233537666499615,-0.0926159843802452,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.0528050363063812,-0.813004612922668,0.579857885837555,-0.0787478685379028,-0.96028345823288,-0.26768359541893,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.813457071781158,-0.0988521501421928,0.573162972927094,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.813457071781158,-0.0988521501421928,0.573162972927094,\n-0.910947680473328,-0.114077113568783,0.396435052156448,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.926191806793213,0.116400174796581,0.35863596200943,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.256247758865356,0.183180019259453,0.94909542798996,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.438927531242371,-0.110836811363697,0.891660153865814,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.985882997512817,0.0816566720604897,0.146174341440201,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.985882997512817,0.0816566720604897,0.146174341440201,-0.910772800445557,0.214318007230759,0.352931588888168,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.00449910387396812,-0.161412835121155,0.986876726150513,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.00140566960908473,-0.234566405415535,0.97209906578064,-0.00386956869624555,-0.264760941267014,0.964306354522705,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.394418269395828,-0.115748293697834,0.911612093448639,0.00449910387396812,-0.161412835121155,0.986876726150513,\n0.0111285699531436,-0.0777815505862236,0.9969083070755,-0.397862493991852,-0.0639909207820892,0.915210664272308,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.905546963214874,-0.0230849031358957,0.423617511987686,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.905546963214874,-0.0230849031358957,0.423617511987686,0.409033417701721,0.056328222155571,-0.910779237747192,0.555061399936676,0.0270265471190214,-0.831370174884796,0.590149700641632,0.106324933469296,-0.800261437892914,0.426036864519119,0.191680565476418,-0.884166955947876,0.52705591917038,-0.123320385813713,-0.840835392475128,0.555061399936676,0.0270265471190214,-0.831370174884796,0.409033417701721,0.056328222155571,-0.910779237747192,0.482761442661285,-0.152583673596382,-0.862357020378113,-0.903163015842438,0.185778304934502,0.387017965316772,-0.864785015583038,0.227262705564499,0.447770565748215,-0.907959640026093,0.246083408594131,0.339193552732468,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.978964686393738,0.106371738016605,0.174106821417809,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.907959640026093,0.246083408594131,0.339193552732468,-0.93869537115097,0.246357470750809,0.241161808371544,-0.927535772323608,0.260400146245956,0.26808425784111,-0.93869537115097,0.246357470750809,0.241161808371544,-0.907959640026093,0.246083408594131,0.339193552732468,-0.898379147052765,0.257861793041229,0.355558961629868,-0.873595476150513,0.228950142860413,0.429433107376099,-0.898379147052765,0.257861793041229,0.355558961629868,-0.907959640026093,0.246083408594131,0.339193552732468,-0.864785015583038,0.227262705564499,0.447770565748215,\n-0.912839949131012,0.366738528013229,0.179516360163689,-0.951293051242828,0.220237165689468,0.215724766254425,-0.938549876213074,0.168846443295479,0.301023334264755,-0.917084217071533,0.247074887156487,0.312906622886658,-0.922440767288208,0.315537393093109,0.222573891282082,-0.930616736412048,0.324010014533997,0.170205876231194,-0.920456767082214,0.196246728301048,0.338003754615784,-0.90205317735672,0.348495870828629,0.25465789437294,-0.913878262042999,0.245342120528221,0.323471456766129,-0.933935105800629,0.157070308923721,0.321082711219788,-0.92311555147171,0.291509866714478,0.250758200883865,-0.917084217071533,0.247074887156487,0.312906622886658,-0.913878262042999,0.245342120528221,0.323471456766129,-0.90205317735672,0.348495870828629,0.25465789437294,-0.899272859096527,0.337114810943604,0.278679043054581,-0.92311555147171,0.291509866714478,0.250758200883865,-0.935693740844727,0.265559196472168,0.232283264398575,-0.90205317735672,0.348495870828629,0.25465789437294,-0.90205317735672,0.348495870828629,0.25465789437294,-0.935693740844727,0.265559196472168,0.232283264398575,-0.927535772323608,0.260400146245956,0.26808425784111,-0.899272859096527,0.337114810943604,0.278679043054581,-0.913328051567078,0.257958859205246,0.315101653337479,-0.922440767288208,0.315537393093109,0.222573891282082,-0.917084217071533,0.247074887156487,0.312906622886658,-0.899272859096527,0.337114810943604,0.278679043054581,-0.927467882633209,0.10914921015501,0.357616752386093,-0.951293051242828,0.220237165689468,0.215724766254425,-0.922440767288208,0.315537393093109,0.222573891282082,-0.913328051567078,0.257958859205246,0.315101653337479,0.636519849300385,0.647450149059296,-0.419107168912888,0.904918491840363,0.223670721054077,-0.362068980932236,0.611642181873322,0.428768634796143,-0.664869368076324,0.904918491840363,0.223670721054077,-0.362068980932236,0.699705183506012,0.427644014358521,-0.572305202484131,0.622634530067444,0.273028820753098,-0.733335912227631,0.611642181873322,0.428768634796143,-0.664869368076324,-0.111326843500137,-0.985514283180237,0.127937391400337,\n-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.111326843500137,-0.985514283180237,0.127937391400337,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.523851454257965,-0.504004776477814,0.686701416969299,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.947893738746643,-0.165305480360985,0.272344529628754,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.947893738746643,-0.165305480360985,0.272344529628754,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.908703505992889,-0.107983402907848,-0.403233885765076,\n-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.493933469057083,-0.226954907178879,0.839357614517212,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.764369487762451,-0.100322350859642,0.636926054954529,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.764369487762451,-0.100322350859642,0.636926054954529,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.233382239937782,0.37978932261467,0.8951495885849,0.00488457176834345,0.505567967891693,0.862772941589355,-0.233382239937782,0.37978932261467,0.8951495885849,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.559565424919128,0.213157281279564,0.80090606212616,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.493933469057083,-0.226954907178879,0.839357614517212,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.559565424919128,0.213157281279564,0.80090606212616,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.673958420753479,0.316827058792114,-0.66738349199295,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.673958420753479,0.316827058792114,-0.66738349199295,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.91798335313797,-0.00180715974420309,-0.396614909172058,\n-0.948787927627563,-0.18914021551609,0.25303652882576,-0.926066279411316,-0.206412896513939,0.315903395414352,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.91798335313797,-0.00180715974420309,-0.396614909172058,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.766225039958954,-0.486649185419083,0.419609010219574,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.847999572753906,0.148594439029694,0.50874000787735,-0.933067381381989,0.178451672196388,0.312314331531525,-0.789937257766724,-0.089169554412365,0.606669545173645,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.838507175445557,0.0982540920376778,0.535958766937256,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.789937257766724,-0.089169554412365,0.606669545173645,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.767987847328186,-0.497150540351868,0.403777122497559,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.767987847328186,-0.497150540351868,0.403777122497559,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.767987847328186,-0.497150540351868,0.403777122497559,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.851623713970184,0.0635921731591225,0.520281732082367,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.812781035900116,0.145446926355362,0.564120769500732,-0.812781035900116,0.145446926355362,0.564120769500732,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.869927883148193,0.417829841375351,0.261999487876892,-0.917095720767975,0.0718847438693047,0.392132639884949,\n-0.851623713970184,0.0635921731591225,0.520281732082367,-0.812781035900116,0.145446926355362,0.564120769500732,-0.741121232509613,0.0951398462057114,0.664595901966095,-0.725173890590668,0.124969810247421,0.677130281925201,-0.741121232509613,0.0951398462057114,0.664595901966095,-0.812781035900116,0.145446926355362,0.564120769500732,-0.737713038921356,0.159859821200371,0.655914902687073,-0.686445116996765,0.270512044429779,0.674993574619293,-0.737713038921356,0.159859821200371,0.655914902687073,-0.812781035900116,0.145446926355362,0.564120769500732,-0.869927883148193,0.417829841375351,0.261999487876892,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.00275634881108999,-0.768494009971619,-0.639851033687592,0.675393164157867,-0.663666367530823,-0.321544677019119,-0.00275634881108999,-0.768494009971619,-0.639851033687592,-0.189235538244247,-0.947714388370514,-0.256957918405533,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.531938970088959,-0.742404460906982,0.407279402017593,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.63937246799469,-0.666334867477417,0.383667439222336,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.63937246799469,-0.666334867477417,0.383667439222336,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.63937246799469,-0.666334867477417,0.383667439222336,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.789937257766724,-0.089169554412365,0.606669545173645,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.741121232509613,0.0951398462057114,0.664595901966095,-0.725173890590668,0.124969810247421,0.677130281925201,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.741121232509613,0.0951398462057114,0.664595901966095,\n-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.905546963214874,-0.0230849031358957,0.423617511987686,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.905546963214874,-0.0230849031358957,0.423617511987686,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.63937246799469,-0.666334867477417,0.383667439222336,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.233382239937782,0.37978932261467,0.8951495885849,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.616599321365356,0.328253507614136,0.715580105781555,-0.570039451122284,0.607050001621246,0.553665339946747,-0.616599321365356,0.328253507614136,0.715580105781555,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.0140273822471499,0.873466432094574,0.486682236194611,0.545511066913605,0.803328096866608,0.238917589187622,-0.0140273822471499,0.873466432094574,0.486682236194611,-0.0990706533193588,0.626940011978149,0.772742688655853,0.0937898680567741,0.660230219364166,0.745184183120728,0.517754137516022,0.73391991853714,0.439650118350983,0.0937898680567741,0.660230219364166,0.745184183120728,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.233382239937782,0.37978932261467,0.8951495885849,0.00488457176834345,0.505567967891693,0.862772941589355,-0.00293335225433111,0.995907425880432,0.0903318226337433,-0.58504182100296,0.777154207229614,0.23185633122921,-0.570039451122284,0.607050001621246,0.553665339946747,-0.0140273822471499,0.873466432094574,0.486682236194611,-0.00293335225433111,0.995907425880432,0.0903318226337433,-0.0140273822471499,0.873466432094574,0.486682236194611,0.545511066913605,0.803328096866608,0.238917589187622,0.61859929561615,0.783204674720764,-0.0626528933644295,0.622634530067444,0.273028820753098,-0.733335912227631,0.0131716737523675,0.392405301332474,-0.919698059558868,0.0255556665360928,0.675508499145508,-0.736909151077271,0.611642181873322,0.428768634796143,-0.664869368076324,0.636519849300385,0.647450149059296,-0.419107168912888,0.611642181873322,0.428768634796143,-0.664869368076324,\n0.0255556665360928,0.675508499145508,-0.736909151077271,0.00320792081765831,0.937661468982697,-0.347535103559494,-0.664545059204102,0.734579563140869,-0.137013539671898,0.00320792081765831,0.937661468982697,-0.347535103559494,0.0255556665360928,0.675508499145508,-0.736909151077271,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.730222046375275,0.28398671746254,-0.621391415596008,-0.714973926544189,0.530257403850555,-0.455674588680267,0.0255556665360928,0.675508499145508,-0.736909151077271,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.754495441913605,-0.0462081357836723,-0.654676616191864,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.0128433015197515,0.17829929292202,-0.983892500400543,-0.0574504472315311,0.0463431552052498,-0.997272133827209,0.590149700641632,0.106324933469296,-0.800261437892914,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.0128433015197515,0.17829929292202,-0.983892500400543,0.618943631649017,0.169027715921402,-0.767032206058502,0.622634530067444,0.273028820753098,-0.733335912227631,0.618943631649017,0.169027715921402,-0.767032206058502,-0.0128433015197515,0.17829929292202,-0.983892500400543,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.730222046375275,0.28398671746254,-0.621391415596008,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.0128433015197515,0.17829929292202,-0.983892500400543,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.258316278457642,-0.4798983335495,-0.83843320608139,-0.236963242292404,-0.687786102294922,-0.686147749423981,0.614885807037354,-0.39096936583519,-0.684878408908844,-0.236963242292404,-0.687786102294922,-0.686147749423981,-0.258316278457642,-0.4798983335495,-0.83843320608139,0.5450439453125,-0.288073390722275,-0.787363231182098,0.52705591917038,-0.123320385813713,-0.840835392475128,0.5450439453125,-0.288073390722275,-0.787363231182098,-0.258316278457642,-0.4798983335495,-0.83843320608139,\n-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.808649599552155,-0.254309177398682,-0.530483365058899,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.258316278457642,-0.4798983335495,-0.83843320608139,-0.849323332309723,-0.375679105520248,-0.37083026766777,0.5450439453125,-0.288073390722275,-0.787363231182098,0.52705591917038,-0.123320385813713,-0.840835392475128,0.482761442661285,-0.152583673596382,-0.862357020378113,0.725502192974091,-0.203444570302963,-0.657462477684021,0.614885807037354,-0.39096936583519,-0.684878408908844,0.5450439453125,-0.288073390722275,-0.787363231182098,0.725502192974091,-0.203444570302963,-0.657462477684021,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.093654952943325,-0.971795976161957,-0.216428592801094,0.652852118015289,-0.584342896938324,-0.482003599405289,0.675393164157867,-0.663666367530823,-0.321544677019119,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.093654952943325,-0.971795976161957,-0.216428592801094,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.367999702692032,-0.664126336574554,-0.650778293609619,0.675393164157867,-0.663666367530823,-0.321544677019119,0.652852118015289,-0.584342896938324,-0.482003599405289,0.496177941560745,-0.590101897716522,-0.636857271194458,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.943170547485352,-0.286243259906769,0.168802037835121,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.764369487762451,-0.100322350859642,0.636926054954529,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.764369487762451,-0.100322350859642,0.636926054954529,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.978256165981293,-0.198640391230583,0.0596392676234245,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.978256165981293,-0.198640391230583,0.0596392676234245,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.824822843074799,-0.272803068161011,-0.495222896337509,-0.752913534641266,-0.48444265127182,-0.445462107658386,\n-0.824822843074799,-0.272803068161011,-0.495222896337509,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.943170547485352,-0.286243259906769,0.168802037835121,-0.570039451122284,0.607050001621246,0.553665339946747,-0.921134054660797,-0.0515539050102234,0.385816305875778,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.616599321365356,0.328253507614136,0.715580105781555,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.616599321365356,0.328253507614136,0.715580105781555,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.943170547485352,-0.286243259906769,0.168802037835121,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.943170547485352,-0.286243259906769,0.168802037835121,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.695510506629944,-0.654881238937378,-0.295627743005753,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.695510506629944,-0.654881238937378,-0.295627743005753,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.921134054660797,-0.0515539050102234,0.385816305875778,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.51134991645813,-0.634139060974121,0.579990446567535,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.51134991645813,-0.634139060974121,0.579990446567535,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.803909718990326,-0.356574565172195,0.476008087396622,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.803909718990326,-0.356574565172195,0.476008087396622,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.493933469057083,-0.226954907178879,0.839357614517212,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.493933469057083,-0.226954907178879,0.839357614517212,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.978256165981293,-0.198640391230583,0.0596392676234245,\n-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.803909718990326,-0.356574565172195,0.476008087396622,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.803909718990326,-0.356574565172195,0.476008087396622,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.982640624046326,-0.149156004190445,0.110317416489124,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.982640624046326,-0.149156004190445,0.110317416489124,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.917778551578522,0.114838451147079,-0.380124539136887,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.917778551578522,0.114838451147079,-0.380124539136887,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.978256165981293,-0.198640391230583,0.0596392676234245,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.61400443315506,-0.715833127498627,0.332537919282913,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.61400443315506,-0.715833127498627,0.332537919282913,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.848238348960876,-0.444671392440796,0.287678778171539,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.848238348960876,-0.444671392440796,0.287678778171539,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.51134991645813,-0.634139060974121,0.579990446567535,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.51134991645813,-0.634139060974121,0.579990446567535,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.868073582649231,-0.440582573413849,0.22876900434494,\n-0.848238348960876,-0.444671392440796,0.287678778171539,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.984983623027802,-0.0637645348906517,0.160440966486931,-0.796527564525604,0.591128647327423,0.126928299665451,-0.984983623027802,-0.0637645348906517,0.160440966486931,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.87463504076004,0.473409682512283,-0.104387812316418,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.87463504076004,0.473409682512283,-0.104387812316418,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.982640624046326,-0.149156004190445,0.110317416489124,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.982640624046326,-0.149156004190445,0.110317416489124,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.848238348960876,-0.444671392440796,0.287678778171539,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.735289394855499,-0.208703994750977,0.644819438457489,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.919459879398346,-0.367317616939545,0.14025442302227,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.919459879398346,-0.367317616939545,0.14025442302227,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.735289394855499,-0.208703994750977,0.644819438457489,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.984983623027802,-0.0637645348906517,0.160440966486931,-0.796527564525604,0.591128647327423,0.126928299665451,-0.847999572753906,0.148594439029694,0.50874000787735,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.984983623027802,-0.0637645348906517,0.160440966486931,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.951689600944519,0.131448090076447,0.277503579854965,\n-0.913889706134796,0.158398613333702,-0.373785316944122,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.673958420753479,0.316827058792114,-0.66738349199295,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.951689600944519,0.131448090076447,0.277503579854965,-0.827955782413483,0.533315181732178,0.173390194773674,-0.501976847648621,0.497314512729645,0.707599818706512,-0.827955782413483,0.533315181732178,0.173390194773674,-0.951689600944519,0.131448090076447,0.277503579854965,-0.664353311061859,0.186838954687119,0.723689079284668,-0.735289394855499,-0.208703994750977,0.644819438457489,-0.664353311061859,0.186838954687119,0.723689079284668,-0.951689600944519,0.131448090076447,0.277503579854965,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.738919854164124,0.67080682516098,0.0633690059185028,-0.869927883148193,0.417829841375351,0.261999487876892,-0.686445116996765,0.270512044429779,0.674993574619293,-0.869927883148193,0.417829841375351,0.261999487876892,-0.738919854164124,0.67080682516098,0.0633690059185028,-0.492774546146393,0.528099179267883,0.691581189632416,-0.501976847648621,0.497314512729645,0.707599818706512,-0.492774546146393,0.528099179267883,0.691581189632416,-0.738919854164124,0.67080682516098,0.0633690059185028,-0.827955782413483,0.533315181732178,0.173390194773674,-0.673958420753479,0.316827058792114,-0.66738349199295,-0.827955782413483,0.533315181732178,0.173390194773674,-0.738919854164124,0.67080682516098,0.0633690059185028,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.992319107055664,-0.0605176463723183,0.10789081454277,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.712439298629761,-0.0633224174380302,0.698870837688446,-0.685857892036438,-0.122487917542458,0.717353284358978,\n-0.992319107055664,-0.0605176463723183,0.10789081454277,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.754495441913605,-0.0462081357836723,-0.654676616191864,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.992319107055664,-0.0605176463723183,0.10789081454277,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.730222046375275,0.28398671746254,-0.621391415596008,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.992319107055664,-0.0605176463723183,0.10789081454277,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.982984185218811,-0.0105124665424228,0.18338917195797,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.982984185218811,-0.0105124665424228,0.18338917195797,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.730222046375275,0.28398671746254,-0.621391415596008,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.982984185218811,-0.0105124665424228,0.18338917195797,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.664545059204102,0.734579563140869,-0.137013539671898,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.982984185218811,-0.0105124665424228,0.18338917195797,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.712439298629761,-0.0633224174380302,0.698870837688446,\n-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.946361243724823,0.305759787559509,-0.104457549750805,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.858525216579437,0.180895999073982,0.479803144931793,-0.924713611602783,0.349783033132553,0.150188326835632,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.946361243724823,0.305759787559509,-0.104457549750805,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.946361243724823,0.305759787559509,-0.104457549750805,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.946361243724823,0.305759787559509,-0.104457549750805,-0.924713611602783,0.349783033132553,0.150188326835632,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.526414215564728,0.148685231804848,0.837126493453979,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.926066279411316,-0.206412896513939,0.315903395414352,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.858525216579437,0.180895999073982,0.479803144931793,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.526414215564728,0.148685231804848,0.837126493453979,-0.534013271331787,-0.0607958026230335,0.843287467956543,\n-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.847999572753906,0.148594439029694,0.50874000787735,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.766225039958954,-0.486649185419083,0.419609010219574,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.933067381381989,0.178451672196388,0.312314331531525,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.933067381381989,0.178451672196388,0.312314331531525,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.766225039958954,-0.486649185419083,0.419609010219574,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.933067381381989,0.178451672196388,0.312314331531525,-0.796527564525604,0.591128647327423,0.126928299665451,-0.87463504076004,0.473409682512283,-0.104387812316418,\n-0.838545083999634,0.518301904201508,-0.167944431304932,-0.87463504076004,0.473409682512283,-0.104387812316418,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.917778551578522,0.114838451147079,-0.380124539136887,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.917778551578522,0.114838451147079,-0.380124539136887,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.824822843074799,-0.272803068161011,-0.495222896337509,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.931157529354095,-0.304730832576752,-0.200211733579636,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.824822843074799,-0.272803068161011,-0.495222896337509,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.695510506629944,-0.654881238937378,-0.295627743005753,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.695510506629944,-0.654881238937378,-0.295627743005753,-0.854056000709534,-0.505750417709351,-0.121675431728363,\n-0.931157529354095,-0.304730832576752,-0.200211733579636,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.664545059204102,0.734579563140869,-0.137013539671898,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.58504182100296,0.777154207229614,0.23185633122921,-0.921134054660797,-0.0515539050102234,0.385816305875778,-0.570039451122284,0.607050001621246,0.553665339946747,-0.58504182100296,0.777154207229614,0.23185633122921,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.921134054660797,-0.0515539050102234,0.385816305875778,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.939273297786713,-0.163695856928825,0.301611185073853,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.889755249023438,0.104038514196873,0.444422751665115,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.939273297786713,-0.163695856928825,0.301611185073853,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.838507175445557,0.0982540920376778,0.535958766937256,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.939273297786713,-0.163695856928825,0.301611185073853,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.939273297786713,-0.163695856928825,0.301611185073853,\n-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.889755249023438,0.104038514196873,0.444422751665115,-0.880822539329529,0.116122722625732,0.458984851837158,-0.981129169464111,-0.164403110742569,0.101770125329494,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.981129169464111,-0.164403110742569,0.101770125329494,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.808649599552155,-0.254309177398682,-0.530483365058899,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.981129169464111,-0.164403110742569,0.101770125329494,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.981129169464111,-0.164403110742569,0.101770125329494,-0.880822539329529,0.116122722625732,0.458984851837158,-0.880822539329529,0.116122722625732,0.458984851837158,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.93205326795578,-0.0207287091761827,0.361727833747864,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.880822539329529,0.116122722625732,0.458984851837158,-0.889755249023438,0.104038514196873,0.444422751665115,-0.725173890590668,0.124969810247421,0.677130281925201,-0.737713038921356,0.159859821200371,0.655914902687073,-0.686445116996765,0.270512044429779,0.674993574619293,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.823492228984833,0.0713645666837692,0.56282114982605,-0.823492228984833,0.0713645666837692,0.56282114982605,-0.838507175445557,0.0982540920376778,0.535958766937256,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.725173890590668,0.124969810247421,0.677130281925201,-0.824534773826599,0.090426079928875,0.558538734912872,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.878240346908569,-0.202826589345932,-0.433076530694962,\n-0.931157529354095,-0.304730832576752,-0.200211733579636,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.824534773826599,0.090426079928875,0.558538734912872,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.858525216579437,0.180895999073982,0.479803144931793,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.75360506772995,0.135660916566849,0.643176138401031,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.75360506772995,0.135660916566849,0.643176138401031,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.974564790725708,-0.215875864028931,0.0601753368973732,-0.828934848308563,0.145112335681915,0.540193796157837,-0.788419961929321,0.211842447519302,0.577509045600891,-0.828934848308563,0.145112335681915,0.540193796157837,-0.974564790725708,-0.215875864028931,0.0601753368973732,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.93205326795578,-0.0207287091761827,0.361727833747864,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.974564790725708,-0.215875864028931,0.0601753368973732,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.974564790725708,-0.215875864028931,0.0601753368973732,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.93205326795578,-0.0207287091761827,0.361727833747864,\n-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.788419961929321,0.211842447519302,0.577509045600891,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.700570464134216,0.212181925773621,0.681307435035706,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.823492228984833,0.0713645666837692,0.56282114982605,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.686445116996765,0.270512044429779,0.674993574619293,-0.492774546146393,0.528099179267883,0.691581189632416,-0.440651565790176,0.368113547563553,0.818729877471924,-0.596545398235321,0.216776832938194,0.772749245166779,-0.501976847648621,0.497314512729645,0.707599818706512,-0.438916772603989,0.289704263210297,0.850543081760406,-0.440651565790176,0.368113547563553,0.818729877471924,-0.492774546146393,0.528099179267883,0.691581189632416,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.683301508426666,0.245855435729027,0.687498509883881,-0.809978306293488,0.193161576986313,0.55373615026474,\n-0.916797280311584,-0.182094678282738,0.355421304702759,-0.809978306293488,0.193161576986313,0.55373615026474,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.926066279411316,-0.206412896513939,0.315903395414352,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.91798335313797,-0.00180715974420309,-0.396614909172058,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.91798335313797,-0.00180715974420309,-0.396614909172058,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.946118652820587,-0.0995350033044815,0.308143347501755,\n-0.712439298629761,-0.0633224174380302,0.698870837688446,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.754495441913605,-0.0462081357836723,-0.654676616191864,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.991874754428864,-0.114014439284801,0.0564371794462204,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.712439298629761,-0.0633224174380302,0.698870837688446,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.991874754428864,-0.114014439284801,0.0564371794462204,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.991874754428864,-0.114014439284801,0.0564371794462204,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.808649599552155,-0.254309177398682,-0.530483365058899,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.991874754428864,-0.114014439284801,0.0564371794462204,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.808649599552155,-0.254309177398682,-0.530483365058899,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.120517827570438,-0.0717617943882942,-0.990113973617554,-0.203820779919624,-0.25819143652916,-0.944348573684692,0.52705591917038,-0.123320385813713,-0.840835392475128,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.120517827570438,-0.0717617943882942,-0.990113973617554,0.555061399936676,0.0270265471190214,-0.831370174884796,0.590149700641632,0.106324933469296,-0.800261437892914,0.555061399936676,0.0270265471190214,-0.831370174884796,-0.120517827570438,-0.0717617943882942,-0.990113973617554,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.754495441913605,-0.0462081357836723,-0.654676616191864,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.120517827570438,-0.0717617943882942,-0.990113973617554,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.93372631072998,0.331273853778839,-0.13569375872612,\n-0.804162800312042,0.470207631587982,-0.363630294799805,-0.963089942932129,0.0112352445721626,0.268945276737213,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.157021999359131,0.633807837963104,-0.757384777069092,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.157021999359131,0.633807837963104,-0.757384777069092,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.919459879398346,-0.367317616939545,0.14025442302227,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.919459879398346,-0.367317616939545,0.14025442302227,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.841246128082275,0.241770818829536,0.483582258224487,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.841246128082275,0.241770818829536,0.483582258224487,-0.75360506772995,0.135660916566849,0.643176138401031,-0.858525216579437,0.180895999073982,0.479803144931793,-0.75360506772995,0.135660916566849,0.643176138401031,-0.841246128082275,0.241770818829536,0.483582258224487,-0.924713611602783,0.349783033132553,0.150188326835632,-0.931157529354095,-0.304730832576752,-0.200211733579636,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.824534773826599,0.090426079928875,0.558538734912872,\n-0.824534773826599,0.090426079928875,0.558538734912872,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.526414215564728,0.148685231804848,0.837126493453979,-0.535982131958008,0.386546611785889,0.750536382198334,-0.683301508426666,0.245855435729027,0.687498509883881,-0.683301508426666,0.245855435729027,0.687498509883881,-0.535982131958008,0.386546611785889,0.750536382198334,-0.588370680809021,0.464889794588089,0.661587059497833,-0.809978306293488,0.193161576986313,0.55373615026474,-0.788419961929321,0.211842447519302,0.577509045600891,-0.588370680809021,0.464889794588089,0.661587059497833,-0.535982131958008,0.386546611785889,0.750536382198334,-0.828934848308563,0.145112335681915,0.540193796157837,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.828934848308563,0.145112335681915,0.540193796157837,-0.535982131958008,0.386546611785889,0.750536382198334,-0.526414215564728,0.148685231804848,0.837126493453979,-0.440651565790176,0.368113547563553,0.818729877471924,-0.571967780590057,0.37627837061882,0.728880941867828,-0.700570464134216,0.212181925773621,0.681307435035706,-0.596545398235321,0.216776832938194,0.772749245166779,-0.788419961929321,0.211842447519302,0.577509045600891,-0.700570464134216,0.212181925773621,0.681307435035706,\n-0.571967780590057,0.37627837061882,0.728880941867828,-0.588370680809021,0.464889794588089,0.661587059497833,-0.809978306293488,0.193161576986313,0.55373615026474,-0.588370680809021,0.464889794588089,0.661587059497833,-0.571967780590057,0.37627837061882,0.728880941867828,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.438916772603989,0.289704263210297,0.850543081760406,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.571967780590057,0.37627837061882,0.728880941867828,-0.440651565790176,0.368113547563553,0.818729877471924,-0.926066279411316,-0.206412896513939,0.315903395414352,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.00275634881108999,-0.768494009971619,-0.639851033687592,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.00275634881108999,-0.768494009971619,-0.639851033687592,0.675393164157867,-0.663666367530823,-0.321544677019119,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.884575426578522,-0.272238790988922,0.378698289394379,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.884575426578522,-0.272238790988922,0.378698289394379,-0.933359444141388,0.180034801363945,-0.310527950525284,\n-0.884575426578522,-0.272238790988922,0.378698289394379,-0.899577915668488,-0.399587064981461,0.176322862505913,0.045425571501255,0.382962375879288,0.922646403312683,-0.125368878245354,0.424985140562058,0.896476626396179,-0.0915354415774345,0.261345416307449,0.960895359516144,0.0344220362603664,0.22930283844471,0.972746253013611,-0.933067381381989,0.178451672196388,0.312314331531525,-0.847999572753906,0.148594439029694,0.50874000787735,-0.796527564525604,0.591128647327423,0.126928299665451,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.847999572753906,0.148594439029694,0.50874000787735,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.61400443315506,-0.715833127498627,0.332537919282913,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.963089942932129,0.0112352445721626,0.268945276737213,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.859187364578247,-0.159860625863075,0.486046999692917,\n-0.895342886447906,-0.199058875441551,0.398417770862579,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.851623713970184,0.0635921731591225,0.520281732082367,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.963089942932129,0.0112352445721626,0.268945276737213,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.910594463348389,-0.0996595025062561,0.401105612516403,0.401222288608551,-0.244348540902138,-0.882787883281708,0.392777740955353,-0.563973963260651,-0.726401448249817,0.645713806152344,-0.220039650797844,-0.731188178062439,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.401222288608551,-0.244348540902138,-0.882787883281708,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.387454837560654,-0.142215475440025,-0.910853147506714,\n0.323159694671631,-0.226072624325752,-0.918944478034973,0.401222288608551,-0.244348540902138,-0.882787883281708,0.323159694671631,-0.226072624325752,-0.918944478034973,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.07368503510952,-0.326217710971832,-0.942418456077576,0.401222288608551,-0.244348540902138,-0.882787883281708,0.07368503510952,-0.326217710971832,-0.942418456077576,-0.0193124283105135,-0.74210524559021,-0.670005083084106,0.392777740955353,-0.563973963260651,-0.726401448249817,-0.0362379811704159,-0.262005388736725,-0.964385807514191,-0.0370321683585644,-0.265117049217224,-0.96350485086441,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.0825362652540207,-0.192694559693336,-0.977781474590302,-0.070097453892231,-0.765305280685425,-0.639839172363281,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.576868414878845,0.0959631279110909,-0.811180531978607,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.773029983043671,-0.340951681137085,-0.534954726696014,0.646651268005371,0.172121793031693,-0.743112564086914,0.576868414878845,0.0959631279110909,-0.811180531978607,0.646651268005371,0.172121793031693,-0.743112564086914,0.364371746778488,-0.284274369478226,-0.886803984642029,0.329197883605957,-0.229186490178108,-0.916025280952454,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.0723719522356987,-0.219757899641991,-0.972866296768188,-0.0825362652540207,-0.192694559693336,-0.977781474590302,0.0849056839942932,-0.303190618753433,-0.949139893054962,-0.0723719522356987,-0.219757899641991,-0.972866296768188,-0.139740735292435,-0.294080168008804,-0.945510149002075,0.07368503510952,-0.326217710971832,-0.942418456077576,-0.0193124283105135,-0.74210524559021,-0.670005083084106,0.07368503510952,-0.326217710971832,-0.942418456077576,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.208596497774124,-0.74006187915802,-0.639371454715729,\n-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.208596497774124,-0.74006187915802,-0.639371454715729,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.1309574842453,-0.264535874128342,-0.955442786216736,0.30904021859169,0.371187627315521,-0.875621974468231,0.327664911746979,0.551296949386597,-0.767272710800171,0.298426777124405,0.233343333005905,-0.925468742847443,0.256420314311981,0.112910509109497,-0.959947824478149,0.30904021859169,0.371187627315521,-0.875621974468231,0.256420314311981,0.112910509109497,-0.959947824478149,0.329279124736786,0.0702807679772377,-0.941613435745239,0.532891869544983,0.203911662101746,-0.821246802806854,0.327664911746979,0.551296949386597,-0.767272710800171,0.201275274157524,0.759530663490295,-0.618547856807709,0.171656653285027,0.421078413724899,-0.890632927417755,0.298426777124405,0.233343333005905,-0.925468742847443,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.66732919216156,0.285801827907562,-0.687742054462433,0.461978673934937,0.681396842002869,-0.567691802978516,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.66732919216156,0.285801827907562,-0.687742054462433,0.913814067840576,-0.0522273704409599,-0.402760744094849,-0.134053289890289,0.873388648033142,-0.468211501836777,0.461978673934937,0.681396842002869,-0.567691802978516,0.66732919216156,0.285801827907562,-0.687742054462433,0.260891646146774,0.576647460460663,-0.774217784404755,0.66732919216156,0.285801827907562,-0.687742054462433,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.260891646146774,0.576647460460663,-0.774217784404755,0.0610933229327202,0.52752286195755,-0.847341299057007,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0339763574302197,0.937289535999298,-0.346891850233078,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.171656653285027,0.421078413724899,-0.890632927417755,0.201275274157524,0.759530663490295,-0.618547856807709,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0610933229327202,0.52752286195755,-0.847341299057007,\n0.784418284893036,-0.0482183061540127,-0.61835503578186,0.532891869544983,0.203911662101746,-0.821246802806854,0.329279124736786,0.0702807679772377,-0.941613435745239,0.574346244335175,0.00941364839673042,-0.81855833530426,0.784418284893036,-0.0482183061540127,-0.61835503578186,0.574346244335175,0.00941364839673042,-0.81855833530426,0.74884694814682,0.0258232615888119,-0.662239730358124,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.894509136676788,-0.20981177687645,-0.394756108522415,0.8075070977211,-0.171400144696236,-0.564406096935272,0.704347848892212,-0.492557406425476,-0.511156857013702,0.777899026870728,-0.433716207742691,-0.454712390899658,0.792737483978271,-0.494514644145966,-0.356402337551117,0.777899026870728,-0.433716207742691,-0.454712390899658,0.704347848892212,-0.492557406425476,-0.511156857013702,0.648240566253662,-0.463475733995438,-0.604131102561951,0.713780462741852,-0.04316745698452,-0.699037969112396,0.648240566253662,-0.463475733995438,-0.604131102561951,0.704347848892212,-0.492557406425476,-0.511156857013702,0.8075070977211,-0.171400144696236,-0.564406096935272,0.886527955532074,0.0429748557507992,-0.460674852132797,0.75768917798996,0.1346725076437,-0.638569056987762,0.769487977027893,0.440927565097809,-0.462029308080673,0.910501658916473,0.0911831632256508,-0.403326570987701,0.769487977027893,0.440927565097809,-0.462029308080673,0.75768917798996,0.1346725076437,-0.638569056987762,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.890664577484131,-0.0774205401539803,0.448020815849304,0.849142253398895,-0.224129945039749,0.478250175714493,0.966342151165009,-0.0820774585008621,-0.243815749883652,0.955755293369293,-0.11410153657198,-0.27113202214241,0.894509136676788,-0.20981177687645,-0.394756108522415,0.955755293369293,-0.11410153657198,-0.27113202214241,0.966342151165009,-0.0820774585008621,-0.243815749883652,0.936679661273956,0.0184381268918514,-0.349701732397079,0.673712253570557,-0.610602140426636,-0.416265428066254,0.936679661273956,0.0184381268918514,-0.349701732397079,\n0.966342151165009,-0.0820774585008621,-0.243815749883652,0.670762062072754,-0.708589673042297,-0.219041094183922,0.572986006736755,-0.752050638198853,0.325740456581116,0.670762062072754,-0.708589673042297,-0.219041094183922,0.966342151165009,-0.0820774585008621,-0.243815749883652,0.849142253398895,-0.224129945039749,0.478250175714493,0.769487977027893,0.440927565097809,-0.462029308080673,0.771759808063507,0.606137216091156,-0.19231353700161,0.910501658916473,0.0911831632256508,-0.403326570987701,0.886527955532074,0.0429748557507992,-0.460674852132797,0.910501658916473,0.0911831632256508,-0.403326570987701,0.771759808063507,0.606137216091156,-0.19231353700161,0.959632039070129,0.0862699821591377,-0.267701029777527,0.76104062795639,0.645680010318756,0.0625654682517052,0.959632039070129,0.0862699821591377,-0.267701029777527,0.771759808063507,0.606137216091156,-0.19231353700161,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.877796113491058,-0.0535202585160732,0.476035296916962,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.877796113491058,-0.0535202585160732,0.476035296916962,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.877796113491058,-0.0535202585160732,0.476035296916962,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.949614703655243,0.0149662410840392,0.313062191009521,-0.960874974727631,0.022131310775876,0.276096969842911,-0.877796113491058,-0.0535202585160732,0.476035296916962,\n-0.960874974727631,0.022131310775876,0.276096969842911,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.960874974727631,0.022131310775876,0.276096969842911,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.971317529678345,-0.00673383427783847,0.237690657377243,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.949614703655243,0.0149662410840392,0.313062191009521,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.960874974727631,0.022131310775876,0.276096969842911,-0.853425025939941,0.00471344357356429,0.521194279193878,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.853425025939941,0.00471344357356429,0.521194279193878,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.749224066734314,-0.0310621540993452,0.661587834358215,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.749224066734314,-0.0310621540993452,0.661587834358215,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.912092506885529,0.0284031052142382,0.408999383449554,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.749224066734314,-0.0310621540993452,0.661587834358215,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.749224066734314,-0.0310621540993452,0.661587834358215,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.935528755187988,-0.0541915111243725,0.349069029092789,\n-0.912092506885529,0.0284031052142382,0.408999383449554,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.482923626899719,-0.587090194225311,0.649699866771698,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0717575997114182,-0.708433508872986,0.702120244503021,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.0717575997114182,-0.708433508872986,0.702120244503021,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.235374078154564,-0.676506876945496,0.697809040546417,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.235374078154564,-0.676506876945496,0.697809040546417,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.482923626899719,-0.587090194225311,0.649699866771698,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.482923626899719,-0.587090194225311,0.649699866771698,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.450729221105576,-0.524441123008728,0.722360491752625,-0.292413383722305,-0.535299479961395,0.792432248592377,-0.450729221105576,-0.524441123008728,0.722360491752625,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.365384161472321,-0.375545680522919,0.851739346981049,\n-0.292413383722305,-0.535299479961395,0.792432248592377,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.924713611602783,0.349783033132553,0.150188326835632,-0.841246128082275,0.241770818829536,0.483582258224487,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.00293335225433111,0.995907425880432,0.0903318226337433,0.61859929561615,0.783204674720764,-0.0626528933644295,0.636519849300385,0.647450149059296,-0.419107168912888,0.00320792081765831,0.937661468982697,-0.347535103559494,-0.00293335225433111,0.995907425880432,0.0903318226337433,0.00320792081765831,0.937661468982697,-0.347535103559494,-0.664545059204102,0.734579563140869,-0.137013539671898,-0.58504182100296,0.777154207229614,0.23185633122921,-0.942853271961212,0.10562913864851,0.316022574901581,-0.891881763935089,0.246565267443657,0.379147052764893,-0.85773640871048,0.318832546472549,0.403279215097427,-0.928196668624878,0.146431341767311,0.342065423727036,-0.0776756703853607,-0.921032607555389,-0.381661415100098,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.0787478685379028,-0.96028345823288,-0.26768359541893,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.0776756703853607,-0.921032607555389,-0.381661415100098,-0.0771657377481461,-0.907520055770874,-0.412859290838242,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.93205326795578,-0.0207287091761827,0.361727833747864,-0.889755249023438,0.104038514196873,0.444422751665115,-0.838507175445557,0.0982540920376778,0.535958766937256,\n-0.823492228984833,0.0713645666837692,0.56282114982605,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.093654952943325,-0.971795976161957,-0.216428592801094,0.652852118015289,-0.584342896938324,-0.482003599405289,-0.093654952943325,-0.971795976161957,-0.216428592801094,-0.184745773673058,-0.862863302230835,-0.470463544130325,0.664769351482391,-0.462521582841873,-0.586647689342499,0.614885807037354,-0.39096936583519,-0.684878408908844,0.664769351482391,-0.462521582841873,-0.586647689342499,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.236963242292404,-0.687786102294922,-0.686147749423981,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.236963242292404,-0.687786102294922,-0.686147749423981,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.482406258583069,0.640618324279785,0.597404718399048,-0.92311555147171,0.291509866714478,0.250758200883865,-0.933935105800629,0.157070308923721,0.321082711219788,-0.907475471496582,0.340031713247299,0.246711865067482,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.157021999359131,0.633807837963104,-0.757384777069092,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.773442804813385,0.436002254486084,0.460096001625061,-0.784657657146454,0.439340144395828,0.437370121479034,\n-0.776160657405853,0.480935424566269,0.407769232988358,-0.7086301445961,0.50186014175415,0.495963364839554,-0.764328002929688,0.478488236665726,0.432263433933258,-0.809970021247864,0.357101410627365,0.46521732211113,-0.684539437294006,0.44213280081749,0.57958984375,-0.7086301445961,0.50186014175415,0.495963364839554,-0.684539437294006,0.44213280081749,0.57958984375,-0.809970021247864,0.357101410627365,0.46521732211113,-0.803570151329041,0.341960042715073,0.487173795700073,-0.649461984634399,0.424084842205048,0.631150722503662,-0.636985540390015,0.443951308727264,0.630203664302826,-0.803570151329041,0.341960042715073,0.487173795700073,-0.809970021247864,0.357101410627365,0.46521732211113,-0.654083967208862,0.394615858793259,0.64533132314682,-0.594367325305939,0.527927815914154,0.606646299362183,-0.654083967208862,0.394615858793259,0.64533132314682,-0.809970021247864,0.357101410627365,0.46521732211113,-0.764328002929688,0.478488236665726,0.432263433933258,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.530206859111786,0.100595757365227,0.841879546642303,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.84095025062561,-0.471284002065659,0.265883654356003,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.35957869887352,-0.654971122741699,0.66461718082428,\n-0.35957869887352,-0.654971122741699,0.66461718082428,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.626672208309174,0.255842447280884,0.736088693141937,-0.490771174430847,0.254273563623428,0.833359837532043,-0.354619354009628,-0.125306099653244,0.926576197147369,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.438916772603989,0.289704263210297,0.850543081760406,-0.664353311061859,0.186838954687119,0.723689079284668,-0.735289394855499,-0.208703994750977,0.644819438457489,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.501976847648621,0.497314512729645,0.707599818706512,-0.664353311061859,0.186838954687119,0.723689079284668,-0.438916772603989,0.289704263210297,0.850543081760406,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.617874979972839,-0.144242078065872,0.772932589054108,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.0848771035671234,-0.827450573444366,0.55508691072464,0.187445163726807,0.511297464370728,0.838712811470032,0.12853179872036,0.854913532733917,0.502595722675323,0.133057877421379,0.867883086204529,0.478617310523987,0.330043107271194,0.436470597982407,0.83699756860733,0.185406669974327,0.360577255487442,0.914116144180298,0.330043107271194,0.436470597982407,0.83699756860733,0.133057877421379,0.867883086204529,0.478617310523987,0.046251967549324,0.890573501586914,0.452481597661972,\n-0.131636127829552,0.990942358970642,0.0265548899769783,0.046251967549324,0.890573501586914,0.452481597661972,0.133057877421379,0.867883086204529,0.478617310523987,-0.201113522052765,0.971361815929413,0.126529023051262,-0.183847695589066,0.966428518295288,0.179488003253937,-0.201113522052765,0.971361815929413,0.126529023051262,0.133057877421379,0.867883086204529,0.478617310523987,0.12853179872036,0.854913532733917,0.502595722675323,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.323215007781982,0.943282067775726,0.0758355185389519,0.477838784456253,0.792661190032959,-0.378626853227615,0.466618627309799,0.783142864704132,-0.41104057431221,-0.807841360569,0.43371844291687,0.399099737405777,-0.702935457229614,0.63435697555542,0.321672111749649,-0.323215007781982,0.943282067775726,0.0758355185389519,-0.488124132156372,0.865501821041107,-0.112434260547161,0.772461295127869,-0.0374295972287655,0.633957862854004,-0.30469673871994,0.941659867763519,0.142956644296646,0.727005004882813,0.68491542339325,0.0485247001051903,-0.30469673871994,0.941659867763519,0.142956644296646,0.772461295127869,-0.0374295972287655,0.633957862854004,0.125634163618088,0.492520093917847,0.861185252666473,0.466618627309799,0.783142864704132,-0.41104057431221,0.727005004882813,0.68491542339325,0.0485247001051903,-0.30469673871994,0.941659867763519,0.142956644296646,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.807841360569,0.43371844291687,0.399099737405777,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.30469673871994,0.941659867763519,0.142956644296646,-0.6800137758255,0.685604989528656,0.2598597407341,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.6800137758255,0.685604989528656,0.2598597407341,-0.30469673871994,0.941659867763519,0.142956644296646,0.125634163618088,0.492520093917847,0.861185252666473,0.772461295127869,-0.0374295972287655,0.633957862854004,0.450095027685165,-0.592146694660187,0.668413639068604,0.125634163618088,0.492520093917847,0.861185252666473,0.450095027685165,-0.592146694660187,0.668413639068604,\n-0.293433964252472,0.0976898819208145,0.950974881649017,0.125634163618088,0.492520093917847,0.861185252666473,0.450095027685165,-0.592146694660187,0.668413639068604,0.180472254753113,-0.782866299152374,0.595441102981567,-0.292413383722305,-0.535299479961395,0.792432248592377,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.450729221105576,-0.524441123008728,0.722360491752625,-0.292413383722305,-0.535299479961395,0.792432248592377,0.180472254753113,-0.782866299152374,0.595441102981567,0.066693402826786,-0.763606250286102,0.642228543758392,0.520344138145447,-0.759189605712891,0.390989869832993,0.066693402826786,-0.763606250286102,0.642228543758392,0.180472254753113,-0.782866299152374,0.595441102981567,0.493583381175995,-0.804481565952301,0.330431401729584,0.772461295127869,-0.0374295972287655,0.633957862854004,0.493583381175995,-0.804481565952301,0.330431401729584,0.180472254753113,-0.782866299152374,0.595441102981567,0.450095027685165,-0.592146694660187,0.668413639068604,-0.450729221105576,-0.524441123008728,0.722360491752625,0.066693402826786,-0.763606250286102,0.642228543758392,0.169332280755043,-0.786144733428955,0.594393014907837,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.235374078154564,-0.676506876945496,0.697809040546417,-0.38851073384285,-0.590570747852325,0.707308709621429,0.169332280755043,-0.786144733428955,0.594393014907837,0.246509581804276,-0.871231377124786,0.424486666917801,0.506179451942444,-0.83683580160141,0.208538070321083,0.246509581804276,-0.871231377124786,0.424486666917801,0.169332280755043,-0.786144733428955,0.594393014907837,0.593186497688293,-0.723713397979736,0.352659493684769,0.520344138145447,-0.759189605712891,0.390989869832993,0.593186497688293,-0.723713397979736,0.352659493684769,0.169332280755043,-0.786144733428955,0.594393014907837,0.066693402826786,-0.763606250286102,0.642228543758392,0.201723903417587,-0.93417751789093,0.294312417507172,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.235374078154564,-0.676506876945496,0.697809040546417,0.246509581804276,-0.871231377124786,0.424486666917801,\n0.201723903417587,-0.93417751789093,0.294312417507172,0.246509581804276,-0.871231377124786,0.424486666917801,0.506179451942444,-0.83683580160141,0.208538070321083,0.331354945898056,-0.940484642982483,0.0754489675164223,-0.106017202138901,-0.707463800907135,0.698752701282501,0.201723903417587,-0.93417751789093,0.294312417507172,0.0746458247303963,-0.967216193675995,0.242736130952835,-0.0717575997114182,-0.708433508872986,0.702120244503021,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.0717575997114182,-0.708433508872986,0.702120244503021,0.0746458247303963,-0.967216193675995,0.242736130952835,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,-0.044459342956543,-0.969122648239136,0.242537945508957,0.0746458247303963,-0.967216193675995,0.242736130952835,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.331354945898056,-0.940484642982483,0.0754489675164223,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.0746458247303963,-0.967216193675995,0.242736130952835,0.201723903417587,-0.93417751789093,0.294312417507172,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.209884941577911,-0.949742674827576,0.232243597507477,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.209884941577911,-0.949742674827576,0.232243597507477,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.209884941577911,-0.949742674827576,0.232243597507477,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.558743357658386,-0.822392702102661,-0.10712693631649,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.209884941577911,-0.949742674827576,0.232243597507477,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.558743357658386,-0.822392702102661,-0.10712693631649,\n-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.632458329200745,-0.745043694972992,0.211911231279373,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.632458329200745,-0.745043694972992,0.211911231279373,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.887657046318054,-0.456045299768448,0.063934437930584,-0.726677179336548,-0.644755423069,0.237130090594292,-0.632458329200745,-0.745043694972992,0.211911231279373,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.409960985183716,0.234984055161476,0.881314098834991,-0.419355839490891,0.314480572938919,0.851611793041229,-0.427875101566315,0.308164179325104,0.849680960178375,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.595763564109802,0.13890865445137,0.791056394577026,-0.708662629127502,0.112244434654713,0.696561932563782,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.708662629127502,0.112244434654713,0.696561932563782,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.774853527545929,0.101396143436432,0.62395578622818,-0.31306853890419,0.294974654912949,0.902761340141296,-0.252474844455719,-0.0950261279940605,0.962926030158997,\n-0.35642284154892,0.221263155341148,0.907747387886047,-0.31306853890419,0.294974654912949,0.902761340141296,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.589879870414734,0.320975691080093,0.740956366062164,-0.807841360569,0.43371844291687,0.399099737405777,-0.6800137758255,0.685604989528656,0.2598597407341,-0.807841360569,0.43371844291687,0.399099737405777,-0.589879870414734,0.320975691080093,0.740956366062164,-0.711035132408142,0.199701055884361,0.674202144145966,-0.35642284154892,0.221263155341148,0.907747387886047,-0.419887959957123,0.29813814163208,0.857209324836731,-0.31306853890419,0.294974654912949,0.902761340141296,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.31306853890419,0.294974654912949,0.902761340141296,-0.589879870414734,0.320975691080093,0.740956366062164,-0.711035132408142,0.199701055884361,0.674202144145966,-0.589879870414734,0.320975691080093,0.740956366062164,-0.31306853890419,0.294974654912949,0.902761340141296,-0.419887959957123,0.29813814163208,0.857209324836731,-0.615555763244629,0.148695304989815,0.773938477039337,-0.53751266002655,0.1327995210886,0.832733154296875,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.617874979972839,-0.144242078065872,0.772932589054108,0.792737483978271,-0.494514644145966,-0.356402337551117,0.630495369434357,-0.750089466571808,-0.199602961540222,0.50261402130127,-0.863443076610565,0.0429561100900173,0.759971797466278,-0.612702488899231,0.216883733868599,0.243047595024109,-0.82210099697113,0.514857113361359,0.759971797466278,-0.612702488899231,0.216883733868599,0.50261402130127,-0.863443076610565,0.0429561100900173,0.314814835786819,-0.921267867088318,0.228379368782043,0.340434432029724,-0.915098071098328,0.216101616621017,0.314814835786819,-0.921267867088318,0.228379368782043,0.50261402130127,-0.863443076610565,0.0429561100900173,0.626364231109619,-0.75530606508255,-0.192822501063347,0.773029983043671,-0.340951681137085,-0.534954726696014,\n0.50261402130127,-0.863443076610565,0.0429561100900173,0.630495369434357,-0.750089466571808,-0.199602961540222,0.50261402130127,-0.863443076610565,0.0429561100900173,0.773029983043671,-0.340951681137085,-0.534954726696014,0.626364231109619,-0.75530606508255,-0.192822501063347,0.364371746778488,-0.284274369478226,-0.886803984642029,0.646651268005371,0.172121793031693,-0.743112564086914,0.706785917282104,0.185755431652069,-0.682604253292084,0.428298622369766,-0.365026712417603,-0.826629161834717,0.521451473236084,-0.506328523159027,-0.686818599700928,0.428298622369766,-0.365026712417603,-0.826629161834717,0.706785917282104,0.185755431652069,-0.682604253292084,0.770183801651001,0.157961666584015,-0.617952287197113,0.713780462741852,-0.04316745698452,-0.699037969112396,0.770183801651001,0.157961666584015,-0.617952287197113,0.706785917282104,0.185755431652069,-0.682604253292084,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.773029983043671,-0.340951681137085,-0.534954726696014,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.706785917282104,0.185755431652069,-0.682604253292084,0.646651268005371,0.172121793031693,-0.743112564086914,0.521451473236084,-0.506328523159027,-0.686818599700928,0.770183801651001,0.157961666584015,-0.617952287197113,0.853590905666351,0.0963327810168266,-0.511959493160248,0.593445479869843,-0.55176454782486,-0.585984945297241,0.853590905666351,0.0963327810168266,-0.511959493160248,0.8075070977211,-0.171400144696236,-0.564406096935272,0.894509136676788,-0.20981177687645,-0.394756108522415,0.936679661273956,0.0184381268918514,-0.349701732397079,0.713780462741852,-0.04316745698452,-0.699037969112396,0.8075070977211,-0.171400144696236,-0.564406096935272,0.853590905666351,0.0963327810168266,-0.511959493160248,0.770183801651001,0.157961666584015,-0.617952287197113,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.135216936469078,-0.381399750709534,0.914467394351959,0.279289931058884,0.161584615707397,0.94651335477829,0.243047595024109,-0.82210099697113,0.514857113361359,\n-0.188230976462364,-0.722290992736816,0.66548091173172,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.124414332211018,0.380547553300858,0.91635400056839,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.0613121353089809,-0.89322817325592,0.445403426885605,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.0613121353089809,-0.89322817325592,0.445403426885605,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.218783125281334,-0.517780601978302,0.827065408229828,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.0553458705544472,-0.183565944433212,0.981448113918304,-0.0389158241450787,-0.199694201350212,0.979085206985474,-0.0553458705544472,-0.183565944433212,0.981448113918304,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.166856274008751,-0.820909261703491,0.546138286590576,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.0973072052001953,-0.992754817008972,0.0704923868179321,-0.161499664187431,-0.785857558250427,0.596947073936462,\n-0.166856274008751,-0.820909261703491,0.546138286590576,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.188662573695183,-0.633236289024353,0.750611901283264,-0.28600937128067,-0.592511594295502,0.753079414367676,-0.174236983060837,-0.833520114421844,0.524295389652252,0.161769852042198,-0.974958479404449,0.152598813176155,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.166856274008751,-0.820909261703491,0.546138286590576,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.166856274008751,-0.820909261703491,0.546138286590576,-0.28600937128067,-0.592511594295502,0.753079414367676,-0.406814515590668,-0.530913829803467,0.743392527103424,0.0128951743245125,-0.862936913967133,0.505147039890289,0.24199965596199,-0.948591530323029,0.203986048698425,0.161769852042198,-0.974958479404449,0.152598813176155,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.761701762676239,0.421244710683823,0.492304056882858,-0.728943645954132,0.505101680755615,0.462075144052505,-0.741443395614624,0.635278224945068,0.216063171625137,-0.702385485172272,0.688902199268341,0.179076477885246,-0.741443395614624,0.635278224945068,0.216063171625137,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.702385485172272,0.688902199268341,0.179076477885246,-0.152414619922638,0.895912230014801,-0.417266219854355,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.169851988554001,0.888530313968658,-0.426220804452896,-0.262664377689362,0.933591663837433,-0.243749871850014,-0.169851988554001,0.888530313968658,-0.426220804452896,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.523407638072968,0.841484844684601,0.133969098329544,-0.728943645954132,0.505101680755615,0.462075144052505,-0.523407638072968,0.841484844684601,0.133969098329544,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.741443395614624,0.635278224945068,0.216063171625137,-0.152414619922638,0.895912230014801,-0.417266219854355,\n-0.169851988554001,0.888530313968658,-0.426220804452896,0.444303005933762,0.584981560707092,-0.678521454334259,0.461978673934937,0.681396842002869,-0.567691802978516,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.461978673934937,0.681396842002869,-0.567691802978516,0.444303005933762,0.584981560707092,-0.678521454334259,0.892134130001068,-0.0444634817540646,-0.449577271938324,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.892134130001068,-0.0444634817540646,-0.449577271938324,0.444303005933762,0.584981560707092,-0.678521454334259,0.26505383849144,0.683794975280762,-0.679831504821777,-0.262664377689362,0.933591663837433,-0.243749871850014,0.26505383849144,0.683794975280762,-0.679831504821777,0.444303005933762,0.584981560707092,-0.678521454334259,-0.169851988554001,0.888530313968658,-0.426220804452896,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.778522193431854,0.369191855192184,-0.507543742656708,0.769487977027893,0.440927565097809,-0.462029308080673,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.75768917798996,0.1346725076437,-0.638569056987762,0.452028423547745,0.457834273576736,-0.765544295310974,0.260891646146774,0.576647460460663,-0.774217784404755,-0.134053289890289,0.873388648033142,-0.468211501836777,0.260891646146774,0.576647460460663,-0.774217784404755,0.452028423547745,0.457834273576736,-0.765544295310974,0.717603802680969,0.25128972530365,-0.649536907672882,0.886527955532074,0.0429748557507992,-0.460674852132797,0.717603802680969,0.25128972530365,-0.649536907672882,0.452028423547745,0.457834273576736,-0.765544295310974,0.75768917798996,0.1346725076437,-0.638569056987762,0.792737483978271,-0.494514644145966,-0.356402337551117,0.864245176315308,-0.12554919719696,-0.487152576446533,0.869438171386719,-0.191056177020073,-0.455603748559952,0.777899026870728,-0.433716207742691,-0.454712390899658,0.869438171386719,-0.191056177020073,-0.455603748559952,0.886527955532074,0.0429748557507992,-0.460674852132797,\n0.928043901920319,-0.117735534906387,-0.3533735871315,0.894509136676788,-0.20981177687645,-0.394756108522415,0.869438171386719,-0.191056177020073,-0.455603748559952,0.894509136676788,-0.20981177687645,-0.394756108522415,0.777899026870728,-0.433716207742691,-0.454712390899658,0.886527955532074,0.0429748557507992,-0.460674852132797,0.869438171386719,-0.191056177020073,-0.455603748559952,0.864245176315308,-0.12554919719696,-0.487152576446533,-0.134053289890289,0.873388648033142,-0.468211501836777,0.717603802680969,0.25128972530365,-0.649536907672882,0.883733749389648,-0.197778105735779,-0.424144357442856,0.879603147506714,0.140207409858704,-0.454576879739761,0.792737483978271,-0.494514644145966,-0.356402337551117,0.879603147506714,0.140207409858704,-0.454576879739761,0.883733749389648,-0.197778105735779,-0.424144357442856,0.864245176315308,-0.12554919719696,-0.487152576446533,0.886527955532074,0.0429748557507992,-0.460674852132797,0.864245176315308,-0.12554919719696,-0.487152576446533,0.883733749389648,-0.197778105735779,-0.424144357442856,0.717603802680969,0.25128972530365,-0.649536907672882,0.735658526420593,0.230637982487679,-0.636877298355103,0.778522193431854,0.369191855192184,-0.507543742656708,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.892134130001068,-0.0444634817540646,-0.449577271938324,0.735658526420593,0.230637982487679,-0.636877298355103,0.892134130001068,-0.0444634817540646,-0.449577271938324,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.74884694814682,0.0258232615888119,-0.662239730358124,0.336174368858337,0.935995519161224,0.104399025440216,-0.328838348388672,0.935817182064056,0.126931354403496,-0.702385485172272,0.688902199268341,0.179076477885246,-0.551566660404205,0.823827803134918,-0.13069823384285,0.340434432029724,-0.915098071098328,0.216101616621017,0.196581169962883,-0.892622411251068,0.405685991048813,0.314814835786819,-0.921267867088318,0.228379368782043,0.314814835786819,-0.921267867088318,0.228379368782043,0.196581169962883,-0.892622411251068,0.405685991048813,\n-0.188230976462364,-0.722290992736816,0.66548091173172,0.243047595024109,-0.82210099697113,0.514857113361359,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.709937155246735,0.54696124792099,0.443646997213364,-0.776160657405853,0.480935424566269,0.407769232988358,-0.849210619926453,0.33398848772049,0.409014731645584,-0.719690024852753,0.419174522161484,0.553479015827179,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.794279515743256,0.210044533014297,0.570088922977448,-0.639836966991425,0.246874988079071,0.727778375148773,-0.639836966991425,0.246874988079071,0.727778375148773,-0.794279515743256,0.210044533014297,0.570088922977448,-0.794037878513336,0.353904455900192,0.49422213435173,-0.659900903701782,0.452796697616577,0.59958815574646,-0.849210619926453,0.33398848772049,0.409014731645584,-0.794037878513336,0.353904455900192,0.49422213435173,-0.794279515743256,0.210044533014297,0.570088922977448,-0.872271299362183,0.143087893724442,0.467620134353638,-0.872271299362183,0.143087893724442,0.467620134353638,-0.794279515743256,0.210044533014297,0.570088922977448,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.776160657405853,0.480935424566269,0.407769232988358,-0.784657657146454,0.439340144395828,0.437370121479034,-0.794037878513336,0.353904455900192,0.49422213435173,-0.849210619926453,0.33398848772049,0.409014731645584,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.692233920097351,-0.67291522026062,0.260762959718704,\n-0.789951264858246,-0.250378400087357,0.559721052646637,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.0191204845905304,-0.446781009435654,0.894439041614532,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.0191204845905304,-0.446781009435654,0.894439041614532,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.305121690034866,-0.661639988422394,0.684933066368103,-0.0377944894134998,-0.657056510448456,0.752893269062042,-0.305121690034866,-0.661639988422394,0.684933066368103,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.309475094079971,-0.95003479719162,-0.0407320484519005,\n-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.1754040569067,-0.893526375293732,0.413332790136337,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.1754040569067,-0.893526375293732,0.413332790136337,-0.0628481134772301,-0.906862795352936,0.416713327169418,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.0628481134772301,-0.906862795352936,0.416713327169418,-0.1754040569067,-0.893526375293732,0.413332790136337,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.1754040569067,-0.893526375293732,0.413332790136337,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.0777209997177124,-0.922415435314178,-0.378297746181488,-0.0788524150848389,-0.974068284034729,-0.212069168686867,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.820191740989685,-0.246563538908958,0.51622861623764,-0.865981459617615,-0.173945933580399,0.468848556280136,\n-0.704794883728027,-0.197958365082741,0.681231737136841,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.77647191286087,0.0245032440871,0.629675269126892,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.626672208309174,0.255842447280884,0.736088693141937,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.490771174430847,0.254273563623428,0.833359837532043,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.525664925575256,-0.713997602462769,0.462475687265396,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.477150738239288,-0.679907381534576,0.556824207305908,\n-0.525664925575256,-0.713997602462769,0.462475687265396,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.525664925575256,-0.713997602462769,0.462475687265396,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.525664925575256,-0.713997602462769,0.462475687265396,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.274860739707947,-0.954389214515686,0.116588413715363,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.274860739707947,-0.954389214515686,0.116588413715363,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.201314941048622,-0.978592693805695,0.0427633114159107,\n-0.274860739707947,-0.954389214515686,0.116588413715363,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.274860739707947,-0.954389214515686,0.116588413715363,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.0788524150848389,-0.974068284034729,-0.212069168686867,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.84095025062561,-0.471284002065659,0.265883654356003,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.820191740989685,-0.246563538908958,0.51622861623764,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.820191740989685,-0.246563538908958,0.51622861623764,\n-0.943083763122559,-0.101111672818661,0.316811382770538,-0.971317529678345,-0.00673383427783847,0.237690657377243,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.853425025939941,0.00471344357356429,0.521194279193878,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.971317529678345,-0.00673383427783847,0.237690657377243,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.853425025939941,0.00471344357356429,0.521194279193878,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.704794883728027,-0.197958365082741,0.681231737136841,-0.928220152854919,-0.224693849682808,0.296513050794601,\n-0.931119084358215,-0.21125616133213,0.297301381826401,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.820191740989685,-0.246563538908958,0.51622861623764,0.196581169962883,-0.892622411251068,0.405685991048813,0.340434432029724,-0.915098071098328,0.216101616621017,0.24199965596199,-0.948591530323029,0.203986048698425,0.0128951743245125,-0.862936913967133,0.505147039890289,0.196581169962883,-0.892622411251068,0.405685991048813,0.0128951743245125,-0.862936913967133,0.505147039890289,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.188230976462364,-0.722290992736816,0.66548091173172,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.188230976462364,-0.722290992736816,0.66548091173172,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.522611916065216,0.119792513549328,0.844112873077393,-0.552518010139465,0.180195555090904,0.813789546489716,-0.530328452587128,0.10359351336956,0.841439306735992,-0.543807446956635,0.220993861556053,0.809589505195618,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.0971510037779808,-0.777255237102509,0.621639728546143,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.0971510037779808,-0.777255237102509,0.621639728546143,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.392426759004593,0.205112621188164,0.896621465682983,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.390473067760468,-0.682946801185608,0.617344677448273,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.390473067760468,-0.682946801185608,0.617344677448273,\n-0.510507762432098,-0.444001197814941,0.736372709274292,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.390473067760468,-0.682946801185608,0.617344677448273,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.500701189041138,-0.0503258183598518,0.864156007766724,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.571020781993866,-0.291943371295929,0.767270684242249,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.671048521995544,0.370010554790497,0.642484307289124,-0.673884630203247,0.467902958393097,0.571792244911194,-0.713547646999359,0.198780298233032,0.671815574169159,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.498029559850693,0.248690649867058,0.830734312534332,-0.484222084283829,0.366713851690292,0.794386506080627,-0.655175447463989,0.41560024023056,0.630889534950256,-0.671048521995544,0.370010554790497,0.642484307289124,-0.498029559850693,0.248690649867058,0.830734312534332,-0.671048521995544,0.370010554790497,0.642484307289124,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.493602007627487,-0.18142081797123,0.850554823875427,0.579925835132599,-0.717766225337982,-0.3853540122509,0.161769852042198,-0.974958479404449,0.152598813176155,0.24199965596199,-0.948591530323029,0.203986048698425,\n0.65024209022522,-0.683634519577026,-0.331404685974121,0.579925835132599,-0.717766225337982,-0.3853540122509,0.65024209022522,-0.683634519577026,-0.331404685974121,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.645713806152344,-0.220039650797844,-0.731188178062439,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.645713806152344,-0.220039650797844,-0.731188178062439,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.576868414878845,0.0959631279110909,-0.811180531978607,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.576868414878845,0.0959631279110909,-0.811180531978607,0.329197883605957,-0.229186490178108,-0.916025280952454,0.387454837560654,-0.142215475440025,-0.910853147506714,0.773029983043671,-0.340951681137085,-0.534954726696014,0.630495369434357,-0.750089466571808,-0.199602961540222,0.681055247783661,-0.346231341362,-0.645203530788422,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.713780462741852,-0.04316745698452,-0.699037969112396,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.681055247783661,-0.346231341362,-0.645203530788422,0.648240566253662,-0.463475733995438,-0.604131102561951,0.792737483978271,-0.494514644145966,-0.356402337551117,0.648240566253662,-0.463475733995438,-0.604131102561951,0.681055247783661,-0.346231341362,-0.645203530788422,0.630495369434357,-0.750089466571808,-0.199602961540222,0.894509136676788,-0.20981177687645,-0.394756108522415,0.928043901920319,-0.117735534906387,-0.3533735871315,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.955755293369293,-0.11410153657198,-0.27113202214241,0.890664577484131,-0.0774205401539803,0.448020815849304,0.955755293369293,-0.11410153657198,-0.27113202214241,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.888973355293274,0.214637205004692,0.404545694589615,0.76104062795639,0.645680010318756,0.0625654682517052,0.888973355293274,0.214637205004692,0.404545694589615,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.959632039070129,0.0862699821591377,-0.267701029777527,\n0.886527955532074,0.0429748557507992,-0.460674852132797,0.959632039070129,0.0862699821591377,-0.267701029777527,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.928043901920319,-0.117735534906387,-0.3533735871315,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.304556578397751,-0.909958362579346,0.281462401151657,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.753281593322754,0.510852336883545,0.414242386817932,-0.890724420547485,-0.0131717119365931,-0.454352855682373,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.735505998134613,0.630867898464203,0.247055947780609,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.890724420547485,-0.0131717119365931,-0.454352855682373,-0.753281593322754,0.510852336883545,0.414242386817932,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.432196706533432,-0.877966165542603,-0.205867424607277,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.947893738746643,-0.165305480360985,0.272344529628754,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.947893738746643,-0.165305480360985,0.272344529628754,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.635643780231476,-0.760042726993561,-0.135248005390167,\n-0.713391602039337,-0.697049975395203,-0.0720673725008965,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.111326843500137,-0.985514283180237,0.127937391400337,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.111326843500137,-0.985514283180237,0.127937391400337,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.450571924448013,-0.714681327342987,0.534991204738617,\n-0.347470790147781,-0.852081894874573,0.391433894634247,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.722620606422424,0.556017577648163,0.410687148571014,-0.762500584125519,0.610563993453979,0.214019775390625,-0.72613924741745,0.535442233085632,0.431304275989532,-0.659900903701782,0.452796697616577,0.59958815574646,-0.722620606422424,0.556017577648163,0.410687148571014,-0.659900903701782,0.452796697616577,0.59958815574646,-0.794037878513336,0.353904455900192,0.49422213435173,-0.784657657146454,0.439340144395828,0.437370121479034,-0.704894602298737,0.389235317707062,0.592975080013275,-0.808332681655884,0.323168575763702,0.49209788441658,-0.746036350727081,0.393973112106323,0.536856591701508,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.742441892623901,0.401161223649979,0.53651624917984,-0.766035974025726,0.399132251739502,0.503867447376251,0.00262317061424255,-0.184787794947624,0.982774972915649,-0.360249727964401,-0.149908572435379,0.920732080936432,-0.299746423959732,0.0442999862134457,0.952989816665649,0.017973817884922,0.0102047342807055,0.999786376953125,-0.360249727964401,-0.149908572435379,0.920732080936432,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.664805889129639,0.056874256581068,0.74484795331955,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.664805889129639,0.056874256581068,0.74484795331955,-0.859274387359619,0.29542076587677,0.417581170797348,-0.805146157741547,0.523773431777954,0.278210490942001,-0.722620606422424,0.556017577648163,0.410687148571014,\n-0.784657657146454,0.439340144395828,0.437370121479034,-0.773442804813385,0.436002254486084,0.460096001625061,-0.805146157741547,0.523773431777954,0.278210490942001,-0.762500584125519,0.610563993453979,0.214019775390625,-0.722620606422424,0.556017577648163,0.410687148571014,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.474541217088699,0.29422801733017,0.829602658748627,-0.466067016124725,0.290591061115265,0.835666418075562,-0.674032330513,0.408573538064957,0.615425109863281,-0.701379120349884,0.42103236913681,0.575151324272156,-0.736577808856964,0.297644317150116,0.607339262962341,-0.704894602298737,0.389235317707062,0.592975080013275,-0.709671497344971,0.473905295133591,0.521325349807739,-0.701379120349884,0.42103236913681,0.575151324272156,-0.674032330513,0.408573538064957,0.615425109863281,-0.700818002223969,0.442935287952423,0.559162259101868,-0.265877991914749,0.261434108018875,0.927879869937897,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.489892512559891,0.122311964631081,0.863159954547882,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.736584484577179,0.13217331469059,0.66330498456955,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.489892512559891,0.122311964631081,0.863159954547882,-0.736584484577179,0.13217331469059,0.66330498456955,-0.489892512559891,0.122311964631081,0.863159954547882,-0.451172351837158,0.441036701202393,0.775841593742371,-0.715115904808044,0.391270339488983,0.57923811674118,-0.715115904808044,0.391270339488983,0.57923811674118,-0.878912448883057,0.190948858857155,0.437094360589981,-0.847993731498718,-0.0830313712358475,0.523461937904358,\n-0.736584484577179,0.13217331469059,0.66330498456955,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.736584484577179,0.13217331469059,0.66330498456955,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.918760776519775,0.045384906232357,0.392197400331497,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.878912448883057,0.190948858857155,0.437094360589981,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.664805889129639,0.056874256581068,0.74484795331955,-0.575338959693909,0.442981451749802,0.687570035457611,-0.185234054923058,0.48134982585907,0.856732606887817,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.910155653953552,-0.193675979971886,0.366205275058746,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.144208893179893,0.115719296038151,0.982757806777954,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.100514478981495,0.314375013113022,0.943962454795837,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.468296974897385,-0.39009964466095,0.792792677879334,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.468296974897385,-0.39009964466095,0.792792677879334,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.766035974025726,0.399132251739502,0.503867447376251,-0.782657444477081,0.380464553833008,0.4926398396492,-0.126811400055885,-0.181621968746185,0.975157618522644,0.0174392946064472,-0.157727032899857,0.987328767776489,\n0.134034633636475,-0.240539237856865,0.961340487003326,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.53751266002655,0.1327995210886,0.832733154296875,-0.615555763244629,0.148695304989815,0.773938477039337,-0.595763564109802,0.13890865445137,0.791056394577026,-0.527163207530975,0.108157083392143,0.842852890491486,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.626051127910614,0.0937396511435509,0.774127185344696,-0.606947243213654,0.110988683998585,0.786953926086426,-0.626051127910614,0.0937396511435509,0.774127185344696,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.708724558353424,0.18108169734478,0.681849598884583,-0.774853527545929,0.101396143436432,0.62395578622818,-0.708724558353424,0.18108169734478,0.681849598884583,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.606947243213654,0.110988683998585,0.786953926086426,-0.578490018844604,0.0704870000481606,0.812638223171234,-0.582078754901886,0.152128055691719,0.798774898052216,-0.626051127910614,0.0937396511435509,0.774127185344696,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.626051127910614,0.0937396511435509,0.774127185344696,-0.582078754901886,0.152128055691719,0.798774898052216,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.518675327301025,0.170822575688362,0.837732374668121,-0.527163207530975,0.108157083392143,0.842852890491486,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.527163207530975,0.108157083392143,0.842852890491486,-0.595763564109802,0.13890865445137,0.791056394577026,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.419887959957123,0.29813814163208,0.857209324836731,-0.35642284154892,0.221263155341148,0.907747387886047,-0.447176039218903,0.207748264074326,0.869985222816467,-0.692487776279449,0.122583940625191,0.71093875169754,-0.711035132408142,0.199701055884361,0.674202144145966,\n-0.419887959957123,0.29813814163208,0.857209324836731,-0.518675327301025,0.170822575688362,0.837732374668121,-0.447176039218903,0.207748264074326,0.869985222816467,-0.35642284154892,0.221263155341148,0.907747387886047,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.53751266002655,0.1327995210886,0.832733154296875,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.667788088321686,0.180951654911041,0.722021877765656,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.711035132408142,0.199701055884361,0.674202144145966,-0.847861528396606,0.113259613513947,0.517979800701141,-0.807841360569,0.43371844291687,0.399099737405777,-0.692487776279449,0.122583940625191,0.71093875169754,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.847861528396606,0.113259613513947,0.517979800701141,-0.711035132408142,0.199701055884361,0.674202144145966,-0.578490018844604,0.0704870000481606,0.812638223171234,-0.606947243213654,0.110988683998585,0.786953926086426,-0.530206859111786,0.100595757365227,0.841879546642303,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.530206859111786,0.100595757365227,0.841879546642303,-0.606947243213654,0.110988683998585,0.786953926086426,-0.573864758014679,0.230327397584915,0.785893499851227,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.157473087310791,-0.645219802856445,0.747591853141785,0.033345639705658,-0.401991754770279,0.915035903453827,-0.0569505728781223,-0.381698995828629,0.922530472278595,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.692233920097351,-0.67291522026062,0.260762959718704,-0.358404159545898,-0.845226526260376,0.396407097578049,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.561927437782288,-0.650319397449493,-0.511196792125702,\n-0.800594985485077,-0.588442921638489,0.113060474395752,-0.692233920097351,-0.67291522026062,0.260762959718704,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.963837623596191,0.235864251852036,0.124036490917206,-0.864985883235931,0.37462642788887,0.333847969770432,-0.936657905578613,0.0257524941116571,0.349297523498535,-0.735505998134613,0.630867898464203,0.247055947780609,-0.864985883235931,0.37462642788887,0.333847969770432,-0.963837623596191,0.235864251852036,0.124036490917206,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.267043441534042,-0.793497562408447,0.546854078769684,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.233076319098473,-0.804329991340637,0.546560764312744,0.0642944201827049,-0.547998011112213,0.834004998207092,\n-0.233076319098473,-0.804329991340637,0.546560764312744,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.267043441534042,-0.793497562408447,0.546854078769684,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.00470763072371483,0.279436647891998,0.960152566432953,0.630376875400543,-0.0280195455998182,0.77578341960907,0.439482539892197,-0.499404758214951,0.74662572145462,0.485446602106094,-0.599754393100739,0.636110246181488,0.439482539892197,-0.499404758214951,0.74662572145462,0.630376875400543,-0.0280195455998182,0.77578341960907,0.775241792201996,-0.45661398768425,0.436467438936234,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.267043441534042,-0.793497562408447,0.546854078769684,-0.403418689966202,-0.482175469398499,0.777663290500641,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.267043441534042,-0.793497562408447,0.546854078769684,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.0667830258607864,-0.603913366794586,-0.794247210025787,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.890724420547485,-0.0131717119365931,-0.454352855682373,0.615995168685913,-0.740946054458618,0.267486304044724,0.408733516931534,-0.739542424678802,0.534802675247192,-0.575954735279083,-0.540566444396973,0.613240599632263,0.315651625394821,-0.933804154396057,0.168445229530334,0.615995168685913,-0.740946054458618,0.267486304044724,0.775241792201996,-0.45661398768425,0.436467438936234,0.408733516931534,-0.739542424678802,0.534802675247192,0.630376875400543,-0.0280195455998182,0.77578341960907,0.103311404585838,-0.0802608132362366,0.991405546665192,0.408733516931534,-0.739542424678802,0.534802675247192,0.775241792201996,-0.45661398768425,0.436467438936234,-0.575954735279083,-0.540566444396973,0.613240599632263,0.408733516931534,-0.739542424678802,0.534802675247192,0.103311404585838,-0.0802608132362366,0.991405546665192,-0.54303914308548,0.178987935185432,0.820409536361694,\n-0.00470763072371483,0.279436647891998,0.960152566432953,-0.54303914308548,0.178987935185432,0.820409536361694,0.103311404585838,-0.0802608132362366,0.991405546665192,0.630376875400543,-0.0280195455998182,0.77578341960907,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.54303914308548,0.178987935185432,0.820409536361694,-0.743858754634857,0.1927819699049,0.639929115772247,-0.00470763072371483,0.279436647891998,0.960152566432953,-0.531166195869446,0.151813089847565,0.833555817604065,-0.743858754634857,0.1927819699049,0.639929115772247,-0.54303914308548,0.178987935185432,0.820409536361694,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.963837623596191,0.235864251852036,0.124036490917206,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.963837623596191,0.235864251852036,0.124036490917206,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.774853527545929,0.101396143436432,0.62395578622818,-0.721355617046356,0.238694369792938,0.650131583213806,-0.668299674987793,0.334984093904495,0.664199709892273,-0.708724558353424,0.18108169734478,0.681849598884583,-0.606947243213654,0.110988683998585,0.786953926086426,-0.708724558353424,0.18108169734478,0.681849598884583,-0.668299674987793,0.334984093904495,0.664199709892273,-0.573864758014679,0.230327397584915,0.785893499851227,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.573864758014679,0.230327397584915,0.785893499851227,-0.668299674987793,0.334984093904495,0.664199709892273,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.841734766960144,0.21214547753334,0.496464431285858,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.668299674987793,0.334984093904495,0.664199709892273,-0.721355617046356,0.238694369792938,0.650131583213806,-0.721025288105011,0.149201020598412,0.676654696464539,-0.807132244110107,0.16207791864872,0.567686796188354,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.708662629127502,0.112244434654713,0.696561932563782,\n-0.721025288105011,0.149201020598412,0.676654696464539,-0.708662629127502,0.112244434654713,0.696561932563782,-0.595763564109802,0.13890865445137,0.791056394577026,-0.615555763244629,0.148695304989815,0.773938477039337,-0.77285635471344,0.360512226819992,0.522229790687561,-0.903163015842438,0.185778304934502,0.387017965316772,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.841734766960144,0.21214547753334,0.496464431285858,-0.903163015842438,0.185778304934502,0.387017965316772,-0.77285635471344,0.360512226819992,0.522229790687561,-0.800202667713165,0.314497977495193,0.510653257369995,-0.721025288105011,0.149201020598412,0.676654696464539,-0.615555763244629,0.148695304989815,0.773938477039337,-0.617874979972839,-0.144242078065872,0.772932589054108,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.807132244110107,0.16207791864872,0.567686796188354,-0.721025288105011,0.149201020598412,0.676654696464539,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.809095621109009,0.140354558825493,0.570670545101166,-0.978964686393738,0.106371738016605,0.174106821417809,-0.93869537115097,0.246357470750809,0.241161808371544,-0.959026336669922,0.206695169210434,0.193766981363297,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.959026336669922,0.206695169210434,0.193766981363297,-0.961905956268311,0.126988083124161,0.242096945643425,-0.92311555147171,0.291509866714478,0.250758200883865,-0.961905956268311,0.126988083124161,0.242096945643425,-0.959026336669922,0.206695169210434,0.193766981363297,-0.935693740844727,0.265559196472168,0.232283264398575,-0.927535772323608,0.260400146245956,0.26808425784111,-0.935693740844727,0.265559196472168,0.232283264398575,-0.959026336669922,0.206695169210434,0.193766981363297,-0.93869537115097,0.246357470750809,0.241161808371544,-0.978964686393738,0.106371738016605,0.174106821417809,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.951185405254364,-0.150061026215553,0.2696812748909,\n-0.945830225944519,0.0969298705458641,0.309854567050934,-0.903163015842438,0.185778304934502,0.387017965316772,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.951185405254364,-0.150061026215553,0.2696812748909,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.951185405254364,-0.150061026215553,0.2696812748909,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.807132244110107,0.16207791864872,0.567686796188354,-0.809095621109009,0.140354558825493,0.570670545101166,-0.845765233039856,0.182700246572495,0.501300096511841,-0.800202667713165,0.314497977495193,0.510653257369995,-0.800202667713165,0.314497977495193,0.510653257369995,-0.845765233039856,0.182700246572495,0.501300096511841,-0.864785015583038,0.227262705564499,0.447770565748215,-0.903163015842438,0.185778304934502,0.387017965316772,-0.873595476150513,0.228950142860413,0.429433107376099,-0.864785015583038,0.227262705564499,0.447770565748215,-0.845765233039856,0.182700246572495,0.501300096511841,-0.868421196937561,0.174519643187523,0.46409860253334,-0.830214977264404,0.100066982209682,0.548388242721558,-0.868421196937561,0.174519643187523,0.46409860253334,-0.845765233039856,0.182700246572495,0.501300096511841,-0.809095621109009,0.140354558825493,0.570670545101166,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.868421196937561,0.174519643187523,0.46409860253334,-0.830214977264404,0.100066982209682,0.548388242721558,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.873595476150513,0.228950142860413,0.429433107376099,-0.868421196937561,0.174519643187523,0.46409860253334,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.927467882633209,0.10914921015501,0.357616752386093,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.830214977264404,0.100066982209682,0.548388242721558,-0.374559938907623,-0.262731373310089,0.889200270175934,\n-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.144208893179893,0.115719296038151,0.982757806777954,-0.466067016124725,0.290591061115265,0.835666418075562,-0.742441892623901,0.401161223649979,0.53651624917984,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.137671425938606,0.655901074409485,0.742186188697815,-0.185234054923058,0.48134982585907,0.856732606887817,-0.575338959693909,0.442981451749802,0.687570035457611,-0.570384085178375,0.537651479244232,0.62096118927002,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.185234054923058,0.48134982585907,0.856732606887817,0.0513622872531414,0.468802571296692,0.881808400154114,0.017973817884922,0.0102047342807055,0.999786376953125,-0.782657444477081,0.380464553833008,0.4926398396492,-0.766035974025726,0.399132251739502,0.503867447376251,-0.71884548664093,0.434318542480469,0.542796969413757,-0.724688529968262,0.437472999095917,0.532394528388977,-0.766035974025726,0.399132251739502,0.503867447376251,-0.742441892623901,0.401161223649979,0.53651624917984,-0.745189905166626,0.433578848838806,0.506657063961029,-0.71884548664093,0.434318542480469,0.542796969413757,-0.704894602298737,0.389235317707062,0.592975080013275,-0.649461984634399,0.424084842205048,0.631150722503662,-0.674032330513,0.408573538064957,0.615425109863281,-0.162020102143288,0.560337007045746,0.812263488769531,0.0571579374372959,0.555576980113983,0.829498171806335,0.0635503008961678,0.655404150485992,0.752600014209747,-0.137671425938606,0.655901074409485,0.742186188697815,\n-0.162020102143288,0.560337007045746,0.812263488769531,-0.137671425938606,0.655901074409485,0.742186188697815,-0.570384085178375,0.537651479244232,0.62096118927002,-0.636985540390015,0.443951308727264,0.630203664302826,-0.71884548664093,0.434318542480469,0.542796969413757,-0.745189905166626,0.433578848838806,0.506657063961029,-0.709671497344971,0.473905295133591,0.521325349807739,-0.700818002223969,0.442935287952423,0.559162259101868,-0.700818002223969,0.442935287952423,0.559162259101868,-0.75682544708252,0.389968425035477,0.524537801742554,-0.724688529968262,0.437472999095917,0.532394528388977,-0.71884548664093,0.434318542480469,0.542796969413757,-0.782657444477081,0.380464553833008,0.4926398396492,-0.724688529968262,0.437472999095917,0.532394528388977,-0.75682544708252,0.389968425035477,0.524537801742554,-0.570384085178375,0.537651479244232,0.62096118927002,-0.575338959693909,0.442981451749802,0.687570035457611,-0.803570151329041,0.341960042715073,0.487173795700073,-0.636985540390015,0.443951308727264,0.630203664302826,-0.570384085178375,0.537651479244232,0.62096118927002,-0.75682544708252,0.389968425035477,0.524537801742554,-0.649461984634399,0.424084842205048,0.631150722503662,-0.803570151329041,0.341960042715073,0.487173795700073,-0.75682544708252,0.389968425035477,0.524537801742554,-0.700818002223969,0.442935287952423,0.559162259101868,-0.674032330513,0.408573538064957,0.615425109863281,-0.474541217088699,0.29422801733017,0.829602658748627,-0.402321964502335,0.279689967632294,0.871728479862213,-0.709671497344971,0.473905295133591,0.521325349807739,-0.745189905166626,0.433578848838806,0.506657063961029,-0.466067016124725,0.290591061115265,0.835666418075562,-0.474541217088699,0.29422801733017,0.829602658748627,-0.745189905166626,0.433578848838806,0.506657063961029,-0.742441892623901,0.401161223649979,0.53651624917984,-0.566419124603271,0.446817666292191,0.692476272583008,-0.701379120349884,0.42103236913681,0.575151324272156,-0.709671497344971,0.473905295133591,0.521325349807739,-0.402321964502335,0.279689967632294,0.871728479862213,\n-0.271942734718323,0.215774357318878,0.93781054019928,-0.566419124603271,0.446817666292191,0.692476272583008,-0.271942734718323,0.215774357318878,0.93781054019928,-0.158640176057816,0.0965946391224861,0.982600033283234,-0.389257401227951,0.367899239063263,0.844469547271729,-0.235767140984535,0.346122115850449,0.908082246780396,-0.313661307096481,0.354362040758133,0.88093364238739,-0.362064868211746,0.124421969056129,0.923811793327332,-0.298522680997849,0.122926026582718,0.946453094482422,-0.406924575567245,0.55693382024765,0.724042177200317,-0.296029925346375,0.469678968191147,0.831725895404816,-0.313661307096481,0.354362040758133,0.88093364238739,-0.319937378168106,0.457704126834869,0.829546272754669,-0.530960738658905,0.402330845594406,0.74579530954361,-0.362064868211746,0.124421969056129,0.923811793327332,-0.313661307096481,0.354362040758133,0.88093364238739,-0.296029925346375,0.469678968191147,0.831725895404816,-0.265877991914749,0.261434108018875,0.927879869937897,-0.410987347364426,-0.221517965197563,0.884318470954895,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.450571924448013,-0.714681327342987,0.534991204738617,-0.298522680997849,0.122926026582718,0.946453094482422,-0.362064868211746,0.124421969056129,0.923811793327332,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.410987347364426,-0.221517965197563,0.884318470954895,0.139874473214149,0.332423865795136,0.932700097560883,-0.113911136984825,0.222564980387688,0.968240201473236,-0.38422480225563,0.137366592884064,0.912963151931763,-0.496900916099548,0.22183683514595,0.838974297046661,-0.259019255638123,0.306849449872971,0.915834307670593,-0.365421146154404,0.118911430239677,0.923215806484222,-0.459187179803848,0.12899711728096,0.878923714160919,-0.365421146154404,0.118911430239677,0.923215806484222,-0.259019255638123,0.306849449872971,0.915834307670593,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.215113177895546,0.235299572348595,0.947818756103516,-0.0251229144632816,0.34635528922081,0.937766969203949,\n-0.259019255638123,0.306849449872971,0.915834307670593,-0.284513026475906,0.431574016809464,0.856035172939301,-0.235767140984535,0.346122115850449,0.908082246780396,-0.427875101566315,0.308164179325104,0.849680960178375,-0.284513026475906,0.431574016809464,0.856035172939301,-0.259019255638123,0.306849449872971,0.915834307670593,-0.496900916099548,0.22183683514595,0.838974297046661,-0.235767140984535,0.346122115850449,0.908082246780396,-0.284513026475906,0.431574016809464,0.856035172939301,-0.319937378168106,0.457704126834869,0.829546272754669,-0.313661307096481,0.354362040758133,0.88093364238739,-0.419355839490891,0.314480572938919,0.851611793041229,-0.319937378168106,0.457704126834869,0.829546272754669,-0.284513026475906,0.431574016809464,0.856035172939301,-0.427875101566315,0.308164179325104,0.849680960178375,-0.0850988999009132,0.32578244805336,0.941607117652893,-0.0748888924717903,0.185519590973854,0.979782700538635,0.0812274590134621,0.180781692266464,0.980163276195526,0.0307731032371521,0.261024415493011,0.964841604232788,-0.786397933959961,0.197700291872025,0.58522891998291,-0.548411548137665,0.270011872053146,0.791415393352509,-0.590761244297028,0.21027672290802,0.778963983058929,-0.8270303606987,0.233872473239899,0.511198997497559,-0.530960738658905,0.402330845594406,0.74579530954361,-0.548411548137665,0.270011872053146,0.791415393352509,-0.786397933959961,0.197700291872025,0.58522891998291,-0.737271249294281,0.345291316509247,0.580693602561951,-0.548411548137665,0.270011872053146,0.791415393352509,-0.419355839490891,0.314480572938919,0.851611793041229,-0.409960985183716,0.234984055161476,0.881314098834991,-0.590761244297028,0.21027672290802,0.778963983058929,-0.419355839490891,0.314480572938919,0.851611793041229,-0.548411548137665,0.270011872053146,0.791415393352509,-0.530960738658905,0.402330845594406,0.74579530954361,-0.319937378168106,0.457704126834869,0.829546272754669,0.0340906009078026,0.177746370434761,0.983485698699951,0.0145859681069851,0.146671071648598,0.989077806472778,0.0307504720985889,0.178748592734337,0.983414113521576,\n0.0284836571663618,0.148866042494774,0.988447070121765,0.0145859681069851,0.146671071648598,0.989077806472778,-0.109741598367691,0.221520185470581,0.968961119651794,0.0381993055343628,0.285694986581802,0.957558989524841,0.0307504720985889,0.178748592734337,0.983414113521576,-0.521145462989807,0.365769624710083,0.771116077899933,-0.52777773141861,0.480110883712769,0.700674116611481,-0.593105614185333,0.348213493824005,0.725929081439972,-0.469541937112808,0.464283794164658,0.750979959964752,-0.593105614185333,0.348213493824005,0.725929081439972,-0.52777773141861,0.480110883712769,0.700674116611481,-0.542732357978821,0.501746475696564,0.673566699028015,-0.125368878245354,0.424985140562058,0.896476626396179,-0.229512825608253,0.568260371685028,0.790192425251007,-0.279750615358353,0.610641419887543,0.74084860086441,-0.20940063893795,0.453145354986191,0.866493284702301,-0.16978645324707,0.304286330938339,0.937327265739441,-0.0915354415774345,0.261345416307449,0.960895359516144,-0.125368878245354,0.424985140562058,0.896476626396179,-0.20940063893795,0.453145354986191,0.866493284702301,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.229512825608253,0.568260371685028,0.790192425251007,-0.125368878245354,0.424985140562058,0.896476626396179,0.0543623231351376,0.513473629951477,0.85638165473938,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.125368878245354,0.424985140562058,0.896476626396179,0.045425571501255,0.382962375879288,0.922646403312683,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.362064868211746,0.124421969056129,0.923811793327332,-0.265877991914749,0.261434108018875,0.927879869937897,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.450571924448013,-0.714681327342987,0.534991204738617,\n-0.422395497560501,-0.639552056789398,0.642304599285126,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.271065413951874,-0.201962277293205,0.941134810447693,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.196050360798836,-0.216366931796074,0.956425428390503,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.196050360798836,-0.216366931796074,0.956425428390503,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.271065413951874,-0.201962277293205,0.941134810447693,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.628194212913513,0.287138849496841,0.723134398460388,-0.543807446956635,0.220993861556053,0.809589505195618,-0.530328452587128,0.10359351336956,0.841439306735992,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.578717350959778,0.160483196377754,0.799582004547119,-0.522611916065216,0.119792513549328,0.844112873077393,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.500701189041138,-0.0503258183598518,0.864156007766724,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.578717350959778,0.160483196377754,0.799582004547119,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.522611916065216,0.119792513549328,0.844112873077393,-0.543807446956635,0.220993861556053,0.809589505195618,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.628194212913513,0.287138849496841,0.723134398460388,-0.308251351118088,0.00680266646668315,0.951280653476715,-0.251964539289474,0.00403303280472755,0.967728078365326,\n-0.543807446956635,0.220993861556053,0.809589505195618,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.308251351118088,0.00680266646668315,0.951280653476715,-0.628194212913513,0.287138849496841,0.723134398460388,-0.739963114261627,0.167704880237579,0.651405930519104,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.53056800365448,-0.207617223262787,0.821822762489319,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.500701189041138,-0.0503258183598518,0.864156007766724,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.323468834161758,-0.409916341304779,0.85284024477005,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.323468834161758,-0.409916341304779,0.85284024477005,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.323468834161758,-0.409916341304779,0.85284024477005,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.800495445728302,-0.125636011362076,0.586022734642029,\n-0.797025501728058,-0.136790543794632,0.588250517845154,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.800495445728302,-0.125636011362076,0.586022734642029,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.800495445728302,-0.125636011362076,0.586022734642029,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.927467882633209,0.10914921015501,0.357616752386093,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.951293051242828,0.220237165689468,0.215724766254425,-0.927467882633209,0.10914921015501,0.357616752386093,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.741787433624268,-0.27885103225708,0.609912693500519,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.741787433624268,-0.27885103225708,0.609912693500519,\n-0.785227119922638,-0.253755480051041,0.564824342727661,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.0850988999009132,0.32578244805336,0.941607117652893,-0.444485455751419,0.263989001512527,0.856003820896149,-0.459187179803848,0.12899711728096,0.878923714160919,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.506407201290131,0.224265813827515,0.832620322704315,-0.444485455751419,0.263989001512527,0.856003820896149,-0.409337908029556,0.315496683120728,0.856098294258118,-0.49151623249054,0.284042507410049,0.823244571685791,-0.49151623249054,0.284042507410049,0.823244571685791,-0.409337908029556,0.315496683120728,0.856098294258118,-0.352872759103775,0.327800124883652,0.87637197971344,-0.521145462989807,0.365769624710083,0.771116077899933,-0.593105614185333,0.348213493824005,0.725929081439972,-0.352872759103775,0.327800124883652,0.87637197971344,-0.409337908029556,0.315496683120728,0.856098294258118,-0.137076109647751,0.352542161941528,0.925701975822449,-0.197477996349335,0.340727478265762,0.919188320636749,-0.137076109647751,0.352542161941528,0.925701975822449,-0.409337908029556,0.315496683120728,0.856098294258118,-0.444485455751419,0.263989001512527,0.856003820896149,-0.0850988999009132,0.32578244805336,0.941607117652893,-0.137076109647751,0.352542161941528,0.925701975822449,-0.0867536216974258,0.288804531097412,0.953449428081512,-0.16978645324707,0.304286330938339,0.937327265739441,-0.197477996349335,0.340727478265762,0.919188320636749,-0.0850988999009132,0.32578244805336,0.941607117652893,0.0307731032371521,0.261024415493011,0.964841604232788,-0.0867536216974258,0.288804531097412,0.953449428081512,-0.137076109647751,0.352542161941528,0.925701975822449,0.0340906009078026,0.177746370434761,0.983485698699951,0.0307731032371521,0.261024415493011,0.964841604232788,0.0812274590134621,0.180781692266464,0.980163276195526,0.0145859681069851,0.146671071648598,0.989077806472778,-0.365421146154404,0.118911430239677,0.923215806484222,-0.113911136984825,0.222564980387688,0.968240201473236,-0.0748888924717903,0.185519590973854,0.979782700538635,\n-0.459187179803848,0.12899711728096,0.878923714160919,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.113911136984825,0.222564980387688,0.968240201473236,0.0879488736391068,0.341627478599548,0.935711324214935,0.0812274590134621,0.180781692266464,0.980163276195526,0.0812274590134621,0.180781692266464,0.980163276195526,0.0879488736391068,0.341627478599548,0.935711324214935,-0.109741598367691,0.221520185470581,0.968961119651794,0.0145859681069851,0.146671071648598,0.989077806472778,0.0879488736391068,0.341627478599548,0.935711324214935,0.0744598954916,0.293609887361526,0.953020930290222,-0.109741598367691,0.221520185470581,0.968961119651794,-0.273772716522217,0.454653739929199,0.847548484802246,-0.197477996349335,0.340727478265762,0.919188320636749,-0.16978645324707,0.304286330938339,0.937327265739441,-0.20940063893795,0.453145354986191,0.866493284702301,-0.352872759103775,0.327800124883652,0.87637197971344,-0.197477996349335,0.340727478265762,0.919188320636749,-0.273772716522217,0.454653739929199,0.847548484802246,-0.521145462989807,0.365769624710083,0.771116077899933,-0.521145462989807,0.365769624710083,0.771116077899933,-0.273772716522217,0.454653739929199,0.847548484802246,-0.346435993909836,0.570491790771484,0.744661808013916,-0.52777773141861,0.480110883712769,0.700674116611481,-0.917084217071533,0.247074887156487,0.312906622886658,-0.915071547031403,0.269603192806244,0.299930244684219,-0.893653392791748,0.274633705615997,0.354908317327499,-0.913878262042999,0.245342120528221,0.323471456766129,-0.913878262042999,0.245342120528221,0.323471456766129,-0.893653392791748,0.274633705615997,0.354908317327499,-0.90123462677002,0.253379285335541,0.351532429456711,-0.933935105800629,0.157070308923721,0.321082711219788,-0.92679888010025,0.171274200081825,0.334228843450546,-0.919987142086029,0.260143458843231,0.293170690536499,-0.915071547031403,0.269603192806244,0.299930244684219,-0.917084217071533,0.247074887156487,0.312906622886658,-0.939980566501617,0.104119330644608,0.324954867362976,-0.893953561782837,0.312333762645721,0.321394920349121,\n-0.903283476829529,0.306006491184235,0.30073082447052,-0.946860730648041,0.157310754060745,0.280549645423889,-0.945931136608124,0.172555223107338,0.274661630392075,-0.946860730648041,0.157310754060745,0.280549645423889,-0.903283476829529,0.306006491184235,0.30073082447052,-0.921472430229187,0.268827170133591,0.280393421649933,-0.915071547031403,0.269603192806244,0.299930244684219,-0.921472430229187,0.268827170133591,0.280393421649933,-0.903283476829529,0.306006491184235,0.30073082447052,-0.893653392791748,0.274633705615997,0.354908317327499,-0.90123462677002,0.253379285335541,0.351532429456711,-0.893653392791748,0.274633705615997,0.354908317327499,-0.903283476829529,0.306006491184235,0.30073082447052,-0.893953561782837,0.312333762645721,0.321394920349121,-0.945931136608124,0.172555223107338,0.274661630392075,-0.921472430229187,0.268827170133591,0.280393421649933,-0.934037208557129,0.242426365613937,0.262305021286011,-0.915071547031403,0.269603192806244,0.299930244684219,-0.919987142086029,0.260143458843231,0.293170690536499,-0.934037208557129,0.242426365613937,0.262305021286011,-0.921472430229187,0.268827170133591,0.280393421649933,-0.974589943885803,0.150285556912422,0.166098326444626,-0.931853711605072,0.224255800247192,0.285233229398727,-0.958487570285797,0.190219804644585,0.212409943342209,-0.929433286190033,0.240452021360397,0.27988663315773,-0.958487570285797,0.190219804644585,0.212409943342209,-0.931853711605072,0.224255800247192,0.285233229398727,-0.919987142086029,0.260143458843231,0.293170690536499,-0.917084217071533,0.247074887156487,0.312906622886658,-0.920456767082214,0.196246728301048,0.338003754615784,-0.92679888010025,0.171274200081825,0.334228843450546,-0.960206747055054,0.212085798382759,0.18172125518322,-0.937809467315674,0.204933196306229,0.280206710100174,-0.945931136608124,0.172555223107338,0.274661630392075,-0.934037208557129,0.242426365613937,0.262305021286011,-0.931853711605072,0.224255800247192,0.285233229398727,-0.934037208557129,0.242426365613937,0.262305021286011,-0.919987142086029,0.260143458843231,0.293170690536499,\n-0.38422480225563,0.137366592884064,0.912963151931763,-0.451660662889481,0.11085283011198,0.88527637720108,-0.0374716036021709,0.192808955907822,0.98052054643631,0.139874473214149,0.332423865795136,0.932700097560883,-0.311408758163452,-0.316491156816483,0.896023392677307,-0.451660662889481,0.11085283011198,0.88527637720108,-0.110501579940319,0.212603434920311,0.970870316028595,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.0737119764089584,-0.466615557670593,0.881383299827576,-0.311408758163452,-0.316491156816483,0.896023392677307,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.0374716036021709,0.192808955907822,0.98052054643631,-0.451660662889481,0.11085283011198,0.88527637720108,-0.069260835647583,0.0269219465553761,0.997235238552094,-0.929433286190033,0.240452021360397,0.27988663315773,-0.919987142086029,0.260143458843231,0.293170690536499,-0.92679888010025,0.171274200081825,0.334228843450546,-0.920456767082214,0.196246728301048,0.338003754615784,-0.938261330127716,0.284641981124878,0.196582421660423,-0.930616736412048,0.324010014533997,0.170205876231194,-0.912839949131012,0.366738528013229,0.179516360163689,-0.921404659748077,0.300344526767731,0.246589884161949,-0.930616736412048,0.324010014533997,0.170205876231194,-0.938261330127716,0.284641981124878,0.196582421660423,-0.929433286190033,0.240452021360397,0.27988663315773,-0.920456767082214,0.196246728301048,0.338003754615784,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.0110307689756155,-0.0793537572026253,0.996785461902618,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.0110307689756155,-0.0793537572026253,0.996785461902618,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.0569505728781223,-0.381698995828629,0.922530472278595,\n-0.251352518796921,-0.520119905471802,0.816270291805267,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.304556578397751,-0.909958362579346,0.281462401151657,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.0569505728781223,-0.381698995828629,0.922530472278595,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.0252015665173531,-0.364970922470093,0.930677771568298,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.611212015151978,0.257414042949677,0.74843692779541,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.447645485401154,0.239924728870392,0.861423015594482,-0.611212015151978,0.257414042949677,0.74843692779541,-0.447645485401154,0.239924728870392,0.861423015594482,-0.438263714313507,0.241573825478554,0.865775406360626,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.281328231096268,0.118911549448967,0.952215552330017,-0.438263714313507,0.241573825478554,0.865775406360626,-0.462802797555923,0.335958212614059,0.820332646369934,-0.389257401227951,0.367899239063263,0.844469547271729,-0.365840524435043,0.0561637468636036,0.928981363773346,\n-0.316211640834808,-0.127585977315903,0.94007021188736,-0.281328231096268,0.118911549448967,0.952215552330017,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.126811400055885,-0.181621968746185,0.975157618522644,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.126811400055885,-0.181621968746185,0.975157618522644,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.0424226783216,0.296286582946777,0.954156458377838,-0.284841567277908,0.292440235614777,0.912876784801483,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.00044033964513801,0.857838094234467,0.51391988992691,-0.284841567277908,0.292440235614777,0.912876784801483,-0.0424226783216,0.296286582946777,0.954156458377838,0.0171615201979876,0.876817524433136,0.480516880750656,-0.00044033964513801,0.857838094234467,0.51391988992691,0.0171615201979876,0.876817524433136,0.480516880750656,-0.004028111230582,0.993554711341858,-0.113281942903996,0.225808262825012,0.957561135292053,-0.179129242897034,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.602755010128021,-0.2416090965271,0.760467886924744,\n-0.623706221580505,-0.429783433675766,0.652898728847504,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.918760776519775,0.045384906232357,0.392197400331497,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.951293051242828,0.220237165689468,0.215724766254425,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.938549876213074,0.168846443295479,0.301023334264755,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.6051185131073,0.474284201860428,0.639441967010498,-0.854055345058441,0.17005829513073,0.4915991127491,-0.800284266471863,0.299557894468308,0.519432485103607,-0.694730341434479,0.390507906675339,0.604030907154083,0.116292431950569,0.478548794984818,0.870325863361359,-0.0183928888291121,0.5789715051651,0.815140306949615,0.103844970464706,0.731326162815094,0.674075841903687,0.103844970464706,0.731326162815094,0.674075841903687,0.0662719309329987,0.700039923191071,0.711021840572357,0.0294170621782541,0.161411821842194,0.986448585987091,\n0.116292431950569,0.478548794984818,0.870325863361359,-0.694730341434479,0.390507906675339,0.604030907154083,-0.800284266471863,0.299557894468308,0.519432485103607,-0.767612516880035,0.418656378984451,0.485281258821487,-0.749469220638275,0.428192466497421,0.504922866821289,-0.11088390648365,0.737395942211151,0.666297197341919,-0.012057981453836,0.63969749212265,0.76853221654892,0.103844970464706,0.731326162815094,0.674075841903687,-0.204512879252434,0.857547581195831,0.472002804279327,-0.476352840662003,0.646627724170685,0.595785677433014,-0.452526926994324,0.608857274055481,0.651546001434326,-0.156580075621605,0.884556114673615,0.439366787672043,-0.204512879252434,0.857547581195831,0.472002804279327,-0.219483211636543,0.80230712890625,0.55509489774704,-0.6051185131073,0.474284201860428,0.639441967010498,-0.476352840662003,0.646627724170685,0.595785677433014,-0.6051185131073,0.474284201860428,0.639441967010498,-0.314458668231964,0.629549622535706,0.710480868816376,-0.599762678146362,0.237867310643196,0.764005124568939,-0.11088390648365,0.737395942211151,0.666297197341919,-0.314458668231964,0.629549622535706,0.710480868816376,-0.219483211636543,0.80230712890625,0.55509489774704,-0.142908409237862,0.800538897514343,0.581991970539093,-0.142908409237862,0.800538897514343,0.581991970539093,-0.147507503628731,0.729519248008728,0.667864620685577,-0.012057981453836,0.63969749212265,0.76853221654892,-0.11088390648365,0.737395942211151,0.666297197341919,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.256247758865356,0.183180019259453,0.94909542798996,-0.0183928888291121,0.5789715051651,0.815140306949615,0.116292431950569,0.478548794984818,0.870325863361359,-0.0183928888291121,0.5789715051651,0.815140306949615,-0.256247758865356,0.183180019259453,0.94909542798996,-0.599762678146362,0.237867310643196,0.764005124568939,-0.314458668231964,0.629549622535706,0.710480868816376,-0.854055345058441,0.17005829513073,0.4915991127491,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.783675134181976,0.0171119719743729,0.620935142040253,\n-0.946490168571472,0.0598345808684826,0.317137449979782,-0.6051185131073,0.474284201860428,0.639441967010498,-0.599762678146362,0.237867310643196,0.764005124568939,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.854055345058441,0.17005829513073,0.4915991127491,0.103844970464706,0.731326162815094,0.674075841903687,-0.012057981453836,0.63969749212265,0.76853221654892,0.0579896494746208,0.56835275888443,0.820738911628723,0.0662719309329987,0.700039923191071,0.711021840572357,0.103844970464706,0.731326162815094,0.674075841903687,-0.0183928888291121,0.5789715051651,0.815140306949615,-0.314458668231964,0.629549622535706,0.710480868816376,-0.11088390648365,0.737395942211151,0.666297197341919,-0.6051185131073,0.474284201860428,0.639441967010498,-0.219483211636543,0.80230712890625,0.55509489774704,-0.314458668231964,0.629549622535706,0.710480868816376,-0.58455902338028,0.465762704610825,0.664346158504486,-0.452526926994324,0.608857274055481,0.651546001434326,-0.476352840662003,0.646627724170685,0.595785677433014,-0.6051185131073,0.474284201860428,0.639441967010498,-0.694730341434479,0.390507906675339,0.604030907154083,-0.58455902338028,0.465762704610825,0.664346158504486,-0.476352840662003,0.646627724170685,0.595785677433014,-0.58455902338028,0.465762704610825,0.664346158504486,-0.617127954959869,0.561533391475677,0.551210701465607,-0.448102563619614,0.672870218753815,0.588599801063538,-0.452526926994324,0.608857274055481,0.651546001434326,-0.250480443239212,-0.173854321241379,0.952383458614349,-0.164747953414917,-0.0155069231987,0.986213803291321,0.116292431950569,0.478548794984818,0.870325863361359,0.0294170621782541,0.161411821842194,0.986448585987091,-0.250480443239212,-0.173854321241379,0.952383458614349,0.0294170621782541,0.161411821842194,0.986448585987091,-0.000449120096163824,-0.222807794809341,0.974862277507782,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.750347912311554,0.23514324426651,-0.617807149887085,-0.939923703670502,0.145416438579559,-0.308864831924438,\n-0.962794303894043,0.225805953145027,-0.148454576730728,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.750347912311554,0.23514324426651,-0.617807149887085,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.750347912311554,0.23514324426651,-0.617807149887085,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.750347912311554,0.23514324426651,-0.617807149887085,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.257477760314941,0.382379919290543,-0.887406766414642,-0.296208798885345,0.254752188920975,-0.920522511005402,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.296208798885345,0.254752188920975,-0.920522511005402,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.296208798885345,0.254752188920975,-0.920522511005402,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.127526223659515,0.388497859239578,-0.912582278251648,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.296208798885345,0.254752188920975,-0.920522511005402,-0.257477760314941,0.382379919290543,-0.887406766414642,0.0148119395598769,0.396181702613831,-0.918052673339844,-0.127526223659515,0.388497859239578,-0.912582278251648,-0.0627769380807877,0.434968650341034,-0.898254573345184,0.012098491191864,0.36400181055069,-0.931319653987885,0.000681107048876584,0.225692093372345,-0.974198460578918,0.012098491191864,0.36400181055069,-0.931319653987885,-0.0627769380807877,0.434968650341034,-0.898254573345184,-0.982630908489227,0.117604449391365,0.143546640872955,-0.973341524600983,0.209714606404305,-0.0928762331604958,\n-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.996125161647797,0.0665269121527672,0.0575226061046124,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.996125161647797,0.0665269121527672,0.0575226061046124,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.00121181993745267,0.232196122407913,-0.9726682305336,-0.00138723512645811,0.200112879276276,-0.979771912097931,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.127526223659515,0.388497859239578,-0.912582278251648,0.0148119395598769,0.396181702613831,-0.918052673339844,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.940674006938934,0.339310526847839,0.000872477365192026,-0.931051731109619,0.363819122314453,0.027898857370019,-0.940674006938934,0.339310526847839,0.000872477365192026,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.854649007320404,0.375557482242584,-0.358513176441193,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.854649007320404,0.375557482242584,-0.358513176441193,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.496117979288101,0.475835919380188,-0.726255536079407,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.496117979288101,0.475835919380188,-0.726255536079407,-0.808901607990265,0.421495854854584,-0.409901708364487,\n-0.80251806974411,0.311771512031555,-0.508687853813171,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.496117979288101,0.475835919380188,-0.726255536079407,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.496117979288101,0.475835919380188,-0.726255536079407,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.127602562308311,0.294543892145157,-0.947080492973328,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.127602562308311,0.294543892145157,-0.947080492973328,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.996125161647797,0.0665269121527672,0.0575226061046124,-0.939561665058136,0.24427318572998,0.239905118942261,-0.960240244865417,0.158970504999161,0.229493051767349,-0.844134092330933,0.36929926276207,0.388658910989761,-0.960240244865417,0.158970504999161,0.229493051767349,-0.939561665058136,0.24427318572998,0.239905118942261,-0.856849551200867,0.411835759878159,0.310161501169205,-0.931051731109619,0.363819122314453,0.027898857370019,-0.856849551200867,0.411835759878159,0.310161501169205,-0.939561665058136,0.24427318572998,0.239905118942261,-0.940674006938934,0.339310526847839,0.000872477365192026,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.940674006938934,0.339310526847839,0.000872477365192026,-0.939561665058136,0.24427318572998,0.239905118942261,-0.996125161647797,0.0665269121527672,0.0575226061046124,-0.195909768342972,0.965728640556335,-0.170257449150085,0.695661246776581,0.682053446769714,-0.225518316030502,0.590233266353607,0.805784702301025,0.0483287125825882,-0.363503694534302,0.891945838928223,0.26888245344162,\n-0.195909768342972,0.965728640556335,-0.170257449150085,-0.363503694534302,0.891945838928223,0.26888245344162,-0.907475471496582,0.340031713247299,0.246711865067482,-0.927974164485931,0.372219532728195,-0.0177929922938347,0.695661246776581,0.682053446769714,-0.225518316030502,0.699705183506012,0.427644014358521,-0.572305202484131,0.904918491840363,0.223670721054077,-0.362068980932236,0.912925958633423,0.3648841381073,-0.182827115058899,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.482406258583069,0.640618324279785,0.597404718399048,0.300904870033264,0.919037222862244,0.254611104726791,0.821504950523376,0.569011390209198,0.0368196852505207,0.517754137516022,0.73391991853714,0.439650118350983,0.545511066913605,0.803328096866608,0.238917589187622,0.517754137516022,0.73391991853714,0.439650118350983,0.821504950523376,0.569011390209198,0.0368196852505207,0.855710446834564,0.513507485389709,-0.0637943744659424,0.590233266353607,0.805784702301025,0.0483287125825882,0.855710446834564,0.513507485389709,-0.0637943744659424,0.821504950523376,0.569011390209198,0.0368196852505207,0.300904870033264,0.919037222862244,0.254611104726791,0.912925958633423,0.3648841381073,-0.182827115058899,0.61859929561615,0.783204674720764,-0.0626528933644295,0.545511066913605,0.803328096866608,0.238917589187622,0.855710446834564,0.513507485389709,-0.0637943744659424,0.912925958633423,0.3648841381073,-0.182827115058899,0.855710446834564,0.513507485389709,-0.0637943744659424,0.590233266353607,0.805784702301025,0.0483287125825882,0.695661246776581,0.682053446769714,-0.225518316030502,-0.363503694534302,0.891945838928223,0.26888245344162,\n0.300904870033264,0.919037222862244,0.254611104726791,-0.482406258583069,0.640618324279785,0.597404718399048,-0.907475471496582,0.340031713247299,0.246711865067482,0.590233266353607,0.805784702301025,0.0483287125825882,0.300904870033264,0.919037222862244,0.254611104726791,-0.363503694534302,0.891945838928223,0.26888245344162,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.189944684505463,0.677020668983459,-0.711030244827271,0.699705183506012,0.427644014358521,-0.572305202484131,0.695661246776581,0.682053446769714,-0.225518316030502,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.189944684505463,0.677020668983459,-0.711030244827271,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.927974164485931,0.372219532728195,-0.0177929922938347,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.927974164485931,0.372219532728195,-0.0177929922938347,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.933456838130951,-0.0391703061759472,-0.356544464826584,\n-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.86995929479599,-0.0271206852048635,-0.492377251386642,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.86995929479599,-0.0271206852048635,-0.492377251386642,-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.21810856461525,0.364344894886017,-0.905362606048584,-0.189944684505463,0.677020668983459,-0.711030244827271,0.699705183506012,0.427644014358521,-0.572305202484131,-0.189944684505463,0.677020668983459,-0.711030244827271,-0.21810856461525,0.364344894886017,-0.905362606048584,0.486043959856033,0.298038214445114,-0.821543991565704,0.426036864519119,0.191680565476418,-0.884166955947876,0.486043959856033,0.298038214445114,-0.821543991565704,-0.21810856461525,0.364344894886017,-0.905362606048584,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.21810856461525,0.364344894886017,-0.905362606048584,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.846078813076019,-0.0403724387288094,-0.531526803970337,-0.292363196611404,0.000483309850096703,-0.956307232379913,-0.250867486000061,0.201503813266754,-0.946816623210907,0.426036864519119,0.191680565476418,-0.884166955947876,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.292363196611404,0.000483309850096703,-0.956307232379913,0.409033417701721,0.056328222155571,-0.910779237747192,0.482761442661285,-0.152583673596382,-0.862357020378113,0.409033417701721,0.056328222155571,-0.910779237747192,-0.292363196611404,0.000483309850096703,-0.956307232379913,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.292363196611404,0.000483309850096703,-0.956307232379913,\n-0.846078813076019,-0.0403724387288094,-0.531526803970337,0.652852118015289,-0.584342896938324,-0.482003599405289,0.664769351482391,-0.462521582841873,-0.586647689342499,0.527362644672394,-0.438462257385254,-0.72776335477829,0.496177941560745,-0.590101897716522,-0.636857271194458,0.614885807037354,-0.39096936583519,-0.684878408908844,0.725502192974091,-0.203444570302963,-0.657462477684021,0.527362644672394,-0.438462257385254,-0.72776335477829,0.664769351482391,-0.462521582841873,-0.586647689342499,-0.846078813076019,-0.0403724387288094,-0.531526803970337,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.846078813076019,-0.0403724387288094,-0.531526803970337,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.294507533311844,-0.613352715969086,-0.73284637928009,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.878421425819397,-0.363578677177429,-0.310139209032059,0.725502192974091,-0.203444570302963,-0.657462477684021,0.482761442661285,-0.152583673596382,-0.862357020378113,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.294507533311844,-0.613352715969086,-0.73284637928009,0.527362644672394,-0.438462257385254,-0.72776335477829,-0.304955780506134,-0.78030651807785,-0.546007096767426,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.304955780506134,-0.78030651807785,-0.546007096767426,-0.367999702692032,-0.664126336574554,-0.650778293609619,0.496177941560745,-0.590101897716522,-0.636857271194458,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.304955780506134,-0.78030651807785,-0.546007096767426,-0.294507533311844,-0.613352715969086,-0.73284637928009,0.527362644672394,-0.438462257385254,-0.72776335477829,-0.294507533311844,-0.613352715969086,-0.73284637928009,\n-0.304955780506134,-0.78030651807785,-0.546007096767426,0.496177941560745,-0.590101897716522,-0.636857271194458,-0.933935105800629,0.157070308923721,0.321082711219788,-0.90123462677002,0.253379285335541,0.351532429456711,-0.914615273475647,0.203247100114822,0.349527567625046,-0.156580075621605,0.884556114673615,0.439366787672043,-0.0257334969937801,0.934201776981354,0.355815708637238,-0.109931223094463,0.875869393348694,0.469859391450882,-0.204512879252434,0.857547581195831,0.472002804279327,-0.389257401227951,0.367899239063263,0.844469547271729,-0.158640176057816,0.0965946391224861,0.982600033283234,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.281328231096268,0.118911549448967,0.952215552330017,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.447645485401154,0.239924728870392,0.861423015594482,-0.383932620286942,0.132088497281075,0.913864493370056,-0.462802797555923,0.335958212614059,0.820332646369934,-0.438263714313507,0.241573825478554,0.865775406360626,-0.82659912109375,0.121020883321762,0.549625158309937,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.704894602298737,0.389235317707062,0.592975080013275,-0.736577808856964,0.297644317150116,0.607339262962341,-0.808332681655884,0.323168575763702,0.49209788441658,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.982630908489227,0.117604449391365,0.143546640872955,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.767612516880035,0.418656378984451,0.485281258821487,-0.800284266471863,0.299557894468308,0.519432485103607,-0.910772800445557,0.214318007230759,0.352931588888168,-0.844134092330933,0.36929926276207,0.388658910989761,-0.800284266471863,0.299557894468308,0.519432485103607,-0.854055345058441,0.17005829513073,0.4915991127491,-0.946490168571472,0.0598345808684826,0.317137449979782,\n-0.910772800445557,0.214318007230759,0.352931588888168,-0.58455902338028,0.465762704610825,0.664346158504486,-0.694730341434479,0.390507906675339,0.604030907154083,-0.749469220638275,0.428192466497421,0.504922866821289,-0.617127954959869,0.561533391475677,0.551210701465607,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.573864758014679,0.230327397584915,0.785893499851227,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.841734766960144,0.21214547753334,0.496464431285858,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.311408758163452,-0.316491156816483,0.896023392677307,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.496900916099548,0.22183683514595,0.838974297046661,-0.459187179803848,0.12899711728096,0.878923714160919,-0.444485455751419,0.263989001512527,0.856003820896149,-0.506407201290131,0.224265813827515,0.832620322704315,-0.409960985183716,0.234984055161476,0.881314098834991,-0.427875101566315,0.308164179325104,0.849680960178375,-0.496900916099548,0.22183683514595,0.838974297046661,-0.506407201290131,0.224265813827515,0.832620322704315,-0.451172351837158,0.441036701202393,0.775841593742371,-0.489892512559891,0.122311964631081,0.863159954547882,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.265877991914749,0.261434108018875,0.927879869937897,-0.451172351837158,0.441036701202393,0.775841593742371,-0.265877991914749,0.261434108018875,0.927879869937897,\n-0.296029925346375,0.469678968191147,0.831725895404816,-0.431310623884201,0.54215931892395,0.721134126186371,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.0848771035671234,-0.827450573444366,0.55508691072464,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.522650301456451,0.406982094049454,-0.749134302139282,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.884765982627869,0.444219619035721,-0.140918776392937,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.690247058868408,0.178245946764946,0.701275527477264,-0.72613924741745,0.535442233085632,0.431304275989532,-0.684539437294006,0.44213280081749,0.57958984375,-0.746036350727081,0.393973112106323,0.536856591701508,-0.773442804813385,0.436002254486084,0.460096001625061,-0.7086301445961,0.50186014175415,0.495963364839554,-0.684539437294006,0.44213280081749,0.57958984375,-0.649461984634399,0.424084842205048,0.631150722503662,-0.704894602298737,0.389235317707062,0.592975080013275,-0.746036350727081,0.393973112106323,0.536856591701508,-0.808332681655884,0.323168575763702,0.49209788441658,-0.859274387359619,0.29542076587677,0.417581170797348,-0.773442804813385,0.436002254486084,0.460096001625061,-0.746036350727081,0.393973112106323,0.536856591701508,-0.764328002929688,0.478488236665726,0.432263433933258,-0.7086301445961,0.50186014175415,0.495963364839554,-0.776160657405853,0.480935424566269,0.407769232988358,-0.709937155246735,0.54696124792099,0.443646997213364,-0.594367325305939,0.527927815914154,0.606646299362183,-0.764328002929688,0.478488236665726,0.432263433933258,-0.709937155246735,0.54696124792099,0.443646997213364,-0.487235128879547,0.602307498455048,0.632319211959839,-0.16526772081852,0.578359544277191,0.798865914344788,-0.594367325305939,0.527927815914154,0.606646299362183,-0.487235128879547,0.602307498455048,0.632319211959839,-0.148301675915718,0.617360651493073,0.772575199604034,\n0.0581676289439201,0.571192860603333,0.818752288818359,-0.16526772081852,0.578359544277191,0.798865914344788,-0.148301675915718,0.617360651493073,0.772575199604034,0.0604556538164616,0.606487095355988,0.792791604995728,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.8117955327034,0.118040002882481,0.571886837482452,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.739963114261627,0.167704880237579,0.651405930519104,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.308251351118088,0.00680266646668315,0.951280653476715,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.308251351118088,0.00680266646668315,0.951280653476715,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.0252015665173531,-0.364970922470093,0.930677771568298,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.849758863449097,0.226472169160843,0.476046502590179,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.849758863449097,0.226472169160843,0.476046502590179,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.847808718681335,0.127517849206924,0.514742314815521,-0.328838348388672,0.935817182064056,0.126931354403496,\n0.279289931058884,0.161584615707397,0.94651335477829,-0.124414332211018,0.380547553300858,0.91635400056839,-0.630214631557465,0.655408442020416,0.416256308555603,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.124414332211018,0.380547553300858,0.91635400056839,0.279289931058884,0.161584615707397,0.94651335477829,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.53056800365448,-0.207617223262787,0.821822762489319,-0.406814515590668,-0.530913829803467,0.743392527103424,-0.28600937128067,-0.592511594295502,0.753079414367676,0.0128951743245125,-0.862936913967133,0.505147039890289,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.406814515590668,-0.530913829803467,0.743392527103424,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.188662573695183,-0.633236289024353,0.750611901283264,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.218783125281334,-0.517780601978302,0.827065408229828,0.138299137353897,-0.216322302818298,0.966477155685425,0.028565090149641,-0.175006538629532,0.984152793884277,0.0824021622538567,0.119332544505596,0.98942893743515,0.0996207222342491,0.155612200498581,0.982782065868378,-0.0433456413447857,-0.716439366340637,0.696301460266113,0.152057304978371,-0.511582612991333,0.845672428607941,-0.0233143605291843,-0.495335191488266,0.868389010429382,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.619005084037781,0.113047316670418,0.777208507061005,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.619005084037781,0.113047316670418,0.777208507061005,-0.498029559850693,0.248690649867058,0.830734312534332,-0.261222988367081,0.14337170124054,0.954571664333344,-0.245125457644463,0.30829644203186,0.919166386127472,-0.484222084283829,0.366713851690292,0.794386506080627,-0.728943645954132,0.505101680755615,0.462075144052505,-0.761701762676239,0.421244710683823,0.492304056882858,\n-0.673884630203247,0.467902958393097,0.571792244911194,-0.671048521995544,0.370010554790497,0.642484307289124,-0.655175447463989,0.41560024023056,0.630889534950256,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.670063674449921,0.104801684617996,0.734868168830872,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.739276468753815,0.150933310389519,0.656269311904907,-0.670063674449921,0.104801684617996,0.734868168830872,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.00827599223703146,-0.428946763277054,0.903291881084442,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.0569505728781223,-0.381698995828629,0.922530472278595,0.033345639705658,-0.401991754770279,0.915035903453827,-0.426155984401703,-0.544485569000244,0.722444832324982,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.0110307689756155,-0.0793537572026253,0.996785461902618,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.00827599223703146,-0.428946763277054,0.903291881084442,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.426155984401703,-0.544485569000244,0.722444832324982,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.782657444477081,0.380464553833008,0.4926398396492,-0.575338959693909,0.442981451749802,0.687570035457611,-0.664805889129639,0.056874256581068,0.74484795331955,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.100514478981495,0.314375013113022,0.943962454795837,-0.144208893179893,0.115719296038151,0.982757806777954,\n-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.976188123226166,-0.133096665143967,-0.171295195817947,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.0115164406597614,-0.997357308864594,0.0717345252633095,0.315651625394821,-0.933804154396057,0.168445229530334,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.451660662889481,0.11085283011198,0.88527637720108,-0.38422480225563,0.137366592884064,0.912963151931763,-0.215113177895546,0.235299572348595,0.947818756103516,-0.110501579940319,0.212603434920311,0.970870316028595,-0.354619354009628,-0.125306099653244,0.926576197147369,-0.490771174430847,0.254273563623428,0.833359837532043,-0.330226361751556,0.315774649381638,0.889514982700348,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.134053289890289,0.873388648033142,-0.468211501836777,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.152414619922638,0.895912230014801,-0.417266219854355,-0.134053289890289,0.873388648033142,-0.468211501836777,-0.152414619922638,0.895912230014801,-0.417266219854355,0.461978673934937,0.681396842002869,-0.567691802978516,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.127602562308311,0.294543892145157,-0.947080492973328,0.002942921128124,0.253444164991379,-0.967345535755157,-0.00542618287727237,0.149814411997795,-0.98869925737381,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.0685182884335518,0.227593377232552,-0.971342623233795,-0.178532913327217,0.211587846279144,-0.960914433002472,\n-0.156535282731056,0.121644385159016,-0.980152726173401,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.109931223094463,0.875869393348694,0.469859391450882,-0.147507503628731,0.729519248008728,0.667864620685577,-0.142908409237862,0.800538897514343,0.581991970539093,-0.204512879252434,0.857547581195831,0.472002804279327,-0.109931223094463,0.875869393348694,0.469859391450882,-0.142908409237862,0.800538897514343,0.581991970539093,-0.219483211636543,0.80230712890625,0.55509489774704,-0.00827599223703146,-0.428946763277054,0.903291881084442,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.482923626899719,-0.587090194225311,0.649699866771698,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.446160137653351,-0.556800782680511,0.700652599334717,0.912925958633423,0.3648841381073,-0.182827115058899,0.904918491840363,0.223670721054077,-0.362068980932236,0.636519849300385,0.647450149059296,-0.419107168912888,0.61859929561615,0.783204674720764,-0.0626528933644295,0.673712253570557,-0.610602140426636,-0.416265428066254,0.593445479869843,-0.55176454782486,-0.585984945297241,0.853590905666351,0.0963327810168266,-0.511959493160248,0.936679661273956,0.0184381268918514,-0.349701732397079,0.65024209022522,-0.683634519577026,-0.331404685974121,0.626364231109619,-0.75530606508255,-0.192822501063347,0.773029983043671,-0.340951681137085,-0.534954726696014,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.591210007667542,0.268222451210022,-0.760609924793243,0.633826375007629,0.136593535542488,-0.761318802833557,0.880469501018524,0.252094835042953,-0.401524186134338,0.782209396362305,0.460544377565384,-0.419579923152924,\n0.594776809215546,0.323577910661697,-0.735892593860626,0.889407336711884,0.240895375609398,-0.388489335775375,0.880469501018524,0.252094835042953,-0.401524186134338,0.633826375007629,0.136593535542488,-0.761318802833557,0.97625857591629,0.21655336022377,-0.00488529354333878,0.934138953685761,0.351697504520416,-0.0607721395790577,0.880469501018524,0.252094835042953,-0.401524186134338,0.889407336711884,0.240895375609398,-0.388489335775375,0.860303461551666,0.500444173812866,-0.0971267074346542,0.782209396362305,0.460544377565384,-0.419579923152924,0.880469501018524,0.252094835042953,-0.401524186134338,0.934138953685761,0.351697504520416,-0.0607721395790577,0.591210007667542,0.268222451210022,-0.760609924793243,0.782209396362305,0.460544377565384,-0.419579923152924,0.637716591358185,0.673823416233063,-0.373201817274094,0.476214468479156,0.553961336612701,-0.682895720005035,0.860303461551666,0.500444173812866,-0.0971267074346542,0.719738006591797,0.692870736122131,-0.0436733961105347,0.637716591358185,0.673823416233063,-0.373201817274094,0.782209396362305,0.460544377565384,-0.419579923152924,0.637716591358185,0.673823416233063,-0.373201817274094,0.719738006591797,0.692870736122131,-0.0436733961105347,0.581854581832886,0.813074886798859,0.0188271906226873,0.411318093538284,0.679248511791229,-0.607814848423004,0.476214468479156,0.553961336612701,-0.682895720005035,0.115779966115952,0.184250295162201,-0.976036310195923,0.139773815870285,0.0987650603055954,-0.985245525836945,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.00542618287727237,0.149814411997795,-0.98869925737381,0.17595848441124,0.184216767549515,-0.967007160186768,0.139773815870285,0.0987650603055954,-0.985245525836945,0.286009520292282,0.0698904916644096,-0.955674588680267,0.311260253190994,0.141205564141274,-0.93977552652359,0.115779966115952,0.184250295162201,-0.976036310195923,0.256779372692108,0.275679916143417,-0.926317930221558,0.286009520292282,0.0698904916644096,-0.955674588680267,0.139773815870285,0.0987650603055954,-0.985245525836945,\n0.594776809215546,0.323577910661697,-0.735892593860626,0.633826375007629,0.136593535542488,-0.761318802833557,0.286009520292282,0.0698904916644096,-0.955674588680267,0.256779372692108,0.275679916143417,-0.926317930221558,0.591210007667542,0.268222451210022,-0.760609924793243,0.311260253190994,0.141205564141274,-0.93977552652359,0.286009520292282,0.0698904916644096,-0.955674588680267,0.633826375007629,0.136593535542488,-0.761318802833557,-0.00773082999512553,0.120841763913631,-0.992641687393188,0.0694107115268707,0.216942340135574,-0.973713636398315,-0.000760512368287891,0.207898333668709,-0.978150188922882,0.280443012714386,0.696482062339783,0.660503208637238,0.259025126695633,0.847382187843323,0.463518500328064,0.283866882324219,0.767588019371033,0.574654817581177,0.564589977264404,0.0705946907401085,-0.822346925735474,0.7000772356987,0.225735083222389,-0.67744779586792,0.484490036964417,0.357505440711975,-0.798410475254059,0.426292926073074,0.0950048267841339,-0.899582326412201,0.857822477817535,0.172914609313011,-0.483984649181366,0.61924135684967,0.312463909387589,-0.72035163640976,0.484490036964417,0.357505440711975,-0.798410475254059,0.7000772356987,0.225735083222389,-0.67744779586792,0.417167514562607,0.344521790742874,-0.840997040271759,0.378902137279511,0.434016942977905,-0.8173508644104,0.484490036964417,0.357505440711975,-0.798410475254059,0.61924135684967,0.312463909387589,-0.72035163640976,0.35312095284462,0.134023457765579,-0.925928354263306,0.426292926073074,0.0950048267841339,-0.899582326412201,0.484490036964417,0.357505440711975,-0.798410475254059,0.378902137279511,0.434016942977905,-0.8173508644104,0.35312095284462,0.134023457765579,-0.925928354263306,0.378902137279511,0.434016942977905,-0.8173508644104,0.256089895963669,0.453810095787048,-0.853507101535797,0.23451641201973,0.162132352590561,-0.958496332168579,0.417167514562607,0.344521790742874,-0.840997040271759,0.282642304897308,0.340673059225082,-0.896691262722015,0.256089895963669,0.453810095787048,-0.853507101535797,0.378902137279511,0.434016942977905,-0.8173508644104,\n0.154383972287178,0.366727441549301,-0.917429327964783,0.0980598703026772,0.422548413276672,-0.901020050048828,0.256089895963669,0.453810095787048,-0.853507101535797,0.282642304897308,0.340673059225082,-0.896691262722015,0.000681107048876584,0.225692093372345,-0.974198460578918,0.23451641201973,0.162132352590561,-0.958496332168579,0.256089895963669,0.453810095787048,-0.853507101535797,0.0980598703026772,0.422548413276672,-0.901020050048828,0.138864398002625,0.273968666791916,-0.951660573482513,0.002942921128124,0.253444164991379,-0.967345535755157,0.00121181993745267,0.232196122407913,-0.9726682305336,0.158535957336426,0.208172604441643,-0.96515828371048,0.823107242584229,0.306770831346512,0.477897584438324,0.714458644390106,0.458717465400696,0.528324842453003,0.810526788234711,0.52942031621933,0.250520348548889,0.885173201560974,0.411667943000793,0.216789960861206,0.810526788234711,0.52942031621933,0.250520348548889,0.714458644390106,0.458717465400696,0.528324842453003,0.565896391868591,0.594577431678772,0.571173310279846,0.581854581832886,0.813074886798859,0.0188271906226873,0.719738006591797,0.692870736122131,-0.0436733961105347,0.860303461551666,0.500444173812866,-0.0971267074346542,0.885173201560974,0.411667943000793,0.216789960861206,0.810526788234711,0.52942031621933,0.250520348548889,0.719738006591797,0.692870736122131,-0.0436733961105347,0.903585314750671,0.234351992607117,0.35862609744072,0.838887810707092,0.294615089893341,0.457677990198135,0.894195675849915,0.373524785041809,0.246765822172165,0.919988930225372,0.274642944335938,0.279627621173859,0.823107242584229,0.306770831346512,0.477897584438324,0.885173201560974,0.411667943000793,0.216789960861206,0.894195675849915,0.373524785041809,0.246765822172165,0.838887810707092,0.294615089893341,0.457677990198135,0.860303461551666,0.500444173812866,-0.0971267074346542,0.934138953685761,0.351697504520416,-0.0607721395790577,0.894195675849915,0.373524785041809,0.246765822172165,0.885173201560974,0.411667943000793,0.216789960861206,0.97625857591629,0.21655336022377,-0.00488529354333878,\n0.919988930225372,0.274642944335938,0.279627621173859,0.894195675849915,0.373524785041809,0.246765822172165,0.934138953685761,0.351697504520416,-0.0607721395790577,0.981309294700623,-0.093424528837204,-0.168237790465355,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.955751359462738,0.0778623446822166,-0.283684283494949,0.876467704772949,0.014190330170095,-0.48125147819519,0.993362247943878,-0.0349664911627769,0.109584823250771,0.99024760723114,0.0581013411283493,-0.126625210046768,0.955751359462738,0.0778623446822166,-0.283684283494949,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.857822477817535,0.172914609313011,-0.483984649181366,0.7000772356987,0.225735083222389,-0.67744779586792,0.955751359462738,0.0778623446822166,-0.283684283494949,0.99024760723114,0.0581013411283493,-0.126625210046768,0.564589977264404,0.0705946907401085,-0.822346925735474,0.876467704772949,0.014190330170095,-0.48125147819519,0.955751359462738,0.0778623446822166,-0.283684283494949,0.7000772356987,0.225735083222389,-0.67744779586792,0.800951898097992,0.0424955785274506,-0.597218692302704,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.981309294700623,-0.093424528837204,-0.168237790465355,0.876467704772949,0.014190330170095,-0.48125147819519,0.800951898097992,0.0424955785274506,-0.597218692302704,0.876467704772949,0.014190330170095,-0.48125147819519,0.564589977264404,0.0705946907401085,-0.822346925735474,0.572597026824951,0.0432385914027691,-0.818695962429047,0.945727825164795,-0.098081186413765,0.309804677963257,0.944782853126526,0.0188948940485716,0.327151775360107,0.941311419010162,0.140633046627045,0.30684706568718,0.20434632897377,0.515124678611755,0.832399606704712,0.340864300727844,0.524212896823883,0.780392467975616,0.366717875003815,0.635487914085388,0.679465293884277,0.266760617494583,0.623513042926788,0.734894752502441,0.20434632897377,0.515124678611755,0.832399606704712,0.266760617494583,0.623513042926788,0.734894752502441,0.0616534538567066,0.625403761863709,0.777861833572388,0.0543623231351376,0.513473629951477,0.85638165473938,\n0.395363062620163,0.562560498714447,0.726094901561737,0.524678170681,0.559116363525391,0.641951441764832,0.547570884227753,0.592168509960175,0.591187477111816,0.448636323213577,0.619527339935303,0.644136130809784,0.395363062620163,0.562560498714447,0.726094901561737,0.448636323213577,0.619527339935303,0.644136130809784,0.366717875003815,0.635487914085388,0.679465293884277,0.340864300727844,0.524212896823883,0.780392467975616,0.440387338399887,0.692013561725616,0.571993172168732,0.374413341283798,0.732271254062653,0.568852782249451,0.366717875003815,0.635487914085388,0.679465293884277,0.448636323213577,0.619527339935303,0.644136130809784,0.547570884227753,0.592168509960175,0.591187477111816,0.440387338399887,0.692013561725616,0.571993172168732,0.448636323213577,0.619527339935303,0.644136130809784,0.943980097770691,0.0651601999998093,0.323505431413651,0.909750938415527,0.190706014633179,0.368760675191879,0.908929646015167,0.18951641023159,0.371389836072922,0.951365828514099,0.00983366928994656,0.30790650844574,0.943980097770691,0.0651601999998093,0.323505431413651,0.951365828514099,0.00983366928994656,0.30790650844574,0.955479383468628,-0.0429471768438816,0.291915565729141,0.954596400260925,0.0140978172421455,0.297568470239639,0.835932672023773,0.318577855825424,0.446905732154846,0.908929646015167,0.18951641023159,0.371389836072922,0.909750938415527,0.190706014633179,0.368760675191879,0.834239661693573,0.322053194046021,0.447577893733978,0.835932672023773,0.318577855825424,0.446905732154846,0.834239661693573,0.322053194046021,0.447577893733978,0.702617406845093,0.468200266361237,0.535833239555359,0.744709670543671,0.422629773616791,0.516518652439117,0.266760617494583,0.623513042926788,0.734894752502441,0.366717875003815,0.635487914085388,0.679465293884277,0.374413341283798,0.732271254062653,0.568852782249451,0.320665568113327,0.737191736698151,0.594745278358459,0.266760617494583,0.623513042926788,0.734894752502441,0.320665568113327,0.737191736698151,0.594745278358459,0.0704773217439651,0.772313952445984,0.631319284439087,\n0.0616534538567066,0.625403761863709,0.777861833572388,0.956802248954773,0.196078270673752,0.214668840169907,0.982270240783691,0.0125455530360341,0.187050387263298,0.944782853126526,0.0188948940485716,0.327151775360107,0.966708958148956,-0.002308584516868,0.255868047475815,0.305753350257874,-0.212547421455383,-0.92808324098587,0.310143738985062,-0.212492153048515,-0.926638007164001,0.173930779099464,-0.177192866802216,-0.96868509054184,0.158634498715401,-0.20582041144371,-0.96564644575119,0.31784787774086,-0.175634980201721,-0.931732296943665,0.191843032836914,-0.158846795558929,-0.968485355377197,0.173930779099464,-0.177192866802216,-0.96868509054184,0.310143738985062,-0.212492153048515,-0.926638007164001,-0.0269717872142792,-0.128648608922958,-0.991323411464691,-0.028486518189311,-0.148915618658066,-0.988439500331879,0.173930779099464,-0.177192866802216,-0.96868509054184,0.191843032836914,-0.158846795558929,-0.968485355377197,-0.0315490290522575,-0.190183460712433,-0.981241524219513,0.158634498715401,-0.20582041144371,-0.96564644575119,0.173930779099464,-0.177192866802216,-0.96868509054184,-0.028486518189311,-0.148915618658066,-0.988439500331879,0.982270240783691,0.0125455530360341,0.187050387263298,0.956802248954773,0.196078270673752,0.214668840169907,0.976279318332672,0.215815082192421,0.0173952374607325,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.995472311973572,0.0944016128778458,0.0111022079363465,0.980593264102936,0.101042859256268,-0.168009653687477,0.952138841152191,0.245724052190781,-0.181800335645676,0.976959228515625,0.212819382548332,-0.0160801913589239,0.927419364452362,0.100383616983891,-0.36030051112175,0.896075665950775,0.270221561193466,-0.352177083492279,0.952138841152191,0.245724052190781,-0.181800335645676,0.980593264102936,0.101042859256268,-0.168009653687477,0.802429139614105,0.495289087295532,-0.332860708236694,0.84548145532608,0.494162082672119,-0.202397987246513,0.952138841152191,0.245724052190781,-0.181800335645676,0.896075665950775,0.270221561193466,-0.352177083492279,0.882022321224213,0.469820559024811,-0.0361285507678986,\n0.976959228515625,0.212819382548332,-0.0160801913589239,0.952138841152191,0.245724052190781,-0.181800335645676,0.84548145532608,0.494162082672119,-0.202397987246513,0.803016126155853,0.524560868740082,0.282844364643097,0.919247984886169,0.28292128443718,0.273749440908432,0.903041958808899,0.404765665531158,0.143805220723152,0.758423209190369,0.636332154273987,0.140980765223503,0.803016126155853,0.524560868740082,0.282844364643097,0.758423209190369,0.636332154273987,0.140980765223503,0.592619299888611,0.791549921035767,0.149167820811272,0.617453694343567,0.698337316513062,0.362044125795364,0.554235219955444,0.652181923389435,0.51718670129776,0.547570884227753,0.592168509960175,0.591187477111816,0.702617406845093,0.468200266361237,0.535833239555359,0.690945386886597,0.533301711082459,0.488040715456009,0.617453694343567,0.698337316513062,0.362044125795364,0.554235219955444,0.652181923389435,0.51718670129776,0.690945386886597,0.533301711082459,0.488040715456009,0.909750938415527,0.190706014633179,0.368760675191879,0.908561766147614,0.233992353081703,0.346068024635315,0.827282428741455,0.399940013885498,0.394527286291122,0.834239661693573,0.322053194046021,0.447577893733978,0.919247984886169,0.28292128443718,0.273749440908432,0.803016126155853,0.524560868740082,0.282844364643097,0.827282428741455,0.399940013885498,0.394527286291122,0.908561766147614,0.233992353081703,0.346068024635315,0.617453694343567,0.698337316513062,0.362044125795364,0.690945386886597,0.533301711082459,0.488040715456009,0.827282428741455,0.399940013885498,0.394527286291122,0.803016126155853,0.524560868740082,0.282844364643097,0.702617406845093,0.468200266361237,0.535833239555359,0.834239661693573,0.322053194046021,0.447577893733978,0.827282428741455,0.399940013885498,0.394527286291122,0.690945386886597,0.533301711082459,0.488040715456009,0.974952936172485,0.16339498758316,0.150893643498421,0.903041958808899,0.404765665531158,0.143805220723152,0.919247984886169,0.28292128443718,0.273749440908432,0.961383461952209,0.117865592241287,0.248695820569992,\n0.961383461952209,0.117865592241287,0.248695820569992,0.919247984886169,0.28292128443718,0.273749440908432,0.94008880853653,0.132723599672318,0.314034193754196,0.974952936172485,0.16339498758316,0.150893643498421,0.961383461952209,0.117865592241287,0.248695820569992,0.954596400260925,0.0140978172421455,0.297568470239639,0.98244035243988,0.067487895488739,0.173943564295769,0.98244035243988,0.067487895488739,0.173943564295769,0.954596400260925,0.0140978172421455,0.297568470239639,0.941569864749908,0.149283602833748,0.301928132772446,0.974337458610535,0.124738365411758,0.187368124723434,0.941569864749908,0.149283602833748,0.301928132772446,0.944782853126526,0.0188948940485716,0.327151775360107,0.982270240783691,0.0125455530360341,0.187050387263298,0.974337458610535,0.124738365411758,0.187368124723434,0.974952936172485,0.16339498758316,0.150893643498421,0.98244035243988,0.067487895488739,0.173943564295769,0.995472311973572,0.0944016128778458,0.0111022079363465,0.976959228515625,0.212819382548332,-0.0160801913589239,0.974952936172485,0.16339498758316,0.150893643498421,0.976959228515625,0.212819382548332,-0.0160801913589239,0.882022321224213,0.469820559024811,-0.0361285507678986,0.903041958808899,0.404765665531158,0.143805220723152,0.995472311973572,0.0944016128778458,0.0111022079363465,0.994647562503815,0.10004199296236,0.0258419681340456,0.983511805534363,0.0664925277233124,-0.168176248669624,0.980593264102936,0.101042859256268,-0.168009653687477,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.983511805534363,0.0664925277233124,-0.168176248669624,0.994647562503815,0.10004199296236,0.0258419681340456,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.974936366081238,0.00979904364794493,-0.222267970442772,0.983511805534363,0.0664925277233124,-0.168176248669624,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.917562901973724,0.0575754530727863,-0.393399685621262,0.983511805534363,0.0664925277233124,-0.168176248669624,\n0.974936366081238,0.00979904364794493,-0.222267970442772,0.927419364452362,0.100383616983891,-0.36030051112175,0.980593264102936,0.101042859256268,-0.168009653687477,0.983511805534363,0.0664925277233124,-0.168176248669624,0.917562901973724,0.0575754530727863,-0.393399685621262,0.995472311973572,0.0944016128778458,0.0111022079363465,0.98244035243988,0.067487895488739,0.173943564295769,0.974337458610535,0.124738365411758,0.187368124723434,0.994647562503815,0.10004199296236,0.0258419681340456,0.974337458610535,0.124738365411758,0.187368124723434,0.982270240783691,0.0125455530360341,0.187050387263298,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.994647562503815,0.10004199296236,0.0258419681340456,0.652361810207367,0.183982044458389,-0.735237896442413,0.822571158409119,0.128576725721359,-0.553935706615448,0.826969504356384,0.0367851555347443,-0.561042189598084,0.679547071456909,0.0500539317727089,-0.731922388076782,0.927419364452362,0.100383616983891,-0.36030051112175,0.917562901973724,0.0575754530727863,-0.393399685621262,0.826969504356384,0.0367851555347443,-0.561042189598084,0.822571158409119,0.128576725721359,-0.553935706615448,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.806335091590881,-0.064182311296463,-0.587966322898865,0.826969504356384,0.0367851555347443,-0.561042189598084,0.917562901973724,0.0575754530727863,-0.393399685621262,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.679547071456909,0.0500539317727089,-0.731922388076782,0.826969504356384,0.0367851555347443,-0.561042189598084,0.806335091590881,-0.064182311296463,-0.587966322898865,0.00778961461037397,0.31232625246048,-0.949942946434021,0.150489449501038,0.298117339611053,-0.942591607570648,0.156925246119499,0.156653806567192,-0.975107192993164,-0.00349890603683889,0.173883408308029,-0.984760046005249,0.289862871170044,0.274766653776169,-0.91677850484848,0.317441433668137,0.128782093524933,-0.939492464065552,0.156925246119499,0.156653806567192,-0.975107192993164,0.150489449501038,0.298117339611053,-0.942591607570648,\n0.330739557743073,-0.00570091884583235,-0.943704843521118,0.157008796930313,0.0128065068274736,-0.987514197826386,0.156925246119499,0.156653806567192,-0.975107192993164,0.317441433668137,0.128782093524933,-0.939492464065552,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.00349890603683889,0.173883408308029,-0.984760046005249,0.156925246119499,0.156653806567192,-0.975107192993164,0.157008796930313,0.0128065068274736,-0.987514197826386,0.289862871170044,0.274766653776169,-0.91677850484848,0.150489449501038,0.298117339611053,-0.942591607570648,0.148825243115425,0.473339468240738,-0.868216991424561,0.262024700641632,0.458286553621292,-0.849303483963013,0.00778961461037397,0.31232625246048,-0.949942946434021,0.0223272144794464,0.483893781900406,-0.874841868877411,0.148825243115425,0.473339468240738,-0.868216991424561,0.150489449501038,0.298117339611053,-0.942591607570648,0.0394280813634396,0.674713432788849,-0.737025916576386,0.152186512947083,0.664242565631866,-0.731861352920532,0.148825243115425,0.473339468240738,-0.868216991424561,0.0223272144794464,0.483893781900406,-0.874841868877411,0.241631746292114,0.652338445186615,-0.718379199504852,0.262024700641632,0.458286553621292,-0.849303483963013,0.148825243115425,0.473339468240738,-0.868216991424561,0.152186512947083,0.664242565631866,-0.731861352920532,0.312359720468521,0.949172854423523,-0.0387601368129253,0.299265414476395,0.918772161006927,-0.257483899593353,0.208839908242226,0.94090873003006,-0.266601979732513,0.250509142875671,0.967322170734406,-0.0391524843871593,0.270549148321152,0.870745658874512,-0.410615533590317,0.176319569349289,0.887581884860992,-0.425570040941238,0.208839908242226,0.94090873003006,-0.266601979732513,0.299265414476395,0.918772161006927,-0.257483899593353,0.0622152015566826,0.901260554790497,-0.428787440061569,0.0692925006151199,0.95879065990448,-0.27553403377533,0.208839908242226,0.94090873003006,-0.266601979732513,0.176319569349289,0.887581884860992,-0.425570040941238,0.0761537179350853,0.996121823787689,-0.044066745787859,0.250509142875671,0.967322170734406,-0.0391524843871593,\n0.208839908242226,0.94090873003006,-0.266601979732513,0.0692925006151199,0.95879065990448,-0.27553403377533,0.547570884227753,0.592168509960175,0.591187477111816,0.554235219955444,0.652181923389435,0.51718670129776,0.43085303902626,0.76660943031311,0.476104646921158,0.440387338399887,0.692013561725616,0.571993172168732,0.617453694343567,0.698337316513062,0.362044125795364,0.425699532032013,0.838678896427155,0.339702278375626,0.43085303902626,0.76660943031311,0.476104646921158,0.554235219955444,0.652181923389435,0.51718670129776,0.354833543300629,0.872086048126221,0.336985319852829,0.371298015117645,0.806507170200348,0.460091233253479,0.43085303902626,0.76660943031311,0.476104646921158,0.425699532032013,0.838678896427155,0.339702278375626,0.374413341283798,0.732271254062653,0.568852782249451,0.440387338399887,0.692013561725616,0.571993172168732,0.43085303902626,0.76660943031311,0.476104646921158,0.371298015117645,0.806507170200348,0.460091233253479,0.250509142875671,0.967322170734406,-0.0391524843871593,0.0761537179350853,0.996121823787689,-0.044066745787859,0.0787876397371292,0.981232225894928,0.175999522209167,0.280323714017868,0.944564402103424,0.170928910374641,0.250509142875671,0.967322170734406,-0.0391524843871593,0.280323714017868,0.944564402103424,0.170928910374641,0.32793140411377,0.928926110267639,0.171922340989113,0.312359720468521,0.949172854423523,-0.0387601368129253,0.280323714017868,0.944564402103424,0.170928910374641,0.0787876397371292,0.981232225894928,0.175999522209167,0.0780636146664619,0.932616472244263,0.352324455976486,0.311769247055054,0.887734949588776,0.338713079690933,0.280323714017868,0.944564402103424,0.170928910374641,0.311769247055054,0.887734949588776,0.338713079690933,0.354833543300629,0.872086048126221,0.336985319852829,0.32793140411377,0.928926110267639,0.171922340989113,0.572597026824951,0.0432385914027691,-0.818695962429047,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.800951898097992,0.0424955785274506,-0.597218692302704,\n0.668470501899719,-0.223753660917282,-0.709282398223877,0.763271033763886,-0.164724439382553,-0.624726474285126,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.903657674789429,-0.181017354130745,-0.38811793923378,0.933521032333374,-0.113554745912552,-0.340064376592636,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.763271033763886,-0.164724439382553,-0.624726474285126,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.800951898097992,0.0424955785274506,-0.597218692302704,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.933521032333374,-0.113554745912552,-0.340064376592636,0.564893007278442,0.823054492473602,-0.0589678697288036,0.717910170555115,0.69438225030899,-0.049378827214241,0.675751328468323,0.703905045986176,-0.218810006976128,0.51955384016037,0.820082247257233,-0.239851862192154,0.882022321224213,0.469820559024811,-0.0361285507678986,0.84548145532608,0.494162082672119,-0.202397987246513,0.675751328468323,0.703905045986176,-0.218810006976128,0.717910170555115,0.69438225030899,-0.049378827214241,0.802429139614105,0.495289087295532,-0.332860708236694,0.643622934818268,0.695999085903168,-0.318331331014633,0.675751328468323,0.703905045986176,-0.218810006976128,0.84548145532608,0.494162082672119,-0.202397987246513,0.468265026807785,0.816386163234711,-0.337996363639832,0.51955384016037,0.820082247257233,-0.239851862192154,0.675751328468323,0.703905045986176,-0.218810006976128,0.643622934818268,0.695999085903168,-0.318331331014633,0.758423209190369,0.636332154273987,0.140980765223503,0.903041958808899,0.404765665531158,0.143805220723152,0.882022321224213,0.469820559024811,-0.0361285507678986,0.717910170555115,0.69438225030899,-0.049378827214241,0.758423209190369,0.636332154273987,0.140980765223503,0.717910170555115,0.69438225030899,-0.049378827214241,0.564893007278442,0.823054492473602,-0.0589678697288036,0.592619299888611,0.791549921035767,0.149167820811272,0.374413341283798,0.732271254062653,0.568852782249451,0.371298015117645,0.806507170200348,0.460091233253479,\n0.329870194196701,0.817974448204041,0.471278518438339,0.320665568113327,0.737191736698151,0.594745278358459,0.354833543300629,0.872086048126221,0.336985319852829,0.311769247055054,0.887734949588776,0.338713079690933,0.329870194196701,0.817974448204041,0.471278518438339,0.371298015117645,0.806507170200348,0.460091233253479,0.0780636146664619,0.932616472244263,0.352324455976486,0.0752492547035217,0.86371123790741,0.498337715864182,0.329870194196701,0.817974448204041,0.471278518438339,0.311769247055054,0.887734949588776,0.338713079690933,0.0704773217439651,0.772313952445984,0.631319284439087,0.320665568113327,0.737191736698151,0.594745278358459,0.329870194196701,0.817974448204041,0.471278518438339,0.0752492547035217,0.86371123790741,0.498337715864182,0.941746175289154,0.170597404241562,0.289845913648605,0.941311419010162,0.140633046627045,0.30684706568718,0.944782853126526,0.0188948940485716,0.327151775360107,0.941569864749908,0.149283602833748,0.301928132772446,0.941746175289154,0.170597404241562,0.289845913648605,0.941569864749908,0.149283602833748,0.301928132772446,0.954596400260925,0.0140978172421455,0.297568470239639,0.955479383468628,-0.0429471768438816,0.291915565729141,0.954596400260925,0.0140978172421455,0.297568470239639,0.961383461952209,0.117865592241287,0.248695820569992,0.94008880853653,0.132723599672318,0.314034193754196,0.943980097770691,0.0651601999998093,0.323505431413651,0.919247984886169,0.28292128443718,0.273749440908432,0.908561766147614,0.233992353081703,0.346068024635315,0.94008880853653,0.132723599672318,0.314034193754196,0.909750938415527,0.190706014633179,0.368760675191879,0.943980097770691,0.0651601999998093,0.323505431413651,0.94008880853653,0.132723599672318,0.314034193754196,0.908561766147614,0.233992353081703,0.346068024635315,0.702617406845093,0.468200266361237,0.535833239555359,0.547570884227753,0.592168509960175,0.591187477111816,0.524678170681,0.559116363525391,0.641951441764832,0.744709670543671,0.422629773616791,0.516518652439117,0.510853886604309,0.565487027168274,-0.647497296333313,\n0.691879332065582,0.507222592830658,-0.513836801052094,0.772872805595398,0.305390149354935,-0.55624133348465,0.594810545444489,0.366844743490219,-0.715279877185822,0.802429139614105,0.495289087295532,-0.332860708236694,0.896075665950775,0.270221561193466,-0.352177083492279,0.772872805595398,0.305390149354935,-0.55624133348465,0.691879332065582,0.507222592830658,-0.513836801052094,0.927419364452362,0.100383616983891,-0.36030051112175,0.822571158409119,0.128576725721359,-0.553935706615448,0.772872805595398,0.305390149354935,-0.55624133348465,0.896075665950775,0.270221561193466,-0.352177083492279,0.652361810207367,0.183982044458389,-0.735237896442413,0.594810545444489,0.366844743490219,-0.715279877185822,0.772872805595398,0.305390149354935,-0.55624133348465,0.822571158409119,0.128576725721359,-0.553935706615448,0.468265026807785,0.816386163234711,-0.337996363639832,0.643622934818268,0.695999085903168,-0.318331331014633,0.603891670703888,0.66539740562439,-0.438817948102951,0.453374654054642,0.743375957012177,-0.491775959730148,0.802429139614105,0.495289087295532,-0.332860708236694,0.691879332065582,0.507222592830658,-0.513836801052094,0.603891670703888,0.66539740562439,-0.438817948102951,0.643622934818268,0.695999085903168,-0.318331331014633,0.510853886604309,0.565487027168274,-0.647497296333313,0.453374654054642,0.743375957012177,-0.491775959730148,0.603891670703888,0.66539740562439,-0.438817948102951,0.691879332065582,0.507222592830658,-0.513836801052094,0.270549148321152,0.870745658874512,-0.410615533590317,0.243253543972969,0.798352062702179,-0.550873577594757,0.160658344626427,0.809181571006775,-0.565167307853699,0.176319569349289,0.887581884860992,-0.425570040941238,0.241631746292114,0.652338445186615,-0.718379199504852,0.152186512947083,0.664242565631866,-0.731861352920532,0.160658344626427,0.809181571006775,-0.565167307853699,0.243253543972969,0.798352062702179,-0.550873577594757,0.0394280813634396,0.674713432788849,-0.737025916576386,0.0535563454031944,0.82038402557373,-0.569299399852753,0.160658344626427,0.809181571006775,-0.565167307853699,\n0.152186512947083,0.664242565631866,-0.731861352920532,0.0622152015566826,0.901260554790497,-0.428787440061569,0.176319569349289,0.887581884860992,-0.425570040941238,0.160658344626427,0.809181571006775,-0.565167307853699,0.0535563454031944,0.82038402557373,-0.569299399852753,0.422840595245361,0.890932738780975,0.165664300322533,0.32793140411377,0.928926110267639,0.171922340989113,0.354833543300629,0.872086048126221,0.336985319852829,0.425699532032013,0.838678896427155,0.339702278375626,0.422840595245361,0.890932738780975,0.165664300322533,0.425699532032013,0.838678896427155,0.339702278375626,0.617453694343567,0.698337316513062,0.362044125795364,0.592619299888611,0.791549921035767,0.149167820811272,0.415615051984787,0.907950639724731,-0.0537562556564808,0.312359720468521,0.949172854423523,-0.0387601368129253,0.32793140411377,0.928926110267639,0.171922340989113,0.422840595245361,0.890932738780975,0.165664300322533,0.415615051984787,0.907950639724731,-0.0537562556564808,0.422840595245361,0.890932738780975,0.165664300322533,0.592619299888611,0.791549921035767,0.149167820811272,0.564893007278442,0.823054492473602,-0.0589678697288036,0.270549148321152,0.870745658874512,-0.410615533590317,0.299265414476395,0.918772161006927,-0.257483899593353,0.396910279989243,0.88137674331665,-0.256197690963745,0.358765363693237,0.85211443901062,-0.381035953760147,0.312359720468521,0.949172854423523,-0.0387601368129253,0.415615051984787,0.907950639724731,-0.0537562556564808,0.396910279989243,0.88137674331665,-0.256197690963745,0.299265414476395,0.918772161006927,-0.257483899593353,0.564893007278442,0.823054492473602,-0.0589678697288036,0.51955384016037,0.820082247257233,-0.239851862192154,0.396910279989243,0.88137674331665,-0.256197690963745,0.415615051984787,0.907950639724731,-0.0537562556564808,0.468265026807785,0.816386163234711,-0.337996363639832,0.358765363693237,0.85211443901062,-0.381035953760147,0.396910279989243,0.88137674331665,-0.256197690963745,0.51955384016037,0.820082247257233,-0.239851862192154,0.270549148321152,0.870745658874512,-0.410615533590317,\n0.358765363693237,0.85211443901062,-0.381035953760147,0.326544016599655,0.784170210361481,-0.527679860591888,0.243253543972969,0.798352062702179,-0.550873577594757,0.468265026807785,0.816386163234711,-0.337996363639832,0.453374654054642,0.743375957012177,-0.491775959730148,0.326544016599655,0.784170210361481,-0.527679860591888,0.358765363693237,0.85211443901062,-0.381035953760147,0.510853886604309,0.565487027168274,-0.647497296333313,0.347870439291,0.626684665679932,-0.697318077087402,0.326544016599655,0.784170210361481,-0.527679860591888,0.453374654054642,0.743375957012177,-0.491775959730148,0.241631746292114,0.652338445186615,-0.718379199504852,0.243253543972969,0.798352062702179,-0.550873577594757,0.326544016599655,0.784170210361481,-0.527679860591888,0.347870439291,0.626684665679932,-0.697318077087402,0.652361810207367,0.183982044458389,-0.735237896442413,0.456190079450607,0.236269950866699,-0.857943534851074,0.404344618320465,0.425657629966736,-0.809518992900848,0.594810545444489,0.366844743490219,-0.715279877185822,0.289862871170044,0.274766653776169,-0.91677850484848,0.262024700641632,0.458286553621292,-0.849303483963013,0.404344618320465,0.425657629966736,-0.809518992900848,0.456190079450607,0.236269950866699,-0.857943534851074,0.241631746292114,0.652338445186615,-0.718379199504852,0.347870439291,0.626684665679932,-0.697318077087402,0.404344618320465,0.425657629966736,-0.809518992900848,0.262024700641632,0.458286553621292,-0.849303483963013,0.510853886604309,0.565487027168274,-0.647497296333313,0.594810545444489,0.366844743490219,-0.715279877185822,0.404344618320465,0.425657629966736,-0.809518992900848,0.347870439291,0.626684665679932,-0.697318077087402,0.289862871170044,0.274766653776169,-0.91677850484848,0.456190079450607,0.236269950866699,-0.857943534851074,0.494736820459366,0.0896743088960648,-0.8644038438797,0.317441433668137,0.128782093524933,-0.939492464065552,0.652361810207367,0.183982044458389,-0.735237896442413,0.679547071456909,0.0500539317727089,-0.731922388076782,0.494736820459366,0.0896743088960648,-0.8644038438797,\n0.456190079450607,0.236269950866699,-0.857943534851074,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.514681279659271,-0.030753742903471,-0.856829822063446,0.494736820459366,0.0896743088960648,-0.8644038438797,0.679547071456909,0.0500539317727089,-0.731922388076782,0.330739557743073,-0.00570091884583235,-0.943704843521118,0.317441433668137,0.128782093524933,-0.939492464065552,0.494736820459366,0.0896743088960648,-0.8644038438797,0.514681279659271,-0.030753742903471,-0.856829822063446,0.668470501899719,-0.223753660917282,-0.709282398223877,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.493934065103531,-0.187336564064026,-0.849078416824341,0.505452334880829,-0.224964916706085,-0.8330118060112,0.572597026824951,0.0432385914027691,-0.818695962429047,0.440676689147949,-0.105378225445747,-0.891459226608276,0.493934065103531,-0.187336564064026,-0.849078416824341,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.31784787774086,-0.175634980201721,-0.931732296943665,0.310143738985062,-0.212492153048515,-0.926638007164001,0.493934065103531,-0.187336564064026,-0.849078416824341,0.440676689147949,-0.105378225445747,-0.891459226608276,0.305753350257874,-0.212547421455383,-0.92808324098587,0.505452334880829,-0.224964916706085,-0.8330118060112,0.493934065103531,-0.187336564064026,-0.849078416824341,0.310143738985062,-0.212492153048515,-0.926638007164001,0.330739557743073,-0.00570091884583235,-0.943704843521118,0.320828467607498,-0.143988654017448,-0.936128377914429,0.154737427830696,-0.127341821789742,-0.979714453220367,0.157008796930313,0.0128065068274736,-0.987514197826386,0.305753350257874,-0.212547421455383,-0.92808324098587,0.158634498715401,-0.20582041144371,-0.96564644575119,0.154737427830696,-0.127341821789742,-0.979714453220367,0.320828467607498,-0.143988654017448,-0.936128377914429,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.0252742562443018,-0.106068439781666,-0.994037568569183,0.154737427830696,-0.127341821789742,-0.979714453220367,0.158634498715401,-0.20582041144371,-0.96564644575119,\n-0.0150691494345665,0.027319710701704,-0.999513149261475,0.157008796930313,0.0128065068274736,-0.987514197826386,0.154737427830696,-0.127341821789742,-0.979714453220367,-0.0252742562443018,-0.106068439781666,-0.994037568569183,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.684577643871307,-0.163184806704521,-0.710439383983612,0.510694682598114,-0.152896985411644,-0.846057593822479,0.514681279659271,-0.030753742903471,-0.856829822063446,0.668470501899719,-0.223753660917282,-0.709282398223877,0.505452334880829,-0.224964916706085,-0.8330118060112,0.510694682598114,-0.152896985411644,-0.846057593822479,0.684577643871307,-0.163184806704521,-0.710439383983612,0.305753350257874,-0.212547421455383,-0.92808324098587,0.320828467607498,-0.143988654017448,-0.936128377914429,0.510694682598114,-0.152896985411644,-0.846057593822479,0.505452334880829,-0.224964916706085,-0.8330118060112,0.330739557743073,-0.00570091884583235,-0.943704843521118,0.514681279659271,-0.030753742903471,-0.856829822063446,0.510694682598114,-0.152896985411644,-0.846057593822479,0.320828467607498,-0.143988654017448,-0.936128377914429,0.668470501899719,-0.223753660917282,-0.709282398223877,0.684577643871307,-0.163184806704521,-0.710439383983612,0.78548675775528,-0.165785521268845,-0.596259772777557,0.763271033763886,-0.164724439382553,-0.624726474285126,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.806335091590881,-0.064182311296463,-0.587966322898865,0.78548675775528,-0.165785521268845,-0.596259772777557,0.684577643871307,-0.163184806704521,-0.710439383983612,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.838157534599304,-0.159007966518402,-0.521735966205597,0.78548675775528,-0.165785521268845,-0.596259772777557,0.806335091590881,-0.064182311296463,-0.587966322898865,0.903657674789429,-0.181017354130745,-0.38811793923378,0.763271033763886,-0.164724439382553,-0.624726474285126,0.78548675775528,-0.165785521268845,-0.596259772777557,0.838157534599304,-0.159007966518402,-0.521735966205597,0.898539185523987,-0.0431283302605152,-0.436769187450409,\n0.974936366081238,0.00979904364794493,-0.222267970442772,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.965442478656769,-0.181367635726929,-0.187153950333595,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.974936366081238,0.00979904364794493,-0.222267970442772,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.981309294700623,-0.093424528837204,-0.168237790465355,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.933521032333374,-0.113554745912552,-0.340064376592636,0.989404678344727,-0.134779617190361,-0.0539703145623207,0.440676689147949,-0.105378225445747,-0.891459226608276,0.572597026824951,0.0432385914027691,-0.818695962429047,0.564589977264404,0.0705946907401085,-0.822346925735474,0.426292926073074,0.0950048267841339,-0.899582326412201,0.440676689147949,-0.105378225445747,-0.891459226608276,0.426292926073074,0.0950048267841339,-0.899582326412201,0.35312095284462,0.134023457765579,-0.925928354263306,0.31784787774086,-0.175634980201721,-0.931732296943665,0.191843032836914,-0.158846795558929,-0.968485355377197,0.31784787774086,-0.175634980201721,-0.931732296943665,0.35312095284462,0.134023457765579,-0.925928354263306,0.23451641201973,0.162132352590561,-0.958496332168579,0.191843032836914,-0.158846795558929,-0.968485355377197,0.23451641201973,0.162132352590561,-0.958496332168579,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.0269717872142792,-0.128648608922958,-0.991323411464691,0.164569541811943,0.375759840011597,-0.911987602710724,0.286092400550842,0.370450645685196,-0.883695363998413,0.258463323116302,0.471300333738327,-0.843251287937164,0.148562401533127,0.439921736717224,-0.885662496089935,0.17595848441124,0.184216767549515,-0.967007160186768,0.311260253190994,0.141205564141274,-0.93977552652359,0.286092400550842,0.370450645685196,-0.883695363998413,\n0.164569541811943,0.375759840011597,-0.911987602710724,0.591210007667542,0.268222451210022,-0.760609924793243,0.476214468479156,0.553961336612701,-0.682895720005035,0.286092400550842,0.370450645685196,-0.883695363998413,0.311260253190994,0.141205564141274,-0.93977552652359,0.286092400550842,0.370450645685196,-0.883695363998413,0.476214468479156,0.553961336612701,-0.682895720005035,0.411318093538284,0.679248511791229,-0.607814848423004,0.258463323116302,0.471300333738327,-0.843251287937164,0.0694107115268707,0.216942340135574,-0.973713636398315,0.17595848441124,0.184216767549515,-0.967007160186768,0.164569541811943,0.375759840011597,-0.911987602710724,0.0754155963659287,0.356131970882416,-0.931387424468994,0.0754155963659287,0.356131970882416,-0.931387424468994,0.164569541811943,0.375759840011597,-0.911987602710724,0.148562401533127,0.439921736717224,-0.885662496089935,0.0560689158737659,0.370522946119308,-0.927129447460175,-0.000760512368287891,0.207898333668709,-0.978150188922882,0.0694107115268707,0.216942340135574,-0.973713636398315,0.0754155963659287,0.356131970882416,-0.931387424468994,0.0102010685950518,0.341328680515289,-0.939888656139374,0.0102010685950518,0.341328680515289,-0.939888656139374,0.0754155963659287,0.356131970882416,-0.931387424468994,0.0560689158737659,0.370522946119308,-0.927129447460175,0.010585374198854,0.345912545919418,-0.938207030296326,0.75023740530014,-0.238408371806145,0.616688966751099,0.616745948791504,-0.290956258773804,0.731415688991547,0.628606140613556,-0.0929744690656662,0.77214640378952,0.76386970281601,-0.0586191527545452,0.642702758312225,0.855076372623444,-0.165702432394028,0.491311639547348,0.75023740530014,-0.238408371806145,0.616688966751099,0.76386970281601,-0.0586191527545452,0.642702758312225,0.85496574640274,-0.0235987044870853,0.518147349357605,0.89460563659668,0.0454745329916477,0.444536596536636,0.882708728313446,0.169010564684868,0.438475489616394,0.941748380661011,0.168847903609276,0.290861427783966,0.940892815589905,-0.119216494262218,0.317030221223831,0.854965507984161,-0.114104993641377,0.505978286266327,\n0.89460563659668,0.0454745329916477,0.444536596536636,0.506778419017792,-0.624182820320129,0.594618737697601,0.535486578941345,-0.739663183689117,0.407618075609207,0.882708728313446,0.169010564684868,0.438475489616394,-0.053869191557169,-0.604926705360413,-0.794456899166107,0.868690371513367,-0.108423709869385,-0.483343929052353,0.724950075149536,-0.680160522460938,0.108761206269264,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.0578227378427982,-0.628531396389008,-0.775631904602051,-0.053869191557169,-0.604926705360413,-0.794456899166107,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.801777124404907,0.00266337930224836,-0.597617149353027,0.868690371513367,-0.108423709869385,-0.483343929052353,-0.053869191557169,-0.604926705360413,-0.794456899166107,0.0578227378427982,-0.628531396389008,-0.775631904602051,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.712912499904633,-0.638341963291168,0.290302157402039,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.549701511859894,-0.519823312759399,0.653920412063599,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.712912499904633,-0.638341963291168,0.290302157402039,-0.498864650726318,-0.669482290744781,0.550388514995575,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.237821668386459,-0.891240954399109,0.386174082756042,0.589298963546753,-0.771825730800629,0.238771393895149,0.2151879966259,-0.952648401260376,-0.214837476611137,0.237821668386459,-0.891240954399109,0.386174082756042,-0.139181971549988,-0.98750239610672,0.0739418119192123,-0.449249923229218,-0.874760508537292,0.181572452187538,-0.272507458925247,-0.860418200492859,0.430604517459869,0.786046326160431,0.0746424272656441,0.613644540309906,0.89460563659668,0.0454745329916477,0.444536596536636,0.854965507984161,-0.114104993641377,0.505978286266327,0.576319634914398,0.0662916451692581,0.814531207084656,0.506778419017792,-0.624182820320129,0.594618737697601,0.89460563659668,0.0454745329916477,0.444536596536636,0.786046326160431,0.0746424272656441,0.613644540309906,\n-0.712912499904633,-0.638341963291168,0.290302157402039,-0.449249923229218,-0.874760508537292,0.181572452187538,0.506778419017792,-0.624182820320129,0.594618737697601,-0.498864650726318,-0.669482290744781,0.550388514995575,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.272507458925247,-0.860418200492859,0.430604517459869,-0.449249923229218,-0.874760508537292,0.181572452187538,-0.712912499904633,-0.638341963291168,0.290302157402039,0.844061017036438,0.391468346118927,0.366488069295883,0.868690371513367,-0.108423709869385,-0.483343929052353,0.801777124404907,0.00266337930224836,-0.597617149353027,0.941748380661011,0.168847903609276,0.290861427783966,0.882708728313446,0.169010564684868,0.438475489616394,0.844061017036438,0.391468346118927,0.366488069295883,0.535486578941345,-0.739663183689117,0.407618075609207,0.724950075149536,-0.680160522460938,0.108761206269264,0.844061017036438,0.391468346118927,0.366488069295883,0.882708728313446,0.169010564684868,0.438475489616394,0.844061017036438,0.391468346118927,0.366488069295883,0.724950075149536,-0.680160522460938,0.108761206269264,0.868690371513367,-0.108423709869385,-0.483343929052353,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.032781969755888,-0.0827890038490295,0.996027767658234,0.356171637773514,-0.454808622598648,0.816266417503357,0.361973732709885,-0.605334222316742,0.708904445171356,0.032781969755888,-0.0827890038490295,0.996027767658234,0.204357400536537,-0.124537408351898,0.97094202041626,0.17069847881794,-0.387216597795486,0.906049311161041,0.356171637773514,-0.454808622598648,0.816266417503357,0.314119011163712,-0.739236891269684,0.595699608325958,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.361973732709885,-0.605334222316742,0.708904445171356,0.314119011163712,-0.739236891269684,0.595699608325958,0.206430405378342,-0.778748571872711,0.592399477958679,0.00206050439737737,-0.384430259466171,0.923151731491089,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0268061328679323,-0.427482962608337,0.903625905513763,\n0.00206050439737737,-0.384430259466171,0.923151731491089,0.0454688854515553,-0.765503704547882,0.641822934150696,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.00206050439737737,-0.384430259466171,0.923151731491089,0.206430405378342,-0.778748571872711,0.592399477958679,0.0366746000945568,-0.755166232585907,0.654506683349609,0.00267285062000155,-0.590106904506683,0.807320654392242,0.0366746000945568,-0.755166232585907,0.654506683349609,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0352796316146851,-0.824001550674438,0.565488159656525,0.00267285062000155,-0.590106904506683,0.807320654392242,0.0454688854515553,-0.765503704547882,0.641822934150696,0.00206050439737737,-0.384430259466171,0.923151731491089,0.00267285062000155,-0.590106904506683,0.807320654392242,0.17069847881794,-0.387216597795486,0.906049311161041,0.458961844444275,-0.463801801204681,0.757787525653839,0.835841596126556,0.145906612277031,0.529225945472717,0.513224720954895,-0.832203328609467,0.209852293133736,0.835841596126556,0.145906612277031,0.529225945472717,0.190371856093407,0.256429195404053,0.947629988193512,-0.0904141515493393,0.920958995819092,0.379024863243103,0.835841596126556,0.145906612277031,0.529225945472717,0.458961844444275,-0.463801801204681,0.757787525653839,0.190371856093407,0.256429195404053,0.947629988193512,0.680179119110107,0.270307511091232,0.681388378143311,0.835841596126556,0.145906612277031,0.529225945472717,-0.0904141515493393,0.920958995819092,0.379024863243103,-0.111705176532269,0.976534187793732,0.18412746489048,0.513224720954895,-0.832203328609467,0.209852293133736,0.835841596126556,0.145906612277031,0.529225945472717,0.680179119110107,0.270307511091232,0.681388378143311,-0.00835443940013647,-0.52916145324707,0.848480045795441,0.168070778250694,-0.457133919000626,0.873373210430145,0.192558065056801,-0.101361930370331,0.976036429405212,0.0599219687283039,-0.361293613910675,0.93052476644516,0.361973732709885,-0.605334222316742,0.708904445171356,0.356171637773514,-0.454808622598648,0.816266417503357,\n0.578862547874451,-0.786143362522125,0.216556489467621,0.626789748668671,-0.749257385730743,0.213887751102448,0.361973732709885,-0.605334222316742,0.708904445171356,0.626789748668671,-0.749257385730743,0.213887751102448,0.517510056495667,-0.833824872970581,0.192144423723221,0.314119011163712,-0.739236891269684,0.595699608325958,0.17069847881794,-0.387216597795486,0.906049311161041,0.513224720954895,-0.832203328609467,0.209852293133736,0.578862547874451,-0.786143362522125,0.216556489467621,0.356171637773514,-0.454808622598648,0.816266417503357,0.578862547874451,-0.786143362522125,0.216556489467621,0.513224720954895,-0.832203328609467,0.209852293133736,0.680179119110107,0.270307511091232,0.681388378143311,0.714891254901886,0.201140508055687,0.669681310653687,0.360629975795746,-0.702259659767151,0.613821983337402,0.626789748668671,-0.749257385730743,0.213887751102448,0.578862547874451,-0.786143362522125,0.216556489467621,0.714891254901886,0.201140508055687,0.669681310653687,-0.0101526426151395,0.0385068021714687,0.999206781387329,0.315801054239273,0.0731089860200882,0.946004629135132,0.192558065056801,-0.101361930370331,0.976036429405212,0.168070778250694,-0.457133919000626,0.873373210430145,0.139593034982681,-0.543097734451294,0.827984690666199,0.0695574581623077,-0.316367268562317,0.946083247661591,-0.136446863412857,-0.21966315805912,0.965986728668213,-0.00769979506731033,-0.155788585543633,0.987760424613953,0.130675092339516,-0.201507270336151,0.9707310795784,-0.204613357782364,0.564212739467621,0.799873352050781,0.026754243299365,0.843723058700562,0.53611159324646,-0.046717431396246,0.464232265949249,0.884480595588684,-0.204613357782364,0.564212739467621,0.799873352050781,-0.218910127878189,-0.0667930841445923,0.973456263542175,-0.136446863412857,-0.21966315805912,0.965986728668213,-0.0965566337108612,0.382317036390305,0.918972492218018,0.0405396111309528,-0.00950155965983868,0.999132752418518,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.0361802279949188,0.15255069732666,0.987633168697357,\n0.0405396111309528,-0.00950155965983868,0.999132752418518,0.0361802279949188,0.15255069732666,0.987633168697357,0.190371856093407,0.256429195404053,0.947629988193512,0.193743079900742,0.0896209701895714,0.976950228214264,0.724869191646576,-0.144625514745712,0.673534035682678,0.668389976024628,-0.0383556596934795,0.742821395397186,0.729625582695007,0.0742557868361473,0.679803311824799,0.712920248508453,0.00929267052561045,0.701183557510376,0.724869191646576,-0.144625514745712,0.673534035682678,0.729625582695007,0.0742557868361473,0.679803311824799,0.621637463569641,0.0923129394650459,0.77784651517868,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.162078380584717,0.332254558801651,0.929159581661224,0.0823612809181213,0.629497587680817,0.772624969482422,0.0361802279949188,0.15255069732666,0.987633168697357,0.256553143262863,0.759260475635529,0.598083674907684,0.118274427950382,0.894158720970154,0.431846410036087,0.0823612809181213,0.629497587680817,0.772624969482422,0.162078380584717,0.332254558801651,0.929159581661224,-0.111705176532269,0.976534187793732,0.18412746489048,-0.0904141515493393,0.920958995819092,0.379024863243103,0.0823612809181213,0.629497587680817,0.772624969482422,0.118274427950382,0.894158720970154,0.431846410036087,0.190371856093407,0.256429195404053,0.947629988193512,0.0361802279949188,0.15255069732666,0.987633168697357,0.0823612809181213,0.629497587680817,0.772624969482422,-0.0904141515493393,0.920958995819092,0.379024863243103,0.724869191646576,-0.144625514745712,0.673534035682678,0.388869285583496,-0.304632723331451,0.869470834732056,0.405026167631149,-0.171226277947426,0.898128807544708,0.593307375907898,-0.0775594636797905,0.801230847835541,0.668389976024628,-0.0383556596934795,0.742821395397186,-0.218910127878189,-0.0667930841445923,0.973456263542175,-0.104829348623753,-0.0149719836190343,0.994377493858337,0.0144113004207611,0.0269631575793028,0.999532520771027,-0.0540277659893036,-0.0540848448872566,0.997073590755463,-0.136446863412857,-0.21966315805912,0.965986728668213,-0.218910127878189,-0.0667930841445923,0.973456263542175,\n-0.0540277659893036,-0.0540848448872566,0.997073590755463,-0.00769979506731033,-0.155788585543633,0.987760424613953,-0.00769979506731033,-0.155788585543633,0.987760424613953,-0.0540277659893036,-0.0540848448872566,0.997073590755463,0.333709418773651,0.169013321399689,0.927400946617126,0.205060333013535,0.0685160234570503,0.976348161697388,-0.0540277659893036,-0.0540848448872566,0.997073590755463,0.0144113004207611,0.0269631575793028,0.999532520771027,0.470013290643692,0.212332352995873,0.856739461421967,0.333709418773651,0.169013321399689,0.927400946617126,0.578032433986664,0.306231528520584,0.756373405456543,0.357361167669296,0.242811009287834,0.901851356029511,0.388869285583496,-0.304632723331451,0.869470834732056,0.724869191646576,-0.144625514745712,0.673534035682678,-0.0965566337108612,0.382317036390305,0.918972492218018,-0.136446863412857,-0.21966315805912,0.965986728668213,0.0695574581623077,-0.316367268562317,0.946083247661591,0.119953289628029,0.283690631389618,0.951383650302887,-0.104829348623753,-0.0149719836190343,0.994377493858337,-0.046717431396246,0.464232265949249,0.884480595588684,0.162078380584717,0.332254558801651,0.929159581661224,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.026754243299365,0.843723058700562,0.53611159324646,0.256553143262863,0.759260475635529,0.598083674907684,0.162078380584717,0.332254558801651,0.929159581661224,-0.046717431396246,0.464232265949249,0.884480595588684,0.0405396111309528,-0.00950155965983868,0.999132752418518,0.193743079900742,0.0896209701895714,0.976950228214264,0.533409833908081,0.213411912322044,0.818492114543915,0.109049446880817,0.0514820925891399,0.992702305316925,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.0405396111309528,-0.00950155965983868,0.999132752418518,0.109049446880817,0.0514820925891399,0.992702305316925,0.109049446880817,0.0514820925891399,0.992702305316925,0.533409833908081,0.213411912322044,0.818492114543915,0.54212898015976,0.215727955102921,0.812131583690643,0.578032433986664,0.306231528520584,0.756373405456543,\n0.724869191646576,-0.144625514745712,0.673534035682678,0.858066916465759,-0.0402064435184002,0.511961579322815,0.700553953647614,0.463066458702087,0.542949020862579,0.858066916465759,-0.0402064435184002,0.511961579322815,0.875872433185577,0.296488851308823,0.38071221113205,0.802525162696838,0.518118143081665,0.295815676450729,0.700553953647614,0.463066458702087,0.542949020862579,-0.474541693925858,-0.67278927564621,0.567595541477203,-0.994033694267273,0.107649877667427,-0.0175654906779528,0.212925776839256,0.972887873649597,-0.0902870893478394,0.480981200933456,0.871001183986664,0.100070223212242,0.13062296807766,0.400416731834412,0.906975269317627,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.817673206329346,0.400343358516693,-0.413685619831085,0.212925776839256,0.972887873649597,-0.0902870893478394,-0.994033694267273,0.107649877667427,-0.0175654906779528,0.370056182146072,0.811048626899719,-0.453054636716843,0.713096976280212,0.68854147195816,-0.131921663880348,0.212925776839256,0.972887873649597,-0.0902870893478394,-0.817673206329346,0.400343358516693,-0.413685619831085,0.212925776839256,0.972887873649597,-0.0902870893478394,0.713096976280212,0.68854147195816,-0.131921663880348,0.778178691864014,0.616257607936859,0.121097095310688,0.480981200933456,0.871001183986664,0.100070223212242,0.551189541816711,0.456701904535294,0.698293268680573,0.486871391534805,0.750825703144073,0.446337312459946,0.276492714881897,0.762958288192749,0.584334194660187,0.326813966035843,0.423467636108398,0.844906985759735,0.551189541816711,0.456701904535294,0.698293268680573,0.326813966035843,0.423467636108398,0.844906985759735,0.329012274742126,0.260547906160355,0.907670497894287,0.561613619327545,0.285967856645584,0.776409983634949,0.7577885389328,0.376234740018845,0.533107817173004,0.739092469215393,0.541533410549164,0.400604367256165,0.778178691864014,0.616257607936859,0.121097095310688,0.827663242816925,0.523418128490448,0.202501967549324,0.804373443126678,0.392295897006989,0.446191996335983,0.739092469215393,0.541533410549164,0.400604367256165,\n0.7577885389328,0.376234740018845,0.533107817173004,0.758135914802551,0.0851427242159843,0.646514236927032,0.443391680717468,-0.0999263972043991,0.89074045419693,0.252335846424103,0.330343335866928,0.909505307674408,-0.26518127322197,0.597104549407959,-0.757063448429108,0.182353228330612,0.97417688369751,-0.133141815662384,-0.0107070477679372,0.835606217384338,-0.549224615097046,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.0107070477679372,0.835606217384338,-0.549224615097046,0.182353228330612,0.97417688369751,-0.133141815662384,0.486871391534805,0.750825703144073,0.446337312459946,0.534174799919128,0.836855232715607,0.119710274040699,0.170329049229622,0.936843514442444,-0.305470585823059,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.0107070477679372,0.835606217384338,-0.549224615097046,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.0107070477679372,0.835606217384338,-0.549224615097046,0.170329049229622,0.936843514442444,-0.305470585823059,-0.452081710100174,0.604530513286591,-0.655869662761688,0.7577885389328,0.376234740018845,0.533107817173004,0.804373443126678,0.392295897006989,0.446191996335983,0.731819272041321,0.307825177907944,0.608016610145569,0.740872263908386,0.260281056165695,0.619162321090698,0.731819272041321,0.307825177907944,0.608016610145569,0.804373443126678,0.392295897006989,0.446191996335983,0.650610029697418,0.750839710235596,0.113781958818436,0.665128111839294,0.607672452926636,0.433980166912079,0.731819272041321,0.307825177907944,0.608016610145569,0.665128111839294,0.607672452926636,0.433980166912079,0.551189541816711,0.456701904535294,0.698293268680573,0.561613619327545,0.285967856645584,0.776409983634949,0.665128111839294,0.607672452926636,0.433980166912079,0.534174799919128,0.836855232715607,0.119710274040699,0.486871391534805,0.750825703144073,0.446337312459946,0.551189541816711,0.456701904535294,0.698293268680573,0.558381021022797,0.167118594050407,0.812577426433563,0.561613619327545,0.285967856645584,0.776409983634949,\n0.329012274742126,0.260547906160355,0.907670497894287,0.315978825092316,0.0904445722699165,0.944445431232452,-0.0239754971116781,0.848645508289337,-0.528418362140656,0.113433599472046,0.992009460926056,0.0552276223897934,0.182353228330612,0.97417688369751,-0.133141815662384,-0.26518127322197,0.597104549407959,-0.757063448429108,0.113433599472046,0.992009460926056,0.0552276223897934,0.276492714881897,0.762958288192749,0.584334194660187,0.486871391534805,0.750825703144073,0.446337312459946,0.182353228330612,0.97417688369751,-0.133141815662384,0.0685662999749184,0.738678991794586,0.670561015605927,0.0410983338952065,0.381287395954132,0.923542559146881,0.172223508358002,0.402292132377625,0.899166345596313,0.179263070225716,0.753637075424194,0.632373213768005,0.172223508358002,0.402292132377625,0.899166345596313,0.0410983338952065,0.381287395954132,0.923542559146881,0.0325647220015526,0.328354388475418,0.943993091583252,0.181231990456581,0.289873003959656,0.939749240875244,0.329012274742126,0.260547906160355,0.907670497894287,0.326813966035843,0.423467636108398,0.844906985759735,0.172223508358002,0.402292132377625,0.899166345596313,0.181231990456581,0.289873003959656,0.939749240875244,0.276492714881897,0.762958288192749,0.584334194660187,0.179263070225716,0.753637075424194,0.632373213768005,0.172223508358002,0.402292132377625,0.899166345596313,0.326813966035843,0.423467636108398,0.844906985759735,0.650610029697418,0.750839710235596,0.113781958818436,0.401338756084442,0.891479909420013,-0.210216000676155,0.534174799919128,0.836855232715607,0.119710274040699,0.665128111839294,0.607672452926636,0.433980166912079,0.740872263908386,0.260281056165695,0.619162321090698,0.731819272041321,0.307825177907944,0.608016610145569,0.561613619327545,0.285967856645584,0.776409983634949,0.558381021022797,0.167118594050407,0.812577426433563,0.315978825092316,0.0904445722699165,0.944445431232452,0.329012274742126,0.260547906160355,0.907670497894287,0.181231990456581,0.289873003959656,0.939749240875244,0.178787171840668,0.10878062993288,0.977855801582336,\n0.0226862858980894,0.138102903962135,0.990158021450043,0.178787171840668,0.10878062993288,0.977855801582336,0.181231990456581,0.289873003959656,0.939749240875244,0.0325647220015526,0.328354388475418,0.943993091583252,0.0685662999749184,0.738678991794586,0.670561015605927,0.179263070225716,0.753637075424194,0.632373213768005,0.145434200763702,0.978163301944733,0.14847719669342,0.078812912106514,0.980074644088745,0.182324379682541,0.276492714881897,0.762958288192749,0.584334194660187,0.113433599472046,0.992009460926056,0.0552276223897934,0.145434200763702,0.978163301944733,0.14847719669342,0.179263070225716,0.753637075424194,0.632373213768005,-0.0239754971116781,0.848645508289337,-0.528418362140656,0.103339314460754,0.947827875614166,-0.301568180322647,0.145434200763702,0.978163301944733,0.14847719669342,0.113433599472046,0.992009460926056,0.0552276223897934,0.0339763574302197,0.937289535999298,-0.346891850233078,0.078812912106514,0.980074644088745,0.182324379682541,0.145434200763702,0.978163301944733,0.14847719669342,0.103339314460754,0.947827875614166,-0.301568180322647,-0.452081710100174,0.604530513286591,-0.655869662761688,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.452081710100174,0.604530513286591,-0.655869662761688,0.170329049229622,0.936843514442444,-0.305470585823059,0.534174799919128,0.836855232715607,0.119710274040699,0.401338756084442,0.891479909420013,-0.210216000676155,-0.19065423309803,0.753101229667664,-0.629674077033997,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.452081710100174,0.604530513286591,-0.655869662761688,-0.19065423309803,0.753101229667664,-0.629674077033997,0.277289211750031,-0.704152882099152,0.653666138648987,0.295715004205704,-0.771513819694519,0.56331080198288,0.426225006580353,-0.76509952545166,0.482654064893723,0.385886758565903,-0.746556282043457,0.541982591152191,0.353581786155701,-0.382090777158737,0.853807151317596,0.277289211750031,-0.704152882099152,0.653666138648987,\n0.385886758565903,-0.746556282043457,0.541982591152191,0.476604402065277,-0.515640795230865,0.712013244628906,-0.00443782517686486,-0.271711438894272,0.962368547916412,0.176269888877869,-0.285972148180008,0.941885769367218,0.238539665937424,0.21987047791481,0.945915341377258,0.0352616421878338,0.240770235657692,0.969941377639771,0.353581786155701,-0.382090777158737,0.853807151317596,0.434465974569321,0.150427758693695,0.888037621974945,0.238539665937424,0.21987047791481,0.945915341377258,0.176269888877869,-0.285972148180008,0.941885769367218,0.40496814250946,0.259010583162308,0.87687760591507,0.235586777329445,0.270827025175095,0.933355033397675,0.238539665937424,0.21987047791481,0.945915341377258,0.434465974569321,0.150427758693695,0.888037621974945,0.0384946875274181,0.285418510437012,0.957629561424255,0.0352616421878338,0.240770235657692,0.969941377639771,0.238539665937424,0.21987047791481,0.945915341377258,0.235586777329445,0.270827025175095,0.933355033397675,0.362627446651459,-0.180693462491035,0.914249002933502,0.248945504426956,-0.117258243262768,0.961393058300018,0.40496814250946,0.259010583162308,0.87687760591507,0.552154183387756,0.173749193549156,0.815436661243439,0.0766859278082848,-0.975562393665314,0.205905899405479,-0.0727874711155891,-0.98180228471756,0.1754030585289,0.0500960312783718,-0.998004376888275,0.0384394414722919,0.128954827785492,-0.985570788383484,0.109639815986156,0.193085044622421,-0.95480340719223,0.225983783602715,0.0766859278082848,-0.975562393665314,0.205905899405479,0.128954827785492,-0.985570788383484,0.109639815986156,0.225613579154015,-0.956868171691895,0.183034926652908,0.282156497240067,-0.915852665901184,-0.285659939050674,0.470402508974075,-0.871353209018707,-0.139517307281494,0.465096980333328,-0.885112583637238,0.016138968989253,0.283746033906937,-0.948122382164001,-0.143360316753387,0.465096980333328,-0.885112583637238,0.016138968989253,0.470402508974075,-0.871353209018707,-0.139517307281494,0.600540995597839,-0.799374520778656,-0.0187329761683941,0.545321881771088,-0.833433032035828,0.0895174741744995,\n0.545321881771088,-0.833433032035828,0.0895174741744995,0.630033671855927,-0.76368510723114,0.140863940119743,0.539758801460266,-0.780041754245758,0.316536396741867,0.471000701189041,-0.846986770629883,0.246519237756729,0.630033671855927,-0.76368510723114,0.140863940119743,0.767249822616577,-0.595458924770355,0.23823593556881,0.70995169878006,-0.557043075561523,0.430896311998367,0.539758801460266,-0.780041754245758,0.316536396741867,0.295715004205704,-0.771513819694519,0.56331080198288,0.277289211750031,-0.704152882099152,0.653666138648987,0.0847999006509781,-0.684147000312805,0.724397599697113,0.0651562884449959,-0.780692636966705,0.62150913476944,0.353581786155701,-0.382090777158737,0.853807151317596,0.176269888877869,-0.285972148180008,0.941885769367218,0.0847999006509781,-0.684147000312805,0.724397599697113,0.277289211750031,-0.704152882099152,0.653666138648987,-0.00443782517686486,-0.271711438894272,0.962368547916412,-0.0397491529583931,-0.678164541721344,0.733834326267242,0.0847999006509781,-0.684147000312805,0.724397599697113,0.176269888877869,-0.285972148180008,0.941885769367218,-0.0491818785667419,-0.776791214942932,0.627834796905518,0.0651562884449959,-0.780692636966705,0.62150913476944,0.0847999006509781,-0.684147000312805,0.724397599697113,-0.0397491529583931,-0.678164541721344,0.733834326267242,0.353581786155701,-0.382090777158737,0.853807151317596,0.476604402065277,-0.515640795230865,0.712013244628906,0.598369121551514,-0.00250658229924738,0.801216602325439,0.434465974569321,0.150427758693695,0.888037621974945,0.598369121551514,-0.00250658229924738,0.801216602325439,0.552154183387756,0.173749193549156,0.815436661243439,0.40496814250946,0.259010583162308,0.87687760591507,0.434465974569321,0.150427758693695,0.888037621974945,0.00911593530327082,-0.103348582983017,0.994603395462036,0.0384946875274181,0.285418510437012,0.957629561424255,0.235586777329445,0.270827025175095,0.933355033397675,0.173270419239998,-0.100987397134304,0.979683041572571,0.235586777329445,0.270827025175095,0.933355033397675,0.40496814250946,0.259010583162308,0.87687760591507,\n0.248945504426956,-0.117258243262768,0.961393058300018,0.173270419239998,-0.100987397134304,0.979683041572571,0.00927210599184036,-0.101372048258781,0.99480539560318,-0.0108760436996818,-0.349400758743286,0.936910271644592,0.0623843558132648,-0.406503170728683,0.911517083644867,-0.186361730098724,-0.434708625078201,0.881077587604523,-0.220686122775078,-0.040834903717041,0.974489688873291,0.0623843558132648,-0.406503170728683,0.911517083644867,0.226468428969383,-0.439074218273163,0.869439959526062,-0.0349236838519573,-0.777106523513794,0.62839937210083,-0.186361730098724,-0.434708625078201,0.881077587604523,0.61975085735321,-0.35027813911438,0.702292025089264,0.463432401418686,-0.580224633216858,0.66975349187851,0.226468428969383,-0.439074218273163,0.869439959526062,0.364222437143326,-0.205845013260841,0.908278524875641,0.226468428969383,-0.439074218273163,0.869439959526062,0.463432401418686,-0.580224633216858,0.66975349187851,0.176858365535736,-0.897578120231628,0.403824985027313,-0.0349236838519573,-0.777106523513794,0.62839937210083,0.00262317061424255,-0.184787794947624,0.982774972915649,0.364222437143326,-0.205845013260841,0.908278524875641,0.226468428969383,-0.439074218273163,0.869439959526062,-0.00295650074258447,-0.253587752580643,0.967307865619659,0.463432401418686,-0.580224633216858,0.66975349187851,0.61975085735321,-0.35027813911438,0.702292025089264,0.794963598251343,-0.434218406677246,0.423659265041351,0.420062124729156,-0.858003616333008,0.295596987009048,0.176858365535736,-0.897578120231628,0.403824985027313,0.794963598251343,-0.434218406677246,0.423659265041351,0.881620466709137,-0.332029432058334,0.335412949323654,0.562851548194885,-0.792488932609558,0.23486053943634,0.420062124729156,-0.858003616333008,0.295596987009048,0.513407528400421,-0.784644782543182,0.347484111785889,0.507576704025269,-0.725169718265533,0.465290039777756,0.223161399364471,-0.702425539493561,0.675867795944214,0.220125123858452,-0.84959089756012,0.479312241077423,0.223161399364471,-0.702425539493561,0.675867795944214,0.507576704025269,-0.725169718265533,0.465290039777756,\n0.511638343334198,-0.543274581432343,0.665641725063324,0.215388640761375,-0.476592898368835,0.852330327033997,-0.0191204845905304,-0.446781009435654,0.894439041614532,-0.0377944894134998,-0.657056510448456,0.752893269062042,0.223161399364471,-0.702425539493561,0.675867795944214,0.215388640761375,-0.476592898368835,0.852330327033997,-0.055518988519907,-0.839309513568878,0.540811538696289,0.220125123858452,-0.84959089756012,0.479312241077423,0.223161399364471,-0.702425539493561,0.675867795944214,-0.0377944894134998,-0.657056510448456,0.752893269062042,0.903869867324829,0.198627322912216,0.37890163064003,0.899348855018616,0.00629356363788247,0.437186509370804,0.836100995540619,0.0841564238071442,0.542081892490387,0.855352699756622,0.226547658443451,0.46588408946991,0.899348855018616,0.00629356363788247,0.437186509370804,0.903869867324829,0.198627322912216,0.37890163064003,0.793976366519928,0.302302360534668,0.527460694313049,0.795822381973267,0.0336451791226864,0.604594647884369,0.846422255039215,-0.185521140694618,0.499150514602661,0.899348855018616,0.00629356363788247,0.437186509370804,0.795822381973267,0.0336451791226864,0.604594647884369,0.777246952056885,-0.186122506856918,0.60103702545166,0.899348855018616,0.00629356363788247,0.437186509370804,0.846422255039215,-0.185521140694618,0.499150514602661,0.759909570217133,-0.165927812457085,0.628494560718536,0.836100995540619,0.0841564238071442,0.542081892490387,0.411182582378387,-0.842439949512482,0.348172098398209,0.823821365833282,-0.474406152963638,0.310253411531448,0.778993248939514,-0.607196033000946,0.156468689441681,0.513407528400421,-0.784644782543182,0.347484111785889,0.350974529981613,-0.540442049503326,0.764682471752167,0.576319634914398,0.0662916451692581,0.814531207084656,0.854965507984161,-0.114104993641377,0.505978286266327,0.560910940170288,-0.546258211135864,0.622077882289886,0.536651909351349,-0.138671860098839,0.832331001758575,0.777246952056885,-0.186122506856918,0.60103702545166,0.795822381973267,0.0336451791226864,0.604594647884369,0.532816469669342,0.10447982698679,0.83975625038147,\n0.536214470863342,0.394264131784439,0.746344327926636,0.532816469669342,0.10447982698679,0.83975625038147,0.795822381973267,0.0336451791226864,0.604594647884369,0.793976366519928,0.302302360534668,0.527460694313049,0.814013004302979,0.416528642177582,0.404829293489456,0.73296993970871,0.0683575123548508,0.676817834377289,0.898182094097137,-0.0604765526950359,0.435443967580795,0.915319561958313,0.399081766605377,0.0540725849568844,0.854046881198883,0.485713124275208,0.186243653297424,0.814013004302979,0.416528642177582,0.404829293489456,0.915319561958313,0.399081766605377,0.0540725849568844,0.890166699886322,0.437690794467926,-0.12660938501358,0.672172069549561,0.528298437595367,-0.518734514713287,0.890166699886322,0.437690794467926,-0.12660938501358,0.915319561958313,0.399081766605377,0.0540725849568844,0.93711906671524,0.303550958633423,-0.172234460711479,0.552991390228271,0.323919504880905,-0.767643570899963,0.672172069549561,0.528298437595367,-0.518734514713287,0.93711906671524,0.303550958633423,-0.172234460711479,0.856223344802856,0.13723511993885,-0.498044282197952,0.552991390228271,0.323919504880905,-0.767643570899963,0.856223344802856,0.13723511993885,-0.498044282197952,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.744540750980377,0.353585213422775,-0.566247820854187,0.552991390228271,0.323919504880905,-0.767643570899963,0.890166699886322,0.437690794467926,-0.12660938501358,0.672172069549561,0.528298437595367,-0.518734514713287,0.552991390228271,0.323919504880905,-0.767643570899963,0.744540750980377,0.353585213422775,-0.566247820854187,0.632524311542511,-0.737463712692261,0.236770406365395,0.625836908817291,-0.779953479766846,0.000855531019624323,0.816257119178772,-0.389834344387054,-0.426325589418411,0.93777334690094,-0.280869245529175,-0.204190224409103,0.816257119178772,-0.389834344387054,-0.426325589418411,0.851511597633362,-0.5011847615242,0.154083982110024,0.967206120491028,-0.19463723897934,0.163182899355888,0.933138132095337,-0.0070160455070436,-0.359449595212936,\n0.816257119178772,-0.389834344387054,-0.426325589418411,0.625836908817291,-0.779953479766846,0.000855531019624323,0.851511597633362,-0.5011847615242,0.154083982110024,0.632524311542511,-0.737463712692261,0.236770406365395,0.645412087440491,-0.585248291492462,0.490843862295151,0.0743590220808983,-0.732295691967011,0.676914930343628,0.125414818525314,-0.832001984119415,0.540410816669464,0.612550616264343,-0.435902178287506,0.659371674060822,0.078930102288723,-0.647568047046661,0.757908701896667,0.0743590220808983,-0.732295691967011,0.676914930343628,0.645412087440491,-0.585248291492462,0.490843862295151,-0.549701511859894,-0.519823312759399,0.653920412063599,-0.485137194395065,-0.428027123212814,0.762518644332886,0.0743590220808983,-0.732295691967011,0.676914930343628,0.078930102288723,-0.647568047046661,0.757908701896667,-0.119093708693981,-0.53387188911438,0.837136447429657,0.125414818525314,-0.832001984119415,0.540410816669464,0.0743590220808983,-0.732295691967011,0.676914930343628,-0.485137194395065,-0.428027123212814,0.762518644332886,0.546313166618347,-0.300951540470123,0.781645774841309,0.0897415652871132,-0.61595892906189,0.782649993896484,0.078930102288723,-0.647568047046661,0.757908701896667,0.612550616264343,-0.435902178287506,0.659371674060822,0.0897415652871132,-0.61595892906189,0.782649993896484,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.549701511859894,-0.519823312759399,0.653920412063599,0.078930102288723,-0.647568047046661,0.757908701896667,0.576319634914398,0.0662916451692581,0.814531207084656,0.0803298726677895,0.272869914770126,0.958691358566284,0.591780304908752,0.0913430228829384,0.8009073138237,0.786046326160431,0.0746424272656441,0.613644540309906,0.576319634914398,0.0662916451692581,0.814531207084656,0.350974529981613,-0.540442049503326,0.764682471752167,-0.119093708693981,-0.53387188911438,0.837136447429657,0.0803298726677895,0.272869914770126,0.958691358566284,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.239867821335793,-0.0863698795437813,0.966955900192261,0.244136393070221,0.145083606243134,0.95882648229599,\n0.0296379756182432,0.164347007870674,0.985957264900208,0.536651909351349,-0.138671860098839,0.832331001758575,0.532816469669342,0.10447982698679,0.83975625038147,0.244136393070221,0.145083606243134,0.95882648229599,0.239867821335793,-0.0863698795437813,0.966955900192261,0.536214470863342,0.394264131784439,0.746344327926636,0.253624588251114,0.428919792175293,0.867007732391357,0.244136393070221,0.145083606243134,0.95882648229599,0.532816469669342,0.10447982698679,0.83975625038147,0.0497331917285919,0.445011228322983,0.894142985343933,0.0296379756182432,0.164347007870674,0.985957264900208,0.244136393070221,0.145083606243134,0.95882648229599,0.253624588251114,0.428919792175293,0.867007732391357,0.544139504432678,-0.298705726861954,0.784019768238068,0.238130986690521,-0.235158920288086,0.942334294319153,0.215388640761375,-0.476592898368835,0.852330327033997,0.511638343334198,-0.543274581432343,0.665641725063324,0.536651909351349,-0.138671860098839,0.832331001758575,0.239867821335793,-0.0863698795437813,0.966955900192261,0.238130986690521,-0.235158920288086,0.942334294319153,0.544139504432678,-0.298705726861954,0.784019768238068,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.000908877176698297,-0.206076413393021,0.97853547334671,0.238130986690521,-0.235158920288086,0.942334294319153,0.239867821335793,-0.0863698795437813,0.966955900192261,0.238130986690521,-0.235158920288086,0.942334294319153,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.0191204845905304,-0.446781009435654,0.894439041614532,0.215388640761375,-0.476592898368835,0.852330327033997,0.856223344802856,0.13723511993885,-0.498044282197952,0.93711906671524,0.303550958633423,-0.172234460711479,0.979637861251831,-0.147638529539108,0.136060565710068,0.93777334690094,-0.280869245529175,-0.204190224409103,0.915319561958313,0.399081766605377,0.0540725849568844,0.898182094097137,-0.0604765526950359,0.435443967580795,0.979637861251831,-0.147638529539108,0.136060565710068,0.93711906671524,0.303550958633423,-0.172234460711479,0.612550616264343,-0.435902178287506,0.659371674060822,\n0.645412087440491,-0.585248291492462,0.490843862295151,0.979637861251831,-0.147638529539108,0.136060565710068,0.898182094097137,-0.0604765526950359,0.435443967580795,0.632524311542511,-0.737463712692261,0.236770406365395,0.93777334690094,-0.280869245529175,-0.204190224409103,0.979637861251831,-0.147638529539108,0.136060565710068,0.645412087440491,-0.585248291492462,0.490843862295151,0.275395423173904,-0.612316191196442,0.741097986698151,0.589075446128845,-0.205572411417961,0.781492233276367,0.759909570217133,-0.165927812457085,0.628494560718536,0.59905880689621,-0.501385033130646,0.624292850494385,0.237821668386459,-0.891240954399109,0.386174082756042,-0.272507458925247,-0.860418200492859,0.430604517459869,0.275395423173904,-0.612316191196442,0.741097986698151,0.59905880689621,-0.501385033130646,0.624292850494385,-0.527550399303436,-0.67441987991333,0.51657372713089,0.0897415652871132,-0.61595892906189,0.782649993896484,0.275395423173904,-0.612316191196442,0.741097986698151,-0.272507458925247,-0.860418200492859,0.430604517459869,0.546313166618347,-0.300951540470123,0.781645774841309,0.589075446128845,-0.205572411417961,0.781492233276367,0.275395423173904,-0.612316191196442,0.741097986698151,0.0897415652871132,-0.61595892906189,0.782649993896484,0.507576704025269,-0.725169718265533,0.465290039777756,0.689145267009735,-0.603762626647949,0.400686323642731,0.511638343334198,-0.543274581432343,0.665641725063324,0.507576704025269,-0.725169718265533,0.465290039777756,0.513407528400421,-0.784644782543182,0.347484111785889,0.778993248939514,-0.607196033000946,0.156468689441681,0.704199492931366,-0.704627811908722,0.0871931314468384,0.689145267009735,-0.603762626647949,0.400686323642731,0.814013004302979,0.416528642177582,0.404829293489456,0.741662085056305,0.344577699899673,0.575502872467041,0.694613039493561,0.143838599324226,0.704856872558594,0.73296993970871,0.0683575123548508,0.676817834377289,0.694613039493561,0.143838599324226,0.704856872558594,0.741662085056305,0.344577699899673,0.575502872467041,0.855352699756622,0.226547658443451,0.46588408946991,\n0.836100995540619,0.0841564238071442,0.542081892490387,0.589075446128845,-0.205572411417961,0.781492233276367,0.694613039493561,0.143838599324226,0.704856872558594,0.836100995540619,0.0841564238071442,0.542081892490387,0.759909570217133,-0.165927812457085,0.628494560718536,0.546313166618347,-0.300951540470123,0.781645774841309,0.73296993970871,0.0683575123548508,0.676817834377289,0.694613039493561,0.143838599324226,0.704856872558594,0.589075446128845,-0.205572411417961,0.781492233276367,-0.055518988519907,-0.839309513568878,0.540811538696289,-0.0675294324755669,-0.945460379123688,0.318660378456116,0.117540158331394,-0.936730265617371,0.329728245735168,0.220125123858452,-0.84959089756012,0.479312241077423,0.117540158331394,-0.936730265617371,0.329728245735168,0.411182582378387,-0.842439949512482,0.348172098398209,0.513407528400421,-0.784644782543182,0.347484111785889,0.220125123858452,-0.84959089756012,0.479312241077423,0.73296993970871,0.0683575123548508,0.676817834377289,0.546313166618347,-0.300951540470123,0.781645774841309,0.612550616264343,-0.435902178287506,0.659371674060822,0.898182094097137,-0.0604765526950359,0.435443967580795,0.771526336669922,-0.409758031368256,0.486667722463608,0.589298963546753,-0.771825730800629,0.238771393895149,0.237821668386459,-0.891240954399109,0.386174082756042,0.59905880689621,-0.501385033130646,0.624292850494385,0.846422255039215,-0.185521140694618,0.499150514602661,0.771526336669922,-0.409758031368256,0.486667722463608,0.59905880689621,-0.501385033130646,0.624292850494385,0.759909570217133,-0.165927812457085,0.628494560718536,0.771526336669922,-0.409758031368256,0.486667722463608,0.846422255039215,-0.185521140694618,0.499150514602661,0.777246952056885,-0.186122506856918,0.60103702545166,0.760827541351318,-0.370115906000137,0.53306257724762,0.589298963546753,-0.771825730800629,0.238771393895149,0.771526336669922,-0.409758031368256,0.486667722463608,0.760827541351318,-0.370115906000137,0.53306257724762,0.689145267009735,-0.603762626647949,0.400686323642731,0.704199492931366,-0.704627811908722,0.0871931314468384,\n0.854965507984161,-0.114104993641377,0.505978286266327,0.940892815589905,-0.119216494262218,0.317030221223831,0.823821365833282,-0.474406152963638,0.310253411531448,0.560910940170288,-0.546258211135864,0.622077882289886,0.937154471874237,-0.0475939512252808,0.345653474330902,0.917503833770752,-0.132210671901703,0.375109404325485,0.916658163070679,-0.0698241367936134,0.393525570631027,0.916658163070679,-0.0698241367936134,0.393525570631027,0.917503833770752,-0.132210671901703,0.375109404325485,0.872779548168182,-0.198945015668869,0.445731669664383,0.855076372623444,-0.165702432394028,0.491311639547348,-0.220686122775078,-0.040834903717041,0.974489688873291,-0.186361730098724,-0.434708625078201,0.881077587604523,0.0312842912971973,-0.474717557430267,0.879582047462463,0.106603257358074,0.0133492052555084,0.994212031364441,-0.0349236838519573,-0.777106523513794,0.62839937210083,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.0312842912971973,-0.474717557430267,0.879582047462463,-0.186361730098724,-0.434708625078201,0.881077587604523,0.301303088665009,-0.716448962688446,0.629219651222229,0.560910940170288,-0.546258211135864,0.622077882289886,0.823821365833282,-0.474406152963638,0.310253411531448,0.411182582378387,-0.842439949512482,0.348172098398209,0.760827541351318,-0.370115906000137,0.53306257724762,0.544139504432678,-0.298705726861954,0.784019768238068,0.511638343334198,-0.543274581432343,0.665641725063324,0.689145267009735,-0.603762626647949,0.400686323642731,0.536651909351349,-0.138671860098839,0.832331001758575,0.544139504432678,-0.298705726861954,0.784019768238068,0.760827541351318,-0.370115906000137,0.53306257724762,0.777246952056885,-0.186122506856918,0.60103702545166,0.742792665958405,-0.550313711166382,0.381331622600555,0.803535997867584,-0.553550720214844,0.2188870459795,0.897108614444733,-0.31337758898735,0.311433225870132,0.760169208049774,-0.346720576286316,0.549479365348816,0.821304857730865,-0.558016240596771,0.118643142282963,0.923712968826294,-0.295430272817612,0.243875607848167,0.897108614444733,-0.31337758898735,0.311433225870132,\n0.803535997867584,-0.553550720214844,0.2188870459795,0.945337653160095,-0.174788698554039,0.275292009115219,0.899602174758911,-0.197590529918671,0.389453411102295,0.897108614444733,-0.31337758898735,0.311433225870132,0.923712968826294,-0.295430272817612,0.243875607848167,0.705349028110504,-0.217919707298279,0.674532234668732,0.760169208049774,-0.346720576286316,0.549479365348816,0.897108614444733,-0.31337758898735,0.311433225870132,0.899602174758911,-0.197590529918671,0.389453411102295,0.593307375907898,-0.0775594636797905,0.801230847835541,0.405026167631149,-0.171226277947426,0.898128807544708,0.401639640331268,-0.00309631112031639,0.915792524814606,0.577744483947754,0.0458397567272186,0.814929485321045,-0.00769979506731033,-0.155788585543633,0.987760424613953,0.205060333013535,0.0685160234570503,0.976348161697388,0.209787964820862,-0.0149007942527533,0.977633357048035,0.130675092339516,-0.201507270336151,0.9707310795784,0.613882482051849,0.099590003490448,0.783090114593506,0.621637463569641,0.0923129394650459,0.77784651517868,0.729625582695007,0.0742557868361473,0.679803311824799,0.613882482051849,0.099590003490448,0.783090114593506,0.729625582695007,0.0742557868361473,0.679803311824799,0.668389976024628,-0.0383556596934795,0.742821395397186,0.615384101867676,0.0611244365572929,0.785853803157806,0.520175099372864,-0.288751989603043,0.803766191005707,0.596563339233398,-0.0223739240318537,0.8022540807724,0.440964937210083,0.0207586232572794,0.897284269332886,0.356722086668015,-0.354729324579239,0.86424332857132,0.520175099372864,-0.288751989603043,0.803766191005707,0.356722086668015,-0.354729324579239,0.86424332857132,0.217255920171738,-0.631381034851074,0.744417786598206,0.34566730260849,-0.589025497436523,0.73045402765274,0.553863286972046,-0.30215710401535,0.77584570646286,0.520175099372864,-0.288751989603043,0.803766191005707,0.34566730260849,-0.589025497436523,0.73045402765274,0.266091585159302,-0.603160440921783,0.751926004886627,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.499244570732117,-0.495106011629105,-0.711073040962219,\n-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.696032464504242,-0.619228482246399,-0.363448590040207,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.696032464504242,-0.619228482246399,-0.363448590040207,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.217067420482636,-0.972187459468842,0.0879386737942696,0.356722086668015,-0.354729324579239,0.86424332857132,0.440964937210083,0.0207586232572794,0.897284269332886,0.191416949033737,-0.0921172648668289,0.977176547050476,0.164827063679695,-0.547387719154358,0.820486903190613,0.356722086668015,-0.354729324579239,0.86424332857132,0.164827063679695,-0.547387719154358,0.820486903190613,0.114735066890717,-0.656680226325989,0.745390474796295,0.217255920171738,-0.631381034851074,0.744417786598206,-0.0952682122588158,-0.943798363208771,-0.316494256258011,-0.117666520178318,-0.734499752521515,-0.668329775333405,-0.499244570732117,-0.495106011629105,-0.711073040962219,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.0952682122588158,-0.943798363208771,-0.316494256258011,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.217067420482636,-0.972187459468842,0.0879386737942696,-0.05385497584939,-0.996109485626221,0.06975357234478,0.596563339233398,-0.0223739240318537,0.8022540807724,0.520175099372864,-0.288751989603043,0.803766191005707,0.553863286972046,-0.30215710401535,0.77584570646286,0.607095539569855,-0.200262412428856,0.768979847431183,-0.070097453892231,-0.765305280685425,-0.639839172363281,0.0357764922082424,-0.768304586410522,-0.639083802700043,0.0121895968914032,-0.964383244514465,-0.26422792673111,-0.0787644907832146,-0.96135801076889,-0.263793289661407,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.0357764922082424,-0.768304586410522,-0.639083802700043,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.0417160429060459,-0.96068263053894,-0.274497121572495,0.00571701768785715,-0.999931693077087,-0.0101942336186767,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.0417160429060459,-0.96068263053894,-0.274497121572495,\n0.0655759945511818,-0.996207714080811,0.0571834556758404,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.0787644907832146,-0.96135801076889,-0.263793289661407,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.00571701768785715,-0.999931693077087,-0.0101942336186767,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.758401393890381,-0.574856221675873,-0.307193249464035,0.0592443346977234,-0.610537111759186,0.789768636226654,0.0125365713611245,-0.668434202671051,0.743665635585785,0.208488672971725,-0.647888123989105,0.732648193836212,0.171075537800789,-0.616661608219147,0.768415033817291,0.0412249267101288,-0.205861806869507,0.977712333202362,0.0592443346977234,-0.610537111759186,0.789768636226654,0.171075537800789,-0.616661608219147,0.768415033817291,0.0600041374564171,-0.192453533411026,0.979469835758209,0.00068405584897846,-0.208776980638504,0.977963030338287,-0.0353972837328911,-0.630800306797028,0.775137424468994,0.0592443346977234,-0.610537111759186,0.789768636226654,0.0412249267101288,-0.205861806869507,0.977712333202362,-0.0406640991568565,-0.687796175479889,0.724763989448547,0.0125365713611245,-0.668434202671051,0.743665635585785,0.0592443346977234,-0.610537111759186,0.789768636226654,-0.0353972837328911,-0.630800306797028,0.775137424468994,0.443391680717468,-0.0999263972043991,0.89074045419693,0.511712968349457,-0.26713839173317,0.816570222377777,0.477897197008133,-0.208041027188301,0.853424370288849,0.164051368832588,-0.273042142391205,0.947910964488983,0.443824082612991,-0.204101487994194,0.872561037540436,0.173163160681725,-0.359727561473846,0.916848182678223,0.164051368832588,-0.273042142391205,0.947910964488983,0.477897197008133,-0.208041027188301,0.853424370288849,\n-0.05385497584939,-0.996109485626221,0.06975357234478,0.0592407323420048,-0.802932441234589,0.593118906021118,0.163204148411751,-0.824093818664551,0.542433202266693,0.0655759945511818,-0.996207714080811,0.0571834556758404,0.114735066890717,-0.656680226325989,0.745390474796295,0.208488672971725,-0.647888123989105,0.732648193836212,0.163204148411751,-0.824093818664551,0.542433202266693,0.0592407323420048,-0.802932441234589,0.593118906021118,0.163204148411751,-0.824093818664551,0.542433202266693,0.208488672971725,-0.647888123989105,0.732648193836212,0.0125365713611245,-0.668434202671051,0.743665635585785,-0.00129488680977374,-0.888734400272369,0.458420634269714,0.00571701768785715,-0.999931693077087,-0.0101942336186767,0.0655759945511818,-0.996207714080811,0.0571834556758404,0.163204148411751,-0.824093818664551,0.542433202266693,-0.00129488680977374,-0.888734400272369,0.458420634269714,0.525104641914368,-0.419060587882996,0.740711390972137,0.0940685495734215,-0.732769310474396,0.673943758010864,-0.474541693925858,-0.67278927564621,0.567595541477203,0.13062296807766,0.400416731834412,0.906975269317627,0.121470481157303,-0.391699403524399,0.912039756774902,-0.117666520178318,-0.734499752521515,-0.668329775333405,-0.0952682122588158,-0.943798363208771,-0.316494256258011,0.0417160429060459,-0.96068263053894,-0.274497121572495,0.0705975443124771,-0.761587023735046,-0.644205927848816,-0.05385497584939,-0.996109485626221,0.06975357234478,0.0655759945511818,-0.996207714080811,0.0571834556758404,0.0417160429060459,-0.96068263053894,-0.274497121572495,-0.0952682122588158,-0.943798363208771,-0.316494256258011,0.680179119110107,0.270307511091232,0.681388378143311,-0.111705176532269,0.976534187793732,0.18412746489048,0.0118562933057547,0.974313676357269,0.224883005023003,0.714891254901886,0.201140508055687,0.669681310653687,0.0228955876082182,0.892617464065552,0.450233042240143,0.143662974238396,0.945594608783722,0.29191067814827,0.00479412823915482,0.900386512279511,0.435064554214478,0.221466824412346,0.900687992572784,0.373782753944397,\n0.0228955876082182,0.892617464065552,0.450233042240143,0.221466824412346,0.900687992572784,0.373782753944397,0.256553143262863,0.759260475635529,0.598083674907684,0.026754243299365,0.843723058700562,0.53611159324646,-0.0965566337108612,0.382317036390305,0.918972492218018,0.119953289628029,0.283690631389618,0.951383650302887,0.134373739361763,0.867044448852539,0.479768335819244,0.104800805449486,0.884988248348236,0.453665733337402,0.134373739361763,0.867044448852539,0.479768335819244,0.138274729251862,0.981688380241394,-0.131026938557625,0.234877377748489,0.967058181762695,0.0981385260820389,0.104800805449486,0.884988248348236,0.453665733337402,0.00479412823915482,0.900386512279511,0.435064554214478,-0.194994285702705,0.859172344207764,0.473075121641159,0.161482572555542,0.960672616958618,0.225901573896408,0.221466824412346,0.900687992572784,0.373782753944397,-0.258119583129883,0.745032370090485,0.615061819553375,0.0118562933057547,0.974313676357269,0.224883005023003,0.161482572555542,0.960672616958618,0.225901573896408,-0.194994285702705,0.859172344207764,0.473075121641159,-0.111705176532269,0.976534187793732,0.18412746489048,0.118274427950382,0.894158720970154,0.431846410036087,0.161482572555542,0.960672616958618,0.225901573896408,0.0118562933057547,0.974313676357269,0.224883005023003,0.256553143262863,0.759260475635529,0.598083674907684,0.221466824412346,0.900687992572784,0.373782753944397,0.161482572555542,0.960672616958618,0.225901573896408,0.118274427950382,0.894158720970154,0.431846410036087,0.357361167669296,0.242811009287834,0.901851356029511,0.578032433986664,0.306231528520584,0.756373405456543,0.195265397429466,0.864439308643341,0.463266789913177,0.149628981947899,0.846252083778381,0.511339902877808,0.195265397429466,0.864439308643341,0.463266789913177,-0.357527554035187,0.888932764530182,-0.286308616399765,-0.0952406078577042,0.956162750720978,-0.276915192604065,0.149628981947899,0.846252083778381,0.511339902877808,0.802525162696838,0.518118143081665,0.295815676450729,0.466519266366959,0.882316112518311,0.0622739568352699,\n0.237646877765656,0.914831399917603,0.326507955789566,0.700553953647614,0.463066458702087,0.542949020862579,-0.427035480737686,0.790110290050507,-0.439734488725662,-0.457484602928162,0.835335671901703,-0.304831385612488,0.237646877765656,0.914831399917603,0.326507955789566,0.466519266366959,0.882316112518311,0.0622739568352699,-0.357527554035187,0.888932764530182,-0.286308616399765,0.195265397429466,0.864439308643341,0.463266789913177,0.237646877765656,0.914831399917603,0.326507955789566,-0.457484602928162,0.835335671901703,-0.304831385612488,0.578032433986664,0.306231528520584,0.756373405456543,0.700553953647614,0.463066458702087,0.542949020862579,0.237646877765656,0.914831399917603,0.326507955789566,0.195265397429466,0.864439308643341,0.463266789913177,-0.598032653331757,0.367280632257462,-0.712363600730896,-0.611508309841156,0.264030992984772,-0.7458855509758,-0.462323904037476,0.371266037225723,-0.805244147777557,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.611508309841156,0.264030992984772,-0.7458855509758,-0.593829154968262,0.197740450501442,-0.77991384267807,-0.421522259712219,0.257120847702026,-0.869602143764496,-0.462323904037476,0.371266037225723,-0.805244147777557,0.897598922252655,-0.0851877480745316,0.432503432035446,0.534866094589233,0.53300929069519,0.655606091022491,0.970540165901184,0.124821022152901,0.206086173653603,0.971762239933014,-0.143596902489662,0.187237858772278,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.0532905422151089,-0.321431696414948,0.945432066917419,0.542791187763214,-0.0487677082419395,0.838450610637665,0.477409869432449,-0.0182194709777832,0.878491818904877,0.0532905422151089,-0.321431696414948,0.945432066917419,0.124305054545403,-0.308796167373657,0.942970395088196,0.507363021373749,-0.115291275084019,0.853985190391541,0.542791187763214,-0.0487677082419395,0.838450610637665,0.927076876163483,-0.29800683259964,0.227421119809151,0.960171759128571,-0.181689232587814,0.212271526455879,0.887619376182556,-0.256067276000977,0.382833331823349,0.875984609127045,-0.341396063566208,0.340734094381332,\n0.205060333013535,0.0685160234570503,0.976348161697388,0.469725012779236,0.301579147577286,0.829703807830811,0.328607112169266,0.0718188062310219,0.941732108592987,0.209787964820862,-0.0149007942527533,0.977633357048035,0.328607112169266,0.0718188062310219,0.941732108592987,0.499466627836227,0.169172704219818,0.849655032157898,0.495325356721878,-0.15430523455143,0.854893386363983,0.32480525970459,-0.177078545093536,0.929055869579315,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.806693911552429,-0.123899839818478,0.577835381031036,0.839345693588257,-0.00945493672043085,0.543515801429749,0.936820507049561,0.0892298817634583,0.338238596916199,0.733202934265137,-0.122967794537544,0.668799161911011,0.785013139247894,0.0451312512159348,0.617832958698273,0.839345693588257,-0.00945493672043085,0.543515801429749,0.806693911552429,-0.123899839818478,0.577835381031036,0.679168462753296,-0.108902141451836,0.725858509540558,0.936820507049561,0.0892298817634583,0.338238596916199,0.839345693588257,-0.00945493672043085,0.543515801429749,0.52197939157486,-0.246480882167816,0.816568851470947,0.314269214868546,-0.177054598927498,0.932677090167999,0.679168462753296,-0.108902141451836,0.725858509540558,0.52197939157486,-0.246480882167816,0.816568851470947,0.0854972749948502,-0.343144297599792,0.935383439064026,0.0854972749948502,-0.343144297599792,0.935383439064026,0.52197939157486,-0.246480882167816,0.816568851470947,0.36207702755928,0.0357636697590351,0.931461870670319,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.767594814300537,-0.318948030471802,0.555940985679626,0.572291314601898,-0.52212518453598,0.632351100444794,0.743626773357391,-0.236951321363449,0.625198543071747,0.883507072925568,-0.0658736377954483,0.463762849569321,0.767594814300537,-0.318948030471802,0.555940985679626,0.883507072925568,-0.0658736377954483,0.463762849569321,0.922792911529541,0.0174659602344036,0.384900212287903,0.91918009519577,-0.0705135017633438,0.387473553419113,0.683746695518494,-0.463673830032349,0.563468754291534,0.767594814300537,-0.318948030471802,0.555940985679626,\n0.91918009519577,-0.0705135017633438,0.387473553419113,0.813478171825409,-0.273027837276459,0.513526141643524,0.767594814300537,-0.318948030471802,0.555940985679626,0.683746695518494,-0.463673830032349,0.563468754291534,0.629647791385651,-0.52997088432312,0.568044483661652,0.572291314601898,-0.52212518453598,0.632351100444794,0.939345419406891,-0.108932219445705,0.325213760137558,0.950795531272888,-0.131767466664314,0.280401825904846,0.964455902576447,-0.157870531082153,0.211900100111961,0.964605271816254,-0.126861244440079,0.231177195906639,0.93361908197403,-0.0509388744831085,0.354627430438995,0.939345419406891,-0.108932219445705,0.325213760137558,0.964605271816254,-0.126861244440079,0.231177195906639,0.961285889148712,-0.0557491593062878,0.269854545593262,0.821834087371826,-0.135336369276047,0.55341911315918,0.939345419406891,-0.108932219445705,0.325213760137558,0.93361908197403,-0.0509388744831085,0.354627430438995,0.800939977169037,-0.0900113806128502,0.59194016456604,0.883507072925568,-0.0658736377954483,0.463762849569321,0.743626773357391,-0.236951321363449,0.625198543071747,0.775663673877716,0.0339613817632198,0.630232095718384,0.817228376865387,-0.0154423741623759,0.576107025146484,0.458424359560013,-0.261700868606567,0.849329054355621,0.540978610515594,-0.216916099190712,0.812582015991211,0.852472126483917,-0.133455187082291,0.505451321601868,0.821834087371826,-0.135336369276047,0.55341911315918,0.458424359560013,-0.261700868606567,0.849329054355621,0.821834087371826,-0.135336369276047,0.55341911315918,0.800939977169037,-0.0900113806128502,0.59194016456604,0.373029977083206,-0.317807883024216,0.871691942214966,0.288555771112442,-0.2911037504673,0.912137150764465,0.373029977083206,-0.317807883024216,0.871691942214966,0.800939977169037,-0.0900113806128502,0.59194016456604,0.680521726608276,-0.105455316603184,0.725099503993988,0.288555771112442,-0.2911037504673,0.912137150764465,0.680521726608276,-0.105455316603184,0.725099503993988,0.54023802280426,-0.148879259824753,0.828237771987915,0.189583629369736,-0.286395132541656,0.939167618751526,\n0.314269214868546,-0.177054598927498,0.932677090167999,0.629274904727936,-0.103665113449097,0.770238041877747,0.890204846858978,0.0921151489019394,0.446150302886963,0.679168462753296,-0.108902141451836,0.725858509540558,0.629274904727936,-0.103665113449097,0.770238041877747,0.874416053295136,-0.00546242296695709,0.485146045684814,0.890166699886322,0.437690794467926,-0.12660938501358,0.890204846858978,0.0921151489019394,0.446150302886963,0.874416053295136,-0.00546242296695709,0.485146045684814,0.629274904727936,-0.103665113449097,0.770238041877747,0.560746312141418,-0.00312843848951161,0.827981770038605,0.787108600139618,0.00810690317302942,0.616761207580566,0.314269214868546,-0.177054598927498,0.932677090167999,0.430652797222137,0.0691945105791092,0.89986127614975,0.560746312141418,-0.00312843848951161,0.827981770038605,0.629274904727936,-0.103665113449097,0.770238041877747,0.536631107330322,0.258791983127594,0.803152441978455,0.649454653263092,0.203223869204521,0.732740581035614,0.560746312141418,-0.00312843848951161,0.827981770038605,0.430652797222137,0.0691945105791092,0.89986127614975,0.793840944766998,0.179479137063026,0.581036806106567,0.787108600139618,0.00810690317302942,0.616761207580566,0.560746312141418,-0.00312843848951161,0.827981770038605,0.649454653263092,0.203223869204521,0.732740581035614,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.936820507049561,0.0892298817634583,0.338238596916199,0.97348940372467,0.2094656676054,0.0918834507465363,0.744540750980377,0.353585213422775,-0.566247820854187,0.679168462753296,-0.108902141451836,0.725858509540558,0.890204846858978,0.0921151489019394,0.446150302886963,0.97348940372467,0.2094656676054,0.0918834507465363,0.936820507049561,0.0892298817634583,0.338238596916199,0.890166699886322,0.437690794467926,-0.12660938501358,0.744540750980377,0.353585213422775,-0.566247820854187,0.97348940372467,0.2094656676054,0.0918834507465363,0.890204846858978,0.0921151489019394,0.446150302886963,0.964605271816254,-0.126861244440079,0.231177195906639,0.964455902576447,-0.157870531082153,0.211900100111961,\n0.896426856517792,-0.172908827662468,0.408070415258408,0.901179313659668,-0.204281270503998,0.382289171218872,0.887543320655823,-0.171314582228661,0.427689343690872,0.961285889148712,-0.0557491593062878,0.269854545593262,0.964605271816254,-0.126861244440079,0.231177195906639,0.901179313659668,-0.204281270503998,0.382289171218872,0.793840944766998,0.179479137063026,0.581036806106567,0.649454653263092,0.203223869204521,0.732740581035614,0.651595652103424,0.352775752544403,0.671544790267944,0.776918292045593,0.306892603635788,0.549740731716156,0.536631107330322,0.258791983127594,0.803152441978455,0.469725012779236,0.301579147577286,0.829703807830811,0.651595652103424,0.352775752544403,0.671544790267944,0.649454653263092,0.203223869204521,0.732740581035614,0.333709418773651,0.169013321399689,0.927400946617126,0.651595652103424,0.352775752544403,0.671544790267944,0.469725012779236,0.301579147577286,0.829703807830811,0.205060333013535,0.0685160234570503,0.976348161697388,0.288555771112442,-0.2911037504673,0.912137150764465,0.288461953401566,-0.251531571149826,0.923862278461456,0.345462441444397,-0.298967152833939,0.889536023139954,0.373029977083206,-0.317807883024216,0.871691942214966,0.295946687459946,-0.143637612462044,0.944343090057373,0.124305054545403,-0.308796167373657,0.942970395088196,0.0532905422151089,-0.321431696414948,0.945432066917419,0.103208005428314,-0.00969436671584845,0.994612574577332,0.103208005428314,-0.00969436671584845,0.994612574577332,0.0532905422151089,-0.321431696414948,0.945432066917419,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.36207702755928,0.0357636697590351,0.931461870670319,0.765106797218323,-0.350072890520096,0.540426254272461,0.875984609127045,-0.341396063566208,0.340734094381332,0.887619376182556,-0.256067276000977,0.382833331823349,0.75313264131546,-0.288527101278305,0.591221868991852,0.922792911529541,0.0174659602344036,0.384900212287903,0.93361908197403,-0.0509388744831085,0.354627430438995,0.961285889148712,-0.0557491593062878,0.269854545593262,0.91918009519577,-0.0705135017633438,0.387473553419113,\n0.458424359560013,-0.261700868606567,0.849329054355621,0.373029977083206,-0.317807883024216,0.871691942214966,0.345462441444397,-0.298967152833939,0.889536023139954,0.421490222215652,-0.217597857117653,0.880339205265045,0.458424359560013,-0.261700868606567,0.849329054355621,0.421490222215652,-0.217597857117653,0.880339205265045,0.501314342021942,-0.180266559123993,0.846278846263886,0.540978610515594,-0.216916099190712,0.812582015991211,0.775663673877716,0.0339613817632198,0.630232095718384,0.743626773357391,-0.236951321363449,0.625198543071747,0.527478218078613,-0.385366201400757,0.757139086723328,0.702920734882355,-0.00120963365770876,0.711267173290253,0.314269214868546,-0.177054598927498,0.932677090167999,0.0854972749948502,-0.343144297599792,0.935383439064026,0.322372585535049,-0.0660212859511375,0.944307744503021,0.322372585535049,-0.0660212859511375,0.944307744503021,0.0854972749948502,-0.343144297599792,0.935383439064026,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.477409869432449,-0.0182194709777832,0.878491818904877,0.314269214868546,-0.177054598927498,0.932677090167999,0.322372585535049,-0.0660212859511375,0.944307744503021,0.508330583572388,0.166116118431091,0.844988405704498,0.430652797222137,0.0691945105791092,0.89986127614975,0.430652797222137,0.0691945105791092,0.89986127614975,0.508330583572388,0.166116118431091,0.844988405704498,0.499466627836227,0.169172704219818,0.849655032157898,0.536631107330322,0.258791983127594,0.803152441978455,0.668687582015991,0.158593982458115,0.726432919502258,0.477409869432449,-0.0182194709777832,0.878491818904877,0.542791187763214,-0.0487677082419395,0.838450610637665,0.702920734882355,-0.00120963365770876,0.711267173290253,0.85576856136322,-0.00803003925830126,0.517296552658081,0.922792911529541,0.0174659602344036,0.384900212287903,0.883507072925568,-0.0658736377954483,0.463762849569321,0.817228376865387,-0.0154423741623759,0.576107025146484,0.821834087371826,-0.135336369276047,0.55341911315918,0.852472126483917,-0.133455187082291,0.505451321601868,0.950795531272888,-0.131767466664314,0.280401825904846,\n0.939345419406891,-0.108932219445705,0.325213760137558,0.813478171825409,-0.273027837276459,0.513526141643524,0.91918009519577,-0.0705135017633438,0.387473553419113,0.961285889148712,-0.0557491593062878,0.269854545593262,0.887543320655823,-0.171314582228661,0.427689343690872,0.927076876163483,-0.29800683259964,0.227421119809151,0.926659166812897,-0.245477139949799,0.284681916236877,0.966324627399445,-0.156342566013336,0.204386278986931,0.960171759128571,-0.181689232587814,0.212271526455879,0.966324627399445,-0.156342566013336,0.204386278986931,0.926659166812897,-0.245477139949799,0.284681916236877,0.750554323196411,-0.229917243123055,0.619521021842957,0.809566378593445,-0.159671008586884,0.564895987510681,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.915560901165009,-0.141839787364006,0.376337260007858,0.820341229438782,-0.113342881202698,0.560529828071594,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.956220626831055,-0.152332276105881,0.249873846769333,0.915560901165009,-0.141839787364006,0.376337260007858,0.362627446651459,-0.180693462491035,0.914249002933502,0.570054233074188,-0.200027942657471,0.796885788440704,0.400608420372009,-0.480024576187134,0.780441761016846,0.11539563536644,-0.528798937797546,0.840865969657898,0.350974529981613,-0.540442049503326,0.764682471752167,0.560910940170288,-0.546258211135864,0.622077882289886,0.432139188051224,-0.378973364830017,0.818312227725983,0.461174815893173,-0.519026458263397,0.719673037528992,0.432139188051224,-0.378973364830017,0.818312227725983,0.416703939437866,-0.0255245417356491,0.908683836460114,0.56849592924118,-0.125116035342216,0.813116490840912,0.461174815893173,-0.519026458263397,0.719673037528992,0.0348379723727703,0.239972576498985,0.970154345035553,0.026632534340024,0.124120466411114,0.991909682750702,-0.147914990782738,0.17213037610054,0.973905682563782,0.00455546798184514,0.298394352197647,0.954431772232056,0.809566378593445,-0.159671008586884,0.564895987510681,\n0.750554323196411,-0.229917243123055,0.619521021842957,0.705349028110504,-0.217919707298279,0.674532234668732,0.634909212589264,-0.137729376554489,0.760211110115051,0.800201892852783,0.430362582206726,0.417690068483353,0.793976366519928,0.302302360534668,0.527460694313049,0.903869867324829,0.198627322912216,0.37890163064003,0.854240536689758,0.355053037405014,0.379750460386276,0.793774306774139,0.385858178138733,0.470144480466843,0.843018114566803,0.354378879070282,0.404643177986145,0.800201892852783,0.430362582206726,0.417690068483353,0.854240536689758,0.355053037405014,0.379750460386276,0.595219552516937,0.51872980594635,0.613704323768616,0.800201892852783,0.430362582206726,0.417690068483353,0.843018114566803,0.354378879070282,0.404643177986145,0.688724040985107,0.428849041461945,0.584591865539551,0.536214470863342,0.394264131784439,0.746344327926636,0.793976366519928,0.302302360534668,0.527460694313049,0.800201892852783,0.430362582206726,0.417690068483353,0.595219552516937,0.51872980594635,0.613704323768616,0.854240536689758,0.355053037405014,0.379750460386276,0.903869867324829,0.198627322912216,0.37890163064003,0.855352699756622,0.226547658443451,0.46588408946991,0.857260406017303,0.312566876411438,0.409153461456299,0.688724040985107,0.428849041461945,0.584591865539551,0.728551387786865,0.287864476442337,0.621568083763123,0.278584688901901,0.430597722530365,0.858473181724548,0.279262810945511,0.544022977352142,0.791234016418457,0.718716561794281,0.339281320571899,0.60690575838089,0.27374255657196,0.526692390441895,0.804773390293121,0.278584688901901,0.430597722530365,0.858473181724548,0.728551387786865,0.287864476442337,0.621568083763123,0.0571579374372959,0.555576980113983,0.829498171806335,0.0507387444376946,0.459851264953613,0.886545181274414,0.278584688901901,0.430597722530365,0.858473181724548,0.27374255657196,0.526692390441895,0.804773390293121,0.0581676289439201,0.571192860603333,0.818752288818359,0.279262810945511,0.544022977352142,0.791234016418457,0.278584688901901,0.430597722530365,0.858473181724548,\n0.0507387444376946,0.459851264953613,0.886545181274414,0.402090311050415,-0.284287929534912,0.870346903800964,0.237495303153992,-0.275904625654221,0.931382119655609,0.332773357629776,-0.801452815532684,0.49692577123642,0.353568494319916,-0.776771426200867,0.521167457103729,0.346010982990265,0.0731605663895607,0.935373663902283,0.0857556685805321,0.213776871562004,0.973111212253571,0.237495303153992,-0.275904625654221,0.931382119655609,0.402090311050415,-0.284287929534912,0.870346903800964,0.237495303153992,-0.275904625654221,0.931382119655609,0.0857556685805321,0.213776871562004,0.973111212253571,0.174916133284569,0.190565213561058,0.965965449810028,0.173318073153496,-0.274096310138702,0.945955634117126,0.332773357629776,-0.801452815532684,0.49692577123642,0.237495303153992,-0.275904625654221,0.931382119655609,0.173318073153496,-0.274096310138702,0.945955634117126,0.198447287082672,-0.827921032905579,0.524562180042267,0.557120144367218,0.203072413802147,0.805219650268555,0.663587033748627,0.242647290229797,0.707654237747192,0.594232082366943,0.290724605321884,0.749911665916443,0.428730636835098,0.26745393872261,0.862935900688171,0.481910198926926,0.246677935123444,0.840780913829803,0.562969863414764,0.141692653298378,0.81424081325531,0.557120144367218,0.203072413802147,0.805219650268555,0.481910198926926,0.246677935123444,0.840780913829803,0.508710622787476,0.190386489033699,0.839622795581818,0.471029788255692,0.166954964399338,0.86617374420166,0.450006783008575,0.263622760772705,0.853227376937866,0.557120144367218,0.203072413802147,0.805219650268555,0.562969863414764,0.141692653298378,0.81424081325531,0.556747674942017,0.38243293762207,0.737412452697754,0.663587033748627,0.242647290229797,0.707654237747192,0.557120144367218,0.203072413802147,0.805219650268555,0.450006783008575,0.263622760772705,0.853227376937866,0.465027630329132,-0.875830411911011,-0.129113703966141,0.470402508974075,-0.871353209018707,-0.139517307281494,0.282156497240067,-0.915852665901184,-0.285659939050674,0.28289994597435,-0.924392461776733,-0.255863577127457,\n0.600540995597839,-0.799374520778656,-0.0187329761683941,0.470402508974075,-0.871353209018707,-0.139517307281494,0.465027630329132,-0.875830411911011,-0.129113703966141,0.638466238975525,-0.769491136074066,0.0156274978071451,-0.0377323105931282,-0.656355738639832,0.753507435321808,0.0476435497403145,-0.676355302333832,0.73503303527832,0.101414501667023,-0.396623194217682,0.912362396717072,-0.0135245211422443,-0.380902349948883,0.924516320228577,0.0903236120939255,-0.645915448665619,0.758046746253967,0.226432472467422,-0.391454815864563,0.891903281211853,0.101414501667023,-0.396623194217682,0.912362396717072,0.0476435497403145,-0.676355302333832,0.73503303527832,0.315978825092316,0.0904445722699165,0.944445431232452,0.178787171840668,0.10878062993288,0.977855801582336,0.101414501667023,-0.396623194217682,0.912362396717072,0.226432472467422,-0.391454815864563,0.891903281211853,0.0226862858980894,0.138102903962135,0.990158021450043,-0.0135245211422443,-0.380902349948883,0.924516320228577,0.101414501667023,-0.396623194217682,0.912362396717072,0.178787171840668,0.10878062993288,0.977855801582336,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.993429064750671,-0.113890402019024,0.0113009223714471,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.698544383049011,-0.714900195598602,0.0308788027614355,0.600540995597839,-0.799374520778656,-0.0187329761683941,0.638466238975525,-0.769491136074066,0.0156274978071451,0.727549016475677,-0.679640352725983,0.0936024785041809,0.807879209518433,-0.580146849155426,0.103734038770199,\n0.698544383049011,-0.714900195598602,0.0308788027614355,0.727549016475677,-0.679640352725983,0.0936024785041809,0.772367715835571,-0.599683940410614,0.209349811077118,0.744709670543671,0.422629773616791,0.516518652439117,0.524678170681,0.559116363525391,0.641951441764832,0.623485326766968,0.449957937002182,0.639377772808075,0.773433268070221,0.347118884325027,0.53038614988327,0.956220626831055,-0.152332276105881,0.249873846769333,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.993429064750671,-0.113890402019024,0.0113009223714471,0.976429760456085,-0.14936164021492,0.155807659029961,0.93977153301239,0.0100719593465328,0.341654866933823,0.947793483734131,-0.0109208915382624,0.318697780370712,0.949501037597656,-0.133338466286659,0.284022271633148,0.950774133205414,-0.180742517113686,0.25171560049057,0.94478839635849,-0.0280621573328972,0.326477229595184,0.93977153301239,0.0100719593465328,0.341654866933823,0.950774133205414,-0.180742517113686,0.25171560049057,0.949546575546265,-0.188553437590599,0.250617027282715,0.921219646930695,-0.0589233264327049,0.384554862976074,0.93503212928772,0.00599651364609599,0.354512244462967,0.93977153301239,0.0100719593465328,0.341654866933823,0.94478839635849,-0.0280621573328972,0.326477229595184,0.961935639381409,0.00657567568123341,0.273196935653687,0.947793483734131,-0.0109208915382624,0.318697780370712,0.93977153301239,0.0100719593465328,0.341654866933823,0.93503212928772,0.00599651364609599,0.354512244462967,0.934174954891205,-0.332788705825806,0.128719761967659,0.916550815105438,-0.369929283857346,0.151943743228912,0.950774133205414,-0.180742517113686,0.25171560049057,0.949501037597656,-0.133338466286659,0.284022271633148,0.900704562664032,-0.383264392614365,0.204547420144081,0.949546575546265,-0.188553437590599,0.250617027282715,0.950774133205414,-0.180742517113686,0.25171560049057,0.916550815105438,-0.369929283857346,0.151943743228912,0.346010982990265,0.0731605663895607,0.935373663902283,0.316976845264435,0.303443849086761,0.898580849170685,0.109994232654572,0.335926622152328,0.935443520545959,\n0.0857556685805321,0.213776871562004,0.973111212253571,0.109994232654572,0.335926622152328,0.935443520545959,0.316976845264435,0.303443849086761,0.898580849170685,0.37644562125206,0.38054347038269,0.844674706459045,0.33416548371315,0.26105335354805,0.905640423297882,0.410660326480865,0.0589907094836235,0.909878134727478,0.280919551849365,0.197001457214355,0.939294755458832,0.109994232654572,0.335926622152328,0.935443520545959,0.33416548371315,0.26105335354805,0.905640423297882,0.0857556685805321,0.213776871562004,0.973111212253571,0.109994232654572,0.335926622152328,0.935443520545959,0.280919551849365,0.197001457214355,0.939294755458832,0.174916133284569,0.190565213561058,0.965965449810028,0.174435555934906,-0.932725489139557,-0.315587401390076,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.0610353648662567,-0.966653764247894,-0.248707070946693,0.200176298618317,-0.953467607498169,-0.225452929735184,0.28289994597435,-0.924392461776733,-0.255863577127457,0.174435555934906,-0.932725489139557,-0.315587401390076,0.200176298618317,-0.953467607498169,-0.225452929735184,0.304112553596497,-0.921620965003967,-0.241102367639542,0.174435555934906,-0.932725489139557,-0.315587401390076,0.28289994597435,-0.924392461776733,-0.255863577127457,0.282156497240067,-0.915852665901184,-0.285659939050674,0.168268576264381,-0.926923274993896,-0.335408568382263,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.174435555934906,-0.932725489139557,-0.315587401390076,0.168268576264381,-0.926923274993896,-0.335408568382263,0.0587443448603153,-0.922947645187378,-0.380416542291641,0.591701328754425,-0.0445454604923725,0.804925620555878,0.56849592924118,-0.125116035342216,0.813116490840912,0.44965198636055,0.140096634626389,0.882148504257202,0.583943843841553,0.131935343146324,0.801001012325287,0.414541780948639,0.400993496179581,0.816920638084412,0.611575484275818,0.314111411571503,0.726160764694214,0.610058009624481,0.18056558072567,0.771508455276489,0.491490423679352,0.244152218103409,0.835958659648895,0.637141883373261,-0.082910381257534,0.766274154186249,\n0.602697968482971,-0.102753959596157,0.791325986385345,0.830796539783478,-0.141607835888863,0.538260519504547,0.846625864505768,-0.12819692492485,0.516517341136932,0.602697968482971,-0.102753959596157,0.791325986385345,0.542096614837646,-0.0831166654825211,0.836195468902588,0.797767400741577,-0.104994267225266,0.593753576278687,0.830796539783478,-0.141607835888863,0.538260519504547,0.851511597633362,-0.5011847615242,0.154083982110024,0.664332985877991,-0.312286198139191,0.679072141647339,0.642606198787689,-0.0799093768000603,0.762018263339996,0.733202934265137,-0.122967794537544,0.668799161911011,0.664332985877991,-0.312286198139191,0.679072141647339,0.591701328754425,-0.0445454604923725,0.804925620555878,0.568371534347534,0.0187626089900732,0.822558045387268,0.642606198787689,-0.0799093768000603,0.762018263339996,0.329291462898254,-0.460140645503998,0.824522733688354,0.437306433916092,-0.371932566165924,0.818797469139099,0.533053755760193,0.0411353260278702,0.845080852508545,0.351316899061203,-0.0729207322001457,0.933412551879883,0.292688071727753,-0.580336809158325,0.759962379932404,0.329291462898254,-0.460140645503998,0.824522733688354,0.351316899061203,-0.0729207322001457,0.933412551879883,0.335490047931671,-0.171642184257507,0.926275014877319,0.490798503160477,-0.859692454338074,-0.141582772135735,0.523316979408264,-0.825681805610657,-0.210686638951302,0.671372294425964,-0.724817991256714,-0.15459018945694,0.645513415336609,-0.755210697650909,-0.113882429897785,0.537862658500671,-0.839294493198395,-0.0793002098798752,0.499172002077103,-0.857490539550781,-0.124648600816727,0.490798503160477,-0.859692454338074,-0.141582772135735,0.645513415336609,-0.755210697650909,-0.113882429897785,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.630890548229218,-0.774750173091888,0.0417049825191498,0.490798503160477,-0.859692454338074,-0.141582772135735,0.501666784286499,-0.849441289901733,-0.163646027445793,0.435357719659805,-0.872423410415649,-0.222128495573998,0.490798503160477,-0.859692454338074,-0.141582772135735,\n0.499172002077103,-0.857490539550781,-0.124648600816727,0.501666784286499,-0.849441289901733,-0.163646027445793,0.630890548229218,-0.774750173091888,0.0417049825191498,0.523316979408264,-0.825681805610657,-0.210686638951302,0.490798503160477,-0.859692454338074,-0.141582772135735,0.965503036975861,0.206421509385109,0.158726423978806,0.967272758483887,0.0499838180840015,0.248767033219337,0.980852127075195,0.00218713283538818,0.194741636514664,0.96669465303421,0.168093785643578,0.192991986870766,0.980899035930634,0.0846881344914436,0.175114318728447,0.975037813186646,0.14565335214138,0.167589843273163,0.965288519859314,0.151292905211449,0.212904900312424,0.965503036975861,0.206421509385109,0.158726423978806,0.980899035930634,0.0846881344914436,0.175114318728447,0.974559843540192,0.0402764715254307,0.220478907227516,0.926979184150696,-0.0986248403787613,0.36191537976265,0.967272758483887,0.0499838180840015,0.248767033219337,0.965503036975861,0.206421509385109,0.158726423978806,0.965288519859314,0.151292905211449,0.212904900312424,0.945337653160095,-0.174788698554039,0.275292009115219,0.947748720645905,-0.180222257971764,0.263234436511993,0.936089217662811,-0.214836105704308,0.278536230325699,0.941718637943268,-0.180898189544678,0.283622801303864,0.947748720645905,-0.180222257971764,0.263234436511993,0.96362441778183,-0.210319370031357,0.16490513086319,0.949846565723419,-0.197867274284363,0.242157250642776,0.936089217662811,-0.214836105704308,0.278536230325699,0.9190753698349,-0.11298330873251,0.377538323402405,0.935290277004242,-0.181792959570885,0.303617179393768,0.937723875045776,-0.0835999995470047,0.337171912193298,0.909473538398743,-0.0684049502015114,0.410095930099487,0.949846565723419,-0.197867274284363,0.242157250642776,0.964770019054413,-0.0907266810536385,0.246956452727318,0.937723875045776,-0.0835999995470047,0.337171912193298,0.935290277004242,-0.181792959570885,0.303617179393768,0.961935639381409,0.00657567568123341,0.273196935653687,0.93503212928772,0.00599651364609599,0.354512244462967,0.937723875045776,-0.0835999995470047,0.337171912193298,\n0.964770019054413,-0.0907266810536385,0.246956452727318,0.921219646930695,-0.0589233264327049,0.384554862976074,0.909473538398743,-0.0684049502015114,0.410095930099487,0.937723875045776,-0.0835999995470047,0.337171912193298,0.93503212928772,0.00599651364609599,0.354512244462967,0.684517562389374,-0.439017295837402,0.581978976726532,0.689838171005249,-0.617681860923767,0.377614080905914,0.657656788825989,-0.727221310138702,0.196562394499779,0.742792665958405,-0.550313711166382,0.381331622600555,0.689838171005249,-0.617681860923767,0.377614080905914,0.693672001361847,-0.686315536499023,0.218609541654587,0.639384806156158,-0.761013865470886,0.109749406576157,0.657656788825989,-0.727221310138702,0.196562394499779,0.642289221286774,0.115071445703506,0.757775127887726,0.698984086513519,0.246289730072021,0.671388566493988,0.450006783008575,0.263622760772705,0.853227376937866,0.471029788255692,0.166954964399338,0.86617374420166,0.698984086513519,0.246289730072021,0.671388566493988,0.720846891403198,0.393656641244888,0.570450901985168,0.556747674942017,0.38243293762207,0.737412452697754,0.450006783008575,0.263622760772705,0.853227376937866,0.570054233074188,-0.200027942657471,0.796885788440704,0.683284997940063,0.154697299003601,0.713575720787048,0.702580511569977,0.00276018492877483,0.711598932743073,0.681784629821777,-0.285219341516495,0.673661351203918,0.550090253353119,-0.357467710971832,0.754730105400085,0.719567954540253,-0.322717130184174,0.614878535270691,0.765106797218323,-0.350072890520096,0.540426254272461,0.613220632076263,-0.373373091220856,0.696098387241364,0.681784629821777,-0.285219341516495,0.673661351203918,0.702580511569977,0.00276018492877483,0.711598932743073,0.550090253353119,-0.357467710971832,0.754730105400085,0.629800915718079,-0.358788877725601,0.68892765045166,0.874416053295136,-0.00546242296695709,0.485146045684814,0.908188223838806,0.15894940495491,0.387206882238388,0.885035216808319,0.393218964338303,0.249181613326073,0.854046881198883,0.485713124275208,0.186243653297424,0.890166699886322,0.437690794467926,-0.12660938501358,\n0.163330301642418,0.241669088602066,0.956514120101929,0.0931223928928375,0.201938465237617,0.97496110200882,0.16256257891655,0.269552499055862,0.949165344238281,0.245724827051163,0.276487857103348,0.929071426391602,0.0931223928928375,0.201938465237617,0.97496110200882,0.0272070206701756,0.178279355168343,0.983603715896606,0.0426242314279079,0.260108649730682,0.964638113975525,0.16256257891655,0.269552499055862,0.949165344238281,0.584166944026947,-0.151799350976944,0.797311663627625,0.618419706821442,-0.127026095986366,0.775513648986816,0.414358675479889,-0.126704558730125,0.901250720024109,0.402891218662262,-0.177310451865196,0.897908508777618,0.567721784114838,-0.411755472421646,0.712845981121063,0.387449771165848,-0.245748713612556,0.888532638549805,0.414358675479889,-0.126704558730125,0.901250720024109,0.618419706821442,-0.127026095986366,0.775513648986816,0.690909028053284,-0.334549605846405,0.640875399112701,0.0780740827322006,-0.57033497095108,0.817693412303925,0.047360323369503,-0.552981853485107,0.831846177577972,0.0903236120939255,-0.645915448665619,0.758046746253967,0.0476435497403145,-0.676355302333832,0.73503303527832,0.0780740827322006,-0.57033497095108,0.817693412303925,0.0476435497403145,-0.676355302333832,0.73503303527832,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.0301125477999449,-0.572418868541718,0.819408237934113,0.630890548229218,-0.774750173091888,0.0417049825191498,0.435357719659805,-0.872423410415649,-0.222128495573998,0.563636422157288,-0.823141872882843,0.0689310654997826,0.623485326766968,0.449957937002182,0.639377772808075,0.524678170681,0.559116363525391,0.641951441764832,0.497093498706818,0.456073582172394,0.738169968128204,0.226432472467422,-0.391454815864563,0.891903281211853,0.0903236120939255,-0.645915448665619,0.758046746253967,0.378649204969406,-0.51500403881073,0.769022524356842,0.488678455352783,-0.257274806499481,0.833668410778046,0.226432472467422,-0.391454815864563,0.891903281211853,0.488678455352783,-0.257274806499481,0.833668410778046,0.558381021022797,0.167118594050407,0.812577426433563,\n0.315978825092316,0.0904445722699165,0.944445431232452,0.70995169878006,-0.557043075561523,0.430896311998367,0.767249822616577,-0.595458924770355,0.23823593556881,0.868513345718384,-0.371388286352158,0.328260958194733,0.821784615516663,-0.261638671159744,0.506177127361298,0.868513345718384,-0.371388286352158,0.328260958194733,0.883809387683868,-0.290479838848114,0.366745710372925,0.792236804962158,-0.0960670188069344,0.602604329586029,0.821784615516663,-0.261638671159744,0.506177127361298,0.218448147177696,-0.859921038150787,0.461320102214813,0.423061966896057,-0.638191282749176,0.643218815326691,0.599736154079437,-0.429048538208008,0.675450921058655,0.462026834487915,-0.814152240753174,0.351692080497742,0.599736154079437,-0.429048538208008,0.675450921058655,0.56849592924118,-0.125116035342216,0.813116490840912,0.591701328754425,-0.0445454604923725,0.804925620555878,0.599736154079437,-0.429048538208008,0.675450921058655,0.423061966896057,-0.638191282749176,0.643218815326691,0.56849592924118,-0.125116035342216,0.813116490840912,0.591701328754425,-0.0445454604923725,0.804925620555878,0.664332985877991,-0.312286198139191,0.679072141647339,0.599736154079437,-0.429048538208008,0.675450921058655,0.851511597633362,-0.5011847615242,0.154083982110024,0.462026834487915,-0.814152240753174,0.351692080497742,0.599736154079437,-0.429048538208008,0.675450921058655,0.664332985877991,-0.312286198139191,0.679072141647339,0.934174954891205,-0.332788705825806,0.128719761967659,0.953670024871826,-0.218769177794456,0.206527322530746,0.945006668567657,-0.308922052383423,0.107375629246235,0.94329446554184,-0.325108468532562,0.0670826062560081,0.938213586807251,-0.216931000351906,0.269622415304184,0.935753345489502,-0.270965844392776,0.225705921649933,0.945006668567657,-0.308922052383423,0.107375629246235,0.953670024871826,-0.218769177794456,0.206527322530746,0.971762239933014,-0.143596902489662,0.187237858772278,0.988696813583374,-0.11085943877697,0.10093978792429,0.945006668567657,-0.308922052383423,0.107375629246235,0.935753345489502,-0.270965844392776,0.225705921649933,\n0.987058341503143,-0.0681737512350082,0.145148620009422,0.94329446554184,-0.325108468532562,0.0670826062560081,0.945006668567657,-0.308922052383423,0.107375629246235,0.988696813583374,-0.11085943877697,0.10093978792429,0.623457431793213,0.0676653161644936,0.778923749923706,0.565106153488159,0.017743531614542,0.824827373027802,0.601098597049713,0.0911194980144501,0.793963313102722,0.655191659927368,0.0146637577563524,0.755320370197296,0.623457431793213,0.0676653161644936,0.778923749923706,0.655191659927368,0.0146637577563524,0.755320370197296,0.633589863777161,-0.0252969916909933,0.773255407810211,0.61975085735321,-0.35027813911438,0.702292025089264,0.690708041191101,-0.0477886833250523,0.721552908420563,0.877371370792389,-0.100216217339039,0.469229310750961,0.794963598251343,-0.434218406677246,0.423659265041351,0.794963598251343,-0.434218406677246,0.423659265041351,0.877371370792389,-0.100216217339039,0.469229310750961,0.894858956336975,-0.0870964974164963,0.437768936157227,0.881620466709137,-0.332029432058334,0.335412949323654,0.0633370503783226,-0.944429814815521,-0.322553485631943,0.0587443448603153,-0.922947645187378,-0.380416542291641,0.168268576264381,-0.926923274993896,-0.335408568382263,0.164555922150612,-0.956649422645569,-0.240298211574554,0.164555922150612,-0.956649422645569,-0.240298211574554,0.168268576264381,-0.926923274993896,-0.335408568382263,0.282156497240067,-0.915852665901184,-0.285659939050674,0.283746033906937,-0.948122382164001,-0.143360316753387,0.44691988825798,-0.179234355688095,0.876434624195099,0.529802799224854,-0.195633217692375,0.825249433517456,0.359973400831223,-0.258122891187668,0.896544337272644,0.312136799097061,-0.241864830255508,0.918733894824982,0.529802799224854,-0.195633217692375,0.825249433517456,0.584166944026947,-0.151799350976944,0.797311663627625,0.402891218662262,-0.177310451865196,0.897908508777618,0.359973400831223,-0.258122891187668,0.896544337272644,0.938213586807251,-0.216931000351906,0.269622415304184,0.953670024871826,-0.218769177794456,0.206527322530746,0.965523362159729,-0.0906704962253571,0.24401530623436,\n0.979475617408752,-0.109372921288013,0.169307827949524,0.934174954891205,-0.332788705825806,0.128719761967659,0.949501037597656,-0.133338466286659,0.284022271633148,0.965523362159729,-0.0906704962253571,0.24401530623436,0.953670024871826,-0.218769177794456,0.206527322530746,0.965523362159729,-0.0906704962253571,0.24401530623436,0.949501037597656,-0.133338466286659,0.284022271633148,0.947793483734131,-0.0109208915382624,0.318697780370712,0.987097263336182,-0.0312144737690687,0.157049849629402,0.979475617408752,-0.109372921288013,0.169307827949524,0.965523362159729,-0.0906704962253571,0.24401530623436,0.987097263336182,-0.0312144737690687,0.157049849629402,0.995871722698212,-0.0808055028319359,0.041352104395628,0.55342048406601,0.140735372900963,0.820925891399384,0.562969863414764,0.141692653298378,0.81424081325531,0.508710622787476,0.190386489033699,0.839622795581818,0.503296196460724,0.0546823143959045,0.862382054328918,0.498867928981781,0.236602708697319,0.833756506443024,0.55342048406601,0.140735372900963,0.820925891399384,0.33416548371315,0.26105335354805,0.905640423297882,0.37644562125206,0.38054347038269,0.844674706459045,0.630171060562134,-0.220097869634628,0.744608163833618,0.523068964481354,-0.400331109762192,0.752418637275696,0.613220632076263,-0.373373091220856,0.696098387241364,0.662703216075897,-0.235535204410553,0.710878074169159,0.270446568727493,-0.724654376506805,0.633825421333313,0.586388051509857,-0.415063470602036,0.695608615875244,0.406590580940247,-0.393400549888611,0.824572682380676,0.0997758805751801,-0.76704877614975,0.633782982826233,0.437306433916092,-0.371932566165924,0.818797469139099,0.406590580940247,-0.393400549888611,0.824572682380676,0.586388051509857,-0.415063470602036,0.695608615875244,0.640114009380341,-0.360243141651154,0.678585946559906,0.358242690563202,-0.369526594877243,0.857386887073517,0.738801121711731,-0.260166734457016,0.6216801404953,0.717148721218109,-0.158668875694275,0.678617656230927,0.359977900981903,-0.319483041763306,0.876553773880005,0.219657093286514,0.398345082998276,0.890545904636383,\n0.305438488721848,0.421940237283707,0.853623926639557,0.395363062620163,0.562560498714447,0.726094901561737,0.340864300727844,0.524212896823883,0.780392467975616,0.370492875576019,0.369821041822433,0.852037250995636,0.416927576065063,0.413195610046387,0.809592962265015,0.305438488721848,0.421940237283707,0.853623926639557,0.245724827051163,0.276487857103348,0.929071426391602,0.278009802103043,0.308251172304153,0.909775674343109,0.305438488721848,0.421940237283707,0.853623926639557,0.416927576065063,0.413195610046387,0.809592962265015,0.497093498706818,0.456073582172394,0.738169968128204,0.524678170681,0.559116363525391,0.641951441764832,0.395363062620163,0.562560498714447,0.726094901561737,0.773433268070221,0.347118884325027,0.53038614988327,0.623485326766968,0.449957937002182,0.639377772808075,0.649705529212952,0.341418325901031,0.679202735424042,0.750506460666656,0.343903452157974,0.564331829547882,0.649705529212952,0.341418325901031,0.679202735424042,0.556747674942017,0.38243293762207,0.737412452697754,0.720846891403198,0.393656641244888,0.570450901985168,0.750506460666656,0.343903452157974,0.564331829547882,0.591701328754425,-0.0445454604923725,0.804925620555878,0.583943843841553,0.131935343146324,0.801001012325287,0.601098597049713,0.0911194980144501,0.793963313102722,0.568371534347534,0.0187626089900732,0.822558045387268,0.335370063781738,-0.00474565383046865,0.942074537277222,0.286056965589523,0.444956660270691,0.848637104034424,0.65963888168335,0.347626268863678,0.666357636451721,0.690708041191101,-0.0477886833250523,0.721552908420563,0.335370063781738,-0.00474565383046865,0.942074537277222,0.017973817884922,0.0102047342807055,0.999786376953125,0.0513622872531414,0.468802571296692,0.881808400154114,0.286056965589523,0.444956660270691,0.848637104034424,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.640791594982147,-0.766526699066162,0.0426960773766041,0.494663387537003,-0.866621494293213,-0.0653853639960289,0.430644094944,-0.871794462203979,-0.233495324850082,0.611575484275818,0.314111411571503,0.726160764694214,\n0.800925850868225,0.226523146033287,0.554260790348053,0.826946556568146,0.0731306597590446,0.557504594326019,0.610058009624481,0.18056558072567,0.771508455276489,0.800925850868225,0.226523146033287,0.554260790348053,0.611575484275818,0.314111411571503,0.726160764694214,0.512064158916473,0.485980182886124,0.708246827125549,0.535205781459808,0.472302228212357,0.700346648693085,0.783647418022156,0.339152276515961,0.520454108715057,0.813101530075073,0.281051158905029,0.509780466556549,0.834977984428406,0.275511413812637,0.47634568810463,0.79509973526001,0.317423015832901,0.516777575016022,0.819765686988831,0.312743216753006,0.479766517877579,0.773433268070221,0.347118884325027,0.53038614988327,0.821655750274658,0.296962469816208,0.486513197422028,0.855628609657288,0.255288362503052,0.450252771377563,0.85977029800415,0.296936422586441,0.415480256080627,0.922278165817261,0.183078601956367,0.340419232845306,0.855628609657288,0.255288362503052,0.450252771377563,0.821655750274658,0.296962469816208,0.486513197422028,0.966420710086823,0.0570991300046444,0.250540882349014,0.930171310901642,0.112328357994556,0.34951913356781,0.855628609657288,0.255288362503052,0.450252771377563,0.922278165817261,0.183078601956367,0.340419232845306,0.270428031682968,-0.84670215845108,0.458218395709991,0.387449771165848,-0.245748713612556,0.888532638549805,0.567721784114838,-0.411755472421646,0.712845981121063,0.454382866621017,-0.848002672195435,0.272814393043518,0.563636422157288,-0.823141872882843,0.0689310654997826,0.454382866621017,-0.848002672195435,0.272814393043518,0.567721784114838,-0.411755472421646,0.712845981121063,0.690909028053284,-0.334549605846405,0.640875399112701,0.766620635986328,-0.390746057033539,-0.509519696235657,0.719214975833893,-0.430595219135284,-0.545268356800079,0.829468905925751,-0.13685368001461,-0.5415278673172,0.946312725543976,-0.198392629623413,-0.255210876464844,0.829468905925751,-0.13685368001461,-0.5415278673172,0.719214975833893,-0.430595219135284,-0.545268356800079,0.940188527107239,-0.340047240257263,0.0203306917101145,\n0.959231495857239,-0.07520642131567,-0.272431552410126,0.847399115562439,-0.142815440893173,-0.511388719081879,0.829468905925751,-0.13685368001461,-0.5415278673172,0.959231495857239,-0.07520642131567,-0.272431552410126,0.899878442287445,-0.160217583179474,-0.405646592378616,0.976300895214081,-0.175593838095665,-0.126504495739937,0.946312725543976,-0.198392629623413,-0.255210876464844,0.829468905925751,-0.13685368001461,-0.5415278673172,0.847399115562439,-0.142815440893173,-0.511388719081879,0.824678778648376,0.331173717975616,0.458507210016251,0.855628609657288,0.255288362503052,0.450252771377563,0.930171310901642,0.112328357994556,0.34951913356781,0.908929646015167,0.18951641023159,0.371389836072922,0.835932672023773,0.318577855825424,0.446905732154846,0.824678778648376,0.331173717975616,0.458507210016251,0.744709670543671,0.422629773616791,0.516518652439117,0.773433268070221,0.347118884325027,0.53038614988327,0.824678778648376,0.331173717975616,0.458507210016251,0.835932672023773,0.318577855825424,0.446905732154846,0.744709670543671,0.422629773616791,0.516518652439117,0.773433268070221,0.347118884325027,0.53038614988327,0.855628609657288,0.255288362503052,0.450252771377563,0.824678778648376,0.331173717975616,0.458507210016251,0.267092674970627,-0.484114617109299,0.833243370056152,0.406590580940247,-0.393400549888611,0.824572682380676,0.437306433916092,-0.371932566165924,0.818797469139099,0.329291462898254,-0.460140645503998,0.824522733688354,0.640791594982147,-0.766526699066162,0.0426960773766041,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.65738570690155,-0.752218425273895,0.0448495484888554,0.705848097801209,-0.694441199302673,0.13974928855896,0.65738570690155,-0.752218425273895,0.0448495484888554,0.639384806156158,-0.761013865470886,0.109749406576157,0.693672001361847,-0.686315536499023,0.218609541654587,0.705848097801209,-0.694441199302673,0.13974928855896,0.985209882259369,0.0516813509166241,0.163372397422791,0.980856478214264,0.0318705588579178,0.192106366157532,0.965117514133453,0.0208978541195393,0.260981827974319,\n0.962778627872467,0.0666173547506332,0.261953175067902,0.870097935199738,0.102833516895771,0.482032060623169,0.826946556568146,0.0731306597590446,0.557504594326019,0.965117514133453,0.0208978541195393,0.260981827974319,0.980856478214264,0.0318705588579178,0.192106366157532,0.965117514133453,0.0208978541195393,0.260981827974319,0.826946556568146,0.0731306597590446,0.557504594326019,0.800925850868225,0.226523146033287,0.554260790348053,0.933462917804718,0.164250507950783,0.318855404853821,0.920523226261139,0.14191623032093,0.36400106549263,0.962778627872467,0.0666173547506332,0.261953175067902,0.965117514133453,0.0208978541195393,0.260981827974319,0.933462917804718,0.164250507950783,0.318855404853821,0.966257035732269,0.139943510293961,0.216247826814651,0.976429760456085,-0.14936164021492,0.155807659029961,0.993429064750671,-0.113890402019024,0.0113009223714471,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.981637835502625,-0.188382476568222,0.0299864616245031,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.858178198337555,-0.416941344738007,-0.299483120441437,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.981637835502625,-0.188382476568222,0.0299864616245031,0.54023802280426,-0.148879259824753,0.828237771987915,0.507363021373749,-0.115291275084019,0.853985190391541,0.124305054545403,-0.308796167373657,0.942970395088196,0.189583629369736,-0.286395132541656,0.939167618751526,0.94987964630127,-0.0038351418916136,0.312592297792435,0.972302615642548,0.043654702603817,0.229612305760384,0.964095413684845,-0.0113426633179188,0.265313804149628,0.956782042980194,0.0500060208141804,0.286474347114563,0.972302615642548,0.043654702603817,0.229612305760384,0.966708958148956,-0.002308584516868,0.255868047475815,0.945727825164795,-0.098081186413765,0.309804677963257,0.964095413684845,-0.0113426633179188,0.265313804149628,0.94987964630127,-0.0038351418916136,0.312592297792435,0.956782042980194,0.0500060208141804,0.286474347114563,0.937608182430267,0.0460146591067314,0.344635367393494,0.155652940273285,-0.987067878246307,0.0383299365639687,\n-0.032355971634388,-0.99692964553833,0.0713044255971909,0.386847853660584,-0.767014622688293,0.511895835399628,0.191021859645844,-0.901510059833527,0.388317227363586,0.155652940273285,-0.987067878246307,0.0383299365639687,0.191021859645844,-0.901510059833527,0.388317227363586,0.255019038915634,-0.916801631450653,0.307311117649078,0.279211044311523,-0.955691933631897,0.093242421746254,0.17069847881794,-0.387216597795486,0.906049311161041,0.204357400536537,-0.124537408351898,0.97094202041626,0.197210118174553,0.0128493588417768,0.980277061462402,0.848142683506012,0.254542678594589,0.464609563350677,0.65963888168335,0.347626268863678,0.666357636451721,0.667004644870758,0.442110657691956,0.59970235824585,0.825178265571594,0.267818719148636,0.497346937656403,0.801001727581024,0.319669455289841,0.506169617176056,0.848142683506012,0.254542678594589,0.464609563350677,0.801001727581024,0.319669455289841,0.506169617176056,0.79509973526001,0.317423015832901,0.516777575016022,0.834977984428406,0.275511413812637,0.47634568810463,-0.0214409474283457,-0.17113696038723,0.985013961791992,-0.136760428547859,-0.195085763931274,0.971204459667206,-0.0409326404333115,0.16646908223629,0.985196709632874,-0.0292664598673582,0.127957031130791,0.991347789764404,-0.0409326404333115,0.16646908223629,0.985196709632874,-0.136760428547859,-0.195085763931274,0.971204459667206,0.0031939682085067,-0.177682086825371,0.984082758426666,0.0314028672873974,0.188204348087311,0.981627702713013,0.382985174655914,-0.340148031711578,0.858849048614502,0.514656662940979,-0.124439902603626,0.848317861557007,0.633589863777161,-0.0252969916909933,0.773255407810211,0.588271081447601,-0.259690821170807,0.765831470489502,0.382985174655914,-0.340148031711578,0.858849048614502,0.588271081447601,-0.259690821170807,0.765831470489502,0.525104641914368,-0.419060587882996,0.740711390972137,0.121470481157303,-0.391699403524399,0.912039756774902,0.173163160681725,-0.359727561473846,0.916848182678223,0.382985174655914,-0.340148031711578,0.858849048614502,0.121470481157303,-0.391699403524399,0.912039756774902,\n0.164051368832588,-0.273042142391205,0.947910964488983,0.443824082612991,-0.204101487994194,0.872561037540436,0.514656662940979,-0.124439902603626,0.848317861557007,0.382985174655914,-0.340148031711578,0.858849048614502,0.173163160681725,-0.359727561473846,0.916848182678223,0.416703939437866,-0.0255245417356491,0.908683836460114,0.254473268985748,-0.0765668898820877,0.964044034481049,0.182319968938828,0.114501133561134,0.976549506187439,0.44965198636055,0.140096634626389,0.882148504257202,0.523316979408264,-0.825681805610657,-0.210686638951302,0.626487195491791,-0.719823837280273,-0.298943966627121,0.720593869686127,-0.637408852577209,-0.272863417863846,0.671372294425964,-0.724817991256714,-0.15459018945694,0.630890548229218,-0.774750173091888,0.0417049825191498,0.755779623985291,-0.654822111129761,0.00226114504039288,0.626487195491791,-0.719823837280273,-0.298943966627121,0.523316979408264,-0.825681805610657,-0.210686638951302,0.840808868408203,-0.369773417711258,0.395358175039291,0.756419658660889,-0.554076313972473,-0.347604215145111,0.626487195491791,-0.719823837280273,-0.298943966627121,0.755779623985291,-0.654822111129761,0.00226114504039288,0.626487195491791,-0.719823837280273,-0.298943966627121,0.756419658660889,-0.554076313972473,-0.347604215145111,0.777718842029572,-0.48187255859375,-0.403673440217972,0.720593869686127,-0.637408852577209,-0.272863417863846,0.562851548194885,-0.792488932609558,0.23486053943634,0.881620466709137,-0.332029432058334,0.335412949323654,0.738801121711731,-0.260166734457016,0.6216801404953,0.386847853660584,-0.767014622688293,0.511895835399628,0.618419706821442,-0.127026095986366,0.775513648986816,0.584166944026947,-0.151799350976944,0.797311663627625,0.637141883373261,-0.082910381257534,0.766274154186249,0.649656236171722,-0.0531920231878757,0.758364915847778,0.690909028053284,-0.334549605846405,0.640875399112701,0.618419706821442,-0.127026095986366,0.775513648986816,0.649656236171722,-0.0531920231878757,0.758364915847778,0.707773089408875,-0.177667543292046,0.683733463287354,0.430644094944,-0.871794462203979,-0.233495324850082,\n0.304112553596497,-0.921620965003967,-0.241102367639542,0.563636422157288,-0.823141872882843,0.0689310654997826,0.435357719659805,-0.872423410415649,-0.222128495573998,0.529802799224854,-0.195633217692375,0.825249433517456,0.44691988825798,-0.179234355688095,0.876434624195099,0.542096614837646,-0.0831166654825211,0.836195468902588,0.602697968482971,-0.102753959596157,0.791325986385345,0.584166944026947,-0.151799350976944,0.797311663627625,0.529802799224854,-0.195633217692375,0.825249433517456,0.602697968482971,-0.102753959596157,0.791325986385345,0.637141883373261,-0.082910381257534,0.766274154186249,0.0341533571481705,0.664829432964325,0.746214032173157,0.102224595844746,0.498050421476364,0.861101567745209,0.31933718919754,0.337111681699753,0.885652005672455,0.220439016819,0.602273344993591,0.767250597476959,-0.407276064157486,0.876896381378174,0.255301624536514,-0.38366886973381,0.80352109670639,0.455139607191086,0.0341533571481705,0.664829432964325,0.746214032173157,0.220439016819,0.602273344993591,0.767250597476959,0.164532527327538,0.859674274921417,0.483620911836624,0.534866094589233,0.53300929069519,0.655606091022491,0.102224595844746,0.498050421476364,0.861101567745209,0.0341533571481705,0.664829432964325,0.746214032173157,-0.38366886973381,0.80352109670639,0.455139607191086,0.765106797218323,-0.350072890520096,0.540426254272461,0.75313264131546,-0.288527101278305,0.591221868991852,0.662703216075897,-0.235535204410553,0.710878074169159,0.613220632076263,-0.373373091220856,0.696098387241364,0.35059866309166,-0.137498125433922,0.926377296447754,0.194007128477097,-0.0432056449353695,0.98004823923111,0.313594281673431,0.139182701706886,0.939301192760468,0.46117314696312,-0.0281441453844309,0.886863708496094,0.44691988825798,-0.179234355688095,0.876434624195099,0.35059866309166,-0.137498125433922,0.926377296447754,0.46117314696312,-0.0281441453844309,0.886863708496094,0.542096614837646,-0.0831166654825211,0.836195468902588,0.563636422157288,-0.823141872882843,0.0689310654997826,0.304112553596497,-0.921620965003967,-0.241102367639542,\n0.200176298618317,-0.953467607498169,-0.225452929735184,0.454382866621017,-0.848002672195435,0.272814393043518,0.200176298618317,-0.953467607498169,-0.225452929735184,0.0610353648662567,-0.966653764247894,-0.248707070946693,0.270428031682968,-0.84670215845108,0.458218395709991,0.454382866621017,-0.848002672195435,0.272814393043518,0.327757924795151,-0.912954866886139,-0.243080645799637,0.304112553596497,-0.921620965003967,-0.241102367639542,0.430644094944,-0.871794462203979,-0.233495324850082,0.640791594982147,-0.766526699066162,0.0426960773766041,0.638466238975525,-0.769491136074066,0.0156274978071451,0.465027630329132,-0.875830411911011,-0.129113703966141,0.494663387537003,-0.866621494293213,-0.0653853639960289,-0.0349236838519573,-0.777106523513794,0.62839937210083,0.176858365535736,-0.897578120231628,0.403824985027313,-0.021647073328495,-0.960853159427643,0.276211261749268,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.623457431793213,0.0676653161644936,0.778923749923706,0.574505984783173,-0.027739129960537,0.818030178546906,0.535101175308228,-0.00626787729561329,0.844764709472656,0.565106153488159,0.017743531614542,0.824827373027802,0.514656662940979,-0.124439902603626,0.848317861557007,0.574505984783173,-0.027739129960537,0.818030178546906,0.623457431793213,0.0676653161644936,0.778923749923706,0.633589863777161,-0.0252969916909933,0.773255407810211,0.574505984783173,-0.027739129960537,0.818030178546906,0.514656662940979,-0.124439902603626,0.848317861557007,0.443824082612991,-0.204101487994194,0.872561037540436,0.655753970146179,-0.0819050073623657,0.750518679618835,0.633136808872223,-0.0669011846184731,0.771143317222595,0.535101175308228,-0.00626787729561329,0.844764709472656,0.574505984783173,-0.027739129960537,0.818030178546906,0.633136808872223,-0.0669011846184731,0.771143317222595,0.578185617923737,-0.0845057815313339,0.811517179012299,-0.00140566960908473,-0.234566405415535,0.97209906578064,0.00247630476951599,-0.186591759324074,0.982434391975403,0.288086891174316,-0.211062774062157,0.934054851531982,\n0.312136799097061,-0.241864830255508,0.918733894824982,0.00247630476951599,-0.186591759324074,0.982434391975403,-0.000449120096163824,-0.222807794809341,0.974862277507782,0.253216534852982,-0.212744683027267,0.943727254867554,0.288086891174316,-0.211062774062157,0.934054851531982,0.765106797218323,-0.350072890520096,0.540426254272461,0.719567954540253,-0.322717130184174,0.614878535270691,0.866469502449036,-0.361488610506058,0.344320476055145,0.875984609127045,-0.341396063566208,0.340734094381332,0.332773357629776,-0.801452815532684,0.49692577123642,0.198447287082672,-0.827921032905579,0.524562180042267,0.168408244848251,-0.974918007850647,0.145511314272881,0.304768770933151,-0.92969423532486,0.206844300031662,0.353568494319916,-0.776771426200867,0.521167457103729,0.332773357629776,-0.801452815532684,0.49692577123642,0.304768770933151,-0.92969423532486,0.206844300031662,0.225757539272308,-0.896350860595703,0.381560862064362,0.918502330780029,-0.196233198046684,0.343287169933319,0.989523768424988,0.120242863893509,-0.0799020603299141,0.941014289855957,-0.231837883591652,0.246461525559425,0.928443729877472,-0.228811115026474,0.292639285326004,0.925993382930756,0.073547326028347,-0.370306611061096,0.903722703456879,-0.336785912513733,0.26431143283844,0.941014289855957,-0.231837883591652,0.246461525559425,0.989523768424988,0.120242863893509,-0.0799020603299141,0.804244041442871,-0.107830874621868,0.584434807300568,0.64728707075119,-0.269912004470825,0.712858319282532,0.43553838133812,0.174102976918221,0.883172988891602,0.897598922252655,-0.0851877480745316,0.432503432035446,0.928443729877472,-0.228811115026474,0.292639285326004,0.941014289855957,-0.231837883591652,0.246461525559425,0.804244041442871,-0.107830874621868,0.584434807300568,0.877371370792389,-0.100216217339039,0.469229310750961,0.690708041191101,-0.0477886833250523,0.721552908420563,0.65963888168335,0.347626268863678,0.666357636451721,0.848142683506012,0.254542678594589,0.464609563350677,0.688574373722076,-0.431850165128708,0.58255535364151,0.586388051509857,-0.415063470602036,0.695608615875244,\n0.270446568727493,-0.724654376506805,0.633825421333313,0.333747088909149,-0.66472852230072,0.668392717838287,0.731125593185425,-0.405815303325653,0.548424422740936,0.688574373722076,-0.431850165128708,0.58255535364151,0.333747088909149,-0.66472852230072,0.668392717838287,0.535029828548431,-0.536747872829437,0.652414619922638,0.688574373722076,-0.431850165128708,0.58255535364151,0.731125593185425,-0.405815303325653,0.548424422740936,0.73811411857605,-0.426667273044586,0.522630453109741,0.731416404247284,-0.417625606060028,0.539090871810913,-0.0552638620138168,0.347488284111023,0.936054348945618,0.179719522595406,0.199890360236168,0.963195025920868,-0.00221070507541299,0.348074615001678,0.937464237213135,0.174916133284569,0.190565213561058,0.965965449810028,0.280919551849365,0.197001457214355,0.939294755458832,0.431708127260208,0.0743667632341385,0.898942530155182,0.493298023939133,0.0378949381411076,0.8690345287323,0.951365828514099,0.00983366928994656,0.30790650844574,0.958109974861145,-0.0344467237591743,0.284321486949921,0.955479383468628,-0.0429471768438816,0.291915565729141,0.0600041374564171,-0.192453533411026,0.979469835758209,-0.0292664598673582,0.127957031130791,0.991347789764404,-0.0409326404333115,0.16646908223629,0.985196709632874,0.0412249267101288,-0.205861806869507,0.977712333202362,-0.0409326404333115,0.16646908223629,0.985196709632874,0.0314028672873974,0.188204348087311,0.981627702713013,0.00068405584897846,-0.208776980638504,0.977963030338287,0.0412249267101288,-0.205861806869507,0.977712333202362,0.44965198636055,0.140096634626389,0.882148504257202,0.182319968938828,0.114501133561134,0.976549506187439,0.191416949033737,-0.0921172648668289,0.977176547050476,0.440964937210083,0.0207586232572794,0.897284269332886,0.763672888278961,0.330310761928558,0.554705798625946,0.728024780750275,0.317726284265518,0.607478320598602,0.862693786621094,0.213308542966843,0.458539962768555,0.87058699131012,0.227341398596764,0.436341762542725,0.488678455352783,-0.257274806499481,0.833668410778046,0.378649204969406,-0.51500403881073,0.769022524356842,\n0.678119361400604,-0.318360239267349,0.662420451641083,0.750837445259094,-0.0367836877703667,0.659461975097656,0.981309294700623,-0.093424528837204,-0.168237790465355,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.993362247943878,-0.0349664911627769,0.109584823250771,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.135898023843765,0.169247582554817,0.976159334182739,-0.0196372587233782,0.188453316688538,0.98188579082489,-0.00221070507541299,0.348074615001678,0.937464237213135,0.179719522595406,0.199890360236168,0.963195025920868,0.0426242314279079,0.260108649730682,0.964638113975525,-0.0196372587233782,0.188453316688538,0.98188579082489,0.135898023843765,0.169247582554817,0.976159334182739,0.166202440857887,0.306374847888947,0.937289237976074,0.333747088909149,-0.66472852230072,0.668392717838287,0.270446568727493,-0.724654376506805,0.633825421333313,0.235940769314766,-0.737428665161133,0.632875144481659,0.363939642906189,-0.646557629108429,0.670455992221832,0.189460039138794,-0.647004544734955,0.738572955131531,0.535029828548431,-0.536747872829437,0.652414619922638,0.333747088909149,-0.66472852230072,0.668392717838287,0.363939642906189,-0.646557629108429,0.670455992221832,0.286647915840149,-0.584438979625702,0.759120643138886,0.583943843841553,0.131935343146324,0.801001012325287,0.44965198636055,0.140096634626389,0.882148504257202,0.440964937210083,0.0207586232572794,0.897284269332886,0.596563339233398,-0.0223739240318537,0.8022540807724,0.364222437143326,-0.205845013260841,0.908278524875641,0.335370063781738,-0.00474565383046865,0.942074537277222,0.690708041191101,-0.0477886833250523,0.721552908420563,0.61975085735321,-0.35027813911438,0.702292025089264,0.00262317061424255,-0.184787794947624,0.982774972915649,0.017973817884922,0.0102047342807055,0.999786376953125,0.335370063781738,-0.00474565383046865,0.942074537277222,\n0.364222437143326,-0.205845013260841,0.908278524875641,0.958109974861145,-0.0344467237591743,0.284321486949921,0.969503223896027,0.0232477653771639,0.243973404169083,0.968910753726959,0.00811574142426252,0.247277289628983,0.955479383468628,-0.0429471768438816,0.291915565729141,0.930171310901642,0.112328357994556,0.34951913356781,0.966420710086823,0.0570991300046444,0.250540882349014,0.969503223896027,0.0232477653771639,0.243973404169083,0.958109974861145,-0.0344467237591743,0.284321486949921,-0.0301125477999449,-0.572418868541718,0.819408237934113,0.00911593530327082,-0.103348582983017,0.994603395462036,0.173270419239998,-0.100987397134304,0.979683041572571,0.0780740827322006,-0.57033497095108,0.817693412303925,0.173270419239998,-0.100987397134304,0.979683041572571,0.248945504426956,-0.117258243262768,0.961393058300018,0.047360323369503,-0.552981853485107,0.831846177577972,0.0780740827322006,-0.57033497095108,0.817693412303925,0.810256838798523,-0.430587977170944,0.397590130567551,0.893001258373261,-0.370285004377365,0.255807995796204,0.870028138160706,-0.439180076122284,0.223990917205811,0.770568072795868,-0.510897517204285,0.381062299013138,0.900704562664032,-0.383264392614365,0.204547420144081,0.903808772563934,-0.380508303642273,0.19581413269043,0.870028138160706,-0.439180076122284,0.223990917205811,0.893001258373261,-0.370285004377365,0.255807995796204,0.886316955089569,0.0816843584179878,0.455817818641663,0.89356255531311,-0.0812801718711853,0.441519498825073,0.959026873111725,-0.148191750049591,0.241467580199242,0.747522175312042,-0.213430538773537,0.629013538360596,0.770568072795868,-0.510897517204285,0.381062299013138,0.870028138160706,-0.439180076122284,0.223990917205811,0.89356255531311,-0.0812801718711853,0.441519498825073,0.897057175636292,-0.352101475000381,0.267044723033905,0.927076876163483,-0.29800683259964,0.227421119809151,0.875984609127045,-0.341396063566208,0.340734094381332,0.866469502449036,-0.361488610506058,0.344320476055145,0.956220626831055,-0.152332276105881,0.249873846769333,0.976429760456085,-0.14936164021492,0.155807659029961,\n0.976300895214081,-0.175593838095665,-0.126504495739937,0.970759510993958,-0.233238592743874,0.056795421987772,0.935715436935425,0.19026754796505,0.297043561935425,0.938729107379913,0.213661849498749,0.270437210798264,0.956782042980194,0.0500060208141804,0.286474347114563,0.964095413684845,-0.0113426633179188,0.265313804149628,0.945727825164795,-0.098081186413765,0.309804677963257,0.941311419010162,0.140633046627045,0.30684706568718,0.935715436935425,0.19026754796505,0.297043561935425,0.964095413684845,-0.0113426633179188,0.265313804149628,0.707773089408875,-0.177667543292046,0.683733463287354,0.820341229438782,-0.113342881202698,0.560529828071594,0.840808868408203,-0.369773417711258,0.395358175039291,0.820341229438782,-0.113342881202698,0.560529828071594,0.707773089408875,-0.177667543292046,0.683733463287354,0.649656236171722,-0.0531920231878757,0.758364915847778,0.855769634246826,-0.0943452939391136,0.508681952953339,-0.0512008517980576,-0.79354852437973,0.606349110603333,0.0527103617787361,-0.77695095539093,0.627350628376007,0.0997758805751801,-0.76704877614975,0.633782982826233,-0.0242012590169907,-0.832133829593658,0.554046511650085,-0.0352796316146851,-0.824001550674438,0.565488159656525,-0.0512008517980576,-0.79354852437973,0.606349110603333,-0.0242012590169907,-0.832133829593658,0.554046511650085,0.0416775047779083,-0.927180886268616,0.372288316488266,-0.0242012590169907,-0.832133829593658,0.554046511650085,0.0997758805751801,-0.76704877614975,0.633782982826233,0.406590580940247,-0.393400549888611,0.824572682380676,0.267092674970627,-0.484114617109299,0.833243370056152,-0.0242012590169907,-0.832133829593658,0.554046511650085,0.267092674970627,-0.484114617109299,0.833243370056152,0.209196627140045,-0.665287017822266,0.716679811477661,0.0416775047779083,-0.927180886268616,0.372288316488266,0.0587443448603153,-0.922947645187378,-0.380416542291641,0.0633370503783226,-0.944429814815521,-0.322553485631943,-0.0777209997177124,-0.922415435314178,-0.378297746181488,-0.0771657377481461,-0.907520055770874,-0.412859290838242,\n0.750837445259094,-0.0367836877703667,0.659461975097656,0.678119361400604,-0.318360239267349,0.662420451641083,0.680992484092712,-0.305005490779877,0.665748357772827,0.758135914802551,0.0851427242159843,0.646514236927032,0.80888158082962,-0.583779513835907,-0.0700862184166908,0.671372294425964,-0.724817991256714,-0.15459018945694,0.720593869686127,-0.637408852577209,-0.272863417863846,0.828101873397827,-0.525332391262054,-0.195635288953781,0.838521242141724,-0.431514054536819,-0.332682609558105,0.828101873397827,-0.525332391262054,-0.195635288953781,0.720593869686127,-0.637408852577209,-0.272863417863846,0.777718842029572,-0.48187255859375,-0.403673440217972,0.758135914802551,0.0851427242159843,0.646514236927032,0.680992484092712,-0.305005490779877,0.665748357772827,0.515636503696442,-0.41490975022316,0.749645829200745,0.443391680717468,-0.0999263972043991,0.89074045419693,0.989404678344727,-0.134779617190361,-0.0539703145623207,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.858178198337555,-0.416941344738007,-0.299483120441437,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.989404678344727,-0.134779617190361,-0.0539703145623207,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.993429064750671,-0.113890402019024,0.0113009223714471,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.371347606182098,0.418176740407944,0.82899284362793,0.535205781459808,0.472302228212357,0.700346648693085,0.512064158916473,0.485980182886124,0.708246827125549,0.328961253166199,0.182314842939377,0.92657744884491,0.314301073551178,0.320888847112656,0.893445670604706,0.371347606182098,0.418176740407944,0.82899284362793,0.0426242314279079,0.260108649730682,0.964638113975525,0.166202440857887,0.306374847888947,0.937289237976074,0.221095889806747,0.32488140463829,0.919548094272614,0.16256257891655,0.269552499055862,0.949165344238281,0.221095889806747,0.32488140463829,0.919548094272614,0.166202440857887,0.306374847888947,0.937289237976074,0.508710622787476,0.190386489033699,0.839622795581818,0.481910198926926,0.246677935123444,0.840780913829803,\n0.278009802103043,0.308251172304153,0.909775674343109,0.221095889806747,0.32488140463829,0.919548094272614,0.481910198926926,0.246677935123444,0.840780913829803,0.428730636835098,0.26745393872261,0.862935900688171,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.967206120491028,-0.19463723897934,0.163182899355888,0.806693911552429,-0.123899839818478,0.577835381031036,0.806693911552429,-0.123899839818478,0.577835381031036,0.967206120491028,-0.19463723897934,0.163182899355888,0.851511597633362,-0.5011847615242,0.154083982110024,0.733202934265137,-0.122967794537544,0.668799161911011,0.99903529882431,-0.0258715786039829,-0.035483431071043,0.959231495857239,-0.07520642131567,-0.272431552410126,0.940188527107239,-0.340047240257263,0.0203306917101145,0.985052049160004,-0.113364338874817,0.129696041345596,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.989280700683594,-0.0284773074090481,-0.143222585320473,0.959231495857239,-0.07520642131567,-0.272431552410126,0.99903529882431,-0.0258715786039829,-0.035483431071043,0.965724050998688,-0.163102030754089,-0.201927617192268,0.899878442287445,-0.160217583179474,-0.405646592378616,0.959231495857239,-0.07520642131567,-0.272431552410126,0.989280700683594,-0.0284773074090481,-0.143222585320473,0.400608420372009,-0.480024576187134,0.780441761016846,0.570054233074188,-0.200027942657471,0.796885788440704,0.681784629821777,-0.285219341516495,0.673661351203918,0.656731724739075,-0.381447851657867,0.650538980960846,-0.0528050363063812,-0.813004612922668,0.579857885837555,0.00655650394037366,-0.135652124881744,0.990734815597534,0.387449771165848,-0.245748713612556,0.888532638549805,0.270428031682968,-0.84670215845108,0.458218395709991,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.997385084629059,0.0175571031868458,0.0701054036617279,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.989280700683594,-0.0284773074090481,-0.143222585320473,0.961935639381409,0.00657567568123341,0.273196935653687,0.964770019054413,-0.0907266810536385,0.246956452727318,\n0.997832834720612,-0.0537990741431713,0.0378856025636196,0.997385084629059,0.0175571031868458,0.0701054036617279,0.949846565723419,-0.197867274284363,0.242157250642776,0.986409723758698,-0.164261862635612,-0.00372203509323299,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.964770019054413,-0.0907266810536385,0.246956452727318,0.965724050998688,-0.163102030754089,-0.201927617192268,0.989280700683594,-0.0284773074090481,-0.143222585320473,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.986409723758698,-0.164261862635612,-0.00372203509323299,0.44691988825798,-0.179234355688095,0.876434624195099,0.312136799097061,-0.241864830255508,0.918733894824982,0.288086891174316,-0.211062774062157,0.934054851531982,0.35059866309166,-0.137498125433922,0.926377296447754,0.288086891174316,-0.211062774062157,0.934054851531982,0.253216534852982,-0.212744683027267,0.943727254867554,0.194007128477097,-0.0432056449353695,0.98004823923111,0.35059866309166,-0.137498125433922,0.926377296447754,0.562851548194885,-0.792488932609558,0.23486053943634,0.386847853660584,-0.767014622688293,0.511895835399628,-0.032355971634388,-0.99692964553833,0.0713044255971909,0.637141883373261,-0.082910381257534,0.766274154186249,0.846625864505768,-0.12819692492485,0.516517341136932,0.855769634246826,-0.0943452939391136,0.508681952953339,0.649656236171722,-0.0531920231878757,0.758364915847778,0.903585314750671,0.234351992607117,0.35862609744072,0.98053389787674,0.00911934021860361,0.196137949824333,0.991146802902222,-0.0709943845868111,0.112195692956448,0.944392323493958,0.0710759162902832,0.321047365665436,0.98053389787674,0.00911934021860361,0.196137949824333,0.98186069726944,-0.153709232807159,0.111008986830711,0.990583539009094,-0.136551707983017,0.0098949521780014,0.991146802902222,-0.0709943845868111,0.112195692956448,0.927650630474091,-0.232570663094521,-0.292190253734589,0.867056906223297,-0.245093911886215,-0.433752596378326,0.899878442287445,-0.160217583179474,-0.405646592378616,0.965724050998688,-0.163102030754089,-0.201927617192268,\n0.847399115562439,-0.142815440893173,-0.511388719081879,0.899878442287445,-0.160217583179474,-0.405646592378616,0.867056906223297,-0.245093911886215,-0.433752596378326,0.863667845726013,-0.255664467811584,-0.434411734342575,0.705349028110504,-0.217919707298279,0.674532234668732,0.750554323196411,-0.229917243123055,0.619521021842957,0.688922643661499,-0.305572867393494,0.657275319099426,0.760169208049774,-0.346720576286316,0.549479365348816,0.688922643661499,-0.305572867393494,0.657275319099426,0.684517562389374,-0.439017295837402,0.581978976726532,0.742792665958405,-0.550313711166382,0.381331622600555,0.760169208049774,-0.346720576286316,0.549479365348816,0.378649204969406,-0.51500403881073,0.769022524356842,0.0903236120939255,-0.645915448665619,0.758046746253967,0.11539563536644,-0.528798937797546,0.840865969657898,0.400608420372009,-0.480024576187134,0.780441761016846,0.80888158082962,-0.583779513835907,-0.0700862184166908,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.645513415336609,-0.755210697650909,-0.113882429897785,0.671372294425964,-0.724817991256714,-0.15459018945694,0.821304857730865,-0.558016240596771,0.118643142282963,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.645513415336609,-0.755210697650909,-0.113882429897785,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.430644094944,-0.871794462203979,-0.233495324850082,0.435357719659805,-0.872423410415649,-0.222128495573998,0.501666784286499,-0.849441289901733,-0.163646027445793,0.609544932842255,-0.541187822818756,0.579284608364105,0.629647791385651,-0.52997088432312,0.568044483661652,0.810256838798523,-0.430587977170944,0.397590130567551,0.770568072795868,-0.510897517204285,0.381062299013138,0.609544932842255,-0.541187822818756,0.579284608364105,0.770568072795868,-0.510897517204285,0.381062299013138,0.747522175312042,-0.213430538773537,0.629013538360596,0.584165692329407,-0.333255082368851,0.740061819553375,0.535205781459808,0.472302228212357,0.700346648693085,0.542900562286377,0.367345452308655,0.755192875862122,\n0.786049902439117,0.275353401899338,0.553449213504791,0.783647418022156,0.339152276515961,0.520454108715057,0.901179313659668,-0.204281270503998,0.382289171218872,0.896426856517792,-0.172908827662468,0.408070415258408,0.623109459877014,-0.205047786235809,0.754778146743774,0.645662844181061,-0.29273384809494,0.705284595489502,0.901179313659668,-0.204281270503998,0.382289171218872,0.645662844181061,-0.29273384809494,0.705284595489502,0.651034355163574,-0.303375482559204,0.695785582065582,0.887543320655823,-0.171314582228661,0.427689343690872,0.261966973543167,0.625043272972107,0.735319077968597,0.286056965589523,0.444956660270691,0.848637104034424,0.0513622872531414,0.468802571296692,0.881808400154114,0.0635503008961678,0.655404150485992,0.752600014209747,0.261966973543167,0.625043272972107,0.735319077968597,0.667004644870758,0.442110657691956,0.59970235824585,0.65963888168335,0.347626268863678,0.666357636451721,0.286056965589523,0.444956660270691,0.848637104034424,0.985209882259369,0.0516813509166241,0.163372397422791,0.985529184341431,0.0794467255473137,0.149734541773796,0.96662175655365,0.153387770056725,0.205218374729156,0.980856478214264,0.0318705588579178,0.192106366157532,0.966420710086823,0.0570991300046444,0.250540882349014,0.922278165817261,0.183078601956367,0.340419232845306,0.96662175655365,0.153387770056725,0.205218374729156,0.985529184341431,0.0794467255473137,0.149734541773796,0.85977029800415,0.296936422586441,0.415480256080627,0.885397613048553,0.234036833047867,0.401618927717209,0.96662175655365,0.153387770056725,0.205218374729156,0.922278165817261,0.183078601956367,0.340419232845306,0.870097935199738,0.102833516895771,0.482032060623169,0.980856478214264,0.0318705588579178,0.192106366157532,0.96662175655365,0.153387770056725,0.205218374729156,0.885397613048553,0.234036833047867,0.401618927717209,0.43553838133812,0.174102976918221,0.883172988891602,0.534866094589233,0.53300929069519,0.655606091022491,0.897598922252655,-0.0851877480745316,0.432503432035446,0.804244041442871,-0.107830874621868,0.584434807300568,\n0.43553838133812,0.174102976918221,0.883172988891602,0.102224595844746,0.498050421476364,0.861101567745209,0.534866094589233,0.53300929069519,0.655606091022491,0.43553838133812,0.174102976918221,0.883172988891602,0.64728707075119,-0.269912004470825,0.712858319282532,0.409548729658127,0.024171682074666,0.911967992782593,0.102224595844746,0.498050421476364,0.861101567745209,0.43553838133812,0.174102976918221,0.883172988891602,0.409548729658127,0.024171682074666,0.911967992782593,0.31933718919754,0.337111681699753,0.885652005672455,0.933462917804718,0.164250507950783,0.318855404853821,0.800925850868225,0.226523146033287,0.554260790348053,0.783647418022156,0.339152276515961,0.520454108715057,0.915872991085052,0.226020276546478,0.33180034160614,0.975037813186646,0.14565335214138,0.167589843273163,0.966257035732269,0.139943510293961,0.216247826814651,0.933462917804718,0.164250507950783,0.318855404853821,0.915872991085052,0.226020276546478,0.33180034160614,0.965288519859314,0.151292905211449,0.212904900312424,0.601098597049713,0.0911194980144501,0.793963313102722,0.583943843841553,0.131935343146324,0.801001012325287,0.596563339233398,-0.0223739240318537,0.8022540807724,0.655191659927368,0.0146637577563524,0.755320370197296,0.235940769314766,-0.737428665161133,0.632875144481659,0.270446568727493,-0.724654376506805,0.633825421333313,0.0997758805751801,-0.76704877614975,0.633782982826233,0.0527103617787361,-0.77695095539093,0.627350628376007,0.821304857730865,-0.558016240596771,0.118643142282963,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.93299263715744,-0.32493382692337,0.154734432697296,0.923712968826294,-0.295430272817612,0.243875607848167,0.80888158082962,-0.583779513835907,-0.0700862184166908,0.926652431488037,-0.373704701662064,0.0407436527311802,0.93299263715744,-0.32493382692337,0.154734432697296,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.96362441778183,-0.210319370031357,0.16490513086319,0.947748720645905,-0.180222257971764,0.263234436511993,0.93299263715744,-0.32493382692337,0.154734432697296,\n0.926652431488037,-0.373704701662064,0.0407436527311802,0.945337653160095,-0.174788698554039,0.275292009115219,0.923712968826294,-0.295430272817612,0.243875607848167,0.93299263715744,-0.32493382692337,0.154734432697296,0.947748720645905,-0.180222257971764,0.263234436511993,0.742792665958405,-0.550313711166382,0.381331622600555,0.657656788825989,-0.727221310138702,0.196562394499779,0.64417177438736,-0.7592693567276,0.0924808010458946,0.803535997867584,-0.553550720214844,0.2188870459795,0.639384806156158,-0.761013865470886,0.109749406576157,0.575045108795166,-0.818020403385162,0.0128742791712284,0.64417177438736,-0.7592693567276,0.0924808010458946,0.657656788825989,-0.727221310138702,0.196562394499779,0.537862658500671,-0.839294493198395,-0.0793002098798752,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.64417177438736,-0.7592693567276,0.0924808010458946,0.575045108795166,-0.818020403385162,0.0128742791712284,0.821304857730865,-0.558016240596771,0.118643142282963,0.803535997867584,-0.553550720214844,0.2188870459795,0.64417177438736,-0.7592693567276,0.0924808010458946,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.560910940170288,-0.546258211135864,0.622077882289886,0.301303088665009,-0.716448962688446,0.629219651222229,0.275670319795609,-0.347558110952377,0.896219432353973,0.432139188051224,-0.378973364830017,0.818312227725983,0.275670319795609,-0.347558110952377,0.896219432353973,0.254473268985748,-0.0765668898820877,0.964044034481049,0.416703939437866,-0.0255245417356491,0.908683836460114,0.432139188051224,-0.378973364830017,0.818312227725983,0.981637835502625,-0.188382476568222,0.0299864616245031,0.946312725543976,-0.198392629623413,-0.255210876464844,0.976300895214081,-0.175593838095665,-0.126504495739937,0.976429760456085,-0.14936164021492,0.155807659029961,0.981637835502625,-0.188382476568222,0.0299864616245031,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.766620635986328,-0.390746057033539,-0.509519696235657,0.946312725543976,-0.198392629623413,-0.255210876464844,0.688574373722076,-0.431850165128708,0.58255535364151,\n0.731416404247284,-0.417625606060028,0.539090871810913,0.640114009380341,-0.360243141651154,0.678585946559906,0.586388051509857,-0.415063470602036,0.695608615875244,0.515636503696442,-0.41490975022316,0.749645829200745,0.680992484092712,-0.305005490779877,0.665748357772827,0.629800915718079,-0.358788877725601,0.68892765045166,0.550090253353119,-0.357467710971832,0.754730105400085,0.613220632076263,-0.373373091220856,0.696098387241364,0.523068964481354,-0.400331109762192,0.752418637275696,0.609544932842255,-0.541187822818756,0.579284608364105,0.584165692329407,-0.333255082368851,0.740061819553375,0.510522961616516,-0.392942905426025,0.764828205108643,0.504154682159424,-0.548682808876038,0.666914701461792,0.609544932842255,-0.541187822818756,0.579284608364105,0.504154682159424,-0.548682808876038,0.666914701461792,0.572291314601898,-0.52212518453598,0.632351100444794,0.629647791385651,-0.52997088432312,0.568044483661652,0.731416404247284,-0.417625606060028,0.539090871810913,0.73811411857605,-0.426667273044586,0.522630453109741,0.831848502159119,-0.322033703327179,0.452020287513733,0.842584788799286,-0.21356026828289,0.494411617517471,0.640114009380341,-0.360243141651154,0.678585946559906,0.731416404247284,-0.417625606060028,0.539090871810913,0.842584788799286,-0.21356026828289,0.494411617517471,0.770362615585327,0.0158082563430071,0.63740998506546,0.536214470863342,0.394264131784439,0.746344327926636,0.595219552516937,0.51872980594635,0.613704323768616,0.267601639032364,0.585238754749298,0.765431225299835,0.253624588251114,0.428919792175293,0.867007732391357,0.267601639032364,0.585238754749298,0.765431225299835,0.595219552516937,0.51872980594635,0.613704323768616,0.688724040985107,0.428849041461945,0.584591865539551,0.279262810945511,0.544022977352142,0.791234016418457,0.0581676289439201,0.571192860603333,0.818752288818359,0.0604556538164616,0.606487095355988,0.792791604995728,0.267601639032364,0.585238754749298,0.765431225299835,0.279262810945511,0.544022977352142,0.791234016418457,0.0497331917285919,0.445011228322983,0.894142985343933,\n0.253624588251114,0.428919792175293,0.867007732391357,0.267601639032364,0.585238754749298,0.765431225299835,0.0604556538164616,0.606487095355988,0.792791604995728,0.786049902439117,0.275353401899338,0.553449213504791,0.912213087081909,0.0526493825018406,0.406319200992584,0.915872991085052,0.226020276546478,0.33180034160614,0.783647418022156,0.339152276515961,0.520454108715057,0.926979184150696,-0.0986248403787613,0.36191537976265,0.965288519859314,0.151292905211449,0.212904900312424,0.915872991085052,0.226020276546478,0.33180034160614,0.912213087081909,0.0526493825018406,0.406319200992584,0.289565563201904,-0.362892955541611,0.885697722434998,0.0666661337018013,-0.827535629272461,0.557440996170044,0.198447287082672,-0.827921032905579,0.524562180042267,0.173318073153496,-0.274096310138702,0.945955634117126,0.198447287082672,-0.827921032905579,0.524562180042267,0.0666661337018013,-0.827535629272461,0.557440996170044,-0.021647073328495,-0.960853159427643,0.276211261749268,-0.036917757242918,-0.99125212430954,0.126713573932648,0.168408244848251,-0.974918007850647,0.145511314272881,-0.199777901172638,-0.484420716762543,0.851719081401825,-0.0233143605291843,-0.495335191488266,0.868389010429382,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.136760428547859,-0.195085763931274,0.971204459667206,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.199777901172638,-0.484420716762543,0.851719081401825,-0.136760428547859,-0.195085763931274,0.971204459667206,-0.0214409474283457,-0.17113696038723,0.985013961791992,0.533053755760193,0.0411353260278702,0.845080852508545,0.437306433916092,-0.371932566165924,0.818797469139099,0.640114009380341,-0.360243141651154,0.678585946559906,0.770362615585327,0.0158082563430071,0.63740998506546,0.754335284233093,-0.305042564868927,0.581315159797668,0.771643459796906,-0.219248831272125,0.597073137760162,0.861247181892395,-0.192313641309738,0.470392137765884,0.838417947292328,-0.244426995515823,0.487145572900772,0.771643459796906,-0.219248831272125,0.597073137760162,0.754335284233093,-0.305042564868927,0.581315159797668,\n0.71972918510437,-0.325454443693161,0.613244891166687,0.677804887294769,-0.293700158596039,0.674033224582672,0.510522961616516,-0.392942905426025,0.764828205108643,0.494429767131805,-0.0934201404452324,0.864182770252228,0.32480525970459,-0.177078545093536,0.929055869579315,0.385615348815918,-0.420324206352234,0.821357607841492,0.494429767131805,-0.0934201404452324,0.864182770252228,0.510522961616516,-0.392942905426025,0.764828205108643,0.584165692329407,-0.333255082368851,0.740061819553375,0.550924062728882,0.0100475419312716,0.834494948387146,0.254473268985748,-0.0765668898820877,0.964044034481049,0.275670319795609,-0.347558110952377,0.896219432353973,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.0214409474283457,-0.17113696038723,0.985013961791992,0.301303088665009,-0.716448962688446,0.629219651222229,-0.00210810895077884,-0.784596800804138,0.620002746582031,-0.0337620861828327,-0.434601843357086,0.899989664554596,0.275670319795609,-0.347558110952377,0.896219432353973,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.199777901172638,-0.484420716762543,0.851719081401825,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.949343860149384,0.194382473826408,0.246904209256172,0.952320516109467,0.113910689949989,0.283037096261978,0.935723841190338,0.105225577950478,0.336672723293304,0.960835516452789,0.146968066692352,0.234937101602554,0.952320516109467,0.113910689949989,0.283037096261978,0.937154471874237,-0.0475939512252808,0.345653474330902,0.916476547718048,0.0582267269492149,0.395828783512115,0.935723841190338,0.105225577950478,0.336672723293304,0.954735457897186,-0.0869630351662636,0.284460365772247,0.976793885231018,-0.16974413394928,0.13061648607254,0.830796539783478,-0.141607835888863,0.538260519504547,0.797767400741577,-0.104994267225266,0.593753576278687,0.976793885231018,-0.16974413394928,0.13061648607254,0.984028935432434,-0.172777280211449,0.042837880551815,0.846625864505768,-0.12819692492485,0.516517341136932,0.830796539783478,-0.141607835888863,0.538260519504547,\n0.792236804962158,-0.0960670188069344,0.602604329586029,0.702580511569977,0.00276018492877483,0.711598932743073,0.683284997940063,0.154697299003601,0.713575720787048,0.756793797016144,-0.0805434510111809,0.64867240190506,0.0903236120939255,-0.645915448665619,0.758046746253967,0.047360323369503,-0.552981853485107,0.831846177577972,0.11539563536644,-0.528798937797546,0.840865969657898,-0.0214409474283457,-0.17113696038723,0.985013961791992,-0.0292664598673582,0.127957031130791,0.991347789764404,0.182319968938828,0.114501133561134,0.976549506187439,0.254473268985748,-0.0765668898820877,0.964044034481049,0.908188223838806,0.15894940495491,0.387206882238388,0.874416053295136,-0.00546242296695709,0.485146045684814,0.787108600139618,0.00810690317302942,0.616761207580566,0.864675521850586,0.193993464112282,0.46336030960083,0.908188223838806,0.15894940495491,0.387206882238388,0.787108600139618,0.00810690317302942,0.616761207580566,0.793840944766998,0.179479137063026,0.581036806106567,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.820341229438782,-0.113342881202698,0.560529828071594,0.855769634246826,-0.0943452939391136,0.508681952953339,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.855769634246826,-0.0943452939391136,0.508681952953339,0.846625864505768,-0.12819692492485,0.516517341136932,0.984028935432434,-0.172777280211449,0.042837880551815,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.65490597486496,0.140991285443306,0.742441654205322,0.736574053764343,-0.0243753399699926,0.675917506217957,0.46117314696312,-0.0281441453844309,0.886863708496094,0.313594281673431,0.139182701706886,0.939301192760468,0.736574053764343,-0.0243753399699926,0.675917506217957,0.797767400741577,-0.104994267225266,0.593753576278687,0.542096614837646,-0.0831166654825211,0.836195468902588,0.46117314696312,-0.0281441453844309,0.886863708496094,0.0600041374564171,-0.192453533411026,0.979469835758209,0.191416949033737,-0.0921172648668289,0.977176547050476,0.182319968938828,0.114501133561134,0.976549506187439,-0.0292664598673582,0.127957031130791,0.991347789764404,\n0.85977029800415,0.296936422586441,0.415480256080627,0.821655750274658,0.296962469816208,0.486513197422028,0.750506460666656,0.343903452157974,0.564331829547882,0.720846891403198,0.393656641244888,0.570450901985168,0.773433268070221,0.347118884325027,0.53038614988327,0.750506460666656,0.343903452157974,0.564331829547882,0.821655750274658,0.296962469816208,0.486513197422028,0.410660326480865,0.0589907094836235,0.909878134727478,0.33416548371315,0.26105335354805,0.905640423297882,0.55342048406601,0.140735372900963,0.820925891399384,0.503296196460724,0.0546823143959045,0.862382054328918,0.400608420372009,-0.480024576187134,0.780441761016846,0.656731724739075,-0.381447851657867,0.650538980960846,0.678119361400604,-0.318360239267349,0.662420451641083,0.378649204969406,-0.51500403881073,0.769022524356842,0.0272070206701756,0.178279355168343,0.983603715896606,0.0931223928928375,0.201938465237617,0.97496110200882,0.0304032936692238,0.174695551395416,0.984152972698212,0.0284836571663618,0.148866042494774,0.988447070121765,0.0931223928928375,0.201938465237617,0.97496110200882,0.163330301642418,0.241669088602066,0.956514120101929,0.0344220362603664,0.22930283844471,0.972746253013611,0.0304032936692238,0.174695551395416,0.984152972698212,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.996031820774078,-0.0883952453732491,0.0103418976068497,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.984028935432434,-0.172777280211449,0.042837880551815,0.990583539009094,-0.136551707983017,0.0098949521780014,0.996031820774078,-0.0883952453732491,0.0103418976068497,0.921219646930695,-0.0589233264327049,0.384554862976074,0.727879226207733,-0.243267610669136,0.641102731227875,0.710833370685577,-0.195758193731308,0.675569832324982,0.909473538398743,-0.0684049502015114,0.410095930099487,0.651034355163574,-0.303375482559204,0.695785582065582,0.645662844181061,-0.29273384809494,0.705284595489502,0.710833370685577,-0.195758193731308,0.675569832324982,\n0.727879226207733,-0.243267610669136,0.641102731227875,0.623109459877014,-0.205047786235809,0.754778146743774,0.705142974853516,-0.157100901007652,0.691442430019379,0.710833370685577,-0.195758193731308,0.675569832324982,0.645662844181061,-0.29273384809494,0.705284595489502,0.9190753698349,-0.11298330873251,0.377538323402405,0.909473538398743,-0.0684049502015114,0.410095930099487,0.710833370685577,-0.195758193731308,0.675569832324982,0.705142974853516,-0.157100901007652,0.691442430019379,0.886316955089569,0.0816843584179878,0.455817818641663,0.841468989849091,0.227338507771492,0.490150064229965,0.813554108142853,0.0718955099582672,0.577027499675751,0.771234273910522,0.123447246849537,0.62446653842926,0.813554108142853,0.0718955099582672,0.577027499675751,0.832460403442383,-0.0762069076299667,0.548818945884705,0.825742661952972,-0.0501102656126022,0.561816692352295,0.832460403442383,-0.0762069076299667,0.548818945884705,0.813554108142853,0.0718955099582672,0.577027499675751,0.841468989849091,0.227338507771492,0.490150064229965,0.853365004062653,0.0768043100833893,0.515625178813934,0.813554108142853,0.0718955099582672,0.577027499675751,0.825742661952972,-0.0501102656126022,0.561816692352295,0.802095234394073,-0.0203569829463959,0.596849083900452,0.771234273910522,0.123447246849537,0.62446653842926,0.85977029800415,0.296936422586441,0.415480256080627,0.720846891403198,0.393656641244888,0.570450901985168,0.698984086513519,0.246289730072021,0.671388566493988,0.885397613048553,0.234036833047867,0.401618927717209,0.698984086513519,0.246289730072021,0.671388566493988,0.642289221286774,0.115071445703506,0.757775127887726,0.870097935199738,0.102833516895771,0.482032060623169,0.885397613048553,0.234036833047867,0.401618927717209,0.115422785282135,-0.952069759368896,0.283268004655838,0.164180904626846,-0.958690702915192,0.232285901904106,0.171536713838577,-0.946371257305145,0.273782074451447,0.0454688854515553,-0.765503704547882,0.641822934150696,0.225757539272308,-0.896350860595703,0.381560862064362,0.164180904626846,-0.958690702915192,0.232285901904106,\n0.115422785282135,-0.952069759368896,0.283268004655838,0.194313436746597,-0.80370157957077,0.562410891056061,0.72280216217041,-0.137790024280548,0.677178680896759,0.76386970281601,-0.0586191527545452,0.642702758312225,0.628606140613556,-0.0929744690656662,0.77214640378952,0.605580151081085,-0.127637818455696,0.785481572151184,0.826119303703308,-0.120154865086079,0.550535798072815,0.85496574640274,-0.0235987044870853,0.518147349357605,0.76386970281601,-0.0586191527545452,0.642702758312225,0.72280216217041,-0.137790024280548,0.677178680896759,0.900704562664032,-0.383264392614365,0.204547420144081,0.916550815105438,-0.369929283857346,0.151943743228912,0.933318138122559,-0.313118785619736,0.175709679722786,0.903808772563934,-0.380508303642273,0.19581413269043,0.934174954891205,-0.332788705825806,0.128719761967659,0.926874995231628,-0.321304202079773,0.194078236818314,0.933318138122559,-0.313118785619736,0.175709679722786,0.916550815105438,-0.369929283857346,0.151943743228912,0.918524086475372,-0.00282709067687392,0.395354956388474,0.96756237745285,-0.0955442041158676,0.233868315815926,0.933318138122559,-0.313118785619736,0.175709679722786,0.926874995231628,-0.321304202079773,0.194078236818314,0.629800915718079,-0.358788877725601,0.68892765045166,0.550090253353119,-0.357467710971832,0.754730105400085,0.523068964481354,-0.400331109762192,0.752418637275696,0.515636503696442,-0.41490975022316,0.749645829200745,0.226486593484879,0.604172766208649,-0.76398891210556,0.853913903236389,0.342162936925888,-0.392116755247116,0.76568216085434,0.0699278339743614,-0.639406681060791,0.152718812227249,0.346232503652573,-0.925634920597076,0.962022840976715,-0.137412339448929,0.235859960317612,0.952154934406281,-0.291899025440216,0.0905317366123199,0.76568216085434,0.0699278339743614,-0.639406681060791,0.853913903236389,0.342162936925888,-0.392116755247116,0.76568216085434,0.0699278339743614,-0.639406681060791,0.952154934406281,-0.291899025440216,0.0905317366123199,0.888055205345154,-0.428246527910233,-0.167221024632454,0.658207952976227,-0.19222703576088,-0.727881193161011,\n0.152718812227249,0.346232503652573,-0.925634920597076,0.76568216085434,0.0699278339743614,-0.639406681060791,0.658207952976227,-0.19222703576088,-0.727881193161011,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.941693007946014,-0.139167279005051,-0.30634418129921,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.658207952976227,-0.19222703576088,-0.727881193161011,0.888055205345154,-0.428246527910233,-0.167221024632454,0.961935639381409,0.00657567568123341,0.273196935653687,0.997385084629059,0.0175571031868458,0.0701054036617279,0.987097263336182,-0.0312144737690687,0.157049849629402,0.947793483734131,-0.0109208915382624,0.318697780370712,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.995871722698212,-0.0808055028319359,0.041352104395628,0.987097263336182,-0.0312144737690687,0.157049849629402,0.997385084629059,0.0175571031868458,0.0701054036617279,0.807750403881073,-0.224028185009956,0.545298755168915,0.94478839635849,-0.0280621573328972,0.326477229595184,0.949546575546265,-0.188553437590599,0.250617027282715,0.895655035972595,-0.253568202257156,0.365383625030518,0.691827952861786,-0.359834015369415,0.626013994216919,0.807750403881073,-0.224028185009956,0.545298755168915,0.895655035972595,-0.253568202257156,0.365383625030518,0.780404269695282,-0.392066359519959,0.487086415290833,0.651034355163574,-0.303375482559204,0.695785582065582,0.727879226207733,-0.243267610669136,0.641102731227875,0.807750403881073,-0.224028185009956,0.545298755168915,0.691827952861786,-0.359834015369415,0.626013994216919,0.921219646930695,-0.0589233264327049,0.384554862976074,0.94478839635849,-0.0280621573328972,0.326477229595184,0.807750403881073,-0.224028185009956,0.545298755168915,0.727879226207733,-0.243267610669136,0.641102731227875,0.511712968349457,-0.26713839173317,0.816570222377777,0.630171060562134,-0.220097869634628,0.744608163833618,0.663574039936066,-0.114788979291916,0.739251613616943,0.477897197008133,-0.208041027188301,0.853424370288849,0.663574039936066,-0.114788979291916,0.739251613616943,\n0.630171060562134,-0.220097869634628,0.744608163833618,0.662703216075897,-0.235535204410553,0.710878074169159,0.585816919803619,-0.176041945815086,0.791092753410339,0.443824082612991,-0.204101487994194,0.872561037540436,0.477897197008133,-0.208041027188301,0.853424370288849,0.663574039936066,-0.114788979291916,0.739251613616943,0.655753970146179,-0.0819050073623657,0.750518679618835,0.634909212589264,-0.137729376554489,0.760211110115051,0.705349028110504,-0.217919707298279,0.674532234668732,0.899602174758911,-0.197590529918671,0.389453411102295,0.844319820404053,-0.143771529197693,0.51619154214859,0.899602174758911,-0.197590529918671,0.389453411102295,0.945337653160095,-0.174788698554039,0.275292009115219,0.941718637943268,-0.180898189544678,0.283622801303864,0.844319820404053,-0.143771529197693,0.51619154214859,0.993362247943878,-0.0349664911627769,0.109584823250771,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.996031820774078,-0.0883952453732491,0.0103418976068497,0.98517507314682,-0.0804919600486755,0.151496455073357,0.996031820774078,-0.0883952453732491,0.0103418976068497,0.990583539009094,-0.136551707983017,0.0098949521780014,0.98186069726944,-0.153709232807159,0.111008986830711,0.98517507314682,-0.0804919600486755,0.151496455073357,0.663574039936066,-0.114788979291916,0.739251613616943,0.585816919803619,-0.176041945815086,0.791092753410339,0.501314342021942,-0.180266559123993,0.846278846263886,0.655753970146179,-0.0819050073623657,0.750518679618835,0.838521242141724,-0.431514054536819,-0.332682609558105,0.882519364356995,-0.329183042049408,-0.335854291915894,0.918742716312408,-0.362510144710541,-0.15651923418045,0.828101873397827,-0.525332391262054,-0.195635288953781,0.927650630474091,-0.232570663094521,-0.292190253734589,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.918742716312408,-0.362510144710541,-0.15651923418045,0.882519364356995,-0.329183042049408,-0.335854291915894,0.96362441778183,-0.210319370031357,0.16490513086319,0.926652431488037,-0.373704701662064,0.0407436527311802,0.918742716312408,-0.362510144710541,-0.15651923418045,\n0.970975339412689,-0.224040895700455,-0.0837406069040298,0.80888158082962,-0.583779513835907,-0.0700862184166908,0.828101873397827,-0.525332391262054,-0.195635288953781,0.918742716312408,-0.362510144710541,-0.15651923418045,0.926652431488037,-0.373704701662064,0.0407436527311802,-0.147914990782738,0.17213037610054,0.973905682563782,0.100095093250275,0.182193845510483,0.978154599666595,-0.0552638620138168,0.347488284111023,0.936054348945618,0.00455546798184514,0.298394352197647,0.954431772232056,-0.147914990782738,0.17213037610054,0.973905682563782,-0.220686122775078,-0.040834903717041,0.974489688873291,0.106603257358074,0.0133492052555084,0.994212031364441,0.100095093250275,0.182193845510483,0.978154599666595,0.970759510993958,-0.233238592743874,0.056795421987772,0.976300895214081,-0.175593838095665,-0.126504495739937,0.847399115562439,-0.142815440893173,-0.511388719081879,0.863667845726013,-0.255664467811584,-0.434411734342575,-0.0528050363063812,-0.813004612922668,0.579857885837555,0.270428031682968,-0.84670215845108,0.458218395709991,0.0610353648662567,-0.966653764247894,-0.248707070946693,-0.0787478685379028,-0.96028345823288,-0.26768359541893,0.900704562664032,-0.383264392614365,0.204547420144081,0.893001258373261,-0.370285004377365,0.255807995796204,0.895655035972595,-0.253568202257156,0.365383625030518,0.949546575546265,-0.188553437590599,0.250617027282715,0.810256838798523,-0.430587977170944,0.397590130567551,0.780404269695282,-0.392066359519959,0.487086415290833,0.895655035972595,-0.253568202257156,0.365383625030518,0.893001258373261,-0.370285004377365,0.255807995796204,-0.0776756703853607,-0.921032607555389,-0.381661415100098,-0.0787478685379028,-0.96028345823288,-0.26768359541893,0.0610353648662567,-0.966653764247894,-0.248707070946693,0.0540894381701946,-0.932692110538483,-0.35659471154213,-0.0776756703853607,-0.921032607555389,-0.381661415100098,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.0587443448603153,-0.922947645187378,-0.380416542291641,-0.0771657377481461,-0.907520055770874,-0.412859290838242,\n0.944392323493958,0.0710759162902832,0.321047365665436,0.991146802902222,-0.0709943845868111,0.112195692956448,0.976793885231018,-0.16974413394928,0.13061648607254,0.954735457897186,-0.0869630351662636,0.284460365772247,0.991146802902222,-0.0709943845868111,0.112195692956448,0.990583539009094,-0.136551707983017,0.0098949521780014,0.984028935432434,-0.172777280211449,0.042837880551815,0.976793885231018,-0.16974413394928,0.13061648607254,-0.00140566960908473,-0.234566405415535,0.97209906578064,0.312136799097061,-0.241864830255508,0.918733894824982,0.359973400831223,-0.258122891187668,0.896544337272644,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.359973400831223,-0.258122891187668,0.896544337272644,0.402891218662262,-0.177310451865196,0.897908508777618,0.00449910387396812,-0.161412835121155,0.986876726150513,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.115422785282135,-0.952069759368896,0.283268004655838,0.0454688854515553,-0.765503704547882,0.641822934150696,0.00267285062000155,-0.590106904506683,0.807320654392242,-0.0352796316146851,-0.824001550674438,0.565488159656525,0.0416775047779083,-0.927180886268616,0.372288316488266,0.949846565723419,-0.197867274284363,0.242157250642776,0.96362441778183,-0.210319370031357,0.16490513086319,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.986409723758698,-0.164261862635612,-0.00372203509323299,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.927650630474091,-0.232570663094521,-0.292190253734589,0.965724050998688,-0.163102030754089,-0.201927617192268,0.986409723758698,-0.164261862635612,-0.00372203509323299,0.00449910387396812,-0.161412835121155,0.986876726150513,0.402891218662262,-0.177310451865196,0.897908508777618,0.414358675479889,-0.126704558730125,0.901250720024109,0.0111285699531436,-0.0777815505862236,0.9969083070755,0.414358675479889,-0.126704558730125,0.901250720024109,0.387449771165848,-0.245748713612556,0.888532638549805,0.00655650394037366,-0.135652124881744,0.990734815597534,0.0111285699531436,-0.0777815505862236,0.9969083070755,\n0.928761661052704,-0.0844941884279251,0.360918909311295,0.993277549743652,-0.10496261715889,0.0488112159073353,0.985052049160004,-0.113364338874817,0.129696041345596,0.90520966053009,-0.162895515561104,0.392505496740341,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.99903529882431,-0.0258715786039829,-0.035483431071043,0.985052049160004,-0.113364338874817,0.129696041345596,0.993277549743652,-0.10496261715889,0.0488112159073353,0.940188527107239,-0.340047240257263,0.0203306917101145,0.90520966053009,-0.162895515561104,0.392505496740341,0.985052049160004,-0.113364338874817,0.129696041345596,-0.529633462429047,-0.0744152963161469,-0.844956040382385,-0.426414966583252,0.120833218097687,-0.896420419216156,-0.572411417961121,0.114080429077148,-0.81199187040329,-0.568153619766235,-0.0387567244470119,-0.822009384632111,-0.426414966583252,0.120833218097687,-0.896420419216156,-0.421522259712219,0.257120847702026,-0.869602143764496,-0.593829154968262,0.197740450501442,-0.77991384267807,-0.572411417961121,0.114080429077148,-0.81199187040329,0.677804887294769,-0.293700158596039,0.674033224582672,0.71972918510437,-0.325454443693161,0.613244891166687,0.659502923488617,-0.421348959207535,0.622511804103851,0.598259091377258,-0.415802270174026,0.684977769851685,0.918524086475372,-0.00282709067687392,0.395354956388474,0.952345132827759,-0.057124700397253,0.299625486135483,0.935723841190338,0.105225577950478,0.336672723293304,0.916476547718048,0.0582267269492149,0.395828783512115,0.952345132827759,-0.057124700397253,0.299625486135483,0.987058341503143,-0.0681737512350082,0.145148620009422,0.960835516452789,0.146968066692352,0.234937101602554,0.935723841190338,0.105225577950478,0.336672723293304,0.94987964630127,-0.0038351418916136,0.312592297792435,0.910945057868958,-0.218233183026314,0.35007631778717,0.980899035930634,0.0846881344914436,0.175114318728447,0.96669465303421,0.168093785643578,0.192991986870766,0.928288996219635,-0.0903030559420586,0.360728323459625,0.974559843540192,0.0402764715254307,0.220478907227516,0.980899035930634,0.0846881344914436,0.175114318728447,\n0.910945057868958,-0.218233183026314,0.35007631778717,0.949343860149384,0.194382473826408,0.246904209256172,0.953015685081482,0.205261945724487,0.222774803638458,0.972302615642548,0.043654702603817,0.229612305760384,0.94987964630127,-0.0038351418916136,0.312592297792435,0.953015685081482,0.205261945724487,0.222774803638458,0.970540165901184,0.124821022152901,0.206086173653603,0.966708958148956,-0.002308584516868,0.255868047475815,0.972302615642548,0.043654702603817,0.229612305760384,0.970540165901184,0.124821022152901,0.206086173653603,0.953015685081482,0.205261945724487,0.222774803638458,0.974692046642303,0.140635088086128,0.17377345263958,0.974692046642303,0.140635088086128,0.17377345263958,0.953015685081482,0.205261945724487,0.222774803638458,0.949343860149384,0.194382473826408,0.246904209256172,0.960835516452789,0.146968066692352,0.234937101602554,0.937154471874237,-0.0475939512252808,0.345653474330902,0.952320516109467,0.113910689949989,0.283037096261978,0.96669465303421,0.168093785643578,0.192991986870766,0.980852127075195,0.00218713283538818,0.194741636514664,0.952320516109467,0.113910689949989,0.283037096261978,0.949343860149384,0.194382473826408,0.246904209256172,0.94987964630127,-0.0038351418916136,0.312592297792435,0.96669465303421,0.168093785643578,0.192991986870766,-0.875516295433044,0.353666007518768,-0.329228729009628,-0.560936093330383,0.519313037395477,-0.644720613956451,-0.598032653331757,0.367280632257462,-0.712363600730896,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.534112751483917,0.714107155799866,-0.452520221471787,-0.560936093330383,0.519313037395477,-0.644720613956451,-0.875516295433044,0.353666007518768,-0.329228729009628,0.420062124729156,-0.858003616333008,0.295596987009048,0.562851548194885,-0.792488932609558,0.23486053943634,-0.032355971634388,-0.99692964553833,0.0713044255971909,-0.036917757242918,-0.99125212430954,0.126713573932648,0.420062124729156,-0.858003616333008,0.295596987009048,-0.036917757242918,-0.99125212430954,0.126713573932648,-0.021647073328495,-0.960853159427643,0.276211261749268,\n0.176858365535736,-0.897578120231628,0.403824985027313,0.838521242141724,-0.431514054536819,-0.332682609558105,0.777718842029572,-0.48187255859375,-0.403673440217972,0.82772159576416,-0.350066870450974,-0.438554704189301,0.882519364356995,-0.329183042049408,-0.335854291915894,0.82772159576416,-0.350066870450974,-0.438554704189301,0.777718842029572,-0.48187255859375,-0.403673440217972,0.756419658660889,-0.554076313972473,-0.347604215145111,0.836000919342041,-0.399822771549225,-0.375824630260468,0.863667845726013,-0.255664467811584,-0.434411734342575,0.867056906223297,-0.245093911886215,-0.433752596378326,0.82772159576416,-0.350066870450974,-0.438554704189301,0.836000919342041,-0.399822771549225,-0.375824630260468,0.927650630474091,-0.232570663094521,-0.292190253734589,0.882519364356995,-0.329183042049408,-0.335854291915894,0.82772159576416,-0.350066870450974,-0.438554704189301,0.867056906223297,-0.245093911886215,-0.433752596378326,0.840808868408203,-0.369773417711258,0.395358175039291,0.920036554336548,-0.30953249335289,0.240254893898964,0.836000919342041,-0.399822771549225,-0.375824630260468,0.756419658660889,-0.554076313972473,-0.347604215145111,0.970759510993958,-0.233238592743874,0.056795421987772,0.863667845726013,-0.255664467811584,-0.434411734342575,0.836000919342041,-0.399822771549225,-0.375824630260468,0.920036554336548,-0.30953249335289,0.240254893898964,0.578185617923737,-0.0845057815313339,0.811517179012299,0.345462441444397,-0.298967152833939,0.889536023139954,0.288461953401566,-0.251531571149826,0.923862278461456,0.285702854394913,-0.151269629597664,0.946304082870483,0.288461953401566,-0.251531571149826,0.923862278461456,0.288555771112442,-0.2911037504673,0.912137150764465,0.189583629369736,-0.286395132541656,0.939167618751526,0.535101175308228,-0.00626787729561329,0.844764709472656,0.578185617923737,-0.0845057815313339,0.811517179012299,0.288461953401566,-0.251531571149826,0.923862278461456,0.285702854394913,-0.151269629597664,0.946304082870483,0.748473048210144,-0.374994337558746,0.546961903572083,\n0.755906164646149,-0.2192542552948,0.616873919963837,0.409548729658127,0.024171682074666,0.911967992782593,0.64728707075119,-0.269912004470825,0.712858319282532,0.728204727172852,-0.0192169677466154,0.685090184211731,0.31933718919754,0.337111681699753,0.885652005672455,0.409548729658127,0.024171682074666,0.911967992782593,0.755906164646149,-0.2192542552948,0.616873919963837,0.152718812227249,0.346232503652573,-0.925634920597076,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.611288368701935,0.178437694907188,-0.771029531955719,0.88115268945694,0.072045162320137,-0.467310845851898,0.710636675357819,0.109640218317509,-0.694963693618774,0.941693007946014,-0.139167279005051,-0.30634418129921,0.611288368701935,0.178437694907188,-0.771029531955719,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.849067807197571,-0.235355824232101,-0.472960323095322,0.898844718933105,-0.132514029741287,-0.417753785848618,0.930897831916809,-0.328699737787247,0.15932896733284,0.922981798648834,-0.320070415735245,0.213681027293205,0.898844718933105,-0.132514029741287,-0.417753785848618,0.954277276992798,-0.00887809786945581,-0.298790961503983,0.921016693115234,-0.344745218753815,0.181325793266296,0.930897831916809,-0.328699737787247,0.15932896733284,0.619684100151062,-0.672098994255066,0.405307918787003,0.749665677547455,-0.55081570148468,0.366883426904678,0.710340082645416,-0.399401605129242,0.57956475019455,0.590675473213196,-0.574259579181671,0.566858351230621,0.749665677547455,-0.55081570148468,0.366883426904678,0.924175441265106,0.249484479427338,0.28923562169075,0.849923014640808,0.0266168173402548,0.526234149932861,0.710340082645416,-0.399401605129242,0.57956475019455,0.837971806526184,-0.0177910327911377,0.545423448085785,0.812450289726257,-0.238335385918617,0.532090902328491,0.877821445465088,-0.28317603468895,0.386317104101181,0.812450289726257,-0.238335385918617,0.532090902328491,0.718032777309418,-0.160360962152481,0.677283763885498,0.442805558443069,-0.711188673973084,0.546016395092011,0.442805558443069,-0.711188673973084,0.546016395092011,\n0.648021519184113,-0.726138114929199,0.229764148592949,0.877821445465088,-0.28317603468895,0.386317104101181,0.812450289726257,-0.238335385918617,0.532090902328491,0.877821445465088,-0.28317603468895,0.386317104101181,0.648021519184113,-0.726138114929199,0.229764148592949,0.770939111709595,-0.636473119258881,0.0235556345432997,0.908649146556854,-0.308447659015656,0.281454712152481,0.837971806526184,-0.0177910327911377,0.545423448085785,0.877821445465088,-0.28317603468895,0.386317104101181,0.908649146556854,-0.308447659015656,0.281454712152481,0.883517026901245,-0.041202936321497,0.46658331155777,0.955420434474945,-0.273161262273788,-0.112047769129276,0.819948792457581,-0.482310354709625,0.308319211006165,0.81360274553299,-0.323832809925079,0.482890188694,0.81360274553299,-0.323832809925079,0.482890188694,0.819948792457581,-0.482310354709625,0.308319211006165,0.776369571685791,-0.530167698860168,0.340840935707092,0.770434737205505,-0.328132152557373,0.546589076519012,0.856838226318359,0.0312061347067356,0.514640152454376,0.941693007946014,-0.139167279005051,-0.30634418129921,0.928679704666138,-0.214017242193222,0.30290362238884,0.856838226318359,0.0312061347067356,0.514640152454376,0.930178761482239,0.315359890460968,0.187924444675446,0.941693007946014,-0.139167279005051,-0.30634418129921,0.856838226318359,0.0312061347067356,0.514640152454376,0.732805073261261,0.230000048875809,0.640387892723084,0.930178761482239,0.315359890460968,0.187924444675446,0.766620635986328,-0.390746057033539,-0.509519696235657,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.0326823741197586,-0.96485161781311,-0.260755002498627,0.719214975833893,-0.430595219135284,-0.545268356800079,-0.797735512256622,-0.550144195556641,-0.246899589896202,-0.361367613077164,-0.930869936943054,0.0538017079234123,0.0326823741197586,-0.96485161781311,-0.260755002498627,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.442805558443069,-0.711188673973084,0.546016395092011,0.494343549013138,-0.783010900020599,0.377516150474548,0.0326823741197586,-0.96485161781311,-0.260755002498627,\n-0.361367613077164,-0.930869936943054,0.0538017079234123,0.940188527107239,-0.340047240257263,0.0203306917101145,0.719214975833893,-0.430595219135284,-0.545268356800079,0.0326823741197586,-0.96485161781311,-0.260755002498627,0.494343549013138,-0.783010900020599,0.377516150474548,0.442805558443069,-0.711188673973084,0.546016395092011,0.718032777309418,-0.160360962152481,0.677283763885498,0.494343549013138,-0.783010900020599,0.377516150474548,0.746549785137177,0.0205342527478933,0.665012657642365,0.785623669624329,-0.0282825529575348,0.61805784702301,0.718032777309418,-0.160360962152481,0.677283763885498,0.928761661052704,-0.0844941884279251,0.360918909311295,0.90520966053009,-0.162895515561104,0.392505496740341,0.718032777309418,-0.160360962152481,0.677283763885498,0.785623669624329,-0.0282825529575348,0.61805784702301,0.940188527107239,-0.340047240257263,0.0203306917101145,0.494343549013138,-0.783010900020599,0.377516150474548,0.718032777309418,-0.160360962152481,0.677283763885498,0.90520966053009,-0.162895515561104,0.392505496740341,0.728204727172852,-0.0192169677466154,0.685090184211731,0.683746635913849,0.227861896157265,0.693231225013733,0.220439016819,0.602273344993591,0.767250597476959,0.31933718919754,0.337111681699753,0.885652005672455,0.675026595592499,0.510915398597717,0.532263576984406,0.164532527327538,0.859674274921417,0.483620911836624,0.220439016819,0.602273344993591,0.767250597476959,0.683746635913849,0.227861896157265,0.693231225013733,0.164532527327538,0.859674274921417,0.483620911836624,0.675026595592499,0.510915398597717,0.532263576984406,0.689203560352325,0.677581548690796,0.256674349308014,0.168165519833565,0.971532881259918,0.166865915060043,0.164532527327538,0.859674274921417,0.483620911836624,0.168165519833565,0.971532881259918,0.166865915060043,-0.482280492782593,0.875927150249481,0.0125399529933929,-0.407276064157486,0.876896381378174,0.255301624536514,-0.598032653331757,0.367280632257462,-0.712363600730896,-0.560936093330383,0.519313037395477,-0.644720613956451,0.0532629415392876,0.673361361026764,-0.737392425537109,\n0.0157992169260979,0.392201274633408,-0.919743716716766,-0.534112751483917,0.714107155799866,-0.452520221471787,0.130885064601898,0.893452942371368,-0.429663747549057,0.0532629415392876,0.673361361026764,-0.737392425537109,-0.560936093330383,0.519313037395477,-0.644720613956451,0.771966874599457,0.597103416919708,-0.218024387955666,0.77188766002655,0.415448874235153,-0.481239676475525,0.0532629415392876,0.673361361026764,-0.737392425537109,0.130885064601898,0.893452942371368,-0.429663747549057,0.743491053581238,0.170196279883385,-0.64672577381134,0.0157992169260979,0.392201274633408,-0.919743716716766,0.0532629415392876,0.673361361026764,-0.737392425537109,0.77188766002655,0.415448874235153,-0.481239676475525,0.715653717517853,-0.159719884395599,-0.679948031902313,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.00643475539982319,0.176812067627907,-0.984223604202271,0.720991909503937,-0.0311141833662987,-0.692244589328766,-0.593829154968262,0.197740450501442,-0.77991384267807,-0.611508309841156,0.264030992984772,-0.7458855509758,0.00643475539982319,0.176812067627907,-0.984223604202271,0.0297790002077818,0.0396078526973724,-0.99877142906189,-0.598032653331757,0.367280632257462,-0.712363600730896,0.0157992169260979,0.392201274633408,-0.919743716716766,0.00643475539982319,0.176812067627907,-0.984223604202271,-0.611508309841156,0.264030992984772,-0.7458855509758,0.743491053581238,0.170196279883385,-0.64672577381134,0.720991909503937,-0.0311141833662987,-0.692244589328766,0.00643475539982319,0.176812067627907,-0.984223604202271,0.0157992169260979,0.392201274633408,-0.919743716716766,0.789831042289734,-0.580399453639984,-0.198251023888588,0.10502952337265,-0.714195668697357,-0.692021250724792,0.152815148234367,-0.51164585351944,-0.845497488975525,0.768442690372467,-0.500588834285736,-0.398631006479263,-0.690630912780762,-0.290166169404984,-0.662444412708282,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.152815148234367,-0.51164585351944,-0.845497488975525,0.10502952337265,-0.714195668697357,-0.692021250724792,\n-0.568153619766235,-0.0387567244470119,-0.822009384632111,0.129408821463585,-0.283919304609299,-0.950075387954712,0.152815148234367,-0.51164585351944,-0.845497488975525,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.741453766822815,-0.373992174863815,-0.557114124298096,0.768442690372467,-0.500588834285736,-0.398631006479263,0.152815148234367,-0.51164585351944,-0.845497488975525,0.129408821463585,-0.283919304609299,-0.950075387954712,-0.609373271465302,-0.198937028646469,-0.767520844936371,-0.77015894651413,-0.0879611894488335,-0.631757915019989,-0.529633462429047,-0.0744152963161469,-0.844956040382385,-0.568153619766235,-0.0387567244470119,-0.822009384632111,0.442805558443069,-0.711188673973084,0.546016395092011,-0.361367613077164,-0.930869936943054,0.0538017079234123,-0.13529472053051,-0.983780562877655,-0.117775782942772,0.648021519184113,-0.726138114929199,0.229764148592949,-0.797735512256622,-0.550144195556641,-0.246899589896202,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.13529472053051,-0.983780562877655,-0.117775782942772,-0.361367613077164,-0.930869936943054,0.0538017079234123,-0.13529472053051,-0.983780562877655,-0.117775782942772,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.748543560504913,-0.365974009037018,-0.55294269323349,0.0209639705717564,-0.893982887268066,-0.44761049747467,0.648021519184113,-0.726138114929199,0.229764148592949,-0.13529472053051,-0.983780562877655,-0.117775782942772,0.0209639705717564,-0.893982887268066,-0.44761049747467,0.770939111709595,-0.636473119258881,0.0235556345432997,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.797735512256622,-0.550144195556641,-0.246899589896202,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.621009290218353,-0.361309498548508,-0.695559442043304,-0.748543560504913,-0.365974009037018,-0.55294269323349,-0.773767530918121,-0.490831345319748,-0.400460213422775,0.728204727172852,-0.0192169677466154,0.685090184211731,0.755906164646149,-0.2192542552948,0.616873919963837,\n0.91906201839447,-0.39140060544014,0.0461581349372864,0.893281400203705,-0.428035885095596,0.137235671281815,0.748473048210144,-0.374994337558746,0.546961903572083,0.937642931938171,-0.346572607755661,0.0267044957727194,0.91906201839447,-0.39140060544014,0.0461581349372864,0.755906164646149,-0.2192542552948,0.616873919963837,0.845922708511353,-0.200713187456131,-0.494094133377075,0.75577849149704,-0.394848763942719,-0.52239191532135,0.91906201839447,-0.39140060544014,0.0461581349372864,0.937642931938171,-0.346572607755661,0.0267044957727194,0.653988599777222,-0.593074798583984,-0.469639420509338,0.893281400203705,-0.428035885095596,0.137235671281815,0.91906201839447,-0.39140060544014,0.0461581349372864,0.75577849149704,-0.394848763942719,-0.52239191532135,0.675026595592499,0.510915398597717,0.532263576984406,0.683746635913849,0.227861896157265,0.693231225013733,0.882562458515167,-0.37857860326767,0.278857797384262,0.914948225021362,-0.193324074149132,0.354253560304642,0.728204727172852,-0.0192169677466154,0.685090184211731,0.893281400203705,-0.428035885095596,0.137235671281815,0.882562458515167,-0.37857860326767,0.278857797384262,0.683746635913849,0.227861896157265,0.693231225013733,0.653988599777222,-0.593074798583984,-0.469639420509338,0.576260924339294,-0.753080308437347,-0.317479759454727,0.882562458515167,-0.37857860326767,0.278857797384262,0.893281400203705,-0.428035885095596,0.137235671281815,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.914948225021362,-0.193324074149132,0.354253560304642,0.882562458515167,-0.37857860326767,0.278857797384262,0.576260924339294,-0.753080308437347,-0.317479759454727,0.625812768936157,-0.514012217521667,0.586642861366272,0.568605542182922,-0.712091386318207,0.411841779947281,0.699254095554352,-0.603147983551025,0.383739799261093,0.726148188114166,-0.493182122707367,0.479040950536728,0.625812768936157,-0.514012217521667,0.586642861366272,0.726148188114166,-0.493182122707367,0.479040950536728,0.748473048210144,-0.374994337558746,0.546961903572083,0.64728707075119,-0.269912004470825,0.712858319282532,\n0.748473048210144,-0.374994337558746,0.546961903572083,0.726148188114166,-0.493182122707367,0.479040950536728,0.946356475353241,-0.319671094417572,0.0471152737736702,0.937642931938171,-0.346572607755661,0.0267044957727194,0.699254095554352,-0.603147983551025,0.383739799261093,0.951302230358124,-0.298469483852386,0.0770719945430756,0.946356475353241,-0.319671094417572,0.0471152737736702,0.726148188114166,-0.493182122707367,0.479040950536728,0.942937254905701,0.154236450791359,-0.295093923807144,0.911007940769196,-0.0263682082295418,-0.411545008420944,0.946356475353241,-0.319671094417572,0.0471152737736702,0.951302230358124,-0.298469483852386,0.0770719945430756,0.845922708511353,-0.200713187456131,-0.494094133377075,0.937642931938171,-0.346572607755661,0.0267044957727194,0.946356475353241,-0.319671094417572,0.0471152737736702,0.911007940769196,-0.0263682082295418,-0.411545008420944,0.433967679738998,-0.800836622714996,0.412713944911957,0.568605542182922,-0.712091386318207,0.411841779947281,0.620464503765106,-0.659890949726105,0.42375436425209,0.433967679738998,-0.800836622714996,0.412713944911957,0.620464503765106,-0.659890949726105,0.42375436425209,0.552745521068573,-0.585487604141235,0.593023300170898,0.54015976190567,-0.714601397514343,0.444490998983383,0.433967679738998,-0.800836622714996,0.412713944911957,0.54015976190567,-0.714601397514343,0.444490998983383,0.764377176761627,-0.598457217216492,0.239951074123383,0.693809986114502,-0.652198612689972,0.305392682552338,0.433967679738998,-0.800836622714996,0.412713944911957,0.693809986114502,-0.652198612689972,0.305392682552338,0.699254095554352,-0.603147983551025,0.383739799261093,0.568605542182922,-0.712091386318207,0.411841779947281,0.764377176761627,-0.598457217216492,0.239951074123383,0.968429863452911,-0.214592844247818,0.126860067248344,0.957345426082611,-0.272242695093155,0.0968175828456879,0.693809986114502,-0.652198612689972,0.305392682552338,0.881676495075226,0.461544960737228,0.0980962067842484,0.932843506336212,0.333851307630539,-0.135448768734932,0.957345426082611,-0.272242695093155,0.0968175828456879,\n0.968429863452911,-0.214592844247818,0.126860067248344,0.942937254905701,0.154236450791359,-0.295093923807144,0.951302230358124,-0.298469483852386,0.0770719945430756,0.957345426082611,-0.272242695093155,0.0968175828456879,0.932843506336212,0.333851307630539,-0.135448768734932,0.699254095554352,-0.603147983551025,0.383739799261093,0.693809986114502,-0.652198612689972,0.305392682552338,0.957345426082611,-0.272242695093155,0.0968175828456879,0.951302230358124,-0.298469483852386,0.0770719945430756,0.620464503765106,-0.659890949726105,0.42375436425209,0.856441259384155,-0.50444495677948,0.10974358022213,0.937653958797455,-0.289538353681564,0.192282542586327,0.743466079235077,-0.337065368890762,0.577620208263397,0.699970245361328,0.172705575823784,-0.692975103855133,0.710636675357819,0.109640218317509,-0.694963693618774,0.937653958797455,-0.289538353681564,0.192282542586327,0.856441259384155,-0.50444495677948,0.10974358022213,0.937653958797455,-0.289538353681564,0.192282542586327,0.710636675357819,0.109640218317509,-0.694963693618774,0.88115268945694,0.072045162320137,-0.467310845851898,0.973303020000458,-0.0122882071882486,0.229194864630699,0.743466079235077,-0.337065368890762,0.577620208263397,0.937653958797455,-0.289538353681564,0.192282542586327,0.973303020000458,-0.0122882071882486,0.229194864630699,0.740522563457489,0.0606227926909924,0.6692915558815,0.636911451816559,-0.300338536500931,0.71002858877182,0.743466079235077,-0.337065368890762,0.577620208263397,0.740522563457489,0.0606227926909924,0.6692915558815,0.590947866439819,0.059150405228138,0.804538309574127,0.636911451816559,-0.300338536500931,0.71002858877182,0.590947866439819,0.059150405228138,0.804538309574127,0.520368456840515,0.258096873760223,0.814004063606262,0.686343193054199,0.200842931866646,0.698995769023895,0.810089349746704,-0.185254707932472,0.556269705295563,0.54015976190567,-0.714601397514343,0.444490998983383,0.552745521068573,-0.585487604141235,0.593023300170898,0.636911451816559,-0.300338536500931,0.71002858877182,0.810089349746704,-0.185254707932472,0.556269705295563,\n0.772665083408356,-0.529866874217987,0.349613666534424,0.620464503765106,-0.659890949726105,0.42375436425209,0.743466079235077,-0.337065368890762,0.577620208263397,0.636911451816559,-0.300338536500931,0.71002858877182,0.552745521068573,-0.585487604141235,0.593023300170898,0.870513737201691,-0.304842829704285,0.386363327503204,0.89732414484024,-0.179725483059883,0.403122931718826,0.968429863452911,-0.214592844247818,0.126860067248344,0.764377176761627,-0.598457217216492,0.239951074123383,0.89732414484024,-0.179725483059883,0.403122931718826,0.849923014640808,0.0266168173402548,0.526234149932861,0.881676495075226,0.461544960737228,0.0980962067842484,0.968429863452911,-0.214592844247818,0.126860067248344,0.611288368701935,0.178437694907188,-0.771029531955719,0.930164098739624,0.356697469949722,0.0869576334953308,0.973303020000458,-0.0122882071882486,0.229194864630699,0.88115268945694,0.072045162320137,-0.467310845851898,0.66197681427002,0.379794925451279,0.646175265312195,0.740522563457489,0.0606227926909924,0.6692915558815,0.973303020000458,-0.0122882071882486,0.229194864630699,0.930164098739624,0.356697469949722,0.0869576334953308,0.611288368701935,0.178437694907188,-0.771029531955719,0.941693007946014,-0.139167279005051,-0.30634418129921,0.930178761482239,0.315359890460968,0.187924444675446,0.930164098739624,0.356697469949722,0.0869576334953308,0.930178761482239,0.315359890460968,0.187924444675446,0.732805073261261,0.230000048875809,0.640387892723084,0.66197681427002,0.379794925451279,0.646175265312195,0.930164098739624,0.356697469949722,0.0869576334953308,0.664898633956909,-0.325722575187683,0.672171533107758,0.683038532733917,-0.228187322616577,0.693821907043457,0.974376916885376,-0.212370634078979,0.0740836188197136,0.977968633174896,-0.17539019882679,0.113206177949905,0.717738389968872,-0.173748686909676,0.674287021160126,0.967301428318024,-0.248277440667152,0.0518288649618626,0.974376916885376,-0.212370634078979,0.0740836188197136,0.683038532733917,-0.228187322616577,0.693821907043457,0.715653717517853,-0.159719884395599,-0.679948031902313,\n0.720991909503937,-0.0311141833662987,-0.692244589328766,0.974376916885376,-0.212370634078979,0.0740836188197136,0.967301428318024,-0.248277440667152,0.0518288649618626,0.743491053581238,0.170196279883385,-0.64672577381134,0.977968633174896,-0.17539019882679,0.113206177949905,0.974376916885376,-0.212370634078979,0.0740836188197136,0.720991909503937,-0.0311141833662987,-0.692244589328766,0.661345362663269,-0.681172966957092,0.314047187566757,0.66036581993103,-0.495232194662094,0.564501583576202,0.975407660007477,-0.161730393767357,0.149743661284447,0.979921102523804,-0.156960278749466,0.122955821454525,0.664898633956909,-0.325722575187683,0.672171533107758,0.977968633174896,-0.17539019882679,0.113206177949905,0.975407660007477,-0.161730393767357,0.149743661284447,0.66036581993103,-0.495232194662094,0.564501583576202,0.743491053581238,0.170196279883385,-0.64672577381134,0.77188766002655,0.415448874235153,-0.481239676475525,0.975407660007477,-0.161730393767357,0.149743661284447,0.977968633174896,-0.17539019882679,0.113206177949905,0.771966874599457,0.597103416919708,-0.218024387955666,0.979921102523804,-0.156960278749466,0.122955821454525,0.975407660007477,-0.161730393767357,0.149743661284447,0.77188766002655,0.415448874235153,-0.481239676475525,0.834912359714508,-0.36245208978653,0.414185792207718,0.84412956237793,-0.267634004354477,0.464561402797699,0.664898633956909,-0.325722575187683,0.672171533107758,0.66036581993103,-0.495232194662094,0.564501583576202,0.834912359714508,-0.36245208978653,0.414185792207718,0.66036581993103,-0.495232194662094,0.564501583576202,0.661345362663269,-0.681172966957092,0.314047187566757,0.813187956809998,-0.535195648670197,0.228672236204147,0.664898633956909,-0.325722575187683,0.672171533107758,0.84412956237793,-0.267634004354477,0.464561402797699,0.873907625675201,-0.238707512617111,0.423443168401718,0.683038532733917,-0.228187322616577,0.693821907043457,0.873907625675201,-0.238707512617111,0.423443168401718,0.905476927757263,-0.224815160036087,0.359957873821259,0.717738389968872,-0.173748686909676,0.674287021160126,\n0.683038532733917,-0.228187322616577,0.693821907043457,0.921016693115234,-0.344745218753815,0.181325793266296,0.954277276992798,-0.00887809786945581,-0.298790961503983,0.982178807258606,0.114838123321533,-0.148785173892975,0.987944602966309,0.0211450234055519,0.153357028961182,0.991854608058929,0.119089640676975,0.0451894104480743,0.919128894805908,0.0630135238170624,0.388884782791138,0.987944602966309,0.0211450234055519,0.153357028961182,0.982178807258606,0.114838123321533,-0.148785173892975,0.991854608058929,0.119089640676975,0.0451894104480743,0.982178807258606,0.114838123321533,-0.148785173892975,0.834912359714508,-0.36245208978653,0.414185792207718,0.813187956809998,-0.535195648670197,0.228672236204147,0.982178807258606,0.114838123321533,-0.148785173892975,0.954277276992798,-0.00887809786945581,-0.298790961503983,0.84412956237793,-0.267634004354477,0.464561402797699,0.834912359714508,-0.36245208978653,0.414185792207718,0.597383677959442,-0.186877384781837,0.779877960681915,0.636335551738739,-0.147832229733467,0.757114708423615,0.906243920326233,-0.301860004663467,0.29597732424736,0.922981798648834,-0.320070415735245,0.213681027293205,0.636335551738739,-0.147832229733467,0.757114708423615,0.671223521232605,-0.0201855413615704,0.74098014831543,0.900076270103455,-0.156032308936119,0.406837373971939,0.906243920326233,-0.301860004663467,0.29597732424736,0.987944602966309,0.0211450234055519,0.153357028961182,0.7646564245224,-0.170687139034271,0.62142288684845,0.699551403522491,-0.470909416675568,0.537468254566193,0.921016693115234,-0.344745218753815,0.181325793266296,0.919128894805908,0.0630135238170624,0.388884782791138,0.7646564245224,-0.170687139034271,0.62142288684845,0.987944602966309,0.0211450234055519,0.153357028961182,0.671223521232605,-0.0201855413615704,0.74098014831543,0.636335551738739,-0.147832229733467,0.757114708423615,0.89732414484024,-0.179725483059883,0.403122931718826,0.870513737201691,-0.304842829704285,0.386363327503204,0.636335551738739,-0.147832229733467,0.757114708423615,0.597383677959442,-0.186877384781837,0.779877960681915,\n0.849923014640808,0.0266168173402548,0.526234149932861,0.89732414484024,-0.179725483059883,0.403122931718826,0.619684100151062,-0.672098994255066,0.405307918787003,0.590675473213196,-0.574259579181671,0.566858351230621,0.921016693115234,-0.344745218753815,0.181325793266296,0.699551403522491,-0.470909416675568,0.537468254566193,0.878716766834259,-0.421581953763962,0.223887145519257,0.776369571685791,-0.530167698860168,0.340840935707092,0.906263113021851,-0.354522317647934,0.230219781398773,0.805564939975739,-0.533806264400482,0.257130265235901,0.988399267196655,0.136643067002296,-0.0662992894649506,0.924175441265106,0.249484479427338,0.28923562169075,0.749665677547455,-0.55081570148468,0.366883426904678,0.619684100151062,-0.672098994255066,0.405307918787003,0.67726731300354,-0.631388366222382,0.377700597047806,0.805564939975739,-0.533806264400482,0.257130265235901,0.749665677547455,-0.55081570148468,0.366883426904678,0.932843506336212,0.333851307630539,-0.135448768734932,0.881676495075226,0.461544960737228,0.0980962067842484,0.924175441265106,0.249484479427338,0.28923562169075,0.988399267196655,0.136643067002296,-0.0662992894649506,0.932843506336212,0.333851307630539,-0.135448768734932,0.988399267196655,0.136643067002296,-0.0662992894649506,0.975082695484161,0.0550070591270924,-0.214913904666901,0.942937254905701,0.154236450791359,-0.295093923807144,0.911007940769196,-0.0263682082295418,-0.411545008420944,0.942937254905701,0.154236450791359,-0.295093923807144,0.975082695484161,0.0550070591270924,-0.214913904666901,0.958627998828888,-0.06352149695158,-0.277483999729156,0.911007940769196,-0.0263682082295418,-0.411545008420944,0.958627998828888,-0.06352149695158,-0.277483999729156,0.955420434474945,-0.273161262273788,-0.112047769129276,0.845922708511353,-0.200713187456131,-0.494094133377075,0.955420434474945,-0.273161262273788,-0.112047769129276,0.958627998828888,-0.06352149695158,-0.277483999729156,0.906263113021851,-0.354522317647934,0.230219781398773,0.819948792457581,-0.482310354709625,0.308319211006165,0.975082695484161,0.0550070591270924,-0.214913904666901,\n0.878716766834259,-0.421581953763962,0.223887145519257,0.906263113021851,-0.354522317647934,0.230219781398773,0.958627998828888,-0.06352149695158,-0.277483999729156,0.776369571685791,-0.530167698860168,0.340840935707092,0.819948792457581,-0.482310354709625,0.308319211006165,0.906263113021851,-0.354522317647934,0.230219781398773,0.831347465515137,-0.304245948791504,-0.465076088905334,0.855084657669067,-0.451219111680985,-0.255404502153397,0.653988599777222,-0.593074798583984,-0.469639420509338,0.75577849149704,-0.394848763942719,-0.52239191532135,0.831347465515137,-0.304245948791504,-0.465076088905334,0.75577849149704,-0.394848763942719,-0.52239191532135,0.845922708511353,-0.200713187456131,-0.494094133377075,0.955420434474945,-0.273161262273788,-0.112047769129276,0.739733874797821,-0.650235652923584,-0.173168674111366,0.718589425086975,-0.627188920974731,0.300438493490219,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.576260924339294,-0.753080308437347,-0.317479759454727,0.739733874797821,-0.650235652923584,-0.173168674111366,0.576260924339294,-0.753080308437347,-0.317479759454727,0.653988599777222,-0.593074798583984,-0.469639420509338,0.855084657669067,-0.451219111680985,-0.255404502153397,0.654792129993439,-0.747980833053589,0.108498655259609,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.718589425086975,-0.627188920974731,0.300438493490219,0.726504981517792,-0.654014825820923,0.210843905806541,0.689203560352325,0.677581548690796,0.256674349308014,0.966807126998901,-0.0426941066980362,0.251915037631989,0.989448130130768,-0.0820280760526657,0.119431190192699,0.732895731925964,0.679829776287079,0.0263686496764421,0.654792129993439,-0.747980833053589,0.108498655259609,0.673599064350128,-0.729973196983337,0.115772970020771,0.989448130130768,-0.0820280760526657,0.119431190192699,0.966807126998901,-0.0426941066980362,0.251915037631989,0.661345362663269,-0.681172966957092,0.314047187566757,0.979921102523804,-0.156960278749466,0.122955821454525,0.989448130130768,-0.0820280760526657,0.119431190192699,\n0.673599064350128,-0.729973196983337,0.115772970020771,0.771966874599457,0.597103416919708,-0.218024387955666,0.732895731925964,0.679829776287079,0.0263686496764421,0.989448130130768,-0.0820280760526657,0.119431190192699,0.979921102523804,-0.156960278749466,0.122955821454525,0.966807126998901,-0.0426941066980362,0.251915037631989,0.689203560352325,0.677581548690796,0.256674349308014,0.675026595592499,0.510915398597717,0.532263576984406,0.914948225021362,-0.193324074149132,0.354253560304642,0.966807126998901,-0.0426941066980362,0.251915037631989,0.914948225021362,-0.193324074149132,0.354253560304642,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.654792129993439,-0.747980833053589,0.108498655259609,0.789831042289734,-0.580399453639984,-0.198251023888588,0.932135164737701,-0.321184366941452,0.167226210236549,0.908649146556854,-0.308447659015656,0.281454712152481,0.770939111709595,-0.636473119258881,0.0235556345432997,0.909835636615753,-0.0349062643945217,0.413498103618622,0.883517026901245,-0.041202936321497,0.46658331155777,0.908649146556854,-0.308447659015656,0.281454712152481,0.932135164737701,-0.321184366941452,0.167226210236549,0.909835636615753,-0.0349062643945217,0.413498103618622,0.932135164737701,-0.321184366941452,0.167226210236549,0.947174549102783,-0.313290327787399,0.0686262398958206,0.903367161750793,-0.021636750549078,0.428321927785873,0.789831042289734,-0.580399453639984,-0.198251023888588,0.768442690372467,-0.500588834285736,-0.398631006479263,0.947174549102783,-0.313290327787399,0.0686262398958206,0.932135164737701,-0.321184366941452,0.167226210236549,0.741453766822815,-0.373992174863815,-0.557114124298096,0.959232211112976,-0.282177299261093,0.015797957777977,0.947174549102783,-0.313290327787399,0.0686262398958206,0.768442690372467,-0.500588834285736,-0.398631006479263,0.85181188583374,-0.0614667385816574,0.52022910118103,0.903367161750793,-0.021636750549078,0.428321927785873,0.947174549102783,-0.313290327787399,0.0686262398958206,0.959232211112976,-0.282177299261093,0.015797957777977,0.909835636615753,-0.0349062643945217,0.413498103618622,\n0.903367161750793,-0.021636750549078,0.428321927785873,0.936789333820343,-0.0987404808402061,0.335672438144684,0.917440295219421,-0.101929731667042,0.384595423936844,0.903367161750793,-0.021636750549078,0.428321927785873,0.85181188583374,-0.0614667385816574,0.52022910118103,0.96601414680481,-0.199814081192017,0.163984462618828,0.936789333820343,-0.0987404808402061,0.335672438144684,0.788077771663666,0.0518888607621193,0.61338484287262,0.669167935848236,0.129631534218788,0.731717109680176,0.808598875999451,0.0304549541324377,0.587571620941162,0.869269788265228,-0.0789045765995979,0.488000065088272,0.808598875999451,0.0304549541324377,0.587571620941162,0.837971806526184,-0.0177910327911377,0.545423448085785,0.883517026901245,-0.041202936321497,0.46658331155777,0.869269788265228,-0.0789045765995979,0.488000065088272,0.808598875999451,0.0304549541324377,0.587571620941162,0.746549785137177,0.0205342527478933,0.665012657642365,0.837971806526184,-0.0177910327911377,0.545423448085785,0.81360274553299,-0.323832809925079,0.482890188694,0.770434737205505,-0.328132152557373,0.546589076519012,0.78486180305481,-0.111138336360455,0.60962301492691,0.883532881736755,-0.151341363787651,0.443244278430939,0.886961340904236,-0.0727596655488014,0.456076264381409,0.831347465515137,-0.304245948791504,-0.465076088905334,0.955420434474945,-0.273161262273788,-0.112047769129276,0.81360274553299,-0.323832809925079,0.482890188694,0.886961340904236,-0.0727596655488014,0.456076264381409,0.855084657669067,-0.451219111680985,-0.255404502153397,0.770434737205505,-0.328132152557373,0.546589076519012,0.724820017814636,-0.392161190509796,0.566432297229767,0.733931958675385,-0.110008127987385,0.670255243778229,0.78486180305481,-0.111138336360455,0.60962301492691,0.724820017814636,-0.392161190509796,0.566432297229767,0.699551403522491,-0.470909416675568,0.537468254566193,0.7646564245224,-0.170687139034271,0.62142288684845,0.733931958675385,-0.110008127987385,0.670255243778229,0.919128894805908,0.0630135238170624,0.388884782791138,0.815926849842072,-0.0521769113838673,0.575795948505402,\n0.733931958675385,-0.110008127987385,0.670255243778229,0.7646564245224,-0.170687139034271,0.62142288684845,0.718589425086975,-0.627188920974731,0.300438493490219,0.78486180305481,-0.111138336360455,0.60962301492691,0.733931958675385,-0.110008127987385,0.670255243778229,0.815926849842072,-0.0521769113838673,0.575795948505402,0.900076270103455,-0.156032308936119,0.406837373971939,0.889522910118103,-0.00140424643177539,0.456888437271118,0.936789333820343,-0.0987404808402061,0.335672438144684,0.96601414680481,-0.199814081192017,0.163984462618828,0.889522910118103,-0.00140424643177539,0.456888437271118,0.867614150047302,0.0466058775782585,0.495049089193344,0.917440295219421,-0.101929731667042,0.384595423936844,0.936789333820343,-0.0987404808402061,0.335672438144684,0.869269788265228,-0.0789045765995979,0.488000065088272,0.917440295219421,-0.101929731667042,0.384595423936844,0.867614150047302,0.0466058775782585,0.495049089193344,0.788077771663666,0.0518888607621193,0.61338484287262,0.724820017814636,-0.392161190509796,0.566432297229767,0.770434737205505,-0.328132152557373,0.546589076519012,0.776369571685791,-0.530167698860168,0.340840935707092,0.67726731300354,-0.631388366222382,0.377700597047806,0.619684100151062,-0.672098994255066,0.405307918787003,0.699551403522491,-0.470909416675568,0.537468254566193,0.724820017814636,-0.392161190509796,0.566432297229767,0.67726731300354,-0.631388366222382,0.377700597047806,0.66197681427002,0.379794925451279,0.646175265312195,0.732805073261261,0.230000048875809,0.640387892723084,0.669167935848236,0.129631534218788,0.731717109680176,0.520368456840515,0.258096873760223,0.814004063606262,0.520368456840515,0.258096873760223,0.814004063606262,0.669167935848236,0.129631534218788,0.731717109680176,0.788077771663666,0.0518888607621193,0.61338484287262,0.686343193054199,0.200842931866646,0.698995769023895,0.671223521232605,-0.0201855413615704,0.74098014831543,0.870513737201691,-0.304842829704285,0.386363327503204,0.858721911907196,-0.0560792721807957,0.509364068508148,0.698842525482178,0.18292909860611,0.691488325595856,\n0.74112343788147,0.26722252368927,0.615896224975586,0.698842525482178,0.18292909860611,0.691488325595856,0.858721911907196,-0.0560792721807957,0.509364068508148,0.74112343788147,0.26722252368927,0.615896224975586,0.858721911907196,-0.0560792721807957,0.509364068508148,0.810089349746704,-0.185254707932472,0.556269705295563,0.686343193054199,0.200842931866646,0.698995769023895,0.870513737201691,-0.304842829704285,0.386363327503204,0.772665083408356,-0.529866874217987,0.349613666534424,0.810089349746704,-0.185254707932472,0.556269705295563,0.858721911907196,-0.0560792721807957,0.509364068508148,0.906243920326233,-0.301860004663467,0.29597732424736,0.900076270103455,-0.156032308936119,0.406837373971939,0.96601414680481,-0.199814081192017,0.163984462618828,0.854979157447815,-0.303726255893707,-0.420429587364197,0.906243920326233,-0.301860004663467,0.29597732424736,0.854979157447815,-0.303726255893707,-0.420429587364197,0.849067807197571,-0.235355824232101,-0.472960323095322,0.922981798648834,-0.320070415735245,0.213681027293205,0.84412956237793,-0.267634004354477,0.464561402797699,0.954277276992798,-0.00887809786945581,-0.298790961503983,0.898844718933105,-0.132514029741287,-0.417753785848618,0.873907625675201,-0.238707512617111,0.423443168401718,0.898844718933105,-0.132514029741287,-0.417753785848618,0.849067807197571,-0.235355824232101,-0.472960323095322,0.905476927757263,-0.224815160036087,0.359957873821259,0.873907625675201,-0.238707512617111,0.423443168401718,0.934250891208649,-0.198644295334816,0.296168446540833,0.905476927757263,-0.224815160036087,0.359957873821259,0.849067807197571,-0.235355824232101,-0.472960323095322,0.854979157447815,-0.303726255893707,-0.420429587364197,0.96601414680481,-0.199814081192017,0.163984462618828,0.934250891208649,-0.198644295334816,0.296168446540833,0.854979157447815,-0.303726255893707,-0.420429587364197,0.717738389968872,-0.173748686909676,0.674287021160126,0.905476927757263,-0.224815160036087,0.359957873821259,0.934250891208649,-0.198644295334816,0.296168446540833,0.778299868106842,-0.129949271678925,0.614298403263092,\n0.934250891208649,-0.198644295334816,0.296168446540833,0.96601414680481,-0.199814081192017,0.163984462618828,0.85181188583374,-0.0614667385816574,0.52022910118103,0.778299868106842,-0.129949271678925,0.614298403263092,0.715653717517853,-0.159719884395599,-0.679948031902313,0.967301428318024,-0.248277440667152,0.0518288649618626,0.963969707489014,-0.265031158924103,0.0228220708668232,0.722632110118866,-0.252884060144424,-0.643313705921173,0.717738389968872,-0.173748686909676,0.674287021160126,0.778299868106842,-0.129949271678925,0.614298403263092,0.963969707489014,-0.265031158924103,0.0228220708668232,0.967301428318024,-0.248277440667152,0.0518288649618626,0.85181188583374,-0.0614667385816574,0.52022910118103,0.959232211112976,-0.282177299261093,0.015797957777977,0.963969707489014,-0.265031158924103,0.0228220708668232,0.778299868106842,-0.129949271678925,0.614298403263092,0.741453766822815,-0.373992174863815,-0.557114124298096,0.722632110118866,-0.252884060144424,-0.643313705921173,0.963969707489014,-0.265031158924103,0.0228220708668232,0.959232211112976,-0.282177299261093,0.015797957777977,0.741453766822815,-0.373992174863815,-0.557114124298096,0.129408821463585,-0.283919304609299,-0.950075387954712,0.0741845220327377,-0.0867956131696701,-0.993460237979889,0.722632110118866,-0.252884060144424,-0.643313705921173,-0.568153619766235,-0.0387567244470119,-0.822009384632111,-0.572411417961121,0.114080429077148,-0.81199187040329,0.0741845220327377,-0.0867956131696701,-0.993460237979889,0.129408821463585,-0.283919304609299,-0.950075387954712,-0.593829154968262,0.197740450501442,-0.77991384267807,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.0741845220327377,-0.0867956131696701,-0.993460237979889,-0.572411417961121,0.114080429077148,-0.81199187040329,0.715653717517853,-0.159719884395599,-0.679948031902313,0.722632110118866,-0.252884060144424,-0.643313705921173,0.0741845220327377,-0.0867956131696701,-0.993460237979889,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.925993382930756,0.073547326028347,-0.370306611061096,\n0.989523768424988,0.120242863893509,-0.0799020603299141,0.853913903236389,0.342162936925888,-0.392116755247116,0.226486593484879,0.604172766208649,-0.76398891210556,0.989523768424988,0.120242863893509,-0.0799020603299141,0.918502330780029,-0.196233198046684,0.343287169933319,0.962022840976715,-0.137412339448929,0.235859960317612,0.853913903236389,0.342162936925888,-0.392116755247116,0.152718812227249,0.346232503652573,-0.925634920597076,0.710636675357819,0.109640218317509,-0.694963693618774,0.699970245361328,0.172705575823784,-0.692975103855133,0.226486593484879,0.604172766208649,-0.76398891210556,0.699970245361328,0.172705575823784,-0.692975103855133,0.856441259384155,-0.50444495677948,0.10974358022213,0.819883346557617,-0.543677628040314,0.179460227489471,0.925993382930756,0.073547326028347,-0.370306611061096,0.856441259384155,-0.50444495677948,0.10974358022213,0.620464503765106,-0.659890949726105,0.42375436425209,0.568605542182922,-0.712091386318207,0.411841779947281,0.819883346557617,-0.543677628040314,0.179460227489471,0.726504981517792,-0.654014825820923,0.210843905806541,0.718589425086975,-0.627188920974731,0.300438493490219,0.815926849842072,-0.0521769113838673,0.575795948505402,0.965819001197815,-0.0271366275846958,0.257793039083481,0.855084657669067,-0.451219111680985,-0.255404502153397,0.886961340904236,-0.0727596655488014,0.456076264381409,0.883532881736755,-0.151341363787651,0.443244278430939,0.739733874797821,-0.650235652923584,-0.173168674111366,0.718589425086975,-0.627188920974731,0.300438493490219,0.739733874797821,-0.650235652923584,-0.173168674111366,0.883532881736755,-0.151341363787651,0.443244278430939,0.78486180305481,-0.111138336360455,0.60962301492691,0.900076270103455,-0.156032308936119,0.406837373971939,0.671223521232605,-0.0201855413615704,0.74098014831543,0.698842525482178,0.18292909860611,0.691488325595856,0.889522910118103,-0.00140424643177539,0.456888437271118,0.698842525482178,0.18292909860611,0.691488325595856,0.74112343788147,0.26722252368927,0.615896224975586,0.867614150047302,0.0466058775782585,0.495049089193344,\n0.889522910118103,-0.00140424643177539,0.456888437271118,0.788077771663666,0.0518888607621193,0.61338484287262,0.867614150047302,0.0466058775782585,0.495049089193344,0.74112343788147,0.26722252368927,0.615896224975586,0.686343193054199,0.200842931866646,0.698995769023895,0.597383677959442,-0.186877384781837,0.779877960681915,0.922981798648834,-0.320070415735245,0.213681027293205,0.930897831916809,-0.328699737787247,0.15932896733284,0.575946867465973,-0.330290824174881,0.74779224395752,0.930897831916809,-0.328699737787247,0.15932896733284,0.921016693115234,-0.344745218753815,0.181325793266296,0.590675473213196,-0.574259579181671,0.566858351230621,0.575946867465973,-0.330290824174881,0.74779224395752,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.766620635986328,-0.390746057033539,-0.509519696235657,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.797735512256622,-0.550144195556641,-0.246899589896202,0.938213586807251,-0.216931000351906,0.269622415304184,0.979475617408752,-0.109372921288013,0.169307827949524,0.948027610778809,-0.215131908655167,0.234439536929131,0.891989231109619,-0.254739731550217,0.373447239398956,0.948027610778809,-0.215131908655167,0.234439536929131,0.979475617408752,-0.109372921288013,0.169307827949524,0.995871722698212,-0.0808055028319359,0.041352104395628,0.982620000839233,-0.16903156042099,0.076722227036953,0.568605542182922,-0.712091386318207,0.411841779947281,0.625812768936157,-0.514012217521667,0.586642861366272,0.819252371788025,-0.448852121829987,0.356871604919434,0.819883346557617,-0.543677628040314,0.179460227489471,0.64728707075119,-0.269912004470825,0.712858319282532,0.903722703456879,-0.336785912513733,0.26431143283844,0.819252371788025,-0.448852121829987,0.356871604919434,0.625812768936157,-0.514012217521667,0.586642861366272,0.0543623231351376,0.513473629951477,0.85638165473938,0.045425571501255,0.382962375879288,0.922646403312683,0.219657093286514,0.398345082998276,0.890545904636383,\n0.20434632897377,0.515124678611755,0.832399606704712,0.045425571501255,0.382962375879288,0.922646403312683,0.0344220362603664,0.22930283844471,0.972746253013611,0.163330301642418,0.241669088602066,0.956514120101929,0.219657093286514,0.398345082998276,0.890545904636383,0.924175441265106,0.249484479427338,0.28923562169075,0.881676495075226,0.461544960737228,0.0980962067842484,0.849923014640808,0.0266168173402548,0.526234149932861,0.849923014640808,0.0266168173402548,0.526234149932861,0.597383677959442,-0.186877384781837,0.779877960681915,0.575946867465973,-0.330290824174881,0.74779224395752,0.710340082645416,-0.399401605129242,0.57956475019455,0.590675473213196,-0.574259579181671,0.566858351230621,0.710340082645416,-0.399401605129242,0.57956475019455,0.575946867465973,-0.330290824174881,0.74779224395752,0.54015976190567,-0.714601397514343,0.444490998983383,0.772665083408356,-0.529866874217987,0.349613666534424,0.764377176761627,-0.598457217216492,0.239951074123383,0.764377176761627,-0.598457217216492,0.239951074123383,0.772665083408356,-0.529866874217987,0.349613666534424,0.870513737201691,-0.304842829704285,0.386363327503204,0.938213586807251,-0.216931000351906,0.269622415304184,0.918502330780029,-0.196233198046684,0.343287169933319,0.928443729877472,-0.228811115026474,0.292639285326004,0.935753345489502,-0.270965844392776,0.225705921649933,0.918502330780029,-0.196233198046684,0.343287169933319,0.891989231109619,-0.254739731550217,0.373447239398956,0.840574324131012,-0.291103184223175,0.456830143928528,0.888055205345154,-0.428246527910233,-0.167221024632454,0.952154934406281,-0.291899025440216,0.0905317366123199,0.869891345500946,-0.342425405979156,0.355012476444244,0.887078821659088,-0.412128984928131,0.207944288849831,0.962022840976715,-0.137412339448929,0.235859960317612,0.840574324131012,-0.291103184223175,0.456830143928528,0.869891345500946,-0.342425405979156,0.355012476444244,0.952154934406281,-0.291899025440216,0.0905317366123199,0.928761661052704,-0.0844941884279251,0.360918909311295,0.928679704666138,-0.214017242193222,0.30290362238884,\n0.982620000839233,-0.16903156042099,0.076722227036953,0.993277549743652,-0.10496261715889,0.0488112159073353,0.928679704666138,-0.214017242193222,0.30290362238884,0.941693007946014,-0.139167279005051,-0.30634418129921,0.888055205345154,-0.428246527910233,-0.167221024632454,0.887078821659088,-0.412128984928131,0.207944288849831,0.928679704666138,-0.214017242193222,0.30290362238884,0.887078821659088,-0.412128984928131,0.207944288849831,0.869891345500946,-0.342425405979156,0.355012476444244,0.948027610778809,-0.215131908655167,0.234439536929131,0.982620000839233,-0.16903156042099,0.076722227036953,0.918502330780029,-0.196233198046684,0.343287169933319,0.840574324131012,-0.291103184223175,0.456830143928528,0.962022840976715,-0.137412339448929,0.235859960317612,-0.572831332683563,0.0232040770351887,-0.819344758987427,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.499244570732117,-0.495106011629105,-0.711073040962219,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.572831332683563,0.0232040770351887,-0.819344758987427,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.385834068059921,-0.169429570436478,-0.906876862049103,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.155012637376785,-0.308559864759445,-0.938489139080048,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.385834068059921,-0.169429570436478,-0.906876862049103,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.155012637376785,-0.308559864759445,-0.938489139080048,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.499244570732117,-0.495106011629105,-0.711073040962219,-0.117666520178318,-0.734499752521515,-0.668329775333405,-0.0362379811704159,-0.262005388736725,-0.964385807514191,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.0560902766883373,-0.278950154781342,-0.958666086196899,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.0560902766883373,-0.278950154781342,-0.958666086196899,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.00530779222026467,-0.225043326616287,-0.974334299564362,\n0.060580100864172,-0.309540450572968,-0.948954582214355,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.0357764922082424,-0.768304586410522,-0.639083802700043,0.0560902766883373,-0.278950154781342,-0.958666086196899,0.060580100864172,-0.309540450572968,-0.948954582214355,-0.070097453892231,-0.765305280685425,-0.639839172363281,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.0560902766883373,-0.278950154781342,-0.958666086196899,0.0357764922082424,-0.768304586410522,-0.639083802700043,-0.637578308582306,0.271278858184814,-0.721042096614838,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.637578308582306,0.271278858184814,-0.721042096614838,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.155012637376785,-0.308559864759445,-0.938489139080048,0.060580100864172,-0.309540450572968,-0.948954582214355,0.00530779222026467,-0.225043326616287,-0.974334299564362,-0.117666520178318,-0.734499752521515,-0.668329775333405,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.060580100864172,-0.309540450572968,-0.948954582214355,-0.155012637376785,-0.308559864759445,-0.938489139080048,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.26518127322197,0.597104549407959,-0.757063448429108,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.0239754971116781,0.848645508289337,-0.528418362140656,-0.26518127322197,0.597104549407959,-0.757063448429108,-0.289194285869598,0.281266182661057,-0.915016949176788,0.00547882029786706,0.479039758443832,-0.877776086330414,\n-0.914143800735474,0.108810022473335,-0.390514433383942,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.749875366687775,0.181030079722404,-0.636329352855682,0.370056182146072,0.811048626899719,-0.453054636716843,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.0239754971116781,0.848645508289337,-0.528418362140656,0.00547882029786706,0.479039758443832,-0.877776086330414,0.0384715124964714,0.615228533744812,-0.787409543991089,0.103339314460754,0.947827875614166,-0.301568180322647,0.0384715124964714,0.615228533744812,-0.787409543991089,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.0339763574302197,0.937289535999298,-0.346891850233078,0.103339314460754,0.947827875614166,-0.301568180322647,-0.677631020545959,0.0696527808904648,-0.732096076011658,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.677631020545959,0.0696527808904648,-0.732096076011658,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.788628935813904,-0.377316504716873,-0.485486000776291,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.788628935813904,-0.377316504716873,-0.485486000776291,\n-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.788628935813904,-0.377316504716873,-0.485486000776291,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.880580544471741,0.26120713353157,-0.395409554243088,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.970641255378723,0.0346399769186974,-0.238024458289146,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.856640636920929,-0.0924222394824028,0.507567644119263,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.934147357940674,0.162888333201408,-0.317546963691711,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.970641255378723,0.0346399769186974,-0.238024458289146,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.778645157814026,-0.596678197383881,-0.194131031632423,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.934147357940674,0.162888333201408,-0.317546963691711,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.856640636920929,-0.0924222394824028,0.507567644119263,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.778645157814026,-0.596678197383881,-0.194131031632423,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.880580544471741,0.26120713353157,-0.395409554243088,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.467009961605072,0.872948586940765,-0.140934243798256,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.945308268070221,0.226358875632286,-0.234848886728287,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.880580544471741,0.26120713353157,-0.395409554243088,-0.634040713310242,0.756764888763428,0.159057512879372,\n-0.467009961605072,0.872948586940765,-0.140934243798256,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.945308268070221,0.226358875632286,-0.234848886728287,0.585816919803619,-0.176041945815086,0.791092753410339,0.662703216075897,-0.235535204410553,0.710878074169159,0.75313264131546,-0.288527101278305,0.591221868991852,0.638028085231781,-0.251523166894913,0.727774858474731,0.585816919803619,-0.176041945815086,0.791092753410339,0.638028085231781,-0.251523166894913,0.727774858474731,0.540978610515594,-0.216916099190712,0.812582015991211,0.501314342021942,-0.180266559123993,0.846278846263886,0.638028085231781,-0.251523166894913,0.727774858474731,0.75313264131546,-0.288527101278305,0.591221868991852,0.887619376182556,-0.256067276000977,0.382833331823349,0.874927282333374,-0.188851833343506,0.44591161608696,0.638028085231781,-0.251523166894913,0.727774858474731,0.874927282333374,-0.188851833343506,0.44591161608696,0.852472126483917,-0.133455187082291,0.505451321601868,0.540978610515594,-0.216916099190712,0.812582015991211,0.874927282333374,-0.188851833343506,0.44591161608696,0.887619376182556,-0.256067276000977,0.382833331823349,0.960171759128571,-0.181689232587814,0.212271526455879,0.961752712726593,-0.126318529248238,0.243054285645485,0.874927282333374,-0.188851833343506,0.44591161608696,0.961752712726593,-0.126318529248238,0.243054285645485,0.950795531272888,-0.131767466664314,0.280401825904846,0.852472126483917,-0.133455187082291,0.505451321601868,0.961752712726593,-0.126318529248238,0.243054285645485,0.960171759128571,-0.181689232587814,0.212271526455879,0.966324627399445,-0.156342566013336,0.204386278986931,0.968484222888947,-0.138258457183838,0.207178428769112,0.964455902576447,-0.157870531082153,0.211900100111961,0.950795531272888,-0.131767466664314,0.280401825904846,0.961752712726593,-0.126318529248238,0.243054285645485,0.968484222888947,-0.138258457183838,0.207178428769112,0.968484222888947,-0.138258457183838,0.207178428769112,0.966324627399445,-0.156342566013336,0.204386278986931,0.809566378593445,-0.159671008586884,0.564895987510681,\n0.861340701580048,-0.127685099840164,0.491720139980316,0.964455902576447,-0.157870531082153,0.211900100111961,0.968484222888947,-0.138258457183838,0.207178428769112,0.861340701580048,-0.127685099840164,0.491720139980316,0.896426856517792,-0.172908827662468,0.408070415258408,0.606970250606537,-0.105902783572674,0.787636816501617,0.623109459877014,-0.205047786235809,0.754778146743774,0.896426856517792,-0.172908827662468,0.408070415258408,0.861340701580048,-0.127685099840164,0.491720139980316,0.606970250606537,-0.105902783572674,0.787636816501617,0.861340701580048,-0.127685099840164,0.491720139980316,0.809566378593445,-0.159671008586884,0.564895987510681,0.634909212589264,-0.137729376554489,0.760211110115051,0.634909212589264,-0.137729376554489,0.760211110115051,0.844319820404053,-0.143771529197693,0.51619154214859,0.757737696170807,-0.147417977452278,0.635689795017242,0.606970250606537,-0.105902783572674,0.787636816501617,0.941718637943268,-0.180898189544678,0.283622801303864,0.92750072479248,-0.198037564754486,0.31705442070961,0.757737696170807,-0.147417977452278,0.635689795017242,0.844319820404053,-0.143771529197693,0.51619154214859,0.9190753698349,-0.11298330873251,0.377538323402405,0.705142974853516,-0.157100901007652,0.691442430019379,0.757737696170807,-0.147417977452278,0.635689795017242,0.92750072479248,-0.198037564754486,0.31705442070961,0.623109459877014,-0.205047786235809,0.754778146743774,0.606970250606537,-0.105902783572674,0.787636816501617,0.757737696170807,-0.147417977452278,0.635689795017242,0.705142974853516,-0.157100901007652,0.691442430019379,0.936089217662811,-0.214836105704308,0.278536230325699,0.935290277004242,-0.181792959570885,0.303617179393768,0.9190753698349,-0.11298330873251,0.377538323402405,0.92750072479248,-0.198037564754486,0.31705442070961,0.949846565723419,-0.197867274284363,0.242157250642776,0.935290277004242,-0.181792959570885,0.303617179393768,0.936089217662811,-0.214836105704308,0.278536230325699,0.0527103617787361,-0.77695095539093,0.627350628376007,-0.0512008517980576,-0.79354852437973,0.606349110603333,\n-0.0138667495921254,-0.712914168834686,0.701114177703857,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.0512008517980576,-0.79354852437973,0.606349110603333,-0.0352796316146851,-0.824001550674438,0.565488159656525,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0138667495921254,-0.712914168834686,0.701114177703857,0.235940769314766,-0.737428665161133,0.632875144481659,0.0527103617787361,-0.77695095539093,0.627350628376007,0.0200271289795637,-0.717210829257965,0.696568429470062,0.152485489845276,-0.706423759460449,0.691168308258057,0.363939642906189,-0.646557629108429,0.670455992221832,0.235940769314766,-0.737428665161133,0.632875144481659,0.152485489845276,-0.706423759460449,0.691168308258057,0.317214041948318,-0.645033359527588,0.695202946662903,0.363939642906189,-0.646557629108429,0.670455992221832,0.317214041948318,-0.645033359527588,0.695202946662903,0.389301151037216,-0.589295387268066,0.707937479019165,0.286647915840149,-0.584438979625702,0.759120643138886,0.184710487723351,-0.617817997932434,0.764318585395813,0.286647915840149,-0.584438979625702,0.759120643138886,0.389301151037216,-0.589295387268066,0.707937479019165,0.34683957695961,-0.624991238117218,0.699348449707031,0.184710487723351,-0.617817997932434,0.764318585395813,0.34683957695961,-0.624991238117218,0.699348449707031,0.139593034982681,-0.543097734451294,0.827984690666199,0.168070778250694,-0.457133919000626,0.873373210430145,0.196283534169197,-0.554668664932251,0.808588564395905,0.358242690563202,-0.369526594877243,0.857386887073517,0.359977900981903,-0.319483041763306,0.876553773880005,0.161047965288162,-0.353496670722961,0.921468198299408,0.16572479903698,-0.647090375423431,0.744183719158173,0.196283534169197,-0.554668664932251,0.808588564395905,0.161047965288162,-0.353496670722961,0.921468198299408,0.0293192863464355,-0.389476090669632,0.920569777488709,0.196283534169197,-0.554668664932251,0.808588564395905,0.16572479903698,-0.647090375423431,0.744183719158173,0.255019038915634,-0.916801631450653,0.307311117649078,0.191021859645844,-0.901510059833527,0.388317227363586,\n0.771733045578003,-0.627318918704987,0.104398690164089,0.813187956809998,-0.535195648670197,0.228672236204147,0.661345362663269,-0.681172966957092,0.314047187566757,0.673599064350128,-0.729973196983337,0.115772970020771,0.771733045578003,-0.627318918704987,0.104398690164089,0.673599064350128,-0.729973196983337,0.115772970020771,0.654792129993439,-0.747980833053589,0.108498655259609,0.726504981517792,-0.654014825820923,0.210843905806541,0.991854608058929,0.119089640676975,0.0451894104480743,0.813187956809998,-0.535195648670197,0.228672236204147,0.771733045578003,-0.627318918704987,0.104398690164089,0.965819001197815,-0.0271366275846958,0.257793039083481,0.726504981517792,-0.654014825820923,0.210843905806541,0.965819001197815,-0.0271366275846958,0.257793039083481,0.771733045578003,-0.627318918704987,0.104398690164089,-0.534112751483917,0.714107155799866,-0.452520221471787,-0.515466570854187,0.838185369968414,-0.178155809640884,0.190385565161705,0.977179288864136,-0.0942017361521721,0.130885064601898,0.893452942371368,-0.429663747549057,-0.482280492782593,0.875927150249481,0.0125399529933929,0.168165519833565,0.971532881259918,0.166865915060043,0.190385565161705,0.977179288864136,-0.0942017361521721,-0.515466570854187,0.838185369968414,-0.178155809640884,0.689203560352325,0.677581548690796,0.256674349308014,0.732895731925964,0.679829776287079,0.0263686496764421,0.190385565161705,0.977179288864136,-0.0942017361521721,0.168165519833565,0.971532881259918,0.166865915060043,0.771966874599457,0.597103416919708,-0.218024387955666,0.130885064601898,0.893452942371368,-0.429663747549057,0.190385565161705,0.977179288864136,-0.0942017361521721,0.732895731925964,0.679829776287079,0.0263686496764421,0.883517026901245,-0.041202936321497,0.46658331155777,0.909835636615753,-0.0349062643945217,0.413498103618622,0.917440295219421,-0.101929731667042,0.384595423936844,0.869269788265228,-0.0789045765995979,0.488000065088272,-0.690630912780762,-0.290166169404984,-0.662444412708282,0.10502952337265,-0.714195668697357,-0.692021250724792,0.0209639705717564,-0.893982887268066,-0.44761049747467,\n-0.748543560504913,-0.365974009037018,-0.55294269323349,0.789831042289734,-0.580399453639984,-0.198251023888588,0.770939111709595,-0.636473119258881,0.0235556345432997,0.0209639705717564,-0.893982887268066,-0.44761049747467,0.10502952337265,-0.714195668697357,-0.692021250724792,0.970540165901184,0.124821022152901,0.206086173653603,0.534866094589233,0.53300929069519,0.655606091022491,0.956802248954773,0.196078270673752,0.214668840169907,0.966708958148956,-0.002308584516868,0.255868047475815,0.925993382930756,0.073547326028347,-0.370306611061096,0.226486593484879,0.604172766208649,-0.76398891210556,0.699970245361328,0.172705575823784,-0.692975103855133,0.897598922252655,-0.0851877480745316,0.432503432035446,0.971762239933014,-0.143596902489662,0.187237858772278,0.935753345489502,-0.270965844392776,0.225705921649933,0.928443729877472,-0.228811115026474,0.292639285326004,0.846449613571167,0.310930520296097,0.432256042957306,0.857260406017303,0.312566876411438,0.409153461456299,0.813006162643433,0.437411576509476,0.384307235479355,0.885035216808319,0.393218964338303,0.249181613326073,0.908188223838806,0.15894940495491,0.387206882238388,0.854240536689758,0.355053037405014,0.379750460386276,0.857260406017303,0.312566876411438,0.409153461456299,0.846449613571167,0.310930520296097,0.432256042957306,0.793774306774139,0.385858178138733,0.470144480466843,0.718716561794281,0.339281320571899,0.60690575838089,0.728551387786865,0.287864476442337,0.621568083763123,0.87058699131012,0.227341398596764,0.436341762542725,0.862693786621094,0.213308542966843,0.458539962768555,0.688724040985107,0.428849041461945,0.584591865539551,0.843018114566803,0.354378879070282,0.404643177986145,0.87058699131012,0.227341398596764,0.436341762542725,0.728551387786865,0.287864476442337,0.621568083763123,0.494429767131805,-0.0934201404452324,0.864182770252228,0.401639640331268,-0.00309631112031639,0.915792524814606,0.32480525970459,-0.177078545093536,0.929055869579315,0.59909462928772,0.124072253704071,0.791006743907928,0.61716902256012,-0.00506624486297369,0.786814272403717,\n0.578135192394257,0.0218988731503487,0.815647065639496,0.616745948791504,-0.290956258773804,0.731415688991547,0.75023740530014,-0.238408371806145,0.616688966751099,0.775085091590881,-0.264017641544342,0.574053823947906,0.666223108768463,-0.303315341472626,0.681283056735992,0.75023740530014,-0.238408371806145,0.616688966751099,0.855076372623444,-0.165702432394028,0.491311639547348,0.872779548168182,-0.198945015668869,0.445731669664383,0.775085091590881,-0.264017641544342,0.574053823947906,0.476604402065277,-0.515640795230865,0.712013244628906,0.385886758565903,-0.746556282043457,0.541982591152191,0.425350964069366,-0.787436366081238,0.446117222309113,0.601338624954224,-0.55975753068924,0.570143282413483,0.385886758565903,-0.746556282043457,0.541982591152191,0.426225006580353,-0.76509952545166,0.482654064893723,0.408859342336655,-0.819536507129669,0.401489645242691,0.425350964069366,-0.787436366081238,0.446117222309113,0.892324268817902,-0.364589005708694,0.266143202781677,0.883809387683868,-0.290479838848114,0.366745710372925,0.868513345718384,-0.371388286352158,0.328260958194733,0.8774573802948,-0.435060352087021,0.201967760920525,0.868513345718384,-0.371388286352158,0.328260958194733,0.767249822616577,-0.595458924770355,0.23823593556881,0.807879209518433,-0.580146849155426,0.103734038770199,0.8774573802948,-0.435060352087021,0.201967760920525,0.807879209518433,-0.580146849155426,0.103734038770199,0.767249822616577,-0.595458924770355,0.23823593556881,0.630033671855927,-0.76368510723114,0.140863940119743,0.698544383049011,-0.714900195598602,0.0308788027614355,0.630033671855927,-0.76368510723114,0.140863940119743,0.545321881771088,-0.833433032035828,0.0895174741744995,0.600540995597839,-0.799374520778656,-0.0187329761683941,0.698544383049011,-0.714900195598602,0.0308788027614355,0.598369121551514,-0.00250658229924738,0.801216602325439,0.476604402065277,-0.515640795230865,0.712013244628906,0.601338624954224,-0.55975753068924,0.570143282413483,0.756793797016144,-0.0805434510111809,0.64867240190506,0.683284997940063,0.154697299003601,0.713575720787048,\n0.552154183387756,0.173749193549156,0.815436661243439,0.598369121551514,-0.00250658229924738,0.801216602325439,0.756793797016144,-0.0805434510111809,0.64867240190506,0.552154183387756,0.173749193549156,0.815436661243439,0.683284997940063,0.154697299003601,0.713575720787048,0.570054233074188,-0.200027942657471,0.796885788440704,0.362627446651459,-0.180693462491035,0.914249002933502,0.66197681427002,0.379794925451279,0.646175265312195,0.520368456840515,0.258096873760223,0.814004063606262,0.590947866439819,0.059150405228138,0.804538309574127,0.740522563457489,0.0606227926909924,0.6692915558815,0.399795055389404,-0.131603688001633,0.907107710838318,0.628606140613556,-0.0929744690656662,0.77214640378952,0.616745948791504,-0.290956258773804,0.731415688991547,0.381202667951584,-0.36025732755661,0.851410090923309,0.399795055389404,-0.131603688001633,0.907107710838318,0.381202667951584,-0.36025732755661,0.851410090923309,0.0599219687283039,-0.361293613910675,0.93052476644516,0.192558065056801,-0.101361930370331,0.976036429405212,0.381202667951584,-0.36025732755661,0.851410090923309,0.616745948791504,-0.290956258773804,0.731415688991547,0.666223108768463,-0.303315341472626,0.681283056735992,0.462689489126205,-0.42478209733963,0.778125107288361,0.279211044311523,-0.955691933631897,0.093242421746254,0.164180904626846,-0.958690702915192,0.232285901904106,0.225757539272308,-0.896350860595703,0.381560862064362,0.304768770933151,-0.92969423532486,0.206844300031662,0.026754243299365,0.843723058700562,0.53611159324646,-0.204613357782364,0.564212739467621,0.799873352050781,-0.00705753592774272,0.88813054561615,0.45953705906868,0.0228955876082182,0.892617464065552,0.450233042240143,-0.0965566337108612,0.382317036390305,0.918972492218018,0.104800805449486,0.884988248348236,0.453665733337402,-0.00705753592774272,0.88813054561615,0.45953705906868,-0.204613357782364,0.564212739467621,0.799873352050781,0.234877377748489,0.967058181762695,0.0981385260820389,0.216771319508553,0.955569624900818,0.199742004275322,-0.00705753592774272,0.88813054561615,0.45953705906868,\n0.104800805449486,0.884988248348236,0.453665733337402,0.143662974238396,0.945594608783722,0.29191067814827,0.0228955876082182,0.892617464065552,0.450233042240143,-0.00705753592774272,0.88813054561615,0.45953705906868,0.216771319508553,0.955569624900818,0.199742004275322,0.802525162696838,0.518118143081665,0.295815676450729,0.875872433185577,0.296488851308823,0.38071221113205,0.611026585102081,0.780639052391052,-0.131336376070976,0.466519266366959,0.882316112518311,0.0622739568352699,0.611026585102081,0.780639052391052,-0.131336376070976,0.123842000961304,0.97543865442276,-0.182160839438438,-0.427035480737686,0.790110290050507,-0.439734488725662,0.466519266366959,0.882316112518311,0.0622739568352699,0.247720703482628,0.139039516448975,0.95880264043808,0.463392287492752,0.731873750686646,0.499628275632858,0.450289756059647,0.883358836174011,0.130062907934189,0.450289756059647,0.883358836174011,0.130062907934189,-0.0188573095947504,0.503645062446594,0.863704860210419,0.247720703482628,0.139039516448975,0.95880264043808,0.123842000961304,0.97543865442276,-0.182160839438438,0.611026585102081,0.780639052391052,-0.131336376070976,0.450289756059647,0.883358836174011,0.130062907934189,0.463392287492752,0.731873750686646,0.499628275632858,0.875872433185577,0.296488851308823,0.38071221113205,0.785606920719147,0.572498440742493,0.234664186835289,0.450289756059647,0.883358836174011,0.130062907934189,0.611026585102081,0.780639052391052,-0.131336376070976,0.315801054239273,0.0731089860200882,0.946004629135132,-0.0188573095947504,0.503645062446594,0.863704860210419,0.450289756059647,0.883358836174011,0.130062907934189,0.785606920719147,0.572498440742493,0.234664186835289,0.247720703482628,0.139039516448975,0.95880264043808,-0.0188573095947504,0.503645062446594,0.863704860210419,-0.505003929138184,-0.526722073554993,0.683765232563019,0.101962603628635,-0.729668021202087,0.676156997680664,0.247720703482628,0.139039516448975,0.95880264043808,-0.505003929138184,-0.526722073554993,0.683765232563019,-0.505003929138184,-0.526722073554993,0.683765232563019,\n0.315801054239273,0.0731089860200882,0.946004629135132,0.139593034982681,-0.543097734451294,0.827984690666199,-0.350690484046936,-0.68567168712616,0.637863993644714,-0.505003929138184,-0.526722073554993,0.683765232563019,-0.0188573095947504,0.503645062446594,0.863704860210419,0.315801054239273,0.0731089860200882,0.946004629135132,-0.505003929138184,-0.526722073554993,0.683765232563019,-0.350690484046936,-0.68567168712616,0.637863993644714,0.101962603628635,-0.729668021202087,0.676156997680664,0.139593034982681,-0.543097734451294,0.827984690666199,0.34683957695961,-0.624991238117218,0.699348449707031,-0.219358518719673,-0.771041095256805,0.597810626029968,-0.350690484046936,-0.68567168712616,0.637863993644714,0.389301151037216,-0.589295387268066,0.707937479019165,-0.243915364146233,-0.739838838577271,0.627011835575104,-0.219358518719673,-0.771041095256805,0.597810626029968,0.34683957695961,-0.624991238117218,0.699348449707031,0.154463171958923,-0.632704854011536,0.758831799030304,0.220668077468872,-0.699356377124786,0.679857552051544,-0.219358518719673,-0.771041095256805,0.597810626029968,-0.243915364146233,-0.739838838577271,0.627011835575104,0.101962603628635,-0.729668021202087,0.676156997680664,-0.350690484046936,-0.68567168712616,0.637863993644714,-0.219358518719673,-0.771041095256805,0.597810626029968,0.220668077468872,-0.699356377124786,0.679857552051544,0.389301151037216,-0.589295387268066,0.707937479019165,0.317214041948318,-0.645033359527588,0.695202946662903,-0.307040005922318,-0.765494167804718,0.565460085868835,-0.243915364146233,-0.739838838577271,0.627011835575104,0.152485489845276,-0.706423759460449,0.691168308258057,-0.368264228105545,-0.82679408788681,0.425197541713715,-0.307040005922318,-0.765494167804718,0.565460085868835,0.317214041948318,-0.645033359527588,0.695202946662903,-0.15265741944313,-0.753475069999695,0.639508426189423,0.0443188734352589,-0.657264351844788,0.752355933189392,-0.307040005922318,-0.765494167804718,0.565460085868835,-0.368264228105545,-0.82679408788681,0.425197541713715,0.154463171958923,-0.632704854011536,0.758831799030304,\n-0.243915364146233,-0.739838838577271,0.627011835575104,-0.307040005922318,-0.765494167804718,0.565460085868835,0.0443188734352589,-0.657264351844788,0.752355933189392,-0.368264228105545,-0.82679408788681,0.425197541713715,0.152485489845276,-0.706423759460449,0.691168308258057,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.332527428865433,-0.892948389053345,0.303428173065186,-0.368264228105545,-0.82679408788681,0.425197541713715,-0.332527428865433,-0.892948389053345,0.303428173065186,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.15265741944313,-0.753475069999695,0.639508426189423,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.0138667495921254,-0.712914168834686,0.701114177703857,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.332527428865433,-0.892948389053345,0.303428173065186,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0965530276298523,-0.965101063251495,0.243428528308868,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.0138667495921254,-0.712914168834686,0.701114177703857,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.0965530276298523,-0.965101063251495,0.243428528308868,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.332527428865433,-0.892948389053345,0.303428173065186,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.0965530276298523,-0.965101063251495,0.243428528308868,0.0694410875439644,-0.971313714981079,0.227437034249306,0.139529138803482,-0.986220002174377,-0.0888914614915848,-0.0252817086875439,-0.707010686397552,0.706750750541687,0.0366746000945568,-0.755166232585907,0.654506683349609,0.0694410875439644,-0.971313714981079,0.227437034249306,-0.0965530276298523,-0.965101063251495,0.243428528308868,0.206430405378342,-0.778748571872711,0.592399477958679,0.311435610055923,-0.928014516830444,0.204443141818047,\n0.0694410875439644,-0.971313714981079,0.227437034249306,0.0366746000945568,-0.755166232585907,0.654506683349609,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.139529138803482,-0.986220002174377,-0.0888914614915848,0.0694410875439644,-0.971313714981079,0.227437034249306,0.311435610055923,-0.928014516830444,0.204443141818047,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.311435610055923,-0.928014516830444,0.204443141818047,0.517510056495667,-0.833824872970581,0.192144423723221,0.494486898183823,-0.83785080909729,0.231276199221611,0.206430405378342,-0.778748571872711,0.592399477958679,0.314119011163712,-0.739236891269684,0.595699608325958,0.517510056495667,-0.833824872970581,0.192144423723221,0.311435610055923,-0.928014516830444,0.204443141818047,0.360629975795746,-0.702259659767151,0.613821983337402,0.494486898183823,-0.83785080909729,0.231276199221611,0.517510056495667,-0.833824872970581,0.192144423723221,0.626789748668671,-0.749257385730743,0.213887751102448,0.194313436746597,-0.80370157957077,0.562410891056061,0.115422785282135,-0.952069759368896,0.283268004655838,0.0416775047779083,-0.927180886268616,0.372288316488266,0.209196627140045,-0.665287017822266,0.716679811477661,0.292688071727753,-0.580336809158325,0.759962379932404,0.340945303440094,-0.698488175868988,0.629182457923889,0.194313436746597,-0.80370157957077,0.562410891056061,0.209196627140045,-0.665287017822266,0.716679811477661,0.340945303440094,-0.698488175868988,0.629182457923889,0.353568494319916,-0.776771426200867,0.521167457103729,0.225757539272308,-0.896350860595703,0.381560862064362,0.194313436746597,-0.80370157957077,0.562410891056061,0.402090311050415,-0.284287929534912,0.870346903800964,0.353568494319916,-0.776771426200867,0.521167457103729,0.340945303440094,-0.698488175868988,0.629182457923889,0.431166082620621,-0.246951669454575,0.867819547653198,0.414541780948639,0.400993496179581,0.816920638084412,0.491490423679352,0.244152218103409,0.835958659648895,0.498867928981781,0.236602708697319,0.833756506443024,0.37644562125206,0.38054347038269,0.844674706459045,\n0.471029788255692,0.166954964399338,0.86617374420166,0.498867928981781,0.236602708697319,0.833756506443024,0.491490423679352,0.244152218103409,0.835958659648895,0.168070778250694,-0.457133919000626,0.873373210430145,-0.00835443940013647,-0.52916145324707,0.848480045795441,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.184710487723351,-0.617817997932434,0.764318585395813,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.189460039138794,-0.647004544734955,0.738572955131531,0.286647915840149,-0.584438979625702,0.759120643138886,0.184710487723351,-0.617817997932434,0.764318585395813,0.615384101867676,0.0611244365572929,0.785853803157806,0.668389976024628,-0.0383556596934795,0.742821395397186,0.593307375907898,-0.0775594636797905,0.801230847835541,0.578135192394257,0.0218988731503487,0.815647065639496,0.61716902256012,-0.00506624486297369,0.786814272403717,0.652630388736725,-0.0358134843409061,0.756829559803009,0.620820641517639,-0.00240864953957498,0.783948957920074,0.724583506584167,-0.0711281225085258,0.685506820678711,0.740868389606476,0.000323399232001975,0.671650171279907,0.636694431304932,0.0437434837222099,0.769874513149261,0.724583506584167,-0.0711281225085258,0.685506820678711,0.802095234394073,-0.0203569829463959,0.596849083900452,0.825742661952972,-0.0501102656126022,0.561816692352295,0.740868389606476,0.000323399232001975,0.671650171279907,0.189460039138794,-0.647004544734955,0.738572955131531,0.598259091377258,-0.415802270174026,0.684977769851685,0.659502923488617,-0.421348959207535,0.622511804103851,0.381202667951584,-0.36025732755661,0.851410090923309,0.462689489126205,-0.42478209733963,0.778125107288361,-0.00835443940013647,-0.52916145324707,0.848480045795441,0.0599219687283039,-0.361293613910675,0.93052476644516,0.41924661397934,0.116037733852863,0.90042632818222,0.452132165431976,-0.0737369656562805,0.888897836208344,0.399795055389404,-0.131603688001633,0.907107710838318,0.192558065056801,-0.101361930370331,0.976036429405212,0.452132165431976,-0.0737369656562805,0.888897836208344,\n0.605580151081085,-0.127637818455696,0.785481572151184,0.628606140613556,-0.0929744690656662,0.77214640378952,0.399795055389404,-0.131603688001633,0.907107710838318,0.321778655052185,0.226275533437729,0.919379055500031,0.41924661397934,0.116037733852863,0.90042632818222,0.192558065056801,-0.101361930370331,0.976036429405212,0.321778655052185,0.226275533437729,0.919379055500031,0.192558065056801,-0.101361930370331,0.976036429405212,0.315801054239273,0.0731089860200882,0.946004629135132,0.720236837863922,0.181686788797379,0.669513881206512,0.656306624412537,0.257158219814301,0.709317445755005,0.875872433185577,0.296488851308823,0.38071221113205,0.315801054239273,0.0731089860200882,0.946004629135132,0.785606920719147,0.572498440742493,0.234664186835289,0.875872433185577,0.296488851308823,0.38071221113205,0.656306624412537,0.257158219814301,0.709317445755005,0.41924661397934,0.116037733852863,0.90042632818222,0.321778655052185,0.226275533437729,0.919379055500031,0.479255974292755,0.34857839345932,0.805485486984253,0.528464257717133,0.246433109045029,0.812401533126831,0.315801054239273,0.0731089860200882,0.946004629135132,0.656306624412537,0.257158219814301,0.709317445755005,0.479255974292755,0.34857839345932,0.805485486984253,0.321778655052185,0.226275533437729,0.919379055500031,0.720236837863922,0.181686788797379,0.669513881206512,0.528464257717133,0.246433109045029,0.812401533126831,0.479255974292755,0.34857839345932,0.805485486984253,0.656306624412537,0.257158219814301,0.709317445755005,0.525402009487152,0.0301267635077238,0.85032057762146,0.529063761234283,-0.0630637779831886,0.846235513687134,0.452132165431976,-0.0737369656562805,0.888897836208344,0.41924661397934,0.116037733852863,0.90042632818222,0.529063761234283,-0.0630637779831886,0.846235513687134,0.627576470375061,-0.135800153017044,0.766619920730591,0.605580151081085,-0.127637818455696,0.785481572151184,0.452132165431976,-0.0737369656562805,0.888897836208344,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.994033694267273,0.107649877667427,-0.0175654906779528,\n-0.655008316040039,-0.755039751529694,0.029649443924427,-0.749779462814331,-0.631075918674469,-0.198931902647018,-0.474541693925858,-0.67278927564621,0.567595541477203,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.994033694267273,0.107649877667427,-0.0175654906779528,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.749779462814331,-0.631075918674469,-0.198931902647018,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.637578308582306,0.271278858184814,-0.721042096614838,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.757471144199371,0.2759148478508,-0.591699600219727,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.72423392534256,0.108453460037708,-0.680972158908844,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.757471144199371,0.2759148478508,-0.591699600219727,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.637578308582306,0.271278858184814,-0.721042096614838,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.72423392534256,0.108453460037708,-0.680972158908844,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.757471144199371,0.2759148478508,-0.591699600219727,-0.84568065404892,0.227536335587502,-0.482753932476044,\n-0.934147357940674,0.162888333201408,-0.317546963691711,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.757471144199371,0.2759148478508,-0.591699600219727,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.843048751354218,-0.0439708046615124,-0.536036670207977,0.443391680717468,-0.0999263972043991,0.89074045419693,0.164051368832588,-0.273042142391205,0.947910964488983,0.121470481157303,-0.391699403524399,0.912039756774902,0.252335846424103,0.330343335866928,0.909505307674408,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0613121353089809,-0.89322817325592,0.445403426885605,-0.00129488680977374,-0.888734400272369,0.458420634269714,0.0125365713611245,-0.668434202671051,0.743665635585785,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,0.00571701768785715,-0.999931693077087,-0.0101942336186767,-0.00129488680977374,-0.888734400272369,0.458420634269714,-0.0613121353089809,-0.89322817325592,0.445403426885605,0.191416949033737,-0.0921172648668289,0.977176547050476,0.0600041374564171,-0.192453533411026,0.979469835758209,0.171075537800789,-0.616661608219147,0.768415033817291,0.164827063679695,-0.547387719154358,0.820486903190613,0.0592407323420048,-0.802932441234589,0.593118906021118,-0.05385497584939,-0.996109485626221,0.06975357234478,-0.217067420482636,-0.972187459468842,0.0879386737942696,0.0574505962431431,-0.838245630264282,0.542257905006409,0.0592407323420048,-0.802932441234589,0.593118906021118,0.0574505962431431,-0.838245630264282,0.542257905006409,0.217255920171738,-0.631381034851074,0.744417786598206,0.114735066890717,-0.656680226325989,0.745390474796295,0.0574505962431431,-0.838245630264282,0.542257905006409,-0.217067420482636,-0.972187459468842,0.0879386737942696,-0.304188013076782,-0.938978254795074,0.160591080784798,0.0620634108781815,-0.851760566234589,0.520242273807526,0.0574505962431431,-0.838245630264282,0.542257905006409,0.0620634108781815,-0.851760566234589,0.520242273807526,\n0.34566730260849,-0.589025497436523,0.73045402765274,0.217255920171738,-0.631381034851074,0.744417786598206,0.0620634108781815,-0.851760566234589,0.520242273807526,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.127903699874878,-0.852072358131409,0.507556319236755,0.0620634108781815,-0.851760566234589,0.520242273807526,-0.127903699874878,-0.852072358131409,0.507556319236755,0.266091585159302,-0.603160440921783,0.751926004886627,0.34566730260849,-0.589025497436523,0.73045402765274,0.827663242816925,0.523418128490448,0.202501967549324,0.778178691864014,0.616257607936859,0.121097095310688,0.713096976280212,0.68854147195816,-0.131921663880348,0.662245333194733,0.742432057857513,-0.101122446358204,0.650610029697418,0.750839710235596,0.113781958818436,0.804373443126678,0.392295897006989,0.446191996335983,0.827663242816925,0.523418128490448,0.202501967549324,0.662245333194733,0.742432057857513,-0.101122446358204,0.33390274643898,0.823867678642273,-0.457985788583755,0.35404372215271,0.848205924034119,-0.393953949213028,0.662245333194733,0.742432057857513,-0.101122446358204,0.713096976280212,0.68854147195816,-0.131921663880348,0.401338756084442,0.891479909420013,-0.210216000676155,0.650610029697418,0.750839710235596,0.113781958818436,0.662245333194733,0.742432057857513,-0.101122446358204,0.35404372215271,0.848205924034119,-0.393953949213028,0.33390274643898,0.823867678642273,-0.457985788583755,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.325168341398239,0.677460372447968,-0.659782588481903,0.35404372215271,0.848205924034119,-0.393953949213028,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.903453350067139,0.0792897418141365,-0.421289950609207,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.19065423309803,0.753101229667664,-0.629674077033997,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.903453350067139,0.0792897418141365,-0.421289950609207,\n0.401338756084442,0.891479909420013,-0.210216000676155,0.35404372215271,0.848205924034119,-0.393953949213028,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.19065423309803,0.753101229667664,-0.629674077033997,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.903453350067139,0.0792897418141365,-0.421289950609207,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.384992688894272,0.544456601142883,-0.745216548442841,-0.719125330448151,0.296634525060654,-0.628384232521057,0.370056182146072,0.811048626899719,-0.453054636716843,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.384992688894272,0.544456601142883,-0.745216548442841,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.384992688894272,0.544456601142883,-0.745216548442841,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.903518497943878,-0.0541667006909847,-0.425112038850784,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903518497943878,-0.0541667006909847,-0.425112038850784,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.946641564369202,0.0270117726176977,-0.321154475212097,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.903518497943878,-0.0541667006909847,-0.425112038850784,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903518497943878,-0.0541667006909847,-0.425112038850784,\n0.370056182146072,0.811048626899719,-0.453054636716843,-0.817673206329346,0.400343358516693,-0.413685619831085,-0.914967000484467,-0.0528537072241306,-0.400052279233933,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.914967000484467,-0.0528537072241306,-0.400052279233933,-0.817673206329346,0.400343358516693,-0.413685619831085,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.914967000484467,-0.0528537072241306,-0.400052279233933,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903453350067139,0.0792897418141365,-0.421289950609207,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.339177936315537,-0.843130052089691,0.417241036891937,-0.339177936315537,-0.843130052089691,0.417241036891937,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.474541693925858,-0.67278927564621,0.567595541477203,0.0940685495734215,-0.732769310474396,0.673943758010864,0.656731724739075,-0.381447851657867,0.650538980960846,0.681784629821777,-0.285219341516495,0.673661351203918,0.629800915718079,-0.358788877725601,0.68892765045166,0.656731724739075,-0.381447851657867,0.650538980960846,0.629800915718079,-0.358788877725601,0.68892765045166,0.680992484092712,-0.305005490779877,0.665748357772827,0.678119361400604,-0.318360239267349,0.662420451641083,0.857260406017303,0.312566876411438,0.409153461456299,0.855352699756622,0.226547658443451,0.46588408946991,0.741662085056305,0.344577699899673,0.575502872467041,0.813006162643433,0.437411576509476,0.384307235479355,0.426225006580353,-0.76509952545166,0.482654064893723,0.361090242862701,-0.862221240997314,0.355229914188385,0.369030982255936,-0.873893618583679,0.316427052021027,\n0.408859342336655,-0.819536507129669,0.401489645242691,0.361090242862701,-0.862221240997314,0.355229914188385,0.193085044622421,-0.95480340719223,0.225983783602715,0.225613579154015,-0.956868171691895,0.183034926652908,0.369030982255936,-0.873893618583679,0.316427052021027,0.545321881771088,-0.833433032035828,0.0895174741744995,0.471000701189041,-0.846986770629883,0.246519237756729,0.42274335026741,-0.887621939182281,0.182798534631729,0.465096980333328,-0.885112583637238,0.016138968989253,0.42274335026741,-0.887621939182281,0.182798534631729,0.263781130313873,-0.963467478752136,0.0463673323392868,0.283746033906937,-0.948122382164001,-0.143360316753387,0.465096980333328,-0.885112583637238,0.016138968989253,0.283746033906937,-0.948122382164001,-0.143360316753387,0.263781130313873,-0.963467478752136,0.0463673323392868,0.158431231975555,-0.986164569854736,-0.0487753190100193,0.164555922150612,-0.956649422645569,-0.240298211574554,0.158431231975555,-0.986164569854736,-0.0487753190100193,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.0633370503783226,-0.944429814815521,-0.322553485631943,0.164555922150612,-0.956649422645569,-0.240298211574554,0.361090242862701,-0.862221240997314,0.355229914188385,0.426225006580353,-0.76509952545166,0.482654064893723,0.295715004205704,-0.771513819694519,0.56331080198288,0.233462005853653,-0.895743429660797,0.378337532281876,0.193085044622421,-0.95480340719223,0.225983783602715,0.361090242862701,-0.862221240997314,0.355229914188385,0.233462005853653,-0.895743429660797,0.378337532281876,0.295715004205704,-0.771513819694519,0.56331080198288,0.0651562884449959,-0.780692636966705,0.62150913476944,0.050213560461998,-0.91094309091568,0.409464567899704,0.233462005853653,-0.895743429660797,0.378337532281876,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.0628481134772301,-0.906862795352936,0.416713327169418,0.050213560461998,-0.91094309091568,0.409464567899704,0.0651562884449959,-0.780692636966705,0.62150913476944,-0.0727874711155891,-0.98180228471756,0.1754030585289,0.0766859278082848,-0.975562393665314,0.205905899405479,\n0.050213560461998,-0.91094309091568,0.409464567899704,-0.0628481134772301,-0.906862795352936,0.416713327169418,0.193085044622421,-0.95480340719223,0.225983783602715,0.233462005853653,-0.895743429660797,0.378337532281876,0.050213560461998,-0.91094309091568,0.409464567899704,0.0766859278082848,-0.975562393665314,0.205905899405479,-0.0777209997177124,-0.922415435314178,-0.378297746181488,0.0633370503783226,-0.944429814815521,-0.322553485631943,0.0663259923458099,-0.98754096031189,-0.14270156621933,-0.0788524150848389,-0.974068284034729,-0.212069168686867,0.684517562389374,-0.439017295837402,0.581978976726532,0.688922643661499,-0.305572867393494,0.657275319099426,0.844530344009399,-0.306019067764282,0.4394551217556,0.789786696434021,-0.370871901512146,0.488560140132904,0.844530344009399,-0.306019067764282,0.4394551217556,0.688922643661499,-0.305572867393494,0.657275319099426,0.750554323196411,-0.229917243123055,0.619521021842957,0.926659166812897,-0.245477139949799,0.284681916236877,0.897057175636292,-0.352101475000381,0.267044723033905,0.844530344009399,-0.306019067764282,0.4394551217556,0.926659166812897,-0.245477139949799,0.284681916236877,0.927076876163483,-0.29800683259964,0.227421119809151,0.640791594982147,-0.766526699066162,0.0426960773766041,0.705848097801209,-0.694441199302673,0.13974928855896,0.727549016475677,-0.679640352725983,0.0936024785041809,0.638466238975525,-0.769491136074066,0.0156274978071451,0.693672001361847,-0.686315536499023,0.218609541654587,0.772367715835571,-0.599683940410614,0.209349811077118,0.727549016475677,-0.679640352725983,0.0936024785041809,0.705848097801209,-0.694441199302673,0.13974928855896,0.756793797016144,-0.0805434510111809,0.64867240190506,0.821784615516663,-0.261638671159744,0.506177127361298,0.792236804962158,-0.0960670188069344,0.602604329586029,0.70995169878006,-0.557043075561523,0.430896311998367,0.821784615516663,-0.261638671159744,0.506177127361298,0.756793797016144,-0.0805434510111809,0.64867240190506,0.601338624954224,-0.55975753068924,0.570143282413483,0.471000701189041,-0.846986770629883,0.246519237756729,\n0.539758801460266,-0.780041754245758,0.316536396741867,0.425350964069366,-0.787436366081238,0.446117222309113,0.408859342336655,-0.819536507129669,0.401489645242691,0.70995169878006,-0.557043075561523,0.430896311998367,0.601338624954224,-0.55975753068924,0.570143282413483,0.425350964069366,-0.787436366081238,0.446117222309113,0.539758801460266,-0.780041754245758,0.316536396741867,0.263781130313873,-0.963467478752136,0.0463673323392868,0.42274335026741,-0.887621939182281,0.182798534631729,0.369030982255936,-0.873893618583679,0.316427052021027,0.225613579154015,-0.956868171691895,0.183034926652908,0.471000701189041,-0.846986770629883,0.246519237756729,0.408859342336655,-0.819536507129669,0.401489645242691,0.369030982255936,-0.873893618583679,0.316427052021027,0.42274335026741,-0.887621939182281,0.182798534631729,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.158431231975555,-0.986164569854736,-0.0487753190100193,0.128954827785492,-0.985570788383484,0.109639815986156,0.0500960312783718,-0.998004376888275,0.0384394414722919,0.263781130313873,-0.963467478752136,0.0463673323392868,0.225613579154015,-0.956868171691895,0.183034926652908,0.128954827785492,-0.985570788383484,0.109639815986156,0.158431231975555,-0.986164569854736,-0.0487753190100193,-0.0788524150848389,-0.974068284034729,-0.212069168686867,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.0500960312783718,-0.998004376888275,0.0384394414722919,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,0.0500960312783718,-0.998004376888275,0.0384394414722919,0.8774573802948,-0.435060352087021,0.201967760920525,0.807879209518433,-0.580146849155426,0.103734038770199,0.772367715835571,-0.599683940410614,0.209349811077118,0.785579741001129,-0.492246091365814,0.374910920858383,0.789786696434021,-0.370871901512146,0.488560140132904,0.892324268817902,-0.364589005708694,0.266143202781677,0.8774573802948,-0.435060352087021,0.201967760920525,\n0.785579741001129,-0.492246091365814,0.374910920858383,0.693672001361847,-0.686315536499023,0.218609541654587,0.689838171005249,-0.617681860923767,0.377614080905914,0.785579741001129,-0.492246091365814,0.374910920858383,0.772367715835571,-0.599683940410614,0.209349811077118,0.684517562389374,-0.439017295837402,0.581978976726532,0.789786696434021,-0.370871901512146,0.488560140132904,0.785579741001129,-0.492246091365814,0.374910920858383,0.689838171005249,-0.617681860923767,0.377614080905914,0.813478171825409,-0.273027837276459,0.513526141643524,0.887543320655823,-0.171314582228661,0.427689343690872,0.651034355163574,-0.303375482559204,0.695785582065582,0.691827952861786,-0.359834015369415,0.626013994216919,0.683746695518494,-0.463673830032349,0.563468754291534,0.813478171825409,-0.273027837276459,0.513526141643524,0.691827952861786,-0.359834015369415,0.626013994216919,0.780404269695282,-0.392066359519959,0.487086415290833,0.683746695518494,-0.463673830032349,0.563468754291534,0.780404269695282,-0.392066359519959,0.487086415290833,0.810256838798523,-0.430587977170944,0.397590130567551,0.629647791385651,-0.52997088432312,0.568044483661652,-0.127903699874878,-0.852072358131409,0.507556319236755,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.339177936315537,-0.843130052089691,0.417241036891937,-0.127903699874878,-0.852072358131409,0.507556319236755,-0.339177936315537,-0.843130052089691,0.417241036891937,0.0940685495734215,-0.732769310474396,0.673943758010864,0.266091585159302,-0.603160440921783,0.751926004886627,0.553863286972046,-0.30215710401535,0.77584570646286,0.266091585159302,-0.603160440921783,0.751926004886627,0.0940685495734215,-0.732769310474396,0.673943758010864,0.525104641914368,-0.419060587882996,0.740711390972137,0.553863286972046,-0.30215710401535,0.77584570646286,0.525104641914368,-0.419060587882996,0.740711390972137,0.588271081447601,-0.259690821170807,0.765831470489502,0.607095539569855,-0.200262412428856,0.768979847431183,0.546967387199402,0.0579036511480808,0.835148990154266,\n0.568371534347534,0.0187626089900732,0.822558045387268,0.601098597049713,0.0911194980144501,0.793963313102722,0.565106153488159,0.017743531614542,0.824827373027802,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.301303088665009,-0.716448962688446,0.629219651222229,0.411182582378387,-0.842439949512482,0.348172098398209,0.117540158331394,-0.936730265617371,0.329728245735168,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.117540158331394,-0.936730265617371,0.329728245735168,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.0433456413447857,-0.716439366340637,0.696301460266113,0.44965198636055,0.140096634626389,0.882148504257202,0.56849592924118,-0.125116035342216,0.813116490840912,0.416703939437866,-0.0255245417356491,0.908683836460114,0.218448147177696,-0.859921038150787,0.461320102214813,0.190928906202316,-0.824125647544861,0.533257067203522,0.301912575960159,-0.736388921737671,0.605458617210388,0.423061966896057,-0.638191282749176,0.643218815326691,0.350974529981613,-0.540442049503326,0.764682471752167,0.461174815893173,-0.519026458263397,0.719673037528992,0.301912575960159,-0.736388921737671,0.605458617210388,0.190928906202316,-0.824125647544861,0.533257067203522,0.56849592924118,-0.125116035342216,0.813116490840912,0.423061966896057,-0.638191282749176,0.643218815326691,0.301912575960159,-0.736388921737671,0.605458617210388,0.461174815893173,-0.519026458263397,0.719673037528992,0.633136808872223,-0.0669011846184731,0.771143317222595,0.655753970146179,-0.0819050073623657,0.750518679618835,0.501314342021942,-0.180266559123993,0.846278846263886,0.421490222215652,-0.217597857117653,0.880339205265045,0.345462441444397,-0.298967152833939,0.889536023139954,0.578185617923737,-0.0845057815313339,0.811517179012299,0.633136808872223,-0.0669011846184731,0.771143317222595,0.421490222215652,-0.217597857117653,0.880339205265045,0.523068964481354,-0.400331109762192,0.752418637275696,0.511712968349457,-0.26713839173317,0.816570222377777,0.443391680717468,-0.0999263972043991,0.89074045419693,0.515636503696442,-0.41490975022316,0.749645829200745,\n0.7577885389328,0.376234740018845,0.533107817173004,0.740872263908386,0.260281056165695,0.619162321090698,0.750837445259094,-0.0367836877703667,0.659461975097656,0.758135914802551,0.0851427242159843,0.646514236927032,0.740872263908386,0.260281056165695,0.619162321090698,0.558381021022797,0.167118594050407,0.812577426433563,0.488678455352783,-0.257274806499481,0.833668410778046,0.750837445259094,-0.0367836877703667,0.659461975097656,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.696032464504242,-0.619228482246399,-0.363448590040207,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.696032464504242,-0.619228482246399,-0.363448590040207,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.572831332683563,0.0232040770351887,-0.819344758987427,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.572831332683563,0.0232040770351887,-0.819344758987427,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.72423392534256,0.108453460037708,-0.680972158908844,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.749779462814331,-0.631075918674469,-0.198931902647018,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.72423392534256,0.108453460037708,-0.680972158908844,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.749779462814331,-0.631075918674469,-0.198931902647018,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.929068803787231,-0.0690155401825905,-0.363411635160446,\n-0.970641255378723,0.0346399769186974,-0.238024458289146,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.946641564369202,0.0270117726176977,-0.321154475212097,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.83115953207016,0.347447574138641,0.434112966060638,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.970641255378723,0.0346399769186974,-0.238024458289146,-0.634040713310242,0.756764888763428,0.159057512879372,-0.945308268070221,0.226358875632286,-0.234848886728287,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.83115953207016,0.347447574138641,0.434112966060638,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.946641564369202,0.0270117726176977,-0.321154475212097,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.945308268070221,0.226358875632286,-0.234848886728287,0.0454688854515553,-0.765503704547882,0.641822934150696,0.0821766927838326,-0.66467010974884,0.742603957653046,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.915560901165009,-0.141839787364006,0.376337260007858,0.956220626831055,-0.152332276105881,0.249873846769333,0.970759510993958,-0.233238592743874,0.056795421987772,0.920036554336548,-0.30953249335289,0.240254893898964,0.915560901165009,-0.141839787364006,0.376337260007858,0.920036554336548,-0.30953249335289,0.240254893898964,0.840808868408203,-0.369773417711258,0.395358175039291,0.820341229438782,-0.113342881202698,0.560529828071594,0.639384806156158,-0.761013865470886,0.109749406576157,0.65738570690155,-0.752218425273895,0.0448495484888554,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.575045108795166,-0.818020403385162,0.0128742791712284,0.65738570690155,-0.752218425273895,0.0448495484888554,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.501666784286499,-0.849441289901733,-0.163646027445793,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.499172002077103,-0.857490539550781,-0.124648600816727,0.537862658500671,-0.839294493198395,-0.0793002098798752,\n0.575045108795166,-0.818020403385162,0.0128742791712284,-0.032355971634388,-0.99692964553833,0.0713044255971909,0.155652940273285,-0.987067878246307,0.0383299365639687,0.168408244848251,-0.974918007850647,0.145511314272881,-0.036917757242918,-0.99125212430954,0.126713573932648,0.168408244848251,-0.974918007850647,0.145511314272881,0.155652940273285,-0.987067878246307,0.0383299365639687,0.279211044311523,-0.955691933631897,0.093242421746254,0.304768770933151,-0.92969423532486,0.206844300031662,0.741662085056305,0.344577699899673,0.575502872467041,0.814013004302979,0.416528642177582,0.404829293489456,0.854046881198883,0.485713124275208,0.186243653297424,0.813006162643433,0.437411576509476,0.384307235479355,0.793840944766998,0.179479137063026,0.581036806106567,0.776109874248505,0.274881482124329,0.567532956600189,0.864675521850586,0.193993464112282,0.46336030960083,0.776109874248505,0.274881482124329,0.567532956600189,0.815548717975616,0.273398518562317,0.510032892227173,0.864675521850586,0.193993464112282,0.46336030960083,0.894858956336975,-0.0870964974164963,0.437768936157227,0.834977984428406,0.275511413812637,0.47634568810463,0.813101530075073,0.281051158905029,0.509780466556549,0.693030059337616,-0.0411044172942638,0.71973592042923,0.717148721218109,-0.158668875694275,0.678617656230927,0.738801121711731,-0.260166734457016,0.6216801404953,0.881620466709137,-0.332029432058334,0.335412949323654,0.894858956336975,-0.0870964974164963,0.437768936157227,0.717148721218109,-0.158668875694275,0.678617656230927,0.885035216808319,0.393218964338303,0.249181613326073,0.813006162643433,0.437411576509476,0.384307235479355,0.854046881198883,0.485713124275208,0.186243653297424,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.109049446880817,0.0514820925891399,0.992702305316925,0.54212898015976,0.215727955102921,0.812131583690643,0.470013290643692,0.212332352995873,0.856739461421967,0.0144113004207611,0.0269631575793028,0.999532520771027,0.779178857803345,0.328662276268005,0.533724129199982,0.749379277229309,0.298672914505005,0.590952754020691,\n0.776918292045593,0.306892603635788,0.549740731716156,0.791379868984222,0.358002513647079,0.495532125234604,0.749379277229309,0.298672914505005,0.590952754020691,0.776109874248505,0.274881482124329,0.567532956600189,0.793840944766998,0.179479137063026,0.581036806106567,0.776918292045593,0.306892603635788,0.549740731716156,0.328961253166199,0.182314842939377,0.92657744884491,0.335490047931671,-0.171642184257507,0.926275014877319,0.351316899061203,-0.0729207322001457,0.933412551879883,0.314301073551178,0.320888847112656,0.893445670604706,0.533053755760193,0.0411353260278702,0.845080852508545,0.770362615585327,0.0158082563430071,0.63740998506546,0.786049902439117,0.275353401899338,0.553449213504791,0.542900562286377,0.367345452308655,0.755192875862122,0.786049902439117,0.275353401899338,0.553449213504791,0.770362615585327,0.0158082563430071,0.63740998506546,0.842584788799286,-0.21356026828289,0.494411617517471,0.912213087081909,0.0526493825018406,0.406319200992584,0.926979184150696,-0.0986248403787613,0.36191537976265,0.912213087081909,0.0526493825018406,0.406319200992584,0.842584788799286,-0.21356026828289,0.494411617517471,0.831848502159119,-0.322033703327179,0.452020287513733,0.926979184150696,-0.0986248403787613,0.36191537976265,0.831848502159119,-0.322033703327179,0.452020287513733,0.838417947292328,-0.244426995515823,0.487145572900772,0.875677406787872,-0.203340858221054,0.437997281551361,0.754335284233093,-0.305042564868927,0.581315159797668,0.838417947292328,-0.244426995515823,0.487145572900772,0.831848502159119,-0.322033703327179,0.452020287513733,0.73811411857605,-0.426667273044586,0.522630453109741,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.197210118174553,0.0128493588417768,0.980277061462402,0.193743079900742,0.0896209701895714,0.976950228214264,0.17069847881794,-0.387216597795486,0.906049311161041,0.197210118174553,0.0128493588417768,0.980277061462402,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.458961844444275,-0.463801801204681,0.757787525653839,-0.0354966223239899,-0.161021754145622,0.986312329769135,\n0.193743079900742,0.0896209701895714,0.976950228214264,0.190371856093407,0.256429195404053,0.947629988193512,0.190371856093407,0.256429195404053,0.947629988193512,0.458961844444275,-0.463801801204681,0.757787525653839,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.573087453842163,0.0656763836741447,0.816858232021332,0.636694431304932,0.0437434837222099,0.769874513149261,0.627576470375061,-0.135800153017044,0.766619920730591,0.529063761234283,-0.0630637779831886,0.846235513687134,0.573087453842163,0.0656763836741447,0.816858232021332,0.529063761234283,-0.0630637779831886,0.846235513687134,0.525402009487152,0.0301267635077238,0.85032057762146,0.621637463569641,0.0923129394650459,0.77784651517868,0.620820641517639,-0.00240864953957498,0.783948957920074,0.652630388736725,-0.0358134843409061,0.756829559803009,0.730820298194885,-0.016795739531517,0.682363271713257,0.724583506584167,-0.0711281225085258,0.685506820678711,0.61716902256012,-0.00506624486297369,0.786814272403717,0.750991225242615,0.0683757290244102,0.656762480735779,0.730820298194885,-0.016795739531517,0.682363271713257,0.652630388736725,-0.0358134843409061,0.756829559803009,0.802095234394073,-0.0203569829463959,0.596849083900452,0.724583506584167,-0.0711281225085258,0.685506820678711,0.730820298194885,-0.016795739531517,0.682363271713257,0.750991225242615,0.0683757290244102,0.656762480735779,0.56373119354248,0.0243276692926884,0.825599908828735,0.613882482051849,0.099590003490448,0.783090114593506,0.615384101867676,0.0611244365572929,0.785853803157806,0.620820641517639,-0.00240864953957498,0.783948957920074,0.615384101867676,0.0611244365572929,0.785853803157806,0.652630388736725,-0.0358134843409061,0.756829559803009,0.620820641517639,-0.00240864953957498,0.783948957920074,0.621637463569641,0.0923129394650459,0.77784651517868,0.613882482051849,0.099590003490448,0.783090114593506,0.56373119354248,0.0243276692926884,0.825599908828735,0.573087453842163,0.0656763836741447,0.816858232021332,0.56373119354248,0.0243276692926884,0.825599908828735,0.620820641517639,-0.00240864953957498,0.783948957920074,\n0.636694431304932,0.0437434837222099,0.769874513149261,0.573087453842163,0.0656763836741447,0.816858232021332,0.598116338253021,0.120038144290447,0.792368412017822,0.621637463569641,0.0923129394650459,0.77784651517868,0.41924661397934,0.116037733852863,0.90042632818222,0.528464257717133,0.246433109045029,0.812401533126831,0.621637463569641,0.0923129394650459,0.77784651517868,0.598116338253021,0.120038144290447,0.792368412017822,0.712920248508453,0.00929267052561045,0.701183557510376,0.720236837863922,0.181686788797379,0.669513881206512,0.751433670520782,0.0212495382875204,0.659466326236725,0.598116338253021,0.120038144290447,0.792368412017822,0.528464257717133,0.246433109045029,0.812401533126831,0.598116338253021,0.120038144290447,0.792368412017822,0.751433670520782,0.0212495382875204,0.659466326236725,0.712920248508453,0.00929267052561045,0.701183557510376,0.621637463569641,0.0923129394650459,0.77784651517868,0.525402009487152,0.0301267635077238,0.85032057762146,0.41924661397934,0.116037733852863,0.90042632818222,0.724869191646576,-0.144625514745712,0.673534035682678,0.712920248508453,0.00929267052561045,0.701183557510376,0.751433670520782,0.0212495382875204,0.659466326236725,0.858066916465759,-0.0402064435184002,0.511961579322815,0.751433670520782,0.0212495382875204,0.659466326236725,0.720236837863922,0.181686788797379,0.669513881206512,0.875872433185577,0.296488851308823,0.38071221113205,0.858066916465759,-0.0402064435184002,0.511961579322815,0.578135192394257,0.0218988731503487,0.815647065639496,0.593307375907898,-0.0775594636797905,0.801230847835541,0.577744483947754,0.0458397567272186,0.814929485321045,0.59909462928772,0.124072253704071,0.791006743907928,0.578135192394257,0.0218988731503487,0.815647065639496,0.577744483947754,0.0458397567272186,0.814929485321045,0.550924062728882,0.0100475419312716,0.834494948387146,0.59909462928772,0.124072253704071,0.791006743907928,0.550924062728882,0.0100475419312716,0.834494948387146,0.584165692329407,-0.333255082368851,0.740061819553375,0.747522175312042,-0.213430538773537,0.629013538360596,\n0.916658163070679,-0.0698241367936134,0.393525570631027,0.855076372623444,-0.165702432394028,0.491311639547348,0.85496574640274,-0.0235987044870853,0.518147349357605,0.903705775737762,0.0166217982769012,0.427831262350082,0.937154471874237,-0.0475939512252808,0.345653474330902,0.916658163070679,-0.0698241367936134,0.393525570631027,0.903705775737762,0.0166217982769012,0.427831262350082,0.916476547718048,0.0582267269492149,0.395828783512115,0.358242690563202,-0.369526594877243,0.857386887073517,0.386847853660584,-0.767014622688293,0.511895835399628,0.738801121711731,-0.260166734457016,0.6216801404953,0.16572479903698,-0.647090375423431,0.744183719158173,0.0293192863464355,-0.389476090669632,0.920569777488709,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.0821766927838326,-0.66467010974884,0.742603957653046,0.2151879966259,-0.952648401260376,-0.214837476611137,0.589298963546753,-0.771825730800629,0.238771393895149,0.704199492931366,-0.704627811908722,0.0871931314468384,0.43766725063324,-0.727506041526794,-0.528377115726471,0.0578227378427982,-0.628531396389008,-0.775631904602051,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.2151879966259,-0.952648401260376,-0.214837476611137,0.43766725063324,-0.727506041526794,-0.528377115726471,0.778993248939514,-0.607196033000946,0.156468689441681,0.914134383201599,-0.267116606235504,-0.304970562458038,0.43766725063324,-0.727506041526794,-0.528377115726471,0.704199492931366,-0.704627811908722,0.0871931314468384,0.801777124404907,0.00266337930224836,-0.597617149353027,0.0578227378427982,-0.628531396389008,-0.775631904602051,0.43766725063324,-0.727506041526794,-0.528377115726471,0.43766725063324,-0.727506041526794,-0.528377115726471,0.914134383201599,-0.267116606235504,-0.304970562458038,0.801777124404907,0.00266337930224836,-0.597617149353027,0.844061017036438,0.391468346118927,0.366488069295883,0.801777124404907,0.00266337930224836,-0.597617149353027,0.993568658828735,0.0655909031629562,0.0922989472746849,0.941748380661011,0.168847903609276,0.290861427783966,\n0.823821365833282,-0.474406152963638,0.310253411531448,0.940892815589905,-0.119216494262218,0.317030221223831,0.941748380661011,0.168847903609276,0.290861427783966,0.993568658828735,0.0655909031629562,0.0922989472746849,0.218448147177696,-0.859921038150787,0.461320102214813,0.462026834487915,-0.814152240753174,0.351692080497742,0.280335813760757,-0.904288768768311,0.321983903646469,0.160614088177681,-0.826539099216461,0.539477705955505,0.851511597633362,-0.5011847615242,0.154083982110024,0.625836908817291,-0.779953479766846,0.000855531019624323,0.280335813760757,-0.904288768768311,0.321983903646469,0.462026834487915,-0.814152240753174,0.351692080497742,0.632524311542511,-0.737463712692261,0.236770406365395,0.125414818525314,-0.832001984119415,0.540410816669464,0.280335813760757,-0.904288768768311,0.321983903646469,0.625836908817291,-0.779953479766846,0.000855531019624323,-0.119093708693981,-0.53387188911438,0.837136447429657,0.160614088177681,-0.826539099216461,0.539477705955505,0.280335813760757,-0.904288768768311,0.321983903646469,0.125414818525314,-0.832001984119415,0.540410816669464,-0.119093708693981,-0.53387188911438,0.837136447429657,-0.485137194395065,-0.428027123212814,0.762518644332886,-0.600347876548767,0.0670153573155403,0.796926200389862,0.0803298726677895,0.272869914770126,0.958691358566284,-0.549701511859894,-0.519823312759399,0.653920412063599,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.600347876548767,0.0670153573155403,0.796926200389862,-0.485137194395065,-0.428027123212814,0.762518644332886,-0.600347876548767,0.0670153573155403,0.796926200389862,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.498864650726318,-0.669482290744781,0.550388514995575,-0.0804867446422577,-0.0660979077219963,0.994561672210693,0.0803298726677895,0.272869914770126,0.958691358566284,-0.600347876548767,0.0670153573155403,0.796926200389862,-0.0804867446422577,-0.0660979077219963,0.994561672210693,0.591780304908752,0.0913430228829384,0.8009073138237,-0.119093708693981,-0.53387188911438,0.837136447429657,\n0.350974529981613,-0.540442049503326,0.764682471752167,0.190928906202316,-0.824125647544861,0.533257067203522,0.160614088177681,-0.826539099216461,0.539477705955505,0.218448147177696,-0.859921038150787,0.461320102214813,0.160614088177681,-0.826539099216461,0.539477705955505,0.190928906202316,-0.824125647544861,0.533257067203522,0.724950075149536,-0.680160522460938,0.108761206269264,0.535486578941345,-0.739663183689117,0.407618075609207,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.2151879966259,-0.952648401260376,-0.214837476611137,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.535486578941345,-0.739663183689117,0.407618075609207,0.506778419017792,-0.624182820320129,0.594618737697601,-0.449249923229218,-0.874760508537292,0.181572452187538,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.506778419017792,-0.624182820320129,0.594618737697601,0.591780304908752,0.0913430228829384,0.8009073138237,-0.0804867446422577,-0.0660979077219963,0.994561672210693,-0.498864650726318,-0.669482290744781,0.550388514995575,0.506778419017792,-0.624182820320129,0.594618737697601,0.786046326160431,0.0746424272656441,0.613644540309906,0.591780304908752,0.0913430228829384,0.8009073138237,0.993568658828735,0.0655909031629562,0.0922989472746849,0.801777124404907,0.00266337930224836,-0.597617149353027,0.914134383201599,-0.267116606235504,-0.304970562458038,0.914134383201599,-0.267116606235504,-0.304970562458038,0.778993248939514,-0.607196033000946,0.156468689441681,0.823821365833282,-0.474406152963638,0.310253411531448,0.993568658828735,0.0655909031629562,0.0922989472746849,0.802095234394073,-0.0203569829463959,0.596849083900452,0.750991225242615,0.0683757290244102,0.656762480735779,0.734094381332397,0.226703405380249,0.640086710453033,0.771234273910522,0.123447246849537,0.62446653842926,0.61716902256012,-0.00506624486297369,0.786814272403717,0.59909462928772,0.124072253704071,0.791006743907928,0.734094381332397,0.226703405380249,0.640086710453033,0.750991225242615,0.0683757290244102,0.656762480735779,0.747522175312042,-0.213430538773537,0.629013538360596,\n0.89356255531311,-0.0812801718711853,0.441519498825073,0.734094381332397,0.226703405380249,0.640086710453033,0.59909462928772,0.124072253704071,0.791006743907928,0.886316955089569,0.0816843584179878,0.455817818641663,0.771234273910522,0.123447246849537,0.62446653842926,0.734094381332397,0.226703405380249,0.640086710453033,0.89356255531311,-0.0812801718711853,0.441519498825073,0.740868389606476,0.000323399232001975,0.671650171279907,0.825742661952972,-0.0501102656126022,0.561816692352295,0.832460403442383,-0.0762069076299667,0.548818945884705,0.732703268527985,-0.161094918847084,0.661206722259521,0.740868389606476,0.000323399232001975,0.671650171279907,0.732703268527985,-0.161094918847084,0.661206722259521,0.627576470375061,-0.135800153017044,0.766619920730591,0.636694431304932,0.0437434837222099,0.769874513149261,0.841468989849091,0.227338507771492,0.490150064229965,0.886316955089569,0.0816843584179878,0.455817818641663,0.96756237745285,-0.0955442041158676,0.233868315815926,0.918524086475372,-0.00282709067687392,0.395354956388474,0.918524086475372,-0.00282709067687392,0.395354956388474,0.853365004062653,0.0768043100833893,0.515625178813934,0.841468989849091,0.227338507771492,0.490150064229965,0.868124186992645,-0.0820373073220253,0.48952043056488,0.826119303703308,-0.120154865086079,0.550535798072815,0.832460403442383,-0.0762069076299667,0.548818945884705,0.853365004062653,0.0768043100833893,0.515625178813934,0.918524086475372,-0.00282709067687392,0.395354956388474,0.868124186992645,-0.0820373073220253,0.48952043056488,0.853365004062653,0.0768043100833893,0.515625178813934,0.605580151081085,-0.127637818455696,0.785481572151184,0.627576470375061,-0.135800153017044,0.766619920730591,0.732703268527985,-0.161094918847084,0.661206722259521,0.72280216217041,-0.137790024280548,0.677178680896759,0.732703268527985,-0.161094918847084,0.661206722259521,0.832460403442383,-0.0762069076299667,0.548818945884705,0.826119303703308,-0.120154865086079,0.550535798072815,0.72280216217041,-0.137790024280548,0.677178680896759,0.960835516452789,0.146968066692352,0.234937101602554,\n0.987058341503143,-0.0681737512350082,0.145148620009422,0.988696813583374,-0.11085943877697,0.10093978792429,0.974692046642303,0.140635088086128,0.17377345263958,0.988696813583374,-0.11085943877697,0.10093978792429,0.971762239933014,-0.143596902489662,0.187237858772278,0.970540165901184,0.124821022152901,0.206086173653603,0.974692046642303,0.140635088086128,0.17377345263958,0.987058341503143,-0.0681737512350082,0.145148620009422,0.952345132827759,-0.057124700397253,0.299625486135483,0.939327776432037,-0.292384117841721,0.17937345802784,0.94329446554184,-0.325108468532562,0.0670826062560081,0.918524086475372,-0.00282709067687392,0.395354956388474,0.926874995231628,-0.321304202079773,0.194078236818314,0.939327776432037,-0.292384117841721,0.17937345802784,0.952345132827759,-0.057124700397253,0.299625486135483,0.934174954891205,-0.332788705825806,0.128719761967659,0.94329446554184,-0.325108468532562,0.0670826062560081,0.939327776432037,-0.292384117841721,0.17937345802784,0.926874995231628,-0.321304202079773,0.194078236818314,0.826119303703308,-0.120154865086079,0.550535798072815,0.868124186992645,-0.0820373073220253,0.48952043056488,0.903705775737762,0.0166217982769012,0.427831262350082,0.85496574640274,-0.0235987044870853,0.518147349357605,0.868124186992645,-0.0820373073220253,0.48952043056488,0.918524086475372,-0.00282709067687392,0.395354956388474,0.916476547718048,0.0582267269492149,0.395828783512115,0.903705775737762,0.0166217982769012,0.427831262350082,0.717148721218109,-0.158668875694275,0.678617656230927,0.693030059337616,-0.0411044172942638,0.71973592042923,0.204357400536537,-0.124537408351898,0.97094202041626,0.359977900981903,-0.319483041763306,0.876553773880005,0.204357400536537,-0.124537408351898,0.97094202041626,0.693030059337616,-0.0411044172942638,0.71973592042923,0.197210118174553,0.0128493588417768,0.980277061462402,0.197210118174553,0.0128493588417768,0.980277061462402,0.693030059337616,-0.0411044172942638,0.71973592042923,0.813101530075073,0.281051158905029,0.509780466556549,0.533409833908081,0.213411912322044,0.818492114543915,\n0.193743079900742,0.0896209701895714,0.976950228214264,0.877371370792389,-0.100216217339039,0.469229310750961,0.848142683506012,0.254542678594589,0.464609563350677,0.834977984428406,0.275511413812637,0.47634568810463,0.894858956336975,-0.0870964974164963,0.437768936157227,0.862693786621094,0.213308542966843,0.458539962768555,0.728024780750275,0.317726284265518,0.607478320598602,0.749379277229309,0.298672914505005,0.590952754020691,0.779178857803345,0.328662276268005,0.533724129199982,0.825178265571594,0.267818719148636,0.497346937656403,0.776109874248505,0.274881482124329,0.567532956600189,0.749379277229309,0.298672914505005,0.590952754020691,0.728024780750275,0.317726284265518,0.607478320598602,0.261966973543167,0.625043272972107,0.735319077968597,0.0635503008961678,0.655404150485992,0.752600014209747,0.0571579374372959,0.555576980113983,0.829498171806335,0.27374255657196,0.526692390441895,0.804773390293121,0.261966973543167,0.625043272972107,0.735319077968597,0.27374255657196,0.526692390441895,0.804773390293121,0.718716561794281,0.339281320571899,0.60690575838089,0.667004644870758,0.442110657691956,0.59970235824585,0.819765686988831,0.312743216753006,0.479766517877579,0.79509973526001,0.317423015832901,0.516777575016022,0.779178857803345,0.328662276268005,0.533724129199982,0.791379868984222,0.358002513647079,0.495532125234604,0.779178857803345,0.328662276268005,0.533724129199982,0.79509973526001,0.317423015832901,0.516777575016022,0.801001727581024,0.319669455289841,0.506169617176056,0.825178265571594,0.267818719148636,0.497346937656403,0.825178265571594,0.267818719148636,0.497346937656403,0.667004644870758,0.442110657691956,0.59970235824585,0.718716561794281,0.339281320571899,0.60690575838089,0.862693786621094,0.213308542966843,0.458539962768555,0.813101530075073,0.281051158905029,0.509780466556549,0.819765686988831,0.312743216753006,0.479766517877579,0.54212898015976,0.215727955102921,0.812131583690643,0.533409833908081,0.213411912322044,0.818492114543915,0.819765686988831,0.312743216753006,0.479766517877579,0.791379868984222,0.358002513647079,0.495532125234604,\n0.470013290643692,0.212332352995873,0.856739461421967,0.54212898015976,0.215727955102921,0.812131583690643,0.333709418773651,0.169013321399689,0.927400946617126,0.470013290643692,0.212332352995873,0.856739461421967,0.791379868984222,0.358002513647079,0.495532125234604,0.776918292045593,0.306892603635788,0.549740731716156,0.651595652103424,0.352775752544403,0.671544790267944,0.316976845264435,0.303443849086761,0.898580849170685,0.397927284240723,0.292557120323181,0.869519531726837,0.414541780948639,0.400993496179581,0.816920638084412,0.37644562125206,0.38054347038269,0.844674706459045,0.316976845264435,0.303443849086761,0.898580849170685,0.346010982990265,0.0731605663895607,0.935373663902283,0.410090506076813,0.0557969398796558,0.910336434841156,0.397927284240723,0.292557120323181,0.869519531726837,0.328961253166199,0.182314842939377,0.92657744884491,0.371347606182098,0.418176740407944,0.82899284362793,0.397927284240723,0.292557120323181,0.869519531726837,0.410090506076813,0.0557969398796558,0.910336434841156,0.410090506076813,0.0557969398796558,0.910336434841156,0.346010982990265,0.0731605663895607,0.935373663902283,0.402090311050415,-0.284287929534912,0.870346903800964,0.431166082620621,-0.246951669454575,0.867819547653198,-0.0552638620138168,0.347488284111023,0.936054348945618,-0.00221070507541299,0.348074615001678,0.937464237213135,0.00455546798184514,0.298394352197647,0.954431772232056,0.410660326480865,0.0589907094836235,0.909878134727478,0.503296196460724,0.0546823143959045,0.862382054328918,0.135898023843765,0.169247582554817,0.976159334182739,0.179719522595406,0.199890360236168,0.963195025920868,0.166202440857887,0.306374847888947,0.937289237976074,0.135898023843765,0.169247582554817,0.976159334182739,0.503296196460724,0.0546823143959045,0.862382054328918,0.508710622787476,0.190386489033699,0.839622795581818,0.826946556568146,0.0731306597590446,0.557504594326019,0.870097935199738,0.102833516895771,0.482032060623169,0.642289221286774,0.115071445703506,0.757775127887726,0.610058009624481,0.18056558072567,0.771508455276489,\n0.610058009624481,0.18056558072567,0.771508455276489,0.642289221286774,0.115071445703506,0.757775127887726,0.471029788255692,0.166954964399338,0.86617374420166,0.491490423679352,0.244152218103409,0.835958659648895,0.623485326766968,0.449957937002182,0.639377772808075,0.497093498706818,0.456073582172394,0.738169968128204,0.620209395885468,0.316063761711121,0.717944324016571,0.649705529212952,0.341418325901031,0.679202735424042,0.594232082366943,0.290724605321884,0.749911665916443,0.663587033748627,0.242647290229797,0.707654237747192,0.620209395885468,0.316063761711121,0.717944324016571,0.594232082366943,0.290724605321884,0.749911665916443,0.620209395885468,0.316063761711121,0.717944324016571,0.416927576065063,0.413195610046387,0.809592962265015,0.370492875576019,0.369821041822433,0.852037250995636,0.556747674942017,0.38243293762207,0.737412452697754,0.649705529212952,0.341418325901031,0.679202735424042,0.620209395885468,0.316063761711121,0.717944324016571,0.663587033748627,0.242647290229797,0.707654237747192,0.340945303440094,-0.698488175868988,0.629182457923889,0.292688071727753,-0.580336809158325,0.759962379932404,0.335490047931671,-0.171642184257507,0.926275014877319,0.431166082620621,-0.246951669454575,0.867819547653198,0.335490047931671,-0.171642184257507,0.926275014877319,0.328961253166199,0.182314842939377,0.92657744884491,0.410090506076813,0.0557969398796558,0.910336434841156,0.431166082620621,-0.246951669454575,0.867819547653198,0.285702854394913,-0.151269629597664,0.946304082870483,0.189583629369736,-0.286395132541656,0.939167618751526,0.124305054545403,-0.308796167373657,0.942970395088196,0.295946687459946,-0.143637612462044,0.944343090057373,0.785013139247894,0.0451312512159348,0.617832958698273,0.733202934265137,-0.122967794537544,0.668799161911011,0.642606198787689,-0.0799093768000603,0.762018263339996,0.563811004161835,0.228632539510727,0.793627321720123,0.642606198787689,-0.0799093768000603,0.762018263339996,0.568371534347534,0.0187626089900732,0.822558045387268,0.546967387199402,0.0579036511480808,0.835148990154266,\n0.563811004161835,0.228632539510727,0.793627321720123,0.607095539569855,-0.200262412428856,0.768979847431183,0.588271081447601,-0.259690821170807,0.765831470489502,0.633589863777161,-0.0252969916909933,0.773255407810211,0.655191659927368,0.0146637577563524,0.755320370197296,-0.00835443940013647,-0.52916145324707,0.848480045795441,0.462689489126205,-0.42478209733963,0.778125107288361,0.521133065223694,-0.480470329523087,0.705385446548462,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.521133065223694,-0.480470329523087,0.705385446548462,0.462689489126205,-0.42478209733963,0.778125107288361,0.666223108768463,-0.303315341472626,0.681283056735992,0.670062482357025,-0.367128610610962,0.645161092281342,0.677804887294769,-0.293700158596039,0.674033224582672,0.598259091377258,-0.415802270174026,0.684977769851685,0.521133065223694,-0.480470329523087,0.705385446548462,0.670062482357025,-0.367128610610962,0.645161092281342,0.189460039138794,-0.647004544734955,0.738572955131531,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.521133065223694,-0.480470329523087,0.705385446548462,0.598259091377258,-0.415802270174026,0.684977769851685,0.788963615894318,-0.297772616147995,0.537464380264282,0.775085091590881,-0.264017641544342,0.574053823947906,0.872779548168182,-0.198945015668869,0.445731669664383,0.888771831989288,-0.233848795294762,0.394207358360291,0.873168885707855,-0.228458538651466,0.430561006069183,0.670062482357025,-0.367128610610962,0.645161092281342,0.788963615894318,-0.297772616147995,0.537464380264282,0.771643459796906,-0.219248831272125,0.597073137760162,0.677804887294769,-0.293700158596039,0.674033224582672,0.771643459796906,-0.219248831272125,0.597073137760162,0.788963615894318,-0.297772616147995,0.537464380264282,0.873168885707855,-0.228458538651466,0.430561006069183,0.861247181892395,-0.192313641309738,0.470392137765884,0.890117168426514,-0.206235691905022,0.40639665722847,0.861247181892395,-0.192313641309738,0.470392137765884,0.873168885707855,-0.228458538651466,0.430561006069183,0.888771831989288,-0.233848795294762,0.394207358360291,\n0.872779548168182,-0.198945015668869,0.445731669664383,0.917503833770752,-0.132210671901703,0.375109404325485,0.92565244436264,-0.184836938977242,0.330155730247498,0.888771831989288,-0.233848795294762,0.394207358360291,0.92565244436264,-0.184836938977242,0.330155730247498,0.937154471874237,-0.0475939512252808,0.345653474330902,0.980852127075195,0.00218713283538818,0.194741636514664,0.92565244436264,-0.184836938977242,0.330155730247498,0.917503833770752,-0.132210671901703,0.375109404325485,0.937154471874237,-0.0475939512252808,0.345653474330902,0.92565244436264,-0.184836938977242,0.330155730247498,0.980852127075195,0.00218713283538818,0.194741636514664,0.938709080219269,-0.156169772148132,0.307304710149765,0.890117168426514,-0.206235691905022,0.40639665722847,0.888771831989288,-0.233848795294762,0.394207358360291,0.92565244436264,-0.184836938977242,0.330155730247498,0.890117168426514,-0.206235691905022,0.40639665722847,0.92565244436264,-0.184836938977242,0.330155730247498,0.938709080219269,-0.156169772148132,0.307304710149765,0.189460039138794,-0.647004544734955,0.738572955131531,0.659502923488617,-0.421348959207535,0.622511804103851,0.535029828548431,-0.536747872829437,0.652414619922638,0.731125593185425,-0.405815303325653,0.548424422740936,0.535029828548431,-0.536747872829437,0.652414619922638,0.659502923488617,-0.421348959207535,0.622511804103851,0.71972918510437,-0.325454443693161,0.613244891166687,0.71972918510437,-0.325454443693161,0.613244891166687,0.754335284233093,-0.305042564868927,0.581315159797668,0.73811411857605,-0.426667273044586,0.522630453109741,0.731125593185425,-0.405815303325653,0.548424422740936,0.245724827051163,0.276487857103348,0.929071426391602,0.16256257891655,0.269552499055862,0.949165344238281,0.221095889806747,0.32488140463829,0.919548094272614,0.278009802103043,0.308251172304153,0.909775674343109,0.0426242314279079,0.260108649730682,0.964638113975525,0.0272070206701756,0.178279355168343,0.983603715896606,0.0412900410592556,0.144470527768135,0.988647282123566,-0.0196372587233782,0.188453316688538,0.98188579082489,\n-0.00221070507541299,0.348074615001678,0.937464237213135,-0.0196372587233782,0.188453316688538,0.98188579082489,0.0412900410592556,0.144470527768135,0.988647282123566,0.17553049325943,0.198497295379639,0.964255094528198,0.278009802103043,0.308251172304153,0.909775674343109,0.428730636835098,0.26745393872261,0.862935900688171,0.594232082366943,0.290724605321884,0.749911665916443,0.370492875576019,0.369821041822433,0.852037250995636,0.937608182430267,0.0460146591067314,0.344635367393494,0.956782042980194,0.0500060208141804,0.286474347114563,0.938729107379913,0.213661849498749,0.270437210798264,0.950939536094666,0.19349630177021,0.241398423910141,0.955479383468628,-0.0429471768438816,0.291915565729141,0.968910753726959,0.00811574142426252,0.247277289628983,0.949283540248871,0.162967398762703,0.2688909471035,0.941746175289154,0.170597404241562,0.289845913648605,0.969503223896027,0.0232477653771639,0.243973404169083,0.960846960544586,0.123489730060101,0.248039066791534,0.949283540248871,0.162967398762703,0.2688909471035,0.968910753726959,0.00811574142426252,0.247277289628983,0.938729107379913,0.213661849498749,0.270437210798264,0.935715436935425,0.19026754796505,0.297043561935425,0.949283540248871,0.162967398762703,0.2688909471035,0.960846960544586,0.123489730060101,0.248039066791534,0.941311419010162,0.140633046627045,0.30684706568718,0.941746175289154,0.170597404241562,0.289845913648605,0.949283540248871,0.162967398762703,0.2688909471035,0.935715436935425,0.19026754796505,0.297043561935425,0.950939536094666,0.19349630177021,0.241398423910141,0.938729107379913,0.213661849498749,0.270437210798264,0.960846960544586,0.123489730060101,0.248039066791534,0.973029315471649,0.0977980643510818,0.208924487233162,0.969503223896027,0.0232477653771639,0.243973404169083,0.973029315471649,0.0977980643510818,0.208924487233162,0.960846960544586,0.123489730060101,0.248039066791534,0.900685906410217,0.180543556809425,0.395182073116302,0.950939536094666,0.19349630177021,0.241398423910141,0.985209882259369,0.0516813509166241,0.163372397422791,\n0.962778627872467,0.0666173547506332,0.261953175067902,0.920523226261139,0.14191623032093,0.36400106549263,0.900685906410217,0.180543556809425,0.395182073116302,0.962778627872467,0.0666173547506332,0.261953175067902,0.900685906410217,0.180543556809425,0.395182073116302,0.920523226261139,0.14191623032093,0.36400106549263,0.928288996219635,-0.0903030559420586,0.360728323459625,0.905692398548126,-0.0579960867762566,0.419949680566788,0.94987964630127,-0.0038351418916136,0.312592297792435,0.937608182430267,0.0460146591067314,0.344635367393494,0.905692398548126,-0.0579960867762566,0.419949680566788,0.910945057868958,-0.218233183026314,0.35007631778717,0.928288996219635,-0.0903030559420586,0.360728323459625,0.910945057868958,-0.218233183026314,0.35007631778717,0.905692398548126,-0.0579960867762566,0.419949680566788,0.969503223896027,0.0232477653771639,0.243973404169083,0.966420710086823,0.0570991300046444,0.250540882349014,0.985529184341431,0.0794467255473137,0.149734541773796,0.973029315471649,0.0977980643510818,0.208924487233162,0.973029315471649,0.0977980643510818,0.208924487233162,0.985529184341431,0.0794467255473137,0.149734541773796,0.985209882259369,0.0516813509166241,0.163372397422791,0.950939536094666,0.19349630177021,0.241398423910141,0.431708127260208,0.0743667632341385,0.898942530155182,-0.0552638620138168,0.347488284111023,0.936054348945618,0.100095093250275,0.182193845510483,0.978154599666595,0.493298023939133,0.0378949381411076,0.8690345287323,0.0312842912971973,-0.474717557430267,0.879582047462463,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.0666661337018013,-0.827535629272461,0.557440996170044,0.289565563201904,-0.362892955541611,0.885697722434998,-0.021647073328495,-0.960853159427643,0.276211261749268,0.0666661337018013,-0.827535629272461,0.557440996170044,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.100095093250275,0.182193845510483,0.978154599666595,0.106603257358074,0.0133492052555084,0.994212031364441,0.493298023939133,0.0378949381411076,0.8690345287323,0.974559843540192,0.0402764715254307,0.220478907227516,\n0.928288996219635,-0.0903030559420586,0.360728323459625,0.920523226261139,0.14191623032093,0.36400106549263,0.966257035732269,0.139943510293961,0.216247826814651,0.975037813186646,0.14565335214138,0.167589843273163,0.974559843540192,0.0402764715254307,0.220478907227516,0.966257035732269,0.139943510293961,0.216247826814651,0.204357400536537,-0.124537408351898,0.97094202041626,0.032781969755888,-0.0827890038490295,0.996027767658234,0.161047965288162,-0.353496670722961,0.921468198299408,0.359977900981903,-0.319483041763306,0.876553773880005,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.0293192863464355,-0.389476090669632,0.920569777488709,0.161047965288162,-0.353496670722961,0.921468198299408,0.032781969755888,-0.0827890038490295,0.996027767658234,0.386847853660584,-0.767014622688293,0.511895835399628,0.358242690563202,-0.369526594877243,0.857386887073517,0.196283534169197,-0.554668664932251,0.808588564395905,0.191021859645844,-0.901510059833527,0.388317227363586,0.0821766927838326,-0.66467010974884,0.742603957653046,0.0454688854515553,-0.765503704547882,0.641822934150696,0.171536713838577,-0.946371257305145,0.273782074451447,0.508330583572388,0.166116118431091,0.844988405704498,0.322372585535049,-0.0660212859511375,0.944307744503021,0.477409869432449,-0.0182194709777832,0.878491818904877,0.668687582015991,0.158593982458115,0.726432919502258,0.508330583572388,0.166116118431091,0.844988405704498,0.668687582015991,0.158593982458115,0.726432919502258,0.495325356721878,-0.15430523455143,0.854893386363983,0.499466627836227,0.169172704219818,0.849655032157898,0.469725012779236,0.301579147577286,0.829703807830811,0.536631107330322,0.258791983127594,0.803152441978455,0.499466627836227,0.169172704219818,0.849655032157898,0.328607112169266,0.0718188062310219,0.941732108592987,0.401639640331268,-0.00309631112031639,0.915792524814606,0.209787964820862,-0.0149007942527533,0.977633357048035,0.328607112169266,0.0718188062310219,0.941732108592987,0.32480525970459,-0.177078545093536,0.929055869579315,0.130675092339516,-0.201507270336151,0.9707310795784,\n0.209787964820862,-0.0149007942527533,0.977633357048035,0.401639640331268,-0.00309631112031639,0.915792524814606,0.405026167631149,-0.171226277947426,0.898128807544708,0.0695574581623077,-0.316367268562317,0.946083247661591,0.130675092339516,-0.201507270336151,0.9707310795784,0.405026167631149,-0.171226277947426,0.898128807544708,0.388869285583496,-0.304632723331451,0.869470834732056,0.119953289628029,0.283690631389618,0.951383650302887,0.0695574581623077,-0.316367268562317,0.946083247661591,0.388869285583496,-0.304632723331451,0.869470834732056,0.357361167669296,0.242811009287834,0.901851356029511,0.134373739361763,0.867044448852539,0.479768335819244,0.119953289628029,0.283690631389618,0.951383650302887,0.357361167669296,0.242811009287834,0.901851356029511,0.149628981947899,0.846252083778381,0.511339902877808,0.134373739361763,0.867044448852539,0.479768335819244,0.149628981947899,0.846252083778381,0.511339902877808,-0.0952406078577042,0.956162750720978,-0.276915192604065,0.138274729251862,0.981688380241394,-0.131026938557625,0.495325356721878,-0.15430523455143,0.854893386363983,0.385615348815918,-0.420324206352234,0.821357607841492,0.32480525970459,-0.177078545093536,0.929055869579315,0.743626773357391,-0.236951321363449,0.625198543071747,0.572291314601898,-0.52212518453598,0.632351100444794,0.504154682159424,-0.548682808876038,0.666914701461792,0.527478218078613,-0.385366201400757,0.757139086723328,0.504154682159424,-0.548682808876038,0.666914701461792,0.510522961616516,-0.392942905426025,0.764828205108643,0.385615348815918,-0.420324206352234,0.821357607841492,0.527478218078613,-0.385366201400757,0.757139086723328,0.967272758483887,0.0499838180840015,0.248767033219337,0.926979184150696,-0.0986248403787613,0.36191537976265,0.875677406787872,-0.203340858221054,0.437997281551361,0.938709080219269,-0.156169772148132,0.307304710149765,0.980852127075195,0.00218713283538818,0.194741636514664,0.967272758483887,0.0499838180840015,0.248767033219337,0.938709080219269,-0.156169772148132,0.307304710149765,0.861247181892395,-0.192313641309738,0.470392137765884,\n0.890117168426514,-0.206235691905022,0.40639665722847,0.875677406787872,-0.203340858221054,0.437997281551361,0.838417947292328,-0.244426995515823,0.487145572900772,0.875677406787872,-0.203340858221054,0.437997281551361,0.890117168426514,-0.206235691905022,0.40639665722847,0.938709080219269,-0.156169772148132,0.307304710149765,0.707773089408875,-0.177667543292046,0.683733463287354,0.840808868408203,-0.369773417711258,0.395358175039291,0.755779623985291,-0.654822111129761,0.00226114504039288,0.630890548229218,-0.774750173091888,0.0417049825191498,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.993277549743652,-0.10496261715889,0.0488112159073353,0.982620000839233,-0.16903156042099,0.076722227036953,0.995871722698212,-0.0808055028319359,0.041352104395628,0.766651809215546,0.277672499418259,0.578915357589722,0.854045331478119,0.171825125813484,0.491001784801483,0.886324822902679,0.0356802977621555,0.461687415838242,0.692221164703369,0.374112457036972,0.61714643239975,0.854045331478119,0.171825125813484,0.491001784801483,0.944392323493958,0.0710759162902832,0.321047365665436,0.954735457897186,-0.0869630351662636,0.284460365772247,0.886324822902679,0.0356802977621555,0.461687415838242,0.886324822902679,0.0356802977621555,0.461687415838242,0.954735457897186,-0.0869630351662636,0.284460365772247,0.797767400741577,-0.104994267225266,0.593753576278687,0.736574053764343,-0.0243753399699926,0.675917506217957,0.03270548209548,0.73682564496994,0.675291240215302,0.134861305356026,0.567138254642487,0.812506437301636,-0.0116734821349382,0.488428175449371,0.872525990009308,0.0662719309329987,0.700039923191071,0.711021840572357,0.03270548209548,0.73682564496994,0.675291240215302,-0.0116734821349382,0.488428175449371,0.872525990009308,0.0294170621782541,0.161411821842194,0.986448585987091,0.823107242584229,0.306770831346512,0.477897584438324,0.838887810707092,0.294615089893341,0.457677990198135,0.854045331478119,0.171825125813484,0.491001784801483,0.766651809215546,0.277672499418259,0.578915357589722,0.854045331478119,0.171825125813484,0.491001784801483,\n0.838887810707092,0.294615089893341,0.457677990198135,0.903585314750671,0.234351992607117,0.35862609744072,0.944392323493958,0.0710759162902832,0.321047365665436,0.03270548209548,0.73682564496994,0.675291240215302,0.136332333087921,0.628257870674133,0.765967071056366,0.245428472757339,0.709896266460419,0.660160720348358,0.590013384819031,0.564291477203369,0.577459335327148,0.34969162940979,0.814756572246552,0.462479740381241,0.305379688739777,0.8488889336586,0.431428849697113,0.562591254711151,0.530478656291962,0.634100556373596,0.590013384819031,0.564291477203369,0.577459335327148,0.692221164703369,0.374112457036972,0.61714643239975,0.358841747045517,0.757651388645172,0.545157730579376,0.34969162940979,0.814756572246552,0.462479740381241,0.65490597486496,0.140991285443306,0.742441654205322,0.431429743766785,0.571957051753998,0.697662889957428,0.692221164703369,0.374112457036972,0.61714643239975,0.431429743766785,0.571957051753998,0.697662889957428,0.245428472757339,0.709896266460419,0.660160720348358,0.283866882324219,0.767588019371033,0.574654817581177,0.358841747045517,0.757651388645172,0.545157730579376,0.283866882324219,0.767588019371033,0.574654817581177,0.245428472757339,0.709896266460419,0.660160720348358,0.136332333087921,0.628257870674133,0.765967071056366,0.280443012714386,0.696482062339783,0.660503208637238,0.34969162940979,0.814756572246552,0.462479740381241,0.358841747045517,0.757651388645172,0.545157730579376,0.283866882324219,0.767588019371033,0.574654817581177,0.259025126695633,0.847382187843323,0.463518500328064,0.180923089385033,0.918246328830719,0.352264821529388,0.305379688739777,0.8488889336586,0.431428849697113,0.34969162940979,0.814756572246552,0.462479740381241,0.259025126695633,0.847382187843323,0.463518500328064,-0.0116734821349382,0.488428175449371,0.872525990009308,0.134861305356026,0.567138254642487,0.812506437301636,0.313594281673431,0.139182701706886,0.939301192760468,0.194007128477097,-0.0432056449353695,0.98004823923111,0.313594281673431,0.139182701706886,0.939301192760468,0.134861305356026,0.567138254642487,0.812506437301636,\n0.431429743766785,0.571957051753998,0.697662889957428,0.65490597486496,0.140991285443306,0.742441654205322,0.65490597486496,0.140991285443306,0.742441654205322,0.692221164703369,0.374112457036972,0.61714643239975,0.886324822902679,0.0356802977621555,0.461687415838242,0.736574053764343,-0.0243753399699926,0.675917506217957,0.136332333087921,0.628257870674133,0.765967071056366,0.03270548209548,0.73682564496994,0.675291240215302,0.0662719309329987,0.700039923191071,0.711021840572357,0.0579896494746208,0.56835275888443,0.820738911628723,0.245428472757339,0.709896266460419,0.660160720348358,0.431429743766785,0.571957051753998,0.697662889957428,0.134861305356026,0.567138254642487,0.812506437301636,0.03270548209548,0.73682564496994,0.675291240215302,0.358841747045517,0.757651388645172,0.545157730579376,0.692221164703369,0.374112457036972,0.61714643239975,0.431429743766785,0.571957051753998,0.697662889957428,0.766651809215546,0.277672499418259,0.578915357589722,0.692221164703369,0.374112457036972,0.61714643239975,0.590013384819031,0.564291477203369,0.577459335327148,0.671461880207062,0.368781983852386,0.642758727073669,0.671461880207062,0.368781983852386,0.642758727073669,0.590013384819031,0.564291477203369,0.577459335327148,0.562591254711151,0.530478656291962,0.634100556373596,0.714458644390106,0.458717465400696,0.528324842453003,0.823107242584229,0.306770831346512,0.477897584438324,0.766651809215546,0.277672499418259,0.578915357589722,0.671461880207062,0.368781983852386,0.642758727073669,0.714458644390106,0.458717465400696,0.528324842453003,0.671461880207062,0.368781983852386,0.642758727073669,0.562591254711151,0.530478656291962,0.634100556373596,0.565896391868591,0.594577431678772,0.571173310279846,0.0294170621782541,0.161411821842194,0.986448585987091,-0.0116734821349382,0.488428175449371,0.872525990009308,0.194007128477097,-0.0432056449353695,0.98004823923111,0.253216534852982,-0.212744683027267,0.943727254867554,0.0294170621782541,0.161411821842194,0.986448585987091,0.253216534852982,-0.212744683027267,0.943727254867554,\n-0.000449120096163824,-0.222807794809341,0.974862277507782,0.857822477817535,0.172914609313011,-0.483984649181366,0.93999981880188,0.000262991350609809,-0.341174811124802,0.755998075008392,0.118834607303143,-0.643696546554565,0.61924135684967,0.312463909387589,-0.72035163640976,0.980402529239655,0.0757675468921661,-0.181852087378502,0.8230060338974,0.186259508132935,-0.536626935005188,0.755998075008392,0.118834607303143,-0.643696546554565,0.93999981880188,0.000262991350609809,-0.341174811124802,0.509885489940643,0.234869077801704,-0.827558636665344,0.461275607347488,0.184249937534332,-0.867915213108063,0.755998075008392,0.118834607303143,-0.643696546554565,0.8230060338974,0.186259508132935,-0.536626935005188,0.417167514562607,0.344521790742874,-0.840997040271759,0.61924135684967,0.312463909387589,-0.72035163640976,0.755998075008392,0.118834607303143,-0.643696546554565,0.461275607347488,0.184249937534332,-0.867915213108063,0.417167514562607,0.344521790742874,-0.840997040271759,0.461275607347488,0.184249937534332,-0.867915213108063,0.300174236297607,0.20870378613472,-0.93077290058136,0.282642304897308,0.340673059225082,-0.896691262722015,0.509885489940643,0.234869077801704,-0.827558636665344,0.299484491348267,0.221028134226799,-0.928146302700043,0.300174236297607,0.20870378613472,-0.93077290058136,0.461275607347488,0.184249937534332,-0.867915213108063,0.158535957336426,0.208172604441643,-0.96515828371048,0.171811878681183,0.197920143604279,-0.965043187141418,0.300174236297607,0.20870378613472,-0.93077290058136,0.299484491348267,0.221028134226799,-0.928146302700043,0.154383972287178,0.366727441549301,-0.917429327964783,0.282642304897308,0.340673059225082,-0.896691262722015,0.300174236297607,0.20870378613472,-0.93077290058136,0.171811878681183,0.197920143604279,-0.965043187141418,0.0148119395598769,0.396181702613831,-0.918052673339844,0.012098491191864,0.36400181055069,-0.931319653987885,0.0980598703026772,0.422548413276672,-0.901020050048828,0.154383972287178,0.366727441549301,-0.917429327964783,0.000681107048876584,0.225692093372345,-0.974198460578918,\n0.0980598703026772,0.422548413276672,-0.901020050048828,0.012098491191864,0.36400181055069,-0.931319653987885,0.993362247943878,-0.0349664911627769,0.109584823250771,0.98517507314682,-0.0804919600486755,0.151496455073357,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.99024760723114,0.0581013411283493,-0.126625210046768,0.98186069726944,-0.153709232807159,0.111008986830711,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.98517507314682,-0.0804919600486755,0.151496455073357,0.980402529239655,0.0757675468921661,-0.181852087378502,0.93999981880188,0.000262991350609809,-0.341174811124802,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.857822477817535,0.172914609313011,-0.483984649181366,0.99024760723114,0.0581013411283493,-0.126625210046768,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.93999981880188,0.000262991350609809,-0.341174811124802,0.158535957336426,0.208172604441643,-0.96515828371048,0.00121181993745267,0.232196122407913,-0.9726682305336,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.171811878681183,0.197920143604279,-0.965043187141418,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.0148119395598769,0.396181702613831,-0.918052673339844,0.154383972287178,0.366727441549301,-0.917429327964783,0.171811878681183,0.197920143604279,-0.965043187141418,0.980402529239655,0.0757675468921661,-0.181852087378502,0.981077253818512,0.19092746078968,-0.0321571119129658,0.849523603916168,0.293443530797958,-0.438406825065613,0.8230060338974,0.186259508132935,-0.536626935005188,0.97625857591629,0.21655336022377,-0.00488529354333878,0.889407336711884,0.240895375609398,-0.388489335775375,0.849523603916168,0.293443530797958,-0.438406825065613,0.981077253818512,0.19092746078968,-0.0321571119129658,0.594776809215546,0.323577910661697,-0.735892593860626,0.538163602352142,0.395974457263947,-0.744032382965088,0.849523603916168,0.293443530797958,-0.438406825065613,\n0.889407336711884,0.240895375609398,-0.388489335775375,0.509885489940643,0.234869077801704,-0.827558636665344,0.8230060338974,0.186259508132935,-0.536626935005188,0.849523603916168,0.293443530797958,-0.438406825065613,0.538163602352142,0.395974457263947,-0.744032382965088,0.509885489940643,0.234869077801704,-0.827558636665344,0.538163602352142,0.395974457263947,-0.744032382965088,0.268934428691864,0.356452435255051,-0.894771456718445,0.299484491348267,0.221028134226799,-0.928146302700043,0.594776809215546,0.323577910661697,-0.735892593860626,0.256779372692108,0.275679916143417,-0.926317930221558,0.268934428691864,0.356452435255051,-0.894771456718445,0.538163602352142,0.395974457263947,-0.744032382965088,0.115779966115952,0.184250295162201,-0.976036310195923,0.138864398002625,0.273968666791916,-0.951660573482513,0.268934428691864,0.356452435255051,-0.894771456718445,0.256779372692108,0.275679916143417,-0.926317930221558,0.158535957336426,0.208172604441643,-0.96515828371048,0.299484491348267,0.221028134226799,-0.928146302700043,0.268934428691864,0.356452435255051,-0.894771456718445,0.138864398002625,0.273968666791916,-0.951660573482513,0.98186069726944,-0.153709232807159,0.111008986830711,0.98053389787674,0.00911934021860361,0.196137949824333,0.973558664321899,0.0965578630566597,0.207026869058609,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.903585314750671,0.234351992607117,0.35862609744072,0.919988930225372,0.274642944335938,0.279627621173859,0.973558664321899,0.0965578630566597,0.207026869058609,0.98053389787674,0.00911934021860361,0.196137949824333,0.97625857591629,0.21655336022377,-0.00488529354333878,0.981077253818512,0.19092746078968,-0.0321571119129658,0.973558664321899,0.0965578630566597,0.207026869058609,0.919988930225372,0.274642944335938,0.279627621173859,0.980402529239655,0.0757675468921661,-0.181852087378502,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.973558664321899,0.0965578630566597,0.207026869058609,0.981077253818512,0.19092746078968,-0.0321571119129658,0.505010664463043,0.824910163879395,0.253943711519241,\n-0.457634329795837,0.886664032936096,0.066315270960331,-0.560799777507782,0.808064699172974,-0.180374935269356,0.401338547468185,0.912790596485138,-0.075766921043396,0.505010664463043,0.824910163879395,0.253943711519241,0.401338547468185,0.912790596485138,-0.075766921043396,0.976279318332672,0.215815082192421,0.0173952374607325,0.956802248954773,0.196078270673752,0.214668840169907,-0.482280492782593,0.875927150249481,0.0125399529933929,-0.515466570854187,0.838185369968414,-0.178155809640884,-0.888915956020355,0.416312962770462,-0.191081121563911,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.560799777507782,0.808064699172974,-0.180374935269356,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.888915956020355,0.416312962770462,-0.191081121563911,-0.560632228851318,0.74455463886261,-0.362394601106644,-0.888915956020355,0.416312962770462,-0.191081121563911,-0.875516295433044,0.353666007518768,-0.329228729009628,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.560632228851318,0.74455463886261,-0.362394601106644,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.934603452682495,0.00426531257107854,-0.355665951967239,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.965442478656769,-0.181367635726929,-0.187153950333595,0.534866094589233,0.53300929069519,0.655606091022491,-0.38366886973381,0.80352109670639,0.455139607191086,-0.722711741924286,0.688240706920624,0.0633445307612419,-0.14746518433094,0.953655540943146,0.262288182973862,-0.407276064157486,0.876896381378174,0.255301624536514,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.722711741924286,0.688240706920624,0.0633445307612419,-0.38366886973381,0.80352109670639,0.455139607191086,-0.457634329795837,0.886664032936096,0.066315270960331,-0.14746518433094,0.953655540943146,0.262288182973862,\n-0.722711741924286,0.688240706920624,0.0633445307612419,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.407276064157486,0.876896381378174,0.255301624536514,-0.482280492782593,0.875927150249481,0.0125399529933929,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.560799777507782,0.808064699172974,-0.180374935269356,-0.457634329795837,0.886664032936096,0.066315270960331,0.505010664463043,0.824910163879395,0.253943711519241,0.956802248954773,0.196078270673752,0.214668840169907,0.534866094589233,0.53300929069519,0.655606091022491,-0.14746518433094,0.953655540943146,0.262288182973862,-0.457634329795837,0.886664032936096,0.066315270960331,0.505010664463043,0.824910163879395,0.253943711519241,-0.14746518433094,0.953655540943146,0.262288182973862,0.976279318332672,0.215815082192421,0.0173952374607325,0.401338547468185,0.912790596485138,-0.075766921043396,0.382399499416351,0.801903128623962,-0.459044635295868,0.961685180664063,0.152435541152954,-0.227870747447014,-0.560799777507782,0.808064699172974,-0.180374935269356,-0.560632228851318,0.74455463886261,-0.362394601106644,0.382399499416351,0.801903128623962,-0.459044635295868,0.401338547468185,0.912790596485138,-0.075766921043396,-0.621643662452698,0.524245023727417,-0.582001924514771,0.301987856626511,0.555173337459564,-0.774974763393402,0.382399499416351,0.801903128623962,-0.459044635295868,-0.560632228851318,0.74455463886261,-0.362394601106644,0.934603452682495,0.00426531257107854,-0.355665951967239,0.961685180664063,0.152435541152954,-0.227870747447014,0.382399499416351,0.801903128623962,-0.459044635295868,0.301987856626511,0.555173337459564,-0.774974763393402,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.976279318332672,0.215815082192421,0.0173952374607325,0.961685180664063,0.152435541152954,-0.227870747447014,0.97535902261734,-0.218811824917793,-0.0282160099595785,\n0.974573373794556,-0.220145642757416,-0.0417446494102478,0.817201495170593,0.0648972690105438,-0.572686731815338,0.805123388767242,-0.0231669675558805,-0.592654705047607,0.934603452682495,0.00426531257107854,-0.355665951967239,0.817201495170593,0.0648972690105438,-0.572686731815338,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.858178198337555,-0.416941344738007,-0.299483120441437,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.817870736122131,-0.315850645303726,-0.480963379144669,0.969782054424286,-0.238185256719589,-0.0528260990977287,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.903657674789429,-0.181017354130745,-0.38811793923378,0.935528516769409,-0.219087332487106,-0.277104824781418,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.965442478656769,-0.181367635726929,-0.187153950333595,0.935528516769409,-0.219087332487106,-0.277104824781418,0.838157534599304,-0.159007966518402,-0.521735966205597,0.903657674789429,-0.181017354130745,-0.38811793923378,0.838157534599304,-0.159007966518402,-0.521735966205597,0.935528516769409,-0.219087332487106,-0.277104824781418,0.934603452682495,0.00426531257107854,-0.355665951967239,0.301987856626511,0.555173337459564,-0.774974763393402,0.240385457873344,0.328945428133011,-0.913241326808929,0.817201495170593,0.0648972690105438,-0.572686731815338,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.462323904037476,0.371266037225723,-0.805244147777557,0.240385457873344,0.328945428133011,-0.913241326808929,0.301987856626511,0.555173337459564,-0.774974763393402,-0.421522259712219,0.257120847702026,-0.869602143764496,0.246327593922615,0.163114905357361,-0.955361843109131,0.240385457873344,0.328945428133011,-0.913241326808929,-0.462323904037476,0.371266037225723,-0.805244147777557,0.805123388767242,-0.0231669675558805,-0.592654705047607,0.817201495170593,0.0648972690105438,-0.572686731815338,0.240385457873344,0.328945428133011,-0.913241326808929,0.246327593922615,0.163114905357361,-0.955361843109131,0.805123388767242,-0.0231669675558805,-0.592654705047607,\n0.246327593922615,0.163114905357361,-0.955361843109131,0.256132781505585,-0.0418680384755135,-0.965734481811523,0.811204135417938,-0.168334782123566,-0.560010075569153,-0.421522259712219,0.257120847702026,-0.869602143764496,-0.426414966583252,0.120833218097687,-0.896420419216156,0.256132781505585,-0.0418680384755135,-0.965734481811523,0.246327593922615,0.163114905357361,-0.955361843109131,-0.529633462429047,-0.0744152963161469,-0.844956040382385,0.193057999014854,-0.308601260185242,-0.931393504142761,0.256132781505585,-0.0418680384755135,-0.965734481811523,-0.426414966583252,0.120833218097687,-0.896420419216156,0.817870736122131,-0.315850645303726,-0.480963379144669,0.811204135417938,-0.168334782123566,-0.560010075569153,0.256132781505585,-0.0418680384755135,-0.965734481811523,0.193057999014854,-0.308601260185242,-0.931393504142761,-0.690630912780762,-0.290166169404984,-0.662444412708282,-0.748543560504913,-0.365974009037018,-0.55294269323349,-0.621009290218353,-0.361309498548508,-0.695559442043304,-0.77015894651413,-0.0879611894488335,-0.631757915019989,0.969782054424286,-0.238185256719589,-0.0528260990977287,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.805123388767242,-0.0231669675558805,-0.592654705047607,0.811204135417938,-0.168334782123566,-0.560010075569153,0.969782054424286,-0.238185256719589,-0.0528260990977287,0.811204135417938,-0.168334782123566,-0.560010075569153,0.817870736122131,-0.315850645303726,-0.480963379144669,0.972712695598602,-0.223196312785149,-0.0633513405919075,-0.77015894651413,-0.0879611894488335,-0.631757915019989,-0.621009290218353,-0.361309498548508,-0.695559442043304,0.158295571804047,-0.666025876998901,-0.72893899679184,0.193057999014854,-0.308601260185242,-0.931393504142761,-0.529633462429047,-0.0744152963161469,-0.844956040382385,0.158295571804047,-0.666025876998901,-0.72893899679184,0.858178198337555,-0.416941344738007,-0.299483120441437,0.817870736122131,-0.315850645303726,-0.480963379144669,0.193057999014854,-0.308601260185242,-0.931393504142761,0.0486728809773922,-0.68095201253891,-0.730708718299866,\n0.858178198337555,-0.416941344738007,-0.299483120441437,0.158295571804047,-0.666025876998901,-0.72893899679184,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.158295571804047,-0.666025876998901,-0.72893899679184,-0.621009290218353,-0.361309498548508,-0.695559442043304,0.945727825164795,-0.098081186413765,0.309804677963257,0.966708958148956,-0.002308584516868,0.255868047475815,0.944782853126526,0.0188948940485716,0.327151775360107,0.542791187763214,-0.0487677082419395,0.838450610637665,0.507363021373749,-0.115291275084019,0.853985190391541,0.775663673877716,0.0339613817632198,0.630232095718384,0.702920734882355,-0.00120963365770876,0.711267173290253,0.800939977169037,-0.0900113806128502,0.59194016456604,0.93361908197403,-0.0509388744831085,0.354627430438995,0.922792911529541,0.0174659602344036,0.384900212287903,0.85576856136322,-0.00803003925830126,0.517296552658081,0.864675521850586,0.193993464112282,0.46336030960083,0.815548717975616,0.273398518562317,0.510032892227173,0.846449613571167,0.310930520296097,0.432256042957306,0.908188223838806,0.15894940495491,0.387206882238388,0.989404678344727,-0.134779617190361,-0.0539703145623207,0.933521032333374,-0.113554745912552,-0.340064376592636,0.903657674789429,-0.181017354130745,-0.38811793923378,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.959026873111725,-0.148191750049591,0.241467580199242,0.89356255531311,-0.0812801718711853,0.441519498825073,0.870028138160706,-0.439180076122284,0.223990917205811,0.903808772563934,-0.380508303642273,0.19581413269043,0.96756237745285,-0.0955442041158676,0.233868315815926,0.959026873111725,-0.148191750049591,0.241467580199242,0.903808772563934,-0.380508303642273,0.19581413269043,0.933318138122559,-0.313118785619736,0.175709679722786,0.886316955089569,0.0816843584179878,0.455817818641663,0.959026873111725,-0.148191750049591,0.241467580199242,0.96756237745285,-0.0955442041158676,0.233868315815926,0.289565563201904,-0.362892955541611,0.885697722434998,0.173318073153496,-0.274096310138702,0.945955634117126,0.174916133284569,0.190565213561058,0.965965449810028,\n0.493298023939133,0.0378949381411076,0.8690345287323,0.179719522595406,0.199890360236168,0.963195025920868,0.431708127260208,0.0743667632341385,0.898942530155182,0.280919551849365,0.197001457214355,0.939294755458832,0.410660326480865,0.0589907094836235,0.909878134727478,0.471029788255692,0.166954964399338,0.86617374420166,0.562969863414764,0.141692653298378,0.81424081325531,0.55342048406601,0.140735372900963,0.820925891399384,0.498867928981781,0.236602708697319,0.833756506443024,0.542900562286377,0.367345452308655,0.755192875862122,0.314301073551178,0.320888847112656,0.893445670604706,0.351316899061203,-0.0729207322001457,0.933412551879883,0.533053755760193,0.0411353260278702,0.845080852508545,0.542900562286377,0.367345452308655,0.755192875862122,0.535205781459808,0.472302228212357,0.700346648693085,0.371347606182098,0.418176740407944,0.82899284362793,0.314301073551178,0.320888847112656,0.893445670604706,0.267092674970627,-0.484114617109299,0.833243370056152,0.329291462898254,-0.460140645503998,0.824522733688354,0.292688071727753,-0.580336809158325,0.759962379932404,0.209196627140045,-0.665287017822266,0.716679811477661,0.512064158916473,0.485980182886124,0.708246827125549,0.611575484275818,0.314111411571503,0.726160764694214,0.414541780948639,0.400993496179581,0.816920638084412,0.397927284240723,0.292557120323181,0.869519531726837,0.371347606182098,0.418176740407944,0.82899284362793,0.763672888278961,0.330310761928558,0.554705798625946,0.793774306774139,0.385858178138733,0.470144480466843,0.846449613571167,0.310930520296097,0.432256042957306,0.815548717975616,0.273398518562317,0.510032892227173,0.793774306774139,0.385858178138733,0.470144480466843,0.763672888278961,0.330310761928558,0.554705798625946,0.87058699131012,0.227341398596764,0.436341762542725,0.843018114566803,0.354378879070282,0.404643177986145,0.763672888278961,0.330310761928558,0.554705798625946,0.815548717975616,0.273398518562317,0.510032892227173,0.776109874248505,0.274881482124329,0.567532956600189,0.728024780750275,0.317726284265518,0.607478320598602,\n0.817228376865387,-0.0154423741623759,0.576107025146484,0.775663673877716,0.0339613817632198,0.630232095718384,0.507363021373749,-0.115291275084019,0.853985190391541,0.54023802280426,-0.148879259824753,0.828237771987915,0.839345693588257,-0.00945493672043085,0.543515801429749,0.785013139247894,0.0451312512159348,0.617832958698273,0.36207702755928,0.0357636697590351,0.931461870670319,0.52197939157486,-0.246480882167816,0.816568851470947,0.480981200933456,0.871001183986664,0.100070223212242,0.739092469215393,0.541533410549164,0.400604367256165,0.252335846424103,0.330343335866928,0.909505307674408,0.13062296807766,0.400416731834412,0.906975269317627,0.121470481157303,-0.391699403524399,0.912039756774902,0.13062296807766,0.400416731834412,0.906975269317627,0.252335846424103,0.330343335866928,0.909505307674408,0.114735066890717,-0.656680226325989,0.745390474796295,0.164827063679695,-0.547387719154358,0.820486903190613,0.171075537800789,-0.616661608219147,0.768415033817291,0.208488672971725,-0.647888123989105,0.732648193836212,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0233143605291843,-0.495335191488266,0.868389010429382,-0.199777901172638,-0.484420716762543,0.851719081401825,0.607095539569855,-0.200262412428856,0.768979847431183,0.655191659927368,0.0146637577563524,0.755320370197296,0.596563339233398,-0.0223739240318537,0.8022540807724,0.702920734882355,-0.00120963365770876,0.711267173290253,0.495325356721878,-0.15430523455143,0.854893386363983,0.668687582015991,0.158593982458115,0.726432919502258,0.936089217662811,-0.214836105704308,0.278536230325699,0.92750072479248,-0.198037564754486,0.31705442070961,0.941718637943268,-0.180898189544678,0.283622801303864,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.0293192863464355,-0.389476090669632,0.920569777488709,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.816257119178772,-0.389834344387054,-0.426325589418411,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.856223344802856,0.13723511993885,-0.498044282197952,\n0.93777334690094,-0.280869245529175,-0.204190224409103,0.047360323369503,-0.552981853485107,0.831846177577972,0.248945504426956,-0.117258243262768,0.961393058300018,0.362627446651459,-0.180693462491035,0.914249002933502,0.11539563536644,-0.528798937797546,0.840865969657898,0.370056182146072,0.811048626899719,-0.453054636716843,0.33390274643898,0.823867678642273,-0.457985788583755,0.713096976280212,0.68854147195816,-0.131921663880348,0.370056182146072,0.811048626899719,-0.453054636716843,-0.299774140119553,0.750125706195831,-0.589446246623993,0.33390274643898,0.823867678642273,-0.457985788583755,0.138864398002625,0.273968666791916,-0.951660573482513,0.115779966115952,0.184250295162201,-0.976036310195923,-0.00542618287727237,0.149814411997795,-0.98869925737381,0.002942921128124,0.253444164991379,-0.967345535755157,0.0694107115268707,0.216942340135574,-0.973713636398315,-0.00773082999512553,0.120841763913631,-0.992641687393188,0.139773815870285,0.0987650603055954,-0.985245525836945,0.17595848441124,0.184216767549515,-0.967007160186768,-0.147914990782738,0.17213037610054,0.973905682563782,0.026632534340024,0.124120466411114,0.991909682750702,0.00927210599184036,-0.101372048258781,0.99480539560318,-0.220686122775078,-0.040834903717041,0.974489688873291,0.714891254901886,0.201140508055687,0.669681310653687,0.0118562933057547,0.974313676357269,0.224883005023003,-0.258119583129883,0.745032370090485,0.615061819553375,-0.0101526426151395,0.0385068021714687,0.999206781387329,-0.690630912780762,-0.290166169404984,-0.662444412708282,-0.77015894651413,-0.0879611894488335,-0.631757915019989,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.961685180664063,0.152435541152954,-0.227870747447014,0.934603452682495,0.00426531257107854,-0.355665951967239,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.965442478656769,-0.181367635726929,-0.187153950333595,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.969782054424286,-0.238185256719589,-0.0528260990977287,\n0.935528516769409,-0.219087332487106,-0.277104824781418,-0.888915956020355,0.416312962770462,-0.191081121563911,-0.515466570854187,0.838185369968414,-0.178155809640884,-0.534112751483917,0.714107155799866,-0.452520221471787,-0.875516295433044,0.353666007518768,-0.329228729009628,0.840574324131012,-0.291103184223175,0.456830143928528,0.891989231109619,-0.254739731550217,0.373447239398956,0.948027610778809,-0.215131908655167,0.234439536929131,0.869891345500946,-0.342425405979156,0.355012476444244,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.934147357940674,0.162888333201408,-0.317546963691711,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.311408758163452,-0.316491156816483,0.896023392677307,-0.0737119764089584,-0.466615557670593,0.881383299827576,-0.069260835647583,0.0269219465553761,0.997235238552094,-0.451660662889481,0.11085283011198,0.88527637720108,0.289565563201904,-0.362892955541611,0.885697722434998,0.493298023939133,0.0378949381411076,0.8690345287323,0.106603257358074,0.0133492052555084,0.994212031364441,0.0312842912971973,-0.474717557430267,0.879582047462463,0.937608182430267,0.0460146591067314,0.344635367393494,0.950939536094666,0.19349630177021,0.241398423910141,0.900685906410217,0.180543556809425,0.395182073116302,0.905692398548126,-0.0579960867762566,0.419949680566788,0.0266619008034468,0.262281715869904,0.964622974395752,-0.0475814715027809,0.0593862198293209,0.997100412845612,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0073667336255312,-0.00580848380923271,0.999956011772156,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.0144113004207611,0.0269631575793028,0.999532520771027,-0.104829348623753,-0.0149719836190343,0.994377493858337,0.958109974861145,-0.0344467237591743,0.284321486949921,0.951365828514099,0.00983366928994656,0.30790650844574,0.908929646015167,0.18951641023159,0.371389836072922,0.930171310901642,0.112328357994556,0.34951913356781,\n-0.739963114261627,0.167704880237579,0.651405930519104,-0.628194212913513,0.287138849496841,0.723134398460388,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.720110774040222,-0.0107529554516077,0.693775773048401,0.36207702755928,0.0357636697590351,0.931461870670319,0.785013139247894,0.0451312512159348,0.617832958698273,0.563811004161835,0.228632539510727,0.793627321720123,-0.619005084037781,0.113047316670418,0.777208507061005,-0.578717350959778,0.160483196377754,0.799582004547119,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.761701762676239,0.421244710683823,0.492304056882858,-0.702385485172272,0.688902199268341,0.179076477885246,-0.630214631557465,0.655408442020416,0.416256308555603,0.778178691864014,0.616257607936859,0.121097095310688,0.739092469215393,0.541533410549164,0.400604367256165,0.480981200933456,0.871001183986664,0.100070223212242,0.746549785137177,0.0205342527478933,0.665012657642365,0.808598875999451,0.0304549541324377,0.587571620941162,0.669167935848236,0.129631534218788,0.731717109680176,0.732805073261261,0.230000048875809,0.640387892723084,0.991854608058929,0.119089640676975,0.0451894104480743,0.965819001197815,-0.0271366275846958,0.257793039083481,0.815926849842072,-0.0521769113838673,0.575795948505402,0.919128894805908,0.0630135238170624,0.388884782791138,0.856838226318359,0.0312061347067356,0.514640152454376,0.928679704666138,-0.214017242193222,0.30290362238884,0.928761661052704,-0.0844941884279251,0.360918909311295,0.785623669624329,-0.0282825529575348,0.61805784702301,0.856838226318359,0.0312061347067356,0.514640152454376,0.785623669624329,-0.0282825529575348,0.61805784702301,0.746549785137177,0.0205342527478933,0.665012657642365,0.732805073261261,0.230000048875809,0.640387892723084,0.776369571685791,-0.530167698860168,0.340840935707092,0.878716766834259,-0.421581953763962,0.223887145519257,0.805564939975739,-0.533806264400482,0.257130265235901,0.67726731300354,-0.631388366222382,0.377700597047806,0.975082695484161,0.0550070591270924,-0.214913904666901,0.988399267196655,0.136643067002296,-0.0662992894649506,\n0.805564939975739,-0.533806264400482,0.257130265235901,0.878716766834259,-0.421581953763962,0.223887145519257,0.563811004161835,0.228632539510727,0.793627321720123,0.103208005428314,-0.00969436671584845,0.994612574577332,0.36207702755928,0.0357636697590351,0.931461870670319,0.546967387199402,0.0579036511480808,0.835148990154266,0.295946687459946,-0.143637612462044,0.944343090057373,0.103208005428314,-0.00969436671584845,0.994612574577332,0.563811004161835,0.228632539510727,0.793627321720123,0.535101175308228,-0.00626787729561329,0.844764709472656,0.285702854394913,-0.151269629597664,0.946304082870483,0.295946687459946,-0.143637612462044,0.944343090057373,0.546967387199402,0.0579036511480808,0.835148990154266,0.565106153488159,0.017743531614542,0.824827373027802,-0.670063674449921,0.104801684617996,0.734868168830872,-0.611212015151978,0.257414042949677,0.74843692779541,-0.483639568090439,-0.0787182152271271,0.871720254421234,0.527478218078613,-0.385366201400757,0.757139086723328,0.385615348815918,-0.420324206352234,0.821357607841492,0.495325356721878,-0.15430523455143,0.854893386363983,0.702920734882355,-0.00120963365770876,0.711267173290253,0.20434632897377,0.515124678611755,0.832399606704712,0.219657093286514,0.398345082998276,0.890545904636383,0.340864300727844,0.524212896823883,0.780392467975616,0.171536713838577,-0.946371257305145,0.273782074451447,0.164180904626846,-0.958690702915192,0.232285901904106,0.279211044311523,-0.955691933631897,0.093242421746254,0.255019038915634,-0.916801631450653,0.307311117649078,0.16572479903698,-0.647090375423431,0.744183719158173,0.0821766927838326,-0.66467010974884,0.742603957653046,0.171536713838577,-0.946371257305145,0.273782074451447,0.255019038915634,-0.916801631450653,0.307311117649078,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.304556578397751,-0.909958362579346,0.281462401151657,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.304556578397751,-0.909958362579346,0.281462401151657,\n-0.139739543199539,-0.751490116119385,0.644775569438934,-0.139739543199539,-0.751490116119385,0.644775569438934,0.033345639705658,-0.401991754770279,0.915035903453827,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.52777773141861,0.480110883712769,0.700674116611481,-0.346435993909836,0.570491790771484,0.744661808013916,-0.428986668586731,0.611180424690247,0.665153324604034,0.245724827051163,0.276487857103348,0.929071426391602,0.305438488721848,0.421940237283707,0.853623926639557,0.219657093286514,0.398345082998276,0.890545904636383,0.163330301642418,0.241669088602066,0.956514120101929,-0.960206747055054,0.212085798382759,0.18172125518322,-0.934037208557129,0.242426365613937,0.262305021286011,-0.931853711605072,0.224255800247192,0.285233229398727,-0.974589943885803,0.150285556912422,0.166098326444626,-0.346435993909836,0.570491790771484,0.744661808013916,-0.273772716522217,0.454653739929199,0.847548484802246,-0.20940063893795,0.453145354986191,0.866493284702301,-0.279750615358353,0.610641419887543,0.74084860086441,-0.428986668586731,0.611180424690247,0.665153324604034,0.0744598954916,0.293609887361526,0.953020930290222,0.0879488736391068,0.341627478599548,0.935711324214935,0.139874473214149,0.332423865795136,0.932700097560883,-0.617874979972839,-0.144242078065872,0.772932589054108,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.800495445728302,-0.125636011362076,0.586022734642029,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.938549876213074,0.168846443295479,0.301023334264755,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.896919310092926,-0.0747082084417343,0.435837626457214,\n-0.918760776519775,0.045384906232357,0.392197400331497,-0.855047225952148,0.419915407896042,0.304245471954346,-0.922844409942627,0.263350307941437,0.281078040599823,-0.897303998470306,0.274592310190201,0.345607608556747,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.766225039958954,-0.486649185419083,0.419609010219574,0.64728707075119,-0.269912004470825,0.712858319282532,0.804244041442871,-0.107830874621868,0.584434807300568,0.941014289855957,-0.231837883591652,0.246461525559425,0.903722703456879,-0.336785912513733,0.26431143283844,0.719567954540253,-0.322717130184174,0.614878535270691,0.550090253353119,-0.357467710971832,0.754730105400085,0.702580511569977,0.00276018492877483,0.711598932743073,0.792236804962158,-0.0960670188069344,0.602604329586029,0.866469502449036,-0.361488610506058,0.344320476055145,0.719567954540253,-0.322717130184174,0.614878535270691,0.792236804962158,-0.0960670188069344,0.602604329586029,0.883809387683868,-0.290479838848114,0.366745710372925,0.892324268817902,-0.364589005708694,0.266143202781677,0.897057175636292,-0.352101475000381,0.267044723033905,0.866469502449036,-0.361488610506058,0.344320476055145,0.883809387683868,-0.290479838848114,0.366745710372925,0.789786696434021,-0.370871901512146,0.488560140132904,0.844530344009399,-0.306019067764282,0.4394551217556,0.897057175636292,-0.352101475000381,0.267044723033905,0.892324268817902,-0.364589005708694,0.266143202781677,-0.82659912109375,0.121020883321762,0.549625158309937,-0.787644863128662,0.107126019895077,0.606745064258575,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.895226001739502,0.157463803887367,0.416863977909088,-0.917545735836029,0.0924613624811172,0.386730790138245,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.82659912109375,0.121020883321762,0.549625158309937,-0.895226001739502,0.157463803887367,0.416863977909088,0.680521726608276,-0.105455316603184,0.725099503993988,0.85576856136322,-0.00803003925830126,0.517296552658081,\n0.817228376865387,-0.0154423741623759,0.576107025146484,0.54023802280426,-0.148879259824753,0.828237771987915,0.800939977169037,-0.0900113806128502,0.59194016456604,0.85576856136322,-0.00803003925830126,0.517296552658081,0.680521726608276,-0.105455316603184,0.725099503993988,0.0623843558132648,-0.406503170728683,0.911517083644867,-0.0108760436996818,-0.349400758743286,0.936910271644592,-0.00295650074258447,-0.253587752580643,0.967307865619659,0.226468428969383,-0.439074218273163,0.869439959526062,0.819252371788025,-0.448852121829987,0.356871604919434,0.903722703456879,-0.336785912513733,0.26431143283844,0.925993382930756,0.073547326028347,-0.370306611061096,0.819883346557617,-0.543677628040314,0.179460227489471,0.918502330780029,-0.196233198046684,0.343287169933319,0.938213586807251,-0.216931000351906,0.269622415304184,0.891989231109619,-0.254739731550217,0.373447239398956,-0.596545398235321,0.216776832938194,0.772749245166779,-0.700570464134216,0.212181925773621,0.681307435035706,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.578490018844604,0.0704870000481606,0.812638223171234,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.323468834161758,-0.409916341304779,0.85284024477005,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.35642284154892,0.221263155341148,0.907747387886047,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.204613357782364,0.564212739467621,0.799873352050781,-0.046717431396246,0.464232265949249,0.884480595588684,-0.104829348623753,-0.0149719836190343,0.994377493858337,-0.218910127878189,-0.0667930841445923,0.973456263542175,0.255169302225113,-0.0558453612029552,0.965282320976257,0.133207947015762,0.0763719230890274,0.988141179084778,0.187445163726807,0.511297464370728,0.838712811470032,\n0.330043107271194,0.436470597982407,0.83699756860733,-0.692487776279449,0.122583940625191,0.71093875169754,-0.667788088321686,0.180951654911041,0.722021877765656,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.951185405254364,-0.150061026215553,0.2696812748909,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.582078754901886,0.152128055691719,0.798774898052216,-0.578490018844604,0.0704870000481606,0.812638223171234,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.667788088321686,0.180951654911041,0.722021877765656,-0.667788088321686,0.180951654911041,0.722021877765656,-0.692487776279449,0.122583940625191,0.71093875169754,-0.518675327301025,0.170822575688362,0.837732374668121,-0.667788088321686,0.180951654911041,0.722021877765656,-0.518675327301025,0.170822575688362,0.837732374668121,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.582078754901886,0.152128055691719,0.798774898052216,-0.518675327301025,0.170822575688362,0.837732374668121,-0.447176039218903,0.207748264074326,0.869985222816467,-0.53751266002655,0.1327995210886,0.832733154296875,-0.527163207530975,0.108157083392143,0.842852890491486,-0.419887959957123,0.29813814163208,0.857209324836731,-0.447176039218903,0.207748264074326,0.869985222816467,-0.518675327301025,0.170822575688362,0.837732374668121,0.523068964481354,-0.400331109762192,0.752418637275696,0.630171060562134,-0.220097869634628,0.744608163833618,0.511712968349457,-0.26713839173317,0.816570222377777,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.505191087722778,-0.124014981091022,0.854050517082214,0.139874473214149,0.332423865795136,0.932700097560883,0.0879488736391068,0.341627478599548,0.935711324214935,\n-0.113911136984825,0.222564980387688,0.968240201473236,-0.0552638620138168,0.347488284111023,0.936054348945618,0.431708127260208,0.0743667632341385,0.898942530155182,0.179719522595406,0.199890360236168,0.963195025920868,0.670062482357025,-0.367128610610962,0.645161092281342,0.666223108768463,-0.303315341472626,0.681283056735992,0.775085091590881,-0.264017641544342,0.574053823947906,0.788963615894318,-0.297772616147995,0.537464380264282,-0.912839949131012,0.366738528013229,0.179516360163689,-0.930616736412048,0.324010014533997,0.170205876231194,-0.922440767288208,0.315537393093109,0.222573891282082,-0.951293051242828,0.220237165689468,0.215724766254425,0.494429767131805,-0.0934201404452324,0.864182770252228,0.550924062728882,0.0100475419312716,0.834494948387146,0.577744483947754,0.0458397567272186,0.814929485321045,0.401639640331268,-0.00309631112031639,0.915792524814606,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.559565424919128,0.213157281279564,0.80090606212616,-0.671594560146332,-0.181319773197174,0.718389809131622,0.0272070206701756,0.178279355168343,0.983603715896606,0.0284836571663618,0.148866042494774,0.988447070121765,0.0307504720985889,0.178748592734337,0.983414113521576,0.0412900410592556,0.144470527768135,0.988647282123566,0.0412900410592556,0.144470527768135,0.988647282123566,0.0307504720985889,0.178748592734337,0.983414113521576,0.0381993055343628,0.285694986581802,0.957558989524841,0.17553049325943,0.198497295379639,0.964255094528198,0.17553049325943,0.198497295379639,0.964255094528198,0.0381993055343628,0.285694986581802,0.957558989524841,0.0348379723727703,0.239972576498985,0.970154345035553,0.00455546798184514,0.298394352197647,0.954431772232056,-0.00221070507541299,0.348074615001678,0.937464237213135,0.17553049325943,0.198497295379639,0.964255094528198,0.00455546798184514,0.298394352197647,0.954431772232056,0.416927576065063,0.413195610046387,0.809592962265015,0.620209395885468,0.316063761711121,0.717944324016571,0.497093498706818,0.456073582172394,0.738169968128204,-0.773259878158569,-0.498874604701996,-0.39139911532402,\n-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.778645157814026,-0.596678197383881,-0.194131031632423,0.140199616551399,0.988947510719299,0.0482386760413647,0.0780868381261826,0.989874243736267,-0.118538655340672,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.467009961605072,0.872948586940765,-0.140934243798256,0.0402784161269665,0.935566067695618,0.350847274065018,0.140199616551399,0.988947510719299,0.0482386760413647,-0.467009961605072,0.872948586940765,-0.140934243798256,-0.634040713310242,0.756764888763428,0.159057512879372,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.0320936106145382,0.92166805267334,-0.386649638414383,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.623760402202606,0.624061942100525,-0.470605611801147,0.0780868381261826,0.989874243736267,-0.118538655340672,-0.0320936106145382,0.92166805267334,-0.386649638414383,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.778645157814026,-0.596678197383881,-0.194131031632423,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.156271457672119,-0.733824193477631,-0.661121249198914,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.139869406819344,-0.803301215171814,-0.578915953636169,\n-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.616132795810699,-0.418477803468704,-0.667275547981262,0.387454837560654,-0.142215475440025,-0.910853147506714,0.329197883605957,-0.229186490178108,-0.916025280952454,0.046584777534008,-0.616905212402344,-0.785657584667206,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.323159694671631,-0.226072624325752,-0.918944478034973,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.156271457672119,-0.733824193477631,-0.661121249198914,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.856640636920929,-0.0924222394824028,0.507567644119263,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.243391394615173,0.450631767511368,0.858889758586884,-0.83115953207016,0.347447574138641,0.434112966060638,-0.83115953207016,0.347447574138641,0.434112966060638,-0.243391394615173,0.450631767511368,0.858889758586884,0.0402784161269665,0.935566067695618,0.350847274065018,-0.634040713310242,0.756764888763428,0.159057512879372,-0.856640636920929,-0.0924222394824028,0.507567644119263,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.0625194534659386,-0.652953445911407,-0.754813313484192,0.046584777534008,-0.616905212402344,-0.785657584667206,0.0190247669816017,-0.745713531970978,-0.665995001792908,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.070786252617836,-0.7830451130867,-0.617923676967621,0.0190247669816017,-0.745713531970978,-0.665995001792908,-0.00492077972739935,-0.813752949237823,-0.58119010925293,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0729037374258041,-0.816932082176209,-0.572107493877411,\n-0.00492077972739935,-0.813752949237823,-0.58119010925293,-0.0045230402611196,-0.909497022628784,-0.415685802698135,-0.0762164741754532,-0.884903132915497,-0.459497004747391,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0045230402611196,-0.909497022628784,-0.415685802698135,0.016590029001236,-0.906809270381927,-0.421214610338211,-0.0781072080135345,-0.934095561504364,-0.348374396562576,-0.0762164741754532,-0.884903132915497,-0.459497004747391,0.016590029001236,-0.906809270381927,-0.421214610338211,0.0482706017792225,-0.93963760137558,-0.338749468326569,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,-0.0781072080135345,-0.934095561504364,-0.348374396562576,0.0482706017792225,-0.93963760137558,-0.338749468326569,0.0264394171535969,-0.995756030082703,-0.0881528109312058,-0.0632308647036552,-0.910096168518066,0.409544676542282,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,0.0264394171535969,-0.995756030082703,-0.0881528109312058,0.0696752369403839,-0.881582498550415,0.46685928106308,-0.0141258565708995,-0.388077318668365,0.921518564224243,-0.0632308647036552,-0.910096168518066,0.409544676542282,0.0696752369403839,-0.881582498550415,0.46685928106308,0.26997372508049,-0.290317326784134,0.91805773973465,0.0160026121884584,-0.0152897713705897,0.999755024909973,-0.0141258565708995,-0.388077318668365,0.921518564224243,0.26997372508049,-0.290317326784134,0.91805773973465,0.385292500257492,-0.029097318649292,0.922335624694824,0.0535399168729782,0.501161873340607,0.863695681095123,0.0160026121884584,-0.0152897713705897,0.999755024909973,0.385292500257492,-0.029097318649292,0.922335624694824,0.338861733675003,0.40567883849144,0.848880112171173,0.0919129848480225,0.966963589191437,0.237767487764359,0.0535399168729782,0.501161873340607,0.863695681095123,0.338861733675003,0.40567883849144,0.848880112171173,0.157188326120377,0.944919049739838,0.287088453769684,0.157188326120377,0.944919049739838,0.287088453769684,0.098090648651123,0.992740631103516,0.0696010887622833,0.0886319801211357,0.994267225265503,0.0598079860210419,\n0.0919129848480225,0.966963589191437,0.237767487764359,0.098090648651123,0.992740631103516,0.0696010887622833,0.125102162361145,0.989620208740234,-0.0707194358110428,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.0886319801211357,0.994267225265503,0.0598079860210419,0.00503939157351851,0.912464261054993,-0.409125357866287,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.125102162361145,0.989620208740234,-0.0707194358110428,0.188163548707962,0.840512216091156,-0.5080686211586,0.017586937174201,0.584774792194366,-0.811005055904388,0.00503939157351851,0.912464261054993,-0.409125357866287,0.188163548707962,0.840512216091156,-0.5080686211586,0.243700608611107,0.544483065605164,-0.802588403224945,0.163174018263817,0.444838464260101,-0.880620777606964,0.189078122377396,0.441867411136627,-0.87692791223526,0.0718594193458557,0.455831170082092,-0.88716071844101,0.057487852871418,0.456679046154022,-0.88777220249176,-0.0362379811704159,-0.262005388736725,-0.964385807514191,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.162789091467857,-0.282180637121201,-0.945448994636536,0.00530779222026467,-0.225043326616287,-0.974334299564362,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.046584777534008,-0.616905212402344,-0.785657584667206,0.329197883605957,-0.229186490178108,-0.916025280952454,0.364371746778488,-0.284274369478226,-0.886803984642029,0.0190247669816017,-0.745713531970978,-0.665995001792908,-0.00492077972739935,-0.813752949237823,-0.58119010925293,0.0190247669816017,-0.745713531970978,-0.665995001792908,0.364371746778488,-0.284274369478226,-0.886803984642029,0.428298622369766,-0.365026712417603,-0.826629161834717,-0.0045230402611196,-0.909497022628784,-0.415685802698135,-0.00492077972739935,-0.813752949237823,-0.58119010925293,0.428298622369766,-0.365026712417603,-0.826629161834717,0.521451473236084,-0.506328523159027,-0.686818599700928,0.016590029001236,-0.906809270381927,-0.421214610338211,-0.0045230402611196,-0.909497022628784,-0.415685802698135,\n0.521451473236084,-0.506328523159027,-0.686818599700928,0.593445479869843,-0.55176454782486,-0.585984945297241,0.0482706017792225,-0.93963760137558,-0.338749468326569,0.016590029001236,-0.906809270381927,-0.421214610338211,0.593445479869843,-0.55176454782486,-0.585984945297241,0.673712253570557,-0.610602140426636,-0.416265428066254,0.0264394171535969,-0.995756030082703,-0.0881528109312058,0.0482706017792225,-0.93963760137558,-0.338749468326569,0.673712253570557,-0.610602140426636,-0.416265428066254,0.670762062072754,-0.708589673042297,-0.219041094183922,0.0696752369403839,-0.881582498550415,0.46685928106308,0.0264394171535969,-0.995756030082703,-0.0881528109312058,0.670762062072754,-0.708589673042297,-0.219041094183922,0.572986006736755,-0.752050638198853,0.325740456581116,0.26997372508049,-0.290317326784134,0.91805773973465,0.0696752369403839,-0.881582498550415,0.46685928106308,0.572986006736755,-0.752050638198853,0.325740456581116,0.849142253398895,-0.224129945039749,0.478250175714493,0.385292500257492,-0.029097318649292,0.922335624694824,0.26997372508049,-0.290317326784134,0.91805773973465,0.849142253398895,-0.224129945039749,0.478250175714493,0.890664577484131,-0.0774205401539803,0.448020815849304,0.338861733675003,0.40567883849144,0.848880112171173,0.385292500257492,-0.029097318649292,0.922335624694824,0.890664577484131,-0.0774205401539803,0.448020815849304,0.888973355293274,0.214637205004692,0.404545694589615,0.157188326120377,0.944919049739838,0.287088453769684,0.338861733675003,0.40567883849144,0.848880112171173,0.888973355293274,0.214637205004692,0.404545694589615,0.76104062795639,0.645680010318756,0.0625654682517052,0.76104062795639,0.645680010318756,0.0625654682517052,0.771759808063507,0.606137216091156,-0.19231353700161,0.098090648651123,0.992740631103516,0.0696010887622833,0.157188326120377,0.944919049739838,0.287088453769684,0.771759808063507,0.606137216091156,-0.19231353700161,0.769487977027893,0.440927565097809,-0.462029308080673,0.125102162361145,0.989620208740234,-0.0707194358110428,0.098090648651123,0.992740631103516,0.0696010887622833,\n0.243700608611107,0.544483065605164,-0.802588403224945,0.188163548707962,0.840512216091156,-0.5080686211586,0.778522193431854,0.369191855192184,-0.507543742656708,0.735658526420593,0.230637982487679,-0.636877298355103,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.046584777534008,-0.616905212402344,-0.785657584667206,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.0362379811704159,-0.262005388736725,-0.964385807514191,-0.0825362652540207,-0.192694559693336,-0.977781474590302,-0.0723719522356987,-0.219757899641991,-0.972866296768188,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.156271457672119,-0.733824193477631,-0.661121249198914,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.156271457672119,-0.733824193477631,-0.661121249198914,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0762164741754532,-0.884903132915497,-0.459497004747391,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.0762164741754532,-0.884903132915497,-0.459497004747391,-0.0781072080135345,-0.934095561504364,-0.348374396562576,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.0781072080135345,-0.934095561504364,-0.348374396562576,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.181932657957077,-0.979667663574219,-0.0845683068037033,\n-0.0777258798480034,-0.995770275592804,-0.0489919558167458,-0.0632308647036552,-0.910096168518066,0.409544676542282,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.0632308647036552,-0.910096168518066,0.409544676542282,-0.0141258565708995,-0.388077318668365,0.921518564224243,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.0141258565708995,-0.388077318668365,0.921518564224243,0.0160026121884584,-0.0152897713705897,0.999755024909973,-0.243391394615173,0.450631767511368,0.858889758586884,-0.353458434343338,0.0279432106763124,0.935032784938812,0.0160026121884584,-0.0152897713705897,0.999755024909973,0.0535399168729782,0.501161873340607,0.863695681095123,0.0402784161269665,0.935566067695618,0.350847274065018,-0.243391394615173,0.450631767511368,0.858889758586884,0.0535399168729782,0.501161873340607,0.863695681095123,0.0919129848480225,0.966963589191437,0.237767487764359,0.0919129848480225,0.966963589191437,0.237767487764359,0.0886319801211357,0.994267225265503,0.0598079860210419,0.140199616551399,0.988947510719299,0.0482386760413647,0.0402784161269665,0.935566067695618,0.350847274065018,0.0886319801211357,0.994267225265503,0.0598079860210419,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.0780868381261826,0.989874243736267,-0.118538655340672,0.140199616551399,0.988947510719299,0.0482386760413647,-0.0320936106145382,0.92166805267334,-0.386649638414383,0.0780868381261826,0.989874243736267,-0.118538655340672,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.00503939157351851,0.912464261054993,-0.409125357866287,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.0320936106145382,0.92166805267334,-0.386649638414383,0.00503939157351851,0.912464261054993,-0.409125357866287,0.017586937174201,0.584774792194366,-0.811005055904388,-0.0419603176414967,0.516997694969177,-0.854957699775696,-0.0663426592946053,0.518996477127075,-0.85219794511795,-0.175480470061302,0.520782589912415,-0.835459232330322,\n-0.147772952914238,0.520121157169342,-0.84121173620224,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.385834068059921,-0.169429570436478,-0.906876862049103,0.243047595024109,-0.82210099697113,0.514857113361359,0.279289931058884,0.161584615707397,0.94651335477829,0.336174368858337,0.935995519161224,0.104399025440216,0.759971797466278,-0.612702488899231,0.216883733868599,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.812742531299591,0.259539633989334,-0.521621286869049,0.317967116832733,0.377013236284256,-0.869918346405029,0.735658526420593,0.230637982487679,-0.636877298355103,0.74884694814682,0.0258232615888119,-0.662239730358124,0.769487977027893,0.440927565097809,-0.462029308080673,0.778522193431854,0.369191855192184,-0.507543742656708,0.188163548707962,0.840512216091156,-0.5080686211586,0.125102162361145,0.989620208740234,-0.0707194358110428,0.120905123651028,0.330013185739517,-0.936201512813568,0.130089670419693,0.341309607028961,-0.930905163288116,0.317967116832733,0.377013236284256,-0.869918346405029,0.00479412823915482,0.900386512279511,0.435064554214478,0.143662974238396,0.945594608783722,0.29191067814827,0.288045525550842,0.936091125011444,0.201898843050003,0.167652994394302,0.863424003124237,0.475806176662445,0.234877377748489,0.967058181762695,0.0981385260820389,0.138274729251862,0.981688380241394,-0.131026938557625,0.199432492256165,0.944634437561035,-0.260561794042587,0.310655295848846,0.949596464633942,-0.0419514440000057,-0.194994285702705,0.859172344207764,0.473075121641159,0.00479412823915482,0.900386512279511,0.435064554214478,0.167652994394302,0.863424003124237,0.475806176662445,-0.143396884202957,0.656446933746338,0.74061781167984,-0.0101526426151395,0.0385068021714687,0.999206781387329,-0.258119583129883,0.745032370090485,0.615061819553375,\n-0.143396884202957,0.656446933746338,0.74061781167984,-0.0197913087904453,0.212507590651512,0.976958990097046,-0.457484602928162,0.835335671901703,-0.304831385612488,-0.427035480737686,0.790110290050507,-0.439734488725662,-0.413909703493118,0.867565214633942,-0.27569791674614,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.357527554035187,0.888932764530182,-0.286308616399765,-0.457484602928162,0.835335671901703,-0.304831385612488,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.298668056726456,0.872490286827087,-0.386727452278137,0.360629975795746,-0.702259659767151,0.613821983337402,-0.0101526426151395,0.0385068021714687,0.999206781387329,-0.0197913087904453,0.212507590651512,0.976958990097046,0.130621984601021,-0.367120236158371,0.920956373214722,0.216771319508553,0.955569624900818,0.199742004275322,0.234877377748489,0.967058181762695,0.0981385260820389,0.310655295848846,0.949596464633942,-0.0419514440000057,0.314175516366959,0.947196781635284,0.0641251429915428,0.143662974238396,0.945594608783722,0.29191067814827,0.216771319508553,0.955569624900818,0.199742004275322,0.314175516366959,0.947196781635284,0.0641251429915428,0.288045525550842,0.936091125011444,0.201898843050003,-0.427035480737686,0.790110290050507,-0.439734488725662,0.123842000961304,0.97543865442276,-0.182160839438438,0.0281898751854897,0.814052581787109,0.580106735229492,-0.413909703493118,0.867565214633942,-0.27569791674614,0.463392287492752,0.731873750686646,0.499628275632858,0.247720703482628,0.139039516448975,0.95880264043808,0.503155887126923,-0.0240856502205133,0.863860011100769,0.413316607475281,0.417648822069168,0.809159338474274,0.123842000961304,0.97543865442276,-0.182160839438438,0.463392287492752,0.731873750686646,0.499628275632858,0.413316607475281,0.417648822069168,0.809159338474274,0.0281898751854897,0.814052581787109,0.580106735229492,0.503155887126923,-0.0240856502205133,0.863860011100769,0.247720703482628,0.139039516448975,0.95880264043808,0.101962603628635,-0.729668021202087,0.676156997680664,0.345502704381943,-0.548628091812134,0.761337697505951,\n0.220668077468872,-0.699356377124786,0.679857552051544,0.154463171958923,-0.632704854011536,0.758831799030304,0.176707834005356,-0.49970081448555,0.847981989383698,0.259503424167633,-0.571858525276184,0.778226017951965,0.101962603628635,-0.729668021202087,0.676156997680664,0.220668077468872,-0.699356377124786,0.679857552051544,0.259503424167633,-0.571858525276184,0.778226017951965,0.345502704381943,-0.548628091812134,0.761337697505951,0.0443188734352589,-0.657264351844788,0.752355933189392,-0.15265741944313,-0.753475069999695,0.639508426189423,-0.142644554376602,-0.667072474956512,0.7312091588974,0.0566699393093586,-0.541294038295746,0.83892148733139,0.154463171958923,-0.632704854011536,0.758831799030304,0.0443188734352589,-0.657264351844788,0.752355933189392,0.0566699393093586,-0.541294038295746,0.83892148733139,0.176707834005356,-0.49970081448555,0.847981989383698,-0.15265741944313,-0.753475069999695,0.639508426189423,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.142644554376602,-0.667072474956512,0.7312091588974,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.137277618050575,-0.987909972667694,0.0720329731702805,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.100898645818233,-0.993996679782867,-0.0423085056245327,0.139529138803482,-0.986220002174377,-0.0888914614915848,0.10157036036253,-0.993610143661499,0.0492179282009602,-0.137277618050575,-0.987909972667694,0.0720329731702805,0.139529138803482,-0.986220002174377,-0.0888914614915848,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.318193823099136,-0.936122417449951,0.149758413434029,0.10157036036253,-0.993610143661499,0.0492179282009602,0.390757709741592,-0.919032633304596,-0.0518401972949505,\n0.494486898183823,-0.83785080909729,0.231276199221611,0.336078584194183,-0.770137906074524,0.542161226272583,0.318193823099136,-0.936122417449951,0.149758413434029,0.336078584194183,-0.770137906074524,0.542161226272583,0.494486898183823,-0.83785080909729,0.231276199221611,0.360629975795746,-0.702259659767151,0.613821983337402,0.130621984601021,-0.367120236158371,0.920956373214722,0.138274729251862,0.981688380241394,-0.131026938557625,-0.0952406078577042,0.956162750720978,-0.276915192604065,-0.0502913668751717,0.914079129695892,-0.402405440807343,0.199432492256165,0.944634437561035,-0.260561794042587,-0.0502913668751717,0.914079129695892,-0.402405440807343,-0.0952406078577042,0.956162750720978,-0.276915192604065,-0.357527554035187,0.888932764530182,-0.286308616399765,-0.298668056726456,0.872490286827087,-0.386727452278137,0.167652994394302,0.863424003124237,0.475806176662445,0.288045525550842,0.936091125011444,0.201898843050003,0.353775978088379,0.927305817604065,0.122255511581898,0.256664752960205,0.744389593601227,0.616447329521179,0.310655295848846,0.949596464633942,-0.0419514440000057,0.199432492256165,0.944634437561035,-0.260561794042587,0.249470040202141,0.963651180267334,0.0956092849373817,0.31928414106369,0.943383932113647,0.0899131372570992,-0.143396884202957,0.656446933746338,0.74061781167984,0.167652994394302,0.863424003124237,0.475806176662445,0.256664752960205,0.744389593601227,0.616447329521179,0.268563270568848,0.657460391521454,0.704002559185028,-0.0197913087904453,0.212507590651512,0.976958990097046,-0.143396884202957,0.656446933746338,0.74061781167984,0.268563270568848,0.657460391521454,0.704002559185028,0.17468436062336,0.368205070495605,0.913186967372894,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.413909703493118,0.867565214633942,-0.27569791674614,0.225631609559059,0.960186958312988,0.164716094732285,0.130621984601021,-0.367120236158371,0.920956373214722,-0.0197913087904453,0.212507590651512,0.976958990097046,0.17468436062336,0.368205070495605,0.913186967372894,0.0710558071732521,-0.106974616646767,0.991719484329224,\n0.314175516366959,0.947196781635284,0.0641251429915428,0.310655295848846,0.949596464633942,-0.0419514440000057,0.31928414106369,0.943383932113647,0.0899131372570992,0.353775978088379,0.927305817604065,0.122255511581898,0.288045525550842,0.936091125011444,0.201898843050003,0.314175516366959,0.947196781635284,0.0641251429915428,0.353775978088379,0.927305817604065,0.122255511581898,-0.413909703493118,0.867565214633942,-0.27569791674614,0.0281898751854897,0.814052581787109,0.580106735229492,0.218661069869995,0.707967698574066,0.671542286872864,0.225631609559059,0.960186958312988,0.164716094732285,0.413316607475281,0.417648822069168,0.809159338474274,0.503155887126923,-0.0240856502205133,0.863860011100769,0.0616627000272274,0.104778632521629,0.992582082748413,0.0281898751854897,0.814052581787109,0.580106735229492,0.413316607475281,0.417648822069168,0.809159338474274,0.0616627000272274,0.104778632521629,0.992582082748413,0.218661069869995,0.707967698574066,0.671542286872864,-0.133871212601662,-0.598869144916534,0.789578497409821,0.0616627000272274,0.104778632521629,0.992582082748413,0.503155887126923,-0.0240856502205133,0.863860011100769,0.345502704381943,-0.548628091812134,0.761337697505951,0.259503424167633,-0.571858525276184,0.778226017951965,0.176707834005356,-0.49970081448555,0.847981989383698,-0.284435749053955,-0.519317030906677,0.805857360363007,-0.218292459845543,-0.596042931079865,0.77271032333374,0.345502704381943,-0.548628091812134,0.761337697505951,0.259503424167633,-0.571858525276184,0.778226017951965,-0.218292459845543,-0.596042931079865,0.77271032333374,-0.133871212601662,-0.598869144916534,0.789578497409821,0.0566699393093586,-0.541294038295746,0.83892148733139,-0.142644554376602,-0.667072474956512,0.7312091588974,-0.389427453279495,-0.677065253257751,0.624442875385284,-0.347446411848068,-0.559259712696075,0.75266832113266,0.176707834005356,-0.49970081448555,0.847981989383698,0.0566699393093586,-0.541294038295746,0.83892148733139,-0.347446411848068,-0.559259712696075,0.75266832113266,-0.284435749053955,-0.519317030906677,0.805857360363007,\n-0.142644554376602,-0.667072474956512,0.7312091588974,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.346875548362732,-0.780973374843597,0.519382238388062,-0.389427453279495,-0.677065253257751,0.624442875385284,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.137277618050575,-0.987909972667694,0.0720329731702805,-0.159446969628334,-0.872670114040375,0.461544692516327,-0.251093715429306,-0.850699782371521,0.461802780628204,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.251093715429306,-0.850699782371521,0.461802780628204,-0.346875548362732,-0.780973374843597,0.519382238388062,-0.137277618050575,-0.987909972667694,0.0720329731702805,0.10157036036253,-0.993610143661499,0.0492179282009602,-0.0293050315231085,-0.867081463336945,0.497303605079651,-0.159446969628334,-0.872670114040375,0.461544692516327,0.10157036036253,-0.993610143661499,0.0492179282009602,0.318193823099136,-0.936122417449951,0.149758413434029,0.0979375094175339,-0.812688946723938,0.574408352375031,-0.0293050315231085,-0.867081463336945,0.497303605079651,0.318193823099136,-0.936122417449951,0.149758413434029,0.336078584194183,-0.770137906074524,0.542161226272583,0.195375472307205,-0.65039587020874,0.73403924703598,0.0979375094175339,-0.812688946723938,0.574408352375031,0.0710558071732521,-0.106974616646767,0.991719484329224,0.195375472307205,-0.65039587020874,0.73403924703598,0.336078584194183,-0.770137906074524,0.542161226272583,0.130621984601021,-0.367120236158371,0.920956373214722,0.199432492256165,0.944634437561035,-0.260561794042587,-0.0502913668751717,0.914079129695892,-0.402405440807343,0.141909137368202,0.983762621879578,0.109876543283463,0.249470040202141,0.963651180267334,0.0956092849373817,0.127965569496155,0.980436325073242,0.149564117193222,0.141909137368202,0.983762621879578,0.109876543283463,-0.0502913668751717,0.914079129695892,-0.402405440807343,-0.298668056726456,0.872490286827087,-0.386727452278137,0.268563270568848,0.657460391521454,0.704002559185028,\n0.256664752960205,0.744389593601227,0.616447329521179,0.0710558071732521,-0.106974616646767,0.991719484329224,0.17468436062336,0.368205070495605,0.913186967372894,0.225631609559059,0.960186958312988,0.164716094732285,0.127965569496155,0.980436325073242,0.149564117193222,-0.298668056726456,0.872490286827087,-0.386727452278137,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.140541449189186,0.973841786384583,0.178550481796265,0.00727432640269399,0.986923277378082,0.161026418209076,-0.106629706919193,0.951739728450775,0.287787467241287,-0.261545598506927,0.922910153865814,0.282543420791626,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.233783647418022,0.9701207280159,-0.0648916512727737,-0.096912607550621,0.976125478744507,-0.194388866424561,-0.106629706919193,0.951739728450775,0.287787467241287,-0.852710962295532,0.37292954325676,0.365797132253647,-0.632225632667542,0.537100076675415,0.558403313159943,-0.261545598506927,0.922910153865814,0.282543420791626,0.41320937871933,0.88689249753952,-0.206590741872787,0.438933074474335,0.880430459976196,-0.179387643933296,0.225808262825012,0.957561135292053,-0.179129242897034,0.220753118395805,0.94330245256424,-0.247888132929802,0.477838784456253,0.792661190032959,-0.378626853227615,0.510045230388641,0.828637421131134,-0.230681270360947,0.379621177911758,0.902513563632965,-0.203364074230194,0.377052932977676,0.915556311607361,-0.139956220984459,0.510045230388641,0.828637421131134,-0.230681270360947,0.438933074474335,0.880430459976196,-0.179387643933296,0.41320937871933,0.88689249753952,-0.206590741872787,0.379621177911758,0.902513563632965,-0.203364074230194,-0.852710962295532,0.37292954325676,0.365797132253647,-0.887657046318054,-0.456045299768448,0.063934437930584,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.632225632667542,0.537100076675415,0.558403313159943,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.887657046318054,-0.456045299768448,0.063934437930584,-0.762853384017944,-0.64490020275116,-0.0464594550430775,\n-0.609397828578949,-0.718622922897339,0.334985673427582,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.201113522052765,0.971361815929413,0.126529023051262,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.233783647418022,0.9701207280159,-0.0648916512727737,-0.201113522052765,0.971361815929413,0.126529023051262,-0.183847695589066,0.966428518295288,0.179488003253937,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.294077008962631,0.955018162727356,0.0381973087787628,0.466618627309799,0.783142864704132,-0.41104057431221,0.477838784456253,0.792661190032959,-0.378626853227615,0.377052932977676,0.915556311607361,-0.139956220984459,0.536845266819,0.771515130996704,0.341411113739014,0.772461295127869,-0.0374295972287655,0.633957862854004,0.727005004882813,0.68491542339325,0.0485247001051903,0.483564585447311,0.417995601892471,0.769054591655731,0.456143170595169,-0.412308812141418,0.788628458976746,0.727005004882813,0.68491542339325,0.0485247001051903,0.466618627309799,0.783142864704132,-0.41104057431221,0.536845266819,0.771515130996704,0.341411113739014,0.483564585447311,0.417995601892471,0.769054591655731,0.520344138145447,-0.759189605712891,0.390989869832993,0.493583381175995,-0.804481565952301,0.330431401729584,0.347713977098465,-0.788004815578461,0.508078157901764,0.519531428813934,-0.689787209033966,0.504262566566467,0.506179451942444,-0.83683580160141,0.208538070321083,0.593186497688293,-0.723713397979736,0.352659493684769,0.59520959854126,-0.673711001873016,0.437994301319122,0.501122713088989,-0.80717408657074,0.312003254890442,0.593186497688293,-0.723713397979736,0.352659493684769,0.520344138145447,-0.759189605712891,0.390989869832993,0.519531428813934,-0.689787209033966,0.504262566566467,0.59520959854126,-0.673711001873016,0.437994301319122,0.331354945898056,-0.940484642982483,0.0754489675164223,0.506179451942444,-0.83683580160141,0.208538070321083,0.501122713088989,-0.80717408657074,0.312003254890442,0.32907634973526,-0.925415575504303,0.187922358512878,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,\n0.13556943833828,-0.990667700767517,-0.0140880616381764,0.15561980009079,-0.982760071754456,0.0998257622122765,0.000309223076328635,-0.998522400856018,0.054340984672308,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.331354945898056,-0.940484642982483,0.0754489675164223,0.32907634973526,-0.925415575504303,0.187922358512878,0.15561980009079,-0.982760071754456,0.0998257622122765,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,0.000309223076328635,-0.998522400856018,0.054340984672308,-0.217681989073753,-0.974551320075989,0.0535187609493732,-0.558743357658386,-0.822392702102661,-0.10712693631649,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.217681989073753,-0.974551320075989,0.0535187609493732,-0.443623483181,-0.884970426559448,0.141511723399162,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.558743357658386,-0.822392702102661,-0.10712693631649,-0.443623483181,-0.884970426559448,0.141511723399162,-0.609397828578949,-0.718622922897339,0.334985673427582,0.225808262825012,0.957561135292053,-0.179129242897034,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.096912607550621,0.976125478744507,-0.194388866424561,0.220753118395805,0.94330245256424,-0.247888132929802,-0.21051436662674,0.861303210258484,0.462428838014603,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.140541449189186,0.973841786384583,0.178550481796265,-0.096912607550621,0.976125478744507,-0.194388866424561,-0.233783647418022,0.9701207280159,-0.0648916512727737,-0.199626341462135,0.962749063968658,0.182382985949516,-0.136555016040802,0.971848607063293,0.191997408866882,-0.261545598506927,0.922910153865814,0.282543420791626,-0.632225632667542,0.537100076675415,0.558403313159943,-0.21051436662674,0.861303210258484,0.462428838014603,0.0513934716582298,0.959308326244354,0.277644217014313,0.41320937871933,0.88689249753952,-0.206590741872787,0.220753118395805,0.94330245256424,-0.247888132929802,0.0820492878556252,0.971076488494873,0.224228322505951,\n0.377052932977676,0.915556311607361,-0.139956220984459,0.379621177911758,0.902513563632965,-0.203364074230194,-0.207352936267853,0.936322927474976,0.283379822969437,-0.321906387805939,0.894509375095367,0.310208320617676,0.379621177911758,0.902513563632965,-0.203364074230194,0.41320937871933,0.88689249753952,-0.206590741872787,0.0513934716582298,0.959308326244354,0.277644217014313,-0.207352936267853,0.936322927474976,0.283379822969437,-0.632225632667542,0.537100076675415,0.558403313159943,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.0247958675026894,-0.292493909597397,0.95594584941864,-0.21051436662674,0.861303210258484,0.462428838014603,-0.0247958675026894,-0.292493909597397,0.95594584941864,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.609397828578949,-0.718622922897339,0.334985673427582,-0.0917615294456482,-0.593113124370575,0.799872934818268,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.199626341462135,0.962749063968658,0.182382985949516,-0.233783647418022,0.9701207280159,-0.0648916512727737,0.536845266819,0.771515130996704,0.341411113739014,0.377052932977676,0.915556311607361,-0.139956220984459,-0.321906387805939,0.894509375095367,0.310208320617676,-0.44193634390831,0.542223930358887,0.714622557163239,0.456143170595169,-0.412308812141418,0.788628458976746,0.483564585447311,0.417995601892471,0.769054591655731,-0.522650837898254,-0.0699307844042778,0.849673926830292,0.483564585447311,0.417995601892471,0.769054591655731,0.536845266819,0.771515130996704,0.341411113739014,-0.44193634390831,0.542223930358887,0.714622557163239,-0.522650837898254,-0.0699307844042778,0.849673926830292,0.519531428813934,-0.689787209033966,0.504262566566467,0.347713977098465,-0.788004815578461,0.508078157901764,-0.209563195705414,-0.620633363723755,0.755577564239502,0.0385516360402107,-0.591684639453888,0.805247187614441,-0.209563195705414,-0.620633363723755,0.755577564239502,0.347713977098465,-0.788004815578461,0.508078157901764,0.456143170595169,-0.412308812141418,0.788628458976746,-0.522650837898254,-0.0699307844042778,0.849673926830292,\n0.501122713088989,-0.80717408657074,0.312003254890442,0.59520959854126,-0.673711001873016,0.437994301319122,0.177197024226189,-0.632450103759766,0.754061043262482,0.239427268505096,-0.754494905471802,0.611074507236481,0.59520959854126,-0.673711001873016,0.437994301319122,0.519531428813934,-0.689787209033966,0.504262566566467,0.0385516360402107,-0.591684639453888,0.805247187614441,0.177197024226189,-0.632450103759766,0.754061043262482,0.32907634973526,-0.925415575504303,0.187922358512878,0.501122713088989,-0.80717408657074,0.312003254890442,0.239427268505096,-0.754494905471802,0.611074507236481,0.182993903756142,-0.84755676984787,0.498157352209091,0.000309223076328635,-0.998522400856018,0.054340984672308,0.15561980009079,-0.982760071754456,0.0998257622122765,0.0988316684961319,-0.885145425796509,0.454697638750076,0.053495068103075,-0.879860281944275,0.472212016582489,0.15561980009079,-0.982760071754456,0.0998257622122765,0.32907634973526,-0.925415575504303,0.187922358512878,0.182993903756142,-0.84755676984787,0.498157352209091,0.0988316684961319,-0.885145425796509,0.454697638750076,-0.217681989073753,-0.974551320075989,0.0535187609493732,0.000309223076328635,-0.998522400856018,0.054340984672308,0.053495068103075,-0.879860281944275,0.472212016582489,-0.0185150001198053,-0.84597235918045,0.532905161380768,-0.443623483181,-0.884970426559448,0.141511723399162,-0.217681989073753,-0.974551320075989,0.0535187609493732,-0.0185150001198053,-0.84597235918045,0.532905161380768,-0.0868597701191902,-0.755090534687042,0.649841248989105,-0.609397828578949,-0.718622922897339,0.334985673427582,-0.443623483181,-0.884970426559448,0.141511723399162,-0.0868597701191902,-0.755090534687042,0.649841248989105,-0.0917615294456482,-0.593113124370575,0.799872934818268,0.220753118395805,0.94330245256424,-0.247888132929802,-0.096912607550621,0.976125478744507,-0.194388866424561,-0.136555016040802,0.971848607063293,0.191997408866882,0.0820492878556252,0.971076488494873,0.224228322505951,-0.251987457275391,0.951171100139618,0.178257703781128,-0.199626341462135,0.962749063968658,0.182382985949516,\n-0.294077008962631,0.955018162727356,0.0381973087787628,-0.251987457275391,0.951171100139618,0.178257703781128,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.251987457275391,0.951171100139618,0.178257703781128,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.21051436662674,0.861303210258484,0.462428838014603,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.183847695589066,0.966428518295288,0.179488003253937,-0.109012864530087,0.977998495101929,0.177862659096718,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.109012864530087,0.977998495101929,0.177862659096718,0.00727432640269399,0.986923277378082,0.161026418209076,-0.140541449189186,0.973841786384583,0.178550481796265,-0.21051436662674,0.861303210258484,0.462428838014603,-0.140541449189186,0.973841786384583,0.178550481796265,-0.261545598506927,0.922910153865814,0.282543420791626,-0.258119583129883,0.745032370090485,0.615061819553375,-0.194994285702705,0.859172344207764,0.473075121641159,-0.143396884202957,0.656446933746338,0.74061781167984,0.690909028053284,-0.334549605846405,0.640875399112701,0.707773089408875,-0.177667543292046,0.683733463287354,0.630890548229218,-0.774750173091888,0.0417049825191498,0.563636422157288,-0.823141872882843,0.0689310654997826,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.846795618534088,-0.531082570552826,0.0298077315092087,-0.873597860336304,-0.23740328848362,0.424813508987427,0.772461295127869,-0.0374295972287655,0.633957862854004,0.456143170595169,-0.412308812141418,0.788628458976746,0.347713977098465,-0.788004815578461,0.508078157901764,0.493583381175995,-0.804481565952301,0.330431401729584,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.450285315513611,-0.862574934959412,-0.230667769908905,\n-0.432196706533432,-0.877966165542603,-0.205867424607277,0.733389377593994,-0.0344664603471756,0.678934574127197,0.746549785137177,0.0205342527478933,0.665012657642365,0.718032777309418,-0.160360962152481,0.677283763885498,0.746549785137177,0.0205342527478933,0.665012657642365,0.733389377593994,-0.0344664603471756,0.678934574127197,0.837971806526184,-0.0177910327911377,0.545423448085785,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.686445116996765,0.270512044429779,0.674993574619293,-0.596545398235321,0.216776832938194,0.772749245166779,-0.672767162322998,0.059370718896389,0.737468242645264,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.789937257766724,-0.089169554412365,0.606669545173645,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.501666784286499,-0.849441289901733,-0.163646027445793,0.499172002077103,-0.857490539550781,-0.124648600816727,0.494663387537003,-0.866621494293213,-0.0653853639960289,0.465027630329132,-0.875830411911011,-0.129113703966141,0.28289994597435,-0.924392461776733,-0.255863577127457,0.297710686922073,-0.932827949523926,-0.202978670597076,0.28289994597435,-0.924392461776733,-0.255863577127457,0.304112553596497,-0.921620965003967,-0.241102367639542,0.175545483827591,-0.61814421415329,-0.766212463378906,-0.355053901672363,-0.683800160884857,-0.637459099292755,-0.752854526042938,-0.165658488869667,-0.636998772621155,-0.550425469875336,0.323076784610748,-0.769839704036713,0.371378809213638,-0.592879414558411,-0.714543044567108,0.175545483827591,-0.61814421415329,-0.766212463378906,-0.550425469875336,0.323076784610748,-0.769839704036713,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.274789333343506,-0.803769111633301,-0.527679860591888,0.371378809213638,-0.592879414558411,-0.714543044567108,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.847938656806946,-0.0612146966159344,-0.526548087596893,0.810995221138,0.0803924724459648,-0.579503059387207,-0.260734766721725,-0.760901808738709,-0.594176650047302,-0.803069472312927,-0.0576225444674492,-0.593092858791351,\n0.28655207157135,0.762932240962982,-0.579501807689667,-0.264983803033829,-0.798545002937317,-0.540471494197845,0.851555109024048,0.0737949088215828,-0.519045412540436,0.294900387525558,0.804033398628235,-0.516298413276672,-0.838329255580902,-0.0461989641189575,-0.543203234672546,0.798945486545563,0.0567517168819904,-0.598719775676727,-0.25739848613739,-0.756804287433624,-0.600827217102051,-0.797584235668182,-0.0538384169340134,-0.600800156593323,0.260495960712433,0.757402241230011,-0.598735094070435,0.579808115959167,-0.470308184623718,-0.665306448936462,0.867282569408417,-0.217768251895905,-0.447658270597458,0.0163767393678427,0.894915819168091,-0.445934444665909,-0.303038567304611,0.683238506317139,-0.66434383392334,0.934951305389404,-0.173643231391907,-0.309376925230026,0.852502286434174,-0.25280287861824,-0.457526594400406,-0.023583659902215,0.889200866222382,-0.456908762454987,0.0738223046064377,0.948160707950592,-0.309097975492477,-0.492102652788162,-0.846493780612946,-0.203182756900787,-0.355053901672363,-0.683800160884857,-0.637459099292755,0.175545483827591,-0.61814421415329,-0.766212463378906,0.131819605827332,-0.987344026565552,-0.0881783813238144,0.131819605827332,-0.987344026565552,-0.0881783813238144,0.175545483827591,-0.61814421415329,-0.766212463378906,0.371378809213638,-0.592879414558411,-0.714543044567108,0.503014385700226,-0.864195764064789,-0.0119248116388917,-0.294909566640854,-0.954956710338593,-0.0329544395208359,0.503014385700226,-0.864195764064789,-0.0119248116388917,0.371378809213638,-0.592879414558411,-0.714543044567108,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.081024631857872,-0.948496878147125,-0.30624932050705,-0.260734766721725,-0.760901808738709,-0.594176650047302,0.810995221138,0.0803924724459648,-0.579503059387207,0.932336986064911,-0.159625917673111,-0.324449211359024,0.9972323179245,0.045465212315321,-0.0588272288441658,0.851555109024048,0.0737949088215828,-0.519045412540436,-0.264983803033829,-0.798545002937317,-0.540471494197845,-0.270147889852524,-0.960107445716858,-0.0722062140703201,\n-0.0602938197553158,-0.94219297170639,-0.329601436853409,-0.25739848613739,-0.756804287433624,-0.600827217102051,0.798945486545563,0.0567517168819904,-0.598719775676727,0.929458439350128,-0.182677119970322,-0.320524662733078,0.60779196023941,-0.794095873832703,-0.000789706071373075,0.606442928314209,-0.795126736164093,-0.000603582069743425,0.867282569408417,-0.217768251895905,-0.447658270597458,0.579808115959167,-0.470308184623718,-0.665306448936462,-0.155517369508743,-0.869324624538422,-0.469136536121368,-0.081024631857872,-0.948496878147125,-0.30624932050705,0.932336986064911,-0.159625917673111,-0.324449211359024,0.874620616436005,-0.089490108191967,-0.476476937532425,0.875138163566589,-0.110415413975716,-0.471106797456741,-0.116839110851288,-0.866200923919678,-0.485844105482101,-0.0602938197553158,-0.94219297170639,-0.329601436853409,0.929458439350128,-0.182677119970322,-0.320524662733078,-0.607791721820831,0.794096052646637,0.000804367766249925,-0.303038567304611,0.683238506317139,-0.66434383392334,0.0163767393678427,0.894915819168091,-0.445934444665909,-0.606431722640991,0.795135319232941,0.000614068820141256,0.0626835599541664,0.945166885852814,-0.320515751838684,0.260495960712433,0.757402241230011,-0.598735094070435,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.997315406799316,-0.0089312419295311,-0.0726793855428696,-0.838329255580902,-0.0461989641189575,-0.543203234672546,0.294900387525558,0.804033398628235,-0.516298413276672,0.305213630199432,0.950488805770874,-0.0584435798227787,0.085883192718029,0.94199538230896,-0.324451416730881,0.28655207157135,0.762932240962982,-0.579501807689667,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.998532772064209,-0.0460729710757732,-0.0284526403993368,-0.847938656806946,-0.0612146966159344,-0.526548087596893,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.707223176956177,0.706861138343811,-0.0135142952203751,-0.921080887317657,0.378857254981995,-0.089873306453228,\n-0.707223176956177,0.706861138343811,-0.0135142952203751,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.550425469875336,0.323076784610748,-0.769839704036713,-0.947175621986389,-0.247870579361916,-0.203515365719795,-0.921080887317657,0.378857254981995,-0.089873306453228,-0.550425469875336,0.323076784610748,-0.769839704036713,-0.752854526042938,-0.165658488869667,-0.636998772621155,0.118536964058876,0.87408572435379,-0.471087127923965,0.0626835599541664,0.945166885852814,-0.320515751838684,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.867111802101135,0.110181644558907,-0.485774785280228,0.138788193464279,0.868160247802734,-0.476482480764389,0.085883192718029,0.94199538230896,-0.324451416730881,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.881957292556763,0.0677927955985069,-0.466428458690643,-0.947175621986389,-0.247870579361916,-0.203515365719795,-0.752854526042938,-0.165658488869667,-0.636998772621155,-0.355053901672363,-0.683800160884857,-0.637459099292755,-0.492102652788162,-0.846493780612946,-0.203182756900787,-0.260734766721725,-0.760901808738709,-0.594176650047302,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.847938656806946,-0.0612146966159344,-0.526548087596893,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.847938656806946,-0.0612146966159344,-0.526548087596893,-0.998532772064209,-0.0460729710757732,-0.0284526403993368,-0.081024631857872,-0.948496878147125,-0.30624932050705,-0.294909566640854,-0.954956710338593,-0.0329544395208359,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.260734766721725,-0.760901808738709,-0.594176650047302,0.932336986064911,-0.159625917673111,-0.324449211359024,0.810995221138,0.0803924724459648,-0.579503059387207,0.851555109024048,0.0737949088215828,-0.519045412540436,0.9972323179245,0.045465212315321,-0.0588272288441658,0.085883192718029,0.94199538230896,-0.324451416730881,0.305213630199432,0.950488805770874,-0.0584435798227787,\n0.294900387525558,0.804033398628235,-0.516298413276672,0.28655207157135,0.762932240962982,-0.579501807689667,0.28655207157135,0.762932240962982,-0.579501807689667,0.294900387525558,0.804033398628235,-0.516298413276672,0.851555109024048,0.0737949088215828,-0.519045412540436,0.810995221138,0.0803924724459648,-0.579503059387207,-0.25739848613739,-0.756804287433624,-0.600827217102051,-0.264983803033829,-0.798545002937317,-0.540471494197845,-0.838329255580902,-0.0461989641189575,-0.543203234672546,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.838329255580902,-0.0461989641189575,-0.543203234672546,-0.997315406799316,-0.0089312419295311,-0.0726793855428696,-0.0602938197553158,-0.94219297170639,-0.329601436853409,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.264983803033829,-0.798545002937317,-0.540471494197845,-0.25739848613739,-0.756804287433624,-0.600827217102051,0.929458439350128,-0.182677119970322,-0.320524662733078,0.798945486545563,0.0567517168819904,-0.598719775676727,0.867282569408417,-0.217768251895905,-0.447658270597458,0.99813711643219,0.0131128579378128,-0.0595852471888065,0.0626835599541664,0.945166885852814,-0.320515751838684,0.271794468164444,0.960521817207336,-0.0593764595687389,0.0163767393678427,0.894915819168091,-0.445934444665909,0.260495960712433,0.757402241230011,-0.598735094070435,0.260495960712433,0.757402241230011,-0.598735094070435,0.0163767393678427,0.894915819168091,-0.445934444665909,0.867282569408417,-0.217768251895905,-0.447658270597458,0.798945486545563,0.0567517168819904,-0.598719775676727,0.852502286434174,-0.25280287861824,-0.457526594400406,0.579808115959167,-0.470308184623718,-0.665306448936462,-0.303038567304611,0.683238506317139,-0.66434383392334,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.303038567304611,0.683238506317139,-0.66434383392334,-0.607791721820831,0.794096052646637,0.000804367766249925,\n-0.608507454395294,0.793548166751862,0.000247186981141567,0.852502286434174,-0.25280287861824,-0.457526594400406,0.608506679534912,-0.793548703193665,-0.000247475487412885,0.60779196023941,-0.794095873832703,-0.000789706071373075,0.579808115959167,-0.470308184623718,-0.665306448936462,0.867282569408417,-0.217768251895905,-0.447658270597458,0.606442928314209,-0.795126736164093,-0.000603582069743425,0.99813711643219,0.0131128579378128,-0.0595852471888065,0.852502286434174,-0.25280287861824,-0.457526594400406,0.934951305389404,-0.173643231391907,-0.309376925230026,0.608506679534912,-0.793548703193665,-0.000247475487412885,0.0738223046064377,0.948160707950592,-0.309097975492477,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.608507454395294,0.793548166751862,0.000247186981141567,0.0163767393678427,0.894915819168091,-0.445934444665909,0.271794468164444,0.960521817207336,-0.0593764595687389,-0.606431722640991,0.795135319232941,0.000614068820141256,-0.998532772064209,-0.0460729710757732,-0.0284526403993368,-0.881957292556763,0.0677927955985069,-0.466428458690643,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.294909566640854,-0.954956710338593,-0.0329544395208359,-0.081024631857872,-0.948496878147125,-0.30624932050705,-0.155517369508743,-0.869324624538422,-0.469136536121368,0.9972323179245,0.045465212315321,-0.0588272288441658,0.874620616436005,-0.089490108191967,-0.476476937532425,0.932336986064911,-0.159625917673111,-0.324449211359024,0.305213630199432,0.950488805770874,-0.0584435798227787,0.085883192718029,0.94199538230896,-0.324451416730881,0.138788193464279,0.868160247802734,-0.476482480764389,-0.997315406799316,-0.0089312419295311,-0.0726793855428696,-0.867111802101135,0.110181644558907,-0.485774785280228,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.0602938197553158,-0.94219297170639,-0.329601436853409,-0.116839110851288,-0.866200923919678,-0.485844105482101,0.99813711643219,0.0131128579378128,-0.0595852471888065,0.875138163566589,-0.110415413975716,-0.471106797456741,\n0.929458439350128,-0.182677119970322,-0.320524662733078,0.271794468164444,0.960521817207336,-0.0593764595687389,0.0626835599541664,0.945166885852814,-0.320515751838684,0.118536964058876,0.87408572435379,-0.471087127923965,-0.76156884431839,0.476596713066101,-0.439167976379395,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.898221433162689,0.418351918458939,0.134833067655563,-0.704140067100525,0.675374805927277,-0.219215899705887,-0.704140067100525,0.675374805927277,-0.219215899705887,-0.898221433162689,0.418351918458939,0.134833067655563,-0.654416978359222,0.561667382717133,0.506229400634766,-0.521776258945465,0.845166325569153,0.115945540368557,-0.521776258945465,0.845166325569153,0.115945540368557,-0.654416978359222,0.561667382717133,0.506229400634766,-0.214515462517738,0.588520050048828,0.779504477977753,-0.117615908384323,0.926379323005676,0.357753843069077,-0.952755749225616,-0.0757631734013557,0.294136703014374,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.926552474498749,0.207176357507706,0.313972115516663,-0.910864353179932,0.099295899271965,0.400582611560822,-0.910864353179932,0.099295899271965,0.400582611560822,-0.926552474498749,0.207176357507706,0.313972115516663,-0.666352272033691,0.406804174184799,0.624888002872467,-0.658345222473145,0.235575124621391,0.714902698993683,-0.658345222473145,0.235575124621391,0.714902698993683,-0.666352272033691,0.406804174184799,0.624888002872467,-0.245068669319153,0.507136404514313,0.826289296150208,-0.250782161951065,0.269851088523865,0.929671287536621,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.962221920490265,0.251950860023499,-0.103197500109673,\n-0.912259876728058,0.390434086322784,0.123867250978947,-0.926552474498749,0.207176357507706,0.313972115516663,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.912259876728058,0.390434086322784,0.123867250978947,-0.660027086734772,0.561297416687012,0.499309033155441,-0.666352272033691,0.406804174184799,0.624888002872467,-0.926552474498749,0.207176357507706,0.313972115516663,-0.660027086734772,0.561297416687012,0.499309033155441,-0.249163046479225,0.650838494300842,0.717165946960449,-0.245068669319153,0.507136404514313,0.826289296150208,-0.666352272033691,0.406804174184799,0.624888002872467,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.76156884431839,0.476596713066101,-0.439167976379395,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.952755749225616,-0.0757631734013557,0.294136703014374,0.935190200805664,0.351279437541962,-0.044966459274292,0.898469209671021,-0.0272972695529461,0.438187032938004,0.912912726402283,-0.113555498421192,0.392040193080902,0.96645724773407,0.233678266406059,-0.106558986008167,0.804791152477264,0.576125502586365,0.142795473337173,0.761282086372375,0.311987817287445,0.568430483341217,0.898469209671021,-0.0272972695529461,0.438187032938004,0.935190200805664,0.351279437541962,-0.044966459274292,0.804791152477264,0.576125502586365,0.142795473337173,0.42239049077034,0.834542334079742,0.353730529546738,0.335851162672043,0.562229573726654,0.755712866783142,0.761282086372375,0.311987817287445,0.568430483341217,-0.117615908384323,0.926379323005676,0.357753843069077,-0.214515462517738,0.588520050048828,0.779504477977753,0.335851162672043,0.562229573726654,0.755712866783142,0.42239049077034,0.834542334079742,0.353730529546738,0.706884205341339,-0.28878253698349,0.645692944526672,0.630046010017395,0.0436474196612835,0.775330185890198,0.717575788497925,0.177658915519714,0.673440635204315,\n0.870358824729919,-0.102341800928116,0.481665521860123,0.630046010017395,0.0436474196612835,0.775330185890198,0.228427618741989,0.282149314880371,0.931779265403748,0.267084360122681,0.455141335725784,0.849418818950653,0.717575788497925,0.177658915519714,0.673440635204315,0.228427618741989,0.282149314880371,0.931779265403748,-0.250782161951065,0.269851088523865,0.929671287536621,-0.245068669319153,0.507136404514313,0.826289296150208,0.267084360122681,0.455141335725784,0.849418818950653,0.961451351642609,0.0904497504234314,0.259673148393631,0.90546315908432,0.186478093266487,0.381264179944992,0.819937825202942,-0.00659102853387594,0.572414636611938,0.845280110836029,-0.0974530875682831,0.525361180305481,0.717575788497925,0.177658915519714,0.673440635204315,0.791133522987366,0.342469990253448,0.506776094436646,0.962417662143707,0.0915835499763489,0.255665153264999,0.870358824729919,-0.102341800928116,0.481665521860123,0.267084360122681,0.455141335725784,0.849418818950653,0.301605939865112,0.609322726726532,0.733321011066437,0.791133522987366,0.342469990253448,0.506776094436646,0.717575788497925,0.177658915519714,0.673440635204315,-0.245068669319153,0.507136404514313,0.826289296150208,-0.249163046479225,0.650838494300842,0.717165946960449,0.301605939865112,0.609322726726532,0.733321011066437,0.267084360122681,0.455141335725784,0.849418818950653,0.982547283172607,-0.0194747932255268,0.184990763664246,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.942662239074707,-0.0168874561786652,0.333320707082748,0.947061896324158,0.0981694161891937,0.305673807859421,0.942662239074707,-0.0168874561786652,0.333320707082748,0.982214033603668,0.146134316921234,-0.117899708449841,0.96645724773407,0.233678266406059,-0.106558986008167,0.912912726402283,-0.113555498421192,0.392040193080902,0.698522806167603,-0.278597444295883,0.659127771854401,0.706884205341339,-0.28878253698349,0.645692944526672,0.870358824729919,-0.102341800928116,0.481665521860123,0.845280110836029,-0.0974530875682831,0.525361180305481,0.870358824729919,-0.102341800928116,0.481665521860123,\n0.962417662143707,0.0915835499763489,0.255665153264999,0.961451351642609,0.0904497504234314,0.259673148393631,0.845280110836029,-0.0974530875682831,0.525361180305481,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.952755749225616,-0.0757631734013557,0.294136703014374,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.910864353179932,0.099295899271965,0.400582611560822,-0.898221433162689,0.418351918458939,0.134833067655563,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.952755749225616,-0.0757631734013557,0.294136703014374,-0.658345222473145,0.235575124621391,0.714902698993683,-0.654416978359222,0.561667382717133,0.506229400634766,-0.898221433162689,0.418351918458939,0.134833067655563,-0.910864353179932,0.099295899271965,0.400582611560822,-0.250782161951065,0.269851088523865,0.929671287536621,-0.214515462517738,0.588520050048828,0.779504477977753,-0.654416978359222,0.561667382717133,0.506229400634766,-0.658345222473145,0.235575124621391,0.714902698993683,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.952685832977295,0.144979551434517,0.26715275645256,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.958563566207886,0.284186273813248,-0.0198515504598618,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.952685832977295,0.144979551434517,0.26715275645256,0.698522806167603,-0.278597444295883,0.659127771854401,0.912912726402283,-0.113555498421192,0.392040193080902,0.898469209671021,-0.0272972695529461,0.438187032938004,0.706884205341339,-0.28878253698349,0.645692944526672,0.706884205341339,-0.28878253698349,0.645692944526672,0.898469209671021,-0.0272972695529461,0.438187032938004,0.761282086372375,0.311987817287445,0.568430483341217,0.630046010017395,0.0436474196612835,0.775330185890198,0.630046010017395,0.0436474196612835,0.775330185890198,0.761282086372375,0.311987817287445,0.568430483341217,\n0.335851162672043,0.562229573726654,0.755712866783142,0.228427618741989,0.282149314880371,0.931779265403748,0.228427618741989,0.282149314880371,0.931779265403748,0.335851162672043,0.562229573726654,0.755712866783142,-0.214515462517738,0.588520050048828,0.779504477977753,-0.250782161951065,0.269851088523865,0.929671287536621,0.912912726402283,-0.113555498421192,0.392040193080902,0.698522806167603,-0.278597444295883,0.659127771854401,0.819937825202942,-0.00659102853387594,0.572414636611938,0.942662239074707,-0.0168874561786652,0.333320707082748,0.942662239074707,-0.0168874561786652,0.333320707082748,0.819937825202942,-0.00659102853387594,0.572414636611938,0.90546315908432,0.186478093266487,0.381264179944992,0.947061896324158,0.0981694161891937,0.305673807859421,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.929124534130096,0.342707455158234,-0.138849511742592,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.707790970802307,0.336063861846924,0.621363818645477,-0.544086277484894,0.801831424236298,0.247055679559708,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.707790970802307,0.336063861846924,0.621363818645477,-0.297837793827057,0.470342427492142,0.830704927444458,-0.19909605383873,0.874440908432007,0.442395597696304,-0.544086277484894,0.801831424236298,0.247055679559708,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.619584679603577,0.676743805408478,0.397658914327621,-0.828120172023773,0.556849658489227,0.0643076002597809,\n-0.432487457990646,0.89841216802597,0.0762243419885635,-0.147313103079796,0.957895338535309,0.246445491909981,-0.245548605918884,0.755104780197144,0.607883751392365,-0.619584679603577,0.676743805408478,0.397658914327621,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.912259876728058,0.390434086322784,0.123867250978947,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.619584679603577,0.676743805408478,0.397658914327621,-0.660027086734772,0.561297416687012,0.499309033155441,-0.912259876728058,0.390434086322784,0.123867250978947,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.245548605918884,0.755104780197144,0.607883751392365,-0.249163046479225,0.650838494300842,0.717165946960449,-0.660027086734772,0.561297416687012,0.499309033155441,-0.619584679603577,0.676743805408478,0.397658914327621,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.929124534130096,0.342707455158234,-0.138849511742592,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.866115570068359,0.494783669710159,-0.0709429755806923,0.87403529882431,-0.400045335292816,0.275728017091751,0.975419282913208,0.160561114549637,0.150921493768692,0.949690341949463,0.234604075551033,0.207482814788818,0.854402661323547,-0.324486196041107,0.405838400125504,0.854402661323547,-0.324486196041107,0.405838400125504,0.949690341949463,0.234604075551033,0.207482814788818,0.757872521877289,0.513580203056335,0.402324080467224,0.717831492424011,-0.054539829492569,0.694077372550964,0.717831492424011,-0.054539829492569,0.694077372550964,0.757872521877289,0.513580203056335,0.402324080467224,0.302653968334198,0.791418790817261,0.531090319156647,0.249009624123573,0.325980126857758,0.911992967128754,0.249009624123573,0.325980126857758,0.911992967128754,0.302653968334198,0.791418790817261,0.531090319156647,\n-0.19909605383873,0.874440908432007,0.442395597696304,-0.297837793827057,0.470342427492142,0.830704927444458,0.832433819770813,0.553277313709259,0.030629251152277,0.924078166484833,0.34885248541832,0.156145676970482,0.746821939945221,0.530121684074402,0.401531994342804,0.654044508934021,0.736575365066528,0.172286093235016,0.654044508934021,0.736575365066528,0.172286093235016,0.746821939945221,0.530121684074402,0.401531994342804,0.281799226999283,0.728858947753906,0.623982191085815,0.284114360809326,0.91420567035675,0.288975805044174,0.281799226999283,0.728858947753906,0.623982191085815,-0.245548605918884,0.755104780197144,0.607883751392365,-0.147313103079796,0.957895338535309,0.246445491909981,0.284114360809326,0.91420567035675,0.288975805044174,0.894311189651489,0.387113749980927,0.224389031529427,0.90546315908432,0.186478093266487,0.381264179944992,0.961451351642609,0.0904497504234314,0.259673148393631,0.923258781433105,0.354574829339981,0.147884577512741,0.924078166484833,0.34885248541832,0.156145676970482,0.962417662143707,0.0915835499763489,0.255665153264999,0.791133522987366,0.342469990253448,0.506776094436646,0.746821939945221,0.530121684074402,0.401531994342804,0.746821939945221,0.530121684074402,0.401531994342804,0.791133522987366,0.342469990253448,0.506776094436646,0.301605939865112,0.609322726726532,0.733321011066437,0.281799226999283,0.728858947753906,0.623982191085815,0.301605939865112,0.609322726726532,0.733321011066437,-0.249163046479225,0.650838494300842,0.717165946960449,-0.245548605918884,0.755104780197144,0.607883751392365,0.281799226999283,0.728858947753906,0.623982191085815,0.947061896324158,0.0981694161891937,0.305673807859421,0.96901547908783,0.136607244610786,0.205785036087036,0.951126515865326,-0.290161103010178,0.105663925409317,0.982547283172607,-0.0194747932255268,0.184990763664246,0.96901547908783,0.136607244610786,0.205785036087036,0.975419282913208,0.160561114549637,0.150921493768692,0.87403529882431,-0.400045335292816,0.275728017091751,0.900647282600403,-0.388538032770157,0.194609194993973,\n0.867212951183319,0.49559211730957,0.0482721738517284,0.923258781433105,0.354574829339981,0.147884577512741,0.924078166484833,0.34885248541832,0.156145676970482,0.832433819770813,0.553277313709259,0.030629251152277,0.923258781433105,0.354574829339981,0.147884577512741,0.961451351642609,0.0904497504234314,0.259673148393631,0.962417662143707,0.0915835499763489,0.255665153264999,0.924078166484833,0.34885248541832,0.156145676970482,-0.929124534130096,0.342707455158234,-0.138849511742592,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.544086277484894,0.801831424236298,0.247055679559708,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.544086277484894,0.801831424236298,0.247055679559708,-0.19909605383873,0.874440908432007,0.442395597696304,-0.147313103079796,0.957895338535309,0.246445491909981,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.929124534130096,0.342707455158234,-0.138849511742592,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.958563566207886,0.284186273813248,-0.0198515504598618,0.832433819770813,0.553277313709259,0.030629251152277,0.949690341949463,0.234604075551033,0.207482814788818,0.975419282913208,0.160561114549637,0.150921493768692,0.867212951183319,0.49559211730957,0.0482721738517284,0.654044508934021,0.736575365066528,0.172286093235016,0.757872521877289,0.513580203056335,0.402324080467224,\n0.949690341949463,0.234604075551033,0.207482814788818,0.832433819770813,0.553277313709259,0.030629251152277,0.284114360809326,0.91420567035675,0.288975805044174,0.302653968334198,0.791418790817261,0.531090319156647,0.757872521877289,0.513580203056335,0.402324080467224,0.654044508934021,0.736575365066528,0.172286093235016,-0.19909605383873,0.874440908432007,0.442395597696304,0.302653968334198,0.791418790817261,0.531090319156647,0.284114360809326,0.91420567035675,0.288975805044174,-0.147313103079796,0.957895338535309,0.246445491909981,0.894311189651489,0.387113749980927,0.224389031529427,0.867212951183319,0.49559211730957,0.0482721738517284,0.975419282913208,0.160561114549637,0.150921493768692,0.96901547908783,0.136607244610786,0.205785036087036,0.90546315908432,0.186478093266487,0.381264179944992,0.894311189651489,0.387113749980927,0.224389031529427,0.96901547908783,0.136607244610786,0.205785036087036,0.947061896324158,0.0981694161891937,0.305673807859421,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.958563566207886,0.284186273813248,-0.0198515504598618,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.958563566207886,0.284186273813248,-0.0198515504598618,0.895804822444916,0.195413783192635,-0.399183094501495,0.886481404304504,0.177040234208107,-0.427559942007065,0.964801907539368,-0.255219370126724,0.0634067207574844,0.977060616016388,-0.163682118058205,0.136237412691116,0.901520609855652,-0.411151170730591,-0.134964123368263,0.964801907539368,-0.255219370126724,0.0634067207574844,0.886481404304504,0.177040234208107,-0.427559942007065,0.787978410720825,0.121628329157829,-0.603569865226746,0.666584491729736,-0.599533498287201,-0.44297257065773,0.901520609855652,-0.411151170730591,-0.134964123368263,0.787978410720825,0.121628329157829,-0.603569865226746,0.571970582008362,0.0312800444662571,-0.819677472114563,\n0.241922825574875,-0.699652969837189,-0.672279000282288,0.666584491729736,-0.599533498287201,-0.44297257065773,0.571970582008362,0.0312800444662571,-0.819677472114563,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.977060616016388,-0.163682118058205,0.136237412691116,0.832494258880615,-0.151082515716553,-0.53303599357605,0.693842947483063,0.221262499690056,-0.685291826725006,0.895804822444916,0.195413783192635,-0.399183094501495,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.533322870731354,0.362958401441574,-0.764086365699768,-0.536711573600769,0.454791516065598,-0.710707664489746,-0.416003495454788,0.214769661426544,-0.883637428283691,-0.533322870731354,0.362958401441574,-0.764086365699768,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.121472828090191,0.0532774887979031,-0.991163909435272,-0.416003495454788,0.214769661426544,-0.883637428283691,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.351745277643204,-0.619295239448547,-0.701960563659668,0.266431361436844,-0.0175890251994133,-0.963693380355835,-0.121472828090191,0.0532774887979031,-0.991163909435272,-0.351745277643204,-0.619295239448547,-0.701960563659668,0.241922825574875,-0.699652969837189,-0.672279000282288,-0.185644939541817,0.470028698444366,-0.862907290458679,-0.540148377418518,0.0994914695620537,-0.83566814661026,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.536711573600769,0.454791516065598,-0.710707664489746,0.964801907539368,-0.255219370126724,0.0634067207574844,0.552583754062653,-0.801110565662384,0.229941368103027,0.598017036914825,-0.77135705947876,0.217678412795067,0.977060616016388,-0.163682118058205,0.136237412691116,0.901520609855652,-0.411151170730591,-0.134964123368263,0.446152597665787,-0.869332015514374,0.212625667452812,0.552583754062653,-0.801110565662384,0.229941368103027,0.964801907539368,-0.255219370126724,0.0634067207574844,0.666584491729736,-0.599533498287201,-0.44297257065773,\n0.292398184537888,-0.949960947036743,0.10989760607481,0.446152597665787,-0.869332015514374,0.212625667452812,0.901520609855652,-0.411151170730591,-0.134964123368263,0.0585855022072792,-0.997730076313019,-0.0332028940320015,0.292398184537888,-0.949960947036743,0.10989760607481,0.666584491729736,-0.599533498287201,-0.44297257065773,0.241922825574875,-0.699652969837189,-0.672279000282288,0.356895834207535,-0.932965636253357,0.0469100996851921,0.682462096214294,-0.715959489345551,-0.147131055593491,0.977060616016388,-0.163682118058205,0.136237412691116,0.598017036914825,-0.77135705947876,0.217678412795067,-0.704459130764008,-0.709129512310028,0.0295414477586746,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.351745277643204,-0.619295239448547,-0.701960563659668,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.270284593105316,-0.962110757827759,-0.0359042175114155,-0.351745277643204,-0.619295239448547,-0.701960563659668,-0.270284593105316,-0.962110757827759,-0.0359042175114155,0.0585855022072792,-0.997730076313019,-0.0332028940320015,0.241922825574875,-0.699652969837189,-0.672279000282288,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.456256777048111,-0.889221489429474,-0.0333887115120888,-0.704459130764008,-0.709129512310028,0.0295414477586746,0.895804822444916,0.195413783192635,-0.399183094501495,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.0356711931526661,0.684221088886261,-0.728401660919189,0.886481404304504,0.177040234208107,-0.427559942007065,0.787978410720825,0.121628329157829,-0.603569865226746,0.886481404304504,0.177040234208107,-0.427559942007065,\n-0.0356711931526661,0.684221088886261,-0.728401660919189,-0.0853337571024895,0.746294736862183,-0.660122990608215,0.571970582008362,0.0312800444662571,-0.819677472114563,0.787978410720825,0.121628329157829,-0.603569865226746,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.0719253867864609,0.846214473247528,-0.527965664863586,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.571970582008362,0.0312800444662571,-0.819677472114563,-0.0719253867864609,0.846214473247528,-0.527965664863586,0.0788120701909065,0.901525735855103,-0.42548793554306,0.777539789676666,-0.479580610990524,-0.406736135482788,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.207446113228798,0.0645331293344498,-0.976115584373474,0.832494258880615,-0.151082515716553,-0.53303599357605,0.693842947483063,0.221262499690056,-0.685291826725006,-0.13019323348999,0.440476208925247,-0.88827383518219,-0.0514890588819981,0.630368947982788,-0.774586260318756,0.895804822444916,0.195413783192635,-0.399183094501495,-0.533322870731354,0.362958401441574,-0.764086365699768,0.541287243366241,0.601404964923859,-0.587639510631561,0.570469558238983,0.551836013793945,-0.608310341835022,-0.536711573600769,0.454791516065598,-0.710707664489746,-0.416003495454788,0.214769661426544,-0.883637428283691,0.492161780595779,0.702208399772644,-0.514470756053925,0.541287243366241,0.601404964923859,-0.587639510631561,-0.533322870731354,0.362958401441574,-0.764086365699768,-0.121472828090191,0.0532774887979031,-0.991163909435272,0.315746545791626,0.845299899578094,-0.431012988090515,0.492161780595779,0.702208399772644,-0.514470756053925,-0.416003495454788,0.214769661426544,-0.883637428283691,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.0788120701909065,0.901525735855103,-0.42548793554306,0.315746545791626,0.845299899578094,-0.431012988090515,-0.121472828090191,0.0532774887979031,-0.991163909435272,-0.536711573600769,0.454791516065598,-0.710707664489746,0.570469558238983,0.551836013793945,-0.608310341835022,0.622039020061493,0.415303707122803,-0.663769721984863,\n-0.185644939541817,0.470028698444366,-0.862907290458679,-0.540148377418518,0.0994914695620537,-0.83566814661026,-0.185644939541817,0.470028698444366,-0.862907290458679,0.622039020061493,0.415303707122803,-0.663769721984863,0.643028497695923,0.0408206060528755,-0.764753580093384,-0.540148377418518,0.0994914695620537,-0.83566814661026,0.643028497695923,0.0408206060528755,-0.764753580093384,0.564797043800354,-0.561121165752411,-0.605101108551025,-0.639358460903168,-0.36973437666893,-0.674178957939148,0.598017036914825,-0.77135705947876,0.217678412795067,0.552583754062653,-0.801110565662384,0.229941368103027,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.503399014472961,-0.851141691207886,0.148819476366043,0.446152597665787,-0.869332015514374,0.212625667452812,-0.599539399147034,-0.652060031890869,0.464079976081848,-0.549799084663391,-0.796860456466675,0.250468283891678,0.552583754062653,-0.801110565662384,0.229941368103027,0.292398184537888,-0.949960947036743,0.10989760607481,-0.502160012722015,-0.455851703882217,0.734870433807373,-0.599539399147034,-0.652060031890869,0.464079976081848,0.446152597665787,-0.869332015514374,0.212625667452812,0.0585855022072792,-0.997730076313019,-0.0332028940320015,-0.272433489561081,-0.386231929063797,0.881251931190491,-0.502160012722015,-0.455851703882217,0.734870433807373,0.292398184537888,-0.949960947036743,0.10989760607481,0.777539789676666,-0.479580610990524,-0.406736135482788,0.682462096214294,-0.715959489345551,-0.147131055593491,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.33768093585968,-0.49410879611969,-0.801141738891602,0.356895834207535,-0.932965636253357,0.0469100996851921,0.598017036914825,-0.77135705947876,0.217678412795067,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.704459130764008,-0.709129512310028,0.0295414477586746,0.375612527132034,-0.880971193313599,0.287758558988571,0.426156967878342,-0.793524563312531,0.434406518936157,\n-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.626312673091888,-0.775286138057709,0.0816323086619377,0.426156967878342,-0.793524563312531,0.434406518936157,0.342554897069931,-0.64288204908371,0.685097694396973,-0.270284593105316,-0.962110757827759,-0.0359042175114155,-0.515369832515717,-0.855204343795776,0.0549499057233334,0.342554897069931,-0.64288204908371,0.685097694396973,0.0474529080092907,-0.46172571182251,0.885752558708191,-0.270284593105316,-0.962110757827759,-0.0359042175114155,0.0474529080092907,-0.46172571182251,0.885752558708191,-0.272433489561081,-0.386231929063797,0.881251931190491,0.0585855022072792,-0.997730076313019,-0.0332028940320015,-0.704459130764008,-0.709129512310028,0.0295414477586746,-0.456256777048111,-0.889221489429474,-0.0333887115120888,0.376423925161362,-0.91814798116684,0.12373098731041,0.375612527132034,-0.880971193313599,0.287758558988571,-0.456256777048111,-0.889221489429474,-0.0333887115120888,-0.699954152107239,-0.637360692024231,-0.322235196828842,0.438194841146469,-0.882847785949707,-0.169011816382408,0.376423925161362,-0.91814798116684,0.12373098731041,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.639358460903168,-0.36973437666893,-0.674178957939148,0.564797043800354,-0.561121165752411,-0.605101108551025,0.438194841146469,-0.882847785949707,-0.169011816382408,0.832494258880615,-0.151082515716553,-0.53303599357605,-0.207446113228798,0.0645331293344498,-0.976115584373474,-0.13019323348999,0.440476208925247,-0.88827383518219,0.693842947483063,0.221262499690056,-0.685291826725006,0.682462096214294,-0.715959489345551,-0.147131055593491,0.356895834207535,-0.932965636253357,0.0469100996851921,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.76156884431839,0.476596713066101,-0.439167976379395,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.0356711931526661,0.684221088886261,-0.728401660919189,-0.739788293838501,0.545380115509033,-0.394047945737839,\n-0.704140067100525,0.675374805927277,-0.219215899705887,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.0356711931526661,0.684221088886261,-0.728401660919189,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.704140067100525,0.675374805927277,-0.219215899705887,-0.521776258945465,0.845166325569153,0.115945540368557,-0.0719253867864609,0.846214473247528,-0.527965664863586,-0.521776258945465,0.845166325569153,0.115945540368557,-0.117615908384323,0.926379323005676,0.357753843069077,0.0788120701909065,0.901525735855103,-0.42548793554306,-0.0719253867864609,0.846214473247528,-0.527965664863586,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.905734241008759,-0.0415813475847244,-0.421801447868347,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.207446113228798,0.0645331293344498,-0.976115584373474,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.76156884431839,0.476596713066101,-0.439167976379395,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.13019323348999,0.440476208925247,-0.88827383518219,0.541287243366241,0.601404964923859,-0.587639510631561,0.935190200805664,0.351279437541962,-0.044966459274292,0.96645724773407,0.233678266406059,-0.106558986008167,0.570469558238983,0.551836013793945,-0.608310341835022,0.492161780595779,0.702208399772644,-0.514470756053925,0.804791152477264,0.576125502586365,0.142795473337173,0.935190200805664,0.351279437541962,-0.044966459274292,0.541287243366241,0.601404964923859,-0.587639510631561,0.315746545791626,0.845299899578094,-0.431012988090515,0.42239049077034,0.834542334079742,0.353730529546738,0.804791152477264,0.576125502586365,0.142795473337173,0.492161780595779,0.702208399772644,-0.514470756053925,0.0788120701909065,0.901525735855103,-0.42548793554306,-0.117615908384323,0.926379323005676,0.357753843069077,0.42239049077034,0.834542334079742,0.353730529546738,0.315746545791626,0.845299899578094,-0.431012988090515,0.570469558238983,0.551836013793945,-0.608310341835022,0.96645724773407,0.233678266406059,-0.106558986008167,0.982214033603668,0.146134316921234,-0.117899708449841,\n0.622039020061493,0.415303707122803,-0.663769721984863,0.622039020061493,0.415303707122803,-0.663769721984863,0.982214033603668,0.146134316921234,-0.117899708449841,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.643028497695923,0.0408206060528755,-0.764753580093384,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.972557067871094,-0.221615329384804,-0.0708476528525352,0.564797043800354,-0.561121165752411,-0.605101108551025,0.643028497695923,0.0408206060528755,-0.764753580093384,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.599539399147034,-0.652060031890869,0.464079976081848,-0.707790970802307,0.336063861846924,0.621363818645477,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.599539399147034,-0.652060031890869,0.464079976081848,-0.502160012722015,-0.455851703882217,0.734870433807373,-0.272433489561081,-0.386231929063797,0.881251931190491,-0.297837793827057,0.470342427492142,0.830704927444458,-0.707790970802307,0.336063861846924,0.621363818645477,-0.502160012722015,-0.455851703882217,0.734870433807373,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.905734241008759,-0.0415813475847244,-0.421801447868347,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.492518663406372,-0.867294549942017,-0.0722879022359848,0.375612527132034,-0.880971193313599,0.287758558988571,0.87403529882431,-0.400045335292816,0.275728017091751,0.854402661323547,-0.324486196041107,0.405838400125504,0.426156967878342,-0.793524563312531,0.434406518936157,\n0.854402661323547,-0.324486196041107,0.405838400125504,0.717831492424011,-0.054539829492569,0.694077372550964,0.342554897069931,-0.64288204908371,0.685097694396973,0.426156967878342,-0.793524563312531,0.434406518936157,0.342554897069931,-0.64288204908371,0.685097694396973,0.717831492424011,-0.054539829492569,0.694077372550964,0.249009624123573,0.325980126857758,0.911992967128754,0.0474529080092907,-0.46172571182251,0.885752558708191,0.0474529080092907,-0.46172571182251,0.885752558708191,0.249009624123573,0.325980126857758,0.911992967128754,-0.297837793827057,0.470342427492142,0.830704927444458,-0.272433489561081,-0.386231929063797,0.881251931190491,0.900647282600403,-0.388538032770157,0.194609194993973,0.87403529882431,-0.400045335292816,0.275728017091751,0.375612527132034,-0.880971193313599,0.287758558988571,0.376423925161362,-0.91814798116684,0.12373098731041,0.951126515865326,-0.290161103010178,0.105663925409317,0.900647282600403,-0.388538032770157,0.194609194993973,0.376423925161362,-0.91814798116684,0.12373098731041,0.438194841146469,-0.882847785949707,-0.169011816382408,0.564797043800354,-0.561121165752411,-0.605101108551025,0.972557067871094,-0.221615329384804,-0.0708476528525352,0.951126515865326,-0.290161103010178,0.105663925409317,0.438194841146469,-0.882847785949707,-0.169011816382408,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.13019323348999,0.440476208925247,-0.88827383518219,-0.207446113228798,0.0645331293344498,-0.976115584373474,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.866115570068359,0.494783669710159,-0.0709429755806923,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.96112471818924,0.0701068416237831,0.267066061496735,\n-0.952685832977295,0.144979551434517,0.26715275645256,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.866115570068359,0.494783669710159,-0.0709429755806923,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.905734241008759,-0.0415813475847244,-0.421801447868347,0.698522806167603,-0.278597444295883,0.659127771854401,0.845280110836029,-0.0974530875682831,0.525361180305481,0.819937825202942,-0.00659102853387594,0.572414636611938,0.942662239074707,-0.0168874561786652,0.333320707082748,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.982214033603668,0.146134316921234,-0.117899708449841,0.982547283172607,-0.0194747932255268,0.184990763664246,0.972557067871094,-0.221615329384804,-0.0708476528525352,0.997464418411255,-0.00418182462453842,-0.0710434243083,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.905734241008759,-0.0415813475847244,-0.421801447868347,-0.964038372039795,-0.105999648571014,-0.243709042668343,0.867212951183319,0.49559211730957,0.0482721738517284,0.894311189651489,0.387113749980927,0.224389031529427,0.923258781433105,0.354574829339981,0.147884577512741,0.96901547908783,0.136607244610786,0.205785036087036,0.900647282600403,-0.388538032770157,0.194609194993973,0.951126515865326,-0.290161103010178,0.105663925409317,0.982547283172607,-0.0194747932255268,0.184990763664246,0.951126515865326,-0.290161103010178,0.105663925409317,0.972557067871094,-0.221615329384804,-0.0708476528525352,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.980031192302704,0.046081081032753,-0.19343064725399,\n-0.540148377418518,0.0994914695620537,-0.83566814661026,-0.639358460903168,-0.36973437666893,-0.674178957939148,-0.639358460903168,-0.36973437666893,-0.674178957939148,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.980031192302704,0.046081081032753,-0.19343064725399,0.682462096214294,-0.715959489345551,-0.147131055593491,0.777539789676666,-0.479580610990524,-0.406736135482788,0.977060616016388,-0.163682118058205,0.136237412691116,0.977060616016388,-0.163682118058205,0.136237412691116,0.777539789676666,-0.479580610990524,-0.406736135482788,0.832494258880615,-0.151082515716553,-0.53303599357605,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.952685832977295,0.144979551434517,0.26715275645256,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.866115570068359,0.494783669710159,-0.0709429755806923,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.771193385124207,0.619839727878571,-0.145118817687035,0.761568784713745,0.476597040891647,-0.439167678356171,0.739788413047791,0.545380234718323,-0.394047558307648,0.968085885047913,0.249149695038795,-0.0270941667258739,0.984016954898834,0.178066745400429,-0.00170838471967727,0.739788413047791,0.545380234718323,-0.394047558307648,0.704140186309814,0.675374627113342,-0.21921606361866,0.898221969604492,0.418350785970688,0.134832948446274,0.968085885047913,0.249149695038795,-0.0270941667258739,0.704140186309814,0.675374627113342,-0.21921606361866,0.521775901317596,0.845166563987732,0.11594570428133,0.654416561126709,0.56166809797287,0.506229162216187,0.898221969604492,0.418350785970688,0.134832948446274,0.521775901317596,0.845166563987732,0.11594570428133,0.117615856230259,0.926379323005676,0.357753992080688,0.214515626430511,0.588520109653473,0.779504418373108,0.654416561126709,0.56166809797287,0.506229162216187,0.952755630016327,-0.0757652819156647,0.294136583805084,0.910864531993866,0.0992951467633247,0.400582402944565,0.926552355289459,0.207176983356476,0.31397208571434,0.98439222574234,0.0485407151281834,0.169161930680275,0.910864531993866,0.0992951467633247,0.400582402944565,\n0.658345222473145,0.235576301813126,0.714902341365814,0.666352212429047,0.406804502010345,0.624887824058533,0.926552355289459,0.207176983356476,0.31397208571434,0.658345222473145,0.235576301813126,0.714902341365814,0.250782340764999,0.269851475954056,0.929671168327332,0.245068743824959,0.507136464118958,0.826289236545563,0.666352212429047,0.406804502010345,0.624887824058533,0.98439222574234,0.0485407151281834,0.169161930680275,0.962221920490265,0.251950919628143,-0.103197492659092,0.958588719367981,0.282198518514633,-0.0383618138730526,0.96112471818924,0.0701063796877861,0.267066121101379,0.962221920490265,0.251950919628143,-0.103197492659092,0.98439222574234,0.0485407151281834,0.169161930680275,0.926552355289459,0.207176983356476,0.31397208571434,0.912259817123413,0.390434235334396,0.123867250978947,0.912259817123413,0.390434235334396,0.123867250978947,0.926552355289459,0.207176983356476,0.31397208571434,0.666352212429047,0.406804502010345,0.624887824058533,0.660027027130127,0.561297476291656,0.499309003353119,0.660027027130127,0.561297476291656,0.499309003353119,0.666352212429047,0.406804502010345,0.624887824058533,0.245068743824959,0.507136464118958,0.826289236545563,0.249163061380386,0.650838553905487,0.717165887355804,0.980856955051422,0.194233074784279,-0.0138955730944872,0.80961799621582,0.346472293138504,-0.473788559436798,0.761568784713745,0.476597040891647,-0.439167678356171,0.984016954898834,0.178066745400429,-0.00170838471967727,0.924136519432068,-0.0825216323137283,0.373044043779373,0.952755630016327,-0.0757652819156647,0.294136583805084,0.98439222574234,0.0485407151281834,0.169161930680275,0.96112471818924,0.0701063796877861,0.267066121101379,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.804790914058685,0.576125860214233,0.142795518040657,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.898469209671021,-0.0272952988743782,0.43818724155426,\n-0.761282026767731,0.31198838353157,0.568430244922638,-0.804790914058685,0.576125860214233,0.142795518040657,-0.761282026767731,0.31198838353157,0.568430244922638,-0.335850954055786,0.562229692935944,0.755712807178497,-0.422390103340149,0.834542691707611,0.353730261325836,0.117615856230259,0.926379323005676,0.357753992080688,-0.422390103340149,0.834542691707611,0.353730261325836,-0.335850954055786,0.562229692935944,0.755712807178497,0.214515626430511,0.588520109653473,0.779504418373108,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.71757584810257,0.177658542990685,0.67344069480896,-0.63004606962204,0.043647576123476,0.775330185890198,-0.63004606962204,0.043647576123476,0.775330185890198,-0.71757584810257,0.177658542990685,0.67344069480896,-0.267084181308746,0.455141216516495,0.849418938159943,-0.22842738032341,0.282149195671082,0.931779384613037,-0.22842738032341,0.282149195671082,0.931779384613037,-0.267084181308746,0.455141216516495,0.849418938159943,0.245068743824959,0.507136464118958,0.826289236545563,0.250782340764999,0.269851475954056,0.929671168327332,-0.961451351642609,0.0904500335454941,0.259673148393631,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.819937765598297,-0.00659000594168901,0.572414755821228,-0.905462920665741,0.186479464173317,0.38126415014267,-0.71757584810257,0.177658542990685,0.67344069480896,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.791133582592011,0.342469930648804,0.506776034832001,-0.267084181308746,0.455141216516495,0.849418938159943,-0.71757584810257,0.177658542990685,0.67344069480896,-0.791133582592011,0.342469930648804,0.506776034832001,-0.30160591006279,0.609322607517242,0.733321130275726,0.245068743824959,0.507136464118958,0.826289236545563,-0.267084181308746,0.455141216516495,0.849418938159943,-0.30160591006279,0.609322607517242,0.733321130275726,0.249163061380386,0.650838553905487,0.717165887355804,-0.982547223567963,-0.0194754991680384,0.184990763664246,\n-0.947061836719513,0.0981702655553818,0.305673837661743,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.961451351642609,0.0904500335454941,0.259673148393631,-0.962417662143707,0.0915835052728653,0.255665123462677,0.924136519432068,-0.0825216323137283,0.373044043779373,0.984016954898834,0.178066745400429,-0.00170838471967727,0.968085885047913,0.249149695038795,-0.0270941667258739,0.952755630016327,-0.0757652819156647,0.294136583805084,0.910864531993866,0.0992951467633247,0.400582402944565,0.952755630016327,-0.0757652819156647,0.294136583805084,0.968085885047913,0.249149695038795,-0.0270941667258739,0.898221969604492,0.418350785970688,0.134832948446274,0.658345222473145,0.235576301813126,0.714902341365814,0.910864531993866,0.0992951467633247,0.400582402944565,0.898221969604492,0.418350785970688,0.134832948446274,0.654416561126709,0.56166809797287,0.506229162216187,0.250782340764999,0.269851475954056,0.929671168327332,0.658345222473145,0.235576301813126,0.714902341365814,0.654416561126709,0.56166809797287,0.506229162216187,0.214515626430511,0.588520109653473,0.779504418373108,0.984016954898834,0.178066745400429,-0.00170838471967727,0.924136519432068,-0.0825216323137283,0.373044043779373,0.952685952186584,0.144979014992714,0.267152786254883,0.980856955051422,0.194233074784279,-0.0138955730944872,0.980856955051422,0.194233074784279,-0.0138955730944872,0.952685952186584,0.144979014992714,0.267152786254883,\n0.932084560394287,0.354396849870682,0.074974812567234,0.958563983440399,0.284184783697128,-0.0198514685034752,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.63004606962204,0.043647576123476,0.775330185890198,-0.761282026767731,0.31198838353157,0.568430244922638,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.63004606962204,0.043647576123476,0.775330185890198,-0.22842738032341,0.282149195671082,0.931779384613037,-0.335850954055786,0.562229692935944,0.755712807178497,-0.761282026767731,0.31198838353157,0.568430244922638,-0.22842738032341,0.282149195671082,0.931779384613037,0.250782340764999,0.269851475954056,0.929671168327332,0.214515626430511,0.588520109653473,0.779504418373108,-0.335850954055786,0.562229692935944,0.755712807178497,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.819937765598297,-0.00659000594168901,0.572414755821228,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.905462920665741,0.186479464173317,0.38126415014267,-0.819937765598297,-0.00659000594168901,0.572414755821228,0.915838539600372,0.379799336194992,-0.13035449385643,0.97841340303421,-0.195419549942017,0.0672191828489304,0.971711337566376,-0.234630659222603,-0.0269353967159987,0.929125070571899,0.342706054449081,-0.138849601149559,0.97841340303421,-0.195419549942017,0.0672191828489304,0.915838539600372,0.379799336194992,-0.13035449385643,0.805536329746246,0.592336535453796,0.01577203348279,0.952633321285248,0.0169839523732662,0.303646683692932,0.952633321285248,0.0169839523732662,0.303646683692932,0.805536329746246,0.592336535453796,0.01577203348279,0.544086754322052,0.801831126213074,0.247055530548096,0.707790434360504,0.336065679788589,0.621363461017609,\n0.707790434360504,0.336065679788589,0.621363461017609,0.544086754322052,0.801831126213074,0.247055530548096,0.199096158146858,0.874440908432007,0.442395567893982,0.29783770442009,0.470342755317688,0.830704748630524,0.719026386737823,0.657702744007111,-0.224562168121338,0.872992157936096,0.465613692998886,-0.145219102501869,0.828120410442352,0.556849300861359,0.0643075108528137,0.613492965698242,0.780812084674835,-0.118147522211075,0.613492965698242,0.780812084674835,-0.118147522211075,0.828120410442352,0.556849300861359,0.0643075108528137,0.619584619998932,0.676743865013123,0.397658854722977,0.432487845420837,0.898411989212036,0.076224185526371,0.432487845420837,0.898411989212036,0.076224185526371,0.619584619998932,0.676743865013123,0.397658854722977,0.245548591017723,0.755104839801788,0.60788369178772,0.147313222289085,0.957895278930664,0.246445551514626,0.828120410442352,0.556849300861359,0.0643075108528137,0.872992157936096,0.465613692998886,-0.145219102501869,0.962221920490265,0.251950919628143,-0.103197492659092,0.912259817123413,0.390434235334396,0.123867250978947,0.619584619998932,0.676743865013123,0.397658854722977,0.828120410442352,0.556849300861359,0.0643075108528137,0.912259817123413,0.390434235334396,0.123867250978947,0.660027027130127,0.561297476291656,0.499309003353119,0.245548591017723,0.755104839801788,0.60788369178772,0.619584619998932,0.676743865013123,0.397658854722977,0.660027027130127,0.561297476291656,0.499309003353119,0.249163061380386,0.650838553905487,0.717165887355804,0.945276021957397,0.311139762401581,-0.0982102602720261,0.929125070571899,0.342706054449081,-0.138849601149559,0.971711337566376,-0.234630659222603,-0.0269353967159987,0.965696275234222,-0.217926412820816,-0.141204699873924,0.77119505405426,0.619837582111359,-0.14511901140213,0.866116344928741,0.494782358407974,-0.0709430351853371,0.872992157936096,0.465613692998886,-0.145219102501869,0.719026386737823,0.657702744007111,-0.224562168121338,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.854402720928192,-0.324486047029495,0.405838370323181,\n-0.949690282344818,0.234604343771935,0.20748282968998,-0.975419044494629,0.160562738776207,0.150921478867531,-0.854402720928192,-0.324486047029495,0.405838370323181,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.75787228345871,0.513580441474915,0.402324169874191,-0.949690282344818,0.234604343771935,0.20748282968998,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.24900957942009,0.325979948043823,0.911993026733398,-0.302653342485428,0.791418969631195,0.531090319156647,-0.75787228345871,0.513580441474915,0.402324169874191,-0.24900957942009,0.325979948043823,0.911993026733398,0.29783770442009,0.470342755317688,0.830704748630524,0.199096158146858,0.874440908432007,0.442395567893982,-0.302653342485428,0.791418969631195,0.531090319156647,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.654044389724731,0.736575484275818,0.172286108136177,-0.746822059154511,0.530121624469757,0.401531904935837,-0.924078285694122,0.348852246999741,0.156145602464676,-0.654044389724731,0.736575484275818,0.172286108136177,-0.284113943576813,0.914205729961395,0.288975954055786,-0.281799405813217,0.728858828544617,0.62398225069046,-0.746822059154511,0.530121624469757,0.401531904935837,-0.281799405813217,0.728858828544617,0.62398225069046,-0.284113943576813,0.914205729961395,0.288975954055786,0.147313222289085,0.957895278930664,0.246445551514626,0.245548591017723,0.755104839801788,0.60788369178772,-0.894310534000397,0.387115389108658,0.224388927221298,-0.92325884103775,0.354574739933014,0.14788456261158,-0.961451351642609,0.0904500335454941,0.259673148393631,-0.905462920665741,0.186479464173317,0.38126415014267,-0.924078285694122,0.348852246999741,0.156145602464676,-0.746822059154511,0.530121624469757,0.401531904935837,-0.791133582592011,0.342469930648804,0.506776034832001,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.746822059154511,0.530121624469757,0.401531904935837,-0.281799405813217,0.728858828544617,0.62398225069046,-0.30160591006279,0.609322607517242,0.733321130275726,-0.791133582592011,0.342469930648804,0.506776034832001,\n-0.30160591006279,0.609322607517242,0.733321130275726,-0.281799405813217,0.728858828544617,0.62398225069046,0.245548591017723,0.755104839801788,0.60788369178772,0.249163061380386,0.650838553905487,0.717165887355804,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.96901535987854,0.136607885360718,0.205785036087036,-0.96901535987854,0.136607885360718,0.205785036087036,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.975419044494629,0.160562738776207,0.150921478867531,-0.867211997509003,0.495593756437302,0.048272043466568,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.924078285694122,0.348852246999741,0.156145602464676,-0.92325884103775,0.354574739933014,0.14788456261158,-0.92325884103775,0.354574739933014,0.14788456261158,-0.924078285694122,0.348852246999741,0.156145602464676,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.961451351642609,0.0904500335454941,0.259673148393631,0.929125070571899,0.342706054449081,-0.138849601149559,0.77119505405426,0.619837582111359,-0.14511901140213,0.719026386737823,0.657702744007111,-0.224562168121338,0.915838539600372,0.379799336194992,-0.13035449385643,0.915838539600372,0.379799336194992,-0.13035449385643,0.719026386737823,0.657702744007111,-0.224562168121338,0.613492965698242,0.780812084674835,-0.118147522211075,0.805536329746246,0.592336535453796,0.01577203348279,0.805536329746246,0.592336535453796,0.01577203348279,0.613492965698242,0.780812084674835,-0.118147522211075,0.432487845420837,0.898411989212036,0.076224185526371,0.544086754322052,0.801831126213074,0.247055530548096,0.544086754322052,0.801831126213074,0.247055530548096,0.432487845420837,0.898411989212036,0.076224185526371,0.147313222289085,0.957895278930664,0.246445551514626,0.199096158146858,0.874440908432007,0.442395567893982,0.929125070571899,0.342706054449081,-0.138849601149559,0.945276021957397,0.311139762401581,-0.0982102602720261,\n0.861002922058105,0.508596777915955,-0.00179798470344394,0.77119505405426,0.619837582111359,-0.14511901140213,0.945276021957397,0.311139762401581,-0.0982102602720261,0.958563983440399,0.284184783697128,-0.0198514685034752,0.932084560394287,0.354396849870682,0.074974812567234,0.861002922058105,0.508596777915955,-0.00179798470344394,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.867211997509003,0.495593756437302,0.048272043466568,-0.975419044494629,0.160562738776207,0.150921478867531,-0.949690282344818,0.234604343771935,0.20748282968998,-0.654044389724731,0.736575484275818,0.172286108136177,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.949690282344818,0.234604343771935,0.20748282968998,-0.75787228345871,0.513580441474915,0.402324169874191,-0.284113943576813,0.914205729961395,0.288975954055786,-0.654044389724731,0.736575484275818,0.172286108136177,-0.75787228345871,0.513580441474915,0.402324169874191,-0.302653342485428,0.791418969631195,0.531090319156647,0.199096158146858,0.874440908432007,0.442395567893982,0.147313222289085,0.957895278930664,0.246445551514626,-0.284113943576813,0.914205729961395,0.288975954055786,-0.302653342485428,0.791418969631195,0.531090319156647,-0.894310534000397,0.387115389108658,0.224388927221298,-0.96901535987854,0.136607885360718,0.205785036087036,-0.975419044494629,0.160562738776207,0.150921478867531,-0.867211997509003,0.495593756437302,0.048272043466568,-0.905462920665741,0.186479464173317,0.38126415014267,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.96901535987854,0.136607885360718,0.205785036087036,-0.894310534000397,0.387115389108658,0.224388927221298,0.945276021957397,0.311139762401581,-0.0982102602720261,0.96403831243515,-0.105999603867531,-0.243709176778793,0.971478760242462,0.187488585710526,-0.145179286599159,0.958563983440399,0.284184783697128,-0.0198514685034752,0.980856955051422,0.194233074784279,-0.0138955730944872,0.958563983440399,0.284184783697128,-0.0198514685034752,0.971478760242462,0.187488585710526,-0.145179286599159,0.886798441410065,0.179963767528534,-0.42567777633667,\n-0.895804762840271,0.195414647459984,-0.399182796478271,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.886481404304504,0.177040040493011,-0.427559942007065,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.78797847032547,0.121628470718861,-0.603569746017456,-0.886481404304504,0.177040040493011,-0.427559942007065,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.571970641613007,0.0312801524996758,-0.819677472114563,-0.78797847032547,0.121628470718861,-0.603569746017456,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.241922900080681,-0.699652969837189,-0.672279000282288,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.571970641613007,0.0312801524996758,-0.819677472114563,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.895804762840271,0.195414647459984,-0.399182796478271,-0.693842947483063,0.221263691782951,-0.685291409492493,-0.83249443769455,-0.151082009077072,-0.53303587436676,0.980031192302704,0.0460809320211411,-0.19343064725399,0.536711633205414,0.454791337251663,-0.710707724094391,0.533322811126709,0.362958133220673,-0.764086484909058,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.416003495454788,0.214769378304482,-0.883637487888336,0.807687342166901,-0.332686930894852,-0.486785978078842,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.533322811126709,0.362958133220673,-0.764086484909058,0.121472798287869,0.0532773099839687,-0.991163909435272,0.351745188236237,-0.619295418262482,-0.701960504055023,0.807687342166901,-0.332686930894852,-0.486785978078842,0.416003495454788,0.214769378304482,-0.883637487888336,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.241922900080681,-0.699652969837189,-0.672279000282288,0.351745188236237,-0.619295418262482,-0.701960504055023,0.121472798287869,0.0532773099839687,-0.991163909435272,0.185644999146461,0.47002848982811,-0.862907350063324,\n0.536711633205414,0.454791337251663,-0.710707724094391,0.980031192302704,0.0460809320211411,-0.19343064725399,0.540148317813873,0.0994915440678597,-0.83566814661026,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.598017156124115,-0.77135694026947,0.217678472399712,-0.552583634853363,-0.801110625267029,0.229941442608833,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.552583634853363,-0.801110625267029,0.229941442608833,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.292398482561111,-0.949960827827454,0.109898090362549,-0.058585699647665,-0.997730076313019,-0.0332027748227119,-0.241922900080681,-0.699652969837189,-0.672279000282288,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.292398482561111,-0.949960827827454,0.109898090362549,-0.356896013021469,-0.932965517044067,0.0469101071357727,-0.598017156124115,-0.77135694026947,0.217678472399712,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.682462215423584,-0.715959310531616,-0.147131323814392,0.704459071159363,-0.709129512310028,0.0295416153967381,0.980031192302704,0.0460809320211411,-0.19343064725399,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.626312613487244,-0.775286138057709,0.0816323310136795,0.807687342166901,-0.332686930894852,-0.486785978078842,0.515369713306427,-0.855204403400421,0.0549497418105602,0.626312613487244,-0.775286138057709,0.0816323310136795,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.351745188236237,-0.619295418262482,-0.701960504055023,0.270284384489059,-0.962110817432404,-0.0359043404459953,0.515369713306427,-0.855204403400421,0.0549497418105602,0.807687342166901,-0.332686930894852,-0.486785978078842,0.351745188236237,-0.619295418262482,-0.701960504055023,-0.241922900080681,-0.699652969837189,-0.672279000282288,\n-0.058585699647665,-0.997730076313019,-0.0332027748227119,0.270284384489059,-0.962110817432404,-0.0359043404459953,0.980031192302704,0.0460809320211411,-0.19343064725399,0.704459071159363,-0.709129512310028,0.0295416153967381,0.456256777048111,-0.889221549034119,-0.0333885848522186,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.895804762840271,0.195414647459984,-0.399182796478271,-0.886481404304504,0.177040040493011,-0.427559942007065,0.0356707610189915,0.684221625328064,-0.728401243686676,0.0514887571334839,0.63036984205246,-0.774585545063019,-0.78797847032547,0.121628470718861,-0.603569746017456,0.085333488881588,0.746294617652893,-0.66012316942215,0.0356707610189915,0.684221625328064,-0.728401243686676,-0.886481404304504,0.177040040493011,-0.427559942007065,-0.571970641613007,0.0312801524996758,-0.819677472114563,0.0719250813126564,0.846214592456818,-0.527965605258942,0.085333488881588,0.746294617652893,-0.66012316942215,-0.78797847032547,0.121628470718861,-0.603569746017456,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.0788121968507767,0.901525676250458,-0.425488084554672,0.0719250813126564,0.846214592456818,-0.527965605258942,-0.571970641613007,0.0312801524996758,-0.819677472114563,-0.777539730072021,-0.479580640792847,-0.406736254692078,-0.83249443769455,-0.151082009077072,-0.53303587436676,0.207446232438087,0.064531996846199,-0.976115584373474,0.337681114673615,-0.494108825922012,-0.801141619682312,-0.693842947483063,0.221263691782951,-0.685291409492493,-0.895804762840271,0.195414647459984,-0.399182796478271,0.0514887571334839,0.63036984205246,-0.774585545063019,0.13019335269928,0.440476208925247,-0.88827383518219,0.533322811126709,0.362958133220673,-0.764086484909058,0.536711633205414,0.454791337251663,-0.710707724094391,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.541287541389465,0.6014044880867,-0.587639689445496,0.416003495454788,0.214769378304482,-0.883637487888336,0.533322811126709,0.362958133220673,-0.764086484909058,-0.541287541389465,0.6014044880867,-0.587639689445496,\n-0.492161601781845,0.702208459377289,-0.514470815658569,0.121472798287869,0.0532773099839687,-0.991163909435272,0.416003495454788,0.214769378304482,-0.883637487888336,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.266431421041489,-0.0175891108810902,-0.963693380355835,0.121472798287869,0.0532773099839687,-0.991163909435272,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.0788121968507767,0.901525676250458,-0.425488084554672,0.536711633205414,0.454791337251663,-0.710707724094391,0.185644999146461,0.47002848982811,-0.862907350063324,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.570469677448273,0.551836013793945,-0.608310282230377,0.540148317813873,0.0994915440678597,-0.83566814661026,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.622039020061493,0.415303826332092,-0.663769662380219,0.185644999146461,0.47002848982811,-0.862907350063324,0.540148317813873,0.0994915440678597,-0.83566814661026,0.639358460903168,-0.369733929634094,-0.674179136753082,-0.564797222614288,-0.561120748519897,-0.60510128736496,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.598017156124115,-0.77135694026947,0.217678472399712,0.50339812040329,-0.851142287254334,0.148819401860237,0.54979944229126,-0.796860158443451,0.250468462705612,-0.552583634853363,-0.801110625267029,0.229941442608833,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.552583634853363,-0.801110625267029,0.229941442608833,0.54979944229126,-0.796860158443451,0.250468462705612,0.599540710449219,-0.652058064937592,0.464081108570099,-0.292398482561111,-0.949960827827454,0.109898090362549,-0.446152657270432,-0.869331896305084,0.212626039981842,0.599540710449219,-0.652058064937592,0.464081108570099,0.502160549163818,-0.455849409103394,0.734871506690979,-0.058585699647665,-0.997730076313019,-0.0332027748227119,-0.292398482561111,-0.949960827827454,0.109898090362549,0.502160549163818,-0.455849409103394,0.734871506690979,0.272433400154114,-0.386231541633606,0.88125205039978,\n-0.777539730072021,-0.479580640792847,-0.406736254692078,0.337681114673615,-0.494108825922012,-0.801141619682312,0.442046135663986,-0.813259184360504,-0.378423988819122,-0.682462215423584,-0.715959310531616,-0.147131323814392,-0.356896013021469,-0.932965517044067,0.0469101071357727,0.49251726269722,-0.867295384407043,-0.0722877904772758,0.50339812040329,-0.851142287254334,0.148819401860237,-0.598017156124115,-0.77135694026947,0.217678472399712,0.626312613487244,-0.775286138057709,0.0816323310136795,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.375613301992416,-0.88097071647644,0.287758976221085,0.704459071159363,-0.709129512310028,0.0295416153967381,0.515369713306427,-0.855204403400421,0.0549497418105602,-0.342554897069931,-0.642882287502289,0.685097455978394,-0.426157087087631,-0.793524503707886,0.434406518936157,0.626312613487244,-0.775286138057709,0.0816323310136795,0.270284384489059,-0.962110817432404,-0.0359043404459953,-0.0474530011415482,-0.461726039648056,0.885752379894257,-0.342554897069931,-0.642882287502289,0.685097455978394,0.515369713306427,-0.855204403400421,0.0549497418105602,0.270284384489059,-0.962110817432404,-0.0359043404459953,-0.058585699647665,-0.997730076313019,-0.0332027748227119,0.272433400154114,-0.386231541633606,0.88125205039978,-0.0474530011415482,-0.461726039648056,0.885752379894257,0.704459071159363,-0.709129512310028,0.0295416153967381,-0.375613301992416,-0.88097071647644,0.287758976221085,-0.376423895359039,-0.918147921562195,0.123731203377247,0.456256777048111,-0.889221549034119,-0.0333885848522186,0.456256777048111,-0.889221549034119,-0.0333885848522186,-0.376423895359039,-0.918147921562195,0.123731203377247,-0.438194215297699,-0.882848083972931,-0.169011920690537,0.699954152107239,-0.637360692024231,-0.322235226631165,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.564797222614288,-0.561120748519897,-0.60510128736496,0.639358460903168,-0.369733929634094,-0.674179136753082,-0.83249443769455,-0.151082009077072,-0.53303587436676,\n-0.693842947483063,0.221263691782951,-0.685291409492493,0.13019335269928,0.440476208925247,-0.88827383518219,0.207446232438087,0.064531996846199,-0.976115584373474,-0.682462215423584,-0.715959310531616,-0.147131323814392,0.442046135663986,-0.813259184360504,-0.378423988819122,0.49251726269722,-0.867295384407043,-0.0722877904772758,-0.356896013021469,-0.932965517044067,0.0469101071357727,0.0514887571334839,0.63036984205246,-0.774585545063019,0.0356707610189915,0.684221625328064,-0.728401243686676,0.739788413047791,0.545380234718323,-0.394047558307648,0.761568784713745,0.476597040891647,-0.439167678356171,0.739788413047791,0.545380234718323,-0.394047558307648,0.0356707610189915,0.684221625328064,-0.728401243686676,0.085333488881588,0.746294617652893,-0.66012316942215,0.704140186309814,0.675374627113342,-0.21921606361866,0.085333488881588,0.746294617652893,-0.66012316942215,0.0719250813126564,0.846214592456818,-0.527965605258942,0.521775901317596,0.845166563987732,0.11594570428133,0.704140186309814,0.675374627113342,-0.21921606361866,0.521775901317596,0.845166563987732,0.11594570428133,0.0719250813126564,0.846214592456818,-0.527965605258942,-0.0788121968507767,0.901525676250458,-0.425488084554672,0.117615856230259,0.926379323005676,0.357753992080688,0.337681114673615,-0.494108825922012,-0.801141619682312,0.207446232438087,0.064531996846199,-0.976115584373474,0.886798441410065,0.179963767528534,-0.42567777633667,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.80961799621582,0.346472293138504,-0.473788559436798,0.13019335269928,0.440476208925247,-0.88827383518219,0.0514887571334839,0.63036984205246,-0.774585545063019,0.761568784713745,0.476597040891647,-0.439167678356171,-0.541287541389465,0.6014044880867,-0.587639689445496,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.541287541389465,0.6014044880867,-0.587639689445496,-0.935190379619598,0.351279079914093,-0.0449664331972599,\n-0.804790914058685,0.576125860214233,0.142795518040657,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.804790914058685,0.576125860214233,0.142795518040657,-0.422390103340149,0.834542691707611,0.353730261325836,-0.0788121968507767,0.901525676250458,-0.425488084554672,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.422390103340149,0.834542691707611,0.353730261325836,0.117615856230259,0.926379323005676,0.357753992080688,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.564797222614288,-0.561120748519897,-0.60510128736496,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.97841340303421,-0.195419549942017,0.0672191828489304,0.54979944229126,-0.796860158443451,0.250468462705612,0.50339812040329,-0.851142287254334,0.148819401860237,0.971711337566376,-0.234630659222603,-0.0269353967159987,0.952633321285248,0.0169839523732662,0.303646683692932,0.599540710449219,-0.652058064937592,0.464081108570099,0.54979944229126,-0.796860158443451,0.250468462705612,0.97841340303421,-0.195419549942017,0.0672191828489304,0.707790434360504,0.336065679788589,0.621363461017609,0.502160549163818,-0.455849409103394,0.734871506690979,0.599540710449219,-0.652058064937592,0.464081108570099,0.952633321285248,0.0169839523732662,0.303646683692932,0.272433400154114,-0.386231541633606,0.88125205039978,0.502160549163818,-0.455849409103394,0.734871506690979,0.707790434360504,0.336065679788589,0.621363461017609,0.29783770442009,0.470342755317688,0.830704748630524,\n0.96403831243515,-0.105999603867531,-0.243709176778793,0.442046135663986,-0.813259184360504,-0.378423988819122,0.337681114673615,-0.494108825922012,-0.801141619682312,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.50339812040329,-0.851142287254334,0.148819401860237,0.49251726269722,-0.867295384407043,-0.0722877904772758,0.965696275234222,-0.217926412820816,-0.141204699873924,0.971711337566376,-0.234630659222603,-0.0269353967159987,-0.375613301992416,-0.88097071647644,0.287758976221085,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.854402720928192,-0.324486047029495,0.405838370323181,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.854402720928192,-0.324486047029495,0.405838370323181,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.342554897069931,-0.642882287502289,0.685097455978394,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.342554897069931,-0.642882287502289,0.685097455978394,-0.0474530011415482,-0.461726039648056,0.885752379894257,-0.24900957942009,0.325979948043823,0.911993026733398,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.0474530011415482,-0.461726039648056,0.885752379894257,0.272433400154114,-0.386231541633606,0.88125205039978,0.29783770442009,0.470342755317688,0.830704748630524,-0.24900957942009,0.325979948043823,0.911993026733398,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.376423895359039,-0.918147921562195,0.123731203377247,-0.375613301992416,-0.88097071647644,0.287758976221085,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.376423895359039,-0.918147921562195,0.123731203377247,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.564797222614288,-0.561120748519897,-0.60510128736496,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.886798441410065,0.179963767528534,-0.42567777633667,\n0.207446232438087,0.064531996846199,-0.976115584373474,0.13019335269928,0.440476208925247,-0.88827383518219,0.80961799621582,0.346472293138504,-0.473788559436798,0.49251726269722,-0.867295384407043,-0.0722877904772758,0.442046135663986,-0.813259184360504,-0.378423988819122,0.96403831243515,-0.105999603867531,-0.243709176778793,0.965696275234222,-0.217926412820816,-0.141204699873924,0.962221920490265,0.251950919628143,-0.103197492659092,0.872992157936096,0.465613692998886,-0.145219102501869,0.866116344928741,0.494782358407974,-0.0709430351853371,0.958588719367981,0.282198518514633,-0.0383618138730526,0.958588719367981,0.282198518514633,-0.0383618138730526,0.932084560394287,0.354396849870682,0.074974812567234,0.952685952186584,0.144979014992714,0.267152786254883,0.96112471818924,0.0701063796877861,0.267066121101379,0.861002922058105,0.508596777915955,-0.00179798470344394,0.932084560394287,0.354396849870682,0.074974812567234,0.958588719367981,0.282198518514633,-0.0383618138730526,0.866116344928741,0.494782358407974,-0.0709430351853371,0.971478760242462,0.187488585710526,-0.145179286599159,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.886798441410065,0.179963767528534,-0.42567777633667,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.819937765598297,-0.00659000594168901,0.572414755821228,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.971478760242462,0.187488585710526,-0.145179286599159,0.96403831243515,-0.105999603867531,-0.243709176778793,0.905734241008759,-0.0415820777416229,-0.421801388263702,-0.867211997509003,0.495593756437302,0.048272043466568,-0.92325884103775,0.354574739933014,0.14788456261158,-0.894310534000397,0.387115389108658,0.224388927221298,\n-0.96901535987854,0.136607885360718,0.205785036087036,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.972556948661804,-0.221615761518478,-0.070847675204277,-0.951126158237457,-0.290162175893784,0.105663880705833,0.886798441410065,0.179963767528534,-0.42567777633667,0.80961799621582,0.346472293138504,-0.473788559436798,0.980856955051422,0.194233074784279,-0.0138955730944872,0.945276021957397,0.311139762401581,-0.0982102602720261,0.965696275234222,-0.217926412820816,-0.141204699873924,0.96403831243515,-0.105999603867531,-0.243709176778793,0.980031192302704,0.0460809320211411,-0.19343064725399,0.639358460903168,-0.369733929634094,-0.674179136753082,0.540148317813873,0.0994915440678597,-0.83566814661026,0.639358460903168,-0.369733929634094,-0.674179136753082,0.980031192302704,0.0460809320211411,-0.19343064725399,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.682462215423584,-0.715959310531616,-0.147131323814392,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.777539730072021,-0.479580640792847,-0.406736254692078,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.83249443769455,-0.151082009077072,-0.53303587436676,-0.777539730072021,-0.479580640792847,-0.406736254692078,0.924136519432068,-0.0825216323137283,0.373044043779373,0.96112471818924,0.0701063796877861,0.267066121101379,0.952685952186584,0.144979014992714,0.267152786254883,0.866116344928741,0.494782358407974,-0.0709430351853371,0.77119505405426,0.619837582111359,-0.14511901140213,0.861002922058105,0.508596777915955,-0.00179798470344394,0.220404133200645,0.441583395004272,-0.869727611541748,0.345912396907806,0.450473189353943,-0.823054373264313,0.499523967504501,-0.410259157419205,-0.762996256351471,0.291362255811691,-0.415095657110214,-0.861860573291779,0.345912396907806,0.450473189353943,-0.823054373264313,0.596955060958862,0.477591276168823,-0.644632637500763,0.719791650772095,-0.389199703931808,-0.574824810028076,\n0.499523967504501,-0.410259157419205,-0.762996256351471,0.596955060958862,0.477591276168823,-0.644632637500763,0.801617920398712,0.503292322158813,-0.322653979063034,0.89153379201889,-0.356688916683197,-0.279178351163864,0.719791650772095,-0.389199703931808,-0.574824810028076,0.801617920398712,0.503292322158813,-0.322653979063034,0.856007039546967,0.515455603599548,0.039463996887207,0.93902975320816,-0.33998966217041,0.0512847155332565,0.89153379201889,-0.356688916683197,-0.279178351163864,0.531617403030396,0.581484317779541,-0.615840017795563,0.596955060958862,0.477591276168823,-0.644632637500763,0.345912396907806,0.450473189353943,-0.823054373264313,0.28382807970047,0.520071446895599,-0.805585086345673,0.709659159183502,0.635841906070709,-0.303461521863937,0.801617920398712,0.503292322158813,-0.322653979063034,0.596955060958862,0.477591276168823,-0.644632637500763,0.531617403030396,0.581484317779541,-0.615840017795563,0.755816400051117,0.653946995735168,0.0330889187753201,0.856007039546967,0.515455603599548,0.039463996887207,0.801617920398712,0.503292322158813,-0.322653979063034,0.709659159183502,0.635841906070709,-0.303461521863937,0.238343358039856,0.387237757444382,-0.890639841556549,0.568823277950287,-0.359092324972153,-0.739927589893341,0.49908322095871,-0.0296989660710096,-0.866044998168945,0.249522879719734,0.613189935684204,-0.749490737915039,0.528623342514038,0.140339240431786,-0.837175190448761,0.64734548330307,0.346664369106293,-0.678798675537109,0.531617403030396,0.581484317779541,-0.615840017795563,0.28382807970047,0.520071446895599,-0.805585086345673,0.64734548330307,0.346664369106293,-0.678798675537109,0.815433382987976,0.474987715482712,-0.330839991569519,0.709659159183502,0.635841906070709,-0.303461521863937,0.531617403030396,0.581484317779541,-0.615840017795563,0.815433382987976,0.474987715482712,-0.330839991569519,0.855934202671051,0.515577018260956,0.0394590422511101,0.755816400051117,0.653946995735168,0.0330889187753201,0.709659159183502,0.635841906070709,-0.303461521863937,0.495009750127792,0.455467730760574,-0.739942193031311,\n0.532988548278809,0.496355772018433,-0.685240209102631,0.64734548330307,0.346664369106293,-0.678798675537109,0.528623342514038,0.140339240431786,-0.837175190448761,0.532988548278809,0.496355772018433,-0.685240209102631,0.672445952892303,0.657832205295563,-0.339224457740784,0.815433382987976,0.474987715482712,-0.330839991569519,0.64734548330307,0.346664369106293,-0.678798675537109,0.672445952892303,0.657832205295563,-0.339224457740784,0.702748596668243,0.710811495780945,0.0298582091927528,0.855934202671051,0.515577018260956,0.0394590422511101,0.815433382987976,0.474987715482712,-0.330839991569519,0.0635582432150841,-0.298091143369675,-0.952418982982636,-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.568823277950287,-0.359092324972153,-0.739927589893341,0.238343358039856,0.387237757444382,-0.890639841556549,0.291362255811691,-0.415095657110214,-0.861860573291779,0.0635582432150841,-0.298091143369675,-0.952418982982636,0.238343358039856,0.387237757444382,-0.890639841556549,0.220404133200645,0.441583395004272,-0.869727611541748,0.28382807970047,0.520071446895599,-0.805585086345673,0.345912396907806,0.450473189353943,-0.823054373264313,0.220404133200645,0.441583395004272,-0.869727611541748,0.249522879719734,0.613189935684204,-0.749490737915039,0.49908322095871,-0.0296989660710096,-0.866044998168945,0.528623342514038,0.140339240431786,-0.837175190448761,0.28382807970047,0.520071446895599,-0.805585086345673,0.249522879719734,0.613189935684204,-0.749490737915039,0.531679213047028,-0.524689078330994,-0.664844751358032,0.122271165251732,0.0883934944868088,-0.988552689552307,0.449340283870697,0.427763402462006,-0.784290611743927,0.623004376888275,-0.00750839477404952,-0.782182335853577,0.491910099983215,0.172478601336479,-0.853390634059906,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.366778641939163,0.448393434286118,-0.815117657184601,0.497087746858597,0.30063185095787,-0.813955903053284,-0.358708292245865,0.679778933525085,-0.639710068702698,0.511581122875214,0.562213659286499,-0.64976966381073,0.497087746858597,0.30063185095787,-0.813955903053284,\n-0.366778641939163,0.448393434286118,-0.815117657184601,-0.345371842384338,0.869300365447998,-0.353603094816208,0.516282200813293,0.786112189292908,-0.339823931455612,0.511581122875214,0.562213659286499,-0.64976966381073,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.349057763814926,0.936734259128571,-0.0262219123542309,0.506098926067352,0.862278997898102,0.0184080004692078,0.516282200813293,0.786112189292908,-0.339823931455612,-0.345371842384338,0.869300365447998,-0.353603094816208,0.614878416061401,0.498528629541397,-0.611059486865997,0.567450106143951,0.238805204629898,-0.788018047809601,0.497087746858597,0.30063185095787,-0.813955903053284,0.511581122875214,0.562213659286499,-0.64976966381073,0.64806866645813,0.696889817714691,-0.307167142629623,0.614878416061401,0.498528629541397,-0.611059486865997,0.511581122875214,0.562213659286499,-0.64976966381073,0.516282200813293,0.786112189292908,-0.339823931455612,0.645423412322998,0.763367056846619,0.0264460854232311,0.64806866645813,0.696889817714691,-0.307167142629623,0.516282200813293,0.786112189292908,-0.339823931455612,0.506098926067352,0.862278997898102,0.0184080004692078,0.0124354995787144,0.454871088266373,-0.890470445156097,-0.348750114440918,0.540946424007416,-0.765343248844147,0.368004411458969,0.153596758842468,-0.917050004005432,0.655558884143829,0.209355428814888,-0.725543141365051,0.614878416061401,0.498528629541397,-0.611059486865997,0.383456945419312,0.608026206493378,-0.695172548294067,0.186724796891212,0.483126193284988,-0.855408072471619,0.567450106143951,0.238805204629898,-0.788018047809601,0.64806866645813,0.696889817714691,-0.307167142629623,0.488431423902512,0.799107253551483,-0.350517243146896,0.383456945419312,0.608026206493378,-0.695172548294067,0.614878416061401,0.498528629541397,-0.611059486865997,0.645423412322998,0.763367056846619,0.0264460854232311,0.506222486495972,0.862206280231476,0.0184154994785786,0.488431423902512,0.799107253551483,-0.350517243146896,0.64806866645813,0.696889817714691,-0.307167142629623,0.383456945419312,0.608026206493378,-0.695172548294067,\n0.532988548278809,0.496355772018433,-0.685240209102631,0.495009750127792,0.455467730760574,-0.739942193031311,0.186724796891212,0.483126193284988,-0.855408072471619,0.488431423902512,0.799107253551483,-0.350517243146896,0.672445952892303,0.657832205295563,-0.339224457740784,0.532988548278809,0.496355772018433,-0.685240209102631,0.383456945419312,0.608026206493378,-0.695172548294067,0.506222486495972,0.862206280231476,0.0184154994785786,0.702748596668243,0.710811495780945,0.0298582091927528,0.672445952892303,0.657832205295563,-0.339224457740784,0.488431423902512,0.799107253551483,-0.350517243146896,-0.57543957233429,0.0254972595721483,-0.817446708679199,-0.559110403060913,0.469017684459686,-0.683679699897766,0.122271165251732,0.0883934944868088,-0.988552689552307,-0.247235804796219,-0.304136991500854,-0.919986486434937,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.128493547439575,-0.169293120503426,-0.977153658866882,0.368004411458969,0.153596758842468,-0.917050004005432,-0.348750114440918,0.540946424007416,-0.765343248844147,0.368004411458969,0.153596758842468,-0.917050004005432,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.36416107416153,0.234637573361397,-0.901294589042664,0.491910099983215,0.172478601336479,-0.853390634059906,0.567450106143951,0.238805204629898,-0.788018047809601,0.655558884143829,0.209355428814888,-0.725543141365051,0.491910099983215,0.172478601336479,-0.853390634059906,0.497087746858597,0.30063185095787,-0.813955903053284,0.567450106143951,0.238805204629898,-0.788018047809601,0.186724796891212,0.483126193284988,-0.855408072471619,0.0124354995787144,0.454871088266373,-0.890470445156097,0.655558884143829,0.209355428814888,-0.725543141365051,0.449340283870697,0.427763402462006,-0.784290611743927,0.122271165251732,0.0883934944868088,-0.988552689552307,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.0200252141803503,0.64056408405304,-0.767643511295319,-0.143515676259995,-0.203022330999374,-0.968599617481232,0.508907198905945,-0.553594052791595,-0.659201860427856,\n-0.0507657080888748,-0.284880071878433,-0.957217931747437,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.143515676259995,-0.203022330999374,-0.968599617481232,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.128973305225372,-0.305629998445511,-0.943374931812286,-0.286835759878159,0.0198002532124519,-0.957775115966797,0.623004376888275,-0.00750839477404952,-0.782182335853577,0.755403220653534,-0.0362841933965683,-0.654254853725433,0.566836953163147,-0.543319463729858,-0.619273662567139,0.531679213047028,-0.524689078330994,-0.664844751358032,0.623004376888275,-0.00750839477404952,-0.782182335853577,0.449340283870697,0.427763402462006,-0.784290611743927,0.614906549453735,0.590024650096893,-0.523221671581268,0.755403220653534,-0.0362841933965683,-0.654254853725433,-0.0200252141803503,0.64056408405304,-0.767643511295319,-0.0195061750710011,0.763988316059113,-0.644935190677643,0.614906549453735,0.590024650096893,-0.523221671581268,0.449340283870697,0.427763402462006,-0.784290611743927,-0.0200252141803503,0.64056408405304,-0.767643511295319,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.619978547096252,0.568114936351776,-0.541176497936249,-0.0195061750710011,0.763988316059113,-0.644935190677643,-0.57543957233429,0.0254972595721483,-0.817446708679199,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.348750114440918,0.540946424007416,-0.765343248844147,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.57543957233429,0.0254972595721483,-0.817446708679199,-0.247235804796219,-0.304136991500854,-0.919986486434937,-0.143515676259995,-0.203022330999374,-0.968599617481232,-0.286835759878159,0.0198002532124519,-0.957775115966797,0.627847135066986,-0.674039661884308,-0.389202296733856,0.531679213047028,-0.524689078330994,-0.664844751358032,0.568823277950287,-0.359092324972153,-0.739927589893341,0.508907198905945,-0.553594052791595,-0.659201860427856,0.755403220653534,-0.0362841933965683,-0.654254853725433,0.528623342514038,0.140339240431786,-0.837175190448761,0.49908322095871,-0.0296989660710096,-0.866044998168945,\n0.566836953163147,-0.543319463729858,-0.619273662567139,0.495009750127792,0.455467730760574,-0.739942193031311,0.528623342514038,0.140339240431786,-0.837175190448761,0.755403220653534,-0.0362841933965683,-0.654254853725433,0.614906549453735,0.590024650096893,-0.523221671581268,0.0124354995787144,0.454871088266373,-0.890470445156097,0.186724796891212,0.483126193284988,-0.855408072471619,-0.0195061750710011,0.763988316059113,-0.644935190677643,-0.619978547096252,0.568114936351776,-0.541176497936249,-0.0195061750710011,0.763988316059113,-0.644935190677643,0.186724796891212,0.483126193284988,-0.855408072471619,0.495009750127792,0.455467730760574,-0.739942193031311,0.614906549453735,0.590024650096893,-0.523221671581268,0.130445152521133,0.457035809755325,0.879830837249756,0.20105354487896,-0.399605453014374,0.894367337226868,0.418255031108856,-0.396321922540665,0.817307531833649,0.260075956583023,0.465220808982849,0.84612649679184,0.656683743000031,-0.378395289182663,0.652367532253265,0.528121531009674,0.489418476819992,0.693943202495575,0.260075956583023,0.465220808982849,0.84612649679184,0.418255031108856,-0.396321922540665,0.817307531833649,0.857872784137726,-0.350929707288742,0.375369966030121,0.76475590467453,0.509621679782867,0.39425140619278,0.528121531009674,0.489418476819992,0.693943202495575,0.656683743000031,-0.378395289182663,0.652367532253265,0.93902975320816,-0.33998966217041,0.0512847155332565,0.856007039546967,0.515455603599548,0.039463996887207,0.76475590467453,0.509621679782867,0.39425140619278,0.857872784137726,-0.350929707288742,0.375369966030121,0.466174960136414,0.592728853225708,0.656774938106537,0.200175419449806,0.534444093704224,0.821157276630402,0.260075956583023,0.465220808982849,0.84612649679184,0.528121531009674,0.489418476819992,0.693943202495575,0.675370097160339,0.64173036813736,0.363397032022476,0.466174960136414,0.592728853225708,0.656774938106537,0.528121531009674,0.489418476819992,0.693943202495575,0.76475590467453,0.509621679782867,0.39425140619278,0.755816400051117,0.653946995735168,0.0330889187753201,\n0.675370097160339,0.64173036813736,0.363397032022476,0.76475590467453,0.509621679782867,0.39425140619278,0.856007039546967,0.515455603599548,0.039463996887207,0.407602995634079,-0.0139898108318448,0.913052082061768,0.505278706550598,-0.368258208036423,0.78043532371521,0.111461341381073,0.330251514911652,0.937288820743561,0.17189884185791,0.626526415348053,0.760207533836365,0.466174960136414,0.592728853225708,0.656774938106537,0.574624836444855,0.359153598546982,0.735401213169098,0.440102815628052,0.155542016029358,0.884373366832733,0.200175419449806,0.534444093704224,0.821157276630402,0.675370097160339,0.64173036813736,0.363397032022476,0.777630627155304,0.481480687856674,0.404310435056686,0.574624836444855,0.359153598546982,0.735401213169098,0.466174960136414,0.592728853225708,0.656774938106537,0.755816400051117,0.653946995735168,0.0330889187753201,0.855934202671051,0.515577018260956,0.0394590422511101,0.777630627155304,0.481480687856674,0.404310435056686,0.675370097160339,0.64173036813736,0.363397032022476,0.574624836444855,0.359153598546982,0.735401213169098,0.460348039865494,0.508830428123474,0.727441608905792,0.416925370693207,0.468881458044052,0.778667747974396,0.440102815628052,0.155542016029358,0.884373366832733,0.777630627155304,0.481480687856674,0.404310435056686,0.634704053401947,0.664313793182373,0.394763141870499,0.460348039865494,0.508830428123474,0.727441608905792,0.574624836444855,0.359153598546982,0.735401213169098,0.855934202671051,0.515577018260956,0.0394590422511101,0.702748596668243,0.710811495780945,0.0298582091927528,0.634704053401947,0.664313793182373,0.394763141870499,0.777630627155304,0.481480687856674,0.404310435056686,-0.00422305008396506,-0.606499910354614,0.795072376728058,0.434695482254028,-0.572132110595703,0.695488810539246,0.014976161532104,0.0756698846817017,0.997020423412323,-0.341256439685822,-0.287500321865082,0.894923210144043,0.111461341381073,0.330251514911652,0.937288820743561,0.505278706550598,-0.368258208036423,0.78043532371521,-0.0179628469049931,-0.326483070850372,0.945032358169556,\n-0.208328202366829,-0.172579661011696,0.962712645530701,0.20105354487896,-0.399605453014374,0.894367337226868,0.130445152521133,0.457035809755325,0.879830837249756,0.111461341381073,0.330251514911652,0.937288820743561,-0.0351529642939568,-0.352832555770874,0.935025930404663,0.200175419449806,0.534444093704224,0.821157276630402,0.17189884185791,0.626526415348053,0.760207533836365,0.130445152521133,0.457035809755325,0.879830837249756,0.260075956583023,0.465220808982849,0.84612649679184,0.200175419449806,0.534444093704224,0.821157276630402,0.440102815628052,0.155542016029358,0.884373366832733,0.407602995634079,-0.0139898108318448,0.913052082061768,0.17189884185791,0.626526415348053,0.760207533836365,0.368747025728226,0.423022657632828,0.827694058418274,0.014976161532104,0.0756698846817017,0.997020423412323,0.434695482254028,-0.572132110595703,0.695488810539246,0.589323878288269,-0.0393206179141998,0.806939482688904,0.401947200298309,0.187930881977081,0.896169900894165,0.411258369684219,0.315371930599213,0.855223417282104,-0.448035717010498,0.462348014116287,0.765178620815277,-0.454463303089142,0.250147342681885,0.85492068529129,0.411258369684219,0.315371930599213,0.855223417282104,0.442751318216324,0.574035108089447,0.688806891441345,-0.42182531952858,0.69061017036438,0.587470054626465,-0.448035717010498,0.462348014116287,0.765178620815277,0.442751318216324,0.574035108089447,0.688806891441345,0.479419261217117,0.792443513870239,0.377081513404846,-0.37904354929924,0.875075936317444,0.300945341587067,-0.42182531952858,0.69061017036438,0.587470054626465,0.479419261217117,0.792443513870239,0.377081513404846,0.506098926067352,0.862278997898102,0.0184080004692078,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.37904354929924,0.875075936317444,0.300945341587067,0.549417436122894,0.509770929813385,0.662022709846497,0.442751318216324,0.574035108089447,0.688806891441345,0.411258369684219,0.315371930599213,0.855223417282104,0.483853906393051,0.253162741661072,0.83773148059845,0.613779723644257,0.702778577804565,0.359689712524414,\n0.479419261217117,0.792443513870239,0.377081513404846,0.442751318216324,0.574035108089447,0.688806891441345,0.549417436122894,0.509770929813385,0.662022709846497,0.645423412322998,0.763367056846619,0.0264460854232311,0.506098926067352,0.862278997898102,0.0184080004692078,0.479419261217117,0.792443513870239,0.377081513404846,0.613779723644257,0.702778577804565,0.359689712524414,0.27214840054512,0.170062497258186,0.947108268737793,-0.424899607896805,0.554023623466492,0.715903759002686,-0.0785331204533577,0.470493257045746,0.878901958465576,0.577877700328827,0.222700744867325,0.785150766372681,0.0984512493014336,0.498287439346313,0.861404061317444,0.310688972473145,0.620523273944855,0.720016121864319,0.549417436122894,0.509770929813385,0.662022709846497,0.483853906393051,0.253162741661072,0.83773148059845,0.310688972473145,0.620523273944855,0.720016121864319,0.450630962848663,0.805599272251129,0.384631723165512,0.613779723644257,0.702778577804565,0.359689712524414,0.549417436122894,0.509770929813385,0.662022709846497,0.450630962848663,0.805599272251129,0.384631723165512,0.506222486495972,0.862206280231476,0.0184154994785786,0.645423412322998,0.763367056846619,0.0264460854232311,0.613779723644257,0.702778577804565,0.359689712524414,0.416925370693207,0.468881458044052,0.778667747974396,0.460348039865494,0.508830428123474,0.727441608905792,0.310688972473145,0.620523273944855,0.720016121864319,0.0984512493014336,0.498287439346313,0.861404061317444,0.460348039865494,0.508830428123474,0.727441608905792,0.634704053401947,0.664313793182373,0.394763141870499,0.450630962848663,0.805599272251129,0.384631723165512,0.310688972473145,0.620523273944855,0.720016121864319,0.634704053401947,0.664313793182373,0.394763141870499,0.702748596668243,0.710811495780945,0.0298582091927528,0.506222486495972,0.862206280231476,0.0184154994785786,0.450630962848663,0.805599272251129,0.384631723165512,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.341256439685822,-0.287500321865082,0.894923210144043,0.014976161532104,0.0756698846817017,0.997020423412323,\n-0.625847578048706,0.480478763580322,0.614373624324799,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.424899607896805,0.554023623466492,0.715903759002686,0.27214840054512,0.170062497258186,0.947108268737793,-0.228187650442123,-0.152172490954399,0.961651682853699,0.27214840054512,0.170062497258186,0.947108268737793,0.401947200298309,0.187930881977081,0.896169900894165,-0.454463303089142,0.250147342681885,0.85492068529129,-0.408599942922592,0.0173157677054405,0.912549316883087,0.483853906393051,0.253162741661072,0.83773148059845,0.411258369684219,0.315371930599213,0.855223417282104,0.401947200298309,0.187930881977081,0.896169900894165,0.577877700328827,0.222700744867325,0.785150766372681,-0.0785331204533577,0.470493257045746,0.878901958465576,0.0984512493014336,0.498287439346313,0.861404061317444,0.483853906393051,0.253162741661072,0.83773148059845,0.577877700328827,0.222700744867325,0.785150766372681,-0.625847578048706,0.480478763580322,0.614373624324799,0.014976161532104,0.0756698846817017,0.997020423412323,0.368747025728226,0.423022657632828,0.827694058418274,-0.0980732291936874,0.653969585895538,0.750136971473694,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.225328087806702,-0.289088577032089,0.930405855178833,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.383537352085114,0.0364017225801945,0.922807693481445,0.589323878288269,-0.0393206179141998,0.806939482688904,0.434695482254028,-0.572132110595703,0.695488810539246,0.535627126693726,-0.624319195747375,0.568620383739471,0.718368828296661,-0.0318839028477669,0.694931387901306,0.558537840843201,0.599707722663879,0.57304984331131,0.368747025728226,0.423022657632828,0.827694058418274,0.589323878288269,-0.0393206179141998,0.806939482688904,0.718368828296661,-0.0318839028477669,0.694931387901306,-0.0980732291936874,0.653969585895538,0.750136971473694,\n0.368747025728226,0.423022657632828,0.827694058418274,0.558537840843201,0.599707722663879,0.57304984331131,-0.0848502963781357,0.77521288394928,0.625975549221039,-0.671684086322784,0.576999366283417,0.464663535356522,-0.625847578048706,0.480478763580322,0.614373624324799,-0.0980732291936874,0.653969585895538,0.750136971473694,-0.0848502963781357,0.77521288394928,0.625975549221039,-0.424899607896805,0.554023623466492,0.715903759002686,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.625847578048706,0.480478763580322,0.614373624324799,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.341256439685822,-0.287500321865082,0.894923210144043,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.00422305008396506,-0.606499910354614,0.795072376728058,-0.341256439685822,-0.287500321865082,0.894923210144043,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.00422305008396506,-0.606499910354614,0.795072376728058,-0.0179628469049931,-0.326483070850372,0.945032358169556,0.505278706550598,-0.368258208036423,0.78043532371521,0.434695482254028,-0.572132110595703,0.695488810539246,0.407602995634079,-0.0139898108318448,0.913052082061768,0.440102815628052,0.155542016029358,0.884373366832733,0.718368828296661,-0.0318839028477669,0.694931387901306,0.535627126693726,-0.624319195747375,0.568620383739471,0.416925370693207,0.468881458044052,0.778667747974396,0.558537840843201,0.599707722663879,0.57304984331131,0.718368828296661,-0.0318839028477669,0.694931387901306,0.440102815628052,0.155542016029358,0.884373366832733,-0.0785331204533577,0.470493257045746,0.878901958465576,-0.671684086322784,0.576999366283417,0.464663535356522,-0.0848502963781357,0.77521288394928,0.625975549221039,0.0984512493014336,0.498287439346313,0.861404061317444,0.416925370693207,0.468881458044052,0.778667747974396,0.0984512493014336,0.498287439346313,0.861404061317444,-0.0848502963781357,0.77521288394928,0.625975549221039,\n0.558537840843201,0.599707722663879,0.57304984331131,-0.0911645293235779,-0.702602386474609,0.705718696117401,-0.28100323677063,-0.703339219093323,0.652955651283264,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.28100323677063,-0.703339219093323,0.652955651283264,-0.468802720308304,-0.729726076126099,0.497718721628189,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.468802720308304,-0.729726076126099,0.497718721628189,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.928562819957733,-0.368498861789703,-0.0444939211010933,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.928562819957733,-0.368498861789703,-0.0444939211010933,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.528953433036804,-0.511403381824493,0.677255392074585,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.528953433036804,-0.511403381824493,0.677255392074585,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.0911645293235779,-0.702602386474609,0.705718696117401,\n-0.202346414327621,-0.358685582876205,0.911263167858124,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.358602106571198,-0.933434844017029,-0.010197676718235,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.358602106571198,-0.933434844017029,-0.010197676718235,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.556144297122955,-0.497788280248642,0.665515065193176,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.556144297122955,-0.497788280248642,0.665515065193176,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.319179713726044,-0.172680079936981,-0.931829333305359,\n-0.199148803949356,-0.719600260257721,-0.665218114852905,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.199148803949356,-0.719600260257721,-0.665218114852905,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.415939480066299,-0.73881071805954,-0.530238687992096,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.415939480066299,-0.73881071805954,-0.530238687992096,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.928562819957733,-0.368498861789703,-0.0444939211010933,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.928562819957733,-0.368498861789703,-0.0444939211010933,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.452344924211502,-0.552772045135498,-0.699876546859741,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.452344924211502,-0.552772045135498,-0.699876546859741,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.671101152896881,-0.0684311091899872,-0.738200783729553,\n-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.358602106571198,-0.933434844017029,-0.010197676718235,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.358602106571198,-0.933434844017029,-0.010197676718235,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.498913466930389,-0.494338691234589,-0.711838901042938,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.498913466930389,-0.494338691234589,-0.711838901042938,-0.28100323677063,-0.703339219093323,0.652955651283264,\n-0.0911645293235779,-0.702602386474609,0.705718696117401,0.206373274326324,-0.932199418544769,-0.29734542965889,0.265233933925629,-0.933141052722931,-0.242690622806549,-0.468802720308304,-0.729726076126099,0.497718721628189,-0.28100323677063,-0.703339219093323,0.652955651283264,0.265233933925629,-0.933141052722931,-0.242690622806549,0.333554297685623,-0.926460325717926,-0.174392700195313,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.468802720308304,-0.729726076126099,0.497718721628189,0.333554297685623,-0.926460325717926,-0.174392700195313,0.393486231565475,-0.915565848350525,-0.0831127688288689,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.6035475730896,-0.760226249694824,0.240387856960297,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.414534240961075,-0.909560441970825,0.0293457116931677,-0.0911645293235779,-0.702602386474609,0.705718696117401,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.0544524416327477,-0.920815229415894,-0.386179000139236,0.206373274326324,-0.932199418544769,-0.29734542965889,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.528953433036804,-0.511403381824493,0.677255392074585,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.0544524416327477,-0.920815229415894,-0.386179000139236,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.76525092124939,-0.642850756645203,-0.0336732342839241,\n-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.556144297122955,-0.497788280248642,0.665515065193176,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.528953433036804,-0.511403381824493,0.677255392074585,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.556144297122955,-0.497788280248642,0.665515065193176,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.199148803949356,-0.719600260257721,-0.665218114852905,0.238087520003319,-0.928487598896027,0.285000205039978,0.173939555883408,-0.926637887954712,0.333297610282898,-0.415939480066299,-0.73881071805954,-0.530238687992096,0.313057601451874,-0.922951817512512,0.223952934145927,0.238087520003319,-0.928487598896027,0.285000205039978,-0.199148803949356,-0.719600260257721,-0.665218114852905,-0.415939480066299,-0.73881071805954,-0.530238687992096,-0.576395452022552,-0.764892399311066,-0.287589907646179,0.382047444581985,-0.913609445095062,0.139131292700768,\n0.313057601451874,-0.922951817512512,0.223952934145927,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.634244203567505,-0.772702574729919,-0.0257883872836828,0.414534240961075,-0.909560441970825,0.0293457116931677,0.382047444581985,-0.913609445095062,0.139131292700768,-0.00627111084759235,-0.725264191627502,-0.688442051410675,0.173939555883408,-0.926637887954712,0.333297610282898,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.452344924211502,-0.552772045135498,-0.699876546859741,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.94632351398468,0.183760270476341,0.265902101993561,-0.945695042610168,0.244873836636543,0.21377021074295,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.945695042610168,0.244873836636543,0.21377021074295,-0.936998605728149,0.316089689731598,0.14873118698597,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.936998605728149,0.316089689731598,0.14873118698597,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.94632351398468,0.183760270476341,0.265902101993561,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.498913466930389,-0.494338691234589,-0.711838901042938,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.935486495494843,-0.0804866030812263,0.344074010848999,\n-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.452344924211502,-0.552772045135498,-0.699876546859741,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.498913466930389,-0.494338691234589,-0.711838901042938,0.499523967504501,-0.410259157419205,-0.762996256351471,0.265233933925629,-0.933141052722931,-0.242690622806549,0.206373274326324,-0.932199418544769,-0.29734542965889,0.291362255811691,-0.415095657110214,-0.861860573291779,0.719791650772095,-0.389199703931808,-0.574824810028076,0.333554297685623,-0.926460325717926,-0.174392700195313,0.265233933925629,-0.933141052722931,-0.242690622806549,0.499523967504501,-0.410259157419205,-0.762996256351471,0.89153379201889,-0.356688916683197,-0.279178351163864,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.333554297685623,-0.926460325717926,-0.174392700195313,0.719791650772095,-0.389199703931808,-0.574824810028076,0.93902975320816,-0.33998966217041,0.0512847155332565,0.414534240961075,-0.909560441970825,0.0293457116931677,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.89153379201889,-0.356688916683197,-0.279178351163864,0.206373274326324,-0.932199418544769,-0.29734542965889,-0.0544524416327477,-0.920815229415894,-0.386179000139236,0.0635582432150841,-0.298091143369675,-0.952418982982636,0.291362255811691,-0.415095657110214,-0.861860573291779,-0.0544524416327477,-0.920815229415894,-0.386179000139236,\n-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.250289469957352,-0.339470773935318,-0.906705439090729,0.0635582432150841,-0.298091143369675,-0.952418982982636,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.366778641939163,0.448393434286118,-0.815117657184601,-0.366778641939163,0.448393434286118,-0.815117657184601,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.345371842384338,0.869300365447998,-0.353603094816208,-0.345371842384338,0.869300365447998,-0.353603094816208,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.0507657080888748,-0.284880071878433,-0.957217931747437,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.250289469957352,-0.339470773935318,-0.906705439090729,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.0507657080888748,-0.284880071878433,-0.957217931747437,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.445206075906754,-0.782184541225433,-0.435865759849548,\n-0.128973305225372,-0.305629998445511,-0.943374931812286,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.128973305225372,-0.305629998445511,-0.943374931812286,0.20105354487896,-0.399605453014374,0.894367337226868,0.173939555883408,-0.926637887954712,0.333297610282898,0.238087520003319,-0.928487598896027,0.285000205039978,0.418255031108856,-0.396321922540665,0.817307531833649,0.418255031108856,-0.396321922540665,0.817307531833649,0.238087520003319,-0.928487598896027,0.285000205039978,0.313057601451874,-0.922951817512512,0.223952934145927,0.656683743000031,-0.378395289182663,0.652367532253265,0.656683743000031,-0.378395289182663,0.652367532253265,0.313057601451874,-0.922951817512512,0.223952934145927,0.382047444581985,-0.913609445095062,0.139131292700768,0.857872784137726,-0.350929707288742,0.375369966030121,0.857872784137726,-0.350929707288742,0.375369966030121,0.382047444581985,-0.913609445095062,0.139131292700768,0.414534240961075,-0.909560441970825,0.0293457116931677,0.93902975320816,-0.33998966217041,0.0512847155332565,-0.0351529642939568,-0.352832555770874,0.935025930404663,-0.0946064740419388,-0.913934707641602,0.394680887460709,0.173939555883408,-0.926637887954712,0.333297610282898,0.20105354487896,-0.399605453014374,0.894367337226868,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.0351529642939568,-0.352832555770874,0.935025930404663,-0.448035717010498,0.462348014116287,0.765178620815277,-0.945695042610168,0.244873836636543,0.21377021074295,-0.94632351398468,0.183760270476341,0.265902101993561,-0.454463303089142,0.250147342681885,0.85492068529129,-0.42182531952858,0.69061017036438,0.587470054626465,-0.936998605728149,0.316089689731598,0.14873118698597,-0.945695042610168,0.244873836636543,0.21377021074295,-0.448035717010498,0.462348014116287,0.765178620815277,\n-0.37904354929924,0.875075936317444,0.300945341587067,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.936998605728149,0.316089689731598,0.14873118698597,-0.42182531952858,0.69061017036438,0.587470054626465,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.37904354929924,0.875075936317444,0.300945341587067,-0.94632351398468,0.183760270476341,0.265902101993561,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.408599942922592,0.0173157677054405,0.912549316883087,-0.454463303089142,0.250147342681885,0.85492068529129,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.408599942922592,0.0173157677054405,0.912549316883087,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.225328087806702,-0.289088577032089,0.930405855178833,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.225328087806702,-0.289088577032089,0.930405855178833,0.220404133200645,0.441583395004272,-0.869727611541748,0.238343358039856,0.387237757444382,-0.890639841556549,0.249522879719734,0.613189935684204,-0.749490737915039,0.0635582432150841,-0.298091143369675,-0.952418982982636,-0.250289469957352,-0.339470773935318,-0.906705439090729,\n-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.508907198905945,-0.553594052791595,-0.659201860427856,0.568823277950287,-0.359092324972153,-0.739927589893341,-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.491910099983215,0.172478601336479,-0.853390634059906,0.655558884143829,0.209355428814888,-0.725543141365051,0.368004411458969,0.153596758842468,-0.917050004005432,0.368004411458969,0.153596758842468,-0.917050004005432,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.128973305225372,-0.305629998445511,-0.943374931812286,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.348750114440918,0.540946424007416,-0.765343248844147,-0.619978547096252,0.568114936351776,-0.541176497936249,0.568823277950287,-0.359092324972153,-0.739927589893341,0.531679213047028,-0.524689078330994,-0.664844751358032,0.566836953163147,-0.543319463729858,-0.619273662567139,0.568823277950287,-0.359092324972153,-0.739927589893341,0.566836953163147,-0.543319463729858,-0.619273662567139,0.49908322095871,-0.0296989660710096,-0.866044998168945,-0.619978547096252,0.568114936351776,-0.541176497936249,-0.348750114440918,0.540946424007416,-0.765343248844147,0.0124354995787144,0.454871088266373,-0.890470445156097,0.130445152521133,0.457035809755325,0.879830837249756,0.17189884185791,0.626526415348053,0.760207533836365,0.111461341381073,0.330251514911652,0.937288820743561,0.111461341381073,0.330251514911652,0.937288820743561,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.0351529642939568,-0.352832555770874,0.935025930404663,0.401947200298309,0.187930881977081,0.896169900894165,0.27214840054512,0.170062497258186,0.947108268737793,0.577877700328827,0.222700744867325,0.785150766372681,0.27214840054512,0.170062497258186,0.947108268737793,-0.408599942922592,0.0173157677054405,0.912549316883087,-0.228187650442123,-0.152172490954399,0.961651682853699,\n-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.225328087806702,-0.289088577032089,0.930405855178833,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.625847578048706,0.480478763580322,0.614373624324799,-0.671684086322784,0.576999366283417,0.464663535356522,-0.424899607896805,0.554023623466492,0.715903759002686,0.505278706550598,-0.368258208036423,0.78043532371521,0.535627126693726,-0.624319195747375,0.568620383739471,0.434695482254028,-0.572132110595703,0.695488810539246,0.505278706550598,-0.368258208036423,0.78043532371521,0.407602995634079,-0.0139898108318448,0.913052082061768,0.535627126693726,-0.624319195747375,0.568620383739471,-0.671684086322784,0.576999366283417,0.464663535356522,-0.0785331204533577,0.470493257045746,0.878901958465576,-0.424899607896805,0.554023623466492,0.715903759002686,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.151893243193626,-0.205408811569214,-0.966817259788513,\n-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.151893243193626,-0.205408811569214,-0.966817259788513,0.136130660772324,-0.198970586061478,0.970504581928253,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.105160817503929,0.278431057929993,0.954681813716888,0.263650745153427,-0.157535120844841,0.951667487621307,0.272030591964722,-0.10613701492548,0.956417441368103,-0.142246410250664,0.246101453900337,0.958749234676361,-0.179838627576828,0.158750206232071,0.970801949501038,0.326879501342773,0.00586882513016462,0.945047795772552,0.326879501342773,0.00586882513016462,0.945047795772552,-0.179838627576828,0.158750206232071,0.970801949501038,-0.172908544540405,0.0579710826277733,0.983230412006378,0.334599673748016,0.175780311226845,0.925820887088776,0.334599673748016,0.175780311226845,0.925820887088776,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.122078433632851,-0.0250803548842669,0.992203533649445,0.253547221422195,0.327525943517685,0.910187065601349,0.253547221422195,0.327525943517685,0.910187065601349,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.040074922144413,-0.0765580385923386,0.996259450912476,0.105446070432663,0.417101114988327,0.902722418308258,0.105446070432663,0.417101114988327,0.902722418308258,-0.040074922144413,-0.0765580385923386,0.996259450912476,0.0589041672646999,-0.0861395671963692,0.994540214538574,-0.067083902657032,0.418874800205231,0.90556263923645,-0.067083902657032,0.418874800205231,0.90556263923645,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.153722941875458,-0.0543801262974739,0.986616492271423,-0.182103842496872,0.370986968278885,0.910607993602753,-0.233089491724968,0.366702735424042,0.900665521621704,0.179733082652092,-0.0269720479846001,0.983345568180084,0.213143289089203,0.0353558585047722,0.976381063461304,-0.283145189285278,0.239479392766953,0.928697168827057,\n-0.283145189285278,0.239479392766953,0.928697168827057,0.213143289089203,0.0353558585047722,0.976381063461304,0.233963787555695,0.155204430222511,0.959777355194092,-0.418653875589371,-0.0103639494627714,0.908086717128754,-0.418653875589371,-0.0103639494627714,0.908086717128754,0.233963787555695,0.155204430222511,0.959777355194092,0.180598795413971,0.261213630437851,0.948236048221588,-0.224078983068466,-0.125485673546791,0.96645849943161,-0.224078983068466,-0.125485673546791,0.96645849943161,0.180598795413971,0.261213630437851,0.948236048221588,0.0773428529500961,0.322050452232361,0.943557918071747,-0.112397000193596,-0.326285779476166,0.938565135002136,-0.112397000193596,-0.326285779476166,0.938565135002136,0.0773428529500961,0.322050452232361,0.943557918071747,-0.0433657057583332,0.308572441339493,0.950211763381958,0.136130660772324,-0.198970586061478,0.970504581928253,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.299070537090302,0.902828752994537,0.308961302042007,-0.590794920921326,0.744754731655121,0.310325294733047,-0.105160817503929,0.278431057929993,0.954681813716888,-0.142246410250664,0.246101453900337,0.958749234676361,-0.486762404441834,0.520327687263489,0.70165628194809,-0.624243855476379,0.262774765491486,0.73570990562439,-0.179838627576828,0.158750206232071,0.970801949501038,-0.179838627576828,0.158750206232071,0.970801949501038,-0.624243855476379,0.262774765491486,0.73570990562439,-0.629434466362,-0.076258510351181,0.773302555084229,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.629434466362,-0.076258510351181,0.773302555084229,-0.466201931238174,-0.373760640621185,0.801847040653229,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.466201931238174,-0.373760640621185,0.801847040653229,-0.176110938191414,-0.553461611270905,0.814042508602142,-0.040074922144413,-0.0765580385923386,0.996259450912476,-0.040074922144413,-0.0765580385923386,0.996259450912476,-0.176110938191414,-0.553461611270905,0.814042508602142,\n0.167152568697929,-0.567055284976959,0.806540906429291,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.167152568697929,-0.567055284976959,0.806540906429291,0.439817190170288,-0.44538602232933,0.779866755008698,0.153722941875458,-0.0543801262974739,0.986616492271423,0.179733082652092,-0.0269720479846001,0.983345568180084,0.676802039146423,-0.601036489009857,0.425081342458725,0.85341203212738,-0.31018790602684,0.418893098831177,0.213143289089203,0.0353558585047722,0.976381063461304,0.213143289089203,0.0353558585047722,0.976381063461304,0.85341203212738,-0.31018790602684,0.418893098831177,0.902406454086304,0.256440877914429,0.346266776323318,0.233963787555695,0.155204430222511,0.959777355194092,0.233963787555695,0.155204430222511,0.959777355194092,0.902406454086304,0.256440877914429,0.346266776323318,0.674272358417511,0.674698412418365,0.300231248140335,0.180598795413971,0.261213630437851,0.948236048221588,0.180598795413971,0.261213630437851,0.948236048221588,0.674272358417511,0.674698412418365,0.300231248140335,0.264634191989899,0.922052919864655,0.282466232776642,0.0773428529500961,0.322050452232361,0.943557918071747,0.0773428529500961,0.322050452232361,0.943557918071747,0.264634191989899,0.922052919864655,0.282466232776642,-0.299070537090302,0.902828752994537,0.308961302042007,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.486762404441834,0.520327687263489,0.70165628194809,-0.549692809581757,0.641294836997986,0.535330533981323,-0.767678797245026,0.2869873046875,0.572981357574463,-0.624243855476379,0.262774765491486,0.73570990562439,-0.624243855476379,0.262774765491486,0.73570990562439,-0.767678797245026,0.2869873046875,0.572981357574463,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.629434466362,-0.076258510351181,0.773302555084229,-0.629434466362,-0.076258510351181,0.773302555084229,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.466201931238174,-0.373760640621185,0.801847040653229,\n-0.466201931238174,-0.373760640621185,0.801847040653229,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.176110938191414,-0.553461611270905,0.814042508602142,-0.176110938191414,-0.553461611270905,0.814042508602142,-0.220708161592484,-0.714994132518768,0.663378715515137,0.199516177177429,-0.725585639476776,0.658573269844055,0.167152568697929,-0.567055284976959,0.806540906429291,0.167152568697929,-0.567055284976959,0.806540906429291,0.199516177177429,-0.725585639476776,0.658573269844055,0.568061590194702,-0.524848997592926,0.633908152580261,0.439817190170288,-0.44538602232933,0.779866755008698,0.439817190170288,-0.44538602232933,0.779866755008698,0.568061590194702,-0.524848997592926,0.633908152580261,0.88259881734848,-0.254938364028931,0.395000904798508,-0.246941313147545,0.924433410167694,0.290590465068817,-0.236852958798409,0.965259969234467,-0.110334932804108,-0.690867304801941,0.718407988548279,-0.0811932682991028,-0.549692809581757,0.641294836997986,0.535330533981323,-0.549692809581757,0.641294836997986,0.535330533981323,-0.690867304801941,0.718407988548279,-0.0811932682991028,-0.959779977798462,0.278704285621643,-0.0338585041463375,-0.767678797245026,0.2869873046875,0.572981357574463,-0.767678797245026,0.2869873046875,0.572981357574463,-0.959779977798462,0.278704285621643,-0.0338585041463375,-0.971564769744873,-0.236011743545532,0.0189810190349817,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.971564769744873,-0.236011743545532,0.0189810190349817,-0.723084032535553,-0.687865734100342,0.0631685853004456,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.723084032535553,-0.687865734100342,0.0631685853004456,-0.28089165687561,-0.955799043178558,0.086879275739193,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.28089165687561,-0.955799043178558,0.086879275739193,\n0.236541092395782,-0.968005061149597,0.0837526917457581,0.199516177177429,-0.725585639476776,0.658573269844055,0.199516177177429,-0.725585639476776,0.658573269844055,0.236541092395782,-0.968005061149597,0.0837526917457581,0.690576732158661,-0.721194446086884,0.0546111837029457,0.568061590194702,-0.524848997592926,0.633908152580261,0.568061590194702,-0.524848997592926,0.633908152580261,0.690576732158661,-0.721194446086884,0.0546111837029457,0.959537088871002,-0.28148826956749,0.00727332010865211,0.88259881734848,-0.254938364028931,0.395000904798508,0.88259881734848,-0.254938364028931,0.395000904798508,0.959537088871002,-0.28148826956749,0.00727332010865211,0.971341848373413,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.722835063934326,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.280602157115936,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,-0.236852958798409,0.965259969234467,-0.110334932804108,-0.246941313147545,0.924433410167694,0.290590465068817,0.00198204442858696,0.093896672129631,0.995579957962036,0.272030591964722,-0.10613701492548,0.956417441368103,0.326879501342773,0.00586882513016462,0.945047795772552,0.00198204442858696,0.093896672129631,0.995579957962036,0.326879501342773,0.00586882513016462,0.945047795772552,0.334599673748016,0.175780311226845,0.925820887088776,0.00198204442858696,0.093896672129631,0.995579957962036,0.334599673748016,0.175780311226845,0.925820887088776,0.253547221422195,0.327525943517685,0.910187065601349,0.00198204442858696,0.093896672129631,0.995579957962036,0.253547221422195,0.327525943517685,0.910187065601349,0.105446070432663,0.417101114988327,0.902722418308258,\n0.00198204442858696,0.093896672129631,0.995579957962036,0.105446070432663,0.417101114988327,0.902722418308258,-0.067083902657032,0.418874800205231,0.90556263923645,0.00198204442858696,0.093896672129631,0.995579957962036,-0.067083902657032,0.418874800205231,0.90556263923645,-0.182103842496872,0.370986968278885,0.910607993602753,0.0314320400357246,0.12189869582653,0.992044746875763,-0.233089491724968,0.366702735424042,0.900665521621704,-0.283145189285278,0.239479392766953,0.928697168827057,0.0314320400357246,0.12189869582653,0.992044746875763,0.0314320400357246,0.12189869582653,0.992044746875763,0.0314320400357246,0.12189869582653,0.992044746875763,0.136130660772324,-0.198970586061478,0.970504581928253,0.263650745153427,-0.157535120844841,0.951667487621307,0.028663007542491,0.119241014122963,0.992451548576355,-0.283145189285278,0.239479392766953,0.928697168827057,-0.418653875589371,-0.0103639494627714,0.908086717128754,-0.224078983068466,-0.125485673546791,0.96645849943161,0.136130660772324,-0.198970586061478,0.970504581928253,0.028663007542491,0.119241014122963,0.992451548576355,-0.224078983068466,-0.125485673546791,0.96645849943161,-0.112397000193596,-0.326285779476166,0.938565135002136,-0.246941313147545,0.924433410167694,0.290590465068817,-0.549692809581757,0.641294836997986,0.535330533981323,-0.486762404441834,0.520327687263489,0.70165628194809,-0.114203341305256,0.279921561479568,0.953205943107605,-0.587047100067139,0.73501044511795,0.339316010475159,-0.486762404441834,0.520327687263489,0.70165628194809,-0.142246410250664,0.246101453900337,0.958749234676361,0.245040863752365,-0.134970381855965,0.960071861743927,-0.114203341305256,0.279921561479568,0.953205943107605,-0.142246410250664,0.246101453900337,0.958749234676361,0.272030591964722,-0.10613701492548,0.956417441368103,0.00198204442858696,0.093896672129631,0.995579957962036,0.0316664315760136,0.122062407433987,0.992017149925232,0.245040863752365,-0.134970381855965,0.960071861743927,0.272030591964722,-0.10613701492548,0.956417441368103,0.00198204442858696,0.093896672129631,0.995579957962036,\n-0.182103842496872,0.370986968278885,0.910607993602753,-0.211337894201279,0.346838146448135,0.91380500793457,0.0316664315760136,0.122062407433987,0.992017149925232,-0.182103842496872,0.370986968278885,0.910607993602753,0.153722941875458,-0.0543801262974739,0.986616492271423,0.196472957730293,-0.029518248513341,0.980064809322357,-0.211337894201279,0.346838146448135,0.91380500793457,0.153722941875458,-0.0543801262974739,0.986616492271423,0.439817190170288,-0.44538602232933,0.779866755008698,0.680254757404327,-0.584707081317902,0.44200798869133,0.196472957730293,-0.029518248513341,0.980064809322357,-0.106244966387749,0.278917253017426,0.954419791698456,-0.58428555727005,0.74019581079483,0.332746803760529,-0.58428555727005,0.74019581079483,0.332746803760529,-0.106244966387749,0.278917253017426,0.954419791698456,0.252784311771393,-0.144343972206116,0.956694781780243,-0.106244966387749,0.278917253017426,0.954419791698456,-0.106244966387749,0.278917253017426,0.954419791698456,0.252784311771393,-0.144343972206116,0.956694781780243,0.0315654873847961,0.122002728283405,0.992027699947357,0.0315654873847961,0.122002728283405,0.992027699947357,0.252784311771393,-0.144343972206116,0.956694781780243,0.252784311771393,-0.144343972206116,0.956694781780243,0.0315654873847961,0.122002728283405,0.992027699947357,-0.220397889614105,0.355129688978195,0.908464431762695,-0.220397889614105,0.355129688978195,0.908464431762695,0.0315654873847961,0.122002728283405,0.992027699947357,-0.220397889614105,0.355129688978195,0.908464431762695,0.189345061779022,-0.0369042716920376,0.981216847896576,0.189345061779022,-0.0369042716920376,0.981216847896576,-0.220397889614105,0.355129688978195,0.908464431762695,0.189345061779022,-0.0369042716920376,0.981216847896576,0.676772654056549,-0.6009920835495,0.4251908659935,0.676772654056549,-0.6009920835495,0.4251908659935,0.189345061779022,-0.0369042716920376,0.981216847896576,0.285419285297394,-0.260888695716858,-0.922210872173309,0.285419285297394,-0.260888695716858,-0.922210872173309,-0.0701178461313248,0.161541283130646,-0.984371840953827,\n-0.0701178461313248,0.161541283130646,-0.984371840953827,0.304495304822922,-0.222503274679184,-0.926161408424377,0.359685301780701,-0.109944850206375,-0.926573574542999,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.106314696371555,0.128722757101059,-0.985965311527252,0.359685301780701,-0.109944850206375,-0.926573574542999,0.368203610181808,0.0610124915838242,-0.92774111032486,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.144488215446472,0.0409091152250767,-0.988660514354706,0.368203610181808,0.0610124915838242,-0.92774111032486,0.287971884012222,0.213878870010376,-0.933449566364288,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.137990683317184,-0.0606634132564068,-0.988573968410492,0.287971884012222,0.213878870010376,-0.933449566364288,0.140473276376724,0.304339796304703,-0.942148923873901,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.0875953435897827,-0.144417569041252,-0.985632121562958,0.140473276376724,0.304339796304703,-0.942148923873901,-0.0318344980478287,0.306514382362366,-0.951333522796631,0.0928165391087532,-0.206099733710289,-0.974119126796722,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.0318344980478287,0.306514382362366,-0.951333522796631,-0.147164434194565,0.259054154157639,-0.954585552215576,0.187471479177475,-0.174140021204948,-0.9667107462883,0.0928165391087532,-0.206099733710289,-0.974119126796722,-0.186045140028,0.244106322526932,-0.951734900474548,-0.186045140028,0.244106322526932,-0.951734900474548,0.222749635577202,-0.155833333730698,-0.962340116500854,0.222749635577202,-0.155833333730698,-0.962340116500854,-0.248975187540054,0.126625880599022,-0.960196435451508,-0.387186944484711,-0.118426606059074,-0.914363980293274,0.268629968166351,0.0369143784046173,-0.962535858154297,0.247289061546326,-0.083899550139904,-0.965302526950836,-0.387186944484711,-0.118426606059074,-0.914363980293274,-0.191727757453918,-0.240914106369019,-0.951420426368713,0.215820819139481,0.143767416477203,-0.965791046619415,0.268629968166351,0.0369143784046173,-0.962535858154297,\n-0.191727757453918,-0.240914106369019,-0.951420426368713,-0.0825225338339806,-0.437338262796402,-0.895502805709839,0.112991258502007,0.205170169472694,-0.972182154655457,0.215820819139481,0.143767416477203,-0.965791046619415,-0.0825225338339806,-0.437338262796402,-0.895502805709839,0.168216422200203,-0.316025346517563,-0.933719038963318,-0.00743300467729568,0.191485971212387,-0.981467187404633,0.112991258502007,0.205170169472694,-0.972182154655457,-0.563491702079773,0.64732563495636,0.513270497322083,-0.0701178461313248,0.161541283130646,-0.984371840953827,-0.0701178461313248,0.161541283130646,-0.984371840953827,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.106314696371555,0.128722757101059,-0.985965311527252,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.152386710047722,-0.647121250629425,-0.747002243995667,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.00595734408125281,-0.196369305253029,-0.980511903762817,0.0928165391087532,-0.206099733710289,-0.974119126796722,0.190285310149193,-0.661201238632202,-0.725675106048584,-0.152386710047722,-0.647121250629425,-0.747002243995667,0.0928165391087532,-0.206099733710289,-0.974119126796722,0.187471479177475,-0.174140021204948,-0.9667107462883,0.462890416383743,-0.538564682006836,-0.704045832157135,0.190285310149193,-0.661201238632202,-0.725675106048584,0.897243618965149,-0.439534097909927,-0.0419950634241104,\n0.222749635577202,-0.155833333730698,-0.962340116500854,0.222749635577202,-0.155833333730698,-0.962340116500854,0.562596559524536,-0.566279470920563,0.602339327335358,0.247289061546326,-0.083899550139904,-0.965302526950836,0.268629968166351,0.0369143784046173,-0.962535858154297,0.765360236167908,0.200960800051689,0.611423313617706,0.713191151618958,-0.304302185773849,0.631473302841187,0.268629968166351,0.0369143784046173,-0.962535858154297,0.215820819139481,0.143767416477203,-0.965791046619415,0.56377899646759,0.570771217346191,0.596970200538635,0.765360236167908,0.200960800051689,0.611423313617706,0.215820819139481,0.143767416477203,-0.965791046619415,0.112991258502007,0.205170169472694,-0.972182154655457,0.205752313137054,0.791630685329437,0.575314521789551,0.56377899646759,0.570771217346191,0.596970200538635,0.112991258502007,0.205170169472694,-0.972182154655457,-0.00743300467729568,0.191485971212387,-0.981467187404633,-0.294516265392303,0.773154675960541,0.56168669462204,0.205752313137054,0.791630685329437,0.575314521789551,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.152386710047722,-0.647121250629425,-0.747002243995667,-0.203609570860863,-0.789041042327881,-0.579618275165558,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.152386710047722,-0.647121250629425,-0.747002243995667,0.190285310149193,-0.661201238632202,-0.725675106048584,\n0.216090649366379,-0.800804913043976,-0.558584153652191,-0.203609570860863,-0.789041042327881,-0.579618275165558,0.190285310149193,-0.661201238632202,-0.725675106048584,0.462890416383743,-0.538564682006836,-0.704045832157135,0.585278213024139,-0.600160777568817,-0.54521232843399,0.216090649366379,-0.800804913043976,-0.558584153652191,0.462890416383743,-0.538564682006836,-0.704045832157135,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.585278213024139,-0.600160777568817,-0.54521232843399,0.713191151618958,-0.304302185773849,0.631473302841187,0.765360236167908,0.200960800051689,0.611423313617706,-0.0554697476327419,0.0163222346454859,0.9983269572258,0.765360236167908,0.200960800051689,0.611423313617706,0.56377899646759,0.570771217346191,0.596970200538635,-0.0524273775517941,0.0131540298461914,0.998538076877594,-0.0554697476327419,0.0163222346454859,0.9983269572258,0.56377899646759,0.570771217346191,0.596970200538635,0.205752313137054,0.791630685329437,0.575314521789551,-0.049451969563961,0.00981415808200836,0.998728275299072,-0.0524273775517941,0.0131540298461914,0.998538076877594,0.205752313137054,0.791630685329437,0.575314521789551,-0.294516265392303,0.773154675960541,0.56168669462204,-0.049451969563961,0.00981415808200836,0.998728275299072,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.518197417259216,0.525039672851563,0.675133109092712,-0.197243928909302,0.699767708778381,0.686600387096405,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.708945393562317,0.213501617312431,0.672170698642731,-0.518197417259216,0.525039672851563,0.675133109092712,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.708945393562317,0.213501617312431,0.672170698642731,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.560215413570404,-0.568411111831665,-0.602550804615021,\n-0.54542750120163,-0.47233721613884,0.692391753196716,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.203609570860863,-0.789041042327881,-0.579618275165558,-0.234902039170265,-0.663679361343384,0.710176527500153,-0.54542750120163,-0.47233721613884,0.692391753196716,-0.203609570860863,-0.789041042327881,-0.579618275165558,0.216090649366379,-0.800804913043976,-0.558584153652191,0.129999682307243,-0.674115300178528,0.727096021175385,-0.234902039170265,-0.663679361343384,0.710176527500153,0.216090649366379,-0.800804913043976,-0.558584153652191,0.585278213024139,-0.600160777568817,-0.54521232843399,0.451691657304764,-0.500417768955231,0.738618135452271,0.129999682307243,-0.674115300178528,0.727096021175385,0.585278213024139,-0.600160777568817,-0.54521232843399,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.64369797706604,-0.188760459423065,0.741634964942932,0.451691657304764,-0.500417768955231,0.738618135452271,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.634316861629486,0.173373848199844,0.753381490707397,0.654116809368134,0.177300214767456,0.735320270061493,0.64369797706604,-0.188760459423065,0.741634964942932,0.634316861629486,0.173373848199844,0.753381490707397,0.465378105640411,0.486588507890701,0.739361107349396,0.479970723390579,0.499263644218445,0.72136253118515,0.654116809368134,0.177300214767456,0.735320270061493,0.465378105640411,0.486588507890701,0.739361107349396,0.161993652582169,0.672100722789764,0.722522437572479,0.168181717395782,0.690484523773193,0.703523993492126,0.479970723390579,0.499263644218445,0.72136253118515,0.161993652582169,0.672100722789764,0.722522437572479,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.197243928909302,0.699767708778381,0.686600387096405,0.168181717395782,0.690484523773193,0.703523993492126,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.359685301780701,-0.109944850206375,-0.926573574542999,0.304495304822922,-0.222503274679184,-0.926161408424377,0.037516862154007,-0.0272734649479389,-0.998923718929291,\n0.368203610181808,0.0610124915838242,-0.92774111032486,0.359685301780701,-0.109944850206375,-0.926573574542999,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.287971884012222,0.213878870010376,-0.933449566364288,0.368203610181808,0.0610124915838242,-0.92774111032486,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.140473276376724,0.304339796304703,-0.942148923873901,0.287971884012222,0.213878870010376,-0.933449566364288,0.037516862154007,-0.0272734649479389,-0.998923718929291,-0.0318344980478287,0.306514382362366,-0.951333522796631,0.140473276376724,0.304339796304703,-0.942148923873901,0.037516862154007,-0.0272734649479389,-0.998923718929291,-0.147164434194565,0.259054154157639,-0.954585552215576,-0.0318344980478287,0.306514382362366,-0.951333522796631,-0.387186944484711,-0.118426606059074,-0.914363980293274,-0.248975187540054,0.126625880599022,-0.960196435451508,0.0634305104613304,-0.00267115444876254,-0.997982680797577,-0.191727757453918,-0.240914106369019,-0.951420426368713,-0.0825225338339806,-0.437338262796402,-0.895502805709839,-0.191727757453918,-0.240914106369019,-0.951420426368713,0.0634305104613304,-0.00267115444876254,-0.997982680797577,0.168216422200203,-0.316025346517563,-0.933719038963318,-0.197243928909302,0.699767708778381,0.686600387096405,-0.518197417259216,0.525039672851563,0.675133109092712,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.518197417259216,0.525039672851563,0.675133109092712,-0.708945393562317,0.213501617312431,0.672170698642731,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.708945393562317,0.213501617312431,0.672170698642731,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.54542750120163,-0.47233721613884,0.692391753196716,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.54542750120163,-0.47233721613884,0.692391753196716,-0.234902039170265,-0.663679361343384,0.710176527500153,-0.0474429130554199,0.0178848132491112,0.998713791370392,\n-0.234902039170265,-0.663679361343384,0.710176527500153,0.129999682307243,-0.674115300178528,0.727096021175385,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.129999682307243,-0.674115300178528,0.727096021175385,0.451691657304764,-0.500417768955231,0.738618135452271,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.451691657304764,-0.500417768955231,0.738618135452271,0.64369797706604,-0.188760459423065,0.741634964942932,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.64369797706604,-0.188760459423065,0.741634964942932,0.654116809368134,0.177300214767456,0.735320270061493,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.654116809368134,0.177300214767456,0.735320270061493,0.479970723390579,0.499263644218445,0.72136253118515,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.479970723390579,0.499263644218445,0.72136253118515,0.168181717395782,0.690484523773193,0.703523993492126,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.168181717395782,0.690484523773193,0.703523993492126,-0.197243928909302,0.699767708778381,0.686600387096405,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.525119662284851,0.574203789234161,-0.628123641014099,0.462890416383743,-0.538564682006836,-0.704045832157135,0.187471479177475,-0.174140021204948,-0.9667107462883,0.230113714933395,-0.14894126355648,-0.961698591709137,0.690046310424805,-0.637357771396637,-0.342944711446762,-0.147164434194565,0.259054154157639,-0.954585552215576,-0.176630616188049,0.235003083944321,-0.955811262130737,0.230113714933395,-0.14894126355648,-0.961698591709137,0.187471479177475,-0.174140021204948,-0.9667107462883,0.0672855526208878,0.000956431380473077,-0.997733294963837,-0.176630616188049,0.235003083944321,-0.955811262130737,-0.147164434194565,0.259054154157639,-0.954585552215576,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.277595341205597,-0.251689046621323,-0.92714262008667,\n0.0672855526208878,0.000956431380473077,-0.997733294963837,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.304495304822922,-0.222503274679184,-0.926161408424377,-0.0779055655002594,0.162667319178581,-0.983600556850433,0.277595341205597,-0.251689046621323,-0.92714262008667,0.304495304822922,-0.222503274679184,-0.926161408424377,-0.106314696371555,0.128722757101059,-0.985965311527252,-0.568253636360168,0.691138505935669,-0.446559488773346,-0.0779055655002594,0.162667319178581,-0.983600556850433,-0.106314696371555,0.128722757101059,-0.985965311527252,-0.457403212785721,0.433727949857712,-0.776313304901123,0.0672584101557732,0.000950529880356044,-0.997735142707825,-0.186045140028,0.244106322526932,-0.951734900474548,-0.186045140028,0.244106322526932,-0.951734900474548,0.0672584101557732,0.000950529880356044,-0.997735142707825,0.285419285297394,-0.260888695716858,-0.922210872173309,0.0672584101557732,0.000950529880356044,-0.997735142707825,0.0672584101557732,0.000950529880356044,-0.997735142707825,0.285419285297394,-0.260888695716858,-0.922210872173309,-0.0494545698165894,0.00981395319104195,0.998728156089783,-0.563491702079773,0.64732563495636,0.513270497322083,-0.376014769077301,0.9161736369133,-0.138703793287277,0.161993652582169,0.672100722789764,0.722522437572479,-0.0524277351796627,0.0131527418270707,0.998538076877594,-0.0494545698165894,0.00981395319104195,0.998728156089783,0.161993652582169,0.672100722789764,0.722522437572479,0.465378105640411,0.486588507890701,0.739361107349396,-0.0554704740643501,0.0163217782974243,0.998326897621155,-0.0524277351796627,0.0131527418270707,0.998538076877594,0.465378105640411,0.486588507890701,0.739361107349396,0.634316861629486,0.173373848199844,0.753381490707397,0.562596559524536,-0.566279470920563,0.602339327335358,-0.0554704740643501,0.0163217782974243,0.998326897621155,0.634316861629486,0.173373848199844,0.753381490707397,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.0671186223626137,0.000861435197293758,-0.997744619846344,-0.248975187540054,0.126625880599022,-0.960196435451508,\n-0.198622241616249,0.25632917881012,-0.945962250232697,0.0671186223626137,0.000861435197293758,-0.997744619846344,0.213518917560577,-0.146410331130028,-0.965905606746674,-0.198622241616249,0.25632917881012,-0.945962250232697,-0.248975187540054,0.126625880599022,-0.960196435451508,0.247289061546326,-0.083899550139904,-0.965302526950836,0.562577784061432,-0.566266417503357,0.602369129657745,0.213518917560577,-0.146410331130028,-0.965905606746674,0.247289061546326,-0.083899550139904,-0.965302526950836,0.713191151618958,-0.304302185773849,0.631473302841187,0.713191151618958,-0.304302185773849,0.631473302841187,-0.0554691106081009,0.016322173178196,0.9983269572258,-0.0554691106081009,0.016322173178196,0.9983269572258,0.562577784061432,-0.566266417503357,0.602369129657745,-0.0554691106081009,0.016322173178196,0.9983269572258,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0554691106081009,0.016322173178196,0.9983269572258,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.294516265392303,0.773154675960541,0.56168669462204,-0.559975147247314,0.642372965812683,0.523244559764862,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.294516265392303,0.773154675960541,0.56168669462204,-0.00743300467729568,0.191485971212387,-0.981467187404633,-0.0692261606454849,0.161251112818718,-0.984482526779175,-0.559975147247314,0.642372965812683,0.523244559764862,0.168216422200203,-0.316025346517563,-0.933719038963318,0.295631766319275,-0.272996246814728,-0.915464341640472,-0.0692261606454849,0.161251112818718,-0.984482526779175,-0.00743300467729568,0.191485971212387,-0.981467187404633,0.168216422200203,-0.316025346517563,-0.933719038963318,0.0671186223626137,0.000861435197293758,-0.997744619846344,0.0671186223626137,0.000861435197293758,-0.997744619846344,\n0.295631766319275,-0.272996246814728,-0.915464341640472,0.448934882879257,0.813904881477356,-0.368803858757019,0.44893816113472,0.813904583454132,-0.368800550699234,0.440851420164108,0.897496819496155,0.0122249089181423,0.440847247838974,0.897498905658722,0.0122235044836998,0.44893816113472,0.813904583454132,-0.368800550699234,0.539011299610138,0.767137050628662,-0.347803890705109,0.440850377082825,0.897497296333313,0.0122277606278658,0.440851420164108,0.897496819496155,0.0122249089181423,0.539011299610138,0.767137050628662,-0.347803890705109,0.545111775398254,0.763338685035706,-0.346651464700699,0.440852701663971,0.897496223449707,0.012224905192852,0.440850377082825,0.897497296333313,0.0122277606278658,0.545111775398254,0.763338685035706,-0.346651464700699,0.455776125192642,0.810517728328705,-0.367871195077896,0.442016541957855,0.896921515464783,0.012377162463963,0.440852701663971,0.897496223449707,0.012224905192852,0.455776125192642,0.810517728328705,-0.367871195077896,0.142660588026047,0.912153422832489,-0.384218811988831,0.122088372707367,0.992165386676788,-0.0265009626746178,0.442016541957855,0.896921515464783,0.012377162463963,0.122088372707367,0.992165386676788,-0.0265009626746178,0.142660588026047,0.912153422832489,-0.384218811988831,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.61342579126358,0.783559501171112,-0.0987081080675125,0.142660588026047,0.912153422832489,-0.384218811988831,0.137940660119057,0.361901491880417,-0.921954274177551,-0.202121838927269,0.379350662231445,-0.902906358242035,-0.513519883155823,0.72038060426712,-0.466207087039948,0.142660588026047,0.912153422832489,-0.384218811988831,0.455776125192642,0.810517728328705,-0.367871195077896,0.283052384853363,0.298188000917435,-0.911572933197021,0.137940660119057,0.361901491880417,-0.921954274177551,0.455776125192642,0.810517728328705,-0.367871195077896,0.545111775398254,0.763338685035706,-0.346651464700699,0.492568016052246,0.186314031481743,-0.850096344947815,0.283052384853363,0.298188000917435,-0.911572933197021,0.545111775398254,0.763338685035706,-0.346651464700699,\n0.539011299610138,0.767137050628662,-0.347803890705109,0.478817075490952,0.194986343383789,-0.85598748922348,0.492568016052246,0.186314031481743,-0.850096344947815,0.539011299610138,0.767137050628662,-0.347803890705109,0.44893816113472,0.813904583454132,-0.368800550699234,0.316425144672394,0.418457597494125,-0.851333260536194,0.478817075490952,0.194986343383789,-0.85598748922348,0.44893816113472,0.813904583454132,-0.368800550699234,0.448934882879257,0.813904881477356,-0.368803858757019,0.388678818941116,0.606405913829803,-0.693686246871948,0.316425144672394,0.418457597494125,-0.851333260536194,-0.61342579126358,0.783559501171112,-0.0987081080675125,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.994015336036682,-0.013940011151135,-0.108347617089748,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.202121838927269,0.379350662231445,-0.902906358242035,-0.407863765954971,-0.0665257051587105,-0.910615980625153,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.202121838927269,0.379350662231445,-0.902906358242035,0.137940660119057,0.361901491880417,-0.921954274177551,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.407863765954971,-0.0665257051587105,-0.910615980625153,0.137940660119057,0.361901491880417,-0.921954274177551,0.283052384853363,0.298188000917435,-0.911572933197021,-0.0553795695304871,-0.388206869363785,-0.919906795024872,-0.18805918097496,-0.322835922241211,-0.927583277225494,0.283052384853363,0.298188000917435,-0.911572933197021,0.492568016052246,0.186314031481743,-0.850096344947815,0.161093965172768,-0.487442761659622,-0.858165621757507,-0.0553795695304871,-0.388206869363785,-0.919906795024872,0.492568016052246,0.186314031481743,-0.850096344947815,0.478817075490952,0.194986343383789,-0.85598748922348,0.145911514759064,-0.481736391782761,-0.864083230495453,0.161093965172768,-0.487442761659622,-0.858165621757507,0.478817075490952,0.194986343383789,-0.85598748922348,0.316425144672394,0.418457597494125,-0.851333260536194,\n-0.0688509345054626,-0.381582528352737,-0.921766996383667,0.145911514759064,-0.481736391782761,-0.864083230495453,-0.994015336036682,-0.013940011151135,-0.108347617089748,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.698107659816742,-0.714397788047791,-0.0477649942040443,-0.407863765954971,-0.0665257051587105,-0.910615980625153,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.0553795695304871,-0.388206869363785,-0.919906795024872,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.0553795695304871,-0.388206869363785,-0.919906795024872,0.161093965172768,-0.487442761659622,-0.858165621757507,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.360949605703354,-0.846770226955414,-0.390762716531754,0.161093965172768,-0.487442761659622,-0.858165621757507,0.145911514759064,-0.481736391782761,-0.864083230495453,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.267079532146454,-0.890150487422943,-0.36918917298317,0.145911514759064,-0.481736391782761,-0.864083230495453,-0.0688509345054626,-0.381582528352737,-0.921766996383667,-0.365646749734879,-0.844457924365997,-0.391399145126343,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.442009299993515,-0.896925032138824,-0.0123796230182052,-0.698107659816742,-0.714397788047791,-0.0477649942040443,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.440844893455505,-0.897499859333038,-0.0122388359159231,-0.442009299993515,-0.896925032138824,-0.0123796230182052,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.273802310228348,-0.887621462345123,-0.370351791381836,\n-0.440846532583237,-0.897499084472656,-0.0122378673404455,-0.440844893455505,-0.897499859333038,-0.0122388359159231,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.365646749734879,-0.844457924365997,-0.391399145126343,-0.440847545862198,-0.897498548030853,-0.0122386990115047,-0.440846532583237,-0.897499084472656,-0.0122378673404455,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.845829725265503,-0.252385228872299,0.469972103834152,-0.235922157764435,0.199316576123238,0.951111793518066,-0.421170502901077,0.887910008430481,0.185016736388206,-0.235922157764435,0.199316576123238,0.951111793518066,0.433050602674484,0.2669917345047,0.860919594764709,0.224865674972534,0.969921231269836,0.0932112112641335,-0.421170502901077,0.887910008430481,0.185016736388206,0.433050602674484,0.2669917345047,0.860919594764709,0.957085728645325,-0.0379634574055672,0.287307798862457,0.726850271224976,0.572953879833221,-0.378698468208313,0.224865674972534,0.969921231269836,0.0932112112641335,0.726850271224976,0.572953879833221,-0.378698468208313,0.957085728645325,-0.0379634574055672,0.287307798862457,0.456055998802185,-0.77651709318161,-0.434780597686768,0.24622069299221,-0.288397252559662,-0.925312042236328,0.24622069299221,-0.288397252559662,-0.925312042236328,0.456055998802185,-0.77651709318161,-0.434780597686768,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.845829725265503,-0.252385228872299,0.469972103834152,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.370245814323425,0.399501115083694,0.838639914989471,-0.349220633506775,0.932596325874329,0.0911537334322929,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.349220633506775,0.932596325874329,0.0911537334322929,-0.370245814323425,0.399501115083694,0.838639914989471,0.375980079174042,0.371540576219559,0.848879635334015,\n0.369482100009918,0.916309058666229,0.154469192028046,0.369482100009918,0.916309058666229,0.154469192028046,0.375980079174042,0.371540576219559,0.848879635334015,0.894815683364868,-0.12337201833725,0.429050445556641,0.928892433643341,0.347320407629013,-0.128558844327927,0.894815683364868,-0.12337201833725,0.429050445556641,0.416108936071396,-0.85736757516861,-0.302942514419556,0.484689444303513,-0.474302530288696,-0.734923958778381,0.928892433643341,0.347320407629013,-0.128558844327927,0.416108936071396,-0.85736757516861,-0.302942514419556,-0.688949525356293,-0.657936096191406,-0.304086625576019,-0.60913348197937,-0.356543242931366,-0.708401918411255,0.484689444303513,-0.474302530288696,-0.734923958778381,-0.688949525356293,-0.657936096191406,-0.304086625576019,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.60913348197937,-0.356543242931366,-0.708401918411255,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.968230009078979,0.101840510964394,0.228383734822273,-0.409153193235397,0.62424099445343,0.665519952774048,-0.1602942943573,0.98438024520874,-0.0728094503283501,-0.1602942943573,0.98438024520874,-0.0728094503283501,-0.409153193235397,0.62424099445343,0.665519952774048,0.232475742697716,0.544684231281281,0.805775463581085,0.487440526485443,0.864142239093781,0.125139698386192,0.232475742697716,0.544684231281281,0.805775463581085,0.731430292129517,-0.0698081851005554,0.678333699703217,0.977178752422333,0.20803302526474,0.0429406240582466,0.487440526485443,0.864142239093781,0.125139698386192,0.731430292129517,-0.0698081851005554,0.678333699703217,0.338283896446228,-0.929607927799225,0.146263748407364,0.618484795093536,-0.605106949806213,-0.501320481300354,0.977178752422333,0.20803302526474,0.0429406240582466,0.338283896446228,-0.929607927799225,0.146263748407364,-0.681281208992004,-0.719342052936554,-0.135657235980034,-0.411054730415344,-0.414192497730255,-0.812082886695862,0.618484795093536,-0.605106949806213,-0.501320481300354,-0.681281208992004,-0.719342052936554,-0.135657235980034,\n-0.968230009078979,0.101840510964394,0.228383734822273,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.411054730415344,-0.414192497730255,-0.812082886695862,-0.46152138710022,0.495068192481995,-0.73614227771759,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.469395011663437,0.732399642467499,0.493212997913361,0.00481484783813357,0.982931971549988,-0.183906376361847,-0.469395011663437,0.732399642467499,0.493212997913361,0.0926875099539757,0.587645053863525,0.803792417049408,0.554872810840607,0.810436189174652,0.187907695770264,0.00481484783813357,0.982931971549988,-0.183906376361847,0.0926875099539757,0.587645053863525,0.803792417049408,0.564271926879883,-0.0617093704640865,0.823279500007629,0.960403800010681,0.128028109669685,0.247453689575195,0.554872810840607,0.810436189174652,0.187907695770264,0.564271926879883,-0.0617093704640865,0.823279500007629,0.173397973179817,-0.937193632125854,0.302656918764114,0.640678882598877,-0.692017734050751,-0.33262899518013,0.960403800010681,0.128028109669685,0.247453689575195,0.640678882598877,-0.692017734050751,-0.33262899518013,0.173397973179817,-0.937193632125854,0.302656918764114,-0.733310759067535,-0.636212587356567,-0.239768356084824,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.733310759067535,-0.636212587356567,-0.239768356084824,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.46152138710022,0.495068192481995,-0.73614227771759,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.490928202867508,0.838506758213043,0.236423268914223,0.226359263062477,0.93932580947876,-0.257737308740616,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.226359263062477,0.93932580947876,-0.257737308740616,-0.490928202867508,0.838506758213043,0.236423268914223,-0.0895224064588547,0.63932603597641,0.763706743717194,0.57053416967392,0.761871993541718,0.306662291288376,0.57053416967392,0.761871993541718,0.306662291288376,-0.0895224064588547,0.63932603597641,0.763706743717194,0.200342118740082,-0.0948356613516808,0.975125253200531,\n0.818824291229248,0.0307636950165033,0.573219299316406,0.200342118740082,-0.0948356613516808,0.975125253200531,-0.106568887829781,-0.917000472545624,0.384386867284775,0.603054106235504,-0.796112895011902,-0.0502992123365402,0.818824291229248,0.0307636950165033,0.573219299316406,-0.106568887829781,-0.917000472545624,0.384386867284775,-0.688571929931641,-0.57403826713562,-0.443112581968308,0.0145619604736567,-0.473971128463745,-0.880419969558716,0.603054106235504,-0.796112895011902,-0.0502992123365402,-0.688571929931641,-0.57403826713562,-0.443112581968308,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.471161872148514,0.881984531879425,-0.010475798510015,0.0175805017352104,0.980271637439728,-0.196871712803841,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.0175805017352104,0.980271637439728,-0.196871712803841,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.272446572780609,0.69793826341629,0.662310421466827,0.0640470013022423,0.825317442417145,0.561025023460388,0.0640470013022423,0.825317442417145,0.561025023460388,-0.272446572780609,0.69793826341629,0.662310421466827,-0.156113177537918,-0.0394117124378681,0.986952602863312,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.156113177537918,-0.0394117124378681,0.986952602863312,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.0146371489390731,-0.971577882766724,0.236267194151878,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.0737737640738487,-0.545523285865784,-0.834842383861542,-0.0146371489390731,-0.971577882766724,0.236267194151878,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.0483600646257401,0.41675278544426,-0.907732546329498,-0.0737737640738487,-0.545523285865784,-0.834842383861542,\n-0.126118883490562,0.0425354726612568,0.991102814674377,-0.488242149353027,0.767777740955353,0.414893865585327,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.693171083927155,-0.380507975816727,0.612149894237518,0.21278840303421,0.936659038066864,0.278192192316055,-0.488242149353027,0.767777740955353,0.414893865585327,-0.126118883490562,0.0425354726612568,0.991102814674377,0.426090598106384,0.13983453810215,0.89380818605423,0.732098400592804,0.597899973392487,-0.32641613483429,0.21278840303421,0.936659038066864,0.278192192316055,0.426090598106384,0.13983453810215,0.89380818605423,0.951123833656311,-0.0359408818185329,0.306711047887802,0.300222218036652,-0.191066533327103,-0.934537410736084,0.732098400592804,0.597899973392487,-0.32641613483429,0.951123833656311,-0.0359408818185329,0.306711047887802,0.565304636955261,-0.708869636058807,-0.421822786331177,-0.513763785362244,-0.837060868740082,-0.188084691762924,-0.686947405338287,-0.371219843626022,-0.624739229679108,0.300222218036652,-0.191066533327103,-0.934537410736084,0.565304636955261,-0.708869636058807,-0.421822786331177,-0.693171083927155,-0.380507975816727,0.612149894237518,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.686947405338287,-0.371219843626022,-0.624739229679108,-0.513763785362244,-0.837060868740082,-0.188084691762924,0.839519679546356,-0.36930912733078,0.398519098758698,0.256522864103317,0.500971019268036,0.826573669910431,-0.378572434186935,0.294946253299713,0.877319574356079,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.622146844863892,-0.293455481529236,-0.725821733474731,0.408187568187714,-0.202498286962509,-0.890155792236328,0.839519679546356,-0.36930912733078,0.398519098758698,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.226359263062477,0.93932580947876,-0.257737308740616,-0.129192128777504,0.97855806350708,-0.160416796803474,-0.361195623874664,0.398085296154022,-0.843247175216675,0.226359263062477,0.93932580947876,-0.257737308740616,0.57053416967392,0.761871993541718,0.306662291288376,\n0.158035054802895,0.827060580253601,0.539440214633942,-0.129192128777504,0.97855806350708,-0.160416796803474,0.57053416967392,0.761871993541718,0.306662291288376,0.818824291229248,0.0307636950165033,0.573219299316406,0.379477560520172,-0.0227062478661537,0.924922287464142,0.158035054802895,0.827060580253601,0.539440214633942,0.818824291229248,0.0307636950165033,0.573219299316406,0.603054106235504,-0.796112895011902,-0.0502992123365402,0.143845021724701,-0.97483503818512,0.170309022068977,0.379477560520172,-0.0227062478661537,0.924922287464142,0.143845021724701,-0.97483503818512,0.170309022068977,0.603054106235504,-0.796112895011902,-0.0502992123365402,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.282981604337692,-0.529688954353333,-0.799594283103943,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.0640924125909805,0.448149740695953,-0.891658008098602,-0.361195623874664,0.398085296154022,-0.843247175216675,-0.282981604337692,-0.529688954353333,-0.799594283103943,-0.129192128777504,0.97855806350708,-0.160416796803474,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.361195623874664,0.398085296154022,-0.843247175216675,0.158035054802895,0.827060580253601,0.539440214633942,-0.272446572780609,0.69793826341629,0.662310421466827,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.129192128777504,0.97855806350708,-0.160416796803474,0.379477560520172,-0.0227062478661537,0.924922287464142,-0.156113177537918,-0.0394117124378681,0.986952602863312,-0.272446572780609,0.69793826341629,0.662310421466827,0.158035054802895,0.827060580253601,0.539440214633942,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.156113177537918,-0.0394117124378681,0.986952602863312,0.379477560520172,-0.0227062478661537,0.924922287464142,0.143845021724701,-0.97483503818512,0.170309022068977,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.344938427209854,-0.869564116001129,0.353377550840378,0.143845021724701,-0.97483503818512,0.170309022068977,\n-0.282981604337692,-0.529688954353333,-0.799594283103943,-0.361195623874664,0.398085296154022,-0.843247175216675,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.282981604337692,-0.529688954353333,-0.799594283103943,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.421170502901077,0.887910008430481,0.185016736388206,-0.466424465179443,0.73600161075592,0.490662693977356,-0.991045475006104,0.116085380315781,0.0659778565168381,-0.421170502901077,0.887910008430481,0.185016736388206,0.224865674972534,0.969921231269836,0.0932112112641335,0.32935905456543,0.802997291088104,0.496707141399384,-0.466424465179443,0.73600161075592,0.490662693977356,0.32935905456543,0.802997291088104,0.496707141399384,0.224865674972534,0.969921231269836,0.0932112112641335,0.726850271224976,0.572953879833221,-0.378698468208313,0.955747485160828,0.277235507965088,-0.0984230935573578,0.955747485160828,0.277235507965088,-0.0984230935573578,0.726850271224976,0.572953879833221,-0.378698468208313,0.24622069299221,-0.288397252559662,-0.925312042236328,0.266901016235352,-0.573494374752045,-0.774511456489563,0.266901016235352,-0.573494374752045,-0.774511456489563,0.24622069299221,-0.288397252559662,-0.925312042236328,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.991045475006104,0.116085380315781,0.0659778565168381,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.349220633506775,0.932596325874329,0.0911537334322929,-0.408735007047653,0.821314215660095,0.397968202829361,-0.466424465179443,0.73600161075592,0.490662693977356,-0.370245814323425,0.399501115083694,0.838639914989471,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.991045475006104,0.116085380315781,0.0659778565168381,\n-0.349220633506775,0.932596325874329,0.0911537334322929,0.369482100009918,0.916309058666229,0.154469192028046,0.314681202173233,0.790566682815552,0.525338053703308,-0.408735007047653,0.821314215660095,0.397968202829361,0.32935905456543,0.802997291088104,0.496707141399384,0.375980079174042,0.371540576219559,0.848879635334015,-0.370245814323425,0.399501115083694,0.838639914989471,-0.466424465179443,0.73600161075592,0.490662693977356,0.369482100009918,0.916309058666229,0.154469192028046,0.928892433643341,0.347320407629013,-0.128558844327927,0.935888707637787,0.150985181331635,0.318301498889923,0.314681202173233,0.790566682815552,0.525338053703308,0.955747485160828,0.277235507965088,-0.0984230935573578,0.894815683364868,-0.12337201833725,0.429050445556641,0.375980079174042,0.371540576219559,0.848879635334015,0.32935905456543,0.802997291088104,0.496707141399384,0.928892433643341,0.347320407629013,-0.128558844327927,0.484689444303513,-0.474302530288696,-0.734923958778381,0.477653324604034,-0.817450523376465,-0.321903645992279,0.935888707637787,0.150985181331635,0.318301498889923,0.416108936071396,-0.85736757516861,-0.302942514419556,0.894815683364868,-0.12337201833725,0.429050445556641,0.955747485160828,0.277235507965088,-0.0984230935573578,0.266901016235352,-0.573494374752045,-0.774511456489563,0.477653324604034,-0.817450523376465,-0.321903645992279,0.484689444303513,-0.474302530288696,-0.734923958778381,-0.60913348197937,-0.356543242931366,-0.708401918411255,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.688949525356293,-0.657936096191406,-0.304086625576019,0.416108936071396,-0.85736757516861,-0.302942514419556,0.266901016235352,-0.573494374752045,-0.774511456489563,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.60913348197937,-0.356543242931366,-0.708401918411255,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.991045475006104,0.116085380315781,0.0659778565168381,-0.944567203521729,-0.0448826812207699,0.32523587346077,\n-0.688949525356293,-0.657936096191406,-0.304086625576019,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.878820657730103,0.367129892110825,-0.304778426885605,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.1602942943573,0.98438024520874,-0.0728094503283501,-0.327859699726105,0.917791128158569,0.223981082439423,-0.408735007047653,0.821314215660095,0.397968202829361,-0.409153193235397,0.62424099445343,0.665519952774048,-0.968230009078979,0.101840510964394,0.228383734822273,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.1602942943573,0.98438024520874,-0.0728094503283501,0.487440526485443,0.864142239093781,0.125139698386192,0.318696260452271,0.794055461883545,0.517598927021027,-0.327859699726105,0.917791128158569,0.223981082439423,0.314681202173233,0.790566682815552,0.525338053703308,0.232475742697716,0.544684231281281,0.805775463581085,-0.409153193235397,0.62424099445343,0.665519952774048,-0.408735007047653,0.821314215660095,0.397968202829361,0.487440526485443,0.864142239093781,0.125139698386192,0.977178752422333,0.20803302526474,0.0429406240582466,0.865680992603302,0.0555743537843227,0.497501730918884,0.318696260452271,0.794055461883545,0.517598927021027,0.935888707637787,0.150985181331635,0.318301498889923,0.731430292129517,-0.0698081851005554,0.678333699703217,0.232475742697716,0.544684231281281,0.805775463581085,0.314681202173233,0.790566682815552,0.525338053703308,0.977178752422333,0.20803302526474,0.0429406240582466,0.618484795093536,-0.605106949806213,-0.501320481300354,0.482842773199081,-0.868827641010284,-0.109550587832928,0.865680992603302,0.0555743537843227,0.497501730918884,0.338283896446228,-0.929607927799225,0.146263748407364,0.731430292129517,-0.0698081851005554,0.678333699703217,0.935888707637787,0.150985181331635,0.318301498889923,0.477653324604034,-0.817450523376465,-0.321903645992279,0.482842773199081,-0.868827641010284,-0.109550587832928,0.618484795093536,-0.605106949806213,-0.501320481300354,-0.411054730415344,-0.414192497730255,-0.812082886695862,-0.610901474952698,-0.556556701660156,-0.563066601753235,\n-0.681281208992004,-0.719342052936554,-0.135657235980034,0.338283896446228,-0.929607927799225,0.146263748407364,0.477653324604034,-0.817450523376465,-0.321903645992279,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.411054730415344,-0.414192497730255,-0.812082886695862,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.878820657730103,0.367129892110825,-0.304778426885605,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.968230009078979,0.101840510964394,0.228383734822273,-0.681281208992004,-0.719342052936554,-0.135657235980034,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.46152138710022,0.495068192481995,-0.73614227771759,0.00481484783813357,0.982931971549988,-0.183906376361847,-0.258809417486191,0.965757608413696,0.0181634556502104,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.327859699726105,0.917791128158569,0.223981082439423,-0.469395011663437,0.732399642467499,0.493212997913361,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.878820657730103,0.367129892110825,-0.304778426885605,0.00481484783813357,0.982931971549988,-0.183906376361847,0.554872810840607,0.810436189174652,0.187907695770264,0.248662516474724,0.809659063816071,0.531619369983673,-0.258809417486191,0.965757608413696,0.0181634556502104,0.318696260452271,0.794055461883545,0.517598927021027,0.0926875099539757,0.587645053863525,0.803792417049408,-0.469395011663437,0.732399642467499,0.493212997913361,-0.327859699726105,0.917791128158569,0.223981082439423,0.554872810840607,0.810436189174652,0.187907695770264,0.960403800010681,0.128028109669685,0.247453689575195,0.678723812103271,-0.00691590458154678,0.734361052513123,0.248662516474724,0.809659063816071,0.531619369983673,0.865680992603302,0.0555743537843227,0.497501730918884,0.564271926879883,-0.0617093704640865,0.823279500007629,0.0926875099539757,0.587645053863525,0.803792417049408,0.318696260452271,0.794055461883545,0.517598927021027,0.678723812103271,-0.00691590458154678,0.734361052513123,\n0.960403800010681,0.128028109669685,0.247453689575195,0.640678882598877,-0.692017734050751,-0.33262899518013,0.291824638843536,-0.956135869026184,0.0253480579704046,0.173397973179817,-0.937193632125854,0.302656918764114,0.564271926879883,-0.0617093704640865,0.823279500007629,0.865680992603302,0.0555743537843227,0.497501730918884,0.482842773199081,-0.868827641010284,-0.109550587832928,0.291824638843536,-0.956135869026184,0.0253480579704046,0.640678882598877,-0.692017734050751,-0.33262899518013,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.733310759067535,-0.636212587356567,-0.239768356084824,0.173397973179817,-0.937193632125854,0.302656918764114,0.482842773199081,-0.868827641010284,-0.109550587832928,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.46152138710022,0.495068192481995,-0.73614227771759,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.733310759067535,-0.636212587356567,-0.239768356084824,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.878820657730103,0.367129892110825,-0.304778426885605,-0.258809417486191,0.965757608413696,0.0181634556502104,-0.490928202867508,0.838506758213043,0.236423268914223,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.672615647315979,0.435778170824051,-0.598068177700043,0.248662516474724,0.809659063816071,0.531619369983673,-0.0895224064588547,0.63932603597641,0.763706743717194,-0.490928202867508,0.838506758213043,0.236423268914223,-0.258809417486191,0.965757608413696,0.0181634556502104,0.678723812103271,-0.00691590458154678,0.734361052513123,0.200342118740082,-0.0948356613516808,0.975125253200531,-0.0895224064588547,0.63932603597641,0.763706743717194,0.248662516474724,0.809659063816071,0.531619369983673,-0.106568887829781,-0.917000472545624,0.384386867284775,0.200342118740082,-0.0948356613516808,0.975125253200531,\n0.678723812103271,-0.00691590458154678,0.734361052513123,0.291824638843536,-0.956135869026184,0.0253480579704046,-0.688571929931641,-0.57403826713562,-0.443112581968308,-0.106568887829781,-0.917000472545624,0.384386867284775,0.291824638843536,-0.956135869026184,0.0253480579704046,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.688571929931641,-0.57403826713562,-0.443112581968308,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.41831374168396,0.542322099208832,0.728629112243652,-0.235922157764435,0.199316576123238,0.951111793518066,-0.845829725265503,-0.252385228872299,0.469972103834152,-0.976834237575531,-0.0582810156047344,0.205908060073853,0.374769628047943,0.711422443389893,0.594496309757233,0.433050602674484,0.2669917345047,0.860919594764709,-0.235922157764435,0.199316576123238,0.951111793518066,-0.41831374168396,0.542322099208832,0.728629112243652,0.957085728645325,-0.0379634574055672,0.287307798862457,0.433050602674484,0.2669917345047,0.860919594764709,0.374769628047943,0.711422443389893,0.594496309757233,0.948985993862152,0.294174909591675,-0.113519780337811,0.456055998802185,-0.77651709318161,-0.434780597686768,0.957085728645325,-0.0379634574055672,0.287307798862457,0.948985993862152,0.294174909591675,-0.113519780337811,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.634028613567352,-0.730724096298218,-0.253081113100052,0.456055998802185,-0.77651709318161,-0.434780597686768,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.976834237575531,-0.0582810156047344,0.205908060073853,-0.845829725265503,-0.252385228872299,0.469972103834152,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.238327190279961,0.167034506797791,0.956712901592255,-0.126118883490562,0.0425354726612568,0.991102814674377,-0.693171083927155,-0.380507975816727,0.612149894237518,\n-0.871865928173065,-0.182605341076851,0.454428285360336,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.488242149353027,0.767777740955353,0.414893865585327,-0.41831374168396,0.542322099208832,0.728629112243652,-0.976834237575531,-0.0582810156047344,0.205908060073853,0.359920799732208,0.294513046741486,0.88527911901474,0.426090598106384,0.13983453810215,0.89380818605423,-0.126118883490562,0.0425354726612568,0.991102814674377,-0.238327190279961,0.167034506797791,0.956712901592255,-0.488242149353027,0.767777740955353,0.414893865585327,0.21278840303421,0.936659038066864,0.278192192316055,0.374769628047943,0.711422443389893,0.594496309757233,-0.41831374168396,0.542322099208832,0.728629112243652,0.971750199794769,0.155082061886787,0.177907571196556,0.951123833656311,-0.0359408818185329,0.306711047887802,0.426090598106384,0.13983453810215,0.89380818605423,0.359920799732208,0.294513046741486,0.88527911901474,0.21278840303421,0.936659038066864,0.278192192316055,0.732098400592804,0.597899973392487,-0.32641613483429,0.948985993862152,0.294174909591675,-0.113519780337811,0.374769628047943,0.711422443389893,0.594496309757233,0.565304636955261,-0.708869636058807,-0.421822786331177,0.951123833656311,-0.0359408818185329,0.306711047887802,0.971750199794769,0.155082061886787,0.177907571196556,0.502565324306488,-0.459530532360077,-0.732297599315643,0.948985993862152,0.294174909591675,-0.113519780337811,0.732098400592804,0.597899973392487,-0.32641613483429,0.300222218036652,-0.191066533327103,-0.934537410736084,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.513763785362244,-0.837060868740082,-0.188084691762924,0.565304636955261,-0.708869636058807,-0.421822786331177,0.502565324306488,-0.459530532360077,-0.732297599315643,-0.632987320423126,-0.605237662792206,-0.482715725898743,0.373983144760132,-0.495919108390808,-0.783709645271301,0.300222218036652,-0.191066533327103,-0.934537410736084,-0.686947405338287,-0.371219843626022,-0.624739229679108,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.871865928173065,-0.182605341076851,0.454428285360336,\n-0.693171083927155,-0.380507975816727,0.612149894237518,-0.513763785362244,-0.837060868740082,-0.188084691762924,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.686947405338287,-0.371219843626022,-0.624739229679108,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.976834237575531,-0.0582810156047344,0.205908060073853,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.871865928173065,-0.182605341076851,0.454428285360336,-0.976081073284149,0.0319094844162464,0.215052559971809,-0.378572434186935,0.294946253299713,0.877319574356079,-0.238327190279961,0.167034506797791,0.956712901592255,-0.378572434186935,0.294946253299713,0.877319574356079,0.256522864103317,0.500971019268036,0.826573669910431,0.359920799732208,0.294513046741486,0.88527911901474,-0.238327190279961,0.167034506797791,0.956712901592255,0.256522864103317,0.500971019268036,0.826573669910431,0.916088342666626,0.400877177715302,0.00892047397792339,0.971750199794769,0.155082061886787,0.177907571196556,0.359920799732208,0.294513046741486,0.88527911901474,0.916088342666626,0.400877177715302,0.00892047397792339,0.408187568187714,-0.202498286962509,-0.890155792236328,0.502565324306488,-0.459530532360077,-0.732297599315643,0.971750199794769,0.155082061886787,0.177907571196556,0.502565324306488,-0.459530532360077,-0.732297599315643,0.408187568187714,-0.202498286962509,-0.890155792236328,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.976081073284149,0.0319094844162464,0.215052559971809,-0.871865928173065,-0.182605341076851,0.454428285360336,0.957568049430847,0.202899873256683,-0.204682797193527,0.497125834226608,0.858945310115814,0.122795671224594,0.373975813388824,0.180082246661186,0.909787058830261,0.883933007717133,-0.306944608688354,0.352771013975143,0.373975813388824,0.180082246661186,0.909787058830261,0.497125834226608,0.858945310115814,0.122795671224594,\n-0.14895835518837,0.98171204328537,0.118544928729534,-0.295474290847778,0.289970576763153,0.910281300544739,-0.295474290847778,0.289970576763153,0.910281300544739,-0.14895835518837,0.98171204328537,0.118544928729534,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.386270940303802,-0.268448829650879,-0.88245677947998,-0.558293402194977,-0.744525730609894,-0.366046398878098,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.386270940303802,-0.268448829650879,-0.88245677947998,0.626136362552643,-0.462657570838928,-0.627615451812744,0.547039151191711,-0.767979085445404,-0.333100914955139,-0.558293402194977,-0.744525730609894,-0.366046398878098,0.626136362552643,-0.462657570838928,-0.627615451812744,0.957568049430847,0.202899873256683,-0.204682797193527,0.883933007717133,-0.306944608688354,0.352771013975143,0.547039151191711,-0.767979085445404,-0.333100914955139,0.975085556507111,-0.105434238910675,0.195171296596527,0.86001181602478,0.317273110151291,-0.399646580219269,0.416134297847748,0.908453166484833,0.0393080599606037,0.50421130657196,0.371916502714157,0.779390156269073,0.416134297847748,0.908453166484833,0.0393080599606037,-0.287073612213135,0.937016367912292,0.198970049619675,-0.234096929430962,0.390781313180923,0.890218317508698,0.50421130657196,0.371916502714157,0.779390156269073,-0.287073612213135,0.937016367912292,0.198970049619675,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.834793627262115,-0.068818561732769,0.546245038509369,-0.234096929430962,0.390781313180923,0.890218317508698,-0.834793627262115,-0.068818561732769,0.546245038509369,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.608099102973938,-0.439832001924515,-0.660880744457245,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.608099102973938,-0.439832001924515,-0.660880744457245,0.484535843133926,-0.391038775444031,-0.782504737377167,\n0.599041819572449,-0.698567867279053,-0.391346126794815,0.599041819572449,-0.698567867279053,-0.391346126794815,0.484535843133926,-0.391038775444031,-0.782504737377167,0.86001181602478,0.317273110151291,-0.399646580219269,0.975085556507111,-0.105434238910675,0.195171296596527,0.661870062351227,0.421795666217804,-0.619690597057343,0.210457503795624,0.972685754299164,-0.0979291051626205,0.533453047275543,0.59451025724411,0.601652204990387,0.994639039039612,0.0399277433753014,0.0953883677721024,0.210457503795624,0.972685754299164,-0.0979291051626205,-0.410943269729614,0.892482936382294,0.186010345816612,-0.0871332660317421,0.554765582084656,0.827431499958038,0.533453047275543,0.59451025724411,0.601652204990387,-0.0871332660317421,0.554765582084656,0.827431499958038,-0.410943269729614,0.892482936382294,0.186010345816612,-0.947485268115997,0.26874190568924,0.1733478307724,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.947485268115997,0.26874190568924,0.1733478307724,-0.717132270336151,-0.562979400157928,-0.410822957754135,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.717132270336151,-0.562979400157928,-0.410822957754135,0.271069228649139,-0.435710102319717,-0.858299553394318,0.610304296016693,-0.760079562664032,-0.223176524043083,0.610304296016693,-0.760079562664032,-0.223176524043083,0.271069228649139,-0.435710102319717,-0.858299553394318,0.661870062351227,0.421795666217804,-0.619690597057343,0.994639039039612,0.0399277433753014,0.0953883677721024,0.38824450969696,0.468270719051361,-0.793718278408051,0.0321094393730164,0.982071399688721,-0.185754418373108,0.576588332653046,0.699405252933502,0.422348409891129,0.972901284694672,0.173448488116264,-0.15290105342865,0.576588332653046,0.699405252933502,0.422348409891129,0.0321094393730164,0.982071399688721,-0.185754418373108,-0.472547024488449,0.842842221260071,0.257519453763962,0.0535213947296143,0.588878512382507,0.806447505950928,0.0535213947296143,0.588878512382507,0.806447505950928,\n-0.472547024488449,0.842842221260071,0.257519453763962,-0.908354461193085,0.186973229050636,0.374076366424561,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.908354461193085,0.186973229050636,0.374076366424561,-0.721794605255127,-0.649047315120697,-0.240312546491623,-0.189478844404221,-0.925744891166687,0.327252507209778,-0.721794605255127,-0.649047315120697,-0.240312546491623,0.121086686849594,-0.443384885787964,-0.888114750385284,0.652944087982178,-0.679937779903412,-0.333689540624619,-0.189478844404221,-0.925744891166687,0.327252507209778,0.652944087982178,-0.679937779903412,-0.333689540624619,0.121086686849594,-0.443384885787964,-0.888114750385284,0.38824450969696,0.468270719051361,-0.793718278408051,0.972901284694672,0.173448488116264,-0.15290105342865,0.813007533550262,0.294095903635025,-0.502519965171814,-0.0286615137010813,0.447031855583191,-0.894058763980865,-0.199642360210419,0.952765345573425,-0.228869169950485,0.569939315319061,0.805042445659637,0.164547294378281,-0.199642360210419,0.952765345573425,-0.228869169950485,-0.475066125392914,0.794856011867523,0.37751305103302,0.231555417180061,0.629199266433716,0.741950392723084,0.569939315319061,0.805042445659637,0.164547294378281,-0.475066125392914,0.794856011867523,0.37751305103302,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.231555417180061,0.629199266433716,0.741950392723084,-0.0726617649197578,-0.0862219110131264,0.993622660636902,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.65307891368866,-0.756489455699921,0.0348084531724453,0.0996505841612816,-0.92350834608078,0.370408058166504,0.0996505841612816,-0.92350834608078,0.370408058166504,-0.65307891368866,-0.756489455699921,0.0348084531724453,-0.162778183817863,-0.468375027179718,-0.86840546131134,0.585191905498505,-0.614215075969696,-0.529424488544464,0.585191905498505,-0.614215075969696,-0.529424488544464,-0.162778183817863,-0.468375027179718,-0.86840546131134,\n-0.0286615137010813,0.447031855583191,-0.894058763980865,0.813007533550262,0.294095903635025,-0.502519965171814,0.558855295181274,0.314870893955231,-0.767161726951599,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.0175805017352104,0.980271637439728,-0.196871712803841,0.519844651222229,0.850727140903473,-0.0776200741529465,0.0175805017352104,0.980271637439728,-0.196871712803841,0.0640470013022423,0.825317442417145,0.561025023460388,0.402456730604172,0.676650583744049,0.616581320762634,0.519844651222229,0.850727140903473,-0.0776200741529465,0.0640470013022423,0.825317442417145,0.561025023460388,0.0680289566516876,0.0137546937912703,0.997588515281677,0.284913867712021,-0.0533209033310413,0.957068920135498,0.402456730604172,0.676650583744049,0.616581320762634,0.284913867712021,-0.0533209033310413,0.957068920135498,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.0146371489390731,-0.971577882766724,0.236267194151878,0.334185361862183,-0.890982747077942,0.307359427213669,0.334185361862183,-0.890982747077942,0.307359427213669,-0.0146371489390731,-0.971577882766724,0.236267194151878,-0.0737737640738487,-0.545523285865784,-0.834842383861542,0.435699939727783,-0.569284319877625,-0.697195053100586,0.435699939727783,-0.569284319877625,-0.697195053100586,-0.0737737640738487,-0.545523285865784,-0.834842383861542,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.558855295181274,0.314870893955231,-0.767161726951599,0.260944664478302,0.0303234942257404,0.964877367019653,0.744088768959045,-0.425844013690948,0.514770567417145,0.990352332592011,0.100834503769875,-0.0950506180524826,0.586896598339081,0.733868896961212,0.342036306858063,-0.114175498485565,0.946973264217377,0.300342559814453,-0.292137324810028,0.162486374378204,0.942472279071808,0.260944664478302,0.0303234942257404,0.964877367019653,0.586896598339081,0.733868896961212,0.342036306858063,-0.730445027351379,0.644031345844269,-0.227318435907364,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.292137324810028,0.162486374378204,0.942472279071808,\n-0.114175498485565,0.946973264217377,0.300342559814453,-0.434810429811478,-0.167877942323685,-0.884735524654388,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.730445027351379,0.644031345844269,-0.227318435907364,0.430197030305862,-0.866838395595551,-0.252034991979599,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.434810429811478,-0.167877942323685,-0.884735524654388,0.571836888790131,-0.410920888185501,-0.710032820701599,0.744088768959045,-0.425844013690948,0.514770567417145,0.430197030305862,-0.866838395595551,-0.252034991979599,0.571836888790131,-0.410920888185501,-0.710032820701599,0.990352332592011,0.100834503769875,-0.0950506180524826,-0.799655735492706,-0.317605823278427,0.509585380554199,0.612414479255676,-0.645280599594116,0.456685394048691,0.511097252368927,0.266881614923477,0.817039608955383,-0.110857367515564,0.512554824352264,0.85146826505661,0.612414479255676,-0.645280599594116,0.456685394048691,-0.799655735492706,-0.317605823278427,0.509585380554199,-0.536313056945801,-0.172707200050354,-0.826160073280334,0.49901670217514,-0.328819900751114,-0.801785349845886,-0.0286615137010813,0.447031855583191,-0.894058763980865,0.268526494503021,0.378220826387405,-0.885913372039795,0.167536497116089,0.969197690486908,-0.18051965534687,-0.199642360210419,0.952765345573425,-0.228869169950485,-0.199642360210419,0.952765345573425,-0.228869169950485,0.167536497116089,0.969197690486908,-0.18051965534687,-0.0316924452781677,0.833044230937958,0.55229789018631,-0.475066125392914,0.794856011867523,0.37751305103302,-0.475066125392914,0.794856011867523,0.37751305103302,-0.0316924452781677,0.833044230937958,0.55229789018631,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.18044501543045,-0.964608788490295,0.19227434694767,-0.65307891368866,-0.756489455699921,0.0348084531724453,\n-0.18044501543045,-0.964608788490295,0.19227434694767,0.138857930898666,-0.542990744113922,-0.828178465366364,-0.162778183817863,-0.468375027179718,-0.86840546131134,-0.65307891368866,-0.756489455699921,0.0348084531724453,-0.162778183817863,-0.468375027179718,-0.86840546131134,0.138857930898666,-0.542990744113922,-0.828178465366364,0.268526494503021,0.378220826387405,-0.885913372039795,-0.0286615137010813,0.447031855583191,-0.894058763980865,0.167536497116089,0.969197690486908,-0.18051965534687,0.268526494503021,0.378220826387405,-0.885913372039795,0.558855295181274,0.314870893955231,-0.767161726951599,0.519844651222229,0.850727140903473,-0.0776200741529465,-0.0316924452781677,0.833044230937958,0.55229789018631,0.167536497116089,0.969197690486908,-0.18051965534687,0.519844651222229,0.850727140903473,-0.0776200741529465,0.402456730604172,0.676650583744049,0.616581320762634,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.0316924452781677,0.833044230937958,0.55229789018631,0.402456730604172,0.676650583744049,0.616581320762634,0.284913867712021,-0.0533209033310413,0.957068920135498,0.334185361862183,-0.890982747077942,0.307359427213669,-0.18044501543045,-0.964608788490295,0.19227434694767,-0.25203549861908,-0.00277848681434989,0.967713952064514,0.284913867712021,-0.0533209033310413,0.957068920135498,0.435699939727783,-0.569284319877625,-0.697195053100586,0.138857930898666,-0.542990744113922,-0.828178465366364,-0.18044501543045,-0.964608788490295,0.19227434694767,0.334185361862183,-0.890982747077942,0.307359427213669,0.268526494503021,0.378220826387405,-0.885913372039795,0.138857930898666,-0.542990744113922,-0.828178465366364,0.435699939727783,-0.569284319877625,-0.697195053100586,0.558855295181274,0.314870893955231,-0.767161726951599,0.957568049430847,0.202899873256683,-0.204682797193527,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.573537588119507,0.703198969364166,0.420197457075119,0.497125834226608,0.858945310115814,0.122795671224594,0.497125834226608,0.858945310115814,0.122795671224594,0.573537588119507,0.703198969364166,0.420197457075119,\n-0.208385854959488,0.819956362247467,0.533148169517517,-0.14895835518837,0.98171204328537,0.118544928729534,-0.208385854959488,0.819956362247467,0.533148169517517,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.14895835518837,0.98171204328537,0.118544928729534,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.404285073280334,-0.552336990833282,-0.72902500629425,-0.386270940303802,-0.268448829650879,-0.88245677947998,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.404285073280334,-0.552336990833282,-0.72902500629425,0.631527423858643,-0.539189040660858,-0.557178795337677,0.626136362552643,-0.462657570838928,-0.627615451812744,-0.386270940303802,-0.268448829650879,-0.88245677947998,0.626136362552643,-0.462657570838928,-0.627615451812744,0.631527423858643,-0.539189040660858,-0.557178795337677,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.957568049430847,0.202899873256683,-0.204682797193527,0.968059420585632,0.180046543478966,-0.17448265850544,0.509348154067993,0.792352139949799,0.335771501064301,0.416134297847748,0.908453166484833,0.0393080599606037,0.86001181602478,0.317273110151291,-0.399646580219269,0.573537588119507,0.703198969364166,0.420197457075119,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.975085556507111,-0.105434238910675,0.195171296596527,0.50421130657196,0.371916502714157,0.779390156269073,0.416134297847748,0.908453166484833,0.0393080599606037,0.509348154067993,0.792352139949799,0.335771501064301,-0.190792232751846,0.806503474712372,0.559598445892334,-0.287073612213135,0.937016367912292,0.198970049619675,-0.208385854959488,0.819956362247467,0.533148169517517,0.573537588119507,0.703198969364166,0.420197457075119,0.50421130657196,0.371916502714157,0.779390156269073,-0.234096929430962,0.390781313180923,0.890218317508698,-0.287073612213135,0.937016367912292,0.198970049619675,-0.190792232751846,0.806503474712372,0.559598445892334,-0.873119652271271,0.208043858408928,0.440885275602341,-0.91410881280899,0.405452340841293,-0.00367248360998929,\n-0.941002309322357,0.337059259414673,0.0300944726914167,-0.208385854959488,0.819956362247467,0.533148169517517,-0.234096929430962,0.390781313180923,0.890218317508698,-0.834793627262115,-0.068818561732769,0.546245038509369,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.873119652271271,0.208043858408928,0.440885275602341,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.608099102973938,-0.439832001924515,-0.660880744457245,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.404285073280334,-0.552336990833282,-0.72902500629425,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.834793627262115,-0.068818561732769,0.546245038509369,-0.567008674144745,-0.784497559070587,-0.251126945018768,0.596852362155914,-0.598833739757538,-0.534008800983429,0.484535843133926,-0.391038775444031,-0.782504737377167,-0.608099102973938,-0.439832001924515,-0.660880744457245,0.599041819572449,-0.698567867279053,-0.391346126794815,0.631527423858643,-0.539189040660858,-0.557178795337677,-0.404285073280334,-0.552336990833282,-0.72902500629425,-0.506093978881836,-0.828284025192261,-0.240446254611015,0.484535843133926,-0.391038775444031,-0.782504737377167,0.596852362155914,-0.598833739757538,-0.534008800983429,0.968059420585632,0.180046543478966,-0.17448265850544,0.86001181602478,0.317273110151291,-0.399646580219269,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.631527423858643,-0.539189040660858,-0.557178795337677,0.599041819572449,-0.698567867279053,-0.391346126794815,0.975085556507111,-0.105434238910675,0.195171296596527,0.851017236709595,0.312567472457886,-0.421984851360321,0.411976963281631,0.894454181194305,0.173858374357224,0.210457503795624,0.972685754299164,-0.0979291051626205,0.661870062351227,0.421795666217804,-0.619690597057343,0.509348154067993,0.792352139949799,0.335771501064301,0.968059420585632,0.180046543478966,-0.17448265850544,0.994639039039612,0.0399277433753014,0.0953883677721024,0.533453047275543,0.59451025724411,0.601652204990387,0.210457503795624,0.972685754299164,-0.0979291051626205,\n0.411976963281631,0.894454181194305,0.173858374357224,-0.195588424801826,0.810276031494141,0.552447199821472,-0.410943269729614,0.892482936382294,0.186010345816612,-0.190792232751846,0.806503474712372,0.559598445892334,0.509348154067993,0.792352139949799,0.335771501064301,0.533453047275543,0.59451025724411,0.601652204990387,-0.0871332660317421,0.554765582084656,0.827431499958038,-0.410943269729614,0.892482936382294,0.186010345816612,-0.195588424801826,0.810276031494141,0.552447199821472,-0.785535871982574,0.107658803462982,0.60937911272049,-0.947485268115997,0.26874190568924,0.1733478307724,-0.873119652271271,0.208043858408928,0.440885275602341,-0.190792232751846,0.806503474712372,0.559598445892334,-0.0871332660317421,0.554765582084656,0.827431499958038,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.947485268115997,0.26874190568924,0.1733478307724,-0.785535871982574,0.107658803462982,0.60937911272049,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.717132270336151,-0.562979400157928,-0.410822957754135,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.873119652271271,0.208043858408928,0.440885275602341,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.546746909618378,-0.836352705955505,-0.0397748313844204,0.493326157331467,-0.591391324996948,-0.637875854969025,0.271069228649139,-0.435710102319717,-0.858299553394318,-0.717132270336151,-0.562979400157928,-0.410822957754135,0.610304296016693,-0.760079562664032,-0.223176524043083,0.596852362155914,-0.598833739757538,-0.534008800983429,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.373132437467575,-0.907169759273529,0.194461092352867,0.271069228649139,-0.435710102319717,-0.858299553394318,0.493326157331467,-0.591391324996948,-0.637875854969025,0.851017236709595,0.312567472457886,-0.421984851360321,0.661870062351227,0.421795666217804,-0.619690597057343,0.994639039039612,0.0399277433753014,0.0953883677721024,0.968059420585632,0.180046543478966,-0.17448265850544,\n0.596852362155914,-0.598833739757538,-0.534008800983429,0.610304296016693,-0.760079562664032,-0.223176524043083,0.38824450969696,0.468270719051361,-0.793718278408051,0.611883342266083,0.395266950130463,-0.685100555419922,0.318963170051575,0.947534799575806,-0.0209827292710543,0.0321094393730164,0.982071399688721,-0.185754418373108,0.411976963281631,0.894454181194305,0.173858374357224,0.851017236709595,0.312567472457886,-0.421984851360321,0.972901284694672,0.173448488116264,-0.15290105342865,0.576588332653046,0.699405252933502,0.422348409891129,0.0321094393730164,0.982071399688721,-0.185754418373108,0.318963170051575,0.947534799575806,-0.0209827292710543,-0.12346463650465,0.82139652967453,0.556834042072296,-0.472547024488449,0.842842221260071,0.257519453763962,-0.195588424801826,0.810276031494141,0.552447199821472,0.411976963281631,0.894454181194305,0.173858374357224,0.576588332653046,0.699405252933502,0.422348409891129,0.0535213947296143,0.588878512382507,0.806447505950928,-0.472547024488449,0.842842221260071,0.257519453763962,-0.12346463650465,0.82139652967453,0.556834042072296,-0.572655022144318,0.03255345672369,0.819149851799011,-0.908354461193085,0.186973229050636,0.374076366424561,-0.785535871982574,0.107658803462982,0.60937911272049,-0.195588424801826,0.810276031494141,0.552447199821472,0.0535213947296143,0.588878512382507,0.806447505950928,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.572655022144318,0.03255345672369,0.819149851799011,-0.345148712396622,-0.936045050621033,0.0684986561536789,-0.721794605255127,-0.649047315120697,-0.240312546491623,-0.908354461193085,0.186973229050636,0.374076366424561,-0.189478844404221,-0.925744891166687,0.327252507209778,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.785535871982574,0.107658803462982,0.60937911272049,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.345148712396622,-0.936045050621033,0.0684986561536789,0.375919848680496,-0.534900844097137,-0.756680428981781,0.121086686849594,-0.443384885787964,-0.888114750385284,-0.721794605255127,-0.649047315120697,-0.240312546491623,\n0.652944087982178,-0.679937779903412,-0.333689540624619,0.493326157331467,-0.591391324996948,-0.637875854969025,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.189478844404221,-0.925744891166687,0.327252507209778,0.121086686849594,-0.443384885787964,-0.888114750385284,0.375919848680496,-0.534900844097137,-0.756680428981781,0.611883342266083,0.395266950130463,-0.685100555419922,0.38824450969696,0.468270719051361,-0.793718278408051,0.972901284694672,0.173448488116264,-0.15290105342865,0.851017236709595,0.312567472457886,-0.421984851360321,0.493326157331467,-0.591391324996948,-0.637875854969025,0.652944087982178,-0.679937779903412,-0.333689540624619,0.318963170051575,0.947534799575806,-0.0209827292710543,0.611883342266083,0.395266950130463,-0.685100555419922,0.813007533550262,0.294095903635025,-0.502519965171814,0.569939315319061,0.805042445659637,0.164547294378281,-0.12346463650465,0.82139652967453,0.556834042072296,0.318963170051575,0.947534799575806,-0.0209827292710543,0.569939315319061,0.805042445659637,0.164547294378281,0.231555417180061,0.629199266433716,0.741950392723084,-0.572655022144318,0.03255345672369,0.819149851799011,-0.12346463650465,0.82139652967453,0.556834042072296,0.231555417180061,0.629199266433716,0.741950392723084,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.0996505841612816,-0.92350834608078,0.370408058166504,-0.345148712396622,-0.936045050621033,0.0684986561536789,-0.572655022144318,0.03255345672369,0.819149851799011,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.585191905498505,-0.614215075969696,-0.529424488544464,0.375919848680496,-0.534900844097137,-0.756680428981781,-0.345148712396622,-0.936045050621033,0.0684986561536789,0.0996505841612816,-0.92350834608078,0.370408058166504,0.813007533550262,0.294095903635025,-0.502519965171814,0.611883342266083,0.395266950130463,-0.685100555419922,0.375919848680496,-0.534900844097137,-0.756680428981781,0.585191905498505,-0.614215075969696,-0.529424488544464,0.545881569385529,0.511918663978577,0.663289248943329,0.990075051784515,-0.120317794382572,0.0726294368505478,\n0.883933007717133,-0.306944608688354,0.352771013975143,0.373975813388824,0.180082246661186,0.909787058830261,-0.245863825082779,0.731000900268555,0.636544346809387,0.545881569385529,0.511918663978577,0.663289248943329,0.373975813388824,0.180082246661186,0.909787058830261,-0.295474290847778,0.289970576763153,0.910281300544739,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.245863825082779,0.731000900268555,0.636544346809387,-0.295474290847778,0.289970576763153,0.910281300544739,-0.558293402194977,-0.744525730609894,-0.366046398878098,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.910116851329803,0.0209306813776493,0.413822680711746,0.547039151191711,-0.767979085445404,-0.333100914955139,0.571398973464966,-0.599262952804565,-0.560702323913574,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.558293402194977,-0.744525730609894,-0.366046398878098,0.990075051784515,-0.120317794382572,0.0726294368505478,0.571398973464966,-0.599262952804565,-0.560702323913574,0.547039151191711,-0.767979085445404,-0.333100914955139,0.883933007717133,-0.306944608688354,0.352771013975143,0.375081390142441,0.14768061041832,0.915152668952942,0.911960899829865,-0.238872826099396,0.333567291498184,0.744088768959045,-0.425844013690948,0.514770567417145,0.260944664478302,0.0303234942257404,0.964877367019653,0.990352332592011,0.100834503769875,-0.0950506180524826,0.990075051784515,-0.120317794382572,0.0726294368505478,0.545881569385529,0.511918663978577,0.663289248943329,0.586896598339081,0.733868896961212,0.342036306858063,-0.218149244785309,0.312739759683609,0.924448370933533,0.375081390142441,0.14768061041832,0.915152668952942,0.260944664478302,0.0303234942257404,0.964877367019653,-0.292137324810028,0.162486374378204,0.942472279071808,0.586896598339081,0.733868896961212,0.342036306858063,0.545881569385529,0.511918663978577,0.663289248943329,-0.245863825082779,0.731000900268555,0.636544346809387,-0.114175498485565,0.946973264217377,0.300342559814453,\n-0.927251279354095,0.214977368712425,0.306577533483505,-0.218149244785309,0.312739759683609,0.924448370933533,-0.292137324810028,0.162486374378204,0.942472279071808,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.114175498485565,0.946973264217377,0.300342559814453,-0.245863825082779,0.731000900268555,0.636544346809387,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.730445027351379,0.644031345844269,-0.227318435907364,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.624496459960938,-0.423985540866852,-0.655927181243896,-0.927251279354095,0.214977368712425,0.306577533483505,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.434810429811478,-0.167877942323685,-0.884735524654388,-0.730445027351379,0.644031345844269,-0.227318435907364,0.430197030305862,-0.866838395595551,-0.252034991979599,0.522938787937164,-0.641703903675079,-0.561026811599731,-0.624496459960938,-0.423985540866852,-0.655927181243896,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.506552457809448,-0.468146800994873,-0.724046409130096,0.571398973464966,-0.599262952804565,-0.560702323913574,0.571836888790131,-0.410920888185501,-0.710032820701599,-0.434810429811478,-0.167877942323685,-0.884735524654388,0.911960899829865,-0.238872826099396,0.333567291498184,0.522938787937164,-0.641703903675079,-0.561026811599731,0.430197030305862,-0.866838395595551,-0.252034991979599,0.744088768959045,-0.425844013690948,0.514770567417145,0.571836888790131,-0.410920888185501,-0.710032820701599,0.571398973464966,-0.599262952804565,-0.560702323913574,0.990075051784515,-0.120317794382572,0.0726294368505478,0.990352332592011,0.100834503769875,-0.0950506180524826,0.911960899829865,-0.238872826099396,0.333567291498184,0.375081390142441,0.14768061041832,0.915152668952942,0.511097252368927,0.266881614923477,0.817039608955383,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.511097252368927,0.266881614923477,0.817039608955383,\n0.375081390142441,0.14768061041832,0.915152668952942,-0.218149244785309,0.312739759683609,0.924448370933533,-0.110857367515564,0.512554824352264,0.85146826505661,-0.110857367515564,0.512554824352264,0.85146826505661,-0.218149244785309,0.312739759683609,0.924448370933533,-0.927251279354095,0.214977368712425,0.306577533483505,-0.879560232162476,0.457515209913254,0.130589336156845,-0.879560232162476,0.457515209913254,0.130589336156845,-0.927251279354095,0.214977368712425,0.306577533483505,-0.624496459960938,-0.423985540866852,-0.655927181243896,-0.536313056945801,-0.172707200050354,-0.826160073280334,-0.624496459960938,-0.423985540866852,-0.655927181243896,0.522938787937164,-0.641703903675079,-0.561026811599731,0.49901670217514,-0.328819900751114,-0.801785349845886,-0.536313056945801,-0.172707200050354,-0.826160073280334,0.522938787937164,-0.641703903675079,-0.561026811599731,0.911960899829865,-0.238872826099396,0.333567291498184,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.49901670217514,-0.328819900751114,-0.801785349845886,-0.976081073284149,0.0319094844162464,0.215052559971809,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.378572434186935,0.294946253299713,0.877319574356079,0.256522864103317,0.500971019268036,0.826573669910431,0.839519679546356,-0.36930912733078,0.398519098758698,0.916088342666626,0.400877177715302,0.00892047397792339,0.916088342666626,0.400877177715302,0.00892047397792339,0.839519679546356,-0.36930912733078,0.398519098758698,0.408187568187714,-0.202498286962509,-0.890155792236328,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.976081073284149,0.0319094844162464,0.215052559971809,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.511097252368927,0.266881614923477,0.817039608955383,0.612414479255676,-0.645280599594116,0.456685394048691,-0.110857367515564,0.512554824352264,0.85146826505661,-0.879560232162476,0.457515209913254,0.130589336156845,-0.799655735492706,-0.317605823278427,0.509585380554199,\n-0.879560232162476,0.457515209913254,0.130589336156845,-0.536313056945801,-0.172707200050354,-0.826160073280334,-0.799655735492706,-0.317605823278427,0.509585380554199,0.49901670217514,-0.328819900751114,-0.801785349845886,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.612414479255676,-0.645280599594116,0.456685394048691,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.31753671169281,0.108130596578121,0.942060589790344,-0.868339955806732,0.248359262943268,0.429305762052536,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.31753671169281,0.108130596578121,0.942060589790344,-0.218334898352623,0.277430087327957,0.93560802936554,-0.627032935619354,0.660118401050568,0.413610130548477,-0.868339955806732,0.248359262943268,0.429305762052536,-0.218334898352623,0.277430087327957,0.93560802936554,-0.0478470139205456,0.374339252710342,0.926056563854218,-0.21239410340786,0.895821630954742,0.390374630689621,-0.627032935619354,0.660118401050568,0.413610130548477,-0.0478470139205456,0.374339252710342,0.926056563854218,0.148238986730576,0.372900396585464,0.91595333814621,0.264493584632874,0.892315626144409,0.365808635950089,-0.21239410340786,0.895821630954742,0.390374630689621,0.148238986730576,0.372900396585464,0.91595333814621,0.317363291978836,0.27348119020462,0.908013522624969,0.675838232040405,0.650524258613586,0.346498042345047,0.264493584632874,0.892315626144409,0.365808635950089,0.317363291978836,0.27348119020462,0.908013522624969,0.414219319820404,0.102734677493572,0.90436053276062,0.911416888237,0.235228717327118,0.337619215250015,0.675838232040405,0.650524258613586,0.346498042345047,0.414219319820404,0.102734677493572,0.90436053276062,0.412851452827454,-0.0935835912823677,0.905977785587311,0.908100605010986,-0.24227574467659,0.341549009084702,0.911416888237,0.235228717327118,0.337619215250015,0.412851452827454,-0.0935835912823677,0.905977785587311,0.313630968332291,-0.262897282838821,0.912425696849823,0.666783571243286,-0.654056191444397,0.357225596904755,0.908100605010986,-0.24227574467659,0.341549009084702,\n0.313630968332291,-0.262897282838821,0.912425696849823,0.143147274851799,-0.359821945428848,0.921974539756775,0.252132117748261,-0.889766812324524,0.380452841520309,0.666783571243286,-0.654056191444397,0.357225596904755,0.143147274851799,-0.359821945428848,0.921974539756775,-0.0529243946075439,-0.358375370502472,0.932076215744019,-0.224753618240356,-0.886253476142883,0.405019313097,0.252132117748261,-0.889766812324524,0.380452841520309,-0.0529243946075439,-0.358375370502472,0.932076215744019,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.224753618240356,-0.886253476142883,0.405019313097,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.868339955806732,0.248359262943268,0.429305762052536,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.868339955806732,0.248359262943268,0.429305762052536,-0.627032935619354,0.660118401050568,0.413610130548477,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.627032935619354,0.660118401050568,0.413610130548477,-0.21239410340786,0.895821630954742,0.390374630689621,-0.252133041620255,0.889771401882172,-0.380441606044769,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.21239410340786,0.895821630954742,0.390374630689621,0.264493584632874,0.892315626144409,0.365808635950089,0.224738791584969,0.886259078979492,-0.405015259981155,-0.252133041620255,0.889771401882172,-0.380441606044769,0.264493584632874,0.892315626144409,0.365808635950089,0.675838232040405,0.650524258613586,0.346498042345047,0.636084914207459,0.644462466239929,-0.42433974146843,0.224738791584969,0.886259078979492,-0.405015259981155,0.675838232040405,0.650524258613586,0.346498042345047,0.911416888237,0.235228717327118,0.337619215250015,\n0.871663808822632,0.22916416823864,-0.433227360248566,0.636084914207459,0.644462466239929,-0.42433974146843,0.911416888237,0.235228717327118,0.337619215250015,0.908100605010986,-0.24227574467659,0.341549009084702,0.868341326713562,-0.248342737555504,-0.429312497377396,0.871663808822632,0.22916416823864,-0.433227360248566,0.908100605010986,-0.24227574467659,0.341549009084702,0.666783571243286,-0.654056191444397,0.357225596904755,0.627018570899963,-0.660117030143738,-0.413634151220322,0.868341326713562,-0.248342737555504,-0.429312497377396,0.666783571243286,-0.654056191444397,0.357225596904755,0.252132117748261,-0.889766812324524,0.380452841520309,0.212370932102203,-0.895820319652557,-0.390390157699585,0.627018570899963,-0.660117030143738,-0.413634151220322,0.252132117748261,-0.889766812324524,0.380452841520309,-0.224753618240356,-0.886253476142883,0.405019313097,-0.264504671096802,-0.892306506633759,-0.365822821855545,0.212370932102203,-0.895820319652557,-0.390390157699585,-0.224753618240356,-0.886253476142883,0.405019313097,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.264504671096802,-0.892306506633759,-0.365822821855545,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.412847608327866,0.093598335981369,-0.90597802400589,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.412847608327866,0.093598335981369,-0.90597802400589,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.252133041620255,0.889771401882172,-0.380441606044769,-0.14314316213131,0.359831392765045,-0.921971440315247,-0.313630282878876,0.262905478477478,-0.912423551082611,\n-0.252133041620255,0.889771401882172,-0.380441606044769,0.224738791584969,0.886259078979492,-0.405015259981155,0.0529278218746185,0.358382165431976,-0.932073414325714,-0.14314316213131,0.359831392765045,-0.921971440315247,0.224738791584969,0.886259078979492,-0.405015259981155,0.636084914207459,0.644462466239929,-0.42433974146843,0.222044736146927,0.258958548307419,-0.940019488334656,0.0529278218746185,0.358382165431976,-0.932073414325714,0.636084914207459,0.644462466239929,-0.42433974146843,0.871663808822632,0.22916416823864,-0.433227360248566,0.318903893232346,0.0882057771086693,-0.943673670291901,0.222044736146927,0.258958548307419,-0.940019488334656,0.871663808822632,0.22916416823864,-0.433227360248566,0.868341326713562,-0.248342737555504,-0.429312497377396,0.317530363798141,-0.108123689889908,-0.942063570022583,0.318903893232346,0.0882057771086693,-0.943673670291901,0.868341326713562,-0.248342737555504,-0.429312497377396,0.627018570899963,-0.660117030143738,-0.413634151220322,0.218313500285149,-0.277421027421951,-0.935615718364716,0.317530363798141,-0.108123689889908,-0.942063570022583,0.627018570899963,-0.660117030143738,-0.413634151220322,0.212370932102203,-0.895820319652557,-0.390390157699585,0.0478369519114494,-0.374329477548599,-0.926061034202576,0.218313500285149,-0.277421027421951,-0.935615718364716,0.212370932102203,-0.895820319652557,-0.390390157699585,-0.264504671096802,-0.892306506633759,-0.365822821855545,-0.148233711719513,-0.372886508703232,-0.91595983505249,0.0478369519114494,-0.374329477548599,-0.926061034202576,-0.264504671096802,-0.892306506633759,-0.365822821855545,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.317355632781982,-0.273479759693146,-0.908016622066498,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.317355632781982,-0.273479759693146,-0.908016622066498,0.0515071414411068,0.00784654170274735,0.998641788959503,\n-0.31753671169281,0.108130596578121,0.942060589790344,-0.318901360034943,-0.0882023423910141,0.943674862384796,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.218334898352623,0.277430087327957,0.93560802936554,-0.31753671169281,0.108130596578121,0.942060589790344,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.0478470139205456,0.374339252710342,0.926056563854218,-0.218334898352623,0.277430087327957,0.93560802936554,0.0515071414411068,0.00784654170274735,0.998641788959503,0.148238986730576,0.372900396585464,0.91595333814621,-0.0478470139205456,0.374339252710342,0.926056563854218,0.0515071414411068,0.00784654170274735,0.998641788959503,0.317363291978836,0.27348119020462,0.908013522624969,0.148238986730576,0.372900396585464,0.91595333814621,0.0515071414411068,0.00784654170274735,0.998641788959503,0.414219319820404,0.102734677493572,0.90436053276062,0.317363291978836,0.27348119020462,0.908013522624969,0.0515071414411068,0.00784654170274735,0.998641788959503,0.412851452827454,-0.0935835912823677,0.905977785587311,0.414219319820404,0.102734677493572,0.90436053276062,0.0515071414411068,0.00784654170274735,0.998641788959503,0.313630968332291,-0.262897282838821,0.912425696849823,0.412851452827454,-0.0935835912823677,0.905977785587311,0.0515071414411068,0.00784654170274735,0.998641788959503,0.143147274851799,-0.359821945428848,0.921974539756775,0.313630968332291,-0.262897282838821,0.912425696849823,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.0529243946075439,-0.358375370502472,0.932076215744019,0.143147274851799,-0.359821945428848,0.921974539756775,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.0529243946075439,-0.358375370502472,0.932076215744019,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.412847608327866,0.093598335981369,-0.90597802400589,\n-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.412847608327866,0.093598335981369,-0.90597802400589,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.14314316213131,0.359831392765045,-0.921971440315247,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.14314316213131,0.359831392765045,-0.921971440315247,0.0529278218746185,0.358382165431976,-0.932073414325714,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.0529278218746185,0.358382165431976,-0.932073414325714,0.222044736146927,0.258958548307419,-0.940019488334656,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.222044736146927,0.258958548307419,-0.940019488334656,0.318903893232346,0.0882057771086693,-0.943673670291901,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.318903893232346,0.0882057771086693,-0.943673670291901,0.317530363798141,-0.108123689889908,-0.942063570022583,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.317530363798141,-0.108123689889908,-0.942063570022583,0.218313500285149,-0.277421027421951,-0.935615718364716,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.218313500285149,-0.277421027421951,-0.935615718364716,0.0478369519114494,-0.374329477548599,-0.926061034202576,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.0478369519114494,-0.374329477548599,-0.926061034202576,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.317355632781982,-0.273479759693146,-0.908016622066498,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.317355632781982,-0.273479759693146,-0.908016622066498,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.966661691665649,0.248886108398438,-0.0601741522550583,\n-0.58228075504303,0.397593438625336,-0.709132254123688,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.58228075504303,0.397593438625336,-0.709132254123688,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.851284623146057,0.473647087812424,0.225771903991699,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.851284623146057,0.473647087812424,0.225771903991699,-0.79402083158493,0.444575279951096,0.414588689804077,-0.158385679125786,0.879829466342926,0.448122888803482,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.79402083158493,0.444575279951096,0.414588689804077,-0.759445428848267,0.323628008365631,0.564364731311798,-0.0778716132044792,0.579540431499481,0.811214447021484,-0.158385679125786,0.879829466342926,0.448122888803482,-0.759445428848267,0.323628008365631,0.564364731311798,-0.757242918014526,0.146255627274513,0.636547327041626,-0.0762700662016869,0.147347286343575,0.98613977432251,-0.0778716132044792,0.579540431499481,0.811214447021484,-0.757242918014526,0.146255627274513,0.636547327041626,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.152521103620529,-0.309242963790894,0.938672542572021,-0.0762700662016869,0.147347286343575,0.98613977432251,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.288555532693863,-0.679946959018707,0.674097776412964,-0.152521103620529,-0.309242963790894,0.938672542572021,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.447622418403625,-0.858233511447906,0.251136243343353,-0.288555532693863,-0.679946959018707,0.674097776412964,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.581832349300385,-0.785723686218262,-0.210022509098053,\n-0.447622418403625,-0.858233511447906,0.251136243343353,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.654718458652496,-0.490442901849747,-0.575160443782806,-0.581832349300385,-0.785723686218262,-0.210022509098053,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.654718458652496,-0.490442901849747,-0.575160443782806,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.58228075504303,0.397593438625336,-0.709132254123688,0.15252123773098,0.30924791097641,-0.938670873641968,0.0762772560119629,-0.147341594099998,-0.986140072345734,-0.58228075504303,0.397593438625336,-0.709132254123688,-0.453953713178635,0.773242294788361,-0.442744106054306,0.288539916276932,0.679925382137299,-0.674126207828522,0.15252123773098,0.30924791097641,-0.938670873641968,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.297669261693954,0.954544186592102,-0.0154400775209069,0.447615385055542,0.858229279518127,-0.251163244247437,0.288539916276932,0.679925382137299,-0.674126207828522,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.158385679125786,0.879829466342926,0.448122888803482,0.581838190555573,0.785721182823181,0.210015803575516,0.447615385055542,0.858229279518127,-0.251163244247437,-0.158385679125786,0.879829466342926,0.448122888803482,-0.0778716132044792,0.579540431499481,0.811214447021484,0.654724836349487,0.490438729524612,0.57515674829483,0.581838190555573,0.785721182823181,0.210015803575516,-0.0778716132044792,0.579540431499481,0.811214447021484,-0.0762700662016869,0.147347286343575,0.98613977432251,0.653687477111816,0.0610029399394989,0.754301846027374,0.654724836349487,0.490438729524612,0.57515674829483,-0.0762700662016869,0.147347286343575,0.98613977432251,-0.152521103620529,-0.309242963790894,0.938672542572021,0.582287847995758,-0.397587060928345,0.709130048751831,0.653687477111816,0.0610029399394989,0.754301846027374,\n-0.152521103620529,-0.309242963790894,0.938672542572021,-0.288555532693863,-0.679946959018707,0.674097776412964,0.453961431980133,-0.773255228996277,0.442713648080826,0.582287847995758,-0.397587060928345,0.709130048751831,-0.288555532693863,-0.679946959018707,0.674097776412964,-0.447622418403625,-0.858233511447906,0.251136243343353,0.297663301229477,-0.954546689987183,0.0153974173590541,0.453961431980133,-0.773255228996277,0.442713648080826,-0.447622418403625,-0.858233511447906,0.251136243343353,-0.581832349300385,-0.785723686218262,-0.210022509098053,0.158382549881935,-0.879823446273804,-0.448135793209076,0.297663301229477,-0.954546689987183,0.0153974173590541,-0.581832349300385,-0.785723686218262,-0.210022509098053,-0.654718458652496,-0.490442901849747,-0.575160443782806,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.158382549881935,-0.879823446273804,-0.448135793209076,-0.654718458652496,-0.490442901849747,-0.575160443782806,-0.653685986995697,-0.0610022284090519,-0.754303216934204,0.0762772560119629,-0.147341594099998,-0.986140072345734,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.0762772560119629,-0.147341594099998,-0.986140072345734,0.15252123773098,0.30924791097641,-0.938670873641968,0.787807643413544,0.0407794341444969,-0.614569902420044,0.757250845432281,-0.146252647042274,-0.636538565158844,0.15252123773098,0.30924791097641,-0.938670873641968,0.288539916276932,0.679925382137299,-0.674126207828522,0.842750906944275,0.189622536301613,-0.503799676895142,0.787807643413544,0.0407794341444969,-0.614569902420044,0.288539916276932,0.679925382137299,-0.674126207828522,0.447615385055542,0.858229279518127,-0.251163244247437,0.906708478927612,0.260196477174759,-0.331930011510849,0.842750906944275,0.189622536301613,-0.503799676895142,0.447615385055542,0.858229279518127,-0.251163244247437,0.581838190555573,0.785721182823181,0.210015803575516,0.961666405200958,0.232534736394882,-0.145345583558083,0.906708478927612,0.260196477174759,-0.331930011510849,0.581838190555573,0.785721182823181,0.210015803575516,\n0.654724836349487,0.490438729524612,0.57515674829483,0.993358135223389,0.114954985678196,0.00499376095831394,0.961666405200958,0.232534736394882,-0.145345583558083,0.654724836349487,0.490438729524612,0.57515674829483,0.653687477111816,0.0610029399394989,0.754301846027374,0.9949631690979,-0.0604812912642956,0.079939104616642,0.993358135223389,0.114954985678196,0.00499376095831394,0.653687477111816,0.0610029399394989,0.754301846027374,0.582287847995758,-0.397587060928345,0.709130048751831,0.966662883758545,-0.248881489038467,0.0601733289659023,0.9949631690979,-0.0604812912642956,0.079939104616642,0.582287847995758,-0.397587060928345,0.709130048751831,0.453961431980133,-0.773255228996277,0.442713648080826,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.966662883758545,-0.248881489038467,0.0601733289659023,0.453961431980133,-0.773255228996277,0.442713648080826,0.297663301229477,-0.954546689987183,0.0153974173590541,0.851288199424744,-0.473640650510788,-0.225771829485893,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.297663301229477,-0.954546689987183,0.0153974173590541,0.158382549881935,-0.879823446273804,-0.448135793209076,0.794022977352142,-0.44456884264946,-0.414591461420059,0.851288199424744,-0.473640650510788,-0.225771829485893,0.158382549881935,-0.879823446273804,-0.448135793209076,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.759444773197174,-0.323628276586533,-0.564365446567535,0.794022977352142,-0.44456884264946,-0.414591461420059,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.0762772560119629,-0.147341594099998,-0.986140072345734,0.757250845432281,-0.146252647042274,-0.636538565158844,0.759444773197174,-0.323628276586533,-0.564365446567535,-0.947113156318665,0.111555203795433,0.300885528326035,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.947113156318665,0.111555203795433,0.300885528326035,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.966661691665649,0.248886108398438,-0.0601741522550583,\n-0.947113156318665,0.111555203795433,0.300885528326035,-0.851284623146057,0.473647087812424,0.225771903991699,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.947113156318665,0.111555203795433,0.300885528326035,-0.79402083158493,0.444575279951096,0.414588689804077,-0.851284623146057,0.473647087812424,0.225771903991699,-0.947113156318665,0.111555203795433,0.300885528326035,-0.759445428848267,0.323628008365631,0.564364731311798,-0.79402083158493,0.444575279951096,0.414588689804077,-0.947113156318665,0.111555203795433,0.300885528326035,-0.757242918014526,0.146255627274513,0.636547327041626,-0.759445428848267,0.323628008365631,0.564364731311798,-0.947113156318665,0.111555203795433,0.300885528326035,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.757242918014526,0.146255627274513,0.636547327041626,-0.947113156318665,0.111555203795433,0.300885528326035,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.947113156318665,0.111555203795433,0.300885528326035,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.947113156318665,0.111555203795433,0.300885528326035,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.947113156318665,0.111555203795433,0.300885528326035,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.947113156318665,0.111555203795433,0.300885528326035,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.99335777759552,-0.114957891404629,-0.00500302389264107,0.757250845432281,-0.146252647042274,-0.636538565158844,0.787807643413544,0.0407794341444969,-0.614569902420044,0.947114884853363,-0.111551322042942,-0.300881564617157,0.787807643413544,0.0407794341444969,-0.614569902420044,0.842750906944275,0.189622536301613,-0.503799676895142,0.947114884853363,-0.111551322042942,-0.300881564617157,0.842750906944275,0.189622536301613,-0.503799676895142,\n0.906708478927612,0.260196477174759,-0.331930011510849,0.947114884853363,-0.111551322042942,-0.300881564617157,0.906708478927612,0.260196477174759,-0.331930011510849,0.961666405200958,0.232534736394882,-0.145345583558083,0.947114884853363,-0.111551322042942,-0.300881564617157,0.961666405200958,0.232534736394882,-0.145345583558083,0.993358135223389,0.114954985678196,0.00499376095831394,0.947114884853363,-0.111551322042942,-0.300881564617157,0.993358135223389,0.114954985678196,0.00499376095831394,0.9949631690979,-0.0604812912642956,0.079939104616642,0.947114884853363,-0.111551322042942,-0.300881564617157,0.9949631690979,-0.0604812912642956,0.079939104616642,0.966662883758545,-0.248881489038467,0.0601733289659023,0.947114884853363,-0.111551322042942,-0.300881564617157,0.966662883758545,-0.248881489038467,0.0601733289659023,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.947114884853363,-0.111551322042942,-0.300881564617157,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.851288199424744,-0.473640650510788,-0.225771829485893,0.947114884853363,-0.111551322042942,-0.300881564617157,0.851288199424744,-0.473640650510788,-0.225771829485893,0.794022977352142,-0.44456884264946,-0.414591461420059,0.947114884853363,-0.111551322042942,-0.300881564617157,0.794022977352142,-0.44456884264946,-0.414591461420059,0.759444773197174,-0.323628276586533,-0.564365446567535,0.947114884853363,-0.111551322042942,-0.300881564617157,0.759444773197174,-0.323628276586533,-0.564365446567535,0.757250845432281,-0.146252647042274,-0.636538565158844,0.947114884853363,-0.111551322042942,-0.300881564617157,-0.751705825328827,0.499238789081573,0.430927991867065,-0.67541229724884,0.485521674156189,-0.555055737495422,-0.574179291725159,0.614476501941681,-0.541051506996155,-0.613819122314453,0.653787076473236,0.442480057477951,-0.751705825328827,0.499238789081573,0.430927991867065,-0.777491211891174,0.513072729110718,0.363680928945541,-0.671055376529694,0.46099641919136,-0.580660879611969,-0.67541229724884,0.485521674156189,-0.555055737495422,\n-0.439152985811234,0.717960596084595,0.540071547031403,-0.615385949611664,0.731114089488983,0.294571459293365,-0.777491211891174,0.513072729110718,0.363680928945541,-0.517933547496796,0.54983514547348,0.655306160449982,-0.439152985811234,0.717960596084595,0.540071547031403,-0.152461975812912,0.801973640918732,0.577575623989105,-0.341462641954422,0.911851763725281,0.227880761027336,-0.615385949611664,0.731114089488983,0.294571459293365,-0.439152985811234,0.717960596084595,0.540071547031403,-0.517933547496796,0.54983514547348,0.655306160449982,-0.115547746419907,0.596075415611267,0.794570803642273,-0.152461975812912,0.801973640918732,0.577575623989105,-0.554732620716095,0.528954327106476,0.642245292663574,-0.468677580356598,0.695621490478516,0.544474124908447,-0.133603423833847,0.738610506057739,0.660760641098022,-0.180301427841187,0.592643916606903,0.785025238990784,-0.554732620716095,0.528954327106476,0.642245292663574,-0.751705825328827,0.499238789081573,0.430927991867065,-0.617351293563843,0.618397295475006,0.486273765563965,-0.468677580356598,0.695621490478516,0.544474124908447,-0.554732620716095,0.528954327106476,0.642245292663574,-0.517933547496796,0.54983514547348,0.655306160449982,-0.777491211891174,0.513072729110718,0.363680928945541,-0.751705825328827,0.499238789081573,0.430927991867065,-0.554732620716095,0.528954327106476,0.642245292663574,-0.180301427841187,0.592643916606903,0.785025238990784,-0.115547746419907,0.596075415611267,0.794570803642273,-0.517933547496796,0.54983514547348,0.655306160449982,-0.615385949611664,0.731114089488983,0.294571459293365,-0.341462641954422,0.911851763725281,0.227880761027336,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.615385949611664,0.731114089488983,0.294571459293365,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.671055376529694,0.46099641919136,-0.580660879611969,-0.777491211891174,0.513072729110718,0.363680928945541,0.100666761398315,0.823356568813324,0.558524966239929,0.303691446781158,0.796526610851288,0.522797167301178,\n0.173411548137665,0.978560149669647,0.111123643815517,-0.0562314540147781,0.983582377433777,0.171474948525429,0.100666761398315,0.823356568813324,0.558524966239929,0.137634456157684,0.618980467319489,0.773252785205841,0.349911212921143,0.597250580787659,0.721702098846436,0.303691446781158,0.796526610851288,0.522797167301178,0.100666761398315,0.823356568813324,0.558524966239929,-0.152461975812912,0.801973640918732,0.577575623989105,-0.115547746419907,0.596075415611267,0.794570803642273,0.137634456157684,0.618980467319489,0.773252785205841,0.100666761398315,0.823356568813324,0.558524966239929,-0.0562314540147781,0.983582377433777,0.171474948525429,-0.341462641954422,0.911851763725281,0.227880761027336,-0.152461975812912,0.801973640918732,0.577575623989105,0.111760005354881,0.6034294962883,0.789545774459839,0.3438441157341,0.581315696239471,0.73745733499527,0.349911212921143,0.597250580787659,0.721702098846436,0.137634456157684,0.618980467319489,0.773252785205841,0.111760005354881,0.6034294962883,0.789545774459839,0.115875713527203,0.724421501159668,0.679548561573029,0.311594694852829,0.703108549118042,0.639176845550537,0.3438441157341,0.581315696239471,0.73745733499527,0.111760005354881,0.6034294962883,0.789545774459839,-0.180301427841187,0.592643916606903,0.785025238990784,-0.133603423833847,0.738610506057739,0.660760641098022,0.115875713527203,0.724421501159668,0.679548561573029,0.111760005354881,0.6034294962883,0.789545774459839,0.137634456157684,0.618980467319489,0.773252785205841,-0.115547746419907,0.596075415611267,0.794570803642273,-0.180301427841187,0.592643916606903,0.785025238990784,-0.0562314540147781,0.983582377433777,0.171474948525429,0.173411548137665,0.978560149669647,0.111123643815517,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.0562314540147781,0.983582377433777,0.171474948525429,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.341462641954422,0.911851763725281,0.227880761027336,\n0.303691446781158,0.796526610851288,0.522797167301178,0.573039770126343,0.718792796134949,0.393652617931366,0.427761524915695,0.903279960155487,-0.0332473926246166,0.173411548137665,0.978560149669647,0.111123643815517,0.303691446781158,0.796526610851288,0.522797167301178,0.349911212921143,0.597250580787659,0.721702098846436,0.619265675544739,0.530689239501953,0.578687310218811,0.573039770126343,0.718792796134949,0.393652617931366,0.3438441157341,0.581315696239471,0.73745733499527,0.614433944225311,0.529466807842255,0.584923803806305,0.619265675544739,0.530689239501953,0.578687310218811,0.349911212921143,0.597250580787659,0.721702098846436,0.3438441157341,0.581315696239471,0.73745733499527,0.311594694852829,0.703108549118042,0.639176845550537,0.595157265663147,0.650768876075745,0.471473932266235,0.614433944225311,0.529466807842255,0.584923803806305,0.173411548137665,0.978560149669647,0.111123643815517,0.427761524915695,0.903279960155487,-0.0332473926246166,-0.0669071823358536,0.486191123723984,-0.87128734588623,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.838148951530457,0.305466830730438,0.451880872249603,-0.84395432472229,0.306451618671417,0.440259546041489,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.765394926071167,0.3244788646698,0.555773317813873,-0.838148951530457,0.305466830730438,0.451880872249603,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.402393966913223,0.337146878242493,0.85112339258194,-0.765394926071167,0.3244788646698,0.555773317813873,-0.0118078086525202,-0.230731546878815,0.972945809364319,0.0376495942473412,0.290562659502029,0.956115007400513,-0.402393966913223,0.337146878242493,0.85112339258194,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.0118078086525202,-0.230731546878815,0.972945809364319,0.254925400018692,-0.255845844745636,0.932499825954437,\n0.298023343086243,0.239961877465248,0.923904955387115,0.0376495942473412,0.290562659502029,0.956115007400513,0.254925400018692,-0.255845844745636,0.932499825954437,0.46340024471283,-0.317235618829727,0.827418744564056,0.511566936969757,0.168196827173233,0.842620372772217,0.298023343086243,0.239961877465248,0.923904955387115,-0.617351293563843,0.618397295475006,0.486273765563965,-0.613819122314453,0.653787076473236,0.442480057477951,-0.565762281417847,0.699094772338867,0.437240809202194,-0.580900967121124,0.676747918128967,0.452290087938309,-0.613819122314453,0.653787076473236,0.442480057477951,-0.574179291725159,0.614476501941681,-0.541051506996155,-0.553338885307312,0.652364552021027,-0.517915606498718,-0.565762281417847,0.699094772338867,0.437240809202194,-0.468677580356598,0.695621490478516,0.544474124908447,-0.464684039354324,0.73650199174881,0.491562396287918,-0.136432588100433,0.76638126373291,0.62773072719574,-0.133603423833847,0.738610506057739,0.660760641098022,-0.468677580356598,0.695621490478516,0.544474124908447,-0.617351293563843,0.618397295475006,0.486273765563965,-0.580900967121124,0.676747918128967,0.452290087938309,-0.464684039354324,0.73650199174881,0.491562396287918,0.115875713527203,0.724421501159668,0.679548561573029,0.114413313567638,0.738645255565643,0.664313733577728,0.288802593946457,0.72074019908905,0.630179822444916,0.311594694852829,0.703108549118042,0.639176845550537,0.115875713527203,0.724421501159668,0.679548561573029,-0.133603423833847,0.738610506057739,0.660760641098022,-0.136432588100433,0.76638126373291,0.62773072719574,0.114413313567638,0.738645255565643,0.664313733577728,0.311594694852829,0.703108549118042,0.639176845550537,0.288802593946457,0.72074019908905,0.630179822444916,0.483360201120377,0.719882130622864,0.498129189014435,0.595157265663147,0.650768876075745,0.471473932266235,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.551096558570862,-0.25121533870697,-0.795728206634521,0.553836524486542,-0.170769691467285,-0.814925014972687,0.950989067554474,-0.0476415567100048,-0.305532544851303,\n0.825739741325378,0.310847252607346,0.470667392015457,0.913910686969757,0.00122638128232211,0.405913442373276,0.985759019851685,-0.0950566306710243,-0.138720765709877,0.903454899787903,0.395046651363373,0.166455298662186,0.825739741325378,0.310847252607346,0.470667392015457,0.491690248250961,0.47496309876442,0.72982931137085,0.511566936969757,0.168196827173233,0.842620372772217,0.913910686969757,0.00122638128232211,0.405913442373276,0.825739741325378,0.310847252607346,0.470667392015457,0.903454899787903,0.395046651363373,0.166455298662186,0.483360201120377,0.719882130622864,0.498129189014435,0.491690248250961,0.47496309876442,0.72982931137085,0.911615371704102,0.410868912935257,-0.0120057743042707,0.777296364307404,0.555617034435272,-0.295127332210541,0.427761524915695,0.903279960155487,-0.0332473926246166,0.573039770126343,0.718792796134949,0.393652617931366,0.911615371704102,0.410868912935257,-0.0120057743042707,0.954911112785339,0.274276524782181,0.113653682172298,0.937605857849121,-0.0351583212614059,-0.345917791128159,0.909277319908142,0.0840957164764404,-0.407606035470963,0.911615371704102,0.410868912935257,-0.0120057743042707,0.573039770126343,0.718792796134949,0.393652617931366,0.619265675544739,0.530689239501953,0.578687310218811,0.954911112785339,0.274276524782181,0.113653682172298,0.955691754817963,0.266970068216324,0.124017179012299,0.954911112785339,0.274276524782181,0.113653682172298,0.619265675544739,0.530689239501953,0.578687310218811,0.614433944225311,0.529466807842255,0.584923803806305,0.955691754817963,0.266970068216324,0.124017179012299,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.937605857849121,-0.0351583212614059,-0.345917791128159,0.954911112785339,0.274276524782181,0.113653682172298,0.955691754817963,0.266970068216324,0.124017179012299,0.614433944225311,0.529466807842255,0.584923803806305,0.595157265663147,0.650768876075745,0.471473932266235,0.959389328956604,0.278238892555237,0.0464239455759525,0.777296364307404,0.555617034435272,-0.295127332210541,0.0935691148042679,0.299101799726486,-0.949622511863709,\n-0.0669071823358536,0.486191123723984,-0.87128734588623,0.427761524915695,0.903279960155487,-0.0332473926246166,0.777296364307404,0.555617034435272,-0.295127332210541,0.909277319908142,0.0840957164764404,-0.407606035470963,0.223619028925896,0.0197683665901423,-0.974476158618927,0.0935691148042679,0.299101799726486,-0.949622511863709,0.781544268131256,-0.494354426860809,0.380528897047043,0.913910686969757,0.00122638128232211,0.405913442373276,0.511566936969757,0.168196827173233,0.842620372772217,0.46340024471283,-0.317235618829727,0.827418744564056,0.781544268131256,-0.494354426860809,0.380528897047043,0.895158112049103,-0.394557535648346,-0.207403689622879,0.985759019851685,-0.0950566306710243,-0.138720765709877,0.913910686969757,0.00122638128232211,0.405913442373276,-0.731446206569672,0.503581285476685,0.459774166345596,-0.717735588550568,0.527478277683258,0.454557299613953,-0.84395432472229,0.306451618671417,0.440259546041489,-0.838148951530457,0.305466830730438,0.451880872249603,-0.731446206569672,0.503581285476685,0.459774166345596,-0.580900967121124,0.676747918128967,0.452290087938309,-0.565762281417847,0.699094772338867,0.437240809202194,-0.717735588550568,0.527478277683258,0.454557299613953,-0.717735588550568,0.527478277683258,0.454557299613953,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.84395432472229,0.306451618671417,0.440259546041489,-0.717735588550568,0.527478277683258,0.454557299613953,-0.565762281417847,0.699094772338867,0.437240809202194,-0.553338885307312,0.652364552021027,-0.517915606498718,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.645979166030884,0.542717456817627,0.53681343793869,-0.283104240894318,0.575908482074738,0.766929864883423,-0.136432588100433,0.76638126373291,0.62773072719574,-0.464684039354324,0.73650199174881,0.491562396287918,-0.645979166030884,0.542717456817627,0.53681343793869,-0.765394926071167,0.3244788646698,0.555773317813873,-0.402393966913223,0.337146878242493,0.85112339258194,-0.283104240894318,0.575908482074738,0.766929864883423,\n-0.645979166030884,0.542717456817627,0.53681343793869,-0.731446206569672,0.503581285476685,0.459774166345596,-0.838148951530457,0.305466830730438,0.451880872249603,-0.765394926071167,0.3244788646698,0.555773317813873,-0.645979166030884,0.542717456817627,0.53681343793869,-0.464684039354324,0.73650199174881,0.491562396287918,-0.580900967121124,0.676747918128967,0.452290087938309,-0.731446206569672,0.503581285476685,0.459774166345596,0.0814845785498619,0.534461736679077,0.84125554561615,0.300524145364761,0.497426092624664,0.813788950443268,0.288802593946457,0.72074019908905,0.630179822444916,0.114413313567638,0.738645255565643,0.664313733577728,0.0814845785498619,0.534461736679077,0.84125554561615,0.0376495942473412,0.290562659502029,0.956115007400513,0.298023343086243,0.239961877465248,0.923904955387115,0.300524145364761,0.497426092624664,0.813788950443268,0.0814845785498619,0.534461736679077,0.84125554561615,-0.283104240894318,0.575908482074738,0.766929864883423,-0.402393966913223,0.337146878242493,0.85112339258194,0.0376495942473412,0.290562659502029,0.956115007400513,0.0814845785498619,0.534461736679077,0.84125554561615,0.114413313567638,0.738645255565643,0.664313733577728,-0.136432588100433,0.76638126373291,0.62773072719574,-0.283104240894318,0.575908482074738,0.766929864883423,0.300524145364761,0.497426092624664,0.813788950443268,0.491690248250961,0.47496309876442,0.72982931137085,0.483360201120377,0.719882130622864,0.498129189014435,0.288802593946457,0.72074019908905,0.630179822444916,0.300524145364761,0.497426092624664,0.813788950443268,0.298023343086243,0.239961877465248,0.923904955387115,0.511566936969757,0.168196827173233,0.842620372772217,0.491690248250961,0.47496309876442,0.72982931137085,0.914809167385101,0.392747074365616,0.0942015051841736,0.903454899787903,0.395046651363373,0.166455298662186,0.985759019851685,-0.0950566306710243,-0.138720765709877,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.914809167385101,0.392747074365616,0.0942015051841736,0.595157265663147,0.650768876075745,0.471473932266235,\n0.483360201120377,0.719882130622864,0.498129189014435,0.903454899787903,0.395046651363373,0.166455298662186,0.225880712270737,-0.859437644481659,-0.458633750677109,0.29811355471611,-0.682091355323792,-0.667742192745209,0.311078637838364,-0.216382816433907,-0.925423443317413,0.16324470937252,-0.308202177286148,-0.937210023403168,0.225880712270737,-0.859437644481659,-0.458633750677109,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.282306700944901,-0.637052953243256,-0.717263162136078,0.29811355471611,-0.682091355323792,-0.667742192745209,0.225880712270737,-0.859437644481659,-0.458633750677109,-0.0423314645886421,-0.689121425151825,-0.723408401012421,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.810647666454315,-0.584102094173431,-0.0409278348088264,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.810647666454315,-0.584102094173431,-0.0409278348088264,0.29811355471611,-0.682091355323792,-0.667742192745209,0.264597475528717,-0.737169206142426,-0.621747314929962,0.115910343825817,-0.0576019249856472,-0.991588056087494,0.311078637838364,-0.216382816433907,-0.925423443317413,0.29811355471611,-0.682091355323792,-0.667742192745209,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.247060716152191,-0.702493846416473,-0.667430460453033,0.264597475528717,-0.737169206142426,-0.621747314929962,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.901528060436249,-0.393501937389374,-0.180009379982948,-0.247060716152191,-0.702493846416473,-0.667430460453033,-0.901528060436249,-0.393501937389374,-0.180009379982948,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.955415546894073,0.030608743429184,-0.293673634529114,\n-0.957066535949707,0.0726807713508606,-0.280608594417572,-0.810647666454315,-0.584102094173431,-0.0409278348088264,-0.942904889583588,-0.124770976603031,-0.308808296918869,-0.955415546894073,0.030608743429184,-0.293673634529114,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.67541229724884,0.485521674156189,-0.555055737495422,-0.671055376529694,0.46099641919136,-0.580660879611969,0.16324470937252,-0.308202177286148,-0.937210023403168,0.311078637838364,-0.216382816433907,-0.925423443317413,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.0423314645886421,-0.689121425151825,-0.723408401012421,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.0423314645886421,-0.689121425151825,-0.723408401012421,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.0669071823358536,0.486191123723984,-0.87128734588623,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.0990582183003426,-0.981914699077606,0.161341309547424,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.402248114347458,-0.864168643951416,0.302339196205139,-0.0841861814260483,-0.983832597732544,0.158069923520088,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.202129036188126,-0.938186347484589,-0.280980914831162,-0.0823863819241524,-0.986806333065033,0.139376148581505,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.0823863819241524,-0.986806333065033,0.139376148581505,-0.0841861814260483,-0.983832597732544,0.158069923520088,-0.402248114347458,-0.864168643951416,0.302339196205139,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.0981104820966721,-0.982542932033539,0.158062309026718,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.0990582183003426,-0.981914699077606,0.161341309547424,\n-0.0981104820966721,-0.982542932033539,0.158062309026718,-0.0767614245414734,-0.98267537355423,0.168691396713257,-0.232284545898438,-0.856678247451782,0.460593432188034,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.0490679740905762,-0.984484553337097,0.168471187353134,-0.0472139939665794,-0.860794186592102,0.506758570671082,-0.232284545898438,-0.856678247451782,0.460593432188034,-0.0767614245414734,-0.98267537355423,0.168691396713257,-0.0490679740905762,-0.984484553337097,0.168471187353134,-0.0325715281069279,-0.988623857498169,0.14683997631073,0.0744497627019882,-0.870341658592224,0.486788034439087,-0.0472139939665794,-0.860794186592102,0.506758570671082,-0.0325715281069279,-0.988623857498169,0.14683997631073,-0.0330409817397594,-0.990994393825531,0.129762962460518,0.212042272090912,-0.828755676746368,0.517882287502289,0.0744497627019882,-0.870341658592224,0.486788034439087,-0.574179291725159,0.614476501941681,-0.541051506996155,0.311078637838364,-0.216382816433907,-0.925423443317413,0.115910343825817,-0.0576019249856472,-0.991588056087494,-0.553338885307312,0.652364552021027,-0.517915606498718,0.551096558570862,-0.25121533870697,-0.795728206634521,-0.957066535949707,0.0726807713508606,-0.280608594417572,-0.955415546894073,0.030608743429184,-0.293673634529114,0.553836524486542,-0.170769691467285,-0.814925014972687,0.553836524486542,-0.170769691467285,-0.814925014972687,-0.955415546894073,0.030608743429184,-0.293673634529114,-0.942904889583588,-0.124770976603031,-0.308808296918869,0.223619028925896,0.0197683665901423,-0.974476158618927,0.0935691148042679,0.299101799726486,-0.949622511863709,0.223619028925896,0.0197683665901423,-0.974476158618927,-0.942904889583588,-0.124770976603031,-0.308808296918869,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.677798688411713,0.543503999710083,-0.49516898393631,0.115910343825817,-0.0576019249856472,-0.991588056087494,-0.157777264714241,0.23123687505722,-0.960018694400787,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.462465226650238,-0.184937626123428,-0.867135524749756,\n-0.29739573597908,-0.262825429439545,-0.917866349220276,-0.202129036188126,-0.938186347484589,-0.280980914831162,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.402248114347458,-0.864168643951416,0.302339196205139,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.916306138038635,-0.243330180644989,0.318077772855759,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.402248114347458,-0.864168643951416,0.302339196205139,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.916306138038635,-0.243330180644989,0.318077772855759,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.232284545898438,-0.856678247451782,0.460593432188034,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.0118078086525202,-0.230731546878815,0.972945809364319,-0.0472139939665794,-0.860794186592102,0.506758570671082,0.0744497627019882,-0.870341658592224,0.486788034439087,0.254925400018692,-0.255845844745636,0.932499825954437,-0.0118078086525202,-0.230731546878815,0.972945809364319,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.232284545898438,-0.856678247451782,0.460593432188034,-0.0472139939665794,-0.860794186592102,0.506758570671082,0.254925400018692,-0.255845844745636,0.932499825954437,0.0744497627019882,-0.870341658592224,0.486788034439087,0.212042272090912,-0.828755676746368,0.517882287502289,0.46340024471283,-0.317235618829727,0.827418744564056,0.509586453437805,-0.79888927936554,0.319527089595795,0.566634595394135,-0.823737919330597,0.0195191036909819,\n0.895158112049103,-0.394557535648346,-0.207403689622879,0.781544268131256,-0.494354426860809,0.380528897047043,0.509586453437805,-0.79888927936554,0.319527089595795,0.781544268131256,-0.494354426860809,0.380528897047043,0.46340024471283,-0.317235618829727,0.827418744564056,0.212042272090912,-0.828755676746368,0.517882287502289,-0.879374027252197,0.0191096197813749,-0.475748002529144,-0.462465226650238,-0.184937626123428,-0.867135524749756,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.916306138038635,-0.243330180644989,0.318077772855759,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.84395432472229,0.306451618671417,0.440259546041489,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.879374027252197,0.0191096197813749,-0.475748002529144,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.916306138038635,-0.243330180644989,0.318077772855759,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.879374027252197,0.0191096197813749,-0.475748002529144,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.157777264714241,0.23123687505722,-0.960018694400787,-0.462465226650238,-0.184937626123428,-0.867135524749756,0.985759019851685,-0.0950566306710243,-0.138720765709877,0.895158112049103,-0.394557535648346,-0.207403689622879,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.895158112049103,-0.394557535648346,-0.207403689622879,0.551096558570862,-0.25121533870697,-0.795728206634521,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.553836524486542,-0.170769691467285,-0.814925014972687,0.909277319908142,0.0840957164764404,-0.407606035470963,0.937605857849121,-0.0351583212614059,-0.345917791128159,0.553836524486542,-0.170769691467285,-0.814925014972687,0.937605857849121,-0.0351583212614059,-0.345917791128159,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.223619028925896,0.0197683665901423,-0.974476158618927,0.909277319908142,0.0840957164764404,-0.407606035470963,0.553836524486542,-0.170769691467285,-0.814925014972687,\n0.595157265663147,0.650768876075745,0.471473932266235,0.914809167385101,0.392747074365616,0.0942015051841736,0.959389328956604,0.278238892555237,0.0464239455759525,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.959389328956604,0.278238892555237,0.0464239455759525,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.959389328956604,0.278238892555237,0.0464239455759525,0.914809167385101,0.392747074365616,0.0942015051841736,0.909277319908142,0.0840957164764404,-0.407606035470963,0.777296364307404,0.555617034435272,-0.295127332210541,0.911615371704102,0.410868912935257,-0.0120057743042707,0.959389328956604,0.278238892555237,0.0464239455759525,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.955691754817963,0.266970068216324,0.124017179012299,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.0423314645886421,-0.689121425151825,-0.723408401012421,0.225880712270737,-0.859437644481659,-0.458633750677109,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.942904889583588,-0.124770976603031,-0.308808296918869,-0.810647666454315,-0.584102094173431,-0.0409278348088264,0.311078637838364,-0.216382816433907,-0.925423443317413,-0.574179291725159,0.614476501941681,-0.541051506996155,-0.67541229724884,0.485521674156189,-0.555055737495422,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.671055376529694,0.46099641919136,-0.580660879611969,-0.562178492546082,0.54021954536438,-0.626193344593048,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.462465226650238,-0.184937626123428,-0.867135524749756,-0.157777264714241,0.23123687505722,-0.960018694400787,-0.29739573597908,-0.262825429439545,-0.917866349220276,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.0669071823358536,0.486191123723984,-0.87128734588623,0.0935691148042679,0.299101799726486,-0.949622511863709,-0.553338885307312,0.652364552021027,-0.517915606498718,\n0.115910343825817,-0.0576019249856472,-0.991588056087494,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.613819122314453,0.653787076473236,0.442480057477951,-0.617351293563843,0.618397295475006,0.486273765563965,-0.751705825328827,0.499238789081573,0.430927991867065,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,0.813896775245667,0.349610984325409,0.464051961898804,0.614185929298401,0.569629371166229,0.546166718006134,0.756061971187592,0.654500067234039,2.3479871742893e-005,0.925318360328674,0.379191190004349,1.48290735069168e-006,0.391825526952744,0.788023412227631,0.474859833717346,0.470227479934692,0.88252204656601,0.00639821914955974,0.756061971187592,0.654500067234039,2.3479871742893e-005,0.614185929298401,0.569629371166229,0.546166718006134,0.801087200641632,-0.297826498746872,0.519190430641174,0.931309640407562,-0.364154070615768,0.00736169191077352,0.934493005275726,0.355923593044281,0.00642255879938602,\n0.806965947151184,0.306465566158295,0.504861176013947,0.367402404546738,-0.773531317710876,0.516395926475525,0.596734344959259,-0.558585286140442,0.576099514961243,0.737963557243347,-0.674840569496155,-2.56854491453851e-005,0.44488126039505,-0.89555948972702,0.00733880698680878,0.596734344959259,-0.558585286140442,0.576099514961243,0.800876438617706,-0.339855968952179,0.493046551942825,0.922433912754059,-0.386155009269714,-2.86983799924201e-006,0.737963557243347,-0.674840569496155,-2.56854491453851e-005,0.800876438617706,-0.339855968952179,0.493046551942825,0.334624856710434,-0.800290584564209,0.497555166482925,0.379204839468002,-0.925312757492065,-1.92532752407715e-006,0.922433912754059,-0.386155009269714,-2.86983799924201e-006,0.596734344959259,-0.558585286140442,0.576099514961243,0.106314092874527,-0.103658013045788,0.988914728164673,0.257298767566681,-0.254731476306915,0.932153046131134,0.800876438617706,-0.339855968952179,0.493046551942825,0.101462937891483,-0.233674854040146,0.967006385326386,0.106314092874527,-0.103658013045788,0.988914728164673,0.596734344959259,-0.558585286140442,0.576099514961243,0.367402404546738,-0.773531317710876,0.516395926475525,0.806965947151184,0.306465566158295,0.504861176013947,0.331482470035553,0.125218272209167,0.935114860534668,0.318617641925812,-0.106823146343231,0.941844820976257,0.801087200641632,-0.297826498746872,0.519190430641174,0.614185929298401,0.569629371166229,0.546166718006134,0.136184617877007,0.141381427645683,0.980543255805969,0.119092851877213,0.270987540483475,0.955187201499939,0.391825526952744,0.788023412227631,0.474859833717346,0.283706575632095,0.309986978769302,0.907424211502075,0.136184617877007,0.141381427645683,0.980543255805969,0.614185929298401,0.569629371166229,0.546166718006134,0.813896775245667,0.349610984325409,0.464051961898804,0.925318360328674,0.379191190004349,1.48290735069168e-006,0.386173337697983,0.922426223754883,-1.33558714878745e-005,0.350653737783432,0.829828143119812,0.434081971645355,0.813896775245667,0.349610984325409,0.464051961898804,\n0.334624856710434,-0.800290584564209,0.497555166482925,0.249570056796074,-0.831263303756714,0.496705174446106,0.287294447422028,-0.95784193277359,0.000848318391945213,0.379204839468002,-0.925312757492065,-1.92532752407715e-006,0.257298767566681,-0.254731476306915,0.932153046131134,0.0777146592736244,-0.258388966321945,0.962909936904907,0.249570056796074,-0.831263303756714,0.496705174446106,0.334624856710434,-0.800290584564209,0.497555166482925,0.119092851877213,0.270987540483475,0.955187201499939,0.136184617877007,0.141381427645683,0.980543255805969,0.106314092874527,-0.103658013045788,0.988914728164673,0.101462937891483,-0.233674854040146,0.967006385326386,0.249570056796074,-0.831263303756714,0.496705174446106,0.202535301446915,-0.827068865299225,0.524343967437744,0.230931788682938,-0.972930014133453,0.00881298631429672,0.287294447422028,-0.95784193277359,0.000848318391945213,0.0620995722711086,-0.238982826471329,0.969036042690277,0.202535301446915,-0.827068865299225,0.524343967437744,0.249570056796074,-0.831263303756714,0.496705174446106,0.0777146592736244,-0.258388966321945,0.962909936904907,-0.224501311779022,0.125647932291031,0.966339349746704,0.0620995722711086,-0.238982826471329,0.969036042690277,0.0777146592736244,-0.258388966321945,0.962909936904907,0.106314092874527,-0.103658013045788,0.988914728164673,0.136184617877007,0.141381427645683,0.980543255805969,-0.267910957336426,0.269903123378754,0.924865424633026,-0.224501311779022,0.125647932291031,0.966339349746704,0.106314092874527,-0.103658013045788,0.988914728164673,-0.359729558229446,0.842673659324646,0.400619268417358,-0.267910957336426,0.269903123378754,0.924865424633026,0.283706575632095,0.309986978769302,0.907424211502075,0.350653737783432,0.829828143119812,0.434081971645355,0.386173337697983,0.922426223754883,-1.33558714878745e-005,-0.379228323698044,0.925303101539612,-2.7772266548709e-005,-0.359729558229446,0.842673659324646,0.400619268417358,0.350653737783432,0.829828143119812,0.434081971645355,-0.484778821468353,-0.720648169517517,0.495636761188507,\n-0.907637715339661,-0.237347409129143,0.34620800614357,-0.961853384971619,-0.273398995399475,-0.00954078417271376,-0.530582964420319,-0.847630381584167,0.00210796948522329,-0.223055556416512,-0.293780386447906,0.929483354091644,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.907637715339661,-0.237347409129143,0.34620800614357,-0.484778821468353,-0.720648169517517,0.495636761188507,-0.82353150844574,0.433955609798431,0.365346997976303,-0.876223564147949,0.481887936592102,-0.00404113344848156,-0.961853384971619,-0.273398995399475,-0.00954078417271376,-0.907637715339661,-0.237347409129143,0.34620800614357,-0.784685611724854,0.430022925138474,0.446484923362732,-0.82353150844574,0.433955609798431,0.365346997976303,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.224501311779022,0.125647932291031,0.966339349746704,-0.267910957336426,0.269903123378754,0.924865424633026,-0.839977502822876,0.365999639034271,0.400602132081985,-0.784685611724854,0.430022925138474,0.446484923362732,-0.224501311779022,0.125647932291031,0.966339349746704,-0.379228323698044,0.925303101539612,-2.7772266548709e-005,-0.922426700592041,0.386172264814377,-1.29236177599523e-005,-0.839977502822876,0.365999639034271,0.400602132081985,-0.359729558229446,0.842673659324646,0.400619268417358,-0.879828155040741,0.475291937589645,4.95063375183236e-007,-0.876223564147949,0.481887936592102,-0.00404113344848156,-0.82353150844574,0.433955609798431,0.365346997976303,-0.784685611724854,0.430022925138474,0.446484923362732,-0.922426700592041,0.386172264814377,-1.29236177599523e-005,-0.879828155040741,0.475291937589645,4.95063375183236e-007,-0.784685611724854,0.430022925138474,0.446484923362732,-0.839977502822876,0.365999639034271,0.400602132081985,0.391825526952744,0.788023412227631,0.474859833717346,0.806965947151184,0.306465566158295,0.504861176013947,0.934493005275726,0.355923593044281,0.00642255879938602,0.470227479934692,0.88252204656601,0.00639821914955974,0.801087200641632,-0.297826498746872,0.519190430641174,0.367402404546738,-0.773531317710876,0.516395926475525,\n0.44488126039505,-0.89555948972702,0.00733880698680878,0.931309640407562,-0.364154070615768,0.00736169191077352,0.367402404546738,-0.773531317710876,0.516395926475525,0.801087200641632,-0.297826498746872,0.519190430641174,0.318617641925812,-0.106823146343231,0.941844820976257,0.101462937891483,-0.233674854040146,0.967006385326386,0.391825526952744,0.788023412227631,0.474859833717346,0.119092851877213,0.270987540483475,0.955187201499939,0.331482470035553,0.125218272209167,0.935114860534668,0.806965947151184,0.306465566158295,0.504861176013947,0.202535301446915,-0.827068865299225,0.524343967437744,-0.484778821468353,-0.720648169517517,0.495636761188507,-0.530582964420319,-0.847630381584167,0.00210796948522329,0.230931788682938,-0.972930014133453,0.00881298631429672,0.0620995722711086,-0.238982826471329,0.969036042690277,-0.223055556416512,-0.293780386447906,0.929483354091644,-0.484778821468353,-0.720648169517517,0.495636761188507,0.202535301446915,-0.827068865299225,0.524343967437744,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.223055556416512,-0.293780386447906,0.929483354091644,0.0620995722711086,-0.238982826471329,0.969036042690277,-0.224501311779022,0.125647932291031,0.966339349746704,0.318617641925812,-0.106823146343231,0.941844820976257,0.331482470035553,0.125218272209167,0.935114860534668,0.119092851877213,0.270987540483475,0.955187201499939,0.101462937891483,-0.233674854040146,0.967006385326386,0.800876438617706,-0.339855968952179,0.493046551942825,0.257298767566681,-0.254731476306915,0.932153046131134,0.334624856710434,-0.800290584564209,0.497555166482925,0.813896775245667,0.349610984325409,0.464051961898804,0.350653737783432,0.829828143119812,0.434081971645355,0.283706575632095,0.309986978769302,0.907424211502075,0.257298767566681,-0.254731476306915,0.932153046131134,0.106314092874527,-0.103658013045788,0.988914728164673,0.0777146592736244,-0.258388966321945,0.962909936904907,0.136184617877007,0.141381427645683,0.980543255805969,0.283706575632095,0.309986978769302,0.907424211502075,-0.267910957336426,0.269903123378754,0.924865424633026,\n-0.907637715339661,-0.237347409129143,0.34620800614357,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.82353150844574,0.433955609798431,0.365346997976303,-0.267910957336426,0.269903123378754,0.924865424633026,-0.359729558229446,0.842673659324646,0.400619268417358,-0.839977502822876,0.365999639034271,0.400602132081985,-0.715936124324799,-0.265720427036285,-0.645622253417969,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.590422987937927,0.577111005783081,-0.564219415187836,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.280009269714355,0.941216468811035,-0.18896122276783,-0.94429612159729,0.285850405693054,0.163077712059021,-0.838626086711884,0.269073814153671,0.473609089851379,-0.28647455573082,0.941656053066254,0.176681011915207,0.444880247116089,-0.370750695466995,0.815245687961578,0.441483318805695,-0.799440860748291,0.407414764165878,0.971585929393768,-0.201965615153313,0.123412564396858,0.867507219314575,0.29306098818779,0.401928424835205,-0.838626086711884,0.269073814153671,0.473609089851379,-0.593102335929871,0.413477510213852,0.690844416618347,-0.093751385807991,0.893021583557129,0.440139919519424,-0.28647455573082,0.941656053066254,0.176681011915207,-0.593102335929871,0.413477510213852,0.690844416618347,-0.287397742271423,0.360831707715988,0.887244582176209,0.16777765750885,0.800705552101135,0.57508373260498,-0.093751385807991,0.893021583557129,0.440139919519424,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.715936124324799,-0.265720427036285,-0.645622253417969,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.188246309757233,-0.278920531272888,-0.941682875156403,0.862523198127747,-0.491381734609604,-0.120820865035057,0.275533765554428,-0.959253966808319,0.0625537186861038,0.1276044100523,-0.98238742351532,-0.136499106884003,0.669596016407013,-0.609213531017303,-0.424853086471558,0.441483318805695,-0.799440860748291,0.407414764165878,0.275533765554428,-0.959253966808319,0.0625537186861038,0.862523198127747,-0.491381734609604,-0.120820865035057,0.971585929393768,-0.201965615153313,0.123412564396858,\n0.1276044100523,-0.98238742351532,-0.136499106884003,-0.157730147242546,-0.903618812561035,-0.398238956928253,0.234486192464828,-0.579630196094513,-0.780413389205933,0.669596016407013,-0.609213531017303,-0.424853086471558,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.188246309757233,-0.278920531272888,-0.941682875156403,0.234486192464828,-0.579630196094513,-0.780413389205933,-0.157730147242546,-0.903618812561035,-0.398238956928253,-0.590422987937927,0.577111005783081,-0.564219415187836,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.94429612159729,0.285850405693054,0.163077712059021,-0.280009269714355,0.941216468811035,-0.18896122276783,0.444880247116089,-0.370750695466995,0.815245687961578,0.867507219314575,0.29306098818779,0.401928424835205,0.477360427379608,0.551516830921173,0.684073209762573,0.125939533114433,0.102134250104427,0.986766338348389,-0.093751385807991,0.893021583557129,0.440139919519424,-0.48685422539711,0.635573267936707,0.599182426929474,-0.644909203052521,0.686387538909912,0.336101531982422,-0.28647455573082,0.941656053066254,0.176681011915207,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.590422987937927,0.577111005783081,-0.564219415187836,0.430329024791718,-0.429309993982315,0.794046521186829,0.698819696903229,-0.628040254116058,0.342368811368942,0.971585929393768,-0.201965615153313,0.123412564396858,0.862523198127747,-0.491381734609604,-0.120820865035057,0.311042487621307,0.756668508052826,0.575069785118103,-0.000230645935516804,0.945964872837067,0.324269145727158,0.125939533114433,0.102134250104427,0.986766338348389,-0.287397742271423,0.360831707715988,0.887244582176209,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.587697565555573,0.621326804161072,-0.518232226371765,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.715936124324799,-0.265720427036285,-0.645622253417969,0.196220353245735,-0.529779434204102,0.82512503862381,\n-0.890061616897583,0.000229601078899577,-0.455840140581131,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.157730147242546,-0.903618812561035,-0.398238956928253,-0.0995239168405533,-0.824471116065979,-0.55708384513855,0.174817264080048,-0.965653240680695,-0.192231014370918,0.669596016407013,-0.609213531017303,-0.424853086471558,0.234486192464828,-0.579630196094513,-0.780413389205933,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.118636824190617,0.992627620697021,0.0248145386576653,-0.838626086711884,0.269073814153671,0.473609089851379,-0.94429612159729,0.285850405693054,0.163077712059021,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.15072038769722,0.436317950487137,-0.887079477310181,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.715936124324799,-0.265720427036285,-0.645622253417969,0.932197749614716,0.288106322288513,0.219093680381775,0.938903152942657,-0.259861499071121,0.225683227181435,0.441483318805695,-0.799440860748291,0.407414764165878,0.444880247116089,-0.370750695466995,0.815245687961578,-0.593102335929871,0.413477510213852,0.690844416618347,-0.838626086711884,0.269073814153671,0.473609089851379,-0.118636824190617,0.992627620697021,0.0248145386576653,0.353509962558746,0.865797221660614,0.354155212640762,-0.280009269714355,0.941216468811035,-0.18896122276783,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.0224729143083096,0.939465522766113,-0.341905742883682,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.590422987937927,0.577111005783081,-0.564219415187836,-0.45841521024704,0.236967280507088,0.856564044952393,-0.48685422539711,0.635573267936707,0.599182426929474,-0.093751385807991,0.893021583557129,0.440139919519424,0.16777765750885,0.800705552101135,0.57508373260498,0.353509962558746,0.865797221660614,0.354155212640762,0.311042487621307,0.756668508052826,0.575069785118103,-0.287397742271423,0.360831707715988,0.887244582176209,-0.593102335929871,0.413477510213852,0.690844416618347,\n0.1276044100523,-0.98238742351532,-0.136499106884003,0.712573170661926,-0.434123963117599,-0.551158607006073,0.196220353245735,-0.529779434204102,0.82512503862381,-0.157730147242546,-0.903618812561035,-0.398238956928253,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.587697565555573,0.621326804161072,-0.518232226371765,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.94429612159729,0.285850405693054,0.163077712059021,0.275533765554428,-0.959253966808319,0.0625537186861038,0.825049936771393,-0.453089714050293,-0.337642371654511,0.712573170661926,-0.434123963117599,-0.551158607006073,0.1276044100523,-0.98238742351532,-0.136499106884003,0.938903152942657,-0.259861499071121,0.225683227181435,0.825049936771393,-0.453089714050293,-0.337642371654511,0.275533765554428,-0.959253966808319,0.0625537186861038,0.441483318805695,-0.799440860748291,0.407414764165878,0.477360427379608,0.551516830921173,0.684073209762573,0.867507219314575,0.29306098818779,0.401928424835205,0.458260357379913,-0.0337133072316647,0.888178408145905,0.131552502512932,0.257139623165131,0.957378268241882,0.444880247116089,-0.370750695466995,0.815245687961578,0.963503360748291,0.0733285918831825,-0.257457196712494,0.932197749614716,0.288106322288513,0.219093680381775,0.971585929393768,-0.201965615153313,0.123412564396858,0.698819696903229,-0.628040254116058,0.342368811368942,0.710298955440521,-0.332644939422607,0.620340883731842,0.867507219314575,0.29306098818779,0.401928424835205,0.862523198127747,-0.491381734609604,-0.120820865035057,0.669596016407013,-0.609213531017303,-0.424853086471558,0.174817264080048,-0.965653240680695,-0.192231014370918,-0.324506491422653,-0.76884526014328,-0.550974130630493,0.430329024791718,-0.429309993982315,0.794046521186829,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.0995239168405533,-0.824471116065979,-0.55708384513855,0.234486192464828,-0.579630196094513,-0.780413389205933,-0.188246309757233,-0.278920531272888,-0.941682875156403,-0.564248859882355,-0.400254756212235,-0.72209370136261,\n-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.188246309757233,-0.278920531272888,-0.941682875156403,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.280009269714355,0.941216468811035,-0.18896122276783,0.16777765750885,0.800705552101135,0.57508373260498,0.477360427379608,0.551516830921173,0.684073209762573,0.131552502512932,0.257139623165131,0.957378268241882,-0.45841521024704,0.236967280507088,0.856564044952393,0.125939533114433,0.102134250104427,0.986766338348389,0.477360427379608,0.551516830921173,0.684073209762573,0.16777765750885,0.800705552101135,0.57508373260498,-0.287397742271423,0.360831707715988,0.887244582176209,0.125939533114433,0.102134250104427,0.986766338348389,-0.000230645935516804,0.945964872837067,0.324269145727158,0.963503360748291,0.0733285918831825,-0.257457196712494,0.444880247116089,-0.370750695466995,0.815245687961578,0.867507219314575,0.29306098818779,0.401928424835205,0.710298955440521,-0.332644939422607,0.620340883731842,0.458260357379913,-0.0337133072316647,0.888178408145905,-0.644909203052521,0.686387538909912,0.336101531982422,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.280009269714355,0.941216468811035,-0.18896122276783,-0.28647455573082,0.941656053066254,0.176681011915207,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.188246309757233,-0.278920531272888,-0.941682875156403,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.425395786762238,0.0713668540120125,-0.902189075946808,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.125359445810318,-0.967730283737183,-0.218593493103981,0.734102785587311,-0.292018711566925,-0.613040089607239,0.912895321846008,-0.237331077456474,-0.332108557224274,-0.125359445810318,-0.967730283737183,-0.218593493103981,-0.554785251617432,-0.486120134592056,-0.675204038619995,\n0.0883260667324066,-0.0597434565424919,-0.994298338890076,0.734102785587311,-0.292018711566925,-0.613040089607239,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.416033059358597,-0.68202668428421,-0.60146164894104,0.245215684175491,0.0387152023613453,-0.968695223331451,0.550641417503357,-0.21704863011837,-0.806029736995697,0.0798471421003342,-0.235298857092857,-0.968637645244598,-0.382183432579041,-0.525775790214539,-0.759931325912476,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.631522357463837,-0.462838768959045,-0.622060894966125,0.0447333157062531,0.253253638744354,-0.966365098953247,0.245215684175491,0.0387152023613453,-0.968695223331451,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.692777395248413,-0.369596987962723,-0.619239509105682,0.014613856561482,0.369894355535507,-0.928958892822266,0.0447333157062531,0.253253638744354,-0.966365098953247,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.109934903681278,0.544603824615479,-0.831457078456879,0.014613856561482,0.369894355535507,-0.928958892822266,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.262595504522324,0.756710708141327,-0.598692297935486,-0.109934903681278,0.544603824615479,-0.831457078456879,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.262595504522324,0.756710708141327,-0.598692297935486,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.939602613449097,-0.0850153714418411,-0.33154085278511,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.492600291967392,-0.0365926474332809,0.869486033916473,0.168574303388596,0.687315046787262,0.706527233123779,0.379244118928909,0.687416434288025,0.6193807721138,-0.492600291967392,-0.0365926474332809,0.869486033916473,\n-0.26186203956604,-0.22778545320034,0.937839031219482,0.452623516321182,0.438722670078278,0.776308119297028,0.168574303388596,0.687315046787262,0.706527233123779,-0.26186203956604,-0.22778545320034,0.937839031219482,-0.0175823662430048,-0.464624613523483,0.885333180427551,0.694800972938538,0.194172203540802,0.692494571208954,0.452623516321182,0.438722670078278,0.776308119297028,-0.0175823662430048,-0.464624613523483,0.885333180427551,0.11012527346611,-0.683853626251221,0.72126042842865,0.860161125659943,-0.0221190489828587,0.509542524814606,0.694800972938538,0.194172203540802,0.692494571208954,0.11012527346611,-0.683853626251221,0.72126042842865,0.185537919402123,-0.862958252429962,0.469977349042892,0.939531803131104,-0.259159535169601,0.223866790533066,0.860161125659943,-0.0221190489828587,0.509542524814606,0.939531803131104,-0.259159535169601,0.223866790533066,0.185537919402123,-0.862958252429962,0.469977349042892,0.152538388967514,-0.224785834550858,0.962394595146179,0.536905825138092,-0.0598908923566341,0.841513633728027,0.402792274951935,-0.430315464735031,0.807828545570374,0.213872507214546,-0.799906253814697,-0.560721397399902,0.431525766849518,-0.644686222076416,-0.631003320217133,0.620412230491638,-0.276802182197571,0.7338045835495,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.0485654957592487,-0.998615622520447,0.0202043671160936,0.912895321846008,-0.237331077456474,-0.332108557224274,0.34168353676796,-0.250584989786148,-0.90579217672348,0.912895321846008,-0.237331077456474,-0.332108557224274,0.734102785587311,-0.292018711566925,-0.613040089607239,0.773750245571136,0.0814331769943237,-0.62823498249054,0.0798471421003342,-0.235298857092857,-0.968637645244598,0.773750245571136,0.0814331769943237,-0.62823498249054,0.734102785587311,-0.292018711566925,-0.613040089607239,0.0883260667324066,-0.0597434565424919,-0.994298338890076,0.550641417503357,-0.21704863011837,-0.806029736995697,0.245215684175491,0.0387152023613453,-0.968695223331451,0.518284618854523,0.496293634176254,-0.69647228717804,0.708127677440643,0.316911339759827,-0.6309694647789,\n0.245215684175491,0.0387152023613453,-0.968695223331451,0.0447333157062531,0.253253638744354,-0.966365098953247,0.452985435724258,0.593249797821045,-0.665476441383362,0.518284618854523,0.496293634176254,-0.69647228717804,0.0447333157062531,0.253253638744354,-0.966365098953247,0.014613856561482,0.369894355535507,-0.928958892822266,0.495889782905579,0.643950700759888,-0.582598328590393,0.452985435724258,0.593249797821045,-0.665476441383362,0.014613856561482,0.369894355535507,-0.928958892822266,-0.109934903681278,0.544603824615479,-0.831457078456879,0.408554971218109,0.713565170764923,-0.569128751754761,0.495889782905579,0.643950700759888,-0.582598328590393,-0.109934903681278,0.544603824615479,-0.831457078456879,-0.262595504522324,0.756710708141327,-0.598692297935486,0.298005253076553,0.807478785514832,-0.509088277816772,0.408554971218109,0.713565170764923,-0.569128751754761,-0.262595504522324,0.756710708141327,-0.598692297935486,-0.0453839227557182,0.813610911369324,-0.579635679721832,0.261479198932648,0.892048358917236,-0.368616729974747,0.298005253076553,0.807478785514832,-0.509088277816772,-0.0453839227557182,0.813610911369324,-0.579635679721832,0.434583961963654,0.868087708950043,-0.239917635917664,0.274172246456146,0.939159333705902,-0.206904113292694,0.261479198932648,0.892048358917236,-0.368616729974747,0.434583961963654,0.868087708950043,-0.239917635917664,0.432530790567398,0.890540361404419,-0.140907749533653,0.244631126523018,0.968607366085052,-0.0442199148237705,0.274172246456146,0.939159333705902,-0.206904113292694,0.432530790567398,0.890540361404419,-0.140907749533653,0.473273813724518,0.879378318786621,-0.0520168133080006,0.308822751045227,0.945434510707855,0.103837110102177,0.244631126523018,0.968607366085052,-0.0442199148237705,0.493666648864746,0.825041174888611,0.274955064058304,0.308822751045227,0.945434510707855,0.103837110102177,0.473273813724518,0.879378318786621,-0.0520168133080006,0.379244118928909,0.687416434288025,0.6193807721138,0.168574303388596,0.687315046787262,0.706527233123779,0.168574303388596,0.687315046787262,0.706527233123779,\n0.452623516321182,0.438722670078278,0.776308119297028,0.684545934200287,0.646372973918915,0.337044298648834,0.493666648864746,0.825041174888611,0.274955064058304,0.452623516321182,0.438722670078278,0.776308119297028,0.694800972938538,0.194172203540802,0.692494571208954,0.821635723114014,0.506255805492401,0.261953771114349,0.684545934200287,0.646372973918915,0.337044298648834,0.694800972938538,0.194172203540802,0.692494571208954,0.860161125659943,-0.0221190489828587,0.509542524814606,0.910674393177032,0.388812184333801,0.139632686972618,0.821635723114014,0.506255805492401,0.261953771114349,0.860161125659943,-0.0221190489828587,0.509542524814606,0.939531803131104,-0.259159535169601,0.223866790533066,0.978960454463959,0.203055590391159,-0.0201213043183088,0.910674393177032,0.388812184333801,0.139632686972618,0.939531803131104,-0.259159535169601,0.223866790533066,0.536905825138092,-0.0598908923566341,0.841513633728027,0.808023393154144,0.485407531261444,0.333882838487625,0.978960454463959,0.203055590391159,-0.0201213043183088,0.716321706771851,-0.189274966716766,0.671608626842499,0.633299946784973,-0.263623267412186,-0.727622151374817,0.655673146247864,0.429177463054657,-0.621208012104034,0.8587726354599,0.351541489362717,0.372730553150177,0.34168353676796,-0.250584989786148,-0.90579217672348,0.912895321846008,-0.237331077456474,-0.332108557224274,0.917431473731995,0.173299670219421,-0.358171314001083,0.560299038887024,0.522571742534637,-0.642638146877289,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.0529462173581123,-0.663012385368347,-0.746733784675598,-0.324506491422653,-0.76884526014328,-0.550974130630493,0.174817264080048,-0.965653240680695,-0.192231014370918,-0.118618525564671,-0.856628596782684,-0.502112627029419,0.0447756871581078,-0.48030561208725,0.875957548618317,-0.665691614151001,-0.224520370364189,0.711649715900421,-0.785106539726257,-0.527087867259979,-0.325247794389725,0.152538388967514,-0.224785834550858,0.962394595146179,0.185537919402123,-0.862958252429962,0.469977349042892,0.698819696903229,-0.628040254116058,0.342368811368942,\n0.430329024791718,-0.429309993982315,0.794046521186829,0.185537919402123,-0.862958252429962,0.469977349042892,0.11012527346611,-0.683853626251221,0.72126042842865,0.710298955440521,-0.332644939422607,0.620340883731842,0.698819696903229,-0.628040254116058,0.342368811368942,0.11012527346611,-0.683853626251221,0.72126042842865,-0.0175823662430048,-0.464624613523483,0.885333180427551,0.458260357379913,-0.0337133072316647,0.888178408145905,0.710298955440521,-0.332644939422607,0.620340883731842,-0.0175823662430048,-0.464624613523483,0.885333180427551,-0.26186203956604,-0.22778545320034,0.937839031219482,0.131552502512932,0.257139623165131,0.957378268241882,0.458260357379913,-0.0337133072316647,0.888178408145905,-0.26186203956604,-0.22778545320034,0.937839031219482,-0.492600291967392,-0.0365926474332809,0.869486033916473,-0.45841521024704,0.236967280507088,0.856564044952393,0.131552502512932,0.257139623165131,0.957378268241882,-0.492600291967392,-0.0365926474332809,0.869486033916473,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.45841521024704,0.236967280507088,0.856564044952393,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.48685422539711,0.635573267936707,0.599182426929474,-0.45841521024704,0.236967280507088,0.856564044952393,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.644909203052521,0.686387538909912,0.336101531982422,-0.48685422539711,0.635573267936707,0.599182426929474,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.644909203052521,0.686387538909912,0.336101531982422,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.967885553836823,0.0332815907895565,-0.2491784542799,\n-0.896995723247528,0.227888956665993,-0.378768175840378,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.0995239168405533,-0.824471116065979,-0.55708384513855,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.397501945495605,-0.911328136920929,-0.10711282491684,0.174817264080048,-0.965653240680695,-0.192231014370918,-0.0995239168405533,-0.824471116065979,-0.55708384513855,-0.397501945495605,-0.911328136920929,-0.10711282491684,0.0485654957592487,-0.998615622520447,0.0202043671160936,0.174817264080048,-0.965653240680695,-0.192231014370918,0.473273813724518,0.879378318786621,-0.0520168133080006,0.432530790567398,0.890540361404419,-0.140907749533653,-0.0387217588722706,0.991758227348328,0.122131980955601,0.0474359504878521,0.963465213775635,0.263599425554276,0.432530790567398,0.890540361404419,-0.140907749533653,0.434583961963654,0.868087708950043,-0.239917635917664,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.0387217588722706,0.991758227348328,0.122131980955601,\n0.434583961963654,0.868087708950043,-0.239917635917664,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.939602613449097,-0.0850153714418411,-0.33154085278511,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.939602613449097,-0.0850153714418411,-0.33154085278511,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.356422990560532,-0.175295606255531,0.917733132839203,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.507395565509796,-0.316553086042404,0.801463544368744,0.379244118928909,0.687416434288025,0.6193807721138,0.281729221343994,0.614752173423767,0.736687481403351,-0.356422990560532,-0.175295606255531,0.917733132839203,0.379244118928909,0.687416434288025,0.6193807721138,0.473273813724518,0.879378318786621,-0.0520168133080006,0.0474359504878521,0.963465213775635,0.263599425554276,0.281729221343994,0.614752173423767,0.736687481403351,0.0474359504878521,0.963465213775635,0.263599425554276,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.356422990560532,-0.175295606255531,0.917733132839203,0.281729221343994,0.614752173423767,0.736687481403351,-0.888648450374603,-0.0919873118400574,0.449268519878387,\n-0.0387217588722706,0.991758227348328,0.122131980955601,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.950904071331024,-0.10767637193203,0.290150344371796,0.0474359504878521,0.963465213775635,0.263599425554276,-0.0387217588722706,0.991758227348328,0.122131980955601,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.397501945495605,-0.911328136920929,-0.10711282491684,-0.382183432579041,-0.525775790214539,-0.759931325912476,-0.554785251617432,-0.486120134592056,-0.675204038619995,-0.125359445810318,-0.967730283737183,-0.218593493103981,-0.382183432579041,-0.525775790214539,-0.759931325912476,0.0798471421003342,-0.235298857092857,-0.968637645244598,0.0883260667324066,-0.0597434565424919,-0.994298338890076,-0.554785251617432,-0.486120134592056,-0.675204038619995,0.773750245571136,0.0814331769943237,-0.62823498249054,0.550641417503357,-0.21704863011837,-0.806029736995697,0.708127677440643,0.316911339759827,-0.6309694647789,0.834144115447998,0.219395592808723,-0.506032764911652,0.912895321846008,-0.237331077456474,-0.332108557224274,0.773750245571136,0.0814331769943237,-0.62823498249054,0.834144115447998,0.219395592808723,-0.506032764911652,0.917431473731995,0.173299670219421,-0.358171314001083,-0.125359445810318,-0.967730283737183,-0.218593493103981,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.397501945495605,-0.911328136920929,-0.10711282491684,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.382183432579041,-0.525775790214539,-0.759931325912476,-0.397501945495605,-0.911328136920929,-0.10711282491684,0.550641417503357,-0.21704863011837,-0.806029736995697,0.773750245571136,0.0814331769943237,-0.62823498249054,0.0798471421003342,-0.235298857092857,-0.968637645244598,0.0447756871581078,-0.48030561208725,0.875957548618317,0.402792274951935,-0.430315464735031,0.807828545570374,0.152538388967514,-0.224785834550858,0.962394595146179,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.34168353676796,-0.250584989786148,-0.90579217672348,\n0.431525766849518,-0.644686222076416,-0.631003320217133,0.213872507214546,-0.799906253814697,-0.560721397399902,0.536905825138092,-0.0598908923566341,0.841513633728027,0.152538388967514,-0.224785834550858,0.962394595146179,0.402792274951935,-0.430315464735031,0.807828545570374,0.620412230491638,-0.276802182197571,0.7338045835495,0.620412230491638,-0.276802182197571,0.7338045835495,0.716321706771851,-0.189274966716766,0.671608626842499,0.536905825138092,-0.0598908923566341,0.841513633728027,0.34168353676796,-0.250584989786148,-0.90579217672348,0.560299038887024,0.522571742534637,-0.642638146877289,0.655673146247864,0.429177463054657,-0.621208012104034,0.633299946784973,-0.263623267412186,-0.727622151374817,0.560299038887024,0.522571742534637,-0.642638146877289,0.808023393154144,0.485407531261444,0.333882838487625,0.8587726354599,0.351541489362717,0.372730553150177,0.655673146247864,0.429177463054657,-0.621208012104034,0.808023393154144,0.485407531261444,0.333882838487625,0.536905825138092,-0.0598908923566341,0.841513633728027,0.716321706771851,-0.189274966716766,0.671608626842499,0.8587726354599,0.351541489362717,0.372730553150177,0.152538388967514,-0.224785834550858,0.962394595146179,0.430329024791718,-0.429309993982315,0.794046521186829,-0.665691614151001,-0.224520370364189,0.711649715900421,0.0447756871581078,-0.48030561208725,0.875957548618317,0.430329024791718,-0.429309993982315,0.794046521186829,-0.324506491422653,-0.76884526014328,-0.550974130630493,-0.785106539726257,-0.527087867259979,-0.325247794389725,-0.665691614151001,-0.224520370364189,0.711649715900421,-0.324506491422653,-0.76884526014328,-0.550974130630493,-0.0529462173581123,-0.663012385368347,-0.746733784675598,-0.118618525564671,-0.856628596782684,-0.502112627029419,-0.785106539726257,-0.527087867259979,-0.325247794389725,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.213872507214546,-0.799906253814697,-0.560721397399902,-0.118618525564671,-0.856628596782684,-0.502112627029419,-0.118618525564671,-0.856628596782684,-0.502112627029419,\n0.213872507214546,-0.799906253814697,-0.560721397399902,0.402792274951935,-0.430315464735031,0.807828545570374,0.0447756871581078,-0.48030561208725,0.875957548618317,0.431525766849518,-0.644686222076416,-0.631003320217133,0.633299946784973,-0.263623267412186,-0.727622151374817,0.716321706771851,-0.189274966716766,0.671608626842499,0.620412230491638,-0.276802182197571,0.7338045835495,0.34168353676796,-0.250584989786148,-0.90579217672348,0.633299946784973,-0.263623267412186,-0.727622151374817,0.431525766849518,-0.644686222076416,-0.631003320217133,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.619437336921692,-0.682137429714203,0.38856914639473,0.944702625274658,-0.242696091532707,0.22053462266922,0.783942937850952,-0.186095729470253,-0.59228527545929,0.563710689544678,-0.825831174850464,-0.0152685670182109,-0.622635543346405,-0.330902069807053,-0.709104180335999,-0.345263749361038,0.0585285425186157,-0.936678886413574,0.860051214694977,-0.450541734695435,-0.239424526691437,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.636468827724457,-0.680911600589752,-0.362307667732239,0.0350158661603928,0.28818079829216,-0.956935584545136,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.204246431589127,0.468568325042725,-0.859492361545563,0.0350158661603928,0.28818079829216,-0.956935584545136,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.204246431589127,0.468568325042725,-0.859492361545563,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.348378151655197,0.573172330856323,-0.741691410541534,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.218518972396851,0.973436176776886,-0.0683486759662628,\n-0.28282842040062,0.665716886520386,-0.690528094768524,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.68883353471756,0.240426927804947,0.68388831615448,-0.515329539775848,0.822090923786163,0.242078438401222,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.362409710884094,-0.350539416074753,0.86358630657196,0.421934872865677,0.754051804542542,0.503365516662598,-0.0888755843043327,0.982992351055145,0.160708159208298,0.647586286067963,0.657160103321075,0.385710477828979,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.681038498878479,0.23202945291996,0.694513380527496,-0.194348111748695,0.853331387042999,0.483791589736938,-0.186525732278824,0.166592419147491,0.968222677707672,0.557236135005951,-0.528833091259003,0.640174508094788,0.84937584400177,-0.117848217487335,0.514463245868683,0.147361263632774,0.536922037601471,0.83066201210022,0.492649406194687,-0.832895398139954,0.252154290676117,0.117170162498951,-0.72569465637207,0.677966356277466,0.688185930252075,-0.329065650701523,0.646618843078613,0.740381181240082,-0.407373487949371,0.53467983007431,0.128620937466621,-0.731338679790497,-0.669776320457459,0.0479290783405304,-0.711503028869629,-0.701046526432037,0.409443646669388,-0.535873591899872,-0.738373458385468,0.39375701546669,-0.458273440599442,-0.796831786632538,0.409443646669388,-0.535873591899872,-0.738373458385468,0.783942937850952,-0.186095729470253,-0.59228527545929,0.851781845092773,0.0115588782355189,-0.523769080638886,0.783942937850952,-0.186095729470253,-0.59228527545929,0.944702625274658,-0.242696091532707,0.22053462266922,0.196220353245735,-0.529779434204102,0.82512503862381,0.712573170661926,-0.434123963117599,-0.551158607006073,0.990355789661407,0.138366982340813,0.0070703998208046,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.270774930715561,0.961904466152191,-0.0376923382282257,0.524228572845459,0.571583867073059,0.631249785423279,-0.559645414352417,0.337002664804459,-0.757117092609406,0.0350158661603928,0.28818079829216,-0.956935584545136,\n0.15072038769722,0.436317950487137,-0.887079477310181,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.0350158661603928,0.28818079829216,-0.956935584545136,-0.204246431589127,0.468568325042725,-0.859492361545563,-0.393206983804703,0.276302039623261,-0.876952350139618,0.15072038769722,0.436317950487137,-0.887079477310181,-0.204246431589127,0.468568325042725,-0.859492361545563,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.587697565555573,0.621326804161072,-0.518232226371765,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.348378151655197,0.573172330856323,-0.741691410541534,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.118636824190617,0.992627620697021,0.0248145386576653,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.118636824190617,0.992627620697021,0.0248145386576653,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.515329539775848,0.822090923786163,0.242078438401222,-0.544045865535736,0.806812047958374,0.230365887284279,-0.0888755843043327,0.982992351055145,0.160708159208298,-0.0888755843043327,0.982992351055145,0.160708159208298,0.421934872865677,0.754051804542542,0.503365516662598,0.353509962558746,0.865797221660614,0.354155212640762,-0.118636824190617,0.992627620697021,0.0248145386576653,0.421934872865677,0.754051804542542,0.503365516662598,0.647586286067963,0.657160103321075,0.385710477828979,0.353509962558746,0.865797221660614,0.354155212640762,0.186152040958405,0.93400251865387,0.304937154054642,0.962971687316895,0.234042793512344,-0.133826553821564,0.376616507768631,0.266982734203339,-0.887062668800354,-0.115848742425442,0.797249376773834,-0.592429339885712,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.922376871109009,0.332838177680969,0.19606027007103,0.932197749614716,0.288106322288513,0.219093680381775,\n0.963503360748291,0.0733285918831825,-0.257457196712494,0.656768381595612,0.692223727703094,-0.299134790897369,0.974745631217957,0.220444723963737,0.0357081368565559,0.86196494102478,-0.1180724427104,-0.493026673793793,0.675891757011414,0.290058821439743,-0.677522122859955,-0.423463702201843,-0.905563116073608,0.0251786317676306,-0.576983273029327,-0.730052053928375,0.366216242313385,-0.560702860355377,-0.742602586746216,0.366270005702972,0.0984330475330353,-0.979092538356781,-0.178013265132904,-0.423463702201843,-0.905563116073608,0.0251786317676306,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.570909857749939,-0.742268860340118,0.350854486227036,-0.576983273029327,-0.730052053928375,0.366216242313385,0.117170162498951,-0.72569465637207,0.677966356277466,0.492649406194687,-0.832895398139954,0.252154290676117,-0.263038337230682,-0.85704118013382,-0.443047612905502,-0.432871133089066,-0.797651648521423,0.419969528913498,-0.525343060493469,-0.763313293457031,0.375988662242889,0.146697908639908,-0.919724345207214,0.364124774932861,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.939789652824402,-0.260946482419968,-0.220685958862305,-0.319790989160538,-0.818331360816956,-0.47756415605545,-0.411500960588455,-0.813480317592621,0.410994797945023,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.349028646945953,-0.834601283073425,0.426168650388718,-0.362409710884094,-0.350539416074753,0.86358630657196,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.845608711242676,-0.529381453990936,-0.0685647577047348,-0.349028646945953,-0.834601283073425,0.426168650388718,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.938455939292908,0.222387745976448,0.26428034901619,-0.845512986183167,-0.529565334320068,-0.0683253705501556,-0.845608711242676,-0.529381453990936,-0.0685647577047348,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.61448472738266,-0.769321084022522,0.174795731902123,-0.258471637964249,-0.55105721950531,0.793428242206573,\n-0.61448472738266,-0.769321084022522,0.174795731902123,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.74268364906311,-0.662175238132477,0.099724605679512,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.585366904735565,-0.749170899391174,0.309981554746628,-0.704847455024719,-0.653521716594696,0.275861263275146,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.563165187835693,-0.765297174453735,0.311713248491287,-0.585366904735565,-0.749170899391174,0.309981554746628,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.974008142948151,-0.145383641123772,0.173700094223022,-0.563165187835693,-0.765297174453735,0.311713248491287,-0.940216422080994,-0.294904381036758,-0.170365795493126,0.274054676294327,-0.837668061256409,0.472447067499161,0.122500397264957,-0.675016582012177,0.727561831474304,-0.971858441829681,-0.121235102415085,0.201973125338554,0.619437336921692,-0.682137429714203,0.38856914639473,0.0984330475330353,-0.979092538356781,-0.178013265132904,-0.560702860355377,-0.742602586746216,0.366270005702972,0.129642620682716,-0.699265003204346,0.703008711338043,0.938903152942657,-0.259861499071121,0.225683227181435,0.932197749614716,0.288106322288513,0.219093680381775,0.656768381595612,0.692223727703094,-0.299134790897369,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.348378151655197,0.573172330856323,-0.741691410541534,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.74268364906311,-0.662175238132477,0.099724605679512,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.704847455024719,-0.653521716594696,0.275861263275146,0.647586286067963,0.657160103321075,0.385710477828979,0.421934872865677,0.754051804542542,0.503365516662598,\n-0.362409710884094,-0.350539416074753,0.86358630657196,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.349028646945953,-0.834601283073425,0.426168650388718,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.362409710884094,-0.350539416074753,0.86358630657196,0.353509962558746,0.865797221660614,0.354155212640762,0.647586286067963,0.657160103321075,0.385710477828979,0.311042487621307,0.756668508052826,0.575069785118103,-0.348378151655197,0.573172330856323,-0.741691410541534,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.587697565555573,0.621326804161072,-0.518232226371765,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.000230645935516804,0.945964872837067,0.324269145727158,0.311042487621307,0.756668508052826,0.575069785118103,0.647586286067963,0.657160103321075,0.385710477828979,-0.194348111748695,0.853331387042999,0.483791589736938,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.411500960588455,-0.813480317592621,0.410994797945023,-0.938751816749573,-0.267549335956573,-0.2171690762043,-0.681038498878479,0.23202945291996,0.694513380527496,-0.938455939292908,0.222387745976448,0.26428034901619,-0.68883353471756,0.240426927804947,0.68388831615448,-0.25869232416153,-0.551353573799133,0.793150365352631,-0.845512986183167,-0.529565334320068,-0.0683253705501556,-0.68883353471756,0.240426927804947,0.68388831615448,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.258471637964249,-0.55105721950531,0.793428242206573,-0.25869232416153,-0.551353573799133,0.793150365352631,-0.544045865535736,0.806812047958374,0.230365887284279,-0.938455939292908,0.222387745976448,0.26428034901619,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.0888755843043327,0.982992351055145,0.160708159208298,-0.582318484783173,0.299308508634567,0.755856871604919,-0.241258025169373,0.814110457897186,0.528222262859344,-0.608640491962433,0.785175085067749,-0.114266492426395,-0.963154852390289,0.258741587400436,0.073385939002037,-0.515329539775848,0.822090923786163,0.242078438401222,-0.68883353471756,0.240426927804947,0.68388831615448,\n-0.384408742189407,0.77344286441803,0.504000067710876,-0.646622598171234,0.407719850540161,0.644704401493073,-0.68883353471756,0.240426927804947,0.68388831615448,-0.938455939292908,0.222387745976448,0.26428034901619,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.384408742189407,0.77344286441803,0.504000067710876,-0.938455939292908,0.222387745976448,0.26428034901619,-0.544045865535736,0.806812047958374,0.230365887284279,-0.915725409984589,0.365749269723892,0.166356295347214,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.544045865535736,0.806812047958374,0.230365887284279,-0.515329539775848,0.822090923786163,0.242078438401222,-0.646622598171234,0.407719850540161,0.644704401493073,-0.915725409984589,0.365749269723892,0.166356295347214,-0.646622598171234,0.407719850540161,0.644704401493073,-0.384408742189407,0.77344286441803,0.504000067710876,-0.241258025169373,0.814110457897186,0.528222262859344,-0.582318484783173,0.299308508634567,0.755856871604919,-0.384408742189407,0.77344286441803,0.504000067710876,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.608640491962433,0.785175085067749,-0.114266492426395,-0.241258025169373,0.814110457897186,0.528222262859344,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.915725409984589,0.365749269723892,0.166356295347214,-0.963154852390289,0.258741587400436,0.073385939002037,-0.608640491962433,0.785175085067749,-0.114266492426395,-0.915725409984589,0.365749269723892,0.166356295347214,-0.646622598171234,0.407719850540161,0.644704401493073,-0.582318484783173,0.299308508634567,0.755856871604919,-0.963154852390289,0.258741587400436,0.073385939002037,0.768967747688293,-0.480744570493698,0.421394437551498,0.786129951477051,-0.545342028141022,0.290863931179047,0.786934494972229,-0.544415593147278,0.290423303842545,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.86196494102478,-0.1180724427104,-0.493026673793793,0.974745631217957,0.220444723963737,0.0357081368565559,0.922376871109009,0.332838177680969,0.19606027007103,0.974745631217957,0.220444723963737,0.0357081368565559,\n0.656768381595612,0.692223727703094,-0.299134790897369,0.932197749614716,0.288106322288513,0.219093680381775,0.117170162498951,-0.72569465637207,0.677966356277466,0.130088999867439,-0.835984408855438,0.533110618591309,0.767808198928833,-0.477225512266159,0.427465051412582,0.688185930252075,-0.329065650701523,0.646618843078613,-0.570683121681213,-0.742836952209473,0.350019991397858,0.130088999867439,-0.835984408855438,0.533110618591309,0.117170162498951,-0.72569465637207,0.677966356277466,-0.525343060493469,-0.763313293457031,0.375988662242889,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.186525732278824,0.166592419147491,0.968222677707672,-0.681038498878479,0.23202945291996,0.694513380527496,0.492649406194687,-0.832895398139954,0.252154290676117,0.740381181240082,-0.407373487949371,0.53467983007431,0.740420699119568,-0.407449632883072,0.53456711769104,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.84937584400177,-0.117848217487335,0.514463245868683,0.557236135005951,-0.528833091259003,0.640174508094788,-0.194348111748695,0.853331387042999,0.483791589736938,-0.681038498878479,0.23202945291996,0.694513380527496,-0.186525732278824,0.166592419147491,0.968222677707672,0.147361263632774,0.536922037601471,0.83066201210022,0.147361263632774,0.536922037601471,0.83066201210022,0.186152040958405,0.93400251865387,0.304937154054642,-0.194348111748695,0.853331387042999,0.483791589736938,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.963503360748291,0.0733285918831825,-0.257457196712494,0.376616507768631,0.266982734203339,-0.887062668800354,0.962971687316895,0.234042793512344,-0.133826553821564,0.963503360748291,0.0733285918831825,-0.257457196712494,-0.000230645935516804,0.945964872837067,0.324269145727158,-0.115848742425442,0.797249376773834,-0.592429339885712,0.376616507768631,0.266982734203339,-0.887062668800354,-0.000230645935516804,0.945964872837067,0.324269145727158,-0.194348111748695,0.853331387042999,0.483791589736938,0.186152040958405,0.93400251865387,0.304937154054642,-0.115848742425442,0.797249376773834,-0.592429339885712,\n-0.681038498878479,0.23202945291996,0.694513380527496,-0.938751816749573,-0.267549335956573,-0.2171690762043,-0.939789652824402,-0.260946482419968,-0.220685958862305,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.938751816749573,-0.267549335956573,-0.2171690762043,-0.263038337230682,-0.85704118013382,-0.443047612905502,-0.319790989160538,-0.818331360816956,-0.47756415605545,-0.939789652824402,-0.260946482419968,-0.220685958862305,-0.263038337230682,-0.85704118013382,-0.443047612905502,0.492649406194687,-0.832895398139954,0.252154290676117,0.146697908639908,-0.919724345207214,0.364124774932861,-0.319790989160538,-0.818331360816956,-0.47756415605545,0.492649406194687,-0.832895398139954,0.252154290676117,0.557236135005951,-0.528833091259003,0.640174508094788,0.146697908639908,-0.919724345207214,0.364124774932861,0.84937584400177,-0.117848217487335,0.514463245868683,0.962971687316895,0.234042793512344,-0.133826553821564,0.186152040958405,0.93400251865387,0.304937154054642,0.147361263632774,0.536922037601471,0.83066201210022,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.962971687316895,0.234042793512344,-0.133826553821564,0.84937584400177,-0.117848217487335,0.514463245868683,0.146697908639908,-0.919724345207214,0.364124774932861,0.557236135005951,-0.528833091259003,0.640174508094788,-0.186525732278824,0.166592419147491,0.968222677707672,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.525343060493469,-0.763313293457031,0.375988662242889,-0.570909857749939,-0.742268860340118,0.350854486227036,0.143902435898781,-0.987122178077698,-0.0698700472712517,-0.423463702201843,-0.905563116073608,0.0251786317676306,0.0479290783405304,-0.711503028869629,-0.701046526432037,0.128620937466621,-0.731338679790497,-0.669776320457459,0.675891757011414,0.290058821439743,-0.677522122859955,0.86196494102478,-0.1180724427104,-0.493026673793793,0.39375701546669,-0.458273440599442,-0.796831786632538,0.409443646669388,-0.535873591899872,-0.738373458385468,\n0.86196494102478,-0.1180724427104,-0.493026673793793,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.39375701546669,-0.458273440599442,-0.796831786632538,0.675891757011414,0.290058821439743,-0.677522122859955,0.409443646669388,-0.535873591899872,-0.738373458385468,0.851781845092773,0.0115588782355189,-0.523769080638886,0.825049936771393,-0.453089714050293,-0.337642371654511,0.938903152942657,-0.259861499071121,0.225683227181435,0.656768381595612,0.692223727703094,-0.299134790897369,0.675891757011414,0.290058821439743,-0.677522122859955,0.851781845092773,0.0115588782355189,-0.523769080638886,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.423463702201843,-0.905563116073608,0.0251786317676306,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.130088999867439,-0.835984408855438,0.533110618591309,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.622635543346405,-0.330902069807053,-0.709104180335999,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.345263749361038,0.0585285425186157,-0.936678886413574,-0.622635543346405,-0.330902069807053,-0.709104180335999,0.944702625274658,-0.242696091532707,0.22053462266922,0.619437336921692,-0.682137429714203,0.38856914639473,0.563710689544678,-0.825831174850464,-0.0152685670182109,0.860051214694977,-0.450541734695435,-0.239424526691437,0.860051214694977,-0.450541734695435,-0.239424526691437,0.990355789661407,0.138366982340813,0.0070703998208046,0.944702625274658,-0.242696091532707,0.22053462266922,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.890061616897583,0.000229601078899577,-0.455840140581131,-0.270774930715561,0.961904466152191,-0.0376923382282257,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.196220353245735,-0.529779434204102,0.82512503862381,0.524228572845459,0.571583867073059,0.631249785423279,-0.270774930715561,0.961904466152191,-0.0376923382282257,\n0.196220353245735,-0.529779434204102,0.82512503862381,0.944702625274658,-0.242696091532707,0.22053462266922,0.990355789661407,0.138366982340813,0.0070703998208046,0.524228572845459,0.571583867073059,0.631249785423279,0.619437336921692,-0.682137429714203,0.38856914639473,0.129642620682716,-0.699265003204346,0.703008711338043,0.122500397264957,-0.675016582012177,0.727561831474304,0.274054676294327,-0.837668061256409,0.472447067499161,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119,0.796919584274292,-0.974008142948151,-0.145383641123772,0.173700094223022,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.971858441829681,-0.121235102415085,0.201973125338554,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.622635543346405,-0.330902069807053,-0.709104180335999,0.563710689544678,-0.825831174850464,-0.0152685670182109,0.274054676294327,-0.837668061256409,0.472447067499161,0.274054676294327,-0.837668061256409,0.472447067499161,0.563710689544678,-0.825831174850464,-0.0152685670182109,0.619437336921692,-0.682137429714203,0.38856914639473,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.345263749361038,0.0585285425186157,-0.936678886413574,-0.345263749361038,0.0585285425186157,-0.936678886413574,-0.182028561830521,0.561503648757935,-0.80720454454422,0.990355789661407,0.138366982340813,0.0070703998208046,0.860051214694977,-0.450541734695435,-0.239424526691437,0.779076516628265,-0.514032542705536,0.35890144109726,0.786129951477051,-0.545342028141022,0.290863931179047,0.768967747688293,-0.480744570493698,0.421394437551498,0.130088999867439,-0.835984408855438,0.533110618591309,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.76507031917572,-0.643946468830109,0.000624333799351007,0.786640048027039,-0.542381346225739,0.294991344213486,\n0.785886585712433,-0.543201982975006,0.295489281415939,0.767808198928833,-0.477225512266159,0.427465051412582,0.786934494972229,-0.544415593147278,0.290423303842545,0.78587132692337,-0.599782109260559,0.150557950139046,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.786640048027039,-0.542381346225739,0.294991344213486,0.76507031917572,-0.643946468830109,0.000624333799351007,0.785931706428528,-0.599372208118439,0.151869475841522,0.767808198928833,-0.477225512266159,0.427465051412582,0.785886585712433,-0.543201982975006,0.295489281415939,0.778943240642548,-0.513350427150726,0.360164850950241,0.517825782299042,-0.683434009552002,0.514562368392944,0.543316781520844,-0.79720413684845,0.263196527957916,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.818628549575806,-0.56630539894104,-0.095631942152977,0.936200797557831,-0.349729657173157,0.0348892845213413,0.927894592285156,-0.210005521774292,0.308073401451111,0.795584321022034,-0.263417273759842,0.545579493045807,0.623724460601807,-0.472118139266968,0.622954428195953,0.785886585712433,-0.543201982975006,0.295489281415939,0.786640048027039,-0.542381346225739,0.294991344213486,0.207798928022385,-0.957674980163574,0.199194043874741,0.171830341219902,-0.731816828250885,0.659483432769775,0.786640048027039,-0.542381346225739,0.294991344213486,0.785931706428528,-0.599372208118439,0.151869475841522,0.451574474573135,-0.847453653812408,-0.279110699892044,0.207798928022385,-0.957674980163574,0.199194043874741,0.785931706428528,-0.599372208118439,0.151869475841522,0.78587132692337,-0.599782109260559,0.150557950139046,0.737974345684052,-0.506336569786072,-0.446113437414169,0.451574474573135,-0.847453653812408,-0.279110699892044,0.78587132692337,-0.599782109260559,0.150557950139046,0.786934494972229,-0.544415593147278,0.290423303842545,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.737974345684052,-0.506336569786072,-0.446113437414169,0.786934494972229,-0.544415593147278,0.290423303842545,0.786129951477051,-0.545342028141022,0.290863931179047,0.947726309299469,0.160956501960754,0.275513887405396,\n0.967499911785126,-0.0959258452057838,-0.233970403671265,0.786129951477051,-0.545342028141022,0.290863931179047,0.779076516628265,-0.514032542705536,0.35890144109726,0.694981157779694,0.0461361445486546,0.717546284198761,0.947726309299469,0.160956501960754,0.275513887405396,0.382880628108978,-0.336864858865738,0.860188663005829,0.694981157779694,0.0461361445486546,0.717546284198761,0.779076516628265,-0.514032542705536,0.35890144109726,0.778943240642548,-0.513350427150726,0.360164850950241,0.778943240642548,-0.513350427150726,0.360164850950241,0.785886585712433,-0.543201982975006,0.295489281415939,0.171830341219902,-0.731816828250885,0.659483432769775,0.382880628108978,-0.336864858865738,0.860188663005829,0.171830341219902,-0.731816828250885,0.659483432769775,0.207798928022385,-0.957674980163574,0.199194043874741,-0.0772176012396812,-0.989201128482819,0.124573387205601,-0.119434408843517,-0.692093312740326,0.711858332157135,0.207798928022385,-0.957674980163574,0.199194043874741,0.451574474573135,-0.847453653812408,-0.279110699892044,0.227369338274002,-0.840859830379486,-0.491180092096329,-0.0772176012396812,-0.989201128482819,0.124573387205601,0.451574474573135,-0.847453653812408,-0.279110699892044,0.737974345684052,-0.506336569786072,-0.446113437414169,0.589757025241852,-0.405549645423889,-0.698366761207581,0.227369338274002,-0.840859830379486,-0.491180092096329,0.737974345684052,-0.506336569786072,-0.446113437414169,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.893790304660797,0.11711710691452,-0.432923167943954,0.589757025241852,-0.405549645423889,-0.698366761207581,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.947726309299469,0.160956501960754,0.275513887405396,0.865549385547638,0.446460962295532,0.226929157972336,0.893790304660797,0.11711710691452,-0.432923167943954,0.947726309299469,0.160956501960754,0.275513887405396,0.694981157779694,0.0461361445486546,0.717546284198761,0.539613544940948,0.300762385129929,0.786358177661896,0.865549385547638,0.446460962295532,0.226929157972336,0.694981157779694,0.0461361445486546,0.717546284198761,\n0.382880628108978,-0.336864858865738,0.860188663005829,0.137372449040413,-0.188157200813293,0.972484290599823,0.539613544940948,0.300762385129929,0.786358177661896,0.382880628108978,-0.336864858865738,0.860188663005829,0.171830341219902,-0.731816828250885,0.659483432769775,-0.119434408843517,-0.692093312740326,0.711858332157135,0.137372449040413,-0.188157200813293,0.972484290599823,-0.119434408843517,-0.692093312740326,0.711858332157135,-0.0772176012396812,-0.989201128482819,0.124573387205601,0.543316781520844,-0.79720413684845,0.263196527957916,0.517825782299042,-0.683434009552002,0.514562368392944,-0.0772176012396812,-0.989201128482819,0.124573387205601,0.227369338274002,-0.840859830379486,-0.491180092096329,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.543316781520844,-0.79720413684845,0.263196527957916,0.227369338274002,-0.840859830379486,-0.491180092096329,0.589757025241852,-0.405549645423889,-0.698366761207581,0.818628549575806,-0.56630539894104,-0.095631942152977,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.589757025241852,-0.405549645423889,-0.698366761207581,0.893790304660797,0.11711710691452,-0.432923167943954,0.936200797557831,-0.349729657173157,0.0348892845213413,0.818628549575806,-0.56630539894104,-0.095631942152977,0.893790304660797,0.11711710691452,-0.432923167943954,0.865549385547638,0.446460962295532,0.226929157972336,0.927894592285156,-0.210005521774292,0.308073401451111,0.936200797557831,-0.349729657173157,0.0348892845213413,0.865549385547638,0.446460962295532,0.226929157972336,0.539613544940948,0.300762385129929,0.786358177661896,0.795584321022034,-0.263417273759842,0.545579493045807,0.927894592285156,-0.210005521774292,0.308073401451111,0.539613544940948,0.300762385129929,0.786358177661896,0.137372449040413,-0.188157200813293,0.972484290599823,0.623724460601807,-0.472118139266968,0.622954428195953,0.795584321022034,-0.263417273759842,0.545579493045807,0.137372449040413,-0.188157200813293,0.972484290599823,-0.119434408843517,-0.692093312740326,0.711858332157135,0.517825782299042,-0.683434009552002,0.514562368392944,\n0.623724460601807,-0.472118139266968,0.622954428195953,0.39375701546669,-0.458273440599442,-0.796831786632538,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.78587132692337,-0.599782109260559,0.150557950139046,0.785931706428528,-0.599372208118439,0.151869475841522,0.76507031917572,-0.643946468830109,0.000624333799351007,0.128620937466621,-0.731338679790497,-0.669776320457459,0.128620937466621,-0.731338679790497,-0.669776320457459,0.76507031917572,-0.643946468830109,0.000624333799351007,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.689465761184692,-0.331197649240494,0.64416229724884,0.768967747688293,-0.480744570493698,0.421394437551498,0.974745631217957,0.220444723963737,0.0357081368565559,0.922376871109009,0.332838177680969,0.19606027007103,0.740420699119568,-0.407449632883072,0.53456711769104,0.689465761184692,-0.331197649240494,0.64416229724884,0.922376871109009,0.332838177680969,0.19606027007103,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.688185930252075,-0.329065650701523,0.646618843078613,0.767808198928833,-0.477225512266159,0.427465051412582,0.778943240642548,-0.513350427150726,0.360164850950241,0.779076516628265,-0.514032542705536,0.35890144109726,0.768967747688293,-0.480744570493698,0.421394437551498,0.689465761184692,-0.331197649240494,0.64416229724884,0.740381181240082,-0.407373487949371,0.53467983007431,0.688185930252075,-0.329065650701523,0.646618843078613,0.689465761184692,-0.331197649240494,0.64416229724884,0.740420699119568,-0.407449632883072,0.53456711769104,0.712573170661926,-0.434123963117599,-0.551158607006073,0.825049936771393,-0.453089714050293,-0.337642371654511,0.851781845092773,0.0115588782355189,-0.523769080638886,0.783942937850952,-0.186095729470253,-0.59228527545929,0.0479290783405304,-0.711503028869629,-0.701046526432037,-0.423463702201843,-0.905563116073608,0.0251786317676306,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.0479290783405304,-0.711503028869629,-0.701046526432037,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.783942937850952,-0.186095729470253,-0.59228527545929,\n0.409443646669388,-0.535873591899872,-0.738373458385468,-0.218962535262108,0.084364540874958,-0.972079277038574,-0.20303450524807,0.175852552056313,-0.963251233100891,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.437538176774979,0.011323343962431,0.899128556251526,-0.412358522415161,0.0925682708621025,0.906306564807892,-0.205622598528862,0.0701295286417007,0.976115345954895,0.0116670094430447,0.00425092596560717,0.999922931194305,0.109445370733738,0.0023056548088789,0.993990123271942,0.111529469490051,0.0670560151338577,0.99149614572525,0.0177117679268122,0.0767069831490517,0.996896326541901,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.92103111743927,-0.215036183595657,-0.324747800827026,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.412358522415161,0.0925682708621025,0.906306564807892,-0.437538176774979,0.011323343962431,0.899128556251526,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.669797301292419,0.132067054510117,0.730705082416534,-0.437538176774979,0.011323343962431,0.899128556251526,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.677088737487793,-0.402109175920486,-0.616327106952667,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.730700254440308,-0.321549147367477,-0.602231919765472,\n-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.0261400658637285,-0.230357423424721,-0.972754895687103,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.669797301292419,0.132067054510117,0.730705082416534,-0.559998273849487,0.512845575809479,0.65068531036377,-0.285846680402756,0.740470588207245,0.608272194862366,-0.412358522415161,0.0925682708621025,0.906306564807892,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.559998273849487,0.512845575809479,0.65068531036377,-0.669797301292419,0.132067054510117,0.730705082416534,-0.880525827407837,0.119760677218437,0.458619266748428,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.92103111743927,-0.215036183595657,-0.324747800827026,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.163037300109863,0.519588589668274,0.838717222213745,0.0445509292185307,0.65805971622467,0.751646637916565,-0.265586584806442,0.827619135379791,0.494479835033417,-0.415858834981918,0.554817199707031,0.720582604408264,0.135322481393814,0.847399234771729,0.513422191143036,-0.244644120335579,0.685302138328552,0.685937523841858,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0757151022553444,0.839400827884674,0.53821325302124,-0.630419492721558,0.671314060688019,-0.389754712581635,-0.528733134269714,0.826087534427643,0.194988861680031,-0.36407133936882,0.919048547744751,0.151002898812294,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.244644120335579,0.685302138328552,0.685937523841858,-0.408989250659943,0.558586657047272,0.721601545810699,-0.198288127779961,0.888361811637878,0.414119631052017,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0639016851782799,0.636703133583069,0.768456697463989,-0.207234025001526,0.598978042602539,0.773485243320465,-0.217426031827927,0.259526431560516,0.940942049026489,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.244644120335579,0.685302138328552,0.685937523841858,\n-0.163037300109863,0.519588589668274,0.838717222213745,-0.415858834981918,0.554817199707031,0.720582604408264,-0.408989250659943,0.558586657047272,0.721601545810699,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.187158063054085,0.75642067193985,-0.626737236976624,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.0572102777659893,-0.363048881292343,-0.930012106895447,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.0545569509267807,0.00619251187890768,-0.99849146604538,0.0858502238988876,-0.0293905436992645,-0.995874464511871,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0605181753635406,0.0956659987568855,-0.993572115898132,0.103162460029125,0.213912323117256,-0.971390247344971,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.0469610393047333,0.340933084487915,0.938913881778717,0.269015103578568,0.393741130828857,0.878975987434387,0.228596761822701,0.602607667446136,0.764596283435822,-0.0639016851782799,0.636703133583069,0.768456697463989,0.0754682123661041,0.474540889263153,-0.876992285251617,-0.0510855726897717,0.371638625860214,-0.926970899105072,-0.051368486136198,0.366652280092239,-0.928938865661621,0.0849071517586708,0.404431521892548,-0.910618424415588,0.0357786677777767,-0.332784980535507,-0.942323744297028,0.0145233506336808,-0.332326263189316,-0.943052649497986,-0.0222764182835817,-0.332656174898148,-0.942785024642944,-0.0104440562427044,-0.319070518016815,-0.947673439979553,-0.251114159822464,0.744844555854797,0.618181467056274,-0.265586584806442,0.827619135379791,0.494479835033417,-0.264517962932587,0.829988181591034,0.491070061922073,-0.126853466033936,0.814248085021973,0.566487669944763,0.0858502238988876,-0.0293905436992645,-0.995874464511871,-0.0545569509267807,0.00619251187890768,-0.99849146604538,\n-0.044108722358942,-0.104566030204296,-0.993539333343506,0.053296934813261,-0.126089468598366,-0.99058610200882,0.025994973257184,0.100541830062866,0.99459320306778,0.0350599996745586,0.0215551313012838,0.999152719974518,0.105945765972137,-0.0333648808300495,0.993811964988709,0.0329285115003586,0.095338836312294,0.994900107383728,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.880525827407837,0.119760677218437,0.458619266748428,-0.669797301292419,0.132067054510117,0.730705082416534,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.264517962932587,0.829988181591034,0.491070061922073,-0.54696398973465,0.598231494426727,0.585618793964386,-0.523228526115417,0.410001486539841,0.747081458568573,-0.207234025001526,0.598978042602539,0.773485243320465,-0.207234025001526,0.598978042602539,0.773485243320465,-0.523228526115417,0.410001486539841,0.747081458568573,-0.531731903553009,0.138175398111343,0.835564970970154,-0.217426031827927,0.259526431560516,0.940942049026489,-0.198288127779961,0.888361811637878,0.414119631052017,-0.175527319312096,0.630527257919312,0.756059229373932,-0.129651710391045,0.577601253986359,0.805957317352295,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0757151022553444,0.839400827884674,0.53821325302124,-0.18195928633213,0.86905300617218,0.460040956735611,-0.129651710391045,0.577601253986359,0.805957317352295,-0.101806551218033,0.422118037939072,0.900806188583374,-0.101806551218033,0.422118037939072,0.900806188583374,-0.129651710391045,0.577601253986359,0.805957317352295,-0.163592055439949,0.697549223899841,0.697612106800079,-0.235576257109642,0.590675473213196,0.771755337715149,\n0.0849071517586708,0.404431521892548,-0.910618424415588,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.187158063054085,0.75642067193985,-0.626737236976624,0.0754682123661041,0.474540889263153,-0.876992285251617,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.044108722358942,-0.104566030204296,-0.993539333343506,-0.0333343744277954,-0.188492000102997,-0.981508851051331,0.0198883153498173,-0.203020170331001,-0.978972554206848,0.0198883153498173,-0.203020170331001,-0.978972554206848,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.0222764182835817,-0.332656174898148,-0.942785024642944,0.0145233506336808,-0.332326263189316,-0.943052649497986,-0.0663832724094391,0.0673947036266327,-0.995515525341034,0.103274650871754,0.0756512358784676,-0.991771757602692,0.0858502238988876,-0.0293905436992645,-0.995874464511871,-0.0474926419556141,-0.104372285306454,-0.993403673171997,0.103162460029125,0.213912323117256,-0.971390247344971,-0.0573794208467007,0.242892846465111,-0.968354642391205,-0.0605181753635406,0.0956659987568855,-0.993572115898132,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0757151022553444,0.839400827884674,0.53821325302124,0.124407894909382,0.762849271297455,0.634494781494141,0.32895365357399,0.891276717185974,0.312114208936691,0.135322481393814,0.847399234771729,0.513422191143036,-0.235576257109642,0.590675473213196,0.771755337715149,0.007120281457901,0.824189305305481,0.566269636154175,0.124407894909382,0.762849271297455,0.634494781494141,-0.101806551218033,0.422118037939072,0.900806188583374,-0.130890280008316,0.562183797359467,0.816588640213013,0.0445509292185307,0.65805971622467,0.751646637916565,0.288280248641968,0.458255499601364,0.840771317481995,0.227748140692711,0.261638969182968,0.937910318374634,0.128257870674133,0.488565057516098,0.863049328327179,0.182602807879448,0.369611233472824,0.911067366600037,0.227748140692711,0.261638969182968,0.937910318374634,0.288280248641968,0.458255499601364,0.840771317481995,0.127348259091377,0.984222948551178,0.1228316873312,\n0.320210188627243,0.913715243339539,0.250179767608643,0.007120281457901,0.824189305305481,0.566269636154175,-0.373853147029877,0.908021092414856,0.189027920365334,0.007120281457901,0.824189305305481,0.566269636154175,0.320210188627243,0.913715243339539,0.250179767608643,0.32895365357399,0.891276717185974,0.312114208936691,0.124407894909382,0.762849271297455,0.634494781494141,0.287634700536728,0.718605816364288,0.633144497871399,0.32895365357399,0.891276717185974,0.312114208936691,0.320210188627243,0.913715243339539,0.250179767608643,0.167783945798874,0.880431950092316,0.443495273590088,0.135322481393814,0.847399234771729,0.513422191143036,0.32895365357399,0.891276717185974,0.312114208936691,0.287634700536728,0.718605816364288,0.633144497871399,0.267442584037781,0.554580211639404,0.787981748580933,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.531731903553009,0.138175398111343,0.835564970970154,-0.523228526115417,0.410001486539841,0.747081458568573,-0.541739642620087,0.290830105543137,0.788629233837128,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.797964632511139,-0.0603525713086128,0.599674940109253,-0.803666055202484,-0.115168422460556,0.583829700946808,-0.943021297454834,-0.0914337635040283,0.31992295384407,0.0350599996745586,0.0215551313012838,0.999152719974518,0.0415807291865349,0.144025474786758,0.988700032234192,0.227037891745567,0.0226937420666218,0.973621487617493,0.105945765972137,-0.0333648808300495,0.993811964988709,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.26172998547554,-0.1111850887537,0.958715438842773,0.105945765972137,-0.0333648808300495,0.993811964988709,0.227037891745567,0.0226937420666218,0.973621487617493,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.125138372182846,-0.0807519108057022,0.988847553730011,0.0415807291865349,0.144025474786758,0.988700032234192,0.051253791898489,0.460094302892685,0.886389493942261,0.269015103578568,0.393741130828857,0.878975987434387,\n0.227037891745567,0.0226937420666218,0.973621487617493,0.227037891745567,0.0226937420666218,0.973621487617493,0.269015103578568,0.393741130828857,0.878975987434387,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.26172998547554,-0.1111850887537,0.958715438842773,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.959401249885559,0.00467001460492611,0.282005965709686,0.0329285115003586,0.095338836312294,0.994900107383728,0.105945765972137,-0.0333648808300495,0.993811964988709,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.130024403333664,0.107345074415207,0.985682845115662,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.217426031827927,0.259526431560516,0.940942049026489,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.243838042020798,0.106035023927689,0.964001834392548,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.420480906963348,-0.101670697331429,0.901586890220642,\n0.267442584037781,0.554580211639404,0.787981748580933,0.288280248641968,0.458255499601364,0.840771317481995,0.0445509292185307,0.65805971622467,0.751646637916565,-0.163037300109863,0.519588589668274,0.838717222213745,0.128257870674133,0.488565057516098,0.863049328327179,0.287634700536728,0.718605816364288,0.633144497871399,0.167783945798874,0.880431950092316,0.443495273590088,0.0469380915164948,0.75044322013855,0.659266114234924,0.288280248641968,0.458255499601364,0.840771317481995,0.267442584037781,0.554580211639404,0.787981748580933,0.287634700536728,0.718605816364288,0.633144497871399,0.128257870674133,0.488565057516098,0.863049328327179,-0.0117101557552814,0.969888210296631,0.243268758058548,0.0469380915164948,0.75044322013855,0.659266114234924,0.167783945798874,0.880431950092316,0.443495273590088,0.118423573672771,0.978543698787689,0.168606325984001,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.264517962932587,0.829988181591034,0.491070061922073,-0.207234025001526,0.598978042602539,0.773485243320465,-0.0639016851782799,0.636703133583069,0.768456697463989,-0.126853466033936,0.814248085021973,0.566487669944763,0.00678820535540581,0.00935708172619343,0.999933183193207,0.0177117679268122,0.0767069831490517,0.996896326541901,0.111529469490051,0.0670560151338577,0.99149614572525,-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.285846680402756,0.740470588207245,0.608272194862366,-0.233475670218468,0.295215666294098,0.926464676856995,-0.205622598528862,0.0701295286417007,0.976115345954895,-0.412358522415161,0.0925682708621025,0.906306564807892,0.00109092053025961,0.832261800765991,-0.554381728172302,0.0272185504436493,0.988011002540588,-0.151965260505676,-0.498037964105606,0.826278984546661,-0.263099282979965,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.437538176774979,0.011323343962431,0.899128556251526,\n-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.045579582452774,-0.167653381824493,-0.98479175567627,-0.0474926419556141,-0.104372285306454,-0.993403673171997,0.0858502238988876,-0.0293905436992645,-0.995874464511871,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.265586584806442,0.827619135379791,0.494479835033417,-0.130890280008316,0.562183797359467,0.816588640213013,-0.54696398973465,0.598231494426727,0.585618793964386,-0.264517962932587,0.829988181591034,0.491070061922073,0.0620061531662941,0.990111231803894,-0.125837221741676,0.118423573672771,0.978543698787689,0.168606325984001,0.127348259091377,0.984222948551178,0.1228316873312,0.0272185504436493,0.988011002540588,-0.151965260505676,-0.373853147029877,0.908021092414856,0.189027920365334,0.007120281457901,0.824189305305481,0.566269636154175,-0.235576257109642,0.590675473213196,0.771755337715149,-0.528733134269714,0.826087534427643,0.194988861680031,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.630419492721558,0.671314060688019,-0.389754712581635,-0.498037964105606,0.826278984546661,-0.263099282979965,0.0272185504436493,0.988011002540588,-0.151965260505676,0.127348259091377,0.984222948551178,0.1228316873312,-0.373853147029877,0.908021092414856,0.189027920365334,-0.528733134269714,0.826087534427643,0.194988861680031,-0.235576257109642,0.590675473213196,0.771755337715149,-0.163592055439949,0.697549223899841,0.697612106800079,-0.36407133936882,0.919048547744751,0.151002898812294,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.217426031827927,0.259526431560516,0.940942049026489,-0.531731903553009,0.138175398111343,0.835564970970154,\n-0.767262578010559,-0.329318106174469,0.550325155258179,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.531731903553009,0.138175398111343,0.835564970970154,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.0938221365213394,0.828937470912933,-0.551416397094727,0.00109092053025961,0.832261800765991,-0.554381728172302,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.10327572375536,0.46809983253479,-0.877619862556458,0.0849071517586708,0.404431521892548,-0.910618424415588,0.103162460029125,0.213912323117256,-0.971390247344971,-0.277610629796982,0.394662648439407,-0.875884532928467,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.498037964105606,0.826278984546661,-0.263099282979965,-0.373853147029877,0.908021092414856,0.189027920365334,-0.528733134269714,0.826087534427643,0.194988861680031,-0.630419492721558,0.671314060688019,-0.389754712581635,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.0328970178961754,0.677300930023193,-0.734970211982727,-0.045579582452774,-0.167653381824493,-0.98479175567627,-0.361107349395752,-0.274716913700104,-0.891140937805176,\n-0.273301541805267,-0.178375348448753,-0.945245206356049,-0.0474926419556141,-0.104372285306454,-0.993403673171997,-0.0765343606472015,-0.228869631886482,-0.970443785190582,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.453488618135452,0.205984279513359,-0.867132365703583,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.0261400658637285,-0.230357423424721,-0.972754895687103,0.0198883153498173,-0.203020170331001,-0.978972554206848,0.0145233506336808,-0.332326263189316,-0.943052649497986,0.0145233506336808,-0.332326263189316,-0.943052649497986,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0572102777659893,-0.363048881292343,-0.930012106895447,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.218962535262108,0.084364540874958,-0.972079277038574,-0.273301541805267,-0.178375348448753,-0.945245206356049,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.273301541805267,-0.178375348448753,-0.945245206356049,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.677088737487793,-0.402109175920486,-0.616327106952667,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.045579582452774,-0.167653381824493,-0.98479175567627,-0.0261400658637285,-0.230357423424721,-0.972754895687103,\n-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.168258428573608,-0.0454077981412411,0.984696507453918,0.0502381287515163,0.0132010383531451,0.998650014400482,0.0329285115003586,0.095338836312294,0.994900107383728,-0.130024403333664,0.107345074415207,0.985682845115662,0.111529469490051,0.0670560151338577,0.99149614572525,0.109445370733738,0.0023056548088789,0.993990123271942,-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.205622598528862,0.0701295286417007,0.976115345954895,-0.233475670218468,0.295215666294098,0.926464676856995,-0.0027873576618731,0.0608935356140137,0.998140394687653,0.111529469490051,0.0670560151338577,0.99149614572525,-0.205622598528862,0.0701295286417007,0.976115345954895,0.0116670094430447,0.00425092596560717,0.999922931194305,0.0105779552832246,0.0432977452874184,0.99900621175766,0.0502381287515163,0.0132010383531451,0.998650014400482,0.109445370733738,0.0023056548088789,0.993990123271942,0.109445370733738,0.0023056548088789,0.993990123271942,0.0502381287515163,0.0132010383531451,0.998650014400482,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.803666055202484,-0.115168422460556,0.583829700946808,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.243838042020798,0.106035023927689,0.964001834392548,-0.26172998547554,-0.1111850887537,0.958715438842773,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.130024403333664,0.107345074415207,0.985682845115662,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.26172998547554,-0.1111850887537,0.958715438842773,\n-0.243838042020798,0.106035023927689,0.964001834392548,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.959401249885559,0.00467001460492611,0.282005965709686,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.797964632511139,-0.0603525713086128,0.599674940109253,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.803666055202484,-0.115168422460556,0.583829700946808,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.943021297454834,-0.0914337635040283,0.31992295384407,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.797964632511139,-0.0603525713086128,0.599674940109253,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.971830129623413,-0.100029721856117,0.213401570916176,0.242353484034538,0.171934008598328,0.954831659793854,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.130890280008316,0.562183797359467,0.816588640213013,0.227748140692711,0.261638969182968,0.937910318374634,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.541739642620087,0.290830105543137,0.788629233837128,-0.54696398973465,0.598231494426727,0.585618793964386,-0.130890280008316,0.562183797359467,0.816588640213013,\n-0.885142028331757,0.459607869386673,-0.072692796587944,-0.721357464790344,0.650649428367615,0.237273663282394,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.163592055439949,0.697549223899841,0.697612106800079,-0.129651710391045,0.577601253986359,0.805957317352295,-0.175527319312096,0.630527257919312,0.756059229373932,-0.191041514277458,0.700716555118561,0.6873859167099,-0.36407133936882,0.919048547744751,0.151002898812294,-0.163592055439949,0.697549223899841,0.697612106800079,-0.191041514277458,0.700716555118561,0.6873859167099,-0.309881597757339,0.939583599567413,0.145451411604881,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.36407133936882,0.919048547744751,0.151002898812294,-0.309881597757339,0.939583599567413,0.145451411604881,-0.187158063054085,0.75642067193985,-0.626737236976624,0.0682389214634895,0.656387150287628,0.751331746578217,0.0917807519435883,0.740839779376984,0.665381610393524,0.228596761822701,0.602607667446136,0.764596283435822,0.0630034655332565,0.605371952056885,0.793445229530334,0.228596761822701,0.602607667446136,0.764596283435822,0.0917807519435883,0.740839779376984,0.665381610393524,-0.126853466033936,0.814248085021973,0.566487669944763,-0.0639016851782799,0.636703133583069,0.768456697463989,0.118423573672771,0.978543698787689,0.168606325984001,0.0620061531662941,0.990111231803894,-0.125837221741676,0.00345755694434047,0.996382415294647,-0.0849123671650887,-0.0117101557552814,0.969888210296631,0.243268758058548,0.206769347190857,0.0198965240269899,-0.978187382221222,0.076873891055584,0.283797085285187,-0.955797910690308,-0.158792361617088,0.191556662321091,-0.968550980091095,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.158792361617088,0.191556662321091,-0.968550980091095,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.20303450524807,0.175852552056313,-0.963251233100891,-7.2909109860575e-009,0.660060167312622,0.751212775707245,0.00678820535540581,0.00935708172619343,0.999933183193207,\n-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.233475670218468,0.295215666294098,0.926464676856995,-0.431082636117935,0.669595658779144,0.604821860790253,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.158792361617088,0.191556662321091,-0.968550980091095,0.076873891055584,0.283797085285187,-0.955797910690308,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.960404455661774,0.118234008550644,0.252277553081512,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.900862991809845,0.205661669373512,0.382294595241547,-0.823818027973175,0.437958568334579,0.359883517026901,-0.929829955101013,0.272868812084198,0.246898397803307,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.935231983661652,0.339124768972397,0.10166396945715,-0.830669224262238,0.464176833629608,0.307454913854599,-0.873635351657867,0.199546694755554,0.44378200173378,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.541739642620087,0.290830105543137,0.788629233837128,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.439444810152054,-0.112185478210449,0.89123660326004,\n-0.775276005268097,0.0246404502540827,0.631141781806946,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.151422306895256,0.167262390255928,0.974214851856232,-0.325357735157013,0.61151111125946,0.721246421337128,-0.516382813453674,0.465612560510635,0.718716740608215,-0.439444810152054,-0.112185478210449,0.89123660326004,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.275725185871124,-0.367643237113953,0.888152062892914,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.670227468013763,0.653629958629608,0.351515263319016,-0.516382813453674,0.465612560510635,0.718716740608215,-0.325357735157013,0.61151111125946,0.721246421337128,-0.482889622449875,0.809686243534088,0.333505302667618,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.935231983661652,0.339124768972397,0.10166396945715,-0.823818027973175,0.437958568334579,0.359883517026901,-0.900862991809845,0.205661669373512,0.382294595241547,-0.873635351657867,0.199546694755554,0.44378200173378,-0.830669224262238,0.464176833629608,0.307454913854599,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.0765343606472015,-0.228869631886482,-0.970443785190582,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.636381566524506,-0.215738385915756,-0.74059122800827,0.230162009596825,-0.0996426865458488,-0.968037605285645,-0.0765343606472015,-0.228869631886482,-0.970443785190582,-0.636381566524506,-0.215738385915756,-0.74059122800827,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.873635351657867,0.199546694755554,0.44378200173378,-0.900862991809845,0.205661669373512,0.382294595241547,-0.887102901935577,-0.248076841235161,0.389238119125366,\n-0.869328856468201,-0.380869299173355,0.314969629049301,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.775276005268097,0.0246404502540827,0.631141781806946,-0.275725185871124,-0.367643237113953,0.888152062892914,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.151422306895256,0.167262390255928,0.974214851856232,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.0389007441699505,0.220736414194107,0.974557399749756,0.242353484034538,0.171934008598328,0.954831659793854,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.439444810152054,-0.112185478210449,0.89123660326004,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.670227468013763,0.653629958629608,0.351515263319016,-0.482889622449875,0.809686243534088,0.333505302667618,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.386267960071564,0.732354819774628,-0.560761570930481,0.206769347190857,0.0198965240269899,-0.978187382221222,0.230162009596825,-0.0996426865458488,-0.968037605285645,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.339145213365555,-0.0408404320478439,-0.939847111701965,0.076873891055584,0.283797085285187,-0.955797910690308,0.206769347190857,0.0198965240269899,-0.978187382221222,-0.339145213365555,-0.0408404320478439,-0.939847111701965,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.386267960071564,0.732354819774628,-0.560761570930481,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.58198344707489,-0.50494521856308,0.637436747550964,\n-0.869328856468201,-0.380869299173355,0.314969629049301,-0.775276005268097,0.0246404502540827,0.631141781806946,-0.439444810152054,-0.112185478210449,0.89123660326004,0.0469380915164948,0.75044322013855,0.659266114234924,-0.325357735157013,0.61151111125946,0.721246421337128,-0.151422306895256,0.167262390255928,0.974214851856232,0.182602807879448,0.369611233472824,0.911067366600037,0.0469380915164948,0.75044322013855,0.659266114234924,-0.0117101557552814,0.969888210296631,0.243268758058548,-0.482889622449875,0.809686243534088,0.333505302667618,-0.325357735157013,0.61151111125946,0.721246421337128,-0.225912064313889,-0.13972570002079,0.964074909687042,0.242353484034538,0.171934008598328,0.954831659793854,0.182602807879448,0.369611233472824,0.911067366600037,-0.151422306895256,0.167262390255928,0.974214851856232,-0.0117101557552814,0.969888210296631,0.243268758058548,0.00345755694434047,0.996382415294647,-0.0849123671650887,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.482889622449875,0.809686243534088,0.333505302667618,0.00345755694434047,0.996382415294647,-0.0849123671650887,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.386267960071564,0.732354819774628,-0.560761570930481,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.339145213365555,-0.0408404320478439,-0.939847111701965,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.386267960071564,0.732354819774628,-0.560761570930481,-0.0149039337411523,0.576608240604401,-0.816884815692902,0.076873891055584,0.283797085285187,-0.955797910690308,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.541739642620087,0.290830105543137,0.788629233837128,\n-0.775276005268097,0.0246404502540827,0.631141781806946,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.900862991809845,0.205661669373512,0.382294595241547,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.636381566524506,-0.215738385915756,-0.74059122800827,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.636381566524506,-0.215738385915756,-0.74059122800827,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.339145213365555,-0.0408404320478439,-0.939847111701965,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.92103111743927,-0.215036183595657,-0.324747800827026,-0.20303450524807,0.175852552056313,-0.963251233100891,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.277610629796982,0.394662648439407,-0.875884532928467,\n-0.146824181079865,0.202549442648888,-0.968202650547028,-0.121267899870873,0.453522175550461,-0.882956266403198,0.00109092053025961,0.832261800765991,-0.554381728172302,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.277610629796982,0.394662648439407,-0.875884532928467,0.0105779552832246,0.0432977452874184,0.99900621175766,0.025994973257184,0.100541830062866,0.99459320306778,0.0329285115003586,0.095338836312294,0.994900107383728,0.0502381287515163,0.0132010383531451,0.998650014400482,0.051253791898489,0.460094302892685,0.886389493942261,0.0630034655332565,0.605371952056885,0.793445229530334,0.228596761822701,0.602607667446136,0.764596283435822,0.269015103578568,0.393741130828857,0.878975987434387,-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.960404455661774,0.118234008550644,0.252277553081512,-0.929829955101013,0.272868812084198,0.246898397803307,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.960404455661774,0.118234008550644,0.252277553081512,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.938947200775146,-0.340274900197983,-0.0509038865566254,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.830669224262238,0.464176833629608,0.307454913854599,-0.935231983661652,0.339124768972397,0.10166396945715,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.926227867603302,0.166116192936897,0.338389337062836,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.275725185871124,-0.367643237113953,0.888152062892914,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.097216323018074,-0.329928547143936,0.938986778259277,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.275725185871124,-0.367643237113953,0.888152062892914,\n-0.516382813453674,0.465612560510635,0.718716740608215,-0.670227468013763,0.653629958629608,0.351515263319016,-0.563040912151337,0.733509361743927,0.380721718072891,-0.333576679229736,0.525787591934204,0.782479405403137,-0.097216323018074,-0.329928547143936,0.938986778259277,-0.154075160622597,0.221347615122795,0.962946593761444,0.198109984397888,-0.381663233041763,0.902820944786072,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.938947200775146,-0.340274900197983,-0.0509038865566254,-0.944353520870209,-0.253018736839294,-0.21018548309803,0.729846894741058,-0.679405450820923,0.0757084339857101,0.704946756362915,-0.708129465579987,-0.040034044533968,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.22399939596653,-0.804867208003998,0.549557149410248,0.568926751613617,-0.0644996538758278,0.819854915142059,0.493679195642471,-0.48221343755722,0.723706424236298,0.198109984397888,-0.381663233041763,0.902820944786072,0.165526703000069,0.46548119187355,0.869441270828247,0.311660826206207,-0.127051904797554,-0.941660940647125,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.355119854211807,-0.655639946460724,-0.666352868080139,0.707368016242981,-0.349391609430313,-0.614455819129944,0.493679195642471,-0.48221343755722,0.723706424236298,0.568926751613617,-0.0644996538758278,0.819854915142059,0.780032634735107,-0.518629193305969,0.350104093551636,-0.594531655311584,-0.698622703552246,0.398068368434906,0.707368016242981,-0.349391609430313,-0.614455819129944,0.644391298294067,-0.53528618812561,-0.546103060245514,0.298700571060181,-0.161740928888321,-0.94054126739502,0.311660826206207,-0.127051904797554,-0.941660940647125,0.707368016242981,-0.349391609430313,-0.614455819129944,-0.484471023082733,-0.813864707946777,-0.320799201726913,0.692149817943573,-0.677433252334595,-0.249023765325546,0.644391298294067,-0.53528618812561,-0.546103060245514,-0.22399939596653,-0.804867208003998,0.549557149410248,\n-0.594531655311584,-0.698622703552246,0.398068368434906,0.780032634735107,-0.518629193305969,0.350104093551636,0.729846894741058,-0.679405450820923,0.0757084339857101,-0.22399939596653,-0.804867208003998,0.549557149410248,-0.926227867603302,0.166116192936897,0.338389337062836,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.830669224262238,0.464176833629608,0.307454913854599,-0.926227867603302,0.166116192936897,0.338389337062836,-0.915170788764954,0.197068557143211,0.351605415344238,-0.823818027973175,0.437958568334579,0.359883517026901,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.915170788764954,0.197068557143211,0.351605415344238,-0.926227867603302,0.166116192936897,0.338389337062836,-0.22399939596653,-0.804867208003998,0.549557149410248,0.704946756362915,-0.708129465579987,-0.040034044533968,0.692149817943573,-0.677433252334595,-0.249023765325546,-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.333576679229736,0.525787591934204,0.782479405403137,-0.563040912151337,0.733509361743927,0.380721718072891,-0.743195831775665,0.547327280044556,0.384828329086304,-0.496076285839081,0.322463065385818,0.806179821491241,-0.333576679229736,0.525787591934204,0.782479405403137,-0.496076285839081,0.322463065385818,0.806179821491241,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.097216323018074,-0.329928547143936,0.938986778259277,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.496076285839081,0.322463065385818,0.806179821491241,-0.549624145030975,0.147533476352692,0.822281718254089,-0.841190576553345,0.42979621887207,-0.328136563301086,-0.866790115833282,0.482820779085159,0.124735727906227,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.670227468013763,0.653629958629608,0.351515263319016,-0.736354291439056,0.674543976783752,-0.0526571460068226,\n-0.612874746322632,0.790095686912537,-0.011550584807992,-0.563040912151337,0.733509361743927,0.380721718072891,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.676622211933136,0.280620872974396,-0.680760145187378,-0.841190576553345,0.42979621887207,-0.328136563301086,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.449016630649567,0.427696466445923,-0.784512460231781,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.496076285839081,0.322463065385818,0.806179821491241,-0.743195831775665,0.547327280044556,0.384828329086304,-0.819946527481079,0.416022598743439,0.393208384513855,-0.549624145030975,0.147533476352692,0.822281718254089,0.314551591873169,-0.777825355529785,-0.544100165367126,0.445018202066422,-0.841427505016327,-0.306526601314545,0.480990260839462,-0.836049139499664,-0.263951063156128,0.233872562646866,-0.770340859889984,-0.593193531036377,0.552962005138397,-0.830714046955109,0.064398355782032,0.518121659755707,-0.845738351345062,-0.127579480409622,0.602230906486511,-0.791486024856567,-0.104248508810997,0.624863624572754,-0.775575757026672,0.0895971804857254,0.158797964453697,-0.752626359462738,0.639012277126312,0.477273166179657,-0.844216048717499,0.243945851922035,0.392137885093689,-0.898935735225677,0.195300936698914,0.22346855700016,-0.725432455539703,0.651006579399109,0.631202757358551,-0.748089611530304,0.204804703593254,0.679318964481354,-0.681169748306274,0.273008167743683,0.484550148248672,-0.283617049455643,0.827509820461273,0.470721006393433,-0.417188495397568,0.777415871620178,-0.425698101520538,-0.165044084191322,0.889686226844788,0.158797964453697,-0.752626359462738,0.639012277126312,0.22346855700016,-0.725432455539703,0.651006579399109,\n-0.331690967082977,-0.041898600757122,0.94245719909668,0.305413067340851,0.121777974069119,0.944400906562805,0.509250044822693,-0.170650407671928,0.843529999256134,-0.047230526804924,-0.147780075669289,0.987891852855682,-0.28887614607811,0.124025739729404,0.949298799037933,0.117293141782284,0.336978107690811,0.934177756309509,0.305413067340851,0.121777974069119,0.944400906562805,-0.28887614607811,0.124025739729404,0.949298799037933,-0.357071965932846,0.176186710596085,0.917310118675232,-0.388193219900131,-0.0462160408496857,-0.920418441295624,-0.122526675462723,-0.422631919384003,-0.897980749607086,-0.158167138695717,-0.488490730524063,-0.858114242553711,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.158167138695717,-0.488490730524063,-0.858114242553711,0.233872562646866,-0.770340859889984,-0.593193531036377,0.309054106473923,-0.602658152580261,-0.735723257064819,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.603177964687347,-0.730402767658234,-0.320449888706207,0.309054106473923,-0.602658152580261,-0.735723257064819,0.233872562646866,-0.770340859889984,-0.593193531036377,0.480990260839462,-0.836049139499664,-0.263951063156128,0.509250044822693,-0.170650407671928,0.843529999256134,0.744553029537201,-0.501156628131866,0.4410021007061,0.443388015031815,-0.641468644142151,0.626039206981659,-0.047230526804924,-0.147780075669289,0.987891852855682,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.0627354606986046,0.701922833919525,0.709484755992889,-0.270709186792374,0.893246471881866,0.35892516374588,-0.65559720993042,0.741017520427704,-0.145207911729813,0.64731752872467,-0.742053866386414,-0.174172759056091,0.668083667755127,-0.706556260585785,0.233329057693481,0.779800176620483,-0.625844657421112,0.0151696130633354,0.668628990650177,-0.726897060871124,-0.156703382730484,0.323112219572067,0.289230555295944,0.901079475879669,0.771257698535919,-0.18939545750618,0.607693135738373,0.509250044822693,-0.170650407671928,0.843529999256134,0.305413067340851,0.121777974069119,0.944400906562805,\n0.323112219572067,0.289230555295944,0.901079475879669,0.235387146472931,0.430203825235367,0.871503055095673,-0.34545773267746,0.720738053321838,0.600995540618896,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.633037269115448,0.653608679771423,0.414800643920898,-0.217019572854042,0.53657478094101,0.815469205379486,-0.0627354606986046,0.701922833919525,0.709484755992889,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.245442464947701,0.425341755151749,0.871115624904633,0.174675241112709,0.124651238322258,0.976703941822052,0.279203683137894,0.224120020866394,0.933710634708405,-0.217019572854042,0.53657478094101,0.815469205379486,-0.599866449832916,0.551924109458923,0.57925820350647,-0.245442464947701,0.425341755151749,0.871115624904633,-0.217019572854042,0.53657478094101,0.815469205379486,-0.633037269115448,0.653608679771423,0.414800643920898,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.685906887054443,0.655823826789856,-0.315320372581482,-0.733746409416199,0.676492989063263,-0.0630356669425964,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.521965801715851,0.298950701951981,-0.798861801624298,-0.599522888660431,0.463965177536011,-0.652156889438629,-0.0413625538349152,-0.756104946136475,-0.653141975402832,-0.266530960798264,-0.246738225221634,-0.931708931922913,0.130334496498108,-0.649341344833374,-0.749245464801788,0.130334496498108,-0.649341344833374,-0.749245464801788,-0.266530960798264,-0.246738225221634,-0.931708931922913,-0.349483400583267,-0.0788575559854507,-0.933618187904358,0.241232365369797,-0.621889412403107,-0.745023787021637,0.420848518610001,-0.797750890254974,-0.431833386421204,0.545369505882263,-0.785522282123566,-0.292449623346329,0.446416854858398,-0.828317999839783,-0.338528007268906,0.319416075944901,-0.833531200885773,-0.450776189565659,0.606213510036469,-0.729506313800812,-0.316742390394211,0.558507144451141,-0.773075938224792,-0.30070486664772,\n0.241232365369797,-0.621889412403107,-0.745023787021637,0.233110591769218,-0.47022944688797,-0.851201355457306,0.130334496498108,-0.649341344833374,-0.749245464801788,0.241232365369797,-0.621889412403107,-0.745023787021637,0.558507144451141,-0.773075938224792,-0.30070486664772,0.54656720161438,-0.7532879114151,-0.365816354751587,-0.0413625538349152,-0.756104946136475,-0.653141975402832,0.130334496498108,-0.649341344833374,-0.749245464801788,0.54656720161438,-0.7532879114151,-0.365816354751587,0.431472927331924,-0.822143793106079,-0.371363341808319,0.606213510036469,-0.729506313800812,-0.316742390394211,0.233110591769218,-0.47022944688797,-0.851201355457306,0.309054106473923,-0.602658152580261,-0.735723257064819,0.603177964687347,-0.730402767658234,-0.320449888706207,-0.39349702000618,0.476447492837906,0.786230206489563,-0.523556113243103,0.279740929603577,0.804757118225098,-0.331690967082977,-0.041898600757122,0.94245719909668,-0.0139366090297699,0.110060036182404,0.993827223777771,0.0628950372338295,0.12239508330822,0.990486621856689,0.470721006393433,-0.417188495397568,0.777415871620178,0.484550148248672,-0.283617049455643,0.827509820461273,0.115986511111259,0.227630436420441,0.966815114021301,0.564540684223175,-0.811680018901825,0.149898007512093,0.463100373744965,-0.535968005657196,0.705886960029602,0.22346855700016,-0.725432455539703,0.651006579399109,0.392137885093689,-0.898935735225677,0.195300936698914,0.463100373744965,-0.535968005657196,0.705886960029602,-0.0139366090297699,0.110060036182404,0.993827223777771,-0.331690967082977,-0.041898600757122,0.94245719909668,0.22346855700016,-0.725432455539703,0.651006579399109,0.319416075944901,-0.833531200885773,-0.450776189565659,0.446416854858398,-0.828317999839783,-0.338528007268906,0.445018202066422,-0.841427505016327,-0.306526601314545,0.314551591873169,-0.777825355529785,-0.544100165367126,0.319416075944901,-0.833531200885773,-0.450776189565659,-0.175627052783966,-0.391306757926941,-0.903346061706543,-0.238952934741974,-0.279697000980377,-0.929876923561096,0.420848518610001,-0.797750890254974,-0.431833386421204,\n-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.229133352637291,-0.201160058379173,-0.952382564544678,-0.0411282703280449,-0.362414002418518,-0.931109309196472,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.175627052783966,-0.391306757926941,-0.903346061706543,-0.122526675462723,-0.422631919384003,-0.897980749607086,-0.388193219900131,-0.0462160408496857,-0.920418441295624,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.328695803880692,0.662784039974213,0.672812342643738,-0.402240663766861,0.592356264591217,0.698080539703369,-0.420263022184372,0.62258517742157,0.660126268863678,-0.485478460788727,0.644360303878784,0.590855658054352,-0.341495484113693,0.750590026378632,0.565681397914886,-0.175726309418678,0.623865723609924,0.761519432067871,-0.420263022184372,0.62258517742157,0.660126268863678,-0.402240663766861,0.592356264591217,0.698080539703369,0.668083667755127,-0.706556260585785,0.233329057693481,0.64731752872467,-0.742053866386414,-0.174172759056091,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.477273166179657,-0.844216048717499,0.243945851922035,0.692083477973938,-0.68414306640625,-0.23014922440052,0.657974064350128,-0.742551565170288,-0.125249087810516,0.668628990650177,-0.726897060871124,-0.156703382730484,0.779800176620483,-0.625844657421112,0.0151696130633354,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.788194417953491,-0.590478122234344,-0.173450663685799,0.742225170135498,-0.630128085613251,-0.228123426437378,0.692083477973938,-0.68414306640625,-0.23014922440052,0.431472927331924,-0.822143793106079,-0.371363341808319,0.54656720161438,-0.7532879114151,-0.365816354751587,0.742225170135498,-0.630128085613251,-0.228123426437378,0.816579103469849,-0.529018878936768,-0.230949223041534,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.337419033050537,0.179084926843643,-0.924162864685059,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.742188274860382,0.281538933515549,-0.608187794685364,\n-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.627143085002899,0.109072089195251,-0.771229445934296,-0.627143085002899,0.109072089195251,-0.771229445934296,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.742188274860382,0.281538933515549,-0.608187794685364,0.314551591873169,-0.777825355529785,-0.544100165367126,0.233872562646866,-0.770340859889984,-0.593193531036377,-0.158167138695717,-0.488490730524063,-0.858114242553711,-0.122526675462723,-0.422631919384003,-0.897980749607086,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.388193219900131,-0.0462160408496857,-0.920418441295624,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.653796315193176,0.736424326896667,0.173866480588913,-0.728628396987915,0.670947968959808,0.137584701180458,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.349483400583267,-0.0788575559854507,-0.933618187904358,-0.266530960798264,-0.246738225221634,-0.931708931922913,-0.391994029283524,0.0455844439566135,-0.91883772611618,-0.353154391050339,-0.159876078367233,-0.92180347442627,0.233110591769218,-0.47022944688797,-0.851201355457306,0.241232365369797,-0.621889412403107,-0.745023787021637,-0.349483400583267,-0.0788575559854507,-0.933618187904358,-0.175627052783966,-0.391306757926941,-0.903346061706543,0.319416075944901,-0.833531200885773,-0.450776189565659,\n0.314551591873169,-0.777825355529785,-0.544100165367126,-0.122526675462723,-0.422631919384003,-0.897980749607086,0.0628950372338295,0.12239508330822,0.990486621856689,0.115986511111259,0.227630436420441,0.966815114021301,-0.397168695926666,0.623658359050751,0.673280954360962,-0.467934727668762,0.514274716377258,0.718720138072968,0.644391298294067,-0.53528618812561,-0.546103060245514,0.57789820432663,-0.655906856060028,-0.485612899065018,0.143241554498672,-0.263150751590729,-0.954061627388,0.298700571060181,-0.161740928888321,-0.94054126739502,0.484550148248672,-0.283617049455643,0.827509820461273,0.679318964481354,-0.681169748306274,0.273008167743683,0.780032634735107,-0.518629193305969,0.350104093551636,0.568926751613617,-0.0644996538758278,0.819854915142059,0.617175698280334,-0.749861061573029,-0.238332808017731,0.57789820432663,-0.655906856060028,-0.485612899065018,0.644391298294067,-0.53528618812561,-0.546103060245514,0.692149817943573,-0.677433252334595,-0.249023765325546,0.780032634735107,-0.518629193305969,0.350104093551636,0.679318964481354,-0.681169748306274,0.273008167743683,0.669889271259308,-0.735676348209381,0.100143387913704,0.729846894741058,-0.679405450820923,0.0757084339857101,0.165526703000069,0.46548119187355,0.869441270828247,0.115986511111259,0.227630436420441,0.966815114021301,0.484550148248672,-0.283617049455643,0.827509820461273,0.568926751613617,-0.0644996538758278,0.819854915142059,0.669889271259308,-0.735676348209381,0.100143387913704,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.704946756362915,-0.708129465579987,-0.040034044533968,0.729846894741058,-0.679405450820923,0.0757084339857101,0.298700571060181,-0.161740928888321,-0.94054126739502,0.143241554498672,-0.263150751590729,-0.954061627388,-0.337419033050537,0.179084926843643,-0.924162864685059,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.866790115833282,0.482820779085159,0.124735727906227,-0.841190576553345,0.42979621887207,-0.328136563301086,\n-0.841190576553345,0.42979621887207,-0.328136563301086,-0.676622211933136,0.280620872974396,-0.680760145187378,-0.52191436290741,0.573753893375397,-0.631198763847351,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.485478460788727,0.644360303878784,0.590855658054352,-0.559439122676849,0.572440028190613,0.599449932575226,-0.524893045425415,0.430009782314301,0.734560310840607,-0.751098394393921,0.448982089757919,0.484010636806488,-0.549624145030975,0.147533476352692,0.822281718254089,-0.819946527481079,0.416022598743439,0.393208384513855,-0.896193027496338,0.243554174900055,0.370836079120636,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.751098394393921,0.448982089757919,0.484010636806488,-0.737871766090393,0.512266218662262,0.439463973045349,-0.328695803880692,0.662784039974213,0.672812342643738,-0.485478460788727,0.644360303878784,0.590855658054352,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.896193027496338,0.243554174900055,0.370836079120636,-0.751098394393921,0.448982089757919,0.484010636806488,-0.524893045425415,0.430009782314301,0.734560310840607,-0.676622211933136,0.280620872974396,-0.680760145187378,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.52191436290741,0.573753893375397,-0.631198763847351,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.52191436290741,0.573753893375397,-0.631198763847351,0.311660826206207,-0.127051904797554,-0.941660940647125,0.298700571060181,-0.161740928888321,-0.94054126739502,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.549624145030975,0.147533476352692,0.822281718254089,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.154075160622597,0.221347615122795,0.962946593761444,-0.097216323018074,-0.329928547143936,0.938986778259277,0.115986511111259,0.227630436420441,0.966815114021301,\n0.165526703000069,0.46548119187355,0.869441270828247,-0.154075160622597,0.221347615122795,0.962946593761444,-0.397168695926666,0.623658359050751,0.673280954360962,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.665791451931,0.744200885295868,0.053728986531496,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.449016630649567,0.427696466445923,-0.784512460231781,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.676421940326691,0.591155827045441,0.439304113388062,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.665791451931,0.744200885295868,0.053728986531496,-0.345012873411179,0.660347282886505,0.667013943195343,-0.345012873411179,0.660347282886505,0.667013943195343,-0.665791451931,0.744200885295868,0.053728986531496,-0.728628396987915,0.670947968959808,0.137584701180458,-0.458523720502853,0.614238142967224,0.642236292362213,-0.458523720502853,0.614238142967224,0.642236292362213,-0.728628396987915,0.670947968959808,0.137584701180458,-0.653796315193176,0.736424326896667,0.173866480588913,-0.341495484113693,0.750590026378632,0.565681397914886,-0.357071965932846,0.176186710596085,0.917310118675232,-0.396970868110657,0.459579348564148,0.794481575489044,-0.175726309418678,0.623865723609924,0.761519432067871,0.117293141782284,0.336978107690811,0.934177756309509,-0.627143085002899,0.109072089195251,-0.771229445934296,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.388193219900131,-0.0462160408496857,-0.920418441295624,\n-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.238952934741974,-0.279697000980377,-0.929876923561096,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.396970868110657,0.459579348564148,0.794481575489044,-0.357071965932846,0.176186710596085,0.917310118675232,-0.523556113243103,0.279740929603577,0.804757118225098,-0.39349702000618,0.476447492837906,0.786230206489563,-0.396970868110657,0.459579348564148,0.794481575489044,-0.39349702000618,0.476447492837906,0.786230206489563,-0.482590168714523,0.598400712013245,0.639549314975739,-0.420263022184372,0.62258517742157,0.660126268863678,-0.207436442375183,0.874366402626038,0.438695192337036,0.293660908937454,0.577858746051788,0.761473953723907,-0.175726309418678,0.623865723609924,0.761519432067871,-0.341495484113693,0.750590026378632,0.565681397914886,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.653796315193176,0.736424326896667,0.173866480588913,-0.550443887710571,0.485175997018814,-0.679423153400421,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.28887614607811,0.124025739729404,0.949298799037933,-0.047230526804924,-0.147780075669289,0.987891852855682,-0.425698101520538,-0.165044084191322,0.889686226844788,-0.523556113243103,0.279740929603577,0.804757118225098,-0.047230526804924,-0.147780075669289,0.987891852855682,0.443388015031815,-0.641468644142151,0.626039206981659,0.158797964453697,-0.752626359462738,0.639012277126312,-0.425698101520538,-0.165044084191322,0.889686226844788,0.323112219572067,0.289230555295944,0.901079475879669,0.406247109174728,0.174616456031799,0.896923840045929,0.70347386598587,-0.284948945045471,0.651098012924194,0.771257698535919,-0.18939545750618,0.607693135738373,0.792802751064301,-0.543330252170563,0.276144862174988,\n0.744553029537201,-0.501156628131866,0.4410021007061,0.771257698535919,-0.18939545750618,0.607693135738373,0.70347386598587,-0.284948945045471,0.651098012924194,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.896193027496338,0.243554174900055,0.370836079120636,-0.819946527481079,0.416022598743439,0.393208384513855,-0.866790115833282,0.482820779085159,0.124735727906227,-0.866790115833282,0.482820779085159,0.124735727906227,-0.819946527481079,0.416022598743439,0.393208384513855,-0.743195831775665,0.547327280044556,0.384828329086304,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.207436442375183,0.874366402626038,0.438695192337036,-0.34545773267746,0.720738053321838,0.600995540618896,0.235387146472931,0.430203825235367,0.871503055095673,0.293660908937454,0.577858746051788,0.761473953723907,0.624863624572754,-0.775575757026672,0.0895971804857254,0.669889271259308,-0.735676348209381,0.100143387913704,0.679318964481354,-0.681169748306274,0.273008167743683,0.631202757358551,-0.748089611530304,0.204804703593254,0.552962005138397,-0.830714046955109,0.064398355782032,0.564540684223175,-0.811680018901825,0.149898007512093,0.392137885093689,-0.898935735225677,0.195300936698914,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.392137885093689,-0.898935735225677,0.195300936698914,0.477273166179657,-0.844216048717499,0.243945851922035,0.505315124988556,-0.859342753887177,-0.0786550119519234,-0.391994029283524,0.0455844439566135,-0.91883772611618,-0.405150681734085,0.0784264355897903,-0.910879909992218,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.458829164505005,0.0783318057656288,-0.885064899921417,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.617175698280334,-0.749861061573029,-0.238332808017731,0.692149817943573,-0.677433252334595,-0.249023765325546,0.704946756362915,-0.708129465579987,-0.040034044533968,0.518121659755707,-0.845738351345062,-0.127579480409622,0.446416854858398,-0.828317999839783,-0.338528007268906,0.545369505882263,-0.785522282123566,-0.292449623346329,\n0.602230906486511,-0.791486024856567,-0.104248508810997,0.518121659755707,-0.845738351345062,-0.127579480409622,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.445018202066422,-0.841427505016327,-0.306526601314545,0.446416854858398,-0.828317999839783,-0.338528007268906,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.471282690763474,0.177316069602966,-0.863974332809448,0.788194417953491,-0.590478122234344,-0.173450663685799,0.816579103469849,-0.529018878936768,-0.230949223041534,0.742225170135498,-0.630128085613251,-0.228123426437378,-0.207436442375183,0.874366402626038,0.438695192337036,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.24271634221077,0.841442763805389,0.482765853404999,-0.34545773267746,0.720738053321838,0.600995540618896,0.722802340984344,-0.617218017578125,0.310803234577179,0.792802751064301,-0.543330252170563,0.276144862174988,0.70347386598587,-0.284948945045471,0.651098012924194,0.592092573642731,-0.300796002149582,0.747628331184387,-0.550443887710571,0.485175997018814,-0.679423153400421,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.633037269115448,0.653608679771423,0.414800643920898,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.0371899753808975,0.612780451774597,0.789377629756927,\n-0.24271634221077,0.841442763805389,0.482765853404999,-0.270709186792374,0.893246471881866,0.35892516374588,-0.0627354606986046,0.701922833919525,0.709484755992889,0.406247109174728,0.174616456031799,0.896923840045929,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.0627354606986046,0.701922833919525,0.709484755992889,0.279203683137894,0.224120020866394,0.933710634708405,0.592092573642731,-0.300796002149582,0.747628331184387,0.406247109174728,0.174616456031799,0.896923840045929,0.279203683137894,0.224120020866394,0.933710634708405,0.420396059751511,-0.116494543850422,0.899831175804138,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.599522888660431,0.463965177536011,-0.652156889438629,-0.685906887054443,0.655823826789856,-0.315320372581482,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.229133352637291,-0.201160058379173,-0.952382564544678,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.229133352637291,-0.201160058379173,-0.952382564544678,-0.409174174070358,-0.167213842272758,-0.897003948688507,\n-0.158167138695717,-0.488490730524063,-0.858114242553711,-0.0411282703280449,-0.362414002418518,-0.931109309196472,-0.737871766090393,0.512266218662262,0.439463973045349,-0.751098394393921,0.448982089757919,0.484010636806488,-0.896193027496338,0.243554174900055,0.370836079120636,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.563040912151337,0.733509361743927,0.380721718072891,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.743195831775665,0.547327280044556,0.384828329086304,0.293660908937454,0.577858746051788,0.761473953723907,0.235387146472931,0.430203825235367,0.871503055095673,0.305413067340851,0.121777974069119,0.944400906562805,0.117293141782284,0.336978107690811,0.934177756309509,0.54656720161438,-0.7532879114151,-0.365816354751587,0.558507144451141,-0.773075938224792,-0.30070486664772,0.657974064350128,-0.742551565170288,-0.125249087810516,0.742225170135498,-0.630128085613251,-0.228123426437378,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.449016630649567,0.427696466445923,-0.784512460231781,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.449016630649567,0.427696466445923,-0.784512460231781,0.792802751064301,-0.543330252170563,0.276144862174988,0.722802340984344,-0.617218017578125,0.310803234577179,0.71945708990097,-0.687020063400269,0.101906716823578,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.792802751064301,-0.543330252170563,0.276144862174988,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.779800176620483,-0.625844657421112,0.0151696130633354,\n0.744553029537201,-0.501156628131866,0.4410021007061,-0.482590168714523,0.598400712013245,0.639549314975739,-0.467934727668762,0.514274716377258,0.718720138072968,-0.397168695926666,0.623658359050751,0.673280954360962,-0.559439122676849,0.572440028190613,0.599449932575226,-0.485478460788727,0.644360303878784,0.590855658054352,-0.420263022184372,0.62258517742157,0.660126268863678,-0.482590168714523,0.598400712013245,0.639549314975739,-0.559439122676849,0.572440028190613,0.599449932575226,-0.665791451931,0.744200885295868,0.053728986531496,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.728628396987915,0.670947968959808,0.137584701180458,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.337419033050537,0.179084926843643,-0.924162864685059,0.143241554498672,-0.263150751590729,-0.954061627388,-0.238952934741974,-0.279697000980377,-0.929876923561096,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.337419033050537,0.179084926843643,-0.924162864685059,0.420848518610001,-0.797750890254974,-0.431833386421204,-0.238952934741974,-0.279697000980377,-0.929876923561096,0.143241554498672,-0.263150751590729,-0.954061627388,0.57789820432663,-0.655906856060028,-0.485612899065018,0.545369505882263,-0.785522282123566,-0.292449623346329,0.420848518610001,-0.797750890254974,-0.431833386421204,0.57789820432663,-0.655906856060028,-0.485612899065018,0.617175698280334,-0.749861061573029,-0.238332808017731,0.602230906486511,-0.791486024856567,-0.104248508810997,0.545369505882263,-0.785522282123566,-0.292449623346329,0.617175698280334,-0.749861061573029,-0.238332808017731,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.624863624572754,-0.775575757026672,0.0895971804857254,0.602230906486511,-0.791486024856567,-0.104248508810997,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.669889271259308,-0.735676348209381,0.100143387913704,\n-0.793548226356506,0.599173665046692,-0.106170132756233,-0.52191436290741,0.573753893375397,-0.631198763847351,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.405150681734085,0.0784264355897903,-0.910879909992218,-0.521965801715851,0.298950701951981,-0.798861801624298,-0.480240970849991,0.318685859441757,-0.817195177078247,0.558507144451141,-0.773075938224792,-0.30070486664772,0.606213510036469,-0.729506313800812,-0.316742390394211,0.668628990650177,-0.726897060871124,-0.156703382730484,0.657974064350128,-0.742551565170288,-0.125249087810516,0.606213510036469,-0.729506313800812,-0.316742390394211,0.603177964687347,-0.730402767658234,-0.320449888706207,0.64731752872467,-0.742053866386414,-0.174172759056091,0.668628990650177,-0.726897060871124,-0.156703382730484,0.480990260839462,-0.836049139499664,-0.263951063156128,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.64731752872467,-0.742053866386414,-0.174172759056091,0.603177964687347,-0.730402767658234,-0.320449888706207,0.445018202066422,-0.841427505016327,-0.306526601314545,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.480990260839462,-0.836049139499664,-0.263951063156128,-0.345012873411179,0.660347282886505,0.667013943195343,-0.328695803880692,0.662784039974213,0.672812342643738,-0.737871766090393,0.512266218662262,0.439463973045349,-0.676421940326691,0.591155827045441,0.439304113388062,-0.458523720502853,0.614238142967224,0.642236292362213,-0.402240663766861,0.592356264591217,0.698080539703369,-0.328695803880692,0.662784039974213,0.672812342643738,-0.345012873411179,0.660347282886505,0.667013943195343,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.869328856468201,-0.380869299173355,0.314969629049301,\n-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.523228526115417,0.410001486539841,0.747081458568573,-0.54696398973465,0.598231494426727,0.585618793964386,-0.541739642620087,0.290830105543137,0.788629233837128,-0.265586584806442,0.827619135379791,0.494479835033417,-0.251114159822464,0.744844555854797,0.618181467056274,-0.415858834981918,0.554817199707031,0.720582604408264,-0.265586584806442,0.827619135379791,0.494479835033417,0.0445509292185307,0.65805971622467,0.751646637916565,-0.130890280008316,0.562183797359467,0.816588640213013,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.677088737487793,-0.402109175920486,-0.616327106952667,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.776331782341003,-0.346262842416763,-0.526698231697083,0.135322481393814,0.847399234771729,0.513422191143036,0.267442584037781,0.554580211639404,0.787981748580933,-0.163037300109863,0.519588589668274,0.838717222213745,-0.244644120335579,0.685302138328552,0.685937523841858,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0573794208467007,0.242892846465111,-0.968354642391205,\n0.103162460029125,0.213912323117256,-0.971390247344971,0.0849071517586708,0.404431521892548,-0.910618424415588,0.124407894909382,0.762849271297455,0.634494781494141,-0.0757151022553444,0.839400827884674,0.53821325302124,-0.101806551218033,0.422118037939072,0.900806188583374,-0.130024403333664,0.107345074415207,0.985682845115662,-0.243838042020798,0.106035023927689,0.964001834392548,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.92103111743927,-0.215036183595657,-0.324747800827026,0.167783945798874,0.880431950092316,0.443495273590088,0.320210188627243,0.913715243339539,0.250179767608643,0.127348259091377,0.984222948551178,0.1228316873312,0.118423573672771,0.978543698787689,0.168606325984001,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.277610629796982,0.394662648439407,-0.875884532928467,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.803666055202484,-0.115168422460556,0.583829700946808,-0.797964632511139,-0.0603525713086128,0.599674940109253,0.0620061531662941,0.990111231803894,-0.125837221741676,0.0272185504436493,0.988011002540588,-0.151965260505676,0.00109092053025961,0.832261800765991,-0.554381728172302,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.498037964105606,0.826278984546661,-0.263099282979965,-0.630419492721558,0.671314060688019,-0.389754712581635,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0104440562427044,-0.319070518016815,-0.947673439979553,-0.0340137556195259,-0.196621879935265,-0.979889214038849,\n-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.0765343606472015,-0.228869631886482,-0.970443785190582,0.230162009596825,-0.0996426865458488,-0.968037605285645,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.218962535262108,0.084364540874958,-0.972079277038574,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.0474926419556141,-0.104372285306454,-0.993403673171997,-0.273301541805267,-0.178375348448753,-0.945245206356049,0.0198883153498173,-0.203020170331001,-0.978972554206848,-0.0261400658637285,-0.230357423424721,-0.972754895687103,-0.045579582452774,-0.167653381824493,-0.98479175567627,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.961413502693176,-0.0763644799590111,0.264296323060989,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.126853466033936,0.814248085021973,0.566487669944763,0.0917807519435883,0.740839779376984,0.665381610393524,-0.251114159822464,0.744844555854797,0.618181467056274,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.158792361617088,0.191556662321091,-0.968550980091095,-0.20303450524807,0.175852552056313,-0.963251233100891,-0.218962535262108,0.084364540874958,-0.972079277038574,0.230162009596825,-0.0996426865458488,-0.968037605285645,\n0.206769347190857,0.0198965240269899,-0.978187382221222,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.658022820949554,0.640722334384918,0.395576566457748,-0.559998273849487,0.512845575809479,0.65068531036377,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.285846680402756,0.740470588207245,0.608272194862366,-0.431082636117935,0.669595658779144,0.604821860790253,-0.233475670218468,0.295215666294098,0.926464676856995,0.0469380915164948,0.75044322013855,0.659266114234924,0.182602807879448,0.369611233472824,0.911067366600037,0.128257870674133,0.488565057516098,0.863049328327179,0.182602807879448,0.369611233472824,0.911067366600037,0.242353484034538,0.171934008598328,0.954831659793854,0.227748140692711,0.261638969182968,0.937910318374634,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.00375068746507168,0.864742159843445,-0.502202033996582,0.00345755694434047,0.996382415294647,-0.0849123671650887,0.0620061531662941,0.990111231803894,-0.125837221741676,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.929829955101013,0.272868812084198,0.246898397803307,-0.960404455661774,0.118234008550644,0.252277553081512,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.873635351657867,0.199546694755554,0.44378200173378,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.915170788764954,0.197068557143211,0.351605415344238,\n-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.929829955101013,0.272868812084198,0.246898397803307,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.915170788764954,0.197068557143211,0.351605415344238,-0.915170788764954,0.197068557143211,0.351605415344238,-0.929829955101013,0.272868812084198,0.246898397803307,-0.823818027973175,0.437958568334579,0.359883517026901,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.938947200775146,-0.340274900197983,-0.0509038865566254,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.333576679229736,0.525787591934204,0.782479405403137,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.516382813453674,0.465612560510635,0.718716740608215,0.0822462737560272,-0.665926337242126,0.741469919681549,0.198109984397888,-0.381663233041763,0.902820944786072,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.935231983661652,0.339124768972397,0.10166396945715,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.484471023082733,-0.813864707946777,-0.320799201726913,0.707368016242981,-0.349391609430313,-0.614455819129944,0.165526703000069,0.46548119187355,0.869441270828247,0.198109984397888,-0.381663233041763,0.902820944786072,-0.154075160622597,0.221347615122795,0.962946593761444,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.0524283163249493,-0.77048397064209,0.635299742221832,0.198109984397888,-0.381663233041763,0.902820944786072,0.493679195642471,-0.48221343755722,0.723706424236298,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.869328856468201,-0.380869299173355,0.314969629049301,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.275725185871124,-0.367643237113953,0.888152062892914,\n-0.304660886526108,0.0813428908586502,0.948981106281281,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.397168695926666,0.623658359050751,0.673280954360962,-0.524893045425415,0.430009782314301,0.734560310840607,-0.559439122676849,0.572440028190613,0.599449932575226,-0.175627052783966,-0.391306757926941,-0.903346061706543,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.238952934741974,-0.279697000980377,-0.929876923561096,0.668083667755127,-0.706556260585785,0.233329057693481,0.744553029537201,-0.501156628131866,0.4410021007061,0.779800176620483,-0.625844657421112,0.0151696130633354,0.771257698535919,-0.18939545750618,0.607693135738373,0.744553029537201,-0.501156628131866,0.4410021007061,0.509250044822693,-0.170650407671928,0.843529999256134,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.349483400583267,-0.0788575559854507,-0.933618187904358,-0.458829164505005,0.0783318057656288,-0.885064899921417,0.420396059751511,-0.116494543850422,0.899831175804138,0.279203683137894,0.224120020866394,0.933710634708405,0.174675241112709,0.124651238322258,0.976703941822052,-0.523556113243103,0.279740929603577,0.804757118225098,-0.425698101520538,-0.165044084191322,0.889686226844788,-0.331690967082977,-0.041898600757122,0.94245719909668,0.518121659755707,-0.845738351345062,-0.127579480409622,0.552962005138397,-0.830714046955109,0.064398355782032,0.45007735490799,-0.890308558940887,-0.0691446214914322,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.270709186792374,0.893246471881866,0.35892516374588,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.692083477973938,-0.68414306640625,-0.23014922440052,0.779800176620483,-0.625844657421112,0.0151696130633354,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.537661731243134,0.416983306407928,-0.732833385467529,\n-0.628251135349274,0.515080809593201,-0.583088576793671,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.550443887710571,0.485175997018814,-0.679423153400421,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.309054106473923,-0.602658152580261,-0.735723257064819,0.233110591769218,-0.47022944688797,-0.851201355457306,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.154075160622597,0.221347615122795,0.962946593761444,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.524893045425415,0.430009782314301,0.734560310840607,0.311660826206207,-0.127051904797554,-0.941660940647125,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.524893045425415,0.430009782314301,0.734560310840607,-0.397168695926666,0.623658359050751,0.673280954360962,-0.154075160622597,0.221347615122795,0.962946593761444,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.341495484113693,0.750590026378632,0.565681397914886,-0.653796315193176,0.736424326896667,0.173866480588913,-0.396970868110657,0.459579348564148,0.794481575489044,-0.420263022184372,0.62258517742157,0.660126268863678,-0.175726309418678,0.623865723609924,0.761519432067871,-0.523556113243103,0.279740929603577,0.804757118225098,-0.357071965932846,0.176186710596085,0.917310118675232,-0.28887614607811,0.124025739729404,0.949298799037933,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.537661731243134,0.416983306407928,-0.732833385467529,\n-0.733746409416199,0.676492989063263,-0.0630356669425964,-0.751343011856079,0.620160222053528,0.225576862692833,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.62176638841629,0.776679754257202,-0.100871689617634,0.443388015031815,-0.641468644142151,0.626039206981659,0.477273166179657,-0.844216048717499,0.243945851922035,0.158797964453697,-0.752626359462738,0.639012277126312,-0.217019572854042,0.53657478094101,0.815469205379486,0.279203683137894,0.224120020866394,0.933710634708405,-0.0627354606986046,0.701922833919525,0.709484755992889,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.207436442375183,0.874366402626038,0.438695192337036,-0.341495484113693,0.750590026378632,0.565681397914886,0.443388015031815,-0.641468644142151,0.626039206981659,0.744553029537201,-0.501156628131866,0.4410021007061,0.668083667755127,-0.706556260585785,0.233329057693481,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.751343011856079,0.620160222053528,0.225576862692833,-0.599866449832916,0.551924109458923,0.57925820350647,-0.633037269115448,0.653608679771423,0.414800643920898,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.34545773267746,0.720738053321838,0.600995540618896,\n-0.24271634221077,0.841442763805389,0.482765853404999,0.406247109174728,0.174616456031799,0.896923840045929,0.323112219572067,0.289230555295944,0.901079475879669,-0.0371899753808975,0.612780451774597,0.789377629756927,0.70347386598587,-0.284948945045471,0.651098012924194,0.406247109174728,0.174616456031799,0.896923840045929,0.592092573642731,-0.300796002149582,0.747628331184387,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.550443887710571,0.485175997018814,-0.679423153400421,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.270709186792374,0.893246471881866,0.35892516374588,-0.24271634221077,0.841442763805389,0.482765853404999,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.229133352637291,-0.201160058379173,-0.952382564544678,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.535080850124359,0.838914573192596,-0.0995529592037201,\n-0.793548226356506,0.599173665046692,-0.106170132756233,-0.676421940326691,0.591155827045441,0.439304113388062,-0.959632217884064,0.26953399181366,0.0803584158420563,0.742225170135498,-0.630128085613251,-0.228123426437378,0.657974064350128,-0.742551565170288,-0.125249087810516,0.692083477973938,-0.68414306640625,-0.23014922440052,-0.175726309418678,0.623865723609924,0.761519432067871,0.293660908937454,0.577858746051788,0.761473953723907,0.117293141782284,0.336978107690811,0.934177756309509,0.323112219572067,0.289230555295944,0.901079475879669,0.305413067340851,0.121777974069119,0.944400906562805,0.235387146472931,0.430203825235367,0.871503055095673,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.676622211933136,0.280620872974396,-0.680760145187378,0.477273166179657,-0.844216048717499,0.243945851922035,0.443388015031815,-0.641468644142151,0.626039206981659,0.668083667755127,-0.706556260585785,0.233329057693481,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.233110591769218,-0.47022944688797,-0.851201355457306,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.676421940326691,0.591155827045441,0.439304113388062,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.676421940326691,0.591155827045441,0.439304113388062,-0.737871766090393,0.512266218662262,0.439463973045349,-0.458523720502853,0.614238142967224,0.642236292362213,-0.341495484113693,0.750590026378632,0.565681397914886,-0.402240663766861,0.592356264591217,0.698080539703369,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.407216638326645,-0.806287288665771,0.429040133953094,0.493679195642471,-0.48221343755722,0.723706424236298,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.805109977722168,-0.249997183680534,-0.537865459918976,\n-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.251114159822464,0.744844555854797,0.618181467056274,-0.291274279356003,0.469944089651108,0.833253800868988,-0.408989250659943,0.558586657047272,0.721601545810699,-0.415858834981918,0.554817199707031,0.720582604408264,0.624863624572754,-0.775575757026672,0.0895971804857254,0.631202757358551,-0.748089611530304,0.204804703593254,0.564540684223175,-0.811680018901825,0.149898007512093,0.552962005138397,-0.830714046955109,0.064398355782032,0.470721006393433,-0.417188495397568,0.777415871620178,0.463100373744965,-0.535968005657196,0.705886960029602,0.564540684223175,-0.811680018901825,0.149898007512093,0.631202757358551,-0.748089611530304,0.204804703593254,-0.0139366090297699,0.110060036182404,0.993827223777771,0.463100373744965,-0.535968005657196,0.705886960029602,0.470721006393433,-0.417188495397568,0.777415871620178,0.0628950372338295,0.12239508330822,0.990486621856689,-0.0139366090297699,0.110060036182404,0.993827223777771,0.0628950372338295,0.12239508330822,0.990486621856689,-0.467934727668762,0.514274716377258,0.718720138072968,-0.39349702000618,0.476447492837906,0.786230206489563,-0.482590168714523,0.598400712013245,0.639549314975739,-0.39349702000618,0.476447492837906,0.786230206489563,-0.467934727668762,0.514274716377258,0.718720138072968,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.721357464790344,0.650649428367615,0.237273663282394,-0.658022820949554,0.640722334384918,0.395576566457748,-0.880525827407837,0.119760677218437,0.458619266748428,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.880525827407837,0.119760677218437,0.458619266748428,-0.961413502693176,-0.0763644799590111,0.264296323060989,\n-0.969365537166595,0.00907830987125635,0.245454847812653,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.943021297454834,-0.0914337635040283,0.31992295384407,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.961413502693176,-0.0763644799590111,0.264296323060989,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.943021297454834,-0.0914337635040283,0.31992295384407,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.959401249885559,0.00467001460492611,0.282005965709686,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.961413502693176,-0.0763644799590111,0.264296323060989,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.959401249885559,0.00467001460492611,0.282005965709686,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.0572102777659893,-0.363048881292343,-0.930012106895447,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0572102777659893,-0.363048881292343,-0.930012106895447,0.0357786677777767,-0.332784980535507,-0.942323744297028,\n-0.0340137556195259,-0.196621879935265,-0.979889214038849,0.079964205622673,0.0645997598767281,-0.994702279567719,-0.0752750188112259,0.0473053678870201,-0.996040105819702,0.0261680763214827,0.194867521524429,-0.980480432510376,0.0810841843485832,0.166241332888603,-0.982745766639709,0.213752746582031,0.00495887640863657,0.976875185966492,0.206305459141731,0.0686478838324547,0.976076602935791,0.412932306528091,0.0920658186078072,0.906096458435059,0.443167895078659,0.0182685311883688,0.896252453327179,0.0116670094430447,0.00425092596560717,0.999922931194305,0.0177117679268122,0.0767069831490517,0.996896326541901,-0.0938338041305542,0.0678655132651329,0.993272125720978,-0.0935027524828911,0.0115412008017302,0.995552122592926,0.667598783969879,0.599002242088318,-0.442163020372391,0.751961290836334,-0.373251110315323,-0.543357908725739,0.901673018932343,-0.243753165006638,-0.357169687747955,0.694567322731018,0.687739253044128,-0.211165577173233,0.428307920694351,0.88731974363327,-0.170926719903946,0.587996542453766,-0.370855212211609,-0.718836843967438,0.751961290836334,-0.373251110315323,-0.543357908725739,0.667598783969879,0.599002242088318,-0.442163020372391,0.550657391548157,0.552472710609436,-0.625739872455597,0.957330107688904,-0.260764896869659,0.124582171440125,0.898464798927307,-0.377257645130157,-0.224583357572556,0.720091462135315,-0.402850449085236,-0.56496000289917,0.797747611999512,-0.370718449354172,-0.475569725036621,0.412932306528091,0.0920658186078072,0.906096458435059,0.669797122478485,0.132066950201988,0.730705201625824,0.740497648715973,0.0785514339804649,0.6674525141716,0.443167895078659,0.0182685311883688,0.896252453327179,0.443167895078659,0.0182685311883688,0.896252453327179,0.740497648715973,0.0785514339804649,0.6674525141716,0.789331138134003,-0.10905522108078,0.604204714298248,0.436154782772064,-0.0844674557447433,0.895898580551147,0.963335692882538,-0.129456236958504,-0.235001027584076,0.964883267879486,-0.257389277219772,0.0524501986801624,0.991177558898926,-0.0885100439190865,0.0986559465527534,\n0.999219238758087,-0.0126819871366024,0.0374175347387791,0.641741633415222,-0.441758394241333,-0.626910865306854,0.631867706775665,-0.394274353981018,-0.66730123758316,0.797747611999512,-0.370718449354172,-0.475569725036621,0.720091462135315,-0.402850449085236,-0.56496000289917,0.340316504240036,-0.448403626680374,-0.826510012149811,-0.000479655718663707,-0.389120310544968,-0.921186804771423,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.316583722829819,-0.383378833532333,-0.867637872695923,0.669797122478485,0.132066950201988,0.730705201625824,0.412932306528091,0.0920658186078072,0.906096458435059,0.291106730699539,0.735121071338654,0.612253129482269,0.562915802001953,0.509836494922638,0.650532484054565,0.889242053031921,-0.13137923181057,0.438164442777634,0.88209742307663,0.116333372890949,0.456476300954819,0.669797122478485,0.132066950201988,0.730705201625824,0.562915802001953,0.509836494922638,0.650532484054565,0.999219238758087,-0.0126819871366024,0.0374175347387791,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.911918580532074,-0.233281582593918,-0.33761540055275,0.963335692882538,-0.129456236958504,-0.235001027584076,-0.0114694014191628,0.852027952671051,0.523370683193207,0.377356678247452,0.665678739547729,0.643796324729919,0.306847393512726,0.504767894744873,0.806879222393036,-0.123493202030659,0.566911935806274,0.814469277858734,0.306847393512726,0.504767894744873,0.806879222393036,0.543150007724762,0.5245680809021,0.65560382604599,0.381191462278366,0.807218015193939,0.450657457113266,0.0985177978873253,0.656356811523438,0.747990608215332,-0.0114694014191628,0.852027952671051,0.523370683193207,0.200062945485115,0.83070033788681,0.519530355930328,0.296454012393951,0.853960573673248,0.42762878537178,0.377356678247452,0.665678739547729,0.643796324729919,0.613006412982941,0.632095158100128,-0.474003076553345,0.367568165063858,0.757281005382538,-0.539832472801209,0.438032209873199,0.893748044967651,0.0966554135084152,0.600959360599518,0.790454268455505,0.118447989225388,0.377356678247452,0.665678739547729,0.643796324729919,\n0.296454012393951,0.853960573673248,0.42762878537178,0.307623445987701,0.872403740882874,0.379841536283493,0.536732196807861,0.528757095336914,0.657521426677704,0.198797062039375,0.642942130565643,0.739665627479553,0.167321741580963,0.36504065990448,0.915832281112671,0.345328092575073,0.282600909471512,0.894921898841858,0.349903911352158,0.592323482036591,0.725754916667938,0.377356678247452,0.665678739547729,0.643796324729919,0.536732196807861,0.528757095336914,0.657521426677704,0.543150007724762,0.5245680809021,0.65560382604599,0.306847393512726,0.504767894744873,0.806879222393036,0.367568165063858,0.757281005382538,-0.539832472801209,0.237173900008202,0.452350407838821,-0.85972535610199,0.0132267400622368,0.464425086975098,-0.885513663291931,0.148073747754097,0.745845675468445,-0.649452328681946,0.340316504240036,-0.448403626680374,-0.826510012149811,0.365317970514297,-0.409484475851059,-0.835981607437134,0.0686725899577141,-0.344746232032776,-0.936180591583252,-0.000479655718663707,-0.389120310544968,-0.921186804771423,-0.0545569509267807,0.00619251187890768,-0.99849146604538,-0.0605181753635406,0.0956659987568855,-0.993572115898132,-0.228578105568886,0.0637626796960831,-0.971435189247131,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.219784289598465,0.21984101831913,-0.950455009937286,0.0261680763214827,0.194867521524429,-0.980480432510376,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.228578105568886,0.0637626796960831,-0.971435189247131,0.167321741580963,0.36504065990448,0.915832281112671,0.198797062039375,0.642942130565643,0.739665627479553,-0.103646658360958,0.632546961307526,0.767555713653564,-0.169371664524078,0.433557659387589,0.88506555557251,-0.0510855726897717,0.371638625860214,-0.926970899105072,-0.163042917847633,0.482063621282578,-0.86083197593689,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0743019878864288,-0.318207800388336,-0.945104777812958,-0.0104440562427044,-0.319070518016815,-0.947673439979553,\n-0.0222764182835817,-0.332656174898148,-0.942785024642944,-0.0440147742629051,-0.354229003190994,-0.934122323989868,0.378357648849487,0.724991083145142,0.575528800487518,0.250419557094574,0.807709574699402,0.533755779266357,0.380377441644669,0.814519464969635,0.438030809164047,0.381191462278366,0.807218015193939,0.450657457113266,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.044108722358942,-0.104566030204296,-0.993539333343506,-0.0545569509267807,0.00619251187890768,-0.99849146604538,0.025994973257184,0.100541830062866,0.99459320306778,0.0116106020286679,0.109513640403748,0.993917465209961,-0.0463824793696404,-0.00737064564600587,0.998896598815918,0.0350599996745586,0.0215551313012838,0.999152719974518,0.922331035137177,0.0571805983781815,0.382146298885345,0.88209742307663,0.116333372890949,0.456476300954819,0.999219238758087,-0.0126819871366024,0.0374175347387791,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.922331035137177,0.0571805983781815,0.382146298885345,0.964077115058899,-0.108696304261684,0.242364108562469,0.789331138134003,-0.10905522108078,0.604204714298248,0.740497648715973,0.0785514339804649,0.6674525141716,0.88209742307663,0.116333372890949,0.456476300954819,0.922331035137177,0.0571805983781815,0.382146298885345,0.740497648715973,0.0785514339804649,0.6674525141716,0.669797122478485,0.132066950201988,0.730705201625824,0.380377441644669,0.814519464969635,0.438030809164047,0.349903911352158,0.592323482036591,0.725754916667938,0.645817458629608,0.37744864821434,0.66366583108902,0.659283638000488,0.56208461523056,0.499405652284622,0.349903911352158,0.592323482036591,0.725754916667938,0.345328092575073,0.282600909471512,0.894921898841858,0.634893178939819,0.130881890654564,0.761433184146881,0.645817458629608,0.37744864821434,0.66366583108902,0.307623445987701,0.872403740882874,0.379841536283493,0.296454012393951,0.853960573673248,0.42762878537178,0.273056983947754,0.564899086952209,0.778671264648438,0.31501841545105,0.615055680274963,0.722820818424225,\n0.200062945485115,0.83070033788681,0.519530355930328,0.248548656702042,0.411066323518753,0.877067863941193,0.273056983947754,0.564899086952209,0.778671264648438,0.296454012393951,0.853960573673248,0.42762878537178,0.248548656702042,0.411066323518753,0.877067863941193,0.374015629291534,0.57144570350647,0.730453372001648,0.299544423818588,0.682939231395721,0.666233539581299,0.273056983947754,0.564899086952209,0.778671264648438,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.163042917847633,0.482063621282578,-0.86083197593689,0.148073747754097,0.745845675468445,-0.649452328681946,0.0132267400622368,0.464425086975098,-0.885513663291931,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.044108722358942,-0.104566030204296,-0.993539333343506,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.0440147742629051,-0.354229003190994,-0.934122323989868,-0.0222764182835817,-0.332656174898148,-0.942785024642944,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.109398990869522,-0.127084732055664,-0.985840439796448,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.228578105568886,0.0637626796960831,-0.971435189247131,-0.219784289598465,0.21984101831913,-0.950455009937286,-0.228578105568886,0.0637626796960831,-0.971435189247131,-0.0605181753635406,0.0956659987568855,-0.993572115898132,-0.0573794208467007,0.242892846465111,-0.968354642391205,0.200062945485115,0.83070033788681,0.519530355930328,-0.0114694014191628,0.852027952671051,0.523370683193207,-0.22732575237751,0.908823013305664,0.349805355072021,0.0103344274684787,0.766447365283966,0.642223954200745,0.374015629291534,0.57144570350647,0.730453372001648,0.248548656702042,0.411066323518753,0.877067863941193,0.0103344274684787,0.766447365283966,0.642223954200745,0.120974369347095,0.820596933364868,0.558556973934174,-0.0114694014191628,0.852027952671051,0.523370683193207,\n-0.123493202030659,0.566911935806274,0.814469277858734,-0.154036402702332,0.732537567615509,0.663069784641266,-0.22732575237751,0.908823013305664,0.349805355072021,0.274746268987656,0.549388289451599,0.789105176925659,-0.0824126973748207,0.271421998739243,0.958925545215607,-0.14302770793438,0.47186079621315,0.869994521141052,0.0985177978873253,0.656356811523438,0.747990608215332,0.0201202612370253,0.491976112127304,0.870376169681549,-0.14302770793438,0.47186079621315,0.869994521141052,-0.0824126973748207,0.271421998739243,0.958925545215607,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.0509213022887707,0.887329638004303,0.458315491676331,-0.0329985395073891,0.983319759368896,0.178866878151894,-0.0476368367671967,0.9897421002388,0.134689643979073,-0.22561714053154,0.930931448936462,0.287164628505707,-0.0476368367671967,0.9897421002388,0.134689643979073,0.4521364569664,0.881967127323151,0.133066028356552,0.120974369347095,0.820596933364868,0.558556973934174,-0.22561714053154,0.930931448936462,0.287164628505707,0.120974369347095,0.820596933364868,0.558556973934174,0.0103344274684787,0.766447365283966,0.642223954200745,-0.22732575237751,0.908823013305664,0.349805355072021,-0.22561714053154,0.930931448936462,0.287164628505707,-0.154036402702332,0.732537567615509,0.663069784641266,-0.0509213022887707,0.887329638004303,0.458315491676331,-0.22561714053154,0.930931448936462,0.287164628505707,-0.22732575237751,0.908823013305664,0.349805355072021,0.834282159805298,-0.0577300190925598,0.548307001590729,0.659731268882751,0.252948880195618,0.70765209197998,0.645817458629608,0.37744864821434,0.66366583108902,0.634893178939819,0.130881890654564,0.761433184146881,0.954777777194977,-0.0263348873704672,0.296151697635651,0.967678904533386,-0.0477387942373753,0.247625812888145,0.890053927898407,-0.0586380586028099,0.452068090438843,0.888165593147278,-0.00891786906868219,0.459437042474747,0.0350599996745586,0.0215551313012838,0.999152719974518,-0.0463824793696404,-0.00737064564600587,0.998896598815918,-0.152715757489204,0.0582166723906994,0.986553966999054,\n0.0415807291865349,0.144025474786758,0.988700032234192,0.295928508043289,-0.207367569208145,0.932429611682892,0.307560920715332,-0.091851145029068,0.947084844112396,0.534165501594543,-0.113752603530884,0.837691783905029,0.550590097904205,-0.295528441667557,0.780713438987732,-0.0463824793696404,-0.00737064564600587,0.998896598815918,0.171966776251793,-0.0650009214878082,0.982955873012543,0.135682836174965,-0.100586615502834,0.985633075237274,-0.152715757489204,0.0582166723906994,0.986553966999054,0.0415807291865349,0.144025474786758,0.988700032234192,-0.152715757489204,0.0582166723906994,0.986553966999054,-0.169371664524078,0.433557659387589,0.88506555557251,0.051253791898489,0.460094302892685,0.886389493942261,-0.152715757489204,0.0582166723906994,0.986553966999054,0.135682836174965,-0.100586615502834,0.985633075237274,0.167321741580963,0.36504065990448,0.915832281112671,-0.169371664524078,0.433557659387589,0.88506555557251,0.307560920715332,-0.091851145029068,0.947084844112396,0.295928508043289,-0.207367569208145,0.932429611682892,0.135682836174965,-0.100586615502834,0.985633075237274,0.171966776251793,-0.0650009214878082,0.982955873012543,0.834282159805298,-0.0577300190925598,0.548307001590729,0.774369955062866,-0.461647033691406,0.432704478502274,0.801247537136078,-0.596114218235016,0.0514810234308243,0.858235716819763,-0.482136696577072,0.175999104976654,0.964077115058899,-0.108696304261684,0.242364108562469,0.967678904533386,-0.0477387942373753,0.247625812888145,0.831483364105225,0.0368483774363995,0.554326236248016,0.789331138134003,-0.10905522108078,0.604204714298248,0.0116106020286679,0.109513640403748,0.993917465209961,0.169032081961632,0.119583055377007,0.978329241275787,0.171966776251793,-0.0650009214878082,0.982955873012543,-0.0463824793696404,-0.00737064564600587,0.998896598815918,0.888511061668396,-0.437404543161392,0.138655453920364,0.727367699146271,-0.668511748313904,0.15501070022583,0.858235716819763,-0.482136696577072,0.175999104976654,0.801247537136078,-0.596114218235016,0.0514810234308243,0.135682836174965,-0.100586615502834,0.985633075237274,\n0.295928508043289,-0.207367569208145,0.932429611682892,0.345328092575073,0.282600909471512,0.894921898841858,0.167321741580963,0.36504065990448,0.915832281112671,0.801247537136078,-0.596114218235016,0.0514810234308243,0.774369955062866,-0.461647033691406,0.432704478502274,0.859270870685577,-0.205668747425079,0.468352407217026,0.888511061668396,-0.437404543161392,0.138655453920364,0.486142605543137,0.105355285108089,0.867505431175232,0.2811399102211,0.126565098762512,0.951284229755402,0.19136768579483,-0.0293898787349463,0.981078326702118,0.436154782772064,-0.0844674557447433,0.895898580551147,0.486142605543137,0.105355285108089,0.867505431175232,0.436154782772064,-0.0844674557447433,0.895898580551147,0.789331138134003,-0.10905522108078,0.604204714298248,0.831483364105225,0.0368483774363995,0.554326236248016,-0.123493202030659,0.566911935806274,0.814469277858734,0.306847393512726,0.504767894744873,0.806879222393036,0.0985177978873253,0.656356811523438,0.747990608215332,-0.14302770793438,0.47186079621315,0.869994521141052,0.0201202612370253,0.491976112127304,0.870376169681549,0.0895038321614265,0.749099910259247,0.65638279914856,-0.0509213022887707,0.887329638004303,0.458315491676331,-0.154036402702332,0.732537567615509,0.663069784641266,-0.14302770793438,0.47186079621315,0.869994521141052,0.0201202612370253,0.491976112127304,0.870376169681549,-0.154036402702332,0.732537567615509,0.663069784641266,-0.123493202030659,0.566911935806274,0.814469277858734,0.105207018554211,0.966200411319733,0.235347032546997,-0.0329985395073891,0.983319759368896,0.178866878151894,-0.0509213022887707,0.887329638004303,0.458315491676331,0.0895038321614265,0.749099910259247,0.65638279914856,0.88209742307663,0.116333372890949,0.456476300954819,0.889242053031921,-0.13137923181057,0.438164442777634,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.999219238758087,-0.0126819871366024,0.0374175347387791,0.380377441644669,0.814519464969635,0.438030809164047,0.250419557094574,0.807709574699402,0.533755779266357,0.198797062039375,0.642942130565643,0.739665627479553,\n0.349903911352158,0.592323482036591,0.725754916667938,0.00678820535540581,0.00935708172619343,0.999933183193207,0.00949578825384378,0.0594539344310761,0.998185873031616,-0.0938338041305542,0.0678655132651329,0.993272125720978,0.0177117679268122,0.0767069831490517,0.996896326541901,0.291106730699539,0.735121071338654,0.612253129482269,0.412932306528091,0.0920658186078072,0.906096458435059,0.206305459141731,0.0686478838324547,0.976076602935791,0.233477383852005,0.295218259096146,0.926463425159454,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.316321402788162,0.603275775909424,-0.732119560241699,0.508885145187378,0.79451996088028,-0.331321537494659,0.0145869944244623,0.988409578800201,-0.151108130812645,-0.0743019878864288,-0.318207800388336,-0.945104777812958,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.0104440562427044,-0.319070518016815,-0.947673439979553,0.436154782772064,-0.0844674557447433,0.895898580551147,0.19136768579483,-0.0293898787349463,0.981078326702118,0.213752746582031,0.00495887640863657,0.976875185966492,0.443167895078659,0.0182685311883688,0.896252453327179,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.109398990869522,-0.127084732055664,-0.985840439796448,0.381191462278366,0.807218015193939,0.450657457113266,0.380377441644669,0.814519464969635,0.438030809164047,0.659283638000488,0.56208461523056,0.499405652284622,0.274746268987656,0.549388289451599,0.789105176925659,-0.0161609761416912,0.992576837539673,-0.120540797710419,0.0145869944244623,0.988409578800201,-0.151108130812645,-0.0476368367671967,0.9897421002388,0.134689643979073,-0.0329985395073891,0.983319759368896,0.178866878151894,0.4521364569664,0.881967127323151,0.133066028356552,0.600959360599518,0.790454268455505,0.118447989225388,0.374015629291534,0.57144570350647,0.730453372001648,0.120974369347095,0.820596933364868,0.558556973934174,0.367568165063858,0.757281005382538,-0.539832472801209,\n0.613006412982941,0.632095158100128,-0.474003076553345,0.316321402788162,0.603275775909424,-0.732119560241699,0.237173900008202,0.452350407838821,-0.85972535610199,0.508885145187378,0.79451996088028,-0.331321537494659,0.4521364569664,0.881967127323151,0.133066028356552,-0.0476368367671967,0.9897421002388,0.134689643979073,0.0145869944244623,0.988409578800201,-0.151108130812645,0.600959360599518,0.790454268455505,0.118447989225388,0.438032209873199,0.893748044967651,0.0966554135084152,0.299544423818588,0.682939231395721,0.666233539581299,0.374015629291534,0.57144570350647,0.730453372001648,0.859270870685577,-0.205668747425079,0.468352407217026,0.774369955062866,-0.461647033691406,0.432704478502274,0.550590097904205,-0.295528441667557,0.780713438987732,0.534165501594543,-0.113752603530884,0.837691783905029,0.550590097904205,-0.295528441667557,0.780713438987732,0.634893178939819,0.130881890654564,0.761433184146881,0.345328092575073,0.282600909471512,0.894921898841858,0.295928508043289,-0.207367569208145,0.932429611682892,0.774369955062866,-0.461647033691406,0.432704478502274,0.834282159805298,-0.0577300190925598,0.548307001590729,0.634893178939819,0.130881890654564,0.761433184146881,0.550590097904205,-0.295528441667557,0.780713438987732,0.0704744011163712,0.82375580072403,-0.562547504901886,0.0859579145908356,0.475804299116135,-0.875340759754181,0.0293854102492332,0.448770761489868,-0.893163621425629,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.0261680763214827,0.194867521524429,-0.980480432510376,-0.219784289598465,0.21984101831913,-0.950455009937286,-0.181298598647118,0.412835657596588,-0.892579138278961,0.0132267400622368,0.464425086975098,-0.885513663291931,0.181251630187035,0.380190223455429,-0.906974792480469,0.0261680763214827,0.194867521524429,-0.980480432510376,0.0132267400622368,0.464425086975098,-0.885513663291931,0.237173900008202,0.452350407838821,-0.85972535610199,0.85130912065506,-0.28415909409523,-0.441051483154297,0.797747611999512,-0.370718449354172,-0.475569725036621,0.631867706775665,-0.394274353981018,-0.66730123758316,\n0.544504523277283,-0.49831086397171,-0.674685955047607,0.797747611999512,-0.370718449354172,-0.475569725036621,0.85130912065506,-0.28415909409523,-0.441051483154297,0.934587121009827,-0.0746875330805779,0.347805470228195,0.957330107688904,-0.260764896869659,0.124582171440125,0.720091462135315,-0.402850449085236,-0.56496000289917,0.898464798927307,-0.377257645130157,-0.224583357572556,0.778241097927094,-0.324259251356125,-0.53777015209198,0.599293649196625,-0.39963087439537,-0.693644165992737,0.508885145187378,0.79451996088028,-0.331321537494659,0.613006412982941,0.632095158100128,-0.474003076553345,0.600959360599518,0.790454268455505,0.118447989225388,0.4521364569664,0.881967127323151,0.133066028356552,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.219784289598465,0.21984101831913,-0.950455009937286,-0.0573794208467007,0.242892846465111,-0.968354642391205,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.109398990869522,-0.127084732055664,-0.985840439796448,0.111387610435486,-0.211319342255592,-0.9710493683815,0.223528057336807,-0.361992210149765,-0.904984474182129,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.415907889604568,-0.581008851528168,-0.699606537818909,0.394706159830093,-0.349102348089218,-0.84990268945694,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.427927106618881,-0.320324927568436,-0.845145165920258,0.339142799377441,0.423890322446823,-0.839820921421051,0.205058068037033,-0.244612783193588,-0.947689712047577,-0.000479655718663707,-0.389120310544968,-0.921186804771423,-0.0440147742629051,-0.354229003190994,-0.934122323989868,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.03669124096632,-0.316752940416336,-0.947798132896423,-0.0440147742629051,-0.354229003190994,-0.934122323989868,-0.000479655718663707,-0.389120310544968,-0.921186804771423,0.0686725899577141,-0.344746232032776,-0.936180591583252,-0.0743019878864288,-0.318207800388336,-0.945104777812958,0.079964205622673,0.0645997598767281,-0.994702279567719,\n-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.394706159830093,-0.349102348089218,-0.84990268945694,0.111387610435486,-0.211319342255592,-0.9710493683815,0.111387610435486,-0.211319342255592,-0.9710493683815,0.394706159830093,-0.349102348089218,-0.84990268945694,0.544504523277283,-0.49831086397171,-0.674685955047607,0.223528057336807,-0.361992210149765,-0.904984474182129,0.641741633415222,-0.441758394241333,-0.626910865306854,0.340316504240036,-0.448403626680374,-0.826510012149811,0.316583722829819,-0.383378833532333,-0.867637872695923,0.631867706775665,-0.394274353981018,-0.66730123758316,0.641741633415222,-0.441758394241333,-0.626910865306854,0.599293649196625,-0.39963087439537,-0.693644165992737,0.365317970514297,-0.409484475851059,-0.835981607437134,0.340316504240036,-0.448403626680374,-0.826510012149811,0.631867706775665,-0.394274353981018,-0.66730123758316,0.316583722829819,-0.383378833532333,-0.867637872695923,0.223528057336807,-0.361992210149765,-0.904984474182129,0.544504523277283,-0.49831086397171,-0.674685955047607,-0.0851698592305183,-0.236632868647575,-0.967858970165253,0.223528057336807,-0.361992210149765,-0.904984474182129,0.316583722829819,-0.383378833532333,-0.867637872695923,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.19136768579483,-0.0293898787349463,0.981078326702118,0.169032081961632,0.119583055377007,0.978329241275787,0.0116106020286679,0.109513640403748,0.993917465209961,-0.0284342020750046,0.0239462200552225,0.999308824539185,-0.0938338041305542,0.0678655132651329,0.993272125720978,0.206305459141731,0.0686478838324547,0.976076602935791,0.213752746582031,0.00495887640863657,0.976875185966492,-0.0935027524828911,0.0115412008017302,0.995552122592926,0.233477383852005,0.295218259096146,0.926463425159454,0.206305459141731,0.0686478838324547,0.976076602935791,-0.0938338041305542,0.0678655132651329,0.993272125720978,0.00949578825384378,0.0594539344310761,0.998185873031616,0.0116670094430447,0.00425092596560717,0.999922931194305,-0.0935027524828911,0.0115412008017302,0.995552122592926,\n-0.0284342020750046,0.0239462200552225,0.999308824539185,0.0105779552832246,0.0432977452874184,0.99900621175766,-0.0935027524828911,0.0115412008017302,0.995552122592926,0.213752746582031,0.00495887640863657,0.976875185966492,0.19136768579483,-0.0293898787349463,0.981078326702118,-0.0284342020750046,0.0239462200552225,0.999308824539185,0.890053927898407,-0.0586380586028099,0.452068090438843,0.929404556751251,-0.130073204636574,0.345381230115891,0.957330107688904,-0.260764896869659,0.124582171440125,0.934587121009827,-0.0746875330805779,0.347805470228195,0.534165501594543,-0.113752603530884,0.837691783905029,0.486142605543137,0.105355285108089,0.867505431175232,0.831483364105225,0.0368483774363995,0.554326236248016,0.859270870685577,-0.205668747425079,0.468352407217026,0.486142605543137,0.105355285108089,0.867505431175232,0.534165501594543,-0.113752603530884,0.837691783905029,0.307560920715332,-0.091851145029068,0.947084844112396,0.2811399102211,0.126565098762512,0.951284229755402,0.169032081961632,0.119583055377007,0.978329241275787,0.2811399102211,0.126565098762512,0.951284229755402,0.307560920715332,-0.091851145029068,0.947084844112396,0.171966776251793,-0.0650009214878082,0.982955873012543,0.954777777194977,-0.0263348873704672,0.296151697635651,0.859270870685577,-0.205668747425079,0.468352407217026,0.831483364105225,0.0368483774363995,0.554326236248016,0.967678904533386,-0.0477387942373753,0.247625812888145,0.926999032497406,-0.273295104503632,0.256870836019516,0.799426317214966,-0.355103880167007,0.484581023454666,0.888165593147278,-0.00891786906868219,0.459437042474747,0.934587121009827,-0.0746875330805779,0.347805470228195,0.929404556751251,-0.130073204636574,0.345381230115891,0.964883267879486,-0.257389277219772,0.0524501986801624,0.898464798927307,-0.377257645130157,-0.224583357572556,0.957330107688904,-0.260764896869659,0.124582171440125,0.964883267879486,-0.257389277219772,0.0524501986801624,0.963335692882538,-0.129456236958504,-0.235001027584076,0.778241097927094,-0.324259251356125,-0.53777015209198,0.898464798927307,-0.377257645130157,-0.224583357572556,\n0.890053927898407,-0.0586380586028099,0.452068090438843,0.967678904533386,-0.0477387942373753,0.247625812888145,0.964077115058899,-0.108696304261684,0.242364108562469,0.929404556751251,-0.130073204636574,0.345381230115891,0.789399027824402,-0.501962423324585,0.353387653827667,0.954777777194977,-0.0263348873704672,0.296151697635651,0.888165593147278,-0.00891786906868219,0.459437042474747,0.799426317214966,-0.355103880167007,0.484581023454666,0.929404556751251,-0.130073204636574,0.345381230115891,0.964077115058899,-0.108696304261684,0.242364108562469,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.964883267879486,-0.257389277219772,0.0524501986801624,-0.10020349919796,0.182739198207855,0.978041768074036,-0.0824126973748207,0.271421998739243,0.958925545215607,0.274746268987656,0.549388289451599,0.789105176925659,0.183646157383919,0.213717266917229,0.959478497505188,0.183646157383919,0.213717266917229,0.959478497505188,0.274746268987656,0.549388289451599,0.789105176925659,0.659283638000488,0.56208461523056,0.499405652284622,0.659731268882751,0.252948880195618,0.70765209197998,0.891434013843536,0.447212874889374,-0.0731168016791344,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.889242053031921,-0.13137923181057,0.438164442777634,0.648516714572906,0.651950538158417,0.392920613288879,0.299544423818588,0.682939231395721,0.666233539581299,0.325509399175644,0.684422254562378,0.652387738227844,0.31501841545105,0.615055680274963,0.722820818424225,0.273056983947754,0.564899086952209,0.778671264648438,0.438032209873199,0.893748044967651,0.0966554135084152,0.384984284639359,0.917665719985962,0.0983701795339584,0.325509399175644,0.684422254562378,0.652387738227844,0.299544423818588,0.682939231395721,0.666233539581299,0.367568165063858,0.757281005382538,-0.539832472801209,0.148073747754097,0.745845675468445,-0.649452328681946,0.384984284639359,0.917665719985962,0.0983701795339584,0.438032209873199,0.893748044967651,0.0966554135084152,0.0682389214634895,0.656387150287628,0.751331746578217,0.0630034655332565,0.605371952056885,0.793445229530334,\n-0.103646658360958,0.632546961307526,0.767555713653564,0.0415897369384766,0.750063896179199,0.660056412220001,-0.103646658360958,0.632546961307526,0.767555713653564,0.198797062039375,0.642942130565643,0.739665627479553,0.250419557094574,0.807709574699402,0.533755779266357,0.0415897369384766,0.750063896179199,0.660056412220001,-0.0329985395073891,0.983319759368896,0.178866878151894,0.105207018554211,0.966200411319733,0.235347032546997,0.0476450361311436,0.994988679885864,-0.0879064798355103,-0.0161609761416912,0.992576837539673,-0.120540797710419,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.0161609761416912,0.992576837539673,-0.120540797710419,0.0476450361311436,0.994988679885864,-0.0879064798355103,-0.00971746817231178,0.864930868148804,-0.501796960830688,-0.335044384002686,0.0369866825640202,-0.941476106643677,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.0385239869356155,0.185332536697388,-0.981920421123505,-0.187019199132919,0.292121440172195,-0.937917292118073,0.0385239869356155,0.185332536697388,-0.981920421123505,0.0810841843485832,0.166241332888603,-0.982745766639709,0.0293854102492332,0.448770761489868,-0.893163621425629,0.0859579145908356,0.475804299116135,-0.875340759754181,0.500678837299347,-0.355485200881958,-0.789272427558899,0.587996542453766,-0.370855212211609,-0.718836843967438,0.550657391548157,0.552472710609436,-0.625739872455597,0.454949915409088,0.569741904735565,-0.6844083070755,-7.2909109860575e-009,0.660060167312622,0.751212775707245,0.042865764349699,0.703626394271851,0.709275960922241,0.00949578825384378,0.0594539344310761,0.998185873031616,0.00678820535540581,0.00935708172619343,0.999933183193207,0.042865764349699,0.703626394271851,0.709275960922241,0.404132395982742,0.670274078845978,0.622422397136688,0.233477383852005,0.295218259096146,0.926463425159454,0.00949578825384378,0.0594539344310761,0.998185873031616,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.00971746817231178,0.864930868148804,-0.501796960830688,-0.0591709204018116,0.578005433082581,-0.813884854316711,\n0.0859579145908356,0.475804299116135,-0.875340759754181,0.0859579145908356,0.475804299116135,-0.875340759754181,-0.0591709204018116,0.578005433082581,-0.813884854316711,-0.187019199132919,0.292121440172195,-0.937917292118073,0.0385239869356155,0.185332536697388,-0.981920421123505,0.85130912065506,-0.28415909409523,-0.441051483154297,0.751560986042023,-0.51889967918396,-0.407307237386703,0.926999032497406,-0.273295104503632,0.256870836019516,0.934587121009827,-0.0746875330805779,0.347805470228195,0.98869800567627,0.0949656590819359,0.116007700562477,0.997147977352142,0.063211515545845,-0.0412334688007832,0.81435614824295,-0.302029103040695,-0.495582967996597,0.95084285736084,-0.116525217890739,-0.286914199590683,0.95027631521225,0.169706359505653,0.261102795600891,0.997147977352142,0.063211515545845,-0.0412334688007832,0.961808860301971,0.241085827350616,0.129620164632797,0.88108503818512,0.403870642185211,0.246125221252441,0.932883560657501,0.00894892401993275,-0.36006686091423,0.88943737745285,-0.310296326875687,-0.335585117340088,0.933888673782349,-0.271616876125336,-0.232542887330055,0.97384238243103,-0.111237548291683,-0.198134258389473,0.958027005195618,0.285412758588791,-0.0269038528203964,0.930458664894104,-0.278987765312195,0.237513080239296,0.932736575603485,0.169303506612778,0.31833752989769,0.883106589317322,0.432061642408371,0.182881161570549,0.659731268882751,0.252948880195618,0.70765209197998,0.853261947631836,-0.0267263799905777,0.520797252655029,0.547626852989197,-0.143319010734558,0.824356973171234,0.183646157383919,0.213717266917229,0.959478497505188,0.434262931346893,0.0580337457358837,0.898914754390717,0.636708438396454,0.429240256547928,0.640589714050293,0.4572993516922,0.58682519197464,0.668216645717621,0.291518121957779,0.153290659189224,0.944202899932861,0.547626852989197,-0.143319010734558,0.824356973171234,0.629741132259369,-0.543165504932404,0.555335402488709,0.369285374879837,-0.387989014387131,0.844448208808899,0.344554513692856,-0.157719656825066,0.925422430038452,0.751155555248261,0.608797609806061,0.255207538604736,\n0.573260188102722,0.776374936103821,0.261944144964218,0.4572993516922,0.58682519197464,0.668216645717621,0.636708438396454,0.429240256547928,0.640589714050293,0.930458664894104,-0.278987765312195,0.237513080239296,0.958027005195618,0.285412758588791,-0.0269038528203964,0.983769476413727,0.170430228114128,-0.0561354644596577,0.97384238243103,-0.111237548291683,-0.198134258389473,0.88108503818512,0.403870642185211,0.246125221252441,0.883106589317322,0.432061642408371,0.182881161570549,0.932736575603485,0.169303506612778,0.31833752989769,0.95027631521225,0.169706359505653,0.261102795600891,0.415907889604568,-0.581008851528168,-0.699606537818909,0.81435614824295,-0.302029103040695,-0.495582967996597,0.997147977352142,0.063211515545845,-0.0412334688007832,0.751560986042023,-0.51889967918396,-0.407307237386703,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.523119628429413,-0.252469837665558,-0.814005434513092,0.81435614824295,-0.302029103040695,-0.495582967996597,0.415907889604568,-0.581008851528168,-0.699606537818909,-0.362747877836227,-0.08218814432621,-0.928255915641785,0.315108418464661,-0.203955173492432,-0.926881313323975,0.523119628429413,-0.252469837665558,-0.814005434513092,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.799426317214966,-0.355103880167007,0.484581023454666,0.926999032497406,-0.273295104503632,0.256870836019516,0.95027631521225,0.169706359505653,0.261102795600891,0.932736575603485,0.169303506612778,0.31833752989769,0.878222644329071,-0.435990631580353,0.196563258767128,0.853261947631836,-0.0267263799905777,0.520797252655029,0.993755042552948,-0.10124122351408,0.0469168499112129,0.88943737745285,-0.310296326875687,-0.335585117340088,0.369285374879837,-0.387989014387131,0.844448208808899,0.434262931346893,0.0580337457358837,0.898914754390717,0.291518121957779,0.153290659189224,0.944202899932861,0.344554513692856,-0.157719656825066,0.925422430038452,0.183646157383919,0.213717266917229,0.959478497505188,0.547626852989197,-0.143319010734558,0.824356973171234,0.344554513692856,-0.157719656825066,0.925422430038452,\n-0.10020349919796,0.182739198207855,0.978041768074036,0.763394236564636,0.627238869667053,-0.154274553060532,0.51531445980072,0.84699958562851,-0.130547553300858,0.573260188102722,0.776374936103821,0.261944144964218,0.751155555248261,0.608797609806061,0.255207538604736,0.631870806217194,0.478121697902679,-0.61003190279007,0.352353453636169,0.709057629108429,-0.610806286334991,0.51531445980072,0.84699958562851,-0.130547553300858,0.763394236564636,0.627238869667053,-0.154274553060532,-0.335044384002686,0.0369866825640202,-0.941476106643677,0.206161767244339,-0.0580398291349411,-0.976795136928558,0.315108418464661,-0.203955173492432,-0.926881313323975,-0.362747877836227,-0.08218814432621,-0.928255915641785,-0.187019199132919,0.292121440172195,-0.937917292118073,0.198803246021271,0.240951344370842,-0.949957728385925,0.206161767244339,-0.0580398291349411,-0.976795136928558,-0.335044384002686,0.0369866825640202,-0.941476106643677,0.493055760860443,0.288357526063919,-0.820820271968842,0.235302045941353,0.454530268907547,-0.859089732170105,0.352353453636169,0.709057629108429,-0.610806286334991,0.631870806217194,0.478121697902679,-0.61003190279007,0.491784423589706,0.100257873535156,-0.864925682544708,0.198803246021271,0.240951344370842,-0.949957728385925,0.235302045941353,0.454530268907547,-0.859089732170105,0.493055760860443,0.288357526063919,-0.820820271968842,0.629741132259369,-0.543165504932404,0.555335402488709,0.547626852989197,-0.143319010734558,0.824356973171234,0.853261947631836,-0.0267263799905777,0.520797252655029,0.878222644329071,-0.435990631580353,0.196563258767128,0.0895038321614265,0.749099910259247,0.65638279914856,-0.0346120446920395,0.37646210193634,0.9257852435112,0.291518121957779,0.153290659189224,0.944202899932861,0.4572993516922,0.58682519197464,0.668216645717621,0.0895038321614265,0.749099910259247,0.65638279914856,0.4572993516922,0.58682519197464,0.668216645717621,0.573260188102722,0.776374936103821,0.261944144964218,0.105207018554211,0.966200411319733,0.235347032546997,0.344554513692856,-0.157719656825066,0.925422430038452,\n0.291518121957779,0.153290659189224,0.944202899932861,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.10020349919796,0.182739198207855,0.978041768074036,0.105207018554211,0.966200411319733,0.235347032546997,0.573260188102722,0.776374936103821,0.261944144964218,0.51531445980072,0.84699958562851,-0.130547553300858,0.0476450361311436,0.994988679885864,-0.0879064798355103,0.0476450361311436,0.994988679885864,-0.0879064798355103,0.51531445980072,0.84699958562851,-0.130547553300858,0.352353453636169,0.709057629108429,-0.610806286334991,-0.00971746817231178,0.864930868148804,-0.501796960830688,0.594084918498993,-0.202006503939629,-0.778624713420868,0.206161767244339,-0.0580398291349411,-0.976795136928558,0.198803246021271,0.240951344370842,-0.949957728385925,0.491784423589706,0.100257873535156,-0.864925682544708,-0.00971746817231178,0.864930868148804,-0.501796960830688,0.352353453636169,0.709057629108429,-0.610806286334991,0.235302045941353,0.454530268907547,-0.859089732170105,-0.0591709204018116,0.578005433082581,-0.813884854316711,-0.0591709204018116,0.578005433082581,-0.813884854316711,0.235302045941353,0.454530268907547,-0.859089732170105,0.198803246021271,0.240951344370842,-0.949957728385925,-0.187019199132919,0.292121440172195,-0.937917292118073,0.834282159805298,-0.0577300190925598,0.548307001590729,0.993755042552948,-0.10124122351408,0.0469168499112129,0.853261947631836,-0.0267263799905777,0.520797252655029,0.659731268882751,0.252948880195618,0.70765209197998,0.834282159805298,-0.0577300190925598,0.548307001590729,0.858235716819763,-0.482136696577072,0.175999104976654,0.933888673782349,-0.271616876125336,-0.232542887330055,0.993755042552948,-0.10124122351408,0.0469168499112129,0.858235716819763,-0.482136696577072,0.175999104976654,0.727367699146271,-0.668511748313904,0.15501070022583,0.97384238243103,-0.111237548291683,-0.198134258389473,0.933888673782349,-0.271616876125336,-0.232542887330055,0.789399027824402,-0.501962423324585,0.353387653827667,0.930458664894104,-0.278987765312195,0.237513080239296,0.97384238243103,-0.111237548291683,-0.198134258389473,\n0.727367699146271,-0.668511748313904,0.15501070022583,0.751560986042023,-0.51889967918396,-0.407307237386703,0.997147977352142,0.063211515545845,-0.0412334688007832,0.95027631521225,0.169706359505653,0.261102795600891,0.926999032497406,-0.273295104503632,0.256870836019516,0.523119628429413,-0.252469837665558,-0.814005434513092,0.786963045597076,-0.207125172019005,-0.581195652484894,0.95084285736084,-0.116525217890739,-0.286914199590683,0.81435614824295,-0.302029103040695,-0.495582967996597,0.786963045597076,-0.207125172019005,-0.581195652484894,0.523119628429413,-0.252469837665558,-0.814005434513092,0.315108418464661,-0.203955173492432,-0.926881313323975,0.708127498626709,-0.297497063875198,-0.640352189540863,0.708127498626709,-0.297497063875198,-0.640352189540863,0.315108418464661,-0.203955173492432,-0.926881313323975,0.206161767244339,-0.0580398291349411,-0.976795136928558,0.594084918498993,-0.202006503939629,-0.778624713420868,0.901673018932343,-0.243753165006638,-0.357169687747955,0.911918580532074,-0.233281582593918,-0.33761540055275,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.891434013843536,0.447212874889374,-0.0731168016791344,0.0810841843485832,0.166241332888603,-0.982745766639709,0.0261680763214827,0.194867521524429,-0.980480432510376,0.181251630187035,0.380190223455429,-0.906974792480469,0.0293854102492332,0.448770761489868,-0.893163621425629,0.0293854102492332,0.448770761489868,-0.893163621425629,0.181251630187035,0.380190223455429,-0.906974792480469,0.316321402788162,0.603275775909424,-0.732119560241699,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.0105779552832246,0.0432977452874184,0.99900621175766,-0.0284342020750046,0.0239462200552225,0.999308824539185,0.0116106020286679,0.109513640403748,0.993917465209961,0.025994973257184,0.100541830062866,0.99459320306778,0.051253791898489,0.460094302892685,0.886389493942261,-0.169371664524078,0.433557659387589,0.88506555557251,-0.103646658360958,0.632546961307526,0.767555713653564,0.0630034655332565,0.605371952056885,0.793445229530334,\n0.400240421295166,-0.835451424121857,-0.376601278781891,0.961808860301971,0.241085827350616,0.129620164632797,0.98869800567627,0.0949656590819359,0.116007700562477,0.21975277364254,-0.661429107189178,-0.717091500759125,0.21975277364254,-0.661429107189178,-0.717091500759125,0.98869800567627,0.0949656590819359,0.116007700562477,0.95084285736084,-0.116525217890739,-0.286914199590683,0.379243552684784,-0.345731914043427,-0.858279526233673,0.983769476413727,0.170430228114128,-0.0561354644596577,0.600287616252899,-0.73423707485199,0.317097216844559,0.900146186351776,-0.397185921669006,-0.178830027580261,0.932883560657501,0.00894892401993275,-0.36006686091423,0.883106589317322,0.432061642408371,0.182881161570549,0.971705734729767,0.10692148655653,0.21060810983181,0.998818516731262,0.0184048507362604,0.0449758432805538,0.958027005195618,0.285412758588791,-0.0269038528203964,0.0891242697834969,-0.774946451187134,0.625711500644684,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.369285374879837,-0.387989014387131,0.844448208808899,0.629741132259369,-0.543165504932404,0.555335402488709,0.232206523418427,-0.020738473162055,0.972445428371429,0.369285374879837,-0.387989014387131,0.844448208808899,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.201975762844086,-0.339365005493164,0.918714940547943,0.636708438396454,0.429240256547928,0.640589714050293,0.468301683664322,0.50049239397049,0.728148937225342,0.654108226299286,0.695117294788361,0.298252135515213,0.751155555248261,0.608797609806061,0.255207538604736,0.201975762844086,-0.339365005493164,0.918714940547943,-0.0231866482645273,-0.662597954273224,0.748616278171539,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.296016186475754,0.207150265574455,0.932450115680695,0.410484403371811,-0.832323789596558,0.372477740049362,0.88943737745285,-0.310296326875687,-0.335585117340088,0.900146186351776,-0.397185921669006,-0.178830027580261,0.600287616252899,-0.73423707485199,0.317097216844559,-0.75411182641983,-0.632700145244598,0.176084950566292,0.245737388730049,-0.81788432598114,0.52026754617691,\n0.280021280050278,-0.723065078258514,0.631478428840637,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.0173206701874733,0.471247583627701,0.881830871105194,-0.0981862172484398,-0.372313976287842,0.922898590564728,-0.418209999799728,-0.452997386455536,0.787333309650421,-0.446602612733841,-0.102232590317726,-0.888872683048248,-0.80677717924118,-0.297363102436066,-0.510573983192444,0.21975277364254,-0.661429107189178,-0.717091500759125,0.379243552684784,-0.345731914043427,-0.858279526233673,-0.418209999799728,-0.452997386455536,0.787333309650421,0.600287616252899,-0.73423707485199,0.317097216844559,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.80677717924118,-0.297363102436066,-0.510573983192444,-0.446602612733841,-0.102232590317726,-0.888872683048248,-0.432995676994324,-0.138490244746208,-0.890693664550781,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.80677717924118,-0.297363102436066,-0.510573983192444,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.760693609714508,-0.63129860162735,-0.151021003723145,0.400240421295166,-0.835451424121857,-0.376601278781891,0.245737388730049,-0.81788432598114,0.52026754617691,-0.75411182641983,-0.632700145244598,0.176084950566292,-0.755255520343781,-0.470546215772629,0.456262409687042,0.600287616252899,-0.73423707485199,0.317097216844559,0.245737388730049,-0.81788432598114,0.52026754617691,0.600287616252899,-0.73423707485199,0.317097216844559,0.998818516731262,0.0184048507362604,0.0449758432805538,0.971705734729767,0.10692148655653,0.21060810983181,0.883106589317322,0.432061642408371,0.182881161570549,0.88108503818512,0.403870642185211,0.246125221252441,0.963078618049622,0.14069077372551,0.229533597826958,0.971705734729767,0.10692148655653,0.21060810983181,0.280021280050278,-0.723065078258514,0.631478428840637,0.245737388730049,-0.81788432598114,0.52026754617691,0.971705734729767,0.10692148655653,0.21060810983181,0.963078618049622,0.14069077372551,0.229533597826958,\n-0.74693363904953,-0.662334084510803,0.0583409406244755,0.280021280050278,-0.723065078258514,0.631478428840637,0.400240421295166,-0.835451424121857,-0.376601278781891,-0.760693609714508,-0.63129860162735,-0.151021003723145,0.468301683664322,0.50049239397049,0.728148937225342,0.619435131549835,0.287277430295944,0.730596840381622,0.821134924888611,0.497984498739243,0.278834909200668,0.654108226299286,0.695117294788361,0.298252135515213,0.468301683664322,0.50049239397049,0.728148937225342,0.434262931346893,0.0580337457358837,0.898914754390717,0.232206523418427,-0.020738473162055,0.972445428371429,0.619435131549835,0.287277430295944,0.730596840381622,0.201975762844086,-0.339365005493164,0.918714940547943,0.663583517074585,0.109266623854637,0.740079581737518,0.619435131549835,0.287277430295944,0.730596840381622,0.232206523418427,-0.020738473162055,0.972445428371429,0.814588725566864,0.377569645643234,-0.440325260162354,0.711495399475098,0.476572155952454,-0.516384780406952,0.814492523670197,0.578000962734222,-0.0501683428883553,0.904258787631989,0.426958590745926,0.00473785446956754,0.751155555248261,0.608797609806061,0.255207538604736,0.654108226299286,0.695117294788361,0.298252135515213,0.654076218605042,0.750132322311401,-0.097395233809948,0.763394236564636,0.627238869667053,-0.154274553060532,0.711495399475098,0.476572155952454,-0.516384780406952,0.814588725566864,0.377569645643234,-0.440325260162354,0.594970345497131,0.240510985255241,-0.766918957233429,0.552935898303986,0.244290605187416,-0.796607792377472,0.552935898303986,0.244290605187416,-0.796607792377472,0.365138918161392,0.402016133069992,-0.83967649936676,0.52654629945755,0.6285120844841,-0.572469711303711,0.711495399475098,0.476572155952454,-0.516384780406952,0.457004487514496,0.0586743913590908,-0.887526988983154,0.171164497733116,0.182280600070953,-0.968233704566956,0.379243552684784,-0.345731914043427,-0.858279526233673,0.367359757423401,-0.19918592274189,-0.908499717712402,0.619435131549835,0.287277430295944,0.730596840381622,0.663583517074585,0.109266623854637,0.740079581737518,\n0.889924466609955,0.362089574337006,0.277354598045349,0.821134924888611,0.497984498739243,0.278834909200668,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.659241914749146,-0.751696407794952,-0.0187781285494566,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.178765639662743,-0.712745010852814,0.678260564804077,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.385445386171341,-0.256175637245178,0.886456966400146,-0.677714884281158,-0.638366103172302,0.364953815937042,0.530508995056152,-0.19520378112793,0.824897408485413,0.452383905649185,-0.0666286796331406,0.889330863952637,-0.178765639662743,-0.712745010852814,0.678260564804077,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.167113959789276,0.136682227253914,0.976417362689972,0.421373724937439,0.10162215679884,0.901175439357758,0.170562490820885,-0.154649093747139,0.97313517332077,-0.400625139474869,-0.141950860619545,0.905179262161255,0.0310389213263988,0.339698702096939,0.940021991729736,0.487773865461349,0.149537533521652,0.860066950321198,0.421373724937439,0.10162215679884,0.901175439357758,-0.167113959789276,0.136682227253914,0.976417362689972,0.256946176290512,-0.0665651634335518,-0.964130580425262,0.273258209228516,-0.188740387558937,-0.943242788314819,0.0101248463615775,-0.493800461292267,-0.869516313076019,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.0101248463615775,-0.493800461292267,-0.869516313076019,-0.107540838420391,-0.360320240259171,-0.926609039306641,-0.442572265863419,-0.578949928283691,-0.684796929359436,\n-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.685480773448944,-0.689756214618683,-0.233136162161827,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.442572265863419,-0.578949928283691,-0.684796929359436,-0.400625139474869,-0.141950860619545,0.905179262161255,0.170562490820885,-0.154649093747139,0.97313517332077,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.708291888237,-0.455330967903137,0.539440810680389,0.713517069816589,0.700637459754944,-0.000777124951127917,0.675231993198395,0.699040055274963,-0.235382169485092,0.372105628252029,0.872971594333649,0.315369695425034,0.20168174803257,0.693581879138947,0.691569745540619,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.179948955774307,0.305097907781601,0.935165047645569,-0.167113959789276,0.136682227253914,0.976417362689972,-0.400625139474869,-0.141950860619545,0.905179262161255,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.179948955774307,0.305097907781601,0.935165047645569,0.181594237685204,0.605878710746765,0.774554371833801,0.467824161052704,0.695085167884827,0.545891225337982,-0.0883399024605751,0.440414160490036,0.89343798160553,0.727736592292786,0.600477695465088,0.331400126218796,0.713517069816589,0.700637459754944,-0.000777124951127917,0.20168174803257,0.693581879138947,0.691569745540619,0.361584514379501,0.504137456417084,0.78428441286087,0.445416361093521,0.291170030832291,0.846654772758484,0.361584514379501,0.504137456417084,0.78428441286087,-0.214763179421425,0.201751604676247,0.955600917339325,-0.188908159732819,-0.0821763500571251,0.978550314903259,0.70020192861557,0.436750024557114,0.564771354198456,0.727736592292786,0.600477695465088,0.331400126218796,0.361584514379501,0.504137456417084,0.78428441286087,0.445416361093521,0.291170030832291,0.846654772758484,0.633797287940979,0.754054367542267,-0.172345638275146,\n0.755062222480774,0.655636370182037,0.00468770461156964,0.704874277114868,0.496488779783249,-0.506607472896576,0.571536600589752,0.54747611284256,-0.611241221427917,0.70020192861557,0.436750024557114,0.564771354198456,0.587356448173523,0.37003019452095,0.719784736633301,0.420910388231277,0.458904504776001,0.782458364963531,0.598974168300629,0.55623596906662,0.576048195362091,0.713795185089111,0.560950756072998,0.419321686029434,0.758696973323822,0.616848468780518,0.209467962384224,0.621278166770935,0.634226977825165,0.460184365510941,0.626114845275879,0.552237331867218,0.550467252731323,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.318814963102341,0.117576964199543,-0.94049596786499,0.626918852329254,0.478092342615128,-0.615142643451691,0.752733170986176,0.386990457773209,-0.532570421695709,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.699702382087708,-0.709872841835022,0.080604575574398,0.0771664902567863,0.0724747255444527,0.994380593299866,-0.11764945089817,0.119960054755211,0.985783040523529,0.420910388231277,0.458904504776001,0.782458364963531,0.587356448173523,0.37003019452095,0.719784736633301,0.632134556770325,0.566209673881531,0.52897310256958,0.713795185089111,0.560950756072998,0.419321686029434,0.626114845275879,0.552237331867218,0.550467252731323,0.611269116401672,0.567333459854126,0.551799595355988,0.413307309150696,-0.19144606590271,-0.890239000320435,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.752733170986176,0.386990457773209,-0.532570421695709,0.833262026309967,0.342827558517456,-0.433755338191986,-0.16471865773201,-0.673515558242798,-0.720586240291595,0.25180572271347,-0.338099181652069,-0.906798124313354,0.204112648963928,-0.444034606218338,-0.872451305389404,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.508835017681122,-0.825367450714111,-0.244653806090355,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.592759191989899,-0.802146971225739,-0.0720886588096619,\n-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.173014774918556,0.150903835892677,0.973290264606476,0.284897238016129,0.421358793973923,0.860982179641724,0.315255045890808,0.464517712593079,0.827549159526825,-0.24175851047039,0.0892980098724365,0.966218769550323,0.575458467006683,0.549589157104492,0.605639576911926,0.5494784116745,0.570390999317169,0.610514163970947,0.632134556770325,0.566209673881531,0.52897310256958,0.611269116401672,0.567333459854126,0.551799595355988,0.413307309150696,-0.19144606590271,-0.890239000320435,0.833262026309967,0.342827558517456,-0.433755338191986,0.827770292758942,0.364258110523224,-0.426746338605881,0.39981883764267,-0.144185781478882,-0.905182480812073,-0.190189674496651,-0.685347437858582,-0.702941536903381,0.123677581548691,-0.415960758924484,-0.900933146476746,0.170904099941254,-0.332066059112549,-0.9276442527771,-0.302494555711746,-0.645085394382477,-0.701685011386871,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.471450448036194,-0.245001286268234,0.847176969051361,0.553665459156036,0.525177180767059,-0.646253407001495,0.626918852329254,0.478092342615128,-0.615142643451691,0.318814963102341,0.117576964199543,-0.94049596786499,0.330627292394638,0.250829428434372,-0.909818768501282,\n-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.350332707166672,-0.557033061981201,-0.752981543540955,0.152081519365311,-0.148781135678291,-0.977105617523193,0.25180572271347,-0.338099181652069,-0.906798124313354,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.37796476483345,-0.602357983589172,-0.703070044517517,0.213511228561401,-0.0973462760448456,-0.972078502178192,0.152081519365311,-0.148781135678291,-0.977105617523193,-0.173014774918556,0.150903835892677,0.973290264606476,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.190007403492928,0.150082901120186,0.970243453979492,0.170904099941254,-0.332066059112549,-0.9276442527771,0.129470959305763,-0.140533372759819,-0.981574058532715,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.302494555711746,-0.645085394382477,-0.701685011386871,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.843225598335266,-0.434366077184677,-0.316696554422379,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.622686505317688,-0.240481927990913,0.744600534439087,0.5100998878479,0.534974932670593,0.673498272895813,0.5494784116745,0.570390999317169,0.610514163970947,0.575458467006683,0.549589157104492,0.605639576911926,0.490533232688904,0.463574707508087,0.73788595199585,0.21572470664978,0.340408891439438,0.915196537971497,0.284897238016129,0.421358793973923,0.860982179641724,-0.173014774918556,0.150903835892677,0.973290264606476,-0.190007403492928,0.150082901120186,0.970243453979492,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.428903788328171,-0.809928238391876,-0.400072306394577,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.687927067279816,-0.688686609268188,-0.229057043790817,\n-0.374727010726929,-0.451056748628616,-0.810016989707947,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.663558781147003,-0.701492488384247,-0.259996235370636,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.508835017681122,-0.825367450714111,-0.244653806090355,-0.663558781147003,-0.701492488384247,-0.259996235370636,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.508835017681122,-0.825367450714111,-0.244653806090355,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.302494555711746,-0.645085394382477,-0.701685011386871,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.685480773448944,-0.689756214618683,-0.233136162161827,-0.442572265863419,-0.578949928283691,-0.684796929359436,-0.374727010726929,-0.451056748628616,-0.810016989707947,0.524966239929199,0.447477400302887,0.72399890422821,0.154613956809044,0.104744024574757,0.982406854629517,0.452383905649185,-0.0666286796331406,0.889330863952637,0.64373791217804,0.242922231554985,0.725665390491486,0.078959085047245,0.121888175606728,0.989398181438446,0.0298695340752602,0.230346247553825,0.972650170326233,-0.385445386171341,-0.256175637245178,0.886456966400146,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.588989198207855,-0.775294840335846,0.228056281805038,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.178765639662743,-0.712745010852814,0.678260564804077,-0.396454155445099,-0.508855581283569,0.764127016067505,-0.396454155445099,-0.508855581283569,0.764127016067505,-0.178765639662743,-0.712745010852814,0.678260564804077,\n0.452383905649185,-0.0666286796331406,0.889330863952637,0.154613956809044,0.104744024574757,0.982406854629517,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.281839609146118,-0.242576912045479,0.92829030752182,0.0771664902567863,0.0724747255444527,0.994380593299866,0.445416361093521,0.291170030832291,0.846654772758484,-0.428903788328171,-0.809928238391876,-0.400072306394577,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.428903788328171,-0.809928238391876,-0.400072306394577,-0.524412930011749,-0.76793509721756,-0.367786258459091,0.0934423208236694,-0.290181279182434,-0.952398717403412,0.0273940563201904,-0.397710710763931,-0.917101860046387,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.214979261159897,-0.17779715359211,-0.96029794216156,-0.107540838420391,-0.360320240259171,-0.926609039306641,0.0856246650218964,-0.211089760065079,-0.973709166049957,0.0273940563201904,-0.397710710763931,-0.917101860046387,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.256946176290512,-0.0665651634335518,-0.964130580425262,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.457292228937149,0.637990713119507,0.619557559490204,0.600133121013641,0.610116124153137,0.517299294471741,0.543609440326691,0.5921830534935,0.594817638397217,0.529006600379944,0.562984585762024,0.63498067855835,0.461020469665527,0.72527813911438,0.511303961277008,0.529006600379944,0.562984585762024,0.63498067855835,0.543609440326691,0.5921830534935,0.594817638397217,0.315534800291061,0.608373045921326,0.728230714797974,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.755765080451965,-0.64697390794754,-0.101212374866009,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.727918982505798,-0.682847082614899,-0.0620787553489208,\n-0.714125990867615,-0.699272274971008,-0.0322852060198784,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.755765080451965,-0.64697390794754,-0.101212374866009,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.508835017681122,-0.825367450714111,-0.244653806090355,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.663558781147003,-0.701492488384247,-0.259996235370636,0.0456269159913063,0.337521076202393,-0.940211534500122,0.400274157524109,0.667701542377472,-0.627658545970917,0.577099621295929,0.499205440282822,-0.646335780620575,0.220365136861801,0.161491006612778,-0.961956262588501,0.669646203517914,0.237006261944771,-0.703847944736481,0.523088097572327,0.0727911219000816,-0.849164426326752,0.494590252637863,0.0603402629494667,-0.867029130458832,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.523088097572327,0.0727911219000816,-0.849164426326752,0.669646203517914,0.237006261944771,-0.703847944736481,0.652852237224579,0.393031805753708,-0.647541463375092,0.509894669055939,0.256654620170593,-0.821057736873627,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.0101248463615775,-0.493800461292267,-0.869516313076019,-0.359539449214935,-0.751623332500458,-0.552986204624176,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.56600546836853,0.354604989290237,-0.744239985942841,0.585969090461731,0.300280570983887,-0.752643227577209,0.351930469274521,0.00348040298558772,-0.936019718647003,0.444862186908722,0.181827828288078,-0.876947104930878,0.256946176290512,-0.0665651634335518,-0.964130580425262,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.494590252637863,0.0603402629494667,-0.867029130458832,0.509894669055939,0.256654620170593,-0.821057736873627,0.652852237224579,0.393031805753708,-0.647541463375092,0.670561790466309,0.450112581253052,-0.589699506759644,0.537330985069275,0.244881898164749,-0.807036757469177,\n0.652852237224579,0.393031805753708,-0.647541463375092,0.669646203517914,0.237006261944771,-0.703847944736481,0.781165838241577,0.623325526714325,0.0352878011763096,0.716162204742432,0.693212687969208,0.0810423269867897,0.771716117858887,0.588264167308807,0.241659909486771,0.721818268299103,0.577692627906799,0.381116211414337,0.8706374168396,0.436955988407135,-0.225964426994324,0.833557188510895,0.43537425994873,-0.340046495199203,0.684045433998108,0.607819020748138,0.403283834457397,0.839346766471863,0.531246542930603,-0.115212969481945,0.8706374168396,0.436955988407135,-0.225964426994324,0.721818268299103,0.577692627906799,0.381116211414337,0.170904099941254,-0.332066059112549,-0.9276442527771,0.123677581548691,-0.415960758924484,-0.900933146476746,0.184821337461472,-0.38211777806282,-0.905443012714386,0.204352244734764,-0.29480442404747,-0.933450877666473,0.39981883764267,-0.144185781478882,-0.905182480812073,0.827770292758942,0.364258110523224,-0.426746338605881,0.833576500415802,0.26908865571022,-0.482432901859283,0.474989861249924,-0.106995098292828,-0.873462498188019,0.340121984481812,0.0539852678775787,-0.938830494880676,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.152081519365311,-0.148781135678291,-0.977105617523193,0.213511228561401,-0.0973462760448456,-0.972078502178192,0.214979261159897,-0.17779715359211,-0.96029794216156,0.213511228561401,-0.0973462760448456,-0.972078502178192,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.374727010726929,-0.451056748628616,-0.810016989707947,0.0273940563201904,-0.397710710763931,-0.917101860046387,-0.0263592731207609,-0.425665766000748,-0.904496490955353,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.428903788328171,-0.809928238391876,-0.400072306394577,0.078959085047245,0.121888175606728,0.989398181438446,0.591853797435761,0.480847299098969,0.646911799907684,0.522614181041718,0.594646036624908,0.610958755016327,0.0298695340752602,0.230346247553825,0.972650170326233,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.432995676994324,-0.138490244746208,-0.890693664550781,\n-0.286727339029312,-0.249588027596474,-0.924928784370422,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.385445386171341,-0.256175637245178,0.886456966400146,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.677714884281158,-0.638366103172302,0.364953815937042,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.760693609714508,-0.63129860162735,-0.151021003723145,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.75411182641983,-0.632700145244598,0.176084950566292,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.677714884281158,-0.638366103172302,0.364953815937042,-0.0173206701874733,0.471247583627701,0.881830871105194,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.385445386171341,-0.256175637245178,0.886456966400146,0.0298695340752602,0.230346247553825,0.972650170326233,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.75411182641983,-0.632700145244598,0.176084950566292,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.432995676994324,-0.138490244746208,-0.890693664550781,0.0456269159913063,0.337521076202393,-0.940211534500122,0.220365136861801,0.161491006612778,-0.961956262588501,-0.286727339029312,-0.249588027596474,-0.924928784370422,0.808014631271362,0.548655688762665,-0.214684262871742,0.814588725566864,0.377569645643234,-0.440325260162354,0.904258787631989,0.426958590745926,0.00473785446956754,0.976709187030792,0.208457589149475,-0.050838902592659,0.814588725566864,0.377569645643234,-0.440325260162354,0.808014631271362,0.548655688762665,-0.214684262871742,0.467050135135651,0.542557895183563,-0.698208510875702,0.594970345497131,0.240510985255241,-0.766918957233429,0.600133121013641,0.610116124153137,0.517299294471741,0.836146891117096,0.398915261030197,0.376463830471039,0.645030558109283,0.393106490373611,0.655288398265839,\n0.669920027256012,0.533662140369415,0.516151010990143,0.663583517074585,0.109266623854637,0.740079581737518,0.639394581317902,-0.0537512600421906,0.766997635364532,0.951489508152008,0.185274630784988,0.245644211769104,0.889924466609955,0.362089574337006,0.277354598045349,0.836146891117096,0.398915261030197,0.376463830471039,0.600133121013641,0.610116124153137,0.517299294471741,0.457292228937149,0.637990713119507,0.619557559490204,0.821033596992493,0.463092446327209,0.333840012550354,0.639394581317902,-0.0537512600421906,0.766997635364532,0.645030558109283,0.393106490373611,0.655288398265839,0.836146891117096,0.398915261030197,0.376463830471039,0.951489508152008,0.185274630784988,0.245644211769104,0.594970345497131,0.240510985255241,-0.766918957233429,0.467050135135651,0.542557895183563,-0.698208510875702,0.171164497733116,0.182280600070953,-0.968233704566956,0.457004487514496,0.0586743913590908,-0.887526988983154,0.171164497733116,0.182280600070953,-0.968233704566956,0.467050135135651,0.542557895183563,-0.698208510875702,0.400274157524109,0.667701542377472,-0.627658545970917,0.0456269159913063,0.337521076202393,-0.940211534500122,-0.446602612733841,-0.102232590317726,-0.888872683048248,0.171164497733116,0.182280600070953,-0.968233704566956,0.0456269159913063,0.337521076202393,-0.940211534500122,-0.432995676994324,-0.138490244746208,-0.890693664550781,0.663583517074585,0.109266623854637,0.740079581737518,0.201975762844086,-0.339365005493164,0.918714940547943,0.296016186475754,0.207150265574455,0.932450115680695,0.639394581317902,-0.0537512600421906,0.766997635364532,0.0298695340752602,0.230346247553825,0.972650170326233,0.522614181041718,0.594646036624908,0.610958755016327,0.296016186475754,0.207150265574455,0.932450115680695,-0.0173206701874733,0.471247583627701,0.881830871105194,0.400274157524109,0.667701542377472,-0.627658545970917,0.571531593799591,0.820161521434784,-0.026204576715827,0.712321758270264,0.700732469558716,-0.0396451056003571,0.577099621295929,0.499205440282822,-0.646335780620575,0.763394236564636,0.627238869667053,-0.154274553060532,\n0.654076218605042,0.750132322311401,-0.097395233809948,0.52654629945755,0.6285120844841,-0.572469711303711,0.631870806217194,0.478121697902679,-0.61003190279007,0.631870806217194,0.478121697902679,-0.61003190279007,0.52654629945755,0.6285120844841,-0.572469711303711,0.365138918161392,0.402016133069992,-0.83967649936676,0.493055760860443,0.288357526063919,-0.820820271968842,0.765193700790405,0.545681536197662,0.341628700494766,0.472492724657059,0.634560942649841,0.611623287200928,0.712321758270264,0.700732469558716,-0.0396451056003571,0.571531593799591,0.820161521434784,-0.026204576715827,0.472492724657059,0.634560942649841,0.611623287200928,0.578510701656342,0.581528306007385,0.571970403194427,0.781165838241577,0.623325526714325,0.0352878011763096,0.712321758270264,0.700732469558716,-0.0396451056003571,0.578510701656342,0.581528306007385,0.571970403194427,0.461020469665527,0.72527813911438,0.511303961277008,0.716162204742432,0.693212687969208,0.0810423269867897,0.781165838241577,0.623325526714325,0.0352878011763096,0.487773865461349,0.149537533521652,0.860066950321198,0.0310389213263988,0.339698702096939,0.940021991729736,0.315534800291061,0.608373045921326,0.728230714797974,0.528455495834351,0.430389046669006,0.731778681278229,0.523088097572327,0.0727911219000816,-0.849164426326752,0.509894669055939,0.256654620170593,-0.821057736873627,0.444862186908722,0.181827828288078,-0.876947104930878,0.494590252637863,0.0603402629494667,-0.867029130458832,0.464535415172577,0.0843750312924385,-0.881525814533234,0.273258209228516,-0.188740387558937,-0.943242788314819,0.256946176290512,-0.0665651634335518,-0.964130580425262,0.444862186908722,0.181827828288078,-0.876947104930878,0.0934423208236694,-0.290181279182434,-0.952398717403412,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.494590252637863,0.0603402629494667,-0.867029130458832,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.528455495834351,0.430389046669006,0.731778681278229,0.524966239929199,0.447477400302887,0.72399890422821,0.64373791217804,0.242922231554985,0.725665390491486,\n0.487773865461349,0.149537533521652,0.860066950321198,0.528455495834351,0.430389046669006,0.731778681278229,0.543609440326691,0.5921830534935,0.594817638397217,0.600953817367554,0.56422370672226,0.566132545471191,0.524966239929199,0.447477400302887,0.72399890422821,0.319102138280869,0.857758343219757,0.403019160032272,0.461020469665527,0.72527813911438,0.511303961277008,0.315534800291061,0.608373045921326,0.728230714797974,-0.151531577110291,0.591902196407318,0.791637539863586,0.652852237224579,0.393031805753708,-0.647541463375092,0.716162204742432,0.693212687969208,0.0810423269867897,0.56834876537323,0.804110050201416,-0.174317732453346,0.670561790466309,0.450112581253052,-0.589699506759644,0.483205556869507,0.452571898698807,-0.749460518360138,0.729157328605652,0.398623704910278,-0.556263148784637,0.598047912120819,0.525615990161896,-0.605034232139587,0.575007021427155,0.477127492427826,-0.664617359638214,0.421373724937439,0.10162215679884,0.901175439357758,0.64373791217804,0.242922231554985,0.725665390491486,0.530508995056152,-0.19520378112793,0.824897408485413,0.170562490820885,-0.154649093747139,0.97313517332077,0.170562490820885,-0.154649093747139,0.97313517332077,0.530508995056152,-0.19520378112793,0.824897408485413,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.179948955774307,0.305097907781601,0.935165047645569,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.28609374165535,0.17817023396492,0.941491186618805,-0.77697879076004,-0.497155666351318,0.386186748743057,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.708291888237,-0.455330967903137,0.539440810680389,0.976709187030792,0.208457589149475,-0.050838902592659,0.904258787631989,0.426958590745926,0.00473785446956754,0.889924466609955,0.362089574337006,0.277354598045349,0.951489508152008,0.185274630784988,0.245644211769104,0.904258787631989,0.426958590745926,0.00473785446956754,\n0.814492523670197,0.578000962734222,-0.0501683428883553,0.821134924888611,0.497984498739243,0.278834909200668,0.889924466609955,0.362089574337006,0.277354598045349,0.319102138280869,0.857758343219757,0.403019160032272,-0.151531577110291,0.591902196407318,0.791637539863586,-0.0883399024605751,0.440414160490036,0.89343798160553,0.467824161052704,0.695085167884827,0.545891225337982,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.677714884281158,-0.638366103172302,0.364953815937042,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.588989198207855,-0.775294840335846,0.228056281805038,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.11764945089817,0.119960054755211,0.985783040523529,0.0771664902567863,0.0724747255444527,0.994380593299866,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.749038457870483,-0.580160796642303,0.319929391145706,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.684738636016846,-0.554822146892548,0.472551971673965,0.755062222480774,0.655636370182037,0.00468770461156964,0.633797287940979,0.754054367542267,-0.172345638275146,0.75712126493454,0.653194308280945,0.0102259330451488,0.758696973323822,0.616848468780518,0.209467962384224,0.755062222480774,0.655636370182037,0.00468770461156964,0.758696973323822,0.616848468780518,0.209467962384224,0.713795185089111,0.560950756072998,0.419321686029434,0.771716117858887,0.588264167308807,0.241659909486771,0.713795185089111,0.560950756072998,0.419321686029434,0.632134556770325,0.566209673881531,0.52897310256958,\n0.721818268299103,0.577692627906799,0.381116211414337,0.771716117858887,0.588264167308807,0.241659909486771,0.684045433998108,0.607819020748138,0.403283834457397,0.721818268299103,0.577692627906799,0.381116211414337,0.632134556770325,0.566209673881531,0.52897310256958,0.5494784116745,0.570390999317169,0.610514163970947,0.704874277114868,0.496488779783249,-0.506607472896576,0.833557188510895,0.43537425994873,-0.340046495199203,0.803746700286865,0.434959292411804,-0.405957728624344,0.673612415790558,0.488613814115524,-0.554529428482056,0.853050053119659,0.432356089353561,-0.292187958955765,0.803746700286865,0.434959292411804,-0.405957728624344,0.833557188510895,0.43537425994873,-0.340046495199203,0.8706374168396,0.436955988407135,-0.225964426994324,0.8706374168396,0.436955988407135,-0.225964426994324,0.839346766471863,0.531246542930603,-0.115212969481945,0.811299920082092,0.393999367952347,-0.431922435760498,0.853050053119659,0.432356089353561,-0.292187958955765,0.839346766471863,0.531246542930603,-0.115212969481945,0.862522184848785,0.47530135512352,-0.17362080514431,0.830814361572266,0.356648951768875,-0.427257508039474,0.811299920082092,0.393999367952347,-0.431922435760498,0.626114845275879,0.552237331867218,0.550467252731323,0.621278166770935,0.634226977825165,0.460184365510941,0.598974168300629,0.55623596906662,0.576048195362091,0.420910388231277,0.458904504776001,0.782458364963531,0.315255045890808,0.464517712593079,0.827549159526825,0.611269116401672,0.567333459854126,0.551799595355988,0.626114845275879,0.552237331867218,0.550467252731323,0.420910388231277,0.458904504776001,0.782458364963531,0.315255045890808,0.464517712593079,0.827549159526825,0.284897238016129,0.421358793973923,0.860982179641724,0.575458467006683,0.549589157104492,0.605639576911926,0.611269116401672,0.567333459854126,0.551799595355988,0.284897238016129,0.421358793973923,0.860982179641724,0.21572470664978,0.340408891439438,0.915196537971497,0.490533232688904,0.463574707508087,0.73788595199585,0.575458467006683,0.549589157104492,0.605639576911926,\n0.293987482786179,-0.0222472082823515,-0.955550312995911,0.340121984481812,0.0539852678775787,-0.938830494880676,0.406537264585495,0.167056277394295,-0.898231387138367,0.391682207584381,0.0344884172081947,-0.919453978538513,0.320780336856842,-0.177296921610832,-0.930411577224731,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.413307309150696,-0.19144606590271,-0.890239000320435,0.184821337461472,-0.38211777806282,-0.905443012714386,0.204352244734764,-0.29480442404747,-0.933450877666473,0.184821337461472,-0.38211777806282,-0.905443012714386,0.413307309150696,-0.19144606590271,-0.890239000320435,0.39981883764267,-0.144185781478882,-0.905182480812073,0.204352244734764,-0.29480442404747,-0.933450877666473,0.39981883764267,-0.144185781478882,-0.905182480812073,0.474989861249924,-0.106995098292828,-0.873462498188019,0.129470959305763,-0.140533372759819,-0.981574058532715,-0.407645702362061,-0.312832653522491,-0.857881546020508,0.129470959305763,-0.140533372759819,-0.981574058532715,0.0502891913056374,0.172818437218666,-0.98366904258728,-0.437055885791779,-0.11311361938715,-0.892293393611908,0.0502891913056374,0.172818437218666,-0.98366904258728,0.139374434947968,0.0775641202926636,-0.98719733953476,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.437055885791779,-0.11311361938715,-0.892293393611908,0.595824003219604,0.198742762207985,-0.778135597705841,0.85837733745575,0.37276965379715,-0.352464318275452,0.84142130613327,0.443432748317719,-0.30883252620697,0.609626173973084,0.347123831510544,-0.712643682956696,-0.272565364837646,-0.405919879674912,-0.872317135334015,-0.361765921115875,-0.279954940080643,-0.889241635799408,0.139374434947968,0.0775641202926636,-0.98719733953476,0.218467608094215,-0.0307074077427387,-0.975360929965973,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.272565364837646,-0.405919879674912,-0.872317135334015,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.424547016620636,-0.828336775302887,-0.365538060665131,0.690612375736237,0.305584073066711,-0.655494391918182,\n-0.0785726085305214,-0.289755910634995,-0.953869938850403,0.218467608094215,-0.0307074077427387,-0.975360929965973,0.736901640892029,0.310691028833389,-0.600372433662415,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.272565364837646,-0.405919879674912,-0.872317135334015,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.66791182756424,-0.591369688510895,-0.451858043670654,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.0785726085305214,-0.289755910634995,-0.953869938850403,0.690612375736237,0.305584073066711,-0.655494391918182,0.568666934967041,0.406713992357254,-0.714983642101288,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.45667690038681,-0.210856854915619,-0.864283263683319,-0.353174358606339,-0.401916116476059,-0.844826221466064,0.568666934967041,0.406713992357254,-0.714983642101288,0.67058277130127,0.452658027410507,-0.587724030017853,-0.45667690038681,-0.210856854915619,-0.864283263683319,-0.768422484397888,-0.629524946212769,0.115000896155834,-0.45667690038681,-0.210856854915619,-0.864283263683319,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.45667690038681,-0.210856854915619,-0.864283263683319,0.623998522758484,0.368696242570877,-0.68897670507431,0.621371865272522,0.365546494722366,-0.6930171251297,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.0629069060087204,-0.574297785758972,-0.81622588634491,-0.417728811502457,-0.903412997722626,-0.0966832265257835,-0.926164984703064,-0.361916661262512,0.105994082987309,0.633565187454224,0.343504458665848,-0.693253099918365,0.765720903873444,-0.195053040981293,-0.61288321018219,-0.0629069060087204,-0.574297785758972,-0.81622588634491,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.926164984703064,-0.361916661262512,0.105994082987309,-0.417728811502457,-0.903412997722626,-0.0966832265257835,\n0.21460884809494,-0.781227350234985,0.586196959018707,-0.128134071826935,-0.277867317199707,0.952035427093506,0.882170557975769,0.163093075156212,0.441786974668503,-0.128134071826935,-0.277867317199707,0.952035427093506,0.21460884809494,-0.781227350234985,0.586196959018707,0.928486943244934,-0.278761386871338,0.24536520242691,0.838517308235168,0.23515185713768,0.491520494222641,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.128134071826935,-0.277867317199707,0.952035427093506,0.874470949172974,0.181272923946381,0.449934005737305,0.221149787306786,-0.755684494972229,0.616468727588654,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.113240525126457,-0.398993462324142,0.909934520721436,0.823110163211823,0.325570344924927,0.465288698673248,0.88580310344696,-0.0711137056350708,0.458580136299133,0.221149787306786,-0.755684494972229,0.616468727588654,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.0514638796448708,-0.993651986122131,-0.100036129355431,-0.00699111027643085,-0.506333768367767,-0.862309277057648,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.00699111027643085,-0.506333768367767,-0.862309277057648,0.744133472442627,0.145097494125366,-0.652082920074463,0.728366911411285,0.471724718809128,-0.496948093175888,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.809780776500702,-0.571567296981812,-0.132536545395851,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.286078542470932,-0.0728482380509377,-0.955433011054993,-0.953828155994415,-0.279060304164886,-0.111072786152363,0.779201686382294,0.334656059741974,-0.529952883720398,-0.286078542470932,-0.0728482380509377,-0.955433011054993,-0.209620162844658,-0.216750532388687,-0.953456163406372,0.769174098968506,0.351543009281158,-0.533656001091003,0.11994443833828,-0.617316663265228,-0.77751749753952,-0.383375316858292,-0.909262895584106,-0.162062838673592,-0.94000107049942,-0.321145743131638,-0.115166857838631,\n-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.11994443833828,-0.617316663265228,-0.77751749753952,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.780810236930847,0.338432997465134,-0.525165200233459,0.867587566375732,-0.240597397089005,-0.435206592082977,-0.94000107049942,-0.321145743131638,-0.115166857838631,-0.383375316858292,-0.909262895584106,-0.162062838673592,0.0104025090113282,-0.818762242794037,0.574038505554199,-0.441486179828644,-0.275298207998276,0.853991091251373,0.0104025090113282,-0.818762242794037,0.574038505554199,0.824216485023499,-0.374453365802765,0.42479619383812,0.694519758224487,0.188186302781105,0.694426536560059,-0.441486179828644,-0.275298207998276,0.853991091251373,0.682577550411224,0.201181307435036,0.702576637268066,0.677649199962616,0.231181770563126,0.698102116584778,-0.391219317913055,-0.370447516441345,0.842446446418762,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.391219317913055,-0.370447516441345,0.842446446418762,0.284337043762207,-0.628438115119934,0.724029004573822,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.284337043762207,-0.628438115119934,0.724029004573822,-0.391219317913055,-0.370447516441345,0.842446446418762,0.67560875415802,0.409798443317413,0.612876892089844,0.628294765949249,0.216130942106247,0.747350692749023,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.569195508956909,-0.757238268852234,-0.320322901010513,0.000683139485772699,-0.280447483062744,-0.959869146347046,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.569195508956909,-0.757238268852234,-0.320322901010513,0.869658291339874,0.203361555933952,-0.449820637702942,0.874346256256104,0.418091505765915,-0.246410429477692,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.877589702606201,0.353748112916946,-0.323571652173996,0.864371955394745,0.365095496177673,-0.345783799886703,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.000683139485772699,-0.280447483062744,-0.959869146347046,\n-0.899728536605835,-0.311181008815765,-0.30603089928627,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.246053159236908,-0.622352182865143,-0.743058264255524,-0.366940021514893,-0.90958160161972,-0.194977775216103,0.246053159236908,-0.622352182865143,-0.743058264255524,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.886669814586639,0.303469926118851,-0.348887741565704,0.927240550518036,-0.288017064332962,-0.239313811063766,-0.16863539814949,-0.750330984592438,0.639191269874573,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.899728536605835,-0.311181008815765,-0.30603089928627,-0.366940021514893,-0.90958160161972,-0.194977775216103,-0.16863539814949,-0.750330984592438,0.639191269874573,0.669099032878876,-0.368822127580643,0.645195066928864,0.524607241153717,0.204550698399544,0.826405644416809,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.760593712329865,-0.590625822544098,-0.269552141427994,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.559872090816498,-0.363111883401871,0.744777143001556,0.478091299533844,0.270657926797867,0.835567474365234,-0.559872090816498,-0.363111883401871,0.744777143001556,-0.591978549957275,-0.234647616744041,0.771039485931396,0.484563320875168,0.265936732292175,0.833352267742157,0.460785627365112,0.218516558408737,0.860190212726593,-0.0734389647841454,-0.75235915184021,0.654646813869476,-0.559872090816498,-0.363111883401871,0.744777143001556,0.503586828708649,0.359971582889557,0.785379409790039,-0.0734389647841454,-0.75235915184021,0.654646813869476,0.460785627365112,0.218516558408737,0.860190212726593,0.853275120258331,-0.0167487524449825,0.521191954612732,0.45549151301384,-0.838008761405945,0.300447642803192,0.853275120258331,-0.0167487524449825,0.521191954612732,0.982857048511505,0.136188626289368,-0.124276459217072,0.437012165784836,-0.816920578479767,-0.376378893852234,0.45549151301384,-0.838008761405945,0.300447642803192,-0.36907297372818,-0.926835656166077,-0.0689988732337952,\n0.437012165784836,-0.816920578479767,-0.376378893852234,0.260752469301224,-0.303326517343521,-0.91651576757431,-0.665418803691864,-0.653117716312408,-0.361462414264679,0.437012165784836,-0.816920578479767,-0.376378893852234,0.982857048511505,0.136188626289368,-0.124276459217072,0.914490401744843,0.386459112167358,-0.119819387793541,0.260752469301224,-0.303326517343521,-0.91651576757431,-0.684952914714813,-0.620533168315887,-0.381808966398239,0.260752469301224,-0.303326517343521,-0.91651576757431,0.258395105600357,-0.170487090945244,-0.950876474380493,-0.767736911773682,-0.476170718669891,-0.428767383098602,0.48573312163353,-0.643503189086914,-0.591580092906952,-0.27993255853653,-0.94170469045639,-0.18662802875042,-0.768858969211578,-0.468379706144333,-0.435288727283478,0.258395105600357,-0.170487090945244,-0.950876474380493,0.48573312163353,-0.643503189086914,-0.591580092906952,0.258395105600357,-0.170487090945244,-0.950876474380493,0.941704988479614,0.318803399801254,-0.107499539852142,0.974766612052917,-0.217580199241638,0.0498894527554512,-0.248893335461617,-0.684883832931519,0.684825658798218,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.768858969211578,-0.468379706144333,-0.435288727283478,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.287435591220856,0.297283440828323,0.910496234893799,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.248893335461617,-0.684883832931519,0.684825658798218,0.527618527412415,-0.248120784759521,0.812437534332275,-0.665418803691864,-0.653117716312408,-0.361462414264679,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.705930113792419,-0.207728907465935,0.677134692668915,0.307352930307388,0.437818199396133,0.844896078109741,0.0841809809207916,0.380945682525635,0.920757293701172,0.0841809809207916,0.380945682525635,0.920757293701172,0.190256670117378,0.381372839212418,0.904630959033966,\n-0.589905083179474,-0.166010066866875,0.790223181247711,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.589905083179474,-0.166010066866875,0.790223181247711,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.701657354831696,-0.649943113327026,0.291977494955063,0.567480087280273,-0.0757819190621376,0.819892346858978,-0.183004111051559,-0.709960997104645,0.680047690868378,0.0199296418577433,-0.141455933451653,0.989743947982788,0.323202461004257,0.213562965393066,0.921917021274567,-0.183004111051559,-0.709960997104645,0.680047690868378,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.392839103937149,-0.172498524188995,0.903283834457397,0.0199296418577433,-0.141455933451653,0.989743947982788,-0.229229316115379,-0.896437346935272,-0.379280924797058,0.571861207485199,-0.818909585475922,0.0485987178981304,0.735555529594421,-0.454784423112869,-0.502124667167664,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.957826614379883,0.161021858453751,0.237991765141487,0.735555529594421,-0.454784423112869,-0.502124667167664,0.571861207485199,-0.818909585475922,0.0485987178981304,0.567480087280273,-0.0757819190621376,0.819892346858978,-0.340475767850876,-0.728246688842773,-0.594754576683044,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.691691398620605,-0.350874394178391,-0.631229043006897,0.703052580356598,-0.608254909515381,-0.368433207273483,0.691691398620605,-0.350874394178391,-0.631229043006897,0.957826614379883,0.161021858453751,0.237991765141487,0.943321526050568,0.150219425559044,0.295936793088913,0.703052580356598,-0.608254909515381,-0.368433207273483,0.503020167350769,-0.85257089138031,0.141751810908318,-0.238497838377953,-0.942050397396088,-0.235923483967781,-0.340475767850876,-0.728246688842773,-0.594754576683044,0.703052580356598,-0.608254909515381,-0.368433207273483,0.703052580356598,-0.608254909515381,-0.368433207273483,0.943321526050568,0.150219425559044,0.295936793088913,0.813535928726196,-0.204780623316765,0.544264793395996,\n0.503020167350769,-0.85257089138031,0.141751810908318,0.0493573248386383,-0.726132214069366,0.685781180858612,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.238497838377953,-0.942050397396088,-0.235923483967781,0.503020167350769,-0.85257089138031,0.141751810908318,0.813535928726196,-0.204780623316765,0.544264793395996,0.245743036270142,0.103760361671448,0.963765621185303,0.0493573248386383,-0.726132214069366,0.685781180858612,0.503020167350769,-0.85257089138031,0.141751810908318,-0.688713252544403,0.550716757774353,0.471577256917953,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.56933456659317,0.0568463616073132,0.820138216018677,-0.688713252544403,0.550716757774353,0.471577256917953,-0.56933456659317,0.0568463616073132,0.820138216018677,0.245743036270142,0.103760361671448,0.963765621185303,0.0954181030392647,0.715005815029144,0.69257640838623,-0.683180570602417,0.540656507015228,0.490871548652649,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.688713252544403,0.550716757774353,0.471577256917953,-0.688713252544403,0.550716757774353,0.471577256917953,0.0954181030392647,0.715005815029144,0.69257640838623,0.18985190987587,0.684443712234497,0.703912675380707,-0.683180570602417,0.540656507015228,0.490871548652649,-0.688493669033051,0.582562029361725,0.431969791650772,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.683180570602417,0.540656507015228,0.490871548652649,-0.688493669033051,0.582562029361725,0.431969791650772,-0.683180570602417,0.540656507015228,0.490871548652649,0.18985190987587,0.684443712234497,0.703912675380707,0.199689194560051,0.642064154148102,0.740187704563141,-0.701637983322144,0.54883086681366,0.454410493373871,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.688493669033051,0.582562029361725,0.431969791650772,\n0.199689194560051,0.642064154148102,0.740187704563141,0.0676127597689629,0.604031264781952,0.7940873503685,-0.701637983322144,0.54883086681366,0.454410493373871,-0.688493669033051,0.582562029361725,0.431969791650772,-0.763029158115387,0.474885076284409,0.438486844301224,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.701637983322144,0.54883086681366,0.454410493373871,-0.60441780090332,0.615803182125092,0.505436062812805,0.0676127597689629,0.604031264781952,0.7940873503685,0.0691882893443108,0.630300760269165,0.773261845111847,-0.60441780090332,0.615803182125092,0.505436062812805,-0.701637983322144,0.54883086681366,0.454410493373871,-0.911145687103271,0.362300097942352,0.196347072720528,-0.505132853984833,0.614961266517639,0.605527400970459,-0.633555710315704,0.25967600941658,0.728817939758301,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.255626708269119,0.402414381504059,0.879043579101563,-0.513125777244568,0.318144857883453,0.797173619270325,-0.519362270832062,0.62650853395462,0.581162631511688,-0.394463092088699,0.67669689655304,0.621675312519073,-0.255626708269119,0.402414381504059,0.879043579101563,-0.190007403492928,0.150082901120186,0.970243453979492,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.513125777244568,0.318144857883453,0.797173619270325,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.279823988676071,-0.630851566791534,-0.723688364028931,-0.340475767850876,-0.728246688842773,-0.594754576683044,-0.340475767850876,-0.728246688842773,-0.594754576683044,-0.238497838377953,-0.942050397396088,-0.235923483967781,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.279823988676071,-0.630851566791534,-0.723688364028931,-0.754156410694122,-0.292590618133545,-0.587910532951355,\n-0.437055885791779,-0.11311361938715,-0.892293393611908,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.66791182756424,-0.591369688510895,-0.451858043670654,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.648254215717316,-0.664977610111237,-0.370905965566635,0.943321526050568,0.150219425559044,0.295936793088913,0.957826614379883,0.161021858453751,0.237991765141487,0.18985190987587,0.684443712234497,0.703912675380707,0.0954181030392647,0.715005815029144,0.69257640838623,0.0954181030392647,0.715005815029144,0.69257640838623,0.245743036270142,0.103760361671448,0.963765621185303,0.813535928726196,-0.204780623316765,0.544264793395996,0.943321526050568,0.150219425559044,0.295936793088913,0.957826614379883,0.161021858453751,0.237991765141487,0.567480087280273,-0.0757819190621376,0.819892346858978,0.0676127597689629,0.604031264781952,0.7940873503685,0.199689194560051,0.642064154148102,0.740187704563141,0.0691882893443108,0.630300760269165,0.773261845111847,0.0676127597689629,0.604031264781952,0.7940873503685,0.567480087280273,-0.0757819190621376,0.819892346858978,0.323202461004257,0.213562965393066,0.921917021274567,0.148562759160995,0.479341596364975,0.864962875843048,-0.255626708269119,0.402414381504059,0.879043579101563,-0.394463092088699,0.67669689655304,0.621675312519073,0.0911808460950851,0.673339366912842,0.733689427375793,-0.255626708269119,0.402414381504059,0.879043579101563,0.148562759160995,0.479341596364975,0.864962875843048,0.21572470664978,0.340408891439438,0.915196537971497,-0.190007403492928,0.150082901120186,0.970243453979492,0.842374086380005,0.358164042234421,-0.402646720409393,0.830814361572266,0.356648951768875,-0.427257508039474,0.862522184848785,0.47530135512352,-0.17362080514431,0.908332526683807,0.395048230886459,-0.137364193797112,0.842374086380005,0.358164042234421,-0.402646720409393,0.908332526683807,0.395048230886459,-0.137364193797112,0.909188210964203,0.403158754110336,-0.104114137589931,\n0.822202026844025,0.427274346351624,-0.376059085130692,0.899213671684265,0.427792370319366,0.0916977524757385,0.910323619842529,0.411990493535995,0.0396831221878529,0.905055105686188,0.328626185655594,-0.269963204860687,0.922886550426483,0.384252488613129,-0.0251074023544788,0.922377347946167,0.359061807394028,-0.142459228634834,0.960252404212952,0.207041427493095,0.18721416592598,0.88580310344696,-0.0711137056350708,0.458580136299133,0.894895136356354,0.433114320039749,-0.107586048543453,0.922377347946167,0.359061807394028,-0.142459228634834,0.894895136356354,0.433114320039749,-0.107586048543453,0.690612375736237,0.305584073066711,-0.655494391918182,0.820404410362244,0.42123407125473,-0.386650294065475,0.190256670117378,0.381372839212418,0.904630959033966,0.693649888038635,0.505129396915436,0.513511538505554,0.768445134162903,0.434675455093384,0.469626784324646,0.394909024238586,0.532412230968475,0.748721599578857,0.307352930307388,0.437818199396133,0.844896078109741,0.272435218095779,0.357738167047501,0.893197894096375,0.927422702312469,0.341609179973602,-0.152283608913422,0.914490401744843,0.386459112167358,-0.119819387793541,0.251297831535339,0.359561949968338,0.89864593744278,0.287435591220856,0.297283440828323,0.910496234893799,0.941704988479614,0.318803399801254,-0.107499539852142,0.92225056886673,0.365326255559921,-0.126453906297684,0.287435591220856,0.297283440828323,0.910496234893799,0.527618527412415,-0.248120784759521,0.812437534332275,0.974766612052917,-0.217580199241638,0.0498894527554512,0.941704988479614,0.318803399801254,-0.107499539852142,0.646180808544159,0.374157816171646,0.665173888206482,0.460785627365112,0.218516558408737,0.860190212726593,0.820957541465759,0.472796261310577,0.320144385099411,0.868437707424164,0.397741049528122,0.296003401279449,0.834237515926361,0.296865254640579,0.464670658111572,0.910323619842529,0.411990493535995,0.0396831221878529,0.899213671684265,0.427792370319366,0.0916977524757385,0.890609622001648,0.401651859283447,0.213284432888031,0.503586828708649,0.359971582889557,0.785379409790039,\n0.478091299533844,0.270657926797867,0.835567474365234,0.877589702606201,0.353748112916946,-0.323571652173996,0.874346256256104,0.418091505765915,-0.246410429477692,0.484563320875168,0.265936732292175,0.833352267742157,0.864371955394745,0.365095496177673,-0.345783799886703,0.877589702606201,0.353748112916946,-0.323571652173996,0.478091299533844,0.270657926797867,0.835567474365234,0.484563320875168,0.265936732292175,0.833352267742157,0.524607241153717,0.204550698399544,0.826405644416809,0.886669814586639,0.303469926118851,-0.348887741565704,0.864371955394745,0.365095496177673,-0.345783799886703,0.524607241153717,0.204550698399544,0.826405644416809,0.669099032878876,-0.368822127580643,0.645195066928864,0.927240550518036,-0.288017064332962,-0.239313811063766,0.886669814586639,0.303469926118851,-0.348887741565704,0.853837490081787,0.519237220287323,0.0367999672889709,0.744133472442627,0.145097494125366,-0.652082920074463,0.905055105686188,0.328626185655594,-0.269963204860687,0.910323619842529,0.411990493535995,0.0396831221878529,0.853837490081787,0.519237220287323,0.0367999672889709,0.910323619842529,0.411990493535995,0.0396831221878529,0.834237515926361,0.296865254640579,0.464670658111572,0.628294765949249,0.216130942106247,0.747350692749023,0.769174098968506,0.351543009281158,-0.533656001091003,0.728366911411285,0.471724718809128,-0.496948093175888,0.67560875415802,0.409798443317413,0.612876892089844,0.677649199962616,0.231181770563126,0.698102116584778,0.694519758224487,0.188186302781105,0.694426536560059,0.780810236930847,0.338432997465134,-0.525165200233459,0.779201686382294,0.334656059741974,-0.529952883720398,0.682577550411224,0.201181307435036,0.702576637268066,0.867587566375732,-0.240597397089005,-0.435206592082977,0.780810236930847,0.338432997465134,-0.525165200233459,0.694519758224487,0.188186302781105,0.694426536560059,0.824216485023499,-0.374453365802765,0.42479619383812,0.838517308235168,0.23515185713768,0.491520494222641,0.623998522758484,0.368696242570877,-0.68897670507431,0.67058277130127,0.452658027410507,-0.587724030017853,\n0.823110163211823,0.325570344924927,0.465288698673248,0.621371865272522,0.365546494722366,-0.6930171251297,0.623998522758484,0.368696242570877,-0.68897670507431,0.838517308235168,0.23515185713768,0.491520494222641,0.874470949172974,0.181272923946381,0.449934005737305,0.882170557975769,0.163093075156212,0.441786974668503,0.633565187454224,0.343504458665848,-0.693253099918365,0.621371865272522,0.365546494722366,-0.6930171251297,0.874470949172974,0.181272923946381,0.449934005737305,0.768445134162903,0.434675455093384,0.469626784324646,0.693649888038635,0.505129396915436,0.513511538505554,0.982857048511505,0.136188626289368,-0.124276459217072,0.936653733253479,0.265634030103683,0.228294312953949,0.609626173973084,0.347123831510544,-0.712643682956696,0.139374434947968,0.0775641202926636,-0.98719733953476,0.0502891913056374,0.172818437218666,-0.98366904258728,0.595824003219604,0.198742762207985,-0.778135597705841,0.218467608094215,-0.0307074077427387,-0.975360929965973,0.139374434947968,0.0775641202926636,-0.98719733953476,0.609626173973084,0.347123831510544,-0.712643682956696,0.736901640892029,0.310691028833389,-0.600372433662415,0.366583049297333,0.495457142591476,0.787489116191864,0.340076804161072,0.586851418018341,0.734815061092377,0.39249575138092,0.576124608516693,0.716957092285156,0.442981511354446,0.554243564605713,0.70468533039093,0.442981511354446,0.554243564605713,0.70468533039093,0.5100998878479,0.534974932670593,0.673498272895813,0.490533232688904,0.463574707508087,0.73788595199585,0.366583049297333,0.495457142591476,0.787489116191864,0.787978947162628,0.441818922758102,0.428818345069885,0.723389148712158,0.50640881061554,0.469316840171814,0.768445134162903,0.434675455093384,0.469626784324646,0.936653733253479,0.265634030103683,0.228294312953949,0.684045433998108,0.607819020748138,0.403283834457397,0.5494784116745,0.570390999317169,0.610514163970947,0.5100998878479,0.534974932670593,0.673498272895813,0.642198443412781,0.582559704780579,0.498202055692673,0.674923956394196,0.549656689167023,0.492295831441879,\n0.642198443412781,0.582559704780579,0.498202055692673,0.5100998878479,0.534974932670593,0.673498272895813,0.442981511354446,0.554243564605713,0.70468533039093,0.442981511354446,0.554243564605713,0.70468533039093,0.39249575138092,0.576124608516693,0.716957092285156,0.723389148712158,0.50640881061554,0.469316840171814,0.674923956394196,0.549656689167023,0.492295831441879,0.723389148712158,0.50640881061554,0.469316840171814,0.39249575138092,0.576124608516693,0.716957092285156,0.394909024238586,0.532412230968475,0.748721599578857,0.768445134162903,0.434675455093384,0.469626784324646,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.760693609714508,-0.63129860162735,-0.151021003723145,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.659241914749146,-0.751696407794952,-0.0187781285494566,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.510247528553009,-0.860017955303192,-0.00407588528469205,0.351930469274521,0.00348040298558772,-0.936019718647003,0.459090322256088,0.385543048381805,-0.800370275974274,0.406537264585495,0.167056277394295,-0.898231387138367,0.340121984481812,0.0539852678775787,-0.938830494880676,0.330627292394638,0.250829428434372,-0.909818768501282,0.33696186542511,0.354342758655548,-0.87229460477829,0.494146823883057,0.54429703950882,-0.677908360958099,0.553665459156036,0.525177180767059,-0.646253407001495,0.475114166736603,0.274622708559036,-0.835971832275391,0.406537264585495,0.167056277394295,-0.898231387138367,0.459090322256088,0.385543048381805,-0.800370275974274,0.521424174308777,0.414691746234894,-0.745753049850464,0.564947247505188,0.481012016534805,-0.670419335365295,0.571536600589752,0.54747611284256,-0.611241221427917,0.704874277114868,0.496488779783249,-0.506607472896576,\n0.673612415790558,0.488613814115524,-0.554529428482056,0.755062222480774,0.655636370182037,0.00468770461156964,0.771716117858887,0.588264167308807,0.241659909486771,0.833557188510895,0.43537425994873,-0.340046495199203,0.704874277114868,0.496488779783249,-0.506607472896576,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.749038457870483,-0.580160796642303,0.319929391145706,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.476104736328125,-0.838325619697571,-0.265583217144012,0.204112648963928,-0.444034606218338,-0.872451305389404,0.320780336856842,-0.177296921610832,-0.930411577224731,0.184821337461472,-0.38211777806282,-0.905443012714386,0.123677581548691,-0.415960758924484,-0.900933146476746,0.319102138280869,0.857758343219757,0.403019160032272,0.467824161052704,0.695085167884827,0.545891225337982,0.357862263917923,0.82249915599823,0.442074358463287,0.56834876537323,0.804110050201416,-0.174317732453346,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.77697879076004,-0.497155666351318,0.386186748743057,\n0.483205556869507,0.452571898698807,-0.749460518360138,0.675231993198395,0.699040055274963,-0.235382169485092,0.713517069816589,0.700637459754944,-0.000777124951127917,0.729157328605652,0.398623704910278,-0.556263148784637,0.75712126493454,0.653194308280945,0.0102259330451488,0.729157328605652,0.398623704910278,-0.556263148784637,0.713517069816589,0.700637459754944,-0.000777124951127917,0.727736592292786,0.600477695465088,0.331400126218796,0.598974168300629,0.55623596906662,0.576048195362091,0.75712126493454,0.653194308280945,0.0102259330451488,0.727736592292786,0.600477695465088,0.331400126218796,0.70020192861557,0.436750024557114,0.564771354198456,0.181594237685204,0.605878710746765,0.774554371833801,0.20168174803257,0.693581879138947,0.691569745540619,0.372105628252029,0.872971594333649,0.315369695425034,0.357862263917923,0.82249915599823,0.442074358463287,-0.28609374165535,0.17817023396492,0.941491186618805,-0.214763179421425,0.201751604676247,0.955600917339325,0.20168174803257,0.693581879138947,0.691569745540619,0.181594237685204,0.605878710746765,0.774554371833801,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.504859209060669,-0.313114404678345,0.804410696029663,-0.214763179421425,0.201751604676247,0.955600917339325,-0.28609374165535,0.17817023396492,0.941491186618805,0.816755056381226,0.501944601535797,0.284539580345154,0.801483035087585,0.569443702697754,0.182643905282021,0.642198443412781,0.582559704780579,0.498202055692673,0.674923956394196,0.549656689167023,0.492295831441879,0.674923956394196,0.549656689167023,0.492295831441879,0.723389148712158,0.50640881061554,0.469316840171814,0.787978947162628,0.441818922758102,0.428818345069885,0.816755056381226,0.501944601535797,0.284539580345154,0.816755056381226,0.501944601535797,0.284539580345154,0.807778179645538,0.493730574846268,0.322062909603119,0.890609622001648,0.401651859283447,0.213284432888031,0.862821519374847,0.482879310846329,0.149554565548897,0.807778179645538,0.493730574846268,0.322062909603119,0.787978947162628,0.441818922758102,0.428818345069885,\n0.646180808544159,0.374157816171646,0.665173888206482,0.868437707424164,0.397741049528122,0.296003401279449,0.862821519374847,0.482879310846329,0.149554565548897,0.899213671684265,0.427792370319366,0.0916977524757385,0.922886550426483,0.384252488613129,-0.0251074023544788,0.891873419284821,0.448944300413132,0.0548712648451328,0.909188210964203,0.403158754110336,-0.104114137589931,0.922886550426483,0.384252488613129,-0.0251074023544788,0.960252404212952,0.207041427493095,0.18721416592598,0.922377347946167,0.359061807394028,-0.142459228634834,0.908332526683807,0.395048230886459,-0.137364193797112,0.891873419284821,0.448944300413132,0.0548712648451328,0.922886550426483,0.384252488613129,-0.0251074023544788,0.909188210964203,0.403158754110336,-0.104114137589931,0.891873419284821,0.448944300413132,0.0548712648451328,0.908332526683807,0.395048230886459,-0.137364193797112,0.862522184848785,0.47530135512352,-0.17362080514431,0.801483035087585,0.569443702697754,0.182643905282021,0.922377347946167,0.359061807394028,-0.142459228634834,0.820404410362244,0.42123407125473,-0.386650294065475,0.822202026844025,0.427274346351624,-0.376059085130692,0.909188210964203,0.403158754110336,-0.104114137589931,0.807778179645538,0.493730574846268,0.322062909603119,0.868437707424164,0.397741049528122,0.296003401279449,0.957878828048706,0.257844924926758,-0.126428335905075,0.890609622001648,0.401651859283447,0.213284432888031,0.820957541465759,0.472796261310577,0.320144385099411,0.869658291339874,0.203361555933952,-0.449820637702942,0.957878828048706,0.257844924926758,-0.126428335905075,0.868437707424164,0.397741049528122,0.296003401279449,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.66791182756424,-0.591369688510895,-0.451858043670654,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.66791182756424,-0.591369688510895,-0.451858043670654,-0.507598042488098,-0.818433046340942,-0.269279778003693,\n-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.437055885791779,-0.11311361938715,-0.892293393611908,-0.754156410694122,-0.292590618133545,-0.587910532951355,0.190256670117378,0.381372839212418,0.904630959033966,0.30104210972786,0.404300183057785,0.863663733005524,-0.392839103937149,-0.172498524188995,0.903283834457397,-0.589905083179474,-0.166010066866875,0.790223181247711,0.0199296418577433,-0.141455933451653,0.989743947982788,-0.392839103937149,-0.172498524188995,0.903283834457397,0.30104210972786,0.404300183057785,0.863663733005524,0.356225103139877,0.46585413813591,0.809989869594574,-0.394463092088699,0.67669689655304,0.621675312519073,-0.60441780090332,0.615803182125092,0.505436062812805,0.0691882893443108,0.630300760269165,0.773261845111847,0.0911808460950851,0.673339366912842,0.733689427375793,0.564947247505188,0.481012016534805,-0.670419335365295,0.553665459156036,0.525177180767059,-0.646253407001495,0.494146823883057,0.54429703950882,-0.677908360958099,0.598047912120819,0.525615990161896,-0.605034232139587,0.673612415790558,0.488613814115524,-0.554529428482056,0.626918852329254,0.478092342615128,-0.615142643451691,0.553665459156036,0.525177180767059,-0.646253407001495,0.564947247505188,0.481012016534805,-0.670419335365295,0.803746700286865,0.434959292411804,-0.405957728624344,0.752733170986176,0.386990457773209,-0.532570421695709,0.626918852329254,0.478092342615128,-0.615142643451691,0.673612415790558,0.488613814115524,-0.554529428482056,0.833262026309967,0.342827558517456,-0.433755338191986,0.752733170986176,0.386990457773209,-0.532570421695709,0.803746700286865,0.434959292411804,-0.405957728624344,0.853050053119659,0.432356089353561,-0.292187958955765,0.853050053119659,0.432356089353561,-0.292187958955765,0.845363795757294,0.50351881980896,-0.178406670689583,0.827770292758942,0.364258110523224,-0.426746338605881,0.833262026309967,0.342827558517456,-0.433755338191986,0.845363795757294,0.50351881980896,-0.178406670689583,0.8753382563591,0.393582403659821,-0.280848383903503,\n0.833576500415802,0.26908865571022,-0.482432901859283,0.827770292758942,0.364258110523224,-0.426746338605881,0.595824003219604,0.198742762207985,-0.778135597705841,0.833576500415802,0.26908865571022,-0.482432901859283,0.8753382563591,0.393582403659821,-0.280848383903503,0.85837733745575,0.37276965379715,-0.352464318275452,0.811299920082092,0.393999367952347,-0.431922435760498,0.830814361572266,0.356648951768875,-0.427257508039474,0.8753382563591,0.393582403659821,-0.280848383903503,0.845363795757294,0.50351881980896,-0.178406670689583,0.85837733745575,0.37276965379715,-0.352464318275452,0.8753382563591,0.393582403659821,-0.280848383903503,0.830814361572266,0.356648951768875,-0.427257508039474,0.842374086380005,0.358164042234421,-0.402646720409393,0.85837733745575,0.37276965379715,-0.352464318275452,0.842374086380005,0.358164042234421,-0.402646720409393,0.822202026844025,0.427274346351624,-0.376059085130692,0.84142130613327,0.443432748317719,-0.30883252620697,0.822202026844025,0.427274346351624,-0.376059085130692,0.820404410362244,0.42123407125473,-0.386650294065475,0.736901640892029,0.310691028833389,-0.600372433662415,0.84142130613327,0.443432748317719,-0.30883252620697,0.521424174308777,0.414691746234894,-0.745753049850464,0.33696186542511,0.354342758655548,-0.87229460477829,0.330627292394638,0.250829428434372,-0.909818768501282,0.475114166736603,0.274622708559036,-0.835971832275391,0.537330985069275,0.244881898164749,-0.807036757469177,0.464535415172577,0.0843750312924385,-0.881525814533234,0.444862186908722,0.181827828288078,-0.876947104930878,0.509894669055939,0.256654620170593,-0.821057736873627,0.509490370750427,0.360699236392975,-0.781226992607117,0.537330985069275,0.244881898164749,-0.807036757469177,0.670561790466309,0.450112581253052,-0.589699506759644,0.575007021427155,0.477127492427826,-0.664617359638214,0.509490370750427,0.360699236392975,-0.781226992607117,0.272443890571594,0.180597811937332,-0.945070743560791,0.464535415172577,0.0843750312924385,-0.881525814533234,0.537330985069275,0.244881898164749,-0.807036757469177,\n0.0856246650218964,-0.211089760065079,-0.973709166049957,0.273258209228516,-0.188740387558937,-0.943242788314819,0.464535415172577,0.0843750312924385,-0.881525814533234,0.272443890571594,0.180597811937332,-0.945070743560791,0.0856246650218964,-0.211089760065079,-0.973709166049957,-0.107540838420391,-0.360320240259171,-0.926609039306641,0.0101248463615775,-0.493800461292267,-0.869516313076019,0.273258209228516,-0.188740387558937,-0.943242788314819,0.821033596992493,0.463092446327209,0.333840012550354,0.976709187030792,0.208457589149475,-0.050838902592659,0.951489508152008,0.185274630784988,0.245644211769104,0.836146891117096,0.398915261030197,0.376463830471039,0.654076218605042,0.750132322311401,-0.097395233809948,0.814492523670197,0.578000962734222,-0.0501683428883553,0.711495399475098,0.476572155952454,-0.516384780406952,0.52654629945755,0.6285120844841,-0.572469711303711,0.654108226299286,0.695117294788361,0.298252135515213,0.821134924888611,0.497984498739243,0.278834909200668,0.814492523670197,0.578000962734222,-0.0501683428883553,0.654076218605042,0.750132322311401,-0.097395233809948,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.843225598335266,-0.434366077184677,-0.316696554422379,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.843225598335266,-0.434366077184677,-0.316696554422379,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.749038457870483,-0.580160796642303,0.319929391145706,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.749038457870483,-0.580160796642303,0.319929391145706,\n-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.151531577110291,0.591902196407318,0.791637539863586,0.0310389213263988,0.339698702096939,0.940021991729736,-0.167113959789276,0.136682227253914,0.976417362689972,-0.0883399024605751,0.440414160490036,0.89343798160553,-0.663558781147003,-0.701492488384247,-0.259996235370636,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.714125990867615,-0.699272274971008,-0.0322852060198784,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.504859209060669,-0.313114404678345,0.804410696029663,-0.597946286201477,-0.554786086082459,0.578508973121643,0.457004487514496,0.0586743913590908,-0.887526988983154,0.333853751420975,0.150268703699112,-0.930570244789124,0.365138918161392,0.402016133069992,-0.83967649936676,0.552935898303986,0.244290605187416,-0.796607792377472,0.493055760860443,0.288357526063919,-0.820820271968842,0.365138918161392,0.402016133069992,-0.83967649936676,0.333853751420975,0.150268703699112,-0.930570244789124,0.491784423589706,0.100257873535156,-0.864925682544708,-0.77697879076004,-0.497155666351318,0.386186748743057,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.77697879076004,-0.497155666351318,0.386186748743057,-0.708291888237,-0.455330967903137,0.539440810680389,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.799912631511688,-0.600115418434143,-0.00112808460835367,0.25180572271347,-0.338099181652069,-0.906798124313354,0.152081519365311,-0.148781135678291,-0.977105617523193,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.320780336856842,-0.177296921610832,-0.930411577224731,0.600953817367554,0.56422370672226,0.566132545471191,0.669920027256012,0.533662140369415,0.516151010990143,\n0.522614181041718,0.594646036624908,0.610958755016327,0.591853797435761,0.480847299098969,0.646911799907684,0.600133121013641,0.610116124153137,0.517299294471741,0.669920027256012,0.533662140369415,0.516151010990143,0.600953817367554,0.56422370672226,0.566132545471191,0.543609440326691,0.5921830534935,0.594817638397217,0.712321758270264,0.700732469558716,-0.0396451056003571,0.781165838241577,0.623325526714325,0.0352878011763096,0.669646203517914,0.237006261944771,-0.703847944736481,0.577099621295929,0.499205440282822,-0.646335780620575,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.220365136861801,0.161491006612778,-0.961956262588501,0.577099621295929,0.499205440282822,-0.646335780620575,0.669646203517914,0.237006261944771,-0.703847944736481,-0.286727339029312,-0.249588027596474,-0.924928784370422,0.220365136861801,0.161491006612778,-0.961956262588501,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.0934423208236694,-0.290181279182434,-0.952398717403412,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.286727339029312,-0.249588027596474,-0.924928784370422,0.0934423208236694,-0.290181279182434,-0.952398717403412,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.659241914749146,-0.751696407794952,-0.0187781285494566,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.659241914749146,-0.751696407794952,-0.0187781285494566,0.808014631271362,0.548655688762665,-0.214684262871742,0.571531593799591,0.820161521434784,-0.026204576715827,0.400274157524109,0.667701542377472,-0.627658545970917,\n0.467050135135651,0.542557895183563,-0.698208510875702,-0.128134071826935,-0.277867317199707,0.952035427093506,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.768422484397888,-0.629524946212769,0.115000896155834,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.809780776500702,-0.571567296981812,-0.132536545395851,-0.953828155994415,-0.279060304164886,-0.111072786152363,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.391219317913055,-0.370447516441345,0.842446446418762,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.760593712329865,-0.590625822544098,-0.269552141427994,0.000683139485772699,-0.280447483062744,-0.959869146347046,-0.559872090816498,-0.363111883401871,0.744777143001556,-0.0734389647841454,-0.75235915184021,0.654646813869476,-0.0565342605113983,-0.994561314582825,0.087474100291729,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.92225056886673,0.365326255559921,-0.126453906297684,0.258395105600357,-0.170487090945244,-0.950876474380493,0.260752469301224,-0.303326517343521,-0.91651576757431,0.927422702312469,0.341609179973602,-0.152283608913422,-0.684952914714813,-0.620533168315887,-0.381808966398239,-0.767736911773682,-0.476170718669891,-0.428767383098602,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.708140134811401,-0.189787998795509,0.68008679151535,0.251297831535339,0.359561949968338,0.89864593744278,0.272435218095779,0.357738167047501,0.893197894096375,-0.705930113792419,-0.207728907465935,0.677134692668915,0.272435218095779,0.357738167047501,0.893197894096375,0.251297831535339,0.359561949968338,0.89864593744278,0.92225056886673,0.365326255559921,-0.126453906297684,0.927422702312469,0.341609179973602,-0.152283608913422,0.769174098968506,0.351543009281158,-0.533656001091003,0.677649199962616,0.231181770563126,0.698102116584778,0.682577550411224,0.201181307435036,0.702576637268066,0.779201686382294,0.334656059741974,-0.529952883720398,\n0.633565187454224,0.343504458665848,-0.693253099918365,0.882170557975769,0.163093075156212,0.441786974668503,0.928486943244934,-0.278761386871338,0.24536520242691,0.765720903873444,-0.195053040981293,-0.61288321018219,-0.60441780090332,0.615803182125092,0.505436062812805,-0.394463092088699,0.67669689655304,0.621675312519073,-0.519362270832062,0.62650853395462,0.581162631511688,-0.763029158115387,0.474885076284409,0.438486844301224,-0.622686505317688,-0.240481927990913,0.744600534439087,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.633555710315704,0.25967600941658,0.728817939758301,-0.513125777244568,0.318144857883453,0.797173619270325,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.622686505317688,-0.240481927990913,0.744600534439087,-0.519362270832062,0.62650853395462,0.581162631511688,-0.513125777244568,0.318144857883453,0.797173619270325,-0.633555710315704,0.25967600941658,0.728817939758301,-0.505132853984833,0.614961266517639,0.605527400970459,-0.763029158115387,0.474885076284409,0.438486844301224,-0.505132853984833,0.614961266517639,0.605527400970459,-0.911145687103271,0.362300097942352,0.196347072720528,-0.942745447158813,-0.331097900867462,-0.040066309273243,0.356225103139877,0.46585413813591,0.809989869594574,0.340076804161072,0.586851418018341,0.734815061092377,0.0911808460950851,0.673339366912842,0.733689427375793,0.0691882893443108,0.630300760269165,0.773261845111847,0.366583049297333,0.495457142591476,0.787489116191864,0.490533232688904,0.463574707508087,0.73788595199585,0.21572470664978,0.340408891439438,0.915196537971497,0.148562759160995,0.479341596364975,0.864962875843048,0.315255045890808,0.464517712593079,0.827549159526825,0.420910388231277,0.458904504776001,0.782458364963531,-0.11764945089817,0.119960054755211,0.985783040523529,-0.24175851047039,0.0892980098724365,0.966218769550323,0.330627292394638,0.250829428434372,-0.909818768501282,0.318814963102341,0.117576964199543,-0.94049596786499,\n0.387060284614563,0.0985353216528893,-0.916774332523346,0.475114166736603,0.274622708559036,-0.835971832275391,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.320780336856842,-0.177296921610832,-0.930411577224731,0.387060284614563,0.0985353216528893,-0.916774332523346,0.318814963102341,0.117576964199543,-0.94049596786499,0.387060284614563,0.0985353216528893,-0.916774332523346,0.391682207584381,0.0344884172081947,-0.919453978538513,0.406537264585495,0.167056277394295,-0.898231387138367,0.475114166736603,0.274622708559036,-0.835971832275391,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.24175851047039,0.0892980098724365,0.966218769550323,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.714125990867615,-0.699272274971008,-0.0322852060198784,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.685480773448944,-0.689756214618683,-0.233136162161827,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.685480773448944,-0.689756214618683,-0.233136162161827,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.510247528553009,-0.860017955303192,-0.00407588528469205,0.472492724657059,0.634560942649841,0.611623287200928,0.765193700790405,0.545681536197662,0.341628700494766,0.821033596992493,0.463092446327209,0.333840012550354,0.457292228937149,0.637990713119507,0.619557559490204,0.578510701656342,0.581528306007385,0.571970403194427,0.472492724657059,0.634560942649841,0.611623287200928,0.457292228937149,0.637990713119507,0.619557559490204,\n0.529006600379944,0.562984585762024,0.63498067855835,0.629741132259369,-0.543165504932404,0.555335402488709,0.878222644329071,-0.435990631580353,0.196563258767128,0.410484403371811,-0.832323789596558,0.372477740049362,0.0891242697834969,-0.774946451187134,0.625711500644684,0.367359757423401,-0.19918592274189,-0.908499717712402,0.594084918498993,-0.202006503939629,-0.778624713420868,0.491784423589706,0.100257873535156,-0.864925682544708,0.333853751420975,0.150268703699112,-0.930570244789124,0.379243552684784,-0.345731914043427,-0.858279526233673,0.708127498626709,-0.297497063875198,-0.640352189540863,0.594084918498993,-0.202006503939629,-0.778624713420868,0.367359757423401,-0.19918592274189,-0.908499717712402,0.901673018932343,-0.243753165006638,-0.357169687747955,0.672885239124298,0.731690943241119,-0.1088752374053,0.694567322731018,0.687739253044128,-0.211165577173233,0.901673018932343,-0.243753165006638,-0.357169687747955,0.891434013843536,0.447212874889374,-0.0731168016791344,0.672885239124298,0.731690943241119,-0.1088752374053,0.645817458629608,0.37744864821434,0.66366583108902,0.659731268882751,0.252948880195618,0.70765209197998,0.659283638000488,0.56208461523056,0.499405652284622,0.381191462278366,0.807218015193939,0.450657457113266,0.543150007724762,0.5245680809021,0.65560382604599,0.378357648849487,0.724991083145142,0.575528800487518,0.381191462278366,0.807218015193939,0.450657457113266,0.274746268987656,0.549388289451599,0.789105176925659,0.0985177978873253,0.656356811523438,0.747990608215332,0.599293649196625,-0.39963087439537,-0.693644165992737,0.641741633415222,-0.441758394241333,-0.626910865306854,0.720091462135315,-0.402850449085236,-0.56496000289917,0.0103344274684787,0.766447365283966,0.642223954200745,0.248548656702042,0.411066323518753,0.877067863941193,0.200062945485115,0.83070033788681,0.519530355930328,0.169032081961632,0.119583055377007,0.978329241275787,0.19136768579483,-0.0293898787349463,0.981078326702118,0.2811399102211,0.126565098762512,0.951284229755402,0.963335692882538,-0.129456236958504,-0.235001027584076,\n0.911918580532074,-0.233281582593918,-0.33761540055275,0.853671669960022,-0.248006701469421,-0.457970976829529,0.316321402788162,0.603275775909424,-0.732119560241699,0.181251630187035,0.380190223455429,-0.906974792480469,0.237173900008202,0.452350407838821,-0.85972535610199,0.544504523277283,-0.49831086397171,-0.674685955047607,0.751560986042023,-0.51889967918396,-0.407307237386703,0.85130912065506,-0.28415909409523,-0.441051483154297,0.394706159830093,-0.349102348089218,-0.84990268945694,0.415907889604568,-0.581008851528168,-0.699606537818909,0.544504523277283,-0.49831086397171,-0.674685955047607,0.934587121009827,-0.0746875330805779,0.347805470228195,0.888165593147278,-0.00891786906868219,0.459437042474747,0.890053927898407,-0.0586380586028099,0.452068090438843,0.316321402788162,0.603275775909424,-0.732119560241699,0.613006412982941,0.632095158100128,-0.474003076553345,0.508885145187378,0.79451996088028,-0.331321537494659,0.544504523277283,-0.49831086397171,-0.674685955047607,0.415907889604568,-0.581008851528168,-0.699606537818909,0.751560986042023,-0.51889967918396,-0.407307237386703,0.079964205622673,0.0645997598767281,-0.994702279567719,0.111387610435486,-0.211319342255592,-0.9710493683815,-0.109398990869522,-0.127084732055664,-0.985840439796448,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.079964205622673,0.0645997598767281,-0.994702279567719,0.0810841843485832,0.166241332888603,-0.982745766639709,0.0385239869356155,0.185332536697388,-0.981920421123505,-0.0618164576590061,-0.231827840209007,-0.970790684223175,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,-0.362747877836227,-0.08218814432621,-0.928255915641785,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.859270870685577,-0.205668747425079,0.468352407217026,0.954777777194977,-0.0263348873704672,0.296151697635651,\n0.888511061668396,-0.437404543161392,0.138655453920364,0.888511061668396,-0.437404543161392,0.138655453920364,0.954777777194977,-0.0263348873704672,0.296151697635651,0.789399027824402,-0.501962423324585,0.353387653827667,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.964077115058899,-0.108696304261684,0.242364108562469,0.922331035137177,0.0571805983781815,0.382146298885345,0.963335692882538,-0.129456236958504,-0.235001027584076,0.853671669960022,-0.248006701469421,-0.457970976829529,0.778241097927094,-0.324259251356125,-0.53777015209198,0.250419557094574,0.807709574699402,0.533755779266357,0.378357648849487,0.724991083145142,0.575528800487518,0.0415897369384766,0.750063896179199,0.660056412220001,-0.362747877836227,-0.08218814432621,-0.928255915641785,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,-0.335044384002686,0.0369866825640202,-0.941476106643677,0.648516714572906,0.651950538158417,0.392920613288879,0.889242053031921,-0.13137923181057,0.438164442777634,0.562915802001953,0.509836494922638,0.650532484054565,0.29329439997673,0.882676124572754,0.367234617471695,0.291106730699539,0.735121071338654,0.612253129482269,0.233477383852005,0.295218259096146,0.926463425159454,0.404132395982742,0.670274078845978,0.622422397136688,0.0895038321614265,0.749099910259247,0.65638279914856,0.0201202612370253,0.491976112127304,0.870376169681549,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.0824126973748207,0.271421998739243,0.958925545215607,-0.10020349919796,0.182739198207855,0.978041768074036,0.727367699146271,-0.668511748313904,0.15501070022583,0.888511061668396,-0.437404543161392,0.138655453920364,0.789399027824402,-0.501962423324585,0.353387653827667,0.961808860301971,0.241085827350616,0.129620164632797,0.997147977352142,0.063211515545845,-0.0412334688007832,0.98869800567627,0.0949656590819359,0.116007700562477,0.932883560657501,0.00894892401993275,-0.36006686091423,0.97384238243103,-0.111237548291683,-0.198134258389473,0.983769476413727,0.170430228114128,-0.0561354644596577,\n0.88943737745285,-0.310296326875687,-0.335585117340088,0.993755042552948,-0.10124122351408,0.0469168499112129,0.933888673782349,-0.271616876125336,-0.232542887330055,0.930458664894104,-0.278987765312195,0.237513080239296,0.799426317214966,-0.355103880167007,0.484581023454666,0.932736575603485,0.169303506612778,0.31833752989769,0.799426317214966,-0.355103880167007,0.484581023454666,0.930458664894104,-0.278987765312195,0.237513080239296,0.789399027824402,-0.501962423324585,0.353387653827667,0.963078618049622,0.14069077372551,0.229533597826958,0.961808860301971,0.241085827350616,0.129620164632797,0.400240421295166,-0.835451424121857,-0.376601278781891,0.280021280050278,-0.723065078258514,0.631478428840637,0.963078618049622,0.14069077372551,0.229533597826958,0.400240421295166,-0.835451424121857,-0.376601278781891,0.963078618049622,0.14069077372551,0.229533597826958,0.88108503818512,0.403870642185211,0.246125221252441,0.961808860301971,0.241085827350616,0.129620164632797,0.932883560657501,0.00894892401993275,-0.36006686091423,0.900146186351776,-0.397185921669006,-0.178830027580261,0.88943737745285,-0.310296326875687,-0.335585117340088,0.998818516731262,0.0184048507362604,0.0449758432805538,0.600287616252899,-0.73423707485199,0.317097216844559,0.983769476413727,0.170430228114128,-0.0561354644596577,0.468301683664322,0.50049239397049,0.728148937225342,0.636708438396454,0.429240256547928,0.640589714050293,0.434262931346893,0.0580337457358837,0.898914754390717,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.0891242697834969,-0.774946451187134,0.625711500644684,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.410484403371811,-0.832323789596558,0.372477740049362,-0.418209999799728,-0.452997386455536,0.787333309650421,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.0891242697834969,-0.774946451187134,0.625711500644684,0.958027005195618,0.285412758588791,-0.0269038528203964,0.998818516731262,0.0184048507362604,0.0449758432805538,0.983769476413727,0.170430228114128,-0.0561354644596577,0.21975277364254,-0.661429107189178,-0.717091500759125,\n-0.80677717924118,-0.297363102436066,-0.510573983192444,0.400240421295166,-0.835451424121857,-0.376601278781891,-0.0173206701874733,0.471247583627701,0.881830871105194,0.296016186475754,0.207150265574455,0.932450115680695,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.88943737745285,-0.310296326875687,-0.335585117340088,0.410484403371811,-0.832323789596558,0.372477740049362,0.878222644329071,-0.435990631580353,0.196563258767128,0.369285374879837,-0.387989014387131,0.844448208808899,0.232206523418427,-0.020738473162055,0.972445428371429,0.434262931346893,0.0580337457358837,0.898914754390717,0.522614181041718,0.594646036624908,0.610958755016327,0.669920027256012,0.533662140369415,0.516151010990143,0.645030558109283,0.393106490373611,0.655288398265839,0.0273940563201904,-0.397710710763931,-0.917101860046387,0.0934423208236694,-0.290181279182434,-0.952398717403412,0.365171790122986,-0.00518579035997391,-0.930925726890564,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.708291888237,-0.455330967903137,0.539440810680389,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.400625139474869,-0.141950860619545,0.905179262161255,-0.708291888237,-0.455330967903137,0.539440810680389,0.214979261159897,-0.17779715359211,-0.96029794216156,0.340121984481812,0.0539852678775787,-0.938830494880676,0.213511228561401,-0.0973462760448456,-0.972078502178192,-0.504859209060669,-0.313114404678345,0.804410696029663,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.214763179421425,0.201751604676247,0.955600917339325,0.204352244734764,-0.29480442404747,-0.933450877666473,0.129470959305763,-0.140533372759819,-0.981574058532715,0.170904099941254,-0.332066059112549,-0.9276442527771,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.302494555711746,-0.645085394382477,-0.701685011386871,0.64373791217804,0.242922231554985,0.725665390491486,0.452383905649185,-0.0666286796331406,0.889330863952637,\n0.530508995056152,-0.19520378112793,0.824897408485413,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.590254783630371,-0.794654071331024,0.141859948635101,0.56834876537323,0.804110050201416,-0.174317732453346,0.372105628252029,0.872971594333649,0.315369695425034,0.675231993198395,0.699040055274963,-0.235382169485092,0.0771664902567863,0.0724747255444527,0.994380593299866,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.755765080451965,-0.64697390794754,-0.101212374866009,0.575007021427155,0.477127492427826,-0.664617359638214,0.585969090461731,0.300280570983887,-0.752643227577209,0.56600546836853,0.354604989290237,-0.744239985942841,0.585969090461731,0.300280570983887,-0.752643227577209,0.575007021427155,0.477127492427826,-0.664617359638214,0.459090322256088,0.385543048381805,-0.800370275974274,0.56834876537323,0.804110050201416,-0.174317732453346,0.675231993198395,0.699040055274963,-0.235382169485092,0.483205556869507,0.452571898698807,-0.749460518360138,0.494146823883057,0.54429703950882,-0.677908360958099,0.33696186542511,0.354342758655548,-0.87229460477829,0.575007021427155,0.477127492427826,-0.664617359638214,0.25180572271347,-0.338099181652069,-0.906798124313354,0.320780336856842,-0.177296921610832,-0.930411577224731,0.204112648963928,-0.444034606218338,-0.872451305389404,-0.107540838420391,-0.360320240259171,-0.926609039306641,-0.374727010726929,-0.451056748628616,-0.810016989707947,-0.442572265863419,-0.578949928283691,-0.684796929359436,0.75712126493454,0.653194308280945,0.0102259330451488,0.598047912120819,0.525615990161896,-0.605034232139587,0.729157328605652,0.398623704910278,-0.556263148784637,0.296016186475754,0.207150265574455,0.932450115680695,0.645030558109283,0.393106490373611,0.655288398265839,0.639394581317902,-0.0537512600421906,0.766997635364532,\n-0.446602612733841,-0.102232590317726,-0.888872683048248,0.379243552684784,-0.345731914043427,-0.858279526233673,0.171164497733116,0.182280600070953,-0.968233704566956,0.645030558109283,0.393106490373611,0.655288398265839,0.296016186475754,0.207150265574455,0.932450115680695,0.522614181041718,0.594646036624908,0.610958755016327,0.367359757423401,-0.19918592274189,-0.908499717712402,0.333853751420975,0.150268703699112,-0.930570244789124,0.457004487514496,0.0586743913590908,-0.887526988983154,0.56834876537323,0.804110050201416,-0.174317732453346,0.716162204742432,0.693212687969208,0.0810423269867897,0.461020469665527,0.72527813911438,0.511303961277008,0.528455495834351,0.430389046669006,0.731778681278229,0.315534800291061,0.608373045921326,0.728230714797974,0.543609440326691,0.5921830534935,0.594817638397217,0.64373791217804,0.242922231554985,0.725665390491486,0.421373724937439,0.10162215679884,0.901175439357758,0.487773865461349,0.149537533521652,0.860066950321198,0.521424174308777,0.414691746234894,-0.745753049850464,0.459090322256088,0.385543048381805,-0.800370275974274,0.575007021427155,0.477127492427826,-0.664617359638214,0.75712126493454,0.653194308280945,0.0102259330451488,0.621278166770935,0.634226977825165,0.460184365510941,0.758696973323822,0.616848468780518,0.209467962384224,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.492057383060455,-0.813641428947449,0.309624224901199,0.361584514379501,0.504137456417084,0.78428441286087,0.20168174803257,0.693581879138947,0.691569745540619,-0.214763179421425,0.201751604676247,0.955600917339325,0.56834876537323,0.804110050201416,-0.174317732453346,0.461020469665527,0.72527813911438,0.511303961277008,0.319102138280869,0.857758343219757,0.403019160032272,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.708291888237,-0.455330967903137,0.539440810680389,0.633797287940979,0.754054367542267,-0.172345638275146,0.598047912120819,0.525615990161896,-0.605034232139587,\n0.75712126493454,0.653194308280945,0.0102259330451488,0.571536600589752,0.54747611284256,-0.611241221427917,0.598047912120819,0.525615990161896,-0.605034232139587,0.633797287940979,0.754054367542267,-0.172345638275146,0.75712126493454,0.653194308280945,0.0102259330451488,0.598974168300629,0.55623596906662,0.576048195362091,0.621278166770935,0.634226977825165,0.460184365510941,0.351930469274521,0.00348040298558772,-0.936019718647003,0.340121984481812,0.0539852678775787,-0.938830494880676,0.214979261159897,-0.17779715359211,-0.96029794216156,0.320780336856842,-0.177296921610832,-0.930411577224731,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.391682207584381,0.0344884172081947,-0.919453978538513,0.595824003219604,0.198742762207985,-0.778135597705841,0.129470959305763,-0.140533372759819,-0.981574058532715,0.474989861249924,-0.106995098292828,-0.873462498188019,0.595824003219604,0.198742762207985,-0.778135597705841,0.474989861249924,-0.106995098292828,-0.873462498188019,0.833576500415802,0.26908865571022,-0.482432901859283,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.272565364837646,-0.405919879674912,-0.872317135334015,0.218467608094215,-0.0307074077427387,-0.975360929965973,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.768422484397888,-0.629524946212769,0.115000896155834,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.45667690038681,-0.210856854915619,-0.864283263683319,-0.45667690038681,-0.210856854915619,-0.864283263683319,0.67058277130127,0.452658027410507,-0.587724030017853,0.623998522758484,0.368696242570877,-0.68897670507431,0.621371865272522,0.365546494722366,-0.6930171251297,0.633565187454224,0.343504458665848,-0.693253099918365,-0.494617521762848,-0.0259672924876213,-0.86872273683548,\n-0.0629069060087204,-0.574297785758972,-0.81622588634491,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.765720903873444,-0.195053040981293,-0.61288321018219,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.0629069060087204,-0.574297785758972,-0.81622588634491,0.463766068220139,-0.858605027198792,-0.218445509672165,0.21460884809494,-0.781227350234985,0.586196959018707,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.928486943244934,-0.278761386871338,0.24536520242691,0.21460884809494,-0.781227350234985,0.586196959018707,0.463766068220139,-0.858605027198792,-0.218445509672165,0.765720903873444,-0.195053040981293,-0.61288321018219,0.928486943244934,-0.278761386871338,0.24536520242691,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.926164984703064,-0.361916661262512,0.105994082987309,-0.128134071826935,-0.277867317199707,0.952035427093506,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.128134071826935,-0.277867317199707,0.952035427093506,0.882170557975769,0.163093075156212,0.441786974668503,0.874470949172974,0.181272923946381,0.449934005737305,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.768422484397888,-0.629524946212769,0.115000896155834,0.838517308235168,0.23515185713768,0.491520494222641,0.823110163211823,0.325570344924927,0.465288698673248,-0.113240525126457,-0.398993462324142,0.909934520721436,0.88580310344696,-0.0711137056350708,0.458580136299133,0.463198840618134,-0.858536601066589,-0.219913169741631,0.221149787306786,-0.755684494972229,0.616468727588654,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.00839155726134777,-0.974679827690125,-0.223447620868683,0.463198840618134,-0.858536601066589,-0.219913169741631,0.463198840618134,-0.858536601066589,-0.219913169741631,-0.00699111027643085,-0.506333768367767,-0.862309277057648,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.987558305263519,-0.14246828854084,-0.0665680542588234,\n0.905055105686188,0.328626185655594,-0.269963204860687,0.744133472442627,0.145097494125366,-0.652082920074463,0.744133472442627,0.145097494125366,-0.652082920074463,-0.00699111027643085,-0.506333768367767,-0.862309277057648,0.463198840618134,-0.858536601066589,-0.219913169741631,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.299353003501892,-0.946574151515961,-0.119938470423222,0.221149787306786,-0.755684494972229,0.616468727588654,0.463198840618134,-0.858536601066589,-0.219913169741631,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.960252404212952,0.207041427493095,0.18721416592598,0.905055105686188,0.328626185655594,-0.269963204860687,-0.809780776500702,-0.571567296981812,-0.132536545395851,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.209620162844658,-0.216750532388687,-0.953456163406372,0.728366911411285,0.471724718809128,-0.496948093175888,0.769174098968506,0.351543009281158,-0.533656001091003,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.779201686382294,0.334656059741974,-0.529952883720398,0.780810236930847,0.338432997465134,-0.525165200233459,-0.94000107049942,-0.321145743131638,-0.115166857838631,-0.953828155994415,-0.279060304164886,-0.111072786152363,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.11994443833828,-0.617316663265228,-0.77751749753952,0.470961600542068,-0.874415993690491,-0.116584025323391,-0.383375316858292,-0.909262895584106,-0.162062838673592,0.867587566375732,-0.240597397089005,-0.435206592082977,0.470961600542068,-0.874415993690491,-0.116584025323391,0.11994443833828,-0.617316663265228,-0.77751749753952,0.470961600542068,-0.874415993690491,-0.116584025323391,0.0104025090113282,-0.818762242794037,0.574038505554199,-0.383375316858292,-0.909262895584106,-0.162062838673592,0.824216485023499,-0.374453365802765,0.42479619383812,0.0104025090113282,-0.818762242794037,0.574038505554199,\n0.470961600542068,-0.874415993690491,-0.116584025323391,0.470961600542068,-0.874415993690491,-0.116584025323391,0.867587566375732,-0.240597397089005,-0.435206592082977,0.824216485023499,-0.374453365802765,0.42479619383812,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.953828155994415,-0.279060304164886,-0.111072786152363,-0.94000107049942,-0.321145743131638,-0.115166857838631,0.694519758224487,0.188186302781105,0.694426536560059,0.682577550411224,0.201181307435036,0.702576637268066,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.809780776500702,-0.571567296981812,-0.132536545395851,-0.391219317913055,-0.370447516441345,0.842446446418762,0.677649199962616,0.231181770563126,0.698102116584778,0.67560875415802,0.409798443317413,0.612876892089844,-0.391219317913055,-0.370447516441345,0.842446446418762,-0.0565342605113983,-0.994561314582825,0.087474100291729,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.0514638796448708,-0.993651986122131,-0.100036129355431,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.964045107364655,-0.123944662511349,0.23506323993206,0.628294765949249,0.216130942106247,0.747350692749023,0.834237515926361,0.296865254640579,0.464670658111572,0.628294765949249,0.216130942106247,0.747350692749023,0.964045107364655,-0.123944662511349,0.23506323993206,0.284337043762207,-0.628438115119934,0.724029004573822,0.569195508956909,-0.757238268852234,-0.320322901010513,0.284337043762207,-0.628438115119934,0.724029004573822,0.964045107364655,-0.123944662511349,0.23506323993206,0.869658291339874,0.203361555933952,-0.449820637702942,0.569195508956909,-0.757238268852234,-0.320322901010513,0.964045107364655,-0.123944662511349,0.23506323993206,0.957878828048706,0.257844924926758,-0.126428335905075,0.964045107364655,-0.123944662511349,0.23506323993206,0.834237515926361,0.296865254640579,0.464670658111572,-0.0565342605113983,-0.994561314582825,0.087474100291729,\n-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.569195508956909,-0.757238268852234,-0.320322901010513,0.569195508956909,-0.757238268852234,-0.320322901010513,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.284337043762207,-0.628438115119934,0.724029004573822,-0.760593712329865,-0.590625822544098,-0.269552141427994,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.874346256256104,0.418091505765915,-0.246410429477692,0.877589702606201,0.353748112916946,-0.323571652173996,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.864371955394745,0.365095496177673,-0.345783799886703,0.886669814586639,0.303469926118851,-0.348887741565704,-0.899728536605835,-0.311181008815765,-0.30603089928627,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.246053159236908,-0.622352182865143,-0.743058264255524,0.416420161724091,-0.908685982227325,0.0297335833311081,-0.366940021514893,-0.90958160161972,-0.194977775216103,0.927240550518036,-0.288017064332962,-0.239313811063766,0.416420161724091,-0.908685982227325,0.0297335833311081,0.246053159236908,-0.622352182865143,-0.743058264255524,0.416420161724091,-0.908685982227325,0.0297335833311081,-0.16863539814949,-0.750330984592438,0.639191269874573,-0.366940021514893,-0.90958160161972,-0.194977775216103,0.669099032878876,-0.368822127580643,0.645195066928864,-0.16863539814949,-0.750330984592438,0.639191269874573,0.416420161724091,-0.908685982227325,0.0297335833311081,0.416420161724091,-0.908685982227325,0.0297335833311081,0.927240550518036,-0.288017064332962,-0.239313811063766,0.669099032878876,-0.368822127580643,0.645195066928864,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.899728536605835,-0.311181008815765,-0.30603089928627,0.524607241153717,0.204550698399544,0.826405644416809,0.484563320875168,0.265936732292175,0.833352267742157,\n-0.591978549957275,-0.234647616744041,0.771039485931396,-0.695965886116028,-0.67816036939621,-0.236071988940239,-0.760593712329865,-0.590625822544098,-0.269552141427994,-0.559872090816498,-0.363111883401871,0.744777143001556,0.503586828708649,0.359971582889557,0.785379409790039,-0.559872090816498,-0.363111883401871,0.744777143001556,0.478091299533844,0.270657926797867,0.835567474365234,-0.0734389647841454,-0.75235915184021,0.654646813869476,0.119874052703381,-0.978117644786835,0.170047551393509,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.119874052703381,-0.978117644786835,0.170047551393509,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.119874052703381,-0.978117644786835,0.170047551393509,0.119874052703381,-0.978117644786835,0.170047551393509,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.468902409076691,-0.882473528385162,-0.0370272994041443,0.119874052703381,-0.978117644786835,0.170047551393509,0.437012165784836,-0.816920578479767,-0.376378893852234,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.684952914714813,-0.620533168315887,-0.381808966398239,-0.665418803691864,-0.653117716312408,-0.361462414264679,0.260752469301224,-0.303326517343521,-0.91651576757431,0.927422702312469,0.341609179973602,-0.152283608913422,0.260752469301224,-0.303326517343521,-0.91651576757431,0.914490401744843,0.386459112167358,-0.119819387793541,0.258395105600357,-0.170487090945244,-0.950876474380493,0.92225056886673,0.365326255559921,-0.126453906297684,0.941704988479614,0.318803399801254,-0.107499539852142,-0.768858969211578,-0.468379706144333,-0.435288727283478,-0.767736911773682,-0.476170718669891,-0.428767383098602,0.258395105600357,-0.170487090945244,-0.950876474380493,\n0.48573312163353,-0.643503189086914,-0.591580092906952,0.480270147323608,-0.844779372215271,0.235983863472939,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.974766612052917,-0.217580199241638,0.0498894527554512,0.480270147323608,-0.844779372215271,0.235983863472939,0.48573312163353,-0.643503189086914,-0.591580092906952,0.480270147323608,-0.844779372215271,0.235983863472939,-0.248893335461617,-0.684883832931519,0.684825658798218,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.527618527412415,-0.248120784759521,0.812437534332275,-0.248893335461617,-0.684883832931519,0.684825658798218,0.480270147323608,-0.844779372215271,0.235983863472939,0.480270147323608,-0.844779372215271,0.235983863472939,0.974766612052917,-0.217580199241638,0.0498894527554512,0.527618527412415,-0.248120784759521,0.812437534332275,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.767736911773682,-0.476170718669891,-0.428767383098602,-0.768858969211578,-0.468379706144333,-0.435288727283478,0.287435591220856,0.297283440828323,0.910496234893799,0.251297831535339,0.359561949968338,0.89864593744278,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.665418803691864,-0.653117716312408,-0.361462414264679,-0.684952914714813,-0.620533168315887,-0.381808966398239,0.272435218095779,0.357738167047501,0.893197894096375,0.307352930307388,0.437818199396133,0.844896078109741,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.589905083179474,-0.166010066866875,0.790223181247711,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.392839103937149,-0.172498524188995,0.903283834457397,\n-0.725724279880524,-0.448904931545258,0.521352767944336,-0.589905083179474,-0.166010066866875,0.790223181247711,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.223597481846809,-0.973583161830902,0.046260129660368,0.571861207485199,-0.818909585475922,0.0485987178981304,-0.229229316115379,-0.896437346935272,-0.379280924797058,0.567480087280273,-0.0757819190621376,0.819892346858978,0.571861207485199,-0.818909585475922,0.0485987178981304,-0.183004111051559,-0.709960997104645,0.680047690868378,-0.183004111051559,-0.709960997104645,0.680047690868378,0.571861207485199,-0.818909585475922,0.0485987178981304,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.183004111051559,-0.709960997104645,0.680047690868378,-0.223597481846809,-0.973583161830902,0.046260129660368,0.735555529594421,-0.454784423112869,-0.502124667167664,0.691691398620605,-0.350874394178391,-0.631229043006897,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.957826614379883,0.161021858453751,0.237991765141487,0.691691398620605,-0.350874394178391,-0.631229043006897,0.735555529594421,-0.454784423112869,-0.502124667167664,0.0493573248386383,-0.726132214069366,0.685781180858612,-0.56933456659317,0.0568463616073132,0.820138216018677,-0.765611350536346,-0.587060868740082,0.263056576251984,0.245743036270142,0.103760361671448,0.963765621185303,-0.56933456659317,0.0568463616073132,0.820138216018677,0.0493573248386383,-0.726132214069366,0.685781180858612,-0.911145687103271,0.362300097942352,0.196347072720528,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.633555710315704,0.25967600941658,0.728817939758301,-0.622686505317688,-0.240481927990913,0.744600534439087,\n-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.279823988676071,-0.630851566791534,-0.723688364028931,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.507598042488098,-0.818433046340942,-0.269279778003693,\n-0.223597481846809,-0.973583161830902,0.046260129660368,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.245216280221939,-0.962543606758118,-0.115666791796684,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.0514638796448708,-0.993651986122131,-0.100036129355431,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.784540235996246,-0.611652791500092,0.10187029838562,0.957826614379883,0.161021858453751,0.237991765141487,0.199689194560051,0.642064154148102,0.740187704563141,0.18985190987587,0.684443712234497,0.703912675380707,0.84142130613327,0.443432748317719,-0.30883252620697,0.736901640892029,0.310691028833389,-0.600372433662415,0.609626173973084,0.347123831510544,-0.712643682956696,0.820404410362244,0.42123407125473,-0.386650294065475,0.690612375736237,0.305584073066711,-0.655494391918182,0.736901640892029,0.310691028833389,-0.600372433662415,0.693649888038635,0.505129396915436,0.513511538505554,0.190256670117378,0.381372839212418,0.904630959033966,0.0841809809207916,0.380945682525635,0.920757293701172,0.190256670117378,0.381372839212418,0.904630959033966,0.394909024238586,0.532412230968475,0.748721599578857,0.30104210972786,0.404300183057785,0.863663733005524,\n0.30104210972786,0.404300183057785,0.863663733005524,0.340076804161072,0.586851418018341,0.734815061092377,0.356225103139877,0.46585413813591,0.809989869594574,0.568666934967041,0.406713992357254,-0.714983642101288,0.690612375736237,0.305584073066711,-0.655494391918182,0.894895136356354,0.433114320039749,-0.107586048543453,0.982857048511505,0.136188626289368,-0.124276459217072,0.693649888038635,0.505129396915436,0.513511538505554,0.914490401744843,0.386459112167358,-0.119819387793541,0.307352930307388,0.437818199396133,0.844896078109741,0.693649888038635,0.505129396915436,0.513511538505554,0.0841809809207916,0.380945682525635,0.920757293701172,0.982857048511505,0.136188626289368,-0.124276459217072,0.853275120258331,-0.0167487524449825,0.521191954612732,0.936653733253479,0.265634030103683,0.228294312953949,0.853275120258331,-0.0167487524449825,0.521191954612732,0.460785627365112,0.218516558408737,0.860190212726593,0.646180808544159,0.374157816171646,0.665173888206482,0.340076804161072,0.586851418018341,0.734815061092377,0.394909024238586,0.532412230968475,0.748721599578857,0.39249575138092,0.576124608516693,0.716957092285156,0.820957541465759,0.472796261310577,0.320144385099411,0.503586828708649,0.359971582889557,0.785379409790039,0.874346256256104,0.418091505765915,-0.246410429477692,0.503586828708649,0.359971582889557,0.785379409790039,0.820957541465759,0.472796261310577,0.320144385099411,0.460785627365112,0.218516558408737,0.860190212726593,0.394909024238586,0.532412230968475,0.748721599578857,0.340076804161072,0.586851418018341,0.734815061092377,0.30104210972786,0.404300183057785,0.863663733005524,0.67058277130127,0.452658027410507,-0.587724030017853,0.568666934967041,0.406713992357254,-0.714983642101288,0.894895136356354,0.433114320039749,-0.107586048543453,0.728366911411285,0.471724718809128,-0.496948093175888,0.744133472442627,0.145097494125366,-0.652082920074463,0.853837490081787,0.519237220287323,0.0367999672889709,0.853837490081787,0.519237220287323,0.0367999672889709,0.67560875415802,0.409798443317413,0.612876892089844,\n0.728366911411285,0.471724718809128,-0.496948093175888,0.67560875415802,0.409798443317413,0.612876892089844,0.853837490081787,0.519237220287323,0.0367999672889709,0.628294765949249,0.216130942106247,0.747350692749023,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.299353003501892,-0.946574151515961,-0.119938470423222,0.463198840618134,-0.858536601066589,-0.219913169741631,0.874346256256104,0.418091505765915,-0.246410429477692,0.869658291339874,0.203361555933952,-0.449820637702942,0.820957541465759,0.472796261310577,0.320144385099411,0.307352930307388,0.437818199396133,0.844896078109741,0.914490401744843,0.386459112167358,-0.119819387793541,0.693649888038635,0.505129396915436,0.513511538505554,0.684045433998108,0.607819020748138,0.403283834457397,0.801483035087585,0.569443702697754,0.182643905282021,0.839346766471863,0.531246542930603,-0.115212969481945,0.891873419284821,0.448944300413132,0.0548712648451328,0.801483035087585,0.569443702697754,0.182643905282021,0.862821519374847,0.482879310846329,0.149554565548897,0.862821519374847,0.482879310846329,0.149554565548897,0.890609622001648,0.401651859283447,0.213284432888031,0.899213671684265,0.427792370319366,0.0916977524757385,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.844545185565948,-0.263896226882935,-0.465942233800888,0.585969090461731,0.300280570983887,-0.752643227577209,0.459090322256088,0.385543048381805,-0.800370275974274,0.351930469274521,0.00348040298558772,-0.936019718647003,0.564947247505188,0.481012016534805,-0.670419335365295,0.598047912120819,0.525615990161896,-0.605034232139587,0.571536600589752,0.54747611284256,-0.611241221427917,-0.190189674496651,-0.685347437858582,-0.702941536903381,0.204112648963928,-0.444034606218338,-0.872451305389404,0.123677581548691,-0.415960758924484,-0.900933146476746,0.181594237685204,0.605878710746765,0.774554371833801,0.357862263917923,0.82249915599823,0.442074358463287,0.467824161052704,0.695085167884827,0.545891225337982,-0.28609374165535,0.17817023396492,0.941491186618805,\n0.181594237685204,0.605878710746765,0.774554371833801,-0.179948955774307,0.305097907781601,0.935165047645569,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.28609374165535,0.17817023396492,0.941491186618805,0.56834876537323,0.804110050201416,-0.174317732453346,0.483205556869507,0.452571898698807,-0.749460518360138,0.575007021427155,0.477127492427826,-0.664617359638214,0.56834876537323,0.804110050201416,-0.174317732453346,0.357862263917923,0.82249915599823,0.442074358463287,0.372105628252029,0.872971594333649,0.315369695425034,0.862821519374847,0.482879310846329,0.149554565548897,0.801483035087585,0.569443702697754,0.182643905282021,0.816755056381226,0.501944601535797,0.284539580345154,0.890609622001648,0.401651859283447,0.213284432888031,0.957878828048706,0.257844924926758,-0.126428335905075,0.834237515926361,0.296865254640579,0.464670658111572,0.839346766471863,0.531246542930603,-0.115212969481945,0.801483035087585,0.569443702697754,0.182643905282021,0.862522184848785,0.47530135512352,-0.17362080514431,0.684045433998108,0.607819020748138,0.403283834457397,0.642198443412781,0.582559704780579,0.498202055692673,0.801483035087585,0.569443702697754,0.182643905282021,0.816755056381226,0.501944601535797,0.284539580345154,0.787978947162628,0.441818922758102,0.428818345069885,0.807778179645538,0.493730574846268,0.322062909603119,0.646180808544159,0.374157816171646,0.665173888206482,0.787978947162628,0.441818922758102,0.428818345069885,0.936653733253479,0.265634030103683,0.228294312953949,0.853275120258331,-0.0167487524449825,0.521191954612732,0.646180808544159,0.374157816171646,0.665173888206482,0.936653733253479,0.265634030103683,0.228294312953949,0.869658291339874,0.203361555933952,-0.449820637702942,0.964045107364655,-0.123944662511349,0.23506323993206,0.957878828048706,0.257844924926758,-0.126428335905075,0.960252404212952,0.207041427493095,0.18721416592598,0.922886550426483,0.384252488613129,-0.0251074023544788,0.905055105686188,0.328626185655594,-0.269963204860687,\n0.987558305263519,-0.14246828854084,-0.0665680542588234,0.88580310344696,-0.0711137056350708,0.458580136299133,0.960252404212952,0.207041427493095,0.18721416592598,0.823110163211823,0.325570344924927,0.465288698673248,0.894895136356354,0.433114320039749,-0.107586048543453,0.88580310344696,-0.0711137056350708,0.458580136299133,0.67058277130127,0.452658027410507,-0.587724030017853,0.894895136356354,0.433114320039749,-0.107586048543453,0.823110163211823,0.325570344924927,0.465288698673248,0.463198840618134,-0.858536601066589,-0.219913169741631,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.744133472442627,0.145097494125366,-0.652082920074463,0.88580310344696,-0.0711137056350708,0.458580136299133,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.463198840618134,-0.858536601066589,-0.219913169741631,0.45549151301384,-0.838008761405945,0.300447642803192,0.437012165784836,-0.816920578479767,-0.376378893852234,0.119874052703381,-0.978117644786835,0.170047551393509,-0.0734389647841454,-0.75235915184021,0.654646813869476,0.45549151301384,-0.838008761405945,0.300447642803192,0.119874052703381,-0.978117644786835,0.170047551393509,0.0502891913056374,0.172818437218666,-0.98366904258728,0.129470959305763,-0.140533372759819,-0.981574058532715,0.595824003219604,0.198742762207985,-0.778135597705841,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.911145687103271,0.362300097942352,0.196347072720528,-0.965597808361053,0.00630215974524617,-0.259963750839233,0.323202461004257,0.213562965393066,0.921917021274567,0.0199296418577433,-0.141455933451653,0.989743947982788,0.356225103139877,0.46585413813591,0.809989869594574,0.0691882893443108,0.630300760269165,0.773261845111847,0.323202461004257,0.213562965393066,0.921917021274567,0.356225103139877,0.46585413813591,0.809989869594574,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.0856246650218964,-0.211089760065079,-0.973709166049957,0.272443890571594,0.180597811937332,-0.945070743560791,0.575007021427155,0.477127492427826,-0.664617359638214,0.56600546836853,0.354604989290237,-0.744239985942841,\n0.509490370750427,0.360699236392975,-0.781226992607117,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.351930469274521,0.00348040298558772,-0.936019718647003,0.214979261159897,-0.17779715359211,-0.96029794216156,0.598047912120819,0.525615990161896,-0.605034232139587,0.494146823883057,0.54429703950882,-0.677908360958099,0.575007021427155,0.477127492427826,-0.664617359638214,0.845363795757294,0.50351881980896,-0.178406670689583,0.853050053119659,0.432356089353561,-0.292187958955765,0.811299920082092,0.393999367952347,-0.431922435760498,0.575007021427155,0.477127492427826,-0.664617359638214,0.33696186542511,0.354342758655548,-0.87229460477829,0.521424174308777,0.414691746234894,-0.745753049850464,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.504859209060669,-0.313114404678345,0.804410696029663,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.272443890571594,0.180597811937332,-0.945070743560791,0.56600546836853,0.354604989290237,-0.744239985942841,0.56600546836853,0.354604989290237,-0.744239985942841,0.272443890571594,0.180597811937332,-0.945070743560791,0.509490370750427,0.360699236392975,-0.781226992607117,0.670561790466309,0.450112581253052,-0.589699506759644,0.56834876537323,0.804110050201416,-0.174317732453346,0.575007021427155,0.477127492427826,-0.664617359638214,0.808014631271362,0.548655688762665,-0.214684262871742,0.976709187030792,0.208457589149475,-0.050838902592659,0.765193700790405,0.545681536197662,0.341628700494766,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.755765080451965,-0.64697390794754,-0.101212374866009,-0.714125990867615,-0.699272274971008,-0.0322852060198784,\n0.315534800291061,0.608373045921326,0.728230714797974,0.0310389213263988,0.339698702096939,0.940021991729736,-0.151531577110291,0.591902196407318,0.791637539863586,-0.179948955774307,0.305097907781601,0.935165047645569,-0.0883399024605751,0.440414160490036,0.89343798160553,-0.167113959789276,0.136682227253914,0.976417362689972,0.552935898303986,0.244290605187416,-0.796607792377472,0.594970345497131,0.240510985255241,-0.766918957233429,0.457004487514496,0.0586743913590908,-0.887526988983154,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.107540838420391,-0.360320240259171,-0.926609039306641,0.214979261159897,-0.17779715359211,-0.96029794216156,-0.374727010726929,-0.451056748628616,-0.810016989707947,0.571531593799591,0.820161521434784,-0.026204576715827,0.808014631271362,0.548655688762665,-0.214684262871742,0.765193700790405,0.545681536197662,0.341628700494766,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.926164984703064,-0.361916661262512,0.105994082987309,-0.763029158115387,0.474885076284409,0.438486844301224,-0.519362270832062,0.62650853395462,0.581162631511688,-0.505132853984833,0.614961266517639,0.605527400970459,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.763029158115387,0.474885076284409,0.438486844301224,-0.942745447158813,-0.331097900867462,-0.040066309273243,0.148562759160995,0.479341596364975,0.864962875843048,0.0911808460950851,0.673339366912842,0.733689427375793,0.340076804161072,0.586851418018341,0.734815061092377,0.340076804161072,0.586851418018341,0.734815061092377,0.366583049297333,0.495457142591476,0.787489116191864,0.148562759160995,0.479341596364975,0.864962875843048,-0.173014774918556,0.150903835892677,0.973290264606476,-0.24175851047039,0.0892980098724365,0.966218769550323,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.11764945089817,0.119960054755211,0.985783040523529,-0.489890843629837,-0.162440925836563,0.856516182422638,\n-0.24175851047039,0.0892980098724365,0.966218769550323,0.320780336856842,-0.177296921610832,-0.930411577224731,0.391682207584381,0.0344884172081947,-0.919453978538513,0.387060284614563,0.0985353216528893,-0.916774332523346,0.976709187030792,0.208457589149475,-0.050838902592659,0.821033596992493,0.463092446327209,0.333840012550354,0.765193700790405,0.545681536197662,0.341628700494766,0.578510701656342,0.581528306007385,0.571970403194427,0.529006600379944,0.562984585762024,0.63498067855835,0.461020469665527,0.72527813911438,0.511303961277008,0.70020192861557,0.436750024557114,0.564771354198456,0.445416361093521,0.291170030832291,0.846654772758484,0.587356448173523,0.37003019452095,0.719784736633301,0.587356448173523,0.37003019452095,0.719784736633301,0.445416361093521,0.291170030832291,0.846654772758484,0.0771664902567863,0.0724747255444527,0.994380593299866,0.600287616252899,-0.73423707485199,0.317097216844559,-0.418209999799728,-0.452997386455536,0.787333309650421,0.410484403371811,-0.832323789596558,0.372477740049362,0.786963045597076,-0.207125172019005,-0.581195652484894,0.379243552684784,-0.345731914043427,-0.858279526233673,0.95084285736084,-0.116525217890739,-0.286914199590683,0.708127498626709,-0.297497063875198,-0.640352189540863,0.379243552684784,-0.345731914043427,-0.858279526233673,0.786963045597076,-0.207125172019005,-0.581195652484894,0.378357648849487,0.724991083145142,0.575528800487518,0.543150007724762,0.5245680809021,0.65560382604599,0.536732196807861,0.528757095336914,0.657521426677704,0.429811149835587,0.447204560041428,0.784391760826111,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.588989198207855,-0.775294840335846,0.228056281805038,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.588989198207855,-0.775294840335846,0.228056281805038,-0.396454155445099,-0.508855581283569,0.764127016067505,0.154613956809044,0.104744024574757,0.982406854629517,\n0.078959085047245,0.121888175606728,0.989398181438446,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.396454155445099,-0.508855581283569,0.764127016067505,0.154613956809044,0.104744024574757,0.982406854629517,0.524966239929199,0.447477400302887,0.72399890422821,0.591853797435761,0.480847299098969,0.646911799907684,0.078959085047245,0.121888175606728,0.989398181438446,0.600953817367554,0.56422370672226,0.566132545471191,0.591853797435761,0.480847299098969,0.646911799907684,0.524966239929199,0.447477400302887,0.72399890422821,-0.0328970178961754,0.677300930023193,-0.734970211982727,-0.0340137556195259,-0.196621879935265,-0.979889214038849,0.205058068037033,-0.244612783193588,-0.947689712047577,0.339142799377441,0.423890322446823,-0.839820921421051,0.427927106618881,-0.320324927568436,-0.845145165920258,0.205058068037033,-0.244612783193588,-0.947689712047577,0.0686725899577141,-0.344746232032776,-0.936180591583252,0.365317970514297,-0.409484475851059,-0.835981607437134,0.599293649196625,-0.39963087439537,-0.693644165992737,0.500678837299347,-0.355485200881958,-0.789272427558899,0.427927106618881,-0.320324927568436,-0.845145165920258,0.365317970514297,-0.409484475851059,-0.835981607437134,0.599293649196625,-0.39963087439537,-0.693644165992737,0.778241097927094,-0.324259251356125,-0.53777015209198,0.587996542453766,-0.370855212211609,-0.718836843967438,0.500678837299347,-0.355485200881958,-0.789272427558899,0.778241097927094,-0.324259251356125,-0.53777015209198,0.853671669960022,-0.248006701469421,-0.457970976829529,0.751961290836334,-0.373251110315323,-0.543357908725739,0.587996542453766,-0.370855212211609,-0.718836843967438,0.901673018932343,-0.243753165006638,-0.357169687747955,0.751961290836334,-0.373251110315323,-0.543357908725739,0.853671669960022,-0.248006701469421,-0.457970976829529,0.911918580532074,-0.233281582593918,-0.33761540055275,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.71945708990097,-0.687020063400269,0.101906716823578,0.788194417953491,-0.590478122234344,-0.173450663685799,\n-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.696818470954895,-0.717234194278717,0.00436395406723022,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.00150869158096612,-0.98975282907486,0.142783313989639,-0.0595608800649643,-0.947182178497314,0.315116405487061,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.00150869158096612,-0.98975282907486,0.142783313989639,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.58903169631958,-0.6592817902565,0.467321366071701,-0.0595608800649643,-0.947182178497314,0.315116405487061,0.274910867214203,-0.0151522560045123,0.961350321769714,0.152735993266106,0.0633700788021088,0.986233234405518,0.292623817920685,0.00810971390455961,0.956193268299103,0.359952032566071,-0.103429064154625,0.927219986915588,0.0370258577167988,-0.771627187728882,0.63499653339386,-0.00152458809316158,-0.818883240222931,0.573958158493042,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.0595608800649643,-0.947182178497314,0.315116405487061,-0.288185745477676,-0.458648860454559,0.840589225292206,0.0370258577167988,-0.771627187728882,0.63499653339386,-0.0595608800649643,-0.947182178497314,0.315116405487061,-0.58903169631958,-0.6592817902565,0.467321366071701,0.536377429962158,-0.345477372407913,0.770029008388519,0.454795598983765,-0.290122002363205,0.842015504837036,0.477317273616791,-0.364241302013397,0.79968523979187,0.777780055999756,-0.164350166916847,0.606668949127197,0.833742022514343,-0.228465765714645,0.502670586109161,0.571900844573975,-0.259421706199646,0.778222262859344,0.335281848907471,0.203614771366119,0.919851660728455,0.742353081703186,0.249405577778816,0.621859073638916,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.225532427430153,-0.0723189786076546,0.971547782421112,0.274910867214203,-0.0151522560045123,0.961350321769714,0.058000672608614,-0.0229690801352263,0.998052299022675,0.63869446516037,-0.424023747444153,0.642085075378418,0.571900844573975,-0.259421706199646,0.778222262859344,\n0.833742022514343,-0.228465765714645,0.502670586109161,0.804235875606537,-0.38592141866684,0.451961606740952,-0.000327471556374803,-0.115864381194115,0.993264973163605,-0.00104101200122386,-0.114976294338703,0.993367731571198,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.571900844573975,-0.259421706199646,0.778222262859344,0.454795598983765,-0.290122002363205,0.842015504837036,0.292623817920685,0.00810971390455961,0.956193268299103,0.335281848907471,0.203614771366119,0.919851660728455,0.477317273616791,-0.364241302013397,0.79968523979187,0.454795598983765,-0.290122002363205,0.842015504837036,0.571900844573975,-0.259421706199646,0.778222262859344,0.63869446516037,-0.424023747444153,0.642085075378418,0.658608675003052,-0.082901194691658,0.747905075550079,0.824855744838715,-0.0143105983734131,0.565162122249603,0.537741303443909,0.6980841755867,0.472771346569061,0.458152443170547,0.667493462562561,0.586982846260071,0.280117779970169,0.669322490692139,0.688143491744995,0.403074562549591,-0.0995079353451729,0.909741222858429,0.658608675003052,-0.082901194691658,0.747905075550079,0.458152443170547,0.667493462562561,0.586982846260071,0.404132395982742,0.670274078845978,0.622422397136688,0.607683002948761,0.504087805747986,0.61369115114212,0.691345393657684,-0.0592475160956383,0.720091164112091,0.748501777648926,-0.0708362907171249,0.659338533878326,0.537741303443909,0.6980841755867,0.472771346569061,0.29329439997673,0.882676124572754,0.367234617471695,0.562915802001953,0.509836494922638,0.650532484054565,0.458152443170547,0.667493462562561,0.586982846260071,-0.0034278747625649,-0.586137890815735,0.810204088687897,0.157182320952415,-0.535330414772034,0.829888582229614,0.174659475684166,-0.296808987855911,0.938828229904175,-0.00127162621356547,-0.241362497210503,0.970434188842773,0.000567267881706357,0.0375262796878815,0.999295473098755,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.058000672608614,-0.0229690801352263,0.998052299022675,-0.000558733532670885,-0.012703550979495,0.999919176101685,\n0.0589314736425877,-0.0994917079806328,0.993291735649109,-0.00124295917339623,-0.0901384949684143,0.995928466320038,-0.000558733532670885,-0.012703550979495,0.999919176101685,0.058000672608614,-0.0229690801352263,0.998052299022675,0.682068586349487,-0.309287667274475,0.662663996219635,0.0599330253899097,-0.274288892745972,0.95977795124054,0.536377429962158,-0.345477372407913,0.770029008388519,0.682068586349487,-0.309287667274475,0.662663996219635,0.536377429962158,-0.345477372407913,0.770029008388519,0.777780055999756,-0.164350166916847,0.606668949127197,0.404132395982742,0.670274078845978,0.622422397136688,0.748501777648926,-0.0708362907171249,0.659338533878326,0.403074562549591,-0.0995079353451729,0.909741222858429,0.280117779970169,0.669322490692139,0.688143491744995,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.0500486679375172,0.682355880737305,0.729304850101471,6.54090908938088e-005,0.672398924827576,0.740189015865326,-0.000327471556374803,-0.115864381194115,0.993264973163605,0.682068586349487,-0.309287667274475,0.662663996219635,0.691345393657684,-0.0592475160956383,0.720091164112091,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0500486679375172,0.682355880737305,0.729304850101471,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.691345393657684,-0.0592475160956383,0.720091164112091,0.607683002948761,0.504087805747986,0.61369115114212,0.607683002948761,0.504087805747986,0.61369115114212,0.404132395982742,0.670274078845978,0.622422397136688,0.042865764349699,0.703626394271851,0.709275960922241,0.0500486679375172,0.682355880737305,0.729304850101471,0.875346660614014,0.271785736083984,-0.399875849485397,0.908465981483459,0.211989372968674,-0.360208302736282,0.889020264148712,0.213740766048431,-0.404917031526566,0.903672158718109,0.187046512961388,-0.385214596986771,0.66176563501358,-0.249233901500702,-0.707070529460907,0.656103849411011,-0.195678874850273,-0.728860437870026,0.205762028694153,-0.343506038188934,-0.91633266210556,\n0.213652655482292,-0.249391734600067,-0.94454026222229,0.712960124015808,-0.033335629850626,-0.700411677360535,0.727709889411926,0.17916151881218,-0.662072122097015,0.9054034948349,0.148057624697685,-0.397898882627487,0.881142616271973,0.0315838828682899,-0.471794605255127,-0.0648035630583763,-0.03354711830616,-0.997334003448486,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-0.0289378985762596,0.188017979264259,-0.981739223003387,-0.0764778554439545,-0.225456923246384,-0.971246778964996,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,-0.0648035630583763,-0.03354711830616,-0.997334003448486,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.101892530918121,-0.302259355783463,-0.947764337062836,0.142389953136444,-0.3092340528965,-0.940265595912933,0.605917453765869,-0.0272433757781982,-0.795060873031616,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.748518824577332,-0.407584488391876,-0.523062586784363,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.481532573699951,-0.766164124011993,-0.425580739974976,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,-0.295105874538422,-0.732439458370209,-0.613551139831543,-0.804567158222198,-0.249711319804192,0.538809776306152,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.804567158222198,-0.249711319804192,0.538809776306152,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.942177176475525,-0.23178243637085,0.242031067609787,-0.927966833114624,-0.267184227705002,0.25978872179985,0.74054491519928,0.170902013778687,-0.649912059307098,0.746655583381653,0.0161054637283087,-0.665015816688538,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.71757835149765,0.116429716348648,-0.686677098274231,0.893347382545471,0.219659432768822,-0.392020732164383,\n0.942655086517334,0.280740022659302,-0.180517137050629,0.578336894512177,0.572735607624054,-0.580947756767273,0.561173915863037,0.357189118862152,-0.74665904045105,0.205762028694153,-0.343506038188934,-0.91633266210556,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.0764778554439545,-0.225456923246384,-0.971246778964996,0.213652655482292,-0.249391734600067,-0.94454026222229,0.142389953136444,-0.3092340528965,-0.940265595912933,0.101892530918121,-0.302259355783463,-0.947764337062836,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.412438809871674,-0.450837343931198,-0.791605889797211,0.727709889411926,0.17916151881218,-0.662072122097015,0.712960124015808,-0.033335629850626,-0.700411677360535,0.238241225481033,-0.0322869308292866,-0.970669209957123,0.258906006813049,0.225121974945068,-0.939301729202271,0.798646211624146,0.188777849078178,0.571425557136536,0.810771644115448,0.203989744186401,0.54866886138916,0.562908291816711,0.161133006215096,0.810660421848297,0.694722712039948,0.104215458035469,0.711687743663788,0.516355931758881,0.769888043403625,-0.375031918287277,0.744332075119019,0.174594134092331,-0.644582509994507,0.460788071155548,0.137184977531433,-0.876843571662903,0.296686768531799,0.847575604915619,-0.439991503953934,0.306774467229843,-0.0150404367595911,0.951663374900818,-0.072829432785511,0.0172536037862301,0.99719512462616,-0.0692291632294655,-0.189661636948586,0.97940582036972,0.054814163595438,-0.00857834424823523,0.998459756374359,0.893347382545471,0.219659432768822,-0.392020732164383,0.561173915863037,0.357189118862152,-0.74665904045105,0.892053008079529,0.256361722946167,-0.372182875871658,0.904940068721771,0.195454493165016,-0.377996027469635,-0.501008868217468,-0.341375559568405,-0.795269012451172,0.101892530918121,-0.302259355783463,-0.947764337062836,0.080341137945652,-0.401152580976486,-0.912481188774109,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.927966833114624,-0.267184227705002,0.25978872179985,-0.942177176475525,-0.23178243637085,0.242031067609787,\n-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.911426484584808,-0.347711831331253,-0.219996020197868,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.696818470954895,-0.717234194278717,0.00436395406723022,-0.661673307418823,-0.718335151672363,-0.214902579784393,-0.162544935941696,-0.482564568519592,0.860645413398743,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.5846186876297,-0.21980345249176,0.780965745449066,-0.748518824577332,-0.407584488391876,-0.523062586784363,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.911426484584808,-0.347711831331253,-0.219996020197868,0.839759349822998,0.221470341086388,-0.495736926794052,0.892053008079529,0.256361722946167,-0.372182875871658,0.561173915863037,0.357189118862152,-0.74665904045105,0.602514207363129,0.114386186003685,-0.789868593215942,0.881142616271973,0.0315838828682899,-0.471794605255127,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.66176563501358,-0.249233901500702,-0.707070529460907,0.712960124015808,-0.033335629850626,-0.700411677360535,0.898882806301117,0.175670132040977,-0.401434540748596,0.927110075950623,-0.224742949008942,-0.299929141998291,0.939878582954407,0.179825350642204,-0.290329366922379,0.647473335266113,0.339982986450195,0.682048261165619,0.910265743732452,0.359647780656815,0.205109089612961,0.935757219791412,0.300309896469116,0.184857651591301,0.865987479686737,0.269352704286575,0.421324998140335,0.762866199016571,0.277735590934753,0.583864748477936,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.072829432785511,0.0172536037862301,0.99719512462616,-0.176305994391441,-0.141984179615974,0.974041402339935,-0.314308881759644,-0.16680882871151,0.934550523757935,-0.481532573699951,-0.766164124011993,-0.425580739974976,\n-0.748518824577332,-0.407584488391876,-0.523062586784363,-0.911426484584808,-0.347711831331253,-0.219996020197868,-0.661673307418823,-0.718335151672363,-0.214902579784393,0.923468410968781,-0.310481667518616,0.225404515862465,0.8788041472435,-0.274041712284088,0.390646249055862,0.871811747550964,0.251815319061279,0.420158743858337,0.952159941196442,0.220857203006744,0.211219072341919,0.238241225481033,-0.0322869308292866,-0.970669209957123,-0.0648035630583763,-0.03354711830616,-0.997334003448486,-0.0289378985762596,0.188017979264259,-0.981739223003387,0.258906006813049,0.225121974945068,-0.939301729202271,0.38853245973587,0.0891766548156738,-0.917109608650208,0.25152114033699,0.52830183506012,-0.810946524143219,0.0464195013046265,0.499532669782639,-0.865050494670868,0.216437473893166,0.0472434125840664,-0.975152730941772,0.248540058732033,0.104038745164871,-0.96301805973053,0.194792345166206,0.732599914073944,-0.65219122171402,0.296686768531799,0.847575604915619,-0.439991503953934,0.460788071155548,0.137184977531433,-0.876843571662903,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.492029935121536,-0.177097424864769,-0.852374970912933,0.080341137945652,-0.401152580976486,-0.912481188774109,0.101892530918121,-0.302259355783463,-0.947764337062836,0.492029935121536,-0.177097424864769,-0.852374970912933,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.71757835149765,0.116429716348648,-0.686677098274231,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.054814163595438,-0.00857834424823523,0.998459756374359,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.226662054657936,-0.126468449831009,0.965727686882019,0.682208895683289,0.033966027200222,0.730367958545685,0.694722712039948,0.104215458035469,0.711687743663788,0.489940017461777,0.0234622322022915,0.871440351009369,0.335014045238495,0.0223999582231045,0.941946804523468,0.489940017461777,0.0234622322022915,0.871440351009369,0.306774467229843,-0.0150404367595911,0.951663374900818,0.054814163595438,-0.00857834424823523,0.998459756374359,\n0.335014045238495,0.0223999582231045,0.941946804523468,0.811995446681976,0.143728405237198,0.565690279006958,0.798646211624146,0.188777849078178,0.571425557136536,0.694722712039948,0.104215458035469,0.711687743663788,0.682208895683289,0.033966027200222,0.730367958545685,0.556707918643951,0.787832021713257,-0.263433039188385,0.530404925346375,0.817605495452881,-0.224035635590553,0.857278525829315,0.230919152498245,-0.460162937641144,0.856384754180908,0.207969963550568,-0.472603112459183,0.923292398452759,0.235370382666588,-0.303532481193542,0.857278525829315,0.230919152498245,-0.460162937641144,0.530404925346375,0.817605495452881,-0.224035635590553,0.535478115081787,0.838915288448334,-0.0973878055810928,0.535478115081787,0.838915288448334,-0.0973878055810928,0.539530575275421,0.836876928806305,0.092432402074337,0.97637003660202,0.214487105607986,0.0263973921537399,0.923292398452759,0.235370382666588,-0.303532481193542,0.771463513374329,0.571617126464844,0.279460042715073,0.560579180717468,0.758218228816986,0.332950711250305,0.897881627082825,0.0853674784302711,0.4318807721138,0.940263509750366,0.158270344138145,0.301421761512756,0.248540058732033,0.104038745164871,-0.96301805973053,-0.000922495266422629,0.0980329513549805,-0.995182752609253,-0.000970269029494375,0.721597969532013,-0.692311644554138,0.194792345166206,0.732599914073944,-0.65219122171402,0.194792345166206,0.732599914073944,-0.65219122171402,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.0328970178961754,0.677300930023193,-0.734970211982727,0.339142799377441,0.423890322446823,-0.839820921421051,0.296686768531799,0.847575604915619,-0.439991503953934,0.194792345166206,0.732599914073944,-0.65219122171402,0.339142799377441,0.423890322446823,-0.839820921421051,0.454949915409088,0.569741904735565,-0.6844083070755,0.550657391548157,0.552472710609436,-0.625739872455597,0.667598783969879,0.599002242088318,-0.442163020372391,0.516355931758881,0.769888043403625,-0.375031918287277,0.296686768531799,0.847575604915619,-0.439991503953934,0.694567322731018,0.687739253044128,-0.211165577173233,\n0.530404925346375,0.817605495452881,-0.224035635590553,0.556707918643951,0.787832021713257,-0.263433039188385,0.428307920694351,0.88731974363327,-0.170926719903946,0.535478115081787,0.838915288448334,-0.0973878055810928,0.530404925346375,0.817605495452881,-0.224035635590553,0.694567322731018,0.687739253044128,-0.211165577173233,0.672885239124298,0.731690943241119,-0.1088752374053,0.891434013843536,0.447212874889374,-0.0731168016791344,0.539530575275421,0.836876928806305,0.092432402074337,0.535478115081787,0.838915288448334,-0.0973878055810928,0.672885239124298,0.731690943241119,-0.1088752374053,0.648516714572906,0.651950538158417,0.392920613288879,0.560579180717468,0.758218228816986,0.332950711250305,0.771463513374329,0.571617126464844,0.279460042715073,0.539530575275421,0.836876928806305,0.092432402074337,0.891434013843536,0.447212874889374,-0.0731168016791344,0.942655086517334,0.280740022659302,-0.180517137050629,0.935757219791412,0.300309896469116,0.184857651591301,0.910265743732452,0.359647780656815,0.205109089612961,0.578336894512177,0.572735607624054,-0.580947756767273,0.977872133255005,0.203673675656319,-0.0477813258767128,0.952159941196442,0.220857203006744,0.211219072341919,0.935757219791412,0.300309896469116,0.184857651591301,0.942655086517334,0.280740022659302,-0.180517137050629,0.939878582954407,0.179825350642204,-0.290329366922379,0.977872133255005,0.203673675656319,-0.0477813258767128,0.942655086517334,0.280740022659302,-0.180517137050629,0.893347382545471,0.219659432768822,-0.392020732164383,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.633589029312134,0.43701559305191,-0.638421773910522,0.25152114033699,0.52830183506012,-0.810946524143219,0.38853245973587,0.0891766548156738,-0.917109608650208,0.434906035661697,-0.159671977162361,-0.886206328868866,0.280981153249741,-0.215777322649956,-0.935141563415527,0.248540058732033,0.104038745164871,-0.96301805973053,0.460788071155548,0.137184977531433,-0.876843571662903,0.280981153249741,-0.215777322649956,-0.935141563415527,-0.000504601746797562,-0.248110130429268,-0.968731701374054,\n-0.000922495266422629,0.0980329513549805,-0.995182752609253,0.248540058732033,0.104038745164871,-0.96301805973053,0.924298286437988,-0.381513595581055,0.0109577048569918,0.876497626304626,-0.393738061189651,-0.276987820863724,0.923292398452759,0.235370382666588,-0.303532481193542,0.97637003660202,0.214487105607986,0.0263973921537399,0.706851065158844,-0.181566014885902,-0.683663189411163,0.434906035661697,-0.159671977162361,-0.886206328868866,0.460788071155548,0.137184977531433,-0.876843571662903,0.744332075119019,0.174594134092331,-0.644582509994507,0.857278525829315,0.230919152498245,-0.460162937641144,0.829558193683624,-0.330268114805222,-0.450284510850906,0.837246775627136,-0.256030231714249,-0.483183532953262,0.856384754180908,0.207969963550568,-0.472603112459183,0.876497626304626,-0.393738061189651,-0.276987820863724,0.829558193683624,-0.330268114805222,-0.450284510850906,0.857278525829315,0.230919152498245,-0.460162937641144,0.923292398452759,0.235370382666588,-0.303532481193542,0.216437473893166,0.0472434125840664,-0.975152730941772,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-0.000504601746797562,-0.248110130429268,-0.968731701374054,0.280981153249741,-0.215777322649956,-0.935141563415527,0.38853245973587,0.0891766548156738,-0.917109608650208,0.216437473893166,0.0472434125840664,-0.975152730941772,0.280981153249741,-0.215777322649956,-0.935141563415527,0.434906035661697,-0.159671977162361,-0.886206328868866,0.706851065158844,-0.181566014885902,-0.683663189411163,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.38853245973587,0.0891766548156738,-0.917109608650208,0.434906035661697,-0.159671977162361,-0.886206328868866,0.829558193683624,-0.330268114805222,-0.450284510850906,0.848333179950714,-0.297908991575241,-0.43769970536232,0.849871397018433,-0.222601994872093,-0.477668255567551,0.837246775627136,-0.256030231714249,-0.483183532953262,0.876497626304626,-0.393738061189651,-0.276987820863724,0.927110075950623,-0.224742949008942,-0.299929141998291,0.848333179950714,-0.297908991575241,-0.43769970536232,\n0.829558193683624,-0.330268114805222,-0.450284510850906,0.924298286437988,-0.381513595581055,0.0109577048569918,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.927110075950623,-0.224742949008942,-0.299929141998291,0.876497626304626,-0.393738061189651,-0.276987820863724,0.633589029312134,0.43701559305191,-0.638421773910522,0.644856452941895,0.422154635190964,-0.637138664722443,0.240688636898994,0.458865791559219,-0.85528427362442,0.25152114033699,0.52830183506012,-0.810946524143219,0.0464195013046265,0.499532669782639,-0.865050494670868,0.25152114033699,0.52830183506012,-0.810946524143219,0.240688636898994,0.458865791559219,-0.85528427362442,0.0252151377499104,0.378374934196472,-0.9253089427948,0.0464195013046265,0.499532669782639,-0.865050494670868,0.0252151377499104,0.378374934196472,-0.9253089427948,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,0.881142616271973,0.0315838828682899,-0.471794605255127,0.9054034948349,0.148057624697685,-0.397898882627487,0.862718880176544,0.197039529681206,-0.465716183185577,0.830685615539551,0.156212329864502,-0.53437727689743,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.923468410968781,-0.310481667518616,0.225404515862465,0.952159941196442,0.220857203006744,0.211219072341919,0.977872133255005,0.203673675656319,-0.0477813258767128,0.924298286437988,-0.381513595581055,0.0109577048569918,0.911828219890594,-0.323383867740631,0.252966731786728,0.923468410968781,-0.310481667518616,0.225404515862465,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.291106730699539,0.735121071338654,0.612253129482269,0.404132395982742,0.670274078845978,0.622422397136688,0.280117779970169,0.669322490692139,0.688143491744995,0.042865764349699,0.703626394271851,0.709275960922241,-7.2909109860575e-009,0.660060167312622,0.751212775707245,6.54090908938088e-005,0.672398924827576,0.740189015865326,0.0500486679375172,0.682355880737305,0.729304850101471,-0.661673307418823,-0.718335151672363,-0.214902579784393,\n-0.00160102033987641,-0.972155630588531,-0.234330713748932,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,-0.481532573699951,-0.766164124011993,-0.425580739974976,0.562908291816711,0.161133006215096,0.810660421848297,0.237323373556137,0.127464771270752,0.963031828403473,0.306774467229843,-0.0150404367595911,0.951663374900818,0.489940017461777,0.0234622322022915,0.871440351009369,0.562908291816711,0.161133006215096,0.810660421848297,0.489940017461777,0.0234622322022915,0.871440351009369,0.694722712039948,0.104215458035469,0.711687743663788,0.762866199016571,0.277735590934753,0.583864748477936,0.798646211624146,0.188777849078178,0.571425557136536,0.811995446681976,0.143728405237198,0.565690279006958,0.67109352350235,0.25623893737793,0.695683181285858,0.335014045238495,0.0223999582231045,0.941946804523468,0.054814163595438,-0.00857834424823523,0.998459756374359,-0.372333556413651,0.209001079201698,0.904260098934174,0.849871397018433,-0.222601994872093,-0.477668255567551,0.848333179950714,-0.297908991575241,-0.43769970536232,0.888135969638824,0.229056358337402,-0.3984315097332,0.847342550754547,0.298378229141235,-0.439296066761017,0.602514207363129,0.114386186003685,-0.789868593215942,0.561173915863037,0.357189118862152,-0.74665904045105,-0.239916190505028,0.291067600250244,-0.926131665706635,-0.0240183379501104,-0.0193977113813162,-0.999523282051086,-0.0240183379501104,-0.0193977113813162,-0.999523282051086,0.157182320952415,-0.535330414772034,0.829888582229614,0.130942046642303,-0.413219839334488,0.901167869567871,0.235934317111969,-0.318644911050797,0.918041586875916,0.174659475684166,-0.296808987855911,0.938828229904175,0.0464195013046265,0.499532669782639,-0.865050494670868,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,0.216437473893166,0.0472434125840664,-0.975152730941772,0.939878582954407,0.179825350642204,-0.290329366922379,0.893347382545471,0.219659432768822,-0.392020732164383,0.904940068721771,0.195454493165016,-0.377996027469635,\n0.898882806301117,0.175670132040977,-0.401434540748596,0.237323373556137,0.127464771270752,0.963031828403473,-0.00901283789426088,0.0965975746512413,0.995282709598541,-0.072829432785511,0.0172536037862301,0.99719512462616,0.306774467229843,-0.0150404367595911,0.951663374900818,0.746655583381653,0.0161054637283087,-0.665015816688538,0.730062305927277,-0.0445751175284386,-0.681925296783447,0.691866219043732,-0.034970335662365,-0.721178352832794,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.691866219043732,-0.034970335662365,-0.721178352832794,0.45493283867836,-0.156170472502708,-0.876725077629089,0.492029935121536,-0.177097424864769,-0.852374970912933,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.492029935121536,-0.177097424864769,-0.852374970912933,0.45493283867836,-0.156170472502708,-0.876725077629089,0.0628172904253006,-0.389361083507538,-0.918940663337708,0.080341137945652,-0.401152580976486,-0.912481188774109,0.080341137945652,-0.401152580976486,-0.912481188774109,0.0628172904253006,-0.389361083507538,-0.918940663337708,-0.380791038274765,-0.516843378543854,-0.766727566719055,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.380791038274765,-0.516843378543854,-0.766727566719055,-0.772903144359589,-0.524522066116333,-0.357067674398422,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.941800832748413,-0.200851738452911,0.269573330879211,-0.927966833114624,-0.267184227705002,0.25978872179985,-0.804567158222198,-0.249711319804192,0.538809776306152,-0.927966833114624,-0.267184227705002,0.25978872179985,-0.941800832748413,-0.200851738452911,0.269573330879211,-0.840525031089783,-0.0687118694186211,0.537397801876068,-0.239916190505028,0.291067600250244,-0.926131665706635,0.561173915863037,0.357189118862152,-0.74665904045105,0.578336894512177,0.572735607624054,-0.580947756767273,-0.420213580131531,0.558342278003693,-0.715314149856567,-0.372333556413651,0.209001079201698,0.904260098934174,\n0.054814163595438,-0.00857834424823523,0.998459756374359,-0.226662054657936,-0.126468449831009,0.965727686882019,-0.226662054657936,-0.126468449831009,0.965727686882019,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.197339624166489,-0.302571266889572,0.932473957538605,-0.132603287696838,-0.345454096794128,0.929019808769226,-0.197339624166489,-0.302571266889572,0.932473957538605,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.314308881759644,-0.16680882871151,0.934550523757935,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.58903169631958,-0.6592817902565,0.467321366071701,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.58903169631958,-0.6592817902565,0.467321366071701,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.942177176475525,-0.23178243637085,0.242031067609787,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.696818470954895,-0.717234194278717,0.00436395406723022,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.942177176475525,-0.23178243637085,0.242031067609787,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.0282435193657875,-0.397893935441971,0.916996598243713,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.162544935941696,-0.482564568519592,0.860645413398743,-0.197339624166489,-0.302571266889572,0.932473957538605,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.0282435193657875,-0.397893935441971,0.916996598243713,-0.132603287696838,-0.345454096794128,0.929019808769226,0.647473335266113,0.339982986450195,0.682048261165619,0.762866199016571,0.277735590934753,0.583864748477936,0.67109352350235,0.25623893737793,0.695683181285858,0.355668604373932,0.293017596006393,0.887491166591644,-0.840525031089783,-0.0687118694186211,0.537397801876068,-0.771387696266174,0.0395333021879196,0.635136306285858,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.804567158222198,-0.249711319804192,0.538809776306152,\n-0.5846186876297,-0.21980345249176,0.780965745449066,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.771387696266174,0.0395333021879196,0.635136306285858,0.539530575275421,0.836876928806305,0.092432402074337,0.771463513374329,0.571617126464844,0.279460042715073,0.940263509750366,0.158270344138145,0.301421761512756,0.97637003660202,0.214487105607986,0.0263973921537399,0.0589314736425877,-0.0994917079806328,0.993291735649109,0.058000672608614,-0.0229690801352263,0.998052299022675,0.274910867214203,-0.0151522560045123,0.961350321769714,0.359952032566071,-0.103429064154625,0.927219986915588,-0.00127162621356547,-0.241362497210503,0.970434188842773,0.174659475684166,-0.296808987855911,0.938828229904175,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.000567267881706357,0.0375262796878815,0.999295473098755,0.174659475684166,-0.296808987855911,0.938828229904175,0.235934317111969,-0.318644911050797,0.918041586875916,0.225532427430153,-0.0723189786076546,0.971547782421112,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.099254384636879,-0.0100136240944266,0.995011687278748,0.225532427430153,-0.0723189786076546,0.971547782421112,0.235934317111969,-0.318644911050797,0.918041586875916,0.0292022190988064,-0.160741657018662,0.98656439781189,0.157182320952415,-0.535330414772034,0.829888582229614,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.00152458809316158,-0.818883240222931,0.573958158493042,0.0370258577167988,-0.771627187728882,0.63499653339386,0.130942046642303,-0.413219839334488,0.901167869567871,0.157182320952415,-0.535330414772034,0.829888582229614,0.0370258577167988,-0.771627187728882,0.63499653339386,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.0289378985762596,0.188017979264259,-0.981739223003387,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-5.31019793470477e-007,0.257037252187729,-0.966401517391205,-0.00141350529156625,0.303659945726395,-0.952779412269592,-0.0289378985762596,0.188017979264259,-0.981739223003387,-0.00141350529156625,0.303659945726395,-0.952779412269592,\n0.234113991260529,0.373340249061584,-0.89766788482666,0.258906006813049,0.225121974945068,-0.939301729202271,0.696373343467712,0.309285789728165,-0.647616028785706,0.727709889411926,0.17916151881218,-0.662072122097015,0.258906006813049,0.225121974945068,-0.939301729202271,0.234113991260529,0.373340249061584,-0.89766788482666,0.727709889411926,0.17916151881218,-0.662072122097015,0.696373343467712,0.309285789728165,-0.647616028785706,0.903672158718109,0.187046512961388,-0.385214596986771,0.9054034948349,0.148057624697685,-0.397898882627487,0.862718880176544,0.197039529681206,-0.465716183185577,0.9054034948349,0.148057624697685,-0.397898882627487,0.903672158718109,0.187046512961388,-0.385214596986771,0.889020264148712,0.213740766048431,-0.404917031526566,0.696373343467712,0.309285789728165,-0.647616028785706,0.644856452941895,0.422154635190964,-0.637138664722443,0.875346660614014,0.271785736083984,-0.399875849485397,0.903672158718109,0.187046512961388,-0.385214596986771,0.644856452941895,0.422154635190964,-0.637138664722443,0.696373343467712,0.309285789728165,-0.647616028785706,0.234113991260529,0.373340249061584,-0.89766788482666,0.240688636898994,0.458865791559219,-0.85528427362442,0.240688636898994,0.458865791559219,-0.85528427362442,0.234113991260529,0.373340249061584,-0.89766788482666,-0.00141350529156625,0.303659945726395,-0.952779412269592,0.0252151377499104,0.378374934196472,-0.9253089427948,0.0252151377499104,0.378374934196472,-0.9253089427948,-0.00141350529156625,0.303659945726395,-0.952779412269592,-5.31019793470477e-007,0.257037252187729,-0.966401517391205,9.78030900711246e-009,0.344052970409393,-0.93895024061203,0.335281848907471,0.203614771366119,0.919851660728455,0.292623817920685,0.00810971390455961,0.956193268299103,0.152735993266106,0.0633700788021088,0.986233234405518,0.144889816641808,0.162904694676399,0.975945174694061,0.742353081703186,0.249405577778816,0.621859073638916,0.335281848907471,0.203614771366119,0.919851660728455,0.144889816641808,0.162904694676399,0.975945174694061,0.562908291816711,0.161133006215096,0.810660421848297,\n0.952159941196442,0.220857203006744,0.211219072341919,0.871811747550964,0.251815319061279,0.420158743858337,0.865987479686737,0.269352704286575,0.421324998140335,0.935757219791412,0.300309896469116,0.184857651591301,0.633589029312134,0.43701559305191,-0.638421773910522,0.847342550754547,0.298378229141235,-0.439296066761017,0.875346660614014,0.271785736083984,-0.399875849485397,0.644856452941895,0.422154635190964,-0.637138664722443,0.837246775627136,-0.256030231714249,-0.483183532953262,0.849871397018433,-0.222601994872093,-0.477668255567551,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.706851065158844,-0.181566014885902,-0.683663189411163,0.837246775627136,-0.256030231714249,-0.483183532953262,0.706851065158844,-0.181566014885902,-0.683663189411163,0.744332075119019,0.174594134092331,-0.644582509994507,0.856384754180908,0.207969963550568,-0.472603112459183,0.516355931758881,0.769888043403625,-0.375031918287277,0.556707918643951,0.787832021713257,-0.263433039188385,0.856384754180908,0.207969963550568,-0.472603112459183,0.744332075119019,0.174594134092331,-0.644582509994507,0.428307920694351,0.88731974363327,-0.170926719903946,0.556707918643951,0.787832021713257,-0.263433039188385,0.516355931758881,0.769888043403625,-0.375031918287277,0.667598783969879,0.599002242088318,-0.442163020372391,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.849871397018433,-0.222601994872093,-0.477668255567551,0.847342550754547,0.298378229141235,-0.439296066761017,0.633589029312134,0.43701559305191,-0.638421773910522,-0.0764778554439545,-0.225456923246384,-0.971246778964996,-0.0648035630583763,-0.03354711830616,-0.997334003448486,0.238241225481033,-0.0322869308292866,-0.970669209957123,0.213652655482292,-0.249391734600067,-0.94454026222229,0.712960124015808,-0.033335629850626,-0.700411677360535,0.66176563501358,-0.249233901500702,-0.707070529460907,0.213652655482292,-0.249391734600067,-0.94454026222229,0.238241225481033,-0.0322869308292866,-0.970669209957123,-0.154773816466331,-0.473390430212021,-0.867148518562317,\n1.08000335785619e-007,-0.503708183765411,-0.863873839378357,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,-0.0764778554439545,-0.225456923246384,-0.971246778964996,0.152735993266106,0.0633700788021088,0.986233234405518,0.274910867214203,-0.0151522560045123,0.961350321769714,0.225532427430153,-0.0723189786076546,0.971547782421112,0.099254384636879,-0.0100136240944266,0.995011687278748,0.152735993266106,0.0633700788021088,0.986233234405518,0.099254384636879,-0.0100136240944266,0.995011687278748,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.144889816641808,0.162904694676399,0.975945174694061,0.562908291816711,0.161133006215096,0.810660421848297,0.144889816641808,0.162904694676399,0.975945174694061,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.237323373556137,0.127464771270752,0.963031828403473,0.8788041472435,-0.274041712284088,0.390646249055862,0.923468410968781,-0.310481667518616,0.225404515862465,0.911828219890594,-0.323383867740631,0.252966731786728,0.86302787065506,-0.341093569993973,0.372609823942184,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.661673307418823,-0.718335151672363,-0.214902579784393,-0.696818470954895,-0.717234194278717,0.00436395406723022,0.839759349822998,0.221470341086388,-0.495736926794052,0.737981557846069,0.239907741546631,-0.630735695362091,0.754355251789093,0.176875531673431,-0.632189214229584,0.830685615539551,0.156212329864502,-0.53437727689743,0.0292022190988064,-0.160741657018662,0.98656439781189,0.235934317111969,-0.318644911050797,0.918041586875916,0.130942046642303,-0.413219839334488,0.901167869567871,-0.176305994391441,-0.141984179615974,0.974041402339935,-0.176305994391441,-0.141984179615974,0.974041402339935,0.130942046642303,-0.413219839334488,0.901167869567871,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.314308881759644,-0.16680882871151,0.934550523757935,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.230195790529251,-0.346913009881973,0.909209132194519,\n-0.314308881759644,-0.16680882871151,0.934550523757935,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.099254384636879,-0.0100136240944266,0.995011687278748,0.0292022190988064,-0.160741657018662,0.98656439781189,0.865987479686737,0.269352704286575,0.421324998140335,0.810771644115448,0.203989744186401,0.54866886138916,0.798646211624146,0.188777849078178,0.571425557136536,0.762866199016571,0.277735590934753,0.583864748477936,0.865987479686737,0.269352704286575,0.421324998140335,0.871811747550964,0.251815319061279,0.420158743858337,0.742353081703186,0.249405577778816,0.621859073638916,0.810771644115448,0.203989744186401,0.54866886138916,0.8788041472435,-0.274041712284088,0.390646249055862,0.833742022514343,-0.228465765714645,0.502670586109161,0.742353081703186,0.249405577778816,0.621859073638916,0.871811747550964,0.251815319061279,0.420158743858337,0.833742022514343,-0.228465765714645,0.502670586109161,0.8788041472435,-0.274041712284088,0.390646249055862,0.86302787065506,-0.341093569993973,0.372609823942184,0.804235875606537,-0.38592141866684,0.451961606740952,0.560579180717468,0.758218228816986,0.332950711250305,0.537741303443909,0.6980841755867,0.472771346569061,0.824855744838715,-0.0143105983734131,0.565162122249603,0.897881627082825,0.0853674784302711,0.4318807721138,0.560579180717468,0.758218228816986,0.332950711250305,0.648516714572906,0.651950538158417,0.392920613288879,0.29329439997673,0.882676124572754,0.367234617471695,0.537741303443909,0.6980841755867,0.472771346569061,-0.431082636117935,0.669595658779144,0.604821860790253,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.60768449306488,0.504088938236237,0.613688766956329,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.775685489177704,-0.0603891722857952,0.628223836421967,\n-0.431082636117935,0.669595658779144,0.604821860790253,-0.324628859758377,0.674010813236237,0.663570284843445,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.223823264241219,-0.0781873688101768,0.971488475799561,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.300837725400925,0.085910752415657,0.949797868728638,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.300837725400925,0.085910752415657,0.949797868728638,-0.542048811912537,0.261238425970078,0.79870992898941,-0.46170049905777,0.186353012919426,0.867240011692047,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.0535679198801517,-0.0883782878518105,0.994645535945892,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.60768449306488,0.504088938236237,0.613688766956329,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.0535679198801517,-0.0883782878518105,0.994645535945892,-0.60768449306488,0.504088938236237,0.613688766956329,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.431082636117935,0.669595658779144,0.604821860790253,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.927313208580017,0.3043152987957,-0.217904642224312,\n-0.945763826370239,0.294518440961838,-0.137075424194336,-0.907857835292816,0.213884130120277,-0.360621273517609,0.804645359516144,-0.23887425661087,0.543585240840912,0.928109109401703,-0.270218104124069,0.256116449832916,0.942616164684296,-0.229998171329498,0.242023915052414,0.821004927158356,-0.27689054608345,0.499282002449036,-0.0987945944070816,-0.283014118671417,-0.95401394367218,0.498120248317719,-0.335890352725983,-0.799408435821533,0.437422394752502,-0.487632155418396,-0.755563676357269,-0.0824775397777557,-0.385316282510757,-0.919091284275055,0.129383936524391,-0.521730244159698,-0.843242168426514,-0.122972406446934,-0.410810470581055,-0.903389453887939,-0.213652208447456,-0.249391779303551,-0.944540321826935,0.0764780566096306,-0.225457280874252,-0.971246659755707,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.890709757804871,0.27239003777504,-0.363922744989395,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.762536406517029,0.295603901147842,-0.57546204328537,-0.896749377250671,0.217612341046333,0.3853380382061,-0.857216417789459,0.268806040287018,0.43923032283783,-0.937493622303009,0.316276133060455,0.145172759890556,-0.947259664535522,0.288537085056305,0.139446943998337,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.46170049905777,0.186353012919426,0.867240011692047,-0.19649812579155,0.101020708680153,0.975286245346069,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.937493622303009,0.316276133060455,0.145172759890556,-0.857216417789459,0.268806040287018,0.43923032283783,-0.856140553951263,0.267054259777069,0.442386031150818,\n-0.949352085590363,0.231479719281197,0.21248009800911,0.0648036450147629,-0.0335458181798458,-0.997334063053131,0.0289377775043249,0.188017472624779,-0.981739282608032,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.258904993534088,0.225121468305588,-0.939302146434784,0.0289377775043249,0.188017472624779,-0.981739282608032,-0.981611013412476,0.117763727903366,-0.150238215923309,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.756916880607605,0.234977602958679,0.609805166721344,-0.623560965061188,0.103526078164577,0.774889707565308,-0.76946359872818,0.151790544390678,0.620391309261322,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.557555019855499,0.7959104180336,0.235921680927277,-0.937403380870819,0.166482493281364,0.305873274803162,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.560215890407562,0.757637023925781,0.334879487752914,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.000922495266422629,0.0980329513549805,-0.995182752609253,-0.199406370520592,0.723391234874725,-0.66101610660553,\n-0.249231114983559,0.10294646769762,-0.962956845760345,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.0328970178961754,0.677300930023193,-0.734970211982727,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.453488618135452,0.205984279513359,-0.867132365703583,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.721357464790344,0.650649428367615,0.237273663282394,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.557555019855499,0.7959104180336,0.235921680927277,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.937403380870819,0.166482493281364,0.305873274803162,-0.918076574802399,-0.319764405488968,0.234277844429016,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.000922495266422629,0.0980329513549805,-0.995182752609253,-0.000504601746797562,-0.248110130429268,-0.968731701374054,-0.217749357223511,0.0478734634816647,-0.974829912185669,\n-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.000504601746797562,-0.248110130429268,-0.968731701374054,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.217749357223511,0.0478734634816647,-0.974829912185669,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.0252151340246201,0.378374934196472,-0.9253089427948,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.251288145780563,0.529204964637756,-0.810429751873016,0.129383936524391,-0.521730244159698,-0.843242168426514,0.0764780566096306,-0.225457280874252,-0.971246659755707,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.847580134868622,0.196702495217323,-0.492865085601807,\n-0.869192600250244,0.256745725870132,-0.422594249248505,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.122972406446934,-0.410810470581055,-0.903389453887939,0.129383936524391,-0.521730244159698,-0.843242168426514,0.355752408504486,-0.498135715723038,-0.790759801864624,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.949352085590363,0.231479719281197,0.21248009800911,-0.977315187454224,0.206456959247589,-0.0472285002470016,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.937493622303009,0.316276133060455,0.145172759890556,-0.937493622303009,0.316276133060455,0.145172759890556,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.947259664535522,0.288537085056305,0.139446943998337,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0499880313873291,0.682301819324493,0.72935962677002,6.54090908938088e-005,0.672398924827576,0.740189015865326,-7.2909109860575e-009,0.660060167312622,0.751212775707245,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.46170049905777,0.186353012919426,0.867240011692047,-0.56521064043045,0.138002142310143,0.813321769237518,-0.19649812579155,0.101020708680153,0.975286245346069,-0.916763663291931,0.137710228562355,0.374940365552902,-0.91884845495224,0.158920049667358,0.361195176839828,-0.756916880607605,0.234977602958679,0.609805166721344,-0.76946359872818,0.151790544390678,0.620391309261322,-0.34188050031662,0.0427594222128391,0.938770115375519,0.372333496809006,0.209000527858734,0.904260218143463,0.119991220533848,0.0380257852375507,0.992046475410461,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.934890508651733,-0.354153573513031,-0.0235587190836668,\n-0.930424094200134,-0.303478807210922,0.205454647541046,-0.918076574802399,-0.319764405488968,0.234277844429016,-0.937403380870819,0.166482493281364,0.305873274803162,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.918076574802399,-0.319764405488968,0.234277844429016,0.252460122108459,-0.750463306903839,-0.61079353094101,0.471433281898499,-0.76721602678299,-0.434891045093536,0.734110653400421,-0.4181247651577,-0.535026371479034,0.355752408504486,-0.498135715723038,-0.790759801864624,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.19649812579155,0.101020708680153,0.975286245346069,-0.14869236946106,-0.0228312611579895,0.988619923591614,0.0323158428072929,-0.124152012169361,0.991736829280853,-0.56521064043045,0.138002142310143,0.813321769237518,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.14869236946106,-0.0228312611579895,0.988619923591614,-0.19649812579155,0.101020708680153,0.975286245346069,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.56521064043045,0.138002142310143,0.813321769237518,-0.791948556900024,0.189529091119766,0.580427587032318,-0.76946359872818,0.151790544390678,0.620391309261322,-0.896749377250671,0.217612341046333,0.3853380382061,-0.916763663291931,0.137710228562355,0.374940365552902,-0.76946359872818,0.151790544390678,0.620391309261322,-0.791948556900024,0.189529091119766,0.580427587032318,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.757742166519165,0.0436116605997086,-0.6510950922966,-0.747396409511566,0.179795786738396,-0.639587461948395,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.693207740783691,0.00517747504636645,-0.720719218254089,-0.736777663230896,0.0245511569082737,-0.675689220428467,-0.757742166519165,0.0436116605997086,-0.6510950922966,-0.0824775397777557,-0.385316282510757,-0.919091284275055,0.437422394752502,-0.487632155418396,-0.755563676357269,0.381186455488205,-0.513081967830658,-0.769053816795349,\n-0.0642701610922813,-0.378672003746033,-0.923296749591827,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.767184436321259,-0.520890653133392,-0.374300688505173,0.834830164909363,-0.436789900064468,-0.335072010755539,0.804645359516144,-0.23887425661087,0.543585240840912,0.840525209903717,-0.068711943924427,0.537397503852844,0.943277299404144,-0.202248081564903,0.263293832540512,0.928109109401703,-0.270218104124069,0.256116449832916,0.804645359516144,-0.23887425661087,0.543585240840912,0.821004927158356,-0.27689054608345,0.499282002449036,0.555963099002838,-0.328692525625229,0.76345682144165,0.6691654920578,-0.191945850849152,0.717895746231079,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.916763663291931,0.137710228562355,0.374940365552902,-0.896749377250671,0.217612341046333,0.3853380382061,-0.947259664535522,0.288537085056305,0.139446943998337,0.372333496809006,0.209000527858734,0.904260218143463,0.369765430688858,-0.00654551573097706,0.929102063179016,0.119991220533848,0.0380257852375507,0.992046475410461,0.166143178939819,-0.158774629235268,0.973235368728638,0.119991220533848,0.0380257852375507,0.992046475410461,0.369765430688858,-0.00654551573097706,0.929102063179016,0.555963099002838,-0.328692525625229,0.76345682144165,0.821004927158356,-0.27689054608345,0.499282002449036,0.569704055786133,-0.669814586639404,0.476220279932022,0.29104819893837,-0.456484824419022,0.840780913829803,0.569704055786133,-0.669814586639404,0.476220279932022,0.821004927158356,-0.27689054608345,0.499282002449036,0.942616164684296,-0.229998171329498,0.242023915052414,0.552965581417084,-0.801727950572968,0.226851031184196,0.698322951793671,-0.715752601623535,0.00657681748270988,0.552965581417084,-0.801727950572968,0.226851031184196,0.942616164684296,-0.229998171329498,0.242023915052414,0.969441294670105,-0.244898587465286,0.0144304987043142,0.320217043161392,-0.31071874499321,0.894938468933105,0.571035802364349,-0.157328203320503,0.805708348751068,0.6691654920578,-0.191945850849152,0.717895746231079,0.555963099002838,-0.328692525625229,0.76345682144165,\n0.771388173103333,0.0395334213972092,0.63513571023941,0.840525209903717,-0.068711943924427,0.537397503852844,0.804645359516144,-0.23887425661087,0.543585240840912,0.6691654920578,-0.191945850849152,0.717895746231079,0.571035802364349,-0.157328203320503,0.805708348751068,0.771388173103333,0.0395334213972092,0.63513571023941,0.6691654920578,-0.191945850849152,0.717895746231079,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.937403380870819,0.166482493281364,0.305873274803162,-0.557555019855499,0.7959104180336,0.235921680927277,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.223823264241219,-0.0781873688101768,0.971488475799561,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.0504573062062263,-0.359267920255661,0.931869447231293,0.29104819893837,-0.456484824419022,0.840780913829803,0.569704055786133,-0.669814586639404,0.476220279932022,0.0579886250197887,-0.947378635406494,0.314819037914276,-0.0412573479115963,-0.771816492080688,0.634505391120911,0.0579886250197887,-0.947378635406494,0.314819037914276,0.552965581417084,-0.801727950572968,0.226851031184196,-0.00150869158096612,-0.98975282907486,0.142783313989639,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.000327471556374803,-0.115864381194115,0.993264973163605,6.54090908938088e-005,0.672398924827576,0.740189015865326,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.0535679198801517,-0.0883782878518105,0.994645535945892,-0.000327471556374803,-0.115864381194115,0.993264973163605,-0.0535679198801517,-0.0883782878518105,0.994645535945892,\n-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.00104101200122386,-0.114976294338703,0.993367731571198,0.000567267881706357,0.0375262796878815,0.999295473098755,-0.000558733532670885,-0.012703550979495,0.999919176101685,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.00127162621356547,-0.241362497210503,0.970434188842773,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.0412573479115963,-0.771816492080688,0.634505391120911,0.0579886250197887,-0.947378635406494,0.314819037914276,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.00152458809316158,-0.818883240222931,0.573958158493042,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.00104101200122386,-0.114976294338703,0.993367731571198,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.00124295917339623,-0.0901384949684143,0.995928466320038,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.000558733532670885,-0.012703550979495,0.999919176101685,-0.00124295917339623,-0.0901384949684143,0.995928466320038,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.00127162621356547,-0.241362497210503,0.970434188842773,0.000567267881706357,0.0375262796878815,0.999295473098755,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.223823264241219,-0.0781873688101768,0.971488475799561,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,0.0289377775043249,0.188017472624779,-0.981739282608032,\n0.00141346117015928,0.303658157587051,-0.95278000831604,-5.31019793470477e-007,0.257037252187729,-0.966401517391205,0.0289377775043249,0.188017472624779,-0.981739282608032,-0.258904993534088,0.225121468305588,-0.939302146434784,-0.234113723039627,0.373339533805847,-0.897668302059174,0.00141346117015928,0.303658157587051,-0.95278000831604,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.0252151340246201,0.378374934196472,-0.9253089427948,0.00141346117015928,0.303658157587051,-0.95278000831604,-0.234113723039627,0.373339533805847,-0.897668302059174,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.486983984708786,0.772737681865692,-0.407090991735458,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.486983984708786,0.772737681865692,-0.407090991735458,-0.535965800285339,0.788156151771545,-0.30257323384285,\n0.0764780566096306,-0.225457280874252,-0.971246659755707,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,0.0764780566096306,-0.225457280874252,-0.971246659755707,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.238240316510201,-0.0322862826287746,-0.970669448375702,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-0.798387050628662,0.133906185626984,-0.587066650390625,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.0824775397777557,-0.385316282510757,-0.919091284275055,-0.0642701610922813,-0.378672003746033,-0.923296749591827,-0.453366041183472,-0.142135575413704,-0.879918575286865,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.0987945944070816,-0.283014118671417,-0.95401394367218,-0.0824775397777557,-0.385316282510757,-0.919091284275055,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.122972406446934,-0.410810470581055,-0.903389453887939,-0.11159410327673,-0.287050694227219,-0.951393008232117,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.122972406446934,-0.410810470581055,-0.903389453887939,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.258904993534088,0.225121468305588,-0.939302146434784,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.234113723039627,0.373339533805847,-0.897668302059174,\n-0.258904993534088,0.225121468305588,-0.939302146434784,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.234113723039627,0.373339533805847,-0.897668302059174,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.486983984708786,0.772737681865692,-0.407090991735458,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.486983984708786,0.772737681865692,-0.407090991735458,-0.0412573479115963,-0.771816492080688,0.634505391120911,-0.00152458809316158,-0.818883240222931,0.573958158493042,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.160209238529205,-0.537021696567535,0.828215360641479,0.29104819893837,-0.456484824419022,0.840780913829803,-0.0412573479115963,-0.771816492080688,0.634505391120911,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.0504573062062263,-0.359267920255661,0.931869447231293,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.51021933555603,-0.415738612413406,0.752886176109314,\n-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.324628859758377,0.674010813236237,0.663570284843445,-0.47534304857254,0.696664929389954,0.537314653396606,-0.285846680402756,0.740470588207245,0.608272194862366,-0.559998273849487,0.512845575809479,0.65068531036377,-0.47534304857254,0.696664929389954,0.537314653396606,-0.324628859758377,0.674010813236237,0.663570284843445,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.977315187454224,0.206456959247589,-0.0472285002470016,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.217749357223511,0.0478734634816647,-0.974829912185669,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.217749357223511,0.0478734634816647,-0.974829912185669,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.836360037326813,-0.0850801542401314,-0.541537880897522,\n-0.798387050628662,0.133906185626984,-0.587066650390625,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.762536406517029,0.295603901147842,-0.57546204328537,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.798387050628662,0.133906185626984,-0.587066650390625,0.913829922676086,-0.341083079576492,-0.220402225852013,0.663747429847717,-0.717649459838867,-0.210757240653038,0.698322951793671,-0.715752601623535,0.00657681748270988,0.969441294670105,-0.244898587465286,0.0144304987043142,0.437422394752502,-0.487632155418396,-0.755563676357269,0.834830164909363,-0.436789900064468,-0.335072010755539,0.767184436321259,-0.520890653133392,-0.374300688505173,0.381186455488205,-0.513081967830658,-0.769053816795349,0.734110653400421,-0.4181247651577,-0.535026371479034,0.913829922676086,-0.341083079576492,-0.220402225852013,0.834830164909363,-0.436789900064468,-0.335072010755539,0.437422394752502,-0.487632155418396,-0.755563676357269,0.498120248317719,-0.335890352725983,-0.799408435821533,0.663747429847717,-0.717649459838867,-0.210757240653038,0.913829922676086,-0.341083079576492,-0.220402225852013,0.734110653400421,-0.4181247651577,-0.535026371479034,0.471433281898499,-0.76721602678299,-0.434891045093536,-0.0466683618724346,0.500033855438232,-0.864747524261475,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-0.0252151340246201,0.378374934196472,-0.9253089427948,-0.0252151340246201,0.378374934196472,-0.9253089427948,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-5.31019793470477e-007,0.257037252187729,-0.966401517391205,0.00141346117015928,0.303658157587051,-0.95278000831604,0.129383936524391,-0.521730244159698,-0.843242168426514,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,0.252460122108459,-0.750463306903839,-0.61079353094101,0.471433281898499,-0.76721602678299,-0.434891045093536,0.252460122108459,-0.750463306903839,-0.61079353094101,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,\n-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,0.663747429847717,-0.717649459838867,-0.210757240653038,0.471433281898499,-0.76721602678299,-0.434891045093536,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,0.698322951793671,-0.715752601623535,0.00657681748270988,0.663747429847717,-0.717649459838867,-0.210757240653038,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.00150869158096612,-0.98975282907486,0.142783313989639,0.552965581417084,-0.801727950572968,0.226851031184196,0.698322951793671,-0.715752601623535,0.00657681748270988,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.836360037326813,-0.0850801542401314,-0.541537880897522,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.836360037326813,-0.0850801542401314,-0.541537880897522,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.714573800563812,0.00537209678441286,-0.699539422988892,\n-0.715955674648285,0.135700687766075,-0.684830486774445,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.453366041183472,-0.142135575413704,-0.879918575286865,-0.693207740783691,0.00517747504636645,-0.720719218254089,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.798387050628662,0.133906185626984,-0.587066650390625,-0.836360037326813,-0.0850801542401314,-0.541537880897522,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.721792817115784,0.204645067453384,-0.661162257194519,0.166143178939819,-0.158774629235268,0.973235368728638,0.0323158428072929,-0.124152012169361,0.991736829280853,-0.14869236946106,-0.0228312611579895,0.988619923591614,0.119991220533848,0.0380257852375507,0.992046475410461,-0.34188050031662,0.0427594222128391,0.938770115375519,0.119991220533848,0.0380257852375507,0.992046475410461,-0.14869236946106,-0.0228312611579895,0.988619923591614,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.0504573062062263,-0.359267920255661,0.931869447231293,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.0969914272427559,-0.0219030473381281,0.99504417181015,0.0323158428072929,-0.124152012169361,0.991736829280853,0.29104819893837,-0.456484824419022,0.840780913829803,-0.0504573062062263,-0.359267920255661,0.931869447231293,0.0323158428072929,-0.124152012169361,0.991736829280853,0.166143178939819,-0.158774629235268,0.973235368728638,0.29104819893837,-0.456484824419022,0.840780913829803,0.166143178939819,-0.158774629235268,0.973235368728638,0.244560360908508,-0.223172500729561,0.943601787090302,0.320217043161392,-0.31071874499321,0.894938468933105,0.555963099002838,-0.328692525625229,0.76345682144165,-0.223823264241219,-0.0781873688101768,0.971488475799561,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.896749377250671,0.217612341046333,0.3853380382061,\n-0.791948556900024,0.189529091119766,0.580427587032318,-0.857216417789459,0.268806040287018,0.43923032283783,-0.542048811912537,0.261238425970078,0.79870992898941,-0.856140553951263,0.267054259777069,0.442386031150818,-0.857216417789459,0.268806040287018,0.43923032283783,-0.46170049905777,0.186353012919426,0.867240011692047,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.560215890407562,0.757637023925781,0.334879487752914,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.47534304857254,0.696664929389954,0.537314653396606,-0.559998273849487,0.512845575809479,0.65068531036377,-0.658022820949554,0.640722334384918,0.395576566457748,-0.560215890407562,0.757637023925781,0.334879487752914,-0.47534304857254,0.696664929389954,0.537314653396606,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.947259664535522,0.288537085056305,0.139446943998337,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.981611013412476,0.117763727903366,-0.150238215923309,\n-0.985917925834656,0.0740947499871254,0.149919137358665,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.988040089607239,-0.0323765277862549,0.150760009884834,-0.91884845495224,0.158920049667358,0.361195176839828,-0.916763663291931,0.137710228562355,0.374940365552902,-0.997650623321533,0.0179209169000387,-0.0661220476031303,-0.981611013412476,0.117763727903366,-0.150238215923309,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.890709757804871,0.27239003777504,-0.363922744989395,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.981611013412476,0.117763727903366,-0.150238215923309,-0.997650623321533,0.0179209169000387,-0.0661220476031303,-0.988040089607239,-0.0323765277862549,0.150760009884834,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.890709757804871,0.27239003777504,-0.363922744989395,0.928109109401703,-0.270218104124069,0.256116449832916,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.969441294670105,-0.244898587465286,0.0144304987043142,0.942616164684296,-0.229998171329498,0.242023915052414,0.536377429962158,-0.345477372407913,0.770029008388519,0.359952032566071,-0.103429064154625,0.927219986915588,0.292623817920685,0.00810971390455961,0.956193268299103,0.454795598983765,-0.290122002363205,0.842015504837036,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0589314736425877,-0.0994917079806328,0.993291735649109,0.359952032566071,-0.103429064154625,0.927219986915588,0.536377429962158,-0.345477372407913,0.770029008388519,-0.00104101200122386,-0.114976294338703,0.993367731571198,-0.00124295917339623,-0.0901384949684143,0.995928466320038,0.0589314736425877,-0.0994917079806328,0.993291735649109,0.0599330253899097,-0.274288892745972,0.95977795124054,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.300837725400925,0.085910752415657,0.949797868728638,-0.296950221061707,-0.0679281502962112,0.952473819255829,\n-0.480668127536774,-0.309450268745422,0.820486843585968,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.542048811912537,0.261238425970078,0.79870992898941,-0.300837725400925,0.085910752415657,0.949797868728638,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.871616542339325,-0.254917442798615,0.418690472841263,-0.856140553951263,0.267054259777069,0.442386031150818,-0.542048811912537,0.261238425970078,0.79870992898941,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.949352085590363,0.231479719281197,0.21248009800911,-0.856140553951263,0.267054259777069,0.442386031150818,-0.871616542339325,-0.254917442798615,0.418690472841263,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.977315187454224,0.206456959247589,-0.0472285002470016,-0.949352085590363,0.231479719281197,0.21248009800911,0.166143178939819,-0.158774629235268,0.973235368728638,0.369765430688858,-0.00654551573097706,0.929102063179016,0.244560360908508,-0.223172500729561,0.943601787090302,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.911426484584808,-0.347711831331253,-0.219996020197868,-0.837089002132416,-0.441800951957703,-0.322635918855667,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.834830164909363,-0.436789900064468,-0.335072010755539,0.913829922676086,-0.341083079576492,-0.220402225852013,0.969441294670105,-0.244898587465286,0.0144304987043142,0.927110075950623,-0.224742949008942,-0.299929141998291,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.977872133255005,0.203673675656319,-0.0477813258767128,0.939878582954407,0.179825350642204,-0.290329366922379,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.977315187454224,0.206456959247589,-0.0472285002470016,0.862718880176544,0.197039529681206,-0.465716183185577,0.839759349822998,0.221470341086388,-0.495736926794052,\n0.830685615539551,0.156212329864502,-0.53437727689743,0.892053008079529,0.256361722946167,-0.372182875871658,0.889020264148712,0.213740766048431,-0.404917031526566,0.908465981483459,0.211989372968674,-0.360208302736282,0.904940068721771,0.195454493165016,-0.377996027469635,0.888135969638824,0.229056358337402,-0.3984315097332,0.848333179950714,-0.297908991575241,-0.43769970536232,0.927110075950623,-0.224742949008942,-0.299929141998291,0.898882806301117,0.175670132040977,-0.401434540748596,0.892053008079529,0.256361722946167,-0.372182875871658,0.839759349822998,0.221470341086388,-0.495736926794052,0.862718880176544,0.197039529681206,-0.465716183185577,0.889020264148712,0.213740766048431,-0.404917031526566,0.552965581417084,-0.801727950572968,0.226851031184196,0.0579886250197887,-0.947378635406494,0.314819037914276,0.569704055786133,-0.669814586639404,0.476220279932022,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.0292022190988064,-0.160741657018662,0.98656439781189,-0.176305994391441,-0.141984179615974,0.974041402339935,-0.072829432785511,0.0172536037862301,0.99719512462616,0.742353081703186,0.249405577778816,0.621859073638916,0.562908291816711,0.161133006215096,0.810660421848297,0.810771644115448,0.203989744186401,0.54866886138916,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.76946359872818,0.151790544390678,0.620391309261322,-0.623560965061188,0.103526078164577,0.774889707565308,-0.34188050031662,0.0427594222128391,0.938770115375519,-0.857216417789459,0.268806040287018,0.43923032283783,-0.791948556900024,0.189529091119766,0.580427587032318,-0.56521064043045,0.138002142310143,0.813321769237518,-0.46170049905777,0.186353012919426,0.867240011692047,0.830685615539551,0.156212329864502,-0.53437727689743,0.754355251789093,0.176875531673431,-0.632189214229584,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.881142616271973,0.0315838828682899,-0.471794605255127,0.355752408504486,-0.498135715723038,-0.790759801864624,0.734110653400421,-0.4181247651577,-0.535026371479034,0.498120248317719,-0.335890352725983,-0.799408435821533,\n-0.122972406446934,-0.410810470581055,-0.903389453887939,0.355752408504486,-0.498135715723038,-0.790759801864624,-0.11159410327673,-0.287050694227219,-0.951393008232117,0.129383936524391,-0.521730244159698,-0.843242168426514,0.252460122108459,-0.750463306903839,-0.61079353094101,0.355752408504486,-0.498135715723038,-0.790759801864624,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.295105874538422,-0.732439458370209,-0.613551139831543,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,0.71757835149765,0.116429716348648,-0.686677098274231,0.754355251789093,0.176875531673431,-0.632189214229584,0.737981557846069,0.239907741546631,-0.630735695362091,0.74054491519928,0.170902013778687,-0.649912059307098,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.605917453765869,-0.0272433757781982,-0.795060873031616,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.754355251789093,0.176875531673431,-0.632189214229584,0.71757835149765,0.116429716348648,-0.686677098274231,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.656103849411011,-0.195678874850273,-0.728860437870026,0.66176563501358,-0.249233901500702,-0.707070529460907,0.888135969638824,0.229056358337402,-0.3984315097332,0.908465981483459,0.211989372968674,-0.360208302736282,0.875346660614014,0.271785736083984,-0.399875849485397,0.847342550754547,0.298378229141235,-0.439296066761017,0.904940068721771,0.195454493165016,-0.377996027469635,0.908465981483459,0.211989372968674,-0.360208302736282,0.888135969638824,0.229056358337402,-0.3984315097332,0.898882806301117,0.175670132040977,-0.401434540748596,-0.11159410327673,-0.287050694227219,-0.951393008232117,0.355752408504486,-0.498135715723038,-0.790759801864624,0.498120248317719,-0.335890352725983,-0.799408435821533,-0.0987945944070816,-0.283014118671417,-0.95401394367218,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.11159410327673,-0.287050694227219,-0.951393008232117,\n-0.0987945944070816,-0.283014118671417,-0.95401394367218,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.747396409511566,0.179795786738396,-0.639587461948395,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.748518824577332,-0.407584488391876,-0.523062586784363,-0.481532573699951,-0.766164124011993,-0.425580739974976,-0.295105874538422,-0.732439458370209,-0.613551139831543,0.205762028694153,-0.343506038188934,-0.91633266210556,0.142389953136444,-0.3092340528965,-0.940265595912933,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.295105874538422,-0.732439458370209,-0.613551139831543,-0.154773816466331,-0.473390430212021,-0.867148518562317,0.605917453765869,-0.0272433757781982,-0.795060873031616,0.142389953136444,-0.3092340528965,-0.940265595912933,0.205762028694153,-0.343506038188934,-0.91633266210556,0.656103849411011,-0.195678874850273,-0.728860437870026,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.605917453765869,-0.0272433757781982,-0.795060873031616,0.656103849411011,-0.195678874850273,-0.728860437870026,0.940263509750366,0.158270344138145,0.301421761512756,0.911828219890594,-0.323383867740631,0.252966731786728,0.924298286437988,-0.381513595581055,0.0109577048569918,0.97637003660202,0.214487105607986,0.0263973921537399,0.897881627082825,0.0853674784302711,0.4318807721138,0.86302787065506,-0.341093569993973,0.372609823942184,0.911828219890594,-0.323383867740631,0.252966731786728,0.940263509750366,0.158270344138145,0.301421761512756,0.824855744838715,-0.0143105983734131,0.565162122249603,0.804235875606537,-0.38592141866684,0.451961606740952,\n0.86302787065506,-0.341093569993973,0.372609823942184,0.897881627082825,0.0853674784302711,0.4318807721138,0.658608675003052,-0.082901194691658,0.747905075550079,0.63869446516037,-0.424023747444153,0.642085075378418,0.804235875606537,-0.38592141866684,0.451961606740952,0.824855744838715,-0.0143105983734131,0.565162122249603,0.403074562549591,-0.0995079353451729,0.909741222858429,0.477317273616791,-0.364241302013397,0.79968523979187,0.63869446516037,-0.424023747444153,0.642085075378418,0.658608675003052,-0.082901194691658,0.747905075550079,0.748501777648926,-0.0708362907171249,0.659338533878326,0.777780055999756,-0.164350166916847,0.606668949127197,0.477317273616791,-0.364241302013397,0.79968523979187,0.403074562549591,-0.0995079353451729,0.909741222858429,0.682068586349487,-0.309287667274475,0.662663996219635,0.777780055999756,-0.164350166916847,0.606668949127197,0.748501777648926,-0.0708362907171249,0.659338533878326,0.691345393657684,-0.0592475160956383,0.720091164112091,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.918076574802399,-0.319764405488968,0.234277844429016,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.871616542339325,-0.254917442798615,0.418690472841263,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.871616542339325,-0.254917442798615,0.418690472841263,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.526136100292206,-0.358043670654297,0.77135306596756,0.198349118232727,-0.359346985816956,-0.911881268024445,0.304857552051544,-0.136514157056808,-0.942563354969025,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.085550844669342,-0.179267361760139,-0.980073630809784,\n-0.183117777109146,0.0588014125823975,-0.981330871582031,0.304857552051544,-0.136514157056808,-0.942563354969025,0.220349878072739,-0.298315703868866,-0.928683817386627,-0.265993624925613,0.0903498530387878,-0.959731340408325,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.677114307880402,0.387711197137833,-0.625456809997559,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.872953355312347,0.427382349967957,-0.235152706503868,0.126519411802292,-0.418506681919098,-0.899358093738556,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.265993624925613,0.0903498530387878,-0.959731340408325,0.220349878072739,-0.298315703868866,-0.928683817386627,0.5493523478508,-0.702752709388733,-0.452051609754562,0.318604946136475,-0.851775884628296,-0.415895074605942,-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.126519411802292,-0.418506681919098,-0.899358093738556,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.220349878072739,-0.298315703868866,-0.928683817386627,0.56249988079071,-0.630179584026337,-0.535226583480835,0.5493523478508,-0.702752709388733,-0.452051609754562,0.126519411802292,-0.418506681919098,-0.899358093738556,0.210187539458275,-0.419684708118439,-0.882998287677765,-0.633183777332306,0.444622397422791,-0.6335529088974,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.676666736602783,-0.736289203166962,0.000588160357438028,0.321904927492142,-0.23541721701622,-0.917036533355713,0.210187539458275,-0.419684708118439,-0.882998287677765,0.220480233430862,-0.962971389293671,-0.155160069465637,0.210187539458275,-0.419684708118439,-0.882998287677765,0.321904927492142,-0.23541721701622,-0.917036533355713,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.633183777332306,0.444622397422791,-0.6335529088974,0.735884010791779,-0.676981329917908,0.0130754383280873,\n0.917286098003387,-0.397383034229279,0.0259414706379175,0.370425969362259,-0.053249154239893,-0.927334427833557,0.321904927492142,-0.23541721701622,-0.917036533355713,0.370425969362259,-0.053249154239893,-0.927334427833557,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.6867835521698,0.410039186477661,-0.600163519382477,0.321904927492142,-0.23541721701622,-0.917036533355713,0.370425969362259,-0.053249154239893,-0.927334427833557,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.0838128700852394,-0.573638498783112,-0.814809322357178,-0.698399066925049,0.385518401861191,-0.603004395961761,0.370425969362259,-0.053249154239893,-0.927334427833557,-0.0838128700852394,-0.573638498783112,-0.814809322357178,-0.852042078971863,-0.144021943211555,-0.503271222114563,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.237571656703949,-0.289404422044754,0.92725658416748,-0.182237774133682,-0.768710494041443,0.613085329532623,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.802604734897614,0.216235384345055,0.55593866109848,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.182237774133682,-0.768710494041443,0.613085329532623,0.237571656703949,-0.289404422044754,0.92725658416748,-0.748213112354279,0.285198539495468,0.599031686782837,-0.792753040790558,0.233859673142433,0.562896311283112,0.237571656703949,-0.289404422044754,0.92725658416748,0.209573119878769,-0.409179538488388,0.888060390949249,-0.183022558689117,-0.742925465106964,0.643866777420044,0.209573119878769,-0.409179538488388,0.888060390949249,0.676666736602783,-0.736289203166962,0.000588160357438028,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.730839848518372,0.374586492776871,0.570576965808868,0.209573119878769,-0.409179538488388,0.888060390949249,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.024921914562583,-0.994488954544067,-0.101836577057838,0.623242735862732,-0.753325045108795,-0.209928289055824,\n0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.141052380204201,-0.502090394496918,-0.853234708309174,0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.814637243747711,0.194269418716431,-0.546466410160065,0.747061431407928,-0.62068235874176,-0.238018155097961,0.910755693912506,-0.337876051664352,-0.237410709261894,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.810490429401398,0.401368230581284,-0.426624894142151,0.0652027949690819,-0.225424140691757,-0.972076416015625,0.1495750695467,-0.0865894258022308,-0.984951555728912,-0.262113600969315,-0.605265080928802,-0.751631915569305,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.893890082836151,-0.378993809223175,-0.239424884319305,0.300238430500031,-0.930824100971222,-0.208382621407509,-0.262113600969315,-0.605265080928802,-0.751631915569305,-0.931690096855164,-0.183842733502388,-0.31329756975174,-0.821675598621368,0.388978660106659,-0.416587084531784,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.893890082836151,-0.378993809223175,-0.239424884319305,0.534395098686218,-0.306080341339111,0.787868499755859,0.0157063417136669,-0.81893128156662,0.573676645755768,0.300238430500031,-0.930824100971222,-0.208382621407509,0.0157063417136669,-0.81893128156662,0.573676645755768,0.534395098686218,-0.306080341339111,0.787868499755859,-0.581417798995972,0.228432759642601,0.780878841876984,-0.781307756900787,-0.323809385299683,0.533578157424927,-0.567694067955017,0.240619167685509,0.787290215492249,0.534395098686218,-0.306080341339111,0.787868499755859,0.477158278226852,-0.397838234901428,0.783610045909882,-0.56154191493988,0.270268112421036,0.782065093517303,0.623242735862732,-0.753325045108795,-0.209928289055824,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.223028287291527,-0.612437725067139,0.758405148983002,\n0.477158278226852,-0.397838234901428,0.783610045909882,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.507044553756714,0.251941651105881,0.824276208877563,-0.559803783893585,0.448765695095062,0.696583867073059,0.477158278226852,-0.397838234901428,0.783610045909882,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.613874554634094,-0.719477951526642,-0.324822306632996,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.878461718559265,0.420071333646774,-0.22769521176815,0.828972637653351,-0.365704894065857,-0.423159956932068,0.279529839754105,-0.929970979690552,-0.238782465457916,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.967258095741272,-0.228260591626167,-0.110945627093315,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,0.205829456448555,-0.762141346931458,0.613819897174835,0.279529839754105,-0.929970979690552,-0.238782465457916,0.828972637653351,-0.365704894065857,-0.423159956932068,0.674587190151215,-0.27459716796875,0.685221493244171,0.205829456448555,-0.762141346931458,0.613819897174835,0.674587190151215,-0.27459716796875,0.685221493244171,-0.394580245018005,0.233544617891312,0.888686299324036,-0.597855687141418,-0.328857451677322,0.731041252613068,0.678764045238495,-0.636029005050659,-0.367078334093094,0.631237089633942,-0.400684475898743,0.664072096347809,0.674587190151215,-0.27459716796875,0.685221493244171,0.833657681941986,-0.354278296232224,-0.423676431179047,\n-0.343200415372849,0.296563923358917,0.891214549541473,-0.350194752216339,0.292267352342606,0.889912009239197,0.674587190151215,-0.27459716796875,0.685221493244171,0.631237089633942,-0.400684475898743,0.664072096347809,-0.326038300991058,0.243334606289864,0.913502752780914,-0.36957174539566,0.387512475252151,0.844541788101196,0.631237089633942,-0.400684475898743,0.664072096347809,0.113647989928722,-0.758261322975159,0.641968786716461,0.113647989928722,-0.758261322975159,0.641968786716461,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.326038300991058,0.243334606289864,0.913502752780914,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.980141282081604,0.198108091950417,0.00872699916362762,0.297526687383652,-0.947863459587097,-0.114161059260368,0.568342566490173,-0.692033231258392,-0.445058077573776,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.980141282081604,0.198108091950417,0.00872699916362762,0.586962282657623,-0.660651743412018,-0.467989921569824,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.394356489181519,-0.149896875023842,-0.906649768352509,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.394356489181519,-0.149896875023842,-0.906649768352509,0.672275424003601,-0.513835847377777,-0.532933831214905,0.192592486739159,-0.95661062002182,-0.21864178776741,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.394356489181519,-0.149896875023842,-0.906649768352509,0.295449286699295,-0.702050924301147,0.647946059703827,\n0.192592486739159,-0.95661062002182,-0.21864178776741,0.672275424003601,-0.513835847377777,-0.532933831214905,0.78001469373703,-0.23672841489315,0.579255342483521,-0.142891898751259,0.310856729745865,0.939654171466827,-0.427836775779724,-0.217984616756439,0.877176403999329,0.295449286699295,-0.702050924301147,0.647946059703827,0.78001469373703,-0.23672841489315,0.579255342483521,0.568342566490173,-0.692033231258392,-0.445058077573776,0.297526687383652,-0.947863459587097,-0.114161059260368,0.702709794044495,-0.35005995631218,0.619400501251221,0.776305437088013,-0.254482686519623,0.576704740524292,0.702709794044495,-0.35005995631218,0.619400501251221,0.0647351443767548,0.381562024354935,0.922073602676392,-0.162613198161125,0.452644348144531,0.876738309860229,0.776305437088013,-0.254482686519623,0.576704740524292,0.0647351443767548,0.381562024354935,0.922073602676392,0.702709794044495,-0.35005995631218,0.619400501251221,0.679429173469543,-0.206046029925346,0.704216599464417,-0.0423084795475006,0.388709634542465,0.920388400554657,0.679429173469543,-0.206046029925346,0.704216599464417,0.692436456680298,-0.693914532661438,0.197520568966866,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.759757459163666,-0.495759963989258,0.42070260643959,-0.455443143844604,-0.0435190759599209,0.889200568199158,-0.181978538632393,0.229496166110039,0.956146061420441,0.10479624569416,-0.144131794571877,0.983993768692017,0.228076592087746,-0.722928047180176,0.652193248271942,0.228076592087746,-0.722928047180176,0.652193248271942,0.10479624569416,-0.144131794571877,0.983993768692017,0.499378323554993,-0.200641006231308,0.842831194400787,0.759757459163666,-0.495759963989258,0.42070260643959,0.119333148002625,-0.907433569431305,-0.402894467115402,0.139615654945374,-0.644082069396973,-0.752107560634613,-0.823581099510193,-0.405602097511292,-0.396485984325409,-0.610331058502197,-0.781622171401978,0.128696575760841,-0.90501195192337,0.21977810561657,0.364212721586227,-0.455443143844604,-0.0435190759599209,0.889200568199158,-0.610331058502197,-0.781622171401978,0.128696575760841,\n-0.823581099510193,-0.405602097511292,-0.396485984325409,0.210858762264252,-0.745639085769653,-0.632108330726624,-0.783048808574677,-0.561382532119751,-0.267739146947861,-0.791083514690399,-0.304101139307022,-0.53076297044754,0.139615654945374,-0.644082069396973,-0.752107560634613,-0.791083514690399,-0.304101139307022,-0.53076297044754,-0.783048808574677,-0.561382532119751,-0.267739146947861,-0.883537590503693,0.207842156291008,0.419717639684677,-0.90501195192337,0.21977810561657,0.364212721586227,-0.531814455986023,-0.819929480552673,0.211870223283768,-0.783048808574677,-0.561382532119751,-0.267739146947861,0.210858762264252,-0.745639085769653,-0.632108330726624,0.144954472780228,-0.95414674282074,-0.261901140213013,-0.783048808574677,-0.561382532119751,-0.267739146947861,-0.531814455986023,-0.819929480552673,0.211870223283768,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.883537590503693,0.207842156291008,0.419717639684677,-0.00195049878675491,-0.724513411521912,0.689257919788361,-0.531814455986023,-0.819929480552673,0.211870223283768,0.144954472780228,-0.95414674282074,-0.261901140213013,0.755722880363464,-0.635050356388092,0.159981176257133,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.531814455986023,-0.819929480552673,0.211870223283768,-0.00195049878675491,-0.724513411521912,0.689257919788361,-0.10662803798914,0.114874452352524,0.987640738487244,0.779160380363464,0.504416584968567,0.372119605541229,0.677094995975494,0.017529908567667,0.735686838626862,0.755722880363464,-0.635050356388092,0.159981176257133,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.779160380363464,0.504416584968567,0.372119605541229,0.0438288599252701,0.716634690761566,0.696070194244385,-0.10662803798914,0.114874452352524,0.987640738487244,0.677094995975494,0.017529908567667,0.735686838626862,0.775657951831818,0.494642019271851,0.39202556014061,0.779160380363464,0.504416584968567,0.372119605541229,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.966551244258881,-0.0919508412480354,-0.239423617720604,\n0.779160380363464,0.504416584968567,0.372119605541229,0.775657951831818,0.494642019271851,0.39202556014061,-0.0499426536262035,0.692004799842834,0.720163226127625,0.0438288599252701,0.716634690761566,0.696070194244385,0.775603353977203,0.536381304264069,0.332768052816391,0.775657951831818,0.494642019271851,0.39202556014061,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.944929540157318,-0.11514762789011,-0.306348145008087,0.775603353977203,0.536381304264069,0.332768052816391,-0.057441920042038,0.650170862674713,0.75761353969574,-0.0499426536262035,0.692004799842834,0.720163226127625,0.775657951831818,0.494642019271851,0.39202556014061,0.789509534835815,0.501795709133148,0.353377729654312,0.775603353977203,0.536381304264069,0.332768052816391,0.944929540157318,-0.11514762789011,-0.306348145008087,0.986938416957855,-0.10414332151413,-0.122909314930439,-0.057441920042038,0.650170862674713,0.75761353969574,0.775603353977203,0.536381304264069,0.332768052816391,0.789509534835815,0.501795709133148,0.353377729654312,0.0780415087938309,0.603700041770935,0.793382465839386,0.843434154987335,0.424213349819183,0.329638987779617,0.704449236392975,0.57451719045639,0.416750878095627,0.789509534835815,0.501795709133148,0.353377729654312,0.986938416957855,-0.10414332151413,-0.122909314930439,0.0780415087938309,0.603700041770935,0.793382465839386,0.789509534835815,0.501795709133148,0.353377729654312,0.704449236392975,0.57451719045639,0.416750878095627,0.075324609875679,0.630104899406433,0.772848010063171,0.950212061405182,0.303586721420288,0.0702292993664742,0.977863430976868,-0.0681029558181763,0.197851315140724,0.741024434566498,0.216318398714066,0.635680079460144,0.619699597358704,0.579480230808258,0.529315650463104,0.396490722894669,0.381844133138657,0.834859371185303,0.516311764717102,0.647967755794525,0.559964299201965,0.631212413311005,0.590215682983398,0.503206074237823,0.634808242321014,0.281936556100845,0.719395816326141,0.396490722894669,0.381844133138657,0.834859371185303,0.634808242321014,0.281936556100845,0.719395816326141,\n0.540099084377289,-0.0461409948766232,0.840335667133331,0.280613332986832,0.159042209386826,0.946552574634552,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.210858762264252,-0.745639085769653,-0.632108330726624,0.139615654945374,-0.644082069396973,-0.752107560634613,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.210858762264252,-0.745639085769653,-0.632108330726624,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.755722880363464,-0.635050356388092,0.159981176257133,0.144954472780228,-0.95414674282074,-0.261901140213013,0.944929540157318,-0.11514762789011,-0.306348145008087,0.139615654945374,-0.644082069396973,-0.752107560634613,0.119333148002625,-0.907433569431305,-0.402894467115402,0.986938416957855,-0.10414332151413,-0.122909314930439,0.648194909095764,-0.336823225021362,-0.682930052280426,0.56249988079071,-0.630179584026337,-0.535226583480835,0.220349878072739,-0.298315703868866,-0.928683817386627,0.304857552051544,-0.136514157056808,-0.942563354969025,0.318604946136475,-0.851775884628296,-0.415895074605942,0.5493523478508,-0.702752709388733,-0.452051609754562,0.643197417259216,-0.725296139717102,-0.245443657040596,0.166518494486809,-0.975531220436096,-0.14356318116188,-0.883537590503693,0.207842156291008,0.419717639684677,0.0438288599252701,0.716634690761566,0.696070194244385,-0.0499426536262035,0.692004799842834,0.720163226127625,-0.90501195192337,0.21977810561657,0.364212721586227,0.0438288599252701,0.716634690761566,0.696070194244385,-0.883537590503693,0.207842156291008,0.419717639684677,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.10662803798914,0.114874452352524,0.987640738487244,-0.90501195192337,0.21977810561657,0.364212721586227,-0.057441920042038,0.650170862674713,0.75761353969574,0.0780415087938309,0.603700041770935,0.793382465839386,-0.455443143844604,-0.0435190759599209,0.889200568199158,0.075324609875679,0.630104899406433,0.772848010063171,-0.181978538632393,0.229496166110039,0.956146061420441,-0.455443143844604,-0.0435190759599209,0.889200568199158,\n0.0780415087938309,0.603700041770935,0.793382465839386,-0.000278991181403399,0.484035164117813,0.875048518180847,0.0509466230869293,0.674606919288635,0.73641699552536,0.516311764717102,0.647967755794525,0.559964299201965,0.396490722894669,0.381844133138657,0.834859371185303,0.396490722894669,0.381844133138657,0.834859371185303,0.280613332986832,0.159042209386826,0.946552574634552,-0.0354647859930992,0.343396455049515,0.938520729541779,-0.000278991181403399,0.484035164117813,0.875048518180847,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.899121463298798,0.345348745584488,-0.268914222717285,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.836941063404083,0.479608535766602,-0.263638645410538,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.850029647350311,0.48296907544136,0.210215270519257,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.869016945362091,0.468115001916885,0.160243302583694,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.911366164684296,0.266076982021332,0.31402975320816,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.836970150470734,0.473509907722473,-0.274352669715881,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.256222367286682,0.552950799465179,0.792840123176575,-0.6693514585495,0.480027586221695,0.567046880722046,-0.585053384304047,0.545464694499969,0.600150644779205,-0.162613198161125,0.452644348144531,0.876738309860229,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.126598969101906,0.370326429605484,0.920234203338623,\n-0.104846432805061,0.370796233415604,0.922776997089386,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.142891898751259,0.310856729745865,0.939654171466827,-0.142891898751259,0.310856729745865,0.939654171466827,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.525893211364746,0.411127626895905,0.744587421417236,-0.79394793510437,0.450177043676376,0.408640831708908,-0.739033222198486,0.522002279758453,0.425844460725784,-0.326038300991058,0.243334606289864,0.913502752780914,-0.743728399276733,0.346636980772018,0.571586310863495,-0.826775729656219,0.455823004245758,0.329647213220596,-0.850029647350311,0.48296907544136,0.210215270519257,-0.869016945362091,0.468115001916885,0.160243302583694,-0.36957174539566,0.387512475252151,0.844541788101196,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.343200415372849,0.296563923358917,0.891214549541473,-0.350194752216339,0.292267352342606,0.889912009239197,-0.343200415372849,0.296563923358917,0.891214549541473,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.878461718559265,0.420071333646774,-0.22769521176815,-0.350194752216339,0.292267352342606,0.889912009239197,-0.878461718559265,0.420071333646774,-0.22769521176815,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.394580245018005,0.233544617891312,0.888686299324036,-0.394580245018005,0.233544617891312,0.888686299324036,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.967258095741272,-0.228260591626167,-0.110945627093315,-0.597855687141418,-0.328857451677322,0.731041252613068,-0.806818068027496,0.571618735790253,0.149320676922798,-0.869016945362091,0.468115001916885,0.160243302583694,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.806818068027496,0.571618735790253,0.149320676922798,\n-0.507044553756714,0.251941651105881,0.824276208877563,-0.743728399276733,0.346636980772018,0.571586310863495,-0.869016945362091,0.468115001916885,0.160243302583694,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.56154191493988,0.270268112421036,0.782065093517303,-0.559803783893585,0.448765695095062,0.696583867073059,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.581417798995972,0.228432759642601,0.780878841876984,-0.567694067955017,0.240619167685509,0.787290215492249,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.821675598621368,0.388978660106659,-0.416587084531784,-0.931690096855164,-0.183842733502388,-0.31329756975174,-0.781307756900787,-0.323809385299683,0.533578157424927,-0.581417798995972,0.228432759642601,0.780878841876984,-0.821675598621368,0.388978660106659,-0.416587084531784,-0.748213112354279,0.285198539495468,0.599031686782837,-0.730839848518372,0.374586492776871,0.570576965808868,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.6867835521698,0.410039186477661,-0.600163519382477,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.792753040790558,0.233859673142433,0.562896311283112,-0.748213112354279,0.285198539495468,0.599031686782837,-0.6867835521698,0.410039186477661,-0.600163519382477,-0.802604734897614,0.216235384345055,0.55593866109848,-0.792753040790558,0.233859673142433,0.562896311283112,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.698399066925049,0.385518401861191,-0.603004395961761,-0.6693514585495,0.480027586221695,0.567046880722046,-0.878819167613983,0.322898685932159,0.351302325725555,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.585053384304047,0.545464694499969,0.600150644779205,-0.677114307880402,0.387711197137833,-0.625456809997559,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.265993624925613,0.0903498530387878,-0.959731340408325,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.790130019187927,0.358856797218323,-0.496906787157059,\n-0.677114307880402,0.387711197137833,-0.625456809997559,-0.265993624925613,0.0903498530387878,-0.959731340408325,-0.225308075547218,0.514127254486084,0.827592551708221,-0.308326691389084,0.577942073345184,0.755590915679932,-0.25537496805191,0.596560716629028,0.760854065418243,-0.200460329651833,0.603900372982025,0.771440207958221,-0.308326691389084,0.577942073345184,0.755590915679932,-0.225308075547218,0.514127254486084,0.827592551708221,-0.313503563404083,0.434664905071259,0.844264149665833,-0.506461322307587,0.506999313831329,0.697458744049072,-0.693721890449524,0.488555252552032,0.529210448265076,-0.878819167613983,0.322898685932159,0.351302325725555,-0.6693514585495,0.480027586221695,0.567046880722046,-0.6203373670578,0.548794507980347,0.560362577438354,-0.566602885723114,0.588818848133087,0.576414406299591,-0.308326691389084,0.577942073345184,0.755590915679932,-0.506461322307587,0.506999313831329,0.697458744049072,-0.601623058319092,0.623578310012817,0.499199062585831,-0.308326691389084,0.577942073345184,0.755590915679932,-0.566602885723114,0.588818848133087,0.576414406299591,-0.6203373670578,0.548794507980347,0.560362577438354,-0.25537496805191,0.596560716629028,0.760854065418243,-0.6203373670578,0.548794507980347,0.560362577438354,-0.6693514585495,0.480027586221695,0.567046880722046,-0.256222367286682,0.552950799465179,0.792840123176575,-0.25537496805191,0.596560716629028,0.760854065418243,-0.737847745418549,0.550981104373932,0.389872461557388,-0.566602885723114,0.588818848133087,0.576414406299591,-0.601623058319092,0.623578310012817,0.499199062585831,-0.73642486333847,0.608879089355469,0.294863820075989,-0.566602885723114,0.588818848133087,0.576414406299591,-0.737847745418549,0.550981104373932,0.389872461557388,-0.693721890449524,0.488555252552032,0.529210448265076,-0.6203373670578,0.548794507980347,0.560362577438354,-0.737847745418549,0.550981104373932,0.389872461557388,-0.802789449691772,0.535418033599854,0.26240548491478,-0.826775729656219,0.455823004245758,0.329647213220596,-0.724430322647095,0.542059719562531,0.425877869129181,\n-0.724430322647095,0.542059719562531,0.425877869129181,-0.79394793510437,0.450177043676376,0.408640831708908,-0.525893211364746,0.411127626895905,0.744587421417236,-0.693721890449524,0.488555252552032,0.529210448265076,-0.802789449691772,0.535418033599854,0.26240548491478,-0.846407413482666,0.503773093223572,0.17264749109745,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.850029647350311,0.48296907544136,0.210215270519257,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.911366164684296,0.266076982021332,0.31402975320816,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.846407413482666,0.503773093223572,0.17264749109745,-0.846407413482666,0.503773093223572,0.17264749109745,-0.73642486333847,0.608879089355469,0.294863820075989,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.836941063404083,0.479608535766602,-0.263638645410538,-0.836970150470734,0.473509907722473,-0.274352669715881,-0.724430322647095,0.542059719562531,0.425877869129181,-0.826775729656219,0.455823004245758,0.329647213220596,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.79394793510437,0.450177043676376,0.408640831708908,-0.739033222198486,0.522002279758453,0.425844460725784,-0.79394793510437,0.450177043676376,0.408640831708908,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.907855153083801,0.259428709745407,-0.329386949539185,0.643197417259216,-0.725296139717102,-0.245443657040596,0.5493523478508,-0.702752709388733,-0.452051609754562,0.56249988079071,-0.630179584026337,-0.535226583480835,0.414326965808868,-0.847513318061829,-0.331744402647018,0.65491396188736,-0.503674864768982,-0.563382029533386,0.414326965808868,-0.847513318061829,-0.331744402647018,\n0.56249988079071,-0.630179584026337,-0.535226583480835,0.648194909095764,-0.336823225021362,-0.682930052280426,0.515248417854309,-0.441880226135254,-0.734343886375427,0.648194909095764,-0.336823225021362,-0.682930052280426,0.304857552051544,-0.136514157056808,-0.942563354969025,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.0423084795475006,0.388709634542465,0.920388400554657,0.679429173469543,-0.206046029925346,0.704216599464417,0.499378323554993,-0.200641006231308,0.842831194400787,-0.155946508049965,0.418714195489883,0.894627928733826,0.10479624569416,-0.144131794571877,0.983993768692017,-0.213889330625534,0.483835697174072,0.848619103431702,-0.155946508049965,0.418714195489883,0.894627928733826,0.499378323554993,-0.200641006231308,0.842831194400787,0.516311764717102,0.647967755794525,0.559964299201965,0.0509466230869293,0.674606919288635,0.73641699552536,0.075324609875679,0.630104899406433,0.772848010063171,0.704449236392975,0.57451719045639,0.416750878095627,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.872953355312347,0.427382349967957,-0.235152706503868,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.872953355312347,0.427382349967957,-0.235152706503868,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.899121463298798,0.345348745584488,-0.268914222717285,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.872953355312347,0.427382349967957,-0.235152706503868,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.836941063404083,0.479608535766602,-0.263638645410538,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.836941063404083,0.479608535766602,-0.263638645410538,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.836970150470734,0.473509907722473,-0.274352669715881,0.745758533477783,-0.330089628696442,-0.578692495822906,0.810982346534729,-0.364237248897552,-0.457863301038742,0.919881999492645,-0.0601645521819592,-0.387552946805954,\n0.237571656703949,-0.289404422044754,0.92725658416748,0.917286098003387,-0.397383034229279,0.0259414706379175,0.735884010791779,-0.676981329917908,0.0130754383280873,0.209573119878769,-0.409179538488388,0.888060390949249,0.747061431407928,-0.62068235874176,-0.238018155097961,0.477158278226852,-0.397838234901428,0.783610045909882,0.534395098686218,-0.306080341339111,0.787868499755859,0.910755693912506,-0.337876051664352,-0.237410709261894,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.147622227668762,-0.275771498680115,-0.94981986284256,0.678764045238495,-0.636029005050659,-0.367078334093094,0.833657681941986,-0.354278296232224,-0.423676431179047,0.631237089633942,-0.400684475898743,0.664072096347809,0.613874554634094,-0.719477951526642,-0.324822306632996,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.113647989928722,-0.758261322975159,0.641968786716461,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.394356489181519,-0.149896875023842,-0.906649768352509,0.586962282657623,-0.660651743412018,-0.467989921569824,0.776305437088013,-0.254482686519623,0.576704740524292,0.78001469373703,-0.23672841489315,0.579255342483521,0.671555638313293,-0.521569073200226,-0.526287734508514,0.78001469373703,-0.23672841489315,0.579255342483521,0.776305437088013,-0.254482686519623,0.576704740524292,-0.126598969101906,0.370326429605484,0.920234203338623,-0.104846432805061,0.370796233415604,0.922776997089386,-0.126598969101906,0.370326429605484,0.920234203338623,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.104846432805061,0.370796233415604,0.922776997089386,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.567694067955017,0.240619167685509,0.787290215492249,-0.56154191493988,0.270268112421036,0.782065093517303,-0.698399066925049,0.385518401861191,-0.603004395961761,\n-0.852042078971863,-0.144021943211555,-0.503271222114563,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.802604734897614,0.216235384345055,0.55593866109848,0.704449236392975,0.57451719045639,0.416750878095627,0.843434154987335,0.424213349819183,0.329638987779617,0.631212413311005,0.590215682983398,0.503206074237823,0.516311764717102,0.647967755794525,0.559964299201965,0.741024434566498,0.216318398714066,0.635680079460144,0.716558694839478,-0.309423923492432,0.625140368938446,0.540099084377289,-0.0461409948766232,0.840335667133331,0.634808242321014,0.281936556100845,0.719395816326141,0.631212413311005,0.590215682983398,0.503206074237823,0.619699597358704,0.579480230808258,0.529315650463104,0.741024434566498,0.216318398714066,0.635680079460144,0.634808242321014,0.281936556100845,0.719395816326141,0.843434154987335,0.424213349819183,0.329638987779617,0.906101286411285,-0.389416426420212,-0.165334045886993,0.950212061405182,0.303586721420288,0.0702292993664742,0.619699597358704,0.579480230808258,0.529315650463104,-0.213889330625534,0.483835697174072,0.848619103431702,0.075324609875679,0.630104899406433,0.772848010063171,0.0509466230869293,0.674606919288635,0.73641699552536,-0.200460329651833,0.603900372982025,0.771440207958221,-0.225308075547218,0.514127254486084,0.827592551708221,-0.000278991181403399,0.484035164117813,0.875048518180847,-0.0354647859930992,0.343396455049515,0.938520729541779,-0.313503563404083,0.434664905071259,0.844264149665833,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.0690199434757233,-0.290056854486465,-0.954517304897308,-0.349404841661453,-0.0127950254827738,-0.936884522438049,0.126519411802292,-0.418506681919098,-0.899358093738556,0.210187539458275,-0.419684708118439,-0.882998287677765,0.318604946136475,-0.851775884628296,-0.415895074605942,0.220480233430862,-0.962971389293671,-0.155160069465637,0.318604946136475,-0.851775884628296,-0.415895074605942,0.210187539458275,-0.419684708118439,-0.882998287677765,\n-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.735884010791779,-0.676981329917908,0.0130754383280873,0.321904927492142,-0.23541721701622,-0.917036533355713,0.676666736602783,-0.736289203166962,0.000588160357438028,0.321904927492142,-0.23541721701622,-0.917036533355713,-0.6867835521698,0.410039186477661,-0.600163519382477,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.684927523136139,0.406749725341797,-0.604507207870483,0.370425969362259,-0.053249154239893,-0.927334427833557,-0.698399066925049,0.385518401861191,-0.603004395961761,-0.0838128700852394,-0.573638498783112,-0.814809322357178,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.852042078971863,-0.144021943211555,-0.503271222114563,-0.0838128700852394,-0.573638498783112,-0.814809322357178,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.541915059089661,-0.82688319683075,-0.150307148694992,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.182237774133682,-0.768710494041443,0.613085329532623,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.182237774133682,-0.768710494041443,0.613085329532623,-0.852042078971863,-0.144021943211555,-0.503271222114563,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.902596533298492,-0.221002161502838,0.369428634643555,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.917286098003387,-0.397383034229279,0.0259414706379175,0.237571656703949,-0.289404422044754,0.92725658416748,0.237571656703949,-0.289404422044754,0.92725658416748,-0.792753040790558,0.233859673142433,0.562896311283112,-0.802604734897614,0.216235384345055,0.55593866109848,0.209573119878769,-0.409179538488388,0.888060390949249,0.735884010791779,-0.676981329917908,0.0130754383280873,0.676666736602783,-0.736289203166962,0.000588160357438028,-0.748213112354279,0.285198539495468,0.599031686782837,0.209573119878769,-0.409179538488388,0.888060390949249,-0.730839848518372,0.374586492776871,0.570576965808868,\n-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.0995585918426514,-0.971274793148041,-0.216132834553719,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.220480233430862,-0.962971389293671,-0.155160069465637,0.318604946136475,-0.851775884628296,-0.415895074605942,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.911366164684296,0.266076982021332,0.31402975320816,0.747061431407928,-0.62068235874176,-0.238018155097961,0.0652027949690819,-0.225424140691757,-0.972076416015625,0.623242735862732,-0.753325045108795,-0.209928289055824,0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.757650375366211,0.518597006797791,-0.39626133441925,0.1495750695467,-0.0865894258022308,-0.984951555728912,-0.821675598621368,0.388978660106659,-0.416587084531784,-0.820966601371765,0.385130524635315,-0.421530872583389,0.893890082836151,-0.378993809223175,-0.239424884319305,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.910755693912506,-0.337876051664352,-0.237410709261894,-0.262113600969315,-0.605265080928802,-0.751631915569305,\n0.300238430500031,-0.930824100971222,-0.208382621407509,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.931690096855164,-0.183842733502388,-0.31329756975174,-0.262113600969315,-0.605265080928802,-0.751631915569305,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.536295533180237,-0.842644929885864,-0.0483388155698776,0.300238430500031,-0.930824100971222,-0.208382621407509,0.0157063417136669,-0.81893128156662,0.573676645755768,-0.781307756900787,-0.323809385299683,0.533578157424927,-0.536295533180237,-0.842644929885864,-0.0483388155698776,0.0157063417136669,-0.81893128156662,0.573676645755768,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.781307756900787,-0.323809385299683,0.533578157424927,-0.931690096855164,-0.183842733502388,-0.31329756975174,0.534395098686218,-0.306080341339111,0.787868499755859,0.893890082836151,-0.378993809223175,-0.239424884319305,0.910755693912506,-0.337876051664352,-0.237410709261894,-0.581417798995972,0.228432759642601,0.780878841876984,0.534395098686218,-0.306080341339111,0.787868499755859,-0.567694067955017,0.240619167685509,0.787290215492249,0.623242735862732,-0.753325045108795,-0.209928289055824,0.477158278226852,-0.397838234901428,0.783610045909882,0.747061431407928,-0.62068235874176,-0.238018155097961,-0.56154191493988,0.270268112421036,0.782065093517303,0.477158278226852,-0.397838234901428,0.783610045909882,-0.559803783893585,0.448765695095062,0.696583867073059,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.166518494486809,-0.975531220436096,-0.14356318116188,0.210238441824913,-0.975585281848907,0.0635072365403175,0.166518494486809,-0.975531220436096,-0.14356318116188,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.743728399276733,0.346636980772018,0.571586310863495,-0.507044553756714,0.251941651105881,0.824276208877563,-0.507044553756714,0.251941651105881,0.824276208877563,-0.223028287291527,-0.612437725067139,0.758405148983002,\n-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.743728399276733,0.346636980772018,0.571586310863495,-0.929436683654785,-0.0642196834087372,0.36335015296936,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.024921914562583,-0.994488954544067,-0.101836577057838,0.678764045238495,-0.636029005050659,-0.367078334093094,-0.147622227668762,-0.275771498680115,-0.94981986284256,0.613874554634094,-0.719477951526642,-0.324822306632996,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.878461718559265,0.420071333646774,-0.22769521176815,0.828972637653351,-0.365704894065857,-0.423159956932068,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,0.833657681941986,-0.354278296232224,-0.423676431179047,-0.382496774196625,-0.602528691291809,-0.700468003749847,0.279529839754105,-0.929970979690552,-0.238782465457916,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.967258095741272,-0.228260591626167,-0.110945627093315,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.464792013168335,-0.880890548229218,0.0894443169236183,0.279529839754105,-0.929970979690552,-0.238782465457916,0.205829456448555,-0.762141346931458,0.613819897174835,\n-0.597855687141418,-0.328857451677322,0.731041252613068,-0.464792013168335,-0.880890548229218,0.0894443169236183,0.205829456448555,-0.762141346931458,0.613819897174835,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.597855687141418,-0.328857451677322,0.731041252613068,-0.967258095741272,-0.228260591626167,-0.110945627093315,0.674587190151215,-0.27459716796875,0.685221493244171,0.828972637653351,-0.365704894065857,-0.423159956932068,0.833657681941986,-0.354278296232224,-0.423676431179047,-0.394580245018005,0.233544617891312,0.888686299324036,0.674587190151215,-0.27459716796875,0.685221493244171,-0.350194752216339,0.292267352342606,0.889912009239197,0.613874554634094,-0.719477951526642,-0.324822306632996,0.631237089633942,-0.400684475898743,0.664072096347809,0.678764045238495,-0.636029005050659,-0.367078334093094,-0.36957174539566,0.387512475252151,0.844541788101196,-0.343200415372849,0.296563923358917,0.891214549541473,0.631237089633942,-0.400684475898743,0.664072096347809,0.113647989928722,-0.758261322975159,0.641968786716461,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.156990006566048,-0.969383895397186,0.188809439539909,-0.156990006566048,-0.969383895397186,0.188809439539909,0.210238441824913,-0.975585281848907,0.0635072365403175,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.210238441824913,-0.975585281848907,0.0635072365403175,-0.156990006566048,-0.969383895397186,0.188809439539909,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.156990006566048,-0.969383895397186,0.188809439539909,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.297526687383652,-0.947863459587097,-0.114161059260368,0.297526687383652,-0.947863459587097,-0.114161059260368,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.692436456680298,-0.693914532661438,0.197520568966866,-0.156990006566048,-0.969383895397186,0.188809439539909,0.297526687383652,-0.947863459587097,-0.114161059260368,-0.534125924110413,-0.786291003227234,-0.310573488473892,0.586962282657623,-0.660651743412018,-0.467989921569824,\n-0.400393456220627,-0.282469868659973,-0.8717200756073,0.568342566490173,-0.692033231258392,-0.445058077573776,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.394356489181519,-0.149896875023842,-0.906649768352509,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.906125068664551,0.423002034425735,-0.00257390737533569,0.672275424003601,-0.513835847377777,-0.532933831214905,-0.394356489181519,-0.149896875023842,-0.906649768352509,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.600427627563477,-0.609243273735046,-0.517985820770264,0.192592486739159,-0.95661062002182,-0.21864178776741,-0.496130347251892,-0.8139808177948,0.302142232656479,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.496130347251892,-0.8139808177948,0.302142232656479,-0.496130347251892,-0.8139808177948,0.302142232656479,0.192592486739159,-0.95661062002182,-0.21864178776741,0.295449286699295,-0.702050924301147,0.647946059703827,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.496130347251892,-0.8139808177948,0.302142232656479,0.295449286699295,-0.702050924301147,0.647946059703827,-0.496130347251892,-0.8139808177948,0.302142232656479,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.970863342285156,-0.156214520335197,0.181717962026596,0.78001469373703,-0.23672841489315,0.579255342483521,0.672275424003601,-0.513835847377777,-0.532933831214905,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.142891898751259,0.310856729745865,0.939654171466827,0.78001469373703,-0.23672841489315,0.579255342483521,-0.104846432805061,0.370796233415604,0.922776997089386,0.776305437088013,-0.254482686519623,0.576704740524292,0.586962282657623,-0.660651743412018,-0.467989921569824,0.568342566490173,-0.692033231258392,-0.445058077573776,-0.126598969101906,0.370326429605484,0.920234203338623,0.776305437088013,-0.254482686519623,0.576704740524292,\n-0.162613198161125,0.452644348144531,0.876738309860229,0.692436456680298,-0.693914532661438,0.197520568966866,0.702709794044495,-0.35005995631218,0.619400501251221,0.297526687383652,-0.947863459587097,-0.114161059260368,0.702709794044495,-0.35005995631218,0.619400501251221,0.692436456680298,-0.693914532661438,0.197520568966866,0.679429173469543,-0.206046029925346,0.704216599464417,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.692436456680298,-0.693914532661438,0.197520568966866,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.499378323554993,-0.200641006231308,0.842831194400787,0.679429173469543,-0.206046029925346,0.704216599464417,0.759757459163666,-0.495759963989258,0.42070260643959,0.119333148002625,-0.907433569431305,-0.402894467115402,0.166270598769188,-0.985880434513092,0.0198450349271297,0.134703695774078,-0.930721879005432,-0.340017199516296,0.166270598769188,-0.985880434513092,0.0198450349271297,0.119333148002625,-0.907433569431305,-0.402894467115402,-0.610331058502197,-0.781622171401978,0.128696575760841,-0.455443143844604,-0.0435190759599209,0.889200568199158,0.228076592087746,-0.722928047180176,0.652193248271942,-0.610331058502197,-0.781622171401978,0.128696575760841,0.228076592087746,-0.722928047180176,0.652193248271942,0.166270598769188,-0.985880434513092,0.0198450349271297,-0.610331058502197,-0.781622171401978,0.128696575760841,0.166270598769188,-0.985880434513092,0.0198450349271297,0.759757459163666,-0.495759963989258,0.42070260643959,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.759757459163666,-0.495759963989258,0.42070260643959,0.166270598769188,-0.985880434513092,0.0198450349271297,0.228076592087746,-0.722928047180176,0.652193248271942,-0.823581099510193,-0.405602097511292,-0.396485984325409,0.139615654945374,-0.644082069396973,-0.752107560634613,-0.791083514690399,-0.304101139307022,-0.53076297044754,-0.90501195192337,0.21977810561657,0.364212721586227,-0.823581099510193,-0.405602097511292,-0.396485984325409,-0.791083514690399,-0.304101139307022,-0.53076297044754,\n-0.00195049878675491,-0.724513411521912,0.689257919788361,0.755722880363464,-0.635050356388092,0.159981176257133,0.677094995975494,0.017529908567667,0.735686838626862,-0.10662803798914,0.114874452352524,0.987640738487244,-0.00195049878675491,-0.724513411521912,0.689257919788361,0.677094995975494,0.017529908567667,0.735686838626862,0.950212061405182,0.303586721420288,0.0702292993664742,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.977863430976868,-0.0681029558181763,0.197851315140724,0.741024434566498,0.216318398714066,0.635680079460144,0.977863430976868,-0.0681029558181763,0.197851315140724,0.716558694839478,-0.309423923492432,0.625140368938446,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.139615654945374,-0.644082069396973,-0.752107560634613,0.944929540157318,-0.11514762789011,-0.306348145008087,0.906101286411285,-0.389416426420212,-0.165334045886993,0.119333148002625,-0.907433569431305,-0.402894467115402,0.134703695774078,-0.930721879005432,-0.340017199516296,0.119333148002625,-0.907433569431305,-0.402894467115402,0.906101286411285,-0.389416426420212,-0.165334045886993,0.986938416957855,-0.10414332151413,-0.122909314930439,0.530287146568298,-0.713563740253448,-0.457845360040665,0.906101286411285,-0.389416426420212,-0.165334045886993,0.134703695774078,-0.930721879005432,-0.340017199516296,0.906101286411285,-0.389416426420212,-0.165334045886993,0.530287146568298,-0.713563740253448,-0.457845360040665,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.946987807750702,-0.279256701469421,-0.158838823437691,0.977863430976868,-0.0681029558181763,0.197851315140724,0.745758533477783,-0.330089628696442,-0.578692495822906,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.65491396188736,-0.503674864768982,-0.563382029533386,0.65491396188736,-0.503674864768982,-0.563382029533386,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.530287146568298,-0.713563740253448,-0.457845360040665,0.648194909095764,-0.336823225021362,-0.682930052280426,\n0.745758533477783,-0.330089628696442,-0.578692495822906,0.65491396188736,-0.503674864768982,-0.563382029533386,0.530287146568298,-0.713563740253448,-0.457845360040665,0.414326965808868,-0.847513318061829,-0.331744402647018,0.65491396188736,-0.503674864768982,-0.563382029533386,0.414326965808868,-0.847513318061829,-0.331744402647018,0.530287146568298,-0.713563740253448,-0.457845360040665,0.134703695774078,-0.930721879005432,-0.340017199516296,0.134703695774078,-0.930721879005432,-0.340017199516296,0.166270598769188,-0.985880434513092,0.0198450349271297,0.414326965808868,-0.847513318061829,-0.331744402647018,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.318604946136475,-0.851775884628296,-0.415895074605942,0.166518494486809,-0.975531220436096,-0.14356318116188,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.643197417259216,-0.725296139717102,-0.245443657040596,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.643197417259216,-0.725296139717102,-0.245443657040596,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.210238441824913,-0.975585281848907,0.0635072365403175,0.643197417259216,-0.725296139717102,-0.245443657040596,0.210238441824913,-0.975585281848907,0.0635072365403175,0.166518494486809,-0.975531220436096,-0.14356318116188,0.166518494486809,-0.975531220436096,-0.14356318116188,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.414326965808868,-0.847513318061829,-0.331744402647018,0.166270598769188,-0.985880434513092,0.0198450349271297,0.414326965808868,-0.847513318061829,-0.331744402647018,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.643197417259216,-0.725296139717102,-0.245443657040596,-0.90501195192337,0.21977810561657,0.364212721586227,-0.0499426536262035,0.692004799842834,0.720163226127625,-0.057441920042038,0.650170862674713,0.75761353969574,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.677114307880402,0.387711197137833,-0.625456809997559,\n-0.790130019187927,0.358856797218323,-0.496906787157059,-0.836970150470734,0.473509907722473,-0.274352669715881,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.585053384304047,0.545464694499969,0.600150644779205,0.0647351443767548,0.381562024354935,0.922073602676392,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.155946508049965,0.418714195489883,0.894627928733826,-0.256222367286682,0.552950799465179,0.792840123176575,-0.155946508049965,0.418714195489883,0.894627928733826,-0.213889330625534,0.483835697174072,0.848619103431702,-0.200460329651833,0.603900372982025,0.771440207958221,-0.633183777332306,0.444622397422791,-0.6335529088974,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.585053384304047,0.545464694499969,0.600150644779205,-0.162613198161125,0.452644348144531,0.876738309860229,0.0647351443767548,0.381562024354935,0.922073602676392,-0.585053384304047,0.545464694499969,0.600150644779205,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.878819167613983,0.322898685932159,0.351302325725555,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.525893211364746,0.411127626895905,0.744587421417236,-0.326038300991058,0.243334606289864,0.913502752780914,-0.200460329651833,0.603900372982025,0.771440207958221,-0.25537496805191,0.596560716629028,0.760854065418243,-0.256222367286682,0.552950799465179,0.792840123176575,-0.739033222198486,0.522002279758453,0.425844460725784,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.36957174539566,0.387512475252151,0.844541788101196,-0.36957174539566,0.387512475252151,0.844541788101196,-0.326038300991058,0.243334606289864,0.913502752780914,-0.739033222198486,0.522002279758453,0.425844460725784,-0.256222367286682,0.552950799465179,0.792840123176575,\n-0.155946508049965,0.418714195489883,0.894627928733826,-0.200460329651833,0.603900372982025,0.771440207958221,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.633183777332306,0.444622397422791,-0.6335529088974,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.806818068027496,0.571618735790253,0.149320676922798,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.806818068027496,0.571618735790253,0.149320676922798,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.559803783893585,0.448765695095062,0.696583867073059,-0.559803783893585,0.448765695095062,0.696583867073059,-0.507044553756714,0.251941651105881,0.824276208877563,-0.806818068027496,0.571618735790253,0.149320676922798,-0.0995585918426514,-0.971274793148041,-0.216132834553719,-0.541550755500793,-0.826843023300171,-0.151833668351173,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.739033222198486,0.522002279758453,0.425844460725784,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.162613198161125,0.452644348144531,0.876738309860229,-0.585053384304047,0.545464694499969,0.600150644779205,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.846407413482666,0.503773093223572,0.17264749109745,-0.802789449691772,0.535418033599854,0.26240548491478,-0.73642486333847,0.608879089355469,0.294863820075989,-0.802789449691772,0.535418033599854,0.26240548491478,-0.850029647350311,0.48296907544136,0.210215270519257,-0.826775729656219,0.455823004245758,0.329647213220596,0.515248417854309,-0.441880226135254,-0.734343886375427,0.745758533477783,-0.330089628696442,-0.578692495822906,0.648194909095764,-0.336823225021362,-0.682930052280426,-0.802789449691772,0.535418033599854,0.26240548491478,-0.737847745418549,0.550981104373932,0.389872461557388,-0.73642486333847,0.608879089355469,0.294863820075989,-0.826775729656219,0.455823004245758,0.329647213220596,-0.743728399276733,0.346636980772018,0.571586310863495,-0.948099076747894,0.317963510751724,0.00271255942061543,\n-0.737847745418549,0.550981104373932,0.389872461557388,-0.724430322647095,0.542059719562531,0.425877869129181,-0.693721890449524,0.488555252552032,0.529210448265076,-0.525893211364746,0.411127626895905,0.744587421417236,-0.878819167613983,0.322898685932159,0.351302325725555,-0.693721890449524,0.488555252552032,0.529210448265076,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.878819167613983,0.322898685932159,0.351302325725555,-0.525893211364746,0.411127626895905,0.744587421417236,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.911366164684296,0.266076982021332,0.31402975320816,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.911366164684296,0.266076982021332,0.31402975320816,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.730839848518372,0.374586492776871,0.570576965808868,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.730839848518372,0.374586492776871,0.570576965808868,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.156990006566048,-0.969383895397186,0.188809439539909,-0.534125924110413,-0.786291003227234,-0.310573488473892,0.113647989928722,-0.758261322975159,0.641968786716461,-0.156990006566048,-0.969383895397186,0.188809439539909,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.273908197879791,-0.125118911266327,-0.953582465648651,\n-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.629925072193146,0.0149115975946188,-0.776512682437897,0.906101286411285,-0.389416426420212,-0.165334045886993,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.950212061405182,0.303586721420288,0.0702292993664742,-0.181978538632393,0.229496166110039,0.956146061420441,-0.213889330625534,0.483835697174072,0.848619103431702,0.10479624569416,-0.144131794571877,0.983993768692017,0.075324609875679,0.630104899406433,0.772848010063171,-0.213889330625534,0.483835697174072,0.848619103431702,-0.181978538632393,0.229496166110039,0.956146061420441,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.810982346534729,-0.364237248897552,-0.457863301038742,0.946987807750702,-0.279256701469421,-0.158838823437691,0.917286098003387,-0.397383034229279,0.0259414706379175,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.370425969362259,-0.053249154239893,-0.927334427833557,0.843434154987335,0.424213349819183,0.329638987779617,0.619699597358704,0.579480230808258,0.529315650463104,0.631212413311005,0.590215682983398,0.503206074237823,0.986938416957855,-0.10414332151413,-0.122909314930439,0.906101286411285,-0.389416426420212,-0.165334045886993,0.843434154987335,0.424213349819183,0.329638987779617,-0.000278991181403399,0.484035164117813,0.875048518180847,-0.200460329651833,0.603900372982025,0.771440207958221,0.0509466230869293,0.674606919288635,0.73641699552536,-0.200460329651833,0.603900372982025,0.771440207958221,-0.000278991181403399,0.484035164117813,0.875048518180847,-0.225308075547218,0.514127254486084,0.827592551708221,-0.646084487438202,0.634681701660156,0.423973977565765,-0.601623058319092,0.623578310012817,0.499199062585831,-0.506461322307587,0.506999313831329,0.697458744049072,-0.636041522026062,0.455239772796631,0.623063385486603,-0.569389760494232,0.625551760196686,0.533366978168488,-0.458326160907745,0.410590946674347,0.788258969783783,-0.313503563404083,0.434664905071259,0.844264149665833,\n-0.126709908246994,0.488826990127563,0.863129615783691,0.126011043787003,0.287478059530258,0.949461758136749,-0.126709908246994,0.488826990127563,0.863129615783691,-0.313503563404083,0.434664905071259,0.844264149665833,-0.0354647859930992,0.343396455049515,0.938520729541779,0.540099084377289,-0.0461409948766232,0.840335667133331,0.498305976390839,-0.0497501380741596,0.865572690963745,0.126011043787003,0.287478059530258,0.949461758136749,0.280613332986832,0.159042209386826,0.946552574634552,0.809420764446259,-0.470037072896957,0.351998805999756,0.72262305021286,-0.326216995716095,0.609424650669098,0.716558694839478,-0.309423923492432,0.625140368938446,0.977863430976868,-0.0681029558181763,0.197851315140724,0.977863430976868,-0.0681029558181763,0.197851315140724,0.946987807750702,-0.279256701469421,-0.158838823437691,0.741691589355469,-0.67026162147522,0.0253561399877071,0.809420764446259,-0.470037072896957,0.351998805999756,0.946987807750702,-0.279256701469421,-0.158838823437691,0.810982346534729,-0.364237248897552,-0.457863301038742,0.582424879074097,-0.744178652763367,-0.327077031135559,0.741691589355469,-0.67026162147522,0.0253561399877071,0.810982346534729,-0.364237248897552,-0.457863301038742,0.745758533477783,-0.330089628696442,-0.578692495822906,0.508804976940155,-0.739443361759186,-0.440841227769852,0.582424879074097,-0.744178652763367,-0.327077031135559,0.284903138875961,-0.719545781612396,-0.633311986923218,0.416897594928741,-0.716307580471039,-0.559553265571594,0.508804976940155,-0.739443361759186,-0.440841227769852,0.745758533477783,-0.330089628696442,-0.578692495822906,0.515248417854309,-0.441880226135254,-0.734343886375427,-0.589546144008636,-0.0253028552979231,-0.807338297367096,-0.266710460186005,-0.229353681206703,-0.936088860034943,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.897937893867493,0.273350894451141,-0.344944715499878,\n-0.589546144008636,-0.0253028552979231,-0.807338297367096,-0.95041960477829,0.288634985685349,-0.115725472569466,-0.897937893867493,0.273350894451141,-0.344944715499878,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.720763742923737,0.630777835845947,0.28743514418602,-0.847473680973053,0.530733585357666,-0.0104993488639593,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.73642486333847,0.608879089355469,0.294863820075989,-0.646084487438202,0.634681701660156,0.423973977565765,-0.720763742923737,0.630777835845947,0.28743514418602,-0.73642486333847,0.608879089355469,0.294863820075989,-0.601623058319092,0.623578310012817,0.499199062585831,-0.847473680973053,0.530733585357666,-0.0104993488639593,-0.918838560581207,0.321084290742874,-0.229435324668884,-0.899121463298798,0.345348745584488,-0.268914222717285,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.918838560581207,0.321084290742874,-0.229435324668884,-0.95041960477829,0.288634985685349,-0.115725472569466,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.899121463298798,0.345348745584488,-0.268914222717285,0.126011043787003,0.287478059530258,0.949461758136749,-0.0354647859930992,0.343396455049515,0.938520729541779,0.280613332986832,0.159042209386826,0.946552574634552,-0.506461322307587,0.506999313831329,0.697458744049072,-0.313503563404083,0.434664905071259,0.844264149665833,-0.458326160907745,0.410590946674347,0.788258969783783,-0.636041522026062,0.455239772796631,0.623063385486603,0.540099084377289,-0.0461409948766232,0.840335667133331,0.716558694839478,-0.309423923492432,0.625140368938446,0.72262305021286,-0.326216995716095,0.609424650669098,0.498305976390839,-0.0497501380741596,0.865572690963745,-0.000557535502593964,-0.634240567684174,-0.773135602474213,0.284903138875961,-0.719545781612396,-0.633311986923218,0.515248417854309,-0.441880226135254,-0.734343886375427,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.085550844669342,-0.179267361760139,-0.980073630809784,\n-0.178665772080421,-0.378166645765305,-0.908332824707031,-0.000557535502593964,-0.634240567684174,-0.773135602474213,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.085550844669342,-0.179267361760139,-0.980073630809784,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.085550844669342,-0.179267361760139,-0.980073630809784,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.266710460186005,-0.229353681206703,-0.936088860034943,-0.178665772080421,-0.378166645765305,-0.908332824707031,0.280117779970169,0.669322490692139,0.688143491744995,0.458152443170547,0.667493462562561,0.586982846260071,0.562915802001953,0.509836494922638,0.650532484054565,0.291106730699539,0.735121071338654,0.612253129482269,-0.431082636117935,0.669595658779144,0.604821860790253,-0.285846680402756,0.740470588207245,0.608272194862366,-0.324628859758377,0.674010813236237,0.663570284843445,-0.658022820949554,0.640722334384918,0.395576566457748,-0.721357464790344,0.650649428367615,0.237273663282394,-0.557555019855499,0.7959104180336,0.235921680927277,-0.560215890407562,0.757637023925781,0.334879487752914,-0.677088737487793,-0.402109175920486,-0.616327106952667,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.453488618135452,0.205984279513359,-0.867132365703583,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.0743019878864288,-0.318207800388336,-0.945104777812958,0.0686725899577141,-0.344746232032776,-0.936180591583252,0.205058068037033,-0.244612783193588,-0.947689712047577,0.296686768531799,0.847575604915619,-0.439991503953934,\n0.454949915409088,0.569741904735565,-0.6844083070755,0.550657391548157,0.552472710609436,-0.625739872455597,0.339142799377441,0.423890322446823,-0.839820921421051,0.427927106618881,-0.320324927568436,-0.845145165920258,0.500678837299347,-0.355485200881958,-0.789272427558899,0.454949915409088,0.569741904735565,-0.6844083070755,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.915072500705719,0.126962244510651,0.382783114910126,-0.833327293395996,0.113953985273838,0.540906727313995,-0.850330471992493,0.108354985713959,0.514973104000092,-0.88858425617218,0.0664631873369217,0.453872948884964,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.95991450548172,0.12906339764595,0.248810708522797,-0.915072500705719,0.126962244510651,0.382783114910126,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.95991450548172,0.12906339764595,0.248810708522797,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.971041917800903,0.0163660850375891,-0.238347947597504,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.90544730424881,0.119117729365826,0.407401740550995,-0.830910623073578,0.150519490242004,0.535659790039063,-0.833327293395996,0.113953985273838,0.540906727313995,-0.915072500705719,0.126962244510651,0.382783114910126,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.90544730424881,0.119117729365826,0.407401740550995,-0.915072500705719,0.126962244510651,0.382783114910126,-0.95991450548172,0.12906339764595,0.248810708522797,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.96833336353302,0.0874056592583656,0.23386062681675,\n-0.95991450548172,0.12906339764595,0.248810708522797,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.446692645549774,0.129568219184875,0.885255753993988,-0.850330471992493,0.108354985713959,0.514973104000092,-0.833327293395996,0.113953985273838,0.540906727313995,-0.484486788511276,0.136127799749374,0.864142179489136,-0.833327293395996,0.113953985273838,0.540906727313995,-0.830910623073578,0.150519490242004,0.535659790039063,-0.504776954650879,0.179731994867325,0.844332098960876,-0.484486788511276,0.136127799749374,0.864142179489136,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.992459714412689,0.0535954684019089,-0.110232837498188,\n-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.615352869033813,0.61141961812973,-0.497500658035278,0.103712424635887,0.131697446107864,0.985849618911743,-0.446692645549774,0.129568219184875,0.885255753993988,-0.484486788511276,0.136127799749374,0.864142179489136,0.0677588582038879,0.127564132213593,0.989513099193573,-0.484486788511276,0.136127799749374,0.864142179489136,-0.504776954650879,0.179731994867325,0.844332098960876,0.0673240348696709,0.131959661841393,0.988966166973114,0.0677588582038879,0.127564132213593,0.989513099193573,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.508872270584106,0.031244209036231,0.860274851322174,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.0107409534975886,-0.582138001918793,0.813019037246704,-0.0107409534975886,-0.582138001918793,0.813019037246704,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.00733196083456278,-0.679022014141083,0.734081327915192,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.00733196083456278,-0.679022014141083,0.734081327915192,\n-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.615352869033813,0.61141961812973,-0.497500658035278,-0.280504614114761,0.75769966840744,-0.58924388885498,0.103712424635887,0.131697446107864,0.985849618911743,-0.3530093729496,0.178218960762024,0.918489158153534,-0.342477291822433,0.228350877761841,0.911353468894959,0.142002120614052,0.141973868012428,0.979631960391998,-0.203233033418655,-0.00871946662664413,0.979091584682465,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.0107409534975886,-0.582138001918793,0.813019037246704,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.0107409534975886,-0.582138001918793,0.813019037246704,\n-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.00733196083456278,-0.679022014141083,0.734081327915192,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.280504614114761,0.75769966840744,-0.58924388885498,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.850330471992493,0.108354985713959,0.514973104000092,-0.85614150762558,0.16506227850914,0.489669442176819,-0.866834819316864,0.162685200572014,0.471307665109634,\n-0.88858425617218,0.0664631873369217,0.453872948884964,-0.887829720973969,0.160652026534081,0.431218415498734,-0.954534351825714,0.144535258412361,0.260717809200287,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.954534351825714,0.144535258412361,0.260717809200287,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.971041917800903,0.0163660850375891,-0.238347947597504,-0.446692645549774,0.129568219184875,0.885255753993988,-0.4341821372509,0.175567016005516,0.883550822734833,-0.85614150762558,0.16506227850914,0.489669442176819,-0.850330471992493,0.108354985713959,0.514973104000092,0.103712424635887,0.131697446107864,0.985849618911743,0.142002120614052,0.141973868012428,0.979631960391998,-0.4341821372509,0.175567016005516,0.883550822734833,-0.446692645549774,0.129568219184875,0.885255753993988,-0.85614150762558,0.16506227850914,0.489669442176819,-0.542121350765228,0.80557918548584,0.239053606987,-0.545656681060791,0.805297791957855,0.23184959590435,-0.866834819316864,0.162685200572014,0.471307665109634,-0.887829720973969,0.160652026534081,0.431218415498734,-0.567242085933685,0.801439464092255,0.189555287361145,-0.613154649734497,0.784870028495789,0.0895571559667587,-0.954534351825714,0.144535258412361,0.260717809200287,-0.954534351825714,0.144535258412361,0.260717809200287,-0.613154649734497,0.784870028495789,0.0895571559667587,-0.63306587934494,0.773617923259735,-0.0272569861263037,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.4341821372509,0.175567016005516,0.883550822734833,-0.252021908760071,0.83885395526886,0.482502818107605,-0.542121350765228,0.80557918548584,0.239053606987,-0.85614150762558,0.16506227850914,0.489669442176819,0.142002120614052,0.141973868012428,0.979631960391998,\n0.134743452072144,0.77269721031189,0.620308935642242,-0.252021908760071,0.83885395526886,0.482502818107605,-0.4341821372509,0.175567016005516,0.883550822734833,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.795754730701447,0.170272067189217,0.58118999004364,-0.887829720973969,0.160652026534081,0.431218415498734,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.63306587934494,0.773617923259735,-0.0272569861263037,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.795754730701447,0.170272067189217,0.58118999004364,-0.502963840961456,0.808468639850616,0.305623710155487,-0.567242085933685,0.801439464092255,0.189555287361145,-0.887829720973969,0.160652026534081,0.431218415498734,-0.795754730701447,0.170272067189217,0.58118999004364,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.88858425617218,0.0664631873369217,0.453872948884964,\n-0.866834819316864,0.162685200572014,0.471307665109634,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.971041917800903,0.0163660850375891,-0.238347947597504,-0.502963840961456,0.808468639850616,0.305623710155487,-0.795754730701447,0.170272067189217,0.58118999004364,-0.866834819316864,0.162685200572014,0.471307665109634,-0.545656681060791,0.805297791957855,0.23184959590435,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.640371739864349,0.527525365352631,-0.558248162269592,-0.982470035552979,0.0214608013629913,-0.185180932283401,0.859614074230194,0.295270681381226,-0.416987895965576,0.727284967899323,0.664062142372131,-0.173430144786835,0.739424109458923,0.592256605625153,0.320131361484528,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.440291285514832,0.870396435260773,0.220348998904228,-0.696859955787659,0.71514618396759,-0.0543340221047401,0.480490952730179,0.872772097587585,-0.0860075280070305,0.739424109458923,0.592256605625153,0.320131361484528,0.727284967899323,0.664062142372131,-0.173430144786835,0.859614074230194,0.295270681381226,-0.416987895965576,0.95859158039093,0.227282658219337,-0.171594634652138,0.452183425426483,0.585657775402069,-0.672707319259644,0.663050174713135,0.587917149066925,-0.463376611471176,0.618651807308197,0.59744918346405,-0.510219931602478,0.606457710266113,0.614539504051209,-0.504529714584351,0.818660914897919,0.313737779855728,-0.481002062559128,\n0.726223528385162,0.613508462905884,-0.310172140598297,0.668675601482391,0.60236382484436,-0.435925096273422,0.818660914897919,0.313737779855728,-0.481002062559128,0.837498724460602,0.478580474853516,-0.263735711574554,0.618651807308197,0.59744918346405,-0.510219931602478,0.266915023326874,0.622528493404388,-0.735672950744629,0.107837736606598,0.170556277036667,-0.979429244995117,0.606457710266113,0.614539504051209,-0.504529714584351,-0.745452880859375,0.509112060070038,-0.430238157510757,0.107837736606598,0.170556277036667,-0.979429244995117,-0.112059034407139,0.629188656806946,-0.769132256507874,-0.907228708267212,0.420285493135452,-0.0172105636447668,0.760291457176209,0.640448451042175,-0.108548037707806,0.754503428936005,0.630674540996552,-0.181587845087051,0.837498724460602,0.478580474853516,-0.263735711574554,0.913363456726074,0.407031029462814,0.00964442919939756,0.786859929561615,0.489207118749619,-0.376201838254929,0.760291457176209,0.640448451042175,-0.108548037707806,0.913363456726074,0.407031029462814,0.00964442919939756,0.95859158039093,0.227282658219337,-0.171594634652138,-0.793882787227631,0.349916815757751,-0.497301042079926,0.859614074230194,0.295270681381226,-0.416987895965576,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.615352869033813,0.61141961812973,-0.497500658035278,-0.542121350765228,0.80557918548584,0.239053606987,0.618651807308197,0.59744918346405,-0.510219931602478,0.663050174713135,0.587917149066925,-0.463376611471176,-0.545656681060791,0.805297791957855,0.23184959590435,-0.567242085933685,0.801439464092255,0.189555287361145,0.668675601482391,0.60236382484436,-0.435925096273422,0.726223528385162,0.613508462905884,-0.310172140598297,-0.613154649734497,0.784870028495789,0.0895571559667587,-0.613154649734497,0.784870028495789,0.0895571559667587,0.726223528385162,0.613508462905884,-0.310172140598297,0.754503428936005,0.630674540996552,-0.181587845087051,-0.63306587934494,0.773617923259735,-0.0272569861263037,-0.672253370285034,0.372103184461594,-0.640011370182037,0.739069283008575,0.399415373802185,-0.542442619800568,\n0.859614074230194,0.295270681381226,-0.416987895965576,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.640371739864349,0.527525365352631,-0.558248162269592,0.786859929561615,0.489207118749619,-0.376201838254929,0.739069283008575,0.399415373802185,-0.542442619800568,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.252021908760071,0.83885395526886,0.482502818107605,0.266915023326874,0.622528493404388,-0.735672950744629,0.618651807308197,0.59744918346405,-0.510219931602478,-0.542121350765228,0.80557918548584,0.239053606987,0.134743452072144,0.77269721031189,0.620308935642242,-0.112059034407139,0.629188656806946,-0.769132256507874,0.266915023326874,0.622528493404388,-0.735672950744629,-0.252021908760071,0.83885395526886,0.482502818107605,-0.500255882740021,0.598247230052948,0.625974655151367,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.112059034407139,0.629188656806946,-0.769132256507874,0.134743452072144,0.77269721031189,0.620308935642242,-0.502963840961456,0.808468639850616,0.305623710155487,0.617954909801483,0.584929347038269,-0.525346875190735,0.668675601482391,0.60236382484436,-0.435925096273422,-0.567242085933685,0.801439464092255,0.189555287361145,-0.63306587934494,0.773617923259735,-0.0272569861263037,0.754503428936005,0.630674540996552,-0.181587845087051,0.760291457176209,0.640448451042175,-0.108548037707806,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.545656681060791,0.805297791957855,0.23184959590435,0.663050174713135,0.587917149066925,-0.463376611471176,0.617954909801483,0.584929347038269,-0.525346875190735,-0.502963840961456,0.808468639850616,0.305623710155487,-0.632741153240204,0.704046428203583,-0.322424083948135,0.760291457176209,0.640448451042175,-0.108548037707806,0.786859929561615,0.489207118749619,-0.376201838254929,-0.640371739864349,0.527525365352631,-0.558248162269592,0.134743452072144,0.77269721031189,0.620308935642242,0.142002120614052,0.141973868012428,0.979631960391998,-0.342477291822433,0.228350877761841,0.911353468894959,-0.500255882740021,0.598247230052948,0.625974655151367,\n-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.280504614114761,0.75769966840744,-0.58924388885498,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.508872270584106,0.031244209036231,0.860274851322174,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.88858425617218,0.0664631873369217,0.453872948884964,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.971041917800903,0.0163660850375891,-0.238347947597504,0.754503428936005,0.630674540996552,-0.181587845087051,0.726223528385162,0.613508462905884,-0.310172140598297,\n0.837498724460602,0.478580474853516,-0.263735711574554,0.739069283008575,0.399415373802185,-0.542442619800568,0.786859929561615,0.489207118749619,-0.376201838254929,0.95859158039093,0.227282658219337,-0.171594634652138,0.266915023326874,0.622528493404388,-0.735672950744629,-0.112059034407139,0.629188656806946,-0.769132256507874,0.107837736606598,0.170556277036667,-0.979429244995117,0.668675601482391,0.60236382484436,-0.435925096273422,0.617954909801483,0.584929347038269,-0.525346875190735,0.818660914897919,0.313737779855728,-0.481002062559128,0.663050174713135,0.587917149066925,-0.463376611471176,0.818660914897919,0.313737779855728,-0.481002062559128,0.617954909801483,0.584929347038269,-0.525346875190735,-0.615352869033813,0.61141961812973,-0.497500658035278,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.280504614114761,0.75769966840744,-0.58924388885498,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.640371739864349,0.527525365352631,-0.558248162269592,0.739069283008575,0.399415373802185,-0.542442619800568,0.95859158039093,0.227282658219337,-0.171594634652138,0.859614074230194,0.295270681381226,-0.416987895965576,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.280504614114761,0.75769966840744,-0.58924388885498,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.128415614366531,0.132796317338943,0.982789158821106,-0.3530093729496,0.178218960762024,0.918489158153534,0.103712424635887,0.131697446107864,0.985849618911743,0.0677588582038879,0.127564132213593,0.989513099193573,-0.271919548511505,0.128996223211288,0.953635036945343,-0.128415614366531,0.132796317338943,0.982789158821106,0.0677588582038879,0.127564132213593,0.989513099193573,0.0673240348696709,0.131959661841393,0.988966166973114,0.107837736606598,0.170556277036667,-0.979429244995117,-0.745452880859375,0.509112060070038,-0.430238157510757,\n-0.394719243049622,0.916350066661835,0.0670766159892082,0.606457710266113,0.614539504051209,-0.504529714584351,0.606457710266113,0.614539504051209,-0.504529714584351,-0.394719243049622,0.916350066661835,0.0670766159892082,-0.514610290527344,0.855887234210968,0.0513155348598957,0.818660914897919,0.313737779855728,-0.481002062559128,0.818660914897919,0.313737779855728,-0.481002062559128,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.0310307368636131,0.989131927490234,-0.14371882379055,0.837498724460602,0.478580474853516,-0.263735711574554,0.913363456726074,0.407031029462814,0.00964442919939756,0.837498724460602,0.478580474853516,-0.263735711574554,-0.0310307368636131,0.989131927490234,-0.14371882379055,-0.484726011753082,0.737569272518158,-0.470140665769577,0.95859158039093,0.227282658219337,-0.171594634652138,0.95859158039093,0.227282658219337,-0.171594634652138,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.6479212641716,0.534398972988129,-0.542785227298737,0.452183425426483,0.585657775402069,-0.672707319259644,0.452183425426483,0.585657775402069,-0.672707319259644,-0.6479212641716,0.534398972988129,-0.542785227298737,-0.621815145015717,0.744533002376556,-0.24293327331543,0.727284967899323,0.664062142372131,-0.173430144786835,0.727284967899323,0.664062142372131,-0.173430144786835,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.440291285514832,0.870396435260773,0.220348998904228,0.739424109458923,0.592256605625153,0.320131361484528,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.854438602924347,-0.0391707941889763,-0.518073618412018,-0.845922648906708,-0.233836725354195,-0.47930708527565,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.0231689736247063,-0.380177617073059,0.924623250961304,-0.109985366463661,-0.239039614796638,0.964760720729828,0.0760682299733162,-0.295749306678772,0.952232122421265,0.15866231918335,-0.379611045122147,0.91143935918808,0.52398556470871,-0.396742969751358,0.753680408000946,\n0.790293097496033,-0.395322471857071,0.468142062425613,0.755637884140015,-0.506735622882843,0.415006548166275,0.481494694948196,-0.484542727470398,0.730329513549805,0.871467053890228,-0.412256300449371,0.265687584877014,0.755637884140015,-0.506735622882843,0.415006548166275,0.790293097496033,-0.395322471857071,0.468142062425613,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.815638482570648,-0.327178388834,0.477166801691055,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.815638482570648,-0.327178388834,0.477166801691055,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.730245351791382,-0.126696899533272,0.671334207057953,0.184660375118256,-0.167485639452934,0.968426108360291,-0.326030820608139,-0.10023545473814,0.940030157566071,-0.378116965293884,-0.19206166267395,0.905615746974945,0.141510874032974,-0.212751299142838,0.9668048620224,0.641422510147095,-0.270272105932236,0.718004286289215,0.0331840701401234,-0.163069397211075,0.986056387424469,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.481494694948196,-0.484542727470398,0.730329513549805,0.817183673381805,-0.296553581953049,0.494233578443527,0.641422510147095,-0.270272105932236,0.718004286289215,0.481494694948196,-0.484542727470398,0.730329513549805,0.755637884140015,-0.506735622882843,0.415006548166275,0.92842835187912,-0.2966628074646,0.223633676767349,0.925617933273315,-0.33330973982811,0.179265230894089,0.755637884140015,-0.506735622882843,0.415006548166275,0.871467053890228,-0.412256300449371,0.265687584877014,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.941830277442932,0.142349690198898,-0.30445408821106,\n-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.791375637054443,0.071151964366436,-0.607175409793854,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.883178770542145,0.174471154808998,-0.435379177331924,0.279067039489746,0.00181126198731363,0.960269927978516,-0.192327111959457,0.128940626978874,0.972822964191437,0.0315546318888664,0.227497383952141,0.973267316818237,0.421088457107544,0.0603364557027817,0.905010521411896,0.176409095525742,0.258731871843338,0.949703991413116,0.128309071063995,0.135050594806671,0.982495903968811,0.228005558252335,0.109595686197281,0.967472076416016,0.239963844418526,0.229667663574219,0.943223297595978,0.952021479606628,-0.172354578971863,0.252881437540054,0.951565146446228,-0.195825412869453,0.237015143036842,0.941856145858765,-0.193580731749535,0.27465158700943,0.931146800518036,-0.184283837676048,0.31465071439743,0.951565146446228,-0.195825412869453,0.237015143036842,0.98254132270813,-0.173451960086823,0.0672831237316132,0.987110912799835,-0.0946229994297028,0.129068180918694,0.941856145858765,-0.193580731749535,0.27465158700943,-0.114197492599487,0.229852318763733,0.966502368450165,-0.810181975364685,0.20594097673893,0.548811018466949,-0.743342161178589,-0.232909336686134,0.627053201198578,-0.328887611627579,-0.327985614538193,0.885583639144897,0.169450357556343,0.192077651619911,0.966639935970306,-0.114197492599487,0.229852318763733,0.966502368450165,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.200362399220467,-0.34291222691536,0.917750597000122,0.234150499105453,0.240436136722565,0.941999971866608,0.708682000637054,0.0549906380474567,0.703381717205048,0.421088457107544,0.0603364557027817,0.905010521411896,0.0315546318888664,0.227497383952141,0.973267316818237,0.383701860904694,0.4597148001194,0.800896465778351,0.307897627353668,0.368194788694382,0.877286553382874,0.176409095525742,0.258731871843338,0.949703991413116,0.239963844418526,0.229667663574219,0.943223297595978,\n0.96482926607132,0.118159219622612,0.23482520878315,0.931146800518036,-0.184283837676048,0.31465071439743,0.941856145858765,-0.193580731749535,0.27465158700943,0.974241256713867,0.0409249700605869,0.221763730049133,0.991360425949097,0.041219849139452,0.124520778656006,0.974241256713867,0.0409249700605869,0.221763730049133,0.941856145858765,-0.193580731749535,0.27465158700943,0.987110912799835,-0.0946229994297028,0.129068180918694,0.522907495498657,0.438181906938553,0.731139063835144,0.459321737289429,0.336945086717606,0.821882903575897,0.307897627353668,0.368194788694382,0.877286553382874,0.383701860904694,0.4597148001194,0.800896465778351,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.405384927988052,-0.526269018650055,0.747465074062347,0.0315546318888664,0.227497383952141,0.973267316818237,0.537278115749359,0.0936880186200142,0.838185369968414,0.618959546089172,0.0886023566126823,0.780409336090088,0.234150499105453,0.240436136722565,0.941999971866608,-0.192327111959457,0.128940626978874,0.972822964191437,0.414723992347717,0.00967027805745602,0.909895896911621,0.537278115749359,0.0936880186200142,0.838185369968414,0.0315546318888664,0.227497383952141,0.973267316818237,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.437478572130203,-0.839489638805389,0.32228809595108,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.696337580680847,-0.401266604661942,0.595062255859375,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.437478572130203,-0.839489638805389,0.32228809595108,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.696337580680847,-0.401266604661942,0.595062255859375,-0.383682757616043,-0.370396196842194,0.845928013324738,\n0.0664144828915596,-0.803862929344177,0.591095209121704,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.127582266926765,-0.6490518450737,0.749969661235809,0.0995035693049431,-0.912259519100189,0.397343188524246,0.453684121370316,-0.692796587944031,0.560538649559021,-0.0757445394992828,-0.423881083726883,0.902545094490051,-0.248274028301239,-0.562410414218903,0.788704335689545,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.689171850681305,-0.406394809484482,0.599904477596283,0.0119833052158356,-0.684736132621765,0.728692531585693,-0.4933140873909,-0.832423627376556,0.252412617206573,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.248274028301239,-0.562410414218903,0.788704335689545,0.588976085186005,-0.561100006103516,0.58161324262619,-0.405343025922775,-0.871097385883331,0.277284026145935,-0.4933140873909,-0.832423627376556,0.252412617206573,0.0119833052158356,-0.684736132621765,0.728692531585693,0.588976085186005,-0.561100006103516,0.58161324262619,0.80362457036972,-0.592847883701324,0.052143108099699,-0.182750031352043,-0.981905281543732,-0.0496434457600117,-0.405343025922775,-0.871097385883331,0.277284026145935,0.586520791053772,-0.278485208749771,-0.760551989078522,0.557888448238373,-0.237554967403412,-0.795190632343292,0.250409841537476,-0.715217471122742,-0.652502000331879,0.815547049045563,-0.485381871461868,-0.315099239349365,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.38756388425827,0.403812289237976,-0.82869166135788,0.722857892513275,-0.480003207921982,-0.497064769268036,0.661856412887573,-0.0551184453070164,-0.747601568698883,0.557888448238373,-0.237554967403412,-0.795190632343292,0.586520791053772,-0.278485208749771,-0.760551989078522,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.0894739627838135,-0.183631375432014,-0.978914678096771,\n-0.0492830350995064,-0.186444014310837,-0.981228709220886,0.733602523803711,0.10412222892046,-0.671554863452911,0.827176570892334,0.131099432706833,-0.546435594558716,0.785422801971436,0.0201532933861017,-0.618631482124329,0.733602523803711,0.10412222892046,-0.671554863452911,0.784134984016418,-0.509350836277008,-0.354533582925797,0.873561680316925,0.247193098068237,-0.419267863035202,0.827176570892334,0.131099432706833,-0.546435594558716,0.313923090696335,0.485718756914139,-0.815799951553345,0.310650020837784,0.28316468000412,-0.907366693019867,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.0705952271819115,0.538945734500885,-0.839377045631409,0.163023561239243,0.98268049955368,-0.0881040766835213,-0.237061515450478,0.971401154994965,-0.0134798940271139,0.24549475312233,0.895091116428375,0.372215270996094,0.460725337266922,0.860505640506744,0.217398658394814,0.611826419830322,0.748416423797607,0.256010234355927,0.461327522993088,0.762120604515076,0.454256683588028,0.551901042461395,0.718475461006165,0.423318117856979,0.692905008792877,0.710618555545807,0.122081570327282,0.692905008792877,0.710618555545807,0.122081570327282,0.551901042461395,0.718475461006165,0.423318117856979,0.744250357151031,0.605297327041626,0.282323569059372,0.765731871128082,0.635692894458771,-0.0977200418710709,0.72797954082489,0.659762263298035,-0.1864393055439,0.727798700332642,0.645059943199158,-0.232823416590691,0.737480342388153,0.641140997409821,0.212275862693787,0.749618530273438,0.631173431873322,0.199228778481483,0.72797954082489,0.659762263298035,-0.1864393055439,0.749618530273438,0.631173431873322,0.199228778481483,0.857426404953003,0.506103038787842,0.0931651070713997,0.787813723087311,0.593129634857178,-0.165972396731377,-0.383682757616043,-0.370396196842194,0.845928013324738,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.453684121370316,-0.692796587944031,0.560538649559021,0.0664144828915596,-0.803862929344177,0.591095209121704,-0.689171850681305,-0.406394809484482,0.599904477596283,-0.877826690673828,-0.373566150665283,0.299780994653702,\n-0.552228093147278,-0.748099327087402,0.367955982685089,-0.419215679168701,-0.523534297943115,0.741734504699707,-0.845922648906708,-0.233836725354195,-0.47930708527565,-0.854438602924347,-0.0391707941889763,-0.518073618412018,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.437478572130203,-0.839489638805389,0.32228809595108,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.437478572130203,-0.839489638805389,0.32228809595108,0.0664144828915596,-0.803862929344177,0.591095209121704,-0.485520303249359,-0.413982003927231,0.769992828369141,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.188842684030533,-0.479351043701172,0.857065320014954,0.453684121370316,-0.692796587944031,0.560538649559021,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.187207087874413,-0.466673582792282,0.864389538764954,0.215633437037468,-0.617008090019226,0.756837606430054,-0.0384488701820374,-0.525311648845673,0.850040793418884,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.4933140873909,-0.832423627376556,0.252412617206573,0.505574882030487,-0.704972505569458,0.497401028871536,0.215633437037468,-0.617008090019226,0.756837606430054,-0.4933140873909,-0.832423627376556,0.252412617206573,-0.405343025922775,-0.871097385883331,0.277284026145935,0.648859202861786,-0.732072532176971,0.207488730549812,0.505574882030487,-0.704972505569458,0.497401028871536,-0.405343025922775,-0.871097385883331,0.277284026145935,\n-0.182750031352043,-0.981905281543732,-0.0496434457600117,0.557888448238373,-0.237554967403412,-0.795190632343292,0.913924276828766,-0.399497181177139,-0.0717244148254395,0.724748253822327,-0.680762588977814,-0.106311939656734,0.250409841537476,-0.715217471122742,-0.652502000331879,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.854438602924347,-0.0391707941889763,-0.518073618412018,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.0816480964422226,-0.362786769866943,0.928288400173187,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.584700465202332,-0.0801375582814217,0.80728143453598,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.913924276828766,-0.399497181177139,-0.0717244148254395,0.557888448238373,-0.237554967403412,-0.795190632343292,0.661856412887573,-0.0551184453070164,-0.747601568698883,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.0894739627838135,-0.183631375432014,-0.978914678096771,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.0894739627838135,-0.183631375432014,-0.978914678096771,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.791375637054443,0.071151964366436,-0.607175409793854,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.12953394651413,0.104335330426693,-0.986070513725281,0.827176570892334,0.131099432706833,-0.546435594558716,0.987110912799835,-0.0946229994297028,0.129068180918694,0.98254132270813,-0.173451960086823,0.0672831237316132,0.785422801971436,0.0201532933861017,-0.618631482124329,0.873561680316925,0.247193098068237,-0.419267863035202,0.991360425949097,0.041219849139452,0.124520778656006,0.987110912799835,-0.0946229994297028,0.129068180918694,0.827176570892334,0.131099432706833,-0.546435594558716,\n-0.751268684864044,0.274677604436874,-0.60012298822403,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.816423416137695,0.517423629760742,0.256369888782501,-0.317345827817917,0.649519979953766,0.69095253944397,0.24549475312233,0.895091116428375,0.372215270996094,-0.237061515450478,0.971401154994965,-0.0134798940271139,-0.0108341164886951,0.764748215675354,0.644238173961639,0.533803761005402,0.725452780723572,0.434478789567947,0.551901042461395,0.718475461006165,0.423318117856979,0.461327522993088,0.762120604515076,0.454256683588028,0.533803761005402,0.725452780723572,0.434478789567947,0.713100373744965,0.617973983287811,0.331052958965302,0.744250357151031,0.605297327041626,0.282323569059372,0.551901042461395,0.718475461006165,0.423318117856979,0.744611740112305,0.447527796030045,0.495249718427658,0.514605224132538,0.383560210466385,0.766852676868439,0.749618530273438,0.631173431873322,0.199228778481483,0.737480342388153,0.641140997409821,0.212275862693787,0.514605224132538,0.383560210466385,0.766852676868439,0.787412106990814,0.238013699650764,0.568622589111328,0.857426404953003,0.506103038787842,0.0931651070713997,0.749618530273438,0.631173431873322,0.199228778481483,0.976662814617157,0.0512243360280991,0.208580628037453,0.972417175769806,0.114111065864563,0.203429251909256,0.990084290504456,0.101971529424191,0.0966169014573097,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.972417175769806,0.114111065864563,0.203429251909256,0.976662814617157,0.0512243360280991,0.208580628037453,0.942203402519226,0.0765308514237404,0.326183587312698,0.936010003089905,0.160365864634514,0.313317894935608,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.460758477449417,0.108215481042862,0.880903542041779,-0.120599381625652,0.0903127938508987,0.988584518432617,0.453684121370316,-0.692796587944031,0.560538649559021,-0.188842684030533,-0.479351043701172,0.857065320014954,\n-0.485520303249359,-0.413982003927231,0.769992828369141,0.0664144828915596,-0.803862929344177,0.591095209121704,0.243934661149979,-0.119537994265556,0.962396264076233,-0.309459805488586,0.0171791967004538,0.950757324695587,-0.192327111959457,0.128940626978874,0.972822964191437,0.279067039489746,0.00181126198731363,0.960269927978516,0.204974547028542,-0.221624046564102,0.953345775604248,-0.326030820608139,-0.10023545473814,0.940030157566071,-0.309459805488586,0.0171791967004538,0.950757324695587,0.243934661149979,-0.119537994265556,0.962396264076233,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.378116965293884,-0.19206166267395,0.905615746974945,-0.326030820608139,-0.10023545473814,0.940030157566071,0.204974547028542,-0.221624046564102,0.953345775604248,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.378116965293884,-0.19206166267395,0.905615746974945,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.0222479663789272,-0.27899968624115,-0.960033416748047,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.809815943241119,-0.0024391699116677,-0.586678981781006,0.936010003089905,0.160365864634514,0.313317894935608,0.913795173168182,0.295857787132263,0.278292179107666,0.974241256713867,0.0409249700605869,0.221763730049133,0.972417175769806,0.114111065864563,0.203429251909256,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.725508868694305,-0.0050850510597229,-0.68819397687912,0.785422801971436,0.0201532933861017,-0.618631482124329,\n0.98254132270813,-0.173451960086823,0.0672831237316132,0.501740634441376,-0.243245840072632,0.830113112926483,0.549654603004456,-0.190786004066467,0.8133145570755,-0.129216328263283,-0.0478254519402981,0.990462481975555,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.333558112382889,-0.317182183265686,0.887769341468811,-0.395515620708466,-0.150387838482857,0.906063437461853,0.141510874032974,-0.212751299142838,0.9668048620224,-0.378116965293884,-0.19206166267395,0.905615746974945,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.689171850681305,-0.406394809484482,0.599904477596283,0.974241256713867,0.0409249700605869,0.221763730049133,0.991360425949097,0.041219849139452,0.124520778656006,0.990084290504456,0.101971529424191,0.0966169014573097,0.972417175769806,0.114111065864563,0.203429251909256,-0.120599381625652,0.0903127938508987,0.988584518432617,-0.460758477449417,0.108215481042862,0.880903542041779,-0.565971076488495,0.169359281659126,0.806842088699341,-0.3249591588974,0.21022142469883,0.922067523002625,-0.778803586959839,0.240923523902893,0.579155206680298,-0.509689390659332,0.284962147474289,0.811796367168427,-0.3249591588974,0.21022142469883,0.922067523002625,-0.565971076488495,0.169359281659126,0.806842088699341,-0.317345827817917,0.649519979953766,0.69095253944397,-0.0108341164886951,0.764748215675354,0.644238173961639,0.461327522993088,0.762120604515076,0.454256683588028,0.24549475312233,0.895091116428375,0.372215270996094,0.460725337266922,0.860505640506744,0.217398658394814,0.24549475312233,0.895091116428375,0.372215270996094,0.461327522993088,0.762120604515076,0.454256683588028,0.611826419830322,0.748416423797607,0.256010234355927,0.931353688240051,0.363742500543594,0.0164845213294029,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.725508868694305,-0.0050850510597229,-0.68819397687912,\n0.661856412887573,-0.0551184453070164,-0.747601568698883,0.722857892513275,-0.480003207921982,-0.497064769268036,0.725508868694305,-0.0050850510597229,-0.68819397687912,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.661856412887573,-0.0551184453070164,-0.747601568698883,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.967770040035248,-0.190110430121422,0.165164038538933,0.92842835187912,-0.2966628074646,0.223633676767349,0.967770040035248,-0.190110430121422,0.165164038538933,0.969397664070129,-0.16740058362484,0.179569631814957,0.925617933273315,-0.33330973982811,0.179265230894089,0.92842835187912,-0.2966628074646,0.223633676767349,0.817183673381805,-0.296553581953049,0.494233578443527,0.858429610729218,-0.151253923773766,0.490123331546783,0.736215591430664,-0.133181810379028,0.663512766361237,0.641422510147095,-0.270272105932236,0.718004286289215,0.641422510147095,-0.270272105932236,0.718004286289215,0.736215591430664,-0.133181810379028,0.663512766361237,0.15244060754776,-0.0132473884150386,0.988223850727081,0.0331840701401234,-0.163069397211075,0.986056387424469,0.27410614490509,-0.107289530336857,0.955695986747742,-0.309459805488586,0.0171791967004538,0.950757324695587,-0.326030820608139,-0.10023545473814,0.940030157566071,0.184660375118256,-0.167485639452934,0.968426108360291,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.584700465202332,-0.0801375582814217,0.80728143453598,-0.0894739627838135,-0.183631375432014,-0.978914678096771,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.0222479663789272,-0.27899968624115,-0.960033416748047,-0.0492830350995064,-0.186444014310837,-0.981228709220886,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.845922648906708,-0.233836725354195,-0.47930708527565,\n-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.182750031352043,-0.981905281543732,-0.0496434457600117,0.80362457036972,-0.592847883701324,0.052143108099699,0.815547049045563,-0.485381871461868,-0.315099239349365,0.250409841537476,-0.715217471122742,-0.652502000331879,0.724748253822327,-0.680762588977814,-0.106311939656734,0.648859202861786,-0.732072532176971,0.207488730549812,-0.182750031352043,-0.981905281543732,-0.0496434457600117,0.250409841537476,-0.715217471122742,-0.652502000331879,0.876565277576447,0.158835455775261,0.4543177485466,0.81756728887558,0.216796487569809,0.533463180065155,0.744038224220276,-0.0333225503563881,0.667305529117584,0.807695090770721,-0.134995654225349,0.573938012123108,-0.129216328263283,-0.0478254519402981,0.990462481975555,0.549654603004456,-0.190786004066467,0.8133145570755,0.611190438270569,0.347120821475983,0.711303949356079,0.110788695514202,0.611092865467072,0.783767402172089,-0.251838445663452,-0.440982908010483,0.861458897590637,0.337114036083221,-0.517145156860352,0.786711513996124,0.69356244802475,0.349522531032562,0.629924654960632,0.179207041859627,0.602162182331085,0.778000950813293,0.840604901313782,-0.077635869383812,0.536056041717529,0.169450357556343,0.192077651619911,0.966639935970306,-0.200362399220467,-0.34291222691536,0.917750597000122,0.417133778333664,-0.483815759420395,0.769364476203918,0.713100373744965,0.617973983287811,0.331052958965302,0.744611740112305,0.447527796030045,0.495249718427658,0.737480342388153,0.641140997409821,0.212275862693787,0.744250357151031,0.605297327041626,0.282323569059372,0.727798700332642,0.645059943199158,-0.232823416590691,0.765731871128082,0.635692894458771,-0.0977200418710709,0.744250357151031,0.605297327041626,0.282323569059372,0.737480342388153,0.641140997409821,0.212275862693787,0.747647821903229,-0.00706117879599333,-0.664057850837708,\n0.733602523803711,0.10412222892046,-0.671554863452911,0.785422801971436,0.0201532933861017,-0.618631482124329,0.725508868694305,-0.0050850510597229,-0.68819397687912,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.98254132270813,-0.173451960086823,0.0672831237316132,0.951565146446228,-0.195825412869453,0.237015143036842,0.967770040035248,-0.190110430121422,0.165164038538933,0.967770040035248,-0.190110430121422,0.165164038538933,0.951565146446228,-0.195825412869453,0.237015143036842,0.952021479606628,-0.172354578971863,0.252881437540054,0.969397664070129,-0.16740058362484,0.179569631814957,0.15244060754776,-0.0132473884150386,0.988223850727081,0.228005558252335,0.109595686197281,0.967472076416016,0.128309071063995,0.135050594806671,0.982495903968811,-0.00481649860739708,-0.00974023062735796,0.999940991401672,0.414723992347717,0.00967027805745602,0.909895896911621,-0.192327111959457,0.128940626978874,0.972822964191437,-0.309459805488586,0.0171791967004538,0.950757324695587,0.27410614490509,-0.107289530336857,0.955695986747742,-0.460758477449417,0.108215481042862,0.880903542041779,-0.709648728370667,-0.32101958990097,0.627172350883484,-0.471319168806076,0.566682040691376,0.675817847251892,-0.565971076488495,0.169359281659126,0.806842088699341,-0.471319168806076,0.566682040691376,0.675817847251892,0.179207041859627,0.602162182331085,0.778000950813293,-0.24122528731823,-0.215426832437515,0.946256637573242,-0.565971076488495,0.169359281659126,0.806842088699341,-0.251838445663452,-0.440982908010483,0.861458897590637,-0.0749797448515892,0.161466658115387,0.984025657176971,0.279067039489746,0.00181126198731363,0.960269927978516,0.337114036083221,-0.517145156860352,0.786711513996124,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.743342161178589,-0.232909336686134,0.627053201198578,-0.565971076488495,0.169359281659126,0.806842088699341,-0.24122528731823,-0.215426832437515,0.946256637573242,-0.565971076488495,0.169359281659126,0.806842088699341,-0.743342161178589,-0.232909336686134,0.627053201198578,-0.810181975364685,0.20594097673893,0.548811018466949,\n-0.778803586959839,0.240923523902893,0.579155206680298,-0.200362399220467,-0.34291222691536,0.917750597000122,-0.24122528731823,-0.215426832437515,0.946256637573242,0.421088457107544,0.0603364557027817,0.905010521411896,0.417133778333664,-0.483815759420395,0.769364476203918,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.382766902446747,0.693923592567444,0.609884858131409,0.353388279676437,0.625863969326019,0.695277690887451,0.533803761005402,0.725452780723572,0.434478789567947,0.533803761005402,0.725452780723572,0.434478789567947,0.353388279676437,0.625863969326019,0.695277690887451,0.596079111099243,0.546218872070313,0.588502049446106,0.713100373744965,0.617973983287811,0.331052958965302,-0.509491384029388,0.564497232437134,0.649431586265564,-0.460758477449417,0.108215481042862,0.880903542041779,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.778017282485962,0.0114750172942877,0.628138065338135,0.501740634441376,-0.243245840072632,0.830113112926483,0.204974547028542,-0.221624046564102,0.953345775604248,0.243934661149979,-0.119537994265556,0.962396264076233,0.549654603004456,-0.190786004066467,0.8133145570755,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.713192403316498,-0.572692215442657,0.404203116893768,-0.801663935184479,-0.0182420816272497,0.597496509552002,-0.584700465202332,-0.0801375582814217,0.80728143453598,0.204974547028542,-0.221624046564102,0.953345775604248,0.501740634441376,-0.243245840072632,0.830113112926483,0.274976700544357,-0.741329073905945,0.612224638462067,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.552228093147278,-0.748099327087402,0.367955982685089,0.274976700544357,-0.741329073905945,0.612224638462067,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.164029136300087,-0.974515855312347,-0.15301413834095,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.584700465202332,-0.0801375582814217,0.80728143453598,-0.801663935184479,-0.0182420816272497,0.597496509552002,0.549654603004456,-0.190786004066467,0.8133145570755,\n0.243934661149979,-0.119537994265556,0.962396264076233,0.279067039489746,0.00181126198731363,0.960269927978516,0.611190438270569,0.347120821475983,0.711303949356079,0.110788695514202,0.611092865467072,0.783767402172089,0.611190438270569,0.347120821475983,0.711303949356079,0.279067039489746,0.00181126198731363,0.960269927978516,-0.0749797448515892,0.161466658115387,0.984025657176971,0.69356244802475,0.349522531032562,0.629924654960632,0.421088457107544,0.0603364557027817,0.905010521411896,-0.24122528731823,-0.215426832437515,0.946256637573242,0.179207041859627,0.602162182331085,0.778000950813293,0.421088457107544,0.0603364557027817,0.905010521411896,0.69356244802475,0.349522531032562,0.629924654960632,0.337114036083221,-0.517145156860352,0.786711513996124,0.279067039489746,0.00181126198731363,0.960269927978516,0.708682000637054,0.0549906380474567,0.703381717205048,0.840604901313782,-0.077635869383812,0.536056041717529,0.417133778333664,-0.483815759420395,0.769364476203918,0.421088457107544,0.0603364557027817,0.905010521411896,0.713100373744965,0.617973983287811,0.331052958965302,0.596079111099243,0.546218872070313,0.588502049446106,0.924569427967072,0.246832609176636,0.290249824523926,0.744611740112305,0.447527796030045,0.495249718427658,0.274976700544357,-0.741329073905945,0.612224638462067,0.501740634441376,-0.243245840072632,0.830113112926483,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.419215679168701,-0.523534297943115,0.741734504699707,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.164029136300087,-0.974515855312347,-0.15301413834095,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.706475257873535,0.284995973110199,0.647819399833679,-0.768386900424957,0.31679978966713,0.556075036525726,-0.617434501647949,0.298396319150925,0.727828443050385,-0.471209764480591,0.287038415670395,0.834008574485779,-0.485232472419739,0.239207372069359,0.84102874994278,-0.566947221755981,0.26147249341011,0.781154930591583,-0.551642179489136,0.164528906345367,0.817692577838898,\n-0.439302027225494,0.130682304501534,0.888783395290375,-0.439302027225494,0.130682304501534,0.888783395290375,-0.551642179489136,0.164528906345367,0.817692577838898,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.38883912563324,0.0112887192517519,0.921236515045166,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.38883912563324,0.0112887192517519,0.921236515045166,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.333558112382889,-0.317182183265686,0.887769341468811,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.333558112382889,-0.317182183265686,0.887769341468811,-0.815638482570648,-0.327178388834,0.477166801691055,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.815638482570648,-0.327178388834,0.477166801691055,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.97038471698761,0.0723681449890137,-0.230469912290573,\n-0.941830277442932,0.142349690198898,-0.30445408821106,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.751268684864044,0.274677604436874,-0.60012298822403,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.333558112382889,-0.317182183265686,0.887769341468811,0.0331840701401234,-0.163069397211075,0.986056387424469,0.15244060754776,-0.0132473884150386,0.988223850727081,-0.00481649860739708,-0.00974023062735796,0.999940991401672,-0.125947520136833,-0.109786510467529,0.985943257808685,0.0331840701401234,-0.163069397211075,0.986056387424469,-0.125947520136833,-0.109786510467529,0.985943257808685,-0.109985366463661,-0.239039614796638,0.964760720729828,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.936010003089905,0.160365864634514,0.313317894935608,0.942203402519226,0.0765308514237404,0.326183587312698,0.888628959655762,0.438762068748474,0.133515372872353,0.886933207511902,0.205319285392761,0.413755267858505,0.876565277576447,0.158835455775261,0.4543177485466,\n0.913795173168182,0.295857787132263,0.278292179107666,0.839090466499329,0.267581433057785,0.473632037639618,0.81756728887558,0.216796487569809,0.533463180065155,0.835870265960693,-0.162916868925095,0.524193644523621,0.807695090770721,-0.134995654225349,0.573938012123108,0.744038224220276,-0.0333225503563881,0.667305529117584,0.754620671272278,-0.10168993473053,0.648233592510223,0.835870265960693,-0.162916868925095,0.524193644523621,0.754620671272278,-0.10168993473053,0.648233592510223,0.736215591430664,-0.133181810379028,0.663512766361237,0.858429610729218,-0.151253923773766,0.490123331546783,0.886933207511902,0.205319285392761,0.413755267858505,0.888628959655762,0.438762068748474,0.133515372872353,0.884826481342316,0.464208155870438,0.0399109348654747,0.7496537566185,0.27985754609108,0.599749088287354,0.81756728887558,0.216796487569809,0.533463180065155,0.839090466499329,0.267581433057785,0.473632037639618,0.522907495498657,0.438181906938553,0.731139063835144,0.383701860904694,0.4597148001194,0.800896465778351,0.744038224220276,-0.0333225503563881,0.667305529117584,0.81756728887558,0.216796487569809,0.533463180065155,0.383701860904694,0.4597148001194,0.800896465778351,0.239963844418526,0.229667663574219,0.943223297595978,0.228005558252335,0.109595686197281,0.967472076416016,0.754620671272278,-0.10168993473053,0.648233592510223,0.744038224220276,-0.0333225503563881,0.667305529117584,0.239963844418526,0.229667663574219,0.943223297595978,0.736215591430664,-0.133181810379028,0.663512766361237,0.754620671272278,-0.10168993473053,0.648233592510223,0.228005558252335,0.109595686197281,0.967472076416016,0.15244060754776,-0.0132473884150386,0.988223850727081,0.459321737289429,0.336945086717606,0.821882903575897,0.665011644363403,0.0966486409306526,0.740552842617035,0.307897627353668,0.368194788694382,0.877286553382874,0.925617933273315,-0.33330973982811,0.179265230894089,0.969397664070129,-0.16740058362484,0.179569631814957,0.858429610729218,-0.151253923773766,0.490123331546783,0.817183673381805,-0.296553581953049,0.494233578443527,\n0.969397664070129,-0.16740058362484,0.179569631814957,0.952021479606628,-0.172354578971863,0.252881437540054,0.835870265960693,-0.162916868925095,0.524193644523621,0.858429610729218,-0.151253923773766,0.490123331546783,0.835870265960693,-0.162916868925095,0.524193644523621,0.952021479606628,-0.172354578971863,0.252881437540054,0.931146800518036,-0.184283837676048,0.31465071439743,0.807695090770721,-0.134995654225349,0.573938012123108,0.876565277576447,0.158835455775261,0.4543177485466,0.807695090770721,-0.134995654225349,0.573938012123108,0.931146800518036,-0.184283837676048,0.31465071439743,0.96482926607132,0.118159219622612,0.23482520878315,0.913795173168182,0.295857787132263,0.278292179107666,0.876565277576447,0.158835455775261,0.4543177485466,0.96482926607132,0.118159219622612,0.23482520878315,0.925617933273315,-0.33330973982811,0.179265230894089,0.817183673381805,-0.296553581953049,0.494233578443527,0.755637884140015,-0.506735622882843,0.415006548166275,0.92842835187912,-0.2966628074646,0.223633676767349,0.871467053890228,-0.412256300449371,0.265687584877014,0.881475806236267,-0.330746680498123,0.337056457996368,0.881475806236267,-0.330746680498123,0.337056457996368,0.871467053890228,-0.412256300449371,0.265687584877014,0.790293097496033,-0.395322471857071,0.468142062425613,0.505574882030487,-0.704972505569458,0.497401028871536,0.648859202861786,-0.732072532176971,0.207488730549812,-0.3249591588974,0.21022142469883,0.922067523002625,-0.509689390659332,0.284962147474289,0.811796367168427,-0.706475257873535,0.284995973110199,0.647819399833679,-0.471209764480591,0.287038415670395,0.834008574485779,-0.485232472419739,0.239207372069359,0.84102874994278,-0.120599381625652,0.0903127938508987,0.988584518432617,-0.3249591588974,0.21022142469883,0.922067523002625,-0.485232472419739,0.239207372069359,0.84102874994278,-0.439302027225494,0.130682304501534,0.888783395290375,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.38883912563324,0.0112887192517519,0.921236515045166,\n-0.35503289103508,-0.122166983783245,0.926837027072906,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.188842684030533,-0.479351043701172,0.857065320014954,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.485520303249359,-0.413982003927231,0.769992828369141,-0.188842684030533,-0.479351043701172,0.857065320014954,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.485520303249359,-0.413982003927231,0.769992828369141,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.888693332672119,0.348883032798767,-0.297497481107712,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.806990265846252,-0.00711527280509472,-0.590521931648254,\n-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.854438602924347,-0.0391707941889763,-0.518073618412018,0.913924276828766,-0.399497181177139,-0.0717244148254395,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.92842835187912,-0.2966628074646,0.223633676767349,0.881475806236267,-0.330746680498123,0.337056457996368,0.648859202861786,-0.732072532176971,0.207488730549812,0.724748253822327,-0.680762588977814,-0.106311939656734,0.913924276828766,-0.399497181177139,-0.0717244148254395,0.881475806236267,-0.330746680498123,0.337056457996368,0.52398556470871,-0.396742969751358,0.753680408000946,0.215633437037468,-0.617008090019226,0.756837606430054,0.505574882030487,-0.704972505569458,0.497401028871536,0.790293097496033,-0.395322471857071,0.468142062425613,-0.0384488701820374,-0.525311648845673,0.850040793418884,0.215633437037468,-0.617008090019226,0.756837606430054,0.52398556470871,-0.396742969751358,0.753680408000946,0.15866231918335,-0.379611045122147,0.91143935918808,-0.0384488701820374,-0.525311648845673,0.850040793418884,-0.187207087874413,-0.466673582792282,0.864389538764954,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.187207087874413,-0.466673582792282,0.864389538764954,-0.0384488701820374,-0.525311648845673,0.850040793418884,0.15866231918335,-0.379611045122147,0.91143935918808,0.0760682299733162,-0.295749306678772,0.952232122421265,0.141510874032974,-0.212751299142838,0.9668048620224,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.187207087874413,-0.466673582792282,0.864389538764954,0.0760682299733162,-0.295749306678772,0.952232122421265,0.141510874032974,-0.212751299142838,0.9668048620224,\n0.0760682299733162,-0.295749306678772,0.952232122421265,-0.109985366463661,-0.239039614796638,0.964760720729828,0.184660375118256,-0.167485639452934,0.968426108360291,0.141510874032974,-0.212751299142838,0.9668048620224,-0.109985366463661,-0.239039614796638,0.964760720729828,-0.125947520136833,-0.109786510467529,0.985943257808685,0.27410614490509,-0.107289530336857,0.955695986747742,0.184660375118256,-0.167485639452934,0.968426108360291,-0.125947520136833,-0.109786510467529,0.985943257808685,-0.00481649860739708,-0.00974023062735796,0.999940991401672,0.414723992347717,0.00967027805745602,0.909895896911621,0.27410614490509,-0.107289530336857,0.955695986747742,-0.00481649860739708,-0.00974023062735796,0.999940991401672,0.128309071063995,0.135050594806671,0.982495903968811,0.537278115749359,0.0936880186200142,0.838185369968414,0.414723992347717,0.00967027805745602,0.909895896911621,0.128309071063995,0.135050594806671,0.982495903968811,0.176409095525742,0.258731871843338,0.949703991413116,0.665011644363403,0.0966486409306526,0.740552842617035,0.618959546089172,0.0886023566126823,0.780409336090088,0.537278115749359,0.0936880186200142,0.838185369968414,0.176409095525742,0.258731871843338,0.949703991413116,0.307897627353668,0.368194788694382,0.877286553382874,0.857426404953003,0.506103038787842,0.0931651070713997,0.787412106990814,0.238013699650764,0.568622589111328,0.7496537566185,0.27985754609108,0.599749088287354,0.884826481342316,0.464208155870438,0.0399109348654747,0.818305492401123,0.54065877199173,-0.195100545883179,0.787813723087311,0.593129634857178,-0.165972396731377,0.857426404953003,0.506103038787842,0.0931651070713997,0.884826481342316,0.464208155870438,0.0399109348654747,0.913795173168182,0.295857787132263,0.278292179107666,0.936010003089905,0.160365864634514,0.313317894935608,0.886933207511902,0.205319285392761,0.413755267858505,0.839090466499329,0.267581433057785,0.473632037639618,0.913795173168182,0.295857787132263,0.278292179107666,0.96482926607132,0.118159219622612,0.23482520878315,0.974241256713867,0.0409249700605869,0.221763730049133,\n-0.917055070400238,0.301483958959579,0.260993033647537,-0.898983955383301,0.272523552179337,0.342868447303772,-0.617434501647949,0.298396319150925,0.727828443050385,-0.768386900424957,0.31679978966713,0.556075036525726,-0.816423416137695,0.517423629760742,0.256369888782501,-0.911110818386078,0.327579766511917,0.250137090682983,-0.768386900424957,0.31679978966713,0.556075036525726,-0.706475257873535,0.284995973110199,0.647819399833679,-0.816423416137695,0.517423629760742,0.256369888782501,-0.706475257873535,0.284995973110199,0.647819399833679,-0.509689390659332,0.284962147474289,0.811796367168427,-0.317345827817917,0.649519979953766,0.69095253944397,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.317345827817917,0.649519979953766,0.69095253944397,-0.509689390659332,0.284962147474289,0.811796367168427,-0.778803586959839,0.240923523902893,0.579155206680298,-0.382766902446747,0.693923592567444,0.609884858131409,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.778803586959839,0.240923523902893,0.579155206680298,-0.810181975364685,0.20594097673893,0.548811018466949,0.353388279676437,0.625863969326019,0.695277690887451,-0.382766902446747,0.693923592567444,0.609884858131409,-0.810181975364685,0.20594097673893,0.548811018466949,-0.114197492599487,0.229852318763733,0.966502368450165,0.596079111099243,0.546218872070313,0.588502049446106,0.353388279676437,0.625863969326019,0.695277690887451,-0.114197492599487,0.229852318763733,0.966502368450165,0.169450357556343,0.192077651619911,0.966639935970306,0.924569427967072,0.246832609176636,0.290249824523926,0.596079111099243,0.546218872070313,0.588502049446106,0.169450357556343,0.192077651619911,0.966639935970306,0.840604901313782,-0.077635869383812,0.536056041717529,0.744611740112305,0.447527796030045,0.495249718427658,0.924569427967072,0.246832609176636,0.290249824523926,0.840604901313782,-0.077635869383812,0.536056041717529,0.708682000637054,0.0549906380474567,0.703381717205048,0.514605224132538,0.383560210466385,0.766852676868439,0.744611740112305,0.447527796030045,0.495249718427658,\n0.708682000637054,0.0549906380474567,0.703381717205048,0.234150499105453,0.240436136722565,0.941999971866608,0.787412106990814,0.238013699650764,0.568622589111328,0.514605224132538,0.383560210466385,0.766852676868439,0.234150499105453,0.240436136722565,0.941999971866608,0.618959546089172,0.0886023566126823,0.780409336090088,0.787412106990814,0.238013699650764,0.568622589111328,0.618959546089172,0.0886023566126823,0.780409336090088,0.665011644363403,0.0966486409306526,0.740552842617035,0.459321737289429,0.336945086717606,0.821882903575897,0.7496537566185,0.27985754609108,0.599749088287354,0.7496537566185,0.27985754609108,0.599749088287354,0.459321737289429,0.336945086717606,0.821882903575897,0.522907495498657,0.438181906938553,0.731139063835144,0.839090466499329,0.267581433057785,0.473632037639618,0.886933207511902,0.205319285392761,0.413755267858505,0.7496537566185,0.27985754609108,0.599749088287354,0.522907495498657,0.438181906938553,0.731139063835144,-0.768386900424957,0.31679978966713,0.556075036525726,-0.911110818386078,0.327579766511917,0.250137090682983,-0.917055070400238,0.301483958959579,0.260993033647537,0.260435909032822,0.0412507019937038,-0.964609503746033,0.159143656492233,-0.20932050049305,-0.964809954166412,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.12953394651413,0.104335330426693,-0.986070513725281,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.791375637054443,0.071151964366436,-0.607175409793854,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.791375637054443,0.071151964366436,-0.607175409793854,\n-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.709648728370667,-0.32101958990097,0.627172350883484,-0.460758477449417,0.108215481042862,0.880903542041779,-0.0749797448515892,0.161466658115387,0.984025657176971,-0.251838445663452,-0.440982908010483,0.861458897590637,0.884826481342316,0.464208155870438,0.0399109348654747,0.888628959655762,0.438762068748474,0.133515372872353,0.66844254732132,0.71253913640976,-0.213242888450623,0.818305492401123,0.54065877199173,-0.195100545883179,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.751268684864044,0.274677604436874,-0.60012298822403,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.12953394651413,0.104335330426693,-0.986070513725281,0.310650020837784,0.28316468000412,-0.907366693019867,0.260435909032822,0.0412507019937038,-0.964609503746033,-0.12953394651413,0.104335330426693,-0.986070513725281,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.120599381625652,0.0903127938508987,0.988584518432617,-0.439302027225494,0.130682304501534,0.888783395290375,-0.38883912563324,0.0112887192517519,0.921236515045166,0.990084290504456,0.101971529424191,0.0966169014573097,0.991360425949097,0.041219849139452,0.124520778656006,0.873561680316925,0.247193098068237,-0.419267863035202,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.784134984016418,-0.509350836277008,-0.354533582925797,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.873561680316925,0.247193098068237,-0.419267863035202,-0.237061515450478,0.971401154994965,-0.0134798940271139,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.816423416137695,0.517423629760742,0.256369888782501,0.163023561239243,0.98268049955368,-0.0881040766835213,\n-0.149312153458595,0.980366826057434,-0.128789886832237,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.237061515450478,0.971401154994965,-0.0134798940271139,-0.911110818386078,0.327579766511917,0.250137090682983,-0.816423416137695,0.517423629760742,0.256369888782501,-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.917055070400238,0.301483958959579,0.260993033647537,-0.911110818386078,0.327579766511917,0.250137090682983,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.942716598510742,0.31031545996666,0.12243277579546,-0.898983955383301,0.272523552179337,0.342868447303772,-0.917055070400238,0.301483958959579,0.260993033647537,-0.942716598510742,0.31031545996666,0.12243277579546,-0.966511785984039,0.186886444687843,0.175864636898041,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.888693332672119,0.348883032798767,-0.297497481107712,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.955984711647034,0.292123109102249,-0.0275191478431225,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.278325170278549,0.959965646266937,0.0316396243870258,0.0602656826376915,0.93876701593399,-0.339241087436676,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.923302352428436,0.378709852695465,0.0639655441045761,\n-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.942716598510742,0.31031545996666,0.12243277579546,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.955984711647034,0.292123109102249,-0.0275191478431225,0.0602656826376915,0.93876701593399,-0.339241087436676,0.313923090696335,0.485718756914139,-0.815799951553345,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.888693332672119,0.348883032798767,-0.297497481107712,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.955984711647034,0.292123109102249,-0.0275191478431225,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.942716598510742,0.31031545996666,0.12243277579546,-0.955984711647034,0.292123109102249,-0.0275191478431225,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.966511785984039,0.186886444687843,0.175864636898041,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.566947221755981,0.26147249341011,0.781154930591583,-0.617434501647949,0.298396319150925,0.727828443050385,-0.898983955383301,0.272523552179337,0.342868447303772,-0.500255882740021,0.598247230052948,0.625974655151367,-0.342477291822433,0.228350877761841,0.911353468894959,-0.471209764480591,0.287038415670395,0.834008574485779,-0.617434501647949,0.298396319150925,0.727828443050385,\n-0.566947221755981,0.26147249341011,0.781154930591583,-0.485232472419739,0.239207372069359,0.84102874994278,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.271919548511505,0.128996223211288,0.953635036945343,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.551642179489136,0.164528906345367,0.817692577838898,-0.3530093729496,0.178218960762024,0.918489158153534,-0.128415614366531,0.132796317338943,0.982789158821106,-0.271919548511505,0.128996223211288,0.953635036945343,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.440291285514832,0.870396435260773,0.220348998904228,-0.621815145015717,0.744533002376556,-0.24293327331543,\n-0.6479212641716,0.534398972988129,-0.542785227298737,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.898983955383301,0.272523552179337,0.342868447303772,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.500255882740021,0.598247230052948,0.625974655151367,-0.745452880859375,0.509112060070038,-0.430238157510757,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.966511785984039,0.186886444687843,0.175864636898041,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.394719243049622,0.916350066661835,0.0670766159892082,-0.966511785984039,0.186886444687843,0.175864636898041,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.566947221755981,0.26147249341011,0.781154930591583,-0.342477291822433,0.228350877761841,0.911353468894959,-0.3530093729496,0.178218960762024,0.918489158153534,-0.551642179489136,0.164528906345367,0.817692577838898,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.0310307368636131,0.989131927490234,-0.14371882379055,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.992392778396606,0.0152386799454689,-0.122165411710739,\n-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.90544730424881,0.119117729365826,0.407401740550995,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.830910623073578,0.150519490242004,0.535659790039063,-0.90544730424881,0.119117729365826,0.407401740550995,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.504776954650879,0.179731994867325,0.844332098960876,-0.830910623073578,0.150519490242004,0.535659790039063,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.508872270584106,0.031244209036231,0.860274851322174,0.0673240348696709,0.131959661841393,0.988966166973114,-0.504776954650879,0.179731994867325,0.844332098960876,-0.508872270584106,0.031244209036231,0.860274851322174,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.271919548511505,0.128996223211288,0.953635036945343,0.0673240348696709,0.131959661841393,0.988966166973114,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.00733196083456278,-0.679022014141083,0.734081327915192,-0.24122528731823,-0.215426832437515,0.946256637573242,-0.200362399220467,-0.34291222691536,0.917750597000122,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.709648728370667,-0.32101958990097,0.627172350883484,\n-0.251838445663452,-0.440982908010483,0.861458897590637,0.179207041859627,0.602162182331085,0.778000950813293,-0.471319168806076,0.566682040691376,0.675817847251892,-0.509491384029388,0.564497232437134,0.649431586265564,0.110788695514202,0.611092865467072,0.783767402172089,-0.0749797448515892,0.161466658115387,0.984025657176971,-0.460758477449417,0.108215481042862,0.880903542041779,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.129216328263283,-0.0478254519402981,0.990462481975555,0.110788695514202,0.611092865467072,0.783767402172089,-0.509491384029388,0.564497232437134,0.649431586265564,-0.801663935184479,-0.0182420816272497,0.597496509552002,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.129216328263283,-0.0478254519402981,0.990462481975555,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.713192403316498,-0.572692215442657,0.404203116893768,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.801663935184479,-0.0182420816272497,0.597496509552002,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.164029136300087,-0.974515855312347,-0.15301413834095,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.713192403316498,-0.572692215442657,0.404203116893768,-0.127582266926765,-0.6490518450737,0.749969661235809,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.164029136300087,-0.974515855312347,-0.15301413834095,0.0995035693049431,-0.912259519100189,0.397343188524246,0.52398556470871,-0.396742969751358,0.753680408000946,0.481494694948196,-0.484542727470398,0.730329513549805,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.15866231918335,-0.379611045122147,0.91143935918808,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.278325170278549,0.959965646266937,0.0316396243870258,\n-0.901924610137939,0.307412892580032,0.303363412618637,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.899024248123169,0.213699862360954,0.382214277982712,-0.899024248123169,0.213699862360954,0.382214277982712,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.761745274066925,0.099917359650135,0.640125453472137,-0.857412815093994,0.318779051303864,0.404008865356445,-0.899024248123169,0.213699862360954,0.382214277982712,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.761745274066925,0.099917359650135,0.640125453472137,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.208346873521805,-0.195467934012413,0.95832347869873,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.26332488656044,-0.487629622220993,0.832392573356628,-0.777440845966339,0.387861520051956,0.495125383138657,-0.921807289123535,0.190687090158463,0.337505161762238,-0.943840563297272,0.1807881295681,0.276551336050034,-0.938613772392273,0.27569842338562,0.207351386547089,-0.9817014336586,0.106130860745907,0.158109441399574,-0.857412815093994,0.318779051303864,0.404008865356445,-0.761745274066925,0.099917359650135,0.640125453472137,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.761745274066925,0.099917359650135,0.640125453472137,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.565454542636871,-0.235293716192245,0.790504932403564,\n-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.208346873521805,-0.195467934012413,0.95832347869873,-0.235414087772369,-0.349107921123505,0.90703022480011,-0.973640561103821,0.150163590908051,0.171682626008987,-0.9817014336586,0.106130860745907,0.158109441399574,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.235414087772369,-0.349107921123505,0.90703022480011,-0.199428826570511,-0.151153653860092,0.968184232711792,-0.943840563297272,0.1807881295681,0.276551336050034,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.938613772392273,0.27569842338562,0.207351386547089,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.901924610137939,0.307412892580032,0.303363412618637,-0.938613772392273,0.27569842338562,0.207351386547089,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.857412815093994,0.318779051303864,0.404008865356445,-0.777440845966339,0.387861520051956,0.495125383138657,-0.901924610137939,0.307412892580032,0.303363412618637,-0.899024248123169,0.213699862360954,0.382214277982712,-0.9817014336586,0.106130860745907,0.158109441399574,-0.921807289123535,0.190687090158463,0.337505161762238,-0.777440845966339,0.387861520051956,0.495125383138657,-0.857412815093994,0.318779051303864,0.404008865356445,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.54743480682373,0.804430425167084,0.230666100978851,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.938417971134186,0.0142068117856979,0.345209956169128,\n-0.798004448413849,0.101907536387444,0.593972861766815,-0.250951796770096,0.864163637161255,0.436170101165771,-0.54743480682373,0.804430425167084,0.230666100978851,-0.798004448413849,0.101907536387444,0.593972861766815,-0.507640421390533,0.139722898602486,0.85016393661499,0.0952272266149521,0.827912211418152,0.552714347839355,-0.250951796770096,0.864163637161255,0.436170101165771,-0.507640421390533,0.139722898602486,0.85016393661499,-0.146061703562737,0.0914116725325584,0.985043108463287,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.798004448413849,0.101907536387444,0.593972861766815,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.507640421390533,0.139722898602486,0.85016393661499,-0.798004448413849,0.101907536387444,0.593972861766815,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.182312056422234,-0.0702576190233231,0.98072737455368,-0.146061703562737,0.0914116725325584,0.985043108463287,-0.507640421390533,0.139722898602486,0.85016393661499,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.97012186050415,0.115440957248211,0.213394016027451,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.952853083610535,0.227692499756813,0.200567036867142,-0.799672305583954,0.218887090682983,0.559117794036865,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.799672305583954,0.218887090682983,0.559117794036865,-0.508204877376556,0.144576609134674,0.849014341831207,-0.182312056422234,-0.0702576190233231,0.98072737455368,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.508204877376556,0.144576609134674,0.849014341831207,-0.14939372241497,0.0765637531876564,0.985809028148651,-0.799672305583954,0.218887090682983,0.559117794036865,\n-0.952853083610535,0.227692499756813,0.200567036867142,-0.973640561103821,0.150163590908051,0.171682626008987,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.508204877376556,0.144576609134674,0.849014341831207,-0.799672305583954,0.218887090682983,0.559117794036865,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.14939372241497,0.0765637531876564,0.985809028148651,-0.508204877376556,0.144576609134674,0.849014341831207,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.199428826570511,-0.151153653860092,0.968184232711792,-0.938012957572937,0.237204626202583,-0.252716571092606,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.97012186050415,0.115440957248211,0.213394016027451,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.952853083610535,0.227692499756813,0.200567036867142,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.97012186050415,0.115440957248211,0.213394016027451,-0.960990250110626,0.131045117974281,0.243567124009132,-0.948896527290344,0.107380069792271,0.296757221221924,-0.943840563297272,0.1807881295681,0.276551336050034,-0.960990250110626,0.131045117974281,0.243567124009132,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.960990250110626,0.131045117974281,0.243567124009132,\n-0.97012186050415,0.115440957248211,0.213394016027451,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.960990250110626,0.131045117974281,0.243567124009132,-0.943840563297272,0.1807881295681,0.276551336050034,-0.921807289123535,0.190687090158463,0.337505161762238,-0.948896527290344,0.107380069792271,0.296757221221924,0.801646828651428,-0.0831208676099777,0.591991007328033,0.734746038913727,-0.160801336169243,0.659007728099823,0.70257967710495,-0.699933767318726,0.128352925181389,0.841358840465546,-0.538884103298187,0.0414636693894863,0.401816725730896,-0.892981171607971,0.202800214290619,0.70257967710495,-0.699933767318726,0.128352925181389,0.734746038913727,-0.160801336169243,0.659007728099823,0.503881454467773,-0.329790472984314,0.798336863517761,-0.0260992348194122,-0.974703729152679,0.221971705555916,0.401816725730896,-0.892981171607971,0.202800214290619,0.503881454467773,-0.329790472984314,0.798336863517761,0.107415564358234,-0.480258971452713,0.870524644851685,0.498356074094772,-0.197405740618706,0.844199180603027,0.503881454467773,-0.329790472984314,0.798336863517761,0.734746038913727,-0.160801336169243,0.659007728099823,0.73037314414978,-0.078302189707756,0.678545415401459,0.147659823298454,-0.24711586534977,0.957669198513031,0.107415564358234,-0.480258971452713,0.870524644851685,0.503881454467773,-0.329790472984314,0.798336863517761,0.498356074094772,-0.197405740618706,0.844199180603027,-0.208346873521805,-0.195467934012413,0.95832347869873,-0.26332488656044,-0.487629622220993,0.832392573356628,0.107415564358234,-0.480258971452713,0.870524644851685,0.147659823298454,-0.24711586534977,0.957669198513031,0.751119554042816,-0.269360929727554,0.602713882923126,0.685023248195648,0.00244083511643112,0.728517115116119,0.857912063598633,-0.151919424533844,0.490823149681091,0.808899104595184,-0.271903991699219,0.521296918392181,0.498356074094772,-0.197405740618706,0.844199180603027,0.73037314414978,-0.078302189707756,0.678545415401459,0.806595623493195,-0.339085549116135,0.484173983335495,0.540686428546906,-0.418503105640411,0.729735136032104,\n0.147659823298454,-0.24711586534977,0.957669198513031,0.498356074094772,-0.197405740618706,0.844199180603027,0.540686428546906,-0.418503105640411,0.729735136032104,0.155815690755844,-0.419202774763107,0.894421875476837,-0.208346873521805,-0.195467934012413,0.95832347869873,0.147659823298454,-0.24711586534977,0.957669198513031,0.155815690755844,-0.419202774763107,0.894421875476837,-0.235414087772369,-0.349107921123505,0.90703022480011,0.540686428546906,-0.418503105640411,0.729735136032104,0.806595623493195,-0.339085549116135,0.484173983335495,0.82207328081131,-0.257045179605484,0.508058369159698,0.566346645355225,-0.257577836513519,0.782882571220398,0.155815690755844,-0.419202774763107,0.894421875476837,0.540686428546906,-0.418503105640411,0.729735136032104,0.566346645355225,-0.257577836513519,0.782882571220398,0.190858632326126,-0.215845569968224,0.957592666149139,-0.235414087772369,-0.349107921123505,0.90703022480011,0.155815690755844,-0.419202774763107,0.894421875476837,0.190858632326126,-0.215845569968224,0.957592666149139,-0.199428826570511,-0.151153653860092,0.968184232711792,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.808899104595184,-0.271903991699219,0.521296918392181,0.857912063598633,-0.151919424533844,0.490823149681091,0.841358840465546,-0.538884103298187,0.0414636693894863,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.857912063598633,-0.151919424533844,0.490823149681091,0.801646828651428,-0.0831208676099777,0.591991007328033,0.73037314414978,-0.078302189707756,0.678545415401459,0.734746038913727,-0.160801336169243,0.659007728099823,0.801646828651428,-0.0831208676099777,0.591991007328033,0.685023248195648,0.00244083511643112,0.728517115116119,0.73037314414978,-0.078302189707756,0.678545415401459,0.685023248195648,0.00244083511643112,0.728517115116119,0.751119554042816,-0.269360929727554,0.602713882923126,0.806595623493195,-0.339085549116135,0.484173983335495,0.733399391174316,-0.42873340845108,0.527553796768188,0.972478210926056,0.193684622645378,0.129508212208748,\n0.895388960838318,0.358975827693939,0.263467311859131,0.69538801908493,-0.360292613506317,0.621791541576386,0.535216987133026,-0.203684195876122,0.819789946079254,0.730379700660706,0.544567286968231,0.412300884723663,0.44217050075531,0.718546867370605,0.536819994449615,0.224035635590553,-0.0279745738953352,0.97417938709259,0.224035635590553,-0.0279745738953352,0.97417938709259,0.44217050075531,0.718546867370605,0.536819994449615,0.0952272266149521,0.827912211418152,0.552714347839355,-0.146061703562737,0.0914116725325584,0.985043108463287,0.476951867341995,-0.307240515947342,0.823480546474457,0.658827781677246,-0.438512951135635,0.611271023750305,0.69538801908493,-0.360292613506317,0.621791541576386,0.535216987133026,-0.203684195876122,0.819789946079254,0.163414120674133,-0.171451970934868,0.971545219421387,0.476951867341995,-0.307240515947342,0.823480546474457,0.535216987133026,-0.203684195876122,0.819789946079254,0.224035635590553,-0.0279745738953352,0.97417938709259,-0.182312056422234,-0.0702576190233231,0.98072737455368,0.163414120674133,-0.171451970934868,0.971545219421387,0.224035635590553,-0.0279745738953352,0.97417938709259,-0.146061703562737,0.0914116725325584,0.985043108463287,0.817899644374847,-0.355826288461685,0.452137023210526,0.585005819797516,-0.507527828216553,0.632600724697113,0.754743993282318,-0.253586798906326,0.605024993419647,0.814589738845825,-0.243902504444122,0.526265263557434,0.839219391345978,-0.174447894096375,0.515052139759064,0.658827781677246,-0.438512951135635,0.611271023750305,0.476951867341995,-0.307240515947342,0.823480546474457,0.605567514896393,-0.0923454314470291,0.790417790412903,0.605567514896393,-0.0923454314470291,0.790417790412903,0.476951867341995,-0.307240515947342,0.823480546474457,0.163414120674133,-0.171451970934868,0.971545219421387,0.2394889742136,-0.0051474985666573,0.970885455608368,0.2394889742136,-0.0051474985666573,0.970885455608368,0.163414120674133,-0.171451970934868,0.971545219421387,-0.182312056422234,-0.0702576190233231,0.98072737455368,-0.14939372241497,0.0765637531876564,0.985809028148651,\n0.82207328081131,-0.257045179605484,0.508058369159698,0.839219391345978,-0.174447894096375,0.515052139759064,0.605567514896393,-0.0923454314470291,0.790417790412903,0.566346645355225,-0.257577836513519,0.782882571220398,0.566346645355225,-0.257577836513519,0.782882571220398,0.605567514896393,-0.0923454314470291,0.790417790412903,0.2394889742136,-0.0051474985666573,0.970885455608368,0.190858632326126,-0.215845569968224,0.957592666149139,0.190858632326126,-0.215845569968224,0.957592666149139,0.2394889742136,-0.0051474985666573,0.970885455608368,-0.14939372241497,0.0765637531876564,0.985809028148651,-0.199428826570511,-0.151153653860092,0.968184232711792,0.814589738845825,-0.243902504444122,0.526265263557434,0.9765744805336,-0.21293817460537,-0.0309777203947306,0.983128607273102,-0.182582512497902,-0.011036628857255,0.817899644374847,-0.355826288461685,0.452137023210526,0.817899644374847,-0.355826288461685,0.452137023210526,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.972478210926056,0.193684622645378,0.129508212208748,0.733399391174316,-0.42873340845108,0.527553796768188,0.658827781677246,-0.438512951135635,0.611271023750305,0.585005819797516,-0.507527828216553,0.632600724697113,0.733399391174316,-0.42873340845108,0.527553796768188,0.69538801908493,-0.360292613506317,0.621791541576386,0.754743993282318,-0.253586798906326,0.605024993419647,0.585005819797516,-0.507527828216553,0.632600724697113,0.658827781677246,-0.438512951135635,0.611271023750305,0.839219391345978,-0.174447894096375,0.515052139759064,0.981736898422241,-0.184043049812317,-0.0481746941804886,0.809050917625427,-0.256973832845688,0.528583943843842,0.808899104595184,-0.271903991699219,0.521296918392181,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.814589738845825,-0.243902504444122,0.526265263557434,0.809050917625427,-0.256973832845688,0.528583943843842,0.981736898422241,-0.184043049812317,-0.0481746941804886,0.9765744805336,-0.21293817460537,-0.0309777203947306,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.977742493152618,-0.0699509307742119,-0.197804138064384,\n-0.985335469245911,0.0123848039656878,-0.170178011059761,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.985335469245911,0.0123848039656878,-0.170178011059761,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.924062490463257,0.166337832808495,-0.344151526689529,-0.924062490463257,0.166337832808495,-0.344151526689529,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.54743480682373,0.804430425167084,0.230666100978851,-0.639851093292236,0.713299214839935,0.28599801659584,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.54743480682373,0.804430425167084,0.230666100978851,-0.250951796770096,0.864163637161255,0.436170101165771,-0.615591168403625,0.608454763889313,0.500829696655273,-0.639851093292236,0.713299214839935,0.28599801659584,-0.250951796770096,0.864163637161255,0.436170101165771,0.0952272266149521,0.827912211418152,0.552714347839355,-0.139664217829704,0.122649051249027,0.982573747634888,-0.615591168403625,0.608454763889313,0.500829696655273,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.938012957572937,0.237204626202583,-0.252716571092606,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.874023795127869,0.388026893138886,-0.292433828115463,\n-0.866832733154297,0.233201399445534,-0.440701872110367,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.938012957572937,0.237204626202583,-0.252716571092606,-0.866832733154297,0.233201399445534,-0.440701872110367,0.841358840465546,-0.538884103298187,0.0414636693894863,0.70257967710495,-0.699933767318726,0.128352925181389,0.685771405696869,-0.727804124355316,0.00433491868898273,0.682205855846405,-0.688040673732758,-0.247376576066017,0.70257967710495,-0.699933767318726,0.128352925181389,0.401816725730896,-0.892981171607971,0.202800214290619,0.301932573318481,-0.883707880973816,0.357627093791962,0.685771405696869,-0.727804124355316,0.00433491868898273,0.401816725730896,-0.892981171607971,0.202800214290619,-0.0260992348194122,-0.974703729152679,0.221971705555916,0.289558619260788,-0.713769853115082,0.637721240520477,0.301932573318481,-0.883707880973816,0.357627093791962,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.841358840465546,-0.538884103298187,0.0414636693894863,0.682205855846405,-0.688040673732758,-0.247376576066017,0.846972167491913,-0.511904895305634,-0.14349739253521,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.846972167491913,-0.511904895305634,-0.14349739253521,0.973673224449158,-0.222424849867821,-0.0498761273920536,\n0.895388960838318,0.358975827693939,0.263467311859131,0.972478210926056,0.193684622645378,0.129508212208748,0.960353672504425,0.263352990150452,0.0914659649133682,0.898760318756104,0.357274115085602,0.254135996103287,0.730379700660706,0.544567286968231,0.412300884723663,0.895388960838318,0.358975827693939,0.263467311859131,0.898760318756104,0.357274115085602,0.254135996103287,0.750469028949738,0.503480017185211,0.42814028263092,0.44217050075531,0.718546867370605,0.536819994449615,0.730379700660706,0.544567286968231,0.412300884723663,0.750469028949738,0.503480017185211,0.42814028263092,0.626252830028534,0.308739811182022,0.715882003307343,0.0952272266149521,0.827912211418152,0.552714347839355,0.44217050075531,0.718546867370605,0.536819994449615,0.626252830028534,0.308739811182022,0.715882003307343,-0.139664217829704,0.122649051249027,0.982573747634888,0.960353672504425,0.263352990150452,0.0914659649133682,0.972478210926056,0.193684622645378,0.129508212208748,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.991423904895782,0.113214619457722,0.0652767568826675,0.991423904895782,0.113214619457722,0.0652767568826675,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.983128607273102,-0.182582512497902,-0.011036628857255,0.992731213569641,-0.118552401661873,0.0207367613911629,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.981736898422241,-0.184043049812317,-0.0481746941804886,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.9765744805336,-0.21293817460537,-0.0309777203947306,0.981736898422241,-0.184043049812317,-0.0481746941804886,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.962084114551544,-0.260001808404922,-0.0824210941791534,0.983128607273102,-0.182582512497902,-0.011036628857255,0.9765744805336,-0.21293817460537,-0.0309777203947306,\n0.962084114551544,-0.260001808404922,-0.0824210941791534,0.992731213569641,-0.118552401661873,0.0207367613911629,-0.901924610137939,0.307412892580032,0.303363412618637,-0.777440845966339,0.387861520051956,0.495125383138657,-0.938613772392273,0.27569842338562,0.207351386547089,-0.938613772392273,0.27569842338562,0.207351386547089,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.938012957572937,0.237204626202583,-0.252716571092606,0.801646828651428,-0.0831208676099777,0.591991007328033,0.857912063598633,-0.151919424533844,0.490823149681091,0.685023248195648,0.00244083511643112,0.728517115116119,0.857912063598633,-0.151919424533844,0.490823149681091,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.733399391174316,-0.42873340845108,0.527553796768188,0.585005819797516,-0.507527828216553,0.632600724697113,0.817899644374847,-0.355826288461685,0.452137023210526,0.817899644374847,-0.355826288461685,0.452137023210526,0.983128607273102,-0.182582512497902,-0.011036628857255,0.999559164047241,-0.0022999900393188,0.0296008456498384,-0.633089065551758,-0.179430231451988,0.75299608707428,-0.268051534891129,-0.524246156215668,0.808278679847717,-0.0181612316519022,0.599665939807892,0.800044298171997,-0.398783475160599,0.608131349086761,0.686402201652527,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.0181612316519022,0.599665939807892,0.800044298171997,0.381472051143646,0.46587747335434,0.798396646976471,0.390523910522461,0.243563205003738,0.88778829574585,0.381472051143646,0.46587747335434,0.798396646976471,0.241816222667694,-0.361797332763672,0.900348603725433,0.626252830028534,0.308739811182022,0.715882003307343,\n0.390523910522461,0.243563205003738,0.88778829574585,0.626252830028534,0.308739811182022,0.715882003307343,0.241816222667694,-0.361797332763672,0.900348603725433,-0.268051534891129,-0.524246156215668,0.808278679847717,-0.139664217829704,0.122649051249027,0.982573747634888,-0.139664217829704,0.122649051249027,0.982573747634888,-0.268051534891129,-0.524246156215668,0.808278679847717,-0.633089065551758,-0.179430231451988,0.75299608707428,-0.615591168403625,0.608454763889313,0.500829696655273,-0.633089065551758,-0.179430231451988,0.75299608707428,-0.398783475160599,0.608131349086761,0.686402201652527,-0.541773617267609,0.383253455162048,0.748062908649445,-0.615591168403625,0.608454763889313,0.500829696655273,-0.541773617267609,0.383253455162048,0.748062908649445,-0.398783475160599,0.608131349086761,0.686402201652527,-0.0181612316519022,0.599665939807892,0.800044298171997,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.0181612316519022,0.599665939807892,0.800044298171997,-0.268051534891129,-0.524246156215668,0.808278679847717,0.241816222667694,-0.361797332763672,0.900348603725433,0.381472051143646,0.46587747335434,0.798396646976471,-0.948896527290344,0.107380069792271,0.296757221221924,-0.973640561103821,0.150163590908051,0.171682626008987,-0.952853083610535,0.227692499756813,0.200567036867142,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.921807289123535,0.190687090158463,0.337505161762238,-0.9817014336586,0.106130860745907,0.158109441399574,-0.973640561103821,0.150163590908051,0.171682626008987,-0.948896527290344,0.107380069792271,0.296757221221924,0.809050917625427,-0.256973832845688,0.528583943843842,0.743283569812775,-0.261148244142532,0.615898609161377,0.751119554042816,-0.269360929727554,0.602713882923126,0.808899104595184,-0.271903991699219,0.521296918392181,0.743283569812775,-0.261148244142532,0.615898609161377,0.82207328081131,-0.257045179605484,0.508058369159698,0.806595623493195,-0.339085549116135,0.484173983335495,0.751119554042816,-0.269360929727554,0.602713882923126,0.754743993282318,-0.253586798906326,0.605024993419647,\n0.839219391345978,-0.174447894096375,0.515052139759064,0.82207328081131,-0.257045179605484,0.508058369159698,0.743283569812775,-0.261148244142532,0.615898609161377,0.809050917625427,-0.256973832845688,0.528583943843842,0.814589738845825,-0.243902504444122,0.526265263557434,0.754743993282318,-0.253586798906326,0.605024993419647,0.743283569812775,-0.261148244142532,0.615898609161377,0.69538801908493,-0.360292613506317,0.621791541576386,0.895388960838318,0.358975827693939,0.263467311859131,0.730379700660706,0.544567286968231,0.412300884723663,0.535216987133026,-0.203684195876122,0.819789946079254,0.78125125169754,-0.138539433479309,0.608648777008057,0.878065228462219,-0.00301950192078948,0.47853147983551,0.930242419242859,-0.158916160464287,0.330748707056046,0.805302381515503,-0.358387529850006,0.472277879714966,0.370588421821594,-0.193350583314896,0.908449113368988,0.340047508478165,-0.388343751430511,0.856479287147522,0.640090823173523,-0.393064320087433,0.660139560699463,0.660678803920746,-0.179935500025749,0.728784441947937,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.562524795532227,-0.508337914943695,0.652041733264923,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.0792728736996651,-0.368663102388382,0.926176726818085,-0.0499088205397129,-0.128681614995003,0.990429282188416,-0.542648077011108,0.604446232318878,0.583247661590576,-0.828080534934998,0.439521878957748,0.347998708486557,-0.678687632083893,0.530943989753723,0.507426381111145,0.998525857925415,0.0400822311639786,0.0366002470254898,0.930242419242859,-0.158916160464287,0.330748707056046,0.878065228462219,-0.00301950192078948,0.47853147983551,0.977894842624664,0.203556552529335,0.0478159449994564,-0.478552311658859,0.59250408411026,0.648017406463623,-0.839360475540161,0.300623118877411,0.452879399061203,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.723428726196289,-0.0725482106208801,0.686576724052429,\n-0.542648077011108,0.604446232318878,0.583247661590576,-0.678687632083893,0.530943989753723,0.507426381111145,-0.839360475540161,0.300623118877411,0.452879399061203,-0.478552311658859,0.59250408411026,0.648017406463623,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.562524795532227,-0.508337914943695,0.652041733264923,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.419204741716385,0.619329035282135,0.66385155916214,-0.478552311658859,0.59250408411026,0.648017406463623,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.454762816429138,0.657830238342285,0.60037499666214,-0.542648077011108,0.604446232318878,0.583247661590576,-0.478552311658859,0.59250408411026,0.648017406463623,-0.419204741716385,0.619329035282135,0.66385155916214,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.562524795532227,-0.508337914943695,0.652041733264923,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.419204741716385,0.619329035282135,0.66385155916214,-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.211948931217194,0.670887529850006,0.710624814033508,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.88222748041153,-0.112881354987621,0.457091361284256,\n-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.450191855430603,-0.821828484535217,0.349177956581116,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.388236194849014,-0.50770115852356,0.769098341464996,-0.415356457233429,-0.555049777030945,0.720693230628967,-0.845879793167114,-0.333898961544037,0.415931314229965,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.450191855430603,-0.821828484535217,0.349177956581116,-0.0997487902641296,0.343725502490997,0.933757483959198,0.129296213388443,0.717355608940125,0.684604585170746,0.051387831568718,-0.174088895320892,0.983388185501099,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.381502002477646,-0.250341862440109,0.889823138713837,0.44838610291481,-0.404915183782578,0.796864807605743,0.225461423397064,-0.225655317306519,0.947758853435516,-0.450191855430603,-0.821828484535217,0.349177956581116,-0.388236194849014,-0.50770115852356,0.769098341464996,0.147943705320358,-0.468890011310577,0.870778322219849,0.477010041475296,-0.793651044368744,0.377596825361252,-0.415356457233429,-0.555049777030945,0.720693230628967,-0.450191855430603,-0.821828484535217,0.349177956581116,0.477010041475296,-0.793651044368744,0.377596825361252,0.519910156726837,-0.607850134372711,0.600176334381104,0.129296213388443,0.717355608940125,0.684604585170746,-0.211948931217194,0.670887529850006,0.710624814033508,-0.380323052406311,-0.00781864393502474,0.9248206615448,0.225461423397064,-0.225655317306519,0.947758853435516,0.214603096246719,0.506344735622406,0.835200905799866,0.289558619260788,-0.713769853115082,0.637721240520477,0.051387831568718,-0.174088895320892,0.983388185501099,0.129296213388443,0.717355608940125,0.684604585170746,0.214603096246719,0.506344735622406,0.835200905799866,0.870778322219849,-0.383099019527435,0.308188676834106,0.491936594247818,-0.382108181715012,0.782299041748047,\n0.332508742809296,-0.680451035499573,0.653011798858643,0.518838703632355,-0.706463396549225,0.481368720531464,0.44838610291481,-0.404915183782578,0.796864807605743,0.870778322219849,-0.383099019527435,0.308188676834106,0.518838703632355,-0.706463396549225,0.481368720531464,0.225461423397064,-0.225655317306519,0.947758853435516,0.423083633184433,0.0620496086776257,0.903963565826416,0.508102118968964,0.373251259326935,0.776218891143799,0.786464095115662,-0.0169835668057203,0.61740243434906,0.605372726917267,0.000812157464679331,0.795941710472107,0.650932729244232,-0.458716839551926,0.604868113994598,0.245217740535736,-0.767790734767914,0.591916918754578,0.319739699363709,-0.689254701137543,0.650149524211884,0.602446496486664,-0.488442957401276,0.631254017353058,0.508102118968964,0.373251259326935,0.776218891143799,0.395677745342255,-0.301782160997391,0.867390692234039,0.703794419765472,-0.329490423202515,0.629372298717499,0.786464095115662,-0.0169835668057203,0.61740243434906,0.703794419765472,-0.329490423202515,0.629372298717499,0.395677745342255,-0.301782160997391,0.867390692234039,0.245217740535736,-0.767790734767914,0.591916918754578,0.650932729244232,-0.458716839551926,0.604868113994598,0.650932729244232,-0.458716839551926,0.604868113994598,0.602446496486664,-0.488442957401276,0.631254017353058,0.605372726917267,0.000812157464679331,0.795941710472107,0.786464095115662,-0.0169835668057203,0.61740243434906,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.381502002477646,-0.250341862440109,0.889823138713837,0.214603096246719,0.506344735622406,0.835200905799866,0.225461423397064,-0.225655317306519,0.947758853435516,0.395677745342255,-0.301782160997391,0.867390692234039,0.508102118968964,0.373251259326935,0.776218891143799,0.245217740535736,-0.767790734767914,0.591916918754578,0.518838703632355,-0.706463396549225,0.481368720531464,0.332508742809296,-0.680451035499573,0.653011798858643,0.319739699363709,-0.689254701137543,0.650149524211884,\n0.395677745342255,-0.301782160997391,0.867390692234039,0.225461423397064,-0.225655317306519,0.947758853435516,0.518838703632355,-0.706463396549225,0.481368720531464,0.245217740535736,-0.767790734767914,0.591916918754578,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.839360475540161,0.300623118877411,0.452879399061203,-0.678687632083893,0.530943989753723,0.507426381111145,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.703129649162292,0.0220469851046801,0.710719764232636,-0.0499088205397129,-0.128681614995003,0.990429282188416,-0.0792728736996651,-0.368663102388382,0.926176726818085,0.340047508478165,-0.388343751430511,0.856479287147522,0.370588421821594,-0.193350583314896,0.908449113368988,0.329437464475632,-0.321430414915085,0.887780070304871,0.319739699363709,-0.689254701137543,0.650149524211884,0.332508742809296,-0.680451035499573,0.653011798858643,0.491936594247818,-0.382108181715012,0.782299041748047,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.562524795532227,-0.508337914943695,0.652041733264923,0.660678803920746,-0.179935500025749,0.728784441947937,0.640090823173523,-0.393064320087433,0.660139560699463,0.867793679237366,-0.309993803501129,0.38837856054306,0.884072363376617,-0.159779712557793,0.439188450574875,0.831244945526123,-0.225508287549019,0.508112013339996,0.82292628288269,-0.280684322118759,0.493972301483154,0.668613970279694,-0.338565081357956,0.662064254283905,0.654389500617981,-0.325742691755295,0.682397305965424,0.329437464475632,-0.321430414915085,0.887780070304871,0.280544310808182,-0.2230264544487,0.933570623397827,0.654389500617981,-0.325742691755295,0.682397305965424,0.668613970279694,-0.338565081357956,0.662064254283905,-0.866685390472412,0.374831438064575,0.329177558422089,-0.828080534934998,0.439521878957748,0.347998708486557,\n-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.871505856513977,0.489616960287094,-0.0274355374276638,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.839360475540161,0.300623118877411,0.452879399061203,0.786464095115662,-0.0169835668057203,0.61740243434906,0.703794419765472,-0.329490423202515,0.629372298717499,0.650932729244232,-0.458716839551926,0.604868113994598,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.139990076422691,-0.714202582836151,0.685796916484833,0.289891242980957,-0.786550641059875,0.545253336429596,0.378215909004211,-0.383805245161057,0.842405080795288,0.378215909004211,-0.383805245161057,0.842405080795288,0.289891242980957,-0.786550641059875,0.545253336429596,0.526285588741302,-0.789061844348907,0.316867232322693,0.665505409240723,-0.470593899488449,0.579347848892212,0.175360679626465,-0.976183235645294,-0.127730026841164,0.175360679626465,-0.976183235645294,-0.127730026841164,0.562327146530151,-0.809826016426086,0.167242258787155,0.526285588741302,-0.789061844348907,0.316867232322693,0.147943705320358,-0.468890011310577,0.870778322219849,0.280544310808182,-0.2230264544487,0.933570623397827,0.329437464475632,-0.321430414915085,0.887780070304871,0.491936594247818,-0.382108181715012,0.782299041748047,0.913633346557617,-0.352534860372543,0.202467978000641,\n0.477010041475296,-0.793651044368744,0.377596825361252,0.147943705320358,-0.468890011310577,0.870778322219849,0.491936594247818,-0.382108181715012,0.782299041748047,0.870778322219849,-0.383099019527435,0.308188676834106,0.505195319652557,-0.403650730848312,0.762786865234375,0.913633346557617,-0.352534860372543,0.202467978000641,0.870778322219849,-0.383099019527435,0.308188676834106,0.44838610291481,-0.404915183782578,0.796864807605743,-0.381502002477646,-0.250341862440109,0.889823138713837,-0.369073897600174,-0.252177625894547,0.89453387260437,0.505195319652557,-0.403650730848312,0.762786865234375,0.44838610291481,-0.404915183782578,0.796864807605743,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.381502002477646,-0.250341862440109,0.889823138713837,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.996204435825348,0.0376567244529724,-0.0784778669476509,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.996204435825348,0.0376567244529724,-0.0784778669476509,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.400434404611588,-0.0879500508308411,0.91209489107132,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.703214585781097,0.00478603458032012,0.710961520671844,-0.400434404611588,-0.0879500508308411,0.91209489107132,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.927268087863922,0.115808911621571,0.356036812067032,-0.918597161769867,0.136136829853058,0.37100675702095,-0.703214585781097,0.00478603458032012,0.710961520671844,\n-0.957767188549042,0.271569937467575,-0.094508096575737,-0.967624545097351,0.222042396664619,-0.119999624788761,-0.918597161769867,0.136136829853058,0.37100675702095,-0.927268087863922,0.115808911621571,0.356036812067032,0.949489533901215,-0.288099020719528,0.124372407793999,0.943572819232941,-0.310979694128037,-0.113850839436054,0.968242347240448,-0.211912021040916,-0.132665053009987,0.951669454574585,-0.257042765617371,0.168090030550957,0.353731364011765,-0.88641881942749,-0.298556119203568,0.536804795265198,-0.812591671943665,-0.227014124393463,0.891479134559631,-0.356151014566422,-0.280038207769394,0.746579051017761,-0.327975332736969,-0.578836619853973,0.422129124403,0.115602806210518,-0.899134576320648,0.541264474391937,0.0936620086431503,-0.835619688034058,0.233156397938728,0.373372942209244,-0.897903501987457,0.156071558594704,0.248666033148766,-0.955932438373566,-0.383682757616043,-0.370396196842194,0.845928013324738,-0.639851093292236,0.713299214839935,0.28599801659584,-0.615591168403625,0.608454763889313,0.500829696655273,-0.541773617267609,0.383253455162048,0.748062908649445,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.536804795265198,-0.812591671943665,-0.227014124393463,0.722857892513275,-0.480003207921982,-0.497064769268036,0.586520791053772,-0.278485208749771,-0.760551989078522,0.891479134559631,-0.356151014566422,-0.280038207769394,-0.176827967166901,-0.795711040496826,-0.579288959503174,0.056479137390852,-0.856393754482269,-0.513224899768829,0.318273335695267,-0.280295252799988,-0.905613958835602,-0.0838983133435249,-0.180199861526489,-0.980045437812805,-0.613127768039703,0.486845344305038,-0.622138202190399,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.59022468328476,0.354267239570618,-0.725347936153412,0.233156397938728,0.373372942209244,-0.897903501987457,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.184135809540749,0.315396666526794,-0.930923700332642,0.156071558594704,0.248666033148766,-0.955932438373566,\n-0.866832733154297,0.233201399445534,-0.440701872110367,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.713566780090332,0.700178563594818,0.0239257458597422,0.776516377925873,0.531664490699768,-0.338164389133453,0.865038812160492,0.500161468982697,0.0393240377306938,0.610888957977295,-0.781325817108154,0.127846196293831,0.559202313423157,-0.768743932247162,-0.310363441705704,0.277932703495026,-0.692557215690613,-0.665670990943909,0.467275589704514,0.564712345600128,-0.680259943008423,0.776516377925873,0.531664490699768,-0.338164389133453,0.559202313423157,-0.768743932247162,-0.310363441705704,-0.153365463018417,0.631252944469452,-0.760262310504913,0.136670753359795,0.566407382488251,-0.812713861465454,-0.0725360587239265,-0.598356962203979,-0.797939538955688,-0.398402363061905,-0.552445113658905,-0.732174813747406,0.277932703495026,-0.692557215690613,-0.665670990943909,-0.0725360587239265,-0.598356962203979,-0.797939538955688,0.136670753359795,0.566407382488251,-0.812713861465454,0.467275589704514,0.564712345600128,-0.680259943008423,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.343562453985214,0.683792293071747,-0.643733561038971,-0.153365463018417,0.631252944469452,-0.760262310504913,0.733602523803711,0.10412222892046,-0.671554863452911,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.931353688240051,0.363742500543594,0.0164845213294029,0.809532463550568,0.353956818580627,0.468371391296387,0.639626801013947,-0.543238401412964,0.543847024440765,\n0.784134984016418,-0.509350836277008,-0.354533582925797,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.983289659023285,0.179070711135864,0.032787948846817,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.0492830350995064,-0.186444014310837,-0.981228709220886,-0.0222479663789272,-0.27899968624115,-0.960033416748047,-0.795176029205322,0.587453246116638,0.150312438607216,-0.728462755680084,0.461005359888077,-0.506770253181458,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.845747351646423,-0.528353095054626,0.0745282098650932,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.193201750516891,-0.134490892291069,-0.971897780895233,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.299906134605408,-0.817314743995667,-0.491988658905029,0.056479137390852,-0.856393754482269,-0.513224899768829,0.353731364011765,-0.88641881942749,-0.298556119203568,0.746579051017761,-0.327975332736969,-0.578836619853973,0.318273335695267,-0.280295252799988,-0.905613958835602,0.604855418205261,-0.787497401237488,-0.118312001228333,0.855425655841827,0.486632764339447,-0.177300468087196,0.802787482738495,0.346281617879868,0.485408395528793,0.624463975429535,-0.657274067401886,0.421942621469498,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.177617996931076,0.0687198787927628,-0.981697201728821,-0.170505315065384,0.193187981843948,-0.96623307466507,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.796081125736237,0.269071251153946,-0.542084395885468,\n-0.854514360427856,0.214296534657478,-0.473161995410919,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.184135809540749,0.315396666526794,-0.930923700332642,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.613127768039703,0.486845344305038,-0.622138202190399,0.992731213569641,-0.118552401661873,0.0207367613911629,0.962084114551544,-0.260001808404922,-0.0824210941791534,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.951669454574585,-0.257042765617371,0.168090030550957,0.971294820308685,-0.11888038367033,0.206043228507042,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.972172915935516,-0.00723095051944256,0.234152868390083,0.971294820308685,-0.11888038367033,0.206043228507042,0.981179654598236,-0.112972341477871,-0.156600564718246,0.968242347240448,-0.211912021040916,-0.132665053009987,0.943572819232941,-0.310979694128037,-0.113850839436054,0.821827530860901,-0.195920065045357,-0.53499048948288,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.368462383747101,-0.106815822422504,-0.923485696315765,0.383778035640717,0.0243120118975639,-0.923105239868164,0.0997140929102898,0.107741750776768,-0.989165723323822,0.00292694312520325,-0.0230234544724226,-0.99973064661026,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.801694869995117,0.527419447898865,-0.281272232532501,-0.904132783412933,0.388770788908005,-0.177203923463821,0.855425655841827,0.486632764339447,-0.177300468087196,0.604855418205261,-0.787497401237488,-0.118312001228333,0.441250443458557,-0.840362787246704,-0.314783275127411,0.785753786563873,0.386755406856537,-0.482712358236313,0.785753786563873,0.386755406856537,-0.482712358236313,0.441250443458557,-0.840362787246704,-0.314783275127411,0.138132452964783,-0.828281044960022,-0.54301929473877,0.505264282226563,0.378391265869141,-0.775582432746887,\n0.505264282226563,0.378391265869141,-0.775582432746887,0.138132452964783,-0.828281044960022,-0.54301929473877,-0.136814370751381,-0.897029936313629,-0.42026075720787,0.077034167945385,0.455207884311676,-0.88704651594162,0.077034167945385,0.455207884311676,-0.88704651594162,-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.728462755680084,0.461005359888077,-0.506770253181458,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.0315269827842712,0.564418613910675,0.824886441230774,0.390523910522461,0.243563205003738,0.88778829574585,-0.419215679168701,-0.523534297943115,0.741734504699707,0.66844254732132,0.71253913640976,-0.213242888450623,0.888628959655762,0.438762068748474,0.133515372872353,0.886778235435486,0.377031594514847,0.267341554164886,0.399906992912292,0.90941196680069,-0.11421176046133,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.187843710184097,0.254132181406021,-0.948752641677856,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.217101514339447,-0.0525678582489491,-0.974732518196106,-0.211497768759727,-0.562794804573059,-0.799081146717072,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.676543116569519,-0.0153456926345825,-0.73624312877655,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.876750707626343,0.238855347037315,-0.417440205812454,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.904132783412933,0.388770788908005,-0.177203923463821,\n-0.801694869995117,0.527419447898865,-0.281272232532501,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.876750707626343,0.238855347037315,-0.417440205812454,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.196683183312416,0.297644048929214,-0.934196829795837,0.243145853281021,0.221795409917831,-0.944291710853577,0.24560159444809,0.232358887791634,-0.941110610961914,-0.187843710184097,0.254132181406021,-0.948752641677856,0.900178790092468,-0.431453764438629,0.0593785345554352,0.846972167491913,-0.511904895305634,-0.14349739253521,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.92520534992218,-0.376655071973801,-0.0461085550487041,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.828080534934998,0.439521878957748,0.347998708486557,-0.542648077011108,0.604446232318878,0.583247661590576,0.605372726917267,0.000812157464679331,0.795941710472107,0.301932573318481,-0.883707880973816,0.357627093791962,0.423083633184433,0.0620496086776257,0.903963565826416,0.752377092838287,0.158552542328835,-0.639366745948792,0.333965450525284,0.337952494621277,-0.879917681217194,0.314953178167343,0.413695752620697,-0.854201555252075,0.69469678401947,0.0795350298285484,-0.714891970157623,-0.625715851783752,0.58097767829895,-0.520523428916931,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.233997270464897,0.489457190036774,-0.840045750141144,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.801694869995117,0.527419447898865,-0.281272232532501,-0.625715851783752,0.58097767829895,-0.520523428916931,-0.217736855149269,0.594750702381134,-0.773861885070801,0.314953178167343,0.413695752620697,-0.854201555252075,0.333965450525284,0.337952494621277,-0.879917681217194,\n-0.233997270464897,0.489457190036774,-0.840045750141144,0.268678843975067,0.187903970479965,-0.944724142551422,0.286524504423141,0.225191175937653,-0.931231796741486,0.676566541194916,0.144181370735168,-0.722128391265869,0.655851304531097,0.12275330722332,-0.744842708110809,-0.653601109981537,0.351934164762497,-0.670035779476166,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.214722737669945,0.271103382110596,-0.938294768333435,-0.663710594177246,0.281592607498169,-0.692960262298584,-0.663710594177246,0.281592607498169,-0.692960262298584,-0.85853385925293,0.234514445066452,-0.455985277891159,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.653601109981537,0.351934164762497,-0.670035779476166,0.286524504423141,0.225191175937653,-0.931231796741486,0.268678843975067,0.187903970479965,-0.944724142551422,-0.214722737669945,0.271103382110596,-0.938294768333435,-0.214377388358116,0.321097940206528,-0.922463238239288,0.24560159444809,0.232358887791634,-0.941110610961914,0.243145853281021,0.221795409917831,-0.944291710853577,0.639175117015839,0.0817547887563705,-0.764703452587128,0.653478145599365,0.112765118479729,-0.748498737812042,-0.892978370189667,-0.00842274446040392,-0.450020730495453,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.892978370189667,-0.00842274446040392,-0.450020730495453,-0.676543116569519,-0.0153456926345825,-0.73624312877655,0.0649978742003441,-0.592735111713409,-0.802770435810089,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.442950963973999,-0.635696709156036,-0.632205784320831,-0.801694869995117,0.527419447898865,-0.281272232532501,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.613127768039703,0.486845344305038,-0.622138202190399,-0.625715851783752,0.58097767829895,-0.520523428916931,\n-0.625715851783752,0.58097767829895,-0.520523428916931,-0.613127768039703,0.486845344305038,-0.622138202190399,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.206791058182716,0.492802500724792,-0.845211863517761,0.233156397938728,0.373372942209244,-0.897903501987457,0.314953178167343,0.413695752620697,-0.854201555252075,0.314953178167343,0.413695752620697,-0.854201555252075,0.233156397938728,0.373372942209244,-0.897903501987457,0.541264474391937,0.0936620086431503,-0.835619688034058,0.69469678401947,0.0795350298285484,-0.714891970157623,-0.676543116569519,-0.0153456926345825,-0.73624312877655,-0.892978370189667,-0.00842274446040392,-0.450020730495453,-0.876750707626343,0.238855347037315,-0.417440205812454,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.187843710184097,0.254132181406021,-0.948752641677856,-0.217101514339447,-0.0525678582489491,-0.974732518196106,-0.676543116569519,-0.0153456926345825,-0.73624312877655,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.24560159444809,0.232358887791634,-0.941110610961914,0.653478145599365,0.112765118479729,-0.748498737812042,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.93778657913208,-0.340576171875,-0.0675588026642799,0.872841775417328,-0.161784738302231,-0.460405200719833,0.892382204532623,-0.0374441854655743,-0.449724316596985,-0.924062490463257,0.166337832808495,-0.344151526689529,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.633183360099792,0.75979870557785,-0.147596448659897,-0.343562453985214,0.683792293071747,-0.643733561038971,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.383682757616043,-0.370396196842194,0.845928013324738,\n-0.696337580680847,-0.401266604661942,0.595062255859375,-0.639851093292236,0.713299214839935,0.28599801659584,-0.541773617267609,0.383253455162048,0.748062908649445,-0.127582266926765,-0.6490518450737,0.749969661235809,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.390523910522461,0.243563205003738,0.88778829574585,0.626252830028534,0.308739811182022,0.715882003307343,-0.248274028301239,-0.562410414218903,0.788704335689545,-0.689171850681305,-0.406394809484482,0.599904477596283,0.390523910522461,0.243563205003738,0.88778829574585,-0.689171850681305,-0.406394809484482,0.599904477596283,-0.419215679168701,-0.523534297943115,0.741734504699707,-0.0838983133435249,-0.180199861526489,-0.980045437812805,-0.193201750516891,-0.134490892291069,-0.971897780895233,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.176827967166901,-0.795711040496826,-0.579288959503174,-0.177617996931076,0.0687198787927628,-0.981697201728821,0.00292694312520325,-0.0230234544724226,-0.99973064661026,0.0997140929102898,0.107741750776768,-0.989165723323822,-0.170505315065384,0.193187981843948,-0.96623307466507,-0.217101514339447,-0.0525678582489491,-0.974732518196106,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.0649978742003441,-0.592735111713409,-0.802770435810089,-0.211497768759727,-0.562794804573059,-0.799081146717072,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.0792728736996651,-0.368663102388382,0.926176726818085,-0.0792728736996651,-0.368663102388382,0.926176726818085,\n-0.0704309269785881,-0.316668570041656,0.945917785167694,0.378215909004211,-0.383805245161057,0.842405080795288,0.340047508478165,-0.388343751430511,0.856479287147522,0.340047508478165,-0.388343751430511,0.856479287147522,0.378215909004211,-0.383805245161057,0.842405080795288,0.665505409240723,-0.470593899488449,0.579347848892212,0.640090823173523,-0.393064320087433,0.660139560699463,0.665505409240723,-0.470593899488449,0.579347848892212,0.78835541009903,-0.474211633205414,0.391942739486694,0.867793679237366,-0.309993803501129,0.38837856054306,0.640090823173523,-0.393064320087433,0.660139560699463,0.998525857925415,0.0400822311639786,0.0366002470254898,0.92520534992218,-0.376655071973801,-0.0461085550487041,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.930242419242859,-0.158916160464287,0.330748707056046,0.930242419242859,-0.158916160464287,0.330748707056046,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.685771405696869,-0.727804124355316,0.00433491868898273,0.805302381515503,-0.358387529850006,0.472277879714966,0.301932573318481,-0.883707880973816,0.357627093791962,0.289558619260788,-0.713769853115082,0.637721240520477,0.423083633184433,0.0620496086776257,0.903963565826416,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.981179654598236,-0.112972341477871,-0.156600564718246,0.780589640140533,-0.0567772276699543,-0.622459769248962,0.78181403875351,-0.124027468264103,-0.611051499843597,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.211948931217194,0.670887529850006,0.710624814033508,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.211948931217194,0.670887529850006,0.710624814033508,0.129296213388443,0.717355608940125,0.684604585170746,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.839367032051086,0.0223368648439646,-0.543105900287628,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.639851093292236,0.713299214839935,0.28599801659584,\n-0.696337580680847,-0.401266604661942,0.595062255859375,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.985335469245911,0.0123848039656878,-0.170178011059761,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.828080534934998,0.439521878957748,0.347998708486557,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.26332488656044,-0.487629622220993,0.832392573356628,-0.26332488656044,-0.487629622220993,0.832392573356628,-0.0997487902641296,0.343725502490997,0.933757483959198,0.051387831568718,-0.174088895320892,0.983388185501099,-0.0260992348194122,-0.974703729152679,0.221971705555916,0.107415564358234,-0.480258971452713,0.870524644851685,0.508102118968964,0.373251259326935,0.776218891143799,0.423083633184433,0.0620496086776257,0.903963565826416,0.289558619260788,-0.713769853115082,0.637721240520477,0.214603096246719,0.506344735622406,0.835200905799866,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.542648077011108,0.604446232318878,0.583247661590576,-0.454762816429138,0.657830238342285,0.60037499666214,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.839367032051086,0.0223368648439646,-0.543105900287628,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.441881209611893,-0.050617303699255,-0.89564436674118,\n-0.177617996931076,0.0687198787927628,-0.981697201728821,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.193201750516891,-0.134490892291069,-0.971897780895233,0.00292694312520325,-0.0230234544724226,-0.99973064661026,-0.177617996931076,0.0687198787927628,-0.981697201728821,-0.193201750516891,-0.134490892291069,-0.971897780895233,-0.0838983133435249,-0.180199861526489,-0.980045437812805,0.318273335695267,-0.280295252799988,-0.905613958835602,0.368462383747101,-0.106815822422504,-0.923485696315765,0.00292694312520325,-0.0230234544724226,-0.99973064661026,-0.0838983133435249,-0.180199861526489,-0.980045437812805,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.78181403875351,-0.124027468264103,-0.611051499843597,0.746579051017761,-0.327975332736969,-0.578836619853973,0.891479134559631,-0.356151014566422,-0.280038207769394,0.815547049045563,-0.485381871461868,-0.315099239349365,0.891479134559631,-0.356151014566422,-0.280038207769394,0.586520791053772,-0.278485208749771,-0.760551989078522,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.892382204532623,-0.0374441854655743,-0.449724316596985,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.881715893745422,0.054974939674139,-0.468566834926605,0.991608023643494,-0.114275835454464,-0.060452651232481,0.995975911617279,-0.0798337981104851,-0.0407244116067886,0.885001957416534,0.0480887815356255,-0.463097155094147,0.897607445716858,-0.182163774967194,-0.401394128799438,0.932035446166992,0.0906825214624405,-0.350836962461472,0.752377092838287,0.158552542328835,-0.639366745948792,0.69469678401947,0.0795350298285484,-0.714891970157623,0.821827530860901,-0.195920065045357,-0.53499048948288,0.897607445716858,-0.182163774967194,-0.401394128799438,0.69469678401947,0.0795350298285484,-0.714891970157623,0.541264474391937,0.0936620086431503,-0.835619688034058,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.821827530860901,-0.195920065045357,-0.53499048948288,\n0.541264474391937,0.0936620086431503,-0.835619688034058,0.422129124403,0.115602806210518,-0.899134576320648,0.881715893745422,0.054974939674139,-0.468566834926605,0.885001957416534,0.0480887815356255,-0.463097155094147,0.655851304531097,0.12275330722332,-0.744842708110809,0.676566541194916,0.144181370735168,-0.722128391265869,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.892382204532623,-0.0374441854655743,-0.449724316596985,0.653478145599365,0.112765118479729,-0.748498737812042,0.639175117015839,0.0817547887563705,-0.764703452587128,0.897607445716858,-0.182163774967194,-0.401394128799438,0.821827530860901,-0.195920065045357,-0.53499048948288,0.943572819232941,-0.310979694128037,-0.113850839436054,0.92520534992218,-0.376655071973801,-0.0461085550487041,0.998525857925415,0.0400822311639786,0.0366002470254898,0.932035446166992,0.0906825214624405,-0.350836962461472,0.897607445716858,-0.182163774967194,-0.401394128799438,0.92520534992218,-0.376655071973801,-0.0461085550487041,0.991423904895782,0.113214619457722,0.0652767568826675,0.992731213569641,-0.118552401661873,0.0207367613911629,0.971294820308685,-0.11888038367033,0.206043228507042,0.972172915935516,-0.00723095051944256,0.234152868390083,0.991423904895782,0.113214619457722,0.0652767568826675,0.972172915935516,-0.00723095051944256,0.234152868390083,0.815547049045563,-0.485381871461868,-0.315099239349365,0.80362457036972,-0.592847883701324,0.052143108099699,0.588976085186005,-0.561100006103516,0.58161324262619,0.995399534702301,0.0302368272095919,0.0909145176410675,0.80362457036972,-0.592847883701324,0.052143108099699,0.898760318756104,0.357274115085602,0.254135996103287,0.960353672504425,0.263352990150452,0.0914659649133682,0.588976085186005,-0.561100006103516,0.58161324262619,0.0119833052158356,-0.684736132621765,0.728692531585693,0.750469028949738,0.503480017185211,0.42814028263092,0.898760318756104,0.357274115085602,0.254135996103287,0.588976085186005,-0.561100006103516,0.58161324262619,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.757972836494446,-0.133171454071999,-0.63854718208313,\n-0.863866031169891,0.184018969535828,-0.468905657529831,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.924443244934082,0.266406655311584,-0.272822648286819,0.603638291358948,-0.670441269874573,-0.431427150964737,0.872841775417328,-0.161784738302231,-0.460405200719833,0.93778657913208,-0.340576171875,-0.0675588026642799,0.581761598587036,-0.790978848934174,-0.189488589763641,0.932035446166992,0.0906825214624405,-0.350836962461472,0.998525857925415,0.0400822311639786,0.0366002470254898,0.977894842624664,0.203556552529335,0.0478159449994564,0.904317140579224,0.203987643122673,-0.3749660551548,0.932035446166992,0.0906825214624405,-0.350836962461472,0.904317140579224,0.203987643122673,-0.3749660551548,0.74667090177536,0.1879021525383,-0.638102948665619,0.752377092838287,0.158552542328835,-0.639366745948792,0.333965450525284,0.337952494621277,-0.879917681217194,0.752377092838287,0.158552542328835,-0.639366745948792,0.74667090177536,0.1879021525383,-0.638102948665619,0.32976895570755,0.307349354028702,-0.892630279064178,-0.233997270464897,0.489457190036774,-0.840045750141144,0.333965450525284,0.337952494621277,-0.879917681217194,0.32976895570755,0.307349354028702,-0.892630279064178,-0.232812166213989,0.426294058561325,-0.874112010002136,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.233997270464897,0.489457190036774,-0.840045750141144,-0.232812166213989,0.426294058561325,-0.874112010002136,-0.671548306941986,0.466394305229187,-0.575759708881378,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.671548306941986,0.466394305229187,-0.575759708881378,-0.820989012718201,0.473643779754639,-0.318808138370514,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.689231038093567,-0.628963589668274,-0.359674036502838,\n-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.703129649162292,0.0220469851046801,0.710719764232636,-0.93060040473938,0.126688674092293,0.343413561582565,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.866685390472412,0.374831438064575,0.329177558422089,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.678687632083893,0.530943989753723,0.507426381111145,-0.828080534934998,0.439521878957748,0.347998708486557,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.93060040473938,0.126688674092293,0.343413561582565,-0.964663922786713,0.191057458519936,-0.18144017457962,0.951669454574585,-0.257042765617371,0.168090030550957,0.968242347240448,-0.211912021040916,-0.132665053009987,0.981179654598236,-0.112972341477871,-0.156600564718246,0.971294820308685,-0.11888038367033,0.206043228507042,0.981179654598236,-0.112972341477871,-0.156600564718246,0.968242347240448,-0.211912021040916,-0.132665053009987,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.780589640140533,-0.0567772276699543,-0.622459769248962,0.383778035640717,0.0243120118975639,-0.923105239868164,0.780589640140533,-0.0567772276699543,-0.622459769248962,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.422129124403,0.115602806210518,-0.899134576320648,0.383778035640717,0.0243120118975639,-0.923105239868164,0.422129124403,0.115602806210518,-0.899134576320648,0.156071558594704,0.248666033148766,-0.955932438373566,0.0997140929102898,0.107741750776768,-0.989165723323822,-0.184135809540749,0.315396666526794,-0.930923700332642,-0.170505315065384,0.193187981843948,-0.96623307466507,0.0997140929102898,0.107741750776768,-0.989165723323822,0.156071558594704,0.248666033148766,-0.955932438373566,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.170505315065384,0.193187981843948,-0.96623307466507,\n-0.184135809540749,0.315396666526794,-0.930923700332642,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.566148936748505,0.251458436250687,-0.785012185573578,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.949489533901215,-0.288099020719528,0.124372407793999,0.951669454574585,-0.257042765617371,0.168090030550957,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.850323617458344,0.228136301040649,-0.474239945411682,0.846972167491913,-0.511904895305634,-0.14349739253521,0.900178790092468,-0.431453764438629,0.0593785345554352,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.660678803920746,-0.179935500025749,0.728784441947937,0.884072363376617,-0.159779712557793,0.439188450574875,0.861376106739044,-0.246860504150391,0.443949490785599,0.664143323898315,-0.190197542309761,0.72300660610199,-0.93060040473938,0.126688674092293,0.343413561582565,-0.703129649162292,0.0220469851046801,0.710719764232636,-0.698271632194519,0.0533006526529789,0.713845789432526,-0.924485385417938,0.137891575694084,0.355404943227768,0.519910156726837,-0.607850134372711,0.600176334381104,0.477010041475296,-0.793651044368744,0.377596825361252,0.913633346557617,-0.352534860372543,0.202467978000641,-0.388236194849014,-0.50770115852356,0.769098341464996,-0.0647715702652931,-0.0269695688039064,0.997535645961761,0.147943705320358,-0.468890011310577,0.870778322219849,0.519910156726837,-0.607850134372711,0.600176334381104,0.913633346557617,-0.352534860372543,0.202467978000641,0.505195319652557,-0.403650730848312,0.762786865234375,0.505195319652557,-0.403650730848312,0.762786865234375,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.415356457233429,-0.555049777030945,0.720693230628967,0.519910156726837,-0.607850134372711,0.600176334381104,\n-0.901903212070465,-0.103399723768234,0.419379383325577,-0.845879793167114,-0.333898961544037,0.415931314229965,-0.415356457233429,-0.555049777030945,0.720693230628967,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.845879793167114,-0.333898961544037,0.415931314229965,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.996204435825348,0.0376567244529724,-0.0784778669476509,-0.938492894172668,-0.335133403539658,0.0831665322184563,0.682205855846405,-0.688040673732758,-0.247376576066017,0.685771405696869,-0.727804124355316,0.00433491868898273,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.900178790092468,-0.431453764438629,0.0593785345554352,0.949489533901215,-0.288099020719528,0.124372407793999,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.846972167491913,-0.511904895305634,-0.14349739253521,0.682205855846405,-0.688040673732758,-0.247376576066017,0.816507577896118,-0.574229061603546,-0.0598032623529434,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.419204741716385,0.619329035282135,0.66385155916214,-0.211948931217194,0.670887529850006,0.710624814033508,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.454762816429138,0.657830238342285,0.60037499666214,0.051387831568718,-0.174088895320892,0.983388185501099,0.289558619260788,-0.713769853115082,0.637721240520477,-0.0260992348194122,-0.974703729152679,0.221971705555916,\n0.559202313423157,-0.768743932247162,-0.310363441705704,0.610888957977295,-0.781325817108154,0.127846196293831,0.639626801013947,-0.543238401412964,0.543847024440765,0.91938704252243,-0.184946089982986,-0.347163438796997,0.776516377925873,0.531664490699768,-0.338164389133453,0.467275589704514,0.564712345600128,-0.680259943008423,0.228658348321915,0.96535587310791,-0.125711753964424,0.287440627813339,0.955214440822601,-0.070308543741703,0.182189047336578,0.963832557201386,-0.194509625434875,0.136670753359795,0.566407382488251,-0.812713861465454,-0.153365463018417,0.631252944469452,-0.760262310504913,0.158467367291451,0.970077335834503,-0.183951318264008,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.0725360587239265,-0.598356962203979,-0.797939538955688,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.285298675298691,0.0749257579445839,-0.95550549030304,0.865038812160492,0.500161468982697,0.0393240377306938,0.332606196403503,0.942266285419464,-0.0388250686228275,0.399906992912292,0.90941196680069,-0.11421176046133,0.886778235435486,0.377031594514847,0.267341554164886,0.467275589704514,0.564712345600128,-0.680259943008423,0.136670753359795,0.566407382488251,-0.812713861465454,0.182189047336578,0.963832557201386,-0.194509625434875,0.228658348321915,0.96535587310791,-0.125711753964424,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.343562453985214,0.683792293071747,-0.643733561038971,0.191059574484825,0.965591907501221,-0.17643266916275,0.158467367291451,0.970077335834503,-0.183951318264008,-0.153365463018417,0.631252944469452,-0.760262310504913,0.277932703495026,-0.692557215690613,-0.665670990943909,0.505863070487976,-0.10451452434063,-0.856258869171143,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.0725360587239265,-0.598356962203979,-0.797939538955688,0.277932703495026,-0.692557215690613,-0.665670990943909,\n0.559202313423157,-0.768743932247162,-0.310363441705704,0.91938704252243,-0.184946089982986,-0.347163438796997,0.505863070487976,-0.10451452434063,-0.856258869171143,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.795176029205322,0.587453246116638,0.150312438607216,-0.845747351646423,-0.528353095054626,0.0745282098650932,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.845747351646423,-0.528353095054626,0.0745282098650932,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.549123287200928,-0.730513632297516,-0.405972242355347,0.536804795265198,-0.812591671943665,-0.227014124393463,0.604855418205261,-0.787497401237488,-0.118312001228333,0.624463975429535,-0.657274067401886,0.421942621469498,0.722857892513275,-0.480003207921982,-0.497064769268036,0.722857892513275,-0.480003207921982,-0.497064769268036,0.624463975429535,-0.657274067401886,0.421942621469498,0.802787482738495,0.346281617879868,0.485408395528793,0.931353688240051,0.363742500543594,0.0164845213294029,0.931353688240051,0.363742500543594,0.0164845213294029,0.802787482738495,0.346281617879868,0.485408395528793,0.855425655841827,0.486632764339447,-0.177300468087196,0.809532463550568,0.353956818580627,0.468371391296387,0.441250443458557,-0.840362787246704,-0.314783275127411,0.604855418205261,-0.787497401237488,-0.118312001228333,0.536804795265198,-0.812591671943665,-0.227014124393463,0.353731364011765,-0.88641881942749,-0.298556119203568,0.138132452964783,-0.828281044960022,-0.54301929473877,0.441250443458557,-0.840362787246704,-0.314783275127411,0.353731364011765,-0.88641881942749,-0.298556119203568,0.056479137390852,-0.856393754482269,-0.513224899768829,-0.136814370751381,-0.897029936313629,-0.42026075720787,0.138132452964783,-0.828281044960022,-0.54301929473877,0.056479137390852,-0.856393754482269,-0.513224899768829,-0.176827967166901,-0.795711040496826,-0.579288959503174,-0.371980756521225,-0.111040212213993,-0.921574950218201,0.0855581760406494,-0.201314404606819,-0.975782930850983,\n0.077034167945385,0.455207884311676,-0.88704651594162,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.728462755680084,0.461005359888077,-0.506770253181458,-0.795176029205322,0.587453246116638,0.150312438607216,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.983289659023285,0.179070711135864,0.032787948846817,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.633183360099792,0.75979870557785,-0.147596448659897,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.633183360099792,0.75979870557785,-0.147596448659897,-0.0330419652163982,0.483641624450684,-0.874642193317413,0.191059574484825,0.965591907501221,-0.17643266916275,-0.343562453985214,0.683792293071747,-0.643733561038971,0.855425655841827,0.486632764339447,-0.177300468087196,\n0.785753786563873,0.386755406856537,-0.482712358236313,0.843447089195251,-0.319755733013153,-0.431686460971832,0.809532463550568,0.353956818580627,0.468371391296387,0.942203402519226,0.0765308514237404,0.326183587312698,0.976662814617157,0.0512243360280991,0.208580628037453,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.606497347354889,-0.734818637371063,0.303648799657822,0.886778235435486,0.377031594514847,0.267341554164886,-0.127582266926765,-0.6490518450737,0.749969661235809,-0.541773617267609,0.383253455162048,0.748062908649445,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.839367032051086,0.0223368648439646,-0.543105900287628,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.839367032051086,0.0223368648439646,-0.543105900287628,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.871505856513977,0.489616960287094,-0.0274355374276638,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.820989012718201,0.473643779754639,-0.318808138370514,-0.967624545097351,0.222042396664619,-0.119999624788761,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.85853385925293,0.234514445066452,-0.455985277891159,-0.892978370189667,-0.00842274446040392,-0.450020730495453,\n-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.876750707626343,0.238855347037315,-0.417440205812454,0.505264282226563,0.378391265869141,-0.775582432746887,0.077034167945385,0.455207884311676,-0.88704651594162,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.585620284080505,-0.30219754576683,-0.752147257328033,0.606497347354889,-0.734818637371063,0.303648799657822,0.784134984016418,-0.509350836277008,-0.354533582925797,0.639626801013947,-0.543238401412964,0.543847024440765,0.610888957977295,-0.781325817108154,0.127846196293831,0.865038812160492,0.500161468982697,0.0393240377306938,0.886778235435486,0.377031594514847,0.267341554164886,0.606497347354889,-0.734818637371063,0.303648799657822,0.610888957977295,-0.781325817108154,0.127846196293831,0.585620284080505,-0.30219754576683,-0.752147257328033,0.843447089195251,-0.319755733013153,-0.431686460971832,0.785753786563873,0.386755406856537,-0.482712358236313,0.505264282226563,0.378391265869141,-0.775582432746887,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.879797160625458,-0.457895129919052,-0.127628490328789,0.0757457762956619,-0.699936747550964,-0.710176825523376,-0.371980756521225,-0.111040212213993,-0.921574950218201,0.585620284080505,-0.30219754576683,-0.752147257328033,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.66748982667923,-0.736912310123444,0.106852844357491,0.843447089195251,-0.319755733013153,-0.431686460971832,0.735480666160584,0.34406366944313,-0.583685159683228,0.91938704252243,-0.184946089982986,-0.347163438796997,0.639626801013947,-0.543238401412964,0.543847024440765,0.807643234729767,0.341063499450684,0.481028109788895,0.930141091346741,0.365344673395157,0.0368896275758743,0.272457927465439,0.39542019367218,-0.877159953117371,0.505863070487976,-0.10451452434063,-0.856258869171143,0.91938704252243,-0.184946089982986,-0.347163438796997,0.162468671798706,0.414035111665726,-0.89564436674118,-0.719203293323517,0.653926372528076,-0.234791070222855,\n-0.682009935379028,0.101576536893845,-0.724254548549652,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.486998409032822,0.553657293319702,-0.675496935844421,-0.285298675298691,0.0749257579445839,-0.95550549030304,0.0861517861485481,0.0155389430001378,-0.996160864830017,0.594993591308594,0.323719650506973,-0.735654950141907,-0.316894441843033,0.476865291595459,-0.819864273071289,0.0861517861485481,0.0155389430001378,-0.996160864830017,0.505863070487976,-0.10451452434063,-0.856258869171143,0.728234827518463,0.325270414352417,-0.603219032287598,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.712427794933319,-0.549001693725586,-0.437085568904877,0.435323119163513,-0.758436143398285,-0.485044747591019,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.807643234729767,0.341063499450684,0.481028109788895,0.639626801013947,-0.543238401412964,0.543847024440765,0.809532463550568,0.353956818580627,0.468371391296387,0.521454632282257,-0.681395709514618,0.513599991798401,0.521454632282257,-0.681395709514618,0.513599991798401,0.809532463550568,0.353956818580627,0.468371391296387,0.843447089195251,-0.319755733013153,-0.431686460971832,0.454940408468246,-0.69178706407547,-0.560767233371735,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.917265832424164,-0.397978872060776,0.0153695549815893,-0.983289659023285,0.179070711135864,0.032787948846817,-0.983289659023285,0.179070711135864,0.032787948846817,-0.917265832424164,-0.397978872060776,0.0153695549815893,-0.205607205629349,-0.621804177761078,-0.755701839923859,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.809815943241119,-0.0024391699116677,-0.586678981781006,0.0855581760406494,-0.201314404606819,-0.975782930850983,-0.555338084697723,-0.543631553649902,-0.629336416721344,0.512858152389526,-0.774301767349243,-0.370719999074936,\n0.585620284080505,-0.30219754576683,-0.752147257328033,0.784134984016418,-0.509350836277008,-0.354533582925797,0.606497347354889,-0.734818637371063,0.303648799657822,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.888628959655762,0.438762068748474,0.133515372872353,0.942203402519226,0.0765308514237404,0.326183587312698,0.886778235435486,0.377031594514847,0.267341554164886,-0.917265832424164,-0.397978872060776,0.0153695549815893,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.205607205629349,-0.621804177761078,-0.755701839923859,-0.205607205629349,-0.621804177761078,-0.755701839923859,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.719203293323517,0.653926372528076,-0.234791070222855,-0.879797160625458,-0.457895129919052,-0.127628490328789,-0.879797160625458,-0.457895129919052,-0.127628490328789,-0.719203293323517,0.653926372528076,-0.234791070222855,0.162468671798706,0.414035111665726,-0.89564436674118,0.0757457762956619,-0.699936747550964,-0.710176825523376,0.0757457762956619,-0.699936747550964,-0.710176825523376,0.162468671798706,0.414035111665726,-0.89564436674118,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.486998409032822,0.553657293319702,-0.675496935844421,-0.712427794933319,-0.549001693725586,-0.437085568904877,-0.712427794933319,-0.549001693725586,-0.437085568904877,-0.486998409032822,0.553657293319702,-0.675496935844421,0.594993591308594,0.323719650506973,-0.735654950141907,0.435323119163513,-0.758436143398285,-0.485044747591019,0.435323119163513,-0.758436143398285,-0.485044747591019,0.594993591308594,0.323719650506973,-0.735654950141907,\n0.0861517861485481,0.0155389430001378,-0.996160864830017,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.316894441843033,0.476865291595459,-0.819864273071289,-0.555338084697723,-0.543631553649902,-0.629336416721344,-0.555338084697723,-0.543631553649902,-0.629336416721344,-0.316894441843033,0.476865291595459,-0.819864273071289,0.728234827518463,0.325270414352417,-0.603219032287598,0.512858152389526,-0.774301767349243,-0.370719999074936,0.512858152389526,-0.774301767349243,-0.370719999074936,0.728234827518463,0.325270414352417,-0.603219032287598,0.505863070487976,-0.10451452434063,-0.856258869171143,0.585620284080505,-0.30219754576683,-0.752147257328033,0.585620284080505,-0.30219754576683,-0.752147257328033,0.505863070487976,-0.10451452434063,-0.856258869171143,0.272457927465439,0.39542019367218,-0.877159953117371,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.272457927465439,0.39542019367218,-0.877159953117371,0.930141091346741,0.365344673395157,0.0368896275758743,0.66748982667923,-0.736912310123444,0.106852844357491,0.66748982667923,-0.736912310123444,0.106852844357491,0.930141091346741,0.365344673395157,0.0368896275758743,0.91938704252243,-0.184946089982986,-0.347163438796997,0.843447089195251,-0.319755733013153,-0.431686460971832,0.843447089195251,-0.319755733013153,-0.431686460971832,0.91938704252243,-0.184946089982986,-0.347163438796997,0.735480666160584,0.34406366944313,-0.583685159683228,0.454940408468246,-0.69178706407547,-0.560767233371735,0.454940408468246,-0.69178706407547,-0.560767233371735,0.735480666160584,0.34406366944313,-0.583685159683228,0.807643234729767,0.341063499450684,0.481028109788895,0.521454632282257,-0.681395709514618,0.513599991798401,0.526285588741302,-0.789061844348907,0.316867232322693,0.289891242980957,-0.786550641059875,0.545253336429596,0.133638396859169,-0.991028487682343,-0.00182732508983463,\n0.133638396859169,-0.991028487682343,-0.00182732508983463,0.289891242980957,-0.786550641059875,0.545253336429596,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.0176914222538471,-0.987810254096985,0.154654189944267,-0.0176914222538471,-0.987810254096985,0.154654189944267,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.316983908414841,-0.933099091053009,0.169844955205917,-0.316983908414841,-0.933099091053009,0.169844955205917,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.355301171541214,-0.934036552906036,0.0365622416138649,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.355301171541214,-0.934036552906036,0.0365622416138649,-0.39702296257019,-0.910409450531006,-0.116307184100151,-0.39702296257019,-0.910409450531006,-0.116307184100151,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.387578904628754,-0.825659334659576,-0.40996253490448,-0.387578904628754,-0.825659334659576,-0.40996253490448,-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.347473174333572,-0.882382750511169,-0.317274332046509,-0.347473174333572,-0.882382750511169,-0.317274332046509,-0.348667085170746,-0.872639775276184,-0.341951847076416,-0.348667085170746,-0.872639775276184,-0.341951847076416,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.211497768759727,-0.562794804573059,-0.799081146717072,-0.227143570780754,-0.829574823379517,-0.51010924577713,-0.227143570780754,-0.829574823379517,-0.51010924577713,0.0649978742003441,-0.592735111713409,-0.802770435810089,-0.113406293094158,-0.831756949424744,-0.543432950973511,-0.113406293094158,-0.831756949424744,-0.543432950973511,-0.211497768759727,-0.562794804573059,-0.799081146717072,\n0.0696519389748573,-0.853706240653992,-0.516075789928436,0.0649978742003441,-0.592735111713409,-0.802770435810089,0.442950963973999,-0.635696709156036,-0.632205784320831,0.219755545258522,-0.882318615913391,-0.416198641061783,0.526285588741302,-0.789061844348907,0.316867232322693,0.562327146530151,-0.809826016426086,0.167242258787155,0.78835541009903,-0.474211633205414,0.391942739486694,0.665505409240723,-0.470593899488449,0.579347848892212,0.991608023643494,-0.114275835454464,-0.060452651232481,0.82292628288269,-0.280684322118759,0.493972301483154,0.831244945526123,-0.225508287549019,0.508112013339996,0.995975911617279,-0.0798337981104851,-0.0407244116067886,0.867793679237366,-0.309993803501129,0.38837856054306,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.884072363376617,-0.159779712557793,0.439188450574875,0.78835541009903,-0.474211633205414,0.391942739486694,0.93778657913208,-0.340576171875,-0.0675588026642799,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.867793679237366,-0.309993803501129,0.38837856054306,0.581761598587036,-0.790978848934174,-0.189488589763641,0.93778657913208,-0.340576171875,-0.0675588026642799,0.78835541009903,-0.474211633205414,0.391942739486694,0.562327146530151,-0.809826016426086,0.167242258787155,-0.0647715702652931,-0.0269695688039064,0.997535645961761,0.280544310808182,-0.2230264544487,0.933570623397827,0.147943705320358,-0.468890011310577,0.870778322219849,-0.0499088205397129,-0.128681614995003,0.990429282188416,0.370588421821594,-0.193350583314896,0.908449113368988,0.280544310808182,-0.2230264544487,0.933570623397827,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.985335469245911,0.0123848039656878,-0.170178011059761,-0.924062490463257,0.166337832808495,-0.344151526689529,0.92520534992218,-0.376655071973801,-0.0461085550487041,0.943572819232941,-0.310979694128037,-0.113850839436054,0.949489533901215,-0.288099020719528,0.124372407793999,\n0.900178790092468,-0.431453764438629,0.0593785345554352,0.815547049045563,-0.485381871461868,-0.315099239349365,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.891479134559631,-0.356151014566422,-0.280038207769394,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.922418296337128,0.0309104230254889,0.384953290224075,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.877985596656799,0.347244709730148,0.329488188028336,-0.939527928829193,0.186541080474854,0.287210255861282,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.482705980539322,0.267842918634415,-0.833819627761841,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.923067510128021,0.218861386179924,-0.316300690174103,0.0640611723065376,0.868370652198792,0.491760730743408,-0.0218884665518999,0.60806405544281,0.793586194515228,0.432919770479202,0.554768323898315,0.710501611232758,0.272088974714279,0.83392196893692,0.480147629976273,-0.402506142854691,0.589897632598877,0.70000684261322,-0.0960818529129028,0.882192492485046,0.460982292890549,-0.147527620196342,0.908096194267273,0.391914486885071,-0.551313877105713,0.631630659103394,0.545064926147461,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.877985596656799,0.347244709730148,0.329488188028336,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.45111495256424,-0.252489358186722,0.856004893779755,-0.697896897792816,0.111968666315079,0.707391619682312,-0.877985596656799,0.347244709730148,0.329488188028336,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.0218884665518999,0.60806405544281,0.793586194515228,0.0640611723065376,0.868370652198792,0.491760730743408,-0.0960818529129028,0.882192492485046,0.460982292890549,-0.402506142854691,0.589897632598877,0.70000684261322,-0.697896897792816,0.111968666315079,0.707391619682312,\n-0.45111495256424,-0.252489358186722,0.856004893779755,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.0958455428481102,-0.0575050786137581,0.993733763694763,-0.976002871990204,0.137454673647881,0.168892458081245,-0.850299119949341,0.0502048023045063,0.523899674415588,-0.551313877105713,0.631630659103394,0.545064926147461,-0.683505356311798,0.663009881973267,0.305349379777908,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.697896897792816,0.111968666315079,0.707391619682312,-0.0958455428481102,-0.0575050786137581,0.993733763694763,-0.939527928829193,0.186541080474854,0.287210255861282,-0.903742134571075,0.0408328101038933,0.426125347614288,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.805570960044861,0.0887086465954781,-0.585820972919464,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.923067510128021,0.218861386179924,-0.316300690174103,0.568327903747559,-0.132913276553154,0.811995983123779,0.503679692745209,-0.333046585321426,0.797111511230469,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.0958455428481102,-0.0575050786137581,0.993733763694763,0.560331284999847,-0.197167843580246,0.804458677768707,0.681288719177246,-0.155398637056351,0.715329945087433,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.969195008277893,0.116620995104313,0.216934517025948,0.934698820114136,0.0468888580799103,-0.352334558963776,0.909544348716736,-0.0496345721185207,0.412632375955582,0.953069984912872,0.0484385639429092,0.298849850893021,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.76161140203476,-0.261901050806046,0.592752873897552,0.503679692745209,-0.333046585321426,0.797111511230469,0.568327903747559,-0.132913276553154,0.811995983123779,0.807208120822906,-0.16038890182972,0.568058490753174,-0.892664194107056,0.187903389334679,-0.409686326980591,-0.964133560657501,0.11603681743145,0.238708838820457,\n-0.922418296337128,0.0309104230254889,0.384953290224075,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.964133560657501,0.11603681743145,0.238708838820457,-0.892664194107056,0.187903389334679,-0.409686326980591,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.928708910942078,-0.245197176933289,0.278169125318527,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.892664194107056,0.187903389334679,-0.409686326980591,0.801601529121399,-0.550374329090118,-0.233501866459847,0.681288719177246,-0.155398637056351,0.715329945087433,0.293806612491608,-0.416160941123962,0.860515952110291,0.364783316850662,-0.883516609668732,0.293822199106216,0.953069984912872,0.0484385639429092,0.298849850893021,0.909544348716736,-0.0496345721185207,0.412632375955582,0.871833384037018,0.0184005852788687,0.489456832408905,0.928847432136536,0.162274017930031,0.333030939102173,0.546681344509125,-0.221680983901024,0.807463347911835,0.560331284999847,-0.197167843580246,0.804458677768707,0.969195008277893,0.116620995104313,0.216934517025948,0.928847432136536,0.162274017930031,0.333030939102173,0.332680404186249,-0.441110402345657,0.833513855934143,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.922418296337128,0.0309104230254889,0.384953290224075,-0.213112205266953,-0.0906345173716545,0.972814738750458,0.0511878095567226,-0.230872601270676,0.971636593341827,0.161164596676826,-0.331503033638,0.929586827754974,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.482705980539322,0.267842918634415,-0.833819627761841,0.890334188938141,-0.2436583340168,-0.384624063968658,-0.47929310798645,-0.284916669130325,-0.830120861530304,-0.383484423160553,-0.10283836722374,-0.917803883552551,\n0.942743897438049,-0.0672791972756386,-0.326661080121994,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.45111495256424,-0.252489358186722,0.856004893779755,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.45111495256424,-0.252489358186722,0.856004893779755,0.0511878095567226,-0.230872601270676,0.971636593341827,0.152829229831696,-0.222570449113846,0.962863266468048,0.30596736073494,-0.302397102117538,0.902740240097046,0.161164596676826,-0.331503033638,0.929586827754974,0.118139639496803,-0.728867173194885,0.67438542842865,-0.583520650863647,-0.523498177528381,0.620848834514618,0.546681344509125,-0.221680983901024,0.807463347911835,0.456334859132767,-0.263855695724487,0.849787414073944,-0.812033832073212,-0.319456815719604,0.488414168357849,-0.828753769397736,-0.00401695584878325,0.559599041938782,0.681288719177246,-0.155398637056351,0.715329945087433,0.560331284999847,-0.197167843580246,0.804458677768707,-0.383484423160553,-0.10283836722374,-0.917803883552551,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.934698820114136,0.0468888580799103,-0.352334558963776,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.202261254191399,-0.191956058144569,0.960334956645966,0.332680404186249,-0.441110402345657,0.833513855934143,-0.922418296337128,0.0309104230254889,0.384953290224075,-0.964133560657501,0.11603681743145,0.238708838820457,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.0923520997166634,-0.948987245559692,0.301486879587173,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.543925106525421,-0.442455142736435,-0.713006973266602,\n-0.201129660010338,-0.411518931388855,0.888931393623352,0.202261254191399,-0.191956058144569,0.960334956645966,-0.964133560657501,0.11603681743145,0.238708838820457,-0.928708910942078,-0.245197176933289,0.278169125318527,0.751028060913086,-0.474978506565094,-0.458641737699509,0.691331505775452,-0.716019809246063,-0.0968316718935966,-0.543925106525421,-0.442455142736435,-0.713006973266602,-0.56893402338028,-0.144464939832687,-0.809594929218292,0.505280077457428,-0.213028207421303,-0.836248159408569,0.751028060913086,-0.474978506565094,-0.458641737699509,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.828753769397736,-0.00401695584878325,0.559599041938782,-0.650360941886902,-0.2744460105896,0.708314895629883,0.293806612491608,-0.416160941123962,0.860515952110291,0.681288719177246,-0.155398637056351,0.715329945087433,-0.587613880634308,-0.804071664810181,0.0904360190033913,-0.653040766716003,-0.484619319438934,-0.581963837146759,0.801601529121399,-0.550374329090118,-0.233501866459847,0.364783316850662,-0.883516609668732,0.293822199106216,-0.583520650863647,-0.523498177528381,0.620848834514618,-0.812033832073212,-0.319456815719604,0.488414168357849,0.560331284999847,-0.197167843580246,0.804458677768707,0.546681344509125,-0.221680983901024,0.807463347911835,0.0923520997166634,-0.948987245559692,0.301486879587173,-0.201129660010338,-0.411518931388855,0.888931393623352,-0.928708910942078,-0.245197176933289,0.278169125318527,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.650360941886902,-0.2744460105896,0.708314895629883,-0.587613880634308,-0.804071664810181,0.0904360190033913,0.364783316850662,-0.883516609668732,0.293822199106216,0.293806612491608,-0.416160941123962,0.860515952110291,0.563132643699646,0.445763438940048,0.695827960968018,0.717245042324066,0.0185855161398649,0.696573138237,0.961548805236816,-0.0192979723215103,0.273955345153809,0.709949553012848,0.601409435272217,0.366440117359161,-0.937970280647278,0.291287869215012,-0.188050955533981,\n-0.949256777763367,0.266638487577438,-0.166779711842537,-0.713874757289886,0.186937421560287,-0.674860894680023,0.568327903747559,-0.132913276553154,0.811995983123779,-0.0958455428481102,-0.0575050786137581,0.993733763694763,-0.136431202292442,-0.35848480463028,0.923512399196625,0.161164596676826,-0.331503033638,0.929586827754974,0.714491784572601,0.142257153987885,0.685028791427612,0.890334188938141,-0.2436583340168,-0.384624063968658,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.953069984912872,0.0484385639429092,0.298849850893021,-0.697896897792816,0.111968666315079,0.707391619682312,-0.903742134571075,0.0408328101038933,0.426125347614288,-0.939527928829193,0.186541080474854,0.287210255861282,-0.877985596656799,0.347244709730148,0.329488188028336,0.320462375879288,0.819697320461273,0.474763184785843,0.272088974714279,0.83392196893692,0.480147629976273,0.432919770479202,0.554768323898315,0.710501611232758,0.543301939964294,0.448152214288712,0.709917306900024,0.406093060970306,0.667463958263397,0.624163687229156,0.807208120822906,-0.16038890182972,0.568058490753174,0.568327903747559,-0.132913276553154,0.811995983123779,0.714491784572601,0.142257153987885,0.685028791427612,0.871833384037018,0.0184005852788687,0.489456832408905,-0.939527928829193,0.186541080474854,0.287210255861282,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.543925106525421,-0.442455142736435,-0.713006973266602,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.892664194107056,0.187903389334679,-0.409686326980591,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.543925106525421,-0.442455142736435,-0.713006973266602,-0.892664194107056,0.187903389334679,-0.409686326980591,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.681288719177246,-0.155398637056351,0.715329945087433,0.801601529121399,-0.550374329090118,-0.233501866459847,0.890334188938141,-0.2436583340168,-0.384624063968658,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.801601529121399,-0.550374329090118,-0.233501866459847,\n0.890334188938141,-0.2436583340168,-0.384624063968658,0.801601529121399,-0.550374329090118,-0.233501866459847,-0.653040766716003,-0.484619319438934,-0.581963837146759,-0.47929310798645,-0.284916669130325,-0.830120861530304,0.928275108337402,-0.108704164624214,0.355652451515198,0.949140191078186,-0.201623901724815,0.241827890276909,0.76161140203476,-0.261901050806046,0.592752873897552,0.807208120822906,-0.16038890182972,0.568058490753174,0.406093060970306,0.667463958263397,0.624163687229156,0.563132643699646,0.445763438940048,0.695827960968018,0.709949553012848,0.601409435272217,0.366440117359161,0.380683273077011,0.860944807529449,0.337422966957092,0.320462375879288,0.819697320461273,0.474763184785843,0.543301939964294,0.448152214288712,0.709917306900024,0.717245042324066,0.0185855161398649,0.696573138237,0.563132643699646,0.445763438940048,0.695827960968018,0.406093060970306,0.667463958263397,0.624163687229156,0.543301939964294,0.448152214288712,0.709917306900024,0.432919770479202,0.554768323898315,0.710501611232758,0.538123428821564,-0.0776133164763451,0.839285016059875,0.717245042324066,0.0185855161398649,0.696573138237,-0.0218884665518999,0.60806405544281,0.793586194515228,-0.141525283455849,-0.0639705210924149,0.987865567207336,0.538123428821564,-0.0776133164763451,0.839285016059875,0.432919770479202,0.554768323898315,0.710501611232758,-0.402506142854691,0.589897632598877,0.70000684261322,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.141525283455849,-0.0639705210924149,0.987865567207336,-0.0218884665518999,0.60806405544281,0.793586194515228,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.402506142854691,0.589897632598877,0.70000684261322,-0.551313877105713,0.631630659103394,0.545064926147461,-0.850299119949341,0.0502048023045063,0.523899674415588,-0.683505356311798,0.663009881973267,0.305349379777908,-0.551313877105713,0.631630659103394,0.545064926147461,-0.147527620196342,0.908096194267273,0.391914486885071,-0.258647561073303,0.909015476703644,0.326790869235992,-0.331648796796799,0.794523477554321,-0.508666396141052,\n0.0982041954994202,0.744845330715179,-0.659970700740814,0.00497482251375914,0.164960786700249,-0.986287593841553,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.656110644340515,0.732090890407562,-0.183198615908623,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.505583822727203,0.0150259397923946,-0.862646639347076,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,0.00533884158357978,0.0413248725235462,-0.999131500720978,-0.459000378847122,0.0631367489695549,-0.886189818382263,0.34263151884079,0.695380985736847,-0.631703197956085,0.632241547107697,0.646320283412933,-0.427247822284698,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.341541588306427,0.10033044219017,-0.934496164321899,0.71175479888916,-0.136520832777023,-0.689033508300781,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.377974539995193,-0.0538287870585918,-0.924249827861786,0.70794689655304,-0.166302517056465,-0.686407029628754,-0.459000378847122,0.0631367489695549,-0.886189818382263,-0.805570960044861,0.0887086465954781,-0.585820972919464,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.505583822727203,0.0150259397923946,-0.862646639347076,0.938030481338501,-0.164544522762299,-0.304998099803925,0.820765018463135,-0.278661012649536,-0.4986911714077,0.941822648048401,-0.153352871537209,-0.299086838960648,-0.459000378847122,0.0631367489695549,-0.886189818382263,0.00533884158357978,0.0413248725235462,-0.999131500720978,-0.0723040401935577,-0.562818825244904,-0.823411822319031,-0.379301369190216,-0.56307464838028,-0.734218895435333,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.71175479888916,-0.136520832777023,-0.689033508300781,0.471586465835571,-0.672621011734009,-0.570251822471619,0.282903432846069,-0.614905893802643,-0.736109018325806,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.805570960044861,0.0887086465954781,-0.585820972919464,\n-0.459000378847122,0.0631367489695549,-0.886189818382263,0.820765018463135,-0.278661012649536,-0.4986911714077,0.938030481338501,-0.164544522762299,-0.304998099803925,0.0390605479478836,-0.798295617103577,-0.600997805595398,0.433943748474121,-0.801411271095276,-0.411622196435928,0.985846102237701,-0.106943093240261,0.129114612936974,0.97103625535965,0.0917741134762764,-0.2206040173769,0.850343227386475,-0.422914385795593,-0.313145011663437,0.846594989299774,-0.529064953327179,0.0580276139080524,0.0982041954994202,0.744845330715179,-0.659970700740814,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.0896633565425873,0.986825108528137,-0.134672433137894,0.149676010012627,0.966882228851318,-0.20672644674778,0.380683273077011,0.860944807529449,0.337422966957092,0.709949553012848,0.601409435272217,0.366440117359161,0.785880386829376,0.614527404308319,-0.0689060613512993,0.462400853633881,0.884378015995026,0.0637255683541298,0.404174894094467,0.903538584709167,-0.142339900135994,0.632241547107697,0.646320283412933,-0.427247822284698,0.34263151884079,0.695380985736847,-0.631703197956085,0.26786082983017,0.938322722911835,-0.218634366989136,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.458068251609802,-0.324115723371506,-0.827721238136292,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.458068251609802,-0.324115723371506,-0.827721238136292,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.0723040401935577,-0.562818825244904,-0.823411822319031,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.282903432846069,-0.614905893802643,-0.736109018325806,0.471586465835571,-0.672621011734009,-0.570251822471619,0.642500996589661,-0.273710608482361,-0.715733826160431,0.383173555135727,-0.262150347232819,-0.885694801807404,0.433943748474121,-0.801411271095276,-0.411622196435928,0.0390605479478836,-0.798295617103577,-0.600997805595398,0.846594989299774,-0.529064953327179,0.0580276139080524,0.850343227386475,-0.422914385795593,-0.313145011663437,\n-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.348949372768402,-0.852245092391968,0.389759749174118,0.645033359527588,-0.763978242874146,0.0164063423871994,0.085636705160141,-0.288859754800797,0.95353364944458,-0.826135456562042,-0.335000514984131,0.453072637319565,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.306766450405121,-0.118458941578865,0.944384336471558,0.441097766160965,0.233705207705498,0.866495609283447,0.390775859355927,0.856176912784576,0.338016718626022,-0.15803237259388,0.792331874370575,0.589267313480377,-0.395615994930267,-0.602470278739929,-0.693193674087524,0.709003627300262,-0.541708946228027,-0.451514393091202,0.415498226881027,-0.625033438205719,0.660828590393066,-0.722061336040497,-0.559728622436523,0.406609505414963,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.863033890724182,-0.335786253213882,-0.377385854721069,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.282899647951126,-0.764817118644714,-0.578811287879944,0.557026505470276,-0.731577336788177,-0.393085300922394,0.466174304485321,-0.668626964092255,0.579326808452606,-0.705482065677643,-0.662965536117554,0.250542938709259,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.68010026216507,-0.471441000699997,-0.561433076858521,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.68010026216507,-0.471441000699997,-0.561433076858521,0.312811404466629,-0.918802380561829,-0.240730464458466,-0.68010026216507,-0.471441000699997,-0.561433076858521,-0.94776064157486,-0.269029259681702,-0.171385675668716,0.248996675014496,-0.917850255966187,0.309114098548889,-0.445575803518295,0.0603601969778538,-0.89320707321167,\n-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.647231996059418,0.709673702716827,-0.278305560350418,-0.305622786283493,0.734605431556702,-0.605763673782349,0.462542772293091,0.739023745059967,-0.489793956279755,0.671855986118317,0.740681707859039,-0.000314049131702632,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.627128839492798,0.0574354380369186,-0.776795089244843,0.596383929252625,0.731881856918335,0.329659104347229,0.615696132183075,0.768994271755219,0.171947747468948,0.9074946641922,-0.352809637784958,-0.227988600730896,0.918069958686829,-0.187106743454933,0.3494833111763,0.638639688491821,0.766668796539307,0.0660171657800674,0.900666058063507,-0.271470785140991,0.339270144701004,0.9074946641922,-0.352809637784958,-0.227988600730896,0.615696132183075,0.768994271755219,0.171947747468948,0.390775859355927,0.856176912784576,0.338016718626022,0.441097766160965,0.233705207705498,0.866495609283447,0.812849104404449,-0.351107835769653,0.464757591485977,0.748181462287903,0.587628960609436,0.308085650205612,0.916947364807129,0.362371891736984,0.167015478014946,0.847357213497162,0.513431668281555,0.135549768805504,0.882211685180664,0.466362744569778,0.0648712962865829,0.893702685832977,0.422671288251877,0.150480911135674,0.882211685180664,0.466362744569778,0.0648712962865829,0.847357213497162,0.513431668281555,0.135549768805504,0.729536890983582,0.676141858100891,0.102995507419109,0.755123436450958,0.652067601680756,0.0677972882986069,0.719103455543518,0.620088696479797,0.313656240701675,0.416522979736328,0.747589826583862,0.517318189144135,0.382025003433228,0.832321524620056,0.401618927717209,0.661795139312744,0.713703632354736,0.229465380311012,0.732339978218079,0.57999724149704,0.356765180826187,0.404268801212311,0.753554701805115,0.518384099006653,0.416522979736328,0.747589826583862,0.517318189144135,0.719103455543518,0.620088696479797,0.313656240701675,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.676983892917633,0.720325946807861,-0.15107399225235,\n-0.709426164627075,0.694045186042786,-0.1225391253829,-0.471274226903915,0.860716223716736,0.192531064152718,-0.508786559104919,0.827320158481598,0.238070502877235,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.508786559104919,0.827320158481598,0.238070502877235,-0.52653956413269,0.801656424999237,0.283024877309799,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.789477050304413,0.597959935665131,-0.138455465435982,\n-0.320632964372635,0.735152721405029,-0.597281336784363,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.350197345018387,0.671358823776245,-0.653176188468933,-0.300025343894959,0.704358756542206,-0.643322288990021,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.320632964372635,0.735152721405029,-0.597281336784363,0.177267909049988,0.365930050611496,-0.91360342502594,0.546093285083771,0.623855233192444,-0.559094548225403,0.500399529933929,0.708592414855957,-0.497490793466568,0.139554411172867,0.707306206226349,-0.692995309829712,0.139554411172867,0.707306206226349,-0.692995309829712,0.500399529933929,0.708592414855957,-0.497490793466568,0.483161181211472,0.7082759141922,-0.514684855937958,0.143811240792274,0.67733633518219,-0.721480309963226,0.627380788326263,0.542527794837952,-0.558620572090149,0.926415085792542,0.366669327020645,-0.085490919649601,0.968909800052643,-0.119059138000011,-0.21688424050808,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.500399529933929,0.708592414855957,-0.497490793466568,0.74566113948822,0.665992856025696,-0.021046232432127,0.711231529712677,0.702188611030579,-0.0328761637210846,0.483161181211472,0.7082759141922,-0.514684855937958,0.947628259658813,0.256551682949066,0.190215542912483,0.970879018306732,0.17382837831974,0.164856374263763,0.975513935089111,-0.202585577964783,0.0856255367398262,0.981737434864044,-0.183587238192558,0.0498724691569805,0.713916897773743,0.653736352920532,0.250901371240616,0.793782532215118,0.557114601135254,0.24399308860302,0.855198323726654,0.434896290302277,0.281959295272827,0.72310745716095,0.620889782905579,0.302673995494843,0.996930718421936,0.0329510122537613,0.0710170343518257,0.991389572620392,-0.125116944313049,0.0386327914893627,0.655400395393372,-0.538768291473389,0.52931934595108,0.814328134059906,-0.0162655059248209,0.580176770687103,0.738506376743317,0.594660043716431,0.317785710096359,0.878546118736267,0.378491014242172,0.291378289461136,\n0.896252334117889,0.421274542808533,0.138778761029243,0.767313122749329,0.622622787952423,0.153530031442642,0.896252334117889,0.421274542808533,0.138778761029243,0.882211685180664,0.466362744569778,0.0648712962865829,0.755123436450958,0.652067601680756,0.0677972882986069,0.767313122749329,0.622622787952423,0.153530031442642,-0.144893556833267,0.857636988162994,0.493421375751495,-0.52653956413269,0.801656424999237,0.283024877309799,-0.508786559104919,0.827320158481598,0.238070502877235,-0.128903239965439,0.870382308959961,0.475203812122345,-0.13026924431324,0.905642747879028,0.403535783290863,-0.128903239965439,0.870382308959961,0.475203812122345,-0.508786559104919,0.827320158481598,0.238070502877235,-0.471274226903915,0.860716223716736,0.192531064152718,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.713882029056549,0.360403180122375,0.60040158033371,-0.576912403106689,0.718079209327698,0.389274090528488,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.911553025245667,0.36151385307312,0.195905029773712,-0.909857094287872,0.391187280416489,0.138320609927177,-0.816486001014709,0.512708961963654,0.265480846166611,-0.660224080085754,0.688790798187256,0.299451798200607,-0.752071261405945,0.531812846660614,0.389312088489532,-0.752071261405945,0.531812846660614,0.389312088489532,-0.660224080085754,0.688790798187256,0.299451798200607,-0.563141465187073,0.729207098484039,0.388752728700638,-0.646896600723267,0.568207919597626,0.508590757846832,0.320559591054916,0.729658484458923,0.6040198802948,0.311181455850601,0.925608515739441,0.215441450476646,-0.0790780931711197,0.992485880851746,0.0933722108602524,-0.202111601829529,0.805501878261566,0.557061612606049,0.614538609981537,0.667141020298004,0.421028733253479,0.320559591054916,0.729658484458923,0.6040198802948,0.367227405309677,0.346865594387054,0.86303436756134,0.764663100242615,0.188213542103767,0.616332709789276,\n0.520070433616638,0.75630134344101,0.396906822919846,0.522960782051086,0.842813670635223,-0.127189323306084,0.764615535736084,0.640312492847443,0.0732326954603195,0.941741049289703,0.116148002445698,0.315647602081299,0.413430035114288,0.428488910198212,0.803413271903992,0.941741049289703,0.116148002445698,0.315647602081299,0.996930718421936,0.0329510122537613,0.0710170343518257,0.910823285579681,0.270006626844406,0.312245815992355,0.602918326854706,0.515652477741241,0.608762681484222,0.229550704360008,0.575565576553345,0.784876227378845,0.413430035114288,0.428488910198212,0.803413271903992,0.910823285579681,0.270006626844406,0.312245815992355,0.152829229831696,-0.222570449113846,0.962863266468048,0.0511878095567226,-0.230872601270676,0.971636593341827,0.187374159693718,0.57430511713028,0.796909391880035,0.602918326854706,0.515652477741241,0.608762681484222,0.602918326854706,0.515652477741241,0.608762681484222,0.187374159693718,0.57430511713028,0.796909391880035,0.00418568449094892,0.628182590007782,0.778054714202881,0.229550704360008,0.575565576553345,0.784876227378845,-0.407288640737534,0.570921063423157,0.712857007980347,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.407288640737534,0.570921063423157,0.712857007980347,-0.659538865089417,0.541105389595032,0.521740794181824,-0.646896600723267,0.568207919597626,0.508590757846832,-0.402498841285706,0.624280869960785,0.669528245925903,-0.646896600723267,0.568207919597626,0.508590757846832,-0.659538865089417,0.541105389595032,0.521740794181824,-0.861413061618805,0.450139373540878,0.235249027609825,-0.752071261405945,0.531812846660614,0.389312088489532,0.522960782051086,0.842813670635223,-0.127189323306084,0.261382073163986,0.943598508834839,-0.203227162361145,0.505573332309723,0.856702566146851,0.102256514132023,0.764615535736084,0.640312492847443,0.0732326954603195,-0.33124178647995,0.767114698886871,0.549375951290131,-0.402498841285706,0.624280869960785,0.669528245925903,-0.646896600723267,0.568207919597626,0.508590757846832,\n-0.563141465187073,0.729207098484039,0.388752728700638,-0.699552893638611,0.686573624610901,0.19809702038765,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.802868485450745,0.579959869384766,0.138017445802689,-0.421845138072968,0.35173299908638,-0.835661768913269,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.458068251609802,-0.324115723371506,-0.827721238136292,-0.272203058004379,0.658502340316772,-0.701626777648926,-0.397901207208633,0.642866194248199,-0.654520928859711,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.421845138072968,0.35173299908638,-0.835661768913269,0.383173555135727,-0.262150347232819,-0.885694801807404,0.642500996589661,-0.273710608482361,-0.715733826160431,0.633863806724548,0.397778630256653,-0.663316547870636,0.398143172264099,0.565787017345428,-0.722057580947876,0.390601873397827,0.504608035087585,-0.769935667514801,0.432219922542572,0.089619405567646,-0.897303879261017,0.62652999162674,-0.0954440459609032,-0.773531258106232,0.605724632740021,0.555329561233521,-0.569830477237701,0.62652999162674,-0.0954440459609032,-0.773531258106232,0.886820495128632,-0.356388479471207,-0.294171094894409,0.859436631202698,0.509184420108795,0.0458242334425449,0.605724632740021,0.555329561233521,-0.569830477237701,0.642500996589661,-0.273710608482361,-0.715733826160431,0.850343227386475,-0.422914385795593,-0.313145011663437,0.97103625535965,0.0917741134762764,-0.2206040173769,0.633863806724548,0.397778630256653,-0.663316547870636,0.654246509075165,0.624168276786804,0.427054405212402,0.599660396575928,0.629723131656647,0.493817895650864,0.970879018306732,0.17382837831974,0.164856374263763,\n0.933142781257629,0.297380536794662,0.202013194561005,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.305637359619141,0.797389090061188,-0.520342588424683,0.525696158409119,0.742150247097015,-0.41576024889946,0.723603904247284,0.683222591876984,0.0980009809136391,0.906324923038483,0.41602036356926,-0.0741765573620796,0.627528429031372,0.574077785015106,-0.525968432426453,0.367227405309677,0.346865594387054,0.86303436756134,0.320559591054916,0.729658484458923,0.6040198802948,-0.202111601829529,0.805501878261566,0.557061612606049,-0.27060467004776,0.441340714693069,0.855565011501312,-0.305637359619141,0.797389090061188,-0.520342588424683,0.133048385381699,0.622710466384888,-0.771057546138763,0.193036586046219,0.594731748104095,-0.780404388904572,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.909857094287872,0.391187280416489,0.138320609927177,-0.752071261405945,0.531812846660614,0.389312088489532,-0.861413061618805,0.450139373540878,0.235249027609825,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.911553025245667,0.36151385307312,0.195905029773712,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.686884999275208,0.723168194293976,-0.0722270086407661,0.311181455850601,0.925608515739441,0.215441450476646,0.227211803197861,0.921236932277679,0.315748870372772,-0.127702474594116,0.976085126399994,0.175925895571709,-0.0790780931711197,0.992485880851746,0.0933722108602524,0.597852408885956,0.634572505950928,0.489785879850388,\n0.780855357646942,0.547496914863586,0.30085226893425,0.505573332309723,0.856702566146851,0.102256514132023,0.227211803197861,0.921236932277679,0.315748870372772,0.826885938644409,0.48306405544281,0.287938833236694,0.732339978218079,0.57999724149704,0.356765180826187,0.719103455543518,0.620088696479797,0.313656240701675,0.796578645706177,0.576386570930481,0.182321041822433,0.796578645706177,0.576386570930481,0.182321041822433,0.719103455543518,0.620088696479797,0.313656240701675,0.661795139312744,0.713703632354736,0.229465380311012,0.703840851783752,0.696332156658173,0.140461936593056,0.819103598594666,0.554179012775421,0.148171901702881,0.748181462287903,0.587628960609436,0.308085650205612,0.665187358856201,-0.279087334871292,0.692557573318481,0.939882814884186,-0.341329634189606,0.010694270953536,-0.384443581104279,-0.766654908657074,-0.514240622520447,0.685397624969482,-0.694671988487244,-0.218313813209534,0.317059487104416,-0.547120809555054,0.774681925773621,-0.666895866394043,-0.560438930988312,0.491078555583954,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.640394568443298,0.754049122333527,-0.145961567759514,0.118139639496803,-0.728867173194885,0.67438542842865,0.910823285579681,0.270006626844406,0.312245815992355,0.807652294635773,0.443565875291824,0.388519138097763,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.807652294635773,0.443565875291824,0.388519138097763,0.762879073619843,0.502556324005127,0.406758666038513,0.914847433567047,-0.40378075838089,0.00391693273559213,0.993199586868286,-5.2900577429682e-006,0.1164241284132,-0.305622786283493,0.734605431556702,-0.605763673782349,0.121350355446339,0.714234948158264,-0.68930584192276,0.198126867413521,0.0765141919255257,-0.977185368537903,-0.445575803518295,0.0603601969778538,-0.89320707321167,-0.906213700771332,0.328242093324661,-0.266521811485291,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.909857094287872,0.391187280416489,0.138320609927177,\n-0.957430243492126,0.286320626735687,0.0367132313549519,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.426684230566025,0.00725271692499518,-0.904371619224548,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.430813580751419,0.499041646718979,-0.751902282238007,0.239434629678726,0.547067284584045,-0.802115023136139,0.324593335390091,0.033190730959177,-0.945271134376526,-0.426684230566025,0.00725271692499518,-0.904371619224548,0.896252334117889,0.421274542808533,0.138778761029243,0.891313195228577,0.424902439117432,0.158173009753227,0.893702685832977,0.422671288251877,0.150480911135674,0.882211685180664,0.466362744569778,0.0648712962865829,0.797426402568817,0.177674129605293,0.57666540145874,0.891313195228577,0.424902439117432,0.158173009753227,0.896252334117889,0.421274542808533,0.138778761029243,0.878546118736267,0.378491014242172,0.291378289461136,0.870848119258881,0.464649528264999,0.160388246178627,0.908547043800354,0.339474141597748,0.243515089154243,0.855198323726654,0.434896290302277,0.281959295272827,0.793782532215118,0.557114601135254,0.24399308860302,0.546093285083771,0.623855233192444,-0.559094548225403,0.809562027454376,0.57842743396759,-0.100154921412468,0.74566113948822,0.665992856025696,-0.021046232432127,0.500399529933929,0.708592414855957,-0.497490793466568,-0.647231996059418,0.709673702716827,-0.278305560350418,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.717040240764618,0.690781652927399,-0.0931341797113419,\n-0.727224290370941,0.663318395614624,-0.176503553986549,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.709426164627075,0.694045186042786,-0.1225391253829,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.599858164787292,0.75833535194397,0.255142569541931,-0.471274226903915,0.860716223716736,0.192531064152718,-0.471274226903915,0.860716223716736,0.192531064152718,-0.599858164787292,0.75833535194397,0.255142569541931,-0.15803237259388,0.792331874370575,0.589267313480377,-0.13026924431324,0.905642747879028,0.403535783290863,0.661795139312744,0.713703632354736,0.229465380311012,0.382025003433228,0.832321524620056,0.401618927717209,0.390775859355927,0.856176912784576,0.338016718626022,0.748181462287903,0.587628960609436,0.308085650205612,0.703840851783752,0.696332156658173,0.140461936593056,0.661795139312744,0.713703632354736,0.229465380311012,0.748181462287903,0.587628960609436,0.308085650205612,0.819103598594666,0.554179012775421,0.148171901702881,0.755123436450958,0.652067601680756,0.0677972882986069,0.729536890983582,0.676141858100891,0.102995507419109,0.658155202865601,0.750174701213837,0.0637934505939484,0.638639688491821,0.766668796539307,0.0660171657800674,0.755123436450958,0.652067601680756,0.0677972882986069,0.638639688491821,0.766668796539307,0.0660171657800674,0.615696132183075,0.768994271755219,0.171947747468948,0.767313122749329,0.622622787952423,0.153530031442642,0.738506376743317,0.594660043716431,0.317785710096359,0.767313122749329,0.622622787952423,0.153530031442642,\n0.615696132183075,0.768994271755219,0.171947747468948,0.596383929252625,0.731881856918335,0.329659104347229,0.613771736621857,0.718874037265778,0.326349973678589,0.632348001003265,0.720907807350159,0.283598184585571,0.713916897773743,0.653736352920532,0.250901371240616,0.72310745716095,0.620889782905579,0.302673995494843,0.483161181211472,0.7082759141922,-0.514684855937958,0.711231529712677,0.702188611030579,-0.0328761637210846,0.671855986118317,0.740681707859039,-0.000314049131702632,0.462542772293091,0.739023745059967,-0.489793956279755,0.143811240792274,0.67733633518219,-0.721480309963226,0.483161181211472,0.7082759141922,-0.514684855937958,0.462542772293091,0.739023745059967,-0.489793956279755,0.121350355446339,0.714234948158264,-0.68930584192276,-0.305622786283493,0.734605431556702,-0.605763673782349,-0.647231996059418,0.709673702716827,-0.278305560350418,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.300025343894959,0.704358756542206,-0.643322288990021,0.732339978218079,0.57999724149704,0.356765180826187,0.826885938644409,0.48306405544281,0.287938833236694,0.854411005973816,0.0699176639318466,0.514872193336487,0.764663100242615,0.188213542103767,0.616332709789276,0.404268801212311,0.753554701805115,0.518384099006653,0.732339978218079,0.57999724149704,0.356765180826187,0.764663100242615,0.188213542103767,0.616332709789276,0.367227405309677,0.346865594387054,0.86303436756134,-0.144893556833267,0.857636988162994,0.493421375751495,0.404268801212311,0.753554701805115,0.518384099006653,0.367227405309677,0.346865594387054,0.86303436756134,-0.27060467004776,0.441340714693069,0.855565011501312,-0.52653956413269,0.801656424999237,0.283024877309799,-0.713882029056549,0.360403180122375,0.60040158033371,-0.911553025245667,0.36151385307312,0.195905029773712,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.911553025245667,0.36151385307312,0.195905029773712,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.632999122142792,0.753636598587036,-0.177042424678802,\n-0.834402322769165,0.550801813602448,0.0197510607540607,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.350197345018387,0.671358823776245,-0.653176188468933,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.426684230566025,0.00725271692499518,-0.904371619224548,-0.426684230566025,0.00725271692499518,-0.904371619224548,0.324593335390091,0.033190730959177,-0.945271134376526,0.177267909049988,0.365930050611496,-0.91360342502594,-0.350197345018387,0.671358823776245,-0.653176188468933,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.968909800052643,-0.119059138000011,-0.21688424050808,0.809562027454376,0.57842743396759,-0.100154921412468,0.546093285083771,0.623855233192444,-0.559094548225403,0.870848119258881,0.464649528264999,0.160388246178627,0.981737434864044,-0.183587238192558,0.0498724691569805,0.975513935089111,-0.202585577964783,0.0856255367398262,0.908547043800354,0.339474141597748,0.243515089154243,0.797426402568817,0.177674129605293,0.57666540145874,0.592115879058838,-0.487801223993301,0.641442716121674,0.991389572620392,-0.125116944313049,0.0386327914893627,0.891313195228577,0.424902439117432,0.158173009753227,0.893702685832977,0.422671288251877,0.150480911135674,0.891313195228577,0.424902439117432,0.158173009753227,0.991389572620392,-0.125116944313049,0.0386327914893627,0.941741049289703,0.116148002445698,0.315647602081299,0.413176476955414,-0.602903485298157,0.682489991188049,-0.695957362651825,-0.547607123851776,0.464510262012482,-0.430106282234192,-0.644480228424072,-0.632181823253632,0.712531208992004,-0.546411454677582,-0.440152049064636,-0.360958158969879,-0.844728171825409,-0.395149976015091,\n0.595698297023773,-0.718034982681274,-0.359957337379456,0.450368106365204,-0.655529201030731,0.606176614761353,-0.668817758560181,-0.562513589859009,0.486067175865173,-0.350197345018387,0.671358823776245,-0.653176188468933,0.177267909049988,0.365930050611496,-0.91360342502594,0.139554411172867,0.707306206226349,-0.692995309829712,-0.320632964372635,0.735152721405029,-0.597281336784363,-0.320632964372635,0.735152721405029,-0.597281336784363,0.139554411172867,0.707306206226349,-0.692995309829712,0.143811240792274,0.67733633518219,-0.721480309963226,-0.300025343894959,0.704358756542206,-0.643322288990021,-0.144893556833267,0.857636988162994,0.493421375751495,-0.128903239965439,0.870382308959961,0.475203812122345,0.416522979736328,0.747589826583862,0.517318189144135,0.404268801212311,0.753554701805115,0.518384099006653,-0.128903239965439,0.870382308959961,0.475203812122345,-0.13026924431324,0.905642747879028,0.403535783290863,0.382025003433228,0.832321524620056,0.401618927717209,0.416522979736328,0.747589826583862,0.517318189144135,-0.576912403106689,0.718079209327698,0.389274090528488,-0.202111601829529,0.805501878261566,0.557061612606049,-0.0790780931711197,0.992485880851746,0.0933722108602524,-0.392663925886154,0.918741226196289,-0.0415882430970669,0.187374159693718,0.57430511713028,0.796909391880035,-0.407288640737534,0.570921063423157,0.712857007980347,-0.402498841285706,0.624280869960785,0.669528245925903,0.00418568449094892,0.628182590007782,0.778054714202881,-0.33124178647995,0.767114698886871,0.549375951290131,0.0206130910664797,0.755090355873108,0.655296623706818,0.00418568449094892,0.628182590007782,0.778054714202881,-0.402498841285706,0.624280869960785,0.669528245925903,-0.272203058004379,0.658502340316772,-0.701626777648926,0.12256808578968,0.664539575576782,-0.737132430076599,0.180026173591614,0.22968553006649,-0.956470131874084,-0.421845138072968,0.35173299908638,-0.835661768913269,-0.421845138072968,0.35173299908638,-0.835661768913269,0.180026173591614,0.22968553006649,-0.956470131874084,0.154303297400475,0.424244195222855,-0.892304539680481,\n-0.397901207208633,0.642866194248199,-0.654520928859711,-0.713882029056549,0.360403180122375,0.60040158033371,-0.27060467004776,0.441340714693069,0.855565011501312,-0.202111601829529,0.805501878261566,0.557061612606049,-0.576912403106689,0.718079209327698,0.389274090528488,0.128622680902481,0.604616940021515,-0.786062717437744,0.178336277604103,0.738516449928284,-0.650222778320313,0.525696158409119,0.742150247097015,-0.41576024889946,0.627528429031372,0.574077785015106,-0.525968432426453,-0.127702474594116,0.976085126399994,0.175925895571709,-0.410511583089828,0.907221853733063,0.0918080508708954,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.0790780931711197,0.992485880851746,0.0933722108602524,0.330185920000076,-0.571054816246033,0.751580774784088,-0.705251336097717,-0.583878993988037,0.402126729488373,-0.391103744506836,-0.641536116600037,-0.659900963306427,0.717249751091003,-0.62588095664978,-0.306309938430786,0.0794514417648315,0.574801087379456,-0.814426898956299,0.627380788326263,0.542527794837952,-0.558620572090149,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.0525061227381229,0.0318809561431408,-0.998111546039581,-0.15803237259388,0.792331874370575,0.589267313480377,0.390775859355927,0.856176912784576,0.338016718626022,0.382025003433228,0.832321524620056,0.401618927717209,-0.13026924431324,0.905642747879028,0.403535783290863,-0.300025343894959,0.704358756542206,-0.643322288990021,0.143811240792274,0.67733633518219,-0.721480309963226,0.121350355446339,0.714234948158264,-0.68930584192276,-0.305622786283493,0.734605431556702,-0.605763673782349,-0.144893556833267,0.857636988162994,0.493421375751495,-0.27060467004776,0.441340714693069,0.855565011501312,-0.713882029056549,0.360403180122375,0.60040158033371,-0.52653956413269,0.801656424999237,0.283024877309799,0.177267909049988,0.365930050611496,-0.91360342502594,0.0525061227381229,0.0318809561431408,-0.998111546039581,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.546093285083771,0.623855233192444,-0.559094548225403,0.198126867413521,0.0765141919255257,-0.977185368537903,\n0.648241341114044,-0.506932139396667,-0.568157494068146,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.147367149591446,-0.401798576116562,-0.903792500495911,-0.112518116831779,-0.874383687973022,-0.47200945019722,0.312811404466629,-0.918802380561829,-0.240730464458466,0.248996675014496,-0.917850255966187,0.309114098548889,-0.32362487912178,-0.91464102268219,0.242278203368187,0.671025335788727,-0.589844524860382,-0.449230968952179,0.412575602531433,-0.667341530323029,0.62002956867218,-0.596454918384552,-0.699760973453522,0.393161654472351,-0.459699749946594,-0.614600539207459,-0.641047835350037,-0.773792386054993,-0.604486167430878,-0.189319148659706,0.195960283279419,-0.584128737449646,-0.787650465965271,0.724370837211609,-0.668023765087128,0.170385256409645,-0.180837586522102,-0.611773490905762,0.770085096359253,-0.72308760881424,-0.507770538330078,-0.468309044837952,0.349896669387817,-0.784230947494507,-0.512400388717651,0.437470436096191,-0.700090229511261,0.564352095127106,-0.581261277198792,-0.682450115680695,0.443167269229889,0.326672673225403,-0.732156872749329,0.597688257694244,-0.308205217123032,-0.725507915019989,-0.615343630313873,0.147367149591446,-0.401798576116562,-0.903792500495911,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.671025335788727,-0.589844524860382,-0.449230968952179,-0.459699749946594,-0.614600539207459,-0.641047835350037,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.459699749946594,-0.614600539207459,-0.641047835350037,-0.596454918384552,-0.699760973453522,0.393161654472351,-0.303018301725388,-0.938679337501526,0.164502337574959,0.412575602531433,-0.667341530323029,0.62002956867218,0.918069958686829,-0.187106743454933,0.3494833111763,-0.303018301725388,-0.938679337501526,0.164502337574959,-0.596454918384552,-0.699760973453522,0.393161654472351,0.918069958686829,-0.187106743454933,0.3494833111763,0.412575602531433,-0.667341530323029,0.62002956867218,\n0.671025335788727,-0.589844524860382,-0.449230968952179,0.964107513427734,-0.248898878693581,-0.0924450159072876,-0.0517404824495316,-0.448792159557343,-0.892137050628662,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.0855752229690552,-0.285937607288361,-0.954419493675232,-0.311763912439346,-0.736566066741943,0.600228011608124,-0.370716333389282,-0.925935029983521,-0.0722066015005112,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.414378970861435,-0.48013111948967,0.773152112960815,0.739399373531342,-0.377425998449326,0.557528674602509,-0.311763912439346,-0.736566066741943,0.600228011608124,-0.414378970861435,-0.48013111948967,0.773152112960815,0.474026173353195,-0.576446056365967,0.665589272975922,0.627128839492798,0.0574354380369186,-0.776795089244843,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.887380838394165,-0.451604127883911,-0.0927843973040581,0.628591895103455,-0.444956034421921,-0.637876510620117,0.628591895103455,-0.444956034421921,-0.637876510620117,-0.0517404824495316,-0.448792159557343,-0.892137050628662,0.0855752229690552,-0.285937607288361,-0.954419493675232,0.627128839492798,0.0574354380369186,-0.776795089244843,-0.773792386054993,-0.604486167430878,-0.189319148659706,-0.180837586522102,-0.611773490905762,0.770085096359253,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.518468379974365,-0.848432958126068,0.106546200811863,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.180837586522102,-0.611773490905762,0.770085096359253,0.724370837211609,-0.668023765087128,0.170385256409645,0.106877602636814,-0.900658130645752,-0.421179473400116,0.518468379974365,-0.848432958126068,0.106546200811863,0.724370837211609,-0.668023765087128,0.170385256409645,0.195960283279419,-0.584128737449646,-0.787650465965271,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.106877602636814,-0.900658130645752,-0.421179473400116,0.195960283279419,-0.584128737449646,-0.787650465965271,\n-0.773792386054993,-0.604486167430878,-0.189319148659706,0.349896669387817,-0.784230947494507,-0.512400388717651,0.149650126695633,-0.977229058742523,-0.150426715612412,0.259535193443298,-0.932749152183533,0.250240802764893,0.437470436096191,-0.700090229511261,0.564352095127106,-0.72308760881424,-0.507770538330078,-0.468309044837952,-0.464242279529572,-0.87283843755722,-0.150440096855164,0.149650126695633,-0.977229058742523,-0.150426715612412,0.349896669387817,-0.784230947494507,-0.512400388717651,-0.581261277198792,-0.682450115680695,0.443167269229889,-0.32362487912178,-0.91464102268219,0.242278203368187,-0.464242279529572,-0.87283843755722,-0.150440096855164,-0.72308760881424,-0.507770538330078,-0.468309044837952,0.437470436096191,-0.700090229511261,0.564352095127106,0.259535193443298,-0.932749152183533,0.250240802764893,-0.32362487912178,-0.91464102268219,0.242278203368187,-0.581261277198792,-0.682450115680695,0.443167269229889,-0.810118317604065,-0.284595668315887,-0.512555956840515,-0.551329076290131,-0.707401514053345,-0.4422886967659,-0.63175368309021,-0.695993006229401,0.341293066740036,-0.94776064157486,-0.269029259681702,-0.171385675668716,0.248996675014496,-0.917850255966187,0.309114098548889,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.63175368309021,-0.695993006229401,0.341293066740036,0.438560783863068,-0.682490229606628,0.584697782993317,0.50744092464447,-0.861680567264557,0.00320711638778448,0.248996675014496,-0.917850255966187,0.309114098548889,0.438560783863068,-0.682490229606628,0.584697782993317,0.663442254066467,-0.730678737163544,-0.161099433898926,0.0872491523623466,-0.891694486141205,-0.444149285554886,0.50744092464447,-0.861680567264557,0.00320711638778448,0.663442254066467,-0.730678737163544,-0.161099433898926,0.165543153882027,-0.540197908878326,-0.825094938278198,-0.810118317604065,-0.284595668315887,-0.512555956840515,0.0872491523623466,-0.891694486141205,-0.444149285554886,0.165543153882027,-0.540197908878326,-0.825094938278198,-0.551329076290131,-0.707401514053345,-0.4422886967659,\n-0.445575803518295,0.0603601969778538,-0.89320707321167,0.198126867413521,0.0765141919255257,-0.977185368537903,0.147367149591446,-0.401798576116562,-0.903792500495911,-0.308205217123032,-0.725507915019989,-0.615343630313873,-0.308205217123032,-0.725507915019989,-0.615343630313873,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.445575803518295,0.0603601969778538,-0.89320707321167,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.311763912439346,-0.736566066741943,0.600228011608124,0.739399373531342,-0.377425998449326,0.557528674602509,0.964107513427734,-0.248898878693581,-0.0924450159072876,-0.259815841913223,-0.928046464920044,-0.266881018877029,0.149650126695633,-0.977229058742523,-0.150426715612412,0.518468379974365,-0.848432958126068,0.106546200811863,0.106877602636814,-0.900658130645752,-0.421179473400116,-0.370716333389282,-0.925935029983521,-0.0722066015005112,-0.311763912439346,-0.736566066741943,0.600228011608124,0.518468379974365,-0.848432958126068,0.106546200811863,0.149650126695633,-0.977229058742523,-0.150426715612412,-0.464242279529572,-0.87283843755722,-0.150440096855164,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.464242279529572,-0.87283843755722,-0.150440096855164,0.50744092464447,-0.861680567264557,0.00320711638778448,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.106877602636814,-0.900658130645752,-0.421179473400116,0.262460827827454,-0.84521484375,0.465538591146469,0.663442254066467,-0.730678737163544,-0.161099433898926,0.438560783863068,-0.682490229606628,0.584697782993317,-0.63175368309021,-0.695993006229401,0.341293066740036,-0.551329076290131,-0.707401514053345,-0.4422886967659,0.326672673225403,-0.732156872749329,0.597688257694244,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.648241341114044,-0.506932139396667,-0.568157494068146,0.262460827827454,-0.84521484375,0.465538591146469,0.262460827827454,-0.84521484375,0.465538591146469,\n0.33387279510498,-0.734721720218658,0.590519189834595,0.323404222726822,-0.738465547561646,0.591674208641052,0.326672673225403,-0.732156872749329,0.597688257694244,0.326672673225403,-0.732156872749329,0.597688257694244,0.323404222726822,-0.738465547561646,0.591674208641052,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.308205217123032,-0.725507915019989,-0.615343630313873,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.0872491523623466,-0.891694486141205,-0.444149285554886,0.33387279510498,-0.734721720218658,0.590519189834595,0.262460827827454,-0.84521484375,0.465538591146469,0.106877602636814,-0.900658130645752,-0.421179473400116,0.33387279510498,-0.734721720218658,0.590519189834595,-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.348949372768402,-0.852245092391968,0.389759749174118,0.323404222726822,-0.738465547561646,0.591674208641052,0.33387279510498,-0.734721720218658,0.590519189834595,0.0872491523623466,-0.891694486141205,-0.444149285554886,-0.810118317604065,-0.284595668315887,-0.512555956840515,-0.798132300376892,-0.595748007297516,0.0898284390568733,0.301147431135178,-0.680567443370819,0.667935729026794,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.478905022144318,-0.688271999359131,-0.544914305210114,0.598684668540955,-0.729470372200012,-0.330831676721573,0.296216726303101,-0.720275163650513,0.627263367176056,-0.75092750787735,-0.519762337207794,0.407375782728195,-0.420935481786728,-0.595206379890442,-0.684501767158508,0.593356251716614,-0.709651470184326,-0.379898846149445,0.310219675302505,-0.605204224586487,0.733138203620911,-0.69564962387085,-0.635027050971985,0.335875362157822,-0.338333308696747,-0.796955823898315,-0.500391840934753,0.522674977779388,-0.842709720134735,-0.129039421677589,-0.207811191678047,-0.962575137615204,-0.173964604735374,-0.306766450405121,-0.118458941578865,0.944384336471558,-0.181093856692314,-0.00969438999891281,0.983418047428131,0.261419922113419,-0.95404326915741,0.146496027708054,-0.306935518980026,-0.919691741466522,0.244862422347069,\n0.191650301218033,-0.911473155021667,0.363987505435944,0.389462053775787,-0.886311709880829,-0.250541061162949,-0.201402932405472,-0.92625367641449,-0.318576455116272,-0.40076744556427,-0.847734689712524,0.347464174032211,0.118260912597179,-0.832547545433044,0.541182935237885,0.262365132570267,-0.963967680931091,-0.0439422130584717,-0.207801997661591,-0.930255532264709,-0.302395343780518,-0.362296253442764,-0.902348458766937,0.233470991253853,0.230480119585991,-0.946770370006561,0.224732518196106,0.334644615650177,-0.86758428812027,-0.367845684289932,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.706917762756348,-0.104018487036228,0.699605226516724,0.192425221204758,-0.974552154541016,0.114980839192867,-0.395999372005463,-0.883323132991791,0.250847965478897,-0.211911574006081,-0.951958775520325,-0.221061065793037,0.314595818519592,-0.93869549036026,-0.140997156500816,0.148850917816162,-0.924228250980377,0.351632624864578,-0.112518116831779,-0.874383687973022,-0.47200945019722,-0.339713484048843,-0.93720954656601,0.0789492130279541,0.180372029542923,-0.916134834289551,0.357998490333557,0.312811404466629,-0.918802380561829,-0.240730464458466,-0.201402932405472,-0.92625367641449,-0.318576455116272,-0.362296253442764,-0.902348458766937,0.233470991253853,0.900666058063507,-0.271470785140991,0.339270144701004,0.956566870212555,-0.244721978902817,-0.15840108692646,0.191650301218033,-0.911473155021667,0.363987505435944,0.262365132570267,-0.963967680931091,-0.0439422130584717,-0.211911574006081,-0.951958775520325,-0.221061065793037,-0.395999372005463,-0.883323132991791,0.250847965478897,0.389462053775787,-0.886311709880829,-0.250541061162949,-0.200983807444572,-0.912257611751556,-0.356919497251511,-0.339713484048843,-0.93720954656601,0.0789492130279541,0.230480119585991,-0.946770370006561,0.224732518196106,-0.207811191678047,-0.962575137615204,-0.173964604735374,-0.40076744556427,-0.847734689712524,0.347464174032211,\n0.665187358856201,-0.279087334871292,0.692557573318481,0.812849104404449,-0.351107835769653,0.464757591485977,-0.295633107423782,-0.949930131435394,-0.10116221010685,0.192425221204758,-0.974552154541016,0.114980839192867,-0.339781731367111,-0.868737757205963,0.360337555408478,-0.958362400531769,-0.256493717432022,0.125509053468704,0.148850917816162,-0.924228250980377,0.351632624864578,0.314595818519592,-0.93869549036026,-0.140997156500816,-0.863033890724182,-0.335786253213882,-0.377385854721069,0.180372029542923,-0.916134834289551,0.357998490333557,0.326997041702271,-0.921505868434906,-0.209522947669029,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.931363523006439,-0.361005514860153,-0.0472965724766254,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.191650301218033,-0.911473155021667,0.363987505435944,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.192425221204758,-0.974552154541016,0.114980839192867,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.912856221199036,-0.241108059883118,0.329485028982162,0.124663800001144,-0.874086201190948,0.469502121210098,0.085636705160141,-0.288859754800797,0.95353364944458,-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.826135456562042,-0.335000514984131,0.453072637319565,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.826135456562042,-0.335000514984131,0.453072637319565,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.295633107423782,-0.949930131435394,-0.10116221010685,0.261419922113419,-0.95404326915741,0.146496027708054,0.645033359527588,-0.763978242874146,0.0164063423871994,0.261419922113419,-0.95404326915741,0.146496027708054,-0.181093856692314,-0.00969438999891281,0.983418047428131,\n0.085636705160141,-0.288859754800797,0.95353364944458,0.645033359527588,-0.763978242874146,0.0164063423871994,0.191650301218033,-0.911473155021667,0.363987505435944,-0.395999372005463,-0.883323132991791,0.250847965478897,-0.722061336040497,-0.559728622436523,0.406609505414963,0.415498226881027,-0.625033438205719,0.660828590393066,-0.395615994930267,-0.602470278739929,-0.693193674087524,-0.722061336040497,-0.559728622436523,0.406609505414963,-0.395999372005463,-0.883323132991791,0.250847965478897,-0.200983807444572,-0.912257611751556,-0.356919497251511,0.389462053775787,-0.886311709880829,-0.250541061162949,0.709003627300262,-0.541708946228027,-0.451514393091202,-0.395615994930267,-0.602470278739929,-0.693193674087524,-0.200983807444572,-0.912257611751556,-0.356919497251511,0.389462053775787,-0.886311709880829,-0.250541061162949,0.191650301218033,-0.911473155021667,0.363987505435944,0.415498226881027,-0.625033438205719,0.660828590393066,0.709003627300262,-0.541708946228027,-0.451514393091202,0.230480119585991,-0.946770370006561,0.224732518196106,-0.339713484048843,-0.93720954656601,0.0789492130279541,-0.705482065677643,-0.662965536117554,0.250542938709259,0.466174304485321,-0.668626964092255,0.579326808452606,-0.282899647951126,-0.764817118644714,-0.578811287879944,-0.705482065677643,-0.662965536117554,0.250542938709259,-0.339713484048843,-0.93720954656601,0.0789492130279541,-0.112518116831779,-0.874383687973022,-0.47200945019722,0.334644615650177,-0.86758428812027,-0.367845684289932,0.557026505470276,-0.731577336788177,-0.393085300922394,-0.282899647951126,-0.764817118644714,-0.578811287879944,-0.112518116831779,-0.874383687973022,-0.47200945019722,0.334644615650177,-0.86758428812027,-0.367845684289932,0.230480119585991,-0.946770370006561,0.224732518196106,0.466174304485321,-0.668626964092255,0.579326808452606,0.557026505470276,-0.731577336788177,-0.393085300922394,-0.384443581104279,-0.766654908657074,-0.514240622520447,-0.666895866394043,-0.560438930988312,0.491078555583954,-0.339781731367111,-0.868737757205963,0.360337555408478,\n-0.211911574006081,-0.951958775520325,-0.221061065793037,0.685397624969482,-0.694671988487244,-0.218313813209534,-0.384443581104279,-0.766654908657074,-0.514240622520447,-0.211911574006081,-0.951958775520325,-0.221061065793037,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.317059487104416,-0.547120809555054,0.774681925773621,0.685397624969482,-0.694671988487244,-0.218313813209534,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.118260912597179,-0.832547545433044,0.541182935237885,0.317059487104416,-0.547120809555054,0.774681925773621,0.118260912597179,-0.832547545433044,0.541182935237885,-0.339781731367111,-0.868737757205963,0.360337555408478,-0.666895866394043,-0.560438930988312,0.491078555583954,0.610170483589172,-0.773055613040924,0.17342720925808,0.812849104404449,-0.351107835769653,0.464757591485977,0.441097766160965,0.233705207705498,0.866495609283447,0.343847304582596,-0.196072638034821,0.918327033519745,0.441097766160965,0.233705207705498,0.866495609283447,-0.306766450405121,-0.118458941578865,0.944384336471558,-0.545982420444489,-0.58450835943222,0.600210964679718,0.343847304582596,-0.196072638034821,0.918327033519745,-0.207811191678047,-0.962575137615204,-0.173964604735374,-0.314526081085205,-0.770808577537537,-0.554010331630707,-0.545982420444489,-0.58450835943222,0.600210964679718,-0.306766450405121,-0.118458941578865,0.944384336471558,0.610170483589172,-0.773055613040924,0.17342720925808,-0.314526081085205,-0.770808577537537,-0.554010331630707,-0.207811191678047,-0.962575137615204,-0.173964604735374,0.812849104404449,-0.351107835769653,0.464757591485977,0.712531208992004,-0.546411454677582,-0.440152049064636,0.956566870212555,-0.244721978902817,-0.15840108692646,0.810173988342285,-0.314327269792557,0.494789332151413,0.413176476955414,-0.602903485298157,0.682489991188049,0.810173988342285,-0.314327269792557,0.494789332151413,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.695957362651825,-0.547607123851776,0.464510262012482,0.413176476955414,-0.602903485298157,0.682489991188049,\n-0.306935518980026,-0.919691741466522,0.244862422347069,-0.201402932405472,-0.92625367641449,-0.318576455116272,-0.430106282234192,-0.644480228424072,-0.632181823253632,-0.695957362651825,-0.547607123851776,0.464510262012482,0.712531208992004,-0.546411454677582,-0.440152049064636,-0.430106282234192,-0.644480228424072,-0.632181823253632,-0.201402932405472,-0.92625367641449,-0.318576455116272,0.956566870212555,-0.244721978902817,-0.15840108692646,-0.668817758560181,-0.562513589859009,0.486067175865173,0.450368106365204,-0.655529201030731,0.606176614761353,0.900666058063507,-0.271470785140991,0.339270144701004,-0.362296253442764,-0.902348458766937,0.233470991253853,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.360958158969879,-0.844728171825409,-0.395149976015091,-0.668817758560181,-0.562513589859009,0.486067175865173,-0.362296253442764,-0.902348458766937,0.233470991253853,-0.128298670053482,-0.92551976442337,-0.356304109096527,0.9074946641922,-0.352809637784958,-0.227988600730896,0.595698297023773,-0.718034982681274,-0.359957337379456,-0.360958158969879,-0.844728171825409,-0.395149976015091,0.595698297023773,-0.718034982681274,-0.359957337379456,0.9074946641922,-0.352809637784958,-0.227988600730896,0.900666058063507,-0.271470785140991,0.339270144701004,0.450368106365204,-0.655529201030731,0.606176614761353,0.330185920000076,-0.571054816246033,0.751580774784088,0.717249751091003,-0.62588095664978,-0.306309938430786,0.939882814884186,-0.341329634189606,0.010694270953536,0.665187358856201,-0.279087334871292,0.692557573318481,-0.40076744556427,-0.847734689712524,0.347464174032211,-0.705251336097717,-0.583878993988037,0.402126729488373,0.330185920000076,-0.571054816246033,0.751580774784088,0.665187358856201,-0.279087334871292,0.692557573318481,-0.705251336097717,-0.583878993988037,0.402126729488373,-0.40076744556427,-0.847734689712524,0.347464174032211,-0.207801997661591,-0.930255532264709,-0.302395343780518,-0.391103744506836,-0.641536116600037,-0.659900963306427,0.717249751091003,-0.62588095664978,-0.306309938430786,\n-0.391103744506836,-0.641536116600037,-0.659900963306427,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.939882814884186,-0.341329634189606,0.010694270953536,-0.0837006717920303,-0.567485928535461,0.819117784500122,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.623616337776184,-0.765475332736969,-0.158588007092476,-0.970349133014679,-0.239411488175392,0.0332369618117809,0.192425221204758,-0.974552154541016,0.114980839192867,0.668955624103546,-0.737108647823334,-0.0957559272646904,-0.623616337776184,-0.765475332736969,-0.158588007092476,0.192425221204758,-0.974552154541016,0.114980839192867,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.0837006717920303,-0.567485928535461,0.819117784500122,0.668955624103546,-0.737108647823334,-0.0957559272646904,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.863033890724182,-0.335786253213882,-0.377385854721069,-0.478905022144318,-0.688271999359131,-0.544914305210114,0.598684668540955,-0.729470372200012,-0.330831676721573,-0.478905022144318,-0.688271999359131,-0.544914305210114,-0.863033890724182,-0.335786253213882,-0.377385854721069,0.314595818519592,-0.93869549036026,-0.140997156500816,0.301147431135178,-0.680567443370819,0.667935729026794,0.124663800001144,-0.874086201190948,0.469502121210098,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.420935481786728,-0.595206379890442,-0.684501767158508,-0.75092750787735,-0.519762337207794,0.407375782728195,0.593356251716614,-0.709651470184326,-0.379898846149445,-0.420935481786728,-0.595206379890442,-0.684501767158508,-0.794416427612305,-0.305552929639816,-0.524919033050537,0.326997041702271,-0.921505868434906,-0.209522947669029,0.148850917816162,-0.924228250980377,0.351632624864578,0.296216726303101,-0.720275163650513,0.627263367176056,\n0.593356251716614,-0.709651470184326,-0.379898846149445,0.326997041702271,-0.921505868434906,-0.209522947669029,-0.75092750787735,-0.519762337207794,0.407375782728195,0.296216726303101,-0.720275163650513,0.627263367176056,0.148850917816162,-0.924228250980377,0.351632624864578,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.338333308696747,-0.796955823898315,-0.500391840934753,-0.69564962387085,-0.635027050971985,0.335875362157822,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.68010026216507,-0.471441000699997,-0.561433076858521,0.312811404466629,-0.918802380561829,-0.240730464458466,0.522674977779388,-0.842709720134735,-0.129039421677589,-0.338333308696747,-0.796955823898315,-0.500391840934753,-0.68010026216507,-0.471441000699997,-0.561433076858521,0.522674977779388,-0.842709720134735,-0.129039421677589,0.312811404466629,-0.918802380561829,-0.240730464458466,0.180372029542923,-0.916134834289551,0.357998490333557,0.310219675302505,-0.605204224586487,0.733138203620911,-0.69564962387085,-0.635027050971985,0.335875362157822,0.310219675302505,-0.605204224586487,0.733138203620911,0.180372029542923,-0.916134834289551,0.357998490333557,-0.931363523006439,-0.361005514860153,-0.0472965724766254,0.259535193443298,-0.932749152183533,0.250240802764893,-0.303018301725388,-0.938679337501526,0.164502337574959,-0.128298670053482,-0.92551976442337,-0.356304109096527,0.334644615650177,-0.86758428812027,-0.367845684289932,0.918069958686829,-0.187106743454933,0.3494833111763,0.9074946641922,-0.352809637784958,-0.227988600730896,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.303018301725388,-0.938679337501526,0.164502337574959,0.956566870212555,-0.244721978902817,-0.15840108692646,0.900666058063507,-0.271470785140991,0.339270144701004,0.638639688491821,0.766668796539307,0.0660171657800674,0.658155202865601,0.750174701213837,0.0637934505939484,-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.15803237259388,0.792331874370575,0.589267313480377,-0.599858164787292,0.75833535194397,0.255142569541931,\n-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.599858164787292,0.75833535194397,0.255142569541931,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.863033890724182,-0.335786253213882,-0.377385854721069,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.816486001014709,0.512708961963654,0.265480846166611,-0.909857094287872,0.391187280416489,0.138320609927177,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.968974888324738,0.149660646915436,0.196696102619171,-0.660224080085754,0.688790798187256,0.299451798200607,-0.816486001014709,0.512708961963654,0.265480846166611,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.33124178647995,0.767114698886871,0.549375951290131,-0.563141465187073,0.729207098484039,0.388752728700638,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.00761284260079265,0.965830504894257,-0.259062647819519,0.261382073163986,0.943598508834839,-0.203227162361145,-0.00761284260079265,0.965830504894257,-0.259062647819519,-0.049139030277729,0.993503928184509,-0.10264165699482,0.505573332309723,0.856702566146851,0.102256514132023,0.413430035114288,0.428488910198212,0.803413271903992,0.158631011843681,0.588066816329956,0.793103754520416,0.520070433616638,0.75630134344101,0.396906822919846,0.941741049289703,0.116148002445698,0.315647602081299,0.0206130910664797,0.755090355873108,0.655296623706818,0.158631011843681,0.588066816329956,0.793103754520416,0.229550704360008,0.575565576553345,0.784876227378845,0.00418568449094892,0.628182590007782,0.778054714202881,\n0.261382073163986,0.943598508834839,-0.203227162361145,0.522960782051086,0.842813670635223,-0.127189323306084,0.158631011843681,0.588066816329956,0.793103754520416,0.0206130910664797,0.755090355873108,0.655296623706818,-0.00761284260079265,0.965830504894257,-0.259062647819519,0.261382073163986,0.943598508834839,-0.203227162361145,0.0206130910664797,0.755090355873108,0.655296623706818,-0.33124178647995,0.767114698886871,0.549375951290131,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.64732962846756,0.721940577030182,-0.244471192359924,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.00761284260079265,0.965830504894257,-0.259062647819519,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.049139030277729,0.993503928184509,-0.10264165699482,0.980522811412811,0.123100526630878,0.153040006756783,0.894985616207123,0.383079379796982,0.228584766387939,0.780855357646942,0.547496914863586,0.30085226893425,0.962031662464142,0.166659101843834,0.216147840023041,0.980522811412811,0.123100526630878,0.153040006756783,0.941741049289703,0.116148002445698,0.315647602081299,0.764615535736084,0.640312492847443,0.0732326954603195,0.894985616207123,0.383079379796982,0.228584766387939,0.916947364807129,0.362371891736984,0.167015478014946,0.826885938644409,0.48306405544281,0.287938833236694,0.796578645706177,0.576386570930481,0.182321041822433,0.847357213497162,0.513431668281555,0.135549768805504,0.703840851783752,0.696332156658173,0.140461936593056,0.729536890983582,0.676141858100891,0.102995507419109,0.847357213497162,0.513431668281555,0.135549768805504,0.796578645706177,0.576386570930481,0.182321041822433,0.819103598594666,0.554179012775421,0.148171901702881,0.658155202865601,0.750174701213837,0.0637934505939484,\n0.729536890983582,0.676141858100891,0.102995507419109,0.703840851783752,0.696332156658173,0.140461936593056,0.764663100242615,0.188213542103767,0.616332709789276,0.854411005973816,0.0699176639318466,0.514872193336487,0.597852408885956,0.634572505950928,0.489785879850388,0.614538609981537,0.667141020298004,0.421028733253479,0.916947364807129,0.362371891736984,0.167015478014946,0.893702685832977,0.422671288251877,0.150480911135674,0.941741049289703,0.116148002445698,0.315647602081299,0.980522811412811,0.123100526630878,0.153040006756783,0.780855357646942,0.547496914863586,0.30085226893425,0.597852408885956,0.634572505950928,0.489785879850388,0.854411005973816,0.0699176639318466,0.514872193336487,0.962031662464142,0.166659101843834,0.216147840023041,0.227211803197861,0.921236932277679,0.315748870372772,0.311181455850601,0.925608515739441,0.215441450476646,0.614538609981537,0.667141020298004,0.421028733253479,0.597852408885956,0.634572505950928,0.489785879850388,0.227211803197861,0.921236932277679,0.315748870372772,0.505573332309723,0.856702566146851,0.102256514132023,-0.049139030277729,0.993503928184509,-0.10264165699482,-0.127702474594116,0.976085126399994,0.175925895571709,-0.127702474594116,0.976085126399994,0.175925895571709,-0.049139030277729,0.993503928184509,-0.10264165699482,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.410511583089828,0.907221853733063,0.0918080508708954,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.410511583089828,0.907221853733063,0.0918080508708954,0.826885938644409,0.48306405544281,0.287938833236694,0.916947364807129,0.362371891736984,0.167015478014946,0.962031662464142,0.166659101843834,0.216147840023041,0.854411005973816,0.0699176639318466,0.514872193336487,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.64732962846756,0.721940577030182,-0.244471192359924,\n-0.905105233192444,0.409709483385086,-0.113677680492401,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.64732962846756,0.721940577030182,-0.244471192359924,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.709426164627075,0.694045186042786,-0.1225391253829,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.709426164627075,0.694045186042786,-0.1225391253829,-0.794416427612305,-0.305552929639816,-0.524919033050537,\n-0.745954036712646,0.638815999031067,-0.188326075673103,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.816486001014709,0.512708961963654,0.265480846166611,-0.968974888324738,0.149660646915436,0.196696102619171,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.563141465187073,0.729207098484039,0.388752728700638,-0.660224080085754,0.688790798187256,0.299451798200607,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.968974888324738,0.149660646915436,0.196696102619171,-0.834402322769165,0.550801813602448,0.0197510607540607,0.658155202865601,0.750174701213837,0.0637934505939484,0.819103598594666,0.554179012775421,0.148171901702881,0.810173988342285,-0.314327269792557,0.494789332151413,0.956566870212555,-0.244721978902817,-0.15840108692646,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.785715341567993,0.180996224284172,0.591516494750977,\n-0.699552893638611,0.686573624610901,0.19809702038765,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.699552893638611,0.686573624610901,0.19809702038765,-0.802868485450745,0.579959869384766,0.138017445802689,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.305637359619141,0.797389090061188,-0.520342588424683,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.397901207208633,0.642866194248199,-0.654520928859711,-0.397901207208633,0.642866194248199,-0.654520928859711,0.154303297400475,0.424244195222855,-0.892304539680481,0.133048385381699,0.622710466384888,-0.771057546138763,-0.305637359619141,0.797389090061188,-0.520342588424683,0.133048385381699,0.622710466384888,-0.771057546138763,0.154303297400475,0.424244195222855,-0.892304539680481,0.15365432202816,0.571211695671082,-0.806292474269867,0.193036586046219,0.594731748104095,-0.780404388904572,0.239434629678726,0.547067284584045,-0.802115023136139,0.160101726651192,0.546482443809509,-0.822024524211884,0.192081093788147,0.0805686637759209,-0.978066265583038,0.324593335390091,0.033190730959177,-0.945271134376526,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.785715341567993,0.180996224284172,0.591516494750977,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.699552893638611,0.686573624610901,0.19809702038765,-0.785715341567993,0.180996224284172,0.591516494750977,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.802868485450745,0.579959869384766,0.138017445802689,0.72310745716095,0.620889782905579,0.302673995494843,0.738506376743317,0.594660043716431,0.317785710096359,0.596383929252625,0.731881856918335,0.329659104347229,0.613771736621857,0.718874037265778,0.326349973678589,0.878546118736267,0.378491014242172,0.291378289461136,0.738506376743317,0.594660043716431,0.317785710096359,0.72310745716095,0.620889782905579,0.302673995494843,0.855198323726654,0.434896290302277,0.281959295272827,\n0.908547043800354,0.339474141597748,0.243515089154243,0.797426402568817,0.177674129605293,0.57666540145874,0.878546118736267,0.378491014242172,0.291378289461136,0.855198323726654,0.434896290302277,0.281959295272827,0.797426402568817,0.177674129605293,0.57666540145874,0.908547043800354,0.339474141597748,0.243515089154243,0.975513935089111,-0.202585577964783,0.0856255367398262,0.543871879577637,-0.524204134941101,0.655296385288239,0.494092851877213,0.035261906683445,0.868693768978119,0.633758366107941,-0.479115188121796,0.607288181781769,0.970879018306732,0.17382837831974,0.164856374263763,0.599660396575928,0.629723131656647,0.493817895650864,0.814328134059906,-0.0162655059248209,0.580176770687103,0.807652294635773,0.443565875291824,0.388519138097763,0.910823285579681,0.270006626844406,0.312245815992355,0.996930718421936,0.0329510122537613,0.0710170343518257,0.178336277604103,0.738516449928284,-0.650222778320313,0.390601873397827,0.504608035087585,-0.769935667514801,0.605724632740021,0.555329561233521,-0.569830477237701,0.525696158409119,0.742150247097015,-0.41576024889946,0.605724632740021,0.555329561233521,-0.569830477237701,0.859436631202698,0.509184420108795,0.0458242334425449,0.723603904247284,0.683222591876984,0.0980009809136391,0.525696158409119,0.742150247097015,-0.41576024889946,0.654246509075165,0.624168276786804,0.427054405212402,0.762879073619843,0.502556324005127,0.406758666038513,0.807652294635773,0.443565875291824,0.388519138097763,0.599660396575928,0.629723131656647,0.493817895650864,0.599660396575928,0.629723131656647,0.493817895650864,0.807652294635773,0.443565875291824,0.388519138097763,0.814328134059906,-0.0162655059248209,0.580176770687103,0.494092851877213,0.035261906683445,0.868693768978119,0.633758366107941,-0.479115188121796,0.607288181781769,0.494092851877213,0.035261906683445,0.868693768978119,0.814328134059906,-0.0162655059248209,0.580176770687103,0.655400395393372,-0.538768291473389,0.52931934595108,0.0525061227381229,0.0318809561431408,-0.998111546039581,0.192081093788147,0.0805686637759209,-0.978066265583038,\n0.160101726651192,0.546482443809509,-0.822024524211884,0.0794514417648315,0.574801087379456,-0.814426898956299,0.160101726651192,0.546482443809509,-0.822024524211884,0.15365432202816,0.571211695671082,-0.806292474269867,0.128622680902481,0.604616940021515,-0.786062717437744,0.0794514417648315,0.574801087379456,-0.814426898956299,-0.414378970861435,-0.48013111948967,0.773152112960815,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.0517404824495316,-0.448792159557343,-0.892137050628662,0.628591895103455,-0.444956034421921,-0.637876510620117,0.887380838394165,-0.451604127883911,-0.0927843973040581,0.474026173353195,-0.576446056365967,0.665589272975922,-0.551329076290131,-0.707401514053345,-0.4422886967659,0.165543153882027,-0.540197908878326,-0.825094938278198,0.663442254066467,-0.730678737163544,-0.161099433898926,-0.348949372768402,-0.852245092391968,0.389759749174118,-0.620602905750275,-0.69584184885025,-0.361463844776154,0.323404222726822,-0.738465547561646,0.591674208641052,0.343847304582596,-0.196072638034821,0.918327033519745,-0.545982420444489,-0.58450835943222,0.600210964679718,-0.314526081085205,-0.770808577537537,-0.554010331630707,0.610170483589172,-0.773055613040924,0.17342720925808,-0.0837006717920303,-0.567485928535461,0.819117784500122,-0.623616337776184,-0.765475332736969,-0.158588007092476,0.668955624103546,-0.737108647823334,-0.0957559272646904,0.598684668540955,-0.729470372200012,-0.330831676721573,0.314595818519592,-0.93869549036026,-0.140997156500816,0.124663800001144,-0.874086201190948,0.469502121210098,0.301147431135178,-0.680567443370819,0.667935729026794,-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.810118317604065,-0.284595668315887,-0.512555956840515,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.885131180286407,0.0417930334806442,-0.4634610414505,0.627128839492798,0.0574354380369186,-0.776795089244843,0.0855752229690552,-0.285937607288361,-0.954419493675232,0.648241341114044,-0.506932139396667,-0.568157494068146,0.198126867413521,0.0765141919255257,-0.977185368537903,\n0.969612717628479,0.0529157817363739,0.238853618502617,0.918069958686829,-0.187106743454933,0.3494833111763,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.887380838394165,-0.451604127883911,-0.0927843973040581,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.739399373531342,-0.377425998449326,0.557528674602509,0.474026173353195,-0.576446056365967,0.665589272975922,-0.647231996059418,0.709673702716827,-0.278305560350418,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.702043056488037,0.707515060901642,-0.0809816271066666,0.198126867413521,0.0765141919255257,-0.977185368537903,0.121350355446339,0.714234948158264,-0.68930584192276,0.462542772293091,0.739023745059967,-0.489793956279755,0.627128839492798,0.0574354380369186,-0.776795089244843,0.633758366107941,-0.479115188121796,0.607288181781769,0.655400395393372,-0.538768291473389,0.52931934595108,0.592115879058838,-0.487801223993301,0.641442716121674,0.543871879577637,-0.524204134941101,0.655296385288239,0.970879018306732,0.17382837831974,0.164856374263763,0.633758366107941,-0.479115188121796,0.607288181781769,0.543871879577637,-0.524204134941101,0.655296385288239,0.975513935089111,-0.202585577964783,0.0856255367398262,0.627528429031372,0.574077785015106,-0.525968432426453,0.906324923038483,0.41602036356926,-0.0741765573620796,0.926415085792542,0.366669327020645,-0.085490919649601,0.627380788326263,0.542527794837952,-0.558620572090149,0.128622680902481,0.604616940021515,-0.786062717437744,0.627528429031372,0.574077785015106,-0.525968432426453,0.627380788326263,0.542527794837952,-0.558620572090149,0.0794514417648315,0.574801087379456,-0.814426898956299,0.15365432202816,0.571211695671082,-0.806292474269867,0.154303297400475,0.424244195222855,-0.892304539680481,0.178336277604103,0.738516449928284,-0.650222778320313,0.128622680902481,0.604616940021515,-0.786062717437744,0.193036586046219,0.594731748104095,-0.780404388904572,0.15365432202816,0.571211695671082,-0.806292474269867,0.160101726651192,0.546482443809509,-0.822024524211884,\n0.239434629678726,0.547067284584045,-0.802115023136139,-0.393562406301498,0.580699265003204,-0.71266895532608,0.193036586046219,0.594731748104095,-0.780404388904572,0.239434629678726,0.547067284584045,-0.802115023136139,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.906213700771332,0.328242093324661,-0.266521811485291,-0.921413004398346,-0.24597555398941,0.300822287797928,0.969612717628479,0.0529157817363739,0.238853618502617,0.632348001003265,0.720907807350159,0.283598184585571,0.613771736621857,0.718874037265778,0.326349973678589,0.918069958686829,-0.187106743454933,0.3494833111763,0.398143172264099,0.565787017345428,-0.722057580947876,0.633863806724548,0.397778630256653,-0.663316547870636,0.62652999162674,-0.0954440459609032,-0.773531258106232,0.432219922542572,0.089619405567646,-0.897303879261017,0.633863806724548,0.397778630256653,-0.663316547870636,0.97103625535965,0.0917741134762764,-0.2206040173769,0.886820495128632,-0.356388479471207,-0.294171094894409,0.62652999162674,-0.0954440459609032,-0.773531258106232,-0.458068251609802,-0.324115723371506,-0.827721238136292,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.12256808578968,0.664539575576782,-0.737132430076599,-0.272203058004379,0.658502340316772,-0.701626777648926,-0.656110644340515,0.732090890407562,-0.183198615908623,\n-0.308493584394455,0.950873613357544,0.02590411901474,-0.0896633565425873,0.986825108528137,-0.134672433137894,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.576912403106689,0.718079209327698,0.389274090528488,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.664968252182007,0.74531364440918,0.0482159554958344,0.320559591054916,0.729658484458923,0.6040198802948,0.614538609981537,0.667141020298004,0.421028733253479,0.311181455850601,0.925608515739441,0.215441450476646,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.599858164787292,0.75833535194397,0.255142569541931,0.941741049289703,0.116148002445698,0.315647602081299,0.991389572620392,-0.125116944313049,0.0386327914893627,0.996930718421936,0.0329510122537613,0.0710170343518257,-0.861413061618805,0.450139373540878,0.235249027609825,-0.659538865089417,0.541105389595032,0.521740794181824,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.861413061618805,0.450139373540878,0.235249027609825,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.909857094287872,0.391187280416489,0.138320609927177,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.410511583089828,0.907221853733063,0.0918080508708954,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.906213700771332,0.328242093324661,-0.266521811485291,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.15803237259388,0.792331874370575,0.589267313480377,\n-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.306766450405121,-0.118458941578865,0.944384336471558,0.819103598594666,0.554179012775421,0.148171901702881,0.939882814884186,-0.341329634189606,0.010694270953536,0.810173988342285,-0.314327269792557,0.494789332151413,0.748181462287903,0.587628960609436,0.308085650205612,0.812849104404449,-0.351107835769653,0.464757591485977,0.665187358856201,-0.279087334871292,0.692557573318481,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.258335679769516,0.945306420326233,-0.199144259095192,0.158631011843681,0.588066816329956,0.793103754520416,0.413430035114288,0.428488910198212,0.803413271903992,0.229550704360008,0.575565576553345,0.784876227378845,0.520070433616638,0.75630134344101,0.396906822919846,0.158631011843681,0.588066816329956,0.793103754520416,0.522960782051086,0.842813670635223,-0.127189323306084,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.968974888324738,0.149660646915436,0.196696102619171,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.64732962846756,0.721940577030182,-0.244471192359924,-0.669141829013824,0.742036163806915,-0.0403926707804203,0.980522811412811,0.123100526630878,0.153040006756783,0.962031662464142,0.166659101843834,0.216147840023041,0.916947364807129,0.362371891736984,0.167015478014946,0.780855357646942,0.547496914863586,0.30085226893425,0.894985616207123,0.383079379796982,0.228584766387939,0.505573332309723,0.856702566146851,0.102256514132023,0.894985616207123,0.383079379796982,0.228584766387939,0.764615535736084,0.640312492847443,0.0732326954603195,0.505573332309723,0.856702566146851,0.102256514132023,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.258335679769516,0.945306420326233,-0.199144259095192,\n-0.957430243492126,0.286320626735687,0.0367132313549519,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.802868485450745,0.579959869384766,0.138017445802689,0.192081093788147,0.0805686637759209,-0.978066265583038,0.177267909049988,0.365930050611496,-0.91360342502594,0.324593335390091,0.033190730959177,-0.945271134376526,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.858353078365326,-0.409084886312485,0.309644252061844,0.918069958686829,-0.187106743454933,0.3494833111763,0.613771736621857,0.718874037265778,0.326349973678589,0.596383929252625,0.731881856918335,0.329659104347229,0.592115879058838,-0.487801223993301,0.641442716121674,0.797426402568817,0.177674129605293,0.57666540145874,0.543871879577637,-0.524204134941101,0.655296385288239,0.177267909049988,0.365930050611496,-0.91360342502594,0.192081093788147,0.0805686637759209,-0.978066265583038,0.0525061227381229,0.0318809561431408,-0.998111546039581,0.970879018306732,0.17382837831974,0.164856374263763,0.947628259658813,0.256551682949066,0.190215542912483,0.933142781257629,0.297380536794662,0.202013194561005,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.906213700771332,0.328242093324661,-0.266521811485291,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.99501496553421,0.0992259010672569,-0.00997005868703127,0.655400395393372,-0.538768291473389,0.52931934595108,0.991389572620392,-0.125116944313049,0.0386327914893627,0.592115879058838,-0.487801223993301,0.641442716121674,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.914847433567047,-0.40378075838089,0.00391693273559213,0.985846102237701,-0.106943093240261,0.129114612936974,0.26786082983017,0.938322722911835,-0.218634366989136,0.34263151884079,0.695380985736847,-0.631703197956085,0.0982041954994202,0.744845330715179,-0.659970700740814,0.149676010012627,0.966882228851318,-0.20672644674778,0.0982041954994202,0.744845330715179,-0.659970700740814,\n0.34263151884079,0.695380985736847,-0.631703197956085,0.341541588306427,0.10033044219017,-0.934496164321899,0.00497482251375914,0.164960786700249,-0.986287593841553,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,0.377974539995193,-0.0538287870585918,-0.924249827861786,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.00533884158357978,0.0413248725235462,-0.999131500720978,0.00533884158357978,0.0413248725235462,-0.999131500720978,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.282903432846069,-0.614905893802643,-0.736109018325806,-0.0723040401935577,-0.562818825244904,-0.823411822319031,-0.0723040401935577,-0.562818825244904,-0.823411822319031,0.282903432846069,-0.614905893802643,-0.736109018325806,0.383173555135727,-0.262150347232819,-0.885694801807404,-0.03597491979599,-0.262611389160156,-0.964230835437775,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.383173555135727,-0.262150347232819,-0.885694801807404,0.398143172264099,0.565787017345428,-0.722057580947876,0.12256808578968,0.664539575576782,-0.737132430076599,0.12256808578968,0.664539575576782,-0.737132430076599,0.398143172264099,0.565787017345428,-0.722057580947876,0.432219922542572,0.089619405567646,-0.897303879261017,0.180026173591614,0.22968553006649,-0.956470131874084,0.154303297400475,0.424244195222855,-0.892304539680481,0.180026173591614,0.22968553006649,-0.956470131874084,0.432219922542572,0.089619405567646,-0.897303879261017,0.390601873397827,0.504608035087585,-0.769935667514801,0.178336277604103,0.738516449928284,-0.650222778320313,0.154303297400475,0.424244195222855,-0.892304539680481,0.390601873397827,0.504608035087585,-0.769935667514801,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.850299119949341,0.0502048023045063,0.523899674415588,-0.976002871990204,0.137454673647881,0.168892458081245,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.850299119949341,0.0502048023045063,0.523899674415588,\n-0.878947675228119,-0.045041237026453,0.47478649020195,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.141525283455849,-0.0639705210924149,0.987865567207336,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.147625342011452,-0.322125315666199,0.935116052627563,0.503679692745209,-0.333046585321426,0.797111511230469,0.538123428821564,-0.0776133164763451,0.839285016059875,-0.141525283455849,-0.0639705210924149,0.987865567207336,0.717245042324066,0.0185855161398649,0.696573138237,0.538123428821564,-0.0776133164763451,0.839285016059875,0.503679692745209,-0.333046585321426,0.797111511230469,0.76161140203476,-0.261901050806046,0.592752873897552,0.949140191078186,-0.201623901724815,0.241827890276909,0.961548805236816,-0.0192979723215103,0.273955345153809,0.717245042324066,0.0185855161398649,0.696573138237,0.76161140203476,-0.261901050806046,0.592752873897552,0.949140191078186,-0.201623901724815,0.241827890276909,0.941822648048401,-0.153352871537209,-0.299086838960648,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.961548805236816,-0.0192979723215103,0.273955345153809,-0.505583822727203,0.0150259397923946,-0.862646639347076,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.522813379764557,0.17926724255085,-0.833384335041046,0.00497482251375914,0.164960786700249,-0.986287593841553,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,-0.505583822727203,0.0150259397923946,-0.862646639347076,0.341541588306427,0.10033044219017,-0.934496164321899,0.377974539995193,-0.0538287870585918,-0.924249827861786,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,0.00497482251375914,0.164960786700249,-0.986287593841553,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.70794689655304,-0.166302517056465,-0.686407029628754,0.377974539995193,-0.0538287870585918,-0.924249827861786,0.341541588306427,0.10033044219017,-0.934496164321899,\n-0.903742134571075,0.0408328101038933,0.426125347614288,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.903742134571075,0.0408328101038933,0.426125347614288,-0.697896897792816,0.111968666315079,0.707391619682312,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.482705980539322,0.267842918634415,-0.833819627761841,-0.482705980539322,0.267842918634415,-0.833819627761841,-0.244611799716949,0.194430083036423,-0.949927389621735,0.505280077457428,-0.213028207421303,-0.836248159408569,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.861413061618805,0.450139373540878,0.235249027609825,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.802868485450745,0.579959869384766,0.138017445802689,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.659538865089417,0.541105389595032,0.521740794181824,-0.407288640737534,0.570921063423157,0.712857007980347,0.0511878095567226,-0.230872601270676,0.971636593341827,-0.213112205266953,-0.0906345173716545,0.972814738750458,0.187374159693718,0.57430511713028,0.796909391880035,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.985846102237701,-0.106943093240261,0.129114612936974,0.846594989299774,-0.529064953327179,0.0580276139080524,0.867540001869202,-0.48896712064743,-0.0910244435071945,0.914847433567047,-0.40378075838089,0.00391693273559213,0.886820495128632,-0.356388479471207,-0.294171094894409,0.97103625535965,0.0917741134762764,-0.2206040173769,0.985846102237701,-0.106943093240261,0.129114612936974,0.762879073619843,0.502556324005127,0.406758666038513,0.859436631202698,0.509184420108795,0.0458242334425449,\n0.886820495128632,-0.356388479471207,-0.294171094894409,0.914847433567047,-0.40378075838089,0.00391693273559213,0.723603904247284,0.683222591876984,0.0980009809136391,0.859436631202698,0.509184420108795,0.0458242334425449,0.762879073619843,0.502556324005127,0.406758666038513,0.654246509075165,0.624168276786804,0.427054405212402,0.723603904247284,0.683222591876984,0.0980009809136391,0.654246509075165,0.624168276786804,0.427054405212402,0.933142781257629,0.297380536794662,0.202013194561005,0.906324923038483,0.41602036356926,-0.0741765573620796,0.947628259658813,0.256551682949066,0.190215542912483,0.926415085792542,0.366669327020645,-0.085490919649601,0.906324923038483,0.41602036356926,-0.0741765573620796,0.933142781257629,0.297380536794662,0.202013194561005,0.926415085792542,0.366669327020645,-0.085490919649601,0.947628259658813,0.256551682949066,0.190215542912483,0.981737434864044,-0.183587238192558,0.0498724691569805,0.968909800052643,-0.119059138000011,-0.21688424050808,0.809562027454376,0.57842743396759,-0.100154921412468,0.968909800052643,-0.119059138000011,-0.21688424050808,0.981737434864044,-0.183587238192558,0.0498724691569805,0.870848119258881,0.464649528264999,0.160388246178627,0.809562027454376,0.57842743396759,-0.100154921412468,0.870848119258881,0.464649528264999,0.160388246178627,0.793782532215118,0.557114601135254,0.24399308860302,0.74566113948822,0.665992856025696,-0.021046232432127,0.711231529712677,0.702188611030579,-0.0328761637210846,0.74566113948822,0.665992856025696,-0.021046232432127,0.793782532215118,0.557114601135254,0.24399308860302,0.713916897773743,0.653736352920532,0.250901371240616,0.632348001003265,0.720907807350159,0.283598184585571,0.671855986118317,0.740681707859039,-0.000314049131702632,0.711231529712677,0.702188611030579,-0.0328761637210846,0.713916897773743,0.653736352920532,0.250901371240616,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.671855986118317,0.740681707859039,-0.000314049131702632,0.632348001003265,0.720907807350159,0.283598184585571,0.969612717628479,0.0529157817363739,0.238853618502617,\n0.999210178852081,0.0289647411555052,-0.0272047873586416,0.969612717628479,0.0529157817363739,0.238853618502617,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.739399373531342,-0.377425998449326,0.557528674602509,-0.47929310798645,-0.284916669130325,-0.830120861530304,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.944391250610352,-0.0824343115091324,-0.3183234333992,-0.383484423160553,-0.10283836722374,-0.917803883552551,-0.383484423160553,-0.10283836722374,-0.917803883552551,-0.944391250610352,-0.0824343115091324,-0.3183234333992,-0.698255062103271,-0.555874645709991,-0.451046735048294,-0.382079601287842,0.0211677625775337,-0.923886954784393,-0.828753769397736,-0.00401695584878325,0.559599041938782,-0.653040766716003,-0.484619319438934,-0.581963837146759,-0.587613880634308,-0.804071664810181,0.0904360190033913,-0.650360941886902,-0.2744460105896,0.708314895629883,-0.828753769397736,-0.00401695584878325,0.559599041938782,-0.812033832073212,-0.319456815719604,0.488414168357849,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.47929310798645,-0.284916669130325,-0.830120861530304,-0.653040766716003,-0.484619319438934,-0.581963837146759,0.118139639496803,-0.728867173194885,0.67438542842865,-0.944391250610352,-0.0824343115091324,-0.3183234333992,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.812033832073212,-0.319456815719604,0.488414168357849,-0.583520650863647,-0.523498177528381,0.620848834514618,0.0390605479478836,-0.798295617103577,-0.600997805595398,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.867540001869202,-0.48896712064743,-0.0910244435071945,0.846594989299774,-0.529064953327179,0.0580276139080524,-0.944391250610352,-0.0824343115091324,-0.3183234333992,0.118139639496803,-0.728867173194885,0.67438542842865,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.867540001869202,-0.48896712064743,-0.0910244435071945,0.118139639496803,-0.728867173194885,0.67438542842865,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.751028060913086,-0.474978506565094,-0.458641737699509,\n0.332680404186249,-0.441110402345657,0.833513855934143,0.202261254191399,-0.191956058144569,0.960334956645966,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.202261254191399,-0.191956058144569,0.960334956645966,-0.201129660010338,-0.411518931388855,0.888931393623352,0.0923520997166634,-0.948987245559692,0.301486879587173,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.332680404186249,-0.441110402345657,0.833513855934143,0.751028060913086,-0.474978506565094,-0.458641737699509,0.505280077457428,-0.213028207421303,-0.836248159408569,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.837489604949951,-0.137019082903862,0.528996169567108,0.118139639496803,-0.728867173194885,0.67438542842865,0.867540001869202,-0.48896712064743,-0.0910244435071945,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.871833384037018,0.0184005852788687,0.489456832408905,0.909544348716736,-0.0496345721185207,0.412632375955582,0.928275108337402,-0.108704164624214,0.355652451515198,0.807208120822906,-0.16038890182972,0.568058490753174,0.938030481338501,-0.164544522762299,-0.304998099803925,0.928275108337402,-0.108704164624214,0.355652451515198,0.909544348716736,-0.0496345721185207,0.412632375955582,0.934698820114136,0.0468888580799103,-0.352334558963776,0.934698820114136,0.0468888580799103,-0.352334558963776,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.0390605479478836,-0.798295617103577,-0.600997805595398,0.938030481338501,-0.164544522762299,-0.304998099803925,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.0390605479478836,-0.798295617103577,-0.600997805595398,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.456334859132767,-0.263855695724487,0.849787414073944,0.546681344509125,-0.221680983901024,0.807463347911835,0.928847432136536,0.162274017930031,0.333030939102173,0.928847432136536,0.162274017930031,0.333030939102173,0.969195008277893,0.116620995104313,0.216934517025948,0.953069984912872,0.0484385639429092,0.298849850893021,0.871833384037018,0.0184005852788687,0.489456832408905,\n0.714491784572601,0.142257153987885,0.685028791427612,0.30596736073494,-0.302397102117538,0.902740240097046,0.456334859132767,-0.263855695724487,0.849787414073944,0.928847432136536,0.162274017930031,0.333030939102173,0.161164596676826,-0.331503033638,0.929586827754974,0.30596736073494,-0.302397102117538,0.902740240097046,0.714491784572601,0.142257153987885,0.685028791427612,0.709949553012848,0.601409435272217,0.366440117359161,0.961548805236816,-0.0192979723215103,0.273955345153809,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.785880386829376,0.614527404308319,-0.0689060613512993,0.785880386829376,0.614527404308319,-0.0689060613512993,0.632241547107697,0.646320283412933,-0.427247822284698,0.404174894094467,0.903538584709167,-0.142339900135994,0.462400853633881,0.884378015995026,0.0637255683541298,0.632241547107697,0.646320283412933,-0.427247822284698,0.785880386829376,0.614527404308319,-0.0689060613512993,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.941822648048401,-0.153352871537209,-0.299086838960648,0.70794689655304,-0.166302517056465,-0.686407029628754,0.70794689655304,-0.166302517056465,-0.686407029628754,0.941822648048401,-0.153352871537209,-0.299086838960648,0.820765018463135,-0.278661012649536,-0.4986911714077,0.71175479888916,-0.136520832777023,-0.689033508300781,0.71175479888916,-0.136520832777023,-0.689033508300781,0.820765018463135,-0.278661012649536,-0.4986911714077,0.433943748474121,-0.801411271095276,-0.411622196435928,0.471586465835571,-0.672621011734009,-0.570251822471619,0.471586465835571,-0.672621011734009,-0.570251822471619,0.433943748474121,-0.801411271095276,-0.411622196435928,0.850343227386475,-0.422914385795593,-0.313145011663437,0.642500996589661,-0.273710608482361,-0.715733826160431,-0.683505356311798,0.663009881973267,0.305349379777908,-0.258647561073303,0.909015476703644,0.326790869235992,-0.343125730752945,0.914759814739227,0.213258653879166,\n-0.722104966640472,0.687272310256958,0.0788739323616028,-0.683505356311798,0.663009881973267,0.305349379777908,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.976002871990204,0.137454673647881,0.168892458081245,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.976002871990204,0.137454673647881,0.168892458081245,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.923067510128021,0.218861386179924,-0.316300690174103,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.923067510128021,0.218861386179924,-0.316300690174103,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.949256777763367,0.266638487577438,-0.166779711842537,0.30596736073494,-0.302397102117538,0.902740240097046,0.152829229831696,-0.222570449113846,0.962863266468048,0.118139639496803,-0.728867173194885,0.67438542842865,0.456334859132767,-0.263855695724487,0.849787414073944,0.602918326854706,0.515652477741241,0.608762681484222,0.910823285579681,0.270006626844406,0.312245815992355,0.118139639496803,-0.728867173194885,0.67438542842865,0.152829229831696,-0.222570449113846,0.962863266468048,-0.343125730752945,0.914759814739227,0.213258653879166,\n-0.308493584394455,0.950873613357544,0.02590411901474,-0.656110644340515,0.732090890407562,-0.183198615908623,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.656110644340515,0.732090890407562,-0.183198615908623,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.805570960044861,0.0887086465954781,-0.585820972919464,0.949140191078186,-0.201623901724815,0.241827890276909,0.928275108337402,-0.108704164624214,0.355652451515198,0.938030481338501,-0.164544522762299,-0.304998099803925,0.941822648048401,-0.153352871537209,-0.299086838960648,-0.339781731367111,-0.868737757205963,0.360337555408478,0.118260912597179,-0.832547545433044,0.541182935237885,0.261419922113419,-0.95404326915741,0.146496027708054,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.306935518980026,-0.919691741466522,0.244862422347069,0.810173988342285,-0.314327269792557,0.494789332151413,0.939882814884186,-0.341329634189606,0.010694270953536,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.890334188938141,-0.2436583340168,-0.384624063968658,0.953069984912872,0.0484385639429092,0.298849850893021,0.969195008277893,0.116620995104313,0.216934517025948,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.0872491523623466,-0.891694486141205,-0.444149285554886,-0.542883276939392,-0.826726615428925,-0.147651329636574,-0.0959864854812622,-0.913586139678955,0.395154267549515,0.50744092464447,-0.861680567264557,0.00320711638778448,0.314595818519592,-0.93869549036026,-0.140997156500816,-0.211911574006081,-0.951958775520325,-0.221061065793037,\n-0.339781731367111,-0.868737757205963,0.360337555408478,0.124663800001144,-0.874086201190948,0.469502121210098,0.124663800001144,-0.874086201190948,0.469502121210098,-0.339781731367111,-0.868737757205963,0.360337555408478,0.192425221204758,-0.974552154541016,0.114980839192867,0.118260912597179,-0.832547545433044,0.541182935237885,-0.40076744556427,-0.847734689712524,0.347464174032211,-0.207811191678047,-0.962575137615204,-0.173964604735374,0.261419922113419,-0.95404326915741,0.146496027708054,0.230480119585991,-0.946770370006561,0.224732518196106,-0.362296253442764,-0.902348458766937,0.233470991253853,-0.201402932405472,-0.92625367641449,-0.318576455116272,0.389462053775787,-0.886311709880829,-0.250541061162949,-0.200983807444572,-0.912257611751556,-0.356919497251511,0.326997041702271,-0.921505868434906,-0.209522947669029,0.180372029542923,-0.916134834289551,0.357998490333557,-0.339713484048843,-0.93720954656601,0.0789492130279541,-0.200983807444572,-0.912257611751556,-0.356919497251511,-0.395999372005463,-0.883323132991791,0.250847965478897,0.148850917816162,-0.924228250980377,0.351632624864578,0.326997041702271,-0.921505868434906,-0.209522947669029,0.259535193443298,-0.932749152183533,0.250240802764893,0.334644615650177,-0.86758428812027,-0.367845684289932,-0.112518116831779,-0.874383687973022,-0.47200945019722,-0.32362487912178,-0.91464102268219,0.242278203368187,0.248996675014496,-0.917850255966187,0.309114098548889,0.50744092464447,-0.861680567264557,0.00320711638778448,-0.464242279529572,-0.87283843755722,-0.150440096855164,-0.32362487912178,-0.91464102268219,0.242278203368187,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.303018301725388,-0.938679337501526,0.164502337574959,0.259535193443298,-0.932749152183533,0.250240802764893,0.149650126695633,-0.977229058742523,-0.150426715612412,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.262460827827454,-0.84521484375,0.465538591146469,0.648241341114044,-0.506932139396667,-0.568157494068146,0.0855752229690552,-0.285937607288361,-0.954419493675232,\n-0.407288640737534,0.570921063423157,0.712857007980347,0.187374159693718,0.57430511713028,0.796909391880035,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.751268684864044,0.274677604436874,-0.60012298822403,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.888693332672119,0.348883032798767,-0.297497481107712,0.850938260555267,-0.0678395256400108,0.520866513252258,0.922418177127838,0.0309108179062605,0.384953439235687,0.937970161437988,0.291288256645203,-0.188050866127014,0.9481241106987,0.313342481851578,-0.053639143705368,0.967456996440887,0.251362919807434,-0.0290456917136908,0.939527928829193,0.186540976166725,0.287210315465927,0.877985596656799,0.347244620323181,0.32948824763298,0.9481241106987,0.313342481851578,-0.053639143705368,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.923067450523376,0.21886146068573,-0.316300749778748,0.932169795036316,0.263871729373932,-0.24785327911377,0.482705801725388,0.267842918634415,-0.833819687366486,-0.0640612170100212,0.868370532989502,0.491760909557343,-0.272089272737503,0.833921611309052,0.480148106813431,-0.432919979095459,0.554767727851868,0.710501968860626,0.0218879040330648,0.608063995838165,0.793586194515228,0.402506083250046,0.589897155761719,0.700007259845734,0.551314413547516,0.63163036108017,0.545064687728882,0.147527933120728,0.908096134662628,0.391914397478104,0.0960818827152252,0.882192432880402,0.460982412099838,0.675129354000092,-0.135668084025383,0.725116908550262,0.850938260555267,-0.0678395256400108,0.520866513252258,0.9481241106987,0.313342481851578,-0.053639143705368,0.877985596656799,0.347244620323181,0.32948824763298,0.451114922761917,-0.252489298582077,0.856004953384399,0.675129354000092,-0.135668084025383,0.725116908550262,0.877985596656799,0.347244620323181,0.32948824763298,0.697896838188171,0.111968606710434,0.707391738891602,0.0218879040330648,0.608063995838165,0.793586194515228,\n0.402506083250046,0.589897155761719,0.700007259845734,0.0960818827152252,0.882192432880402,0.460982412099838,-0.0640612170100212,0.868370532989502,0.491760909557343,0.697896838188171,0.111968606710434,0.707391738891602,0.095845490694046,-0.0575048215687275,0.993733823299408,0.136431142687798,-0.358484745025635,0.923512399196625,0.451114922761917,-0.252489298582077,0.856004953384399,0.97600269317627,0.13745604455471,0.168892234563828,0.683504700660706,0.663010776042938,0.305349051952362,0.551314413547516,0.63163036108017,0.545064687728882,0.85029935836792,0.0502043291926384,0.523899376392365,0.147625222802162,-0.322124987840652,0.935116171836853,0.095845490694046,-0.0575048215687275,0.993733823299408,0.697896838188171,0.111968606710434,0.707391738891602,0.668019592761993,-0.146763533353806,0.729527413845062,0.939527928829193,0.186540976166725,0.287210315465927,0.990444839000702,0.137596189975739,-0.00929253362119198,0.99804013967514,0.0525208227336407,0.0340210981667042,0.903742134571075,0.0408325865864754,0.426125437021255,0.946598649024963,0.101268604397774,-0.306097507476807,0.923067450523376,0.21886146068573,-0.316300749778748,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.805570960044861,0.0887085422873497,-0.585820972919464,-0.568327784538269,-0.132913276553154,0.811996042728424,0.095845490694046,-0.0575048215687275,0.993733823299408,0.147625222802162,-0.322124987840652,0.935116171836853,-0.503679633140564,-0.333046585321426,0.797111511230469,-0.560331225395203,-0.197167724370956,0.804458677768707,-0.969194948673248,0.11662120372057,0.21693454682827,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.681288778781891,-0.15539838373661,0.715329945087433,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.942743897438049,-0.067279078066349,-0.326661109924316,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.568327784538269,-0.132913276553154,0.811996042728424,\n-0.503679633140564,-0.333046585321426,0.797111511230469,0.892664194107056,0.187903523445129,-0.409686356782913,0.937970161437988,0.291288256645203,-0.188050866127014,0.922418177127838,0.0309108179062605,0.384953439235687,0.964133620262146,0.116036243736744,0.238708943128586,0.964133620262146,0.116036243736744,0.238708943128586,0.928708553314209,-0.245198935270309,0.278168857097626,0.775554299354553,-0.490126490592957,-0.397858679294586,0.892664194107056,0.187903523445129,-0.409686356782913,0.937970161437988,0.291288256645203,-0.188050866127014,0.892664194107056,0.187903523445129,-0.409686356782913,0.568934082984924,-0.144464790821075,-0.809594869613647,0.713874757289886,0.186937391757965,-0.674860894680023,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.364783376455307,-0.883516609668732,0.293822169303894,-0.293806701898575,-0.416160970926285,0.860515952110291,-0.681288778781891,-0.15539838373661,0.715329945087433,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.928847432136536,0.162273854017258,0.333030939102173,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.928847432136536,0.162273854017258,0.333030939102173,-0.969194948673248,0.11662120372057,0.21693454682827,-0.560331225395203,-0.197167724370956,0.804458677768707,-0.332680583000183,-0.441110253334045,0.833513855934143,0.922418177127838,0.0309108179062605,0.384953439235687,0.850938260555267,-0.0678395256400108,0.520866513252258,0.837489545345306,-0.137019574642181,0.528996109962463,0.21311217546463,-0.0906343460083008,0.972814798355103,0.136431142687798,-0.358484745025635,0.923512399196625,-0.161164477467537,-0.331503093242645,0.929586827754974,-0.0511879175901413,-0.230872392654419,0.971636593341827,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.482705801725388,0.267842918634415,-0.833819687366486,0.244611874222755,0.194429770112038,-0.949927449226379,0.246746584773064,-0.163684040307999,-0.955156326293945,\n-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.942743897438049,-0.067279078066349,-0.326661109924316,0.383484452962875,-0.102838270366192,-0.917803883552551,0.479293167591095,-0.284916758537292,-0.830120801925659,0.837489545345306,-0.137019574642181,0.528996109962463,0.850938260555267,-0.0678395256400108,0.520866513252258,0.675129354000092,-0.135668084025383,0.725116908550262,0.652578055858612,-0.0296747293323278,0.757140219211578,0.652578055858612,-0.0296747293323278,0.757140219211578,0.675129354000092,-0.135668084025383,0.725116908550262,0.451114922761917,-0.252489298582077,0.856004953384399,0.389561533927917,-0.19174836575985,0.900818705558777,0.389561533927917,-0.19174836575985,0.900818705558777,0.451114922761917,-0.252489298582077,0.856004953384399,0.136431142687798,-0.358484745025635,0.923512399196625,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.161164477467537,-0.331503093242645,0.929586827754974,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.54668140411377,-0.221681281924248,0.807463228702545,0.583520710468292,-0.523498058319092,0.620848894119263,0.812033891677856,-0.31945663690567,0.488414198160172,-0.560331225395203,-0.197167724370956,0.804458677768707,-0.681288778781891,-0.15539838373661,0.715329945087433,0.828753769397736,-0.00401723757386208,0.559598922729492,0.383484452962875,-0.102838270366192,-0.917803883552551,-0.942743897438049,-0.067279078066349,-0.326661109924316,-0.934698820114136,0.0468888208270073,-0.352334499359131,0.382079660892487,0.0211679134517908,-0.923886954784393,-0.202261313796043,-0.191956117749214,0.960334956645966,0.964133620262146,0.116036243736744,0.238708943128586,0.922418177127838,0.0309108179062605,0.384953439235687,-0.332680583000183,-0.441110253334045,0.833513855934143,-0.691331505775452,-0.716019868850708,-0.0968314781785011,\n0.543925285339355,-0.442454695701599,-0.713007152080536,0.775554299354553,-0.490126490592957,-0.397858679294586,-0.0923527628183365,-0.948987364768982,0.301486223936081,0.201128974556923,-0.41152036190033,0.888930916786194,0.928708553314209,-0.245198935270309,0.278168857097626,0.964133620262146,0.116036243736744,0.238708943128586,-0.202261313796043,-0.191956117749214,0.960334956645966,-0.751028060913086,-0.474978417158127,-0.458641856908798,0.568934082984924,-0.144464790821075,-0.809594869613647,0.543925285339355,-0.442454695701599,-0.713007152080536,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.505279898643494,-0.213028356432915,-0.836248219013214,0.713874757289886,0.186937391757965,-0.674860894680023,0.568934082984924,-0.144464790821075,-0.809594869613647,-0.751028060913086,-0.474978417158127,-0.458641856908798,0.828753769397736,-0.00401723757386208,0.559598922729492,-0.681288778781891,-0.15539838373661,0.715329945087433,-0.293806701898575,-0.416160970926285,0.860515952110291,0.650361001491547,-0.274446427822113,0.708314716815948,0.587613701820374,-0.80407178401947,0.0904358923435211,-0.364783376455307,-0.883516609668732,0.293822169303894,-0.801601707935333,-0.550374031066895,-0.23350191116333,0.653040647506714,-0.484619528055191,-0.581963717937469,0.583520710468292,-0.523498058319092,0.620848894119263,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.560331225395203,-0.197167724370956,0.804458677768707,0.812033891677856,-0.31945663690567,0.488414198160172,-0.0923527628183365,-0.948987364768982,0.301486223936081,0.775554299354553,-0.490126490592957,-0.397858679294586,0.928708553314209,-0.245198935270309,0.278168857097626,0.201128974556923,-0.41152036190033,0.888930916786194,0.650361001491547,-0.274446427822113,0.708314716815948,-0.293806701898575,-0.416160970926285,0.860515952110291,-0.364783376455307,-0.883516609668732,0.293822169303894,0.587613701820374,-0.80407178401947,0.0904358923435211,-0.563137769699097,0.445758104324341,0.69582724571228,-0.709949254989624,0.60140985250473,0.366439938545227,\n-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.717246651649475,0.0185818821191788,0.696571588516235,0.937970161437988,0.291288256645203,-0.188050866127014,0.713874757289886,0.186937391757965,-0.674860894680023,0.949256718158722,0.266638696193695,-0.166779711842537,-0.568327784538269,-0.132913276553154,0.811996042728424,-0.714491605758667,0.14225697517395,0.685028970241547,-0.161164477467537,-0.331503093242645,0.929586827754974,0.136431142687798,-0.358484745025635,0.923512399196625,0.095845490694046,-0.0575048215687275,0.993733823299408,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.942743897438049,-0.067279078066349,-0.326661109924316,0.697896838188171,0.111968606710434,0.707391738891602,0.877985596656799,0.347244620323181,0.32948824763298,0.939527928829193,0.186540976166725,0.287210315465927,0.903742134571075,0.0408325865864754,0.426125437021255,-0.320462554693222,0.819696664810181,0.474764227867126,-0.406098872423172,0.667459309101105,0.624164879322052,-0.5433070063591,0.448145478963852,0.709917664527893,-0.432919979095459,0.554767727851868,0.710501968860626,-0.272089272737503,0.833921611309052,0.480148106813431,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.714491605758667,0.14225697517395,0.685028970241547,-0.568327784538269,-0.132913276553154,0.811996042728424,0.939527928829193,0.186540976166725,0.287210315465927,0.967456996440887,0.251362919807434,-0.0290456917136908,0.990444839000702,0.137596189975739,-0.00929253362119198,0.543925285339355,-0.442454695701599,-0.713007152080536,0.892664194107056,0.187903523445129,-0.409686356782913,0.775554299354553,-0.490126490592957,-0.397858679294586,0.568934082984924,-0.144464790821075,-0.809594869613647,0.892664194107056,0.187903523445129,-0.409686356782913,0.543925285339355,-0.442454695701599,-0.713007152080536,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.801601707935333,-0.550374031066895,-0.23350191116333,\n-0.681288778781891,-0.15539838373661,0.715329945087433,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.890334248542786,-0.243657946586609,-0.384624123573303,0.479293167591095,-0.284916758537292,-0.830120801925659,0.653040647506714,-0.484619528055191,-0.581963717937469,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.406098872423172,0.667459309101105,0.624164879322052,-0.320462554693222,0.819696664810181,0.474764227867126,-0.380683273077011,0.86094468832016,0.337423235177994,-0.709949254989624,0.60140985250473,0.366439938545227,-0.563137769699097,0.445758104324341,0.69582724571228,-0.5433070063591,0.448145478963852,0.709917664527893,-0.406098872423172,0.667459309101105,0.624164879322052,-0.563137769699097,0.445758104324341,0.69582724571228,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.5433070063591,0.448145478963852,0.709917664527893,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.538123428821564,-0.0776136741042137,0.839285016059875,-0.432919979095459,0.554767727851868,0.710501968860626,0.0218879040330648,0.608063995838165,0.793586194515228,-0.432919979095459,0.554767727851868,0.710501968860626,-0.538123428821564,-0.0776136741042137,0.839285016059875,0.141524657607079,-0.0639704838395119,0.987865626811981,0.402506083250046,0.589897155761719,0.700007259845734,0.0218879040330648,0.608063995838165,0.793586194515228,0.141524657607079,-0.0639704838395119,0.987865626811981,0.652125597000122,-0.00108946568798274,0.758110165596008,0.652125597000122,-0.00108946568798274,0.758110165596008,0.85029935836792,0.0502043291926384,0.523899376392365,0.551314413547516,0.63163036108017,0.545064687728882,0.402506083250046,0.589897155761719,0.700007259845734,0.683504700660706,0.663010776042938,0.305349051952362,\n0.258648008108139,0.909015238285065,0.326791137456894,0.147527933120728,0.908096134662628,0.391914397478104,0.551314413547516,0.63163036108017,0.545064687728882,0.331649243831635,0.794523119926453,-0.508666634559631,0.522813856601715,0.179267287254334,-0.833384037017822,-0.00497461529448628,0.164960891008377,-0.986287593841553,-0.0982039347290993,0.744844913482666,-0.659971237182617,0.522813856601715,0.179267287254334,-0.833384037017822,0.331649243831635,0.794523119926453,-0.508666634559631,0.656110465526581,0.732090950012207,-0.183199197053909,0.886800289154053,0.175987064838409,-0.427333384752274,0.505583882331848,0.0150260468944907,-0.862646579742432,0.459000468254089,0.0631367564201355,-0.886189818382263,-0.00533877313137054,0.0413248650729656,-0.999131500720978,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.342631131410599,0.695380508899689,-0.631703972816467,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.711754858493805,-0.136520877480507,-0.689033389091492,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.433557718992233,-0.0273692850023508,-0.900710046291351,0.459000468254089,0.0631367564201355,-0.886189818382263,0.505583882331848,0.0150260468944907,-0.862646579742432,0.853118479251862,0.0149601250886917,-0.521502673625946,0.805570960044861,0.0887085422873497,-0.585820972919464,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.82076495885849,-0.278661072254181,-0.498691141605377,0.459000468254089,0.0631367564201355,-0.886189818382263,0.379301398992538,-0.563074827194214,-0.734218776226044,0.0723040029406548,-0.562818944454193,-0.823411762714386,-0.00533877313137054,0.0413248650729656,-0.999131500720978,-0.433557718992233,-0.0273692850023508,-0.900710046291351,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.471586525440216,-0.672621071338654,-0.570251703262329,\n-0.711754858493805,-0.136520877480507,-0.689033389091492,0.379301398992538,-0.563074827194214,-0.734218776226044,0.459000468254089,0.0631367564201355,-0.886189818382263,0.805570960044861,0.0887085422873497,-0.585820972919464,0.652326643466949,-0.0732125490903854,-0.754393696784973,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.0390606410801411,-0.798295676708221,-0.600997745990753,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.971036195755005,0.0917746424674988,-0.220604136586189,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.149676010012627,0.966881930828094,-0.206727981567383,0.0896634757518768,0.986824929714203,-0.134673669934273,0.331649243831635,0.794523119926453,-0.508666634559631,-0.404175013303757,0.903538525104523,-0.142339885234833,-0.267860978841782,0.938322484493256,-0.218635410070419,-0.342631131410599,0.695380508899689,-0.631703972816467,-0.632241010665894,0.646320343017578,-0.427248448133469,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.246746584773064,-0.163684040307999,-0.955156326293945,0.458068341016769,-0.324115723371506,-0.827721178531647,0.379301398992538,-0.563074827194214,-0.734218776226044,0.458068341016769,-0.324115723371506,-0.827721178531647,0.0359749346971512,-0.262611299753189,-0.964230835437775,0.0723040029406548,-0.562818944454193,-0.823411762714386,0.379301398992538,-0.563074827194214,-0.734218776226044,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.0390606410801411,-0.798295676708221,-0.600997745990753,\n0.798132300376892,-0.595748007297516,0.0898283571004868,0.348949402570724,-0.852244853973389,0.389760226011276,0.620603084564209,-0.695841789245605,-0.361463725566864,0.885131120681763,0.0417929887771606,-0.463461130857468,-0.64503401517868,-0.763977766036987,0.0164064429700375,0.480840384960175,-0.739749372005463,-0.470705211162567,0.826135098934174,-0.33500149846077,0.453072637319565,-0.0856366232037544,-0.288858771324158,0.953533947467804,0.306766599416733,-0.118459150195122,0.944384276866913,0.15803250670433,0.792331993579865,0.589267194271088,-0.390775978565216,0.856176793575287,0.33801680803299,-0.441097885370255,0.233705267310143,0.866495549678802,0.395615637302399,-0.602471053600311,-0.693193197250366,0.722060799598694,-0.55972957611084,0.406609207391739,-0.415498435497284,-0.625033140182495,0.660828769207001,-0.709003865718842,-0.541708588600159,-0.451514542102814,0.712908089160919,0.682124614715576,-0.162689983844757,0.650463998317719,0.740020751953125,-0.17107281088829,0.863034009933472,-0.335786014795303,-0.377385854721069,0.958362102508545,-0.256494760513306,0.125509008765221,0.282899409532547,-0.764817476272583,-0.578811049461365,0.705481588840485,-0.662966072559357,0.250542849302292,-0.466174095869064,-0.668627381324768,0.579326450824738,-0.557026326656342,-0.731577575206757,-0.393085092306137,0.733190476894379,0.653582632541656,-0.187780305743217,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.680100440979004,-0.471440553665161,-0.56143319606781,0.717039883136749,0.690781950950623,-0.093134693801403,0.717039883136749,0.690781950950623,-0.093134693801403,0.680100440979004,-0.471440553665161,-0.56143319606781,0.94776064157486,-0.269029140472412,-0.171385690569878,0.702042996883392,0.707515120506287,-0.0809817835688591,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.248996630311012,-0.917850255966187,0.309114128351212,0.94776064157486,-0.269029140472412,-0.171385690569878,0.680100440979004,-0.471440553665161,-0.56143319606781,0.445575773715973,0.0603602342307568,-0.89320707321167,\n0.305622786283493,0.734605193138123,-0.605763852596283,0.647232055664063,0.709673702716827,-0.278305619955063,0.885131120681763,0.0417929887771606,-0.463461130857468,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.596384108066559,0.73188179731369,0.329658985137939,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.615695953369141,0.768994450569153,0.171947792172432,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.615695953369141,0.768994450569153,0.171947792172432,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.900666117668152,-0.271470487117767,0.339270144701004,-0.390775978565216,0.856176793575287,0.33801680803299,-0.748181462287903,0.587628781795502,0.308085918426514,-0.812849164009094,-0.351107835769653,0.46475750207901,-0.441097885370255,0.233705267310143,0.866495549678802,-0.916947364807129,0.362371772527695,0.167015537619591,-0.893702745437622,0.422671109437943,0.150480940937996,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.847357213497162,0.513431549072266,0.135549783706665,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.755123674869537,0.652067303657532,0.067797377705574,-0.729536950588226,0.676141858100891,0.102995604276657,-0.847357213497162,0.513431549072266,0.135549783706665,-0.719103634357452,0.620088398456573,0.313656359910965,-0.661795377731323,0.713703334331512,0.229465648531914,-0.382025182247162,0.832321286201477,0.401619255542755,-0.416523069143295,0.747589528560638,0.517318487167358,-0.732339918613434,0.57999724149704,0.356765151023865,-0.719103634357452,0.620088398456573,0.313656359910965,-0.416523069143295,0.747589528560638,0.517318487167358,-0.404268890619278,0.753554701805115,0.518383979797363,0.640394508838654,0.754049122333527,-0.145961552858353,0.709426641464233,0.694044709205627,-0.122539132833481,\n0.676984488964081,0.720325291156769,-0.15107424557209,0.660727977752686,0.731441617012024,-0.168617248535156,0.471274465322495,0.860716044902802,0.192531242966652,0.602886617183685,0.797378718852997,-0.0267372038215399,0.644031763076782,0.764946699142456,0.00891874358057976,0.508786737918854,0.827319860458374,0.238071173429489,0.740322411060333,0.655164897441864,-0.150604203343391,0.632998824119568,0.753636837005615,-0.177042677998543,0.660727977752686,0.731441617012024,-0.168617248535156,0.676984488964081,0.720325291156769,-0.15107424557209,0.664407253265381,0.746931552886963,0.0256172958761454,0.526539385318756,0.801656424999237,0.283025234937668,0.508786737918854,0.827319860458374,0.238071173429489,0.644031763076782,0.764946699142456,0.00891874358057976,0.719630718231201,0.67299348115921,-0.170913383364677,0.727223694324493,0.663318991661072,-0.176503792405128,0.73427015542984,0.669211447238922,-0.114032231271267,0.774570941925049,0.617026031017303,-0.138991788029671,0.834402143955231,0.550802052021027,0.0197512619197369,0.719630718231201,0.67299348115921,-0.170913383364677,0.774570941925049,0.617026031017303,-0.138991788029671,0.75202214717865,0.649503469467163,-0.112284608185291,0.75202214717865,0.649503469467163,-0.112284608185291,0.774570941925049,0.617026031017303,-0.138991788029671,0.789476454257965,0.597960650920868,-0.13845556974411,0.972268581390381,0.233539223670959,0.0123813217505813,0.789476454257965,0.597960650920868,-0.13845556974411,0.774570941925049,0.617026031017303,-0.138991788029671,0.73427015542984,0.669211447238922,-0.114032231271267,0.749007403850555,0.651603639125824,-0.120002605021,0.704592168331146,0.64562314748764,-0.294483780860901,0.789476454257965,0.597960650920868,-0.13845556974411,0.749007403850555,0.651603639125824,-0.120002605021,0.678524672985077,0.663206517696381,-0.31585019826889,0.972268581390381,0.233539223670959,0.0123813217505813,0.789476454257965,0.597960650920868,-0.13845556974411,0.704592168331146,0.64562314748764,-0.294483780860901,0.721381485462189,0.602611780166626,-0.341273874044418,\n0.320632994174957,0.735152721405029,-0.597281336784363,0.350197345018387,0.67135888338089,-0.653176128864288,0.721381485462189,0.602611780166626,-0.341273874044418,0.704592168331146,0.64562314748764,-0.294483780860901,0.300025343894959,0.704358696937561,-0.643322348594666,0.320632994174957,0.735152721405029,-0.597281336784363,0.704592168331146,0.64562314748764,-0.294483780860901,0.678524672985077,0.663206517696381,-0.31585019826889,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.139554515480995,0.707306146621704,-0.692995369434357,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.139554515480995,0.707306146621704,-0.692995369434357,-0.143811345100403,0.67733633518219,-0.721480309963226,-0.483161300420761,0.708275854587555,-0.514684855937958,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.627380669116974,0.542527735233307,-0.558620691299438,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.483161300420761,0.708275854587555,-0.514684855937958,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.947628021240234,0.25655260682106,0.190215468406677,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.970878839492798,0.173829272389412,0.164856299757957,-0.713916778564453,0.653736412525177,0.250901401042938,-0.723107695579529,0.620889544487,0.302673906087875,-0.855198562145233,0.434895634651184,0.281959563493729,-0.793782532215118,0.557114601135254,0.243993073701859,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.738506555557251,0.594659924507141,0.317785561084747,\n-0.767313361167908,0.622622489929199,0.153530210256577,-0.896252572536469,0.421273946762085,0.13877908885479,-0.878546297550201,0.378490209579468,0.291378676891327,-0.896252572536469,0.421273946762085,0.13877908885479,-0.767313361167908,0.622622489929199,0.153530210256577,-0.755123674869537,0.652067303657532,0.067797377705574,-0.882212042808533,0.466362148523331,0.0648713782429695,0.144893497228622,0.857636988162994,0.493421345949173,0.128903344273567,0.870382189750671,0.475203901529312,0.508786737918854,0.827319860458374,0.238071173429489,0.526539385318756,0.801656424999237,0.283025234937668,0.130269169807434,0.905642747879028,0.403535813093185,0.471274465322495,0.860716044902802,0.192531242966652,0.508786737918854,0.827319860458374,0.238071173429489,0.128903344273567,0.870382189750671,0.475203901529312,0.669141590595245,0.742036402225494,-0.0403924956917763,0.891577959060669,0.451291143894196,-0.0377500578761101,0.906549096107483,0.409386813640594,-0.10281577706337,0.667402267456055,0.744479417800903,-0.0180171187967062,0.71388167142868,0.36040398478508,0.60040146112442,0.911552846431732,0.361514419317245,0.195904940366745,0.664968013763428,0.745313882827759,0.0482159033417702,0.57691216468811,0.718079447746277,0.389273971319199,0.909856855869293,0.391187816858292,0.138320595026016,0.752071380615234,0.531812727451324,0.389312088489532,0.660223960876465,0.688790857791901,0.299451887607574,0.816485822200775,0.512709319591522,0.265480846166611,0.752071380615234,0.531812727451324,0.389312088489532,0.646896421909332,0.568208158016205,0.508590698242188,0.563141405582428,0.729207217693329,0.388752609491348,0.660223960876465,0.688790857791901,0.299451887607574,-0.320559352636337,0.729658544063568,0.604019939899445,0.202111423015594,0.805501997470856,0.557061493396759,0.0790780261158943,0.992485880851746,0.0933722630143166,-0.311181366443634,0.925608515739441,0.215441450476646,-0.614538252353668,0.667141258716583,0.421028852462769,-0.76466292142868,0.188213840126991,0.616332828998566,-0.367227405309677,0.346865743398666,0.863034307956696,\n-0.320559352636337,0.729658544063568,0.604019939899445,-0.520070433616638,0.75630134344101,0.396906822919846,-0.941741049289703,0.11614803224802,0.315647661685944,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.522960901260376,0.842813611030579,-0.127189248800278,-0.413429826498032,0.428489029407501,0.803413331508636,-0.910823285579681,0.270006507635117,0.312245815992355,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.941741049289703,0.11614803224802,0.315647661685944,-0.602918326854706,0.515652418136597,0.608762681484222,-0.910823285579681,0.270006507635117,0.312245815992355,-0.413429826498032,0.428489029407501,0.803413331508636,-0.229550525546074,0.57556563615799,0.784876227378845,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.602918326854706,0.515652418136597,0.608762681484222,-0.187374100089073,0.574305176734924,0.796909391880035,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.602918326854706,0.515652418136597,0.608762681484222,-0.229550525546074,0.57556563615799,0.784876227378845,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.187374100089073,0.574305176734924,0.796909391880035,0.407288730144501,0.570921003818512,0.712857067584991,0.389561533927917,-0.19174836575985,0.900818705558777,0.21311217546463,-0.0906343460083008,0.972814798355103,0.407288730144501,0.570921003818512,0.712857067584991,0.402498751878738,0.624280869960785,0.669528305530548,0.646896421909332,0.568208158016205,0.508590698242188,0.659538865089417,0.541105449199677,0.521740734577179,0.646896421909332,0.568208158016205,0.508590698242188,0.752071380615234,0.531812727451324,0.389312088489532,0.861413061618805,0.450139224529266,0.23524908721447,0.659538865089417,0.541105449199677,0.521740734577179,-0.522960901260376,0.842813611030579,-0.127189248800278,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.505573391914368,0.856702506542206,0.102256529033184,-0.261382013559341,0.943598508834839,-0.203227147459984,0.331241726875305,0.767114758491516,0.549375832080841,0.563141405582428,0.729207217693329,0.388752609491348,\n0.646896421909332,0.568208158016205,0.508590698242188,0.402498751878738,0.624280869960785,0.669528305530548,0.699552476406097,0.686574220657349,0.198096364736557,0.923372685909271,0.289373397827148,-0.252281337976456,0.800276219844818,0.427209228277206,-0.420773357152939,0.633913099765778,0.759061396121979,-0.14825627207756,0.837489545345306,-0.137019574642181,0.528996109962463,0.80286830663681,0.57996016740799,0.138016909360886,0.69953316450119,0.693202435970306,-0.173562079668045,0.244611874222755,0.194429770112038,-0.949927449226379,0.421845316886902,0.35173287987709,-0.835661768913269,0.272203177213669,0.658502519130707,-0.701626539230347,0.458068341016769,-0.324115723371506,-0.827721178531647,0.246746584773064,-0.163684040307999,-0.955156326293945,0.244611874222755,0.194429770112038,-0.949927449226379,0.397901266813278,0.642865896224976,-0.65452116727829,0.421845316886902,0.35173287987709,-0.835661768913269,0.244611874222755,0.194429770112038,-0.949927449226379,0.69953316450119,0.693202435970306,-0.173562079668045,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.859436213970184,0.509185254573822,0.04582304880023,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.971036195755005,0.0917746424674988,-0.220604136586189,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.65424633026123,0.624168395996094,0.42705449461937,-0.93314254283905,0.297381490468979,0.20201313495636,-0.970878839492798,0.173829272389412,0.164856299757957,\n-0.599660336971283,0.629722774028778,0.493818551301956,0.393562316894531,0.580699145793915,-0.71266907453537,0.305637389421463,0.797388851642609,-0.520342946052551,0.633913099765778,0.759061396121979,-0.14825627207756,0.800276219844818,0.427209228277206,-0.420773357152939,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.723603487014771,0.683223187923431,0.098000094294548,-0.367227405309677,0.346865743398666,0.863034307956696,0.270604372024536,0.441341161727905,0.855564832687378,0.202111423015594,0.805501997470856,0.557061493396759,-0.320559352636337,0.729658544063568,0.604019939899445,0.305637389421463,0.797388851642609,-0.520342946052551,0.393562316894531,0.580699145793915,-0.71266907453537,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.13304828107357,0.622710764408112,-0.771057367324829,0.929460346698761,0.351613759994507,-0.111674785614014,0.861413061618805,0.450139224529266,0.23524908721447,0.752071380615234,0.531812727451324,0.389312088489532,0.909856855869293,0.391187816858292,0.138320595026016,0.644031763076782,0.764946699142456,0.00891874358057976,0.660727977752686,0.731441617012024,-0.168617248535156,0.632998824119568,0.753636837005615,-0.177042677998543,0.664407253265381,0.746931552886963,0.0256172958761454,0.686884999275208,0.723168194293976,-0.0722270235419273,0.664968013763428,0.745313882827759,0.0482159033417702,0.911552846431732,0.361514419317245,0.195904940366745,0.905105113983154,0.409709811210632,-0.113677680492401,0.664968013763428,0.745313882827759,0.0482159033417702,0.686884999275208,0.723168194293976,-0.0722270235419273,0.559431314468384,0.828812599182129,0.0103096608072519,0.392663985490799,0.918741226196289,-0.0415881127119064,-0.311181366443634,0.925608515739441,0.215441450476646,0.0790780261158943,0.992485880851746,0.0933722630143166,0.127702310681343,0.976085126399994,0.17592579126358,-0.227211818099022,0.921236872673035,0.315748959779739,-0.597852468490601,0.634572565555573,0.48978579044342,\n-0.227211818099022,0.921236872673035,0.315748959779739,-0.505573391914368,0.856702506542206,0.102256529033184,-0.780855476856232,0.547496676445007,0.300852298736572,-0.826885998249054,0.483063906431198,0.287938833236694,-0.796578586101532,0.576386690139771,0.182320937514305,-0.719103634357452,0.620088398456573,0.313656359910965,-0.732339918613434,0.57999724149704,0.356765151023865,-0.796578586101532,0.576386690139771,0.182320937514305,-0.703840732574463,0.696332275867462,0.140461906790733,-0.661795377731323,0.713703334331512,0.229465648531914,-0.719103634357452,0.620088398456573,0.313656359910965,-0.819103717803955,0.554178774356842,0.148171976208687,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.748181462287903,0.587628781795502,0.308085918426514,0.384443372488022,-0.766655147075653,-0.514240384101868,0.666895627975464,-0.56043928861618,0.491078466176987,-0.317059487104416,-0.547120869159698,0.774681866168976,-0.685397565364838,-0.694672048091888,-0.21831376850605,0.602886617183685,0.797378718852997,-0.0267372038215399,0.640394508838654,0.754049122333527,-0.145961552858353,0.660727977752686,0.731441617012024,-0.168617248535156,0.644031763076782,0.764946699142456,0.00891874358057976,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.807652175426483,0.443565607070923,0.388519644737244,-0.910823285579681,0.270006507635117,0.312245815992355,-0.807652175426483,0.443565607070923,0.388519644737244,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.762878954410553,0.502556443214417,0.40675875544548,0.305622786283493,0.734605193138123,-0.605763852596283,0.445575773715973,0.0603602342307568,-0.89320707321167,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.1213503703475,0.714234888553619,-0.689305901527405,0.906213641166687,0.328242212533951,-0.266521811485291,0.957429826259613,0.286321878433228,0.0367136411368847,\n0.909856855869293,0.391187816858292,0.138320595026016,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.828168988227844,0.353571265935898,-0.434883326292038,0.923372685909271,0.289373397827148,-0.252281337976456,0.936574637889862,0.00382779608480632,-0.350447237491608,0.426684230566025,0.0072528044693172,-0.904371619224548,0.430813550949097,0.499041706323624,-0.751902282238007,0.828168988227844,0.353571265935898,-0.434883326292038,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.430813550949097,0.499041706323624,-0.751902282238007,0.426684230566025,0.0072528044693172,-0.904371619224548,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.896252572536469,0.421273946762085,0.13877908885479,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.893702745437622,0.422671109437943,0.150480940937996,-0.891313374042511,0.424901962280273,0.158173263072968,-0.797426640987396,0.177673250436783,0.576665341854095,-0.878546297550201,0.378490209579468,0.291378676891327,-0.896252572536469,0.421273946762085,0.13877908885479,-0.891313374042511,0.424901962280273,0.158173263072968,-0.870848000049591,0.464649707078934,0.160388261079788,-0.793782532215118,0.557114601135254,0.243993073701859,-0.855198562145233,0.434895634651184,0.281959563493729,-0.908547103404999,0.339473843574524,0.243515312671661,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.809561967849731,0.578427612781525,-0.10015495121479,0.647232055664063,0.709673702716827,-0.278305619955063,0.678524672985077,0.663206517696381,-0.31585019826889,0.749007403850555,0.651603639125824,-0.120002605021,0.702042996883392,0.707515120506287,-0.0809817835688591,0.73427015542984,0.669211447238922,-0.114032231271267,0.717039883136749,0.690781950950623,-0.093134693801403,0.702042996883392,0.707515120506287,-0.0809817835688591,0.749007403850555,0.651603639125824,-0.120002605021,\n0.727223694324493,0.663318991661072,-0.176503792405128,0.733190476894379,0.653582632541656,-0.187780305743217,0.717039883136749,0.690781950950623,-0.093134693801403,0.73427015542984,0.669211447238922,-0.114032231271267,0.709426641464233,0.694044709205627,-0.122539132833481,0.640394508838654,0.754049122333527,-0.145961552858353,0.650463998317719,0.740020751953125,-0.17107281088829,0.712908089160919,0.682124614715576,-0.162689983844757,0.640394508838654,0.754049122333527,-0.145961552858353,0.602886617183685,0.797378718852997,-0.0267372038215399,0.752064108848572,0.658552646636963,-0.0266083907335997,0.650463998317719,0.740020751953125,-0.17107281088829,0.602886617183685,0.797378718852997,-0.0267372038215399,0.471274465322495,0.860716044902802,0.192531242966652,0.599858105182648,0.75833523273468,0.255142837762833,0.752064108848572,0.658552646636963,-0.0266083907335997,0.471274465322495,0.860716044902802,0.192531242966652,0.130269169807434,0.905642747879028,0.403535813093185,0.15803250670433,0.792331993579865,0.589267194271088,0.599858105182648,0.75833523273468,0.255142837762833,-0.661795377731323,0.713703334331512,0.229465648531914,-0.748181462287903,0.587628781795502,0.308085918426514,-0.390775978565216,0.856176793575287,0.33801680803299,-0.382025182247162,0.832321286201477,0.401619255542755,-0.703840732574463,0.696332275867462,0.140461906790733,-0.819103717803955,0.554178774356842,0.148171976208687,-0.748181462287903,0.587628781795502,0.308085918426514,-0.661795377731323,0.713703334331512,0.229465648531914,-0.755123674869537,0.652067303657532,0.067797377705574,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.729536950588226,0.676141858100891,0.102995604276657,-0.755123674869537,0.652067303657532,0.067797377705574,-0.767313361167908,0.622622489929199,0.153530210256577,-0.615695953369141,0.768994450569153,0.171947792172432,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.738506555557251,0.594659924507141,0.317785561084747,-0.596384108066559,0.73188179731369,0.329658985137939,\n-0.615695953369141,0.768994450569153,0.171947792172432,-0.767313361167908,0.622622489929199,0.153530210256577,-0.613772094249725,0.718873798847198,0.326349943876266,-0.723107695579529,0.620889544487,0.302673906087875,-0.713916778564453,0.653736412525177,0.250901401042938,-0.63234806060791,0.720907807350159,0.283598214387894,-0.483161300420761,0.708275854587555,-0.514684855937958,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.143811345100403,0.67733633518219,-0.721480309963226,-0.1213503703475,0.714234888553619,-0.689305901527405,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.483161300420761,0.708275854587555,-0.514684855937958,0.305622786283493,0.734605193138123,-0.605763852596283,0.300025343894959,0.704358696937561,-0.643322348594666,0.678524672985077,0.663206517696381,-0.31585019826889,0.647232055664063,0.709673702716827,-0.278305619955063,-0.732339918613434,0.57999724149704,0.356765151023865,-0.76466292142868,0.188213840126991,0.616332828998566,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.826885998249054,0.483063906431198,0.287938833236694,-0.404268890619278,0.753554701805115,0.518383979797363,-0.367227405309677,0.346865743398666,0.863034307956696,-0.76466292142868,0.188213840126991,0.616332828998566,-0.732339918613434,0.57999724149704,0.356765151023865,0.144893497228622,0.857636988162994,0.493421345949173,0.270604372024536,0.441341161727905,0.855564832687378,-0.367227405309677,0.346865743398666,0.863034307956696,-0.404268890619278,0.753554701805115,0.518383979797363,0.526539385318756,0.801656424999237,0.283025234937668,0.664407253265381,0.746931552886963,0.0256172958761454,0.911552846431732,0.361514419317245,0.195904940366745,0.71388167142868,0.36040398478508,0.60040146112442,0.664407253265381,0.746931552886963,0.0256172958761454,0.632998824119568,0.753636837005615,-0.177042677998543,0.905105113983154,0.409709811210632,-0.113677680492401,0.911552846431732,0.361514419317245,0.195904940366745,\n0.834402143955231,0.550802052021027,0.0197512619197369,0.75202214717865,0.649503469467163,-0.112284608185291,0.939418137073517,0.146130084991455,-0.310063809156418,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.721381485462189,0.602611780166626,-0.341273874044418,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.936574637889862,0.00382779608480632,-0.350447237491608,0.972268581390381,0.233539223670959,0.0123813217505813,0.350197345018387,0.67135888338089,-0.653176128864288,0.426684230566025,0.0072528044693172,-0.904371619224548,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.721381485462189,0.602611780166626,-0.341273874044418,0.426684230566025,0.0072528044693172,-0.904371619224548,0.350197345018387,0.67135888338089,-0.653176128864288,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.809561967849731,0.578427612781525,-0.10015495121479,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.870848000049591,0.464649707078934,0.160388261079788,-0.908547103404999,0.339473843574524,0.243515312671661,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.797426640987396,0.177673250436783,0.576665341854095,-0.891313374042511,0.424901962280273,0.158173263072968,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.893702745437622,0.422671109437943,0.150480940937996,-0.941741049289703,0.11614803224802,0.315647661685944,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.891313374042511,0.424901962280273,0.158173263072968,-0.413176447153091,-0.602903425693512,0.682490050792694,-0.712531268596649,-0.546411395072937,-0.440152049064636,0.43010625243187,-0.644480228424072,-0.632181823253632,0.695957362651825,-0.547607183456421,0.464510202407837,0.360958188772202,-0.844728171825409,-0.395149946212769,\n0.668817698955536,-0.562513530254364,0.486067235469818,-0.450368136167526,-0.655528962612152,0.606176793575287,-0.595698416233063,-0.718034863471985,-0.359957367181778,0.350197345018387,0.67135888338089,-0.653176128864288,0.320632994174957,0.735152721405029,-0.597281336784363,-0.139554515480995,0.707306146621704,-0.692995369434357,-0.177267998456955,0.365929782390594,-0.913603544235229,0.320632994174957,0.735152721405029,-0.597281336784363,0.300025343894959,0.704358696937561,-0.643322348594666,-0.143811345100403,0.67733633518219,-0.721480309963226,-0.139554515480995,0.707306146621704,-0.692995369434357,0.144893497228622,0.857636988162994,0.493421345949173,-0.404268890619278,0.753554701805115,0.518383979797363,-0.416523069143295,0.747589528560638,0.517318487167358,0.128903344273567,0.870382189750671,0.475203901529312,0.128903344273567,0.870382189750671,0.475203901529312,-0.416523069143295,0.747589528560638,0.517318487167358,-0.382025182247162,0.832321286201477,0.401619255542755,0.130269169807434,0.905642747879028,0.403535813093185,0.57691216468811,0.718079447746277,0.389273971319199,0.392663985490799,0.918741226196289,-0.0415881127119064,0.0790780261158943,0.992485880851746,0.0933722630143166,0.202111423015594,0.805501997470856,0.557061493396759,-0.187374100089073,0.574305176734924,0.796909391880035,-0.00418555224314332,0.628182470798492,0.77805483341217,0.402498751878738,0.624280869960785,0.669528305530548,0.407288730144501,0.570921003818512,0.712857067584991,0.331241726875305,0.767114758491516,0.549375832080841,0.402498751878738,0.624280869960785,0.669528305530548,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.0206129420548677,0.755090236663818,0.655296742916107,0.272203177213669,0.658502519130707,-0.701626539230347,0.421845316886902,0.35173287987709,-0.835661768913269,-0.180025935173035,0.229685723781586,-0.956470131874084,-0.122567981481552,0.664539813995361,-0.737132251262665,0.421845316886902,0.35173287987709,-0.835661768913269,0.397901266813278,0.642865896224976,-0.65452116727829,-0.154303342103958,0.42424476146698,-0.892304241657257,\n-0.180025935173035,0.229685723781586,-0.956470131874084,0.71388167142868,0.36040398478508,0.60040146112442,0.57691216468811,0.718079447746277,0.389273971319199,0.202111423015594,0.805501997470856,0.557061493396759,0.270604372024536,0.441341161727905,0.855564832687378,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.178336516022682,0.738517105579376,-0.650221943855286,0.127702310681343,0.976085126399994,0.17592579126358,0.0790780261158943,0.992485880851746,0.0933722630143166,0.392663985490799,0.918741226196289,-0.0415881127119064,0.410511314868927,0.907221972942352,0.0918079540133476,-0.330185979604721,-0.571054816246033,0.751580774784088,-0.717249631881714,-0.625881135463715,-0.306309938430786,0.391103774309158,-0.641535997390747,-0.659901022911072,0.705251514911652,-0.583878755569458,0.402126759290695,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.627380669116974,0.542527735233307,-0.558620691299438,0.15803250670433,0.792331993579865,0.589267194271088,0.130269169807434,0.905642747879028,0.403535813093185,-0.382025182247162,0.832321286201477,0.401619255542755,-0.390775978565216,0.856176793575287,0.33801680803299,0.300025343894959,0.704358696937561,-0.643322348594666,0.305622786283493,0.734605193138123,-0.605763852596283,-0.1213503703475,0.714234888553619,-0.689305901527405,-0.143811345100403,0.67733633518219,-0.721480309963226,0.144893497228622,0.857636988162994,0.493421345949173,0.526539385318756,0.801656424999237,0.283025234937668,0.71388167142868,0.36040398478508,0.60040146112442,0.270604372024536,0.441341161727905,0.855564832687378,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.198126822710037,0.0765142217278481,-0.977185368537903,\n-0.147367119789124,-0.401798576116562,-0.903792500495911,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.648241400718689,-0.506932020187378,-0.568157553672791,0.11251799762249,-0.874383747577667,-0.472009360790253,0.323624908924103,-0.91464102268219,0.242278248071671,-0.248996630311012,-0.917850255966187,0.309114128351212,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.671025335788727,-0.589844524860382,-0.449230968952179,0.459699690341949,-0.614600598812103,-0.641047835350037,0.596454858779907,-0.699761033058167,0.393161594867706,-0.412575572729111,-0.667341589927673,0.620029509067535,0.773792564868927,-0.604486048221588,-0.189318999648094,0.180837735533714,-0.611773073673248,0.770085334777832,-0.724370777606964,-0.668023824691772,0.170385435223579,-0.195960268378258,-0.58412891626358,-0.787650287151337,0.723087668418884,-0.507770240306854,-0.468309193849564,0.581261336803436,-0.682449996471405,0.443167299032211,-0.437470376491547,-0.700090348720551,0.564352035522461,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.326672613620758,-0.732156813144684,0.597688376903534,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.147367119789124,-0.401798576116562,-0.903792500495911,0.308205276727676,-0.725507915019989,-0.615343689918518,-0.964107573032379,-0.248898640275002,-0.0924450159072876,0.259815812110901,-0.928046464920044,-0.266881018877029,0.459699690341949,-0.614600598812103,-0.641047835350037,-0.671025335788727,-0.589844524860382,-0.449230968952179,0.259815812110901,-0.928046464920044,-0.266881018877029,0.303018242120743,-0.938679337501526,0.164502277970314,0.596454858779907,-0.699761033058167,0.393161594867706,0.459699690341949,-0.614600598812103,-0.641047835350037,-0.412575572729111,-0.667341589927673,0.620029509067535,0.596454858779907,-0.699761033058167,0.393161594867706,0.303018242120743,-0.938679337501526,0.164502277970314,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.964107573032379,-0.248898640275002,-0.0924450159072876,\n-0.671025335788727,-0.589844524860382,-0.449230968952179,-0.412575572729111,-0.667341589927673,0.620029509067535,0.0517410226166248,-0.448791861534119,-0.892137169837952,-0.0855747610330582,-0.285937398672104,-0.954419612884521,0.37071630358696,-0.925935029983521,-0.0722067281603813,0.768725872039795,-0.625621736049652,-0.132883325219154,0.311763882637024,-0.736566185951233,0.600227952003479,0.414378970861435,-0.480131238698959,0.773152053356171,0.768725872039795,-0.625621736049652,-0.132883325219154,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.47402635216713,-0.576445937156677,0.665589272975922,0.414378970861435,-0.480131238698959,0.773152053356171,0.311763882637024,-0.736566185951233,0.600227952003479,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.628591358661652,-0.444956004619598,-0.637876987457275,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.628591358661652,-0.444956004619598,-0.637876987457275,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.0855747610330582,-0.285937398672104,-0.954419612884521,0.0517410226166248,-0.448791861534119,-0.892137169837952,0.773792564868927,-0.604486048221588,-0.189318999648094,0.542883396148682,-0.82672655582428,-0.147651195526123,0.0959865897893906,-0.91358608007431,0.395154505968094,0.180837735533714,-0.611773073673248,0.770085334777832,-0.518468260765076,-0.848432958126068,0.106546267867088,-0.724370777606964,-0.668023824691772,0.170385435223579,0.180837735533714,-0.611773073673248,0.770085334777832,0.0959865897893906,-0.91358608007431,0.395154505968094,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.195960268378258,-0.58412891626358,-0.787650287151337,-0.724370777606964,-0.668023824691772,0.170385435223579,-0.518468260765076,-0.848432958126068,0.106546267867088,0.542883396148682,-0.82672655582428,-0.147651195526123,0.773792564868927,-0.604486048221588,-0.189318999648094,-0.195960268378258,-0.58412891626358,-0.787650287151337,\n-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.437470376491547,-0.700090348720551,0.564352035522461,-0.259535163640976,-0.932749211788177,0.250240743160248,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.723087668418884,-0.507770240306854,-0.468309193849564,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.464242339134216,-0.872838377952576,-0.150440022349358,0.581261336803436,-0.682449996471405,0.443167299032211,0.723087668418884,-0.507770240306854,-0.468309193849564,0.464242339134216,-0.872838377952576,-0.150440022349358,0.323624908924103,-0.91464102268219,0.242278248071671,-0.437470376491547,-0.700090348720551,0.564352035522461,0.581261336803436,-0.682449996471405,0.443167299032211,0.323624908924103,-0.91464102268219,0.242278248071671,-0.259535163640976,-0.932749211788177,0.250240743160248,0.810118317604065,-0.284595668315887,-0.51255601644516,0.94776064157486,-0.269029140472412,-0.171385690569878,0.631753981113434,-0.695992708206177,0.341293185949326,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.248996630311012,-0.917850255966187,0.309114128351212,-0.438560724258423,-0.682490348815918,0.584697723388672,0.631753981113434,-0.695992708206177,0.341293185949326,0.94776064157486,-0.269029140472412,-0.171385690569878,-0.507440745830536,-0.861680686473846,0.00320725026540458,-0.663442015647888,-0.730678915977478,-0.161099418997765,-0.438560724258423,-0.682490348815918,0.584697723388672,-0.248996630311012,-0.917850255966187,0.309114128351212,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.165543153882027,-0.540198087692261,-0.825094819068909,-0.663442015647888,-0.730678915977478,-0.161099418997765,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.810118317604065,-0.284595668315887,-0.51255601644516,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.165543153882027,-0.540198087692261,-0.825094819068909,-0.0872491747140884,-0.891694486141205,-0.444149196147919,\n0.445575773715973,0.0603602342307568,-0.89320707321167,0.308205276727676,-0.725507915019989,-0.615343689918518,-0.147367119789124,-0.401798576116562,-0.903792500495911,-0.198126822710037,0.0765142217278481,-0.977185368537903,0.308205276727676,-0.725507915019989,-0.615343689918518,0.445575773715973,0.0603602342307568,-0.89320707321167,0.885131120681763,0.0417929887771606,-0.463461130857468,0.620603084564209,-0.695841789245605,-0.361463725566864,0.259815812110901,-0.928046464920044,-0.266881018877029,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.739399552345276,-0.3774254322052,0.557528793811798,0.311763882637024,-0.736566185951233,0.600227952003479,0.259815812110901,-0.928046464920044,-0.266881018877029,0.311763882637024,-0.736566185951233,0.600227952003479,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.518468260765076,-0.848432958126068,0.106546267867088,-0.149650141596794,-0.977229058742523,-0.150426745414734,-0.518468260765076,-0.848432958126068,0.106546267867088,0.0959865897893906,-0.91358608007431,0.395154505968094,0.464242339134216,-0.872838377952576,-0.150440022349358,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.0959865897893906,-0.91358608007431,0.395154505968094,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.464242339134216,-0.872838377952576,-0.150440022349358,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.262460768222809,-0.84521484375,0.465538620948792,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.663442015647888,-0.730678915977478,-0.161099418997765,0.551329076290131,-0.7074014544487,-0.442288815975189,0.631753981113434,-0.695992708206177,0.341293185949326,-0.438560724258423,-0.682490348815918,0.584697723388672,-0.326672613620758,-0.732156813144684,0.597688376903534,-0.262460768222809,-0.84521484375,0.465538620948792,-0.648241400718689,-0.506932020187378,-0.568157553672791,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.262460768222809,-0.84521484375,0.465538620948792,\n-0.326672613620758,-0.732156813144684,0.597688376903534,-0.3234041929245,-0.738465428352356,0.591674447059631,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.326672613620758,-0.732156813144684,0.597688376903534,0.308205276727676,-0.725507915019989,-0.615343689918518,0.620603084564209,-0.695841789245605,-0.361463725566864,-0.3234041929245,-0.738465428352356,0.591674447059631,0.542883396148682,-0.82672655582428,-0.147651195526123,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.262460768222809,-0.84521484375,0.465538620948792,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.3234041929245,-0.738465428352356,0.591674447059631,0.348949402570724,-0.852244853973389,0.389760226011276,0.798132300376892,-0.595748007297516,0.0898283571004868,-0.333872824907303,-0.734721601009369,0.590519309043884,0.798132300376892,-0.595748007297516,0.0898283571004868,0.810118317604065,-0.284595668315887,-0.51255601644516,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.301147669553757,-0.68056708574295,0.667935967445374,-0.598684787750244,-0.729470372200012,-0.330831557512283,0.478905141353607,-0.688271880149841,-0.544914424419403,0.691426575183868,-0.534520328044891,0.486021935939789,-0.29621621966362,-0.72027575969696,0.627262949943542,-0.593355655670166,-0.709652066230774,-0.379898726940155,0.420935273170471,-0.595206916332245,-0.68450140953064,0.750927150249481,-0.519762933254242,0.407375574111938,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.522674918174744,-0.84270977973938,-0.129039376974106,0.338333457708359,-0.796955585479736,-0.500392079353333,0.695649981498718,-0.635026633739471,0.335875421762466,0.207811132073402,-0.962575078010559,-0.173964589834213,-0.261420041322708,-0.954043209552765,0.146496221423149,0.181094169616699,-0.00969368312507868,0.983417987823486,0.306766599416733,-0.118459150195122,0.944384276866913,0.306935548782349,-0.919691801071167,0.244862332940102,\n0.201402872800827,-0.92625367641449,-0.318576484918594,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.191650345921516,-0.911473035812378,0.363987594842911,0.400767505168915,-0.84773463010788,0.347464233636856,0.207801967859268,-0.930255472660065,-0.302395612001419,-0.262365102767944,-0.963967621326447,-0.0439423173666,-0.118260890245438,-0.832547545433044,0.541182935237885,0.362296313047409,-0.902348458766937,0.233470931649208,0.128298655152321,-0.92551976442337,-0.356304168701172,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.23048010468483,-0.946770489215851,0.224732384085655,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.192425131797791,-0.974552154541016,0.114980764687061,0.706917345523834,-0.10402026027441,0.699605345726013,0.814850926399231,-0.0293116569519043,0.57892906665802,0.395999073982239,-0.883323311805725,0.250847846269608,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.211911484599113,-0.951958835124969,-0.221060931682587,0.11251799762249,-0.874383747577667,-0.472009360790253,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.18037211894989,-0.916134774684906,0.357998490333557,0.339713275432587,-0.937209665775299,0.0789491534233093,0.201402872800827,-0.92625367641449,-0.318576484918594,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.900666117668152,-0.271470487117767,0.339270144701004,0.362296313047409,-0.902348458766937,0.233470931649208,-0.191650345921516,-0.911473035812378,0.363987594842911,0.395999073982239,-0.883323311805725,0.250847846269608,0.211911484599113,-0.951958835124969,-0.221060931682587,-0.262365102767944,-0.963967621326447,-0.0439423173666,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.23048010468483,-0.946770489215851,0.224732384085655,0.339713275432587,-0.937209665775299,0.0789491534233093,0.200983673334122,-0.912257730960846,-0.356919288635254,0.207811132073402,-0.962575078010559,-0.173964589834213,-0.812849164009094,-0.351107835769653,0.46475750207901,\n-0.665187239646912,-0.279087424278259,0.692557692527771,0.400767505168915,-0.84773463010788,0.347464233636856,0.295632928609848,-0.949930250644684,-0.101162008941174,0.339781612157822,-0.868737816810608,0.360337436199188,-0.192425131797791,-0.974552154541016,0.114980764687061,0.958362102508545,-0.256494760513306,0.125509008765221,0.863034009933472,-0.335786014795303,-0.377385854721069,-0.314595848321915,-0.93869549036026,-0.140997022390366,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.18037211894989,-0.916134774684906,0.357998490333557,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.794416069984436,-0.305554151535034,-0.524918794631958,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.262365102767944,-0.963967621326447,-0.0439423173666,0.306935548782349,-0.919691801071167,0.244862332940102,-0.191650345921516,-0.911473035812378,0.363987594842911,0.306935548782349,-0.919691801071167,0.244862332940102,-0.262365102767944,-0.963967621326447,-0.0439423173666,0.207801967859268,-0.930255472660065,-0.302395612001419,-0.192425131797791,-0.974552154541016,0.114980764687061,-0.124663934111595,-0.874086141586304,0.469502240419388,0.912856459617615,-0.241107016801834,0.329485177993774,0.970349192619324,-0.239411205053329,0.0332370884716511,-0.0856366232037544,-0.288858771324158,0.953533947467804,0.826135098934174,-0.33500149846077,0.453072637319565,0.814850926399231,-0.0293116569519043,0.57892906665802,0.181094169616699,-0.00969368312507868,0.983417987823486,0.295632928609848,-0.949930250644684,-0.101162008941174,0.814850926399231,-0.0293116569519043,0.57892906665802,0.826135098934174,-0.33500149846077,0.453072637319565,0.480840384960175,-0.739749372005463,-0.470705211162567,0.480840384960175,-0.739749372005463,-0.470705211162567,-0.64503401517868,-0.763977766036987,0.0164064429700375,-0.261420041322708,-0.954043209552765,0.146496221423149,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.261420041322708,-0.954043209552765,0.146496221423149,-0.64503401517868,-0.763977766036987,0.0164064429700375,\n-0.0856366232037544,-0.288858771324158,0.953533947467804,0.181094169616699,-0.00969368312507868,0.983417987823486,-0.191650345921516,-0.911473035812378,0.363987594842911,-0.415498435497284,-0.625033140182495,0.660828769207001,0.722060799598694,-0.55972957611084,0.406609207391739,0.395999073982239,-0.883323311805725,0.250847846269608,0.395615637302399,-0.602471053600311,-0.693193197250366,0.200983673334122,-0.912257730960846,-0.356919288635254,0.395999073982239,-0.883323311805725,0.250847846269608,0.722060799598694,-0.55972957611084,0.406609207391739,-0.389462172985077,-0.886311650276184,-0.250541120767593,0.200983673334122,-0.912257730960846,-0.356919288635254,0.395615637302399,-0.602471053600311,-0.693193197250366,-0.709003865718842,-0.541708588600159,-0.451514542102814,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.709003865718842,-0.541708588600159,-0.451514542102814,-0.415498435497284,-0.625033140182495,0.660828769207001,-0.191650345921516,-0.911473035812378,0.363987594842911,-0.23048010468483,-0.946770489215851,0.224732384085655,-0.466174095869064,-0.668627381324768,0.579326450824738,0.705481588840485,-0.662966072559357,0.250542849302292,0.339713275432587,-0.937209665775299,0.0789491534233093,0.282899409532547,-0.764817476272583,-0.578811049461365,0.11251799762249,-0.874383747577667,-0.472009360790253,0.339713275432587,-0.937209665775299,0.0789491534233093,0.705481588840485,-0.662966072559357,0.250542849302292,-0.334644585847855,-0.867584347724915,-0.367845624685287,0.11251799762249,-0.874383747577667,-0.472009360790253,0.282899409532547,-0.764817476272583,-0.578811049461365,-0.557026326656342,-0.731577575206757,-0.393085092306137,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.557026326656342,-0.731577575206757,-0.393085092306137,-0.466174095869064,-0.668627381324768,0.579326450824738,-0.23048010468483,-0.946770489215851,0.224732384085655,0.384443372488022,-0.766655147075653,-0.514240384101868,0.211911484599113,-0.951958835124969,-0.221060931682587,0.339781612157822,-0.868737816810608,0.360337436199188,\n0.666895627975464,-0.56043928861618,0.491078466176987,-0.685397565364838,-0.694672048091888,-0.21831376850605,-0.262365102767944,-0.963967621326447,-0.0439423173666,0.211911484599113,-0.951958835124969,-0.221060931682587,0.384443372488022,-0.766655147075653,-0.514240384101868,-0.317059487104416,-0.547120869159698,0.774681866168976,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.262365102767944,-0.963967621326447,-0.0439423173666,-0.685397565364838,-0.694672048091888,-0.21831376850605,-0.317059487104416,-0.547120869159698,0.774681866168976,0.666895627975464,-0.56043928861618,0.491078466176987,0.339781612157822,-0.868737816810608,0.360337436199188,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.610171139240265,-0.773055195808411,0.173426955938339,-0.343847513198853,-0.196072369813919,0.918327033519745,-0.441097885370255,0.233705267310143,0.866495549678802,-0.812849164009094,-0.351107835769653,0.46475750207901,-0.441097885370255,0.233705267310143,0.866495549678802,-0.343847513198853,-0.196072369813919,0.918327033519745,0.545981824398041,-0.584509074687958,0.600210785865784,0.306766599416733,-0.118459150195122,0.944384276866913,0.207811132073402,-0.962575078010559,-0.173964589834213,0.306766599416733,-0.118459150195122,0.944384276866913,0.545981824398041,-0.584509074687958,0.600210785865784,0.314525902271271,-0.770808696746826,-0.554010331630707,-0.610171139240265,-0.773055195808411,0.173426955938339,-0.812849164009094,-0.351107835769653,0.46475750207901,0.207811132073402,-0.962575078010559,-0.173964589834213,0.314525902271271,-0.770808696746826,-0.554010331630707,-0.712531268596649,-0.546411395072937,-0.440152049064636,-0.413176447153091,-0.602903425693512,0.682490050792694,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.413176447153091,-0.602903425693512,0.682490050792694,0.695957362651825,-0.547607183456421,0.464510202407837,0.306935548782349,-0.919691801071167,0.244862332940102,\n0.306935548782349,-0.919691801071167,0.244862332940102,0.695957362651825,-0.547607183456421,0.464510202407837,0.43010625243187,-0.644480228424072,-0.632181823253632,0.201402872800827,-0.92625367641449,-0.318576484918594,-0.712531268596649,-0.546411395072937,-0.440152049064636,-0.956566870212555,-0.244721978902817,-0.158401101827621,0.201402872800827,-0.92625367641449,-0.318576484918594,0.43010625243187,-0.644480228424072,-0.632181823253632,0.668817698955536,-0.562513530254364,0.486067235469818,0.362296313047409,-0.902348458766937,0.233470931649208,-0.900666117668152,-0.271470487117767,0.339270144701004,-0.450368136167526,-0.655528962612152,0.606176793575287,0.128298655152321,-0.92551976442337,-0.356304168701172,0.362296313047409,-0.902348458766937,0.233470931649208,0.668817698955536,-0.562513530254364,0.486067235469818,0.360958188772202,-0.844728171825409,-0.395149946212769,0.128298655152321,-0.92551976442337,-0.356304168701172,0.360958188772202,-0.844728171825409,-0.395149946212769,-0.595698416233063,-0.718034863471985,-0.359957367181778,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.595698416233063,-0.718034863471985,-0.359957367181778,-0.450368136167526,-0.655528962612152,0.606176793575287,-0.900666117668152,-0.271470487117767,0.339270144701004,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.330185979604721,-0.571054816246033,0.751580774784088,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.717249631881714,-0.625881135463715,-0.306309938430786,0.400767505168915,-0.84773463010788,0.347464233636856,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.330185979604721,-0.571054816246033,0.751580774784088,0.705251514911652,-0.583878755569458,0.402126759290695,0.705251514911652,-0.583878755569458,0.402126759290695,0.391103774309158,-0.641535997390747,-0.659901022911072,0.207801967859268,-0.930255472660065,-0.302395612001419,0.400767505168915,-0.84773463010788,0.347464233636856,-0.717249631881714,-0.625881135463715,-0.306309938430786,\n-0.939882695674896,-0.341330021619797,0.0106942849233747,0.207801967859268,-0.930255472660065,-0.302395612001419,0.391103774309158,-0.641535997390747,-0.659901022911072,0.0837007611989975,-0.567488670349121,0.819115877151489,0.623615741729736,-0.765475749969482,-0.158588528633118,0.970349192619324,-0.239411205053329,0.0332370884716511,0.706917345523834,-0.10402026027441,0.699605345726013,0.970349192619324,-0.239411205053329,0.0332370884716511,0.623615741729736,-0.765475749969482,-0.158588528633118,-0.668955087661743,-0.737109065055847,-0.0957564637064934,-0.192425131797791,-0.974552154541016,0.114980764687061,-0.192425131797791,-0.974552154541016,0.114980764687061,-0.668955087661743,-0.737109065055847,-0.0957564637064934,0.0837007611989975,-0.567488670349121,0.819115877151489,0.706917345523834,-0.10402026027441,0.699605345726013,0.691426575183868,-0.534520328044891,0.486021935939789,0.478905141353607,-0.688271880149841,-0.544914424419403,0.863034009933472,-0.335786014795303,-0.377385854721069,0.912856459617615,-0.241107016801834,0.329485177993774,-0.598684787750244,-0.729470372200012,-0.330831557512283,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.863034009933472,-0.335786014795303,-0.377385854721069,0.478905141353607,-0.688271880149841,-0.544914424419403,-0.301147669553757,-0.68056708574295,0.667935967445374,0.691426575183868,-0.534520328044891,0.486021935939789,0.912856459617615,-0.241107016801834,0.329485177993774,-0.124663934111595,-0.874086141586304,0.469502240419388,0.958362102508545,-0.256494760513306,0.125509008765221,0.750927150249481,-0.519762933254242,0.407375574111938,0.420935273170471,-0.595206916332245,-0.68450140953064,0.794416069984436,-0.305554151535034,-0.524918794631958,-0.593355655670166,-0.709652066230774,-0.379898726940155,-0.326996743679047,-0.921505987644196,-0.209522947669029,0.794416069984436,-0.305554151535034,-0.524918794631958,0.420935273170471,-0.595206916332245,-0.68450140953064,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.326996743679047,-0.921505987644196,-0.209522947669029,\n-0.593355655670166,-0.709652066230774,-0.379898726940155,-0.29621621966362,-0.72027575969696,0.627262949943542,0.750927150249481,-0.519762933254242,0.407375574111938,0.958362102508545,-0.256494760513306,0.125509008765221,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.29621621966362,-0.72027575969696,0.627262949943542,0.338333457708359,-0.796955585479736,-0.500392079353333,0.680100440979004,-0.471440553665161,-0.56143319606781,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.695649981498718,-0.635026633739471,0.335875421762466,-0.312811404466629,-0.918802440166473,-0.240730464458466,0.680100440979004,-0.471440553665161,-0.56143319606781,0.338333457708359,-0.796955585479736,-0.500392079353333,-0.522674918174744,-0.84270977973938,-0.129039376974106,-0.522674918174744,-0.84270977973938,-0.129039376974106,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.18037211894989,-0.916134774684906,0.357998490333557,-0.312811404466629,-0.918802440166473,-0.240730464458466,0.695649981498718,-0.635026633739471,0.335875421762466,0.931363761425018,-0.361004918813705,-0.0472966246306896,-0.18037211894989,-0.916134774684906,0.357998490333557,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.259535163640976,-0.932749211788177,0.250240743160248,-0.334644585847855,-0.867584347724915,-0.367845624685287,0.128298655152321,-0.92551976442337,-0.356304168701172,0.303018242120743,-0.938679337501526,0.164502277970314,-0.918069899082184,-0.187107101082802,0.349483251571655,0.303018242120743,-0.938679337501526,0.164502277970314,0.128298655152321,-0.92551976442337,-0.356304168701172,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.900666117668152,-0.271470487117767,0.339270144701004,0.181094169616699,-0.00969368312507868,0.983417987823486,0.814850926399231,-0.0293116569519043,0.57892906665802,0.599858105182648,0.75833523273468,0.255142837762833,\n0.15803250670433,0.792331993579865,0.589267194271088,0.706917345523834,-0.10402026027441,0.699605345726013,0.970349192619324,-0.239411205053329,0.0332370884716511,0.752064108848572,0.658552646636963,-0.0266083907335997,0.599858105182648,0.75833523273468,0.255142837762833,0.912856459617615,-0.241107016801834,0.329485177993774,0.863034009933472,-0.335786014795303,-0.377385854721069,0.650463998317719,0.740020751953125,-0.17107281088829,0.752064108848572,0.658552646636963,-0.0266083907335997,0.864170670509338,0.408057361841202,-0.2944455742836,0.906549096107483,0.409386813640594,-0.10281577706337,0.740322411060333,0.655164897441864,-0.150604203343391,0.600557744503021,0.788931846618652,-0.130065008997917,0.816485822200775,0.512709319591522,0.265480846166611,0.968974769115448,0.149661242961884,0.196696132421494,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.909856855869293,0.391187816858292,0.138320595026016,0.660223960876465,0.688790857791901,0.299451887607574,0.359505623579025,0.919594645500183,-0.158434361219406,0.631004393100739,0.719356596469879,-0.29044708609581,0.816485822200775,0.512709319591522,0.265480846166611,0.331241726875305,0.767114758491516,0.549375832080841,0.00761288125067949,0.965830504894257,-0.259062767028809,0.258335798978806,0.945306360721588,-0.199144557118416,0.563141405582428,0.729207217693329,0.388752609491348,-0.261382013559341,0.943598508834839,-0.203227147459984,-0.505573391914368,0.856702506542206,0.102256529033184,0.0491388663649559,0.993503928184509,-0.102641858160496,0.00761288125067949,0.965830504894257,-0.259062767028809,-0.413429826498032,0.428489029407501,0.803413331508636,-0.941741049289703,0.11614803224802,0.315647661685944,-0.520070433616638,0.75630134344101,0.396906822919846,-0.158630818128586,0.588066816329956,0.793103873729706,-0.0206129420548677,0.755090236663818,0.655296742916107,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.229550525546074,0.57556563615799,0.784876227378845,-0.158630818128586,0.588066816329956,0.793103873729706,-0.261382013559341,0.943598508834839,-0.203227147459984,\n-0.0206129420548677,0.755090236663818,0.655296742916107,-0.158630818128586,0.588066816329956,0.793103873729706,-0.522960901260376,0.842813611030579,-0.127189248800278,0.00761288125067949,0.965830504894257,-0.259062767028809,0.331241726875305,0.767114758491516,0.549375832080841,-0.0206129420548677,0.755090236663818,0.655296742916107,-0.261382013559341,0.943598508834839,-0.203227147459984,0.494772255420685,0.860163271427155,-0.123772226274014,0.470422744750977,0.855190873146057,-0.217602953314781,0.647329449653625,0.721940755844116,-0.244471147656441,0.669141590595245,0.742036402225494,-0.0403924956917763,0.258335798978806,0.945306360721588,-0.199144557118416,0.303004235029221,0.934939086437225,-0.184600368142128,0.470422744750977,0.855190873146057,-0.217602953314781,0.494772255420685,0.860163271427155,-0.123772226274014,0.00761288125067949,0.965830504894257,-0.259062767028809,0.0491388663649559,0.993503928184509,-0.102641858160496,0.303004235029221,0.934939086437225,-0.184600368142128,0.258335798978806,0.945306360721588,-0.199144557118416,-0.980522751808167,0.123100936412811,0.153040006756783,-0.962031662464142,0.166659042239189,0.216147810220718,-0.780855476856232,0.547496676445007,0.300852298736572,-0.894985496997833,0.383079677820206,0.228584602475166,-0.980522751808167,0.123100936412811,0.153040006756783,-0.894985496997833,0.383079677820206,0.228584602475166,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.941741049289703,0.11614803224802,0.315647661685944,-0.916947364807129,0.362371772527695,0.167015537619591,-0.847357213497162,0.513431549072266,0.135549783706665,-0.796578586101532,0.576386690139771,0.182320937514305,-0.826885998249054,0.483063906431198,0.287938833236694,-0.703840732574463,0.696332275867462,0.140461906790733,-0.796578586101532,0.576386690139771,0.182320937514305,-0.847357213497162,0.513431549072266,0.135549783706665,-0.729536950588226,0.676141858100891,0.102995604276657,-0.819103717803955,0.554178774356842,0.148171976208687,-0.703840732574463,0.696332275867462,0.140461906790733,-0.729536950588226,0.676141858100891,0.102995604276657,\n-0.658155262470245,0.750174641609192,0.0637935549020767,-0.76466292142868,0.188213840126991,0.616332828998566,-0.614538252353668,0.667141258716583,0.421028852462769,-0.597852468490601,0.634572565555573,0.48978579044342,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.916947364807129,0.362371772527695,0.167015537619591,-0.980522751808167,0.123100936412811,0.153040006756783,-0.941741049289703,0.11614803224802,0.315647661685944,-0.893702745437622,0.422671109437943,0.150480940937996,-0.780855476856232,0.547496676445007,0.300852298736572,-0.962031662464142,0.166659042239189,0.216147810220718,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.597852468490601,0.634572565555573,0.48978579044342,-0.227211818099022,0.921236872673035,0.315748959779739,-0.597852468490601,0.634572565555573,0.48978579044342,-0.614538252353668,0.667141258716583,0.421028852462769,-0.311181366443634,0.925608515739441,0.215441450476646,-0.227211818099022,0.921236872673035,0.315748959779739,0.127702310681343,0.976085126399994,0.17592579126358,0.0491388663649559,0.993503928184509,-0.102641858160496,-0.505573391914368,0.856702506542206,0.102256529033184,0.127702310681343,0.976085126399994,0.17592579126358,0.410511314868927,0.907221972942352,0.0918079540133476,0.303004235029221,0.934939086437225,-0.184600368142128,0.0491388663649559,0.993503928184509,-0.102641858160496,0.303004235029221,0.934939086437225,-0.184600368142128,0.410511314868927,0.907221972942352,0.0918079540133476,0.559431314468384,0.828812599182129,0.0103096608072519,0.470422744750977,0.855190873146057,-0.217602953314781,-0.826885998249054,0.483063906431198,0.287938833236694,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.962031662464142,0.166659042239189,0.216147810220718,-0.916947364807129,0.362371772527695,0.167015537619591,0.686884999275208,0.723168194293976,-0.0722270235419273,0.647329449653625,0.721940755844116,-0.244471147656441,0.470422744750977,0.855190873146057,-0.217602953314781,0.559431314468384,0.828812599182129,0.0103096608072519,0.905105113983154,0.409709811210632,-0.113677680492401,\n0.891577959060669,0.451291143894196,-0.0377500578761101,0.647329449653625,0.721940755844116,-0.244471147656441,0.686884999275208,0.723168194293976,-0.0722270235419273,0.632998824119568,0.753636837005615,-0.177042677998543,0.740322411060333,0.655164897441864,-0.150604203343391,0.891577959060669,0.451291143894196,-0.0377500578761101,0.905105113983154,0.409709811210632,-0.113677680492401,0.676984488964081,0.720325291156769,-0.15107424557209,0.694885969161987,0.706955552101135,-0.131709426641464,0.600557744503021,0.788931846618652,-0.130065008997917,0.740322411060333,0.655164897441864,-0.150604203343391,0.709426641464233,0.694044709205627,-0.122539132833481,0.749488353729248,0.646310150623322,-0.143354311585426,0.694885969161987,0.706955552101135,-0.131709426641464,0.676984488964081,0.720325291156769,-0.15107424557209,0.74595445394516,0.638815522193909,-0.188326209783554,0.733190476894379,0.653582632541656,-0.187780305743217,0.727223694324493,0.663318991661072,-0.176503792405128,0.749488353729248,0.646310150623322,-0.143354311585426,0.958362102508545,-0.256494760513306,0.125509008765221,0.794416069984436,-0.305554151535034,-0.524918794631958,0.74595445394516,0.638815522193909,-0.188326209783554,0.712908089160919,0.682124614715576,-0.162689983844757,0.694885969161987,0.706955552101135,-0.131709426641464,0.719630718231201,0.67299348115921,-0.170913383364677,0.834402143955231,0.550802052021027,0.0197512619197369,0.600557744503021,0.788931846618652,-0.130065008997917,0.694885969161987,0.706955552101135,-0.131709426641464,0.749488353729248,0.646310150623322,-0.143354311585426,0.727223694324493,0.663318991661072,-0.176503792405128,0.719630718231201,0.67299348115921,-0.170913383364677,0.749488353729248,0.646310150623322,-0.143354311585426,0.709426641464233,0.694044709205627,-0.122539132833481,0.712908089160919,0.682124614715576,-0.162689983844757,0.74595445394516,0.638815522193909,-0.188326209783554,0.794416069984436,-0.305554151535034,-0.524918794631958,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.733190476894379,0.653582632541656,-0.187780305743217,\n0.74595445394516,0.638815522193909,-0.188326209783554,0.864170670509338,0.408057361841202,-0.2944455742836,0.968974769115448,0.149661242961884,0.196696132421494,0.816485822200775,0.512709319591522,0.265480846166611,0.631004393100739,0.719356596469879,-0.29044708609581,0.359505623579025,0.919594645500183,-0.158434361219406,0.660223960876465,0.688790857791901,0.299451887607574,0.563141405582428,0.729207217693329,0.388752609491348,0.258335798978806,0.945306360721588,-0.199144557118416,0.47292697429657,0.876888990402222,0.0860569775104523,0.494772255420685,0.860163271427155,-0.123772226274014,0.669141590595245,0.742036402225494,-0.0403924956917763,0.667402267456055,0.744479417800903,-0.0180171187967062,0.359505623579025,0.919594645500183,-0.158434361219406,0.47292697429657,0.876888990402222,0.0860569775104523,0.667402267456055,0.744479417800903,-0.0180171187967062,0.631004393100739,0.719356596469879,-0.29044708609581,0.864170670509338,0.408057361841202,-0.2944455742836,0.631004393100739,0.719356596469879,-0.29044708609581,0.667402267456055,0.744479417800903,-0.0180171187967062,0.906549096107483,0.409386813640594,-0.10281577706337,0.600557744503021,0.788931846618652,-0.130065008997917,0.834402143955231,0.550802052021027,0.0197512619197369,0.968974769115448,0.149661242961884,0.196696132421494,0.864170670509338,0.408057361841202,-0.2944455742836,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.819103717803955,0.554178774356842,0.148171976208687,0.75202214717865,0.649503469467163,-0.112284608185291,0.972268581390381,0.233539223670959,0.0123813217505813,0.875641047954559,-0.338848143815994,0.34414342045784,0.939418137073517,0.146130084991455,-0.310063809156418,0.905861377716064,-0.279544115066528,0.318229824304581,0.923372685909271,0.289373397827148,-0.252281337976456,0.699552476406097,0.686574220657349,0.198096364736557,0.785714864730835,0.180998295545578,0.591516494750977,0.633913099765778,0.759061396121979,-0.14825627207756,\n0.69953316450119,0.693202435970306,-0.173562079668045,0.80286830663681,0.57996016740799,0.138016909360886,0.699552476406097,0.686574220657349,0.198096364736557,0.305637389421463,0.797388851642609,-0.520342946052551,0.397901266813278,0.642865896224976,-0.65452116727829,0.69953316450119,0.693202435970306,-0.173562079668045,0.633913099765778,0.759061396121979,-0.14825627207756,0.397901266813278,0.642865896224976,-0.65452116727829,0.305637389421463,0.797388851642609,-0.520342946052551,-0.13304828107357,0.622710764408112,-0.771057367324829,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.13304828107357,0.622710764408112,-0.771057367324829,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.153654128313065,0.571211874485016,-0.806292414665222,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.160101562738419,0.546482741832733,-0.822024405002594,0.921413123607636,-0.245974183082581,0.300823181867599,0.905861377716064,-0.279544115066528,0.318229824304581,0.785714864730835,0.180998295545578,0.591516494750977,0.957429826259613,0.286321878433228,0.0367136411368847,0.699552476406097,0.686574220657349,0.198096364736557,0.80286830663681,0.57996016740799,0.138016909360886,0.957429826259613,0.286321878433228,0.0367136411368847,0.785714864730835,0.180998295545578,0.591516494750977,-0.723107695579529,0.620889544487,0.302673906087875,-0.613772094249725,0.718873798847198,0.326349943876266,-0.596384108066559,0.73188179731369,0.329658985137939,-0.738506555557251,0.594659924507141,0.317785561084747,-0.878546297550201,0.378490209579468,0.291378676891327,-0.855198562145233,0.434895634651184,0.281959563493729,-0.723107695579529,0.620889544487,0.302673906087875,-0.738506555557251,0.594659924507141,0.317785561084747,-0.908547103404999,0.339473843574524,0.243515312671661,-0.855198562145233,0.434895634651184,0.281959563493729,-0.878546297550201,0.378490209579468,0.291378676891327,\n-0.797426640987396,0.177673250436783,0.576665341854095,-0.797426640987396,0.177673250436783,0.576665341854095,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.908547103404999,0.339473843574524,0.243515312671661,-0.494092434644699,0.0352621860802174,0.868693947792053,-0.599660336971283,0.629722774028778,0.493818551301956,-0.970878839492798,0.173829272389412,0.164856299757957,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.910823285579681,0.270006507635117,0.312245815992355,-0.807652175426483,0.443565607070923,0.388519644737244,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.723603487014771,0.683223187923431,0.098000094294548,-0.859436213970184,0.509185254573822,0.04582304880023,-0.65424633026123,0.624168395996094,0.42705449461937,-0.599660336971283,0.629722774028778,0.493818551301956,-0.807652175426483,0.443565607070923,0.388519644737244,-0.762878954410553,0.502556443214417,0.40675875544548,-0.599660336971283,0.629722774028778,0.493818551301956,-0.494092434644699,0.0352621860802174,0.868693947792053,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.807652175426483,0.443565607070923,0.388519644737244,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.494092434644699,0.0352621860802174,0.868693947792053,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.192081272602081,0.0805686637759209,-0.978066205978394,\n-0.160101562738419,0.546482741832733,-0.822024405002594,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.153654128313065,0.571211874485016,-0.806292414665222,0.414378970861435,-0.480131238698959,0.773152053356171,-0.47402635216713,-0.576445937156677,0.665589272975922,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.628591358661652,-0.444956004619598,-0.637876987457275,0.0517410226166248,-0.448791861534119,-0.892137169837952,0.768725872039795,-0.625621736049652,-0.132883325219154,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.663442015647888,-0.730678915977478,-0.161099418997765,-0.165543153882027,-0.540198087692261,-0.825094819068909,0.348949402570724,-0.852244853973389,0.389760226011276,-0.3234041929245,-0.738465428352356,0.591674447059631,0.620603084564209,-0.695841789245605,-0.361463725566864,-0.343847513198853,-0.196072369813919,0.918327033519745,-0.610171139240265,-0.773055195808411,0.173426955938339,0.314525902271271,-0.770808696746826,-0.554010331630707,0.545981824398041,-0.584509074687958,0.600210785865784,0.0837007611989975,-0.567488670349121,0.819115877151489,-0.668955087661743,-0.737109065055847,-0.0957564637064934,0.623615741729736,-0.765475749969482,-0.158588528633118,-0.598684787750244,-0.729470372200012,-0.330831557512283,-0.301147669553757,-0.68056708574295,0.667935967445374,-0.124663934111595,-0.874086141586304,0.469502240419388,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.798132300376892,-0.595748007297516,0.0898283571004868,0.885131120681763,0.0417929887771606,-0.463461130857468,0.94776064157486,-0.269029140472412,-0.171385690569878,0.810118317604065,-0.284595668315887,-0.51255601644516,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.648241400718689,-0.506932020187378,-0.568157553672791,-0.0855747610330582,-0.285937398672104,-0.954419612884521,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.964107573032379,-0.248898640275002,-0.0924450159072876,\n-0.918069899082184,-0.187107101082802,0.349483251571655,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.47402635216713,-0.576445937156677,0.665589272975922,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.999210119247437,0.0289651956409216,-0.0272048581391573,0.647232055664063,0.709673702716827,-0.278305619955063,0.702042996883392,0.707515120506287,-0.0809817835688591,0.94776064157486,-0.269029140472412,-0.171385690569878,0.885131120681763,0.0417929887771606,-0.463461130857468,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.1213503703475,0.714234888553619,-0.689305901527405,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.970878839492798,0.173829272389412,0.164856299757957,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.627380669116974,0.542527735233307,-0.558620691299438,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.627380669116974,0.542527735233307,-0.558620691299438,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.153654128313065,0.571211874485016,-0.806292414665222,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.153654128313065,0.571211874485016,-0.806292414665222,\n0.393562316894531,0.580699145793915,-0.71266907453537,0.430813550949097,0.499041706323624,-0.751902282238007,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.193036198616028,0.594731986522675,-0.780404329299927,0.430813550949097,0.499041706323624,-0.751902282238007,0.393562316894531,0.580699145793915,-0.71266907453537,0.800276219844818,0.427209228277206,-0.420773357152939,0.828168988227844,0.353571265935898,-0.434883326292038,0.905861377716064,-0.279544115066528,0.318229824304581,0.858353197574615,-0.409084677696228,0.309644132852554,0.936574637889862,0.00382779608480632,-0.350447237491608,0.923372685909271,0.289373397827148,-0.252281337976456,0.875641047954559,-0.338848143815994,0.34414342045784,0.858353197574615,-0.409084677696228,0.309644132852554,0.905861377716064,-0.279544115066528,0.318229824304581,0.921413123607636,-0.245974183082581,0.300823181867599,0.875641047954559,-0.338848143815994,0.34414342045784,0.921413123607636,-0.245974183082581,0.300823181867599,0.906213641166687,0.328242212533951,-0.266521811485291,0.939418137073517,0.146130084991455,-0.310063809156418,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.613772094249725,0.718873798847198,0.326349943876266,-0.63234806060791,0.720907807350159,0.283598214387894,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.971036195755005,0.0917746424674988,-0.220604136586189,0.458068341016769,-0.324115723371506,-0.827721178531647,0.272203177213669,0.658502519130707,-0.701626539230347,-0.122567981481552,0.664539813995361,-0.737132251262665,0.0359749346971512,-0.262611299753189,-0.964230835437775,0.656110465526581,0.732090950012207,-0.183199197053909,\n0.331649243831635,0.794523119926453,-0.508666634559631,0.0896634757518768,0.986824929714203,-0.134673669934273,0.308493763208389,0.950873613357544,0.0259031727910042,0.57691216468811,0.718079447746277,0.389273971319199,0.664968013763428,0.745313882827759,0.0482159033417702,0.392663985490799,0.918741226196289,-0.0415881127119064,-0.320559352636337,0.729658544063568,0.604019939899445,-0.311181366443634,0.925608515739441,0.215441450476646,-0.614538252353668,0.667141258716583,0.421028852462769,0.706917345523834,-0.10402026027441,0.699605345726013,0.599858105182648,0.75833523273468,0.255142837762833,0.814850926399231,-0.0293116569519043,0.57892906665802,-0.941741049289703,0.11614803224802,0.315647661685944,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.991389513015747,-0.125117510557175,0.038632795214653,0.861413061618805,0.450139224529266,0.23524908721447,0.652578055858612,-0.0296747293323278,0.757140219211578,0.659538865089417,0.541105449199677,0.521740734577179,0.861413061618805,0.450139224529266,0.23524908721447,0.837489545345306,-0.137019574642181,0.528996109962463,0.652578055858612,-0.0296747293323278,0.757140219211578,0.957429826259613,0.286321878433228,0.0367136411368847,0.929460346698761,0.351613759994507,-0.111674785614014,0.909856855869293,0.391187816858292,0.138320595026016,0.559431314468384,0.828812599182129,0.0103096608072519,0.410511314868927,0.907221972942352,0.0918079540133476,0.392663985490799,0.918741226196289,-0.0415881127119064,0.912856459617615,-0.241107016801834,0.329485177993774,0.752064108848572,0.658552646636963,-0.0266083907335997,0.970349192619324,-0.239411205053329,0.0332370884716511,0.906213641166687,0.328242212533951,-0.266521811485291,0.921413123607636,-0.245974183082581,0.300823181867599,0.957429826259613,0.286321878433228,0.0367136411368847,0.858353197574615,-0.409084677696228,0.309644132852554,0.972268581390381,0.233539223670959,0.0123813217505813,0.936574637889862,0.00382779608480632,-0.350447237491608,0.15803250670433,0.792331993579865,0.589267194271088,0.306766599416733,-0.118459150195122,0.944384276866913,\n0.181094169616699,-0.00969368312507868,0.983417987823486,-0.819103717803955,0.554178774356842,0.148171976208687,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.748181462287903,0.587628781795502,0.308085918426514,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.812849164009094,-0.351107835769653,0.46475750207901,0.47292697429657,0.876888990402222,0.0860569775104523,0.258335798978806,0.945306360721588,-0.199144557118416,0.494772255420685,0.860163271427155,-0.123772226274014,-0.158630818128586,0.588066816329956,0.793103873729706,-0.229550525546074,0.57556563615799,0.784876227378845,-0.413429826498032,0.428489029407501,0.803413331508636,-0.520070433616638,0.75630134344101,0.396906822919846,-0.522960901260376,0.842813611030579,-0.127189248800278,-0.158630818128586,0.588066816329956,0.793103873729706,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.968974769115448,0.149661242961884,0.196696132421494,0.834402143955231,0.550802052021027,0.0197512619197369,0.891577959060669,0.451291143894196,-0.0377500578761101,0.669141590595245,0.742036402225494,-0.0403924956917763,0.647329449653625,0.721940755844116,-0.244471147656441,-0.980522751808167,0.123100936412811,0.153040006756783,-0.916947364807129,0.362371772527695,0.167015537619591,-0.962031662464142,0.166659042239189,0.216147810220718,-0.780855476856232,0.547496676445007,0.300852298736572,-0.505573391914368,0.856702506542206,0.102256529033184,-0.894985496997833,0.383079677820206,0.228584602475166,-0.894985496997833,0.383079677820206,0.228584602475166,-0.505573391914368,0.856702506542206,0.102256529033184,-0.76461535692215,0.640312731266022,0.0732325837016106,0.891577959060669,0.451291143894196,-0.0377500578761101,0.740322411060333,0.655164897441864,-0.150604203343391,0.906549096107483,0.409386813640594,-0.10281577706337,0.359505623579025,0.919594645500183,-0.158434361219406,0.258335798978806,0.945306360721588,-0.199144557118416,0.47292697429657,0.876888990402222,0.0860569775104523,0.957429826259613,0.286321878433228,0.0367136411368847,\n0.80286830663681,0.57996016740799,0.138016909360886,0.929460346698761,0.351613759994507,-0.111674785614014,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.177267998456955,0.365929782390594,-0.913603544235229,0.972268581390381,0.233539223670959,0.0123813217505813,0.858353197574615,-0.409084677696228,0.309644132852554,0.875641047954559,-0.338848143815994,0.34414342045784,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.596384108066559,0.73188179731369,0.329658985137939,-0.613772094249725,0.718873798847198,0.326349943876266,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.797426640987396,0.177673250436783,0.576665341854095,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.970878839492798,0.173829272389412,0.164856299757957,-0.93314254283905,0.297381490468979,0.20201313495636,-0.947628021240234,0.25655260682106,0.190215468406677,0.800276219844818,0.427209228277206,-0.420773357152939,0.923372685909271,0.289373397827148,-0.252281337976456,0.828168988227844,0.353571265935898,-0.434883326292038,0.906213641166687,0.328242212533951,-0.266521811485291,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.939418137073517,0.146130084991455,-0.310063809156418,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.267860978841782,0.938322484493256,-0.218635410070419,-0.149676010012627,0.966881930828094,-0.206727981567383,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.342631131410599,0.695380508899689,-0.631703972816467,-0.0982039347290993,0.744844913482666,-0.659971237182617,\n-0.00497461529448628,0.164960891008377,-0.986287593841553,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.342631131410599,0.695380508899689,-0.631703972816467,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.00533877313137054,0.0413248650729656,-0.999131500720978,-0.433557718992233,-0.0273692850023508,-0.900710046291351,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.00533877313137054,0.0413248650729656,-0.999131500720978,0.0723040029406548,-0.562818944454193,-0.823411762714386,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.433557718992233,-0.0273692850023508,-0.900710046291351,0.0723040029406548,-0.562818944454193,-0.823411762714386,0.0359749346971512,-0.262611299753189,-0.964230835437775,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.282903432846069,-0.614905774593353,-0.73610907793045,0.0359749346971512,-0.262611299753189,-0.964230835437775,-0.122567981481552,0.664539813995361,-0.737132251262665,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.122567981481552,0.664539813995361,-0.737132251262665,-0.180025935173035,0.229685723781586,-0.956470131874084,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.180025935173035,0.229685723781586,-0.956470131874084,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.154303342103958,0.42424476146698,-0.892304241657257,0.995019972324371,0.0198635533452034,0.0976764634251595,0.97600269317627,0.13745604455471,0.168892234563828,0.85029935836792,0.0502043291926384,0.523899376392365,0.878947734832764,-0.0450414381921291,0.474786430597305,0.668019592761993,-0.146763533353806,0.729527413845062,0.878947734832764,-0.0450414381921291,0.474786430597305,0.85029935836792,0.0502043291926384,0.523899376392365,\n0.652125597000122,-0.00108946568798274,0.758110165596008,0.147625222802162,-0.322124987840652,0.935116171836853,0.668019592761993,-0.146763533353806,0.729527413845062,0.652125597000122,-0.00108946568798274,0.758110165596008,0.141524657607079,-0.0639704838395119,0.987865626811981,0.147625222802162,-0.322124987840652,0.935116171836853,0.141524657607079,-0.0639704838395119,0.987865626811981,-0.538123428821564,-0.0776136741042137,0.839285016059875,-0.503679633140564,-0.333046585321426,0.797111511230469,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.503679633140564,-0.333046585321426,0.797111511230469,-0.538123428821564,-0.0776136741042137,0.839285016059875,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.941822648048401,-0.153352990746498,-0.29908686876297,0.505583882331848,0.0150260468944907,-0.862646579742432,0.522813856601715,0.179267287254334,-0.833384037017822,0.886800289154053,0.175987064838409,-0.427333384752274,0.853118479251862,0.0149601250886917,-0.521502673625946,0.522813856601715,0.179267287254334,-0.833384037017822,0.505583882331848,0.0150260468944907,-0.862646579742432,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.00497461529448628,0.164960891008377,-0.986287593841553,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.00497461529448628,0.164960891008377,-0.986287593841553,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.707946956157684,-0.166302591562271,-0.686406970024109,\n0.903742134571075,0.0408325865864754,0.426125437021255,0.99804013967514,0.0525208227336407,0.0340210981667042,0.995019972324371,0.0198635533452034,0.0976764634251595,0.878947734832764,-0.0450414381921291,0.474786430597305,0.668019592761993,-0.146763533353806,0.729527413845062,0.697896838188171,0.111968606710434,0.707391738891602,0.903742134571075,0.0408325865864754,0.426125437021255,0.878947734832764,-0.0450414381921291,0.474786430597305,0.713874757289886,0.186937391757965,-0.674860894680023,0.482705801725388,0.267842918634415,-0.833819687366486,0.932169795036316,0.263871729373932,-0.24785327911377,0.949256718158722,0.266638696193695,-0.166779711842537,0.482705801725388,0.267842918634415,-0.833819687366486,0.713874757289886,0.186937391757965,-0.674860894680023,-0.505279898643494,-0.213028356432915,-0.836248219013214,0.244611874222755,0.194429770112038,-0.949927449226379,0.929460346698761,0.351613759994507,-0.111674785614014,0.80286830663681,0.57996016740799,0.138016909360886,0.837489545345306,-0.137019574642181,0.528996109962463,0.861413061618805,0.450139224529266,0.23524908721447,0.389561533927917,-0.19174836575985,0.900818705558777,0.407288730144501,0.570921003818512,0.712857067584991,0.659538865089417,0.541105449199677,0.521740734577179,0.652578055858612,-0.0296747293323278,0.757140219211578,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.187374100089073,0.574305176734924,0.796909391880035,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.971036195755005,0.0917746424674988,-0.220604136586189,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.762878954410553,0.502556443214417,0.40675875544548,-0.914847791194916,-0.403779864311218,0.00391686055809259,\n-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.859436213970184,0.509185254573822,0.04582304880023,-0.723603487014771,0.683223187923431,0.098000094294548,-0.65424633026123,0.624168395996094,0.42705449461937,-0.762878954410553,0.502556443214417,0.40675875544548,-0.859436213970184,0.509185254573822,0.04582304880023,-0.723603487014771,0.683223187923431,0.098000094294548,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.93314254283905,0.297381490468979,0.20201313495636,-0.65424633026123,0.624168395996094,0.42705449461937,-0.947628021240234,0.25655260682106,0.190215468406677,-0.93314254283905,0.297381490468979,0.20201313495636,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.947628021240234,0.25655260682106,0.190215468406677,-0.809561967849731,0.578427612781525,-0.10015495121479,-0.870848000049591,0.464649707078934,0.160388261079788,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.809561967849731,0.578427612781525,-0.10015495121479,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.793782532215118,0.557114601135254,0.243993073701859,-0.870848000049591,0.464649707078934,0.160388261079788,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.713916778564453,0.653736412525177,0.250901401042938,-0.793782532215118,0.557114601135254,0.243993073701859,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.63234806060791,0.720907807350159,0.283598214387894,-0.713916778564453,0.653736412525177,0.250901401042938,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.63234806060791,0.720907807350159,0.283598214387894,\n-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.969612717628479,0.0529158711433411,0.238853633403778,0.479293167591095,-0.284916758537292,-0.830120801925659,0.383484452962875,-0.102838270366192,-0.917803883552551,0.944391191005707,-0.0824342668056488,-0.318323493003845,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.383484452962875,-0.102838270366192,-0.917803883552551,0.382079660892487,0.0211679134517908,-0.923886954784393,0.698255121707916,-0.555874645709991,-0.451046764850616,0.944391191005707,-0.0824342668056488,-0.318323493003845,0.828753769397736,-0.00401723757386208,0.559598922729492,0.650361001491547,-0.274446427822113,0.708314716815948,0.587613701820374,-0.80407178401947,0.0904358923435211,0.653040647506714,-0.484619528055191,-0.581963717937469,0.828753769397736,-0.00401723757386208,0.559598922729492,0.653040647506714,-0.484619528055191,-0.581963717937469,0.479293167591095,-0.284916758537292,-0.830120801925659,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.812033891677856,-0.31945663690567,0.488414198160172,-0.1181396022439,-0.72886723279953,0.674385368824005,0.583520710468292,-0.523498058319092,0.620848894119263,0.812033891677856,-0.31945663690567,0.488414198160172,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.944391191005707,-0.0824342668056488,-0.318323493003845,-0.0390606410801411,-0.798295676708221,-0.600997745990753,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.867540001869202,-0.488967150449753,-0.0910245105624199,0.698255121707916,-0.555874645709991,-0.451046764850616,0.944391191005707,-0.0824342668056488,-0.318323493003845,0.698255121707916,-0.555874645709991,-0.451046764850616,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.1181396022439,-0.72886723279953,0.674385368824005,\n-0.751028060913086,-0.474978417158127,-0.458641856908798,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.202261313796043,-0.191956117749214,0.960334956645966,-0.332680583000183,-0.441110253334045,0.833513855934143,-0.202261313796043,-0.191956117749214,0.960334956645966,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.0923527628183365,-0.948987364768982,0.301486223936081,0.201128974556923,-0.41152036190033,0.888930916786194,-0.332680583000183,-0.441110253334045,0.833513855934143,0.837489545345306,-0.137019574642181,0.528996109962463,0.244611874222755,0.194429770112038,-0.949927449226379,-0.505279898643494,-0.213028356432915,-0.836248219013214,-0.751028060913086,-0.474978417158127,-0.458641856908798,-0.1181396022439,-0.72886723279953,0.674385368824005,0.698255121707916,-0.555874645709991,-0.451046764850616,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.0390606410801411,-0.798295676708221,-0.600997745990753,0.382079660892487,0.0211679134517908,-0.923886954784393,0.698255121707916,-0.555874645709991,-0.451046764850616,0.382079660892487,0.0211679134517908,-0.923886954784393,-0.0390606410801411,-0.798295676708221,-0.600997745990753,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.928847432136536,0.162273854017258,0.333030939102173,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.928847432136536,0.162273854017258,0.333030939102173,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.969194948673248,0.11662120372057,0.21693454682827,\n-0.871833384037018,0.0184007696807384,0.489456802606583,-0.928847432136536,0.162273854017258,0.333030939102173,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.714491605758667,0.14225697517395,0.685028970241547,-0.161164477467537,-0.331503093242645,0.929586827754974,-0.714491605758667,0.14225697517395,0.685028970241547,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.709949254989624,0.60140985250473,0.366439938545227,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.462400823831558,0.884378015995026,0.0637255012989044,-0.404175013303757,0.903538525104523,-0.142339885234833,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.711754858493805,-0.136520877480507,-0.689033389091492,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.711754858493805,-0.136520877480507,-0.689033389091492,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.433943778276443,-0.801411330699921,-0.411621987819672,0.683504700660706,0.663010776042938,0.305349051952362,\n0.722103536128998,0.687273919582367,0.0788736194372177,0.343125909566879,0.914759755134583,0.213258594274521,0.258648008108139,0.909015238285065,0.326791137456894,0.683504700660706,0.663010776042938,0.305349051952362,0.97600269317627,0.13745604455471,0.168892234563828,0.973912060260773,0.184168219566345,-0.132579684257507,0.722103536128998,0.687273919582367,0.0788736194372177,0.970708966255188,0.0394216887652874,-0.237002193927765,0.973912060260773,0.184168219566345,-0.132579684257507,0.97600269317627,0.13745604455471,0.168892234563828,0.995019972324371,0.0198635533452034,0.0976764634251595,0.946598649024963,0.101268604397774,-0.306097507476807,0.970708966255188,0.0394216887652874,-0.237002193927765,0.995019972324371,0.0198635533452034,0.0976764634251595,0.99804013967514,0.0525208227336407,0.0340210981667042,0.923067450523376,0.21886146068573,-0.316300749778748,0.946598649024963,0.101268604397774,-0.306097507476807,0.99804013967514,0.0525208227336407,0.0340210981667042,0.990444839000702,0.137596189975739,-0.00929253362119198,0.932169795036316,0.263871729373932,-0.24785327911377,0.923067450523376,0.21886146068573,-0.316300749778748,0.990444839000702,0.137596189975739,-0.00929253362119198,0.967456996440887,0.251362919807434,-0.0290456917136908,0.949256718158722,0.266638696193695,-0.166779711842537,0.932169795036316,0.263871729373932,-0.24785327911377,0.967456996440887,0.251362919807434,-0.0290456917136908,0.9481241106987,0.313342481851578,-0.053639143705368,0.937970161437988,0.291288256645203,-0.188050866127014,0.949256718158722,0.266638696193695,-0.166779711842537,0.9481241106987,0.313342481851578,-0.053639143705368,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.602918326854706,0.515652418136597,0.608762681484222,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.910823285579681,0.270006507635117,0.312245815992355,\n0.343125909566879,0.914759755134583,0.213258594274521,0.722103536128998,0.687273919582367,0.0788736194372177,0.656110465526581,0.732090950012207,-0.183199197053909,0.308493763208389,0.950873613357544,0.0259031727910042,0.973912060260773,0.184168219566345,-0.132579684257507,0.886800289154053,0.175987064838409,-0.427333384752274,0.656110465526581,0.732090950012207,-0.183199197053909,0.722103536128998,0.687273919582367,0.0788736194372177,0.853118479251862,0.0149601250886917,-0.521502673625946,0.886800289154053,0.175987064838409,-0.427333384752274,0.973912060260773,0.184168219566345,-0.132579684257507,0.970708966255188,0.0394216887652874,-0.237002193927765,0.946598649024963,0.101268604397774,-0.306097507476807,0.805570960044861,0.0887085422873497,-0.585820972919464,0.853118479251862,0.0149601250886917,-0.521502673625946,0.970708966255188,0.0394216887652874,-0.237002193927765,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.928275108337402,-0.108704075217247,0.35565248131752,0.339781612157822,-0.868737816810608,0.360337436199188,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.261420041322708,-0.954043209552765,0.146496221423149,-0.118260890245438,-0.832547545433044,0.541182935237885,0.306935548782349,-0.919691801071167,0.244862332940102,0.207801967859268,-0.930255472660065,-0.302395612001419,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.969194948673248,0.11662120372057,0.21693454682827,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.0959865897893906,-0.91358608007431,0.395154505968094,0.542883396148682,-0.82672655582428,-0.147651195526123,-0.314595848321915,-0.93869549036026,-0.140997022390366,\n-0.124663934111595,-0.874086141586304,0.469502240419388,0.339781612157822,-0.868737816810608,0.360337436199188,0.211911484599113,-0.951958835124969,-0.221060931682587,-0.124663934111595,-0.874086141586304,0.469502240419388,-0.192425131797791,-0.974552154541016,0.114980764687061,0.339781612157822,-0.868737816810608,0.360337436199188,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.261420041322708,-0.954043209552765,0.146496221423149,0.207811132073402,-0.962575078010559,-0.173964589834213,0.400767505168915,-0.84773463010788,0.347464233636856,-0.23048010468483,-0.946770489215851,0.224732384085655,-0.389462172985077,-0.886311650276184,-0.250541120767593,0.201402872800827,-0.92625367641449,-0.318576484918594,0.362296313047409,-0.902348458766937,0.233470931649208,0.200983673334122,-0.912257730960846,-0.356919288635254,0.339713275432587,-0.937209665775299,0.0789491534233093,-0.18037211894989,-0.916134774684906,0.357998490333557,-0.326996743679047,-0.921505987644196,-0.209522947669029,0.200983673334122,-0.912257730960846,-0.356919288635254,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.148850679397583,-0.924228370189667,0.351632446050644,0.395999073982239,-0.883323311805725,0.250847846269608,-0.259535163640976,-0.932749211788177,0.250240743160248,0.323624908924103,-0.91464102268219,0.242278248071671,0.11251799762249,-0.874383747577667,-0.472009360790253,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.248996630311012,-0.917850255966187,0.309114128351212,0.323624908924103,-0.91464102268219,0.242278248071671,0.464242339134216,-0.872838377952576,-0.150440022349358,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.259815812110901,-0.928046464920044,-0.266881018877029,-0.149650141596794,-0.977229058742523,-0.150426745414734,-0.259535163640976,-0.932749211788177,0.250240743160248,0.303018242120743,-0.938679337501526,0.164502277970314,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.0855747610330582,-0.285937398672104,-0.954419612884521,-0.648241400718689,-0.506932020187378,-0.568157553672791,\n-0.262460768222809,-0.84521484375,0.465538620948792,0.407288730144501,0.570921003818512,0.712857067584991,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.187374100089073,0.574305176734924,0.796909391880035,0.90192449092865,0.307413011789322,0.303363531827927,0.899024188518524,0.213700130581856,0.382214337587357,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.899024188518524,0.213700130581856,0.382214337587357,0.817979574203491,-0.0342949964106083,0.574224054813385,0.882815957069397,-0.369267553091049,0.290305823087692,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.817979574203491,-0.0342949964106083,0.574224054813385,0.572269201278687,-0.327979475259781,0.751623213291168,0.665161728858948,0.0713187083601952,0.743285655975342,0.882815957069397,-0.369267553091049,0.290305823087692,0.761745095252991,0.0999165698885918,0.640125811100006,0.817979574203491,-0.0342949964106083,0.574224054813385,0.899024188518524,0.213700130581856,0.382214337587357,0.857412695884705,0.318779200315475,0.404009103775024,0.516816318035126,-0.0720634460449219,0.85305792093277,0.572269201278687,-0.327979475259781,0.751623213291168,0.817979574203491,-0.0342949964106083,0.574224054813385,0.761745095252991,0.0999165698885918,0.640125811100006,0.208346754312515,-0.195467948913574,0.95832347869873,0.263325154781342,-0.487631261348724,0.832391500473022,0.572269201278687,-0.327979475259781,0.751623213291168,0.516816318035126,-0.0720634460449219,0.85305792093277,0.777440786361694,0.387861609458923,0.495125412940979,0.938613653182983,0.275698870420456,0.207351207733154,0.943840563297272,0.180788546800613,0.276551008224487,0.921807408332825,0.190687164664268,0.337504833936691,0.981701374053955,0.106130957603455,0.158109560608864,0.849806606769562,-0.0963085368275642,0.518221437931061,0.761745095252991,0.0999165698885918,0.640125811100006,0.857412695884705,0.318779200315475,0.404009103775024,0.849806606769562,-0.0963085368275642,0.518221437931061,0.56545478105545,-0.235293805599213,0.79050475358963,\n0.516816318035126,-0.0720634460449219,0.85305792093277,0.761745095252991,0.0999165698885918,0.640125811100006,0.56545478105545,-0.235293805599213,0.79050475358963,0.235414057970047,-0.349107831716537,0.907030284404755,0.208346754312515,-0.195467948913574,0.95832347869873,0.516816318035126,-0.0720634460449219,0.85305792093277,0.973640501499176,0.150164008140564,0.171682879328728,0.823427438735962,0.0464031770825386,0.565521001815796,0.849806606769562,-0.0963085368275642,0.518221437931061,0.981701374053955,0.106130957603455,0.158109560608864,0.823427438735962,0.0464031770825386,0.565521001815796,0.535846352577209,-0.072305366396904,0.841213762760162,0.56545478105545,-0.235293805599213,0.79050475358963,0.849806606769562,-0.0963085368275642,0.518221437931061,0.535846352577209,-0.072305366396904,0.841213762760162,0.199428960680962,-0.151153594255447,0.968184232711792,0.235414057970047,-0.349107831716537,0.907030284404755,0.56545478105545,-0.235293805599213,0.79050475358963,0.943840563297272,0.180788546800613,0.276551008224487,0.938613653182983,0.275698870420456,0.207351207733154,0.939432919025421,0.230844467878342,-0.253331035375595,0.932059586048126,0.251616179943085,-0.260680228471756,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.961426019668579,0.11484207212925,-0.249942690134048,0.938613653182983,0.275698870420456,0.207351207733154,0.90192449092865,0.307413011789322,0.303363531827927,0.857412695884705,0.318779200315475,0.404009103775024,0.899024188518524,0.213700130581856,0.382214337587357,0.90192449092865,0.307413011789322,0.303363531827927,0.777440786361694,0.387861609458923,0.495125412940979,0.981701374053955,0.106130957603455,0.158109560608864,0.857412695884705,0.318779200315475,0.404009103775024,0.777440786361694,0.387861609458923,0.495125412940979,0.921807408332825,0.190687164664268,0.337504833936691,0.970218658447266,-0.0381909385323524,0.239201232790947,0.837947964668274,0.531638920307159,-0.123301580548286,0.734350562095642,0.677913904190063,0.0340876169502735,0.938418209552765,0.0142068490386009,0.345209211111069,\n0.547434866428375,0.804429769515991,0.230668216943741,0.79800420999527,0.101907514035702,0.593973159790039,0.938418209552765,0.0142068490386009,0.345209211111069,0.734350562095642,0.677913904190063,0.0340876169502735,0.250951588153839,0.864162683486938,0.436172097921371,0.507640182971954,0.139722838997841,0.85016405582428,0.79800420999527,0.101907514035702,0.593973159790039,0.547434866428375,0.804429769515991,0.230668216943741,-0.0952283963561058,0.827900111675262,0.552732229232788,0.146060764789581,0.0914121642708778,0.985043168067932,0.507640182971954,0.139722838997841,0.85016405582428,0.250951588153839,0.864162683486938,0.436172097921371,0.793522596359253,-0.0159706063568592,0.608331143856049,0.937215089797974,-0.0726325064897537,0.341104626655579,0.938418209552765,0.0142068490386009,0.345209211111069,0.79800420999527,0.101907514035702,0.593973159790039,0.516034662723541,-0.0156709868460894,0.856424331665039,0.793522596359253,-0.0159706063568592,0.608331143856049,0.79800420999527,0.101907514035702,0.593973159790039,0.507640182971954,0.139722838997841,0.85016405582428,0.182312279939651,-0.0702581331133842,0.980727314949036,0.516034662723541,-0.0156709868460894,0.856424331665039,0.507640182971954,0.139722838997841,0.85016405582428,0.146060764789581,0.0914121642708778,0.985043168067932,0.95304924249649,0.093354158103466,0.288066178560257,0.970121920108795,0.115440391004086,0.213393971323967,0.987499356269836,0.0581452213227749,0.146506309509277,0.910413324832916,-0.164700835943222,0.379501283168793,0.793522596359253,-0.0159706063568592,0.608331143856049,0.799672067165375,0.218886733055115,0.559118211269379,0.952853143215179,0.227692276239395,0.200567096471787,0.937215089797974,-0.0726325064897537,0.341104626655579,0.516034662723541,-0.0156709868460894,0.856424331665039,0.508204519748688,0.144576266407967,0.849014639854431,0.799672067165375,0.218886733055115,0.559118211269379,0.793522596359253,-0.0159706063568592,0.608331143856049,0.182312279939651,-0.0702581331133842,0.980727314949036,0.149393752217293,0.076563760638237,0.985809028148651,\n0.508204519748688,0.144576266407967,0.849014639854431,0.516034662723541,-0.0156709868460894,0.856424331665039,0.799672067165375,0.218886733055115,0.559118211269379,0.823427438735962,0.0464031770825386,0.565521001815796,0.973640501499176,0.150164008140564,0.171682879328728,0.952853143215179,0.227692276239395,0.200567096471787,0.508204519748688,0.144576266407967,0.849014639854431,0.535846352577209,-0.072305366396904,0.841213762760162,0.823427438735962,0.0464031770825386,0.565521001815796,0.799672067165375,0.218886733055115,0.559118211269379,0.149393752217293,0.076563760638237,0.985809028148651,0.199428960680962,-0.151153594255447,0.968184232711792,0.535846352577209,-0.072305366396904,0.841213762760162,0.508204519748688,0.144576266407967,0.849014639854431,0.938012719154358,0.237205043435097,-0.252717018127441,0.987499356269836,0.0581452213227749,0.146506309509277,0.970121920108795,0.115440391004086,0.213393971323967,0.940755069255829,0.217000737786293,-0.260558247566223,0.987499356269836,0.0581452213227749,0.146506309509277,0.904506981372833,0.363091230392456,-0.223677977919579,0.837947964668274,0.531638920307159,-0.123301580548286,0.970218658447266,-0.0381909385323524,0.239201232790947,0.937215089797974,-0.0726325064897537,0.341104626655579,0.910413324832916,-0.164700835943222,0.379501283168793,0.970218658447266,-0.0381909385323524,0.239201232790947,0.938418209552765,0.0142068490386009,0.345209211111069,0.937215089797974,-0.0726325064897537,0.341104626655579,0.952853143215179,0.227692276239395,0.200567096471787,0.95304924249649,0.093354158103466,0.288066178560257,0.910413324832916,-0.164700835943222,0.379501283168793,0.95304924249649,0.093354158103466,0.288066178560257,0.948896646499634,0.107380241155624,0.296756833791733,0.960990369319916,0.131044924259186,0.24356672167778,0.970121920108795,0.115440391004086,0.213393971323967,0.943840563297272,0.180788546800613,0.276551008224487,0.932059586048126,0.251616179943085,-0.260680228471756,0.934666991233826,0.235346615314484,-0.26647624373436,0.960990369319916,0.131044924259186,0.24356672167778,\n0.934666991233826,0.235346615314484,-0.26647624373436,0.940755069255829,0.217000737786293,-0.260558247566223,0.970121920108795,0.115440391004086,0.213393971323967,0.960990369319916,0.131044924259186,0.24356672167778,0.960990369319916,0.131044924259186,0.24356672167778,0.948896646499634,0.107380241155624,0.296756833791733,0.921807408332825,0.190687164664268,0.337504833936691,0.943840563297272,0.180788546800613,0.276551008224487,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.702580034732819,-0.699933290481567,0.128353402018547,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.702580034732819,-0.699933290481567,0.128353402018547,0.026099681854248,-0.974704563617706,0.221968054771423,-0.10741464048624,-0.480259567499161,0.87052446603775,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.49835604429245,-0.197405397891998,0.844199240207672,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.49835604429245,-0.197405397891998,0.844199240207672,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.10741464048624,-0.480259567499161,0.87052446603775,0.208346754312515,-0.195467948913574,0.95832347869873,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.10741464048624,-0.480259567499161,0.87052446603775,0.263325154781342,-0.487631261348724,0.832391500473022,-0.75111985206604,-0.269361168146133,0.602713465690613,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.49835604429245,-0.197405397891998,0.844199240207672,-0.540686428546906,-0.418503016233444,0.729735136032104,\n-0.806595921516418,-0.339085519313812,0.484173595905304,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.540686428546906,-0.418503016233444,0.729735136032104,-0.49835604429245,-0.197405397891998,0.844199240207672,0.208346754312515,-0.195467948913574,0.95832347869873,0.235414057970047,-0.349107831716537,0.907030284404755,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.540686428546906,-0.418503016233444,0.729735136032104,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.540686428546906,-0.418503016233444,0.729735136032104,0.235414057970047,-0.349107831716537,0.907030284404755,0.199428960680962,-0.151153594255447,0.968184232711792,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.980304419994354,-0.197097584605217,-0.0124787287786603,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.75111985206604,-0.269361168146133,0.602713465690613,\n-0.685021758079529,0.00244438671506941,0.728518545627594,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.895388603210449,0.358975976705551,0.26346829533577,-0.972477912902832,0.193684712052345,0.12951023876667,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.442167282104492,0.71852970123291,0.536845564842224,-0.730377912521362,0.544562876224518,0.412309736013412,-0.224036976695061,-0.0279729403555393,0.974179148674011,0.146060764789581,0.0914121642708778,0.985043168067932,-0.0952283963561058,0.827900111675262,0.552732229232788,-0.442167282104492,0.71852970123291,0.536845564842224,-0.476952195167542,-0.30724024772644,0.823480427265167,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.476952195167542,-0.30724024772644,0.823480427265167,0.182312279939651,-0.0702581331133842,0.980727314949036,0.146060764789581,0.0914121642708778,0.985043168067932,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.754743993282318,-0.253586679697037,0.605025053024292,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.476952195167542,-0.30724024772644,0.823480427265167,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.476952195167542,-0.30724024772644,0.823480427265167,\n-0.239489018917084,-0.00514746597036719,0.970885396003723,0.149393752217293,0.076563760638237,0.985809028148651,0.182312279939651,-0.0702581331133842,0.980727314949036,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.190858513116837,-0.215845420956612,0.957592725753784,0.199428960680962,-0.151153594255447,0.968184232711792,0.149393752217293,0.076563760638237,0.985809028148651,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.983128547668457,-0.182582557201386,-0.011038308031857,-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.972477912902832,0.193684712052345,0.12951023876667,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.754743993282318,-0.253586679697037,0.605025053024292,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.809050858020782,-0.2569739818573,0.528584063053131,-0.81458967924118,-0.243902236223221,0.526265501976013,\n-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.809050858020782,-0.2569739818573,0.528584063053131,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.992223381996155,-0.121708244085312,0.0260738711804152,0.985335350036621,0.0123839350417256,-0.170178771018982,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.882815957069397,-0.369267553091049,0.290305823087692,0.903218030929565,-0.152758419513702,0.401076167821884,0.992223381996155,-0.121708244085312,0.0260738711804152,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.985335350036621,0.0123839350417256,-0.170178771018982,0.924062311649323,0.166339710354805,-0.344151109457016,0.961426019668579,0.11484207212925,-0.249942690134048,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.924062311649323,0.166339710354805,-0.344151109457016,0.798422634601593,0.345685362815857,-0.49297359585762,0.939432919025421,0.230844467878342,-0.253331035375595,0.961426019668579,0.11484207212925,-0.249942690134048,0.837947964668274,0.531638920307159,-0.123301580548286,0.843237340450287,0.525120317935944,-0.114888966083527,0.713566720485687,0.700178623199463,0.0239254627376795,0.734350562095642,0.677913904190063,0.0340876169502735,0.734350562095642,0.677913904190063,0.0340876169502735,0.713566720485687,0.700178623199463,0.0239254627376795,0.625909388065338,0.726224660873413,0.284315198659897,0.547434866428375,0.804429769515991,0.230668216943741,0.547434866428375,0.804429769515991,0.230668216943741,0.625909388065338,0.726224660873413,0.284315198659897,0.628335058689117,0.550278067588806,0.549899160861969,0.250951588153839,0.864162683486938,0.436172097921371,0.250951588153839,0.864162683486938,0.436172097921371,0.628335058689117,0.550278067588806,0.549899160861969,0.139649003744125,0.122624859213829,0.982578873634338,-0.0952283963561058,0.827900111675262,0.552732229232788,0.904506981372833,0.363091230392456,-0.223677977919579,0.87714958190918,0.359215557575226,-0.318704843521118,0.843237340450287,0.525120317935944,-0.114888966083527,\n0.837947964668274,0.531638920307159,-0.123301580548286,0.938012719154358,0.237205043435097,-0.252717018127441,0.868426561355591,0.2465450912714,-0.430175423622131,0.87714958190918,0.359215557575226,-0.318704843521118,0.904506981372833,0.363091230392456,-0.223677977919579,0.932059586048126,0.251616179943085,-0.260680228471756,0.796033978462219,0.30541729927063,-0.522541999816895,0.850903332233429,0.254371464252472,-0.459628790616989,0.934666991233826,0.235346615314484,-0.26647624373436,0.939432919025421,0.230844467878342,-0.253331035375595,0.798422634601593,0.345685362815857,-0.49297359585762,0.796033978462219,0.30541729927063,-0.522541999816895,0.932059586048126,0.251616179943085,-0.260680228471756,0.850903332233429,0.254371464252472,-0.459628790616989,0.863597810268402,0.181175544857979,-0.470504224300385,0.940755069255829,0.217000737786293,-0.260558247566223,0.934666991233826,0.235346615314484,-0.26647624373436,0.863597810268402,0.181175544857979,-0.470504224300385,0.868426561355591,0.2465450912714,-0.430175423622131,0.938012719154358,0.237205043435097,-0.252717018127441,0.940755069255829,0.217000737786293,-0.260558247566223,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.680876314640045,-0.688694536685944,-0.249213308095932,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.702580034732819,-0.699933290481567,0.128353402018547,-0.702580034732819,-0.699933290481567,0.128353402018547,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.293226510286331,-0.722825050354004,0.625733315944672,0.026099681854248,-0.974704563617706,0.221968054771423,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.680876314640045,-0.688694536685944,-0.249213308095932,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.980304419994354,-0.197097584605217,-0.0124787287786603,\n-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.895388603210449,0.358975976705551,0.26346829533577,-0.912629246711731,0.357585817575455,0.198091477155685,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.972477912902832,0.193684712052345,0.12951023876667,-0.730377912521362,0.544562876224518,0.412309736013412,-0.750467360019684,0.503474771976471,0.428149402141571,-0.912629246711731,0.357585817575455,0.198091477155685,-0.895388603210449,0.358975976705551,0.26346829533577,-0.442167282104492,0.71852970123291,0.536845564842224,-0.644507586956024,0.336329728364944,0.686652958393097,-0.750467360019684,0.503474771976471,0.428149402141571,-0.730377912521362,0.544562876224518,0.412309736013412,-0.0952283963561058,0.827900111675262,0.552732229232788,0.139649003744125,0.122624859213829,0.982578873634338,-0.644507586956024,0.336329728364944,0.686652958393097,-0.442167282104492,0.71852970123291,0.536845564842224,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.972477912902832,0.193684712052345,0.12951023876667,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.983128547668457,-0.182582557201386,-0.011038308031857,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.978760063648224,-0.199930444359779,-0.0453491657972336,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.980304419994354,-0.197097584605217,-0.0124787287786603,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.961961030960083,-0.248708829283714,-0.113026410341263,\n-0.978760063648224,-0.199930444359779,-0.0453491657972336,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.983128547668457,-0.182582557201386,-0.011038308031857,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.961961030960083,-0.248708829283714,-0.113026410341263,-0.976574420928955,-0.212938129901886,-0.0309790316969156,0.90192449092865,0.307413011789322,0.303363531827927,0.938613653182983,0.275698870420456,0.207351207733154,0.777440786361694,0.387861609458923,0.495125412940979,0.938613653182983,0.275698870420456,0.207351207733154,0.961426019668579,0.11484207212925,-0.249942690134048,0.939432919025421,0.230844467878342,-0.253331035375595,0.970218658447266,-0.0381909385323524,0.239201232790947,0.910413324832916,-0.164700835943222,0.379501283168793,0.987499356269836,0.0581452213227749,0.146506309509277,0.987499356269836,0.0581452213227749,0.146506309509277,0.938012719154358,0.237205043435097,-0.252717018127441,0.904506981372833,0.363091230392456,-0.223677977919579,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.980304419994354,-0.197097584605217,-0.0124787287786603,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.983128547668457,-0.182582557201386,-0.011038308031857,0.633086621761322,-0.179429575800896,0.752998232841492,0.398782223463058,0.608129858970642,0.686404287815094,0.0181612763553858,0.599665701389313,0.800044476985931,0.268051654100418,-0.524244606494904,0.808279573917389,0.0315268374979496,0.564418375492096,0.824886620044708,-0.397260129451752,0.234844520688057,0.887148499488831,-0.414126962423325,0.480852067470551,0.772839069366455,\n0.0181612763553858,0.599665701389313,0.800044476985931,-0.414126962423325,0.480852067470551,0.772839069366455,-0.397260129451752,0.234844520688057,0.887148499488831,-0.642944931983948,0.0801258310675621,0.761709690093994,-0.644507586956024,0.336329728364944,0.686652958393097,-0.278751373291016,-0.37135124206543,0.88566130399704,-0.644507586956024,0.336329728364944,0.686652958393097,0.139649003744125,0.122624859213829,0.982578873634338,0.268051654100418,-0.524244606494904,0.808279573917389,-0.278751373291016,-0.37135124206543,0.88566130399704,0.139649003744125,0.122624859213829,0.982578873634338,0.628335058689117,0.550278067588806,0.549899160861969,0.633086621761322,-0.179429575800896,0.752998232841492,0.268051654100418,-0.524244606494904,0.808279573917389,0.633086621761322,-0.179429575800896,0.752998232841492,0.628335058689117,0.550278067588806,0.549899160861969,0.54774808883667,0.373568952083588,0.74861091375351,0.398782223463058,0.608129858970642,0.686404287815094,0.54774808883667,0.373568952083588,0.74861091375351,0.0315268374979496,0.564418375492096,0.824886620044708,0.0181612763553858,0.599665701389313,0.800044476985931,0.398782223463058,0.608129858970642,0.686404287815094,0.0181612763553858,0.599665701389313,0.800044476985931,-0.414126962423325,0.480852067470551,0.772839069366455,-0.278751373291016,-0.37135124206543,0.88566130399704,0.268051654100418,-0.524244606494904,0.808279573917389,0.948896646499634,0.107380241155624,0.296756833791733,0.95304924249649,0.093354158103466,0.288066178560257,0.952853143215179,0.227692276239395,0.200567096471787,0.973640501499176,0.150164008140564,0.171682879328728,0.921807408332825,0.190687164664268,0.337504833936691,0.948896646499634,0.107380241155624,0.296756833791733,0.973640501499176,0.150164008140564,0.171682879328728,0.981701374053955,0.106130957603455,0.158109560608864,-0.809050858020782,-0.2569739818573,0.528584063053131,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.75111985206604,-0.269361168146133,0.602713465690613,-0.743283689022064,-0.261148422956467,0.615898430347443,\n-0.743283689022064,-0.261148422956467,0.615898430347443,-0.75111985206604,-0.269361168146133,0.602713465690613,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.754743993282318,-0.253586679697037,0.605025053024292,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.809050858020782,-0.2569739818573,0.528584063053131,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.754743993282318,-0.253586679697037,0.605025053024292,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.730377912521362,0.544562876224518,0.412309736013412,-0.895388603210449,0.358975976705551,0.26346829533577,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.371589094400406,-0.191971749067307,0.908332765102386,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.640028655529022,-0.393081039190292,0.660189807415009,-0.340044319629669,-0.38835272192955,0.856476545333862,0.71001797914505,-0.0603355132043362,0.701593995094299,0.799828112125397,-0.075599230825901,0.595449209213257,0.562524676322937,-0.508338332176209,0.652041435241699,0.415581941604614,-0.137492552399635,0.899103701114655,-0.738620281219482,0.158259704709053,0.655281603336334,-0.664949595928192,0.242700353264809,0.706355810165405,-0.635453879833221,-0.442719787359238,0.632611691951752,0.41880676150322,-0.0415473021566868,0.907124400138855,0.0549214817583561,-0.121100522577763,0.991119742393494,0.0793883204460144,-0.368574857711792,0.926201999187469,0.409103959798813,-0.270957797765732,0.8713299036026,-0.938033282756805,-0.126567348837852,0.322605550289154,-0.879705667495728,-0.112221792340279,0.462086796760559,\n-0.734731197357178,-0.22553177177906,0.639769911766052,-0.787253379821777,-0.358191251754761,0.501927375793457,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.644040644168854,-0.339113295078278,0.685721397399902,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.323071241378784,-0.339786946773529,0.883272171020508,0.542647838592529,0.604447543621063,0.583246529102325,0.674828827381134,0.533339440822601,0.510054051876068,0.817657768726349,0.451825648546219,0.356776267290115,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.938033282756805,-0.126567348837852,0.322605550289154,0.478552430868149,0.592504560947418,0.648016929626465,0.723428726196289,-0.0725484043359756,0.686576724052429,0.931710660457611,0.00594053184613585,0.363152772188187,0.83936071395874,0.300622671842575,0.452879250049591,0.542647838592529,0.604447543621063,0.583246529102325,0.478552430868149,0.592504560947418,0.648016929626465,0.83936071395874,0.300622671842575,0.452879250049591,0.674828827381134,0.533339440822601,0.510054051876068,0.904658854007721,-0.172026917338371,0.389870554208755,0.679584980010986,-0.597025573253632,0.426291733980179,0.562524676322937,-0.508338332176209,0.652041435241699,0.799828112125397,-0.075599230825901,0.595449209213257,0.931710660457611,0.00594053184613585,0.363152772188187,0.723428726196289,-0.0725484043359756,0.686576724052429,0.679584980010986,-0.597025573253632,0.426291733980179,0.904658854007721,-0.172026917338371,0.389870554208755,0.419204384088516,0.619329214096069,0.663851618766785,0.713757336139679,-0.0291267577558756,0.699787139892578,0.723428726196289,-0.0725484043359756,0.686576724052429,0.478552430868149,0.592504560947418,0.648016929626465,0.454763680696487,0.657829880714417,0.600374758243561,0.419204384088516,0.619329214096069,0.663851618766785,0.478552430868149,0.592504560947418,0.648016929626465,0.542647838592529,0.604447543621063,0.583246529102325,\n0.679584980010986,-0.597025573253632,0.426291733980179,0.88217830657959,-0.427934646606445,0.19655367732048,0.769319772720337,-0.500670611858368,0.396832406520844,0.562524676322937,-0.508338332176209,0.652041435241699,0.723428726196289,-0.0725484043359756,0.686576724052429,0.713757336139679,-0.0291267577558756,0.699787139892578,0.88217830657959,-0.427934646606445,0.19655367732048,0.679584980010986,-0.597025573253632,0.426291733980179,0.419204384088516,0.619329214096069,0.663851618766785,0.211952582001686,0.670883417129517,0.710627555847168,0.380322515964508,-0.00781834218651056,0.924820899963379,0.713757336139679,-0.0291267577558756,0.699787139892578,0.998829364776611,0.0265165809541941,-0.040457472205162,0.828034996986389,-0.0658707618713379,0.556793570518494,0.769319772720337,-0.500670611858368,0.396832406520844,0.88217830657959,-0.427934646606445,0.19655367732048,0.882227420806885,-0.112881802022457,0.457091331481934,0.998829364776611,0.0265165809541941,-0.040457472205162,0.88217830657959,-0.427934646606445,0.19655367732048,0.713757336139679,-0.0291267577558756,0.699787139892578,0.45019194483757,-0.821827292442322,0.349180638790131,0.392352849245071,-0.511246860027313,0.764647543430328,0.717177391052246,-0.236680090427399,0.655468583106995,0.938493072986603,-0.335132718086243,0.0831675454974175,0.415358334779739,-0.555045127868652,0.720695734024048,0.45019194483757,-0.821827292442322,0.349180638790131,0.938493072986603,-0.335132718086243,0.0831675454974175,0.845881640911102,-0.333893984556198,0.415931522846222,0.0997511595487595,0.3437180519104,0.933759927749634,-0.0513959974050522,-0.174092352390289,0.983387172222137,-0.129297733306885,0.717350006103516,0.68461012840271,0.380322515964508,-0.00781834218651056,0.924820899963379,-0.225461483001709,-0.22565546631813,0.947758793830872,-0.448386162519455,-0.404915392398834,0.796864748001099,0.381502151489258,-0.250341862440109,0.889823019504547,0.45019194483757,-0.821827292442322,0.349180638790131,-0.47701033949852,-0.793649733066559,0.377599358558655,-0.147943556308746,-0.468891173601151,0.870777666568756,\n0.392352849245071,-0.511246860027313,0.764647543430328,0.415358334779739,-0.555045127868652,0.720695734024048,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.47701033949852,-0.793649733066559,0.377599358558655,0.45019194483757,-0.821827292442322,0.349180638790131,-0.129297733306885,0.717350006103516,0.68461012840271,-0.214603140950203,0.506344437599182,0.835201025009155,-0.225461483001709,-0.22565546631813,0.947758793830872,0.380322515964508,-0.00781834218651056,0.924820899963379,0.211952582001686,0.670883417129517,0.710627555847168,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.214603140950203,0.506344437599182,0.835201025009155,-0.129297733306885,0.717350006103516,0.68461012840271,-0.0513959974050522,-0.174092352390289,0.983387172222137,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.518838763237,-0.706463754177094,0.481368243694305,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.225461483001709,-0.22565546631813,0.947758793830872,-0.518838763237,-0.706463754177094,0.481368243694305,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.664949595928192,0.242700353264809,0.706355810165405,-0.738620281219482,0.158259704709053,0.655281603336334,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.508101880550385,0.373251050710678,0.776219129562378,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.644040644168854,-0.339113295078278,0.685721397399902,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.508101880550385,0.373251050710678,0.776219129562378,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.703794181346893,-0.329490482807159,0.629372477531433,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.703794181346893,-0.329490482807159,0.629372477531433,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.395677655935287,-0.301782429218292,0.867390632629395,\n-0.650932431221008,-0.45871701836586,0.604868352413177,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.738620281219482,0.158259704709053,0.655281603336334,-0.644040644168854,-0.339113295078278,0.685721397399902,0.380322515964508,-0.00781834218651056,0.924820899963379,0.381502151489258,-0.250341862440109,0.889823019504547,0.882227420806885,-0.112881802022457,0.457091331481934,0.713757336139679,-0.0291267577558756,0.699787139892578,-0.214603140950203,0.506344437599182,0.835201025009155,-0.508101880550385,0.373251050710678,0.776219129562378,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.225461483001709,-0.22565546631813,0.947758793830872,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.518838763237,-0.706463754177094,0.481368243694305,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.518838763237,-0.706463754177094,0.481368243694305,-0.225461483001709,-0.22565546631813,0.947758793830872,0.904658854007721,-0.172026917338371,0.389870554208755,0.799828112125397,-0.075599230825901,0.595449209213257,0.674828827381134,0.533339440822601,0.510054051876068,0.83936071395874,0.300622671842575,0.452879250049591,0.728648900985718,-0.0937679037451744,0.678438127040863,0.700942933559418,0.0266663283109665,0.712718665599823,0.41880676150322,-0.0415473021566868,0.907124400138855,0.409103959798813,-0.270957797765732,0.8713299036026,0.0549214817583561,-0.121100522577763,0.991119742393494,-0.371589094400406,-0.191971749067307,0.908332765102386,-0.340044319629669,-0.38835272192955,0.856476545333862,0.0793883204460144,-0.368574857711792,0.926201999187469,-0.635453879833221,-0.442719787359238,0.632611691951752,-0.787253379821777,-0.358191251754761,0.501927375793457,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.644040644168854,-0.339113295078278,0.685721397399902,-0.738620281219482,0.158259704709053,0.655281603336334,0.358441174030304,0.000843510264530778,0.933551967144012,\n0.072246678173542,-0.0245807897299528,0.997083842754364,0.0549214817583561,-0.121100522577763,0.991119742393494,0.41880676150322,-0.0415473021566868,0.907124400138855,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.279380530118942,-0.650672852993011,0.706095814704895,0.415581941604614,-0.137492552399635,0.899103701114655,0.562524676322937,-0.508338332176209,0.652041435241699,0.769319772720337,-0.500670611858368,0.396832406520844,0.828034996986389,-0.0658707618713379,0.556793570518494,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.640028655529022,-0.393081039190292,0.660189807415009,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.280184537172318,-0.219449639320374,0.934525847434998,0.883821845054626,0.46681609749794,-0.0306868441402912,0.817657768726349,0.451825648546219,0.356776267290115,0.900879740715027,0.256662726402283,0.350056976079941,0.901214420795441,0.431201189756393,-0.0433364585042,0.904658854007721,-0.172026917338371,0.389870554208755,0.83936071395874,0.300622671842575,0.452879250049591,0.931710660457611,0.00594053184613585,0.363152772188187,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.703794181346893,-0.329490482807159,0.629372477531433,\n0.617214262485504,-0.750285804271698,0.236891880631447,0.713743150234222,-0.689680516719818,-0.122112594544888,0.969275593757629,-0.197328850626946,0.146854087710381,0.76043301820755,-0.311322569847107,0.569929718971252,0.432984858751297,-0.720436871051788,0.541751623153687,0.617214262485504,-0.750285804271698,0.236891880631447,0.76043301820755,-0.311322569847107,0.569929718971252,0.399355500936508,-0.336066722869873,0.85297966003418,0.399355500936508,-0.336066722869873,0.85297966003418,0.0704309046268463,-0.316668450832367,0.945917844772339,0.139990121126175,-0.714202702045441,0.685796797275543,0.432984858751297,-0.720436871051788,0.541751623153687,0.0704309046268463,-0.316668450832367,0.945917844772339,-0.378215819597244,-0.383805155754089,0.842405080795288,-0.289891123771667,-0.78655070066452,0.545253217220306,0.139990121126175,-0.714202702045441,0.685796797275543,-0.378215819597244,-0.383805155754089,0.842405080795288,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.289891123771667,-0.78655070066452,0.545253217220306,-0.175360560417175,-0.976183235645294,-0.127729922533035,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.175360560417175,-0.976183235645294,-0.127729922533035,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.280184537172318,-0.219449639320374,0.934525847434998,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.47701033949852,-0.793649733066559,0.377599358558655,-0.505195796489716,-0.403650432825089,0.762786626815796,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.913633704185486,-0.352534234523773,0.202467292547226,\n0.381502151489258,-0.250341862440109,0.889823019504547,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.505195796489716,-0.403650432825089,0.762786626815796,0.369075655937195,-0.252174496650696,0.894534051418304,0.882227420806885,-0.112881802022457,0.457091331481934,0.381502151489258,-0.250341862440109,0.889823019504547,0.369075655937195,-0.252174496650696,0.894534051418304,0.901904165744781,-0.103395886719227,0.419378310441971,0.901904165744781,-0.103395886719227,0.419378310441971,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.998829364776611,0.0265165809541941,-0.040457472205162,0.882227420806885,-0.112881802022457,0.457091331481934,0.717177391052246,-0.236680090427399,0.655468583106995,0.828034996986389,-0.0658707618713379,0.556793570518494,0.998829364776611,0.0265165809541941,-0.040457472205162,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.938493072986603,-0.335132718086243,0.0831675454974175,0.358441174030304,0.000843510264530778,0.933551967144012,0.415581941604614,-0.137492552399635,0.899103701114655,0.828034996986389,-0.0658707618713379,0.556793570518494,0.717177391052246,-0.236680090427399,0.655468583106995,0.71001797914505,-0.0603355132043362,0.701593995094299,0.415581941604614,-0.137492552399635,0.899103701114655,0.358441174030304,0.000843510264530778,0.933551967144012,0.698577165603638,0.0347565114498138,0.714690029621124,0.71001797914505,-0.0603355132043362,0.701593995094299,0.698577165603638,0.0347565114498138,0.714690029621124,0.922343671321869,0.13623221218586,0.361556380987167,0.927353084087372,0.117294065654278,0.355328530073166,0.956080257892609,0.274207085371017,-0.103542387485504,0.927353084087372,0.117294065654278,0.355328530073166,0.922343671321869,0.13623221218586,0.361556380987167,0.962835073471069,0.210140570998192,-0.169674947857857,-0.750467360019684,0.503474771976471,0.428149402141571,-0.644507586956024,0.336329728364944,0.686652958393097,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.011982899159193,-0.684736132621765,0.728692591190338,-0.993737041950226,-0.103920765221119,-0.041074700653553,\n-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.978760063648224,-0.199930444359779,-0.0453491657972336,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.944730460643768,-0.313157916069031,-0.0970383062958717,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.750467360019684,0.503474771976471,0.428149402141571,-0.011982899159193,-0.684736132621765,0.728692591190338,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.912629246711731,0.357585817575455,0.198091477155685,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.826197624206543,-0.211467355489731,-0.522186815738678,0.495204418897629,-0.163849160075188,0.853185832500458,0.628335058689117,0.550278067588806,0.549899160861969,0.625909388065338,0.726224660873413,0.284315198659897,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.361754894256592,-0.299040019512177,-0.883011043071747,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.154521003365517,0.240299493074417,-0.958321154117584,0.184527859091759,0.31499707698822,-0.930981338024139,0.204966142773628,0.497180044651031,-0.843090057373047,0.868426561355591,0.2465450912714,-0.430175423622131,0.854514420032501,0.21429717540741,-0.473161548376083,0.847418010234833,0.181933760643005,-0.49878141283989,0.86673891544342,0.195172861218452,-0.458989411592484,\n0.86673891544342,0.195172861218452,-0.458989411592484,0.924738705158234,0.24395327270031,-0.29213884472847,0.87714958190918,0.359215557575226,-0.318704843521118,0.828140437602997,-0.416388809680939,0.375238239765167,0.713566720485687,0.700178623199463,0.0239254627376795,0.843237340450287,0.525120317935944,-0.114888966083527,0.883931815624237,-0.461925357580185,-0.0727289691567421,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.506913185119629,-0.816672563552856,-0.275835067033768,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.506913185119629,-0.816672563552856,-0.275835067033768,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.467275679111481,0.564712703227997,-0.680259525775909,0.153497099876404,0.630856812000275,-0.76056444644928,0.387114733457565,-0.80674409866333,-0.446437150239944,0.141500309109688,-0.856403529644012,-0.496538639068604,-0.136648282408714,0.56611156463623,-0.812923669815063,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.467275679111481,0.564712703227997,-0.680259525775909,-0.136648282408714,0.56611156463623,-0.812923669815063,0.141500309109688,-0.856403529644012,-0.496538639068604,0.387114733457565,-0.80674409866333,-0.446437150239944,0.153497099876404,0.630856812000275,-0.76056444644928,0.343719273805618,0.683673620223999,-0.643775939941406,0.582785487174988,-0.706441342830658,-0.40162381529808,-0.733602643013,0.104122340679169,-0.671554684638977,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.809531450271606,0.353956669569016,0.468373239040375,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.747647523880005,-0.00706110056489706,-0.664058268070221,0.794842600822449,-0.0390454083681107,-0.605558216571808,-0.00303205195814371,-0.243413895368576,-0.969917774200439,0.370678871870041,0.354065299034119,-0.858623862266541,0.985135495662689,0.16939789056778,0.0285019427537918,\n0.181528016924858,-0.138318374752998,-0.973609566688538,0.287791073322296,-0.680340945720673,-0.67402708530426,0.412972420454025,-0.0658904165029526,-0.908356904983521,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.802786946296692,0.346281349658966,0.485409408807755,-0.855425894260406,0.486632615327835,-0.177299648523331,0.412972420454025,-0.0658904165029526,-0.908356904983521,0.287791073322296,-0.680340945720673,-0.67402708530426,0.445772647857666,-0.772406101226807,-0.452410876750946,0.725067377090454,0.0188654419034719,-0.688419461250305,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.802456378936768,-0.12530305981636,-0.583406329154968,-0.407887548208237,-0.115010686218739,-0.905759513378143,0.847418010234833,0.181933760643005,-0.49878141283989,0.854514420032501,0.21429717540741,-0.473161548376083,0.788738131523132,0.260696917772293,-0.556712925434113,0.767102777957916,0.172567009925842,-0.617878556251526,0.711101770401001,0.454571276903152,-0.536375999450684,0.700349986553192,0.341331839561462,-0.626899063587189,0.817859530448914,0.310457706451416,-0.484480977058411,0.811875224113464,0.435735166072845,-0.388578832149506,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.826197624206543,-0.211467355489731,-0.522186815738678,-0.944730460643768,-0.313157916069031,-0.0970383062958717,0.804398238658905,0.375304967164993,-0.460531920194626,0.850323617458344,0.228136360645294,-0.474239885807037,0.796033978462219,0.30541729927063,-0.522541999816895,0.804398238658905,0.375304967164993,-0.460531920194626,0.904132843017578,0.38877084851265,-0.177203312516212,0.783251345157623,0.53278785943985,-0.320397257804871,0.811875224113464,0.435735166072845,-0.388578832149506,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.461797803640366,-0.839399814605713,-0.286619544029236,\n-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.478379726409912,0.39488697052002,-0.784357786178589,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.0736050382256508,0.39994078874588,-0.913580656051636,0.135029509663582,-0.80270379781723,-0.580890357494354,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.478379726409912,0.39488697052002,-0.784357786178589,-0.0736050382256508,0.39994078874588,-0.913580656051636,0.247284039855003,0.510108411312103,-0.823796093463898,0.286900162696838,-0.815463900566101,-0.502699613571167,0.135029509663582,-0.80270379781723,-0.580890357494354,0.468129217624664,-0.774566531181335,-0.425325512886047,0.286900162696838,-0.815463900566101,-0.502699613571167,0.247284039855003,0.510108411312103,-0.823796093463898,0.525159299373627,0.660153150558472,-0.537034034729004,0.821175813674927,-0.555518984794617,0.130648210644722,0.468129217624664,-0.774566531181335,-0.425325512886047,0.525159299373627,0.660153150558472,-0.537034034729004,0.81356155872345,0.572328507900238,0.102750584483147,0.261260062456131,-0.761487662792206,0.593194544315338,0.419214755296707,-0.523533642292023,0.741735517978668,-0.397260129451752,0.234844520688057,0.887148499488831,0.0315268374979496,0.564418375492096,0.824886620044708,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.642944931983948,0.0801258310675621,0.761709690093994,-0.397260129451752,0.234844520688057,0.887148499488831,0.689028441905975,-0.416694343090057,0.592963397502899,-0.668442606925964,0.712539076805115,-0.213242903351784,-0.39990708231926,0.909411907196045,-0.114211864769459,-0.886275291442871,0.375701189041138,0.270859181880951,-0.888629198074341,0.438762098550797,0.133514106273651,0.749106764793396,0.343264579772949,-0.56657612323761,0.741937816143036,0.455005794763565,-0.492440849542618,0.797342956066132,0.463364690542221,-0.386700719594955,0.825478971004486,0.333341240882874,-0.455486595630646,\n-0.917498290538788,0.153388485312462,-0.36697256565094,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.903565168380737,0.0908703580498695,-0.418703347444534,0.784849643707275,0.264893710613251,-0.560216426849365,0.808817446231842,0.214464277029037,-0.547557651996613,0.833951056003571,0.203840136528015,-0.512810707092285,0.841212332248688,0.233560338616371,-0.487659126520157,0.582049369812012,-0.552822172641754,-0.596327304840088,0.750801265239716,0.03514039888978,-0.659592807292938,0.847964406013489,0.0018927511991933,-0.530049800872803,0.632658183574677,-0.595792829990387,-0.494746923446655,0.964388489723206,0.187021419405937,-0.187023624777794,0.974583148956299,0.15406733751297,-0.162637546658516,0.841212332248688,0.233560338616371,-0.487659126520157,0.833951056003571,0.203840136528015,-0.512810707092285,0.904132843017578,0.38877084851265,-0.177203312516212,0.883821845054626,0.46681609749794,-0.0306868441402912,0.789179563522339,0.518753051757813,-0.328771829605103,0.783251345157623,0.53278785943985,-0.320397257804871,0.215944558382034,0.319608330726624,-0.922614991664886,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.323528319597244,0.300020337104797,-0.89739465713501,0.224338784813881,0.414775222539902,-0.881835401058197,-0.233401030302048,0.186044618487358,-0.954416751861572,0.2085961997509,0.239187613129616,-0.948302090167999,0.168669149279594,0.29014664888382,-0.942000865936279,-0.261592835187912,0.265700459480286,-0.927886009216309,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.846266686916351,-0.512883901596069,-0.144162610173225,0.903218030929565,-0.152758419513702,0.401076167821884,0.542647838592529,0.604447543621063,0.583246529102325,0.817657768726349,0.451825648546219,0.356776267290115,0.992223381996155,-0.121708244085312,0.0260738711804152,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.787253379821777,-0.358191251754761,0.501927375793457,\n-0.635453879833221,-0.442719787359238,0.632611691951752,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.76449728012085,0.158614858984947,-0.624808132648468,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.897854268550873,-0.19834990799427,-0.393083959817886,0.740222573280334,0.520439863204956,-0.4256911277771,0.7084801197052,0.54767894744873,-0.445088446140289,0.783251345157623,0.53278785943985,-0.320397257804871,0.789179563522339,0.518753051757813,-0.328771829605103,0.216972485184669,0.595779240131378,-0.773285210132599,0.233416378498077,0.501707494258881,-0.832950413227081,-0.337705463171005,0.352743804454803,-0.872655034065247,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.894527077674866,-0.0458483695983887,-0.444656252861023,0.749106764793396,0.343264579772949,-0.56657612323761,0.825478971004486,0.333341240882874,-0.455486595630646,0.83752965927124,0.20064052939415,-0.508219838142395,0.794304847717285,0.190871343016624,-0.576756417751312,-0.28614467382431,0.227497309446335,-0.930787920951843,0.215944558382034,0.319608330726624,-0.922614991664886,0.222743824124336,0.213152140378952,-0.951289296150208,-0.243201240897179,0.169641554355621,-0.955026090145111,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.907213628292084,-0.0245506521314383,-0.419953256845474,0.847964406013489,0.0018927511991933,-0.530049800872803,0.971639752388,-0.0853487625718117,-0.220526039600372,0.698415637016296,-0.626996219158173,-0.345096111297607,0.632658183574677,-0.595792829990387,-0.494746923446655,-0.107030250132084,-0.605656087398529,-0.788495600223541,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.700080990791321,-0.0367838852107525,-0.713115334510803,\n-0.255131036043167,0.019106624647975,-0.966717660427094,0.711101770401001,0.454571276903152,-0.536375999450684,0.811875224113464,0.435735166072845,-0.388578832149506,0.783251345157623,0.53278785943985,-0.320397257804871,0.7084801197052,0.54767894744873,-0.445088446140289,0.216972485184669,0.595779240131378,-0.773285210132599,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.232910394668579,0.366851598024368,-0.900651276111603,0.204966142773628,0.497180044651031,-0.843090057373047,-0.826197624206543,-0.211467355489731,-0.522186815738678,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.897854268550873,-0.19834990799427,-0.393083959817886,0.784849643707275,0.264893710613251,-0.560216426849365,0.841212332248688,0.233560338616371,-0.487659126520157,0.847964406013489,0.0018927511991933,-0.530049800872803,0.750801265239716,0.03514039888978,-0.659592807292938,0.156650885939598,0.00669354572892189,-0.987631380558014,-0.255131036043167,0.019106624647975,-0.966717660427094,-0.261592835187912,0.265700459480286,-0.927886009216309,0.168669149279594,0.29014664888382,-0.942000865936279,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.937702357769012,-0.340810507535934,-0.0675463825464249,0.924062311649323,0.166339710354805,-0.344151109457016,0.904132843017578,0.38877084851265,-0.177203312516212,0.804398238658905,0.375304967164993,-0.460531920194626,0.798422634601593,0.345685362815857,-0.49297359585762,0.633183419704437,0.759799301624298,-0.14759349822998,0.949472963809967,-0.307868123054504,0.0609782487154007,0.582785487174988,-0.706441342830658,-0.40162381529808,0.343719273805618,0.683673620223999,-0.643775939941406,0.495204418897629,-0.163849160075188,0.853185832500458,0.625909388065338,0.726224660873413,0.284315198659897,0.69633674621582,-0.401266545057297,0.595063328742981,0.54774808883667,0.373568952083588,0.74861091375351,0.0833947658538818,-0.437338054180145,0.895422101020813,\n0.127582147717476,-0.649050772190094,0.749970614910126,-0.397260129451752,0.234844520688057,0.887148499488831,0.419214755296707,-0.523533642292023,0.741735517978668,0.689028441905975,-0.416694343090057,0.592963397502899,0.788738131523132,0.260696917772293,-0.556712925434113,0.680371522903442,0.248313769698143,-0.689517855644226,0.468770742416382,0.121921703219414,-0.874865233898163,0.767102777957916,0.172567009925842,-0.617878556251526,0.16710638999939,-0.594872176647186,-0.786258578300476,-0.107030250132084,-0.605656087398529,-0.788495600223541,-0.255131036043167,0.019106624647975,-0.966717660427094,0.156650885939598,0.00669354572892189,-0.987631380558014,0.969275593757629,-0.197328850626946,0.146854087710381,0.955532789230347,0.0592790879309177,0.288865029811859,0.728648900985718,-0.0937679037451744,0.678438127040863,0.76043301820755,-0.311322569847107,0.569929718971252,0.399355500936508,-0.336066722869873,0.85297966003418,0.76043301820755,-0.311322569847107,0.569929718971252,0.728648900985718,-0.0937679037451744,0.678438127040863,0.409103959798813,-0.270957797765732,0.8713299036026,0.409103959798813,-0.270957797765732,0.8713299036026,0.0793883204460144,-0.368574857711792,0.926201999187469,0.0704309046268463,-0.316668450832367,0.945917844772339,0.399355500936508,-0.336066722869873,0.85297966003418,0.0793883204460144,-0.368574857711792,0.926201999187469,-0.340044319629669,-0.38835272192955,0.856476545333862,-0.378215819597244,-0.383805155754089,0.842405080795288,0.0704309046268463,-0.316668450832367,0.945917844772339,-0.340044319629669,-0.38835272192955,0.856476545333862,-0.640028655529022,-0.393081039190292,0.660189807415009,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.378215819597244,-0.383805155754089,0.842405080795288,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.640028655529022,-0.393081039190292,0.660189807415009,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.788328349590302,-0.474288523197174,0.39190411567688,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.938033282756805,-0.126567348837852,0.322605550289154,\n-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.938033282756805,-0.126567348837852,0.322605550289154,-0.787253379821777,-0.358191251754761,0.501927375793457,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.635453879833221,-0.442719787359238,0.632611691951752,-0.664949595928192,0.242700353264809,0.706355810165405,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.802456378936768,-0.12530305981636,-0.583406329154968,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.980311870574951,-0.142144083976746,-0.137053519487381,0.665161728858948,0.0713187083601952,0.743285655975342,0.0997511595487595,0.3437180519104,0.933759927749634,0.211952582001686,0.670883417129517,0.710627555847168,0.211952582001686,0.670883417129517,0.710627555847168,0.0997511595487595,0.3437180519104,0.933759927749634,-0.129297733306885,0.717350006103516,0.68461012840271,0.433499962091446,-0.540944635868073,-0.720733463764191,0.757972776889801,-0.133172035217285,-0.63854718208313,0.839367091655731,0.0223367810249329,-0.543105840682983,0.698725283145905,-0.511526346206665,-0.500123798847198,0.625909388065338,0.726224660873413,0.284315198659897,0.713566720485687,0.700178623199463,0.0239254627376795,0.828140437602997,-0.416388809680939,0.375238239765167,0.69633674621582,-0.401266545057297,0.595063328742981,0.985335350036621,0.0123839350417256,-0.170178771018982,0.992223381996155,-0.121708244085312,0.0260738711804152,0.817657768726349,0.451825648546219,0.356776267290115,0.883821845054626,0.46681609749794,-0.0306868441402912,0.904132843017578,0.38877084851265,-0.177203312516212,0.572269201278687,-0.327979475259781,0.751623213291168,0.263325154781342,-0.487631261348724,0.832391500473022,0.0997511595487595,0.3437180519104,0.933759927749634,0.665161728858948,0.0713187083601952,0.743285655975342,\n0.263325154781342,-0.487631261348724,0.832391500473022,-0.10741464048624,-0.480259567499161,0.87052446603775,0.026099681854248,-0.974704563617706,0.221968054771423,-0.0513959974050522,-0.174092352390289,0.983387172222137,0.0997511595487595,0.3437180519104,0.933759927749634,-0.508101880550385,0.373251050710678,0.776219129562378,-0.214603140950203,0.506344437599182,0.835201025009155,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.664949595928192,0.242700353264809,0.706355810165405,0.903218030929565,-0.152758419513702,0.401076167821884,0.882815957069397,-0.369267553091049,0.290305823087692,0.665161728858948,0.0713187083601952,0.743285655975342,0.454763680696487,0.657829880714417,0.600374758243561,0.542647838592529,0.604447543621063,0.583246529102325,0.87714958190918,0.359215557575226,-0.318704843521118,0.924738705158234,0.24395327270031,-0.29213884472847,0.843237340450287,0.525120317935944,-0.114888966083527,0.839367091655731,0.0223367810249329,-0.543105840682983,0.757972776889801,-0.133172035217285,-0.63854718208313,0.86673891544342,0.195172861218452,-0.458989411592484,0.847418010234833,0.181933760643005,-0.49878141283989,0.468770742416382,0.121921703219414,-0.874865233898163,0.412972420454025,-0.0658904165029526,-0.908356904983521,0.725067377090454,0.0188654419034719,-0.688419461250305,0.767102777957916,0.172567009925842,-0.617878556251526,0.412972420454025,-0.0658904165029526,-0.908356904983521,0.468770742416382,0.121921703219414,-0.874865233898163,0.236234411597252,0.0899422541260719,-0.967524528503418,0.181528016924858,-0.138318374752998,-0.973609566688538,-0.802456378936768,-0.12530305981636,-0.583406329154968,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.361754894256592,-0.299040019512177,-0.883011043071747,-0.407887548208237,-0.115010686218739,-0.905759513378143,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.802456378936768,-0.12530305981636,-0.583406329154968,\n-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.894527077674866,-0.0458483695983887,-0.444656252861023,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.700080990791321,-0.0367838852107525,-0.713115334510803,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.700080990791321,-0.0367838852107525,-0.713115334510803,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.897854268550873,-0.19834990799427,-0.393083959817886,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.944730460643768,-0.313157916069031,-0.0970383062958717,-0.826197624206543,-0.211467355489731,-0.522186815738678,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.897854268550873,-0.19834990799427,-0.393083959817886,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.980311870574951,-0.142144083976746,-0.137053519487381,0.924738705158234,0.24395327270031,-0.29213884472847,0.86673891544342,0.195172861218452,-0.458989411592484,\n0.757972776889801,-0.133172035217285,-0.63854718208313,0.843237340450287,0.525120317935944,-0.114888966083527,0.924738705158234,0.24395327270031,-0.29213884472847,0.757972776889801,-0.133172035217285,-0.63854718208313,0.883931815624237,-0.461925357580185,-0.0727289691567421,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.917498290538788,0.153388485312462,-0.36697256565094,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.599566876888275,-0.77289891242981,-0.207718148827553,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.917498290538788,0.153388485312462,-0.36697256565094,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.76449728012085,0.158614858984947,-0.624808132648468,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.917498290538788,0.153388485312462,-0.36697256565094,0.224338784813881,0.414775222539902,-0.881835401058197,-0.323528319597244,0.300020337104797,-0.89739465713501,-0.337705463171005,0.352743804454803,-0.872655034065247,0.233416378498077,0.501707494258881,-0.832950413227081,0.740222573280334,0.520439863204956,-0.4256911277771,0.789179563522339,0.518753051757813,-0.328771829605103,0.797342956066132,0.463364690542221,-0.386700719594955,0.741937816143036,0.455005794763565,-0.492440849542618,0.799828112125397,-0.075599230825901,0.595449209213257,0.900879740715027,0.256662726402283,0.350056976079941,0.817657768726349,0.451825648546219,0.356776267290115,0.674828827381134,0.533339440822601,0.510054051876068,0.971639752388,-0.0853487625718117,-0.220526039600372,0.974583148956299,0.15406733751297,-0.162637546658516,0.955532789230347,0.0592790879309177,0.288865029811859,0.969275593757629,-0.197328850626946,0.146854087710381,\n0.698415637016296,-0.626996219158173,-0.345096111297607,0.971639752388,-0.0853487625718117,-0.220526039600372,0.969275593757629,-0.197328850626946,0.146854087710381,0.713743150234222,-0.689680516719818,-0.122112594544888,0.728648900985718,-0.0937679037451744,0.678438127040863,0.955532789230347,0.0592790879309177,0.288865029811859,0.93097060918808,0.125499755144119,0.342846184968948,0.700942933559418,0.0266663283109665,0.712718665599823,0.71001797914505,-0.0603355132043362,0.701593995094299,0.927353084087372,0.117294065654278,0.355328530073166,0.900879740715027,0.256662726402283,0.350056976079941,0.799828112125397,-0.075599230825901,0.595449209213257,0.900879740715027,0.256662726402283,0.350056976079941,0.927353084087372,0.117294065654278,0.355328530073166,0.956080257892609,0.274207085371017,-0.103542387485504,0.901214420795441,0.431201189756393,-0.0433364585042,0.974583148956299,0.15406733751297,-0.162637546658516,0.964388489723206,0.187021419405937,-0.187023624777794,0.93097060918808,0.125499755144119,0.342846184968948,0.955532789230347,0.0592790879309177,0.288865029811859,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.980311870574951,-0.142144083976746,-0.137053519487381,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.978760063648224,-0.199930444359779,-0.0453491657972336,-0.961961030960083,-0.248708829283714,-0.113026410341263,-0.980311870574951,-0.142144083976746,-0.137053519487381,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.794891834259033,-0.0708803534507751,-0.602596819400787,0.184527859091759,0.31499707698822,-0.930981338024139,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.0849575996398926,0.129486069083214,-0.9879350066185,0.152592211961746,0.243283241987228,-0.957877278327942,\n0.817859530448914,0.310457706451416,-0.484480977058411,0.700349986553192,0.341331839561462,-0.626899063587189,0.680371522903442,0.248313769698143,-0.689517855644226,0.788738131523132,0.260696917772293,-0.556712925434113,0.863597810268402,0.181175544857979,-0.470504224300385,0.850323617458344,0.228136360645294,-0.474239885807037,0.854514420032501,0.21429717540741,-0.473161548376083,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.371589094400406,-0.191971749067307,0.908332765102386,-0.280184537172318,-0.219449639320374,0.934525847434998,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.894527077674866,-0.0458483695983887,-0.444656252861023,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.894527077674866,-0.0458483695983887,-0.444656252861023,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.243201240897179,0.169641554355621,-0.955026090145111,0.222743824124336,0.213152140378952,-0.951289296150208,0.2085961997509,0.239187613129616,-0.948302090167999,-0.233401030302048,0.186044618487358,-0.954416751861572,0.833951056003571,0.203840136528015,-0.512810707092285,0.808817446231842,0.214464277029037,-0.547557651996613,0.794304847717285,0.190871343016624,-0.576756417751312,0.83752965927124,0.20064052939415,-0.508219838142395,0.962835073471069,0.210140570998192,-0.169674947857857,0.964388489723206,0.187021419405937,-0.187023624777794,0.833951056003571,0.203840136528015,-0.512810707092285,\n0.83752965927124,0.20064052939415,-0.508219838142395,0.964388489723206,0.187021419405937,-0.187023624777794,0.962835073471069,0.210140570998192,-0.169674947857857,0.922343671321869,0.13623221218586,0.361556380987167,0.93097060918808,0.125499755144119,0.342846184968948,0.93097060918808,0.125499755144119,0.342846184968948,0.922343671321869,0.13623221218586,0.361556380987167,0.698577165603638,0.0347565114498138,0.714690029621124,0.700942933559418,0.0266663283109665,0.712718665599823,0.41880676150322,-0.0415473021566868,0.907124400138855,0.700942933559418,0.0266663283109665,0.712718665599823,0.698577165603638,0.0347565114498138,0.714690029621124,0.358441174030304,0.000843510264530778,0.933551967144012,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.47701033949852,-0.793649733066559,0.377599358558655,0.392352849245071,-0.511246860027313,0.764647543430328,0.072246678173542,-0.0245807897299528,0.997083842754364,0.358441174030304,0.000843510264530778,0.933551967144012,0.717177391052246,-0.236680090427399,0.655468583106995,0.392352849245071,-0.511246860027313,0.764647543430328,-0.147943556308746,-0.468891173601151,0.870777666568756,0.072246678173542,-0.0245807897299528,0.997083842754364,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.505195796489716,-0.403650432825089,0.762786626815796,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.505195796489716,-0.403650432825089,0.762786626815796,-0.519910514354706,-0.607847154140472,0.600179076194763,0.415358334779739,-0.555045127868652,0.720695734024048,0.369075655937195,-0.252174496650696,0.894534051418304,0.901904165744781,-0.103395886719227,0.419378310441971,0.369075655937195,-0.252174496650696,0.894534051418304,0.415358334779739,-0.555045127868652,0.720695734024048,0.845881640911102,-0.333893984556198,0.415931522846222,0.845881640911102,-0.333893984556198,0.415931522846222,0.938493072986603,-0.335132718086243,0.0831675454974175,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.901904165744781,-0.103395886719227,0.419378310441971,\n-0.680876314640045,-0.688694536685944,-0.249213308095932,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.680876314640045,-0.688694536685944,-0.249213308095932,0.863597810268402,0.181175544857979,-0.470504224300385,0.854514420032501,0.21429717540741,-0.473161548376083,0.868426561355591,0.2465450912714,-0.430175423622131,0.850903332233429,0.254371464252472,-0.459628790616989,0.850323617458344,0.228136360645294,-0.474239885807037,0.863597810268402,0.181175544857979,-0.470504224300385,0.796033978462219,0.30541729927063,-0.522541999816895,0.850323617458344,0.228136360645294,-0.474239885807037,0.850903332233429,0.254371464252472,-0.459628790616989,0.804398238658905,0.375304967164993,-0.460531920194626,0.796033978462219,0.30541729927063,-0.522541999816895,0.798422634601593,0.345685362815857,-0.49297359585762,0.419204384088516,0.619329214096069,0.663851618766785,0.454763680696487,0.657829880714417,0.600374758243561,0.665161728858948,0.0713187083601952,0.743285655975342,0.211952582001686,0.670883417129517,0.710627555847168,-0.0513959974050522,-0.174092352390289,0.983387172222137,0.026099681854248,-0.974704563617706,0.221968054771423,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.506913185119629,-0.816672563552856,-0.275835067033768,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.28744050860405,0.955214440822601,-0.0703088492155075,-0.22865828871727,0.9653559923172,-0.125710710883141,-0.467275679111481,0.564712703227997,-0.680259525775909,-0.182223752140999,0.96368795633316,-0.195192277431488,-0.158186048269272,0.96994811296463,-0.184872642159462,0.153497099876404,0.630856812000275,-0.76056444644928,-0.136648282408714,0.56611156463623,-0.812923669815063,0.387114733457565,-0.80674409866333,-0.446437150239944,\n0.450898140668869,-0.00387678225524724,-0.892566978931427,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.141500309109688,-0.856403529644012,-0.496538639068604,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.886275291442871,0.375701189041138,0.270859181880951,-0.39990708231926,0.909411907196045,-0.114211864769459,-0.332606077194214,0.942266285419464,-0.0388254560530186,-0.467275679111481,0.564712703227997,-0.680259525775909,-0.22865828871727,0.9653559923172,-0.125710710883141,-0.182223752140999,0.96368795633316,-0.195192277431488,-0.136648282408714,0.56611156463623,-0.812923669815063,0.752802550792694,0.00600722571834922,-0.658219039440155,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.387114733457565,-0.80674409866333,-0.446437150239944,0.582785487174988,-0.706441342830658,-0.40162381529808,0.343719273805618,0.683673620223999,-0.643775939941406,0.153497099876404,0.630856812000275,-0.76056444644928,-0.158186048269272,0.96994811296463,-0.184872642159462,-0.190744638442993,0.965611159801483,-0.176667913794518,-0.191050976514816,-0.840808987617493,-0.50649756193161,0.141500309109688,-0.856403529644012,-0.496538639068604,-0.247537314891815,0.00721516087651253,-0.968851506710052,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.506913185119629,-0.816672563552856,-0.275835067033768,0.370678871870041,0.354065299034119,-0.858623862266541,0.433499962091446,-0.540944635868073,-0.720733463764191,0.821175813674927,-0.555518984794617,0.130648210644722,0.81356155872345,0.572328507900238,0.102750584483147,0.821175813674927,-0.555518984794617,0.130648210644722,0.433499962091446,-0.540944635868073,-0.720733463764191,0.698725283145905,-0.511526346206665,-0.500123798847198,0.445772647857666,-0.772406101226807,-0.452410876750946,0.468129217624664,-0.774566531181335,-0.425325512886047,-0.536809802055359,-0.812587976455688,-0.227015629410744,\n-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.802786946296692,0.346281349658966,0.485409408807755,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.809531450271606,0.353956669569016,0.468373239040375,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.802786946296692,0.346281349658966,0.485409408807755,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.0736050382256508,0.39994078874588,-0.913580656051636,-0.478379726409912,0.39488697052002,-0.784357786178589,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.140064582228661,-0.834803938865662,-0.532432377338409,0.135029509663582,-0.80270379781723,-0.580890357494354,0.183815449476242,-0.694319665431976,-0.695795953273773,-0.0776953548192978,-0.877335965633392,-0.473545104265213,0.3254614174366,-0.149335280060768,-0.933688282966614,0.247284039855003,0.510108411312103,-0.823796093463898,-0.0736050382256508,0.39994078874588,-0.913580656051636,-0.0602304749190807,-0.267121762037277,-0.961778700351715,0.135029509663582,-0.80270379781723,-0.580890357494354,0.286900162696838,-0.815463900566101,-0.502699613571167,0.287791073322296,-0.680340945720673,-0.67402708530426,0.183815449476242,-0.694319665431976,-0.695795953273773,0.247284039855003,0.510108411312103,-0.823796093463898,0.3254614174366,-0.149335280060768,-0.933688282966614,\n0.727754414081573,0.0140857892110944,-0.685693144798279,0.525159299373627,0.660153150558472,-0.537034034729004,0.287791073322296,-0.680340945720673,-0.67402708530426,0.286900162696838,-0.815463900566101,-0.502699613571167,0.468129217624664,-0.774566531181335,-0.425325512886047,0.445772647857666,-0.772406101226807,-0.452410876750946,0.525159299373627,0.660153150558472,-0.537034034729004,0.727754414081573,0.0140857892110944,-0.685693144798279,0.985135495662689,0.16939789056778,0.0285019427537918,0.370678871870041,0.354065299034119,-0.858623862266541,0.81356155872345,0.572328507900238,0.102750584483147,0.179054066538811,0.451375037431717,-0.8741854429245,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.949472963809967,-0.307868123054504,0.0609782487154007,0.633183419704437,0.759799301624298,-0.14759349822998,0.949472963809967,-0.307868123054504,0.0609782487154007,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.752802550792694,0.00600722571834922,-0.658219039440155,0.582785487174988,-0.706441342830658,-0.40162381529808,0.633183419704437,0.759799301624298,-0.14759349822998,0.343719273805618,0.683673620223999,-0.643775939941406,-0.190744638442993,0.965611159801483,-0.176667913794518,0.179054066538811,0.451375037431717,-0.8741854429245,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.809531450271606,0.353956669569016,0.468373239040375,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.794855117797852,0.412983626127243,-0.444578289985657,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.952340543270111,-0.189113721251488,0.239339768886566,0.905556082725525,-0.270015031099319,0.327200382947922,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.952340543270111,-0.189113721251488,0.239339768886566,0.836283266544342,-0.213887274265289,0.504858911037445,0.780203700065613,-0.321272552013397,0.53671795129776,0.905556082725525,-0.270015031099319,0.327200382947922,0.836283266544342,-0.213887274265289,0.504858911037445,0.660950601100922,-0.242743700742722,0.71008437871933,0.485521018505096,-0.413983583450317,0.769991517066956,\n0.780203700065613,-0.321272552013397,0.53671795129776,0.477214813232422,-0.241928040981293,0.844829499721527,0.353479385375977,-0.210105717182159,0.911541521549225,0.081648163497448,-0.362786680459976,0.928288400173187,0.188842624425888,-0.479352325201035,0.857064664363861,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.158661097288132,-0.379611909389496,0.911439180374146,-0.0760671570897102,-0.295749187469482,0.952232241630554,0.109986312687397,-0.239039734005928,0.964760601520538,-0.52398544549942,-0.396743208169937,0.753680348396301,-0.158661097288132,-0.379611909389496,0.911439180374146,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.481494218111038,-0.48454275727272,0.730329811573029,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.75563770532608,-0.50673520565033,0.415007293224335,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.960243940353394,-0.113252773880959,-0.255157649517059,0.992983877658844,-0.0297704339027405,0.114441238343716,0.939164042472839,-0.287473499774933,0.187962368130684,0.946958303451538,-0.273756355047226,-0.168307527899742,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.992983877658844,-0.0297704339027405,0.114441238343716,0.915004968643188,-0.0659479200839996,0.398016005754471,0.821053445339203,-0.304968655109406,0.482561200857162,0.939164042472839,-0.287473499774933,0.187962368130684,0.915004968643188,-0.0659479200839996,0.398016005754471,0.755727231502533,-0.0899055525660515,0.648685872554779,0.658008575439453,-0.304749071598053,0.688587427139282,0.821053445339203,-0.304968655109406,0.482561200857162,0.353479385375977,-0.210105717182159,0.911541521549225,0.365955173969269,-0.121213011443615,0.922704815864563,0.0752642378211021,-0.163290247321129,0.983702957630157,0.081648163497448,-0.362786680459976,0.928288400173187,-0.184660717844963,-0.167485594749451,0.968426048755646,\n-0.141511112451553,-0.212750777602196,0.966804921627045,0.37811690568924,-0.192061543464661,0.90561580657959,0.326031237840652,-0.100235551595688,0.940030038356781,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.481494218111038,-0.48454275727272,0.730329811573029,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.0331847779452801,-0.163069307804108,0.986056327819824,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.481494218111038,-0.48454275727272,0.730329811573029,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.925617933273315,-0.333309531211853,0.179265692830086,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.79849648475647,0.00311785028316081,-0.601991355419159,0.906778931617737,0.0885622203350067,-0.412199825048447,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.989881575107574,0.137960970401764,0.0331847853958607,0.992983877658844,-0.0297704339027405,0.114441238343716,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.937741100788116,0.0962117910385132,-0.333743721246719,0.915004968643188,-0.0659479200839996,0.398016005754471,0.992983877658844,-0.0297704339027405,0.114441238343716,0.989881575107574,0.137960970401764,0.0331847853958607,0.948979258537292,0.121414266526699,0.291027426719666,0.755727231502533,-0.0899055525660515,0.648685872554779,0.915004968643188,-0.0659479200839996,0.398016005754471,0.948979258537292,0.121414266526699,0.291027426719666,0.808870196342468,0.0797994136810303,0.582547068595886,0.365955173969269,-0.121213011443615,0.922704815864563,0.399412155151367,0.0118926726281643,0.916694343090057,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.0752642378211021,-0.163290247321129,0.983702957630157,-0.274106293916702,-0.107289478182793,0.955695927143097,-0.184660717844963,-0.167485594749451,0.968426048755646,\n0.326031237840652,-0.100235551595688,0.940030038356781,0.309460699558258,0.0171790830790997,0.950757026672363,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.0331847779452801,-0.163069307804108,0.986056327819824,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.858429491519928,-0.151253908872604,0.490123569965363,0.79849648475647,0.00311785028316081,-0.601991355419159,0.770998120307922,0.0437404066324234,-0.63533353805542,0.899548053741455,0.145640388131142,-0.411827832460403,0.906778931617737,0.0885622203350067,-0.412199825048447,0.978495180606842,0.204968735575676,-0.0231311116367579,0.989881575107574,0.137960970401764,0.0331847853958607,0.937741100788116,0.0962117910385132,-0.333743721246719,0.927813827991486,0.152230933308601,-0.340569078922272,0.854383409023285,0.179303303360939,0.487728714942932,0.808870196342468,0.0797994136810303,0.582547068595886,0.948979258537292,0.121414266526699,0.291027426719666,0.961814522743225,0.194339916110039,0.1927300542593,-0.414724171161652,0.00967030972242355,0.909895837306976,-0.274106293916702,-0.107289478182793,0.955695927143097,0.309460699558258,0.0171790830790997,0.950757026672363,0.192327603697777,0.12894095480442,0.972822844982147,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.96939754486084,-0.16740058362484,0.179570108652115,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.987223207950592,-0.158936277031899,-0.0113820992410183,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.982540905475616,-0.173452958464623,0.0672866627573967,0.926154136657715,0.165854901075363,-0.3387191593647,0.922853767871857,-0.106967732310295,-0.369998395442963,0.978555917739868,-0.185044288635254,-0.090481773018837,\n0.978495180606842,0.204968735575676,-0.0231311116367579,0.927813827991486,0.152230933308601,-0.340569078922272,0.548670411109924,0.271492123603821,0.790729284286499,0.501937747001648,0.161304622888565,0.849728941917419,0.854383409023285,0.179303303360939,0.487728714942932,0.882719457149506,0.298290461301804,0.36308279633522,0.709650099277496,-0.321021109819412,0.627169966697693,0.47046023607254,0.569419384002686,0.674113273620605,-0.180715546011925,0.601944923400879,0.77782016992569,0.251838862895966,-0.440983474254608,0.861458539962769,0.251838862895966,-0.440983474254608,0.861458539962769,-0.180715546011925,0.601944923400879,0.77782016992569,-0.692504823207855,0.347807645797729,0.632033944129944,-0.337113708257675,-0.517143785953522,0.78671258687973,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.0315550751984119,0.227497562766075,0.973267257213593,0.192327603697777,0.12894095480442,0.972822844982147,-0.17640919983387,0.25873214006424,0.949703872203827,-0.244612783193588,0.231081768870354,0.941682457923889,-0.228005513548851,0.109595887362957,0.967472076416016,-0.128308832645416,0.135050818324089,0.982495844364166,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.929407715797424,-0.180255636572838,0.322039186954498,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.98711097240448,-0.0946236401796341,0.129067301750183,-0.982540905475616,-0.173452958464623,0.0672866627573967,0.777039647102356,0.333707332611084,0.533712267875671,0.65978866815567,0.352559685707092,0.663611769676209,0.760879397392273,0.00385691528208554,0.648881912231445,0.501708924770355,0.238893568515778,0.831395208835602,0.690571069717407,0.287569731473923,0.66363787651062,0.509689807891846,0.284962385892868,0.811796009540558,0.324959099292755,0.210221484303474,0.922067523002625,0.114197269082069,0.229852244257927,0.96650242805481,\n0.328837275505066,-0.326990753412247,0.885970175266266,0.743318140506744,-0.232130751013756,0.627370238304138,0.810181796550751,0.205940678715706,0.548811316490173,-0.169450506567955,0.19207775592804,0.966639876365662,0.199919357895851,-0.342281520366669,0.918082594871521,0.328837275505066,-0.326990753412247,0.885970175266266,0.114197269082069,0.229852244257927,0.96650242805481,-0.234150588512421,0.240435913205147,0.942000031471252,-0.0315550751984119,0.227497562766075,0.973267257213593,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.284107565879822,0.352843284606934,0.891506910324097,-0.244612783193588,0.231081768870354,0.941682457923889,-0.17640919983387,0.25873214006424,0.949703872203827,-0.224652707576752,0.331979662179947,0.91614443063736,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.973927080631256,-0.0629245564341545,0.217960059642792,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.929407715797424,-0.180255636572838,0.322039186954498,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.98711097240448,-0.0946236401796341,0.129067301750183,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.973927080631256,-0.0629245564341545,0.217960059642792,0.405990958213806,0.468467801809311,0.784671425819397,0.317346751689911,0.64952027797699,0.690951824188232,0.509689807891846,0.284962385892868,0.811796009540558,0.690571069717407,0.287569731473923,0.66363787651062,0.114197269082069,0.229852244257927,0.96650242805481,0.810181796550751,0.205940678715706,0.548811316490173,0.382766664028168,0.693922400474548,0.609886407852173,-0.353388220071793,0.625863552093506,0.695278108119965,-0.169450506567955,0.19207775592804,0.966639876365662,0.114197269082069,0.229852244257927,0.96650242805481,-0.353388220071793,0.625863552093506,0.695278108119965,-0.596078813076019,0.546218574047089,0.588502645492554,-0.234150588512421,0.240435913205147,0.942000031471252,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.744610011577606,0.447527408599854,0.49525260925293,\n-0.514606833457947,0.383561730384827,0.766850829124451,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.234150588512421,0.240435913205147,0.942000031471252,-0.514606833457947,0.383561730384827,0.766850829124451,-0.78737735748291,0.23807966709137,0.568643093109131,-0.284107565879822,0.352843284606934,0.891506910324097,-0.224652707576752,0.331979662179947,0.91614443063736,-0.702946484088898,0.346591114997864,0.621080338954926,0.47508293390274,0.0346805192530155,0.879257321357727,0.4305479824543,-0.135443344712257,0.89234721660614,0.755727231502533,-0.0899055525660515,0.648685872554779,0.808870196342468,0.0797994136810303,0.582547068595886,0.501937747001648,0.161304622888565,0.849728941917419,0.47508293390274,0.0346805192530155,0.879257321357727,0.808870196342468,0.0797994136810303,0.582547068595886,0.854383409023285,0.179303303360939,0.487728714942932,-0.0315550751984119,0.227497562766075,0.973267257213593,-0.234150588512421,0.240435913205147,0.942000031471252,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.537278592586517,0.0936881303787231,0.83818507194519,0.192327603697777,0.12894095480442,0.972822844982147,-0.0315550751984119,0.227497562766075,0.973267257213593,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.414724171161652,0.00967030972242355,0.909895837306976,0.961814522743225,0.194339916110039,0.1927300542593,0.922054708003998,0.046831239014864,0.384216070175171,0.882719457149506,0.298290461301804,0.36308279633522,0.854383409023285,0.179303303360939,0.487728714942932,0.882719457149506,0.298290461301804,0.36308279633522,0.7165766954422,0.119066134095192,0.687270760536194,0.564793407917023,-0.0494600534439087,0.823748826980591,0.65978866815567,0.352559685707092,0.663611769676209,0.978495180606842,0.204968735575676,-0.0231311116367579,0.983711898326874,-0.176273837685585,0.0351918712258339,0.922054708003998,0.046831239014864,0.384216070175171,0.961814522743225,0.194339916110039,0.1927300542593,0.948979258537292,0.121414266526699,0.291027426719666,0.989881575107574,0.137960970401764,0.0331847853958607,\n0.978495180606842,0.204968735575676,-0.0231311116367579,0.961814522743225,0.194339916110039,0.1927300542593,0.778017222881317,0.0114749372005463,0.62813812494278,0.509491503238678,0.564498364925385,0.649430513381958,-0.110789246857166,0.611093282699585,0.78376704454422,0.129216074943542,-0.0478254444897175,0.990462481975555,0.129216074943542,-0.0478254444897175,0.990462481975555,-0.110789246857166,0.611093282699585,0.78376704454422,-0.611190378665924,0.347120583057404,0.711304187774658,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.279066264629364,0.00181216315831989,0.96027010679245,0.192327603697777,0.12894095480442,0.972822844982147,0.309460699558258,0.0171790830790997,0.950757026672363,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.858429491519928,-0.151253908872604,0.490123569965363,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.754620730876923,-0.101689904928207,0.648233532905579,0.433499962091446,-0.540944635868073,-0.720733463764191,0.198074012994766,-0.129640698432922,-0.971576035022736,0.385900169610977,-0.542145550251007,-0.746431052684784,0.757972776889801,-0.133172035217285,-0.63854718208313,0.883931815624237,-0.461925357580185,-0.0727289691567421,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.437477648258209,-0.839490532875061,0.322287112474442,0.828140437602997,-0.416388809680939,0.375238239765167,0.69633674621582,-0.401266545057297,0.595063328742981,0.828140437602997,-0.416388809680939,0.375238239765167,0.437477648258209,-0.839490532875061,0.322287112474442,0.295071959495544,-0.836212575435638,0.462256461381912,0.69633674621582,-0.401266545057297,0.595063328742981,0.295071959495544,-0.836212575435638,0.462256461381912,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.495204418897629,-0.163849160075188,0.853185832500458,0.127582147717476,-0.649050772190094,0.749970614910126,0.0833947658538818,-0.437338054180145,0.895422101020813,-0.453684002161026,-0.692797005176544,0.560538291931152,-0.0995030105113983,-0.912258505821228,0.39734560251236,\n0.00337490346282721,-0.386369347572327,0.92233794927597,0.689028441905975,-0.416694343090057,0.592963397502899,0.776257395744324,-0.559177398681641,0.291110157966614,0.631964325904846,-0.724000632762909,0.276485413312912,-0.011982899159193,-0.684736132621765,0.728692591190338,0.00337490346282721,-0.386369347572327,0.92233794927597,0.631964325904846,-0.724000632762909,0.276485413312912,0.4933140873909,-0.832423627376556,0.252412617206573,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.011982899159193,-0.684736132621765,0.728692591190338,0.4933140873909,-0.832423627376556,0.252412617206573,0.405342906713486,-0.871097266674042,0.277284443378448,-0.227918326854706,-0.765941560268402,0.601154506206512,0.405342906713486,-0.871097266674042,0.277284443378448,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.557889223098755,-0.23755519092083,-0.7951899766922,0.433499962091446,-0.540944635868073,-0.720733463764191,0.370678871870041,0.354065299034119,-0.858623862266541,0.116842739284039,-0.105540536344051,-0.987526714801788,0.198074012994766,-0.129640698432922,-0.971576035022736,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.557889223098755,-0.23755519092083,-0.7951899766922,-0.661859035491943,-0.0551192909479141,-0.747599124908447,0.116842739284039,-0.105540536344051,-0.987526714801788,0.370678871870041,0.354065299034119,-0.858623862266541,-0.00303205195814371,-0.243413895368576,-0.969917774200439,0.0670028999447823,-0.229776233434677,-0.970934331417084,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.725514113903046,-0.0050869844853878,-0.688188493251801,-0.747647523880005,-0.00706110056489706,-0.664058268070221,\n-0.733602643013,0.104122340679169,-0.671554684638977,-0.747647523880005,-0.00706110056489706,-0.664058268070221,-0.725514113903046,-0.0050869844853878,-0.688188493251801,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.733602643013,0.104122340679169,-0.671554684638977,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.733602643013,0.104122340679169,-0.671554684638977,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.784134566783905,-0.509350836277008,-0.354534596204758,0.11270098388195,0.815884530544281,-0.567125082015991,-0.277701437473297,0.780102908611298,-0.56064373254776,-0.171155840158463,0.985165357589722,0.0124461855739355,0.227652028203011,0.973727345466614,-0.0054389201104641,-0.423373013734818,0.789847135543823,0.443730562925339,-0.460725039243698,0.8605055809021,0.217399582266808,-0.245494201779366,0.895091235637665,0.372215330600739,-0.1829604357481,0.769297182559967,0.61213344335556,-0.594437062740326,0.745864152908325,0.300551623106003,-0.664495587348938,0.716933071613312,0.210837796330452,-0.590883314609528,0.718779802322388,0.366350263357162,-0.498491138219833,0.755745649337769,0.424682348966599,-0.664495587348938,0.716933071613312,0.210837796330452,-0.759507477283478,0.648222267627716,-0.0543712638318539,-0.744540989398956,0.615887403488159,0.257568180561066,-0.590883314609528,0.718779802322388,0.366350263357162,-0.727959036827087,0.661616802215576,-0.179830119013786,-0.748579859733582,0.631325542926788,0.202623516321182,-0.737479329109192,0.641141176223755,0.212278604507446,-0.727798759937286,0.645060181617737,-0.232822522521019,-0.727959036827087,0.661616802215576,-0.179830119013786,-0.793396532535553,0.592922508716583,-0.137712955474854,-0.856980979442596,0.504014492034912,0.107484914362431,-0.748579859733582,0.631325542926788,0.202623516321182,-0.833821058273315,0.528545200824738,-0.159318462014198,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.856980979442596,0.504014492034912,0.107484914362431,\n-0.793396532535553,0.592922508716583,-0.137712955474854,-0.948116004467011,0.0624199733138084,0.311736673116684,-0.886275291442871,0.375701189041138,0.270859181880951,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.989869713783264,-0.139774799346924,-0.0249191801995039,0.495204418897629,-0.163849160075188,0.853185832500458,-0.0664141848683357,-0.803863763809204,0.591094017028809,-0.453684002161026,-0.692797005176544,0.560538291931152,0.0833947658538818,-0.437338054180145,0.895422101020813,0.689028441905975,-0.416694343090057,0.592963397502899,0.419214755296707,-0.523533642292023,0.741735517978668,0.552227675914764,-0.748098790645599,0.367957681417465,0.877826869487762,-0.373567342758179,0.299778997898102,0.845922589302063,-0.233836695551872,-0.479307234287262,0.385900169610977,-0.542145550251007,-0.746431052684784,0.198074012994766,-0.129640698432922,-0.971576035022736,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.437477648258209,-0.839490532875061,0.322287112474442,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.905556082725525,-0.270015031099319,0.327200382947922,0.295071959495544,-0.836212575435638,0.462256461381912,0.437477648258209,-0.839490532875061,0.322287112474442,0.905556082725525,-0.270015031099319,0.327200382947922,0.780203700065613,-0.321272552013397,0.53671795129776,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.295071959495544,-0.836212575435638,0.462256461381912,0.780203700065613,-0.321272552013397,0.53671795129776,0.485521018505096,-0.413983583450317,0.769991517066956,0.081648163497448,-0.362786680459976,0.928288400173187,-0.0995030105113983,-0.912258505821228,0.39734560251236,-0.453684002161026,-0.692797005176544,0.560538291931152,0.188842624425888,-0.479352325201035,0.857064664363861,0.322147607803345,-0.331866294145584,0.886614739894867,0.187207460403442,-0.466673761606216,0.864389359951019,0.776257395744324,-0.559177398681641,0.291110157966614,0.877826869487762,-0.373567342758179,0.299778997898102,\n-0.215633437037468,-0.617008090019226,0.756837606430054,0.4933140873909,-0.832423627376556,0.252412617206573,0.631964325904846,-0.724000632762909,0.276485413312912,0.0384484939277172,-0.525311291217804,0.850041031837463,-0.505574762821198,-0.704972326755524,0.49740144610405,0.405342906713486,-0.871097266674042,0.277284443378448,0.4933140873909,-0.832423627376556,0.252412617206573,-0.215633437037468,-0.617008090019226,0.756837606430054,-0.648859262466431,-0.732072472572327,0.20748870074749,0.182749971747398,-0.981905281543732,-0.0496433302760124,0.405342906713486,-0.871097266674042,0.277284443378448,-0.505574762821198,-0.704972326755524,0.49740144610405,-0.557889223098755,-0.23755519092083,-0.7951899766922,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.724748373031616,-0.680762529373169,-0.106311395764351,-0.913924396038055,-0.399497091770172,-0.0717232823371887,0.198074012994766,-0.129640698432922,-0.971576035022736,0.116842739284039,-0.105540536344051,-0.987526714801788,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.0752642378211021,-0.163290247321129,0.983702957630157,0.584701359272003,-0.0801372230052948,0.807280838489532,-0.0995030105113983,-0.912258505821228,0.39734560251236,0.081648163497448,-0.362786680459976,0.928288400173187,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.557889223098755,-0.23755519092083,-0.7951899766922,-0.913924396038055,-0.399497091770172,-0.0717232823371887,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.116842739284039,-0.105540536344051,-0.987526714801788,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.79849648475647,0.00311785028316081,-0.601991355419159,0.584701359272003,-0.0801372230052948,0.807280838489532,0.0752642378211021,-0.163290247321129,0.983702957630157,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.528049111366272,-0.00915573351085186,0.849164485931396,-0.725514113903046,-0.0050869844853878,-0.688188493251801,\n-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.987223207950592,-0.158936277031899,-0.0113820992410183,0.79849648475647,0.00311785028316081,-0.601991355419159,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.770998120307922,0.0437404066324234,-0.63533353805542,0.784979939460754,0.0750055387616158,-0.614963889122009,0.772511541843414,0.0615992993116379,-0.632005870342255,0.214329496026039,-0.204933792352676,-0.95502096414566,0.320743799209595,-0.127513855695724,-0.938543379306793,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.982540905475616,-0.173452958464623,0.0672866627573967,-0.98711097240448,-0.0946236401796341,0.129067301750183,0.798663914203644,0.0795769542455673,-0.596492648124695,0.265012234449387,-0.116133384406567,-0.957225978374481,0.119323797523975,0.10215725004673,-0.987585842609406,0.775733590126038,0.173521965742111,-0.606735110282898,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.98711097240448,-0.0946236401796341,0.129067301750183,-0.991252839565277,0.0431834943592548,0.124711617827415,0.73961067199707,0.263024806976318,-0.619511127471924,0.0699164718389511,0.326290965080261,-0.942680180072784,0.11270098388195,0.815884530544281,-0.567125082015991,0.792211890220642,0.491865277290344,-0.361204653978348,0.405990958213806,0.468467801809311,0.784671425819397,-0.1829604357481,0.769297182559967,0.61213344335556,-0.245494201779366,0.895091235637665,0.372215330600739,0.317346751689911,0.64952027797699,0.690951824188232,-0.0522431507706642,0.792317688465118,0.607867777347565,-0.498491138219833,0.755745649337769,0.424682348966599,-0.590883314609528,0.718779802322388,0.366350263357162,-0.594345927238464,0.730467915534973,0.336406856775284,-0.594345927238464,0.730467915534973,0.336406856775284,-0.590883314609528,0.718779802322388,0.366350263357162,\n-0.744540989398956,0.615887403488159,0.257568180561066,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744610011577606,0.447527408599854,0.49525260925293,-0.737479329109192,0.641141176223755,0.212278604507446,-0.748579859733582,0.631325542926788,0.202623516321182,-0.514606833457947,0.383561730384827,0.766850829124451,-0.514606833457947,0.383561730384827,0.766850829124451,-0.748579859733582,0.631325542926788,0.202623516321182,-0.856980979442596,0.504014492034912,0.107484914362431,-0.78737735748291,0.23807966709137,0.568643093109131,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.702946484088898,0.346591114997864,0.621080338954926,-0.78737735748291,0.23807966709137,0.568643093109131,-0.856980979442596,0.504014492034912,0.107484914362431,-0.948116004467011,0.0624199733138084,0.311736673116684,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.989299476146698,0.112728737294674,0.0926214382052422,-0.953436672687531,0.152786508202553,0.260028511285782,-0.453684002161026,-0.692797005176544,0.560538291931152,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.485521018505096,-0.413983583450317,0.769991517066956,0.188842624425888,-0.479352325201035,0.857064664363861,0.552227675914764,-0.748098790645599,0.367957681417465,-0.204973682761192,-0.221624344587326,0.953345894813538,0.326031237840652,-0.100235551595688,0.940030038356781,0.37811690568924,-0.192061543464661,0.90561580657959,0.877826869487762,-0.373567342758179,0.299778997898102,0.552227675914764,-0.748098790645599,0.367957681417465,0.37811690568924,-0.192061543464661,0.90561580657959,0.322147607803345,-0.331866294145584,0.886614739894867,-0.00303205195814371,-0.243413895368576,-0.969917774200439,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.439302206039429,0.130682423710823,0.888783276081085,0.501708924770355,0.238893568515778,0.831395208835602,0.324959099292755,0.210221484303474,0.922067523002625,0.120599403977394,0.0903128907084465,0.988584518432617,\n0.713191568851471,-0.57269150018692,0.404205650091171,0.801663935184479,-0.0182420387864113,0.597496569156647,0.159226432442665,-0.153974950313568,0.975160837173462,0.236816734075546,-0.796482741832733,0.556356966495514,0.127582147717476,-0.649050772190094,0.749970614910126,-0.0995030105113983,-0.912258505821228,0.39734560251236,0.164029166102409,-0.97451639175415,-0.153010532259941,0.261260062456131,-0.761487662792206,0.593194544315338,0.755727231502533,-0.0899055525660515,0.648685872554779,0.4305479824543,-0.135443344712257,0.89234721660614,0.356381446123123,-0.306900352239609,0.882498979568481,0.658008575439453,-0.304749071598053,0.688587427139282,-0.141511112451553,-0.212750777602196,0.966804921627045,0.322147607803345,-0.331866294145584,0.886614739894867,0.37811690568924,-0.192061543464661,0.90561580657959,0.776257395744324,-0.559177398681641,0.291110157966614,0.689028441905975,-0.416694343090057,0.592963397502899,0.877826869487762,-0.373567342758179,0.299778997898102,0.399412155151367,0.0118926726281643,0.916694343090057,0.439302206039429,0.130682423710823,0.888783276081085,0.120599403977394,0.0903128907084465,0.988584518432617,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.120599403977394,0.0903128907084465,0.988584518432617,0.460760354995728,0.108215063810349,0.880902588367462,0.528049111366272,-0.00915573351085186,0.849164485931396,0.120599403977394,0.0903128907084465,0.988584518432617,0.324959099292755,0.210221484303474,0.922067523002625,0.565941989421844,0.17062908411026,0.806594908237457,0.460760354995728,0.108215063810349,0.880902588367462,0.778803884983063,0.240923345088959,0.579154968261719,0.565941989421844,0.17062908411026,0.806594908237457,0.324959099292755,0.210221484303474,0.922067523002625,0.509689807891846,0.284962385892868,0.811796009540558,0.778803884983063,0.240923345088959,0.579154968261719,0.509689807891846,0.284962385892868,0.811796009540558,0.317346751689911,0.64952027797699,0.690951824188232,-0.0522431507706642,0.792317688465118,0.607867777347565,\n0.317346751689911,0.64952027797699,0.690951824188232,-0.245494201779366,0.895091235637665,0.372215330600739,-0.498491138219833,0.755745649337769,0.424682348966599,-0.0522431507706642,0.792317688465118,0.607867777347565,-0.460725039243698,0.8605055809021,0.217399582266808,-0.594437062740326,0.745864152908325,0.300551623106003,-0.498491138219833,0.755745649337769,0.424682348966599,-0.245494201779366,0.895091235637665,0.372215330600739,-0.243933483958244,-0.119538404047489,0.962396502494812,0.309460699558258,0.0171790830790997,0.950757026672363,0.326031237840652,-0.100235551595688,0.940030038356781,-0.204973682761192,-0.221624344587326,0.953345894813538,0.159226432442665,-0.153974950313568,0.975160837173462,0.129216074943542,-0.0478254444897175,0.990462481975555,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.501740396022797,-0.243245616555214,0.830113351345062,0.801663935184479,-0.0182420387864113,0.597496569156647,0.778017222881317,0.0114749372005463,0.62813812494278,0.129216074943542,-0.0478254444897175,0.990462481975555,0.159226432442665,-0.153974950313568,0.975160837173462,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.385900169610977,-0.542145550251007,-0.746431052684784,0.845922589302063,-0.233836695551872,-0.479307234287262,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.757972776889801,-0.133172035217285,-0.63854718208313,0.385900169610977,-0.542145550251007,-0.746431052684784,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.883931815624237,-0.461925357580185,-0.0727289691567421,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.724748373031616,-0.680762529373169,-0.106311395764351,-0.250410139560699,-0.715217709541321,-0.65250164270401,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.829591572284698,0.0585402958095074,0.555293500423431,\n-0.806389153003693,-0.12540277838707,0.577936589717865,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.417345523834229,-0.483428627252579,0.769492983818054,0.199919357895851,-0.342281520366669,0.918082594871521,-0.169450506567955,0.19207775592804,0.966639876365662,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.169450506567955,0.19207775592804,0.966639876365662,-0.596078813076019,0.546218574047089,0.588502645492554,-0.924569010734558,0.246832668781281,0.290251165628433,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744540989398956,0.615887403488159,0.257568180561066,-0.737479329109192,0.641141176223755,0.212278604507446,-0.744610011577606,0.447527408599854,0.49525260925293,-0.727798759937286,0.645060181617737,-0.232822522521019,-0.737479329109192,0.641141176223755,0.212278604507446,-0.744540989398956,0.615887403488159,0.257568180561066,-0.759507477283478,0.648222267627716,-0.0543712638318539,-0.987223207950592,-0.158936277031899,-0.0113820992410183,-0.982540905475616,-0.173452958464623,0.0672866627573967,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.725514113903046,-0.0050869844853878,-0.688188493251801,0.460760354995728,0.108215063810349,0.880902588367462,0.565941989421844,0.17062908411026,0.806594908237457,0.47046023607254,0.569419384002686,0.674113273620605,0.709650099277496,-0.321021109819412,0.627169966697693,0.47046023607254,0.569419384002686,0.674113273620605,0.565941989421844,0.17062908411026,0.806594908237457,0.238703370094299,-0.21425598859787,0.947161555290222,-0.180715546011925,0.601944923400879,0.77782016992569,-0.692504823207855,0.347807645797729,0.632033944129944,-0.180715546011925,0.601944923400879,0.77782016992569,0.238703370094299,-0.21425598859787,0.947161555290222,-0.420417785644531,0.0594633929431438,0.905380010604858,0.565941989421844,0.17062908411026,0.806594908237457,0.778803884983063,0.240923345088959,0.579154968261719,0.810181796550751,0.205940678715706,0.548811316490173,\n0.743318140506744,-0.232130751013756,0.627370238304138,0.328837275505066,-0.326990753412247,0.885970175266266,0.238703370094299,-0.21425598859787,0.947161555290222,0.565941989421844,0.17062908411026,0.806594908237457,0.743318140506744,-0.232130751013756,0.627370238304138,0.810181796550751,0.205940678715706,0.548811316490173,0.778803884983063,0.240923345088959,0.579154968261719,-0.0522431507706642,0.792317688465118,0.607867777347565,0.382766664028168,0.693922400474548,0.609886407852173,-0.0522431507706642,0.792317688465118,0.607867777347565,-0.594345927238464,0.730467915534973,0.336406856775284,-0.353388220071793,0.625863552093506,0.695278108119965,0.382766664028168,0.693922400474548,0.609886407852173,-0.594345927238464,0.730467915534973,0.336406856775284,-0.724499702453613,0.627744674682617,0.284669786691666,-0.596078813076019,0.546218574047089,0.588502645492554,-0.353388220071793,0.625863552093506,0.695278108119965,0.509491503238678,0.564498364925385,0.649430513381958,0.460760354995728,0.108215063810349,0.880902588367462,0.0749799236655235,0.161466613411903,0.984025657176971,-0.110789246857166,0.611093282699585,0.78376704454422,-0.110789246857166,0.611093282699585,0.78376704454422,0.0749799236655235,0.161466613411903,0.984025657176971,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.611190378665924,0.347120583057404,0.711304187774658,0.778017222881317,0.0114749372005463,0.62813812494278,0.528049111366272,-0.00915573351085186,0.849164485931396,0.460760354995728,0.108215063810349,0.880902588367462,0.509491503238678,0.564498364925385,0.649430513381958,0.801663935184479,-0.0182420387864113,0.597496569156647,0.584701359272003,-0.0801372230052948,0.807280838489532,0.528049111366272,-0.00915573351085186,0.849164485931396,0.778017222881317,0.0114749372005463,0.62813812494278,-0.0995030105113983,-0.912258505821228,0.39734560251236,0.584701359272003,-0.0801372230052948,0.807280838489532,0.801663935184479,-0.0182420387864113,0.597496569156647,0.713191568851471,-0.57269150018692,0.404205650091171,-0.0995030105113983,-0.912258505821228,0.39734560251236,\n0.713191568851471,-0.57269150018692,0.404205650091171,0.236816734075546,-0.796482741832733,0.556356966495514,0.164029166102409,-0.97451639175415,-0.153010532259941,-0.204973682761192,-0.221624344587326,0.953345894813538,0.552227675914764,-0.748098790645599,0.367957681417465,-0.274976640939713,-0.741328597068787,0.612225234508514,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.204973682761192,-0.221624344587326,0.953345894813538,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.611190378665924,0.347120583057404,0.711304187774658,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.337113708257675,-0.517143785953522,0.78671258687973,-0.692504823207855,0.347807645797729,0.632033944129944,0.251838862895966,-0.440983474254608,0.861458539962769,-0.337113708257675,-0.517143785953522,0.78671258687973,-0.279066264629364,0.00181216315831989,0.96027010679245,0.0749799236655235,0.161466613411903,0.984025657176971,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.417345523834229,-0.483428627252579,0.769492983818054,-0.840604901313782,-0.077635757625103,0.536056041717529,0.199919357895851,-0.342281520366669,0.918082594871521,-0.417345523834229,-0.483428627252579,0.769492983818054,-0.420417785644531,0.0594633929431438,0.905380010604858,0.238703370094299,-0.21425598859787,0.947161555290222,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.924569010734558,0.246832668781281,0.290251165628433,-0.744610011577606,0.447527408599854,0.49525260925293,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744610011577606,0.447527408599854,0.49525260925293,-0.924569010734558,0.246832668781281,0.290251165628433,\n-0.596078813076019,0.546218574047089,0.588502645492554,0.236816734075546,-0.796482741832733,0.556356966495514,0.159226432442665,-0.153974950313568,0.975160837173462,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.274976640939713,-0.741328597068787,0.612225234508514,0.164029166102409,-0.97451639175415,-0.153010532259941,0.236816734075546,-0.796482741832733,0.556356966495514,-0.274976640939713,-0.741328597068787,0.612225234508514,0.552227675914764,-0.748098790645599,0.367957681417465,0.261260062456131,-0.761487662792206,0.593194544315338,0.164029166102409,-0.97451639175415,-0.153010532259941,0.552227675914764,-0.748098790645599,0.367957681417465,0.419214755296707,-0.523533642292023,0.741735517978668,0.265012234449387,-0.116133384406567,-0.957225978374481,-0.313530147075653,0.0253957733511925,-0.94923859834671,0.119323797523975,0.10215725004673,-0.987585842609406,0.917835712432861,0.197176292538643,-0.344527393579483,0.90627920627594,0.138545647263527,-0.399328351020813,0.798663914203644,0.0795769542455673,-0.596492648124695,0.775733590126038,0.173521965742111,-0.606735110282898,0.690571069717407,0.287569731473923,0.66363787651062,0.777039647102356,0.333707332611084,0.533712267875671,0.457932114601135,0.272002577781677,0.846352636814117,0.405990958213806,0.468467801809311,0.784671425819397,0.690571069717407,0.287569731473923,0.66363787651062,0.501708924770355,0.238893568515778,0.831395208835602,0.548670411109924,0.271492123603821,0.790729284286499,0.777039647102356,0.333707332611084,0.533712267875671,0.501708924770355,0.238893568515778,0.831395208835602,0.439302206039429,0.130682423710823,0.888783276081085,0.501937747001648,0.161304622888565,0.849728941917419,0.548670411109924,0.271492123603821,0.790729284286499,0.399412155151367,0.0118926726281643,0.916694343090057,0.47508293390274,0.0346805192530155,0.879257321357727,0.501937747001648,0.161304622888565,0.849728941917419,0.439302206039429,0.130682423710823,0.888783276081085,0.399412155151367,0.0118926726281643,0.916694343090057,0.365955173969269,-0.121213011443615,0.922704815864563,\n0.4305479824543,-0.135443344712257,0.89234721660614,0.47508293390274,0.0346805192530155,0.879257321357727,0.477214813232422,-0.241928040981293,0.844829499721527,0.356381446123123,-0.306900352239609,0.882498979568481,0.353479385375977,-0.210105717182159,0.911541521549225,0.658008575439453,-0.304749071598053,0.688587427139282,0.356381446123123,-0.306900352239609,0.882498979568481,0.477214813232422,-0.241928040981293,0.844829499721527,0.660950601100922,-0.242743700742722,0.71008437871933,0.821053445339203,-0.304968655109406,0.482561200857162,0.658008575439453,-0.304749071598053,0.688587427139282,0.660950601100922,-0.242743700742722,0.71008437871933,0.836283266544342,-0.213887274265289,0.504858911037445,0.939164042472839,-0.287473499774933,0.187962368130684,0.821053445339203,-0.304968655109406,0.482561200857162,0.836283266544342,-0.213887274265289,0.504858911037445,0.952340543270111,-0.189113721251488,0.239339768886566,0.960243940353394,-0.113252773880959,-0.255157649517059,0.946958303451538,-0.273756355047226,-0.168307527899742,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.946958303451538,-0.273756355047226,-0.168307527899742,0.960243940353394,-0.113252773880959,-0.255157649517059,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.906778931617737,0.0885622203350067,-0.412199825048447,0.937741100788116,0.0962117910385132,-0.333743721246719,0.937741100788116,0.0962117910385132,-0.333743721246719,0.906778931617737,0.0885622203350067,-0.412199825048447,0.899548053741455,0.145640388131142,-0.411827832460403,0.927813827991486,0.152230933308601,-0.340569078922272,0.926154136657715,0.165854901075363,-0.3387191593647,0.902734816074371,0.140678882598877,-0.406545639038086,0.904744982719421,0.140758752822876,-0.402024179697037,0.93531322479248,0.178703308105469,-0.305375546216965,0.90627920627594,0.138545647263527,-0.399328351020813,0.917835712432861,0.197176292538643,-0.344527393579483,\n0.920450210571289,0.249687507748604,-0.300711780786514,0.946711003780365,0.167055711150169,-0.275373607873917,0.73961067199707,0.263024806976318,-0.619511127471924,0.917835712432861,0.197176292538643,-0.344527393579483,0.775733590126038,0.173521965742111,-0.606735110282898,0.227652028203011,0.973727345466614,-0.0054389201104641,0.781636536121368,0.602840006351471,-0.160088449716568,0.792211890220642,0.491865277290344,-0.361204653978348,0.11270098388195,0.815884530544281,-0.567125082015991,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.946958303451538,-0.273756355047226,-0.168307527899742,0.939164042472839,-0.287473499774933,0.187962368130684,0.952340543270111,-0.189113721251488,0.239339768886566,0.353479385375977,-0.210105717182159,0.911541521549225,0.356381446123123,-0.306900352239609,0.882498979568481,0.4305479824543,-0.135443344712257,0.89234721660614,0.365955173969269,-0.121213011443615,0.922704815864563,0.660950601100922,-0.242743700742722,0.71008437871933,0.477214813232422,-0.241928040981293,0.844829499721527,0.188842624425888,-0.479352325201035,0.857064664363861,0.485521018505096,-0.413983583450317,0.769991517066956,-0.228005513548851,0.109595887362957,0.967472076416016,-0.152441054582596,-0.013247330673039,0.988223791122437,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.128308832645416,0.135050818324089,0.982495844364166,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.0331847779452801,-0.163069307804108,0.986056327819824,0.125946626067162,-0.109786443412304,0.985943377017975,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.0331847779452801,-0.163069307804108,0.986056327819824,0.0231705605983734,-0.380178421735764,0.924622893333435,0.109986312687397,-0.239039734005928,0.964760601520538,0.125946626067162,-0.109786443412304,0.985943377017975,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.987223207950592,-0.158936277031899,-0.0113820992410183,\n-0.953436672687531,0.152786508202553,0.260028511285782,-0.890410006046295,0.22136127948761,0.397704929113388,-0.888629198074341,0.438762098550797,0.133514106273651,-0.948116004467011,0.0624199733138084,0.311736673116684,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.890410006046295,0.22136127948761,0.397704929113388,-0.953436672687531,0.152786508202553,0.260028511285782,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.754620730876923,-0.101689904928207,0.648233532905579,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.890410006046295,0.22136127948761,0.397704929113388,-0.702946484088898,0.346591114997864,0.621080338954926,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.888629198074341,0.438762098550797,0.133514106273651,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.284107565879822,0.352843284606934,0.891506910324097,-0.702946484088898,0.346591114997864,0.621080338954926,-0.890410006046295,0.22136127948761,0.397704929113388,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.244612783193588,0.231081768870354,0.941682457923889,-0.284107565879822,0.352843284606934,0.891506910324097,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.228005513548851,0.109595887362957,0.967472076416016,-0.244612783193588,0.231081768870354,0.941682457923889,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.754620730876923,-0.101689904928207,0.648233532905579,-0.754620730876923,-0.101689904928207,0.648233532905579,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.228005513548851,0.109595887362957,0.967472076416016,-0.215633437037468,-0.617008090019226,0.756837606430054,-0.52398544549942,-0.396743208169937,0.753680348396301,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.505574762821198,-0.704972326755524,0.49740144610405,-0.158661097288132,-0.379611909389496,0.911439180374146,\n-0.52398544549942,-0.396743208169937,0.753680348396301,-0.215633437037468,-0.617008090019226,0.756837606430054,0.0384484939277172,-0.525311291217804,0.850041031837463,-0.0760671570897102,-0.295749187469482,0.952232241630554,0.187207460403442,-0.466673761606216,0.864389359951019,0.322147607803345,-0.331866294145584,0.886614739894867,-0.141511112451553,-0.212750777602196,0.966804921627045,0.109986312687397,-0.239039734005928,0.964760601520538,-0.0760671570897102,-0.295749187469482,0.952232241630554,-0.141511112451553,-0.212750777602196,0.966804921627045,0.125946626067162,-0.109786443412304,0.985943377017975,0.109986312687397,-0.239039734005928,0.964760601520538,-0.141511112451553,-0.212750777602196,0.966804921627045,-0.184660717844963,-0.167485594749451,0.968426048755646,0.00481598870828748,-0.00974012352526188,0.999940931797028,0.125946626067162,-0.109786443412304,0.985943377017975,-0.184660717844963,-0.167485594749451,0.968426048755646,-0.274106293916702,-0.107289478182793,0.955695927143097,-0.128308832645416,0.135050818324089,0.982495844364166,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.274106293916702,-0.107289478182793,0.955695927143097,-0.414724171161652,0.00967030972242355,0.909895837306976,-0.17640919983387,0.25873214006424,0.949703872203827,-0.128308832645416,0.135050818324089,0.982495844364166,-0.414724171161652,0.00967030972242355,0.909895837306976,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.224652707576752,0.331979662179947,0.91614443063736,-0.17640919983387,0.25873214006424,0.949703872203827,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.78737735748291,0.23807966709137,0.568643093109131,-0.702946484088898,0.346591114997864,0.621080338954926,-0.224652707576752,0.331979662179947,0.91614443063736,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.925617933273315,-0.333309531211853,0.179265692830086,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.858429491519928,-0.151253908872604,0.490123569965363,\n-0.96939754486084,-0.16740058362484,0.179570108652115,-0.96939754486084,-0.16740058362484,0.179570108652115,-0.858429491519928,-0.151253908872604,0.490123569965363,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.929407715797424,-0.180255636572838,0.322039186954498,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.929407715797424,-0.180255636572838,0.322039186954498,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.973927080631256,-0.0629245564341545,0.217960059642792,-0.953436672687531,0.152786508202553,0.260028511285782,-0.989299476146698,0.112728737294674,0.0926214382052422,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.925617933273315,-0.333309531211853,0.179265692830086,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.881475806236267,-0.330746591091156,0.337056517601013,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.881475806236267,-0.330746591091156,0.337056517601013,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.505574762821198,-0.704972326755524,0.49740144610405,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.871467232704163,-0.412255734205246,0.265687882900238,0.781636536121368,0.602840006351471,-0.160088449716568,0.920450210571289,0.249687507748604,-0.300711780786514,0.917835712432861,0.197176292538643,-0.344527393579483,0.904744982719421,0.140758752822876,-0.402024179697037,0.902734816074371,0.140678882598877,-0.406545639038086,0.772511541843414,0.0615992993116379,-0.632005870342255,0.784979939460754,0.0750055387616158,-0.614963889122009,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.960243940353394,-0.113252773880959,-0.255157649517059,\n0.980879783630371,-0.19241227209568,-0.0291947238147259,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.845922589302063,-0.233836695551872,-0.479307234287262,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.925617933273315,-0.333309531211853,0.179265692830086,-0.96939754486084,-0.16740058362484,0.179570108652115,-0.913924396038055,-0.399497091770172,-0.0717232823371887,-0.881475806236267,-0.330746591091156,0.337056517601013,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.881475806236267,-0.330746591091156,0.337056517601013,-0.913924396038055,-0.399497091770172,-0.0717232823371887,-0.724748373031616,-0.680762529373169,-0.106311395764351,-0.0760671570897102,-0.295749187469482,0.952232241630554,-0.158661097288132,-0.379611909389496,0.911439180374146,0.0384484939277172,-0.525311291217804,0.850041031837463,0.187207460403442,-0.466673761606216,0.864389359951019,0.0384484939277172,-0.525311291217804,0.850041031837463,0.631964325904846,-0.724000632762909,0.276485413312912,0.776257395744324,-0.559177398681641,0.291110157966614,0.187207460403442,-0.466673761606216,0.864389359951019,0.920450210571289,0.249687507748604,-0.300711780786514,0.754057705402374,0.374476611614227,-0.539596378803253,0.769950747489929,0.0194198340177536,-0.637807726860046,0.946711003780365,0.167055711150169,-0.275373607873917,0.754057705402374,0.374476611614227,-0.539596378803253,0.806110441684723,0.0128834620118141,-0.591624915599823,0.626454889774323,0.131802603602409,-0.768233299255371,0.227652028203011,0.973727345466614,-0.0054389201104641,0.485665678977966,0.51228803396225,-0.708300650119781,0.781636536121368,0.602840006351471,-0.160088449716568,0.978495180606842,0.204968735575676,-0.0231311116367579,0.978555917739868,-0.185044288635254,-0.090481773018837,0.983711898326874,-0.176273837685585,0.0351918712258339,0.777039647102356,0.333707332611084,0.533712267875671,\n0.548670411109924,0.271492123603821,0.790729284286499,0.882719457149506,0.298290461301804,0.36308279633522,0.65978866815567,0.352559685707092,0.663611769676209,0.922054708003998,0.046831239014864,0.384216070175171,0.7165766954422,0.119066134095192,0.687270760536194,0.882719457149506,0.298290461301804,0.36308279633522,0.485665678977966,0.51228803396225,-0.708300650119781,0.806110441684723,0.0128834620118141,-0.591624915599823,0.754057705402374,0.374476611614227,-0.539596378803253,0.920450210571289,0.249687507748604,-0.300711780786514,0.781636536121368,0.602840006351471,-0.160088449716568,-0.085037998855114,0.891525149345398,0.444917380809784,-0.0469878204166889,0.559723138809204,0.827346444129944,0.0470689907670021,0.582839369773865,0.811222970485687,0.101348482072353,0.892875194549561,0.438750922679901,0.0935290157794952,0.208944618701935,-0.973444640636444,0.0038525490090251,0.171840533614159,-0.985117256641388,-0.103621512651443,0.603616952896118,-0.790511965751648,-0.0126510011032224,0.631483376026154,-0.775286257266998,0.933896422386169,0.335515409708023,0.123558923602104,0.693666994571686,0.300759524106979,0.654499650001526,0.698169589042664,-0.369514137506485,0.613203525543213,0.942301154136658,-0.286070376634598,0.173874363303185,0.378664463758469,0.883253812789917,-0.276542812585831,0.368075758218765,0.856088101863861,0.362813085317612,0.639892160892487,0.694699466228485,0.328528076410294,0.675914883613586,0.694170355796814,-0.247520759701729,0.309483885765076,-0.163968995213509,-0.936661064624786,0.0866431072354317,0.348724126815796,-0.933211922645569,0.29194575548172,0.445136368274689,-0.846534848213196,0.452584743499756,-0.12309543043375,-0.883184313774109,0.472137004137039,0.668477177619934,-0.574651956558228,0.306242048740387,0.731363773345947,-0.609362602233887,0.378664463758469,0.883253812789917,-0.276542812585831,0.675914883613586,0.694170355796814,-0.247520759701729,0.768324851989746,0.0888023898005486,-0.63386994600296,0.638194561004639,0.569729268550873,-0.517799377441406,0.29194575548172,0.445136368274689,-0.846534848213196,\n0.40653070807457,0.0205510575324297,-0.913405954837799,0.723759770393372,0.0808410197496414,0.685300350189209,0.622246146202087,0.559013962745667,0.548008322715759,0.826591491699219,0.555592954158783,0.0897942036390305,0.976288020610809,0.129569977521896,0.173416510224342,0.411225825548172,-0.383013069629669,0.8271604180336,0.330161929130554,-0.399422317743301,0.855251371860504,0.245776325464249,-0.0611284077167511,0.967397153377533,0.390471458435059,0.0208971817046404,0.920377850532532,0.15211121737957,-0.123818121850491,0.980576992034912,0.245776325464249,-0.0611284077167511,0.967397153377533,0.330161929130554,-0.399422317743301,0.855251371860504,0.760879397392273,0.00385691528208554,0.648881912231445,0.206741601228714,0.69427889585495,-0.689372718334198,0.0479706004261971,0.64763480424881,-0.760439336299896,0.0983121022582054,0.926145672798157,-0.364127546548843,0.324993640184402,0.89479660987854,-0.306134164333344,0.0983121022582054,0.926145672798157,-0.364127546548843,0.101348482072353,0.892875194549561,0.438750922679901,0.320414483547211,0.864260375499725,0.387799590826035,0.324993640184402,0.89479660987854,-0.306134164333344,0.282659292221069,0.205503165721893,-0.936948299407959,0.413956999778748,-0.385759115219116,-0.824517726898193,0.319176852703094,-0.387702465057373,-0.864761769771576,0.114235505461693,0.174652293324471,-0.977980971336365,0.283178418874741,0.436211496591568,0.854124963283539,0.439386487007141,-0.126929730176926,0.889285326004028,0.800352692604065,-0.0664194524288177,0.595838904380798,0.622246146202087,0.559013962745667,0.548008322715759,0.826591491699219,0.555592954158783,0.0897942036390305,0.993047595024109,0.00499473372474313,0.117607519030571,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.827589094638824,0.557050704956055,-0.069215714931488,0.897543668746948,-0.428973793983459,-0.101964816451073,0.747824549674988,-0.399453073740005,-0.530278921127319,0.821371793746948,-0.202065214514732,-0.533402323722839,0.983732461929321,-0.14598248898983,-0.104687921702862,0.821371793746948,-0.202065214514732,-0.533402323722839,\n0.747824549674988,-0.399453073740005,-0.530278921127319,0.426769316196442,-0.235881611704826,-0.873056590557098,0.517105877399445,-0.187926828861237,-0.835035920143127,0.457932114601135,0.272002577781677,0.846352636814117,0.760879397392273,0.00385691528208554,0.648881912231445,0.330161929130554,-0.399422317743301,0.855251371860504,0.088567815721035,0.174428701400757,0.980678558349609,-0.085037998855114,0.891525149345398,0.444917380809784,0.101348482072353,0.892875194549561,0.438750922679901,0.0983121022582054,0.926145672798157,-0.364127546548843,-0.0940461307764053,0.921943545341492,-0.37573316693306,0.114235505461693,0.174652293324471,-0.977980971336365,0.319176852703094,-0.387702465057373,-0.864761769771576,0.806110441684723,0.0128834620118141,-0.591624915599823,0.485665678977966,0.51228803396225,-0.708300650119781,0.897991716861725,-0.426986217498779,0.106271713972092,0.983711898326874,-0.176273837685585,0.0351918712258339,0.978555917739868,-0.185044288635254,-0.090481773018837,0.897543668746948,-0.428973793983459,-0.101964816451073,0.897991716861725,-0.426986217498779,0.106271713972092,0.729263663291931,-0.375070512294769,0.572273194789886,0.922054708003998,0.046831239014864,0.384216070175171,0.983711898326874,-0.176273837685585,0.0351918712258339,0.937979876995087,0.334741920232773,-0.0902306362986565,0.933896422386169,0.335515409708023,0.123558923602104,0.942301154136658,-0.286070376634598,0.173874363303185,0.95092248916626,-0.279943495988846,-0.131825938820839,0.769950747489929,0.0194198340177536,-0.637807726860046,0.754057705402374,0.374476611614227,-0.539596378803253,0.0866431072354317,0.348724126815796,-0.933211922645569,0.309483885765076,-0.163968995213509,-0.936661064624786,0.7165766954422,0.119066134095192,0.687270760536194,0.922054708003998,0.046831239014864,0.384216070175171,0.729263663291931,-0.375070512294769,0.572273194789886,0.397319257259369,-0.209660559892654,0.893409132957459,0.65978866815567,0.352559685707092,0.663611769676209,0.564793407917023,-0.0494600534439087,0.823748826980591,0.302472561597824,-0.163718789815903,0.938992261886597,\n0.0738702192902565,0.343476206064224,0.936251699924469,0.411225825548172,-0.383013069629669,0.8271604180336,0.698169589042664,-0.369514137506485,0.613203525543213,0.693666994571686,0.300759524106979,0.654499650001526,0.286839812994003,0.207817569375038,0.935165643692017,0.411225825548172,-0.383013069629669,0.8271604180336,0.286839812994003,0.207817569375038,0.935165643692017,0.088567815721035,0.174428701400757,0.980678558349609,0.330161929130554,-0.399422317743301,0.855251371860504,0.368075758218765,0.856088101863861,0.362813085317612,0.274606496095657,0.656895995140076,0.702195703983307,0.401270300149918,0.638443887233734,0.65678882598877,0.639892160892487,0.694699466228485,0.328528076410294,0.888468742370605,0.446394234895706,0.106561981141567,0.784074723720551,0.612660884857178,0.0993655025959015,0.522062003612518,0.681964814662933,0.512225747108459,0.648745238780975,0.392575055360794,0.651931345462799,0.794647932052612,0.60278457403183,-0.072009839117527,0.784074723720551,0.612660884857178,0.0993655025959015,0.888468742370605,0.446394234895706,0.106561981141567,0.891878128051758,0.445774257183075,-0.0764117166399956,0.0935290157794952,0.208944618701935,-0.973444640636444,-0.0126510011032224,0.631483376026154,-0.775286257266998,0.143443211913109,0.633186459541321,-0.760591149330139,0.231918528676033,0.24745686352253,-0.940733194351196,0.231918528676033,0.24745686352253,-0.940733194351196,0.143443211913109,0.633186459541321,-0.760591149330139,0.545021951198578,0.680707216262817,-0.489478081464767,0.670513987541199,0.40045166015625,-0.624539375305176,0.282659292221069,0.205503165721893,-0.936948299407959,0.71557879447937,0.306318610906601,-0.62778651714325,0.7308149933815,-0.370514005422592,-0.573261618614197,0.413956999778748,-0.385759115219116,-0.824517726898193,0.29194575548172,0.445136368274689,-0.846534848213196,0.638194561004639,0.569729268550873,-0.517799377441406,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.452584743499756,-0.12309543043375,-0.883184313774109,0.670513987541199,0.40045166015625,-0.624539375305176,\n0.545021951198578,0.680707216262817,-0.489478081464767,0.794647932052612,0.60278457403183,-0.072009839117527,0.891878128051758,0.445774257183075,-0.0764117166399956,0.0983121022582054,0.926145672798157,-0.364127546548843,0.0479706004261971,0.64763480424881,-0.760439336299896,-0.0566258281469345,0.623355150222778,-0.779885828495026,-0.0940461307764053,0.921943545341492,-0.37573316693306,0.978555917739868,-0.185044288635254,-0.090481773018837,0.922853767871857,-0.106967732310295,-0.369998395442963,0.747824549674988,-0.399453073740005,-0.530278921127319,0.897543668746948,-0.428973793983459,-0.101964816451073,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.638194561004639,0.569729268550873,-0.517799377441406,0.827589094638824,0.557050704956055,-0.069215714931488,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.626454889774323,0.131802603602409,-0.768233299255371,0.806110441684723,0.0128834620118141,-0.591624915599823,0.319176852703094,-0.387702465057373,-0.864761769771576,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.626454889774323,0.131802603602409,-0.768233299255371,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.0866431072354317,0.348724126815796,-0.933211922645569,0.754057705402374,0.374476611614227,-0.539596378803253,0.29194575548172,0.445136368274689,-0.846534848213196,0.0866431072354317,0.348724126815796,-0.933211922645569,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.40653070807457,0.0205510575324297,-0.913405954837799,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.319176852703094,-0.387702465057373,-0.864761769771576,0.413956999778748,-0.385759115219116,-0.824517726898193,0.40653070807457,0.0205510575324297,-0.913405954837799,0.413956999778748,-0.385759115219116,-0.824517726898193,0.7308149933815,-0.370514005422592,-0.573261618614197,0.768324851989746,0.0888023898005486,-0.63386994600296,0.40653070807457,0.0205510575324297,-0.913405954837799,0.827589094638824,0.557050704956055,-0.069215714931488,0.638194561004639,0.569729268550873,-0.517799377441406,\n0.768324851989746,0.0888023898005486,-0.63386994600296,0.98238343000412,0.131090134382248,-0.133184969425201,0.768324851989746,0.0888023898005486,-0.63386994600296,0.7308149933815,-0.370514005422592,-0.573261618614197,0.95092248916626,-0.279943495988846,-0.131825938820839,0.98238343000412,0.131090134382248,-0.133184969425201,0.98238343000412,0.131090134382248,-0.133184969425201,0.976288020610809,0.129569977521896,0.173416510224342,0.826591491699219,0.555592954158783,0.0897942036390305,0.827589094638824,0.557050704956055,-0.069215714931488,0.95092248916626,-0.279943495988846,-0.131825938820839,0.942301154136658,-0.286070376634598,0.173874363303185,0.976288020610809,0.129569977521896,0.173416510224342,0.98238343000412,0.131090134382248,-0.133184969425201,0.942301154136658,-0.286070376634598,0.173874363303185,0.698169589042664,-0.369514137506485,0.613203525543213,0.723759770393372,0.0808410197496414,0.685300350189209,0.976288020610809,0.129569977521896,0.173416510224342,0.245776325464249,-0.0611284077167511,0.967397153377533,0.0738702192902565,0.343476206064224,0.936251699924469,0.283178418874741,0.436211496591568,0.854124963283539,0.390471458435059,0.0208971817046404,0.920377850532532,0.283178418874741,0.436211496591568,0.854124963283539,0.622246146202087,0.559013962745667,0.548008322715759,0.723759770393372,0.0808410197496414,0.685300350189209,0.390471458435059,0.0208971817046404,0.920377850532532,0.723759770393372,0.0808410197496414,0.685300350189209,0.698169589042664,-0.369514137506485,0.613203525543213,0.411225825548172,-0.383013069629669,0.8271604180336,0.390471458435059,0.0208971817046404,0.920377850532532,0.15211121737957,-0.123818121850491,0.980576992034912,0.65978866815567,0.352559685707092,0.663611769676209,0.0738702192902565,0.343476206064224,0.936251699924469,0.245776325464249,-0.0611284077167511,0.967397153377533,0.378664463758469,0.883253812789917,-0.276542812585831,0.306242048740387,0.731363773345947,-0.609362602233887,0.206741601228714,0.69427889585495,-0.689372718334198,0.324993640184402,0.89479660987854,-0.306134164333344,\n0.101348482072353,0.892875194549561,0.438750922679901,0.0470689907670021,0.582839369773865,0.811222970485687,0.190875470638275,0.632551431655884,0.750629842281342,0.320414483547211,0.864260375499725,0.387799590826035,0.190875470638275,0.632551431655884,0.750629842281342,0.274606496095657,0.656895995140076,0.702195703983307,0.368075758218765,0.856088101863861,0.362813085317612,0.320414483547211,0.864260375499725,0.387799590826035,0.324993640184402,0.89479660987854,-0.306134164333344,0.320414483547211,0.864260375499725,0.387799590826035,0.368075758218765,0.856088101863861,0.362813085317612,0.378664463758469,0.883253812789917,-0.276542812585831,0.937979876995087,0.334741920232773,-0.0902306362986565,0.95092248916626,-0.279943495988846,-0.131825938820839,0.7308149933815,-0.370514005422592,-0.573261618614197,0.71557879447937,0.306318610906601,-0.62778651714325,0.223221242427826,0.259100526571274,0.939701676368713,0.648745238780975,0.392575055360794,0.651931345462799,0.522062003612518,0.681964814662933,0.512225747108459,0.1247773244977,0.633714616298676,0.763437211513519,0.1247773244977,0.633714616298676,0.763437211513519,-0.0781158208847046,0.611012876033783,0.787757039070129,0.0274804774671793,0.267909824848175,0.963052034378052,0.223221242427826,0.259100526571274,0.939701676368713,0.405990958213806,0.468467801809311,0.784671425819397,0.0274804774671793,0.267909824848175,0.963052034378052,-0.0781158208847046,0.611012876033783,0.787757039070129,-0.1829604357481,0.769297182559967,0.61213344335556,0.0738702192902565,0.343476206064224,0.936251699924469,0.302472561597824,-0.163718789815903,0.938992261886597,0.439386487007141,-0.126929730176926,0.889285326004028,0.283178418874741,0.436211496591568,0.854124963283539,0.397319257259369,-0.209660559892654,0.893409132957459,0.729263663291931,-0.375070512294769,0.572273194789886,0.796823620796204,-0.217323467135429,0.563775300979614,0.500088214874268,-0.193674385547638,0.844039142131805,0.622246146202087,0.559013962745667,0.548008322715759,0.800352692604065,-0.0664194524288177,0.595838904380798,\n0.993047595024109,0.00499473372474313,0.117607519030571,0.826591491699219,0.555592954158783,0.0897942036390305,0.796823620796204,-0.217323467135429,0.563775300979614,0.729263663291931,-0.375070512294769,0.572273194789886,0.897991716861725,-0.426986217498779,0.106271713972092,0.979334354400635,-0.157389283180237,0.127015009522438,0.979334354400635,-0.157389283180237,0.127015009522438,0.897991716861725,-0.426986217498779,0.106271713972092,0.897543668746948,-0.428973793983459,-0.101964816451073,0.983732461929321,-0.14598248898983,-0.104687921702862,0.426769316196442,-0.235881611704826,-0.873056590557098,0.747824549674988,-0.399453073740005,-0.530278921127319,0.922853767871857,-0.106967732310295,-0.369998395442963,0.795709431171417,0.00568865891546011,-0.605651795864105,-0.0126510011032224,0.631483376026154,-0.775286257266998,-0.103621512651443,0.603616952896118,-0.790511965751648,-0.122300885617733,0.731758713722229,-0.670501053333282,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.143443211913109,0.633186459541321,-0.760591149330139,-0.0126510011032224,0.631483376026154,-0.775286257266998,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.103472903370857,0.756755590438843,-0.645456671714783,0.545021951198578,0.680707216262817,-0.489478081464767,0.143443211913109,0.633186459541321,-0.760591149330139,0.103472903370857,0.756755590438843,-0.645456671714783,0.484853446483612,0.730157256126404,-0.481443136930466,0.794647932052612,0.60278457403183,-0.072009839117527,0.545021951198578,0.680707216262817,-0.489478081464767,0.484853446483612,0.730157256126404,-0.481443136930466,0.826110124588013,0.547678649425507,-0.132628157734871,0.826110124588013,0.547678649425507,-0.132628157734871,0.794824659824371,0.578912436962128,0.181972846388817,0.784074723720551,0.612660884857178,0.0993655025959015,0.794647932052612,0.60278457403183,-0.072009839117527,0.522062003612518,0.681964814662933,0.512225747108459,0.784074723720551,0.612660884857178,0.0993655025959015,0.794824659824371,0.578912436962128,0.181972846388817,0.430720508098602,0.740847587585449,0.515387892723084,\n0.1247773244977,0.633714616298676,0.763437211513519,0.522062003612518,0.681964814662933,0.512225747108459,0.430720508098602,0.740847587585449,0.515387892723084,0.0950676947832108,0.75424587726593,0.649673223495483,0.0950676947832108,0.75424587726593,0.649673223495483,-0.0567072629928589,0.694658160209656,0.717101395130157,-0.0781158208847046,0.611012876033783,0.787757039070129,0.1247773244977,0.633714616298676,0.763437211513519,-0.1829604357481,0.769297182559967,0.61213344335556,-0.0781158208847046,0.611012876033783,0.787757039070129,-0.0567072629928589,0.694658160209656,0.717101395130157,-0.245767340064049,0.604095578193665,0.758067905902863,-0.122300885617733,0.731758713722229,-0.670501053333282,-0.0566258281469345,0.623355150222778,-0.779885828495026,0.0479706004261971,0.64763480424881,-0.760439336299896,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.103472903370857,0.756755590438843,-0.645456671714783,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.0479706004261971,0.64763480424881,-0.760439336299896,0.206741601228714,0.69427889585495,-0.689372718334198,0.484853446483612,0.730157256126404,-0.481443136930466,0.103472903370857,0.756755590438843,-0.645456671714783,0.206741601228714,0.69427889585495,-0.689372718334198,0.306242048740387,0.731363773345947,-0.609362602233887,0.472137004137039,0.668477177619934,-0.574651956558228,0.826110124588013,0.547678649425507,-0.132628157734871,0.484853446483612,0.730157256126404,-0.481443136930466,0.472137004137039,0.668477177619934,-0.574651956558228,0.675914883613586,0.694170355796814,-0.247520759701729,0.675914883613586,0.694170355796814,-0.247520759701729,0.639892160892487,0.694699466228485,0.328528076410294,0.794824659824371,0.578912436962128,0.181972846388817,0.826110124588013,0.547678649425507,-0.132628157734871,0.430720508098602,0.740847587585449,0.515387892723084,0.794824659824371,0.578912436962128,0.181972846388817,0.639892160892487,0.694699466228485,0.328528076410294,0.401270300149918,0.638443887233734,0.65678882598877,0.0950676947832108,0.75424587726593,0.649673223495483,\n0.430720508098602,0.740847587585449,0.515387892723084,0.401270300149918,0.638443887233734,0.65678882598877,0.274606496095657,0.656895995140076,0.702195703983307,0.190875470638275,0.632551431655884,0.750629842281342,0.190875470638275,0.632551431655884,0.750629842281342,0.0470689907670021,0.582839369773865,0.811222970485687,-0.0567072629928589,0.694658160209656,0.717101395130157,0.0950676947832108,0.75424587726593,0.649673223495483,-0.0567072629928589,0.694658160209656,0.717101395130157,0.0470689907670021,0.582839369773865,0.811222970485687,-0.0469878204166889,0.559723138809204,0.827346444129944,-0.245767340064049,0.604095578193665,0.758067905902863,0.0935290157794952,0.208944618701935,-0.973444640636444,0.114235505461693,0.174652293324471,-0.977980971336365,0.485665678977966,0.51228803396225,-0.708300650119781,0.0038525490090251,0.171840533614159,-0.985117256641388,0.231918528676033,0.24745686352253,-0.940733194351196,0.282659292221069,0.205503165721893,-0.936948299407959,0.114235505461693,0.174652293324471,-0.977980971336365,0.0935290157794952,0.208944618701935,-0.973444640636444,0.231918528676033,0.24745686352253,-0.940733194351196,0.670513987541199,0.40045166015625,-0.624539375305176,0.71557879447937,0.306318610906601,-0.62778651714325,0.282659292221069,0.205503165721893,-0.936948299407959,0.891878128051758,0.445774257183075,-0.0764117166399956,0.937979876995087,0.334741920232773,-0.0902306362986565,0.71557879447937,0.306318610906601,-0.62778651714325,0.670513987541199,0.40045166015625,-0.624539375305176,0.891878128051758,0.445774257183075,-0.0764117166399956,0.888468742370605,0.446394234895706,0.106561981141567,0.933896422386169,0.335515409708023,0.123558923602104,0.937979876995087,0.334741920232773,-0.0902306362986565,0.888468742370605,0.446394234895706,0.106561981141567,0.648745238780975,0.392575055360794,0.651931345462799,0.693666994571686,0.300759524106979,0.654499650001526,0.933896422386169,0.335515409708023,0.123558923602104,0.286839812994003,0.207817569375038,0.935165643692017,0.693666994571686,0.300759524106979,0.654499650001526,\n0.648745238780975,0.392575055360794,0.651931345462799,0.223221242427826,0.259100526571274,0.939701676368713,0.088567815721035,0.174428701400757,0.980678558349609,0.286839812994003,0.207817569375038,0.935165643692017,0.223221242427826,0.259100526571274,0.939701676368713,0.0274804774671793,0.267909824848175,0.963052034378052,0.405990958213806,0.468467801809311,0.784671425819397,0.457932114601135,0.272002577781677,0.846352636814117,0.088567815721035,0.174428701400757,0.980678558349609,0.0274804774671793,0.267909824848175,0.963052034378052,0.777039647102356,0.333707332611084,0.533712267875671,0.760879397392273,0.00385691528208554,0.648881912231445,0.457932114601135,0.272002577781677,0.846352636814117,0.926154136657715,0.165854901075363,-0.3387191593647,0.93531322479248,0.178703308105469,-0.305375546216965,0.795709431171417,0.00568865891546011,-0.605651795864105,0.922853767871857,-0.106967732310295,-0.369998395442963,0.0910219326615334,-0.210485890507698,-0.97335022687912,0.320743799209595,-0.127513855695724,-0.938543379306793,0.214329496026039,-0.204933792352676,-0.95502096414566,0.179054066538811,0.451375037431717,-0.8741854429245,0.902734816074371,0.140678882598877,-0.406545639038086,0.926154136657715,0.165854901075363,-0.3387191593647,0.927813827991486,0.152230933308601,-0.340569078922272,0.899548053741455,0.145640388131142,-0.411827832460403,0.899548053741455,0.145640388131142,-0.411827832460403,0.770998120307922,0.0437404066324234,-0.63533353805542,0.772511541843414,0.0615992993116379,-0.632005870342255,0.902734816074371,0.140678882598877,-0.406545639038086,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.214329496026039,-0.204933792352676,-0.95502096414566,0.772511541843414,0.0615992993116379,-0.632005870342255,0.770998120307922,0.0437404066324234,-0.63533353805542,0.179054066538811,0.451375037431717,-0.8741854429245,0.214329496026039,-0.204933792352676,-0.95502096414566,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.564793407917023,-0.0494600534439087,0.823748826980591,\n0.7165766954422,0.119066134095192,0.687270760536194,0.397319257259369,-0.209660559892654,0.893409132957459,0.302472561597824,-0.163718789815903,0.938992261886597,0.439386487007141,-0.126929730176926,0.889285326004028,0.302472561597824,-0.163718789815903,0.938992261886597,0.397319257259369,-0.209660559892654,0.893409132957459,0.500088214874268,-0.193674385547638,0.844039142131805,0.800352692604065,-0.0664194524288177,0.595838904380798,0.439386487007141,-0.126929730176926,0.889285326004028,0.500088214874268,-0.193674385547638,0.844039142131805,0.796823620796204,-0.217323467135429,0.563775300979614,0.993047595024109,0.00499473372474313,0.117607519030571,0.800352692604065,-0.0664194524288177,0.595838904380798,0.796823620796204,-0.217323467135429,0.563775300979614,0.979334354400635,-0.157389283180237,0.127015009522438,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.993047595024109,0.00499473372474313,0.117607519030571,0.979334354400635,-0.157389283180237,0.127015009522438,0.983732461929321,-0.14598248898983,-0.104687921702862,0.821371793746948,-0.202065214514732,-0.533402323722839,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.983732461929321,-0.14598248898983,-0.104687921702862,0.452584743499756,-0.12309543043375,-0.883184313774109,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.821371793746948,-0.202065214514732,-0.533402323722839,0.517105877399445,-0.187926828861237,-0.835035920143127,0.426769316196442,-0.235881611704826,-0.873056590557098,0.309483885765076,-0.163968995213509,-0.936661064624786,0.452584743499756,-0.12309543043375,-0.883184313774109,0.517105877399445,-0.187926828861237,-0.835035920143127,0.795709431171417,0.00568865891546011,-0.605651795864105,0.769950747489929,0.0194198340177536,-0.637807726860046,0.309483885765076,-0.163968995213509,-0.936661064624786,0.426769316196442,-0.235881611704826,-0.873056590557098,0.946711003780365,0.167055711150169,-0.275373607873917,0.769950747489929,0.0194198340177536,-0.637807726860046,\n0.795709431171417,0.00568865891546011,-0.605651795864105,0.93531322479248,0.178703308105469,-0.305375546216965,0.904744982719421,0.140758752822876,-0.402024179697037,0.90627920627594,0.138545647263527,-0.399328351020813,0.946711003780365,0.167055711150169,-0.275373607873917,0.93531322479248,0.178703308105469,-0.305375546216965,0.90627920627594,0.138545647263527,-0.399328351020813,0.904744982719421,0.140758752822876,-0.402024179697037,0.784979939460754,0.0750055387616158,-0.614963889122009,0.798663914203644,0.0795769542455673,-0.596492648124695,0.784979939460754,0.0750055387616158,-0.614963889122009,0.320743799209595,-0.127513855695724,-0.938543379306793,0.265012234449387,-0.116133384406567,-0.957225978374481,0.798663914203644,0.0795769542455673,-0.596492648124695,-0.245767340064049,0.604095578193665,0.758067905902863,-0.423373013734818,0.789847135543823,0.443730562925339,-0.1829604357481,0.769297182559967,0.61213344335556,0.127582147717476,-0.649050772190094,0.749970614910126,0.261260062456131,-0.761487662792206,0.593194544315338,0.0315268374979496,0.564418375492096,0.824886620044708,0.54774808883667,0.373568952083588,0.74861091375351,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.912629246711731,0.357585817575455,0.198091477155685,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.844159960746765,0.49836453795433,-0.197551965713501,-0.668442606925964,0.712539076805115,-0.213242903351784,-0.888629198074341,0.438762098550797,0.133514106273651,0.775733590126038,0.173521965742111,-0.606735110282898,0.119323797523975,0.10215725004673,-0.987585842609406,0.0699164718389511,0.326290965080261,-0.942680180072784,0.73961067199707,0.263024806976318,-0.619511127471924,-0.310650229454041,0.283165037631989,-0.907366514205933,0.0699164718389511,0.326290965080261,-0.942680180072784,0.119323797523975,0.10215725004673,-0.987585842609406,-0.313530147075653,0.0253957733511925,-0.94923859834671,0.839367091655731,0.0223367810249329,-0.543105840682983,\n0.725067377090454,0.0188654419034719,-0.688419461250305,0.445772647857666,-0.772406101226807,-0.452410876750946,0.698725283145905,-0.511526346206665,-0.500123798847198,0.767102777957916,0.172567009925842,-0.617878556251526,0.725067377090454,0.0188654419034719,-0.688419461250305,0.839367091655731,0.0223367810249329,-0.543105840682983,0.847418010234833,0.181933760643005,-0.49878141283989,0.850323617458344,0.228136360645294,-0.474239885807037,0.817859530448914,0.310457706451416,-0.484480977058411,0.788738131523132,0.260696917772293,-0.556712925434113,0.854514420032501,0.21429717540741,-0.473161548376083,0.804398238658905,0.375304967164993,-0.460531920194626,0.811875224113464,0.435735166072845,-0.388578832149506,0.817859530448914,0.310457706451416,-0.484480977058411,0.850323617458344,0.228136360645294,-0.474239885807037,0.901214420795441,0.431201189756393,-0.0433364585042,0.797342956066132,0.463364690542221,-0.386700719594955,0.789179563522339,0.518753051757813,-0.328771829605103,0.883821845054626,0.46681609749794,-0.0306868441402912,0.825478971004486,0.333341240882874,-0.455486595630646,0.797342956066132,0.463364690542221,-0.386700719594955,0.901214420795441,0.431201189756393,-0.0433364585042,0.956080257892609,0.274207085371017,-0.103542387485504,0.962835073471069,0.210140570998192,-0.169674947857857,0.83752965927124,0.20064052939415,-0.508219838142395,0.825478971004486,0.333341240882874,-0.455486595630646,0.956080257892609,0.274207085371017,-0.103542387485504,0.847964406013489,0.0018927511991933,-0.530049800872803,0.841212332248688,0.233560338616371,-0.487659126520157,0.974583148956299,0.15406733751297,-0.162637546658516,0.971639752388,-0.0853487625718117,-0.220526039600372,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.603576362133026,-0.735800743103027,0.307071357965469,\n-0.886275291442871,0.375701189041138,0.270859181880951,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.478379726409912,0.39488697052002,-0.784357786178589,0.727754414081573,0.0140857892110944,-0.685693144798279,0.3254614174366,-0.149335280060768,-0.933688282966614,-0.0490232147276402,-0.692386627197266,-0.71985936164856,0.889379680156708,-0.442159056663513,-0.116185612976551,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.0535960160195827,-0.641778349876404,-0.765015006065369,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.807643473148346,0.341063529253006,0.481027781963348,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.319865703582764,0.368970960378647,-0.872666239738464,-0.106276124715805,0.407822400331497,-0.906855165958405,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.752802550792694,0.00600722571834922,-0.658219039440155,0.727935612201691,0.64398717880249,-0.23535118997097,0.488869249820709,0.539150297641754,-0.685801565647125,-0.571620225906372,0.314757347106934,-0.757745385169983,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.294517815113068,0.487916797399521,-0.821703374385834,-0.74421751499176,0.314032524824142,-0.589511573314667,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.3254614174366,-0.149335280060768,-0.933688282966614,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.434757024049759,-0.760941982269287,-0.481615632772446,0.709877908229828,-0.542047500610352,-0.44973087310791,\n-0.807643473148346,0.341063529253006,0.481027781963348,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.809531450271606,0.353956669569016,0.468373239040375,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.454940319061279,-0.69178706407547,-0.560767292976379,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.809531450271606,0.353956669569016,0.468373239040375,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.985135495662689,0.16939789056778,0.0285019427537918,0.902499437332153,-0.42168003320694,0.0876398980617523,0.707824647426605,0.70638644695282,-0.00156357116065919,0.985135495662689,0.16939789056778,0.0285019427537918,0.727754414081573,0.0140857892110944,-0.685693144798279,0.209208816289902,-0.618555307388306,-0.757377743721008,0.902499437332153,-0.42168003320694,0.0876398980617523,0.752802550792694,0.00600722571834922,-0.658219039440155,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.707824647426605,0.70638644695282,-0.00156357116065919,0.113118633627892,0.424383550882339,-0.898388981819153,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.509106159210205,-0.777470827102661,-0.369256019592285,0.556583344936371,-0.535031855106354,-0.635575234889984,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.989299476146698,0.112728737294674,0.0926214382052422,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.888629198074341,0.438762098550797,0.133514106273651,-0.886275291442871,0.375701189041138,0.270859181880951,-0.948116004467011,0.0624199733138084,0.311736673116684,\n0.902499437332153,-0.42168003320694,0.0876398980617523,0.209208816289902,-0.618555307388306,-0.757377743721008,0.113118633627892,0.424383550882339,-0.898388981819153,0.707824647426605,0.70638644695282,-0.00156357116065919,0.209208816289902,-0.618555307388306,-0.757377743721008,0.727754414081573,0.0140857892110944,-0.685693144798279,0.752802550792694,0.00600722571834922,-0.658219039440155,0.113118633627892,0.424383550882339,-0.898388981819153,0.727754414081573,0.0140857892110944,-0.685693144798279,0.889379680156708,-0.442159056663513,-0.116185612976551,0.727935612201691,0.64398717880249,-0.23535118997097,0.752802550792694,0.00600722571834922,-0.658219039440155,0.889379680156708,-0.442159056663513,-0.116185612976551,-0.0490232147276402,-0.692386627197266,-0.71985936164856,-0.106276124715805,0.407822400331497,-0.906855165958405,0.727935612201691,0.64398717880249,-0.23535118997097,-0.0490232147276402,-0.692386627197266,-0.71985936164856,0.3254614174366,-0.149335280060768,-0.933688282966614,0.450898140668869,-0.00387678225524724,-0.892566978931427,-0.106276124715805,0.407822400331497,-0.906855165958405,0.3254614174366,-0.149335280060768,-0.933688282966614,0.709877908229828,-0.542047500610352,-0.44973087310791,0.488869249820709,0.539150297641754,-0.685801565647125,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.709877908229828,-0.542047500610352,-0.44973087310791,-0.434757024049759,-0.760941982269287,-0.481615632772446,-0.571620225906372,0.314757347106934,-0.757745385169983,0.488869249820709,0.539150297641754,-0.685801565647125,-0.434757024049759,-0.760941982269287,-0.481615632772446,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.247537314891815,0.00721516087651253,-0.968851506710052,-0.571620225906372,0.314757347106934,-0.757745385169983,-0.0602304749190807,-0.267121762037277,-0.961778700351715,0.556583344936371,-0.535031855106354,-0.635575234889984,0.294517815113068,0.487916797399521,-0.821703374385834,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.556583344936371,-0.535031855106354,-0.635575234889984,\n-0.509106159210205,-0.777470827102661,-0.369256019592285,-0.74421751499176,0.314032524824142,-0.589511573314667,0.294517815113068,0.487916797399521,-0.821703374385834,-0.509106159210205,-0.777470827102661,-0.369256019592285,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.74421751499176,0.314032524824142,-0.589511573314667,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.0535960160195827,-0.641778349876404,-0.765015006065369,-0.319865703582764,0.368970960378647,-0.872666239738464,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.0535960160195827,-0.641778349876404,-0.765015006065369,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.319865703582764,0.368970960378647,-0.872666239738464,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.454940319061279,-0.69178706407547,-0.560767292976379,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.454940319061279,-0.69178706407547,-0.560767292976379,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.807643473148346,0.341063529253006,0.481027781963348,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.133638396859169,-0.991028487682343,-0.00182775978464633,-0.133638396859169,-0.991028487682343,-0.00182775978464633,-0.289891123771667,-0.78655070066452,0.545253217220306,-0.289891123771667,-0.78655070066452,0.545253217220306,0.017691396176815,-0.98781031370163,0.15465372800827,0.017691396176815,-0.98781031370163,0.15465372800827,0.139990121126175,-0.714202702045441,0.685796797275543,0.432984858751297,-0.720436871051788,0.541751623153687,0.139990121126175,-0.714202702045441,0.685796797275543,\n0.316983908414841,-0.933099210262299,0.169844269752502,0.316983908414841,-0.933099210262299,0.169844269752502,0.355301350355148,-0.934036493301392,0.0365620106458664,0.355301350355148,-0.934036493301392,0.0365620106458664,0.617214262485504,-0.750285804271698,0.236891880631447,0.432984858751297,-0.720436871051788,0.541751623153687,0.397023230791092,-0.910409390926361,-0.116307109594345,0.713743150234222,-0.689680516719818,-0.122112594544888,0.617214262485504,-0.750285804271698,0.236891880631447,0.397023230791092,-0.910409390926361,-0.116307109594345,0.387578755617142,-0.825659155845642,-0.409962981939316,0.698415637016296,-0.626996219158173,-0.345096111297607,0.713743150234222,-0.689680516719818,-0.122112594544888,0.387578755617142,-0.825659155845642,-0.409962981939316,0.698415637016296,-0.626996219158173,-0.345096111297607,0.347473055124283,-0.882382750511169,-0.31727460026741,0.347473055124283,-0.882382750511169,-0.31727460026741,0.632658183574677,-0.595792829990387,-0.494746923446655,0.366124451160431,-0.844667136669159,-0.390500038862228,0.582049369812012,-0.552822172641754,-0.596327304840088,0.632658183574677,-0.595792829990387,-0.494746923446655,0.366124451160431,-0.844667136669159,-0.390500038862228,0.0932797566056252,-0.850050926208496,-0.518374681472778,0.0932797566056252,-0.850050926208496,-0.518374681472778,-0.107030250132084,-0.605656087398529,-0.788495600223541,0.16710638999939,-0.594872176647186,-0.786258578300476,-0.0686139315366745,-0.854096055030823,-0.515569627285004,-0.207464292645454,-0.894959568977356,-0.394975960254669,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.107030250132084,-0.605656087398529,-0.788495600223541,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.207464292645454,-0.894959568977356,-0.394975960254669,-0.3389513194561,-0.904059052467346,-0.260363727807999,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.788328349590302,-0.474288523197174,0.39190411567688,\n-0.562327146530151,-0.809826016426086,0.167242348194122,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.788328349590302,-0.474288523197174,0.39190411567688,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.599566876888275,-0.77289891242981,-0.207718148827553,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.788328349590302,-0.474288523197174,0.39190411567688,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.599566876888275,-0.77289891242981,-0.207718148827553,-0.182520136237144,-0.960930228233337,-0.208085164427757,-0.562327146530151,-0.809826016426086,0.167242348194122,0.238703370094299,-0.21425598859787,0.947161555290222,0.328837275505066,-0.326990753412247,0.885970175266266,0.199919357895851,-0.342281520366669,0.918082594871521,0.709650099277496,-0.321021109819412,0.627169966697693,0.251838862895966,-0.440983474254608,0.861458539962769,0.0749799236655235,0.161466613411903,0.984025657176971,0.460760354995728,0.108215063810349,0.880902588367462,0.072246678173542,-0.0245807897299528,0.997083842754364,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.280184537172318,-0.219449639320374,0.934525847434998,0.0549214817583561,-0.121100522577763,0.991119742393494,0.072246678173542,-0.0245807897299528,0.997083842754364,-0.280184537172318,-0.219449639320374,0.934525847434998,\n-0.371589094400406,-0.191971749067307,0.908332765102386,0.904132843017578,0.38877084851265,-0.177203312516212,0.924062311649323,0.166339710354805,-0.344151109457016,0.985335350036621,0.0123839350417256,-0.170178771018982,-0.944730460643768,-0.313157916069031,-0.0970383062958717,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.979109942913055,-0.187053516507149,-0.0797165557742119,0.781636536121368,0.602840006351471,-0.160088449716568,0.917835712432861,0.197176292538643,-0.344527393579483,0.792211890220642,0.491865277290344,-0.361204653978348,-0.52398544549942,-0.396743208169937,0.753680348396301,-0.481494218111038,-0.48454275727272,0.730329811573029,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.833821058273315,0.528545200824738,-0.159318462014198,-0.844159960746765,0.49836453795433,-0.197551965713501,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.953436672687531,0.152786508202553,0.260028511285782,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.953436672687531,0.152786508202553,0.260028511285782,-0.973927080631256,-0.0629245564341545,0.217960059642792,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.994358837604523,0.088942214846611,0.0577910803258419,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.644507586956024,0.336329728364944,0.686652958393097,-0.642944931983948,0.0801258310675621,0.761709690093994,0.495204418897629,-0.163849160075188,0.853185832500458,0.0833947658538818,-0.437338054180145,0.895422101020813,0.54774808883667,0.373568952083588,0.74861091375351,0.628335058689117,0.550278067588806,0.549899160861969,0.86673891544342,0.195172861218452,-0.458989411592484,\n0.87714958190918,0.359215557575226,-0.318704843521118,0.868426561355591,0.2465450912714,-0.430175423622131,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.772903144359589,-0.524522066116333,-0.357067674398422,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.332606077194214,0.942266285419464,-0.0388254560530186,-0.28744050860405,0.955214440822601,-0.0703088492155075,-0.776516318321228,0.531664490699768,-0.33816459774971,0.843789756298065,-0.527951836585999,-0.0963620916008949,0.843789756298065,-0.527951836585999,-0.0963620916008949,0.843789756298065,-0.527951836585999,-0.0963620916008949,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.928109109401703,-0.270218104124069,0.256116449832916,0.943277299404144,-0.202248081564903,0.263293832540512,0.776516377925873,0.531664490699768,-0.338164389133453,0.287440627813339,0.955214440822601,-0.070308543741703,0.332606196403503,0.942266285419464,-0.0388250686228275,0.865038812160492,0.500161468982697,0.0393240377306938,0.182520046830177,-0.960930287837982,-0.208085060119629,0.581761598587036,-0.790978848934174,-0.189488589763641,0.562327146530151,-0.809826016426086,0.167242258787155,0.198757439851761,-0.919363081455231,-0.339509904384613,0.603638291358948,-0.670441269874573,-0.431427150964737,0.581761598587036,-0.790978848934174,-0.189488589763641,0.198757439851761,-0.919363081455231,-0.339509904384613,-0.272133141756058,-0.872126579284668,-0.406618744134903,-0.599566876888275,-0.77289891242981,-0.207718148827553,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.141517594456673,-0.947756111621857,-0.285886585712433,-0.141517594456673,-0.947756111621857,-0.285886585712433,-0.141517594456673,-0.947756111621857,-0.285886585712433,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.709949254989624,0.60140985250473,0.366439938545227,\n-0.380683273077011,0.86094468832016,0.337423235177994,-0.462400823831558,0.884378015995026,0.0637255012989044,0.73961067199707,0.263024806976318,-0.619511127471924,0.792211890220642,0.491865277290344,-0.361204653978348,0.917835712432861,0.197176292538643,-0.344527393579483,0.0910219326615334,-0.210485890507698,-0.97335022687912,0.265012234449387,-0.116133384406567,-0.957225978374481,0.320743799209595,-0.127513855695724,-0.938543379306793,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.310650229454041,0.283165037631989,-0.907366514205933,-0.277701437473297,0.780102908611298,-0.56064373254776,0.11270098388195,0.815884530544281,-0.567125082015991,0.0699164718389511,0.326290965080261,-0.942680180072784,0.825562000274658,0.439345568418503,-0.354150801897049,0.825562000274658,0.439345568418503,-0.354150801897049,0.825562000274658,0.439345568418503,-0.354150801897049,0.660678803920746,-0.179935500025749,0.728784441947937,0.664143323898315,-0.190197542309761,0.72300660610199,0.280544310808182,-0.2230264544487,0.933570623397827,0.370588421821594,-0.193350583314896,0.908449113368988,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.978282392024994,-0.200846880674362,-0.0512255467474461,0.861376106739044,-0.246860504150391,0.443949490785599,0.884072363376617,-0.159779712557793,0.439188450574875,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.881938695907593,-0.0529328174889088,-0.468382596969604,0.978282392024994,-0.200846880674362,-0.0512255467474461,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.881938695907593,-0.0529328174889088,-0.468382596969604,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.639175117015839,0.0817547887563705,-0.764703452587128,0.632078886032104,0.0873222127556801,-0.769968271255493,0.230421900749207,0.163790717720985,-0.95920717716217,0.632078886032104,0.0873222127556801,-0.769968271255493,0.639175117015839,0.0817547887563705,-0.764703452587128,\n0.243145853281021,0.221795409917831,-0.944291710853577,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.227913439273834,0.190211743116379,-0.954921424388886,0.230421900749207,0.163790717720985,-0.95920717716217,0.243145853281021,0.221795409917831,-0.944291710853577,-0.686836779117584,0.183132573962212,-0.703361690044403,-0.227913439273834,0.190211743116379,-0.954921424388886,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.850684106349945,0.180962756276131,-0.493547379970551,-0.686836779117584,0.183132573962212,-0.703361690044403,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.958607912063599,0.205605447292328,-0.196970209479332,-0.850684106349945,0.180962756276131,-0.493547379970551,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.93060040473938,0.126688674092293,0.343413561582565,-0.924485385417938,0.137891575694084,0.355404943227768,-0.958607912063599,0.205605447292328,-0.196970209479332,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.389621406793594,0.0748821347951889,0.917925834655762,-0.698271632194519,0.0533006526529789,0.713845789432526,-0.703129649162292,0.0220469851046801,0.710719764232636,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.1855189204216,-0.00743514811620116,0.982612550258636,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.388236194849014,-0.50770115852356,0.769098341464996,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.389621406793594,0.0748821347951889,0.917925834655762,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.0499088205397129,-0.128681614995003,0.990429282188416,0.319739699363709,-0.689254701137543,0.650149524211884,0.329437464475632,-0.321430414915085,0.887780070304871,0.668613970279694,-0.338565081357956,0.662064254283905,0.68229067325592,-0.351099163293839,0.641255617141724,\n0.811961233615875,-0.33458149433136,0.478303402662277,0.68229067325592,-0.351099163293839,0.641255617141724,0.668613970279694,-0.338565081357956,0.662064254283905,0.82292628288269,-0.280684322118759,0.493972301483154,0.98552018404007,-0.14923769235611,-0.0804868638515472,0.811961233615875,-0.33458149433136,0.478303402662277,0.82292628288269,-0.280684322118759,0.493972301483154,0.991608023643494,-0.114275835454464,-0.060452651232481,0.881715893745422,0.054974939674139,-0.468566834926605,0.878365039825439,0.0618300177156925,-0.473974645137787,0.98552018404007,-0.14923769235611,-0.0804868638515472,0.991608023643494,-0.114275835454464,-0.060452651232481,0.878365039825439,0.0618300177156925,-0.473974645137787,0.881715893745422,0.054974939674139,-0.468566834926605,0.676566541194916,0.144181370735168,-0.722128391265869,0.696259915828705,0.165328323841095,-0.6984903216362,0.676566541194916,0.144181370735168,-0.722128391265869,0.286524504423141,0.225191175937653,-0.931231796741486,0.3039411008358,0.26229527592659,-0.915871679782867,0.696259915828705,0.165328323841095,-0.6984903216362,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.213439926505089,0.370307356119156,-0.904055237770081,0.3039411008358,0.26229527592659,-0.915871679782867,0.286524504423141,0.225191175937653,-0.931231796741486,-0.639900922775269,0.420081675052643,-0.643473565578461,-0.213439926505089,0.370307356119156,-0.904055237770081,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.653601109981537,0.351934164762497,-0.670035779476166,-0.653601109981537,0.351934164762497,-0.670035779476166,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.820141792297363,0.414948493242264,-0.393935561180115,-0.639900922775269,0.420081675052643,-0.643473565578461,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.944865584373474,0.320159882307053,-0.0687510371208191,-0.820141792297363,0.414948493242264,-0.393935561180115,-0.935219764709473,0.0955542922019959,0.340930134057999,-0.944865584373474,0.320159882307053,-0.0687510371208191,\n-0.957767188549042,0.271569937467575,-0.094508096575737,-0.927268087863922,0.115808911621571,0.356036812067032,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.935219764709473,0.0955542922019959,0.340930134057999,-0.927268087863922,0.115808911621571,0.356036812067032,0.602446496486664,-0.488442957401276,0.631254017353058,0.78125125169754,-0.138539433479309,0.608648777008057,0.805302381515503,-0.358387529850006,0.472277879714966,0.605372726917267,0.000812157464679331,0.795941710472107,0.602446496486664,-0.488442957401276,0.631254017353058,0.319739699363709,-0.689254701137543,0.650149524211884,0.408358931541443,-0.833707392215729,0.371718913316727,0.805302381515503,-0.358387529850006,0.472277879714966,0.685771405696869,-0.727804124355316,0.00433491868898273,0.301932573318481,-0.883707880973816,0.357627093791962,0.622698485851288,-0.640293836593628,0.44974485039711,0.78181403875351,-0.124027468264103,-0.611051499843597,0.368462383747101,-0.106815822422504,-0.923485696315765,0.318273335695267,-0.280295252799988,-0.905613958835602,0.746579051017761,-0.327975332736969,-0.578836619853973,0.383778035640717,0.0243120118975639,-0.923105239868164,0.368462383747101,-0.106815822422504,-0.923485696315765,0.78181403875351,-0.124027468264103,-0.611051499843597,0.780589640140533,-0.0567772276699543,-0.622459769248962,0.872841775417328,-0.161784738302231,-0.460405200719833,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.653478145599365,0.112765118479729,-0.748498737812042,0.892382204532623,-0.0374441854655743,-0.449724316596985,0.603638291358948,-0.670441269874573,-0.431427150964737,0.442950963973999,-0.635696709156036,-0.632205784320831,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.872841775417328,-0.161784738302231,-0.460405200719833,0.219755545258522,-0.882318615913391,-0.416198641061783,0.442950963973999,-0.635696709156036,-0.632205784320831,0.603638291358948,-0.670441269874573,-0.431427150964737,0.362535744905472,-0.881527543067932,-0.302451580762863,\n-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.176827967166901,-0.795711040496826,-0.579288959503174,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.217101514339447,-0.0525678582489491,-0.974732518196106,-0.187843710184097,0.254132181406021,-0.948752641677856,0.24560159444809,0.232358887791634,-0.941110610961914,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.345599442720413,-0.564565002918243,-0.74955141544342,0.224707394838333,-0.83567225933075,-0.501157164573669,0.224707394838333,-0.83567225933075,-0.501157164573669,0.16710638999939,-0.594872176647186,-0.786258578300476,0.156650885939598,0.00669354572892189,-0.987631380558014,0.422739714384079,7.39172464818694e-005,-0.906251132488251,0.345599442720413,-0.564565002918243,-0.74955141544342,0.16710638999939,-0.594872176647186,-0.786258578300476,0.394656956195831,0.265770107507706,-0.879552245140076,0.422739714384079,7.39172464818694e-005,-0.906251132488251,0.156650885939598,0.00669354572892189,-0.987631380558014,0.168669149279594,0.29014664888382,-0.942000865936279,0.431132704019547,0.237300783395767,-0.870524525642395,0.394656956195831,0.265770107507706,-0.879552245140076,0.168669149279594,0.29014664888382,-0.942000865936279,0.2085961997509,0.239187613129616,-0.948302090167999,0.491525501012802,0.22898742556572,-0.840218663215637,0.431132704019547,0.237300783395767,-0.870524525642395,0.2085961997509,0.239187613129616,-0.948302090167999,0.222743824124336,0.213152140378952,-0.951289296150208,0.502497434616089,0.354075133800507,-0.788750350475311,0.491525501012802,0.22898742556572,-0.840218663215637,0.222743824124336,0.213152140378952,-0.951289296150208,0.215944558382034,0.319608330726624,-0.922614991664886,0.500628232955933,0.440243989229202,-0.745356738567352,0.502497434616089,0.354075133800507,-0.788750350475311,0.215944558382034,0.319608330726624,-0.922614991664886,0.224338784813881,0.414775222539902,-0.881835401058197,0.49361053109169,0.523924946784973,-0.694155097007751,0.500628232955933,0.440243989229202,-0.745356738567352,0.224338784813881,0.414775222539902,-0.881835401058197,\n0.233416378498077,0.501707494258881,-0.832950413227081,0.471412837505341,0.597895562648773,-0.648298442363739,0.49361053109169,0.523924946784973,-0.694155097007751,0.233416378498077,0.501707494258881,-0.832950413227081,0.216972485184669,0.595779240131378,-0.773285210132599,0.44583061337471,0.492900937795639,-0.747183859348297,0.471412837505341,0.597895562648773,-0.648298442363739,0.216972485184669,0.595779240131378,-0.773285210132599,0.204966142773628,0.497180044651031,-0.843090057373047,0.424920648336411,0.331089466810226,-0.842509508132935,0.44583061337471,0.492900937795639,-0.747183859348297,0.204966142773628,0.497180044651031,-0.843090057373047,0.184527859091759,0.31499707698822,-0.930981338024139,0.354670226573944,0.281918495893478,-0.89147686958313,0.424920648336411,0.331089466810226,-0.842509508132935,0.184527859091759,0.31499707698822,-0.930981338024139,0.152592211961746,0.243283241987228,-0.957877278327942,0.236234411597252,0.0899422541260719,-0.967524528503418,0.468770742416382,0.121921703219414,-0.874865233898163,0.354670226573944,0.281918495893478,-0.89147686958313,0.152592211961746,0.243283241987228,-0.957877278327942,0.0293396916240454,-0.0204683300107718,-0.999359905719757,0.0897360891103745,0.0411871410906315,-0.995113611221313,0.152592211961746,0.243283241987228,-0.957877278327942,-0.0849575996398926,0.129486069083214,-0.9879350066185,0.181899905204773,-0.161402761936188,-0.969980180263519,0.0897360891103745,0.0411871410906315,-0.995113611221313,0.0293396916240454,-0.0204683300107718,-0.999359905719757,0.097769021987915,-0.178414672613144,-0.979085981845856,0.183815449476242,-0.694319665431976,-0.695795953273773,0.287791073322296,-0.680340945720673,-0.67402708530426,0.210264012217522,-0.226016640663147,-0.951160073280334,0.183815449476242,-0.694319665431976,-0.695795953273773,0.181899905204773,-0.161402761936188,-0.969980180263519,0.097769021987915,-0.178414672613144,-0.979085981845856,-0.248274028301239,-0.562410414218903,0.788704335689545,0.626252830028534,0.308739811182022,0.715882003307343,0.750469028949738,0.503480017185211,0.42814028263092,\n0.0119833052158356,-0.684736132621765,0.728692531585693,0.991423904895782,0.113214619457722,0.0652767568826675,0.80362457036972,-0.592847883701324,0.052143108099699,0.960353672504425,0.263352990150452,0.0914659649133682,0.815547049045563,-0.485381871461868,-0.315099239349365,0.972172915935516,-0.00723095051944256,0.234152868390083,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.183815449476242,-0.694319665431976,-0.695795953273773,0.097769021987915,-0.178414672613144,-0.979085981845856,-0.361754894256592,-0.299040019512177,-0.883011043071747,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.407887548208237,-0.115010686218739,-0.905759513378143,-0.361754894256592,-0.299040019512177,-0.883011043071747,0.097769021987915,-0.178414672613144,-0.979085981845856,0.0293396916240454,-0.0204683300107718,-0.999359905719757,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.407887548208237,-0.115010686218739,-0.905759513378143,0.0293396916240454,-0.0204683300107718,-0.999359905719757,-0.0849575996398926,0.129486069083214,-0.9879350066185,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.0849575996398926,0.129486069083214,-0.9879350066185,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.76449728012085,0.158614858984947,-0.624808132648468,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.337705463171005,0.352743804454803,-0.872655034065247,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.76449728012085,0.158614858984947,-0.624808132648468,\n-0.337705463171005,0.352743804454803,-0.872655034065247,-0.323528319597244,0.300020337104797,-0.89739465713501,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.323528319597244,0.300020337104797,-0.89739465713501,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.243201240897179,0.169641554355621,-0.955026090145111,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.243201240897179,0.169641554355621,-0.955026090145111,-0.233401030302048,0.186044618487358,-0.954416751861572,-0.261592835187912,0.265700459480286,-0.927886009216309,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.233401030302048,0.186044618487358,-0.954416751861572,-0.700080990791321,-0.0367838852107525,-0.713115334510803,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.261592835187912,0.265700459480286,-0.927886009216309,-0.255131036043167,0.019106624647975,-0.966717660427094,-0.0161609761416912,0.992576837539673,-0.120540797710419,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.0145869944244623,0.988409578800201,-0.151108130812645,0.707107186317444,1.42954419857233e-007,-0.707106351852417,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.351822137832642,0.145729631185532,-0.924653470516205,0.653282701969147,0.27059879899025,-0.707105338573456,0.653282701969147,0.27059879899025,-0.707105338573456,0.351822137832642,0.145729631185532,-0.924653470516205,0.269274324178696,0.269274234771729,-0.924652755260468,0.500002682209015,0.500003159046173,-0.707102656364441,0.500002682209015,0.500003159046173,-0.707102656364441,0.269274324178696,0.269274234771729,-0.924652755260468,0.145730510354042,0.351823717355728,-0.924652755260468,\n0.270599722862244,0.653285622596741,-0.707102358341217,0.270599722862244,0.653285622596741,-0.707102358341217,0.145730510354042,0.351823717355728,-0.924652755260468,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,-8.65250569859199e-007,0.707113921642303,-0.707099616527557,-8.65250569859199e-007,0.707113921642303,-0.707099616527557,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,-0.145731240510941,0.351825833320618,-0.924651801586151,-0.270600706338882,0.653288960456848,-0.707098841667175,-0.270600706338882,0.653288960456848,-0.707098841667175,-0.145731240510941,0.351825833320618,-0.924651801586151,-0.269273996353149,0.269273847341537,-0.924652934074402,-0.500002384185791,0.500002264976501,-0.707103490829468,-0.500002384185791,0.500002264976501,-0.707103490829468,-0.269273996353149,0.269273847341537,-0.924652934074402,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.653282523155212,0.270598083734512,-0.707105815410614,-0.653282523155212,0.270598083734512,-0.707105815410614,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.707108438014984,-4.28863302204263e-007,-0.707105159759521,-0.707108438014984,-4.28863302204263e-007,-0.707105159759521,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.351821571588516,-0.145729005336761,-0.924653768539429,-0.653282105922699,-0.270597249269485,-0.707106530666351,-0.653282105922699,-0.270597249269485,-0.707106530666351,-0.351821571588516,-0.145729005336761,-0.924653768539429,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.499998718500137,-0.499999731779099,-0.707107841968536,-0.499998718500137,-0.499999731779099,-0.707107841968536,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.145729050040245,-0.351821690797806,-0.924653708934784,-0.270597517490387,-0.653282105922699,-0.707106411457062,-0.270597517490387,-0.653282105922699,-0.707106411457062,-0.145729050040245,-0.351821690797806,-0.924653708934784,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,\n3.76195913531774e-007,-0.707108318805695,-0.707105219364166,3.76195913531774e-007,-0.707108318805695,-0.707105219364166,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,0.145730197429657,-0.351823180913925,-0.924652993679047,0.270599752664566,-0.653284311294556,-0.707103490829468,0.270599752664566,-0.653284311294556,-0.707103490829468,0.145730197429657,-0.351823180913925,-0.924652993679047,0.269273817539215,-0.269274026155472,-0.924652934074402,0.500002145767212,-0.500002562999725,-0.707103431224823,0.500002145767212,-0.500002562999725,-0.707103431224823,0.269273817539215,-0.269274026155472,-0.924652934074402,0.351822197437286,-0.145729750394821,-0.92465341091156,0.653282999992371,-0.270599007606506,-0.707105040550232,0.653282999992371,-0.270599007606506,-0.707105040550232,0.351822197437286,-0.145729750394821,-0.92465341091156,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.707107186317444,1.42954419857233e-007,-0.707106351852417,2.76187535064309e-008,-1.53088933529943e-007,-1,0.351822137832642,0.145729631185532,-0.924653470516205,0.380808919668198,7.69873338413163e-008,-0.924653768539429,2.76187535064309e-008,-1.53088933529943e-007,-1,0.269274324178696,0.269274234771729,-0.924652755260468,0.351822137832642,0.145729631185532,-0.924653470516205,2.76187535064309e-008,-1.53088933529943e-007,-1,0.145730510354042,0.351823717355728,-0.924652755260468,0.269274324178696,0.269274234771729,-0.924652755260468,2.76187535064309e-008,-1.53088933529943e-007,-1,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,0.145730510354042,0.351823717355728,-0.924652755260468,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.145731240510941,0.351825833320618,-0.924651801586151,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.269273996353149,0.269273847341537,-0.924652934074402,-0.145731240510941,0.351825833320618,-0.924651801586151,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.269273996353149,0.269273847341537,-0.924652934074402,\n2.76187535064309e-008,-1.53088933529943e-007,-1,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.351821750402451,0.145729392766953,-0.924653649330139,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.351821571588516,-0.145729005336761,-0.924653768539429,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.351821571588516,-0.145729005336761,-0.924653768539429,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.145729050040245,-0.351821690797806,-0.924653708934784,-0.269271582365036,-0.269272118806839,-0.924654185771942,2.76187535064309e-008,-1.53088933529943e-007,-1,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,-0.145729050040245,-0.351821690797806,-0.924653708934784,2.76187535064309e-008,-1.53088933529943e-007,-1,0.145730197429657,-0.351823180913925,-0.924652993679047,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,2.76187535064309e-008,-1.53088933529943e-007,-1,0.269273817539215,-0.269274026155472,-0.924652934074402,0.145730197429657,-0.351823180913925,-0.924652993679047,2.76187535064309e-008,-1.53088933529943e-007,-1,0.351822197437286,-0.145729750394821,-0.92465341091156,0.269273817539215,-0.269274026155472,-0.924652934074402,2.76187535064309e-008,-1.53088933529943e-007,-1,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.351822197437286,-0.145729750394821,-0.92465341091156,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,-0.16665855050087,-0.398711144924164,-0.901806175708771,-0.166320815682411,-0.355819970369339,-0.919635534286499,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,-0.625531196594238,-0.119070827960968,-0.771059572696686,-0.583353996276855,0.174302786588669,-0.793294787406921,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.700383901596069,-0.324826598167419,-0.635570704936981,-0.626655638217926,-0.314949661493301,-0.712817966938019,-0.481388568878174,-0.302958816289902,-0.82248467206955,\n-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.00141415814869106,-0.878426611423492,0.477875143289566,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.166118785738945,-0.764228582382202,-0.623184740543365,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,-0.442375749349594,0.0474703647196293,-0.895572602748871,-0.583353996276855,0.174302786588669,-0.793294787406921,-0.283784359693527,0.524189174175262,-0.802927255630493,-0.322878926992416,0.229583457112312,-0.918172419071198,0.343204021453857,-0.33707195520401,-0.876694619655609,-0.193181023001671,-0.0350730493664742,-0.980536043643951,-0.148570522665977,-0.138561144471169,-0.979146361351013,0.179372578859329,-0.472685307264328,-0.862782776355743,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.193181023001671,-0.0350730493664742,-0.980536043643951,0.465988546609879,-0.185971200466156,-0.865025639533997,0.519467711448669,0.00208272109739482,-0.854487538337708,-0.00083814247045666,0.651532232761383,-0.758620500564575,-0.000496746390126646,0.380419790744781,-0.924813807010651,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.283784359693527,0.524189174175262,-0.802927255630493,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.134015202522278,-0.116930104792118,-0.984056532382965,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,\n-0.166320815682411,-0.355819970369339,-0.919635534286499,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,-0.127862602472305,-0.339489370584488,-0.931878805160522,0.188191697001457,0.451240569353104,-0.872333526611328,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,0.892129957675934,0.00357697787694633,-0.451764702796936,0.519467711448669,0.00208272109739482,-0.854487538337708,0.465988546609879,-0.185971200466156,-0.865025639533997,0.810467839241028,-0.323448747396469,-0.488387942314148,0.810467839241028,-0.323448747396469,-0.488387942314148,0.465988546609879,-0.185971200466156,-0.865025639533997,0.343204021453857,-0.33707195520401,-0.876694619655609,0.604493975639343,-0.595244467258453,-0.529406309127808,0.604493975639343,-0.595244467258453,-0.529406309127808,0.343204021453857,-0.33707195520401,-0.876694619655609,0.179372578859329,-0.472685307264328,-0.862782776355743,0.323608160018921,-0.778499960899353,-0.537787616252899,0.179372578859329,-0.472685307264328,-0.862782776355743,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.000123229197924957,-0.83578085899353,-0.549063146114349,0.323608160018921,-0.778499960899353,-0.537787616252899,-0.000125430116895586,0.848767280578613,-0.528766572475433,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,0.188191697001457,0.451240569353104,-0.872333526611328,0.329959392547607,0.791166961193085,-0.514957904815674,0.329959392547607,0.791166961193085,-0.514957904815674,0.188191697001457,0.451240569353104,-0.872333526611328,0.357724249362946,0.356190264225006,-0.863227546215057,0.620680093765259,0.618018448352814,-0.482503294944763,0.620680093765259,0.618018448352814,-0.482503294944763,0.357724249362946,0.356190264225006,-0.863227546215057,0.474322229623795,0.197919875383377,-0.857814729213715,0.817646563053131,0.341178327798843,-0.463736414909363,0.817646563053131,0.341178327798843,-0.463736414909363,0.474322229623795,0.197919875383377,-0.857814729213715,0.519467711448669,0.00208272109739482,-0.854487538337708,0.892129957675934,0.00357697787694633,-0.451764702796936,\n-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.16665855050087,-0.398711144924164,-0.901806175708771,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.193181023001671,-0.0350730493664742,-0.980536043643951,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.626655638217926,-0.314949661493301,-0.712817966938019,-0.625531196594238,-0.119070827960968,-0.771059572696686,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.700383901596069,-0.324826598167419,-0.635570704936981,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.442375749349594,0.0474703647196293,-0.895572602748871,-0.166320815682411,-0.355819970369339,-0.919635534286499,-0.16665855050087,-0.398711144924164,-0.901806175708771,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.19164302945137,-0.11858031898737,-0.974274933338165,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.19164302945137,-0.11858031898737,-0.974274933338165,\n-0.127862602472305,-0.339489370584488,-0.931878805160522,-0.322878926992416,0.229583457112312,-0.918172419071198,-0.134015202522278,-0.116930104792118,-0.984056532382965,-0.166320815682411,-0.355819970369339,-0.919635534286499,-0.442375749349594,0.0474703647196293,-0.895572602748871,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.134015202522278,-0.116930104792118,-0.984056532382965,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.000496746390126646,0.380419790744781,-0.924813807010651,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.193181023001671,-0.0350730493664742,-0.980536043643951,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.166118785738945,-0.764228582382202,-0.623184740543365,-0.127862602472305,-0.339489370584488,-0.931878805160522,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,0.357724249362946,0.356190264225006,-0.863227546215057,0.188191697001457,0.451240569353104,-0.872333526611328,-0.127862602472305,-0.339489370584488,-0.931878805160522,-0.19164302945137,-0.11858031898737,-0.974274933338165,-0.289463877677917,-0.0333973616361618,-0.956606149673462,0.519467711448669,0.00208272109739482,-0.854487538337708,0.474322229623795,0.197919875383377,-0.857814729213715,-0.19164302945137,-0.11858031898737,-0.974274933338165,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.000613691401667893,-0.000187244397238828,0.999999821186066,-0.0012283253017813,0.00826878752559423,0.999965071678162,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.000613691401667893,-0.000187244397238828,0.999999821186066,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.720038771629334,-0.514539837837219,0.465610325336456,\n-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.00141415814869106,-0.878426611423492,0.477875143289566,0.166359573602676,-0.3556267619133,-0.919703304767609,0.166693791747093,-0.398688644170761,-0.901809573173523,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,0.623893320560455,-0.135710507631302,-0.769636154174805,0.472712248563766,-0.247125968337059,-0.845855712890625,0.441408336162567,-0.158523812890053,-0.883192420005798,0.581144511699677,0.173393562436104,-0.795113682746887,0.697533905506134,-0.312777817249298,-0.644683241844177,0.536963045597076,-0.257282644510269,-0.803415417671204,0.480526119470596,-0.309671342372894,-0.820486605167389,0.624607563018799,-0.328015089035034,-0.70871114730835,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.642595112323761,-0.116949319839478,-0.757228076457977,0.980213820934296,-0.158584430813789,-0.118456050753593,0.893694162368774,-0.106106624007225,0.435949683189392,0.167570888996124,-0.767371296882629,-0.618919491767883,0.351649820804596,-0.93211555480957,-0.08661999553442,-0.00141415814869106,-0.878426611423492,0.477875143289566,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,0.442176729440689,0.0476577542722225,-0.895660936832428,0.322174906730652,0.228472575545311,-0.918696701526642,0.282752156257629,0.52211320400238,-0.804642200469971,0.581144511699677,0.173393562436104,-0.795113682746887,-0.345937311649323,-0.339615941047668,-0.874636113643646,-0.180230349302292,-0.474406808614731,-0.8616583943367,0.14857217669487,-0.138560771942139,-0.979146182537079,0.193183556199074,-0.0350735858082771,-0.980535566806793,-0.470687717199326,-0.187841206789017,-0.86207240819931,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.289462924003601,-0.0333970598876476,-0.956606388092041,-0.525108873844147,0.00211814977228642,-0.851032376289368,\n-0.00083814247045666,0.651532232761383,-0.758620500564575,0.282752156257629,0.52211320400238,-0.804642200469971,0.130474492907524,0.346959501504898,-0.928760170936584,-0.000496746390126646,0.380419790744781,-0.924813807010651,0.716144323348999,-0.513313174247742,0.472913175821304,0.61796361207962,-0.383677423000336,-0.686230778694153,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.893694162368774,-0.106106624007225,0.435949683189392,0.351649820804596,-0.93211555480957,-0.08661999553442,0.399607270956039,-0.656506419181824,-0.639776051044464,0.61796361207962,-0.383677423000336,-0.686230778694153,0.716144323348999,-0.513313174247742,0.472913175821304,0.133698701858521,-0.117022633552551,-0.984088599681854,0.166359573602676,-0.3556267619133,-0.919703304767609,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.189093619585037,0.45308318734169,-0.87118262052536,0.12786553800106,-0.339494079351425,-0.931876718997955,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,-0.898149847984314,0.0036230287514627,-0.439674586057663,-0.815859735012054,-0.325591415166855,-0.477873504161835,-0.470687717199326,-0.187841206789017,-0.86207240819931,-0.525108873844147,0.00211814977228642,-0.851032376289368,-0.815859735012054,-0.325591415166855,-0.477873504161835,-0.607874691486359,-0.598318219184875,-0.522018849849701,-0.345937311649323,-0.339615941047668,-0.874636113643646,-0.470687717199326,-0.187841206789017,-0.86207240819931,-0.607874691486359,-0.598318219184875,-0.522018849849701,-0.324792563915253,-0.780647575855255,-0.533946752548218,-0.180230349302292,-0.474406808614731,-0.8616583943367,-0.345937311649323,-0.339615941047668,-0.874636113643646,-0.000123229197924957,-0.83578085899353,-0.549063146114349,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.180230349302292,-0.474406808614731,-0.8616583943367,-0.324792563915253,-0.780647575855255,-0.533946752548218,-0.000125430116895586,0.848767280578613,-0.528766572475433,\n-0.331108927726746,0.793362975120544,-0.510824918746948,-0.189093619585037,0.45308318734169,-0.87118262052536,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,-0.331108927726746,0.793362975120544,-0.510824918746948,-0.623912632465363,0.621031820774078,-0.474396973848343,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.189093619585037,0.45308318734169,-0.87118262052536,-0.623912632465363,0.621031820774078,-0.474396973848343,-0.822878837585449,0.343268781900406,-0.452810108661652,-0.479103714227676,0.199860870838165,-0.854701817035675,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.822878837585449,0.343268781900406,-0.452810108661652,-0.898149847984314,0.0036230287514627,-0.439674586057663,-0.525108873844147,0.00211814977228642,-0.851032376289368,-0.479103714227676,0.199860870838165,-0.854701817035675,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,0.166693791747093,-0.398688644170761,-0.901809573173523,0.197933539748192,-0.385259449481964,-0.901330947875977,0.0890793353319168,-0.28693476319313,-0.953799426555634,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.14857217669487,-0.138560771942139,-0.979146182537079,0.536963045597076,-0.257282644510269,-0.803415417671204,0.642595112323761,-0.116949319839478,-0.757228076457977,0.624607563018799,-0.328015089035034,-0.70871114730835,0.480526119470596,-0.309671342372894,-0.820486605167389,0.472712248563766,-0.247125968337059,-0.845855712890625,0.623893320560455,-0.135710507631302,-0.769636154174805,0.642595112323761,-0.116949319839478,-0.757228076457977,0.536963045597076,-0.257282644510269,-0.803415417671204,0.697533905506134,-0.312777817249298,-0.644683241844177,0.980213820934296,-0.158584430813789,-0.118456050753593,0.472712248563766,-0.247125968337059,-0.845855712890625,0.255537897348404,-0.293244242668152,-0.921253621578217,0.197933539748192,-0.385259449481964,-0.901330947875977,0.441408336162567,-0.158523812890053,-0.883192420005798,0.480526119470596,-0.309671342372894,-0.820486605167389,\n0.536963045597076,-0.257282644510269,-0.803415417671204,0.14857217669487,-0.138560771942139,-0.979146182537079,0.255537897348404,-0.293244242668152,-0.921253621578217,0.442176729440689,0.0476577542722225,-0.895660936832428,0.441408336162567,-0.158523812890053,-0.883192420005798,0.166693791747093,-0.398688644170761,-0.901809573173523,0.166359573602676,-0.3556267619133,-0.919703304767609,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.61796361207962,-0.383677423000336,-0.686230778694153,0.191643193364143,-0.11858157813549,-0.974274754524231,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.191643193364143,-0.11858157813549,-0.974274754524231,0.61796361207962,-0.383677423000336,-0.686230778694153,0.399607270956039,-0.656506419181824,-0.639776051044464,0.12786553800106,-0.339494079351425,-0.931876718997955,0.322174906730652,0.228472575545311,-0.918696701526642,0.442176729440689,0.0476577542722225,-0.895660936832428,0.166359573602676,-0.3556267619133,-0.919703304767609,0.133698701858521,-0.117022633552551,-0.984088599681854,0.130474492907524,0.346959501504898,-0.928760170936584,0.133698701858521,-0.117022633552551,-0.984088599681854,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.000496746390126646,0.380419790744781,-0.924813807010651,0.642595112323761,-0.116949319839478,-0.757228076457977,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.167570888996124,-0.767371296882629,-0.618919491767883,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,0.12786553800106,-0.339494079351425,-0.931876718997955,0.12786553800106,-0.339494079351425,-0.931876718997955,-0.189093619585037,0.45308318734169,-0.87118262052536,-0.360539704561234,0.358874976634979,-0.860941290855408,0.191643193364143,-0.11858157813549,-0.974274754524231,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.191643193364143,-0.11858157813549,-0.974274754524231,\n-0.479103714227676,0.199860870838165,-0.854701817035675,-0.525108873844147,0.00211814977228642,-0.851032376289368,0.14857217669487,-0.138560771942139,-0.979146182537079,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,0.0890793353319168,-0.28693476319313,-0.953799426555634,-0.000613691401667893,-0.000187244397238828,0.999999821186066,0.893694162368774,-0.106106624007225,0.435949683189392,0.980213820934296,-0.158584430813789,-0.118456050753593,-0.0012283253017813,0.00826878752559423,0.999965071678162,0.716144323348999,-0.513313174247742,0.472913175821304,0.893694162368774,-0.106106624007225,0.435949683189392,-0.000613691401667893,-0.000187244397238828,0.999999821186066,-0.000991592183709145,-0.117668882012367,0.993052363395691,0.351649820804596,-0.93211555480957,-0.08661999553442,0.716144323348999,-0.513313174247742,0.472913175821304,-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.00141415814869106,-0.878426611423492,0.477875143289566,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.442375749349594,0.0474703647196293,-0.895572602748871,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.583353996276855,0.174302786588669,-0.793294787406921,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.16665855050087,-0.398711144924164,-0.901806175708771,-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.322878926992416,0.229583457112312,-0.918172419071198,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.134015202522278,-0.116930104792118,-0.984056532382965,\n-0.127862602472305,-0.339489370584488,-0.931878805160522,-0.166118785738945,-0.764228582382202,-0.623184740543365,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.283784359693527,0.524189174175262,-0.802927255630493,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.322878926992416,0.229583457112312,-0.918172419071198,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.166118785738945,-0.764228582382202,-0.623184740543365,0.465988546609879,-0.185971200466156,-0.865025639533997,-0.193181023001671,-0.0350730493664742,-0.980536043643951,0.343204021453857,-0.33707195520401,-0.876694619655609,0.357724249362946,0.356190264225006,-0.863227546215057,-0.19164302945137,-0.11858031898737,-0.974274933338165,0.474322229623795,0.197919875383377,-0.857814729213715,0.179372578859329,-0.472685307264328,-0.862782776355743,-0.148570522665977,-0.138561144471169,-0.979146361351013,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,0.255537897348404,-0.293244242668152,-0.921253621578217,0.14857217669487,-0.138560771942139,-0.979146182537079,0.0890793353319168,-0.28693476319313,-0.953799426555634,0.442176729440689,0.0476577542722225,-0.895660936832428,0.581144511699677,0.173393562436104,-0.795113682746887,0.441408336162567,-0.158523812890053,-0.883192420005798,0.255537897348404,-0.293244242668152,-0.921253621578217,0.0890793353319168,-0.28693476319313,-0.953799426555634,0.197933539748192,-0.385259449481964,-0.901330947875977,0.480526119470596,-0.309671342372894,-0.820486605167389,0.255537897348404,-0.293244242668152,-0.921253621578217,0.472712248563766,-0.247125968337059,-0.845855712890625,0.166693791747093,-0.398688644170761,-0.901809573173523,0.441408336162567,-0.158523812890053,-0.883192420005798,0.197933539748192,-0.385259449481964,-0.901330947875977,0.322174906730652,0.228472575545311,-0.918696701526642,0.133698701858521,-0.117022633552551,-0.984088599681854,0.130474492907524,0.346959501504898,-0.928760170936584,0.12786553800106,-0.339494079351425,-0.931876718997955,\n0.399607270956039,-0.656506419181824,-0.639776051044464,0.167570888996124,-0.767371296882629,-0.618919491767883,0.282752156257629,0.52211320400238,-0.804642200469971,0.322174906730652,0.228472575545311,-0.918696701526642,0.130474492907524,0.346959501504898,-0.928760170936584,0.167570888996124,-0.767371296882629,-0.618919491767883,0.399607270956039,-0.656506419181824,-0.639776051044464,0.351649820804596,-0.93211555480957,-0.08661999553442,-0.470687717199326,-0.187841206789017,-0.86207240819931,-0.345937311649323,-0.339615941047668,-0.874636113643646,0.193183556199074,-0.0350735858082771,-0.980535566806793,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.479103714227676,0.199860870838165,-0.854701817035675,0.191643193364143,-0.11858157813549,-0.974274754524231,-0.180230349302292,-0.474406808614731,-0.8616583943367,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,0.14857217669487,-0.138560771942139,-0.979146182537079,-0.646716237068176,0.744295537471771,0.166680246591568,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.391309916973114,0.896766066551209,0.206608697772026,-0.25070720911026,0.613901972770691,0.748512029647827,-0.556003272533417,0.628243684768677,0.544215261936188,-0.497222453355789,0.684417903423309,0.533237218856812,-0.142466872930527,0.844133794307709,0.516857206821442,-0.212957128882408,0.63821679353714,0.739816606044769,0.414917647838593,0.779010057449341,0.470092207193375,0.181902796030045,0.957158207893372,0.225298702716827,-0.301660984754562,0.907010614871979,0.293823689222336,0.414917647838593,0.779010057449341,0.470092207193375,-0.212957128882408,0.63821679353714,0.739816606044769,-0.18118342757225,0.484352648258209,0.855906009674072,0.203874498605728,0.632674932479858,0.747099459171295,0.251353085041046,0.650286138057709,0.716902732849121,-0.235205337405205,0.51457417011261,0.824555516242981,-0.263717442750931,0.775425553321838,0.573731958866119,0.199702888727188,0.793615162372589,0.574711859226227,0.0745275393128395,0.431530833244324,0.899014353752136,\n-0.421310722827911,0.492505818605423,0.761534810066223,-0.426660984754562,0.140150994062424,0.893486499786377,0.0708804950118065,0.122446231544018,0.989940881729126,-0.317988157272339,0.931548714637756,0.176353335380554,-0.391309916973114,0.896766066551209,0.206608697772026,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.29035672545433,0.911720991134644,0.290616303682327,-0.269276291131973,0.797245502471924,0.540268361568451,-0.218010768294334,0.827573180198669,0.517294824123383,-0.435499727725983,0.707530975341797,0.556542754173279,-0.261273354291916,0.592454433441162,0.762059092521667,-0.761694371700287,0.389483571052551,0.517807185649872,-0.435499727725983,0.707530975341797,0.556542754173279,-0.423358976840973,0.530543863773346,0.734363913536072,0.0901670306921005,0.507265865802765,0.8570596575737,-0.117755182087421,0.405977427959442,0.906264901161194,-0.235205337405205,0.51457417011261,0.824555516242981,0.251353085041046,0.650286138057709,0.716902732849121,0.0708804950118065,0.122446231544018,0.989940881729126,-0.426660984754562,0.140150994062424,0.893486499786377,-0.384194701910019,0.144494697451591,0.911874830722809,0.0692365244030952,0.127935454249382,0.989362835884094,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.848471641540527,0.145880371332169,0.508738458156586,-0.868030965328217,0.305244266986847,0.391596972942352,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.786082983016968,-0.551289200782776,-0.279560059309006,0.0692365244030952,0.127935454249382,0.989362835884094,-0.384194701910019,0.144494697451591,0.911874830722809,-0.134134471416473,0.255289256572723,0.957515180110931,0.0673762187361717,0.208747074007988,0.975646018981934,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.964910328388214,-0.00325190788134933,0.262559533119202,\n-0.95565664768219,0.128923356533051,0.264762312173843,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.847110569477081,0.52096164226532,0.104893282055855,-0.322806298732758,0.932436168193817,-0.162354081869125,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.342734336853027,-0.423973858356476,-0.838319361209869,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.165860414505005,0.132470846176147,0.977211236953735,-0.183761566877365,0.212806239724159,0.959658861160278,0.0114754280075431,0.247809365391731,0.968740820884705,0.000295055127935484,0.143534883856773,0.98964524269104,0.0114754280075431,0.247809365391731,0.968740820884705,-0.183761566877365,0.212806239724159,0.959658861160278,-0.122193120419979,0.122121326625347,0.984964549541473,\n-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.342734336853027,-0.423973858356476,-0.838319361209869,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.342734336853027,-0.423973858356476,-0.838319361209869,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.914080381393433,-0.244995877146721,0.323162585496902,\n-0.939242422580719,-0.304669201374054,0.158114925026894,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.952732801437378,-0.159682244062424,0.258460462093353,-0.264800101518631,0.156511932611465,0.951517164707184,-0.352729320526123,0.114327535033226,0.92871481180191,-0.184806242585182,0.04760567471385,0.981621265411377,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.962320387363434,-0.205677136778831,-0.177866160869598,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.952732801437378,-0.159682244062424,0.258460462093353,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.952732801437378,-0.159682244062424,0.258460462093353,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.962320387363434,-0.205677136778831,-0.177866160869598,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.977081477642059,-0.212798669934273,-0.00533603969961405,\n-0.984755873680115,-0.122865788638592,0.123125486075878,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.74617874622345,-0.66409957408905,0.046787291765213,-0.859505951404572,-0.505740880966187,0.0739976838231087,-0.859505951404572,-0.505740880966187,0.0739976838231087,-0.74617874622345,-0.66409957408905,0.046787291765213,-0.711586713790894,-0.664516925811768,0.228170141577721,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.711586713790894,-0.664516925811768,0.228170141577721,-0.550154626369476,-0.73190438747406,0.402052044868469,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.381237626075745,0.038385421037674,0.923679828643799,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.726840019226074,-0.113997332751751,0.677280008792877,\n-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.564329564571381,0.12249568849802,0.816411018371582,-0.706152856349945,0.175898715853691,0.685862839221954,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.564329564571381,0.12249568849802,0.816411018371582,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.381237626075745,0.038385421037674,0.923679828643799,-0.352729320526123,0.114327535033226,0.92871481180191,-0.381237626075745,0.038385421037674,0.923679828643799,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.492890477180481,0.0867519974708557,0.865755796432495,-0.428126484155655,0.265849471092224,0.863731324672699,-0.600559055805206,0.384851962327957,0.70086932182312,-0.706152856349945,0.175898715853691,0.685862839221954,-0.564329564571381,0.12249568849802,0.816411018371582,-0.165860414505005,0.132470846176147,0.977211236953735,-0.28684601187706,0.185986965894699,0.939749002456665,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.564329564571381,0.12249568849802,0.816411018371582,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.28684601187706,0.185986965894699,0.939749002456665,-0.428126484155655,0.265849471092224,0.863731324672699,-0.264800101518631,0.156511932611465,0.951517164707184,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.381237626075745,0.038385421037674,0.923679828643799,-0.352729320526123,0.114327535033226,0.92871481180191,-0.183761566877365,0.212806239724159,0.959658861160278,-0.165860414505005,0.132470846176147,0.977211236953735,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.264800101518631,0.156511932611465,0.951517164707184,-0.338261693716049,0.297003328800201,0.892954647541046,\n-0.28684601187706,0.185986965894699,0.939749002456665,-0.130102187395096,0.286587357521057,0.949179172515869,-0.153394818305969,0.361563980579376,0.91964203119278,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.130102187395096,0.286587357521057,0.949179172515869,-0.28684601187706,0.185986965894699,0.939749002456665,-0.165860414505005,0.132470846176147,0.977211236953735,-0.426482230424881,0.398722440004349,0.811870276927948,-0.52557498216629,0.553365111351013,0.646187245845795,-0.600559055805206,0.384851962327957,0.70086932182312,-0.428126484155655,0.265849471092224,0.863731324672699,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.374457865953445,-0.757000803947449,-0.535472750663757,-0.347785919904709,0.133236810564995,0.928058683872223,-0.747875332832336,-0.0330392643809319,0.663016498088837,0.169686332345009,0.978208720684052,-0.119642592966557,-0.0425885356962681,0.988019645214081,-0.148335143923759,-0.182774692773819,0.975853502750397,0.119596734642982,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.421310722827911,0.492505818605423,0.761534810066223,-0.654110372066498,0.557340681552887,0.511381506919861,-0.627907395362854,0.28337550163269,0.724865913391113,-0.426660984754562,0.140150994062424,0.893486499786377,-0.426660984754562,0.140150994062424,0.893486499786377,-0.627907395362854,0.28337550163269,0.724865913391113,-0.509144961833954,0.274927198886871,0.815589666366577,-0.384194701910019,0.144494697451591,0.911874830722809,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.122193120419979,0.122121326625347,0.984964549541473,-0.183761566877365,0.212806239724159,0.959658861160278,-0.264800101518631,0.156511932611465,0.951517164707184,-0.275664061307907,0.0508917570114136,0.959905922412872,-0.492890477180481,0.0867519974708557,0.865755796432495,-0.709277749061584,0.0713812634348869,0.701305747032166,\n-0.527523517608643,-0.0868940651416779,0.845084846019745,0.218648448586464,0.688608109951019,-0.691383898258209,0.169686332345009,0.978208720684052,-0.119642592966557,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.190823212265968,0.973383665084839,0.126928135752678,0.0462776906788349,0.971960961818695,0.23054338991642,0.370400339365005,0.925967752933502,-0.0733987167477608,0.315422087907791,0.495868057012558,-0.809088230133057,-0.0405596829950809,0.531582415103912,-0.846034944057465,0.254257917404175,-0.212425783276558,0.943519055843353,0.444850295782089,-0.346757113933563,0.825752794742584,0.271333545446396,-0.434894740581512,0.858629524707794,0.142127305269241,-0.253888607025146,0.956734240055084,0.228504449129105,-0.206080406904221,0.951481223106384,0.15039549767971,-0.209228366613388,0.966232180595398,0.3562351167202,-0.323089301586151,0.876761019229889,0.419803202152252,-0.320524513721466,0.84913444519043,0.15039549767971,-0.209228366613388,0.966232180595398,-0.0830294638872147,-0.341880321502686,0.93606835603714,0.10191734880209,-0.459647685289383,0.882234036922455,0.3562351167202,-0.323089301586151,0.876761019229889,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.792521595954895,-0.308754324913025,0.525909006595612,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.864151895046234,-0.414072304964066,-0.285981833934784,0.142127305269241,-0.253888607025146,0.956734240055084,0.271333545446396,-0.434894740581512,0.858629524707794,0.000465182994958013,-0.480507552623749,0.876990437507629,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.656892538070679,-0.430070400238037,-0.619299292564392,\n-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.490000605583191,0.777733385562897,0.393738687038422,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.868030965328217,0.305244266986847,0.391596972942352,-0.903881251811981,0.372275590896606,0.21073579788208,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.988731265068054,0.125658646225929,0.0813654363155365,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.962320387363434,-0.205677136778831,-0.177866160869598,\n-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.977081477642059,-0.212798669934273,-0.00533603969961405,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.962320387363434,-0.205677136778831,-0.177866160869598,0.315422087907791,0.495868057012558,-0.809088230133057,0.218648448586464,0.688608109951019,-0.691383898258209,-0.0404882803559303,0.532536089420319,-0.845438301563263,-0.0405596829950809,0.531582415103912,-0.846034944057465,0.370400339365005,0.925967752933502,-0.0733987167477608,0.169686332345009,0.978208720684052,-0.119642592966557,0.218648448586464,0.688608109951019,-0.691383898258209,0.315422087907791,0.495868057012558,-0.809088230133057,-0.0681053325533867,-0.345358580350876,-0.935996353626251,-0.140057414770126,-0.293910145759583,-0.945516109466553,-0.0450695939362049,-0.253388822078705,-0.966314017772675,0.00452618766576052,-0.317399501800537,-0.948281109333038,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.144822835922241,-0.365306288003922,-0.919552981853485,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.253343611955643,0.265877068042755,-0.930121719837189,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.350932270288467,0.749857068061829,-0.56085729598999,0.122461646795273,0.908201992511749,0.400215208530426,0.227538049221039,0.872712194919586,0.431971967220306,-0.355782032012939,0.924564778804779,-0.136378616094589,-0.165674656629562,0.933009803295136,-0.319444298744202,-0.585451006889343,0.667790055274963,-0.459677666425705,-0.294875234365463,0.607182502746582,-0.737819731235504,\n-0.331786870956421,0.242688208818436,-0.911602914333344,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.946829199790955,0.314822763204575,0.066340483725071,-0.968474745750427,0.246992528438568,-0.0324244759976864,0.203874498605728,0.632674932479858,0.747099459171295,-0.18118342757225,0.484352648258209,0.855906009674072,-0.153394818305969,0.361563980579376,0.91964203119278,0.0901670306921005,0.507265865802765,0.8570596575737,0.0454900041222572,0.2624471783638,0.963873505592346,-0.134134471416473,0.255289256572723,0.957515180110931,-0.0718724653124809,0.221051037311554,0.972610294818878,0.0114754280075431,0.247809365391731,0.968740820884705,0.00928871519863606,-0.538456916809082,-0.842601835727692,0.120998434722424,-0.617575466632843,-0.777148604393005,0.0646116733551025,-0.592574059963226,-0.802920520305634,-0.00847726315259933,-0.531524419784546,-0.847000539302826,0.0363553054630756,-0.593656182289124,-0.803897142410278,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.00847726315259933,-0.531524419784546,-0.847000539302826,0.0646116733551025,-0.592574059963226,-0.802920520305634,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.729460597038269,0.376104354858398,-0.571343004703522,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.144822835922241,-0.365306288003922,-0.919552981853485,0.0942423716187477,-0.686610460281372,-0.72089147567749,0.120998434722424,-0.617575466632843,-0.777148604393005,0.00928871519863606,-0.538456916809082,-0.842601835727692,\n0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.217214897274971,-0.348953694105148,-0.911618888378143,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.217214897274971,-0.348953694105148,-0.911618888378143,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.140057414770126,-0.293910145759583,-0.945516109466553,-0.0681053325533867,-0.345358580350876,-0.935996353626251,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.144822835922241,-0.365306288003922,-0.919552981853485,0.490650862455368,0.719568371772766,0.49140927195549,0.51012510061264,0.705090045928955,0.492565125226974,-0.436571836471558,0.668562531471252,0.602020919322968,-0.528217673301697,0.774278223514557,0.348538845777512,0.51012510061264,0.705090045928955,0.492565125226974,0.576555967330933,0.629547953605652,0.520819187164307,-0.206960439682007,0.579236388206482,0.78844952583313,-0.436571836471558,0.668562531471252,0.602020919322968,-0.206960439682007,0.579236388206482,0.78844952583313,0.576555967330933,0.629547953605652,0.520819187164307,0.665259420871735,0.743798911571503,-0.0647542923688889,-0.210487872362137,0.845762014389038,0.490287095308304,-0.877903461456299,0.125808238983154,0.462014973163605,-0.553295969963074,0.315833359956741,0.770787119865417,-0.18118342757225,0.484352648258209,0.855906009674072,-0.212957128882408,0.63821679353714,0.739816606044769,\n-0.301660984754562,0.907010614871979,0.293823689222336,-0.720441699028015,0.626922428607941,0.296533405780792,-0.877903461456299,0.125808238983154,0.462014973163605,-0.212957128882408,0.63821679353714,0.739816606044769,-0.25070720911026,0.613901972770691,0.748512029647827,-0.142466872930527,0.844133794307709,0.516857206821442,0.421662032604218,0.906709790229797,0.00885869562625885,-0.112783953547478,0.903910756111145,0.412583559751511,-0.491390645503998,0.848508954048157,0.196386933326721,-0.317988157272339,0.931548714637756,0.176353335380554,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.423358976840973,0.530543863773346,0.734363913536072,-0.435499727725983,0.707530975341797,0.556542754173279,-0.218010768294334,0.827573180198669,0.517294824123383,-0.44881072640419,0.73288232088089,0.511324167251587,-0.134134471416473,0.255289256572723,0.957515180110931,-0.117755182087421,0.405977427959442,0.906264901161194,-0.130102187395096,0.286587357521057,0.949179172515869,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.153394818305969,0.361563980579376,0.91964203119278,-0.18118342757225,0.484352648258209,0.855906009674072,-0.553295969963074,0.315833359956741,0.770787119865417,-0.338261693716049,0.297003328800201,0.892954647541046,-0.130102187395096,0.286587357521057,0.949179172515869,-0.117755182087421,0.405977427959442,0.906264901161194,0.0901670306921005,0.507265865802765,0.8570596575737,-0.153394818305969,0.361563980579376,0.91964203119278,-0.553295969963074,0.315833359956741,0.770787119865417,-0.887027978897095,0.338621288537979,0.313874155282974,-0.554342925548553,0.567035973072052,0.609240651130676,-0.426482230424881,0.398722440004349,0.811870276927948,0.502047836780548,0.814261257648468,0.291421681642532,0.251353085041046,0.650286138057709,0.716902732849121,0.199702888727188,0.793615162372589,0.574711859226227,0.325284242630005,0.933813154697418,0.148940086364746,-0.235205337405205,0.51457417011261,0.824555516242981,-0.627907395362854,0.28337550163269,0.724865913391113,\n-0.654110372066498,0.557340681552887,0.511381506919861,-0.263717442750931,0.775425553321838,0.573731958866119,-0.509144961833954,0.274927198886871,0.815589666366577,-0.627907395362854,0.28337550163269,0.724865913391113,-0.235205337405205,0.51457417011261,0.824555516242981,-0.117755182087421,0.405977427959442,0.906264901161194,-0.355782032012939,0.924564778804779,-0.136378616094589,0.227538049221039,0.872712194919586,0.431971967220306,0.37678524851799,0.791645467281342,0.480968058109283,-0.468000799417496,0.87750107049942,0.10472384095192,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.598303258419037,0.575496375560761,0.557527720928192,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.734153270721436,0.469748914241791,0.490260034799576,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.253343611955643,0.265877068042755,-0.930121719837189,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.729460597038269,0.376104354858398,-0.571343004703522,-0.729460597038269,0.376104354858398,-0.571343004703522,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.695569396018982,-0.386790245771408,-0.605455636978149,\n-0.484570324420929,0.164985567331314,-0.85905259847641,-0.646716237068176,0.744295537471771,0.166680246591568,-0.497222453355789,0.684417903423309,0.533237218856812,-0.556003272533417,0.628243684768677,0.544215261936188,-0.717432975769043,0.661532044410706,0.218323826789856,-0.142466872930527,0.844133794307709,0.516857206821442,-0.497222453355789,0.684417903423309,0.533237218856812,-0.269276291131973,0.797245502471924,0.540268361568451,-0.29035672545433,0.911720991134644,0.290616303682327,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.585451006889343,0.667790055274963,-0.459677666425705,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.331786870956421,0.242688208818436,-0.911602914333344,0.0537682510912418,-0.324202865362167,0.944458305835724,0.0744736939668655,0.385000914335251,0.919906497001648,0.320094555616379,0.36778724193573,0.873081922531128,0.349699586629868,-0.343658298254013,0.871555626392365,0.349699586629868,-0.343658298254013,0.871555626392365,0.320094555616379,0.36778724193573,0.873081922531128,0.600283682346344,0.352708756923676,0.717813372612,0.696352481842041,-0.374734103679657,0.612100958824158,0.799351274967194,0.345198392868042,0.491808533668518,0.900613248348236,-0.362417966127396,0.239893689751625,0.696352481842041,-0.374734103679657,0.612100958824158,0.600283682346344,0.352708756923676,0.717813372612,-0.334018349647522,0.527555286884308,-0.7810999751091,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.334018349647522,0.527555286884308,-0.7810999751091,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.182968229055405,-0.224779292941093,-0.957077264785767,\n-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.182968229055405,-0.224779292941093,-0.957077264785767,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.140057414770126,-0.293910145759583,-0.945516109466553,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.0463922955095768,-0.412300795316696,-0.909865856170654,-0.0450695939362049,-0.253388822078705,-0.966314017772675,-0.253343611955643,0.265877068042755,-0.930121719837189,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.334018349647522,0.527555286884308,-0.7810999751091,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.253343611955643,0.265877068042755,-0.930121719837189,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.0387927554547787,0.555053651332855,-0.830909490585327,-0.294875234365463,0.607182502746582,-0.737819731235504,0.0643617510795593,0.973314523696899,0.220264464616776,0.0419506318867207,0.986220836639404,0.160026773810387,0.10627294331789,0.940789699554443,0.321901887655258,0.0643617510795593,0.973314523696899,0.220264464616776,-0.294875234365463,0.607182502746582,-0.737819731235504,-0.585451006889343,0.667790055274963,-0.459677666425705,0.190607443451881,0.891252994537354,0.41150563955307,0.10627294331789,0.940789699554443,0.321901887655258,-0.585451006889343,0.667790055274963,-0.459677666425705,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.717432975769043,0.661532044410706,0.218323826789856,-0.556003272533417,0.628243684768677,0.544215261936188,\n0.352456122636795,0.760582089424133,0.545242667198181,0.287199288606644,0.822433173656464,0.491039961576462,-0.556003272533417,0.628243684768677,0.544215261936188,-0.25070720911026,0.613901972770691,0.748512029647827,0.540614545345306,0.654488027095795,0.528565406799316,0.352456122636795,0.760582089424133,0.545242667198181,-0.25070720911026,0.613901972770691,0.748512029647827,-0.112783953547478,0.903910756111145,0.412583559751511,0.255933493375778,0.96283483505249,-0.0862965509295464,0.540614545345306,0.654488027095795,0.528565406799316,-0.353226035833359,0.839446485042572,0.412990301847458,0.875235259532928,0.374192535877228,0.306501507759094,0.799351274967194,0.345198392868042,0.491808533668518,-0.289120554924011,0.931183099746704,0.222052708268166,-0.293016821146011,0.709561467170715,0.640830397605896,-0.0522832758724689,0.619819462299347,0.783000826835632,0.916130423545837,0.393186241388321,0.0781642198562622,0.886379599571228,0.431774586439133,0.167038753628731,0.916130423545837,0.393186241388321,0.0781642198562622,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.00815227441489697,0.997119009494781,0.075413390994072,0.941828966140747,0.33263236284256,0.0481028594076633,0.0218184478580952,0.990070343017578,-0.13886933028698,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.320094555616379,0.36778724193573,0.873081922531128,0.0744736939668655,0.385000914335251,0.919906497001648,-0.0716726332902908,0.99415910243988,-0.0806891024112701,-0.193970412015915,0.978859066963196,0.0648878961801529,0.600283682346344,0.352708756923676,0.717813372612,0.320094555616379,0.36778724193573,0.873081922531128,-0.193970412015915,0.978859066963196,0.0648878961801529,-0.289120554924011,0.931183099746704,0.222052708268166,0.799351274967194,0.345198392868042,0.491808533668518,0.600283682346344,0.352708756923676,0.717813372612,-0.528217673301697,0.774278223514557,0.348538845777512,-0.436571836471558,0.668562531471252,0.602020919322968,-0.293016821146011,0.709561467170715,0.640830397605896,-0.353226035833359,0.839446485042572,0.412990301847458,\n-0.355782032012939,0.924564778804779,-0.136378616094589,-0.468000799417496,0.87750107049942,0.10472384095192,-0.289120554924011,0.931183099746704,0.222052708268166,-0.193970412015915,0.978859066963196,0.0648878961801529,-0.165674656629562,0.933009803295136,-0.319444298744202,-0.355782032012939,0.924564778804779,-0.136378616094589,-0.193970412015915,0.978859066963196,0.0648878961801529,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.00435609184205532,0.929633140563965,-0.368460655212402,-0.165674656629562,0.933009803295136,-0.319444298744202,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.0218184478580952,0.990070343017578,-0.13886933028698,0.122461646795273,0.908201992511749,0.400215208530426,0.0643617510795593,0.973314523696899,0.220264464616776,0.10627294331789,0.940789699554443,0.321901887655258,0.227538049221039,0.872712194919586,0.431971967220306,0.227538049221039,0.872712194919586,0.431971967220306,0.10627294331789,0.940789699554443,0.321901887655258,0.190607443451881,0.891252994537354,0.41150563955307,0.37678524851799,0.791645467281342,0.480968058109283,0.51012510061264,0.705090045928955,0.492565125226974,0.490650862455368,0.719568371772766,0.49140927195549,0.287199288606644,0.822433173656464,0.491039961576462,0.352456122636795,0.760582089424133,0.545242667198181,0.490650862455368,0.719568371772766,0.49140927195549,0.37678524851799,0.791645467281342,0.480968058109283,0.190607443451881,0.891252994537354,0.41150563955307,0.287199288606644,0.822433173656464,0.491039961576462,0.51012510061264,0.705090045928955,0.492565125226974,0.352456122636795,0.760582089424133,0.545242667198181,0.540614545345306,0.654488027095795,0.528565406799316,0.576555967330933,0.629547953605652,0.520819187164307,0.576555967330933,0.629547953605652,0.520819187164307,0.540614545345306,0.654488027095795,0.528565406799316,0.255933493375778,0.96283483505249,-0.0862965509295464,0.665259420871735,0.743798911571503,-0.0647542923688889,-0.210487872362137,0.845762014389038,0.490287095308304,0.665259420871735,0.743798911571503,-0.0647542923688889,\n0.255933493375778,0.96283483505249,-0.0862965509295464,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.206960439682007,0.579236388206482,0.78844952583313,-0.210487872362137,0.845762014389038,0.490287095308304,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.436571836471558,0.668562531471252,0.602020919322968,-0.206960439682007,0.579236388206482,0.78844952583313,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.293016821146011,0.709561467170715,0.640830397605896,0.875235259532928,0.374192535877228,0.306501507759094,0.953684031963348,-0.290462404489517,-0.0782197788357735,0.900613248348236,-0.362417966127396,0.239893689751625,0.799351274967194,0.345198392868042,0.491808533668518,0.908462584018707,-0.179232552647591,-0.377586334943771,0.886379599571228,0.431774586439133,0.167038753628731,0.916130423545837,0.393186241388321,0.0781642198562622,0.835292756557465,-0.124363616108894,-0.53555554151535,0.835292756557465,-0.124363616108894,-0.53555554151535,0.916130423545837,0.393186241388321,0.0781642198562622,0.941828966140747,0.33263236284256,0.0481028594076633,0.822044253349304,-0.128348395228386,-0.554770171642303,-0.29514667391777,0.569713115692139,0.767017185688019,0.489128321409225,0.658302128314972,0.572181582450867,0.443346619606018,0.824227571487427,0.352267920970917,-0.312749028205872,0.791433751583099,0.525186359882355,0.417629092931747,0.907208979129791,0.0505746938288212,-0.39387321472168,0.899492859840393,0.18914669752121,-0.312749028205872,0.791433751583099,0.525186359882355,0.443346619606018,0.824227571487427,0.352267920970917,0.333067029714584,0.789500892162323,-0.515514075756073,0.287465304136276,0.55735319852829,-0.778923034667969,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.535731971263886,0.751305878162384,-0.385396867990494,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.550671279430389,-0.263566613197327,-0.79201877117157,-0.556003570556641,0.531874418258667,-0.638724982738495,0.287465304136276,0.55735319852829,-0.778923034667969,\n-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.708229780197144,0.558061540126801,-0.432409435510635,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.529653549194336,0.324454098939896,-0.783707022666931,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.249898374080658,-0.566836893558502,-0.785013854503632,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.704255282878876,-0.136106103658676,0.696778059005737,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.21317532658577,0.371294349431992,0.903712749481201,0.203655928373337,0.636657357215881,0.743768572807312,0.489128321409225,0.658302128314972,0.572181582450867,-0.29514667391777,0.569713115692139,0.767017185688019,-0.848471641540527,0.145880371332169,0.508738458156586,-0.29514667391777,0.569713115692139,0.767017185688019,-0.312749028205872,0.791433751583099,0.525186359882355,-0.868030965328217,0.305244266986847,0.391596972942352,-0.868030965328217,0.305244266986847,0.391596972942352,-0.312749028205872,0.791433751583099,0.525186359882355,-0.39387321472168,0.899492859840393,0.18914669752121,-0.903881251811981,0.372275590896606,0.21073579788208,-0.968474745750427,0.246992528438568,-0.0324244759976864,\n-0.946829199790955,0.314822763204575,0.066340483725071,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.535731971263886,0.751305878162384,-0.385396867990494,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.550671279430389,-0.263566613197327,-0.79201877117157,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.990060329437256,-0.0573833771049976,-0.128404289484024,-0.720985412597656,0.250006407499313,0.646279215812683,-0.734153270721436,0.469748914241791,0.490260034799576,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.847110569477081,0.52096164226532,0.104893282055855,-0.792521595954895,-0.308754324913025,0.525909006595612,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.786082983016968,-0.551289200782776,-0.279560059309006,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.786082983016968,-0.551289200782776,-0.279560059309006,\n-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.33330100774765,0.819487571716309,0.466208755970001,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.322806298732758,0.932436168193817,-0.162354081869125,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.490000605583191,0.777733385562897,0.393738687038422,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.0175000000745058,0.99979567527771,0.010117226280272,0.130717054009438,0.879965662956238,0.456698477268219,-0.568449974060059,0.526249170303345,0.632397353649139,-0.490000605583191,0.777733385562897,0.393738687038422,0.130717054009438,0.879965662956238,0.456698477268219,0.133888319134712,0.6242516040802,0.769664764404297,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.792521595954895,-0.308754324913025,0.525909006595612,0.021379429847002,0.751378178596497,0.659525394439697,-0.261273354291916,0.592454433441162,0.762059092521667,-0.423358976840973,0.530543863773346,0.734363913536072,0.107353128492832,0.690562188625336,0.715261578559875,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.740590155124664,-0.532754123210907,-0.409510970115662,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.0371135324239731,0.851556301116943,-0.52294784784317,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.740590155124664,-0.532754123210907,-0.409510970115662,\n-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.988731265068054,0.125658646225929,0.0813654363155365,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.905584931373596,-0.288571357727051,0.310873836278915,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,0.00376493413932621,0.588400185108185,-0.808561086654663,0.0140912849456072,0.990858137607574,0.134169965982437,-0.491390645503998,0.848508954048157,0.196386933326721,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.024807246401906,0.980889618396759,-0.192977145314217,0.107353128492832,0.690562188625336,0.715261578559875,-0.423358976840973,0.530543863773346,0.734363913536072,-0.44881072640419,0.73288232088089,0.511324167251587,0.0436014086008072,0.880429863929749,0.472167462110519,0.0436014086008072,0.880429863929749,0.472167462110519,0.443346619606018,0.824227571487427,0.352267920970917,0.489128321409225,0.658302128314972,0.572181582450867,0.107353128492832,0.690562188625336,0.715261578559875,0.0140912849456072,0.990858137607574,0.134169965982437,0.417629092931747,0.907208979129791,0.0505746938288212,0.443346619606018,0.824227571487427,0.352267920970917,0.0436014086008072,0.880429863929749,0.472167462110519,-0.0371135324239731,0.851556301116943,-0.52294784784317,0.333067029714584,0.789500892162323,-0.515514075756073,0.373418390750885,0.898855626583099,-0.229384630918503,-0.024807246401906,0.980889618396759,-0.192977145314217,0.128099784255028,-0.105493560433388,-0.986134648323059,0.287465304136276,0.55735319852829,-0.778923034667969,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,\n-0.498561441898346,0.123794674873352,-0.857969343662262,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.249898374080658,-0.566836893558502,-0.785013854503632,0.022180886939168,-0.312959760427475,-0.949507355690002,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.740590155124664,-0.532754123210907,-0.409510970115662,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.905584931373596,-0.288571357727051,0.310873836278915,0.203655928373337,0.636657357215881,0.743768572807312,-0.0869597047567368,0.548145830631256,0.831849813461304,-0.261273354291916,0.592454433441162,0.762059092521667,0.021379429847002,0.751378178596497,0.659525394439697,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.550671279430389,-0.263566613197327,-0.79201877117157,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.321419239044189,-0.278268992900848,-0.905127644538879,\n-0.210184469819069,0.149185121059418,-0.966212332248688,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.661458969116211,-0.196823701262474,-0.723693668842316,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.210184469819069,0.149185121059418,-0.966212332248688,-0.321419239044189,-0.278268992900848,-0.905127644538879,0.022180886939168,-0.312959760427475,-0.949507355690002,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.529653549194336,0.324454098939896,-0.783707022666931,0.0630237460136414,0.258316248655319,-0.964002430438995,0.022180886939168,-0.312959760427475,-0.949507355690002,-0.362813800573349,0.452378064393997,0.814690291881561,-0.734153270721436,0.469748914241791,0.490260034799576,-0.720985412597656,0.250006407499313,0.646279215812683,-0.0333014093339443,0.336885303258896,0.940956592559814,0.0345219671726227,0.469873160123825,0.882058680057526,0.0388557612895966,0.393748223781586,0.918396770954132,-0.598303258419037,0.575496375560761,0.557527720928192,-0.362813800573349,0.452378064393997,0.814690291881561,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.598303258419037,0.575496375560761,0.557527720928192,0.0388557612895966,0.393748223781586,0.918396770954132,-0.0402880981564522,-0.602410852909088,0.797168791294098,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.598303258419037,0.575496375560761,0.557527720928192,-0.497222453355789,0.684417903423309,0.533237218856812,-0.646716237068176,0.744295537471771,0.166680246591568,-0.391309916973114,0.896766066551209,0.206608697772026,-0.269276291131973,0.797245502471924,0.540268361568451,-0.269276291131973,0.797245502471924,0.540268361568451,-0.391309916973114,0.896766066551209,0.206608697772026,-0.317988157272339,0.931548714637756,0.176353335380554,-0.218010768294334,0.827573180198669,0.517294824123383,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.805685818195343,-0.585970938205719,0.0866512581706047,\n-0.903881251811981,0.372275590896606,0.21073579788208,-0.946829199790955,0.314822763204575,0.066340483725071,0.37678524851799,0.791645467281342,0.480968058109283,0.490650862455368,0.719568371772766,0.49140927195549,-0.528217673301697,0.774278223514557,0.348538845777512,-0.468000799417496,0.87750107049942,0.10472384095192,-0.317988157272339,0.931548714637756,0.176353335380554,-0.491390645503998,0.848508954048157,0.196386933326721,-0.44881072640419,0.73288232088089,0.511324167251587,-0.218010768294334,0.827573180198669,0.517294824123383,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.646716237068176,0.744295537471771,0.166680246591568,-0.717432975769043,0.661532044410706,0.218323826789856,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.717432975769043,0.661532044410706,0.218323826789856,0.287199288606644,0.822433173656464,0.491039961576462,0.190607443451881,0.891252994537354,0.41150563955307,-0.468000799417496,0.87750107049942,0.10472384095192,-0.528217673301697,0.774278223514557,0.348538845777512,-0.353226035833359,0.839446485042572,0.412990301847458,-0.289120554924011,0.931183099746704,0.222052708268166,-0.903881251811981,0.372275590896606,0.21073579788208,-0.39387321472168,0.899492859840393,0.18914669752121,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.946829199790955,0.314822763204575,0.066340483725071,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.491390645503998,0.848508954048157,0.196386933326721,0.0140912849456072,0.990858137607574,0.134169965982437,0.0436014086008072,0.880429863929749,0.472167462110519,-0.44881072640419,0.73288232088089,0.511324167251587,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.197057366371155,0.623411595821381,-0.756654739379883,\n-0.322806298732758,0.932436168193817,-0.162354081869125,-0.847110569477081,0.52096164226532,0.104893282055855,-0.656458854675293,0.394298911094666,0.643109738826752,-0.33330100774765,0.819487571716309,0.466208755970001,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.93118155002594,-0.18550032377243,0.31383204460144,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.93118155002594,-0.18550032377243,0.31383204460144,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.550154626369476,-0.73190438747406,0.402052044868469,-0.307830482721329,-0.686485290527344,0.658770322799683,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.792521595954895,-0.308754324913025,0.525909006595612,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.968474745750427,0.246992528438568,-0.0324244759976864,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.271266043186188,0.549705266952515,-0.790087878704071,\n-0.350932270288467,0.749857068061829,-0.56085729598999,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.334018349647522,0.527555286884308,-0.7810999751091,0.333067029714584,0.789500892162323,-0.515514075756073,-0.535731971263886,0.751305878162384,-0.385396867990494,-0.482304006814957,0.870065748691559,-0.101825155317783,0.373418390750885,0.898855626583099,-0.229384630918503,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.968474745750427,0.246992528438568,-0.0324244759976864,-0.535731971263886,0.751305878162384,-0.385396867990494,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.847110569477081,0.52096164226532,0.104893282055855,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.704255282878876,-0.136106103658676,0.696778059005737,-0.656458854675293,0.394298911094666,0.643109738826752,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.322806298732758,0.932436168193817,-0.162354081869125,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.0371135324239731,0.851556301116943,-0.52294784784317,-0.024807246401906,0.980889618396759,-0.192977145314217,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.905584931373596,-0.288571357727051,0.310873836278915,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.988731265068054,0.125658646225929,0.0813654363155365,0.287465304136276,0.55735319852829,-0.778923034667969,0.333067029714584,0.789500892162323,-0.515514075756073,\n-0.0371135324239731,0.851556301116943,-0.52294784784317,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.905584931373596,-0.288571357727051,0.310873836278915,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.988731265068054,0.125658646225929,0.0813654363155365,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.568449974060059,0.526249170303345,0.632397353649139,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.490000605583191,0.777733385562897,0.393738687038422,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.144822835922241,-0.365306288003922,-0.919552981853485,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.0463922955095768,-0.412300795316696,-0.909865856170654,0.022180886939168,-0.312959760427475,-0.949507355690002,-0.249898374080658,-0.566836893558502,-0.785013854503632,-0.730888843536377,-0.408141672611237,-0.547011733055115,\n-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.568449974060059,0.526249170303345,0.632397353649139,0.133888319134712,0.6242516040802,0.769664764404297,-0.0333014093339443,0.336885303258896,0.940956592559814,-0.720985412597656,0.250006407499313,0.646279215812683,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.249898374080658,-0.566836893558502,-0.785013854503632,-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.740590155124664,-0.532754123210907,-0.409510970115662,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.140057414770126,-0.293910145759583,-0.945516109466553,-0.229701682925224,-0.369639068841934,-0.900335550308228,0.953684031963348,-0.290462404489517,-0.0782197788357735,0.875235259532928,0.374192535877228,0.306501507759094,0.886379599571228,0.431774586439133,0.167038753628731,0.908462584018707,-0.179232552647591,-0.377586334943771,0.875235259532928,0.374192535877228,0.306501507759094,-0.353226035833359,0.839446485042572,0.412990301847458,-0.293016821146011,0.709561467170715,0.640830397605896,0.886379599571228,0.431774586439133,0.167038753628731,0.417629092931747,0.907208979129791,0.0505746938288212,0.0140912849456072,0.990858137607574,0.134169965982437,-0.024807246401906,0.980889618396759,-0.192977145314217,0.373418390750885,0.898855626583099,-0.229384630918503,\n-0.39387321472168,0.899492859840393,0.18914669752121,0.417629092931747,0.907208979129791,0.0505746938288212,0.373418390750885,0.898855626583099,-0.229384630918503,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.342734336853027,-0.423973858356476,-0.838319361209869,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.0599007532000542,0.520737946033478,0.851612508296967,-0.761694371700287,0.389483571052551,0.517807185649872,-0.261273354291916,0.592454433441162,0.762059092521667,-0.0869597047567368,0.548145830631256,0.831849813461304,-0.786082983016968,-0.551289200782776,-0.279560059309006,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.747875332832336,-0.0330392643809319,0.663016498088837,-0.848471641540527,0.145880371332169,0.508738458156586,-0.0869597047567368,0.548145830631256,0.831849813461304,0.203655928373337,0.636657357215881,0.743768572807312,-0.21317532658577,0.371294349431992,0.903712749481201,-0.347785919904709,0.133236810564995,0.928058683872223,-0.848471641540527,0.145880371332169,0.508738458156586,-0.747875332832336,-0.0330392643809319,0.663016498088837,-0.21317532658577,0.371294349431992,0.903712749481201,-0.29514667391777,0.569713115692139,0.767017185688019,0.489128321409225,0.658302128314972,0.572181582450867,0.203655928373337,0.636657357215881,0.743768572807312,0.021379429847002,0.751378178596497,0.659525394439697,0.107353128492832,0.690562188625336,0.715261578559875,0.444850295782089,-0.346757113933563,0.825752794742584,0.254257917404175,-0.212425783276558,0.943519055843353,0.228504449129105,-0.206080406904221,0.951481223106384,0.419803202152252,-0.320524513721466,0.84913444519043,-0.952732801437378,-0.159682244062424,0.258460462093353,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.851404845714569,-0.181282177567482,0.492185473442078,\n-0.938912212848663,-0.107537157833576,0.326924532651901,-0.249380812048912,0.181461036205292,0.951252400875092,0.0534563846886158,0.983699679374695,0.171689838171005,-0.106476634740829,0.986019790172577,0.128170698881149,0.255933493375778,0.96283483505249,-0.0862965509295464,-0.112783953547478,0.903910756111145,0.412583559751511,0.181902796030045,0.957158207893372,0.225298702716827,-0.142466872930527,0.844133794307709,0.516857206821442,-0.29035672545433,0.911720991134644,0.290616303682327,-0.301660984754562,0.907010614871979,0.293823689222336,-0.301660984754562,0.907010614871979,0.293823689222336,-0.29035672545433,0.911720991134644,0.290616303682327,-0.435499727725983,0.707530975341797,0.556542754173279,-0.720441699028015,0.626922428607941,0.296533405780792,-0.720441699028015,0.626922428607941,0.296533405780792,-0.435499727725983,0.707530975341797,0.556542754173279,-0.761694371700287,0.389483571052551,0.517807185649872,-0.877903461456299,0.125808238983154,0.462014973163605,0.181902796030045,0.957158207893372,0.225298702716827,0.414917647838593,0.779010057449341,0.470092207193375,0.421662032604218,0.906709790229797,0.00885869562625885,-0.142466872930527,0.844133794307709,0.516857206821442,-0.684342086315155,0.70050323009491,0.202413260936737,-0.887027978897095,0.338621288537979,0.313874155282974,-0.761694371700287,0.389483571052551,0.517807185649872,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.112783953547478,0.903910756111145,0.412583559751511,0.421662032604218,0.906709790229797,0.00885869562625885,0.325284242630005,0.933813154697418,0.148940086364746,0.0534563846886158,0.983699679374695,0.171689838171005,-0.0425885356962681,0.988019645214081,-0.148335143923759,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.106476634740829,0.986019790172577,0.128170698881149,-0.182774692773819,0.975853502750397,0.119596734642982,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.36091136932373,-0.689484357833862,-0.627976357936859,\n-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.977081477642059,-0.212798669934273,-0.00533603969961405,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.859505951404572,-0.505740880966187,0.0739976838231087,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.122193120419979,0.122121326625347,0.984964549541473,-0.139697372913361,0.0780137032270432,0.987116277217865,0.254257917404175,-0.212425783276558,0.943519055843353,0.142127305269241,-0.253888607025146,0.956734240055084,0.254257917404175,-0.212425783276558,0.943519055843353,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.184806242585182,0.04760567471385,0.981621265411377,0.228504449129105,-0.206080406904221,0.951481223106384,0.228504449129105,-0.206080406904221,0.951481223106384,-0.184806242585182,0.04760567471385,0.981621265411377,-0.275664061307907,0.0508917570114136,0.959905922412872,0.15039549767971,-0.209228366613388,0.966232180595398,-0.275664061307907,0.0508917570114136,0.959905922412872,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.0830294638872147,-0.341880321502686,0.93606835603714,0.15039549767971,-0.209228366613388,0.966232180595398,0.000295055127935484,0.143534883856773,0.98964524269104,-0.122193120419979,0.122121326625347,0.984964549541473,0.142127305269241,-0.253888607025146,0.956734240055084,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.859505951404572,-0.505740880966187,0.0739976838231087,\n-0.984755873680115,-0.122865788638592,0.123125486075878,-0.977081477642059,-0.212798669934273,-0.00533603969961405,-0.819226324558258,-0.572083711624146,-0.0398554801940918,0.00928871519863606,-0.538456916809082,-0.842601835727692,-0.217214897274971,-0.348953694105148,-0.911618888378143,-0.0681053325533867,-0.345358580350876,-0.935996353626251,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.00847726315259933,-0.531524419784546,-0.847000539302826,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.217214897274971,-0.348953694105148,-0.911618888378143,0.00928871519863606,-0.538456916809082,-0.842601835727692,-0.00847726315259933,-0.531524419784546,-0.847000539302826,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.600559055805206,0.384851962327957,0.70086932182312,-0.789069652557373,0.513498783111572,0.33717668056488,-0.900736033916473,0.276170164346695,0.335267961025238,-0.706152856349945,0.175898715853691,0.685862839221954,-0.95565664768219,0.128923356533051,0.264762312173843,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.706152856349945,0.175898715853691,0.685862839221954,-0.900736033916473,0.276170164346695,0.335267961025238,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.93118155002594,-0.18550032377243,0.31383204460144,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.709277749061584,0.0713812634348869,0.701305747032166,\n-0.492890477180481,0.0867519974708557,0.865755796432495,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.93118155002594,-0.18550032377243,0.31383204460144,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.52557498216629,0.553365111351013,0.646187245845795,-0.713905096054077,0.655318558216095,0.246773228049278,-0.789069652557373,0.513498783111572,0.33717668056488,-0.600559055805206,0.384851962327957,0.70086932182312,-0.554342925548553,0.567035973072052,0.609240651130676,-0.684342086315155,0.70050323009491,0.202413260936737,-0.713905096054077,0.655318558216095,0.246773228049278,-0.52557498216629,0.553365111351013,0.646187245845795,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.95565664768219,0.128923356533051,0.264762312173843,-0.900736033916473,0.276170164346695,0.335267961025238,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.0824920982122421,0.586886823177338,-0.805455684661865,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.789069652557373,0.513498783111572,0.33717668056488,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.900736033916473,0.276170164346695,0.335267961025238,-0.713905096054077,0.655318558216095,0.246773228049278,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.789069652557373,0.513498783111572,0.33717668056488,-0.684342086315155,0.70050323009491,0.202413260936737,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.713905096054077,0.655318558216095,0.246773228049278,\n0.0745275393128395,0.431530833244324,0.899014353752136,0.0482074841856956,0.963629901409149,0.262856423854828,-0.190823212265968,0.973383665084839,0.126928135752678,-0.421310722827911,0.492505818605423,0.761534810066223,0.199702888727188,0.793615162372589,0.574711859226227,-0.263717442750931,0.775425553321838,0.573731958866119,-0.106476634740829,0.986019790172577,0.128170698881149,0.0534563846886158,0.983699679374695,0.171689838171005,-0.190823212265968,0.973383665084839,0.126928135752678,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.654110372066498,0.557340681552887,0.511381506919861,-0.421310722827911,0.492505818605423,0.761534810066223,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.182774692773819,0.975853502750397,0.119596734642982,-0.263717442750931,0.775425553321838,0.573731958866119,-0.654110372066498,0.557340681552887,0.511381506919861,0.0772658213973045,-0.858631789684296,0.506736099720001,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.0522458925843239,-0.587620496749878,0.807448148727417,0.185403272509575,-0.597725808620453,0.779967606067657,0.130717054009438,0.879965662956238,0.456698477268219,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.0638052001595497,0.994221389293671,-0.086329497396946,0.105478949844837,0.892287731170654,0.438972383737564,0.133888319134712,0.6242516040802,0.769664764404297,0.130717054009438,0.879965662956238,0.456698477268219,0.105478949844837,0.892287731170654,0.438972383737564,0.212958931922913,0.603173196315765,0.768655061721802,0.0345219671726227,0.469873160123825,0.882058680057526,-0.0333014093339443,0.336885303258896,0.940956592559814,0.245675906538963,0.358359038829803,0.900678694248199,0.246256619691849,0.328444272279739,0.911856353282928,0.185403272509575,-0.597725808620453,0.779967606067657,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.141512751579285,-0.835205972194672,0.531418025493622,0.183785125613213,-0.564789414405823,0.80450975894928,-0.0402880981564522,-0.602410852909088,0.797168791294098,0.0388557612895966,0.393748223781586,0.918396770954132,\n0.246256619691849,0.328444272279739,0.911856353282928,0.183785125613213,-0.564789414405823,0.80450975894928,-0.00957944244146347,-0.984838724136353,0.173207774758339,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.0983656272292137,-0.854222357273102,0.510517776012421,0.0772658213973045,-0.858631789684296,0.506736099720001,-0.0333014093339443,0.336885303258896,0.940956592559814,0.133888319134712,0.6242516040802,0.769664764404297,0.212958931922913,0.603173196315765,0.768655061721802,0.245675906538963,0.358359038829803,0.900678694248199,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.291299909353256,0.369882375001907,-0.882230937480927,0.0482074841856956,0.963629901409149,0.262856423854828,-0.0404882803559303,0.532536089420319,-0.845438301563263,0.218648448586464,0.688608109951019,-0.691383898258209,-0.190823212265968,0.973383665084839,0.126928135752678,-0.294875234365463,0.607182502746582,-0.737819731235504,-0.0387927554547787,0.555053651332855,-0.830909490585327,-0.0597109496593475,0.20538541674614,-0.976857900619507,-0.331786870956421,0.242688208818436,-0.911602914333344,-0.331786870956421,0.242688208818436,-0.911602914333344,-0.0597109496593475,0.20538541674614,-0.976857900619507,-0.0473092421889305,0.433387726545334,-0.899964928627014,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0513396598398685,0.366866230964661,-0.928855955600739,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.182968229055405,-0.224779292941093,-0.957077264785767,\n-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.182968229055405,-0.224779292941093,-0.957077264785767,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-0.0450695939362049,-0.253388822078705,-0.966314017772675,-0.0463922955095768,-0.412300795316696,-0.909865856170654,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-0.000159720322699286,-0.320416629314423,-0.947276711463928,0.00452618766576052,-0.317399501800537,-0.948281109333038,-0.0450695939362049,-0.253388822078705,-0.966314017772675,0.169686332345009,0.978208720684052,-0.119642592966557,0.0492917597293854,0.955946862697601,0.28937155008316,0.0205553397536278,0.989267349243164,-0.144663617014885,-0.0425885356962681,0.988019645214081,-0.148335143923759,0.370400339365005,0.925967752933502,-0.0733987167477608,0.0462776906788349,0.971960961818695,0.23054338991642,0.0492917597293854,0.955946862697601,0.28937155008316,0.169686332345009,0.978208720684052,-0.119642592966557,-0.165674656629562,0.933009803295136,-0.319444298744202,0.00435609184205532,0.929633140563965,-0.368460655212402,0.0557159669697285,0.916767716407776,0.395515710115433,0.122461646795273,0.908201992511749,0.400215208530426,-0.000357056385837495,-0.611226499080658,-0.791455626487732,-0.000515560561325401,-0.726091146469116,-0.68759822845459,0.0942423716187477,-0.686610460281372,-0.72089147567749,0.0480021014809608,-0.559525310993195,-0.827422022819519,0.122461646795273,0.908201992511749,0.400215208530426,0.0557159669697285,0.916767716407776,0.395515710115433,0.0419506318867207,0.986220836639404,0.160026773810387,0.0643617510795593,0.973314523696899,0.220264464616776,-0.0473092421889305,0.433387726545334,-0.899964928627014,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.269162774085999,0.465141177177429,-0.843323826789856,\n-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-0.0463922955095768,-0.412300795316696,-0.909865856170654,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.000159720322699286,-0.320416629314423,-0.947276711463928,-0.000357056385837495,-0.611226499080658,-0.791455626487732,0.0480021014809608,-0.559525310993195,-0.827422022819519,0.00452618766576052,-0.317399501800537,-0.948281109333038,-0.0513396598398685,0.366866230964661,-0.928855955600739,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.352729320526123,0.114327535033226,0.92871481180191,-0.492890477180481,0.0867519974708557,0.865755796432495,-0.275664061307907,0.0508917570114136,0.959905922412872,-0.184806242585182,0.04760567471385,0.981621265411377,-0.307830482721329,-0.686485290527344,0.658770322799683,0.10191734880209,-0.459647685289383,0.882234036922455,-0.0830294638872147,-0.341880321502686,0.93606835603714,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.0812708511948586,-0.898197948932648,-0.432013303041458,-0.102202795445919,-0.709632575511932,-0.697119891643524,-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.0440049432218075,-0.995802879333496,-0.0802504494786263,-0.0812708511948586,-0.898197948932648,-0.432013303041458,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.102202795445919,-0.709632575511932,-0.697119891643524,-0.105853073298931,-0.664507687091827,-0.739746332168579,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.196655720472336,-0.712397694587708,-0.673658668994904,\n-0.105853073298931,-0.664507687091827,-0.739746332168579,-0.105340361595154,-0.682143568992615,-0.723590731620789,-0.374457865953445,-0.757000803947449,-0.535472750663757,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.10163875669241,0.148283883929253,-0.983708024024963,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.107317022979259,-0.361611425876617,-0.926131844520569,-0.756865978240967,0.644326865673065,0.109529994428158,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.0824920982122421,0.586886823177338,-0.805455684661865,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.10163875669241,0.148283883929253,-0.983708024024963,-0.0440049432218075,-0.995802879333496,-0.0802504494786263,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.00957944244146347,-0.984838724136353,0.173207774758339,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.0638052001595497,0.994221389293671,-0.086329497396946,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.720985412597656,0.250006407499313,0.646279215812683,-0.990060329437256,-0.0573833771049976,-0.128404289484024,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.568449974060059,0.526249170303345,0.632397353649139,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.990060329437256,-0.0573833771049976,-0.128404289484024,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.529653549194336,0.324454098939896,-0.783707022666931,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.990060329437256,-0.0573833771049976,-0.128404289484024,0.708686351776123,0.701542615890503,0.0748436823487282,0.471062362194061,0.869565486907959,0.148176074028015,\n0.457759588956833,0.863344848155975,-0.21234855055809,0.646372437477112,0.650956153869629,-0.398068875074387,0.387304782867432,0.59377658367157,0.705283224582672,0.263491213321686,0.831329226493835,0.48935067653656,0.606493294239044,0.649602949619293,0.458456039428711,0.662577331066132,0.589804947376251,0.46165069937706,0.350325137376785,0.620450079441071,0.70165091753006,0.394804865121841,0.885042786598206,0.246634021401405,-0.0894755497574806,0.965718626976013,0.243683651089668,-0.298087060451508,0.801499605178833,0.518403768539429,-0.298087060451508,0.801499605178833,0.518403768539429,-0.0615167804062366,0.641514480113983,0.764640331268311,0.321956604719162,0.474833071231842,0.819071114063263,0.350325137376785,0.620450079441071,0.70165091753006,-0.111158438026905,0.66179496049881,0.74139815568924,-0.0702482014894485,0.80213338136673,0.592998504638672,0.386715173721313,0.754913926124573,0.529675722122192,0.375614732503891,0.495400130748749,0.783257484436035,0.0745275393128395,0.431530833244324,0.899014353752136,0.0708804950118065,0.122446231544018,0.989940881729126,0.551036536693573,0.1087965965271,0.827358484268188,0.550135016441345,0.461672753095627,0.695851802825928,0.396661043167114,0.909007132053375,0.127929911017418,0.372023165225983,0.906736969947815,-0.19856184720993,0.457759588956833,0.863344848155975,-0.21234855055809,0.471062362194061,0.869565486907959,0.148176074028015,0.383488237857819,0.890466749668121,0.244960829615593,0.55004757642746,0.676443994045258,0.489766448736191,0.337217271327972,0.810059905052185,0.479674339294434,0.389103561639786,0.77647876739502,0.495660334825516,0.388264060020447,0.528846085071564,0.754700541496277,0.55090343952179,0.499813765287399,0.668349921703339,0.55004757642746,0.676443994045258,0.489766448736191,0.858800172805786,0.271537780761719,0.434430092573166,0.0572854578495026,0.523676514625549,0.849988996982574,-0.111158438026905,0.66179496049881,0.74139815568924,0.375614732503891,0.495400130748749,0.783257484436035,0.257902681827545,0.417416572570801,0.871349334716797,\n0.0708804950118065,0.122446231544018,0.989940881729126,0.0692365244030952,0.127935454249382,0.989362835884094,0.510494410991669,0.103201098740101,0.853665590286255,0.551036536693573,0.1087965965271,0.827358484268188,0.372023165225983,0.906736969947815,-0.19856184720993,0.282073974609375,0.803686380386353,-0.523948907852173,0.320013791322708,0.764963567256927,-0.558947086334229,0.457759588956833,0.863344848155975,-0.21234855055809,0.916756093502045,0.0901993364095688,0.389130234718323,0.705088436603546,-0.598325669765472,-0.380600422620773,0.74578994512558,-0.633161306381226,-0.207133173942566,0.93030720949173,0.248524934053421,0.269747763872147,0.0692365244030952,0.127935454249382,0.989362835884094,0.0673762187361717,0.208747074007988,0.975646018981934,0.253994464874268,0.250187575817108,0.934287428855896,0.510494410991669,0.103201098740101,0.853665590286255,0.895810067653656,0.254065722227097,-0.364657372236252,0.980262100696564,0.00691105145961046,0.197581350803375,0.971711039543152,-0.0647541359066963,0.227122470736504,0.842455089092255,-0.136532187461853,-0.521179795265198,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.54582554101944,-0.560542941093445,-0.622788965702057,0.789066255092621,-0.467570185661316,-0.398437708616257,0.663097739219666,-0.724811255931854,0.186949267983437,0.835493862628937,0.547001540660858,0.0523386560380459,0.799383401870728,0.596614599227905,-0.0709738805890083,0.238877683877945,0.949131786823273,-0.205149352550507,0.285585820674896,0.936043798923492,-0.20557901263237,0.635354340076447,0.0863202884793282,0.767381072044373,0.747986078262329,-0.084919698536396,0.658259391784668,0.80047994852066,-0.0622782073915005,0.596115171909332,0.813431859016418,0.0690318197011948,0.577549338340759,0.122040368616581,-0.22475291788578,-0.966743111610413,0.460681647062302,-0.288388341665268,-0.83940726518631,0.346117079257965,-0.47863432765007,-0.80691522359848,0.150176227092743,-0.476422011852264,-0.866296231746674,0.39206200838089,-0.444667458534241,-0.805331110954285,0.583753287792206,-0.402651727199554,-0.705055773258209,\n0.623417019844055,-0.452671766281128,-0.637526035308838,0.31203830242157,-0.439545303583145,-0.842277884483337,0.996236562728882,0.0134180961176753,-0.0856306329369545,0.942644000053406,-0.318175673484802,-0.100928120315075,0.829055666923523,-0.40739643573761,-0.383007615804672,0.946820557117462,-0.166022479534149,-0.275621712207794,0.92408949136734,-0.175655707716942,0.339416593313217,0.909235060214996,-0.290925145149231,0.297748446464539,0.915336489677429,-0.234250664710999,0.327545046806335,0.970865368843079,0.0892849490046501,0.222370475530624,0.132409438490868,0.260098040103912,0.956460535526276,0.0114754280075431,0.247809365391731,0.968740820884705,0.188986584544182,0.217446967959404,0.957601606845856,0.186875864863396,0.167301252484322,0.968032896518707,0.000295055127935484,0.143534883856773,0.98964524269104,0.122565753757954,0.118542328476906,0.98535543680191,0.188986584544182,0.217446967959404,0.957601606845856,0.0114754280075431,0.247809365391731,0.968740820884705,0.140872359275818,-0.399173051118851,-0.905988872051239,0.31203830242157,-0.439545303583145,-0.842277884483337,0.272795677185059,-0.496994286775589,-0.823759198188782,0.140843346714973,-0.431618928909302,-0.890992820262909,0.623417019844055,-0.452671766281128,-0.637526035308838,0.546701967716217,-0.520302414894104,-0.656050562858582,0.272795677185059,-0.496994286775589,-0.823759198188782,0.31203830242157,-0.439545303583145,-0.842277884483337,0.942644000053406,-0.318175673484802,-0.100928120315075,0.92242443561554,-0.371073186397552,-0.106947988271713,0.790781438350677,-0.460972279310226,-0.402702450752258,0.829055666923523,-0.40739643573761,-0.383007615804672,0.915336489677429,-0.234250664710999,0.327545046806335,0.916560828685761,-0.24360553920269,0.317131847143173,0.941202819347382,-0.301624983549118,0.152183011174202,0.955660283565521,-0.256323933601379,0.144953340291977,0.909235060214996,-0.290925145149231,0.297748446464539,0.918301284313202,-0.218417331576347,0.330176681280136,0.916560828685761,-0.24360553920269,0.317131847143173,0.915336489677429,-0.234250664710999,0.327545046806335,\n0.885917663574219,-0.280271381139755,0.369591504335403,0.879492223262787,-0.245268657803535,0.407844007015228,0.918301284313202,-0.218417331576347,0.330176681280136,0.909235060214996,-0.290925145149231,0.297748446464539,0.140843346714973,-0.431618928909302,-0.890992820262909,0.272795677185059,-0.496994286775589,-0.823759198188782,0.267562568187714,-0.479633033275604,-0.835680842399597,0.228939339518547,-0.370276868343353,-0.900267601013184,0.546701967716217,-0.520302414894104,-0.656050562858582,0.549745261669159,-0.473052263259888,-0.68847781419754,0.267562568187714,-0.479633033275604,-0.835680842399597,0.272795677185059,-0.496994286775589,-0.823759198188782,0.92242443561554,-0.371073186397552,-0.106947988271713,0.925438106060028,-0.353884547948837,-0.135388508439064,0.796822428703308,-0.432056725025177,-0.422375500202179,0.790781438350677,-0.460972279310226,-0.402702450752258,0.916560828685761,-0.24360553920269,0.317131847143173,0.953391134738922,-0.158550098538399,0.256724029779434,0.960864663124084,-0.249232992529869,0.120921671390533,0.941202819347382,-0.301624983549118,0.152183011174202,0.265665024518967,0.160569414496422,0.950599610805511,0.140111669898033,0.0783234462141991,0.987033009529114,0.185034364461899,0.0477372668683529,0.981571912765503,0.353190511465073,0.114995338022709,0.928457081317902,0.549745261669159,-0.473052263259888,-0.68847781419754,0.678162038326263,-0.241175547242165,-0.694212198257446,0.385590463876724,-0.303107500076294,-0.871461868286133,0.267562568187714,-0.479633033275604,-0.835680842399597,0.925438106060028,-0.353884547948837,-0.135388508439064,0.962334990501404,-0.205602362751961,-0.177873581647873,0.888094663619995,-0.231564551591873,-0.39707151055336,0.796822428703308,-0.432056725025177,-0.422375500202179,0.960864663124084,-0.249232992529869,0.120921671390533,0.953391134738922,-0.158550098538399,0.256724029779434,0.983779430389404,0.00275212083943188,0.179361149668694,0.993288457393646,-0.102479107677937,0.0536287166178226,0.938150525093079,-0.0836314186453819,0.335975229740143,\n0.946241497993469,0.0790377557277679,0.313655972480774,0.983779430389404,0.00275212083943188,0.179361149668694,0.953391134738922,-0.158550098538399,0.256724029779434,0.91181892156601,-0.103688038885593,0.397284656763077,0.86522775888443,0.0834222286939621,0.494390219449997,0.946241497993469,0.0790377557277679,0.313655972480774,0.938150525093079,-0.0836314186453819,0.335975229740143,0.823973476886749,-0.140763908624649,0.548865377902985,0.709406793117523,0.0714843049645424,0.701164722442627,0.86522775888443,0.0834222286939621,0.494390219449997,0.91181892156601,-0.103688038885593,0.397284656763077,0.962334990501404,-0.205602362751961,-0.177873581647873,0.939977943897247,-0.283478707075119,-0.189950734376907,0.89782452583313,-0.295981734991074,-0.32604593038559,0.888094663619995,-0.231564551591873,-0.39707151055336,0.993288457393646,-0.102479107677937,0.0536287166178226,0.983779430389404,0.00275212083943188,0.179361149668694,0.984757125377655,-0.122858062386513,0.123123273253441,0.977083265781403,-0.21279039978981,-0.00533624598756433,0.946241497993469,0.0790377557277679,0.313655972480774,0.954775273799896,-0.0549841597676277,0.292200028896332,0.984757125377655,-0.122858062386513,0.123123273253441,0.983779430389404,0.00275212083943188,0.179361149668694,0.86522775888443,0.0834222286939621,0.494390219449997,0.833409249782562,-0.0707181841135025,0.54811304807663,0.954775273799896,-0.0549841597676277,0.292200028896332,0.946241497993469,0.0790377557277679,0.313655972480774,0.709406793117523,0.0714843049645424,0.701164722442627,0.527580142021179,-0.0869907140731812,0.845039546489716,0.833409249782562,-0.0707181841135025,0.54811304807663,0.86522775888443,0.0834222286939621,0.494390219449997,0.661977589130402,-0.708897471427917,-0.243413314223289,0.746676325798035,-0.643010795116425,-0.17032790184021,0.6322380900383,-0.767571449279785,-0.10539997369051,0.29490727186203,-0.85530948638916,-0.425999224185944,0.819233179092407,-0.572073757648468,-0.0398566573858261,0.859511733055115,-0.505731165409088,0.0739971473813057,0.746179103851318,-0.664099156856537,0.0467877462506294,\n0.6322380900383,-0.767571449279785,-0.10539997369051,0.859511733055115,-0.505731165409088,0.0739971473813057,0.835695207118988,-0.485575556755066,0.256573379039764,0.711589336395264,-0.66451358795166,0.228171736001968,0.746179103851318,-0.664099156856537,0.0467877462506294,0.680691421031952,-0.552797436714172,0.480701744556427,0.550213515758514,-0.731853306293488,0.402064383029938,0.711589336395264,-0.66451358795166,0.228171736001968,0.835695207118988,-0.485575556755066,0.256573379039764,0.544267177581787,0.038809709250927,0.838013768196106,0.729275226593018,-0.11221731454134,0.674955487251282,0.747986078262329,-0.084919698536396,0.658259391784668,0.635354340076447,0.0863202884793282,0.767381072044373,0.385354042053223,0.042363528162241,0.921795845031738,0.610790312290192,-0.062268540263176,0.789340078830719,0.729275226593018,-0.11221731454134,0.674955487251282,0.544267177581787,0.038809709250927,0.838013768196106,0.603610038757324,0.179113283753395,0.776899814605713,0.635354340076447,0.0863202884793282,0.767381072044373,0.813431859016418,0.0690318197011948,0.577549338340759,0.77562689781189,0.195846498012543,0.60003924369812,0.428932994604111,0.13583180308342,0.893065631389618,0.544267177581787,0.038809709250927,0.838013768196106,0.635354340076447,0.0863202884793282,0.767381072044373,0.603610038757324,0.179113283753395,0.776899814605713,0.255159199237823,0.10554338991642,0.961121380329132,0.385354042053223,0.042363528162241,0.921795845031738,0.544267177581787,0.038809709250927,0.838013768196106,0.428932994604111,0.13583180308342,0.893065631389618,0.353190511465073,0.114995338022709,0.928457081317902,0.493080407381058,0.0869515836238861,0.865627586841583,0.610790312290192,-0.062268540263176,0.789340078830719,0.385354042053223,0.042363528162241,0.921795845031738,0.512751221656799,0.314961016178131,0.798677444458008,0.603610038757324,0.179113283753395,0.776899814605713,0.77562689781189,0.195846498012543,0.60003924369812,0.704553008079529,0.389835178852081,0.592987060546875,0.186875864863396,0.167301252484322,0.968032896518707,\n0.255159199237823,0.10554338991642,0.961121380329132,0.428932994604111,0.13583180308342,0.893065631389618,0.352489024400711,0.249785035848618,0.901864171028137,0.603610038757324,0.179113283753395,0.776899814605713,0.512751221656799,0.314961016178131,0.798677444458008,0.352489024400711,0.249785035848618,0.901864171028137,0.428932994604111,0.13583180308342,0.893065631389618,0.265665024518967,0.160569414496422,0.950599610805511,0.353190511465073,0.114995338022709,0.928457081317902,0.385354042053223,0.042363528162241,0.921795845031738,0.255159199237823,0.10554338991642,0.961121380329132,0.188986584544182,0.217446967959404,0.957601606845856,0.265665024518967,0.160569414496422,0.950599610805511,0.255159199237823,0.10554338991642,0.961121380329132,0.186875864863396,0.167301252484322,0.968032896518707,0.448167592287064,0.331256568431854,0.830310106277466,0.287839502096176,0.391564905643463,0.873971045017242,0.238586917519569,0.344399750232697,0.908000588417053,0.352489024400711,0.249785035848618,0.901864171028137,0.132409438490868,0.260098040103912,0.956460535526276,0.186875864863396,0.167301252484322,0.968032896518707,0.352489024400711,0.249785035848618,0.901864171028137,0.238586917519569,0.344399750232697,0.908000588417053,0.545623481273651,0.394130259752274,0.739564955234528,0.512751221656799,0.314961016178131,0.798677444458008,0.704553008079529,0.389835178852081,0.592987060546875,0.63835346698761,0.527818858623505,0.560278594493866,0.540044844150543,0.824666082859039,-0.168158859014511,0.491935312747955,0.72918576002121,-0.475697129964828,0.282073974609375,0.803686380386353,-0.523948907852173,0.372023165225983,0.906736969947815,-0.19856184720993,0.647948265075684,-0.685174643993378,-0.332714289426804,0.812437415122986,-0.0575567446649075,0.580200552940369,0.4433753490448,0.161547407507896,0.881657958030701,0.254503726959229,-0.798789858818054,-0.545126259326935,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.393054485321045,0.919416308403015,-0.0134849762544036,0.259856075048447,0.961204409599304,0.0925252288579941,\n0.0862562954425812,0.984675407409668,-0.151572123169899,0.550135016441345,0.461672753095627,0.695851802825928,0.551036536693573,0.1087965965271,0.827358484268188,0.736154615879059,0.240016058087349,0.632825970649719,0.750702619552612,0.512931108474731,0.416349858045578,0.551036536693573,0.1087965965271,0.827358484268188,0.510494410991669,0.103201098740101,0.853665590286255,0.63226306438446,0.224956437945366,0.741375803947449,0.736154615879059,0.240016058087349,0.632825970649719,0.140111669898033,0.0783234462141991,0.987033009529114,0.265665024518967,0.160569414496422,0.950599610805511,0.188986584544182,0.217446967959404,0.957601606845856,0.122565753757954,0.118542328476906,0.98535543680191,0.275597482919693,0.0508149787783623,0.95992910861969,0.527580142021179,-0.0869907140731812,0.845039546489716,0.709406793117523,0.0714843049645424,0.701164722442627,0.493080407381058,0.0869515836238861,0.865627586841583,-0.266191899776459,0.70389860868454,-0.658535182476044,0.266888707876205,0.958940505981445,0.0959352776408196,0.393054485321045,0.919416308403015,-0.0134849762544036,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0462776906788349,0.971960961818695,0.23054338991642,-0.0405596829950809,0.531582415103912,-0.846034944057465,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.318083673715591,0.947685122489929,-0.0267524290829897,-0.253998309373856,-0.212244898080826,0.943629682064056,-0.141722351312637,-0.25363889336586,0.956860542297363,-0.27082097530365,-0.434562891721725,0.858959317207336,-0.444781541824341,-0.346720337867737,0.825805306434631,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.41981428861618,-0.320506066083908,0.849135935306549,-0.355942904949188,-0.323049247264862,0.876894414424896,-0.150304853916168,-0.209269061684608,0.966237485408783,-0.150304853916168,-0.209269061684608,0.966237485408783,-0.355942904949188,-0.323049247264862,0.876894414424896,-0.101489536464214,-0.459648072719574,0.882283091545105,0.0832947567105293,-0.342013299465179,0.935996174812317,0.578356921672821,-0.429673582315445,-0.693457901477814,\n0.37424498796463,0.138061463832855,-0.91699492931366,0.132010728120804,0.613032221794128,-0.778950989246368,0.526131212711334,0.493667006492615,-0.692444086074829,0.663097739219666,-0.724811255931854,0.186949267983437,0.789066255092621,-0.467570185661316,-0.398437708616257,0.958566963672638,0.124525241553783,-0.256208688020706,0.835218191146851,-0.360097140073776,0.415620774030685,-0.141722351312637,-0.25363889336586,0.956860542297363,0.000238662076299079,-0.279259294271469,0.96021568775177,0.000465182994958013,-0.480507552623749,0.876990437507629,-0.27082097530365,-0.434562891721725,0.858959317207336,0.546701967716217,-0.520302414894104,-0.656050562858582,0.623417019844055,-0.452671766281128,-0.637526035308838,0.829055666923523,-0.40739643573761,-0.383007615804672,0.790781438350677,-0.460972279310226,-0.402702450752258,0.549745261669159,-0.473052263259888,-0.68847781419754,0.546701967716217,-0.520302414894104,-0.656050562858582,0.790781438350677,-0.460972279310226,-0.402702450752258,0.796822428703308,-0.432056725025177,-0.422375500202179,0.678162038326263,-0.241175547242165,-0.694212198257446,0.549745261669159,-0.473052263259888,-0.68847781419754,0.796822428703308,-0.432056725025177,-0.422375500202179,0.888094663619995,-0.231564551591873,-0.39707151055336,0.672621726989746,-0.282224327325821,-0.684053659439087,0.678162038326263,-0.241175547242165,-0.694212198257446,0.888094663619995,-0.231564551591873,-0.39707151055336,0.89782452583313,-0.295981734991074,-0.32604593038559,-0.00762177817523479,0.899371445178986,0.437118947505951,0.0780242905020714,0.996866285800934,0.0130291758105159,0.78013014793396,0.624480009078979,-0.0377050787210464,0.849660098552704,0.510039925575256,0.133928999304771,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.945589601993561,0.313947737216949,0.0854233801364899,0.93030720949173,0.248524934053421,0.269747763872147,0.74578994512558,-0.633161306381226,-0.207133173942566,0.238877683877945,0.949131786823273,-0.205149352550507,0.799383401870728,0.596614599227905,-0.0709738805890083,\n0.78013014793396,0.624480009078979,-0.0377050787210464,0.0780242905020714,0.996866285800934,0.0130291758105159,0.986967325210571,0.15194895863533,0.0529817342758179,0.955660283565521,-0.256323933601379,0.144953340291977,0.942644000053406,-0.318175673484802,-0.100928120315075,0.996236562728882,0.0134180961176753,-0.0856306329369545,0.92242443561554,-0.371073186397552,-0.106947988271713,0.942644000053406,-0.318175673484802,-0.100928120315075,0.955660283565521,-0.256323933601379,0.144953340291977,0.941202819347382,-0.301624983549118,0.152183011174202,0.925438106060028,-0.353884547948837,-0.135388508439064,0.92242443561554,-0.371073186397552,-0.106947988271713,0.941202819347382,-0.301624983549118,0.152183011174202,0.960864663124084,-0.249232992529869,0.120921671390533,0.962334990501404,-0.205602362751961,-0.177873581647873,0.925438106060028,-0.353884547948837,-0.135388508439064,0.960864663124084,-0.249232992529869,0.120921671390533,0.993288457393646,-0.102479107677937,0.0536287166178226,0.939977943897247,-0.283478707075119,-0.189950734376907,0.962334990501404,-0.205602362751961,-0.177873581647873,0.993288457393646,-0.102479107677937,0.0536287166178226,0.977083265781403,-0.21279039978981,-0.00533624598756433,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.0405596829950809,0.531582415103912,-0.846034944057465,-0.0404882803559303,0.532536089420319,-0.845438301563263,-0.266191899776459,0.70389860868454,-0.658535182476044,-0.318083673715591,0.947685122489929,-0.0267524290829897,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.266191899776459,0.70389860868454,-0.658535182476044,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0646723359823227,-0.342740118503571,-0.937201499938965,-0.00791200343519449,-0.3136927485466,-0.949491560459137,0.0445788577198982,-0.252718240022659,-0.966512382030487,0.139385372400284,-0.293043553829193,-0.945884346961975,0.13675257563591,-0.219145968556404,-0.966060936450958,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.0879448130726814,-0.45889338850975,-0.884128153324127,\n0.0786453634500504,-0.439450114965439,-0.894817590713501,0.196265131235123,0.534957885742188,-0.821766436100006,0.163574278354645,0.575437486171722,-0.801320910453796,0.37424498796463,0.138061463832855,-0.91699492931366,0.142098233103752,0.253012806177139,-0.956970512866974,0.196265131235123,0.534957885742188,-0.821766436100006,0.318493723869324,0.728740870952606,-0.606216490268707,0.320013791322708,0.764963567256927,-0.558947086334229,0.163574278354645,0.575437486171722,-0.801320910453796,-0.0101916557177901,0.912391781806946,0.409191101789474,0.179319217801094,0.922120809555054,-0.342837929725647,0.39146089553833,0.900987803936005,-0.187027588486671,-0.112045332789421,0.883429408073425,0.45497065782547,0.558892965316772,0.631695210933685,-0.537214875221252,0.589160740375519,0.293493062257767,-0.75282895565033,0.220478102564812,0.225269511342049,-0.949022173881531,0.230260863900185,0.590617835521698,-0.773401916027069,0.806149482727051,-0.532726168632507,0.257538169622421,0.968841314315796,0.185883238911629,-0.163688346743584,0.964999854564667,0.254521876573563,-0.0631974339485168,0.775248348712921,-0.624625861644745,0.0939816311001778,-0.0615167804062366,0.641514480113983,0.764640331268311,0.0572854578495026,0.523676514625549,0.849988996982574,0.287839502096176,0.391564905643463,0.873971045017242,0.321956604719162,0.474833071231842,0.819071114063263,0.0454900041222572,0.2624471783638,0.963873505592346,0.0114754280075431,0.247809365391731,0.968740820884705,0.132409438490868,0.260098040103912,0.956460535526276,0.253994464874268,0.250187575817108,0.934287428855896,-0.0074951434507966,-0.537373244762421,-0.843311250209808,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0738197043538094,-0.58150452375412,-0.810187101364136,-0.117905855178833,-0.615884125232697,-0.778964042663574,0.29490727186203,-0.85530948638916,-0.425999224185944,-0.0854567661881447,-0.590025365352631,-0.802849411964417,0.0173844322562218,-0.524197161197662,-0.851419508457184,0.375436156988144,-0.682113528251648,-0.627510011196136,0.303897142410278,-0.58835905790329,-0.749319791793823,\n0.493177682161331,0.0824330747127533,-0.866014182567596,0.67315399646759,0.330984532833099,-0.661296367645264,0.591645836830139,-0.392304599285126,-0.7043097615242,0.471546560525894,0.148768365383148,-0.86920177936554,0.122040368616581,-0.22475291788578,-0.966743111610413,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.150176227092743,-0.476422011852264,-0.866296231746674,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.122040368616581,-0.22475291788578,-0.966743111610413,-0.0924276784062386,-0.684463918209076,-0.723164081573486,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.0074951434507966,-0.537373244762421,-0.843311250209808,-0.117905855178833,-0.615884125232697,-0.778964042663574,0.678162038326263,-0.241175547242165,-0.694212198257446,0.672621726989746,-0.282224327325821,-0.684053659439087,0.332537442445755,-0.288520336151123,-0.897872388362885,0.385590463876724,-0.303107500076294,-0.871461868286133,0.385590463876724,-0.303107500076294,-0.871461868286133,0.332537442445755,-0.288520336151123,-0.897872388362885,0.216808795928955,-0.349548786878586,-0.911487579345703,0.228939339518547,-0.370276868343353,-0.900267601013184,0.216808795928955,-0.349548786878586,-0.911487579345703,0.0646723359823227,-0.342740118503571,-0.937201499938965,0.139385372400284,-0.293043553829193,-0.945884346961975,0.228939339518547,-0.370276868343353,-0.900267601013184,0.39206200838089,-0.444667458534241,-0.805331110954285,0.174190670251846,-0.475461959838867,-0.862318694591522,0.150176227092743,-0.476422011852264,-0.866296231746674,0.346117079257965,-0.47863432765007,-0.80691522359848,0.0786453634500504,-0.439450114965439,-0.894817590713501,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.113550499081612,-0.486260622739792,-0.866404592990875,0.106468603014946,-0.443950653076172,-0.889703452587128,-0.373825579881668,0.746838629245758,0.549987733364105,0.617900848388672,0.738122165203094,0.270876914262772,\n0.554794549942017,0.63729065656662,0.534849166870117,-0.39384588599205,0.733602285385132,0.553816795349121,-0.39384588599205,0.733602285385132,0.553816795349121,0.554794549942017,0.63729065656662,0.534849166870117,0.347248166799545,0.561754763126373,0.75089967250824,-0.460472017526627,0.662255048751831,0.591086983680725,0.347248166799545,0.561754763126373,0.75089967250824,0.327279478311539,0.828797340393066,0.453853607177734,-0.619935512542725,0.784334897994995,0.0223318859934807,-0.460472017526627,0.662255048751831,0.591086983680725,0.938301980495453,0.0685238614678383,0.338959902524948,0.350325137376785,0.620450079441071,0.70165091753006,0.321956604719162,0.474833071231842,0.819071114063263,0.671115279197693,0.284787148237228,0.684471070766449,0.394804865121841,0.885042786598206,0.246634021401405,0.350325137376785,0.620450079441071,0.70165091753006,0.938301980495453,0.0685238614678383,0.338959902524948,0.791727185249329,0.579225897789001,0.194075778126717,0.387304782867432,0.59377658367157,0.705283224582672,0.223836988210678,0.893291056156158,0.389779537916183,-0.358905464410782,0.931329369544983,0.0617449507117271,0.263491213321686,0.831329226493835,0.48935067653656,0.565629243850708,0.815166532993317,0.124768301844597,0.540044844150543,0.824666082859039,-0.168158859014511,0.372023165225983,0.906736969947815,-0.19856184720993,0.396661043167114,0.909007132053375,0.127929911017418,0.55090343952179,0.499813765287399,0.668349921703339,0.558709442615509,0.701101422309875,0.443058162927628,0.337217271327972,0.810059905052185,0.479674339294434,0.55004757642746,0.676443994045258,0.489766448736191,0.253994464874268,0.250187575817108,0.934287428855896,0.132409438490868,0.260098040103912,0.956460535526276,0.238586917519569,0.344399750232697,0.908000588417053,0.257902681827545,0.417416572570801,0.871349334716797,0.287839502096176,0.391564905643463,0.873971045017242,0.448167592287064,0.331256568431854,0.830310106277466,0.671115279197693,0.284787148237228,0.684471070766449,0.321956604719162,0.474833071231842,0.819071114063263,\n0.238586917519569,0.344399750232697,0.908000588417053,0.287839502096176,0.391564905643463,0.873971045017242,0.0572854578495026,0.523676514625549,0.849988996982574,0.257902681827545,0.417416572570801,0.871349334716797,0.671115279197693,0.284787148237228,0.684471070766449,0.545623481273651,0.394130259752274,0.739564955234528,0.665781199932098,0.528658747673035,0.526550352573395,0.947060525417328,0.264708548784256,0.181674882769585,-0.0702482014894485,0.80213338136673,0.592998504638672,-0.111158438026905,0.66179496049881,0.74139815568924,-0.406122446060181,0.842904448509216,0.352954238653183,-0.243022814393044,0.95173841714859,0.187440201640129,0.375614732503891,0.495400130748749,0.783257484436035,0.386715173721313,0.754913926124573,0.529675722122192,0.750702619552612,0.512931108474731,0.416349858045578,0.736154615879059,0.240016058087349,0.632825970649719,0.63226306438446,0.224956437945366,0.741375803947449,0.257902681827545,0.417416572570801,0.871349334716797,0.375614732503891,0.495400130748749,0.783257484436035,0.736154615879059,0.240016058087349,0.632825970649719,0.39146089553833,0.900987803936005,-0.187027588486671,0.53197318315506,0.845954120159149,0.0369608402252197,-0.258110016584396,0.811675071716309,0.523987472057343,-0.112045332789421,0.883429408073425,0.45497065782547,0.595662355422974,0.236076727509499,-0.767759144306183,0.460681647062302,-0.288388341665268,-0.83940726518631,0.122040368616581,-0.22475291788578,-0.966743111610413,0.471546560525894,0.148768365383148,-0.86920177936554,0.493177682161331,0.0824330747127533,-0.866014182567596,0.527646243572235,-0.330830633640289,-0.782394111156464,0.460681647062302,-0.288388341665268,-0.83940726518631,0.595662355422974,0.236076727509499,-0.767759144306183,0.737872421741486,0.632259011268616,0.236204952001572,0.554449737071991,0.577977955341339,0.598771214485168,0.837648034095764,0.514832735061646,-0.182463780045509,0.652710020542145,0.543907403945923,-0.527384459972382,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.142098233103752,0.253012806177139,-0.956970512866974,\n0.37424498796463,0.138061463832855,-0.91699492931366,0.471546560525894,0.148768365383148,-0.86920177936554,0.591645836830139,-0.392304599285126,-0.7043097615242,0.67315399646759,0.330984532833099,-0.661296367645264,0.471546560525894,0.148768365383148,-0.86920177936554,0.37424498796463,0.138061463832855,-0.91699492931366,0.67315399646759,0.330984532833099,-0.661296367645264,0.493177682161331,0.0824330747127533,-0.866014182567596,0.595662355422974,0.236076727509499,-0.767759144306183,0.471546560525894,0.148768365383148,-0.86920177936554,0.591645836830139,-0.392304599285126,-0.7043097615242,0.37424498796463,0.138061463832855,-0.91699492931366,0.578356921672821,-0.429673582315445,-0.693457901477814,0.303897142410278,-0.58835905790329,-0.749319791793823,0.708686351776123,0.701542615890503,0.0748436823487282,0.780383825302124,0.614288032054901,0.116838775575161,0.662577331066132,0.589804947376251,0.46165069937706,0.606493294239044,0.649602949619293,0.458456039428711,0.263491213321686,0.831329226493835,0.48935067653656,0.383488237857819,0.890466749668121,0.244960829615593,0.389103561639786,0.77647876739502,0.495660334825516,0.606493294239044,0.649602949619293,0.458456039428711,0.589160740375519,0.293493062257767,-0.75282895565033,0.558892965316772,0.631695210933685,-0.537214875221252,0.74043333530426,0.634463846683502,-0.221842527389526,0.646372437477112,0.650956153869629,-0.398068875074387,0.181706041097641,0.450920969247818,-0.873872518539429,0.220478102564812,0.225269511342049,-0.949022173881531,0.589160740375519,0.293493062257767,-0.75282895565033,0.424405604600906,0.592946588993073,-0.684320271015167,0.0537682510912418,-0.324202865362167,0.944458305835724,-0.249922096729279,-0.324745059013367,0.912183940410614,-0.175815492868423,0.3834168612957,0.90668648481369,0.0744736939668655,0.385000914335251,0.919906497001648,-0.249922096729279,-0.324745059013367,0.912183940410614,-0.629638135433197,-0.332909524440765,0.701945245265961,-0.474767446517944,0.386590272188187,0.790660321712494,-0.175815492868423,0.3834168612957,0.90668648481369,\n-0.702542901039124,0.392548084259033,0.593581914901733,-0.474767446517944,0.386590272188187,0.790660321712494,-0.629638135433197,-0.332909524440765,0.701945245265961,-0.881015419960022,-0.306221485137939,0.360610902309418,0.258142352104187,0.50887656211853,-0.821222960948944,0.162849396467209,0.526230156421661,-0.834602832794189,0.145952269434929,0.566527962684631,-0.811014175415039,0.266342312097549,0.6069176197052,-0.748807609081268,0.263788342475891,0.299328684806824,-0.916961312294006,0.19240340590477,0.354867070913315,-0.914904534816742,0.162849396467209,0.526230156421661,-0.834602832794189,0.258142352104187,0.50887656211853,-0.821222960948944,0.0690941736102104,-0.258630573749542,-0.963502049446106,0.155474439263344,0.00156243739183992,-0.987838685512543,0.235058307647705,0.00269885058514774,-0.971977531909943,0.13675257563591,-0.219145968556404,-0.966060936450958,0.0786453634500504,-0.439450114965439,-0.894817590713501,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0690941736102104,-0.258630573749542,-0.963502049446106,0.13675257563591,-0.219145968556404,-0.966060936450958,0.139385372400284,-0.293043553829193,-0.945884346961975,0.0445788577198982,-0.252718240022659,-0.966512382030487,0.0458064116537571,-0.413144141435623,-0.909512877464294,0.106468603014946,-0.443950653076172,-0.889703452587128,0.142098233103752,0.253012806177139,-0.956970512866974,0.263788342475891,0.299328684806824,-0.916961312294006,0.258142352104187,0.50887656211853,-0.821222960948944,0.196265131235123,0.534957885742188,-0.821766436100006,0.235058307647705,0.00269885058514774,-0.971977531909943,0.263788342475891,0.299328684806824,-0.916961312294006,0.142098233103752,0.253012806177139,-0.956970512866974,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.13675257563591,-0.219145968556404,-0.966060936450958,0.235058307647705,0.00269885058514774,-0.971977531909943,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.0882615447044373,-0.199013933539391,-0.976014018058777,-0.0387927554547787,0.555053651332855,-0.830909490585327,\n0.0419506318867207,0.986220836639404,0.160026773810387,0.0270950496196747,0.974490761756897,0.222785964608192,0.230260863900185,0.590617835521698,-0.773401916027069,-0.00269555998966098,0.944226384162903,0.329286128282547,0.558892965316772,0.631695210933685,-0.537214875221252,0.230260863900185,0.590617835521698,-0.773401916027069,0.0270950496196747,0.974490761756897,0.222785964608192,-0.0771232843399048,0.899696409702301,0.42964905500412,0.74043333530426,0.634463846683502,-0.221842527389526,0.558892965316772,0.631695210933685,-0.537214875221252,-0.00269555998966098,0.944226384162903,0.329286128282547,0.780383825302124,0.614288032054901,0.116838775575161,-0.166241437196732,0.836733281612396,0.521767377853394,-0.227350860834122,0.778867661952972,0.584531247615814,0.662577331066132,0.589804947376251,0.46165069937706,0.662577331066132,0.589804947376251,0.46165069937706,-0.227350860834122,0.778867661952972,0.584531247615814,-0.422318667173386,0.684858381748199,0.593814790248871,0.387304782867432,0.59377658367157,0.705283224582672,0.387304782867432,0.59377658367157,0.705283224582672,-0.422318667173386,0.684858381748199,0.593814790248871,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.223836988210678,0.893291056156158,0.389779537916183,0.457618981599808,0.813868880271912,0.358053594827652,0.37424173951149,0.91025847196579,0.17712339758873,-0.702542901039124,0.392548084259033,0.593581914901733,-0.800732433795929,0.427052974700928,0.420063436031342,0.420635163784027,0.68705153465271,0.592474699020386,-0.826933801174164,0.485819309949875,0.283125460147858,-0.870735168457031,0.449585229158401,0.199231997132301,0.196103185415268,0.611983716487885,0.766171991825104,-0.870735168457031,0.449585229158401,0.199231997132301,-0.903985500335693,0.390926718711853,0.173165991902351,0.0825407654047012,0.994074046611786,0.0707375407218933,0.196103185415268,0.611983716487885,0.766171991825104,0.0218184478580952,0.990070343017578,-0.13886933028698,0.0744736939668655,0.385000914335251,0.919906497001648,-0.175815492868423,0.3834168612957,0.90668648481369,\n0.122364826500416,0.988039612770081,-0.0938328057527542,0.122364826500416,0.988039612770081,-0.0938328057527542,-0.175815492868423,0.3834168612957,0.90668648481369,-0.474767446517944,0.386590272188187,0.790660321712494,0.261956453323364,0.964480102062225,0.0340141989290714,0.261956453323364,0.964480102062225,0.0340141989290714,-0.474767446517944,0.386590272188187,0.790660321712494,-0.702542901039124,0.392548084259033,0.593581914901733,0.37424173951149,0.91025847196579,0.17712339758873,0.617900848388672,0.738122165203094,0.270876914262772,0.457618981599808,0.813868880271912,0.358053594827652,0.420635163784027,0.68705153465271,0.592474699020386,0.554794549942017,0.63729065656662,0.534849166870117,0.39146089553833,0.900987803936005,-0.187027588486671,0.261956453323364,0.964480102062225,0.0340141989290714,0.37424173951149,0.91025847196579,0.17712339758873,0.53197318315506,0.845954120159149,0.0369608402252197,0.179319217801094,0.922120809555054,-0.342837929725647,0.122364826500416,0.988039612770081,-0.0938328057527542,0.261956453323364,0.964480102062225,0.0340141989290714,0.39146089553833,0.900987803936005,-0.187027588486671,0.00435609184205532,0.929633140563965,-0.368460655212402,0.0218184478580952,0.990070343017578,-0.13886933028698,0.122364826500416,0.988039612770081,-0.0938328057527542,0.179319217801094,0.922120809555054,-0.342837929725647,-0.0101916557177901,0.912391781806946,0.409191101789474,-0.112045332789421,0.883429408073425,0.45497065782547,-0.00269555998966098,0.944226384162903,0.329286128282547,0.0270950496196747,0.974490761756897,0.222785964608192,-0.112045332789421,0.883429408073425,0.45497065782547,-0.258110016584396,0.811675071716309,0.523987472057343,-0.0771232843399048,0.899696409702301,0.42964905500412,-0.00269555998966098,0.944226384162903,0.329286128282547,-0.373825579881668,0.746838629245758,0.549987733364105,-0.166241437196732,0.836733281612396,0.521767377853394,-0.0771232843399048,0.899696409702301,0.42964905500412,-0.258110016584396,0.811675071716309,0.523987472057343,-0.166241437196732,0.836733281612396,0.521767377853394,\n-0.373825579881668,0.746838629245758,0.549987733364105,-0.39384588599205,0.733602285385132,0.553816795349121,-0.227350860834122,0.778867661952972,0.584531247615814,-0.39384588599205,0.733602285385132,0.553816795349121,-0.460472017526627,0.662255048751831,0.591086983680725,-0.422318667173386,0.684858381748199,0.593814790248871,-0.227350860834122,0.778867661952972,0.584531247615814,-0.460472017526627,0.662255048751831,0.591086983680725,-0.619935512542725,0.784334897994995,0.0223318859934807,-0.20431387424469,0.977353155612946,-0.0551062189042568,-0.422318667173386,0.684858381748199,0.593814790248871,0.327279478311539,0.828797340393066,0.453853607177734,0.0825407654047012,0.994074046611786,0.0707375407218933,-0.20431387424469,0.977353155612946,-0.0551062189042568,-0.619935512542725,0.784334897994995,0.0223318859934807,0.347248166799545,0.561754763126373,0.75089967250824,0.196103185415268,0.611983716487885,0.766171991825104,0.0825407654047012,0.994074046611786,0.0707375407218933,0.327279478311539,0.828797340393066,0.453853607177734,0.554794549942017,0.63729065656662,0.534849166870117,0.420635163784027,0.68705153465271,0.592474699020386,0.196103185415268,0.611983716487885,0.766171991825104,0.347248166799545,0.561754763126373,0.75089967250824,-0.800732433795929,0.427052974700928,0.420063436031342,-0.702542901039124,0.392548084259033,0.593581914901733,-0.881015419960022,-0.306221485137939,0.360610902309418,-0.971851825714111,-0.229726418852806,0.0522474460303783,-0.960497379302979,-0.120281100273132,-0.250952750444412,-0.905991911888123,-0.0693745836615562,-0.417571365833282,-0.870735168457031,0.449585229158401,0.199231997132301,-0.826933801174164,0.485819309949875,0.283125460147858,-0.905991911888123,-0.0693745836615562,-0.417571365833282,-0.895736455917358,-0.0740359798073769,-0.438377469778061,-0.903985500335693,0.390926718711853,0.173165991902351,-0.870735168457031,0.449585229158401,0.199231997132301,0.430973529815674,0.546808898448944,0.717817425727844,0.42970210313797,0.768015503883362,0.474877148866653,-0.339239358901978,0.848914384841919,0.405291259288788,\n-0.365288615226746,0.685251891613007,0.630074620246887,-0.349254995584488,0.931400954723358,0.102533832192421,-0.339239358901978,0.848914384841919,0.405291259288788,0.42970210313797,0.768015503883362,0.474877148866653,0.471417188644409,0.872199058532715,0.130516812205315,-0.349305719137192,0.811025559902191,-0.469279229640961,0.524978220462799,0.717848002910614,-0.457265913486481,0.49711886048317,0.498656928539276,-0.710080325603485,-0.354273974895477,0.577595055103302,-0.735441267490387,-0.263506501913071,-0.108145013451576,-0.958576560020447,-0.354273974895477,0.577595055103302,-0.735441267490387,0.49711886048317,0.498656928539276,-0.710080325603485,0.421276032924652,-0.302525490522385,-0.854988157749176,0.54582554101944,-0.560542941093445,-0.622788965702057,0.652710020542145,0.543907403945923,-0.527384459972382,0.0589214377105236,0.108213946223259,-0.99237996339798,0.0839502513408661,-0.381248086690903,-0.920653164386749,-0.248638898134232,0.048121701925993,-0.967400133609772,0.0589214377105236,0.108213946223259,-0.99237996339798,0.652710020542145,0.543907403945923,-0.527384459972382,0.442993491888046,0.219760671257973,-0.869173228740692,0.613709151744843,-0.52058732509613,-0.593590676784515,0.764467060565948,-0.53394079208374,-0.361244171857834,0.218565791845322,-0.866421818733215,-0.448934614658356,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.764467060565948,-0.53394079208374,-0.361244171857834,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.218565791845322,-0.866421818733215,-0.448934614658356,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.932840287685394,-0.323781669139862,0.158033236861229,0.534525871276855,-0.813466727733612,0.229246467351913,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.654802083969116,-0.347440212965012,0.67120748758316,0.646713316440582,-0.673043549060822,0.358851253986359,0.916919708251953,-0.248773142695427,0.312041908502579,0.685809075832367,-0.12582391500473,0.716822326183319,\n0.368975192308426,0.372379690408707,0.851581275463104,0.430973529815674,0.546808898448944,0.717817425727844,-0.365288615226746,0.685251891613007,0.630074620246887,-0.0639391615986824,0.658531367778778,0.749832093715668,0.916756093502045,0.0901993364095688,0.389130234718323,0.93030720949173,0.248524934053421,0.269747763872147,0.42970210313797,0.768015503883362,0.474877148866653,0.430973529815674,0.546808898448944,0.717817425727844,0.93030720949173,0.248524934053421,0.269747763872147,0.945589601993561,0.313947737216949,0.0854233801364899,0.471417188644409,0.872199058532715,0.130516812205315,0.42970210313797,0.768015503883362,0.474877148866653,0.968841314315796,0.185883238911629,-0.163688346743584,0.524978220462799,0.717848002910614,-0.457265913486481,0.517808675765991,0.838519096374512,-0.169587478041649,0.964999854564667,0.254521876573563,-0.0631974339485168,0.789066255092621,-0.467570185661316,-0.398437708616257,0.421276032924652,-0.302525490522385,-0.854988157749176,0.49711886048317,0.498656928539276,-0.710080325603485,0.958566963672638,0.124525241553783,-0.256208688020706,0.837648034095764,0.514832735061646,-0.182463780045509,0.554449737071991,0.577977955341339,0.598771214485168,0.437207967042923,0.465549558401108,0.76948869228363,0.996942400932312,0.0589848347008228,-0.051250733435154,0.849660098552704,0.510039925575256,0.133928999304771,0.78013014793396,0.624480009078979,-0.0377050787210464,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.764467060565948,-0.53394079208374,-0.361244171857834,0.78013014793396,0.624480009078979,-0.0377050787210464,0.799383401870728,0.596614599227905,-0.0709738805890083,0.932840287685394,-0.323781669139862,0.158033236861229,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.799383401870728,0.596614599227905,-0.0709738805890083,0.835493862628937,0.547001540660858,0.0523386560380459,0.916919708251953,-0.248773142695427,0.312041908502579,0.932840287685394,-0.323781669139862,0.158033236861229,0.835218191146851,-0.360097140073776,0.415620774030685,0.806149482727051,-0.532726168632507,0.257538169622421,\n0.112480655312538,-0.860872745513916,0.496231973171234,0.123612143099308,-0.593166947364807,0.795533180236816,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0904572755098343,-0.981297671794891,0.169918611645699,0.775248348712921,-0.624625861644745,0.0939816311001778,0.705088436603546,-0.598325669765472,-0.380600422620773,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.74578994512558,-0.633161306381226,-0.207133173942566,0.647948265075684,-0.685174643993378,-0.332714289426804,0.0439913086593151,-0.675665616989136,-0.735894501209259,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.705088436603546,-0.598325669765472,-0.380600422620773,0.201858729124069,0.87289696931839,0.444189012050629,0.285585820674896,0.936043798923492,-0.20557901263237,0.132751479744911,0.960573315620422,-0.244286626577377,-0.00299930199980736,0.929396331310272,0.36907109618187,0.0780242905020714,0.996866285800934,0.0130291758105159,0.0320413000881672,0.998972654342651,-0.0320465676486492,0.141466349363327,0.962726950645447,-0.230529963970184,0.238877683877945,0.949131786823273,-0.205149352550507,-0.00762177817523479,0.899371445178986,0.437118947505951,-0.112318813800812,0.902268052101135,0.416289359331131,0.0320413000881672,0.998972654342651,-0.0320465676486492,0.0780242905020714,0.996866285800934,0.0130291758105159,0.135901644825935,0.703174889087677,0.697908222675323,-0.158927887678146,0.672389388084412,0.722934603691101,-0.112318813800812,0.902268052101135,0.416289359331131,-0.00762177817523479,0.899371445178986,0.437118947505951,0.663097739219666,-0.724811255931854,0.186949267983437,0.835218191146851,-0.360097140073776,0.415620774030685,0.123612143099308,-0.593166947364807,0.795533180236816,0.159164875745773,-0.84468400478363,0.511053323745728,0.114869266748428,0.74843168258667,0.653188347816467,0.0335473045706749,0.692889869213104,0.720262587070465,0.55090343952179,0.499813765287399,0.668349921703339,\n0.388264060020447,0.528846085071564,0.754700541496277,0.946820557117462,-0.166022479534149,-0.275621712207794,0.704087793827057,-0.576694130897522,-0.414347946643829,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.996236562728882,0.0134180961176753,-0.0856306329369545,-0.0757745653390884,0.59090781211853,-0.803172528743744,0.526131212711334,0.493667006492615,-0.692444086074829,0.491935312747955,0.72918576002121,-0.475697129964828,0.0196502637118101,0.849765479564667,-0.52679455280304,0.765287220478058,-0.345726698637009,-0.542962729930878,0.316276580095291,-0.60947847366333,-0.726983547210693,0.704087793827057,-0.576694130897522,-0.414347946643829,0.946820557117462,-0.166022479534149,-0.275621712207794,0.996236562728882,0.0134180961176753,-0.0856306329369545,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.929248809814453,-0.338162571191788,0.148804187774658,0.986967325210571,0.15194895863533,0.0529817342758179,0.970865368843079,0.0892849490046501,0.222370475530624,0.91059011220932,-0.28900209069252,0.295471668243408,0.830892741680145,-0.200436040759087,0.51907867193222,0.92408949136734,-0.175655707716942,0.339416593313217,0.526131212711334,0.493667006492615,-0.692444086074829,-0.0757745653390884,0.59090781211853,-0.803172528743744,-0.103349760174751,-0.10200422257185,-0.989400804042816,0.509015023708344,-0.485809624195099,-0.71055805683136,0.066303126513958,0.98921149969101,0.130631282925606,0.0600598677992821,0.978212475776672,-0.198728814721107,0.540044844150543,0.824666082859039,-0.168158859014511,0.565629243850708,0.815166532993317,0.124768301844597,0.0335473045706749,0.692889869213104,0.720262587070465,0.0757396295666695,0.879416644573212,0.469989240169525,0.558709442615509,0.701101422309875,0.443058162927628,0.55090343952179,0.499813765287399,0.668349921703339,0.0757396295666695,0.879416644573212,0.469989240169525,0.0335473045706749,0.692889869213104,0.720262587070465,-0.365288615226746,0.685251891613007,0.630074620246887,-0.339239358901978,0.848914384841919,0.405291259288788,0.066303126513958,0.98921149969101,0.130631282925606,\n0.0757396295666695,0.879416644573212,0.469989240169525,-0.339239358901978,0.848914384841919,0.405291259288788,-0.349254995584488,0.931400954723358,0.102533832192421,0.0196502637118101,0.849765479564667,-0.52679455280304,0.0600598677992821,0.978212475776672,-0.198728814721107,-0.343787729740143,0.921479761600494,-0.180790051817894,-0.349305719137192,0.811025559902191,-0.469279229640961,-0.263506501913071,-0.108145013451576,-0.958576560020447,-0.103349760174751,-0.10200422257185,-0.989400804042816,-0.0757745653390884,0.59090781211853,-0.803172528743744,-0.354273974895477,0.577595055103302,-0.735441267490387,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.230070114135742,-0.386967688798904,-0.89292985200882,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.0589214377105236,0.108213946223259,-0.99237996339798,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.316276580095291,-0.60947847366333,-0.726983547210693,0.00693236710503697,-0.478508800268173,-0.878055393695831,-0.23220556974411,-0.496286630630493,-0.836528658866882,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.704087793827057,-0.576694130897522,-0.414347946643829,0.218565791845322,-0.866421818733215,-0.448934614658356,0.929248809814453,-0.338162571191788,0.148804187774658,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.534525871276855,-0.813466727733612,0.229246467351913,0.646713316440582,-0.673043549060822,0.358851253986359,0.91059011220932,-0.28900209069252,0.295471668243408,0.929248809814453,-0.338162571191788,0.148804187774658,0.534525871276855,-0.813466727733612,0.229246467351913,-0.0639391615986824,0.658531367778778,0.749832093715668,0.114869266748428,0.74843168258667,0.653188347816467,0.388264060020447,0.528846085071564,0.754700541496277,0.189128592610359,0.522824287414551,0.831194996833801,0.54582554101944,-0.560542941093445,-0.622788965702057,0.0839502513408661,-0.381248086690903,-0.920653164386749,\n-0.263506501913071,-0.108145013451576,-0.958576560020447,0.421276032924652,-0.302525490522385,-0.854988157749176,0.230070114135742,-0.386967688798904,-0.89292985200882,0.509015023708344,-0.485809624195099,-0.71055805683136,-0.103349760174751,-0.10200422257185,-0.989400804042816,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.418020725250244,-0.127127349376678,-0.899498343467712,0.482518672943115,-0.357222050428391,-0.799730002880096,0.527646243572235,-0.330830633640289,-0.782394111156464,0.493177682161331,0.0824330747127533,-0.866014182567596,0.00693236710503697,-0.478508800268173,-0.878055393695831,0.482518672943115,-0.357222050428391,-0.799730002880096,0.418020725250244,-0.127127349376678,-0.899498343467712,-0.027174474671483,-0.150700747966766,-0.988205909729004,-0.248638898134232,0.048121701925993,-0.967400133609772,-0.23220556974411,-0.496286630630493,-0.836528658866882,0.00693236710503697,-0.478508800268173,-0.878055393695831,-0.027174474671483,-0.150700747966766,-0.988205909729004,0.464636594057083,-0.415377110242844,-0.782032430171967,-0.23220556974411,-0.496286630630493,-0.836528658866882,-0.248638898134232,0.048121701925993,-0.967400133609772,0.442993491888046,0.219760671257973,-0.869173228740692,0.338892996311188,0.40640527009964,0.84852010011673,0.037119422107935,0.39716312289238,0.916997075080872,0.437207967042923,0.465549558401108,0.76948869228363,0.554449737071991,0.577977955341339,0.598771214485168,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.737872421741486,0.632259011268616,0.236204952001572,0.652710020542145,0.543907403945923,-0.527384459972382,0.54582554101944,-0.560542941093445,-0.622788965702057,0.606493294239044,0.649602949619293,0.458456039428711,0.389103561639786,0.77647876739502,0.495660334825516,0.471062362194061,0.869565486907959,0.148176074028015,0.708686351776123,0.701542615890503,0.0748436823487282,0.389103561639786,0.77647876739502,0.495660334825516,0.337217271327972,0.810059905052185,0.479674339294434,0.396661043167114,0.909007132053375,0.127929911017418,0.471062362194061,0.869565486907959,0.148176074028015,\n0.775248348712921,-0.624625861644745,0.0939816311001778,0.964999854564667,0.254521876573563,-0.0631974339485168,0.945589601993561,0.313947737216949,0.0854233801364899,0.771648705005646,-0.635727405548096,-0.0202230606228113,-0.258110016584396,0.811675071716309,0.523987472057343,0.53197318315506,0.845954120159149,0.0369608402252197,0.617900848388672,0.738122165203094,0.270876914262772,-0.373825579881668,0.746838629245758,0.549987733364105,0.396661043167114,0.909007132053375,0.127929911017418,0.337217271327972,0.810059905052185,0.479674339294434,0.558709442615509,0.701101422309875,0.443058162927628,0.565629243850708,0.815166532993317,0.124768301844597,0.646372437477112,0.650956153869629,-0.398068875074387,0.74043333530426,0.634463846683502,-0.221842527389526,0.780383825302124,0.614288032054901,0.116838775575161,0.708686351776123,0.701542615890503,0.0748436823487282,0.74043333530426,0.634463846683502,-0.221842527389526,-0.0771232843399048,0.899696409702301,0.42964905500412,-0.166241437196732,0.836733281612396,0.521767377853394,0.780383825302124,0.614288032054901,0.116838775575161,0.53197318315506,0.845954120159149,0.0369608402252197,0.37424173951149,0.91025847196579,0.17712339758873,0.457618981599808,0.813868880271912,0.358053594827652,0.617900848388672,0.738122165203094,0.270876914262772,0.945589601993561,0.313947737216949,0.0854233801364899,0.964999854564667,0.254521876573563,-0.0631974339485168,0.517808675765991,0.838519096374512,-0.169587478041649,0.471417188644409,0.872199058532715,0.130516812205315,0.74578994512558,-0.633161306381226,-0.207133173942566,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.565629243850708,0.815166532993317,0.124768301844597,0.558709442615509,0.701101422309875,0.443058162927628,0.0757396295666695,0.879416644573212,0.469989240169525,0.066303126513958,0.98921149969101,0.130631282925606,0.282073974609375,0.803686380386353,-0.523948907852173,0.132010728120804,0.613032221794128,-0.778950989246368,\n0.163574278354645,0.575437486171722,-0.801320910453796,0.320013791322708,0.764963567256927,-0.558947086334229,0.285585820674896,0.936043798923492,-0.20557901263237,0.201858729124069,0.87289696931839,0.444189012050629,0.618469655513763,0.424896746873856,0.661028027534485,0.835493862628937,0.547001540660858,0.0523386560380459,0.842455089092255,-0.136532187461853,-0.521179795265198,0.971711039543152,-0.0647541359066963,0.227122470736504,0.929154098033905,-0.212225988507271,0.302708983421326,0.92408949136734,-0.175655707716942,0.339416593313217,0.929154098033905,-0.212225988507271,0.302708983421326,0.885917663574219,-0.280271381139755,0.369591504335403,0.909235060214996,-0.290925145149231,0.297748446464539,0.92408949136734,-0.175655707716942,0.339416593313217,0.879492223262787,-0.245268657803535,0.407844007015228,0.823973476886749,-0.140763908624649,0.548865377902985,0.91181892156601,-0.103688038885593,0.397284656763077,0.918301284313202,-0.218417331576347,0.330176681280136,0.491935312747955,0.72918576002121,-0.475697129964828,0.526131212711334,0.493667006492615,-0.692444086074829,0.132010728120804,0.613032221794128,-0.778950989246368,0.282073974609375,0.803686380386353,-0.523948907852173,0.550213515758514,-0.731853306293488,0.402064383029938,0.680691421031952,-0.552797436714172,0.480701744556427,0.430274456739426,-0.536508023738861,0.725963473320007,0.307976216077805,-0.686480343341827,0.6587073802948,0.318493723869324,0.728740870952606,-0.606216490268707,0.646372437477112,0.650956153869629,-0.398068875074387,0.457759588956833,0.863344848155975,-0.21234855055809,0.320013791322708,0.764963567256927,-0.558947086334229,0.835218191146851,-0.360097140073776,0.415620774030685,0.958566963672638,0.124525241553783,-0.256208688020706,0.968841314315796,0.185883238911629,-0.163688346743584,0.806149482727051,-0.532726168632507,0.257538169622421,0.266342312097549,0.6069176197052,-0.748807609081268,0.145952269434929,0.566527962684631,-0.811014175415039,0.181706041097641,0.450920969247818,-0.873872518539429,0.424405604600906,0.592946588993073,-0.684320271015167,\n0.196265131235123,0.534957885742188,-0.821766436100006,0.258142352104187,0.50887656211853,-0.821222960948944,0.266342312097549,0.6069176197052,-0.748807609081268,0.318493723869324,0.728740870952606,-0.606216490268707,-0.349305719137192,0.811025559902191,-0.469279229640961,-0.343787729740143,0.921479761600494,-0.180790051817894,0.517808675765991,0.838519096374512,-0.169587478041649,0.524978220462799,0.717848002910614,-0.457265913486481,0.646713316440582,-0.673043549060822,0.358851253986359,0.534525871276855,-0.813466727733612,0.229246467351913,0.932840287685394,-0.323781669139862,0.158033236861229,0.916919708251953,-0.248773142695427,0.312041908502579,0.958566963672638,0.124525241553783,-0.256208688020706,0.49711886048317,0.498656928539276,-0.710080325603485,0.524978220462799,0.717848002910614,-0.457265913486481,0.968841314315796,0.185883238911629,-0.163688346743584,0.835493862628937,0.547001540660858,0.0523386560380459,0.618469655513763,0.424896746873856,0.661028027534485,0.685809075832367,-0.12582391500473,0.716822326183319,0.916919708251953,-0.248773142695427,0.312041908502579,0.775248348712921,-0.624625861644745,0.0939816311001778,0.0904572755098343,-0.981297671794891,0.169918611645699,0.112480655312538,-0.860872745513916,0.496231973171234,0.806149482727051,-0.532726168632507,0.257538169622421,0.285585820674896,0.936043798923492,-0.20557901263237,0.238877683877945,0.949131786823273,-0.205149352550507,0.141466349363327,0.962726950645447,-0.230529963970184,0.132751479744911,0.960573315620422,-0.244286626577377,0.540044844150543,0.824666082859039,-0.168158859014511,0.0600598677992821,0.978212475776672,-0.198728814721107,0.0196502637118101,0.849765479564667,-0.52679455280304,0.491935312747955,0.72918576002121,-0.475697129964828,0.970865368843079,0.0892849490046501,0.222370475530624,0.986967325210571,0.15194895863533,0.0529817342758179,0.929248809814453,-0.338162571191788,0.148804187774658,0.91059011220932,-0.28900209069252,0.295471668243408,-0.354273974895477,0.577595055103302,-0.735441267490387,-0.0757745653390884,0.59090781211853,-0.803172528743744,\n0.0196502637118101,0.849765479564667,-0.52679455280304,-0.349305719137192,0.811025559902191,-0.469279229640961,0.654802083969116,-0.347440212965012,0.67120748758316,0.830892741680145,-0.200436040759087,0.51907867193222,0.91059011220932,-0.28900209069252,0.295471668243408,0.646713316440582,-0.673043549060822,0.358851253986359,0.915336489677429,-0.234250664710999,0.327545046806335,0.955660283565521,-0.256323933601379,0.144953340291977,0.986967325210571,0.15194895863533,0.0529817342758179,0.970865368843079,0.0892849490046501,0.222370475530624,0.527646243572235,-0.330830633640289,-0.782394111156464,0.482518672943115,-0.357222050428391,-0.799730002880096,0.583753287792206,-0.402651727199554,-0.705055773258209,0.39206200838089,-0.444667458534241,-0.805331110954285,0.623417019844055,-0.452671766281128,-0.637526035308838,0.765287220478058,-0.345726698637009,-0.542962729930878,0.946820557117462,-0.166022479534149,-0.275621712207794,0.829055666923523,-0.40739643573761,-0.383007615804672,0.135901644825935,0.703174889087677,0.697908222675323,-0.00762177817523479,0.899371445178986,0.437118947505951,0.849660098552704,0.510039925575256,0.133928999304771,0.961316466331482,0.243311077356339,0.129113554954529,0.346117079257965,-0.47863432765007,-0.80691522359848,0.460681647062302,-0.288388341665268,-0.83940726518631,0.527646243572235,-0.330830633640289,-0.782394111156464,0.39206200838089,-0.444667458534241,-0.805331110954285,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.150176227092743,-0.476422011852264,-0.866296231746674,0.174190670251846,-0.475461959838867,-0.862318694591522,0.113550499081612,-0.486260622739792,-0.866404592990875,0.106468603014946,-0.443950653076172,-0.889703452587128,0.0458064116537571,-0.413144141435623,-0.909512877464294,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0786453634500504,-0.439450114965439,-0.894817590713501,-0.23220556974411,-0.496286630630493,-0.836528658866882,0.464636594057083,-0.415377110242844,-0.782032430171967,0.613709151744843,-0.52058732509613,-0.593590676784515,\n-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.961316466331482,0.243311077356339,0.129113554954529,0.849660098552704,0.510039925575256,0.133928999304771,0.764467060565948,-0.53394079208374,-0.361244171857834,0.613709151744843,-0.52058732509613,-0.593590676784515,0.135901644825935,0.703174889087677,0.697908222675323,0.437207967042923,0.465549558401108,0.76948869228363,0.037119422107935,0.39716312289238,0.916997075080872,-0.158927887678146,0.672389388084412,0.722934603691101,0.482518672943115,-0.357222050428391,-0.799730002880096,0.00693236710503697,-0.478508800268173,-0.878055393695831,0.316276580095291,-0.60947847366333,-0.726983547210693,0.765287220478058,-0.345726698637009,-0.542962729930878,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.218565791845322,-0.866421818733215,-0.448934614658356,0.704087793827057,-0.576694130897522,-0.414347946643829,0.316276580095291,-0.60947847366333,-0.726983547210693,0.113550499081612,-0.486260622739792,-0.866404592990875,0.140872359275818,-0.399173051118851,-0.905988872051239,0.140843346714973,-0.431618928909302,-0.890992820262909,0.106468603014946,-0.443950653076172,-0.889703452587128,0.140843346714973,-0.431618928909302,-0.890992820262909,0.228939339518547,-0.370276868343353,-0.900267601013184,0.139385372400284,-0.293043553829193,-0.945884346961975,0.106468603014946,-0.443950653076172,-0.889703452587128,-0.971851825714111,-0.229726418852806,0.0522474460303783,-0.960497379302979,-0.120281100273132,-0.250952750444412,-0.826933801174164,0.485819309949875,0.283125460147858,-0.800732433795929,0.427052974700928,0.420063436031342,-0.800732433795929,0.427052974700928,0.420063436031342,-0.826933801174164,0.485819309949875,0.283125460147858,0.420635163784027,0.68705153465271,0.592474699020386,0.457618981599808,0.813868880271912,0.358053594827652,-0.349254995584488,0.931400954723358,0.102533832192421,-0.343787729740143,0.921479761600494,-0.180790051817894,0.0600598677992821,0.978212475776672,-0.198728814721107,0.066303126513958,0.98921149969101,0.130631282925606,\n0.471417188644409,0.872199058532715,0.130516812205315,0.517808675765991,0.838519096374512,-0.169587478041649,-0.343787729740143,0.921479761600494,-0.180790051817894,-0.349254995584488,0.931400954723358,0.102533832192421,0.174190670251846,-0.475461959838867,-0.862318694591522,0.39206200838089,-0.444667458534241,-0.805331110954285,0.31203830242157,-0.439545303583145,-0.842277884483337,0.140872359275818,-0.399173051118851,-0.905988872051239,0.4433753490448,0.161547407507896,0.881657958030701,0.189128592610359,0.522824287414551,0.831194996833801,0.150548562407494,0.393970012664795,0.906709849834442,0.705088436603546,-0.598325669765472,-0.380600422620773,0.916756093502045,0.0901993364095688,0.389130234718323,0.812437415122986,-0.0575567446649075,0.580200552940369,0.647948265075684,-0.685174643993378,-0.332714289426804,0.189128592610359,0.522824287414551,0.831194996833801,0.4433753490448,0.161547407507896,0.881657958030701,0.368975192308426,0.372379690408707,0.851581275463104,-0.0639391615986824,0.658531367778778,0.749832093715668,0.916756093502045,0.0901993364095688,0.389130234718323,0.430973529815674,0.546808898448944,0.717817425727844,0.368975192308426,0.372379690408707,0.851581275463104,0.812437415122986,-0.0575567446649075,0.580200552940369,-0.365288615226746,0.685251891613007,0.630074620246887,0.0335473045706749,0.692889869213104,0.720262587070465,0.114869266748428,0.74843168258667,0.653188347816467,-0.0639391615986824,0.658531367778778,0.749832093715668,-0.444781541824341,-0.346720337867737,0.825805306434631,-0.41981428861618,-0.320506066083908,0.849135935306549,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.253998309373856,-0.212244898080826,0.943629682064056,0.953391134738922,-0.158550098538399,0.256724029779434,0.916560828685761,-0.24360553920269,0.317131847143173,0.918301284313202,-0.218417331576347,0.330176681280136,0.938150525093079,-0.0836314186453819,0.335975229740143,0.654802083969116,-0.347440212965012,0.67120748758316,0.164040550589561,0.209489807486534,0.963952660560608,0.92408949136734,-0.175655707716942,0.339416593313217,\n0.830892741680145,-0.200436040759087,0.51907867193222,0.0319873727858067,0.984376490116119,0.173146665096283,0.223836988210678,0.893291056156158,0.389779537916183,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.185543641448021,0.976534903049469,0.10933043807745,-0.0894755497574806,0.965718626976013,0.243683651089668,0.394804865121841,0.885042786598206,0.246634021401405,0.383488237857819,0.890466749668121,0.244960829615593,0.263491213321686,0.831329226493835,0.48935067653656,0.394804865121841,0.885042786598206,0.246634021401405,0.791727185249329,0.579225897789001,0.194075778126717,0.55004757642746,0.676443994045258,0.489766448736191,0.383488237857819,0.890466749668121,0.244960829615593,0.791727185249329,0.579225897789001,0.194075778126717,0.938301980495453,0.0685238614678383,0.338959902524948,0.858800172805786,0.271537780761719,0.434430092573166,0.55004757642746,0.676443994045258,0.489766448736191,-0.0894755497574806,0.965718626976013,0.243683651089668,0.263491213321686,0.831329226493835,0.48935067653656,-0.358905464410782,0.931329369544983,0.0617449507117271,-0.298087060451508,0.801499605178833,0.518403768539429,0.761567413806915,0.64221316576004,0.0870478227734566,0.685486555099487,0.727433860301971,-0.0307916849851608,0.858800172805786,0.271537780761719,0.434430092573166,0.947060525417328,0.264708548784256,0.181674882769585,-0.243022814393044,0.95173841714859,0.187440201640129,-0.358905464410782,0.931329369544983,0.0617449507117271,0.223836988210678,0.893291056156158,0.389779537916183,0.0319873727858067,0.984376490116119,0.173146665096283,0.0862562954425812,0.984675407409668,-0.151572123169899,0.259856075048447,0.961204409599304,0.0925252288579941,0.185543641448021,0.976534903049469,0.10933043807745,0.0825407654047012,0.994074046611786,0.0707375407218933,0.661977589130402,-0.708897471427917,-0.243413314223289,0.375436156988144,-0.682113528251648,-0.627510011196136,0.672621726989746,-0.282224327325821,-0.684053659439087,0.89782452583313,-0.295981734991074,-0.32604593038559,0.819233179092407,-0.572073757648468,-0.0398566573858261,\n0.746676325798035,-0.643010795116425,-0.17032790184021,0.939977943897247,-0.283478707075119,-0.189950734376907,0.977083265781403,-0.21279039978981,-0.00533624598756433,0.954775273799896,-0.0549841597676277,0.292200028896332,0.835695207118988,-0.485575556755066,0.256573379039764,0.859511733055115,-0.505731165409088,0.0739971473813057,0.984757125377655,-0.122858062386513,0.123123273253441,0.833409249782562,-0.0707181841135025,0.54811304807663,0.680691421031952,-0.552797436714172,0.480701744556427,0.835695207118988,-0.485575556755066,0.256573379039764,0.954775273799896,-0.0549841597676277,0.292200028896332,0.527580142021179,-0.0869907140731812,0.845039546489716,0.430274456739426,-0.536508023738861,0.725963473320007,0.680691421031952,-0.552797436714172,0.480701744556427,0.833409249782562,-0.0707181841135025,0.54811304807663,0.122565753757954,0.118542328476906,0.98535543680191,-0.141722351312637,-0.25363889336586,0.956860542297363,-0.253998309373856,-0.212244898080826,0.943629682064056,0.140111669898033,0.0783234462141991,0.987033009529114,-0.253998309373856,-0.212244898080826,0.943629682064056,-0.228407248854637,-0.205970659852028,0.951528370380402,0.185034364461899,0.0477372668683529,0.981571912765503,0.140111669898033,0.0783234462141991,0.987033009529114,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.150304853916168,-0.209269061684608,0.966237485408783,0.275597482919693,0.0508149787783623,0.95992910861969,0.185034364461899,0.0477372668683529,0.981571912765503,0.275597482919693,0.0508149787783623,0.95992910861969,-0.150304853916168,-0.209269061684608,0.966237485408783,0.0832947567105293,-0.342013299465179,0.935996174812317,0.527580142021179,-0.0869907140731812,0.845039546489716,0.000295055127935484,0.143534883856773,0.98964524269104,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.141722351312637,-0.25363889336586,0.956860542297363,0.122565753757954,0.118542328476906,0.98535543680191,0.859511733055115,-0.505731165409088,0.0739971473813057,0.819233179092407,-0.572073757648468,-0.0398566573858261,\n0.977083265781403,-0.21279039978981,-0.00533624598756433,0.984757125377655,-0.122858062386513,0.123123273253441,-0.0074951434507966,-0.537373244762421,-0.843311250209808,-0.0494538806378841,-0.556213021278381,-0.829566955566406,0.0646723359823227,-0.342740118503571,-0.937201499938965,0.216808795928955,-0.349548786878586,-0.911487579345703,0.672621726989746,-0.282224327325821,-0.684053659439087,0.375436156988144,-0.682113528251648,-0.627510011196136,0.0173844322562218,-0.524197161197662,-0.851419508457184,0.332537442445755,-0.288520336151123,-0.897872388362885,0.332537442445755,-0.288520336151123,-0.897872388362885,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0074951434507966,-0.537373244762421,-0.843311250209808,0.216808795928955,-0.349548786878586,-0.911487579345703,0.746676325798035,-0.643010795116425,-0.17032790184021,0.661977589130402,-0.708897471427917,-0.243413314223289,0.89782452583313,-0.295981734991074,-0.32604593038559,0.939977943897247,-0.283478707075119,-0.189950734376907,0.704553008079529,0.389835178852081,0.592987060546875,0.77562689781189,0.195846498012543,0.60003924369812,0.960910856723785,0.17212125658989,0.216851592063904,0.860680103302002,0.465308487415314,0.206682801246643,0.77562689781189,0.195846498012543,0.60003924369812,0.813431859016418,0.0690318197011948,0.577549338340759,0.980262100696564,0.00691105145961046,0.197581350803375,0.960910856723785,0.17212125658989,0.216851592063904,0.813431859016418,0.0690318197011948,0.577549338340759,0.80047994852066,-0.0622782073915005,0.596115171909332,0.929154098033905,-0.212225988507271,0.302708983421326,0.971711039543152,-0.0647541359066963,0.227122470736504,0.885917663574219,-0.280271381139755,0.369591504335403,0.747986078262329,-0.084919698536396,0.658259391784668,0.729275226593018,-0.11221731454134,0.674955487251282,0.879492223262787,-0.245268657803535,0.407844007015228,0.823973476886749,-0.140763908624649,0.548865377902985,0.610790312290192,-0.062268540263176,0.789340078830719,0.493080407381058,0.0869515836238861,0.865627586841583,0.709406793117523,0.0714843049645424,0.701164722442627,\n0.747986078262329,-0.084919698536396,0.658259391784668,0.885917663574219,-0.280271381139755,0.369591504335403,0.929154098033905,-0.212225988507271,0.302708983421326,0.80047994852066,-0.0622782073915005,0.596115171909332,0.610790312290192,-0.062268540263176,0.789340078830719,0.823973476886749,-0.140763908624649,0.548865377902985,0.879492223262787,-0.245268657803535,0.407844007015228,0.729275226593018,-0.11221731454134,0.674955487251282,0.63835346698761,0.527818858623505,0.560278594493866,0.704553008079529,0.389835178852081,0.592987060546875,0.860680103302002,0.465308487415314,0.206682801246643,0.7801553606987,0.610978186130524,0.134399503469467,0.665781199932098,0.528658747673035,0.526550352573395,0.63835346698761,0.527818858623505,0.560278594493866,0.7801553606987,0.610978186130524,0.134399503469467,0.761567413806915,0.64221316576004,0.0870478227734566,0.895810067653656,0.254065722227097,-0.364657372236252,0.68595552444458,0.102393850684166,-0.720403015613556,0.960910856723785,0.17212125658989,0.216851592063904,0.980262100696564,0.00691105145961046,0.197581350803375,0.842455089092255,-0.136532187461853,-0.521179795265198,0.0516201481223106,0.961737930774689,-0.26906418800354,0.0456644557416439,0.4627845287323,-0.885293841362,0.585361659526825,0.51231449842453,-0.628399193286896,0.860680103302002,0.465308487415314,0.206682801246643,0.960910856723785,0.17212125658989,0.216851592063904,0.68595552444458,0.102393850684166,-0.720403015613556,0.810609877109528,0.241179883480072,-0.533613920211792,0.7801553606987,0.610978186130524,0.134399503469467,0.860680103302002,0.465308487415314,0.206682801246643,0.810609877109528,0.241179883480072,-0.533613920211792,0.745590567588806,0.664693832397461,0.047716099768877,0.761567413806915,0.64221316576004,0.0870478227734566,0.7801553606987,0.610978186130524,0.134399503469467,0.745590567588806,0.664693832397461,0.047716099768877,0.685486555099487,0.727433860301971,-0.0307916849851608,0.0745275393128395,0.431530833244324,0.899014353752136,0.550135016441345,0.461672753095627,0.695851802825928,\n0.266888707876205,0.958940505981445,0.0959352776408196,0.0482074841856956,0.963629901409149,0.262856423854828,-0.0702482014894485,0.80213338136673,0.592998504638672,0.0319873727858067,0.984376490116119,0.173146665096283,0.185543641448021,0.976534903049469,0.10933043807745,0.386715173721313,0.754913926124573,0.529675722122192,0.266888707876205,0.958940505981445,0.0959352776408196,0.550135016441345,0.461672753095627,0.695851802825928,0.750702619552612,0.512931108474731,0.416349858045578,0.393054485321045,0.919416308403015,-0.0134849762544036,0.393054485321045,0.919416308403015,-0.0134849762544036,0.750702619552612,0.512931108474731,0.416349858045578,0.386715173721313,0.754913926124573,0.529675722122192,0.259856075048447,0.961204409599304,0.0925252288579941,-0.0619851760566235,-0.854239583015442,0.516171097755432,-0.115733034908772,-0.588226437568665,0.800372123718262,0.123612143099308,-0.593166947364807,0.795533180236816,0.112480655312538,-0.860872745513916,0.496231973171234,-0.112318813800812,0.902268052101135,0.416289359331131,0.0113279931247234,0.923928916454315,0.382396370172501,0.107348747551441,0.986339747905731,-0.124940805137157,0.0320413000881672,0.998972654342651,-0.0320465676486492,-0.158927887678146,0.672389388084412,0.722934603691101,-0.0713663622736931,0.679935038089752,0.729791164398193,0.0113279931247234,0.923928916454315,0.382396370172501,-0.112318813800812,0.902268052101135,0.416289359331131,0.141376316547394,0.226959496736526,0.963588178157806,-0.119005374610424,0.237747848033905,0.964009165763855,-0.106734469532967,0.405797332525253,0.907709360122681,0.037119422107935,0.39716312289238,0.916997075080872,-0.115733034908772,-0.588226437568665,0.800372123718262,-0.087286576628685,-0.801884651184082,0.591068506240845,0.159164875745773,-0.84468400478363,0.511053323745728,0.123612143099308,-0.593166947364807,0.795533180236816,-0.0289680454879999,-0.984227418899536,0.17452010512352,-0.0619851760566235,-0.854239583015442,0.516171097755432,0.112480655312538,-0.860872745513916,0.496231973171234,0.0904572755098343,-0.981297671794891,0.169918611645699,\n0.037119422107935,0.39716312289238,0.916997075080872,-0.106734469532967,0.405797332525253,0.907709360122681,-0.0713663622736931,0.679935038089752,0.729791164398193,-0.158927887678146,0.672389388084412,0.722934603691101,0.155474439263344,0.00156243739183992,-0.987838685512543,0.19240340590477,0.354867070913315,-0.914904534816742,0.263788342475891,0.299328684806824,-0.916961312294006,0.235058307647705,0.00269885058514774,-0.971977531909943,0.0482074841856956,0.963629901409149,0.262856423854828,0.266888707876205,0.958940505981445,0.0959352776408196,-0.266191899776459,0.70389860868454,-0.658535182476044,-0.0404882803559303,0.532536089420319,-0.845438301563263,0.230260863900185,0.590617835521698,-0.773401916027069,0.220478102564812,0.225269511342049,-0.949022173881531,-0.0597109496593475,0.20538541674614,-0.976857900619507,-0.0387927554547787,0.555053651332855,-0.830909490585327,0.220478102564812,0.225269511342049,-0.949022173881531,0.181706041097641,0.450920969247818,-0.873872518539429,-0.0473092421889305,0.433387726545334,-0.899964928627014,-0.0597109496593475,0.20538541674614,-0.976857900619507,0.145952269434929,0.566527962684631,-0.811014175415039,0.162849396467209,0.526230156421661,-0.834602832794189,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0390528962016106,0.551643908023834,-0.833164989948273,0.162849396467209,0.526230156421661,-0.834602832794189,0.19240340590477,0.354867070913315,-0.914904534816742,-0.0513396598398685,0.366866230964661,-0.928855955600739,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,0.155474439263344,0.00156243739183992,-0.987838685512543,0.0690941736102104,-0.258630573749542,-0.963502049446106,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.055810023099184,-0.2584228515625,-0.964418411254883,0.0690941736102104,-0.258630573749542,-0.963502049446106,0.0340255945920944,-0.412763565778732,-0.910202443599701,-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.000145141151733696,-0.408616960048676,-0.912705957889557,\n0.0458064116537571,-0.413144141435623,-0.909512877464294,0.0445788577198982,-0.252718240022659,-0.966512382030487,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,0.0445788577198982,-0.252718240022659,-0.966512382030487,-0.00791200343519449,-0.3136927485466,-0.949491560459137,-0.000159720322699286,-0.320416629314423,-0.947276711463928,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0862562954425812,0.984675407409668,-0.151572123169899,0.0205553397536278,0.989267349243164,-0.144663617014885,0.0492917597293854,0.955946862697601,0.28937155008316,-0.318083673715591,0.947685122489929,-0.0267524290829897,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0492917597293854,0.955946862697601,0.28937155008316,0.0462776906788349,0.971960961818695,0.23054338991642,0.179319217801094,0.922120809555054,-0.342837929725647,-0.0101916557177901,0.912391781806946,0.409191101789474,0.0557159669697285,0.916767716407776,0.395515710115433,0.00435609184205532,0.929633140563965,-0.368460655212402,-0.000357056385837495,-0.611226499080658,-0.791455626487732,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.0924276784062386,-0.684463918209076,-0.723164081573486,-0.000515560561325401,-0.726091146469116,-0.68759822845459,-0.0101916557177901,0.912391781806946,0.409191101789474,0.0270950496196747,0.974490761756897,0.222785964608192,0.0419506318867207,0.986220836639404,0.160026773810387,0.0557159669697285,0.916767716407776,0.395515710115433,-0.0473092421889305,0.433387726545334,-0.899964928627014,0.181706041097641,0.450920969247818,-0.873872518539429,0.145952269434929,0.566527962684631,-0.811014175415039,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.020222021266818,-0.390664726495743,-0.920310854911804,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0458064116537571,-0.413144141435623,-0.909512877464294,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-0.000159720322699286,-0.320416629314423,-0.947276711463928,\n-0.00791200343519449,-0.3136927485466,-0.949491560459137,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.000357056385837495,-0.611226499080658,-0.791455626487732,-0.0513396598398685,0.366866230964661,-0.928855955600739,0.19240340590477,0.354867070913315,-0.914904534816742,0.155474439263344,0.00156243739183992,-0.987838685512543,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,0.353190511465073,0.114995338022709,0.928457081317902,0.185034364461899,0.0477372668683529,0.981571912765503,0.275597482919693,0.0508149787783623,0.95992910861969,0.493080407381058,0.0869515836238861,0.865627586841583,0.307976216077805,-0.686480343341827,0.6587073802948,0.430274456739426,-0.536508023738861,0.725963473320007,0.0832947567105293,-0.342013299465179,0.935996174812317,-0.101489536464214,-0.459648072719574,0.882283091545105,0.230070114135742,-0.386967688798904,-0.89292985200882,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.493177682161331,0.0824330747127533,-0.866014182567596,0.303897142410278,-0.58835905790329,-0.749319791793823,-0.0341968536376953,-0.89968353509903,-0.43520113825798,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.0589963421225548,-0.720462381839752,-0.690980017185211,-0.0373940095305443,-0.711677670478821,-0.701510190963745,-0.0297683943063021,-0.996251881122589,-0.0812156423926353,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0672344118356705,-0.90103155374527,-0.428510963916779,-0.0341968536376953,-0.89968353509903,-0.43520113825798,-0.0373940095305443,-0.711677670478821,-0.701510190963745,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.0439913086593151,-0.675665616989136,-0.735894501209259,-0.0370400324463844,-0.668275535106659,-0.742991149425507,-0.0370400324463844,-0.668275535106659,-0.742991149425507,0.0439913086593151,-0.675665616989136,-0.735894501209259,0.254503726959229,-0.798789858818054,-0.545126259326935,-0.0372622646391392,-0.693815767765045,-0.719187915325165,0.00493840174749494,0.00535354111343622,-0.999973475933075,-0.0351880826056004,-0.407869398593903,-0.912361979484558,\n0.810609877109528,0.241179883480072,-0.533613920211792,0.68595552444458,0.102393850684166,-0.720403015613556,0.254503726959229,-0.798789858818054,-0.545126259326935,0.810609877109528,0.241179883480072,-0.533613920211792,-0.0351880826056004,-0.407869398593903,-0.912361979484558,-0.0372622646391392,-0.693815767765045,-0.719187915325165,0.0456644557416439,0.4627845287323,-0.885293841362,0.00493840174749494,0.00535354111343622,-0.999973475933075,0.68595552444458,0.102393850684166,-0.720403015613556,0.895810067653656,0.254065722227097,-0.364657372236252,-0.0297683943063021,-0.996251881122589,-0.0812156423926353,-0.0289680454879999,-0.984227418899536,0.17452010512352,0.0904572755098343,-0.981297671794891,0.169918611645699,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0516201481223106,0.961737930774689,-0.26906418800354,0.132751479744911,0.960573315620422,-0.244286626577377,0.141466349363327,0.962726950645447,-0.230529963970184,0.107348747551441,0.986339747905731,-0.124940805137157,0.437207967042923,0.465549558401108,0.76948869228363,0.135901644825935,0.703174889087677,0.697908222675323,0.961316466331482,0.243311077356339,0.129113554954529,0.996942400932312,0.0589848347008228,-0.051250733435154,0.961316466331482,0.243311077356339,0.129113554954529,0.613709151744843,-0.52058732509613,-0.593590676784515,0.464636594057083,-0.415377110242844,-0.782032430171967,0.996942400932312,0.0589848347008228,-0.051250733435154,0.837648034095764,0.514832735061646,-0.182463780045509,0.996942400932312,0.0589848347008228,-0.051250733435154,0.464636594057083,-0.415377110242844,-0.782032430171967,0.442993491888046,0.219760671257973,-0.869173228740692,-0.554342925548553,0.567035973072052,0.609240651130676,-0.52557498216629,0.553365111351013,0.646187245845795,-0.426482230424881,0.398722440004349,0.811870276927948,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.134134471416473,0.255289256572723,0.957515180110931,\n0.0454900041222572,0.2624471783638,0.963873505592346,0.0673762187361717,0.208747074007988,0.975646018981934,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.509144961833954,0.274927198886871,0.815589666366577,-0.134134471416473,0.255289256572723,0.957515180110931,-0.384194701910019,0.144494697451591,0.911874830722809,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.00847726315259933,-0.531524419784546,-0.847000539302826,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.426482230424881,0.398722440004349,0.811870276927948,-0.428126484155655,0.265849471092224,0.863731324672699,-0.338261693716049,0.297003328800201,0.892954647541046,-0.338261693716049,0.297003328800201,0.892954647541046,-0.428126484155655,0.265849471092224,0.863731324672699,-0.28684601187706,0.185986965894699,0.939749002456665,-0.887027978897095,0.338621288537979,0.313874155282974,-0.553295969963074,0.315833359956741,0.770787119865417,-0.877903461456299,0.125808238983154,0.462014973163605,0.203874498605728,0.632674932479858,0.747099459171295,0.502047836780548,0.814261257648468,0.291421681642532,\n0.414917647838593,0.779010057449341,0.470092207193375,0.0901670306921005,0.507265865802765,0.8570596575737,0.251353085041046,0.650286138057709,0.716902732849121,0.203874498605728,0.632674932479858,0.747099459171295,0.203874498605728,0.632674932479858,0.747099459171295,0.251353085041046,0.650286138057709,0.716902732849121,0.502047836780548,0.814261257648468,0.291421681642532,-0.553295969963074,0.315833359956741,0.770787119865417,-0.426482230424881,0.398722440004349,0.811870276927948,-0.338261693716049,0.297003328800201,0.892954647541046,-0.509144961833954,0.274927198886871,0.815589666366577,-0.117755182087421,0.405977427959442,0.906264901161194,-0.134134471416473,0.255289256572723,0.957515180110931,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.474711626768112,0.621306002140045,-0.623400151729584,0.0345219671726227,0.469873160123825,0.882058680057526,-0.362813800573349,0.452378064393997,0.814690291881561,-0.0333014093339443,0.336885303258896,0.940956592559814,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.0402880981564522,-0.602410852909088,0.797168791294098,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.529653549194336,0.324454098939896,-0.783707022666931,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.21317532658577,0.371294349431992,0.903712749481201,-0.747875332832336,-0.0330392643809319,0.663016498088837,-0.347785919904709,0.133236810564995,0.928058683872223,-0.362813800573349,0.452378064393997,0.814690291881561,-0.598303258419037,0.575496375560761,0.557527720928192,-0.734153270721436,0.469748914241791,0.490260034799576,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.210184469819069,0.149185121059418,-0.966212332248688,\n-0.498561441898346,0.123794674873352,-0.857969343662262,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.210184469819069,0.149185121059418,-0.966212332248688,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,-0.225950360298157,-0.351854801177979,-0.908374726772308,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.550671279430389,-0.263566613197327,-0.79201877117157,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.210184469819069,0.149185121059418,-0.966212332248688,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.374457865953445,-0.757000803947449,-0.535472750663757,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.249380812048912,0.181461036205292,0.951252400875092,-0.704255282878876,-0.136106103658676,0.696778059005737,-0.33330100774765,0.819487571716309,0.466208755970001,-0.249380812048912,0.181461036205292,0.951252400875092,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.656458854675293,0.394298911094666,0.643109738826752,-0.249380812048912,0.181461036205292,0.951252400875092,-0.33330100774765,0.819487571716309,0.466208755970001,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.704255282878876,-0.136106103658676,0.696778059005737,-0.249380812048912,0.181461036205292,0.951252400875092,\n-0.656458854675293,0.394298911094666,0.643109738826752,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.00815227441489697,0.997119009494781,0.075413390994072,0.255933493375778,0.96283483505249,-0.0862965509295464,-0.106476634740829,0.986019790172577,0.128170698881149,-0.761694371700287,0.389483571052551,0.517807185649872,-0.887027978897095,0.338621288537979,0.313874155282974,-0.877903461456299,0.125808238983154,0.462014973163605,0.502047836780548,0.814261257648468,0.291421681642532,0.421662032604218,0.906709790229797,0.00885869562625885,0.414917647838593,0.779010057449341,0.470092207193375,0.502047836780548,0.814261257648468,0.291421681642532,0.325284242630005,0.933813154697418,0.148940086364746,0.421662032604218,0.906709790229797,0.00885869562625885,-0.0681053325533867,-0.345358580350876,-0.935996353626251,0.00452618766576052,-0.317399501800537,-0.948281109333038,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.554342925548553,0.567035973072052,0.609240651130676,-0.887027978897095,0.338621288537979,0.313874155282974,-0.684342086315155,0.70050323009491,0.202413260936737,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.95565664768219,0.128923356533051,0.264762312173843,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.874421000480652,0.028505390509963,-0.484329789876938,0.199702888727188,0.793615162372589,0.574711859226227,0.0534563846886158,0.983699679374695,0.171689838171005,0.325284242630005,0.933813154697418,0.148940086364746,-0.263717442750931,0.775425553321838,0.573731958866119,-0.182774692773819,0.975853502750397,0.119596734642982,-0.106476634740829,0.986019790172577,0.128170698881149,\n-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.0402880981564522,-0.602410852909088,0.797168791294098,0.183785125613213,-0.564789414405823,0.80450975894928,-0.141512751579285,-0.835205972194672,0.531418025493622,0.0345219671726227,0.469873160123825,0.882058680057526,0.246256619691849,0.328444272279739,0.911856353282928,0.0388557612895966,0.393748223781586,0.918396770954132,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.0830294638872147,-0.341880321502686,0.93606835603714,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.0824920982122421,0.586886823177338,-0.805455684661865,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.249380812048912,0.181461036205292,0.951252400875092,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.0638052001595497,0.994221389293671,-0.086329497396946,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.249380812048912,0.181461036205292,0.951252400875092,-0.0534899868071079,0.977624833583832,-0.203441679477692,0.665781199932098,0.528658747673035,0.526550352573395,0.545623481273651,0.394130259752274,0.739564955234528,0.63835346698761,0.527818858623505,0.560278594493866,0.163574278354645,0.575437486171722,-0.801320910453796,0.132010728120804,0.613032221794128,-0.778950989246368,0.37424498796463,0.138061463832855,-0.91699492931366,0.253994464874268,0.250187575817108,0.934287428855896,\n0.0673762187361717,0.208747074007988,0.975646018981934,0.0454900041222572,0.2624471783638,0.963873505592346,0.938150525093079,-0.0836314186453819,0.335975229740143,0.918301284313202,-0.218417331576347,0.330176681280136,0.91181892156601,-0.103688038885593,0.397284656763077,0.385590463876724,-0.303107500076294,-0.871461868286133,0.228939339518547,-0.370276868343353,-0.900267601013184,0.267562568187714,-0.479633033275604,-0.835680842399597,0.63226306438446,0.224956437945366,0.741375803947449,0.510494410991669,0.103201098740101,0.853665590286255,0.253994464874268,0.250187575817108,0.934287428855896,0.482518672943115,-0.357222050428391,-0.799730002880096,0.765287220478058,-0.345726698637009,-0.542962729930878,0.583753287792206,-0.402651727199554,-0.705055773258209,0.819233179092407,-0.572073757648468,-0.0398566573858261,0.6322380900383,-0.767571449279785,-0.10539997369051,0.746676325798035,-0.643010795116425,-0.17032790184021,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0854567661881447,-0.590025365352631,-0.802849411964417,-0.0738197043538094,-0.58150452375412,-0.810187101364136,0.526131212711334,0.493667006492615,-0.692444086074829,0.509015023708344,-0.485809624195099,-0.71055805683136,0.578356921672821,-0.429673582315445,-0.693457901477814,0.140872359275818,-0.399173051118851,-0.905988872051239,0.113550499081612,-0.486260622739792,-0.866404592990875,0.174190670251846,-0.475461959838867,-0.862318694591522,0.545623481273651,0.394130259752274,0.739564955234528,0.448167592287064,0.331256568431854,0.830310106277466,0.512751221656799,0.314961016178131,0.798677444458008,0.448167592287064,0.331256568431854,0.830310106277466,0.352489024400711,0.249785035848618,0.901864171028137,0.512751221656799,0.314961016178131,0.798677444458008,0.947060525417328,0.264708548784256,0.181674882769585,0.938301980495453,0.0685238614678383,0.338959902524948,0.671115279197693,0.284787148237228,0.684471070766449,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.298087060451508,0.801499605178833,0.518403768539429,-0.406122446060181,0.842904448509216,0.352954238653183,\n0.0572854578495026,0.523676514625549,0.849988996982574,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.111158438026905,0.66179496049881,0.74139815568924,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.406122446060181,0.842904448509216,0.352954238653183,-0.111158438026905,0.66179496049881,0.74139815568924,0.671115279197693,0.284787148237228,0.684471070766449,0.448167592287064,0.331256568431854,0.830310106277466,0.545623481273651,0.394130259752274,0.739564955234528,0.63226306438446,0.224956437945366,0.741375803947449,0.253994464874268,0.250187575817108,0.934287428855896,0.257902681827545,0.417416572570801,0.871349334716797,0.493177682161331,0.0824330747127533,-0.866014182567596,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.418020725250244,-0.127127349376678,-0.899498343467712,0.646372437477112,0.650956153869629,-0.398068875074387,0.424405604600906,0.592946588993073,-0.684320271015167,0.589160740375519,0.293493062257767,-0.75282895565033,0.141376316547394,0.226959496736526,0.963588178157806,0.037119422107935,0.39716312289238,0.916997075080872,0.338892996311188,0.40640527009964,0.84852010011673,0.159164875745773,-0.84468400478363,0.511053323745728,0.114696279168129,-0.973567485809326,0.19751238822937,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.652710020542145,0.543907403945923,-0.527384459972382,0.837648034095764,0.514832735061646,-0.182463780045509,0.442993491888046,0.219760671257973,-0.869173228740692,0.368975192308426,0.372379690408707,0.851581275463104,0.4433753490448,0.161547407507896,0.881657958030701,0.812437415122986,-0.0575567446649075,0.580200552940369,0.338892996311188,0.40640527009964,0.84852010011673,0.554449737071991,0.577977955341339,0.598771214485168,0.737872421741486,0.632259011268616,0.236204952001572,0.159164875745773,-0.84468400478363,0.511053323745728,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.663097739219666,-0.724811255931854,0.186949267983437,-0.027174474671483,-0.150700747966766,-0.988205909729004,0.418020725250244,-0.127127349376678,-0.899498343467712,\n0.30552539229393,-0.0599766410887241,-0.950293123722076,0.0589214377105236,0.108213946223259,-0.99237996339798,-0.248638898134232,0.048121701925993,-0.967400133609772,-0.027174474671483,-0.150700747966766,-0.988205909729004,-0.103349760174751,-0.10200422257185,-0.989400804042816,-0.263506501913071,-0.108145013451576,-0.958576560020447,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.421276032924652,-0.302525490522385,-0.854988157749176,0.789066255092621,-0.467570185661316,-0.398437708616257,0.54582554101944,-0.560542941093445,-0.622788965702057,0.0589214377105236,0.108213946223259,-0.99237996339798,-0.027174474671483,-0.150700747966766,-0.988205909729004,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.424405604600906,0.592946588993073,-0.684320271015167,0.318493723869324,0.728740870952606,-0.606216490268707,0.266342312097549,0.6069176197052,-0.748807609081268,0.583753287792206,-0.402651727199554,-0.705055773258209,0.765287220478058,-0.345726698637009,-0.542962729930878,0.623417019844055,-0.452671766281128,-0.637526035308838,0.0439913086593151,-0.675665616989136,-0.735894501209259,0.647948265075684,-0.685174643993378,-0.332714289426804,0.254503726959229,-0.798789858818054,-0.545126259326935,0.654802083969116,-0.347440212965012,0.67120748758316,0.685809075832367,-0.12582391500473,0.716822326183319,0.164040550589561,0.209489807486534,0.963952660560608,0.201858729124069,0.87289696931839,0.444189012050629,-0.00299930199980736,0.929396331310272,0.36907109618187,0.164040550589561,0.209489807486534,0.963952660560608,0.618469655513763,0.424896746873856,0.661028027534485,0.201858729124069,0.87289696931839,0.444189012050629,0.164040550589561,0.209489807486534,0.963952660560608,0.842455089092255,-0.136532187461853,-0.521179795265198,0.92408949136734,-0.175655707716942,0.339416593313217,0.0516201481223106,0.961737930774689,-0.26906418800354,0.685809075832367,-0.12582391500473,0.716822326183319,0.618469655513763,0.424896746873856,0.661028027534485,0.164040550589561,0.209489807486534,0.963952660560608,0.646372437477112,0.650956153869629,-0.398068875074387,\n0.318493723869324,0.728740870952606,-0.606216490268707,0.424405604600906,0.592946588993073,-0.684320271015167,0.661977589130402,-0.708897471427917,-0.243413314223289,0.29490727186203,-0.85530948638916,-0.425999224185944,0.375436156988144,-0.682113528251648,-0.627510011196136,0.685486555099487,0.727433860301971,-0.0307916849851608,0.745590567588806,0.664693832397461,0.047716099768877,0.554396212100983,0.801354885101318,0.224666863679886,0.0825407654047012,0.994074046611786,0.0707375407218933,0.185543641448021,0.976534903049469,0.10933043807745,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.858800172805786,0.271537780761719,0.434430092573166,0.938301980495453,0.0685238614678383,0.338959902524948,0.947060525417328,0.264708548784256,0.181674882769585,-0.406122446060181,0.842904448509216,0.352954238653183,-0.298087060451508,0.801499605178833,0.518403768539429,-0.358905464410782,0.931329369544983,0.0617449507117271,-0.406122446060181,0.842904448509216,0.352954238653183,-0.358905464410782,0.931329369544983,0.0617449507117271,-0.243022814393044,0.95173841714859,0.187440201640129,0.0646723359823227,-0.342740118503571,-0.937201499938965,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.00791200343519449,-0.3136927485466,-0.949491560459137,0.665781199932098,0.528658747673035,0.526550352573395,0.761567413806915,0.64221316576004,0.0870478227734566,0.947060525417328,0.264708548784256,0.181674882769585,0.971711039543152,-0.0647541359066963,0.227122470736504,0.980262100696564,0.00691105145961046,0.197581350803375,0.813431859016418,0.0690318197011948,0.577549338340759,0.895810067653656,0.254065722227097,-0.364657372236252,0.842455089092255,-0.136532187461853,-0.521179795265198,0.585361659526825,0.51231449842453,-0.628399193286896,-0.0702482014894485,0.80213338136673,0.592998504638672,-0.243022814393044,0.95173841714859,0.187440201640129,0.0319873727858067,0.984376490116119,0.173146665096283,0.386715173721313,0.754913926124573,0.529675722122192,0.185543641448021,0.976534903049469,0.10933043807745,0.259856075048447,0.961204409599304,0.0925252288579941,\n0.303897142410278,-0.58835905790329,-0.749319791793823,0.509015023708344,-0.485809624195099,-0.71055805683136,0.230070114135742,-0.386967688798904,-0.89292985200882,0.303897142410278,-0.58835905790329,-0.749319791793823,0.578356921672821,-0.429673582315445,-0.693457901477814,0.509015023708344,-0.485809624195099,-0.71055805683136,0.114696279168129,-0.973567485809326,0.19751238822937,0.159164875745773,-0.84468400478363,0.511053323745728,-0.087286576628685,-0.801884651184082,0.591068506240845,0.527580142021179,-0.0869907140731812,0.845039546489716,0.0832947567105293,-0.342013299465179,0.935996174812317,0.430274456739426,-0.536508023738861,0.725963473320007,0.585361659526825,0.51231449842453,-0.628399193286896,0.0456644557416439,0.4627845287323,-0.885293841362,0.895810067653656,0.254065722227097,-0.364657372236252,0.132751479744911,0.960573315620422,-0.244286626577377,0.0516201481223106,0.961737930774689,-0.26906418800354,-0.00299930199980736,0.929396331310272,0.36907109618187,0.164040550589561,0.209489807486534,0.963952660560608,0.0516201481223106,0.961737930774689,-0.26906418800354,0.92408949136734,-0.175655707716942,0.339416593313217,0.0320413000881672,0.998972654342651,-0.0320465676486492,0.107348747551441,0.986339747905731,-0.124940805137157,0.141466349363327,0.962726950645447,-0.230529963970184,-0.00299930199980736,0.929396331310272,0.36907109618187,0.0516201481223106,0.961737930774689,-0.26906418800354,0.164040550589561,0.209489807486534,0.963952660560608,-0.278887689113617,0.155069842934608,0.947720944881439,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.0194659624248743,-0.00312843942083418,0.999805629253387,-0.00995929818600416,0.0271856393665075,0.999580800533295,-0.613169372081757,0.156963154673576,0.774200141429901,-0.564494132995605,0.336166679859161,0.753882169723511,-0.641344308853149,0.404579341411591,0.651914894580841,-0.636052131652832,0.114426992833614,0.763114809989929,-0.750942230224609,-0.362746059894562,0.551816165447235,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.630502700805664,-0.217548668384552,0.745076417922974,\n-0.651766121387482,-0.189316362142563,0.734411418437958,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.818475067615509,-0.0781779363751411,0.569198310375214,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.343512952327728,0.508661150932312,0.789469838142395,0.00251755584031343,0.621276617050171,0.783587276935577,-0.000752673309762031,0.723128914833069,0.690712690353394,-0.387391060590744,0.579724550247192,0.716831684112549,-0.555378377437592,0.35284760594368,0.753029525279999,-0.531420171260834,0.370124280452728,0.761971533298492,-0.617133378982544,0.414651036262512,0.668738305568695,-0.642749607563019,0.417651236057281,0.642215192317963,-0.555378377437592,0.35284760594368,0.753029525279999,-0.642749607563019,0.417651236057281,0.642215192317963,-0.641344308853149,0.404579341411591,0.651914894580841,-0.564494132995605,0.336166679859161,0.753882169723511,-0.0194659624248743,-0.00312843942083418,0.999805629253387,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.237974777817726,0.331118106842041,0.913087487220764,-0.273963540792465,0.203753486275673,0.939908742904663,0.00488811917603016,0.0790495574474335,0.996858716011047,0.00906203780323267,0.313269138336182,0.949621140956879,-0.617133378982544,0.414651036262512,0.668738305568695,-0.531420171260834,0.370124280452728,0.761971533298492,-0.343512952327728,0.508661150932312,0.789469838142395,-0.387391060590744,0.579724550247192,0.716831684112549,-0.273963540792465,0.203753486275673,0.939908742904663,-0.278887689113617,0.155069842934608,0.947720944881439,-0.00995929818600416,0.0271856393665075,0.999580800533295,0.00488811917603016,0.0790495574474335,0.996858716011047,0.230391070246696,-0.334940761327744,0.913638114929199,-0.308693647384644,-0.0323835387825966,0.950610101222992,-0.363826632499695,-0.186291873455048,0.912647545337677,-0.1506307721138,-0.438284873962402,0.886124551296234,\n0.0855588167905808,-0.00326380506157875,0.996327757835388,0.270083338022232,0.0848804861307144,0.959088265895844,0.283566653728485,0.161925837397575,0.945182502269745,0.083267405629158,0.0343488194048405,0.995935082435608,0.634447515010834,0.382206737995148,0.671858906745911,0.563284993171692,0.310863167047501,0.765554785728455,0.58095771074295,0.129276961088181,0.803601682186127,0.640639364719391,0.166238233447075,0.749630630016327,0.756035923957825,-0.331106662750244,0.56460428237915,0.663084924221039,-0.243456080555916,0.707847118377686,0.597107112407684,-0.194828405976295,0.778142035007477,0.672916948795319,-0.2681784927845,0.689393281936646,0.865743160247803,-0.106940761208534,0.488929957151413,0.758550822734833,-0.0895375981926918,0.645432889461517,0.763749420642853,-0.150436565279961,0.627738535404205,0.980335772037506,-0.188939213752747,-0.056953851133585,-0.0552290044724941,-0.859539985656738,0.508075475692749,0.352704226970673,-0.858029365539551,-0.373343408107758,0.396026074886322,-0.763220906257629,0.510545969009399,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.000752673309762031,0.723128914833069,0.690712690353394,0.00251755584031343,0.621276617050171,0.783587276935577,0.349495083093643,0.501587808132172,0.791367709636688,0.386756360530853,0.580943465232849,0.716187238693237,0.55474841594696,0.352636069059372,0.753592729568481,0.642712593078613,0.417624264955521,0.642269790172577,0.6171053647995,0.41465026140213,0.668764650821686,0.533473014831543,0.369999885559082,0.760596215724945,0.634447515010834,0.382206737995148,0.671858906745911,0.642712593078613,0.417624264955521,0.642269790172577,0.55474841594696,0.352636069059372,0.753592729568481,0.563284993171692,0.310863167047501,0.765554785728455,0.269184499979019,-0.069842740893364,0.96055281162262,0.270083338022232,0.0848804861307144,0.959088265895844,0.0855588167905808,-0.00326380506157875,0.996327757835388,0.095149926841259,-0.00452130474150181,0.995452702045441,0.34773051738739,-0.0993074625730515,0.932320535182953,0.403341591358185,-0.0460353009402752,0.913890719413757,\n-0.186641603708267,-0.111381784081459,0.976093769073486,-0.323701471090317,-0.00802869722247124,0.946125209331512,0.205443143844604,0.26053661108017,0.943352401256561,0.00906203780323267,0.313269138336182,0.949621140956879,0.00488811917603016,0.0790495574474335,0.996858716011047,0.0908891633152962,0.0803348198533058,0.992615461349487,0.349495083093643,0.501587808132172,0.791367709636688,0.533473014831543,0.369999885559082,0.760596215724945,0.6171053647995,0.41465026140213,0.668764650821686,0.386756360530853,0.580943465232849,0.716187238693237,0.0908891633152962,0.0803348198533058,0.992615461349487,0.00488811917603016,0.0790495574474335,0.996858716011047,-0.00995929818600416,0.0271856393665075,0.999580800533295,0.083267405629158,0.0343488194048405,0.995935082435608,0.681668698787689,-0.471610575914383,-0.559384763240814,0.980335772037506,-0.188939213752747,-0.056953851133585,0.763749420642853,-0.150436565279961,0.627738535404205,0.663369238376617,-0.460236370563507,0.590020060539246,0.422998309135437,-0.288532286882401,0.858965337276459,0.34773051738739,-0.0993074625730515,0.932320535182953,-0.20400233566761,0.056657962501049,0.97732949256897,0.231048971414566,-0.393600910902023,0.889772295951843,0.663369238376617,-0.460236370563507,0.590020060539246,0.396026074886322,-0.763220906257629,0.510545969009399,0.352704226970673,-0.858029365539551,-0.373343408107758,0.681668698787689,-0.471610575914383,-0.559384763240814,-0.186641603708267,-0.111381784081459,0.976093769073486,0.269184499979019,-0.069842740893364,0.96055281162262,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.0486040636897087,-0.42794406414032,0.902497410774231,-0.132798001170158,0.175962328910828,0.975398361682892,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.312857300043106,-0.0701114386320114,0.947208881378174,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.757822096347809,-0.00610118778422475,0.652432680130005,\n-0.96750271320343,-0.192122116684914,0.164400920271873,-0.0225364938378334,-0.576714694499969,0.816634714603424,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.385932207107544,-0.757268369197845,-0.526878535747528,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.312857300043106,-0.0701114386320114,0.947208881378174,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.398337602615356,0.261720597743988,0.879107236862183,-0.312857300043106,-0.0701114386320114,0.947208881378174,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.385932207107544,-0.757268369197845,-0.526878535747528,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.398337602615356,0.261720597743988,0.879107236862183,-0.664829790592194,0.592853784561157,0.454451024532318,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.398337602615356,0.261720597743988,0.879107236862183,-0.545051276683807,-0.206261366605759,0.812634825706482,0.462544351816177,-0.573750495910645,0.675916492938995,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.373196601867676,-0.775050580501556,0.509922385215759,0.462544351816177,-0.573750495910645,0.675916492938995,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.789819777011871,-0.316357046365738,0.525454998016357,0.373196601867676,-0.775050580501556,0.509922385215759,0.692745566368103,-0.565952122211456,0.446991920471191,0.828352034091949,-0.389868885278702,0.402287393808365,0.462544351816177,-0.573750495910645,0.675916492938995,0.462544351816177,-0.573750495910645,0.675916492938995,0.243750929832459,-0.884264886379242,0.398322850465775,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.213104128837585,-0.584437012672424,0.782955944538116,\n-0.398337602615356,0.261720597743988,0.879107236862183,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.889869391918182,0.231929391622543,0.39286282658577,-0.664829790592194,0.592853784561157,0.454451024532318,-0.398337602615356,0.261720597743988,0.879107236862183,-0.49268251657486,0.733969807624817,0.467495709657669,-0.434220999479294,0.787271618843079,0.437784820795059,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.664829790592194,0.592853784561157,0.454451024532318,-0.824626564979553,0.277553707361221,0.492904603481293,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.789819777011871,-0.316357046365738,0.525454998016357,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.789819777011871,-0.316357046365738,0.525454998016357,-0.627400159835815,-0.604899108409882,0.490373462438583,0.0565900318324566,-0.86772346496582,0.493815332651138,0.373196601867676,-0.775050580501556,0.509922385215759,0.0855588167905808,-0.00326380506157875,0.996327757835388,0.083267405629158,0.0343488194048405,0.995935082435608,-0.00995929818600416,0.0271856393665075,0.999580800533295,-0.0194659624248743,-0.00312843942083418,0.999805629253387,0.095149926841259,-0.00452130474150181,0.995452702045441,0.0855588167905808,-0.00326380506157875,0.996327757835388,-0.0194659624248743,-0.00312843942083418,0.999805629253387,-0.041683241724968,-0.0278020035475492,0.998744010925293,0.264413386583328,0.205984830856323,0.942154884338379,0.0908891633152962,0.0803348198533058,0.992615461349487,0.083267405629158,0.0343488194048405,0.995935082435608,0.283566653728485,0.161925837397575,0.945182502269745,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.294902235269547,-0.00327466218732297,0.955521821975708,-0.552981913089752,0.0302376579493284,0.832644402980804,-0.403701454401016,-0.278951406478882,0.87132728099823,-0.132798001170158,0.175962328910828,0.975398361682892,\n-0.0486040636897087,-0.42794406414032,0.902497410774231,0.231048971414566,-0.393600910902023,0.889772295951843,-0.20400233566761,0.056657962501049,0.97732949256897,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.054779440164566,-0.293895661830902,0.954266488552094,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.243585184216499,-0.228214547038078,0.942647516727448,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.403701454401016,-0.278951406478882,0.87132728099823,-0.552981913089752,0.0302376579493284,0.832644402980804,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.758550822734833,-0.0895375981926918,0.645432889461517,0.672916948795319,-0.2681784927845,0.689393281936646,0.269184499979019,-0.069842740893364,0.96055281162262,0.403341591358185,-0.0460353009402752,0.913890719413757,0.662317752838135,-0.689115524291992,0.294032365083694,0.828352034091949,-0.389868885278702,0.402287393808365,0.230391070246696,-0.334940761327744,0.913638114929199,0.243750929832459,-0.884264886379242,0.398322850465775,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.25699707865715,0.0964793935418129,0.961584210395813,\n-0.564494132995605,0.336166679859161,0.753882169723511,-0.613169372081757,0.156963154673576,0.774200141429901,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.630502700805664,-0.217548668384552,0.745076417922974,-0.237974777817726,0.331118106842041,0.913087487220764,0.00906203780323267,0.313269138336182,0.949621140956879,0.00251755584031343,0.621276617050171,0.783587276935577,-0.343512952327728,0.508661150932312,0.789469838142395,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.278887689113617,0.155069842934608,0.947720944881439,-0.555378377437592,0.35284760594368,0.753029525279999,-0.564494132995605,0.336166679859161,0.753882169723511,-0.278887689113617,0.155069842934608,0.947720944881439,-0.273963540792465,0.203753486275673,0.939908742904663,-0.531420171260834,0.370124280452728,0.761971533298492,-0.555378377437592,0.35284760594368,0.753029525279999,-0.531420171260834,0.370124280452728,0.761971533298492,-0.273963540792465,0.203753486275673,0.939908742904663,-0.237974777817726,0.331118106842041,0.913087487220764,-0.343512952327728,0.508661150932312,0.789469838142395,0.563284993171692,0.310863167047501,0.765554785728455,0.270083338022232,0.0848804861307144,0.959088265895844,0.428336501121521,-0.0297424420714378,0.903129696846008,0.58095771074295,0.129276961088181,0.803601682186127,0.428336501121521,-0.0297424420714378,0.903129696846008,0.269184499979019,-0.069842740893364,0.96055281162262,0.672916948795319,-0.2681784927845,0.689393281936646,0.597107112407684,-0.194828405976295,0.778142035007477,0.00251755584031343,0.621276617050171,0.783587276935577,0.00906203780323267,0.313269138336182,0.949621140956879,0.205443143844604,0.26053661108017,0.943352401256561,0.349495083093643,0.501587808132172,0.791367709636688,0.55474841594696,0.352636069059372,0.753592729568481,0.283566653728485,0.161925837397575,0.945182502269745,0.270083338022232,0.0848804861307144,0.959088265895844,0.563284993171692,0.310863167047501,0.765554785728455,\n0.34773051738739,-0.0993074625730515,0.932320535182953,0.422998309135437,-0.288532286882401,0.858965337276459,0.663369238376617,-0.460236370563507,0.590020060539246,0.763749420642853,-0.150436565279961,0.627738535404205,0.396026074886322,-0.763220906257629,0.510545969009399,0.663369238376617,-0.460236370563507,0.590020060539246,0.422998309135437,-0.288532286882401,0.858965337276459,0.231048971414566,-0.393600910902023,0.889772295951843,0.533473014831543,0.369999885559082,0.760596215724945,0.264413386583328,0.205984830856323,0.942154884338379,0.283566653728485,0.161925837397575,0.945182502269745,0.55474841594696,0.352636069059372,0.753592729568481,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.824626564979553,0.277553707361221,0.492904603481293,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.186641603708267,-0.111381784081459,0.976093769073486,0.205443143844604,0.26053661108017,0.943352401256561,0.264413386583328,0.205984830856323,0.942154884338379,0.533473014831543,0.369999885559082,0.760596215724945,0.349495083093643,0.501587808132172,0.791367709636688,-0.434220999479294,0.787271618843079,0.437784820795059,-0.49268251657486,0.733969807624817,0.467495709657669,-0.307226657867432,0.378487527370453,0.873131692409515,-0.132798001170158,0.175962328910828,0.975398361682892,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.552981913089752,0.0302376579493284,0.832644402980804,-0.294902235269547,-0.00327466218732297,0.955521821975708,0.0565900318324566,-0.86772346496582,0.493815332651138,-0.627400159835815,-0.604899108409882,0.490373462438583,-0.20392233133316,-0.215887486934662,0.954886496067047,-0.054779440164566,-0.293895661830902,0.954266488552094,0.828352034091949,-0.389868885278702,0.402287393808365,0.692745566368103,-0.565952122211456,0.446991920471191,0.243585184216499,-0.228214547038078,0.942647516727448,0.230391070246696,-0.334940761327744,0.913638114929199,0.403341591358185,-0.0460353009402752,0.913890719413757,0.34773051738739,-0.0993074625730515,0.932320535182953,\n0.763749420642853,-0.150436565279961,0.627738535404205,0.758550822734833,-0.0895375981926918,0.645432889461517,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.889869391918182,0.231929391622543,0.39286282658577,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.363826632499695,-0.186291873455048,0.912647545337677,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.243750929832459,-0.884264886379242,0.398322850465775,0.230391070246696,-0.334940761327744,0.913638114929199,-0.1506307721138,-0.438284873962402,0.886124551296234,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.403701454401016,-0.278951406478882,0.87132728099823,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.170626193284988,-0.221982836723328,0.960005402565002,0.231048971414566,-0.393600910902023,0.889772295951843,-0.0486040636897087,-0.42794406414032,0.902497410774231,-0.225288927555084,-0.849879503250122,0.476392418146133,0.396026074886322,-0.763220906257629,0.510545969009399,-0.054779440164566,-0.293895661830902,0.954266488552094,0.243585184216499,-0.228214547038078,0.942647516727448,0.692745566368103,-0.565952122211456,0.446991920471191,0.0565900318324566,-0.86772346496582,0.493815332651138,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.186641603708267,-0.111381784081459,0.976093769073486,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.294902235269547,-0.00327466218732297,0.955521821975708,-0.20392233133316,-0.215887486934662,0.954886496067047,-0.627400159835815,-0.604899108409882,0.490373462438583,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.307226657867432,0.378487527370453,0.873131692409515,-0.49268251657486,0.733969807624817,0.467495709657669,-0.889869391918182,0.231929391622543,0.39286282658577,\n-0.434367448091507,0.0498845726251602,0.899353325366974,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.0486040636897087,-0.42794406414032,0.902497410774231,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.434220999479294,0.787271618843079,0.437784820795059,-0.132798001170158,0.175962328910828,0.975398361682892,-0.20400233566761,0.056657962501049,0.97732949256897,-0.824626564979553,0.277553707361221,0.492904603481293,-0.363826632499695,-0.186291873455048,0.912647545337677,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.1506307721138,-0.438284873962402,0.886124551296234,0.095149926841259,-0.00452130474150181,0.995452702045441,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.20392233133316,-0.215887486934662,0.954886496067047,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.613169372081757,0.156963154673576,0.774200141429901,-0.636052131652832,0.114426992833614,0.763114809989929,-0.651766121387482,-0.189316362142563,0.734411418437958,-0.630502700805664,-0.217548668384552,0.745076417922974,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.750942230224609,-0.362746059894562,0.551816165447235,-0.818475067615509,-0.0781779363751411,0.569198310375214,0.640639364719391,0.166238233447075,0.749630630016327,0.58095771074295,0.129276961088181,0.803601682186127,0.597107112407684,-0.194828405976295,0.778142035007477,0.663084924221039,-0.243456080555916,0.707847118377686,0.756035923957825,-0.331106662750244,0.56460428237915,0.672916948795319,-0.2681784927845,0.689393281936646,0.758550822734833,-0.0895375981926918,0.645432889461517,0.865743160247803,-0.106940761208534,0.488929957151413,-0.398337602615356,0.261720597743988,0.879107236862183,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.0225364938378334,-0.576714694499969,0.816634714603424,-0.586991429328918,-0.31607523560524,0.745343863964081,\n-0.000114999507786706,0.00247487379238009,-0.999996960163116,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.385932207107544,-0.757268369197845,-0.526878535747528,-0.00530534936115146,0.00112179282587022,-0.99998527765274,-0.000114999507786706,0.00247487379238009,-0.999996960163116,0.00490783946588635,0.00122942065354437,-0.999987185001373,0.352704226970673,-0.858029365539551,-0.373343408107758,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.636052131652832,0.114426992833614,0.763114809989929,-0.504159510135651,-0.0417646616697311,0.862600088119507,-0.651766121387482,-0.189316362142563,0.734411418437958,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.054779440164566,-0.293895661830902,0.954266488552094,0.243585184216499,-0.228214547038078,0.942647516727448,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.230391070246696,-0.334940761327744,0.913638114929199,0.428336501121521,-0.0297424420714378,0.903129696846008,0.270083338022232,0.0848804861307144,0.959088265895844,0.269184499979019,-0.069842740893364,0.96055281162262,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.20400233566761,0.056657962501049,0.97732949256897,0.34773051738739,-0.0993074625730515,0.932320535182953,0.403341591358185,-0.0460353009402752,0.913890719413757,0.269184499979019,-0.069842740893364,0.96055281162262,-0.186641603708267,-0.111381784081459,0.976093769073486,-0.307226657867432,0.378487527370453,0.873131692409515,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.132798001170158,0.175962328910828,0.975398361682892,-0.20392233133316,-0.215887486934662,0.954886496067047,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.054779440164566,-0.293895661830902,0.954266488552094,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.697269201278687,-0.168340444564819,0.696761846542358,\n-0.312857300043106,-0.0701114386320114,0.947208881378174,0.0908891633152962,0.0803348198533058,0.992615461349487,0.264413386583328,0.205984830856323,0.942154884338379,0.205443143844604,0.26053661108017,0.943352401256561,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.294902235269547,-0.00327466218732297,0.955521821975708,-0.170626193284988,-0.221982836723328,0.960005402565002,0.0906060114502907,0.000123244855785742,0.99588680267334,0.269184499979019,-0.069842740893364,0.96055281162262,0.095149926841259,-0.00452130474150181,0.995452702045441,-0.0552290044724941,-0.859539985656738,0.508075475692749,0.0383354164659977,-0.957559168338776,-0.285676121711731,0.352704226970673,-0.858029365539551,-0.373343408107758,-0.818475067615509,-0.0781779363751411,0.569198310375214,-0.757822096347809,-0.00610118778422475,0.652432680130005,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.294902235269547,-0.00327466218732297,0.955521821975708,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.20392233133316,-0.215887486934662,0.954886496067047,0.0565900318324566,-0.86772346496582,0.493815332651138,0.692745566368103,-0.565952122211456,0.446991920471191,0.373196601867676,-0.775050580501556,0.509922385215759,-0.889869391918182,0.231929391622543,0.39286282658577,-0.49268251657486,0.733969807624817,0.467495709657669,-0.398337602615356,0.261720597743988,0.879107236862183,-0.434220999479294,0.787271618843079,0.437784820795059,-0.824626564979553,0.277553707361221,0.492904603481293,-0.664829790592194,0.592853784561157,0.454451024532318,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.627400159835815,-0.604899108409882,0.490373462438583,-0.789819777011871,-0.316357046365738,0.525454998016357,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.824626564979553,0.277553707361221,0.492904603481293,-0.20400233566761,0.056657962501049,0.97732949256897,\n0.462544351816177,-0.573750495910645,0.675916492938995,0.662317752838135,-0.689115524291992,0.294032365083694,0.243750929832459,-0.884264886379242,0.398322850465775,0.828352034091949,-0.389868885278702,0.402287393808365,0.662317752838135,-0.689115524291992,0.294032365083694,0.462544351816177,-0.573750495910645,0.675916492938995,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.462544351816177,-0.573750495910645,0.675916492938995,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.613169372081757,0.156963154673576,0.774200141429901,-0.630502700805664,-0.217548668384552,0.745076417922974,0.428336501121521,-0.0297424420714378,0.903129696846008,0.597107112407684,-0.194828405976295,0.778142035007477,0.58095771074295,0.129276961088181,0.803601682186127,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.0225364938378334,-0.576714694499969,0.816634714603424,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.0225364938378334,-0.576714694499969,0.816634714603424,0.0383354164659977,-0.957559168338776,-0.285676121711731,0.980335772037506,-0.188939213752747,-0.056953851133585,0.681668698787689,-0.471610575914383,-0.559384763240814,0.00490783946588635,0.00122942065354437,-0.999987185001373,0.681668698787689,-0.471610575914383,-0.559384763240814,0.352704226970673,-0.858029365539551,-0.373343408107758,0.00490783946588635,0.00122942065354437,-0.999987185001373,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.00530534936115146,0.00112179282587022,-0.99998527765274,-0.385932207107544,-0.757268369197845,-0.526878535747528,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.00530534936115146,0.00112179282587022,-0.99998527765274,0.0223364941775799,-0.576743245124817,-0.816620051860809,\n-0.685902893543243,-0.71078634262085,0.155948713421822,-0.838969886302948,-0.5302734375,0.122227653861046,-0.130363821983337,-0.434679388999939,-0.89109992980957,0.381297171115875,-0.692393600940704,-0.612538635730743,0.680035650730133,-0.698283791542053,-0.223497807979584,-0.452180773019791,-0.878205716609955,0.155843734741211,-0.540568292140961,-0.817409574985504,0.199066668748856,0.727542281150818,-0.685412287712097,0.0298695731908083,-0.470319867134094,-0.882218599319458,-0.0221261866390705,-0.452180773019791,-0.878205716609955,0.155843734741211,0.680035650730133,-0.698283791542053,-0.223497807979584,0.683449149131775,-0.689567506313324,0.239570155739784,-0.449864596128464,-0.877300322055817,-0.167230501770973,-0.470319867134094,-0.882218599319458,-0.0221261866390705,0.727542281150818,-0.685412287712097,0.0298695731908083,0.598632395267487,-0.692815542221069,0.402052044868469,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.449864596128464,-0.877300322055817,-0.167230501770973,0.683449149131775,-0.689567506313324,0.239570155739784,0.312898457050323,-0.30317035317421,0.900101244449615,-0.108442008495331,0.0180171951651573,0.993939459323883,-0.201268136501312,-0.0940669924020767,0.975009024143219,-0.0551113523542881,-0.341195195913315,0.938375473022461,0.365167140960693,-0.260313987731934,-0.893806219100952,0.123946145176888,-0.156060710549355,-0.979939997196198,0.376559227705002,0.0804113894701004,-0.922896087169647,0.702634871006012,0.155434265732765,-0.694366157054901,0.91601550579071,-0.263128757476807,-0.302785158157349,0.670127213001251,-0.275791883468628,-0.6891068816185,0.806311964988709,0.228450000286102,-0.545592904090881,0.915866374969482,0.261728912591934,-0.304444909095764,0.966503024101257,-0.253703832626343,0.0388099141418934,0.91601550579071,-0.263128757476807,-0.302785158157349,0.915866374969482,0.261728912591934,-0.304444909095764,0.966637134552002,0.25298011302948,0.0401717498898506,0.913093268871307,-0.252991795539856,0.319774568080902,0.966503024101257,-0.253703832626343,0.0388099141418934,\n0.966637134552002,0.25298011302948,0.0401717498898506,0.914951086044312,0.242541939020157,0.322549074888229,0.79538756608963,-0.253331542015076,0.550619423389435,0.913093268871307,-0.252991795539856,0.319774568080902,0.914951086044312,0.242541939020157,0.322549074888229,0.789637267589569,0.246989637613297,0.561666369438171,0.763365149497986,-0.125001043081284,0.633757352828979,0.79538756608963,-0.253331542015076,0.550619423389435,0.789637267589569,0.246989637613297,0.561666369438171,0.419073313474655,0.202598944306374,0.885060012340546,0.661575853824615,0.331751018762589,-0.672501742839813,0.623564124107361,0.781771123409271,0.00130499247461557,0.796620786190033,0.575817584991455,-0.183927938342094,0.66670024394989,0.432952612638474,-0.606681823730469,0.42945009469986,0.892923653125763,-0.135129347443581,0.647005915641785,0.732552111148834,-0.211543783545494,0.688613891601563,0.692343652248383,-0.215571701526642,0.623564124107361,0.781771123409271,0.00130499247461557,0.42945009469986,0.892923653125763,-0.135129347443581,0.452374219894409,0.89155113697052,0.0222298968583345,0.689587533473969,0.723532259464264,0.0311464741826057,0.647005915641785,0.732552111148834,-0.211543783545494,0.452374219894409,0.89155113697052,0.0222298968583345,0.471769779920578,0.864407062530518,0.173878565430641,0.6768958568573,0.69471287727356,0.243281871080399,0.689587533473969,0.723532259464264,0.0311464741826057,0.471769779920578,0.864407062530518,0.173878565430641,0.407848834991455,0.861259400844574,0.303136229515076,0.582376599311829,0.69311785697937,0.424764811992645,0.6768958568573,0.69471287727356,0.243281871080399,0.598632395267487,-0.692815542221069,0.402052044868469,0.757855832576752,-0.532335162162781,0.37719202041626,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.185590207576752,0.0829386487603188,0.979120790958405,-0.108442008495331,0.0180171951651573,0.993939459323883,0.532896935939789,0.0133537920191884,0.846074759960175,0.419073313474655,0.202598944306374,0.885060012340546,\n0.407848834991455,0.861259400844574,0.303136229515076,0.135122209787369,0.838861703872681,0.527307271957397,0.315021455287933,0.667639553546906,0.674550950527191,0.582376599311829,0.69311785697937,0.424764811992645,-0.949683308601379,-0.00300553464330733,-0.313197374343872,-0.873431265354156,-0.446991860866547,0.193173810839653,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.949683308601379,-0.00300553464330733,-0.313197374343872,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.515409469604492,0.101915791630745,0.850862085819244,-0.683583498001099,0.133054658770561,0.71764200925827,-0.362329810857773,0.579764425754547,0.729787826538086,-0.633079648017883,0.295362114906311,0.71552175283432,-0.448814660310745,0.224063515663147,0.865078568458557,-0.152529567480087,0.450641930103302,0.87957751750946,-0.226269230246544,-0.722853541374207,-0.652904987335205,0.171032205224037,-0.919270157814026,0.354528367519379,-0.198421195149422,-0.758837580680847,0.620318114757538,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.0536522269248962,-0.227453172206879,-0.97230988740921,0.967476725578308,-0.220996707677841,0.12308245152235,0.935926675796509,-0.349802911281586,0.040978018194437,0.577395439147949,-0.441121131181717,-0.687041938304901,0.806311964988709,0.228450000286102,-0.545592904090881,0.670127213001251,-0.275791883468628,-0.6891068816185,0.365167140960693,-0.260313987731934,-0.893806219100952,0.702634871006012,0.155434265732765,-0.694366157054901,0.381297171115875,-0.692393600940704,-0.612538635730743,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.685902893543243,-0.71078634262085,0.155948713421822,0.0223364941775799,-0.576743245124817,-0.816620051860809,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.850510120391846,-0.227078184485435,-0.474413365125656,-0.550249099731445,0.0241546873003244,-0.834651112556458,-0.303164839744568,0.00688559422269464,-0.952913224697113,0.151356309652328,0.151358395814896,-0.976822376251221,\n0.129860803484917,0.240213453769684,-0.961994647979736,-0.246528506278992,0.0864357575774193,-0.965273320674896,-0.476255148649216,0.154200553894043,-0.865680813789368,0.585507750511169,-0.785169541835785,0.201716393232346,0.171032205224037,-0.919270157814026,0.354528367519379,-0.226269230246544,-0.722853541374207,-0.652904987335205,-0.0988442227244377,-0.676099538803101,-0.730150103569031,0.842067956924438,-0.0588998831808567,0.536145865917206,0.532896935939789,0.0133537920191884,0.846074759960175,0.752812325954437,-0.289424031972885,0.591191411018372,0.883874535560608,-0.163575857877731,0.438188046216965,0.532896935939789,0.0133537920191884,0.846074759960175,0.763365149497986,-0.125001043081284,0.633757352828979,0.419073313474655,0.202598944306374,0.885060012340546,-0.207103610038757,-0.83615118265152,-0.507896959781647,0.757855832576752,-0.532335162162781,0.37719202041626,0.967476725578308,-0.220996707677841,0.12308245152235,-0.0536522269248962,-0.227453172206879,-0.97230988740921,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.873431265354156,-0.446991860866547,0.193173810839653,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.198421195149422,-0.758837580680847,0.620318114757538,0.935926675796509,-0.349802911281586,0.040978018194437,0.585507750511169,-0.785169541835785,0.201716393232346,-0.0988442227244377,-0.676099538803101,-0.730150103569031,0.577395439147949,-0.441121131181717,-0.687041938304901,0.365167140960693,-0.260313987731934,-0.893806219100952,0.0223364941775799,-0.576743245124817,-0.816620051860809,-0.130363821983337,-0.434679388999939,-0.89109992980957,0.123946145176888,-0.156060710549355,-0.979939997196198,0.670127213001251,-0.275791883468628,-0.6891068816185,0.91601550579071,-0.263128757476807,-0.302785158157349,0.680035650730133,-0.698283791542053,-0.223497807979584,0.381297171115875,-0.692393600940704,-0.612538635730743,0.966503024101257,-0.253703832626343,0.0388099141418934,0.727542281150818,-0.685412287712097,0.0298695731908083,0.680035650730133,-0.698283791542053,-0.223497807979584,\n0.91601550579071,-0.263128757476807,-0.302785158157349,0.966503024101257,-0.253703832626343,0.0388099141418934,0.913093268871307,-0.252991795539856,0.319774568080902,0.683449149131775,-0.689567506313324,0.239570155739784,0.727542281150818,-0.685412287712097,0.0298695731908083,0.913093268871307,-0.252991795539856,0.319774568080902,0.79538756608963,-0.253331542015076,0.550619423389435,0.598632395267487,-0.692815542221069,0.402052044868469,0.683449149131775,-0.689567506313324,0.239570155739784,0.79538756608963,-0.253331542015076,0.550619423389435,0.763365149497986,-0.125001043081284,0.633757352828979,0.757855832576752,-0.532335162162781,0.37719202041626,0.598632395267487,-0.692815542221069,0.402052044868469,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.303164839744568,0.00688559422269464,-0.952913224697113,0.0183170828968287,-0.00617978628724813,-0.999813139438629,0.123946145176888,-0.156060710549355,-0.979939997196198,-0.246528506278992,0.0864357575774193,-0.965273320674896,0.129860803484917,0.240213453769684,-0.961994647979736,0.376559227705002,0.0804113894701004,-0.922896087169647,0.0183170828968287,-0.00617978628724813,-0.999813139438629,0.796620786190033,0.575817584991455,-0.183927938342094,0.702634871006012,0.155434265732765,-0.694366157054901,0.376559227705002,0.0804113894701004,-0.922896087169647,0.66670024394989,0.432952612638474,-0.606681823730469,0.647005915641785,0.732552111148834,-0.211543783545494,0.915866374969482,0.261728912591934,-0.304444909095764,0.806311964988709,0.228450000286102,-0.545592904090881,0.688613891601563,0.692343652248383,-0.215571701526642,0.647005915641785,0.732552111148834,-0.211543783545494,0.689587533473969,0.723532259464264,0.0311464741826057,0.966637134552002,0.25298011302948,0.0401717498898506,0.915866374969482,0.261728912591934,-0.304444909095764,0.689587533473969,0.723532259464264,0.0311464741826057,0.6768958568573,0.69471287727356,0.243281871080399,0.914951086044312,0.242541939020157,0.322549074888229,0.966637134552002,0.25298011302948,0.0401717498898506,0.6768958568573,0.69471287727356,0.243281871080399,\n0.582376599311829,0.69311785697937,0.424764811992645,0.789637267589569,0.246989637613297,0.561666369438171,0.914951086044312,0.242541939020157,0.322549074888229,0.582376599311829,0.69311785697937,0.424764811992645,0.315021455287933,0.667639553546906,0.674550950527191,0.419073313474655,0.202598944306374,0.885060012340546,0.789637267589569,0.246989637613297,0.561666369438171,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.201268136501312,-0.0940669924020767,0.975009024143219,-0.108442008495331,0.0180171951651573,0.993939459323883,-0.515409469604492,0.101915791630745,0.850862085819244,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.108442008495331,0.0180171951651573,0.993939459323883,-0.185590207576752,0.0829386487603188,0.979120790958405,0.419073313474655,0.202598944306374,0.885060012340546,-0.152529567480087,0.450641930103302,0.87957751750946,-0.448814660310745,0.224063515663147,0.865078568458557,-0.185590207576752,0.0829386487603188,0.979120790958405,0.171032205224037,-0.919270157814026,0.354528367519379,0.312898457050323,-0.30317035317421,0.900101244449615,-0.0551113523542881,-0.341195195913315,0.938375473022461,-0.198421195149422,-0.758837580680847,0.620318114757538,0.967476725578308,-0.220996707677841,0.12308245152235,0.842067956924438,-0.0588998831808567,0.536145865917206,0.883874535560608,-0.163575857877731,0.438188046216965,0.935926675796509,-0.349802911281586,0.040978018194437,0.670127213001251,-0.275791883468628,-0.6891068816185,0.381297171115875,-0.692393600940704,-0.612538635730743,0.0223364941775799,-0.576743245124817,-0.816620051860809,0.365167140960693,-0.260313987731934,-0.893806219100952,0.688613891601563,0.692343652248383,-0.215571701526642,0.806311964988709,0.228450000286102,-0.545592904090881,0.702634871006012,0.155434265732765,-0.694366157054901,0.796620786190033,0.575817584991455,-0.183927938342094,0.171032205224037,-0.919270157814026,0.354528367519379,0.585507750511169,-0.785169541835785,0.201716393232346,0.752812325954437,-0.289424031972885,0.591191411018372,\n0.312898457050323,-0.30317035317421,0.900101244449615,-0.201268136501312,-0.0940669924020767,0.975009024143219,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.198421195149422,-0.758837580680847,0.620318114757538,-0.0551113523542881,-0.341195195913315,0.938375473022461,0.883874535560608,-0.163575857877731,0.438188046216965,0.752812325954437,-0.289424031972885,0.591191411018372,0.585507750511169,-0.785169541835785,0.201716393232346,0.935926675796509,-0.349802911281586,0.040978018194437,0.757855832576752,-0.532335162162781,0.37719202041626,0.763365149497986,-0.125001043081284,0.633757352828979,0.842067956924438,-0.0588998831808567,0.536145865917206,0.967476725578308,-0.220996707677841,0.12308245152235,0.315021455287933,0.667639553546906,0.674550950527191,0.135122209787369,0.838861703872681,0.527307271957397,-0.362329810857773,0.579764425754547,0.729787826538086,-0.152529567480087,0.450641930103302,0.87957751750946,-0.683583498001099,0.133054658770561,0.71764200925827,-0.515409469604492,0.101915791630745,0.850862085819244,-0.448814660310745,0.224063515663147,0.865078568458557,-0.633079648017883,0.295362114906311,0.71552175283432,-0.850510120391846,-0.227078184485435,-0.474413365125656,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.130363821983337,-0.434679388999939,-0.89109992980957,-0.838969886302948,-0.5302734375,0.122227653861046,0.129860803484917,0.240213453769684,-0.961994647979736,0.151356309652328,0.151358395814896,-0.976822376251221,0.661575853824615,0.331751018762589,-0.672501742839813,0.66670024394989,0.432952612638474,-0.606681823730469,-0.476255148649216,0.154200553894043,-0.865680813789368,-0.246528506278992,0.0864357575774193,-0.965273320674896,-0.303164839744568,0.00688559422269464,-0.952913224697113,-0.550249099731445,0.0241546873003244,-0.834651112556458,-0.948083400726318,-9.9310447865264e-008,0.318021833896637,-0.728089213371277,-0.000130440981592983,0.685482382774353,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.452180773019791,-0.878205716609955,0.155843734741211,\n-0.999005138874054,6.03368519591641e-008,-0.0445944853127003,-0.948083400726318,-9.9310447865264e-008,0.318021833896637,-0.452180773019791,-0.878205716609955,0.155843734741211,-0.470319867134094,-0.882218599319458,-0.0221261866390705,-0.940430045127869,5.90034510139503e-008,-0.339987248182297,-0.999005138874054,6.03368519591641e-008,-0.0445944853127003,-0.470319867134094,-0.882218599319458,-0.0221261866390705,-0.449864596128464,-0.877300322055817,-0.167230501770973,-0.852473676204681,-2.95911831926787e-007,-0.52277010679245,-0.940430045127869,5.90034510139503e-008,-0.339987248182297,-0.449864596128464,-0.877300322055817,-0.167230501770973,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.728089213371277,-0.000130440981592983,0.685482382774353,-0.522543489933014,0.0101915588602424,0.852551698684692,-0.685902893543243,-0.71078634262085,0.155948713421822,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.522543489933014,0.0101915588602424,0.852551698684692,-0.464085191488266,0.0445687659084797,0.88466864824295,-0.838969886302948,-0.5302734375,0.122227653861046,-0.685902893543243,-0.71078634262085,0.155948713421822,-0.812868595123291,0.000118661264423281,-0.582447171211243,-0.852473676204681,-2.95911831926787e-007,-0.52277010679245,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.472109436988831,-0.00532391341403127,-0.881523847579956,-0.0988442227244377,-0.676099538803101,-0.730150103569031,-0.226269230246544,-0.722853541374207,-0.652904987335205,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.472109436988831,-0.00532391341403127,-0.881523847579956,-0.0536522269248962,-0.227453172206879,-0.97230988740921,0.577395439147949,-0.441121131181717,-0.687041938304901,-0.0988442227244377,-0.676099538803101,-0.730150103569031,-0.704409718513489,0.000107401865534484,-0.709793627262115,-0.812868595123291,0.000118661264423281,-0.582447171211243,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.0536522269248962,-0.227453172206879,-0.97230988740921,\n-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.873431265354156,-0.446991860866547,0.193173810839653,-0.949683308601379,-0.00300553464330733,-0.313197374343872,0.532896935939789,0.0133537920191884,0.846074759960175,-0.108442008495331,0.0180171951651573,0.993939459323883,0.312898457050323,-0.30317035317421,0.900101244449615,0.623564124107361,0.781771123409271,0.00130499247461557,0.688613891601563,0.692343652248383,-0.215571701526642,0.796620786190033,0.575817584991455,-0.183927938342094,0.312898457050323,-0.30317035317421,0.900101244449615,0.752812325954437,-0.289424031972885,0.591191411018372,0.532896935939789,0.0133537920191884,0.846074759960175,0.842067956924438,-0.0588998831808567,0.536145865917206,0.763365149497986,-0.125001043081284,0.633757352828979,0.532896935939789,0.0133537920191884,0.846074759960175,0.315021455287933,0.667639553546906,0.674550950527191,-0.152529567480087,0.450641930103302,0.87957751750946,0.419073313474655,0.202598944306374,0.885060012340546,-0.185590207576752,0.0829386487603188,0.979120790958405,-0.448814660310745,0.224063515663147,0.865078568458557,-0.515409469604492,0.101915791630745,0.850862085819244,0.151356309652328,0.151358395814896,-0.976822376251221,0.380553632974625,-0.296130239963531,-0.876062631607056,0.661575853824615,0.331751018762589,-0.672501742839813,-0.257767707109451,-0.179750084877014,-0.949339628219604,0.123946145176888,-0.156060710549355,-0.979939997196198,-0.130363821983337,-0.434679388999939,-0.89109992980957,-0.246528506278992,0.0864357575774193,-0.965273320674896,0.0183170828968287,-0.00617978628724813,-0.999813139438629,-0.303164839744568,0.00688559422269464,-0.952913224697113,0.66670024394989,0.432952612638474,-0.606681823730469,0.376559227705002,0.0804113894701004,-0.922896087169647,0.129860803484917,0.240213453769684,-0.961994647979736,-0.838969886302948,-0.5302734375,0.122227653861046,-0.464085191488266,0.0445687659084797,0.88466864824295,-0.850510120391846,-0.227078184485435,-0.474413365125656,\n0.376559227705002,0.0804113894701004,-0.922896087169647,0.123946145176888,-0.156060710549355,-0.979939997196198,0.0183170828968287,-0.00617978628724813,-0.999813139438629,0.0518634654581547,-0.075635053217411,-0.995785892009735,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.949683308601379,-0.00300553464330733,-0.313197374343872,-0.461041152477264,-0.00344432867132127,-0.887372076511383,-0.472109436988831,-0.00532391341403127,-0.881523847579956,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.326529651880264,-0.00680761877447367,-0.945162415504456,-0.461041152477264,-0.00344432867132127,-0.887372076511383,-0.704409718513489,0.000107401865534484,-0.709793627262115,-0.0536522269248962,-0.227453172206879,-0.97230988740921,-0.472109436988831,-0.00532391341403127,-0.881523847579956,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.226269230246544,-0.722853541374207,-0.652904987335205,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,-0.326529651880264,-0.00680761877447367,-0.945162415504456,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,0.0518634654581547,-0.075635053217411,-0.995785892009735,0.142189741134644,-0.0967937782406807,-0.9850954413414,-0.0223364103585482,-0.576743721961975,-0.816619694232941,0.130361214280128,-0.434677690267563,-0.891101121902466,0.839043617248535,-0.530505955219269,0.120703317224979,0.685371875762939,-0.711494088172913,0.155053615570068,-0.38129711151123,-0.692395269870758,-0.6125368475914,0.539408206939697,-0.818039894104004,0.199623316526413,0.452180683612823,-0.878205835819244,0.155843451619148,-0.680036187171936,-0.698283493518829,-0.22349713742733,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.680036187171936,-0.698283493518829,-0.22349713742733,\n0.452180683612823,-0.878205835819244,0.155843451619148,0.470319837331772,-0.882218599319458,-0.0221268218010664,-0.683448731899261,-0.68956845998764,0.239568650722504,-0.72754293680191,-0.68541157245636,0.0298696421086788,0.470319837331772,-0.882218599319458,-0.0221268218010664,0.44986492395401,-0.877299964427948,-0.167231306433678,-0.598632097244263,-0.69281804561615,0.402048170566559,-0.683448731899261,-0.68956845998764,0.239568650722504,0.44986492395401,-0.877299964427948,-0.167231306433678,0.421293467283249,-0.875048518180847,-0.238331392407417,0.201270371675491,-0.0940680578351021,0.975008428096771,0.108443260192871,0.0180166698992252,0.993939340114594,-0.312896370887756,-0.30316898226738,0.900102436542511,0.0551152527332306,-0.341196656227112,0.938374698162079,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.806312918663025,0.228450119495392,-0.545591473579407,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.914388120174408,0.244719073176384,0.32250103354454,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.789120137691498,0.248433187603951,0.561756551265717,-0.914388120174408,0.244719073176384,0.32250103354454,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.419077694416046,0.202596783638,0.885058403015137,-0.789120137691498,0.248433187603951,0.561756551265717,\n-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.433125436306,0.08011444658041,-0.897766172885895,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.676364660263062,0.342619508504868,-0.652029693126678,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.797359347343445,0.574054718017578,-0.186223655939102,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.429452449083328,0.892922580242157,-0.135128989815712,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.429452449083328,0.892922580242157,-0.135128989815712,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.452375322580338,0.891550540924072,0.0222301334142685,-0.452375322580338,0.891550540924072,0.0222301334142685,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.675342082977295,0.696398377418518,0.242780566215515,-0.47176668047905,0.864408373832703,0.173880234360695,-0.47176668047905,0.864408373832703,0.173880234360695,-0.675342082977295,0.696398377418518,0.242780566215515,-0.581114292144775,0.694480895996094,0.424266964197159,-0.407311707735062,0.861595511436462,0.302903264760971,-0.598632097244263,-0.69281804561615,0.402048170566559,0.421293467283249,-0.875048518180847,-0.238331392407417,0.207105413079262,-0.836149632930756,-0.50789874792099,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.532896161079407,0.0133542641997337,0.846075296401978,0.108443260192871,0.0180166698992252,0.993939340114594,0.185588449239731,0.0829351618885994,0.979121387004852,-0.419077694416046,0.202596783638,0.885058403015137,-0.407311707735062,0.861595511436462,0.302903264760971,-0.581114292144775,0.694480895996094,0.424266964197159,-0.315046489238739,0.668025493621826,0.674157023429871,-0.13514731824398,0.839401423931122,0.526441276073456,0.701747357845306,0.0141455726698041,0.712285459041595,0.528442323207855,0.0112593621015549,0.848894536495209,\n0.49128520488739,-0.262695521116257,0.830439567565918,0.856841146945953,-0.483877241611481,0.178005740046501,0.701747357845306,0.0141455726698041,0.712285459041595,0.68733537197113,0.112072803080082,0.717641830444336,0.517209410667419,0.0911701247096062,0.850989103317261,0.528442323207855,0.0112593621015549,0.848894536495209,0.351653456687927,0.578750193119049,0.735790729522705,0.146949008107185,0.44949945807457,0.881110787391663,0.438047766685486,0.220905914902687,0.871386647224426,0.614956438541412,0.290624231100082,0.733052670955658,0.204843252897263,-0.720215260982513,-0.66281920671463,0.322322010993958,-0.727867662906647,-0.605241358280182,0.198422521352768,-0.758837461471558,0.620317757129669,-0.171031460165977,-0.919269144535065,0.354531347751617,-0.938664674758911,-0.343050718307495,-0.0349972806870937,-0.870814919471741,-0.427383571863174,-0.242949977517128,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.806312918663025,0.228450119495392,-0.545591473579407,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.0223364103585482,-0.576743721961975,-0.816619694232941,0.685371875762939,-0.711494088172913,0.155053615570068,0.539408206939697,-0.818039894104004,0.199623316526413,0.257765382528305,-0.179748728871346,-0.949340522289276,0.304023921489716,0.0101332226768136,-0.952610492706299,0.551838159561157,0.0304165203124285,-0.833396375179291,0.850508272647858,-0.227084189653397,-0.474413722753525,-0.178068861365318,0.174752190709114,-0.968376576900482,0.481170386075974,0.163634076714516,-0.861219465732574,0.249399721622467,0.0914280638098717,-0.964075088500977,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.585506916046143,-0.7851682305336,0.201723843812943,0.0860703811049461,-0.674501478672028,-0.73323917388916,0.204843252897263,-0.720215260982513,-0.66281920671463,\n-0.171031460165977,-0.919269144535065,0.354531347751617,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.532896161079407,0.0133542641997337,0.846075296401978,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.883872747421265,-0.163574352860451,0.438192099332809,-0.419077694416046,0.202596783638,0.885058403015137,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.532896161079407,0.0133542641997337,0.846075296401978,0.207105413079262,-0.836149632930756,-0.50789874792099,-0.938664674758911,-0.343050718307495,-0.0349972806870937,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.757856607437134,-0.532336175441742,0.377189010381699,0.49128520488739,-0.262695521116257,0.830439567565918,0.198422521352768,-0.758837461471558,0.620317757129669,0.322322010993958,-0.727867662906647,-0.605241358280182,0.856841146945953,-0.483877241611481,0.178005740046501,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.870814919471741,-0.427383571863174,-0.242949977517128,0.0860703811049461,-0.674501478672028,-0.73323917388916,-0.585506916046143,-0.7851682305336,0.201723843812943,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.12762725353241,-0.169139251112938,-0.977293848991394,0.130361214280128,-0.434677690267563,-0.891101121902466,-0.0223364103585482,-0.576743721961975,-0.816619694232941,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.680036187171936,-0.698283493518829,-0.22349713742733,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.680036187171936,-0.698283493518829,-0.22349713742733,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.683448731899261,-0.68956845998764,0.239568650722504,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.913034975528717,-0.253099620342255,0.319855839014053,\n-0.683448731899261,-0.68956845998764,0.239568650722504,-0.598632097244263,-0.69281804561615,0.402048170566559,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.598632097244263,-0.69281804561615,0.402048170566559,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.76336532831192,-0.125000447034836,0.63375723361969,0.257765382528305,-0.179748728871346,-0.949340522289276,-0.12762725353241,-0.169139251112938,-0.977293848991394,-0.199198111891747,-0.0411539115011692,-0.979094684123993,0.304023921489716,0.0101332226768136,-0.952610492706299,0.249399721622467,0.0914280638098717,-0.964075088500977,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.433125436306,0.08011444658041,-0.897766172885895,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.797359347343445,0.574054718017578,-0.186223655939102,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.433125436306,0.08011444658041,-0.897766172885895,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.806312918663025,0.228450119495392,-0.545591473579407,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.914388120174408,0.244719073176384,0.32250103354454,-0.675342082977295,0.696398377418518,0.242780566215515,-0.675342082977295,0.696398377418518,0.242780566215515,-0.914388120174408,0.244719073176384,0.32250103354454,-0.789120137691498,0.248433187603951,0.561756551265717,-0.581114292144775,0.694480895996094,0.424266964197159,-0.581114292144775,0.694480895996094,0.424266964197159,-0.789120137691498,0.248433187603951,0.561756551265717,\n-0.419077694416046,0.202596783638,0.885058403015137,-0.315046489238739,0.668025493621826,0.674157023429871,0.528442323207855,0.0112593621015549,0.848894536495209,0.108443260192871,0.0180166698992252,0.993939340114594,0.201270371675491,-0.0940680578351021,0.975008428096771,0.49128520488739,-0.262695521116257,0.830439567565918,0.517209410667419,0.0911701247096062,0.850989103317261,0.185588449239731,0.0829351618885994,0.979121387004852,0.108443260192871,0.0180166698992252,0.993939340114594,0.528442323207855,0.0112593621015549,0.848894536495209,-0.419077694416046,0.202596783638,0.885058403015137,0.185588449239731,0.0829351618885994,0.979121387004852,0.438047766685486,0.220905914902687,0.871386647224426,0.146949008107185,0.44949945807457,0.881110787391663,-0.171031460165977,-0.919269144535065,0.354531347751617,0.198422521352768,-0.758837461471558,0.620317757129669,0.0551152527332306,-0.341196656227112,0.938374698162079,-0.312896370887756,-0.30316898226738,0.900102436542511,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.883872747421265,-0.163574352860451,0.438192099332809,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.0223364103585482,-0.576743721961975,-0.816619694232941,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.797359347343445,0.574054718017578,-0.186223655939102,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.806312918663025,0.228450119495392,-0.545591473579407,-0.171031460165977,-0.919269144535065,0.354531347751617,-0.312896370887756,-0.30316898226738,0.900102436542511,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.585506916046143,-0.7851682305336,0.201723843812943,0.201270371675491,-0.0940680578351021,0.975008428096771,0.0551152527332306,-0.341196656227112,0.938374698162079,0.198422521352768,-0.758837461471558,0.620317757129669,0.49128520488739,-0.262695521116257,0.830439567565918,\n-0.883872747421265,-0.163574352860451,0.438192099332809,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.585506916046143,-0.7851682305336,0.201723843812943,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.315046489238739,0.668025493621826,0.674157023429871,0.146949008107185,0.44949945807457,0.881110787391663,0.351653456687927,0.578750193119049,0.735790729522705,-0.13514731824398,0.839401423931122,0.526441276073456,0.68733537197113,0.112072803080082,0.717641830444336,0.614956438541412,0.290624231100082,0.733052670955658,0.438047766685486,0.220905914902687,0.871386647224426,0.517209410667419,0.0911701247096062,0.850989103317261,0.850508272647858,-0.227084189653397,-0.474413722753525,0.839043617248535,-0.530505955219269,0.120703317224979,0.130361214280128,-0.434677690267563,-0.891101121902466,0.257765382528305,-0.179748728871346,-0.949340522289276,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.676364660263062,0.342619508504868,-0.652029693126678,-0.178068861365318,0.174752190709114,-0.968376576900482,0.481170386075974,0.163634076714516,-0.861219465732574,0.551838159561157,0.0304165203124285,-0.833396375179291,0.304023921489716,0.0101332226768136,-0.952610492706299,0.249399721622467,0.0914280638098717,-0.964075088500977,0.948083400726318,1.65112687966484e-008,0.318021893501282,0.452180683612823,-0.878205835819244,0.155843451619148,0.539408206939697,-0.818039894104004,0.199623316526413,0.727328240871429,-0.00104458257555962,0.686289012432098,0.999005138874054,5.02348207476189e-008,-0.0445948578417301,0.470319837331772,-0.882218599319458,-0.0221268218010664,0.452180683612823,-0.878205835819244,0.155843451619148,0.948083400726318,1.65112687966484e-008,0.318021893501282,0.940430104732513,-4.52081110324798e-008,-0.339987009763718,\n0.44986492395401,-0.877299964427948,-0.167231306433678,0.470319837331772,-0.882218599319458,-0.0221268218010664,0.999005138874054,5.02348207476189e-008,-0.0445948578417301,0.852473616600037,-2.64333579025333e-007,-0.522770285606384,0.421293467283249,-0.875048518180847,-0.238331392407417,0.44986492395401,-0.877299964427948,-0.167231306433678,0.940430104732513,-4.52081110324798e-008,-0.339987009763718,0.727328240871429,-0.00104458257555962,0.686289012432098,0.539408206939697,-0.818039894104004,0.199623316526413,0.685371875762939,-0.711494088172913,0.155053615570068,0.523545145988464,0.00788477715104818,0.851961433887482,0.523545145988464,0.00788477715104818,0.851961433887482,0.685371875762939,-0.711494088172913,0.155053615570068,0.839043617248535,-0.530505955219269,0.120703317224979,0.466128349304199,0.0431555546820164,0.883663952350616,0.812868714332581,0.000118819662020542,-0.582446992397308,0.207105413079262,-0.836149632930756,-0.50789874792099,0.421293467283249,-0.875048518180847,-0.238331392407417,0.852473616600037,-2.64333579025333e-007,-0.522770285606384,0.467949956655502,-0.00741531047970057,-0.883723855018616,0.205130055546761,-0.01137740816921,-0.978668570518494,0.204843252897263,-0.720215260982513,-0.66281920671463,0.0860703811049461,-0.674501478672028,-0.73323917388916,0.467949956655502,-0.00741531047970057,-0.883723855018616,0.0860703811049461,-0.674501478672028,-0.73323917388916,-0.870814919471741,-0.427383571863174,-0.242949977517128,0.801146507263184,0.00023984866857063,-0.59846818447113,0.801146507263184,0.00023984866857063,-0.59846818447113,-0.938664674758911,-0.343050718307495,-0.0349972806870937,0.207105413079262,-0.836149632930756,-0.50789874792099,0.812868714332581,0.000118819662020542,-0.582446992397308,0.205130055546761,-0.01137740816921,-0.978668570518494,0.0140170939266682,-0.019058208912611,-0.999720096588135,0.0140170939266682,-0.019058208912611,-0.999720096588135,0.856841146945953,-0.483877241611481,0.178005740046501,0.322322010993958,-0.727867662906647,-0.605241358280182,-0.532896161079407,0.0133542641997337,0.846075296401978,\n-0.312896370887756,-0.30316898226738,0.900102436542511,0.108443260192871,0.0180166698992252,0.993939340114594,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.797359347343445,0.574054718017578,-0.186223655939102,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.312896370887756,-0.30316898226738,0.900102436542511,-0.532896161079407,0.0133542641997337,0.846075296401978,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.532896161079407,0.0133542641997337,0.846075296401978,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.315046489238739,0.668025493621826,0.674157023429871,-0.419077694416046,0.202596783638,0.885058403015137,0.146949008107185,0.44949945807457,0.881110787391663,0.185588449239731,0.0829351618885994,0.979121387004852,0.517209410667419,0.0911701247096062,0.850989103317261,0.438047766685486,0.220905914902687,0.871386647224426,-0.178068861365318,0.174752190709114,-0.968376576900482,-0.676364660263062,0.342619508504868,-0.652029693126678,-0.444781333208084,-0.232732489705086,-0.864872872829437,0.257765382528305,-0.179748728871346,-0.949340522289276,0.130361214280128,-0.434677690267563,-0.891101121902466,-0.12762725353241,-0.169139251112938,-0.977293848991394,0.249399721622467,0.0914280638098717,-0.964075088500977,0.304023921489716,0.0101332226768136,-0.952610492706299,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.433125436306,0.08011444658041,-0.897766172885895,0.322322010993958,-0.727867662906647,-0.605241358280182,0.204843252897263,-0.720215260982513,-0.66281920671463,0.205130055546761,-0.01137740816921,-0.978668570518494,-0.870814919471741,-0.427383571863174,-0.242949977517128,-0.938664674758911,-0.343050718307495,-0.0349972806870937,0.801146507263184,0.00023984866857063,-0.59846818447113,0.839043617248535,-0.530505955219269,0.120703317224979,0.850508272647858,-0.227084189653397,-0.474413722753525,\n0.466128349304199,0.0431555546820164,0.883663952350616,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.12762725353241,-0.169139251112938,-0.977293848991394,0.150906592607498,0.329798728227615,0.931912004947662,0.189128592610359,0.522824287414551,0.831194996833801,0.388264060020447,0.528846085071564,0.754700541496277,0.858800172805786,0.271537780761719,0.434430092573166,0.743789613246918,0.0799255594611168,-0.663617968559265,0.743789613246918,0.0799255594611168,-0.663617968559265,0.743789613246918,0.0799255594611168,-0.663617968559265,-0.347785919904709,0.133236810564995,0.928058683872223,-0.104220665991306,0.344170242547989,0.933104991912842,-0.0869597047567368,0.548145830631256,0.831849813461304,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.673399865627289,0.731426298618317,0.107462607324123,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.835862636566162,0.227462083101273,-0.499594479799271,-0.835862636566162,0.227462083101273,-0.499594479799271,-0.835862636566162,0.227462083101273,-0.499594479799271,-0.105340361595154,-0.682143568992615,-0.723590731620789,-0.107317022979259,-0.361611425876617,-0.926131844520569,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.374457865953445,-0.757000803947449,-0.535472750663757,0.810609877109528,0.241179883480072,-0.533613920211792,0.791842222213745,0.591257572174072,0.152972057461739,0.745590567588806,0.664693832397461,0.047716099768877,-0.0846520513296127,0.694811403751373,0.714192628860474,-0.0459145493805408,0.561039865016937,0.826514482498169,0.152771726250649,0.56620579957962,0.809982597827911,0.165652215480804,0.70129519701004,0.693357288837433,0.165652215480804,0.70129519701004,0.693357288837433,0.152771726250649,0.56620579957962,0.809982597827911,0.340089678764343,0.499063193798065,0.797041356563568,0.40163654088974,0.616658449172974,0.677067518234253,0.40163654088974,0.616658449172974,0.677067518234253,0.340089678764343,0.499063193798065,0.797041356563568,0.490783363580704,0.368656903505325,0.789445221424103,\n0.591461837291718,0.452348530292511,0.667498111724854,0.591461837291718,0.452348530292511,0.667498111724854,0.490783363580704,0.368656903505325,0.789445221424103,0.584496080875397,0.192600935697556,0.788206338882446,0.709483921527863,0.230550438165665,0.665942311286926,0.709483921527863,0.230550438165665,0.665942311286926,0.584496080875397,0.192600935697556,0.788206338882446,0.608551204204559,-0.00531027046963573,0.79349684715271,0.739747881889343,-0.0187778417021036,0.672622084617615,0.739747881889343,-0.0187778417021036,0.672622084617615,0.608551204204559,-0.00531027046963573,0.79349684715271,0.55970573425293,-0.198335975408554,0.804606914520264,0.678183913230896,-0.26194903254509,0.686621606349945,0.678183913230896,-0.26194903254509,0.686621606349945,0.55970573425293,-0.198335975408554,0.804606914520264,0.444581091403961,-0.360417783260345,0.820028483867645,0.53311824798584,-0.466141611337662,0.706043124198914,0.53311824798584,-0.466141611337662,0.706043124198914,0.444581091403961,-0.360417783260345,0.820028483867645,0.278635025024414,-0.469717562198639,0.837692022323608,0.324051290750504,-0.603787064552307,0.728307604789734,0.324051290750504,-0.603787064552307,0.728307604789734,0.278635025024414,-0.469717562198639,0.837692022323608,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0793530717492104,-0.656251728534698,0.750357747077942,0.0793530717492104,-0.656251728534698,0.750357747077942,0.0844017341732979,-0.511408865451813,0.855182647705078,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.167935863137245,-0.616517841815948,0.769222497940063,-0.167935863137245,-0.616517841815948,0.769222497940063,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.384569972753525,-0.489893972873688,0.782374441623688,-0.384569972753525,-0.489893972873688,0.782374441623688,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.541184604167938,-0.293485879898071,0.788026213645935,-0.541184604167938,-0.293485879898071,0.788026213645935,\n-0.408186405897141,-0.223486140370369,0.885120213031769,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.616609632968903,-0.0538487322628498,0.785425305366516,-0.616609632968903,-0.0538487322628498,0.785425305366516,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.455481648445129,0.165574789047241,0.874712228775024,-0.600685119628906,0.196671590209007,0.774917840957642,-0.600685119628906,0.196671590209007,0.774917840957642,-0.455481648445129,0.165574789047241,0.874712228775024,-0.372059375047684,0.346225291490555,0.861220002174377,-0.495565205812454,0.424222469329834,0.757925093173981,-0.495565205812454,0.424222469329834,0.757925093173981,-0.372059375047684,0.346225291490555,0.861220002174377,-0.229102194309235,0.484258502721787,0.844396770000458,-0.315447002649307,0.598084509372711,0.736741542816162,-0.315447002649307,0.598084509372711,0.736741542816162,-0.229102194309235,0.484258502721787,0.844396770000458,-0.0459145493805408,0.561039865016937,0.826514482498169,-0.0846520513296127,0.694811403751373,0.714192628860474,-0.0459145493805408,0.561039865016937,0.826514482498169,-0.00891148950904608,0.421955615282059,0.906572699546814,0.136559754610062,0.425709754228592,0.894495725631714,0.152771726250649,0.56620579957962,0.809982597827911,0.152771726250649,0.56620579957962,0.809982597827911,0.136559754610062,0.425709754228592,0.894495725631714,0.273672163486481,0.376535683870316,0.88505619764328,0.340089678764343,0.499063193798065,0.797041356563568,0.340089678764343,0.499063193798065,0.797041356563568,0.273672163486481,0.376535683870316,0.88505619764328,0.384000062942505,0.28102844953537,0.879526555538177,0.490783363580704,0.368656903505325,0.789445221424103,0.490783363580704,0.368656903505325,0.789445221424103,0.384000062942505,0.28102844953537,0.879526555538177,0.452635645866394,0.15212544798851,0.878623247146606,0.584496080875397,0.192600935697556,0.788206338882446,0.584496080875397,0.192600935697556,0.788206338882446,0.452635645866394,0.15212544798851,0.878623247146606,0.470285147428513,0.00726274587213993,0.882484614849091,\n0.608551204204559,-0.00531027046963573,0.79349684715271,0.608551204204559,-0.00531027046963573,0.79349684715271,0.470285147428513,0.00726274587213993,0.882484614849091,0.434570521116257,-0.134057357907295,0.890604913234711,0.55970573425293,-0.198335975408554,0.804606914520264,0.55970573425293,-0.198335975408554,0.804606914520264,0.434570521116257,-0.134057357907295,0.890604913234711,0.350383520126343,-0.252725511789322,0.901865363121033,0.444581091403961,-0.360417783260345,0.820028483867645,0.444581091403961,-0.360417783260345,0.820028483867645,0.350383520126343,-0.252725511789322,0.901865363121033,0.228896334767342,-0.332815736532211,0.91478967666626,0.278635025024414,-0.469717562198639,0.837692022323608,0.278635025024414,-0.469717562198639,0.837692022323608,0.228896334767342,-0.332815736532211,0.91478967666626,0.0866658836603165,-0.363462805747986,0.927568793296814,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0866658836603165,-0.363462805747986,0.927568793296814,-0.0571252852678299,-0.340407937765121,0.938540935516357,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.0571252852678299,-0.340407937765121,0.938540935516357,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.274222016334534,-0.152747601270676,0.949458003044128,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.274222016334534,-0.152747601270676,0.949458003044128,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.308955788612366,0.132258638739586,0.941835463047028,-0.455481648445129,0.165574789047241,0.874712228775024,\n-0.455481648445129,0.165574789047241,0.874712228775024,-0.308955788612366,0.132258638739586,0.941835463047028,-0.247846245765686,0.264629483222961,0.931956827640533,-0.372059375047684,0.346225291490555,0.861220002174377,-0.372059375047684,0.346225291490555,0.861220002174377,-0.247846245765686,0.264629483222961,0.931956827640533,-0.143103122711182,0.365745604038239,0.919647574424744,-0.229102194309235,0.484258502721787,0.844396770000458,-0.229102194309235,0.484258502721787,0.844396770000458,-0.143103122711182,0.365745604038239,0.919647574424744,-0.00891148950904608,0.421955615282059,0.906572699546814,-0.0459145493805408,0.561039865016937,0.826514482498169,0.404841154813766,0.621719241142273,0.670498967170715,0.166674554347992,0.707286298274994,0.686997592449188,0.162125825881958,0.655974566936493,0.737165212631226,0.381767153739929,0.577166616916656,0.721895158290863,0.59637314081192,0.455737888813019,0.660789012908936,0.404841154813766,0.621719241142273,0.670498967170715,0.381767153739929,0.577166616916656,0.721895158290863,0.55845445394516,0.424168527126312,0.712888300418854,0.71536773443222,0.231748938560486,0.659197568893433,0.59637314081192,0.455737888813019,0.660789012908936,0.55845445394516,0.424168527126312,0.712888300418854,0.668235063552856,0.217623174190521,0.711408495903015,0.74573540687561,-0.019992433488369,0.665942192077637,0.71536773443222,0.231748938560486,0.659197568893433,0.668235063552856,0.217623174190521,0.711408495903015,0.69628119468689,-0.0145472744479775,0.717621684074402,0.683374345302582,-0.265446841716766,0.680101037025452,0.74573540687561,-0.019992433488369,0.665942192077637,0.69628119468689,-0.0145472744479775,0.717621684074402,0.638800263404846,-0.240928456187248,0.730676174163818,0.536719858646393,-0.471459150314331,0.699755728244781,0.683374345302582,-0.265446841716766,0.680101037025452,0.638800263404846,-0.240928456187248,0.730676174163818,0.503562271595001,-0.430930227041245,0.748815178871155,0.325602531433105,-0.610175728797913,0.722266256809235,0.536719858646393,-0.471459150314331,0.699755728244781,\n0.503562271595001,-0.430930227041245,0.748815178871155,0.308857411146164,-0.558854043483734,0.769603312015533,0.0785464271903038,-0.662888288497925,0.744586825370789,0.325602531433105,-0.610175728797913,0.722266256809235,0.308857411146164,-0.558854043483734,0.769603312015533,0.0810477286577225,-0.607410430908203,0.790242910385132,-0.171089246869087,-0.622517466545105,0.763675689697266,0.0785464271903038,-0.662888288497925,0.744586825370789,0.0810477286577225,-0.607410430908203,0.790242910385132,-0.149094551801682,-0.570135653018951,0.807908475399017,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.149094551801682,-0.570135653018951,0.807908475399017,-0.350501775741577,-0.452110230922699,0.820210218429565,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.350501775741577,-0.452110230922699,0.820210218429565,-0.495985597372055,-0.269255638122559,0.825529932975769,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.495985597372055,-0.269255638122559,0.825529932975769,-0.56595778465271,-0.0462783649563789,0.823134303092957,-0.607059121131897,0.19852888584137,0.769457936286926,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.56595778465271,-0.0462783649563789,0.823134303092957,-0.551003336906433,0.186732366681099,0.813342690467834,-0.500814497470856,0.428098827600479,0.752274036407471,-0.607059121131897,0.19852888584137,0.769457936286926,-0.551003336906433,0.186732366681099,0.813342690467834,-0.453138768672943,0.398362696170807,0.797478795051575,-0.31894525885582,0.603455662727356,0.730831801891327,-0.500814497470856,0.428098827600479,0.752274036407471,-0.453138768672943,0.398362696170807,0.797478795051575,-0.285550057888031,0.56007307767868,0.777675628662109,-0.085962675511837,0.700907051563263,0.708053469657898,-0.31894525885582,0.603455662727356,0.730831801891327,-0.285550057888031,0.56007307767868,0.777675628662109,\n-0.070789560675621,0.65000593662262,0.756624817848206,0.166674554347992,0.707286298274994,0.686997592449188,-0.085962675511837,0.700907051563263,0.708053469657898,-0.070789560675621,0.65000593662262,0.756624817848206,0.162125825881958,0.655974566936493,0.737165212631226,0.449477076530457,0.711219429969788,0.540497243404388,0.173702031373978,0.810399651527405,0.559535503387451,0.166674554347992,0.707286298274994,0.686997592449188,0.404841154813766,0.621719241142273,0.670498967170715,0.671196460723877,0.518955230712891,0.529321074485779,0.449477076530457,0.711219429969788,0.540497243404388,0.404841154813766,0.621719241142273,0.670498967170715,0.59637314081192,0.455737888813019,0.660789012908936,0.808924913406372,0.25956854224205,0.527508020401001,0.671196460723877,0.518955230712891,0.529321074485779,0.59637314081192,0.455737888813019,0.660789012908936,0.71536773443222,0.231748938560486,0.659197568893433,0.844040215015411,-0.0319031029939651,0.53533011674881,0.808924913406372,0.25956854224205,0.527508020401001,0.71536773443222,0.231748938560486,0.659197568893433,0.74573540687561,-0.019992433488369,0.665942192077637,0.771810173988342,-0.316096395254135,0.551717400550842,0.844040215015411,-0.0319031029939651,0.53533011674881,0.74573540687561,-0.019992433488369,0.665942192077637,0.683374345302582,-0.265446841716766,0.680101037025452,0.601994156837463,-0.554628610610962,0.574447631835938,0.771810173988342,-0.316096395254135,0.551717400550842,0.683374345302582,-0.265446841716766,0.680101037025452,0.536719858646393,-0.471459150314331,0.699755728244781,0.357549130916595,-0.715268313884735,0.600458025932312,0.601994156837463,-0.554628610610962,0.574447631835938,0.536719858646393,-0.471459150314331,0.699755728244781,0.325602531433105,-0.610175728797913,0.722266256809235,0.0714418441057205,-0.776358008384705,0.626230239868164,0.357549130916595,-0.715268313884735,0.600458025932312,0.325602531433105,-0.610175728797913,0.722266256809235,0.0785464271903038,-0.662888288497925,0.744586825370789,-0.2176783233881,-0.729624152183533,0.648278295993805,\n0.0714418441057205,-0.776358008384705,0.626230239868164,0.0785464271903038,-0.662888288497925,0.744586825370789,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.2176783233881,-0.729624152183533,0.648278295993805,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.722602725028992,0.221371009945869,0.654858946800232,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.607059121131897,0.19852888584137,0.769457936286926,-0.599480926990509,0.48726087808609,0.634979903697968,-0.722602725028992,0.221371009945869,0.654858946800232,-0.607059121131897,0.19852888584137,0.769457936286926,-0.500814497470856,0.428098827600479,0.752274036407471,-0.388752341270447,0.690308272838593,0.610201716423035,-0.599480926990509,0.48726087808609,0.634979903697968,-0.500814497470856,0.428098827600479,0.752274036407471,-0.31894525885582,0.603455662727356,0.730831801891327,-0.118887908756733,0.803094327449799,0.583870828151703,-0.388752341270447,0.690308272838593,0.610201716423035,-0.31894525885582,0.603455662727356,0.730831801891327,-0.085962675511837,0.700907051563263,0.708053469657898,0.173702031373978,0.810399651527405,0.559535503387451,-0.118887908756733,0.803094327449799,0.583870828151703,-0.085962675511837,0.700907051563263,0.708053469657898,0.166674554347992,0.707286298274994,0.686997592449188,0.491414904594421,0.804159760475159,0.334422618150711,0.175544574856758,0.917761504650116,0.356227368116379,0.173702031373978,0.810399651527405,0.559535503387451,\n0.449477076530457,0.711219429969788,0.540497243404388,0.745363593101501,0.583941757678986,0.321628957986832,0.491414904594421,0.804159760475159,0.334422618150711,0.449477076530457,0.711219429969788,0.540497243404388,0.671196460723877,0.518955230712891,0.529321074485779,0.90310138463974,0.286846220493317,0.319573432207108,0.745363593101501,0.583941757678986,0.321628957986832,0.671196460723877,0.518955230712891,0.529321074485779,0.808924913406372,0.25956854224205,0.527508020401001,0.943322658538818,-0.0469927303493023,0.328533172607422,0.90310138463974,0.286846220493317,0.319573432207108,0.808924913406372,0.25956854224205,0.527508020401001,0.844040215015411,-0.0319031029939651,0.53533011674881,0.860598742961884,-0.372500419616699,0.34729415178299,0.943322658538818,-0.0469927303493023,0.328533172607422,0.844040215015411,-0.0319031029939651,0.53533011674881,0.771810173988342,-0.316096395254135,0.551717400550842,0.666100323200226,-0.64570939540863,0.373322576284409,0.860598742961884,-0.372500419616699,0.34729415178299,0.771810173988342,-0.316096395254135,0.551717400550842,0.601994156837463,-0.554628610610962,0.574447631835938,0.38611564040184,-0.829714477062225,0.403098732233047,0.666100323200226,-0.64570939540863,0.373322576284409,0.601994156837463,-0.554628610610962,0.574447631835938,0.357549130916595,-0.715268313884735,0.600458025932312,0.0584128089249134,-0.899684309959412,0.432615399360657,0.38611564040184,-0.829714477062225,0.403098732233047,0.357549130916595,-0.715268313884735,0.600458025932312,0.0714418441057205,-0.776358008384705,0.626230239868164,-0.272724866867065,-0.846146643161774,0.457883208990097,0.0584128089249134,-0.899684309959412,0.432615399360657,0.0714418441057205,-0.776358008384705,0.626230239868164,-0.2176783233881,-0.729624152183533,0.648278295993805,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.2176783233881,-0.729624152183533,0.648278295993805,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.771963715553284,-0.413211286067963,0.48304083943367,\n-0.562557637691498,-0.676345586776733,0.475484549999237,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.85104501247406,0.243097007274628,0.465431213378906,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.722602725028992,0.221371009945869,0.654858946800232,-0.71004056930542,0.547635197639465,0.442648887634277,-0.85104501247406,0.243097007274628,0.465431213378906,-0.722602725028992,0.221371009945869,0.654858946800232,-0.599480926990509,0.48726087808609,0.634979903697968,-0.468671709299088,0.780212640762329,0.414264500141144,-0.71004056930542,0.547635197639465,0.442648887634277,-0.599480926990509,0.48726087808609,0.634979903697968,-0.388752341270447,0.690308272838593,0.610201716423035,-0.15956723690033,0.909399926662445,0.384096413850784,-0.468671709299088,0.780212640762329,0.414264500141144,-0.388752341270447,0.690308272838593,0.610201716423035,-0.118887908756733,0.803094327449799,0.583870828151703,0.175544574856758,0.917761504650116,0.356227368116379,-0.15956723690033,0.909399926662445,0.384096413850784,-0.118887908756733,0.803094327449799,0.583870828151703,0.173702031373978,0.810399651527405,0.559535503387451,0.175544574856758,0.917761504650116,0.356227368116379,0.491414904594421,0.804159760475159,0.334422618150711,0.50420355796814,0.839778661727905,0.20137183368206,0.172172844409943,0.959192931652069,0.22428885102272,0.491414904594421,0.804159760475159,0.334422618150711,0.745363593101501,0.583941757678986,0.321628957986832,0.7711421251297,0.608294606208801,0.187929421663284,0.50420355796814,0.839778661727905,0.20137183368206,0.745363593101501,0.583941757678986,0.321628957986832,0.90310138463974,0.286846220493317,0.319573432207108,0.936946272850037,0.296007573604584,0.185771778225899,\n0.7711421251297,0.608294606208801,0.187929421663284,0.90310138463974,0.286846220493317,0.319573432207108,0.943322658538818,-0.0469927303493023,0.328533172607422,0.979227960109711,-0.0549116656184196,0.195185303688049,0.936946272850037,0.296007573604584,0.185771778225899,0.943322658538818,-0.0469927303493023,0.328533172607422,0.860598742961884,-0.372500419616699,0.34729415178299,0.892272472381592,-0.397068977355957,0.214909449219704,0.979227960109711,-0.0549116656184196,0.195185303688049,0.860598742961884,-0.372500419616699,0.34729415178299,0.666100323200226,-0.64570939540863,0.373322576284409,0.687824785709381,-0.684250712394714,0.242276713252068,0.892272472381592,-0.397068977355957,0.214909449219704,0.666100323200226,-0.64570939540863,0.373322576284409,0.38611564040184,-0.829714477062225,0.403098732233047,0.393515467643738,-0.877666234970093,0.273582845926285,0.687824785709381,-0.684250712394714,0.242276713252068,0.38611564040184,-0.829714477062225,0.403098732233047,0.0584128089249134,-0.899684309959412,0.432615399360657,0.0490523800253868,-0.951213300228119,0.304609894752502,0.393515467643738,-0.877666234970093,0.273582845926285,0.0584128089249134,-0.899684309959412,0.432615399360657,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.299019634723663,-0.894943594932556,0.331154435873032,0.0490523800253868,-0.951213300228119,0.304609894752502,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.603678643703461,-0.716462135314941,0.349648594856262,-0.299019634723663,-0.894943594932556,0.331154435873032,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.823797225952148,-0.439864456653595,0.357599437236786,-0.603678643703461,-0.716462135314941,0.349648594856262,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.929643630981445,-0.102520182728767,0.353909969329834,-0.823797225952148,-0.439864456653595,0.357599437236786,-0.872656047344208,-0.0922837853431702,0.479536414146423,\n-0.85104501247406,0.243097007274628,0.465431213378906,-0.90692675113678,0.250015825033188,0.339080929756165,-0.929643630981445,-0.102520182728767,0.353909969329834,-0.85104501247406,0.243097007274628,0.465431213378906,-0.71004056930542,0.547635197639465,0.442648887634277,-0.758711993694305,0.570132851600647,0.315126359462738,-0.90692675113678,0.250015825033188,0.339080929756165,-0.71004056930542,0.547635197639465,0.442648887634277,-0.468671709299088,0.780212640762329,0.414264500141144,-0.504998087882996,0.81461375951767,0.285274267196655,-0.758711993694305,0.570132851600647,0.315126359462738,-0.468671709299088,0.780212640762329,0.414264500141144,-0.15956723690033,0.909399926662445,0.384096413850784,-0.180075660347939,0.950408160686493,0.253568828105927,-0.504998087882996,0.81461375951767,0.285274267196655,-0.15956723690033,0.909399926662445,0.384096413850784,0.175544574856758,0.917761504650116,0.356227368116379,0.172172844409943,0.959192931652069,0.22428885102272,-0.180075660347939,0.950408160686493,0.253568828105927,0.081717848777771,0.0365908145904541,0.995983600616455,0.136559754610062,0.425709754228592,0.894495725631714,-0.00891148950904608,0.421955615282059,0.906572699546814,0.081717848777771,0.0365908145904541,0.995983600616455,0.273672163486481,0.376535683870316,0.88505619764328,0.136559754610062,0.425709754228592,0.894495725631714,0.081717848777771,0.0365908145904541,0.995983600616455,0.384000062942505,0.28102844953537,0.879526555538177,0.273672163486481,0.376535683870316,0.88505619764328,0.081717848777771,0.0365908145904541,0.995983600616455,0.452635645866394,0.15212544798851,0.878623247146606,0.384000062942505,0.28102844953537,0.879526555538177,0.081717848777771,0.0365908145904541,0.995983600616455,0.470285147428513,0.00726274587213993,0.882484614849091,0.452635645866394,0.15212544798851,0.878623247146606,0.081717848777771,0.0365908145904541,0.995983600616455,0.434570521116257,-0.134057357907295,0.890604913234711,0.470285147428513,0.00726274587213993,0.882484614849091,0.081717848777771,0.0365908145904541,0.995983600616455,\n0.350383520126343,-0.252725511789322,0.901865363121033,0.434570521116257,-0.134057357907295,0.890604913234711,0.081717848777771,0.0365908145904541,0.995983600616455,0.228896334767342,-0.332815736532211,0.91478967666626,0.350383520126343,-0.252725511789322,0.901865363121033,0.081717848777771,0.0365908145904541,0.995983600616455,0.0866658836603165,-0.363462805747986,0.927568793296814,0.228896334767342,-0.332815736532211,0.91478967666626,0.081717848777771,0.0365908145904541,0.995983600616455,-0.0571252852678299,-0.340407937765121,0.938540935516357,0.0866658836603165,-0.363462805747986,0.927568793296814,0.081717848777771,0.0365908145904541,0.995983600616455,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.0571252852678299,-0.340407937765121,0.938540935516357,0.081717848777771,0.0365908145904541,0.995983600616455,-0.274222016334534,-0.152747601270676,0.949458003044128,-0.183149293065071,-0.2668676674366,0.946170151233673,0.081717848777771,0.0365908145904541,0.995983600616455,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.274222016334534,-0.152747601270676,0.949458003044128,0.081717848777771,0.0365908145904541,0.995983600616455,-0.308955788612366,0.132258638739586,0.941835463047028,-0.318153589963913,-0.0134182879701257,0.947944223880768,0.081717848777771,0.0365908145904541,0.995983600616455,-0.247846245765686,0.264629483222961,0.931956827640533,-0.308955788612366,0.132258638739586,0.941835463047028,0.081717848777771,0.0365908145904541,0.995983600616455,-0.143103122711182,0.365745604038239,0.919647574424744,-0.247846245765686,0.264629483222961,0.931956827640533,0.081717848777771,0.0365908145904541,0.995983600616455,-0.00891148950904608,0.421955615282059,0.906572699546814,-0.143103122711182,0.365745604038239,0.919647574424744,0.0240920167416334,0.706818819046021,0.706984281539917,0.034081757068634,0.56817638874054,0.82220071554184,0.233674764633179,0.535661220550537,0.811457395553589,0.2747623026371,0.666023552417755,0.693482756614685,-0.224320411682129,0.654188752174377,0.722300112247467,-0.163695827126503,0.526300370693207,0.834392964839935,\n0.034081757068634,0.56817638874054,0.82220071554184,0.0240920167416334,0.706818819046021,0.706984281539917,-0.436875194311142,0.515262722969055,0.737322390079498,-0.332944214344025,0.415709882974625,0.846364855766296,-0.163695827126503,0.526300370693207,0.834392964839935,-0.224320411682129,0.654188752174377,0.722300112247467,-0.584827542304993,0.308754056692123,0.750098466873169,-0.450771480798721,0.251298606395721,0.856536090373993,-0.332944214344025,0.415709882974625,0.846364855766296,-0.436875194311142,0.515262722969055,0.737322390079498,-0.648242235183716,0.0625410452485085,0.758861362934113,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.450771480798721,0.251298606395721,0.856536090373993,-0.584827542304993,0.308754056692123,0.750098466873169,-0.61853951215744,-0.190050154924393,0.762423634529114,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.648242235183716,0.0625410452485085,0.758861362934113,-0.499736815690994,-0.414954453706741,0.760313034057617,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.61853951215744,-0.190050154924393,0.762423634529114,-0.307833850383759,-0.581823825836182,0.752807676792145,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.499736815690994,-0.414954453706741,0.760313034057617,-0.0688507258892059,-0.668073415756226,0.740903198719025,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.307833850383759,-0.581823825836182,0.752807676792145,0.184999153017998,-0.662078678607941,0.726241767406464,0.162060111761093,-0.521743357181549,0.837568163871765,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.0688507258892059,-0.668073415756226,0.740903198719025,0.419496387243271,-0.564626634120941,0.710788011550903,0.348768085241318,-0.444183886051178,0.825264513492584,0.162060111761093,-0.521743357181549,0.837568163871765,\n0.184999153017998,-0.662078678607941,0.726241767406464,0.602874755859375,-0.388880640268326,0.696644723415375,0.494788855314255,-0.304279118776321,0.814001321792603,0.348768085241318,-0.444183886051178,0.825264513492584,0.419496387243271,-0.564626634120941,0.710788011550903,0.710392951965332,-0.158590719103813,0.685704588890076,0.580431342124939,-0.120935805141926,0.805278837680817,0.494788855314255,-0.304279118776321,0.814001321792603,0.602874755859375,-0.388880640268326,0.696644723415375,0.727535784244537,0.0951134264469147,0.67944473028183,0.594111680984497,0.0810576304793358,0.800288081169128,0.580431342124939,-0.120935805141926,0.805278837680817,0.710392951965332,-0.158590719103813,0.685704588890076,0.651982724666595,0.337994933128357,0.678732573986053,0.533979833126068,0.274454295635223,0.799712657928467,0.594111680984497,0.0810576304793358,0.800288081169128,0.727535784244537,0.0951134264469147,0.67944473028183,0.493931025266647,0.53727263212204,0.683644890785217,0.408169955015183,0.433131784200668,0.803613185882568,0.533979833126068,0.274454295635223,0.799712657928467,0.651982724666595,0.337994933128357,0.678732573986053,0.2747623026371,0.666023552417755,0.693482756614685,0.233674764633179,0.535661220550537,0.811457395553589,0.408169955015183,0.433131784200668,0.803613185882568,0.493931025266647,0.53727263212204,0.683644890785217,0.034081757068634,0.56817638874054,0.82220071554184,0.0417974554002285,0.434518992900848,0.899692296981812,0.192422226071358,0.410055339336395,0.891531467437744,0.233674764633179,0.535661220550537,0.811457395553589,-0.163695827126503,0.526300370693207,0.834392964839935,-0.107358939945698,0.402824491262436,0.908959031105042,0.0417974554002285,0.434518992900848,0.899692296981812,0.034081757068634,0.56817638874054,0.82220071554184,-0.332944214344025,0.415709882974625,0.846364855766296,-0.234948098659515,0.319365561008453,0.918044149875641,-0.107358939945698,0.402824491262436,0.908959031105042,-0.163695827126503,0.526300370693207,0.834392964839935,-0.450771480798721,0.251298606395721,0.856536090373993,\n-0.323758065700531,0.195376396179199,0.925747692584991,-0.234948098659515,0.319365561008453,0.918044149875641,-0.332944214344025,0.415709882974625,0.846364855766296,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.361866801977158,0.0475688315927982,0.931015372276306,-0.323758065700531,0.195376396179199,0.925747692584991,-0.450771480798721,0.251298606395721,0.856536090373993,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.361866801977158,0.0475688315927982,0.931015372276306,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.272957742214203,-0.239076629281044,0.931845724582672,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.272957742214203,-0.239076629281044,0.931845724582672,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.0142518226057291,-0.391459435224533,0.92008501291275,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.230319395661354,-0.457817196846008,0.858694553375244,0.162060111761093,-0.521743357181549,0.837568163871765,0.13820318877697,-0.388006061315537,0.911236047744751,-0.0142518226057291,-0.391459435224533,0.92008501291275,-0.0400415360927582,-0.52651184797287,0.849224328994751,0.348768085241318,-0.444183886051178,0.825264513492584,0.279189854860306,-0.329605966806412,0.901894092559814,0.13820318877697,-0.388006061315537,0.911236047744751,0.162060111761093,-0.521743357181549,0.837568163871765,0.494788855314255,-0.304279118776321,0.814001321792603,0.38951188325882,-0.224056273698807,0.893352866172791,0.279189854860306,-0.329605966806412,0.901894092559814,0.348768085241318,-0.444183886051178,0.825264513492584,0.580431342124939,-0.120935805141926,0.805278837680817,0.454289197921753,-0.0856318548321724,0.886729121208191,\n0.38951188325882,-0.224056273698807,0.893352866172791,0.494788855314255,-0.304279118776321,0.814001321792603,0.594111680984497,0.0810576304793358,0.800288081169128,0.464658886194229,0.0669254288077354,0.88295704126358,0.454289197921753,-0.0856318548321724,0.886729121208191,0.580431342124939,-0.120935805141926,0.805278837680817,0.533979833126068,0.274454295635223,0.799712657928467,0.419226229190826,0.21297712624073,0.882547497749329,0.464658886194229,0.0669254288077354,0.88295704126358,0.594111680984497,0.0810576304793358,0.800288081169128,0.408169955015183,0.433131784200668,0.803613185882568,0.324202924966812,0.332735329866409,0.885539174079895,0.419226229190826,0.21297712624073,0.882547497749329,0.533979833126068,0.274454295635223,0.799712657928467,0.233674764633179,0.535661220550537,0.811457395553589,0.192422226071358,0.410055339336395,0.891531467437744,0.324202924966812,0.332735329866409,0.885539174079895,0.408169955015183,0.433131784200668,0.803613185882568,-0.183556318283081,0.567722976207733,0.802494645118713,0.0306328255683184,0.613005936145782,0.789484262466431,0.0251268558204174,0.686642229557037,0.726561188697815,-0.215900436043739,0.635483682155609,0.741314709186554,-0.36688569188118,0.447914391756058,0.81533282995224,-0.183556318283081,0.567722976207733,0.802494645118713,-0.215900436043739,0.635483682155609,0.741314709186554,-0.422100454568863,0.500542402267456,0.755836308002472,-0.494506686925888,0.269742369651794,0.826257944107056,-0.36688569188118,0.447914391756058,0.81533282995224,-0.422100454568863,0.500542402267456,0.755836308002472,-0.565596282482147,0.300016045570374,0.768173933029175,-0.54912269115448,0.0573039166629314,0.833774864673615,-0.494506686925888,0.269742369651794,0.826257944107056,-0.565596282482147,0.300016045570374,0.768173933029175,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.523315012454987,-0.160613864660263,0.836865901947021,-0.54912269115448,0.0573039166629314,0.833774864673615,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.597933351993561,-0.184150025248528,0.780105412006378,\n-0.420577734708786,-0.354520976543427,0.835122287273407,-0.523315012454987,-0.160613864660263,0.836865901947021,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.2548748254776,-0.498156249523163,0.828781723976135,-0.420577734708786,-0.354520976543427,0.835122287273407,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.0486774146556854,-0.572135806083679,0.818713128566742,-0.2548748254776,-0.498156249523163,0.828781723976135,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.0639727190136909,-0.647417724132538,0.75944572687149,0.170113638043404,-0.566585600376129,0.806251883506775,-0.0486774146556854,-0.572135806083679,0.818713128566742,-0.0639727190136909,-0.647417724132538,0.75944572687149,0.182335004210472,-0.641266107559204,0.74533998966217,0.371963411569595,-0.482319325208664,0.793102324008942,0.170113638043404,-0.566585600376129,0.806251883506775,0.182335004210472,-0.641266107559204,0.74533998966217,0.409660339355469,-0.546471178531647,0.730443477630615,0.529680788516998,-0.330754697322845,0.781050324440002,0.371963411569595,-0.482319325208664,0.793102324008942,0.409660339355469,-0.546471178531647,0.730443477630615,0.587337672710419,-0.375847816467285,0.71677953004837,0.622047901153564,-0.132383927702904,0.771706521511078,0.529680788516998,-0.330754697322845,0.781050324440002,0.587337672710419,-0.375847816467285,0.71677953004837,0.691395580768585,-0.152425721287727,0.706214249134064,0.636672735214233,0.0860606729984283,0.766316771507263,0.622047901153564,-0.132383927702904,0.771706521511078,0.691395580768585,-0.152425721287727,0.706214249134064,0.707835674285889,0.0936401560902596,0.700142979621887,0.571585476398468,0.295183837413788,0.765608549118042,0.636672735214233,0.0860606729984283,0.766316771507263,0.707835674285889,0.0936401560902596,0.700142979621887,0.634431779384613,0.329166561365128,0.699389517307281,0.435493797063828,0.466814637184143,0.769694268703461,0.571585476398468,0.295183837413788,0.765608549118042,\n0.634431779384613,0.329166561365128,0.699389517307281,0.481055945158005,0.522368133068085,0.704071521759033,0.246697977185249,0.577754318714142,0.778036057949066,0.435493797063828,0.466814637184143,0.769694268703461,0.481055945158005,0.522368133068085,0.704071521759033,0.268397808074951,0.647146701812744,0.713557183742523,0.0306328255683184,0.613005936145782,0.789484262466431,0.246697977185249,0.577754318714142,0.778036057949066,0.268397808074951,0.647146701812744,0.713557183742523,0.0251268558204174,0.686642229557037,0.726561188697815,-0.215900436043739,0.635483682155609,0.741314709186554,0.0251268558204174,0.686642229557037,0.726561188697815,0.0138044422492385,0.811234712600708,0.58455765247345,-0.272946208715439,0.75020706653595,0.602237343788147,-0.422100454568863,0.500542402267456,0.755836308002472,-0.215900436043739,0.635483682155609,0.741314709186554,-0.272946208715439,0.75020706653595,0.602237343788147,-0.518174409866333,0.589555025100708,0.6196129322052,-0.565596282482147,0.300016045570374,0.768173933029175,-0.422100454568863,0.500542402267456,0.755836308002472,-0.518174409866333,0.589555025100708,0.6196129322052,-0.688787519931793,0.350962370634079,0.634347856044769,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.565596282482147,0.300016045570374,0.768173933029175,-0.688787519931793,0.350962370634079,0.634347856044769,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.368078649044037,-0.676924169063568,0.637410223484039,\n-0.0639727190136909,-0.647417724132538,0.75944572687149,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.0920489430427551,-0.776246547698975,0.6236732006073,0.182335004210472,-0.641266107559204,0.74533998966217,-0.0639727190136909,-0.647417724132538,0.75944572687149,-0.0920489430427551,-0.776246547698975,0.6236732006073,0.201069504022598,-0.769039869308472,0.606752574443817,0.409660339355469,-0.546471178531647,0.730443477630615,0.182335004210472,-0.641266107559204,0.74533998966217,0.201069504022598,-0.769039869308472,0.606752574443817,0.471676796674728,-0.656273901462555,0.58891898393631,0.587337672710419,-0.375847816467285,0.71677953004837,0.409660339355469,-0.546471178531647,0.730443477630615,0.471676796674728,-0.656273901462555,0.58891898393631,0.6831955909729,-0.45319789648056,0.57258665561676,0.691395580768585,-0.152425721287727,0.706214249134064,0.587337672710419,-0.375847816467285,0.71677953004837,0.6831955909729,-0.45319789648056,0.57258665561676,0.807079255580902,-0.187228798866272,0.559971868991852,0.707835674285889,0.0936401560902596,0.700142979621887,0.691395580768585,-0.152425721287727,0.706214249134064,0.807079255580902,-0.187228798866272,0.559971868991852,0.826618671417236,0.105725072324276,0.552742063999176,0.634431779384613,0.329166561365128,0.699389517307281,0.707835674285889,0.0936401560902596,0.700142979621887,0.826618671417236,0.105725072324276,0.552742063999176,0.739149928092957,0.386077225208282,0.551907360553741,0.481055945158005,0.522368133068085,0.704071521759033,0.634431779384613,0.329166561365128,0.699389517307281,0.739149928092957,0.386077225208282,0.551907360553741,0.556476175785065,0.615973055362701,0.557594358921051,0.268397808074951,0.647146701812744,0.713557183742523,0.481055945158005,0.522368133068085,0.704071521759033,0.556476175785065,0.615973055362701,0.557594358921051,0.303310126066208,0.764374732971191,0.56897646188736,0.0251268558204174,0.686642229557037,0.726561188697815,0.268397808074951,0.647146701812744,0.713557183742523,\n0.303310126066208,0.764374732971191,0.56897646188736,0.0138044422492385,0.811234712600708,0.58455765247345,-0.272946208715439,0.75020706653595,0.602237343788147,0.0138044422492385,0.811234712600708,0.58455765247345,-0.000517124892212451,0.923211693763733,0.384291529655457,-0.328935414552689,0.853318154811859,0.40453627705574,-0.518174409866333,0.589555025100708,0.6196129322052,-0.272946208715439,0.75020706653595,0.602237343788147,-0.328935414552689,0.853318154811859,0.40453627705574,-0.609814286231995,0.669305503368378,0.424448668956757,-0.688787519931793,0.350962370634079,0.634347856044769,-0.518174409866333,0.589555025100708,0.6196129322052,-0.609814286231995,0.669305503368378,0.424448668956757,-0.805227220058441,0.396035611629486,0.441321760416031,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.688787519931793,0.350962370634079,0.634347856044769,-0.805227220058441,0.396035611629486,0.441321760416031,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.0920489430427551,-0.776246547698975,0.6236732006073,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.121754303574562,-0.89501953125,0.429087340831757,0.201069504022598,-0.769039869308472,0.606752574443817,-0.0920489430427551,-0.776246547698975,0.6236732006073,-0.121754303574562,-0.89501953125,0.429087340831757,0.213988110423088,-0.886772990226746,0.409686177968979,\n0.471676796674728,-0.656273901462555,0.58891898393631,0.201069504022598,-0.769039869308472,0.606752574443817,0.213988110423088,-0.886772990226746,0.409686177968979,0.523918509483337,-0.757616579532623,0.389264106750488,0.6831955909729,-0.45319789648056,0.57258665561676,0.471676796674728,-0.656273901462555,0.58891898393631,0.523918509483337,-0.757616579532623,0.389264106750488,0.766169846057892,-0.525022745132446,0.370587140321732,0.807079255580902,-0.187228798866272,0.559971868991852,0.6831955909729,-0.45319789648056,0.57258665561676,0.766169846057892,-0.525022745132446,0.370587140321732,0.908073663711548,-0.220386654138565,0.356134712696075,0.826618671417236,0.105725072324276,0.552742063999176,0.807079255580902,-0.187228798866272,0.559971868991852,0.908073663711548,-0.220386654138565,0.356134712696075,0.930448770523071,0.115156330168247,0.347856402397156,0.739149928092957,0.386077225208282,0.551907360553741,0.826618671417236,0.105725072324276,0.552742063999176,0.930448770523071,0.115156330168247,0.347856402397156,0.830271482467651,0.436247199773788,0.346897125244141,0.556476175785065,0.615973055362701,0.557594358921051,0.739149928092957,0.386077225208282,0.551907360553741,0.830271482467651,0.436247199773788,0.346897125244141,0.621051132678986,0.699568390846252,0.353411287069321,0.303310126066208,0.764374732971191,0.56897646188736,0.556476175785065,0.615973055362701,0.557594358921051,0.621051132678986,0.699568390846252,0.353411287069321,0.331061065196991,0.869544088840485,0.366458177566528,0.0138044422492385,0.811234712600708,0.58455765247345,0.303310126066208,0.764374732971191,0.56897646188736,0.331061065196991,0.869544088840485,0.366458177566528,-0.000517124892212451,0.923211693763733,0.384291529655457,-0.328935414552689,0.853318154811859,0.40453627705574,-0.000517124892212451,0.923211693763733,0.384291529655457,-0.00916329398751259,0.9673011302948,0.253465056419373,-0.354367077350616,0.893833041191101,0.274748027324677,-0.609814286231995,0.669305503368378,0.424448668956757,-0.328935414552689,0.853318154811859,0.40453627705574,\n-0.354367077350616,0.893833041191101,0.274748027324677,-0.649618446826935,0.700406491756439,0.295679837465286,-0.805227220058441,0.396035611629486,0.441321760416031,-0.609814286231995,0.669305503368378,0.424448668956757,-0.649618446826935,0.700406491756439,0.295679837465286,-0.855028748512268,0.413159251213074,0.313409119844437,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.805227220058441,0.396035611629486,0.441321760416031,-0.855028748512268,0.413159251213074,0.313409119844437,-0.942859053611755,0.0708882212638855,0.325563609600067,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.942859053611755,0.0708882212638855,0.325563609600067,-0.901254296302795,-0.280208140611649,0.33049076795578,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.901254296302795,-0.280208140611649,0.33049076795578,-0.735823094844818,-0.592702567577362,0.327518105506897,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.735823094844818,-0.592702567577362,0.327518105506897,-0.468927621841431,-0.824368357658386,0.317054718732834,-0.121754303574562,-0.89501953125,0.429087340831757,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.468927621841431,-0.824368357658386,0.317054718732834,-0.136601343750954,-0.943935394287109,0.300542861223221,0.213988110423088,-0.886772990226746,0.409686177968979,-0.121754303574562,-0.89501953125,0.429087340831757,-0.136601343750954,-0.943935394287109,0.300542861223221,0.21633192896843,-0.935254573822021,0.280177354812622,0.523918509483337,-0.757616579532623,0.389264106750488,0.213988110423088,-0.886772990226746,0.409686177968979,0.21633192896843,-0.935254573822021,0.280177354812622,0.542101740837097,-0.799496412277222,0.258710563182831,0.766169846057892,-0.525022745132446,0.370587140321732,0.523918509483337,-0.757616579532623,0.389264106750488,0.542101740837097,-0.799496412277222,0.258710563182831,0.796745836734772,-0.555020034313202,0.239058271050453,\n0.908073663711548,-0.220386654138565,0.356134712696075,0.766169846057892,-0.525022745132446,0.370587140321732,0.796745836734772,-0.555020034313202,0.239058271050453,0.945919096469879,-0.234794244170189,0.22384974360466,0.930448770523071,0.115156330168247,0.347856402397156,0.908073663711548,-0.220386654138565,0.356134712696075,0.945919096469879,-0.234794244170189,0.22384974360466,0.969435811042786,0.117914944887161,0.215151831507683,0.830271482467651,0.436247199773788,0.346897125244141,0.930448770523071,0.115156330168247,0.347856402397156,0.969435811042786,0.117914944887161,0.215151831507683,0.864136636257172,0.455431222915649,0.214126899838448,0.621051132678986,0.699568390846252,0.353411287069321,0.830271482467651,0.436247199773788,0.346897125244141,0.864136636257172,0.455431222915649,0.214126899838448,0.644224345684052,0.732226133346558,0.220952302217484,0.331061065196991,0.869544088840485,0.366458177566528,0.621051132678986,0.699568390846252,0.353411287069321,0.644224345684052,0.732226133346558,0.220952302217484,0.339384973049164,0.910898625850677,0.234694600105286,-0.000517124892212451,0.923211693763733,0.384291529655457,0.331061065196991,0.869544088840485,0.366458177566528,0.339384973049164,0.910898625850677,0.234694600105286,-0.00916329398751259,0.9673011302948,0.253465056419373,0.192422226071358,0.410055339336395,0.891531467437744,0.0417974554002285,0.434518992900848,0.899692296981812,0.0575622506439686,0.0207394547760487,0.998126447200775,0.0417974554002285,0.434518992900848,0.899692296981812,-0.107358939945698,0.402824491262436,0.908959031105042,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.107358939945698,0.402824491262436,0.908959031105042,-0.234948098659515,0.319365561008453,0.918044149875641,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.234948098659515,0.319365561008453,0.918044149875641,-0.323758065700531,0.195376396179199,0.925747692584991,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.323758065700531,0.195376396179199,0.925747692584991,-0.361866801977158,0.0475688315927982,0.931015372276306,\n0.0575622506439686,0.0207394547760487,0.998126447200775,-0.361866801977158,0.0475688315927982,0.931015372276306,-0.344122022390366,-0.104039087891579,0.933143019676209,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.272957742214203,-0.239076629281044,0.931845724582672,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.272957742214203,-0.239076629281044,0.931845724582672,-0.157753229141235,-0.339445114135742,0.927303016185761,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.0142518226057291,-0.391459435224533,0.92008501291275,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.0142518226057291,-0.391459435224533,0.92008501291275,0.13820318877697,-0.388006061315537,0.911236047744751,0.0575622506439686,0.0207394547760487,0.998126447200775,0.13820318877697,-0.388006061315537,0.911236047744751,0.279189854860306,-0.329605966806412,0.901894092559814,0.0575622506439686,0.0207394547760487,0.998126447200775,0.279189854860306,-0.329605966806412,0.901894092559814,0.38951188325882,-0.224056273698807,0.893352866172791,0.0575622506439686,0.0207394547760487,0.998126447200775,0.38951188325882,-0.224056273698807,0.893352866172791,0.454289197921753,-0.0856318548321724,0.886729121208191,0.0575622506439686,0.0207394547760487,0.998126447200775,0.454289197921753,-0.0856318548321724,0.886729121208191,0.464658886194229,0.0669254288077354,0.88295704126358,0.0575622506439686,0.0207394547760487,0.998126447200775,0.464658886194229,0.0669254288077354,0.88295704126358,0.419226229190826,0.21297712624073,0.882547497749329,0.0575622506439686,0.0207394547760487,0.998126447200775,0.419226229190826,0.21297712624073,0.882547497749329,0.324202924966812,0.332735329866409,0.885539174079895,0.0575622506439686,0.0207394547760487,0.998126447200775,0.324202924966812,0.332735329866409,0.885539174079895,0.192422226071358,0.410055339336395,0.891531467437744,0.0575622506439686,0.0207394547760487,0.998126447200775\n\t\t\t} \n\t\t}\n\t\tLayerElementUV: 0 {\n\t\t\tVersion: 101\n\t\t\tName: \"map1\"\n\t\t\tMappingInformationType: \"ByPolygonVertex\"\n\t\t\tReferenceInformationType: \"IndexToDirect\"\n\t\t\tUV: *26158 {\n\t\t\t\ta: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384,0.313490509986877,\n0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,\n0.360970288515091,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265,\n0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,\n0.609531939029694,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488,0.0914957895874977,0.80051189661026,0.0865048691630363,\n0.763055205345154,0.080446183681488,0.719281196594238,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132,0.607026278972626,0.453061938285828,\n0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,\n0.449466496706009,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,\n0.34814915060997,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,\n0.481752008199692,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892,0.494083315134048,0.483844935894012,0.491256147623062,\n0.476915508508682,0.489434659481049,0.507938206195831,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,\n0.439141184091568,0.444102138280869,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,\n0.454729199409485,0.506186008453369,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,\n0.328943759202957,0.19858555495739,0.362459033727646,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666,0.507564306259155,\n0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906,\n0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672,0.271769434213638,0.385051816701889,0.256161749362946,\n0.422860234975815,0.246646866202354,0.351017981767654,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203,0.148400202393532,0.419813513755798,\n0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072,0.425704270601273,0.605306565761566,\n0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084,0.501217484474182,\n0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,\n0.476730823516846,0.335748642683029,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342,0.201496973633766,0.577669441699982,\n0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,\n0.594250917434692,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976,0.574461042881012,\n0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717,0.56607973575592,0.232950657606125,\n0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957,\n0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266,0.0327511876821518,0.240590929985046,\n0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533,0.459741652011871,0.338231563568115,0.394522905349731,\n0.594241797924042,0.388592958450317,0.594755053520203,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,\n0.227975755929947,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905,0.387614846229553,\n0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986,0.571574211120605,0.392384350299835,\n0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472,0.480641216039658,\n0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564,0.103776723146439,0.271889269351959,\n0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938,0.896463871002197,\n0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162,0.677415728569031,\n0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516,\n0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,\n0.821314513683319,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461,0.492020517587662,0.517554759979248,0.489789307117462,\n0.521288216114044,0.486277997493744,0.524867177009583,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027,\n0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073,\n0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413,\n0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,\n0.536648154258728,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,\n0.422893911600113,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231,0.506956994533539,\n0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516,\n0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969,\n0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703,\n0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,\n0.630282640457153,0.570110380649567,0.638663291931152,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137,\n0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885,0.543237447738647,\n0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,\n0.668446362018585,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,\n0.602044343948364,0.593871057033539,0.612634897232056,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843,\n0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,\n0.525910139083862,0.60409289598465,0.548857510089874,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,\n0.727306187152863,0.436012208461761,0.721607804298401,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242,0.526827156543732,\n0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478,0.754323303699493,\n0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945,0.611816823482513,0.769262611865997,0.623659491539001,\n0.771583199501038,0.616897940635681,0.768544793128967,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672,0.0403527356684208,0.816201508045197,\n0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,\n0.602072775363922,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,\n0.556499540805817,0.599716067314148,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,\n0.333364248275757,0.551311314105988,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232,0.678222596645355,\n0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434,0.790905892848969,\n0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171,0.543534815311432,0.0322365164756775,0.557037770748138,\n0.0385730713605881,0.557879507541656,0.0331084579229355,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,\n0.485119014978409,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512,0.0149797797203064,\n0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,\n0.0117701292037964,0.422150850296021,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629,\n0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,\n0.683692932128906,0.0178875774145126,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413,0.548435807228088,0.0826816782355309,\n0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,\n0.139729559421539,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584,0.147085726261139,\n0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,\n0.219694241881371,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783,\n0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461,\n0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,\n0.759102463722229,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,\n0.627090036869049,0.837572515010834,0.626471817493439,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986,0.934876620769501,0.369551956653595,\n0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134,0.802964627742767,\n0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577,\n0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845,\n0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223,0.108967132866383,\n0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425,0.00582033395767212,0.928635358810425,0.0301453322172165,\n0.945208311080933,0.00582033395767212,0.945208311080933,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871,\n0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599,0.122953936457634,0.413901716470718,\n0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,\n0.920238852500916,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697,0.803424000740051,\n0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791,0.950862765312195,0.773497998714447,0.940354406833649,\n0.773665010929108,0.959785580635071,0.773280024528503,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,\n0.970409572124481,0.583586990833282,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,\n0.719281017780304,0.983229696750641,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,\n0.983235836029053,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623,0.637106657028198,0.177578389644623,0.620323657989502,\n0.196973383426666,0.620323657989502,0.177578389644623,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,\n0.206433475017548,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821,0.683457255363464,\n0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895,0.881043076515198,0.466186791658401,\n0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942,0.833344876766205,0.484429806470871,0.847736835479736,\n0.463386803865433,0.846568882465363,0.464255839586258,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186,0.516026794910431,\n0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,\n0.206447616219521,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437,0.0736037790775299,\n0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,\n0.0853549689054489,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366,0.26112961769104,0.530635476112366,\n0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,\n0.674582898616791,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034,0.279166221618652,0.709953963756561,\n0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471,\n0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956,0.310332953929901,0.122801892459393,\n0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003,0.118860952556133,\n0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,\n0.118029937148094,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,\n0.409544587135315,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,\n0.244148418307304,0.376309484243393,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422,0.271062970161438,0.0843436047434807,0.268807142972946,\n0.0709859803318977,0.255287438631058,0.0861772000789642,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,\n0.0979962795972824,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629,0.359014123678207,\n0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411,0.422037154436111,0.454183876514435,0.141791939735413,\n0.448351323604584,0.145058676600456,0.413058042526245,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089,0.791049957275391,\n0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263,\n0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266,0.587654650211334,\n0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287,0.0992880389094353,0.55315625667572,\n0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,\n0.941240012645721,0.446224510669708,0.945038080215454,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,\n0.356241673231125,0.772000849246979,0.366978108882904,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677,\n0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711,\n0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,\n0.90440434217453,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126,\n0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,\n0.014482319355011,0.828360557556152,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065,0.0374843291938305,0.953755974769592,\n0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801,0.0981541946530342,\n0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591,0.778886675834656,0.0793051347136498,\n0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,\n0.493428647518158,0.950604200363159,0.342332631349564,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,\n0.0616136789321899,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,\n0.146303951740265,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853,\n0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,\n0.368574023246765,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195,0.864213168621063,0.874509155750275,0.815409004688263,\n0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,\n0.754678249359131,0.978725790977478,0.543712019920349,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077,\n0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,\n0.596252083778381,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,\n0.123328268527985,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701,0.0743808746337891,\n0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,\n0.235308602452278,0.0271604433655739,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119,\n0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025,0.199742212891579,0.168715670704842,\n0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,\n0.196686863899231,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878,0.808161675930023,0.0944669842720032,0.829814612865448,\n0.092739924788475,0.836659967899323,0.0951223000884056,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484,\n0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,\n0.719165027141571,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513,0.326107054948807,0.852742612361908,\n0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805,\n0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126,\n0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542,0.832485556602478,0.200292333960533,\n0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655,0.0769496187567711,0.269949793815613,0.0977088510990143,\n0.236902311444283,0.106580346822739,0.257785648107529,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943,\n0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111,\n0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437,0.133912816643715,0.20319464802742,\n0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,\n0.232346341013908,0.0509957745671272,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837,\n0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521,\n0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,\n0.0835410356521606,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244,\n0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,\n0.0136640649288893,0.0665248408913612,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697,0.314485341310501,0.406984806060791,0.316858559846878,\n0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,\n0.313420087099075,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206,0.482427507638931,0.03264981508255,\n0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488,0.508201599121094,\n0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921,0.36936816573143,0.356859803199768,0.368447452783585,\n0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,\n0.472558706998825,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,\n0.421510130167007,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063,0.550254046916962,\n0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,\n0.0392846465110779,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623,0.49083137512207,0.0473983287811279,\n0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896,0.4264976978302,0.349507212638855,0.451796531677246,\n0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235,\n0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,\n0.780230820178986,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895,0.664426863193512,0.451735496520996,0.781740605831146,\n0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526,0.486700624227524,\n0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768,0.386751741170883,0.617895185947418,\n0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,\n0.90181291103363,0.50802755355835,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065,0.637537717819214,\n0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,\n0.564278662204742,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,\n0.561667025089264,0.981199622154236,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,\n0.991807043552399,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,\n0.434852063655853,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999,\n0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535,0.816003322601318,\n0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,\n0.830957114696503,0.422840178012848,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,\n0.143848940730095,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251,0.898496329784393,\n0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118,0.331734776496887,\n0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412,0.59907454252243,0.0290243290364742,0.594756245613098,\n0.0432147420942783,0.550425350666046,0.0373775735497475,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,\n0.933514356613159,0.0762230306863785,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,\n0.816710710525513,0.759240210056305,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246,0.591059923171997,\n0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,\n0.714633941650391,0.916672646999359,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,\n0.974531888961792,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582,0.577414393424988,0.962452411651611,\n0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264,0.963677108287811,0.872271716594696,\n0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392,0.978221297264099,\n0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,\n0.621363580226898,0.682616829872131,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663,0.105796456336975,\n0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478,0.292685657739639,0.292649954557419,0.269282728433609,\n0.292957901954651,0.269526928663254,0.0986065044999123,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436,0.189350441098213,0.114026740193367,\n0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426,\n0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129,\n0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,\n0.727285981178284,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,\n0.139332994818687,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,\n0.157439410686493,0.711707234382629,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938,0.955354988574982,0.376253008842468,0.963590979576111,\n0.376287996768951,0.955453991889954,0.500213027000427,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544,\n0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,\n0.36667200922966,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187,\n0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282,0.845073997974396,0.622668981552124,\n0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044,0.743863999843597,0.51264899969101,\n0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384,0.595848023891449,\n0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281,\n0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101,0.408055007457733,0.415430009365082,\n0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,\n0.726795017719269,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,\n0.835596978664398,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155,0.768315017223358,\n0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,\n0.759728014469147,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148,0.171581521630287,\n0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763,0.162967994809151,0.113466002047062,\n0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328,\n0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,\n0.698300063610077,0.684771537780762,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,\n0.199659392237663,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,\n0.313732326030731,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,\n0.583523273468018,0.458871752023697,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,\n0.476934969425201,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,\n0.441692322492599,0.315481513738632,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709,0.507110118865967,0.265018463134766,0.501041769981384,\n0.297658920288086,0.484085887670517,0.325823694467545,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799,0.417306035757065,0.26596075296402\n\t\t\t} \n\t\t\tUVIndex: *46575 {\n\t\t\t\ta: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,\n249,254,137,254,249,138,255,256,257,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,\n421,418,416,402,401,419,422,399,402,423,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,\n649,650,651,380,379,649,648,389,388,652,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,\n912,913,912,914,860,861,913,915,914,912,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039,1075,1076,1077,1078,1079,1080,1077,1080,\n1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900,\n1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,\n1307,1306,1303,1302,1274,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414,1411,1400,1401,1400,1411,1410,1402,1415,1416,\n1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502,1503,1504,1503,\n1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,\n615,1462,1597,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,\n687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323,319,318,1738,1737,\n1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,\n775,1792,1793,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,\n1856,1857,1854,1857,167,178,1855,660,1216,1858,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462,1461,1881,1882,1883,1884,1885,\n1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,\n2052,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,\n2144,2147,2149,2150,2148,2148,2150,2151,2152,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313,2317,2318,2316,2317,2319,2320,\n2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,\n2428,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,\n2636,2637,2638,2583,2582,2638,2097,2584,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824,2825,2645,2826,2827,2828,2829,2827,\n2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891,\n2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,\n2887,2886,2736,2551,2553,3049,2736,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564,3119,3120,3121,3010,2921,3122,2896,\n3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,\n3248,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,\n3325,3326,3327,3326,3325,3328,3329,2436,2433,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416,3415,2216,3418,3416,3412,\n2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,\n2291,3494,3500,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,\n2135,3528,2338,3529,3528,2383,2126,2125,3528,3528,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867,3558,3109,3110,3109,\n3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,\n2973,3613,3614,2973,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,\n3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784,3766,3785,3786,3787,\n3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,\n2814,2630,2669,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,\n4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096,4209,4213,4113,\n4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,\n4322,4326,4327,4325,4324,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431,4436,4437,4433,4432,4437,4438,4434,4433,4439,\n4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564,4568,\n4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,\n4506,4496,4495,4542,4546,4527,4526,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808,4795,4796,4810,4809,4796,4797,4810,\n4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,\n4964,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,\n5072,5019,5065,5019,5018,5067,5065,5018,5073,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199,5198,5130,5128,5206,5200,\n5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,\n5302,5305,5325,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,\n5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547,5550,5546,5562,\n5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,\n5747,5673,5671,5749,5748,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876,5881,5882,5883,5884,5835,5834,5830,5834,5833,\n5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013,5997,\n5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,\n6144,6085,6086,6145,6145,6086,6087,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321,6322,6323,6324,6325,6326,6327,6321,\n6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,\n6296,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,\n6397,6386,6355,6352,6351,6349,6404,6279,6298,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606,6497,6496,6498,6487,6544,\n6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,\n6601,6678,6677,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,\n6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066,7067,7068,7069,\n7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,\n6966,6884,7263,7264,6883,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870,6907,6935,6814,6905,6905,6814,6813,6806,6776,\n6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061,7095,\n7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,\n6948,6948,7288,7287,6952,6995,6999,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500,7501,7502,7499,7503,7504,7505,7506,\n7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,\n7504,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,\n7759,7676,7675,7645,7760,7758,7761,7760,7645,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399,7398,7548,7395,7394,7549,\n7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,\n7984,7971,7975,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,\n7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114,8113,8115,8116,\n8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,\n8245,8244,8220,8220,8244,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370,8367,8414,8418,8371,8419,8420,8371,8418,8421,\n8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325,8310,\n8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,\n8264,8263,8203,8201,8184,8185,8183,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665,8586,8585,8666,8590,8589,8667,8668,\n8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,\n8800,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,\n8680,8754,8664,8718,8731,8565,8563,8672,8668,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842,9045,9034,8901,8903,9031,\n9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,\n9097,9122,9095,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,\n9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566,9564,9565,9551,\n9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,\n9410,9661,9453,9453,9661,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213,9707,9707,9213,9223,9708,9708,9223,9239,9709,\n9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754,9761,\n9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,\n9976,9980,9981,9982,9983,9976,9979,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124,10143,10144,10145,10146,10147,10148,\n10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897,\n9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,\n10099,9961,9963,10320,10140,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760,9761,9838,9837,9760,9837,9836,\n9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,\n10397,10393,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,\n10457,10461,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,\n10612,10610,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,\n10537,10536,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,\n10678,10827,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,\n10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,\n10945,10944,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,\n10969,10918,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,\n11132,11230,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,\n11276,10810,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,\n11296,11295,10647,10646,10692,10647,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,\n11409,11410,11411,11412,11346,11349,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,\n11530,11531,11530,11541,11542,11533,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,\n11697,11459,11455,11458,11698,11696,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,\n11818,11819,11820,11821,11499,11640,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,\n11476,11475,11849,11487,11600,11603,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,\n11960,11961,11924,11923,11894,11911,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,\n12044,12055,12062,12053,12055,12065,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,\n11770,11764,12269,12164,12163,12166,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,\n12359,12360,12162,11967,11966,11997,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,\n12412,12413,12414,12402,12415,12416,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,\n12138,12002,11489,11669,12068,12048,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,\n12566,12567,12568,12556,12554,12569,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,\n12612,12609,12608,12613,12614,12612,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,\n12711,12707,12706,12712,12718,12720,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,\n12794,12740,12757,12800,12755,12833,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,\n12914,12915,12933,12932,12915,12916,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,\n12985,13022,13023,12989,12987,13023,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078\n\t\t\t} \n\t\t}\n\t\tLayerElementUV: 1 {\n\t\t\tVersion: 101\n\t\t\tName: \"map1\"\n\t\t\tMappingInformationType: \"ByPolygonVertex\"\n\t\t\tReferenceInformationType: \"IndexToDirect\"\n\t\t\tUV: *26158 {\n\t\t\t\ta: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384,0.313490509986877,\n0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,\n0.360970288515091,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265,\n0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,\n0.609531939029694,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488,0.0914957895874977,0.80051189661026,0.0865048691630363,\n0.763055205345154,0.080446183681488,0.719281196594238,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132,0.607026278972626,0.453061938285828,\n0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,\n0.449466496706009,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,\n0.34814915060997,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,\n0.481752008199692,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892,0.494083315134048,0.483844935894012,0.491256147623062,\n0.476915508508682,0.489434659481049,0.507938206195831,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,\n0.439141184091568,0.444102138280869,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,\n0.454729199409485,0.506186008453369,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,\n0.328943759202957,0.19858555495739,0.362459033727646,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666,0.507564306259155,\n0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906,\n0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672,0.271769434213638,0.385051816701889,0.256161749362946,\n0.422860234975815,0.246646866202354,0.351017981767654,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203,0.148400202393532,0.419813513755798,\n0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072,0.425704270601273,0.605306565761566,\n0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084,0.501217484474182,\n0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,\n0.476730823516846,0.335748642683029,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342,0.201496973633766,0.577669441699982,\n0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,\n0.594250917434692,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976,0.574461042881012,\n0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717,0.56607973575592,0.232950657606125,\n0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957,\n0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266,0.0327511876821518,0.240590929985046,\n0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533,0.459741652011871,0.338231563568115,0.394522905349731,\n0.594241797924042,0.388592958450317,0.594755053520203,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,\n0.227975755929947,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905,0.387614846229553,\n0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986,0.571574211120605,0.392384350299835,\n0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472,0.480641216039658,\n0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564,0.103776723146439,0.271889269351959,\n0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938,0.896463871002197,\n0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162,0.677415728569031,\n0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516,\n0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,\n0.821314513683319,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461,0.492020517587662,0.517554759979248,0.489789307117462,\n0.521288216114044,0.486277997493744,0.524867177009583,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027,\n0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073,\n0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413,\n0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,\n0.536648154258728,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,\n0.422893911600113,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231,0.506956994533539,\n0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516,\n0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969,\n0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703,\n0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,\n0.630282640457153,0.570110380649567,0.638663291931152,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137,\n0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885,0.543237447738647,\n0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,\n0.668446362018585,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,\n0.602044343948364,0.593871057033539,0.612634897232056,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843,\n0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,\n0.525910139083862,0.60409289598465,0.548857510089874,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,\n0.727306187152863,0.436012208461761,0.721607804298401,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242,0.526827156543732,\n0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478,0.754323303699493,\n0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945,0.611816823482513,0.769262611865997,0.623659491539001,\n0.771583199501038,0.616897940635681,0.768544793128967,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672,0.0403527356684208,0.816201508045197,\n0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,\n0.602072775363922,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,\n0.556499540805817,0.599716067314148,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,\n0.333364248275757,0.551311314105988,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232,0.678222596645355,\n0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434,0.790905892848969,\n0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171,0.543534815311432,0.0322365164756775,0.557037770748138,\n0.0385730713605881,0.557879507541656,0.0331084579229355,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,\n0.485119014978409,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512,0.0149797797203064,\n0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,\n0.0117701292037964,0.422150850296021,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629,\n0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,\n0.683692932128906,0.0178875774145126,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413,0.548435807228088,0.0826816782355309,\n0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,\n0.139729559421539,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584,0.147085726261139,\n0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,\n0.219694241881371,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783,\n0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461,\n0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,\n0.759102463722229,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,\n0.627090036869049,0.837572515010834,0.626471817493439,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986,0.934876620769501,0.369551956653595,\n0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134,0.802964627742767,\n0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577,\n0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845,\n0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223,0.108967132866383,\n0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425,0.00582033395767212,0.928635358810425,0.0301453322172165,\n0.945208311080933,0.00582033395767212,0.945208311080933,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871,\n0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599,0.122953936457634,0.413901716470718,\n0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,\n0.920238852500916,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697,0.803424000740051,\n0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791,0.950862765312195,0.773497998714447,0.940354406833649,\n0.773665010929108,0.959785580635071,0.773280024528503,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,\n0.970409572124481,0.583586990833282,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,\n0.719281017780304,0.983229696750641,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,\n0.983235836029053,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623,0.637106657028198,0.177578389644623,0.620323657989502,\n0.196973383426666,0.620323657989502,0.177578389644623,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,\n0.206433475017548,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821,0.683457255363464,\n0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895,0.881043076515198,0.466186791658401,\n0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942,0.833344876766205,0.484429806470871,0.847736835479736,\n0.463386803865433,0.846568882465363,0.464255839586258,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186,0.516026794910431,\n0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,\n0.206447616219521,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437,0.0736037790775299,\n0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,\n0.0853549689054489,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366,0.26112961769104,0.530635476112366,\n0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,\n0.674582898616791,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034,0.279166221618652,0.709953963756561,\n0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471,\n0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956,0.310332953929901,0.122801892459393,\n0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003,0.118860952556133,\n0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,\n0.118029937148094,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,\n0.409544587135315,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,\n0.244148418307304,0.376309484243393,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422,0.271062970161438,0.0843436047434807,0.268807142972946,\n0.0709859803318977,0.255287438631058,0.0861772000789642,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,\n0.0979962795972824,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629,0.359014123678207,\n0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411,0.422037154436111,0.454183876514435,0.141791939735413,\n0.448351323604584,0.145058676600456,0.413058042526245,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089,0.791049957275391,\n0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263,\n0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266,0.587654650211334,\n0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287,0.0992880389094353,0.55315625667572,\n0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,\n0.941240012645721,0.446224510669708,0.945038080215454,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,\n0.356241673231125,0.772000849246979,0.366978108882904,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677,\n0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711,\n0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,\n0.90440434217453,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126,\n0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,\n0.014482319355011,0.828360557556152,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065,0.0374843291938305,0.953755974769592,\n0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801,0.0981541946530342,\n0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591,0.778886675834656,0.0793051347136498,\n0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,\n0.493428647518158,0.950604200363159,0.342332631349564,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,\n0.0616136789321899,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,\n0.146303951740265,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853,\n0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,\n0.368574023246765,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195,0.864213168621063,0.874509155750275,0.815409004688263,\n0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,\n0.754678249359131,0.978725790977478,0.543712019920349,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077,\n0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,\n0.596252083778381,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,\n0.123328268527985,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701,0.0743808746337891,\n0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,\n0.235308602452278,0.0271604433655739,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119,\n0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025,0.199742212891579,0.168715670704842,\n0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,\n0.196686863899231,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878,0.808161675930023,0.0944669842720032,0.829814612865448,\n0.092739924788475,0.836659967899323,0.0951223000884056,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484,\n0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,\n0.719165027141571,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513,0.326107054948807,0.852742612361908,\n0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805,\n0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126,\n0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542,0.832485556602478,0.200292333960533,\n0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655,0.0769496187567711,0.269949793815613,0.0977088510990143,\n0.236902311444283,0.106580346822739,0.257785648107529,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943,\n0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111,\n0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437,0.133912816643715,0.20319464802742,\n0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,\n0.232346341013908,0.0509957745671272,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837,\n0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521,\n0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,\n0.0835410356521606,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244,\n0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,\n0.0136640649288893,0.0665248408913612,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697,0.314485341310501,0.406984806060791,0.316858559846878,\n0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,\n0.313420087099075,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206,0.482427507638931,0.03264981508255,\n0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488,0.508201599121094,\n0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921,0.36936816573143,0.356859803199768,0.368447452783585,\n0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,\n0.472558706998825,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,\n0.421510130167007,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063,0.550254046916962,\n0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,\n0.0392846465110779,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623,0.49083137512207,0.0473983287811279,\n0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896,0.4264976978302,0.349507212638855,0.451796531677246,\n0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235,\n0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,\n0.780230820178986,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895,0.664426863193512,0.451735496520996,0.781740605831146,\n0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526,0.486700624227524,\n0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768,0.386751741170883,0.617895185947418,\n0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,\n0.90181291103363,0.50802755355835,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065,0.637537717819214,\n0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,\n0.564278662204742,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,\n0.561667025089264,0.981199622154236,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,\n0.991807043552399,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,\n0.434852063655853,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999,\n0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535,0.816003322601318,\n0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,\n0.830957114696503,0.422840178012848,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,\n0.143848940730095,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251,0.898496329784393,\n0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118,0.331734776496887,\n0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412,0.59907454252243,0.0290243290364742,0.594756245613098,\n0.0432147420942783,0.550425350666046,0.0373775735497475,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,\n0.933514356613159,0.0762230306863785,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,\n0.816710710525513,0.759240210056305,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246,0.591059923171997,\n0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,\n0.714633941650391,0.916672646999359,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,\n0.974531888961792,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582,0.577414393424988,0.962452411651611,\n0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264,0.963677108287811,0.872271716594696,\n0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392,0.978221297264099,\n0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,\n0.621363580226898,0.682616829872131,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663,0.105796456336975,\n0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478,0.292685657739639,0.292649954557419,0.269282728433609,\n0.292957901954651,0.269526928663254,0.0986065044999123,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436,0.189350441098213,0.114026740193367,\n0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426,\n0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129,\n0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,\n0.727285981178284,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,\n0.139332994818687,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,\n0.157439410686493,0.711707234382629,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938,0.955354988574982,0.376253008842468,0.963590979576111,\n0.376287996768951,0.955453991889954,0.500213027000427,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544,\n0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,\n0.36667200922966,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187,\n0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282,0.845073997974396,0.622668981552124,\n0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044,0.743863999843597,0.51264899969101,\n0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384,0.595848023891449,\n0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281,\n0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101,0.408055007457733,0.415430009365082,\n0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,\n0.726795017719269,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,\n0.835596978664398,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155,0.768315017223358,\n0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,\n0.759728014469147,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148,0.171581521630287,\n0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763,0.162967994809151,0.113466002047062,\n0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328,\n0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,\n0.698300063610077,0.684771537780762,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,\n0.199659392237663,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,\n0.313732326030731,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,\n0.583523273468018,0.458871752023697,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,\n0.476934969425201,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,\n0.441692322492599,0.315481513738632,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709,0.507110118865967,0.265018463134766,0.501041769981384,\n0.297658920288086,0.484085887670517,0.325823694467545,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799,0.417306035757065,0.26596075296402\n\t\t\t} \n\t\t\tUVIndex: *46575 {\n\t\t\t\ta: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,\n249,254,137,254,249,138,255,256,257,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,\n421,418,416,402,401,419,422,399,402,423,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,\n649,650,651,380,379,649,648,389,388,652,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,\n912,913,912,914,860,861,913,915,914,912,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039,1075,1076,1077,1078,1079,1080,1077,1080,\n1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900,\n1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,\n1307,1306,1303,1302,1274,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414,1411,1400,1401,1400,1411,1410,1402,1415,1416,\n1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502,1503,1504,1503,\n1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,\n615,1462,1597,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,\n687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323,319,318,1738,1737,\n1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,\n775,1792,1793,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,\n1856,1857,1854,1857,167,178,1855,660,1216,1858,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462,1461,1881,1882,1883,1884,1885,\n1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,\n2052,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,\n2144,2147,2149,2150,2148,2148,2150,2151,2152,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313,2317,2318,2316,2317,2319,2320,\n2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,\n2428,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,\n2636,2637,2638,2583,2582,2638,2097,2584,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824,2825,2645,2826,2827,2828,2829,2827,\n2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891,\n2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,\n2887,2886,2736,2551,2553,3049,2736,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564,3119,3120,3121,3010,2921,3122,2896,\n3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,\n3248,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,\n3325,3326,3327,3326,3325,3328,3329,2436,2433,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416,3415,2216,3418,3416,3412,\n2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,\n2291,3494,3500,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,\n2135,3528,2338,3529,3528,2383,2126,2125,3528,3528,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867,3558,3109,3110,3109,\n3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,\n2973,3613,3614,2973,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,\n3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784,3766,3785,3786,3787,\n3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,\n2814,2630,2669,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,\n4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096,4209,4213,4113,\n4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,\n4322,4326,4327,4325,4324,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431,4436,4437,4433,4432,4437,4438,4434,4433,4439,\n4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564,4568,\n4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,\n4506,4496,4495,4542,4546,4527,4526,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808,4795,4796,4810,4809,4796,4797,4810,\n4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,\n4964,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,\n5072,5019,5065,5019,5018,5067,5065,5018,5073,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199,5198,5130,5128,5206,5200,\n5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,\n5302,5305,5325,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,\n5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547,5550,5546,5562,\n5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,\n5747,5673,5671,5749,5748,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876,5881,5882,5883,5884,5835,5834,5830,5834,5833,\n5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013,5997,\n5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,\n6144,6085,6086,6145,6145,6086,6087,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321,6322,6323,6324,6325,6326,6327,6321,\n6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,\n6296,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,\n6397,6386,6355,6352,6351,6349,6404,6279,6298,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606,6497,6496,6498,6487,6544,\n6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,\n6601,6678,6677,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,\n6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066,7067,7068,7069,\n7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,\n6966,6884,7263,7264,6883,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870,6907,6935,6814,6905,6905,6814,6813,6806,6776,\n6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061,7095,\n7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,\n6948,6948,7288,7287,6952,6995,6999,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500,7501,7502,7499,7503,7504,7505,7506,\n7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,\n7504,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,\n7759,7676,7675,7645,7760,7758,7761,7760,7645,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399,7398,7548,7395,7394,7549,\n7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,\n7984,7971,7975,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,\n7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114,8113,8115,8116,\n8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,\n8245,8244,8220,8220,8244,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370,8367,8414,8418,8371,8419,8420,8371,8418,8421,\n8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325,8310,\n8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,\n8264,8263,8203,8201,8184,8185,8183,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665,8586,8585,8666,8590,8589,8667,8668,\n8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,\n8800,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,\n8680,8754,8664,8718,8731,8565,8563,8672,8668,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842,9045,9034,8901,8903,9031,\n9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,\n9097,9122,9095,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,\n9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566,9564,9565,9551,\n9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,\n9410,9661,9453,9453,9661,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213,9707,9707,9213,9223,9708,9708,9223,9239,9709,\n9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754,9761,\n9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,\n9976,9980,9981,9982,9983,9976,9979,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124,10143,10144,10145,10146,10147,10148,\n10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897,\n9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,\n10099,9961,9963,10320,10140,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760,9761,9838,9837,9760,9837,9836,\n9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,\n10397,10393,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,\n10457,10461,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,\n10612,10610,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,\n10537,10536,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,\n10678,10827,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,\n10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,\n10945,10944,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,\n10969,10918,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,\n11132,11230,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,\n11276,10810,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,\n11296,11295,10647,10646,10692,10647,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,\n11409,11410,11411,11412,11346,11349,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,\n11530,11531,11530,11541,11542,11533,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,\n11697,11459,11455,11458,11698,11696,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,\n11818,11819,11820,11821,11499,11640,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,\n11476,11475,11849,11487,11600,11603,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,\n11960,11961,11924,11923,11894,11911,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,\n12044,12055,12062,12053,12055,12065,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,\n11770,11764,12269,12164,12163,12166,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,\n12359,12360,12162,11967,11966,11997,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,\n12412,12413,12414,12402,12415,12416,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,\n12138,12002,11489,11669,12068,12048,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,\n12566,12567,12568,12556,12554,12569,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,\n12612,12609,12608,12613,12614,12612,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,\n12711,12707,12706,12712,12718,12720,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,\n12794,12740,12757,12800,12755,12833,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,\n12914,12915,12933,12932,12915,12916,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,\n12985,13022,13023,12989,12987,13023,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078\n\t\t\t} \n\t\t}\n\t\tLayerElementUV: 2 {\n\t\t\tVersion: 101\n\t\t\tName: \"map1\"\n\t\t\tMappingInformationType: \"ByPolygonVertex\"\n\t\t\tReferenceInformationType: \"IndexToDirect\"\n\t\t\tUV: *26158 {\n\t\t\t\ta: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384,0.313490509986877,\n0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,\n0.360970288515091,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265,\n0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,\n0.609531939029694,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488,0.0914957895874977,0.80051189661026,0.0865048691630363,\n0.763055205345154,0.080446183681488,0.719281196594238,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132,0.607026278972626,0.453061938285828,\n0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,\n0.449466496706009,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,\n0.34814915060997,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,\n0.481752008199692,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892,0.494083315134048,0.483844935894012,0.491256147623062,\n0.476915508508682,0.489434659481049,0.507938206195831,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,\n0.439141184091568,0.444102138280869,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,\n0.454729199409485,0.506186008453369,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,\n0.328943759202957,0.19858555495739,0.362459033727646,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666,0.507564306259155,\n0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906,\n0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672,0.271769434213638,0.385051816701889,0.256161749362946,\n0.422860234975815,0.246646866202354,0.351017981767654,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203,0.148400202393532,0.419813513755798,\n0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072,0.425704270601273,0.605306565761566,\n0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084,0.501217484474182,\n0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,\n0.476730823516846,0.335748642683029,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342,0.201496973633766,0.577669441699982,\n0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,\n0.594250917434692,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976,0.574461042881012,\n0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717,0.56607973575592,0.232950657606125,\n0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957,\n0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266,0.0327511876821518,0.240590929985046,\n0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533,0.459741652011871,0.338231563568115,0.394522905349731,\n0.594241797924042,0.388592958450317,0.594755053520203,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,\n0.227975755929947,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905,0.387614846229553,\n0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986,0.571574211120605,0.392384350299835,\n0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472,0.480641216039658,\n0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564,0.103776723146439,0.271889269351959,\n0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938,0.896463871002197,\n0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162,0.677415728569031,\n0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516,\n0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,\n0.821314513683319,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461,0.492020517587662,0.517554759979248,0.489789307117462,\n0.521288216114044,0.486277997493744,0.524867177009583,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027,\n0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073,\n0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413,\n0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,\n0.536648154258728,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,\n0.422893911600113,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231,0.506956994533539,\n0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516,\n0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969,\n0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703,\n0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,\n0.630282640457153,0.570110380649567,0.638663291931152,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137,\n0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885,0.543237447738647,\n0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,\n0.668446362018585,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,\n0.602044343948364,0.593871057033539,0.612634897232056,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843,\n0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,\n0.525910139083862,0.60409289598465,0.548857510089874,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,\n0.727306187152863,0.436012208461761,0.721607804298401,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242,0.526827156543732,\n0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478,0.754323303699493,\n0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945,0.611816823482513,0.769262611865997,0.623659491539001,\n0.771583199501038,0.616897940635681,0.768544793128967,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672,0.0403527356684208,0.816201508045197,\n0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,\n0.602072775363922,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,\n0.556499540805817,0.599716067314148,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,\n0.333364248275757,0.551311314105988,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232,0.678222596645355,\n0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434,0.790905892848969,\n0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171,0.543534815311432,0.0322365164756775,0.557037770748138,\n0.0385730713605881,0.557879507541656,0.0331084579229355,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,\n0.485119014978409,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512,0.0149797797203064,\n0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,\n0.0117701292037964,0.422150850296021,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629,\n0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,\n0.683692932128906,0.0178875774145126,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413,0.548435807228088,0.0826816782355309,\n0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,\n0.139729559421539,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584,0.147085726261139,\n0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,\n0.219694241881371,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783,\n0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461,\n0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,\n0.759102463722229,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,\n0.627090036869049,0.837572515010834,0.626471817493439,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986,0.934876620769501,0.369551956653595,\n0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134,0.802964627742767,\n0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577,\n0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845,\n0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223,0.108967132866383,\n0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425,0.00582033395767212,0.928635358810425,0.0301453322172165,\n0.945208311080933,0.00582033395767212,0.945208311080933,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871,\n0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599,0.122953936457634,0.413901716470718,\n0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,\n0.920238852500916,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697,0.803424000740051,\n0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791,0.950862765312195,0.773497998714447,0.940354406833649,\n0.773665010929108,0.959785580635071,0.773280024528503,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,\n0.970409572124481,0.583586990833282,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,\n0.719281017780304,0.983229696750641,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,\n0.983235836029053,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623,0.637106657028198,0.177578389644623,0.620323657989502,\n0.196973383426666,0.620323657989502,0.177578389644623,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,\n0.206433475017548,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821,0.683457255363464,\n0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895,0.881043076515198,0.466186791658401,\n0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942,0.833344876766205,0.484429806470871,0.847736835479736,\n0.463386803865433,0.846568882465363,0.464255839586258,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186,0.516026794910431,\n0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,\n0.206447616219521,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437,0.0736037790775299,\n0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,\n0.0853549689054489,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366,0.26112961769104,0.530635476112366,\n0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,\n0.674582898616791,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034,0.279166221618652,0.709953963756561,\n0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471,\n0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956,0.310332953929901,0.122801892459393,\n0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003,0.118860952556133,\n0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,\n0.118029937148094,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,\n0.409544587135315,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,\n0.244148418307304,0.376309484243393,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422,0.271062970161438,0.0843436047434807,0.268807142972946,\n0.0709859803318977,0.255287438631058,0.0861772000789642,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,\n0.0979962795972824,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629,0.359014123678207,\n0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411,0.422037154436111,0.454183876514435,0.141791939735413,\n0.448351323604584,0.145058676600456,0.413058042526245,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089,0.791049957275391,\n0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263,\n0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266,0.587654650211334,\n0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287,0.0992880389094353,0.55315625667572,\n0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,\n0.941240012645721,0.446224510669708,0.945038080215454,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,\n0.356241673231125,0.772000849246979,0.366978108882904,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677,\n0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711,\n0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,\n0.90440434217453,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126,\n0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,\n0.014482319355011,0.828360557556152,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065,0.0374843291938305,0.953755974769592,\n0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801,0.0981541946530342,\n0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591,0.778886675834656,0.0793051347136498,\n0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,\n0.493428647518158,0.950604200363159,0.342332631349564,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,\n0.0616136789321899,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,\n0.146303951740265,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853,\n0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,\n0.368574023246765,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195,0.864213168621063,0.874509155750275,0.815409004688263,\n0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,\n0.754678249359131,0.978725790977478,0.543712019920349,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077,\n0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,\n0.596252083778381,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,\n0.123328268527985,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701,0.0743808746337891,\n0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,\n0.235308602452278,0.0271604433655739,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119,\n0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025,0.199742212891579,0.168715670704842,\n0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,\n0.196686863899231,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878,0.808161675930023,0.0944669842720032,0.829814612865448,\n0.092739924788475,0.836659967899323,0.0951223000884056,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484,\n0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,\n0.719165027141571,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513,0.326107054948807,0.852742612361908,\n0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805,\n0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126,\n0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542,0.832485556602478,0.200292333960533,\n0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655,0.0769496187567711,0.269949793815613,0.0977088510990143,\n0.236902311444283,0.106580346822739,0.257785648107529,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943,\n0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111,\n0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437,0.133912816643715,0.20319464802742,\n0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,\n0.232346341013908,0.0509957745671272,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837,\n0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521,\n0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,\n0.0835410356521606,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244,\n0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,\n0.0136640649288893,0.0665248408913612,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697,0.314485341310501,0.406984806060791,0.316858559846878,\n0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,\n0.313420087099075,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206,0.482427507638931,0.03264981508255,\n0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488,0.508201599121094,\n0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921,0.36936816573143,0.356859803199768,0.368447452783585,\n0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,\n0.472558706998825,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,\n0.421510130167007,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063,0.550254046916962,\n0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,\n0.0392846465110779,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623,0.49083137512207,0.0473983287811279,\n0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896,0.4264976978302,0.349507212638855,0.451796531677246,\n0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235,\n0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,\n0.780230820178986,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895,0.664426863193512,0.451735496520996,0.781740605831146,\n0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526,0.486700624227524,\n0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768,0.386751741170883,0.617895185947418,\n0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,\n0.90181291103363,0.50802755355835,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065,0.637537717819214,\n0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,\n0.564278662204742,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,\n0.561667025089264,0.981199622154236,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,\n0.991807043552399,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,\n0.434852063655853,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999,\n0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535,0.816003322601318,\n0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,\n0.830957114696503,0.422840178012848,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,\n0.143848940730095,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251,0.898496329784393,\n0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118,0.331734776496887,\n0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412,0.59907454252243,0.0290243290364742,0.594756245613098,\n0.0432147420942783,0.550425350666046,0.0373775735497475,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,\n0.933514356613159,0.0762230306863785,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,\n0.816710710525513,0.759240210056305,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246,0.591059923171997,\n0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,\n0.714633941650391,0.916672646999359,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,\n0.974531888961792,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582,0.577414393424988,0.962452411651611,\n0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264,0.963677108287811,0.872271716594696,\n0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392,0.978221297264099,\n0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,\n0.621363580226898,0.682616829872131,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663,0.105796456336975,\n0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478,0.292685657739639,0.292649954557419,0.269282728433609,\n0.292957901954651,0.269526928663254,0.0986065044999123,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436,0.189350441098213,0.114026740193367,\n0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426,\n0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129,\n0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,\n0.727285981178284,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,\n0.139332994818687,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,\n0.157439410686493,0.711707234382629,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938,0.955354988574982,0.376253008842468,0.963590979576111,\n0.376287996768951,0.955453991889954,0.500213027000427,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544,\n0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,\n0.36667200922966,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187,\n0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282,0.845073997974396,0.622668981552124,\n0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044,0.743863999843597,0.51264899969101,\n0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384,0.595848023891449,\n0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281,\n0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101,0.408055007457733,0.415430009365082,\n0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,\n0.726795017719269,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,\n0.835596978664398,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155,0.768315017223358,\n0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,\n0.759728014469147,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148,0.171581521630287,\n0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763,0.162967994809151,0.113466002047062,\n0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328,\n0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,\n0.698300063610077,0.684771537780762,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,\n0.199659392237663,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,\n0.313732326030731,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,\n0.583523273468018,0.458871752023697,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,\n0.476934969425201,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,\n0.441692322492599,0.315481513738632,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709,0.507110118865967,0.265018463134766,0.501041769981384,\n0.297658920288086,0.484085887670517,0.325823694467545,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799,0.417306035757065,0.26596075296402\n\t\t\t} \n\t\t\tUVIndex: *46575 {\n\t\t\t\ta: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,\n249,254,137,254,249,138,255,256,257,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,\n421,418,416,402,401,419,422,399,402,423,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,\n649,650,651,380,379,649,648,389,388,652,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,\n912,913,912,914,860,861,913,915,914,912,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039,1075,1076,1077,1078,1079,1080,1077,1080,\n1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900,\n1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,\n1307,1306,1303,1302,1274,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414,1411,1400,1401,1400,1411,1410,1402,1415,1416,\n1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502,1503,1504,1503,\n1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,\n615,1462,1597,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,\n687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323,319,318,1738,1737,\n1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,\n775,1792,1793,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,\n1856,1857,1854,1857,167,178,1855,660,1216,1858,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462,1461,1881,1882,1883,1884,1885,\n1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,\n2052,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,\n2144,2147,2149,2150,2148,2148,2150,2151,2152,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313,2317,2318,2316,2317,2319,2320,\n2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,\n2428,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,\n2636,2637,2638,2583,2582,2638,2097,2584,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824,2825,2645,2826,2827,2828,2829,2827,\n2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891,\n2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,\n2887,2886,2736,2551,2553,3049,2736,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564,3119,3120,3121,3010,2921,3122,2896,\n3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,\n3248,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,\n3325,3326,3327,3326,3325,3328,3329,2436,2433,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416,3415,2216,3418,3416,3412,\n2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,\n2291,3494,3500,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,\n2135,3528,2338,3529,3528,2383,2126,2125,3528,3528,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867,3558,3109,3110,3109,\n3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,\n2973,3613,3614,2973,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,\n3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784,3766,3785,3786,3787,\n3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,\n2814,2630,2669,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,\n4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096,4209,4213,4113,\n4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,\n4322,4326,4327,4325,4324,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431,4436,4437,4433,4432,4437,4438,4434,4433,4439,\n4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564,4568,\n4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,\n4506,4496,4495,4542,4546,4527,4526,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808,4795,4796,4810,4809,4796,4797,4810,\n4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,\n4964,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,\n5072,5019,5065,5019,5018,5067,5065,5018,5073,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199,5198,5130,5128,5206,5200,\n5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,\n5302,5305,5325,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,\n5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547,5550,5546,5562,\n5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,\n5747,5673,5671,5749,5748,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876,5881,5882,5883,5884,5835,5834,5830,5834,5833,\n5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013,5997,\n5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,\n6144,6085,6086,6145,6145,6086,6087,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321,6322,6323,6324,6325,6326,6327,6321,\n6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,\n6296,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,\n6397,6386,6355,6352,6351,6349,6404,6279,6298,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606,6497,6496,6498,6487,6544,\n6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,\n6601,6678,6677,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,\n6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066,7067,7068,7069,\n7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,\n6966,6884,7263,7264,6883,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870,6907,6935,6814,6905,6905,6814,6813,6806,6776,\n6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061,7095,\n7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,\n6948,6948,7288,7287,6952,6995,6999,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500,7501,7502,7499,7503,7504,7505,7506,\n7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,\n7504,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,\n7759,7676,7675,7645,7760,7758,7761,7760,7645,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399,7398,7548,7395,7394,7549,\n7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,\n7984,7971,7975,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,\n7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114,8113,8115,8116,\n8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,\n8245,8244,8220,8220,8244,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370,8367,8414,8418,8371,8419,8420,8371,8418,8421,\n8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325,8310,\n8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,\n8264,8263,8203,8201,8184,8185,8183,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665,8586,8585,8666,8590,8589,8667,8668,\n8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,\n8800,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,\n8680,8754,8664,8718,8731,8565,8563,8672,8668,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842,9045,9034,8901,8903,9031,\n9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,\n9097,9122,9095,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,\n9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566,9564,9565,9551,\n9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,\n9410,9661,9453,9453,9661,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213,9707,9707,9213,9223,9708,9708,9223,9239,9709,\n9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754,9761,\n9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,\n9976,9980,9981,9982,9983,9976,9979,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124,10143,10144,10145,10146,10147,10148,\n10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897,\n9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,\n10099,9961,9963,10320,10140,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760,9761,9838,9837,9760,9837,9836,\n9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,\n10397,10393,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,\n10457,10461,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,\n10612,10610,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,\n10537,10536,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,\n10678,10827,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,\n10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,\n10945,10944,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,\n10969,10918,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,\n11132,11230,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,\n11276,10810,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,\n11296,11295,10647,10646,10692,10647,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,\n11409,11410,11411,11412,11346,11349,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,\n11530,11531,11530,11541,11542,11533,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,\n11697,11459,11455,11458,11698,11696,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,\n11818,11819,11820,11821,11499,11640,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,\n11476,11475,11849,11487,11600,11603,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,\n11960,11961,11924,11923,11894,11911,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,\n12044,12055,12062,12053,12055,12065,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,\n11770,11764,12269,12164,12163,12166,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,\n12359,12360,12162,11967,11966,11997,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,\n12412,12413,12414,12402,12415,12416,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,\n12138,12002,11489,11669,12068,12048,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,\n12566,12567,12568,12556,12554,12569,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,\n12612,12609,12608,12613,12614,12612,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,\n12711,12707,12706,12712,12718,12720,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,\n12794,12740,12757,12800,12755,12833,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,\n12914,12915,12933,12932,12915,12916,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,\n12985,13022,13023,12989,12987,13023,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078\n\t\t\t} \n\t\t}\n\t\tLayerElementSmoothing: 0 {\n\t\t\tVersion: 102\n\t\t\tName: \"\"\n\t\t\tMappingInformationType: \"ByEdge\"\n\t\t\tReferenceInformationType: \"Direct\"\n\t\t\tSmoothing: *23455 {\n\t\t\t\ta: 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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,\n1,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,\n1,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,\n1,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,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,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,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,0,1,1,1,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,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,0,0,0,0,0,0,0,0,0,1,1,1,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,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,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,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,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,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,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,\n1,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,\n1,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,\n1,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,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,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,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,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,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,1,1,1,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,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,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,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,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,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,\n1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,1,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,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,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,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,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,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,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,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,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,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,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,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,\n1,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,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,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,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,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,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,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,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,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,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,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,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,\n1,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,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,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,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,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,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,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,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,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,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,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,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,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,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,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n1,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,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,0,1,1,1,1,1,1,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,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,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,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,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,0,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,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,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,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,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,\n1,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,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,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,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,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,0,1,0,0,1,1,0,1,1,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,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n1,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,0,1,0,0,0,1,1,0,1,1,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,\n1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,0,1,1,1,1,0,1,1,0,1,1,1,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,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,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,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,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,1,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,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,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,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,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,\n1,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,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,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,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,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,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,0,1,0,1,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,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,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,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,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,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,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,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,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,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,\n1,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,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,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,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,0,1,1,1,1,1,1,1,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,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,1,1,1,1,1,1,1,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,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,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n1,1,1,1,1,1,1,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n1,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,1,1,1,1,1,1,1,1,1,1,1,1,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,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,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,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,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,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,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,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,\n1,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,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,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,0,1,0,0,0,0,0,0,1,1,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,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,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,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,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,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,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,1,1,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,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,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,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,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,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,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,\n1,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,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,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,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,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,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,0,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,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,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,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,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,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,0,1,1,1,0,1,1,0,1,1,1,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,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,0,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,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,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,0,1,1,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,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,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,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,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,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,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,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,\n1,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,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,0,1,1,1,0,1,1,1,0,1,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,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,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,0,1,0,1,1,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,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,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,1,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,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,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,0,1,1,1,1,1,1,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,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,1,1,1,1,1,1,1,1,1,1,\n1,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,0,1,0,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,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,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,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,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,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,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,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,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,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,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n\t\t\t} \n\t\t}\n\t\tLayerElementMaterial: 0 {\n\t\t\tVersion: 101\n\t\t\tName: \"\"\n\t\t\tMappingInformationType: \"ByPolygon\"\n\t\t\tReferenceInformationType: \"IndexToDirect\"\n\t\t\tMaterials: *12034 {\n\t\t\t\ta: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,\n2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,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,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,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,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,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,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,\n1,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,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,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,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,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,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,\n3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,\n3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,\n2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,\n2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,\n2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,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,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,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,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,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,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,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,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,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,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,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,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,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,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,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,1,1,1,1,1,1,1,1,1,1,\n1,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,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,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,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,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,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,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,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,1,1,1,1,1,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,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,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,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,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,4,4,4\n\t\t\t} \n\t\t}\n\t\tLayer: 0 {\n\t\t\tVersion: 100\n\t\t\tLayerElement:  {\n\t\t\t\tType: \"LayerElementNormal\"\n\t\t\t\tTypedIndex: 0\n\t\t\t}\n\t\t\tLayerElement:  {\n\t\t\t\tType: \"LayerElementMaterial\"\n\t\t\t\tTypedIndex: 0\n\t\t\t}\n\t\t\tLayerElement:  {\n\t\t\t\tType: \"LayerElementSmoothing\"\n\t\t\t\tTypedIndex: 0\n\t\t\t}\n\t\t\tLayerElement:  {\n\t\t\t\tType: \"LayerElementUV\"\n\t\t\t\tTypedIndex: 0\n\t\t\t}\n\t\t}\n\t\tLayer: 1 {\n\t\t\tVersion: 100\n\t\t\tLayerElement:  {\n\t\t\t\tType: \"LayerElementUV\"\n\t\t\t\tTypedIndex: 1\n\t\t\t}\n\t\t}\n\t\tLayer: 2 {\n\t\t\tVersion: 100\n\t\t\tLayerElement:  {\n\t\t\t\tType: \"LayerElementUV\"\n\t\t\t\tTypedIndex: 2\n\t\t\t}\n\t\t}\n\t}\n\tModel: 125162032, \"Model::Camera_Switcher\", \"CameraSwitcher\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"ScalingMin\", \"Vector3D\", \"Vector\", \"\",1,1,1\n\t\t\tP: \"Show\", \"bool\", \"\", \"\",0\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Visibility\", \"Visibility\", \"\", \"A+\",0\n\t\t}\n\t\tShading: W\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125296688, \"Model::Root\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-89.9999999904458\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-89.9999237060538\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-2.38855595932071e-009\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",0.0375633835792542,37.4609870910645,2.230548620224\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-90,-89.9999237060547,-2.38855601963905e-009\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125274112, \"Model::Pelvis\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-89.9999182889514\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-90\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",-0.77721095085144,1.13318836688995,0.656980156898499\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",39.7229881286621,-93.1371078491211,42.0879821777344\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125276368, \"Model::Spine\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-0.00023030408276738\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-8.60479869898838e-005\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-5.4382885776673\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",3.78600597381592,-0.00359981134533882,5.10731069880421e-006\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-0.00023030408192426,-8.60479849507101e-005,-5.43828868865967\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125278624, \"Model::Spine1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-1.29875981134163e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",1.85383892660238e-005\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-5.82215760016407\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.54331636428833,-0.00359953427687287,-1.3350340566376e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",2.96879076957703,-0.549681961536407,-5.84038019180298\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125280880, \"Model::Spine2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-1.3371636415931e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-1.36830001373602e-005\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",5.69767308131356\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.54404973983765,-0.00359953194856644,6.19496276499376e-008\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",2.77687907218933,1.67002356052399,5.42585277557373\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,0.999999940395355,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125692096, \"Model::Spine3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",3.99052131175995\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-1.53253420069814\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",1.57506291940808\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.5439600944519,-0.00439895549789071,2.22052122467176e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",2.87556838989258,1.50368475914001,3.25706577301025\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1.00000011920929,1.00000011920929,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125694352, \"Model::Neck\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-1.42603327943234e-005\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-6.31973890607551e-005\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",23.7369222277942\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",5.53625154495239,-0.00288246641866863,5.17475982064752e-008\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-6.63933753967285,1.94592773914337,28.7092266082764\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,0.999999940395355,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125673632, \"Model::Head\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-1.80670942133362e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",2.70945409552123e-005\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-11.0992757151363\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",3.95389556884766,1.09085840449552e-006,9.73389049363504e-008\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",1.423987865448,-0.918177843093872,-18.9311122894287\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1.00000011920929,1.00000011920929,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125726848, \"Model::L_eye_joint1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"PreRotation\", \"Vector3D\", \"Vector\", \"\",90.0000000000006,-87.3750626410931,-90.0000000000003\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.22069501876831,1.4060525894165,1.39484596252441\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",3.26757836341858,0,0\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125715248, \"Model::R_eye_joint\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"PreRotation\", \"Vector3D\", \"Vector\", \"\",90.0000000000006,-87.3750626410931,-90.0000000000003\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.29626369476318,1.33319282531738,-1.0660924911499\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",3.26757836341858,0,0\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125722208, \"Model::L_eyeBall_joint2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-3.26721592629767\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.48259973526001,3.2479395866394,1.27459120750427\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",1.07939505577087,0,0.00536951329559088\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125703648, \"Model::R_eyeBall_joint\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",2.2266900494759\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",0.205056910357676\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",0.964814224310023\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.57700967788696,3.10706281661987,-1.20767879486084\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",0.292065471410751,0.0640802830457687,0.30150443315506\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125724528, \"Model::L_Clavicle\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-0.000872600236291507\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-80.3013114262034\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",156.218311991058\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",-0.307961851358414,-0.770594537258148,1.2232973575592\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-0.000872600241564214,-80.3013076782227,156.218307495117\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125705968, \"Model::L_UpperArm\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-1.39497982725312\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",36.3728195804967\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-4.78353474107178\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",6.71029043197632,0.844819128513336,0.0320546366274357\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",9.80766296386719,60.3215827941895,41.7058372497559\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125710608, \"Model::L_Forearm\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-3.76045443581529e-007\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-3.86569406254761e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-11.4591582981105\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",13.1421842575073,-1.00144292858317e-009,-3.49096410445782e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",33.6098442077637,17.2327537536621,-13.2919816970825\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125708288, \"Model::L_Hand\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-74.7089589483892\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",10.2784385710031\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",2.78414734150109\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",10.8255519866943,5.22714969974913e-007,9.90214175544679e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-82.1016998291016,2.46786618232727,3.1264545917511\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125712928, \"Model::L_Thumb1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",128.393568534218\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",47.8535790896764\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",34.2815344649445\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.62510848045349,0.626630425453186,-1.67875993251801\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",119.229835510254,30.9591827392578,19.9485893249512\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125717568, \"Model::L_Thumb2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",2.8803815967782e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",8.18135633512738e-007\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",7.98321386697265\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.1404322385788,2.85936584987212e-006,-1.81425923528877e-006\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",2.84072734757501e-006,-3.12636920796194e-008,17.8534507751465\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125696688, \"Model::L_Thumb3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-6.67931703646524e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-4.97463347454225e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-1.12265664696339\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.38246870040894,-7.17560169505305e-007,3.67166808246111e-006\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-7.58698934077984e-006,-3.2017899229686e-006,8.96595764160156\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1,1,1.00000011920929\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125719888, \"Model::L_Index1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",11.7792021726967\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",4.75915906885796\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",1.51887475710425\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.34874391555786,0.0162533205002546,-1.56133377552032\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",12.0142822265625,1.66459441184998,3.92592287063599\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125699008, \"Model::L_Index2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",1.0101348006507e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-3.20933633655466e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",10.2647182459575\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.47369563579559,9.02053685081228e-008,5.82350480726745e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",7.5388690845557e-008,-3.20740196002589e-006,15.1926651000977\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125701328, \"Model::L_Index3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-7.97497089828841e-007\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",7.67177259619785e-007\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-6.41338018883955e-008\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.06284534931183,1.39810509836025e-007,2.21882010009722e-006\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-7.97497079929599e-007,7.67177255056595e-007,-6.41338004925274e-008\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125835120, \"Model::L_Middle1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",1.09189139401105\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-5.64785295314554\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-1.21502703506741\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.35998678207397,-0.000294537370791659,-0.366859555244446\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",1.96983647346497,1.10134339332581,14.2388792037964\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125839760, \"Model::L_Middle2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-1.61159378098832e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",4.23584160161545e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",5.06606087060092\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.52912437915802,7.80884704454365e-007,-3.64346448122888e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",7.24273192531655e-008,4.3645964069583e-006,16.150936126709\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125851360, \"Model::L_Middle3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",3.09046105578622e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-2.70938072856318e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",3.80611905636409\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.52912795543671,7.2803447892511e-007,6.76120862408425e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",3.09046095026133e-006,-2.7093806238554e-006,3.80611896514893\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125844400, \"Model::L_Ring1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-8.32501905474155\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-15.1597389826992\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",0.496591029077497\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.29501485824585,-0.0947425812482834,0.806466221809387\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-8.98741436004639,-1.27314984798431,19.2985076904297\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,0.999999940395355,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125837440, \"Model::L_Ring2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",2.17552682211658e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",1.24628739924695e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",12.8944029645258\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.40333545207977,1.16687704121432e-006,-2.30216258501059e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",2.20680271922902e-006,-3.11167731581463e-008,25.5660648345947\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1.00000011920929,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125853680, \"Model::L_Ring3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",6.3264375956501e-007\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-2.06977911624494e-007\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-5.6513995325555e-007\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.38826143741608,2.13072965493666e-007,-2.23952710598496e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",0,0,9.02113819122314\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125828160, \"Model::L_Pinky1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-22.2106470375889\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-21.9198516462821\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",10.231888820637\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",3.97267842292786,0.223487868905067,1.74283754825592\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-20.6544322967529,-0.819446563720703,22.4568309783936\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125856000, \"Model::L_Pinky2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",8.45328125392068e-008\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",3.2706221696275e-007\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",6.57202492051798e-007\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.13179302215576,-2.16195689972665e-006,-4.03594668796359e-008\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125849040, \"Model::L_Pinky3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-2.659446426981e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",2.5977229425773e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",3.8703228612241\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",0.858954668045044,6.74906289077626e-007,5.44045349215594e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-2.65944640887028e-006,2.59772286881343e-006,3.87032294273376\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1,0.999999940395355,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125842080, \"Model::R_Clavicle\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-0.000867775408281365\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",80.301183832827\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",156.216597244916\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",-0.307961821556091,-0.770587801933289,-1.22330164909363\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-0.000867775408551097,80.3011856079102,156.216598510742\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125846720, \"Model::R_UpperArm\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",1.39497769642051\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-36.3728176590539\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-4.78354389051472\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",6.88650560379028,-1.05879163742065,0.188849896192551\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",42.592903137207,-47.3313064575195,-50.2629508972168\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1,1.00000011920929,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125832800, \"Model::R_Forearm\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-6.59389332229243e-007\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",5.71812264881479e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-11.4591561379041\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",13.1421842575073,9.03095610738092e-007,3.16086266138882e-006\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-31.568567276001,-28.5609245300293,-47.7509155273438\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1,0.99999988079071,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125825840, \"Model::R_Hand\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",74.7089619068957\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-10.2784422770857\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",2.78414911050139\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",10.8255529403687,4.45484261035745e-007,-7.54761458665598e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",71.1884765625,10.1721467971802,-14.7731218338013\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125858320, \"Model::R_Thumb1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-128.393572194366\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-47.853581034479\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",34.2815348083318\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.62510800361633,0.626631021499634,1.67876040935516\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-129.154998779297,-42.0322799682617,34.3628196716309\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1,0.999999940395355,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125830480, \"Model::R_Thumb2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",3.88347917343395e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-1.97078280763548e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",7.98321879290525\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.14043200016022,-1.38291397888679e-006,7.55724443024519e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",2.74146850642865e-006,-3.38374729835778e-006,32.0624504089355\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125872240, \"Model::R_Thumb3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-7.46143268686555e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",2.29402027731357e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-1.12266273488597\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.38246870040894,3.77754112435014e-008,-3.12997121909575e-006\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-7.38412791179144e-006,2.46886565946625e-006,2.01478266716003\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125888480, \"Model::R_Index1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-11.7792032350658\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-4.75915740397456\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",1.51887260858435\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.34874391555786,0.0162522289901972,1.56133341789246\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-11.8456792831421,-2.26736164093018,0.35604390501976\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125862960, \"Model::R_Index2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",3.27682771579138e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",2.52179167280701e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",10.2647245704775\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.47369468212128,-3.31795149577374e-006,3.01659298429513e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",3.5970981571154e-006,2.03909712581662e-006,18.2982807159424\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125879200, \"Model::R_Index3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",5.68755212474489e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",2.55623109709803e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",1.61946557729347e-006\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.0628467798233,-7.71003385580116e-008,-3.79914951054161e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",6.12122676102445e-006,1.18875880161795e-006,13.211012840271\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125886160, \"Model::R_Middle1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-1.09189337444105\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",5.64785242253659\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-1.21502939388877\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.35998678207397,-0.000293526856694371,0.366859257221222\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-1.12324810028076,-1.13205850124359,1.1130610704422\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125869920, \"Model::R_Middle2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",3.91460541234184e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-2.17455420940842e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",5.06606374698867\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.52912306785584,-3.33934121954371e-006,2.41871944695049e-009\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",3.29875911120325e-006,-3.02836747323454e-006,18.566930770874\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125860640, \"Model::R_Middle3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-4.89582237110179e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-2.26155480670848e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",3.80612416233277\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.529128074646,-1.97209737962112e-006,-3.19399333648107e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-5.25195036971127e-006,-6.89941970222208e-008,3.59999227523804\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125874560, \"Model::R_Ring1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",8.32501542851292\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",15.1597406151334\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",0.496593364447639\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",4.29501342773438,-0.0947411805391312,-0.806465566158295\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",9.92037773132324,6.50482177734375,12.5329875946045\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125865280, \"Model::R_Ring2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",4.74502253458847e-007\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-1.57078862698148e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",12.8944025426958\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.40333533287048,3.56238683707488e-006,8.68510085183516e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-8.52487929137169e-008,-1.5643117876607e-006,27.2881908416748\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125867600, \"Model::R_Ring3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",1.74365380799692e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",4.92222297413111e-007\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-1.86127542097727e-006\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.38826143741608,-2.60250772043946e-007,1.2035725660553e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",1.73695445937483e-006,-8.55293436075044e-009,13.044979095459\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125876880, \"Model::R_Pinky1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",22.2106452758657\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",21.9198533236593\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",10.2318915977067\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",3.97267866134644,0.223486974835396,-1.74283790588379\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",24.3684997558594,5.07718563079834,23.8567218780518\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125881520, \"Model::R_Pinky2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",1.3099773394975e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-1.5017060650038e-007\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",3.9733668460521e-006\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",1.13179266452789,-4.5721540118393e-006,-2.5465004682701e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",1.28670376398077e-006,2.94697493075091e-008,21.8681793212891\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 125883840, \"Model::R_Pinky3\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",4.46392401207693e-007\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",1.49685980438668e-008\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",3.87032088256291\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",0.858952879905701,-2.68376516032731e-006,3.09315595359294e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",0,0,5.75897359848022\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,1,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126220272, \"Model::L_Thigh1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",169.508247139113\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-12.1801615973901\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-178.43746737346\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",-3.76930594444275,-0.355237752199173,3.4951446056366\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-14.2042036056519,-164.144622802734,-29.484790802002\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126222592, \"Model::L_Knee2\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",6.26299260320172e-007\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-6.93163629204283e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-19.1493676500597\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",18.257194519043,-6.12689859735838e-007,1.20223648991669e-006\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",9.30474472045898,-0.54519647359848,-24.0315208435059\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126194752, \"Model::L_Ankle1\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",-2.97471392034351\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-11.0525243817621\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",9.40468519858122\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",15.4280042648315,-1.32429221366692e-007,3.40772317031224e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-4.13260126113892,-1.2486013174057,7.7121057510376\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,0.999999940395355,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126197072, \"Model::L_Ball\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",5.08524009745423e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-3.36317562607059e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",104.594670846427\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",5.25022077560425,6.27384853363037,-7.13063798229996e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",5.08523999087629e-006,-3.36317566507205e-006,104.594673156738\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1,1.00000011920929,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126227232, \"Model::R_Thigh\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",10.4914172002596\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",167.819835977802\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",1.56246131877261\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",-3.76930618286133,-0.355218410491943,-3.49514603614807\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",8.09784317016602,184.387466430664,0.917054355144501\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126224912, \"Model::R_Knee\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",1.31859940773703e-007\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",-1.18581000243473e-006\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",-19.1493656223787\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",18.257194519043,-1.20693221106194e-006,-1.28146643874061e-006\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",-1.3035603761673,-4.911376953125,-31.2710037231445\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126229552, \"Model::R_Ankle\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",2.97472568209434\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",11.0525220726222\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",9.40468503315529\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",15.4280042648315,1.89655921190024e-007,5.16880504619621e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",4.14072751998901,1.20476734638214,25.1047039031982\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",0.999999940395355,0.999999940395355,0.999999940395355\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126199392, \"Model::R_Ball\", \"LimbNode\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"PreferedAngleX\", \"double\", \"Number\", \"\",2.16954839938349e-006\n\t\t\tP: \"PreferedAngleY\", \"double\", \"Number\", \"\",9.48114901020568e-008\n\t\t\tP: \"PreferedAngleZ\", \"double\", \"Number\", \"\",104.594670599531\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t\tP: \"Lcl Translation\", \"Lcl Translation\", \"\", \"A+\",5.25022077560425,6.27385330200195,-4.15015392718487e-007\n\t\t\tP: \"Lcl Rotation\", \"Lcl Rotation\", \"\", \"A+\",1.04748585272318e-006,-3.46426012876044e-011,104.594665527344\n\t\t\tP: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A+\",1,1.00000011920929,1\n\t\t\tP: \"liw\", \"Bool\", \"\", \"A+U\",0\n\t\t}\n\t\tShading: Y\n\t\tCulling: \"CullingOff\"\n\t}\n\tModel: 126231872, \"Model::him\", \"Mesh\" {\n\t\tVersion: 232\n\t\tProperties70:  {\n\t\t\tP: \"RotationActive\", \"bool\", \"\", \"\",1\n\t\t\tP: \"InheritType\", \"enum\", \"\", \"\",1\n\t\t\tP: \"ScalingMax\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"DefaultAttributeIndex\", \"int\", \"Integer\", \"\",0\n\t\t}\n\t\tShading: T\n\t\tCulling: \"CullingOff\"\n\t}\n\tPose: 130877536, \"Pose::skinCluster3\", \"BindPose\" {\n\t\tType: \"BindPose\"\n\t\tVersion: 100\n\t\tNbPoseNodes: 59\n\t\tPoseNode:  {\n\t\t\tNode: 126231872\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125296688\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 1.33158055981697e-006,-5.5511151231309e-017,1.00000000000003,0,1,1.66752833763587e-010,-1.33158055981693e-006,0,-1.66752944785748e-010,1.00000000000004,2.22044604925039e-016,0,0.0375633844953955,37.4609861130865,2.23054871115166,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125274112\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -1.66752944785752e-010,1.00000000000094,3.33066907387862e-016,0,2.75770739245021e-006,-3.97450655096411e-017,1.00000000000003,0,1.00000000000091,1.66752833764135e-010,-2.75770739256375e-006,0,0.0375620733105228,37.4609888630758,1.27468111719239,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125276368\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 1.24029684198113e-006,0.995498838507049,-0.0947735868260166,0,-1.27428576289917e-006,0.0947735868271358,0.995498838507889,0,0.999999999999406,-1.1139454664704e-006,1.38609741848246e-006,0,0.0375671700624984,41.2469948552468,1.27108130580428,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125278624\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 1.03960780457953e-006,0.98074971266116,-0.19526913922047,0,-1.1645631082995e-006,0.195269139221088,0.980749712661819,0,0.999999999999837,-7.92191801362473e-007,1.34514820815766e-006,0,0.0375726762066018,45.7695196641318,0.836911606169505,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 126220272\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.210985191505916,-0.975253732219803,0.0660718325861944,0,0.177993635259534,0.104794326230727,0.978435668241952,0,-0.961146957227345,-0.194675058661601,0.195698995513005,0,3.5327074628724,37.4609841497582,1.27467801962757,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 126227232\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.210987587098956,-0.975253163175659,0.0660724603122853,0,-0.177990489435915,0.104794812011874,0.97843623227106,0,-0.961147083401435,0.194677624807938,-0.195696186916594,0,-3.45758308113989,37.4609935763943,1.27468759391711,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125280880\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 1.15766800847204e-006,0.995290550202889,-0.0969362439528012,0,-1.28535910910391e-006,0.0969362439538238,0.995290550203612,0,0.999999999999517,-1.02761825064411e-006,1.3915258848223e-006,0,0.0375774663776998,50.2253922781078,-0.0539313180359257,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 126222592\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.140922950790799,-0.955665576234115,-0.258542307170597,0,0.237354544212354,-0.220918711872771,0.945969229345032,0,-0.961146961126678,-0.194674940381941,0.195699024114051,0,7.38470396372674,19.6555865808851,2.48096457007616,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 126224912\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.140926372210181,-0.955665194315514,-0.258541892648224,0,-0.23735235663778,-0.220918035591436,0.945969990525419,0,-0.961147085585364,0.194677625250286,-0.195696187361257,0,-7.30962477938486,19.6556065018375,2.48098499916812,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125692096\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.0267457025467083,0.997222184485877,-0.0695175881175487,0,0.0695652398894222,0.0675171408584094,0.99529002121809,0,0.997218805426799,-0.0314557323172693,-0.067566193734535,0,0.037582954481531,54.7475266033293,-0.498784000447107,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 126194752\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.00974436259181705,-0.998083556732566,-0.0611084168461832,0,0.261574774854858,-0.0615276811691846,0.963220090472259,0,-0.965134004335868,-0.00659841591207144,0.261673027918648,0,9.55886480195558,4.91157385166946,-1.50782703524102,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 126229552\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.00974138551962694,-0.998083577574783,-0.0611084475807566,0,-0.26157229002768,-0.0615269335133899,0.963220845632343,0,-0.965134744120757,0.00660116199430494,-0.261670363784603,0,-9.48383716527764,4.91159968219961,-1.50780021776383,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125694352\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.0524868392889062,0.940038670507985,0.337005085889192,0,0.0529138494736022,-0.339614137295755,0.939075268843438,0,0.997218760704303,-0.0314568537088636,-0.0675663317258446,0,0.185453422192648,60.2682047905477,-0.886519744810882,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 126197072\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.255589775823783,0.19195411195591,0.947537621302088,0,-0.0564815951498304,0.981381805094744,-0.183574958091845,0,-0.965134008856972,-0.00659851424383035,0.261672987109975,0,11.1487853847708,-0.714600338285195,4.21443710294172,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 126199392\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.25558666067715,0.191954823954638,0.947538281383767,0,0.0564837267618767,0.981381639119508,-0.183575147793249,0,-0.965134739912784,0.00660112479013478,-0.261670355112633,0,-11.0737572844988,-0.714570040351037,4.21446814199767,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125673632\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.0413181877665486,0.987834399898251,0.149920513802912,0,0.062028292927883,-0.152295266367851,0.986386738366224,0,0.99721878219907,-0.0314563913752569,-0.067566229726332,0,0.392981060570839,63.9850191920975,0.445964203562684,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125724528\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.978469078551498,-0.19899715238426,-0.0547582098290914,0,-0.069589287242088,-0.0683111384044164,-0.995234104790114,0,0.194308156552106,0.977616366684517,-0.0806884043782442,0,1.34840940139458,60.2019324480378,-1.79660442619341,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125842080\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.987461923011747,-0.13698449419504,0.0784481919759329,0,-0.0695892727841481,-0.0683111257247411,-0.995234106778274,0,0.141690531380276,-0.988214994757188,0.0579219885650571,0,-1.09138459344411,60.2788924913577,-1.63129036253243,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125726848\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.99333167408321,-0.0244486008617004,-0.112669652304996,0,0.107633609793549,-0.153576100459397,0.98225737079121,0,-0.0413181877665494,-0.98783439989825,-0.149920513802916,0,2.04555419810496,67.8963551483937,2.37140015218962,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125715248\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.99333167408321,-0.0244486008617004,-0.112669652304996,0,0.107633609793549,-0.153576100459397,0.98225737079121,0,-0.0413181877665494,-0.98783439989825,-0.149920513802916,0,-0.409936873234029,68.0595129473661,2.4771378649045,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125722208\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.0413367875848507,0.987788683622589,0.150216314763167,0,0.124663367302492,-0.154268945761706,0.980132793135531,0,0.991337639848011,-0.0217890619226689,-0.129518029951179,0,2.05070439627867,67.878345659435,4.23560315393477,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125703648\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.0387875582448076,0.985236212535225,0.166749169520768,0,0.100028336113103,-0.1698648688521,0.980377689145253,0,0.994228272900296,-0.0213468072050495,-0.105140166318426,0,-0.429499383170284,68.0711452108758,4.27851568464557,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125705968\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.674535534616324,-0.734845412587802,0.0707395700590386,0,-0.00572428097575982,-0.101024952776188,-0.994867403846182,0,0.738220225503697,0.670668478827922,-0.0723513795484483,0,8.04491907067728,58.8400224990099,-2.17136220574529,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125846720\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.703610256733915,-0.691373653145981,0.164119291692498,0,-0.1347478692944,-0.0969550739362427,-0.986125182940114,0,0.697693056382247,-0.715962484913526,-0.0249425301025703,0,-7.84944071573371,59.3413887525868,-1.09440146152723,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125710608\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.662227001235097,-0.700126797308046,0.266979158818587,0,0.128399382035873,-0.245002469789134,-0.960982554234246,0,0.738220180823852,0.670668526064849,-0.0723513975612902,0,16.9097893109037,49.1825482190907,-1.24168969306059,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125832800\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.662814701550135,-0.65833014375124,0.356760672082372,0,-0.271847634986037,-0.232377145821934,-0.933862759981466,0,0.697692990233294,-0.715962550614917,-0.0249424944978314,0,-17.0964154474492,50.2552282683214,1.06248452295354,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125708288\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.525245261158389,-0.819456511598867,0.229365340473718,0,-0.790238340982239,-0.569703536988409,-0.225746104342684,0,0.315659364239265,-0.0626812373747693,-0.946800025542229,0,24.0787631140926,41.6032895272955,1.6485065671716,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125825840\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.539910124506363,-0.785857706458226,0.301537587819719,0,0.715295250733165,-0.617193555619553,-0.327757250060974,0,0.443677562763431,0.0387289149319088,0.895349262736555,0,-24.2717529148383,43.1284417167981,4.92461529417918,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125712928\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.241495132730921,-0.623205901261989,0.74383772606254,0,0.74882388880975,-0.60721234791625,-0.265623820790119,0,0.61720575088779,0.492856585321279,0.613310267810766,0,23.907239967734,40.0198169594799,3.46924073788322,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125719888\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.476186922188061,-0.826192452107739,0.30108482700071,0,-0.714199475385093,-0.563128923203692,-0.415698178519829,0,0.512996263158813,-0.0170846090838862,-0.858220820124501,0,25.8572264968031,38.1282899455549,4.12055942809326,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125835120\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.570318660983103,-0.809442163568181,0.13978575995208,0,-0.773811834783023,-0.586520001785938,-0.239185251125484,0,0.275593789834533,0.0282439112719806,-0.960859260283435,0,26.2532517128633,38.0536303136344,2.99594441017406,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125844400\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.58288563544361,-0.812067739772282,-0.0281118678441426,0,-0.810871911031163,-0.579105536366181,-0.0844006630517097,0,0.0522593310342686,0.0719910332368333,-0.996035291673013,0,26.6641372400988,38.0871363638132,1.89145970528058,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125828160\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.467138990032661,-0.86540714932335,-0.1812501889475,0,-0.863910088514665,-0.490380893925407,0.114830513043787,0,-0.188256761855405,0.102942021367097,-0.976709968746014,0,26.5389279380321,38.1112872763109,0.859131146820495,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125858320\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.299955264051308,-0.640285298618272,0.707150444388401,0,-0.814394997426312,-0.557902711924946,-0.159703974445855,0,0.496777192390993,-0.527995676382642,-0.688790919898989,0,-23.9561106277145,41.5296020162524,6.71234048568143,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125888480\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.482154356012774,-0.795962880036411,0.366019579093359,0,0.614915285773909,-0.605054061971992,-0.505755637789783,0,0.624024310384197,-0.0187812660351121,0.781179170712812,0,-25.9153301313679,39.7613856649882,7.62853698134705,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125886160\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.595926399395956,-0.772654529636261,0.21880759560448,0,0.696185127521994,-0.632889114944885,-0.338788554082281,0,0.400247429545363,-0.0495624932684929,0.91506592530629,0,-26.463194722499,39.7164998561171,6.56787767402416,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125874560\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.631144710533568,-0.773772868523889,0.0541477347483783,0,0.754157767297867,-0.62847227279389,-0.190443192019585,0,0.181390093764703,-0.0793613433479259,0.980203763672088,0,-27.0162528423477,39.7804122897328,5.52870707356913,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125876880\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.540667622835062,-0.833617327916268,-0.112963789652428,0,0.839021778202407,-0.544097550461574,-0.000555890927663861,0,-0.0609999443314432,-0.0950797095804421,0.993598968834152,0,-27.0300412701334,39.8010486385352,4.4888290833198,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125717568\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.135155863907165,-0.701497726806397,0.699738402577797,0,0.775106460820417,-0.51477500599991,-0.366355962170193,0,0.617205698961515,0.492856600851178,0.61331027335005,0,23.6318315714115,39.3090915103631,4.31753622028422,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125699008\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.341297822230993,-0.913316665732874,0.222190005900152,0,-0.787623428108624,-0.406891557875956,-0.462697112986676,0,0.512996245106644,-0.0170845579613056,-0.858220834352026,0,26.5589812285729,36.910733644079,4.56426645349348,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125839760\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.499759799299395,-0.858072301605573,0.118118678235241,0,-0.821150580980059,-0.512751598060226,-0.250594545036832,0,0.2755938001527,0.0282438330507944,-0.960859246286125,0,27.1253418110482,36.8158938867169,3.20969391712155,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125837440\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.387236996149533,-0.920820121873301,-0.046237373153508,0,-0.920497964015052,-0.383285351135722,-0.0759990709055018,0,0.052259374558384,0.0719910279667962,-0.996035292644419,0,27.4821214428528,36.9475330246914,1.85200927333924,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125856000\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.467138990032661,-0.86540714932335,-0.1812501889475,0,-0.863910088514665,-0.490380893925407,0.114830513043787,0,-0.188256761855405,0.102942021367097,-0.976709968746014,0,27.0676322099866,37.1318253052027,0.653993696506666,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125830480\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.183942672645697,-0.711563369205016,0.678117059737729,0,-0.848161196618615,-0.463571215689533,-0.256367513175262,0,0.496777269596991,-0.52799564816841,-0.68879096195946,0,-23.6140335044233,40.7993987668532,7.51879688568199,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125862960\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.364861769159626,-0.891041931293543,0.270037532993132,0,0.690991774155602,-0.45353240699875,-0.562884345430602,0,0.624024271802067,-0.0187812798263943,0.78117923606601,0,-26.6258774379163,38.588378479262,8.16793742758162,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125869920\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.532122282112629,-0.825523064728124,0.188036378951055,0,0.746088418575545,-0.562188027154702,-0.356786686762729,0,0.400247390778701,-0.0495624225379808,0.915065924284819,0,-27.3744398996367,38.5350163451575,6.902461468954,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125865280\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.446935139950889,-0.894507302286969,0.0102839893074999,0,0.875983248722551,-0.439952916617308,-0.197724129284052,0,0.181390106308193,-0.0793613189517498,0.98020376496034,0,-27.9019606689573,38.6945496193369,5.60469461416785,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125881520\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.5406675646503,-0.833617365648527,-0.112963789690979,0,0.839021814302138,-0.544097494825449,-0.000555860376745012,0,-0.0609999635143494,-0.0950796971405138,0.993598968846862,0,-27.6419641277959,38.8575661966203,4.36097765072208,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125696688\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.150316369043588,-0.691277124434889,0.706782057371717,0,0.772309497099311,-0.528420538698419,-0.352575863363785,0,0.61720584336029,0.492856632260411,0.613310211936847,0,23.4449809601311,38.3392942259419,5.2849036370461,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125701328\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.341297822230993,-0.913316665732874,0.222190005900152,0,-0.787623428108624,-0.406891557875956,-0.462697112986676,0,0.512996245106644,-0.0170845579613056,-0.858220834352026,0,26.9217272116612,35.9400189097872,4.80042005026002,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125851360\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.444149191605448,-0.890216436988675,0.101223529453903,0,-0.85251369302479,-0.454661417782185,-0.257882648909561,0,0.275593828665205,0.0282439000328089,-0.960859249476387,0,27.8895391841724,35.5037919764501,3.39031248905482,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125853680\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.387236996149533,-0.920820121873301,-0.046237373153508,0,-0.920497964015052,-0.383285351135722,-0.0759990709055018,0,0.052259374558384,0.0719910279667962,-0.996035292644419,0,28.0197072816314,35.6691937847349,1.78781962542131,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125849040\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.407760983432604,-0.896533476315931,-0.17308589317943,0,-0.893470978416277,-0.430848807188504,0.126802786997145,0,-0.188256783383293,0.102941959924762,-0.976709963153078,0,27.4688838331264,36.3884799778826,0.498308263782114,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125872240\n\t\t\tMatrix: *16 {\n\t\t\t\ta: 0.200525290419247,-0.702344061022863,0.683009913076289,0,-0.844394482826131,-0.477423758496535,-0.243031928267996,0,0.496777164440344,-0.527995735037014,-0.688790961793811,0,-23.3597375381589,39.8156859646858,8.45627353609159,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125879200\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.364861777469363,-0.891041943274719,0.270037482231165,0,0.690991846413133,-0.453532383677801,-0.562884275518276,0,0.624024186931544,-0.0187812745593408,0.781179303989205,0,-27.013671960418,37.6413385227463,8.45494644727821,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125860640\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.481422853291761,-0.861020641468519,0.163937983653291,0,0.779765361368942,-0.506149369069037,-0.368481784767604,0,0.400247490114989,-0.0495624334986858,0.91506591765906,0,-28.1881241464277,37.2726865185971,7.18999280407797,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125867600\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.446935168407541,-0.894507287994929,0.0102839957306443,0,0.875983239723845,-0.439952948090884,-0.197724099119921,0,0.181390079649833,-0.0793613055628818,0.980203770977579,0,-28.5224230630313,37.4527394415117,5.61897135092215,1\n\t\t\t} \n\t\t}\n\t\tPoseNode:  {\n\t\t\tNode: 125883840\n\t\t\tMatrix: *16 {\n\t\t\t\ta: -0.482801791338162,-0.8684419272543,-0.112743678120074,0,0.873602569081369,-0.486588709999451,0.00707029180252432,0,-0.060999963693244,-0.0950796974193541,0.99359897176079,0,-28.1063699787253,38.1415268190634,4.26394683249727,1\n\t\t\t} \n\t\t}\n\t}\n\tMaterial: 136657872, \"Material::character_anim:headM\", \"\" {\n\t\tVersion: 102\n\t\tShadingModel: \"phong\"\n\t\tMultiLayer: 0\n\t\tProperties70:  {\n\t\t\tP: \"AmbientColor\", \"Color\", \"\", \"A\",0.0495800003409386,0.0495800003409386,0.0495800003409386\n\t\t\tP: \"DiffuseColor\", \"Color\", \"\", \"A\",1,1,1\n\t\t\tP: \"Bump\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"TransparencyFactor\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"SpecularColor\", \"Color\", \"\", \"A\",0.5,0.5,0.5\n\t\t\tP: \"ShininessExponent\", \"Number\", \"\", \"A\",1.24573092330083\n\t\t\tP: \"ReflectionFactor\", \"Number\", \"\", \"A\",0.5\n\t\t\tP: \"Emissive\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Ambient\", \"Vector3D\", \"Vector\", \"\",0.0495800003409386,0.0495800003409386,0.0495800003409386\n\t\t\tP: \"Diffuse\", \"Vector3D\", \"Vector\", \"\",1,1,1\n\t\t\tP: \"Specular\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"Shininess\", \"double\", \"Number\", \"\",1.24573092330083\n\t\t\tP: \"Opacity\", \"double\", \"Number\", \"\",1\n\t\t\tP: \"Reflectivity\", \"double\", \"Number\", \"\",0\n\t\t}\n\t}\n\tMaterial: 136655312, \"Material::character_anim:jacketM\", \"\" {\n\t\tVersion: 102\n\t\tShadingModel: \"phong\"\n\t\tMultiLayer: 0\n\t\tProperties70:  {\n\t\t\tP: \"AmbientColor\", \"Color\", \"\", \"A\",0,0,0\n\t\t\tP: \"DiffuseColor\", \"Color\", \"\", \"A\",1,1,1\n\t\t\tP: \"Bump\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"TransparencyFactor\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"SpecularColor\", \"Color\", \"\", \"A\",0.5,0.5,0.5\n\t\t\tP: \"ShininessExponent\", \"Number\", \"\", \"A\",1.24573092330083\n\t\t\tP: \"ReflectionFactor\", \"Number\", \"\", \"A\",0.5\n\t\t\tP: \"Emissive\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Ambient\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Diffuse\", \"Vector3D\", \"Vector\", \"\",1,1,1\n\t\t\tP: \"Specular\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"Shininess\", \"double\", \"Number\", \"\",1.24573092330083\n\t\t\tP: \"Opacity\", \"double\", \"Number\", \"\",1\n\t\t\tP: \"Reflectivity\", \"double\", \"Number\", \"\",0\n\t\t}\n\t}\n\tMaterial: 136658512, \"Material::character_anim:pantsM\", \"\" {\n\t\tVersion: 102\n\t\tShadingModel: \"phong\"\n\t\tMultiLayer: 0\n\t\tProperties70:  {\n\t\t\tP: \"AmbientColor\", \"Color\", \"\", \"A\",0,0,0\n\t\t\tP: \"DiffuseColor\", \"Color\", \"\", \"A\",1,1,1\n\t\t\tP: \"DiffuseFactor\", \"Number\", \"\", \"A\",0.800000011920929\n\t\t\tP: \"Bump\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"TransparencyFactor\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"SpecularColor\", \"Color\", \"\", \"A\",0.5,0.5,0.5\n\t\t\tP: \"ShininessExponent\", \"Number\", \"\", \"A\",1.24573092330083\n\t\t\tP: \"ReflectionFactor\", \"Number\", \"\", \"A\",0.5\n\t\t\tP: \"Emissive\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Ambient\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Diffuse\", \"Vector3D\", \"Vector\", \"\",0.800000011920929,0.800000011920929,0.800000011920929\n\t\t\tP: \"Specular\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"Shininess\", \"double\", \"Number\", \"\",1.24573092330083\n\t\t\tP: \"Opacity\", \"double\", \"Number\", \"\",1\n\t\t\tP: \"Reflectivity\", \"double\", \"Number\", \"\",0\n\t\t}\n\t}\n\tMaterial: 136657232, \"Material::character_anim:upBodyM\", \"\" {\n\t\tVersion: 102\n\t\tShadingModel: \"phong\"\n\t\tMultiLayer: 0\n\t\tProperties70:  {\n\t\t\tP: \"AmbientColor\", \"Color\", \"\", \"A\",0,0,0\n\t\t\tP: \"DiffuseColor\", \"Color\", \"\", \"A\",1,1,1\n\t\t\tP: \"Bump\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"TransparencyFactor\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"SpecularColor\", \"Color\", \"\", \"A\",0.5,0.5,0.5\n\t\t\tP: \"ShininessExponent\", \"Number\", \"\", \"A\",1.19371980378707\n\t\t\tP: \"ReflectionFactor\", \"Number\", \"\", \"A\",0.5\n\t\t\tP: \"Emissive\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Ambient\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Diffuse\", \"Vector3D\", \"Vector\", \"\",1,1,1\n\t\t\tP: \"Specular\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"Shininess\", \"double\", \"Number\", \"\",1.19371980378707\n\t\t\tP: \"Opacity\", \"double\", \"Number\", \"\",1\n\t\t\tP: \"Reflectivity\", \"double\", \"Number\", \"\",0\n\t\t}\n\t}\n\tMaterial: 136651472, \"Material::character_anim:eyeBallM\", \"\" {\n\t\tVersion: 102\n\t\tShadingModel: \"phong\"\n\t\tMultiLayer: 0\n\t\tProperties70:  {\n\t\t\tP: \"AmbientColor\", \"Color\", \"\", \"A\",0,0,0\n\t\t\tP: \"DiffuseColor\", \"Color\", \"\", \"A\",1,1,1\n\t\t\tP: \"Bump\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"TransparencyFactor\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"SpecularColor\", \"Color\", \"\", \"A\",0.5,0.5,0.5\n\t\t\tP: \"ShininessExponent\", \"Number\", \"\", \"A\",65.9860000610352\n\t\t\tP: \"ReflectionFactor\", \"Number\", \"\", \"A\",0.5\n\t\t\tP: \"Emissive\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Ambient\", \"Vector3D\", \"Vector\", \"\",0,0,0\n\t\t\tP: \"Diffuse\", \"Vector3D\", \"Vector\", \"\",1,1,1\n\t\t\tP: \"Specular\", \"Vector3D\", \"Vector\", \"\",0.5,0.5,0.5\n\t\t\tP: \"Shininess\", \"double\", \"Number\", \"\",65.9860000610352\n\t\t\tP: \"Opacity\", \"double\", \"Number\", \"\",1\n\t\t\tP: \"Reflectivity\", \"double\", \"Number\", \"\",0\n\t\t}\n\t}\n\tDeformer: 125204720, \"Deformer::Skin_him\", \"Skin\" {\n\t\tVersion: 101\n\t\tLink_DeformAcuracy: 50\n\t}\n\tDeformer: 126006096, \"SubDeformer::Cluster_Root\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *46 {\n\t\t\ta: 6514,6515,6516,6517,6518,6519,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6544,6558,6575,6660,6661,6664,6712,6818,6819,6821,6891,6892,6893,10951,10954,10973,10975,10976,10980,10983,10986,10998,10999,11000,11001,11020\n\t\t} \n\t\tWeights: *46 {\n\t\t\ta: 0.148829370737076,0.17685829102993,0.113096483051777,0.12204097956419,0.0812638849020004,0.00829269830137491,0.0237471498548985,0.0290536563843489,0.0317849144339561,0.0604783557355404,0.0725867226719856,0.0152020892128348,0.028587194159627,0.0811868533492088,0.0760499387979507,0.159019902348518,0.0269343629479408,0.0198612324893475,0.082656018435955,0.0308674443513155,0.134406641125679,0.0715651735663414,0.0573297701776028,0.0623637847602367,0.0700489580631256,0.0712813660502434,0.0706327632069588,0.0615008324384689,0.0691068470478058,0.0702681243419647,0.0494278706610203,0.0572692602872849,0.048890370875597,0.0335745625197887,0.034069836139679,0.0332106426358223,0.0273313820362091,0.0328722968697548,0.033588569611311,0.0339282527565956,0.0229143295437098,0.0325650237500668,0.0331987328827381,0.0264733470976353,0.0256072301417589,0.0269183497875929\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 6.12323399573116e-017,0.999999999999114,-1.66752672951169e-010,0,6.53552425437128e-041,1.66752672951027e-010,0.999999999999965,0,0.999999999999079,-6.12323399573131e-017,1.02106563589456e-026,0,-2.23054871114961,-0.0375633907420858,-37.4609861130789,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 6.1232339957424e-017,0,1.00000000000092,0,1.00000000000089,1.66752672951323e-010,-6.12323399574222e-017,0,-1.66752672951181e-010,1.00000000000004,1.02106563589465e-026,0,0.0375633844953997,37.4609861130865,2.23054871115166,1\n\t\t} \n\t}\n\tDeformer: 137709552, \"SubDeformer::Cluster_Pelvis\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *137 {\n\t\t\ta: 6514,6515,6516,6517,6518,6519,6521,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6544,6545,6549,6558,6568,6569,6574,6575,6576,6577,6578,6579,6590,6591,6593,6594,6601,6602,6603,6644,6645,6646,6647,6648,6652,6653,6654,6655,6659,6660,6661,6662,6664,6665,6666,6667,6673,6674,6680,6681,6688,6691,6696,6697,6698,6699,6700,6701,6702,6705,6712,6713,6714,6724,6725,6730,6731,6732,6733,6734,6735,6738,6748,6749,6751,6752,6760,6761,6762,6805,6806,6807,6811,6812,6813,6817,6818,6819,6820,6821,6822,6823,6824,6831,6832,6838,6839,6847,6856,6860,6890,6891,6892,6893,6894,6906,6909,6910,10951,10954,10973,10975,10976,10980,10983,10986,10998,10999,11000,11001,11020\n\t\t} \n\t\tWeights: *137 {\n\t\t\ta: 0.799383759498596,0.75867486000061,0.854301154613495,0.847075760364532,0.899999976158142,0.0894757434725761,0.0345684066414833,0.0351840741932392,0.949999988079071,0.949999988079071,0.949999988079071,0.910582900047302,0.899999976158142,0.949999988079071,0.0527760647237301,0.899999976158142,0.899999976158142,0.783881008625031,0.949999988079071,0.949999988079071,0.899999976158142,0.949999988079071,0.619111835956573,0.591075420379639,0.449584573507309,0.185553684830666,0.805147349834442,0.235315650701523,0.0519597008824348,0.899999976158142,0.13294880092144,0.117739856243134,0.603049695491791,0.899999976158142,0.283097892999649,0.887273788452148,0.624301850795746,0.085120789706707,0.783373355865479,0.630953192710876,0.384793758392334,0.0488782748579979,0.523425757884979,0.474541455507278,0.0999121963977814,0.0011430912418291,0.206513106822968,0.214638784527779,0.176684230566025,0.113295316696167,0.159522891044617,0.114811077713966,0.455518305301666,0.572888076305389,0.180876806378365,0.899999976158142,0.899999976158142,0.188521772623062,0.899999976158142,0.289416015148163,0.471739292144775,0.0972785204648972,0.136938780546188,0.472441554069519,0.562164723873138,0.13294880092144,0.751014232635498,0.104111813008785,0.755477726459503,0.731383979320526,0.46454194188118,0.158830061554909,0.673907995223999,0.224742695689201,0.0140152266249061,0.0582037307322025,0.899999976158142,0.0200727786868811,0.0173638090491295,0.193586349487305,0.104791283607483,0.609969437122345,0.899999976158142,0.411259800195694,0.276800006628037,0.884683132171631,0.630967020988464,0.115955218672752,0.81635719537735,0.671586453914642,0.355839669704437,0.0490408353507519,0.542843878269196,0.470961928367615,0.103352710604668,0.159476667642593,0.1330576390028,0.0624692253768444,0.19200786948204,0.3819380402565,0.541414737701416,0.155516654253006,0.899999976158142,0.899999976158142,0.160386845469475,0.899999976158142,0.167465269565582,0.487605810165405,0.0952591747045517,0.104544185101986,0.474321901798248,0.575775980949402,0.167334824800491,\n0.760569870471954,0.0504525750875473,0.0977368652820587,0.1761714220047,0.899999976158142,0.899999976158142,0.899999976158142,0.162171944975853,0.10718097537756,0.499940901994705,0.115701332688332,0.0335655994713306,0.0331794954836369,0.033482737839222,0.0363343097269535,0.0336760170757771,0.033488791435957,0.0334953814744949,0.0385428369045258,0.0340126343071461,0.0335763432085514,0.0367633253335953,0.0371963866055012,0.036540824919939\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -1.66752994575547e-010,2.75770739236699e-006,0.999999999991485,0,0.999999999999055,-3.9744622047109e-017,1.66752994575661e-010,0,4.99600587891201e-016,0.99999999999236,-2.75770739236455e-006,0,-37.4609888630342,-1.27468122076786,-0.0375585643593996,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -1.66752994575861e-010,1.00000000000094,4.99600587892144e-016,0,2.75770739238814e-006,-3.974462204741e-017,1.00000000000003,0,1.00000000000091,1.66752994577234e-010,-2.75770739239057e-006,0,0.0375620733105271,37.4609888630758,1.27468111719239,1\n\t\t} \n\t}\n\tDeformer: 137711792, \"SubDeformer::Cluster_Spine\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *2398 {\n\t\t\ta: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5301,5302,5308,5315,5316,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5336,5337,5339,5340,5341,5342,5343,5344,5345,5346,5347,5353,5354,5355,5356,5357,5377,5378,5385,5392,5393,5442,5445,5446,5461,5468,5476,5481,5482,5530,5531,5739,5740,5741,5747,5748,5749,5750,5751,5752,5757,5758,5759,5760,\n5761,5762,5763,5764,5765,5766,5767,5769,5770,5772,5773,5774,5775,5776,5777,5778,5779,5780,5786,5787,5788,5808,5809,5816,5823,5824,5872,5875,5876,5891,5892,5910,5911,5959,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,\n6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906,6907,6908,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7306,7307,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,\n7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7614,7615,7616,7617,7618,7619,7620,7621,7622,7624,7625,7630,7632,7633,7668,7669,7670,7671,7672,7674,7681,7692,7694,7695,7696,7709,7710,7716,7717,7718,7719,7720,7721,7722,7723,7724,7798,7799,7800,7806,7807,7808,7809,7810,7811,7812,7813,7848,7850,7851,7853,7854,7855,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,8000,9108,9109,9110,9111,9112,9113,9114,9115,9116,9118,9119,9126,9127,9162,9163,9164,9165,9166,9168,9175,9186,9188,9189,9190,9203,9204,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9296,9297,9298,9300,9301,9304,9305,9306,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9329,9330,9331,9350,9351,9352,9353,9359,9361,9363,9364,9365,9366,9367,9368,9374,9375,9376,9377,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,\n9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9881,9882,9883,9884,9885,9915,9916,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9984,9985,9986,9987,9988,9989,9990,9994,9995,9996,9997,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10032,10033,10034,10035,10036,10037,10038,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,\n10181,10182,10183,10184,10185,10188,10189,10194,10216,10223,10224,10227,10228,10229,10230,10231,10232,10241,10275,10276,10277,10285,10448,10449,10456,10585,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10628,10629,10634,10656,10661,10664,10665,10666,10667,10668,10669,10670,10677,10709,10710,10711,10712,10720,10876,10877,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,\n11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191,11192\n\t\t} \n\t\tWeights: *2398 {\n\t\t\ta: 0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.485887348651886,0.485664427280426,0.486068248748779,0.486428737640381,0.485347807407379,0.48554915189743,0.485024094581604,0.485015153884888,0.484783440828323,0.484618633985519,0.484691768884659,0.48446998000145,0.484771847724915,0.484603881835938,0.484998911619186,0.484975725412369,0.485310763120651,0.485482156276703,0.48562553524971,0.485992193222046,0.485862076282501,0.486377358436584,0.485958486795425,0.486538648605347,0.488901674747467,0.489226847887039,0.488413363695145,0.487895905971527,0.487497180700302,0.487329483032227,0.487433940172195,0.487773805856705,0.488253176212311,0.488746970891953,0.48913100361824,0.489307641983032,0.488778561353683,0.488978236913681,0.488482058048248,0.488169342279434,0.487927585840225,0.487823575735092,0.487883865833282,0.488089084625244,0.488382279872894,0.488686174154282,0.488922417163849,0.489029705524445,0.485335648059845,0.488437861204147,0.244441643357277,0.247425943613052,0.246487095952034,0.241566851735115,0.250035226345062,0.250796467065811,0.25156769156456,0.253332167863846,0.251615196466446,0.253420650959015,0.250169515609741,0.25105145573616,0.247620776295662,0.246866270899773,0.244649648666382,0.241981253027916,0.242047905921936,0.237693607807159,0.240509778261185,0.235144719481468,0.240449100732803,0.235020831227303,0.241887286305428,0.237368017435074,0.200827375054359,0.195532456040382,0.205721631646156,0.208878561854362,0.209438517689705,0.207261577248573,0.202953681349754,0.197683557868004,0.192855000495911,0.189739361405373,0.189154654741287,0.191265761852264,0.197463110089302,0.194227814674377,0.200458317995071,0.202400833368301,0.202764689922333,0.201455339789391,0.19883306324482,0.195606157183647,0.192636698484421,0.190710946917534,\n0.190338432788849,0.191622346639633,0.24601249396801,0.196497097611427,0.373516350984573,0.376757621765137,0.369537591934204,0.365251928567886,0.382805824279785,0.382776975631714,0.386137038469315,0.388760268688202,0.380438297986984,0.387044966220856,0.392412126064301,0.379495084285736,0.370759338140488,0.358247369527817,0.354949980974197,0.368560016155243,0.36077743768692,0.390685200691223,0.387448787689209,0.386936098337173,0.380599111318588,0.38983428478241,0.39421871304512,0.377999693155289,0.370091617107391,0.366377264261246,0.357207298278809,0.352117955684662,0.341517567634583,0.388354241847992,0.392351239919662,0.364930152893066,0.375461101531982,0.353334933519363,0.338869631290436,0.318140685558319,0.374630272388458,0.253818362951279,0.330474436283112,0.336101323366165,0.251405566930771,0.258881658315659,0.329255163669586,0.258955836296082,0.326492011547089,0.25557616353035,0.322989732027054,0.23970103263855,0.309830665588379,0.213416919112206,0.286303400993347,0.360161691904068,0.354063391685486,0.364664852619171,0.351037055253983,0.347294807434082,0.343819558620453,0.332145482301712,0.309136658906937,0.283766984939575,0.182805374264717,0.322982370853424,0.316466480493546,0.293134987354279,0.276267886161804,0.274140179157257,0.295364439487457,0.303073704242706,0.354633033275604,0.364007532596588,0.343757838010788,0.334839880466461,0.348560273647308,0.33023327589035,0.317398726940155,0.361911833286285,0.34889817237854,0.201658248901367,0.193551778793335,0.34731462597847,0.353964239358902,0.359329700469971,0.341922789812088,0.344691544771194,0.341207295656204,0.337673217058182,0.325471311807632,0.302787721157074,0.373936861753464,0.356122374534607,0.357345730066299,0.375500559806824,0.368380576372147,0.346033930778503,0.37697446346283,0.37307596206665,0.353593707084656,0.331589162349701,0.358462393283844,0.329241544008255,0.348726212978363,0.314913302659988,0.291479706764221,0.335428446531296,0.26182433962822,0.353498190641403,0.244015663862228,0.247688680887222,0.245483666658401,0.242484733462334,0.2377700060606,\n0.23008830845356,0.237610965967178,0.241329908370972,0.249271839857101,0.252844214439392,0.24934010207653,0.252829015254974,0.246366634964943,0.249618053436279,0.232329145073891,0.234494656324387,0.210118144750595,0.209856301546097,0.331883281469345,0.244902163743973,0.237399041652679,0.247255980968475,0.24386802315712,0.199680224061012,0.193274289369583,0.251673072576523,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,0.228242665529251,0.433049440383911,0.063678465783596,0.550755441188812,0.905955851078033,0.277041643857956,0.420005768537521,0.408874332904816,0.334239274263382,0.426755398511887,0.241860181093216,0.899999976158142,0.500172555446625,0.50339287519455,0.420577973127365,0.428421944379807,0.167543798685074,0.0129226706922054,0.5,0.36642724275589,0.25941988825798,0.245549902319908,0.302309572696686,0.202298223972321,0.253012418746948,0.389088153839111,0.188150689005852,0.940474212169647,0.944787383079529,0.545298874378204,0.404611170291901,0.5118807554245,0.34206211566925,0.193565756082535,0.0798677578568459,0.359307199716568,0.220871970057487,0.201562315225601,0.553697109222412,0.584769606590271,0.909379601478577,0.911072134971619,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.522571086883545,0.397793114185333,0.326984196901321,0.244352966547012,0.427823901176453,0.458259165287018,0.461357414722443,0.394107729196548,0.899999976158142,0.27571764588356,0.420828282833099,0.409706592559814,0.334164440631866,0.426904082298279,0.241386741399765,0.500177025794983,0.503991425037384,0.42418310046196,0.334534138441086,0.899999976158142,0.194053664803505,0.169082060456276,0.5,0.366859018802643,0.258727252483368,0.244743958115578,0.341296017169952,0.212976187467575,0.27468204498291,0.370680093765259,0.143536567687988,0.54621148109436,0.405595302581787,0.512151777744293,0.236699178814888,0.130981206893921,0.079025998711586,0.359673470258713,0.202563613653183,0.173596724867821,0.553828299045563,0.586015403270721,0.303222894668579,\n0.908758401870728,0.899999976158142,0.899999976158142,0.899999976158142,0.416867136955261,0.435121119022369,0.502011477947235,0.507540047168732,0.517787754535675,0.920168399810791,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.944217801094055,0.939911723136902,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0499768182635307,0.0622557625174522,0.0314086191356182,0.0294202249497175,0.0173703264445066,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0223812647163868,0.0184281393885612,0.0165518838912249,0.0271356329321861,0.0262770988047123,0.0286044720560312,0.899999976158142,0.0176951847970486,0.0220540463924408,0.0550919994711876,0.0200411379337311,0.0253521800041199,0.016105180606246,0.0171583909541368,0.0850373953580856,0.0758332088589668,0.0980560183525085,0.372282832860947,0.470829576253891,0.058711938560009,0.202237918972969,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0271500088274479,0.899999976158142,0.899999976158142,0.899999976158142,0.474399924278259,0.484295248985291,0.473359733819962,0.486365467309952,0.470664262771606,0.374861598014832,0.366387665271759,0.437676966190338,0.425652414560318,0.46727055311203,0.195437729358673,0.221567079424858,0.119305938482285,0.0407545492053032,0.196933567523956,0.0379016511142254,0.175045162439346,0.450425118207932,0.466519892215729,0.479820847511292,0.494895756244659,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.474442213773727,0.317375123500824,0.335670530796051,0.0426778271794319,0.0611641183495522,0.0800886005163193,0.386461079120636,0.899999976158142,0.402333498001099,0.899999976158142,0.899999976158142,0.483016639947891,0.492276847362518,0.482892215251923,0.210124060511589,0.273503005504608,0.491192519664764,0.210949346423149,\n0.480654180049896,0.460385143756866,0.489091366529465,0.485488176345825,0.409366816282272,0.485847264528275,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.490868449211121,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.406117528676987,0.101345561444759,0.487271994352341,0.498311102390289,0.479613840579987,0.208456739783287,0.422964990139008,0.287179529666901,0.166849553585052,0.111482918262482,0.485398918390274,0.102656565606594,0.114537015557289,0.118492007255554,0.132055476307869,0.0896488949656487,0.0687534958124161,0.064977765083313,0.0578959956765175,0.497809112071991,0.200785055756569,0.134202092885971,0.121802054345608,0.105732023715973,0.0741553604602814,0.055485475808382,0.0617626309394836,0.899999976158142,0.899999976158142,0.419221252202988,0.0352571569383144,0.0283600147813559,0.400317370891571,0.49568247795105,0.0277331583201885,0.284585326910019,0.250304728746414,0.425329893827438,0.47427025437355,0.484636008739471,0.462838232517242,0.478616893291473,0.474339812994003,0.44830396771431,0.305842816829681,0.490415573120117,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.216201022267342,0.409849554300308,0.428201466798782,0.299757570028305,0.493067115545273,0.477148860692978,0.899999976158142,0.899999976158142,0.0576332211494446,0.179240301251411,0.4087735414505,0.243735611438751,0.479312092065811,0.899999976158142,0.899999976158142,0.899999976158142,0.0528160966932774,0.0476635284721851,0.0912690982222557,0.38397690653801,0.0972289070487022,0.200551301240921,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0280716568231583,0.899999976158142,0.899999976158142,0.899999976158142,0.452894061803818,0.47402435541153,0.483769923448563,\n0.47241935133934,0.486981511116028,0.47670915722847,0.470452100038528,0.374543905258179,0.339963465929031,0.443937122821808,0.425873547792435,0.467277556657791,0.203481242060661,0.226448878645897,0.115699142217636,0.0413811802864075,0.22074756026268,0.199416875839233,0.0382523499429226,0.171607092022896,0.490018874406815,0.486813902854919,0.433707058429718,0.483929514884949,0.479347556829453,0.494737774133682,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.47393861413002,0.335015952587128,0.0346741303801537,0.0523174330592155,0.280055373907089,0.402526408433914,0.899999976158142,0.403372168540955,0.899999976158142,0.899999976158142,0.480757892131805,0.486051797866821,0.48539599776268,0.482352942228317,0.202147349715233,0.275057405233383,0.48567208647728,0.0835829302668571,0.0729673504829407,0.209692642092705,0.480644881725311,0.460294842720032,0.485169321298599,0.409366607666016,0.476667702198029,0.497557014226913,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.487591832876205,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.363091051578522,0.486785143613815,0.492457121610641,0.479441195726395,0.480146616697311,0.483121246099472,0.484910160303116,0.286455065011978,0.164788633584976,0.115249574184418,0.104643501341343,0.114593736827374,0.117495730519295,0.129164040088654,0.0909549221396446,0.0774164944887161,0.0694414302706718,0.060987826436758,0.498031169176102,0.132643029093742,0.0914852172136307,0.0800103396177292,0.055613748729229,0.0585689470171928,0.899999976158142,0.899999976158142,0.430365353822708,0.0360974445939064,0.0292764361947775,0.413414359092712,0.0287411995232105,0.331874817609787,0.242936596274376,0.426501959562302,0.474240958690643,0.484399497509003,0.462895035743713,0.491324007511139,0.481851667165756,0.472675174474716,0.462384283542633,0.304057329893112,\n0.487220883369446,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.209291517734528,0.393088698387146,0.427878260612488,0.4830022752285,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.303087472915649,0.0536928921937943,0.325082153081894,0.202775940299034,0.476244419813156,0.499079555273056,0.496010959148407,0.497787863016129,0.0508093200623989,0.421548753976822,0.0662107318639755,0.0445234589278698,0.077688030898571,0.0827849209308624,0.0493801422417164,0.079817570745945,0.0710747241973877,0.494894951581955,0.47863557934761,0.485665053129196,0.0818784013390541,0.485051035881042,0.419161200523376,0.492303609848022,0.492112398147583,0.0693842321634293,0.0480330437421799,0.422746449708939,0.0661759674549103,0.0414951294660568,0.077379547059536,0.0510545521974564,0.077643096446991,0.478472769260406,0.100985370576382,0.212159022688866,0.0847534462809563,0.0664583668112755,0.469830930233002,0.466865479946136,0.468666285276413,0.467166066169739,0.475262671709061,0.513434112071991,0.45416596531868,0.0456559956073761,0.0381095334887505,0.04617028683424,0.458466410636902,0.492889791727066,0.466491162776947,0.467004597187042,0.465437352657318,0.468502849340439,0.497051328420639,0.48866793513298,0.476463884115219,0.28717103600502,0.336231589317322,0.487657696008682,0.277788311243057,0.282144725322723,0.256011962890625,0.180214300751686,0.287221610546112,0.264949142932892,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.128804847598076,0.124300897121429,0.119410678744316,0.121989578008652,0.126729294657707,0.12162871658802,0.0948135182261467,0.13428783416748,0.0900763049721718,0.0886399820446968,0.0841514021158218,0.081154964864254,0.0858331248164177,0.0372096374630928,0.0309558864682913,0.0244138482958078,0.0176111347973347,0.014983844012022,0.129338786005974,0.0909664332866669,0.0378601811826229,0.0245837960392237,0.0324109755456448,\n0.0193320214748383,0.0143751567229629,0.0130134420469403,0.0144294565543532,0.0651924386620522,0.0683740973472595,0.0874151587486267,0.0967726111412048,0.118158273398876,0.15954327583313,0.133861139416695,0.120879530906677,0.0863500535488129,0.0355506911873817,0.0342619754374027,0.0312653295695782,0.0287093352526426,0.021574629470706,0.0168448891490698,0.0118433842435479,0.0115172686055303,0.0134986257180572,0.0120220622047782,0.0131854433566332,0.0606853812932968,0.0832474008202553,0.093217745423317,0.11446488648653,0.129967495799065,0.0255544222891331,0.0210145488381386,0.0194068942219019,0.0119495382532477,0.00901409145444632,0.00822153221815825,0.0083137908950448,0.00901816599071026,0.0524943694472313,0.0553345903754234,0.068617656826973,0.076964758336544,0.192974328994751,0.188027605414391,0.188158750534058,0.185076355934143,0.14940433204174,0.144968196749687,0.182830169796944,0.154406279325485,0.174253150820732,0.193655014038086,0.185767650604248,0.246047541499138,0.24127422273159,0.241126343607903,0.237629055976868,0.235797300934792,0.24693551659584,0.239405423402786,0.038468461483717,0.188023090362549,0.128091588616371,0.133428320288658,0.138287797570229,0.178264051675797,0.23220020532608,0.241286396980286,0.227848380804062,0.151058748364449,0.113301075994968,0.11036491394043,0.125564470887184,0.0676738694310188,0.0801245048642159,0.167598038911819,0.128094255924225,0.232770204544067,0.237745985388756,0.184255436062813,0.179258301854134,0.229751572012901,0.23304195702076,0.17586824297905,0.238762646913528,0.182600617408752,0.13694255053997,0.233596786856651,0.199792727828026,0.225131019949913,0.228194355964661,0.172236859798431,0.220965817570686,0.190604701638222,0.183457717299461,0.232855081558228,0.0307963136583567,0.146925538778305,0.202488541603088,0.0871826484799385,0.049006026238203,0.132937029004097,0.131644994020462,0.130768299102783,0.122386641800404,0.0836272537708282,0.0803681313991547,0.00396483391523361,0.00633750250563025,0.00248087686486542,0.0016853892011568,0.00199530832469463,0.00109372811857611,\n0.00142326357308775,0.0220866464078426,0.0141881955787539,0.00774034112691879,0.00421709381043911,0.00252895569428802,0.00525286328047514,0.0047554038465023,0.00263063330203295,0.0451593361794949,0.0221035573631525,0.00112951546907425,0.00106509344186634,0.00172538100741804,0.00144575606100261,0.00125635962467641,0.00322978175245225,0.00199160212650895,0.00201613828539848,0.00330872484482825,0.00193723302800208,0.00445955852046609,0.00245628482662141,0.00561189698055387,0.00297321169637144,0.00795925036072731,0.0075264573097229,0.00421811267733574,0.00596139440312982,0.00241706985980272,0.00402618013322353,0.00628479011356831,0.0041719451546669,0.00203253165818751,0.00271617225371301,0.00141770753543824,0.00252853706479073,0.00138250086456537,0.00662316475063562,0.00596707733348012,0.00925629865378141,0.0103338537737727,0.0120895095169544,0.0127093885093927,0.00898659415543079,0.00683298194780946,0.00487540382891893,0.00407768040895462,0.0348199345171452,0.0649327710270882,0.066335991024971,0.0358296371996403,0.161739841103554,0.0818046554923058,0.0807016789913177,0.15451543033123,0.0940489768981934,0.0603382438421249,0.0702256262302399,0.0352267138659954,0.0277259387075901,0.0261700768023729,0.255933821201324,0.346736639738083,0.336984097957611,0.143246442079544,0.0974620506167412,0.043335136026144,0.031309686601162,0.432955324649811,0.483261168003082,0.478565245866776,0.422408699989319,0.304098427295685,0.207750976085663,0.146186009049416,0.0112169776111841,0.00671346625313163,0.00299824820831418,0.00180409394670278,0.00173606141470373,0.0016881157644093,0.00215591676533222,0.00260239094495773,0.00358258979395032,0.00706381490454078,0.00335836806334555,0.00202733650803566,0.00176701706368476,0.00121282087638974,0.00118987401947379,0.00561260897666216,0.00241978513076901,0.00387012725695968,0.0596045516431332,0.0244100801646709,0.244619458913803,0.029373075813055,0.43449404835701,0.486235320568085,0.48059156537056,0.427583009004593,0.307614177465439,0.20915924012661,0.148607149720192,0.0463326685130596,0.0486371889710426,\n0.00634428393095732,0.00365646346472204,0.0118476608768106,0.0321184881031513,0.0478746853768826,0.0106965135782957,0.0764963403344154,0.148223981261253,0.331562787294388,0.467333436012268,0.469035536050797,0.00947490520775318,0.0101797981187701,0.0101308375597,0.014061757363379,0.0202330444008112,0.0269427467137575,0.0267547108232975,0.0241191368550062,0.0281163435429335,0.0306482631713152,0.0295060761272907,0.0109167220070958,0.0117025338113308,0.0124574238434434,0.050898727029562,0.0503738038241863,0.0578904375433922,0.0922311246395111,0.141333788633347,0.22456730902195,0.227567330002785,0.0177560783922672,0.0190714467316866,0.0195607356727123,0.0255508925765753,0.052836962044239,0.0918030440807343,0.15401166677475,0.169818848371506,0.344298928976059,0.156067594885826,0.424768060445786,0.465730160474777,0.319286823272705,0.291175782680511,0.0849423706531525,0.0330376215279102,0.0144369145855308,0.0126413479447365,0.00879246182739735,0.0079611511901021,0.0291281025856733,0.0667730271816254,0.104921028017998,0.0713702738285065,0.112708725035191,0.166204929351807,0.13128425180912,0.208592295646667,0.249056994915009,0.319560289382935,0.350937873125076,0.167568385601044,0.0866376608610153,0.0311222057789564,0.0183327905833721,0.0126609988510609,0.00722455093637109,0.00863407645374537,0.00679195951670408,0.00553479325026274,0.0042190826497972,0.00392617005854845,0.00431412877514958,0.00698245875537395,0.0130870034918189,0.0372610092163086,0.142217367887497,0.333639472723007,0.424810439348221,0.00361940916627645,0.027364544570446,0.00949712097644806,0.0702332332730293,0.0720498561859131,0.0657416209578514,0.0468012802302837,0.0353254340589046,0.103264316916466,0.10613390058279,0.0849223732948303,0.0626742914319038,0.0477514900267124,0.0023828495759517,0.00336645683273673,0.00471905944868922,0.00498715182766318,0.0053791287355125,0.00838648993521929,0.0250504445284605,0.0453383177518845,0.0595372840762138,0.0807408019900322,0.00324741145595908,0.00398993026465178,0.0115005858242512,0.0220406595617533,0.0313174091279507,\n0.0482421852648258,0.00227482104673982,0.00196545757353306,0.00375738996081054,0.083605483174324,0.0822170674800873,0.0831636190414429,0.0630473122000694,0.0481768995523453,0.3446224629879,0.425492912530899,0.131611213088036,0.113337218761444,0.102451033890247,0.340103626251221,0.338898211717606,0.0360977724194527,0.0380000621080399,0.471558958292007,0.465493679046631,0.418613165616989,0.329782277345657,0.474898964166641,0.4684838950634,0.419469267129898,0.332224696874619,0.478455871343613,0.470837116241455,0.42595586180687,0.15671406686306,0.26562574505806,0.26365339756012,0.257146269083023,0.0138539336621761,0.114299923181534,0.188113182783127,0.0199986882507801,0.0217276699841022,0.0225842781364918,0.0265044532716274,0.0309454146772623,0.0353365615010262,0.0395141430199146,0.0400376841425896,0.0374672003090382,0.120118767023087,0.129973024129868,0.0787881836295128,0.0643641352653503,0.0733145847916603,0.0299731642007828,0.0131016932427883,0.00807503890246153,0.00641247676685452,0.00469847675412893,0.00116353866178542,0.00109649647492915,0.0015472712693736,0.0015398912364617,0.00181988475378603,0.00185549294110388,0.00183399405796081,0.00189391942694783,0.00124193157535046,0.0014578535920009,0.0014706157380715,0.00103451905306429,0.00117230892647058,0.00116537837311625,0.00127800682093948,0.00128758465871215,0.00169459613971412,0.00166226760484278,0.00101601879578084,0.00132098130416125,0.00105506856925786,0.00109436130151153,0.00142546708229929,0.00165331270545721,0.00175113021396101,0.00116391049232334,0.00149487575981766,0.00275484379380941,0.00286094797775149,0.00283250957727432,0.00315297488123178,0.00307540665380657,0.00171014678198844,0.00189925020094961,0.00185286905616522,0.00317150028422475,0.00369846285320818,0.00408397102728486,0.00546123459935188,0.0460431762039661,0.0475341975688934,0.038765087723732,0.00189711654093117,0.00187039421871305,0.00190330250188708,0.00195048784371465,0.00183602317702025,0.0025363105814904,0.00109787075780332,0.00116721540689468,0.00113554787822068,0.00149305525701493,0.00161524920258671,\n0.057351540774107,0.0321330279111862,0.0826931446790695,0.0506877452135086,0.0968986079096794,0.0525840595364571,0.0556077249348164,0.0939208716154099,0.0881008803844452,0.0490996241569519,0.0903309360146523,0.00541983218863606,0.00260564009658992,0.00511829322203994,0.00349382869899273,0.00537390913814306,0.00596560025587678,0.00700216926634312,0.0063464199192822,0.00247354246675968,0.00279559753835201,0.00530987698584795,0.00257820077240467,0.00249433261342347,0.0997933968901634,0.0544734485447407,0.0484018176794052,0.00362300151027739,0.00399520713835955,0.0385792851448059,0.00472923275083303,0.00707319425418973,0.022978238761425,0.0392886884510517,0.0639106407761574,0.0347827896475792,0.00521091790869832,0.00661726342514157,0.0041303988546133,0.00309630646370351,0.00707019120454788,0.00562763307243586,0.00834548845887184,0.00777499936521053,0.0427671931684017,0.0307781342417002,0.0477634370326996,0.0568116456270218,0.0543619580566883,0.0481494814157486,0.0539024993777275,0.0498538091778755,0.0479667596518993,0.0577677562832832,0.00659023737534881,0.00663879793137312,0.00526854488998652,0.00690277572721243,0.0539496801793575,0.00554723339155316,0.00560073181986809,0.0486485287547112,0.00913042854517698,0.00652239751070738,0.0011291156988591,0.00109412742312998,0.00103278865572065,0.00147875573020428,0.00147705664858222,0.0017723172204569,0.00181253568734974,0.00182461738586426,0.00188483169768006,0.00118751765694469,0.00142098765354604,0.00146216049324721,0.00114015850704163,0.00115575676318258,0.00132532499264926,0.00134176283609122,0.0017199928406626,0.0016922679496929,0.00105575239285827,0.00134141428861767,0.00106850953307003,0.0010271678911522,0.00135946099180728,0.00160738476552069,0.00174183479975909,0.00121512752957642,0.00152292428538203,0.00197672424837947,0.00273400289006531,0.00280472636222839,0.0028488168027252,0.00316720129922032,0.00305494153872132,0.0017370292916894,0.00188972463365644,0.00180811155587435,0.00311806984245777,0.0040378887206316,0.00432216608896852,0.00690364046022296,0.00387458363547921,\n0.00535369943827391,0.0023983852006495,0.00160886731464416,0.00332784000784159,0.00185783591587096,0.00101551448460668,0.00134352233726531,0.0238124150782824,0.0478002242743969,0.0526870340108871,0.0381637215614319,0.0153794707730412,0.00393905816599727,0.00180854869540781,0.00274698971770704,0.0018029633210972,0.00197869702242315,0.00171526428312063,0.00514251785352826,0.0047717816196382,0.00266478047706187,0.489171802997589,0.488262295722961,0.0431586429476738,0.0143493311479688,0.00275305891409516,0.00104679516516626,0.00102104444522411,0.00112195441033691,0.00115225685294718,0.00160331535153091,0.00175481359474361,0.00187249213922769,0.00149584782775491,0.00132315745577216,0.00103499344550073,0.00103408901486546,0.0608331300318241,0.0343646034598351,0.0864746570587158,0.0532681569457054,0.0959476977586746,0.0519197396934032,0.0571485608816147,0.0961936935782433,0.0861227437853813,0.0494562238454819,0.0908803790807724,0.00510046212002635,0.00244628125801682,0.00376808317378163,0.00580758368596435,0.00642081862315536,0.00778972543776035,0.00451423460617661,0.00583442393690348,0.0062086065299809,0.00240529561415315,0.00264307809993625,0.00508069852367044,0.00245545478537679,0.0968750342726707,0.0523639731109142,0.0470106676220894,0.00390005228109658,0.00304794777184725,0.00187453755643219,0.00189462560229003,0.00312620983459055,0.00182634731754661,0.00426232814788818,0.00234097195789218,0.00541879655793309,0.00286390422843397,0.0077361180447042,0.00739045953378081,0.00410307198762894,0.00611513201147318,0.00248692650347948,0.00408196216449142,0.00639339722692966,0.00434895092621446,0.00212754565291107,0.00288760499097407,0.00151408067904413,0.00271663744933903,0.00149647297803313,0.006270463578403,0.00564201502129436,0.00783688575029373,0.0102068949490786,0.0115534784272313,0.011789258569479,0.0125153223052621,0.00919362623244524,0.00709264166653156,0.00514057138934731,0.00437394948676229,0.0210229996591806,0.0211294535547495,0.0236893240362406,0.0280384570360184,0.0627929121255875,0.0637256726622581,0.148144006729126,\n0.073219008743763,0.159480541944504,0.0803302451968193,0.0883469432592392,0.175800532102585,0.0797864273190498,0.153079614043236,0.0946589261293411,0.0606883279979229,0.0712572634220123,0.0368200019001961,0.029294203966856,0.0278862025588751,0.252608448266983,0.345064520835876,0.335890293121338,0.144410610198975,0.0991004928946495,0.0455374196171761,0.0332835167646408,0.431980043649673,0.483294159173965,0.47867688536644,0.422485083341599,0.30485126376152,0.209794074296951,0.148937806487083,0.0112794619053602,0.00676137395203114,0.0815660059452057,0.171418637037277,0.00282467366196215,0.00169222545810044,0.00163030030671507,0.00158798391930759,0.0020512524060905,0.00250268145464361,0.00348014035262167,0.0069389408454299,0.0034073784481734,0.00208802055567503,0.00185293727554381,0.00129873096011579,0.0012914533726871,0.00529764918610454,0.00260264379903674,0.019681055098772,0.00415737135335803,0.0573714300990105,0.0260794423520565,0.241283521056175,0.0313012041151524,0.43357065320015,0.486305832862854,0.480722397565842,0.421222060918808,0.308387398719788,0.21123956143856,0.151384964585304,0.0513319559395313,0.00637604761868715,0.00370210641995072,0.0116720963269472,0.0107373110949993,0.0756150707602501,0.146860748529434,0.330495357513428,0.467436373233795,0.469159185886383,0.0102206543087959,0.010956222191453,0.0108262272551656,0.0147844785824418,0.0208914484828711,0.0274675246328115,0.0268960893154144,0.0242242868989706,0.027724850922823,0.0302235800772905,0.028852054849267,0.0297430325299501,0.0521327517926693,0.0530193373560905,0.0581693537533283,0.0927537828683853,0.142314732074738,0.226108208298683,0.229115411639214,0.019042607396841,0.0204018652439117,0.0207625348120928,0.0267703607678413,0.0535290092229843,0.0909426435828209,0.152808129787445,0.168576091527939,0.343474626541138,0.155315488576889,0.424900680780411,0.465838462114334,0.320092290639877,0.290643304586411,0.0841367095708847,0.0326586216688156,0.0142576759681106,0.0126772029325366,0.00866493117064238,0.00799310021102428,0.0292372778058052,0.0670557543635368,\n0.105456203222275,0.0716907531023026,0.113329194486141,0.167281061410904,0.13141243159771,0.209005817770958,0.250615149736404,0.316368371248245,0.349230736494064,0.165242061018944,0.0850486308336258,0.0304153300821781,0.0123343467712402,0.00701207853853703,0.00838807877153158,0.00656341481953859,0.00529869552701712,0.00399890448898077,0.00370304146781564,0.00407698517665267,0.00661989906802773,0.0218677837401628,0.0659785270690918,0.13825549185276,0.327767133712769,0.422945559024811,0.00341141130775213,0.0277226585894823,0.00964815262705088,0.0733150765299797,0.0750653073191643,0.0668630003929138,0.0482793487608433,0.0364491641521454,0.106386072933674,0.109185293316841,0.0868760198354721,0.0639690756797791,0.0486819483339787,0.0025335478130728,0.00351265678182244,0.00484719267114997,0.0051118447445333,0.00551333790645003,0.00857016909867525,0.0255201179534197,0.0461918115615845,0.0607488192617893,0.082602471113205,0.00348183745518327,0.00425211526453495,0.0122325997799635,0.0232921801507473,0.0329400151968002,0.0505042336881161,0.00243083899840713,0.00211556325666606,0.00381573452614248,0.333928316831589,0.333637237548828,0.342649161815643,0.148482084274292,0.169741451740265,0.325659662485123,0.165427297353745,0.190183475613594,0.338564485311508,0.332659870386124,0.424720793962479,0.272170603275299,0.265515953302383,0.400727868080139,0.3985435962677,0.386788845062256,0.480597913265228,0.483692198991776,0.382549494504929,0.371120661497116,0.389783293008804,0.388345569372177,0.375611394643784,0.479947537183762,0.477173000574112,0.479976087808609,0.488711804151535,0.264497667551041,0.480171978473663,0.480196863412857,0.281652390956879,0.386610776185989,0.393351674079895,0.493049114942551,0.476622134447098,0.493348211050034,0.488274902105331,0.481746703386307,0.479674130678177,0.485377997159958,0.383438646793365,0.38273361325264,0.478472590446472,0.478911131620407,0.482469409704208,0.25904905796051,0.387419193983078,0.484412759542465,0.374153643846512,0.384540796279907,0.393201231956482,0.391896665096283,0.389575123786926,\n0.397310733795166,0.389183044433594,0.395906448364258,0.391255348920822,0.385995209217072,0.379178792238235,0.480608761310577,0.478224217891693,0.478784024715424,0.483895808458328,0.485016852617264,0.289588868618011,0.2858946621418,0.282295495271683,0.278777480125427,0.280919998884201,0.284057527780533,0.275038123130798,0.492896527051926,0.491387784481049,0.488171577453613,0.487669318914413,0.483663886785507,0.483254432678223,0.487161904573441,0.488301068544388,0.494450151920319,0.493478566408157,0.491661041975021,0.491220772266388,0.488335520029068,0.488093882799149,0.490230351686478,0.49139529466629,0.447182863950729,0.453413426876068,0.457830518484116,0.455677270889282,0.451877117156982,0.452926635742188,0.453699231147766,0.452374875545502,0.162077844142914,0.153775423765183,0.144265338778496,0.130756393074989,0.12773522734642,0.110134489834309,0.100244358181953,0.257783085107803,0.328106373548508,0.337502628564835,0.339458107948303,0.336772680282593,0.334999978542328,0.337213188409805,0.333657503128052,0.321457594633102,0.240402236580849,0.236348703503609,0.2256248742342,0.192733883857727,0.178379684686661,0.337512731552124,0.33630096912384,0.00372941023670137,0.0425253920257092,0.00479376269504428,0.00736830430105329,0.024929778650403,0.0419468656182289,0.0679051578044891,0.0369835682213306,0.0055746752768755,0.00702597154304385,0.004378626588732,0.00330133899115026,0.00717229535803199,0.00537879345938563,0.00868201814591885,0.00824112817645073,0.0452413111925125,0.0330644808709621,0.0503015853464603,0.0586812384426594,0.0568802282214165,0.0477373376488686,0.0552803725004196,0.0545187331736088,0.0527505427598953,0.0634061843156815,0.00648416765034199,0.00671511329710484,0.00569756980985403,0.00735023058950901,0.0519979819655418,0.00522345816716552,0.00534566678106785,0.0481486767530441,0.00946079008281231,0.0066124158911407,0.0383318774402142,0.0402498096227646,0.00106495397631079,0.118589662015438,0.00465148035436869,0.00636514322832227,0.00802721362560987,0.01302869617939,0.0298224594444036,0.0730650275945663,\n0.0640791431069374,0.0785257965326309,0.129638075828552,0.00703607313334942,0.00397564051672816,0.002779102884233,0.00183781166560948,0.00102745718322694,0.00205730739980936,0.00119256286416203,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0363458469510078,0.0490859411656857,0.0230439715087414,0.0270924493670464,0.0206718631088734,0.0185975339263678,0.0315399616956711,0.0198257975280285,0.0269823614507914,0.0328964106738567,0.0420869141817093,0.033035896718502,0.0343892797827721,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0205506253987551,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0164824109524488,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0294039398431778,0.0285390242934227,0.033760379999876,0.25,0.0334517695009708,0.0518122427165508,0.0614676512777805,0.0205193366855383,0.0269071813672781,0.0314036086201668,0.0327518321573734,0.0268050134181976,0.0195972546935081,0.0420689024031162,0.25,0.0342525728046894,0.032850906252861,0.25,0.25,0.25,0.25,0.25,0.25,0.0203968714922667,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0164006631821394,0.25,0.25,0.25,0.25,0.0283657796680927,0.0336172617971897,0.25,0.0332952253520489,0.0431861653923988,0.0524789169430733,0.0583099275827408,0.0627204552292824,0.0649085119366646,0.0649517104029655,0.0558292157948017,0.0712820068001747,0.0773883908987045,0.0595448277890682,0.0459866523742676,0.0631427764892578,0.0695129185914993,0.0743144378066063,0.0786107704043388,0.0818765684962273,0.0685356482863426,0.085819348692894,0.0700611248612404,0.0875939428806305,0.0724721848964691,0.0884920507669449,0.0853708758950233,0.0881564021110535,0.0908025205135345,0.0936112031340599,0.0958083048462868,0.097295954823494,0.0983019843697548,0.0867456123232841,0.04403305798769,0.0457499995827675,0.089852549135685,0.0920755043625832,0.0464900881052017,0.0950798839330673,0.04793631285429,0.0969551578164101,0.0981794819235802,0.0453936643898487,0.0594191439449787,0.0714830383658409,\n0.0849934816360474,0.0919935032725334,0.0601679086685181,0.031210158020258,0.0784409269690514,0.0928118303418159,0.0457577556371689,0.0402213782072067,0.115750454366207,0.0459373705089092,0.00880237855017185,0.104578346014023,0.00779814412817359,0.0330955237150192,0.00620269542559981,0.0458248779177666,0.115556560456753,0.0106787532567978,0.0427076853811741,0.0520423203706741,0.0623702667653561,0.0579177998006344,0.0646481588482857,0.0645835474133492,0.0556703619658947,0.0594267956912518,0.0773378387093544,0.0711730420589447,0.0628099739551544,0.0455066487193108,0.0741315335035324,0.0692554861307144,0.081831268966198,0.0785038098692894,0.0683186501264572,0.0858453959226608,0.0698799192905426,0.0876429975032806,0.072339653968811,0.0885435417294502,0.0882261097431183,0.0853879749774933,0.0937753990292549,0.0909218266606331,0.0959855541586876,0.0974629446864128,0.0984429940581322,0.0867866203188896,0.0899530425667763,0.045818142592907,0.0443416349589825,0.0922174900770187,0.0952682867646217,0.0465697981417179,0.0971475094556808,0.0479841232299805,0.098355196416378,0.0455138795077801,0.0592054910957813,0.0713467746973038,0.0850033462047577,0.0920666009187698,0.0600640438497067,0.0311885327100754,0.0783986672759056,0.0402268432080746,0.0457861050963402,0.0928908884525299,0.0460279919207096,0.11594096571207,0.0825046300888062,0.0336504355072975,0.0550510063767433,0.0327116213738918,0.0843499973416328,0.0538351610302925,0.115753903985024,0.0459173731505871,0.0423254780471325,0.0473188795149326,0.0469414778053761,0.0424519367516041,0.0455350130796433,0.0465708039700985,0.0463208556175232,0.0459131821990013,0.0454256609082222,0.0454010963439941,0.0476120784878731,0.0460077859461308,0.0464699864387512,0.0480568446218967,0.0285552516579628,0.0279842782765627,0.0420441664755344,0.0346364490687847,0.0459042675793171,0.0479452051222324,0.0302031561732292,0.0351778902113438,0.0353191234171391,0.0300698410719633,0.0477901250123978,0.0460597239434719,0.0475746355950832,0.0476561114192009,0.0469396188855171,0.0473422221839428,0.042336743324995,\n0.0424514710903168,0.0466025285422802,0.0457513518631458,0.046540342271328,0.0455028414726257,0.0456418693065643,0.0460276454687119,0.0466801859438419,0.0461235679686069,0.0493917614221573,0.0505173802375793,0.0328598394989967,0.0614248886704445,0.0582841336727142,0.0327506698668003,0.028565488755703,0.0420595146715641,0.0346313901245594,0.0460008196532726,0.0476239807903767,0.0496446788311005,0.0461848825216293,0.0553307607769966,0.0574205592274666,0.0306450352072716,0.0352026782929897,0.0550592020153999,0.0530673302710056,0.0526897385716438,0.0578309148550034,0.0578070469200611,0.0511235482990742,0.0550271794199944,0.0333066172897816,0.0585754439234734,0.0363343097269535,0.0334516875445843,0.0499937012791634,0.0477185994386673,0.0502332895994186,0.0329226404428482,0.0596463717520237,0.0602541044354439,0.0325763672590256,0.0548891797661781,0.0545088052749634,0.0385428369045258,0.0597529001533985,0.0630740821361542,0.060188289731741,0.0497944205999374,0.0485014282166958,0.0548396296799183,0.0474867112934589,0.0483855456113815,0.048272006213665,0.0479882210493088,0.0484448708593845,0.033422339707613,0.0332249216735363,0.0367633253335953,0.0371963866055012,0.0591864511370659,0.0586266443133354,0.0564895682036877,0.0560322143137455,0.0527559295296669,0.0523263998329639,0.0475462675094604,0.0351889580488205,0.0518597513437271,0.0550283901393414,0.0553474090993404,0.0562724024057388,0.0565110705792904,0.0470517128705978,0.0469588600099087,0.0484369359910488,0.0455471314489841,0.0457634702324867,0.036540824919939,0.051483154296875,0.0525423064827919,0.0472937934100628,0.0474919863045216,0.0455344542860985,0.0463755093514919,0.0482619404792786,0.0477126091718674,0.0420452356338501,0.0387176498770714,0.039597537368536,0.0432965233922005,0.0378118790686131,0.0393772348761559,0.0388134606182575,0.0400375463068485,0.0406235195696354,0.0418323688209057,0.0435393676161766,0.0449409149587154,0.0449843443930149,0.0442634783685207,0.0454877987504005,0.0468482598662376,0.0431497171521187,0.0388540960848331,0.0420254059135914,0.0379814654588699,\n0.0388836711645126,0.0405762083828449,0.0420276112854481,0.0438253730535507,0.0379501208662987,0.0464935377240181,0.0470876507461071,0.0479562990367413,0.0428505316376686,0.0432538129389286,0.0440746434032917,0.043167881667614,0.0358535051345825,0.0463173091411591,0.0455583706498146,0.0473006889224052,0.0433365665376186,0.0436598360538483,0.041830450296402,0.0425897315144539,0.0429352596402168,0.0446554943919182,0.0444185100495815,0.0478337593376637,0.0489576756954193,0.0458226874470711,0.0455644465982914,0.0451333113014698,0.0450351312756538,0.0444156192243099,0.04610550776124,0.0441313832998276,0.0450423546135426,0.0474513657391071,0.0425930954515934,0.0418335050344467,0.0427580513060093,0.0435871928930283,0.0469574220478535,0.0477113723754883,0.0432335324585438,0.03575224801898,0.0422356687486172,0.0439734980463982,0.0452122874557972,0.0419878959655762,0.0434043630957603,0.0424181818962097,0.0476711951196194,0.0470606423914433,0.0485476925969124,0.0440369583666325,0.0443284660577774,0.0432426556944847,0.0444737486541271,0.0441686771810055,0.0458097457885742,0.0439906790852547,0.0467772446572781,0.0438812710344791,0.0452282652258873,0.0449860095977783,0.0453792065382004,0.0476871356368065,0.0482325255870819,0.0461746491491795,0.0417544841766357,0.0429480746388435,0.0392320193350315,0.0384102240204811,0.037625715136528,0.0392917655408382,0.0385116524994373,0.0399314872920513,0.040337935090065,0.0414942279458046,0.0446748659014702,0.0447062738239765,0.0433738604187965,0.0440853387117386,0.04347088560462,0.0471675954759121,0.0453428402543068,0.0417539440095425,0.0385626032948494,0.0376894623041153,0.0385972186923027,0.0403062179684639,0.0417737476527691,0.0438350588083267,0.0378008708357811,0.0464474521577358,0.0470256581902504,0.0479054264724255,0.0426812805235386,0.0431039035320282,0.0439547300338745,0.0359450168907642,0.0431542471051216,0.0455041453242302,0.0462410636246204,0.0472339168190956,0.0431707948446274,0.0435150414705276,0.0422635935246944,0.0415555536746979,0.0426978245377541,0.0444945953786373,0.0443046689033508,\n0.0453293025493622,0.045503132045269,0.0486048869788647,0.0449728332459927,0.044301874935627,0.0448818653821945,0.0458832271397114,0.0472133979201317,0.0448503606021404,0.0439546369016171,0.0423831306397915,0.0434070527553558,0.0425996817648411,0.041539017111063,0.0469246916472912,0.04325220733881,0.0476763360202312,0.0422559827566147,0.035848829895258,0.04379603266716,0.0450015254318714,0.0432388633489609,0.0417218655347824,0.0422676876187325,0.0476168803870678,0.0470242872834206,0.0485067889094353,0.0438692346215248,0.426967233419418,0.0432997718453407,0.427755177021027,0.0439979955554008,0.0456666573882103,0.421029776334763,0.0463924035429955\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 1.2402969159731e-006,-1.27428575549449e-006,0.999999999997432,0,0.99549886814286,0.0947735896485261,-1.11394550756451e-006,0,-0.0947735896470626,0.995498868141555,1.38609737697838e-006,0,-40.9408718012017,-5.17448571803319,-0.0375229850015662,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 1.24029687904964e-006,0.995498838507016,-0.0947735868256679,0,-1.27428571756205e-006,0.0947735868273431,0.995498838507936,0,0.999999999999406,-1.1139455075667e-006,1.38609737698111e-006,0,0.0375671700638182,41.2469948552473,1.27108130581873,1\n\t\t} \n\t}\n\tDeformer: 137712928, \"SubDeformer::Cluster_Spine1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1066 {\n\t\t\ta: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,5301,5302,5308,5310,5315,5316,5317,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5339,5340,5341,5342,5343,5344,5345,5346,5347,5353,5354,5355,5356,5357,5377,5378,5385,5390,5392,5393,5422,5435,5436,5440,5441,5442,5445,5446,5461,5468,5469,5470,5476,5481,5482,5530,5531,5739,5740,5741,5742,5746,5747,5748,5749,5750,5751,5752,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5769,5770,5772,5773,5774,5775,5776,5777,5778,5779,5780,5782,5786,5787,5788,5808,5809,5816,5821,5823,5824,5852,5866,5870,5871,5872,5875,5876,5891,5892,5899,5910,5911,5959,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6544,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6571,6575,6579,6581,6583,6584,6585,6586,6593,6594,6596,6597,6598,6599,6600,6603,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6632,6634,6657,6658,6660,6661,6668,6671,6672,6673,6675,6676,6677,6678,6679,6684,6685,6686,6687,6692,6693,6694,6695,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6717,6718,6719,6720,6721,6727,6736,6737,6738,6739,6740,6742,6743,6744,6745,6751,6752,6754,6755,6756,6757,6758,6759,6762,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,\n6789,6790,6792,6794,6795,6796,6815,6816,6818,6819,6825,6828,6829,6830,6831,6833,6834,6835,6836,6837,6841,6842,6843,6844,6845,6865,6884,6885,6886,6887,6888,6889,6891,6892,6893,6894,6895,6896,6897,6898,6899,6901,6902,6905,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,9350,9351,9678,9679,9685,9686,9687,9696,9699,9700,9704,9705,9706,9721,9722,9723,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10112,10116,10128,10129,10130,10131,10132,10133,10134,10135,10136,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10192,10193,10194,10197,10216,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10239,10240,10241,10250,10251,10252,10253,10255,10256,10275,10276,10277,10284,10285,10286,10287,10288,10289,10338,10339,10448,10449,10456,10470,10471,10483,10484,10485,10486,10490,10550,10570,10571,10572,10573,10575,10583,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10628,10629,10632,10633,10634,10637,10656,10661,10662,10663,10664,10665,10666,10667,10668,10669,10670,10677,10685,\n10686,10687,10688,10691,10692,10709,10710,10711,10712,10719,10720,10721,10722,10723,10724,10771,10772,10876,10877,10888,10895,10896,10897,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10952,10953,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10974,10977,10978,10979,10981,10982,10984,10985,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191,11192\n\t\t} \n\t\tWeights: *1066 {\n\t\t\ta: 0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0160846933722496,0.0164203029125929,0.0159657876938581,0.0154251707717776,0.0168652925640345,0.0166946854442358,0.0172978769987822,0.0174098424613476,0.0175959542393684,0.0179028194397688,0.0176764037460089,0.0180323757231236,0.0175203327089548,0.0177715346217155,0.0171755701303482,0.0172060579061508,0.0167375691235065,0.0164956580847502,0.0163211673498154,0.0158238299190998,0.0160321909934282,0.0153556959703565,0.0159447863698006,0.015207638964057,0.0128046330064535,0.0123249804601073,0.0134784216061234,0.0141613502055407,0.0146538205444813,0.0148128774017096,0.0146015761420131,0.0140923066064715,0.0134314354509115,0.0127910561859608,0.0123281786218286,0.0121562043204904,0.0129481069743633,0.0126527966931462,0.0133569296449423,0.0137679995968938,0.0140651864930987,0.0141647066920996,0.0140419183298945,0.0137354964390397,0.0133314346894622,0.012936201877892,0.0126501396298409,0.0125458519905806,0.0167935136705637,0.0133372796699405,0.4118632376194,0.435128420591354,0.452331721782684,0.309406131505966,0.449244529008865,0.0940441563725472,0.407361507415771,0.404217571020126,0.421248406171799,0.409840732812881,0.392953753471375,0.428104996681213,0.405013799667358,0.0706687644124031,0.499827414751053,0.496607095003128,0.374263346195221,0.571578025817871,0.405000001192093,0.269432663917542,0.249056547880173,0.5,0.394996881484985,0.384848088026047,0.389729768037796,0.334900081157684,0.293396413326263,0.328714191913605,0.398442834615707,0.32771834731102,0.0595257952809334,0.0552126057446003,0.454701125621796,0.40461653470993,0.4881192445755,0.347358107566834,0.35251322388649,0.440273106098175,0.308558940887451,0.391451150178909,0.371111899614334,0.507824063301086,0.489344775676727,0.339798629283905,\n0.363848000764847,0.356653660535812,0.403677821159363,0.446302890777588,0.415230363607407,0.0906204208731651,0.0889278724789619,0.412925362586975,0.449999988079071,0.0518114231526852,0.0728756785392761,0.0594516582787037,0.0610590726137161,0.0579790323972702,0.477428883314133,0.401172369718552,0.389459520578384,0.377351671457291,0.502477288246155,0.389182537794113,0.428046405315399,0.387773752212524,0.402254194021225,0.485787153244019,0.0524009801447392,0.404599189758301,0.42209380865097,0.410691499710083,0.393934220075607,0.428258091211319,0.405008465051651,0.499823004007339,0.496008574962616,0.376370757818222,0.384699434041977,0.0788780599832535,0.341655790805817,0.348720580339432,0.5,0.396044343709946,0.385793387889862,0.390573292970657,0.378742516040802,0.348475426435471,0.358005672693253,0.379805535078049,0.353024065494537,0.119299098849297,0.453788548707962,0.405600816011429,0.487848222255707,0.389860063791275,0.426657408475876,0.441065758466721,0.30920135974884,0.392572522163391,0.34356015920639,0.359241247177124,0.341385185718536,0.366231173276901,0.358353018760681,0.349766403436661,0.446171700954437,0.413984596729279,0.390668451786041,0.0912416279315948,0.412029325962067,0.0845936164259911,0.0729723423719406,0.0587323158979416,0.447466403245926,0.438775271177292,0.497988551855087,0.492459923028946,0.482212215662003,0.0798316299915314,0.0531247593462467,0.0527055263519287,0.0659925639629364,0.0599521771073341,0.0557822063565254,0.0600882656872272,0.0715308338403702,0.0537794753909111,0.0618537701666355,0.0668433904647827,0.0528572015464306,0.0730938166379929,0.00181005604099482,0.00221109134145081,0.00119374599307776,0.00146303232759237,0.00136578513775021,0.00223155738785863,0.0690709576010704,0.0473786555230618,0.0920473039150238,0.0891687572002411,0.0381028018891811,0.00387158431112766,0.00251820357516408,0.00166320090647787,0.00180311361327767,0.00113617500755936,0.00619343807920814,0.0186367426067591,0.00111796089913696,0.00189601548481733,0.00200709118507802,0.00302449869923294,0.00478658778592944,0.00123879930470139,\n0.00197416427545249,0.00173406291287392,0.0183619633316994,0.0167030841112137,0.0173190552741289,0.0156179061159492,0.0506496839225292,0.050516739487648,0.0377767160534859,0.0546070151031017,0.0417194440960884,0.0459446907043457,0.0589710585772991,0.0463874600827694,0.00128481700085104,0.020310215651989,0.0542940571904182,0.0669875293970108,0.0289271455258131,0.0201205685734749,0.0398120880126953,0.0143598988652229,0.0361818224191666,0.00191568059381098,0.0531524606049061,0.0251301974058151,0.0691704824566841,0.0520155392587185,0.0624980665743351,0.0755863040685654,0.0785739421844482,0.0241166241466999,0.0203430224210024,0.0184384100139141,0.0401647128164768,0.00786753464490175,0.0217073261737823,0.089838333427906,0.0157315582036972,0.0600272752344608,0.0427021160721779,0.0384004004299641,0.0568193718791008,0.0522586293518543,0.035638190805912,0.0346027687191963,0.0764086619019508,0.0884695127606392,0.0188344158232212,0.070174053311348,0.0326588302850723,0.0264596547931433,0.0506513118743896,0.01990070566535,0.0195501185953617,0.028569471091032,0.0360912568867207,0.0218110550194979,0.0160472877323627,0.0184787679463625,0.0352999679744244,0.0516716316342354,0.00237905723042786,0.00159102503675967,0.0226545855402946,0.0271457750350237,0.0474893748760223,0.0645274966955185,0.0529851205646992,0.0228720381855965,0.0246643126010895,0.0471772253513336,0.0649261623620987,0.0203444454818964,0.0275691486895084,0.0192651394754648,0.0189470537006855,0.0246421601623297,0.01800193823874,0.0357401669025421,0.0506223030388355,0.0174189861863852,0.0172808524221182,0.0165687892585993,0.0133684435859323,0.0363536477088928,0.0501126907765865,0.0500063300132751,0.0454842299222946,0.0584978610277176,0.045951172709465,0.0012955809943378,0.0180803369730711,0.0527493879199028,0.0667149424552917,0.0293978601694107,0.0208155307918787,0.0405387282371521,0.0133866406977177,0.04086684435606,0.0363172851502895,0.0116078825667501,0.0158129744231701,0.0509919971227646,0.0182479619979858,0.0257603283971548,0.0683596357703209,0.0512992851436138,0.0617051981389523,\n0.0748262330889702,0.0815390720963478,0.0236504841595888,0.0202212948352098,0.0184010080993176,0.0407758466899395,0.0176970455795527,0.0173410214483738,0.0224231835454702,0.0889244079589844,0.0594708025455475,0.0424453541636467,0.0379730463027954,0.0561151020228863,0.0516486801207066,0.0352943167090416,0.0342671312391758,0.0758966356515884,0.0880906879901886,0.0187969096004963,0.0702414438128471,0.0320881120860577,0.0261492505669594,0.0499122962355614,0.0198557674884796,0.0195044167339802,0.028232004493475,0.0354873239994049,0.0216745641082525,0.0166845489293337,0.01869329623878,0.0197165627032518,0.018470698967576,0.0349537320435047,0.0510836020112038,0.0024017239920795,0.00161671859677881,0.0228383634239435,0.00963364727795124,0.0218189973384142,0.0476066395640373,0.066476434469223,0.0533930957317352,0.0226607136428356,0.0244316216558218,0.046758908778429,0.0641279742121696,0.0238656513392925,0.0182043109089136,0.0171894691884518,0.0393313504755497,0.0524248778820038,0.0163537990301847,0.0491573363542557,0.0539665594696999,0.052042193710804,0.0551500394940376,0.0565586723387241,0.0413413755595684,0.00491613335907459,0.00462120585143566,0.00493934098631144,0.0395209453999996,0.0472693964838982,0.0580320283770561,0.0528250709176064,0.0546943955123425,0.0498614907264709,0.0141710704192519,0.0384655743837357,0.0153101915493608,0.0204608496278524,0.0201338287442923,0.0194478500634432,0.0189187098294497,0.0184417404234409,0.0204847734421492,0.0195690207183361,0.0189714375883341,0.0187409352511168,0.0184062235057354,0.0201160330325365,0.0121795358136296,0.01349903549999,0.0223800241947174,0.0190002582967281,0.023339007049799,0.0263351127505302,0.0235265847295523,0.0271546300500631,0.0213052537292242,0.0235639810562134,0.025151539593935,0.0246744081377983,0.0207709092646837,0.0228502154350281,0.0254615023732185,0.0245288666337729,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0610730834305286,0.0480313338339329,\n0.0657686740159988,0.0603674054145813,0.0632295534014702,0.0655892416834831,0.056696955114603,0.0630388557910919,0.0597760379314423,0.0569867044687271,0.0520362481474876,0.0575678944587708,0.0568820908665657,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0624931752681732,0.0608663484454155,0.0741311311721802,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0579049400985241,0.0732160955667496,0.073155365884304,0.25,0.25,0.25,0.0630910694599152,0.075778141617775,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0633393228054047,0.0602369867265224,0.0572502575814724,0.25,0.0582733973860741,0.0463946387171745,0.0345158390700817,0.0634916201233864,0.0606879107654095,0.0570367276668549,0.0573146566748619,0.0601356104016304,0.0634386166930199,0.0521964766085148,0.25,0.0571960285305977,0.0579383820295334,0.25,0.25,0.25,0.25,0.25,0.25,0.0628122016787529,0.0741900429129601,0.0608696937561035,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0731783211231232,0.25,0.25,0.25,0.063268169760704,0.25,0.25,0.25,0.25,0.0605871565639973,0.0575619041919708,0.25,0.0585609637200832,0.0125644169747829,0.0161781385540962,0.0946971252560616,0.113065972924232,0.0955591946840286,0.113255612552166,0.115407161414623,0.0166719518601894,0.111046440899372,0.114557966589928,0.115057192742825,0.134647995233536,0.118201650679111,0.10340691357851,0.0990749299526215,0.0968202129006386,0.0956590920686722,0.0955270379781723,0.0956348106265068,0.0974334701895714,0.0942233800888062,0.0941582396626472,0.0963840037584305,0.102147005498409,0.0968629568815231,0.0958827063441277,0.0953153520822525,0.0952657982707024,0.0954933315515518,0.0947557613253593,0.094863660633564,0.0943074598908424,0.0947857350111008,0.0932449623942375,0.0943935662508011,0.0960135459899902,0.0962416753172874,0.096434086561203,0.0970151573419571,0.0969958752393723,0.0975823402404785,0.0983297526836395,0.0963755026459694,0.0478864125907421,0.0472911819815636,0.0966922789812088,0.0968846678733826,0.0468310043215752,0.0975888222455978,0.0479436703026295,0.0976556986570358,0.0982761457562447,0.0453936643898487,0.0829939991235733,\n0.131572216749191,0.095733642578125,0.0931219086050987,0.0330649577081203,0.111474379897118,0.0940181314945221,0.0138383228331804,0.0954996421933174,0.0963278412818909,0.0489871390163898,0.0639310702681541,0.116211578249931,0.0943464785814285,0.0959200859069824,0.0470763146877289,0.047386534512043,0.115750454366207,0.0459373705089092,0.0615078397095203,0.114474974572659,0.0102072861045599,0.114212065935135,0.107755355536938,0.108900405466557,0.113887831568718,0.0153199834749103,0.0134717989712954,0.331447571516037,0.0140763055533171,0.0571444295346737,0.115523591637611,0.0114414868876338,0.121026553213596,0.0150303114205599,0.0986424684524536,0.0156874470412731,0.0176794230937958,0.0991439148783684,0.0458248779177666,0.115556560456753,0.0121582960709929,0.00145241722930223,0.00110338255763054,0.0189089998602867,0.0985106527805328,0.107939377427101,0.113377869129181,0.115028515458107,0.0350148677825928,0.112978167831898,0.0912709683179855,0.115363225340843,0.0318216159939766,0.110598295927048,0.0288906805217266,0.103646159172058,0.117995038628578,0.0993009060621262,0.0958817303180695,0.0970390737056732,0.0958659276366234,0.0957623273134232,0.0975157767534256,0.0964478775858879,0.0942511260509491,0.0943288579583168,0.0971035063266754,0.102390080690384,0.0955712720751762,0.0961361154913902,0.0957473963499069,0.0955247059464455,0.0949553698301315,0.0950683504343033,0.0944903567433357,0.0949619114398956,0.0933806076645851,0.0945300683379173,0.0965021103620529,0.096266895532608,0.0972602441906929,0.0966887548565865,0.0971979051828384,0.0977544412016869,0.0984711647033691,0.0966334342956543,0.0969574153423309,0.0473992563784122,0.0483118109405041,0.097144216299057,0.0978377535939217,0.0469192080199718,0.0978628695011139,0.0479916408658028,0.0984536111354828,0.0455138795077801,0.0759637728333473,0.095848985016346,0.0932484567165375,0.0500443838536739,0.111272752285004,0.0941459313035011,0.0148799484595656,0.0956147909164429,0.0963888987898827,0.1161749958992,0.0639409199357033,0.0490578524768353,0.0944396182894707,0.0474578179419041,\n0.0471202805638313,0.0960363075137138,0.0460279919207096,0.11594096571207,0.0959390848875046,0.113968148827553,0.113645575940609,0.108573324978352,0.107358492910862,0.0231448579579592,0.0258436370640993,0.108174778521061,0.100355915725231,0.0570258460938931,0.0962649509310722,0.115307062864304,0.10031446069479,0.120918855071068,0.0240998882800341,0.0352719128131866,0.098014697432518,0.0254631005227566,0.098651260137558,0.115753903985024,0.0459173731505871,0.00128815008793026,0.00187792407814413,0.00138435524422675,0.0017597529804334,0.0464554391801357,0.0474064983427525,0.0470624417066574,0.0466079525649548,0.0455350130796433,0.0468212924897671,0.0437308289110661,0.0440183058381081,0.0454256609082222,0.0454010963439941,0.0361616723239422,0.0436928942799568,0.043303482234478,0.03602509573102,0.0482787489891052,0.047590360045433,0.0465318225324154,0.0479768924415112,0.0442606769502163,0.0457951314747334,0.0483870916068554,0.0478363074362278,0.0477668158710003,0.0483069196343422,0.0367880687117577,0.0436840392649174,0.0369462110102177,0.0368062853813171,0.0470705032348633,0.0474236905574799,0.046487208455801,0.0466318503022194,0.0468555018305779,0.0457513518631458,0.0437558144330978,0.0455028414726257,0.0456418693065643,0.0441100299358368,0.0433482155203819,0.0437701754271984,0.0268096122890711,0.025440776720643,0.0119284018874168,0.0146921891719103,0.0483344532549381,0.0465798899531364,0.0480228587985039,0.0443773195147514,0.0455287732183933,0.0267925076186657,0.0436607450246811,0.0281855668872595,0.0224408134818077,0.048752348870039,0.047987125813961,0.0177878737449646,0.0201244056224823,0.0212911684066057,0.0216138940304518,0.0159024260938168,0.0382708534598351,0.0297725424170494,0.0208371076732874,0.0259721092879772,0.037489291280508,0.0253221485763788,0.0119044473394752,0.0110253505408764,0.0170450117439032,0.0180079024285078,0.0295708458870649,0.019897572696209,0.0265107657760382,0.0362237952649593,0.0424570478498936,0.0366268083453178,0.0421036295592785,0.0370111688971519,0.0360145717859268,0.0358593687415123,\n0.0354854501783848,0.0213343035429716,0.0219551715999842,0.0275051966309547,0.0315192379057407,0.0366171412169933,0.0375544615089893,0.0425509549677372,0.04792245849967,0.0371451638638973,0.0319571644067764,0.0312190800905228,0.0285049546509981,0.0303987730294466,0.0430089570581913,0.04224693775177,0.0362669602036476,0.0455471314489841,0.0457634702324867,0.0380893014371395,0.0421890206634998,0.0401321649551392,0.0402174852788448,0.0449648573994637,0.0438278988003731,0.048929788172245,0.0491268672049046,0.0377959571778774,0.034326296299696,0.0331560783088207,0.0366695560514927,0.032829862087965,0.0312358327209949,0.0328594297170639,0.0316329225897789,0.0337643548846245,0.0326298214495182,0.0279203932732344,0.0363381430506706,0.0310495290905237,0.028650401160121,0.0452901385724545,0.0487910769879818,0.0508548691868782,0.035187091678381,0.0386115312576294,0.0337366759777069,0.0337099097669125,0.0345613844692707,0.0353715158998966,0.0502113327383995,0.0541133023798466,0.0481908470392227,0.0475474782288074,0.0479730777442455,0.0428487621247768,0.0432051122188568,0.0439012609422207,0.0495737344026566,0.0548233762383461,0.0470600426197052,0.0479314848780632,0.0474002063274384,0.0433365665376186,0.0436579845845699,0.0344199351966381,0.0330208316445351,0.0354295782744884,0.0412854179739952,0.0443773530423641,0.0372496731579304,0.030983192846179,0.0308753717690706,0.0365771092474461,0.0414599291980267,0.0419258736073971,0.0443407259881496,0.0271183177828789,0.0270751696079969,0.0279165171086788,0.0283128377050161,0.0307662542909384,0.0326637551188469,0.0284421108663082,0.0283898822963238,0.0488329380750656,0.0487452857196331,0.0516017079353333,0.0552499406039715,0.0516585372388363,0.0262685399502516,0.0259816572070122,0.0343030691146851,0.0272527150809765,0.0290697049349546,0.0481483936309814,0.0489150248467922,0.0485729686915874,0.0440369583666325,0.0443004779517651,0.0529002211987972,0.0444244109094143,0.0422025732696056,0.0433992557227612,0.0430087298154831,0.0371259637176991,0.0356947109103203,0.0366935394704342,0.0428103283047676,\n0.0448220446705818,0.0490759424865246,0.0488878265023232,0.0436882935464382,0.0376130416989326,0.0364996418356895,0.0329779572784901,0.0341395400464535,0.0325955376029015,0.0309378877282143,0.0327054634690285,0.0313573144376278,0.0336268469691277,0.0325021110475063,0.0309654697775841,0.0362372621893883,0.0277648419141769,0.0284956824034452,0.0510877929627895,0.0490892678499222,0.0451494082808495,0.0384254641830921,0.0349950790405273,0.0335587300360203,0.0335502773523331,0.0344194956123829,0.0352435037493706,0.0500917658209801,0.0535659939050674,0.0481077879667282,0.0474749654531479,0.0479218363761902,0.04267967492342,0.0430561415851116,0.0437839739024639,0.0545541681349278,0.0494237542152405,0.0478241555392742,0.046966340392828,0.0473311729729176,0.0431707948446274,0.043513223528862,0.0329000502824783,0.0342921055853367,0.0353162884712219,0.0411745198071003,0.044264130294323,0.0364803969860077,0.0307964682579041,0.0309248808771372,0.041353452950716,0.0442280955612659,0.0418182425200939,0.0269630569964647,0.0281666107475758,0.0277667213231325,0.026924280449748,0.0305882766842842,0.0282064899802208,0.0282657127827406,0.0325478427112103,0.0487661845982075,0.0514672324061394,0.0486907325685024,0.0515044741332531,0.0549807958304882,0.0261166952550411,0.0258255377411842,0.027095315977931,0.0341812409460545,0.0288916807621717,0.0480824448168278,0.0488349907100201,0.0485314689576626,0.0438692346215248,0.426702290773392,0.0527382120490074,0.427288204431534,0.0420678332448006,0.0432938933372498,0.411774486303329,0.0439190529286861\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 1.03960773990488e-006,-1.16456312118296e-006,0.999999999997726,0,0.980749677729069,0.195269132266046,-7.92191753949556e-007,0,-0.195269132265112,0.980749677727561,1.34514825497483e-006,0,-44.7250186963504,-9.75817513334512,-0.0375375437398338,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 1.03960777693329e-006,0.980749712661095,-0.195269139220145,0,-1.16456316266469e-006,0.195269139221532,0.98074971266186,0,0.999999999999837,-7.92191753951227e-007,1.34514825497767e-006,0,0.0375726762057927,45.7695196641321,0.836911606184657,1\n\t\t} \n\t}\n\tDeformer: 137714064, \"SubDeformer::Cluster_L_Thigh1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1213 {\n\t\t\ta: 4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,5330,5333,5476,5481,5482,5530,5531,5752,5765,5767,5910,5911,5959,6502,6503,6504,6505,6508,6509,6510,6511,6512,6513,6520,6522,6539,6540,6541,6542,6543,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6662,6663,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6703,6704,6706,6707,6708,6709,6710,6711,6715,6717,6718,6719,6720,6721,6727,6736,6737,6739,6740,6742,6743,6744,6745,6754,6755,6756,6757,6758,6759,6760,6761,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6786,6787,6788,6789,6790,6792,6794,6795,6796,6815,6816,6817,6823,6824,6825,6828,6829,6830,6832,6833,6834,6835,6836,6837,6841,6842,6843,6844,6845,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6884,6885,6886,6887,6888,6889,6890,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,\n9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9224,9225,9228,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9337,9338,9340,9341,9342,9343,9344,9345,9346,9350,9351,9352,9353,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9387,9388,9389,9390,9391,9394,9395,9396,9397,9398,9401,9402,9403,9404,9405,9406,9407,9408,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,\n9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9830,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,10942,10943,10944,10945,10946,10947,10948,10949,10950,10952,10953,10958,10959,10960,10961,10962,10963,10966,10967,10968,10969,10970,10971,10972,10974,10987,10988,10989,10992,11002,11003,11004,11005,11006,11007,11010,11011,11012,11013,11014,11019,11021,11024,11025,11026,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11046,11047,11048,11049,11050,11051,11057,11058,11059,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11092,11093,11094,11095,11096,11100,11101,11103,11104,11105,11106,\n11107,11108,11109,11110,11186,11188,11191\n\t\t} \n\t\tWeights: *1213 {\n\t\t\ta: 0.485887348651886,0.485664427280426,0.486068248748779,0.486428737640381,0.485347807407379,0.48554915189743,0.485024094581604,0.485015153884888,0.484783440828323,0.484618633985519,0.484691768884659,0.48446998000145,0.484771847724915,0.484603881835938,0.484998911619186,0.484975725412369,0.485310763120651,0.485482156276703,0.48562553524971,0.485992193222046,0.485862076282501,0.486377358436584,0.485958486795425,0.486538648605347,0.488901674747467,0.489226847887039,0.488413363695145,0.487895905971527,0.487497180700302,0.487329483032227,0.487433940172195,0.487773805856705,0.488253176212311,0.488746970891953,0.48913100361824,0.489307641983032,0.488778561353683,0.488978236913681,0.488482058048248,0.488169342279434,0.487927585840225,0.487823575735092,0.487883865833282,0.488089084625244,0.488382279872894,0.488686174154282,0.488922417163849,0.489029705524445,0.485335648059845,0.488437861204147,0.00416137091815472,0.0277236085385084,0.00643570115789771,0.0121639529243112,0.00909974239766598,0.00479171518236399,0.00500419642776251,0.0411929301917553,0.172316744923592,0.017515791580081,0.0122600849717855,0.0147061124444008,0.0363224595785141,0.00548371067270637,0.00576615380123258,0.00444313138723373,0.0309221986681223,0.0243861526250839,0.0407855473458767,0.0334193743765354,0.0287858210504055,0.0404290556907654,0.0133521696552634,0.0153562361374497,0.00394795602187514,0.294720143079758,0.332147061824799,0.451189517974854,0.440738648176193,0.52694171667099,0.56053215265274,0.0710113123059273,0.0754943490028381,0.0762333571910858,0.0324223935604095,0.0426231101155281,0.0419300906360149,0.054236363619566,0.0367760732769966,0.04872802272439,0.0433972254395485,0.0314307063817978,0.0425226949155331,0.0682456791400909,0.0300944074988365,0.0210858918726444,0.474399924278259,0.484295248985291,0.471498638391495,0.486365467309952,0.523557245731354,0.619279742240906,0.495875418186188,0.440913885831833,0.57122141122818,0.46727055311203,0.796168506145477,0.768812656402588,0.275839567184448,0.51499605178833,0.0743753090500832,\n0.198682188987732,0.411301642656326,0.529948353767395,0.479820847511292,0.500937938690186,0.0263245217502117,0.0424249768257141,0.0316543057560921,0.0201548170298338,0.522229611873627,0.678726494312286,0.66076672077179,0.173374861478806,0.30635866522789,0.916980922222137,0.150171235203743,0.0270051024854183,0.595347344875336,0.0752822607755661,0.0772483572363853,0.461545795202255,0.492276847362518,0.482892215251923,0.200412526726723,0.184160679578781,0.319056957960129,0.78528881072998,0.516901075839996,0.535338282585144,0.506751537322998,0.510367870330811,0.586331486701965,0.485847264528275,0.0350798517465591,0.0520882494747639,0.0562988594174385,0.0380594171583653,0.0421464815735817,0.0588397644460201,0.0591345317661762,0.0170080959796906,0.00808634608983994,0.0766877830028534,0.411884099245071,0.059490691870451,0.0679867044091225,0.0484188869595528,0.0754582211375237,0.0759724006056786,0.0657854825258255,0.0559916496276855,0.0736488029360771,0.591260671615601,0.889732003211975,0.487271994352341,0.498950868844986,0.479613840579987,0.785834491252899,0.572824597358704,0.708657145500183,0.82976233959198,0.885602414608002,0.511381566524506,0.889257073402405,0.876482963562012,0.872237324714661,0.858885586261749,0.69885516166687,0.712929487228394,0.754870116710663,0.826089322566986,0.498461186885834,0.796081304550171,0.862102627754211,0.716035425662994,0.776793837547302,0.468493312597275,0.370141059160233,0.935255467891693,0.0588337853550911,0.0423679687082767,0.364401966333389,0.409932792186737,0.502030313014984,0.424725890159607,0.206638872623444,0.423550963401794,0.47427025437355,0.512981176376343,0.535405337810516,0.478230774402618,0.450324267148972,0.350229740142822,0.15829062461853,0.437203019857407,0.072347916662693,0.0704113468527794,0.047590609639883,0.0304904915392399,0.219705045223236,0.453156352043152,0.565890371799469,0.696279883384705,0.459840565919876,0.470807462930679,0.0758446231484413,0.0758962407708168,0.19060306251049,0.814237117767334,0.589112102985382,0.650303483009338,0.479312092065811,0.0765506327152252,\n0.0573959946632385,0.0422562398016453,0.00594675494357944,0.0069339326582849,0.00750571070238948,0.00675412360578775,0.00756251020357013,0.0105591025203466,0.00956473592668772,0.0109887747094035,0.0118240602314472,0.0225534420460463,0.0116446474567056,0.0156345162540674,0.0126503072679043,0.0184017214924097,0.02912762388587,0.00835435185581446,0.010559193789959,0.013892981223762,0.0155445421114564,0.00457817409187555,0.00558604719117284,0.00587162794545293,0.00433524837717414,0.00438852561637759,0.00434144446626306,0.0155169852077961,0.0101993773132563,0.0118669904768467,0.0128709143027663,0.0612366311252117,0.0660941079258919,0.00496103381738067,0.00530405156314373,0.00533060822635889,0.00517881009727716,0.00564287463203073,0.00555076450109482,0.00627115042880178,0.00655965972691774,0.00349594838917255,0.00450626295059919,0.0270621012896299,0.0077071120031178,0.00553002953529358,0.0046713505871594,0.00450748903676867,0.00562692666426301,0.00778896035626531,0.00455631455406547,0.00974517222493887,0.0224243085831404,0.0199902169406414,0.0152868358418345,0.00588500546291471,0.00600074883550406,0.035562451928854,0.0668709725141525,0.0528643541038036,0.0286797415465117,0.00771835539489985,0.0144776906818151,0.0277420245110989,0.0613043904304504,0.0195530038326979,0.00477746222168207,0.00492516811937094,0.00538024539127946,0.00471328524872661,0.0245123784989119,0.00481082545593381,0.00498686451464891,0.00863044243305922,0.0080834086984396,0.945337295532227,0.575647234916687,0.877002120018005,0.951153039932251,0.913577795028687,0.906828939914703,0.848201870918274,0.911503732204437,0.92016065120697,0.501849293708801,0.516874551773071,0.485665053129196,0.90837961435318,0.510997176170349,0.576061427593231,0.504615783691406,0.50214034318924,0.927559852600098,0.463518470525742,0.459303140640259,0.458389520645142,0.453536838293076,0.437261372804642,0.414019107818604,0.33054906129837,0.0297942794859409,0.0283474512398243,0.0212143678218126,0.0201682690531015,0.0177914928644896,0.501258254051209,0.48866793513298,0.470411956310272,\n0.709233701229095,0.659839570522308,0.487657696008682,0.317249894142151,0.591846823692322,0.728317379951477,0.0744952410459518,0.0745085701346397,0.0748612061142921,0.0743759348988533,0.073490247130394,0.068679578602314,0.00504661211743951,0.00530615448951721,0.00626524724066257,0.00732154585421085,0.010610961355269,0.475530505180359,0.457699716091156,0.394022941589355,0.431551843881607,0.416367381811142,0.316126555204391,0.381182998418808,0.368567585945129,0.43494439125061,0.470878392457962,0.407958835363388,0.39290863275528,0.484929203987122,0.496927618980408,0.480869024991989,0.490965217351913,0.490739345550537,0.486781388521194,0.484060883522034,0.499140977859497,0.498905599117279,0.498835623264313,0.498779982328415,0.499234527349472,0.485513746738434,0.464017033576965,0.538316786289215,0.595498383045197,0.621743261814117,0.549961924552917,0.665306329727173,0.569559574127197,0.692502319812775,0.582057178020477,0.701874971389771,0.585762798786163,0.554784119129181,0.538209557533264,0.562252759933472,0.564088642597198,0.517423331737518,0.510753870010376,0.528257966041565,0.531076014041901,0.504643619060516,0.510926067829132,0.503247678279877,0.50249171257019,0.541680872440338,0.569454193115234,0.497938424348831,0.500130176544189,0.515246391296387,0.495763182640076,0.456928491592407,0.396899402141571,0.353381723165512,0.434999793767929,0.276955157518387,0.393005788326263,0.252266436815262,0.366692423820496,0.41437640786171,0.451891839504242,0.395257085561752,0.480457574129105,0.490162223577499,0.47022956609726,0.464729964733124,0.48442354798317,0.481425791978836,0.482649832963943,0.499012738466263,0.499266684055328,0.498823940753937,0.499305218458176,0.469599843025208,0.438429415225983,0.53112256526947,0.542715907096863,0.613118171691895,0.58654773235321,0.563611149787903,0.658518671989441,0.578721225261688,0.688739597797394,0.549276292324066,0.531564772129059,0.559191882610321,0.521686553955078,0.506235778331757,0.512114107608795,0.524585604667664,0.506911396980286,0.502553522586823,0.502240002155304,0.533898293972015,\n0.560736835002899,0.491795599460602,0.499462336301804,0.509774446487427,0.42494809627533,0.385932326316834,0.304804563522339,0.46055144071579,0.484394311904907,0.629915058612823,0.60269969701767,0.675524175167084,0.704133987426758,0.708353340625763,0.574112117290497,0.543562710285187,0.500358045101166,0.497666716575623,0.516063213348389,0.386784434318542,0.262241989374161,0.234151259064674,0.432636260986328,0.467396587133408,0.594870746135712,0.622586846351624,0.669934093952179,0.701067090034485,0.566249370574951,0.536252975463867,0.490995824337006,0.499499768018723,0.510661065578461,0.777069509029388,0.838457345962524,0.843078911304474,0.838057816028595,0.820897698402405,0.821104645729065,0.695372998714447,0.705706894397736,0.698846876621246,0.825857758522034,0.49937179684639,0.499444335699081,0.0497633591294289,0.0401905253529549,0.264088690280914,0.032361127436161,0.123556450009346,0.100497841835022,0.0158163420855999,0.195913910865784,0.283509016036987,0.274690121412277,0.157025143504143,0.138220191001892,0.192927986383438,0.208784431219101,0.107422702014446,0.101228043437004,0.0723254308104515,0.0319409519433975,0.0365838967263699,0.0275654830038548,0.0399823375046253,0.125946879386902,0.156849190592766,0.187684044241905,0.294972240924835,0.272793799638748,0.243949249386787,0.252712398767471,0.191005766391754,0.17241595685482,0.289673149585724,0.248418867588043,0.269982844591141,0.171875,0.250535398721695,0.296302527189255,0.274216443300247,0.0569527558982372,0.0694819986820221,0.0514626353979111,0.0695202350616455,0.272596299648285,0.243082493543625,0.0595687702298164,0.224856480956078,0.0474274083971977,0.263241499662399,0.146489635109901,0.248953223228455,0.216691300272942,0.138497024774551,0.130280002951622,0.214497163891792,0.194414034485817,0.043913759291172,0.0606266558170319,0.0890660583972931,0.106618732213974,0.127299964427948,0.123955383896828,0.110864944756031,0.0777153521776199,0.0856007188558578,0.101434029638767,0.182961791753769,0.171248659491539,0.193611741065979,0.726457953453064,0.767273843288422,\n0.949329018592834,0.947693228721619,0.967044532299042,0.735820055007935,0.937262535095215,0.931118547916412,0.614502966403961,0.471627980470657,0.859382033348084,0.806083083152771,0.875490844249725,0.610214293003082,0.480199694633484,0.554568469524384,0.85510516166687,0.743546366691589,0.777026474475861,0.969801247119904,0.937866985797882,0.932415068149567,0.949755430221558,0.973849058151245,0.919099807739258,0.907524585723877,0.885395228862762,0.895452082157135,0.910394549369812,0.88749772310257,0.480137258768082,0.587101459503174,0.573359906673431,0.484456360340118,0.488554537296295,0.887721240520477,0.895965039730072,0.85337495803833,0.121916674077511,0.0986250415444374,0.0632779374718666,0.388292282819748,0.0482536256313324,0.341414570808411,0.314487129449844,0.210128262639046,0.386271238327026,0.292671471834183,0.311388820409775,0.405498296022415,0.489171802997589,0.488262295722961,0.943245828151703,0.953772842884064,0.317680716514587,0.895645380020142,0.249509334564209,0.793233335018158,0.767973661422729,0.833147823810577,0.853008449077606,0.879653215408325,0.84781402349472,0.835546791553497,0.813656985759735,0.0672668591141701,0.0374465249478817,0.300698459148407,0.801475763320923,0.785678327083588,0.691152572631836,0.71686452627182,0.757701873779297,0.718370795249939,0.686868906021118,0.64873868227005,0.640286028385162,0.0668506473302841,0.0315555259585381,0.153499916195869,0.224143803119659,0.247747972607613,0.126997485756874,0.0675384625792503,0.220779538154602,0.304049074649811,0.23338919878006,0.130519986152649,0.0679196491837502,0.520654916763306,0.528996706008911,0.535331785678864,0.536645412445068,0.503449976444244,0.43629589676857,0.0170795656740665,0.0109098870307207,0.0372625589370728,0.0495645068585873,0.0435467474162579,0.0368288569152355,0.030829057097435,0.0521181859076023,0.0281774066388607,0.0246519558131695,0.0654876306653023,0.0794836431741714,0.0776911079883575,0.0642301216721535,0.932604014873505,0.956792771816254,0.903758704662323,0.932408511638641,0.890994369983673,0.931350827217102,0.926221489906311,\n0.89261782169342,0.902318000793457,0.935380637645721,0.897907257080078,0.900025606155396,0.827858746051788,0.872521638870239,0.931344091892242,0.924168646335602,0.909043908119202,0.849918723106384,0.928871214389801,0.91679835319519,0.883535027503967,0.891045331954956,0.919581055641174,0.866308569908142,0.890310704708099,0.930200397968292,0.937199473381042,0.873727262020111,0.795832455158234,0.695792376995087,0.741214990615845,0.804432034492493,0.719383418560028,0.808071553707123,0.729966223239899,0.82585597038269,0.761204361915588,0.846185445785522,0.832377910614014,0.801839828491211,0.815158605575562,0.75330924987793,0.79405814409256,0.836123406887054,0.808602333068848,0.704605877399445,0.801938593387604,0.669931352138519,0.669257760047913,0.761446237564087,0.702609121799469,0.861849069595337,0.868935704231262,0.845203518867493,0.839983463287354,0.843391120433807,0.861060738563538,0.862018942832947,0.844989657402039,0.836595356464386,0.835583984851837,0.842704594135284,0.921156764030457,0.928623974323273,0.905190229415894,0.887703061103821,0.916462361812592,0.915394067764282,0.837085366249084,0.900297462940216,0.814340591430664,0.875716626644135,0.866847991943359,0.797539174556732,0.873098731040955,0.816916644573212,0.88154935836792,0.899577438831329,0.9063361287117,0.943336188793182,0.953912019729614,0.95522928237915,0.738879859447479,0.642723858356476,0.649845957756042,0.843090772628784,0.889018356800079,0.940876007080078,0.953361690044403,0.563094675540924,0.509984493255615,0.513836324214935,0.570927262306213,0.689336657524109,0.78424996137619,0.84540319442749,0.866505682468414,0.845664799213409,0.884104430675507,0.806906640529633,0.806087851524353,0.745548367500305,0.693888068199158,0.718158841133118,0.729863703250885,0.762996673583984,0.816202282905579,0.851645767688751,0.798132956027985,0.756100535392761,0.713165760040283,0.67433774471283,0.671584486961365,0.70308119058609,0.87847501039505,0.76934027671814,0.934174656867981,0.849386751651764,0.923826694488525,0.958262145519257,0.750459969043732,0.955860435962677,\n0.56195741891861,0.507635831832886,0.512480020523071,0.572822690010071,0.686382949352264,0.783281445503235,0.843424558639526,0.940874516963959,0.861455321311951,0.804872274398804,0.869116067886353,0.874794006347656,0.88017064332962,0.825082838535309,0.655720293521881,0.525781691074371,0.524721145629883,0.95732182264328,0.954470098018646,0.954534590244293,0.942378044128418,0.926046431064606,0.906598687171936,0.905266165733337,0.912127315998077,0.897906839847565,0.890105247497559,0.891797184944153,0.882738769054413,0.933982729911804,0.938160479068756,0.90452766418457,0.884901225566864,0.846039295196533,0.768812417984009,0.766224563121796,0.961383998394012,0.958616733551025,0.958833813667297,0.948421061038971,0.907738268375397,0.858722865581512,0.812769114971161,0.79958975315094,0.640108168125153,0.816221296787262,0.566758334636688,0.525440812110901,0.672527134418488,0.694593787193298,0.863074839115143,0.879387557506561,0.847267925739288,0.855193912982941,0.825581133365631,0.835183918476105,0.89387184381485,0.886982619762421,0.866321206092834,0.884880602359772,0.860882103443146,0.818597674369812,0.842101633548737,0.776525318622589,0.742721915245056,0.676555931568146,0.637636542320251,0.806542873382568,0.868393003940582,0.884205520153046,0.849901020526886,0.834611296653748,0.835323333740234,0.82551372051239,0.809770405292511,0.80741560459137,0.824219048023224,0.819040238857269,0.85616147518158,0.91714471578598,0.911832690238953,0.847798645496368,0.664743065834045,0.572323858737946,0.819055914878845,0.9074786901474,0.870977461338043,0.920614838600159,0.918147087097168,0.920683085918427,0.929821848869324,0.932937502861023,0.888557374477386,0.885168313980103,0.900562405586243,0.912235021591187,0.914624512195587,0.788711607456207,0.804260492324829,0.812986791133881,0.819072604179382,0.824297904968262,0.859320640563965,0.912963271141052,0.919374227523804,0.917552053928375,0.906057834625244,0.859798669815063,0.847870171070099,0.949789941310883,0.954140841960907,0.948378205299377,0.935009598731995,0.80139023065567,0.783727645874023,\n0.790406882762909,0.65313047170639,0.654624581336975,0.644850671291351,0.837128400802612,0.818184018135071,0.66686749458313,0.814675390720367,0.791805326938629,0.654394924640656,0.659997522830963,0.56653755903244,0.696981251239777,0.710933864116669,0.577731668949127,0.570209503173828,0.593225657939911,0.480597913265228,0.483692198991776,0.605750918388367,0.616306304931641,0.588263213634491,0.579981029033661,0.603322803974152,0.479947537183762,0.477173000574112,0.479976087808609,0.504442453384399,0.704963505268097,0.500164926052094,0.499887257814407,0.687900900840759,0.581955969333649,0.581269025802612,0.49304935336113,0.476622134447098,0.49345138669014,0.50255560874939,0.481746703386307,0.479674130678177,0.50139182806015,0.590379059314728,0.600396871566772,0.478472590446472,0.478911131620407,0.482469409704208,0.716055870056152,0.588853597640991,0.501409530639648,0.614471137523651,0.600342035293579,0.590613424777985,0.588627755641937,0.588591754436493,0.579011499881744,0.582310616970062,0.572643458843231,0.580984592437744,0.590848982334137,0.602009296417236,0.480608761310577,0.478224217891693,0.478784024715424,0.501413822174072,0.503318071365356,0.679476320743561,0.681767165660858,0.685847163200378,0.695488452911377,0.694636702537537,0.693195402622223,0.702600240707397,0.500504910945892,0.499761641025543,0.499337792396545,0.499050945043564,0.497844457626343,0.497895330190659,0.498723387718201,0.500584185123444,0.499067336320877,0.498121321201324,0.496955037117004,0.496602416038513,0.495608180761337,0.495802491903305,0.497365981340408,0.498587638139725,0.544471323490143,0.535147666931152,0.526269614696503,0.527077794075012,0.524710237979889,0.523556470870972,0.527945518493652,0.533168017864227,0.825302302837372,0.834179222583771,0.843648850917816,0.857739388942719,0.858728110790253,0.87563282251358,0.88662976026535,0.726957321166992,0.646619617938995,0.63410347700119,0.628647983074188,0.631692171096802,0.640352308750153,0.639677703380585,0.646750509738922,0.661692976951599,0.750041663646698,0.753858208656311,0.765080034732819,\n0.797111213207245,0.812030851840973,0.656091213226318,0.657804548740387,0.924229085445404,0.945810437202454,0.942111432552338,0.917795717716217,0.968188226222992,0.946788191795349,0.92444109916687,0.953242957592011,0.935089528560638,0.918654680252075,0.858058393001556,0.881813287734985,0.912264347076416,0.917832732200623,0.908516407012939,0.91170597076416,0.941785216331482,0.957115828990936,0.935437202453613,0.923129141330719,0.924030184745789,0.935841739177704,0.926523387432098,0.929085969924927,0.93127703666687,0.917386949062347,0.916314721107483,0.921677827835083,0.93353807926178,0.919895529747009,0.929590404033661,0.904771506786346,0.917263805866241,0.935589730739594,0.89923757314682,0.922143816947937,0.951504290103912,0.948889017105103,0.0205629765987396,0.0385227985680103,0.0589834935963154,0.129257842898369,0.221451789140701,0.3001409471035,0.383116811513901,0.473615288734436,0.508742868900299,0.572621881961823,0.705073118209839,0.844708263874054,0.85796457529068,0.896636486053467,0.86396312713623,0.836566090583801,0.855798006057739,0.891260325908661,0.879905521869659,0.897559642791748,0.877030253410339,0.84106719493866,0.0408311784267426,0.063639223575592,0.121105849742889,0.232397735118866,0.317838340997696,0.391686528921127,0.470170110464096,0.515603005886078,0.591437518596649,0.761221408843994,0.881025552749634,0.837720394134521,0.729614734649658,0.602391183376312,0.536369681358337,0.477584779262543,0.348473966121674,0.258798807859421,0.196032047271729,0.08775744587183,0.0421604700386524,0.00849729776382446,0.00970384292304516,0.00899431388825178,0.00871625915169716,0.00986232236027718,0.00997159723192453,0.0101062580943108,0.0237986277788877,0.0240418426692486,0.0266467072069645,0.0270236767828465,0.00962186045944691,0.00684724608436227,0.0235628131777048,0.0101543748751283,0.01648367382586,0.0201386269181967,0.0271529238671064,0.026808263733983,0.0260190926492214,0.0205551907420158,0.026290524750948,0.0106055960059166,0.0152002796530724,0.0205874461680651,0.0106762526556849,0.0170283429324627,0.0133009422570467,\n0.00853356160223484,0.0194792449474335,0.0194181855767965,0.0160052366554737,0.0124485464766622,0.0106269288808107,0.0101191401481628,0.0109950825572014,0.0130144422873855,0.0134335104376078,0.0152226435020566,0.013090156018734,0.00847305823117495,0.0104275457561016,0.0122905261814594,0.00950068794190884,0.00979659147560596,0.0201588086783886,0.0269560553133488,0.0272463820874691,0.0200339201837778,0.0293582603335381,0.0293869338929653,0.0283271111547947,0.0283295307308435,0.0256121270358562,0.0255378093570471,0.0285402424633503,0.0187209453433752,0.0239661242812872,0.0270861200988293,0.0092220650985837,0.0259588118642569,0.0193630643188953,0.0282818600535393,0.0274064168334007,0.0248624049127102,0.0226008743047714,0.0143007067963481,0.0135410754010081,0.0120240962132812,0.013326863758266,0.0126821780577302,0.0237496141344309,0.024389436468482,0.0216351617127657,0.014059086330235,0.0112041374668479,0.0149165680631995,0.0200591329485178,0.0233019385486841,0.0178584437817335,0.0134067600592971,0.0130389947444201,0.0112436562776566,0.0267761740833521,0.0287934467196465,0.0270411297678947,0.0242357961833477,0.0266406517475843,0.0255027431994677,0.0287998355925083,0.0280229244381189,0.0297579634934664,0.0288060568273067,0.0237090364098549,0.0293429233133793,0.0285121109336615,0.0119260838255286,0.0113710556179285,0.0111018428578973,0.0136287482455373,0.0107910009101033,0.0130005907267332,0.0160967893898487,0.0204240214079618,0.0180781949311495,0.012203661724925,0.0336312055587769,0.0352119654417038,0.0394501127302647\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.210985148969358,0.177993646213452,-0.961146997467895,0,-0.975253674710361,0.104794319466303,-0.194675045018427,0,0.0660718200546389,0.978435725440565,0.195699004551353,0,35.704393192953,-5.80168884033437,10.4387178442025,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.210985159829393,-0.975253724909579,0.0660718234555528,0,0.177993636191846,0.104794313566051,0.978435670351535,0,-0.961146974134258,-0.194675040292327,0.195698999800395,0,3.53270865811464,37.4609842735306,1.27467830472218,1\n\t\t} \n\t}\n\tDeformer: 136812048, \"SubDeformer::Cluster_R_Thigh\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1426 {\n\t\t\ta: 4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,5330,5333,5476,5481,5482,5530,5531,5752,5765,5767,5910,5911,5959,6502,6503,6504,6505,6508,6509,6510,6511,6512,6513,6520,6521,6522,6523,6524,6546,6547,6548,6550,6551,6552,6553,6554,6555,6556,6557,6559,6560,6561,6562,6563,6564,6565,6571,6581,6583,6584,6585,6586,6596,6597,6598,6599,6600,6601,6602,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6625,6626,6627,6628,6629,6632,6634,6657,6658,6659,6666,6667,6668,6671,6672,6674,6675,6676,6677,6678,6679,6684,6685,6686,6687,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,\n6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6820,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6865,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6894,6895,6896,6897,6898,6899,6901,6902,6905,6906,6907,6908,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,\n7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7731,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7828,7830,7831,7832,7833,7834,7835,7836,7837,7838,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7873,7877,7878,7882,7883,7884,7885,7886,7887,7888,7889,7901,7902,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,\n7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7993,7994,7995,7996,7997,7998,7999,8000,9350,9351,9678,9679,9685,9686,9687,9696,9699,9700,9704,9705,9706,9721,9722,9723,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9960,10011,10012,10913,10915,10916,10917,10918,10919,10920,10921,10922,10927,10928,10933,10934,10935,10936,10977,10978,10979,10981,10982,10984,10985,10990,10991,10993,10994,10995,10996,10997,11008,11015,11016,11017,11018,11022,11023,11111,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11131,11132,11133,11134,11135,11136,11137,11143,11144,11145,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11177,11178,11179,11180,11181,11185,11186,11188,11189,11190,11191,11192\n\t\t} \n\t\tWeights: *1426 {\n\t\t\ta: 0.0121406214311719,0.0122508415952325,0.0118976887315512,0.0117173595353961,0.0124390851706266,0.0122070135548711,0.0126539431512356,0.0125598656013608,0.0128371920436621,0.0128599274903536,0.0129400799050927,0.0130276530981064,0.0129359588027,0.013020683079958,0.0128265898674726,0.0128425154834986,0.012640917673707,0.0125400200486183,0.0124277845025063,0.0121918143704534,0.0122436741366982,0.0118895908817649,0.01213822606951,0.0117150489240885,0.00939200725406408,0.00922133028507233,0.0096948491409421,0.0100468639284372,0.0103518152609468,0.0105281351134181,0.0105305276811123,0.0103600556030869,0.0100622130557895,0.00971498060971498,0.00940981507301331,0.00922850612550974,0.00949476845562458,0.00939072575420141,0.00967897940427065,0.00989330559968948,0.0100796613842249,0.0101881176233292,0.0101903360337019,0.0100863538682461,0.00990398414433002,0.00969143025577068,0.00950503349304199,0.00939473509788513,0.0125351883471012,0.00978698022663593,0.708606839179993,0.705857396125793,0.708693444728851,0.713237941265106,0.703308582305908,0.704482853412628,0.701644003391266,0.701737105846405,0.701303839683533,0.701177060604095,0.702373325824738,0.702935993671417,0.704565227031708,0.706540822982788,0.707297801971436,0.711040079593658,0.709844648838043,0.715243935585022,0.711524188518524,0.718027889728546,0.711881220340729,0.718633353710175,0.710813581943512,0.716881394386292,0.776921927928925,0.781997501850128,0.772049069404602,0.768704175949097,0.76778769493103,0.769531071186066,0.773449778556824,0.778489351272583,0.783312261104584,0.786642789840698,0.787595152854919,0.785901963710785,0.780841171741486,0.78394603729248,0.777854740619659,0.775794923305511,0.77521550655365,0.776267230510712,0.778660953044891,0.781753301620483,0.784719824790955,0.786772966384888,0.787365198135376,0.786332964897156,0.706616520881653,0.781346321105957,0.595562696456909,0.592740178108215,0.597659587860107,0.60121351480484,0.587876677513123,0.588220238685608,0.585933327674866,0.583541095256805,0.590661406517029,0.586367666721344,\n0.58176589012146,0.592983961105347,0.599109590053558,0.60893440246582,0.613502681255341,0.602687776088715,0.606080293655396,0.583518028259277,0.585001647472382,0.58845466375351,0.600851058959961,0.592422544956207,0.582261502742767,0.59635716676712,0.610490024089813,0.606726586818695,0.622400999069214,0.618498742580414,0.636538743972778,0.59371018409729,0.58416748046875,0.622708022594452,0.612394690513611,0.633858978748322,0.647794663906097,0.667890906333923,0.612781047821045,0.694311738014221,0.628657341003418,0.621947944164276,0.694720327854156,0.688933193683624,0.629056572914124,0.690963566303253,0.633292555809021,0.698847055435181,0.640542209148407,0.726858258247375,0.664061963558197,0.764679849147797,0.697108447551727,0.603879392147064,0.610298931598663,0.599850654602051,0.612626433372498,0.617496013641357,0.623805463314056,0.644330859184265,0.675829410552979,0.703979671001434,0.799726486206055,0.665815711021423,0.672482788562775,0.693197011947632,0.709540367126465,0.71259331703186,0.691519916057587,0.6813023686409,0.634478747844696,0.625135600566864,0.645098924636841,0.654494404792786,0.640835642814636,0.658283948898315,0.670843422412872,0.626901209354401,0.640329897403717,0.779515445232391,0.78886878490448,0.614881157875061,0.607614874839783,0.602537453174591,0.616504311561584,0.616610765457153,0.621333420276642,0.628176867961884,0.650015115737915,0.684783458709717,0.601844429969788,0.617423474788666,0.614545404911041,0.60051167011261,0.612510502338409,0.633224368095398,0.600748538970947,0.608348608016968,0.633217871189117,0.654657900333405,0.628166735172272,0.637831389904022,0.619139134883881,0.660599529743195,0.692957878112793,0.651106178760529,0.721908807754517,0.633278846740723,0.70828640460968,0.701894283294678,0.702260613441467,0.707958936691284,0.710699319839478,0.724626004695892,0.713609933853149,0.706369340419769,0.702649652957916,0.696391701698303,0.703982949256897,0.698264241218567,0.710292994976044,0.705470740795136,0.734420895576477,0.731867372989655,0.766797482967377,0.767536997795105,0.633915066719055,\n0.704809010028839,0.71831476688385,0.698667943477631,0.702968120574951,0.780551493167877,0.788594007492065,0.696524977684021,0.025169862434268,0.17743507027626,0.0417528785765171,0.0149603690952063,0.0314485989511013,0.0341492109000683,0.0370167717337608,0.00640609161928296,0.0271293967962265,0.0036061517894268,0.00314630009233952,0.0123215476050973,0.00494522554799914,0.0413915291428566,0.0415283180773258,0.0295643042773008,0.00912562478333712,0.00408301642164588,0.0054349759593606,0.0047268564812839,0.0043707862496376,0.00671374332159758,0.013554010540247,0.015572807751596,0.0180529374629259,0.00400473875924945,0.00994897074997425,0.0267131235450506,0.0106267211958766,0.00780256511643529,0.00644758902490139,0.00672720884904265,0.00755316903814673,0.00798691902309656,0.00861690938472748,0.00955253560096025,0.0106580853462219,0.00959823466837406,0.0110898446291685,0.0114441076293588,0.0156115349382162,0.011926575563848,0.0222729928791523,0.0112889474257827,0.0153295481577516,0.012909191660583,0.0292770471423864,0.0152281168848276,0.00450499448925257,0.00555948540568352,0.00584762869402766,0.00425887666642666,0.00437471829354763,0.00431323004886508,0.0152728538960218,0.00757876643911004,0.0125082237645984,0.066037654876709,0.0677948594093323,0.0125738857313991,0.00489287078380585,0.00520963547751307,0.00530074024572968,0.00512120826169848,0.00559488777071238,0.00552204204723239,0.00626269914209843,0.00658323988318443,0.00344414333812892,0.00447779893875122,0.0270733889192343,0.00785047933459282,0.00555364228785038,0.00464107654988766,0.00447748182341456,0.005645043682307,0.00791709125041962,0.00454014353454113,0.00940870586782694,0.0222935806959867,0.00586624816060066,0.00596039881929755,0.0354999750852585,0.0713171139359474,0.0538405925035477,0.0288048982620239,0.0160065516829491,0.0278465356677771,0.0634250044822693,0.0193962790071964,0.00478004431352019,0.00492434063926339,0.00523216277360916,0.00458334339782596,0.0267478786408901,0.0244745388627052,0.00489023560658097,0.0051567037589848,0.0167336519807577,0.00544742727652192,\n0.00686383992433548,0.0071214591152966,0.191019386053085,0.220372542738914,0.443121582269669,0.455715000629425,0.227879747748375,0.572845339775085,0.0685657858848572,0.0767723917961121,0.0764972791075706,0.0284278262406588,0.0561406426131725,0.0431331843137741,0.0424311570823193,0.04395667091012,0.0319374054670334,0.043060053139925,0.061846885830164,0.0298868026584387,0.021460996940732,0.544690907001495,0.47402435541153,0.483769923448563,0.471407413482666,0.486981511116028,0.464022278785706,0.524255752563477,0.61997526884079,0.461970031261444,0.447523772716522,0.571227729320526,0.467277556657791,0.78871762752533,0.764640212059021,0.272586435079575,0.0581459067761898,0.365322023630142,0.518994212150574,0.0766203030943871,0.195507556200027,0.490018874406815,0.486813902854919,0.399345725774765,0.483929514884949,0.479347556829453,0.50118488073349,0.0270621925592422,0.0431146696209908,0.0324231758713722,0.0208385195583105,0.52277660369873,0.661475300788879,0.148517176508904,0.274810284376144,0.717097461223602,0.16009484231472,0.0273086782544851,0.594453930854797,0.0753901824355125,0.0772575438022614,0.462949275970459,0.486051797866821,0.48539599776268,0.482352942228317,0.19377213716507,0.187886565923691,0.322050809860229,0.906217455863953,0.918335676193237,0.786625683307648,0.517066299915314,0.535502195358276,0.510716795921326,0.586380898952484,0.52104240655899,0.498748004436493,0.0355681627988815,0.0522505939006805,0.0566963478922844,0.0387060903012753,0.042708445340395,0.0591549165546894,0.0594617202877998,0.0175437070429325,0.00841336604207754,0.0766968280076981,0.415104597806931,0.0602047741413116,0.0683207213878632,0.0491678677499294,0.0754728838801384,0.0759880915284157,0.0661410689353943,0.0567237138748169,0.0737691223621368,0.633418679237366,0.486785143613815,0.50536060333252,0.479441195726395,0.480146616697311,0.483121246099472,0.511276483535767,0.709449052810669,0.831922292709351,0.881674110889435,0.887470006942749,0.876770496368408,0.873567700386047,0.862349271774292,0.744541883468628,0.785385251045227,0.864405274391174,\n0.935879349708557,0.498770326375961,0.864026546478271,0.714228093624115,0.536101758480072,0.401497185230255,0.938651204109192,0.0591612607240677,0.0429156497120857,0.378555536270142,0.424933820962906,0.499189227819443,0.202586621046066,0.425374507904053,0.474240958690643,0.513405799865723,0.535461008548737,0.491324007511139,0.481851667165756,0.451976180076599,0.366595089435577,0.160316362977028,0.439833015203476,0.0725618228316307,0.0706432089209557,0.0478608459234238,0.0311587397009134,0.21308071911335,0.435666292905808,0.566649258136749,0.468619704246521,0.0769848674535751,0.077823668718338,0.0520382076501846,0.0394917130470276,0.693198621273041,0.185054555535316,0.672030031681061,0.791468799114227,0.520808458328247,0.49973601102829,0.501943588256836,0.499871522188187,0.0123160965740681,0.948372364044189,0.574645638465881,0.927067160606384,0.954527795314789,0.914097964763641,0.943775653839111,0.914058208465576,0.517141699790955,0.890655338764191,0.782427728176117,0.905642569065094,0.930662453174591,0.0174932777881622,0.0198648050427437,0.0209019873291254,0.0241470485925674,0.0309172626584768,0.0312053728848696,0.0391135588288307,0.339840680360794,0.430046528577805,0.447129368782043,0.458955973386765,0.459699958562851,0.463844180107117,0.00849306397140026,0.0146585777401924,0.00937444064766169,0.60956734418869,0.711777687072754,0.739983439445496,0.00504391174763441,0.00535760400816798,0.00569094764068723,0.00670535862445831,0.00806801579892635,0.0108356466516852,0.0753843709826469,0.0757224038243294,0.0749938189983368,0.0742722302675247,0.0692730024456978,0.796917974948883,0.802588641643524,0.807209610939026,0.809173047542572,0.808085501194,0.824402511119843,0.843233942985535,0.803074777126312,0.825077176094055,0.823010802268982,0.829862356185913,0.833508431911469,0.849360466003418,0.801250517368317,0.793128728866577,0.780713319778442,0.774000704288483,0.794888734817505,0.798239409923553,0.825299918651581,0.801834642887115,0.805963695049286,0.800087213516235,0.79336816072464,0.778830647468567,0.787423253059387,0.801776587963104,\n0.858772218227386,0.854447066783905,0.850737750530243,0.842241585254669,0.826670169830322,0.793108701705933,0.814504384994507,0.817793011665344,0.837992191314697,0.815393090248108,0.798432469367981,0.810963213443756,0.813634872436523,0.818409025669098,0.805816054344177,0.799614131450653,0.795112609863281,0.794762969017029,0.803587794303894,0.813179910182953,0.86850494146347,0.858750760555267,0.849023580551147,0.833366572856903,0.82126647233963,0.872544646263123,0.867573082447052,0.867268443107605,0.845763564109802,0.836205542087555,0.839719176292419,0.850303113460541,0.860818028450012,0.918317377567291,0.918486177921295,0.909476399421692,0.903227865695953,0.747987389564514,0.75365674495697,0.749965846538544,0.753709673881531,0.781962871551514,0.783975124359131,0.756250858306885,0.779371798038483,0.770965278148651,0.749122202396393,0.765678226947784,0.70329737663269,0.708670139312744,0.705387771129608,0.709230542182922,0.711409032344818,0.704181611537933,0.719209790229797,0.921198844909668,0.752510130405426,0.799100637435913,0.798319518566132,0.796379506587982,0.763998687267303,0.717124164104462,0.707501947879791,0.722574353218079,0.807906568050385,0.839753091335297,0.84136825799942,0.82934308052063,0.911288857460022,0.900106549263,0.783974468708038,0.81630003452301,0.723835170269012,0.718316912651062,0.764115273952484,0.768223702907562,0.724165022373199,0.72052001953125,0.770703554153442,0.717623770236969,0.768704295158386,0.839786648750305,0.727094113826752,0.779557883739471,0.730585038661957,0.725931465625763,0.776144564151764,0.735690236091614,0.75948578119278,0.773145437240601,0.7225621342659,0.880705714225769,0.82598078250885,0.775107979774475,0.871436893939972,0.889169096946716,0.844534039497375,0.845540046691895,0.846522748470306,0.854915857315063,0.8920778632164,0.894299268722534,0.732543468475342,0.773456871509552,0.950825214385986,0.969283103942871,0.740236520767212,0.854900181293488,0.799582958221436,0.847225308418274,0.734141290187836,0.769206762313843,0.972008883953094,0.975831806659698,0.938882350921631,\n0.914127767086029,0.890340089797974,0.885062396526337,0.895122110843658,0.852914929389954,0.941078782081604,0.955900371074677,0.783710718154907,0.758698046207428,0.819364070892334,0.802570521831512,0.788347721099854,0.788150370121002,0.688285827636719,0.733043849468231,0.797011494636536,0.71169650554657,0.801984071731567,0.723223984241486,0.821078062057495,0.755426645278931,0.842377662658691,0.829339385032654,0.79728102684021,0.816121220588684,0.75395268201828,0.793606996536255,0.836301624774933,0.81099146604538,0.70647805929184,0.806005716323853,0.672845840454102,0.67341148853302,0.766445398330688,0.707209527492523,0.856030821800232,0.863097786903381,0.824632585048676,0.828430116176605,0.857899188995361,0.859728515148163,0.845887064933777,0.838799178600311,0.839101791381836,0.847654759883881,0.932397305965424,0.914330780506134,0.912998378276825,0.928670585155487,0.812658250331879,0.874298095703125,0.872081577777863,0.815775990486145,0.882383823394775,0.900112390518188,0.907724559307098,0.945751070976257,0.956339716911316,0.957941651344299,0.736182391643524,0.64156436920166,0.649076700210571,0.844456791877747,0.890936672687531,0.94377201795578,0.956134855747223,0.562585234642029,0.510322034358978,0.514137625694275,0.57107138633728,0.690173208713531,0.786438465118408,0.848345816135406,0.866082906723022,0.84492015838623,0.798344433307648,0.737167000770569,0.686202585697174,0.710266470909119,0.722948431968689,0.757045805454254,0.811590313911438,0.848826766014099,0.797695994377136,0.75676017999649,0.715186834335327,0.677431404590607,0.675951838493347,0.707814037799835,0.872733950614929,0.774448871612549,0.854348838329315,0.921636939048767,0.960894465446472,0.747694432735443,0.958584189414978,0.561441242694855,0.507969915866852,0.512782514095306,0.566574394702911,0.687234282493591,0.785499155521393,0.846379995346069,0.945776760578156,0.944040477275848,0.860576987266541,0.804284751415253,0.866923034191132,0.937155365943909,0.943481504917145,0.874237179756165,0.879157423973084,0.823953986167908,0.654940128326416,0.526018619537354,\n0.524963557720184,0.959881842136383,0.957106471061707,0.956878066062927,0.944541215896606,0.92781674861908,0.90781444311142,0.905358612537384,0.912126362323761,0.89648574590683,0.888637125492096,0.889766335487366,0.91316956281662,0.906045854091644,0.899924159049988,0.935516655445099,0.941309750080109,0.904953300952911,0.885624349117279,0.847198128700256,0.770461857318878,0.76787406206131,0.963826358318329,0.96113908290863,0.961089909076691,0.950632452964783,0.908831655979156,0.857835710048676,0.81183522939682,0.798646628856659,0.639582335948944,0.815626800060272,0.566958427429199,0.525693416595459,0.673427164554596,0.694212138652802,0.862183153629303,0.878029108047485,0.845140874385834,0.854517221450806,0.822884678840637,0.834131062030792,0.893841207027435,0.887415945529938,0.867077529430389,0.885372996330261,0.861731290817261,0.819874823093414,0.842385053634644,0.777085423469543,0.744409739971161,0.673969209194183,0.636548519134521,0.80493575334549,0.866995632648468,0.882088422775269,0.866331219673157,0.846528887748718,0.83049601316452,0.831366002559662,0.820866942405701,0.804013192653656,0.800460815429688,0.816933929920197,0.81192022562027,0.850354492664337,0.895127296447754,0.925061881542206,0.844556331634521,0.659179925918579,0.570643901824951,0.811593234539032,0.908195972442627,0.871232807636261,0.924025893211365,0.921512961387634,0.922115802764893,0.931954026222229,0.934867560863495,0.891904175281525,0.888459205627441,0.902878940105438,0.914022922515869,0.916135847568512,0.792705476284027,0.806619882583618,0.813966035842896,0.819875657558441,0.825136125087738,0.860069930553436,0.914043009281158,0.920753955841064,0.91921067237854,0.908249855041504,0.864333271980286,0.852148413658142,0.952171742916107,0.95646870136261,0.950879693031311,0.937963724136353,0.805840194225311,0.788787066936493,0.790082514286041,0.905307650566101,0.9073566198349,0.906107366085052,0.926503598690033,0.939972460269928,0.643545925617218,0.566204309463501,0.855476260185242,0.872918725013733,0.88499253988266,0.654054284095764,0.655697882175446,\n0.954368114471436,0.951784253120422,0.525358974933624,0.531103730201721,0.576018631458282,0.66177636384964,0.521119952201843,0.527190089225769,0.574280679225922,0.658276557922363,0.51849240064621,0.525535702705383,0.569722771644592,0.828037142753601,0.717865943908691,0.718957960605621,0.72654914855957,0.891153514385223,0.866597652435303,0.792984366416931,0.841738641262054,0.830993831157684,0.825460255146027,0.805268168449402,0.801807880401611,0.801998734474182,0.80620151758194,0.80648285150528,0.8196861743927,0.856441140174866,0.840847074985504,0.876736998558044,0.897193491458893,0.879593849182129,0.890488386154175,0.854347586631775,0.834697484970093,0.86210036277771,0.894861817359924,0.475770980119705,0.458353370428085,0.396623522043228,0.433141261339188,0.417630434036255,0.319892078638077,0.382260203361511,0.368590116500854,0.435862481594086,0.471226334571838,0.40870589017868,0.392782628536224,0.484944015741348,0.496751010417938,0.480986088514328,0.490831136703491,0.490555346012115,0.48654118180275,0.483698606491089,0.499076575040817,0.498843401670456,0.49879378080368,0.498762190341949,0.4991694688797,0.485532969236374,0.464642822742462,0.535651922225952,0.590244889259338,0.615910470485687,0.546950042247772,0.659544289112091,0.566442787647247,0.687947928905487,0.579388856887817,0.699130892753601,0.583877623081207,0.552021145820618,0.535593271255493,0.559898853302002,0.56237918138504,0.515810310840607,0.509566366672516,0.526057660579681,0.52871561050415,0.504014670848846,0.509806096553802,0.502772271633148,0.502121865749359,0.538578569889069,0.565036475658417,0.497771769762039,0.499860972166061,0.513701200485229,0.495591461658478,0.45454004406929,0.391833573579788,0.347644448280334,0.432123422622681,0.272249549627304,0.390310823917389,0.250164747238159,0.365234851837158,0.411932826042175,0.449440985918045,0.393866956233978,0.479107886552811,0.489363878965378,0.4683777987957,0.462633848190308,0.483733534812927,0.4803307056427,0.482127755880356,0.499041229486465,0.49930602312088,0.498829960823059,0.499354362487793,\n0.467380285263062,0.434641182422638,0.531138360500336,0.542760670185089,0.61461478471756,0.587907910346985,0.563326597213745,0.65929239988327,0.577728271484375,0.687950670719147,0.548891603946686,0.53145968914032,0.558209538459778,0.521568179130554,0.505979537963867,0.511844336986542,0.524451196193695,0.506610453128815,0.502292513847351,0.501941919326782,0.534197330474854,0.561727583408356,0.491019129753113,0.499508380889893,0.509556293487549,0.42677640914917,0.388839572668076,0.308941006660461,0.461290061473846,0.484441757202148,0.623691499233246,0.597078144550323,0.669393360614777,0.699311673641205,0.705560207366943,0.56942743062973,0.540330648422241,0.50005704164505,0.497496992349625,0.514450132846832,0.381174743175507,0.257222056388855,0.232263743877411,0.428449273109436,0.464983582496643,0.596508383750916,0.624365866184235,0.670899271965027,0.700318157672882,0.567449569702148,0.536635041236877,0.490132242441177,0.499542444944382,0.510450124740601,0.836060404777527,0.839611887931824,0.836895942687988,0.819555521011353,0.818680346012115,0.694415628910065,0.702977180480957,0.69442355632782,0.822489380836487,0.499316424131393,0.499484270811081,0.269271939992905,0.0363340899348259,0.200038895010948,0.287381142377853,0.278994768857956,0.135241404175758,0.188873007893562,0.20507188141346,0.10530211776495,0.100710526108742,0.0366321876645088,0.0321969203650951,0.0377073623239994,0.0413589552044868,0.129193872213364,0.160873353481293,0.298055350780487,0.276435554027557,0.247449889779091,0.255618959665298,0.195023968815804,0.176026284694672,0.292012274265289,0.250698626041412,0.273236691951752,0.174657389521599,0.252640843391418,0.298453480005264,0.277277916669846,0.0584391839802265,0.071047268807888,0.0527480281889439,0.0709102898836136,0.272021859884262,0.242320537567139,0.0598576068878174,0.224342092871666,0.0477189496159554,0.262468338012695,0.146162793040276,0.246551141142845,0.213548183441162,0.136089324951172,0.128732904791832,0.212865605950356,0.191950678825378,0.0356704853475094,0.0367216020822525,0.0367787405848503,\n0.0368168205022812,0.036780372262001,0.036685723811388,0.0367924906313419,0.0366408154368401,0.0358510501682758,0.03602459654212,0.175911843776703,0.16103008389473,0.182328402996063,0.554998397827148,0.952422797679901,0.93386310338974,0.929259359836578,0.6139115691185,0.300000011920929,0.607261776924133,0.300000011920929,0.551125824451447,0.938569843769073,0.937819421291351,0.947948038578033,0.9091557264328,0.904147624969482,0.890257716178894,0.910216808319092,0.880972325801849,0.585072457790375,0.480802029371262,0.589536905288696,0.576095461845398,0.300000011920929,0.484088629484177,0.487558513879776,0.0334288142621517,0.032782070338726,0.032839871942997,0.200000002980232,0.335145354270935,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.308288633823395,0.900275528430939,0.250959098339081,0.824565351009369,0.847789824008942,0.882460951805115,0.879214882850647,0.852208852767944,0.841133236885071,0.0353639125823975,0.200000002980232,0.668727517127991,0.699191093444824,0.720621943473816,0.756375908851624,0.744136810302734,0.711437523365021,0.677942633628845,0.640930593013763,0.633037149906158,0.0355646312236786,0.0357317328453064,0.308352440595627,0.034441702067852,0.503331482410431,0.520728409290314,0.53005975484848,0.534790754318237,0.535664319992065,0.512462198734283,0.503290057182312,0.43207922577858,0.0523942671716213,0.0287168957293034,0.0657621473073959,0.0810146406292915,0.0793797895312309,0.0658637285232544,0.4886814057827,0.93654078245163,0.959634304046631,0.908121883869171,0.935774326324463,0.890292286872864,0.930742979049683,0.928332030773163,0.895345449447632,0.900514721870422,0.935992121696472,0.898749768733978,0.894806563854218,0.820103764533997,0.91419917345047,0.877375066280365,0.934875965118408,0.927780985832214,0.916402637958527,0.914490222930908,0.880014002323151,0.886390507221222,0.917209446430206,0.862820744514465,0.852146029472351,0.887707710266113,0.928047180175781,0.93571674823761,0.878426074981689,\n0.919436573982239,0.949093282222748,0.94213742017746,0.919628381729126,0.970703184604645,0.950217664241791,0.928992509841919,0.956079125404358,0.937943637371063,0.921655356884003,0.861780822277069,0.885524451732636,0.91277140378952,0.914094805717468,0.910454094409943,0.914847612380981,0.945037424564362,0.960116565227509,0.938776850700378,0.925693988800049,0.926077365875244,0.934013366699219,0.926871538162231,0.932785332202911,0.935199439525604,0.923216760158539,0.914379596710205,0.921595096588135,0.937012314796448,0.923063695430756,0.926131665706635,0.899774134159088,0.91342967748642,0.933672666549683,0.901028752326965,0.92220151424408,0.0339444801211357,0.303750246763229,0.200000002980232,0.300000011920929,0.508266389369965,0.568917274475098,0.69706529378891,0.837648928165436,0.00947685819119215,0.0099763497710228,0.0164241753518581,0.0136153446510434,0.0167659018188715,0.0193188674747944,0.0165212638676167,0.0196010749787092,0.0152013218030334,0.0170877762138844,0.0179032739251852,0.0175033565610647,0.014290276914835,0.015932273119688,0.0180900525301695,0.0179031025618315,0.0781811326742172,0.0911547169089317,0.137335762381554,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.212126582860947,0.213561147451401,0.916650414466858,0.860767245292664,0.887980997562408,0.845418572425842,0.738132357597351,0.605785727500916,0.537369668483734,0.300000011920929,0.200000002980232,0.200000002980232,0.100000001490116,0.0340701937675476,0.0028827260248363,0.00179311831016093,0.00401651160791516,0.00892997067421675,0.0099483160302043,0.0100685115903616,0.0091486806049943,0.00919780507683754,0.0162262488156557,0.010299320332706,0.010226528160274,0.0159180611371994,0.00983505696058273,0.00625966535881162,0.0154218059033155,0.0102562345564365,0.0154791539534926,0.0155376037582755,0.0240341890603304,0.0147921089082956,0.0244445633143187,0.0284491814672947,0.0287205446511507,0.0280658081173897,0.0274832937866449,0.0139817874878645,0.00904152262955904,0.0104096597060561,0.0146032851189375,0.015713419765234,\n0.0161524098366499,0.0160696785897017,0.00990277994424105,0.00993933063000441,0.0107942000031471,0.0152961015701294,0.00890574045479298,0.00526867294684052,0.0125740431249142,0.00979874935001135,0.0101370560005307,0.0206324737519026,0.020552285015583,0.0277900211513042,0.0274502355605364,0.0297787487506866,0.0297703463584185,0.0287828836590052,0.028711199760437,0.0260352157056332,0.0260036587715149,0.0243596658110619,0.0190564673393965,0.0288612972944975,0.0274189785122871,0.00950775109231472,0.0198205951601267,0.0264423154294491,0.0287518054246902,0.0278525054454803,0.0252742879092693,0.0229827482253313,0.014639045111835,0.0138399545103312,0.0122612956911325,0.0136584080755711,0.0129717355594039,0.0248363558202982,0.0241523422300816,0.0219858847558498,0.0143308853730559,0.0114311994984746,0.0181903019547462,0.0237003993242979,0.0204702317714691,0.0136737115681171,0.0114700272679329,0.0132998926565051,0.0271537154912949,0.0246199890971184,0.0273829195648432,0.0291210822761059,0.0270285941660404,0.0283864550292492,0.0291346069425344,0.0259131416678429,0.0300872698426247,0.0291729345917702,0.0296658203005791,0.0240968931466341,0.0288406312465668,0.0122615313157439,0.112699277698994,0.109744668006897,0.0139341726899147,0.0110394479706883,0.127745643258095,0.00968854501843452\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.210987573672524,-0.177990473315178,-0.961146997997314,0,-0.975253101222208,0.104794805518868,0.194677614514139,0,0.0660724538480164,0.978436204615115,-0.195696163886547,0,35.72022134769,-5.7883350418252,-10.3666109901212,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.210987586997392,-0.975253162814077,0.0660724580208058,0,-0.177990479303431,0.10479480904455,0.978436237533301,0,-0.961147080740473,0.194677631273533,-0.195696180733625,0,-3.45758310962855,37.4609935830385,1.27468775649854,1\n\t\t} \n\t}\n\tDeformer: 132111264, \"SubDeformer::Cluster_Spine2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *952 {\n\t\t\ta: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,5301,5302,5303,5304,5307,5308,5309,5310,5311,5312,5313,5314,5317,5319,5324,5325,5326,5327,5328,5329,5335,5336,5337,5338,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5356,5371,5372,5373,5377,5378,5380,5382,5383,5385,5386,5389,5390,5391,5392,5393,5396,5401,5419,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5451,5458,5460,5464,5465,5469,5470,5471,5472,5473,5485,5487,5488,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5512,5513,5515,5517,5522,5523,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751,5757,5758,5759,5760,5761,5762,5766,5769,5770,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5787,5802,5803,5804,5808,5809,5811,5813,5814,5816,5817,5820,5821,5822,5823,5824,5832,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5863,5866,5867,5869,5870,5871,5872,5881,5888,5890,5891,5899,6496,6497,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10083,10084,10085,10086,10093,10094,10095,10096,10112,10116,10123,10127,10128,10129,10130,10131,10132,10133,10134,\n10135,10136,10140,10141,10142,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10192,10193,10194,10197,10199,10206,10207,10215,10216,10223,10224,10225,10226,10227,10228,10229,10230,10232,10239,10240,10241,10250,10251,10252,10253,10255,10256,10274,10275,10276,10277,10284,10285,10286,10287,10288,10289,10321,10324,10326,10328,10338,10339,10362,10363,10364,10365,10399,10400,10401,10402,10403,10404,10405,10408,10410,10411,10413,10414,10448,10456,10460,10461,10462,10463,10464,10467,10468,10470,10471,10472,10473,10474,10475,10482,10483,10484,10485,10486,10490,10491,10492,10493,10494,10495,10496,10497,10527,10528,10529,10536,10537,10540,10550,10565,10569,10570,10571,10572,10573,10575,10583,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10628,10629,10632,10633,10634,10637,10640,10648,10655,10656,10661,10662,10663,10664,10665,10666,10667,10668,10669,10677,10685,10686,10687,10688,10691,10692,10709,10710,10711,10712,10719,10720,10721,10722,10723,10724,10756,10758,10761,10771,10772,10791,10792,10793,10794,10828,10829,10830,10831,10832,10833,10834,10836,10837,10838,10839,10840,10842,10843,10871,10872,10873,10877,10887,10888,10889,10890,10891,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,\n10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11187,11189,11190,11192\n\t\t} \n\t\tWeights: *952 {\n\t\t\ta: 0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.359894096851349,0.131822139024735,0.321277141571045,0.160423785448074,0.722898602485657,0.445386797189713,0.45045331120491,0.402194231748581,0.480391561985016,0.577919542789459,0.447136491537094,0.380231142044067,0.412134319543839,0.148485705256462,0.318740755319595,0.15874582529068,0.181284919381142,0.272806972265244,0.1451396048069,0.353126019239426,0.495000004768372,0.563023507595062,0.738020777702332,0.899999976158142,0.238575875759125,0.355732023715973,0.364720314741135,0.36279034614563,0.504305362701416,0.418273389339447,0.21246899664402,0.484130948781967,1,1,0.717513561248779,0.609057724475861,1,0.190772294998169,0.189764350652695,0.379646718502045,0.410798698663712,0.310579746961594,0.410809904336929,0.343109250068665,0.151649907231331,0.372355252504349,0.432689905166626,0.705370366573334,0.446909070014954,0.397691786289215,0.493638128042221,0.249241650104523,0.408016115427017,0.1743523478508,0.580612659454346,0.316434442996979,0.144477933645248,0.492175936698914,0.409012824296951,0.168958619236946,0.447480082511902,0.494035720825195,0.534899950027466,0.577429175376892,0.539071023464203,0.499245464801788,0.450773000717163,0.357262283563614,0.359641790390015,0.300000011920929,0.510655224323273,0.393249958753586,0.122448980808258,0.300000011920929,0.574471712112427,0.383565634489059,0.390012353658676,0.394759863615036,0.500222086906433,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.413799285888672,0.550000011920929,0.150000005960464,0.150000005960464,0.119999997317791,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,\n0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.201034501194954,0.283556282520294,0.622648358345032,0.410614639520645,0.15689942240715,0.363164901733398,0.497522711753845,0.366464495658875,0.144129678606987,0.15396711230278,0.136388406157494,0.110584229230881,0.319683194160461,0.15707790851593,0.179601892828941,0.271901369094849,0.144837826490402,0.353604793548584,0.232929348945618,0.334674477577209,0.347276002168655,0.237096637487412,0.355479329824448,0.364682763814926,0.228183850646019,0.328231632709503,0.286706179380417,0.1999551653862,0.353024065494537,1,0.120854437351227,0.705098867416382,0.570705950260162,0.138418808579445,0.188803881406784,0.187508851289749,0.377009600400925,0.378021121025085,0.313959717750549,0.391879200935364,0.343293637037277,0.150570645928383,0.370510280132294,0.43337219953537,0.704165577888489,0.446447998285294,0.397987276315689,0.493255823850632,0.247754007577896,0.329767942428589,0.584638297557831,0.10365991294384,0.386701285839081,0.469178020954132,0.190165564417839,0.446778386831284,0.448410719633102,0.496600031852722,0.485161036252975,0.440406888723373,0.500257134437561,0.45028492808342,0.25,0.394021302461624,0.460566163063049,0.361449152231216,0.384900748729706,0.390994220972061,0.341767132282257,0.419938653707504,0.170603901147842,0.181894451379776,0.25753927230835,0.41343629360199,0.121487513184547,0.110730439424515,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,\n0.899999976158142,0.899999976158142,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.5,0.5,0.5,0.899999976158142,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.5,0.899999976158142,0.0210085958242416,0.0191792137920856,0.0192963965237141,0.0186389740556479,0.122763067483902,0.0245019607245922,0.0995751470327377,0.0995730087161064,0.0180597361177206,0.0178598538041115,0.179421439766884,0.171214923262596,0.128943219780922,0.122265592217445,0.131793394684792,0.121538914740086,0.120697997510433,0.0198810547590256,0.121450372040272,0.116797655820847,0.115617334842682,0.105570323765278,0.105481624603271,0.104324460029602,0.135003134608269,0.120837047696114,0.10340691357851,0.0984461605548859,0.09486985206604,0.0916204452514648,0.0895644500851631,0.0894134789705276,0.0967373102903366,0.0844946131110191,0.0784533694386482,0.094071164727211,0.101866342127323,0.0899942740797997,0.084604375064373,0.0803702101111412,0.0761234313249588,0.0726300999522209,0.0867085829377174,0.069316990673542,0.0856314152479172,0.0676203221082687,0.0842828527092934,0.067114382982254,0.0686155781149864,0.0656019300222397,0.0627633929252625,0.0593736432492733,0.057195819914341,0.0551217012107372,0.0533682592213154,0.0668788924813271,0.899999976158142,0.899999976158142,0.0634551644325256,0.061039824038744,0.899999976158142,0.0573312938213348,0.899999976158142,0.0553891472518444,0.0535443685948849,0.909212648868561,0.0892795249819756,0.132362753152847,0.0948472172021866,0.0853950530290604,0.0423025786876678,0.120995484292507,0.0709883868694305,0.0245840400457382,0.0281479936093092,0.899999976158142,0.899999976158142,0.0205661673098803,0.0625068545341492,0.0935042500495911,0.899999976158142,0.906017541885376,0.120485842227936,0.0772125869989395,0.0612680874764919,\n0.899999976158142,0.899999976158142,0.908125281333923,0.906064808368683,0.12110710889101,0.230990335345268,0.125681951642036,0.128095984458923,0.128825411200523,0.125952377915382,0.0230134893208742,0.0197366271167994,0.0314518921077251,0.331447571516037,0.228125557303429,0.899999976158142,0.125234216451645,0.232355818152428,0.121031150221825,0.0187431108206511,0.130838826298714,0.0202204361557961,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0279667302966118,0.133586198091507,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0994578823447227,0.0994723290205002,0.0994878485798836,0.0994757488369942,0.0992683842778206,0.78326690196991,0.651701331138611,0.67856639623642,0.722593247890472,0.899999976158142,0.908350229263306,0.227162957191467,0.0995369106531143,0.899999976158142,0.899999976158142,0.800000011920929,0.0994640290737152,0.899999976158142,0.899999976158142,0.675524592399597,0.899999976158142,0.810967564582825,0.810860931873322,0.811047852039337,0.899999976158142,0.0201524216681719,0.0311778448522091,0.136765494942665,0.131722420454025,0.127948045730591,0.127072706818581,0.0993012562394142,0.0991286635398865,0.099322073161602,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0161145962774754,0.0185560490936041,0.0324523970484734,0.122718594968319,0.0994901955127716,0.0995630919933319,0.038259107619524,0.0896085575222969,0.169828429818153,0.122217774391174,0.124139316380024,0.120667956769466,0.0380419753491879,0.121132530272007,0.031004436314106,0.103646159172058,0.120674453675747,0.0986567735671997,0.0917479991912842,0.0950431227684021,0.0894859209656715,0.0896541252732277,0.0968138575553894,0.09412532299757,0.0784110277891159,0.0844981074333191,0.0900865197181702,0.102103270590305,0.0802971869707108,0.0846083983778954,0.0724213346838951,0.0759714841842651,0.0867259800434113,0.0690862610936165,0.0856297239661217,0.0673950910568237,0.0842797458171844,0.0669263899326324,0.0652717873454094,0.0683451294898987,\n0.0589643530547619,0.0623894222080708,0.0568165369331837,0.0547826141119003,0.0530858412384987,0.0665799528360367,0.0630895420908928,0.899999976158142,0.899999976158142,0.0606382973492146,0.0568939559161663,0.899999976158142,0.0549896210432053,0.899999976158142,0.0531911998987198,0.908972263336182,0.0816975012421608,0.094945527613163,0.0854047760367393,0.0639795660972595,0.120819725096226,0.0708507224917412,0.0260804612189531,0.0219318121671677,0.899999976158142,0.0194744672626257,0.0623186081647873,0.0935470536351204,0.12045968323946,0.906039774417877,0.899999976158142,0.0771617144346237,0.899999976158142,0.899999976158142,0.0610728077590466,0.907944023609161,0.0715562850236893,0.125531867146492,0.125799506902695,0.128634288907051,0.127870187163353,0.0339642949402332,0.038983803242445,0.108174778521061,0.0945930778980255,0.899999976158142,0.0693850517272949,0.125101238489151,0.0958503782749176,0.120923519134521,0.0301489941775799,0.0456141158938408,0.130416601896286,0.899999976158142,0.899999976158142,0.899999976158142,0.040399719029665,0.13324661552906,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0976946875452995,0.0977993011474609,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.768164098262787,0.814141035079956,0.632749080657959,0.677894532680511,0.0795049443840981,0.0845270901918411,0.0980286151170731,0.0894803777337074,0.099321112036705,0.0979417786002159,0.908165276050568,0.0995413362979889,0.899999976158142,0.899999976158142,0.0994874984025955,0.899999976158142,0.899999976158142,0.899999976158142,0.720643103122711,0.630293428897858,0.766258358955383,0.899999976158142,0.899999976158142,0.0977180302143097,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,\n0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,\n0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,\n0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 1.15766822404049e-006,-1.28535908817908e-006,0.999999999997491,0,0.995290635085167,0.0969362522209254,-1.02761836151786e-006,0,-0.0969362522195669,0.995290635083767,1.3915257634653e-006,0,-49.9940905212278,-4.81498390970324,-0.0375257788007833,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 1.15766812530998e-006,0.995290550202856,-0.0969362439524608,0,-1.28535897856143e-006,0.096936243954034,0.995290550203658,0,0.999999999999517,-1.02761836151994e-006,1.39152576346812e-006,0,0.0375774663830155,50.2253922781078,-0.0539313180187548,1\n\t\t} \n\t}\n\tDeformer: 126300080, \"SubDeformer::Cluster_L_Knee2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1565 {\n\t\t\ta: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,6539,6541,6542,6543,6545,6566,6567,6568,6569,6570,6572,6573,6574,6576,6578,6580,6582,6587,6588,6589,6591,6592,6595,6604,6605,6606,6607,6608,6609,6630,6631,6633,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6662,6663,6665,6669,6680,6681,6682,6683,6689,6690,6691,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6866,6867,6868,6869,6870,6871,6903,6904,6909,6910,6911,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,\n8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8904,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8931,8932,8934,8935,8936,8937,8938,8940,8941,8942,8943,8944,8945,8946,8948,8949,8950,8951,8952,8953,8954,8955,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,\n9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,\n9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9680,9681,9682,9683,9684,9688,9689,9692,9693,9694,9698,9702,9703,9707,9708,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9740,9741,9742,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926\n\t\t} \n\t\tWeights: *1565 {\n\t\t\ta: 0.217937991023064,0.193066567182541,0.150126114487648,0.17124816775322,0.165598079562187,0.122377060353756,0.148478820919991,0.0956615433096886,0.140187636017799,0.0787397772073746,0.144371047616005,0.117074072360992,0.101211987435818,0.133439242839813,0.0911127552390099,0.069226861000061,0.0714743733406067,0.0480961725115776,0.10335074365139,0.126632317900658,0.149800479412079,0.0685747936367989,0.0428042337298393,0.0310193803161383,0.167778611183167,0.230801030993462,0.163355246186256,0.111697867512703,0.134922936558723,0.0986230075359344,0.0804232433438301,0.109543345868587,0.0710814893245697,0.0740618333220482,0.134507805109024,0.0736229047179222,0.0587472394108772,0.0512644127011299,0.0673453360795975,0.0499555207788944,0.0700478702783585,0.0618133395910263,0.0750201046466827,0.0922682136297226,0.0804645866155624,0.0456821210682392,0.0354322865605354,0.0335599854588509,0.143076032400131,0.0875507295131683,0.0984939783811569,0.168851777911186,0.165012300014496,0.0927857756614685,0.159829273819923,0.139958202838898,0.14929561316967,0.069535106420517,0.050439827144146,0.0829839482903481,0.102786235511303,0.0354951024055481,0.0229150280356407,0.0166076384484768,0.0108027188107371,0.0101655097678304,0.00608651200309396,0.072212278842926,0.0804904103279114,0.0394822135567665,0.0363513678312302,0.0183210987597704,0.0167477466166019,0.0103857610374689,0.0103328255936503,0.123184978961945,0.131587728857994,0.103567540645599,0.102400660514832,0.0416419804096222,0.0209475345909595,0.0313385166227818,0.0538950078189373,0.0102837020531297,0.0172615870833397,0.00782635621726513,0.0132249752059579,0.0325090512633324,0.0171860456466675,0.0176416132599115,0.0335634164512157,0.0136251226067543,0.0130008785054088,0.0652362108230591,0.0496616810560226,0.124598667025566,0.0696243494749069,0.0846680551767349,0.0544763430953026,0.11882134526968,0.172125160694122,0.19344200193882,0.220697969198227,0.200828805565834,0.119947507977486,0.0879858732223511,0.173677518963814,0.0491216033697128,0.137200742959976,0.0281743127852678,\n0.114367216825485,0.0199793707579374,0.0973046720027924,0.223634704947472,0.213968828320503,0.0652075260877609,0.115864135324955,0.0806689858436584,0.0329237170517445,0.0744070038199425,0.0204459112137556,0.0926106572151184,0.0211250614374876,0.157550111413002,0.165023967623711,0.066793404519558,0.0384841412305832,0.0155896889045835,0.00648322282359004,0.00328610604628921,0.118579044938087,0.158680856227875,0.0288678389042616,0.0127693628892303,0.0054703475907445,0.00413582799956203,0.0724539160728455,0.107869297266006,0.193620681762695,0.221625596284866,0.164402574300766,0.148051723837852,0.139042526483536,0.194092482328415,0.226165369153023,0.204499185085297,0.235685050487518,0.136574730277061,0.109518423676491,0.106049604713917,0.132017239928246,0.170960187911987,0.176611080765724,0.14548534154892,0.158295169472694,0.0775470584630966,0.0458164028823376,0.0200561676174402,0.00933938194066286,0.00501492712646723,0.168417036533356,0.129740998148918,0.0180741064250469,0.0374149270355701,0.00851493515074253,0.00643268646672368,0.08414426445961,0.121842563152313,0.202866554260254,0.155388861894608,0.00113062001764774,0.0011699030874297,0.00142485089600086,0.00137593131512403,0.00191429245751351,0.00360467471182346,0.00410669762641191,0.00478810397908092,0.00366930733434856,0.00185177964158356,0.00651489989832044,0.00790537614375353,0.00180479197297245,0.00497250165790319,0.00197080755606294,0.00203889538533986,0.00165602355264127,0.00176483765244484,0.00272715580649674,0.00230192486196756,0.00152403034735471,0.00248730834573507,0.00132022495381534,0.00276284059509635,0.00103867775760591,0.00196949602104723,0.00180855498183519,0.00192999036516994,0.00233792304061353,0.00125158741138875,0.00667747389525175,0.00140081695280969,0.00370705616660416,0.00188195053488016,0.0028317216783762,0.0026190890930593,0.00237803836353123,0.00129506958182901,0.0063701095059514,0.00740096950903535,0.0079770889133215,0.00791583675891161,0.00498282955959439,0.00367825804278255,0.00346787925809622,0.00271937483921647,0.00141765410080552,0.00240975338965654,\n0.00307231023907661,0.00263963523320854,0.0026630477514118,0.00183302361983806,0.00148538441862911,0.00261011580005288,0.0012280666269362,0.00128619314637035,0.001272784313187,0.00129027420189232,0.00192920712288469,0.00404529366642237,0.00393471261486411,0.00227775750681758,0.00469678221270442,0.00141284347046167,0.00184910569805652,0.00344931869767606,0.00138123158831149,0.00633459491655231,0.00395409855991602,0.00769313843920827,0.00885469187051058,0.00468115182593465,0.00788083299994469,0.00721679860725999,0.00124457373749465,0.00189409160520881,0.00751018477603793,0.00158069364260882,0.00212554424069822,0.00121294870041311,0.00207396456971765,0.00263531133532524,0.00229365844279528,0.00263653160072863,0.002594891237095,0.00523023307323456,0.00501290755346417,0.278524190187454,0.394556045532227,0.356071710586548,0.281402856111526,0.488670468330383,0.486498981714249,0.293616443872452,0.338438272476196,0.367852568626404,0.341589659452438,0.299342811107636,0.591005504131317,0.440767735242844,0.490833163261414,0.497860908508301,0.510798573493958,0.800929665565491,0.789895832538605,0.820857107639313,0.81392914056778,0.284495800733566,0.30119326710701,0.553172945976257,0.391654521226883,0.580089569091797,0.624157726764679,0.180358052253723,0.172835975885391,0.255893439054489,0.203865572810173,0.19896200299263,0.268915176391602,0.918198108673096,0.925586402416229,0.543842315673828,0.440254360437393,0.312048435211182,0.278778225183487,0.259148359298706,0.256495177745819,0.379354923963547,0.228678658604622,0.183471709489822,0.190731287002563,0.20325493812561,0.228591680526733,0.489701420068741,0.187608972191811,0.231067150831223,0.207314938306808,0.13930881023407,0.446447372436523,0.307628959417343,0.162401631474495,0.244091495871544,0.229731202125549,0.208574816584587,0.213357344269753,0.368181824684143,0.199297100305557,0.151384651660919,0.0941171497106552,0.499143898487091,0.207266747951508,0.098545603454113,0.509195327758789,0.164197608828545,0.284520030021667,0.87258243560791,0.937198340892792,0.929506897926331,0.939635574817657,\n0.937211036682129,0.811447024345398,0.838191568851471,0.830745756626129,0.814085900783539,0.683981478214264,0.707984209060669,0.814047157764435,0.773857712745667,0.765161633491516,0.841501414775848,0.568170011043549,0.560819149017334,0.498938947916031,0.499213874340057,0.453529417514801,0.500098705291748,0.605953276157379,0.360562413930893,0.431189507246017,0.500657081604004,0.499541968107224,0.499347507953644,0.499558687210083,0.499784559011459,0.289263367652893,0.271083652973175,0.31381094455719,0.364148586988449,0.0104604847729206,0.0117881782352924,0.00920889433473349,0.00868870317935944,0.0158582646399736,0.012913279235363,0.0122199170291424,0.0147344302386045,0.0398468933999538,0.0335258916020393,0.0688999518752098,0.0766271725296974,0.186611503362656,0.183087810873985,0.151672527194023,0.0356982983648777,0.42280113697052,0.452128559350967,0.40513089299202,0.463361591100693,0.436503082513809,0.38639509677887,0.427062779664993,0.103389844298363,0.172851338982582,0.0250426344573498,0.0206322781741619,0.00760459387674928,0.00763090094551444,0.00503380922600627,0.00518276123329997,0.00184386631008238,0.00554785551503301,0.0065411957912147,0.00249896850436926,0.00617913668975234,0.00226741447113454,0.00445352448150516,0.00413006078451872,0.0073011196218431,0.00764281861484051,0.00377230672165751,0.00695649860426784,0.0105930175632238,0.013415620662272,0.0140805477276444,0.0111596565693617,0.00858309958130121,0.00860860012471676,0.009040174074471,0.00876380875706673,0.0116116171702743,0.00915669836103916,0.00767848733812571,0.007785739377141,0.0373207852244377,0.0356807373464108,0.0712771713733673,0.0775921493768692,0.0338086485862732,0.0711394846439362,0.154912173748016,0.148190930485725,0.179008305072784,0.419658631086349,0.404332429170609,0.423344492912292,0.461189091205597,0.459054917097092,0.450298726558685,0.468799650669098,0.471357196569443,0.470733731985092,0.468281656503677,0.461129665374756,0.459681630134583,0.482899278402328,0.46652552485466,0.49783006310463,0.497768074274063,0.425248622894287,0.440236985683441,\n0.203102990984917,0.212519079446793,0.173639550805092,0.18523108959198,0.0252952706068754,0.0382022671401501,0.0494664870202541,0.0247309561818838,0.0959605649113655,0.017598282545805,0.0179799422621727,0.0963413417339325,0.00837020669132471,0.00975190475583076,0.00930315069854259,0.00995020940899849,0.0112953381612897,0.014461281709373,0.0136039676144719,0.00938993413001299,0.0104363551363349,0.010656557045877,0.0100247217342258,0.0326296165585518,0.0194478332996368,0.0119620682671666,0.0225890632718802,0.0124636711552739,0.0057713259011507,0.0092778904363513,0.010950168594718,0.00912692490965128,0.00848509091883898,0.00771763687953353,0.00625959457829595,0.00867180153727531,0.00519386120140553,0.00542215025052428,0.00709175365045667,0.00440816627815366,0.00893468875437975,0.0327585935592651,0.0128655480220914,0.00944874808192253,0.029045645147562,0.00955470465123653,0.0319792591035366,0.0514524430036545,0.00910031981766224,0.0809905454516411,0.00846797414124012,0.0040576639585197,0.00289000198245049,0.291601538658142,0.305837243795395,0.495860993862152,0.497062891721725,0.284753739833832,0.497428089380264,0.498450934886932,0.4991714656353,0.498457342386246,0.498275578022003,0.499232739210129,0.499325484037399,0.498723983764648,0.499112755060196,0.499192982912064,0.498770505189896,0.499476730823517,0.499507606029511,0.499369323253632,0.498765498399735,0.19354435801506,0.497004777193069,0.498025625944138,0.499035775661469,0.498643934726715,0.0101069388911128,0.498003214597702,0.498488068580627,0.124844379723072,0.00847867224365473,0.009872623719275,0.00662050535902381,0.00963056832551956,0.00449067214503884,0.00523729017004371,0.00585944904014468,0.00689659500494599,0.00176204845774919,0.00231578364036977,0.00216982280835509,0.00305611151270568,0.00286427279934287,0.00455412268638611,0.00240973522886634,0.00170441914815456,0.174829512834549,0.463668048381805,0.437743693590164,0.0907380133867264,0.0942813456058502,0.0316141545772552,0.447386860847473,0.494165003299713,0.254411548376083,0.475739121437073,0.495833784341812,\n0.481321185827255,0.497110813856125,0.0143417259678245,0.0915817469358444,0.441890031099319,0.17601589858532,0.0104726823046803,0.0110441735014319,0.00322920642793179,0.180409610271454,0.0045286095701158,0.0840634927153587,0.073136493563652,0.00281742191873491,0.00334198912605643,0.498167306184769,0.498650819063187,0.00585331814363599,0.497448414564133,0.48209011554718,0.39910900592804,0.398386210203171,0.421490728855133,0.0171202421188354,0.159211203455925,0.15203121304512,0.0257838927209377,0.143713772296906,0.27756530046463,0.267116546630859,0.166035607457161,0.181657657027245,0.202675879001617,0.156768962740898,0.158613741397858,0.25874650478363,0.294418185949326,0.310221552848816,0.333954304456711,0.306745558977127,0.347377270460129,0.37422052025795,0.396495938301086,0.335510343313217,0.420392662286758,0.396934300661087,0.311897039413452,0.252103835344315,0.285647630691528,0.31638965010643,0.289389371871948,0.237182766199112,0.358209788799286,0.330744564533234,0.294395178556442,0.216423064470291,0.235265210270882,0.177145376801491,0.154336825013161,0.221582189202309,0.203899502754211,0.291168242692947,0.265926122665405,0.222789525985718,0.382866770029068,0.379625827074051,0.354701280593872,0.298949152231216,0.32309752702713,0.00353628769516945,0.0043956097215414,0.00995998084545136,0.00464406609535217,0.00191318255383521,0.00239988300018013,0.00144379446282983,0.00101906375493854,0.00216976762749255,0.0185377430170774,0.00356011069379747,0.0051389541476965,0.00240384507924318,0.0039246529340744,0.00358820962719619,0.00492909690365195,0.00868967268615961,0.012543841265142,0.00162668875418603,0.00144240353256464,0.00167010014411062,0.00689264992251992,0.00304925511591136,0.0106126070022583,0.0109203718602657,0.0107194166630507,0.0107699315994978,0.00377897336147726,0.00214204099029303,0.00185688678175211,0.00528150983154774,0.00216559180989861,0.00740047078579664,0.0178566388785839,0.0126037206500769,0.00112852884922177,0.00547391129657626,0.00875450298190117,0.0106500312685966,0.00543188489973545,0.00321708037517965,\n0.0028818033169955,0.00511367572471499,0.00115782092325389,0.00272735022008419,0.0128676798194647,0.0186832193285227,0.00801458023488522,0.00457123108208179,0.00317270634695888,0.00154793937690556,0.0102164736017585,0.00986851658672094,0.009819395840168,0.0100564016029239,0.00538678048178554,0.0102701392024755,0.0117501271888614,0.0102348234504461,0.0146714728325605,0.0262550786137581,0.0271754302084446,0.051020797342062,0.0325711853802204,0.0242357943207026,0.0131749734282494,0.0136630134657025,0.017205037176609,0.0239689871668816,0.00827865395694971,0.0125653436407447,0.003217370249331,0.00539044104516506,0.00601178500801325,0.00432546203956008,0.00686935102567077,0.00861361064016819,0.0101967453956604,0.00765288062393665,0.00386519869789481,0.00497460691258311,0.00544665800407529,0.0212502051144838,0.0204925052821636,0.0234464816749096,0.00825588870793581,0.130269840359688,0.116699047386646,0.102264374494553,0.498141705989838,0.481745272874832,0.497402459383011,0.109394714236259,0.079887181520462,0.0448430106043816,0.05612413585186,0.348335713148117,0.321103662252426,0.136996060609818,0.825557231903076,0.726665556430817,0.574333310127258,0.499330878257751,0.4996238052845,0.49933186173439,0.49904191493988,0.498877853155136,0.589865803718567,0.588133454322815,0.709356665611267,0.82204669713974,0.798275709152222,0.761979937553406,0.801986038684845,0.813846588134766,0.830662250518799,0.732072174549103,0.738728821277618,0.721726655960083,0.496359467506409,0.483749479055405,0.507127046585083,0.462187528610229,0.355508267879486,0.394198328256607,0.389929682016373,0.422440081834793,0.370403230190277,0.312455385923386,0.337098896503448,0.319699198007584,0.357336074113846,0.327188402414322,0.275863766670227,0.237348303198814,0.46007451415062,0.495663166046143,0.498662918806076,0.896295666694641,0.88693642616272,0.815315902233124,0.586030066013336,0.504073619842529,0.808114111423492,0.795565605163574,0.7134850025177,0.57805347442627,0.500971138477325,0.496326148509979,0.461786419153214,0.892370939254761,0.876114130020142,\n0.794561326503754,0.641628742218018,0.312976479530334,0.201786264777184,0.112239710986614,0.567541480064392,0.700277745723724,0.779269278049469,0.792389869689941,0.852401494979858,0.863027215003967,0.855158448219299,0.959153354167938,0.955068171024323,0.826405823230743,0.866171360015869,0.893685817718506,0.875145792961121,0.944960653781891,0.859789371490479,0.921505987644196,0.849886894226074,0.522505104541779,0.539905965328217,0.603489339351654,0.566338777542114,0.580175757408142,0.680625438690186,0.614581108093262,0.627249896526337,0.562271416187286,0.527245342731476,0.588694632053375,0.60365891456604,0.513323426246643,0.501584470272064,0.517501533031464,0.50719553232193,0.506801426410675,0.510469377040863,0.512995004653931,0.499140977859497,0.498905599117279,0.498835623264313,0.498779982328415,0.499234527349472,0.513076305389404,0.534325361251831,0.459902405738831,0.40277636051178,0.376346588134766,0.44800540804863,0.332356840372086,0.427796334028244,0.304846733808517,0.414865493774414,0.295435309410095,0.411079108715057,0.442986249923706,0.460114300251007,0.435196161270142,0.43331316113472,0.481134057044983,0.487723857164383,0.470089703798294,0.467404961585999,0.493127942085266,0.48733189702034,0.494223415851593,0.49494481086731,0.456948399543762,0.429066330194473,0.500806391239166,0.498532742261887,0.483417391777039,0.502954125404358,0.541422784328461,0.601390898227692,0.644598543643951,0.562959849834442,0.720340251922607,0.603916108608246,0.74493545293808,0.629328787326813,0.583151161670685,0.546524524688721,0.601599276065826,0.518307745456696,0.508589446544647,0.528307914733887,0.533909976482391,0.513328611850739,0.516984522342682,0.514529645442963,0.499012738466263,0.499266684055328,0.498823940753937,0.499305218458176,0.529254913330078,0.560231685638428,0.467360258102417,0.455509841442108,0.38519886136055,0.411968350410461,0.433961093425751,0.33932089805603,0.418325275182724,0.308706313371658,0.448693335056305,0.466994106769562,0.438370853662491,0.476920962333679,0.492501705884933,0.486679792404175,0.47413045167923,\n0.491592615842819,0.495432138442993,0.495353788137436,0.464972317218781,0.438023507595062,0.507173299789429,0.499462336301804,0.489138394594193,0.57302188873291,0.611708164215088,0.692197263240814,0.537839472293854,0.514241337776184,0.368297398090363,0.395665526390076,0.322331756353378,0.293465346097946,0.289082944393158,0.424469411373138,0.455118209123611,0.498355507850647,0.501125514507294,0.482653737068176,0.611623883247375,0.735338807106018,0.763435781002045,0.566104888916016,0.531529128551483,0.403756648302078,0.375872433185577,0.328113824129105,0.296638131141663,0.432593464851379,0.462690770626068,0.508043050765991,0.499496638774872,0.488325774669647,0.220216602087021,0.158084243535995,0.153392732143402,0.158346980810165,0.175082996487617,0.175009846687317,0.302030146121979,0.291526287794113,0.298471540212631,0.170197010040283,0.49937179684639,0.499444335699081,0.867103099822998,0.914438545703888,0.920026957988739,0.932686567306519,0.89571750164032,0.868821501731873,0.731371462345123,0.947578132152557,0.963693678379059,0.872940897941589,0.896303176879883,0.976179599761963,0.794882595539093,0.71112322807312,0.721732616424561,0.839061200618744,0.856555044651031,0.804526925086975,0.789306282997131,0.887579202651978,0.893890917301178,0.91931164264679,0.957172393798828,0.948259770870209,0.927057504653931,0.945972621440887,0.867647588253021,0.834470868110657,0.810692071914673,0.699405074119568,0.720930814743042,0.747544467449188,0.738045692443848,0.800284683704376,0.818203568458557,0.705126464366913,0.742816030979156,0.726684033870697,0.818915724754334,0.740670919418335,0.698642075061798,0.72279292345047,0.924771547317505,0.910344541072845,0.930291533470154,0.909846127033234,0.72337418794632,0.754449546337128,0.923452615737915,0.768020153045654,0.937496244907379,0.732703745365143,0.846335530281067,0.747398257255554,0.779557764530182,0.856311082839966,0.863609313964844,0.778908848762512,0.800135552883148,0.949707448482513,0.932618141174316,0.901033520698547,0.881569683551788,0.858479797840118,0.861806094646454,0.876955330371857,\n0.913475751876831,0.902207493782043,0.884879410266876,0.815134942531586,0.827250480651855,0.804454684257507,0.272561937570572,0.231209844350815,0.0461372584104538,0.0474661439657211,0.0256336480379105,0.26273712515831,0.0582256130874157,0.0627454370260239,0.384406566619873,0.526714742183685,0.137601256370544,0.191710874438286,0.120221570134163,0.388462126255035,0.518283665180206,0.444480806589127,0.142405226826668,0.254854619503021,0.221037641167641,0.00602481933310628,0.0129641862586141,0.0140214012935758,0.0106260320171714,0.0104052014648914,0.0760594680905342,0.090136930346489,0.111144416034222,0.102193497121334,0.087060958147049,0.110249400138855,0.518938064575195,0.411055415868759,0.424786895513535,0.51365065574646,0.51007604598999,0.106127068400383,0.098522275686264,0.143285870552063,0.848161458969116,0.87744414806366,0.883877217769623,0.882674098014832,0.814743518829346,0.609453201293945,0.90973961353302,0.894276797771454,0.656733632087708,0.683802425861359,0.787524402141571,0.609966337680817,0.700185656547546,0.681110978126526,0.590685248374939,0.812042593955994,0.85488498210907,0.84349662065506,0.0114013524726033,0.02998979203403,0.82684862613678,0.862479329109192,0.899892747402191,0.952809393405914,0.681385636329651,0.100912190973759,0.747959554195404,0.205182448029518,0.230525285005569,0.165347367525101,0.145352244377136,0.118710324168205,0.149910762906075,0.161987856030464,0.183680325746536,0.922620356082916,0.936474502086639,0.950519919395447,0.921152293682098,0.698137700557709,0.196451008319855,0.212425723671913,0.307027161121368,0.281326144933701,0.241061449050903,0.280320852994919,0.312100201845169,0.350002586841583,0.358223885297775,0.923398077487946,0.948159337043762,0.952609419822693,0.910579383373261,0.842493653297424,0.76557469367981,0.74022364616394,0.854901850223541,0.889715433120728,0.871529042720795,0.814254105091095,0.769732594490051,0.691287755966187,0.756349682807922,0.84500390291214,0.882726013660431,0.943487286567688,0.909797847270966,0.477754294872284,0.46895295381546,0.463263988494873,\n0.461836606264114,0.495633959770203,0.562544822692871,0.954037547111511,0.972498118877411,0.973097383975983,0.965942442417145,0.938558042049408,0.893055737018585,0.87899911403656,0.889513552188873,0.91115391254425,0.924653291702271,0.933769881725311,0.955277562141418,0.962941586971283,0.918522894382477,0.901508152484894,0.903438150882721,0.918805599212646,0.00601938785985112,0.00834209378808737,0.00902128033339977,0.0135680222883821,0.0111072529107332,0.0150740267708898,0.0156109463423491,0.010163702070713,0.00943706650286913,0.0140196084976196,0.0099268015474081,0.0936370566487312,0.168840080499649,0.122784204781055,0.0621220096945763,0.0685685127973557,0.0819874033331871,0.144232213497162,0.064440906047821,0.076024703681469,0.113322794437408,0.105542831122875,0.0744545161724091,0.130451485514641,0.00976161099970341,0.0145163740962744,0.0138357421383262,0.121410675346851,0.200015738606453,0.301278203725815,0.255931317806244,0.191387891769409,0.277878195047379,0.186294168233871,0.266687244176865,0.167191758751869,0.234919160604477,0.144132137298584,0.158535718917847,0.192940473556519,0.177407220005989,0.243259996175766,0.200750648975372,0.156268417835236,0.185902982950211,0.292245775461197,0.194213286042213,0.327614605426788,0.329183489084244,0.234623968601227,0.294932305812836,0.130018100142479,0.123868778347969,0.144459187984467,0.146622702479362,0.141849026083946,0.12442585080862,0.123008102178574,0.144393637776375,0.154975846409798,0.15810427069664,0.151754051446915,0.0537906028330326,0.0468266531825066,0.065875843167305,0.0777100026607513,0.0168748777359724,0.0163245107978582,0.00927029177546501,0.0200852919369936,0.0175574477761984,0.0358083657920361,0.0347359552979469,0.016555942595005,0.0400237366557121,0.0218191370368004,0.020828140899539,0.0365235395729542,0.0203306749463081,0.0189031958580017,0.0160851050168276,0.0162520669400692,0.00517894886434078,0.00588505202904344,0.00754177523776889,0.0102942585945129,0.0103370044380426,0.0127858771011233,0.012725648470223,0.00225719925947487,0.00247967103496194,0.00295583484694362,\n0.00343910092487931,0.00394250405952334,0.00460764346644282,0.00465325219556689,0.120615385472775,0.14638939499855,0.0259825028479099,0.0130146369338036,0.190072625875473,0.251881569623947,0.303522676229477,0.279425084590912,0.26716735959053,0.233579471707344,0.179389476776123,0.139929533004761,0.197481900453568,0.24097965657711,0.284078896045685,0.323536843061447,0.327070295810699,0.294761389493942,0.114823281764984,0.226902142167091,0.0431271307170391,0.145354419946671,0.0154700810089707,0.0150748556479812,0.00514666130766273,0.0122474236413836,0.00207593385130167,0.00224691699258983,0.00269671017304063,0.00313036795705557,0.00352810276672244,0.00421923352405429,0.00424055708572268,0.00718909921124578,0.131111428141594,0.1904236972332,0.117000259459019,0.112939313054085,0.0377954840660095,0.0207168702036142,0.00744775822386146,0.00290136318653822,0.00263731856830418,0.0318821966648102,0.033955492079258,0.0340485014021397,0.0420655496418476,0.0518187135457993,0.0640029832720757,0.0653755888342857,0.0614099651575089,0.0705062747001648,0.0752784609794617,0.0743302553892136,0.0811913460493088,0.0129808885976672,0.00815192423760891,0.0342321582138538,0.0194837842136621,0.00951037462800741,0.00378233869560063,0.00344818504527211,0.0190328881144524,0.0203976389020681,0.0197686478495598,0.0239295717328787,0.0362217575311661,0.0423260144889355,0.0255603417754173,0.0229577608406544,0.00873913522809744,0.0217538680881262,0.00433075288310647,0.0036963103339076,0.00499796494841576,0.00928898807615042,0.0450254566967487,0.0831537395715714,0.135650485754013,0.130224153399467,0.16381923854351,0.155462980270386,0.0740097686648369,0.0420636013150215,0.0245508179068565,0.0395204722881317,0.0222378242760897,0.0114340204745531,0.0219455249607563,0.0109243430197239,0.00495197344571352,0.00366251519881189,0.0061621661297977,0.0185748841613531,0.0373528525233269,0.0796886682510376,0.134703129529953,0.156516999006271,0.154058814048767,0.166036114096642,0.183200716972351,0.187224566936493,0.170882597565651,0.175537288188934,0.13520647585392,\n0.0566487982869148,0.0172476153820753,0.00909297820180655,0.00375358271412551,0.00212639267556369,0.176418080925941,0.0626516193151474,0.118131652474403,0.0054199667647481,0.00607475265860558,0.0113804060965776,0.02058863081038,0.0292676221579313,0.00431942893192172,0.00483407266438007,0.0111857131123543,0.0219631418585777,0.0346396937966347,0.207832738757133,0.191206589341164,0.181002408266068,0.174648985266685,0.168996915221214,0.130842283368111,0.0597061589360237,0.0324756540358067,0.0199867393821478,0.0100693386048079,0.135849490761757,0.14685232937336,0.0373170301318169,0.021842535585165,0.0178676676005125,0.0135938273742795,0.195307448506355,0.213279038667679,0.204697161912918,0.00610648980364203,0.00557427806779742,0.00583919091150165,0.00909410696476698,0.0073732896707952,0.00370940519496799,0.012044102884829,0.0105202021077275,0.00344539806246758,0.00359235098585486,0.00363875622861087,0.0143134286627173,0.0115217352285981,0.00785835832357407,0.0104260966181755,0.00781506765633821,0.00501787103712559,0.00545677542686462,0.00821452960371971,0.010861468501389,0.00835950020700693,0.00238670338876545,0.0143737019971013,0.0138825587928295,0.0107513386756182,0.00915904622524977,0.00299868453294039,0.00963104423135519,0.00679265987128019,0.012193463742733,0.00867342483252287,0.00494985934346914,0.00614452222362161,0.00640818430110812,0.00739147840067744,0.00805440545082092,0.00842596776783466,0.00990130472928286,0.0104558849707246,0.00973545853048563,0.0086657702922821,0.00753398612141609,0.00441383477300406,0.00373748014681041,0.0138004226610065,0.014424704015255,0.0142838153988123,0.0120262494310737,0.0115351295098662,0.0107753975316882,0.0108194667845964,0.00225539784878492,0.00285463081672788,0.00352868554182351,0.0021801870316267,0.00267730024643242,0.00316165899857879,0.00324151059612632,0.00410548970103264,0.00519956555217505,0.00550984358415008,0.0070008379407227,0.00705693243071437,0.00594623200595379,0.00503702042624354,0.0078852828592062,0.00768171390518546,0.00841241609305143,0.00822311267256737,0.00904565863311291,\n0.0104596195742488,0.00985451228916645,0.00801316741853952,0.0107286684215069,0.0114901326596737,0.0124793574213982,0.0123585993424058,0.0101920366287231,0.00971191469579935,0.0085464296862483,0.00770653877407312,0.00526364566758275,0.00548436446115375,0.00534455617889762,0.00661897333338857,0.00642301049083471,0.00342081906273961,0.0031899162568152,0.0712230056524277,0.0108023602515459,0.052430871874094,0.073781818151474,0.00652772095054388,0.0106889866292477,0.00708547234535217,0.00926093105226755,0.0585980378091335,0.0733336359262466,0.136360675096512,0.11399856954813,0.0794778615236282,0.0758616849780083,0.0815607607364655,0.0789245441555977,0.0123216593638062,0.00933465082198381,0.0135329077020288,0.0171680320054293,0.0172486528754234,0.0143897123634815,0.0164850633591414,0.0151780126616359,0.0148288169875741,0.0180841628462076,0.0762000754475594,0.0706229358911514,0.0600572787225246,0.0717723518610001,0.015342109836638,0.0887890160083771,0.0764502882957459,0.0141895366832614,0.0898933708667755,0.0702709257602692,0.00957185961306095,0.0102252848446369,0.921268224716187,0.864661574363709,0.822214543819427,0.812577962875366,0.796024262905121,0.785190284252167,0.79579108953476,0.798974096775055,0.819302141666412,0.832208096981049,0.901484370231628,0.898276150226593,0.966843247413635,0.980400025844574,0.947536468505859,0.940471768379211,0.919764041900635,0.792019844055176,0.817002594470978,0.88964307308197,0.902016878128052,0.894849300384521,0.844491899013519,0.768581807613373,0.694739043712616,0.614177823066711,0.525126099586487,0.490100830793381,0.426283806562424,0.293765276670456,0.153728500008583,0.0190700236707926,0.0979115888476372,0.128510400652885,0.153869733214378,0.128945022821426,0.0753603354096413,0.0418420247733593,0.0342198349535465,0.0391802079975605,0.0238109808415174,0.793688833713531,0.822716176509857,0.879287540912628,0.890917479991913,0.884676992893219,0.851999402046204,0.756732761859894,0.676083326339722,0.605361580848694,0.528316974639893,0.48301774263382,0.40739181637764,0.237763002514839,0.117609687149525,\n0.159359708428383,0.268328428268433,0.395739287137985,0.461845338344574,0.520696938037872,0.648815512657166,0.73719322681427,0.797538042068481,0.895237147808075,0.92297637462616,0.949268698692322,0.926944434642792\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.140922901343132,0.237354541727967,-0.961147012620551,0,-0.955665486123911,-0.220918692514086,-0.194674927277415,0,-0.258542303121039,0.945969218151926,0.195699051049484,0,18.3849263661072,0.242577124515336,10.4387144787704,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.140922914308808,-0.955665574050354,-0.258542326908342,0,0.23735453962216,-0.220918690554097,0.945969209759294,0,-0.961146987859919,-0.194674922262287,0.195699046007975,0,7.38470479382302,19.6555869599185,2.48096468690343,1\n\t\t} \n\t}\n\tDeformer: 136865392, \"SubDeformer::Cluster_R_Knee\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1818 {\n\t\t\ta: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,6698,6699,6701,6716,6722,6723,6724,6725,6726,6728,6729,6730,6732,6733,6735,6741,6746,6747,6749,6750,6753,6763,6764,6765,6766,6767,6768,6769,6770,6771,6791,6793,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6820,6822,6826,6838,\n6839,6840,6846,6848,6849,6850,6853,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6906,6907,6908,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,\n7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,\n7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8371,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8386,8387,8388,\n8389,8390,8391,8392,8393,8394,8395,8396,8398,8399,8401,8402,8403,8404,8405,8407,8408,8409,8410,8411,8412,8413,8415,8416,8417,8418,8419,8420,8421,8422,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900\n\t\t} \n\t\tWeights: *1818 {\n\t\t\ta: 0.220141038298607,0.196640759706497,0.153409913182259,0.173608124256134,0.170320183038712,0.126419186592102,0.152392864227295,0.0990139618515968,0.14085453748703,0.079532116651535,0.147607132792473,0.121031373739243,0.105083473026752,0.136538848280907,0.0943783670663834,0.0724063515663147,0.0722803249955177,0.0489093288779259,0.106058277189732,0.128956601023674,0.152325019240379,0.0713165998458862,0.0447216145694256,0.031447634100914,0.169862657785416,0.232006281614304,0.165772020816803,0.103722266852856,0.127653449773788,0.0925964862108231,0.0742828398942947,0.102622017264366,0.0663422048091888,0.0716065540909767,0.130576521158218,0.0677648112177849,0.0536255724728107,0.0473034679889679,0.0628226026892662,0.0479825399816036,0.067742720246315,0.0573438853025436,0.0696251764893532,0.0868862792849541,0.0757204443216324,0.0417658872902393,0.0329458601772785,0.0323476977646351,0.138429492712021,0.0827741399407387,0.0930347740650177,0.163813948631287,0.159034430980682,0.0869526043534279,0.162047952413559,0.142031565308571,0.151230424642563,0.0715784579515457,0.0521086603403091,0.0846825391054153,0.104763366281986,0.0371469594538212,0.0241532288491726,0.0175831317901611,0.0114828906953335,0.0103546818718314,0.00621779635548592,0.074313260614872,0.0827364549040794,0.0413508154451847,0.0380601659417152,0.0194987952709198,0.0177487712353468,0.0106342006474733,0.0105341300368309,0.125118091702461,0.132997080683708,0.105603471398354,0.104569979012012,0.0389265194535255,0.0191667303442955,0.0287600625306368,0.0502987541258335,0.00945161189883947,0.0159818902611732,0.00747003080323339,0.0126327406615019,0.0298153646290302,0.0158855058252811,0.0162288565188646,0.0306226052343845,0.0130019411444664,0.0123899765312672,0.0611419267952442,0.0459677539765835,0.120401263237,0.0655012801289558,0.0809809416532516,0.0507620275020599,0.120858289301395,0.173239305615425,0.194508209824562,0.221619069576263,0.203462481498718,0.122273154556751,0.09067752212286,0.177778586745262,0.051736406981945,0.142719075083733,0.0299448184669018,\n0.119198977947235,0.0204716790467501,0.0987163037061691,0.224970236420631,0.2149518430233,0.0608539916574955,0.108437448740005,0.0730664432048798,0.0295846927911043,0.0679258480668068,0.0184821859002113,0.0888713151216507,0.0201829187572002,0.151507362723351,0.159909516572952,0.0684026852250099,0.0399749800562859,0.0165998600423336,0.00700818002223969,0.00339218555018306,0.119954824447632,0.159810870885849,0.026742946356535,0.0114951739087701,0.00492738699540496,0.00390063645318151,0.0691457614302635,0.10404796153307,0.197378575801849,0.223885104060173,0.169401437044144,0.152185380458832,0.139821991324425,0.195010915398598,0.227022230625153,0.205337241292,0.236822202801704,0.129063829779625,0.10129588842392,0.098905049264431,0.127973169088364,0.164971455931664,0.171554416418076,0.141118869185448,0.153867691755295,0.0792033225297928,0.047408863902092,0.0212051570415497,0.00996504724025726,0.00513662165030837,0.169499516487122,0.131101578474045,0.0164731852710247,0.0349107123911381,0.00778661575168371,0.00612845923751593,0.0805720686912537,0.117815710604191,0.203761518001556,0.150883167982101,0.0263166353106499,0.0260032135993242,0.0250821709632874,0.0255798380821943,0.0258219204843044,0.0247958730906248,0.0258203968405724,0.0247954521328211,0.0260004531592131,0.0250848215073347,0.0263162683695555,0.0255927629768848,0.0266841575503349,0.0261857993900776,0.0270041264593601,0.0267010051757097,0.0271879117935896,0.0269935075193644,0.02718535810709,0.0269825775176287,0.0269987527281046,0.0266757011413574,0.0266804657876492,0.0261615887284279,0.0143657755106688,0.0146409207955003,0.014243665151298,0.0143082411959767,0.0145482616499066,0.0149050131440163,0.0152825172990561,0.015573070384562,0.015692763030529,0.0156103633344173,0.0153549471870065,0.0150005919858813,0.0141262682154775,0.014289983548224,0.0140563026070595,0.0140992347151041,0.0142459003254771,0.0144590968266129,0.0146814035251737,0.0148508176207542,0.014919743873179,0.0148700829595327,0.0147177278995514,0.014505572617054,0.0264943614602089,0.0144799686968327,\n0.0128087373450398,0.0125354304909706,0.0135557120665908,0.0139769492670894,0.0119528453797102,0.0118387266993523,0.0114311072975397,0.0112328929826617,0.0119501119479537,0.0109694907441735,0.0105171836912632,0.0115400878712535,0.0127152362838387,0.0141406208276749,0.0138709126040339,0.0123479459434748,0.014054648578167,0.0105507085099816,0.0112162828445435,0.0103214271366596,0.00832196790724993,0.00780804269015789,0.009716154076159,0.0109609924256802,0.00889249425381422,0.0117862774059176,0.00957919284701347,0.0132214203476906,0.0106281461194158,0.0078987218439579,0.00974421761929989,0.00606143195182085,0.00582409603521228,0.006409399677068,0.00684636645019054,0.00745494896546006,0.00601428793743253,0.0275966115295887,0.0181790292263031,0.0181697066873312,0.0285454522818327,0.0276724547147751,0.0187410712242126,0.0268586464226246,0.0184552185237408,0.0250636301934719,0.0172649938613176,0.019733514636755,0.0134406527504325,0.0139356125146151,0.0093548521399498,0.0149864898994565,0.0151962209492922,0.0146243590861559,0.0157075729221106,0.0155551945790648,0.014719114638865,0.0116011705249548,0.00815725512802601,0.00698467111214995,0.0114818196743727,0.00595068512484431,0.0059604668058455,0.00769807770848274,0.00820890627801418,0.00769744720309973,0.00735840713605285,0.00857078935950994,0.00550975417718291,0.00538937421515584,0.00574404746294022,0.00558742601424456,0.00542253814637661,0.0060554682277143,0.00633684219792485,0.00555249443277717,0.00549389235675335,0.0122513007372618,0.0115393688902259,0.0162530466914177,0.0160768274217844,0.0157166384160519,0.0177253689616919,0.0168536193668842,0.0166768617928028,0.0156811382621527,0.0122465901076794,0.00686993170529604,0.0105261523276567,0.0118814883753657,0.0123907420784235,0.0103754969313741,0.00876099895685911,0.00992501713335514,0.00972733367234468,0.00843804981559515,0.00654476601630449,0.00710128992795944,0.00654926057904959,0.0154141951352358,0.0141462627798319,0.0124341379851103,0.0086600873619318,0.00688489247113466,0.00934554636478424,0.00654751248657703,0.0263030026108027,\n0.0273692011833191,0.0282624904066324,0.027193795889616,0.0285530146211386,0.0259348955005407,0.0271139964461327,0.0285574868321419,0.0263970233500004,0.0274529494345188,0.0258188918232918,0.0267107132822275,0.0244190320372581,0.0250732563436031,0.019841056317091,0.0200264994055033,0.0146815227344632,0.0144339753314853,0.0155869135633111,0.0274546537548304,0.0249893926084042,0.0289218779653311,0.0288524646311998,0.0128778191283345,0.0118977092206478,0.0276516489684582,0.00106737855821848,0.00147805246524513,0.00186067610047758,0.00154843716882169,0.0036833977792412,0.00418908474966884,0.00448016077280045,0.00374782993458211,0.00193444255273789,0.00644434196874499,0.00766608444973826,0.00174500048160553,0.00267062359489501,0.00478887232020497,0.00191833276767284,0.00174229417461902,0.00180287600960582,0.00234546139836311,0.00128583842888474,0.00214079977013171,0.00140055792871863,0.00909567438066006,0.00757129164412618,0.00278374785557389,0.00112155079841614,0.00206252257339656,0.00200117845088243,0.00242027174681425,0.00110937282443047,0.00150165776722133,0.00248800916597247,0.00127343449275941,0.00167676596902311,0.00287574343383312,0.00260993512347341,0.00256595364771783,0.00664327759295702,0.00750663643702865,0.00799639988690615,0.00774700241163373,0.00502653978765011,0.00414060847833753,0.0036840895190835,0.0028526852838695,0.00134008366148919,0.00286239455454051,0.00227882293984294,0.00194987049326301,0.00147433683741838,0.00247713620774448,0.00126496504526585,0.00147068768274039,0.00135243590921164,0.00185178325045854,0.00391016947105527,0.004016381688416,0.00242762104608119,0.00200948468409479,0.00443852646276355,0.00136092700995505,0.00104104517959058,0.00326772313565016,0.00148255017120391,0.0063310656696558,0.00368746998719871,0.00776247633621097,0.00483347987756133,0.00770892156288028,0.00199186499230564,0.00678484840318561,0.00392672047019005,0.00797629542648792,0.00253050401806831,0.00546338874846697,0.00483818212524056,0.00294264638796449,0.0548139214515686,0.0542830303311348,0.0551107376813889,0.0511926561594009,\n0.0479608401656151,0.0406333766877651,0.049762561917305,0.0452366508543491,0.0694228634238243,0.0721440538764,0.0708158910274506,0.0708349570631981,0.0531061626970768,0.151600793004036,0.16706295311451,0.187487840652466,0.20305697619915,0.185971736907959,0.0536451786756516,0.0685874670743942,0.150415137410164,0.162891030311584,0.158822327852249,0.181840136647224,0.202600136399269,0.195908606052399,0.179913505911827,0.0658068060874939,0.0661866217851639,0.0506342947483063,0.0491116270422935,0.0422941707074642,0.0326761230826378,0.0382144711911678,0.0465906858444214,0.062720313668251,0.140485212206841,0.1581671833992,0.149998217821121,0.150477170944214,0.154587730765343,0.172840252518654,0.185358956456184,0.190242305397987,0.188034802675247,0.18121549487114,0.17025201022625,0.0618722401559353,0.0479507856070995,0.0469446107745171,0.0404198542237282,0.0365250930190086,0.0973862633109093,0.107481263577938,0.1095936819911,0.139569535851479,0.152655407786369,0.150148823857307,0.139526158571243,0.12822799384594,0.0253077670931816,0.022599495947361,0.0183013062924147,0.0162242501974106,0.0368710495531559,0.0366680882871151,0.0385774858295918,0.0384872518479824,0.0473769642412663,0.0496687814593315,0.0385955348610878,0.0451695919036865,0.0358225330710411,0.0359686277806759,0.0315400585532188,0.0277408231049776,0.0275891739875078,0.0291530825197697,0.0292667131870985,0.0293035674840212,0.0269972402602434,0.0237951017916203,0.0364551581442356,0.0372793786227703,0.0534247048199177,0.0492258481681347,0.0466186590492725,0.0372154116630554,0.0286095775663853,0.028106402605772,0.028421763330698,0.028885792940855,0.0359596349298954,0.037527784705162,0.0339093990623951,0.0175160877406597,0.0160310510545969,0.0322983153164387,0.0407855957746506,0.0247920826077461,0.0249441564083099,0.0332219377160072,0.0338853560388088,0.0262994114309549,0.0262606032192707,0.0346851497888565,0.0247869081795216,0.0316552892327309,0.0168954823166132,0.0228659026324749,0.0132605377584696,0.0257446225732565,0.0263346303254366,0.0339123904705048,0.0255348067730665,\n0.0316641889512539,0.0281443577259779,0.0253598038107157,0.0834964960813522,0.019385414198041,0.0144114922732115,0.0338635481894016,0.0556614510715008,0.0164240393787622,0.0165059790015221,0.0164197888225317,0.0167112294584513,0.0193981938064098,0.0205408912152052,0.266567349433899,0.225157037377357,0.0447328165173531,0.0239948108792305,0.258423954248428,0.141974464058876,0.198101460933685,0.15009517967701,0.264132052659988,0.228737831115723,0.00562358135357499,0.00970039144158363,0.0523732267320156,0.0809437707066536,0.106471337378025,0.108843788504601,0.0993791148066521,0.143784582614899,0.0121610853821039,0.0205767769366503,0.214575499296188,0.239684775471687,0.178178697824478,0.195422396063805,0.209848985075951,0.207440286874771,0.308593571186066,0.263911694288254,0.198621273040771,0.28539165854454,0.192363008856773,0.273256719112396,0.172058612108231,0.240541025996208,0.148058325052261,0.161714926362038,0.197376787662506,0.176624745130539,0.242707774043083,0.201266199350357,0.156212627887726,0.18373216688633,0.290508925914764,0.190370336174965,0.324851483106613,0.325155407190323,0.229891330003738,0.290514171123505,0.135948672890663,0.12972891330719,0.163868829607964,0.158908322453499,0.127753525972366,0.125486969947815,0.143728271126747,0.15307492017746,0.154907420277596,0.147174850106239,0.0302150081843138,0.0179505366832018,0.0173399485647678,0.032318964600563,0.0182068049907684,0.0369845628738403,0.0409977771341801,0.0224265139549971,0.02091402746737,0.0367025434970856,0.0202252976596355,0.0182462017983198,0.0153633151203394,0.0153902797028422,0.00546120433136821,0.00614713365212083,0.00780274532735348,0.0103121725842357,0.0102445967495441,0.0122391441836953,0.0120558049529791,0.00240382552146912,0.00261368881911039,0.00308898207731545,0.0035490239970386,0.00399774499237537,0.00459673209115863,0.00458607450127602,0.121339060366154,0.147182881832123,0.197571039199829,0.26008602976799,0.311032861471176,0.287158697843552,0.273924022912979,0.239386796951294,0.183864384889603,0.142866030335426,0.197976171970367,\n0.240400284528732,0.28218087553978,0.320579469203949,0.322815716266632,0.290193647146225,0.120546653866768,0.222052201628685,0.140751510858536,0.0163820739835501,0.0142385689541698,0.00542507180944085,0.0115760723128915,0.00221272790804505,0.0023711749818176,0.00282163615338504,0.00317213404923677,0.00357885169796646,0.00420893495902419,0.00418007094413042,0.00739439064636827,0.00683258147910237,0.132019907236099,0.191063180565834,0.119362480938435,0.0284428987652063,0.00810533761978149,0.113767258822918,0.038724422454834,0.0212871395051479,0.00770025048404932,0.00302603910677135,0.00275358185172081,0.0301092397421598,0.0321386978030205,0.0324373990297318,0.040670283138752,0.0509076714515686,0.0635824501514435,0.0657511055469513,0.0618208535015583,0.0720918327569962,0.0769494622945786,0.0765324309468269,0.0743149816989899,0.0804609358310699,0.0854995623230934,0.0128151131793857,0.00777194974943995,0.0344400107860565,0.0195869654417038,0.00954691600054502,0.00379748572595418,0.00346317188814282,0.0179612133651972,0.0192962810397148,0.0188435316085815,0.0230968538671732,0.0361262373626232,0.0432674884796143,0.0261948890984058,0.0235383044928312,0.0090101845562458,0.022206012159586,0.00445583695545793,0.00383905950002372,0.00506020803004503,0.00951316021382809,0.0460106357932091,0.0847913771867752,0.138023719191551,0.131213068962097,0.166694819927216,0.156544402241707,0.0745199620723724,0.0423311516642571,0.0246866699308157,0.0397612191736698,0.0223495364189148,0.0114756962284446,0.0221945624798536,0.0110521893948317,0.00496905716136098,0.00389229226857424,0.00643961364403367,0.0192630626261234,0.0385988131165504,0.0820584818720818,0.112035349011421,0.138285085558891,0.160750851035118,0.158167973160744,0.170805841684341,0.189076989889145,0.19410303235054,0.177998840808868,0.182540401816368,0.141154646873474,0.0894900858402252,0.0342159382998943,0.00965154357254505,0.00418656365945935,0.00237840251065791,0.183685347437859,0.062582790851593,0.118039816617966,0.00520113110542297,0.00584284262731671,0.0112213315442204,0.0201321765780449,\n0.0286685489118099,0.00420221220701933,0.00471079163253307,0.0110045308247209,0.0217082388699055,0.0343283303081989,0.204040139913559,0.189030945301056,0.180175974965096,0.173992961645126,0.168315663933754,0.130297273397446,0.059353269636631,0.0322089642286301,0.0197652205824852,0.0099091986194253,0.131604447960854,0.14289553463459,0.0357057303190231,0.0209082346409559,0.0171405524015427,0.0130592565983534,0.191065490245819,0.208427935838699,0.205090165138245,0.00994481611996889,0.00936297792941332,0.00965779647231102,0.00963758956640959,0.0111713800579309,0.00611869245767593,0.0038256177213043,0.00960911344736815,0.0110513623803854,0.0102578569203615,0.00362409418448806,0.00338122970424592,0.00906169321388006,0.00970547460019588,0.00144677876960486,0.00160244794096798,0.00264640781097114,0.00462430063635111,0.0017758650938049,0.00194164353888482,0.00297714397311211,0.00503711635246873,0.00147938809823245,0.0017682610778138,0.00228582904674113,0.0105864265933633,0.00957369245588779,0.0102702956646681,0.0098283477127552,0.0924438461661339,0.0143077401444316,0.0122878095135093,0.133630022406578,0.141978055238724,0.146272510290146,0.160872846841812,0.158548668026924,0.1529251486063,0.143999874591827,0.14327535033226,0.134030342102051,0.0194255840033293,0.0241993553936481,0.0397681333124638,0.0347787775099278,0.0424629487097263,0.0764479711651802,0.130649253726006,0.155860245227814,0.130433484911919,0.0997007936239243,0.522098422050476,0.539064466953278,0.600684404373169,0.564567744731903,0.578698098659515,0.67663186788559,0.613317966461182,0.627128183841705,0.56117171049118,0.526740491390228,0.587794005870819,0.603702127933502,0.513156652450562,0.501628339290619,0.51724100112915,0.507181763648987,0.50683331489563,0.510595977306366,0.51329904794693,0.499076575040817,0.498843401670456,0.49879378080368,0.498762190341949,0.4991694688797,0.512927711009979,0.533550322055817,0.462437272071838,0.407903462648392,0.382052510976791,0.450885593891144,0.338004499673843,0.430793106555939,0.309323966503143,0.417452901601791,0.298160076141357,\n0.412941426038742,0.445640444755554,0.462612688541412,0.43747690320015,0.435000836849213,0.482632666826248,0.488787829875946,0.472163766622543,0.469649881124496,0.493643283843994,0.488330274820328,0.494619727134705,0.495285451412201,0.459936022758484,0.433365523815155,0.500856637954712,0.498682528734207,0.484847009181976,0.503007411956787,0.543912529945374,0.606569468975067,0.650449335575104,0.565938055515289,0.725132644176483,0.606685757637024,0.74704772233963,0.630785703659058,0.585659027099609,0.549062013626099,0.602989912033081,0.519738018512726,0.509474873542786,0.530255079269409,0.536091029644012,0.514073669910431,0.518159925937653,0.515052437782288,0.499041229486465,0.49930602312088,0.498829960823059,0.499354362487793,0.531567454338074,0.564122378826141,0.467445582151413,0.455564588308334,0.383804261684418,0.410712748765945,0.434326201677322,0.338629901409149,0.419354826211929,0.309535533189774,0.44914898276329,0.467186599969864,0.439384043216705,0.477136939764023,0.492851316928864,0.487034231424332,0.474351823329926,0.491978049278259,0.495757520198822,0.495674669742584,0.46476948261261,0.43713316321373,0.508034825325012,0.499508380889893,0.489449739456177,0.571016192436218,0.608602643013,0.687842011451721,0.536954998970032,0.514068126678467,0.374398648738861,0.40116485953331,0.328352868556976,0.298213601112366,0.291857182979584,0.429039031267166,0.458238869905472,0.498540431261063,0.501182377338409,0.484154582023621,0.617342472076416,0.740442156791687,0.765326619148254,0.570390999317169,0.534031748771667,0.402218997478485,0.374190449714661,0.327226936817169,0.297424823045731,0.431489735841751,0.462401211261749,0.508988261222839,0.499542444944382,0.488626062870026,0.160449832677841,0.156783670186996,0.159524708986282,0.176437810063362,0.177402451634407,0.303022652864456,0.294236481189728,0.3028225004673,0.17349174618721,0.499316424131393,0.499484270811081,0.861416578292847,0.912409961223602,0.891903102397919,0.862789690494537,0.725841045379639,0.949873089790344,0.959999978542328,0.790222585201263,0.706912875175476,\n0.71718156337738,0.859648823738098,0.808649182319641,0.79305899143219,0.889781832695007,0.894380807876587,0.959999978542328,0.956703424453735,0.946452438831329,0.980000019073486,0.943891108036041,0.864047408103943,0.82993084192276,0.696012794971466,0.716923475265503,0.743593811988831,0.734707891941071,0.795767307281494,0.814093708992004,0.702549576759338,0.740187525749207,0.723242402076721,0.81572687625885,0.738231301307678,0.696267068386078,0.719566822052002,0.922518908977509,0.90799868106842,0.928278088569641,0.907724499702454,0.723899960517883,0.755184590816498,0.922885239124298,0.768464267253876,0.936938226222992,0.733437836170197,0.846593260765076,0.749828815460205,0.782762229442596,0.858797311782837,0.865191996097565,0.780552983283997,0.802658915519714,0.843815445899963,0.85517144203186,0.851339101791382,0.962358355522156,0.959563791751862,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.822296917438507,0.837610244750977,0.815930068492889,0.443763226270676,0.0434230305254459,0.0614212267100811,0.0644745230674744,0.386088460683823,0.699999988079071,0.392738252878189,0.699999988079071,0.448874175548553,0.014375370927155,0.0140107590705156,0.0121789062395692,0.0883964225649834,0.0934296697378159,0.107252053916454,0.0872711762785912,0.116611294448376,0.414927542209625,0.519198000431061,0.410463094711304,0.422229081392288,0.699999988079071,0.515911340713501,0.511167705059052,0.959999978542328,0.959999978542328,0.959999978542328,0.866300702095032,0.821096897125244,0.863957941532135,0.806740343570709,0.800000011920929,0.894073009490967,0.663112103939056,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.802115261554718,0.896774470806122,0.843385517597198,0.875415921211243,0.820724666118622,0.857815444469452,0.897344946861267,0.955449402332306,0.690855324268341,0.0965502113103867,0.746420085430145,\n0.173812687397003,0.150500819087029,0.116230010986328,0.119169160723686,0.145668879151344,0.156594097614288,0.959999978542328,0.953056275844574,0.924655854701996,0.948967397212982,0.800000011920929,0.330237716436386,0.299210637807846,0.277687549591064,0.242400661110878,0.254517376422882,0.287185370922089,0.320941507816315,0.35770645737648,0.365354865789413,0.959999978542328,0.955655336380005,0.915349721908569,0.959999978542328,0.866086006164551,0.807674944400787,0.851825594902039,0.686647355556488,0.959999978542328,0.94360226392746,0.910253405570984,0.921708941459656,0.495698720216751,0.477832108736038,0.469940274953842,0.46520921587944,0.464335680007935,0.487537801265717,0.49670997262001,0.566858947277069,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.933254480361938,0.954226672649384,0.997203588485718,0.917994320392609,0.899297475814819,0.901017010211945,0.91645485162735,0.510368406772614,0.00567376147955656,0.00783961825072765,0.00862109661102295,0.0129706580191851,0.0114124231040478,0.0154891554266214,0.0153114860877395,0.00997543521225452,0.00986269768327475,0.0140800727531314,0.00998373050242662,0.0988286286592484,0.176372304558754,0.0798520445823669,0.118268929421902,0.0590761005878448,0.0654688104987144,0.0755378156900406,0.0781648904085159,0.116748794913292,0.109995000064373,0.0766285732388496,0.133775547146797,0.144544675946236,0.0103117916733027,0.0153879709541798,0.0144848562777042,0.117053553462029,0.0758993700146675,0.0116922548040748,0.0524738281965256,0.0722815245389938,0.00605043582618237,0.0100520681589842,0.00665575684979558,0.00875646248459816,0.0561532005667686,0.0707956105470657,0.132949247956276,0.110543414950371,0.0790862739086151,0.0793771892786026,0.0800021290779114,0.0763092711567879,0.0117054879665375,0.00873408745974302,0.012912311591208,0.016739085316658,0.0182612165808678,0.0163208656013012,0.0179697703570127,0.01646638661623,0.0159950032830238,\n0.0181978512555361,0.0780041739344597,0.0707865208387375,0.0570633821189404,0.0691082701086998,0.0176486875861883,0.0937477275729179,0.0800698399543762,0.0161298736929893,0.0884751826524735,0.0703100636601448,0.925126254558563,0.865002751350403,0.818695485591888,0.807025611400604,0.789011359214783,0.777534663677216,0.788373947143555,0.775901257991791,0.819406390190125,0.906084656715393,0.904069304466248,0.980000019073486,0.950653076171875,0.944453954696655,0.924925565719604,0.842944860458374,0.785732328891754,0.811322510242462,0.885092079639435,0.980000019073486,0.959999978542328,0.690811693668365,0.800000011920929,0.699999988079071,0.491733610630035,0.431082755327225,0.301695793867111,0.160689681768417,0.866851687431335,0.282693952322006,0.396244406700134,0.357076913118362,0.283264219760895,0.487969249486923,0.48589962720871,0.285435110330582,0.333517074584961,0.360721081495285,0.338640809059143,0.293287128210068,0.585670709609985,0.439837276935577,0.488081306219101,0.497676163911819,0.509250342845917,0.79224419593811,0.785737931728363,0.814616680145264,0.805732011795044,0.288319826126099,0.302083253860474,0.547470092773438,0.382642656564713,0.583310306072235,0.627152025699615,0.16984860599041,0.161324813961983,0.242668092250824,0.194719076156616,0.193076133728027,0.263555347919464,0.924197673797607,0.930089175701141,0.545478880405426,0.436976879835129,0.312507897615433,0.279589712619781,0.259755164384842,0.257184624671936,0.379078358411789,0.223878711462021,0.178313493728638,0.185774013400078,0.209724441170692,0.231508731842041,0.489078283309937,0.181608468294144,0.229795783758163,0.210761219263077,0.130062341690063,0.443184554576874,0.302244246006012,0.156397596001625,0.244913592934608,0.231316775083542,0.209852263331413,0.214463278651237,0.368181377649307,0.194402411580086,0.146217733621597,0.0835636109113693,0.499021202325821,0.213828831911087,0.0882539972662926,0.509222984313965,0.159289419651031,0.284890353679657,0.941314816474915,0.935063123703003,0.943666756153107,0.941324889659882,0.807415008544922,0.83213347196579,\n0.822709619998932,0.805511653423309,0.67889791727066,0.705907464027405,0.811904907226563,0.768746256828308,0.769252598285675,0.844982445240021,0.566581130027771,0.557939112186432,0.498869776725769,0.499205946922302,0.44482946395874,0.499987721443176,0.607680559158325,0.343623101711273,0.417950123548508,0.500473856925964,0.499595403671265,0.499299347400665,0.49955028295517,0.499799698591232,0.288713306188583,0.27057296037674,0.313093364238739,0.363294124603271,0.0105788102373481,0.0119627024978399,0.00913762487471104,0.00863190740346909,0.0167196895927191,0.0136867398396134,0.0129346754401922,0.0155253410339355,0.041066687554121,0.0345800518989563,0.0700398311018944,0.0779722929000854,0.187142431735992,0.18392226099968,0.151584163308144,0.0362898372113705,0.422039180994034,0.451437085866928,0.404219388961792,0.463168919086456,0.43609756231308,0.385264873504639,0.4261115193367,0.100049085915089,0.169540390372276,0.0236841924488544,0.0192988906055689,0.00689365155994892,0.00697705056518316,0.00481623457744718,0.00500012142583728,0.00159262900706381,0.00495164794847369,0.00587473949417472,0.00218673190101981,0.00557536724954844,0.00198339577764273,0.00427171634510159,0.00395993422716856,0.00724899023771286,0.0075768306851387,0.00362888071686029,0.00689652562141418,0.0112851578742266,0.0142028098925948,0.014911531470716,0.0118908761069179,0.00892538111656904,0.00914312712848186,0.00959681440144777,0.00911114737391472,0.0123588955029845,0.00980997644364834,0.00817553699016571,0.00812354404479265,0.0385648533701897,0.0368411876261234,0.072588324546814,0.0790384635329247,0.0350004583597183,0.0725629329681396,0.156130000948906,0.149460017681122,0.179843455553055,0.418746024370193,0.40342652797699,0.422440052032471,0.460526168346405,0.458358615636826,0.449574530124664,0.468382894992828,0.471038162708282,0.470545202493668,0.467958033084869,0.460692286491394,0.459357529878616,0.482891708612442,0.465929388999939,0.497931659221649,0.497813880443573,0.424238741397858,0.43932181596756,0.197344973683357,0.202123180031776,0.169894814491272,\n0.180889815092087,0.0224198717623949,0.0342224836349487,0.045203685760498,0.022312106564641,0.0928444340825081,0.0164433289319277,0.0166783984750509,0.0927439257502556,0.00851503014564514,0.00991012435406446,0.00945863127708435,0.0106856729835272,0.0120738754048944,0.0153764318674803,0.0145045462995768,0.0097744083032012,0.0110316863283515,0.011228172108531,0.0104443524032831,0.0342458859086037,0.0208848789334297,0.0129208713769913,0.0238716434687376,0.0135756591334939,0.00637398241087794,0.00917599815875292,0.0111155761405826,0.00927856750786304,0.0083415349945426,0.00750854006037116,0.00603275885805488,0.00858723465353251,0.00469777034595609,0.00487428903579712,0.00659612752497196,0.00405896268785,0.0082297483459115,0.0281874220818281,0.0109415305778384,0.00886029656976461,0.0284117553383112,0.0092842411249876,0.0342590026557446,0.0560368150472641,0.00952684786170721,0.0863779112696648,0.00806688796728849,0.00389114511199296,0.00306898960843682,0.294876396656036,0.308187693357468,0.495612591505051,0.496858716011047,0.288310408592224,0.497243225574493,0.498295664787292,0.49911630153656,0.498381614685059,0.498192936182022,0.499222010374069,0.499349772930145,0.498703926801682,0.499136686325073,0.49921178817749,0.498755186796188,0.499519914388657,0.499555051326752,0.499421000480652,0.498835802078247,0.180721387267113,0.496883779764175,0.497934907674789,0.499061793088913,0.498675882816315,0.0102646071463823,0.49796661734581,0.498460471630096,0.129563570022583,0.00909560639411211,0.0105628436431289,0.0071029276587069,0.0100718205794692,0.00461686495691538,0.0050774859264493,0.00555201712995768,0.00648870132863522,0.00157895777374506,0.00208959938026965,0.00195883493870497,0.00278144469484687,0.00261728558689356,0.00434207217767835,0.00259597669355571,0.00188296823762357,0.162212789058685,0.463326036930084,0.437229096889496,0.0932958349585533,0.0973698645830154,0.032982986420393,0.446509718894959,0.493854820728302,0.255417793989182,0.475229948759079,0.495688110589981,0.481146574020386,0.497067838907242,0.0132362544536591,\n0.0880826860666275,0.440971612930298,0.171690061688423,0.0110826743766665,0.0114450976252556,0.00285618449561298,0.176528409123421,0.00424475502222776,0.0860917866230011,0.0687148496508598,0.00279257842339575,0.00317180179990828,0.498153626918793,0.498638093471527,0.00624458026140928,0.497437328100204,0.481990486383438,0.398478388786316,0.397769749164581,0.420945376157761,0.016629746183753,0.156746998429298,0.150193274021149,0.0260692816227674,0.142986565828323,0.275827318429947,0.265518844127655,0.164150521159172,0.179356217384338,0.201655998826027,0.155882328748703,0.157176062464714,0.257369130849838,0.292699962854385,0.308371394872665,0.332619607448578,0.30545511841774,0.346422910690308,0.373265951871872,0.395905733108521,0.33428418636322,0.419889718294144,0.396339476108551,0.311042726039886,0.251168638467789,0.284843504428864,0.315118014812469,0.288207590579987,0.236284300684929,0.357216745615005,0.329778403043747,0.292900681495667,0.215388238430023,0.235113203525543,0.177311405539513,0.153885200619698,0.220909103751183,0.203227922320366,0.290471643209457,0.265276551246643,0.222590640187263,0.382111400365829,0.378728419542313,0.353820085525513,0.298215985298157,0.32230332493782,0.00384127185679972,0.00470884656533599,0.0104514425620437,0.00500548165291548,0.00195009738672525,0.00237587676383555,0.00140883540734649,0.00102973112370819,0.00200921390205622,0.018424516543746,0.00379193644039333,0.00546682765707374,0.00260537373833358,0.00422798423096538,0.00391553714871407,0.00523934373632073,0.00917614344507456,0.0130695644766092,0.00181645958218724,0.0016190770547837,0.00161480496171862,0.00720509560778737,0.0033471048809588,0.010807802900672,0.011268611997366,0.0110746510326862,0.0109697869047523,0.00400499766692519,0.00218103756196797,0.00204763538204134,0.00557699194177985,0.00210049748420715,0.0076933279633522,0.0180913154035807,0.012464378029108,0.00113955908454955,0.00530168693512678,0.00870633684098721,0.0107687721028924,0.00494451960548759,0.00292759365402162,0.00259687518700957,0.00461619254201651,0.00104889541398734,\n0.00255234818905592,0.0124525716528296,0.0176442191004753,0.00738372420892119,0.00436095427721739,0.00292508560232818,0.00151343178004026,0.0106324488297105,0.0103887440636754,0.0103587573394179,0.0104789398610592,0.00571152800694108,0.0108468001708388,0.0124202640727162,0.0108270552009344,0.0154264066368341,0.0271961111575365,0.0281857512891293,0.0520243123173714,0.0335392132401466,0.0247473139315844,0.0136771816760302,0.014560129493475,0.0181196574121714,0.0251695867627859,0.00895520206540823,0.0134405633434653,0.00334702897816896,0.00581781379878521,0.00617641629651189,0.0039284210652113,0.00742758205160499,0.00921225268393755,0.0109213050454855,0.00813751667737961,0.00351928896270692,0.00460217660292983,0.00507055455818772,0.0222681555896997,0.0214629601687193,0.0244730785489082,0.00889820605516434,0.13249745965004,0.119435474276543,0.105335272848606,0.498115301132202,0.48156064748764,0.497372984886169,0.112148396670818,0.0752550736069679,0.0404751114547253,0.0515224635601044,0.346944451332092,0.319727420806885,0.139163225889206,0.825967967510223,0.72717809677124,0.57372260093689,0.499346643686295,0.499631464481354,0.499337196350098,0.499045014381409,0.498869776725769,0.584369242191315,0.581871628761292,0.704368472099304,0.828925788402557,0.80715149641037,0.756855845451355,0.799853920936584,0.81432843208313,0.834282636642456,0.724787771701813,0.729916453361511,0.713068842887878,0.496063411235809,0.479932904243469,0.503707051277161,0.454903155565262,0.344902217388153,0.38563796877861,0.383142232894897,0.417621582746506,0.367326766252518,0.309257745742798,0.334212064743042,0.3169926404953,0.355116635560989,0.325188308954239,0.263775318861008,0.228697031736374,0.45619061589241,0.495305687189102,0.498378992080688,0.90161406993866,0.892532229423523,0.823614180088043,0.58920294046402,0.503884494304657,0.800082147121429,0.787411451339722,0.705400943756104,0.573275506496429,0.500288963317871,0.495926558971405,0.46147620677948,0.892712831497192,0.876434028148651,0.794651567935944,0.639523088932037,0.304648637771606,0.192797943949699,\n0.103648610413074,0.563636004924774,0.693290770053864,0.77239316701889,0.785526931285858,0.997469186782837,0.997240126132965,0.997250139713287,0.997131943702698,0.996462106704712,0.996456742286682,0.99651563167572,0.996563136577606,0.996726870536804,0.997069656848907,0.997214317321777,0.997197806835175,0.918697476387024,0.905072033405304,0.856663286685944,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.774849414825439,0.775606870651245,0.0752632021903992,0.134086862206459,0.108436532318592,0.151968613266945,0.260086327791214,0.394214272499084,0.462630331516266,0.699999988079071,0.800000011920929,0.800000011920929,0.899999976158142,0.959999978542328,0.996687591075897,0.980000019073486,0.919819533824921,0.859595537185669,0.83685839176178,0.865764141082764,0.820731580257416,0.80120724439621\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.140926346148789,-0.237352328489588,-0.961146982434929,0,-0.955665077054438,-0.220918009829913,0.194677605143504,0,-0.258541875099369,0.945969867344551,-0.195696175539477,0,18.3954966323429,0.260383799457137,-10.3666111330078,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.140926363663087,-0.955665195824307,-0.258541907230903,0,-0.237352355825338,-0.220918035272932,0.945969976291435,0,-0.96114709305435,0.194677627549155,-0.195696198062356,0,-7.30962499892272,19.6556066299249,2.48098514166593,1\n\t\t} \n\t}\n\tDeformer: 136866528, \"SubDeformer::Cluster_Spine3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1088 {\n\t\t\ta: 124,137,138,139,150,170,171,342,343,1740,1790,1791,1793,1794,1795,1796,1797,1798,1799,1818,1819,1820,1847,1848,3422,3467,3468,3470,3471,3472,3473,3474,3475,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,5303,5304,5307,5308,5309,5310,5311,5312,5313,5314,5317,5319,5350,5351,5365,5366,5367,5368,5369,5370,5371,5372,5373,5375,5378,5380,5382,5383,5385,5386,5389,5390,5391,5396,5401,5421,5424,5425,5426,5427,5428,5429,5430,5431,5436,5437,5439,5440,5441,5448,5451,5469,5471,5472,5473,5558,5559,5682,5683,5744,5751,5766,5768,5769,5770,5771,5776,5777,5778,5779,5780,5782,5783,5784,5785,5802,5803,5804,5808,5809,5811,5813,5814,5816,5817,5818,5820,5821,5822,5824,5832,5851,5852,5854,5855,5856,5857,5858,5859,5860,5861,5865,5866,5870,5871,5872,5873,5874,5881,5888,5889,5890,5891,5895,5896,5897,5899,5900,5901,5902,5903,5906,5907,5909,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5938,5939,5940,5942,5943,5944,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,6496,6497,9959,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9981,9982,9983,9991,9992,9993,9997,9998,10006,10007,10008,10010,10013,10014,10015,10016,10017,10018,10019,10021,10022,10029,10030,10031,10039,10043,10048,10049,10051,10054,10055,10060,10061,10062,10063,10064,10065,10066,10067,10068,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10090,10091,10092,10093,10094,10095,10096,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125,10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,\n10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10186,10187,10188,10189,10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200,10201,10202,10203,10204,10205,10206,10207,10208,10209,10211,10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227,10228,10229,10230,10231,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10270,10271,10272,10273,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10298,10299,10300,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10321,10324,10326,10328,10329,10330,10331,10332,10333,10334,10335,10336,10337,10338,10339,10362,10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447,10449,10450,10451,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10464,10465,10466,10467,10468,10469,10470,10471,10472,10473,10474,10475,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10490,10491,10492,10493,10494,10495,10496,10497,10499,10500,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543,10544,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,\n10569,10570,10571,10572,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10626,10627,10628,10629,10630,10631,10632,10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648,10649,10650,10651,10653,10654,10655,10656,10657,10658,10659,10660,10661,10662,10663,10664,10665,10666,10667,10668,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10705,10706,10707,10708,10709,10710,10711,10712,10713,10714,10715,10716,10717,10718,10719,10720,10721,10722,10723,10724,10733,10734,10735,10738,10739,10740,10741,10742,10743,10746,10747,10748,10749,10750,10751,10754,10755,10756,10758,10761,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844,10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876,10878,10879,10880,10881,10882,10883,10884,10885,10886,10887,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908,10909,10910,10911,10912,10914,10923,10924,10925,10926,10929,10930,10931,10932,10937,10938,10939,10940,10941,10955,10956,10957,10964,10965,11009,11027,11028,11044,11045,11052,11053,11054,11055,11056,11060,11061,11062,11063,11064,11087,11088,11089,11090,11091,11097,11098,11099,11102,11112,11113,\n11129,11130,11138,11139,11140,11141,11142,11146,11147,11148,11149,11150,11172,11173,11174,11175,11176,11182,11183,11184,11187\n\t\t} \n\t\tWeights: *1088 {\n\t\t\ta: 0.75,0.085762232542038,0.104128152132034,0.106781028211117,0.124402061104774,0.102938070893288,0.172302529215813,0.111800543963909,0.103759080171585,0.115088522434235,0.12423200905323,0.095378540456295,0.110840901732445,0.117616847157478,0.118899755179882,0.0713480859994888,0.0956620201468468,0.242636173963547,0.12423200905323,0.107998006045818,0.0882430002093315,0.0698882415890694,0.0566199608147144,0.0645465701818466,0.11211734265089,0.0914984792470932,0.151150241494179,0.192090138792992,0.12276616692543,0.118340142071247,0.101025715470314,0.0772408172488213,0.0512937009334564,0.461652457714081,0.459554940462112,0.459844648838043,0.462225466966629,0.472784638404846,0.467772513628006,0.487117677927017,0.534648895263672,0.575068235397339,0.57318240404129,0.604590594768524,0.600727379322052,0.601162910461426,0.596206903457642,0.60578978061676,0.603663563728333,0.575768530368805,0.535132348537445,0.701581835746765,0.545263409614563,0.591261208057404,0.661754131317139,0.658437669277191,0.536858856678009,0.575587630271912,0.602665722370148,0.597706258296967,0.602555274963379,0.604955315589905,0.607475936412811,0.578075408935547,0.537131786346436,0.612353384494781,0.661225914955139,0.606588125228882,0.577766060829163,0.53724068403244,0.586965978145599,0.661505222320557,0.465115785598755,0.452530950307846,0.277101397514343,0.0386030152440071,0.452400863170624,0.288399666547775,0.434900224208832,0.422080427408218,0.44364920258522,0.422790855169296,0.18050417304039,0.482322633266449,0.282486408948898,0.390942275524139,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.38839054107666,0.387968569993973,0.359195381402969,0.899999976158142,0.0431111082434654,0.399808496236801,0.424760729074478,0.399594306945801,0.047169242054224,0.294629603624344,0.446909070014954,0.293749272823334,0.42409160733223,0.666466772556305,0.419387340545654,0.600000023841858,0.5,0.436221748590469,0.392474800348282,0.383285969495773,0.337732255458832,0.344708532094955,0.41933611035347,\n0.432212859392166,0.266951441764832,0.600000023841858,0.32977768778801,0.252586364746094,0.253333956003189,0.899999976158142,0.499777913093567,0.173275351524353,0.5,0.5,0.600000023841858,0.175833567976952,0.18368735909462,0.203715935349464,0.207051545381546,0.600000023841858,0.0095208901911974,0.0478370748460293,1,0.12961608171463,0.134921371936798,1,0.0517776012420654,0.110316768288612,0.0806061327457428,0.0495592057704926,0.150415286421776,0.759846448898315,0.294901102781296,0.429294049739838,0.861581206321716,0.390059977769852,0.387282431125641,0.380919307470322,0.0594810396432877,0.0504821762442589,0.400211721658707,0.425702005624771,0.399597972631454,0.046536035835743,0.295834451913834,0.75,0.446447640657425,0.292811393737793,0.423771739006042,0.124108269810677,0.415361732244492,0.600000023841858,0.254057466983795,0.600000023841858,0.435669839382172,0.42539370059967,0.413400411605835,0.411728411912918,0.418673723936081,0.417498052120209,0.43069788813591,1,0.264593541622162,0.248868077993393,0.250652760267258,0.134869754314423,0.5,0.5,0.418447643518448,0.600000023841858,0.699999988079071,0.600000023841858,0.0485693663358688,0.5,0.5,0.699999988079071,0.174534395337105,1,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.5,0.5,0.5,0.600000023841858,0.5,0.5,0.5,0.5,0.600000023841858,0.5,0.600000023841858,0.5,0.5,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.0141789242625237,0.0153731536120176,0.00258106738328934,0.0111873541027308,0.012540147639811,0.0160985831171274,0.0158132258802652,0.0117630818858743,0.0171353444457054,0.0132416011765599,0.0101168863475323,0.00587683590129018,0.00939620938152075,0.00872862990945578,0.0169561989605427,0.0363818965852261,0.0223651211708784,0.0398627892136574,0.0235235225409269,0.0233923010528088,0.0204265173524618,0.020949138328433,0.00725673837587237,0.0112239895388484,0.0089893639087677,0.00827483367174864,0.0159890446811914,0.0124049074947834,\n0.0115596614778042,0.00993351172655821,0.0130593748763204,0.0169641263782978,0.00573462061583996,0.0085513973608613,0.00921071413904428,0.0167909264564514,0.0222052801400423,0.0363022610545158,0.023268872871995,0.0203311648219824,0.0110470624640584,0.00882083363831043,0.00814381148666143,0.957538247108459,0.958540797233582,0.956538259983063,0.959350943565369,0.961500287055969,0.959985792636871,0.947338461875916,0.953540086746216,0.955336928367615,0.75,0.75,0.75,0.75,0.75,0.75,0.955077111721039,0.956288516521454,0.961606383323669,0.958412051200867,0.957542419433594,0.959802865982056,0.95624041557312,0.959717214107513,0.957168877124786,0.939900994300842,0.829129636287689,0.879289329051971,0.880010366439819,0.959395170211792,0.95811003446579,0.959861755371094,0.959268689155579,0.899999976158142,0.899999976158142,0.785349428653717,0.957476377487183,0.899999976158142,0.899999976158142,0.95319277048111,0.953531563282013,0.876276314258575,0.953178107738495,0.956213295459747,0.956434607505798,0.800000011920929,0.800000011920929,0.699999988079071,0.699999988079071,0.953248918056488,0.95462441444397,0.951935470104218,0.923011600971222,0.959479689598084,0.961464405059814,0.961166799068451,0.958817422389984,0.961436033248901,0.961288571357727,0.960675239562988,0.887319087982178,0.720000028610229,0.75,0.899999976158142,0.800000011920929,0.720578551292419,0.800000011920929,0.850000023841858,0.899999976158142,0.828785061836243,0.776359677314758,0.764668464660645,0.772647380828857,0.765205442905426,0.763894855976105,0.958999872207642,0.75,0.75,0.75,1,1,0.800000011920929,0.894429683685303,0.894518375396729,0.895675539970398,0.922911643981934,0.730348885059357,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.00808052811771631,0.00695882085710764,0.75,0.75,0.00667890813201666,0.75,0.0041200197301805,0.75,0.75,0.827726483345032,0.736065030097961,0.75,0.75,0.95705246925354,0.951984941959381,0.910732209682465,0.767530143260956,0.75,\n0.955445647239685,0.956634402275085,0.961577653884888,0.957822620868683,0.971852004528046,0.946243524551392,0.960978269577026,0.955973863601685,0.951422214508057,0.957989037036896,0.899999976158142,0.0939868167042732,0.095717616379261,0.959257662296295,0.5,0.75,0.75,0.75,0.75,0.878020882606506,0.75,0.5,0.75,0.5,0.5,0.5,0.5,0.75,0.0198027025908232,0.0300513803958893,0.763302564620972,0.75,0.75,0.00716592743992805,0.0123920850455761,0.768499076366425,0.959338009357452,0.959072470664978,0.958411872386932,0.955592691898346,0.947930335998535,0.95901894569397,0.0324273779988289,0.764417946338654,0.75,0.75,0.75,0.720000028610229,0.720000028610229,0.899999976158142,0.96061372756958,0.699999988079071,0.5,0.75,0.75,0.75,0.75,0.959779322147369,0.955917954444885,0.960276246070862,0.956004500389099,0.958375811576843,0.952684044837952,0.959409594535828,0.960889339447021,0.953610301017761,0.957848727703094,0.95908397436142,0.959031164646149,0.968548119068146,0.232526525855064,0.75,0.00976004730910063,0.95672219991684,0.951477289199829,0.948371946811676,0.952519536018372,0.949735760688782,0.952434301376343,0.75,0.75,0.75,0.961228728294373,0.75,0.959927022457123,0.957871973514557,0.961668848991394,0.961422979831696,0.954932510852814,0.955667316913605,0.9588942527771,0.957856237888336,0.960132479667664,0.961470305919647,0.954107403755188,0.958635985851288,0.878364622592926,0.879140973091125,0.879786968231201,0.87715870141983,0.961276412010193,0.960936665534973,0.085561029613018,0.0822171941399574,0.0838226974010468,0.0859100669622421,0.959669351577759,0.959876298904419,0.960931241512299,0.959267258644104,0.957055270671844,0.959008812904358,0.956428945064545,0.954533338546753,0.958473145961761,0.94888299703598,0.75,0.0896205604076386,0.0906806141138077,0.0920000523328781,0.0904827415943146,0.955279529094696,0.95048451423645,0.946091711521149,0.951888501644135,0.928969323635101,0.952318787574768,0.93002837896347,0.949014604091644,0.954181551933289,0.952441871166229,0.954520225524902,0.956952750682831,0.957884430885315,0.881032288074493,\n0.879364728927612,0.878738582134247,0.789911925792694,0.789941310882568,0.75,0.75,0.720000028610229,0.720000028610229,0.699999988079071,0.699999988079071,0.850000023841858,0.850000023841858,0.800000011920929,0.800000011920929,0.957197785377502,0.953077971935272,0.939027428627014,0.835327625274658,0.833593666553497,0.0943752005696297,0.0944032445549965,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.850000023841858,0.699999988079071,0.699999988079071,0.0682986751198769,0.0714335814118385,0.789074778556824,0.0760513916611671,0.0947359576821327,0.954803109169006,0.956382870674133,0.720000028610229,0.75,0.954493045806885,0.948985457420349,0.78932797908783,0.789512395858765,0.699999988079071,0.850000023841858,0.800000011920929,0.959878921508789,0.959619164466858,0.94746595621109,0.93335372209549,0.951277136802673,0.923790335655212,0.881081640720367,0.958416938781738,0.834649443626404,0.836609840393066,0.956299424171448,0.881010353565216,0.836093723773956,0.880341291427612,0.834789097309113,0.878566384315491,0.899624884128571,0.899553835391998,0.899523794651031,0.899480938911438,0.850000023841858,0.960817873477936,0.768886864185333,0.790004849433899,0.899999976158142,0.75,0.960687756538391,0.959923565387726,0.75,0.899999976158142,0.899999976158142,0.960811078548431,0.899999976158142,0.0961230620741844,0.0984849631786346,0.899999976158142,0.959491372108459,0.75,0.0948158726096153,0.0950082242488861,0.700767397880554,0.0730230212211609,0.0979870334267616,0.0872775539755821,0.087272122502327,0.0866196677088737,0.0942397788167,0.959409654140472,0.961271166801453,0.961122095584869,0.957583010196686,0.95744389295578,0.956457555294037,0.944807946681976,0.75,0.75,0.75,0.75,0.899999976158142,0.899999976158142,0.899999976158142,0.0906759724020958,0.0903674736618996,0.0961243137717247,0.0936058834195137,0.938084781169891,0.93389755487442,0.950093328952789,0.955193758010864,0.955569982528687,0.954447031021118,0.962438106536865,0.949910342693329,0.966332674026489,0.75,0.75,0.75,0.75,0.75,0.941100180149078,\n0.935536861419678,0.953422069549561,0.960933566093445,0.951039493083954,0.939891397953033,0.950097799301147,0.949685275554657,0.959550976753235,0.964796185493469,0.880356311798096,0.865171313285828,0.91388601064682,0.938835144042969,0.957113146781921,0.943677246570587,0.877648413181305,0.928777635097504,0.785357356071472,0.899999976158142,0.957551598548889,0.958083152770996,0.899999976158142,0.86806857585907,0.948952913284302,0.920421719551086,0.899999976158142,0.850000023841858,0.75,0.75,0.850000023841858,0.945503354072571,0.916061341762543,0.953746795654297,0.957053661346436,0.951983451843262,0.95653110742569,0.959425270557404,0.950447499752045,0.957255899906158,0.954313933849335,0.950628340244293,0.950628101825714,0.699999988079071,0.800000011920929,0.899999976158142,0.800000011920929,0.810391426086426,0.899999976158142,0.850000023841858,0.850000023841858,0.830171585083008,0.764804065227509,0.75,0.763968825340271,0.921127438545227,1,0.75,1,1,1,1,1,0.800000011920929,1,0.931986749172211,1,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.00678260065615177,0.00734655186533928,0.75,0.75,0.0065109939314425,0.75,0.00402423506602645,0.75,0.822583794593811,1,0.75,0.75,0.955177187919617,0.96015864610672,0.864858448505402,0.767907500267029,0.75,0.959308981895447,0.959520757198334,0.959039568901062,0.95704460144043,0.952542364597321,0.978068172931671,0.956893384456635,0.95896989107132,0.904391825199127,0.877550303936005,0.914088070392609,0.959565460681915,0.945497035980225,0.092599019408226,0.5,0.75,0.75,0.75,0.75,0.879189491271973,0.75,0.5,0.75,0.5,0.5,0.75,0.76336532831192,0.0300193205475807,0.0197536144405603,0.75,0.0123153384774923,0.00709361396729946,0.75,0.76811808347702,0.925329804420471,0.938286542892456,0.923435568809509,0.864238500595093,0.915386140346527,0.899999976158142,0.75,0.800000011920929,0.699999988079071,0.699999988079071,0.800000011920929,0.825247704982758,0.884745538234711,0.75,0.75,0.75,0.75,\n0.75,0.952121734619141,0.94670158624649,0.93092143535614,0.924777686595917,0.953759908676147,0.936432063579559,0.946027040481567,0.947521567344666,0.850173532962799,0.903109967708588,0.873982906341553,0.809221684932709,0.75,0.75,0.0102625312283635,0.75,0.942292749881744,0.877478003501892,0.942061126232147,0.941333055496216,0.943734705448151,0.943852305412292,0.75,0.75,0.75,0.93719083070755,0.90915858745575,0.75,0.957259058952332,0.953966915607452,0.959854364395142,0.934671580791473,0.951683163642883,0.959149658679962,0.959299862384796,0.965592980384827,0.75,0.947899401187897,0.957156240940094,0.947200894355774,0.944532811641693,0.946368992328644,0.781483590602875,0.960373640060425,0.956585705280304,0.0811243206262589,0.0857763141393662,0.0867564678192139,0.957601070404053,0.958110451698303,0.960652112960815,0.956212997436523,0.950175523757935,0.953033983707428,0.95390248298645,0.952684342861176,0.947774291038513,0.925760209560394,0.75,0.0890278890728951,0.0842892453074455,0.0817965343594551,0.0742781460285187,0.95094621181488,0.948776364326477,0.940522849559784,0.936695992946625,0.931431770324707,0.918804049491882,0.813201665878296,0.8664271235466,0.84716135263443,0.801027417182922,0.88867199420929,0.931282520294189,0.780009210109711,0.946900606155396,0.946670413017273,0.947484314441681,0.840196132659912,0.800000011920929,0.800000011920929,0.839022636413574,0.699999988079071,0.699999988079071,0.75,0.75,0.899999976158142,0.850000023841858,0.850000023841858,0.899999976158142,0.954739928245544,0.938593447208405,0.883178055286407,0.882882356643677,0.886038482189178,0.899999976158142,0.899999976158142,0.07585559040308,0.074390210211277,0.09121323376894,0.087418220937252,0.0914874374866486,0.899999976158142,0.081835925579071,0.0858589857816696,0.0672509297728539,0.0721054747700691,0.720495045185089,0.838570237159729,0.765313267707825,0.899999976158142,0.933104932308197,0.93582159280777,0.800000011920929,0.699999988079071,0.799659550189972,0.821321725845337,0.838018119335175,0.837090969085693,0.75,0.850000023841858,0.899999976158142,\n0.889135122299194,0.92995673418045,0.931536793708801,0.890445470809937,0.941257774829865,0.887241840362549,0.779425501823425,0.945341825485229,0.88369619846344,0.884203732013702,0.950628221035004,0.949951648712158,0.883653819561005,0.947980403900146,0.885260403156281,0.942782938480377,0.810312032699585,0.899999976158142,0.899999976158142,0.899999976158142,0.952167749404907,0.768492162227631,0.840166389942169,0.899999976158142,0.75,0.75,0.960485398769379,0.959158957004547,0.956989228725433,0.960198104381561,0.960046768188477,0.899999976158142,0.0983112379908562,0.0983274206519127,0.899999976158142,0.0946391001343727,0.960810780525208,0.0736546814441681,0.0791008844971657,0.0774789527058601,0.0683221891522408,0.081981897354126,0.0948949903249741,0.0952887535095215,0.899999976158142,0.0700687915086746,0.0828381180763245,0.0923292860388756,0.0757671371102333,0.0929875746369362,0.0933984667062759,0.0961728468537331,0.0964640229940414,0.0112190824002028,0.00527462316676974,0.00599608197808266,0.0109401093795896,0.00660790223628283,0.0231660008430481,0.0244253613054752,0.0114240096881986,0.0173866599798203,0.0214097537100315,0.0169858019798994,0.0169140622019768,0.0216232407838106,0.00598987704142928,0.0052340873517096,0.0111760459840298,0.0109166782349348,0.00654197158291936,0.0231000576168299,0.011360595934093,0.0173457507044077,0.0206026155501604,0.0168101955205202,0.0168885830789804,0.00280827027745545,0.00316052138805389,0.00436065997928381,0.00599541608244181,0.00596329383552074,0.00793657638132572,0.00531561719253659,0.00536487251520157,0.0040706223808229,0.00725838495418429,0.00932312104851007,0.00662264693528414,0.00651014456525445,0.00529910530894995,0.0042096390388906,0.00354334083385766,0.0051647606305778,0.00899781100451946,0.00610579364001751,0.00418041413649917,0.0040243323892355,0.00287933833897114,0.0038571204058826,0.00323691987432539,0.00287965033203363,0.00544132199138403,0.00374313560314476,0.00607317546382546,0.00863313768059015,0.00544475764036179,0.0054993792437017,0.00417273631319404,0.00950081180781126,\n0.0074219973757863,0.00667169876396656,0.00679259700700641,0.00543491076678038,0.00430912571027875,0.00528056034818292,0.00363293150439858,0.00623954366892576,0.00917037390172482,0.00430067488923669,0.0041407230310142,0.00296174036338925,0.0039620166644454\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.0267456942762977,0.0695652391424119,0.997218802892724,0,0.997222072389479,0.0675171332746874,-0.0314557301666788,0,-0.0695175802535841,0.995289909860946,-0.0675662066985298,0,-54.631121365628,-3.20257583373608,1.65094438652875,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.0267456972775019,0.997222184290371,-0.0695175880543334,0,0.0695652467630354,0.0675171406709483,0.995290018891401,0,0.997218806791107,-0.0314557302896473,-0.0675662069626633,0,0.0375826209140644,54.7475266028855,-0.498783977877638,1\n\t\t} \n\t}\n\tDeformer: 136817552, \"SubDeformer::Cluster_L_Ankle1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1006 {\n\t\t\ta: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,\n8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9104,9105,9111,9113,9115,9116,9118,9119,9124,9126,9127,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144,9147,9148,9149,9150,9151,9152,9154,9157,9162,9164,9168,9174,9175,9181,9182,9183,9184,9185,9196,9197,9198,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,\n9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9303,9308,9325,9327,9328,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9354,9355,9356,9357,9360,9369,9370,9371,9372,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9402,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9440,9441,9452,9453,9458,9460,9464,9466,9467,9468,9469,9473,9482,9483,9484,9485,9521,9524,9539,9541,9554,9555,9601,9632,9644,9645,9646,9647,9648,9654,9661,9783,9790,9792,9794,9795,9806,9814,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926\n\t\t} \n\t\tWeights: *1006 {\n\t\t\ta: 0.662252962589264,0.716935575008392,0.720179736614227,0.670780777931213,0.768863677978516,0.774946868419647,0.802139163017273,0.824174582958221,0.820186018943787,0.858241260051727,0.720582842826843,0.775384962558746,0.786859512329102,0.723640918731689,0.824556350708008,0.845559477806091,0.864950239658356,0.892545998096466,0.704158782958984,0.673352599143982,0.687313973903656,0.740170121192932,0.78624027967453,0.82932311296463,0.655422866344452,0.613076150417328,0.675190806388855,0.847468376159668,0.804767429828644,0.820174694061279,0.857121586799622,0.860617458820343,0.874466836452484,0.871271193027496,0.831805944442749,0.863919794559479,0.877875924110413,0.891996264457703,0.874595880508423,0.893714904785156,0.872262895107269,0.83377343416214,0.84788590669632,0.80837094783783,0.801326990127563,0.854566514492035,0.841355443000793,0.822431445121765,0.712380409240723,0.786515653133392,0.800219178199768,0.710730135440826,0.74511331319809,0.824387609958649,0.664935171604156,0.653990149497986,0.642671227455139,0.6425661444664,0.597245275974274,0.596463561058044,0.635055124759674,0.631588757038116,0.571098744869232,0.664387047290802,0.568991899490356,0.701522052288055,0.579633116722107,0.650809466838837,0.675891995429993,0.679120242595673,0.64745831489563,0.736279428005219,0.682271540164948,0.795476019382477,0.722612321376801,0.635961771011353,0.586889326572418,0.643270611763,0.663508534431458,0.7317253947258,0.717524886131287,0.781114041805267,0.785607278347015,0.624738037586212,0.718818366527557,0.584580779075623,0.696781635284424,0.792071640491486,0.740076243877411,0.78708153963089,0.82867842912674,0.716916739940643,0.780235946178436,0.794581592082977,0.821326792240143,0.702947616577148,0.782789766788483,0.716075003147125,0.797236800193787,0.646848678588867,0.581979751586914,0.590038537979126,0.59087860584259,0.695394396781921,0.688918888568878,0.726925373077393,0.751364767551422,0.784846127033234,0.815278291702271,0.836895823478699,0.85580587387085,0.879223763942719,0.880212366580963,0.635002911090851,\n0.610837399959564,0.835834264755249,0.842389523983002,0.89502215385437,0.889481902122498,0.909801483154297,0.899769723415375,0.888761699199677,0.883025705814362,0.768488585948944,0.736176431179047,0.620154917240143,0.61918431520462,0.584584772586823,0.582186162471771,0.599543333053589,0.606371879577637,0.602085590362549,0.759392023086548,0.743354380130768,0.641951978206635,0.607505738735199,0.743978083133698,0.7264643907547,0.724829494953156,0.66710889339447,0.777875006198883,0.809260308742523,0.826838612556458,0.597754776477814,0.592020213603973,0.579893112182617,0.613420307636261,0.810257375240326,0.855723738670349,0.869342446327209,0.83930629491806,0.744189202785492,0.710318505764008,0.721735775470734,0.69486540555954,0.59639298915863,0.595895648002625,0.567268490791321,0.562873125076294,0.570796370506287,0.581473410129547,0.586230039596558,0.716825127601624,0.730502545833588,0.619070827960968,0.576398611068726,0.713853776454926,0.700119316577911,0.579771995544434,0.69603168964386,0.687131941318512,0.587622165679932,0.59562212228775,0.638310849666595,0.495868265628815,0.504656076431274,0.682099580764771,0.62079256772995,0.619129598140717,0.637898862361908,0.685304403305054,0.392854332923889,0.545557498931885,0.499303996562958,0.497860908508301,0.481977909803391,0.191958338022232,0.193772777915001,0.167935505509377,0.176776140928268,0.69019490480423,0.678784191608429,0.433016240596771,0.604192554950714,0.417342305183411,0.372644573450089,0.808385014533997,0.811666429042816,0.736336946487427,0.764354586601257,0.717962324619293,0.66310316324234,0.0796902030706406,0.0722345486283302,0.453533738851547,0.546529531478882,0.583387970924377,0.59502637386322,0.581080198287964,0.584292113780975,0.547285854816437,0.671297550201416,0.709093928337097,0.697784125804901,0.773432612419128,0.701103806495667,0.500118792057037,0.806355118751526,0.760442793369293,0.784082531929016,0.840699017047882,0.544453740119934,0.655303418636322,0.774261713027954,0.620487987995148,0.650266408920288,0.633479595184326,0.626469314098358,0.571754097938538,\n0.715693593025208,0.76426762342453,0.898551404476166,0.499102562665939,0.779566049575806,0.8974888920784,0.490139544010162,0.744280457496643,0.576716959476471,0.120298206806183,0.0609138756990433,0.0686163753271103,0.0585639476776123,0.0609014816582203,0.173864901065826,0.151549980044365,0.160618603229523,0.179077684879303,0.311770230531693,0.289250820875168,0.182548344135284,0.220449775457382,0.232918500900269,0.1557277739048,0.429737746715546,0.436085075139999,0.498938947916031,0.499213874340057,0.545559585094452,0.498984545469284,0.392706125974655,0.638633489608765,0.568391859531403,0.498944014310837,0.499541968107224,0.499347507953644,0.499558687210083,0.499784559011459,0.506308078765869,0.488025993108749,0.471090734004974,0.489009350538254,0.494769752025604,0.494105905294418,0.495395541191101,0.495655655860901,0.492070853710175,0.493543356657028,0.493890047073364,0.492632776498795,0.52510541677475,0.503865361213684,0.547393321990967,0.578731000423431,0.578221321105957,0.604531288146973,0.666337788105011,0.618531048297882,0.458945125341415,0.467843025922775,0.495702832937241,0.471826136112213,0.463245213031769,0.499710947275162,0.503833949565887,0.741899967193604,0.669493854045868,0.639782190322876,0.693806409835815,0.580596685409546,0.528206884860992,0.497483104467392,0.497408628463745,0.504603862762451,0.648581326007843,0.624427199363709,0.502325057983398,0.590632736682892,0.498883485794067,0.497773230075836,0.497934967279434,0.496349453926086,0.496178597211838,0.498113840818405,0.49652174115181,0.494703501462936,0.493292182683945,0.493460863828659,0.494420170783997,0.495708435773849,0.49569571018219,0.495479911565781,0.495618104934692,0.494955003261566,0.495421648025513,0.496160745620728,0.496107131242752,0.544339060783386,0.529735803604126,0.589485824108124,0.60707688331604,0.549736261367798,0.633057951927185,0.630938470363617,0.64998871088028,0.615624070167542,0.498127013444901,0.500028312206268,0.501803278923035,0.473483175039291,0.478267163038254,0.471729397773743,0.478772342205048,0.475807130336761,0.478105336427689,\n0.482067912817001,0.472987681627274,0.476543188095093,0.483400821685791,0.498663365840912,0.49783006310463,0.497768074274063,0.506945431232452,0.505904972553253,0.742265939712524,0.777076601982117,0.709838807582855,0.723995983600616,0.920427918434143,0.92652815580368,0.908109724521637,0.886519014835358,0.750078618526459,0.70175689458847,0.739742457866669,0.779259204864502,0.495814889669418,0.495124042034149,0.495348423719406,0.525247037410736,0.501540124416351,0.515422761440277,0.54307609796524,0.49530503153801,0.494781821966171,0.494671732187271,0.494987636804581,0.654774129390717,0.76426112651825,0.695192337036133,0.628502249717712,0.855615854263306,0.789036810398102,0.495361059904099,0.494524925947189,0.495436549186707,0.495757460594177,0.496141195297241,0.496870189905167,0.495664089918137,0.613348126411438,0.550544440746307,0.569208562374115,0.592481851577759,0.674045324325562,0.953721344470978,0.98089611530304,0.796355009078979,0.962789952754974,0.862315773963928,0.959008634090424,0.931809902191162,0.882491052150726,0.883577704429626,0.551375806331635,0.618872940540314,0.838439345359802,0.677922546863556,0.655788064002991,0.495860993862152,0.497062891721725,0.687699973583221,0.497428089380264,0.498450934886932,0.4991714656353,0.498457342386246,0.498275578022003,0.499232739210129,0.499325484037399,0.498723983764648,0.499112755060196,0.499192982912064,0.498770505189896,0.499476730823517,0.499507606029511,0.499369323253632,0.498765498399735,0.801122665405273,0.497004777193069,0.498025625944138,0.499035775661469,0.498643934726715,0.494946539402008,0.498003214597702,0.498488068580627,0.812527358531952,0.497725337743759,0.495063692331314,0.505264818668365,0.495184719562531,0.516481697559357,0.507335722446442,0.497387260198593,0.507205486297607,0.499118983745575,0.498842120170593,0.498915076255798,0.498471945524216,0.498567849397659,0.497722923755646,0.498795121908188,0.499147802591324,0.820494115352631,0.46927735209465,0.459739953279495,0.73817503452301,0.774010121822357,0.577046036720276,0.497711896896362,0.494165003299713,\n0.633301734924316,0.47880819439888,0.495833784341812,0.48139351606369,0.497110813856125,0.76469612121582,0.795858263969421,0.506770610809326,0.73978990316391,0.494763672351837,0.494477927684784,0.500276744365692,0.70234751701355,0.49773570895195,0.690812289714813,0.861847698688507,0.498591303825378,0.799018800258636,0.498167306184769,0.498650819063187,0.5091193318367,0.497448414564133,0.482101559638977,0.44548761844635,0.44733864068985,0.455966800451279,0.691210627555847,0.687352657318115,0.694997549057007,0.650831580162048,0.691382348537445,0.511168897151947,0.522735774517059,0.576642036437988,0.559218406677246,0.55339902639389,0.576144576072693,0.581755459308624,0.527762532234192,0.547392010688782,0.530811905860901,0.519025087356567,0.503949224948883,0.475909888744354,0.48587840795517,0.44903889298439,0.481809675693512,0.457466155290604,0.448883175849915,0.515073657035828,0.562007606029511,0.499335706233978,0.529892086982727,0.512110590934753,0.534585952758789,0.494714945554733,0.483254015445709,0.547562420368195,0.59102463722229,0.530908048152924,0.520111799240112,0.571300983428955,0.57639741897583,0.547903001308441,0.521144568920136,0.503582537174225,0.506857693195343,0.444775521755219,0.477946311235428,0.467674791812897,0.484626680612564,0.499206751585007,0.49823185801506,0.497802197933197,0.496602028608322,0.497677952051163,0.499043405056,0.498800069093704,0.518403708934784,0.525831341743469,0.499872356653214,0.499278098344803,0.499828666448593,0.499938815832138,0.499490469694138,0.569541394710541,0.68333899974823,0.498219937086105,0.4974305331707,0.498798072338104,0.498037666082382,0.498205900192261,0.510666072368622,0.50631707906723,0.530737638473511,0.499969571828842,0.499186664819717,0.499278783798218,0.57228696346283,0.538302779197693,0.49847537279129,0.494693696498871,0.494539827108383,0.494640290737152,0.49461504817009,0.498110502958298,0.498928993940353,0.499923974275589,0.499071568250656,0.50044584274292,0.50257819890976,0.529922425746918,0.517054378986359,0.569340586662292,0.593726396560669,0.499435722827911,\n0.499883413314819,0.497263044118881,0.495622754096985,0.494674980640411,0.497550189495087,0.498391449451447,0.498559087514877,0.504504323005676,0.499798029661179,0.501299262046814,0.52972686290741,0.595946848392487,0.558468520641327,0.509782254695892,0.49771437048912,0.498413652181625,0.499226033687592,0.499752223491669,0.494891762733459,0.495065748691559,0.495090305805206,0.494971811771393,0.497306615114212,0.494864940643311,0.494124948978424,0.494882583618164,0.492664277553558,0.488881856203079,0.493738561868668,0.511237859725952,0.495989292860031,0.546556949615479,0.512413084506989,0.532420933246613,0.503437399864197,0.5750692486763,0.61922025680542,0.562155485153198,0.628194510936737,0.578537940979004,0.595672905445099,0.691051840782166,0.55819296836853,0.54462867975235,0.519611001014709,0.556648969650269,0.507583141326904,0.497512698173523,0.527811646461487,0.501895308494568,0.497514218091965,0.495734304189682,0.58951598405838,0.702751636505127,0.735632419586182,0.759821832180023,0.498141705989838,0.4822036921978,0.497402459383011,0.747796297073364,0.848888993263245,0.914315938949585,0.896286070346832,0.504512190818787,0.490088790655136,0.690164387226105,0.171521663665771,0.271039336919785,0.42390364408493,0.499330878257751,0.4996238052845,0.49933186173439,0.49904191493988,0.498877853155136,0.402910560369492,0.401398241519928,0.273808985948563,0.175097554922104,0.199212685227394,0.232243254780769,0.19456385076046,0.183189481496811,0.166510850191116,0.255079418420792,0.25168913602829,0.27091583609581,0.496359467506409,0.515789389610291,0.492695808410645,0.537370145320892,0.642270505428314,0.603465437889099,0.605224668979645,0.571839272975922,0.588908016681671,0.621786415576935,0.595558941364288,0.594146132469177,0.561316013336182,0.547303140163422,0.717162847518921,0.740826785564423,0.535634934902191,0.500117421150208,0.499933958053589,0.101766638457775,0.111037105321884,0.183134287595749,0.41256394982338,0.495221793651581,0.185607150197029,0.197905108332634,0.280133128166199,0.416712075471878,0.494052648544312,\n0.496475011110306,0.523596227169037,0.102055840194225,0.117517657577991,0.198546633124352,0.351395040750504,0.677316725254059,0.786939442157745,0.883826851844788,0.4284348487854,0.294497162103653,0.214689984917641,0.201732218265533,0.142618268728256,0.130712449550629,0.135116308927536,0.039704255759716,0.043820708990097,0.16945244371891,0.13146761059761,0.104484103620052,0.122791580855846,0.0540477894246578,0.135893955826759,0.074902355670929,0.146088987588882,0.00148449698463082,0.00180044712033123,0.00190533243585378,0.00161935156211257,0.00256754434667528,0.00247231777757406,0.00311465212143958,0.00306080444715917,0.00206518173217773,0.00141028501093388,0.00245590414851904,0.00250778347253799,0.00131974171381444,0.00111980270594358,0.00122817605733871,0.00136681995354593,0.00178884842898697,0.00197217962704599,0.00209920550696552,0.00111105316318572,0.00143118086270988,0.00153342681005597,0.00161730451509357,0.00108217669185251,0.00127602275460958,0.00116704078391194,0.00126482569612563,0.00127327290829271,0.00104213762097061,0.00113009929191321,0.00113605090882629,0.00124113645870239,0.00138873723335564,0.00140770059078932,0.00124231504742056,0.0013095501344651,0.00154323561582714,0.00152960699051619,0.00205415673553944,0.00227937055751681,0.00211106915958226,0.00291993888095021,0.00182866596151143,0.00118685979396105,0.00230278423987329,0.00110143003985286,0.00102221255656332,0.00162972358521074,0.00117750989738852,0.00201793806627393,0.00131509616039693,0.00156842230353504,0.00102850899565965,0.00110244657844305,0.00123351323418319,0.00109587737824768,0.0011475111823529,0.00133768632076681,0.00156263750977814,0.0018124032067135,0.00228998460806906,0.00124180514831096,0.00104946608189493,0.00122276064939797,0.00184418284334242,0.00182779424358159,0.118393562734127,0.0736616924405098,0.0249102488160133,0.0221831742674112,0.0899571180343628,0.112894177436829,0.0035569122992456,0.0474935285747051,0.00326452520675957,0.0028353682719171,0.00254967133514583,0.00683861877769232,0.00711500784382224,0.00409545283764601,\n0.00273589114658535,0.003227410139516,0.00404798192903399,0.00195459253154695,0.00146086083259434,0.00389905762858689,0.00379705731756985,0.00660856440663338,0.00885148253291845,0.0123358722776175,0.0371558479964733,0.0114142606034875,0.0049864212051034,0.00675698649138212,0.00125157495494932,0.00423817383125424,0.00477129686623812,0.00646650372073054,0.00695784715935588,0.00672228308394551,0.00723032187670469,0.00389069109223783,0.00655906740576029,0.00252278638072312,0.0070349182933569,0.00656781531870365,0.00377465505152941,0.0022606726270169,0.0145900612697005,0.0159324333071709,0.0146114667877555,0.0162585619837046,0.00300842896103859,0.00186342420056462,0.0134177384898067,0.00533000519499183,0.0120491916313767,0.00303325708955526,0.00548212928697467,0.00275028543546796,0.00285283708944917,0.00401054183021188,0.00471321679651737,0.0049645071849227,0.00414479849860072,0.00535947270691395,0.00535075319930911,0.00770913390442729,0.00910867750644684,0.0109262075275183,0.0109737552702427,0.00946454796940088,0.00697548314929008,0.00968931894749403,0.0109196323901415,0.00148356088902801,0.00119180616457015,0.00157149462029338,0.00133818294852972,0.00121787074021995,0.0010013849241659,0.00150432379450649,0.00106834375765175,0.0265174955129623,0.0213357713073492,0.0482362285256386,0.111389972269535,0.178344205021858,0.00177848618477583,0.038597047328949,0.100632637739182,0.0014194343239069,0.001388642587699,0.00193746259901673,0.00310551328584552,0.00602176133543253,0.00628630816936493,0.00313000287860632,0.170989155769348,0.139627546072006,0.151070773601532,0.153013974428177,0.120552375912666,0.0891576483845711,0.0443960651755333,0.00191070046275854,0.00883879698812962,0.0236061438918114,0.0467715933918953,0.0756872594356537,0.00838399399071932,0.0180896297097206,0.0441901236772537,0.085140235722065,0.00336254015564919,0.00880239997059107,0.0102470815181732,0.0147635443136096,0.0361023619771004,0.116256214678288,0.172775134444237,0.00751014146953821,0.00373137649148703,0.00834355410188437,0.0205908212810755,0.0430315807461739,\n0.0499112345278263,0.0812323614954948,0.00125892937649041,0.0243157092481852,0.0145227061584592,0.0245868228375912,0.0315362252295017,0.0573749467730522,0.0648135989904404,0.0631936118006706,0.0577625222504139,0.043515969067812,0.0366875343024731,0.0112321749329567,0.013560269959271,0.0102249225601554,0.0125839579850435,0.0148925315588713,0.0148319378495216,0.0134749580174685,0.00117894972208887,0.00133481808006763,0.00110387580934912,0.00105489289853722,0.00100554316304624,0.00101256731431931,0.00131905952002853,0.00110926921479404,0.00121478259097785,0.00114571722224355,0.00102083408273757,0.0012131753610447,0.00142305926419795,0.00133616500534117,0.00117117504123598,0.00116741808596998,0.00118442473467439,0.00101484113838524,0.00115493719931692,0.00110147777013481,0.00105720793362707,0.0010019481414929,0.0013600290985778,0.00124275567941368,0.00102024816442281,0.00116363493725657,0.00116654590237886,0.00119186111260206,0.00126692734193057,0.0010253731161356,0.00108020601328462,0.00105418777093291,0.00120234151836485,0.00108549254946411,0.00124082865659148,0.00112835713662207,0.00100101053249091,0.00140826881397516,0.0752988681197166,0.124789580702782,0.160499945282936,0.169288575649261,0.18654191493988,0.202812254428864,0.19428688287735,0.195977717638016,0.176482886075974,0.163506925106049,0.0958758518099785,0.0982898101210594,0.0110053485259414,0.0175644811242819,0.0482322424650192,0.0564861409366131,0.0773198679089546,0.200308069586754,0.173628240823746,0.102711834013462,0.0539824739098549,0.041170883923769,0.0225588493049145,0.00827851705253124,0.00417001498863101,0.00216753897257149,0.2001593708992,0.169763833284378,0.113478347659111,0.0628452077507973,0.0467336252331734,0.0235445890575647,0.00916387978941202,0.00502217374742031,0.00239629042334855,0.00120741280261427,0.00100570963695645,0.00109773920848966,0.00137963378801942,0.00222949031740427,0.00335098314099014,0.00546552427113056,0.0150606175884604,0.0319381542503834,0.0473228059709072,0.0694313868880272\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.00974440814253744,0.261574781949277,-0.965134041092506,0,-0.998083574277973,-0.0615276823665369,-0.00659841607181874,0,-0.0611084378058366,0.963220134760211,0.261673040260058,0,4.90316612261137,-0.745790957099573,9.65255231474262,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.00974440798755643,-0.998083558403841,-0.0611084368339307,0,0.261574768803395,-0.0615276792743595,0.963220086351959,0,-0.965134005991403,-0.00659841583183998,0.261673030743233,0,9.55886503187761,4.91157425829824,-1.50782697121848,1\n\t\t} \n\t}\n\tDeformer: 135182880, \"SubDeformer::Cluster_R_Ankle\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *991 {\n\t\t\ta: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,7329,7330,7331,7332,7334,7335,7337,7340,7341,7343,7344,7345,7350,7353,7358,7359,7360,7361,7391,7392,7394,7406,7407,7408,7422,7473,7494,7495,7496,7503,7505,7518,7519,7520,7521,7534,7583,7584,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7615,7617,7619,7621,7622,7624,7625,7630,7631,7632,7633,7636,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7653,7655,7656,7657,7658,7660,7668,7670,7674,7680,7681,7687,7688,7689,7690,7691,7700,7702,7703,7704,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7821,7822,7823,7824,7825,7826,7827,7829,7830,7839,7840,7841,7842,7843,7844,7845,7846,7849,7856,7857,7858,7859,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7926,7940,7947,7949,7951,7952,7963,\n7971,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,\n8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9879,9880,9881,9882,9892,9893,9894,9895,9896,9897,9898,9899,9900\n\t\t} \n\t\tWeights: *991 {\n\t\t\ta: 0.65597528219223,0.709011733531952,0.711628913879395,0.66375207901001,0.759973526000977,0.765329241752625,0.795203804969788,0.816222965717316,0.818207204341888,0.855426013469696,0.711977422237396,0.765679836273193,0.77683424949646,0.715062618255615,0.816503047943115,0.836960196495056,0.862055420875549,0.889485239982605,0.695444762706757,0.665904521942139,0.679816842079163,0.73004561662674,0.776868939399719,0.825136184692383,0.648822367191315,0.608231008052826,0.667994916439056,0.85819935798645,0.814932882785797,0.829913377761841,0.867069661617279,0.869281947612762,0.881918132305145,0.87449187040329,0.836233615875244,0.87369179725647,0.88720440864563,0.899121880531311,0.881960272789001,0.896691918373108,0.875333070755005,0.843001961708069,0.857326745986938,0.817641735076904,0.81023383140564,0.86391407251358,0.848222017288208,0.824821889400482,0.71945595741272,0.795259475708008,0.809440016746521,0.718048810958862,0.753644526004791,0.834041953086853,0.658038258552551,0.647229909896851,0.636279046535492,0.635104060173035,0.591275751590729,0.590951085090637,0.628393530845642,0.623831152915955,0.565776765346527,0.655584037303925,0.563940346240997,0.696153104305267,0.576048612594604,0.643130004405975,0.667751610279083,0.66983163356781,0.639135599136353,0.725501179695129,0.67290997505188,0.789611160755157,0.717039465904236,0.629511773586273,0.582115352153778,0.636384546756744,0.656113088130951,0.739117980003357,0.725175380706787,0.790050804615021,0.794268727302551,0.628185749053955,0.724548757076263,0.584488451480865,0.698292374610901,0.801148116588593,0.746210277080536,0.794003248214722,0.837971389293671,0.718741595745087,0.78249591588974,0.803311944007874,0.830314457416534,0.709548056125641,0.791346609592438,0.7228022813797,0.806047439575195,0.640056371688843,0.577611863613129,0.585572898387909,0.586568832397461,0.688723087310791,0.681378185749054,0.717833161354065,0.743086636066437,0.773878395557404,0.805986285209656,0.826895892620087,0.848493158817291,0.874839961528778,0.877769410610199,0.630060195922852,\n0.606431543827057,0.844351172447205,0.852287471294403,0.904818415641785,0.898178219795227,0.917577981948853,0.906475067138672,0.892982959747314,0.885418772697449,0.776828825473785,0.743370175361633,0.614108264446259,0.612488627433777,0.578422427177429,0.575816452503204,0.594617664813995,0.601395845413208,0.597555696964264,0.766813158988953,0.751835882663727,0.646396696567535,0.607691049575806,0.750361561775208,0.732623696327209,0.716885983943939,0.660877883434296,0.768944799900055,0.802345812320709,0.824857711791992,0.593540132045746,0.587819695472717,0.575874269008636,0.608721911907196,0.82046902179718,0.866474270820618,0.878058969974518,0.843822479248047,0.752577424049377,0.717527389526367,0.728131711483002,0.701335966587067,0.590925931930542,0.589995682239532,0.562100648880005,0.558030545711517,0.567298531532288,0.577193260192871,0.581563591957092,0.72448593378067,0.737729609012604,0.622413754463196,0.576157510280609,0.720308303833008,0.706418693065643,0.5756516456604,0.702696919441223,0.0011795781319961,0.00112896494101733,0.00102828920353204,0.001058503636159,0.00119337264914066,0.00106297561433166,0.00105914496816695,0.00112405023537576,0.00129260960966349,0.00110061012674123,0.00120096164755523,0.00110439362470061,0.00113475671969354,0.00120625190902501,0.00139809981919825,0.00129295082297176,0.00111539557110518,0.00109270925167948,0.00118347734678537,0.00108626356814057,0.00102851632982492,0.0011068059829995,0.00107913860119879,0.00102953403256834,0.00105880200862885,0.00136339839082211,0.00121706398203969,0.00114103371743113,0.00122526451013982,0.00110203702934086,0.00123027886729687,0.00113892008084804,0.00114424154162407,0.00116908457130194,0.00124633009545505,0.00106995261739939,0.00136725208722055,0.00105368765071034,0.00160929455887526,0.00194077589549124,0.00206075864844024,0.00175796006806195,0.00272555043920875,0.00264457450248301,0.00324998120777309,0.00313259661197662,0.00219884281978011,0.00152749510016292,0.00256760860793293,0.00256768707185984,0.0014338179025799,0.00121916015632451,0.00133566302247345,\n0.00147598213516176,0.00189867184963077,0.00205294857732952,0.00214026914909482,0.00119636079762131,0.00151501852087677,0.00159123365301639,0.0016437767772004,0.00106482626870275,0.00118096638470888,0.00139029452111572,0.0010679098777473,0.00122420466504991,0.00130276964046061,0.00128704076632857,0.00109646108467132,0.0011663946788758,0.00114935508463532,0.00130753719713539,0.00104656210169196,0.00143568706698716,0.00142728083301336,0.00104413845110685,0.00105172116309404,0.00116641377098858,0.00122365332208574,0.00145702308509499,0.00145369581878185,0.00198867777362466,0.00222442415542901,0.00210310681723058,0.00292031979188323,0.00178137444891036,0.00112225965131074,0.00230230134911835,0.00102994462940842,0.00159001746214926,0.0011182960588485,0.00201727566309273,0.00127973523922265,0.00156331283506006,0.00106918648816645,0.00122230243869126,0.00108542153611779,0.00111366261262447,0.00132836529519409,0.00169839384034276,0.00196366291493177,0.00245589460246265,0.00135377666447312,0.00114572537131608,0.0010074065066874,0.001139544416219,0.00178096874151379,0.00182523450348526,0.123235963284969,0.0753501355648041,0.0931120961904526,0.117816068232059,0.00382658536545932,0.045457985252142,0.00366591010242701,0.00752341700717807,0.00435095373541117,0.00292286323383451,0.00395955424755812,0.00190321274567395,0.00143028236925602,0.00383550697006285,0.00381829147227108,0.00336781400255859,0.00902270525693893,0.0128849148750305,0.0199999995529652,0.011979641392827,0.00525866402313113,0.00715382117778063,0.00446873297914863,0.00504618370905519,0.00680423062294722,0.00727805029600859,0.00710283266380429,0.00761045608669519,0.00406671036034822,0.00681646214798093,0.00266376044601202,0.00734136626124382,0.00681392010301352,0.00394017994403839,0.00238415785133839,0.0151917962357402,0.0165377892553806,0.015185103751719,0.0168243162333965,0.00304434704594314,0.00188357208389789,0.013633968308568,0.00538172433152795,0.0122589133679867,0.00306214136071503,0.00553420465439558,0.00272889854386449,0.00280646537430584,0.00395028758794069,\n0.0046858717687428,0.0049549350515008,0.00409943610429764,0.15074747800827,0.13802894949913,0.13859336078167,0.0366114713251591,0.0394646488130093,0.00432951329275966,0.00327839748933911,0.00322125758975744,0.00318318116478622,0.00321962824091315,0.0033142757602036,0.0032075101044029,0.0033591843675822,0.00414895033463836,0.00397540256381035,0.00139672122895718,0.00108024047221988,0.00141620181966573,0.00657118484377861,0.00721793109551072,0.00716012995690107,0.125166103243828,0.174555525183678,0.133634239435196,0.184101939201355,0.100839555263519,0.00133616954553872,0.181976735591888,0.101485811173916,0.151200979948044,0.122543193399906,0.158087536692619,0.124445781111717,0.0913600325584412,0.0419483035802841,0.00197794218547642,0.00463608838617802,0.0444087125360966,0.0723793208599091,0.0501375421881676,0.0044353692792356,0.0413938835263252,0.0806875303387642,0.00426826579496264,0.120993569493294,0.178608581423759,0.143479540944099,0.00399883696809411,0.00555829936638474,0.0498151890933514,0.0808451771736145,0.0747244507074356,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0114197684451938,0.0139735713601112,0.00279642338864505,0.0127804530784488,0.0154154840856791,0.0153974965214729,0.0140355518087745,0.00105739862192422,0.0010168842272833,0.00113954034168273,0.00107212935108691,0.00119830516632646,0.00106814026366919,0.00102596683427691,0.00136564020067453,0.0716719478368759,0.124523319303989,0.163556218147278,0.174040555953979,0.192555144429207,0.20968496799469,0.201058372855186,0.216555178165436,0.176410168409348,0.0914620831608772,0.0927850008010864,0.0199999995529652,0.0454204343259335,0.0527630150318146,0.0724167823791504,0.152738720178604,0.206173092126846,0.178831785917282,0.106841884553432,0.0199999995529652,0.00605552084743977,0.00442697573453188,0.125580474734306,0.680477499961853,0.584467530250549,0.592251241207123,0.633143901824951,0.495578348636627,\n0.504434049129486,0.691548705101013,0.626969277858734,0.627072930335999,0.64034640789032,0.691565096378326,0.397741913795471,0.545433342456818,0.501227915287018,0.497676163911819,0.482865214347839,0.20007586479187,0.197468772530556,0.173577681183815,0.184274166822433,0.684533894062042,0.676782727241516,0.437961488962173,0.61360228061676,0.414381235837936,0.369911134243011,0.819726526737213,0.824492573738098,0.750284850597382,0.775287508964539,0.726000666618347,0.670123636722565,0.0739083811640739,0.0679146945476532,0.452167540788651,0.550536513328552,0.579955399036407,0.590891540050507,0.577258586883545,0.5803182721138,0.545221924781799,0.677812218666077,0.716372787952423,0.704729378223419,0.764798760414124,0.694859147071838,0.500020503997803,0.812475562095642,0.761427819728851,0.779982626438141,0.851395726203918,0.548225879669189,0.661731421947479,0.782220721244812,0.616512358188629,0.64509129524231,0.628571748733521,0.62187534570694,0.569682478904724,0.722129046916962,0.771439790725708,0.910011827945709,0.499018520116806,0.771681487560272,0.908240258693695,0.4902164041996,0.751008927822113,0.573323547840118,0.0569627061486244,0.0632607415318489,0.0546923018991947,0.0569528415799141,0.177458420395851,0.15703871846199,0.16798897087574,0.187099754810333,0.316656291484833,0.291301727294922,0.184640720486641,0.225315734744072,0.228931069374084,0.152371928095818,0.43130487203598,0.438795536756516,0.498869776725769,0.499205946922302,0.554381132125854,0.499159663915634,0.391060262918472,0.655699729919434,0.581697702407837,0.499182015657425,0.499595403671265,0.499299347400665,0.49955028295517,0.499799698591232,0.505017697811127,0.486934632062912,0.470368415117264,0.488239347934723,0.494710594415665,0.494018644094467,0.495431184768677,0.495684057474136,0.491640150547028,0.493156641721725,0.493532657623291,0.492237329483032,0.522314846515656,0.502140820026398,0.544067442417145,0.574277400970459,0.574915885925293,0.600490629673004,0.664091825485229,0.614323496818542,0.458703994750977,0.46759495139122,0.49502158164978,0.472131460905075,\n0.463651090860367,0.501171886920929,0.505290508270264,0.747058033943176,0.673701882362366,0.642837941646576,0.698455512523651,0.583079934120178,0.52874481678009,0.497591882944107,0.497499942779541,0.504370510578156,0.653982579708099,0.628796756267548,0.502160012722015,0.593420624732971,0.499008297920227,0.497864127159119,0.498020023107529,0.496375501155853,0.496211588382721,0.49818554520607,0.496551722288132,0.494357407093048,0.49289858341217,0.492912411689758,0.494054555892944,0.495537310838699,0.495428442955017,0.495201587677002,0.495444416999817,0.494400411844254,0.495095014572144,0.495912224054337,0.495938241481781,0.540739595890045,0.526813268661499,0.584814488887787,0.601803541183472,0.545946657657623,0.627271831035614,0.626056015491486,0.644936084747314,0.611551523208618,0.497566670179367,0.499393194913864,0.501378178596497,0.473256915807724,0.478118002414703,0.47151792049408,0.47887846827507,0.47583332657814,0.478424072265625,0.482468962669373,0.473071485757828,0.476970911026001,0.483539015054703,0.499649405479431,0.497931659221649,0.497813880443573,0.50836980342865,0.507277965545654,0.749438107013702,0.788178980350494,0.714695155620575,0.729622066020966,0.927818417549133,0.933475971221924,0.915226221084595,0.894323170185089,0.754922032356262,0.706262648105621,0.745560348033905,0.78499960899353,0.495742470026016,0.495044946670532,0.495270699262619,0.52238667011261,0.500341296195984,0.513158202171326,0.539141952991486,0.495112806558609,0.494484156370163,0.494385927915573,0.494777828454971,0.646189391613007,0.752212941646576,0.683876216411591,0.620637953281403,0.84437370300293,0.775074124336243,0.495411992073059,0.494442224502563,0.49536070227623,0.495829224586487,0.496245741844177,0.496983617544174,0.495706379413605,0.616513133049011,0.551888883113861,0.570059299468994,0.593811511993408,0.678223431110382,0.960020244121552,0.983643352985382,0.799996078014374,0.963403701782227,0.86243861913681,0.955750465393066,0.925033330917358,0.876249372959137,0.874520301818848,0.551191985607147,0.61811488866806,0.829396069049835,\n0.672635018825531,0.651278257369995,0.495612591505051,0.496858716011047,0.682246148586273,0.497243225574493,0.498295664787292,0.49911630153656,0.498381614685059,0.498192936182022,0.499222010374069,0.499349772930145,0.498703926801682,0.499136686325073,0.49921178817749,0.498755186796188,0.499519914388657,0.499555051326752,0.499421000480652,0.498835802078247,0.81444239616394,0.496883779764175,0.497934907674789,0.499061793088913,0.498675882816315,0.49486768245697,0.49796661734581,0.498460471630096,0.803469717502594,0.49705970287323,0.494718581438065,0.504018425941467,0.494964092969894,0.514969348907471,0.506780028343201,0.497430324554443,0.506990075111389,0.499210506677628,0.498955190181732,0.499020576477051,0.498609274625778,0.498691350221634,0.497828960418701,0.498702019453049,0.49905851483345,0.833559393882751,0.46928659081459,0.459820955991745,0.729598581790924,0.76493626832962,0.571733355522156,0.497356355190277,0.493865221738815,0.629204213619232,0.47857478260994,0.495688110589981,0.481274753808975,0.497067838907242,0.770751476287842,0.8014115691185,0.508015990257263,0.745351433753967,0.494458675384521,0.494277447462082,0.500205874443054,0.707429111003876,0.49787762761116,0.6831995844841,0.869009733200073,0.498603701591492,0.800292253494263,0.498153626918793,0.498638093471527,0.507655739784241,0.497437328100204,0.482029527425766,0.445579886436462,0.447542548179626,0.456178933382034,0.691224992275238,0.68994003534317,0.696367621421814,0.646832704544067,0.690497040748596,0.512747287750244,0.52385687828064,0.577970147132874,0.56131386756897,0.553135573863983,0.57562243938446,0.582246720790863,0.528339803218842,0.5488241314888,0.532852530479431,0.519924283027649,0.504666149616241,0.476075559854507,0.486094027757645,0.449438631534576,0.482994347810745,0.45784518122673,0.449248284101486,0.514452159404755,0.561508595943451,0.498755604028702,0.53039538860321,0.512394607067108,0.534120500087738,0.494775086641312,0.483250230550766,0.548449218273163,0.590691864490509,0.528972744941711,0.518154919147491,0.570011258125305,0.575352251529694,\n0.54700493812561,0.520142495632172,0.502695500850677,0.505330801010132,0.444546610116959,0.477938383817673,0.467626750469208,0.483919441699982,0.498431533575058,0.498079359531403,0.49764558672905,0.496072262525558,0.497497260570526,0.499024957418442,0.498812049627304,0.517799317836761,0.524429976940155,0.499892085790634,0.499295592308044,0.499847054481506,0.49994283914566,0.49948513507843,0.569468915462494,0.680891454219818,0.49810403585434,0.497266590595245,0.498697310686111,0.497886002063751,0.498042225837708,0.509154617786407,0.505030632019043,0.528218388557434,0.499973088502884,0.499091774225235,0.499190449714661,0.570380747318268,0.535448849201202,0.498326450586319,0.494596093893051,0.494365692138672,0.494462668895721,0.494515120983124,0.497997492551804,0.498909473419189,0.499929428100586,0.498976171016693,0.499798595905304,0.502025723457336,0.528575539588928,0.515362143516541,0.56660008430481,0.591955363750458,0.49943020939827,0.499888569116592,0.497349143028259,0.495646834373474,0.494615614414215,0.497694700956345,0.498536199331284,0.498701572418213,0.504468858242035,0.499821990728378,0.500964164733887,0.529118895530701,0.595583856105804,0.559608042240143,0.509870648384094,0.497819513082504,0.498537451028824,0.499243289232254,0.499773025512695,0.494683772325516,0.494805634021759,0.49482062458992,0.494760543107986,0.497144222259521,0.49457660317421,0.493789881467819,0.49458646774292,0.492286801338196,0.48815643787384,0.492628186941147,0.509193360805511,0.494705110788345,0.543936431407928,0.510835826396942,0.529115557670593,0.501953482627869,0.569758892059326,0.610815465450287,0.557083010673523,0.621949911117554,0.572470784187317,0.591342747211456,0.695724725723267,0.55320018529892,0.540745139122009,0.517162621021271,0.552327692508698,0.507378876209259,0.497698903083801,0.527704477310181,0.50039005279541,0.496325492858887,0.494565069675446,0.582824468612671,0.695666551589966,0.727506101131439,0.750860035419464,0.498115301132202,0.482150375843048,0.497372984886169,0.739583432674408,0.856374561786652,0.921864926815033,\n0.903915703296661,0.506085455417633,0.491403371095657,0.683231711387634,0.171146184206009,0.270570337772369,0.424545764923096,0.499346643686295,0.499631464481354,0.499337196350098,0.499045014381409,0.498869776725769,0.407788127660751,0.406853288412094,0.278324812650681,0.1684460490942,0.190583914518356,0.237119317054749,0.196648374199867,0.182746469974518,0.163020357489586,0.261683225631714,0.259773045778275,0.278990775346756,0.496063411235809,0.519686937332153,0.49615415930748,0.544732213020325,0.653069257736206,0.612227141857147,0.612312376499176,0.576975464820862,0.592626690864563,0.625570714473724,0.599093317985535,0.597411274909973,0.564130961894989,0.549682676792145,0.729838013648987,0.750595331192017,0.539929986000061,0.500865161418915,0.500391781330109,0.0966039299964905,0.105603665113449,0.174986571073532,0.409532397985458,0.495501756668091,0.193169787526131,0.205573499202728,0.287738084793091,0.421045809984207,0.494261145591736,0.496202617883682,0.522774279117584,0.10176257789135,0.117253668606281,0.198547959327698,0.353632628917694,0.686014235019684,0.796516358852386,0.892734885215759,0.432033270597458,0.301140606403351,0.221199050545692,0.208233565092087,0.00253082648850977,0.00275990343652666,0.00274983723647892,0.00286803673952818,0.00353791960515082,0.00354324467480183,0.00348438322544098,0.00343684293329716,0.00327312108129263,0.00293036713264883,0.00278568617068231,0.0028021929319948,0.00250480184331536,0.00308231031522155,0.00499954726547003,0.0106547418981791,0.00859358441084623,0.0010503102093935,0.00117027142550796,0.00592980580404401,0.00331242568790913,0.0199999995529652,0.0762817785143852,0.13538670539856,0.159179985523224,0.127241417765617,0.172544106841087,0.19372533261776\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.00974139876223671,-0.261572280877899,-0.965134713535369,0,-0.99808360954043,-0.0615269355671852,0.00660116218659383,0,-0.0611084648132927,0.963220827450316,-0.261670358354416,0,4.90243372735329,-0.72616871906631,-9.58014941330076,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.00974139846069232,-0.998083578644817,-0.0611084629216841,0,-0.261572284969406,-0.0615269365295879,0.963220842516991,0,-0.965134745332177,0.00660116240407218,-0.261670366975266,0,-9.483837235735,4.91159978411053,-1.50780017761377,1\n\t\t} \n\t}\n\tDeformer: 135195936, \"SubDeformer::Cluster_Neck\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1150 {\n\t\t\ta: 94,95,96,108,109,122,123,124,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,163,166,167,168,169,170,171,172,173,174,175,176,340,341,342,343,829,830,831,832,882,885,914,915,916,917,998,999,1010,1011,1089,1092,1093,1147,1148,1154,1155,1156,1157,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1749,1750,1751,1752,1753,1754,1755,1759,1760,1761,1762,1763,1764,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1806,1807,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,2006,2007,2008,2500,2501,2502,2503,2554,2557,2585,2586,2587,2588,2676,2677,2688,2689,2770,2773,2774,2829,2830,2836,2837,2838,2839,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3422,3426,3427,3428,3429,3430,3431,3434,3435,3436,3437,3438,3467,3468,3469,3470,3471,3472,3473,3474,3475,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4098,4099,4155,4156,4157,4158,4159,4160,4161,4163,4203,4204,4205,4207,4208,4209,4210,4211,4212,4230,4231,4234,4235,4236,4237,4240,4248,4249,4250,4251,4252,4265,4266,4267,4268,4269,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,\n4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,5303,5304,5305,5306,5309,5311,5313,5314,5318,5319,5320,5321,5322,5323,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5379,5380,5381,5382,5383,5384,5387,5388,5389,5391,5394,5395,5397,5398,5399,5400,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5414,5415,5416,5417,5418,5425,5426,5427,5428,5429,5430,5431,5439,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457,5462,5467,5477,5478,5479,5480,5483,5484,5520,5524,5727,5728,5729,5730,5731,5732,5733,5734,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5810,5811,5812,5813,5814,5815,5818,5819,5820,5822,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5844,5845,5846,5847,5848,5855,5856,5857,5858,5859,5860,5861,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5893,5894,5898,5908,6001,6484,6485,6486,6487,6488,6489,6490,6491,9982,9983,9991,9992,9993,9998,10030,10031,10039,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064,10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10091,10092,10093,10094,10100,10101,10102,10111,10112,10116,10133,10134,10135,10136,10145,10192,10200,10202,10205,10208,10209,10210,10211,10212,10213,10214,10215,10217,10218,10219,10220,10221,10222,10233,10234,10235,10236,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10278,10279,10280,10282,10283,\n10284,10286,10287,10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10300,10301,10302,10304,10305,10306,10307,10308,10309,10310,10317,10318,10319,10320,10321,10322,10323,10324,10325,10326,10327,10329,10330,10331,10332,10333,10334,10335,10336,10337,10338,10339,10340,10341,10342,10343,10344,10345,10346,10347,10348,10349,10350,10351,10352,10353,10354,10355,10356,10357,10358,10359,10360,10361,10363,10364,10365,10366,10367,10368,10370,10372,10373,10376,10377,10378,10394,10395,10415,10416,10419,10426,10427,10430,10431,10433,10436,10452,10453,10454,10455,10459,10462,10465,10466,10467,10468,10476,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10487,10488,10489,10490,10494,10495,10497,10498,10499,10500,10501,10502,10503,10504,10505,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10541,10542,10543,10544,10550,10553,10571,10573,10575,10583,10586,10626,10632,10635,10638,10639,10641,10642,10643,10644,10645,10646,10647,10649,10650,10651,10652,10653,10654,10655,10657,10658,10659,10660,10671,10672,10673,10674,10675,10676,10682,10683,10685,10686,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10701,10702,10703,10704,10705,10706,10707,10708,10713,10715,10716,10717,10718,10719,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10752,10753,10754,10755,10756,10757,10758,10759,10760,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780,10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10808,10823,10824,10825,10844,10845,10848,10849,10855,10856,10857,10858,10859,10860,10862,10865,10880,10881,10882,10883,10886,10889,10892,10893,10894,10898,10901,10902,10903,10904,10905,10906,10907,10908\n\t\t} \n\t\tWeights: *1150 {\n\t\t\ta: 0.567255795001984,0.594789087772369,1,0.485924780368805,0.528420746326447,1,1,0.25,0.489311069250107,0.392085492610931,0.399200916290283,0.367956221103668,0.407303422689438,0.416285485029221,0.430377572774887,0.41740095615387,0.377135217189789,0.420548111200333,0.393889129161835,0.375083416700363,0.464555472135544,0.463200926780701,0.460871756076813,0.430750489234924,0.40896874666214,0.415823668241501,0.389805644750595,0.430850774049759,0.406835645437241,1,0.268844544887543,0.450425446033478,0.456322252750397,0.450362801551819,0.4505615234375,0.37137359380722,0.319888979196548,0.333971530199051,0.377856224775314,0.461536556482315,0.4345563352108,0.425735384225845,0.447437614202499,0.403514206409454,0.434205532073975,0.309248238801956,0.318339675664902,0.508810639381409,0.544517993927002,0.517018139362335,0.488460779190063,0.486855179071426,0.488402009010315,0.565379500389099,0.531720817089081,0.533512532711029,0.570134997367859,0.592637956142426,1,1,0.596871972084045,0.460071235895157,0.483837783336639,0.496960788965225,0.517288565635681,0.490690231323242,0.527705907821655,0.531510651111603,0.564505398273468,0.568630576133728,0.412591725587845,0.460467159748077,0.501135110855103,0.431564539670944,1,1,1,1,1,0.278514921665192,0.315800756216049,1,1,1,0.295491874217987,0.423362791538239,0.427228540182114,0.431595623493195,0.437787711620331,0.438149452209473,0.441805690526962,0.450171411037445,0.445821523666382,0.43207174539566,0.421678841114044,0.420816749334335,0.440724223852158,0.449095875024796,0.158272460103035,0.214777141809464,0.23971700668335,0.317722767591476,0.34293207526207,0.384178310632706,0.453722923994064,0.37018746137619,0.2797671854496,0.272957593202591,0.468755125999451,0.456089347600937,0.453430771827698,0.367843747138977,0.374986797571182,0.423006445169449,0.391115933656693,0.400139689445496,0.418090730905533,0.398969799280167,0.45367106795311,0.374496161937714,0.348593175411224,0.337754309177399,0.448754966259003,0.439398765563965,0.412120491266251,0.40472885966301,0.395856976509094,\n0.491585850715637,0.417333751916885,1,1,0.446810632944107,0.444157123565674,0.436623930931091,0.305552244186401,0.321938186883926,0.45570120215416,0.456821322441101,0.421524226665497,0.410207986831665,0.439488798379898,0.430942058563232,0.486270278692245,0.387218713760376,0.513144791126251,0.553484082221985,0.527101457118988,0.492273092269897,0.488050699234009,0.493159621953964,0.572631776332855,0.536227822303772,0.536720275878906,0.575529217720032,0.602228164672852,1,1,0.609866917133331,0.454447686672211,0.484999120235443,0.497838407754898,0.525630235671997,0.493739008903503,0.554608345031738,0.549289286136627,0.577452898025513,0.585927069187164,0.404821395874023,0.461030542850494,0.52098685503006,0.475875169038773,1,1,1,1,1,1,0.34978786110878,1,1,1,0.267421126365662,0.413493543863297,0.420259416103363,0.425440341234207,0.43252557516098,0.431422144174576,0.436633944511414,0.420562446117401,0.409768640995026,0.410564452409744,0.431873440742493,0.441510498523712,0.178753688931465,0.248801708221436,1,0.341445356607437,0.399679660797119,0.401330173015594,0.312750190496445,0.289100527763367,0.260428875684738,0.0274547934532166,0.0250113885849714,0.020182766020298,0.0213320329785347,0.016894893720746,0.0194678697735071,0.0149198956787586,0.0193698238581419,0.0146699715405703,0.0137685351073742,0.0113338427618146,0.0107923075556755,0.0357030481100082,0.0397298000752926,0.0218236707150936,0.0282798446714878,0.0171993505209684,0.0227650869637728,0.0176588520407677,0.0130077684298158,0.0150612825527787,0.0187534429132938,0.0210761055350304,0.0117735685780644,0.0151852741837502,0.013343752361834,0.0096684992313385,0.012965239584446,0.00918575096875429,0.0302136708050966,0.0265279468148947,0.0199599303305149,0.015185602940619,0.0155232883989811,0.0111408829689026,0.0331871323287487,0.0244939364492893,0.0269742105156183,0.0207655429840088,0.0188741628080606,0.0187237989157438,0.038996160030365,0.0349120125174522,0.0274578537791967,0.0220344085246325,0.041811753064394,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,\n1,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,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,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,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,0.195673152804375,0.364670842885971,0.328575611114502,0.335197657346725,0.085664302110672,0.0847082063555717,0.109214313328266,0.145181283354759,1,0.292138516902924,0.1701730042696,0.268163949251175,0.274444133043289,0.123346589505672,0.0517623275518417,0.0323195643723011,0.0741127878427505,0.108336910605431,0.0483566932380199,0.0131363812834024,0.0477573983371258,0.00303209642879665,0.0137467281892896,0.00896062422543764,0.00180904532317072,0.0341183207929134,0.0385043062269688,0.293479233980179,0.160098940134048,0.155995458364487,0.199746564030647,0.0119855618104339,0.237626984715462,0.440084129571915,0.233796462416649,0.444397240877151,0.309454947710037,0.160931527614594,0.369414836168289,0.386035412549973,0.161727607250214,0.106181867420673,0.0822702571749687,0.0846450924873352,0.0603290311992168,0.0332393832504749,0.0122639155015349,0.0174598526209593,0.0603569746017456,0.263093948364258,0.33202987909317,0.0128398509696126,0.00547032617032528,0.00472192838788033,0.0279744360595942,0.0175511501729488,0.0347373820841312,0.0315300486981869,0.0298746712505817,0.0178451966494322,0.00422401027753949,0.00319708767347038,0.00969248823821545,0.00549563439562917,0.0098872184753418,0.116298198699951,0.113489478826523,0.0818140730261803,0.0848385840654373,0.116220399737358,0.0814184322953224,0.11701412498951,0.095750592648983,0.00365511584095657,0.019964512437582,0.00232761516235769,0.00926866568624973,0.00592594314366579,0.00528620649129152,0.273272782564163,0.00890387129038572,0.0180002469569445,0.0394606180489063,0.147415712475777,0.140457794070244,0.0401500388979912,\n0.0032884725369513,0.0260648149996996,0.0329115353524685,0.0179773308336735,0.00425787409767509,0.00778371561318636,0.00381025741808116,0.00544504728168249,0.211386486887932,0.215239286422729,0.231434643268585,0.408174365758896,0.367100775241852,0.128619104623795,1,0.304448693990707,0.176563605666161,0.274393022060394,0.283235043287277,0.129507526755333,0.0551842972636223,0.034300934523344,0.078447587788105,0.114036232233047,0.0511978343129158,0.0139047084376216,0.0508126877248287,0.0317802466452122,0.142172694206238,0.0929999127984047,0.0189517624676228,0.34366649389267,0.393704414367676,0.294252127408981,0.161952465772629,0.163479775190353,0.213232666254044,0.125898495316505,0.247030854225159,0.443164050579071,0.233504742383957,0.450279980897903,0.309741675853729,0.162085667252541,0.379501342773438,0.25,0.168081417679787,0.107104353606701,0.0829724371433258,0.0879543945193291,0.0629429370164871,0.183462262153625,0.0351017713546753,0.0128694428130984,0.0183484964072704,0.0632648542523384,0.259588420391083,0.0136276334524155,0.0057412046007812,0.00497032888233662,0.0297496803104877,0.0184993632137775,0.0365210957825184,0.0330784022808075,0.0315940752625465,0.0185253042727709,0.00435465015470982,0.00335264601744711,0.0100949313491583,0.00577421206980944,0.0104488199576736,0.117551773786545,0.126195579767227,0.0899995565414429,0.103110551834106,0.140919372439384,0.082244835793972,0.11901718378067,0.0211004968732595,0.0245979446917772,0.00974327325820923,0.00623384583741426,0.161613687872887,0.0055119595490396,0.282902300357819,0.00928386207669973,0.018939271569252,0.0417766198515892,0.154402107000351,0.143449380993843,0.147689074277878,0.0421619713306427,0.0346495062112808,0.00349515746347606,0.220319107174873,0.225046843290329,0.240709781646729,0.40315368771553,0.378050059080124,0.136889830231667,1,0.314606815576553,0.00275175319984555,0.00350375100970268,0.00223227171227336,0.00326038477942348,0.00345232943072915,0.00327272177673876,0.00360468029975891,0.00282804574817419,0.00355280679650605,1,1,0.00362786720506847,\n0.00348612759262323,1,1,1,1,0.00774744292721152,0.0106565840542316,0.00863821338862181,0.00595487840473652,0.0128081925213337,0.0164071209728718,0.016546867787838,0.25,0.25,1,0.25,0.25,0.25,0.25,0.00147943664342165,0.00134516227990389,0.0044733015820384,0.00360238761641085,0.00173059292137623,0.00240649236366153,0.00280290725640953,0.00358973792754114,0.00190061377361417,0.0248462148010731,0.151691138744354,0.101414285600185,0.101350642740726,0.00352429714985192,0.00175461545586586,0.00108897860627621,0.00120286992751062,0.00216193147934973,0.0918875187635422,0.0180216785520315,0.00100491382181644,0.00119083886966109,0.00139025796670467,0.00597331812605262,0.00791144277900457,0.00467343721538782,0.00444712163880467,0.0175031926482916,0.0186443794518709,0.0193254761397839,0.0109613062813878,0.0139002539217472,0.0153780998662114,0.0041714389808476,0.00452382443472743,0.00202354602515697,0.5,1,0.25,0.25,0.25,0.25,0.101412929594517,0.5,0.25,0.5,0.5,0.5,0.5,0.0021704516839236,0.00124227663036436,0.00209963205270469,0.00538497371599078,0.5,0.0101059842854738,0.0141486637294292,0.0122741842642426,0.0101597858592868,0.0116839092224836,0.00574857275933027,0.00651532784104347,0.00907000526785851,0.00696895597502589,0.0087407324463129,0.00351020158268511,0.00782129820436239,1,1,1,1,1,1,1,1,0.00179124786518514,0.00472647324204445,0.00530879013240337,0.00628127250820398,0.00882341712713242,0.00924219656735659,0.00794229563325644,0.0049978494644165,0.0205187033861876,0.00416509388014674,1,1,1,1,1,1,1,1,0.0047590765170753,0.00339766312390566,1,1,0.00117793213576078,0.0049570444971323,0.004824782256037,0.0124465888366103,0.0127216335386038,1,1,1,1,0.0186837278306484,0.0140060009434819,0.00721948593854904,1,1,0.00884454976767302,1,0.00395213393494487,1,0.0116208745166659,0.013472743332386,0.0186006035655737,0.0184362661093473,0.011931050568819,0.0167338736355305,0.0170167628675699,0.0126416739076376,0.0168435014784336,0.00547084817662835,0.0172698926180601,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.00125138647854328,0.00204948312602937,\n0.00359823647886515,0.00145057961344719,0.00187749601900578,0.00122394051868469,0.00116844475269318,0.0013314897660166,0.00126363977324218,0.00163859105668962,0.00136439059861004,0.00143550056964159,0.00218372559174895,0.00267671863548458,0.00233855727128685,0.00157993321772665,0.00108630012255162,0.00163278100080788,0.00147458596620709,0.00104575627483428,0.00109344394877553,0.00156189978588372,0.0027174826245755,1,0.25,0.00419261958450079,0.00326536339707673,0.00335888448171318,0.00118930672761053,0.00312373973429203,0.25,0.00116739247459918,0.00136812450364232,1,0.0136201335117221,0.0129918465390801,0.0130262523889542,0.0141849555075169,0.0142200998961926,0.0202176105231047,0.00510521046817303,0.0147238532081246,0.010338207706809,0.00867407489567995,1,1,1,0.00789877492934465,0.00324751692824066,0.00364983663894236,0.0022549747955054,1,0.00544625706970692,0.00590713182464242,1,1,1,1,1,0.00919234938919544,0.00692324060946703,0.0103907808661461,0.0123759154230356,0.016865961253643,0.0124860825017095,0.0155578637495637,0.25,0.25,0.25,0.25,0.25,0.00203575659543276,0.00208194018341601,0.00567516684532166,0.00245430134236813,0.00209734006784856,0.0054551437497139,0.00334027502685785,0.00234061665832996,0.00376753066666424,0.0190892461687326,0.101087607443333,0.102376267313957,0.00378289772197604,0.00555694475769997,0.00121506373398006,0.00127516605425626,0.00153478526044637,0.00121405138634145,0.0919240638613701,0.00373780587688088,0.00167861278168857,0.00223392457701266,0.00221726926974952,0.0106646819040179,0.00716324429959059,0.0345897115767002,0.00900897104293108,0.0182691775262356,0.00811813399195671,0.0113305104896426,0.0197549313306808,0.0211176052689552,0.0061979959718883,0.0087542524561286,0.0139151802286506,0.00718409521505237,0.00402087578549981,0.00166014290880412,0.00292091490700841,0.00405985442921519,0.00209410861134529,0.00352013343945146,0.5,0.25,0.25,1,0.25,0.25,0.101336054503918,0.5,0.25,0.5,0.5,0.00412551639601588,0.00775624206289649,0.00404722802340984,0.00429436750710011,0.00155673618428409,0.0014443468535319,\n0.00130896712653339,0.00134402082767338,0.0104999812319875,0.0105549236759543,0.0127923814579844,0.0147713171318173,0.0141640063375235,0.011232266202569,0.01196941267699,0.0103948712348938,0.00805490650236607,0.00575671857222915,0.0102886073291302,0.0108860861510038,1,1,1,1,1,1,1,1,0.00152104836888611,0.00132340157870203,0.00119240442290902,0.00119349034503102,0.00247540534473956,0.00618533464148641,0.00595171796157956,0.00725632114335895,0.0107390712946653,0.00959169398993254,0.00815762672573328,0.00856028590351343,0.00995538290590048,0.0215687062591314,1,1,1,1,1,1,1,1,0.00500578666105866,0.00820006150752306,0.00368156004697084,1,1,0.00129385036416352,0.00134667137172073,0.00484176818281412,0.00508514931425452,0.0135751375928521,0.25,1,1,1,1,0.0191637482494116,0.0159182604402304,0.00941314082592726,1,0.00361253484152257,1,1,0.0125703969970346,0.0191097129136324,0.0188217274844646,0.0150680541992188,0.0141781587153673,0.0193612296134233,0.0181489326059818,0.0193812530487776,0.0148670021444559,0.00837697088718414,0.0181021224707365,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.00221460894681513,0.00483389338478446,0.00995899457484484,0.00166275002993643,0.00107236753683537,0.00141309737227857,0.00251308549195528,0.00117712223436683,0.00119686732068658,0.00369730149395764,0.00232940819114447,0.00343035673722625,0.00512200966477394,0.00415379228070378,0.00224908231757581,0.00186692702118307,0.00240918109193444,0.0036583230830729,0.00148228707257658,0.00362345040775836,0.00243953289464116,0.00497984746471047,0.00342305307276547,0.00419780611991882,0.00295878807082772,0.00106835423503071,0.00148653844371438,0.00132255384232849,0.00168555148411542,0.00212236680090427,0.00320635898970068,0.25,0.25,0.00437035784125328,0.00346185616217554,0.00354567030444741,0.00130656303372234,0.00313585111871362,0.00616921996697783,0.00590131152421236,0.00172159122303128,0.00200400478206575,0.00266929413191974,0.0020909383893013,0.00145117833744735,0.0025090635754168,0.00256710313260555,0.00129591429140419,0.00128374621272087\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.0524868350678716,0.0529138509284646,0.997218759939732,0,0.940038672709068,-0.339614138039713,-0.0314568518442159,0,0.337005086578302,0.939075270948667,-0.0675663372191002,0,-56.3654154323426,21.2906301347447,1.65101161799859,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.0524868349406584,0.94003867043068,0.337005085761497,0,0.052913850775869,-0.339614137060317,0.939075268240515,0,0.997218761307028,-0.0314568518873467,-0.0675663373117411,0,0.18545326968084,60.2682047899057,-0.886519735148667,1\n\t\t} \n\t}\n\tDeformer: 135197072, \"SubDeformer::Cluster_L_Ball\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *847 {\n\t\t\ta: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8623,8628,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,\n8780,8781,8782,8783,8784,8785,8786,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9077,9078,9079,9086,9087,9141,9222,9223,9224,9225,9226,9227,9229,9233,9234,9235,9238,9241,9242,9243,9244,9245,9246,9247,9248,9249,9251,9252,9253,9254,9255,9256,9257,9258,9260,9261,9262,9264,9265,9266,9267,9268,9270,9271,9272,9273,9274,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9332,9333,9334,9335,9336,9338,9339,9344,9345,9347,9348,9349,9354,9355,9356,9357,9369,9370,9371,9372,9383,9384,9385,9386,9388,9389,9390,9391,9392,9393,9394,9396,9397,9398,9399,9400,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9818,9819,9820,9821,9822,9823,\n9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9901,9902,9903,9904,9905,9906,9907,9908,9923,9924,9925,9926\n\t\t} \n\t\tWeights: *847 {\n\t\t\ta: 0.119809061288834,0.0899978801608086,0.129694148898125,0.157971039414406,0.0655382722616196,0.102676093578339,0.0493819825351238,0.0801638662815094,0.0396263524889946,0.0630189478397369,0.135046094655991,0.107540957629681,0.11192848533392,0.142919838428497,0.0843309238553047,0.0852136611938477,0.0635753720998764,0.0593578219413757,0.192490458488464,0.200015053153038,0.162885546684265,0.191255062818527,0.170955494046211,0.139657527208328,0.176798492670059,0.156122818589211,0.161453932523727,0.0408337861299515,0.0603096075356007,0.0812023133039474,0.0624551698565483,0.029839189723134,0.0544516630470753,0.054666955024004,0.0336862355470657,0.0624573267996311,0.0633768364787102,0.0567393265664577,0.0580587983131409,0.0563296005129814,0.0576892644166946,0.104413233697414,0.0770940035581589,0.0993608608841896,0.118208408355713,0.0997513458132744,0.123212285339832,0.144008576869965,0.144543543457985,0.125933632254601,0.101286850869656,0.120418056845665,0.0898743644356728,0.082826592028141,0.175235584378242,0.206051632761955,0.20803314447403,0.287898749113083,0.352314889431,0.320552468299866,0.262158662080765,0.332916170358658,0.405986249446869,0.319005310535431,0.420205354690552,0.288312464952469,0.414280354976654,0.276978254318237,0.243617594242096,0.281397551298141,0.316190302371979,0.245399445295334,0.300980687141418,0.194138199090958,0.267054826021194,0.240853235125542,0.281522959470749,0.253161817789078,0.234090819954872,0.226632595062256,0.261527568101883,0.187547445297241,0.160497680306435,0.364978283643723,0.263920068740845,0.407592862844467,0.289993405342102,0.17541928589344,0.242737710475922,0.195276826620102,0.137758135795593,0.269458144903183,0.206763193011284,0.140182182192802,0.129011526703835,0.172453701496124,0.147585853934288,0.199256956577301,0.148286879062653,0.234329968690872,0.245895057916641,0.216519474983215,0.188423424959183,0.103776790201664,0.191133603453636,0.185088723897934,0.0749577209353447,0.166032284498215,0.0475209578871727,0.13492988049984,0.0298269018530846,0.100796863436699,\n0.0224829353392124,0.141362354159355,0.175193801522255,0.0989582315087318,0.0417463518679142,0.0243088398128748,0.0775943920016289,0.0157915055751801,0.0797843635082245,0.0186276473104954,0.0958492234349251,0.0739613026380539,0.0987996235489845,0.313051700592041,0.342331558465958,0.399825572967529,0.411330610513687,0.397170573472977,0.275049090385437,0.239233568310738,0.211740121245384,0.243876278400421,0.352577656507492,0.388358443975449,0.183568000793457,0.165666341781616,0.0815498232841492,0.111265502870083,0.0577223934233189,0.042687963694334,0.0341188460588455,0.208152711391449,0.181814447045326,0.215607687830925,0.150894671678543,0.0531679205596447,0.0347578637301922,0.0246079619973898,0.0286764390766621,0.0848506242036819,0.113070398569107,0.132778897881508,0.146839424967766,0.326059967279434,0.358287960290909,0.412675321102142,0.427787512540817,0.424188673496246,0.250109553337097,0.284029006958008,0.265100747346878,0.23208250105381,0.372414231300354,0.417168736457825,0.202001944184303,0.178038120269775,0.21736142039299,0.148579463362694,0.0343438498675823,0.0178217813372612,0.0483061522245407,0.0802863091230392,0.0154612669721246,0.00884495582431555,0.024283966049552,0.040769174695015,0.0130178304389119,0.0205114874988794,0.0153527930378914,0.016140166670084,0.0136747797951102,0.00986284576356411,0.00427819881588221,0.00722352927550673,0.00711198942735791,0.0163313783705235,0.0112073970958591,0.00929472502321005,0.0253093186765909,0.0200225468724966,0.0138108003884554,0.00415289960801601,0.00256811967119575,0.00319767044857144,0.0112569211050868,0.0154976118355989,0.00776961492374539,0.0317798443138599,0.0830756649374962,0.0679816603660584,0.002111661946401,0.00217902287840843,0.00262391986325383,0.0132161434739828,0.104563571512699,0.126195386052132,0.159771472215652,0.159212738275528,0.0733592361211777,0.100023798644543,0.1074343547225,0.111484587192535,0.0233124699443579,0.0703045204281807,0.010179772041738,0.0060359057970345,0.00849007628858089,0.00860253255814314,0.019992146641016,0.00909887067973614,\n0.0370676107704639,0.0633366629481316,0.135420516133308,0.120002366602421,0.157945588231087,0.160173356533051,0.060064110904932,0.0850093364715576,0.084347702562809,0.00733144860714674,0.00175352673977613,0.0131671754643321,0.00396548444405198,0.0915219038724899,0.138763025403023,0.00711936876177788,0.001887789927423,0.00187672674655914,0.00180047412868589,0.00188750913366675,0.0146881053224206,0.0102584706619382,0.00863561127334833,0.00683643994852901,0.00424826936796308,0.00276495539583266,0.0034044929780066,0.00569254253059626,0.00191985000856221,0.0027708294801414,0.00209227530285716,0.00309577863663435,0.00212210300378501,0.0015722387470305,0.00134062161669135,0.00130497117061168,0.204428568482399,0.240890353918076,0.215098306536675,0.146842062473297,0.494769752025604,0.494105905294418,0.495395541191101,0.495655655860901,0.492070853710175,0.493543356657028,0.493890047073364,0.492632776498795,0.435047715902328,0.462608724832535,0.383706748485565,0.344641864299774,0.235167190432549,0.212380930781364,0.181989669799805,0.345770686864853,0.118253737688065,0.0800283998250961,0.0991662740707397,0.0648122876882553,0.100251704454422,0.113893955945969,0.0691032484173775,0.154710173606873,0.157654821872711,0.335175216197968,0.285561293363571,0.411798715591431,0.464162200689316,0.497483104467392,0.497408628463745,0.493552297353745,0.345870792865753,0.369031637907028,0.495175987482071,0.403188109397888,0.498849123716354,0.497773230075836,0.497934967279434,0.496349453926086,0.496178597211838,0.498113840818405,0.49652174115181,0.494703501462936,0.493292182683945,0.492458581924438,0.494420170783997,0.495708435773849,0.49569571018219,0.495479911565781,0.495618104934692,0.493433386087418,0.495421648025513,0.496160745620728,0.496107131242752,0.418340176343918,0.434583425521851,0.339237004518509,0.31533095240593,0.416455090045929,0.295802593231201,0.214149355888367,0.201820328831673,0.205367624759674,0.0822143629193306,0.0956392288208008,0.0748522356152534,0.0653277561068535,0.0626779273152351,0.0779718831181526,0.0524279996752739,\n0.0528356619179249,0.0511609353125095,0.0496504344046116,0.0658826380968094,0.0637751594185829,0.0336999036371708,0.0348111018538475,0.00433988263830543,0.00446385284885764,0.0678059607744217,0.0538580566644669,0.0546310767531395,0.0104043334722519,0.116521611809731,0.090772956609726,0.0542768314480782,0.0352695845067501,0.0424237586557865,0.0887500420212746,0.153960809111595,0.280644834041595,0.242277592420578,0.124399460852146,0.495814889669418,0.495124042034149,0.495348423719406,0.464802771806717,0.487164556980133,0.470115929841995,0.443319916725159,0.49530503153801,0.494781821966171,0.494671732187271,0.494987636804581,0.312596261501312,0.216291069984436,0.292845606803894,0.348908662796021,0.131920486688614,0.20519183576107,0.495361059904099,0.494524925947189,0.495436549186707,0.495757460594177,0.496141195297241,0.496870189905167,0.495664089918137,0.381458014249802,0.444033443927765,0.423699676990509,0.40310999751091,0.31701996922493,0.01352006662637,0.00623834365978837,0.194196224212646,0.0081644132733345,0.128129526972771,0.00901213102042675,0.0167376678436995,0.108408644795418,0.035431731492281,0.440156221389771,0.377069413661957,0.158670663833618,0.0304759200662375,0.0383747220039368,0.00827804021537304,0.00587422773241997,0.0275462977588177,0.00514383288100362,0.00309813022613525,0.00165706186089665,0.00308532593771815,0.00344883580692112,0.00153451645746827,0.00134903774596751,0.00255205435678363,0.00177448592148721,0.00161401403602213,0.0024589782115072,0.00104652903974056,0.00126132590230554,0.00246899691410363,0.00533299054950476,0.00599044188857079,0.00394871924072504,0.00192845857236534,0.0027121368329972,0.494946539402008,0.00399358989670873,0.00302386237308383,0.0626282393932343,0.493795990943909,0.495063692331314,0.488114684820175,0.495184719562531,0.479027658700943,0.487426996231079,0.49675327539444,0.485897928476334,0.499118983745575,0.498842120170593,0.498915076255798,0.498471945524216,0.498567849397659,0.497722923755646,0.498795121908188,0.499147802591324,0.00467635691165924,0.0670545846223831,\n0.102516353130341,0.171086966991425,0.131708532571793,0.391339808702469,0.0549012310802937,0.011670021340251,0.112286701798439,0.0454526841640472,0.00833240710198879,0.0372853241860867,0.00577836437150836,0.220962136983871,0.112559981644154,0.051339328289032,0.0841941982507706,0.494763672351837,0.494477927684784,0.496494054794312,0.117242857813835,0.49773570895195,0.225124195218086,0.0650158226490021,0.498591303825378,0.197639212012291,0.00366536597721279,0.0026983511634171,0.485027343034744,0.00510318018496037,0.0358083508908749,0.155403360724449,0.154275134205818,0.122542470693588,0.291669100522995,0.153436154127121,0.152971222996712,0.323384523391724,0.164903864264488,0.211265802383423,0.21014766395092,0.25732234120369,0.259123921394348,0.24392506480217,0.26708647608757,0.259630799293518,0.213490962982178,0.158189788460732,0.158966541290283,0.147020593285561,0.189305245876312,0.176712840795517,0.13990107178688,0.154465168714523,0.182679980993271,0.122141182422638,0.154182508587837,0.173029288649559,0.185888528823853,0.215016633272171,0.153718262910843,0.19850005209446,0.22823129594326,0.147075280547142,0.186001405119896,0.158042415976524,0.192552268505096,0.233826741576195,0.302742838859558,0.274362176656723,0.202020406723022,0.248197495937347,0.187687203288078,0.230491310358047,0.270352780818939,0.172357693314552,0.142427876591682,0.177623927593231,0.216424167156219,0.177695736289024,0.49823185801506,0.497802197933197,0.493438005447388,0.497677952051163,0.499043405056,0.498800069093704,0.480737179517746,0.473599851131439,0.499872356653214,0.499278098344803,0.499828666448593,0.499938815832138,0.499490469694138,0.428288877010345,0.298123270273209,0.498219937086105,0.4974305331707,0.498798072338104,0.498037666082382,0.498205900192261,0.484404802322388,0.48499321937561,0.456718504428864,0.499969571828842,0.499186664819717,0.499278783798218,0.426042973995209,0.454804599285126,0.49847537279129,0.494693696498871,0.494539827108383,0.494640290737152,0.49461504817009,0.498110502958298,0.498928993940353,0.499923974275589,\n0.499071568250656,0.494272619485855,0.496581465005875,0.46791198849678,0.475545167922974,0.412802815437317,0.393669903278351,0.499435722827911,0.499883413314819,0.497263044118881,0.495622754096985,0.494674980640411,0.497017949819565,0.498391449451447,0.498559087514877,0.490382015705109,0.499798029661179,0.497542917728424,0.467545807361603,0.391185462474823,0.422848254442215,0.482203125953674,0.49771437048912,0.498413652181625,0.499226033687592,0.499752223491669,0.494891762733459,0.495065748691559,0.495090305805206,0.494971811771393,0.497306615114212,0.494864940643311,0.494124948978424,0.494882583618164,0.492664277553558,0.484863072633743,0.479086011648178,0.437741309404373,0.471439510583878,0.429207265377045,0.474411964416504,0.453916072845459,0.479357570409775,0.40096178650856,0.372501075267792,0.425279170274735,0.368588149547577,0.416071623563766,0.398315280675888,0.304622709751129,0.434937685728073,0.446757704019547,0.470192223787308,0.435698121786118,0.488551676273346,0.497512698173523,0.46674171090126,0.476854473352432,0.48199325799942,0.480819195508957,0.402228116989136,0.166978493332863,0.147668540477753,0.137913808226585,0.00371660990640521,0.0360510423779488,0.0051951096393168,0.142808973789215,0.0712238401174545,0.0408410467207432,0.0475897714495659,0.147152066230774,0.188807547092438,0.172839537262917,0.00292108580470085,0.00229511526413262,0.00176306103821844,0.00133823312353343,0.00133625592570752,0.00191617012023926,0.00224431487731636,0.00722364755347371,0.0104683004319668,0.0168343223631382,0.0028557509649545,0.00251159467734396,0.00577683001756668,0.00345012429170311,0.00296396017074585,0.00282692280597985,0.0128484172746539,0.0095820389688015,0.00735749956220388,0.00728109432384372,0.00222123926505446,0.00233622593805194,0.00484567414969206,0.00572063308209181,0.0406887419521809,0.0657581984996796,0.067342184484005,0.0861546471714973,0.0813479200005531,0.125508472323418,0.00697338348254561,0.0218249130994082,0.00429057935252786,0.00421941420063376,0.00140310742426664,0.00193769996985793,0.00202646269463003,\n0.00154978304635733,0.00140596809796989,0.00627871742472053,0.00652931304648519,0.00638186885043979,0.0052344617433846,0.00497622787952423,0.00719883758574724,0.0146173173561692,0.00557320425286889,0.00636823568493128,0.00689202733337879,0.00697624310851097,0.00970681756734848,0.0112742707133293,0.00393346231430769,0.00402365624904633,0.00522507447749376,0.00604073889553547,0.00587788922712207,0.00498025165870786,0.00626034289598465,0.00972524099051952,0.00114239507820457,0.00111113348975778,0.00414171675220132,0.00236102729104459,0.00183009263128042,0.00206261011771858,0.00431667268276215,0.00359163619577885,0.00402410188689828,0.00112126138992608,0.00112171703949571,0.00105882645584643,0.0145033225417137,0.0118997758254409,0.00529940519481897,0.00493975775316358,0.0143253924325109,0.0182842966169119,0.00492833275347948,0.00116543157491833,0.00208847760222852,0.00127227208577096,0.00117679627146572,0.0010990530718118,0.00108396471478045,0.00175433943513781,0.00203517079353333,0.00282048876397312,0.00822119135409594,0.00263078394345939,0.00141910591628402,0.00192295201122761,0.00138450774829835,0.00150411960203201,0.00203976663760841,0.00228403392247856,0.00198729173280299,0.00215014256536961,0.00130972138140351,0.00220602191984653,0.00217434973455966,0.00222587212920189,0.00128076423425227,0.003685612231493,0.00424104742705822,0.0036343524698168,0.00437509920448065,0.00102109019644558,0.0035608890466392,0.00179338501766324,0.00302712712436914,0.00102148356381804,0.00169268297031522,0.00118136254604906,0.00139748852234334,0.00162950914818794,0.0013056379975751,0.00101929879747331,0.00140442245174199,0.00219127861782908,0.00270291790366173,0.00329401204362512,0.00326476339250803,0.00271518155932426,0.00183340918738395,0.00250248983502388,0.00276692444458604,0.00340437423437834,0.00259506911970675,0.00460862275213003,0.00593590689823031,0.00691225472837687,0.00340974167920649,0.00509058265015483,0.00112110888585448,0.00121387781109661,0.0169682279229164,0.00548749091103673,0.00543259875848889,0.0201374050229788,0.0169682689011097,\n0.0109495837241411,0.00279454910196364,0.00127399724442512,0.00247281650081277,0.00270849862135947,0.00316046690568328,0.00136727222707123,0.00219548284076154,0.00320045603439212,0.00428038323298097,0.00147910148371011,0.00178130087442696,0.00333713716827333,0.0066437222994864,0.0122147183865309,0.0129707679152489,0.00197774101980031,0.00191754603292793,0.00388525449670851,0.00632278667762876,0.00660149846225977,0.00896979309618473,0.00456717424094677,0.00206927349790931,0.00231582089327276,0.00252133025787771,0.00406703725457191,0.00486808829009533,0.00824273750185966,0.00917720515280962,0.00850125029683113,0.0078301252797246,0.00287978257983923,0.00298473541624844,0.00218153605237603,0.00340549414977431,0.00411564903333783,0.00403880747035146,0.00348933646455407,0.00343293184414506,0.0105488328263164,0.0172855090349913,0.0181334689259529,0.017433799803257,0.01199746504426,0.00992203690111637,0.00504820328205824,0.00421494618058205,0.0042849900200963,0.00263979216106236,0.00343404896557331,0.00158844341058284,0.00203547044657171,0.00423127179965377,0.00304207019507885,0.00291611929424107,0.00767210964113474,0.00936917960643768,0.00764511292800307,0.00547787873074412,0.00499632721766829,0.00369138456881046,0.00168789469171315,0.00615179724991322,0.0075200037099421,0.00723410304635763,0.00540610775351524,0.0049501764588058,0.00335015472956002,0.00170559796970338,0.0010561659000814,0.00194478419143707,0.0029250062070787,0.00340850092470646,0.00362419104203582\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.255589736853964,-0.0564818010109381,-0.965134033467747,0,0.191954145948709,0.981381637988871,-0.00659877056532754,0,0.94753756318427,-0.183574891667538,0.261673019249778,0,-6.70568177723435,2.10466317765816,9.65255217683966,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.255589751837361,0.191954157201607,0.947537618731615,0,-0.0564818092528819,0.981381781194155,-0.183574918455175,0,-0.965134018668391,-0.00659877046414166,0.261673015237287,0,11.1487851983253,-0.7145996278846,4.21443668153796,1\n\t\t} \n\t}\n\tDeformer: 135198208, \"SubDeformer::Cluster_R_Ball\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *793 {\n\t\t\ta: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,7592,7593,7647,7727,7728,7729,7730,7731,7732,7734,7735,7737,7740,7741,7743,7744,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7758,7759,7760,7762,7763,7764,7765,7766,7768,7769,7770,7771,7772,7775,7776,7777,7778,7779,7780,7781,7782,7824,7825,7826,7827,7829,7839,7840,7841,7842,7843,7844,7845,7846,7857,7858,7871,7872,7874,7875,7876,7877,7879,7880,7881,7901,7902,7904,7905,7906,7907,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7985,7986,7987,7988,7989,7990,7991,7994,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8090,8095,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,\n8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,9873,9879,9880,9895,9896,9897,9898,9899,9900\n\t\t} \n\t\tWeights: *793 {\n\t\t\ta: 0.123883679509163,0.0943474769592285,0.134961158037186,0.162639766931534,0.0697063133120537,0.108251556754112,0.0524033196270466,0.0847631022334099,0.0409382507205009,0.0650418773293495,0.14041543006897,0.113288789987564,0.118082284927368,0.148398548364639,0.0891185849905014,0.0906334742903709,0.0656642466783524,0.0616054534912109,0.198496952652931,0.205138891935349,0.167858138680458,0.198637783527374,0.178409427404404,0.143416181206703,0.18131497502327,0.159762680530548,0.166233062744141,0.0380784012377262,0.0574136562645435,0.0774901211261749,0.0586475282907486,0.0280960090458393,0.0517396591603756,0.0539015904068947,0.033189844340086,0.0585433878004551,0.0591700300574303,0.0535746328532696,0.0552171356976032,0.0553255528211594,0.0569242052733898,0.0996541529893875,0.0730480924248695,0.0954719707369804,0.114045724272728,0.0943200141191483,0.118832118809223,0.142830416560173,0.142114534974098,0.121966376900673,0.0975252166390419,0.118137270212173,0.0873210653662682,0.0790054202079773,0.179913774132729,0.21073853969574,0.212490528821945,0.293317466974258,0.356615632772446,0.324366360902786,0.26684308052063,0.339021861553192,0.41007000207901,0.326832801103592,0.424576759338379,0.293492197990417,0.417733579874039,0.282556712627411,0.249511927366257,0.288817554712296,0.32280421257019,0.255000025033951,0.309341222047806,0.199754640460014,0.272426426410675,0.245370149612427,0.284887552261353,0.258011996746063,0.239316925406456,0.221955522894859,0.255657911300659,0.181189134716988,0.155432507395744,0.362362623214722,0.259469360113144,0.408041507005692,0.289074867963791,0.169036522507668,0.237904220819473,0.189767897129059,0.131405979394913,0.268256455659866,0.205114126205444,0.135546118021011,0.123717814683914,0.170050665736198,0.143152132630348,0.196216776967049,0.143190503120422,0.239085361361504,0.249148860573769,0.219918861985207,0.191812127828598,0.10781441628933,0.196348652243614,0.191489323973656,0.0791347473859787,0.17438517510891,0.0512946061789989,0.143159300088882,0.032307855784893,0.104688346385956,\n0.0235143061727285,0.144969567656517,0.178616628050804,0.0947948545217514,0.0392751023173332,0.0221151169389486,0.0722370743751526,0.0144961653277278,0.0750427767634392,0.0181457158178091,0.0943982899188995,0.0716638267040253,0.0967202931642532,0.317489057779312,0.347536385059357,0.404977738857269,0.417175382375717,0.40199014544487,0.27864933013916,0.242633402347565,0.206443920731544,0.236668929457664,0.348675906658173,0.388408333063126,0.18049268424511,0.163328364491463,0.0857354551553726,0.11523699015379,0.061653770506382,0.0454688034951687,0.0353203043341637,0.211448967456818,0.185158059000969,0.218788504600525,0.154455900192261,0.0504671223461628,0.0322298295795918,0.0230359863489866,0.0282043348997831,0.0824511051177979,0.11091822385788,0.130749419331551,0.144796341657639,0.329870730638504,0.362595438957214,0.416694194078445,0.432004392147064,0.427564829587936,0.253307223320007,0.287334799766541,0.259040862321854,0.227359682321548,0.369799613952637,0.41771399974823,0.1991196423769,0.175765603780746,0.220586806535721,0.146419927477837,0.0011718375608325,0.00114911294076592,0.00105914357118309,0.0153474509716034,0.0122399032115936,0.0149848219007254,0.0193942412734032,0.00106044148560613,0.00466891191899776,0.00221512629650533,0.00135503942146897,0.00115020526573062,0.00108056294266135,0.00109034439083189,0.00207694387063384,0.00295530282892287,0.00277027534320951,0.00150005717296153,0.00204197620041668,0.00146311393473297,0.00159478781279176,0.00215208088047802,0.00239511393010616,0.0021059256978333,0.00226955814287066,0.00137146469205618,0.00229739327915013,0.00227435654960573,0.0023139282129705,0.00133925990667194,0.00385013013146818,0.00441626738756895,0.0037888044025749,0.00454087881371379,0.00103383034002036,0.00362318963743746,0.00181189889553934,0.00308391591534019,0.00103167560882866,0.00170974782668054,0.00116305600386113,0.00138921814505011,0.00162649981211871,0.00129095150623471,0.00543705886229873,0.00679957866668701,0.0100675327703357,0.00103019457310438,0.00853319466114044,0.0043475697748363,0.00240783137269318,\n0.00915769953280687,0.00508745852857828,0.0159079786390066,0.00173971964977682,0.00541352434083819,0.00204087933525443,0.0211878269910812,0.0177388042211533,0.0112950056791306,0.00260227895341814,0.00253498554229736,0.00296481139957905,0.00295078824274242,0.00396276684477925,0.0129204485565424,0.0137165049090981,0.00469488883391023,0.00100137270055711,0.0065825660713017,0.00890141911804676,0.00356663577258587,0.00293150614015758,0.00308286678045988,0.00346310110762715,0.00427238317206502,0.00420571630820632,0.00364589900709689,0.0032017685007304,0.0104739516973495,0.0177482850849628,0.0189338531345129,0.0184334814548492,0.0127803916111588,0.0105676529929042,0.00754354521632195,0.00418343627825379,0.00245327991433442,0.00314569845795631,0.00392649602144957,0.00278305215761065,0.00265763350762427,0.00431641656905413,0.00809456873685122,0.00984568707644939,0.00806601252406836,0.00101106090005487,0.00756782200187445,0.0368285477161407,0.0192880965769291,0.0506718531250954,0.0835918933153152,0.0164523981511593,0.00966632552444935,0.0230161529034376,0.039513636380434,0.0122059863060713,0.0210127718746662,0.0151477660983801,0.0165873803198338,0.0147293750196695,0.0106907756999135,0.00464768800884485,0.00788442604243755,0.00767996162176132,0.0167933069169521,0.0118056312203407,0.00999381858855486,0.0271462593227625,0.0211340580135584,0.0145684257149696,0.00375504838302732,0.00230848137289286,0.00293680862523615,0.010424873791635,0.014182603918016,0.00704707158729434,0.0299934018403292,0.0809231996536255,0.066321037709713,0.00189393514301628,0.00199611950665712,0.00235355575568974,0.0124866124242544,0.107536680996418,0.129518747329712,0.162986248731613,0.162497103214264,0.0756997019052505,0.0983090773224831,0.105313710868359,0.109496608376503,0.0254768114537001,0.0736321210861206,0.0109011856839061,0.00591598078608513,0.00877636671066284,0.00925613380968571,0.0185419302433729,0.00858956202864647,0.0360243357717991,0.0613816678524017,0.138574033975601,0.123591922223568,0.161576002836227,0.163661375641823,0.0621361434459686,\n0.0834685415029526,0.0823424607515335,0.0064245336689055,0.00196025124751031,0.0144897121936083,0.00350574846379459,0.0897016227245331,0.141786113381386,0.00172246783040464,0.0016761178849265,0.00164095626678318,0.00172228494193405,0.0151265971362591,0.0108278458938003,0.00930141005665064,0.00738859688863158,0.00444578099995852,0.00279078749008477,0.0034543676301837,0.00593799585476518,0.00181633280590177,0.00264560710638762,0.0021140007302165,0.00326533592306077,0.00226045935414732,0.00158813130110502,0.00125915941316634,0.00140132789965719,0.206268981099129,0.242492392659187,0.216538220643997,0.148466512560844,0.494710594415665,0.494018644094467,0.495431184768677,0.495684057474136,0.491640150547028,0.493156641721725,0.493532657623291,0.492237329483032,0.436618506908417,0.463279128074646,0.385892689228058,0.347750276327133,0.237941667437553,0.215587124228477,0.184324011206627,0.349386662244797,0.119256816804409,0.0809679850935936,0.100759044289589,0.064699612557888,0.100251354277134,0.113563232123852,0.0685979872941971,0.152892902493477,0.156757727265358,0.333477854728699,0.282245606184006,0.410026401281357,0.464278131723404,0.497591882944107,0.497499942779541,0.494036823511124,0.341065794229507,0.3653284907341,0.495653241872787,0.401004016399384,0.499008297920227,0.497864127159119,0.498020023107529,0.496375501155853,0.496211588382721,0.49818554520607,0.496551722288132,0.494357407093048,0.49289858341217,0.492176055908203,0.494054555892944,0.495537310838699,0.495428442955017,0.495201587677002,0.495444416999817,0.493240684270859,0.495095014572144,0.495912224054337,0.495938241481781,0.420695513486862,0.436345547437668,0.342597186565399,0.319157987833023,0.419052869081497,0.300165265798569,0.217813968658447,0.205603912472725,0.208605021238327,0.0836873129010201,0.0971802547574043,0.0761817321181297,0.0662169381976128,0.0635233893990517,0.0789075344800949,0.0527386218309402,0.0531285107135773,0.0510307252407074,0.0495729967951775,0.0662362426519394,0.0636715367436409,0.0335692539811134,0.0344211980700493,0.00413668062537909,\n0.00437222234904766,0.0673914477229118,0.0534001886844635,0.0532169044017792,0.00969782378524542,0.115410067141056,0.0894881039857864,0.0497617162764072,0.032301552593708,0.0395700857043266,0.0833647176623344,0.152233555912972,0.277294039726257,0.237761244177818,0.122256495058537,0.495742470026016,0.495044946670532,0.495270699262619,0.466927647590637,0.487584829330444,0.471465349197388,0.446353495121002,0.495112806558609,0.494484156370163,0.494385927915573,0.494777828454971,0.319564700126648,0.226902171969414,0.303202927112579,0.355490446090698,0.142050608992577,0.21855191886425,0.495411992073059,0.494442224502563,0.49536070227623,0.495829224586487,0.496245741844177,0.496983617544174,0.495706379413605,0.378789126873016,0.443236827850342,0.423344552516937,0.402129530906677,0.31354683637619,0.011792303994298,0.00541512854397297,0.19114363193512,0.00818456895649433,0.128277137875557,0.00999050214886665,0.0189298521727324,0.114223763346672,0.039101779460907,0.440741151571274,0.37799397110939,0.167534962296486,0.0324885621666908,0.0405340492725372,0.00877480115741491,0.00628257403150201,0.0294434521347284,0.00551354372873902,0.00340866087935865,0.00176740461029112,0.00323679530993104,0.00361410598270595,0.00155600626021624,0.00130048347637057,0.00259213359095156,0.00172662572003901,0.00157643074635416,0.00248960056342185,0.00115798017941415,0.00232840934768319,0.00483620120212436,0.00623246934264898,0.00413015903905034,0.00187641440425068,0.00264824088662863,0.49486768245697,0.00406678952276707,0.00307907885871828,0.0669666975736618,0.49384468793869,0.494718581438065,0.488878607749939,0.494964092969894,0.480413794517517,0.488142460584641,0.497017651796341,0.486521184444427,0.499210506677628,0.498955190181732,0.499020576477051,0.498609274625778,0.498691350221634,0.497828960418701,0.498702019453049,0.49905851483345,0.00422780960798264,0.0673873871564865,0.10294995456934,0.177105605602264,0.137693867087364,0.395283669233322,0.0561339296400547,0.0122799724340439,0.115378007292748,0.0461952723562717,0.00862376298755407,0.0375786609947681,\n0.00586434034630656,0.216012254357338,0.11050571501255,0.0510124005377293,0.0829584822058678,0.494458675384521,0.494277447462082,0.496937960386276,0.116042479872704,0.49787762761116,0.230708613991737,0.0622754171490669,0.498603701591492,0.196535959839821,0.00369277526624501,0.00272378325462341,0.486099720001221,0.00512532843276858,0.0359800010919571,0.155941724777222,0.15468767285347,0.122875675559044,0.292145252227783,0.153312966227531,0.153439074754715,0.327097982168198,0.166516363620758,0.211425349116325,0.210624262690544,0.257879346609116,0.259329915046692,0.245208442211151,0.268495231866837,0.260577201843262,0.214291036128998,0.158475875854492,0.158776104450226,0.147456109523773,0.189878731966019,0.177501514554024,0.140640020370483,0.154655635356903,0.182721480727196,0.122265093028545,0.154412239789963,0.174505144357681,0.18732276558876,0.216400906443596,0.154486611485481,0.199397787451744,0.229595214128494,0.148008167743683,0.186971351504326,0.158650085330009,0.193919911980629,0.235914066433907,0.304533690214157,0.276103556156158,0.203738644719124,0.249767139554024,0.189385861158371,0.232027933001518,0.272078543901443,0.173341989517212,0.143333211541176,0.178553134202957,0.2178645581007,0.17926512658596,0.498079359531403,0.49764558672905,0.493476301431656,0.497497260570526,0.499024957418442,0.498812049627304,0.481438368558884,0.475040018558502,0.499892085790634,0.499295592308044,0.499847054481506,0.49994283914566,0.49948513507843,0.428521871566772,0.300684005022049,0.49810403585434,0.497266590595245,0.498697310686111,0.497886002063751,0.498042225837708,0.485606074333191,0.485793232917786,0.458712071180344,0.499973088502884,0.499091774225235,0.499190449714661,0.4280044734478,0.457346051931381,0.498326450586319,0.494596093893051,0.494365692138672,0.494462668895721,0.494515120983124,0.497997492551804,0.498909473419189,0.499929428100586,0.498976171016693,0.494624406099319,0.497181087732315,0.469323992729187,0.476944506168365,0.415308624505997,0.395580261945724,0.49943020939827,0.499888569116592,0.497349143028259,\n0.495646834373474,0.494615614414215,0.497360795736313,0.498536199331284,0.498701572418213,0.490914940834045,0.499821990728378,0.497986912727356,0.468328773975372,0.391963601112366,0.422747701406479,0.482745617628098,0.497819513082504,0.498537451028824,0.499243289232254,0.499773025512695,0.494683772325516,0.494805634021759,0.49482062458992,0.494760543107986,0.497144222259521,0.49457660317421,0.493789881467819,0.49458646774292,0.492286801338196,0.484647452831268,0.479186058044434,0.438782334327698,0.471755683422089,0.431316256523132,0.475486993789673,0.456324309110641,0.479926824569702,0.405071496963501,0.380229324102402,0.42947643995285,0.374703049659729,0.421711415052414,0.402480840682983,0.300346851348877,0.43937224149704,0.450042575597763,0.471916079521179,0.439534783363342,0.489101856946945,0.497698903083801,0.467224955558777,0.477341830730438,0.482211530208588,0.480961859226227,0.408277362585068,0.171835973858833,0.153058439493179,0.143804714083672,0.0037693683989346,0.0362889654934406,0.00525405537337065,0.148268163204193,0.0683703571557999,0.0376599505543709,0.0445618219673634,0.146970078349113,0.188869208097458,0.17760506272316,0.00288582826033235,0.00225157150998712,0.0017316211014986,0.0013067068066448,0.00132562627550215,0.00190999440383166,0.00226044724695385,0.00784262921661139,0.0112750744447112,0.0173067096620798,0.00262815481983125,0.00226460210978985,0.00602485751733184,0.00349772814661264,0.00292510050348938,0.00269699073396623,0.0135289803147316,0.0103104831650853,0.00794037710875273,0.00787316635251045,0.00202853791415691,0.00213485443964601,0.00454540317878127,0.00540296733379364,0.040046576410532,0.0651715472340584,0.0666946023702621,0.0855960696935654,0.080752395093441,0.125129029154778,0.00638666842132807,0.0207076445221901,0.00387939042411745,0.00382913649082184,0.0012292229803279,0.00178197433706373,0.0018641147762537,0.0013992638560012,0.00126466911751777,0.00674807792529464,0.00701502803713083,0.00686094397678971,0.00567869283258915,0.00544988224282861,0.007870820350945,0.0157495457679033,\n0.00552460039034486,0.00631229672580957,0.00680046249181032,0.00684428494423628,0.00933710113167763,0.0106857251375914,0.00361652881838381,0.00433071563020349,0.00556861003860831,0.00640778755769134,0.00623950036242604,0.00100142590235919,0.00236925226636231,0.00223838444799185,0.00389867951162159,0.00501776812598109,0.00396161805838346,0.00699444627389312,0.00672429939731956,0.00506741041317582\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.255586654162104,0.0564839064701468,-0.965134710701333,0,0.191954875668087,0.981381489803619,0.00660131789598903,0,0.947538261415516,-0.183575097990927,-0.261670390290557,0,-6.68650920068584,2.10042577148028,-9.58014889758636,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.255586662104494,0.19195488163311,0.947538290860393,0,0.0564839134277405,0.98138161068856,-0.183575120603402,0,-0.965134729663024,0.00660131802568334,-0.261670395431512,0,-11.0737572515755,-0.714569534984361,4.21446806383396,1\n\t\t} \n\t}\n\tDeformer: 135199344, \"SubDeformer::Cluster_Head\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *3584 {\n\t\t\ta: 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,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,125,126,127,129,130,131,132,133,134,135,136,140,141,142,145,146,147,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,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,341,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,\n553,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,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,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,\n1054,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,\n1464,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,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,1732,1733,1734,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,1800,1801,1802,1803,1804,1805,1806,1807,1808,1810,1811,1813,1814,1815,1816,1821,1822,1823,1825,1827,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,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,\n1914,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,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,\n2327,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,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,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,\n2739,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,\n3149,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,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,3409,3410,3411,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,\n3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,5303,5304,5305,5306,5309,5314,5319,5371,5372,5373,5380,5382,5383,5403,5730,5802,5803,5804,5811,5813,5814,6487,10083,10482\n\t\t} \n\t\tWeights: *3584 {\n\t\t\ta: 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,0.999999761581421,1,1,1,0.999769389629364,0.997745931148529,0.997007310390472,0.999988436698914,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999866485595703,0.999976813793182,0.99999737739563,1,1,1,1,1,0.348414063453674,0.296818614006042,0.999929845333099,0.992260038852692,0.986605584621429,0.999526262283325,1,1,1,1,1,0.996576905250549,0.999679207801819,0.462966173887253,0.405808210372925,0.933403789997101,1,1,1,0.99883645772934,1,1,1,0.999987483024597,0.999998390674591,0.997568309307098,0.99861341714859,1,1,0.99993509054184,0.305174469947815,0.335230082273483,0.277147561311722,0.357239037752151,0.382363498210907,0.40365344285965,0.362462073564529,0.300854951143265,0.246836096048355,0.32552570104599,0.262969672679901,0.284158438444138,0.215933471918106,0.345835387706757,0.960699081420898,0.880206704139709,0.938635408878326,0.956660568714142,0.877048552036285,0.876426160335541,0.886230409145355,0.936781227588654,0.95302551984787,0.884782373905182,0.946100473403931,0.892827928066254,0.450425446033478,0.878755748271942,0.932442188262939,0.37913653254509,0.407037675380707,0.415984898805618,0.259030967950821,0.293490946292877,0.417256742715836,0.340245813131332,0.36240941286087,0.411219507455826,0.977936863899231,0.967643797397614,0.892272353172302,0.968207836151123,0.960449576377869,0.945745766162872,0.987939298152924,0.982316374778748,0.978387355804443,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,0.999999821186066,0.996214628219604,0.988707542419434,0.986609518527985,0.995532214641571,0.973644018173218,0.969042003154755,0.9631507396698,0.984441816806793,0.994842827320099,1,0.999999821186066,1,0.999999701976776,1,1,0.999998331069946,0.99999988079071,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999821186066,0.999997019767761,0.999997437000275,0.999985814094543,0.999905824661255,0.999983549118042,0.9999960064888,0.999999046325684,0.999969482421875,0.999965369701386,0.999825537204742,0.999794542789459,\n0.999993860721588,0.999995291233063,0.999958753585815,0.999951481819153,0.999996781349182,0.999967575073242,0.999789297580719,0.999749004840851,0.999708235263824,0.999999642372131,0.99999988079071,0.999999523162842,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.990536689758301,0.992207109928131,0.996704638004303,0.99727863073349,0.998484134674072,0.994708299636841,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.999999701976776,1,1,1,1,1,1,1,1,1,1,1,0.999996781349182,0.999999821186066,0.999968290328979,0.999798536300659,0.989763081073761,0.996523678302765,0.976127862930298,0.998997271060944,0.998805344104767,0.998647511005402,0.999073028564453,0.999054372310638,0.999225318431854,0.999512612819672,0.999987304210663,0.999918818473816,0.993115425109863,0.987185597419739,0.999241054058075,0.997129917144775,0.131196677684784,0.925822734832764,0.907572150230408,0.972595036029816,0.861486613750458,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.420260190963745,0.554195642471313,0.489969193935394,0.700962424278259,0.748266160488129,0.622093796730042,0.301548063755035,0.349999994039536,0.150000005960464,0.25,0.100000001490116,0.025000000372529,0.25,0.25,0.837520956993103,0.837526202201843,0.76023530960083,0.882980525493622,0.899999976158142,0.685573697090149,0.557134389877319,0.349999994039536,0.620917081832886,0.899999976158142,0.997061192989349,0.999017417430878,0.990700721740723,0.997014939785004,0.992497980594635,0.997990012168884,0.998118996620178,0.992173731327057,0.977280378341675,0.977026402950287,0.951838552951813,0.944853127002716,0.893962979316711,0.966057240962982,1,0.974265038967133,0.941445469856262,0.889961361885071,0.999450743198395,0.999087393283844,0.989352107048035,1,0.997996926307678,0.989772439002991,0.997625052928925,0.999521493911743,0.961557149887085,0.985031843185425,0.995130717754364,0.966040730476379,0.940969944000244,0.908502101898193,0.838931620121002,0.875945210456848,0.919987916946411,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,0.999999940395355,\n0.999999642372131,0.999997198581696,0.999987363815308,1,1,1,1,1,1,1,1,1,1,1,0.996123313903809,0.951491415500641,0.961500227451324,0.987795472145081,0.986461222171783,0.99991911649704,0.855317890644073,0.743749916553497,0.663854837417603,1,1,1,1,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,0.999999821186066,0.999999940395355,1,0.999998986721039,0.999999701976776,0.999999940395355,1,1,1,1,0.999999940395355,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,0.997026085853577,0.991087913513184,0.998008549213409,0.990822672843933,0.978451430797577,0.994244694709778,1,1,0.999999403953552,0.999996662139893,0.999999523162842,0.999999940395355,0.999987065792084,0.999997794628143,0.999999761581421,0.999999940395355,1,0.996043920516968,0.997313916683197,0.999570369720459,0.99914413690567,0.999780535697937,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,0.874475002288818,0.859783411026001,0.976130604743958,0.985742092132568,0.951068341732025,0.966143608093262,0.9924276471138,0.98901629447937,0.992559731006622,0.996199905872345,0.915497481822968,0.930785715579987,0.953211188316345,0.943714499473572,0.974188923835754,0.979826152324677,0.853430390357971,0.909686684608459,0.832501828670502,0.89535117149353,1,1,1,1,1,1,1,0.999999821186066,1,1,1,0.999999046325684,1,1,1,1,1,1,1,1,0.999951481819153,0.999991178512573,0.999996721744537,0.999953746795654,1,1,1,1,1,1,1,1,0.999999225139618,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999994158744812,0.999984204769135,0.999999582767487,0.999955058097839,0.999902665615082,0.999990284442902,0.999941945075989,0.999751687049866,0.999426007270813,1,1,1,1,0.999009013175964,0.996857404708862,0.999781668186188,0.987691402435303,1,1,1,1,1,1,0.99999988079071,1,0.99999988079071,1,0.999999046325684,0.99999988079071,1,1,1,1,1,1,0.984471559524536,0.989188969135284,0.993452608585358,0.997096359729767,0.994560599327087,0.991468369960785,1,1,1,1,1,1,1,0.999518752098084,1,1,1,0.999995589256287,0.999955594539642,0.999967575073242,0.999997019767761,\n0.999997854232788,0.999779105186462,0.999907195568085,0.9999880194664,0.998803615570068,0.999539971351624,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,1,0.999998331069946,0.999999940395355,0.99997866153717,0.999966144561768,0.999997615814209,0.999999940395355,0.999984562397003,0.999997019767761,0.999944269657135,1,1,1,1,0.996774792671204,0.974485635757446,0.980147957801819,0.997989237308502,0.999999701976776,1,1,1,0.99866509437561,1,1,1,1,1,1,0.999999523162842,0.999999523162842,1,1,1,1,0.988265216350555,0.989666819572449,0.999395608901978,0.999032855033875,0.999645292758942,0.999818742275238,1,1,1,0.994995176792145,0.999091386795044,0.99800705909729,0.952490627765656,0.416576504707336,0.347003281116486,0.345246940851212,0.417088449001312,0.944247424602509,1,1,1,0.949999988079071,0.899999976158142,0.899999976158142,0.999464333057404,0.999308705329895,0.999829411506653,0.999677062034607,0.997972846031189,1,1,1,1,0.999999344348907,0.999998927116394,0.999999940395355,0.999999940395355,1,1,1,1,1,1,1,0.999999821186066,0.999999582767487,0.999997854232788,0.999997019767761,0.999984860420227,0.999987363815308,0.999999344348907,1,1,1,1,1,1,1,0.999996244907379,0.9999680519104,1,1,1,0.999999105930328,1,1,0.459157198667526,0.988020479679108,0.943029761314392,0.459152907133102,1,1,0.998800873756409,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999997913837433,1,1,0.999998986721039,0.999984979629517,1,1,1,1,1,0.999965012073517,0.999940872192383,0.336572200059891,0.393645137548447,0.395924478769302,0.337656915187836,1,1,0.999783635139465,0.999759078025818,1,1,0.800000011920929,0.800000011920929,0.535878419876099,0.627997994422913,1,1,0.99994820356369,0.999838650226593,0.999496340751648,0.999844312667847,0.998620271682739,0.920523047447205,0.908557653427124,1,1,0.999999940395355,0.999999940395355,1,0.993643939495087,0.989085495471954,0.992528975009918,0.995644688606262,0.992834329605103,0.997095108032227,0.999972522258759,0.999994337558746,0.999965131282806,0.999850511550903,0.999999761581421,0.99986720085144,0.999546825885773,\n0.999962270259857,0.999987840652466,0.999996244907379,0.999980807304382,0.999827742576599,0.999969124794006,0.999980330467224,0.99982076883316,0.999875783920288,0.998700678348541,0.999732792377472,0.999924659729004,0.999531447887421,1,1,0.999959707260132,0.999996244907379,0.999989688396454,0.587577700614929,0.5,0.55103325843811,0.449999988079071,0.349999994039536,0.449999988079071,0.802620470523834,0.994896531105042,1,1,1,1,1,1,1,0.999259829521179,0.998212277889252,0.996332228183746,0.998884201049805,0.998849451541901,1,1,1,1,1,0.280946999788284,0.997190296649933,0.998100638389587,0.99994432926178,0.999985456466675,0.912754893302917,0.968181848526001,0.87903243303299,0.943862676620483,1,1,0.286551505327225,0.899999976158142,0.899999976158142,1,1,1,1,1,1,1,1,1,0.75,0.727270424365997,0.99253249168396,0.969400703907013,0.999407887458801,0.996963143348694,1,0.999822497367859,0.999152302742004,0.999869823455811,0.999400675296783,1,1,0.999988973140717,0.600000023841858,0.604558944702148,0.600000023841858,1,1,1,1,0.999998569488525,0.999998807907104,0.999997854232788,0.999794840812683,0.999966740608215,0.999977707862854,0.998860716819763,0.999999642372131,0.99999612569809,0.993585109710693,0.300000011920929,0.25,0.5,0.449999988079071,0.550000011920929,0.699999988079071,1,0.999955832958221,0.999805808067322,0.999777317047119,0.999945402145386,0.999703824520111,0.999917566776276,1,0.984215021133423,0.954994142055511,0.988196074962616,1,1,0.999999642372131,1,0.999994695186615,0.999999761581421,0.999994874000549,1,1,0.999999582767487,0.999995172023773,0.999970853328705,1,1,1,0.999999582767487,0.986238956451416,0.988411843776703,0.441835135221481,0.933162808418274,0.947231888771057,0.424471318721771,0.348979592323303,0.999981462955475,0.999907732009888,1,0.999968230724335,0.999855399131775,0.999944865703583,0.999999642372131,0.999989092350006,0.970000028610229,0.99187308549881,1,1,1,1,1,1,0.99809867143631,0.770597636699677,0.795691609382629,0.999999761581421,0.999998569488525,0.99999862909317,1,0.998847723007202,0.99910581111908,\n0.999994575977325,0.999991953372955,0.999996244907379,0.99998539686203,0.999957919120789,1,1,0.970000028610229,1,0.999999046325684,1,1,0.902129173278809,0.899999976158142,1,1,0.999837577342987,0.999737501144409,1,0.999938607215881,0.999995172023773,1,1,0.999913096427917,0.999415576457977,0.997944831848145,0.999560117721558,0.999930918216705,0.324698805809021,0.411464750766754,0.980888724327087,1,1,0.999808788299561,0.980815947055817,0.212126016616821,0.267991691827774,0.283018052577972,0.23473933339119,1,0.998749792575836,0.906330645084381,0.953685879707336,0.943308174610138,1,1,1,0.997312426567078,0.991603791713715,1,0.449999988079071,0.449999988079071,0.699999988079071,0.958194732666016,0.983917653560638,0.980177938938141,0.999990999698639,0.999989449977875,0.999405801296234,0.999907672405243,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.959780633449554,1,1,0.999953508377075,0.999985635280609,0.999996602535248,0.99726277589798,0.999643564224243,1,1,1,1,1,0.999996721744537,0.999999105930328,1,0.999999821186066,0.764749228954315,0.999882757663727,0.999713063240051,0.99859493970871,0.999958097934723,0.999601244926453,0.999603807926178,0.999942004680634,0.999990224838257,0.999992668628693,1,1,1,0.793075084686279,0.715351104736328,0.999799132347107,0.99924623966217,0.997733950614929,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,0.999988198280334,0.999999105930328,0.999990522861481,0.999999225139618,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,0.999998092651367,1,0.999984800815582,0.999993324279785,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,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,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,0.400000005960464,0.5,0.548623442649841,0.100000001490116,0.200000002980232,0.449999988079071,0.5,\n0.600000023841858,0.649999976158142,0.649999976158142,0.408688962459564,0.28953355550766,1,0.999999582767487,0.99999862909317,0.999980986118317,0.999694406986237,0.998330652713776,0.999876379966736,0.999770939350128,0.998444676399231,1,1,0.84945410490036,0.797120571136475,0.699999988079071,0.994182348251343,0.988083004951477,0.78735876083374,0.760871648788452,0.636389255523682,0.687809228897095,0.698961198329926,0.661260545253754,0.850000023841858,0.629232227802277,0.649999976158142,0.600000023841858,0.492218673229218,0.552437007427216,0.5,0.400000005960464,0.429196774959564,0.452822148799896,0.0500000007450581,0.0500000007450581,0.0199999995529652,0.0199999995529652,0.100000001490116,0.100000001490116,0.493190944194794,0.699999988079071,0.899999976158142,0.999776363372803,1,1,1,1,1,1,0.648829102516174,0.844642460346222,0.899999976158142,0.949999988079071,0.899999976158142,0.949999988079071,0.919702291488647,0.94857931137085,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,0.999999940395355,1,1,1,1,1,0.999999701976776,0.999998152256012,0.999993979930878,0.999989688396454,1,1,1,1,0.99999737739563,0.999999642372131,1,1,1,1,0.999999821186066,0.999999344348907,0.99999862909317,1,1,1,1,1,1,1,1,1,1,1,0.999931156635284,0.75,0.699999988079071,0.999999761581421,0.784333109855652,0.970308423042297,0.989005148410797,0.997170150279999,1,0.876214146614075,0.970000028610229,1,1,0.989500880241394,0.965273976325989,0.825668215751648,0.708643436431885,0.860360324382782,0.909061014652252,1,1,1,1,1,1,0.248748660087585,1,1,1,1,1,1,1,1,1,1,0.999795794487,0.999245464801788,0.974902451038361,0.998980283737183,0.997182130813599,0.999996066093445,0.999979078769684,0.994695901870728,0.992942214012146,0.649999976158142,0.981748402118683,0.994475185871124,0.954283893108368,0.963509917259216,0.967777073383331,0.976799607276917,0.992380619049072,1,0.987087786197662,1,0.999923825263977,0.998186767101288,0.998076796531677,0.999949634075165,0.999882221221924,0.999998688697815,1,1,1,1,0.716326594352722,0.808937311172485,0.893687009811401,\n0.945370733737946,1,0.977323114871979,1,0.992401897907257,1,0.999840080738068,0.99998551607132,0.999998927116394,0.999999940395355,0.999539732933044,0.999988734722137,1,0.999999821186066,0.999999225139618,0.999996721744537,0.987210094928741,0.550000011920929,0.449999988079071,0.999996244907379,0.999999821186066,0.25324410200119,0.230199247598648,0.150708064436913,0.8916996717453,0.88851273059845,0.911445736885071,0.418018728494644,0.41413426399231,0.431082844734192,0.434488296508789,0.414009839296341,0.434543877840042,0.450171411037445,0.877384424209595,0.946977913379669,0.92013680934906,0.437811374664307,0.42350047826767,0.405306279659271,0.391090542078018,0.391201049089432,0.436842024326324,1,1,1,1,1,0.999999523162842,0.999994337558746,0.999958217144012,1,1,1,1,0.99999874830246,0.999989211559296,0.999823153018951,0.999800324440002,0.99960058927536,1,0.999998509883881,0.999990463256836,0.999943137168884,0.999967992305756,0.999999403953552,0.999948978424072,0.999943375587463,0.999969303607941,0.999974608421326,1,1,1,1,0.308542907238007,0.364742130041122,0.150000005960464,0.27529102563858,0.302062720060349,0.333193153142929,0.356406271457672,0.380277574062347,0.331978857517242,0.312322288751602,0.247045859694481,0.17919759452343,0.262152791023254,0.327527046203613,0.928611278533936,0.83008337020874,0.840809226036072,0.92774510383606,0.819531679153442,0.828730583190918,0.849848210811615,0.850720882415771,0.92991054058075,0.861673176288605,0.932130098342896,0.868334949016571,0.882246673107147,0.868992269039154,0.368733763694763,0.40806970000267,0.397330462932587,0.312054097652435,0.333123594522476,0.389807045459747,0.949329078197479,0.868522763252258,0.840067327022552,0.935846924781799,0.856897950172424,0.829582154750824,0.975209772586823,0.967662453651428,0.963314354419708,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,0.995160698890686,0.984562516212463,0.984086155891418,0.994865477085114,0.962004959583282,0.962112188339233,1,1,1,0.999999761581421,1,1,0.999998569488525,0.99999988079071,1,1,1,1,1,1,1,1,1,1,1,\n1,1,1,1,1,1,1,1,0.99999988079071,0.999997973442078,0.999999701976776,0.999997615814209,0.999988555908203,0.999916911125183,0.999987483024597,0.999996602535248,0.999997317790985,0.999977290630341,0.999970853328705,0.9998539686203,0.999813675880432,0.999994397163391,0.999952673912048,0.999995410442352,0.999959945678711,0.999750435352325,0.999721109867096,0.999999582767487,0.999999701976776,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.985836565494537,0.987700045108795,0.99582427740097,0.996529221534729,0.997900784015656,0.990917503833771,1,1,1,1,1,1,1,1,1,1,0.999999821186066,0.999999761581421,1,1,1,1,1,1,1,1,1,1,0.999996244907379,0.999999761581421,0.999965786933899,0.999783754348755,0.985003352165222,0.995484948158264,0.962019920349121,0.998796164989471,0.998662710189819,0.999032616615295,0.998907327651978,0.999204456806183,0.999488115310669,0.999988734722137,0.999921441078186,0.983880579471588,0.965352714061737,0.99883633852005,0.994391560554504,0.992079377174377,0.972146093845367,0.998622000217438,0.972789764404297,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.649999976158142,0.850000023841858,0.550000011920929,0.850000023841858,0.850000023841858,0.779999971389771,0.460966050624847,0.349999994039536,0.250713586807251,0.5,0.247225999832153,0.200000002980232,0.300000011920929,0.300000011920929,0.850000023841858,0.835897326469421,0.757781624794006,0.889005482196808,0.799687623977661,0.880736887454987,0.852680206298828,0.773330271244049,0.899999976158142,0.657807528972626,0.497373759746552,0.308686256408691,0.535909652709961,0.899999976158142,0.711816906929016,0.993252336978912,0.995189130306244,0.975707173347473,0.988046526908875,0.984564483165741,0.995169043540955,0.995753824710846,0.984138786792755,0.997786045074463,0.985440492630005,0.989416182041168,0.967290282249451,0.955546677112579,0.910428762435913,0.949999988079071,1,0.977843284606934,0.946880638599396,0.95854377746582,0.924271702766418,0.866015911102295,0.892192006111145,0.999153912067413,0.998677670955658,0.989454507827759,0.995999813079834,0.999111652374268,0.997927010059357,\n0.99976247549057,0.999900758266449,0.930000007152557,0.968636333942413,0.978482127189636,0.984394371509552,0.965196907520294,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,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,0.999999940395355,0.999996662139893,0.999988734722137,0.999970972537994,1,0.999999403953552,0.999999940395355,1,0.999999940395355,0.999999582767487,1,1,1,1,1,0.999894440174103,0.998404622077942,0.999730825424194,0.999733328819275,0.999309360980988,0.999999523162842,0.991441905498505,0.970227301120758,0.978859186172485,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,0.999967992305756,0.999800026416779,0.999064028263092,0.999978423118591,0.999989748001099,1,0.999998867511749,1,1,0.999998033046722,0.999990582466125,0.999997973442078,0.999999642372131,0.999961972236633,0.999991714954376,0.99999862909317,0.999999701976776,1,0.999268352985382,0.998100101947784,0.999813914299011,0.999943375587463,0.999878823757172,0.993770956993103,0.979781270027161,0.991786897182465,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,0.824844896793365,0.79753452539444,0.925197064876556,0.94998961687088,0.892102301120758,0.926094353199005,0.956209540367126,0.938380777835846,0.948715269565582,0.964846730232239,0.84648585319519,0.884519398212433,0.921480536460876,0.893219888210297,0.915879011154175,0.938445568084717,0.899999976158142,0.913427889347076,0.885498821735382,0.883242189884186,1,1,1,0.999999761581421,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999993503093719,1,1,0.999992609024048,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,0.999973356723785,1,1,1,1,0.999961853027344,0.999647974967957,0.999996960163116,0.997242391109467,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.903084516525269,0.962770581245422,0.979039669036865,0.988998830318451,0.978517055511475,0.968517661094666,1,1,1,1,1,1,1,0.999994218349457,1,1,\n1,1,1,1,1,1,1,0.999996185302734,1,0.999996662139893,0.999975204467773,0.969889760017395,0.971092700958252,0.999808013439178,1,1,1,1,1,1,1,1,0.99994158744812,0.999983012676239,0.999860167503357,1,1,1,1,0.991058766841888,0.925504803657532,0.942588448524475,0.99311625957489,0.999996066093445,0.999999403953552,1,1,0.995644509792328,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999119579792023,0.998876392841339,0.999415218830109,1,1,1,1,1,1,0.927903950214386,0.408307909965515,0.338427692651749,0.334506094455719,0.406669586896896,0.911526322364807,1,1,1,0.939685106277466,0.908013582229614,0.882593989372253,0.998012900352478,0.997332811355591,0.999821245670319,0.99934995174408,0.998911142349243,1,1,1,1,1,0.999844431877136,0.99999612569809,0.99999213218689,0.999998986721039,0.999999642372131,0.99999988079071,1,0.999999940395355,1,1,0.999999940395355,1,0.999999701976776,0.999997913837433,0.999988555908203,0.999967694282532,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.455325990915298,0.935487270355225,0.935112237930298,0.462645888328552,1,1,0.996441245079041,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999954044818878,0.999934792518616,0.332305639982224,0.388771086931229,0.394438505172729,0.336643546819687,1,1,1,1,1,1,0.817862629890442,0.888791799545288,0.871996223926544,0.926925122737885,1,1,1,1,1,0.999802231788635,0.999353110790253,0.99868243932724,0.999528646469116,1,0.97871345281601,0.951372623443604,1,1,1,1,1,1,0.992018222808838,0.985607743263245,0.986931025981903,0.992793202400208,0.98271256685257,0.992969512939453,0.999912321567535,0.999967873096466,0.999861121177673,0.999517500400543,0.999994337558746,0.999424636363983,0.998278081417084,1,0.999864637851715,0.999949097633362,1,1,1,1,1,1,1,0.997118413448334,0.999441742897034,0.999845266342163,0.998751521110535,1,1,1,1,1,1,1,0.966132760047913,0.894500434398651,0.933834314346313,0.84791773557663,0.743246674537659,0.811419129371643,0.850000023841858,0.999857187271118,1,1,1,1,1,1,1,0.99671083688736,0.992562532424927,0.985294878482819,0.995045244693756,0.997932732105255,1,1,1,1,1,0.278595566749573,\n0.996629595756531,0.997128784656525,0.999779880046844,0.999933123588562,0.999375998973846,0.999950766563416,0.999540448188782,0.999971628189087,1,1,0.28972864151001,0.911683559417725,0.877844750881195,1,1,1,1,1,1,1,1,1,1,0.937691330909729,0.962795853614807,1,1,1,1,1,1,1,1,1,1,1,1,0.847725927829742,0.91228461265564,0.79233855009079,0.871689975261688,1,1,1,1,1,1,1,1,1,1,0.995091438293457,1,1,0.978575766086578,0.418494582176209,0.39224100112915,0.608790159225464,0.550000011920929,0.632516980171204,0.784045279026031,1,0.999818503856659,0.999213695526123,0.999005913734436,0.999743700027466,0.998591482639313,0.999609470367432,1,0.999946653842926,0.999391973018646,0.999967992305756,0.999391973018646,0.994880020618439,0.999391973018646,1,1,1,0.999995410442352,0.999966621398926,0.999999225139618,0.999999225139618,0.999992728233337,0.999965846538544,0.999864935874939,1,1,0.999998986721039,0.999993681907654,0.908143758773804,0.930387914180756,0.429049700498581,0.885662496089935,0.903142273426056,0.408094793558121,0.329227954149246,0.999907255172729,0.999543070793152,1,0.999873816967011,0.999455451965332,0.999873638153076,1,1,0.999391973018646,0.999967992305756,1,1,1,1,1,1,0.999896347522736,0.711599826812744,0.745834589004517,1,1,1,1,1,1,0.999975860118866,0.999959826469421,0.999991416931152,0.999968469142914,0.999915838241577,1,0.981522679328918,0.976607978343964,0.989433944225311,1,0.999967992305756,0.999552011489868,0.999941349029541,0.958241581916809,1,1,0.999773323535919,0.99970531463623,0.994279265403748,0.995593905448914,0.999991178512573,1,1,1,1,1,0.999967992305756,1,1,0.310555666685104,0.397277534008026,0.906521797180176,1,1,1,0.897495031356812,0.209778174757957,0.261431634426117,0.277164131402969,0.231595560908318,1,1,0.999967992305756,1,0.889366984367371,1,1,1,1,0.999633312225342,0.999985694885254,0.763117611408234,0.725181221961975,0.82636034488678,0.99178946018219,0.998883247375488,0.998075246810913,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.861131191253662,1,1,0.999758005142212,0.999929368495941,0.999975681304932,\n0.99999988079071,0.998361766338348,1,1,1,1,0.999999582767487,0.999993681907654,0.999998152256012,0.99999988079071,0.999999463558197,0.979020714759827,0.97575169801712,1,1,1,1,1,1,1,1,1,1,1,0.994842290878296,0.983159720897675,0.999033391475677,0.996413946151733,0.990096926689148,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,1,1,0.999999761581421,1,1,1,1,1,1,1,1,1,1,0.999965131282806,0.999992609024048,0.999973356723785,0.999996185302734,0.999999046325684,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,1,1,0.999999046325684,0.999999582767487,1,1,0.999996900558472,0.999976396560669,0.999965965747833,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,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,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,0.999999940395355,0.606032192707062,0.702783584594727,0.715117573738098,0.220490634441376,0.292737722396851,0.52182525396347,0.601603031158447,0.616618871688843,0.727132260799408,0.645783305168152,0.784240245819092,0.686429858207703,1,1,1,0.999999165534973,0.999993205070496,1,1,1,1,1,1,0.999985694885254,0.999952256679535,1,1,1,0.932030141353607,0.931214332580566,0.97384238243103,0.765795350074768,0.962967395782471,0.942884683609009,0.896759152412415,0.881946504116058,0.80953049659729,0.856356859207153,0.848113536834717,0.806062936782837,0.866539835929871,0.765458106994629,0.746913552284241,0.694321870803833,0.635266363620758,0.599167943000793,0.657683849334717,0.69309937953949,0.579004049301147,0.497260928153992,0.504618883132935,0.628817796707153,0.100000001490116,0.100000001490116,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.164457678794861,0.14875328540802,0.272260308265686,0.797969460487366,0.866278350353241,1,0.843241333961487,0.999112129211426,0.999932169914246,1,0.99931812286377,0.996939718723297,\n0.933620035648346,0.937213599681854,0.927313685417175,0.931612193584442,0.957677364349365,0.981823623180389,0.949999988079071,1,0.949999988079071,0.949999988079071,1,0.965973496437073,0.979378640651703,0.991198360919952,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,0.999998271465302,0.999995768070221,0.999992251396179,0.999989032745361,1,1,1,1,0.999983668327332,0.999996900558472,1,1,0.999999940395355,0.999999821186066,0.999999523162842,0.999999165534973,0.99999862909317,0.999999940395355,0.999999642372131,1,1,1,1,1,1,1,1,1,0.999670386314392,0.938778817653656,0.850560367107391,1,0.860400438308716,0.988599896430969,0.99865597486496,0.999840021133423,0.963169693946838,0.994880020618439,0.995199978351593,0.996245324611664,0.998159110546112,0.999204456806183,0.999973356723785,0.999239802360535,0.997623980045319,0.96080356836319,0.891220390796661,0.871136009693146,0.989015877246857,0.99062043428421,0.99975597858429,0.999982118606567,1,0.998371005058289,0.996509432792664,1,1,0.559376358985901,1,1,1,1,1,1,1,1,1,1,1,1,0.997700333595276,1,1,0.994149565696716,0.999817132949829,1,0.999771416187286,0.850000023841858,0.998741507530212,0.999592363834381,0.993519484996796,0.986261963844299,0.993080615997314,0.997539460659027,0.999630749225616,0.999588549137115,0.999967992305756,0.968575894832611,1,1,1,1,1,1,1,1,1,1,0.928032338619232,0.976496279239655,0.994863092899323,0.999303340911865,0.999495089054108,0.999927997589111,0.999977767467499,1,1,1,1,1,1,1,1,1,1,1,1,1,0.850000023841858,0.699999988079071,1,1,1,0.235360309481621,0.222527340054512,0.152716189622879,0.839730203151703,0.847859680652618,0.872806251049042,0.404381573200226,0.40144407749176,0.423947304487228,0.427471905946732,0.403210192918777,0.428387820720673,0.841572463512421,0.874131262302399,0.408036857843399,0.38528248667717,0.373308509588242,0.377070516347885,0.424087792634964,1,1,1,1,1,1,1,0.999999284744263,0.999993503093719,0.999957799911499,1,1,1,1,0.999999940395355,0.999999940395355,0.999998092651367,0.999986052513123,0.999738574028015,0.999751091003418,\n0.999558866024017,0.999999761581421,0.999997317790985,0.99998539686203,0.999933063983917,0.999951422214508,0.999995470046997,0.999896287918091,1,1,1,1,0.349999994039536,1,1,1,0.686159372329712,0.623571038246155,0.349999994039536,0.214079320430756,1,1,1,1,1,1,1,1,0.999349594116211,1,0.999909162521362,0.949999988079071,0.993878483772278,1,1,0.999986410140991,0.999998867511749,1,0.999993741512299,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,0.913584053516388,0.871200621128082,0.936014592647552,0.942887365818024,0.817474365234375,0.740597069263458,0.888899803161621,0.878629624843597,0.87686014175415,0.568309545516968,0.932189285755157,0.883029043674469,0.848667085170746,0.871915221214294,0.811980724334717,0.745295226573944,0.777739644050598,0.573302984237671,0.686521828174591,0.337067723274231,0.287424027919769,0.285539090633392,0.255632221698761,0.202617704868317,0.289324581623077,0.913337051868439,0.916339218616486,0.855006694793701,0.938828587532043,0.940479755401611,0.826563715934753,0.790112614631653,0.883481323719025,0.896900475025177,0.687618970870972,0.885863423347473,0.875031530857086,0.854685246944427,0.804443955421448,0.830238461494446,0.631611108779907,0.773356795310974,0.477082967758179,0.393136739730835,0.397931814193726,0.397760272026062,0.328216433525085,0.426256000995636,0.920019030570984,0.960719287395477,0.985030829906464,0.986254632472992,0.856136322021484,0.790562033653259,0.93674647808075,0.819936394691467,0.885690748691559,0.661754369735718,0.976041197776794,0.747037887573242,0.630166888237,0.676613986492157,0.522553384304047,0.569085597991943,0.487244963645935,0.49576610326767,0.485332369804382,0.446525692939758,0.475012540817261,0.427732467651367,0.453264474868774,0.537856459617615,0.969599306583405,0.947482883930206,0.980467319488525,0.976889669895172,0.855967223644257,0.932356476783752,0.814191162586212,0.880587220191956,0.695309996604919,0.73822420835495,0.656001031398773,0.587343633174896,0.543010890483856,0.516286194324493,0.520748317241669,0.518919825553894,\n0.481668591499329,0.508216023445129,0.460770845413208,0.484409630298615,0.566373646259308,0.965694129467011,0.921841502189636,0.894006490707397,0.0179339237511158,0.022374426946044,0.0351768396794796,0.0133271468803287,0.0114815225824714,0.051796730607748,0.0770531296730042,0.128365874290466,0.0722857713699341,0.0740104466676712,0.0232857763767242,0.114134430885315,0.0671189278364182,0.0153682315722108,0.0401310659945011,0.128179043531418,0.0737554952502251,0.0775797814130783,0.0229898858815432,0.113985672593117,0.0678060799837112,0.0408220998942852,0.014244195073843,0.0031724120490253\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.0413181715733012,0.0620282951754813,0.997218779229126,0,0.987834248135006,-0.152295242936304,-0.0314563824956635,0,0.149920490642125,0.986386586814641,-0.0675662454229578,0,-63.2896897376797,9.28034499228137,1.65098175999686,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.0413181779113036,0.987834399663875,0.149920513639184,0,0.0620283045373363,-0.152295265922039,0.986386735688766,0,0.997218784048189,-0.0314563826476766,-0.0675662457494719,0,0.39298057195007,63.9850191893683,0.445964229859337,1\n\t\t} \n\t}\n\tDeformer: 133256192, \"SubDeformer::Cluster_L_Clavicle\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *960 {\n\t\t\ta: 140,143,144,148,167,340,342,343,1793,1794,1795,1806,1807,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,2006,2007,2008,2500,2501,2502,2503,2554,2585,2586,2587,2588,2676,2770,2773,2774,2829,2830,2836,2837,2838,2839,3408,3409,3410,3411,3418,3422,3426,3427,3428,3429,3430,3431,3434,3435,3436,3437,3438,3467,3468,3470,3471,3472,3473,3474,3475,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,\n4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,5305,5306,5403,5730,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5805,5806,5807,5810,5812,5815,5819,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5853,5854,5862,5863,5864,5867,5868,5869,5873,5874,5877,5878,5879,5880,5882,5883,5884,5885,5886,5887,5888,5889,5890,5893,5894,5895,5896,5897,5898,5901,5902,5903,5904,5905,5906,5907,5908,5909,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6008,6009,6010,6011,6012,6013,6018,6019,6020,6029,6032,6128,6129,6130,6131,6138,6139,6141,6142,6143,6147,6148,6149,6150,6151,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6172,6175,6176,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6212,6213,6215,6467,6484,6485,6486,6487,6488,6489,6491,6492,6493,6494,6495,10477,10478,10479,10480,10481,10499,10500,10506,10507,10508,10509,10510,10511,10512,10518,10519,10520,10521,10522,10523,10524,10525,10526,10530,10531,10532,10533,10534,10535,10538,10539,10541,10542,10543,10544,10549,10551,10552,10553,10554,10555,10556,\n10557,10558,10559,10560,10630,10631,10635,10636,10638,10639,10641,10642,10643,10644,10645,10646,10647,10648,10671,10672,10673,10674,10675,10676,10682,10683,10689,10690,10693,10694,10695,10696,10705,10706,10707,10708,10713,10714,10715,10716,10717,10718,10733,10734,10735,10738,10739,10740,10741,10742,10746,10747,10748,10749,10750,10751,10754,10755,10756,10758,10761,10762,10763,10764,10765,10766,10767,10768,10769,10770,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10814,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10841,10844,10845,10848,10849,10850,10851,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10873,10875,10878,10882,10883,10884,10885,10886,10891,10892,10893,10894,10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908\n\t\t} \n\t\tWeights: *960 {\n\t\t\ta: 0.287342876195908,0.218264132738113,0.300880402326584,0.32291778922081,0.127042591571808,0.189787164330482,0.270161539316177,0.318312853574753,0.317722767591476,0.196519017219543,0.112743601202965,0.219398647546768,0.171351626515388,0.521111190319061,0.35480409860611,0.320145130157471,0.543612897396088,0.270305871963501,0.236683264374733,0.193796396255493,0.265648812055588,0.509497165679932,0.496736019849777,0.533007383346558,0.558105051517487,0.235622301697731,0.312426656484604,0.408343434333801,0.344335377216339,0.340542107820511,0.493481904268265,0.251053929328918,0.176417797803879,0.131792828440666,0.531090795993805,0.607681572437286,0.578952074050903,0.508088767528534,0.137959614396095,0.262801229953766,0.252974390983582,0.162508279085159,0.430942058563232,0.502444863319397,0.387218713760376,0.071005567908287,0.103521510958672,0.133009046316147,0.0921264737844467,0.0481603145599365,0.091205820441246,0.0685205608606339,0.0630872771143913,0.0844610333442688,0.117379494011402,0.102523177862167,0.0945545136928558,0.165795803070068,0.157553404569626,0.0984221920371056,0.234691560268402,0.186710864305496,0.143213585019112,0.181670635938644,0.571555435657501,0.300281792879105,0.253574341535568,0.370613515377045,0.62205445766449,0.599633753299713,0.159768491983414,0.158106833696365,0.121347598731518,0.112758591771126,0.147620886564255,0.10937138646841,0.156569451093674,0.191426545381546,0.204657435417175,0.181606948375702,0.119416236877441,0.708175778388977,0.537159204483032,0.341445356607437,0.399679660797119,0.472524672746658,0.557649970054626,0.596433937549591,0.648896038532257,0.312094032764435,0.273928493261337,0.20211586356163,0.253532528877258,0.19913724064827,0.113372690975666,0.144172891974449,0.0597548261284828,0.119243465363979,0.0394293665885925,0.213271751999855,0.288261890411377,0.16110073029995,0.136416658759117,0.331749588251114,0.370512872934341,0.338433563709259,0.311584800481796,0.334039717912674,0.323579847812653,0.297916144132614,0.282470494508743,0.428035527467728,0.430588960647583,\n0.428622037172318,0.424005836248398,0.38512909412384,0.430455893278122,0.431900888681412,0.390186578035355,0.304801762104034,0.382831752300262,0.436085969209671,0.370297282934189,0.494224846363068,0.484575420618057,0.485800296068192,0.488230407238007,0.487484663724899,0.48967444896698,0.489894092082977,0.49028691649437,0.495027840137482,0.489778876304626,0.49161484837532,0.496164739131927,0.492680281400681,0.492597579956055,0.481758415699005,0.471920698881149,0.489105343818665,0.491601377725601,0.491354584693909,0.485707521438599,0.495073169469833,0.494843244552612,0.466411292552948,0.47412383556366,0.464865773916245,0.482917994260788,0.494209975004196,0.480746239423752,0.427003294229507,0.379820078611374,0.42709743976593,0.462967693805695,0.346141636371613,0.35866567492485,0.429456263780594,0.482946753501892,0.476407021284103,0.278716742992401,0.218594446778297,0.168773606419563,0.240790814161301,0.0902368724346161,0.172832623124123,0.0494015403091908,0.130268275737762,0.186492174863815,0.255184590816498,0.14660407602787,0.306570321321487,0.340423434972763,0.299146622419357,0.27849805355072,0.299457192420959,0.303629398345947,0.284210860729218,0.413726359605789,0.405999809503555,0.419456332921982,0.356164246797562,0.345661550760269,0.408305525779724,0.40659299492836,0.350536346435547,0.312975913286209,0.270987153053284,0.413858473300934,0.341171443462372,0.483744025230408,0.490468919277191,0.488374829292297,0.484011590480804,0.484352439641953,0.49483135342598,0.487460076808929,0.497192651033401,0.487598240375519,0.488094836473465,0.490725487470627,0.476294726133347,0.45472925901413,0.467323541641235,0.480455249547958,0.472929209470749,0.483009994029999,0.491576075553894,0.448032379150391,0.457088500261307,0.446510463953018,0.470288187265396,0.49086919426918,0.465316772460938,0.353975713253021,0.402869999408722,0.403054624795914,0.444430112838745,0.328001022338867,0.316157102584839,0.407167613506317,0.46914541721344,0.460395693778992,0.226573526859283,0.179716765880585,0.246300727128983,0.288273096084595,0.0961756333708763,\n0.174234688282013,0.0480747558176517,0.124625325202942,0.0303347427397966,0.10171215236187,0.414591491222382,0.40688768029213,0.410651832818985,0.404483884572983,0.36542534828186,0.323211908340454,0.278422921895981,0.491320610046387,0.489428728818893,0.488226443529129,0.491683721542358,0.492925882339478,0.491198897361755,0.494440972805023,0.493882149457932,0.501135170459747,0.493873596191406,0.456400662660599,0.480663388967514,0.494727551937103,0.212771892547607,0.147338449954987,0.191964328289032,0.256925165653229,0.148505166172981,0.0747698768973351,0.0388709753751755,0.111240945756435,0.386646777391434,0.39567494392395,0.400452464818954,0.335536032915115,0.290832757949829,0.244191065430641,0.491688162088394,0.495783418416977,0.493266344070435,0.483279794454575,0.502431750297546,0.489663749933243,0.504642188549042,0.492314904928207,0.437400162220001,0.468595236539841,0.480583399534225,0.246725380420685,0.195764228701591,0.108041472733021,0.0558412708342075,0.0362572111189365,0.300465404987335,0.34278017282486,0.486127644777298,0.484876960515976,0.487915635108948,0.491282552480698,0.497506499290466,0.49445840716362,0.482423603534698,0.414954781532288,0.425710588693619,0.381416827440262,0.461820185184479,0.162621557712555,0.211802735924721,0.0853544026613235,0.045819204300642,0.266586184501648,0.311163306236267,0.486227840185165,0.490895986557007,0.497843503952026,0.500256538391113,0.475985050201416,0.470192551612854,0.389865875244141,0.352535128593445,0.40158349275589,0.443223685026169,0.344601839780808,0.439949661493301,0.449354231357574,0.600000023841858,0.600000023841858,0.585119128227234,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.36919179558754,0.374925911426544,0.389459431171417,0.390670835971832,0.414509892463684,0.41056901216507,0.435979396104813,0.42843696475029,0.451957821846008,0.600000023841858,0.649999976158142,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,\n0.5,0.353585124015808,0.378713309764862,0.409605801105499,0.435899168252945,0.550000011920929,0.600000023841858,0.649999976158142,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.452943533658981,0.441168695688248,0.441423445940018,0.440933734178543,0.550000011920929,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.451606303453445,0.449999988079071,0.445196092128754,0.449999988079071,0.5,0.410163074731827,0.550000011920929,0.550000011920929,0.5,0.453456491231918,0.453660607337952,0.454501986503601,0.451309412717819,0.442042887210846,0.411225140094757,0.374216198921204,0.367380231618881,0.350631505250931,0.46471431851387,0.541934013366699,0.541399717330933,0.472214698791504,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540618896484375,0.539543628692627,0.408979505300522,0.403523325920105,0.423235297203064,0.421915978193283,0.440413743257523,0.443479090929031,0.455287665128708,0.461397409439087,0.542557179927826,0.474392086267471,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540664434432983,0.39019450545311,0.413305699825287,0.440004765987396,0.461692869663239,0.493854552507401,0.542806029319763,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540695428848267,0.492301762104034,0.492998450994492,0.493540436029434,0.493857055902481,0.545637249946594,0.496385663747787,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.544318497180939,0.495441734790802,0.380767822265625,0.496274262666702,0.496445864439011,0.541243731975555,0.545268177986145,0.491165548563004,0.492123425006866,0.492635935544968,0.493220061063766,0.492741793394089,0.439888089895248,0.461666733026505,0.438809275627136,0.411170661449432,0.439403742551804,0.406360357999802,0.399927645921707,0.384916067123413,\n0.408272355794907,0.437813818454742,0.462262064218521,0.476009368896484,0.473369926214218,0.465719997882843,0.388347536325455,0.390445053577423,0.390155345201492,0.387774527072906,0.32721534371376,0.332227468490601,0.312882304191589,0.265351116657257,0.274931788444519,0.276817619800568,0.295409381389618,0.29927259683609,0.298837125301361,0.303793102502823,0.294210225343704,0.296336442232132,0.274231463670731,0.264867663383484,0.0984181761741638,0.254736602306366,0.25873875617981,0.138245850801468,0.141562297940254,0.263141125440598,0.274412363767624,0.297334283590317,0.302293747663498,0.297444730997086,0.29504469037056,0.292524039745331,0.271924585103989,0.262868225574493,0.187646597623825,0.138774082064629,0.293411880731583,0.272233903408051,0.262759327888489,0.21303403377533,0.138494804501534,0.308960318565369,0.31627756357193,0.32057198882103,0.143520221114159,0.54930967092514,0.558317601680756,0.601410150527954,0.668936431407928,0.859407842159271,0.844669342041016,0.818968653678894,0.689110934734344,0.629467904567719,0.934072911739349,0.90171092748642,0.740257918834686,0.722909212112427,0.772041916847229,0.74228435754776,0.596917271614075,0.570652961730957,0.501783609390259,0.770733416080475,0.685721516609192,0.490369111299515,0.514139831066132,0.591991603374481,0.572175443172455,0.487940400838852,0.503393948078156,0.391505509614944,0.932837843894959,0.920459508895874,0.791873812675476,0.83431601524353,0.484917819499969,0.747351765632629,0.895894348621368,0.781249701976776,0.72469288110733,0.561075389385223,0.520167589187622,0.509442687034607,0.574886918067932,0.491814941167831,0.482179373502731,0.509530603885651,0.609283030033112,0.511695206165314,0.703715860843658,0.614887654781342,0.412589967250824,0.468591123819351,0.200000002980232,0.130821987986565,0.0498344413936138,0.800000011920929,0.5,0.374432504177094,0.139433845877647,0.372645854949951,0.438550859689713,0.249949619174004,0.25,0.688447892665863,0.756752729415894,0.714166462421417,0.638433933258057,0.549879252910614,0.666928946971893,0.527884304523468,\n0.548589766025543,0.658684313297272,0.69450855255127,0.0693961083889008,0.180000007152557,0.0581055544316769,0.452420741319656,0.42332199215889,0.236328333616257,0.175878316164017,0.180000007152557,0.501450002193451,0.0872168615460396,0.0472639165818691,0.140358105301857,0.475359320640564,0.481175273656845,0.25,0.253921389579773,0.542810201644897,0.255297660827637,0.25,0.250288337469101,0.110027000308037,0.149569854140282,0.129948511719704,0.163483023643494,0.170433908700943,0.0789583772420883,0.130037143826485,0.0977599322795868,0.3859803378582,0.397739320993423,0.181627526879311,0.170861035585403,0.122231982648373,0.113688245415688,0.0980523452162743,0.113921858370304,0.213507369160652,0.218370392918587,0.218951821327209,0.231220692396164,0.243951767683029,0.233398959040642,0.422404229640961,0.422159910202026,0.222008794546127,0.242377281188965,0.249843165278435,0.353360027074814,0.230180963873863,0.246015608310699,0.238067552447319,0.413277089595795,0.198262080550194,0.249708235263824,0.25,0.25,0.25,0.246774092316628,0.25,0.25,0.25,0.248918384313583,0.242267489433289,0.224540933966637,0.231072202324867,0.312419831752777,0.29113432765007,0.399637073278427,0.600000023841858,0.393271803855896,0.308805286884308,0.310129761695862,0.303165584802628,0.272623211145401,0.312031984329224,0.155365735292435,0.389771282672882,0.398966461420059,0.14198449254036,0.036714855581522,0.374302238225937,0.12066026031971,0.380831450223923,0.353778511285782,0.136191874742508,0.178431421518326,0.13067390024662,0.279977709054947,0.292773634195328,0.25970059633255,0.176739081740379,0.300000011920929,0.300000011920929,0.122005775570869,0.23972974717617,0.222396865487099,0.200173661112785,0.0868332833051682,0.20101198554039,0.365400671958923,0.277413785457611,0.0936562716960907,0.481789469718933,0.236978203058243,0.39022433757782,0.496913224458694,0.497893631458282,0.371885746717453,0.276244431734085,0.45980367064476,0.0648277550935745,0.00409483723342419,0.00100980454590172,0.00202051992528141,0.00632891012355685,0.0247978214174509,0.0295577496290207,\n0.008045744150877,0.0131089640781283,0.0208909809589386,0.0764315575361252,0.00398753024637699,0.00538884755223989,0.100000001490116,0.0107455933466554,0.00638314755633473,0.021383011713624,0.00743433879688382,0.0208641234785318,0.0666176676750183,0.100000001490116,0.012950842268765,0.0156243359670043,0.00565479137003422,0.00672947941347957,0.00293202605098486,0.00203574099577963,0.186777889728546,0.123878009617329,0.0835776850581169,0.108076155185699,0.0213416274636984,0.00666187796741724,0.0166008118540049,0.0488587208092213,0.00350723508745432,0.00225304625928402,0.00419815676286817,0.00883233454078436,0.00231246137991548,0.0317243710160255,0.300000011920929,0.300000011920929,0.0762900784611702,0.0403979457914829,0.0416721440851688,0.0470849089324474,0.111286424100399,0.0332397967576981,0.181182488799095,0.00807778630405664,0.0166490729898214,0.0129965776577592,0.0273373015224934,0.0197057314217091,0.00603368505835533,0.103672489523888,0.0565624609589577,0.0216145347803831,0.0167154371738434,0.00300612882710993,0.00544778537005186,0.00598917761817575,0.00195894809439778,0.00142651202622801,0.484894901514053,0.684086501598358,0.718907594680786,0.676065981388092,0.40315368771553,0.556465148925781,0.848726749420166,0.621510863304138,0.0385145246982574,0.0412820167839527,0.0364001467823982,0.016484459862113,0.013350079767406,0.0127451401203871,0.0128253996372223,0.0140470778569579,0.0141159072518349,0.0433820821344852,0.0467647910118103,0.0264780968427658,0.0254385508596897,0.0252509098500013,0.0238212086260319,0.0206959210336208,0.0233588702976704,0.0181094761937857,0.0389366447925568,0.0427717715501785,0.0298443771898746,0.0229412000626326,0.0311520807445049,0.0416259765625,0.0265055652707815,0.0279774852097034,0.0225728377699852,0.052638191729784,0.0411552786827087,0.022190036252141,0.029569573700428,0.0644005686044693,0.0372306294739246,0.0174010694026947,0.0159334260970354,0.0642833635210991,0.0247891172766685,0.0386725217103958,0.0488913655281067,0.0210474915802479,0.0161526277661324,0.0165552590042353,0.0216749012470245,\n0.0195208117365837,0.0167216528207064,0.0224301293492317,0.0151196178048849,0.0144087765365839,0.0139210736379027,0.0183347892016172,0.0194267723709345,0.0171091575175524,0.0175132360309362,0.0197858326137066,0.0189218334853649,0.0205828379839659,0.0198940336704254,0.0197188314050436,0.0550209023058414,0.0664688125252724,0.0439060628414154,0.0204747263342142,0.0277326870709658,0.00403420999646187,0.0360795818269253,0.0313406437635422,0.0429699942469597,0.0696650743484497,0.0417818203568459,0.0495671816170216,0.0916373878717422,0.0601081997156143,0.0219621360301971,0.0245194919407368,0.0292192939668894,0.0391875095665455,0.027691051363945,0.0345890782773495,0.0757055059075356,0.048767551779747,0.0649795681238174,0.0988612323999405,0.0283221397548914,0.0221623983234167,0.0295963045209646,0.0308881979435682,0.0275767091661692,0.0283039454370737,0.0218954849988222,0.0213178470730782,0.0215635728091002,0.0382499136030674,0.0279828310012817,0.0203322749584913,0.0206757597625256,0.0208319090306759,0.0254390873014927,0.0176928229629993,0.0229123514145613,0.0227153822779655,0.0223618764430285,0.0181357078254223,0.0191761013120413,0.0245725233107805,0.00946254096925259,0.0106111532077193,0.0123485242947936,0.0248966719955206,0.020134637132287,0.0190518815070391,0.025281023234129,0.0252148434519768,0.021393371745944,0.0203799623996019,0.0214727520942688,0.0261586289852858,0.0101737771183252,0.0134961437433958,0.013369576074183,0.0157628618180752,0.0257200412452221,0.0271620377898216,0.0329086408019066,0.0341657251119614,0.0381906665861607,0.0430698320269585,0.0974766910076141,0.0675418078899384,0.0754710882902145,0.0998940393328667,0.05403833091259,0.0332547575235367,0.0195903498679399,0.0257969200611115,0.0235635377466679,0.0227375086396933,0.0098038949072361,0.0109773771837354,0.0231422260403633,0.0319954268634319,0.0609554350376129,0.0171176232397556,0.0139615209773183,0.00126926240045577,0.00114938686601818,0.0143906706944108,0.0150092467665672,0.00510499672964215,0.00745106535032392,0.00471863150596619,0.011429768987,0.0355809293687344,\n0.0355133190751076,0.102013848721981,0.0956157669425011,0.0119818644598126,0.0129090240225196,0.0540297590196133,0.0342668630182743,0.0395372025668621,0.0619741417467594,0.0335602201521397,0.0617258436977863,0.0201867260038853,0.0267706867307425,0.016303826123476,0.0157962460070848,0.0258567780256271,0.0227929409593344,0.0163461975753307,0.0234469547867775,0.0147395962849259,0.023964473977685,0.00104093307163566,0.0163080170750618,0.00983362924307585,0.0199874434620142,0.0222630240023136,0.0186568982899189,0.0195088945329189,0.019377188757062,0.00268315174616873,0.0192961413413286,0.0201760977506638,0.0149978045374155,0.00338341924361885,0.00293034012429416,0.00150685710832477,0.0279272049665451,0.0144925909116864,0.00557977287098765,0.0227816849946976,0.00450336327776313,0.00403442652896047,0.00253123859874904,0.00225223274901509\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.978469015335443,-0.0695892827205353,0.194308144005479,0,-0.198997136937502,-0.0683111362190089,0.977616329180682,0,-0.0547582084883067,-0.995234101286735,-0.0806883993392754,0,10.562256371274,2.41825540251226,-59.2613642964607,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.978469078077147,-0.19899714969766,-0.0547582119995301,0,-0.0695892830013208,-0.0683111364946372,-0.9952341053024,0,0.194308151836972,0.977616368583021,-0.080688402591381,0,1.34840957734272,60.2019324479208,-1.79660429498372,1\n\t\t} \n\t}\n\tDeformer: 135120544, \"SubDeformer::Cluster_R_Clavicle\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *563 {\n\t\t\ta: 94,95,108,109,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,150,163,166,168,169,170,171,172,173,174,175,176,340,341,342,343,829,830,831,832,882,885,914,915,916,917,998,1011,1089,1092,1093,1147,1148,1154,1155,1156,1157,1731,1732,1733,1734,1740,1741,1745,1749,1750,1751,1752,1753,1754,1755,1759,1760,1761,1762,1763,1764,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1824,2006,2008,2557,2689,3470,3471,5305,5306,5320,5321,5322,5323,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5374,5375,5376,5379,5381,5384,5387,5388,5394,5395,5396,5397,5398,5399,5400,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5423,5424,5432,5433,5434,5437,5438,5443,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457,5458,5459,5460,5462,5463,5464,5465,5466,5467,5471,5472,5473,5474,5475,5477,5478,5479,5480,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5581,5582,5583,5584,5585,5586,5587,5588,5590,5591,5592,5593,5594,5600,5601,5603,5604,5612,5621,5622,5633,5634,5635,5636,5641,5642,5643,5644,5645,5646,5650,5651,5652,5653,5654,5655,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5675,5678,5679,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5704,5705,5706,5707,5715,5723,5726,5727,5728,5729,5730,5731,5732,5734,5735,5736,5737,5738,5743,5744,5745,6487,10054,10055,10060,10061,10062,10063,10064,10065,10066,10074,10075,10076,10077,10078,10079,10080,10081,10082,10087,10088,10089,10090,10091,10092,10097,10098,10099,10100,10101,10102,10107,10108,10109,10110,\n10111,10113,10114,10115,10117,10118,10143,10190,10191,10195,10196,10198,10200,10201,10202,10203,10204,10205,10206,10207,10208,10233,10234,10235,10236,10237,10238,10246,10247,10254,10257,10258,10259,10260,10261,10270,10271,10272,10273,10278,10279,10280,10281,10282,10283,10298,10299,10300,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10321,10324,10326,10328,10329,10330,10331,10332,10333,10334,10335,10336,10337,10362,10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10394,10395,10396,10397,10398,10399,10400,10412,10413,10414,10415,10416,10419,10420,10421,10422,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10447,10450,10454,10455,10457,10458,10459,10461,10465,10467,10468,10472,10473,10474,10475,10477,10478,10479,10480,10481,10494,10495,10496,10497\n\t\t} \n\t\tWeights: *563 {\n\t\t\ta: 0.0811896696686745,0.106965370476246,0.0439532324671745,0.0603947602212429,0.504491329193115,0.29615181684494,0.257327705621719,0.347705841064453,0.225890830159187,0.189256742596626,0.152579382061958,0.211225852370262,0.314609289169312,0.472719848155975,0.4955133497715,0.511756122112274,0.206776008009911,0.273434907197952,0.348244726657867,0.288756161928177,0.295447260141373,0.389805644750595,0.216608464717865,0.269484579563141,0.52827388048172,0.0651521161198616,0.155393227934837,0.116333171725273,0.364117801189423,0.54840350151062,0.488428503274918,0.321933090686798,0.10997598618269,0.217991501092911,0.203374117612839,0.128395795822144,0.403514206409454,0.434205532073975,0.308789700269699,0.259588360786438,0.0680640563368797,0.10414981842041,0.132307544350624,0.086383655667305,0.0469684451818466,0.0455419532954693,0.0944439843297005,0.0689528957009315,0.0652325302362442,0.0889942720532417,0.124588340520859,0.115054629743099,0.0808641090989113,0.078086256980896,0.145058155059814,0.151040598750114,0.0874453037977219,0.258512765169144,0.197405755519867,0.150129958987236,0.195501983165741,0.583253026008606,0.280665725469589,0.264542937278748,0.415470987558365,0.555991590023041,0.655387282371521,0.678301155567169,0.129091560840607,0.133147850632668,0.102706968784332,0.0976598337292671,0.127154722809792,0.0970341414213181,0.0665765851736069,0.0911675244569778,0.123185187578201,0.153349637985229,0.172009184956551,0.155933886766434,0.093811422586441,0.698477327823639,0.62477844953537,0.645496368408203,0.253713548183441,0.34293207526207,0.384178310632706,0.470083117485046,0.505369603633881,0.447033524513245,0.566069185733795,0.250466287136078,0.13798713684082,0.22524531185627,0.0365451537072659,0.098877839744091,0.125019162893295,0.0778745412826538,0.32728722691536,0.335197657346725,0.548355221748352,0.559520184993744,0.605117619037628,0.66703200340271,0.857504963874817,0.838888585567474,0.817730724811554,0.68658447265625,0.62231719493866,0.930196166038513,0.901579201221466,0.073124073445797,0.0728209540247917,\n0.0774632692337036,0.0730397775769234,0.0615610517561436,0.0576975829899311,0.503667175769806,0.0770656988024712,0.691126823425293,0.491523891687393,0.518488049507141,0.600300371646881,0.521051943302155,0.570780634880066,0.485464632511139,0.500299453735352,0.078926146030426,0.932044923305511,0.914662539958954,0.77969491481781,0.83053070306778,0.48119843006134,0.33202987909317,0.733864486217499,0.885810911655426,0.763347387313843,0.714982330799103,0.552891075611115,0.51541668176651,0.505415141582489,0.567674338817596,0.490832775831223,0.479702204465866,0.504714846611023,0.591859996318817,0.507071256637573,0.685161232948303,0.601899802684784,0.278785139322281,0.465399295091629,0.127761036157608,0.295493602752686,0.165520682930946,0.250842660665512,0.241439938545227,0.263491183519363,0.108098432421684,0.25892972946167,0.497192919254303,0.497700780630112,0.676034033298492,0.0745359435677528,0.697876036167145,0.622006893157959,0.539307177066803,0.674886465072632,0.520930409431458,0.541126072406769,0.649991273880005,0.694431722164154,0.384999990463257,0.649999976158142,0.308550924062729,0.450778424739838,0.649999976158142,0.327679842710495,0.241778329014778,0.420805633068085,0.497350841760635,0.073303334414959,0.0860887691378593,0.0952140912413597,0.471008658409119,0.478044956922531,0.497991144657135,0.490312159061432,0.537073493003845,0.498353183269501,0.497871071100235,0.496121853590012,0.191246077418327,0.290554016828537,0.180064454674721,0.224595800042152,0.330453634262085,0.13161201775074,0.176965922117233,0.163933858275414,0.267501980066299,0.275521218776703,0.249476358294487,0.233987867832184,0.209987387061119,0.194429218769073,0.164188459515572,0.192451417446136,0.421390801668167,0.431404799222946,0.430364221334457,0.456319212913513,0.485508620738983,0.463099330663681,0.416302442550659,0.416258484125137,0.438949644565582,0.480661869049072,0.49902668595314,0.243896454572678,0.319553971290588,0.486177712678909,0.331051826477051,0.407012581825256,0.27311584353447,0.497810781002045,0.5,0.498094856739044,0.5,0.344194382429123,\n0.349997818470001,0.497277468442917,0.5,0.495895445346832,0.480586707592011,0.442554503679276,0.456413328647614,0.298786699771881,0.280739516019821,0.3919517993927,0.390767812728882,0.384277284145355,0.298110395669937,0.300616472959518,0.293284028768539,0.263502031564713,0.305093467235565,0.150212869048119,0.384823501110077,0.394534796476364,0.134362503886223,0.0351882837712765,0.365925788879395,0.111604079604149,0.366223394870758,0.338921874761581,0.126606851816177,0.169872716069222,0.124539494514465,0.267024546861649,0.284294724464417,0.249173209071159,0.167878016829491,0.074166439473629,0.0663126334547997,0.113084986805916,0.228605255484581,0.218380376696587,0.198807418346405,0.0853831917047501,0.2009536921978,0.361773580312729,0.27582186460495,0.095493271946907,0.478643804788589,0.234572812914848,0.384814769029617,0.495410859584808,0.499167263507843,0.365400642156601,0.270231038331985,0.45518159866333,0.0656886175274849,0.0038784621283412,0.00182033306919038,0.00570681737735868,0.0224756076931953,0.0269702468067408,0.00732538383454084,0.00128690106794238,0.00738434819504619,0.00386704737320542,0.0120105864480138,0.0196159575134516,0.0722305700182915,0.00189907208550721,0.00837074406445026,0.00133265019394457,0.00390737317502499,0.00108838721644133,0.00520020211115479,0.00149579567369074,0.00195087259635329,0.00167434592731297,0.0385287217795849,0.0101689994335175,0.00581388175487518,0.0194021947681904,0.00715417554602027,0.0199089664965868,0.00318020489066839,0.0635750964283943,0.0438726767897606,0.0124826999381185,0.0152434539049864,0.00605776254087687,0.0069635221734643,0.00306702312082052,0.00219031004235148,0.00107819936238229,0.183293163776398,0.123738005757332,0.0837252363562584,0.106336541473866,0.02176827006042,0.00684678554534912,0.0164734870195389,0.0481944680213928,0.00368563714437187,0.00234336918219924,0.00420357985422015,0.00932320952415466,0.00249722274020314,0.0306781362742186,0.0462840646505356,0.042948454618454,0.0715780779719353,0.0368835851550102,0.0379315093159676,0.0431694351136684,0.112874694168568,\n0.0348013080656528,0.180167987942696,0.00833920761942863,0.0163257773965597,0.0127486828714609,0.0269198063760996,0.0201910994946957,0.00653758551925421,0.105009749531746,0.0578845925629139,0.0229682829231024,0.0176938530057669,0.00325983925722539,0.00534686958417296,0.00589984748512506,0.00204170658253133,0.00146694935392588,0.0015066540800035,0.00157240615226328,0.0013683115830645,0.481965035200119,0.688069224357605,0.726324617862701,0.680854439735413,0.408174365758896,0.56397271156311,0.856086015701294,0.628196120262146,0.0358021147549152,0.0388568043708801,0.0347223058342934,0.0159178152680397,0.294692695140839,0.121550291776657,0.318417549133301,0.152870550751686,0.0297826658934355,0.0287917274981737,0.0230006705969572,0.0213493201881647,0.021949103102088,0.0226233545690775,0.0245684403926134,0.0207092072814703,0.0198129694908857,0.0292157959192991,0.0285200476646423,0.0244624875485897,0.0285634938627481,0.0266288779675961,0.0233569946140051,0.0230660326778889,0.0223205760121346,0.0235582739114761,0.0270807910710573,0.0252497419714928,0.0205877032130957,0.0210633222013712,0.0520002655684948,0.0519647859036922,0.0151932295411825,0.0169342141598463,0.0237237010151148,0.0229084882885218,0.0212979335337877,0.0211339090019464,0.0157450083643198,0.0149975558742881,0.0140739753842354,0.0225031841546297,0.0182464756071568,0.0170384235680103,0.0186013076454401,0.0150382602587342,0.0126649113371968,0.0126809123903513,0.0219173114746809,0.0171132441610098,0.0192538872361183,0.0219725165516138,0.0210953764617443,0.0230501908808947,0.0233804732561111,0.0214685052633286,0.0210958626121283,0.0274754408746958,0.0225150212645531,0.0507607273757458,0.00324849225580692,0.00230311276391149,0.0205044820904732,0.0195952504873276,0.0208354070782661,0.0230906028300524,0.0224607158452272,0.0257405936717987,0.0201869662851095,0.0517509244382381,0.0203061792999506,0.0184621382504702,0.0202194061130285,0.0262561142444611,0.0242316443473101,0.0248070918023586,0.0258013997226954,0.0232786629348993,0.021582905203104,0.0208789668977261,0.0204930528998375,\n0.0211619697511196,0.0254055745899677,0.0262512918561697,0.0226288698613644,0.0245581641793251,0.0239381864666939,0.0214787982404232,0.0214498583227396,0.0205761771649122,0.0259324423968792,0.0252932719886303,0.0207940619438887,0.0208942238241434,0.019823607057333,0.0189799387007952,0.022341238334775,0.0175818745046854,0.021635364741087,0.0208590421825647,0.0202130284160376,0.0228413138538599,0.0187332164496183,0.0222814083099365,0.00721948593854904,0.00893825478851795,0.0122251715511084,0.0131850503385067,0.0238036401569843,0.0233332365751266,0.0189465973526239,0.0196329019963741,0.0217657741159201,0.0186960380524397,0.0192628987133503,0.0228047538548708,0.0188687704503536,0.00966120511293411,0.00806799624115229,0.00595046579837799,0.00591902295127511,0.0232310779392719,0.0264482256025076,0.029419269412756,0.0252193752676249,0.0389464311301708,0.0249736830592155,0.0361362397670746,0.025445282459259,0.0225537400692701,0.0238805040717125,0.0220386572182179,0.0208422690629959,0.020428255200386,0.0189677346497774,0.0206352658569813,0.021261390298605,0.0100880740210414,0.0100587056949735,0.0217400155961514,0.0242703147232533,0.0314539447426796,0.0146723967045546,0.016406362876296,0.00290933577343822,0.00303262821398675,0.0109252370893955,0.00135533628053963,0.0026568693574518,0.0238387305289507,0.023859228938818,0.0229988656938076,0.0269602816551924,0.0106720477342606,0.0104876281693578,0.019563851878047,0.0196315422654152,0.029798885807395,0.0370448529720306,0.0274094771593809,0.0410918444395065,0.0189183801412582,0.020300354808569,0.0153505494818091,0.0133901620283723,0.0227218400686979,0.0189896188676357,0.0139062767848372,0.0196586865931749,0.0152109181508422,0.0214336402714252,0.0111258868128061,0.00999513454735279,0.0197951514273882,0.0215826574712992,0.0487717166543007,0.041760291904211,0.0189418196678162,0.00134728313423693,0.0198628734797239,0.00401673326268792,0.00362365040928125,0.00175487017259002,0.00186694483272731,0.00233244802802801,0.00539519498124719,0.0136201335117221,0.0129918465390801,0.0130262523889542,\n0.0141849555075169,0.0142200998961926,0.0060765091329813,0.00598268769681454,0.00254058255814016,0.00413914304226637\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.987461993727725,-0.0695892778200937,0.141690541961846,0,-0.136984517421226,-0.0683111254337173,-0.988214958114558,0,0.0784482095958496,-0.99523410378089,0.0579219836329764,0,7.30754685020744,2.41825467121705,59.8176295206032,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.987461925929919,-0.136984508016053,0.0784482042097015,0,-0.0695892779054035,-0.0683111255174604,-0.995234105000953,0,0.141690546310218,-0.988214988442108,0.0579219854105573,0,-1.09138372286622,60.2788924737958,-1.63129026859045,1\n\t\t} \n\t}\n\tDeformer: 135111200, \"SubDeformer::Cluster_L_eye_joint1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *865 {\n\t\t\ta: 98,99,106,110,151,152,153,154,155,156,157,158,159,160,161,162,164,165,177,178,179,180,181,182,183,184,185,213,214,216,217,218,219,220,291,292,324,326,336,337,750,751,752,754,755,796,797,828,833,883,884,942,943,944,945,946,1000,1053,1087,1088,1090,1091,1149,1153,1162,1201,1746,1747,1748,1756,1757,1758,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1854,1855,1856,1857,1858,1859,1860,1861,1862,1890,1891,1892,1893,1894,1895,1959,1960,1961,1962,1964,1991,1992,1993,2002,2003,2005,2009,2010,2011,2012,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,2079,2080,2081,2082,2083,2084,2086,2087,2088,2090,2093,2094,2095,2096,2097,2098,2099,2100,2101,2173,2178,2179,2180,2265,2269,2270,2271,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2404,2422,2423,2424,2425,2426,2427,2449,2450,2467,2468,2469,2470,2475,2499,2504,2508,2509,2510,2511,2512,2555,2556,2560,2595,2596,2597,2598,2609,2610,2617,2618,2619,2620,2621,2622,2640,2651,2652,2653,2654,2655,2656,2657,2666,2667,2668,2669,2678,2679,2690,2691,2702,2703,2716,2717,2718,2719,2730,2733,2734,2735,2736,2737,2738,2739,2752,2768,2769,2771,2772,2792,2793,2806,2807,2808,2813,2818,2819,2831,2835,2844,2851,2852,2853,2854,2855,2856,2880,2897,2898,2910,2911,2913,2914,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,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,3230,3235,3236,3237,3238,3239,3240,3241,3242,3244,3245,3247,3248,3249,3314,3315,3317,3318,3319,3321,3322,3323,3324,3325,3329,3330,3331,3332,3333,3334,3338,3339,3342,3355,3358,3362,3363,3365,3366,3367,3368,3372,3383,3384,3385,3403,3404,3423,3424,3425,3432,3433,3472,3480,3484,3485,3500,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,\n3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,4052,4053,4054,4055,4056,4057,4058,4060,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4193,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4314,4315,4316,4317,4318,4319,4321,4322,4323,4326,4327,4328,4329,4330,4331,4333,4334,4335,4336,4337,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,5790,5791,5795,5796,5797,5798,5799,5800,5828,5830,5831,5834,5837,5838,\n5840,5841,5842,5843,5846,5848,5879,5883,5904,5937,5964,5965,5966,5967,5968,5969,5970,5971,5972,5975,5977,5980,5981,5985,5989,5990,6004,6020,6141,6159,6162,6192,6467,6485,6489,6493,6494\n\t\t} \n\t\tWeights: *865 {\n\t\t\ta: 0.0038912461604923,0.00746879680082202,0.00141331483609974,0.01067846827209,0.013077687472105,0.0246206074953079,0.0236639585345984,0.0152580700814724,0.0286018270999193,0.0310774073004723,0.0312411542981863,0.0261699371039867,0.0184016786515713,0.0347599051892757,0.024570794776082,0.0318554602563381,0.041717704385519,0.0357340350747108,0.00606823712587357,0.00972852203994989,0.0188133157789707,0.0098462775349617,0.0125692626461387,0.019047936424613,0.00273100752383471,0.00462566455826163,0.00593316461890936,0.00270845112390816,0.00425019580870867,0.00877111963927746,0.0125265428796411,0.0174335725605488,0.00591986905783415,0.00135375326499343,0.00188461295329034,0.00151532597374171,0.00204999255947769,0.00690315803512931,0.00123022275511175,0.00282211299054325,0.00406783912330866,0.00228741578757763,0.0011156260734424,0.00105570175219327,0.00231963209807873,0.00712635600939393,0.00509478570893407,0.0051323501393199,0.00548261823132634,0.00537449773401022,0.00795647688210011,0.00294765923172235,0.00560125382617116,0.0033296609763056,0.00171174516435713,0.00288268574513495,0.00104738119989634,0.00211143540218472,0.00455130264163017,0.00443605519831181,0.0119684366509318,0.00844237580895424,0.00610086182132363,0.0057710106484592,0.00910606142133474,0.0129934316501021,0.0254145096987486,0.0266697257757187,0.0183888282626867,0.0464220605790615,0.0186563823372126,0.0157747473567724,0.0484627932310104,0.0810441970825195,0.0768198370933533,0.0468261800706387,0.0932487100362778,0.0852285027503967,0.0717913508415222,0.0682760924100876,0.0428164899349213,0.0595326125621796,0.0388268604874611,0.0580568835139275,0.0475558713078499,0.0521105714142323,0.035434115678072,0.0606706887483597,0.075504295527935,0.0447081252932549,0.075449101626873,0.0893826857209206,0.0160036776214838,0.0208015814423561,0.0227869488298893,0.00141787191387266,0.00676626246422529,0.0065395925194025,0.00140758685301989,0.0207227878272533,0.0193231124430895,0.00740664172917604,0.00680384412407875,0.00158558180555701,0.00143789895810187,\n0.00504043977707624,0.00720629096031189,0.00148507207632065,0.0222162082791328,0.0100442161783576,0.0237202029675245,0.002926493762061,0.00792062189429998,0.0278539098799229,0.0013780000153929,0.0272102281451225,0.349999994039536,0.150000005960464,0.449999988079071,0.150000005960464,0.150000005960464,0.219999998807907,0.539033949375153,0.649999976158142,0.749286413192749,0.5,0.752774000167847,0.800000011920929,0.699999988079071,0.699999988079071,0.150000005960464,0.164102658629417,0.242218345403671,0.110994532704353,0.200312361121178,0.119263090193272,0.147319793701172,0.226669728755951,0.100000001490116,0.342192471027374,0.502626240253448,0.691313743591309,0.464090317487717,0.100000001490116,0.288183063268662,0.00674763834103942,0.00481084920465946,0.0242928043007851,0.0119534581899643,0.0154355028644204,0.00483096996322274,0.00424615060910583,0.0158611889928579,0.00221397657878697,0.0145594794303179,0.0105838282033801,0.0327097326517105,0.0444533079862595,0.0895712301135063,0.0500000007450581,0.0221567433327436,0.0531193725764751,0.0414562374353409,0.0757283121347427,0.133984073996544,0.107808001339436,0.00132235384080559,0.010545508004725,0.00400018226355314,0.00207298039458692,0.0700000002980232,0.0313636586070061,0.0215178523212671,0.0156056005507708,0.034803070127964,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.00151988526340574,0.0085519477725029,0.0297721326351166,0.0211408082395792,0.0018999184248969,0.00622903881594539,0.0202187467366457,0.00821313075721264,0.175155088305473,0.20246547460556,0.0748029351234436,0.0500103756785393,0.1078976765275,0.0739056691527367,0.0437904708087444,0.0616192035377026,0.0512847304344177,0.0351532548666,0.15351414680481,0.115480601787567,0.0785194784402847,0.106780119240284,0.0841209962964058,0.061554454267025,0.100000001490116,0.0865721106529236,0.114501155912876,0.116757825016975,0.00275758747011423,0.0395147576928139,0.0261142645031214,0.0137884160503745,0.00676471227779984,0.0145978583022952,0.0223576165735722,0.0301102176308632,0.0289073176681995,\n0.00515285972505808,0.0546868927776814,0.0412694625556469,0.00425857631489635,0.00223806616850197,0.0238872319459915,0.0314677245914936,0.0603148639202118,0.0919864401221275,0.117405980825424,0.00103968661278486,0.00140306551475078,0.0181460976600647,0.0135137075558305,0.00193576700985432,0.182137340307236,0.111208200454712,0.128003790974617,0.0730748623609543,0.0212860628962517,0.0486274063587189,0.00415304768830538,0.00841330084949732,0.00778522342443466,0.00381538085639477,0.0112824933603406,0.00411980412900448,0.00129261950496584,0.0338672325015068,0.105499587953091,0.0661656931042671,0.15208226442337,0.256753355264664,0.188580900430679,0.150000005960464,0.00176679529249668,0.0045908116735518,0.00990359205752611,0.00294763781130314,0.00140576681587845,0.00121235230471939,0.088316410779953,0.122155249118805,0.0623086728155613,0.0372041761875153,0.152274057269096,0.0877154096961021,0.20766144990921,0.128310024738312,0.00272386288270354,0.0148188229650259,0.581505417823792,0.60775899887085,0.391209810972214,0.449999988079071,0.367483019828796,0.21595473587513,0.00511999987065792,0.0337072089314461,0.0243593472987413,0.0595335252583027,0.0494096390902996,0.288400173187256,0.254165440797806,0.0184773337095976,0.0233920011669397,0.0105660744011402,0.0417584367096424,0.00572074064984918,0.00440607406198978,0.0402106605470181,0.0455601029098034,0.0595960952341557,0.236882373690605,0.274818778038025,0.173639640212059,0.00821051653474569,0.00111673469655216,0.00192473467905074,0.0744823962450027,0.0209792852401733,0.0242483224719763,0.00515718245878816,0.0168403051793575,0.00198370963335037,0.0062483036890626,0.393967807292938,0.297216445207596,0.284882426261902,0.779509365558624,0.707262277603149,0.47817474603653,0.39839693903923,0.383381128311157,0.272867739200592,0.354216724634171,0.215759769082069,0.313570141792297,0.0679698660969734,0.0687856376171112,0.0261576380580664,0.234204679727554,0.0370325855910778,0.0571153126657009,0.103240847587585,0.1180534735322,0.190469533205032,0.143643140792847,0.151886433362961,0.193937033414841,\n0.133460149168968,0.234541907906532,0.253086447715759,0.305678099393845,0.364733636379242,0.400832086801529,0.342316150665283,0.30690062046051,0.42099592089653,0.502739071846008,0.495381146669388,0.371182233095169,0.899999976158142,0.899999976158142,0.980000019073486,1,1,0.980000019073486,0.980000019073486,0.980000019073486,0.835542321205139,0.85124671459198,0.727739691734314,0.202030509710312,0.133721649646759,0.156758695840836,0.00306026707403362,0.0663799419999123,0.0627863854169846,0.0726863443851471,0.0683878138661385,0.0423226542770863,0.0181763526052237,0.0500000007450581,0.0500000007450581,0.0500000007450581,0.0340265333652496,0.0206213351339102,0.00880161300301552,0.061221182346344,0.149439617991447,0.139599531888962,0.0114001017063856,0.00134399998933077,0.0368302874267101,0.00511999987065792,0.00479999976232648,0.00375466677360237,0.00184088898822665,0.00231452425941825,0.0391958728432655,0.108779542148113,0.128863975405693,0.0109759103506804,0.00937955174595118,0.00162896886467934,0.0034905462525785,0.440623670816422,0.00229969387874007,0.0058504375629127,0.150000005960464,0.0012159482575953,0.00647590681910515,0.0137380259111524,0.00691936537623405,0.00245999894104898,0.0314241163432598,0.0719676613807678,0.0235037468373775,0.00513688893988729,0.150000005960464,0.300000011920929,0.0837228745222092,0.0730877444148064,0.0616817027330399,0.084648534655571,0.0647208988666534,0.00780501682311296,0.649999976158142,0.31384065747261,0.376428991556168,0.00612152414396405,0.0864159390330315,0.128799378871918,0.0639853924512863,0.0571126453578472,0.182525634765625,0.259402930736542,0.11110020428896,0.121370367705822,0.123139880597591,0.431690454483032,0.0678107142448425,0.116970963776112,0.151332914829254,0.128084793686867,0.188019275665283,0.254704773426056,0.222260326147079,0.426697045564651,0.313478171825409,0.662932276725769,0.712575972080231,0.714460909366608,0.744367778301239,0.797382295131683,0.710675418376923,0.0866629257798195,0.0836607664823532,0.144993305206299,0.0611713975667953,0.0595202445983887,0.173436269164085,\n0.209887385368347,0.116518676280975,0.103099502623081,0.312380999326706,0.114136606454849,0.124968446791172,0.145314767956734,0.195556074380875,0.169761568307877,0.368388921022415,0.226643174886703,0.522917032241821,0.606863260269165,0.602068185806274,0.602239727973938,0.671783566474915,0.573743999004364,0.0799809694290161,0.0028724349103868,0.00273489975370467,0.00224263756535947,0.00261519732885063,0.00237992848269641,0.00147316930815578,0.00201171170920134,0.00189624272752553,0.00219413707964122,0.00245666946284473,0.00189763796515763,0.00182186311576515,0.00285251555033028,0.00287016853690147,0.00251814303919673,0.00248833745718002,0.00266813719645143,0.00287493271753192,0.00301240081898868,0.0032727187499404,0.00284083373844624,0.00320788915269077,0.00359099078923464,0.00412758998572826,0.00315631576813757,0.00323004997335374,0.00321480701677501,0.00332579459063709,0.00285214022733271,0.00295891449786723,0.00354001857340336,0.00337863969616592,0.00334977172315121,0.00339434412308037,0.00338804326020181,0.00335639086551964,0.00369864515960217,0.0037561864592135,0.00450852140784264,0.00450629414990544,0.00589997135102749,0.00577224884182215,0.00300176558084786,0.00284553435631096,0.0033055804669857,0.00401255441829562,0.00271141226403415,0.00304197636432946,0.0032030027359724,0.00278149824589491,0.00322267832234502,0.00290161650627851,0.00361466920003295,0.00428378861397505,0.00334629463031888,0.00336101255379617,0.00307296216487885,0.0032977256923914,0.00341798411682248,0.00368143315427005,0.00296677765436471,0.00290974951349199,0.00300370645709336,0.00312284333631396,0.00280307792127132,0.00274716271087527,0.00294384569860995,0.00303437188267708,0.00293560628779233,0.00535764917731285,0.00444378051906824,0.0034510565456003,0.00472006853669882,0.00181388761848211,0.00337480590678751,0.00235132407397032,0.00315221515484154,0.00429010717198253,0.00224503269419074,0.0047888970002532,0.00585188902914524,0.00548017863184214,0.00454346882179379,0.00465585617348552,0.00493457354605198,0.00388614949770272,0.00589821254834533,\n0.00602432992309332,0.00503173423931003,0.00664270063862205,0.00652361335232854,0.00738831702619791,0.00736821768805385,0.00598593987524509,0.00570765323936939,0.0052280118688941,0.00812239944934845,0.00690612616017461,0.00922985840588808,0.00964972749352455,0.0100229699164629,0.00979678798466921,0.00947143416851759,0.00988043006509542,0.00788048282265663,0.00827876199036837,0.00714467046782374,0.00750800548121333,0.00554124126210809,0.00850069615989923,0.0075537096709013,0.00673130573704839,0.0071938019245863,0.00710836937651038,0.00676870625466108,0.00553518440574408,0.00828305631875992,0.00855810195207596,0.00742994295433164,0.00832461938261986,0.0091610960662365,0.00952113978564739,0.00609192904084921,0.00660995859652758,0.00667747063562274,0.00747788092121482,0.00544685358181596,0.00532601587474346,0.00636698864400387,0.00747411930933595,0.00729592377319932,0.00196876213885844,0.00167774257715791,0.00197391537949443,0.00210932898335159,0.00105903821531683,0.0016689149197191,0.00136837980244309,0.00125867768656462,0.00219658622518182,0.00218117795884609,0.00233970722183585,0.00260340375825763,0.00225786538794637,0.00227275397628546,0.00218520546332002,0.00229749316349626,0.00238911714404821,0.00247099064290524,0.00225680181756616,0.00237468630075455,0.00242421845905483,0.00274204649031162,0.00256723049096763,0.00336809456348419,0.00306707480922341,0.00234764581546187,0.00248749298043549,0.00255475123412907,0.00318171083927155,0.00242847763001919,0.00311959092505276,0.0035705070476979,0.00224441569298506,0.00123613397590816,0.00155509519390762,0.00416996888816357,0.0040141916833818,0.00318032247014344,0.00434468686580658,0.00411119963973761,0.00373093411326408,0.00657161371782422,0.00643852632492781,0.00604194169864058,0.00593365449458361,0.0058493041433394,0.00548689533025026,0.00469370279461145,0.00422931695356965,0.00523619493469596,0.00584275601431727,0.00618052296340466,0.00250652339309454,0.00213699461892247,0.00138027011416852,0.0027654857840389,0.00286928634159267,0.00325076188892126,0.0032718819566071,\n0.00351603957824409,0.00424721231684089,0.00551357073709369,0.00331737310625613,0.00320188654586673,0.00227472884580493,0.00291172997094691,0.00287038390524685,0.00302322162315249,0.00324240955524147,0.00419651810079813,0.00167633499950171,0.00501104025170207,0.0055063646286726,0.00934084132313728,0.00949322339147329,0.00925296358764172,0.00772196892648935,0.00849300436675549,0.00798273459076881,0.004718744661659,0.00585839105769992,0.00640948535874486,0.0071573075838387,0.0029482904355973,0.00891218427568674,0.0102696055546403,0.00801469944417477,0.0075694783590734,0.00829983130097389,0.00948033947497606,0.00821911729872227,0.0088095311075449,0.00777143286541104,0.00785871688276529,0.00711476756259799,0.0069456766359508,0.00646172650158405,0.00789961684495211,0.00749206775799394,0.00839586462825537,0.00768001656979322,0.00888935849070549,0.00799908488988876,0.0094854049384594,0.00838644616305828,0.00998248253017664,0.00871728733181953,0.00874925404787064,0.00752222584560514,0.00852789543569088,0.00786581169813871,0.00688365427777171,0.00592871708795428,0.00658458471298218,0.00701384944841266,0.0074963322840631,0.00806235335767269,0.00851017609238625,0.00763430166989565,0.00866615958511829,0.0079189445823431,0.00680210301652551,0.00572706665843725,0.00624250480905175,0.00361610692925751,0.00403973972424865,0.00464699137955904,0.00516547728329897,0.00528786843642592,0.00489354878664017,0.00416175229474902,0.0033993604592979,0.00355392741039395,0.00360536435618997,0.0021504673641175,0.0046223346143961,0.00879024062305689,0.0082965986803174,0.0088426573202014,0.0104714669287205,0.00916303694248199,0.00852636806666851,0.00781917851418257,0.0084534827619791,0.00698069809004664,0.00365751283243299,0.00275685871019959,0.00306416256353259,0.00407540565356612,0.0031653237529099,0.00355168106034398,0.00319073838181794,0.00358729413710535,0.00310353306122124,0.00346082681789994,0.0029276676941663,0.00320818251930177,0.00272714579477906,0.0029269983060658,0.00231565744616091,0.00244255387224257,0.00347824790515006,0.00379278091713786,\n0.00359018542803824,0.00396385602653027,0.00367449503391981,0.00409605354070663,0.0036963012535125,0.0041322004981339,0.00274232355877757,0.00358765525743365,0.00321995210833848,0.00328098819591105,0.00315649411641061,0.00288322917185724,0.00257438328117132,0.00211100280284882,0.00332666095346212,0.00351023417897522,0.00364485383033752,0.00366668263450265,0.0022805470507592,0.00273415795527399,0.00324346288107336,0.00332364905625582,0.00318467197939754,0.00286923488602042,0.00251456326805055,0.00203057285398245,0.00176350364927202,0.00180430873297155,0.00192816136404872,0.00209267088212073,0.00169648032169789,0.00137202127370983,0.00207436457276344,0.00218321965076029,0.00210944400168955,0.00187669682782143,0.00159703101962805,0.00125271349679679,0.00105652003549039,0.00199300702661276,0.00113289791624993,0.00123676413204521,0.00255915010347962,0.00141588877886534,0.00208958005532622,0.00196704873815179,0.00216767517849803,0.00232494808733463,0.00259238597936928,0.00358449853956699,0.00352447549812496,0.00344475172460079,0.003357496811077,0.00347600504755974,0.00337328994646668,0.00364757981151342,0.00315107614733279,0.00319626065902412,0.00326616037636995,0.00334058725275099,0.00340767367742956,0.00392938638105989,0.00355419632978737,0.00237688352353871,0.00454634195193648,0.0019630070310086,0.00281993020325899,0.00906544551253319,0.00831099599599838,0.00224613631144166,0.0197735726833344,0.00137500802520663,0.00211713276803494,0.00517774606123567,0.00154388858936727,0.0029610728379339,0.00337772024795413,0.00518400780856609,0.0042556906118989,0.00429127365350723,0.00385551853105426,0.00231104274280369,0.0017273563425988,0.00102619617246091,0.0148404175415635,0.00504331663250923,0.00361545896157622,0.00329389865510166,0.00222742976620793,0.00301670958288014,0.00169996067415923,0.00180735485628247,0.00242576887831092,0.00138427189085633,0.0027351276949048,0.00137489358894527,0.00255316752009094,0.00110148976091295,0.00185089581646025,0.0012406351743266,0.00199872045777738,0.00163026701193303,0.00174500199500471,0.00111509673297405,\n0.00157053663861007,0.00127368152607232,0.0013530672295019,0.00129679474048316,0.0015278987120837,0.00107203773222864,0.00807942263782024,0.00218584365211427,0.00115716061554849,0.00101477664429694\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.993331668793896,0.10763360959548,-0.041318187638811,0,-0.0244486082133341,-0.153576078058137,-0.987834247540742,0,-0.112669667543803,0.982257219833786,-0.149920490130099,0,-0.104756966978289,7.87776069093907,67.510384927605,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.993331676088063,-0.0244486083928634,-0.112669668371151,0,0.107633625570261,-0.153576100851615,0.982257365618587,0,-0.0413181939768158,-0.98783439906961,-0.149920513127158,0,2.04555364893807,67.8963551342133,2.37140015377402,1\n\t\t} \n\t}\n\tDeformer: 135115872, \"SubDeformer::Cluster_R_eye_joint\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *687 {\n\t\t\ta: 70,71,94,95,98,99,106,108,109,110,120,121,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,212,213,214,215,216,217,218,219,220,291,292,293,294,295,296,324,325,326,328,329,336,337,339,340,344,345,346,347,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,396,397,398,399,400,401,402,403,404,405,406,407,409,410,411,414,416,417,418,420,421,422,423,424,425,426,427,428,500,501,502,503,504,506,507,508,573,574,575,576,577,578,590,591,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,729,731,750,751,752,753,754,755,775,777,778,779,780,795,796,797,798,803,816,817,825,827,828,829,830,831,832,833,837,838,839,844,882,883,884,885,914,915,916,917,924,925,926,927,934,935,936,942,943,944,945,946,947,964,973,974,975,976,977,978,979,980,989,990,998,1000,1001,1004,1005,1006,1007,1011,1012,1013,1023,1024,1025,1026,1028,1037,1038,1039,1050,1053,1054,1055,1056,1057,1058,1059,1068,1069,1070,1087,1088,1089,1090,1091,1092,1093,1102,1103,1110,1111,1112,1117,1126,1131,1132,1144,1147,1148,1149,1153,1154,1155,1156,1157,1159,1160,1161,1162,1166,1167,1169,1170,1171,1172,1173,1174,1201,1207,1218,1221,1231,1232,1235,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1523,1526,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,1570,1571,1572,1573,1574,1575,1576,1577,1642,1643,1645,1646,1647,1648,1650,1651,1654,1655,1656,1657,1658,1659,1666,1679,1680,1681,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1695,1698,1699,1707,1708,1709,1710,1712,1714,1726,1727,1728,1731,1732,1733,1734,1741,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1792,1796,1806,1807,1808,1810,1811,1813,1814,1815,1816,1817,1821,1822,1825,1827,1830,\n1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1890,1891,1892,1893,1894,1895,1959,1960,1961,1962,1963,1964,1991,1992,1993,1994,1995,2002,2003,2005,2422,2423,2424,2425,2426,2427,2467,2468,2469,2470,2475,2499,2500,2501,2502,2503,2504,2512,2554,2555,2556,2557,2560,2585,2586,2587,2588,2617,2618,2619,2620,2621,2622,2629,2640,2666,2667,2668,2669,2670,2676,2678,2679,2689,2730,2733,2768,2769,2770,2771,2772,2773,2774,2829,2830,2831,2835,2837,2838,2844,2880,2913,2914,3408,3409,3410,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3486,3487,3499,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,5359,5360,5364,5397,5399,5400,5404,5407,5408,5410,5411,5412,5413,5416,5418,5443,5453,5474,5503,5504,5508,5510,5536,5537,5538,5539,5540,5541,5542,5543,5544,5547,5552,5553,5554,5557,5561,5562,5576,5592,5644,5662,5665,5684,5726,5728,5732,5736\n\t\t} \n\t\tWeights: *687 {\n\t\t\ta: 0.00225406116805971,0.00299270241521299,0.00314046395942569,0.00142694683745503,0.00384869473055005,0.00592560134828091,0.00200975174084306,0.00715580768883228,0.00537628959864378,0.00739909242838621,0.00239976635202765,0.00138659891672432,0.0061279172077775,0.00658823549747467,0.00824131164699793,0.00719038164243102,0.00956671498715878,0.0120942890644073,0.0133896032348275,0.00891112256795168,0.00740056345239282,0.00646934891119599,0.00637939153239131,0.00126555329188704,0.00449737347662449,0.00272365752607584,0.00274063716642559,0.00139470375142992,0.0045706620439887,0.00445523951202631,0.00670536514371634,0.0262232050299644,0.035804707556963,0.0377006456255913,0.0280813500285149,0.0405757576227188,0.0415965355932713,0.0393838249146938,0.0370488241314888,0.0285728257149458,0.0360037907958031,0.029328715056181,0.0361984297633171,0.0339969955384731,0.0357963219285011,0.0318237543106079,0.00914799701422453,0.0155569585040212,0.0171203799545765,0.00547765055671334,0.00529744848608971,0.00671972194686532,0.0112307257950306,0.0072063491679728,0.00848108436912298,0.0129470666870475,0.0159949082881212,0.0226276535540819,0.0304606538265944,0.0219458937644959,0.0269811600446701,0.0352062843739986,0.00932966638356447,0.0130579331889749,0.0156794786453247,0.00327899609692395,0.0085839768871665,0.00914031360298395,0.00356043060310185,0.0175848435610533,0.0184314381331205,0.0194156914949417,0.00963829085230827,0.00380341988056898,0.00757872546091676,0.00627756444737315,0.00289895292371511,0.00237405230291188,0.00136809202376753,0.0043934378772974,0.00818693824112415,0.00311475805938244,0.0169690046459436,0.00107458676211536,0.00117155455518514,0.00565435644239187,0.00999229587614536,0.00254443008452654,0.00318441540002823,0.0741772800683975,0.0924278497695923,0.0274049881845713,0.138513386249542,0.579739809036255,0.445804357528687,0.510030806064606,0.299037575721741,0.251733839511871,0.377906203269959,0.698451936244965,0.649999976158142,0.850000023841858,0.75,0.899999976158142,0.949999988079071,0.75,0.75,0.162479013204575,\n0.162473782896996,0.239764705300331,0.117019481956959,0.100000001490116,0.314426273107529,0.442865610122681,0.649999976158142,0.379082888364792,0.100000001490116,0.0029387956019491,0.00929927919059992,0.00298508838750422,0.00750204036012292,0.00200997781939805,0.00188099674414843,0.00782627891749144,0.0227196458727121,0.0229735802859068,0.0481614321470261,0.0551468729972839,0.106037020683289,0.0339427515864372,0.0257349461317062,0.0585545152425766,0.110038615763187,0.01064791996032,0.00200310163199902,0.0102275665849447,0.00237495475448668,0.0384428389370441,0.0149681828916073,0.00486927153542638,0.0339592806994915,0.0590300299227238,0.0914978757500649,0.161068394780159,0.124054789543152,0.0800120905041695,0.00387670774944127,0.0485085695981979,0.0384997762739658,0.0122045539319515,0.013538776896894,0.144682094454765,0.256250083446503,0.336145132780075,0.002973897382617,0.00891208928078413,0.00199143635109067,0.00917734857648611,0.0215485915541649,0.00575529271736741,0.00395605154335499,0.0026860658545047,0.125525027513504,0.140216618776321,0.0238694231957197,0.0142579050734639,0.048931673169136,0.0338563732802868,0.00757236639037728,0.0109836980700493,0.00744025874882936,0.00380006502382457,0.0845025405287743,0.0692142695188522,0.0467887856066227,0.0562854818999767,0.0258110873401165,0.0201738514006138,0.146569639444351,0.0903132930397987,0.167498186230659,0.10464883595705,0.00314257550053298,0.0123085863888264,0.0114605892449617,0.00852362066507339,0.00543177081272006,0.00255902297794819,0.00438370183110237,0.00621197698637843,0.00119641202036291,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.00286894803866744,0.0183880105614662,0.0147572588175535,0.00148830120451748,0.00124421424698085,0.0117347855120897,0.0103331999853253,0.00500483578070998,0.00199292507022619,0.00784185156226158,0.00654877489432693,0.00432892935350537,0.00542736705392599,0.00806710496544838,0.00971512403339148,0.0500000007450581,0.100000001490116,0.100000001490116,0.00202715280465782,0.00701918220147491,0.00660502957180142,\n0.00692577799782157,0.00690311519429088,0.00360431079752743,0.00568113895133138,0.0053304610773921,0.00321385520510376,0.200000002980232,0.200000002980232,0.464121609926224,0.372001975774765,0.00137971458025277,0.0794769674539566,0.0914423316717148,0.003408428048715,0.00531325163319707,0.00414136936888099,0.00264358799904585,0.00428298860788345,0.0019509750418365,0.00121530832257122,0.412422329187393,0.5,0.448966711759567,0.550000011920929,0.649999976158142,0.550000011920929,0.197379514575005,0.0051034651696682,0.001438521547243,0.00275980518199503,0.00182668399065733,0.00176234217360616,0.0013265140587464,0.0872451215982437,0.0318181775510311,0.120967552065849,0.0561373271048069,0.00152190367225558,0.100000001490116,0.100000001490116,0.25,0.272729575634003,0.0074675315991044,0.0305993165820837,0.00303684757091105,0.400000005960464,0.395441085100174,0.400000005960464,0.00104265799745917,0.00430345255881548,0.699999988079071,0.75,0.5,0.550000011920929,0.449999988079071,0.300000011920929,0.0157849490642548,0.0450058728456497,0.0118039222434163,0.00920973252505064,0.0071520977653563,0.0172294974327087,0.0234336089342833,0.0177474711090326,0.0136046605184674,0.00900147948414087,0.0299999993294477,0.00812691077589989,0.00190130481496453,0.229402348399162,0.204308375716209,0.00115229026414454,0.0299999993294477,0.097870834171772,0.100000001490116,0.00205515092238784,0.00697201397269964,0.0103997318074107,0.0130104143172503,0.0134130232036114,0.00165532832033932,0.00309189269319177,0.00234658550471067,0.00112811266444623,0.0012501880992204,0.0936693772673607,0.0463141165673733,0.0196417048573494,0.00268755247816443,0.00839622225612402,0.550000011920929,0.550000011920929,0.300000011920929,0.0418052561581135,0.016082338988781,0.0198220461606979,0.027225948870182,0.00273721688427031,0.235250785946846,0.00140504783485085,0.206924885511398,0.284648895263672,0.001910021295771,0.600000023841858,0.5,0.451376587152481,0.899999976158142,0.800000011920929,0.550000011920929,0.5,0.400000005960464,0.349999994039536,0.349999994039536,0.591311037540436,\n0.71046644449234,0.00166933750733733,0.00155535293743014,0.15054589509964,0.202879443764687,0.300000011920929,0.00581762893125415,0.011917001567781,0.212641268968582,0.23912838101387,0.363610714673996,0.312190741300583,0.301038801670074,0.338739454746246,0.150000005960464,0.370767772197723,0.349999994039536,0.400000005960464,0.507781326770782,0.447562992572784,0.5,0.600000023841858,0.570803225040436,0.547177851200104,0.949999988079071,0.949999988079071,1,1,1,1,0.980000019073486,0.980000019073486,0.899999976158142,0.899999976158142,0.506809055805206,0.300000011920929,0.100000001490116,0.351170927286148,0.155357539653778,0.100000001490116,0.0500000007450581,0.100000001490116,0.0500000007450581,0.0802976787090302,0.051420658826828,0.25,0.300000011920929,0.215666860342026,0.0296915806829929,0.0109948515892029,0.00282987905666232,0.123785838484764,0.0299999993294477,0.0104991234838963,0.0347260311245918,0.174331799149513,0.291356563568115,0.139639675617218,0.0909389927983284,0.751251339912415,0.0250975470989943,0.00101973360870034,0.00281789875589311,0.00530411908403039,0.00705776736140251,0.349999994039536,0.018251609057188,0.00552481040358543,0.0457161329686642,0.0364900603890419,0.0322229117155075,0.0232003647834063,0.00761937070637941,0.0129122110083699,0.0018132560653612,0.00192320614587516,0.2836734354496,0.191062659025192,0.10631301254034,0.0546292588114738,0.0226769000291824,0.00759811419993639,0.0127899246290326,0.449999988079071,0.550000011920929,0.00395371858030558,0.00562301510944963,0.00412268145009875,0.00225640623830259,0.00267837452702224,0.00369340716861188,0.0384311117231846,0.0382450222969055,0.0308279488235712,0.0295269265770912,0.025489354506135,0.0346145555377007,0.0300641786307096,0.0206859800964594,0.0266162808984518,0.0330806113779545,0.0355984233319759,0.0343656949698925,0.028419679030776,0.025199556723237,0.0212426129728556,0.0196652188897133,0.0160835292190313,0.0121408421546221,0.0202507004141808,0.00168385170400143,0.00484586227685213,0.00330330617725849,0.00781689770519733,0.850000023841858,\n0.00206114444881678,0.0028053573332727,0.00538505567237735,0.0067707528360188,0.00783531460911036,0.00340250763110816,0.00121480436064303,0.00330042955465615,0.00112872116733342,0.001448123017326,0.0040852976962924,0.0229259543120861,0.0306862499564886,0.0330770649015903,0.0254286862909794,0.0337661243975163,0.0351286977529526,0.034977775067091,0.0342453047633171,0.0272729713469744,0.0349134095013142,0.0290430206805468,0.034108117222786,0.0333448573946953,0.0355434231460094,0.00803781766444445,0.0159803424030542,0.00133555091451854,0.00135917204897851,0.00788859557360411,0.00362043548375368,0.00369403162039816,0.00819585844874382,0.0152367781847715,0.0216128192842007,0.0267653465270996,0.0194449722766876,0.025431839749217,0.030388668179512,0.0087865786626935,0.0115359928458929,0.0138986716046929,0.00342140183784068,0.00867122411727905,0.00937425717711449,0.00372696132399142,0.0172722488641739,0.0185647197067738,0.00675679836422205,0.00549612985923886,0.0025901438202709,0.00203290488570929,0.00122223340440542,0.00404203310608864,0.00779036525636911,0.00302999676205218,0.0157638750970364,0.00104375998489559,0.00115360273048282,0.00607519876211882,0.0109270857647061,0.00268194708041847,0.0143921598792076,0.0111151766031981,0.00717192562296987,0.00423647742718458,0.00688508246093988,0.00912474375218153,0.00378839368931949,0.0198083184659481,0.0161420702934265,0.00262516457587481,0.00211739679798484,0.00978809595108032,0.00754176918417215,0.00456672580912709,0.00538340536877513,0.00893084891140461,0.0117520065978169,0.00126411009114236,0.00846298411488533,0.00845142267644405,0.00782160647213459,0.0076493383385241,0.00162299012299627,0.00385678349994123,0.00648050475865602,0.00575396232306957,0.00336620886810124,0.00382873835042119,0.00597893260419369,0.00528374360874295,0.00339140510186553,0.00600495748221874,0.00291066849604249,0.00102913880255073,0.0015889568021521,0.00152235745918006,0.00284664798527956,0.0048015546053648,0.0020070958416909,0.00112610473297536,0.00179676874540746,0.00196465570479631,0.00165885838214308,\n0.00152659718878567,0.0021847162861377,0.00660543423146009,0.0121408635750413,0.00970069132745266,0.0139794517308474,0.0204916838556528,0.01745898835361,0.0123515529558063,0.00713782571256161,0.00626069633290172,0.0105612594634295,0.0144144389778376,0.0159461796283722,0.00256820418871939,0.0021693769376725,0.0204103570431471,0.024961069226265,0.00160232768394053,0.00365474610589445,0.00117914832662791,0.0033273680601269,0.00291148712858558,0.0307696238160133,0.0307900868356228,0.0234009772539139,0.0223564114421606,0.0201896727085114,0.0292647611349821,0.0272439233958721,0.0177467707544565,0.025606844574213,0.0287475045770407,0.0226978901773691,0.0148312449455261,0.0135223055258393,0.0114695969969034,0.00944908522069454,0.0149854561313987,0.649999976158142,0.785920679569244,0.0500000007450581,0.0392807051539421,0.014969184063375,0.0137453535571694,0.143863663077354,0.20943795144558,0.0632535293698311,0.180063635110855,0.114309228956699,0.338245630264282,0.023958794772625,0.252962082624435,0.369833081960678,0.323386013507843,0.477446615695953,0.430914372205734,0.512755036354065,0.50423389673233,0.514667630195618,0.553474307060242,0.524987459182739,0.572267532348633,0.546735525131226,0.462143510580063,0.0304007176309824,0.0525171086192131,0.0195326711982489,0.023110318928957,0.144032761454582,0.067643515765667,0.185808822512627,0.119412794709206,0.304689973592758,0.26177579164505,0.343998968601227,0.412656366825104,0.456989109516144,0.483713805675507,0.479251682758331,0.481080204248428,0.518331408500671,0.491783976554871,0.539229154586792,0.515590369701386,0.433626353740692,0.0343058742582798,0.0781585201621056,0.105993494391441,0.00213290797546506,0.00410596514120698,0.00179009861312807,0.00126644130796194,0.00189128855708987,0.00469252793118358,0.0013661136617884,0.00262552103959024,0.00296656228601933,0.00463480222970247,0.00377434235997498,0.00381961558014154,0.00345237809233367,0.00204208516515791,0.00151749444194138,0.00241850991733372,0.0138494111597538,0.00451441667973995,0.00281708175316453,0.00240241712890565,\n0.0032461395021528,0.0010263113072142,0.00295444997027516,0.00199528969824314,0.00271162413991988,0.00152211741078645,0.00162537593860179,0.00221300823614001,0.00126595702022314,0.00253663677722216,0.00132007012143731,0.00228379410691559,0.00165127718355507,0.00111555960029364,0.0010408025700599,0.00178179494105279,0.00145317730493844,0.00163022498600185,0.00105069985147566,0.00140582525637001,0.00115194544196129,0.00129253440536559,0.00123961386270821,0.00136042467784137,0.00101523788180202,0.00746887130662799,0.00205911742523313,0.00103594770189375\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.993331668793896,0.10763360959548,-0.041318187638811,0,-0.0244486082133341,-0.153576078058137,-0.987834247540742,0,-0.112669667543803,0.982257219833786,-0.149920490130099,0,2.3502624985163,8.0632495255243,67.5859536222117,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.993331676088063,-0.0244486083928634,-0.112669668371151,0,0.107633625570261,-0.153576100851615,0.982257365618587,0,-0.0413181939768158,-0.98783439906961,-0.149920513127158,0,-0.409937425337364,68.0595129517144,2.47713790625645,1\n\t\t} \n\t}\n\tDeformer: 135112368, \"SubDeformer::Cluster_L_eyeBall_joint2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *203 {\n\t\t\ta: 110,1756,1831,1832,1834,1835,1836,1837,1839,1841,1842,1843,1855,1856,1858,1859,2422,2499,2504,2555,2556,2768,2769,2771,2772,2831,2835,2844,2880,3423,3424,3425,3432,3433,4107,4153,4154,4162,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4180,4184,4185,4232,4233,4238,4239,4270,4274,4276,4277,4279,4280,4281,4282,4298,4299,4300,4302,4311,4314,4315,4323,4326,4343,4344,4345,5827,5843,5850,5904,5905,11193,11194,11195,11196,11197,11198,11199,11200,11201,11202,11203,11204,11205,11206,11207,11208,11209,11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225,11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241,11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,11252,11253,11254,11255,11256,11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272,11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,11306,11307,11308,11309,11310,11311,11312\n\t\t} \n\t\tWeights: *203 {\n\t\t\ta: 0.0485186316072941,0.0405950658023357,0.0581861548125744,0.0492938794195652,0.0534534640610218,0.0509121939539909,0.0433826372027397,0.0467577017843723,0.0438807941973209,0.0395000539720058,0.0368526205420494,0.0433537662029266,0.0491937063634396,0.057663019746542,0.0422210991382599,0.0506464838981628,0.0430085472762585,0.0384206995368004,0.0452539175748825,0.0379151850938797,0.0435524433851242,0.0460081957280636,0.0355520620942116,0.0343122705817223,0.0299891103059053,0.0388531126081944,0.0409986935555935,0.0306265540421009,0.0394253730773926,0.0457773171365261,0.0482624992728233,0.0421110391616821,0.0450314655900002,0.0384499169886112,0.0033099977299571,0.00853923615068197,0.008744727820158,0.00679745338857174,0.00789610296487808,0.00706197181716561,0.00619890773668885,0.00658508809283376,0.00647423835471272,0.00589318620041013,0.0045215068385005,0.00782360695302486,0.0080419946461916,0.00697724567726254,0.00778378965333104,0.00851207040250301,0.00889366120100021,0.00702843815088272,0.00684950267896056,0.00677408976480365,0.00537176569923759,0.00537971500307322,0.00483532808721066,0.00536222383379936,0.00744686694815755,0.00671214517205954,0.00845018029212952,0.00977900065481663,0.00768665550276637,0.00731138838455081,0.00797605887055397,0.00918637402355671,0.00951959472149611,0.00827539339661598,0.008237699046731,0.0071938275359571,0.00802947394549847,0.00728526664897799,0.0083099864423275,0.00441928021609783,0.00478160614147782,0.00835898332297802,0.0100166546180844,0.00872667785733938,0.041375208646059,0.00343337701633573,0.00580845354124904,0.00458178669214249,0.00493878545239568,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,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\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.0413367713843446,0.124663369007615,0.991337634166903,0,0.987788531867112,-0.154268921993168,-0.0217890531665547,0,0.150216291556795,0.980132642457207,-0.12951804433764,0,-67.7704774647754,6.06441864970652,-0.00534795101654122,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.041336777725169,0.987788683388224,0.150216314599115,0,0.124663387373597,-0.154268944720777,0.980132786854868,0,0.991337642531241,-0.0217890533503982,-0.129518045430439,0,2.05070381711907,67.878345646167,4.23560315542674,1\n\t\t} \n\t}\n\tDeformer: 135114704, \"SubDeformer::Cluster_R_eyeBall_joint\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *145 {\n\t\t\ta: 152,155,156,157,160,162,164,179,381,828,833,884,1090,1091,1162,1746,1747,1748,1758,5413,5443,5474,5503,5504,10457,11313,11314,11315,11316,11317,11318,11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365,11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,11378,11379,11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425,11426,11427,11428,11429,11430,11431,11432\n\t\t} \n\t\tWeights: *145 {\n\t\t\ta: 0.0593679919838905,0.0537738427519798,0.0508999116718769,0.0431445837020874,0.0444539561867714,0.0391181632876396,0.0437302514910698,0.0584536902606487,0.025000000372529,0.0345351696014404,0.0405548587441444,0.0420879870653152,0.0314351692795753,0.026578277349472,0.0279440488666296,0.0444546975195408,0.0465724915266037,0.0393374674022198,0.0356687866151333,0.00325712328776717,0.00218713586218655,0.00430441554635763,0.00267448276281357,0.00222410587593913,0.00167662848252803,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,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\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.0387875421844768,0.100028338340874,0.994228268392548,0,0.985236061125961,-0.169864842686071,-0.0213467985085488,0,0.166749143805904,0.980377538424147,-0.105140181358115,0,-67.7629265753648,7.41129582551143,2.32996594654076,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.0387875481371354,0.985236212328475,0.166749169396613,0,0.100028353235238,-0.16986486797919,0.980377684403767,0,0.994228275139952,-0.0213467986534204,-0.105140182071657,0,-0.42949996447401,68.0711452162903,4.2785157263196,1\n\t\t} \n\t}\n\tDeformer: 135117040, \"SubDeformer::Cluster_L_UpperArm\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *1036 {\n\t\t\ta: 1809,1812,1817,1818,1819,1820,1826,1846,1847,1848,1849,2007,3408,3418,3422,3467,3468,3473,3474,3475,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,\n4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5805,5806,5807,5810,5812,5815,5819,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5853,5854,5862,5863,5864,5867,5868,5869,5873,5874,5877,5878,5879,5880,5882,5883,5884,5885,5886,5887,5888,5889,5890,5893,5894,5895,5896,5897,5898,5901,5902,5903,5904,5905,5906,5907,5908,5909,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6080,6081,6082,6083,6084,6086,6089,6093,6102,6110,6111,6112,6113,6114,6115,6128,6129,6130,6131,6132,6133,6134,6135,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6183,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6225,6226,6227,6228,6232,6233,6234,6440,6441,6442,6443,6444,6445,6447,6448,6449,6462,6463,6467,6469,6484,\n6485,6486,6488,6489,6491,6492,6493,6494,6495,10499,10500,10506,10507,10508,10509,10511,10518,10519,10520,10521,10522,10523,10524,10525,10526,10530,10531,10532,10533,10534,10535,10538,10539,10541,10542,10543,10544,10545,10546,10547,10548,10549,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10581,10630,10631,10635,10636,10638,10639,10641,10642,10643,10644,10645,10646,10647,10648,10671,10672,10673,10674,10675,10676,10678,10679,10680,10681,10682,10683,10684,10689,10690,10693,10694,10695,10696,10705,10706,10707,10708,10713,10714,10715,10716,10717,10718,10733,10734,10735,10738,10739,10740,10741,10746,10747,10748,10749,10750,10751,10754,10755,10762,10763,10764,10765,10766,10767,10768,10769,10770,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10844,10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10873,10874,10875,10878,10879,10882,10883,10884,10885,10886,10891,10892,10895,10896,10897,10899\n\t\t} \n\t\tWeights: *1036 {\n\t\t\ta: 0.0248133204877377,0.0324307568371296,0.0356169603765011,0.0207698214799166,0.030156422406435,0.034252405166626,0.0145227815955877,0.0309497360140085,0.0301462095230818,0.0345631539821625,0.0348508656024933,0.0111808087676764,0.0224440488964319,0.0279246065765619,0.0208277739584446,0.0215720869600773,0.0628888607025146,0.0285741072148085,0.0372246988117695,0.0393813662230968,0.671951174736023,0.708763182163239,0.777954936027527,0.727325677871704,0.781686902046204,0.867705702781677,0.837035357952118,0.925296008586884,0.863075733184814,0.948842465877533,0.771288096904755,0.697845637798309,0.824166059494019,0.849767506122589,0.653732538223267,0.61710000038147,0.649790644645691,0.675434172153473,0.653554141521454,0.663696765899658,0.689136385917664,0.704505622386932,0.563047289848328,0.560208439826965,0.562112629413605,0.566362500190735,0.601464331150055,0.558381021022797,0.557335078716278,0.596216917037964,0.678151428699493,0.60462486743927,0.552501976490021,0.614971101284027,0.498361498117447,0.484575420618057,0.485800296068192,0.488230407238007,0.487484663724899,0.48967444896698,0.486129522323608,0.49028691649437,0.479702353477478,0.489778876304626,0.49161484837532,0.49787762761116,0.492680281400681,0.492597579956055,0.511562764644623,0.519893407821655,0.503320753574371,0.502098560333252,0.502025127410889,0.507532954216003,0.498470097780228,0.497562944889069,0.523999631404877,0.516897320747375,0.526336133480072,0.508612632751465,0.498038053512573,0.510039269924164,0.562739551067352,0.607795894145966,0.562466561794281,0.527937889099121,0.641221940517426,0.629185378551483,0.561213493347168,0.509782731533051,0.516025304794312,0.702741324901581,0.760756015777588,0.810972273349762,0.740057587623596,0.892389535903931,0.807673513889313,0.937207698822021,0.851298034191132,0.797609925270081,0.729173719882965,0.838807702064514,0.679248750209808,0.643914341926575,0.683527052402496,0.706433594226837,0.685965597629547,0.681573331356049,0.701968908309937,0.574149489402771,0.581609189510345,0.569718241691589,0.626542508602142,\n0.637052655220032,0.576336443424225,0.577661514282227,0.633669376373291,0.669133603572845,0.709506511688232,0.569708585739136,0.640199959278107,0.498486876487732,0.491136640310287,0.465899139642715,0.466461837291718,0.484352439641953,0.467008382081985,0.487460076808929,0.471763491630554,0.487598240375519,0.497599720954895,0.490725487470627,0.507308483123779,0.530655086040497,0.519746243953705,0.505765855312347,0.513488173484802,0.50432813167572,0.498367249965668,0.535860955715179,0.52631139755249,0.53908234834671,0.513603389263153,0.491457641124725,0.51626843214035,0.629995942115784,0.582840859889984,0.582438230514526,0.541063547134399,0.656917929649353,0.66849946975708,0.579762041568756,0.516530930995941,0.525534272193909,0.759033679962158,0.805777370929718,0.741298615932465,0.700179159641266,0.890966236591339,0.812793016433716,0.942499041557312,0.863510012626648,0.962687611579895,0.887522578239441,0.579064846038818,0.585617065429688,0.583216905593872,0.589302241802216,0.62506777048111,0.665343403816223,0.708398222923279,0.491320610046387,0.489428728818893,0.488226443529129,0.503230571746826,0.492925882339478,0.49119159579277,0.489473223686218,0.493882149457932,0.482531487941742,0.493873596191406,0.536814033985138,0.513014674186707,0.499569326639175,0.773965537548065,0.838369727134705,0.793033599853516,0.730684757232666,0.838671863079071,0.913813412189484,0.95292329788208,0.877314269542694,0.604370296001434,0.595778584480286,0.592511534690857,0.652695834636688,0.69582200050354,0.741239070892334,0.471526563167572,0.471250087022781,0.495319962501526,0.505406856536865,0.471759021282196,0.489663749933243,0.475140810012817,0.492314904928207,0.552528321743011,0.520199775695801,0.480048954486847,0.734615802764893,0.784961819648743,0.873987674713135,0.930249631404877,0.953011870384216,0.682857215404511,0.642761290073395,0.486127644777298,0.484876960515976,0.487802773714066,0.485596090555191,0.47825613617897,0.498049736022949,0.509337723255157,0.577197253704071,0.564165592193604,0.606435894966125,0.529352843761444,0.817949295043945,\n0.768238842487335,0.898294389247894,0.941824316978455,0.714447021484375,0.671498954296112,0.465435177087784,0.464698791503906,0.465445667505264,0.469987124204636,0.473710209131241,0.51437783241272,0.599595248699188,0.632000386714935,0.584417045116425,0.542906880378723,0.640533328056335,0.542687952518463,0.530597150325775,0.400000005960464,0.384298652410507,0.400000005960464,0.383724123239517,0.381333291530609,0.383433222770691,0.381000250577927,0.383127093315125,0.381277710199356,0.383326292037964,0.382163017988205,0.383975028991699,0.47921347618103,0.481083244085312,0.61014050245285,0.606766104698181,0.590470552444458,0.591465532779694,0.566190838813782,0.57214081287384,0.544518530368805,0.554570317268372,0.531055212020874,0.400000005960464,0.335283935070038,0.383234649896622,0.382744610309601,0.383036494255066,0.384032219648361,0.481736332178116,0.628333568572998,0.603837788105011,0.573779404163361,0.547561168670654,0.449999988079071,0.400000005960464,0.335080444812775,0.383023858070374,0.382573395967484,0.382903724908829,0.384047895669937,0.482000142335892,0.5356525182724,0.550000011920929,0.550000011920929,0.550000011920929,0.449999988079071,0.400000005960464,0.390052914619446,0.389245510101318,0.388679087162018,0.388942748308182,0.389945924282074,0.489096462726593,0.541556060314178,0.54068124294281,0.550000011920929,0.540895283222198,0.481140583753586,0.572645962238312,0.449999988079071,0.449999988079071,0.490680992603302,0.535034477710724,0.533327996730804,0.5282963514328,0.528202474117279,0.540067374706268,0.570852518081665,0.606686115264893,0.61121392250061,0.63078111410141,0.524792909622192,0.449999988079071,0.449999988079071,0.516527891159058,0.390509039163589,0.389715254306793,0.389851599931717,0.388801574707031,0.389304488897324,0.388022065162659,0.389052659273148,0.387650609016418,0.389169931411743,0.387800872325897,0.449999988079071,0.449999988079071,0.577778518199921,0.581358850002289,0.564002513885498,0.563650250434875,0.547590792179108,0.543173015117645,0.53354948759079,0.526419401168823,0.449999988079071,\n0.516008198261261,0.390943586826324,0.389945238828659,0.38910847902298,0.388745188713074,0.388970702886581,0.449999988079071,0.596204936504364,0.573783755302429,0.548210203647614,0.527739763259888,0.5,0.449999988079071,0.391117632389069,0.389978528022766,0.389020830392838,0.388615101575851,0.388895183801651,0.449999988079071,0.5,0.5,0.5,0.5,0.449999988079071,0.5,0.394442826509476,0.39354795217514,0.392851710319519,0.392656177282333,0.393025666475296,0.449999988079071,0.5,0.611612975597382,0.5,0.5,0.449999988079071,0.449999988079071,0.5,0.5,0.5,0.5,0.5,0.548342764377594,0.528138875961304,0.549952268600464,0.576339483261108,0.548967957496643,0.580441653728485,0.585061550140381,0.601735413074493,0.579566240310669,0.551377356052399,0.527995407581329,0.514831244945526,0.515691518783569,0.523988962173462,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.150000005960464,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.27412673830986,0.167289391160011,0.115354761481285,0.201556026935577,0.0854078829288483,0.118652857840061,0.0980373993515968,0.196852833032608,0.319334238767624,0.0512989424169064,0.0455133803188801,0.225141897797585,0.125852674245834,0.126647189259529,0.236517712473869,0.039642658084631,0.0356426239013672,0.284983724355698,0.103368081152439,0.0672476515173912,0.0664668381214142,0.0355801954865456,0.0285070389509201,0.259743124246597,0.424105197191238,0.433663100004196,0.3836570084095,0.0306853652000427,0.0658317655324936,0.187660560011864,\n0.0972413942217827,0.255493760108948,0.237476676702499,0.0979085341095924,0.213220462203026,0.242596372961998,0.417047560214996,0.443311303853989,0.452294915914536,0.389263302087784,0.485368460416794,0.510531723499298,0.485199838876724,0.386874854564667,0.475898832082748,0.289770364761353,0.372936189174652,0.555619776248932,0.525600433349609,0.0963400900363922,0.400000005960464,0.159999996423721,0.200000002980232,0.25,0.604445457458496,0.400000005960464,0.607856810092926,0.200000002980232,0.250050365924835,0.25,0.290451616048813,0.218649312853813,0.275064080953598,0.354624599218369,0.443818986415863,0.035328347235918,0.462831854820251,0.432470977306366,0.299539059400558,0.151089325547218,0.159999996423721,0.119999997317791,0.159999996423721,0.390148997306824,0.40856060385704,0.263671666383743,0.324121683835983,0.119999997317791,0.453196138143539,0.312783122062683,0.352736085653305,0.259641885757446,0.515015542507172,0.513885915279388,0.25,0.246078610420227,0.422540277242661,0.244702324271202,0.25,0.249711647629738,0.289972990751266,0.350430130958557,0.370051473379135,0.336516976356506,0.329566091299057,0.321041613817215,0.369962871074677,0.302240073680878,0.603537738323212,0.594955384731293,0.318372488021851,0.329138964414597,0.273266732692719,0.280394911766052,0.30194765329361,0.286078155040741,0.286492615938187,0.281629592180252,0.281048178672791,0.268779307603836,0.256048232316971,0.266601055860519,0.57342404127121,0.570661962032318,0.277991205453873,0.257622718811035,0.250156819820404,0.636170923709869,0.269819021224976,0.253984391689301,0.26193243265152,0.581623613834381,0.301737904548645,0.250291764736176,0.25,0.25,0.25,0.253225922584534,0.25,0.25,0.25,0.251081615686417,0.257732510566711,0.275459051132202,0.268927812576294,0.684864163398743,0.70682168006897,0.597854673862457,0.400000005960464,0.598615825176239,0.682989597320557,0.67874550819397,0.69228321313858,0.722083210945129,0.681694328784943,0.838652670383453,0.604545176029205,0.59822154045105,0.854656279087067,0.960296213626862,0.619710147380829,0.873738169670105,\n0.616327583789825,0.643613696098328,0.857911109924316,0.812362492084503,0.862970173358917,0.720022320747375,0.703288555145264,0.736754536628723,0.811635494232178,0.699999988079071,0.699999988079071,0.872642815113068,0.752733886241913,0.771798610687256,0.796925663948059,0.907861709594727,0.796585321426392,0.632541060447693,0.720515251159668,0.904353618621826,0.516643166542053,0.761389434337616,0.608241140842438,0.501608371734619,0.497893631458282,0.626036822795868,0.721234023571014,0.537346363067627,0.932626843452454,0.884767174720764,0.728157877922058,0.818203866481781,0.945107996463776,0.96215945482254,0.962549090385437,0.955218255519867,0.95369279384613,0.934603452682495,0.911027312278748,0.93795645236969,0.899999976158142,0.944583356380463,0.923703551292419,0.902863442897797,0.94034343957901,0.911679923534393,0.937895774841309,0.977745413780212,0.937895774841309,0.875791609287262,0.935270428657532,0.977102100849152,0.876445770263672,0.782918393611908,0.779361724853516,0.849494099617004,0.800993323326111,0.670758605003357,0.639913201332092,0.914563477039337,0.899999976158142,0.436270833015442,0.899999976158142,0.899999976158142,0.446738928556442,0.899999976158142,0.899999976158142,0.507570087909698,0.899999976158142,0.645191788673401,0.899999976158142,0.50766259431839,0.900056779384613,0.888832092285156,0.22633358836174,0.238661527633667,0.0754047632217407,0.202322289347649,0.0670094043016434,0.0905131101608276,0.21491114795208,0.0889049097895622,0.0970706418156624,0.262058734893799,0.0366747006773949,0.0293817147612572,0.0843997374176979,0.0237083174288273,0.0845616087317467,0.0877782180905342,0.0251938421279192,0.0351834110915661,0.101867720484734,0.104017481207848,0.0342402532696724,0.00395678542554379,0.00787932239472866,0.0644239708781242,0.0501892194151878,0.011177022010088,0.00876086298376322,0.00236685667186975,0.00262700393795967,0.0177492592483759,0.0270002540200949,0.00567461596801877,0.0109919682145119,0.00504005933180451,0.0101816318929195,0.00111566262785345,0.244774356484413,0.245710656046867,0.161167815327644,\n0.129841148853302,0.550000011920929,0.550000011920929,0.899999976158142,0.923249185085297,0.963105201721191,0.966649770736694,0.499764204025269,0.49950385093689,0.398110508918762,0.11331570148468,0.967785358428955,0.931321263313293,0.961978733539581,0.918358266353607,0.899999976158142,0.906760454177856,0.804405212402344,0.800993323326111,0.813079595565796,0.944771707057953,0.993404805660248,0.991805374622345,0.994329869747162,0.995069265365601,0.986856520175934,0.985380828380585,0.900154709815979,0.30867263674736,0.373795926570892,0.335957050323486,0.0618258863687515,0.803212404251099,0.870715856552124,0.9056676030159,0.873792052268982,0.954519331455231,0.975940942764282,0.962519526481628,0.927388370037079,0.953723430633545,0.945045053958893,0.703007698059082,0.649999976158142,0.550000011920929,0.891666114330292,0.771452724933624,0.80041229724884,0.975884914398193,0.971213459968567,0.0259718224406242,0.0012870270293206,0.00200663669966161,0.029718391597271,0.00127148546744138,0.550000011920929,0.0947002172470093,0.960593581199646,0.699999988079071,0.699999988079071,0.900747776031494,0.949926972389221,0.94882196187973,0.940486431121826,0.88645213842392,0.965311646461487,0.816892683506012,0.990643560886383,0.980519413948059,0.983963012695313,0.969162106513977,0.97836834192276,0.993345022201538,0.891930460929871,0.936130821704865,0.977292537689209,0.981002569198608,0.99278736114502,0.973240435123444,0.833459258079529,0.990656852722168,0.878318190574646,0.925347745418549,0.824953973293304,0.499562233686447,0.396667510271072,0.41030552983284,0.498761624097824,0.280284285545349,0.237335756421089,0.30772477388382,0.899999976158142,0.198815822601318,0.0269320420920849,0.0825262069702148,0.0013631657930091,0.277416676282883,0.0998596251010895,0.0227861143648624,0.421255558729172,0.39227157831192,0.387923717498779,0.241641104221344,0.387358397245407,0.235032498836517,0.899999976158142,0.0737694650888443,0.0730752050876617,0.714662909507751,0.801311314105988,0.51268196105957,0.0958159640431404,0.0955943614244461,0.0479661673307419,\n0.0832242593169212,0.065484806895256,0.0121975634247065,0.0638823583722115,0.931115567684174,0.927065253257751,0.937691807746887,0.971710443496704,0.0130868805572391,0.0134305208921433,0.0142362248152494,0.0124444514513016,0.00878832675516605,0.00935584492981434,0.0142447035759687,0.0179274175316095,0.0196094270795584,0.0110583864152431,0.0136709315702319,0.0157110877335072,0.0130274835973978,0.0200563613325357,0.0199966225773096,0.0141086541116238,0.0296928975731134,0.0144526325166225,0.0194817539304495,0.0254780128598213,0.0564162321388721,0.0327776856720448,0.0240716673433781,0.0244537517428398,0.0639102533459663,0.0245793573558331,0.0386718362569809,0.0488913655281067,0.150000005960464,0.25,0.25,0.150000005960464,0.0290121491998434,0.0260587334632874,0.0245764590799809,0.0191784016788006,0.0230613481253386,0.0223486497998238,0.0250147357583046,0.0255272854119539,0.0297513008117676,0.0315962955355644,0.0310370977967978,0.300000011920929,0.200000002980232,0.100000001490116,0.200000002980232,0.100000001490116,0.100000001490116,0.150000005960464,0.150000005960464,0.200000002980232,0.0232919920235872,0.021919434890151,0.0169797874987125,0.0198447946459055,0.0152793126180768,0.0129596162587404,0.0160284861922264,0.0172904022037983,0.0389271304011345,0.0530599653720856,0.0379460118710995,0.0178657043725252,0.0232501439750195,0.0033667734824121,0.0344650968909264,0.022616570815444,0.0295472107827663,0.0618020556867123,0.0412753038108349,0.0489884726703167,0.200000002980232,0.300000011920929,0.300000011920929,0.200000002980232,0.0818059369921684,0.0538022443652153,0.25,0.0117521230131388,0.0175466556102037,0.00896589178591967,0.0186237078160048,0.0159933008253574,0.00700326915830374,0.0725999176502228,0.0467990785837173,0.0598451197147369,0.0907235890626907,0.0269097052514553,0.100000001490116,0.022157235071063,0.0218270290642977,0.0214322656393051,0.0171046778559685,0.0158396698534489,0.016515176743269,0.0149005027487874,0.0257846564054489,0.0189873352646828,0.015676299110055,0.0149392280727625,0.0261617973446846,0.0244224686175585,\n0.0294471122324467,0.032239593565464,0.0307376030832529,0.200000002980232,0.00128650886472315,0.00292351190000772,0.00493186060339212,0.00264519662596285,0.00147427699994296,0.00343792489729822,0.0104314740747213,0.00621141539886594,0.0075686234049499,0.00646165106445551,0.0112000769004226,0.0216709971427917,0.0229892302304506,0.0251554101705551,0.0266251973807812,0.029200442135334,0.0369292497634888,0.0856243371963501,0.0637016594409943,0.0739372000098228,0.0939565300941467,0.0531358830630779,0.0332136414945126,0.200000002980232,0.025435546413064,0.0291993785649538,0.0291943531483412,0.150000005960464,0.200000002980232,0.200000002980232,0.150000005960464,0.300000011920929,0.300000011920929,0.25,0.25,0.100000001490116,0.150000005960464,0.150000005960464,0.100000001490116,0.0197086650878191,0.0257528014481068,0.0543842241168022,0.100000001490116,0.100000001490116,0.00103605363983661,0.0010513128945604,0.00975374132394791,0.0106005435809493,0.00368177169002593,0.00513071101158857,0.00379393436014652,0.100000001490116,0.150000005960464,0.100000001490116,0.300000011920929,0.25,0.200000002980232,0.150000005960464,0.150000005960464,0.0276906862854958,0.0262255556881428,0.200000002980232,0.300000011920929,0.0933467522263527,0.0796394571661949,0.150000005960464,0.150000005960464,0.25,0.150000005960464,0.100000001490116,0.0526373125612736,0.032817617058754,0.0278576482087374,0.0460938476026058,0.0238594505935907,0.0493467636406422,0.200000002980232,0.0257651209831238,0.100000001490116,0.100000001490116,0.0203086417168379,0.0267641171813011,0.100000001490116,0.0280830003321171,0.100000001490116,0.0327643901109695,0.100000001490116,0.00101729144807905,0.100000001490116,0.0273743886500597,0.150000005960464,0.100000001490116,0.0151567989960313,0.0151161625981331,0.0236284919083118,0.0195639282464981,0.0170303732156754,0.00267774448730052,0.0167572274804115,0.200000002980232,0.300000011920929,0.150000005960464,0.00178090971894562\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.67453550615253,-0.00572428005084884,0.738220184069585,0,-0.734845382925873,-0.101024949199617,0.670668459615116,0,0.0707395621326576,-0.994867443570327,-0.0723513736431941,0,37.9653360667959,3.83014441425826,-45.5581705043554,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.674535525364217,-0.734845403855267,0.0707395641474163,0,-0.00572427983321717,-0.101024945358745,-0.99486740574642,0,0.738220225293056,0.670668497066384,-0.0723513776834179,0,8.04491980264829,58.8400225859223,-2.17136188975424,1\n\t\t} \n\t}\n\tDeformer: 135118208, \"SubDeformer::Cluster_R_UpperArm\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *692 {\n\t\t\ta: 137,150,170,1740,1741,1745,1790,1791,1792,1797,1798,1799,5014,5015,5020,5021,5023,5025,5026,5029,5031,5032,5034,5037,5039,5040,5041,5042,5043,5044,5045,5052,5053,5060,5061,5062,5066,5067,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5320,5321,5322,5323,5335,5338,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5374,5375,5376,5379,5381,5384,5387,5388,5394,5395,5396,5397,5398,5399,5400,5402,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5423,5424,5432,5433,5434,5437,5438,5443,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457,5458,5459,5460,5462,5463,5464,5465,5466,5467,5471,5472,5473,5474,5475,5477,5478,5479,5480,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,\n5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5731,5732,5734,5735,5736,5737,5738,5743,5744,5745,10054,10055,10060,10061,10062,10063,10064,10065,10066,10074,10075,10076,10077,10078,10079,10080,10081,10082,10087,10088,10089,10090,10091,10092,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10113,10114,10115,10117,10118,10119,10120,10121,10122,10123,10124,10125,10126,10139,10143,10190,10191,10195,10196,10198,10200,10201,10202,10203,10204,10205,10206,10207,10208,10233,10234,10235,10236,10237,10238,10242,10243,10244,10245,10246,10247,10248,10254,10257,10258,10259,10260,10261,10270,10271,10272,10273,10278,10279,10280,10281,10282,10283,10298,10299,10300,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10329,10330,10331,10332,10333,10334,10335,10336,10337,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10406,10407,10408,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447,10450,10451,10454,10455,10457,10458,10459,10461,10463,10465,10469,10470,10472,10473,10474,10496\n\t\t} \n\t\tWeights: *692 {\n\t\t\ta: 0.020969782024622,0.0784795209765434,0.0287694744765759,0.0504049845039845,0.0261336229741573,0.0225135684013367,0.0190182253718376,0.0650658458471298,0.113102801144123,0.0287809018045664,0.0305631123483181,0.0367412269115448,0.045618362724781,0.0385712683200836,0.0391182713210583,0.0349155254662037,0.0142096001654863,0.0279263593256474,0.0288654919713736,0.0265222284942865,0.0278860032558441,0.00829831324517727,0.0135858133435249,0.0204892382025719,0.0301536526530981,0.0261204000562429,0.0271750949323177,0.0435376390814781,0.0434467270970345,0.00748020503669977,0.0093948757275939,0.0218596905469894,0.0117206927388906,0.0366483367979527,0.0317994430661201,0.0213397722691298,0.0211695693433285,0.0263021904975176,0.0158387552946806,0.00751717295497656,0.0293513089418411,0.0307456348091364,0.0290009211748838,0.0319274589419365,0.0178887881338596,0.0296053178608418,0.0360307134687901,0.0467014126479626,0.0487850047647953,0.0501099713146687,0.063944086432457,0.0667659044265747,0.0546446703374386,0.0509453266859055,0.0416330173611641,0.0405608154833317,0.0397334024310112,0.0379403904080391,0.0407577157020569,0.034948106855154,0.0280988253653049,0.0205933395773172,0.0142618026584387,0.0142017956823111,0.0748932734131813,0.106558777391911,0.121540211141109,0.145699858665466,0.146187573671341,0.154134750366211,0.167685657739639,0.16518197953701,0.163050159811974,0.157242730259895,0.14082844555378,0.140541359782219,0.140519261360168,0.147883668541908,0.144016921520233,0.131500884890556,0.114455841481686,0.0923147946596146,0.0699141025543213,0.066122405230999,0.0590536631643772,0.0526484176516533,0.0622121058404446,0.0769118964672089,0.103977158665657,0.121694050729275,0.138020798563957,0.143885031342506,0.13387306034565,0.133046522736549,0.136080756783485,0.141146317124367,0.147136986255646,0.128097504377365,0.120865821838379,0.108399629592896,0.128162771463394,0.102392926812172,0.0810344889760017,0.163100302219391,0.161350920796394,0.178334593772888,0.181064888834953,0.0655111968517303,0.063481405377388,0.0538437478244305,\n0.0520751960575581,0.0496388413012028,0.158261224627495,0.0590182505548,0.102999188005924,0.0509957335889339,0.0919065028429031,0.0938780084252357,0.0241554547101259,0.0186226647347212,0.0187003705650568,0.0800475478172302,0.0831176042556763,0.0880568027496338,0.0845041275024414,0.0829988718032837,0.0914682894945145,0.015033345669508,0.0151413809508085,0.00812804233282804,0.0082727400586009,0.281471788883209,0.172315835952759,0.120438225567341,0.209621414542198,0.100000001490116,0.100000001490116,0.0907326862215996,0.126658961176872,0.104050524532795,0.205078601837158,0.329326122999191,0.0560089275240898,0.0488733053207397,0.023843826726079,0.0134323202073574,0.0135761043056846,0.0251511782407761,0.00432062614709139,0.00379811157472432,0.296586275100708,0.0109487390145659,0.0712462216615677,0.0683919787406921,0.0371147282421589,0.0302848219871521,0.0929126441478729,0.26749175786972,0.429890275001526,0.439371526241302,0.0802547633647919,0.0334492512047291,0.0723082572221756,0.20095394551754,0.104419782757759,0.255707621574402,0.251929551362991,0.108305208384991,0.231429785490036,0.254417687654495,0.426591217517853,0.449845910072327,0.458420038223267,0.398676633834839,0.487502425909042,0.513588309288025,0.490238398313522,0.404504626989365,0.481194138526917,0.308680564165115,0.386695474386215,0.382963806390762,0.534600675106049,0.127761036157608,0.295493572950363,0.165520697832108,0.356632709503174,0.372464150190353,0.436508804559708,0.169452592730522,0.441070288419724,0.498201429843903,0.497700780630112,0.304001420736313,0.023136442527175,0.291925728321075,0.371426731348038,0.454690366983414,0.0379913710057735,0.470165699720383,0.440873682498932,0.310548096895218,0.15815258026123,0.314999997615814,0.349999994039536,0.391449093818665,0.394605964422226,0.349999994039536,0.372320175170898,0.458221673965454,0.565859317779541,0.459301829338074,0.276696681976318,0.263911247253418,0.184785902500153,0.520172536373138,0.521955013275146,0.497991144657135,0.481275767087936,0.430014997720718,0.483669489622116,0.497871071100235,\n0.496094435453415,0.508753895759583,0.703245341777802,0.519935548305511,0.47540420293808,0.663387179374695,0.568387985229492,0.52303409576416,0.536066174507141,0.432498008012772,0.424478769302368,0.450523644685745,0.466012120246887,0.490012615919113,0.505570769309998,0.535811543464661,0.507548570632935,0.578609168529511,0.568595170974731,0.564144194126129,0.539054274559021,0.514491379261017,0.536900699138641,0.579529047012329,0.576918005943298,0.561050355434418,0.51742285490036,0.500973284244537,0.456103533506393,0.380446046590805,0.510196566581726,0.368948191404343,0.587899506092072,0.426884144544601,0.500829041004181,0.5,0.498094856739044,0.5,0.355805635452271,0.350002199411392,0.497277468442917,0.5,0.502760708332062,0.517215073108673,0.554297804832459,0.540830671787262,0.698667883872986,0.717258453369141,0.605572402477264,0.607015371322632,0.608008205890656,0.694056332111359,0.688709139823914,0.702353835105896,0.731380879878998,0.688754320144653,0.843828856945038,0.609543561935425,0.602585256099701,0.86238420009613,0.961804509162903,0.628379642963409,0.883107841014862,0.631122589111328,0.658645212650299,0.867809116840363,0.821233332157135,0.869235575199127,0.729809761047363,0.71179723739624,0.747385561466217,0.820916950702667,0.75,0.75,0.881841719150543,0.764201819896698,0.77573162317276,0.798143088817596,0.909145712852478,0.79645836353302,0.636041641235352,0.721963107585907,0.902325689792633,0.519720673561096,0.763687491416931,0.613580465316772,0.503093123435974,0.499536067247391,0.63247549533844,0.727182567119598,0.541991591453552,0.931566298007965,0.883416652679443,0.722454011440277,0.816012442111969,0.946555495262146,0.963951587677002,0.965491712093353,0.958467066287994,0.95552670955658,0.934015333652496,0.903437912464142,0.935317099094391,0.945562958717346,0.946810066699982,0.925385355949402,0.907459557056427,0.927021265029907,0.90165764093399,0.956426799297333,0.968130826950073,0.946015894412994,0.90613055229187,0.965386986732483,0.974541842937469,0.87210077047348,0.702958166599274,0.720231473445892,0.846153914928436,\n0.649999976158142,0.574937224388123,0.632389008998871,0.89529275894165,0.740150988101959,0.489543944597244,0.54209840297699,0.585827589035034,0.490893453359604,0.662932693958282,0.498560518026352,0.504462003707886,0.768023788928986,0.568614304065704,0.647481024265289,0.504329919815063,0.716663599014282,0.822241127490997,0.200000002980232,0.200000002980232,0.200000002980232,0.21500101685524,0.261308073997498,0.244109690189362,0.244453296065331,0.153650611639023,0.434145867824554,0.312636703252792,0.914587438106537,0.923531234264374,0.964551270008087,0.969183504581451,0.499596208333969,0.499518573284149,0.383198082447052,0.104722216725349,0.967589974403381,0.931951761245728,0.957806706428528,0.921492457389832,0.901055753231049,0.905746698379517,0.649999976158142,0.649999976158142,0.649999976158142,0.944011509418488,0.992870390415192,0.991427659988403,0.993892729282379,0.994505882263184,0.98496025800705,0.983531951904297,0.901892483234406,0.285406172275543,0.353163778781891,0.200000002980232,0.0540348961949348,0.806423962116241,0.870517492294312,0.90487414598465,0.874945402145386,0.952277839183807,0.974283814430237,0.961661517620087,0.927177667617798,0.949196338653564,0.940062880516052,0.649999976158142,0.649999976158142,0.649999976158142,0.886188805103302,0.755742967128754,0.745639085769653,0.973658859729767,0.967490673065186,0.307189017534256,0.961516320705414,0.75,0.75,0.906072795391083,0.953899383544922,0.953052282333374,0.944958209991455,0.884655654430389,0.963573634624481,0.817773759365082,0.990259230136871,0.980742156505585,0.984100639820099,0.969443380832672,0.97771281003952,0.992744565010071,0.890227973461151,0.934164881706238,0.975787281990051,0.979732811450958,0.991906225681305,0.972508788108826,0.719477832317352,0.990604877471924,0.868284523487091,0.924786448478699,0.810649394989014,0.49951246380806,0.44170954823494,0.405982732772827,0.49727800488472,0.200000002980232,0.200000002980232,0.200000002980232,0.952634513378143,0.200000002980232,0.27403461933136,0.649999976158142,0.38769394159317,0.383743822574615,\n0.23994854092598,0.382569253444672,0.664508998394012,0.649999976158142,0.649999976158142,0.515626490116119,0.100544266402721,0.0509672276675701,0.087710902094841,0.0689265504479408,0.0132357580587268,0.0673551708459854,0.934560120105743,0.929938912391663,0.939364671707153,0.9720698595047,0.294692665338516,0.121550291776657,0.318417549133301,0.00905121956020594,0.00918134674429893,0.0127136269584298,0.00864315219223499,0.00791239645332098,0.0114359743893147,0.0152849052101374,0.0093435849994421,0.00830323528498411,0.0142276557162404,0.0138462735339999,0.00945782754570246,0.00942206755280495,0.014098109677434,0.014433647505939,0.0178906451910734,0.0143724717199802,0.0173722356557846,0.00999974180012941,0.014885607175529,0.018461562693119,0.0190013404935598,0.0467968657612801,0.0458732806146145,0.030040280893445,0.0285561420023441,0.100000001490116,0.0229084882885218,0.0212979335337877,0.0210412256419659,0.200000002980232,0.200000002980232,0.300000011920929,0.300000011920929,0.0272503532469273,0.0286084562540054,0.0298874154686928,0.0449934229254723,0.0163005162030458,0.0198944453150034,0.0216402430087328,0.0210471544414759,0.022859338670969,0.100000001490116,0.280000001192093,0.25,0.100000001490116,0.200000002980232,0.100000001490116,0.200000002980232,0.150000005960464,0.100000001490116,0.200000002980232,0.0452159754931927,0.0238535013049841,0.0278255958110094,0.0225818119943142,0.0214288476854563,0.0191271770745516,0.0149979013949633,0.0175532065331936,0.0187588352710009,0.0202955156564713,0.018536027520895,0.0447154492139816,0.00276468903757632,0.00197926862165332,0.0182143114507198,0.0188962891697884,0.0188498459756374,0.0163978934288025,0.0165616180747747,0.0256021749228239,0.0200647842139006,0.25,0.25,0.280000001192093,0.280000001192093,0.0475268326699734,0.0186371058225632,0.300000011920929,0.0100746294483542,0.0147060882300138,0.00839911866933107,0.0143435792997479,0.0122731113806367,0.00548796262592077,0.0226557962596416,0.0203133597970009,0.019662719219923,0.0199346318840981,0.020324582234025,0.0183906629681587,\n0.0200679711997509,0.0244641546159983,0.0194248016923666,0.0148040950298309,0.0158901512622833,0.0168812870979309,0.0146031798794866,0.018282238394022,0.0178614798933268,0.0153546407818794,0.0164247564971447,0.00759732443839312,0.00682812184095383,0.0230845659971237,0.0228842049837112,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.00130664382595569,0.00277592497877777,0.00490613374859095,0.00331772165372968,0.00152155803516507,0.00266357441432774,0.0092479046434164,0.00556127540767193,0.00729139242321253,0.0100202336907387,0.00581458257511258,0.0200388133525848,0.0211897641420364,0.023265078663826,0.0219263006001711,0.0309158023446798,0.0220311246812344,0.032503891736269,0.0242764744907618,0.0222708638757467,0.0228765457868576,0.0218025259673595,0.0208405908197165,0.0202518124133348,0.100000001490116,0.100000001490116,0.100000001490116,0.200000002980232,0.200000002980232,0.25,0.25,0.280000001192093,0.280000001192093,0.300000011920929,0.300000011920929,0.150000005960464,0.150000005960464,0.200000002980232,0.200000002980232,0.018878472968936,0.0199749954044819,0.0287722535431385,0.150000005960464,0.150000005960464,0.00271546677686274,0.00256413081660867,0.150000005960464,0.300000011920929,0.21673309803009,0.300000011920929,0.280000001192093,0.25,0.200000002980232,0.200000002980232,0.00260717002674937,0.0190196018666029,0.018177967518568,0.280000001192093,0.25,0.0214217882603407,0.0231172982603312,0.200000002980232,0.200000002980232,0.300000011920929,0.150000005960464,0.200000002980232,0.0189244467765093,0.0192747078835964,0.0219515785574913,0.0287356525659561,0.0202676299959421,0.0340243764221668,0.100000001490116,0.0197208076715469,0.150000005960464,0.150000005960464,0.0182612538337708,0.100000001490116,0.150000005960464,0.100000001490116,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.150000005960464,0.0247486010193825,0.200000002980232,0.100000001490116,0.0153244733810425,0.0152284130454063,0.0495516546070576,0.0565993711352348,\n0.016888216137886,0.00252965185791254,0.200000002980232,0.0175220146775246,0.299232631921768,0.25,0.100000001490116,0.100000001490116,0.100000001490116,0.00133510527666658\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.703610227813238,-0.134747865534422,0.697693066516033,0,-0.691373621028306,-0.096955071047359,-0.715962418756415,0,0.164119304174336,-0.986125037071657,-0.0249425411674711,0,35.6837354126809,3.61653635564703,47.935408778235,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.703610240098373,-0.691373633099789,0.164119307039882,0,-0.134747884155574,-0.0969550844458285,-0.986125173346802,0,0.697693115008514,-0.71596246851869,-0.024942542901078,0,-7.84944240647482,59.3413889809175,-1.09440139796442,1\n\t\t} \n\t}\n\tDeformer: 135119376, \"SubDeformer::Cluster_L_Forearm\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *569 {\n\t\t\ta: 4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4097,4100,4101,4102,4103,4104,4105,4106,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4177,4178,4179,4181,4182,4183,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4206,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4241,4242,4243,4244,4245,4246,4247,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4271,4272,4273,4275,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4303,4304,4305,4306,4307,4308,4309,4310,4316,4317,4318,4319,4320,4321,4322,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4340,4341,4342,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,5849,5864,5868,5893,5894,5898,5922,5923,5926,5927,5936,5937,5941,5945,5960,5961,5962,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5983,5984,5985,5988,5989,5990,5991,5992,5993,5994,5995,5996,5998,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,\n6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6129,6130,6131,6132,6133,6134,6135,6137,6138,6139,6140,6141,6143,6144,6145,6146,6147,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6187,6188,6189,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6205,6206,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6232,6233,6234,6440,6441,6442,6443,6444,6445,6447,6448,6449,6460,6462,6463,6464,6467,6469,6492,6493,6494,6495,10539,10549,10551,10552,10555,10556,10557,10558,10559,10630,10875\n\t\t} \n\t\tWeights: *569 {\n\t\t\ta: 0.0130823627114296,0.0145733961835504,0.017686540260911,0.0165265779942274,0.0167959500104189,0.0174484252929688,0.016780024394393,0.0140524292364717,0.0157845802605152,0.011062566190958,0.0132460324093699,0.0114357797428966,0.0128355557098985,0.0119939977303147,0.0116653498262167,0.00951695907860994,0.00925766211003065,0.0104927280917764,0.00973798986524343,0.00984845124185085,0.00993507821112871,0.00975114479660988,0.00607633776962757,0.00599473621696234,0.0056743398308754,0.00550404144451022,0.0102502526715398,0.00793300196528435,0.00754921929910779,0.0102707156911492,0.0141946421936154,0.00958449020981789,0.00787202641367912,0.0113529870286584,0.00406387401744723,0.00311212101951241,0.00396739272400737,0.00514390412718058,0.00437091197818518,0.00351857556961477,0.00339764193631709,0.00385786732658744,0.0028420789167285,0.00624275812879205,0.0056178723461926,0.00572511414065957,0.00517163006588817,0.00433397479355335,0.00553302885964513,0.0072903516702354,0.00947430171072483,0.00743232667446136,0.00597157049924135,0.00983333308249712,0.0094017731025815,0.00638639880344272,0.00423615192994475,0.00463204644620419,0.0131842866539955,0.016205782070756,0.0168030690401793,0.0144315091893077,0.0155597217381001,0.0161190386861563,0.0124592166393995,0.0160823706537485,0.0127456905320287,0.0113515695556998,0.0123431896790862,0.00939201284199953,0.00981035921722651,0.011846162378788,0.0105248801410198,0.00992137007415295,0.00986271444708109,0.00993407983332872,0.00622597057372332,0.00636665616184473,0.00579370558261871,0.0106505611911416,0.0107622062787414,0.00796970538794994,0.00837728101760149,0.00980836246162653,0.0121828624978662,0.0142783168703318,0.0083105219528079,0.0117224548012018,0.00993642210960388,0.00767917418852448,0.00782968103885651,0.00963418465107679,0.010017391294241,0.00670335255563259,0.0124240284785628,0.0128281209617853,0.0104267252609134,0.00943842064589262,0.0117991222068667,0.0113033540546894,0.00881361775100231,0.010496262460947,0.0065448647364974,0.00950655899941921,0.00414708536118269,\n0.00531409168615937,0.0037915192078799,0.00361050292849541,0.00724903866648674,0.00917193572968245,0.0109936781227589,0.00282893585972488,0.00443767942488194,0.0038344138301909,0.00314834783785045,0.0100808590650558,0.0118633136153221,0.0118824616074562,0.00881960522383451,0.010578534565866,0.0101805999875069,0.00759252207353711,0.00988966319710016,0.00481296144425869,0.0045322859659791,0.0038556563667953,0.00742341438308358,0.00923402141779661,0.0108389323577285,0.0161522999405861,0.0171369854360819,0.0165906008332968,0.013085457496345,0.0101299583911896,0.0139119019731879,0.0115892337635159,0.00417448533698916,0.00503682112321258,0.00557324243709445,0.00721208564937115,0.00927688833326101,0.00580374430865049,0.0161867532879114,0.0157619155943394,0.0146748851984739,0.0115098869428039,0.0139557290822268,0.0118313496932387,0.00582014210522175,0.00960609689354897,0.00758995581418276,0.0119165414944291,0.00834765192121267,0.0101902317255735,0.00910148024559021,0.010863583534956,0.00955894403159618,0.010891298763454,0.00956323184072971,0.0128869153559208,0.0114246951416135,0.0122718652710319,0.0106279756873846,0.0111806727945805,0.00986453052610159,0.00981386378407478,0.00890371669083834,0.00823746528476477,0.00938957463949919,0.0100798653438687,0.0100390641018748,0.0116790756583214,0.0110674453899264,0.00995259359478951,0.00855241715908051,0.00950765889137983,0.0102941719815135,0.0102250250056386,0.0117573412135243,0.01140396296978,0.00521518662571907,0.00453681312501431,0.00546662602573633,0.00642735743895173,0.00689548952504992,0.00665472960099578,0.00734960194677114,0.00683766510337591,0.00571336830034852,0.00265343068167567,0.00448240898549557,0.010069171898067,0.00889439694583416,0.00931901391595602,0.0115090440958738,0.0130113819614053,0.00939598213881254,0.0112784979864955,0.0129523808136582,0.011606689542532,0.00683522317558527,0.00530915660783648,0.00553609151393175,0.00718199368566275,0.00632563466206193,0.00673306873068213,0.00695765623822808,0.00761112431064248,0.00759197911247611,0.00851711817085743,0.00801968108862638,\n0.00914121046662331,0.00810293573886156,0.00927212275564671,0.00706543633714318,0.00801382400095463,0.00976375490427017,0.0113250613212585,0.00917198788374662,0.0104699106886983,0.008320945315063,0.00925183948129416,0.00746653834357858,0.00805097725242376,0.00470049539580941,0.00601205229759216,0.00583647331222892,0.00677375914528966,0.00773503351956606,0.00837157387286425,0.00845489930361509,0.00722456257790327,0.0102738551795483,0.00940028857439756,0.00814017094671726,0.00690067606046796,0.00386490998789668,0.00445980951189995,0.00563889276236296,0.00669783353805542,0.00779449241235852,0.00851565226912498,0.00859024841338396,0.00727401813492179,0.00593474367633462,0.00519725400954485,0.0045314054004848,0.00405027437955141,0.00266629084944725,0.0022423192858696,0.00348280230537057,0.00426881341263652,0.00503883510828018,0.00546713080257177,0.00537728983908892,0.0044288095086813,0.0035017451737076,0.00562617788091302,0.0025928404647857,0.00231737154535949,0.0061970972456038,0.00331592443399131,0.00674485834315419,0.00590951694175601,0.00519637437537313,0.00445498526096344,0.004665806889534,0.0081846471875906,0.00666993763297796,0.00779372174292803,0.00913236383348703,0.00815228745341301,0.00982468761503696,0.011363198980689,0.0101974476128817,0.00896517001092434,0.0075426627881825,0.00640195840969682,0.00575173040851951,0.00700918631628156,0.00673683220520616,0.0317902453243732,0.0211220774799585,0.0194973219186068,0.01398088876158,0.0204283185303211,0.00319192162714899,0.0104818921536207,0.00730531290173531,0.00450129853561521,0.00591684225946665,0.00417169742286205,0.00356268719770014,0.0104690222069621,0.00509927375242114,0.00186102197039872,0.00145455589517951,0.001659722533077,0.00481847347691655,0.00597766879945993,0.00810802355408669,0.00285123847424984,0.00348622654564679,0.0038478837814182,0.00459734443575144,0.00294839451089501,0.00143713282886893,0.00252975267358124,0.00263041467405856,0.00343446247279644,0.0047440086491406,0.00173946388531476,0.00166033732239157,0.00497205508872867,0.00735520524904132,\n0.00511531252413988,0.00298283714801073,0.0026974487118423,0.0096267145127058,0.00457618525251746,0.00590613065287471,0.00405954755842686,0.00201193033717573,0.00443566776812077,0.00177055958192796,0.00127172539941967,0.00133948377333581,0.00157687079627067,0.00116036820691079,0.00138072378467768,0.00185424415394664,0.00173488212749362,0.00211239885538816,0.110307686030865,0.270310074090958,0.180308550596237,0.0525071881711483,0.0310453362762928,0.0122003210708499,0.0146832931786776,0.0376727655529976,0.0653965249657631,0.0889726653695107,0.0620435625314713,0.100000001490116,0.0414770133793354,0.0541006587445736,0.019134471192956,0.05965656042099,0.0883200764656067,0.0621042251586914,0.0222545862197876,0.0621042251586914,0.124208390712738,0.0647295713424683,0.0228978954255581,0.118719235062599,0.215932756662369,0.219186872243881,0.143957927823067,0.199006676673889,0.328733921051025,0.359697282314301,0.0854365229606628,0.100000001490116,0.561005890369415,0.100000001490116,0.100000001490116,0.548947274684906,0.100000001490116,0.100000001490116,0.492050230503082,0.100000001490116,0.352902323007584,0.100000001490116,0.490042060613632,0.099943220615387,0.111167907714844,0.766309976577759,0.753124237060547,0.901639759540558,0.788366317749023,0.910683929920197,0.895671486854553,0.778757274150848,0.895110487937927,0.888791561126709,0.73319685459137,0.947233974933624,0.955398559570313,0.902906775474548,0.955532312393188,0.900637269020081,0.896606624126434,0.953525960445404,0.936966776847839,0.888297438621521,0.881877779960632,0.928057014942169,0.988516747951508,0.977068960666656,0.928149878978729,0.945951581001282,0.959586977958679,0.95492297410965,0.983144521713257,0.965573668479919,0.971107244491577,0.96269965171814,0.965506434440613,0.952936172485352,0.973325133323669,0.987694561481476,0.976295530796051,0.993065416812897,0.995336413383484,0.98855584859848,0.991537272930145,0.980835735797882,0.96312689781189,0.967631757259369,0.859552204608917,0.924339771270752,0.934046864509583,0.924542844295502,0.932335555553436,0.829179406166077,\n0.84100079536438,0.670541524887085,0.984790861606598,0.807817339897156,0.832724750041962,0.961030125617981,0.975924670696259,0.895998060703278,0.860245585441589,0.953859925270081,0.750764131546021,0.750919044017792,0.833233892917633,0.863375008106232,0.449999988079071,0.449999988079071,0.859209895133972,0.065053902566433,0.0300639923661947,0.0115915685892105,0.499764204025269,0.49950385093689,0.601146101951599,0.882238209247589,0.915871739387512,0.0243195462971926,0.0466393828392029,0.0380212739109993,0.0137503705918789,0.0791014283895493,0.195594787597656,0.199006676673889,0.186920404434204,0.0388490706682205,0.0013784485636279,0.00267337798140943,0.0028356306720525,0.0120388474315405,0.0138825234025717,0.0989195108413696,0.690626382827759,0.625692307949066,0.662807583808899,0.935847699642181,0.00865662377327681,0.0046409317292273,0.00987609662115574,0.0168349966406822,0.0235452111810446,0.0170978829264641,0.020403016358614,0.0229209307581186,0.0423493310809135,0.0523267090320587,0.296992301940918,0.349999994039536,0.449999988079071,0.103338062763214,0.227065414190292,0.198603168129921,0.0149681465700269,0.0262108184397221,0.94562828540802,0.972592830657959,0.965178906917572,0.936788022518158,0.817106544971466,0.817820966243744,0.982129037380219,0.753523230552673,0.449999988079071,0.898417294025421,0.00714429467916489,0.0214342530816793,0.00914276763796806,0.00893051736056805,0.0117370849475265,0.00181147246621549,0.00124722113832831,0.00145479803904891,0.00118767411913723,0.00261793099343777,0.00285224639810622,0.00317385280504823,0.00173605617601424,0.00373418163508177,0.00669426564127207,0.00210592360235751,0.00411897618323565,0.020949462428689,0.165792167186737,0.00323831802234054,0.119074746966362,0.0746522545814514,0.172979086637497,0.499562233686447,0.601501882076263,0.588120579719543,0.500665545463562,0.715467512607574,0.754183232784271,0.689664840698242,0.100000001490116,0.754693031311035,0.791724503040314,0.945742607116699,0.905741691589355,0.97682249546051,0.830595850944519,0.719328463077545,0.892614543437958,\n0.958270907402039,0.577101588249207,0.606267750263214,0.610401690006256,0.755581021308899,0.611320614814758,0.761284351348877,0.100000001490116,0.915168702602386,0.912965893745422,0.836812496185303,0.285337090492249,0.198688685894012,0.922615230083466,0.00135110120754689,0.896957993507385,0.0293768588453531,0.0304955970495939,0.0248932670801878,0.0114057706668973,0.00152966915629804,0.00443700607866049,0.00404184451326728,0.00181462150067091,0.00150442542508245,0.00210763537324965,0.0020971957128495,0.00152598856948316,0.00385429011657834,0.00210404885001481,0.00414984626695514\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.662226976029194,0.128399379241995,0.738220153937706,0,-0.700126772726758,-0.245002464392823,0.670668514419641,0,0.266979179766695,-0.960982491477815,-0.072351400707657,0,23.5674058806897,8.68539591712662,-45.5581716402116,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.662227010399801,-0.700126809064423,0.266979193623327,0,0.128399384753513,-0.245002474909506,-0.960982532727804,0,0.738220170844411,0.670668529779279,-0.0723514023646477,0,16.9097890202485,49.1825481658111,-1.24169085897477,1\n\t\t} \n\t}\n\tDeformer: 135107696, \"SubDeformer::Cluster_R_Forearm\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *460 {\n\t\t\ta: 5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5169,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5199,5206,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5226,5228,5232,5233,5234,5235,5236,5237,5243,5244,5245,5246,5247,5250,5251,5252,5253,5254,5255,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5419,5432,5433,5462,5466,5467,5478,5486,5489,5507,5508,5514,5516,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5560,5561,5562,5563,5564,5565,5566,5567,5568,5570,5571,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5684,5685,5686,5687,5688,\n5689,5690,5691,5692,5693,5694,5695,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5735,5736,5737,5738,10097,10107,10108,10109,10110,10113,10115,10117,10143,10190,10447,10458\n\t\t} \n\t\tWeights: *460 {\n\t\t\ta: 0.9543816447258,0.961428701877594,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.96088171005249,0.965084493160248,0.850000023841858,0.985790371894836,0.850000023841858,0.972073614597321,0.97113448381424,0.850000023841858,0.850000023841858,0.973477780818939,0.850000023841858,0.972114026546478,0.991701662540436,0.850000023841858,0.986414194107056,0.850000023841858,0.850000023841858,0.97951078414917,0.850000023841858,0.969846367835999,0.97387957572937,0.972824931144714,0.956462383270264,0.956553280353546,0.992519795894623,0.990605115890503,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.978140294551849,0.988279283046722,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.963351666927338,0.96820056438446,0.978660225868225,0.850000023841858,0.850000023841858,0.850000023841858,0.978830456733704,0.973697781562805,0.850000023841858,0.984161257743835,0.992482841014862,0.97064870595932,0.969254374504089,0.97099906206131,0.968072533607483,0.982111215591431,0.970394670963287,0.9639692902565,0.953298568725586,0.951214969158173,0.94989001750946,0.936055898666382,0.933234095573425,0.945355355739594,0.949054658412933,0.958366990089417,0.959439158439636,0.960266590118408,0.962059617042542,0.959242284297943,0.965051889419556,0.971901178359985,0.979406654834747,0.985738217830658,0.985798180103302,0.925106704235077,0.893441200256348,0.878459811210632,0.854300141334534,0.853812396526337,0.845865249633789,0.832314372062683,0.834818005561829,0.836949825286865,0.842757284641266,0.859171569347382,0.85945862531662,0.859480738639832,0.852116346359253,0.855983078479767,0.868499100208282,0.885544180870056,0.907685220241547,0.930085897445679,0.93387758731842,0.940946340560913,0.947351574897766,0.937787890434265,0.923088073730469,0.896022856235504,0.878305971622467,0.861979186534882,0.856114983558655,0.866126954555511,0.866953492164612,0.863919258117676,0.858853697776794,0.852863013744354,\n0.871902525424957,0.879134178161621,0.891600370407104,0.871837258338928,0.897607088088989,0.918965518474579,0.836899697780609,0.838649094104767,0.821665406227112,0.818935096263886,0.934488832950592,0.936518609523773,0.94615626335144,0.947924792766571,0.950361132621765,0.841738760471344,0.94098174571991,0.897000789642334,0.949004292488098,0.908093512058258,0.906121969223022,0.97584456205368,0.981377363204956,0.981299638748169,0.91995245218277,0.916882395744324,0.911943197250366,0.915495872497559,0.917001128196716,0.908531725406647,0.984966635704041,0.984858632087708,0.991871953010559,0.991727232933044,0.521788418292999,0.5,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.523450016975403,0.5,0.850000023841858,0.5,0.5,0.5,0.5,0.850000023841858,0.850000023841858,0.500762045383453,0.850000023841858,0.501719176769257,0.850000023841858,0.507238328456879,0.850000023841858,0.509424269199371,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.56866580247879,0.583622395992279,0.797594547271729,0.765617549419403,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.688585638999939,0.715473115444183,0.55484527349472,0.579463958740234,0.647413372993469,0.698794841766357,0.710158050060272,0.679414689540863,0.624432146549225,0.572763860225677,0.564231753349304,0.595975279808044,0.615636348724365,0.618266224861145,0.635786294937134,0.655548989772797,0.66695636510849,0.662471175193787,0.643863558769226,0.626260459423065,0.600856244564056,0.603469014167786,0.620764255523682,0.640294432640076,0.65158623456955,0.64712917804718,0.628702044487,0.611316680908203,0.607571363449097,0.609140694141388,0.619702994823456,0.631768584251404,\n0.638790547847748,0.63597971200943,0.624578416347504,0.613943815231323,0.658988177776337,0.627193629741669,0.0218165908008814,0.0352623462677002,0.026454109698534,0.0141577869653702,0.0133350491523743,0.00319730537012219,0.0023472539614886,0.006200619507581,0.00615918589755893,0.00416851649060845,0.0035773750860244,0.00362570304423571,0.0050879311747849,0.00134382385294884,0.00219823117367923,0.00314766634255648,0.00275600934401155,0.00179083226248622,0.00145914521999657,0.00168375414796174,0.00128154177218676,0.00476005533710122,0.00583797786384821,0.00796274747699499,0.0028400057926774,0.00349170388653874,0.00393921649083495,0.00469232723116875,0.00309628201648593,0.00155989686027169,0.00251230737194419,0.00267865019850433,0.0034107556566596,0.00453887553885579,0.00168139557354152,0.00159857992548496,0.00477183097973466,0.00724268518388271,0.00510938372462988,0.00212487136013806,0.00301838270388544,0.00266955746337771,0.00942323636263609,0.00439173029735684,0.00573972193524241,0.00425780797377229,0.00218753656372428,0.00465337699279189,0.00195707939565182,0.00140292302239686,0.00148765055928379,0.00176502706017345,0.00127081223763525,0.00102934951428324,0.00145317963324487,0.00194567546714097,0.00177611515391618,0.00231837830506265,0.111892938613892,0.276097327470779,0.182606264948845,0.051285233348608,0.0299078412353992,0.0116401230916381,0.0140904020518065,0.0365951769053936,0.0643474012613297,0.0880153402686119,0.0602120384573936,0.0534202642738819,0.0403952412307262,0.053735539317131,0.0189040284603834,0.0706033632159233,0.0886967703700066,0.042857114225626,0.0307560451328754,0.0531281605362892,0.0931760966777802,0.0337394736707211,0.0239218175411224,0.123133383691311,0.295537739992142,0.278025776147842,0.147490873932838,0.349999994039536,0.424458980560303,0.367260605096817,0.103883504867554,0.259470343589783,0.507120609283447,0.45574676990509,0.411120414733887,0.504086971282959,0.33675828576088,0.501042604446411,0.495202124118805,0.231570228934288,0.429100096225739,0.351507425308228,0.493275076150894,0.280151754617691,\n0.175297662615776,0.800000011920929,0.800000011920929,0.800000011920929,0.777994394302368,0.733412683010101,0.750932455062866,0.751800656318665,0.840702414512634,0.564836502075195,0.684945344924927,0.0456191003322601,0.0653706043958664,0.0292139910161495,0.0110846934840083,0.499919772148132,0.499518573284149,0.616083443164825,0.89096063375473,0.0247959773987532,0.0469798818230629,0.0385838113725185,0.0137804802507162,0.0535802431404591,0.0805884152650833,0.349999994039536,0.349999994039536,0.349999994039536,0.0399816893041134,0.00100753747392446,0.00152242206968367,0.00296934437938035,0.00323700485751033,0.0138339176774025,0.0156798865646124,0.0972830429673195,0.713951766490936,0.646363317966461,0.800000011920929,0.943829536437988,0.00899034179747105,0.00499350856989622,0.01054213847965,0.0174784269183874,0.0253205075860024,0.0185488481074572,0.0213725566864014,0.0238320827484131,0.0466594398021698,0.0571891218423843,0.349999994039536,0.349999994039536,0.349999994039536,0.108780957758427,0.242685750126839,0.253124505281448,0.016670374199748,0.0297163967043161,0.690966308116913,0.00730973202735186,0.0209887269884348,0.0087518123909831,0.00851652212440968,0.0112668741494417,0.00201677973382175,0.00141855166293681,0.00159147719386965,0.00131093349773437,0.00273123872466385,0.00297377584502101,0.00332834711298347,0.0019080612109974,0.00410206848755479,0.0073396610096097,0.00110366602893919,0.00239244638942182,0.00473452545702457,0.0217749625444412,0.280029624700546,0.00338610471226275,0.128973752260208,0.0733335092663765,0.187143608927727,0.49951246380806,0.555980682373047,0.592231094837189,0.502066969871521,0.800000011920929,0.800000011920929,0.800000011920929,0.0454950891435146,0.800000011920929,0.722404003143311,0.349999994039536,0.610655307769775,0.614362716674805,0.756966769695282,0.615937829017639,0.333031117916107,0.349999994039536,0.349999994039536,0.00139323866460472,0.0287067573517561,0.0301683470606804,0.0249928496778011,0.011644403450191,0.0015737182693556,0.00375572172924876,0.0017695747083053,0.00410313904285431,\n0.00949179194867611,0.00190033111721277,0.00247855274938047,0.00380051089450717,0.00995506718754768,0.00198078528046608,0.00330763752572238,0.00164033786859363\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.662814698738924,-0.271847628397838,0.697693006595292,0,-0.658330136901758,-0.232377138971596,-0.715962487814441,0,0.356760627249285,-0.933862798146209,-0.0249425019495579,0,21.3737221209514,8.02276245628242,47.9354098901974,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.662814672774643,-0.658330111113149,0.356760613273986,0,-0.271847630152989,-0.232377140471911,-0.933862804175582,0,0.697693045796624,-0.71596252804228,-0.0249425033510038,0,-17.0964165332061,50.2552287047925,1.06248635465806,1\n\t\t} \n\t}\n\tDeformer: 135113536, \"SubDeformer::Cluster_L_Hand\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *286 {\n\t\t\ta: 6019,6032,6038,6041,6046,6048,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6135,6136,6137,6139,6143,6158,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6188,6217,6218,6220,6221,6222,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6260,6271,6272,6274,6275,6276,6277,6278,6281,6282,6300,6301,6302,6303,6304,6307,6308,6309,6326,6327,6329,6330,6331,6332,6333,6335,6336,6337,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6367,6368,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6442,6443,6445,6446,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6464,6465,6466,6468,6469,6471,6472,6473,6475,6476,6478,6479,6481,6482,6483\n\t\t} \n\t\tWeights: *286 {\n\t\t\ta: 0.00130479945801198,0.00115911138709635,0.00175872875843197,0.00271619227714837,0.00106285652145743,0.0015120297903195,0.00488520367071033,0.00525947473943233,0.0152240814641118,0.0058322437107563,0.0144255012273788,0.00942893140017986,0.00434530852362514,0.0114153744652867,0.0101915383711457,0.00324962823651731,0.0111104818060994,0.0106603158637881,0.00879672635346651,0.0153704714030027,0.0104524334892631,0.0109532186761498,0.0155204143375158,0.0213428996503353,0.00706385681405663,0.0102087017148733,0.0292237475514412,0.00535075040534139,0.0103372754529119,0.00476671941578388,0.00251900753937662,0.0204347223043442,0.0258889235556126,0.0137172415852547,0.0270151142030954,0.0225172936916351,0.0296244621276855,0.0124627286568284,0.0151561014354229,0.0168448686599731,0.00965970754623413,0.00927151646465063,0.00500783044844866,0.00339167006313801,0.00459962524473667,0.0060916724614799,0.0131798479706049,0.0255049075931311,0.0152906086295843,0.110847167670727,0.0640205889940262,0.0492582283914089,0.0529643408954144,0.0609882585704327,0.163887873291969,0.151392802596092,0.314569145441055,0.0119036193937063,0.181643426418304,0.155784979462624,0.0354310423135757,0.0217668879777193,0.0815117955207825,0.106855973601341,0.0321793593466282,0.00307321944274008,0.00231335498392582,0.00378830498084426,0.0047411723062396,0.111192271113396,0.796268939971924,0.776784062385559,0.978859066963196,0.98049396276474,0.972140312194824,0.974617958068848,0.86642324924469,0.79427707195282,0.951687097549438,0.844824910163879,0.833017945289612,0.00297021493315697,0.981817245483398,0.0783289968967438,0.00117522315122187,0.00118728959932923,0.00153656990732998,0.0214405823498964,0.0220679994672537,0.0280335266143084,0.0257828701287508,0.175093457102776,0.175840079784393,0.014129888266325,0.236173659563065,0.964483380317688,0.966105341911316,0.00487766275182366,0.00121384067460895,0.00104836956597865,0.00261064269579947,0.00527278799563646,0.0016196146607399,0.191565632820129,0.00648218113929033,0.0210572946816683,0.00848367344588041,\n0.0187208727002144,0.163910433650017,0.959246575832367,0.969912648200989,0.00222233613021672,0.00535696605220437,0.0144689073786139,0.980347037315369,0.970510244369507,0.985016524791718,0.977311074733734,0.979323983192444,0.979390799999237,0.985957503318787,0.983055531978607,0.987015068531036,0.995343744754791,0.972897946834564,0.484119653701782,0.470623850822449,0.491619795560837,0.994537591934204,0.969956040382385,0.218082129955292,0.35081872344017,0.00539582036435604,0.34410172700882,0.00174769177101552,0.020339347422123,0.00183528068009764,0.00886431150138378,0.0222514942288399,0.0158319640904665,0.320180326700211,0.04841323569417,0.397936344146729,0.309453368186951,0.206016972661018,0.347281217575073,0.0044247810728848,0.191069826483727,0.0211531389504671,0.459793508052826,0.204510793089867,0.157113015651703,0.370152801275253,0.00862766150385141,0.00548374000936747,0.431275308132172,0.31342825293541,0.472878903150558,0.270284116268158,0.358282715082169,0.203067094087601,0.283760100603104,0.00640271510928869,0.00861588399857283,0.00290981493890285,0.0124844554811716,0.412148624658585,0.0235857348889112,0.43615585565567,0.494468510150909,0.492149859666824,0.583465158939362,0.614591658115387,0.47902324795723,0.0368059240281582,0.179605558514595,0.093951515853405,0.0709963366389275,0.528760671615601,0.00757221970707178,0.00689148018136621,0.00146077561657876,0.00115335988812149,0.00185912323649973,0.00343802105635405,0.00929137691855431,0.00599377509206533,0.0103735150769353,0.0123039186000824,0.00861450098454952,0.0111370049417019,0.00242832745425403,0.00318639865145087,0.0104857282713056,0.00409229006618261,0.00196978286840022,0.00119663344230503,0.00250004953704774,0.00289106229320169,0.00217845221050084,0.00413126405328512,0.0133866397663951,0.0123976143077016,0.0206668935716152,0.0215567238628864,0.0301417876034975,0.0713586881756783,0.560532927513123,0.603163719177246,0.804462194442749,0.766411006450653,0.804961740970612,0.65153706073761,0.576698124408722,0.960165858268738,0.364009708166122,0.789578795433044,\n0.732573091983795,0.514938175678253,0.972435057163239,0.954573690891266,0.965797305107117,0.983198702335358,0.943976640701294,0.928566694259644,0.987579226493835,0.973949670791626,0.983637511730194,0.969260632991791,0.390069872140884,0.995344936847687,0.41723170876503,0.504042029380798,0.701698005199432,0.0107290036976337,0.00334366434253752,0.00361302401870489,0.453608155250549,0.400738775730133,0.471676975488663,0.800864040851593,0.939786970615387,0.42675507068634,0.605584919452667,0.790349185466766,0.525061130523682,0.883583009243011,0.923232853412628,0.904953896999359,0.86821836233139,0.943565130233765,0.911553740501404,0.00109791976865381,0.00112204707693309,0.00190161785576493,0.0025254930369556,0.882194042205811,0.0070715737529099,0.00892249215394259,0.927492499351501,0.957062900066376,0.887509346008301,0.936216056346893,0.948306977748871,0.522060811519623,0.758114814758301,0.863632440567017,0.691744744777679,0.269960701465607,0.157683476805687,0.972856402397156,0.0662615373730659,0.951834917068481,0.634501338005066,0.04736552760005,0.00515583343803883,0.318909585475922,0.400039374828339,0.44497874379158,0.412904262542725,0.422368437051773,0.36232003569603,0.435642629861832,0.115776337683201,0.112991780042648,0.519146800041199\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.525245239000652,-0.790238300444755,0.31565934973444,0,-0.819456473838864,-0.569703518321511,-0.0626812335023224,0,0.229365355566028,-0.22574608595525,-0.946799976133382,0,21.0667191574115,43.1016445023767,-3.43213608283347,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.525245270545199,-0.819456523052794,0.229365369340976,0,-0.790238327627501,-0.569703537918265,-0.2257460937205,0,0.315659363334839,-0.0626812362029864,-0.946800016926909,0,24.0787627570046,41.6032892634726,1.64850555767672,1\n\t\t} \n\t}\n\tDeformer: 135106528, \"SubDeformer::Cluster_R_Hand\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *376 {\n\t\t\ta: 5016,5017,5018,5019,5022,5024,5027,5028,5030,5033,5035,5036,5038,5046,5047,5048,5049,5050,5051,5054,5055,5056,5057,5058,5059,5063,5064,5065,5068,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5587,5591,5594,5604,5610,5611,5612,5613,5618,5620,5621,5626,5627,5628,5629,5630,5632,5633,5640,5642,5645,5646,5661,5680,5709,5710,5717,5719,5720,5721,5722,5723,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6959,6963,6974,6975,6977,6978,6979,6980,6981,6984,6985,7003,7004,7005,7006,7007,7010,7011,7029,7030,7032,7033,7034,7035,7036,7038,7039,7040,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064,7065,7066,7067,7070,7071,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7159,7160,7161,7163,7164,7166,7167,7169,7170,7171,7172,7173,7174\n\t\t} \n\t\tWeights: *376 {\n\t\t\ta: 0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.478211551904678,1,1,1,1,1,1,0.5,1,1,1,1,1,1,1,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.476549983024597,1,1,1,1,1,1,0.5,1,1,1,1,1,1,0.150000005960464,1,1,1,0.5,0.5,0.5,0.5,0.150000005960464,0.150000005960464,0.499237954616547,0.150000005960464,0.498280823230743,0.150000005960464,0.492761671543121,0.150000005960464,0.490575730800629,0.150000005960464,0.150000005960464,1,0.150000005960464,1,0.150000005960464,1,1,1,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,1,1,1,1,1,0.43133419752121,0.416377604007721,0.202405482530594,0.234382465481758,0.150000005960464,1,1,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,1,1,1,1,0.311414361000061,0.284526914358139,0.445154696702957,0.420536041259766,0.352586656808853,0.30120512843132,0.289841949939728,0.320585310459137,0.375567853450775,0.427236169576645,0.435768216848373,0.404024720191956,0.384363621473312,0.381733804941177,0.364213705062866,0.344451010227203,0.33304363489151,0.337528795003891,0.356136411428452,0.373739540576935,0.399143755435944,0.396531015634537,0.379235744476318,0.359705597162247,0.348413735628128,0.35287082195282,0.371297925710678,0.388683319091797,0.392428636550903,0.390859305858612,\n0.380297005176544,0.368231445550919,0.361209481954575,0.364020258188248,0.375421583652496,0.386056154966354,0.341011792421341,0.372806400060654,1,1,1,0.00116238882765174,0.00126314430963248,0.00127484649419785,0.00115499168168753,0.002157126320526,0.00122782762628049,0.00155618181452155,0.00316519476473331,0.00129367306362838,0.00159544369671494,0.00123375444673002,0.00481545180082321,0.00362198776565492,0.00342102046124637,0.0025759288109839,0.00383124360814691,0.00162800203543156,0.00126475747674704,0.00289244158193469,0.00115937925875187,0.00149133347440511,0.0011821809457615,0.00141481403261423,0.00124221364967525,0.00153389351908118,0.00119169999379665,0.00243614916689694,0.00110688724089414,0.00127081596292555,0.00211558281444013,0.00100069667678326,0.0010915391612798,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.980131089687347,0.972969591617584,0.984836518764496,0.979745507240295,0.976824939250946,0.975857794284821,0.982909977436066,0.980634093284607,0.989108204841614,0.995466649532318,0.979120552539825,0.460078805685043,0.459079802036285,0.480023443698883,0.992386698722839,0.975788593292236,0.138774245977402,0.343353152275085,0.00259447447024286,0.276375085115433,0.0248107090592384,0.0122508257627487,0.025913767516613,0.014011156745255,0.277671813964844,0.0515360981225967,0.380510330200195,0.249686777591705,0.148735642433167,0.335018038749695,0.00630574533715844,0.173127308487892,0.0223309826105833,0.442807972431183,0.139312252402306,0.139563262462616,0.357817381620407,0.011000263504684,0.413820147514343,0.269777983427048,0.461716413497925,0.253329813480377,0.356669843196869,0.186188355088234,0.220778793096542,0.00349638611078262,0.0110432421788573,0.0015514426631853,0.00884688831865788,0.382615059614182,0.021647721529007,0.416930913925171,0.494424849748611,0.490876406431198,0.62108588218689,0.640656173229218,0.47115883231163,0.0474152453243732,0.260224372148514,0.133849367499352,0.0852451249957085,0.555279970169067,0.00700232526287436,0.010713710449636,0.00243271933868527,0.00105389696545899,0.0027286084368825,0.00499552441760898,\n0.0102303149178624,0.00594911677762866,0.0118187936022878,0.0127267623320222,0.00834109634160995,0.0117082539945841,0.00214929180219769,0.00271061388775706,0.0104626463726163,0.00442534405738115,0.00153978925663978,0.00266948714852333,0.00231324881315231,0.00142847280949354,0.00443828664720058,0.0104610789567232,0.00884981267154217,0.022325336933136,0.0158318430185318,0.0256853923201561,0.0783745720982552,0.57348096370697,0.621407747268677,0.828966498374939,0.774004817008972,0.819439351558685,0.668650686740875,0.582747161388397,0.966136991977692,0.334902942180634,0.80157071352005,0.726243376731873,0.515989422798157,0.967205703258514,0.947406470775604,0.958869814872742,0.978822588920593,0.934976994991302,0.91591876745224,0.981829702854156,0.968005239963531,0.977376699447632,0.962073385715485,0.376457810401917,0.992758095264435,0.402833461761475,0.492891848087311,0.673506021499634,0.0103504024446011,0.00493862433359027,0.447454303503037,0.384990841150284,0.465120375156403,0.800574660301209,0.931973874568939,0.408383995294571,0.558285415172577,0.778715252876282,0.581696271896362,0.878262996673584,0.91571843624115,0.89141857624054,0.856104969978333,1,0.901411950588226,1,0.918534278869629,1,0.874900579452515,0.928177952766418,0.940730452537537,0.504734337329865,0.806382894515991,0.88244241476059,0.68834376335144,0.284145832061768,1,1,0.653447806835175,0.0394690781831741,0.264194279909134,0.358842074871063,0.421661764383316,0.382513344287872,0.406745463609695,0.338808655738831,0.411881446838379,0.121384337544441,0.155007690191269,0.524047017097473,1,1,1\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.539910064473397,0.715295240266879,0.443677536411028,0,-0.785857646383378,-0.617193463603956,0.0387289250314666,0,0.301537519568316,-0.327757234066569,0.895349240611154,0,19.3032950598201,45.5941437919841,4.68926169427988,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.539910067817437,-0.785857651250743,0.301537521435949,0,0.715295342735177,-0.617193552018866,-0.327757281018826,0,0.443677559210366,0.0387289270216372,0.895349286620627,0,-24.2717555485735,43.1284436014007,4.92461773900622,1\n\t\t} \n\t}\n\tDeformer: 135108864, \"SubDeformer::Cluster_L_Thumb1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *203 {\n\t\t\ta: 6041,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6135,6136,6137,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6188,6220,6221,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6250,6353,6355,6356,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6403,6404,6405,6406,6407,6408,6409,6410,6413,6419,6420,6425,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6445,6446,6448,6449,6450,6451,6452,6453,6454,6456,6457,6458,6459,6460,6461,6464,6465,6466,6468,6469,6481,6482,6483\n\t\t} \n\t\tWeights: *203 {\n\t\t\ta: 0.00159759109374136,0.00247123767621815,0.00295475963503122,0.0077313999645412,0.00347915571182966,0.00788113940507174,0.00438647763803601,0.00198627333156765,0.00456920033320785,0.00394627405330539,0.00149479776155204,0.00498084956780076,0.0045593879185617,0.00389673910103738,0.0053889025002718,0.00434868596494198,0.00466193072497845,0.00575977610424161,0.00650691241025925,0.00277097732760012,0.0038960506208241,0.00847896747291088,0.00217573903501034,0.00471446616575122,0.00265942816622555,0.00134018436074257,0.00880127213895321,0.0104272356256843,0.0025074842851609,0.00591300847008824,0.00400860561057925,0.00504888221621513,0.00428155763074756,0.00490744644775987,0.00415540672838688,0.00185257231350988,0.0034409835934639,0.00126996927428991,0.00180447299499065,0.00182313250843436,0.00459778308868408,0.00878611020743847,0.00689603015780449,0.0274771600961685,0.0106862084940076,0.0132547691464424,0.0176012106239796,0.00608202582225204,0.00622645253315568,0.00652747694402933,0.0127935614436865,0.002189856255427,0.00902560912072659,0.00980143714696169,0.00303600518964231,0.00200605415739119,0.0202941447496414,0.0301873274147511,0.0108516663312912,0.00138832733500749,0.00105692853685468,0.00181000796146691,0.00204267911612988,0.027459803968668,0.194376647472382,0.211311653256416,0.0143799241632223,0.0139722237363458,0.0235288999974728,0.0229588188230991,0.128103569149971,0.197381421923637,0.0392584875226021,0.141111671924591,0.154612764716148,0.00147584686055779,0.014051241800189,0.00496605504304171,0.0069593284279108,0.0040521421469748,0.00478092953562737,0.00771074322983623,0.00695881806313992,0.00556631200015545,0.00246958923526108,0.00889166165143251,0.022413456812501,0.0212120581418276,0.00200483039952815,0.00163757242262363,0.00320822768844664,0.0478605479001999,0.00297751650214195,0.00626803236082196,0.00324841495603323,0.00309346639551222,0.00481143221259117,0.0272986982017756,0.0201074331998825,0.00103253370616585,0.00216887542046607,0.00447408715263009,0.0121217016130686,0.0195227228105068,\n0.00604483531787992,0.0104366512969136,0.0123603446409106,0.0124463373795152,0.00555362459272146,0.00640094606205821,0.015989737585187,0.00246398895978928,0.0972976014018059,0.0578067973256111,0.465059280395508,0.380723357200623,0.422929733991623,0.458774000406265,0.092535063624382,0.274851739406586,0.232820615172386,0.00305847125127912,0.00748487003147602,0.0182876884937286,0.00735447648912668,0.00302722817286849,0.0059708533808589,0.0140878790989518,0.0213838182389736,0.0202675182372332,0.0249171163886786,0.0320472456514835,0.0313042849302292,0.0334601327776909,0.013205399736762,0.0161251649260521,0.0353358276188374,0.0189561918377876,0.0175694078207016,0.0115405488759279,0.0251711886376143,0.033161573112011,0.0268362518399954,0.0510043613612652,0.426536828279495,0.349578112363815,0.436885267496109,0.484621107578278,0.478504449129105,0.492120414972305,0.424962937831879,0.391250789165497,0.19102568924427,0.228269383311272,0.191427558660507,0.345326334238052,0.418538182973862,0.0294552650302649,0.0147695094347,0.261895328760147,0.481220096349716,0.0170786399394274,0.0281957481056452,0.0150331221520901,0.00732234213501215,0.0262191146612167,0.0131651647388935,0.00237191957421601,0.00544905196875334,0.00206797500140965,0.0344606004655361,0.00109131261706352,0.198616206645966,0.44857582449913,0.0926235690712929,0.0629098638892174,0.0645485669374466,0.0908042192459106,0.0431784391403198,0.0665719956159592,0.00115764292422682,0.112029992043972,0.00399026228114963,0.00503641506657004,0.0523641631007195,0.0312329083681107,0.063860610127449,0.0429957583546638,0.0335627309978008,0.19743774831295,0.114430151879787,0.0259818006306887,0.463000237941742,0.00479828519746661,0.0177750047296286,0.00974856596440077,0.0449162684381008,0.35066893696785,0.463127940893173,0.0020702350884676,0.497311651706696,0.503731489181519,0.457812607288361\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.241495099703434,0.748823868440869,0.617205703028192,0,-0.623205875017562,-0.607212304548738,0.492856574902623,0,0.743837685515158,-0.26562378413437,0.613310235141848,0,28.1335141022105,7.31972621211067,-36.6074359315937,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.241495112205703,-0.623205907281104,0.743837724023843,0,0.748823895817871,-0.607212326748421,-0.265623793845576,0,0.61720574758735,0.492856610484397,0.613310279419772,0,23.9072401077965,40.019816957261,3.46924110783787,1\n\t\t} \n\t}\n\tDeformer: 135110032, \"SubDeformer::Cluster_L_Index1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *111 {\n\t\t\ta: 6117,6118,6119,6120,6121,6123,6124,6125,6126,6127,6136,6185,6186,6230,6231,6235,6236,6238,6239,6240,6241,6242,6243,6245,6250,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6362,6394,6395,6396,6397,6398,6399,6400,6401,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6415,6418,6419,6420,6421,6422,6423,6424,6425,6427,6428,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6446,6450,6451,6452,6453,6454,6455,6456,6457,6458,6461,6466,6478,6479,6480,6483\n\t\t} \n\t\tWeights: *111 {\n\t\t\ta: 0.00371436937712133,0.00494377221912146,0.00263386126607656,0.00218590977601707,0.00185694906394929,0.00206264993175864,0.00298752659000456,0.00426755286753178,0.00718114338815212,0.00587730761617422,0.00168352981563658,0.00520978355780244,0.00493870163336396,0.00560601847246289,0.00409966241568327,0.00274549331516027,0.00369933270849288,0.00374366831965745,0.00306748598814011,0.00304535985924304,0.00253631826490164,0.00310266017913818,0.00145082944072783,0.00372593943029642,0.0044119730591774,0.512684762477875,0.695699751377106,0.632200360298157,0.776936829090118,0.691368758678436,0.499650865793228,0.514966368675232,0.54956066608429,0.423678308725357,0.00362533191218972,0.0122475698590279,0.0173689760267735,0.0190478153526783,0.00414237612858415,0.0305128712207079,0.0233743507415056,0.0281667727977037,0.0429911389946938,0.0580260083079338,0.0308641213923693,0.476867467164993,0.550444364547729,0.507946193218231,0.542712569236755,0.494468510150909,0.492149859666824,0.274605512619019,0.293562948703766,0.494670271873474,0.325606614351273,0.00381355290301144,0.00167523242998868,0.00164477236103266,0.00221550418063998,0.00144181016366929,0.00109618133865297,0.00171595136635005,0.00399577850475907,0.0344652831554413,0.00270954403094947,0.00151923589874059,0.00400778744369745,0.00674853380769491,0.00620432337746024,0.00295892870053649,0.0103678619489074,0.00600593723356724,0.00103968544863164,0.00440405542030931,0.0028966658283025,0.565459847450256,0.469368457794189,0.272410869598389,0.476170718669891,0.491343110799789,0.106734871864319,0.071705125272274,0.125662431120873,0.0645021125674248,0.0104111544787884,0.00976197328418493,0.359163969755173,0.00594769092276692,0.0161525495350361,0.0120403580367565,0.00650829821825027,0.0132051296532154,0.0192908421158791,0.00605902681127191,0.00987514760345221,0.00226790015585721,0.00873659271746874,0.00513577414676547,0.0196360442787409,0.00865437649190426,0.0073253489099443,0.0213408451527357,0.0177945960313082,0.00902661215513945,0.259924441576004,0.00377326039597392,\n0.00483903102576733,0.600874423980713,0.53497850894928,0.02568169683218,0.00841941591352224\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.476186898697672,-0.714199454111438,0.512996243940419,0,-0.82619242068559,-0.563128902688113,-0.017084606829686,0,0.30108483017946,-0.415698154205959,-0.858220797655617,0,17.9477939682589,41.6512675908134,-9.07690428404318,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.476186920862355,-0.826192459141696,0.30108484419381,0,-0.714199470747975,-0.563128915805617,-0.415698163889217,0,0.512996260553214,-0.0170846073829517,-0.858220825448115,0,25.8572264784377,38.1282898492032,4.12055842343868,1\n\t\t} \n\t}\n\tDeformer: 130835696, \"SubDeformer::Cluster_L_Middle1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *93 {\n\t\t\ta: 6119,6120,6121,6122,6125,6136,6185,6186,6230,6231,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6249,6250,6300,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6315,6316,6318,6320,6321,6322,6323,6324,6325,6326,6327,6328,6353,6354,6356,6401,6402,6403,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6417,6419,6420,6425,6426,6427,6428,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6450,6451,6452,6453,6454,6455,6456,6457,6458,6461,6465,6475,6476\n\t\t} \n\t\tWeights: *93 {\n\t\t\ta: 0.00412716390565038,0.00334790674969554,0.00247386749833822,0.00131288380362093,0.00478683551773429,0.00244800793007016,0.00789336860179901,0.00774389877915382,0.00784872099757195,0.00588024314492941,0.00478576263412833,0.00626767612993717,0.00613046204671264,0.00850861892104149,0.00524820294231176,0.00511750066652894,0.00595254916697741,0.00744087295606732,0.00562278227880597,0.00201658881269395,0.0165302008390427,0.00264852098189294,0.00964223500341177,0.771893739700317,0.77039760351181,0.820030331611633,0.36432346701622,0.423502087593079,0.594969689846039,0.490104913711548,0.418671399354935,0.0125696966424584,0.0014935287181288,0.00192902889102697,0.00668199779465795,0.00570874242112041,0.00863724667578936,0.00920366495847702,0.0100211091339588,0.128556668758392,0.00183883716817945,0.427183836698532,0.430036187171936,0.0196738447993994,0.527762174606323,0.64354407787323,0.478188276290894,0.00859897024929523,0.00973446387797594,0.0340385884046555,0.00638306746259332,0.56878536939621,0.161186441779137,0.00647852476686239,0.0104820244014263,0.0129652433097363,0.00652002496644855,0.0194364041090012,0.062188807874918,0.0101987821981311,0.0084811132401228,0.00866235606372356,0.0206532515585423,0.00225880974903703,0.0242175608873367,0.0204420946538448,0.418661445379257,0.562414765357971,0.460900753736496,0.186287403106689,0.0159904323518276,0.0341598056256771,0.00508690346032381,0.0102104907855392,0.0117530338466167,0.00734900729730725,0.0172924008220434,0.0216865725815296,0.00719740614295006,0.0119991423562169,0.0114067317917943,0.00656844489276409,0.0289940275251865,0.0121338376775384,0.0108049148693681,0.455316990613937,0.0266528204083443,0.0129107730463147,0.0223489850759506,0.00559531105682254,0.00153321924153715,0.54115879535675,0.558823943138123\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.570318626472898,-0.773811772846064,0.275593770724241,0,-0.80944211308985,-0.5865199731356,0.0282439095986967,0,0.139785791831067,-0.239185245855052,-0.960859105614745,0,15.4107018618584,43.3508755303443,-5.43133537051691,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.570318661979152,-0.809442163483183,0.139785800533693,0,-0.77381183435103,-0.586520019754033,-0.23918526486624,0,0.275593807727066,0.0282439133908891,-0.960859234625286,0,26.2532520446477,38.0536303940709,2.99594460225472,1\n\t\t} \n\t}\n\tDeformer: 130850880, \"SubDeformer::Cluster_L_Ring1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *27 {\n\t\t\ta: 6274,6277,6278,6279,6280,6281,6282,6283,6285,6286,6287,6290,6291,6293,6294,6295,6296,6297,6298,6299,6301,6302,6430,6471,6472,6473,6474\n\t\t} \n\t\tWeights: *27 {\n\t\t\ta: 0.636881113052368,0.64725536108017,0.770711004734039,0.324779361486435,0.371644020080566,0.644023895263672,0.495609492063522,0.184649080038071,0.00116098043508828,0.0132631380110979,0.442761778831482,0.00111894879955798,0.00623618019744754,0.0150064034387469,0.0145346531644464,0.0168191604316235,0.0195216089487076,0.037700742483139,0.446998029947281,0.424838811159134,0.478186815977097,0.512804090976715,0.556056439876556,0.654269754886627,0.558543562889099,0.545004069805145,0.013606695458293\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.582885664221684,-0.81087194489037,0.0522593330921745,0,-0.812067782193689,-0.57910556765076,0.0719910370836576,0,-0.0281118424327725,-0.0844006657925939,-0.996035240596412,0,15.4403653620145,43.8373141656814,-2.25142242053959,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.582885631511836,-0.812067736622806,-0.0281118408552176,0,-0.810871910930541,-0.579105543397453,-0.0844006622578409,0,0.0522593358187756,0.071991040839749,-0.996035292563984,0,26.6641374331222,38.0871364365867,1.89145925166464,1\n\t\t} \n\t}\n\tDeformer: 130845040, \"SubDeformer::Cluster_L_Pinky1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *30 {\n\t\t\ta: 6246,6247,6248,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6275,6276,6416,6470\n\t\t} \n\t\tWeights: *30 {\n\t\t\ta: 0.507474660873413,0.490716248750687,0.498910874128342,0.766794085502625,0.626131474971771,0.534704625606537,0.623797118663788,0.558018565177917,0.576629400253296,0.479758083820343,0.00651619024574757,0.0263325236737728,0.488740682601929,0.030104698613286,0.0135515499860048,0.0173956081271172,0.0141944829374552,0.00693258456885815,0.0144957825541496,0.0226971209049225,0.055401973426342,0.0273477323353291,0.0195371117442846,0.471582263708115,0.484038800001144,0.0752825513482094,0.533363699913025,0.55875962972641,0.577449381351471,0.0189471412450075\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.46713900074045,-0.863910014408551,-0.188256754586628,0,-0.865407114918385,-0.490380886739591,0.102942014820845,0,-0.181250153437913,0.114830509928814,-0.97670992775668,0,20.7401281878819,41.51763584013,1.91200099905934,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.467139029382885,-0.865407167980465,-0.181250164551191,0,-0.863910037660342,-0.490380899937996,0.114830513019431,0,-0.188256764556457,0.102942020272518,-0.976709979481948,0,26.5389261131629,38.1112859796014,0.859130680551072,1\n\t\t} \n\t}\n\tDeformer: 130840368, \"SubDeformer::Cluster_R_Thumb1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *98 {\n\t\t\ta: 5610,5613,5626,5627,5628,5629,5630,5640,5717,6938,6939,6940,6941,6942,6943,6944,6945,6953,7056,7058,7059,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7106,7107,7108,7109,7110,7111,7112,7113,7116,7122,7123,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7150,7151,7152,7153,7156,7157,7169,7170,7171\n\t\t} \n\t\tWeights: *98 {\n\t\t\ta: 0.00117834086995572,0.00185435765888542,0.00218916381709278,0.00165725930128247,0.00153683964163065,0.00117011729162186,0.00181572057772428,0.00142473354935646,0.00112519657704979,0.0120337009429932,0.0176298543810844,0.0058772643096745,0.00901230424642563,0.0135681601241231,0.0142464553937316,0.00650400621816516,0.00706358160823584,0.0124409534037113,0.00218535028398037,0.0649432241916656,0.0371046252548695,0.458596736192703,0.341233342885971,0.401548683643341,0.451044887304306,0.0650122687220573,0.274735152721405,0.276568412780762,0.00614429172128439,0.0060535091906786,0.0265965759754181,0.0063732503913343,0.00581173552200198,0.00778278242796659,0.0180601254105568,0.0219534132629633,0.0191538892686367,0.0263300146907568,0.0315652005374432,0.0293215438723564,0.0334162600338459,0.0118432277813554,0.013966896571219,0.0339761525392532,0.0192808117717505,0.0143059594556689,0.00743300141766667,0.0268707405775785,0.0281048789620399,0.0191535260528326,0.0545883439481258,0.427406132221222,0.33634215593338,0.441167950630188,0.490224152803421,0.483224272727966,0.493799120187759,0.414857596158981,0.374179124832153,0.167420074343681,0.220849931240082,0.177327692508698,0.328664183616638,0.412713706493378,0.0247516389936209,0.0111677721142769,0.267518728971481,0.479819446802139,0.0197998341172934,0.0317522473633289,0.0172765497118235,0.00883822608739138,0.0289071407169104,0.0154305025935173,0.00267817359417677,0.00531181460246444,0.0370833277702332,0.00141901499591768,0.208139926195145,0.388550370931625,0.0929949060082436,0.0676976293325424,0.0705112963914871,0.0944326370954514,0.0724598839879036,0.0573470108211041,0.067487895488739,0.047105111181736,0.037431426346302,0.153220906853676,0.0980262160301209,0.0206126980483532,0.448262453079224,0.334237396717072,0.470356494188309,0.503118216991425,0.476589530706406,0.455160111188889\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.299955290163138,-0.814394980290346,0.496777211674741,0,-0.640285237271459,-0.557902697734119,-0.527995609111184,0,0.70715038790913,-0.159704046697342,-0.688790892093755,0,29.029916536771,4.73172955031751,38.4517010471098,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.299955280479185,-0.640285216600072,0.707150365079025,0,-0.814394991209243,-0.557902705214128,-0.159704048838554,0,0.496777284049562,-0.527995686034173,-0.688790992442797,0,-23.956111524808,41.5296033876418,6.71234561535597,1\n\t\t} \n\t}\n\tDeformer: 130841536, \"SubDeformer::Cluster_R_Index1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *90 {\n\t\t\ta: 6938,6939,6942,6943,6944,6945,6946,6948,6953,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7065,7097,7098,7099,7100,7101,7103,7104,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7118,7121,7122,7123,7124,7125,7126,7127,7128,7130,7131,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7149,7150,7151,7152,7156,7166,7167,7168,7171\n\t\t} \n\t\tWeights: *90 {\n\t\t\ta: 0.0028345063328743,0.0034583390224725,0.00352103868499398,0.00366821466013789,0.00313717871904373,0.00359226879663765,0.00116448593325913,0.00275600515305996,0.00362914521247149,0.516221463680267,0.704328000545502,0.626512408256531,0.788698315620422,0.758932828903198,0.491405695676804,0.50881016254425,0.517794549465179,0.377093970775604,0.00629057269543409,0.0051807276904583,0.0198304392397404,0.0193320792168379,0.00171411549672484,0.037797424942255,0.027088450267911,0.0283459965139627,0.0328404195606709,0.0557266399264336,0.0329632498323917,0.479581147432327,0.584652662277222,0.496655881404877,0.558867752552032,0.494424849748611,0.492634028196335,0.283073902130127,0.292983174324036,0.508531212806702,0.341628015041351,0.00316119496710598,0.00137431977782398,0.001358114881441,0.00221375562250614,0.00133413984440267,0.00170696689747274,0.00347282318398356,0.0293117240071297,0.00315881427377462,0.0017423335229978,0.00493387132883072,0.00811068899929523,0.00765371881425381,0.00381668144837022,0.0124431811273098,0.00749050639569759,0.00156867934856564,0.00560529157519341,0.00357585120946169,0.573042452335358,0.473697155714035,0.297389835119247,0.473060458898544,0.484047085046768,0.100287444889545,0.080564945936203,0.121525146067142,0.0695379748940468,0.0116193136200309,0.011608568020165,0.390105187892914,0.00705760065466166,0.0181731842458248,0.0144127681851387,0.00774019164964557,0.0163207482546568,0.0230593774467707,0.0117224948480725,0.0103925261646509,0.023034455254674,0.0102231930941343,0.00876631308346987,0.0257692635059357,0.0157899931073189,0.0079519534483552,0.268854886293411,0.00414057867601514,0.619400978088379,0.560737490653992,0.0276894252747297,0.00791016221046448\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.482154341627574,0.614915306728794,0.624024315663636,0,-0.795962863734002,-0.605054025618336,-0.0187812526913695,0,0.366019549322664,-0.505755636317744,0.781179185458219,0,16.3612037448649,43.8516961637896,10.9593100868548,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.482154341588848,-0.795962863670071,0.366019549293266,0,0.614915323925831,-0.605054042539588,-0.505755650461966,0,0.62402431454957,-0.0187812526578394,0.781179184063586,0,-25.9153304969333,39.7613861936677,7.62853778503809,1\n\t\t} \n\t}\n\tDeformer: 130863728, \"SubDeformer::Cluster_R_Middle1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *76 {\n\t\t\ta: 6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6952,6953,7003,7006,7007,7008,7009,7010,7011,7012,7013,7014,7016,7018,7019,7021,7023,7024,7026,7027,7028,7029,7030,7031,7056,7059,7104,7105,7106,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7120,7122,7123,7128,7129,7130,7131,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7149,7150,7151,7152,7163,7164\n\t\t} \n\t\tWeights: *76 {\n\t\t\ta: 0.00500072818249464,0.00594224268570542,0.00633213529363275,0.00784198846668005,0.00608585309237242,0.00622750772163272,0.0074488609097898,0.00871003977954388,0.00458542117848992,0.00190111703705043,0.0126460809260607,0.00359231326729059,0.00814132858067751,0.780165672302246,0.840406358242035,0.831347942352295,0.338731288909912,0.319924503564835,0.591757655143738,0.483411818742752,0.406764596700668,0.0154762221500278,0.00170462974347174,0.00772825255990028,0.00779491337016225,0.0104415100067854,0.00672159111127257,0.0107284439727664,0.0477143339812756,0.403345257043839,0.414985597133636,0.0198577605187893,0.536106884479523,0.687484502792358,0.474653422832489,0.00896497163921595,0.0292559992522001,0.00563854072242975,0.594972848892212,0.157949775457382,0.00806060433387756,0.012730622664094,0.0161999184638262,0.00852251797914505,0.0236726757138968,0.0721689537167549,0.014659053646028,0.0109589444473386,0.0114774499088526,0.0247667580842972,0.00337542127817869,0.0307328347116709,0.0237923245877028,0.428632140159607,0.56472510099411,0.461676090955734,0.184774100780487,0.019334252923727,0.050190407782793,0.00608722772449255,0.0115801775828004,0.0143293524160981,0.00884373113512993,0.0217493902891874,0.0264030154794455,0.0144056649878621,0.0137261711061001,0.0345770604908466,0.0144937243312597,0.0130718080326915,0.46775695681572,0.0246061757206917,0.0115793980658054,0.0221886523067951,0.57551372051239,0.565304398536682\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.595926373558608,0.696185103154453,0.400247416304471,0,-0.772654477421632,-0.632889052852795,-0.0495624802253885,0,0.218807554470381,-0.338788561157854,0.915065841994783,0,13.4799143483701,45.7845417929185,6.55023107646817,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.595926415228335,-0.772654531448946,0.218807569770343,0,0.696185144753957,-0.632889090670137,-0.338788581401659,0,0.400247444766019,-0.0495624837497703,0.915065907065011,0,-26.4631940713707,39.7164996481656,6.56787952339484,1\n\t\t} \n\t}\n\tDeformer: 130864896, \"SubDeformer::Cluster_R_Ring1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *25 {\n\t\t\ta: 6977,6980,6981,6982,6983,6984,6985,6986,6989,6990,6994,6996,6997,6998,6999,7000,7001,7002,7004,7005,7133,7159,7160,7161,7162\n\t\t} \n\t\tWeights: *25 {\n\t\t\ta: 0.676510512828827,0.711042284965515,0.829476058483124,0.284224897623062,0.288607120513916,0.649124681949615,0.49312686920166,0.10552641004324,0.0175852011889219,0.433233708143234,0.0090728122740984,0.0159076135605574,0.0128143411129713,0.0188714507967234,0.0214142464101315,0.0388879030942917,0.434706896543503,0.407617390155792,0.474976152181625,0.521292865276337,0.564831256866455,0.709270298480988,0.603561341762543,0.563409507274628,0.0152496118098497\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.631144692091481,0.754157801208302,0.181390099390447,0,-0.773772857679433,-0.628472225444924,-0.0793613346788445,0,0.0541476720279382,-0.190443212726649,0.980203759768997,0,13.4304721353298,46.4283095780335,2.63824609290169,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.631144674405108,-0.773772835996235,0.0541476705105744,0,0.75415784302433,-0.628472260292024,-0.190443223286214,0,0.181390099342531,-0.0793613346578805,0.980203759510066,0,-27.0162545645575,39.7804139060557,5.52870940901063,1\n\t\t} \n\t}\n\tDeformer: 130847376, \"SubDeformer::Cluster_R_Pinky1\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *30 {\n\t\t\ta: 6949,6950,6951,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6978,6979,7119,7158\n\t\t} \n\t\tWeights: *30 {\n\t\t\ta: 0.53295224905014,0.508521616458893,0.50278514623642,0.849367201328278,0.616192400455475,0.518803417682648,0.696697235107422,0.526841044425964,0.527325034141541,0.436812698841095,0.00324418325908482,0.0118504920974374,0.478200852870941,0.0372413694858551,0.0150805469602346,0.0169007889926434,0.00679425150156021,0.0106759835034609,0.0182724725455046,0.0236268937587738,0.047363169491291,0.0316543094813824,0.0231564771384001,0.459268122911453,0.478319853544235,0.0776866674423218,0.499195128679276,0.556424200534821,0.571000456809998,0.0213689096271992\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.54066753815205,0.839021766035349,-0.0609999351852652,0,-0.833617247257869,-0.544097469756583,-0.0950797010971079,0,-0.112963852852558,-0.000555909862120491,0.993598931414121,0,19.0716507875639,44.3369412603016,-2.32465685100485,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.540667573950472,-0.833617302452938,-0.112963860332067,0,0.839021858736889,-0.544097529872631,-0.000555909923541703,0,-0.0609999365174667,-0.0950797031735908,0.99359895311372,0,-27.0300436247199,39.8010506213175,4.48883125500148,1\n\t\t} \n\t}\n\tDeformer: 130862560, \"SubDeformer::Cluster_L_Thumb2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *39 {\n\t\t\ta: 6358,6359,6360,6361,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6459,6468,6481,6482\n\t\t} \n\t\tWeights: *39 {\n\t\t\ta: 0.472210496664047,0.387133657932281,0.427147477865219,0.443163722753525,0.685069382190704,0.724653661251068,0.673102736473084,0.536649942398071,0.617036104202271,0.495746076107025,0.556665480136871,0.49608501791954,0.491237044334412,0.484662413597107,0.486869364976883,0.482354670763016,0.477824419736862,0.480040609836578,0.477701425552368,0.492183148860931,0.490344226360321,0.47708922624588,0.488475769758224,0.490408599376678,0.495934039354324,0.514282166957855,0.548796355724335,0.577970862388611,0.592904388904572,0.534782707691193,0.59475177526474,0.509904384613037,0.484549164772034,0.478367120027542,0.422609061002731,0.247988402843475,0.463127940893173,0.369489639997482,0.365565955638886\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.135155843776122,0.775106471512664,0.617205682872185,0,-0.701497726450692,-0.514774994311568,0.492856609979177,0,0.699738398946369,-0.366355940099343,0.613310269759096,0,27.7480724005536,3.49990679714409,-36.6074357556818,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.135155845224675,-0.701497733969098,0.699738406445918,0,0.775106462370004,-0.514774988239612,-0.366355935778043,0,0.617205695239839,0.492856619855105,0.613310282048693,0,23.6318316390265,39.3090914394466,4.31753641469087,1\n\t\t} \n\t}\n\tDeformer: 130860224, \"SubDeformer::Cluster_L_Index2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *33 {\n\t\t\ta: 6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6357,6418,6421,6422,6423,6424,6478,6479,6480\n\t\t} \n\t\tWeights: *33 {\n\t\t\ta: 0.0128679797053337,0.0311662908643484,0.00870265159755945,0.0184976477175951,0.02268429659307,0.497807532548904,0.465071231126785,0.433350116014481,0.552651107311249,0.704526364803314,0.617996513843536,0.475178509950638,0.481539070606232,0.497695684432983,0.515092432498932,0.473771840333939,0.477837771177292,0.502260267734528,0.480913937091827,0.475129336118698,0.476394355297089,0.0324806794524193,0.445389032363892,0.0190046336501837,0.0207288712263107,0.0156876035034657,0.476336061954498,0.491859197616577,0.525479137897491,0.615624308586121,0.0330850556492805,0.0259174816310406,0.472873747348785\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.341297846079196,-0.787623412947761,0.512996243916672,0,-0.913316686228973,-0.40689157673435,-0.0170845552668772,0,0.222190046083139,-0.462697109835494,-0.858220815284256,0,23.6325310830361,38.0490136421109,-9.07690618566702,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.341297844147108,-0.913316681058689,0.222190044825321,0,-0.787623404054733,-0.406891572140152,-0.462697104611198,0,0.512996245923281,-0.0170845553337043,-0.858220818641226,0,26.5589805331897,36.9107329270075,4.56426544744836,1\n\t\t} \n\t}\n\tDeformer: 130834528, \"SubDeformer::Cluster_L_Middle2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *32 {\n\t\t\ta: 6300,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6402,6426,6475,6476,6477\n\t\t} \n\t\tWeights: *32 {\n\t\t\ta: 0.035529550164938,0.0237998683005571,0.02204336412251,0.631926834583282,0.574653387069702,0.0330993868410587,0.490843802690506,0.558352828025818,0.574839949607849,0.651658654212952,0.537214756011963,0.484952598810196,0.487971544265747,0.497786968946457,0.484419077634811,0.48267862200737,0.523305237293243,0.48245307803154,0.488846242427826,0.868825256824493,0.770056843757629,0.526960432529449,0.512958109378815,0.527758955955505,0.0363789610564709,0.0384134836494923,0.478188276290894,0.0621519312262535,0.0342778228223324,0.0404716730117798,0.0176376178860664,0.483157634735107\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.499759814432717,-0.821150509243367,0.275593784113431,0,-0.85807227136564,-0.512751602155499,0.028243836446371,0,0.118118717124343,-0.250594541726914,-0.960859110891337,0,17.6554166237736,41.9557259278084,-5.43133409867867,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.499759851243271,-0.858072334568235,0.118118725824553,0,-0.821150518533047,-0.512751607956261,-0.250594544561892,0,0.275593817426644,0.0282438398604282,-0.960859227038021,0,27.1253398134896,36.8158922231038,3.20969323129932,1\n\t\t} \n\t}\n\tDeformer: 130836864, \"SubDeformer::Cluster_L_Ring2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *31 {\n\t\t\ta: 6274,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6301,6302,6430,6471,6472,6473,6474\n\t\t} \n\t\tWeights: *31 {\n\t\t\ta: 0.0352816879749298,0.0397219471633434,0.0205946918576956,0.6727254986763,0.621281743049622,0.00786225218325853,0.495609492063522,0.806967973709106,0.611252129077911,0.581453204154968,0.644257962703705,0.541119575500488,0.486171543598175,0.47906419634819,0.498831510543823,0.507536768913269,0.48268136382103,0.435824930667877,0.465312838554382,0.446213185787201,0.468680292367935,0.510018289089203,0.497348576784134,0.525787651538849,0.478186815977097,0.0253856051713228,0.0158547200262547,0.0227557364851236,0.0358967743813992,0.008476871997118,0.470450043678284\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.387236956053205,-0.920497931608774,0.0522593739742224,0,-0.920820074405676,-0.383285326046089,0.0719910237843163,0,-0.0462373391529368,-0.0759990671060605,-0.996035235121564,0,23.4655692344814,39.5994352902992,-2.25142353466758,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.387236971119137,-0.920820110231315,-0.0462373409518574,0,-0.920497985495389,-0.38328534848389,-0.0759990715551009,0,0.0522593771475497,0.0719910281558015,-0.996035295603456,0,27.4821224471454,36.9475336992182,1.85200853561197,1\n\t\t} \n\t}\n\tDeformer: 130852048, \"SubDeformer::Cluster_L_Pinky2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *30 {\n\t\t\ta: 6246,6247,6248,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6275,6276,6416,6470\n\t\t} \n\t\tWeights: *30 {\n\t\t\ta: 0.00755235506221652,0.0340460389852524,0.00846235267817974,0.0141114005818963,0.0211576595902443,0.452955424785614,0.029446117579937,0.437771379947662,0.390317171812058,0.51088809967041,0.677973389625549,0.69030100107193,0.484176695346832,0.678302764892578,0.488589286804199,0.48065397143364,0.499816417694092,0.509559392929077,0.486769676208496,0.441025704145432,0.501901745796204,0.48899382352829,0.4646817445755,0.466712713241577,0.473297029733658,0.549367606639862,0.391996681690216,0.0391606763005257,0.0295384153723717,0.472831279039383\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.46713900074045,-0.863910014408551,-0.188256754586628,0,-0.865407114918385,-0.490380886739592,0.102942014820845,0,-0.181250153437913,0.114830509928814,-0.97670992775668,0,19.6083352155855,41.5176353883872,1.91200119143013,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.467139029382885,-0.865407167980465,-0.181250164551191,0,-0.863910037660342,-0.490380899937996,0.114830513019431,0,-0.188256764556457,0.102942020272518,-0.976709979481947,0,27.0676304296537,37.1318239873771,0.653993257848812,1\n\t\t} \n\t}\n\tDeformer: 130856720, \"SubDeformer::Cluster_R_Thumb2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *39 {\n\t\t\ta: 7061,7062,7063,7064,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7153,7157,7169,7170\n\t\t} \n\t\tWeights: *39 {\n\t\t\ta: 0.462549269199371,0.343993365764618,0.403216421604156,0.432211607694626,0.690147161483765,0.665228009223938,0.63617742061615,0.552315056324005,0.596552550792694,0.496286422014236,0.546528279781342,0.494744300842285,0.488472163677216,0.483908146619797,0.487448483705521,0.480925589799881,0.477854013442993,0.481168687343597,0.477437734603882,0.493003726005554,0.491661250591278,0.477780610322952,0.488146930932999,0.492865741252899,0.501138925552368,0.51694792509079,0.568934202194214,0.616943299770355,0.594912886619568,0.543474555015564,0.624541223049164,0.503936529159546,0.487898200750351,0.481148064136505,0.41353514790535,0.246037870645523,0.470356494188309,0.358776807785034,0.347928255796433\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.183942706555208,-0.848161170706559,0.496777292207143,0,-0.711563310515749,-0.463571214563957,-0.527995586438497,0,0.678117009277356,-0.256367565452164,-0.688790932416489,0,28.2763608448924,0.812496319989095,38.4516975354302,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.183942717143272,-0.711563351474578,0.678117048310957,0,-0.848161195233266,-0.463571227969282,-0.256367572865675,0,0.496777309132162,-0.527995604427112,-0.688790955883342,0,-23.6140336280634,40.799399288542,7.51879685717006,1\n\t\t} \n\t}\n\tDeformer: 130853216, \"SubDeformer::Cluster_R_Index2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *34 {\n\t\t\ta: 7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7057,7060,7121,7124,7125,7126,7127,7166,7167,7168\n\t\t} \n\t\tWeights: *34 {\n\t\t\ta: 0.0196526702493429,0.0388948395848274,0.0153781063854694,0.0233097579330206,0.0186757519841194,0.504974246025085,0.478513270616531,0.458382576704025,0.606969714164734,0.609241485595703,0.638486862182617,0.468806743621826,0.480103701353073,0.499032914638519,0.494927585124969,0.467299968004227,0.476862788200378,0.501342952251434,0.476703554391861,0.472311437129974,0.482087790966034,0.0294203441590071,0.457078576087952,0.0218525212258101,0.0127347502857447,0.0168898552656174,0.0218900591135025,0.47575369477272,0.488809376955032,0.514865398406982,0.566685616970062,0.0377235636115074,0.0243574362248182,0.468955308198929\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.364861736148864,0.690991750298911,0.62402424274074,0,-0.891041856361616,-0.453532359830624,-0.0187812728650536,0,0.270037487465404,-0.562884314957989,0.781179199772701,0,22.4634473604217,40.4969438613113,10.9593087714919,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.364861764998285,-0.891041926815814,0.270037508817122,0,0.690991783176016,-0.453532381409508,-0.562884341739794,0,0.624024283991176,-0.0187812741065694,0.781179251411694,0,-26.6258772092054,38.5883785902394,8.16793760109114,1\n\t\t} \n\t}\n\tDeformer: 130839200, \"SubDeformer::Cluster_R_Middle2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *32 {\n\t\t\ta: 7003,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7105,7129,7163,7164,7165\n\t\t} \n\t\tWeights: *32 {\n\t\t\ta: 0.0448785312473774,0.01941136457026,0.0281076356768608,0.655481696128845,0.679150938987732,0.0478179343044758,0.489845812320709,0.558489799499512,0.535889983177185,0.585264027118683,0.52188766002655,0.481962472200394,0.487495481967926,0.491933614015579,0.480631649494171,0.482351124286652,0.514230608940125,0.48048734664917,0.487918704748154,0.951218128204346,0.80142742395401,0.555743455886841,0.518873155117035,0.50983989238739,0.0447485186159611,0.0386889614164829,0.476235747337341,0.0652661770582199,0.0468938462436199,0.0375622734427452,0.0262309741228819,0.480987906455994\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.532122228623454,0.74608839556489,0.400247370639833,0,-0.82552298459893,-0.562187946808888,-0.0495624079488834,0,0.188036317084237,-0.356786672901474,0.915065869188404,0,15.9470803705496,44.5503810501042,6.55022768199521,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.532122270746827,-0.825523049948226,0.188036331969396,0,0.746088461598279,-0.562187996565961,-0.356786704479278,0,0.400247396680201,-0.0495624111734475,0.915065928723215,0,-27.3744402201115,38.5350169717286,6.90246296248997,1\n\t\t} \n\t}\n\tDeformer: 130846208, \"SubDeformer::Cluster_R_Ring2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *31 {\n\t\t\ta: 6977,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001,7002,7004,7005,7133,7159,7160,7161,7162\n\t\t} \n\t\tWeights: *31 {\n\t\t\ta: 0.0382037088274956,0.0364896692335606,0.0195562429726124,0.712645888328552,0.707021296024323,0.0143969738855958,0.49312686920166,0.88950514793396,0.551682949066162,0.570190012454987,0.586169481277466,0.540175020694733,0.484207719564438,0.478153556585312,0.499409109354019,0.496039986610413,0.479123532772064,0.434379041194916,0.46566715836525,0.442066639661789,0.463463187217712,0.490535736083984,0.496567964553833,0.541257619857788,0.474976152181625,0.0333678238093853,0.0247717965394259,0.0228563323616982,0.0331150405108929,0.0127192800864577,0.467338800430298\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.446935098472743,0.875983214247907,0.181390098903514,0,-0.894507223525502,-0.439952872930471,-0.0793613109964567,0,0.0102839187608738,-0.197724114126782,0.980203752580189,0,22.0845507828728,42.5736111092596,2.63824563864957,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.446935136832639,-0.894507300299969,0.0102839196435299,0,0.875983260367471,-0.439952896093512,-0.197724124536742,0,0.181390102125803,-0.0793613124062639,0.980203769992933,0,-27.901960584903,38.6945500401361,5.60469591815982,1\n\t\t} \n\t}\n\tDeformer: 130838032, \"SubDeformer::Cluster_R_Pinky2\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *30 {\n\t\t\ta: 6949,6950,6951,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6978,6979,7119,7158\n\t\t} \n\t\tWeights: *30 {\n\t\t\ta: 0.00631227903068066,0.0288749616593122,0.0153481028974056,0.0111556136980653,0.0370478443801403,0.474144101142883,0.0249618031084538,0.470720201730728,0.42764550447464,0.556730091571808,0.641176640987396,0.702353775501251,0.478462547063828,0.590432405471802,0.486605674028397,0.479619711637497,0.496470123529434,0.494648188352585,0.482276678085327,0.43053936958313,0.488811641931534,0.479370653629303,0.454167634248734,0.459241479635239,0.477396637201309,0.509645402431488,0.413587629795074,0.0568801686167717,0.0476182997226715,0.466875940561295\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.54066747996728,0.839021802135076,-0.0609999543681701,0,-0.833617284990115,-0.544097414120462,-0.0950796886571808,0,-0.112963852891108,-0.000555879311200613,0.99359893142683,0,17.9398612556826,44.3369390457035,-2.32465801551563,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.540667515765707,-0.8336173401852,-0.112963860370618,0,0.839021894836614,-0.544097474236501,-0.000555879372618377,0,-0.0609999557003721,-0.0950796907336635,0.993598953126431,0,-27.6419664270552,38.8575682082219,4.36097974240904,1\n\t\t} \n\t}\n\tDeformer: 130857888, \"SubDeformer::Cluster_L_Thumb3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *396 {\n\t\t\ta: 6079,6091,6092,6094,6096,6097,6100,6101,6103,6104,6107,6108,6109,6116,6117,6118,6122,6123,6124,6126,6127,6184,6224,6350,6354,6355,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6404,6405,6446,6459,6464,6465,6466,6468,6481,6482,6483,6566,6567,6570,6572,6573,6580,6582,6587,6588,6589,6605,6606,6607,6608,6609,6630,6631,6633,6635,6636,6637,6640,6641,6642,6643,6649,6663,6669,6682,6683,6689,6855,6858,6859,6862,6863,6864,6866,6867,6868,6869,6870,6903,6904,6911,9314,9316,9329,9352,9353,9428,9429,9430,9431,9432,9433,9434,9435,9448,9449,9450,9455,9457,9459,9461,9462,9463,9475,9476,9477,9478,9479,9480,9481,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9506,9507,9508,9509,9510,9513,9514,9515,9516,9517,9518,9519,9520,9522,9523,9531,9538,9540,9542,9544,9546,9547,9548,9549,9550,9551,9556,9557,9558,9559,9560,9561,9562,9567,9568,9569,9570,9571,9572,9573,9574,9577,9578,9579,9580,9581,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9635,9636,9637,9640,9641,9642,9649,9650,9651,9652,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9680,9681,9682,9683,9684,9688,9689,9690,9691,9692,9693,9694,9695,9697,9698,9701,9702,9703,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9799,9800,9801,9802,9803,9804,9805,9810,9811,9813,9849,9851,9852,9853,9854,9855,9856,9857,9858\n\t\t} \n\t\tWeights: *396 {\n\t\t\ta: 0.00149820931255817,0.00138663349207491,0.00258206482976675,0.00212346576154232,0.00344013841822743,0.00489160418510437,0.00107892986852676,0.00209578522481024,0.00151363876648247,0.00168884394224733,0.0021959962323308,0.00271111493930221,0.00310902716591954,0.00213803281076252,0.00564004061743617,0.00696052052080631,0.00111033720895648,0.00341050652787089,0.0053539639338851,0.00688229827210307,0.00649200333282351,0.0014114435762167,0.00588079309090972,0.00492632342502475,0.00596584053710103,0.0446317344903946,0.00557761080563068,0.0259243100881577,0.05253741517663,0.0559712648391724,0.0270659644156694,0.0530976578593254,0.0325066484510899,0.035634271800518,0.323588341474533,0.455188989639282,0.363215416669846,0.495746076107025,0.439982146024704,0.49608501791954,0.491237044334412,0.484662413597107,0.486869364976883,0.482354670763016,0.477824419736862,0.480040609836578,0.477701425552368,0.492183148860931,0.490344226360321,0.47708922624588,0.488475769758224,0.490052223205566,0.491328775882721,0.458046555519104,0.415151000022888,0.393014430999756,0.351960003376007,0.0252938233315945,0.0432725250720978,0.0325434282422066,0.00927298329770565,0.0129866236820817,0.0139118302613497,0.0106906080618501,0.00391026306897402,0.00286733661778271,0.00310411211103201,0.00216891011223197,0.00204042112454772,0.00304773822426796,0.00282205501571298,0.00232247146777809,0.00350804161280394,0.0190506651997566,0.00137466262094676,0.00171561446040869,0.00999070610851049,0.0263785943388939,0.0174223799258471,0.0177107490599155,0.0146211693063378,0.00217383401468396,0.00175195629708469,0.00127440562937409,0.00187887821812183,0.00171487790066749,0.00149286584928632,0.00251029059290886,0.00156333390623331,0.00117121625225991,0.00126078014727682,0.00140605447813869,0.00230707740411162,0.00234857969917357,0.00221398449502885,0.00196380750276148,0.00137024174910039,0.00224497076123953,0.00133721902966499,0.0020017025526613,0.00232847104780376,0.00133163447026163,0.00192440755199641,0.00171626394148916,0.00157908024266362,0.0012935638660565,\n0.00231205811724067,0.00100099062547088,0.00109254475682974,0.0019734192173928,0.00168480223510414,0.00182580389082432,0.00142278173007071,0.0010410676477477,0.00153141666669399,0.00154780084267259,0.00201118993572891,0.00259579555131495,0.00223182025365531,0.00237108976580203,0.00265182740986347,0.00186769140418619,0.00367331691086292,0.00130162853747606,0.00129232939798385,0.0017205880722031,0.00136861728969961,0.00145484495442361,0.00100917939562351,0.0021941545419395,0.00188804056961089,0.00195067189633846,0.00165543414186686,0.00101901881862432,0.00102479092311114,0.00212220335379243,0.00114350859075785,0.00128554948605597,0.00123686867300421,0.00305265444330871,0.00291923386976123,0.00195410684682429,0.00105387123767287,0.00137196411378682,0.00153346301522106,0.00194630993064493,0.00169592432212085,0.00111660454422235,0.00186238554306328,0.00155351380817592,0.00250041089020669,0.00318694044835866,0.0032063857652247,0.00272415089420974,0.00245766364969313,0.00402964977547526,0.00341994944028556,0.0052446280606091,0.00654846709221601,0.00386982690542936,0.00455573340877891,0.00550030590966344,0.00639821263030171,0.00862144120037556,0.00814477447420359,0.0100691318511963,0.0101043749600649,0.00709112267941237,0.00818463880568743,0.00296359532512724,0.00321070617064834,0.00207592872902751,0.00333278137259185,0.00632657762616873,0.00672197481617332,0.00220432667993009,0.00154417741578072,0.00266806920990348,0.00424164813011885,0.00453092344105244,0.0031485699582845,0.00186956557445228,0.00134828640148044,0.0010057658655569,0.00159944279585034,0.00834708474576473,0.0086600948125124,0.00148575787898153,0.00140404503326863,0.00301717966794968,0.00333177810534835,0.0031098450999707,0.00239596702158451,0.00381142972037196,0.00410086335614324,0.00282490067183971,0.00170151132624596,0.00125974882394075,0.00221156352199614,0.00152939255349338,0.0064187771640718,0.0073395143263042,0.00633658794686198,0.00388056435622275,0.00348237995058298,0.00124342960771173,0.00193079898599535,0.00246216403320432,0.00223845848813653,0.00386203173547983,\n0.00439270539209247,0.005020497366786,0.00632684724405408,0.00307083316147327,0.00286118732765317,0.00213557784445584,0.00129702757112682,0.00121187209151685,0.00251098163425922,0.00800847075879574,0.00886239018291235,0.00887640286237001,0.00767807802185416,0.00670932326465845,0.00401021400466561,0.00502444198355079,0.00238260510377586,0.00547388335689902,0.00776300393044949,0.00480005796998739,0.0028238866943866,0.00190474814735353,0.00193470239173621,0.00288113416172564,0.00389803969301283,0.00367174437269568,0.00390818109735847,0.00355087663047016,0.00268725026398897,0.00454041082412004,0.0035445315297693,0.00171094539109617,0.00341316545382142,0.00697055878117681,0.00964019820094109,0.00920553877949715,0.00569045403972268,0.00306147919036448,0.00185962207615376,0.00222978158853948,0.00188676745165139,0.00173016346525401,0.00136094342451543,0.00119532260578126,0.00134551979135722,0.00201214803382754,0.00433872221037745,0.00494116824120283,0.0048528490588069,0.00373621983453631,0.00260420818813145,0.00111460161861032,0.00214701052755117,0.00107349210884422,0.00131016981322318,0.00134573271498084,0.00137586984783411,0.00183277728501707,0.00205387198366225,0.00181044160854071,0.00195832783356309,0.00171237147878855,0.00127034331671894,0.00683472445234656,0.00616391934454441,0.00666100112721324,0.00529539445415139,0.00470123440027237,0.00376344588585198,0.00785322301089764,0.00749101815745234,0.00359520222991705,0.00375024485401809,0.00510285887867212,0.0165347177535295,0.0120284659788013,0.0136821400374174,0.0208208095282316,0.0121704069897532,0.00668172631412745,0.0071162823587656,0.0137389861047268,0.0208119451999664,0.0127062760293484,0.00445901975035667,0.0161651168018579,0.0138529241085052,0.0140357566997409,0.0165641214698553,0.0206819456070662,0.01622024923563,0.0097760334610939,0.00927293580025434,0.00617081159725785,0.00917889270931482,0.0165512580424547,0.0100768441334367,0.0127015858888626,0.0150537947192788,0.00986745487898588,0.0064253699965775,0.00897261500358582,0.00977715570479631,0.0120841050520539,\n0.0137787126004696,0.0152517901733518,0.0186050273478031,0.0209942348301411,0.0180246215313673,0.0144900577142835,0.0112779578194022,0.010276542045176,0.00792760029435158,0.0171343702822924,0.0179134495556355,0.0175734963268042,0.0137078361585736,0.0129081830382347,0.0119716376066208,0.0115421507507563,0.00434318883344531,0.00599595671519637,0.00866668857634068,0.00924254860728979,0.0130253322422504,0.0132820680737495,0.00989582482725382,0.00758609594777226,0.00430233962833881,0.00572281144559383,0.00791021436452866,0.00848311930894852,0.011293787509203,0.0113278347998858,0.00868441443890333,0.00685539748519659,0.00510429078713059,0.00733340112492442,0.0107003068551421,0.0117350667715073,0.0164118018001318,0.0164599809795618,0.012408996000886,0.00942008569836617,0.00473457621410489,0.00436365557834506,0.00367337069474161,0.00328112719580531,0.00449102418497205,0.00377309625037014,0.00327134947292507,0.00724644213914871,0.0145453428849578,0.0169037282466888,0.019414534792304,0.0191765520721674,0.0144556574523449,0.0133972251787782,0.0110455770045519,0.00914285890758038,0.00429244339466095,0.0043087056837976,0.0039505329914391,0.00353592447936535,0.00316647044382989,0.00297523243352771,0.00270455866120756,0.00102158123627305,0.00184092985000461,0.00203118450008333,0.00171120732557029,0.00121729238890111,0.001143594738096,0.00112271460238844,0.00306950928643346,0.00121603487059474,0.00207205256447196,0.00437572225928307,0.00116132642142475,0.00153699307702482,0.0022282893769443,0.00355688342824578,0.00518744718283415,0.00414137402549386,0.00526373228058219,0.00548378052189946\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.150316349336557,0.772309497534129,0.617205824895879,0,-0.691277111630371,-0.528420530153594,0.492856640794004,0,0.706782058456871,-0.352575833811563,0.613310194135304,0,26.2919663830623,4.01581780486915,-36.6074352156097,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.15031636014454,-0.691277161334284,0.706782109275615,0,0.772309547535657,-0.528420564365051,-0.352575856638331,0,0.617205767563365,0.49285659501234,0.613310137164658,0,23.4449784066569,38.3392924705161,5.2849000587628,1\n\t\t} \n\t}\n\tDeformer: 130855552, \"SubDeformer::Cluster_L_Index3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *64 {\n\t\t\ta: 6303,6312,6314,6317,6318,6319,6320,6323,6324,6325,6326,6327,6328,6329,6330,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6351,6352,6418,6421,6422,6423,6424,6426,6427,6455,6475,6477,6478,6479,6480,9690,9691,9695,9697,9701,9709,9735,9736,9737,9738,9739,9743,9744,9745,9746,9747\n\t\t} \n\t\tWeights: *64 {\n\t\t\ta: 0.00129172543529421,0.00132386665791273,0.0102978684008121,0.023387661203742,0.0202862359583378,0.0210154503583908,0.0131963603198528,0.0310754030942917,0.0289298985153437,0.0213378369808197,0.00458353338763118,0.00461415899917483,0.0256056245416403,0.00156837981194258,0.00284981518052518,0.00149840523954481,0.0021868369076401,0.00197000638581812,0.0135596552863717,0.00847333390265703,0.0207607746124268,0.29146534204483,0.369206309318542,0.475178509950638,0.481539070606232,0.497695684432983,0.45072677731514,0.473771840333939,0.477837771177292,0.45277014374733,0.457344979047775,0.475129336118698,0.0342537313699722,0.0230790339410305,0.00212693749926984,0.00162085669580847,0.0367642305791378,0.0134540442377329,0.364172965288162,0.308993935585022,0.00256865425035357,0.00292015401646495,0.00128136458806694,0.00546527421101928,0.0140916919335723,0.00372047512792051,0.00346140190958977,0.472873747348785,0.00581017322838306,0.00588010810315609,0.00412550196051598,0.00392747716978192,0.00405125552788377,0.00431024795398116,0.00382395950146019,0.00403719209134579,0.00546633033081889,0.00556815648451447,0.00421888194978237,0.0034736858215183,0.0036936835385859,0.00476250844076276,0.00477577652782202,0.00371923088096082\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.341297846079195,-0.787623412947761,0.512996243916672,0,-0.913316686228974,-0.40689157673435,-0.0170845552668778,0,0.222190046083139,-0.462697109835493,-0.858220815284256,0,22.5696856853696,38.049012840111,-9.07690578638613,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.341297844147108,-0.913316681058689,0.222190044825321,0,-0.787623404054734,-0.406891572140152,-0.462697104611198,0,0.512996245923281,-0.0170845553337044,-0.858220818641226,0,26.9217265395714,35.9400181764268,4.80041908558635,1\n\t\t} \n\t}\n\tDeformer: 130842704, \"SubDeformer::Cluster_L_Middle3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *45 {\n\t\t\ta: 6288,6289,6290,6292,6293,6294,6295,6296,6297,6298,6299,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6328,6340,6341,6343,6344,6345,6346,6347,6348,6424,6474,6477,6480\n\t\t} \n\t\tWeights: *45 {\n\t\t\ta: 0.014571632258594,0.0314285829663277,0.00121804932132363,0.0216398369520903,0.113343708217144,0.0645012483000755,0.0907544791698456,0.0472875647246838,0.0558902733027935,0.017894497141242,0.0183007605373859,0.00250962004065514,0.00116259243804961,0.00177814660128206,0.0104236043989658,0.0174920316785574,0.404900193214417,0.344944804906845,0.459532350301743,0.484952598810196,0.487971544265747,0.491063833236694,0.484419077634811,0.48267862200737,0.447204828262329,0.48245307803154,0.487936288118362,0.00191004655789584,0.227206647396088,0.0147803528234363,0.0280758254230022,0.431229382753372,0.0180178489536047,0.0322740189731121,0.0178740713745356,0.00366789777763188,0.0290819946676493,0.0161577016115189,0.0019784311298281,0.00371509045362473,0.0188771914690733,0.00367660750634968,0.0454932413995266,0.483157634735107,0.0285708270967007\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.444149185987956,-0.852513629457775,0.275593811819462,0,-0.890216396056314,-0.454661404019702,0.028243899034468,0,0.101223567194035,-0.25788265192211,-0.960859095070715,0,18.8757617638073,40.7927182930377,-5.43133705084128,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.444149211847771,-0.890216447887616,0.101223573087601,0,-0.852513678154366,-0.454661429990501,-0.257882666652674,0,0.275593848328492,0.028243902776052,-0.960859222359615,0,27.8895386829017,35.5037913764696,3.39031262789266,1\n\t\t} \n\t}\n\tDeformer: 130859056, \"SubDeformer::Cluster_L_Ring3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *44 {\n\t\t\ta: 6262,6263,6264,6266,6267,6268,6269,6270,6273,6279,6280,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6305,6310,6311,6313,6314,6315,6316,6317,6319,6414,6470,6474,6477\n\t\t} \n\t\tWeights: *44 {\n\t\t\ta: 0.0092698922380805,0.0212964508682489,0.00166295794770122,0.0119648510590196,0.0952514484524727,0.0141067132353783,0.00670324685052037,0.0510993860661983,0.00714946305379272,0.00109227269422263,0.00494632869958878,0.00435620592907071,0.00662066554650664,0.387978374958038,0.416656672954559,0.337617635726929,0.0103567326441407,0.486171543598175,0.47906419634819,0.498831510543823,0.482970893383026,0.48268136382103,0.435824930667877,0.455651253461838,0.446213185787201,0.464510530233383,0.396390706300735,0.0377589128911495,0.031072786077857,0.00150687724817544,0.0224732290953398,0.00124005973339081,0.00769013585522771,0.0019029772374779,0.0234128329902887,0.0137590598315001,0.0054404535330832,0.0225245822221041,0.0112551087513566,0.0140783805400133,0.00170884584076703,0.0353902839124203,0.470450043678284,0.0195930507034063\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.387236956053205,-0.920497931608773,0.0522593739742224,0,-0.920820074405676,-0.38328532604609,0.0719910237843162,0,-0.0462373391529367,-0.0759990671060605,-0.996035235121564,0,22.0773077684876,39.5994348948192,-2.25142358930824,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.387236971119137,-0.920820110231315,-0.0462373409518574,0,-0.920497985495389,-0.38328534848389,-0.0759990715551009,0,0.0522593771475497,0.0719910281558015,-0.996035295603456,0,28.0197082511753,35.6691944754238,1.78781893239835,1\n\t\t} \n\t}\n\tDeformer: 130861392, \"SubDeformer::Cluster_L_Pinky3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *59 {\n\t\t\ta: 6237,6243,6244,6245,6247,6248,6249,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6283,6286,6287,6288,6289,6291,6292,6302,6402,6411,6412,6414,6415,6416,6417,6428,6430,6470,6471,6472,6473,6476\n\t\t} \n\t\tWeights: *59 {\n\t\t\ta: 0.0028082043863833,0.00591129856184125,0.00213855970650911,0.00684588542208076,0.00461385771632195,0.00100696296431124,0.00220880098640919,0.00101241818629205,0.00189215911086649,0.00694409897550941,0.00265500461682677,0.00246238824911416,0.012714060023427,0.00751850241795182,0.315340012311935,0.282398045063019,0.0182183086872101,0.290860831737518,0.488589286804199,0.48065397143364,0.484326124191284,0.483070969581604,0.486769676208496,0.441025704145432,0.428589582443237,0.476955205202103,0.4646817445755,0.0394535250961781,0.0268322117626667,0.368200391530991,0.00765684433281422,0.026226406916976,0.00414335122331977,0.00356931705027819,0.00267733377404511,0.00140286923851818,0.00212792283855379,0.00176225416362286,0.00486125983297825,0.00576191581785679,0.0130852656438947,0.0104430476203561,0.00325614050962031,0.0129974083974957,0.00201679929159582,0.00505299167707562,0.00323858973570168,0.00118227885104716,0.00599130569025874,0.00718945031985641,0.00294233672320843,0.00191051140427589,0.0024373906198889,0.00133377616293728,0.472831279039383,0.00406493013724685,0.00552025018259883,0.00154034374281764,0.00117001007311046\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.407760985670509,-0.893470954340694,-0.188256780336324,0,-0.896533461841144,-0.430848801096771,0.102941957451532,0,-0.173085860177758,0.126802791082547,-0.976709938167127,0,21.509000619089,40.1573955629144,1.91200401428514,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.407760991938071,-0.896533475621468,-0.173085862838205,0,-0.893470969097868,-0.430848808212964,0.126802793176909,0,-0.18825678687618,0.102941961027635,-0.976709972097069,0,27.4688834342309,36.3884796586712,0.498307394296883,1\n\t\t} \n\t}\n\tDeformer: 130843872, \"SubDeformer::Cluster_R_Thumb3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *574 {\n\t\t\ta: 4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,6722,6723,6728,6729,6741,6746,6747,6763,6764,6766,6767,6768,6769,6770,6771,6791,6797,6798,6801,6802,6809,6840,6846,6849,6850,6852,6853,6873,6879,6880,6881,6882,6907,6908,7053,7057,7058,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7107,7108,7153,7156,7157,7169,7170,7171,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7316,7322,7323,7336,7338,7339,7352,\n7354,7355,7356,7357,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7376,7377,7378,7379,7380,7383,7384,7385,7386,7387,7388,7390,7399,7409,7411,7413,7414,7415,7416,7417,7418,7424,7425,7427,7428,7429,7430,7431,7432,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7449,7450,7451,7452,7453,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7497,7498,7499,7500,7501,7502,7504,7509,7510,7513,7514,7515,7522,7523,7524,7525,7535,7536,7537,7540,7541,7542,7543,7544,7545,7546,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7806,7808,7913,7914,7917,7933,7934,7935,7957,7958,7959,7967,7970\n\t\t} \n\t\tWeights: *574 {\n\t\t\ta: 0.0206349026411772,0.0207134280353785,0.0197373144328594,0.0196153838187456,0.0208342466503382,0.0199247840791941,0.020967910066247,0.0201352816075087,0.0210805311799049,0.0203174632042646,0.0211408846080303,0.0204198118299246,0.0211298149079084,0.0204070769250393,0.0210484024137259,0.0202776417136192,0.0209195241332054,0.0200689751654863,0.0207806546241045,0.0198448244482279,0.0206709150224924,0.0196701399981976,0.0206186510622501,0.0195889733731747,0.00788491498678923,0.00782912876456976,0.00798560492694378,0.00810904148966074,0.00822552479803562,0.00830235239118338,0.00831402372568846,0.00825399998575449,0.00813997536897659,0.00800746586173773,0.00789522379636765,0.0078317066654563,0.00756945041939616,0.00753615191206336,0.00763061735779047,0.00770501187071204,0.00777393067255616,0.00781835243105888,0.00782459136098623,0.00778975104913116,0.00772374542430043,0.0076460363343358,0.00757865281775594,0.00753908278420568,0.0208766013383865,0.00767658930271864,0.0181122086942196,0.0179667640477419,0.0192471258342266,0.0195576250553131,0.017364664003253,0.0171640403568745,0.0164985246956348,0.0164657682180405,0.0169501658529043,0.015617867000401,0.015304802916944,0.0159808788448572,0.0174158401787281,0.0186776164919138,0.0176764409989119,0.0164042636752129,0.0190876293927431,0.0152460727840662,0.0163333211094141,0.0142878238111734,0.0102278674021363,0.00993511267006397,0.0138036357238889,0.0146821737289429,0.0105258813127875,0.0151098612695932,0.010812477208674,0.0161618869751692,0.0113155674189329,0.010036863386631,0.013737072236836,0.00630041444674134,0.00632011285051703,0.00639667548239231,0.00648933136835694,0.00651344237849116,0.0065743844024837,0.0242732800543308,0.0226891804486513,0.0237810015678406,0.0253286696970463,0.0245126951485872,0.0229471866041422,0.0232219379395247,0.0217602085322142,0.0205131359398365,0.019203070551157,0.0137072140350938,0.0126667339354753,0.00796764250844717,0.00723331281915307,0.0209724307060242,0.0204414576292038,0.0208601392805576,0.0206289663910866,0.0196539610624313,\n0.017655873671174,0.0119224833324552,0.00687668472528458,0.00526865758001804,0.0059863431379199,0.00525120692327619,0.00509030371904373,0.00596990715712309,0.00598286464810371,0.00556904869154096,0.00575726106762886,0.00705313589423895,0.00537844654172659,0.00546752708032727,0.00539919128641486,0.00507829757407308,0.00518155843019485,0.00542729906737804,0.0054210158996284,0.00563446758314967,0.00527805602177978,0.0065749972127378,0.00604006601497531,0.0215511415153742,0.0223440397530794,0.0224162228405476,0.0238475557416677,0.0218440778553486,0.0207823850214481,0.0184687711298466,0.0122669553384185,0.00555890798568726,0.0136925457045436,0.0145726623013616,0.0157181173563004,0.0136122927069664,0.0103479130193591,0.0108167203143239,0.0125496638938785,0.0101373661309481,0.00664365477859974,0.00665161525830626,0.00682164169847965,0.017512883991003,0.0179883632808924,0.012053057551384,0.00690233474597335,0.00658051390200853,0.00692128064110875,0.00667546642944217,0.021394906565547,0.0230478588491678,0.0239932388067245,0.0223625525832176,0.0229776855558157,0.0193508043885231,0.0216651074588299,0.0237432606518269,0.0216814745217562,0.0233111679553986,0.020858034491539,0.0221959985792637,0.018921347334981,0.01983792334795,0.0134088853374124,0.0136114526540041,0.00840287376195192,0.00817271880805492,0.0186147596687078,0.0228341855108738,0.019296795129776,0.0251542255282402,0.0243113692849875,0.00689046317711473,0.00623401440680027,0.0241503212600946,0.00160878302995116,0.00129173509776592,0.00135680811945349,0.0012447964400053,0.0023350368719548,0.00148189126048237,0.0011633113026619,0.00110392994247377,0.00112566619645804,0.00116727291606367,0.00214046915061772,0.0021126929204911,0.00183219206519425,0.00118055264465511,0.00219332682900131,0.00100228341761976,0.00213657296262681,0.00122010568156838,0.00124321086332202,0.00112911232281476,0.00185839796904475,0.00145611027255654,0.00128630979452282,0.00131676276214421,0.00158617389388382,0.00108790420927107,0.00129958556499332,0.00112535338848829,0.00239369086921215,0.00157444574870169,\n0.00148654624354094,0.00162770645692945,0.00123939570039511,0.00106196757405996,0.00331193278543651,0.00375480088405311,0.030896969139576,0.00342011218890548,0.0314387418329716,0.0545489490032196,0.0613855123519897,0.0314983911812305,0.0380797535181046,0.0281153731048107,0.0474898740649223,0.357097029685974,0.441101938486099,0.374418169260025,0.496286422014236,0.446939200162888,0.494744300842285,0.488472163677216,0.483908146619797,0.487448483705521,0.480925589799881,0.477854013442993,0.481168687343597,0.477437734603882,0.493003726005554,0.491661250591278,0.477780610322952,0.488146930932999,0.491288512945175,0.490701496601105,0.453511834144592,0.400647670030594,0.362474709749222,0.346060484647751,0.0186582077294588,0.0302668269723654,0.0325701758265495,0.006045778747648,0.00994227733463049,0.0142911607399583,0.0085002314299345,0.00303881824947894,0.00225531472824514,0.00293149356730282,0.00189879583194852,0.00170789589174092,0.00283215427771211,0.00307905371300876,0.00244881375692785,0.0215538665652275,0.00817420054227114,0.0198179297149181,0.0167206320911646,0.0204745102673769,0.0128827076405287,0.0194632522761822,0.0188274458050728,0.0182689521461725,0.0176447071135044,0.0172243285924196,0.0133353779092431,0.012190000154078,0.0174007099121809,0.0154236424714327,0.0162051524966955,0.0151703329756856,0.0145016135647893,0.0117002241313457,0.00993908103555441,0.00885243806988001,0.00738500291481614,0.00533117121085525,0.00415570707991719,0.018776623532176,0.0151461735367775,0.00989001058042049,0.00656149117276073,0.00867951009422541,0.00545969419181347,0.00419409060850739,0.0036546946503222,0.00388043047860265,0.0102285426110029,0.0109922336414456,0.011212820187211,0.011874170973897,0.0128773888573051,0.014671872369945,0.0134199876338243,0.0147367622703314,0.0129374144598842,0.00857102498412132,0.00913834292441607,0.00777323078364134,0.00717859389260411,0.00542860059067607,0.00449881935492158,0.0031835213303566,0.00312779331579804,0.0037035767454654,0.00317463185638189,0.00338264461606741,0.00893745757639408,0.0100510297343135,\n0.0108140856027603,0.0117486612871289,0.0122409416362643,0.00451468676328659,0.00393110932782292,0.00373097020201385,0.00271735526621342,0.00212495261803269,0.00191046798136085,0.00185692752711475,0.00193583639338613,0.0038805129006505,0.00357974087819457,0.00360461231321096,0.0035831171553582,0.0221672374755144,0.0216475501656532,0.0232979413121939,0.0227267239242792,0.0212558414787054,0.0213878713548183,0.0223234593868256,0.0210523474961519,0.0189590454101563,0.0212541595101357,0.0170140545815229,0.0229142792522907,0.0224664770066738,0.0243328101933002,0.0238737054169178,0.0234900992363691,0.0218856371939182,0.0175896864384413,0.0038775650318712,0.0221874229609966,0.0193830914795399,0.0190263278782368,0.0187140088528395,0.0205218344926834,0.0220660660415888,0.0231052581220865,0.0211554951965809,0.0121488925069571,0.0109862107783556,0.0107390657067299,0.0111830253154039,0.00352118560113013,0.00373788271099329,0.0161291547119617,0.0148201314732432,0.0186025146394968,0.0189929381012917,0.0184073783457279,0.0186326559633017,0.0197839718312025,0.0201774407178164,0.0187430661171675,0.018826674669981,0.0170398093760014,0.00637531839311123,0.0164432302117348,0.00738882645964623,0.0185393039137125,0.0195395369082689,0.0177061557769775,0.01780916005373,0.0182453524321318,0.0152524942532182,0.0192229803651571,0.00500145647674799,0.00770826498046517,0.0079919770359993,0.00751691404730082,0.00616343040019274,0.00610489910468459,0.00630897469818592,0.00628916407003999,0.00598625093698502,0.0048967176117003,0.00479170912876725,0.00100405083503574,0.00160079426132143,0.00141929858364165,0.00125143490731716,0.00160475785378367,0.00141920440364629,0.00139734172262251,0.00224228156730533,0.00232772389426827,0.00225778995081782,0.00207510311156511,0.00256772199645638,0.0027859196998179,0.00332566141150892,0.0031807953491807,0.00739510217681527,0.0069126570597291,0.00621898286044598,0.00728207407519221,0.00265317363664508,0.00284682074561715,0.00182450644206256,0.00242256047204137,0.0055518732406199,0.0061364620923996,0.00198462349362671,\n0.00135667133145034,0.00205559935420752,0.00380312139168382,0.00420815823599696,0.00297090061940253,0.0017306130612269,0.00121383473742753,0.0013610718306154,0.00124339619651437,0.0023764178622514,0.00226104166358709,0.00185194308869541,0.00342356716282666,0.00380428275093436,0.00267043663188815,0.00157270825002342,0.00113264902029186,0.0018668407574296,0.00228324695490301,0.00129903561901301,0.00562178948894143,0.00653486745432019,0.00579681154340506,0.00362190813757479,0.0032473006285727,0.0010425541549921,0.00166034791618586,0.00213556736707687,0.00193362182471901,0.0033060503192246,0.00376513623632491,0.00419513089582324,0.00159871904179454,0.00179069326259196,0.00211882498115301,0.00271622347645462,0.00255756848491728,0.00192118179984391,0.0011733747087419,0.00109545432496816,0.00220512063242495,0.00709376437589526,0.00795820541679859,0.00799622107297182,0.00710853468626738,0.00609957706183195,0.00381770473904908,0.00473736319690943,0.00222578062675893,0.00509891239926219,0.00686382222920656,0.00414189184084535,0.00239852466620505,0.00162839086260647,0.00162805255968124,0.00251073832623661,0.00347989099100232,0.00331477355211973,0.00349547853693366,0.00321043259464204,0.00244455621577799,0.00413611950352788,0.00327009102329612,0.00156419666018337,0.00257822382263839,0.00607397267594934,0.00823282450437546,0.00776788638904691,0.00473087746649981,0.00330061535350978,0.0025250562466681,0.00152857240755111,0.00183194293640554,0.00153524335473776,0.00137504853773862,0.00150840170681477,0.00229560048319399,0.00346118840388954,0.00357474712654948,0.00299402745440602,0.00216723675839603,0.00185670738574117,0.00111249752808362,0.00113845674786717,0.00119416764937341,0.00159454462118447,0.00178431125823408,0.00155328854452819,0.00169874343555421,0.00148680072743446,0.00110015727113932,0.00114206888247281,0.0010633486090228,0.00107124063652009,0.00571294734254479,0.00447713444009423,0.00330340163782239,0.00269269663840532,0.00229857652448118,0.00221802247688174,0.0020226901397109,0.00163530313875526,0.00180016760714352,\n0.00272176787257195,0.00381707167252898,0.00220523751340806,0.00238436763174832,0.00327288988046348,0.00446160836145282,0.00157232687342912,0.00185892870649695,0.00203555263578892,0.0046623470261693,0.00693457946181297,0.00711830705404282,0.00647621788084507,0.00254868599586189,0.00479469215497375,0.00661462964490056,0.00463264249265194,0.00530045060440898,0.00568296201527119,0.00735452771186829,0.00869803410023451,0.00973954610526562,0.0102844815701246,0.0102041307836771,0.00881630834192038,0.00401451764628291,0.00498052220791578,0.0047067110426724,0.00366361252963543,0.00462863780558109,0.00309047941118479,0.00190148048568517,0.00101162947248667,0.00110797781962901,0.00139670318458229,0.00118378805927932,0.00152170250657946,0.00218712538480759,0.00209142896346748,0.00139660085551441,0.00129944365471601,0.00151631084736437,0.0012562193442136,0.00226996839046478,0.00154895684681833\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: 0.200525319605825,-0.844394449148324,0.496777179549792,0,-0.702343995267135,-0.477423749021521,-0.527995666348738,0,0.683009852073652,-0.243031979744324,-0.68879092601797,0,26.872808589569,1.33926660969348,38.4516999417911,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: 0.200525329728245,-0.702344030721116,0.683009886551655,0,-0.844394478650866,-0.477423765702369,-0.243031988235689,0,0.496777214538215,-0.527995703535904,-0.688790974530079,0,-23.359737863823,39.8156867725917,8.45627455609007,1\n\t\t} \n\t}\n\tDeformer: 130854384, \"SubDeformer::Cluster_R_Index3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *48 {\n\t\t\ta: 7017,7020,7021,7022,7023,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7054,7055,7121,7124,7125,7126,7127,7128,7129,7130,7149,7163,7165,7166,7167,7168\n\t\t} \n\t\tWeights: *48 {\n\t\t\ta: 0.0101615088060498,0.0229801908135414,0.0135756079107523,0.0224668979644775,0.0134341223165393,0.0261847041547298,0.031180327758193,0.0206251200288534,0.00532444892451167,0.00404853792861104,0.0273718051612377,0.00240944442339242,0.0034473619889468,0.00143961887806654,0.00180354132317007,0.00161263684276491,0.00291394721716642,0.00918020773679018,0.0127796493470669,0.0143848909065127,0.383575648069382,0.356072396039963,0.468806743621826,0.480103701353073,0.499032914638519,0.461361408233643,0.467299968004227,0.476862788200378,0.464165151119232,0.463425189256668,0.472311437129974,0.0294841714203358,0.024617824703455,0.00234879832714796,0.00223406916484237,0.0408354513347149,0.0222049206495285,0.380914241075516,0.347071617841721,0.00238839536905289,0.00339022045955062,0.00366555782966316,0.00173941173125058,0.00441070273518562,0.0152303511276841,0.00406680861487985,0.00302362628281116,0.468955308198929\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.364861744458599,0.690991822556432,0.624024157870216,0,-0.891041868342785,-0.453532336509674,-0.0187812675980029,0,0.270037436703439,-0.562884245045662,0.781179267695881,0,21.400601210705,40.4969467539201,10.9593068147554,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.364861773308025,-0.891041938796993,0.270037458055156,0,0.690991855433543,-0.453532358088558,-0.562884271827465,0,0.624024199120653,-0.0187812688395183,0.781179319334886,0,-27.0136717272842,37.6413386384827,8.45494659509225,1\n\t\t} \n\t}\n\tDeformer: 130848544, \"SubDeformer::Cluster_R_Middle3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *43 {\n\t\t\ta: 6991,6992,6995,6996,6997,6998,6999,7000,7001,7002,7008,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7025,7026,7027,7028,7031,7043,7044,7046,7047,7048,7049,7050,7051,7126,7127,7162,7165,7168\n\t\t} \n\t\tWeights: *43 {\n\t\t\ta: 0.016761826351285,0.0327525436878204,0.0260655898600817,0.115334317088127,0.0583750233054161,0.0969952940940857,0.0520107224583626,0.0599400214850903,0.0216762609779835,0.0182991288602352,0.00387279852293432,0.0026070331223309,0.0157421063631773,0.0266785137355328,0.437584847211838,0.410475611686707,0.476766288280487,0.481962472200394,0.487495481967926,0.49189567565918,0.480631649494171,0.482351124286652,0.465472191572189,0.48048734664917,0.487918704748154,0.197620660066605,0.0147266173735261,0.0349608920514584,0.449677228927612,0.0217390302568674,0.0425560437142849,0.0204605255275965,0.00591357192024589,0.038311630487442,0.0179284252226353,0.00165145879145712,0.00414461409673095,0.0224138833582401,0.00393291655927897,0.00567780341953039,0.0500728152692318,0.480987906455994,0.0343999676406384\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.481422785176835,0.779765319558555,0.40024746206003,0,-0.861020536585011,-0.506149284513551,-0.0495624164792136,0,0.163937923853037,-0.368481771624397,0.915065812642581,0,17.3434308995453,43.4950490005919,6.55023114588821,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.481422830726269,-0.861020618049782,0.163937939363893,0,0.779765422628502,-0.506149351416733,-0.368481820330585,0,0.400247499891431,-0.0495624211638547,0.915065899134627,0,-28.1881253078821,37.2726877484919,7.18999535488276,1\n\t\t} \n\t}\n\tDeformer: 130849712, \"SubDeformer::Cluster_R_Ring3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *45 {\n\t\t\ta: 6964,6965,6966,6969,6970,6971,6972,6973,6976,6982,6983,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001,7002,7003,7004,7008,7012,7013,7014,7016,7017,7018,7019,7020,7022,7117,7158,7162,7165\n\t\t} \n\t\tWeights: *45 {\n\t\t\ta: 0.00131166935898364,0.0117081198841333,0.0238597877323627,0.0171741582453251,0.115294389426708,0.0155567303299904,0.0101941684260964,0.0685082525014877,0.0103107020258904,0.00144403614103794,0.00316327856853604,0.00744051160290837,0.00404223706573248,0.447492778301239,0.429092288017273,0.389249831438065,0.0174639020115137,0.484207719564438,0.478153556585312,0.499409109354019,0.489902287721634,0.479123532772064,0.434379041194916,0.463143467903137,0.442066639661789,0.463111817836761,0.410636335611343,0.0470488779246807,0.0328258499503136,0.00182847154792398,0.0277167167514563,0.00191423017531633,0.00806708075106144,0.0110489251092076,0.00255572586320341,0.0283467769622803,0.0148475430905819,0.00837578997015953,0.0282952189445496,0.0123175773769617,0.0165584031492472,0.00247255084104836,0.0448792017996311,0.467338800430298,0.0227938573807478\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.446935126929394,0.875983205249199,0.181390072245155,0,-0.894507209233465,-0.439952904404044,-0.0793612976075899,0,0.0102839251840175,-0.197724083962655,0.980203758597428,0,20.6962879889423,42.5736113822138,2.63824437762396,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.446935165289291,-0.894507286007929,0.0102839260666741,0,0.875983251368767,-0.439952927567088,-0.197724094372613,0,0.181390075467443,-0.0793612990173964,0.980203776010172,0,-28.522422974648,37.4527398650693,5.61897255820232,1\n\t\t} \n\t}\n\tDeformer: 130930640, \"SubDeformer::Cluster_R_Pinky3\", \"Cluster\" {\n\t\tVersion: 100\n\t\tProperties70:  {\n\t\t\tP: \"SrcModel\", \"object\", \"\", \"\"\n\t\t}\n\t\tUserData: \"\", \"\"\n\t\tIndexes: *59 {\n\t\t\ta: 6940,6941,6946,6947,6948,6950,6951,6952,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,6989,6990,6991,6992,6994,6995,7005,7105,7114,7115,7117,7118,7119,7120,7131,7133,7158,7159,7160,7161,7164\n\t\t} \n\t\tWeights: *59 {\n\t\t\ta: 0.0029540981631726,0.00340022752061486,0.00514190411195159,0.00215059868060052,0.00547736883163452,0.0035235860850662,0.00184328865725547,0.0031976499594748,0.00340661476366222,0.00445797480642796,0.00196587364189327,0.00159703753888607,0.0202187430113554,0.00549371214583516,0.355474561452866,0.285276889801025,0.0310857817530632,0.371014595031738,0.486605674028397,0.479619711637497,0.495799422264099,0.493786364793777,0.482276678085327,0.43053936958313,0.448268443346024,0.47878086566925,0.454167634248734,0.055576641112566,0.0302723329514265,0.402357220649719,0.0076139303855598,0.0356811620295048,0.00618526106700301,0.00278126355260611,0.00223208218812943,0.00168520596344024,0.00120828486979008,0.00146028422750533,0.00699549773707986,0.0091273644939065,0.0148227522149682,0.0109403412789106,0.00498492131009698,0.0156873147934675,0.00253135734237731,0.00485804071649909,0.00442179199308157,0.00194254226516932,0.0086732842028141,0.0095840310677886,0.00492342142388225,0.00308714248239994,0.00303195556625724,0.00201294617727399,0.466875940561295,0.00367911183275282,0.00448152981698513,0.00220942520536482,0.00171917770057917\n\t\t} \n\t\tTransform: *16 {\n\t\t\ta: -0.482801733001442,0.873602557741718,-0.0609999574633026,0,-0.868441857024725,-0.486588658706074,-0.0950796906612072,0,-0.112743748995228,0.00707027705556762,0.9935989294111,0,20.0346283563877,43.0828852057132,-2.32465793019685,1\n\t\t} \n\t\tTransformLink: *16 {\n\t\t\ta: -0.48280176903813,-0.868441921845883,-0.112743757410506,0,0.873602609728157,-0.486588687662048,0.00707027747630639,0,-0.0609999589935693,-0.0950796930464102,0.993598954336881,0,-28.1063709762603,38.141527963791,4.26394901497251,1\n\t\t} \n\t}\n\tVideo: 125241152, \"Video::character_anim:file2\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\head.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\head.tga\"\n\t\tRelativeFilename: \"head.tga\"\n\t}\n\tVideo: 125241792, \"Video::character_anim:file1\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\jacket.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\jacket.tga\"\n\t\tRelativeFilename: \"jacket.tga\"\n\t}\n\tVideo: 126003728, \"Video::character_anim:file6\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\pants.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\pants.tga\"\n\t\tRelativeFilename: \"pants.tga\"\n\t}\n\tVideo: 126004368, \"Video::character_anim:file8\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\upBodyC.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\upBodyC.tga\"\n\t\tRelativeFilename: \"upBodyC.tga\"\n\t}\n\tVideo: 126005008, \"Video::character_anim:file13\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\upBodyC.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\upBodyC.tga\"\n\t\tRelativeFilename: \"upBodyC.tga\"\n\t}\n\tVideo: 126003088, \"Video::character_anim:soldier_bindPose:file9\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"headS.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"headS.tga\"\n\t\tRelativeFilename: \"headS.tga\"\n\t}\n\tVideo: 125999248, \"Video::character_anim:file10\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"jacketS.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"jacketS.tga\"\n\t\tRelativeFilename: \"jacketS.tga\"\n\t}\n\tVideo: 125997968, \"Video::character_anim:file12\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"pantsS.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"pantsS.tga\"\n\t\tRelativeFilename: \"pantsS.tga\"\n\t}\n\tVideo: 126002448, \"Video::character_anim:file11\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"upBodyS.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"upBodyS.tga\"\n\t\tRelativeFilename: \"upBodyS.tga\"\n\t}\n\tVideo: 125998608, \"Video::character_anim:file15\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"upBodyS.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"upBodyS.tga\"\n\t\tRelativeFilename: \"upBodyS.tga\"\n\t}\n\tVideo: 125999888, \"Video::character_anim:file3\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"headN.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"headN.tga\"\n\t\tRelativeFilename: \"headN.tga\"\n\t}\n\tVideo: 126000528, \"Video::character_anim:file4\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"jacketN.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"jacketN.tga\"\n\t\tRelativeFilename: \"jacketN.tga\"\n\t}\n\tVideo: 126001168, \"Video::character_anim:file7\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"pantsN.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"pantsN.tga\"\n\t\tRelativeFilename: \"pantsN.tga\"\n\t}\n\tVideo: 126001808, \"Video::character_anim:file5\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"upbodyN.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"upbodyN.tga\"\n\t\tRelativeFilename: \"upbodyN.tga\"\n\t}\n\tVideo: 136659152, \"Video::character_anim:file14\", \"Clip\" {\n\t\tType: \"Clip\"\n\t\tProperties70:  {\n\t\t\tP: \"Path\", \"KString\", \"XRefUrl\", \"\", \"upbodyN.tga\"\n\t\t\tP: \"PlaySpeed\", \"double\", \"Number\", \"\",1\n\t\t}\n\t\tUseMipMap: 0\n\t\tFilename: \"upbodyN.tga\"\n\t\tRelativeFilename: \"upbodyN.tga\"\n\t}\n\tTexture: 133131328, \"Texture::character_anim:file2\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file2\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file2\"\n\t\tFileName: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\head.tga\"\n\t\tRelativeFilename: \"head.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 133273888, \"Texture::character_anim:file1\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file1\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file1\"\n\t\tFileName: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\jacket.tga\"\n\t\tRelativeFilename: \"jacket.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 133274640, \"Texture::character_anim:file6\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file6\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file6\"\n\t\tFileName: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\pants.tga\"\n\t\tRelativeFilename: \"pants.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 133302528, \"Texture::character_anim:file8\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file8\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file8\"\n\t\tFileName: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\upBodyC.tga\"\n\t\tRelativeFilename: \"upBodyC.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 133303280, \"Texture::character_anim:file13\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file13\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file13\"\n\t\tFileName: \"E:\\Projects\\MonoGame\\Test\\Assets\\Models\\Dude\\upBodyC.tga\"\n\t\tRelativeFilename: \"upBodyC.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125298944, \"Texture::character_anim:soldier_bindPose:file9\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:soldier_bindPose:file9\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:soldier_bindPose:file9\"\n\t\tFileName: \"headS.tga\"\n\t\tRelativeFilename: \"headS.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125299696, \"Texture::character_anim:file10\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file10\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file10\"\n\t\tFileName: \"jacketS.tga\"\n\t\tRelativeFilename: \"jacketS.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125235136, \"Texture::character_anim:file12\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file12\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file12\"\n\t\tFileName: \"pantsS.tga\"\n\t\tRelativeFilename: \"pantsS.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125235888, \"Texture::character_anim:file11\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file11\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file11\"\n\t\tFileName: \"upBodyS.tga\"\n\t\tRelativeFilename: \"upBodyS.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125236640, \"Texture::character_anim:file15\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file15\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file15\"\n\t\tFileName: \"upBodyS.tga\"\n\t\tRelativeFilename: \"upBodyS.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125237392, \"Texture::character_anim:file3\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file3\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file3\"\n\t\tFileName: \"headN.tga\"\n\t\tRelativeFilename: \"headN.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125238144, \"Texture::character_anim:file4\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file4\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file4\"\n\t\tFileName: \"jacketN.tga\"\n\t\tRelativeFilename: \"jacketN.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125238896, \"Texture::character_anim:file7\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file7\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file7\"\n\t\tFileName: \"pantsN.tga\"\n\t\tRelativeFilename: \"pantsN.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125239648, \"Texture::character_anim:file5\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file5\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file5\"\n\t\tFileName: \"upbodyN.tga\"\n\t\tRelativeFilename: \"upbodyN.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tTexture: 125240400, \"Texture::character_anim:file14\", \"\" {\n\t\tType: \"TextureVideoClip\"\n\t\tVersion: 202\n\t\tTextureName: \"Texture::character_anim:file14\"\n\t\tProperties70:  {\n\t\t\tP: \"CurrentTextureBlendMode\", \"enum\", \"\", \"\",0\n\t\t\tP: \"UVSet\", \"KString\", \"\", \"\", \"map1\"\n\t\t\tP: \"UseMaterial\", \"bool\", \"\", \"\",1\n\t\t\tP: \"VideoProperty\", \"object\", \"\", \"\"\n\t\t}\n\t\tMedia: \"Video::character_anim:file14\"\n\t\tFileName: \"upbodyN.tga\"\n\t\tRelativeFilename: \"upbodyN.tga\"\n\t\tModelUVTranslation: 0,0\n\t\tModelUVScaling: 1,1\n\t\tTexture_Alpha_Source: \"None\"\n\t\tCropping: 0,0,0,0\n\t}\n\tAnimationStack: 130965184, \"AnimStack::Take 001\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"LocalStart\", \"KTime\", \"Time\", \"\",1924423250\n\t\t\tP: \"LocalStop\", \"KTime\", \"Time\", \"\",57732697500\n\t\t\tP: \"ReferenceStart\", \"KTime\", \"Time\", \"\",1924423250\n\t\t\tP: \"ReferenceStop\", \"KTime\", \"Time\", \"\",57732697500\n\t\t}\n\t}\n\tAnimationLayer: 125203168, \"AnimLayer::Layer0\", \"\" {\n\t}\n\tAnimationCurveNode: 125161664, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-0.77721095085144\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.13318836688995\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.656980156898499\n\t\t}\n\t}\n\tAnimationCurveNode: 130891072, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",39.7229881286621\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-93.1371078491211\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",42.0879821777344\n\t\t}\n\t}\n\tAnimationCurveNode: 125193872, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 125194240, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 125675888, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 125676256, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.54331636428833\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.00359953427687287\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-1.3350340566376e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 125676624, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",2.96879076957703\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.549681961536407\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-5.84038019180298\n\t\t}\n\t}\n\tAnimationCurveNode: 130892928, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 125160992, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 130893296, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 136827728, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.54404973983765\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.00359953194856644\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",6.19496276499376e-008\n\t\t}\n\t}\n\tAnimationCurveNode: 136826992, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",2.77687907218933\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.67002356052399\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",5.42585277557373\n\t\t}\n\t}\n\tAnimationCurveNode: 136829568, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 136827360, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 136829936, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 136828096, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.5439600944519\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.00439895549789071\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",2.22052122467176e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 136828464, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",2.87556838989258\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.50368475914001\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.25706577301025\n\t\t}\n\t}\n\tAnimationCurveNode: 136828832, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 136829200, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 136830304, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 137457504, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",5.53625154495239\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.00288246641866863\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",5.17475982064752e-008\n\t\t}\n\t}\n\tAnimationCurveNode: 137456400, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-6.63933753967285\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.94592773914337\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",28.7092266082764\n\t\t}\n\t}\n\tAnimationCurveNode: 137455296, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 137458976, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 137455664, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 137457872, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",3.95389556884766\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.09085840449552e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",9.73389049363504e-008\n\t\t}\n\t}\n\tAnimationCurveNode: 137458240, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.423987865448\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.918177843093872\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-18.9311122894287\n\t\t}\n\t}\n\tAnimationCurveNode: 137456032, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 137454560, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 137458608, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 137460816, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.22069501876831\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.4060525894165\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.39484596252441\n\t\t}\n\t}\n\tAnimationCurveNode: 137453824, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",3.26757836341858\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 137459344, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 137459712, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 137456768, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 137461184, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.29626369476318\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.33319282531738\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-1.0660924911499\n\t\t}\n\t}\n\tAnimationCurveNode: 137460080, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",3.26757836341858\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 137454192, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 137454928, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 137460448, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 137457136, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.48259973526001\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",3.2479395866394\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.27459120750427\n\t\t}\n\t}\n\tAnimationCurveNode: 137461552, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.07939505577087\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.00536951329559088\n\t\t}\n\t}\n\tAnimationCurveNode: 131342512, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131344352, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131343984, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131344720, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.57700967788696\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",3.10706281661987\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-1.20767879486084\n\t\t}\n\t}\n\tAnimationCurveNode: 131350240, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.292065471410751\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.0640802830457687\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.30150443315506\n\t\t}\n\t}\n\tAnimationCurveNode: 131345088, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131345824, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131348032, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131345456, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",6.71029043197632\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.844819128513336\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.0320546366274357\n\t\t}\n\t}\n\tAnimationCurveNode: 131347664, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",9.80766296386719\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",60.3215827941895\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",41.7058372497559\n\t\t}\n\t}\n\tAnimationCurveNode: 131348768, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131346192, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131343248, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131346560, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",13.1421842575073\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.00144292858317e-009\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-3.49096410445782e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 131346928, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",33.6098442077637\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",17.2327537536621\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-13.2919816970825\n\t\t}\n\t}\n\tAnimationCurveNode: 131347296, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131348400, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131349136, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131349504, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",10.8255519866943\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",5.22714969974913e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",9.90214175544679e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 131349872, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-82.1016998291016\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",2.46786618232727\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.1264545917511\n\t\t}\n\t}\n\tAnimationCurveNode: 131342880, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131343616, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131428944, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131428576, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.62510848045349\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.626630425453186\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-1.67875993251801\n\t\t}\n\t}\n\tAnimationCurveNode: 131428208, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",119.229835510254\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",30.9591827392578\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",19.9485893249512\n\t\t}\n\t}\n\tAnimationCurveNode: 131431152, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131430416, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131426000, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131425264, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.1404322385788\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",2.85936584987212e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-1.81425923528877e-006\n\t\t}\n\t}\n\tAnimationCurveNode: 131430784, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",2.84072734757501e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.12636920796194e-008\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",17.8534507751465\n\t\t}\n\t}\n\tAnimationCurveNode: 131427104, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131427840, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131429312, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131429680, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.38246870040894\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-7.17560169505305e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.67166808246111e-006\n\t\t}\n\t}\n\tAnimationCurveNode: 131424528, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-7.58698934077984e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.2017899229686e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",8.96595764160156\n\t\t}\n\t}\n\tAnimationCurveNode: 131427472, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t}\n\t}\n\tAnimationCurveNode: 131431520, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131426736, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131431888, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.34874391555786\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.0162533205002546\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-1.56133377552032\n\t\t}\n\t}\n\tAnimationCurveNode: 131430048, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",12.0142822265625\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.66459441184998\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.92592287063599\n\t\t}\n\t}\n\tAnimationCurveNode: 131432256, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131425632, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131424896, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131426368, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.47369563579559\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",9.02053685081228e-008\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",5.82350480726745e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 136845648, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",7.5388690845557e-008\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.20740196002589e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",15.1926651000977\n\t\t}\n\t}\n\tAnimationCurveNode: 136844176, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 136846752, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 136846016, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 136843808, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.06284534931183\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.39810509836025e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",2.21882010009722e-006\n\t\t}\n\t}\n\tAnimationCurveNode: 136844544, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-7.97497079929599e-007\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",7.67177255056595e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-6.41338004925274e-008\n\t\t}\n\t}\n\tAnimationCurveNode: 136846384, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 136843440, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 136844912, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 136845280, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.35998678207397\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.000294537370791659\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-0.366859555244446\n\t\t}\n\t}\n\tAnimationCurveNode: 131533328, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.96983647346497\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.10134339332581\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",14.2388792037964\n\t\t}\n\t}\n\tAnimationCurveNode: 131531120, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131532224, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131532592, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131531488, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.52912437915802\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",7.80884704454365e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-3.64346448122888e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 131534064, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",7.24273192531655e-008\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",4.3645964069583e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",16.150936126709\n\t\t}\n\t}\n\tAnimationCurveNode: 131535536, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131532960, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131531856, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131533696, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.52912795543671\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",7.2803447892511e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",6.76120862408425e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 131534432, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",3.09046095026133e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-2.7093806238554e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.80611896514893\n\t\t}\n\t}\n\tAnimationCurveNode: 131536272, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131538112, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131535904, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131534800, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.29501485824585\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.0947425812482834\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.806466221809387\n\t\t}\n\t}\n\tAnimationCurveNode: 131536640, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-8.98741436004639\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.27314984798431\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",19.2985076904297\n\t\t}\n\t}\n\tAnimationCurveNode: 131537008, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131535168, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 131537376, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 131537744, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.40333545207977\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.16687704121432e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-2.30216258501059e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 131538480, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",2.20680271922902e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.11167731581463e-008\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",25.5660648345947\n\t\t}\n\t}\n\tAnimationCurveNode: 131538848, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134646400, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134640512, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134644928, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.38826143741608\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",2.13072965493666e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-2.23952710598496e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 134640880, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",9.02113819122314\n\t\t}\n\t}\n\tAnimationCurveNode: 134647504, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134639776, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134643088, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134641248, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",3.97267842292786\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.223487868905067\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.74283754825592\n\t\t}\n\t}\n\tAnimationCurveNode: 134645296, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-20.6544322967529\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.819446563720703\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",22.4568309783936\n\t\t}\n\t}\n\tAnimationCurveNode: 134646768, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134644192, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134641616, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134641984, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.13179302215576\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-2.16195689972665e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-4.03594668796359e-008\n\t\t}\n\t}\n\tAnimationCurveNode: 134640144, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134645664, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134647136, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134642352, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134643456, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.858954668045044\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",6.74906289077626e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",5.44045349215594e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 134646032, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-2.65944640887028e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",2.59772286881343e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.87032294273376\n\t\t}\n\t}\n\tAnimationCurveNode: 134642720, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134643824, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134644560, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134718368, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",6.88650560379028\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.05879163742065\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.188849896192551\n\t\t}\n\t}\n\tAnimationCurveNode: 134720576, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",42.592903137207\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-47.3313064575195\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-50.2629508972168\n\t\t}\n\t}\n\tAnimationCurveNode: 134715056, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134713952, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134720208, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134720944, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",13.1421842575073\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",9.03095610738092e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.16086266138882e-006\n\t\t}\n\t}\n\tAnimationCurveNode: 134719840, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-31.568567276001\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-28.5609245300293\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-47.7509155273438\n\t\t}\n\t}\n\tAnimationCurveNode: 134713584, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.99999988079071\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134721312, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134714320, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134716160, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",10.8255529403687\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",4.45484261035745e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-7.54761458665598e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 134714688, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",71.1884765625\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",10.1721467971802\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-14.7731218338013\n\t\t}\n\t}\n\tAnimationCurveNode: 134716528, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134716896, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134719104, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134715424, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.62510800361633\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.626631021499634\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.67876040935516\n\t\t}\n\t}\n\tAnimationCurveNode: 134715792, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-129.154998779297\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-42.0322799682617\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",34.3628196716309\n\t\t}\n\t}\n\tAnimationCurveNode: 134717264, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134717632, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 134718000, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 134718736, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.14043200016022\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.38291397888679e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",7.55724443024519e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 134719472, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",2.74146850642865e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.38374729835778e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",32.0624504089355\n\t\t}\n\t}\n\tAnimationCurveNode: 129431456, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129427776, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129427408, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129427040, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.38246870040894\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",3.77754112435014e-008\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-3.12997121909575e-006\n\t\t}\n\t}\n\tAnimationCurveNode: 129425568, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-7.38412791179144e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",2.46886565946625e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",2.01478266716003\n\t\t}\n\t}\n\tAnimationCurveNode: 129429984, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129426672, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129428880, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129431088, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.34874391555786\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.0162522289901972\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.56133341789246\n\t\t}\n\t}\n\tAnimationCurveNode: 129431824, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-11.8456792831421\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-2.26736164093018\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.35604390501976\n\t\t}\n\t}\n\tAnimationCurveNode: 129432192, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129425936, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129429616, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129428144, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.47369468212128\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.31795149577374e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.01659298429513e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129426304, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",3.5970981571154e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",2.03909712581662e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",18.2982807159424\n\t\t}\n\t}\n\tAnimationCurveNode: 129432560, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129433296, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129432928, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129430720, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.0628467798233\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-7.71003385580116e-008\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-3.79914951054161e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129428512, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",6.12122676102445e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.18875880161795e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",13.211012840271\n\t\t}\n\t}\n\tAnimationCurveNode: 129429248, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129430352, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129504128, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129501552, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.35998678207397\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.000293526856694371\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.366859257221222\n\t\t}\n\t}\n\tAnimationCurveNode: 129500080, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-1.12324810028076\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.13205850124359\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.1130610704422\n\t\t}\n\t}\n\tAnimationCurveNode: 129504864, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129503392, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129500448, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129501920, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.52912306785584\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.33934121954371e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",2.41871944695049e-009\n\t\t}\n\t}\n\tAnimationCurveNode: 129503760, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",3.29875911120325e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.02836747323454e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",18.566930770874\n\t\t}\n\t}\n\tAnimationCurveNode: 129504496, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129501184, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129499344, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129506336, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.529128074646\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.97209737962112e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-3.19399333648107e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129502288, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-5.25195036971127e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-6.89941970222208e-008\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.59999227523804\n\t\t}\n\t}\n\tAnimationCurveNode: 129502656, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129500816, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129507072, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129505232, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.29501342773438\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.0947411805391312\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-0.806465566158295\n\t\t}\n\t}\n\tAnimationCurveNode: 129505600, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",9.92037773132324\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",6.50482177734375\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",12.5329875946045\n\t\t}\n\t}\n\tAnimationCurveNode: 129505968, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129506704, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129503024, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129499712, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.40333533287048\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",3.56238683707488e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",8.68510085183516e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129593952, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-8.52487929137169e-008\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.5643117876607e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",27.2881908416748\n\t\t}\n\t}\n\tAnimationCurveNode: 129589536, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129591008, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129596528, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129590272, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.38826143741608\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-2.60250772043946e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.2035725660553e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129604992, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.73695445937483e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-8.55293436075044e-009\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",13.044979095459\n\t\t}\n\t}\n\tAnimationCurveNode: 129594688, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129596160, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129595056, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129590640, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",3.97267866134644\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.223486974835396\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-1.74283790588379\n\t\t}\n\t}\n\tAnimationCurveNode: 129599840, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",24.3684997558594\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",5.07718563079834\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",23.8567218780518\n\t\t}\n\t}\n\tAnimationCurveNode: 129597264, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129595424, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129603888, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129597632, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.13179266452789\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-4.5721540118393e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-2.5465004682701e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129598368, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.28670376398077e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",2.94697493075091e-008\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",21.8681793212891\n\t\t}\n\t}\n\tAnimationCurveNode: 129593216, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129591376, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129591744, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129600576, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.858952879905701\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-2.68376516032731e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.09315595359294e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129594320, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",5.75897359848022\n\t\t}\n\t}\n\tAnimationCurveNode: 129592848, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129589904, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129598000, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129601312, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-3.76930594444275\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.355237752199173\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.4951446056366\n\t\t}\n\t}\n\tAnimationCurveNode: 129603152, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-14.2042036056519\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-164.144622802734\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-29.484790802002\n\t\t}\n\t}\n\tAnimationCurveNode: 129605360, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129598736, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129602416, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129595792, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",18.257194519043\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-6.12689859735838e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1.20223648991669e-006\n\t\t}\n\t}\n\tAnimationCurveNode: 129596896, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",9.30474472045898\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.54519647359848\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-24.0315208435059\n\t\t}\n\t}\n\tAnimationCurveNode: 129592112, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129599104, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129600944, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129604624, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",15.4280042648315\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.32429221366692e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",3.40772317031224e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129593584, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-4.13260126113892\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.2486013174057\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",7.7121057510376\n\t\t}\n\t}\n\tAnimationCurveNode: 129599472, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129592480, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129600208, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129601680, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",5.25022077560425\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",6.27384853363037\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-7.13063798229996e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129602048, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",5.08523999087629e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.36317566507205e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",104.594673156738\n\t\t}\n\t}\n\tAnimationCurveNode: 129602784, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129603520, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129604256, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129681488, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-3.76930618286133\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-0.355218410491943\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-3.49514603614807\n\t\t}\n\t}\n\tAnimationCurveNode: 129686272, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",8.09784317016602\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",184.387466430664\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.917054355144501\n\t\t}\n\t}\n\tAnimationCurveNode: 129676704, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129678544, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129677808, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129682960, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",18.257194519043\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-1.20693221106194e-006\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-1.28146643874061e-006\n\t\t}\n\t}\n\tAnimationCurveNode: 129683328, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",-1.3035603761673\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-4.911376953125\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-31.2710037231445\n\t\t}\n\t}\n\tAnimationCurveNode: 129682592, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129679280, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129687376, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129678912, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",15.4280042648315\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.89655921190024e-007\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",5.16880504619621e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129674864, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",4.14072751998901\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.20476734638214\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",25.1047039031982\n\t\t}\n\t}\n\tAnimationCurveNode: 129673392, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",0.999999940395355\n\t\t}\n\t}\n\tAnimationCurveNode: 129685904, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129681856, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurveNode: 129675232, \"AnimCurveNode::T\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",5.25022077560425\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",6.27385330200195\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",-4.15015392718487e-007\n\t\t}\n\t}\n\tAnimationCurveNode: 129686640, \"AnimCurveNode::R\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1.04748585272318e-006\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",-3.46426012876044e-011\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",104.594665527344\n\t\t}\n\t}\n\tAnimationCurveNode: 129681120, \"AnimCurveNode::S\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|X\", \"Number\", \"\", \"A\",1\n\t\t\tP: \"d|Y\", \"Number\", \"\", \"A\",1.00000011920929\n\t\t\tP: \"d|Z\", \"Number\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129680752, \"AnimCurveNode::Visibility\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|Visibility\", \"Visibility\", \"\", \"A\",1\n\t\t}\n\t}\n\tAnimationCurveNode: 129684432, \"AnimCurveNode::liw\", \"\" {\n\t\tProperties70:  {\n\t\t\tP: \"d|liw\", \"Bool\", \"\", \"A\",0\n\t\t}\n\t}\n\tAnimationCurve: 130891648, \"AnimCurve::\", \"\" {\n\t\tDefault: -0.77721095085144\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -0.5862113,-0.5844057,-0.6384128,-0.7069224,-0.7870775,-0.8135177,-0.8270722,-0.8073918,-0.761929,-0.7053674,-0.6570426,-0.6322919,-0.6477298,-0.7182612,-0.8657023,-1.051715,-1.15123,-1.105674,-1.039522,-0.9493799,-0.8788875,-0.8425765,-0.7185158,-0.7153105,-0.7035044,-0.7002378,-0.6961251,-0.6823247,-0.6644345,-0.6502793,-0.6427273,-0.6408071,-0.6557925,-0.7044126,-0.7878727,-0.7851791,-0.7098677,-0.6557797,-0.5862632\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *39 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *156 {\n\t\t\ta: 0.8913562,-0.7830235,1.179961e-015,0,-0.7830235,-1.837749,1.187599e-015,0,-1.837749,-2.229971,1.187599e-015,0,-2.229971,-1.598931,1.187599e-015,0,-1.598931,-0.5999199,1.18066e-015,0,-0.5999199,0.0918889,1.18066e-015,0,0.0918889,0.9771475,1.18066e-015,0,0.9771475,1.530366,1.187599e-015,0,1.530366,1.573296,1.18066e-015,0,1.573296,1.097367,1.18066e-015,0,1.097367,0.1472396,1.097392e-015,0,0.1472396,-1.290681,1.187599e-015,0,-1.290681,-3.269588,1.18066e-015,0,-3.269588,-5.001809,1.187599e-015,0,-5.001809,-4.282917,1.18066e-015,0,-4.282917,-0.8093869,1.18066e-015,0,-0.8093869,1.675619,1.18066e-015,0,1.675619,2.344416,1.18066e-015,0,2.344416,2.409521,1.18066e-015,0,2.409521,1.60205,1.18066e-015,0,1.60205,2.421442,1.18066e-015,0,2.421442,1.9318,1.097392e-015,0,1.9318,0.2252747,1.187599e-015,0,0.2252747,0.2260915,1.18066e-015,0,0.2260915,0.1106894,1.18066e-015,0,0.1106894,0.2686957,1.18066e-015,0,0.2686957,0.4753599,1.18066e-015,0,0.4753599,0.4806813,1.18066e-015,0,0.4806813,0.3256077,1.18066e-015,0,0.3256077,0.1420829,1.18066e-015,0,0.1420829,-0.1959774,1.18066e-015,0,-0.1959774,-0.9540824,1.18066e-015,0,-0.9540824,-1.981203,1.18066e-015,0,-1.981203,-1.211498,1.18066e-015,0,-1.211498,1.170074,1.18066e-015,0,1.170074,1.940991,1.18066e-015,0,1.940991,1.854068,1.18066e-015,0,1.854068,2.316921,1.18066e-015,0,2.316921,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *39 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 130891968, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.13318836688995\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -0.06803528,-0.4848228,-0.8968627,-1.29122,-1.613297,-1.817017,-1.969155,-1.993369,-2.041067,-2.160735,-2.258767,-2.359775,-2.449431,-2.52879,-2.561778,-2.527515,-2.400151,-2.233619,-1.911749,-1.489907,-1.023536,-0.6471882,-0.1908383,0.1680487,0.3859898,0.5604479,0.7014259,0.8192266,0.9241002,1.051198,1.148975,1.19904,1.206276,1.200423,1.120737,0.9370632,0.6814346,0.2682671,-0.06796748\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 130892288, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.656980156898499\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -0.06857681,-0.06646281,-0.05382903,0.05904346,0.07393175,-0.01696192,0.1313322,0.4221343,0.6628253,0.8424765,1.005161,1.077683,1.062223,0.9827809,0.7814125,0.4454659,0.1175201,-0.1548094,-0.2837411,-0.3541332,-0.4199411,-0.5803372,-0.6604667,-0.7967238,-1.058281,-1.067433,-0.767731,-0.4844143,-0.2486452,0.0259703,0.1878356,0.3973105,0.597966,0.6996925,0.6490704,0.5122113,0.3527247,0.1791422,-0.06852656\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 125192912, \"AnimCurve::\", \"\" {\n\t\tDefault: 39.7229881286621\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 42.56249,58.91012,73.37173,78.48634,126.0489,157.5025,160.3125,169.2663,160.485,164.4568,154.2045,143.333,135.7685,133.4542,137.922,145.1689,154.8825,153.0579,149.9288,148.5615,140.2713,137.4999,123.4179,71.79041,17.60002,12.74956,7.175371,8.17238,5.182207,3.865541,6.03673,17.80678,34.83039,46.34514,38.49666,27.19074,30.0351,33.31339,42.50245\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 125193232, \"AnimCurve::\", \"\" {\n\t\tDefault: -93.1371078491211\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -92.96087,-92.30371,-91.86466,-91.21073,-91.14777,-92.18208,-92.54626,-91.84973,-91.60869,-91.98856,-92.23349,-92.4352,-92.85291,-93.61852,-94.37347,-95.28769,-96.04151,-96.55688,-96.44324,-95.88692,-94.92078,-93.98665,-92.40127,-91.24198,-92.95097,-94.43939,-94.12706,-94.11952,-94.30535,-94.1212,-94.15518,-93.4074,-93.04201,-92.99794,-93.16288,-93.54665,-93.83508,-93.38506,-92.96331\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 125193552, \"AnimCurve::\", \"\" {\n\t\tDefault: 42.0879821777344\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 38.73126,22.2216,7.965357,2.296763,-46.08855,-78.11824,-80.99458,-90.3858,-81.44224,-85.37534,-75.08923,-64.0761,-56.30352,-53.41969,-57.23397,-63.97123,-73.01833,-71.03559,-68.06356,-66.13725,-57.51773,-55.02619,-41.15606,11.17454,65.73624,71.48703,76.97137,76.09795,78.81972,79.53565,76.79645,64.4692,47.0431,35.41769,43.32322,54.76775,51.65232,48.0519,38.79089\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 125677184, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.96879076957703\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 4.242198,4.095002,3.757272,3.219776,2.987863,3.027878,2.588214,2.208392,1.659682,1.171913,0.6501644,0.03508137,-0.611182,-1.366303,-2.085215,-2.745216,-3.324057,-3.650598,-3.647876,-3.854589,-4.049462,-4.014885,-3.899355,-3.889452,-4.133147,-4.201873,-3.683349,-2.989151,-2.234379,-1.193851,-0.1894594,0.8996391,1.838151,2.518983,3.052088,3.27332,3.509038,3.823371,4.242053\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 125677504, \"AnimCurve::\", \"\" {\n\t\tDefault: -0.549681961536407\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -1.018873,-0.706614,-0.4984642,-0.5108263,-1.254467,-2.778933,-3.211316,-3.294421,-3.503263,-3.797055,-3.912112,-3.879326,-3.952662,-4.12908,-4.55836,-5.19781,-5.86074,-5.680024,-5.175869,-4.475865,-3.994788,-3.675672,-2.093505,-0.3098976,2.265893,3.791279,3.976526,4.173005,4.386307,3.812721,3.287772,1.865363,0.4833371,-0.5978034,-0.5407706,-0.08053771,-0.1699873,-0.5279604,-1.018448\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 130892608, \"AnimCurve::\", \"\" {\n\t\tDefault: -5.84038019180298\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -5.996605,-6.286993,-6.491495,-6.630338,-6.670922,-6.548676,-6.523715,-6.387069,-6.250867,-6.184173,-6.171026,-6.114617,-6.058768,-6.084071,-6.106005,-6.184225,-6.187778,-6.25843,-6.221249,-6.2135,-6.340507,-6.310432,-6.147381,-5.914701,-5.687884,-5.628171,-5.643187,-5.706809,-5.780777,-5.828829,-5.859191,-5.897196,-5.933725,-5.890442,-5.83111,-5.821946,-5.919563,-5.929248,-5.996675\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 130894000, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.77687907218933\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 4.21172,4.271284,4.213042,4.135572,4.059443,3.625401,2.859863,2.18298,1.176557,0.3478202,-0.3665772,-1.090295,-1.746986,-2.4442,-2.978673,-3.397184,-3.898298,-4.245234,-4.615451,-5.164673,-5.511253,-5.477523,-5.448197,-5.32071,-4.961872,-4.814724,-4.138953,-3.277687,-2.374393,-1.288115,-0.2887047,0.6719852,1.60916,2.307675,2.863769,3.230781,3.683229,4.083695,4.211723\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 130894320, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.67002356052399\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 1.022204,0.1678924,-0.6370003,-0.925317,-1.365206,-1.845331,-2.235022,-2.012105,-1.81131,-1.840879,-1.74684,-1.537382,-1.441434,-1.294828,-1.305429,-1.32651,-1.405186,-1.250283,-0.8507921,-0.5897118,0.08678971,0.5698874,1.2617,1.799603,2.37976,2.573817,2.384275,2.216945,2.230554,2.214808,2.361717,2.178925,1.928483,1.686854,1.666907,1.725461,1.688616,1.409672,1.022258\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 130894640, \"AnimCurve::\", \"\" {\n\t\tDefault: 5.42585277557373\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 4.806067,4.264646,3.945256,3.796705,3.74954,3.875305,3.949199,4.260646,4.548424,4.68886,4.713312,4.812068,4.909081,4.851145,4.821341,4.709612,4.728709,4.508692,4.481983,4.353967,4.000323,4.001023,4.121314,4.451029,4.70578,4.820366,4.941865,5.006293,5.046872,5.136467,5.23399,5.248578,5.221129,5.319846,5.445484,5.501931,5.279728,5.161269,4.806\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 130894960, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.87556838989258\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 4.266696,4.276803,4.170098,4.074358,3.974996,3.523165,2.736709,2.072271,1.078815,0.2495768,-0.4585719,-1.170016,-1.82127,-2.50925,-3.0449,-3.466537,-3.97278,-4.306652,-4.650473,-5.180891,-5.483387,-5.421375,-5.358436,-5.211494,-4.836151,-4.684783,-4.014651,-3.158348,-2.251374,-1.16114,-0.1497048,0.8020729,1.724047,2.407937,2.962167,3.332338,3.780853,4.163058,4.266702\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 130895280, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.50368475914001\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 0.7879336,-0.07188942,-0.8768089,-1.165088,-1.60058,-2.049075,-2.395221,-2.134755,-1.876632,-1.858375,-1.723032,-1.471238,-1.335874,-1.146282,-1.120793,-1.108881,-1.149733,-0.9753216,-0.5584457,-0.2729794,0.416423,0.891697,1.565286,2.084786,2.630566,2.812732,2.59516,2.38935,2.358588,2.284656,2.373418,2.132844,1.827044,1.547202,1.495626,1.532341,1.472091,1.174585,0.7879834\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136839328, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.25706577301025\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 2.632881,2.083859,1.759373,1.609677,1.568653,1.710731,1.789032,2.100833,2.389349,2.528979,2.550879,2.646002,2.739048,2.675137,2.638695,2.519807,2.528592,2.30488,2.27742,2.147324,1.790206,1.791118,1.923343,2.271837,2.555503,2.687795,2.805555,2.86496,2.899188,2.975874,3.064271,3.073352,3.046908,3.151416,3.27663,3.32874,3.105682,2.986908,2.632812\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136839648, \"AnimCurve::\", \"\" {\n\t\tDefault: -6.63933753967285\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -6.509853,-6.342438,-6.171165,-5.872937,-5.553353,-5.167243,-4.860497,-4.564067,-4.358781,-4.198408,-4.018768,-3.94515,-3.909841,-3.874295,-3.911039,-3.959477,-3.98367,-4.059007,-4.125004,-4.20732,-4.269297,-4.388899,-4.516297,-4.825152,-5.160995,-5.427263,-5.640885,-5.924252,-6.198488,-6.386094,-6.530649,-6.600663,-6.602568,-6.592147,-6.648077,-6.630383,-6.583884,-6.552152,-6.509499\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136840288, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.94592773914337\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 3.107829,3.153727,3.263526,3.304598,3.318809,3.298728,3.139676,2.928735,2.657484,2.34003,2.107539,1.84665,1.659422,1.39009,1.174553,0.9487084,0.6637982,0.3720165,0.1423222,-0.2914399,-0.4947282,-0.6052362,-0.8746005,-1.045599,-1.145113,-1.082042,-1.015896,-0.7552063,-0.4653632,-0.02035714,0.3895851,0.8283812,1.286649,1.701174,1.991252,2.280741,2.571861,2.879606,3.10925\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136842528, \"AnimCurve::\", \"\" {\n\t\tDefault: 28.7092266082764\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 28.80775,29.06864,29.23038,29.46235,29.52027,29.39862,29.46718,29.61337,29.57245,29.58216,29.4724,29.25682,28.99602,28.75366,28.61069,28.47581,28.5176,28.39471,28.24263,28.26248,28.40609,28.52785,28.57735,28.59876,28.46392,28.45303,28.78018,28.94366,29.13703,29.28356,29.27539,29.12977,28.9833,28.7681,28.69832,28.77833,28.76028,28.76546,28.80775\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136841888, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.423987865448\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -1.806913,-1.970359,-1.997383,-1.616787,-1.119151,-0.5186542,0.5523459,1.434999,2.706278,3.987073,4.940146,6.09693,7.338299,8.362406,9.405915,10.50017,11.50338,12.34429,13.14624,13.76419,14.2128,14.64604,14.53745,14.02906,13.51504,12.97266,12.02424,10.7239,9.583992,8.196795,6.733111,5.374278,3.820383,2.522166,1.220621,0.1247159,-0.7269028,-1.347477,-1.806526\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136839968, \"AnimCurve::\", \"\" {\n\t\tDefault: -0.918177843093872\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -0.001611925,0.5788816,1.420448,1.967175,2.797338,3.696979,4.488471,4.877945,4.990181,5.066395,4.826081,4.550097,4.321606,3.790535,3.468753,2.921195,2.32047,1.573331,0.5256237,0.257217,-0.4023747,-0.8824536,-1.941043,-2.512666,-2.925986,-2.867071,-2.720807,-2.486483,-2.54745,-2.486542,-2.509004,-2.171341,-1.685766,-1.20596,-0.8648849,-0.8260861,-0.6780508,-0.4388731,-0.0007426521\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136840928, \"AnimCurve::\", \"\" {\n\t\tDefault: -18.9311122894287\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -17.50209,-16.26714,-15.31903,-14.63314,-14.47304,-14.61157,-14.99046,-15.38267,-16.06443,-16.07428,-16.08509,-16.12724,-16.24982,-16.30578,-16.54708,-16.47405,-16.55947,-16.5633,-16.71608,-16.42698,-15.96505,-15.73784,-15.33995,-15.47627,-15.78655,-16.3694,-16.85394,-17.33829,-17.43604,-17.57801,-17.83736,-18.11453,-18.51772,-18.892,-18.93836,-18.93897,-18.71231,-18.25967,-17.50195\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136841248, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.26757836341858\n\t\tKeyVer: 4007\n\t\tKeyTime: *6 {\n\t\t\ta: 3848846500,9622116250,15395386000,38488465000,44261734750,55808274250\n\t\t} \n\t\tKeyValueFloat: *6 {\n\t\t\ta: 3.711231,11.02347,3.711231,3.711231,2,3.711231\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *2 {\n\t\t\ta: 1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *8 {\n\t\t\ta: 58.49789,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *2 {\n\t\t\ta: 1,5\n\t\t} \n\t}\n\tAnimationCurve: 136842208, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.26757836341858\n\t\tKeyVer: 4007\n\t\tKeyTime: *6 {\n\t\t\ta: 3848846500,9622116250,15395386000,38488465000,44261734750,55808274250\n\t\t} \n\t\tKeyValueFloat: *6 {\n\t\t\ta: 3.711231,11.02347,3.711231,3.711231,2,3.711231\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *2 {\n\t\t\ta: 1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *8 {\n\t\t\ta: 58.49789,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *2 {\n\t\t\ta: 1,5\n\t\t} \n\t}\n\tAnimationCurve: 136840608, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.07939505577087\n\t\tKeyVer: 4007\n\t\tKeyTime: *9 {\n\t\t\ta: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500\n\t\t} \n\t\tKeyValueFloat: *9 {\n\t\t\ta: 4.633635,2.584161,2.180386,0,0,1.633955,-3.509884,0,4.633635\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *5 {\n\t\t\ta: 1032,1032,1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *20 {\n\t\t\ta: 0,0,4.099946e-031,0,0,-4.901864,4.099946e-031,0,-4.901864,24.43056,4.099946e-031,0,24.43056,27.80181,4.099946e-031,0,27.80181,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *5 {\n\t\t\ta: 5,1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 136841568, \"AnimCurve::\", \"\" {\n\t\tDefault: 0\n\t\tKeyVer: 4007\n\t\tKeyTime: *9 {\n\t\t\ta: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500\n\t\t} \n\t\tKeyValueFloat: *9 {\n\t\t\ta: 0,0,0,0,0,0,0,0,0\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 9\n\t\t} \n\t}\n\tAnimationCurve: 136842848, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.00536951329559088\n\t\tKeyVer: 4007\n\t\tKeyTime: *9 {\n\t\t\ta: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500\n\t\t} \n\t\tKeyValueFloat: *9 {\n\t\t\ta: 0.03436488,0,6.868795,0,0,0,0,0,0.03436488\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 9\n\t\t} \n\t}\n\tAnimationCurve: 131385744, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.292065471410751\n\t\tKeyVer: 4007\n\t\tKeyTime: *9 {\n\t\t\ta: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500\n\t\t} \n\t\tKeyValueFloat: *9 {\n\t\t\ta: 1.869219,2.584161,2.180386,0,0,1.633955,-3.509884,0,1.869219\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *4 {\n\t\t\ta: 1032,1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *16 {\n\t\t\ta: 0,0,4.099946e-031,0,0,-4.901864,4.099946e-031,0,-4.901864,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *4 {\n\t\t\ta: 5,1,1,2\n\t\t} \n\t}\n\tAnimationCurve: 131387024, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.0640802830457687\n\t\tKeyVer: 4007\n\t\tKeyTime: *9 {\n\t\t\ta: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500\n\t\t} \n\t\tKeyValueFloat: *9 {\n\t\t\ta: 0.4101138,0,0,0,0,0,0,0,0.4101138\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 9\n\t\t} \n\t}\n\tAnimationCurve: 131389904, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.30150443315506\n\t\tKeyVer: 4007\n\t\tKeyTime: *9 {\n\t\t\ta: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500\n\t\t} \n\t\tKeyValueFloat: *9 {\n\t\t\ta: 1.929628,0,6.868795,0,0,0,0,0,1.929628\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 9\n\t\t} \n\t}\n\tAnimationCurve: 131390864, \"AnimCurve::\", \"\" {\n\t\tDefault: 6.71029043197632\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 6.704924,6.710295,6.714579,6.723069,6.731362,6.740645,6.749883,6.759381,6.766335,6.772589,6.777908,6.780563,6.781595,6.783079,6.782899,6.782411,6.783216,6.782077,6.78065,6.779715,6.779107,6.776922,6.774244,6.76693,6.758018,6.751243,6.74721,6.740497,6.733834,6.728725,6.723647,6.71944,6.716572,6.713492,6.709697,6.708494,6.707413,6.705667,6.70492\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131389264, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.844819128513336\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 0.8875221,0.8636229,0.844628,0.8047196,0.7643412,0.7175642,0.6693393,0.6179364,0.5785679,0.5412166,0.508422,0.4895989,0.4804774,0.4664696,0.4624053,0.4590777,0.4458066,0.4420166,0.4409981,0.4273765,0.4211751,0.4277982,0.4282311,0.4576606,0.4976473,0.5350848,0.5590003,0.6056368,0.6519659,0.6965424,0.7368804,0.7721055,0.7997103,0.8247835,0.8485295,0.8598841,0.8697164,0.8817542,0.8875521\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131390224, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.0320546366274357\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -0.1277451,-0.1454227,-0.1704725,-0.1938886,-0.2128763,-0.2287475,-0.2247048,-0.21435,-0.1892092,-0.1563364,-0.1341542,-0.1014408,-0.07574903,-0.03958545,-0.007827153,0.025797,0.06366184,0.1071553,0.1424533,0.2030289,0.2309939,0.250197,0.2913772,0.3296477,0.3618924,0.3677555,0.366334,0.3451567,0.3192885,0.2691803,0.2231957,0.1711825,0.113111,0.06094402,0.02670475,-0.01303115,-0.05327647,-0.09522079,-0.1279489\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131389584, \"AnimCurve::\", \"\" {\n\t\tDefault: 9.80766296386719\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 16.98269,15.28373,12.04786,8.411902,2.714019,-4.824852,-14.33382,-23.75185,-31.01704,-34.65207,-36.7016,-37.35373,-36.91788,-36.84663,-37.29629,-38.65701,-40.37612,-41.88214,-43.04815,-42.8388,-42.09435,-40.78643,-38.37872,-35.84132,-32.34884,-28.76373,-25.23481,-21.53757,-16.47117,-11.59956,-7.049416,-1.987245,2.719544,6.877076,10.35036,13.16879,15.5004,16.5853,16.98458\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131388944, \"AnimCurve::\", \"\" {\n\t\tDefault: 60.3215827941895\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 55.32022,55.84225,57.18212,59.2549,61.86189,63.9062,64.31016,62.82496,59.90555,56.59253,53.13797,49.42305,45.53072,42.5208,39.77943,38.49574,37.68573,37.65844,38.11056,39.09026,41.02849,43.69946,46.81584,49.74337,52.80023,55.30089,58.13888,60.39305,62.33269,63.67958,64.03224,63.78632,63.0327,61.55378,60.0934,58.52982,57.02402,56.03614,55.32119\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131387344, \"AnimCurve::\", \"\" {\n\t\tDefault: 41.7058372497559\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 55.20404,52.86647,48.11197,42.43337,33.66614,22.39933,9.237608,-4.424716,-15.75712,-22.90648,-28.38459,-32.17655,-34.3294,-36.02681,-36.53109,-36.36478,-35.68878,-34.48399,-32.82464,-29.87164,-27.314,-24.8921,-22.10512,-20.30037,-17.16508,-13.70752,-10.03508,-5.995913,0.5983117,7.380087,14.50075,22.357,29.74178,36.76037,42.62167,47.65226,51.8039,54.00383,55.20581\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131384784, \"AnimCurve::\", \"\" {\n\t\tDefault: 33.6098442077637\n\t\tKeyVer: 4007\n\t\tKeyTime: *34 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,43107080800,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *34 {\n\t\t\ta: 33.12244,32.45745,31.56673,30.62309,29.10582,27.99749,26.98576,28.28658,28.70609,29.6067,30.21872,30.4797,30.47973,30.38218,30.25193,32.48798,34.80407,37.19084,39.72681,41.32747,42.64369,43.61357,44.19391,44.87817,44.87825,45.66565,45.75561,44.87792,35.05602,33.60249,33.24104,33.15636,33.07115,33.12244\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *11 {\n\t\t\ta: 1032,3080,3080,3080,3080,3080,3080,3080,1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *44 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.2918012,4.099946e-031,0,0.2918012,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.7650709,4.099946e-031,0,0.7650709,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *11 {\n\t\t\ta: 1,9,1,1,10,1,1,4,1,4,1\n\t\t} \n\t}\n\tAnimationCurve: 131387664, \"AnimCurve::\", \"\" {\n\t\tDefault: 17.2327537536621\n\t\tKeyVer: 4007\n\t\tKeyTime: *34 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,43107080800,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *34 {\n\t\t\ta: 15.94061,15.07442,14.49631,14.15596,13.46847,13.23066,13.66543,15.02046,16.6234,18.84152,21.09873,23.34901,23.34928,25.51451,26.8925,28.4014,29.08284,29.4776,30.04833,30.613,32.03201,33.30663,34.19,34.79932,34.7994,34.43178,33.37446,31.65652,23.29067,17.21802,16.78621,16.56304,16.20382,15.94061\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantAuto|GenericBreak, Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *13 {\n\t\t\ta: 1032,3080,3080,3080,3080,3080,3080,3080,3080,2312,1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *52 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,2.516045,4.099946e-031,0,2.516045,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.681286,4.099946e-031,0,0.681286,0,4.099946e-031,0,0,0,4.099946e-031,0,0,99.99993,4.099946e-031,0,100,-48.12834,4.099946e-031,0,-48.12834,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *13 {\n\t\t\ta: 1,9,1,1,10,1,1,2,1,1,1,4,1\n\t\t} \n\t}\n\tAnimationCurve: 131390544, \"AnimCurve::\", \"\" {\n\t\tDefault: -13.2919816970825\n\t\tKeyVer: 4007\n\t\tKeyTime: *34 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,43107080800,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *34 {\n\t\t\ta: -11.70809,-11.05149,-10.75816,-10.81749,-10.70105,-10.95521,-12.02242,-13.45945,-15.38508,-17.8217,-20.4018,-23.00584,-23.02258,-25.75541,-28.1961,-30.24244,-32.15874,-33.72176,-34.79902,-35.76816,-36.64137,-36.67215,-36.06206,-34.31725,-34.30217,-31.23588,-28.04336,-25.09167,-18.52162,-13.12165,-12.82992,-12.57045,-12.07891,-11.70809\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *34 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *136 {\n\t\t\ta: 25.14695,14.24904,1.179961e-015,0,14.24904,3.510034,3.499816e-031,0,3.510034,0.8566083,3.482857e-031,0,0.8566083,-2.065859,3.482857e-031,0,-2.065859,-19.82053,3.482857e-031,0,-19.82053,-37.56351,3.482857e-031,0,-37.56351,-50.43999,3.482857e-031,0,-50.43999,-65.43376,3.498264e-031,0,-65.43376,-75.25079,3.498264e-031,0,-75.25079,-78.00967,3.482857e-031,0,-78.00967,-80.28316,3.421226e-031,0,-80.28316,-80.37897,3.906102e-029,0,-80.37897,-77.5841,3.482865e-031,0,-77.5841,-67.30537,3.482857e-031,0,-67.30537,-59.43965,3.482857e-031,0,-59.43965,-52.18988,3.482857e-031,0,-52.18988,-39.60417,3.482857e-031,0,-39.60417,-30.69589,3.482857e-031,0,-30.69589,-27.63522,3.482857e-031,0,-27.63522,-13.55984,3.498264e-031,0,-13.55984,8.68964,3.482857e-031,0,8.68964,35.54196,3.498264e-031,0,35.54196,72.14781,3.421226e-031,0,72.14781,72.61127,3.906102e-029,0,72.61127,93.82727,3.482865e-031,0,93.82727,92.16309,3.498264e-031,0,92.16309,83.69065,1.1869e-015,0,83.69065,51.52097,2.386845e-036,0,51.52097,9.801663,1.21229e-037,0,9.801663,8.267944,3.498264e-031,0,8.267944,11.2652,3.498264e-031,0,11.2652,12.93539,3.482857e-031,0,12.93539,9.313682,3.482857e-031,0,9.313681,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *34 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 131391184, \"AnimCurve::\", \"\" {\n\t\tDefault: -82.1016998291016\n\t\tKeyVer: 4007\n\t\tKeyTime: *4 {\n\t\t\ta: 0,28866348750,44261734750,57732697500\n\t\t} \n\t\tKeyValueFloat: *4 {\n\t\t\ta: -74.17377,-72.71737,-94.13535,-74.17377\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *4 {\n\t\t\ta: 1032,1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *16 {\n\t\t\ta: 0,0,4.099946e-031,0,0,-2.330245,4.099946e-031,0,-2.330245,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *4 {\n\t\t\ta: 1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131386064, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.46786618232727\n\t\tKeyVer: 4007\n\t\tKeyTime: *4 {\n\t\t\ta: 0,28866348750,44261734750,57732697500\n\t\t} \n\t\tKeyValueFloat: *4 {\n\t\t\ta: 10.06959,-16.63717,-12.56793,10.06959\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *4 {\n\t\t\ta: 1032,1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *16 {\n\t\t\ta: 0,0,4.099946e-031,0,0,42.73082,4.099946e-031,0,42.73082,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *4 {\n\t\t\ta: 1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131385424, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.1264545917511\n\t\tKeyVer: 4007\n\t\tKeyTime: *4 {\n\t\t\ta: 0,28866348750,44261734750,57732697500\n\t\t} \n\t\tKeyValueFloat: *4 {\n\t\t\ta: 3.062353,-10.07155,3.225219,3.062353\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 4\n\t\t} \n\t}\n\tAnimationCurve: 131387984, \"AnimCurve::\", \"\" {\n\t\tDefault: 119.229835510254\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 118.3934,121.9987,118.3934\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 5.768578,0,4.099946e-031,0,0,-5.768578,4.099946e-031,0,-5.768578,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131383504, \"AnimCurve::\", \"\" {\n\t\tDefault: 30.9591827392578\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 28.78887,38.14366,28.78887\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 14.96765,0,4.099946e-031,0,0,-14.96765,4.099946e-031,0,-14.96765,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131388304, \"AnimCurve::\", \"\" {\n\t\tDefault: 19.9485893249512\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 18.43795,24.94932,18.43795\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 10.4182,0,4.099946e-031,0,0,-10.4182,4.099946e-031,0,-10.4182,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131383824, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.85936584987212e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 2.859354e-006,2.859364e-006,2.859359e-006,2.859343e-006,2.859353e-006,2.859376e-006,2.859347e-006,2.859349e-006,2.859368e-006,2.859357e-006,2.859348e-006,2.859332e-006,2.859359e-006,2.859341e-006,2.859339e-006,2.859347e-006,2.859382e-006,2.859347e-006,2.859339e-006,2.859364e-006,2.859329e-006,2.859341e-006,2.859385e-006,2.859357e-006,2.859359e-006,2.85935e-006,2.859346e-006,2.859355e-006,2.859351e-006,2.859349e-006,2.859351e-006,2.859361e-006,2.859346e-006,2.859359e-006,2.859367e-006,2.859345e-006,2.859361e-006,2.859337e-006,2.859356e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131384144, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.81425923528877e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -1.814263e-006,-1.814258e-006,-1.81426e-006,-1.814267e-006,-1.81426e-006,-1.814254e-006,-1.814267e-006,-1.814278e-006,-1.81428e-006,-1.81426e-006,-1.814267e-006,-1.814266e-006,-1.814265e-006,-1.814263e-006,-1.814264e-006,-1.814265e-006,-1.814258e-006,-1.814262e-006,-1.814265e-006,-1.81426e-006,-1.81427e-006,-1.814267e-006,-1.814253e-006,-1.814262e-006,-1.81426e-006,-1.814263e-006,-1.814264e-006,-1.814263e-006,-1.814261e-006,-1.814263e-006,-1.814264e-006,-1.814258e-006,-1.814264e-006,-1.81426e-006,-1.814259e-006,-1.814266e-006,-1.814265e-006,-1.814261e-006,-1.814258e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131388624, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.84072734757501e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 2.840727e-006,2.840727e-006,2.840727e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131385104, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.12636920796194e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -3.126369e-008,-3.126369e-008,-3.126369e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131384464, \"AnimCurve::\", \"\" {\n\t\tDefault: 17.8534507751465\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 17.85345,17.85345,17.85345\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131386384, \"AnimCurve::\", \"\" {\n\t\tDefault: -7.17560169505305e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -7.176536e-007,-7.175694e-007,-7.176189e-007,-7.17692e-007,-7.176377e-007,-7.175142e-007,-7.176675e-007,-7.17693e-007,-7.17629e-007,-7.176051e-007,-7.17644e-007,-7.176972e-007,-7.176141e-007,-7.176671e-007,-7.176549e-007,-7.176436e-007,-7.175282e-007,-7.176427e-007,-7.176827e-007,-7.175568e-007,-7.177069e-007,-7.176591e-007,-7.174896e-007,-7.176184e-007,-7.176105e-007,-7.176492e-007,-7.17661e-007,-7.176269e-007,-7.176485e-007,-7.176533e-007,-7.176463e-007,-7.176159e-007,-7.176795e-007,-7.175946e-007,-7.175538e-007,-7.176858e-007,-7.17605e-007,-7.177405e-007,-7.176108e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131386704, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.67166808246111e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 3.671683e-006,3.671679e-006,3.67169e-006,3.671664e-006,3.67169e-006,3.671685e-006,3.671653e-006,3.671599e-006,3.671579e-006,3.671678e-006,3.671643e-006,3.671662e-006,3.671651e-006,3.67167e-006,3.67166e-006,3.671657e-006,3.671687e-006,3.671671e-006,3.67166e-006,3.671673e-006,3.671629e-006,3.671648e-006,3.671715e-006,3.671671e-006,3.671683e-006,3.671669e-006,3.671659e-006,3.671669e-006,3.671684e-006,3.671672e-006,3.671665e-006,3.6717e-006,3.671674e-006,3.671674e-006,3.671667e-006,3.671667e-006,3.671656e-006,3.67171e-006,3.671691e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131452656, \"AnimCurve::\", \"\" {\n\t\tDefault: -7.58698934077984e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -7.824985e-006,-5.536566e-006,-7.824985e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131450416, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.2017899229686e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -2.851291e-006,-6.22147e-006,-2.851291e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131452336, \"AnimCurve::\", \"\" {\n\t\tDefault: 8.96595764160156\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 15.53453,-12.77829,15.53453\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -45.30051,0,4.099946e-031,0,0,45.30051,4.099946e-031,0,45.30051,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131453616, \"AnimCurve::\", \"\" {\n\t\tDefault: 12.0142822265625\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 12.04157,11.7792,12.04157\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131455536, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.66459441184998\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0.729778,4.759159,0.729778\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 6.44701,0,4.099946e-031,0,0,-6.44701,4.099946e-031,0,-6.44701,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131451696, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.92592287063599\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 4.653052,1.518875,4.653052\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -5.014684,0,4.099946e-031,0,0,5.014684,4.099946e-031,0,5.014684,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131450736, \"AnimCurve::\", \"\" {\n\t\tDefault: 9.02053685081228e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 9.018095e-008,9.020135e-008,9.018595e-008,9.018214e-008,9.018527e-008,9.020653e-008,9.019118e-008,9.019919e-008,9.021738e-008,9.019345e-008,9.020073e-008,9.017504e-008,9.020033e-008,9.0188e-008,9.018913e-008,9.018999e-008,9.021124e-008,9.019163e-008,9.018254e-008,9.020528e-008,9.018584e-008,9.019232e-008,9.020533e-008,9.019283e-008,9.019249e-008,9.018771e-008,9.01918e-008,9.019112e-008,9.018436e-008,9.018771e-008,9.019084e-008,9.018385e-008,9.018117e-008,9.019789e-008,9.020675e-008,9.018231e-008,9.019914e-008,9.01577e-008,9.019107e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131453296, \"AnimCurve::\", \"\" {\n\t\tDefault: 5.82350480726745e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 5.823262e-007,5.823492e-007,5.823323e-007,5.823369e-007,5.823405e-007,5.823414e-007,5.823425e-007,5.823144e-007,5.82295e-007,5.823514e-007,5.823511e-007,5.823771e-007,5.823431e-007,5.823517e-007,5.82368e-007,5.823588e-007,5.823189e-007,5.823564e-007,5.823572e-007,5.823549e-007,5.82372e-007,5.823624e-007,5.823294e-007,5.823436e-007,5.823383e-007,5.823411e-007,5.823448e-007,5.823447e-007,5.823396e-007,5.823431e-007,5.8234e-007,5.823289e-007,5.823322e-007,5.823504e-007,5.823505e-007,5.823372e-007,5.823369e-007,5.823244e-007,5.823458e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131449136, \"AnimCurve::\", \"\" {\n\t\tDefault: 7.5388690845557e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -3.310863e-008,1.010135e-006,-3.310863e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131449776, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.20740196002589e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -3.207178e-006,-3.209336e-006,-3.207178e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131449456, \"AnimCurve::\", \"\" {\n\t\tDefault: 15.1926651000977\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 16.68132,10.26472,16.68132\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -10.26656,0,4.099946e-031,0,0,10.26656,4.099946e-031,0,10.26656,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131450096, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.39810509836025e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 1.397325e-007,1.398022e-007,1.397526e-007,1.39736e-007,1.39756e-007,1.398129e-007,1.397599e-007,1.397419e-007,1.397623e-007,1.397829e-007,1.397912e-007,1.397621e-007,1.397852e-007,1.397657e-007,1.39783e-007,1.397769e-007,1.39799e-007,1.397755e-007,1.397561e-007,1.398153e-007,1.397699e-007,1.397824e-007,1.39803e-007,1.397722e-007,1.397686e-007,1.397604e-007,1.397642e-007,1.397694e-007,1.397512e-007,1.397592e-007,1.397615e-007,1.397462e-007,1.397334e-007,1.397925e-007,1.398138e-007,1.397373e-007,1.397801e-007,1.396766e-007,1.397749e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131454896, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.21882010009722e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 2.218714e-006,2.218817e-006,2.218749e-006,2.218726e-006,2.218767e-006,2.218815e-006,2.21875e-006,2.21864e-006,2.2186e-006,2.218808e-006,2.218788e-006,2.218843e-006,2.218775e-006,2.218783e-006,2.21883e-006,2.218806e-006,2.218756e-006,2.218794e-006,2.218786e-006,2.21884e-006,2.218808e-006,2.21881e-006,2.218804e-006,2.218777e-006,2.21877e-006,2.218763e-006,2.218762e-006,2.218776e-006,2.218757e-006,2.218763e-006,2.218754e-006,2.218742e-006,2.218721e-006,2.21881e-006,2.218822e-006,2.218729e-006,2.218757e-006,2.218682e-006,2.218794e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131452016, \"AnimCurve::\", \"\" {\n\t\tDefault: -7.97497079929599e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -7.974971e-007,-7.974971e-007,-7.974971e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131452976, \"AnimCurve::\", \"\" {\n\t\tDefault: 7.67177255056595e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 7.671773e-007,7.671773e-007,7.671773e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131451056, \"AnimCurve::\", \"\" {\n\t\tDefault: -6.41338004925274e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -6.41338e-008,-6.41338e-008,-6.41338e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131453936, \"AnimCurve::\", \"\" {\n\t\tDefault: -0.000294537370791659\n\t\tKeyVer: 4007\n\t\tKeyTime: *32 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,43107080800,44646619400,46186158000,47725696599,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *32 {\n\t\t\ta: -0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *23 {\n\t\t\ta: 50332680,50334728,50332680,50334728,50332680,50332680,50334728,50334728,50334728,50334728,50334728,50334728,50332680,50334728,50332680,50334728,50334728,50332680,50334728,50332680,50334728,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *92 {\n\t\t\ta: 0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,1.186901e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *23 {\n\t\t\ta: 2,2,2,3,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131451376, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.96983647346497\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 2.019835,1.539085,2.019835\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131455856, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.10134339332581\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0.8711484,3.084562,0.8711484\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131454256, \"AnimCurve::\", \"\" {\n\t\tDefault: 14.2388792037964\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 16.40386,7.07204,16.40386\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -14.93091,0,4.099946e-031,0,0,14.93091,4.099946e-031,0,14.93091,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 131454576, \"AnimCurve::\", \"\" {\n\t\tDefault: 7.80884704454365e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 7.808657e-007,7.80882e-007,7.808705e-007,7.808634e-007,7.808695e-007,7.808882e-007,7.8087e-007,7.808731e-007,7.808866e-007,7.80875e-007,7.808783e-007,7.808598e-007,7.808787e-007,7.808692e-007,7.808706e-007,7.808774e-007,7.808904e-007,7.808732e-007,7.808646e-007,7.808857e-007,7.80865e-007,7.80872e-007,7.80889e-007,7.80874e-007,7.808745e-007,7.808691e-007,7.80871e-007,7.808726e-007,7.808676e-007,7.808694e-007,7.808715e-007,7.808693e-007,7.80864e-007,7.808787e-007,7.808858e-007,7.808638e-007,7.808785e-007,7.808473e-007,7.808738e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131455216, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.64346448122888e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -3.643785e-007,-3.643481e-007,-3.6437e-007,-3.643679e-007,-3.643618e-007,-3.643551e-007,-3.643598e-007,-3.643924e-007,-3.644111e-007,-3.643476e-007,-3.643488e-007,-3.643242e-007,-3.643565e-007,-3.643499e-007,-3.643325e-007,-3.643435e-007,-3.64376e-007,-3.643493e-007,-3.643464e-007,-3.643405e-007,-3.643319e-007,-3.643384e-007,-3.643653e-007,-3.643569e-007,-3.643623e-007,-3.643616e-007,-3.643572e-007,-3.643561e-007,-3.643634e-007,-3.64359e-007,-3.643622e-007,-3.643742e-007,-3.643727e-007,-3.643481e-007,-3.643461e-007,-3.643674e-007,-3.643635e-007,-3.643853e-007,-3.643543e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 131456176, \"AnimCurve::\", \"\" {\n\t\tDefault: 7.24273192531655e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 8.603566e-008,-4.481372e-008,8.603566e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131456496, \"AnimCurve::\", \"\" {\n\t\tDefault: 4.3645964069583e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 4.364376e-006,4.366492e-006,4.364376e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 131456816, \"AnimCurve::\", \"\" {\n\t\tDefault: 16.150936126709\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 17.19748,12.68651,17.19748\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -7.217565,0,4.099946e-031,0,0,7.217565,4.099946e-031,0,7.217565,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 134599744, \"AnimCurve::\", \"\" {\n\t\tDefault: 7.2803447892511e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 7.279796e-007,7.280296e-007,7.279971e-007,7.279725e-007,7.279979e-007,7.280441e-007,7.279874e-007,7.279653e-007,7.27981e-007,7.28013e-007,7.280107e-007,7.279895e-007,7.280104e-007,7.279955e-007,7.280051e-007,7.280034e-007,7.280344e-007,7.280058e-007,7.279862e-007,7.280392e-007,7.279855e-007,7.280027e-007,7.28046e-007,7.28005e-007,7.280059e-007,7.27993e-007,7.279933e-007,7.280008e-007,7.279914e-007,7.279928e-007,7.279945e-007,7.27995e-007,7.279746e-007,7.280212e-007,7.280369e-007,7.279738e-007,7.280079e-007,7.279412e-007,7.280109e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134603584, \"AnimCurve::\", \"\" {\n\t\tDefault: 6.76120862408425e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 6.759388e-007,6.761158e-007,6.760031e-007,6.759431e-007,6.760247e-007,6.761292e-007,6.759829e-007,6.758021e-007,6.757612e-007,6.760911e-007,6.760458e-007,6.761123e-007,6.760365e-007,6.760368e-007,6.761054e-007,6.760728e-007,6.760429e-007,6.76062e-007,6.7603e-007,6.761536e-007,6.760495e-007,6.760725e-007,6.761268e-007,6.760399e-007,6.760343e-007,6.760102e-007,6.760033e-007,6.760359e-007,6.760061e-007,6.760104e-007,6.759976e-007,6.759957e-007,6.759401e-007,6.760968e-007,6.761253e-007,6.759484e-007,6.760122e-007,6.758729e-007,6.760723e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134600064, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.09046095026133e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 3.090461e-006,3.090461e-006,3.090461e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134602624, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.7093806238554e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -2.709381e-006,-2.709381e-006,-2.709381e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134598784, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.80611896514893\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 3.806119,3.806119,3.806119\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134600384, \"AnimCurve::\", \"\" {\n\t\tDefault: -8.98741436004639\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -8.985373,-9.005011,-8.985373\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134600704, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.27314984798431\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -1.401271,-0.1693343,-1.401271\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134604224, \"AnimCurve::\", \"\" {\n\t\tDefault: 19.2985076904297\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 20.57492,15.07314,20.57492\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -8.802845,0,4.099946e-031,0,0,8.802845,4.099946e-031,0,8.802845,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 134601024, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.16687704121432e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 1.166872e-006,1.166877e-006,1.166875e-006,1.166868e-006,1.166874e-006,1.166881e-006,1.16687e-006,1.166868e-006,1.166873e-006,1.166874e-006,1.166873e-006,1.166867e-006,1.166875e-006,1.166871e-006,1.166871e-006,1.166872e-006,1.166882e-006,1.166874e-006,1.166869e-006,1.16688e-006,1.166866e-006,1.166871e-006,1.166885e-006,1.166874e-006,1.166875e-006,1.166871e-006,1.166871e-006,1.166873e-006,1.166872e-006,1.166871e-006,1.166872e-006,1.166873e-006,1.16687e-006,1.166876e-006,1.166877e-006,1.166869e-006,1.166874e-006,1.166867e-006,1.166875e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134601984, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.30216258501059e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -2.302475e-007,-2.302177e-007,-2.30238e-007,-2.302415e-007,-2.302322e-007,-2.3022e-007,-2.302337e-007,-2.302648e-007,-2.302775e-007,-2.302188e-007,-2.302231e-007,-2.302044e-007,-2.302277e-007,-2.302245e-007,-2.30209e-007,-2.30217e-007,-2.302374e-007,-2.302219e-007,-2.302232e-007,-2.302091e-007,-2.302134e-007,-2.302149e-007,-2.302253e-007,-2.302279e-007,-2.302315e-007,-2.302316e-007,-2.30231e-007,-2.302277e-007,-2.302346e-007,-2.302315e-007,-2.302341e-007,-2.302408e-007,-2.302444e-007,-2.302191e-007,-2.302157e-007,-2.302407e-007,-2.302332e-007,-2.30257e-007,-2.302247e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134604544, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.20680271922902e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 2.206803e-006,2.206803e-006,2.206803e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134605824, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.11167731581463e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -3.111677e-008,-3.111677e-008,-3.111677e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134603904, \"AnimCurve::\", \"\" {\n\t\tDefault: 25.5660648345947\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 25.56606,25.56606,25.56606\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134602944, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.13072965493666e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 2.131085e-007,2.130756e-007,2.130988e-007,2.13102e-007,2.130954e-007,2.130757e-007,2.13091e-007,2.131135e-007,2.131175e-007,2.13078e-007,2.130797e-007,2.130724e-007,2.130836e-007,2.130892e-007,2.130712e-007,2.130787e-007,2.130851e-007,2.13082e-007,2.130881e-007,2.130612e-007,2.130785e-007,2.130757e-007,2.130687e-007,2.130863e-007,2.130876e-007,2.130931e-007,2.13097e-007,2.130862e-007,2.130965e-007,2.130927e-007,2.13093e-007,2.131021e-007,2.131057e-007,2.130782e-007,2.13072e-007,2.131018e-007,2.130881e-007,2.131272e-007,2.130859e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134606144, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.23952710598496e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -2.240952e-007,-2.239531e-007,-2.240355e-007,-2.241235e-007,-2.240315e-007,-2.239151e-007,-2.240948e-007,-2.242374e-007,-2.242311e-007,-2.239888e-007,-2.24051e-007,-2.240298e-007,-2.240348e-007,-2.240528e-007,-2.240147e-007,-2.24029e-007,-2.239671e-007,-2.240203e-007,-2.240725e-007,-2.239254e-007,-2.24093e-007,-2.240421e-007,-2.238812e-007,-2.240277e-007,-2.240178e-007,-2.240604e-007,-2.240706e-007,-2.240381e-007,-2.240525e-007,-2.240613e-007,-2.240678e-007,-2.240322e-007,-2.241111e-007,-2.239793e-007,-2.239478e-007,-2.241173e-007,-2.240464e-007,-2.241578e-007,-2.239906e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134599104, \"AnimCurve::\", \"\" {\n\t\tDefault: 0\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0,0,0\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134603264, \"AnimCurve::\", \"\" {\n\t\tDefault: 0\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0,0,0\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134601344, \"AnimCurve::\", \"\" {\n\t\tDefault: 9.02113819122314\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 9.021138,9.021138,9.021138\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134599424, \"AnimCurve::\", \"\" {\n\t\tDefault: -20.6544322967529\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -20.65443,-20.65443,-20.65443\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134601664, \"AnimCurve::\", \"\" {\n\t\tDefault: -0.819446563720703\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -0.8194466,-0.8194466,-0.8194466\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134602304, \"AnimCurve::\", \"\" {\n\t\tDefault: 22.4568309783936\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 22.45683,22.45683,22.45683\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134604864, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.16195689972665e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -2.161949e-006,-2.161956e-006,-2.161951e-006,-2.161954e-006,-2.161952e-006,-2.161954e-006,-2.161957e-006,-2.161954e-006,-2.161953e-006,-2.161957e-006,-2.161959e-006,-2.16196e-006,-2.161956e-006,-2.161955e-006,-2.161959e-006,-2.161957e-006,-2.161951e-006,-2.161956e-006,-2.161957e-006,-2.161957e-006,-2.161962e-006,-2.16196e-006,-2.161951e-006,-2.161954e-006,-2.161954e-006,-2.161955e-006,-2.161956e-006,-2.161956e-006,-2.161952e-006,-2.161954e-006,-2.161955e-006,-2.161949e-006,-2.161952e-006,-2.161956e-006,-2.161957e-006,-2.161955e-006,-2.161956e-006,-2.161946e-006,-2.161953e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134605184, \"AnimCurve::\", \"\" {\n\t\tDefault: -4.03594668796359e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -4.037946e-008,-4.03594e-008,-4.037236e-008,-4.037884e-008,-4.036986e-008,-4.035826e-008,-4.037361e-008,-4.03947e-008,-4.039975e-008,-4.036139e-008,-4.036775e-008,-4.035718e-008,-4.036804e-008,-4.036758e-008,-4.035792e-008,-4.036008e-008,-4.036798e-008,-4.036411e-008,-4.036809e-008,-4.035201e-008,-4.036531e-008,-4.036252e-008,-4.035655e-008,-4.036809e-008,-4.036843e-008,-4.037139e-008,-4.037213e-008,-4.036798e-008,-4.037196e-008,-4.037321e-008,-4.037264e-008,-4.037213e-008,-4.037895e-008,-4.036201e-008,-4.0359e-008,-4.037298e-008,-4.037099e-008,-4.038708e-008,-4.036445e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134605504, \"AnimCurve::\", \"\" {\n\t\tDefault: 0\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0,0,0\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134606464, \"AnimCurve::\", \"\" {\n\t\tDefault: 0\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0,0,0\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134711456, \"AnimCurve::\", \"\" {\n\t\tDefault: 0\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0,0,0\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134712736, \"AnimCurve::\", \"\" {\n\t\tDefault: 6.74906289077626e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 6.749544e-007,6.749078e-007,6.74938e-007,6.749532e-007,6.749339e-007,6.749038e-007,6.7494e-007,6.749794e-007,6.749834e-007,6.749139e-007,6.749249e-007,6.749129e-007,6.749251e-007,6.749339e-007,6.749106e-007,6.749195e-007,6.749125e-007,6.749206e-007,6.749355e-007,6.748851e-007,6.74932e-007,6.749195e-007,6.748785e-007,6.749248e-007,6.749199e-007,6.749407e-007,6.749377e-007,6.74933e-007,6.749383e-007,6.749372e-007,6.749373e-007,6.749407e-007,6.749541e-007,6.749138e-007,6.749049e-007,6.74952e-007,6.749321e-007,6.749766e-007,6.749207e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134710176, \"AnimCurve::\", \"\" {\n\t\tDefault: 5.44045349215594e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 5.439839e-007,5.44047e-007,5.440122e-007,5.439649e-007,5.44011e-007,5.440676e-007,5.439771e-007,5.439196e-007,5.439341e-007,5.440236e-007,5.439908e-007,5.439964e-007,5.440062e-007,5.439956e-007,5.440075e-007,5.440039e-007,5.440504e-007,5.44012e-007,5.439834e-007,5.440588e-007,5.439667e-007,5.439958e-007,5.44094e-007,5.440102e-007,5.440183e-007,5.439954e-007,5.440227e-007,5.440013e-007,5.440003e-007,5.439942e-007,5.439923e-007,5.440147e-007,5.439746e-007,5.440317e-007,5.440479e-007,5.43968e-007,5.440031e-007,5.439547e-007,5.4403e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134712416, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.65944640887028e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -2.659446e-006,-2.659446e-006,-2.659446e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134707296, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.59772286881343e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 2.597723e-006,2.597723e-006,2.597723e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134710816, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.87032294273376\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 3.870323,3.870323,3.870323\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 134708896, \"AnimCurve::\", \"\" {\n\t\tDefault: 6.88650560379028\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 6.882456,6.882598,6.882385,6.88272,6.883077,6.883392,6.884174,6.884972,6.885825,6.88667,6.886871,6.887172,6.887263,6.887357,6.887553,6.887679,6.887657,6.887497,6.887216,6.886338,6.885871,6.885779,6.884912,6.884567,6.884317,6.884666,6.884809,6.885602,6.88611,6.886891,6.887267,6.887532,6.887527,6.887152,6.886386,6.885579,6.884701,6.883475,6.88245\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134705376, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.05879163742065\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -1.112103,-1.098785,-1.086636,-1.055707,-1.016842,-0.9637029,-0.9166489,-0.869556,-0.8267558,-0.78812,-0.7494406,-0.7204897,-0.6997542,-0.6746657,-0.6639796,-0.6543581,-0.6418924,-0.6321239,-0.6241201,-0.6099701,-0.6090741,-0.6203912,-0.6220046,-0.6516851,-0.685647,-0.7227913,-0.7604417,-0.8149078,-0.8705899,-0.9234556,-0.9656311,-0.9971974,-1.021227,-1.03969,-1.062329,-1.078639,-1.089327,-1.103332,-1.112141\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134710496, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.188849896192551\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 0.03336836,0.02116778,-0.0007472031,-0.02025299,-0.03971121,-0.060796,-0.057015,-0.04495386,-0.02223387,0.009655932,0.02804088,0.0547827,0.07361853,0.1032328,0.1312529,0.1613555,0.1999704,0.2402387,0.2716093,0.3323803,0.3639125,0.3864518,0.4289438,0.4686386,0.498659,0.5054748,0.5133104,0.4980175,0.4788825,0.434308,0.3898233,0.3356146,0.2749732,0.2183444,0.183388,0.1462071,0.1058901,0.06458583,0.03316538\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134709536, \"AnimCurve::\", \"\" {\n\t\tDefault: 42.592903137207\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 44.71096,44.2724,43.29156,43.38291,43.60683,43.446,43.0552,41.63937,37.96909,31.39635,22.78314,13.96467,6.324103,0.700516,-2.722822,-5.49841,-7.202953,-8.621876,-8.923027,-9.350631,-9.088506,-8.681252,-8.288477,-7.522041,-6.153592,-1.471632,6.914005,17.74242,26.93093,34.24625,38.55726,40.76954,41.72073,42.44447,42.62039,42.83342,43.07911,43.56459,44.70947\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134711136, \"AnimCurve::\", \"\" {\n\t\tDefault: -47.3313064575195\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -43.01588,-45.60297,-48.0605,-50.64801,-53.45048,-56.33263,-59.08442,-61.50166,-63.4039,-64.1004,-63.62145,-62.50174,-61.07326,-59.55187,-58.07056,-56.59111,-55.08132,-53.69438,-52.84967,-52.70114,-53.80003,-55.28229,-57.29887,-59.71749,-62.40185,-65.99463,-68.44272,-69.61176,-68.39761,-66.13943,-62.25282,-57.90861,-53.82008,-50.37543,-46.76758,-43.73404,-41.98346,-41.55725,-43.01494\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134711776, \"AnimCurve::\", \"\" {\n\t\tDefault: -50.2629508972168\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -54.23211,-51.01293,-47.27736,-44.46293,-41.6326,-38.33502,-34.90667,-30.72341,-25.21741,-18.34432,-10.72179,-3.26727,3.687743,10.3418,16.71059,22.54918,27.07196,30.8998,32.90911,34.85205,34.91413,34.37589,33.41462,31.31825,27.91238,19.4039,7.275913,-7.29633,-19.92589,-30.3807,-37.77864,-42.89194,-46.05077,-48.74553,-50.54395,-52.06659,-53.09273,-53.72514,-54.23135\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134713056, \"AnimCurve::\", \"\" {\n\t\tDefault: 9.03095610738092e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 9.030945e-007,9.030943e-007,9.030937e-007,9.030937e-007,9.030945e-007,9.030959e-007,9.030945e-007,9.030917e-007,9.030915e-007,9.030953e-007,9.030947e-007,9.030965e-007,9.030943e-007,9.03095e-007,9.030964e-007,9.030953e-007,9.030924e-007,9.030935e-007,9.030944e-007,9.030956e-007,9.030949e-007,9.030942e-007,9.030948e-007,9.030941e-007,9.030936e-007,9.03094e-007,9.030948e-007,9.030943e-007,9.030942e-007,9.030944e-007,9.030945e-007,9.030942e-007,9.030932e-007,9.030955e-007,9.030956e-007,9.030948e-007,9.03094e-007,9.030936e-007,9.030941e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134712096, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.16086266138882e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 3.16086e-006,3.160863e-006,3.160862e-006,3.160861e-006,3.160862e-006,3.160861e-006,3.160861e-006,3.160861e-006,3.16086e-006,3.160861e-006,3.160861e-006,3.160861e-006,3.160862e-006,3.160863e-006,3.160862e-006,3.160861e-006,3.160863e-006,3.160862e-006,3.160861e-006,3.160863e-006,3.16086e-006,3.16086e-006,3.160864e-006,3.160862e-006,3.160861e-006,3.160862e-006,3.160861e-006,3.160863e-006,3.160861e-006,3.160862e-006,3.160861e-006,3.160862e-006,3.160861e-006,3.160862e-006,3.160863e-006,3.16086e-006,3.160861e-006,3.16086e-006,3.160863e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134705696, \"AnimCurve::\", \"\" {\n\t\tDefault: -31.568567276001\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -27.72617,-29.66094,-31.59498,-35.73427,-40.89271,-46.4121,-51.63819,-55.9239,-58.28018,-57.17869,-53.53399,-48.91067,-44.86863,-41.75458,-40.55395,-39.63243,-39.17696,-38.98593,-38.74432,-38.42442,-37.52295,-36.30897,-35.05223,-34.0215,-33.48485,-34.06982,-35.26425,-35.40808,-36.15906,-35.76628,-35.52497,-35.05573,-33.72271,-32.16595,-31.45794,-30.83125,-29.99261,-29.02355,-27.72617\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134706016, \"AnimCurve::\", \"\" {\n\t\tDefault: -28.5609245300293\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -24.67043,-25.58225,-26.49314,-26.98358,-27.32372,-27.51453,-27.56248,-27.48057,-27.01832,-26.15341,-24.9255,-23.61423,-22.4984,-21.77819,-21.64762,-21.46021,-21.23772,-20.91662,-20.12699,-18.76676,-17.31485,-15.73932,-14.24881,-13.05212,-12.3582,-12.89515,-14.38224,-16.14631,-19.24563,-21.80244,-24.52871,-26.73795,-28.26155,-28.4822,-28.5755,-28.22997,-27.2984,-26.18437,-24.67043\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134709856, \"AnimCurve::\", \"\" {\n\t\tDefault: -47.7509155273438\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -49.68386,-50.61994,-51.55786,-49.75773,-46.82225,-43.25573,-39.56197,-36.2418,-33.36656,-31.95313,-31.44142,-31.44106,-31.56512,-32.13184,-32.78861,-33.35774,-33.51565,-33.39902,-32.87182,-31.85551,-30.93431,-30.00776,-29.16026,-28.47599,-28.03886,-28.22925,-29.13568,-30.97284,-33.5863,-36.49885,-39.36355,-41.97754,-44.78883,-46.8367,-47.92022,-48.53391,-48.92361,-49.31165,-49.68386\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134706336, \"AnimCurve::\", \"\" {\n\t\tDefault: 4.45484261035745e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 4.455054e-007,4.454809e-007,4.454926e-007,4.455068e-007,4.454948e-007,4.454815e-007,4.455016e-007,4.455214e-007,4.455249e-007,4.454944e-007,4.455046e-007,4.45489e-007,4.454957e-007,4.454946e-007,4.454957e-007,4.45498e-007,4.454814e-007,4.454978e-007,4.454868e-007,4.454983e-007,4.455009e-007,4.454951e-007,4.454918e-007,4.454924e-007,4.454907e-007,4.454877e-007,4.455005e-007,4.45491e-007,4.4549e-007,4.454961e-007,4.455065e-007,4.454961e-007,4.455085e-007,4.454844e-007,4.454842e-007,4.455106e-007,4.455005e-007,4.455147e-007,4.454853e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134706656, \"AnimCurve::\", \"\" {\n\t\tDefault: -7.54761458665598e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -7.548039e-007,-7.547536e-007,-7.547837e-007,-7.548064e-007,-7.547835e-007,-7.547668e-007,-7.547899e-007,-7.548162e-007,-7.548199e-007,-7.547832e-007,-7.547835e-007,-7.547631e-007,-7.547819e-007,-7.547742e-007,-7.547644e-007,-7.54779e-007,-7.54794e-007,-7.547695e-007,-7.547841e-007,-7.54763e-007,-7.547844e-007,-7.547916e-007,-7.547665e-007,-7.54782e-007,-7.54798e-007,-7.547844e-007,-7.547869e-007,-7.547747e-007,-7.547835e-007,-7.547874e-007,-7.547957e-007,-7.547883e-007,-7.548038e-007,-7.547653e-007,-7.547607e-007,-7.548069e-007,-7.54791e-007,-7.548182e-007,-7.547644e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 134706976, \"AnimCurve::\", \"\" {\n\t\tDefault: 71.1884765625\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 70.21743,74.40298,70.21743\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 6.696884,0,4.099946e-031,0,0,-6.696884,4.099946e-031,0,-6.696884,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 134707936, \"AnimCurve::\", \"\" {\n\t\tDefault: 10.1721467971802\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 13.63773,-15.40957,13.63773\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -5.117637,0,4.099946e-031,0,0,5.55831,4.099946e-031,0,1.816012,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 134707616, \"AnimCurve::\", \"\" {\n\t\tDefault: -14.7731218338013\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 0,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -17.18055,4.568866,-17.18055\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 1.740179,0,4.099946e-031,0,0,-1.818651,4.099946e-031,0,0.6524437,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 134708256, \"AnimCurve::\", \"\" {\n\t\tDefault: -129.154998779297\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -128.3936,-131.6756,-128.3936\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -5.626314,0,4.099946e-031,0,0,5.251226,4.099946e-031,0,5.251226,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 134708576, \"AnimCurve::\", \"\" {\n\t\tDefault: -42.0322799682617\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -47.85358,-22.76177,-47.85358\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 43.01453,0,4.099946e-031,0,0,-40.1469,4.099946e-031,0,-40.1469,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 134709216, \"AnimCurve::\", \"\" {\n\t\tDefault: 34.3628196716309\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 34.28154,35.06313,34.28154\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136834944, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.38291397888679e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -1.382952e-006,-1.382912e-006,-1.382936e-006,-1.382953e-006,-1.382937e-006,-1.382912e-006,-1.38294e-006,-1.382978e-006,-1.382985e-006,-1.382932e-006,-1.382951e-006,-1.382916e-006,-1.382934e-006,-1.382928e-006,-1.382922e-006,-1.382933e-006,-1.382933e-006,-1.382926e-006,-1.382932e-006,-1.382923e-006,-1.382939e-006,-1.382942e-006,-1.382921e-006,-1.382934e-006,-1.382944e-006,-1.382932e-006,-1.382942e-006,-1.382926e-006,-1.382934e-006,-1.382936e-006,-1.382945e-006,-1.38294e-006,-1.382953e-006,-1.38292e-006,-1.382913e-006,-1.382955e-006,-1.38294e-006,-1.382963e-006,-1.382919e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *30 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *120 {\n\t\t\ta: 0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,1.186901e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,1.097392e-015,0,0,0,3.561446e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *30 {\n\t\t\ta: 1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,1,5,1,1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 136836224, \"AnimCurve::\", \"\" {\n\t\tDefault: 7.55724443024519e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 7.557305e-007,7.557242e-007,7.557264e-007,7.557301e-007,7.557278e-007,7.557212e-007,7.557287e-007,7.557417e-007,7.557442e-007,7.557258e-007,7.557392e-007,7.557255e-007,7.557264e-007,7.55728e-007,7.557303e-007,7.557294e-007,7.55718e-007,7.557298e-007,7.557285e-007,7.557294e-007,7.557355e-007,7.557298e-007,7.557169e-007,7.557253e-007,7.557217e-007,7.557294e-007,7.557346e-007,7.557248e-007,7.557267e-007,7.557292e-007,7.557298e-007,7.557294e-007,7.557314e-007,7.557246e-007,7.557244e-007,7.557314e-007,7.557285e-007,7.557333e-007,7.557251e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136831104, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.74146850642865e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 2.741469e-006,2.741469e-006,2.741469e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136832704, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.38374729835778e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -3.383747e-006,-3.383747e-006,-3.383747e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136835904, \"AnimCurve::\", \"\" {\n\t\tDefault: 32.0624504089355\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 32.06245,32.06245,32.06245\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136831424, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.77754112435014e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 3.763222e-008,3.777197e-008,3.768088e-008,3.76404e-008,3.76873e-008,3.777294e-008,3.768477e-008,3.751691e-008,3.749176e-008,3.77126e-008,3.760778e-008,3.777043e-008,3.769793e-008,3.772374e-008,3.775057e-008,3.769884e-008,3.768994e-008,3.77384e-008,3.769017e-008,3.776128e-008,3.766075e-008,3.764481e-008,3.779303e-008,3.770344e-008,3.766047e-008,3.769142e-008,3.765814e-008,3.7733e-008,3.768866e-008,3.768719e-008,3.766806e-008,3.766542e-008,3.763429e-008,3.774559e-008,3.777635e-008,3.763648e-008,3.768375e-008,3.759638e-008,3.775011e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *21 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *84 {\n\t\t\ta: 0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *21 {\n\t\t\ta: 1,1,1,1,1,1,1,1,1,1,1,1,9,1,1,1,3,1,1,9,1\n\t\t} \n\t}\n\tAnimationCurve: 136833344, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.12997121909575e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -3.129955e-006,-3.129969e-006,-3.129973e-006,-3.129956e-006,-3.129964e-006,-3.129989e-006,-3.129957e-006,-3.1299e-006,-3.129889e-006,-3.129973e-006,-3.12991e-006,-3.129967e-006,-3.129967e-006,-3.12994e-006,-3.12993e-006,-3.129951e-006,-3.130025e-006,-3.129937e-006,-3.129969e-006,-3.129926e-006,-3.129932e-006,-3.129965e-006,-3.129973e-006,-3.129966e-006,-3.129996e-006,-3.129968e-006,-3.129936e-006,-3.129969e-006,-3.129971e-006,-3.12996e-006,-3.129951e-006,-3.129956e-006,-3.12995e-006,-3.129974e-006,-3.129971e-006,-3.129947e-006,-3.129958e-006,-3.129945e-006,-3.129972e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136838784, \"AnimCurve::\", \"\" {\n\t\tDefault: -7.38412791179144e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -7.461433e-006,-6.718116e-006,-7.461433e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136837184, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.46886565946625e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 2.29402e-006,3.975226e-006,2.29402e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136835584, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.01478266716003\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -1.122663,12.40081,-1.122663\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 23.1831,0,4.099946e-031,0,0,-21.63755,4.099946e-031,0,-21.63755,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 136833024, \"AnimCurve::\", \"\" {\n\t\tDefault: -11.8456792831421\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -11.78857,-12.33769,-11.78857\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136833664, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.26736164093018\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -3.695112,2.458985,-3.695112\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 10.54988,0,4.099946e-031,0,0,-9.846557,4.099946e-031,0,-9.846557,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 136831744, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.35604390501976\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -4.271896,15.67612,-4.271896\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 34.19661,0,4.099946e-031,0,0,-31.91683,4.099946e-031,0,-31.91683,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 136837824, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.31795149577374e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -3.317978e-006,-3.317946e-006,-3.317963e-006,-3.317985e-006,-3.317968e-006,-3.317958e-006,-3.317966e-006,-3.317984e-006,-3.317981e-006,-3.317966e-006,-3.317969e-006,-3.317953e-006,-3.317966e-006,-3.31796e-006,-3.317951e-006,-3.317963e-006,-3.317986e-006,-3.317953e-006,-3.317976e-006,-3.317947e-006,-3.317969e-006,-3.317979e-006,-3.317949e-006,-3.317968e-006,-3.317984e-006,-3.317974e-006,-3.31797e-006,-3.31796e-006,-3.317973e-006,-3.317973e-006,-3.317971e-006,-3.317969e-006,-3.317981e-006,-3.317954e-006,-3.317951e-006,-3.317982e-006,-3.317972e-006,-3.317989e-006,-3.317956e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136834304, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.01659298429513e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 3.016286e-007,3.016693e-007,3.016498e-007,3.016222e-007,3.016458e-007,3.016605e-007,3.016315e-007,3.016237e-007,3.016209e-007,3.016402e-007,3.016513e-007,3.016494e-007,3.016419e-007,3.016476e-007,3.01648e-007,3.016437e-007,3.016512e-007,3.016427e-007,3.016595e-007,3.016423e-007,3.016463e-007,3.016489e-007,3.016361e-007,3.016475e-007,3.016434e-007,3.016566e-007,3.016432e-007,3.016476e-007,3.016526e-007,3.01643e-007,3.016251e-007,3.016442e-007,3.016243e-007,3.016602e-007,3.016592e-007,3.016181e-007,3.016338e-007,3.01614e-007,3.016593e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136835264, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.5970981571154e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 3.597098e-006,3.597098e-006,3.597098e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136833984, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.03909712581662e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 2.039097e-006,2.039097e-006,2.039097e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136836544, \"AnimCurve::\", \"\" {\n\t\tDefault: 18.2982807159424\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 18.29828,18.29828,18.29828\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136836864, \"AnimCurve::\", \"\" {\n\t\tDefault: -7.71003385580116e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -7.713862e-008,-7.709826e-008,-7.712461e-008,-7.71447e-008,-7.71295e-008,-7.711444e-008,-7.711265e-008,-7.716534e-008,-7.716093e-008,-7.711702e-008,-7.715312e-008,-7.709249e-008,-7.712057e-008,-7.711299e-008,-7.709269e-008,-7.711773e-008,-7.716193e-008,-7.709215e-008,-7.71546e-008,-7.708007e-008,-7.713729e-008,-7.715909e-008,-7.706885e-008,-7.712873e-008,-7.715755e-008,-7.71488e-008,-7.713578e-008,-7.710946e-008,-7.714311e-008,-7.71366e-008,-7.711989e-008,-7.713291e-008,-7.71405e-008,-7.710923e-008,-7.709869e-008,-7.713777e-008,-7.712714e-008,-7.715278e-008,-7.711105e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136832064, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.79914951054161e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -3.799391e-007,-3.798928e-007,-3.799158e-007,-3.799513e-007,-3.799143e-007,-3.799139e-007,-3.799553e-007,-3.798882e-007,-3.798912e-007,-3.799439e-007,-3.79848e-007,-3.799372e-007,-3.799294e-007,-3.799149e-007,-3.799213e-007,-3.799193e-007,-3.799132e-007,-3.799355e-007,-3.798732e-007,-3.799416e-007,-3.798902e-007,-3.798857e-007,-3.799881e-007,-3.79914e-007,-3.79919e-007,-3.798826e-007,-3.799028e-007,-3.799261e-007,-3.798943e-007,-3.799195e-007,-3.799615e-007,-3.799102e-007,-3.799457e-007,-3.799047e-007,-3.799169e-007,-3.799592e-007,-3.799408e-007,-3.799543e-007,-3.799063e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 136837504, \"AnimCurve::\", \"\" {\n\t\tDefault: 6.12122676102445e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 6.121227e-006,6.121227e-006,6.121227e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136834624, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.18875880161795e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 1.188759e-006,1.188759e-006,1.188759e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136838464, \"AnimCurve::\", \"\" {\n\t\tDefault: 13.211012840271\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 13.21101,13.21101,13.21101\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 136838144, \"AnimCurve::\", \"\" {\n\t\tDefault: -0.000293526856694371\n\t\tKeyVer: 4007\n\t\tKeyTime: *30 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,38488465000,40028003600,41567542200,43107080800,44646619400,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *30 {\n\t\t\ta: -0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *27 {\n\t\t\ta: 50332680,50334728,50332680,50334728,50334728,50332680,50334728,50334728,50334728,50334728,50334728,50334728,50332680,50334728,50334728,50332680,50334728,50332680,50334728,50332680,50334728,50332680,50334728,50334728,50332680,50334728,1032\n\t\t} \n\t\tKeyAttrDataFloat: *108 {\n\t\t\ta: 0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *27 {\n\t\t\ta: 2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 136832384, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.12324810028076\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -1.087378,-1.432282,-1.087378\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129519280, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.13205850124359\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -2.178227,2.331122,-2.178227\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 7.730314,0,4.099946e-031,0,0,-7.214959,4.099946e-031,0,-7.214959,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129523120, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.1130610704422\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -1.066225,8.327249,-1.066225\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 16.1031,0,4.099946e-031,0,0,-15.02956,4.099946e-031,0,-15.02956,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129518320, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.33934121954371e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -3.339358e-006,-3.339333e-006,-3.339348e-006,-3.339362e-006,-3.33935e-006,-3.339341e-006,-3.339349e-006,-3.339369e-006,-3.339369e-006,-3.339348e-006,-3.339357e-006,-3.339337e-006,-3.339349e-006,-3.339344e-006,-3.339338e-006,-3.339347e-006,-3.33936e-006,-3.339339e-006,-3.339355e-006,-3.339336e-006,-3.339353e-006,-3.33936e-006,-3.339333e-006,-3.33935e-006,-3.339361e-006,-3.339354e-006,-3.339354e-006,-3.339343e-006,-3.339353e-006,-3.339354e-006,-3.339353e-006,-3.339352e-006,-3.339366e-006,-3.339341e-006,-3.339341e-006,-3.339361e-006,-3.339353e-006,-3.339367e-006,-3.339341e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129516400, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.41871944695049e-009\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 2.394216e-009,2.428081e-009,2.410289e-009,2.390394e-009,2.410431e-009,2.422681e-009,2.394287e-009,2.393421e-009,2.390337e-009,2.403212e-009,2.419881e-009,2.410687e-009,2.405613e-009,2.411369e-009,2.410175e-009,2.407617e-009,2.417863e-009,2.40469e-009,2.427157e-009,2.403254e-009,2.412577e-009,2.41657e-009,2.394671e-009,2.412278e-009,2.409834e-009,2.423874e-009,2.409053e-009,2.411028e-009,2.418943e-009,2.407802e-009,2.387992e-009,2.409749e-009,2.389015e-009,2.421501e-009,2.418204e-009,2.385718e-009,2.399091e-009,2.383473e-009,2.42099e-009\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129518000, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.29875911120325e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 3.298759e-006,3.298759e-006,3.298759e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129523440, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.02836747323454e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -3.028367e-006,-3.028367e-006,-3.028367e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129520560, \"AnimCurve::\", \"\" {\n\t\tDefault: 18.566930770874\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 18.56693,18.56693,18.56693\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129518640, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.97209737962112e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -1.972138e-006,-1.972097e-006,-1.97212e-006,-1.972142e-006,-1.972125e-006,-1.972102e-006,-1.972116e-006,-1.97218e-006,-1.972179e-006,-1.972113e-006,-1.972161e-006,-1.972094e-006,-1.97212e-006,-1.972115e-006,-1.972103e-006,-1.972121e-006,-1.972135e-006,-1.972103e-006,-1.972139e-006,-1.972096e-006,-1.972141e-006,-1.97215e-006,-1.972076e-006,-1.972124e-006,-1.972139e-006,-1.972135e-006,-1.972137e-006,-1.972108e-006,-1.972133e-006,-1.972131e-006,-1.972126e-006,-1.97213e-006,-1.972143e-006,-1.972104e-006,-1.972096e-006,-1.97214e-006,-1.972126e-006,-1.972153e-006,-1.972107e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129515760, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.19399333648107e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -3.193875e-007,-3.193708e-007,-3.193791e-007,-3.194004e-007,-3.193698e-007,-3.194009e-007,-3.194284e-007,-3.192628e-007,-3.192616e-007,-3.194224e-007,-3.19237e-007,-3.194295e-007,-3.193946e-007,-3.193753e-007,-3.193898e-007,-3.193756e-007,-3.193805e-007,-3.194079e-007,-3.193078e-007,-3.19419e-007,-3.193156e-007,-3.193131e-007,-3.195091e-007,-3.193719e-007,-3.193762e-007,-3.193227e-007,-3.193382e-007,-3.193993e-007,-3.193409e-007,-3.193749e-007,-3.19427e-007,-3.193578e-007,-3.193908e-007,-3.193796e-007,-3.19403e-007,-3.194098e-007,-3.194023e-007,-3.193907e-007,-3.193799e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129516080, \"AnimCurve::\", \"\" {\n\t\tDefault: -5.25195036971127e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -5.25195e-006,-5.25195e-006,-5.25195e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129517040, \"AnimCurve::\", \"\" {\n\t\tDefault: -6.89941970222208e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -6.89942e-008,-6.89942e-008,-6.89942e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129518960, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.59999227523804\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 3.599992,3.599992,3.599992\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129521200, \"AnimCurve::\", \"\" {\n\t\tDefault: 9.92037773132324\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 9.830232,10.69702,9.830232\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129519600, \"AnimCurve::\", \"\" {\n\t\tDefault: 6.50482177734375\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 7.672223,2.640323,7.672223\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -8.626113,0,4.099946e-031,0,0,8.05104,4.099946e-031,0,8.05104,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129519920, \"AnimCurve::\", \"\" {\n\t\tDefault: 12.5329875946045\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 10.94121,17.80233,10.94121\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 11.76192,0,4.099946e-031,0,0,-10.97779,4.099946e-031,0,-10.97779,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129516720, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.56238683707488e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 3.562375e-006,3.562387e-006,3.562381e-006,3.562375e-006,3.56238e-006,3.562387e-006,3.56238e-006,3.562364e-006,3.562364e-006,3.562381e-006,3.562371e-006,3.562385e-006,3.56238e-006,3.562381e-006,3.562383e-006,3.56238e-006,3.562381e-006,3.562383e-006,3.56238e-006,3.562382e-006,3.562375e-006,3.562375e-006,3.562388e-006,3.56238e-006,3.562378e-006,3.56238e-006,3.562377e-006,3.562383e-006,3.56238e-006,3.562378e-006,3.562376e-006,3.562379e-006,3.562374e-006,3.562386e-006,3.562387e-006,3.562374e-006,3.562378e-006,3.562371e-006,3.562384e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129517360, \"AnimCurve::\", \"\" {\n\t\tDefault: 8.68510085183516e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 8.684979e-007,8.685173e-007,8.685075e-007,8.684945e-007,8.68508e-007,8.685126e-007,8.684945e-007,8.685072e-007,8.685059e-007,8.685e-007,8.685232e-007,8.685032e-007,8.685036e-007,8.685079e-007,8.685055e-007,8.685058e-007,8.685123e-007,8.685014e-007,8.685222e-007,8.684995e-007,8.685132e-007,8.685162e-007,8.68488e-007,8.68509e-007,8.68508e-007,8.685195e-007,8.685098e-007,8.68506e-007,8.685152e-007,8.685062e-007,8.684909e-007,8.68509e-007,8.684951e-007,8.685135e-007,8.6851e-007,8.684912e-007,8.684992e-007,8.684918e-007,8.685129e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *8 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *32 {\n\t\t\ta: 0,0,1.18066e-015,0,0,0,1.097392e-015,0,0,0,1.187599e-015,0,0,0,1.18066e-015,0,0,0,1.097392e-015,0,0,0,1.187599e-015,0,0,0,1.18066e-015,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *8 {\n\t\t\ta: 10,1,1,9,1,1,15,1\n\t\t} \n\t}\n\tAnimationCurve: 129517680, \"AnimCurve::\", \"\" {\n\t\tDefault: -8.52487929137169e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -8.524879e-008,-8.524879e-008,-8.524879e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129520880, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.5643117876607e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -1.564312e-006,-1.564312e-006,-1.564312e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129522160, \"AnimCurve::\", \"\" {\n\t\tDefault: 27.2881908416748\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 27.28819,27.28819,27.28819\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129520240, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.60250772043946e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -2.602473e-007,-2.602447e-007,-2.602432e-007,-2.602504e-007,-2.602434e-007,-2.602446e-007,-2.602562e-007,-2.602315e-007,-2.602339e-007,-2.602534e-007,-2.602307e-007,-2.602549e-007,-2.602482e-007,-2.602475e-007,-2.602541e-007,-2.602483e-007,-2.602316e-007,-2.602561e-007,-2.602289e-007,-2.602608e-007,-2.602404e-007,-2.602332e-007,-2.602675e-007,-2.602428e-007,-2.602362e-007,-2.602318e-007,-2.602421e-007,-2.602483e-007,-2.602359e-007,-2.602436e-007,-2.602575e-007,-2.602408e-007,-2.6025e-007,-2.602452e-007,-2.602518e-007,-2.602576e-007,-2.602507e-007,-2.602479e-007,-2.602459e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129521520, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.2035725660553e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 1.204491e-007,1.203707e-007,1.204112e-007,1.204441e-007,1.204228e-007,1.203435e-007,1.203959e-007,1.206171e-007,1.206262e-007,1.203759e-007,1.205692e-007,1.203458e-007,1.204063e-007,1.204151e-007,1.204011e-007,1.204261e-007,1.203812e-007,1.203941e-007,1.20455e-007,1.203849e-007,1.204932e-007,1.204807e-007,1.202857e-007,1.204153e-007,1.204126e-007,1.204453e-007,1.204714e-007,1.203832e-007,1.204357e-007,1.204247e-007,1.204176e-007,1.204413e-007,1.20458e-007,1.203766e-007,1.203537e-007,1.204455e-007,1.204146e-007,1.204766e-007,1.203791e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129521840, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.73695445937483e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 1.736954e-006,1.736954e-006,1.736954e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129522480, \"AnimCurve::\", \"\" {\n\t\tDefault: -8.55293436075044e-009\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: -8.552934e-009,-8.552934e-009,-8.552934e-009\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129522800, \"AnimCurve::\", \"\" {\n\t\tDefault: 13.044979095459\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 13.04498,13.04498,13.04498\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129622992, \"AnimCurve::\", \"\" {\n\t\tDefault: 24.3684997558594\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 24.38671,24.21158,24.38671\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129623312, \"AnimCurve::\", \"\" {\n\t\tDefault: 5.07718563079834\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 6.661697,-0.1680944,6.661697\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -11.70821,0,4.099946e-031,0,0,10.92767,4.099946e-031,0,10.92767,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129624912, \"AnimCurve::\", \"\" {\n\t\tDefault: 23.8567218780518\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 24.57268,21.48665,24.57268\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,1032,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: -5.290337,0,4.099946e-031,0,0,4.937648,4.099946e-031,0,4.937648,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129627472, \"AnimCurve::\", \"\" {\n\t\tDefault: -4.5721540118393e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -4.572158e-006,-4.572153e-006,-4.572154e-006,-4.572159e-006,-4.572155e-006,-4.572151e-006,-4.572159e-006,-4.572162e-006,-4.572163e-006,-4.572156e-006,-4.572157e-006,-4.572156e-006,-4.572157e-006,-4.572156e-006,-4.572159e-006,-4.572157e-006,-4.572149e-006,-4.572159e-006,-4.572151e-006,-4.572161e-006,-4.572158e-006,-4.572154e-006,-4.572158e-006,-4.572155e-006,-4.572152e-006,-4.572152e-006,-4.572157e-006,-4.572155e-006,-4.572153e-006,-4.572156e-006,-4.572161e-006,-4.572155e-006,-4.57216e-006,-4.572152e-006,-4.572154e-006,-4.57216e-006,-4.572157e-006,-4.572159e-006,-4.572154e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129629712, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.5465004682701e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -2.546499e-007,-2.546459e-007,-2.546479e-007,-2.546519e-007,-2.54647e-007,-2.546502e-007,-2.546545e-007,-2.546341e-007,-2.546337e-007,-2.546533e-007,-2.54632e-007,-2.546537e-007,-2.546496e-007,-2.546474e-007,-2.546492e-007,-2.546476e-007,-2.546479e-007,-2.546514e-007,-2.54639e-007,-2.546528e-007,-2.546402e-007,-2.546398e-007,-2.546641e-007,-2.54647e-007,-2.546477e-007,-2.546407e-007,-2.546431e-007,-2.546499e-007,-2.546433e-007,-2.546478e-007,-2.546545e-007,-2.546453e-007,-2.546504e-007,-2.546475e-007,-2.546505e-007,-2.546533e-007,-2.546515e-007,-2.54651e-007,-2.546474e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129627152, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.28670376398077e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 1.286704e-006,1.286704e-006,1.286704e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129629392, \"AnimCurve::\", \"\" {\n\t\tDefault: 2.94697493075091e-008\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 2.946975e-008,2.946975e-008,2.946975e-008\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129627792, \"AnimCurve::\", \"\" {\n\t\tDefault: 21.8681793212891\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 21.86818,21.86818,21.86818\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129622672, \"AnimCurve::\", \"\" {\n\t\tDefault: -2.68376516032731e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -2.683744e-006,-2.683756e-006,-2.683748e-006,-2.683748e-006,-2.683745e-006,-2.683762e-006,-2.683761e-006,-2.683703e-006,-2.68371e-006,-2.683762e-006,-2.683712e-006,-2.683763e-006,-2.68375e-006,-2.683748e-006,-2.683754e-006,-2.683748e-006,-2.683742e-006,-2.683758e-006,-2.683729e-006,-2.683762e-006,-2.683732e-006,-2.683728e-006,-2.683784e-006,-2.683745e-006,-2.683742e-006,-2.683732e-006,-2.683737e-006,-2.683754e-006,-2.683737e-006,-2.683745e-006,-2.683758e-006,-2.68374e-006,-2.683744e-006,-2.683756e-006,-2.683767e-006,-2.683749e-006,-2.683753e-006,-2.683739e-006,-2.683756e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129628112, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.09315595359294e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 3.0937e-007,3.093179e-007,3.093446e-007,3.09369e-007,3.093501e-007,3.093075e-007,3.093429e-007,3.094435e-007,3.094459e-007,3.093327e-007,3.094154e-007,3.093142e-007,3.093443e-007,3.093467e-007,3.093404e-007,3.093538e-007,3.093247e-007,3.093382e-007,3.093608e-007,3.09334e-007,3.093872e-007,3.093784e-007,3.092837e-007,3.093456e-007,3.093444e-007,3.093568e-007,3.093762e-007,3.093306e-007,3.093539e-007,3.093527e-007,3.093575e-007,3.093582e-007,3.093753e-007,3.093243e-007,3.09314e-007,3.093714e-007,3.093506e-007,3.093877e-007,3.093246e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129628432, \"AnimCurve::\", \"\" {\n\t\tDefault: 0\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0,0,0\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129623632, \"AnimCurve::\", \"\" {\n\t\tDefault: 0\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 0,0,0\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129625872, \"AnimCurve::\", \"\" {\n\t\tDefault: 5.75897359848022\n\t\tKeyVer: 4007\n\t\tKeyTime: *3 {\n\t\t\ta: 1924423250,28866348750,57732697500\n\t\t} \n\t\tKeyValueFloat: *3 {\n\t\t\ta: 5.758974,5.758974,5.758974\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser\n\t\tKeyAttrFlags: *1 {\n\t\t\ta: 1032\n\t\t} \n\t\tKeyAttrDataFloat: *4 {\n\t\t\ta: 0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *1 {\n\t\t\ta: 3\n\t\t} \n\t}\n\tAnimationCurve: 129626512, \"AnimCurve::\", \"\" {\n\t\tDefault: -14.2042036056519\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: -13.28363,-12.21417,-11.88406,-12.0185,-12.04975,-12.18922,-12.00691,-12.28668,-12.30453,-12.07463,-11.89514,-11.77094,-11.77093,-11.51274,-11.11164,-10.60882,-10.10823,-9.368922,-8.696971,-9.10406,-9.8762,-11.4093,-12.5567,-13.93154,-13.9317,-14.96209,-14.84791,-14.10598,-14.09718,-13.73625,-13.30094,-13.76194,-13.68139,-14.13591,-14.41006,-14.49771,-14.14985,-13.85052,-13.48767,-13.39482,-13.28356\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *9 {\n\t\t\ta: 1032,3080,3080,3080,3080,3080,3080,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *36 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.1388596,4.099946e-031,0,0.1388596,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-1.537213,4.099946e-031,0,-1.537213,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *9 {\n\t\t\ta: 1,9,1,1,10,1,1,16,1\n\t\t} \n\t}\n\tAnimationCurve: 129622352, \"AnimCurve::\", \"\" {\n\t\tDefault: -164.144622802734\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: -168.1317,-169.4007,-171.6724,-173.1291,-174.8042,-176.7019,-177.9081,-177.5606,-177.8,-178.9223,-179.5685,-179.9675,-179.9676,-180.5823,-181.5248,-182.7337,-184.0781,-185.217,-185.5078,-184.3744,-182.3202,-179.2862,-177.1982,-173.7615,-173.7611,-169.8947,-166.0172,-162.7888,-162.6591,-161.7261,-159.9439,-159.3118,-158.2779,-159.6863,-161.4046,-163.5374,-164.2571,-164.5303,-165.1459,-166.573,-168.1312\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *9 {\n\t\t\ta: 1032,3080,3080,3080,3080,3080,3080,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *36 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-0.4461759,4.099946e-031,0,-0.4461759,0,4.099946e-031,0,0,0,4.099946e-031,0,0,3.84264,4.099946e-031,0,3.84264,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *9 {\n\t\t\ta: 1,9,1,1,10,1,1,16,1\n\t\t} \n\t}\n\tAnimationCurve: 129626192, \"AnimCurve::\", \"\" {\n\t\tDefault: -29.484790802002\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: -30.32681,-30.08332,-28.26887,-26.56773,-25.09588,-23.88204,-21.68758,-18.12716,-15.35876,-12.2092,-9.541511,-7.229423,-7.216028,-5.259269,-3.383979,-1.212119,1.395944,5.631661,9.664697,11.85006,14.19839,15.244,14.28068,10.34527,10.31306,3.972298,-2.67823,-9.37403,-14.51725,-19.7477,-23.87844,-26.99583,-29.58894,-31.17733,-31.11253,-29.82949,-29.4101,-29.13415,-29.71374,-29.82418,-30.3265\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser\n\t\tKeyAttrFlags: *41 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *164 {\n\t\t\ta: -16.25991,30.86907,1.179961e-015,0,30.86907,52.73391,1.18066e-015,0,52.73391,47.59485,1.18066e-015,0,47.59485,40.28525,3.484408e-031,0,40.28525,51.12441,3.482857e-031,0,51.12441,86.32326,3.482857e-031,0,86.32326,94.93242,3.482857e-031,0,94.93242,88.7693,3.482857e-031,0,88.7693,87.25868,3.482857e-031,0,87.25868,74.89884,1.179961e-015,0,74.89884,64.30276,1.097392e-015,0,64.30276,64.18044,1.208149e-028,0,64.18044,57.49424,3.482865e-031,0,57.49424,60.70725,3.498264e-031,0,60.70725,71.69883,3.482857e-031,0,71.69883,102.6567,3.482857e-031,0,102.6567,124.0313,3.482857e-031,0,124.0313,93.27599,3.482857e-031,0,93.27599,68.00538,1.1869e-015,0,68.00538,50.90905,3.484409e-031,0,50.90905,1.234352,3.482857e-031,0,1.234352,-73.9931,3.482857e-031,0,-73.9931,-154.1807,3.421226e-031,0,-154.1807,-155.0078,3.906102e-029,0,-155.0078,-194.7736,3.482865e-031,0,-194.7736,-200.1949,3.498264e-031,0,-200.1949,-177.5853,1.179961e-015,0,-177.5853,-155.6051,1.187599e-015,0,-155.6051,-140.4179,1.18066e-015,0,-140.4179,-108.7218,3.499816e-031,0,-108.7218,-85.65743,3.498264e-031,0,-85.65743,-62.72252,3.498264e-031,0,-62.72252,-22.85385,3.498264e-031,0,-22.85385,20.21758,1.179961e-015,0,20.21758,25.53637,3.484408e-031,0,25.53637,10.43011,3.498264e-031,0,10.43011,-4.554541,3.482857e-031,0,-4.554541,-10.35045,3.482857e-031,0,-10.35045,-9.191402,3.498264e-031,0,-9.191402,-20.94776,3.482857e-031,0,-20.94776,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *41 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129625552, \"AnimCurve::\", \"\" {\n\t\tDefault: -6.12689859735838e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *18 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *18 {\n\t\t\ta: -6.12689e-007,-6.1269e-007,-6.126901e-007,-6.1269e-007,-6.126896e-007,-6.126894e-007,-6.126901e-007,-6.126901e-007,-6.126896e-007,-6.126896e-007,-6.126909e-007,-6.126901e-007,-6.1269e-007,-6.126899e-007,-6.126893e-007,-6.126899e-007,-6.1269e-007,-6.126896e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *14 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50334728,50334728,50334728,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *56 {\n\t\t\ta: 0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *14 {\n\t\t\ta: 1,1,1,2,1,1,2,1,1,3,1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129630032, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.20223648991669e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *11 {\n\t\t\ta: 0,1539538600,3079077200,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *11 {\n\t\t\ta: 1.202237e-006,1.202236e-006,1.202236e-006,1.202236e-006,1.202236e-006,1.202236e-006,1.202237e-006,1.202237e-006,1.202237e-006,1.202237e-006,1.202236e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *8 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50334728,1032\n\t\t} \n\t\tKeyAttrDataFloat: *32 {\n\t\t\ta: 0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *8 {\n\t\t\ta: 1,1,2,1,1,2,2,1\n\t\t} \n\t}\n\tAnimationCurve: 129626832, \"AnimCurve::\", \"\" {\n\t\tDefault: 9.30474472045898\n\t\tKeyVer: 4007\n\t\tKeyTime: *45 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33092382207,33862151507,34639618500,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,46955927300,47725696599,48495465900,49265235200,50035004500,50804773799,51574543100,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *45 {\n\t\t\ta: 1.814188,5.932574,5.34574,4.319725,2.571757,1.117456,0.3983527,0.6254905,0.9212306,0.6328047,0.6285815,0.8412012,0.8780301,1.107402,1.296348,1.501763,2.063011,2.575738,3.679309,6.757957,10.70501,12.46304,12.77927,13.04569,13.15473,13.19343,9.621583,7.586217,7.825192,10.08416,13.84376,16.18571,18.36954,17.61995,16.84658,15.75568,14.62488,13.07606,11.48291,10.03806,8.57513,5.793366,4.303154,3.178338,1.814507\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *45 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *180 {\n\t\t\ta: 194.1299,52.97329,3.498264e-031,0,52.97329,-24.19275,1.179961e-015,0,-24.19275,-41.60975,3.484408e-031,0,-41.60975,-48.03403,3.498264e-031,0,-48.03403,-32.60107,3.482857e-031,0,-32.60107,-7.379481,3.498264e-031,0,-7.379481,7.843169,3.482857e-031,0,7.843169,0.1097126,3.482857e-031,0,0.1097126,-4.389738,1.1869e-015,0,-4.389738,3.156266,1.187599e-015,0,3.156266,3.774984,3.422776e-031,0,3.774984,3.998587,3.559895e-031,0,3.998587,6.274766,3.482857e-031,0,6.274766,5.915412,3.482857e-031,0,5.915412,11.49995,3.482857e-031,0,11.49995,16.10963,3.482857e-031,0,16.10963,24.24447,1.1869e-015,0,24.24447,62.73328,1.187599e-015,0,62.73328,105.3855,3.484409e-031,0,105.3855,85.57629,3.482857e-031,0,85.57629,30.29603,3.482857e-031,0,30.29603,17.60962,3.359595e-031,0,17.60962,11.25303,3.498264e-031,0,11.25303,4.378839,3.621526e-031,0,4.378839,-34.1707,3.482857e-031,0,-34.1707,-84.10812,3.498264e-031,0,-84.10812,-26.94587,1.179961e-015,0,-26.94587,37.46922,3.499816e-031,0,37.46922,90.27854,3.498264e-031,0,90.27854,91.52321,3.498264e-031,0,91.52321,67.88669,3.482857e-031,0,67.88669,-8.145563,3.482857e-031,0,-8.145563,-45.68885,1.179961e-015,0,-45.68885,-55.92783,3.499816e-031,0,-55.92783,-66.65111,3.482857e-031,0,-66.65111,-80.3888,3.482857e-031,0,-80.3888,-94.25908,3.482857e-031,0,-94.25908,-91.13976,3.482857e-031,0,-91.13976,-87.23334,3.482857e-031,0,-87.23334,-86.33507,3.498264e-031,0,-86.33507,-64.07963,3.482857e-031,0,-64.07963,-39.22544,3.482857e-031,0,-39.22544,-37.32971,3.482857e-031,0,-37.32971,-44.50011,3.482857e-031,0,-44.50011,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *45 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129628752, \"AnimCurve::\", \"\" {\n\t\tDefault: -0.54519647359848\n\t\tKeyVer: 4007\n\t\tKeyTime: *45 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33092382207,33862151507,34639618500,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,46955927300,47725696599,48495465900,49265235200,50035004500,50804773799,51574543100,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *45 {\n\t\t\ta: 1.033321,1.222668,1.642693,2.669248,3.450967,3.961954,4.225948,3.953441,3.861794,3.605158,3.200186,2.805908,2.667829,2.571954,2.669009,2.657385,2.363505,1.720182,0.7308317,0.2139687,0.06137219,0.8775138,1.39715,1.944016,2.781813,3.625781,5.046674,6.566154,6.283621,5.417135,4.058226,2.769937,1.849827,1.535604,1.285793,0.8737021,0.5892274,0.134061,-0.1262975,-0.4300069,-0.6294042,-0.5899079,-0.1216423,0.4725536,1.033269\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *45 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *180 {\n\t\t\ta: 2.22027,9.140592,1.1869e-015,0,9.140592,21.6987,3.484409e-031,0,21.6987,27.1241,3.482857e-031,0,27.1241,19.39059,3.482857e-031,0,19.39059,11.62472,3.482857e-031,0,11.62472,-0.1277011,1.179961e-015,0,-0.1277011,-5.462305,3.484408e-031,0,-5.462305,-5.224237,3.498264e-031,0,-5.224237,-9.924129,3.482857e-031,0,-9.924129,-12.02556,3.482857e-031,0,-12.02556,-8.034016,3.421226e-031,0,-8.034016,-3.494524,3.559895e-031,0,-3.494524,0.01770833,1.1869e-015,0,0.01770833,1.281474,1.18066e-015,0,1.281474,-4.582565,1.187599e-015,0,-4.582565,-14.05805,3.499816e-031,0,-14.05805,-24.4901,3.482857e-031,0,-24.4901,-22.59319,3.498264e-031,0,-22.59319,-10.04189,3.498264e-031,0,-10.04189,9.953176,1.179961e-015,0,9.953176,29.22973,3.499816e-031,0,29.22973,32.18851,3.359595e-031,0,32.18851,41.17732,3.482857e-031,0,41.17732,50.14572,3.621526e-031,0,50.14572,47.96763,3.482857e-031,0,47.96763,44.10559,3.482857e-031,0,44.10559,18.55422,3.482857e-031,0,18.55422,-17.23528,3.482857e-031,0,-17.23528,-33.38094,3.482857e-031,0,-33.38094,-39.70797,3.498264e-031,0,-39.70797,-33.12599,3.498264e-031,0,-33.12599,-21.77001,1.179961e-015,0,-21.77001,-16.92099,1.18066e-015,0,-16.92099,-19.85705,3.499816e-031,0,-19.85705,-20.89698,3.482857e-031,0,-20.89698,-22.18923,3.482857e-031,0,-22.18923,-21.46575,3.498264e-031,0,-21.46575,-16.92204,3.498264e-031,0,-16.92204,-15.0932,3.482857e-031,0,-15.0932,-7.580931,3.482857e-031,0,-7.580931,7.616429,3.482857e-031,0,7.616429,15.93692,3.482857e-031,0,15.93692,17.32367,3.482857e-031,0,17.32367,16.31927,3.482857e-031,0,16.31926,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *45 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129625232, \"AnimCurve::\", \"\" {\n\t\tDefault: -24.0315208435059\n\t\tKeyVer: 4007\n\t\tKeyTime: *45 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33092382207,33862151507,34639618500,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,46955927300,47725696599,48495465900,49265235200,50035004500,50804773799,51574543100,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *45 {\n\t\t\ta: -25.80068,-29.0638,-30.16444,-35.24453,-38.65631,-41.36792,-41.73943,-40.79897,-39.45511,-37.70453,-35.68556,-34.18754,-33.07948,-31.94393,-31.29164,-30.939,-28.93985,-25.67138,-25.8491,-27.11434,-30.45243,-38.04246,-43.3965,-48.74905,-53.53635,-58.32598,-65.78414,-72.83516,-77.58199,-79.28162,-77.88029,-74.1464,-67.614,-62.77017,-57.92324,-51.35061,-44.77187,-37.68124,-30.58094,-26.47526,-22.36306,-20.42307,-21.60524,-23.88167,-25.8003\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *45 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *180 {\n\t\t\ta: -130.3308,-65.45641,1.179961e-015,0,-65.45641,-92.71097,1.18066e-015,0,-92.71097,-127.3781,1.187599e-015,0,-127.3781,-91.85081,3.484409e-031,0,-91.85081,-46.24675,3.482857e-031,0,-46.24675,8.534373,3.482857e-031,0,8.534373,34.26484,3.482857e-031,0,34.26484,46.41647,3.482857e-031,0,46.41647,56.54331,3.498264e-031,0,56.54331,52.87214,3.482857e-031,0,52.87214,39.16741,3.421226e-031,0,39.16741,33.55259,3.559895e-031,0,33.55259,26.81749,3.482857e-031,0,26.81749,15.07394,3.482857e-031,0,15.07394,35.27687,3.482857e-031,0,35.27687,79.01434,3.498264e-031,0,79.01434,46.36121,3.482857e-031,0,46.36121,-21.6445,3.498264e-031,0,-21.6445,-69.0499,3.498264e-031,0,-69.0499,-163.9218,3.482857e-031,0,-163.9218,-293.0449,3.498264e-031,0,-293.0449,-323.2438,3.359595e-031,0,-323.2438,-302.5388,3.498264e-031,0,-302.5388,-285.5466,3.621526e-031,0,-285.5466,-266.1671,3.482857e-031,0,-266.1671,-217.6376,3.482857e-031,0,-217.6376,-176.9676,3.482857e-031,0,-176.9676,-96.69704,3.482857e-031,0,-96.69704,-4.474525,3.498264e-031,0,-4.474525,77.02845,3.482857e-031,0,77.02845,153.9943,3.498264e-031,0,153.9943,259.0771,3.482857e-031,0,259.0771,290.7228,3.498264e-031,0,290.7228,342.5867,3.482857e-031,0,342.5867,394.541,3.482857e-031,0,394.541,410.0813,1.1869e-015,0,410.0813,425.728,1.18066e-015,0,425.728,336.1795,1.18066e-015,0,336.1795,246.5362,1.18066e-015,0,246.5362,183.8876,1.18066e-015,0,183.8876,11.36735,1.18066e-015,0,11.36735,-51.87892,1.18066e-015,0,-51.87892,-62.92584,3.484408e-031,0,-62.92584,-52.19181,1.179961e-015,0,-52.19181,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *45 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129624592, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.32429221366692e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -1.324247e-007,-1.324308e-007,-1.324307e-007,-1.324292e-007,-1.324313e-007,-1.324271e-007,-1.324296e-007,-1.324284e-007,-1.324275e-007,-1.324298e-007,-1.324285e-007,-1.324279e-007,-1.324276e-007,-1.324278e-007,-1.324287e-007,-1.324289e-007,-1.324276e-007,-1.324302e-007,-1.324297e-007,-1.324286e-007,-1.324297e-007,-1.324289e-007,-1.324285e-007,-1.324292e-007,-1.324294e-007,-1.324291e-007,-1.324292e-007,-1.324284e-007,-1.324276e-007,-1.324294e-007,-1.324291e-007,-1.324283e-007,-1.324307e-007,-1.324328e-007,-1.324286e-007,-1.324271e-007,-1.324304e-007,-1.324309e-007,-1.324295e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129623952, \"AnimCurve::\", \"\" {\n\t\tDefault: 3.40772317031224e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 3.407733e-007,3.407697e-007,3.407711e-007,3.407715e-007,3.40772e-007,3.407737e-007,3.407711e-007,3.407707e-007,3.407702e-007,3.407731e-007,3.407722e-007,3.407731e-007,3.407711e-007,3.407703e-007,3.407719e-007,3.407707e-007,3.407711e-007,3.407723e-007,3.407727e-007,3.407692e-007,3.40772e-007,3.407723e-007,3.407689e-007,3.4077e-007,3.407721e-007,3.407713e-007,3.407717e-007,3.407705e-007,3.40772e-007,3.407715e-007,3.407709e-007,3.40772e-007,3.407712e-007,3.407719e-007,3.407724e-007,3.407735e-007,3.40773e-007,3.407718e-007,3.407706e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129629072, \"AnimCurve::\", \"\" {\n\t\tDefault: -4.13260126113892\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,34639618500,35409387800,36179157100,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: -4.325395,-4.095398,-4.055251,-4.260259,-4.303248,-4.378666,-4.439366,-4.460021,-4.474599,-4.483092,-4.457629,-4.407256,-4.379461,-4.334218,-4.320842,-4.327319,-4.330706,-4.243141,-3.479138,-3.594317,-3.808994,-3.886488,-3.893768,-3.995423,-4.061629,-3.813404,-3.401008,-2.514063,-3.451321,-3.723462,-3.737732,-4.05974,-4.22872,-4.365044,-4.422607,-4.261097,-4.102897,-4.084881,-4.153363,-4.236125,-4.325425\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser\n\t\tKeyAttrFlags: *41 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *164 {\n\t\t\ta: 9.747645,4.052164,3.482857e-031,0,4.052164,-2.472911,1.179961e-015,0,-2.472911,-3.71996,3.484408e-031,0,-3.71996,-1.776116,3.482857e-031,0,-1.776116,-2.04177,3.482857e-031,0,-2.04177,-1.220316,3.498264e-031,0,-1.220316,-0.5284902,3.482857e-031,0,-0.5284902,-0.3460729,3.482857e-031,0,-0.3460729,0.2545441,1.1869e-015,0,0.2545441,1.143492,1.18066e-015,0,1.143492,1.176847,3.422776e-031,0,1.176847,1.093807,3.559895e-031,0,1.093807,0.8792887,3.482857e-031,0,0.8792887,0.103471,3.498264e-031,0,0.103471,-0.1479611,3.498264e-031,0,-0.1479611,1.262674,3.482857e-031,0,1.262674,12.77351,1.179961e-015,0,12.77351,9.732354,3.484408e-031,0,9.732354,-4.947838,3.498264e-031,0,-4.947838,-4.382555,3.482857e-031,0,-4.382555,-1.268987,3.482857e-031,0,-1.268987,-4.06507,3.421226e-031,0,-4.06507,-4.99183,3.621526e-031,0,-4.99183,5.460557,3.482857e-031,0,5.460557,19.81864,3.482857e-031,0,19.81864,25.3653,3.482857e-031,0,25.3653,-0.7546996,3.498264e-031,0,-0.7546996,-18.14098,3.482857e-031,0,-18.14098,-4.296168,3.482857e-031,0,-4.296168,-5.044163,3.498264e-031,0,-5.044163,-7.364809,3.482857e-031,0,-7.364809,-4.579571,3.482857e-031,0,-4.579571,-2.908316,1.179961e-015,0,-2.908316,1.559204,3.484408e-031,0,1.559204,4.795651,3.482857e-031,0,4.795651,2.643245,3.482857e-031,0,2.643245,-0.756992,3.498264e-031,0,-0.756992,-2.268652,3.498264e-031,0,-2.268652,-2.580928,3.482857e-031,0,-2.580928,-2.777125,3.482857e-031,0,-2.777125,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *41 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129624272, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.2486013174057\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,34639618500,35409387800,36179157100,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: -4.392604,-6.50379,-3.3913,-1.844732,-2.254772,-2.727598,-2.951273,-2.818718,-2.693539,-2.581937,-2.331875,-1.991199,-1.836073,-1.652754,-1.640214,-1.695719,-1.720947,-1.456369,-0.4173162,-0.9974477,-1.995101,-2.840014,-3.368194,-3.598641,-3.841616,-5.066699,-6.247233,-10.75194,-6.961672,-6.443067,-8.552057,-6.073008,-9.07111,-8.017106,-7.487993,-3.025845,-0.9754255,-0.899817,-1.89343,-3.181911,-4.392841\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser\n\t\tKeyAttrFlags: *41 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *164 {\n\t\t\ta: -141.6907,15.01956,3.482857e-031,0,15.01956,69.88586,3.498264e-031,0,69.88586,17.04792,3.482857e-031,0,17.04792,-13.24299,3.498264e-031,0,-13.24299,-10.44751,3.482857e-031,0,-10.44751,-1.366801,3.482857e-031,0,-1.366801,3.86601,3.482857e-031,0,3.86601,3.551716,3.498264e-031,0,3.551716,5.424951,3.482857e-031,0,5.424951,8.897573,3.498264e-031,0,8.897573,7.472408,3.421226e-031,0,7.472408,5.063587,3.559895e-031,0,5.063587,2.937877,3.498264e-031,0,2.937877,-0.6444764,3.482857e-031,0,-0.6444764,-1.210981,3.482857e-031,0,-1.210981,3.590247,3.482857e-031,0,3.590247,19.55445,3.482857e-031,0,19.55445,6.883821,3.482857e-031,0,6.883821,-23.66677,1.1869e-015,0,-23.66677,-27.63849,3.499816e-031,0,-27.63849,-20.63149,3.482857e-031,0,-20.63149,-14.42865,3.421226e-031,0,-14.42865,-14.12015,3.621526e-031,0,-14.12015,-44.04172,3.498264e-031,0,-44.04172,-72.16852,3.498264e-031,0,-72.16852,-92.2684,3.482857e-031,0,-92.2684,-10.71659,3.498264e-031,0,-10.71659,64.63304,3.482857e-031,0,64.63304,-23.85577,3.482857e-031,0,-23.85577,5.550876,1.179961e-015,0,5.550876,-7.785789,3.484408e-031,0,-7.785789,-29.16147,3.482857e-031,0,-29.16147,23.74675,3.498264e-031,0,23.74675,74.86892,3.482857e-031,0,74.86892,97.68851,3.482857e-031,0,97.68851,31.89042,1.179961e-015,0,31.89042,-13.77007,3.499816e-031,0,-13.77007,-34.2314,3.498264e-031,0,-34.2314,-37.49115,3.482857e-031,0,-37.49115,-35.16467,3.482857e-031,0,-35.16467,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *41 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129666224, \"AnimCurve::\", \"\" {\n\t\tDefault: 7.7121057510376\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,34639618500,35409387800,36179157100,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: 2.03563,-2.631946,-5.856407,1.056695,5.782118,9.674322,12.38624,14.53341,16.25304,17.74903,18.91856,20.2921,21.78345,23.25567,25.17219,27.55988,29.32354,29.93146,28.36858,27.43425,25.9979,23.06981,15.04611,6.49448,-2.059036,-9.796998,-17.55634,-20.43628,-14.95779,-10.65853,-8.081217,-3.958989,-0.8947151,1.286986,2.356471,3.834937,8.657645,8.626781,6.731467,4.196056,2.03548\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser\n\t\tKeyAttrFlags: *41 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *164 {\n\t\t\ta: -161.674,-118.3805,3.498264e-031,0,-118.3805,55.32962,3.482857e-031,0,55.32962,174.5779,3.482857e-031,0,174.5779,129.2644,3.482857e-031,0,129.2644,99.0618,3.482857e-031,0,99.0618,72.88638,3.482857e-031,0,72.88638,58.00206,3.498264e-031,0,58.00206,48.23418,3.482857e-031,0,48.23418,39.98281,1.179961e-015,0,39.98281,38.28574,3.499816e-031,0,38.28574,42.95459,1.096694e-015,0,42.95459,44.31406,3.561446e-031,0,44.31406,50.83105,3.482857e-031,0,50.83105,64.56322,3.498264e-031,0,64.56322,62.27022,3.482857e-031,0,62.27022,35.57367,3.482857e-031,0,35.57367,-14.32429,1.179961e-015,0,-14.32429,-37.45814,3.499816e-031,0,-37.45814,-35.56017,3.482857e-031,0,-35.56017,-65.46667,3.482857e-031,0,-65.46667,-165.2758,3.482857e-031,0,-165.2758,-417.4816,3.421226e-031,0,-417.4816,-510.0072,3.621526e-031,0,-510.0072,-488.7443,3.482857e-031,0,-488.7443,-464.919,3.482857e-031,0,-464.919,-339.1729,3.482857e-031,0,-339.1729,38.97813,3.498264e-031,0,38.97813,146.6662,3.498264e-031,0,146.6662,103.1487,3.482857e-031,0,103.1487,100.4931,3.498264e-031,0,100.4931,107.7975,1.179961e-015,0,107.7975,78.68961,3.499816e-031,0,78.68961,48.76778,1.179961e-015,0,48.76778,38.21926,3.484408e-031,0,38.21926,94.51761,3.482857e-031,0,94.51761,71.87767,3.482857e-031,0,71.87767,-28.89268,3.482857e-031,0,-28.89268,-66.46089,3.482857e-031,0,-66.46089,-70.4398,3.498264e-031,0,-70.4398,-59.19476,3.482857e-031,0,-59.19476,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *41 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129666544, \"AnimCurve::\", \"\" {\n\t\tDefault: -7.13063798229996e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -7.130623e-007,-7.130643e-007,-7.130631e-007,-7.130629e-007,-7.130637e-007,-7.130624e-007,-7.130635e-007,-7.130612e-007,-7.130618e-007,-7.130628e-007,-7.130623e-007,-7.130644e-007,-7.130637e-007,-7.130621e-007,-7.130632e-007,-7.130641e-007,-7.130639e-007,-7.13062e-007,-7.130628e-007,-7.130634e-007,-7.130632e-007,-7.130628e-007,-7.130629e-007,-7.130644e-007,-7.130624e-007,-7.130623e-007,-7.130636e-007,-7.130632e-007,-7.130628e-007,-7.130621e-007,-7.130631e-007,-7.130628e-007,-7.130623e-007,-7.130641e-007,-7.130637e-007,-7.13062e-007,-7.130631e-007,-7.130631e-007,-7.130648e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129663664, \"AnimCurve::\", \"\" {\n\t\tDefault: 8.09784317016602\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 8.138908,10.45591,12.69004,14.35925,14.93957,14.69555,14.68853,14.44775,13.57168,12.90757,12.31705,12.05766,11.74798,11.62923,11.27412,10.93584,11.29237,11.11358,10.41992,10.00094,9.505821,9.314293,9.77639,10.24982,10.89657,11.31113,11.2808,11.2647,10.98571,10.33494,9.57946,8.788445,8.245384,8.024986,8.111336,8.288109,8.341423,8.202019,8.138894\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129669104, \"AnimCurve::\", \"\" {\n\t\tDefault: 184.387466430664\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 179.7333,177.3544,175.4081,173.51,171.4394,169.8687,170.6142,172.1824,172.4542,171.8416,171.4999,172.2899,172.6114,172.558,171.3214,169.9959,169.6089,170.6203,172.5556,173.8279,175.7864,177.8601,180.206,182.4481,185.315,187.0913,187.0482,186.996,187.2927,187.2497,187.3987,186.4835,185.4695,184.5996,184.3482,184.1792,183.2765,181.4556,179.7331\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129663984, \"AnimCurve::\", \"\" {\n\t\tDefault: 0.917054355144501\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 21.04986,20.99232,20.06409,14.90823,6.6127,-0.474901,-6.313387,-11.03249,-15.78141,-19.57858,-23.02783,-25.49016,-27.01154,-27.18094,-27.86675,-29.40088,-28.67717,-31.21016,-34.63784,-35.18562,-34.06361,-33.18781,-32.17891,-30.60283,-29.73879,-28.06679,-24.51293,-21.36559,-17.88133,-14.22527,-11.21985,-8.895525,-6.280855,-2.796831,1.604811,6.273024,10.42097,15.46986,21.04748\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129669744, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.20693221106194e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *22 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,7697693000,9237231600,13855847400,15395386000,16927226907,20014001800,21553540400,23093079000,24632617600,26172156200,32330310599,33862151507,35409387800,36948926400,38488465000,41567542200,43107080800,58502466800\n\t\t} \n\t\tKeyValueFloat: *22 {\n\t\t\ta: -1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206932e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206933e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *15 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50334728,1032\n\t\t} \n\t\tKeyAttrDataFloat: *60 {\n\t\t\ta: 0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.096694e-015,0,0,0,3.530631e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *15 {\n\t\t\ta: 4,1,1,1,1,1,2,1,1,1,1,1,3,2,1\n\t\t} \n\t}\n\tAnimationCurve: 129666864, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.28146643874061e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -1.281466e-006,-1.281466e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281465e-006,-1.281466e-006,-1.281465e-006,-1.281465e-006,-1.281465e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281466e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129665904, \"AnimCurve::\", \"\" {\n\t\tDefault: -1.3035603761673\n\t\tKeyVer: 4007\n\t\tKeyTime: *46 {\n\t\t\ta: 0,1539538600,3079077200,3848846500,4618615800,5388385100,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,17704693900,18474463200,19244232500,20014001800,20783771100,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *46 {\n\t\t\ta: -3.838867,-5.475441,-6.022648,-6.152676,-6.141452,-5.728282,-5.112936,-3.417693,1.406434,1.098143,-0.8714044,-3.962297,-6.6434,-7.012907,-7.015608,-7.246343,-7.433587,-7.713497,-7.897579,-8.738768,-9.476568,-10.74272,-9.251937,-7.119717,-5.816975,-7.023832,-8.724273,-5.44758,-3.429229,-3.415492,-1.05308,1.115052,2.94439,2.63772,2.347455,1.971719,1.307944,0.9705787,0.3789048,-0.3112393,-0.8676267,-1.45646,-2.11609,-3.060301,-3.72777,-3.839287\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *46 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *184 {\n\t\t\ta: -65.43775,-32.75671,3.482857e-031,0,-32.75671,-10.67317,3.482857e-031,0,-10.67317,-3.564117,3.482857e-031,0,-3.564117,12.7318,3.498264e-031,0,12.7318,30.8555,3.482857e-031,0,30.8555,41.5663,3.482857e-031,0,41.5663,97.79053,3.482857e-031,0,97.79053,67.73755,3.498264e-031,0,67.73755,-34.16758,1.1869e-015,0,-34.16758,-75.90661,3.484409e-031,0,-75.90661,-86.57993,1.1869e-015,0,-86.57993,-45.68542,3.484409e-031,0,-45.68542,-12.92931,3.421226e-031,0,-12.92931,-13.00519,1.187599e-015,0,-13.00519,-12.52588,3.467457e-031,0,-12.52588,-14.01463,3.482857e-031,0,-14.01463,-13.91975,3.482857e-031,0,-13.91975,-30.75813,3.482857e-031,0,-30.75813,-47.36969,3.482857e-031,0,-47.36969,-42.17352,1.179961e-015,0,-42.17352,3.369469,3.499816e-031,0,3.369469,54.34502,3.482857e-031,0,54.34502,51.52444,3.482857e-031,0,51.52444,1.438271,3.498264e-031,0,1.438271,-43.60946,3.498264e-031,0,-43.60946,23.64378,1.179961e-015,0,23.64378,79.5575,3.499816e-031,0,79.5575,65.85556,3.421226e-031,0,65.85556,66.01466,6.865665e-029,0,66.01466,67.93379,3.482865e-031,0,67.93379,59.96204,3.482857e-031,0,59.96204,22.84003,3.482857e-031,0,22.84003,-8.954023,3.482857e-031,0,-8.954023,-9.990015,3.482857e-031,0,-9.990015,-15.59267,1.179961e-015,0,-15.59267,-15.0171,3.484408e-031,0,-15.0171,-13.93558,3.482857e-031,0,-13.93558,-19.22727,3.482857e-031,0,-19.22727,-18.69798,3.482857e-031,0,-18.69798,-17.1783,3.482857e-031,0,-17.1783,-18.72695,3.498264e-031,0,-18.72695,-24.05762,3.482857e-031,0,-24.05762,-24.1752,3.482857e-031,0,-24.1752,-11.68479,3.498264e-031,0,-11.68479,4.993798,3.482857e-031,0,4.993798,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *46 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129665584, \"AnimCurve::\", \"\" {\n\t\tDefault: -4.911376953125\n\t\tKeyVer: 4007\n\t\tKeyTime: *46 {\n\t\t\ta: 0,1539538600,3079077200,3848846500,4618615800,5388385100,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,17704693900,18474463200,19244232500,20014001800,20783771100,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *46 {\n\t\t\ta: -0.2281556,-0.8116393,-1.648182,-2.916715,-4.185248,-5.963397,-7.741546,-10.21371,-12.42362,-12.23345,-10.82271,-9.431629,-7.975788,-7.157815,-7.15772,-6.565405,-5.973089,-5.020076,-4.067063,-2.844488,-1.621912,0.05159544,0.9033615,-0.214606,-2.616493,-3.173128,-3.045003,-4.898131,-6.407443,-6.407619,-7.69688,-8.727499,-9.327105,-9.267362,-8.867445,-8.466838,-7.872658,-7.409048,-6.883518,-6.237642,-5.538752,-4.795197,-3.962737,-2.966779,-1.733516,-0.2284132\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *20 {\n\t\t\ta: 1032,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *80 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-114.168,4.099946e-031,0,-114.168,0,4.099946e-031,0,0,-160.0334,4.099946e-031,0,-160.0334,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.9145774,4.099946e-031,0,0.9145774,0,4.099946e-031,0,0,53.30839,4.099946e-031,0,53.30839,0,4.099946e-031,0,0,85.77116,4.099946e-031,0,85.77116,0,4.099946e-031,0,0,110.0318,4.099946e-031,0,110.0318,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-1.687566,4.099946e-031,0,-1.687566,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *20 {\n\t\t\ta: 1,1,1,1,1,1,6,1,1,1,1,1,1,1,1,7,1,1,16,1\n\t\t} \n\t}\n\tAnimationCurve: 129664304, \"AnimCurve::\", \"\" {\n\t\tDefault: -31.2710037231445\n\t\tKeyVer: 4007\n\t\tKeyTime: *46 {\n\t\t\ta: 0,1539538600,3079077200,3848846500,4618615800,5388385100,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,17704693900,18474463200,19244232500,20014001800,20783771100,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *46 {\n\t\t\ta: -11.10239,-16.37076,-23.06231,-29.4272,-35.79797,-42.19787,-48.63469,-54.83731,-61.54433,-66.46061,-67.82286,-66.33256,-62.61441,-56.08582,-56.03572,-51.66957,-47.26077,-41.54079,-35.83307,-31.02521,-26.23933,-21.27983,-17.19805,-20.00532,-27.25462,-29.9888,-30.02294,-33.25843,-39.47702,-39.51013,-43.84833,-47.35511,-48.77818,-48.20774,-47.03755,-45.54545,-43.3063,-41.41833,-39.23192,-36.48225,-33.53179,-30.48222,-27.08713,-23.15325,-17.96021,-11.10693\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, \n\t\t;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *46 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *184 {\n\t\t\ta: -136.7036,-179.3987,3.482857e-031,0,-179.3987,-321.5114,3.482857e-031,0,-321.5114,-382.07,3.482857e-031,0,-382.07,-383.1199,3.482857e-031,0,-383.1199,-385.1015,3.482857e-031,0,-385.1015,-319.4991,3.482857e-031,0,-319.4991,-193.6447,3.498264e-031,0,-193.6447,-174.3495,3.482857e-031,0,-174.3495,-94.17793,1.1869e-015,0,-94.17793,1.920786,3.484409e-031,0,1.920786,78.12685,3.482857e-031,0,78.12685,154.4511,3.498264e-031,0,154.4511,239.8963,3.421226e-031,0,239.8963,240.9291,3.906102e-029,0,240.9291,263.1246,3.467457e-031,0,263.1246,303.8633,3.482857e-031,0,303.8633,342.8311,3.482857e-031,0,342.8311,315.4677,1.179961e-015,0,315.4677,287.812,3.499816e-031,0,287.812,241.0301,1.1869e-015,0,241.0301,135.6192,3.484409e-031,0,135.6192,19.11765,3.498264e-031,0,19.11765,-150.8485,3.498264e-031,0,-150.8485,-149.7522,3.498264e-031,0,-149.7522,-41.5249,3.482857e-031,0,-41.5249,-49.04448,1.179961e-015,0,-49.04448,-142.5399,3.484408e-031,0,-142.5399,-159.2073,3.421226e-031,0,-159.2073,-158.6481,3.906102e-029,0,-158.6481,-117.725,3.482865e-031,0,-117.725,-73.94779,3.482857e-031,0,-73.94779,-12.7895,3.482857e-031,0,-12.7895,26.10949,1.179961e-015,0,26.10949,39.93432,3.484408e-031,0,39.93432,55.96861,3.498264e-031,0,55.96861,61.90676,3.482857e-031,0,61.90676,61.11578,3.498264e-031,0,61.11578,74.04129,3.482857e-031,0,74.04129,85.50191,3.482857e-031,0,85.50191,90.00047,3.482857e-031,0,90.00047,96.66999,3.482857e-031,0,96.66999,109.9345,1.1869e-015,0,109.9345,136.9037,3.484408e-031,0,136.9037,180.6949,3.482857e-031,0,180.6949,230.5023,3.482857e-031,0,230.5023,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *46 {\n\t\t\ta: 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\n\t\t} \n\t}\n\tAnimationCurve: 129667184, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.89655921190024e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 1.896547e-007,1.896567e-007,1.896569e-007,1.896559e-007,1.896557e-007,1.896559e-007,1.896563e-007,1.896568e-007,1.896574e-007,1.896588e-007,1.896573e-007,1.896569e-007,1.896572e-007,1.896546e-007,1.896534e-007,1.89652e-007,1.896534e-007,1.896551e-007,1.896529e-007,1.89655e-007,1.896545e-007,1.896557e-007,1.896535e-007,1.896587e-007,1.896557e-007,1.896559e-007,1.896559e-007,1.896564e-007,1.896559e-007,1.896554e-007,1.896559e-007,1.896548e-007,1.896547e-007,1.896557e-007,1.896561e-007,1.896555e-007,1.896551e-007,1.896553e-007,1.896555e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *13 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *52 {\n\t\t\ta: 0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,1.186901e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *13 {\n\t\t\ta: 10,1,1,9,1,1,1,7,1,1,1,4,1\n\t\t} \n\t}\n\tAnimationCurve: 129668784, \"AnimCurve::\", \"\" {\n\t\tDefault: 5.16880504619621e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 5.168786e-007,5.168799e-007,5.168795e-007,5.168789e-007,5.16879e-007,5.168811e-007,5.168773e-007,5.168773e-007,5.168774e-007,5.168793e-007,5.1688e-007,5.16881e-007,5.168784e-007,5.168779e-007,5.168786e-007,5.168791e-007,5.168806e-007,5.168782e-007,5.168787e-007,5.168764e-007,5.168786e-007,5.168799e-007,5.168785e-007,5.168785e-007,5.168802e-007,5.168802e-007,5.168787e-007,5.168775e-007,5.168788e-007,5.168791e-007,5.168788e-007,5.168791e-007,5.168783e-007,5.168797e-007,5.168807e-007,5.168786e-007,5.168803e-007,5.168769e-007,5.1688e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129667504, \"AnimCurve::\", \"\" {\n\t\tDefault: 4.14072751998901\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 4.356791,4.446802,4.170916,4.042482,4.123709,4.07195,3.999613,4.489667,4.310299,4.235019,4.178489,4.228981,4.245921,4.258229,4.482564,4.843668,4.808043,4.362197,4.150016,4.138653,4.24137,4.425456,4.255672,4.192485,4.223977,4.319167,4.329308,4.328222,4.323752,4.276043,4.257069,4.215905,4.174899,4.14333,4.140245,4.168944,4.19347,4.297219,4.357316\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129664624, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.20476734638214\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 2.998531,3.208285,3.329884,2.936727,2.187594,2.197953,2.303326,-1.632512,0.01612961,0.8930614,2.359705,1.57122,2.282864,1.543429,3.412734,5.181534,6.265584,5.241893,3.381735,0.9348754,-0.9503644,-1.644918,-1.142894,-0.1480894,0.957563,1.998926,1.982268,1.890379,1.802094,1.49238,1.383043,1.170279,1.014874,1.037875,1.235673,1.573547,1.908531,2.518565,3.001812\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129670384, \"AnimCurve::\", \"\" {\n\t\tDefault: 25.1047039031982\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 24.16243,23.60759,21.58997,15.81379,2.507358,-14.501,-12.90901,-7.250752,-5.14674,-3.338454,-0.03205738,2.535204,4.185261,5.508277,6.090518,11.26089,18.93974,20.48142,16.45079,5.76727,-3.405558,-5.796676,0.831438,6.016302,10.14816,13.34354,15.87214,17.92105,19.71133,20.9869,22.21648,22.89267,23.39386,24.25554,25.26196,25.97387,26.2069,25.66108,24.16155\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129664944, \"AnimCurve::\", \"\" {\n\t\tDefault: 5.25022077560425\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: 5.250221,5.250221,5.250221,5.250221,5.25022,5.250221,5.250221,5.25022,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.24554,5.250221,5.250221,5.25022,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250257,5.250221,5.250221,5.250221\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129670704, \"AnimCurve::\", \"\" {\n\t\tDefault: 6.27385330200195\n\t\tKeyVer: 4007\n\t\tKeyTime: *12 {\n\t\t\ta: 0,29251233400,30790772000,32330310599,33862151507,35409387800,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *12 {\n\t\t\ta: 6.273849,6.273849,6.273849,6.277762,6.273849,6.273849,6.273849,6.273849,6.273818,6.273849,6.273849,6.273849\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *12 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *48 {\n\t\t\ta: 0,0,3.499816e-031,0,0,0.05869388,3.498264e-031,0,0.05869388,-0.0007382902,3.482857e-031,0,-0.0007382902,-0.05943218,3.421226e-031,0,-0.05943218,0,3.559895e-031,0,0,0,3.482857e-031,0,0,-0.0004792214,1.179961e-015,0,-0.0004792214,0,3.484408e-031,0,0,0.0004792213,3.482857e-031,0,0.0004792213,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *12 {\n\t\t\ta: 1,1,1,1,1,1,1,1,1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129667824, \"AnimCurve::\", \"\" {\n\t\tDefault: -4.15015392718487e-007\n\t\tKeyVer: 4007\n\t\tKeyTime: *39 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *39 {\n\t\t\ta: -4.15015e-007,-4.150162e-007,-4.150153e-007,-4.150157e-007,-4.15015e-007,-4.150162e-007,-4.150163e-007,-4.15014e-007,-4.150156e-007,-4.150155e-007,-4.150151e-007,-4.150166e-007,-4.15016e-007,-4.150151e-007,-4.150149e-007,-4.150165e-007,-4.150157e-007,-4.150142e-007,-4.150154e-007,-4.150154e-007,-4.150156e-007,-0.004373661,-4.150155e-007,-4.150167e-007,-4.150146e-007,-4.150146e-007,-4.150152e-007,-4.150155e-007,-4.150154e-007,-4.150149e-007,-4.150151e-007,-4.150154e-007,-4.150141e-007,-4.150163e-007,-4.150152e-007,0.005070541,-4.150155e-007,-4.150148e-007,-4.150164e-007\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *3 {\n\t\t\ta: 1032,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *12 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *3 {\n\t\t\ta: 1,37,1\n\t\t} \n\t}\n\tAnimationCurve: 129668144, \"AnimCurve::\", \"\" {\n\t\tDefault: 1.04748585272318e-006\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: 1.047408e-006,1.047409e-006,1.047411e-006,1.047413e-006,1.047415e-006,1.047417e-006,1.047419e-006,1.047421e-006,1.047423e-006,1.047425e-006,1.047427e-006,1.047429e-006,1.047429e-006,1.04743e-006,1.047432e-006,1.047434e-006,1.047435e-006,1.047437e-006,1.047438e-006,1.047439e-006,1.04744e-006,1.047441e-006,0.01731789,1.047386e-006,-5.367074e-005,1.047433e-006,1.047455e-006,1.047472e-006,1.047485e-006,1.047493e-006,1.047497e-006,1.047499e-006,1.047498e-006,1.047496e-006,1.047492e-006,1.047488e-006,1.047484e-006,1.04748e-006,1.047478e-006,1.047477e-006,1.047479e-006\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *28 {\n\t\t\ta: 50332680,50332680,50334728,50334728,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *112 {\n\t\t\ta: 0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,1.187599e-015,0,0,0,3.482865e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0.2597526,1.1869e-015,0,0.2597526,0,1.18066e-015,0,0,-0.26302,1.097392e-015,0,-0.26302,0,1.187599e-015,0,0,0,3.482865e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *28 {\n\t\t\ta: 10,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1\n\t\t} \n\t}\n\tAnimationCurve: 129668464, \"AnimCurve::\", \"\" {\n\t\tDefault: -3.46426012876044e-011\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: 0,-1.628444e-012,-2.442666e-012,-3.663999e-012,-5.292443e-012,-6.513776e-012,-8.14222e-012,-9.770664e-012,-1.139911e-011,-1.262044e-011,-1.424889e-011,-1.506301e-011,-1.506311e-011,-1.669155e-011,-1.750577e-011,-1.831999e-011,-1.872711e-011,-1.913422e-011,-1.913422e-011,-1.913422e-011,-1.872711e-011,-1.669155e-011,0.02847441,3.322935e-006,-7.735109e-012,-2.564799e-011,-3.33831e-011,-3.908266e-011,-4.274666e-011,-4.518932e-011,-4.600354e-011,-4.559643e-011,-4.43751e-011,-4.193243e-011,-3.989688e-011,-3.70471e-011,-3.419733e-011,-3.134755e-011,-2.97191e-011,-2.849777e-011,-2.809066e-011\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser\n\t\tKeyAttrFlags: *6 {\n\t\t\ta: 1032,3080,3080,3080,3080,1032\n\t\t} \n\t\tKeyAttrDataFloat: *24 {\n\t\t\ta: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-0.03183363,4.099946e-031,0,-0.03183363,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *6 {\n\t\t\ta: 1,21,1,1,16,1\n\t\t} \n\t}\n\tAnimationCurve: 129665264, \"AnimCurve::\", \"\" {\n\t\tDefault: 104.594665527344\n\t\tKeyVer: 4007\n\t\tKeyTime: *41 {\n\t\t\ta: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800\n\t\t} \n\t\tKeyValueFloat: *41 {\n\t\t\ta: 104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.6374,104.5947,104.5945,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947\n\t\t} \n\t\t;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser\n\t\tKeyAttrFlags: *16 {\n\t\t\ta: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50334728,50334728,50332680,50332680,1032\n\t\t} \n\t\tKeyAttrDataFloat: *64 {\n\t\t\ta: 0,0,4.09993e-031,0,0,0,4.099946e-031,0,0,0,3.945869e-031,0,0,0,1.187599e-015,0,0,0,4.099946e-031,0,0,0,3.482865e-031,0,0,0.6411498,3.482857e-031,0,0.6411498,-0.008064806,1.179961e-015,0,-0.008064806,-0.6492146,3.422776e-031,0,-0.6492146,0,1.187599e-015,0,0,0,3.482865e-031,0,0,0,4.09993e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,3.482865e-031,0,0,0,4.099946e-031,0\n\t\t} \n\t\tKeyAttrRefCount: *16 {\n\t\t\ta: 1,9,1,1,7,1,1,1,1,1,1,1,1,12,1,1\n\t\t} \n\t}\n}\n\n; Object connections\n;------------------------------------------------------------------\n\nConnections:  {\n\t\n\t;Model::Root, Model::RootNode\n\tC: \"OO\",125296688,0\n\t\n\t;Model::him, Model::RootNode\n\tC: \"OO\",126231872,0\n\t\n\t;NodeAttribute::, Model::Camera_Switcher\n\tC: \"OO\",125164624,125162032\n\t\n\t;NodeAttribute::, Model::Root\n\tC: \"OO\",125067472,125296688\n\t\n\t;Model::Pelvis, Model::Root\n\tC: \"OO\",125274112,125296688\n\t\n\t;NodeAttribute::, Model::Pelvis\n\tC: \"OO\",125067824,125274112\n\t\n\t;Model::Spine, Model::Pelvis\n\tC: \"OO\",125276368,125274112\n\t\n\t;AnimCurveNode::T, Model::Pelvis\n\tC: \"OP\",125161664,125274112, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::Pelvis\n\tC: \"OP\",130891072,125274112, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::Pelvis\n\tC: \"OP\",125193872,125274112, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::Pelvis\n\tC: \"OP\",125194240,125274112, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::Pelvis\n\tC: \"OP\",125675888,125274112, \"liw\"\n\t\n\t;NodeAttribute::, Model::Spine\n\tC: \"OO\",125064304,125276368\n\t\n\t;Model::Spine1, Model::Spine\n\tC: \"OO\",125278624,125276368\n\t\n\t;Model::L_Thigh1, Model::Spine\n\tC: \"OO\",126220272,125276368\n\t\n\t;Model::R_Thigh, Model::Spine\n\tC: \"OO\",126227232,125276368\n\t\n\t;NodeAttribute::, Model::Spine1\n\tC: \"OO\",125064656,125278624\n\t\n\t;Model::Spine2, Model::Spine1\n\tC: \"OO\",125280880,125278624\n\t\n\t;AnimCurveNode::T, Model::Spine1\n\tC: \"OP\",125676256,125278624, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::Spine1\n\tC: \"OP\",125676624,125278624, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::Spine1\n\tC: \"OP\",130892928,125278624, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::Spine1\n\tC: \"OP\",125160992,125278624, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::Spine1\n\tC: \"OP\",130893296,125278624, \"liw\"\n\t\n\t;NodeAttribute::, Model::Spine2\n\tC: \"OO\",125290432,125280880\n\t\n\t;Model::Spine3, Model::Spine2\n\tC: \"OO\",125692096,125280880\n\t\n\t;AnimCurveNode::T, Model::Spine2\n\tC: \"OP\",136827728,125280880, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::Spine2\n\tC: \"OP\",136826992,125280880, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::Spine2\n\tC: \"OP\",136829568,125280880, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::Spine2\n\tC: \"OP\",136827360,125280880, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::Spine2\n\tC: \"OP\",136829936,125280880, \"liw\"\n\t\n\t;NodeAttribute::, Model::Spine3\n\tC: \"OO\",125290784,125692096\n\t\n\t;Model::Neck, Model::Spine3\n\tC: \"OO\",125694352,125692096\n\t\n\t;AnimCurveNode::T, Model::Spine3\n\tC: \"OP\",136828096,125692096, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::Spine3\n\tC: \"OP\",136828464,125692096, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::Spine3\n\tC: \"OP\",136828832,125692096, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::Spine3\n\tC: \"OP\",136829200,125692096, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::Spine3\n\tC: \"OP\",136830304,125692096, \"liw\"\n\t\n\t;NodeAttribute::, Model::Neck\n\tC: \"OO\",125288320,125694352\n\t\n\t;Model::Head, Model::Neck\n\tC: \"OO\",125673632,125694352\n\t\n\t;Model::L_Clavicle, Model::Neck\n\tC: \"OO\",125724528,125694352\n\t\n\t;Model::R_Clavicle, Model::Neck\n\tC: \"OO\",125842080,125694352\n\t\n\t;AnimCurveNode::T, Model::Neck\n\tC: \"OP\",137457504,125694352, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::Neck\n\tC: \"OP\",137456400,125694352, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::Neck\n\tC: \"OP\",137455296,125694352, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::Neck\n\tC: \"OP\",137458976,125694352, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::Neck\n\tC: \"OP\",137455664,125694352, \"liw\"\n\t\n\t;NodeAttribute::, Model::Head\n\tC: \"OO\",125292192,125673632\n\t\n\t;Model::L_eye_joint1, Model::Head\n\tC: \"OO\",125726848,125673632\n\t\n\t;Model::R_eye_joint, Model::Head\n\tC: \"OO\",125715248,125673632\n\t\n\t;Model::L_eyeBall_joint2, Model::Head\n\tC: \"OO\",125722208,125673632\n\t\n\t;Model::R_eyeBall_joint, Model::Head\n\tC: \"OO\",125703648,125673632\n\t\n\t;AnimCurveNode::T, Model::Head\n\tC: \"OP\",137457872,125673632, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::Head\n\tC: \"OP\",137458240,125673632, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::Head\n\tC: \"OP\",137456032,125673632, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::Head\n\tC: \"OP\",137454560,125673632, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::Head\n\tC: \"OP\",137458608,125673632, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_eye_joint1\n\tC: \"OO\",125285856,125726848\n\t\n\t;AnimCurveNode::T, Model::L_eye_joint1\n\tC: \"OP\",137460816,125726848, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_eye_joint1\n\tC: \"OP\",137453824,125726848, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_eye_joint1\n\tC: \"OP\",137459344,125726848, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_eye_joint1\n\tC: \"OP\",137459712,125726848, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_eye_joint1\n\tC: \"OP\",137456768,125726848, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_eye_joint\n\tC: \"OO\",125289728,125715248\n\t\n\t;AnimCurveNode::T, Model::R_eye_joint\n\tC: \"OP\",137461184,125715248, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_eye_joint\n\tC: \"OP\",137460080,125715248, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_eye_joint\n\tC: \"OP\",137454192,125715248, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_eye_joint\n\tC: \"OP\",137454928,125715248, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_eye_joint\n\tC: \"OP\",137460448,125715248, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_eyeBall_joint2\n\tC: \"OO\",125286560,125722208\n\t\n\t;AnimCurveNode::T, Model::L_eyeBall_joint2\n\tC: \"OP\",137457136,125722208, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_eyeBall_joint2\n\tC: \"OP\",137461552,125722208, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_eyeBall_joint2\n\tC: \"OP\",131342512,125722208, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_eyeBall_joint2\n\tC: \"OP\",131344352,125722208, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_eyeBall_joint2\n\tC: \"OP\",131343984,125722208, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_eyeBall_joint\n\tC: \"OO\",125287968,125703648\n\t\n\t;AnimCurveNode::T, Model::R_eyeBall_joint\n\tC: \"OP\",131344720,125703648, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_eyeBall_joint\n\tC: \"OP\",131350240,125703648, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_eyeBall_joint\n\tC: \"OP\",131345088,125703648, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_eyeBall_joint\n\tC: \"OP\",131345824,125703648, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_eyeBall_joint\n\tC: \"OP\",131348032,125703648, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Clavicle\n\tC: \"OO\",125286208,125724528\n\t\n\t;Model::L_UpperArm, Model::L_Clavicle\n\tC: \"OO\",125705968,125724528\n\t\n\t;NodeAttribute::, Model::L_UpperArm\n\tC: \"OO\",125288672,125705968\n\t\n\t;Model::L_Forearm, Model::L_UpperArm\n\tC: \"OO\",125710608,125705968\n\t\n\t;AnimCurveNode::T, Model::L_UpperArm\n\tC: \"OP\",131345456,125705968, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_UpperArm\n\tC: \"OP\",131347664,125705968, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_UpperArm\n\tC: \"OP\",131348768,125705968, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_UpperArm\n\tC: \"OP\",131346192,125705968, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_UpperArm\n\tC: \"OP\",131343248,125705968, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Forearm\n\tC: \"OO\",125291136,125710608\n\t\n\t;Model::L_Hand, Model::L_Forearm\n\tC: \"OO\",125708288,125710608\n\t\n\t;AnimCurveNode::T, Model::L_Forearm\n\tC: \"OP\",131346560,125710608, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Forearm\n\tC: \"OP\",131346928,125710608, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Forearm\n\tC: \"OP\",131347296,125710608, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Forearm\n\tC: \"OP\",131348400,125710608, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Forearm\n\tC: \"OP\",131349136,125710608, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Hand\n\tC: \"OO\",125291488,125708288\n\t\n\t;Model::L_Thumb1, Model::L_Hand\n\tC: \"OO\",125712928,125708288\n\t\n\t;Model::L_Index1, Model::L_Hand\n\tC: \"OO\",125719888,125708288\n\t\n\t;Model::L_Middle1, Model::L_Hand\n\tC: \"OO\",125835120,125708288\n\t\n\t;Model::L_Ring1, Model::L_Hand\n\tC: \"OO\",125844400,125708288\n\t\n\t;Model::L_Pinky1, Model::L_Hand\n\tC: \"OO\",125828160,125708288\n\t\n\t;AnimCurveNode::T, Model::L_Hand\n\tC: \"OP\",131349504,125708288, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Hand\n\tC: \"OP\",131349872,125708288, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Hand\n\tC: \"OP\",131342880,125708288, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Hand\n\tC: \"OP\",131343616,125708288, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Hand\n\tC: \"OP\",131428944,125708288, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Thumb1\n\tC: \"OO\",125284448,125712928\n\t\n\t;Model::L_Thumb2, Model::L_Thumb1\n\tC: \"OO\",125717568,125712928\n\t\n\t;AnimCurveNode::T, Model::L_Thumb1\n\tC: \"OP\",131428576,125712928, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Thumb1\n\tC: \"OP\",131428208,125712928, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Thumb1\n\tC: \"OP\",131431152,125712928, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Thumb1\n\tC: \"OP\",131430416,125712928, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Thumb1\n\tC: \"OP\",131426000,125712928, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Thumb2\n\tC: \"OO\",125291840,125717568\n\t\n\t;Model::L_Thumb3, Model::L_Thumb2\n\tC: \"OO\",125696688,125717568\n\t\n\t;AnimCurveNode::T, Model::L_Thumb2\n\tC: \"OP\",131425264,125717568, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Thumb2\n\tC: \"OP\",131430784,125717568, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Thumb2\n\tC: \"OP\",131427104,125717568, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Thumb2\n\tC: \"OP\",131427840,125717568, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Thumb2\n\tC: \"OP\",131429312,125717568, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Thumb3\n\tC: \"OO\",125284800,125696688\n\t\n\t;AnimCurveNode::T, Model::L_Thumb3\n\tC: \"OP\",131429680,125696688, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Thumb3\n\tC: \"OP\",131424528,125696688, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Thumb3\n\tC: \"OP\",131427472,125696688, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Thumb3\n\tC: \"OP\",131431520,125696688, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Thumb3\n\tC: \"OP\",131426736,125696688, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Index1\n\tC: \"OO\",125285152,125719888\n\t\n\t;Model::L_Index2, Model::L_Index1\n\tC: \"OO\",125699008,125719888\n\t\n\t;AnimCurveNode::T, Model::L_Index1\n\tC: \"OP\",131431888,125719888, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Index1\n\tC: \"OP\",131430048,125719888, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Index1\n\tC: \"OP\",131432256,125719888, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Index1\n\tC: \"OP\",131425632,125719888, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Index1\n\tC: \"OP\",131424896,125719888, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Index2\n\tC: \"OO\",125285504,125699008\n\t\n\t;Model::L_Index3, Model::L_Index2\n\tC: \"OO\",125701328,125699008\n\t\n\t;AnimCurveNode::T, Model::L_Index2\n\tC: \"OP\",131426368,125699008, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Index2\n\tC: \"OP\",136845648,125699008, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Index2\n\tC: \"OP\",136844176,125699008, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Index2\n\tC: \"OP\",136846752,125699008, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Index2\n\tC: \"OP\",136846016,125699008, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Index3\n\tC: \"OO\",125286912,125701328\n\t\n\t;AnimCurveNode::T, Model::L_Index3\n\tC: \"OP\",136843808,125701328, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Index3\n\tC: \"OP\",136844544,125701328, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Index3\n\tC: \"OP\",136846384,125701328, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Index3\n\tC: \"OP\",136843440,125701328, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Index3\n\tC: \"OP\",136844912,125701328, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Middle1\n\tC: \"OO\",125289024,125835120\n\t\n\t;Model::L_Middle2, Model::L_Middle1\n\tC: \"OO\",125839760,125835120\n\t\n\t;AnimCurveNode::T, Model::L_Middle1\n\tC: \"OP\",136845280,125835120, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Middle1\n\tC: \"OP\",131533328,125835120, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Middle1\n\tC: \"OP\",131531120,125835120, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Middle1\n\tC: \"OP\",131532224,125835120, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Middle1\n\tC: \"OP\",131532592,125835120, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Middle2\n\tC: \"OO\",125287264,125839760\n\t\n\t;Model::L_Middle3, Model::L_Middle2\n\tC: \"OO\",125851360,125839760\n\t\n\t;AnimCurveNode::T, Model::L_Middle2\n\tC: \"OP\",131531488,125839760, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Middle2\n\tC: \"OP\",131534064,125839760, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Middle2\n\tC: \"OP\",131535536,125839760, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Middle2\n\tC: \"OP\",131532960,125839760, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Middle2\n\tC: \"OP\",131531856,125839760, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Middle3\n\tC: \"OO\",125287616,125851360\n\t\n\t;AnimCurveNode::T, Model::L_Middle3\n\tC: \"OP\",131533696,125851360, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Middle3\n\tC: \"OP\",131534432,125851360, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Middle3\n\tC: \"OP\",131536272,125851360, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Middle3\n\tC: \"OP\",131538112,125851360, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Middle3\n\tC: \"OP\",131535904,125851360, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Ring1\n\tC: \"OO\",125289376,125844400\n\t\n\t;Model::L_Ring2, Model::L_Ring1\n\tC: \"OO\",125837440,125844400\n\t\n\t;AnimCurveNode::T, Model::L_Ring1\n\tC: \"OP\",131534800,125844400, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Ring1\n\tC: \"OP\",131536640,125844400, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Ring1\n\tC: \"OP\",131537008,125844400, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Ring1\n\tC: \"OP\",131535168,125844400, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Ring1\n\tC: \"OP\",131537376,125844400, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Ring2\n\tC: \"OO\",125290080,125837440\n\t\n\t;Model::L_Ring3, Model::L_Ring2\n\tC: \"OO\",125853680,125837440\n\t\n\t;AnimCurveNode::T, Model::L_Ring2\n\tC: \"OP\",131537744,125837440, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Ring2\n\tC: \"OP\",131538480,125837440, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Ring2\n\tC: \"OP\",131538848,125837440, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Ring2\n\tC: \"OP\",134646400,125837440, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Ring2\n\tC: \"OP\",134640512,125837440, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Ring3\n\tC: \"OO\",125986480,125853680\n\t\n\t;AnimCurveNode::T, Model::L_Ring3\n\tC: \"OP\",134644928,125853680, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Ring3\n\tC: \"OP\",134640880,125853680, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Ring3\n\tC: \"OP\",134647504,125853680, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Ring3\n\tC: \"OP\",134639776,125853680, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Ring3\n\tC: \"OP\",134643088,125853680, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Pinky1\n\tC: \"OO\",125984368,125828160\n\t\n\t;Model::L_Pinky2, Model::L_Pinky1\n\tC: \"OO\",125856000,125828160\n\t\n\t;AnimCurveNode::T, Model::L_Pinky1\n\tC: \"OP\",134641248,125828160, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Pinky1\n\tC: \"OP\",134645296,125828160, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Pinky1\n\tC: \"OP\",134646768,125828160, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Pinky1\n\tC: \"OP\",134644192,125828160, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Pinky1\n\tC: \"OP\",134641616,125828160, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Pinky2\n\tC: \"OO\",125987888,125856000\n\t\n\t;Model::L_Pinky3, Model::L_Pinky2\n\tC: \"OO\",125849040,125856000\n\t\n\t;AnimCurveNode::T, Model::L_Pinky2\n\tC: \"OP\",134641984,125856000, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Pinky2\n\tC: \"OP\",134640144,125856000, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Pinky2\n\tC: \"OP\",134645664,125856000, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Pinky2\n\tC: \"OP\",134647136,125856000, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Pinky2\n\tC: \"OP\",134642352,125856000, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Pinky3\n\tC: \"OO\",125988592,125849040\n\t\n\t;AnimCurveNode::T, Model::L_Pinky3\n\tC: \"OP\",134643456,125849040, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Pinky3\n\tC: \"OP\",134646032,125849040, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Pinky3\n\tC: \"OP\",134642720,125849040, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Pinky3\n\tC: \"OP\",134643824,125849040, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Pinky3\n\tC: \"OP\",134644560,125849040, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Clavicle\n\tC: \"OO\",125984016,125842080\n\t\n\t;Model::R_UpperArm, Model::R_Clavicle\n\tC: \"OO\",125846720,125842080\n\t\n\t;NodeAttribute::, Model::R_UpperArm\n\tC: \"OO\",125982256,125846720\n\t\n\t;Model::R_Forearm, Model::R_UpperArm\n\tC: \"OO\",125832800,125846720\n\t\n\t;AnimCurveNode::T, Model::R_UpperArm\n\tC: \"OP\",134718368,125846720, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_UpperArm\n\tC: \"OP\",134720576,125846720, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_UpperArm\n\tC: \"OP\",134715056,125846720, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_UpperArm\n\tC: \"OP\",134713952,125846720, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_UpperArm\n\tC: \"OP\",134720208,125846720, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Forearm\n\tC: \"OO\",125984720,125832800\n\t\n\t;Model::R_Hand, Model::R_Forearm\n\tC: \"OO\",125825840,125832800\n\t\n\t;AnimCurveNode::T, Model::R_Forearm\n\tC: \"OP\",134720944,125832800, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Forearm\n\tC: \"OP\",134719840,125832800, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Forearm\n\tC: \"OP\",134713584,125832800, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Forearm\n\tC: \"OP\",134721312,125832800, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Forearm\n\tC: \"OP\",134714320,125832800, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Hand\n\tC: \"OO\",125986832,125825840\n\t\n\t;Model::R_Thumb1, Model::R_Hand\n\tC: \"OO\",125858320,125825840\n\t\n\t;Model::R_Index1, Model::R_Hand\n\tC: \"OO\",125888480,125825840\n\t\n\t;Model::R_Middle1, Model::R_Hand\n\tC: \"OO\",125886160,125825840\n\t\n\t;Model::R_Ring1, Model::R_Hand\n\tC: \"OO\",125874560,125825840\n\t\n\t;Model::R_Pinky1, Model::R_Hand\n\tC: \"OO\",125876880,125825840\n\t\n\t;AnimCurveNode::T, Model::R_Hand\n\tC: \"OP\",134716160,125825840, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Hand\n\tC: \"OP\",134714688,125825840, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Hand\n\tC: \"OP\",134716528,125825840, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Hand\n\tC: \"OP\",134716896,125825840, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Hand\n\tC: \"OP\",134719104,125825840, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Thumb1\n\tC: \"OO\",125985776,125858320\n\t\n\t;Model::R_Thumb2, Model::R_Thumb1\n\tC: \"OO\",125830480,125858320\n\t\n\t;AnimCurveNode::T, Model::R_Thumb1\n\tC: \"OP\",134715424,125858320, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Thumb1\n\tC: \"OP\",134715792,125858320, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Thumb1\n\tC: \"OP\",134717264,125858320, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Thumb1\n\tC: \"OP\",134717632,125858320, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Thumb1\n\tC: \"OP\",134718000,125858320, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Thumb2\n\tC: \"OO\",125988944,125830480\n\t\n\t;Model::R_Thumb3, Model::R_Thumb2\n\tC: \"OO\",125872240,125830480\n\t\n\t;AnimCurveNode::T, Model::R_Thumb2\n\tC: \"OP\",134718736,125830480, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Thumb2\n\tC: \"OP\",134719472,125830480, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Thumb2\n\tC: \"OP\",129431456,125830480, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Thumb2\n\tC: \"OP\",129427776,125830480, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Thumb2\n\tC: \"OP\",129427408,125830480, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Thumb3\n\tC: \"OO\",125982608,125872240\n\t\n\t;AnimCurveNode::T, Model::R_Thumb3\n\tC: \"OP\",129427040,125872240, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Thumb3\n\tC: \"OP\",129425568,125872240, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Thumb3\n\tC: \"OP\",129429984,125872240, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Thumb3\n\tC: \"OP\",129426672,125872240, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Thumb3\n\tC: \"OP\",129428880,125872240, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Index1\n\tC: \"OO\",125981552,125888480\n\t\n\t;Model::R_Index2, Model::R_Index1\n\tC: \"OO\",125862960,125888480\n\t\n\t;AnimCurveNode::T, Model::R_Index1\n\tC: \"OP\",129431088,125888480, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Index1\n\tC: \"OP\",129431824,125888480, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Index1\n\tC: \"OP\",129432192,125888480, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Index1\n\tC: \"OP\",129425936,125888480, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Index1\n\tC: \"OP\",129429616,125888480, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Index2\n\tC: \"OO\",125986128,125862960\n\t\n\t;Model::R_Index3, Model::R_Index2\n\tC: \"OO\",125879200,125862960\n\t\n\t;AnimCurveNode::T, Model::R_Index2\n\tC: \"OP\",129428144,125862960, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Index2\n\tC: \"OP\",129426304,125862960, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Index2\n\tC: \"OP\",129432560,125862960, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Index2\n\tC: \"OP\",129433296,125862960, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Index2\n\tC: \"OP\",129432928,125862960, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Index3\n\tC: \"OO\",125989296,125879200\n\t\n\t;AnimCurveNode::T, Model::R_Index3\n\tC: \"OP\",129430720,125879200, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Index3\n\tC: \"OP\",129428512,125879200, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Index3\n\tC: \"OP\",129429248,125879200, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Index3\n\tC: \"OP\",129430352,125879200, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Index3\n\tC: \"OP\",129504128,125879200, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Middle1\n\tC: \"OO\",125982960,125886160\n\t\n\t;Model::R_Middle2, Model::R_Middle1\n\tC: \"OO\",125869920,125886160\n\t\n\t;AnimCurveNode::T, Model::R_Middle1\n\tC: \"OP\",129501552,125886160, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Middle1\n\tC: \"OP\",129500080,125886160, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Middle1\n\tC: \"OP\",129504864,125886160, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Middle1\n\tC: \"OP\",129503392,125886160, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Middle1\n\tC: \"OP\",129500448,125886160, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Middle2\n\tC: \"OO\",125988240,125869920\n\t\n\t;Model::R_Middle3, Model::R_Middle2\n\tC: \"OO\",125860640,125869920\n\t\n\t;AnimCurveNode::T, Model::R_Middle2\n\tC: \"OP\",129501920,125869920, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Middle2\n\tC: \"OP\",129503760,125869920, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Middle2\n\tC: \"OP\",129504496,125869920, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Middle2\n\tC: \"OP\",129501184,125869920, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Middle2\n\tC: \"OP\",129499344,125869920, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Middle3\n\tC: \"OO\",125983312,125860640\n\t\n\t;AnimCurveNode::T, Model::R_Middle3\n\tC: \"OP\",129506336,125860640, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Middle3\n\tC: \"OP\",129502288,125860640, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Middle3\n\tC: \"OP\",129502656,125860640, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Middle3\n\tC: \"OP\",129500816,125860640, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Middle3\n\tC: \"OP\",129507072,125860640, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Ring1\n\tC: \"OO\",125983664,125874560\n\t\n\t;Model::R_Ring2, Model::R_Ring1\n\tC: \"OO\",125865280,125874560\n\t\n\t;AnimCurveNode::T, Model::R_Ring1\n\tC: \"OP\",129505232,125874560, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Ring1\n\tC: \"OP\",129505600,125874560, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Ring1\n\tC: \"OP\",129505968,125874560, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Ring1\n\tC: \"OP\",129506704,125874560, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Ring1\n\tC: \"OP\",129503024,125874560, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Ring2\n\tC: \"OO\",125985072,125865280\n\t\n\t;Model::R_Ring3, Model::R_Ring2\n\tC: \"OO\",125867600,125865280\n\t\n\t;AnimCurveNode::T, Model::R_Ring2\n\tC: \"OP\",129499712,125865280, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Ring2\n\tC: \"OP\",129593952,125865280, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Ring2\n\tC: \"OP\",129589536,125865280, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Ring2\n\tC: \"OP\",129591008,125865280, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Ring2\n\tC: \"OP\",129596528,125865280, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Ring3\n\tC: \"OO\",125987184,125867600\n\t\n\t;AnimCurveNode::T, Model::R_Ring3\n\tC: \"OP\",129590272,125867600, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Ring3\n\tC: \"OP\",129604992,125867600, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Ring3\n\tC: \"OP\",129594688,125867600, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Ring3\n\tC: \"OP\",129596160,125867600, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Ring3\n\tC: \"OP\",129595056,125867600, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Pinky1\n\tC: \"OO\",125981904,125876880\n\t\n\t;Model::R_Pinky2, Model::R_Pinky1\n\tC: \"OO\",125881520,125876880\n\t\n\t;AnimCurveNode::T, Model::R_Pinky1\n\tC: \"OP\",129590640,125876880, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Pinky1\n\tC: \"OP\",129599840,125876880, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Pinky1\n\tC: \"OP\",129597264,125876880, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Pinky1\n\tC: \"OP\",129595424,125876880, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Pinky1\n\tC: \"OP\",129603888,125876880, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Pinky2\n\tC: \"OO\",125985424,125881520\n\t\n\t;Model::R_Pinky3, Model::R_Pinky2\n\tC: \"OO\",125883840,125881520\n\t\n\t;AnimCurveNode::T, Model::R_Pinky2\n\tC: \"OP\",129597632,125881520, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Pinky2\n\tC: \"OP\",129598368,125881520, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Pinky2\n\tC: \"OP\",129593216,125881520, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Pinky2\n\tC: \"OP\",129591376,125881520, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Pinky2\n\tC: \"OP\",129591744,125881520, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Pinky3\n\tC: \"OO\",125987536,125883840\n\t\n\t;AnimCurveNode::T, Model::R_Pinky3\n\tC: \"OP\",129600576,125883840, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Pinky3\n\tC: \"OP\",129594320,125883840, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Pinky3\n\tC: \"OP\",129592848,125883840, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Pinky3\n\tC: \"OP\",129589904,125883840, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Pinky3\n\tC: \"OP\",129598000,125883840, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Thigh1\n\tC: \"OO\",126063936,126220272\n\t\n\t;Model::L_Knee2, Model::L_Thigh1\n\tC: \"OO\",126222592,126220272\n\t\n\t;AnimCurveNode::T, Model::L_Thigh1\n\tC: \"OP\",129601312,126220272, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Thigh1\n\tC: \"OP\",129603152,126220272, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Thigh1\n\tC: \"OP\",129605360,126220272, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Thigh1\n\tC: \"OP\",129598736,126220272, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Thigh1\n\tC: \"OP\",129602416,126220272, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Knee2\n\tC: \"OO\",126064992,126222592\n\t\n\t;Model::L_Ankle1, Model::L_Knee2\n\tC: \"OO\",126194752,126222592\n\t\n\t;AnimCurveNode::T, Model::L_Knee2\n\tC: \"OP\",129595792,126222592, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Knee2\n\tC: \"OP\",129596896,126222592, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Knee2\n\tC: \"OP\",129592112,126222592, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Knee2\n\tC: \"OP\",129599104,126222592, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Knee2\n\tC: \"OP\",129600944,126222592, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Ankle1\n\tC: \"OO\",126066048,126194752\n\t\n\t;Model::L_Ball, Model::L_Ankle1\n\tC: \"OO\",126197072,126194752\n\t\n\t;AnimCurveNode::T, Model::L_Ankle1\n\tC: \"OP\",129604624,126194752, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Ankle1\n\tC: \"OP\",129593584,126194752, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Ankle1\n\tC: \"OP\",129599472,126194752, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Ankle1\n\tC: \"OP\",129592480,126194752, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Ankle1\n\tC: \"OP\",129600208,126194752, \"liw\"\n\t\n\t;NodeAttribute::, Model::L_Ball\n\tC: \"OO\",126071328,126197072\n\t\n\t;AnimCurveNode::T, Model::L_Ball\n\tC: \"OP\",129601680,126197072, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::L_Ball\n\tC: \"OP\",129602048,126197072, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::L_Ball\n\tC: \"OP\",129602784,126197072, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::L_Ball\n\tC: \"OP\",129603520,126197072, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::L_Ball\n\tC: \"OP\",129604256,126197072, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Thigh\n\tC: \"OO\",126070976,126227232\n\t\n\t;Model::R_Knee, Model::R_Thigh\n\tC: \"OO\",126224912,126227232\n\t\n\t;AnimCurveNode::T, Model::R_Thigh\n\tC: \"OP\",129681488,126227232, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Thigh\n\tC: \"OP\",129686272,126227232, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Thigh\n\tC: \"OP\",129676704,126227232, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Thigh\n\tC: \"OP\",129678544,126227232, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Thigh\n\tC: \"OP\",129677808,126227232, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Knee\n\tC: \"OO\",126069920,126224912\n\t\n\t;Model::R_Ankle, Model::R_Knee\n\tC: \"OO\",126229552,126224912\n\t\n\t;AnimCurveNode::T, Model::R_Knee\n\tC: \"OP\",129682960,126224912, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Knee\n\tC: \"OP\",129683328,126224912, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Knee\n\tC: \"OP\",129682592,126224912, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Knee\n\tC: \"OP\",129679280,126224912, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Knee\n\tC: \"OP\",129687376,126224912, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Ankle\n\tC: \"OO\",126067104,126229552\n\t\n\t;Model::R_Ball, Model::R_Ankle\n\tC: \"OO\",126199392,126229552\n\t\n\t;AnimCurveNode::T, Model::R_Ankle\n\tC: \"OP\",129678912,126229552, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Ankle\n\tC: \"OP\",129674864,126229552, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Ankle\n\tC: \"OP\",129673392,126229552, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Ankle\n\tC: \"OP\",129685904,126229552, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Ankle\n\tC: \"OP\",129681856,126229552, \"liw\"\n\t\n\t;NodeAttribute::, Model::R_Ball\n\tC: \"OO\",126065344,126199392\n\t\n\t;AnimCurveNode::T, Model::R_Ball\n\tC: \"OP\",129675232,126199392, \"Lcl Translation\"\n\t\n\t;AnimCurveNode::R, Model::R_Ball\n\tC: \"OP\",129686640,126199392, \"Lcl Rotation\"\n\t\n\t;AnimCurveNode::S, Model::R_Ball\n\tC: \"OP\",129681120,126199392, \"Lcl Scaling\"\n\t\n\t;AnimCurveNode::Visibility, Model::R_Ball\n\tC: \"OP\",129680752,126199392, \"Visibility\"\n\t\n\t;AnimCurveNode::liw, Model::R_Ball\n\tC: \"OP\",129684432,126199392, \"liw\"\n\t\n\t;Geometry::, Model::him\n\tC: \"OO\",125738640,126231872\n\t\n\t;Material::character_anim:headM, Model::him\n\tC: \"OO\",136657872,126231872\n\t\n\t;Material::character_anim:jacketM, Model::him\n\tC: \"OO\",136655312,126231872\n\t\n\t;Material::character_anim:pantsM, Model::him\n\tC: \"OO\",136658512,126231872\n\t\n\t;Material::character_anim:upBodyM, Model::him\n\tC: \"OO\",136657232,126231872\n\t\n\t;Material::character_anim:eyeBallM, Model::him\n\tC: \"OO\",136651472,126231872\n\t\n\t;Deformer::Skin_him, Geometry::\n\tC: \"OO\",125204720,125738640\n\t\n\t;Video::character_anim:file2, Texture::character_anim:file2\n\tC: \"OO\",125241152,133131328\n\t\n\t;Video::character_anim:file1, Texture::character_anim:file1\n\tC: \"OO\",125241792,133273888\n\t\n\t;Video::character_anim:file6, Texture::character_anim:file6\n\tC: \"OO\",126003728,133274640\n\t\n\t;Video::character_anim:file8, Texture::character_anim:file8\n\tC: \"OO\",126004368,133302528\n\t\n\t;Video::character_anim:file13, Texture::character_anim:file13\n\tC: \"OO\",126005008,133303280\n\t\n\t;Video::character_anim:soldier_bindPose:file9, Texture::character_anim:soldier_bindPose:file9\n\tC: \"OO\",126003088,125298944\n\t\n\t;Video::character_anim:file10, Texture::character_anim:file10\n\tC: \"OO\",125999248,125299696\n\t\n\t;Video::character_anim:file12, Texture::character_anim:file12\n\tC: \"OO\",125997968,125235136\n\t\n\t;Video::character_anim:file11, Texture::character_anim:file11\n\tC: \"OO\",126002448,125235888\n\t\n\t;Video::character_anim:file15, Texture::character_anim:file15\n\tC: \"OO\",125998608,125236640\n\t\n\t;Video::character_anim:file3, Texture::character_anim:file3\n\tC: \"OO\",125999888,125237392\n\t\n\t;Video::character_anim:file4, Texture::character_anim:file4\n\tC: \"OO\",126000528,125238144\n\t\n\t;Video::character_anim:file7, Texture::character_anim:file7\n\tC: \"OO\",126001168,125238896\n\t\n\t;Video::character_anim:file5, Texture::character_anim:file5\n\tC: \"OO\",126001808,125239648\n\t\n\t;Video::character_anim:file14, Texture::character_anim:file14\n\tC: \"OO\",136659152,125240400\n\t\n\t;SubDeformer::Cluster_Root, Deformer::Skin_him\n\tC: \"OO\",126006096,125204720\n\t\n\t;SubDeformer::Cluster_Pelvis, Deformer::Skin_him\n\tC: \"OO\",137709552,125204720\n\t\n\t;SubDeformer::Cluster_Spine, Deformer::Skin_him\n\tC: \"OO\",137711792,125204720\n\t\n\t;SubDeformer::Cluster_Spine1, Deformer::Skin_him\n\tC: \"OO\",137712928,125204720\n\t\n\t;SubDeformer::Cluster_L_Thigh1, Deformer::Skin_him\n\tC: \"OO\",137714064,125204720\n\t\n\t;SubDeformer::Cluster_R_Thigh, Deformer::Skin_him\n\tC: \"OO\",136812048,125204720\n\t\n\t;SubDeformer::Cluster_Spine2, Deformer::Skin_him\n\tC: \"OO\",132111264,125204720\n\t\n\t;SubDeformer::Cluster_L_Knee2, Deformer::Skin_him\n\tC: \"OO\",126300080,125204720\n\t\n\t;SubDeformer::Cluster_R_Knee, Deformer::Skin_him\n\tC: \"OO\",136865392,125204720\n\t\n\t;SubDeformer::Cluster_Spine3, Deformer::Skin_him\n\tC: \"OO\",136866528,125204720\n\t\n\t;SubDeformer::Cluster_L_Ankle1, Deformer::Skin_him\n\tC: \"OO\",136817552,125204720\n\t\n\t;SubDeformer::Cluster_R_Ankle, Deformer::Skin_him\n\tC: \"OO\",135182880,125204720\n\t\n\t;SubDeformer::Cluster_Neck, Deformer::Skin_him\n\tC: \"OO\",135195936,125204720\n\t\n\t;SubDeformer::Cluster_L_Ball, Deformer::Skin_him\n\tC: \"OO\",135197072,125204720\n\t\n\t;SubDeformer::Cluster_R_Ball, Deformer::Skin_him\n\tC: \"OO\",135198208,125204720\n\t\n\t;SubDeformer::Cluster_Head, Deformer::Skin_him\n\tC: \"OO\",135199344,125204720\n\t\n\t;SubDeformer::Cluster_L_Clavicle, Deformer::Skin_him\n\tC: \"OO\",133256192,125204720\n\t\n\t;SubDeformer::Cluster_R_Clavicle, Deformer::Skin_him\n\tC: \"OO\",135120544,125204720\n\t\n\t;SubDeformer::Cluster_L_eye_joint1, Deformer::Skin_him\n\tC: \"OO\",135111200,125204720\n\t\n\t;SubDeformer::Cluster_R_eye_joint, Deformer::Skin_him\n\tC: \"OO\",135115872,125204720\n\t\n\t;SubDeformer::Cluster_L_eyeBall_joint2, Deformer::Skin_him\n\tC: \"OO\",135112368,125204720\n\t\n\t;SubDeformer::Cluster_R_eyeBall_joint, Deformer::Skin_him\n\tC: \"OO\",135114704,125204720\n\t\n\t;SubDeformer::Cluster_L_UpperArm, Deformer::Skin_him\n\tC: \"OO\",135117040,125204720\n\t\n\t;SubDeformer::Cluster_R_UpperArm, Deformer::Skin_him\n\tC: \"OO\",135118208,125204720\n\t\n\t;SubDeformer::Cluster_L_Forearm, Deformer::Skin_him\n\tC: \"OO\",135119376,125204720\n\t\n\t;SubDeformer::Cluster_R_Forearm, Deformer::Skin_him\n\tC: \"OO\",135107696,125204720\n\t\n\t;SubDeformer::Cluster_L_Hand, Deformer::Skin_him\n\tC: \"OO\",135113536,125204720\n\t\n\t;SubDeformer::Cluster_R_Hand, Deformer::Skin_him\n\tC: \"OO\",135106528,125204720\n\t\n\t;SubDeformer::Cluster_L_Thumb1, Deformer::Skin_him\n\tC: \"OO\",135108864,125204720\n\t\n\t;SubDeformer::Cluster_L_Index1, Deformer::Skin_him\n\tC: \"OO\",135110032,125204720\n\t\n\t;SubDeformer::Cluster_L_Middle1, Deformer::Skin_him\n\tC: \"OO\",130835696,125204720\n\t\n\t;SubDeformer::Cluster_L_Ring1, Deformer::Skin_him\n\tC: \"OO\",130850880,125204720\n\t\n\t;SubDeformer::Cluster_L_Pinky1, Deformer::Skin_him\n\tC: \"OO\",130845040,125204720\n\t\n\t;SubDeformer::Cluster_R_Thumb1, Deformer::Skin_him\n\tC: \"OO\",130840368,125204720\n\t\n\t;SubDeformer::Cluster_R_Index1, Deformer::Skin_him\n\tC: \"OO\",130841536,125204720\n\t\n\t;SubDeformer::Cluster_R_Middle1, Deformer::Skin_him\n\tC: \"OO\",130863728,125204720\n\t\n\t;SubDeformer::Cluster_R_Ring1, Deformer::Skin_him\n\tC: \"OO\",130864896,125204720\n\t\n\t;SubDeformer::Cluster_R_Pinky1, Deformer::Skin_him\n\tC: \"OO\",130847376,125204720\n\t\n\t;SubDeformer::Cluster_L_Thumb2, Deformer::Skin_him\n\tC: \"OO\",130862560,125204720\n\t\n\t;SubDeformer::Cluster_L_Index2, Deformer::Skin_him\n\tC: \"OO\",130860224,125204720\n\t\n\t;SubDeformer::Cluster_L_Middle2, Deformer::Skin_him\n\tC: \"OO\",130834528,125204720\n\t\n\t;SubDeformer::Cluster_L_Ring2, Deformer::Skin_him\n\tC: \"OO\",130836864,125204720\n\t\n\t;SubDeformer::Cluster_L_Pinky2, Deformer::Skin_him\n\tC: \"OO\",130852048,125204720\n\t\n\t;SubDeformer::Cluster_R_Thumb2, Deformer::Skin_him\n\tC: \"OO\",130856720,125204720\n\t\n\t;SubDeformer::Cluster_R_Index2, Deformer::Skin_him\n\tC: \"OO\",130853216,125204720\n\t\n\t;SubDeformer::Cluster_R_Middle2, Deformer::Skin_him\n\tC: \"OO\",130839200,125204720\n\t\n\t;SubDeformer::Cluster_R_Ring2, Deformer::Skin_him\n\tC: \"OO\",130846208,125204720\n\t\n\t;SubDeformer::Cluster_R_Pinky2, Deformer::Skin_him\n\tC: \"OO\",130838032,125204720\n\t\n\t;SubDeformer::Cluster_L_Thumb3, Deformer::Skin_him\n\tC: \"OO\",130857888,125204720\n\t\n\t;SubDeformer::Cluster_L_Index3, Deformer::Skin_him\n\tC: \"OO\",130855552,125204720\n\t\n\t;SubDeformer::Cluster_L_Middle3, Deformer::Skin_him\n\tC: \"OO\",130842704,125204720\n\t\n\t;SubDeformer::Cluster_L_Ring3, Deformer::Skin_him\n\tC: \"OO\",130859056,125204720\n\t\n\t;SubDeformer::Cluster_L_Pinky3, Deformer::Skin_him\n\tC: \"OO\",130861392,125204720\n\t\n\t;SubDeformer::Cluster_R_Thumb3, Deformer::Skin_him\n\tC: \"OO\",130843872,125204720\n\t\n\t;SubDeformer::Cluster_R_Index3, Deformer::Skin_him\n\tC: \"OO\",130854384,125204720\n\t\n\t;SubDeformer::Cluster_R_Middle3, Deformer::Skin_him\n\tC: \"OO\",130848544,125204720\n\t\n\t;SubDeformer::Cluster_R_Ring3, Deformer::Skin_him\n\tC: \"OO\",130849712,125204720\n\t\n\t;SubDeformer::Cluster_R_Pinky3, Deformer::Skin_him\n\tC: \"OO\",130930640,125204720\n\t\n\t;Model::Root, SubDeformer::Cluster_Root\n\tC: \"OO\",125296688,126006096\n\t\n\t;Model::Pelvis, SubDeformer::Cluster_Pelvis\n\tC: \"OO\",125274112,137709552\n\t\n\t;Model::Spine, SubDeformer::Cluster_Spine\n\tC: \"OO\",125276368,137711792\n\t\n\t;Model::Spine1, SubDeformer::Cluster_Spine1\n\tC: \"OO\",125278624,137712928\n\t\n\t;Model::L_Thigh1, SubDeformer::Cluster_L_Thigh1\n\tC: \"OO\",126220272,137714064\n\t\n\t;Model::R_Thigh, SubDeformer::Cluster_R_Thigh\n\tC: \"OO\",126227232,136812048\n\t\n\t;Model::Spine2, SubDeformer::Cluster_Spine2\n\tC: \"OO\",125280880,132111264\n\t\n\t;Model::L_Knee2, SubDeformer::Cluster_L_Knee2\n\tC: \"OO\",126222592,126300080\n\t\n\t;Model::R_Knee, SubDeformer::Cluster_R_Knee\n\tC: \"OO\",126224912,136865392\n\t\n\t;Model::Spine3, SubDeformer::Cluster_Spine3\n\tC: \"OO\",125692096,136866528\n\t\n\t;Model::L_Ankle1, SubDeformer::Cluster_L_Ankle1\n\tC: \"OO\",126194752,136817552\n\t\n\t;Model::R_Ankle, SubDeformer::Cluster_R_Ankle\n\tC: \"OO\",126229552,135182880\n\t\n\t;Model::Neck, SubDeformer::Cluster_Neck\n\tC: \"OO\",125694352,135195936\n\t\n\t;Model::L_Ball, SubDeformer::Cluster_L_Ball\n\tC: \"OO\",126197072,135197072\n\t\n\t;Model::R_Ball, SubDeformer::Cluster_R_Ball\n\tC: \"OO\",126199392,135198208\n\t\n\t;Model::Head, SubDeformer::Cluster_Head\n\tC: \"OO\",125673632,135199344\n\t\n\t;Model::L_Clavicle, SubDeformer::Cluster_L_Clavicle\n\tC: \"OO\",125724528,133256192\n\t\n\t;Model::R_Clavicle, SubDeformer::Cluster_R_Clavicle\n\tC: \"OO\",125842080,135120544\n\t\n\t;Model::L_eye_joint1, SubDeformer::Cluster_L_eye_joint1\n\tC: \"OO\",125726848,135111200\n\t\n\t;Model::R_eye_joint, SubDeformer::Cluster_R_eye_joint\n\tC: \"OO\",125715248,135115872\n\t\n\t;Model::L_eyeBall_joint2, SubDeformer::Cluster_L_eyeBall_joint2\n\tC: \"OO\",125722208,135112368\n\t\n\t;Model::R_eyeBall_joint, SubDeformer::Cluster_R_eyeBall_joint\n\tC: \"OO\",125703648,135114704\n\t\n\t;Model::L_UpperArm, SubDeformer::Cluster_L_UpperArm\n\tC: \"OO\",125705968,135117040\n\t\n\t;Model::R_UpperArm, SubDeformer::Cluster_R_UpperArm\n\tC: \"OO\",125846720,135118208\n\t\n\t;Model::L_Forearm, SubDeformer::Cluster_L_Forearm\n\tC: \"OO\",125710608,135119376\n\t\n\t;Model::R_Forearm, SubDeformer::Cluster_R_Forearm\n\tC: \"OO\",125832800,135107696\n\t\n\t;Model::L_Hand, SubDeformer::Cluster_L_Hand\n\tC: \"OO\",125708288,135113536\n\t\n\t;Model::R_Hand, SubDeformer::Cluster_R_Hand\n\tC: \"OO\",125825840,135106528\n\t\n\t;Model::L_Thumb1, SubDeformer::Cluster_L_Thumb1\n\tC: \"OO\",125712928,135108864\n\t\n\t;Model::L_Index1, SubDeformer::Cluster_L_Index1\n\tC: \"OO\",125719888,135110032\n\t\n\t;Model::L_Middle1, SubDeformer::Cluster_L_Middle1\n\tC: \"OO\",125835120,130835696\n\t\n\t;Model::L_Ring1, SubDeformer::Cluster_L_Ring1\n\tC: \"OO\",125844400,130850880\n\t\n\t;Model::L_Pinky1, SubDeformer::Cluster_L_Pinky1\n\tC: \"OO\",125828160,130845040\n\t\n\t;Model::R_Thumb1, SubDeformer::Cluster_R_Thumb1\n\tC: \"OO\",125858320,130840368\n\t\n\t;Model::R_Index1, SubDeformer::Cluster_R_Index1\n\tC: \"OO\",125888480,130841536\n\t\n\t;Model::R_Middle1, SubDeformer::Cluster_R_Middle1\n\tC: \"OO\",125886160,130863728\n\t\n\t;Model::R_Ring1, SubDeformer::Cluster_R_Ring1\n\tC: \"OO\",125874560,130864896\n\t\n\t;Model::R_Pinky1, SubDeformer::Cluster_R_Pinky1\n\tC: \"OO\",125876880,130847376\n\t\n\t;Model::L_Thumb2, SubDeformer::Cluster_L_Thumb2\n\tC: \"OO\",125717568,130862560\n\t\n\t;Model::L_Index2, SubDeformer::Cluster_L_Index2\n\tC: \"OO\",125699008,130860224\n\t\n\t;Model::L_Middle2, SubDeformer::Cluster_L_Middle2\n\tC: \"OO\",125839760,130834528\n\t\n\t;Model::L_Ring2, SubDeformer::Cluster_L_Ring2\n\tC: \"OO\",125837440,130836864\n\t\n\t;Model::L_Pinky2, SubDeformer::Cluster_L_Pinky2\n\tC: \"OO\",125856000,130852048\n\t\n\t;Model::R_Thumb2, SubDeformer::Cluster_R_Thumb2\n\tC: \"OO\",125830480,130856720\n\t\n\t;Model::R_Index2, SubDeformer::Cluster_R_Index2\n\tC: \"OO\",125862960,130853216\n\t\n\t;Model::R_Middle2, SubDeformer::Cluster_R_Middle2\n\tC: \"OO\",125869920,130839200\n\t\n\t;Model::R_Ring2, SubDeformer::Cluster_R_Ring2\n\tC: \"OO\",125865280,130846208\n\t\n\t;Model::R_Pinky2, SubDeformer::Cluster_R_Pinky2\n\tC: \"OO\",125881520,130838032\n\t\n\t;Model::L_Thumb3, SubDeformer::Cluster_L_Thumb3\n\tC: \"OO\",125696688,130857888\n\t\n\t;Model::L_Index3, SubDeformer::Cluster_L_Index3\n\tC: \"OO\",125701328,130855552\n\t\n\t;Model::L_Middle3, SubDeformer::Cluster_L_Middle3\n\tC: \"OO\",125851360,130842704\n\t\n\t;Model::L_Ring3, SubDeformer::Cluster_L_Ring3\n\tC: \"OO\",125853680,130859056\n\t\n\t;Model::L_Pinky3, SubDeformer::Cluster_L_Pinky3\n\tC: \"OO\",125849040,130861392\n\t\n\t;Model::R_Thumb3, SubDeformer::Cluster_R_Thumb3\n\tC: \"OO\",125872240,130843872\n\t\n\t;Model::R_Index3, SubDeformer::Cluster_R_Index3\n\tC: \"OO\",125879200,130854384\n\t\n\t;Model::R_Middle3, SubDeformer::Cluster_R_Middle3\n\tC: \"OO\",125860640,130848544\n\t\n\t;Model::R_Ring3, SubDeformer::Cluster_R_Ring3\n\tC: \"OO\",125867600,130849712\n\t\n\t;Model::R_Pinky3, SubDeformer::Cluster_R_Pinky3\n\tC: \"OO\",125883840,130930640\n\t\n\t;AnimLayer::Layer0, AnimStack::Take 001\n\tC: \"OO\",125203168,130965184\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",125161664,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",130891072,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",125193872,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",125194240,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",125675888,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",125676256,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",125676624,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",130892928,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",125160992,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",130893296,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",136827728,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",136826992,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",136829568,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",136827360,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",136829936,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",136828096,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",136828464,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",136828832,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",136829200,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",136830304,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",137457504,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",137456400,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",137455296,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",137458976,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",137455664,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",137457872,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",137458240,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",137456032,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",137454560,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",137458608,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",137460816,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",137453824,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",137459344,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",137459712,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",137456768,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",137461184,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",137460080,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",137454192,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",137454928,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",137460448,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",137457136,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",137461552,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131342512,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131344352,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131343984,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131344720,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131350240,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131345088,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131345824,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131348032,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131345456,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131347664,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131348768,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131346192,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131343248,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131346560,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131346928,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131347296,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131348400,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131349136,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131349504,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131349872,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131342880,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131343616,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131428944,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131428576,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131428208,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131431152,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131430416,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131426000,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131425264,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131430784,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131427104,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131427840,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131429312,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131429680,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131424528,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131427472,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131431520,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131426736,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131431888,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131430048,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131432256,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131425632,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131424896,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131426368,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",136845648,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",136844176,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",136846752,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",136846016,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",136843808,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",136844544,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",136846384,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",136843440,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",136844912,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",136845280,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131533328,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131531120,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131532224,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131532592,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131531488,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131534064,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131535536,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131532960,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131531856,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131533696,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131534432,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131536272,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131538112,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131535904,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131534800,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131536640,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131537008,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",131535168,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",131537376,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",131537744,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",131538480,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",131538848,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134646400,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134640512,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134644928,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134640880,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",134647504,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134639776,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134643088,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134641248,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134645296,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",134646768,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134644192,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134641616,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134641984,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134640144,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",134645664,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134647136,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134642352,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134643456,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134646032,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",134642720,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134643824,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134644560,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134718368,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134720576,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",134715056,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134713952,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134720208,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134720944,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134719840,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",134713584,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134721312,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134714320,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134716160,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134714688,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",134716528,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134716896,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134719104,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134715424,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134715792,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",134717264,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",134717632,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",134718000,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",134718736,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",134719472,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129431456,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129427776,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129427408,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129427040,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129425568,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129429984,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129426672,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129428880,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129431088,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129431824,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129432192,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129425936,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129429616,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129428144,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129426304,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129432560,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129433296,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129432928,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129430720,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129428512,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129429248,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129430352,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129504128,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129501552,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129500080,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129504864,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129503392,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129500448,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129501920,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129503760,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129504496,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129501184,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129499344,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129506336,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129502288,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129502656,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129500816,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129507072,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129505232,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129505600,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129505968,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129506704,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129503024,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129499712,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129593952,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129589536,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129591008,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129596528,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129590272,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129604992,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129594688,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129596160,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129595056,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129590640,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129599840,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129597264,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129595424,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129603888,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129597632,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129598368,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129593216,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129591376,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129591744,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129600576,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129594320,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129592848,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129589904,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129598000,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129601312,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129603152,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129605360,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129598736,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129602416,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129595792,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129596896,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129592112,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129599104,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129600944,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129604624,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129593584,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129599472,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129592480,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129600208,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129601680,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129602048,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129602784,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129603520,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129604256,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129681488,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129686272,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129676704,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129678544,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129677808,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129682960,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129683328,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129682592,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129679280,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129687376,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129678912,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129674864,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129673392,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129685904,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129681856,125203168\n\t\n\t;AnimCurveNode::T, AnimLayer::Layer0\n\tC: \"OO\",129675232,125203168\n\t\n\t;AnimCurveNode::R, AnimLayer::Layer0\n\tC: \"OO\",129686640,125203168\n\t\n\t;AnimCurveNode::S, AnimLayer::Layer0\n\tC: \"OO\",129681120,125203168\n\t\n\t;AnimCurveNode::Visibility, AnimLayer::Layer0\n\tC: \"OO\",129680752,125203168\n\t\n\t;AnimCurveNode::liw, AnimLayer::Layer0\n\tC: \"OO\",129684432,125203168\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",130891648,125161664, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",130891968,125161664, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",130892288,125161664, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",125192912,130891072, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",125193232,130891072, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",125193552,130891072, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",125677184,125676624, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",125677504,125676624, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",130892608,125676624, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",130894000,136826992, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",130894320,136826992, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",130894640,136826992, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",130894960,136828464, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",130895280,136828464, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136839328,136828464, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136839648,137456400, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136840288,137456400, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136842528,137456400, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136841888,137458240, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136839968,137458240, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136840928,137458240, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136841248,137453824, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136842208,137460080, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136840608,137461552, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136841568,137461552, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136842848,137461552, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131385744,131350240, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131387024,131350240, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131389904,131350240, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131390864,131345456, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131389264,131345456, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131390224,131345456, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131389584,131347664, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131388944,131347664, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131387344,131347664, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131384784,131346928, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131387664,131346928, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131390544,131346928, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131391184,131349872, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131386064,131349872, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131385424,131349872, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131387984,131428208, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131383504,131428208, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131388304,131428208, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131383824,131425264, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131384144,131425264, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131388624,131430784, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131385104,131430784, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131384464,131430784, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131386384,131429680, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131386704,131429680, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131452656,131424528, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131450416,131424528, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131452336,131424528, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131453616,131430048, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131455536,131430048, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131451696,131430048, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131450736,131426368, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131453296,131426368, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131449136,136845648, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131449776,136845648, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131449456,136845648, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131450096,136843808, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131454896,136843808, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131452016,136844544, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131452976,136844544, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131451056,136844544, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131453936,136845280, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131451376,131533328, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131455856,131533328, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131454256,131533328, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131454576,131531488, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",131455216,131531488, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131456176,131534064, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131456496,131534064, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",131456816,131534064, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134599744,131533696, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134603584,131533696, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134600064,131534432, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134602624,131534432, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134598784,131534432, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134600384,131536640, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134600704,131536640, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134604224,131536640, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134601024,131537744, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134601984,131537744, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134604544,131538480, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134605824,131538480, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134603904,131538480, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134602944,134644928, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134606144,134644928, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134599104,134640880, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134603264,134640880, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134601344,134640880, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134599424,134645296, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134601664,134645296, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134602304,134645296, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134604864,134641984, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134605184,134641984, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134605504,134640144, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134606464,134640144, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134711456,134640144, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134712736,134643456, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134710176,134643456, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134712416,134646032, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134707296,134646032, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134710816,134646032, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134708896,134718368, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134705376,134718368, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134710496,134718368, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134709536,134720576, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134711136,134720576, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134711776,134720576, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134713056,134720944, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134712096,134720944, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134705696,134719840, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134706016,134719840, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134709856,134719840, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134706336,134716160, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",134706656,134716160, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134706976,134714688, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134707936,134714688, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134707616,134714688, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134708256,134715792, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134708576,134715792, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",134709216,134715792, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136834944,134718736, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136836224,134718736, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136831104,134719472, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136832704,134719472, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136835904,134719472, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136831424,129427040, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136833344,129427040, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136838784,129425568, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136837184,129425568, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136835584,129425568, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136833024,129431824, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136833664,129431824, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136831744,129431824, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136837824,129428144, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136834304,129428144, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136835264,129426304, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136833984,129426304, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136836544,129426304, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136836864,129430720, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136832064,129430720, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136837504,129428512, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136834624,129428512, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136838464,129428512, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",136838144,129501552, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",136832384,129500080, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129519280,129500080, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129523120,129500080, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129518320,129501920, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129516400,129501920, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129518000,129503760, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129523440,129503760, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129520560,129503760, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129518640,129506336, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129515760,129506336, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129516080,129502288, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129517040,129502288, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129518960,129502288, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129521200,129505600, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129519600,129505600, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129519920,129505600, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129516720,129499712, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129517360,129499712, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129517680,129593952, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129520880,129593952, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129522160,129593952, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129520240,129590272, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129521520,129590272, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129521840,129604992, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129522480,129604992, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129522800,129604992, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129622992,129599840, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129623312,129599840, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129624912,129599840, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129627472,129597632, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129629712,129597632, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129627152,129598368, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129629392,129598368, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129627792,129598368, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129622672,129600576, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129628112,129600576, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129628432,129594320, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129623632,129594320, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129625872,129594320, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129626512,129603152, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129622352,129603152, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129626192,129603152, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129625552,129595792, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129630032,129595792, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129626832,129596896, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129628752,129596896, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129625232,129596896, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129624592,129604624, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129623952,129604624, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129629072,129593584, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129624272,129593584, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129666224,129593584, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129666544,129601680, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129663664,129686272, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129669104,129686272, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129663984,129686272, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129669744,129682960, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129666864,129682960, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129665904,129683328, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129665584,129683328, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129664304,129683328, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129667184,129678912, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129668784,129678912, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129667504,129674864, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129664624,129674864, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129670384,129674864, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129664944,129675232, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129670704,129675232, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::T\n\tC: \"OP\",129667824,129675232, \"d|Z\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129668144,129686640, \"d|X\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129668464,129686640, \"d|Y\"\n\t\n\t;AnimCurve::, AnimCurveNode::R\n\tC: \"OP\",129665264,129686640, \"d|Z\"\n\t\n\t;Texture::character_anim:file2, Material::character_anim:headM\n\tC: \"OP\",133131328,136657872, \"DiffuseColor\"\n\t\n\t;Texture::character_anim:file3, Material::character_anim:headM\n\tC: \"OP\",125237392,136657872, \"Bump\"\n\t\n\t;Texture::character_anim:soldier_bindPose:file9, Material::character_anim:headM\n\tC: \"OP\",125298944,136657872, \"SpecularColor\"\n\t\n\t;Texture::character_anim:file1, Material::character_anim:jacketM\n\tC: \"OP\",133273888,136655312, \"DiffuseColor\"\n\t\n\t;Texture::character_anim:file4, Material::character_anim:jacketM\n\tC: \"OP\",125238144,136655312, \"Bump\"\n\t\n\t;Texture::character_anim:file10, Material::character_anim:jacketM\n\tC: \"OP\",125299696,136655312, \"SpecularColor\"\n\t\n\t;Texture::character_anim:file6, Material::character_anim:pantsM\n\tC: \"OP\",133274640,136658512, \"DiffuseColor\"\n\t\n\t;Texture::character_anim:file7, Material::character_anim:pantsM\n\tC: \"OP\",125238896,136658512, \"Bump\"\n\t\n\t;Texture::character_anim:file12, Material::character_anim:pantsM\n\tC: \"OP\",125235136,136658512, \"SpecularColor\"\n\t\n\t;Texture::character_anim:file8, Material::character_anim:upBodyM\n\tC: \"OP\",133302528,136657232, \"DiffuseColor\"\n\t\n\t;Texture::character_anim:file5, Material::character_anim:upBodyM\n\tC: \"OP\",125239648,136657232, \"Bump\"\n\t\n\t;Texture::character_anim:file11, Material::character_anim:upBodyM\n\tC: \"OP\",125235888,136657232, \"SpecularColor\"\n\t\n\t;Texture::character_anim:file13, Material::character_anim:eyeBallM\n\tC: \"OP\",133303280,136651472, \"DiffuseColor\"\n\t\n\t;Texture::character_anim:file14, Material::character_anim:eyeBallM\n\tC: \"OP\",125240400,136651472, \"Bump\"\n\t\n\t;Texture::character_anim:file15, Material::character_anim:eyeBallM\n\tC: \"OP\",125236640,136651472, \"SpecularColor\"\n}\n;Takes section\n;----------------------------------------------------\n\nTakes:  {\n\tCurrent: \"Take 001\"\n\tTake: \"Take 001\" {\n\t\tFileName: \"Take_001.tak\"\n\t\tLocalTime: 1924423250,57732697500\n\t\tReferenceTime: 1924423250,57732697500\n\t}\n}\n"
  },
  {
    "path": "Tests/Assets/Projects/BuildSimpleProject.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{1A3C19CC-557D-4009-82D6-92B511EA4172}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>BuildSimpleProject</RootNamespace>\n    <AssemblyName>BuildSimpleProject</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <KniPlatform>DesktopGL</KniPlatform>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\$(MonoGamePlatform)\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;LINUX</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>false</Prefer32Bit>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|AnyCPU'\">\n    <OutputPath>bin\\$(MonoGamePlatform)\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <DefineConstants>TRACE;LINUX</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>false</Prefer32Bit>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <KniContentReference Include=\"Content\\Content.mgcb\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Tests/Assets/Projects/Content/Content.mgcb",
    "content": "\n#----------------------------- Global Properties ----------------------------#\n\n/outputDir:bin/$(Platform)\n/intermediateDir:obj/$(Platform)\n/platform:DesktopGL\n/config:\n/profile:Reach\n/compress:False\n\n#-------------------------------- References --------------------------------#\n\n\n#---------------------------------- Content ---------------------------------#\n\n#begin ContentFont.spritefont\n/importer:FontDescriptionImporter\n/processor:FontDescriptionProcessor\n/processorParam:PremultiplyAlpha=True\n/processorParam:TextureFormat=Compressed\n/build:ContentFont.spritefont\n\n"
  },
  {
    "path": "Tests/Assets/Projects/Content/ContentFont.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Arial</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>12</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>0</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#126;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Xml/01_TheBasics.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"TheBasics\">\n    <GetSetProperty>Hello World</GetSetProperty>\n    <PublicField>1</PublicField>\n    <Nested>\n      <Name>Shawn</Name>\n      <IsEnglish>true</IsEnglish>\n    </Nested>\n    <Nested2>\n      <Name>Shawn</Name>\n      <IsEnglish>true</IsEnglish>\n    </Nested2>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/02_Inheritance.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"Inheritance\">\n    <elf>23</elf>\n    <hello>world</hello>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/03_IncludingPrivateMembers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"IncludingPrivateMembers\">\n    <elf>23</elf>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/04_ExcludingPublicMembers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"ExcludingPublicMembers\">\n    <elf>23</elf> <!-- Should NOT be serialized -->\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Xml/04_ExcludingPublicMembersOutput.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"ExcludingPublicMembers\" />\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/05_RenamingXmlElements.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"RenamingXmlElements\">\n    <ShawnSaysHello>world</ShawnSaysHello>\n    <ElvesAreCool>23</ElvesAreCool>\n    <Speed>80.2</Speed>\n    <Organic>true</Organic>\n    <Dimensions>32 32</Dimensions>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/06_NullReferences.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"NullReferences\">\n    <hello Null=\"true\" />\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/07_OptionalElements.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"OptionalElements\">\n    <b Null=\"true\" />\n    <c></c>\n    <e>CullClockwiseFace</e>\n    <f>CullCounterClockwiseFace</f>\n    <g>CullClockwiseFace</g>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/08_AllowNull.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"AllowNull\">\n    <a Null=\"true\"></a> <!-- This should throw an exception -->\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Assets/Xml/09_Collections.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"Collections\">\n    <StringArray>\n      <Item>Hello</Item>\n      <Item>World</Item>\n    </StringArray>\n    <StringList>\n      <Item>This</Item>\n      <Item>is</Item>\n      <Item>a</Item>\n      <Item>test</Item>\n    </StringList>\n    <IntArray>1 2 3 23 42</IntArray>\n    <ColorArray>FF886542 FF916B46 FF917B46 FF886543</ColorArray>\n    <CustomItemList />\n    <CustomItemInheritedList />\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/10_CollectionItemName.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"CollectionItemName\">\n    <w00t>\n      <Flibble>Hello</Flibble>\n      <Flibble>World</Flibble>\n    </w00t>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/11_Dictionaries.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"Dictionaries\">\n    <TestDictionary>\n      <Item>\n        <Key>23</Key>\n        <Value>true</Value>\n      </Item>\n      <Item>\n        <Key>42</Key>\n        <Value>false</Value>\n      </Item>\n    </TestDictionary>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/12_MathTypes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"MathTypes\">\n    <Point>1 2</Point>\n    <Rectangle>1 2 3 4</Rectangle>\n    <Vector2>1 2</Vector2>\n    <Vector3>1 2 3.1</Vector3>\n    <Vector4>1 2 3 4</Vector4>\n    <Quaternion>1 2 3 4</Quaternion>\n    <Plane>1 2 3 4</Plane>\n    <Matrix>1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16</Matrix>\n    <Color>FF6495ED</Color>\n    <Vector2Array>0 0 1 1</Vector2Array>\n    <Vector2List>1 7 1 9 1 10</Vector2List>\n    <Vector2ListEmpty />\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/13_PolymorphicTypes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent xmlns:Generic=\"System.Collections.Generic\">\n  <Asset Type=\"PolymorphicTypes\">\n    <Hello Type=\"string\">World</Hello>\n    <Elf Type=\"int\">23</Elf>\n    <TypedArray>\n      <Item>\n        <Value>true</Value>\n      </Item>\n      <Item Type=\"PolymorphicB\">\n        <Value>true</Value>\n      </Item>\n      <Item Type=\"PolymorphicC\">\n        <Value>true</Value>\n      </Item>\n    </TypedArray>\n    <UntypedArray Type=\"PolymorphicA[]\">\n      <Item>\n        <Value>true</Value>\n      </Item>\n      <Item Type=\"PolymorphicB\">\n        <Value>true</Value>\n      </Item>\n      <Item Type=\"PolymorphicC\">\n        <Value>true</Value>\n      </Item>\n    </UntypedArray>\n    <IntCollection Type=\"Generic:List[int]\">1 4 6</IntCollection>\n    <UntypedDictionary Type=\"Generic:Dictionary[int,PolymorphicA]\">\n      <Item>\n        <Key>1</Key>\n        <Value>\n          <Value>true</Value>\n        </Value>\n      </Item>\n      <Item>\n        <Key>5</Key>\n        <Value>\n          <Value>false</Value>\n        </Value>\n      </Item>\n    </UntypedDictionary>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/14_Namespaces.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent xmlns:ContentPipeline=\"Kni.Tests.ContentPipeline\" xmlns:Framework=\"Microsoft.Xna.Framework\" xmlns:Graphics=\"Microsoft.Xna.Framework.Graphics\" xmlns:Nested=\"Kni.Tests.ContentPipeline.Nested\" xmlns:ContentPipeline2=\"Kni.Tests.ContentPipeline.Nested.ContentPipeline2\">\n  <Asset Type=\"ContentPipeline:NamespaceClass\">\n    <A Type=\"ContentPipeline:NamespaceHelper\">\n      <Value>true</Value>\n    </A>\n    <B Type=\"Framework:Vector2\">0 0</B>\n    <C Type=\"Graphics:SpriteSortMode\">Immediate</C>\n    <D Type=\"Nested:ContentPipeline.ClassInsideNestedAmbiguousNamespace\">\n      <Value>true</Value>\n    </D>\n    <E Type=\"Nested:ClassInsideNestedNamespace\">\n      <Value>true</Value>\n    </E>\n    <F Type=\"ContentPipeline2:ClassInsideNestedUnambiguousNamespace\">\n      <Value>true</Value>\n    </F>\n    <G Type=\"Kni.Tests.SomethingElse.ContentPipeline.ClassInsideAmbiguousNamespace\">\n      <Value>true</Value>\n    </G>\n    <H Null=\"true\" />\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/15_FlattenContent.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"FlattenContent\">\n    <Name>Shawn</Name>\n    <IsEnglish>true</IsEnglish>\n    <Boo>Hello</Boo>\n    <Boo>World</Boo>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/16_SharedResources.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"SharedResources\">\n    <Head>#Resource1</Head>\n    <LinkedArray>\n      <Item>\n        <Next>#Resource2</Next>\n      </Item>\n      <Item>\n        <Next>#Resource3</Next>\n      </Item>\n    </LinkedArray>\n  </Asset>\n  <Resources>\n    <Resource ID=\"#Resource1\" Type=\"Linked\">\n      <Value>1</Value>\n      <Next>#Resource4</Next>\n    </Resource>\n    <Resource ID=\"#Resource2\" Type=\"Linked2[]\">\n      <Item>\n        <Next>#Resource3</Next>\n      </Item>\n      <Item>\n        <Next />\n      </Item>\n    </Resource>\n    <Resource ID=\"#Resource3\" Type=\"Linked2[]\">\n      <Item>\n        <Next>#Resource2</Next>\n      </Item>\n    </Resource>\n    <Resource ID=\"#Resource4\" Type=\"Linked\">\n      <Value>2</Value>\n      <Next>#Resource5</Next>\n    </Resource>\n    <Resource ID=\"#Resource5\" Type=\"Linked\">\n      <Value>3</Value>\n      <Next>#Resource1</Next>\n    </Resource>\n  </Resources>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/17_ExternalReferences.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"ExternalReferences\">\n    <Texture>\n      <Reference>#External1</Reference>\n    </Texture>\n    <Texture2>\n      <Reference>#External1</Reference>\n    </Texture2>\n    <Shader>\n      <Reference>#External2</Reference>\n    </Shader>\n  </Asset>\n  <ExternalReferences>\n    <ExternalReference ID=\"#External1\" TargetType=\"Microsoft.Xna.Framework.Graphics.Texture2D\">grass.tga</ExternalReference>\n    <ExternalReference ID=\"#External2\" TargetType=\"Microsoft.Xna.Framework.Graphics.Effect\">foliage.fx</ExternalReference>\n  </ExternalReferences>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/18_PrimitiveTypes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"PrimitiveTypes\">\n    <Char>A</Char>\n    <Char2>°</Char2>\n    <Char3>Δ</Char3>\n    <Byte>127</Byte>\n    <SByte>-127</SByte>\n    <Short>-1000</Short>\n    <UShort>1000</UShort>\n    <Int>-100000</Int>\n    <UInt>100000</UInt>\n    <Long>-10000000</Long>\n    <ULong>10000000</ULong>\n    <Float>1234567</Float>\n    <Double>1234567890</Double>\n    <NullChar Null=\"true\" />\n    <NotNullChar>B</NotNullChar>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/19_FontDescription.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"ExtendedFontDescription\">\n    <FontName>Foo</FontName>\n    <Size>30</Size>\n    <Spacing>0.75</Spacing>\n    <UseKerning>true</UseKerning>\n    <Style>Bold</Style>\n    <DefaultCharacter>*</DefaultCharacter>\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start> </Start>\n        <End>~</End>\n      </CharacterRegion>\n      <CharacterRegion>\n        <Start>°</Start>\n        <End>°</End>\n      </CharacterRegion>\n      <CharacterRegion>\n        <Start>Δ</Start>\n        <End>Δ</End>\n      </CharacterRegion>\n    </CharacterRegions>\n    <ExtendedListProperty>\n      <Item>item0</Item>\n      <Item>item1</Item>\n      <Item>item2</Item>\n    </ExtendedListProperty>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/20_SystemTypes.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"SystemTypes\">\n    <TimeSpan>PT42.5S</TimeSpan>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/21_CustomFormatting.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <!-- A fully qualified type -->\n  <Asset Type=\"Kni.Tests.ContentPipeline.CustomFormatting[System.Byte, Microsoft.Xna.Framework.Rectangle]\">\n    <A><!-- A comment -->1</A>\n    <Vector2ListSpaced>\n      <!-- An XML comment inside an element -->\n      0 4\n      0 6\n      <!-- An XML comment in the middle of a list -->\n      0 7\n    </Vector2ListSpaced>\n    <EmptyString />\n    <Rectangle>0 0 100 100</Rectangle>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/22_GetterOnlyProperties.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"GetterOnlyProperties\">\n    <IntList>1 2 3</IntList>\n    <IntStringDictionary>\n      <Item>\n        <Key>1</Key>\n        <Value>Foo</Value>\n      </Item>\n      <Item>\n        <Key>5</Key>\n        <Value>Bar</Value>\n      </Item>\n    </IntStringDictionary>\n    <CustomClass>\n      <A>42</A>\n    </CustomClass>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/23_GetterOnlyPolymorphicArrayProperties.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"GetterOnlyPolymorphicArrayProperties\">\n    <CustomClassArrayAsIList Type=\"GetterOnlyPolymorphicArrayProperties+AnotherClass[]\">\n      <Item>\n        <A>42</A>\n      </Item>\n    </CustomClassArrayAsIList>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/24_GenericTypes.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"GenericTypes\">\n    <A>\n      <Value>3</Value>\n    </A>\n    <B>\n      <Value>4.2</Value>\n    </B>\n    <C>\n      <Value>\n        <Value>5</Value>\n      </Value>\n    </C>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/25_StructArrayNoElements.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"StructArrayNoElements\">\n    <Vector2ArrayNoElements></Vector2ArrayNoElements>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/26_ChildCollections.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"ChildCollections\">\n    <Children>\n      <Item>\n        <Name>Foo</Name>\n      </Item>\n      <Item>\n        <Name>Bar</Name>\n      </Item>\n    </Children>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/27_Colors.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent>\n  <Asset Type=\"Colors\">\n    <White>FFFFFFFF</White>\n    <Black>FF000000</Black>\n    <Transparent>00000000</Transparent>\n    <Red>FFFF0000</Red>\n    <Green>FF008000</Green>\n    <Blue>FF0000FF</Blue>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/Xml/28_XnaCurve.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent xmlns:Framework=\"Microsoft.Xna.Framework\">\n  <Asset Type=\"Framework:Curve\">\n    <PreLoop>Constant</PreLoop>\n    <PostLoop>Constant</PostLoop>\n    <Keys>0 1 0 0 Smooth 0.5 0.5 0 0 Smooth</Keys>\n  </Asset>\n</XnaContent>"
  },
  {
    "path": "Tests/Assets/tests.xsl",
    "content": "<?xml version=\"1.0\"?>\n<xsl:stylesheet\n    version=\"1.0\"\n    xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n\n    <xsl:output method=\"html\" />\n\n    <xsl:template match=\"/\">\n        <xsl:variable name=\"tests.root\" select=\"test-results\" />\n<xsl:text disable-output-escaping=\"yes\">&lt;!DOCTYPE html>\n</xsl:text>\n<html>\n    <head>\n        <title><xsl:value-of select=\"$tests.root/@name\" /></title>\n        <style>\n        .plus {\n            display: inline-block;\n            width: 16px;\n            height: 16px;\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gELEAARlER4oQAAANBJREFUOMvNkb0OwWAUhh/SxWC3cgfSuoHGYDZbO3RxB0TSxGQXsVoNJoOEG+hnN1osVmnip98xEIr6iwTvdvKdvPme58Cvk7j3YDk9HzCPo/K7FStuL/mg3PRcG8+1iRS9VfBSPi4w7jDHOZHIeHJiRJlb1SJbLSSAbXje91wbERA5WK93xubNDwBW65D5MkAEtBa0QLARwlDYaUFryGVS8QiAanQmFwjlUgGAwci/JlJP5VhOT4bThTT7M7ni//IZ89n0a2eMiaq1T7YVf5s9VHJLC4uyd44AAAAASUVORK5CYII=);\n        }\n        .minus {\n            display: inline-block;\n            width: 16px;\n            height: 16px;\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gELDzsiAFwSwgAAAIRJREFUOMvtkbEJg1AQhr8HadzAOivoCBkjrW1GCBkgC4itc8QFdIjUtiJE8+5PIcqzszOFHxwcB/93HAcH++PmJs3KGkg25pq6uKYAp2CYPG8XRhMOGL1WCWkqB9zz17IoFNB9PO+2RwIzYYJ+EN6LrwkzOMfRShwKmkdebT7h+P4/8QOsUy3bRuSA2AAAAABJRU5ErkJggg==);\n        }\n        .check {\n            display: inline-block;\n            width: 16px;\n            height: 16px;\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiNJREFUeNpi/P//PwMlgIlUDZxTGFnINoBrHiO3wGOhk0JxAtvhgiAvEIM5ZzNwi1cIXNh7fdf/2Hlh/5l8GbaAxBmJCQPO6Yzc/A8Fji1KWKa38MQchue/XjAI/OJn2LBpx2a4AaLL2IQZ/jMqvY7+eRpZM98CRm72G3zHFqcu01t8bS7DrjdbGZi/szL83sd67+fXL8bgMOCYwiii9kr/lsE7yyPcCxgdYZql1nHz8DwQPLY4Z6neyhcLGU6zHmHgYeVleLf1+50vnz/ofNn++wOLWBuXmBOXy7VCv0KhL3+/MHzc+mGrxBoON24unlOsN3iP9iT36W1+u5bhOutlBq6fvAzXVj68y/jvn+7Pnf9/gGPh09k/fbKqkkL7v+xi+Mr6hSErIJNT8IbMDuYTvHeaEpr0Tv08wnCf4yYD209OhuvLH95jlvqr+3M7RDMIgMOAM4Bjj0aQrK2+mT6bEa8pAysjGwM/qyDD9b+XGO4y3GT4/P4rw/6ek/fYzH/pvEv7+x05jMCJ4vuGHy7MAUy7GQQY7P5b/GFTY9NkeMf8muE183OGv58YGI5MO3dPIVpE+4rT4x/oMQRPVX83/HNlDWXaK8AnZC1oL8jOycjJ8O8jA8OB7hP3LPN0dbapHv2BNY7REwx7BMvu8NN+Pxvflf9XKlG4U/QthQNfAsMqyBvPtU+5Qf7snP8TOAmlUJwS6T8iWYlJ4oyUZmeAAAMArHtnGnCDAuYAAAAASUVORK5CYII=);\n        }\n        .error {\n            display: inline-block;\n            width: 16px;\n            height: 16px;\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgBJREFUeNqcU01rE1EUPRPHzINk6gRSx48IjUgNtAtBqaZgzErqquDahcsU9B/4P+zOLNS/oJtg6KoBF0YY0o2NjZYmsaTTMAkzzWTGe8dRpjGk4oXD8O6ce+7Hu0/ChL0G7tLnKaFIyIbuJqFKKD8BalG+NBH8Umha6UahAD2XQ1JLAe4IVqeD9s4OvtRqsC1rk0Q2/hKg4HcL+fzarfV19La20K/X4XS7gO9DSaehLi5CW1rG5+oH7DUa70nk0R8BzrywslJaLj7A9zdvYe/vY5oJErpcuA/jUx2t3d2gEol7Fqq6/fDZc7TKr2AfHGCWiVQKV/N5VCoV2I5z79xj4MXN1dU7sdYejg0DZ5lr24h5HkQigUPTdGM87Yv6JfQbjTODfcKYcNxuY14IdhVlvqpEXEa71wtIt31/psi2JGE4HCLzi5eVA+XBAP9q44kzCzStTjcXp56cfh8fKYMflsvwQiByFoqCwclJsGA8g2qHri2pacHP8RT89rvh98LcHH5YFgtUWaD8lQRUVcV5GswsAYYgTpqusnl0xALlGO+2PRptGiRyJZOBQgQvEuRFMnPwdeIYtNqO6/Ii1U6t8jVNW1vSdRySuknzGDpO0Df3rFHZOmXm4G+meXqVo49JkeVSlojzySQS8Xjg54Fxz1x2mHlj6mv8n+f8U4ABAHfN3DSReMR0AAAAAElFTkSuQmCC);\n        }\n        .ignored {\n            display: inline-block;\n            width: 16px;\n            height: 16px;\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtNJREFUeNpsU0trE1EUPjP3ziSZyat5Nba2tcU+LKXYbFqwUhFFiguhuHJnwZ3gLxBXLgQX7gVdCAqK4MaFCxdqW12ILfigLcRaadLa5tE8JpPM63rupGlLdZiPO9w533e+c+65Avz7RAiVRvxtiXNUCQ84DERLL//SS9vvLaOxiP9zCLsVLBwiEkR/pKPvZnxo4mqg+3SMqXGxUrfB1grM2PxRKqc/valkVh84zOFCxlGB4WT/2P2es9cuyl0paoAEps2gpFvuSjGpmFt2dj8/X8qvLNxijH3kTsgeOR7rGrjTe352hvaMU4OJYKN3v4eAinBdgAhMTQiBWGcSKtnjenFrDnlFkVuXZM9EcmRqRu5OEROJzh4mByMwd3sSFBnzMHw5ogNCdOTClC8YmUaujwuEgonuy6GT40GTUUDePsKK5NqjosD53AMIggBKT8oTaO+9glsxLhBUIx0pMZAUuG2sDclN1M1ms/k+lxBRiCCoGgU13j2Iv8JcwEuVQJtDPK5tHsyz81VrHAggzyVziJSCrIb8+BmiPIA5tu04DjjQrLPZA8DmWQcCPPOeAMG0gmNzkwZ3oDWqxQwY1X3rLQfpPzWYfbiI5tkhMgoxA8PzeQyrcoGitrMx38it2XwqLDxz03LAsB04EffBoxtj7lHyrByUYDfKm6yytfYFuTt8DgyjVtY8Xu8lz7HhsGZLgHy3FC8e34flPPzO17H7ABIhoBALikuvdzNf393Fyr+1BqlkVArM6/OdkaJ9ksWnGhnbpQas7eggYGYZySp1oJGeM9cXXj7WSvmnyCu3BAyzUUsbxQ2cDGNUDSe8gqyAiCSZiqBIePbWLtRW3urr8y+eFbI/7yFn4+hdcEdaVgLToc6h6/7OU6NyOKkSQgRHy+nVzPJqYf37k1q58Arjsq0bKfznOsuIdkJor+xTujCEmvVa1rLMNO5vIvTDwX8FGABpnleu8SWSbAAAAABJRU5ErkJggg==);\n        }\n        .warning {\n            display: inline-block;\n            width: 16px;\n            height: 16px;\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjtJREFUeNqUk89rU0EQx7+zu+/XJnlJXpLX5iX2RzC1TasVhKJoQRGEevLUSwLe9CIexN6K4kXxUvVQEW8evHmx/gNePChqyUUQ1IJWCnqwJU3TNE3WbVChmEgdGGaYHT4z7H6XlFLoZOXzNARmPCPVrDZU69yRR+pzpz6GLsZM+ThzbCrfO3F23BTmg659HaeX6Exo4PCom/Ip2uMzOyicLBdpYm8AIuKR6HwqP+aQ44HZUaQOHLTJce7vCfC2iOnIwHhgWQwsMwoWDEM6BoWyIyOLJZr6J+D5KRJWOHrXC9KShAkWD8CSOUAIJPv6JHecedwg1hUQy+BCOJt3TaqDpYcwM/e07Tw9DJs3EO7N+YsfUewIeHORJJORm15CSrIkWDSFpGvAj+lNvAzItJDw3RAznLkPl8n6C8BquBrzfcNobYDvK0Bt1xDEDQSeAdXc1LUxWKjBTSSc6iou7QK8myZPmPZMPAJJEQ8UcoHtDfQnDeR6rHZObgIkODxzLaSld+1lidw/gIaN6xHXEkLVwPsLulAF6hVMDkscHeTA+jJQ/aq3GILRqsCVEA5htv3q5SKyiuN9LmtJM6sbDp3+LQjwE3faWfPFFWBH8qqFrdcL2FpZwqcVbDQV9gtw3I6FYXBV17c9iNbmmtaSXkz78pNSG6Tq6zoqzWiB941AfFtCPAz+o4JbQp9Mhm0YO5O2Xi3sEkn8V6x3UKC0Ya1WcVzozR5++Y5ZHS38jxE2mcI96vad92o/BRgAj+SRf7WThPMAAAAASUVORK5CYII=);\n        }\n\n        body {\n            font: 11pt helvetica, arial, sans-serif;\n            margin: 0;\n        }\n\n        h1 {\n            margin: 0.5ex 0;\n        }\n\n        div#header {\n            background-color: #eee;\n            border-bottom: 1px solid #ccc;\n            padding: 1ex;\n            padding-bottom: 0;\n            margin: 0;\n        }\n\n        #summary table th {\n            text-align: center;\n            color: #999;\n            padding: 0.1ex 1ex;\n        }\n\n        #summary table td {\n            text-align: center;\n            padding: 0.1ex 1ex;\n        }\n\n        div#details {\n            padding: 1em;\n        }\n\n        #details blockquote {\n            margin-top: 0.25em;\n        }\n\n        .progress-bar {\n            /* I'm not happy with the amount of cajoling needed here.\n            The goal is simply to have the progress bar be vertically\n            aligned to the middle of the line */\n\n            font-size: 1pt;\n            position: relative;\n            display: inline-block;\n            height: 5pt;\n            width: 25pt;\n            border-bottom: 6pt solid transparent;\n            vertical-align: text-bottom;\n        }\n\n        .progress-bar-big {\n            width: 100%;\n            height: 14pt;\n            border-bottom: 0;\n        }\n\n        .progress-bar .passed-progress {\n            display: inline-block;\n            height: 100%;\n            background-color: #74b443;\n        }\n\n        .progress-bar .ignored-progress {\n            display: inline-block;\n            height: 100%;\n            background-color: #fbd829;\n        }\n\n        .progress-bar .failed-progress {\n            display: inline-block;\n            height: 100%;\n            background-color: #ec2d21;\n        }\n\n        .test-name {\n            margin-left: 1em;\n        }\n\n        .failure-info {\n            border: 1px solid #ccc;\n            background-color: #ddd;\n            padding-left: 2em;\n            margin: 0.5em;\n        }\n\n        .failure-message {\n\n        }\n\n        .stacktrace {\n            overflow: scroll;\n        }\n\n        </style>\n    </head>\n    <body>\n        <!-- Debug display of the embedded icons\n        <div class=\"plus\" />\n        <div class=\"minus\" />\n        <div class=\"warning\" />\n        <div class=\"error\" />\n        <div class=\"check\" />\n        -->\n        <xsl:variable name=\"tests.total\"\n            select=\"$tests.root/@total\" />\n        <xsl:variable name=\"tests.errors\"\n            select=\"$tests.root/@errors\" />\n        <xsl:variable name=\"tests.failures\"\n            select=\"$tests.root/@failures\" />\n        <xsl:variable name=\"tests.ignored\"\n            select=\"$tests.root/@ignored\" />\n        <xsl:variable name=\"tests.skipped\"\n            select=\"$tests.root/@skipped\" />\n        <xsl:variable name=\"tests.inconclusive\"\n            select=\"$tests.root/@inconclusive\" />\n        <xsl:variable name=\"tests.passed\"\n            select=\"$tests.total - $tests.errors - $tests.failures\" />\n\n        <xsl:variable name=\"tests.grandtotal\"\n            select=\"$tests.total + $tests.ignored + $tests.skipped\" />\n\n\n        <div id=\"report\">\n            <script>\n                function toggleDiv(imgId, divId)\n                {\n                    eDiv = document.getElementById(divId);\n                    eImg = document.getElementById(imgId);\n\n                    if (eDiv.style.display == \"none\")\n                    {\n                        eDiv.style.display = \"block\";\n                        eImg.className = \"minus\";\n                    }\n                    else\n                    {\n                        eDiv.style.display = \"none\";\n                        eImg.className = \"plus\";\n                    }\n                }\n            </script>\n            <div id=\"header\">\n                <h1><xsl:value-of select=\"$tests.root/@name\" /></h1>\n                <div id=\"summary\">\n                    <table>\n                        <tbody>\n                            <!--<tr>\n                                <th>Assemblies tested:</th>\n                                <td><xsl:value-of select=\"count($tests.root)\"/></td>\n                            </tr>-->\n                            <tr>\n                                <th>executed</th>\n                                <th>pass</th>\n                                <xsl:if test=\"$tests.failures > 0\"><th>fail</th></xsl:if>\n                                <xsl:if test=\"$tests.errors > 0\"><th>error</th></xsl:if>\n                                <xsl:if test=\"$tests.inconclusive > 0\"><th>inconclusive</th></xsl:if>\n                                <xsl:if test=\"$tests.ignored > 0\"><th>ignored</th></xsl:if>\n                                <xsl:if test=\"$tests.skipped > 0\"><th>skipped</th></xsl:if>\n                            </tr>\n                            <tr>\n                                <td><xsl:value-of select=\"$tests.total\"/></td>\n                                <td><xsl:value-of select=\"$tests.passed\"/></td>\n                                <xsl:if test=\"$tests.failures > 0\">\n                                    <td><xsl:value-of select=\"$tests.failures\"/></td>\n                                </xsl:if>\n                                <xsl:if test=\"$tests.errors > 0\">\n                                    <td><xsl:value-of select=\"$tests.errors\"/></td>\n                                </xsl:if>\n                                <xsl:if test=\"$tests.inconclusive > 0\">\n                                    <td><xsl:value-of select=\"$tests.inconclusive\"/></td>\n                                </xsl:if>\n                                <xsl:if test=\"$tests.ignored > 0\">\n                                    <td><xsl:value-of select=\"$tests.ignored\"/></td>\n                                </xsl:if>\n                                <xsl:if test=\"$tests.skipped > 0\">\n                                    <td><xsl:value-of select=\"$tests.skipped\" /></td>\n                                </xsl:if>\n                            </tr>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n            <div class=\"progress-bar progress-bar-big\">\n                <xsl:call-template name=\"progressSegment\">\n                    <xsl:with-param name=\"value\" select=\"$tests.passed\" />\n                    <xsl:with-param name=\"total\" select=\"$tests.grandtotal\" />\n                    <xsl:with-param name=\"class\">passed-progress</xsl:with-param>\n                </xsl:call-template>\n\n                <xsl:call-template name=\"progressSegment\">\n                    <xsl:with-param name=\"value\" select=\"$tests.ignored + $tests.skipped\" />\n                    <xsl:with-param name=\"total\" select=\"$tests.grandtotal\" />\n                    <xsl:with-param name=\"class\">ignored-progress</xsl:with-param>\n                </xsl:call-template>\n\n                <xsl:call-template name=\"progressSegment\">\n                    <xsl:with-param name=\"value\" select=\"$tests.errors + $tests.failures\" />\n                    <xsl:with-param name=\"total\" select=\"$tests.grandtotal\" />\n                    <xsl:with-param name=\"class\">failed-progress</xsl:with-param>\n                </xsl:call-template>\n            </div>\n            <div id=\"details\">\n                <xsl:apply-templates select=\"$tests.root\" />\n            </div>\n        </div>\n    </body>\n</html>\n    </xsl:template>\n\n    <xsl:template match=\"test-results\">\n        <xsl:variable name=\"test.suite.id\" select=\"generate-id()\" />\n        <xsl:variable name=\"test.suite.name\" select=\"./@name\"/>\n        <xsl:variable name=\"failure.count\" select=\"count(.//results//test-case[@success='False'])\" />\n        <xsl:variable name=\"ignored.count\" select=\"count(.//results//test-case[@executed='False'])\" />\n\n        <!-- Suite status icon -->\n        <xsl:choose>\n            <xsl:when test=\"$failure.count > 0\">\n                <div class=\"error\">\n                    <xsl:attribute name=\"title\">Failed tests: <xsl:value-of select=\"$failure.count\" /></xsl:attribute>\n                </div>\n            </xsl:when>\n            <xsl:when test=\"$ignored.count > 0\">\n                <div class=\"ignored\">\n                    <xsl:attribute name=\"title\">Ignored tests: <xsl:value-of select=\"$ignored.count\" /></xsl:attribute>\n                </div>\n            </xsl:when>\n            <xsl:otherwise>\n                <div class=\"check\" />\n            </xsl:otherwise>\n        </xsl:choose>\n\n        <!-- Suite expand/collapse -->\n        <div class=\"minus\">\n            <xsl:attribute name=\"id\">img<xsl:value-of select=\"$test.suite.id\"/></xsl:attribute>\n            <xsl:attribute name=\"onclick\">javascript:toggleDiv('img<xsl:value-of select=\"$test.suite.id\"/>', 'divDetails<xsl:value-of select=\"$test.suite.id\"/>');</xsl:attribute>\n        </div>\n\n        <span class=\"suite-name\">\n            <xsl:value-of select=\"$test.suite.name\"/>\n        </span>\n\n        <!-- Suite details -->\n        <div>\n            <xsl:attribute name=\"id\">divDetails<xsl:value-of select=\"$test.suite.id\"/></xsl:attribute>\n            <blockquote>\n                <!-- The test classes, with failed tests grouped together at the top -->\n                <xsl:apply-templates select=\".//test-suite[@type='TestFixture'][results//test-case]\">\n                    <!-- Group by outcome, with failed tests first -->\n                    <xsl:sort select=\"@success\" order=\"ascending\" data-type=\"text\"/>\n                    <!-- Then sort by name within the groups -->\n                    <xsl:sort select=\"@name\" order=\"ascending\" data-type=\"text\"/>\n                </xsl:apply-templates>\n            </blockquote>\n        </div>\n    </xsl:template>\n\n    <xsl:template match=\"test-suite\">\n        <xsl:variable name=\"passedtests.list\" select=\"results//test-case[@success='True']\"/>\n        <xsl:variable name=\"ignoredtests.list\" select=\"results//test-case[@executed='False']\"/>\n        <xsl:variable name=\"failedtests.list\" select=\"results//test-case[@success='False']\"/>\n        <xsl:variable name=\"tests.count\" select=\"count(results//test-case)\"/>\n        <xsl:variable name=\"passedtests.count\" select=\"count($passedtests.list)\"/>\n        <xsl:variable name=\"ignoredtests.count\" select=\"count($ignoredtests.list)\"/>\n        <xsl:variable name=\"failedtests.count\" select=\"count($failedtests.list)\"/>\n\n        <xsl:variable name=\"fixture.name\">\n            <xsl:call-template name=\"getFullFixtureName\">\n                <xsl:with-param name=\"node\" select=\".\"/>\n            </xsl:call-template>\n        </xsl:variable>\n        <div>\n            <div class=\"progress-bar\">\n                <xsl:call-template name=\"progressSegment\">\n                    <xsl:with-param name=\"value\" select=\"$passedtests.count\" />\n                    <xsl:with-param name=\"total\" select=\"$tests.count\" />\n                    <xsl:with-param name=\"class\">passed-progress</xsl:with-param>\n                </xsl:call-template>\n\n                <xsl:call-template name=\"progressSegment\">\n                    <xsl:with-param name=\"value\" select=\"$ignoredtests.count\" />\n                    <xsl:with-param name=\"total\" select=\"$tests.count\" />\n                    <xsl:with-param name=\"class\">ignored-progress</xsl:with-param>\n                </xsl:call-template>\n\n                <xsl:call-template name=\"progressSegment\">\n                    <xsl:with-param name=\"value\" select=\"$failedtests.count\" />\n                    <xsl:with-param name=\"total\" select=\"$tests.count\" />\n                    <xsl:with-param name=\"class\">failed-progress</xsl:with-param>\n                </xsl:call-template>\n            </div>\n            <div class=\"plus\">\n                <xsl:attribute name=\"id\">imgTestCase_<xsl:value-of select=\"@name\"/></xsl:attribute>\n                <xsl:attribute name=\"onClick\">\n                    <xsl:text>javascript:toggleDiv('imgTestCase_</xsl:text>\n                    <xsl:value-of select=\"$fixture.name\"/>\n                    <xsl:text>', 'divTest_</xsl:text>\n                    <xsl:value-of select=\"$fixture.name\"/>\n                    <xsl:text>');</xsl:text>\n                </xsl:attribute>\n            </div>\n            <a>\n                <xsl:attribute name=\"name\"><xsl:value-of select=\"$fixture.name\"/></xsl:attribute>\n                <xsl:value-of select=\"$fixture.name\"/>\n            </a>\n            (<xsl:value-of select=\"$passedtests.count\"/>/<xsl:value-of select=\"$tests.count\"/>)\n\n            <div style=\"display:none\">\n                <xsl:attribute name=\"id\">divTest_<xsl:value-of select=\"$fixture.name\"/></xsl:attribute>\n\n                <xsl:apply-templates select=\"$failedtests.list\"/>\n                <xsl:apply-templates select=\"$ignoredtests.list\"/>\n                <xsl:apply-templates select=\"$passedtests.list\"/>\n            </div>\n        </div>\n    </xsl:template>\n\n    <xsl:template match=\"test-case\">\n        <div>\n            <xsl:if test=\"position() mod 2 = 0\">\n                <xsl:attribute name=\"class\">section-oddrow</xsl:attribute>\n            </xsl:if>\n\n            <xsl:choose>\n                <xsl:when test=\"./@executed='False'\">\n                    <div class=\"ignored\" />\n                </xsl:when>\n                <xsl:when test=\"./@success='False'\">\n                    <div class=\"error\" />\n                </xsl:when>\n                <xsl:otherwise>\n                    <div class=\"check\" />\n                </xsl:otherwise>\n            </xsl:choose>\n\n            <span class=\"test-name\">\n                <xsl:call-template name=\"getTestName\">\n                    <xsl:with-param name=\"node\" select=\".\"/>\n                </xsl:call-template>\n            </span>\n\n            <xsl:choose>\n                <xsl:when test=\"./@executed='False'\">\n                    <xsl:value-of select=\"substring-after(reason/message, '-')\"/>\n                </xsl:when>\n                <xsl:when test=\"./@success='False'\">\n                    <div class=\"failure-info\">\n                        <div class=\"failure-message\">\n                            <xsl:value-of select=\"failure/message\"/>\n                        </div>\n                        <pre class=\"stacktrace\">\n                            <xsl:value-of select=\"failure/stack-trace\"/>\n                        </pre>\n                    </div>\n                </xsl:when>\n            </xsl:choose>\n        </div>\n    </xsl:template>\n    <xsl:template name=\"getFullFixtureName\">\n        <xsl:param name=\"node\" />\n\n        <xsl:for-each select=\"ancestor::test-suite[@type='TestFixture']/@name\">\n            <xsl:value-of select=\".\" />\n            <xsl:text>.</xsl:text>\n        </xsl:for-each>\n        <xsl:value-of select=\"@name\" />\n    </xsl:template>\n\n    <xsl:template name=\"getTestName\">\n        <xsl:param name=\"node\" />\n\n        <!-- Concatenate ancestor namespaces into: One.Two.Three.  -->\n        <xsl:variable name=\"namespace\">\n            <xsl:for-each select=\"ancestor::test-suite[@type='Namespace']/@name\">\n                <xsl:value-of select=\".\" />\n                <xsl:text>.</xsl:text>\n            </xsl:for-each>\n        </xsl:variable>\n        <xsl:variable name=\"fixture.name\">\n            <xsl:value-of select=\"ancestor::test-suite[@type='TestFixture']/@name\" />\n        </xsl:variable>\n\n        <!-- Remove the namespace and fixture name from the test name -->\n        <xsl:value-of select=\"substring(@name, string-length($namespace) + 1 + string-length($fixture.name) + 1)\" />\n    </xsl:template>\n\n    <xsl:template name=\"progressSegment\">\n        <xsl:param name=\"value\" />\n        <xsl:param name=\"total\" />\n        <xsl:param name=\"class\" />\n\n        <xsl:variable name=\"percent\" select=\"($value * 100) div $total\" />\n\n        <xsl:if test=\"$value > 0\">\n            <div class=\"{$class}\">\n                <xsl:attribute name=\"style\">width: <xsl:value-of select=\"floor($percent * 100) div 100\"/>%</xsl:attribute>\n                &#160;\n            </div>\n        </xsl:if>\n    </xsl:template>\n</xsl:stylesheet>\n"
  },
  {
    "path": "Tests/Components/Colored3DCubeComponent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Components\n{\n\tclass Colored3DCubeComponent\n\t{\n\t\tGraphicsDevice graphicsDevice;\n\t\tBasicEffect basicEffect;\n\n\t\tMatrix worldMatrix, viewMatrix, projectionMatrix;\n\n\t\tpublic Vector3 CubePosition { get; set; }\n\n\t\tpublic Colored3DCubeComponent(GraphicsDevice gd)\n\t\t{\n\t\t\tgraphicsDevice = gd;\n\t\t}\n\n\t\tpublic void LoadContent()\n\t\t{\n\t\t\t// setup our graphics scene matrices\n\t\t\tworldMatrix = Matrix.Identity;\n\t\t\tviewMatrix = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n\t\t\tprojectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, graphicsDevice.Viewport.AspectRatio, 1, 10);\n\n\t\t\tworldMatrix *= Matrix.CreateRotationX(-0.05f * 30f);\n\t\t\tworldMatrix *= Matrix.CreateRotationY(-0.05f * 20f);\n\t\t\tworldMatrix *= Matrix.CreateTranslation(CubePosition);\n\n\t\t\t// Setup our basic effect\n\t\t\tbasicEffect = new BasicEffect(graphicsDevice);\n\t\t\tbasicEffect.World = worldMatrix;\n\t\t\tbasicEffect.View = viewMatrix;\n\t\t\tbasicEffect.Projection = projectionMatrix;\n\t\t\tbasicEffect.VertexColorEnabled = true;\n\n\t\t\tCreateCubeVertexBuffer();\n\t\t\tCreateCubeIndexBuffer();\n\t\t}\n\n\t\tpublic void UnloadContent()\n\t\t{\n\t\t\tbasicEffect.Dispose();\n\t\t\tbasicEffect = null;\n\n\t\t\tvertices.Dispose();\n\t\t\tvertices = null;\n\n\t\t\tindices.Dispose();\n\t\t\tindices = null;\n\t\t}\n\n\t\tpublic void Draw()\n\t\t{\n\t\t\tgraphicsDevice.Clear(Color.CornflowerBlue);\n\n\t\t\tgraphicsDevice.SetVertexBuffer(vertices);\n\t\t\tgraphicsDevice.Indices = indices;\n\n\t\t\t//RasterizerState rasterizerState1 = new RasterizerState();\n\t\t\t//rasterizerState1.CullMode = CullMode.None;\n\t\t\t//graphics.GraphicsDevice.RasterizerState = rasterizerState1;\n\n\t\t\tbasicEffect.World = worldMatrix;\n\n\t\t\tforeach (EffectPass pass in basicEffect.CurrentTechnique.Passes)\n\t\t\t{\n\t\t\t\tpass.Apply();\n\n\t\t\t\tgraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, number_of_vertices, 0, number_of_indices / 3);\n\n\t\t\t}\n\t\t}\n\n\t\tconst int number_of_vertices = 8;\n\t\tconst int number_of_indices = 36;\n\t\tVertexBuffer vertices;\n\n\t\tvoid CreateCubeVertexBuffer()\n\t\t{\n\t\t\tVertexPositionColor[] cubeVertices = new VertexPositionColor[number_of_vertices];\n\n\t\t\tcubeVertices[0].Position = new Vector3(-1, -1, -1);\n\t\t\tcubeVertices[1].Position = new Vector3(-1, -1, 1);\n\t\t\tcubeVertices[2].Position = new Vector3(1, -1, 1);\n\t\t\tcubeVertices[3].Position = new Vector3(1, -1, -1);\n\t\t\tcubeVertices[4].Position = new Vector3(-1, 1, -1);\n\t\t\tcubeVertices[5].Position = new Vector3(-1, 1, 1);\n\t\t\tcubeVertices[6].Position = new Vector3(1, 1, 1);\n\t\t\tcubeVertices[7].Position = new Vector3(1, 1, -1);\n\n\t\t\tcubeVertices[0].Color = Color.Black;\n\t\t\tcubeVertices[1].Color = Color.Red;\n\t\t\tcubeVertices[2].Color = Color.Yellow;\n\t\t\tcubeVertices[3].Color = Color.Green;\n\t\t\tcubeVertices[4].Color = Color.Blue;\n\t\t\tcubeVertices[5].Color = Color.Magenta;\n\t\t\tcubeVertices[6].Color = Color.White;\n\t\t\tcubeVertices[7].Color = Color.Cyan;\n\n\t\t\tvertices = new VertexBuffer(graphicsDevice, VertexPositionColor.VertexDeclaration, number_of_vertices, BufferUsage.WriteOnly);\n\t\t\tvertices.SetData<VertexPositionColor>(cubeVertices);\n\t\t}\n\n\t\tIndexBuffer indices;\n\n\t\tvoid CreateCubeIndexBuffer()\n\t\t{\n\t\t\tUInt16[] cubeIndices = new UInt16[number_of_indices];\n\n\t\t\t//bottom face\n\t\t\tcubeIndices[0] = 0;\n\t\t\tcubeIndices[1] = 2;\n\t\t\tcubeIndices[2] = 3;\n\t\t\tcubeIndices[3] = 0;\n\t\t\tcubeIndices[4] = 1;\n\t\t\tcubeIndices[5] = 2;\n\n\t\t\t//top face\n\t\t\tcubeIndices[6] = 4;\n\t\t\tcubeIndices[7] = 6;\n\t\t\tcubeIndices[8] = 5;\n\t\t\tcubeIndices[9] = 4;\n\t\t\tcubeIndices[10] = 7;\n\t\t\tcubeIndices[11] = 6;\n\n\t\t\t//front face\n\t\t\tcubeIndices[12] = 5;\n\t\t\tcubeIndices[13] = 2;\n\t\t\tcubeIndices[14] = 1;\n\t\t\tcubeIndices[15] = 5;\n\t\t\tcubeIndices[16] = 6;\n\t\t\tcubeIndices[17] = 2;\n\n\t\t\t//back face\n\t\t\tcubeIndices[18] = 0;\n\t\t\tcubeIndices[19] = 7;\n\t\t\tcubeIndices[20] = 4;\n\t\t\tcubeIndices[21] = 0;\n\t\t\tcubeIndices[22] = 3;\n\t\t\tcubeIndices[23] = 7;\n\n\t\t\t//left face\n\t\t\tcubeIndices[24] = 0;\n\t\t\tcubeIndices[25] = 4;\n\t\t\tcubeIndices[26] = 1;\n\t\t\tcubeIndices[27] = 1;\n\t\t\tcubeIndices[28] = 4;\n\t\t\tcubeIndices[29] = 5;\n\n\t\t\t//right face\n\t\t\tcubeIndices[30] = 2;\n\t\t\tcubeIndices[31] = 6;\n\t\t\tcubeIndices[32] = 3;\n\t\t\tcubeIndices[33] = 3;\n\t\t\tcubeIndices[34] = 6;\n\t\t\tcubeIndices[35] = 7;\n\n\t\t\tindices = new IndexBuffer(graphicsDevice, IndexElementSize.SixteenBits, number_of_indices, BufferUsage.WriteOnly);\n\t\t\tindices.SetData<UInt16>(cubeIndices);\n\n\t\t}\n\n\t}\n}"
  },
  {
    "path": "Tests/Components/DrawFrameNumberComponent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Components\n{\n\tclass DrawFrameNumberComponent : DrawableGameComponent\n\t{\n\t\tprivate SpriteBatch _batch;\n\t\tprivate SpriteFont _font;\n\n\t\tpublic DrawFrameNumberComponent(Game game)\n\t\t\t: base(game)\n\t\t{\n\t\t}\n\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\t_batch = new SpriteBatch(Game.GraphicsDevice);\n\t\t\t_font = Game.Content.Load<SpriteFont>(Paths.Font(\"Default\"));\n\t\t}\n\n\t\tprotected override void UnloadContent()\n\t\t{\n\t\t\t_batch.Dispose();\n\t\t\t_batch = null;\n\n\t\t\t_font = null;\n\t\t}\n\n\t\tpublic override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tvar frameInfoSource = Game.Services.RequireService<IFrameInfoSource>();\n\t\t\tvar frameInfo = frameInfoSource.FrameInfo;\n\n\t\t\t// TODO: Add support for different placements and colors.\n\t\t\t_batch.Begin();\n\t\t\t_batch.DrawString(_font, frameInfo.DrawNumber.ToString(), Vector2.Zero, Color.White);\n\t\t\t_batch.End();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Components/FlexibleGameComponent.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nusing Microsoft.Xna.Framework;\n\nnamespace Kni.Tests.Components\n{\n\tclass FlexibleGameComponent : VisualTestDrawableGameComponent\n\t{\n\n\t\tpublic FlexibleGameComponent(Game game)\n\t\t\t: base(game)\n\t\t{\n\t\t}\n\n\t\tpublic Action<FrameInfo> InitializeAction { get; set; }\n\t\tpublic Action<FrameInfo> LoadContentAction { get; set; }\n\t\tpublic Action<FrameInfo> UnloadContentAction { get; set; }\n\t\tpublic Action<FrameInfo> UpdateAction { get; set; }\n\t\tpublic Action<FrameInfo> UpdateOncePerDrawAction { get; set; }\n\t\tpublic Action<FrameInfo> DrawAction { get; set; }\n\n\t\tprivate IFrameInfoSource _frameInfoSource;\n\t\tpublic override void Initialize()\n\t\t{\n\t\t\t_frameInfoSource = Game.Services.RequireService<IFrameInfoSource>();\n\n\t\t\tif (InitializeAction != null)\n\t\t\t\tInitializeAction(_frameInfoSource.FrameInfo);\n\n\t\t\tbase.Initialize();\n\t\t}\n\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tbase.LoadContent();\n\n\t\t\tif (LoadContentAction != null)\n\t\t\t\tLoadContentAction(_frameInfoSource.FrameInfo);\n\t\t}\n\n\t\tprotected override void UnloadContent()\n\t\t{\n\t\t\tbase.UnloadContent();\n\n\t\t\tif (UnloadContentAction != null)\n\t\t\t\tUnloadContentAction(_frameInfoSource.FrameInfo);\n\t\t}\n\n\t\tpublic override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\n\t\t\tif (UpdateAction != null)\n\t\t\t\tUpdateAction(_frameInfoSource.FrameInfo);\n\t\t}\n\n\t\tprotected override void UpdateOncePerDraw(GameTime gameTime)\n\t\t{\n\t\t\tbase.UpdateOncePerDraw(gameTime);\n\n\t\t\tif (UpdateOncePerDrawAction != null)\n\t\t\t\tUpdateOncePerDrawAction(_frameInfoSource.FrameInfo);\n\t\t}\n\n\t\tpublic override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tbase.Draw(gameTime);\n\n\t\t\tif (DrawAction != null)\n\t\t\t\tDrawAction(_frameInfoSource.FrameInfo);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Components/ImplicitDrawOrderComponent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Components\n{\n\tclass ImplicitDrawOrderComponent : VisualTestDrawableGameComponent\n\t{\n\t\tprivate const int NumberOfBatches = 3;\n\t\tprivate const int ItemsPerBatch = 3;\n\t\tprivate int _batchNumber = 0;\n\n\t\tprivate List<TestDrawable> _drawables = new List<TestDrawable>();\n\t\tprivate List<TestDrawable> _drawablesInDrawOrder = new List<TestDrawable>();\n\t\tprivate bool _drawablesOrderedCorrectly;\n\n\t\tprivate SpriteBatch _spriteBatch;\n\t\tprivate SpriteFont _font;\n\n\t\tpublic ImplicitDrawOrderComponent(Game game)\n\t\t\t: base(game)\n\t\t{\n\t\t\tUpdateOrder = 100;\n\t\t\tDrawOrder = 100;\n\t\t}\n\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tbase.LoadContent();\n\t\t\t_spriteBatch = new SpriteBatch(GraphicsDevice);\n\t\t\t_font = Game.Content.Load<SpriteFont>(Paths.Font(\"Default\"));\n\t\t}\n\n\t\tprotected override void UnloadContent()\n\t\t{\n\t\t\tif (_spriteBatch != null)\n\t\t\t{\n\t\t\t\t_spriteBatch.Dispose();\n\t\t\t\t_spriteBatch = null;\n\t\t\t}\n\t\t\t_font = null;\n\t\t\tbase.UnloadContent();\n\t\t}\n\n\t\tprotected override void UpdateOncePerDraw(GameTime gameTime)\n\t\t{\n\t\t\tbase.UpdateOncePerDraw(gameTime);\n\n\t\t\tif (_batchNumber < NumberOfBatches)\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < ItemsPerBatch; ++i)\n\t\t\t\t{\n\t\t\t\t\tvar drawable = new TestDrawable(Game, this, _drawables.Count + 1);\n\t\t\t\t\t_drawables.Add(drawable);\n\t\t\t\t\tGame.Components.Add(drawable);\n\t\t\t\t}\n\t\t\t\t_batchNumber++;\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tbase.Draw(gameTime);\n\t\t\t_drawablesOrderedCorrectly = ListsEqual(_drawables, _drawablesInDrawOrder);\n\t\t\t_drawablesInDrawOrder.Clear();\n\n\t\t\t_spriteBatch.Begin();\n\t\t\tDrawStatusString(\n\t\t\t\tstring.Format(\"{0} drawables\", _drawables.Count),\n\t\t\t\t0, _drawablesOrderedCorrectly);\n\t\t\t_spriteBatch.End();\n\t\t}\n\n\t\tprivate void DrawStatusString(string item, int linesFromBottom, bool isCorrect)\n\t\t{\n\t\t\tvar position = new Vector2(\n\t\t\t\t10, GraphicsDevice.Viewport.Height - ((1 + linesFromBottom) * _font.LineSpacing));\n\t\t\tif (isCorrect)\n\t\t\t\t_spriteBatch.DrawString(_font, item + \" correctly ordered!\", position, Color.Lime);\n\t\t\telse\n\t\t\t\t_spriteBatch.DrawString(_font, item + \" incorrectly ordered.\", position, Color.Red);\n\t\t}\n\n\t\tprivate static bool ListsEqual<T>(IList<T> a, IList<T> b)\n\t\t{\n\t\t\tif (a.Count != b.Count)\n\t\t\t\treturn false;\n\n\t\t\tvar equalityComparer = EqualityComparer<T>.Default;\n\t\t\tfor (int i = 0; i < a.Count; ++i)\n\t\t\t\tif (!equalityComparer.Equals(a[i], b[i]))\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate class TestDrawable : DrawableGameComponent\n\t\t{\n\t\t\tprivate static readonly Color[] Colors = new Color[] {\n\t\t\t\tColor.White, Color.Red, Color.Orange, Color.Yellow, Color.Green,\n\t\t\t\tColor.Blue, Color.Indigo, Color.Violet, Color.Black\n\t\t\t};\n\n\t\t\tImplicitDrawOrderComponent _owner;\n\t\t\tprivate int _number;\n\t\t\tprivate Color _color;\n\t\t\tpublic TestDrawable(Game game, ImplicitDrawOrderComponent owner, int number)\n\t\t\t\t: base(game)\n\t\t\t{\n\t\t\t\t_owner = owner;\n\t\t\t\t_number = number;\n\t\t\t\t_color = Colors[_number % Colors.Length];\n\t\t\t}\n\n\t\t\tprivate SpriteBatch _spriteBatch;\n\t\t\tprotected override void LoadContent()\n\t\t\t{\n\t\t\t\tbase.LoadContent();\n\t\t\t\t_spriteBatch = new SpriteBatch(Game.GraphicsDevice);\n\t\t\t}\n\n\t\t\tprotected override void UnloadContent()\n\t\t\t{\n\t\t\t\tbase.UnloadContent();\n\n\t\t\t\t_spriteBatch.Dispose();\n\t\t\t\t_spriteBatch = null;\n\t\t\t}\n\n\t\t\tpublic override void Draw(GameTime gameTime)\n\t\t\t{\n\t\t\t\t_owner._drawablesInDrawOrder.Add(this);\n\n\t\t\t\tfloat halfEx = _owner._font.MeasureString(\"x\").X / 2;\n\t\t\t\tvar position = new Vector2(_number * halfEx, 0);\n\n\t\t\t\t_spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);\n\t\t\t\t_spriteBatch.DrawString(_owner._font, _number.ToString(), position, _color);\n\t\t\t\t_spriteBatch.End();\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Components/InitializeOrderComponent.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\n\nnamespace Kni.Tests.Framework.Components\n{\n    class InitializeOrderComponent: GameComponent\n    {\n        static int g_initOrder = 0;\n\n        public int InitOrder { get; private set; }\n        public IGameComponent ChildComponent = null;\n\n        public InitializeOrderComponent(Game game):base(game)\n        {            \n            InitOrder = -1;\n        }\n\n        public override void Initialize()\n        {\n            if (ChildComponent != null)\n                Game.Components.Add(ChildComponent);\n\n            InitOrder = g_initOrder++;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tests/Components/Simple3DCubeComponent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Components\n{\n\tclass Simple3DCubeComponent\n\t{\n\t\tGraphicsDevice graphicsDevice;\n\t\tBasicEffect basicEffect;\n\t\tMatrix worldMatrix, viewMatrix, projectionMatrix;\n\n\t\tpublic Vector3 CubePosition { get; set; }\n\t\tpublic Color CubeColor { get; set; }\n\n\t\tpublic Simple3DCubeComponent(GraphicsDevice gd)\n\t\t{\n\t\t\tgraphicsDevice = gd;\n\t\t}\n\n\t\tpublic void LoadContent()\n\t\t{\n\t\t\t// setup our graphics scene matrices\n\t\t\tworldMatrix = Matrix.Identity;\n\t\t\tviewMatrix = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n\t\t\tprojectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, graphicsDevice.Viewport.AspectRatio, 1, 10);\n\n\t\t\tworldMatrix *= Matrix.CreateRotationX(-0.05f * 30f);\n\t\t\tworldMatrix *= Matrix.CreateRotationY(-0.05f * 20f);\n\n\t\t\t// Setup our basic effect\n\t\t\tbasicEffect = new BasicEffect(graphicsDevice);\n\t\t\tbasicEffect.World = worldMatrix;\n\t\t\tbasicEffect.View = viewMatrix;\n\t\t\tbasicEffect.Projection = projectionMatrix;\n\n\t\t\tCreateCubeVertexBuffer();\n\t\t\tCreateCubeIndexBuffer();\n\t\t}\n\n\t\tpublic void UnloadContent()\n\t\t{\n\t\t\tbasicEffect.Dispose();\n\t\t\tbasicEffect = null;\n\n\t\t\tvertices.Dispose();\n\t\t\tvertices = null;\n\n\t\t\tindices.Dispose();\n\t\t\tindices = null;\n\t\t}\n\n\t\tpublic void Draw()\n\t\t{\n\t\t\tgraphicsDevice.SetVertexBuffer(vertices);\n\t\t\tgraphicsDevice.Indices = indices;\n\n\t\t\tbasicEffect.World = worldMatrix * Matrix.CreateTranslation(CubePosition);\n\t\t\tbasicEffect.DiffuseColor = CubeColor.ToVector3();\n\n\t\t\tforeach (EffectPass pass in basicEffect.CurrentTechnique.Passes)\n\t\t\t{\n\t\t\t\tpass.Apply();\n\n\t\t\t\tgraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, number_of_vertices, 0, number_of_indices / 3);\n\t\t\t}\n\t\t}\n\n\t\tconst int number_of_vertices = 8;\n\t\tconst int number_of_indices = 36;\n\t\tVertexBuffer vertices;\n\n\t\tvoid CreateCubeVertexBuffer()\n\t\t{\n\t\t\tVertexPositionTexture[] cubeVertices = new VertexPositionTexture[number_of_vertices];\n\n\t\t\tcubeVertices[0].Position = new Vector3(-1, -1, -1);\n\t\t\tcubeVertices[1].Position = new Vector3(-1, -1, 1);\n\t\t\tcubeVertices[2].Position = new Vector3(1, -1, 1);\n\t\t\tcubeVertices[3].Position = new Vector3(1, -1, -1);\n\t\t\tcubeVertices[4].Position = new Vector3(-1, 1, -1);\n\t\t\tcubeVertices[5].Position = new Vector3(-1, 1, 1);\n\t\t\tcubeVertices[6].Position = new Vector3(1, 1, 1);\n\t\t\tcubeVertices[7].Position = new Vector3(1, 1, -1);\n\n\t\t\tvertices = new VertexBuffer(graphicsDevice, VertexPositionTexture.VertexDeclaration, number_of_vertices, BufferUsage.WriteOnly);\n\t\t\tvertices.SetData(cubeVertices);\n\t\t}\n\n\t\tIndexBuffer indices;\n\n\t\tvoid CreateCubeIndexBuffer()\n\t\t{\n\t\t\tUInt16[] cubeIndices = new UInt16[number_of_indices];\n\n\t\t\t//bottom face\n\t\t\tcubeIndices[0] = 0;\n\t\t\tcubeIndices[1] = 2;\n\t\t\tcubeIndices[2] = 3;\n\t\t\tcubeIndices[3] = 0;\n\t\t\tcubeIndices[4] = 1;\n\t\t\tcubeIndices[5] = 2;\n\n\t\t\t//top face\n\t\t\tcubeIndices[6] = 4;\n\t\t\tcubeIndices[7] = 6;\n\t\t\tcubeIndices[8] = 5;\n\t\t\tcubeIndices[9] = 4;\n\t\t\tcubeIndices[10] = 7;\n\t\t\tcubeIndices[11] = 6;\n\n\t\t\t//front face\n\t\t\tcubeIndices[12] = 5;\n\t\t\tcubeIndices[13] = 2;\n\t\t\tcubeIndices[14] = 1;\n\t\t\tcubeIndices[15] = 5;\n\t\t\tcubeIndices[16] = 6;\n\t\t\tcubeIndices[17] = 2;\n\n\t\t\t//back face\n\t\t\tcubeIndices[18] = 0;\n\t\t\tcubeIndices[19] = 7;\n\t\t\tcubeIndices[20] = 4;\n\t\t\tcubeIndices[21] = 0;\n\t\t\tcubeIndices[22] = 3;\n\t\t\tcubeIndices[23] = 7;\n\n\t\t\t//left face\n\t\t\tcubeIndices[24] = 0;\n\t\t\tcubeIndices[25] = 4;\n\t\t\tcubeIndices[26] = 1;\n\t\t\tcubeIndices[27] = 1;\n\t\t\tcubeIndices[28] = 4;\n\t\t\tcubeIndices[29] = 5;\n\n\t\t\t//right face\n\t\t\tcubeIndices[30] = 2;\n\t\t\tcubeIndices[31] = 6;\n\t\t\tcubeIndices[32] = 3;\n\t\t\tcubeIndices[33] = 3;\n\t\t\tcubeIndices[34] = 6;\n\t\t\tcubeIndices[35] = 7;\n\n\t\t\tindices = new IndexBuffer(graphicsDevice, IndexElementSize.SixteenBits, number_of_indices, BufferUsage.WriteOnly);\n\t\t\tindices.SetData<UInt16>(cubeIndices);\n\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "Tests/Components/SpaceshipModelDrawComponent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Components\n{\n\tclass SpaceshipModelDrawComponent : VisualTestDrawableGameComponent\n\t{\n\n\t\tpublic class Spaceship\n\t\t{\n\t\t\t#region Fields\n\t\t\t// The XNA framework Model object that we are going to display.\n\t\t\tModel spaceshipModel;\n\n\t\t\t// Array holding all the bone transform matrices for the entire model.\n\t\t\t// We could just allocate this locally inside the Draw method, but it\n\t\t\t// is more efficient to reuse a single array, as this avoids creating\n\t\t\t// unnecessary garbage.\n\t\t\tMatrix[] boneTransforms;\n\n\t\t\t// Spaceship drawing parameters\n\t\t\tprivate Matrix projection;\n\t\t\tprivate Matrix rotation;\n\t\t\tprivate Matrix view;\n\t\t\tprivate bool[] lights;\n\t\t\tbool isTextureEnabled;\n\t\t\tbool isPerPixelLightingEnabled;\n\t\t\t#endregion\n\n\t\t\t#region Initialization\n\t\t\t/// <summary>\n\t\t\t/// Loads the spaceship model.\n\t\t\t/// </summary>\n\t\t\tpublic void Load(ContentManager content)\n\t\t\t{\n\t\t\t\t// Load the spaceship model from the ContentManager.\n\t\t\t\tspaceshipModel = content.Load<Model>(Paths.Model(\"Spaceship\"));\n\n\t\t\t\t// Allocate the transform matrix array.\n\t\t\t\tboneTransforms = new Matrix[spaceshipModel.Bones.Count];\n\t\t\t}\n\t\t\t#endregion\n\n\t\t\t#region Public accessors\n\t\t\t/// <summary>\n\t\t\t/// Gets or sets the projection matrix value.\n\t\t\t/// </summary>\n\t\t\tpublic Matrix Projection\n\t\t\t{\n\t\t\t\tget { return projection; }\n\t\t\t\tset { projection = value; }\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Gets or sets the rotation matrix value.\n\t\t\t/// </summary>\n\t\t\tpublic Matrix Rotation\n\t\t\t{\n\t\t\t\tget { return rotation; }\n\t\t\t\tset { rotation = value; }\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Gets or sets the rotation matrix value.\n\t\t\t/// </summary>\n\t\t\tpublic bool IsTextureEnabled\n\t\t\t{\n\t\t\t\tget { return isTextureEnabled; }\n\t\t\t\tset { isTextureEnabled = value; }\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Gets or sets the view matrix value.\n\t\t\t/// </summary>\n\t\t\tpublic Matrix View\n\t\t\t{\n\t\t\t\tget { return view; }\n\t\t\t\tset { view = value; }\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Gets or sets the lights states.\n\t\t\t/// </summary>\n\t\t\tpublic bool[] Lights\n\t\t\t{\n\t\t\t\tget { return lights; }\n\t\t\t\tset { lights = value; }\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Gets or sets the per pixel lighting preferences\n\t\t\t/// </summary>\n\t\t\tpublic bool IsPerPixelLightingEnabled\n\t\t\t{\n\t\t\t\tget { return isPerPixelLightingEnabled; }\n\t\t\t\tset { isPerPixelLightingEnabled = value; }\n\t\t\t}\n\t\t\t#endregion\n\n\t\t\t#region Draw\n\t\t\t/// <summary>\n\t\t\t/// Draws the spaceship model, using the current drawing parameters.\n\t\t\t/// </summary>\n\t\t\tpublic void Draw()\n\t\t\t{\n\t\t\t\t// Set the world matrix as the root transform of the model.\n\t\t\t\tspaceshipModel.Root.Transform = Rotation;\n\n\t\t\t\t// Look up combined bone matrices for the entire model.\n\t\t\t\tspaceshipModel.CopyAbsoluteBoneTransformsTo(boneTransforms);\n\n\t\t\t\t// Draw the model.\n\t\t\t\tforeach (ModelMesh mesh in spaceshipModel.Meshes)\n\t\t\t\t{\n\t\t\t\t\tforeach (BasicEffect effect in mesh.Effects)\n\t\t\t\t\t{\n\t\t\t\t\t\teffect.World = boneTransforms[mesh.ParentBone.Index];\n\t\t\t\t\t\teffect.View = View;\n\t\t\t\t\t\teffect.Projection = Projection;\n\n\t\t\t\t\t\tSetEffectLights(effect, Lights);\n\t\t\t\t\t\tSetEffectPerPixelLightingEnabled(effect);\n\n\t\t\t\t\t\teffect.TextureEnabled = IsTextureEnabled;\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.Draw();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Sets effect's per pixel lighting preference\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"effect\"></param>\n\t\t\tprivate void SetEffectPerPixelLightingEnabled(BasicEffect effect)\n\t\t\t{\n\t\t\t\teffect.PreferPerPixelLighting = isPerPixelLightingEnabled;\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Sets effects lighting properties\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"effect\"></param>\n\t\t\t/// <param name=\"lights\"></param>\n\t\t\tprivate void SetEffectLights(BasicEffect effect, bool[] lights)\n\t\t\t{\n\t\t\t\teffect.Alpha = 1.0f;\n\t\t\t\teffect.DiffuseColor = new Vector3(0.75f, 0.75f, 0.75f);\n\t\t\t\teffect.SpecularColor = new Vector3(0.25f, 0.25f, 0.25f);\n\t\t\t\teffect.SpecularPower = 5.0f;\n\t\t\t\teffect.AmbientLightColor = new Vector3(0.75f, 0.75f, 0.75f);\n\n\t\t\t\teffect.DirectionalLight0.Enabled = lights[0];\n\t\t\t\teffect.DirectionalLight0.DiffuseColor = Vector3.One;\n\t\t\t\teffect.DirectionalLight0.Direction = Vector3.Normalize(new Vector3(1, -1, 0));\n\t\t\t\teffect.DirectionalLight0.SpecularColor = Vector3.One;\n\n\t\t\t\teffect.DirectionalLight1.Enabled = lights[1];\n\t\t\t\teffect.DirectionalLight1.DiffuseColor = new Vector3(0.5f, 0.5f, 0.5f);\n\t\t\t\teffect.DirectionalLight1.Direction = Vector3.Normalize(new Vector3(-1, -1, 0));\n\t\t\t\teffect.DirectionalLight1.SpecularColor = new Vector3(1f, 1f, 1f);\n\n\t\t\t\teffect.DirectionalLight2.Enabled = lights[2];\n\t\t\t\teffect.DirectionalLight2.DiffuseColor = new Vector3(0.3f, 0.3f, 0.3f);\n\t\t\t\teffect.DirectionalLight2.Direction = Vector3.Normalize(new Vector3(-1, -1, -1));\n\t\t\t\teffect.DirectionalLight2.SpecularColor = new Vector3(0.3f, 0.3f, 0.3f);\n\n\t\t\t\teffect.LightingEnabled = true;\n\t\t\t}\n\t\t\t#endregion\n\n\t\t}\n\n\t\tSpaceship spaceship;\n\t\tfloat cameraFOV = 45; // Initial camera FOV (serves as a zoom level)\n\t\tfloat rotationXAmount = 0.0f;\n\t\tfloat rotationYAmount = 0.0f;\n\n\t\tTexture2D background;\n\n\t\tSpriteBatch spriteBatch;\n\n\n\t\tpublic SpaceshipModelDrawComponent(Game game) : base(game)\n\t\t{\n\t\t}\n\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tspriteBatch = new SpriteBatch(GraphicsDevice);\n\n\t\t\tbackground = Game.Content.Load<Texture2D>(Paths.Texture(\"fun-background\"));\n\n\t\t\tspaceship = new Spaceship();\n\t\t\tspaceship.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(cameraFOV),\n\t\t\t\tGraphicsDevice.Viewport.AspectRatio, 10, 20000);\n\t\t\tspaceship.Load(Game.Content);\n\n\n\t\t\tbase.LoadContent();\n\t\t}\n\n\t\tprotected override void UnloadContent()\n\t\t{\n\t\t\tspriteBatch.Dispose();\n\t\t\tspriteBatch = null;\n\t\t\tbackground.Dispose();\n\t\t\tbackground = null;\n\t\t}\n\n\t\tprotected override void UpdateOncePerDraw(GameTime gameTime)\n\t\t{\n\t\t\tvar frameInfoSource = Game.Services.RequireService<IFrameInfoSource>();\n\t\t\tvar frameInfo = frameInfoSource.FrameInfo;\n\n\t\t\tspaceship.Rotation = Matrix.CreateWorld(new Vector3(0, 250, 0), Vector3.Forward, Vector3.Up) *\n\t\t\t\tMatrix.CreateFromYawPitchRoll((float)Math.PI + MathHelper.PiOver2 + rotationXAmount / 100, rotationYAmount / 100, 0);\n\n\t\t\tspaceship.View = Matrix.CreateLookAt(\n\t\t\t\tnew Vector3(3500, 400, 0) + new Vector3(0, 250, 0),\n\t\t\t\tnew Vector3(0, 250, 0),\n\t\t\t\tVector3.Up);\n\t\t\tspaceship.IsTextureEnabled = true;\n\t\t\tspaceship.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(cameraFOV),\n\t\t\t\tGraphicsDevice.Viewport.AspectRatio, 10, 20000);\n\n\n\t\t\tint frameNum = frameInfo.DrawNumber - 1;\n\t\t\tspaceship.Lights = new bool[] {\n\t\t\t\t(frameNum & 1) != 0,\n\t\t\t\t(frameNum & 2) != 0,\n\t\t\t\t(frameNum & 4) != 0\n\t\t\t};\n\t\t\tspaceship.IsPerPixelLightingEnabled = (frameNum & 8) != 0;\n\n\t\t\trotationXAmount += 10;\n\t\t\trotationYAmount += 12;\n\t\t}\n\n\t\tpublic override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tGraphicsDevice.Clear(Color.CornflowerBlue);\n\n\t\t\tspriteBatch.Begin();\n\t\t\tspriteBatch.Draw(background, Vector2.Zero, Color.White);\n\t\t\tspriteBatch.End();\n\n\t\t\t// Set render states.\n\t\t\tGraphicsDevice.BlendState = BlendState.Opaque;\n\t\t\tGraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;\n\t\t\tGraphicsDevice.DepthStencilState = DepthStencilState.Default;\n\t\t\tGraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;\n\n\t\t\tspaceship.Draw();\n\n\t\t\tbase.Draw(gameTime);\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Components/TexturedQuadComponent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Components\n{\n\tclass TexturedQuadComponent : VisualTestDrawableGameComponent\n\t{\n\n\t\tstruct Quad\n\t\t{\n\t\t\tpublic Vector3 Origin;\n\t\t\tpublic Vector3 UpperLeft;\n\t\t\tpublic Vector3 LowerLeft;\n\t\t\tpublic Vector3 UpperRight;\n\t\t\tpublic Vector3 LowerRight;\n\t\t\tpublic Vector3 Normal;\n\t\t\tpublic Vector3 Up;\n\t\t\tpublic Vector3 Left;\n\n\t\t\tpublic VertexPositionNormalTexture[] Vertices;\n\t\t\tpublic short[] Indexes;\n\n\n\t\t\tpublic Quad(Vector3 origin, Vector3 normal, Vector3 up,\n\t\t\t\tfloat width, float height)\n\t\t\t{\n\t\t\t\tVertices = new VertexPositionNormalTexture[4];\n\t\t\t\tIndexes = new short[6];\n\t\t\t\tOrigin = origin;\n\t\t\t\tNormal = normal;\n\t\t\t\tUp = up;\n\n\t\t\t\t// Calculate the quad corners\n\t\t\t\tLeft = Vector3.Cross(normal, Up);\n\t\t\t\tVector3 uppercenter = (Up * height / 2) + origin;\n\t\t\t\tUpperLeft = uppercenter + (Left * width / 2);\n\t\t\t\tUpperRight = uppercenter - (Left * width / 2);\n\t\t\t\tLowerLeft = UpperLeft - (Up * height);\n\t\t\t\tLowerRight = UpperRight - (Up * height);\n\n\t\t\t\tFillVertices();\n\t\t\t}\n\n\t\t\tprivate void FillVertices()\n\t\t\t{\n\t\t\t\t// Fill in texture coordinates to display full texture\n\t\t\t\t// on quad\n\t\t\t\tVector2 textureUpperLeft = new Vector2(0.0f, 0.0f);\n\t\t\t\tVector2 textureUpperRight = new Vector2(1.0f, 0.0f);\n\t\t\t\tVector2 textureLowerLeft = new Vector2(0.0f, 1.0f);\n\t\t\t\tVector2 textureLowerRight = new Vector2(1.0f, 1.0f);\n\n\t\t\t\t// Provide a normal for each vertex\n\t\t\t\tfor (int i = 0; i < Vertices.Length; i++)\n\t\t\t\t{\n\t\t\t\t\tVertices[i].Normal = Normal;\n\t\t\t\t}\n\n\t\t\t\t// Set the position and texture coordinate for each\n\t\t\t\t// vertex\n\t\t\t\tVertices[0].Position = LowerLeft;\n\t\t\t\tVertices[0].TextureCoordinate = textureLowerLeft;\n\t\t\t\tVertices[1].Position = UpperLeft;\n\t\t\t\tVertices[1].TextureCoordinate = textureUpperLeft;\n\t\t\t\tVertices[2].Position = LowerRight;\n\t\t\t\tVertices[2].TextureCoordinate = textureLowerRight;\n\t\t\t\tVertices[3].Position = UpperRight;\n\t\t\t\tVertices[3].TextureCoordinate = textureUpperRight;\n\n\t\t\t\t// Set the index buffer for each vertex, using\n\t\t\t\t// clockwise winding\n\t\t\t\tIndexes[0] = 0;\n\t\t\t\tIndexes[1] = 1;\n\t\t\t\tIndexes[2] = 2;\n\t\t\t\tIndexes[3] = 2;\n\t\t\t\tIndexes[4] = 1;\n\t\t\t\tIndexes[5] = 3;\n\t\t\t}\n\t\t}\n\n\n\t\tQuad quad;\n\t\tMatrix View, Projection;\n\n\t\tBasicEffect quadEffect;\n\n\t\tTexture2D texture;\n\n\t\tbool enableLighting;\n\n\t\tpublic TexturedQuadComponent(Game game, bool enableLighting) : base(game)\n\t\t{\n\t\t\tthis.enableLighting = enableLighting;\n\t\t}\n\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tbase.LoadContent();\n\n\t\t\tquad = new Quad(Vector3.Zero, Vector3.Backward, Vector3.Up, 1, 1);\n\t\t\tView = Matrix.CreateLookAt(new Vector3(0, 0, 2), Vector3.Zero, Vector3.Up);\n\t\t\tProjection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 4.0f / 3.0f, 1, 500);\n\n\t\t\ttexture = Game.Content.Load<Texture2D>(Paths.Texture(\"GlassPane\"));\n\t\t\tquadEffect = new BasicEffect(GraphicsDevice);\n\n\t\t\tif (enableLighting)\n\t\t\t\tquadEffect.EnableDefaultLighting();\n\n\t\t\tquadEffect.World = Matrix.Identity;\n\t\t\tquadEffect.View = View;\n\t\t\tquadEffect.Projection = Projection;\n\t\t\tquadEffect.TextureEnabled = true;\n\t\t\tquadEffect.Texture = texture;\n\n\t\t}\n\n\t\tprotected override void UnloadContent()\n\t\t{\n\t\t\ttexture.Dispose();\n\t\t\ttexture = null;\n\t\t\tquadEffect.Dispose();\n\t\t\tquadEffect = null;\n\t\t}\n\n\t\tpublic override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tGraphicsDevice.Clear(Color.CornflowerBlue);\n\n\t\t\tforeach (EffectPass pass in quadEffect.CurrentTechnique.Passes)\n\t\t\t{\n\t\t\t\tpass.Apply();\n\n\n\t\t\t\tGraphicsDevice.DrawUserIndexedPrimitives\n\t\t\t\t\t<VertexPositionNormalTexture>(\n\t\t\t\t\tPrimitiveType.TriangleList,\n\t\t\t\t\tquad.Vertices, 0, 4,\n\t\t\t\t\tquad.Indexes, 0, 2);\n\t\t\t}\n\n\t\t\tbase.Draw(gameTime);\n\t\t}\n\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Components/VisualTestDrawableGameComponent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nusing Microsoft.Xna.Framework;\n\nnamespace Kni.Tests.Components\n{\n\tclass VisualTestDrawableGameComponent : DrawableGameComponent\n\t{\n\t\tpublic VisualTestDrawableGameComponent(Game game)\n\t\t\t: base(game)\n\t\t{\n\t\t}\n\n\t\tprivate UpdateGuard _updateGuard = new UpdateGuard();\n\t\tpublic override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\n\t\t\tif (gameTime.ElapsedGameTime == TimeSpan.Zero)\n\t\t\t\treturn;\n\t\t\tif (_updateGuard.ShouldUpdate(Game.Services.RequireService<IFrameInfoSource>().FrameInfo))\n\t\t\t\tUpdateOncePerDraw(gameTime);\n\t\t}\n\n\t\tprotected virtual void UpdateOncePerDraw(GameTime gameTime)\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Components/VisualTestGameComponent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nusing Microsoft.Xna.Framework;\n\nnamespace Kni.Tests.Components\n{\n\tclass VisualTestGameComponent : GameComponent\n\t{\n\t\tpublic VisualTestGameComponent(Game game)\n\t\t\t: base(game)\n\t\t{\n\t\t}\n\n\t\tprivate UpdateGuard _updateGuard = new UpdateGuard();\n\t\tpublic override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\n\t\t\tif (gameTime.ElapsedGameTime == TimeSpan.Zero)\n\t\t\t\treturn;\n\n\t\t\tif (_updateGuard.ShouldUpdate(Game.Services.RequireService<IFrameInfoSource>().FrameInfo))\n\t\t\t\tUpdateOncePerDraw(gameTime);\n\t\t}\n\n\t\tprotected virtual void UpdateOncePerDraw(GameTime gameTime)\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/AssetTestClasses.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\nusing System.Collections.Generic;\n\n#region The Basics\npublic class TheBasics\n{\n    public int PublicField;\n    protected int ProtectedField;\n    private int PrivateField;\n    internal int InternalField;\n\n    public string GetSetProperty\n    {\n        get;\n        set;\n    }\n\n    public string GetOnlyProperty\n    {\n        get { return \"Hello World\"; }\n    }\n\n    public string SetOnlyProperty { set; private get; }\n\n    public NestedClass Nested;\n    public NestedClass Nested2;\n\n    public TheBasics()\n    {\n        Nested = Nested2 = new NestedClass();\n    }\n}\n\npublic class NestedClass\n{\n    public string Name;\n    public bool IsEnglish;\n}\n#endregion\n\n#region Inheritance\npublic class InheritanceBase\n{\n    public int elf;\n}\n\npublic class Inheritance : InheritanceBase\n{\n    public string hello;\n}\n#endregion\n\n#region IncludingPrivateMembers\npublic class IncludingPrivateMembers\n{\n    public IncludingPrivateMembers()\n    {\n    }\n\n    public IncludingPrivateMembers(int elf)\n    {\n        this.elf = elf;\n    }\n\n    [ContentSerializer]\n    private int elf; // will be serialized\n\n    public int GetElfValue()\n    {\n        return elf;\n    }\n}\n#endregion\n\n#region ExcludingPublicMembers\npublic class ExcludingPublicMembers\n{\n    [ContentSerializerIgnore]\n    public int elf; // will not be serialized\n}\n#endregion\n\n#region RenamingXmlElements\npublic class RenamingXmlElements\n{\n    [ContentSerializer(ElementName = \"ShawnSaysHello\")]\n    public string hello;\n\n    [ContentSerializer(ElementName = \"ElvesAreCool\")]\n    public int elf;\n\n    [ContentSerializer(ElementName = \"Speed\")]\n    public float speed;\n\n    [ContentSerializer(ElementName = \"Organic\")]\n    public bool isOrganic;\n\n    [ContentSerializer(ElementName = \"Dimensions\")]\n    private Vector2 dimensions;\n\n    public Vector2 Dimensions\n    {\n        get { return dimensions; }\n    }\n\n    internal void SetDimensions(Vector2 value)\n    {\n        dimensions = value;\n    }\n}\n#endregion\n\n#region NullReferences\npublic class NullReferences\n{\n    public string hello = \"world\";\n}\n#endregion\n\n#region OptionalElements\npublic class OptionalElements\n{\n    [ContentSerializer(Optional = true)]\n    public string a = null;\n\n    public string b = \"b\";\n\n    [ContentSerializer(Optional = true)]\n    public string c = \"c\";\n\n    [ContentSerializer(Optional = true)]\n    public CullMode? d = null;\n\n    [ContentSerializer(Optional = true)]\n    public CullMode? e = CullMode.CullClockwiseFace;\n\n    public CullMode? f = CullMode.CullCounterClockwiseFace;\n\n    public CullMode g = CullMode.CullClockwiseFace;\n}\n#endregion\n\n#region AllowNull\npublic class AllowNull\n{\n    [ContentSerializer(AllowNull = false)]\n    string a;\n}\n#endregion\n\n#region Collections\n\npublic enum CustomEnum\n{\n    Val1,\n    Val2\n}\n\npublic class CustomItem\n{\n    public CustomEnum EnumVal;\n}\n\npublic class CustomItemBase\n{\n    public double DoubleVal;\n    public Nullable<float> NullableFloatVal;\n}\n\npublic class CustomItemInherited : CustomItemBase\n{\n    public char[] CharArrayVal;\n}\n\npublic class Collections\n{\n    public string[] StringArray;\n    public List<string> StringList;\n    public int[] IntArray;\n    public Color[] ColorArray;\n    public List<CustomItem> CustomItemList;\n    public List<CustomItemInherited> CustomItemInheritedList;\n\n    // Indexer - should be ignored by intermediate serializer.\n    public Color this[int i]\n    {\n        get { return ColorArray[i]; }\n        set { ColorArray[i] = value; }\n    }\n}\n#endregion\n\n#region CollectionItemName\npublic class CollectionItemName\n{\n    [ContentSerializer(ElementName = \"w00t\", CollectionItemName = \"Flibble\")]\n    public string[] StringArray;\n}\n#endregion\n\n#region Dictionaries\npublic class Dictionaries\n{\n    public Dictionary<int, bool> TestDictionary = new Dictionary<int, bool>();\n}\n#endregion\n\n#region Primitive Types\npublic class PrimitiveTypes\n{\n    public char Char;\n    public char Char2;\n    public char Char3;\n    public byte Byte;\n    public sbyte SByte;\n    public short Short;\n    public ushort UShort;\n    public int Int;\n    public uint UInt;\n    public long Long;\n    public ulong ULong;\n    public float Float;\n    public double Double;\n    public char? NullChar;                        \n    public char? NotNullChar;\n}\n#endregion\n\n#region MathTypes\npublic class MathTypes\n{\n    public Point Point;\n    public Rectangle Rectangle;\n    public Vector2 Vector2;\n    public Vector3 Vector3;\n    public Vector4 Vector4;\n    public Quaternion Quaternion;\n    public Plane Plane;\n    public Matrix Matrix;\n    public Color Color;\n    public Vector2[] Vector2Array = new Vector2[0];\n    public List<Vector2> Vector2List = new List<Vector2>();\n    public List<Vector2> Vector2ListEmpty = new List<Vector2>();\n}\n#endregion\n\n#region PolymorphicTypes\npublic class PolymorphicA\n{\n    public bool Value;\n}\n\npublic class PolymorphicB : PolymorphicA { }\npublic class PolymorphicC : PolymorphicA { }\n\npublic class PolymorphicTypes\n{\n    public object Hello;\n    public object Elf;\n    public PolymorphicA[] TypedArray;\n    public Array UntypedArray;\n    public ICollection<int> IntCollection;\n    public object UntypedDictionary;\n}\n#endregion\n\n#region FlattenContent\npublic class FlattenContent\n{\n    [ContentSerializer(FlattenContent = true)]\n    public NestedClass Nested;\n\n    [ContentSerializer(FlattenContent = true, CollectionItemName = \"Boo\")]\n    public string[] Collection;\n}\n#endregion\n\n#region SharedResources\npublic class SharedResources\n{\n    [ContentSerializer(SharedResource = true)]\n    public Linked Head;\n\n    public Linked2[] LinkedArray;\n}\n\npublic class Linked\n{\n    public int Value;\n\n    [ContentSerializer(SharedResource = true)]\n    public Linked Next;\n}\n\npublic class Linked2\n{\n    [ContentSerializer(SharedResource = true)]\n    public Linked2[] Next;\n}\n\n#endregion\n\n#region CircularReferences\npublic class CircularReferences\n{\n    public CircularLinked Head;\n}\n\npublic class CircularLinked\n{\n    public int Value;\n\n    public CircularLinked Next;\n}\n#endregion\n\n#region ExternalReferences\npublic class ExternalReferences\n{\n    public ExternalReference<Texture2D> Texture;\n    public ExternalReference<Texture2D> Texture2;\n    public ExternalReference<Effect> Shader;\n}\n#endregion\n\n#region FontDescription\nclass ExtendedFontDescription : FontDescription\n{\n    public ExtendedFontDescription()\n        : base(\"Arial\", 14, 0)\n    {\n    }\n\n    [ContentSerializer(Optional = true, CollectionItemName = \"Item\")]\n    public List<string> ExtendedListProperty\n    {\n        get { return _list; }\n    }\n\n    private List<string> _list = new List<string>();\n}\n#endregion\n\n#region SystemTypes\nclass SystemTypes\n{\n    public TimeSpan TimeSpan;\n}\n#endregion\n\n#region GetterOnlyProperties\nclass GetterOnlyProperties\n{\n    private readonly List<int> _intList;\n    private readonly Dictionary<int, string> _intStringDictionary;\n    private readonly AnotherClass _customClass;\n    private readonly AnotherClass[] _customClassArray;\n    private readonly AnotherStruct _customStruct;\n\n    public int IntValue\n    {\n        get { return 0; }\n    }\n\n    public Vector2 Dimensions\n    {\n        get { return new Vector2(16, 16); }\n    }\n\n    public List<int> IntList\n    {\n        get { return _intList; }\n    }\n\n    public Dictionary<int, string> IntStringDictionaryWithPrivateSetter { get; private set; }\n\n    public Dictionary<int, string> IntStringDictionary\n    {\n        get { return _intStringDictionary; }\n    }\n\n    public class AnotherClass\n    {\n        public int A;\n    }\n\n    public AnotherClass CustomClass\n    {\n        get { return _customClass; }\n    }\n\n    public object UntypedCustomClass\n    {\n        get { return _customClass; }\n    }\n\n    public AnotherClass[] CustomClassArray\n    {\n        get { return _customClassArray; }\n    }\n\n    public object UntypedCustomClassArray\n    {\n        get { return _customClassArray; }\n    }\n\n    public struct AnotherStruct\n    {\n        public int A;\n    }\n\n    public AnotherStruct CustomStruct\n    {\n        get { return _customStruct; }\n    }\n\n    public GetterOnlyProperties()\n    {\n        _intList = new List<int>();\n        IntStringDictionaryWithPrivateSetter = new Dictionary<int, string>();\n        _intStringDictionary = new Dictionary<int, string>();\n        _customClass = new AnotherClass();\n        _customClassArray = new [] { new AnotherClass { A = 42 } };\n        _customStruct = new AnotherStruct();\n    }\n}\n#endregion\n\n#region GetterOnlyPolymorphicArrayProperties\nclass GetterOnlyPolymorphicArrayProperties\n{\n    private readonly AnotherClass[] _customClassArray;\n\n    public class AnotherClass\n    {\n        public int A;\n    }\n\n    public IList CustomClassArrayAsIList\n    {\n        get { return _customClassArray; }\n    }\n\n    public GetterOnlyPolymorphicArrayProperties()\n    {\n        _customClassArray = new[] { new AnotherClass { A = 42 } };\n    }\n}\n#endregion\n\n#region GenericTypes\nclass GenericTypes\n{\n    public GenericClass<int> A;\n    public GenericClass<float> B;\n    public GenericClass<GenericArg> C;\n}\n\nclass GenericClass<T>\n{\n    public T Value;\n}\npublic class GenericArg\n{\n    public int Value;\n}\n#endregion\n\n#region ChildCollections\npublic class ChildCollections\n{\n    private readonly ChildrenCollection _children;\n\n    [ContentSerializer]\n    public ChildrenCollection Children\n    {\n        get { return _children; }\n    }\n\n    public ChildCollections()\n    {\n        _children = new ChildrenCollection(this);\n    }\n}\n\npublic class ChildrenCollection : ChildCollection<ChildCollections, ChildCollectionChild>\n{\n    public ChildrenCollection(ChildCollections parent) : base(parent)\n    {\n    }\n\n    protected override ChildCollections GetParent(ChildCollectionChild child)\n    {\n        return child.Parent;\n    }\n\n    protected override void SetParent(ChildCollectionChild child, ChildCollections parent)\n    {\n        child.Parent = parent;\n    }\n}\n\npublic class ChildCollectionChild : ContentItem\n{\n    [ContentSerializerIgnore]\n    public ChildCollections Parent { get; set; }\n}\n#endregion\n\n#region Colors\npublic class Colors\n{\n    public Color White { get; set; }\n    public Color Black { get; set; }\n    public Color Transparent { get; set; }\n    public Color Red { get; set; }\n    public Color Green { get; set; }\n    public Color Blue { get; set; }\n}\n#endregion\n\nclass StructArrayNoElements\n{\n    public Vector2[] Vector2ArrayNoElements = new Vector2[] {};\n}\n\nnamespace Kni.Tests.ContentPipeline\n{\n    #region Namespaces\n    public class NamespaceHelper\n    {\n        public bool Value;\n    }\n\n    public class NamespaceClass\n    {\n        public object A;\n        public object B;\n        public object C;\n        public object D;\n        public object E;\n        public object F;\n        public object G;\n        public List<string> H;\n    }\n\n    namespace Nested\n    {\n        public class ClassInsideNestedNamespace\n        {\n            public bool Value;\n        }\n\n        namespace ContentPipeline\n        {\n            public class ClassInsideNestedAmbiguousNamespace\n            {\n                public bool Value;\n            }\n        }\n\n        namespace ContentPipeline2\n        {\n            public class ClassInsideNestedUnambiguousNamespace\n            {\n                public bool Value;\n            }\n        }\n    }\n    #endregion\n\n    #region CustomFormatting\n    public class CustomFormatting<T, U>\n    {\n        public T A;\n        public List<Vector2> Vector2ListSpaced = new List<Vector2>();\n        public string EmptyString;\n        public U Rectangle;\n    }\n    #endregion\n}\n\nnamespace Kni.Tests.SomethingElse.ContentPipeline\n{\n    public class ClassInsideAmbiguousNamespace\n    {\n        public bool Value;\n    }\n}"
  },
  {
    "path": "Tests/ContentPipeline/AudioContentTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Audio;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class AudioContentTests\n    {\n        [Test]\n        public void Ctors()\n        {\n            // Test bad file names.\n            Assert.Throws<InvalidContentException>(() => new AudioContent(null, AudioFileType.Wav));\n            Assert.Throws<InvalidContentException>(() => new AudioContent(\"\", AudioFileType.Wav));\n            Assert.Throws<InvalidContentException>(() => new AudioContent(@\"Not/A/File\", AudioFileType.Wav));\n\n            // Test invalid file types.\n            Assert.Throws<InvalidContentException>(() => new AudioContent(@\"Assets/Audio/blast_mono.wav\", AudioFileType.Mp3));\n            Assert.Throws<InvalidContentException>(() => new AudioContent(@\"Assets/Audio/blast_mono.wav\", AudioFileType.Wma));\n            Assert.Throws<InvalidContentException>(() => new AudioContent(@\"Assets/Audio/rock_loop_stereo.wma\", AudioFileType.Wav));\n            Assert.Throws<InvalidContentException>(() => new AudioContent(@\"Assets/Audio/rock_loop_stereo.mp3\", AudioFileType.Wav));\n\n            // This for some reason does not throw!\n            new AudioContent(@\"Assets/Audio/rock_loop_stereo.wma\", AudioFileType.Mp3);\n            new AudioContent(@\"Assets/Audio/rock_loop_stereo.mp3\", AudioFileType.Wma);\n        }\n\n        [Test]\n        public void WavFile()\n        {\n            var content = new AudioContent(@\"Assets/Audio/blast_mono.wav\", AudioFileType.Wav);\n            Assert.AreEqual(@\"Assets/Audio/blast_mono.wav\", content.FileName);\n            Assert.AreEqual(AudioFileType.Wav, content.FileType);\n            Assert.IsNull(content.Identity);\n            Assert.AreEqual(0, content.LoopStart);\n            Assert.AreEqual(315970, content.LoopLength);\n            Assert.AreEqual(71640000, content.Duration.Ticks);\n\n            var format = content.Format;\n            Assert.IsNotNull(format);\n            Assert.AreEqual(1, format.Format);\n            Assert.AreEqual(1, format.ChannelCount);\n            Assert.AreEqual(44100, format.SampleRate);\n            Assert.AreEqual(88200, format.AverageBytesPerSecond);\n            Assert.AreEqual(2, format.BlockAlign);\n            Assert.AreEqual(16, format.BitsPerSample);\n            \n            Assert.IsNotNull(format.NativeWaveFormat);\n            Assert.AreEqual(18, format.NativeWaveFormat.Count);\n\n            using (var reader = new BinaryReader(new MemoryStream(format.NativeWaveFormat.ToArray())))\n            {\n                var formatType = reader.ReadInt16();\n                var channels = reader.ReadInt16();\n                var sampleRate = reader.ReadInt32();\n                var averageBytesPerSecond = reader.ReadInt32();\n                var blockAlign = reader.ReadInt16();\n                var bitsPerSample = reader.ReadInt16();\n                var zero = reader.ReadInt16();\n\n                Assert.AreEqual(format.Format, formatType);\n                Assert.AreEqual(format.ChannelCount, channels);\n                Assert.AreEqual(format.SampleRate, sampleRate);\n                Assert.AreEqual(format.AverageBytesPerSecond, averageBytesPerSecond);\n                Assert.AreEqual(format.BlockAlign, blockAlign);\n                Assert.AreEqual(format.BitsPerSample, bitsPerSample);\n                Assert.AreEqual(0, zero);\n            }\n\n            var data = content.Data;\n            Assert.NotNull(data);\n            Assert.AreEqual(631940, data.Count);\n\n            // Seems like XNA just let the Data property throw\n            // an exception after it has been disposed.\n            content.Dispose();\n            Assert.Throws<InvalidContentException>(() => { var temp = content.Data; });\n        }\n\n        [Test]\n        public void Mp3File()\n        {\n            var content = new AudioContent(@\"Assets/Audio/rock_loop_stereo.mp3\", AudioFileType.Mp3);\n            Assert.AreEqual(@\"Assets/Audio/rock_loop_stereo.mp3\", content.FileName);\n            Assert.AreEqual(AudioFileType.Mp3, content.FileType);\n            Assert.IsNull(content.Identity);\n            Assert.AreEqual(0, content.LoopStart);\n            Assert.AreEqual(0, content.LoopLength);\n            Assert.AreEqual(79930000, content.Duration.Ticks);\n\n            var format = content.Format;\n            Assert.IsNotNull(format);\n            Assert.AreEqual(1, format.Format);\n            Assert.AreEqual(2, format.ChannelCount);\n            Assert.AreEqual(44100, format.SampleRate);\n            Assert.AreEqual(176400, format.AverageBytesPerSecond);\n            Assert.AreEqual(4, format.BlockAlign);\n            Assert.AreEqual(16, format.BitsPerSample);\n\n            Assert.IsNotNull(format.NativeWaveFormat);\n            Assert.AreEqual(18, format.NativeWaveFormat.Count);\n            using (var reader = new BinaryReader(new MemoryStream(format.NativeWaveFormat.ToArray())))\n            {\n                var formatType = reader.ReadInt16();\n                var channels = reader.ReadInt16();\n                var sampleRate = reader.ReadInt32();\n                var averageBytesPerSecond = reader.ReadInt32();\n                var blockAlign = reader.ReadInt16();\n                var bitsPerSample = reader.ReadInt16();\n                var zero = reader.ReadInt16();\n\n                Assert.AreEqual(format.Format, formatType);\n                Assert.AreEqual(format.ChannelCount, channels);\n                Assert.AreEqual(format.SampleRate, sampleRate);\n                Assert.AreEqual(format.AverageBytesPerSecond, averageBytesPerSecond);\n                Assert.AreEqual(format.BlockAlign, blockAlign);\n                Assert.AreEqual(format.BitsPerSample, bitsPerSample);\n                Assert.AreEqual(0, zero);\n            }\n\n            // For MP3 it seems the data is never availble.\n            Assert.Throws<InvalidContentException>(() => { var data = content.Data; });\n\n            // Seems like XNA just let the Data property throw\n            // an exception after it has been disposed.\n            content.Dispose();\n            Assert.Throws<InvalidContentException>(() => { var temp = content.Data; });\n        }\n\n        [Test]\n        public void WmaFile()\n        {\n            var content = new AudioContent(@\"Assets/Audio/rock_loop_stereo.wma\", AudioFileType.Wma);\n            Assert.AreEqual(@\"Assets/Audio/rock_loop_stereo.wma\", content.FileName);\n            Assert.AreEqual(AudioFileType.Wma, content.FileType);\n            Assert.IsNull(content.Identity);\n            Assert.AreEqual(0, content.LoopStart);\n            Assert.AreEqual(0, content.LoopLength);\n            Assert.AreEqual(99430000, content.Duration.Ticks);\n\n            var format = content.Format;\n            Assert.IsNotNull(format);\n            Assert.AreEqual(1, format.Format);\n            Assert.AreEqual(2, format.ChannelCount);\n            Assert.AreEqual(44100, format.SampleRate);\n            Assert.AreEqual(176400, format.AverageBytesPerSecond);\n            Assert.AreEqual(4, format.BlockAlign);\n            Assert.AreEqual(16, format.BitsPerSample);\n\n            Assert.IsNotNull(format.NativeWaveFormat);\n            Assert.AreEqual(18, format.NativeWaveFormat.Count);\n            using (var reader = new BinaryReader(new MemoryStream(format.NativeWaveFormat.ToArray())))\n            {\n                var formatType = reader.ReadInt16();\n                var channels = reader.ReadInt16();\n                var sampleRate = reader.ReadInt32();\n                var averageBytesPerSecond = reader.ReadInt32();\n                var blockAlign = reader.ReadInt16();\n                var bitsPerSample = reader.ReadInt16();\n                var zero = reader.ReadInt16();\n\n                Assert.AreEqual(format.Format, formatType);\n                Assert.AreEqual(format.ChannelCount, channels);\n                Assert.AreEqual(format.SampleRate, sampleRate);\n                Assert.AreEqual(format.AverageBytesPerSecond, averageBytesPerSecond);\n                Assert.AreEqual(format.BlockAlign, blockAlign);\n                Assert.AreEqual(format.BitsPerSample, bitsPerSample);\n                Assert.AreEqual(0, zero);\n            }\n\n            // For WMA it seems the data is never availble.\n            Assert.Throws<InvalidContentException>(() => { var data = content.Data; });\n\n            // Seems like XNA just let the Data property throw\n            // an exception after it has been disposed.\n            content.Dispose();\n            Assert.Throws<InvalidContentException>(() => { var temp = content.Data; });\n        }\n\n        private static int ToWavFormat(ConversionFormat format, int bitsPerSample)\n        {\n            switch (format)\n            {\n                case ConversionFormat.Pcm:\n                    if (bitsPerSample == 32)\n                        return 3;\n                    return 1;\n                case ConversionFormat.Adpcm:\n                    return 2;\n                case ConversionFormat.WindowsMedia:\n                case ConversionFormat.Xma:\n                default:\n                    throw new ArgumentOutOfRangeException(\"format\");\n            }\n        }\n\n        // 8bit PCM Mono -> PCM\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 44100, 44100, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 33075, 33075, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 1, 22050, 22050, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 22050, 22050, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 16537, 16537, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 1, 11025, 11025, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 11025, 11025, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 8268, 8268, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 1, 8000, 8000, 8, 1)]\n\n        // 8bit PCM Mono -> ADPCM\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 24104, 44077, 4, 70)]\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 24104, 44077, 4, 70)]\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 12073, 22078, 4, 70)]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 12073, 22077, 4, 70)]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 12073, 22077, 4, 70)]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 6036, 11039, 4, 70)]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 6036, 11039, 4, 70)]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 6036, 11039, 4, 70)]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 4386, 8021, 4, 70)]\n\n        // 16bit PCM Mono -> PCM\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 88200, 44100, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 66150, 33075, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 1, 44100, 22050, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 44100, 22050, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 33074, 16537, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 1, 22050, 11025, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 22050, 11025, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 16536, 8268, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 1, 16000, 8000, 16, 2)]\n\n        // 16bit PCM Stereo -> PCM\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 2, 176400, 44100, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 2, 132300, 33075, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 2, 88200, 22050, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 2, 88200, 22050, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 2, 66148, 16537, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 2, 44100, 11025, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 2, 44100, 11025, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", ConversionFormat.Pcm, ConversionQuality.Medium, 2, 33072, 8268, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", ConversionFormat.Pcm, ConversionQuality.Low, 2, 32000, 8000, 16, 4)]\n\n        // 16bit PCM Mono -> ADPCM\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 24121, 44108, 4, 70)]\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 24121, 44108, 4, 70)]\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 12055, 22045, 4, 70)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 12055, 22045, 4, 70)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 12055, 22045, 4, 70)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 6027, 11022, 4, 70)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 6027, 11022, 4, 70)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 6027, 11022, 4, 70)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 4376, 8003, 4, 70)]\n\n        // 16bit PCM Stereo -> ADPCM \n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 2, 48240, 44106, 4, 140)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 48240, 44106, 4, 140)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 24120, 22053, 4, 140)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 2, 24120, 22053, 4, 140)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 24120, 22053, 4, 140)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 12059, 11026, 4, 140)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Best, 2, 12059, 11026, 4, 140)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 12059, 11026, 4, 140)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 8744, 7995, 4, 140)]\n\n        // 32bit IEEE Float PCM Mono\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_float.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 176400, 44100, 32, 4)]\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_float.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 44100, 44100, 4, 70)]\n\n        // 32bit IEEE Float PCM Stereo\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_float.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 2, 352800, 44100, 32, 8)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_float.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 44100, 44100, 4, 140)]\n\n#if XNA\n        // XNA passes 24-bit through as 24-bit in high quality, but cannot convert 24-bit to ADPCM\n        // 24bit PCM Mono\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_24bit.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 132300, 44100, 24, 3)]\n\n        // 24bit PCM Stereo\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_24bit.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 2, 264600, 44100, 24, 6)]\n#else\n        // MonoGame converts 24-bit sounds to 16-bit\n        // 24bit PCM Mono\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_24bit.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 1, 88200, 44100, 16, 2)]\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_24bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 44100, 44100, 4, 70)]\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_24bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 44100, 44100, 4, 70)]\n\n        // 24bit PCM Stereo\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_24bit.wav\", ConversionFormat.Pcm, ConversionQuality.Best, 2, 176400, 44100, 16, 4)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_24bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 44100, 44100, 4, 140)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_24bit.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 44100, 44100, 4, 140)]\n\n        // XNA cannot convert 32-bit float to low quality ADPCM, so include these tests here\n        // 32bit IEEE Float PCM Mono\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_float.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 44100, 44100, 4, 70)]\n\n        // 32bit IEEE Float PCM Stereo\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_float.wav\", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 44100, 44100, 4, 140)]\n#endif\n\n        public void ConvertAudio(string sourceFile, ConversionFormat format, ConversionQuality quality, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign)\n        {\n            var content = new AudioContent(sourceFile, AudioFileType.Wav);\n            content.ConvertFormat(format, quality, null);\n\n            Assert.AreEqual(ToWavFormat(format, content.Format.BitsPerSample), content.Format.Format);\n            Assert.AreEqual(channels, content.Format.ChannelCount);\n            Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample);\n\n            // TODO: We don't quite match right with XNA on these.\n            // We should look to fix this for 100% compatibility.\n            if (format != ConversionFormat.Adpcm)\n            {\n                Assert.AreEqual(sampleRate, content.Format.SampleRate);\n                Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond);\n                Assert.AreEqual(blockAlign, content.Format.BlockAlign);\n            }\n\n            content.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/BitmapContentTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class BitmapContentTests\n    {\n        // Needed to copy from an array of struct to a byte array\n        static byte[] ToByteArray<T>(T[] source) where T : struct\n        {\n            GCHandle handle = GCHandle.Alloc(source, GCHandleType.Pinned);\n            try\n            {\n                IntPtr pointer = handle.AddrOfPinnedObject();\n                byte[] destination = new byte[source.Length * Marshal.SizeOf(typeof(T))];\n                Marshal.Copy(pointer, destination, 0, destination.Length);\n                return destination;\n            }\n            finally\n            {\n                if (handle.IsAllocated)\n                    handle.Free();\n            }\n        }\n\n        static void Fill<T>(PixelBitmapContent<T> content, T color)\n            where T : struct, IEquatable<T>\n        {\n            var src = Enumerable.Repeat(color, content.Width * content.Height).ToArray();\n            var dest = ToByteArray(src);\n            content.SetPixelData(dest);\n        }\n\n        void BitmapCopyFullNoResize<T>(T color1)\n            where T: struct, IEquatable<T>\n        {\n            var b1 = new PixelBitmapContent<T>(8, 8);\n            Fill(b1, color1);\n            var b2 = new PixelBitmapContent<T>(8, 8);\n            BitmapContent.Copy(b1, b2);\n\n            for (var y = 0; y < b2.Height; y++)\n                for (var x = 0; x < b2.Width; x++)\n                    Assert.AreEqual(color1, b2.GetPixel(x, y));\n        }\n\n        void BitmapCopyFullResize<T>(T color1, IEqualityComparer<T> comparer)\n            where T : struct, IEquatable<T>\n        {\n            var b1 = new PixelBitmapContent<T>(8, 8);\n            Fill(b1, color1);\n            var b2 = new PixelBitmapContent<T>(4, 4);\n            BitmapContent.Copy(b1, b2);\n\n            for (var y = 0; y < b2.Height; y++)\n                for (var x = 0; x < b2.Width; x++)\n                    Assert.That(color1, Is.EqualTo(b2.GetPixel(x, y)).Using(comparer));\n        }\n\n        void BitmapConvertFullNoResize<T, U>(T color1, U color2)\n            where T : struct, IEquatable<T>\n            where U: struct, IEquatable<U>\n        {\n            var b1 = new PixelBitmapContent<T>(8, 8);\n            Fill(b1, color1);\n            var b2 = new PixelBitmapContent<U>(8, 8);\n            BitmapContent.Copy(b1, b2);\n\n            for (var y = 0; y < b2.Height; y++)\n                for (var x = 0; x < b2.Width; x++)\n                    Assert.AreEqual(color2, b2.GetPixel(x, y));\n        }\n\n        void BitmapCompressFullNoResize<T>(T color1)\n            where T : struct, IEquatable<T>\n        {\n            var b1 = new PixelBitmapContent<T>(8, 8);\n            Fill(b1, color1);\n            var b2 = new Dxt1BitmapContent(8, 8);\n            BitmapContent.Copy(b1, b2);\n        }\n\n        void BitmapCompressFullResize<T>(T color1)\n            where T : struct, IEquatable<T>\n        {\n            var b1 = new PixelBitmapContent<T>(16, 16);\n            Fill(b1, color1);\n            var b2 = new Dxt1BitmapContent(8, 8);\n            BitmapContent.Copy(b1, b2);\n        }\n\n        void BitmapCopySameRegionNoResize<T>(T color1, T color2)\n            where T : struct, IEquatable<T>\n        {\n            var b1 = new PixelBitmapContent<T>(8, 8);\n            Fill(b1, color1);\n            var b2 = new PixelBitmapContent<T>(8, 8);\n            Fill(b2, color2);\n            BitmapContent.Copy(b1, new Rectangle(0, 0, 4, 4), b2, new Rectangle(0, 0, 4, 4));\n\n            for (var y = 0; y < b2.Height; y++)\n                for (var x = 0; x < b2.Width; x++)\n                    Assert.AreEqual(x < 4 && y < 4 ? color1 : color2, b2.GetPixel(x, y));\n        }\n\n        void BitmapCopyMoveRegionNoResize<T>(T color1, T color2)\n            where T : struct, IEquatable<T>\n        {\n            var b1 = new PixelBitmapContent<T>(8, 8);\n            Fill(b1, color1);\n            var b2 = new PixelBitmapContent<T>(8, 8);\n            Fill(b2, color2);\n            BitmapContent.Copy(b1, new Rectangle(0, 0, 4, 4), b2, new Rectangle(4, 4, 4, 4));\n\n            for (var y = 0; y < b2.Height; y++)\n                for (var x = 0; x < b2.Width; x++)\n                    Assert.AreEqual(x >= 4 && y >= 4 ? color1 : color2, b2.GetPixel(x, y));\n        }\n\n        void BitmapCopyRegionResize<T>(T color1, T color2, IEqualityComparer<T> comparer)\n            where T : struct, IEquatable<T>\n        {\n            var b1 = new PixelBitmapContent<T>(8, 8);\n            Fill(b1, color1);\n            var b2 = new PixelBitmapContent<T>(8, 8);\n            Fill(b2, color2);\n            BitmapContent.Copy(b1, new Rectangle(0, 0, 4, 4), b2, new Rectangle(0, 0, 3, 6));\n\n            for (var y = 0; y < b2.Height; y++)\n                for (var x = 0; x < b2.Width; x++)\n                    Assert.That(x < 3 && y < 6 ? color1 : color2, Is.EqualTo(b2.GetPixel(x, y)).Using(comparer));\n        }\n\n        [Test]\n        public void BitmapCopyFullNoResize()\n        {\n#if !XNA\n            BitmapCopyFullNoResize<byte>(56);\n#endif\n            BitmapCopyFullNoResize<float>(0.56f);\n            BitmapCopyFullNoResize<Color>(Color.Red);\n            BitmapCopyFullNoResize<Vector4>(new Vector4(1.0f, 0.0f, 0.0f, 1.0f));\n        }\n\n        [Test]\n        public void BitmapCopyFullResize()\n        {\n#if !XNA\n            BitmapCopyFullResize<byte>(56, ByteComparer.Equal);\n#endif\n            BitmapCopyFullResize<float>(0.56f, FloatComparer.Epsilon);\n            BitmapCopyFullResize<Color>(Color.Red, ColorComparer.Equal);\n            BitmapCopyFullResize<Vector4>(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), Vector4Comparer.Epsilon);\n        }\n\n        [Test]\n        public void BitmapConvertFullNoResize()\n        {\n#if !XNA\n            BitmapConvertFullNoResize<byte, Color>(byte.MaxValue, Color.Red);\n#endif\n            BitmapConvertFullNoResize<float, Color>(1.0f, Color.Red);\n            BitmapConvertFullNoResize<Color, Vector4>(Color.Red, new Vector4(1.0f, 0.0f, 0.0f, 1.0f));\n            BitmapConvertFullNoResize<Vector4, Color>(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), Color.Red);\n        }\n\n        [Test]\n        public void BitmapCompressFullNoResize()\n        {\n#if !XNA\n            BitmapCompressFullNoResize<byte>(56);\n#endif\n            BitmapCompressFullNoResize<float>(0.56f);\n            BitmapCompressFullNoResize<Color>(Color.Red);\n            BitmapCompressFullNoResize<Vector4>(new Vector4(1.0f, 0.0f, 0.0f, 1.0f));\n        }\n\n        [Test]\n        public void BitmapCompressFullResize()\n        {\n#if !XNA\n            BitmapCompressFullResize<byte>(56);\n#endif\n            BitmapCompressFullResize<float>(0.56f);\n            BitmapCompressFullResize<Color>(Color.Red);\n            BitmapCompressFullResize<Vector4>(new Vector4(1.0f, 0.0f, 0.0f, 1.0f));\n        }\n\n        static BitmapContent BitmapConvert(Type bitmapType, Color color, int w, int h)\n        {\n            var b1 = new PixelBitmapContent<Color>(w, h);\n            Fill(b1, color);\n            var b2 = (BitmapContent)Activator.CreateInstance(bitmapType, b1.Width, b1.Height);\n            BitmapContent.Copy(b1, b2);\n            return b2;\n        }\n\n        static void BitmapAssert(BitmapContent bitmap, Color color, int range)\n        {\n            byte[] rgba;\n            if (bitmap is Dxt1BitmapContent)\n                rgba = DxtDecoder.DecompressDxt1(bitmap.GetPixelData(), bitmap.Width, bitmap.Height);\n            else if (bitmap is Dxt3BitmapContent)\n                rgba = DxtDecoder.DecompressDxt3(bitmap.GetPixelData(), bitmap.Width, bitmap.Height);\n            else if (bitmap is Dxt5BitmapContent)\n                rgba = DxtDecoder.DecompressDxt5(bitmap.GetPixelData(), bitmap.Width, bitmap.Height);\n            else\n                rgba = bitmap.GetPixelData();\n\n            for (var p = 0; p < rgba.Length; p += 4)\n            {\n                Assert.That(rgba[p + 0], Is.EqualTo(color.R).Within(range));\n                Assert.That(rgba[p + 1], Is.EqualTo(color.G).Within(range));\n                Assert.That(rgba[p + 2], Is.EqualTo(color.B).Within(range));\n                Assert.That(rgba[p + 3], Is.EqualTo(color.A).Within(range));\n            }\n        }\n\n        static void BitmapConvertAssert(Type bitmapType, Color color, int w, int h, int range)\n        {\n            var b = BitmapConvert(bitmapType, color, w, h);\n            BitmapAssert(b, color, range);\n        }\n\n        static void BitmapConvertAssert(Type bitmapType, Color color, int w, int h, Color compare, int range)\n        {\n            var b = BitmapConvert(bitmapType, color, w, h);\n            BitmapAssert(b, compare, range);\n        }\n\n        [Test]\n        public void BitmapCompress()\n        {\n            var Transparent = new Color(0, 0, 0, 0);\n            var Grey16Premult = new Color(16, 16, 16, 16);\n            BitmapConvertAssert(typeof(Dxt1BitmapContent), Color.Red, 64, 64, 0);\n            BitmapConvertAssert(typeof(Dxt1BitmapContent), Color.Green, 32, 34, 2);\n            BitmapConvertAssert(typeof(Dxt1BitmapContent), Color.Blue, 8, 9, 0);\n            BitmapConvertAssert(typeof(Dxt1BitmapContent), Transparent, 16, 16, 0);\n            //BitmapConvertAssert(typeof(Dxt1BitmapContent), Grey16Premult, 16, 16, Transparent, 0);\n            BitmapConvertAssert(typeof(Dxt3BitmapContent), Color.Red, 64, 64, 0);\n            BitmapConvertAssert(typeof(Dxt3BitmapContent), Color.Green, 32, 34, 2);\n            BitmapConvertAssert(typeof(Dxt3BitmapContent), Color.Blue, 8, 9, 0);\n            BitmapConvertAssert(typeof(Dxt3BitmapContent), Transparent, 16, 16, 0);\n            BitmapConvertAssert(typeof(Dxt3BitmapContent), Grey16Premult, 16, 16, Grey16Premult, 1);\n            BitmapConvertAssert(typeof(Dxt5BitmapContent), Color.Red, 64, 64, 0);\n            BitmapConvertAssert(typeof(Dxt5BitmapContent), Color.Green, 32, 34, 2);\n            BitmapConvertAssert(typeof(Dxt5BitmapContent), Color.Blue, 8, 9, 0);\n            BitmapConvertAssert(typeof(Dxt5BitmapContent), Transparent, 16, 16, 0);\n            BitmapConvertAssert(typeof(Dxt5BitmapContent), Grey16Premult, 16, 16, Grey16Premult, 0);\n        }\n\n        [Test]\n        public void BitmapCopySameRegionNoResize()\n        {\n#if !XNA\n            BitmapCopySameRegionNoResize<byte>(56, 48);\n#endif\n            BitmapCopySameRegionNoResize<float>(0.56f, 0.48f);\n            BitmapCopySameRegionNoResize<Color>(Color.Red, Color.Blue);\n            BitmapCopySameRegionNoResize<Vector4>(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f));\n        }\n\n        [Test]\n        public void BitmapCopyMoveRegionNoResize()\n        {\n#if !XNA\n            BitmapCopyMoveRegionNoResize<byte>(56, 48);\n#endif\n            BitmapCopyMoveRegionNoResize<float>(0.56f, 0.48f);\n            BitmapCopyMoveRegionNoResize<Color>(Color.Red, Color.Blue);\n            BitmapCopyMoveRegionNoResize<Vector4>(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f));\n        }\n\n        [Test]\n        public void BitmapCopyRegionResize()\n        {\n#if !XNA\n            BitmapCopyRegionResize<byte>(56, 48, ByteComparer.Equal);\n#endif\n            BitmapCopyRegionResize<float>(0.56f, 0.48f, FloatComparer.Epsilon);\n            BitmapCopyRegionResize<Color>(Color.Red, Color.Blue, ColorComparer.Equal);\n            BitmapCopyRegionResize<Vector4>(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), Vector4Comparer.Epsilon);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/BuilderTargetsTest.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Text;\nusing System.Diagnostics;\nusing NUnit.Framework;\nnamespace Kni.Tests.ContentPipeline\n{\n    [TestFixture]\n    public class BuilderTargetsTest\n    {\n        string[] msBuildFolders = new string[]\n        {\n            Path.Combine (\"MSBuild\", \"15.0\", \"Bin\", \"MSBuild.exe\"),\n            Path.Combine (\"MSBuild\", \"14.0\", \"Bin\", \"MSBuild.exe\"),\n        };\n        string FindBuildTool(string buildTool)\n        {\n            if (Environment.OSVersion.Platform == PlatformID.Win32NT && buildTool == \"msbuild\")\n            {\n                var programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);\n                foreach (var path in msBuildFolders)\n                {\n                    if (File.Exists(Path.Combine(programFiles, path)))\n                        return Path.Combine(programFiles, path);\n                }\n            }\n            return buildTool;\n        }\n        bool RunBuild(string buildTool, string projectFile, params string[] parameters)\n        {\n            var root = Path.GetDirectoryName(typeof(BuilderTargetsTest).Assembly.Location);\n            var psi = new ProcessStartInfo(FindBuildTool(buildTool))\n            {\n                Arguments = projectFile + \" /t:BuildContent \" + string.Join(\" \", parameters) + \" /noconsolelogger \\\"/flp1:LogFile=build.log;Encoding=UTF-8;Verbosity=Diagnostic\\\"\",\n                WorkingDirectory = root,\n                UseShellExecute = true,\n            };\n            using (var process = Process.Start(psi))\n            {\n                process.WaitForExit();\n                return process.ExitCode == 0;\n            }\n        }\n\n        static object[] BuilderTargetsBuildTools = new object[] {\n            \"msbuild\",\n            \"xbuild\",\n        };\n\n        [Test]\n        [TestCaseSource(\"BuilderTargetsBuildTools\")]\n//TNC: re-enable content pipeline tests for NET.Framework\n//        [Ignore(\"This test need to be rewritten to properly test Tools\\\\MonoGame.Content.Builder instead of the old builder targets.\")]\n        public void BuildSimpleProject(string buildTool)\n        {\n            if (buildTool == \"xbuild\" && Environment.OSVersion.Platform == PlatformID.Win32NT)\n                Assert.Ignore(\"Skipping xbuild tests on windows\");\n\n            var root = Path.GetDirectoryName(typeof(BuilderTargetsTest).Assembly.Location);\n            var outputPath = Path.Combine(root, \"Assets\", \"Projects\", \"Content\", \"bin\");\n            if (Directory.Exists(outputPath))\n                Directory.Delete(outputPath, recursive: true);\n\n            var result = RunBuild(buildTool, Path.Combine(\"Assets\", \"Projects\", \"BuildSimpleProject.csproj\"), new string[] {\n                \"/p:MonoGameContentBuilderExe=\" + Path.Combine(root, \"MGCB.exe\")\n            });\n            Assert.AreEqual(true, result, \"Content Build should have succeeded.\");\n            var contentFont = Path.Combine(outputPath, \"DesktopGL\", \"Content\", \"ContentFont.xnb\");\n            Assert.IsTrue(File.Exists(contentFont), \"'\" + contentFont + \"' should exist.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/ContentCompilerTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n#if XNA\nusing System.Reflection;\n#endif\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class ContentCompilerTest\n    {\n        class TestDataClass : IEquatable<TestDataClass>\n        {\n            public int A;\n            public string B { get; set; }\n\n            public bool Equals(TestDataClass other)\n            {\n                return A == other.A\n                    && B == other.B;\n            }\n\n            public override bool Equals(object obj)\n            {\n                if (obj is TestDataClass)\n                    return Equals(other: (TestDataClass)obj);\n                else\n                    return base.Equals(obj);\n            }\n\n            public override int GetHashCode()\n            {\n                return A.GetHashCode() ^ B.GetHashCode();\n            }\n        }\n        struct TestDataStruct : IEquatable<TestDataStruct>\n        {\n            public int A;\n            public string B { get; set; }\n\n            public bool Equals(TestDataStruct other)\n            {\n                return A == other.A\n                    && B == other.B;\n            }\n\n            public override bool Equals(object obj)\n            {\n                if (obj is TestDataStruct)\n                    return Equals(other: (TestDataStruct)obj);\n                else\n                    return base.Equals(obj);\n            }\n\n            public override int GetHashCode()\n            {\n                return A.GetHashCode() ^ B.GetHashCode();\n            }\n        }\n        class TestDataContainer\n        {\n            public Microsoft.Xna.Framework.Rectangle[,] Array2D { get; set; }\n            public Microsoft.Xna.Framework.Rectangle[,,] Array3D { get; set; }\n\n            public TestDataContainer DeepClone()\n            {\n                return new TestDataContainer\n                {\n                    Array2D = (Microsoft.Xna.Framework.Rectangle[,])Array2D.Clone(),\n                    Array3D = (Microsoft.Xna.Framework.Rectangle[,,])Array3D.Clone()\n                };\n            }\n        }\n\n        [Test]\n        public void RoundTripJaggedArrayClass()\n        {\n            var expected = Enumerable.Range(0, 5).Select(a => Enumerable.Range(0, 3).Select(b => new TestDataClass { A = a * 42 << b, B = \"index: \" + a * 5 + b }).ToArray()).ToArray();\n\n            TestCompiler.CompileAndLoadAssets(expected.ToArray(), result =>\n            {\n                Assert.IsNotNull(result);\n                Assert.IsInstanceOf<TestDataClass[][]>(result);\n                Assert.AreEqual(1, result.Rank);\n                Assert.AreEqual(expected.Length, result.Length);\n                for (int i = 0; i < expected.Length; i++)\n                    CollectionAssert.AreEquivalent(expected[i], result[i]);\n            });\n\n        }\n\n        [Test]\n        public void RoundTrip1DArrayClass()\n        {\n            var expected = Enumerable.Range(0, 10).Select(i => new TestDataClass { A = i * 42, B = \"index: \" + i }).ToArray();\n\n            TestCompiler.CompileAndLoadAssets(expected.ToArray(), result =>\n            {\n                Assert.IsNotNull(result);\n                Assert.IsInstanceOf<TestDataClass[]>(result);\n                Assert.AreEqual(1, result.Rank);\n                Assert.AreEqual(expected.Length, result.Length);\n                CollectionAssert.AreEquivalent(expected, result);\n            });\n\n        }\n\n        [Test]\n        public void RoundTrip3DArrayClass()\n        {\n            var expected = new TestDataClass[3, 4, 2];\n            for (int z = 0; z < expected.GetLength(2); z++)\n                for (int y = 0; y < expected.GetLength(1); y++)\n                    for (int x = 0; x < expected.GetLength(0); x++)\n                        expected[x, y, z] = new TestDataClass { A = x + y * 10 + z * 100, B = string.Format(\"X: {0} Y: {1} Z: {2}\", x, y, z) };\n\n            TestCompiler.CompileAndLoadAssets((TestDataClass[,,])expected.Clone(), result =>\n            {\n                Assert.IsNotNull(result);\n                Assert.IsInstanceOf<TestDataClass[,,]>(result);\n                Assert.AreEqual(result.Rank, 3);\n\n                for (int i = 0; i < result.Rank; i++)\n                    Assert.AreEqual(expected.GetLength(i), result.GetLength(i));\n\n                for (int z = 0; z < expected.GetLength(2); z++)\n                    for (int y = 0; y < expected.GetLength(1); y++)\n                        for (int x = 0; x < expected.GetLength(0); x++)\n                            Assert.AreEqual(expected[x, y, z], result[x, y, z]);\n            });\n        }\n\n        [Test]\n        public void RoundTripArrayContainer()\n        {\n            var expected = new TestDataContainer\n            {\n                Array2D = new Microsoft.Xna.Framework.Rectangle[3, 2],\n                Array3D = new Microsoft.Xna.Framework.Rectangle[3, 4, 2]\n            };\n            for (int y = 0; y < expected.Array2D.GetLength(1); y++)\n                for (int x = 0; x < expected.Array2D.GetLength(0); x++)\n                    expected.Array2D[x, y] = new Microsoft.Xna.Framework.Rectangle(x, y, -x, -y);\n\n            for (int z = 0; z < expected.Array3D.GetLength(2); z++)\n                for (int y = 0; y < expected.Array3D.GetLength(1); y++)\n                    for (int x = 0; x < expected.Array3D.GetLength(0); x++)\n                        expected.Array3D[x, y, z] = new Microsoft.Xna.Framework.Rectangle(x, y, z, -z);\n\n            TestCompiler.CompileAndLoadAssets(expected.DeepClone(), result =>\n            {\n                Assert.IsNotNull(result.Array3D);\n                Assert.IsInstanceOf<Microsoft.Xna.Framework.Rectangle[,,]>(result.Array3D);\n                Assert.AreEqual(result.Array3D.Rank, 3);\n\n                for (int i = 0; i < result.Array3D.Rank; i++)\n                    Assert.AreEqual(expected.Array3D.GetLength(i), result.Array3D.GetLength(i));\n\n                for (int z = 0; z < expected.Array3D.GetLength(2); z++)\n                    for (int y = 0; y < expected.Array3D.GetLength(1); y++)\n                        for (int x = 0; x < expected.Array3D.GetLength(0); x++)\n                            Assert.AreEqual(expected.Array3D[x, y, z], result.Array3D[x, y, z]);\n\n                Assert.IsNotNull(result.Array2D);\n                Assert.IsInstanceOf<Microsoft.Xna.Framework.Rectangle[,]>(result.Array2D);\n                Assert.AreEqual(result.Array2D.Rank, 2);\n\n                for (int i = 0; i < result.Array2D.Rank; i++)\n                    Assert.AreEqual(expected.Array2D.GetLength(i), result.Array2D.GetLength(i));\n\n                for (int y = 0; y < expected.Array2D.GetLength(1); y++)\n                    for (int x = 0; x < expected.Array2D.GetLength(0); x++)\n                        Assert.AreEqual(expected.Array2D[x, y], result.Array2D[x, y]);\n            });\n        }\n\n        [Test]\n        public void RoundTrip1DArrayStruct()\n        {\n            var expected = Enumerable.Range(0, 10).Select(i => new TestDataStruct { A = i * 42, B = \"index: \" + i }).ToArray();\n\n            TestCompiler.CompileAndLoadAssets(expected.ToArray(), result =>\n            {\n                Assert.IsInstanceOf<TestDataStruct[]>(result);\n                Assert.AreEqual(1, result.Rank);\n                Assert.AreEqual(expected.Length, result.Length);\n                CollectionAssert.AreEquivalent(expected, result);\n            });\n\n        }\n\n        [Test]\n        public void RoundTrip3DArrayStruct()\n        {\n            var expected = new TestDataStruct[3, 4, 2];\n            for (int z = 0; z < expected.GetLength(2); z++)\n                for (int y = 0; y < expected.GetLength(1); y++)\n                    for (int x = 0; x < expected.GetLength(0); x++)\n                        expected[x, y, z] = new TestDataStruct { A = x + y * 10 + z * 100, B = string.Format(\"X: {0} Y: {1} Z: {2}\", x, y, z) };\n\n            TestCompiler.CompileAndLoadAssets((TestDataStruct[,,])expected.Clone(), result =>\n            {\n                Assert.IsInstanceOf<TestDataStruct[,,]>(result);\n                Assert.AreEqual(result.Rank, 3);\n\n                for (int i = 0; i < result.Rank; i++)\n                    Assert.AreEqual(expected.GetLength(i), result.GetLength(i));\n\n                for (int z = 0; z < expected.GetLength(2); z++)\n                    for (int y = 0; y < expected.GetLength(1); y++)\n                        for (int x = 0; x < expected.GetLength(0); x++)\n                            Assert.AreEqual(expected[x, y, z], result[x, y, z]);\n            });\n        }\n\n        [Test]\n        public void ShouldSerializePropertyGivenNameOfItem()\n        {\n            var expected = new HasNoIndexer { Item = \"lorem-ipsum\" };\n\n            TestCompiler.CompileAndLoadAssets(expected, result =>\n            {\n                Assert.AreEqual(expected.Item, result.Item);\n            });\n        }\n\n        class HasNoIndexer\n        {\n            public string Item { get; set; }\n        }\n\n        [Test]\n        public void ShouldNotSerializePropertyGivenIndexer()\n        {\n            var expected = new HasIndexer();\n            expected[\"anything\"] = \"value\";\n\n            TestCompiler.CompileAndLoadAssets(expected, result =>\n            {\n                Assert.AreNotEqual(expected[\"anything\"], result[\"anything\"]);\n            });\n        }\n\n        class HasIndexer\n        {\n            readonly Dictionary<string, string> _dictionary = new Dictionary<string, string>();\n            public string this[string key]\n            {\n                get\n                { \n                    string value;\n                    return _dictionary.TryGetValue(key, out value) ? value : null;\n                }\n                set { _dictionary[key] = value; }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/EffectProcessorTests.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\nusing System.IO;\n#if DIRECTX\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n#endif\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class EffectProcessorTests\n    {\n        class ImporterContext : ContentImporterContext\n        {\n            public override string IntermediateDirectory\n            {\n                get { throw new NotImplementedException(); }\n            }\n\n            public override ContentBuildLogger Logger\n            {\n                get { throw new NotImplementedException(); }\n            }\n\n            public override string OutputDirectory\n            {\n                get { throw new NotImplementedException(); }\n            }\n\n            public override void AddDependency(string filename)\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n#if DIRECTX\n        [Test]\n        public void TestPreprocessor()\n        {\n            var filename = \"Assets/Effects/PreprocessorTest.fx\";\n            var effect = new EffectContent();\n            effect.Identity = new ContentIdentity(filename);\n            effect.Name = Path.GetFileNameWithoutExtension(filename);\n            effect.EffectCode = File.ReadAllText(filename);\n\n            string fullFilePath = Path.GetFullPath(effect.Identity.SourceFilename);\n\n\n            var processorContext = new TestProcessorContext(TargetPlatform.Windows, Path.ChangeExtension(filename, \".xnb\"));\n\n            // Preprocess.\n            Preprocessor pp = new Preprocessor(effect, processorContext, fullFilePath);\n            pp.AddMacro(\"TEST2\", \"1\");\n            var mgPreprocessed = pp.Preprocess();\n\n            Assert.That(processorContext._dependencies, Has.Count.EqualTo(1));\n            Assert.That(Path.GetFileName(processorContext._dependencies[0]), Is.EqualTo(\"PreprocessorInclude.fxh\"));\n\n            Assert.That(mgPreprocessed, Does.Not.Contain(\"Foo\"));\n            Assert.That(mgPreprocessed, Does.Contain(\"Bar\"));\n            Assert.That(mgPreprocessed, Does.Not.Contain(\"Baz\"));\n\n            Assert.That(mgPreprocessed, Does.Contain(\"FOO\"));\n            Assert.That(mgPreprocessed, Does.Not.Contain(\"BAR\"));\n\n            // Check that we can actually compile this file.\n            BuildEffect(filename, TargetPlatform.Windows);\n        }\n#endif\n\n        [Test]\n        [TestCase(\"Assets/Effects/ParserTest.fx\")]\n        public void TestParser(string effectFile)\n        {\n            BuildEffect(effectFile, TargetPlatform.Windows, optimize: false);\n        }\n\n        [Test]\n        public void TestDefines()\n        {\n            Assert.DoesNotThrow(() => BuildEffect(\"Assets/Effects/DefinesTest.fx\", TargetPlatform.Windows, optimize: false, \"MACRO_DEFINE_TEST=3\"));\n            Assert.Throws<InvalidContentException>(() =>\n                BuildEffect(\"Assets/Effects/DefinesTest.fx\", TargetPlatform.Windows, optimize: false, \"MACRO_DEFINE_TEST=4\"));\n            Assert.Throws<InvalidContentException>(() =>\n                BuildEffect(\"Assets/Effects/DefinesTest.fx\", TargetPlatform.Windows, optimize: false));\n            Assert.Throws<InvalidContentException>(() =>\n                BuildEffect(\"Assets/Effects/DefinesTest.fx\", TargetPlatform.Windows, optimize: false, \"INVALID_SYNTAX;ANOTHER_MACRO;MACRO_DEFINE_TEST=3\"));\n        }\n\n        [Test]\n        [TestCase(\"Assets/Effects/Stock/AlphaTestEffect.fx\", false)]\n        [TestCase(\"Assets/Effects/Stock/BasicEffect.fx\", true)]\n        [TestCase(\"Assets/Effects/Stock/DualTextureEffect.fx\", false)]\n        [TestCase(\"Assets/Effects/Stock/EnvironmentMapEffect.fx\", false)]\n        [TestCase(\"Assets/Effects/Stock/SkinnedEffect.fx\", true)]\n        [TestCase(\"Assets/Effects/Stock/SpriteEffect.fx\", false)]\n        public void BuildStockEffect(string effectFile, bool optimize)\n        {\n            BuildEffect(effectFile, TargetPlatform.Windows, optimize: optimize);\n        }\n\n        private void BuildEffect(string effectFile, TargetPlatform targetPlatform, bool optimize, string defines = null)\n        {\n            var importerContext = new ImporterContext();\n            var importer = new EffectImporter();\n            var input = importer.Import(effectFile, importerContext);\n\n            Assert.NotNull(input);\n\n            var processorContext = new TestProcessorContext(targetPlatform, Path.ChangeExtension(effectFile, \".xnb\"));\n            var processor = new EffectProcessor { Defines = defines };\n            if (optimize == true)\n                processor.DebugMode = EffectProcessorDebugMode.Optimize;\n            var output = processor.Process(input, processorContext);\n\n            Assert.NotNull(output);\n\n            // TODO: Should we test the writer?\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/FbxImporterTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing NUnit.Framework;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class FbxImporterTests\n    {\n\n        // XNA only supported up to the FBX 6.1.0 format\n        // where as we only support FBX 7.1.0 and newer\n        // via the Open Asset Importer.\n        //\n        //  - This is annoying for users porting old samples.\n        //  - Conversion could loose data from the original FBX.\n        //  - Do we care to resolve this in the future?\n        //\n#if XNA\n        const string DudeFbx = \"Assets/Models/Dude/dude.fbx\";\n#else\n        const string DudeFbx = \"Assets/Models/Dude/dude_2011.fbx\";\n#endif\n\n        [Test]\n        public void Arguments()\n        {\n            var context = new TestImporterContext(\"TestObj\", \"TestBin\");\n            var importer = new FbxImporter();\n\n            Assert.Throws<ArgumentNullException>(() => importer.Import(null, context));\n            Assert.Throws<FileNotFoundException>(() => importer.Import(\"does_not_exist\", context));\n\n            // XNA bug/omission:  crashes with a NullReferenceException \n            // where as we correctly throw a ArgumentNullException.\n#if XNA\n            Assert.Throws<NullReferenceException>(() => importer.Import(DudeFbx, null));\n#else\n            Assert.Throws<ArgumentNullException>(() => importer.Import(\"file\", null));\n#endif\n        }\n\n        [Test]\n        public void Dude()\n        {\n            var context = new TestImporterContext(\"TestObj\", \"TestBin\");\n            var importer = new FbxImporter();\n\n            var nodeContent = importer.Import(DudeFbx, context);\n\n            Assert.AreEqual(\"RootNode\", nodeContent.Name);\n            Assert.AreEqual(null, nodeContent.Parent);\n\n            Assert.AreEqual(0, nodeContent.Animations.Count);\n\n            Assert.AreEqual(Matrix.Identity, nodeContent.Transform);\n            Assert.AreEqual(Matrix.Identity, nodeContent.AbsoluteTransform);\n\n            Assert.NotNull(nodeContent.Identity);\n            Assert.NotNull(nodeContent.Identity.SourceFilename);\n            Assert.IsNull(nodeContent.Identity.FragmentIdentifier);\n            Assert.AreEqual(\"FbxImporter\", nodeContent.Identity.SourceTool);\n\n            Assert.AreEqual(2, nodeContent.Children.Count);\n\n\n            // MeshContent\n            Assert.IsInstanceOf<MeshContent>(nodeContent.Children[0]);\n            var meshContent = nodeContent.Children[0] as MeshContent;\n            Assert.AreEqual(\"him\", meshContent.Name);\n            Assert.AreEqual(nodeContent, meshContent.Parent);\n            Assert.AreEqual(0, meshContent.Children.Count);\n            Assert.AreEqual(0, meshContent.Animations.Count);\n            Assert.AreEqual(0, meshContent.OpaqueData.Count);\n            Assert.AreEqual(Matrix.Identity, meshContent.AbsoluteTransform);\n            Assert.AreEqual(Matrix.Identity, meshContent.Transform);\n            Assert.AreEqual(5, meshContent.Geometry.Count);\n\n            // TODO: MG returns more positions than XNA.\n            //\n            //  - Is this a bug in our FbxImporer?\n            //  - A limitation of AssImp?\n            //  - Conversion bug from FBX 6.1.0 to FBX 7.1.0?\n            //  - Are we missing some welding of verts?\n            //\n#if XNA\n            Assert.AreEqual(11433, meshContent.Positions.Count);\n#else\n            Assert.AreEqual(13126, meshContent.Positions.Count);\n#endif\n\n\n            // MaterialContent\n            var materials = new Dictionary<string, BasicMaterialContent>();\n            foreach (var g in meshContent.Geometry)\n            {\n                Assert.IsNull(g.Name);\n                //Assert.IsNull(g.Identity);\n                Assert.AreEqual(meshContent, g.Parent);\n                Assert.AreEqual(0, g.OpaqueData.Count);\n                Assert.Greater(g.Indices.Count, 0);\n                Assert.Greater(g.Vertices.VertexCount, 0);\n                Assert.Greater(g.Vertices.Positions.Count, 0);\n                Assert.Greater(g.Vertices.PositionIndices.Count, 0);\n\n                Assert.NotNull(g.Material);\n                Assert.IsInstanceOf<BasicMaterialContent>(g.Material);\n                Assert.NotNull(g.Material.Identity);\n                Assert.NotNull(g.Material.Identity.SourceFilename);\n                Assert.IsNull(g.Material.Identity.FragmentIdentifier);\n                Assert.AreEqual(\"FbxImporter\", g.Material.Identity.SourceTool);\n                Assert.NotNull(g.Material.Name);\n                Assert.IsFalse(materials.ContainsKey(g.Material.Name));\n                materials.Add(g.Material.Name, g.Material as BasicMaterialContent);\n            }\n\n            Assert.AreEqual(5, materials.Count);\n\n            foreach (var m in materials.Values)\n            {\n                Assert.AreEqual(1, m.Alpha);\n                Assert.AreEqual(new Vector3(0.0f, 0.0f, 0.0f), m.EmissiveColor);\n                Assert.AreEqual(new Vector3(0.5f, 0.5f, 0.5f), m.SpecularColor);\n                Assert.AreEqual(null, m.VertexColorEnabled);\n                Assert.AreEqual(3, m.Textures.Count);\n                Assert.AreEqual(m.Texture, m.Textures[\"Texture\"]);\n                Assert.IsNull(m.Textures[\"Texture\"].Name);\n                Assert.IsNull(m.Textures[\"Specular\"].Name);\n                Assert.IsNull(m.Textures[\"Bump\"].Name);\n                Assert.AreEqual(\"TextureCoordinate0\", m.Textures[\"Texture\"].OpaqueData[\"TextureCoordinate\"]);\n                Assert.AreEqual(\"TextureCoordinate0\", m.Textures[\"Specular\"].OpaqueData[\"TextureCoordinate\"]);\n                Assert.AreEqual(\"TextureCoordinate0\", m.Textures[\"Bump\"].OpaqueData[\"TextureCoordinate\"]);\n            }\n\n            Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), materials[\"character_anim:headM\"].DiffuseColor);\n            Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), materials[\"character_anim:jacketM\"].DiffuseColor);\n            Assert.AreEqual(new Vector3(0.8f, 0.8f, 0.8f), materials[\"character_anim:pantsM\"].DiffuseColor);\n            Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), materials[\"character_anim:upBodyM\"].DiffuseColor);\n            Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), materials[\"character_anim:eyeBallM\"].DiffuseColor);\n\n            Assert.AreEqual(1.24573088f, materials[\"character_anim:headM\"].SpecularPower, 0.00001f);\n            Assert.AreEqual(1.24573088f, materials[\"character_anim:jacketM\"].SpecularPower, 0.00001f);\n            Assert.AreEqual(1.24573088f, materials[\"character_anim:pantsM\"].SpecularPower, 0.00001f);\n            Assert.AreEqual(1.19371974f, materials[\"character_anim:upBodyM\"].SpecularPower, 0.00001f);\n            Assert.AreEqual(65.986f, materials[\"character_anim:eyeBallM\"].SpecularPower, 0.00001f);\n\n            Paths.AreEqual(@\"Assets/Models/Dude/head.tga\", materials[\"character_anim:headM\"].Textures[\"Texture\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/headS.tga\", materials[\"character_anim:headM\"].Textures[\"Specular\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/headN.tga\", materials[\"character_anim:headM\"].Textures[\"Bump\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/jacket.tga\", materials[\"character_anim:jacketM\"].Textures[\"Texture\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/jacketS.tga\", materials[\"character_anim:jacketM\"].Textures[\"Specular\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/jacketN.tga\", materials[\"character_anim:jacketM\"].Textures[\"Bump\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/pants.tga\", materials[\"character_anim:pantsM\"].Textures[\"Texture\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/pantsS.tga\", materials[\"character_anim:pantsM\"].Textures[\"Specular\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/pantsN.tga\", materials[\"character_anim:pantsM\"].Textures[\"Bump\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/upBodyC.tga\", materials[\"character_anim:upBodyM\"].Textures[\"Texture\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/upBodyS.tga\", materials[\"character_anim:upBodyM\"].Textures[\"Specular\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/upbodyN.tga\", materials[\"character_anim:upBodyM\"].Textures[\"Bump\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/upBodyC.tga\", materials[\"character_anim:eyeBallM\"].Textures[\"Texture\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/upBodyS.tga\", materials[\"character_anim:eyeBallM\"].Textures[\"Specular\"].Filename);\n            Paths.AreEqual(@\"Assets/Models/Dude/upbodyN.tga\", materials[\"character_anim:eyeBallM\"].Textures[\"Bump\"].Filename);\n\n            // BoneContent\n            Assert.IsInstanceOf<BoneContent>(nodeContent.Children[1]);\n            var bonehContent = nodeContent.Children[1] as BoneContent;\n            Assert.AreEqual(\"Root\", bonehContent.Name);\n            Assert.AreEqual(1, bonehContent.Children.Count);\n\n            // TODO: MG doesn't return this.  \n            //\n            //  - Is this a bug in our FbxImporer?\n            //  - A limitation of AssImp?\n            //  - Conversion bug from FBX 6.1.0 to FBX 7.1.0?\n            //  - What is \"liw\" and why is it false?\n            //  - Do we care about this incompatibility?\n            //\n#if XNA\n            Assert.AreEqual(1, bonehContent.OpaqueData.Count);\n            Assert.AreEqual(false, bonehContent.OpaqueData[\"liw\"]);\n#endif\n\n\n            // AnimationContent\n            Assert.AreEqual(1, bonehContent.Animations.Count);\n            Assert.IsTrue(bonehContent.Animations.ContainsKey(\"Take 001\"));\n            var animationContent = bonehContent.Animations[\"Take 001\"];\n            Assert.AreEqual(\"Take 001\", animationContent.Name);\n            Assert.AreEqual(0, animationContent.OpaqueData.Count);\n\n            // TODO: A few channels are missing from XNA:\n            //\n            //  - Is this a bug in our FbxImporer?\n            //  - A limitation of AssImp?\n            //  - Conversion bug from FBX 6.1.0 to FBX 7.1.0?\n            //  - Do these missing channels matter?\n            //\n#if XNA\n            Assert.AreEqual(58, animationContent.Channels.Count);\n#endif\n            var channels = new[] {\n                \"Pelvis\", \"Spine1\", \"Spine2\", \"Spine3\", \"Neck\", \"Head\", \"L_eye_joint1\", \"R_eye_joint\",\n                \"L_eyeBall_joint2\", \"R_eyeBall_joint\", \"L_UpperArm\", \"L_Forearm\", \"L_Hand\", \"L_Thumb1\",\n                \"L_Thumb2\", \"L_Thumb3\", \"L_Index1\", \"L_Index2\", \"L_Index3\", \"L_Middle1\", \"L_Middle2\", \"L_Middle3\",\n                \"L_Ring1\", \"L_Ring2\", \"L_Ring3\", \"L_Pinky1\", \"L_Pinky2\", \"L_Pinky3\", \"R_UpperArm\", \"R_Forearm\",\n                \"R_Hand\", \"R_Thumb1\", \"R_Thumb2\", \"R_Thumb3\", \"R_Index1\", \"R_Index2\", \"R_Index3\", \"R_Middle1\", \"R_Middle2\",\n                \"R_Middle3\", \"R_Ring1\", \"R_Ring2\", \"R_Ring3\", \"R_Pinky1\", \"R_Pinky2\", \"R_Pinky3\", \"L_Thigh1\", \"L_Knee2\",\n                \"L_Ankle1\", \"L_Ball\", \"R_Thigh\", \"R_Knee\", \"R_Ankle\", \"R_Ball\",\n\n                // TODO: These channels are missing in MG!\n#if XNA\n                \"Root\", \"Spine\", \"L_Clavicle\", \"R_Clavicle\",\n#endif\n            };\n            foreach (var name in channels)\n                Assert.IsTrue(animationContent.Channels.ContainsKey(name), \"Channels.ContainsKey failed: \" + name);\n            foreach (var c in animationContent.Channels.Values)\n                Assert.Greater(c.Count, 0);\n\n            // Looking at the content of the FBX ASCII I can see the math is:\n            // \n            //  (57732697500 - 1924423250) / 46186158000 = 1.2083333 seconds\n            //\n            // Which is the correct result and what our FBX importer returns.\n            // I highly suspect that XNA was wrong.\n            //\n            // https://github.com/assimp/assimp/issues/1720\n            //\n#if XNA\n            Assert.AreEqual(12670000, animationContent.Duration.Ticks);\n#else\n            Assert.AreEqual(12083333, animationContent.Duration.Ticks);\n#endif\n\n            // TODO: XNA assigns the identity to null on all NodeContent\n            // other than the one returned from the importer.\n            //\n            //  - Is this something we should fix?\n            //\n#if XNA\n            Assert.IsNull(meshContent.Identity);\n            Assert.IsNull(bonehContent.Identity);\n            Assert.IsNull(animationContent.Identity);\n#endif\n        }\n    }\n}"
  },
  {
    "path": "Tests/ContentPipeline/FontDescriptionProcessorTests.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Xml;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class FontDescriptionProcessorTests\n    {\n        static object[] textureFormats = new object[]\n        {\n            new object[]\n            {\n                TargetPlatform.DesktopGL,\n                TextureProcessorOutputFormat.Color,\n            },\n            new object[] \n            {\n                TargetPlatform.DesktopGL,\n                TextureProcessorOutputFormat.Color16Bit,\n            },\n            new object[]\n            {\n                TargetPlatform.DesktopGL,\n                TextureProcessorOutputFormat.Compressed,\n            },\n            new object[] \n            {\n                TargetPlatform.Android,\n                TextureProcessorOutputFormat.Etc1Compressed,\n            },\n            new object[] \n            {\n                TargetPlatform.iOS,\n                TextureProcessorOutputFormat.PvrCompressed,\n            },\n            new object[] \n            {\n                TargetPlatform.iOS,\n                TextureProcessorOutputFormat.Compressed,\n            },\n            new object[]\n            {\n                TargetPlatform.Android,\n                TextureProcessorOutputFormat.Compressed,\n            },\n            new object[]\n            {\n                TargetPlatform.Windows,\n                TextureProcessorOutputFormat.Compressed,\n            },\n        };\n\n        [Test]\n        [TestCaseSource(\"textureFormats\")]\n        public void BuildLocalizedFont(TargetPlatform platform, TextureProcessorOutputFormat format)\n        {\n            TestProcessorContext context = new TestProcessorContext(platform, \"Localized.xnb\");\n            LocalizedFontProcessor processor = new LocalizedFontProcessor();\n            processor.TextureFormat = format;\n            processor.PremultiplyAlpha = true;\n\n            LocalizedFontDescription fontDescription = null;\n            using (FileStream fs = File.OpenRead(Path.Combine(\"Assets\", \"Fonts\", \"Localized.spritefont\")))\n            using (XmlReader input = XmlReader.Create(new StreamReader(fs)))\n                fontDescription = IntermediateSerializer.Deserialize<LocalizedFontDescription>(input, \"\");\n            fontDescription.Identity = new ContentIdentity(\"Localized.spritefont\");\n\n            SpriteFontContent output = processor.Process(fontDescription, context);\n            Assert.IsNotNull(output, \"output should not be null\");\n            Assert.IsNotNull(output.Texture, \"output.Texture should not be null\");\n            Type textureType = output.Texture.Faces[0][0].GetType();\n            switch (format)\n            {\n                case TextureProcessorOutputFormat.Color:\n                    Assert.IsTrue(textureType == typeof(PixelBitmapContent<Color>));\n                    break;\n                case TextureProcessorOutputFormat.Color16Bit:\n                    Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgr565>));\n                    break;\n                case TextureProcessorOutputFormat.Compressed:\n                    switch (platform)\n                    {\n                        case TargetPlatform.Windows:\n                        case TargetPlatform.DesktopGL:\n                            Assert.IsTrue(textureType == typeof(Dxt3BitmapContent));\n                            break;\n                        case TargetPlatform.iOS:\n                            Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                            break;\n                        case TargetPlatform.Android:\n                            Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                            break;\n                    }\n                    break;\n                case TextureProcessorOutputFormat.PvrCompressed:\n                    // because the font is not power of 2 we should use Brga4444\n                    Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                    break;\n                case TextureProcessorOutputFormat.Etc1Compressed:\n                    // because the font has Alpha we should use Brga4444\n                    Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                    break;\n                default:\n                    Assert.Fail(\"Test not written for \" + format);\n                    break;\n            }\n        }\n\n        [Test]\n        [TestCaseSource(\"textureFormats\")]\n        public void BuildFontFromDescription(TargetPlatform platform, TextureProcessorOutputFormat format)\n        {\n            TestProcessorContext context = new TestProcessorContext(platform, \"Arial.xnb\");\n            FontDescriptionProcessor processor = new FontDescriptionProcessor();\n            processor.TextureFormat = format;\n            processor.PremultiplyAlpha = true;\n\n            FontDescription fontDescription = null;\n\n            using (XmlReader input = XmlReader.Create(new StringReader(ArialFont)))\n                fontDescription = IntermediateSerializer.Deserialize<FontDescription>(input, \"\");\n            fontDescription.Identity = new ContentIdentity(\"Arial.spritefont\");\n\n            SpriteFontContent output = processor.Process(fontDescription, context);\n            Assert.IsNotNull(output, \"output should not be null\");\n            Assert.IsNotNull(output.Texture, \"output.Texture should not be null\");\n            Type textureType = output.Texture.Faces[0][0].GetType();\n            switch (format)\n            {\n                case TextureProcessorOutputFormat.Color:\n                    Assert.IsTrue(textureType == typeof(PixelBitmapContent<Color>));\n                    break;\n                case TextureProcessorOutputFormat.Color16Bit:\n                    // because the font has Alpha we should use Brga4444\n                    Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                    break;\n                case TextureProcessorOutputFormat.Compressed:\n                    switch (platform)\n                    {\n                        case TargetPlatform.Windows:\n                        case TargetPlatform.DesktopGL:\n                            Assert.IsTrue(textureType == typeof(Dxt3BitmapContent));\n                            break;\n                        case TargetPlatform.iOS:\n                            Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                            break;\n                        case TargetPlatform.Android:\n                            Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                            break;\n                    }\n                    break;\n                case TextureProcessorOutputFormat.PvrCompressed:\n                    // because the font is not power of 2 we should use Brga4444\n                    Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                    break;\n                case TextureProcessorOutputFormat.Etc1Compressed:\n                    // because the font has Alpha we should use Brga4444\n                    Assert.IsTrue(textureType == typeof(PixelBitmapContent<Microsoft.Xna.Framework.Graphics.PackedVector.Bgra4444>));\n                    break;\n                default:\n                    Assert.Fail(\"Test not written for \" + format);\n                    break;\n            }\n        }\n\n        static string ArialFont = @\"<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\"?>\n<XnaContent xmlns:Graphics=\"\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\"\">\n  <Asset Type=\"\"Graphics:FontDescription\"\">\n    <FontName>Arial</FontName>\n    <Size>20</Size>\n    <Spacing>0</Spacing>\n    <UseKerning>true</UseKerning>\n    <Style>Bold</Style>\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#126;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n\";\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/FontDescriptionTests.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class FontDescriptionTests\n    {\n        [Test]\n        public void ValidateMembers()\n        {\n            {\n                var font = new FontDescription(\"FontName\", 12.34f, 5.67f);\n                Assert.NotNull(font.Characters);\n                Assert.AreEqual(0, font.Characters.Count);\n                Assert.IsNull(font.DefaultCharacter);\n                Assert.AreEqual(\"FontName\", font.FontName);\n                Assert.AreEqual(12.34f, font.Size);\n                Assert.AreEqual(5.67f, font.Spacing);\n                Assert.AreEqual(FontDescriptionStyle.Regular, font.Style);\n                Assert.AreEqual(false, font.UseKerning);\n                Assert.IsNull(font.Identity);\n                Assert.IsNull(font.Name);\n                Assert.NotNull(font.OpaqueData);\n                Assert.AreEqual(0, font.OpaqueData.Count);\n            }\n\n            {\n                var font = new FontDescription(\"FontName\", 12.34f, 5.67f, FontDescriptionStyle.Italic);\n                Assert.NotNull(font.Characters);\n                Assert.AreEqual(0, font.Characters.Count);\n                Assert.IsNull(font.DefaultCharacter);\n                Assert.AreEqual(\"FontName\", font.FontName);\n                Assert.AreEqual(12.34f, font.Size);\n                Assert.AreEqual(5.67f, font.Spacing);\n                Assert.AreEqual(FontDescriptionStyle.Italic, font.Style);\n                Assert.AreEqual(false, font.UseKerning);\n                Assert.IsNull(font.Identity);\n                Assert.IsNull(font.Name);\n                Assert.NotNull(font.OpaqueData);\n                Assert.AreEqual(0, font.OpaqueData.Count);\n            }\n\n            {\n                var font = new FontDescription(\"FontName\", 12.34f, 5.67f, FontDescriptionStyle.Bold, true);\n                Assert.NotNull(font.Characters);\n                Assert.AreEqual(0, font.Characters.Count);\n                Assert.IsNull(font.DefaultCharacter);\n                Assert.AreEqual(\"FontName\", font.FontName);\n                Assert.AreEqual(12.34f, font.Size);\n                Assert.AreEqual(5.67f, font.Spacing);\n                Assert.AreEqual(FontDescriptionStyle.Bold, font.Style);\n                Assert.AreEqual(true, font.UseKerning);\n                Assert.IsNull(font.Identity);\n                Assert.IsNull(font.Name);\n                Assert.NotNull(font.OpaqueData);\n                Assert.AreEqual(0, font.OpaqueData.Count);\n            }\n\n            Assert.Throws<ArgumentNullException>(() => new FontDescription(null, 1, 1));\n            Assert.Throws<ArgumentNullException>(() => new FontDescription(\"\", 1, 1));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new FontDescription(\"Aye\", 0, 1));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new FontDescription(\"Aye\", -1, 1));\n\n            {\n                var font = new FontDescription(\"Bee\", 1, 1);\n                \n                font.DefaultCharacter = 'A';\n                Assert.AreEqual('A', font.DefaultCharacter);\n                font.DefaultCharacter = null;\n                Assert.IsNull(font.DefaultCharacter);\n\n                font.FontName = \"See\";\n                Assert.AreEqual(\"See\", font.FontName);\n                Assert.Throws<ArgumentNullException>(() => font.FontName = null);\n                Assert.Throws<ArgumentNullException>(() => font.FontName = \"\");\n\n                font.Size = 2;\n                Assert.AreEqual(2, font.Size);\n                Assert.Throws<ArgumentOutOfRangeException>(() => font.Size = 0);\n                Assert.Throws<ArgumentOutOfRangeException>(() => font.Size = -1);\n\n                font.Spacing = 2;\n                Assert.AreEqual(2, font.Spacing);\n                font.Spacing = 0;\n                Assert.AreEqual(0, font.Spacing);\n                font.Spacing = -2;\n                Assert.AreEqual(-2, font.Spacing);\n\n                font.Style = FontDescriptionStyle.Italic;\n                Assert.AreEqual(FontDescriptionStyle.Italic, font.Style);\n\n                font.UseKerning = true;\n                Assert.AreEqual(true, font.UseKerning);\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/FontTextureProcessorTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class FontTextureProcessorTests\n    {\n        [Test]\n        public void ValidateDefaults()\n        {\n            var processor = new FontTextureProcessor();\n            Assert.AreEqual(' ', processor.FirstCharacter);\n            Assert.AreEqual(true, processor.PremultiplyAlpha);\n            Assert.AreEqual(TextureProcessorOutputFormat.Color, processor.TextureFormat);\n        }\n\n        [Test]\n        public void ColorConversion()\n        {\n            var context = new TestProcessorContext(TargetPlatform.Windows, \"dummy.xnb\");\n\n            var processor = new FontTextureProcessor\n            {\n                FirstCharacter = '0',\n                PremultiplyAlpha = false\n            };\n\n            var face = new PixelBitmapContent<Color>(32, 9);\n\n            var O = Color.Transparent.PackedValue;\n            var M = Color.Fuchsia.PackedValue;\n            var R = Color.Red.PackedValue;\n            var G = Color.Green.PackedValue;\n            var B = Color.Blue.PackedValue;\n            var W = Color.White.PackedValue;\n            var pixelData = new[]\n                {\n                    M, M, M, M, M, M, M, M,     M, M, M, M, M, M, M, M,     M, M, M, M, M, M, M, M,     M, M, M, M, M, M, M, M,\n                    M, O, O, O, O, O, O, M,     M, O, O, O, O, O, O, M,     M, O, O, O, O, O, O, M,     M, O, O, O, O, O, O, M,\n                    M, O, O, W, W, O, O, M,     M, O, O, O, R, O, O, M,     M, O, G, G, G, O, O, M,     M, O, B, B, B, B, O, M,\n                    M, O, W, O, O, W, O, M,     M, O, O, R, R, O, O, M,     M, O, O, O, O, G, O, M,     M, O, O, O, B, O, O, M,\n                    M, O, W, O, O, W, O, M,     M, O, O, O, R, O, O, M,     M, O, O, G, G, O, O, M,     M, O, O, B, B, O, O, M,\n                    M, O, W, O, O, W, O, M,     M, O, O, O, R, O, O, M,     M, O, G, O, O, O, O, M,     M, O, O, O, O, B, O, M,\n                    M, O, O, W, W, O, O, M,     M, O, R, R, R, R, O, M,     M, O, G, G, G, G, O, M,     M, O, B, B, B, O, O, M,\n                    M, O, O, O, O, O, O, M,     M, O, O, O, O, O, O, M,     M, O, O, O, O, O, O, M,     M, O, O, O, O, O, O, M,\n                    M, M, M, M, M, M, M, M,     M, M, M, M, M, M, M, M,     M, M, M, M, M, M, M, M,     M, M, M, M, M, M, M, M,\n                };\n            var pixelBytes = new byte[face.Width * 4 * face.Height];\n            Buffer.BlockCopy(pixelData, 0, pixelBytes, 0, pixelData.Length * 4);\n            face.SetPixelData(pixelBytes);\n            var input = new Texture2DContent();\n            input.Faces[0] = face;\n\n            var output = processor.Process(input, context);\n\n            Assert.NotNull(output);\n\n            Assert.AreEqual(output.CharacterMap[0], '0');\n            Assert.AreEqual(output.CharacterMap[1], '1');\n            Assert.AreEqual(output.CharacterMap[2], '2');\n            Assert.AreEqual(output.CharacterMap[3], '3');\n\n            Assert.AreEqual(1, output.Texture.Faces.Count);\n            Assert.AreEqual(1, output.Texture.Faces[0].Count);\n\n            Assert.IsAssignableFrom<PixelBitmapContent<Color>>(output.Texture.Faces[0][0]);\n            var outFace = (PixelBitmapContent<Color>)output.Texture.Faces[0][0];\n\n            for (var i = 0; i < 4; i++)\n            {\n                // (2, 2, 4, 5) is the top,left and width,height of the first glyph. All test glyphs are 4x5\n                var inRect = new Rectangle(i * 8 + 2, 2, 4, 5);\n                var outRect = output.Glyphs[i];\n                Assert.AreEqual(inRect.Width, outRect.Width);\n                Assert.AreEqual(inRect.Height, outRect.Height);\n                for (var y = 0; y < inRect.Height; y++)\n                    for (var x = 0; x < inRect.Width; x++)\n                        Assert.AreEqual(pixelData[(x + inRect.Left) + (y + inRect.Top) * face.Width], outFace.GetPixel(x + outRect.Left, y + outRect.Top).PackedValue);\n            }\n            \n            Assert.AreEqual(new Rectangle(1, 1, 6, 7), output.Cropping[0]);\n            Assert.AreEqual(new Rectangle(1, 1, 6, 7), output.Cropping[1]);\n            Assert.AreEqual(new Rectangle(1, 1, 6, 7), output.Cropping[2]);\n            Assert.AreEqual(new Rectangle(1, 1, 6, 7), output.Cropping[3]);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/IntermediateDeserializerTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Xml;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n#if XNA\nusing System.Reflection;\n#endif\n\nnamespace Kni.Tests.ContentPipeline\n{\n    // These tests are based on \"Everything you ever wanted to know about IntermediateSerializer\" by Shawn Hargreaves\n    // http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx\n\n    class IntermediateDeserializerTest\n    {\n        class TestContentManager : ContentManager\n        {\n            class FakeGraphicsService : IGraphicsDeviceService\n            {\n                public GraphicsDevice GraphicsDevice { get; private set; }\n\n                #pragma warning disable 67\n                public event EventHandler<EventArgs> DeviceCreated;\n                public event EventHandler<EventArgs> DeviceDisposing;\n                public event EventHandler<EventArgs> DeviceReset;\n                public event EventHandler<EventArgs> DeviceResetting;\n                #pragma warning restore 67\n            }\n\n            class FakeServiceProvider : IServiceProvider\n            {\n                public object GetService(Type serviceType)\n                {\n                    if (serviceType == typeof(IGraphicsDeviceService))\n                        return new FakeGraphicsService();\n\n                    throw new NotImplementedException();\n                }\n            }\n\n            private readonly byte[] _bufferData;\n\n            public TestContentManager(byte[] bufferData)\n                : base(new FakeServiceProvider(), \"NONE\")\n            {\n                _bufferData = bufferData;\n            }\n\n            protected override Stream OpenStream(string assetName)\n            {\n                return new MemoryStream(_bufferData, false);\n            }\n        }\n\n        private static void DeserializeCompileAndLoad<T>(string file, Action<T> doAsserts)\n        {\n            T result = Deserialize<T>(file);\n            doAsserts((T)result);\n\n            T loaded = CompileAndLoad(result);\n            doAsserts(loaded);\n        }\n\n        private static T Deserialize<T>(string file)\n        {\n            object result;\n            var filePath = Paths.Xml(file);\n            using (var reader = XmlReader.Create(filePath))\n                result = IntermediateSerializer.Deserialize<object>(reader, filePath);\n\n            Assert.NotNull(result);\n            Assert.IsAssignableFrom<T>(result);\n\n            return (T)result;\n        }\n\n        private static T CompileAndLoad<T>(T result)\n        {\n            MemoryStream xnbStream = new MemoryStream();\n#if XNA\n            // In MS XNA the ContentCompiler is completely internal, so we need\n            // to use just a little reflection to get access to what we need.\n            const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;\n            var ctor = typeof(ContentCompiler).GetConstructors(flags)[0];\n            var compiler = (ContentCompiler)ctor.Invoke(null);\n            var compileMethod = typeof(ContentCompiler).GetMethod(\"Compile\", flags);\n            compileMethod.Invoke(compiler, new object[] { xnbStream, result, TargetPlatform.Windows, GraphicsProfile.Reach,\n                                false, Directory.GetCurrentDirectory(), \"referenceRelocationPath\" });\n#else\n            ContentCompiler compiler = new ContentCompiler();\n            compiler.Compile(xnbStream, result, TargetPlatform.Windows, GraphicsProfile.Reach,\n                                  ContentCompression.Uncompressed, \"rootDirectory\", \"referenceRelocationPath\");\n#endif\n\n            byte[] bufferData = xnbStream.ToArray();\n            ContentManager content = new TestContentManager(bufferData);\n            T loaded = content.Load<T>(\"Whatever\");\n            return loaded;\n        }\n\n\n        [Test]\n        public void TheBasics()\n        {\n            DeserializeCompileAndLoad<TheBasics>(\"01_TheBasics.xml\", theBasics =>\n            {\n                Assert.AreEqual(1, theBasics.PublicField);\n                Assert.AreEqual(0, theBasics.InternalField);\n                Assert.AreEqual(\"Hello World\", theBasics.GetSetProperty);\n                Assert.NotNull(theBasics.Nested);\n                Assert.AreEqual(\"Shawn\", theBasics.Nested.Name);\n                Assert.AreEqual(true, theBasics.Nested.IsEnglish);\n                Assert.NotNull(theBasics.Nested2);\n                Assert.AreEqual(\"Shawn\", theBasics.Nested2.Name);\n                Assert.AreEqual(true, theBasics.Nested2.IsEnglish);\n                Assert.AreNotSame(theBasics.Nested, theBasics.Nested2);\n            });\n        }\n\n        [Test]\n        public void Inheritance()\n        {\n            DeserializeCompileAndLoad<Inheritance>(\"02_Inheritance.xml\", inheritance =>\n            {\n                Assert.AreEqual(23, inheritance.elf);\n                Assert.AreEqual(\"world\", inheritance.hello);\n            });\n        }\n\n        [Test]\n        public void IncludingPrivateMembers()\n        {\n            DeserializeCompileAndLoad<IncludingPrivateMembers>(\"03_IncludingPrivateMembers.xml\", including =>\n            {\n                Assert.AreEqual(23, including.GetElfValue());\n            });\n        }\n\n        [Test]\n        public void ExcludingPublicMembers()\n        {\n            var filePath = Paths.Xml(\"04_ExcludingPublicMembers.xml\");\n            using (var reader = XmlReader.Create(filePath))\n            {\n                // This should throw an InvalidContentException as the\n                // xml tries to set the <elf> element which has a \n                // [ContentSerializerIgnore] attribute.\n                Assert.Throws<InvalidContentException>(() =>\n                    IntermediateSerializer.Deserialize<object>(reader, filePath));\n            }\n        }\n\n        [Test]\n        public void RenamingXmlElements()\n        {\n            DeserializeCompileAndLoad<RenamingXmlElements>(\"05_RenamingXmlElements.xml\", renaming =>\n            {\n                Assert.AreEqual(\"world\", renaming.hello);\n                Assert.AreEqual(23, renaming.elf);\n                Assert.AreEqual(80.2f, renaming.speed);\n                Assert.AreEqual(true, renaming.isOrganic);\n                Assert.AreEqual(new Vector2(32, 32), renaming.Dimensions);\n            });\n        }\n\n        [Test]\n        public void NullReferences()\n        {\n            DeserializeCompileAndLoad<NullReferences>(\"06_NullReferences.xml\", nullref =>\n            {\n                Assert.AreEqual(null, nullref.hello);\n            });\n        }\n\n        [Test]\n        public void OptionalElements()\n        {\n            DeserializeCompileAndLoad<OptionalElements>(\"07_OptionalElements.xml\", optional =>\n            {\n                Assert.AreEqual(null, optional.a);\n                Assert.AreEqual(null, optional.b);\n                Assert.AreEqual(string.Empty, optional.c);\n                Assert.AreEqual(null, optional.d);\n                Assert.AreEqual(CullMode.CullClockwiseFace, optional.e);\n                Assert.AreEqual(CullMode.CullCounterClockwiseFace, optional.f);\n                Assert.AreEqual(CullMode.CullClockwiseFace, optional.g);\n            });\n        }\n\n        [Test]\n        public void AllowNull()\n        {\n            var filePath = Paths.Xml(\"08_AllowNull.xml\");\n            using (var reader = XmlReader.Create(filePath))\n            {\n                // This should throw an InvalidContentException as the\n                // xml tries to set the <elf> element which has a \n                // [ContentSerializerIgnore] attribute.\n                Assert.Throws<InvalidContentException>(() =>\n                    IntermediateSerializer.Deserialize<object>(reader, filePath));\n            }\n        }\n\n        [Test]\n        public void Collections()\n        {\n            DeserializeCompileAndLoad<Collections>(\"09_Collections.xml\", collections =>\n            {\n                Assert.NotNull(collections.StringArray);\n                Assert.AreEqual(2, collections.StringArray.Length);\n                Assert.AreEqual(\"Hello\", collections.StringArray[0]);\n                Assert.AreEqual(\"World\", collections.StringArray[1]);\n\n                Assert.NotNull(collections.StringList);\n                Assert.AreEqual(4, collections.StringList.Count);\n                Assert.AreEqual(\"This\", collections.StringList[0]);\n                Assert.AreEqual(\"is\", collections.StringList[1]);\n                Assert.AreEqual(\"a\", collections.StringList[2]);\n                Assert.AreEqual(\"test\", collections.StringList[3]);\n\n                Assert.NotNull(collections.IntArray);\n                Assert.AreEqual(5, collections.IntArray.Length);\n                Assert.AreEqual(1, collections.IntArray[0]);\n                Assert.AreEqual(2, collections.IntArray[1]);\n                Assert.AreEqual(3, collections.IntArray[2]);\n                Assert.AreEqual(23, collections.IntArray[3]);\n                Assert.AreEqual(42, collections.IntArray[4]);\n\n                Assert.NotNull(collections.ColorArray);\n                Assert.AreEqual(4, collections.ColorArray.Length);\n                Assert.AreEqual(new Color(0x88, 0x65, 0x42, 0xFF), collections.ColorArray[0]);\n                Assert.AreEqual(new Color(0x91, 0x6B, 0x46, 0xFF), collections.ColorArray[1]);\n                Assert.AreEqual(new Color(0x91, 0x7B, 0x46, 0xFF), collections.ColorArray[2]);\n                Assert.AreEqual(new Color(0x88, 0x65, 0x43, 0xFF), collections.ColorArray[3]);\n\n                Assert.NotNull(collections.CustomItemList);\n                Assert.AreEqual(0, collections.CustomItemList.Count);\n            });            \n        }\n\n        [Test]\n        public void CollectionItemName()\n        {\n            DeserializeCompileAndLoad<CollectionItemName>(\"10_CollectionItemName.xml\", collections =>\n            {\n                Assert.NotNull(collections.StringArray);\n                Assert.AreEqual(2, collections.StringArray.Length);\n                Assert.AreEqual(\"Hello\", collections.StringArray[0]);\n                Assert.AreEqual(\"World\", collections.StringArray[1]);\n            });\n        }\n\n        [Test]\n        public void Dictionaries()\n        {\n            DeserializeCompileAndLoad<Dictionaries>(\"11_Dictionaries.xml\", dictionaries =>\n            {\n                Assert.NotNull(dictionaries.TestDictionary);\n                Assert.AreEqual(2, dictionaries.TestDictionary.Count);\n                Assert.AreEqual(true, dictionaries.TestDictionary[23]);\n                Assert.AreEqual(false, dictionaries.TestDictionary[42]);\n            });\n        }\n\n        [Test]\n        public void MathTypes()\n        {\n            DeserializeCompileAndLoad<MathTypes>(\"12_MathTypes.xml\", mathTypes =>\n            {\n                Assert.AreEqual(new Point(1, 2), mathTypes.Point);\n                Assert.AreEqual(new Rectangle(1, 2, 3, 4), mathTypes.Rectangle);\n                Assert.AreEqual(new Vector2(1, 2), mathTypes.Vector2);\n                Assert.AreEqual(new Vector3(1, 2, 3.1f), mathTypes.Vector3);\n                Assert.AreEqual(new Vector4(1, 2, 3, 4), mathTypes.Vector4);\n                Assert.AreEqual(new Quaternion(1, 2, 3, 4), mathTypes.Quaternion);\n                Assert.AreEqual(new Plane(1, 2, 3, 4), mathTypes.Plane);\n                Assert.AreEqual(new Matrix(1, 2, 3, 4, 5 , 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), mathTypes.Matrix);\n                Assert.AreEqual(Color.CornflowerBlue, mathTypes.Color);\n                Assert.NotNull(mathTypes.Vector2Array);\n                Assert.AreEqual(2, mathTypes.Vector2Array.Length);\n                Assert.AreEqual(Vector2.Zero, mathTypes.Vector2Array[0]);\n                Assert.AreEqual(Vector2.One, mathTypes.Vector2Array[1]);\n                Assert.AreEqual(3, mathTypes.Vector2List.Count);\n                Assert.AreEqual(new Vector2(1, 7), mathTypes.Vector2List[0]);\n                Assert.AreEqual(new Vector2(1, 9), mathTypes.Vector2List[1]);\n                Assert.AreEqual(new Vector2(1, 10), mathTypes.Vector2List[2]);\n                Assert.AreEqual(0, mathTypes.Vector2ListEmpty.Count);\n            });\n        }\n\n        [Test]\n        public void PolymorphicTypes()\n        {\n            DeserializeCompileAndLoad<PolymorphicTypes>(\"13_PolymorphicTypes.xml\", polymorphicTypes =>\n            {\n                Assert.AreEqual(\"World\", polymorphicTypes.Hello);\n                Assert.AreEqual(23, polymorphicTypes.Elf);\n\n                Assert.NotNull(polymorphicTypes.TypedArray);\n                Assert.AreEqual(3, polymorphicTypes.TypedArray.Length);\n                Assert.IsAssignableFrom<PolymorphicA>(polymorphicTypes.TypedArray[0]);\n                Assert.AreEqual(true, polymorphicTypes.TypedArray[0].Value);\n                Assert.IsAssignableFrom<PolymorphicB>(polymorphicTypes.TypedArray[1]);\n                Assert.AreEqual(true, polymorphicTypes.TypedArray[1].Value);\n                Assert.IsAssignableFrom<PolymorphicC>(polymorphicTypes.TypedArray[2]);\n                Assert.AreEqual(true, polymorphicTypes.TypedArray[2].Value);\n\n                Assert.NotNull(polymorphicTypes.UntypedArray);\n                Assert.AreEqual(3, polymorphicTypes.UntypedArray.Length);\n                Assert.IsAssignableFrom<PolymorphicA>(polymorphicTypes.UntypedArray.GetValue(0));\n                Assert.AreEqual(true, ((PolymorphicA)polymorphicTypes.UntypedArray.GetValue(0)).Value);\n                Assert.IsAssignableFrom<PolymorphicB>(polymorphicTypes.UntypedArray.GetValue(1));\n                Assert.AreEqual(true, ((PolymorphicB)polymorphicTypes.UntypedArray.GetValue(1)).Value);\n                Assert.IsAssignableFrom<PolymorphicC>(polymorphicTypes.UntypedArray.GetValue(2));\n                Assert.AreEqual(true, ((PolymorphicC)polymorphicTypes.UntypedArray.GetValue(2)).Value);\n\n                Assert.NotNull(polymorphicTypes.IntCollection);\n                Assert.IsInstanceOf<List<int>>(polymorphicTypes.IntCollection);\n                Assert.AreEqual(3, polymorphicTypes.IntCollection.Count);\n                Assert.AreEqual(1, polymorphicTypes.IntCollection.ElementAt(0));\n                Assert.AreEqual(4, polymorphicTypes.IntCollection.ElementAt(1));\n                Assert.AreEqual(6, polymorphicTypes.IntCollection.ElementAt(2));\n\n                Assert.NotNull(polymorphicTypes.UntypedDictionary);\n                Assert.IsInstanceOf<Dictionary<int, PolymorphicA>>(polymorphicTypes.UntypedDictionary);\n                Assert.AreEqual(2, ((Dictionary<int, PolymorphicA>) polymorphicTypes.UntypedDictionary).Count);\n                Assert.AreEqual(true, ((Dictionary<int, PolymorphicA>) polymorphicTypes.UntypedDictionary)[1].Value);\n                Assert.AreEqual(false, ((Dictionary<int, PolymorphicA>) polymorphicTypes.UntypedDictionary)[5].Value);\n            });\n        }\n\n        [Test]\n        public void Namespaces()\n        {\n            DeserializeCompileAndLoad<NamespaceClass>(\"14_Namespaces.xml\", namespaceClass =>\n            {\n                Assert.IsAssignableFrom<NamespaceHelper>(namespaceClass.A);\n                Assert.AreEqual(true, ((NamespaceHelper)namespaceClass.A).Value);\n                Assert.IsAssignableFrom<Vector2>(namespaceClass.B);\n                Assert.AreEqual(Vector2.Zero, namespaceClass.B);\n                Assert.IsAssignableFrom<SpriteSortMode>(namespaceClass.C);\n                Assert.AreEqual(SpriteSortMode.Immediate, namespaceClass.C);\n                Assert.IsAssignableFrom<Nested.ContentPipeline.ClassInsideNestedAmbiguousNamespace>(namespaceClass.D);\n                Assert.AreEqual(true, ((Nested.ContentPipeline.ClassInsideNestedAmbiguousNamespace) namespaceClass.D).Value);\n                Assert.IsAssignableFrom<Nested.ClassInsideNestedNamespace>(namespaceClass.E);\n                Assert.AreEqual(true, ((Nested.ClassInsideNestedNamespace) namespaceClass.E).Value);\n                Assert.IsAssignableFrom<Nested.ContentPipeline2.ClassInsideNestedUnambiguousNamespace>(namespaceClass.F);\n                Assert.AreEqual(true, ((Nested.ContentPipeline2.ClassInsideNestedUnambiguousNamespace) namespaceClass.F).Value);\n                Assert.IsAssignableFrom<SomethingElse.ContentPipeline.ClassInsideAmbiguousNamespace>(namespaceClass.G);\n                Assert.AreEqual(true, ((SomethingElse.ContentPipeline.ClassInsideAmbiguousNamespace) namespaceClass.G).Value);\n                Assert.IsNull(namespaceClass.H);\n            });\n        }\n\n        [Test]\n        public void FlattenContent()\n        {\n            DeserializeCompileAndLoad<FlattenContent>(\"15_FlattenContent.xml\", flattenContent =>\n            {\n                Assert.IsAssignableFrom<NestedClass>(flattenContent.Nested);\n                Assert.NotNull(flattenContent.Nested);\n                Assert.AreEqual(\"Shawn\", flattenContent.Nested.Name);\n                Assert.AreEqual(true, flattenContent.Nested.IsEnglish);\n                Assert.NotNull(flattenContent.Collection);\n                Assert.AreEqual(2, flattenContent.Collection.Length);\n                Assert.AreEqual(\"Hello\", flattenContent.Collection[0]);\n                Assert.AreEqual(\"World\", flattenContent.Collection[1]);\n            });\n        }\n\n        [Test]\n        public void SharedResources()\n        {\n            DeserializeCompileAndLoad<SharedResources>(\"16_SharedResources.xml\", sharedResources =>\n            {\n                Assert.NotNull(sharedResources.Head);\n                Assert.AreEqual(1, sharedResources.Head.Value);\n                Assert.NotNull(sharedResources.Head.Next);\n                Assert.AreEqual(2, sharedResources.Head.Next.Value);\n                Assert.NotNull(sharedResources.Head.Next.Next);\n                Assert.AreEqual(3, sharedResources.Head.Next.Next.Value);\n                Assert.AreSame(sharedResources.Head, sharedResources.Head.Next.Next.Next);\n\n                Assert.NotNull(sharedResources.LinkedArray);\n                Assert.AreEqual(2, sharedResources.LinkedArray.Length);\n                Assert.IsNotNull(sharedResources.LinkedArray[0].Next);\n                Assert.AreEqual(2, sharedResources.LinkedArray[0].Next.Length);\n                Assert.IsNotNull(sharedResources.LinkedArray[1].Next);\n                Assert.AreEqual(1, sharedResources.LinkedArray[1].Next.Length);\n                Assert.AreSame(sharedResources.LinkedArray[0].Next, sharedResources.LinkedArray[1].Next[0].Next);\n            });\n        }\n\n        [Test]\n        public void ExternalReferences()\n        {\n            var externalReferences = Deserialize<ExternalReferences>(\"17_ExternalReferences.xml\");\n\n            Assert.NotNull(externalReferences.Texture);\n            Assert.IsTrue(externalReferences.Texture.Filename.EndsWith(\"/Xml/grass.tga\".Replace('/', Path.DirectorySeparatorChar)));\n            Assert.NotNull(externalReferences.Texture2);\n            Assert.IsTrue(externalReferences.Texture2.Filename.EndsWith(\"/Xml/grass.tga\".Replace('/', Path.DirectorySeparatorChar)));\n            Assert.AreNotSame(externalReferences.Texture, externalReferences.Texture2);\n            Assert.NotNull(externalReferences.Shader);\n            Assert.IsTrue(externalReferences.Shader.Filename.EndsWith(\"/Xml/foliage.fx\".Replace('/', Path.DirectorySeparatorChar)));\n        }\n\n        [Test]\n        public void PrimitiveTypes()\n        {\n            DeserializeCompileAndLoad<PrimitiveTypes>(\"18_PrimitiveTypes.xml\", primitiveTypes =>\n            {\n                Assert.AreEqual('A', primitiveTypes.Char);\n                Assert.AreEqual('°', primitiveTypes.Char2);\n                Assert.AreEqual('Δ', primitiveTypes.Char3);\n                Assert.AreEqual(127, primitiveTypes.Byte);\n                Assert.AreEqual(-127, primitiveTypes.SByte);\n                Assert.AreEqual(-1000, primitiveTypes.Short);\n                Assert.AreEqual(1000, primitiveTypes.UShort);\n                Assert.AreEqual(-100000, primitiveTypes.Int);\n                Assert.AreEqual(100000, primitiveTypes.UInt);\n                Assert.AreEqual(-10000000, primitiveTypes.Long);\n                Assert.AreEqual(10000000, primitiveTypes.ULong);\n                Assert.AreEqual(1234567.0f, primitiveTypes.Float);\n                Assert.AreEqual(1234567890.0, primitiveTypes.Double);\n                Assert.AreEqual(null, primitiveTypes.NullChar);\n                Assert.AreEqual('B', primitiveTypes.NotNullChar);\n            });\n        }\n\n        [Test]\n        public void FontDescription()\n        {\n            DeserializeCompileAndLoad<ExtendedFontDescription>(\"19_FontDescription.xml\", fontDesc =>\n            {\n                Assert.AreEqual(\"Foo\", fontDesc.FontName);\n                Assert.AreEqual(30.0f, fontDesc.Size);\n                Assert.AreEqual(0.75f, fontDesc.Spacing);\n                Assert.AreEqual(true, fontDesc.UseKerning);\n                Assert.AreEqual(FontDescriptionStyle.Bold, fontDesc.Style);\n                Assert.AreEqual('*', fontDesc.DefaultCharacter);\n                        \n                var expectedCharacters = new List<char>();\n                for (var c = WebUtility.HtmlDecode(\"&#32;\")[0]; c <= WebUtility.HtmlDecode(\"&#126;\")[0]; c++)\n                    expectedCharacters.Add(c);\n\n                expectedCharacters.Add(WebUtility.HtmlDecode(\"&#916;\")[0]);\n                expectedCharacters.Add(WebUtility.HtmlDecode(\"&#176;\")[0]);\n\n                var characters = new List<char>(fontDesc.Characters);\n                foreach (var c in expectedCharacters)\n                {\n                    Assert.Contains(c, characters);\n                    characters.Remove(c);\n                }\n\n                Assert.IsEmpty(characters);\n\n                var expectedStrings = new List<string>()\n                    {\n                        \"item0\",\n                        \"item1\",\n                        \"item2\",\n                    };\n                var strings = new List<string>(fontDesc.ExtendedListProperty);\n                foreach (var s in expectedStrings)\n                {\n                    Assert.Contains(s, strings);\n                    strings.Remove(s);\n                }\n\n                Assert.IsEmpty(strings);\n            });\n        }\n\n        [Test]\n        public void SystemTypes()\n        {\n            DeserializeCompileAndLoad<SystemTypes>(\"20_SystemTypes.xml\", sysTypes =>\n            {\n                Assert.AreEqual(TimeSpan.FromSeconds(42.5f), sysTypes.TimeSpan);\n            });\n        }\n\n        [Test]\n        public void CustomFormatting()\n        {\n            DeserializeCompileAndLoad<CustomFormatting<byte, Rectangle>>(\"21_CustomFormatting.xml\", customFormatting =>\n            {\n                Assert.AreEqual(1, customFormatting.A);\n                Assert.AreEqual(3, customFormatting.Vector2ListSpaced.Count);\n                Assert.AreEqual(new Vector2(0, 4), customFormatting.Vector2ListSpaced[0]);\n                Assert.AreEqual(new Vector2(0, 6), customFormatting.Vector2ListSpaced[1]);\n                Assert.AreEqual(new Vector2(0, 7), customFormatting.Vector2ListSpaced[2]);\n                Assert.AreEqual(string.Empty, customFormatting.EmptyString);\n                Assert.AreEqual(new Rectangle(0, 0, 100, 100), customFormatting.Rectangle);\n            });\n        }\n\n        [Test]\n        public void GetterOnlyProperties()\n        {\n            DeserializeCompileAndLoad<GetterOnlyProperties>(\"22_GetterOnlyProperties.xml\", getterOnlyProps =>\n            {\n                Assert.AreEqual(3, getterOnlyProps.IntList.Count);\n                Assert.AreEqual(1, getterOnlyProps.IntList[0]);\n                Assert.AreEqual(2, getterOnlyProps.IntList[1]);\n                Assert.AreEqual(3, getterOnlyProps.IntList[2]);\n                Assert.AreEqual(0, getterOnlyProps.IntStringDictionaryWithPrivateSetter.Count);\n                Assert.AreEqual(2, getterOnlyProps.IntStringDictionary.Count);\n                Assert.AreEqual(\"Foo\", getterOnlyProps.IntStringDictionary[1]);\n                Assert.AreEqual(\"Bar\", getterOnlyProps.IntStringDictionary[5]);\n                Assert.AreEqual(42, getterOnlyProps.CustomClass.A);\n            });\n        }\n\n        [Test]\n        public void GetterOnlyPolymorphicArrayProperties()\n        {\n            var filePath = Paths.Xml(\"23_GetterOnlyPolymorphicArrayProperties.xml\");\n            using (var reader = XmlReader.Create(filePath))\n            {\n                // This should throw an InvalidContentException as the\n                // xml tries to deserialize into an IList property\n                // but the property value is actually an Array.\n                Assert.Throws<InvalidOperationException>(() =>\n                    IntermediateSerializer.Deserialize<GetterOnlyPolymorphicArrayProperties>(reader, filePath));\n            }\n        }\n\n        [Test]\n        public void GenericTypes()\n        {\n            DeserializeCompileAndLoad<GenericTypes>(\"24_GenericTypes.xml\", genericTypes =>\n            {\n                Assert.IsNotNull(genericTypes.A);\n                Assert.AreEqual(3, genericTypes.A.Value);\n                Assert.IsNotNull(genericTypes.B);\n                Assert.AreEqual(4.2f, genericTypes.B.Value);\n                Assert.IsNotNull(genericTypes.C);\n                Assert.IsNotNull(genericTypes.C.Value);\n                Assert.AreEqual(5, genericTypes.C.Value.Value);\n            });\n        }\n\n        [Test]\n        public void StructArrayNoElements()\n        {\n            // Note that this does not contain a matching SerializeAndAssert test as Vector2ArrayNoElements\n            // will serialize to an empty Xml element which defeats the purpose of this test.\n            DeserializeCompileAndLoad<StructArrayNoElements>(\"25_StructArrayNoElements.xml\", structArrayNoElems =>\n            {\n                Assert.IsNotNull(structArrayNoElems.Vector2ArrayNoElements);\n                Assert.AreEqual(0, structArrayNoElems.Vector2ArrayNoElements.Length);\n            });\n        }\n\n        [Test]\n        public void ChildCollections()\n        {\n            // ChildCollection is a ContentPipeline-only type, so we don't need to / shouldn't\n            // test running it through ContentCompiler.\n            var childCollections = Deserialize<ChildCollections>(\"26_ChildCollections.xml\");\n\n            Assert.IsNotNull(childCollections.Children);\n            Assert.AreEqual(2, childCollections.Children.Count);\n            Assert.AreEqual(childCollections, childCollections.Children[0].Parent);\n            Assert.AreEqual(\"Foo\", childCollections.Children[0].Name);\n            Assert.AreEqual(childCollections, childCollections.Children[1].Parent);\n            Assert.AreEqual(\"Bar\", childCollections.Children[1].Name);\n        }\n\n        [Test]\n        public void Colors()\n        {\n            DeserializeCompileAndLoad<Colors>(\"27_Colors.xml\", colors =>\n            {\n                Assert.AreEqual(colors.White, Color.White);\n                Assert.AreEqual(colors.Black, Color.Black);\n                Assert.AreEqual(colors.Transparent, Color.Transparent);\n                Assert.AreEqual(colors.Red, Color.Red);\n                Assert.AreEqual(colors.Green, Color.Green);\n                Assert.AreEqual(colors.Blue, Color.Blue);\n            });\n        }\n\n        [Test]\n        public void XnaCurve()\n        {\n            // Curve in 28_XnaCurve.xml is formated the same way as by XNA's serializer\n            DeserializeCompileAndLoad<Curve>(\"28_XnaCurve.xml\", curve =>\n            {\n                Assert.AreEqual(CurveLoopType.Constant, curve.PreLoop);\n                Assert.AreEqual(CurveLoopType.Constant, curve.PostLoop);\n                Assert.AreEqual(2, curve.Keys.Count);\n                var key1 = curve.Keys[0];\n                Assert.AreEqual(0, key1.Position);\n                Assert.AreEqual(1, key1.Value);\n                Assert.AreEqual(0, key1.TangentIn);\n                Assert.AreEqual(0, key1.TangentOut);\n                Assert.AreEqual(CurveContinuity.Smooth, key1.Continuity);\n                var key2 = curve.Keys[1];\n                Assert.AreEqual(0.5f, key2.Position);\n                Assert.AreEqual(0.5f, key2.Value);\n                Assert.AreEqual(0, key2.TangentIn);\n                Assert.AreEqual(0, key2.TangentOut);\n                Assert.AreEqual(CurveContinuity.Smooth, key2.Continuity);\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/IntermediateSerializerTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\nusing System.Net;\nusing System.Xml;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n#if XNA\nusing System.Reflection;\n#endif\n\nnamespace Kni.Tests.ContentPipeline\n{\n    // These tests are based on \"Everything you ever wanted to know about IntermediateSerializer\" by Shawn Hargreaves\n    // http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx\n\n    class IntermediateSerializerTest\n    {\n\n        private static void SerializeAndAssert<T>(string file, T value)\n        {\n            string filePath = Paths.Xml(file);\n            string expectedXml = File.ReadAllText(filePath);\n\n            string actualXml = Serialize(filePath, value);\n\n            // Normalize line endings - git on build server seems to set\n            // core.autocrlf to false.\n            expectedXml = expectedXml.Replace(\"\\r\\n\", \"\\n\");\n            actualXml = actualXml.Replace(\"\\r\\n\", \"\\n\");\n\n            Assert.AreEqual(expectedXml, actualXml);\n        }\n\n        private static string Serialize<T>(string filePath, T value)\n        {\n            string referenceRelocationPath = filePath;\n\n            // Note: Can't use StringBuilder here because it is always UTF-16,\n            // while our test XML files use a UTF-8 encoding.\n            MemoryStream memoryStream = new MemoryStream();\n            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings\n            {\n                Encoding = Encoding.UTF8,\n                Indent = true\n            };\n            using (XmlWriter writer = XmlWriter.Create(memoryStream, xmlWriterSettings))\n                IntermediateSerializer.Serialize(writer, value, referenceRelocationPath);\n\n            memoryStream.Position = 0;\n            string actualXml = new StreamReader(memoryStream).ReadToEnd();\n\n            return actualXml;\n        }\n\n        [Test]\n        public void TheBasics()\n        {\n            NestedClass nestedObject = new NestedClass\n            {\n                Name = \"Shawn\",\n                IsEnglish = true\n            };\n            SerializeAndAssert(\"01_TheBasics.xml\", new TheBasics\n            {\n                PublicField = 1,\n                InternalField = 0,\n                GetSetProperty = \"Hello World\",\n                Nested = nestedObject,\n                Nested2 = nestedObject\n            });\n        }\n\n        [Test]\n        public void Inheritance()\n        {\n            SerializeAndAssert(\"02_Inheritance.xml\", new Inheritance\n            {\n                elf = 23,\n                hello = \"world\"\n            });\n        }\n\n        [Test]\n        public void IncludingPrivateMembers()\n        {\n            SerializeAndAssert(\"03_IncludingPrivateMembers.xml\", new IncludingPrivateMembers(23));\n        }\n\n        [Test]\n        public void ExcludingPublicMembers()\n        {\n            SerializeAndAssert(\"04_ExcludingPublicMembersOutput.xml\", new ExcludingPublicMembers\n            {\n                elf = 23\n            });\n        }\n\n        [Test]\n        public void RenamingXmlElements()\n        {\n            RenamingXmlElements value = new RenamingXmlElements();\n            value.hello = \"world\";\n            value.elf = 23;\n            value.speed = 80.2f;\n            value.isOrganic = true;\n\n            value.SetDimensions(new Vector2(32, 32));\n            SerializeAndAssert(\"05_RenamingXmlElements.xml\", value);\n        }\n\n        [Test]\n        public void NullReferences()\n        {\n            SerializeAndAssert(\"06_NullReferences.xml\", new NullReferences\n            {\n                hello = null\n            });\n        }\n\n        [Test]\n        public void OptionalElements()\n        {\n            SerializeAndAssert(\"07_OptionalElements.xml\", new OptionalElements\n            {\n                a = null,\n                b = null,\n                c = string.Empty,\n                d = null,\n                e = CullMode.CullClockwiseFace,\n                f = CullMode.CullCounterClockwiseFace,\n                g = CullMode.CullClockwiseFace\n            });\n        }\n\n        [Test]\n        public void AllowNull()\n        {\n            // [AllowNull] \"has no effect when serializing to XML\"\n            // (http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx)\n\n            // Except for... it does have an effect. XNA throws an exception when\n            // you try to serialize a null element which has [AllowNull] specified.\n            Assert.Throws<InvalidOperationException>(() =>\n                Serialize(\"output\", new AllowNull()));\n        }\n\n        [Test]\n        public void Collections()\n        {\n            SerializeAndAssert(\"09_Collections.xml\", new Collections\n            {\n                StringArray = new[] { \"Hello\", \"World\" },\n                StringList = new List<string> { \"This\", \"is\", \"a\", \"test\" },\n                IntArray = new[] { 1, 2, 3, 23, 42 },\n                ColorArray = new[]\n                {\n                    new Color(0x88, 0x65, 0x42, 0xFF),\n                    new Color(0x91, 0x6B, 0x46, 0xFF),\n                    new Color(0x91, 0x7B, 0x46, 0xFF),\n                    new Color(0x88, 0x65, 0x43, 0xFF)\n                },\n                CustomItemList = new List<CustomItem>(),\n                CustomItemInheritedList = new List<CustomItemInherited>()\n            });\n        }\n\n        [Test]\n        public void CollectionItemName()\n        {\n            SerializeAndAssert(\"10_CollectionItemName.xml\", new CollectionItemName\n            {\n                StringArray = new[] { \"Hello\", \"World\" }\n            });\n        }\n\n        [Test]\n        public void Dictionaries()\n        {\n            SerializeAndAssert(\"11_Dictionaries.xml\", new Dictionaries\n            {\n                TestDictionary = new Dictionary<int, bool>\n                {\n                    { 23, true },\n                    { 42, false }\n                }\n            });\n        }\n\n        [Test]\n        public void MathTypes()\n        {\n            SerializeAndAssert(\"12_MathTypes.xml\", new MathTypes\n            {\n                Point = new Point(1, 2),\n                Rectangle = new Rectangle(1, 2, 3, 4),\n                Vector2 = new Vector2(1, 2),\n                Vector3 = new Vector3(1, 2, 3.1f),\n                Vector4 = new Vector4(1, 2, 3, 4),\n                Quaternion = new Quaternion(1, 2, 3, 4),\n                Plane = new Plane(1, 2, 3, 4),\n                Matrix = new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),\n                Color = new Color{ A = 0xFF, R = 0x64, G = 0x95, B = 0xED },\n                Vector2Array = new []{ new Vector2(0, 0), new Vector2(1, 1) },\n                Vector2List = new List<Vector2>(new[] { new Vector2(1, 7), new Vector2(1, 9), new Vector2(1, 10) }),\n                Vector2ListEmpty = new List<Vector2>()\n            });\n        }\n\n        [Test]\n        public void PolymorphicTypes()\n        {\n            SerializeAndAssert(\"13_PolymorphicTypes.xml\", new PolymorphicTypes\n            {\n                Hello = \"World\",\n                Elf = 23,\n\n                TypedArray = new[]\n                {\n                    new PolymorphicA { Value = true },\n                    new PolymorphicB { Value = true },\n                    new PolymorphicC { Value = true }\n                },\n\n                UntypedArray = new[]\n                {\n                    new PolymorphicA { Value = true },\n                    new PolymorphicB { Value = true },\n                    new PolymorphicC { Value = true }\n                },\n\n                IntCollection = new List<int> { 1, 4, 6 },\n\n                UntypedDictionary = new Dictionary<int, PolymorphicA>\n                {\n                    { 1, new PolymorphicA { Value = true } },\n                    { 5, new PolymorphicA { Value = false } }\n                }\n            });\n        }\n\n        [Test]\n        public void Namespaces()\n        {\n            SerializeAndAssert(\"14_Namespaces.xml\", new NamespaceClass\n            {\n                A = new NamespaceHelper { Value = true },\n                B = new Vector2(0, 0),\n                C = SpriteSortMode.Immediate,\n                D = new Nested.ContentPipeline.ClassInsideNestedAmbiguousNamespace { Value = true },\n                E = new Nested.ClassInsideNestedNamespace { Value = true },\n                F = new Nested.ContentPipeline2.ClassInsideNestedUnambiguousNamespace { Value = true },\n                G = new SomethingElse.ContentPipeline.ClassInsideAmbiguousNamespace { Value = true },\n                H = null\n            });\n        }\n\n        [Test]\n        public void FlattenContent()\n        {\n            SerializeAndAssert(\"15_FlattenContent.xml\", new FlattenContent\n            {\n                Nested = new NestedClass\n                {\n                    Name = \"Shawn\",\n                    IsEnglish = true\n                },\n                Collection = new[] { \"Hello\", \"World\" }\n            });\n        }\n\n        [Test]\n        public void CircularReferences()\n        {\n            CircularLinked resource1 = new CircularLinked();\n            CircularLinked resource2 = new CircularLinked();\n            CircularLinked resource3 = new CircularLinked();\n\n            resource1.Next = resource2;\n            resource2.Next = resource3;\n            resource3.Next = resource1;\n\n            Assert.Throws<InvalidOperationException>(() =>\n                Serialize(\"output\", new CircularReferences\n                {\n                    Head = resource1\n                }));\n        }\n\n        [Test]\n        public void SharedResources()\n        {\n            Linked resource1 = new Linked { Value = 1 };\n            Linked resource2 = new Linked { Value = 2 };\n            Linked resource3 = new Linked { Value = 3 };\n\n            resource1.Next = resource2;\n            resource2.Next = resource3;\n            resource3.Next = resource1;\n\n            Linked2 resourceArray1 = new Linked2();\n            Linked2 resourceArray2 = new Linked2();\n            Linked2 resourceArray3 = new Linked2();\n            resourceArray1.Next = new[] { resourceArray2, resourceArray3 };\n            resourceArray2.Next = new[] { resourceArray1 };\n\n            SerializeAndAssert(\"16_SharedResources.xml\", new SharedResources\n            {\n                Head = resource1,\n                LinkedArray = new[]\n                {\n                    resourceArray1,\n                    resourceArray2\n                }\n            });\n        }\n\n        [Test]\n        public void ExternalReferences()\n        {\n            ExternalReference<Texture2D> grassExternalReference = new ExternalReference<Texture2D>(Path.GetFullPath(\"Assets/Xml/grass.tga\"));\n            SerializeAndAssert(\"17_ExternalReferences.xml\", new ExternalReferences\n            {\n                Texture = grassExternalReference,\n                Texture2 = grassExternalReference,\n                Shader = new ExternalReference<Effect>(Path.GetFullPath(\"Assets/Xml/foliage.fx\"))\n            });\n        }\n\n        [Test]\n        public void PrimitiveTypes()\n        {\n            SerializeAndAssert(\"18_PrimitiveTypes.xml\", new PrimitiveTypes\n            {\n                Char = 'A',\n                Char2 = '°',\n                Char3 = 'Δ',\n                Byte = 127,\n                SByte = -127,\n                Short = -1000,\n                UShort = 1000,\n                Int = -100000,\n                UInt = 100000,\n                Long = -10000000,\n                ULong = 10000000,\n                Float = 1234567.0f,\n                Double = 1234567890.0,\n                NullChar = null,\n                NotNullChar = 'B'\n            });\n        }\n\n        [Test]\n        public void FontDescription()\n        {\n            ExtendedFontDescription fontDescription = new ExtendedFontDescription\n            {\n                FontName = \"Foo\",\n                Size = 30,\n                Spacing = 0.75f,\n                UseKerning = true,\n                Style = FontDescriptionStyle.Bold,\n                DefaultCharacter = '*',\n                ExtendedListProperty = { \"item0\", \"item1\", \"item2\" }\n            };\n\n            for (int i = 32; i <= 126; i++)\n                fontDescription.Characters.Add((char) i);\n            fontDescription.Characters.Add(WebUtility.HtmlDecode(\"&#916;\")[0]);\n            fontDescription.Characters.Add(WebUtility.HtmlDecode(\"&#176;\")[0]);\n\n            SerializeAndAssert(\"19_FontDescription.xml\", fontDescription);\n        }\n\n        [Test]\n        public void SystemTypes()\n        {\n            SerializeAndAssert(\"20_SystemTypes.xml\", new SystemTypes\n            {\n                TimeSpan = TimeSpan.FromSeconds(42.5f)\n            });\n        }\n\n        // Test 21 (CustomFormatting) specifically tests IntermediateDeserializer,\n        // and isn't relevant for IntermediateSerializer.\n\n        [Test]\n        public void GetterOnlyProperties()\n        {\n            GetterOnlyProperties value = new GetterOnlyProperties();\n            value.IntList.Add(1);\n            value.IntList.Add(2);\n            value.IntList.Add(3);\n            value.IntStringDictionary.Add(1, \"Foo\");\n            value.IntStringDictionary.Add(5, \"Bar\");\n            value.IntStringDictionaryWithPrivateSetter.Add(2, \"Baz\");\n            value.IntStringDictionaryWithPrivateSetter.Add(6, \"Shawn\");\n            value.CustomClass.A = 42;\n\n            SerializeAndAssert(\"22_GetterOnlyProperties.xml\", value);\n        }\n\n        [Test]\n        public void GetterOnlyPolymorphicArrayProperties()\n        {\n            GetterOnlyPolymorphicArrayProperties value = new GetterOnlyPolymorphicArrayProperties();\n            SerializeAndAssert(\"23_GetterOnlyPolymorphicArrayProperties.xml\", value);\n        }\n\n        [Test]\n        public void GenericTypes()\n        {\n            SerializeAndAssert(\"24_GenericTypes.xml\", new GenericTypes\n            {\n                A = new GenericClass<int> { Value = 3 },\n                B = new GenericClass<float> { Value = 4.2f },\n                C = new GenericClass<GenericArg> { Value = new GenericArg { Value = 5 } }\n            });\n        }\n\n        [Test]\n        public void ChildCollections()\n        {\n            SerializeAndAssert(\"26_ChildCollections.xml\", new ChildCollections\n            {\n                Children =\n                {\n                    new ChildCollectionChild { Name = \"Foo\" },\n                    new ChildCollectionChild { Name = \"Bar\" }\n                }\n            });\n        }\n\n        [Test]\n        public void Colors()\n        {\n            SerializeAndAssert(\"27_Colors.xml\", new Colors()\n            {\n                White = Color.White,\n                Black = Color.Black,\n                Transparent = Color.Transparent,\n                Red = Color.Red,\n                Green = Color.Green,\n                Blue = Color.Blue\n            });\n        }\n\n        [Test]\n        public void XnaCurve()\n        {\n            SerializeAndAssert(\"28_XnaCurve.xml\", new Curve\n            {\n                PreLoop = CurveLoopType.Constant,\n                PostLoop = CurveLoopType.Constant,\n                Keys =\n                {\n                    new CurveKey(0,1,0,0,CurveContinuity.Smooth),\n                    new CurveKey(0.5f,0.5f,0,0,CurveContinuity.Smooth)\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/MeshBuilderTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    internal class MeshBuilderTests\n    {\n        [Test]\n        public void NodeContentInitializesTransformToIdentity()\n        {\n            var nodeContent = new NodeContent();\n            Assert.AreEqual(Matrix.Identity, nodeContent.Transform);\n        }\n\n        private readonly BasicMaterialContent material1 = new BasicMaterialContent\n        {\n            Name = \"Material1\",\n            Alpha = 0.5f,\n            DiffuseColor = Color.Red.ToVector3(),\n            VertexColorEnabled = true,\n        };\n\n        private readonly BasicMaterialContent material2 = new BasicMaterialContent\n        {\n            Name = \"Material2\",\n            Alpha = 0.5f,\n            DiffuseColor = Color.Blue.ToVector3(),\n            VertexColorEnabled = true,\n        };\n\n        private static MeshContent CreateBasicMesh(MaterialContent material)\n        {\n            var builder = MeshBuilder.StartMesh(\"Mesh1\");\n            builder.SetMaterial(material);\n            CreatePositions(builder);\n            AddVertices(builder);\n            return builder.FinishMesh();\n        }\n\n        private static void CreatePositions(MeshBuilder builder)\n        {\n            builder.CreatePosition(new Vector3(0, 0, 0));\n            builder.CreatePosition(new Vector3(1, 0, 0));\n            builder.CreatePosition(new Vector3(1, 1, 1));\n        }\n\n        private static void AddVertices(MeshBuilder builder)\n        {\n            builder.AddTriangleVertex(0);\n            builder.AddTriangleVertex(1);\n            builder.AddTriangleVertex(2);\n        }\n\n        private static void AddVertices(MeshBuilder builder, int channelIndex, object[] channelData, int indexOffset = 0)\n        {\n            builder.SetVertexChannelData(channelIndex, channelData[0]);\n            builder.AddTriangleVertex(0 + indexOffset);\n            builder.SetVertexChannelData(channelIndex, channelData[1]);\n            builder.AddTriangleVertex(1 + indexOffset);\n            builder.SetVertexChannelData(channelIndex, channelData[2]);\n            builder.AddTriangleVertex(2 + indexOffset);\n        }\n\n        private MeshContent CreateTwoMaterialsMesh()\n        {\n            var builder = MeshBuilder.StartMesh(\"Mesh2\");\n\n            var firstPos = builder.CreatePosition(new Vector3(0, 0, 0));\n            var secondPos =  builder.CreatePosition(new Vector3(1, 0, 0));\n            var thirdPos = builder.CreatePosition(new Vector3(1, 1, 1));\n\n            builder.SetMaterial(material1);\n\n            builder.AddTriangleVertex(firstPos);\n            builder.AddTriangleVertex(secondPos);\n            builder.AddTriangleVertex(thirdPos);\n\n            builder.SetMaterial(material2);\n\n            builder.AddTriangleVertex(firstPos);\n            builder.AddTriangleVertex(thirdPos);\n            builder.AddTriangleVertex(secondPos);\n\n            return builder.FinishMesh();\n        }\n\n        [Test]\n        public void BasicMeshBuilderTest()\n        {\n            var output = CreateBasicMesh(material1);\n\n            Assert.NotNull(output);\n            Assert.NotNull(output.Geometry);\n            Assert.NotNull(output.Positions);\n\n            Assert.AreEqual(new Vector3(0, 0, 0), output.Positions[0]);\n            Assert.AreEqual(new Vector3(1, 0, 0), output.Positions[1]);\n            Assert.AreEqual(new Vector3(1, 1, 1), output.Positions[2]);\n\n            Assert.AreEqual(1, output.Geometry.Count);\n\n            Assert.AreEqual(0, output.Geometry[0].Indices[0]);\n            Assert.AreEqual(1, output.Geometry[0].Indices[1]);\n            Assert.AreEqual(2, output.Geometry[0].Indices[2]);\n\n            Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices[0]);\n            Assert.AreEqual(1, output.Geometry[0].Vertices.PositionIndices[1]);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices[2]);\n\n            Assert.AreEqual(new Vector3(0, 0, 0), output.Geometry[0].Vertices.Positions[0]);\n            Assert.AreEqual(new Vector3(1, 0, 0), output.Geometry[0].Vertices.Positions[1]);\n            Assert.AreEqual(new Vector3(1, 1, 1), output.Geometry[0].Vertices.Positions[2]);\n\n            //Check if normals are generated\n            Assert.NotNull(output.Geometry[0].Vertices.Channels[VertexChannelNames.Normal(0)]);\n\n            Assert.AreEqual(material1, output.Geometry[0].Material);\n            Assert.AreEqual(Matrix.Identity, output.Transform);\n\n            Assert.AreEqual(3, output.Positions.Count);\n            Assert.AreEqual(\"Mesh1\", output.Name);\n        }\n\n        [Test]\n        public void TwoMaterialsMeshBuilderTest()\n        {\n            var output = CreateTwoMaterialsMesh();\n\n            Assert.NotNull(output);\n            Assert.NotNull(output.Geometry);\n            Assert.NotNull(output.Positions);\n\n            Assert.AreEqual(2, output.Geometry.Count);\n\n            Assert.AreEqual(0, output.Geometry[0].Indices[0]);\n            Assert.AreEqual(1, output.Geometry[0].Indices[1]);\n            Assert.AreEqual(2, output.Geometry[0].Indices[2]);\n            Assert.AreSame(material1, output.Geometry[0].Material);\n\n            Assert.AreEqual(0, output.Geometry[1].Indices[0]);\n            Assert.AreEqual(1, output.Geometry[1].Indices[1]);\n            Assert.AreEqual(2, output.Geometry[1].Indices[2]);\n            Assert.AreSame(material2, output.Geometry[1].Material);\n\n            Assert.AreEqual(3, output.Positions.Count);\n            Assert.AreEqual(\"Mesh2\", output.Name);\n        }\n\n        [Test]\n        public void CannotCallCreateMethodsAfterAddingVertex()\n        {\n            var builder = MeshBuilder.StartMesh(\"Mesh1\");\n            builder.CreatePosition(new Vector3(0, 0, 0));\n            builder.AddTriangleVertex(0);\n            Assert.Throws<InvalidOperationException>(\n                () => builder.CreatePosition(new Vector3(1, 2, 3)));\n            Assert.Throws<InvalidOperationException>(\n                () => builder.CreateVertexChannel<Vector2>(VertexChannelNames.TextureCoordinate(0)));\n        }\n\n        [Test]\n        public void TestDefaultPropertyValues()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            Assert.IsFalse(mb.MergeDuplicatePositions);\n            Assert.IsFalse(mb.SwapWindingOrder);\n            Assert.AreEqual(0f, mb.MergePositionTolerance);\n        }\n\n        [Test]\n        public void CreateMeshWithoutMaterial()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n\n            CreatePositions(mb);\n            AddVertices(mb);\n\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(1, mesh.Geometry.Count);\n            var geom = mesh.Geometry[0];\n            Assert.IsNull(geom.Material);\n        }\n\n        [Test]\n        public void CreateEmptyMesh()\n        {\n            const string name = \"Test\";\n            var mb = MeshBuilder.StartMesh(name);\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(name, mesh.Name);\n            Assert.IsEmpty(mesh.Positions);\n            Assert.IsEmpty(mesh.Geometry);\n            Assert.IsEmpty(mesh.Animations);\n            Assert.IsEmpty(mesh.Children);\n            Assert.IsEmpty(mesh.OpaqueData);\n            Assert.AreEqual(Matrix.Identity, mesh.AbsoluteTransform);\n            Assert.AreEqual(Matrix.Identity, mesh.Transform);\n            Assert.IsNull(mesh.Parent);\n            Assert.IsNull(mesh.Identity);\n        }\n\n        [Test]\n        public void SetMaterialDoesNotClearChannels()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            var mat = new BasicMaterialContent();\n\n            mb.CreateVertexChannel<Vector2>(VertexChannelNames.TextureCoordinate(0));\n            mb.SetMaterial(mat);\n            Assert.DoesNotThrow(() => mb.SetVertexChannelData(0, Vector2.Zero));\n        }\n\n        [Test]\n        public void SetMaterialOrOpaqueDataCreatesNewGeometry()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            CreatePositions(mb);\n            AddVertices(mb);\n\n            var d1 = new OpaqueDataDictionary {{\"Name\", \"Data1\"}};\n            mb.SetOpaqueData(d1);\n            AddVertices(mb);\n            \n            mb.SetMaterial(material1);\n            AddVertices(mb);\n\n            var d2 = new OpaqueDataDictionary {{\"Name\", \"Data2\"}};\n            mb.SetOpaqueData(d2);\n            AddVertices(mb);\n\n            mb.SetMaterial(material2);\n            AddVertices(mb);\n\n            // this one won't get added because we don't add any vertices anymore\n            var d3 = new OpaqueDataDictionary {{\"Name\", \"Data3\"}};\n            mb.SetOpaqueData(d3);\n\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(5, mesh.Geometry.Count);\n\n            Assert.IsNull(mesh.Geometry[0].Material);\n            Assert.IsEmpty(mesh.Geometry[0].OpaqueData);\n\n            Assert.IsNull(mesh.Geometry[1].Material);\n            Assert.AreEqual(d1, mesh.Geometry[1].OpaqueData);\n            Assert.AreNotSame(d1, mesh.Geometry[1].OpaqueData);\n\n            Assert.AreSame(material1, mesh.Geometry[2].Material);\n            Assert.AreEqual(d1, mesh.Geometry[2].OpaqueData);\n            Assert.AreNotSame(d1, mesh.Geometry[2].OpaqueData);\n\n            Assert.AreSame(material1, mesh.Geometry[3].Material);\n            Assert.AreEqual(d2, mesh.Geometry[3].OpaqueData);\n            Assert.AreNotSame(d2, mesh.Geometry[3].OpaqueData);\n\n            Assert.AreSame(material2, mesh.Geometry[4].Material);\n            Assert.AreEqual(d2, mesh.Geometry[4].OpaqueData);\n            Assert.AreNotSame(d2, mesh.Geometry[4].OpaqueData);\n        }\n\n        [Test]\n        public void DuplicateGeometryIsOnlyAddedOnce()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            CreatePositions(mb);\n\n            mb.SetMaterial(material1);\n            var d1 = new OpaqueDataDictionary {{\"Name\", \"Data1\"}};\n            mb.SetOpaqueData(d1);\n            AddVertices(mb);\n\n            mb.SetMaterial(material1);\n            mb.SetOpaqueData(d1);\n            AddVertices(mb);\n\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(1, mesh.Geometry.Count);\n            Assert.AreSame(material1, mesh.Geometry[0].Material);\n        }\n\n        [Test]\n        public void EmptyGeometryIsNotAdded()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            CreatePositions(mb);\n\n            var d2 = new OpaqueDataDictionary {{\"Name\", \"Data2\"}};\n            mb.SetOpaqueData(d2);\n            var d1 = new OpaqueDataDictionary {{\"Name\", \"Data1\"}};\n            mb.SetOpaqueData(d1);\n            mb.SetMaterial(material1);\n            AddVertices(mb);\n\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(1, mesh.Geometry.Count);\n            Assert.AreEqual(d1, mesh.Geometry[0].OpaqueData);\n            Assert.AreEqual(material1, mesh.Geometry[0].Material);\n        }\n\n        [Test]\n        public void SetChannelData()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            mb.SetMaterial(material1);\n\n            var channelIndex = mb.CreateVertexChannel<Vector2>(VertexChannelNames.TextureCoordinate(0));\n            var p1 = mb.CreatePosition(0f, 0f, 0f);\n            var p2 = mb.CreatePosition(1f, 0f, 0f);\n            var p3 = mb.CreatePosition(0f, 1f, 0f);\n            var t1 = Vector2.Zero;\n            var t2 = Vector2.UnitX;\n            var t3 = Vector2.UnitY;\n\n            // this should be overwritten by the next call\n            mb.SetVertexChannelData(channelIndex, t3);\n            mb.SetVertexChannelData(channelIndex, t1);\n\n            // setting the material here should not reset the channel data\n            mb.SetMaterial(material2);\n\n            mb.AddTriangleVertex(p1);\n            mb.SetVertexChannelData(channelIndex, t2);\n            mb.AddTriangleVertex(p2);\n            mb.SetVertexChannelData(channelIndex, t3);\n            mb.AddTriangleVertex(p3);\n\n            var mesh = mb.FinishMesh();\n            var geom = mesh.Geometry[0];\n            var texChannel = geom.Vertices.Channels[channelIndex];\n            Assert.AreEqual(t1, texChannel[0]);\n            Assert.AreEqual(t2, texChannel[1]);\n            Assert.AreEqual(t3, texChannel[2]);\n        }\n\n        // XNA sets the default value for the channel data for a value type channel\n        // and to null for a reference type. This will cause a NullReferenceException when you try \n        // to finish the mesh. MonoGame only allows value types.\n        [Test]\n        public void MissingChannelData()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            mb.SetMaterial(material1);\n\n            var channelIndex = mb.CreateVertexChannel<Vector2>(VertexChannelNames.TextureCoordinate(0));\n            var p1 = mb.CreatePosition(0f, 0f, 0f);\n            var p2 = mb.CreatePosition(1f, 0f, 0f);\n            var p3 = mb.CreatePosition(0f, 1f, 0f);\n\n            mb.AddTriangleVertex(p1);\n            mb.AddTriangleVertex(p2);\n            mb.AddTriangleVertex(p3);\n\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(default(Vector2), mesh.Geometry[0].Vertices.Channels[channelIndex][0]);\n            Assert.AreEqual(default(Vector2), mesh.Geometry[0].Vertices.Channels[channelIndex][1]);\n            Assert.AreEqual(default(Vector2), mesh.Geometry[0].Vertices.Channels[channelIndex][2]);\n        }\n\n        [Test]\n        public void OnlyUseOnce()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            var mat = new BasicMaterialContent();\n\n            mb.CreateVertexChannel<Vector2>(VertexChannelNames.TextureCoordinate(0));\n            mb.CreatePosition(0f, 0f, 0f);\n\n            var mesh = mb.FinishMesh();\n            Assert.DoesNotThrow(() => mb.SetMaterial(mat));\n            Assert.DoesNotThrow(() => mb.SetVertexChannelData(0, Vector2.Zero));\n            Assert.AreSame(mesh, mb.FinishMesh());\n\n            Assert.Throws<InvalidOperationException>(() => mb.CreatePosition(1f, 2f, 3f));\n            Assert.Throws<InvalidOperationException>(() => mb.AddTriangleVertex(0));\n            Assert.Throws<InvalidOperationException>(() => mb.CreateVertexChannel<Vector2>(VertexChannelNames.TextureCoordinate(1)));\n        }\n\n        [TestCase(true)]\n        [TestCase(false)]\n        public void DoNotMergePositionsUntilFinish(bool value)\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            mb.SetMaterial(material1);\n            mb.MergePositionTolerance = 5f;\n\n            var i = mb.CreatePosition(new Vector3(0f, 0f, 0f));\n            // this should be out of range.\n            Assert.AreNotEqual(i, mb.CreatePosition(new Vector3(4f, 4f, 4f)));\n            Assert.AreNotEqual(i, mb.CreatePosition(new Vector3(-1f, -1f, -1f)));\n\n            mb.MergeDuplicatePositions = value;\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(value ? 2 : 3, mesh.Positions.Count);\n        }\n\n        [Test]\n        public void MergeVertices()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            mb.MergeDuplicatePositions = true;\n            mb.MergePositionTolerance = 0.2f;\n            mb.SetMaterial(material1);\n\n            // add positions twice, they should get merged too\n            CreatePositions(mb);\n            CreatePositions(mb);\n\n            var channel = mb.CreateVertexChannel<float>(VertexChannelNames.TextureCoordinate(0));\n            object[] channelData1 = { 10f, 11f, 12f };\n            object[] channelData2 = { 20f, 21f, 22f };\n\n            var currentChannelData = channelData1;\n\n            const int iterations = 10;\n            for (var i = 0; i < iterations; i++)\n            {\n                if (currentChannelData == channelData1)\n                {\n                    currentChannelData = channelData2;\n                    AddVertices(mb, channel, currentChannelData);\n                }\n                else\n                {\n                    currentChannelData = channelData1;\n                    AddVertices(mb, channel, currentChannelData, 3);\n                }\n            }\n\n            var mesh = mb.FinishMesh();\n            var geom = mesh.Geometry[0];\n            Assert.AreEqual(3 * iterations, geom.Indices.Count);\n            Assert.AreEqual(6, geom.Vertices.VertexCount);\n        }\n\n        [Test]\n        public void RemoveVertices()\n        {\n            MeshContent output;\n            \n            output = CreateBasicMesh(material1);\n            Assert.Throws<ArgumentOutOfRangeException>(() => output.Geometry[0].Vertices.RemoveAt(-1));\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n            Assert.Throws<ArgumentOutOfRangeException>(() => output.Geometry[0].Vertices.RemoveAt(3));\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n            Assert.Throws<ArgumentOutOfRangeException>(() => output.Geometry[0].Vertices.RemoveRange(-1,1));\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n            Assert.Throws<ArgumentOutOfRangeException>(() => output.Geometry[0].Vertices.RemoveRange(0,-1));\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n            Assert.Throws<ArgumentOutOfRangeException>(() => output.Geometry[0].Vertices.RemoveRange(0,4));\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n            Assert.Throws<ArgumentOutOfRangeException>(() => output.Geometry[0].Vertices.RemoveRange(3, 1));\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n            Assert.Throws<ArgumentOutOfRangeException>(() => output.Geometry[0].Vertices.RemoveRange(4, 0));\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n\n            // NOTE: XNA seems to have a bug where you can specifiy one pased\n            // the last index when removing a range of zero.  We fixed this in MG.\n#if !XNA\n            Assert.Throws<ArgumentOutOfRangeException>(() => output.Geometry[0].Vertices.RemoveRange(3, 0));\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n#endif\n\n            // RemoveAt(1)\n            output = CreateBasicMesh(material1);\n            output.Geometry[0].Vertices.RemoveAt(1);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.VertexCount);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.Positions.Count);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices.Count);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.Channels[0].Count);\n            Assert.AreEqual(new Vector3(0, 0, 0), output.Geometry[0].Vertices.Positions[0]);\n            Assert.AreEqual(new Vector3(1, 1, 1), output.Geometry[0].Vertices.Positions[1]);\n            Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices[0]);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices[1]);\n\n            // RemoveRange(0, 0)\n            output = CreateBasicMesh(material1);\n            output.Geometry[0].Vertices.RemoveRange(0, 0);\n            Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount);\n            Assert.AreEqual(3, output.Geometry[0].Vertices.Positions.Count);\n            Assert.AreEqual(3, output.Geometry[0].Vertices.PositionIndices.Count);\n            Assert.AreEqual(3, output.Geometry[0].Vertices.Channels[0].Count);\n            Assert.AreEqual(new Vector3(0, 0, 0), output.Geometry[0].Vertices.Positions[0]);\n            Assert.AreEqual(new Vector3(1, 0, 0), output.Geometry[0].Vertices.Positions[1]);\n            Assert.AreEqual(new Vector3(1, 1, 1), output.Geometry[0].Vertices.Positions[2]);\n            Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices[0]);\n            Assert.AreEqual(1, output.Geometry[0].Vertices.PositionIndices[1]);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices[2]);\n\n            // RemoveRange(0, 1)\n            output = CreateBasicMesh(material1);\n            output.Geometry[0].Vertices.RemoveRange(0, 1);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.VertexCount);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.Positions.Count);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices.Count);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.Channels[0].Count);\n            Assert.AreEqual(new Vector3(1, 0, 0), output.Geometry[0].Vertices.Positions[0]);\n            Assert.AreEqual(new Vector3(1, 1, 1), output.Geometry[0].Vertices.Positions[1]);\n            Assert.AreEqual(1, output.Geometry[0].Vertices.PositionIndices[0]);\n            Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices[1]);\n\n            // RemoveRange(1, 2)\n            output = CreateBasicMesh(material1);\n            output.Geometry[0].Vertices.RemoveRange(1, 2);\n            Assert.AreEqual(1, output.Geometry[0].Vertices.VertexCount);\n            Assert.AreEqual(1, output.Geometry[0].Vertices.Positions.Count);\n            Assert.AreEqual(1, output.Geometry[0].Vertices.PositionIndices.Count);\n            Assert.AreEqual(1, output.Geometry[0].Vertices.Channels[0].Count);\n            Assert.AreEqual(new Vector3(0, 0, 0), output.Geometry[0].Vertices.Positions[0]);\n            Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices[0]);\n\n            // RemoveRange(0, 3)\n            output = CreateBasicMesh(material1);\n            output.Geometry[0].Vertices.RemoveRange(0, 3);\n            Assert.AreEqual(0, output.Geometry[0].Vertices.VertexCount);\n            Assert.AreEqual(0, output.Geometry[0].Vertices.Positions.Count);\n            Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices.Count);\n            Assert.AreEqual(0, output.Geometry[0].Vertices.Channels[0].Count);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/MeshHelperTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    public class MeshHelperTest\n    {\n        private readonly BasicMaterialContent material1 = new BasicMaterialContent\n        {\n            Name = \"Material1\",\n            Alpha = 0.5f,\n            DiffuseColor = Color.Red.ToVector3(),\n            VertexColorEnabled = true,\n        };\n\n        private readonly BasicMaterialContent material2 = new BasicMaterialContent\n        {\n            Name = \"Material2\",\n            Alpha = 0.5f,\n            DiffuseColor = Color.Blue.ToVector3(),\n            VertexColorEnabled = true,\n        };\n\n\n        [Test]\n        public void TestMergePositions()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n            mb.SetMaterial(material1);\n            mb.CreatePosition(new Vector3(0f, 0f, 0f));\n            mb.CreatePosition(new Vector3(4f, 4f, 4f));\n            mb.CreatePosition(new Vector3(-1f, -1f, -1f));\n\n            mb.AddTriangleVertex(0);\n            mb.AddTriangleVertex(1);\n            mb.AddTriangleVertex(2);\n\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(3, mesh.Positions.Count);\n\n            MeshHelper.MergeDuplicatePositions(mesh, 5f);\n            Assert.AreEqual(2, mesh.Positions.Count);\n\n            var geom = mesh.Geometry[0];\n            Assert.AreEqual(3, geom.Vertices.Positions.Count);\n            Assert.AreEqual(3, geom.Vertices.PositionIndices.Count);\n            Assert.AreEqual(0, geom.Vertices.PositionIndices[0]);\n            Assert.AreEqual(1, geom.Vertices.PositionIndices[1]);\n            Assert.AreEqual(0, geom.Vertices.PositionIndices[2]);\n        }\n\n        static void AddTriangle(MeshBuilder meshBuilder, int a, int b, int c)\n        {\n            meshBuilder.AddTriangleVertex(a);\n            meshBuilder.AddTriangleVertex(b);\n            meshBuilder.AddTriangleVertex(c);\n        }\n\n        [Test]\n        public void TestNormalGeneration()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n\n            // A 5x5 grid of points around the origin, with the centerpoint raised a bit.\n            mb.CreatePosition(new Vector3(-2, 0, -2));\n            mb.CreatePosition(new Vector3(-1, 0, -2));\n            mb.CreatePosition(new Vector3( 0, 0, -2));\n            mb.CreatePosition(new Vector3(+1, 0, -2));\n            mb.CreatePosition(new Vector3(+2, 0, -2));\n            mb.CreatePosition(new Vector3(-2, 0, -1));\n            mb.CreatePosition(new Vector3(-1, 0, -1));\n            mb.CreatePosition(new Vector3( 0, 0, -1));\n            mb.CreatePosition(new Vector3(+1, 0, -1));\n            mb.CreatePosition(new Vector3(+2, 0, -1));\n            mb.CreatePosition(new Vector3(-2, 0,  0));\n            mb.CreatePosition(new Vector3(-1, 0,  0));\n            mb.CreatePosition(new Vector3( 0,0.5f,0)); // The bump in the center.\n            mb.CreatePosition(new Vector3(+1, 0,  0));\n            mb.CreatePosition(new Vector3(+2, 0,  0));\n            mb.CreatePosition(new Vector3(-2, 0, +1));\n            mb.CreatePosition(new Vector3(-1, 0, +1));\n            mb.CreatePosition(new Vector3( 0, 0, +1));\n            mb.CreatePosition(new Vector3(+1, 0, +1));\n            mb.CreatePosition(new Vector3(+2, 0, +1));\n            mb.CreatePosition(new Vector3(-2, 0, +2));\n            mb.CreatePosition(new Vector3(-1, 0, +2));\n            mb.CreatePosition(new Vector3( 0, 0, +2));\n            mb.CreatePosition(new Vector3(+1, 0, +2));\n            mb.CreatePosition(new Vector3(+2, 0, +2));\n\n            // Create triangles like this, starting with the quad in the bottom left, then\n            // bottom right, then top left, then top right, doing the bottom/right-most triangle\n            // first in each quad.\n            // 20--21--22--23--24\n            // | / | / | / | / |\n            // 15--16--17--18--19\n            // | / | / | / | / |\n            // 10--11--12--13--14\n            // | / | / | / | / |\n            // 5---6---7---8---9\n            // | / | / | / | / |\n            // 0---1---2---3---4\n            // In this diagram, horizontal is the x-axis, vertical is the z-axis, and the y-axis\n            // comes out of the screen.\n            AddTriangle(mb,  0,  1,  6); AddTriangle(mb,  0,  6,  5);\n            AddTriangle(mb,  1,  2,  7); AddTriangle(mb,  1,  7,  6);\n            AddTriangle(mb,  2,  3,  8); AddTriangle(mb,  2,  8,  7);\n            AddTriangle(mb,  3,  4,  9); AddTriangle(mb,  3,  9,  8);\n\n            AddTriangle(mb,  5,  6, 11); AddTriangle(mb,  5, 11, 10);\n            AddTriangle(mb,  6,  7, 12); AddTriangle(mb,  6, 12, 11);\n            AddTriangle(mb,  7,  8, 13); AddTriangle(mb,  7, 13, 12);\n            AddTriangle(mb,  8,  9, 14); AddTriangle(mb,  8, 14, 13);\n\n            AddTriangle(mb, 10, 11, 16); AddTriangle(mb, 10, 16, 15);\n            AddTriangle(mb, 11, 12, 17); AddTriangle(mb, 11, 17, 16);\n            AddTriangle(mb, 12, 13, 18); AddTriangle(mb, 12, 18, 17);\n            AddTriangle(mb, 13, 14, 19); AddTriangle(mb, 13, 19, 18);\n\n            AddTriangle(mb, 15, 16, 21); AddTriangle(mb, 15, 21, 20);\n            AddTriangle(mb, 16, 17, 22); AddTriangle(mb, 16, 22, 21);\n            AddTriangle(mb, 17, 18, 23); AddTriangle(mb, 17, 23, 22);\n            AddTriangle(mb, 18, 19, 24); AddTriangle(mb, 18, 24, 23);\n\n            MeshContent meshContent = mb.FinishMesh();\n\n            // The MergeDuplicateVertices code has reordered these (without merging anything,\n            // since they're all different positions), and the new numbering is the order they\n            // appeared in the actual indexing:\n            // 21--20--22--23--24\n            // | / | / | / | / |\n            // 16--15--17--18--19\n            // | / | / | / | / |\n            // 11--10--12--13--14\n            // | / | / | / | / |\n            // 3---2---5---7---9\n            // | / | / | / | / |\n            // 0---1---4---6---8\n\n            // At this point, the positions are now reordered, but we can assert that their positions\n            // are right.\n            var vertexPositions = meshContent.Geometry[0].Vertices.Positions;\n            Assert.AreEqual(new Vector3(-2, 0, -2), vertexPositions[ 0]);\n            Assert.AreEqual(new Vector3(-1, 0, -2), vertexPositions[ 1]);\n            Assert.AreEqual(new Vector3(-1, 0, -1), vertexPositions[ 2]);\n            Assert.AreEqual(new Vector3(-2, 0, -1), vertexPositions[ 3]);\n            Assert.AreEqual(new Vector3( 0, 0, -2), vertexPositions[ 4]);\n            Assert.AreEqual(new Vector3( 0, 0, -1), vertexPositions[ 5]);\n            Assert.AreEqual(new Vector3(+1, 0, -2), vertexPositions[ 6]);\n            Assert.AreEqual(new Vector3(+1, 0, -1), vertexPositions[ 7]);\n            Assert.AreEqual(new Vector3(+2, 0, -2), vertexPositions[ 8]);\n            Assert.AreEqual(new Vector3(+2, 0, -1), vertexPositions[ 9]);\n            Assert.AreEqual(new Vector3(-1, 0,  0), vertexPositions[10]);\n            Assert.AreEqual(new Vector3(-2, 0,  0), vertexPositions[11]);\n            Assert.AreEqual(new Vector3( 0,0.5f,0), vertexPositions[12]);\n            Assert.AreEqual(new Vector3(+1, 0,  0), vertexPositions[13]);\n            Assert.AreEqual(new Vector3(+2, 0,  0), vertexPositions[14]);\n            Assert.AreEqual(new Vector3(-1, 0,  1), vertexPositions[15]);\n            Assert.AreEqual(new Vector3(-2, 0,  1), vertexPositions[16]);\n            Assert.AreEqual(new Vector3( 0, 0,  1), vertexPositions[17]);\n            Assert.AreEqual(new Vector3(+1, 0,  1), vertexPositions[18]);\n            Assert.AreEqual(new Vector3(+2, 0,  1), vertexPositions[19]);\n            Assert.AreEqual(new Vector3(-1, 0,  2), vertexPositions[20]);\n            Assert.AreEqual(new Vector3(-2, 0,  2), vertexPositions[21]);\n            Assert.AreEqual(new Vector3( 0, 0,  2), vertexPositions[22]);\n            Assert.AreEqual(new Vector3(+1, 0,  2), vertexPositions[23]);\n            Assert.AreEqual(new Vector3(+2, 0,  2), vertexPositions[24]);\n\n            var normalsChannel = meshContent.Geometry[0].Vertices.Channels.Get<Vector3>(VertexChannelNames.Normal());\n            // All of the points around the edge should be pointed up. Some of the ones on the interior will be affected\n            // by the center point being shifted up, so we won't check those.\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[ 0]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[ 1]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[ 4]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[ 6]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[ 8]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[ 9]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[14]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[19]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[24]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[23]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[22]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[20]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[21]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[16]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[11]);\n            Assert.AreEqual(Vector3.UnitY, normalsChannel[ 3]);\n        }\n\n        [Test]\n        public void TestMergePositionsMultipleGeometries()\n        {\n            var mb = MeshBuilder.StartMesh(\"Test\");\n\n            mb.CreatePosition(new Vector3(0f, 0f, 0f));\n            mb.CreatePosition(new Vector3(1f, 1f, 1f));\n            mb.CreatePosition(new Vector3(2f, 2f, 2f));\n            mb.CreatePosition(new Vector3(0f, 0f, 0f));\n            mb.CreatePosition(new Vector3(1f, 1f, 1f));\n            mb.CreatePosition(new Vector3(2f, 2f, 2f));\n\n            mb.SetMaterial(material1);\n\n            mb.AddTriangleVertex(2);\n            mb.AddTriangleVertex(1);\n            mb.AddTriangleVertex(0);\n            mb.AddTriangleVertex(5);\n            mb.AddTriangleVertex(4);\n            mb.AddTriangleVertex(3);\n\n            mb.SetMaterial(material2);\n            mb.AddTriangleVertex(5);\n            mb.AddTriangleVertex(4);\n            mb.AddTriangleVertex(3);\n\n            var mesh = mb.FinishMesh();\n            Assert.AreEqual(6, mesh.Positions.Count);\n\n            MeshHelper.MergeDuplicatePositions(mesh, 1f);\n            Assert.AreEqual(3, mesh.Positions.Count);\n\n            var geom = mesh.Geometry[0];\n            Assert.AreEqual(6, geom.Vertices.Positions.Count);\n            Assert.AreEqual(6, geom.Vertices.PositionIndices.Count);\n            Assert.AreEqual(2, geom.Vertices.PositionIndices[0]);\n            Assert.AreEqual(1, geom.Vertices.PositionIndices[1]);\n            Assert.AreEqual(0, geom.Vertices.PositionIndices[2]);\n            Assert.AreEqual(2, geom.Vertices.PositionIndices[0]);\n            Assert.AreEqual(1, geom.Vertices.PositionIndices[1]);\n            Assert.AreEqual(0, geom.Vertices.PositionIndices[2]);\n\n            geom = mesh.Geometry[1];\n            Assert.AreEqual(3, geom.Vertices.Positions.Count);\n            Assert.AreEqual(3, geom.Vertices.PositionIndices.Count);\n            Assert.AreEqual(2, geom.Vertices.PositionIndices[0]);\n            Assert.AreEqual(1, geom.Vertices.PositionIndices[1]);\n            Assert.AreEqual(0, geom.Vertices.PositionIndices[2]);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/ModelProcessorTests.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class ModelProcessorTests\n    {\n        private NodeContent CreateBasicMesh()\n        {\n            var input = new NodeContent\n            {\n                Name = \"Root\",\n                Identity = new ContentIdentity(\"dummy\", GetType().Name),\n                Transform = Matrix.CreateRotationZ(MathHelper.ToRadians(60)) *\n                            Matrix.CreateRotationX(MathHelper.ToRadians(40)) *\n                            Matrix.CreateRotationY(MathHelper.ToRadians(50)),\n            };\n\n            {\n                var mesh = new MeshContent()\n                {\n                    Name = \"Mesh1\",\n                    Transform = Matrix.Identity,\n                };\n                var geom = new GeometryContent()\n                {\n                    Name = \"Geom1\",\n                };\n                mesh.Geometry.Add(geom);\n                input.Children.Add(mesh);\n            }\n\n            {\n                var mesh2 = new MeshContent()\n                {\n                    Name = \"Mesh2\",\n                    Transform = Matrix.Identity,\n                };\n                mesh2.Positions.Add(new Vector3(0, 0, 0));\n                mesh2.Positions.Add(new Vector3(1, 0, 0));\n                mesh2.Positions.Add(new Vector3(1, 1, 1));\n\n                var material = new BasicMaterialContent\n                {\n                    Name = \"Material1\",\n                    Alpha = 0.5f,\n                    DiffuseColor = Color.Red.ToVector3(),\n                    VertexColorEnabled = true,\n                };\n\n                var geom2 = new GeometryContent()\n                {\n                    Name = \"Geom2\",\n                    Material = material,\n                };\n                geom2.Vertices.Add(0);\n                geom2.Vertices.Add(1);\n                geom2.Vertices.Add(2);\n                geom2.Indices.Add(0);\n                geom2.Indices.Add(1);\n                geom2.Indices.Add(2);\n\n                mesh2.Geometry.Add(geom2);\n                input.Children.Add(mesh2);\n            }\n\n            return input;\n        }\n\n        [Test]\n        public void BasicMeshTests()\n        {\n            var input = CreateBasicMesh();\n\n            var processorContext = new TestProcessorContext(TargetPlatform.Windows, \"dummy.xnb\");\n            var processor = new ModelProcessor\n            {\n                RotationX = 10, \n                RotationY = 20,\n                RotationZ = 30\n            };\n            var output = processor.Process(input, processorContext);\n\n            // The transform the processor above is applying to the model.\n            var processorXform =    Matrix.CreateRotationZ(MathHelper.ToRadians(30))*\n                                    Matrix.CreateRotationX(MathHelper.ToRadians(10))*\n                                    Matrix.CreateRotationY(MathHelper.ToRadians(20));\n\n            // Test some basics.\n            Assert.NotNull(output);\n            Assert.NotNull(output.Meshes);\n            Assert.AreEqual(2, output.Meshes.Count);\n            Assert.NotNull(output.Bones);\n            Assert.AreEqual(3, output.Bones.Count);\n            Assert.NotNull(output.Root);\n            Assert.AreEqual(output.Root, output.Bones[0]);\n\n            // Stuff to make the tests below cleaner.\n            var inputMesh1 = input.Children[0] as MeshContent;\n            Assert.NotNull(inputMesh1);\n            var inputMesh2 = input.Children[1] as MeshContent;\n            Assert.NotNull(inputMesh2);\n\n            // Test the bones.\n            Assert.AreEqual(\"Root\", output.Bones[0].Name);\n            Assert.That(input.Transform, Is.EqualTo(output.Bones[0].Transform).Using(MatrixComparer.Epsilon));\n            Assert.AreEqual(\"Mesh1\", output.Bones[1].Name);\n            Assert.That(Matrix.Identity, Is.EqualTo(output.Bones[1].Transform).Using(MatrixComparer.Epsilon));\n            Assert.AreEqual(\"Mesh2\", output.Bones[2].Name);\n            Assert.That(Matrix.Identity, Is.EqualTo(output.Bones[2].Transform).Using(MatrixComparer.Epsilon));\n\n            // Test the first mesh.\n            {\n                var mesh = output.Meshes[0];\n                Assert.AreEqual(\"Mesh1\", mesh.Name);\n                Assert.AreEqual(output.Bones[1], mesh.ParentBone);\n                Assert.AreEqual(inputMesh1, mesh.SourceMesh);\n                Assert.AreEqual(new BoundingSphere(Vector3.Zero, 0), mesh.BoundingSphere);\n\n                Assert.NotNull(mesh.MeshParts);\n                Assert.AreEqual(1, mesh.MeshParts.Count);\n\n                var part = mesh.MeshParts[0];\n                Assert.NotNull(part);\n                Assert.IsNull(part.IndexBuffer);\n                Assert.IsNull(part.VertexBuffer);\n                Assert.AreEqual(0, part.NumVertices);\n                Assert.AreEqual(0, part.PrimitiveCount);\n                Assert.AreEqual(0, part.StartIndex);\n                Assert.AreEqual(0, part.VertexOffset);\n\n                Assert.IsAssignableFrom<BasicMaterialContent>(part.Material);\n                var material = part.Material as BasicMaterialContent;\n                Assert.NotNull(material);\n                Assert.IsNotEmpty(material.OpaqueData);\n                Assert.IsNull(material.Name);\n                Assert.IsNull(material.Identity);\n                Assert.IsNull(material.Alpha);\n                Assert.IsNull(material.DiffuseColor);\n                Assert.IsNull(material.EmissiveColor);\n                Assert.IsNull(material.SpecularColor);\n                Assert.IsNull(material.SpecularPower);\n                Assert.IsNull(material.Texture);\n                Assert.IsEmpty(material.Textures);\n                Assert.IsTrue(material.OpaqueData.ContainsKey(\"VertexColorEnabled\"));\n                Assert.IsNotNull(material.VertexColorEnabled);\n                Assert.IsFalse(material.VertexColorEnabled.Value);\n            }\n\n            // Test the second mesh.\n            {\n                var mesh = output.Meshes[1];\n                Assert.AreEqual(\"Mesh2\", mesh.Name);\n                Assert.AreEqual(output.Bones[2], mesh.ParentBone);\n                Assert.AreEqual(inputMesh2, mesh.SourceMesh);\n                Assert.That(new BoundingSphere(new Vector3(0.3809527f, 0.5858122f, 0.5115654f), 0.8660253f),\n                Is.EqualTo(mesh.BoundingSphere).Using(BoundingSphereComparer.Epsilon));\n\n                Assert.NotNull(mesh.MeshParts);\n                Assert.AreEqual(1, mesh.MeshParts.Count);\n\n                var part = mesh.MeshParts[0];\n                Assert.NotNull(part);\n                Assert.AreEqual(1, part.PrimitiveCount);\n                Assert.AreEqual(0, part.StartIndex);\n                Assert.AreEqual(0, part.VertexOffset);\n                Assert.AreEqual(3, part.NumVertices);\n                \n                Assert.NotNull(part.IndexBuffer);\n                Assert.AreEqual(3, part.IndexBuffer.Count);\n                Assert.AreEqual(0, part.IndexBuffer[0]);\n                Assert.AreEqual(1, part.IndexBuffer[1]);\n                Assert.AreEqual(2, part.IndexBuffer[2]);\n\n                Assert.NotNull(part.VertexBuffer);\n                Assert.NotNull(part.VertexBuffer.VertexData);\n                var vertexData = part.VertexBuffer.VertexData;\n                Assert.AreEqual(36, vertexData.Length);\n                var positionArray = ArrayUtil.ConvertTo<Vector3>(vertexData);\n                Assert.AreEqual(3, positionArray.Length);\n                Assert.AreEqual(Vector3.Transform(new Vector3(0, 0, 0), processorXform), positionArray[0]);\n                Assert.AreEqual(Vector3.Transform(new Vector3(1, 0, 0), processorXform), positionArray[1]);\n                Assert.AreEqual(Vector3.Transform(new Vector3(1, 1, 1), processorXform), positionArray[2]);\n\n                Assert.IsAssignableFrom<BasicMaterialContent>(part.Material);\n                var material = part.Material as BasicMaterialContent;\n                Assert.NotNull(material);\n                Assert.IsNotEmpty(material.OpaqueData);\n                Assert.AreEqual(\"Material1\", material.Name);\n                Assert.IsNull(material.Identity);\n                Assert.IsTrue(material.OpaqueData.ContainsKey(\"Alpha\"));\n                Assert.NotNull(material.Alpha);\n                Assert.AreEqual(0.5f, material.Alpha.Value);\n                Assert.IsTrue(material.OpaqueData.ContainsKey(\"DiffuseColor\"));\n                Assert.NotNull(material.DiffuseColor);\n                Assert.AreEqual(Color.Red.ToVector3(), material.DiffuseColor.Value);\n                Assert.IsNull(material.EmissiveColor);\n                Assert.IsNull(material.SpecularColor);\n                Assert.IsNull(material.SpecularPower);\n                Assert.IsNull(material.Texture);\n                Assert.IsEmpty(material.Textures);\n                Assert.IsTrue(material.OpaqueData.ContainsKey(\"VertexColorEnabled\"));\n                Assert.IsNotNull(material.VertexColorEnabled);\n                Assert.IsFalse(material.VertexColorEnabled.Value);\n            }\n        }\n\n        [Test]\n        public void DefaultEffectTest()\n        {\n            NodeContent input;\n            {\n                input = new NodeContent();\n\n                var mesh = new MeshContent()\n                {\n                    Name = \"Mesh1\"\n                };\n                mesh.Positions.Add(new Vector3(0, 0, 0));\n                mesh.Positions.Add(new Vector3(1, 0, 0));\n                mesh.Positions.Add(new Vector3(1, 1, 1));\n\n                var geom = new GeometryContent();\n                geom.Vertices.Add(0);\n                geom.Vertices.Add(1);\n                geom.Vertices.Add(2);\n                geom.Indices.Add(0);\n                geom.Indices.Add(1);\n                geom.Indices.Add(2);\n\n                geom.Vertices.Channels.Add(VertexChannelNames.TextureCoordinate(0), new[]\n                {\n                    new Vector2(0,0),\n                    new Vector2(1,0),\n                    new Vector2(1,1),\n                });\n\n                var wieghts = new BoneWeightCollection();\n                wieghts.Add(new BoneWeight(\"bone1\", 0.5f));\n                geom.Vertices.Channels.Add(VertexChannelNames.Weights(0), new[]\n                {\n                    wieghts, \n                    wieghts, \n                    wieghts\n                });\n\n                mesh.Geometry.Add(geom);\n                input.Children.Add(mesh);\n\n                var bone1 = new BoneContent { Name = \"bone1\", Transform = Matrix.CreateTranslation(0,1,0) };\n                input.Children.Add(bone1);\n\n                var anim = new AnimationContent()\n                {\n                    Name = \"anim1\",\n                    Duration = TimeSpan.Zero\n                };\n                input.Animations.Add(anim.Name, anim);\n            }\n\n            var processorContext = new TestProcessorContext(TargetPlatform.Windows, \"dummy.xnb\");\n            var processor = new ModelProcessor\n            {\n                DefaultEffect = MaterialProcessorDefaultEffect.SkinnedEffect,                \n            };\n\n            var output = processor.Process(input, processorContext);\n\n            // TODO: Not sure why, but XNA always returns a BasicMaterialContent \n            // even when we specify SkinnedEffect as the default.  We need to fix\n            // the test first before we can enable the assert here.\n\n            //Assert.IsInstanceOf(typeof(SkinnedMaterialContent), output.Meshes[0].MeshParts[0].Material);\n        }\n    }\n}"
  },
  {
    "path": "Tests/ContentPipeline/Mp3ImporterTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class Mp3ImporterTests\n    {\n        [Test]\n        public void Arguments()\n        {\n            var context = new TestImporterContext(\"TestObj\", \"TestBin\");\n            Assert.Throws<ArgumentNullException>(() => new Mp3Importer().Import(null, context));\n            Assert.Throws<ArgumentNullException>(() => new Mp3Importer().Import(\"\", context));\n            Assert.Throws<ArgumentNullException>(() => new Mp3Importer().Import(@\"Assets/Audio/rock_loop_stereo.mp3\", null));\n            Assert.Throws<FileNotFoundException>(() => new Mp3Importer().Import(@\"this\\does\\not\\exist.mp3\", context));\n        }\n\n        public void InvalidFormat()\n        {\n            Assert.Throws<InvalidContentException>(() => new Mp3Importer().Import(@\"Assets/Audio/rock_loop_stereo.wav\", new TestImporterContext(\"TestObj\", \"TestBin\")));\n        }\n\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.mp3\", 2, 176400, 44100, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wma\", 2, 176400, 44100, 16, 4)]\n        public void Import(string sourceFile, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign)\n        {\n            var content = new Mp3Importer().Import(sourceFile, new TestImporterContext(\"TestObj\", \"TestBin\"));\n\n            Assert.AreEqual(1, content.Format.Format);\n            Assert.AreEqual(channels, content.Format.ChannelCount);\n            Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond);\n            Assert.AreEqual(sampleRate, content.Format.SampleRate);\n            Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample);\n            Assert.AreEqual(blockAlign, content.Format.BlockAlign);\n\n            content.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/OggImporterTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class OggImporterTests\n    {\n        [Test]\n        public void Arguments()\n        {\n            var context = new TestImporterContext(\"TestObj\", \"TestBin\");\n            Assert.Throws<ArgumentNullException>(() => new OggImporter().Import(null, context));\n            Assert.Throws<ArgumentNullException>(() => new OggImporter().Import(\"\", context));\n            Assert.Throws<ArgumentNullException>(() => new OggImporter().Import(@\"Assets/Audio/rock_loop_stereo.ogg\", null));\n            Assert.Throws<FileNotFoundException>(() => new OggImporter().Import(@\"this\\does\\not\\exist.ogg\", context));\n        }\n\n        public void InvalidFormat()\n        {\n            Assert.Throws<InvalidContentException>(() => new OggImporter().Import(@\"Assets/Audio/rock_loop_stereo.wav\", new TestImporterContext(\"TestObj\", \"TestBin\")));\n        }\n\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.ogg\", 2, 176400, 44100, 16, 4)]\n        public void Import(string sourceFile, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign)\n        {\n            var content = new OggImporter().Import(sourceFile, new TestImporterContext(\"TestObj\", \"TestBin\"));\n\n            Assert.AreEqual(1, content.Format.Format);\n            Assert.AreEqual(channels, content.Format.ChannelCount);\n            Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond);\n            Assert.AreEqual(sampleRate, content.Format.SampleRate);\n            Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample);\n            Assert.AreEqual(blockAlign, content.Format.BlockAlign);\n\n            content.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/OpenAssetImporterTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing NUnit.Framework;\nusing System.IO;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class OpenAssetImporterTests\n    {\n        [Test]\n        public void Arguments()\n        {\n            var context = new TestImporterContext(\"TestObj\", \"TestBin\");\n            var importer = new OpenAssetImporter();\n\n            Assert.Throws<ArgumentNullException>(() => importer.Import(null, context));\n            Assert.Throws<FileNotFoundException>(() => importer.Import(\"does_not_exist\", context));\n            Assert.Throws<ArgumentNullException>(() => importer.Import(\"file\", null));\n        }\n\n        [Test]\n        public void BlenderTests()\n        {\n            var context = new TestImporterContext(\"TestObj\", \"TestBin\");\n            var importer = new OpenAssetImporter();\n\n            var nodeContent = importer.Import(\"Assets/Models/Box.blend\", context);\n\n            Assert.NotNull(nodeContent);\n            Assert.AreEqual(\"Cube\", nodeContent.Name);\n            Assert.AreEqual(0, nodeContent.Children.Count);\n            Assert.AreEqual(Matrix.Identity, nodeContent.Transform);\n            Assert.AreEqual(Matrix.Identity, nodeContent.AbsoluteTransform);\n            Assert.NotNull(nodeContent.Parent);\n            Assert.AreEqual(\"<BlenderRoot>\", nodeContent.Parent.Name);\n\n            var meshContent = nodeContent as MeshContent;\n            Assert.NotNull(meshContent);\n            Assert.AreEqual(1, meshContent.Geometry.Count);\n            Assert.AreEqual(0, meshContent.Animations.Count);\n            Assert.AreEqual(28, meshContent.Positions.Count);\n\n            var geometry = meshContent.Geometry[0];\n            Assert.IsNull(geometry.Name);\n            Assert.AreEqual(108, geometry.Indices.Count);\n            Assert.AreEqual(28, geometry.Vertices.VertexCount);\n\n            Assert.IsNotNull(geometry.Material);\n            Assert.AreEqual(\"Material\", geometry.Material.Name);\n            Assert.AreEqual(5, geometry.Material.OpaqueData.Count);\n            Assert.AreEqual(new Vector3(1.65732033E-07f, 1, 0), geometry.Material.OpaqueData[\"DiffuseColor\"]);\n            Assert.AreEqual(Vector3.Zero, geometry.Material.OpaqueData[\"AmbientColor\"]);\n            Assert.AreEqual(Vector3.One, geometry.Material.OpaqueData[\"ReflectiveColor\"]);\n            Assert.AreEqual(Vector3.One, geometry.Material.OpaqueData[\"SpecularColor\"]);\n            Assert.AreEqual(50.0f, geometry.Material.OpaqueData[\"Shininess\"]);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/TestCompiler.cs",
    "content": "﻿using Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\nusing Microsoft.Xna.Framework.Graphics;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class TestCompiler\n    {\n        class TestContentManager : ContentManager\n        {\n            class FakeGraphicsService : IGraphicsDeviceService\n            {\n                public GraphicsDevice GraphicsDevice { get; private set; }\n\n#pragma warning disable 67\n                public event EventHandler<EventArgs> DeviceCreated;\n                public event EventHandler<EventArgs> DeviceDisposing;\n                public event EventHandler<EventArgs> DeviceReset;\n                public event EventHandler<EventArgs> DeviceResetting;\n#pragma warning restore 67\n            }\n\n            class FakeServiceProvider : IServiceProvider\n            {\n                public object GetService(Type serviceType)\n                {\n                    if (serviceType == typeof(IGraphicsDeviceService))\n                        return new FakeGraphicsService();\n\n                    throw new NotImplementedException();\n                }\n            }\n\n            private readonly byte[] _bufferData;\n\n            public TestContentManager(byte[] bufferData)\n                : base(new FakeServiceProvider(), \"NONE\")\n            {\n                _bufferData = bufferData;\n            }\n\n            protected override Stream OpenStream(string assetName)\n            {\n                return new MemoryStream(_bufferData, false);\n            }\n        }\n\n        static readonly IReadOnlyCollection<TargetPlatform> Platforms = new[]\n        {\n            TargetPlatform.Windows,\n            TargetPlatform.Xbox360,\n            TargetPlatform.iOS,\n            TargetPlatform.Android,\n            TargetPlatform.DesktopGL,\n            TargetPlatform.MacOSX,\n            TargetPlatform.WindowsStoreApp,\n            TargetPlatform.NativeClient,\n\n            TargetPlatform.RaspberryPi,\n            TargetPlatform.PlayStation4,\n            TargetPlatform.PlayStation5,\n            TargetPlatform.XboxOne,\n            TargetPlatform.Switch,\n            TargetPlatform.BlazorGL\n        };\n        static readonly IReadOnlyCollection<GraphicsProfile> GraphicsProfiles = new[]\n        {\n            GraphicsProfile.HiDef,\n            GraphicsProfile.Reach\n        };\n        static readonly IReadOnlyCollection<ContentCompression> Compression = new[]\n        {\n            ContentCompression.LegacyLZ4,\n            ContentCompression.Uncompressed,\n            ContentCompression.LZ4,\n#if NET6_0_OR_GREATER\n            ContentCompression.Brotli,\n#endif\n        };\n\n        public static void CompileAndLoadAssets<T>(T data, Action<T> validation)\n        {\n            ContentCompiler compiler = new ContentCompiler();\n\n            foreach (TargetPlatform platform in Platforms)\n                foreach (GraphicsProfile gfxProfile in GraphicsProfiles)\n                    foreach (ContentCompression compression in Compression)\n                        using (MemoryStream xnbStream = new MemoryStream())\n                        {\n                            compiler.Compile(xnbStream, data, platform, gfxProfile, compression, \"\", \"\");\n                            byte[] bufferData = xnbStream.ToArray();\n                            using (ContentManager content = new TestContentManager(bufferData))\n                            {\n                                T result = content.Load<T>(\"foo\");\n                                validation(result);\n                            }\n                        }\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/TestImporterContext.cs",
    "content": "﻿using Microsoft.Xna.Framework.Content.Pipeline;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class TestImporterContext : ContentImporterContext\n    {\n        readonly string _intermediateDirectory;\n        readonly string _outputDirectory;\n        readonly TestContentBuildLogger _logger;\n        List<string> _dependencies;\n\n        public TestImporterContext(string intermediateDirectory, string outputDirectory)\n        {\n            _intermediateDirectory = intermediateDirectory;\n            _outputDirectory = outputDirectory;\n            _logger = new TestContentBuildLogger();\n            _dependencies = new List<string>();\n        }\n\n        public List<string> Dependencies\n        {\n            get { return _dependencies; }\n        }\n\n        public override string IntermediateDirectory\n        {\n            get { return _intermediateDirectory; }\n        }\n\n        public override ContentBuildLogger Logger\n        {\n            get { return _logger; }\n        }\n\n        public override string OutputDirectory\n        {\n            get { return _outputDirectory; }\n        }\n\n        public override void AddDependency(string filename)\n        {\n            _dependencies.Add(filename);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/TextureContentTests.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class TextureContentTests\n    {\n        [Test]\n        public void Texture2DContent()\n        {\n            var content = new Texture2DContent();\n\n            Assert.NotNull(content.Faces);\n            Assert.AreEqual(1, content.Faces.Count);\n            Assert.NotNull(content.Faces[0]);\n            Assert.AreEqual(0, content.Faces[0].Count);\n\n            Assert.NotNull(content.Mipmaps);\n            Assert.AreEqual(content.Faces[0], content.Mipmaps);\n            Assert.AreEqual(0, content.Mipmaps.Count);\n\n            content.Faces[0] = new MipmapChain(new PixelBitmapContent<Color>(2,2));\n            Assert.AreEqual(content.Faces[0], content.Mipmaps);\n            Assert.AreEqual(1, content.Faces[0].Count);\n            Assert.AreEqual(1, content.Mipmaps.Count);\n\n            content.Faces[0].Add(new PixelBitmapContent<Color>(1, 1));\n            Assert.AreEqual(2, content.Faces[0].Count);\n            Assert.AreEqual(2, content.Mipmaps.Count);\n\n            Assert.Throws<NotSupportedException>(() => content.Faces.Clear());\n            Assert.Throws<NotSupportedException>(() => content.Faces.RemoveAt(0));\n            Assert.Throws<NotSupportedException>(() => content.Faces.Add(new MipmapChain()));\n            Assert.Throws<NotSupportedException>(() => content.Faces.Insert(0, new MipmapChain()));\n            Assert.Throws<NotSupportedException>(() => content.Faces.Remove(content.Faces[0]));\n        }\n\n        [Test]\n        public void Texture3DContent()\n        {\n            var content = new Texture3DContent();\n\n            Assert.NotNull(content.Faces);\n            Assert.AreEqual(0, content.Faces.Count);\n\n            var face0 = new MipmapChain(new PixelBitmapContent<Color>(2, 2));\n            content.Faces.Add(face0);\n            Assert.AreEqual(1, content.Faces.Count);\n            Assert.AreEqual(face0, content.Faces[0]);\n            Assert.AreEqual(1, content.Faces[0].Count);\n\n            content.Faces[0].Add(new PixelBitmapContent<Color>(1, 1));\n            Assert.AreEqual(2, content.Faces[0].Count);\n\n            var face2 = new MipmapChain(new PixelBitmapContent<Color>(2, 2));\n            content.Faces.Add(face2);\n            Assert.AreEqual(face2, content.Faces[1]);\n            Assert.AreEqual(2, content.Faces.Count);\n\n            var face1 = new MipmapChain(new PixelBitmapContent<Color>(2, 2));\n            content.Faces.Insert(1, face1);\n            Assert.AreEqual(face1, content.Faces[1]);\n            Assert.AreEqual(3, content.Faces.Count);\n\n            content.Faces.RemoveAt(0);\n            Assert.AreEqual(2, content.Faces.Count);\n            Assert.AreEqual(face1, content.Faces[0]);\n            Assert.AreEqual(face2, content.Faces[1]);\n\n            content.Faces.Remove(face1);\n            Assert.AreEqual(1, content.Faces.Count);\n            Assert.AreEqual(face2, content.Faces[0]);\n\n            content.Faces.Clear();\n            Assert.AreEqual(0, content.Faces.Count);\n        }\n\n        [Test]\n        public void TextureCubeContent()\n        {\n            var content = new TextureCubeContent();\n\n            Assert.NotNull(content.Faces);\n            Assert.AreEqual(6, content.Faces.Count);\n            Assert.NotNull(content.Faces[0]);\n            Assert.NotNull(content.Faces[1]);\n            Assert.NotNull(content.Faces[2]);\n            Assert.NotNull(content.Faces[3]);\n            Assert.NotNull(content.Faces[4]);\n            Assert.NotNull(content.Faces[5]);\n            Assert.AreEqual(0, content.Faces[0].Count);\n            Assert.AreEqual(0, content.Faces[1].Count);\n            Assert.AreEqual(0, content.Faces[2].Count);\n            Assert.AreEqual(0, content.Faces[3].Count);\n            Assert.AreEqual(0, content.Faces[4].Count);\n            Assert.AreEqual(0, content.Faces[5].Count);\n\n            var face0 = new MipmapChain(new PixelBitmapContent<Color>(2, 2));\n            content.Faces[0] = face0;\n            Assert.AreEqual(face0, content.Faces[0]);\n            Assert.AreEqual(1, content.Faces[0].Count);\n\n            content.Faces[0].Add(new PixelBitmapContent<Color>(1, 1));\n            Assert.AreEqual(2, content.Faces[0].Count);\n\n            content.Faces[1].Add(new PixelBitmapContent<Color>(2, 2));\n            content.Faces[2].Add(new PixelBitmapContent<Color>(2, 2));\n            content.Faces[3].Add(new PixelBitmapContent<Color>(2, 2));\n            content.Faces[4].Add(new PixelBitmapContent<Color>(2, 2));\n            content.Faces[5].Add(new PixelBitmapContent<Color>(2, 2));\n            Assert.AreEqual(1, content.Faces[1].Count);\n            Assert.AreEqual(1, content.Faces[2].Count);\n            Assert.AreEqual(1, content.Faces[3].Count);\n            Assert.AreEqual(1, content.Faces[4].Count);\n            Assert.AreEqual(1, content.Faces[5].Count);\n\n            Assert.Throws<NotSupportedException>(() => content.Faces.Clear());\n            Assert.Throws<NotSupportedException>(() => content.Faces.RemoveAt(0));\n            Assert.Throws<NotSupportedException>(() => content.Faces.Add(new MipmapChain()));\n            Assert.Throws<NotSupportedException>(() => content.Faces.Insert(0, new MipmapChain()));\n            Assert.Throws<NotSupportedException>(() => content.Faces.Remove(content.Faces[0]));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/TextureImporterTests.cs",
    "content": "﻿using System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class TextureImporterTests\n    {\n        const string intermediateDirectory = \"TestObj\";\n        const string outputDirectory = \"TestBin\";\n\n        void ImportStandard(string filename, SurfaceFormat expectedSurfaceFormat, int expectedSize)\n        {\n            var importer = new TextureImporter( );\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(filename, context);\n            Assert.NotNull(content);\n            Assert.AreEqual(1, content.Faces.Count);\n            Assert.AreEqual(1, content.Faces[0].Count);\n            Assert.AreEqual(expectedSize, content.Faces[0][0].Width);\n            Assert.AreEqual(expectedSize, content.Faces[0][0].Height);\n            SurfaceFormat format;\n            Assert.True(content.Faces[0][0].TryGetFormat(out format));\n            Assert.AreEqual(expectedSurfaceFormat, format);\n            // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch(DirectoryNotFoundException)\n            {\n            }\n        }\n\n        [Test]\n        public void ImportBmp( )\n        {\n            ImportStandard(\"Assets/Textures/LogoOnly_64px.bmp\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportBmpRGB555( )\n        {\n            ImportStandard(\"Assets/Textures/Logo555.bmp\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportBmpRGB565( )\n        {\n            ImportStandard(\"Assets/Textures/Logo565.bmp\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportBmp4bits( )\n        {\n            ImportStandard(\"Assets/Textures/LogoOnly_64px-4bits.bmp\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportBmpV5()\n        {\n            ImportStandard(\"Assets/Textures/Logo_BMPV5.bmp\", SurfaceFormat.Color, 256);\n        }\n\n        [Test]\n        public void ImportGif( )\n        {\n            ImportStandard(\"Assets/Textures/LogoOnly_64px.gif\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportJpg( )\n        {\n            ImportStandard(\"Assets/Textures/LogoOnly_64px.jpg\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportPng( )\n        {\n            ImportStandard(\"Assets/Textures/LogoOnly_64px.png\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportTga( )\n        {\n            ImportStandard(\"Assets/Textures/LogoOnly_64px.tga\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportTif( )\n        {\n            ImportStandard(\"Assets/Textures/LogoOnly_64px.tif\", SurfaceFormat.Color, 64);\n        }\n\n        /// <summary>\n        /// This test tries to load a tiff file encoded in rgbf, but freeimage seems to be failing to read files with this encoding\n        /// Might be necessary to modify this test with future updates of freeimage.\n        ///\n        /// Note that the image was created with Freeimage from a bitmap\n        /// </summary>\n        [Test]\n        public void ImportImageWithBadContent( )\n        {\n            Assert.Throws(typeof(InvalidContentException), ( ) => ImportStandard(\"Assets/Textures/rgbf.tif\", SurfaceFormat.Vector4, 64));\n            //ImportStandard(\"Assets/Textures/rgbf.tif\", SurfaceFormat.Color);\n        }\n\n        [Test]\n        public void ImportRGBA16Png()\n        {\n            var importer = new TextureImporter();\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(\"Assets/Textures/RGBA16.png\", context);\n            ulong expectedPixelValue = 5714832815570484476;\n            Assert.NotNull(content);\n            Assert.AreEqual(content.Faces.Count, 1);\n            Assert.AreEqual(content.Faces[0].Count, 1);\n            Assert.AreEqual(content.Faces[0][0].Width, 126);\n            Assert.AreEqual(content.Faces[0][0].Height, 240);\n            SurfaceFormat format;\n            Assert.True(content.Faces[0][0].TryGetFormat(out format));\n            Assert.AreEqual(SurfaceFormat.Rgba64, format);\n            Assert.AreEqual(expectedPixelValue, ((PixelBitmapContent<Rgba64>)content.Faces[0][0]).GetRow(1)[12].PackedValue);\n            // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch (DirectoryNotFoundException)\n            {\n            }\n        }\n\n        [Test]\n        public void ImportDdsCubemapDxt1()\n        {\n            var importer = new TextureImporter();\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(\"Assets/Textures/SampleCube64DXT1Mips.dds\", context);\n            Assert.NotNull(content);\n            Assert.AreEqual(content.Faces.Count, 6);\n            for (int f = 0; f < 6; f++)\n            {\n                CheckDdsFace(content, f, 7, 64, 64);\n            }\n            SurfaceFormat format;\n            Assert.True(content.Faces[0][0].TryGetFormat(out format));\n            Assert.AreEqual(format, SurfaceFormat.Dxt1);\n            // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch (DirectoryNotFoundException)\n            { }\n        }\n\n        [Test]\n        public void ImportDdsCubemapColor()\n        {\n            var importer = new TextureImporter();\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(\"Assets/Textures/Sunset.dds\", context);\n            Assert.NotNull(content);\n            Assert.AreEqual(content.Faces.Count, 6);\n            for (int f = 0; f < 6; f++)\n            {\n                CheckDdsFace(content, f, 1, 512, 512);\n            }\n            SurfaceFormat format;\n            Assert.True(content.Faces[0][0].TryGetFormat(out format));\n            // Ensure the red and blue bytes have been correctly swapped\n            Assert.AreEqual(format, SurfaceFormat.Color);\n            var bytes = content.Faces[0][0].GetPixelData();\n            Assert.AreEqual(bytes[0], 208);\n            Assert.AreEqual(bytes[2], 62);\n            // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch (DirectoryNotFoundException)\n            { }\n        }\n\n        [Test]\n        public void ImportDds()\n        {\n            ImportStandard(\"Assets/Textures/LogoOnly_64px.dds\", SurfaceFormat.Dxt3, 64);\n            ImportStandard(\"Assets/Textures/LogoOnly_64px-R8G8B8.dds\", SurfaceFormat.Color, 64);\n            ImportStandard(\"Assets/Textures/LogoOnly_64px-X8R8G8B8.dds\", SurfaceFormat.Color, 64);\n        }\n\n        [Test]\n        public void ImportDdsMipMap()\n        {\n            //ImportStandard(\"Assets/Textures/LogoOnly_64px-mipmaps.dds\", SurfaceFormat.Color);\n            var importer = new TextureImporter();\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(\"Assets/Textures/LogoOnly_64px-mipmaps.dds\", context);\n            Assert.NotNull(content);\n            Assert.AreEqual(content.Faces.Count, 1);\n            CheckDdsFace(content, 0, 7, 64, 64);\n\n            SurfaceFormat format;\n            Assert.True(content.Faces[0][0].TryGetFormat(out format));\n            Assert.AreEqual(format, SurfaceFormat.Dxt3);\n            // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch(DirectoryNotFoundException)\n            {\n            }\n        }\n\n        [Test]\n        public void Import24BitPngCheckColorChannels()\n        {\n            var importer = new TextureImporter();\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(\"Assets/Textures/color_24bit.png\", context);\n\n            var bitmap = (PixelBitmapContent<Color>) content.Faces[0][0];\n            var pixel = bitmap.GetPixel(0, 0);\n\n            Assert.AreEqual(255, pixel.R);\n            Assert.AreEqual(128, pixel.G);\n            Assert.AreEqual(64, pixel.B);\n\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch (DirectoryNotFoundException)\n            {\n            }\n        }\n\n        [Test]\n        public void Import32BitPngCheckColorChannels()\n        {\n            var importer = new TextureImporter();\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(\"Assets/Textures/color_32bit.png\", context);\n\n            var bitmap = (PixelBitmapContent<Color>)content.Faces[0][0];\n            var pixel = bitmap.GetPixel(0, 0);\n\n            Assert.AreEqual(255, pixel.R);\n            Assert.AreEqual(128, pixel.G);\n            Assert.AreEqual(64, pixel.B);\n\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch (DirectoryNotFoundException)\n            {\n            }\n        }\n\n        [Test]\n        public void Import48BitPngCheckColorChannels()\n        {\n            var importer = new TextureImporter();\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(\"Assets/Textures/color_48bit.png\", context);\n\n            var bitmap = (PixelBitmapContent<Rgba64>)content.Faces[0][0];\n            var pixel = bitmap.GetPixel(0, 0).ToVector4();\n\n            AssertFloatsAreEqual(1.0f, pixel.X);\n            AssertFloatsAreEqual(0.5f, pixel.Y);\n            AssertFloatsAreEqual(0.25f, pixel.Z);\n\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch (DirectoryNotFoundException)\n            {\n            }\n        }\n\n        [Test]\n        public void Import64BitPngCheckColorChannels()\n        {\n            var importer = new TextureImporter();\n            var context = new TestImporterContext(intermediateDirectory, outputDirectory);\n            var content = importer.Import(\"Assets/Textures/color_64bit.png\", context);\n\n            var bitmap = (PixelBitmapContent<Rgba64>)content.Faces[0][0];\n            var pixel = bitmap.GetPixel(0, 0).ToVector4();\n\n            AssertFloatsAreEqual(1.0f, pixel.X);\n            AssertFloatsAreEqual(0.5f, pixel.Y);\n            AssertFloatsAreEqual(0.25f, pixel.Z);\n\n            try\n            {\n                Directory.Delete(intermediateDirectory, true);\n                Directory.Delete(outputDirectory, true);\n            }\n            catch (DirectoryNotFoundException)\n            {\n            }\n        }\n\n        private static void AssertFloatsAreEqual(float expected, float actual)\n        {\n            // Assume floats are equal if they differ less than 1%\n            var maxDiff = expected * 0.01f;\n            Assert.GreaterOrEqual(maxDiff, Math.Abs(expected - actual));\n        }\n\n        private static void CheckDdsFace(TextureContent content, int faceIndex, int mipMapCount, int width, int height)\n        {\n            Assert.AreEqual(content.Faces[faceIndex].Count, mipMapCount);\n            for (int i = 0; i < mipMapCount; i++)\n            {\n                Assert.AreEqual(content.Faces[faceIndex][i].Width, width >> i);\n                Assert.AreEqual(content.Faces[faceIndex][i].Height, height >> i);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/TextureProcessorTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class TextureProcessorTests\n    {\n        [Test]\n        public void ValidateDefaults()\n        {\n            var processor = new TextureProcessor();\n            Assert.AreEqual(new Color(255, 0, 255, 255), processor.ColorKeyColor);\n            Assert.AreEqual(true, processor.ColorKeyEnabled);\n            Assert.AreEqual(false, processor.GenerateMipmaps);\n            Assert.AreEqual(true, processor.PremultiplyAlpha);\n            Assert.AreEqual(false, processor.ResizeToPowerOfTwo);\n            Assert.AreEqual(TextureProcessorOutputFormat.Color, processor.TextureFormat);\n        }\n\n        private static void Fill(PixelBitmapContent<Color> content, Color color)\n        {\n            var src = Enumerable.Repeat(color.PackedValue, content.Width * content.Height).ToArray();\n            var dest = new byte[Marshal.SizeOf(typeof(Color)) * content.Width * content.Height];\n            Buffer.BlockCopy(src, 0, dest, 0, dest.Length);\n            content.SetPixelData(dest);\n        }\n\n        [Test]\n        public void ColorKey()\n        {\n            var context = new TestProcessorContext(TargetPlatform.Windows, \"dummy.xnb\");\n\n            var processor = new TextureProcessor\n            {\n                ColorKeyColor = Color.Red,\n                ColorKeyEnabled = true,\n                GenerateMipmaps = false,\n                PremultiplyAlpha = false,\n                ResizeToPowerOfTwo = false,\n                TextureFormat = TextureProcessorOutputFormat.Color\n            };\n\n            var face = new PixelBitmapContent<Color>(8, 8);\n            Fill(face, Color.Red);\n            var input = new Texture2DContent();\n            input.Faces[0] = face;\n\n            var output = processor.Process(input, context);\n\n            Assert.NotNull(output);\n            Assert.AreEqual(1, output.Faces.Count);\n            Assert.AreEqual(1, output.Faces[0].Count);\n\n            Assert.IsAssignableFrom<PixelBitmapContent<Color>>(output.Faces[0][0]);\n            var outFace = (PixelBitmapContent<Color>)output.Faces[0][0];\n            Assert.AreEqual(8, outFace.Width);\n            Assert.AreEqual(8, outFace.Height);\n\n            for (var y=0; y < outFace.Height; y++)\n                for (var x = 0; x < outFace.Width; x++)\n                    Assert.AreEqual(Color.Transparent, outFace.GetPixel(x, y));\n        }\n\n        [Test]\n        public void MipmapSquarePowerOfTwo()\n        {\n            var context = new TestProcessorContext(TargetPlatform.Windows, \"dummy.xnb\");\n\n            var processor = new TextureProcessor\n            {\n                ColorKeyEnabled = false,\n                GenerateMipmaps = true,\n                PremultiplyAlpha = false,\n                ResizeToPowerOfTwo = false,\n                TextureFormat = TextureProcessorOutputFormat.Color\n            };\n\n            var width = 8;\n            var height = 8;\n\n            var face = new PixelBitmapContent<Color>(width, height);\n            Fill(face, Color.Red);\n            var input = new Texture2DContent();\n            input.Faces[0] = face;\n\n            var output = processor.Process(input, context);\n\n            Assert.NotNull(output);\n            Assert.AreEqual(1, output.Faces.Count);\n            //Assert.AreNotEqual(face, output.Faces[0][0]);\n\n            var outChain = output.Faces[0];\n            Assert.AreEqual(4, outChain.Count);\n\n            foreach (var outFace in outChain)\n            {\n                Assert.AreEqual(width, outFace.Width);\n                Assert.AreEqual(height, outFace.Height);\n\n                var bitmap = (PixelBitmapContent<Color>)outFace;\n                for (var y = 0; y < height; y++)\n                    for (var x = 0; x < width; x++)\n                        Assert.AreEqual(Color.Red, bitmap.GetPixel(x, y));\n\n                width = width >> 1;\n                height = height >> 1;\n            }\n        }\n\n        [Test]\n        public void MipmapNonSquarePowerOfTwo()\n        {\n            var context = new TestProcessorContext(TargetPlatform.Windows, \"dummy.xnb\");\n\n            var processor = new TextureProcessor\n            {\n                ColorKeyEnabled = false,\n                GenerateMipmaps = true,\n                PremultiplyAlpha = false,\n                ResizeToPowerOfTwo = false,\n                TextureFormat = TextureProcessorOutputFormat.Color\n            };\n\n            var width = 16;\n            var height = 8;\n\n            var face = new PixelBitmapContent<Color>(width, height);\n            Fill(face, Color.Red);\n            var input = new Texture2DContent();\n            input.Faces[0] = face;\n\n            var output = processor.Process(input, context);\n\n            Assert.NotNull(output);\n            Assert.AreEqual(1, output.Faces.Count);\n\n            var outChain = output.Faces[0];\n            Assert.AreEqual(5, outChain.Count);\n\n            foreach (var outFace in outChain)\n            {\n                Assert.AreEqual(width, outFace.Width);\n                Assert.AreEqual(height, outFace.Height);\n\n                var bitmap = (PixelBitmapContent<Color>)outFace;\n                for (var y = 0; y < height; y++)\n                    for (var x = 0; x < width; x++)\n                        Assert.AreEqual(Color.Red, bitmap.GetPixel(x, y));\n\n                if (width > 1)\n                    width /= 2;\n                if (height > 1)\n                    height /= 2;\n            }\n        }\n\n        [Test]\n        public void MipmapNonSquareNonPowerOfTwo()\n        {\n            var context = new TestProcessorContext(TargetPlatform.Windows, \"dummy.xnb\");\n\n            var processor = new TextureProcessor\n            {\n                ColorKeyEnabled = false,\n                GenerateMipmaps = true,\n                PremultiplyAlpha = false,\n                ResizeToPowerOfTwo = false,\n                TextureFormat = TextureProcessorOutputFormat.Color\n            };\n\n            var width = 23;\n            var height = 5;\n\n            var face = new PixelBitmapContent<Color>(width, height);\n            Fill(face, Color.Red);\n            var input = new Texture2DContent();\n            input.Faces[0] = face;\n\n            var output = processor.Process(input, context);\n\n            Assert.NotNull(output);\n            Assert.AreEqual(1, output.Faces.Count);\n\n            var outChain = output.Faces[0];\n            Assert.AreEqual(5, outChain.Count);\n\n            foreach (var outFace in outChain)\n            {\n                Assert.AreEqual(width, outFace.Width);\n                Assert.AreEqual(height, outFace.Height);\n\n                var bitmap = (PixelBitmapContent<Color>)outFace;\n                for (var y = 0; y < height; y++)\n                    for (var x = 0; x < width; x++)\n                        Assert.AreEqual(Color.Red, bitmap.GetPixel(x, y));\n\n                if (width > 1)\n                    width /= 2;\n                if (height > 1)\n                    height /= 2;\n            }\n        }\n\n        [Test]\n        public void ResizePowerOfTwo()\n        {\n            var context = new TestProcessorContext(TargetPlatform.Windows, \"dummy.xnb\");\n\n            var processor = new TextureProcessor\n            {\n                ColorKeyEnabled = false,\n                GenerateMipmaps = false,\n                PremultiplyAlpha = false,\n                ResizeToPowerOfTwo = true,\n                TextureFormat = TextureProcessorOutputFormat.Color\n            };\n\n            var face = new PixelBitmapContent<Color>(3, 7);\n            Fill(face, Color.Red);\n            var input = new Texture2DContent();\n            input.Faces[0] = face;\n\n            var output = processor.Process(input, context);\n\n            Assert.NotNull(output);\n            Assert.AreEqual(1, output.Faces.Count);\n            Assert.AreEqual(1, output.Faces[0].Count);\n\n            Assert.IsAssignableFrom<PixelBitmapContent<Color>>(output.Faces[0][0]);\n            var outFace = (PixelBitmapContent<Color>)output.Faces[0][0];\n            Assert.AreEqual(4, outFace.Width);\n            Assert.AreEqual(8, outFace.Height);\n\n            for (var y = 0; y < outFace.Height; y++)\n                for (var x = 0; x < outFace.Width; x++)\n                    Assert.AreEqual(Color.Red, outFace.GetPixel(x, y));\n        }\n\n#if !XNA\n        void CompressDefault<T>(TargetPlatform platform, Color color, int width = 16, int height = 16)\n        {\n            var context = new TestProcessorContext(platform, \"dummy.xnb\");\n\n            var processor = new TextureProcessor\n            {\n                ColorKeyEnabled = false,\n                GenerateMipmaps = true,\n                PremultiplyAlpha = false,\n                ResizeToPowerOfTwo = false,\n                TextureFormat = TextureProcessorOutputFormat.Compressed\n            };\n\n            var face = new PixelBitmapContent<Color>(width, height);\n            Fill(face, color);\n            var input = new Texture2DContent();\n            input.Faces[0] = face;\n\n            var output = processor.Process(input, context);\n\n            Assert.NotNull(output);\n            Assert.AreEqual(1, output.Faces.Count, \"Expected number of faces\");\n            Assert.AreEqual(5, output.Faces[0].Count, \"Expected number of mipmaps\");\n\n            Assert.IsAssignableFrom<T>(output.Faces[0][0], \"Incorrect pixel format\");\n        }\n\n        [Test]\n        public void CompressDefaultWindowsOpaque()\n        {\n            CompressDefault<Dxt1BitmapContent>(TargetPlatform.Windows, Color.Red);\n        }\n\n        [Test]\n        public void CompressDefaultWindowsCutOut()\n        {\n            CompressDefault<Dxt3BitmapContent>(TargetPlatform.Windows, Color.Transparent);\n        }\n\n        [Test]\n        public void CompressDefaultWindowsAlpha()\n        {\n            CompressDefault<Dxt5BitmapContent>(TargetPlatform.Windows, Color.Red * 0.5f);\n        }\n\n        [Test]\n        public void CompressDefaultiOSOpaqueSquarePOT()\n        {\n            CompressDefault<PvrtcRgb4BitmapContent>(TargetPlatform.iOS, Color.Red, 16, 16);\n        }\n\n        [Test]\n        public void CompressDefaultiOSOpaqueSquareNPOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgr565>>(TargetPlatform.iOS, Color.Red, 24, 24);\n        }\n\n        [Test]\n        public void CompressDefaultiOSOpaqueNonSquarePOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgr565>>(TargetPlatform.iOS, Color.Red, 8, 16);\n        }\n\n        [Test]\n        public void CompressDefaultiOSOpaqueNonSquareNPOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgr565>>(TargetPlatform.iOS, Color.Red, 24, 16);\n        }\n\n        [Test]\n        public void CompressDefaultiOSAlphaSquarePOT()\n        {\n            CompressDefault<PvrtcRgba4BitmapContent>(TargetPlatform.iOS, Color.Red * 0.5f);\n        }\n\n        [Test]\n        public void CompressDefaultiOSAlphaSquareNPOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgra4444>>(TargetPlatform.iOS, Color.Red * 0.5f, 24, 24);\n        }\n\n        [Test]\n        public void CompressDefaultiOSAlphaNonSquarePOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgra4444>>(TargetPlatform.iOS, Color.Red * 0.5f, 8, 16);\n        }\n\n        [Test]\n        public void CompressDefaultiOSAlphaNonSquareNPOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgra4444>>(TargetPlatform.iOS, Color.Red * 0.5f, 24, 16);\n        }\n\n        [Test]\n        public void CompressDefaultAndroidOpaqueSquarePOT()\n        {\n            CompressDefault<Etc1BitmapContent>(TargetPlatform.Android, Color.Red, 16, 16);\n        }\n\n        [Test]\n        public void CompressDefaultAndroidOpaqueSquareNPOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgr565>>(TargetPlatform.Android, Color.Red, 24, 24);\n        }\n\n        [Test]\n        public void CompressDefaultAndroidOpaqueNonSquarePOT()\n        {\n            CompressDefault<Etc1BitmapContent>(TargetPlatform.Android, Color.Red, 8, 16);\n        }\n\n        [Test]\n        public void CompressDefaultAndroidOpaqueNonSquareNPOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgr565>>(TargetPlatform.Android, Color.Red, 24, 16);\n        }\n\n        [Test]\n        public void CompressDefaultAndroidAlphaSquarePOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgra4444>>(TargetPlatform.Android, Color.Red * 0.5f);\n        }\n\n        [Test]\n        public void CompressDefaultAndroidAlphaSquareNPOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgra4444>>(TargetPlatform.Android, Color.Red * 0.5f, 24, 24);\n        }\n\n        [Test]\n        public void CompressDefaultAndroidAlphaNonSquarePOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgra4444>>(TargetPlatform.Android, Color.Red * 0.5f, 8, 16);\n        }\n\n        [Test]\n        public void CompressDefaultAndroidAlphaNonSquareNPOT()\n        {\n            CompressDefault<PixelBitmapContent<Bgra4444>>(TargetPlatform.Android, Color.Red * 0.5f, 24, 16);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/WavImporterTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class WavImporterTests\n    {\n        [Test]\n        public void Arguments()\n        {\n            var context = new TestImporterContext(\"TestObj\", \"TestBin\");\n            Assert.Throws<ArgumentNullException>(() => new WavImporter().Import(null, context));\n            Assert.Throws<ArgumentNullException>(() => new WavImporter().Import(\"\", context));\n            Assert.Throws<ArgumentNullException>(() => new WavImporter().Import(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", null));\n            Assert.Throws<FileNotFoundException>(() => new WavImporter().Import(@\"this\\does\\not\\exist.wav\", context));\n        }\n\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.mp3\")]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wma\")]\n        public void InvalidFormat(string sourceFile)\n        {\n            Assert.Throws<InvalidContentException>(() => new WavImporter().Import(sourceFile, new TestImporterContext(\"TestObj\", \"TestBin\")));\n        }\n\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_32bit.wav\")]\n        public void InvalidBitDepth(string sourceFile)\n        {\n            Assert.Throws<InvalidContentException>(() => new WavImporter().Import(sourceFile, new TestImporterContext(\"TestObj\", \"TestBin\")));\n        }\n\n        // TODO: Need to add tests for channel counts and sample rate most likely!\n\n        [TestCase(@\"Assets/Audio/bark_mono_88hz_16bit.wav\")]\n        public void InvalidSampleRate(string sourceFile)\n        {\n            Assert.Throws<InvalidContentException>(() => new WavImporter().Import(sourceFile, new TestImporterContext(\"TestObj\", \"TestBin\")));\n        }\n\n        // 8bit Mono\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", 1, 44100, 44100, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\", 1, 22050, 22050, 8, 1)]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\", 1, 11025, 11025, 8, 1)]\n\n        // 8bit Stereo\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_44hz_8bit.wav\", 2, 88200, 44100, 8, 2)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz_8bit.wav\", 2, 44100, 22050, 8, 2)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz_8bit.wav\", 2, 22050, 11025, 8, 2)]\n\n        // 16bit Mono\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", 1, 88200, 44100, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", 1, 44100, 22050, 16, 2)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", 1, 22050, 11025, 16, 2)]\n\n        // 16bit Stereo\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", 2, 176400, 44100, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", 2, 88200, 22050, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", 2, 44100, 11025, 16, 4)]\n\n        public void Import(string sourceFile, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign)\n        {\n            var content = new WavImporter().Import(sourceFile, new TestImporterContext(\"TestObj\", \"TestBin\"));\n\n            Assert.AreEqual(1, content.Format.Format);\n            Assert.AreEqual(channels, content.Format.ChannelCount);\n            Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond);\n            Assert.AreEqual(sampleRate, content.Format.SampleRate);\n            Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample);\n            Assert.AreEqual(blockAlign, content.Format.BlockAlign);\n\n            content.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ContentPipeline/WmaImporterTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class WmaImporterTests\n    {\n        [Test]\n        public void Arguments()\n        {\n            var context = new TestImporterContext(\"TestObj\", \"TestBin\");\n            Assert.Throws<ArgumentNullException>(() => new WmaImporter().Import(null, context));\n            Assert.Throws<ArgumentNullException>(() => new WmaImporter().Import(\"\", context));\n            Assert.Throws<ArgumentNullException>(() => new WmaImporter().Import(@\"Assets/Audio/rock_loop_stereo.wma\", null));\n            Assert.Throws<FileNotFoundException>(() => new WmaImporter().Import(@\"this\\does\\not\\exist.wma\", context));\n        }\n\n        public void InvalidFormat()\n        {\n            Assert.Throws<InvalidContentException>(() => new WmaImporter().Import(@\"Assets/Audio/rock_loop_stereo.wav\", new TestImporterContext(\"TestObj\", \"TestBin\")));\n        }\n\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wma\", 2, 176400, 44100, 16, 4)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.mp3\", 2, 176400, 44100, 16, 4)]\n        public void Import(string sourceFile, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign)\n        {\n            var content = new WmaImporter().Import(sourceFile, new TestImporterContext(\"TestObj\", \"TestBin\"));\n\n            Assert.AreEqual(1, content.Format.Format);\n            Assert.AreEqual(channels, content.Format.ChannelCount);\n            Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond);\n            Assert.AreEqual(sampleRate, content.Format.SampleRate);\n            Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample);\n            Assert.AreEqual(blockAlign, content.Format.BlockAlign);\n\n            content.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Directory.Build.props",
    "content": "<Project>\n\n\t<PropertyGroup>\n\t\t<BaseIntermediateOutputPath>obj\\$(MSBuildProjectName)\\</BaseIntermediateOutputPath>\n\t</PropertyGroup>\t\n\n</Project>\n\n"
  },
  {
    "path": "Tests/Framework/BoundingTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    [TestFixture]\n    class BoundingTest\n    {\n        [Test]\n        public void BoxContainsVector3Test()\n        {\n            var box = new BoundingBox(Vector3.Zero, Vector3.One);\n\n            Assert.AreEqual(ContainmentType.Disjoint, box.Contains(-Vector3.One));\n            Assert.AreEqual(ContainmentType.Disjoint, box.Contains(new Vector3(0.5f, 0.5f, -1f)));\n            Assert.AreEqual(ContainmentType.Contains, box.Contains(Vector3.Zero));\n            Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(0f, 0, 0.5f)));\n            Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(0f, 0.5f, 0.5f)));\n            Assert.AreEqual(ContainmentType.Contains, box.Contains(Vector3.One));\n            Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(1f, 1, 0.5f)));\n            Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(1f, 0.5f, 0.5f)));\n            Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(0.5f, 0.5f, 0.5f)));\n        }\n\n        [Test]\n        public void BoxContainsIdenticalBox()\n        {\n            var b1 = new BoundingBox(Vector3.Zero, Vector3.One);\n            var b2 = new BoundingBox(Vector3.Zero, Vector3.One);\n\n            Assert.AreEqual(ContainmentType.Contains, b1.Contains(b2));\n        }\n\n        [Test]\n        public void BoundingBoxContainsBoundingFrustumTests()\n        {\n            var bbox1 = new BoundingBox(new Vector3(0, 0, 0), new Vector3(1, 1, 1));\n            var bbox2 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));\n            var bbox3 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(0, 0, 0));\n            var bbox4 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-500, -500, -500));\n            var bbox5 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-150, 1000, -50));\n\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            Assert.That(bbox1.Contains(testFrustum), Is.EqualTo(ContainmentType.Intersects));\n            Assert.That(bbox2.Contains(testFrustum), Is.EqualTo(ContainmentType.Contains));\n            Assert.That(bbox3.Contains(testFrustum), Is.EqualTo(ContainmentType.Intersects));\n            Assert.That(bbox4.Contains(testFrustum), Is.EqualTo(ContainmentType.Disjoint));\n            Assert.That(bbox5.Contains(testFrustum), Is.EqualTo(ContainmentType.Disjoint));\n        }\n\n        [Test]\n        public void BoundingBoxIntersectsRay()\n        {\n            // Our test box.\n            BoundingBox box;\n            box.Min = new Vector3(-10,-20,-30);\n            box.Max = new Vector3(10, 20, 30);\n            var center = (box.Max + box.Min) * 0.5f;\n\n            // Test misses.\n            Assert.IsNull(new Ray(center - Vector3.UnitX * 40, -Vector3.UnitX).Intersects(box));\n            Assert.IsNull(new Ray(center + Vector3.UnitX * 40, Vector3.UnitX).Intersects(box));\n            Assert.IsNull(new Ray(center - Vector3.UnitY * 40, -Vector3.UnitY).Intersects(box));\n            Assert.IsNull(new Ray(center + Vector3.UnitY * 40, Vector3.UnitY).Intersects(box));\n            Assert.IsNull(new Ray(center - Vector3.UnitZ * 40, -Vector3.UnitZ).Intersects(box));\n            Assert.IsNull(new Ray(center + Vector3.UnitZ * 40, Vector3.UnitZ).Intersects(box));\n\n            // Test middle of each face.\n            Assert.AreEqual(30.0f, new Ray(center - Vector3.UnitX * 40, Vector3.UnitX).Intersects(box));\n            Assert.AreEqual(30.0f, new Ray(center + Vector3.UnitX * 40, -Vector3.UnitX).Intersects(box));\n            Assert.AreEqual(20.0f, new Ray(center - Vector3.UnitY * 40, Vector3.UnitY).Intersects(box));\n            Assert.AreEqual(20.0f, new Ray(center + Vector3.UnitY * 40, -Vector3.UnitY).Intersects(box));\n            Assert.AreEqual(10.0f, new Ray(center - Vector3.UnitZ * 40, Vector3.UnitZ).Intersects(box));\n            Assert.AreEqual(10.0f, new Ray(center + Vector3.UnitZ * 40, -Vector3.UnitZ).Intersects(box));\n\n            // Test the corners along each axis.\n            Assert.AreEqual(10.0f, new Ray(box.Min - Vector3.UnitX * 10, Vector3.UnitX).Intersects(box));\n            Assert.AreEqual(10.0f, new Ray(box.Min - Vector3.UnitY * 10, Vector3.UnitY).Intersects(box));\n            Assert.AreEqual(10.0f, new Ray(box.Min - Vector3.UnitZ * 10, Vector3.UnitZ).Intersects(box));\n            Assert.AreEqual(10.0f, new Ray(box.Max + Vector3.UnitX * 10, -Vector3.UnitX).Intersects(box));\n            Assert.AreEqual(10.0f, new Ray(box.Max + Vector3.UnitY * 10, -Vector3.UnitY).Intersects(box));\n            Assert.AreEqual(10.0f, new Ray(box.Max + Vector3.UnitZ * 10, -Vector3.UnitZ).Intersects(box));\n\n            // Test inside out.\n            Assert.AreEqual(0.0f, new Ray(center, Vector3.UnitX).Intersects(box));\n            Assert.AreEqual(0.0f, new Ray(center, -Vector3.UnitX).Intersects(box));\n            Assert.AreEqual(0.0f, new Ray(center, Vector3.UnitY).Intersects(box));\n            Assert.AreEqual(0.0f, new Ray(center, -Vector3.UnitY).Intersects(box));\n            Assert.AreEqual(0.0f, new Ray(center, Vector3.UnitZ).Intersects(box));\n            Assert.AreEqual(0.0f, new Ray(center, -Vector3.UnitZ).Intersects(box));\n        }\n\n        [Test]\n        public void BoundingBoxContainsBoundingSphere()\n        {\n            var bbox1 = new BoundingBox(-Vector3.One, Vector3.One);\n            var bsphere1 = new BoundingSphere(Vector3.Zero, 1);\n            var bsphere2 = new BoundingSphere(-Vector3.One, 1);\n            var bsphere3 = new BoundingSphere(-Vector3.One*2, 1);\n            var bsphere4 = new BoundingSphere(Vector3.Zero, 2);\n            var bsphere5 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() - 0.000001f)), 1);\n            var bsphere6 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() + 0.000001f)), 1);\n\n            Assert.AreEqual(bbox1.Contains(bsphere1), ContainmentType.Contains);\n            Assert.AreEqual(bbox1.Contains(bsphere2), ContainmentType.Intersects);\n            Assert.AreEqual(bbox1.Contains(bsphere3), ContainmentType.Disjoint);\n            Assert.AreEqual(bbox1.Contains(bsphere5), ContainmentType.Disjoint);\n            Assert.AreEqual(bbox1.Contains(bsphere6), ContainmentType.Intersects);\n        }\n\n        [Test]\n        public void BoundingBoxIntersectsBoundingSphere()\n        {\n            var bbox1 = new BoundingBox(-Vector3.One, Vector3.One);\n            var bsphere1 = new BoundingSphere(Vector3.Zero, 1);\n            var bsphere2 = new BoundingSphere(-Vector3.One, 1);\n            var bsphere3 = new BoundingSphere(-Vector3.One * 2, 1);\n            var bsphere4 = new BoundingSphere(Vector3.Zero, 2);\n            var bsphere5 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() - 0.000001f)), 1);\n            var bsphere6 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() + 0.000001f)), 1);\n\n            Assert.AreEqual(bbox1.Intersects(bsphere1), true);\n            Assert.AreEqual(bbox1.Intersects(bsphere2), true);\n            Assert.AreEqual(bbox1.Intersects(bsphere3), false);\n            Assert.AreEqual(bbox1.Intersects(bsphere4), true);\n            Assert.AreEqual(bbox1.Intersects(bsphere5), false);\n            Assert.AreEqual(bbox1.Intersects(bsphere6), true);\n        }\n\n        [Test]\n        public void BoundingFrustumIntersectsBoundingBoxTests()\n        {\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            var bbox1 = new BoundingBox(new Vector3(0, 0, 0), new Vector3(1, 1, 1));\n            var bbox2 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));\n            var bbox3 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(0, 0, 0));\n            var bbox4 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-500, -500, -500));\n            var bbox5 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-150, 1000,  -50));\n\n            Assert.That(testFrustum.Intersects(bbox1), Is.True);\n            Assert.That(testFrustum.Intersects(bbox2), Is.True);\n            Assert.That(testFrustum.Intersects(bbox3), Is.True);\n            Assert.That(testFrustum.Intersects(bbox4), Is.False);\n            Assert.That(testFrustum.Intersects(bbox5), Is.False);\n        }\n\n        [Test]\n        public void BoundingFrustumContainsBoundingBoxTests()\n        {\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            var bbox1 = new BoundingBox(new Vector3(0, 0, 0), new Vector3(1, 1, 1));\n            var bbox2 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));\n            var bbox3 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(0, 0, 0));\n            var bbox4 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-500, -500, -500));\n            var bbox5 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-150, 1000,  -50));\n\n            Assert.That(testFrustum.Contains(bbox1), Is.EqualTo(ContainmentType.Contains));\n            Assert.That(testFrustum.Contains(bbox2), Is.EqualTo(ContainmentType.Intersects));\n            Assert.That(testFrustum.Contains(bbox3), Is.EqualTo(ContainmentType.Intersects));\n            Assert.That(testFrustum.Contains(bbox4), Is.EqualTo(ContainmentType.Disjoint));\n#if !XNA    // XNA reports a false Intersects\n            Assert.That(testFrustum.Contains(bbox5), Is.EqualTo(ContainmentType.Disjoint));\n#endif\n        }\n\n        [Test]\n        public void BoundingFrustumIntersectsBoundingFrustumTests()\n        {\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            // Same frustum.\n            Assert.That(testFrustum.Intersects(testFrustum), Is.True);\n\n            var otherFrustum = new BoundingFrustum(Matrix.Identity);\n\n            // Smaller frustum contained entirely inside.\n            var view2 = Matrix.CreateLookAt(new Vector3(0, 0, 4), Vector3.Zero, Vector3.Up);\n            var projection2 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 50);\n            otherFrustum.Matrix = view2 * projection2;\n\n            Assert.That(testFrustum.Intersects(otherFrustum), Is.True);\n            Assert.That(otherFrustum.Intersects(testFrustum), Is.True);\n\n            // Same size frustum, pointing in the same direction and offset by a small amount.\n            otherFrustum.Matrix = view2 * projection;\n\n            Assert.That(testFrustum.Intersects(otherFrustum), Is.True);\n            Assert.That(otherFrustum.Intersects(testFrustum), Is.True);\n\n            // Same size frustum, pointing in the opposite direction and not overlapping.\n            var view3 = Matrix.CreateLookAt(new Vector3(0, 0, 6), new Vector3(0, 0, 7), Vector3.Up);\n            otherFrustum.Matrix = view3 * projection;\n\n            Assert.That(testFrustum.Intersects(otherFrustum), Is.False);\n            Assert.That(otherFrustum.Intersects(testFrustum), Is.False);\n\n            // Larger frustum, entirely containing test frustum.\n            var view4 = Matrix.CreateLookAt(new Vector3(0, 0, 10), Vector3.Zero, Vector3.Up);\n            var projection4 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 1000);\n            otherFrustum.Matrix = view4 * projection4;\n\n            Assert.That(testFrustum.Intersects(otherFrustum), Is.True);\n            Assert.That(otherFrustum.Intersects(testFrustum), Is.True);\n\n            // Same size frustum,  pointing to the right, behind test frustum.\n            var view5 = Matrix.CreateLookAt(new Vector3(-1, 0, 5), new Vector3(5, 0, 5), Vector3.Up);\n            var projection5 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            otherFrustum.Matrix = view5 * projection5;\n\n            Assert.That(testFrustum.Intersects(otherFrustum), Is.False);\n            Assert.That(otherFrustum.Intersects(testFrustum), Is.False);\n        }\n\n        [Test]\n        public void BoundingFrustumContainsBoundingFrustumTests()\n        {\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            // Same frustum.\n            Assert.That(testFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Contains));\n\n            var otherFrustum = new BoundingFrustum(Matrix.Identity);\n\n            // Smaller frustum contained entirely inside.\n            var view2 = Matrix.CreateLookAt(new Vector3(0, 0, 4), Vector3.Zero, Vector3.Up);\n            var projection2 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 50);\n            otherFrustum.Matrix = view2 * projection2;\n\n            Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Contains));\n            Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Intersects));\n\n            // Same size frustum, pointing in the same direction and offset by a small amount.\n            otherFrustum.Matrix = view2 * projection;\n\n            Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Intersects));\n            Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Intersects));\n\n            // Same size frustum, pointing in the opposite direction and not overlapping.\n            var view3 = Matrix.CreateLookAt(new Vector3(0, 0, 6), new Vector3(0, 0, 7), Vector3.Up);\n            otherFrustum.Matrix = view3 * projection;\n\n            Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Disjoint));\n            Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Disjoint));\n\n            // Larger frustum, entirely containing test frustum.\n            var view4 = Matrix.CreateLookAt(new Vector3(0, 0, 10), Vector3.Zero, Vector3.Up);\n            var projection4 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 1000);\n            otherFrustum.Matrix = view4 * projection4;\n\n            Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Intersects));\n            Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Contains));\n            Assert.That(testFrustum.Intersects(otherFrustum), Is.True);\n\n            // Same size frustum,  pointing to the right, behind test frustum.\n            var view5 = Matrix.CreateLookAt(new Vector3(-1, 0, 5), new Vector3(5, 0, 5), Vector3.Up);\n            var projection5 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            otherFrustum.Matrix = view5 * projection5;\n\n            Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Disjoint));\n            Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Disjoint));\n        }\n        \n        [Test]\n        public void BoundingFrustumIntersectsBoundingSphere()\n        {\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            var bsphere1 = new BoundingSphere(Vector3.Zero, 1);\n            var bsphere2 = new BoundingSphere(-Vector3.One, 1);\n            var bsphere3 = new BoundingSphere(-Vector3.One * 6, 1);\n            var bsphere4 = new BoundingSphere(Vector3.Zero, 200);\n            var bsphere5 = new BoundingSphere(new Vector3(1, 1, 5), 1);\n            var bsphere6 = new BoundingSphere(new Vector3(0, 0, -95), 1);\n            var bsphere7 = new BoundingSphere(new Vector3(0, 0, -50), 21f);\n            var bsphere8 = new BoundingSphere(new Vector3(0, 0, -50), 22f);\n            var bsphere10 = new BoundingSphere(new Vector3(0, 0, 5), 0.95f);\n            var bsphere11 = new BoundingSphere(new Vector3(0, 0, 5), 1.05f);\n\n            Assert.AreEqual(testFrustum.Intersects(bsphere1), true);\n            Assert.AreEqual(testFrustum.Intersects(bsphere2), true);\n            Assert.AreEqual(testFrustum.Intersects(bsphere3), false);\n            Assert.AreEqual(testFrustum.Intersects(bsphere4), true);\n            Assert.AreEqual(testFrustum.Intersects(bsphere5), false);\n            Assert.AreEqual(testFrustum.Intersects(bsphere6), true);\n            Assert.AreEqual(testFrustum.Intersects(bsphere7), true);\n            Assert.AreEqual(testFrustum.Intersects(bsphere8), true);\n            Assert.AreEqual(testFrustum.Intersects(bsphere10), false);\n            Assert.AreEqual(testFrustum.Intersects(bsphere11), true);\n        }\n\n        [Test]\n        public void BoundingFrustumIntersectsBoundingSphere2()\n        {\n            Matrix view = new Matrix(\n                  0.5952947f, -0.1383422f, -0.79150826f, -0f,\n                 -0.02417625f, 0.9815369f, -0.18973885f, 0f,\n                  0.80314344f, 0.13208623f, 0.58095926f, -0f,\n                 -35.168182f, -63.662083f, -26.71203f, 1f\n            );\n\n            Matrix projection = new Matrix(\n                   1.0349208f, 0f, 0f, 0,\n                   0f, 0.86867154f, 0f, 0,\n                   0.0349208f, -0.035242487f, -1.00002f, -1,\n                   0f, 0f, -0.02000f, 0\n                );\n\n            BoundingFrustum testFrustum = new BoundingFrustum(view * projection);\n\n            BoundingSphere bsphere1 = new BoundingSphere(\n                new Vector3(8, 8, 8),\n                13.856406f\n                );\n\n            Assert.AreEqual(testFrustum.Intersects(bsphere1), true);\n            Assert.AreEqual(testFrustum.Contains(bsphere1), ContainmentType.Intersects);\n        }\n\n        [Test]\n        public void BoundingFrustumContainsBoundingSphere()\n        {\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            var bsphere1 = new BoundingSphere(Vector3.Zero, 1);\n            var bsphere2 = new BoundingSphere(-Vector3.One, 1);\n            var bsphere3 = new BoundingSphere(-Vector3.One * 6, 1);\n            var bsphere4 = new BoundingSphere(Vector3.Zero, 200);\n            var bsphere5 = new BoundingSphere(new Vector3(1, 1, 5), 1);\n            var bsphere6 = new BoundingSphere(new Vector3(0, 0, -95), 1);\n            var bsphere7 = new BoundingSphere(new Vector3(0, 0, -50), 21f);\n            var bsphere8 = new BoundingSphere(new Vector3(0, 0, -50), 22f);\n            var bsphere10 = new BoundingSphere(new Vector3(0, 0, 5), 0.95f);\n            var bsphere11 = new BoundingSphere(new Vector3(0, 0, 5), 1);\n\n            Assert.AreEqual(testFrustum.Contains(bsphere1), ContainmentType.Contains);\n            Assert.AreEqual(testFrustum.Contains(bsphere2), ContainmentType.Contains);\n            Assert.AreEqual(testFrustum.Contains(bsphere3), ContainmentType.Disjoint);\n            Assert.AreEqual(testFrustum.Contains(bsphere4), ContainmentType.Intersects);\n#if !XNA    // XNA reports a false Intersects\n            Assert.AreEqual(testFrustum.Contains(bsphere5), ContainmentType.Disjoint);\n#endif\n            Assert.AreEqual(testFrustum.Contains(bsphere6), ContainmentType.Intersects);\n            Assert.AreEqual(testFrustum.Contains(bsphere7), ContainmentType.Contains);\n            Assert.AreEqual(testFrustum.Contains(bsphere8), ContainmentType.Intersects);\n            Assert.AreEqual(testFrustum.Contains(bsphere10), ContainmentType.Disjoint);\n            Assert.AreEqual(testFrustum.Contains(bsphere11), ContainmentType.Intersects);\n        }\n\n        [Test]\n        public void BoundingFrustumIntersectsRayTests()\n        {\n            var view = Matrix.CreateLookAt(cameraPosition: new Vector3(0, 0, 1),\n                                           cameraTarget:   new Vector3(0, 0, 0),\n                                           cameraUpVector: Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1f, 1f, 100.0f);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            Ray ray1 = new Ray(new Vector3(0, 0, -1), new Vector3( 0, 0,  1));\n            Ray ray2 = new Ray(new Vector3(0, 0,  1), new Vector3( 0, 0, -1));\n            Ray ray3 = new Ray(new Vector3(0, 0,  1), new Vector3( 0, 0,  1));\n            Ray ray4 = new Ray(new Vector3(0, 0,  1), new Vector3(+1, 0,  0));\n\n            float? value1 = testFrustum.Intersects(ray1);\n            Assert.AreEqual(0.0f, value1);\n\n            float? value2 = testFrustum.Intersects(ray2);\n            Assert.AreEqual(1.0f, value2);\n\n            float? value3 = testFrustum.Intersects(ray3);\n            Assert.AreEqual(null, value3);\n\n            float? value4 = testFrustum.Intersects(ray4);\n            Assert.AreEqual(null, value4);\n        }\n\n        [Test]\n        public void BoundingSphereIntersectsRayTest()\n        {\n            BoundingSphere sphere = new BoundingSphere(Vector3.Zero, 1);\n            \n            Ray ray1 = new Ray(Vector3.UnitY*4, Vector3.Normalize(Vector3.UnitY*-1 + Vector3.UnitX*0));\n            Ray ray2 = new Ray(Vector3.UnitY*4, Vector3.Normalize(Vector3.UnitY*-1 + Vector3.UnitX*2));\n            Ray ray3 = new Ray(Vector3.UnitY*5, Vector3.Normalize(Vector3.UnitY*-1 + Vector3.UnitX*1));\n            Ray ray4 = new Ray(Vector3.UnitY*5, Vector3.Normalize(Vector3.UnitY*-1 + Vector3.UnitX*1000));\n\n            float? value1 = sphere.Intersects(ray1);\n            float? value2 = sphere.Intersects(ray2);\n            float? value3 = sphere.Intersects(ray3);\n            float? value4 = sphere.Intersects(ray4);\n\n            Assert.AreEqual(3, value1);\n            Assert.AreEqual(null, value2);\n            Assert.AreEqual(null, value3);\n            Assert.AreEqual(null, value4);\n        }\n\n        [Test]\n        public void BoundingSphereContainsTests()\n        {\n            var zeroPoint = BoundingSphere.CreateFromPoints( new[] {Vector3.Zero} );\n            Assert.AreEqual(new BoundingSphere(), zeroPoint);\n\n            var onePoint = BoundingSphere.CreateFromPoints(new[] { Vector3.One });\n            Assert.AreEqual(new BoundingSphere(Vector3.One, 0), onePoint);\n\n            var twoPoint = BoundingSphere.CreateFromPoints(new[] { Vector3.Zero, Vector3.One });\n            Assert.AreEqual(new BoundingSphere(new Vector3(0.5f, 0.5f, 0.5f), 0.8660254f), twoPoint);\n\n            var threePoint = BoundingSphere.CreateFromPoints(new[] { new Vector3(0, 0, 0), new Vector3(-1, 0, 0), new Vector3(1, 1, 1) });\n            Assert.That(new BoundingSphere(new Vector3(0, 0.5f, 0.5f), 1.224745f), Is.EqualTo(threePoint).Using(BoundingSphereComparer.Epsilon));\n\n            var eightPointTestInput = new Vector3[]\n            {\n                new Vector3(54.58071f, 124.9063f, 56.0016f),\n                new Vector3(54.52138f, 124.9063f, 56.13985f),\n                new Vector3(54.52208f, 124.8235f, 56.14014f),\n                new Vector3(54.5814f, 124.8235f, 56.0019f),\n                new Vector3(1145.415f, 505.913f, -212.5173f),\n                new Vector3(611.4731f, 505.9535f, 1031.893f),\n                new Vector3(617.7462f, -239.7422f, 1034.584f),\n                new Vector3(1151.687f, -239.7035f, -209.8246f)\n            };\n            var eightPoint = BoundingSphere.CreateFromPoints(eightPointTestInput);\n            for (int i = 0; i < eightPointTestInput.Length; i++)\n            {\n                Assert.That(eightPoint.Contains(eightPointTestInput[i]) != ContainmentType.Disjoint);\n            }\n\n            Assert.Throws<ArgumentException>(() => BoundingSphere.CreateFromPoints(new Vector3[] {}));\n        }\n\n        [Test]\n        public void BoundingSphereContainsBoundingBox()\n        {\n            var bbox1 = new BoundingBox(-Vector3.One, Vector3.One);\n            var bsphere1 = new BoundingSphere(Vector3.Zero, 1);\n            var bsphere2 = new BoundingSphere(-Vector3.One, 1);\n            var bsphere3 = new BoundingSphere(-Vector3.One * 2, 1);\n            var bsphere4 = new BoundingSphere(Vector3.Zero, 2);\n            var bsphere5 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() - 0.000001f)), 1);\n            var bsphere6 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() + 0.000001f)), 1);\n\n            Assert.AreEqual(bsphere1.Contains(bbox1), ContainmentType.Intersects);\n            Assert.AreEqual(bsphere2.Contains(bbox1), ContainmentType.Intersects);\n            Assert.AreEqual(bsphere3.Contains(bbox1), ContainmentType.Disjoint);\n            Assert.AreEqual(bsphere4.Contains(bbox1), ContainmentType.Contains);\n            Assert.AreEqual(bsphere5.Contains(bbox1), ContainmentType.Disjoint);\n            Assert.AreEqual(bsphere6.Contains(bbox1), ContainmentType.Intersects);\n        }\n\n        [Test]\n        public void BoundingSphereContainsBoundingFrustum()\n        {\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100);\n            var testFrustum = new BoundingFrustum(view * projection);\n\n            var bsphere1 = new BoundingSphere(Vector3.Zero, 1);\n            var bsphere2 = new BoundingSphere(-Vector3.One, 1);\n            var bsphere3 = new BoundingSphere(-Vector3.One * 6, 1);\n            var bsphere4 = new BoundingSphere(Vector3.Zero, 200);\n            var bsphere5 = new BoundingSphere(new Vector3(1, 1, 5), 1);\n\n            Assert.AreEqual(bsphere1.Contains(testFrustum), ContainmentType.Intersects);\n            Assert.AreEqual(bsphere2.Contains(testFrustum), ContainmentType.Intersects);\n            Assert.AreEqual(bsphere3.Contains(testFrustum), ContainmentType.Disjoint);\n            Assert.AreEqual(bsphere4.Contains(testFrustum), ContainmentType.Contains);\n            Assert.AreEqual(bsphere5.Contains(testFrustum), ContainmentType.Disjoint);\n        }\n\n#if !XNA\n        [Test]\n        public void BoundingBoxDeconstruct()\n        {\n            BoundingBox boundingBox = new BoundingBox(new Vector3(255, 255, 255), new Vector3(0, 0, 0));\n\n            Vector3 min, max;\n\n            boundingBox.Deconstruct(out min, out max);\n\n            Assert.AreEqual(min, boundingBox.Min);\n            Assert.AreEqual(max, boundingBox.Max);\n        }\n\n        [Test]\n        public void BoundingSphereDeconstruct()\n        {\n            BoundingSphere boundingSphere = new BoundingSphere(new Vector3(255, 255, 255), float.MaxValue);\n\n            Vector3 center;\n            float radius;\n\n            boundingSphere.Deconstruct(out center, out radius);\n\n            Assert.AreEqual(center, boundingSphere.Center);\n            Assert.AreEqual(radius, boundingSphere.Radius);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/ColorTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class ColorTest\n    {\n        // Contains a test case for each constructor type\n        private static object[] _ctorTestCases =\n        {\n#if !XNA\n            new object[] { new Color(new Color(64, 128, 192), 32), 64, 128, 192, 32 },\n            new object[] { new Color(new Color(64, 128, 192), 256), 64, 128, 192, 255 },\n            new object[] { new Color(new Color(64, 128, 192), 0.125f), 64, 128, 192, 32 },\n            new object[] { new Color(new Color(64, 128, 192), 1.1f), 64, 128, 192, 255 },\n            new object[] { new Color((byte)64, (byte)128, (byte)192, (byte)32), 64, 128, 192, 32 },\n#endif\n            new object[] { new Color(), 0, 0, 0, 0 },\n            new object[] { new Color(64, 128, 192), 64, 128, 192, 255 },\n            new object[] { new Color(256, 256, -1), 255, 255, 0, 255},\n            new object[] { new Color(64, 128, 192, 32), 64, 128, 192, 32 },\n            new object[] { new Color(256, 256, -1, 256), 255, 255, 0, 255},\n            new object[] { new Color(0.25f, 0.5f, 0.75f), 64, 128, 192, 255 },\n            new object[] { new Color(1.1f, 1.1f, -0.1f), 255, 255, 0, 255 },\n            new object[] { new Color(0.25f, 0.5f, 0.75f, 0.125f), 64, 128, 192, 32 },\n            new object[] { new Color(1.1f, 1.1f, -0.1f, -0.1f), 255, 255, 0, 0 },\n            new object[] { new Color(new Vector3(0.25f, 0.5f, 0.75f)), 64, 128, 192, 255 },\n            new object[] { new Color(new Vector3(1.1f, 1.1f, -0.1f)), 255, 255, 0, 255 },\n            new object[] { new Color(new Vector4(0.25f, 0.5f, 0.75f, 0.125f)), 64, 128, 192, 32 },\n            new object[] { new Color(new Vector4(1.1f, 1.1f, -0.1f, -0.1f)), 255, 255, 0, 0 }\n        };\n\n        [Test, TestCaseSource(\"_ctorTestCases\")]\n        public void Ctor_Explicit(Color color, int expectedR, int expectedG, int expectedB, int expectedA)\n        {\n            // Account for rounding differences with float constructors\n            Assert.That(color.R, Is.EqualTo(expectedR).Within(1));\n            Assert.That(color.G, Is.EqualTo(expectedG).Within(1));\n            Assert.That(color.B, Is.EqualTo(expectedB).Within(1));\n            Assert.That(color.A, Is.EqualTo(expectedA).Within(1));\n        }\n\n#if !XNA\n        [Test]\n        public void Ctor_Packed()\n        {\n            var color = new Color(0x20C08040);\n\n            Assert.That(color.R, Is.EqualTo(64));\n            Assert.That(color.G, Is.EqualTo(128));\n            Assert.That(color.B, Is.EqualTo(192));\n            Assert.That(color.A, Is.EqualTo(32));\n        }\n#endif\n\n        [Test]\n        public void FromNonPremultiplied_Int()\n        {\n            var color = Color.FromNonPremultiplied(255, 128, 64, 128);\n            Assert.That(color.R, Is.EqualTo(128).Within(1));\n            Assert.That(color.G, Is.EqualTo(64).Within(1));\n            Assert.That(color.B, Is.EqualTo(32).Within(1));\n            Assert.That(color.A, Is.EqualTo(128).Within(0));\n\n            var overflow = Color.FromNonPremultiplied(280, 128, -10, 128);\n            Assert.That(overflow.R, Is.EqualTo(140).Within(1));\n            Assert.That(overflow.G, Is.EqualTo(64).Within(1));\n            Assert.That(overflow.B, Is.EqualTo(0).Within(1));\n            Assert.That(overflow.A, Is.EqualTo(128).Within(0));\n\n            var overflow2 = Color.FromNonPremultiplied(255, 128, 64, 280);\n            Assert.That(overflow2.R, Is.EqualTo(255).Within(1));\n            Assert.That(overflow2.G, Is.EqualTo(140).Within(1));\n            Assert.That(overflow2.B, Is.EqualTo(70).Within(1));\n            Assert.That(overflow2.A, Is.EqualTo(255).Within(0));\n        }\n\n        [Test]\n        public void FromNonPremultiplied_Float()\n        {\n            var color = Color.FromNonPremultiplied(new Vector4(1.0f, 0.5f, 0.25f, 0.5f));\n            Assert.That(color.R, Is.EqualTo(128).Within(1));\n            Assert.That(color.G, Is.EqualTo(64).Within(1));\n            Assert.That(color.B, Is.EqualTo(32).Within(1));\n            Assert.That(color.A, Is.EqualTo(128).Within(1));\n\n            var overflow = Color.FromNonPremultiplied(new Vector4(1.1f, 0.5f, -0.1f, 0.5f));\n            Assert.That(overflow.R, Is.EqualTo(140).Within(1));\n            Assert.That(overflow.G, Is.EqualTo(64).Within(1));\n            Assert.That(overflow.B, Is.EqualTo(0).Within(1));\n            Assert.That(overflow.A, Is.EqualTo(128).Within(1));\n\n            var overflow2 = Color.FromNonPremultiplied(new Vector4(1f, 0.5f, 0.25f, 1.1f));\n            Assert.That(overflow2.R, Is.EqualTo(255).Within(1));\n            Assert.That(overflow2.G, Is.EqualTo(140).Within(1));\n            Assert.That(overflow2.B, Is.EqualTo(70).Within(1));\n            Assert.That(overflow2.A, Is.EqualTo(255).Within(1));\n        }\n\n        [Test]\n        public void Multiply()\n        {\n            var color = new Color(1, 2, 3, 4);\n\n            // Test 1.0 scale.\n            Assert.AreEqual(color, color * 1.0f);\n            Assert.AreEqual(color, Color.Multiply(color, 1.0f));\n            Assert.AreEqual(color * 1.0f, Color.Multiply(color, 1.0f));\n\n            // Test 0.999 scale.\n            var almostOne = new Color(0, 1, 2, 3);\n            Assert.AreEqual(almostOne, color * 0.999f);\n            Assert.AreEqual(almostOne, Color.Multiply(color, 0.999f));\n            Assert.AreEqual(color * 0.999f, Color.Multiply(color, 0.999f));\n\n            // Test 1.001 scale.\n            Assert.AreEqual(color, color * 1.001f);\n            Assert.AreEqual(color, Color.Multiply(color, 1.001f));\n            Assert.AreEqual(color * 1.001f, Color.Multiply(color, 1.001f));\n\n            // Test 0.0 scale.\n            Assert.AreEqual(Color.Transparent, color * 0.0f);\n            Assert.AreEqual(Color.Transparent, Color.Multiply(color, 0.0f));\n            Assert.AreEqual(color * 0.0f, Color.Multiply(color, 0.0f));\n\n            // Test 0.001 scale.\n            Assert.AreEqual(Color.Transparent, color * 0.001f);\n            Assert.AreEqual(Color.Transparent, Color.Multiply(color, 0.001f));\n            Assert.AreEqual(color * 0.001f, Color.Multiply(color, 0.001f));\n\n            // Test -0.001 scale.\n            Assert.AreEqual(Color.Transparent, color * -0.001f);\n            Assert.AreEqual(Color.Transparent, Color.Multiply(color, -0.001f));\n            Assert.AreEqual(color * -0.001f, Color.Multiply(color, -0.001f));\n\n            // Test for overflow.\n            Assert.AreEqual(Color.White, color * 300.0f);\n            Assert.AreEqual(Color.White, Color.Multiply(color, 300.0f));\n            Assert.AreEqual(color * 300.0f, Color.Multiply(color, 300.0f));\n\n            // Test for underflow.\n            Assert.AreEqual(Color.Transparent, color * -1.0f);\n            Assert.AreEqual(Color.Transparent, Color.Multiply(color, -1.0f));\n            Assert.AreEqual(color * -1.0f, Color.Multiply(color, -1.0f));\n        }\n\n        [Test]\n        public void Lerp()\n        {\n            Color color1 = new Color(20, 40, 0, 0);\n            Color color2 = new Color(41, 81, 255, 255);\n\n            // Test zero and underflow.\n            Assert.AreEqual(color1, Color.Lerp(color1, color2, 0.0f));\n            Assert.AreEqual(color1, Color.Lerp(color1, color2, 0.001f));\n            Assert.AreEqual(color1, Color.Lerp(color1, color2, -0.001f));\n            Assert.AreEqual(color1, Color.Lerp(color1, color2, -1.0f));\n\n            // Test one scale and overflows.\n            Assert.AreEqual(color2, Color.Lerp(color1, color2, 1.0f));\n            Assert.AreEqual(color2, Color.Lerp(color1, color2, 1.001f));\n            Assert.AreEqual(new Color(254, 254, 254, 254), Color.Lerp(Color.Transparent, Color.White, 0.999f));\n            Assert.AreEqual(color2, Color.Lerp(color1, color2, 2.0f));\n\n            // Test half scale.\n            var half = new Color(30, 60, 127, 127);\n            Assert.AreEqual(half, Color.Lerp(color1, color2, 0.5f));\n            Assert.AreEqual(half, Color.Lerp(color1, color2, 0.501f));\n            Assert.AreEqual(half, Color.Lerp(color1, color2, 0.499f));\n\n            // Test backwards lerp.\n            Assert.AreEqual(color2, Color.Lerp(color2, color1, 0.0f));\n            Assert.AreEqual(color1, Color.Lerp(color2, color1, 1.0f));\n            Assert.AreEqual(half, Color.Lerp(color2, color1, 0.5f));\n        }\n\n#if !XNA\n        [Test]\n        public void DeconstructBytes()\n        {\n            Color color = new Color(255, 255, 255);\n            byte r, g, b;\n\n            color.Deconstruct(out r, out g, out b);\n\n            Assert.AreEqual(r, color.R);\n            Assert.AreEqual(g, color.G);\n            Assert.AreEqual(b, color.B);\n\n            Color color2 = new Color(255, 255, 255, 255);\n\n            byte r2, g2, b2, a2;\n\n            color2.Deconstruct(out r2, out g2, out b2, out a2);\n\n            Assert.AreEqual(r2, color2.R);\n            Assert.AreEqual(g2, color2.G);\n            Assert.AreEqual(b2, color2.B);\n            Assert.AreEqual(a2, color2.A);\n        }\n\n        [Test]\n        public void DeconstructFloats()\n        {\n            Color color = new Color(255, 255, 255);\n            float r, g, b;\n\n            color.Deconstruct(out r, out g, out b);\n\n            Assert.AreEqual(r, color.R / 255f);\n            Assert.AreEqual(g, color.G / 255f);\n            Assert.AreEqual(b, color.B / 255f);\n\n            Color color2 = new Color(255, 255, 255, 255);\n\n            float r2, g2, b2, a2;\n\n            color2.Deconstruct(out r2, out g2, out b2, out a2);\n\n            Assert.AreEqual(r2, color2.R / 255f);\n            Assert.AreEqual(g2, color2.G / 255f);\n            Assert.AreEqual(b2, color2.B / 255f);\n            Assert.AreEqual(a2, color2.A / 255f);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/CurveKeyCollectionTest.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class CurveKeyCollectionTest\n    {\n        //[Test]\n        //public void TypeConverter()\n        //{\n        //    var curveKeyCollection = new CurveKeyCollection\n        //    {\n        //        new CurveKey(0, 1),\n        //        new CurveKey(1, 2),\n        //        new CurveKey(3, 4)\n        //    };\n\n        //    // Gets the attributes for the instance.\n\n        //    var attributes = TypeDescriptor.GetAttributes(curveKeyCollection);\n\n        //    // Assert.AreEqual(5, attributes.Count);\n\n        //    for (var i = 0; i < attributes.Count; ++i)\n        //    {\n        //        Debug.WriteLine(\"attribute #\" + i + \" = \" + attributes[i]);\n        //        Assert.AreEqual(false, attributes[i].IsDefaultAttribute());\n        //    }\n        //}\n\n        [Test]\n        public void Properties()\n        {\n            var curveKeyCollection = new CurveKeyCollection\n            {\n                new CurveKey(0, 0),\n                new CurveKey(-1, 1),\n                new CurveKey(-1, 1)\n            };\n\n            // Count property\n\n            Assert.AreEqual(3, curveKeyCollection.Count);\n\n            // IsReadOnly property\n\n            Assert.AreEqual(false, curveKeyCollection.IsReadOnly);\n\n            // Item indexer\n\n            var key1 = new CurveKey(-1, 1);\n            var key2 = curveKeyCollection[1];\n            var key3 = curveKeyCollection[2];\n\n            Assert.AreEqual(true, key1 == key2);\n            Assert.AreEqual(false, key2 == key3);\n            Assert.AreEqual(key1, key2);\n            Assert.AreNotEqual(key2, key3);\n            Assert.AreNotEqual(key1, key3);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/CurveKeyTest.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class CurveKeyTest\n    {\n        [Test]\n        public void Properties()\n        {\n            var key = new CurveKey(1, 2, 3, 4, CurveContinuity.Step);\n\n            Assert.AreEqual(1, key.Position);\n            Assert.AreEqual(2, key.Value);\n            Assert.AreEqual(3, key.TangentIn);\n            Assert.AreEqual(4, key.TangentOut);\n            Assert.AreEqual(CurveContinuity.Step, key.Continuity);\n        }\n\n        [Test]\n        public void Clone()\n        {\n            var key = new CurveKey(1, 2, 3, 4, CurveContinuity.Step);\n\n            Assert.AreEqual(key,key.Clone());\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/CurveTest.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class CurveTest\n    {\n        //[Test]\n        //public void TypeConverter()\n        //{\n        //    var curve = new Curve();\n\n        //    curve.Keys.Add(new CurveKey(0, 1));\n        //    curve.Keys.Add(new CurveKey(1, 2));\n        //    curve.Keys.Add(new CurveKey(3, 4));\n\n        //    // Gets the attributes for the instance.\n\n        //    var attributes = TypeDescriptor.GetAttributes(curve);\n\n        //    // Assert.AreEqual(2,attributes.Count);\n\n        //    for (var i = 0; i < attributes.Count; ++i)\n        //    {\n        //        Console.WriteLine(\"attribute #\" + i + \" = \" + attributes[i]);\n        //        Assert.AreEqual(false,attributes[i].IsDefaultAttribute());\n        //    }\n        //}\n\n        [Test]\n        public void Clone()\n        {\n            var curve = new Curve();\n            curve.Keys.Add(new CurveKey(0, 1));\n            curve.Keys.Add(new CurveKey(1, 2));\n            curve.Keys.Add(new CurveKey(3, 4));\n\n            var clone = curve.Clone();\n            \n            Assert.AreEqual(curve.PostLoop, clone.PreLoop);\n            Assert.AreEqual(curve.PostLoop, clone.PostLoop);\n\n            for (var i = 0; i < 3; ++i)\n            {\n                Assert.AreEqual(curve.Keys[i], clone.Keys[i]);\n            }\n        }\n\n        [Test]\n        public void Evaluate()\n        {\n            var curve = new Curve();\n            curve.Keys.Add(new CurveKey(1, -1));\n            curve.Keys.Add(new CurveKey(2, 2));\n            curve.Keys.Add(new CurveKey(3, 4));\n\n            var result = curve.Evaluate(1.25f);\n\n            Assert.AreEqual(-0.53125f, result);\n        }\n\n        [Test]\n        public void EvaluateNoKeys()\n        {\n            var curve = new Curve();\n\n            var result = curve.Evaluate(1.25f);\n\n            Assert.AreEqual(0f, result);\n        }\n\n        [Test]\n        public void EvaluateOneKey()\n        {\n            var curve = new Curve();\n            curve.Keys.Add(new CurveKey(1, -1));\n\n            var result = curve.Evaluate(1.25f);\n\n            Assert.AreEqual(-1f, result);\n        }\n\n        [Test]\n        public void ComputeTangent()\n        {\n            var key1 = new CurveKey(-0.5f, 1.5f); \n            var key2 = new CurveKey(1.1f, 2.3f);\n            var key3 = new CurveKey(2.25f, 4.4f);\n\n            var curve1 = new Curve();\n            curve1.Keys.Add(key1);\n            curve1.Keys.Add(key2);\n            curve1.Keys.Add(key3);\n\n            curve1.ComputeTangent(0, CurveTangent.Smooth);\n            curve1.ComputeTangent(1, CurveTangent.Smooth);\n            curve1.ComputeTangent(2, CurveTangent.Smooth);\n\n            Assert.AreEqual(0.0f, curve1.Keys[0].TangentIn);\n            Assert.AreEqual(0.799999952f, curve1.Keys[0].TangentOut);\n\n            Assert.AreEqual(1.68727279f, curve1.Keys[1].TangentIn);\n            Assert.AreEqual(1.21272731f, curve1.Keys[1].TangentOut);\n\n            Assert.AreEqual(2.10000014f, curve1.Keys[2].TangentIn);\n            Assert.AreEqual(0.0f, curve1.Keys[2].TangentOut);\n\n            var curve2 = new Curve();\n            curve2.Keys.Add(key1);\n            curve2.Keys.Add(key2);\n            curve2.Keys.Add(key3);\n\n            curve2.ComputeTangent(0, CurveTangent.Flat);\n            curve2.ComputeTangent(1, CurveTangent.Flat);\n            curve2.ComputeTangent(2, CurveTangent.Flat);\n\n            Assert.AreEqual(0.0f, curve2.Keys[0].TangentIn);\n            Assert.AreEqual(0.0f, curve2.Keys[0].TangentOut);\n\n            Assert.AreEqual(0.0f, curve2.Keys[1].TangentIn);\n            Assert.AreEqual(0.0f, curve2.Keys[1].TangentOut);\n\n            Assert.AreEqual(0.0f, curve2.Keys[2].TangentIn);\n            Assert.AreEqual(0.0f, curve2.Keys[2].TangentOut);\n\n            var curve3 = new Curve();\n            curve3.Keys.Add(key1);\n            curve3.Keys.Add(key2);\n            curve3.Keys.Add(key3);\n\n            curve3.ComputeTangent(0, CurveTangent.Linear);\n            curve3.ComputeTangent(1, CurveTangent.Linear);\n            curve3.ComputeTangent(2, CurveTangent.Linear);\n\n            Assert.AreEqual(0.0f, curve3.Keys[0].TangentIn);\n            Assert.AreEqual(0.799999952f, curve3.Keys[0].TangentOut);\n\n            Assert.AreEqual(0.799999952f, curve3.Keys[1].TangentIn);\n            Assert.AreEqual(2.10000014f, curve3.Keys[1].TangentOut);\n\n            Assert.AreEqual(2.10000014f, curve3.Keys[2].TangentIn);\n            Assert.AreEqual(0.0f, curve3.Keys[2].TangentOut); \n        }\n\n        [Test]\n        public void ComputeTangents()\n        {\n            var key1 = new CurveKey(-0.5f, 1.5f);\n            var key2 = new CurveKey(1.1f, 2.3f);\n            var key3 = new CurveKey(2.25f, 4.4f);\n\n            var curve1 = new Curve();\n            curve1.Keys.Add(key1);\n            curve1.Keys.Add(key2);\n            curve1.Keys.Add(key3);\n\n            curve1.ComputeTangents(CurveTangent.Smooth);\n\n            Assert.AreEqual(0.0f, curve1.Keys[0].TangentIn);\n            Assert.AreEqual(0.799999952f, curve1.Keys[0].TangentOut);\n\n            Assert.AreEqual(1.68727279f, curve1.Keys[1].TangentIn);\n            Assert.AreEqual(1.21272731f, curve1.Keys[1].TangentOut);\n\n            Assert.AreEqual(2.10000014f, curve1.Keys[2].TangentIn);\n            Assert.AreEqual(0.0f, curve1.Keys[2].TangentOut);\n\n            var curve2 = new Curve();\n            curve2.Keys.Add(key1);\n            curve2.Keys.Add(key2);\n            curve2.Keys.Add(key3);\n\n            curve2.ComputeTangents(CurveTangent.Flat);\n\n            Assert.AreEqual(0.0f, curve2.Keys[0].TangentIn);\n            Assert.AreEqual(0.0f, curve2.Keys[0].TangentOut);\n\n            Assert.AreEqual(0.0f, curve2.Keys[1].TangentIn);\n            Assert.AreEqual(0.0f, curve2.Keys[1].TangentOut);\n\n            Assert.AreEqual(0.0f, curve2.Keys[2].TangentIn);\n            Assert.AreEqual(0.0f, curve2.Keys[2].TangentOut);\n\n            var curve3 = new Curve();\n            curve3.Keys.Add(key1);\n            curve3.Keys.Add(key2);\n            curve3.Keys.Add(key3);\n\n            curve3.ComputeTangents(CurveTangent.Linear);\n\n            Assert.AreEqual(0.0f, curve3.Keys[0].TangentIn);\n            Assert.AreEqual(0.799999952f, curve3.Keys[0].TangentOut);\n\n            Assert.AreEqual(0.799999952f, curve3.Keys[1].TangentIn);\n            Assert.AreEqual(2.10000014f, curve3.Keys[1].TangentOut);\n\n            Assert.AreEqual(2.10000014f, curve3.Keys[2].TangentIn);\n            Assert.AreEqual(0.0f, curve3.Keys[2].TangentOut); \n        }\n\n        [Test]\n        public void IsConstant()\n        {\n            var curve1 = new Curve();\n            var curve2 = new Curve();\n            curve2.Keys.Add(new CurveKey(0, 0));\n            var curve3 = new Curve();\n            curve3.Keys.Add(new CurveKey(0, 0));\n            curve3.Keys.Add(new CurveKey(0, 0));\n\n            Assert.AreEqual(true, curve1.IsConstant);\n            Assert.AreEqual(true, curve2.IsConstant);\n            Assert.AreEqual(false, curve3.IsConstant);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/EnumConformingTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    /// <summary>\n    /// Tests for enum compatibility with XNA(here is only XNA enum members, extensions are not included).\n    /// </summary>\n    class EnumConformingTest\n    {\n        #region Framework\n\n        [Test]\n        public void ContainmentTypeEnum()\n        {\n            Assert.AreEqual(0, (int)ContainmentType.Disjoint);\n            Assert.AreEqual(1, (int)ContainmentType.Contains);\n            Assert.AreEqual(2, (int)ContainmentType.Intersects);\n        }\n\n        [Test]\n        public void CurveContinuityEnum()\n        {\n            Assert.AreEqual(0, (int)CurveContinuity.Smooth);\n            Assert.AreEqual(1, (int)CurveContinuity.Step);\n        }\n\n        [Test]\n        public void CurveLoopTypeEnum()\n        {\n            Assert.AreEqual(0, (int)CurveLoopType.Constant);\n            Assert.AreEqual(1, (int)CurveLoopType.Cycle);\n            Assert.AreEqual(2, (int)CurveLoopType.CycleOffset);\n            Assert.AreEqual(3, (int)CurveLoopType.Oscillate);\n            Assert.AreEqual(4, (int)CurveLoopType.Linear);\n        }\n\n        [Test]\n        public void CurveTangentEnum()\n        {\n            Assert.AreEqual(0, (int)CurveTangent.Flat);\n            Assert.AreEqual(1, (int)CurveTangent.Linear);\n            Assert.AreEqual(2, (int)CurveTangent.Smooth);\n        }\n\n        [Test]\n        public void DisplayOrientationEnum()\n        {\n            Assert.AreEqual(0, (int)DisplayOrientation.Default);\n            Assert.AreEqual(1, (int)DisplayOrientation.LandscapeLeft);\n            Assert.AreEqual(2, (int)DisplayOrientation.LandscapeRight);\n            Assert.AreEqual(4, (int)DisplayOrientation.Portrait);\n        }\n\n        [Test]\n        public void PlaneIntersectionTypeEnum()\n        {\n            Assert.AreEqual(0, (int)PlaneIntersectionType.Front);\n            Assert.AreEqual(1, (int)PlaneIntersectionType.Back);\n            Assert.AreEqual(2, (int)PlaneIntersectionType.Intersecting);\n        }\n\n        [Test]\n        public void PlayerIndexEnum()\n        {\n            Assert.AreEqual(0, (int)PlayerIndex.One);\n            Assert.AreEqual(1, (int)PlayerIndex.Two);\n            Assert.AreEqual(2, (int)PlayerIndex.Three);\n            Assert.AreEqual(3, (int)PlayerIndex.Four);\n        }\n\n        #endregion\n\n        #region Framework.Graphics\n\n        [Test]\n        public void BlendEnum()\n        {\n            Assert.AreEqual(0, (int)Blend.One);\n            Assert.AreEqual(1, (int)Blend.Zero);\n            Assert.AreEqual(2, (int)Blend.SourceColor);\n            Assert.AreEqual(3, (int)Blend.InverseSourceColor);\n            Assert.AreEqual(4, (int)Blend.SourceAlpha);\n            Assert.AreEqual(5, (int)Blend.InverseSourceAlpha);\n            Assert.AreEqual(6, (int)Blend.DestinationColor);\n            Assert.AreEqual(7, (int)Blend.InverseDestinationColor);\n            Assert.AreEqual(8, (int)Blend.DestinationAlpha);\n            Assert.AreEqual(9, (int)Blend.InverseDestinationAlpha);\n            Assert.AreEqual(10, (int)Blend.BlendFactor);\n            Assert.AreEqual(11, (int)Blend.InverseBlendFactor);\n            Assert.AreEqual(12, (int)Blend.SourceAlphaSaturation);\n        }\n\n        [Test]\n        public void BlendFunctionEnum()\n        {\n            Assert.AreEqual(0, (int)BlendFunction.Add);\n            Assert.AreEqual(1, (int)BlendFunction.Subtract);\n            Assert.AreEqual(2, (int)BlendFunction.ReverseSubtract);\n            Assert.AreEqual(3, (int)BlendFunction.Min);\n            Assert.AreEqual(4, (int)BlendFunction.Max);\n        }\n\n        [Test]\n        public void BufferUsageEnum()\n        {\n            Assert.AreEqual(0, (int)BufferUsage.None);\n            Assert.AreEqual(1, (int)BufferUsage.WriteOnly);\n        }\n\n        [Test]\n        public void ClearOptionsEnum()\n        {\n            Assert.AreEqual(1, (int)ClearOptions.Target);\n            Assert.AreEqual(2, (int)ClearOptions.DepthBuffer);\n            Assert.AreEqual(4, (int)ClearOptions.Stencil);\n        }\n\n        [Test]\n        public void ColorWriteChannelsEnum()\n        {\n            Assert.AreEqual(0, (int)ColorWriteChannels.None);\n            Assert.AreEqual(1, (int)ColorWriteChannels.Red);\n            Assert.AreEqual(2, (int)ColorWriteChannels.Green);\n            Assert.AreEqual(4, (int)ColorWriteChannels.Blue);\n            Assert.AreEqual(8, (int)ColorWriteChannels.Alpha);\n            Assert.AreEqual(15, (int)ColorWriteChannels.All);\n        }\n\n        [Test]\n        public void CompareFunctionEnum()\n        {\n            Assert.AreEqual(0, (int)CompareFunction.Always);\n            Assert.AreEqual(1, (int)CompareFunction.Never);\n            Assert.AreEqual(2, (int)CompareFunction.Less);\n            Assert.AreEqual(3, (int)CompareFunction.LessEqual);\n            Assert.AreEqual(4, (int)CompareFunction.Equal);\n            Assert.AreEqual(5, (int)CompareFunction.GreaterEqual);\n            Assert.AreEqual(6, (int)CompareFunction.Greater);\n            Assert.AreEqual(7, (int)CompareFunction.NotEqual);\n        }\n\n        [Test]\n        public void CubeMapFaceEnum()\n        {\n            Assert.AreEqual(0, (int)CubeMapFace.PositiveX);\n            Assert.AreEqual(1, (int)CubeMapFace.NegativeX);\n            Assert.AreEqual(2, (int)CubeMapFace.PositiveY);\n            Assert.AreEqual(3, (int)CubeMapFace.NegativeY);\n            Assert.AreEqual(4, (int)CubeMapFace.PositiveZ);\n            Assert.AreEqual(5, (int)CubeMapFace.NegativeZ);\n        }\n\n        [Test]\n        public void CullModeEnum()\n        {\n            Assert.AreEqual(0, (int)CullMode.None);\n            Assert.AreEqual(1, (int)CullMode.CullClockwiseFace);\n            Assert.AreEqual(2, (int)CullMode.CullCounterClockwiseFace);\n        }\n\n        [Test]\n        public void DepthFormatEnum()\n        {\n            Assert.AreEqual(0, (int)DepthFormat.None);\n            Assert.AreEqual(1, (int)DepthFormat.Depth16);\n            Assert.AreEqual(2, (int)DepthFormat.Depth24);\n            Assert.AreEqual(3, (int)DepthFormat.Depth24Stencil8);\n        }\n\n        [Test]\n        public void EffectParameterClassEnum()\n        {\n            Assert.AreEqual(0, (int)EffectParameterClass.Scalar);\n            Assert.AreEqual(1, (int)EffectParameterClass.Vector);\n            Assert.AreEqual(2, (int)EffectParameterClass.Matrix);\n            Assert.AreEqual(3, (int)EffectParameterClass.Object);\n            Assert.AreEqual(4, (int)EffectParameterClass.Struct);\n        }\n\n        [Test]\n        public void EffectParameterTypeEnum()\n        {\n            Assert.AreEqual(0, (int) EffectParameterType.Void);\n\t\t    Assert.AreEqual(1, (int)EffectParameterType.Bool);\n\t\t    Assert.AreEqual(2, (int)EffectParameterType.Int32);\n\t\t    Assert.AreEqual(3, (int)EffectParameterType.Single);\n\t\t    Assert.AreEqual(4, (int)EffectParameterType.String);\n\t\t    Assert.AreEqual(5, (int)EffectParameterType.Texture);\n\t\t    Assert.AreEqual(6, (int)EffectParameterType.Texture1D);\n\t\t    Assert.AreEqual(7, (int)EffectParameterType.Texture2D);\n\t\t    Assert.AreEqual(8, (int)EffectParameterType.Texture3D);\n            Assert.AreEqual(9, (int)EffectParameterType.TextureCube);\n        }\n\n        [Test]\n        public void FillModeEnum()\n        {\n            Assert.AreEqual(0, (int)FillMode.Solid);\n            Assert.AreEqual(1, (int)FillMode.WireFrame);         \n        }\n\n        [Test]\n        public void GraphicsDeviceStatusEnum()\n        {\n            Assert.AreEqual(0, (int)GraphicsDeviceStatus.Normal);\n            Assert.AreEqual(1, (int)GraphicsDeviceStatus.Lost);\n            Assert.AreEqual(2, (int)GraphicsDeviceStatus.NotReset);\n        }\n\n        [Test]\n        public void GraphicsProfileEnum()\n        {\n            Assert.AreEqual(0, (int)GraphicsProfile.Reach);\n            Assert.AreEqual(1, (int)GraphicsProfile.HiDef);\n        }\n\n        [Test]\n        public void IndexElementSizeEnum()\n        {\n            Assert.AreEqual(0, (int)IndexElementSize.SixteenBits);\n            Assert.AreEqual(1, (int)IndexElementSize.ThirtyTwoBits);\n        }\n\n        [Test]\n        public void PresentIntervalEnum()\n        {\n            Assert.AreEqual(0, (int)PresentInterval.Default);\n            Assert.AreEqual(1, (int)PresentInterval.One);\n            Assert.AreEqual(2, (int)PresentInterval.Two);\n            Assert.AreEqual(3, (int)PresentInterval.Immediate);\n        }\n\n        [Test]\n        public void PrimitiveTypeEnum()\n        {\n            Assert.AreEqual(0, (int)PrimitiveType.TriangleList);\n            Assert.AreEqual(1, (int)PrimitiveType.TriangleStrip);\n            Assert.AreEqual(2, (int)PrimitiveType.LineList);\n            Assert.AreEqual(3, (int)PrimitiveType.LineStrip);\n#if !XNA\n            Assert.AreEqual(4, (int)PrimitiveType.PointList);\n#endif\n        }\n\n        [Test]\n        public void RenderTargetUsageEnum()\n        {\n            Assert.AreEqual(0, (int)RenderTargetUsage.DiscardContents);\n            Assert.AreEqual(1, (int)RenderTargetUsage.PreserveContents);\n            Assert.AreEqual(2, (int)RenderTargetUsage.PlatformContents);\n        }\n\n        [Test]\n        public void SetDataOptionsEnum()\n        {\n            Assert.AreEqual(0, (int)SetDataOptions.None);\n            Assert.AreEqual(1, (int)SetDataOptions.Discard);\n            Assert.AreEqual(2, (int)SetDataOptions.NoOverwrite);\n        }\n\n        [Test]\n        public void SpriteSortModeEnum()\n        {\n            Assert.AreEqual(0, (int)SpriteSortMode.Deferred);\n            Assert.AreEqual(1, (int)SpriteSortMode.Immediate);\n            Assert.AreEqual(2, (int)SpriteSortMode.Texture);\n            Assert.AreEqual(3, (int)SpriteSortMode.BackToFront);\n            Assert.AreEqual(4, (int)SpriteSortMode.FrontToBack);\n        }\n\n        [Test]\n        public void StencilOperationEnum()\n        {\n            Assert.AreEqual(0, (int)StencilOperation.Keep);\n            Assert.AreEqual(1, (int)StencilOperation.Zero);\n            Assert.AreEqual(2, (int)StencilOperation.Replace);\n            Assert.AreEqual(3, (int)StencilOperation.Increment);\n            Assert.AreEqual(4, (int)StencilOperation.Decrement);\n            Assert.AreEqual(5, (int)StencilOperation.IncrementSaturation);\n            Assert.AreEqual(6, (int)StencilOperation.DecrementSaturation);\n            Assert.AreEqual(7, (int)StencilOperation.Invert);\n        }\n\n        [Test]\n        public void SurfaceFormateEnum()\n        {\n            Assert.AreEqual(0, (int)SurfaceFormat.Color);\n            Assert.AreEqual(1, (int)SurfaceFormat.Bgr565);\n            Assert.AreEqual(2, (int)SurfaceFormat.Bgra5551);\n            Assert.AreEqual(3, (int)SurfaceFormat.Bgra4444);\n            Assert.AreEqual(4, (int)SurfaceFormat.Dxt1);\n            Assert.AreEqual(5, (int)SurfaceFormat.Dxt3);\n            Assert.AreEqual(6, (int)SurfaceFormat.Dxt5);\n            Assert.AreEqual(7, (int)SurfaceFormat.NormalizedByte2);\n            Assert.AreEqual(8, (int)SurfaceFormat.NormalizedByte4);\n            Assert.AreEqual(9, (int)SurfaceFormat.Rgba1010102);\n            Assert.AreEqual(10, (int)SurfaceFormat.Rg32);\n            Assert.AreEqual(11, (int)SurfaceFormat.Rgba64);\n            Assert.AreEqual(12, (int)SurfaceFormat.Alpha8);\n            Assert.AreEqual(13, (int)SurfaceFormat.Single);\n            Assert.AreEqual(14, (int)SurfaceFormat.Vector2);\n            Assert.AreEqual(15, (int)SurfaceFormat.Vector4);\n            Assert.AreEqual(16, (int)SurfaceFormat.HalfSingle);\n            Assert.AreEqual(17, (int)SurfaceFormat.HalfVector2);\n            Assert.AreEqual(18, (int)SurfaceFormat.HalfVector4);\n            Assert.AreEqual(19, (int)SurfaceFormat.HdrBlendable);\n        }\n\n        [Test]\n        public void TextureAddressModeEnum()\n        {\n            Assert.AreEqual(0, (int)TextureAddressMode.Wrap);\n            Assert.AreEqual(1, (int)TextureAddressMode.Clamp);\n            Assert.AreEqual(2, (int)TextureAddressMode.Mirror);\n        }\n\n        [Test]\n        public void TextureFilterEnum()\n        {\n            Assert.AreEqual(0, (int)TextureFilter.Linear);\n            Assert.AreEqual(1, (int)TextureFilter.Point);\n            Assert.AreEqual(2, (int)TextureFilter.Anisotropic);\n            Assert.AreEqual(3, (int)TextureFilter.LinearMipPoint);\n            Assert.AreEqual(4, (int)TextureFilter.PointMipLinear);\n            Assert.AreEqual(5, (int)TextureFilter.MinLinearMagPointMipLinear);\n            Assert.AreEqual(6, (int)TextureFilter.MinLinearMagPointMipPoint);\n            Assert.AreEqual(7, (int)TextureFilter.MinPointMagLinearMipLinear);\n            Assert.AreEqual(8, (int)TextureFilter.MinPointMagLinearMipPoint);\n        }\n\n        [Test]\n        public void VertexElementFormatEnum()\n        {\n            Assert.AreEqual(0, (int)VertexElementFormat.Single);\n            Assert.AreEqual(1, (int)VertexElementFormat.Vector2);\n            Assert.AreEqual(2, (int)VertexElementFormat.Vector3);\n            Assert.AreEqual(3, (int)VertexElementFormat.Vector4);\n            Assert.AreEqual(4, (int)VertexElementFormat.Color);\n            Assert.AreEqual(5, (int)VertexElementFormat.Byte4);\n            Assert.AreEqual(6, (int)VertexElementFormat.Short2);\n            Assert.AreEqual(7, (int)VertexElementFormat.Short4);\n            Assert.AreEqual(8, (int)VertexElementFormat.NormalizedShort2);\n            Assert.AreEqual(9, (int)VertexElementFormat.NormalizedShort4);\n            Assert.AreEqual(10, (int)VertexElementFormat.HalfVector2);\n            Assert.AreEqual(11, (int)VertexElementFormat.HalfVector4);\n        }\n\n        [Test]\n        public void VertexElementUsageEnum()\n        {\n            Assert.AreEqual(0, (int)VertexElementUsage.Position);\n            Assert.AreEqual(1, (int)VertexElementUsage.Color);\n            Assert.AreEqual(2, (int)VertexElementUsage.TextureCoordinate);\n            Assert.AreEqual(3, (int)VertexElementUsage.Normal);\n            Assert.AreEqual(4, (int)VertexElementUsage.Binormal);\n            Assert.AreEqual(5, (int)VertexElementUsage.Tangent);\n            Assert.AreEqual(6, (int)VertexElementUsage.BlendIndices);\n            Assert.AreEqual(7, (int)VertexElementUsage.BlendWeight);\n            Assert.AreEqual(8, (int)VertexElementUsage.Depth);\n            Assert.AreEqual(9, (int)VertexElementUsage.Fog);\n            Assert.AreEqual(10, (int)VertexElementUsage.PointSize);\n            Assert.AreEqual(11, (int)VertexElementUsage.Sample);\n            Assert.AreEqual(12, (int)VertexElementUsage.TessellateFactor);\n        }\n\n        #endregion\n\n        #region Framework.Input\n\n        [Test]\n        public void ButtonsEnum()\n        {\n            Assert.AreEqual(1, (int)Buttons.DPadUp);\n            Assert.AreEqual(2, (int)Buttons.DPadDown);\n            Assert.AreEqual(4, (int)Buttons.DPadLeft);\n            Assert.AreEqual(8, (int)Buttons.DPadRight);\n            Assert.AreEqual(16, (int)Buttons.Start);\n            Assert.AreEqual(32, (int)Buttons.Back);\n            Assert.AreEqual(64, (int)Buttons.LeftStick);\n            Assert.AreEqual(128, (int)Buttons.RightStick);\n            Assert.AreEqual(256, (int)Buttons.LeftShoulder);\n            Assert.AreEqual(512, (int)Buttons.RightShoulder);\n            Assert.AreEqual(2048, (int)Buttons.BigButton);\n            Assert.AreEqual(4096, (int)Buttons.A);\n            Assert.AreEqual(8192, (int)Buttons.B);\n            Assert.AreEqual(16384, (int)Buttons.X);\n            Assert.AreEqual(32768, (int)Buttons.Y);\n            Assert.AreEqual(2097152, (int)Buttons.LeftThumbstickLeft);\n            Assert.AreEqual(4194304, (int)Buttons.RightTrigger);\n            Assert.AreEqual(8388608, (int)Buttons.LeftTrigger);\n            Assert.AreEqual(16777216, (int)Buttons.RightThumbstickUp);\n            Assert.AreEqual(33554432, (int)Buttons.RightThumbstickDown);\n            Assert.AreEqual(67108864, (int)Buttons.RightThumbstickRight);\n            Assert.AreEqual(134217728, (int)Buttons.RightThumbstickLeft);\n            Assert.AreEqual(268435456, (int)Buttons.LeftThumbstickUp);\n            Assert.AreEqual(536870912, (int)Buttons.LeftThumbstickDown);\n            Assert.AreEqual(1073741824, (int)Buttons.LeftThumbstickRight);\n        }\n\n        [Test]\n        public void ButtonStateEnum()\n        {\n            Assert.AreEqual(0, (int)ButtonState.Released);\n            Assert.AreEqual(1, (int)ButtonState.Pressed);\n        }\n\n        [Test]\n        public void GamePadTypeEnum()\n        {\n            Assert.AreEqual(0, (int)GamePadType.Unknown);\n            Assert.AreEqual(1, (int)GamePadType.GamePad);\n            Assert.AreEqual(2, (int)GamePadType.Wheel);\n            Assert.AreEqual(3, (int)GamePadType.ArcadeStick);\n            Assert.AreEqual(4, (int)GamePadType.FlightStick);\n            Assert.AreEqual(5, (int)GamePadType.DancePad);\n            Assert.AreEqual(6, (int)GamePadType.Guitar);\n            Assert.AreEqual(7, (int)GamePadType.AlternateGuitar);\n            Assert.AreEqual(8, (int)GamePadType.DrumKit);\n            Assert.AreEqual(768, (int)GamePadType.BigButtonPad);\n        }\n\n        [Test]\n        public void KeysEnum()\n        {\n            Assert.AreEqual(0, (int)Keys.None);\n            Assert.AreEqual(8, (int)Keys.Back);\n            Assert.AreEqual(9, (int)Keys.Tab);\n            Assert.AreEqual(13, (int)Keys.Enter);\n            Assert.AreEqual(19, (int)Keys.Pause);\n            Assert.AreEqual(20, (int)Keys.CapsLock);\n            Assert.AreEqual(21, (int)Keys.Kana);\n            Assert.AreEqual(25, (int)Keys.Kanji);\n            Assert.AreEqual(27, (int)Keys.Escape);\n            Assert.AreEqual(28, (int)Keys.ImeConvert);\n            Assert.AreEqual(29, (int)Keys.ImeNoConvert);\n            Assert.AreEqual(32, (int)Keys.Space);\n            Assert.AreEqual(33, (int)Keys.PageUp);\n            Assert.AreEqual(34, (int)Keys.PageDown);\n            Assert.AreEqual(35, (int)Keys.End);\n            Assert.AreEqual(36, (int)Keys.Home);\n            Assert.AreEqual(37, (int)Keys.Left);\n            Assert.AreEqual(38, (int)Keys.Up);\n            Assert.AreEqual(39, (int)Keys.Right);\n            Assert.AreEqual(40, (int)Keys.Down);\n            Assert.AreEqual(41, (int)Keys.Select);\n            Assert.AreEqual(42, (int)Keys.Print);\n            Assert.AreEqual(43, (int)Keys.Execute);\n            Assert.AreEqual(44, (int)Keys.PrintScreen);\n            Assert.AreEqual(45, (int)Keys.Insert);\n            Assert.AreEqual(46, (int)Keys.Delete);\n            Assert.AreEqual(47, (int)Keys.Help);\n            Assert.AreEqual(48, (int)Keys.D0);\n            Assert.AreEqual(49, (int)Keys.D1);\n            Assert.AreEqual(50, (int)Keys.D2);\n            Assert.AreEqual(51, (int)Keys.D3);\n            Assert.AreEqual(52, (int)Keys.D4);\n            Assert.AreEqual(53, (int)Keys.D5);\n            Assert.AreEqual(54, (int)Keys.D6);\n            Assert.AreEqual(55, (int)Keys.D7);\n            Assert.AreEqual(56, (int)Keys.D8);\n            Assert.AreEqual(57, (int)Keys.D9);\n            Assert.AreEqual(65, (int)Keys.A);\n            Assert.AreEqual(66, (int)Keys.B);\n            Assert.AreEqual(67, (int)Keys.C);\n            Assert.AreEqual(68, (int)Keys.D);\n            Assert.AreEqual(69, (int)Keys.E);\n            Assert.AreEqual(70, (int)Keys.F);\n            Assert.AreEqual(71, (int)Keys.G);\n            Assert.AreEqual(72, (int)Keys.H);\n            Assert.AreEqual(73, (int)Keys.I);\n            Assert.AreEqual(74, (int)Keys.J);\n            Assert.AreEqual(75, (int)Keys.K);\n            Assert.AreEqual(76, (int)Keys.L);\n            Assert.AreEqual(77, (int)Keys.M);\n            Assert.AreEqual(78, (int)Keys.N);\n            Assert.AreEqual(79, (int)Keys.O);\n            Assert.AreEqual(80, (int)Keys.P);\n            Assert.AreEqual(81, (int)Keys.Q);\n            Assert.AreEqual(82, (int)Keys.R);\n            Assert.AreEqual(83, (int)Keys.S);\n            Assert.AreEqual(84, (int)Keys.T);\n            Assert.AreEqual(85, (int)Keys.U);\n            Assert.AreEqual(86, (int)Keys.V);\n            Assert.AreEqual(87, (int)Keys.W);\n            Assert.AreEqual(88, (int)Keys.X);\n            Assert.AreEqual(89, (int)Keys.Y);\n            Assert.AreEqual(90, (int)Keys.Z);\n            Assert.AreEqual(91, (int)Keys.LeftWindows);\n            Assert.AreEqual(92, (int)Keys.RightWindows);\n            Assert.AreEqual(93, (int)Keys.Apps);\n            Assert.AreEqual(95, (int)Keys.Sleep);\n            Assert.AreEqual(96, (int)Keys.NumPad0);\n            Assert.AreEqual(97, (int)Keys.NumPad1);\n            Assert.AreEqual(98, (int)Keys.NumPad2);\n            Assert.AreEqual(99, (int)Keys.NumPad3);\n            Assert.AreEqual(100, (int)Keys.NumPad4);\n            Assert.AreEqual(101, (int)Keys.NumPad5);\n            Assert.AreEqual(102, (int)Keys.NumPad6);\n            Assert.AreEqual(103, (int)Keys.NumPad7);\n            Assert.AreEqual(104, (int)Keys.NumPad8);\n            Assert.AreEqual(105, (int)Keys.NumPad9);\n            Assert.AreEqual(106, (int)Keys.Multiply);\n            Assert.AreEqual(107, (int)Keys.Add);\n            Assert.AreEqual(108, (int)Keys.Separator);\n            Assert.AreEqual(109, (int)Keys.Subtract);\n            Assert.AreEqual(110, (int)Keys.Decimal);\n            Assert.AreEqual(111, (int)Keys.Divide);\n            Assert.AreEqual(112, (int)Keys.F1);\n            Assert.AreEqual(113, (int)Keys.F2);\n            Assert.AreEqual(114, (int)Keys.F3);\n            Assert.AreEqual(115, (int)Keys.F4);\n            Assert.AreEqual(116, (int)Keys.F5);\n            Assert.AreEqual(117, (int)Keys.F6);\n            Assert.AreEqual(118, (int)Keys.F7);\n            Assert.AreEqual(119, (int)Keys.F8);\n            Assert.AreEqual(120, (int)Keys.F9);\n            Assert.AreEqual(121, (int)Keys.F10);\n            Assert.AreEqual(122, (int)Keys.F11);\n            Assert.AreEqual(123, (int)Keys.F12);\n            Assert.AreEqual(124, (int)Keys.F13);\n            Assert.AreEqual(125, (int)Keys.F14);\n            Assert.AreEqual(126, (int)Keys.F15);\n            Assert.AreEqual(127, (int)Keys.F16);\n            Assert.AreEqual(128, (int)Keys.F17);\n            Assert.AreEqual(129, (int)Keys.F18);\n            Assert.AreEqual(130, (int)Keys.F19);\n            Assert.AreEqual(131, (int)Keys.F20);\n            Assert.AreEqual(132, (int)Keys.F21);\n            Assert.AreEqual(133, (int)Keys.F22);\n            Assert.AreEqual(134, (int)Keys.F23);\n            Assert.AreEqual(135, (int)Keys.F24);\n            Assert.AreEqual(144, (int)Keys.NumLock);\n            Assert.AreEqual(145, (int)Keys.Scroll);\n            Assert.AreEqual(160, (int)Keys.LeftShift);\n            Assert.AreEqual(161, (int)Keys.RightShift);\n            Assert.AreEqual(162, (int)Keys.LeftControl);\n            Assert.AreEqual(163, (int)Keys.RightControl);\n            Assert.AreEqual(164, (int)Keys.LeftAlt);\n            Assert.AreEqual(165, (int)Keys.RightAlt);\n            Assert.AreEqual(166, (int)Keys.BrowserBack);\n            Assert.AreEqual(167, (int)Keys.BrowserForward);\n            Assert.AreEqual(168, (int)Keys.BrowserRefresh);\n            Assert.AreEqual(169, (int)Keys.BrowserStop);\n            Assert.AreEqual(170, (int)Keys.BrowserSearch);\n            Assert.AreEqual(171, (int)Keys.BrowserFavorites);\n            Assert.AreEqual(172, (int)Keys.BrowserHome);\n            Assert.AreEqual(173, (int)Keys.VolumeMute);\n            Assert.AreEqual(174, (int)Keys.VolumeDown);\n            Assert.AreEqual(175, (int)Keys.VolumeUp);\n            Assert.AreEqual(176, (int)Keys.MediaNextTrack);\n            Assert.AreEqual(177, (int)Keys.MediaPreviousTrack);\n            Assert.AreEqual(178, (int)Keys.MediaStop);\n            Assert.AreEqual(179, (int)Keys.MediaPlayPause);\n            Assert.AreEqual(180, (int)Keys.LaunchMail);\n            Assert.AreEqual(181, (int)Keys.SelectMedia);\n            Assert.AreEqual(182, (int)Keys.LaunchApplication1);\n            Assert.AreEqual(183, (int)Keys.LaunchApplication2);\n            Assert.AreEqual(186, (int)Keys.OemSemicolon);\n            Assert.AreEqual(187, (int)Keys.OemPlus);\n            Assert.AreEqual(188, (int)Keys.OemComma);\n            Assert.AreEqual(189, (int)Keys.OemMinus);\n            Assert.AreEqual(190, (int)Keys.OemPeriod);\n            Assert.AreEqual(191, (int)Keys.OemQuestion);\n            Assert.AreEqual(192, (int)Keys.OemTilde);\n            Assert.AreEqual(202, (int)Keys.ChatPadGreen);\n            Assert.AreEqual(203, (int)Keys.ChatPadOrange);\n            Assert.AreEqual(219, (int)Keys.OemOpenBrackets);\n            Assert.AreEqual(220, (int)Keys.OemPipe);\n            Assert.AreEqual(221, (int)Keys.OemCloseBrackets);\n            Assert.AreEqual(222, (int)Keys.OemQuotes);\n            Assert.AreEqual(223, (int)Keys.Oem8);\n            Assert.AreEqual(226, (int)Keys.OemBackslash);\n            Assert.AreEqual(229, (int)Keys.ProcessKey);\n            Assert.AreEqual(242, (int)Keys.OemCopy);\n            Assert.AreEqual(243, (int)Keys.OemAuto);\n            Assert.AreEqual(244, (int)Keys.OemEnlW);\n            Assert.AreEqual(246, (int)Keys.Attn);\n            Assert.AreEqual(247, (int)Keys.Crsel);\n            Assert.AreEqual(248, (int)Keys.Exsel);\n            Assert.AreEqual(249, (int)Keys.EraseEof);\n            Assert.AreEqual(250, (int)Keys.Play);\n            Assert.AreEqual(251, (int)Keys.Zoom);\n            Assert.AreEqual(253, (int)Keys.Pa1);\n            Assert.AreEqual(254, (int)Keys.OemClear);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/FrameworkDispatcherTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class FrameworkDispatcherTest\n    {\n        [Test]\n        public void CallOnPrimaryThread()\n        {\n            FrameworkDispatcher.Update();\n        }\n\n        [Test]\n        public void CallOnAnotherThread()\n        {\n            // Ensure that FrameworkDispatcher is initialized on the main thread.\n            FrameworkDispatcher.Update();\n\n            _callOnAnotherThreadResult = CallOnAnotherThreadTestResult.NotRun;\n\n            var thread = new Thread(() => {\n                _callOnAnotherThreadResult = CallOnAnotherThreadTestResult.Exception;\n                FrameworkDispatcher.Update();\n\n                // If executing this line, no exception was thrown.\n                _callOnAnotherThreadResult = CallOnAnotherThreadTestResult.NoException;\n\n            });\n\n            thread.Start();\n            if (!thread.Join(1000))\n                Assert.Fail(\"Secondary thread did not terminate in time.\");\n\n            Assert.AreEqual(CallOnAnotherThreadTestResult.NoException, _callOnAnotherThreadResult);\n        }\n        private static CallOnAnotherThreadTestResult _callOnAnotherThreadResult;\n\n        enum CallOnAnotherThreadTestResult\n        {\n            NotRun,\n            NoException,\n            Exception\n        }\n\n#if !XNA\n        [Test]\n        public void UpdatesSoundEffectInstancePool()\n        {\n            FrameworkDispatcher.Update();\n            var sfx = new SoundEffect(new byte[] { 0, 0 }, 44100, AudioChannels.Mono);\n\n            sfx.Play();\n            Assert.AreEqual(1, GetPlayingSoundCount());\n            Thread.Sleep(25); // Give the sound effect time to play\n\n            FrameworkDispatcher.Update();\n            Assert.AreEqual(0, GetPlayingSoundCount());\n        }\n\n        private int GetPlayingSoundCount()\n        {\n            // SoundEffectInstancePool._playingInstances is private\n            // and not worth making internal only for this test.\n            // Use reflection to get it.\n            var fieldInfo = typeof(Microsoft.Xna.Platform.Audio.AudioService).GetField(\"_playingInstances\", BindingFlags.NonPublic | BindingFlags.Instance);\n            var field = (LinkedList<SoundEffectInstance>)fieldInfo.GetValue(Microsoft.Xna.Platform.Audio.AudioService.Current);\n\n            return field.Count;\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/MathHelperTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    public class MathHelperTest\n    {\n        [Test]\n        public void ClampFloatTest()\n        {\n            Assert.True(MathHelper.Clamp(1f, 0f, 2f) == 1f, \"Failed boundary test, clamp [0,2] on 1 should be 1\");\n            Assert.True(MathHelper.Clamp(1f, 0f, 1f) == 1f, \"Failed boundary test, clamp [0,1] on 1 should be 1\");\n            Assert.True(MathHelper.Clamp(1f, 2f, 5f) == 2f, \"Failed boundary test, clamp [2,5] on 1 should be 2\");\n            Assert.True(MathHelper.Clamp(1f, -50f, -10f) == -10f, \"Failed boundary test, clamp [-50f, -10f] on 1 should be -10\");\n            Assert.True(MathHelper.Clamp(1f, -50f, 25f) == 1f, \"Failed boundary test, clamp [-50, 25] on 1 should be 1\");\n            Assert.True(MathHelper.Clamp(0f, 1f, 1f) == 1f, \"Failed boundary test, clamp [1,1] on 0 should be 1\");\n            Assert.True(MathHelper.Clamp(0f, -1f, -1f) == -1f, \"Failed boundary test, clamp [-1,-1] on 0 should be -1\");\n        }\n\n        [Test]\n        public void ClampIntTest()\n        {\n            Assert.True(MathHelper.Clamp(1, 0, 2) == 1, \"Failed boundary test, clamp [0,2] on 1 should be 1\");\n            Assert.True(MathHelper.Clamp(1, 0, 1) == 1, \"Failed boundary test, clamp [0,1] on 1 should be 1\");\n            Assert.True(MathHelper.Clamp(1, 2, 5) == 2, \"Failed boundary test, clamp [2,5] on 1 should be 2\");\n            Assert.True(MathHelper.Clamp(1, -50, -10) == -10, \"Failed boundary test, clamp [-50f, -10f] on 1 should be -10\");\n            Assert.True(MathHelper.Clamp(1, -50, 25) == 1, \"Failed boundary test, clamp [-50, 25] on 1 should be 1\");\n            Assert.True(MathHelper.Clamp(0, 1, 1) == 1, \"Failed boundary test, clamp [1,1] on 0 should be 1\");\n            Assert.True(MathHelper.Clamp(0, -1, -1) == -1, \"Failed boundary test, clamp [-1,-1] on 0 should be -1\");\n        }\n\n        [Test]\n        public void DistanceTest()\n        {\n            Assert.AreEqual(MathHelper.Distance(0, 5f), 5f, \"Distance test failed on [0,5]\");\n            Assert.AreEqual(MathHelper.Distance(-5f, 5f), 10f, \"Distance test failed on [-5,5]\");\n            Assert.AreEqual(MathHelper.Distance(0f, 0f), 0f, \"Distance test failed on [0,0]\");\n            Assert.AreEqual(MathHelper.Distance(-5f, -1f), 4f, \"Distance test failed on [-5,-1]\");\n        }\n\n        [Test]\n        public void LerpTest()\n        {\n            Assert.AreEqual(MathHelper.Lerp(0f, 5f, .5f), 2.5f, \"Lerp test failed on [0,5,.5]\");\n            Assert.AreEqual(MathHelper.Lerp(-5f, 5f, 0.5f), 0f, \"Lerp test failed on [-5,5,0.5]\");\n            Assert.AreEqual(MathHelper.Lerp(0f, 0f, 0.5f), 0f, \"Lerp test failed on [0,0,0.5]\");\n            Assert.AreEqual(MathHelper.Lerp(-5f, -1f, 0.5f), -3f, \"Lerp test failed on [-5,-1, 0.5]\");\n            // The following test checks for XNA compatibility. \n            // Even though the calculation itself should return \"1\", the XNA implementaion returns 0 (presumably due to a efficiency/precision tradeoff).\n            Assert.AreEqual(MathHelper.Lerp(10000000000000000f, 1f, 1f), 0f, \"Lerp test failed on [10000000000000000,1,1]\");\n        }\n\n#if !XNA\n        [Test]\n        public void LerpPreciseTest()\n        {\n            Assert.AreEqual(MathHelper.LerpPrecise(0f, 5f, .5f), 2.5f, \"LerpPrecise test failed on [0,5,.5]\");\n            Assert.AreEqual(MathHelper.LerpPrecise(-5f, 5f, 0.5f), 0f, \"LerpPrecise test failed on [-5,5,0.5]\");\n            Assert.AreEqual(MathHelper.LerpPrecise(0f, 0f, 0.5f), 0f, \"LerpPrecise test failed on [0,0,0.5]\");\n            Assert.AreEqual(MathHelper.LerpPrecise(-5f, -1f, 0.5f), -3f, \"LerpPrecise test failed on [-5,-1, 0.5]\");\n            Assert.AreEqual(MathHelper.LerpPrecise(10000000000000000f, 1f, 1f), 1, \"LerpPrecise test failed on [10000000000000000,1,1]\");\n        }\n#endif\n\n        [Test]\n        public void Min()\n        {\n            Assert.AreEqual(-0.5f, MathHelper.Min(-0.5f, -0.5f));\n            Assert.AreEqual(-0.5f, MathHelper.Min(-0.5f,0.0f));\n            Assert.AreEqual(-0.5f, MathHelper.Min(0.0f, -0.5f));\n            Assert.AreEqual(0, MathHelper.Min(0, 0));\n            Assert.AreEqual(-5, MathHelper.Min(-5, 5));\n            Assert.AreEqual(-5, MathHelper.Min(5, -5));\n        }\n\n        [Test]\n        public void Max()\n        {\n            Assert.AreEqual(-0.5f, MathHelper.Min(-0.5f, -0.5f));\n            Assert.AreEqual(0.0f, MathHelper.Max(-0.5f,0.0f));\n            Assert.AreEqual(0.0f, MathHelper.Max(0.0f, -0.5f));\n            Assert.AreEqual(0, MathHelper.Max(0, 0));\n            Assert.AreEqual(5, MathHelper.Max(-5, 5));\n            Assert.AreEqual(5, MathHelper.Max(5, -5));\n        }\n\n        [TestCase(MathHelper.PiOver4, 0.7853982f)]\n        [TestCase(MathHelper.PiOver2, 1.5707964f)]\n        [TestCase(MathHelper.Pi, 3.1415927f)]\n        [TestCase(MathHelper.TwoPi, 6.2831855f)]\n        public void PiConstantsAreExpectedValues(float actualValue, float expectedValue)\n        {\n            Assert.AreEqual(expectedValue, actualValue);\n        }\n\n        [TestCase(0f, 0f)]\n        [TestCase(MathHelper.PiOver4, MathHelper.PiOver4)]\n        [TestCase(-MathHelper.PiOver4, -MathHelper.PiOver4)]\n        [TestCase(MathHelper.PiOver2, MathHelper.PiOver2)]\n        [TestCase(-MathHelper.PiOver2, -MathHelper.PiOver2)]\n        [TestCase(MathHelper.Pi, MathHelper.Pi)]\n        [TestCase(-MathHelper.Pi, MathHelper.Pi)]\n        [TestCase(MathHelper.TwoPi, 0f)]\n        [TestCase(-MathHelper.TwoPi, 0f)]\n        [TestCase(10f, -2.566371f)]\n        [TestCase(-10f, 2.566371f)]\n        // Pi boundaries\n        [TestCase(3.1415927f, 3.1415927f)]\n        [TestCase(3.141593f, -3.1415925f)]\n        [TestCase(-3.1415925f, -3.1415925f)]\n        [TestCase(-3.1415927f, 3.1415927f)]\n        // 2 * Pi boundaries\n        [TestCase(6.283185f, -4.7683716E-7f)]\n        [TestCase(6.2831855f, 0f)]\n        [TestCase(6.283186f, 4.7683716E-7f)]\n        [TestCase(-6.283185f, 4.7683716E-7f)]\n        [TestCase(-6.2831855f, 0f)]\n        [TestCase(-6.283186f, -4.7683716E-7f)]\n        // 3 * Pi boundaries\n        [TestCase(9.424778f, 3.1415925f)]\n        [TestCase(9.424779f, -3.141592f)]\n        [TestCase(-9.424778f, -3.1415925f)]\n        [TestCase(-9.424779f, 3.141592f)]\n        // 4 * Pi boundaries\n        [TestCase(12.56637f, -9.536743E-7f)]\n        [TestCase(12.566371f, 0f)]\n        [TestCase(12.566372f, 9.536743E-7f)]\n        [TestCase(-12.56637f, 9.536743E-7f)]\n        [TestCase(-12.566371f, 0f)]\n        [TestCase(-12.566372f, -9.536743E-7f)]\n        // 5 * Pi boundaries\n        [TestCase(15.707963f, 3.141592f)]\n        [TestCase(15.707964f, -3.1415925f)]\n        [TestCase(-15.707963f, -3.141592f)]\n        [TestCase(-15.707964f, 3.1415925f)]\n        // 10 * Pi boundaries\n        [TestCase(31.415926f, -1.4305115E-6f)]\n        [TestCase(31.415928f, 4.7683716E-7f)]\n        [TestCase(-31.415926f, 1.4305115E-6f)]\n        [TestCase(-31.415928f, -4.7683716E-7f)]\n        // 20 * Pi boundaries\n        [TestCase(62.831852f, -2.861023E-6f)]\n        [TestCase(62.831856f, 9.536743E-7f)]\n        [TestCase(-62.831852f, 2.861023E-6f)]\n        [TestCase(-62.831856f, -9.536743E-7f)]\n        // 20000000 * Pi boundaries\n        [TestCase(6.2831852E7f, -2.8202515f)]\n        [TestCase(6.2831856E7f, 1.1797485f)]\n        [TestCase(-6.2831852E7f, 2.8202515f)]\n        [TestCase(-6.2831856E7f, -1.1797485f)]\n        public void WrapAngleReturnsExpectedValues(float angle, float expectedValue)\n        {\n            var actualValue = MathHelper.WrapAngle(angle);\n            Assert.AreEqual(expectedValue, actualValue);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/MatrixTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class MatrixTest\n    {\n        [Test]\n        public void Add()\n        {\n            Matrix test = new Matrix(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);\n            Matrix expected = new Matrix(2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32);\n            Matrix result;\n            Matrix.Add(ref test,ref test, out result);\n            Assert.AreEqual(expected, result);\n            Assert.AreEqual(expected, Matrix.Add(test,test));\n            Assert.AreEqual(expected, test+test);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/PackedVectorTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class PackedVectorTest\n    {\n        [Test]\n        public void Alpha8()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Alpha8(0f).PackedValue);\n            Assert.AreEqual(0xFF, new Alpha8(1f).PackedValue);\n\n            // Test clamping.\n            Assert.AreEqual(0x0, new Alpha8(-1234f).PackedValue);\n            Assert.AreEqual(0xFF, new Alpha8(1234f).PackedValue);\n\n            //Test ordering\n            Assert.AreEqual(124, new Alpha8(124f / 0xff).PackedValue);\n            Assert.AreEqual(26, new Alpha8(0.1f).PackedValue);\n\n\t\t\tvar packed = new Alpha8(0.5f).PackedValue;\n            var unpacked = new Alpha8() { PackedValue = packed }.ToAlpha();\n\t\t\tAssert.AreEqual(0.5f, unpacked, 0.01f);\n\n        }\n\n        [Test]\n        public void Bgra5551()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Bgra5551(Vector4.Zero).PackedValue);\n            Assert.AreEqual(0xFFFF, new Bgra5551(Vector4.One).PackedValue);\n\n            // Test ToVector4\n            Assert.AreEqual(Vector4.Zero, new Bgra5551(Vector4.Zero).ToVector4());\n            Assert.AreEqual(Vector4.One, new Bgra5551(Vector4.One).ToVector4());\n\n            // Test clamping.\n            Assert.AreEqual(Vector4.Zero, new Bgra5551(Vector4.One * -1234.0f).ToVector4());\n            Assert.AreEqual(Vector4.One, new Bgra5551(Vector4.One * 1234.0f).ToVector4());\n\n            //Test Ordering\n            float x = 0x1a;\n            float y = 0x16;\n            float z = 0xd;\n            float w = 0x1;\n            Assert.AreEqual(0xeacd, new Bgra5551(x / 0x1f, y / 0x1f, z / 0x1f, w).PackedValue);\n            x = 0.1f;\n            y = -0.3f;\n            z = 0.5f;\n            w = -0.7f;\n            Assert.AreEqual(3088, new Bgra5551(x, y, z, w).PackedValue);\n\n            var packed = new Bgra5551(x, y, z, w).PackedValue;\n            var unpacked = new Bgra5551() { PackedValue = packed }.ToVector4();\n            Assert.AreEqual(x, unpacked.X, 0.1f);\n            Assert.AreEqual(0f, unpacked.Y);\n            Assert.AreEqual(z, unpacked.Z, 0.1f);\n            Assert.AreEqual(0f, unpacked.W);\n        }\n\n        [Test]\n        public void Rg32()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Rg32(Vector2.Zero).PackedValue);\n            Assert.AreEqual(0xFFFFFFFF, new Rg32(Vector2.One).PackedValue);\n\n            // Test ToVector2\n            Assert.AreEqual(Vector2.Zero, new Rg32(Vector2.Zero).ToVector2());\n            Assert.AreEqual(Vector2.One, new Rg32(Vector2.One).ToVector2());\n\n            // Test clamping.\n            Assert.AreEqual(Vector2.Zero, new Rg32(Vector2.One * -1234.0f).ToVector2());\n            Assert.AreEqual(Vector2.One, new Rg32(Vector2.One * 1234.0f).ToVector2());\n\n            //Test Ordering\n            float x = 0xb6dc;\n            float y = 0xA59f;\n            Assert.AreEqual(0xa59fb6dc, new Rg32(x / 0xffff, y / 0xffff).PackedValue);\n            x = 0.1f;\n            y = -0.3f;\n            Assert.AreEqual(6554, new Rg32(x, y).PackedValue);\n\n\t\t\tvar packed = new Rg32(x, y).PackedValue;\n\t\t\tvar unpacked = new Rg32() { PackedValue = packed }.ToVector2();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(0f, unpacked.Y);\n\n        }\n\n        [Test]\n        public void Rgba1010102()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Rgba1010102(Vector4.Zero).PackedValue);\n            Assert.AreEqual(0xFFFFFFFF, new Rgba1010102(Vector4.One).PackedValue);\n\n            // Test ToVector4\n            Assert.AreEqual(Vector4.Zero, new Rgba1010102(Vector4.Zero).ToVector4());\n            Assert.AreEqual(Vector4.One, new Rgba1010102(Vector4.One).ToVector4());\n\n            // Test clamping.\n            Assert.AreEqual(Vector4.Zero, new Rgba1010102(Vector4.One * -1234.0f).ToVector4());\n            Assert.AreEqual(Vector4.One, new Rgba1010102(Vector4.One * 1234.0f).ToVector4());\n\n            //Test Ordering\n            float x = 0x2db;\n            float y = 0x36d;\n            float z = 0x3b7;\n            float w = 0x1;\n            Assert.AreEqual(0x7B7DB6DB, new Rgba1010102(x / 0x3ff, y / 0x3ff, z / 0x3ff, w / 3).PackedValue);\n            x = 0.1f;\n            y = -0.3f;\n            z = 0.5f;\n            w = -0.7f;\n            Assert.AreEqual(536871014, new Rgba1010102(x, y, z, w).PackedValue);\n\n\t\t\tvar packed = new Rgba1010102(x, y, z, w).PackedValue;\n\t\t\tvar unpacked = new Rgba1010102() { PackedValue = packed }.ToVector4();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(0f, unpacked.Y, 0.01f);\n\t\t\tAssert.AreEqual(z, unpacked.Z, 0.01f);\n\t\t\tAssert.AreEqual(0f, unpacked.W, 0.01f);\n        }\n\n        [Test]\n        public void Rgba64()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Rgba64(Vector4.Zero).PackedValue);\n            Assert.AreEqual(0xFFFFFFFFFFFFFFFF, new Rgba64(Vector4.One).PackedValue);\n\n            // Test ToVector4\n            Assert.AreEqual(Vector4.Zero, new Rgba64(Vector4.Zero).ToVector4());\n            Assert.AreEqual(Vector4.One, new Rgba64(Vector4.One).ToVector4());\n\n            // Test clamping.\n            Assert.AreEqual(Vector4.Zero, new Rgba64(Vector4.One * -1234.0f).ToVector4());\n            Assert.AreEqual(Vector4.One, new Rgba64(Vector4.One * 1234.0f).ToVector4());\n\n            //Test data ordering\n            Assert.AreEqual(0xC7AD8F5C570A1EB8, new Rgba64(((float) 0x1EB8) / 0xffff, ((float) 0x570A) / 0xffff, ((float) 0x8F5C) / 0xffff, ((float) 0xC7AD) / 0xffff).PackedValue);\n            Assert.AreEqual(0xC7AD8F5C570A1EB8, new Rgba64(0.12f, 0.34f, 0.56f, 0.78f).PackedValue);\n            Assert.AreEqual(0x73334CCC2666147B, new Rgba64(0.08f, 0.15f, 0.30f, 0.45f).PackedValue);\n\n\t\t\tfloat x = 0.1f;\n\t\t\tfloat y = -0.3f;\n\t\t\tfloat z = 0.5f;\n\t\t\tfloat w = -0.7f;\n\t\t\tvar packed = new Rgba64(x, y, z, w).PackedValue;\n\t\t\tvar unpacked = new Rgba64() { PackedValue = packed }.ToVector4();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(0f, unpacked.Y, 0.01f);\n\t\t\tAssert.AreEqual(z, unpacked.Z, 0.01f);\n\t\t\tAssert.AreEqual(0f, unpacked.W, 0.01f);\n        }\n\n        [Test]\n        public void NormalizedByte4()\n        {\n            Assert.AreEqual(0x0, new NormalizedByte4(Vector4.Zero).PackedValue);\n            Assert.AreEqual(0x7F7F7F7F, new NormalizedByte4(Vector4.One).PackedValue);\n            Assert.AreEqual(0x81818181, new NormalizedByte4(-Vector4.One).PackedValue);\n\n            Assert.AreEqual(Vector4.One, new NormalizedByte4(Vector4.One).ToVector4());\n            Assert.AreEqual(Vector4.Zero, new NormalizedByte4(Vector4.Zero).ToVector4());\n            Assert.AreEqual(-Vector4.One, new NormalizedByte4(-Vector4.One).ToVector4());\n            Assert.AreEqual(Vector4.One, new NormalizedByte4(Vector4.One * 1234.0f).ToVector4());\n            Assert.AreEqual(-Vector4.One, new NormalizedByte4(Vector4.One * -1234.0f).ToVector4());\n            //Test Ordering\n            float x = 0.1f;\n            float y = -0.3f;\n            float z = 0.5f;\n            float w = -0.7f;\n            Assert.AreEqual(0xA740DA0D, new NormalizedByte4(x, y, z, w).PackedValue);\n            Assert.AreEqual(958796544, new NormalizedByte4(0.0008f, 0.15f, 0.30f, 0.45f).PackedValue);\n\n\t\t\tvar packed = new NormalizedByte4(x, y, z, w).PackedValue;\n\t\t\tvar unpacked = new NormalizedByte4() { PackedValue = packed }.ToVector4();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(y, unpacked.Y, 0.01f);\n\t\t\tAssert.AreEqual(z, unpacked.Z, 0.01f);\n\t\t\tAssert.AreEqual(w, unpacked.W, 0.01f);\n\n        }\n\n        [Test]\n        public void NormalizedByte2()\n        {\n            Assert.AreEqual(0x0, new NormalizedByte2(Vector2.Zero).PackedValue);\n            Assert.AreEqual(0x7F7F, new NormalizedByte2(Vector2.One).PackedValue);\n            Assert.AreEqual(0x8181, new NormalizedByte2(-Vector2.One).PackedValue);\n\n            Assert.AreEqual(Vector2.One, new NormalizedByte2(Vector2.One).ToVector2());\n            Assert.AreEqual(Vector2.Zero, new NormalizedByte2(Vector2.Zero).ToVector2());\n            Assert.AreEqual(-Vector2.One, new NormalizedByte2(-Vector2.One).ToVector2());\n            Assert.AreEqual(Vector2.One, new NormalizedByte2(Vector2.One * 1234.0f).ToVector2());\n            Assert.AreEqual(-Vector2.One, new NormalizedByte2(Vector2.One * -1234.0f).ToVector2());\n\n            Assert.AreEqual(new Vector4(1, 1, 0, 1), ((IPackedVector) new NormalizedByte2(Vector2.One)).ToVector4());\n            Assert.AreEqual(new Vector4(0, 0, 0, 1), ((IPackedVector) new NormalizedByte2(Vector2.Zero)).ToVector4());\n\n            //Test Ordering\n            float x = 0.1f;\n            float y = -0.3f;\n            Assert.AreEqual(0xda0d, new NormalizedByte2(x, y).PackedValue);\n\n\t\t\tvar packed = new NormalizedByte2(x, y).PackedValue;\n\t\t\tvar unpacked = new NormalizedByte2() { PackedValue = packed }.ToVector2();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(y, unpacked.Y, 0.01f);\n        }\n\n        [Test]\n        public void NormalizedShort4()\n        {\n            Assert.AreEqual(0x0, new NormalizedShort4(Vector4.Zero).PackedValue);\n            Assert.AreEqual(0x7FFF7FFF7FFF7FFF, new NormalizedShort4(Vector4.One).PackedValue);\n            Assert.AreEqual(0x8001800180018001, new NormalizedShort4(-Vector4.One).PackedValue);\n\n            Assert.AreEqual(Vector4.One, new NormalizedShort4(Vector4.One).ToVector4());\n            Assert.AreEqual(Vector4.Zero, new NormalizedShort4(Vector4.Zero).ToVector4());\n            Assert.AreEqual(-Vector4.One, new NormalizedShort4(-Vector4.One).ToVector4());\n            Assert.AreEqual(Vector4.One, new NormalizedShort4(Vector4.One * 1234.0f).ToVector4());\n            Assert.AreEqual(-Vector4.One, new NormalizedShort4(Vector4.One * -1234.0f).ToVector4());\n\n            //Test Ordering\n            float x = 0.1f;\n            float y = -0.3f;\n            float z = 0.5f;\n            float w = -0.7f;\n\n            Assert.AreEqual(0xa6674000d99a0ccd, new NormalizedShort4(x, y, z, w).PackedValue);\n            Assert.AreEqual(4150390751449251866, new NormalizedShort4(0.0008f, 0.15f, 0.30f, 0.45f).PackedValue);\n\n\t\t\tvar packed = new NormalizedShort4(x, y, z, w).PackedValue;\n\t\t\tvar unpacked = new NormalizedShort4() { PackedValue = packed }.ToVector4();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(y, unpacked.Y, 0.01f);\n\t\t\tAssert.AreEqual(z, unpacked.Z, 0.01f);\n\t\t\tAssert.AreEqual(w, unpacked.W, 0.01f);\n\n        }\n\n        [Test]\n        public void NormalizedShort2()\n        {\n            Assert.AreEqual(0x0, new NormalizedShort2(Vector2.Zero).PackedValue);\n            Assert.AreEqual(0x7FFF7FFF, new NormalizedShort2(Vector2.One).PackedValue);\n            Assert.AreEqual(0x80018001, new NormalizedShort2(-Vector2.One).PackedValue);\n\n            Assert.AreEqual(Vector2.One, new NormalizedShort2(Vector2.One).ToVector2());\n            Assert.AreEqual(Vector2.Zero, new NormalizedShort2(Vector2.Zero).ToVector2());\n            Assert.AreEqual(-Vector2.One, new NormalizedShort2(-Vector2.One).ToVector2());\n            Assert.AreEqual(Vector2.One, new NormalizedShort2(Vector2.One * 1234.0f).ToVector2());\n            Assert.AreEqual(-Vector2.One, new NormalizedShort2(Vector2.One * -1234.0f).ToVector2());\n\n            Assert.AreEqual(new Vector4(1, 1, 0, 1), ((IPackedVector) new NormalizedShort2(Vector2.One)).ToVector4());\n            Assert.AreEqual(new Vector4(0, 0, 0, 1), ((IPackedVector) new NormalizedShort2(Vector2.Zero)).ToVector4());\n\n            //Test Ordering\n            float x = 0.35f;\n            float y = -0.2f;\n            Assert.AreEqual(0xE6672CCC, new NormalizedShort2(x, y).PackedValue);\n            x = 0.1f;\n            y = -0.3f;\n            Assert.AreEqual(3650751693, new NormalizedShort2(x, y).PackedValue);\n\n\t\t\tvar packed = new NormalizedShort2(x, y).PackedValue;\n\t\t\tvar unpacked = new NormalizedShort2() { PackedValue = packed }.ToVector2();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(y, unpacked.Y, 0.01f);\n        }\n\n        [Test]\n        public void Short2()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Short2(Vector2.Zero).PackedValue);\n            Assert.AreEqual(0x7FFF7FFF, new Short2(Vector2.One * 0x7FFF).PackedValue);\n            Assert.AreEqual(0x80008000, new Short2(Vector2.One * -0x8000).PackedValue);\n\n            // Test ToVector2.\n            Assert.AreEqual(Vector2.One * 0x7FFF, new Short2(Vector2.One * 0x7FFF).ToVector2());\n            Assert.AreEqual(Vector2.Zero, new Short2(Vector2.Zero).ToVector2());\n            Assert.AreEqual(Vector2.One * -0x8000, new Short2(Vector2.One * -0x8000).ToVector2());\n            Assert.AreEqual(Vector2.UnitX * 0x7FFF, new Short2(Vector2.UnitX * 0x7FFF).ToVector2());\n            Assert.AreEqual(Vector2.UnitY * 0x7FFF, new Short2(Vector2.UnitY * 0x7FFF).ToVector2());\n\n            // Test clamping.\n            Assert.AreEqual(Vector2.One * 0x7FFF, new Short2(Vector2.One * 1234567.0f).ToVector2());\n            Assert.AreEqual(Vector2.One * -0x8000, new Short2(Vector2.One * -1234567.0f).ToVector2());\n\n            // Test ToVector4.\n            Assert.AreEqual(new Vector4(0x7FFF, 0x7FFF, 0, 1), ((IPackedVector) new Short2(Vector2.One * 0x7FFF)).ToVector4());\n            Assert.AreEqual(new Vector4(0, 0, 0, 1), ((IPackedVector) new Short2(Vector2.Zero)).ToVector4());\n            Assert.AreEqual(new Vector4(-0x8000, -0x8000, 0, 1), ((IPackedVector) new Short2(Vector2.One * -0x8000)).ToVector4());\n\n            //Test ordering\n            float x = 0x2db1;\n            float y = 0x361d;\n            Assert.AreEqual(0x361d2db1, new Short2(x, y).PackedValue);\n            x = 127.5f;\n            y = -5.3f;\n            Assert.AreEqual(4294639744, new Short2(x, y).PackedValue);\n\n\t\t\tvar packed = new Short2(x, y).PackedValue;\n\t\t\tvar unpacked = new Short2() { PackedValue = packed }.ToVector2();\n\t\t\tAssert.AreEqual(128f, unpacked.X);\n\t\t\tAssert.AreEqual(-5f, unpacked.Y);\n\n        }\n\n        [Test]\n        public void Short4()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Short4(Vector4.Zero).PackedValue);\n            Assert.AreEqual(0x7FFF7FFF7FFF7FFF, new Short4(Vector4.One * 0x7FFF).PackedValue);\n            Assert.AreEqual(0x8000800080008000, new Short4(Vector4.One * -0x8000).PackedValue);\n\n            // Test ToVector4.\n            Assert.AreEqual(Vector4.One * 0x7FFF, new Short4(Vector4.One * 0x7FFF).ToVector4());\n            Assert.AreEqual(Vector4.Zero, new Short4(Vector4.Zero).ToVector4());\n            Assert.AreEqual(Vector4.One * -0x8000, new Short4(Vector4.One * -0x8000).ToVector4());\n            Assert.AreEqual(Vector4.UnitX * 0x7FFF, new Short4(Vector4.UnitX * 0x7FFF).ToVector4());\n            Assert.AreEqual(Vector4.UnitY * 0x7FFF, new Short4(Vector4.UnitY * 0x7FFF).ToVector4());\n            Assert.AreEqual(Vector4.UnitZ * 0x7FFF, new Short4(Vector4.UnitZ * 0x7FFF).ToVector4());\n            Assert.AreEqual(Vector4.UnitW * 0x7FFF, new Short4(Vector4.UnitW * 0x7FFF).ToVector4());\n\n            // Test clamping.\n            Assert.AreEqual(Vector4.One * 0x7FFF, new Short4(Vector4.One * 1234567.0f).ToVector4());\n            Assert.AreEqual(Vector4.One * -0x8000, new Short4(Vector4.One * -1234567.0f).ToVector4());\n\n            //Test Ordering\n            float x = 0x2d1b;\n            float y = 0x316d;\n            float z = 0x73b7;\n            float w = 0x00c1;\n            Assert.AreEqual(0x00c173b7316d2d1b, new Short4(x, y, z, w).PackedValue);\n            x = 0.1f;\n            y = -0.3f;\n            z = 0.5f;\n            w = -0.7f;\n            Assert.AreEqual(18446462598732840960, new Short4(x, y, z, w).PackedValue);\n\n\t\t\tvar packed = new Short4(x, y, z, w).PackedValue;\n\t\t\tvar unpacked = new Short4() { PackedValue = packed }.ToVector4();\n\t\t\tAssert.AreEqual(0f, unpacked.X);\n\t\t\tAssert.AreEqual(0f, unpacked.Y);\n\t\t\tAssert.AreEqual(0f, unpacked.Z);\n\t\t\tAssert.AreEqual(-1f, unpacked.W);\n\n        }\n\n        [Test]\n        public void Bgra4444()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Bgra4444(Vector4.Zero).PackedValue);\n            Assert.AreEqual(0xFFFF, new Bgra4444(Vector4.One).PackedValue);\n\n            // Test ToVector4.\n            Assert.AreEqual(Vector4.One, new Bgra4444(Vector4.One).ToVector4());\n            Assert.AreEqual(Vector4.Zero, new Bgra4444(Vector4.Zero).ToVector4());\n            Assert.AreEqual(Vector4.UnitX, new Bgra4444(Vector4.UnitX).ToVector4());\n            Assert.AreEqual(Vector4.UnitY, new Bgra4444(Vector4.UnitY).ToVector4());\n            Assert.AreEqual(Vector4.UnitZ, new Bgra4444(Vector4.UnitZ).ToVector4());\n            Assert.AreEqual(Vector4.UnitW, new Bgra4444(Vector4.UnitW).ToVector4());\n\n            // Test clamping.\n            Assert.AreEqual(Vector4.Zero, new Bgra4444(Vector4.One * -1234.0f).ToVector4());\n            Assert.AreEqual(Vector4.One, new Bgra4444(Vector4.One * 1234.0f).ToVector4());\n\n            // Make sure the swizzle is correct.\n            Assert.AreEqual(0x0F00, new Bgra4444(Vector4.UnitX).PackedValue);\n            Assert.AreEqual(0x00F0, new Bgra4444(Vector4.UnitY).PackedValue);\n            Assert.AreEqual(0x000F, new Bgra4444(Vector4.UnitZ).PackedValue);\n            Assert.AreEqual(0xF000, new Bgra4444(Vector4.UnitW).PackedValue);\n\n            float x = 0.1f;\n            float y = -0.3f;\n            float z = 0.5f;\n            float w = -0.7f;\n            Assert.AreEqual(520, new Bgra4444(x, y, z, w).PackedValue);\n\n\t\t\tvar packed = new Bgra4444(x, y, z, w).PackedValue;\n\t\t\tvar unpacked = new Bgra4444() { PackedValue = packed }.ToVector4();\n\t\t\tAssert.AreEqual(0.13f, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(0f, unpacked.Y);\n\t\t\tAssert.AreEqual(0.53f, unpacked.Z, 0.01f);\n\t\t\tAssert.AreEqual(0f, unpacked.W);\n        }\n\n        [Test]\n        public void Bgr565()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Bgr565(Vector3.Zero).PackedValue);\n            Assert.AreEqual(0xFFFF, new Bgr565(Vector3.One).PackedValue);\n\n            // Test ToVector3.\n            Assert.AreEqual(Vector3.One, new Bgr565(Vector3.One).ToVector3());\n            Assert.AreEqual(Vector3.Zero, new Bgr565(Vector3.Zero).ToVector3());\n            Assert.AreEqual(Vector3.UnitX, new Bgr565(Vector3.UnitX).ToVector3());\n            Assert.AreEqual(Vector3.UnitY, new Bgr565(Vector3.UnitY).ToVector3());\n            Assert.AreEqual(Vector3.UnitZ, new Bgr565(Vector3.UnitZ).ToVector3());\n\n            // Test clamping.\n            Assert.AreEqual(Vector3.Zero, new Bgr565(Vector3.One * -1234.0f).ToVector3());\n            Assert.AreEqual(Vector3.One, new Bgr565(Vector3.One * 1234.0f).ToVector3());\n\n            // Make sure the swizzle is correct.\n            Assert.AreEqual(0xF800, new Bgr565(Vector3.UnitX).PackedValue);\n            Assert.AreEqual(0x07E0, new Bgr565(Vector3.UnitY).PackedValue);\n            Assert.AreEqual(0x001F, new Bgr565(Vector3.UnitZ).PackedValue);\n\n            float x = 0.1f;\n            float y = -0.3f;\n            float z = 0.5f;\n            Assert.AreEqual(6160, new Bgr565(x, y, z).PackedValue);\n\n\t\t\tvar packed = new Bgr565(x, y, z).PackedValue;\n\t\t\tvar unpacked = new Bgr565() { PackedValue = packed }.ToVector3();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.1f);\n\t\t\tAssert.AreEqual(0f, unpacked.Y);\n\t\t\tAssert.AreEqual(z, unpacked.Z, 0.1f);\n        }\n\n        [Test]\n        public void Byte4()\n        {\n            // Test the limits.\n            Assert.AreEqual(0x0, new Byte4(Vector4.Zero).PackedValue);\n            Assert.AreEqual(0xFFFFFFFF, new Byte4(Vector4.One * 255).PackedValue);\n\n            // Test ToVector4.\n            Assert.AreEqual(Vector4.One * 255, new Byte4(Vector4.One * 255).ToVector4());\n            Assert.AreEqual(Vector4.Zero, new Byte4(Vector4.Zero).ToVector4());\n            Assert.AreEqual(Vector4.UnitX * 255, new Byte4(Vector4.UnitX * 255).ToVector4());\n            Assert.AreEqual(Vector4.UnitY * 255, new Byte4(Vector4.UnitY * 255).ToVector4());\n            Assert.AreEqual(Vector4.UnitZ * 255, new Byte4(Vector4.UnitZ * 255).ToVector4());\n            Assert.AreEqual(Vector4.UnitW * 255, new Byte4(Vector4.UnitW * 255).ToVector4());\n\n            // Test clamping.\n            Assert.AreEqual(Vector4.Zero, new Byte4(Vector4.One * -1234.0f).ToVector4());\n            Assert.AreEqual(Vector4.One * 255, new Byte4(Vector4.One * 1234.0f).ToVector4());\n\n            //Test ordering\n            float x = 0x2d;\n            float y = 0x36;\n            float z = 0x7b;\n            float w = 0x1a;\n            Assert.AreEqual(0x1a7b362d, new Byte4(x, y, z, w).PackedValue);\n\n            x = 127.5f;\n            y = -12.3f;\n            z = 0.5f;\n            w = -0.7f;\n            Assert.AreEqual(128, new Byte4(x, y, z, w).PackedValue);\n\n\t\t\tvar packed = new Byte4(x, y, z, w).PackedValue;\n\t\t\tvar unpacked = new Byte4() { PackedValue = packed }.ToVector4();\n\t\t\tAssert.AreEqual(128f, unpacked.X);\n\t\t\tAssert.AreEqual(0f, unpacked.Y);\n\t\t\tAssert.AreEqual(0f, unpacked.Z);\n\t\t\tAssert.AreEqual(0f, unpacked.W);\n        }\n\n        [Test]\n        public void HalfSingle()\n        {\n            //Test limits\n            Assert.AreEqual(15360, new HalfSingle(1f).PackedValue);\n            Assert.AreEqual(0, new HalfSingle(0f).PackedValue);\n            Assert.AreEqual(48128, new HalfSingle(-1f).PackedValue);\n\n            //Test values\n            Assert.AreEqual(11878, new HalfSingle(0.1f).PackedValue);\n            Assert.AreEqual(46285, new HalfSingle(-0.3f).PackedValue);\n\n\t\t\tvar packed = new HalfSingle(0.5f).PackedValue;\n            var unpacked = new HalfSingle() { PackedValue = packed }.ToSingle();\n\t\t\tAssert.AreEqual(0.5f, unpacked, 0.01f);\n        }\n\n        [Test]\n        public void HalfVector2()\n        {\n            //Test PackedValue\n            Assert.AreEqual(0u, new HalfVector2(Vector2.Zero).PackedValue);\n            Assert.AreEqual(1006648320u, new HalfVector2(Vector2.One).PackedValue);\n            Assert.AreEqual(3033345638u, new HalfVector2(0.1f, -0.3f).PackedValue);\n\n            //Test ToVector2\n            Assert.AreEqual(Vector2.Zero, new HalfVector2(Vector2.Zero).ToVector2());\n            Assert.AreEqual(Vector2.One, new HalfVector2(Vector2.One).ToVector2());\n            Assert.AreEqual(Vector2.UnitX, new HalfVector2(Vector2.UnitX).ToVector2());\n            Assert.AreEqual(Vector2.UnitY, new HalfVector2(Vector2.UnitY).ToVector2());\n\n\t\t\tvar x = 0.1f;\n\t\t\tvar y = -0.3f;\n\t\t\tvar packed = new HalfVector2(x, y).PackedValue;\n\t\t\tvar unpacked = new HalfVector2() { PackedValue = packed }.ToVector2();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(y, unpacked.Y, 0.01f);\n        }\n\n        [Test]\n        public void HalfVector4()\n        {\n            //Test PackedValue\n            Assert.AreEqual(0uL, new HalfVector4(Vector4.Zero).PackedValue);\n            Assert.AreEqual(4323521613979991040uL, new HalfVector4(Vector4.One).PackedValue);\n            Assert.AreEqual(13547034390470638592uL, new HalfVector4(-Vector4.One).PackedValue);\n            Assert.AreEqual(15360uL, new HalfVector4(Vector4.UnitX).PackedValue);\n            Assert.AreEqual(1006632960uL, new HalfVector4(Vector4.UnitY).PackedValue);\n            Assert.AreEqual(65970697666560uL, new HalfVector4(Vector4.UnitZ).PackedValue);\n            Assert.AreEqual(4323455642275676160uL, new HalfVector4(Vector4.UnitW).PackedValue);\n            Assert.AreEqual(4035285078724390502uL, new HalfVector4(0.1f, 0.3f, 0.4f, 0.5f).PackedValue);\n\n            //Test ToVector4\n            Assert.AreEqual(Vector4.Zero, new HalfVector4(Vector4.Zero).ToVector4());\n            Assert.AreEqual(Vector4.One, new HalfVector4(Vector4.One).ToVector4());\n            Assert.AreEqual(-Vector4.One, new HalfVector4(-Vector4.One).ToVector4());\n            Assert.AreEqual(Vector4.UnitX, new HalfVector4(Vector4.UnitX).ToVector4());\n            Assert.AreEqual(Vector4.UnitY, new HalfVector4(Vector4.UnitY).ToVector4());\n            Assert.AreEqual(Vector4.UnitZ, new HalfVector4(Vector4.UnitZ).ToVector4());\n            Assert.AreEqual(Vector4.UnitW, new HalfVector4(Vector4.UnitW).ToVector4());\n\n\t\t\tvar x = 0.1f;\n\t\t\tvar y = -0.3f;\n\t\t\tvar z = 0.5f;\n\t\t\tvar w = -0.7f;\n\t\t\tvar packed = new HalfVector4(x, y, z, w).PackedValue;\n\t\t\tvar unpacked = new HalfVector4() { PackedValue = packed }.ToVector4();\n\t\t\tAssert.AreEqual(x, unpacked.X, 0.01f);\n\t\t\tAssert.AreEqual(y, unpacked.Y, 0.01f);\n\t\t\tAssert.AreEqual(z, unpacked.Z, 0.01f);\n\t\t\tAssert.AreEqual(w, unpacked.W, 0.01f);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/PlaneTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    public class PlaneTest\n    {\n        [Test]\n        public void TransformByMatrix()\n        {\n            // Our test plane.\n            var plane = Plane.Normalize(new Plane(new Vector3(0, 1, 1), 2.5f));\n\n            // Our matrix.\n            var matrix = Matrix.CreateRotationX(MathHelper.PiOver2);\n\n            // Test transform.\n            var expectedResult = new Plane(new Vector3(0, -0.7071068f, 0.7071067f), 1.767767f);\n            Assert.That(Plane.Transform(plane, matrix), Is.EqualTo(expectedResult).Using(PlaneComparer.Epsilon));\n        }\n\n        [Test]\n        public void TransformByRefMatrix()\n        {\n            // Our test plane.\n            var plane = Plane.Normalize(new Plane(new Vector3(1, 0.8f, 0.5f), 2.5f));\n            var originalPlane = plane;\n\n            // Our matrix.\n            var matrix = Matrix.CreateRotationX(MathHelper.PiOver2);\n            var originalMatrix = matrix;\n\n            // Test transform.\n            Plane result;\n            Plane.Transform(ref plane, ref matrix, out result);\n\n            var expectedResult = new Plane(new Vector3(0.7273929f, -0.3636965f, 0.5819144f), 1.818482f);\n            Assert.That(result, Is.EqualTo(expectedResult).Using(PlaneComparer.Epsilon));\n\n            Assert.That(plane, Is.EqualTo(originalPlane));\n            Assert.That(matrix, Is.EqualTo(originalMatrix));\n        }\n\n        [Test]\n        public void TransformByQuaternion()\n        {\n            // Our test plane.\n            var plane = Plane.Normalize(new Plane(new Vector3(0, 1, 1), 2.5f));\n\n            // Our quaternion.\n            var quaternion = Quaternion.CreateFromAxisAngle(Vector3.UnitX, MathHelper.PiOver2);\n\n            // Test transform.\n            var expectedResult = new Plane(new Vector3(0, -0.7071068f, 0.7071067f), 1.767767f);\n            Assert.That(Plane.Transform(plane, quaternion), Is.EqualTo(expectedResult).Using(PlaneComparer.Epsilon));\n        }\n\n        [Test]\n        public void TransformByRefQuaternion()\n        {\n            // Our test plane.\n            var plane = Plane.Normalize(new Plane(new Vector3(1, 0.8f, 0.5f), 2.5f));\n            var originalPlane = plane;\n\n            // Our quaternion.\n            var quaternion = Quaternion.CreateFromAxisAngle(Vector3.UnitX, MathHelper.PiOver2);\n            var originalQuaternion = quaternion;\n\n            // Test transform.\n            Plane result;\n            Plane.Transform(ref plane, ref quaternion, out result);\n\n            var expectedResult = new Plane(new Vector3(0.7273929f, -0.3636965f, 0.5819144f), 1.818482f);\n            Assert.That(result, Is.EqualTo(expectedResult).Using(PlaneComparer.Epsilon));\n\n            Assert.That(plane, Is.EqualTo(originalPlane));\n            Assert.That(quaternion, Is.EqualTo(originalQuaternion));\n        }\n\n#if !XNA\n        [Test]\n        public void Deconstruct()\n        {\n            Plane plane = new Plane(new Vector3(255, 255, 255), float.MaxValue);\n\n            Vector3 normal;\n            float d;\n\n            plane.Deconstruct(out normal, out d);\n\n            Assert.AreEqual(normal, plane.Normal);\n            Assert.AreEqual(d, plane.D);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/PointTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace MonoGame.Tests.Framework\n{\n    public class PointTest\n    {\n        [Test]\n        public void Deconstruct()\n        {\n            Point point = new Point(int.MinValue, int.MaxValue);\n\n            int x, y;\n\n            point.Deconstruct(out x, out y);\n\n            Assert.AreEqual(x, point.X);\n            Assert.AreEqual(y, point.Y);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/QuaternionTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class QuaternionTest\n    {\n        private void Compare(Quaternion expected, Quaternion source)\n        {\n            Assert.That(expected, Is.EqualTo(source).Using(QuaternionComparer.Epsilon));\n        }\n\n        private void Compare(float expected, float source)\n        {\n            Assert.That(expected, Is.EqualTo(source).Using(FloatComparer.Epsilon));\n        }\n\n        [Test]\n        public void Constructors()\n        {\n            Quaternion expected;\n            expected.X = 1;\n            expected.Y = 2;\n            expected.Z = 3;\n            expected.W = 4;\n            Compare(expected, new Quaternion(1, 2, 3, 4));\n            Compare(expected, new Quaternion(new Vector3(1, 2, 3), 4));\n#if !XNA\n            Compare(expected, new Quaternion(new Vector4(1, 2, 3, 4)));\n#endif\n        }\n\n        [Test]\n        public void Properties()\n        {\n            Compare(new Quaternion(0, 0, 0, 1), Quaternion.Identity);\n        }\n\n        [Test]\n        public void Add()\n        {\n            Quaternion q1 = new Quaternion(1, 2, 3, 4);\n            Quaternion q2 = new Quaternion(1, 2, 3, 4);\n            Quaternion expected = new Quaternion(2, 4, 6, 8);\n            Compare(expected, Quaternion.Add(q1, q2));\n\n            Quaternion result;\n            Quaternion.Add(ref q1, ref q2, out result);\n            Compare(expected, result);\n        }\n\n        [Test]\n        public void Concatenate()\n        {\n            Quaternion q1 = new Quaternion(1, 2.5f, 3, 4);\n            Quaternion q2 = new Quaternion(1, 2, -3.8f, 2);\n            Quaternion expected = new Quaternion(21.5f, 6.2f, -8.7f, 13.4f);\n            Compare(expected, Quaternion.Concatenate(q1, q2));\n\n            Quaternion result;\n            Quaternion.Concatenate(ref q1, ref q2, out result);\n            Compare(expected, result);\n        }\n\n        [Test]\n        public void Conjugate()\n        {\n            Quaternion q = new Quaternion(1, 2, 3, 4);\n            Quaternion expected = new Quaternion(-1, -2, -3, 4);\n            Compare(expected, Quaternion.Conjugate(q));\n\n            Quaternion result;\n            Quaternion.Conjugate(ref q, out result);\n            Compare(expected, result);\n\n            q.Conjugate();\n            Compare(expected, q);\n        }\n\n        [Test]\n        public void CreateFromAxisAngle()\n        {\n            Vector3 axis = new Vector3(0.5f, 1.1f, -3.8f);\n            float angle = 0.25f;\n            Quaternion expected = new Quaternion(0.06233737f, 0.1371422f, -0.473764f, 0.9921977f);\n\n            Compare(expected, Quaternion.CreateFromAxisAngle(axis, angle));\n\n            Quaternion result;\n            Quaternion.CreateFromAxisAngle(ref axis, angle, out result);\n            Compare(expected, result);\n        }\n\n        [Test]\n        public void CreateFromRotationMatrix()\n        {\n            var matrix = Matrix.CreateFromYawPitchRoll(0.15f, 1.18f, -0.22f);\n            Quaternion expected = new Quaternion(0.5446088f, 0.1227905f, -0.1323988f, 0.8190203f);\n            Compare(expected, Quaternion.CreateFromRotationMatrix(matrix));\n\n            Quaternion result;\n            Quaternion.CreateFromRotationMatrix(ref matrix, out result);\n            Compare(expected, result);\n        }\n\n        [Test]\n        public void CreateFromYawPitchRoll()\n        {\n            Quaternion expected = new Quaternion(0.5446088f, 0.1227905f, -0.1323988f, 0.8190203f);\n            Compare(expected, Quaternion.CreateFromYawPitchRoll(0.15f, 1.18f, -0.22f));\n\n            Quaternion result;\n            Quaternion.CreateFromYawPitchRoll(0.15f, 1.18f, -0.22f, out result);\n            Compare(expected, result);\n        }\n\n        [Test]\n        public void Divide()\n        {\n            Quaternion q1 = new Quaternion(1, 2, 3, 4);\n            Quaternion q2 = new Quaternion(0.2f, -0.6f, 11.9f, 0.01f);\n            Quaternion expected = new Quaternion(-0.1858319f, 0.09661285f, -0.3279344f, 0.2446305f);\n            Compare(expected, Quaternion.Divide(q1, q2));\n\n            Quaternion result;\n            Quaternion.Divide(ref q1, ref q2, out result);\n            Compare(expected, result);\n        }\n\n        [Test]\n        public void Length()\n        {\n            Quaternion q1 = new Quaternion(1, 2, 3, 4);\n            Compare(5.477226f,q1.Length());\n        }\n\n        [Test]\n        public void LengthSquared()\n        {\n            Quaternion q1 = new Quaternion(1, 2, 3, 4);\n            Compare(30.0f, q1.LengthSquared());\n        }\n\n        [Test]\n        public void Normalize()\n        {\n            Quaternion q = new Quaternion(1, 2, 3, 4);\n            Quaternion expected = new Quaternion(0.1825742f,0.3651484f,0.5477226f,0.7302967f);\n\n            Compare(expected, Quaternion.Normalize(q));\n\n            Quaternion result;\n            Quaternion.Normalize(ref q, out result);\n            Compare(expected, result);\n\n\n            q.Normalize();\n            Compare(expected, q);\n        }\n\n#if !XNA\n        [Test]\n        public void Deconstruct()\n        {\n            Quaternion quaternion = new Quaternion(float.MinValue, float.MaxValue, float.MinValue, float.MaxValue);\n\n            float x, y, z, w;\n\n            quaternion.Deconstruct(out x, out y, out z, out w);\n\n            Assert.AreEqual(x, quaternion.X);\n            Assert.AreEqual(y, quaternion.Y);\n            Assert.AreEqual(z, quaternion.Z);\n            Assert.AreEqual(w, quaternion.W);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/RayTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class RayTest\n    {\n\n#if !XNA\n        [Test]\n        public void Deconstruct()\n        {\n            Ray ray = new Ray(Vector3.Backward, Vector3.Right);\n\n            Vector3 position, direction;\n\n            ray.Deconstruct(out position, out direction);\n\n            Assert.AreEqual(position, ray.Position);\n            Assert.AreEqual(direction, ray.Direction);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/RectangleTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class RectangleTest\n    {\n        [Test]\n        public void ConstructorsAndProperties()\n        {\n            var rectangle = new Rectangle(10, 20, 64, 64);\n\n            // Constructor\n\n            Assert.AreEqual(new Rectangle(){X = 10, Y = 20, Width = 64, Height = 64}, rectangle);\n#if !XNA\n            // Constructor 2\n\n            Assert.AreEqual(new Rectangle() { X = 1, Y = 2, Width = 4, Height = 45 }, new Rectangle(new Point(1, 2), new Point(4, 45)));\n#endif\n            // Left property\n\n            Assert.AreEqual(10, rectangle.Left);\n\n            // Right property\n\n            Assert.AreEqual(64 + 10, rectangle.Right);\n\n            // Top property\n\n            Assert.AreEqual(20, rectangle.Top);\n\n            // Bottom property\n\n            Assert.AreEqual(64 + 20, rectangle.Bottom);\n\n            // Location property\n\n            Assert.AreEqual(new Point(10, 20), rectangle.Location);\n\n            // Center property\n\n            Assert.AreEqual(new Point(10+32,20+32), rectangle.Center);\n\n#if !XNA\n            // Size property\n\n            Assert.AreEqual(new Point(64,64), rectangle.Size);\n#endif\n\n            // IsEmpty property\n\n            Assert.AreEqual(false, rectangle.IsEmpty);\n            Assert.AreEqual(true, new Rectangle().IsEmpty);\n\n            // Empty - static property\n\n            Assert.AreEqual(new Rectangle(),Rectangle.Empty);\n        }\n\n        [Test]\n        public void ContainsPoint()\n        {\n            Rectangle rectangle = new Rectangle(0,0,64,64);\n\n            var p1 = new Point(-1, -1);\n            var p2 = new Point(0, 0);\n            var p3 = new Point(32, 32);\n            var p4 = new Point(63, 63);\n            var p5 = new Point(64, 64);\n\n            bool result;\n\n            rectangle.Contains(ref p1, out result);\n            Assert.AreEqual(false, result);\n            rectangle.Contains(ref p2, out result);\n            Assert.AreEqual(true, result);\n            rectangle.Contains(ref p3, out result);\n            Assert.AreEqual(true, result);\n            rectangle.Contains(ref p4, out result);\n            Assert.AreEqual(true, result);\n            rectangle.Contains(ref p5, out result);\n            Assert.AreEqual(false, result);\n\n            Assert.AreEqual(false, rectangle.Contains(p1));\n            Assert.AreEqual(true, rectangle.Contains(p2));\n            Assert.AreEqual(true, rectangle.Contains(p3));\n            Assert.AreEqual(true, rectangle.Contains(p4));\n            Assert.AreEqual(false, rectangle.Contains(p5));\n        }\n#if !XNA\n        [Test]\n        public void ContainsVector2()\n        {\n            Rectangle rectangle = new Rectangle(0, 0, 64, 64);\n\n            var p1 = new Vector2(-1, -1);\n            var p2 = new Vector2(0, 0);\n            var p3 = new Vector2(32, 32);\n            var p4 = new Vector2(63, 63);\n            var p5 = new Vector2(64, 64);\n\n            bool result;\n\n            rectangle.Contains(ref p1, out result);\n            Assert.AreEqual(false, result);\n            rectangle.Contains(ref p2, out result);\n            Assert.AreEqual(true, result);\n            rectangle.Contains(ref p3, out result);\n            Assert.AreEqual(true, result);\n            rectangle.Contains(ref p4, out result);\n            Assert.AreEqual(true, result);\n            rectangle.Contains(ref p5, out result);\n            Assert.AreEqual(false, result);\n\n            Assert.AreEqual(false, rectangle.Contains(p1));\n            Assert.AreEqual(true, rectangle.Contains(p2));\n            Assert.AreEqual(true, rectangle.Contains(p3));\n            Assert.AreEqual(true, rectangle.Contains(p4));\n            Assert.AreEqual(false, rectangle.Contains(p5));\n        }\n\n        [Test]\n        public void ContainsInts()\n        {\n            Rectangle rectangle = new Rectangle(0, 0, 64, 64);\n\n            int x1 = -1; int y1 = -1;\n            int x2 = 0;  int y2 = 0;\n            int x3 = 32; int y3 = 32;\n            int x4 = 63; int y4 = 63;\n            int x5 = 64; int y5 = 64;\n\n            Assert.AreEqual(false, rectangle.Contains(x1,y1));\n            Assert.AreEqual(true, rectangle.Contains(x2,y2));\n            Assert.AreEqual(true, rectangle.Contains(x3,y3));\n            Assert.AreEqual(true, rectangle.Contains(x4,y4));\n            Assert.AreEqual(false, rectangle.Contains(x5,y5));\n        }\n\n        [Test]\n        public void ContainsFloats()\n        {\n            Rectangle rectangle = new Rectangle(0, 0, 64, 64);\n\n            float x1 = -1; float y1 = -1;\n            float x2 = 0;  float y2 = 0;\n            float x3 = 32; float y3 = 32;\n            float x4 = 63; float y4 = 63;\n            float x5 = 64; float y5 = 64;\n\n            Assert.AreEqual(false, rectangle.Contains(x1, y1));\n            Assert.AreEqual(true, rectangle.Contains(x2, y2));\n            Assert.AreEqual(true, rectangle.Contains(x3, y3));\n            Assert.AreEqual(true, rectangle.Contains(x4, y4));\n            Assert.AreEqual(false, rectangle.Contains(x5, y5));\n        }\n#endif\n        [Test]\n        public void ContainsRectangle()\n        {\n            var rectangle = new Rectangle(0, 0, 64, 64);\n            var rect1 = new Rectangle(-1, -1, 32, 32);\n            var rect2 = new Rectangle(0, 0, 32, 32);\n            var rect3 = new Rectangle(0, 0, 64, 64);\n            var rect4 = new Rectangle(1, 1, 64, 64);\n\n            bool result;\n\n            rectangle.Contains(ref rect1, out result);\n\n            Assert.AreEqual(false, result);\n\n            rectangle.Contains(ref rect2, out result);\n\n            Assert.AreEqual(true, result);\n\n            rectangle.Contains(ref rect3, out result);\n\n            Assert.AreEqual(true, result);\n\n            rectangle.Contains(ref rect4, out result);\n\n            Assert.AreEqual(false, result);\n\n            Assert.AreEqual(false, rectangle.Contains(rect1));\n            Assert.AreEqual(true, rectangle.Contains(rect2));\n            Assert.AreEqual(true, rectangle.Contains(rect3));\n            Assert.AreEqual(false, rectangle.Contains(rect4));\n        }\n\n        [Test]\n        public void Inflate()\n        {\n            Rectangle rectangle = new Rectangle(0,0,64,64);\n            rectangle.Inflate(10,-10);\n            Assert.AreEqual(new Rectangle(-10, 10, 84, 44),rectangle);\n#if !XNA\n            Rectangle rectangleF = new Rectangle(0, 0, 64, 64);\n            rectangleF.Inflate(10.0f, -10.0f);\n            Assert.AreEqual(new Rectangle(-10, 10, 84, 44), rectangleF);\n#endif\n        }\n\n        [Test]\n        public void Intersect()\n        {\n            var first = new Rectangle(0, 0, 64, 64);\n            var second = new Rectangle(-32, -32, 64, 64);\n            var expected = new Rectangle(0, 0, 32, 32);\n\n            // First overload testing(forward and backward)\n\n            Rectangle result;\n            Rectangle.Intersect(ref first, ref second, out result);\n\n            Assert.AreEqual(expected, result);\n\n            Rectangle.Intersect(ref second, ref first, out result);\n\n            Assert.AreEqual(expected, result);\n\n            // Second overload testing(forward and backward)\n\n            Assert.AreEqual(expected, Rectangle.Intersect(first, second));\n            Assert.AreEqual(expected, Rectangle.Intersect(second, first));\n        }\n\n        [Test]\n        public void Union()\n        {\n            var first = new Rectangle(-64, -64, 64, 64);\n            var second = new Rectangle(0, 0, 64, 64);\n            var expected = new Rectangle(-64, -64, 128, 128);\n\n            // First overload testing(forward and backward)\n\n            Rectangle result;\n            Rectangle.Union(ref first, ref second, out result);\n\n            Assert.AreEqual(expected, result);\n\n            Rectangle.Union(ref second, ref first, out result);\n\n            Assert.AreEqual(expected, result);\n\n            // Second overload testing(forward and backward)\n\n            Assert.AreEqual(expected, Rectangle.Union(first, second));\n            Assert.AreEqual(expected, Rectangle.Union(second, first));\n        }\n\n        [Test]\n        public void ToStringTest()\n        {\n            StringAssert.IsMatch(\"{X:-10 Y:10 Width:100 Height:1000}\",new Rectangle(-10,10,100,1000).ToString());\n        }\n\n#if !XNA\n        [Test]\n        public void Deconstruct()\n        {\n            Rectangle rectangle = new Rectangle(int.MinValue, int.MaxValue, int.MinValue, int.MaxValue);\n\n            int x, y, width, height;\n\n            rectangle.Deconstruct(out x, out y, out width, out height);\n\n            Assert.AreEqual(x, rectangle.X);\n            Assert.AreEqual(y, rectangle.Y);\n            Assert.AreEqual(width, rectangle.Width);\n            Assert.AreEqual(height, rectangle.Height);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/TitleContainerTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    class TitleContainerTest\n    {\n        [Test]\n        public void OpenStream()\n        {\n            Assert.Throws<ArgumentNullException>(() => TitleContainer.OpenStream(null));\n            Assert.Throws<ArgumentNullException>(() => TitleContainer.OpenStream(string.Empty));\n            Assert.Throws<ArgumentNullException>(() => TitleContainer.OpenStream(\"\"));\n            Assert.Throws<FileNotFoundException>(() => TitleContainer.OpenStream(\" \"));\n            Assert.Throws<FileNotFoundException>(() => TitleContainer.OpenStream(\"notfound\"));\n            // under mono we get a FileNotFoundException for this path.\n            Assert.Throws(Is.TypeOf<ArgumentException>().Or.TypeOf<FileNotFoundException>(), () => TitleContainer.OpenStream(@\"C:\\\\\"));\n\n            // TODO: This always fails on XNA... even though it shouldn't.  I suspect \n            // this is because internally XNA uses the entry/active assembly as the\n            // root of the path.  Since we are launched from some Nunit runner things\n            // end up not working as we expect.\n            //\n            // We need to figure out the trick to hack around this to validate \n            // non-failure tests against XNA.\n#if !XNA\n            var stream = TitleContainer.OpenStream(@\"Assets\\Xml\\01_TheBasics.xml\");\n            Assert.AreEqual(0, stream.Position);\n            Assert.AreEqual(true, stream.CanRead);\n            Assert.AreEqual(true, stream.CanSeek);\n            Assert.AreEqual(false, stream.CanWrite);\n            stream.Dispose();\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/UtilitiesTest.cs",
    "content": "﻿using System.IO;\nusing NUnit.Framework;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Kni.Tests.Framework\n{\n    class UtilitiesTest\n    {\n        [TestCase(  @\"C:\\Game\\Content\\file\",            @\"file.extension\",          @\"C:\\Game\\Content\\file.extension\")]\n        [TestCase(  @\"C:\\Game\\Content\\file\",            @\"..\\file.extension\",       @\"C:\\Game\\file.extension\")]\n        [TestCase(  @\"C:\\Game\\Content\\..\\file\",         @\"file.extension\",          @\"C:\\Game\\file.extension\")]\n        [TestCase(  @\"C:\\Game\\Content\\..\\file\",         @\"..\\file.extension\",       @\"C:\\file.extension\")]\n        [TestCase(  @\"C:\\Game\\Content\\.\\file\",          @\"file.extension\",          @\"C:\\Game\\Content\\file.extension\")]\n        [TestCase(  @\"C:\\Game\\Content\\.\\file\",          @\".\\file.extension\",        @\"C:\\Game\\Content\\file.extension\")]\n        [TestCase(  @\"C:/Game/Content/file\",            @\"file.extension\",          @\"C:/Game/Content/file.extension\")]\n        [TestCase(  @\"C:/Game/Content/file\",            @\"../file.extension\",       @\"C:/Game/file.extension\")]\n        [TestCase(  @\"C:/Game/Content/../file\",         @\"file.extension\",          @\"C:/Game/file.extension\")]\n        [TestCase(  @\"C:/Game/Content/../file\",         @\"../file.extension\",       @\"C:/file.extension\")]\n        [TestCase(  @\"C:/Game/Content/./file\",          @\"file.extension\",          @\"C:/Game/Content/file.extension\")]\n        [TestCase(  @\"C:/Game/Content/./file\",          @\"./file.extension\",        @\"C:/Game/Content/file.extension\")]\n        [TestCase(  @\"\\application0\\Content\\file\",      @\"file.extension\",          @\"\\application0\\Content\\file.extension\")]\n        [TestCase(  @\"\\application0\\Content\\file\",      @\"..\\file.extension\",       @\"\\application0\\file.extension\")]\n        [TestCase(  @\"\\application0\\Content\\..\\file\",   @\"file.extension\",          @\"\\application0\\file.extension\")]\n        [TestCase(  @\"\\application0\\Content\\..\\file\",   @\"..\\file.extension\",       @\"\\file.extension\")]\n        [TestCase(  @\"\\application0\\Content\\.\\file\",    @\"file.extension\",          @\"\\application0\\Content\\file.extension\")]\n        [TestCase(  @\"\\application0\\Content\\.\\file\",    @\".\\file.extension\",        @\"\\application0\\Content\\file.extension\")]\n        [TestCase(  @\"/application0/Content/file\",      @\"file.extension\",          @\"/application0/Content/file.extension\")]\n        [TestCase(  @\"/application0/Content/file\",      @\"../file.extension\",       @\"/application0/file.extension\")]\n        [TestCase(  @\"/application0/Content/../file\",   @\"file.extension\",          @\"/application0/file.extension\")]\n        [TestCase(  @\"/application0/Content/../file\",   @\"../file.extension\",       @\"/file.extension\")]\n        [TestCase(  @\"/application0/Content/./file\",    @\"file.extension\",          @\"/application0/Content/file.extension\")]\n        [TestCase(  @\"/application0/Content/./file\",    @\"./file.extension\",        @\"/application0/Content/file.extension\")]\n        [TestCase(  @\"Content\\file\",                    @\"file.extension\",          @\"Content\\file.extension\")]\n        [TestCase(  @\"Content\\file\",                    @\"..\\file.extension\",       @\"file.extension\")]\n        [TestCase(  @\"Content\\..\\file\",                 @\"file.extension\",          @\"file.extension\")]\n        [TestCase(  @\"Content\\..\\file\",                 @\"..\\file.extension\",       @\"file.extension\")]\n        [TestCase(  @\"Content\\.\\file\",                  @\"file.extension\",          @\"Content\\file.extension\")]\n        [TestCase(  @\"Content\\.\\file\",                  @\".\\file.extension\",        @\"Content\\file.extension\")]\n        [TestCase(  @\"Content/file\",                    @\"file.extension\",          @\"Content/file.extension\")]\n        [TestCase(  @\"Content/file\",                    @\"../file.extension\",       @\"file.extension\")]\n        [TestCase(  @\"Content/../file\",                 @\"file.extension\",          @\"file.extension\")]\n        [TestCase(  @\"Content/../file\",                 @\"../file.extension\",       @\"file.extension\")]\n        [TestCase(  @\"Content/./file\",                  @\"file.extension\",          @\"Content/file.extension\")]\n        [TestCase(  @\"Content/./file\",                  @\"./file.extension\",        @\"Content/file.extension\")]\n        [TestCase(  @\"Content//file\",                   @\"../file.extension\",       @\"file.extension\")]\n        [TestCase(  @\"C:\\Game\\Content\\fi#le\",           @\"fi#le.extension\",         @\"C:\\Game\\Content\\fi#le.extension\")]\n        public void ResolveRelativePath(\n                    string rootFilePath,                string relativePath,        string matchFullPath)\n        {\n            var fullPath = FileHelpers.ResolveRelativePath(rootFilePath, relativePath);\n            Assert.NotNull(fullPath);\n\n            // Make sure the matching path has the right seperators as well.\n            matchFullPath = FileHelpers.NormalizeFilePathSeparators(matchFullPath);\n           \n            Assert.AreEqual(matchFullPath, fullPath);\n            Assert.AreEqual(-1, fullPath.IndexOf(FileHelpers.NotSeparator));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/Vector2Test.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Kni.Tests.Framework\n{\n    class Vector2Test\n    {\n        [Test]\n        public void CatmullRom()\n        {\n            var expectedResult = new Vector2(5.1944f, 6.1944f);\n            var v1 = new Vector2(1, 2); var v2 = new Vector2(3, 4); var v3 = new Vector2(5, 6); var v4 = new Vector2(7, 8); var value = 1.0972f;\n\n            Vector2 result;\n            Vector2.CatmullRom(ref v1, ref v2, ref v3, ref v4, value, out result);\n\n            Assert.That(expectedResult, Is.EqualTo(Vector2.CatmullRom(v1, v2, v3, v4, value)).Using(Vector2Comparer.Epsilon));\n            Assert.That(expectedResult, Is.EqualTo(result).Using(Vector2Comparer.Epsilon));\n        }\n\n        [Test]\n        public void Multiply()\n        {\n            var vector = new Vector2(1, 2);\n\n            // Test 0.0 scale.\n            Assert.AreEqual(Vector2.Zero, 0 * vector);\n            Assert.AreEqual(Vector2.Zero, vector * 0);\n            Assert.AreEqual(Vector2.Zero, Vector2.Multiply(vector, 0));\n            Assert.AreEqual(Vector2.Multiply(vector, 0), vector * 0.0f);\n\n            // Test 1.0 scale.\n            Assert.AreEqual(vector, 1 * vector);\n            Assert.AreEqual(vector, vector * 1);\n            Assert.AreEqual(vector, Vector2.Multiply(vector, 1));\n            Assert.AreEqual(Vector2.Multiply(vector, 1), vector * 1.0f);\n\n            var scaledVec = vector * 2;\n\n            // Test 2.0 scale.\n            Assert.AreEqual(scaledVec, 2 * vector);\n            Assert.AreEqual(scaledVec, vector * 2);\n            Assert.AreEqual(scaledVec, Vector2.Multiply(vector, 2));\n            Assert.AreEqual(vector * 2.0f, scaledVec);\n            Assert.AreEqual(2 * vector, Vector2.Multiply(vector, 2));\n\n            scaledVec = vector * 0.999f;\n\n            // Test 0.999 scale.\n            Assert.AreEqual(scaledVec, 0.999f * vector);\n            Assert.AreEqual(scaledVec, vector * 0.999f);\n            Assert.AreEqual(scaledVec, Vector2.Multiply(vector, 0.999f));\n            Assert.AreEqual(vector * 0.999f, scaledVec);\n            Assert.AreEqual(0.999f * vector, Vector2.Multiply(vector, 0.999f));\n\n            var vector2 = new Vector2(2, 2);\n\n            // Test two vectors multiplication.\n            Assert.AreEqual(new Vector2(vector.X * vector2.X, vector.Y * vector2.Y), vector * vector2);\n            Assert.AreEqual(vector2 * vector, new Vector2(vector.X * vector2.X, vector.Y * vector2.Y));\n            Assert.AreEqual(vector * vector2, Vector2.Multiply(vector, vector2));\n            Assert.AreEqual(Vector2.Multiply(vector, vector2), vector * vector2);\n\n            Vector2 refVec;\n\n            // Overloads comparsion\n            var vector3 = Vector2.Multiply(vector, vector2);\n            Vector2.Multiply(ref vector, ref vector2, out refVec);\n            Assert.AreEqual(vector3, refVec);\n\n            vector3 = Vector2.Multiply(vector, 2);\n            Vector2.Multiply(ref vector, ref vector2, out refVec);\n            Assert.AreEqual(vector3, refVec);\n        }\n\n        [Test]\n        public void Hermite()\n        {\n            var t1 = new Vector2(1.40625f, 1.40625f);\n            var t2 = new Vector2(2.662375f, 2.26537514f);\n\n            var v1 = new Vector2(1, 1); var v2 = new Vector2(2, 2); var v3 = new Vector2(3, 3); var v4 = new Vector2(4, 4);\n            var v5 = new Vector2(4, 3); var v6 = new Vector2(2, 1); var v7 = new Vector2(1, 2); var v8 = new Vector2(3, 4);\n\n            Assert.That(t1, Is.EqualTo(Vector2.Hermite(v1, v2, v3, v4, 0.25f)).Using(Vector2Comparer.Epsilon));\n            Assert.That(t2, Is.EqualTo(Vector2.Hermite(v5, v6, v7, v8, 0.45f)).Using(Vector2Comparer.Epsilon));\n\n            Vector2 result1;\n            Vector2 result2;\n\n            Vector2.Hermite(ref v1, ref v2, ref v3, ref v4, 0.25f, out result1);\n            Vector2.Hermite(ref v5, ref v6, ref v7, ref v8, 0.45f, out result2);\n\n            Assert.That(t1, Is.EqualTo(result1).Using(Vector2Comparer.Epsilon));\n            Assert.That(t2, Is.EqualTo(result2).Using(Vector2Comparer.Epsilon));\n        }\n\n        [Test]\n        public void Transform()\n        {\n            // STANDART OVERLOADS TEST\n\n            var expectedResult1 = new Vector2(24, 28);\n            var expectedResult2 = new Vector2(-0.0168301091f, 2.30964f);\n\n            var v1 = new Vector2(1, 2);\n            var m1 = new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\n            var v2 = new Vector2(1.1f, 2.45f);\n            var q2 = new Quaternion(0.11f, 0.22f, 0.33f, 0.55f);\n\n            var q3 = new Quaternion(1, 2, 3, 4);\n\n            Assert.That(expectedResult1, Is.EqualTo(Vector2.Transform(v1, m1)).Using(Vector2Comparer.Epsilon));\n            Assert.That(expectedResult2, Is.EqualTo(Vector2.Transform(v2, q2)).Using(Vector2Comparer.Epsilon));\n\n            // OUTPUT OVERLOADS TEST\n\n            Vector2 result1;\n            Vector2 result2;\n\n            Vector2.Transform(ref v1, ref m1, out result1);\n            Vector2.Transform(ref v2, ref q2, out result2);\n\n            Assert.That(expectedResult1, Is.EqualTo(result1).Using(Vector2Comparer.Epsilon));\n            Assert.That(expectedResult2, Is.EqualTo(result2).Using(Vector2Comparer.Epsilon));\n\n            // TRANSFORM ON LIST (MATRIX)\n            {\n                var sourceList1 = new Vector2[10];\n                var desinationList1 = new Vector2[10];\n\n                for (int i = 0; i < 10; i++)\n                {\n                    sourceList1[i] = (new Vector2(1 + i, 1 + i));\n                }\n\n                Vector2.Transform(sourceList1, 0, ref m1, desinationList1, 0, 10);\n\n                for (int i = 0; i < 10; i++)\n                {\n                    Assert.That(desinationList1[i], Is.EqualTo(new Vector2(19 + (6 * i), 22 + (8 * i))).Using(Vector2Comparer.Epsilon));\n                }\n            }\n            // TRANSFORM ON LIST (MATRIX)(DESTINATION & SOURCE)\n            {\n                var sourceList2 = new Vector2[10];\n                var desinationList2 = new Vector2[10];\n\n                for (int i = 0; i < 10; i++)\n                {\n                    sourceList2[i] = (new Vector2(1 + i, 1 + i));\n                }\n\n                Vector2.Transform(sourceList2, 2, ref m1, desinationList2, 1, 3);\n\n                Assert.That(Vector2.Zero, Is.EqualTo(desinationList2[0]).Using(Vector2Comparer.Epsilon));\n\n                Assert.That(new Vector2(31, 38), Is.EqualTo(desinationList2[1]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(37, 46), Is.EqualTo(desinationList2[2]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(43, 54), Is.EqualTo(desinationList2[3]).Using(Vector2Comparer.Epsilon));\n\n                for (int i = 4; i < 10; i++)\n                {\n                    Assert.That(Vector2.Zero, Is.EqualTo(desinationList2[i]).Using(Vector2Comparer.Epsilon));\n                }\n            }\n            // TRANSFORM ON LIST (MATRIX)(SIMPLE)\n            {\n                var sourceList3 = new Vector2[10];\n                var desinationList3 = new Vector2[10];\n\n                for (int i = 0; i < 10; i++)\n                {\n                    sourceList3[i] = (new Vector2(1 + i, 1 + i));\n                }\n\n                Vector2.Transform(sourceList3, ref m1, desinationList3);\n\n                for (int i = 0; i < 10; i++)\n                {\n                    Assert.That(desinationList3[i], Is.EqualTo(new Vector2(19 + (6 * i), 22 + (8 * i))).Using(Vector2Comparer.Epsilon));\n                }\n            }\n            // TRANSFORM ON LIST (QUATERNION)\n            {\n                var sourceList4 = new Vector2[10];\n                var desinationList4 = new Vector2[10];\n\n                for (int i = 0; i < 10; i++)\n                {\n                    sourceList4[i] = (new Vector2(1 + i, 1 + i));\n                }\n\n                Vector2.Transform(sourceList4, 0, ref q3, desinationList4, 0, 10);\n\n                for (int i = 0; i < 10; i++)\n                {\n                    Assert.That(new Vector2(-45 + (-45 * i), 9 + (9 * i)), Is.EqualTo(desinationList4[i]).Using(Vector2Comparer.Epsilon));\n                }\n            }\n            // TRANSFORM ON LIST (QUATERNION)(DESTINATION & SOURCE)\n            {\n                var sourceList5 = new Vector2[10];\n                var desinationList5 = new Vector2[10];\n\n                for (int i = 0; i < 10; i++)\n                {\n                    sourceList5[i] = (new Vector2(1 + i, 1 + i));\n                }\n\n                Vector2.Transform(sourceList5, 2, ref q3, desinationList5, 1, 3);\n\n                Assert.That(Vector2.Zero, Is.EqualTo(desinationList5[0]).Using(Vector2Comparer.Epsilon));\n\n                Assert.That(new Vector2(-135, 27), Is.EqualTo(desinationList5[1]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(-180, 36), Is.EqualTo(desinationList5[2]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(-225, 45), Is.EqualTo(desinationList5[3]).Using(Vector2Comparer.Epsilon));\n\n                for (int i = 4; i < 10; i++)\n                {\n                    Assert.That(Vector2.Zero, Is.EqualTo(desinationList5[i]).Using(Vector2Comparer.Epsilon));\n                }\n            }\n            // TRANSFORM ON LIST (QUATERNION)(SIMPLE)\n            {\n                var sourceList6 = new Vector2[10];\n                var desinationList6 = new Vector2[10];\n\n                for (int i = 0; i < 10; i++)\n                {\n                    sourceList6[i] = (new Vector2(1 + i, 1 + i));\n                }\n\n                Vector2.Transform(sourceList6, ref q3, desinationList6);\n\n                for (int i = 0; i < 10; i++)\n                {\n                    Assert.That(new Vector2(-45 + (-45 * i), 9 + (9 * i)), Is.EqualTo(desinationList6[i]).Using(Vector2Comparer.Epsilon));\n                }\n            }\n        }\n\n        [Test]\n        public void TransformNormal()\n        {\n            var normal = new Vector2(1.5f, 2.5f);\n            var matrix = new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\n            var expectedResult1 = new Vector2(14, 18);\n            var expectedResult2 = expectedResult1;\n\n            Assert.That(expectedResult1, Is.EqualTo(Vector2.TransformNormal(normal, matrix)).Using(Vector2Comparer.Epsilon));\n\n            Vector2 result;\n            Vector2.TransformNormal(ref normal, ref matrix, out result);\n\n            Assert.That(expectedResult2, Is.EqualTo(result).Using(Vector2Comparer.Epsilon));\n\n            // TRANSFORM ON LIST\n            {\n                var sourceArray1 = new Vector2[10];\n                var destinationArray1 = new Vector2[10];\n\n                for (int i = 0; i < 10; i++)\n                {\n                    sourceArray1[i] = new Vector2(i, i);\n                }\n\n                Vector2.TransformNormal(sourceArray1, 0, ref matrix, destinationArray1, 0, 10);\n\n                for (int i = 0; i < 10; i++)\n                {\n                    Assert.That(new Vector2(0 + (6 * i), 0 + (8 * i)), Is.EqualTo(destinationArray1[i]).Using(Vector2Comparer.Epsilon));\n                }\n            }\n            // TRANSFORM ON LIST(SOURCE OFFSET)\n            {\n                var sourceArray2 = new Vector2[10];\n                var destinationArray2 = new Vector2[10];\n\n                for (int i = 0; i < 10; i++)\n                {\n                    sourceArray2[i] = new Vector2(i, i);\n                }\n\n                Vector2.TransformNormal(sourceArray2, 5, ref matrix, destinationArray2, 0, 5);\n\n                for (int i = 0; i < 5; i++)\n                {\n                    Assert.That(new Vector2(30 + (6 * i), 40 + (8 * i)), Is.EqualTo(destinationArray2[i]).Using(Vector2Comparer.Epsilon));\n                }\n\n                for (int i = 5; i < 10; i++)\n                {\n                    Assert.That(Vector2.Zero, Is.EqualTo(destinationArray2[i]).Using(Vector2Comparer.Epsilon));\n                }\n            }\n            // TRANSFORM ON LIST(DESTINATION OFFSET)\n            {\n                var sourceArray3 = new Vector2[10];\n                var destinationArray3 = new Vector2[10];\n\n                for (int i = 0; i < 10; ++i)\n                {\n                    sourceArray3[i] = new Vector2(i, i);\n                }\n\n                Vector2.TransformNormal(sourceArray3, 0, ref matrix, destinationArray3, 5, 5);\n\n                for (int i = 0; i < 6; ++i)\n                {\n                    Assert.That(Vector2.Zero, Is.EqualTo(destinationArray3[i]).Using(Vector2Comparer.Epsilon));\n                }\n\n                Assert.That(new Vector2(6, 8), Is.EqualTo(destinationArray3[6]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(12, 16), Is.EqualTo(destinationArray3[7]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(18, 24), Is.EqualTo(destinationArray3[8]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(24, 32), Is.EqualTo(destinationArray3[9]).Using(Vector2Comparer.Epsilon));\n            }\n            // TRANSFORM ON LIST(DESTINATION & SOURCE)\n            {\n                var sourceArray4 = new Vector2[10];\n                var destinationArray4 = new Vector2[10];\n\n                for (int i = 0; i < 10; ++i)\n                {\n                    sourceArray4[i] = new Vector2(i, i);\n                }\n\n                Vector2.TransformNormal(sourceArray4, 2, ref matrix, destinationArray4, 3, 6);\n\n                for (int i = 0; i < 3; ++i)\n                {\n                    Assert.That(Vector2.Zero, Is.EqualTo(destinationArray4[i]).Using(Vector2Comparer.Epsilon));\n                }\n\n                Assert.That(new Vector2(12, 16), Is.EqualTo(destinationArray4[3]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(18, 24), Is.EqualTo(destinationArray4[4]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(24, 32), Is.EqualTo(destinationArray4[5]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(30, 40), Is.EqualTo(destinationArray4[6]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(36, 48), Is.EqualTo(destinationArray4[7]).Using(Vector2Comparer.Epsilon));\n                Assert.That(new Vector2(42, 56), Is.EqualTo(destinationArray4[8]).Using(Vector2Comparer.Epsilon));\n\n                Assert.That(Vector2.Zero, Is.EqualTo(destinationArray4[9]).Using(Vector2Comparer.Epsilon));\n            }\n            // TRANSFORM ON LIST(SIMPLE)\n            {\n                var sourceArray5 = new Vector2[10];\n                var destinationArray5 = new Vector2[10];\n\n                for (int i = 0; i < 10; ++i)\n                {\n                    sourceArray5[i] = new Vector2(i, i);\n                }\n\n                Vector2.TransformNormal(sourceArray5, ref matrix, destinationArray5);\n\n                for (int i = 0; i < 10; ++i)\n                {\n                    Assert.That(new Vector2(0 + (6 * i), 0 + (8 * i)), Is.EqualTo(destinationArray5[i]).Using(Vector2Comparer.Epsilon));\n                }\n            }\n        }\n\n        [Test]\n        public void TypeConverter()\n        {\n            var converter = TypeDescriptor.GetConverter(typeof(Vector2));\n            var invariantCulture = CultureInfo.InvariantCulture;\n\n            Assert.AreEqual(new Vector2(32, 64), converter.ConvertFromString(null, invariantCulture, \"32, 64\"));\n            Assert.AreEqual(new Vector2(0.5f, 2.75f), converter.ConvertFromString(null, invariantCulture, \"0.5, 2.75\"));\n            Assert.AreEqual(new Vector2(1024.5f, 2048.75f), converter.ConvertFromString(null, invariantCulture, \"1024.5, 2048.75\"));\n            Assert.AreEqual(\"32, 64\", converter.ConvertToString(null, invariantCulture, new Vector2(32, 64)));\n            Assert.AreEqual(\"0.5, 2.75\", converter.ConvertToString(null, invariantCulture, new Vector2(0.5f, 2.75f)));\n            Assert.AreEqual(\"1024.5, 2048.75\", converter.ConvertToString(null, invariantCulture, new Vector2(1024.5f, 2048.75f)));\n\n            var otherCulture = new CultureInfo(\"el-GR\");\n            var vectorStr = (1024.5f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + \" \" +\n                            (2048.75f).ToString(otherCulture);\n            Assert.AreEqual(new Vector2(1024.5f, 2048.75f), converter.ConvertFromString(null, otherCulture, vectorStr));\n            Assert.AreEqual(vectorStr, converter.ConvertToString(null, otherCulture, new Vector2(1024.5f, 2048.75f)));\n        }\n\n        [Test]\n        public void HashCode()\n        {\n            // Checking for overflows in hash calculation.\n            var max = new Vector2(float.MaxValue, float.MaxValue);\n            var min = new Vector2(float.MinValue, float.MinValue);\n            Assert.AreNotEqual(max.GetHashCode(), Vector2.Zero.GetHashCode());\n            Assert.AreNotEqual(min.GetHashCode(), Vector2.Zero.GetHashCode());\n\n            // Common values\n            var a = new Vector2(0f, 0f);\n            Assert.AreEqual(a.GetHashCode(), Vector2.Zero.GetHashCode());\n            Assert.AreNotEqual(a.GetHashCode(), Vector2.One.GetHashCode());\n\n            // Individual properties alter hash\n            var xa = new Vector2(2f, 1f);\n            var xb = new Vector2(3f, 1f);\n            var ya = new Vector2(1f, 2f);\n            var yb = new Vector2(1f, 3f);\n            Assert.AreNotEqual(xa.GetHashCode(), xb.GetHashCode(), \"Different properties should change hash.\");\n            Assert.AreNotEqual(ya.GetHashCode(), yb.GetHashCode(), \"Different properties should change hash.\");\n#if !XNA\n            Assert.AreNotEqual(xa.GetHashCode(), ya.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(xb.GetHashCode(), yb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n#endif\n            Assert.AreNotEqual(xa.GetHashCode(), yb.GetHashCode());\n            Assert.AreNotEqual(ya.GetHashCode(), xb.GetHashCode());\n        }\n\n#if !XNA\n        [Test]\n        public void ToPoint()\n        {\n            Assert.AreEqual(new Point(0, 0), new Vector2(0.1f, 0.1f).ToPoint());\n            Assert.AreEqual(new Point(0, 0), new Vector2(0.5f, 0.5f).ToPoint());\n            Assert.AreEqual(new Point(0, 0), new Vector2(0.55f, 0.55f).ToPoint());\n            Assert.AreEqual(new Point(0, 0), new Vector2(1.0f - 0.1f, 1.0f - 0.1f).ToPoint());\n            Assert.AreEqual(new Point(1, 1), new Vector2(1.0f - float.Epsilon, 1.0f - float.Epsilon).ToPoint());\n            Assert.AreEqual(new Point(1, 1), new Vector2(1.0f, 1.0f).ToPoint());\n            Assert.AreEqual(new Point(19, 27), new Vector2(19.033f, 27.1f).ToPoint());\n        }\n\n        [Test]\n        public void Deconstruct()\n        {\n            Vector2 vector2 = new Vector2(float.MinValue, float.MaxValue);\n\n            float x, y;\n\n            vector2.Deconstruct(out x, out y);\n\n            Assert.AreEqual(x, vector2.X);\n            Assert.AreEqual(y, vector2.Y);\n        }\n\n        [Test]\n        public void Round()\n        {\n            Vector2 vector2 = new Vector2(0.4f, 0.6f);\n\n            // CEILING\n\n            Vector2 ceilMember = vector2;\n            ceilMember.Ceiling();\n\n            Vector2 ceilResult;\n            Vector2.Ceiling(ref vector2, out ceilResult);\n\n            Assert.AreEqual(new Vector2(1.0f, 1.0f), ceilMember);\n            Assert.AreEqual(new Vector2(1.0f, 1.0f), Vector2.Ceiling(vector2));\n            Assert.AreEqual(new Vector2(1.0f, 1.0f), ceilResult);\n\n            // FLOOR\n\n            Vector2 floorMember = vector2;\n            floorMember.Floor();\n\n            Vector2 floorResult;\n            Vector2.Floor(ref vector2, out floorResult);\n\n            Assert.AreEqual(new Vector2(0.0f, 0.0f), floorMember);\n            Assert.AreEqual(new Vector2(0.0f, 0.0f), Vector2.Floor(vector2));\n            Assert.AreEqual(new Vector2(0.0f, 0.0f), floorResult);\n\n            // ROUND\n\n            Vector2 roundMember = vector2;\n            roundMember.Round();\n\n            Vector2 roundResult;\n            Vector2.Round(ref vector2, out roundResult);\n\n            Assert.AreEqual(new Vector2(0.0f, 1.0f), roundMember);\n            Assert.AreEqual(new Vector2(0.0f, 1.0f), Vector2.Round(vector2));\n            Assert.AreEqual(new Vector2(0.0f, 1.0f), roundResult);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/Vector3Test.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Kni.Tests.Framework\n{\n    class Vector3Test\n    {\n        [Test]\n        public void TypeConverter()\n        {\n            var converter = TypeDescriptor.GetConverter(typeof(Vector3));\n            var invariantCulture = CultureInfo.InvariantCulture;\n\n            Assert.AreEqual(new Vector3(32, 64, 128), converter.ConvertFromString(null, invariantCulture, \"32, 64, 128\"));\n            Assert.AreEqual(new Vector3(0.5f, 2.75f, 4.125f), converter.ConvertFromString(null, invariantCulture, \"0.5, 2.75, 4.125\"));\n            Assert.AreEqual(new Vector3(1024.5f, 2048.75f, 4096.125f), converter.ConvertFromString(null, invariantCulture, \"1024.5, 2048.75, 4096.125\"));\n            Assert.AreEqual(\"32, 64, 128\", converter.ConvertToString(null, invariantCulture, new Vector3(32, 64, 128)));\n            Assert.AreEqual(\"0.5, 2.75, 4.125\", converter.ConvertToString(null, invariantCulture, new Vector3(0.5f, 2.75f, 4.125f)));\n            Assert.AreEqual(\"1024.5, 2048.75, 4096.125\", converter.ConvertToString(null, invariantCulture, new Vector3(1024.5f, 2048.75f, 4096.125f)));\n\n            var otherCulture = new CultureInfo(\"el-GR\");\n            var vectorStr = (1024.5f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + \" \" +\n                            (2048.75f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + \" \" +\n                            (4096.125f).ToString(otherCulture);\n            Assert.AreEqual(new Vector3(1024.5f, 2048.75f, 4096.125f), converter.ConvertFromString(null, otherCulture, vectorStr));\n            Assert.AreEqual(vectorStr, converter.ConvertToString(null, otherCulture, new Vector3(1024.5f, 2048.75f, 4096.125f)));\n        }\n\n        [Test]\n        public void DistanceSquared()\n        {\n            var v1 = new Vector3(0.1f, 100.0f, -5.5f);\n            var v2 = new Vector3(1.1f, -2.0f, 5.5f);\n            var d = Vector3.DistanceSquared(v1, v2);\n            var expectedResult = 10526f;\n            Assert.AreEqual(expectedResult, d);\n        }\n\n        [Test]\n        public void Normalize()\n        {\n            Vector3 v1 = new Vector3(-10.5f, 0.2f, 1000.0f);\n            Vector3 v2 = new Vector3(-10.5f, 0.2f, 1000.0f);\n            v1.Normalize();\n            var expectedResult = new Vector3(-0.0104994215f, 0.000199988979f, 0.999944866f);\n            Assert.That(expectedResult, Is.EqualTo(v1).Using(Vector3Comparer.Epsilon));\n            v2 = Vector3.Normalize(v2);\n            Assert.That(expectedResult, Is.EqualTo(v2).Using(Vector3Comparer.Epsilon));\n        }\n\n        [Test]\n        public void Transform()\n        {\n            // STANDART OVERLOADS TEST\n\n            var expectedResult1 = new Vector3(51, 58, 65);\n            var expectedResult2 = new Vector3(33, -14, -1);\n\n            var v1 = new Vector3(1, 2, 3);\n            var m1 = new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\n            var v2 = new Vector3(1, 2, 3);\n            var q1 = new Quaternion(2, 3, 4, 5);\n\n            Vector3 result1;\n            Vector3 result2;\n\n            Assert.That(expectedResult1, Is.EqualTo(Vector3.Transform(v1, m1)).Using(Vector3Comparer.Epsilon));\n            Assert.That(expectedResult2, Is.EqualTo(Vector3.Transform(v2, q1)).Using(Vector3Comparer.Epsilon));\n\n            // OUTPUT OVERLOADS TEST\n\n            Vector3.Transform(ref v1, ref m1, out result1);\n            Vector3.Transform(ref v2, ref q1, out result2);\n\n            Assert.That(expectedResult1, Is.EqualTo(result1).Using(Vector3Comparer.Epsilon));\n            Assert.That(expectedResult2, Is.EqualTo(result2).Using(Vector3Comparer.Epsilon));\n        }\n\n        [Test]\n        public void HashCode() {\n            // Checking for overflows in hash calculation.\n            var max = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);\n            var min = new Vector3(float.MinValue, float.MinValue, float.MinValue);\n            Assert.AreNotEqual(max.GetHashCode(), Vector3.Zero.GetHashCode());\n            Assert.AreNotEqual(min.GetHashCode(), Vector3.Zero.GetHashCode());\n\n            // Common values\n            var a = new Vector3(0f, 0f, 0f);\n            Assert.AreEqual(a.GetHashCode(), Vector3.Zero.GetHashCode());\n            Assert.AreNotEqual(a.GetHashCode(), Vector3.One.GetHashCode());\n\n            // Individual properties alter hash\n            var xa = new Vector3(2f, 1f, 1f);\n            var xb = new Vector3(3f, 1f, 1f);\n            var ya = new Vector3(1f, 2f, 1f);\n            var yb = new Vector3(1f, 3f, 1f);\n            var za = new Vector3(1f, 1f, 2f);\n            var zb = new Vector3(1f, 1f, 3f);\n            Assert.AreNotEqual(xa.GetHashCode(), xb.GetHashCode(), \"Different properties should change hash.\");\n            Assert.AreNotEqual(ya.GetHashCode(), yb.GetHashCode(), \"Different properties should change hash.\");\n            Assert.AreNotEqual(za.GetHashCode(), zb.GetHashCode(), \"Different properties should change hash.\");\n#if !XNA\n            Assert.AreNotEqual(xa.GetHashCode(), ya.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(xb.GetHashCode(), yb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(xb.GetHashCode(), zb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(yb.GetHashCode(), zb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n#endif\n            Assert.AreNotEqual(xa.GetHashCode(), yb.GetHashCode());\n            Assert.AreNotEqual(ya.GetHashCode(), xb.GetHashCode());\n            Assert.AreNotEqual(xa.GetHashCode(), zb.GetHashCode());\n        }\n\n#if !XNA\n        [Test]\n        public void Deconstruct()\n        {\n            Vector3 vector3 = new Vector3(float.MinValue, float.MaxValue, float.MinValue);\n\n            float x, y, z;\n\n            vector3.Deconstruct(out x, out y, out z);\n\n            Assert.AreEqual(x, vector3.X);\n            Assert.AreEqual(y, vector3.Y);\n            Assert.AreEqual(z, vector3.Z);\n        }\n\n        [Test]\n        public void Round()\n        {\n            Vector3 vector3 = new Vector3(0.4f, 0.6f, 1.0f);\n\n            // CEILING\n\n            Vector3 ceilMember = vector3;\n            ceilMember.Ceiling();\n\n            Vector3 ceilResult;\n            Vector3.Ceiling(ref vector3, out ceilResult);\n\n            Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), ceilMember);\n            Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), Vector3.Ceiling(vector3));\n            Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), ceilResult);\n\n            // FLOOR\n\n            Vector3 floorMember = vector3;\n            floorMember.Floor();\n\n            Vector3 floorResult;\n            Vector3.Floor(ref vector3, out floorResult);\n\n            Assert.AreEqual(new Vector3(0.0f, 0.0f, 1.0f), floorMember);\n            Assert.AreEqual(new Vector3(0.0f, 0.0f, 1.0f), Vector3.Floor(vector3));\n            Assert.AreEqual(new Vector3(0.0f, 0.0f, 1.0f), floorResult);\n\n            // ROUND\n\n            Vector3 roundMember = vector3;\n            roundMember.Round();\n\n            Vector3 roundResult;\n            Vector3.Round(ref vector3, out roundResult);\n\n            Assert.AreEqual(new Vector3(0.0f, 1.0f, 1.0f), roundMember);\n            Assert.AreEqual(new Vector3(0.0f, 1.0f, 1.0f), Vector3.Round(vector3));\n            Assert.AreEqual(new Vector3(0.0f, 1.0f, 1.0f), roundResult);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/Vector4Test.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing NUnit.Framework;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Kni.Tests.Framework\n{\n    class Vector4Test\n    {\n        [Test]\n        public void TypeConverter()\n        {\n            var converter = TypeDescriptor.GetConverter(typeof(Vector4));\n            var invariantCulture = CultureInfo.InvariantCulture;\n\n            Assert.AreEqual(new Vector4(32, 64, 128, 255), converter.ConvertFromString(null, invariantCulture, \"32, 64, 128, 255\"));\n            Assert.AreEqual(new Vector4(0.5f, 2.75f, 4.125f, 8.0625f), converter.ConvertFromString(null, invariantCulture, \"0.5, 2.75, 4.125, 8.0625\"));\n            Assert.AreEqual(new Vector4(1024.5f, 2048.75f, 4096.125f, 8192.0625f), converter.ConvertFromString(null, invariantCulture, \"1024.5, 2048.75, 4096.125, 8192.0625\"));\n            Assert.AreEqual(\"32, 64, 128, 255\", converter.ConvertToString(null, invariantCulture, new Vector4(32, 64, 128, 255)));\n            Assert.AreEqual(\"0.5, 2.75, 4.125, 8.0625\", converter.ConvertToString(null, invariantCulture, new Vector4(0.5f, 2.75f, 4.125f, 8.0625f)));\n            Assert.AreEqual(\"1024.5, 2048.75, 4096.125, 8192.0625\", converter.ConvertToString(null, invariantCulture, new Vector4(1024.5f, 2048.75f, 4096.125f, 8192.0625f)));\n\n            var otherCulture = new CultureInfo(\"el-GR\");\n            var vectorStr = (1024.5f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + \" \" +\n                            (2048.75f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + \" \" +\n                            (4096.125f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + \" \" +\n                            (2048.75f).ToString(otherCulture);\n            Assert.AreEqual(new Vector4(1024.5f, 2048.75f, 4096.125f, 2048.75f), converter.ConvertFromString(null, otherCulture, vectorStr));\n            Assert.AreEqual(vectorStr, converter.ConvertToString(null, otherCulture, new Vector4(1024.5f, 2048.75f, 4096.125f, 2048.75f)));\n        }\n\n        [Test]\n        public void Constructors()\n        {\n            var expectedResult = new Vector4()\n            {\n                X = 1,\n                Y = 2,\n                Z = 3,\n                W = 4\n            };\n\n            var expectedResult2 = new Vector4()\n            {\n                X = 2.2f,\n                Y = 2.2f,\n                Z = 2.2f,\n                W = 2.2f\n            };\n\n            Assert.That(expectedResult, Is.EqualTo(new Vector4(1,2,3,4)).Using(Vector4Comparer.Epsilon));\n            Assert.That(expectedResult, Is.EqualTo(new Vector4(new Vector2(1,2),3,4)).Using(Vector4Comparer.Epsilon));\n            Assert.That(expectedResult, Is.EqualTo(new Vector4(new Vector3(1,2,3),4)).Using(Vector4Comparer.Epsilon));\n            Assert.That(expectedResult2, Is.EqualTo(new Vector4(2.2f)).Using(Vector4Comparer.Epsilon));\n        }\n\n        [Test]\n        public void Properties()\n        {\n            Assert.That(new Vector4(0,0,0,0), Is.EqualTo(Vector4.Zero).Using(Vector4Comparer.Epsilon));\n            Assert.That(new Vector4(1,1,1,1), Is.EqualTo(Vector4.One).Using(Vector4Comparer.Epsilon));\n            Assert.That(new Vector4(1,0,0,0), Is.EqualTo(Vector4.UnitX).Using(Vector4Comparer.Epsilon));\n            Assert.That(new Vector4(0,1,0,0), Is.EqualTo(Vector4.UnitY).Using(Vector4Comparer.Epsilon));\n            Assert.That(new Vector4(0,0,1,0), Is.EqualTo(Vector4.UnitZ).Using(Vector4Comparer.Epsilon));\n            Assert.That(new Vector4(0,0,0,1), Is.EqualTo(Vector4.UnitW).Using(Vector4Comparer.Epsilon));\n        }\n\n        [Test]\n        public void Dot()\n        {\n            var vector1 = new Vector4(1, 2, 3, 4);\n            var vector2 = new Vector4(0.5f, 1.1f, -3.8f, 1.2f);\n            var expectedResult = -3.89999962f;\n\n            Assert.AreEqual(expectedResult, Vector4.Dot(vector1, vector2));\n\n            float result;\n            Vector4.Dot(ref vector1, ref vector2, out result);\n\n            Assert.AreEqual(expectedResult, result);\n        }\n\n        [Test]\n        public void Hermite()\n        {\n            var t1 = new Vector4(1.40625f, 1.40625f, 0.2f, 0.92f);\n            var t2 = new Vector4(2.662375f, 2.26537514f,10.0f,2f);\n            var v1 = new Vector4(1,2,3,4);\n            var v2 = new Vector4(-1.3f,0.1f,30.0f,365.20f);\n            var a = 2.234f;\n\n            var result1 = Vector4.Hermite(v1, t1, v2, t2, a);\n            var expected = new Vector4(39.0311f, 34.65557f, -132.5473f, -2626.85938f);\n            Assert.That(expected, Is.EqualTo(result1).Using(Vector4Comparer.Epsilon));\n\n            Vector4 result2;\n\n            // same as result1 ? - it must be same\n\n            Vector4.Hermite(ref v1, ref t1, ref v2, ref t2, a, out result2);\n            Assert.That(result1, Is.EqualTo(result2).Using(Vector4Comparer.Epsilon));\n        }\n\n        [Test]\n        public void Length()\n        {\n            var vector1 = new Vector4(1, 2, 3, 4);\n            Assert.AreEqual(5.477226f,vector1.Length());\n        }\n\n        [Test]\n        public void LengthSquared()\n        {\n            var vector1 = new Vector4(1, 2, 3, 4);\n            Assert.AreEqual(30, vector1.LengthSquared());\n        }\n\n        [Test]\n        public void Normalize()\n        {\n            var vector1 = new Vector4(1, 2, 3, 4);\n            vector1.Normalize();\n            var expected = new Vector4(0.1825742f,0.3651484f,0.5477225f,0.7302967f);\n            Assert.That(expected, Is.EqualTo(vector1).Using(Vector4Comparer.Epsilon));\n            var vector2 = new Vector4(1, 2, 3, 4);\n            var result = Vector4.Normalize(vector2);\n            Assert.That(expected, Is.EqualTo(result).Using(Vector4Comparer.Epsilon));\n        }\n\n        [Test]\n        public void ToStringTest()\n        {\n            StringAssert.IsMatch(\"{X:10 Y:20 Z:3.5 W:-100}\", new Vector4(10, 20, 3.5f, -100).ToString());\n        }\n\n        [Test]\n        public void HashCode() {\n            // Checking for overflows in hash calculation.\n            var max = new Vector4(float.MaxValue, float.MaxValue, float.MaxValue, float.MaxValue);\n            var min = new Vector4(float.MinValue, float.MinValue, float.MinValue, float.MinValue);\n            Assert.AreNotEqual(max.GetHashCode(), Vector4.Zero.GetHashCode());\n            Assert.AreNotEqual(min.GetHashCode(), Vector4.Zero.GetHashCode());\n\n            // Common values\n            var a = new Vector4(0f, 0f, 0f, 0f);\n            Assert.AreEqual(a.GetHashCode(), Vector4.Zero.GetHashCode(), \"Shouldn't do object id compare.\");\n            Assert.AreNotEqual(a.GetHashCode(), Vector4.One.GetHashCode());\n\n            // Individual properties alter hash\n            var xa = new Vector4(2f, 1f, 1f, 1f);\n            var xb = new Vector4(3f, 1f, 1f, 1f);\n            var ya = new Vector4(1f, 2f, 1f, 1f);\n            var yb = new Vector4(1f, 3f, 1f, 1f);\n            var za = new Vector4(1f, 1f, 2f, 1f);\n            var zb = new Vector4(1f, 1f, 3f, 1f);\n            var wa = new Vector4(1f, 1f, 1f, 2f);\n            var wb = new Vector4(1f, 1f, 1f, 3f);\n            Assert.AreNotEqual(xa.GetHashCode(), xb.GetHashCode(), \"Different properties should change hash.\");\n            Assert.AreNotEqual(ya.GetHashCode(), yb.GetHashCode(), \"Different properties should change hash.\");\n            Assert.AreNotEqual(za.GetHashCode(), zb.GetHashCode(), \"Different properties should change hash.\");\n            Assert.AreNotEqual(wa.GetHashCode(), wb.GetHashCode(), \"Different properties should change hash.\");\n#if !XNA\n            Assert.AreNotEqual(xa.GetHashCode(), ya.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(xb.GetHashCode(), yb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(xb.GetHashCode(), zb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(yb.GetHashCode(), zb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(xb.GetHashCode(), wb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n            Assert.AreNotEqual(yb.GetHashCode(), wb.GetHashCode(), \"Identical values on different properties should have different hashes.\");\n#endif\n            Assert.AreNotEqual(xa.GetHashCode(), yb.GetHashCode());\n            Assert.AreNotEqual(ya.GetHashCode(), xb.GetHashCode());\n            Assert.AreNotEqual(xa.GetHashCode(), zb.GetHashCode());\n            Assert.AreNotEqual(xa.GetHashCode(), wb.GetHashCode());\n        }\n\n#if !XNA\n        [Test]\n        public void Deconstruct()\n        {\n            Vector4 vector4 = new Vector4(float.MinValue, float.MaxValue, float.MinValue, float.MaxValue);\n\n            float x, y, z, w;\n\n            vector4.Deconstruct(out x, out y, out z, out w);\n\n            Assert.AreEqual(x, vector4.X);\n            Assert.AreEqual(y, vector4.Y);\n            Assert.AreEqual(z, vector4.Z);\n            Assert.AreEqual(w, vector4.W);\n        }\n\n        [Test]\n        public void Round()\n        {\n            Vector4 vector4 = new Vector4(0.0f, 0.4f, 0.6f, 1.0f);\n\n            // CEILING\n\n            Vector4 ceilMember = vector4;\n            ceilMember.Ceiling();\n\n            Vector4 ceilResult;\n            Vector4.Ceiling(ref vector4, out ceilResult);\n\n            Assert.AreEqual(new Vector4(0.0f, 1.0f, 1.0f, 1.0f), ceilMember);\n            Assert.AreEqual(new Vector4(0.0f, 1.0f, 1.0f, 1.0f), Vector4.Ceiling(vector4));\n            Assert.AreEqual(new Vector4(0.0f, 1.0f, 1.0f, 1.0f), ceilResult);\n\n            // FLOOR\n\n            Vector4 floorMember = vector4;\n            floorMember.Floor();\n\n            Vector4 floorResult;\n            Vector4.Floor(ref vector4, out floorResult);\n\n            Assert.AreEqual(new Vector4(0.0f, 0.0f, 0.0f, 1.0f), floorMember);\n            Assert.AreEqual(new Vector4(0.0f, 0.0f, 0.0f, 1.0f), Vector4.Floor(vector4));\n            Assert.AreEqual(new Vector4(0.0f, 0.0f, 0.0f, 1.0f), floorResult);\n\n            // ROUND\n\n            Vector4 roundMember = vector4;\n            roundMember.Round();\n\n            Vector4 roundResult;\n            Vector4.Round(ref vector4, out roundResult);\n\n            Assert.AreEqual(new Vector4(0.0f, 0.0f, 1.0f, 1.0f), roundMember);\n            Assert.AreEqual(new Vector4(0.0f, 0.0f, 1.0f, 1.0f), Vector4.Round(vector4));\n            Assert.AreEqual(new Vector4(0.0f, 0.0f, 1.0f, 1.0f), roundResult);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework/VertexTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    public class VertexTests\n    {\n#if !XNA\n        [Test]\n        public void TestVertexPosition()\n        {\n            Assert.That(VertexPosition.VertexDeclaration.VertexStride, Is.EqualTo(12));\n\n            var vertexElements = VertexPosition.VertexDeclaration.GetVertexElements();\n            Assert.That(vertexElements, Has.Length.EqualTo(1));\n            Assert.That(vertexElements[0].Offset, Is.EqualTo(0));\n            Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3));\n            Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position));\n\n            var vertex1 = new VertexPosition(Vector3.One);\n            var vertex2 = new VertexPosition(Vector3.One);\n            var vertex3 = new VertexPosition(Vector3.Zero);\n\n            Assert.That(vertex1 == vertex2, Is.True);\n            Assert.That(vertex1 != vertex2, Is.False);\n            Assert.That(vertex1 == vertex3, Is.False);\n            Assert.That(vertex1 != vertex3, Is.True);\n            Assert.That(vertex1.Equals(vertex2), Is.True);\n            Assert.That(vertex1.Equals(vertex3), Is.False);\n        }\n#endif\n\n        [Test]\n        public void TestVertexPositionColor()\n        {\n            Assert.That(VertexPositionColor.VertexDeclaration.VertexStride, Is.EqualTo(16));\n\n            var vertexElements = VertexPositionColor.VertexDeclaration.GetVertexElements();\n            Assert.That(vertexElements, Has.Length.EqualTo(2));\n            Assert.That(vertexElements[0].Offset, Is.EqualTo(0));\n            Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3));\n            Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position));\n            Assert.That(vertexElements[1].Offset, Is.EqualTo(12));\n            Assert.That(vertexElements[1].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[1].VertexElementFormat, Is.EqualTo(VertexElementFormat.Color));\n            Assert.That(vertexElements[1].VertexElementUsage, Is.EqualTo(VertexElementUsage.Color));\n\n            var vertex1 = new VertexPositionColor(Vector3.One, Color.Blue);\n            var vertex2 = new VertexPositionColor(Vector3.One, Color.Blue);\n            var vertex3 = new VertexPositionColor(Vector3.One, Color.Red);\n            var vertex4 = new VertexPositionColor(Vector3.Forward, Color.Blue);\n\n            Assert.That(vertex1 == vertex2, Is.True);\n            Assert.That(vertex1 != vertex2, Is.False);\n            Assert.That(vertex1 == vertex3, Is.False);\n            Assert.That(vertex1 != vertex3, Is.True);\n            Assert.That(vertex1 == vertex4, Is.False);\n            Assert.That(vertex1 != vertex4, Is.True);\n            Assert.That(vertex1.Equals(vertex2), Is.True);\n            Assert.That(vertex1.Equals(vertex3), Is.False);\n            Assert.That(vertex1.Equals(vertex4), Is.False);\n        }\n\n        [Test]\n        public void TestVertexPositionColorTexture()\n        {\n            Assert.That(VertexPositionColorTexture.VertexDeclaration.VertexStride, Is.EqualTo(24));\n\n            var vertexElements = VertexPositionColorTexture.VertexDeclaration.GetVertexElements();\n            Assert.That(vertexElements, Has.Length.EqualTo(3));\n            Assert.That(vertexElements[0].Offset, Is.EqualTo(0));\n            Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3));\n            Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position));\n            Assert.That(vertexElements[1].Offset, Is.EqualTo(12));\n            Assert.That(vertexElements[1].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[1].VertexElementFormat, Is.EqualTo(VertexElementFormat.Color));\n            Assert.That(vertexElements[1].VertexElementUsage, Is.EqualTo(VertexElementUsage.Color));\n            Assert.That(vertexElements[2].Offset, Is.EqualTo(16));\n            Assert.That(vertexElements[2].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[2].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector2));\n            Assert.That(vertexElements[2].VertexElementUsage, Is.EqualTo(VertexElementUsage.TextureCoordinate));\n\n            var vertex1 = new VertexPositionColorTexture(Vector3.One, Color.Blue, Vector2.One);\n            var vertex2 = new VertexPositionColorTexture(Vector3.One, Color.Blue, Vector2.One);\n            var vertex3 = new VertexPositionColorTexture(Vector3.One, Color.Red, Vector2.One);\n            var vertex4 = new VertexPositionColorTexture(Vector3.Forward, Color.Blue, Vector2.One);\n            var vertex5 = new VertexPositionColorTexture(Vector3.Forward, Color.Blue, Vector2.Zero);\n\n            Assert.That(vertex1 == vertex2, Is.True);\n            Assert.That(vertex1 != vertex2, Is.False);\n            Assert.That(vertex1 == vertex3, Is.False);\n            Assert.That(vertex1 != vertex3, Is.True);\n            Assert.That(vertex1 == vertex4, Is.False);\n            Assert.That(vertex1 != vertex4, Is.True);\n            Assert.That(vertex4 == vertex5, Is.False);\n            Assert.That(vertex4 != vertex5, Is.True);\n            Assert.That(vertex1.Equals(vertex2), Is.True);\n            Assert.That(vertex1.Equals(vertex3), Is.False);\n            Assert.That(vertex1.Equals(vertex4), Is.False);\n            Assert.That(vertex4.Equals(vertex5), Is.False);\n        }\n\n        [Test]\n        public void TestVertexPositionNormalTexture()\n        {\n            Assert.That(VertexPositionNormalTexture.VertexDeclaration.VertexStride, Is.EqualTo(32));\n\n            var vertexElements = VertexPositionNormalTexture.VertexDeclaration.GetVertexElements();\n            Assert.That(vertexElements, Has.Length.EqualTo(3));\n            Assert.That(vertexElements[0].Offset, Is.EqualTo(0));\n            Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3));\n            Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position));\n            Assert.That(vertexElements[1].Offset, Is.EqualTo(12));\n            Assert.That(vertexElements[1].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[1].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3));\n            Assert.That(vertexElements[1].VertexElementUsage, Is.EqualTo(VertexElementUsage.Normal));\n            Assert.That(vertexElements[2].Offset, Is.EqualTo(24));\n            Assert.That(vertexElements[2].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[2].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector2));\n            Assert.That(vertexElements[2].VertexElementUsage, Is.EqualTo(VertexElementUsage.TextureCoordinate));\n\n            var vertex1 = new VertexPositionNormalTexture(Vector3.One, Vector3.Forward, Vector2.One);\n            var vertex2 = new VertexPositionNormalTexture(Vector3.One, Vector3.Forward, Vector2.One);\n            var vertex3 = new VertexPositionNormalTexture(Vector3.One, Vector3.Backward, Vector2.One);\n            var vertex4 = new VertexPositionNormalTexture(Vector3.Forward, Vector3.Backward, Vector2.One);\n            var vertex5 = new VertexPositionNormalTexture(Vector3.Forward, Vector3.Backward, Vector2.Zero);\n\n            Assert.That(vertex1 == vertex2, Is.True);\n            Assert.That(vertex1 != vertex2, Is.False);\n            Assert.That(vertex1 == vertex3, Is.False);\n            Assert.That(vertex1 != vertex3, Is.True);\n            Assert.That(vertex1 == vertex4, Is.False);\n            Assert.That(vertex1 != vertex4, Is.True);\n            Assert.That(vertex4 == vertex5, Is.False);\n            Assert.That(vertex4 != vertex5, Is.True);\n            Assert.That(vertex1.Equals(vertex2), Is.True);\n            Assert.That(vertex1.Equals(vertex3), Is.False);\n            Assert.That(vertex1.Equals(vertex4), Is.False);\n            Assert.That(vertex4.Equals(vertex5), Is.False);\n        }\n\n        [Test]\n        public void TestVertexPositionTexture()\n        {\n            Assert.That(VertexPositionTexture.VertexDeclaration.VertexStride, Is.EqualTo(20));\n\n            var vertexElements = VertexPositionTexture.VertexDeclaration.GetVertexElements();\n            Assert.That(vertexElements, Has.Length.EqualTo(2));\n            Assert.That(vertexElements[0].Offset, Is.EqualTo(0));\n            Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3));\n            Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position));\n            Assert.That(vertexElements[1].Offset, Is.EqualTo(12));\n            Assert.That(vertexElements[1].UsageIndex, Is.EqualTo(0));\n            Assert.That(vertexElements[1].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector2));\n            Assert.That(vertexElements[1].VertexElementUsage, Is.EqualTo(VertexElementUsage.TextureCoordinate));\n\n            var vertex1 = new VertexPositionTexture(Vector3.One, Vector2.One);\n            var vertex2 = new VertexPositionTexture(Vector3.One, Vector2.One);\n            var vertex3 = new VertexPositionTexture(Vector3.One, Vector2.Zero);\n            var vertex4 = new VertexPositionTexture(Vector3.Zero, Vector2.Zero);\n\n            Assert.That(vertex1 == vertex2, Is.True);\n            Assert.That(vertex1 != vertex2, Is.False);\n            Assert.That(vertex1 == vertex3, Is.False);\n            Assert.That(vertex1 != vertex3, Is.True);\n            Assert.That(vertex1 == vertex4, Is.False);\n            Assert.That(vertex1 != vertex4, Is.True);\n            Assert.That(vertex3 == vertex4, Is.False);\n            Assert.That(vertex3 != vertex4, Is.True);\n            Assert.That(vertex1.Equals(vertex2), Is.True);\n            Assert.That(vertex1.Equals(vertex3), Is.False);\n            Assert.That(vertex1.Equals(vertex4), Is.False);\n            Assert.That(vertex3.Equals(vertex4), Is.False);\n        }\n    }\n}"
  },
  {
    "path": "Tests/Framework.Audio/DynamicSoundEffectInstanceTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Audio\n{\n    class DynamicSoundEffectInstanceTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            // Necessary to get audio initialised\n            FrameworkDispatcher.Update();\n        }\n\n        [Test]\n        public void BufferNeeded_DuringPlayback()\n        {\n            // XNA raises the event every time a buffer is consumed and there are less than two left.\n\n            using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono))\n            {\n                instance.BufferNeeded += BufferNeededEventHandler;\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.1f));\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.1f));\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.1f));\n\n                var previousEventCount = _bufferNeededEventCount;\n                instance.Play();\n                SleepWhileDispatching(350);\n                Assert.AreEqual(3, _bufferNeededEventCount - previousEventCount);\n\n                // The event is raised on the same thread as FrameworkDispatcher.Update() is called.\n                Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, _bufferNeededEventThread);\n            }\n        }\n\n        [Test]\n        public void BufferNeeded_MultipleConsumed()\n        {\n            // Both buffers should be consumed by the time the event routine is called by XNA.\n            // This test verifies that each consumed buffer raises its own event.\n\n            using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono))\n            {\n                instance.BufferNeeded += BufferNeededEventHandler;\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.05f));\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.05f));\n\n                var previousEventCount = _bufferNeededEventCount;\n                instance.Play();\n                \n                Thread.Sleep(125);\n                SleepWhileDispatching(10);\n\n                Assert.AreEqual(3, _bufferNeededEventCount - previousEventCount);\n            }\n        }\n\n        [Test]\n        public void BufferNeeded_MoreThanThree()\n        {\n            // No events are raised when a buffer is consumed and there are more than 3 buffers submitted.\n\n            using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono))\n            {\n                instance.BufferNeeded += BufferNeededEventHandler;\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.25f));\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.25f));\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.05f));\n                instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.05f));\n\n                var previousEventCount = _bufferNeededEventCount;\n                instance.Play();\n                \n                SleepWhileDispatching(300);\n\n                Assert.AreEqual(0, _bufferNeededEventCount - previousEventCount);\n            }\n        }\n\n        [Test]\n        public void BufferNeeded_Play_NoneSubmitted()\n        {\n            using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono))\n            {\n                instance.BufferNeeded += BufferNeededEventHandler;\n\n                var previousEventCount = _bufferNeededEventCount;\n                instance.Play();\n                SleepWhileDispatching(20);\n                Assert.AreEqual(1, _bufferNeededEventCount - previousEventCount);\n\n                // The event is raised on the same thread as FrameworkDispatcher.Update() is called.\n                Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, _bufferNeededEventThread);\n            }\n        }\n\n        [Test]\n        public void BufferNeeded_Play_AlreadySubmitted()\n        {\n            using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono))\n            {\n                instance.BufferNeeded += BufferNeededEventHandler;\n                instance.SubmitBuffer(GenerateSineWave(440, 8000, 1, 0.1f));\n\n                var previousEventCount = _bufferNeededEventCount;\n                instance.Play();\n                SleepWhileDispatching(20);\n                Assert.AreEqual(1, _bufferNeededEventCount - previousEventCount);\n            }\n        }\n\n        [Test]\n        public void BufferNeeded_Play_NoDispatcherCalled()\n        {\n            // No event is raised if FrameworkDispatcher.Update() is not called.\n\n            using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono))\n            {\n                instance.BufferNeeded += BufferNeededEventHandler;\n\n                var previousEventCount = _bufferNeededEventCount;\n                instance.Play();\n\n                Thread.Sleep(20);\n\n                Assert.AreEqual(0, _bufferNeededEventCount - previousEventCount);\n            }\n        }\n\n        static int _bufferNeededEventCount = 0;\n        static int _bufferNeededEventThread = 0;\n        private static void BufferNeededEventHandler(object sender, EventArgs e)\n        {\n            _bufferNeededEventCount++;\n            _bufferNeededEventThread = Thread.CurrentThread.ManagedThreadId;\n        }\n\n        [Test]\n        public void Ctor()\n        {\n            // Valid sample rates\n            var instance = new DynamicSoundEffectInstance(48000, AudioChannels.Stereo);\n            instance.Dispose();\n            instance = new DynamicSoundEffectInstance(8000, AudioChannels.Stereo);\n            instance.Dispose();\n\n            // Invalid sample rates\n            Assert.Throws<ArgumentOutOfRangeException>(() => { instance = new DynamicSoundEffectInstance(7999, AudioChannels.Stereo); });\n            if (instance != null) instance.Dispose();\n            Assert.Throws<ArgumentOutOfRangeException>(() => { instance = new DynamicSoundEffectInstance(48001, AudioChannels.Stereo); });\n            if (instance != null) instance.Dispose();\n\n            // Valid channel counts\n            instance = new DynamicSoundEffectInstance(44100, AudioChannels.Mono);\n            instance.Dispose();\n\n            instance = new DynamicSoundEffectInstance(44100, AudioChannels.Stereo);\n            instance.Dispose();\n\n            // Invalid channel count\n            Assert.Throws<ArgumentOutOfRangeException>(() => { instance = new DynamicSoundEffectInstance(44100, (AudioChannels)123); });\n            if (instance != null) instance.Dispose();\n\n        }\n\n        [Test]\n        public void GetSampleDuration()\n        {\n            var monoInstance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono);\n            var stereoInstance = new DynamicSoundEffectInstance(24000, AudioChannels.Stereo);\n\n            // Zero length\n            Assert.AreEqual(0, (int)monoInstance.GetSampleDuration(0).TotalMilliseconds / 10);\n            Assert.AreEqual(0, (int)stereoInstance.GetSampleDuration(0).TotalMilliseconds / 10);\n\n            // Nonzero length\n            Assert.AreNotEqual(0, monoInstance.GetSampleDuration(16000).Ticks);\n            Assert.AreNotEqual(0, stereoInstance.GetSampleDuration(96000).Ticks);\n\n            // Length not aligned with format\n            Assert.AreEqual(1, (int)stereoInstance.GetSampleDuration(97).TotalMilliseconds);\n\n            // Negative length\n            Assert.Throws<ArgumentException>(() => { monoInstance.GetSampleDuration(-1); });\n\n            // Disposed\n            monoInstance.Dispose();\n            Assert.Throws<ObjectDisposedException>(() => { monoInstance.GetSampleDuration(0); });\n\n            stereoInstance.Dispose();\n        }\n\n        [Test]\n        public void GetSampleSizeInBytes()\n        {\n            var monoInstance = new DynamicSoundEffectInstance(48000, AudioChannels.Mono);\n            var stereoInstance = new DynamicSoundEffectInstance(22050, AudioChannels.Stereo);\n\n            // Zero length\n            Assert.AreEqual(0, monoInstance.GetSampleSizeInBytes(TimeSpan.Zero));\n            Assert.AreEqual(0, stereoInstance.GetSampleSizeInBytes(TimeSpan.Zero));\n\n            // Nonzero length\n            Assert.AreEqual(96000, monoInstance.GetSampleSizeInBytes(TimeSpan.FromSeconds(1)));\n            Assert.AreEqual(88200, stereoInstance.GetSampleSizeInBytes(TimeSpan.FromSeconds(1)));\n\n            // Negative length\n            Assert.Throws<ArgumentOutOfRangeException>(() => { monoInstance.GetSampleSizeInBytes(TimeSpan.FromSeconds(-1)); });\n\n            // Disposed\n            monoInstance.Dispose();\n            Assert.Throws<ObjectDisposedException>(() => { monoInstance.GetSampleSizeInBytes(TimeSpan.Zero); });\n\n            stereoInstance.Dispose();\n        }\n\n        [Test]\n        public void IsLooped()\n        {\n            var instance = new DynamicSoundEffectInstance(24000, AudioChannels.Mono);\n\n            // Always returns false and cannot be set true\n            Assert.IsFalse(instance.IsLooped);\n            instance.IsLooped = false; // Setting it to false does not throw, however\n            Assert.Throws<InvalidOperationException>(() => { instance.IsLooped = true; });\n\n            instance.Dispose();\n            Assert.Throws<ObjectDisposedException>(() => { instance.IsLooped = false; });\n        }\n\n        [Test]\n        public void PendingBufferCount()\n        {\n            var instance = new DynamicSoundEffectInstance(44100, AudioChannels.Stereo);\n            Assert.AreEqual(0, instance.PendingBufferCount);\n\n            instance.SubmitBuffer(GenerateSineWave(440, 44100, 2, 1.0f));\n            Assert.AreEqual(1, instance.PendingBufferCount);\n\n            instance.Play();\n            SleepWhileDispatching(1050); // Give it time to finish\n            Assert.AreEqual(0, instance.PendingBufferCount);\n\n            // Throws ObjectDisposedException\n            instance.Dispose();\n            Assert.Throws<ObjectDisposedException>(() => { var a = instance.PendingBufferCount; });\n        }\n\n        [Test]\n        public void Playback()\n        {\n            using (var instance = new DynamicSoundEffectInstance(48000, AudioChannels.Mono))\n            {\n                // Initially, the playback is stopped\n                Assert.AreEqual(SoundState.Stopped, instance.State);\n\n                // Submitting a buffer will not change the state\n                instance.SubmitBuffer(GenerateSineWave(440, 48000, 1, 0.5f));\n                Assert.AreEqual(SoundState.Stopped, instance.State);\n\n                // Start playing\n                instance.Play();\n                Assert.AreEqual(SoundState.Playing, instance.State);\n\n                // While still playing, pause the playback\n                SleepWhileDispatching(300);\n                instance.Pause();\n                Assert.AreEqual(SoundState.Paused, instance.State);\n\n                // Let it continue and run out of buffers\n                instance.Resume();\n                SleepWhileDispatching(300);\n                Assert.AreEqual(0, instance.PendingBufferCount);\n                Assert.AreEqual(SoundState.Playing, instance.State);\n\n                // Submit a buffer and the playback should continue\n                instance.SubmitBuffer(GenerateSineWave(466, 48000, 1, 1.0f));\n                Assert.AreEqual(SoundState.Playing, instance.State);\n                SleepWhileDispatching(500);\n\n                // Stop immediately\n                Assert.AreEqual(SoundState.Playing, instance.State);\n                instance.Stop();\n                SleepWhileDispatching(10); // XNA does not stop it until FrameworkDispatcher.Update is called\n                Assert.AreEqual(SoundState.Stopped, instance.State);\n\n                // And then resume\n                instance.Resume();\n                Assert.AreEqual(SoundState.Playing, instance.State);\n            }\n        }\n\n        [Test]\n        public void Playback_Exceptions()\n        {\n            var instance = new DynamicSoundEffectInstance(16000, AudioChannels.Mono);\n\n            instance.Dispose();\n            Assert.Throws<ObjectDisposedException>(() => { instance.Play(); });\n            Assert.Throws<ObjectDisposedException>(() => { instance.Pause(); });\n            Assert.Throws<ObjectDisposedException>(() => { instance.Resume(); });\n            Assert.Throws<ObjectDisposedException>(() => { instance.Stop(); });\n            Assert.Throws<ObjectDisposedException>(() => { instance.Stop(false); });\n            Assert.Throws<ObjectDisposedException>(() => { instance.SubmitBuffer(new byte[0]); });\n        }\n\n        [Test]\n        public void Stop_False()\n        {\n            // Calling Stop(false) has no effect\n\n            using (var instance = new DynamicSoundEffectInstance(12000, AudioChannels.Mono))\n            {\n                instance.Play();\n                Assert.AreEqual(SoundState.Playing, instance.State);\n\n                instance.Stop(false);\n                SleepWhileDispatching(20);\n                Assert.AreEqual(SoundState.Playing, instance.State);\n            }\n        }\n\n        [Test]\n        public void Stop_RemovesBuffers()\n        {\n            using (var instance = new DynamicSoundEffectInstance(12000, AudioChannels.Mono))\n            {\n                instance.SubmitBuffer(GenerateSineWave(440, 12000, 1, 0.1f));\n                instance.SubmitBuffer(GenerateSineWave(440, 12000, 1, 0.1f));\n                instance.SubmitBuffer(GenerateSineWave(440, 12000, 1, 0.1f));\n                Assert.AreEqual(3, instance.PendingBufferCount);\n                \n                instance.Stop();\n                SleepWhileDispatching(20);\n                Assert.AreEqual(0, instance.PendingBufferCount);\n            }\n        }\n\n        [Test]\n        public void SubmitBuffer_ParameterValidation_SimpleOverload()\n        {\n            using (var instance = new DynamicSoundEffectInstance(16000, AudioChannels.Stereo))\n            {\n                // Null or empty buffer - with different null behavior to the other overload\n                Assert.Throws<NullReferenceException>(() => { instance.SubmitBuffer(null); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(new byte[0]); });\n\n                // Invalid alignment\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(new byte[1]); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(new byte[2]); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(new byte[3]); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(new byte[13]); });\n\n                // Correct alignment and size\n                instance.SubmitBuffer(GenerateSineWave(440, 16000, 2, 0.1f));\n            }\n        }\n\n        [Test]\n        public void SubmitBuffer_ParameterValidation_ComplexOverload()\n        {\n            using (var instance = new DynamicSoundEffectInstance(16000, AudioChannels.Stereo))\n            {\n                // Null or empty buffer - with different null behavior to the other overload\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(null, 0, 4); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(new byte[0], 0, 4); });\n\n                var buffer = GenerateSineWave(440, 16000, 2, 0.5f);\n\n                // Correct alignment\n                instance.SubmitBuffer(buffer, 0, 4); // One sample per channel\n                instance.SubmitBuffer(buffer, 1000, 1000); // 250 samples\n\n                // Invalid alignment\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(buffer, 0, 3); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(buffer, 1, 4); }); // Unaligned start position also throws\n\n                // Invalid size\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(buffer, 0, 0); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(buffer, 0, -1); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(buffer, 0, buffer.Length + 1); });\n                Assert.Throws<ArgumentException>(() => { instance.SubmitBuffer(buffer, buffer.Length - 4, 8); });\n            }\n        }\n\n        [Test]\n        public void SubmitBuffer_ShouldNotThrowOnStrangeOffset()\n        {\n            using (var instance = new DynamicSoundEffectInstance(16000, AudioChannels.Stereo))\n            {\n                var buffer = GenerateSineWave(440, 16000, 2, 0.5f);\n\n                Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 0, 8); });\n                Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 8, 8); });\n                Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 16, 8); });\n                Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 24, 8); });\n                Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 3200, 8); });\n                Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 8000, 8); });\n            }\n        }\n\n        /// <summary>\n        /// Sleeps for the specified amount of time while calling FrameworkDispatcher.Update() every 10 ms.\n        /// </summary>\n        private static void SleepWhileDispatching(int ms)\n        {\n            int cycles = ms / 10;\n            for (int i = 0; i < cycles; i++)\n            {\n                FrameworkDispatcher.Update();\n                Thread.Sleep(10);\n            }\n        }\n\n        /// <summary>\n        /// Generates a audio buffer filled with a single frequency sine wave.\n        /// </summary>\n        /// <param name=\"frequency\">Frequency in Hz.</param>\n        /// <param name=\"sampleRate\">Samples per second.</param>\n        /// <param name=\"channelCount\">Number of channels.</param>\n        /// <param name=\"length\">Length in seconds.</param>\n        /// <returns>An audio buffer of sufficient size, filled with sine wave.</returns>\n        private static byte[] GenerateSineWave(float frequency, int sampleRate, int channelCount, float length)\n        {\n            var sampleCount = (int)(sampleRate * length);\n            var samples = new short[sampleCount * channelCount];\n            var onePerSampleRate = 1.0f / sampleRate;\n\n            for (int i = 0; i < sampleCount; i++)\n            {\n                var sample = Math.Sin(2 * Math.PI * frequency * onePerSampleRate * i) * 0.2;\n                var sampleAsShort = (short)(sample * short.MaxValue);\n\n                // Fill each channel\n                for (int channel = 0; channel < channelCount; channel++)\n                    samples[i * channelCount + channel] = sampleAsShort;\n            }\n\n            var byteArray = new byte[samples.Length * 2];\n            for (int i = 0; i < samples.Length; i++)\n            {\n                var bytes = BitConverter.GetBytes(samples[i]);\n                byteArray[i * 2] = bytes[0];\n                byteArray[i * 2 + 1] = bytes[1];\n            }\n\n            return byteArray;\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Audio/SoundEffectInstanceTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing System.Threading;\n\nnamespace Kni.Tests.Audio\n{\n    class SoundEffectInstanceTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            // Necessary to get audio initialised\n            FrameworkDispatcher.Update();\n        }\n\n        /// <summary>\n        /// Unit test for issue #7372 where the Sound effects instance does not play after Play()\n        /// is called after calling Pause(), Stop().\n        /// </summary>\n        [Test]\n        public void SoundEffectPauseStopPlay()\n        {\n\n            var se = new SoundEffect(new byte[16000], 8000, AudioChannels.Mono);\n            \n            using (var instance = se.CreateInstance())\n            {\n                instance.IsLooped = true; //ensures that the sound effect does not stop unless Stop() is called.\n\n                //Test Initial State\n                Assert.AreEqual(SoundState.Stopped, instance.State);\n\n                //Test calling pause multiple times\n                instance.Play();\n                Assert.AreEqual(SoundState.Playing, instance.State);\n                instance.Pause();\n                Assert.AreEqual(SoundState.Paused, instance.State);\n                instance.Stop();\n                SleepWhileDispatching(10);// XNA Requires Dispatcher to be updated\n                Assert.AreEqual(SoundState.Stopped, instance.State);\n                instance.Play();\n                Assert.AreEqual(SoundState.Playing, instance.State);\n                instance.Pause();\n                Assert.AreEqual(SoundState.Paused, instance.State);\n            }\n        }\n\n\n        private static void SleepWhileDispatching(int ms)\n        {\n            int cycles = ms / 10;\n            for (int i = 0; i < cycles; i++)\n            {\n                FrameworkDispatcher.Update();\n                Thread.Sleep(10);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Audio/SoundEffectTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Audio\n{\n    public class SoundEffectTests\n    {\n        [SetUp]\n        public void Setup()\n        {\n            // Necessary to get audio initialised\n            FrameworkDispatcher.Update();\n        }\n\n        [Test]\n        public void Statics()\n        {\n            // NOTE: These can break if someone has changed them in\n            // a prior test.  We just hope no one else messes with these.\n            Assert.AreEqual(1.0f, SoundEffect.DistanceScale);\n            Assert.AreEqual(1.0f, SoundEffect.DopplerScale);\n            Assert.AreEqual(1.0f, SoundEffect.MasterVolume);\n            Assert.AreEqual(343.5f, SoundEffect.SpeedOfSound);\n\n            // TODO: Add some range tests.\n        }\n\n#if !XNA\n        [Test]\n        public void GetSampleDuration()\n        {\n            // Test sizeInBytes range.\n            Assert.Throws<ArgumentException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(-1, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(1, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(3, 8000, AudioChannels.Mono));\n            \n            // Test sampleRate range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, -1, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 0, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000-1, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 48000, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 48000 + 1, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, int.MaxValue, AudioChannels.Mono));\n\n            // Test channel range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, (AudioChannels)(-1)));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, (AudioChannels)0));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, (AudioChannels)3));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, (AudioChannels)int.MaxValue));\n\n            // Test for zero duration.\n            Assert.AreEqual(TimeSpan.Zero, Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(0, 8000, AudioChannels.Mono));\n            Assert.AreEqual(TimeSpan.Zero, Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(0, 48000, AudioChannels.Mono));\n            Assert.AreEqual(TimeSpan.Zero, Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(0, 8000, AudioChannels.Stereo));\n            Assert.AreEqual(TimeSpan.Zero, Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(0, 48000, AudioChannels.Stereo));\n\n            // Test for one second.\n            Assert.AreEqual(TimeSpan.FromSeconds(1), Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(16000, 8000, AudioChannels.Mono));\n            Assert.AreEqual(TimeSpan.FromSeconds(1), Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(96000, 48000, AudioChannels.Mono));\n            Assert.AreEqual(TimeSpan.FromSeconds(1), Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(32000, 8000, AudioChannels.Stereo));\n            Assert.AreEqual(TimeSpan.FromSeconds(1), Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(192000, 48000, AudioChannels.Stereo));\n        }\n\n        [Test]\n        public void GetSampleSizeInBytes()\n        {\n            // Test duration range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.MinValue, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromMilliseconds(0x7FFFFFF), 8000, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromMilliseconds(0x7FFFFFF + 1), 8000, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.MaxValue, 8000, AudioChannels.Mono));\n\n            // Test sampleRate range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, -1, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 0, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000 - 1, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 48000, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 48000 + 1, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, int.MaxValue, AudioChannels.Mono));\n\n            // Test channel range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, (AudioChannels)(-1)));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, (AudioChannels)0));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, (AudioChannels)3));\n            Assert.Throws<ArgumentOutOfRangeException>(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, (AudioChannels)int.MaxValue));\n\n            // Test for zero duration.\n            Assert.AreEqual(0, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Mono));\n            Assert.AreEqual(0, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 48000, AudioChannels.Mono));\n            Assert.AreEqual(0, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Stereo));\n            Assert.AreEqual(0, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 48000, AudioChannels.Stereo));\n\n            // Test for one second.\n            Assert.AreEqual(16000, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromSeconds(1), 8000, AudioChannels.Mono));\n            Assert.AreEqual(96000, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromSeconds(1), 48000, AudioChannels.Mono));\n            Assert.AreEqual(32000, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromSeconds(1), 8000, AudioChannels.Stereo));\n            Assert.AreEqual(192000, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromSeconds(1), 48000, AudioChannels.Stereo));\n        }\n#endif\n\n        [Test]\n        public void Ctor1()\n        {\n            // Test buffer mono.\n            Assert.Throws<ArgumentException>(() => new SoundEffect(null, 8000, AudioChannels.Mono));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[0], 8000, AudioChannels.Mono));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[1], 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 8000, AudioChannels.Mono));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[3], 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 8000, AudioChannels.Mono));\n\n            // Test buffer sterio.\n            Assert.Throws<ArgumentException>(() => new SoundEffect(null, 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[0], 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[1], 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[3], 8000, AudioChannels.Stereo));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[5], 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[6], 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[7], 8000, AudioChannels.Stereo));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[8], 8000, AudioChannels.Stereo));\n\n            // Test sampleRate range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], -1, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 48000, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 48000 + 1, AudioChannels.Mono));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], int.MaxValue, AudioChannels.Mono));\n\n            // Test channel range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 8000, (AudioChannels)(-1)));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 8000, (AudioChannels)0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 8000, AudioChannels.Mono));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 8000, AudioChannels.Stereo));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 8000, (AudioChannels)3));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 8000, (AudioChannels)int.MaxValue));\n\n            // Test the duration mono.\n            {\n                var s = new SoundEffect(new byte[2], 8000, AudioChannels.Mono);\n                Assert.AreEqual(0, (int)s.Duration.TotalMilliseconds / 10);\n                s.Dispose();\n                s = new SoundEffect(new byte[16000], 8000, AudioChannels.Mono);\n                Assert.AreEqual(TimeSpan.FromSeconds(1), s.Duration);\n                s.Dispose();\n                s = new SoundEffect(new byte[2], 48000, AudioChannels.Mono);\n                Assert.AreEqual(0, (int)s.Duration.TotalMilliseconds / 10);\n                s.Dispose();\n                s = new SoundEffect(new byte[96000], 48000, AudioChannels.Mono);\n                Assert.AreEqual(TimeSpan.FromSeconds(1), s.Duration);\n                s.Dispose();\n            }\n\n            // Test the duration stereo.\n            {\n                var s = new SoundEffect(new byte[4], 8000, AudioChannels.Stereo);\n                Assert.AreEqual(0, (int)s.Duration.TotalMilliseconds / 10);\n                s.Dispose();\n                s = new SoundEffect(new byte[32000], 8000, AudioChannels.Stereo);\n                Assert.AreEqual(TimeSpan.FromSeconds(1), s.Duration);\n                s.Dispose();\n                s = new SoundEffect(new byte[4], 48000, AudioChannels.Stereo);\n                Assert.AreEqual(0, (int)s.Duration.TotalMilliseconds / 10);\n                s.Dispose();\n                s = new SoundEffect(new byte[192000], 48000, AudioChannels.Stereo);\n                Assert.AreEqual(TimeSpan.FromSeconds(1), s.Duration);\n                s.Dispose();\n            }\n\n            // Test misc state.\n            {\n                var s = new SoundEffect(new byte[2], 8000, AudioChannels.Mono);\n                Assert.AreEqual(string.Empty, s.Name);\n                Assert.AreEqual(false, s.IsDisposed);\n                s.Dispose();\n                Assert.AreEqual(true, s.IsDisposed);\n            }\n        }\n\n        [Test]\n        public void Ctor2()\n        {\n            // Test buffer mono.\n            Assert.Throws<ArgumentException>(() => new SoundEffect(null, 0, 0, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[0], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[1], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[3], 0, 4, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 0, 4, 8000, AudioChannels.Mono, 0, 0));\n\n            // Test buffer stereo.\n            Assert.Throws<ArgumentException>(() => new SoundEffect(null, 0, 0, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[0], 0, 4, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[1], 0, 4, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 4, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[3], 0, 4, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 0, 4, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[5], 0, 8, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[6], 0, 8, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[7], 0, 8, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[8], 0, 8, 8000, AudioChannels.Stereo, 0, 0));\n\n            // Test offset.\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], int.MinValue, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], -1, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 1, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 2, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 3, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], int.MaxValue, 2, 8000, AudioChannels.Mono, 0, 0));\n\n            // Test count.\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, int.MinValue, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, -1, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 0, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 1, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 3, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 2, 2, 8000, AudioChannels.Mono, 0, 0));\n\n            // XNA seems to not allow misaligned offsets even when\n            // the data is within range of the buffer. We go ahead\n            // and allow this in KNI.\n#if XNA\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[4], 1, 2, 8000, AudioChannels.Mono, 0, 0));\n#else\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 1, 2, 8000, AudioChannels.Mono, 0, 0));\n#endif\n\n            // Test sampleRate range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, 2, -1, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, 2, 0, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 48000, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, 2, 48000 + 1, AudioChannels.Mono, 0, 0));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, 2, int.MaxValue, AudioChannels.Mono, 0, 0));\n\n            // Test channel range.\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, 2, 8000, (AudioChannels)(-1), 0, 0));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, 2, 8000, (AudioChannels)0, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 0, 4, 8000, AudioChannels.Stereo, 0, 0));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, 2, 8000, (AudioChannels)3, 0, 0));\n            Assert.Throws<ArgumentOutOfRangeException>(() => new SoundEffect(new byte[2], 0, 2, 8000, (AudioChannels)int.MaxValue, 0, 0));\n\n            // Test loop start.\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, int.MinValue, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, -1, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 1, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 2, 0));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, int.MaxValue, 0));\n\n            // Test loop end.\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, int.MinValue));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, -1));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0));\n            Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 1));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 2));\n            Assert.Throws<ArgumentException>(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, int.MaxValue));\n        }\n\n        [Test, Ignore(\"creating/disposing a Game should not create/dispose the master voice\")]\n        public void InstanceNotDisposedWhenGameDisposed()\n        {\n            var game = new Game();\n\n            var se = new SoundEffect(new byte[16000], 8000, AudioChannels.Mono);\n            var s = se.CreateInstance();\n            var d = new DynamicSoundEffectInstance(44100, AudioChannels.Stereo);\n\n            game.Dispose();\n\n            Assert.IsFalse(s.IsDisposed);\n            Assert.IsFalse(d.IsDisposed);\n\n            s.Dispose();\n            d.Dispose();\n        }\n\n        private byte[] LoadRiff(string filename, out int sampleRate, out AudioChannels channels)\n        {\n            using (var stream = File.OpenRead(filename))\n            using (var reader = new BinaryReader(stream))\n            {\n                var signature = new string(reader.ReadChars(4));\n                if (signature != \"RIFF\")\n                    throw new Exception(\"Missing RIFF header!\");\n\n                reader.ReadInt32(); // riff_chunck_size\n\n                var wformat = new string(reader.ReadChars(4));\n                if (wformat != \"WAVE\")\n                    throw new Exception(\"Not WAVE format!\");\n\n                // Look for the format chunk.\n                while (true)\n                {\n                    var chunkSignature = new string(reader.ReadChars(4));\n                    if (chunkSignature.ToLowerInvariant() == \"fmt \")\n                        break;\n                    reader.BaseStream.Seek(reader.ReadInt32(), SeekOrigin.Current);\n                }\n\n                // Read the format header.\n                var headerSize = reader.ReadInt32();\n                var header = reader.ReadBytes(headerSize);\n\n                channels = (AudioChannels)BitConverter.ToInt16(header, 2);\n                sampleRate = BitConverter.ToInt32(header, 4);\n\n                // Look for the data chunk.\n                while (true)\n                {\n                    var chunkSignature = new string(reader.ReadChars(4));\n                    if (chunkSignature.ToLowerInvariant() == \"data\")\n                        break;\n                    reader.BaseStream.Seek(reader.ReadInt32(), SeekOrigin.Current);\n                }\n\n                var dataSize = reader.ReadInt32();\n                return reader.ReadBytes(dataSize);\n            }\n        }\n\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", 7165)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", 7165)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", 7165)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", 7940)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", 7940)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", 7940)]\n        public void LoadCtor1_16Bit(string filename, int milliseconds)\n        {\n            int sampleRate; AudioChannels channels;\n            var data = LoadRiff(filename, out sampleRate, out channels);\n            var sound = new SoundEffect(data, sampleRate, channels);\n            Assert.AreEqual(milliseconds / 10, (int)sound.Duration.TotalMilliseconds / 10);\n        }\n\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\")]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\")]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\")]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz_8bit.wav\")]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz_8bit.wav\")]\n        public void LoadCtor1_8Bit_Throws(string filename)\n        {\n            int sampleRate; AudioChannels channels;\n            var data = LoadRiff(filename, out sampleRate, out channels);\n            Assert.Throws<ArgumentException >(() => new SoundEffect(data, sampleRate, channels));\n        }\n\n        // These 8bit PCMs pass although the SoundEffect constructors although\n        // they don't support 8bit PCM.  This is because it is interpreting it\n        // as 16bit and generating a bad sound... hence half the duration.\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_44hz_8bit.wav\", 7940)]\n        public void LoadCtor1_8Bit_BadDuration(string filename, int milliseconds)\n        {\n            int sampleRate; AudioChannels channels;\n            var data = LoadRiff(filename, out sampleRate, out channels);\n            var sound = new SoundEffect(data, sampleRate, channels);\n            Assert.AreEqual(milliseconds / 20, (int)sound.Duration.TotalMilliseconds / 10);\n        }\n\n        // MSADPCM data can be passed into the constructors, but\n        // it calculates and incorrect duration and plays static.\n        [TestCase(@\"Assets/Audio/blast_mono_44hz_adpcm_ms.wav\", 1811)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz_adpcm_ms.wav\", 1811)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz_adpcm_ms.wav\", 1811)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_44hz_adpcm_ms.wav\", 2014)]\n        public void LoadCtor1_MsAdpcm_BadDuration(string filename, int milliseconds)\n        {\n            int sampleRate; AudioChannels channels;\n            var data = LoadRiff(filename, out sampleRate, out channels);\n            var sound = new SoundEffect(data, sampleRate, channels);\n            Assert.AreEqual(milliseconds / 10, (int)sound.Duration.TotalMilliseconds / 10);\n        }\n\n        [Test]\n        public void FromStream_NotNull()\n        {\n            Assert.Throws<ArgumentNullException>(() => SoundEffect.FromStream(null));\n        }\n\n        [TestCase(@\"Assets/Audio/blast_mono.wav\", 7165)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz.wav\", 7165)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz.wav\", 7165)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo.wav\", 7940)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz.wav\", 7940)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz.wav\", 7940)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_44hz_8bit.wav\", 7940)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_22hz_8bit.wav\", 7940)]\n        [TestCase(@\"Assets/Audio/rock_loop_stereo_11hz_8bit.wav\", 7940)]\n        [TestCase(@\"Assets/Audio/bark_mono_44hz_8bit.wav\", 1612)]\n        [TestCase(@\"Assets/Audio/bark_mono_22hz_8bit.wav\", 1612)]\n        [TestCase(@\"Assets/Audio/bark_mono_11hz_8bit.wav\", 1612)]\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_8bit.wav\", 500)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_8bit.wav\", 500)]\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_16bit.wav\", 500)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_16bit.wav\", 500)]\n#if !XNA\n        // XNA does not support 24-bit, 32-bit float, MS-ADPCM or IMA/ADPCM in SoundEffect.FromStream, but KNI does.\n#if WINDOWSDX\n        [TestCase(@\"Assets/Audio/blast_mono_44hz_adpcm_ms.wav\", 7202)]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz_adpcm_ms.wav\", 7202)]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz_adpcm_ms.wav\", 7202)]\n#else\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_imaadpcm.wav\", 556)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_imaadpcm.wav\", 509)]\n#endif\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_msadpcm.wav\", 508)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_msadpcm.wav\", 505)]\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_float.wav\", 500)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_float.wav\", 500)]\n        [TestCase(@\"Assets/Audio/tone_mono_44khz_24bit.wav\", 500)]\n        [TestCase(@\"Assets/Audio/tone_stereo_44khz_24bit.wav\", 500)]\n#endif\n        public void SoundEffectFromStream_Supported_Formats(string filename, long milliseconds)\n        {\n            using (var stream = File.OpenRead(filename))\n            {\n                var sound = SoundEffect.FromStream(stream);\n                Assert.AreEqual(milliseconds / 10, (int)sound.Duration.TotalMilliseconds / 10);\n            }\n        }\n\n#if XNA\n        // KNI now supports loading ADPCM through SoundEffect.FromStream()\n        [TestCase(@\"Assets/Audio/blast_mono_44hz_adpcm_ms.wav\")]\n        [TestCase(@\"Assets/Audio/blast_mono_22hz_adpcm_ms.wav\")]\n        [TestCase(@\"Assets/Audio/blast_mono_11hz_adpcm_ms.wav\")]\n        public void SoundEffectFromStream_Unsupported_Formats(string filename)\n        {\n            using (var stream = File.OpenRead(filename))\n                Assert.Throws<ArgumentException>(() => SoundEffect.FromStream(stream));\n        }\n#endif\n\n        // Proxy for the content manager used in SoundEffectFromContent\n        class GraphicsDeviceProxy : IGraphicsDeviceService\n        {\n            public GraphicsDevice GraphicsDevice\n            {\n                get { return null; }\n            }\n\n            public event EventHandler<EventArgs> DeviceCreated;\n\n            public event EventHandler<EventArgs> DeviceDisposing;\n\n            public event EventHandler<EventArgs> DeviceReset;\n\n            public event EventHandler<EventArgs> DeviceResetting;\n        }\n\n        class ContentManagerProxy : ContentManager\n        {\n            public ContentManagerProxy(IServiceProvider services): base(services) {}\n\n            protected override Stream OpenStream(string assetName)\n            {\n                var fileName = Path.Combine(RootDirectory, assetName + \".xnb\");\n                if (File.Exists(fileName))\n                    return new FileStream(fileName, FileMode.Open, FileAccess.Read);\n                return base.OpenStream(assetName);\n            }\n        }\n\n        [TestCase(\"tone_mono_44khz_8bit\", 5000000)]\n        [TestCase(\"tone_stereo_44khz_8bit\", 5000000)]\n        [TestCase(\"tone_mono_44khz_16bit\", 5000000)]\n        [TestCase(\"tone_stereo_44khz_16bit\", 5000000)]\n#if !XNA\n        // XNA does not support 32-bit float, MS-ADPCM or IMA/ADPCM in SoundEffect.FromStream, but KNI does.\n#if !WINDOWSDX\n        [TestCase(\"tone_mono_44khz_imaadpcm\", 6010000)]\n        [TestCase(\"tone_stereo_44khz_imaadpcm\", 5300000)]\n#endif\n        [TestCase(\"tone_mono_44khz_float\", 5000000)]\n        [TestCase(\"tone_stereo_44khz_float\", 5000000)]\n        // XNA cannot seem to load our MS-ADPCM XNBs.\n        [TestCase(\"tone_mono_44khz_msadpcm\", 5070000)]\n        [TestCase(\"tone_stereo_44khz_msadpcm\", 5040000)]\n#endif\n        public void SoundEffectFromContent(string filename, long durationTicks)\n        {\n            var services = new GameServiceContainer();\n            services.AddService<IGraphicsDeviceService>(new GraphicsDeviceProxy());\n            var content = new ContentManagerProxy(services);\n            var soundEffect = content.Load<SoundEffect>(Paths.Audio(filename));\n            Assert.AreEqual(durationTicks, soundEffect.Duration.Ticks);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Audio/XAudio/SoundEffectInstanceXAudioTest.cs",
    "content": "﻿using Microsoft.Xna.Framework.Audio;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Audio\n{\n    // Tests specific to SoundEffectInstance.XAudio (Windows DirectX)\n    public class SoundEffectInstanceXAudioTest\n    {\n        // Mono source\n        [TestCase( 0f, 1f, 1, 1f, 1f)]\n        [TestCase(-1f, 1f, 1, 1f, 0f)]\n        [TestCase( 1f, 1f, 1, 0f, 1f)]\n        [TestCase(-0.75f, 1f, 1, 1f, 0.25f)]\n        [TestCase( 0.75f, 1f, 1, 0.25f, 1f)]\n        [TestCase( 0f, 0.75f, 1, 0.75f, 0.75f)]\n        // Mono source, scaled\n        [TestCase(0f, 0.75f, 1, 0.75f, 0.75f)]\n        [TestCase(-1f, 0.75f, 1, 0.75f, 0f)]\n        [TestCase( 1f, 0.75f, 1, 0f, 0.75f)]\n        // Stereo source\n        [TestCase(0f, 1f, 2, 1f, 0f, 0f, 1f)]\n        [TestCase(-1f, 1f, 2, 0.5f, 0.5f, 0f, 0f)]\n        [TestCase(1f, 1f, 2, 0f, 0f, 0.5f, 0.5f)]\n        [TestCase(-0.5f, 1f, 2, 0.75f, 0.25f, 0f, 0.5f)]\n        [TestCase(0.5f, 1f, 2, 0.5f, 0f, 0.25f, 0.75f)]\n        [TestCase(-0.75f, 1f, 2, 0.625f, 0.375f, 0f, 0.25f)]\n        [TestCase(0.75f, 1f, 2, 0.25f, 0f, 0.375f, 0.625f)]\n        // Stereo source, scaled\n        [TestCase(0f, 0.75f, 2, 0.75f, 0f, 0f, 0.75f)]\n        [TestCase(-1f, 0.75f, 2, 0.375f, 0.375f, 0f, 0f)]\n        [TestCase(1f, 0.75f, 2, 0f, 0f, 0.375f, 0.375f)]\n        public void CalculateOutputMatrixReturnsExpectedResults(\n            float pan, float scale, int inputChannels,\n            params float[] expectedValues)\n        {\n            var outputMatrix = Microsoft.Xna.Platform.Audio.ConcreteSoundEffectInstance.CalculateOutputMatrix(pan, scale, inputChannels);\n\n            for (int i = 0; i < expectedValues.Length; i++)\n                Assert.AreEqual(expectedValues[i], outputMatrix[i], \"Channel#\" + i);\n\n            // the remaining values should be 0\n            for (int i = expectedValues.Length; i < outputMatrix.Length; i++)\n                Assert.AreEqual(0f, outputMatrix[i], \"Channel#\" + i);\n        }\n    }\n}"
  },
  {
    "path": "Tests/Framework.Audio/XactTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing Microsoft.Xna.Framework.Audio;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework;\n\nnamespace Kni.Tests.Audio\n{\n    [TestFixture]\n    public class XactTests\n    {\n        private AudioEngine _audioEngine;\n        private SoundBank _soundBank;\n        private WaveBank _waveBank;\n\n        [SetUp]\n        public void Setup()\n        {\n            // Necessary to get audio initialised\n            FrameworkDispatcher.Update();\n            _audioEngine = new AudioEngine(@\"Assets\\Audio\\Win\\Tests.xgs\");\n            _waveBank = new WaveBank(_audioEngine, @\"Assets\\Audio\\Win\\Tests.xwb\");\n            _soundBank = new SoundBank(_audioEngine, @\"Assets\\Audio\\Win\\Tests.xsb\");\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            _soundBank.Dispose();\n            _waveBank.Dispose();\n            _audioEngine.Dispose();\n        }\n\n        [Test]\n        public static void AudioEngineCtor()\n        {\n            Assert.Throws<ArgumentNullException>(() => new AudioEngine(null));\n            Assert.Throws<ArgumentNullException>(() => new AudioEngine(\"\"));\n            //Assert.Throws<DirectoryNotFoundException>(() => new AudioEngine(@\"This\\Does\\Not\\Exist.xgs\"));\n            Assert.Throws<FileNotFoundException>(() => new AudioEngine(@\"Assets\\Audio\\Win\\NotTheFile.xgs\"));\n\n            var audioEngine = new AudioEngine(@\"Assets\\Audio\\Win\\Tests.xgs\");\n            Assert.False(audioEngine.IsDisposed);\n            audioEngine.Dispose();\n            Assert.True(audioEngine.IsDisposed);\n        }\n\n        [Test]\n        public void WaveBankCtor()\n        {\n            Assert.Throws<ArgumentNullException>(() => new WaveBank(null, null));\n            Assert.Throws<ArgumentNullException>(() => new WaveBank(_audioEngine, null));\n            Assert.Throws<ArgumentNullException>(() => new WaveBank(_audioEngine, \"\"));\n            //Assert.Throws<DirectoryNotFoundException>(() => new WaveBank(_audioEngine, @\"This\\Does\\Not\\Exist.xwb\"));\n            Assert.Throws<FileNotFoundException>(() => new WaveBank(_audioEngine, @\"Assets\\Audio\\Win\\NotTheFile.xwb\"));\n\n            var waveBank = new WaveBank(_audioEngine, @\"Assets\\Audio\\Win\\Tests.xwb\");\n            Assert.False(waveBank.IsInUse);\n            Assert.False(waveBank.IsDisposed);\n            Assert.True(waveBank.IsPrepared);\n\n            waveBank.Dispose();\n            Assert.True(waveBank.IsDisposed);\n            Assert.False(waveBank.IsInUse);\n            Assert.False(waveBank.IsPrepared);\n        }\n\n        [Test]\n        public void SoundBankCtor()\n        {\n            Assert.Throws<ArgumentNullException>(() => new SoundBank(null, null));\n            Assert.Throws<ArgumentNullException>(() => new SoundBank(_audioEngine, null));\n            Assert.Throws<ArgumentNullException>(() => new SoundBank(_audioEngine, \"\"));\n            //Assert.Throws<DirectoryNotFoundException>(() => new SoundBank(_audioEngine, @\"This\\Does\\Not\\Exist.xsb\"));\n            Assert.Throws<FileNotFoundException>(() => new SoundBank(_audioEngine, @\"Assets\\Audio\\Win\\NotTheFile.xsb\"));\n\n            var soundBank = new SoundBank(_audioEngine, @\"Assets\\Audio\\Win\\Tests.xsb\");\n            Assert.False(soundBank.IsInUse);\n            Assert.False(soundBank.IsDisposed);\n\n            var cue = soundBank.GetCue(\"blast_mono\");\n            Assert.True(soundBank.IsInUse);\n            cue.Dispose();\n            //Assert.False(soundBank.IsInUse); // KNI Fail\n\n            soundBank.Dispose();\n            Assert.True(soundBank.IsDisposed);\n            Assert.False(soundBank.IsInUse);\n        }\n\n        [Test]\n        public static void ContentVersion()\n        {\n            Assert.AreEqual(39, AudioEngine.ContentVersion);            \n        }\n\n        [Test]\n        public void GetCategory()\n        {\n            Assert.Throws<ArgumentNullException>(() => _audioEngine.GetCategory(null));\n            Assert.Throws<ArgumentNullException>(() => _audioEngine.GetCategory(\"\"));\n            Assert.Throws<InvalidOperationException>(() => _audioEngine.GetCategory(\"DoesNotExist\"));\n\n            // Make sure case matters.\n            Assert.Throws<InvalidOperationException>(() => _audioEngine.GetCategory(\"DEFAULT\"));\n            Assert.Throws<InvalidOperationException>(() => _audioEngine.GetCategory(\"default\"));\n\n            // Make sure we can get the different categories.\n            Assert.AreEqual(\"Default\", _audioEngine.GetCategory(\"Default\").Name);\n            Assert.AreEqual(\"The End\", _audioEngine.GetCategory(\"The End\").Name);\n            Assert.AreEqual(\"Subcat\", _audioEngine.GetCategory(\"Subcat\").Name);\n        }\n\n        [Test]\n        public void GetGlobalVariable()\n        {\n            Assert.Throws<ArgumentNullException>(() => _audioEngine.GetGlobalVariable(null));\n            Assert.Throws<ArgumentNullException>(() => _audioEngine.GetGlobalVariable(\"\"));\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.GetGlobalVariable(\"DoesNotExist\"));\n\n            // Make sure case matters.\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.GetGlobalVariable(\"SPEEDOFSOUND\"));\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.GetGlobalVariable(\"speedofsound\"));\n\n            Assert.AreEqual(343.5f, _audioEngine.GetGlobalVariable(\"SpeedOfSound\"));\n            Assert.AreEqual(12.34f, _audioEngine.GetGlobalVariable(\"Global Public\"));\n            \n            // Make sure instance variables can't be accessed.\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.GetGlobalVariable(\"OrientationAngle\"));\n\n            // Make sure private variables can't be accessed.\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.GetGlobalVariable(\"Global Private\"));\n        }\n\n        [Test]\n        public void SetGlobalVariable()\n        {\n            Assert.Throws<ArgumentNullException>(() => _audioEngine.SetGlobalVariable(null, 0));\n            Assert.Throws<ArgumentNullException>(() => _audioEngine.SetGlobalVariable(\"\", 0));\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.SetGlobalVariable(\"DoesNotExist\", 0));\n\n            // Make sure case matters.\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.SetGlobalVariable(\"SPEEDOFSOUND\", 0));\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.SetGlobalVariable(\"speedofsound\", 0));\n\n            // Make sure a reserved variable can be set.\n            Assert.AreEqual(343.5f, _audioEngine.GetGlobalVariable(\"SpeedOfSound\"));\n            _audioEngine.SetGlobalVariable(\"SpeedOfSound\", 1.0f);\n            Assert.AreEqual(1.0f, _audioEngine.GetGlobalVariable(\"SpeedOfSound\"));\n            _audioEngine.SetGlobalVariable(\"SpeedOfSound\", 343.5f);\n            Assert.AreEqual(343.5f, _audioEngine.GetGlobalVariable(\"SpeedOfSound\"));\n\n            // Make sure a user variable can be set.\n            Assert.AreEqual(12.34f, _audioEngine.GetGlobalVariable(\"Global Public\"));\n            _audioEngine.SetGlobalVariable(\"Global Public\", 1.0f);\n            Assert.AreEqual(1.0f, _audioEngine.GetGlobalVariable(\"Global Public\"));\n\n            // Make sure variable limits are working.\n            _audioEngine.SetGlobalVariable(\"Global Public\", -100.0f);\n            Assert.AreEqual(0.0f, _audioEngine.GetGlobalVariable(\"Global Public\"));\n            _audioEngine.SetGlobalVariable(\"Global Public\", 1000.0f);\n            Assert.AreEqual(100.0f, _audioEngine.GetGlobalVariable(\"Global Public\"));\n\n            // Make sure instance variables can't be accessed.\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.SetGlobalVariable(\"OrientationAngle\", 1.0f));\n\n            // Make sure private variables can't be accessed.\n            Assert.Throws<IndexOutOfRangeException>(() => _audioEngine.SetGlobalVariable(\"Global Private\", 1.0f));\n        }\n\n        [Test]\n        public void SoundBankGetCue()\n        {\n            Assert.Throws<ArgumentNullException>(() => _soundBank.GetCue(null));\n            Assert.Throws<ArgumentNullException>(() => _soundBank.GetCue(\"\"));\n            Assert.Throws<ArgumentException>(() => _soundBank.GetCue(\"DoesNotExist\"));\n            Assert.Throws<ArgumentException>(() => _soundBank.GetCue(\"BLAST_MONO\"));\n\n            var cue = _soundBank.GetCue(\"blast_mono\");\n            Assert.NotNull(cue);\n            Assert.AreEqual(\"blast_mono\", cue.Name);\n            Assert.False(cue.IsDisposed);\n\n            // Make sure the initial state is correct.\n            Assert.False(cue.IsCreated);\n            Assert.False(cue.IsPreparing);\n            Assert.True(cue.IsPrepared);\n            Assert.False(cue.IsPlaying);\n            Assert.False(cue.IsPaused);\n            Assert.False(cue.IsStopped);\n            Assert.False(cue.IsStopping);\n\n            // Make sure play, pause, resume and stop are working\n            cue.Play();\n            SleepWhileAudioEngineUpdates(100);\n            Assert.True(cue.IsPlaying);\n            Assert.False(cue.IsPaused);\n            Assert.False(cue.IsStopped);\n\n            cue.Pause();\n            SleepWhileAudioEngineUpdates(100);\n            Assert.True(cue.IsPlaying);\n            Assert.True(cue.IsPaused);\n            Assert.False(cue.IsStopped);\n\n            cue.Resume();\n            SleepWhileAudioEngineUpdates(100);\n            Assert.True(cue.IsPlaying);\n            Assert.False(cue.IsPaused);\n            Assert.False(cue.IsStopped);\n\n            cue.Stop(AudioStopOptions.Immediate);\n            SleepWhileAudioEngineUpdates(100);\n            Assert.False(cue.IsPlaying);\n            Assert.False(cue.IsPaused);\n            Assert.True(cue.IsStopped);\n\n            cue = _soundBank.GetCue (\"blast_mono\");\n\n            // Make sure the initial state is reset\n            Assert.False(cue.IsCreated);\n            Assert.False(cue.IsPreparing);\n            Assert.True(cue.IsPrepared);\n            Assert.False(cue.IsPlaying);\n            Assert.False(cue.IsPaused);\n            Assert.False(cue.IsStopped);\n            Assert.False(cue.IsStopping);\n\n            cue.Dispose();\n\n            // Make sure the disposed state is correct.\n            Assert.True(cue.IsDisposed);\n            Assert.False(cue.IsCreated);\n            Assert.False(cue.IsPreparing);\n            Assert.False(cue.IsPrepared);\n            Assert.False(cue.IsPlaying);\n            Assert.False(cue.IsPaused);\n            Assert.False(cue.IsStopped);\n            Assert.False(cue.IsStopping);\n        }\n\n        [Test]\n        public void SoundBankPlayCue()\n        {\n            Assert.Throws<ArgumentNullException>(() => _soundBank.PlayCue(null));\n            Assert.Throws<ArgumentNullException>(() => _soundBank.PlayCue(\"\"));\n            Assert.Throws<InvalidOperationException>(() => _soundBank.PlayCue(\"DoesNotExist\", null, null));\n            Assert.Throws<ArgumentNullException>(() => _soundBank.PlayCue(\"blast_mono\", null, null));\n            Assert.Throws<ArgumentNullException>(() => _soundBank.PlayCue(\"blast_mono\", new AudioListener(), null));\n\n#if !XNA\n            // Make sure play, pause, resume and stop are working\n            _soundBank.PlayCue(\"blast_mono\");\n            SleepWhileAudioEngineUpdates(100);\n            Assert.AreEqual(1, _audioEngine.ActiveCues.Count);\n\n            if (_audioEngine.ActiveCues.Count == 1)\n            {\n                var cue = _audioEngine.ActiveCues[0];\n                Assert.True(cue.IsPlaying);\n                Assert.False(cue.IsPaused);\n                Assert.False(cue.IsStopped);\n\n                cue.Pause();\n                SleepWhileAudioEngineUpdates(100);\n                Assert.True(cue.IsPlaying);\n                Assert.True(cue.IsPaused);\n                Assert.False(cue.IsStopped);\n\n                cue.Resume();\n                SleepWhileAudioEngineUpdates(100);\n                Assert.True(cue.IsPlaying);\n                Assert.False(cue.IsPaused);\n                Assert.False(cue.IsStopped);\n\n                cue.Stop(AudioStopOptions.Immediate);\n                SleepWhileAudioEngineUpdates(100);\n                Assert.False(cue.IsPlaying);\n                Assert.False(cue.IsPaused);\n                Assert.True(cue.IsStopped);\n\n                Assert.AreEqual(0, _audioEngine.ActiveCues.Count);\n            }\n#endif\n        }\n\n        [Test]\n        public void CueGetVariable()\n        {\n            var cue = _soundBank.GetCue(\"blast_mono\");\n\n            Assert.Throws<ArgumentNullException>(() => cue.GetVariable(null));\n            Assert.Throws<ArgumentNullException>(() => cue.GetVariable(\"\"));\n            Assert.Throws<IndexOutOfRangeException>(() => cue.GetVariable(\"DoesNotExist\"));\n\n            // Make sure case matters.\n            Assert.Throws<IndexOutOfRangeException>(() => cue.GetVariable(\"DISTANCE\"));\n            Assert.Throws<IndexOutOfRangeException>(() => cue.GetVariable(\"distance\"));\n\n            Assert.AreEqual(0.0f, cue.GetVariable(\"Distance\"));\n            Assert.AreEqual(45.67f, cue.GetVariable(\"Cue Public\"));\n            \n            // Make sure globbal variables can't be accessed.\n            Assert.Throws<IndexOutOfRangeException>(() => cue.GetVariable(\"SpeedOfSound\"));\n\n            // Make sure private variables can't be accessed.\n            Assert.Throws<IndexOutOfRangeException>(() => cue.GetVariable(\"Cue Private\"));\n\n            cue.Dispose();\n        }\n\n        [Test]\n        public void CueSetVariable()\n        {\n            var cue = _soundBank.GetCue(\"blast_mono\");\n\n            Assert.Throws<ArgumentNullException>(() => cue.SetVariable(null, 0));\n            Assert.Throws<ArgumentNullException>(() => cue.SetVariable(\"\", 0));\n            Assert.Throws<IndexOutOfRangeException>(() => cue.SetVariable(\"DoesNotExist\", 0));\n\n            // Make sure case matters.\n            Assert.Throws<IndexOutOfRangeException>(() => cue.SetVariable(\"DISTANCE\", 0));\n            Assert.Throws<IndexOutOfRangeException>(() => cue.SetVariable(\"distance\", 0));\n\n            // Make sure a reserved variable can be set.\n            Assert.AreEqual(0, cue.GetVariable(\"Distance\"));\n            cue.SetVariable(\"Distance\", 1.0f);\n            Assert.AreEqual(1.0f, cue.GetVariable(\"Distance\"));\n            cue.SetVariable(\"Distance\", 0);\n            Assert.AreEqual(0, cue.GetVariable(\"Distance\"));\n\n            // Make sure a user variable can be set.\n            Assert.AreEqual(45.67f, cue.GetVariable(\"Cue Public\"));\n            cue.SetVariable(\"Cue Public\", 1.0f);\n            Assert.AreEqual(1.0f, cue.GetVariable(\"Cue Public\"));\n\n            // Make sure variable limits are working.\n            cue.SetVariable(\"Cue Public\", -100.0f);\n            Assert.AreEqual(0.0f, cue.GetVariable(\"Cue Public\"));\n            cue.SetVariable(\"Cue Public\", 1000.0f);\n            Assert.AreEqual(100.0f, cue.GetVariable(\"Cue Public\"));\n\n            // Make sure global variables can't be accessed.\n            Assert.Throws<IndexOutOfRangeException>(() => cue.SetVariable(\"Global Public\", 1.0f));\n\n            // Make sure private variables can't be accessed.\n            Assert.Throws<IndexOutOfRangeException>(() => cue.SetVariable(\"Cue Private\", 1.0f));\n\n            cue.Dispose();\n        }\n\n        private void SleepWhileAudioEngineUpdates(int ms)\n        {\n            int cycles = ms / 10;\n            for (int i = 0; i < cycles; i++)\n            {\n                _audioEngine.Update();\n                Thread.Sleep(10);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Tests/Framework.Game/GameComponentTest.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\nusing Kni.Tests.Framework.Components;\n\nnamespace Kni.Tests.Framework\n{\n    public static class GameComponentTest\n    {\n        [Test]\n        public static void InitializeOrderTest()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n            game.IsFixedTimeStep = false;\n            game.ExitCondition = x => x.UpdateNumber > 1;\n\n            var constructor2        = new InitializeOrderComponent(game);\n            var preBaseInitialize2  = new InitializeOrderComponent(game);\n            var postBaseInitialize2 = new InitializeOrderComponent(game);\n            var loadContent2        = new InitializeOrderComponent(game);\n            var update2             = new InitializeOrderComponent(game);\n            var constructor         = new InitializeOrderComponent(game) {ChildComponent = constructor2};\n            var preBaseInitialize   = new InitializeOrderComponent(game) {ChildComponent = preBaseInitialize2};\n            var postBaseInitialize  = new InitializeOrderComponent(game) {ChildComponent = postBaseInitialize2};\n            var loadContent         = new InitializeOrderComponent(game) {ChildComponent = loadContent2};\n            var update              = new InitializeOrderComponent(game) {ChildComponent = update2};\n            \n            game.Components.Add(constructor);\n            \n            game.PreInitializeWith += (sender, args) =>\n            {\n                game.Components.Add(preBaseInitialize);\n            };\n            game.InitializeWith += (sender, args) =>\n            {\n                game.Components.Add(postBaseInitialize);\n            };\n            game.PreLoadContentWith += (sender, args) =>\n            {\n                game.Components.Add(loadContent);\n            };\n            game.PreUpdateWith += (sender, args) =>\n            {\n                game.Components.Add(update);\n            };\n            game.Run();\n            game.Dispose();\n\n            Assert.That(constructor.InitOrder == 0);\n            Assert.That(preBaseInitialize.InitOrder == 1);\n            Assert.That(constructor2.InitOrder == 2);\n            Assert.That(preBaseInitialize2.InitOrder == 3);\n            Assert.That(update2.InitOrder == 4);\n            Assert.That(update.InitOrder == 5);\n            Assert.That(postBaseInitialize.InitOrder == -1);\n            Assert.That(postBaseInitialize2.InitOrder == -1);\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Game/GameTest+Methods.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n\tpartial class GameTest\n\t{\n\t\tpublic static class Methods\n\t\t{\n\t\t\t[TestFixture]\n\t\t\tpublic class Run : FixtureBase\n\t\t\t{\n\t\t\t\t[Test, Ignore(\"Fix me!\")]\n\t\t\t\tpublic void Can_only_be_called_once()\n\t\t\t\t{\n\t\t\t\t\tGame.Run();\n\t\t\t\t\tAssert.Throws<InvalidOperationException>(() => Game.Run());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Framework.Game/GameTest+Properties.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Reflection;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\n\nusing NUnit.Framework;\nusing NUnit.Framework.Constraints;\n\nnamespace Kni.Tests\n{\n\tpartial class GameTest\n\t{\n\t\tpublic static class Properties\n\t\t{\n\t\t\t[TestFixture]\n\t\t\tpublic class Components : ReadOnlyPropertyFixtureBase<GameComponentCollection>\n\t\t\t{\n\t\t\t\tpublic Components()\n\t\t\t\t\t: base(g => g.Components)\n\t\t\t\t{ }\n\n\t\t\t\tpublic override void Has_correct_default_value() { }\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_available_before_Run()\n\t\t\t\t{\n\t\t\t\t\tAssert.That(Game, HasThisProperty.Not.Null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class Content : ReadWritePropertyFixtureBase<ContentManager>\n\t\t\t{\n\t\t\t\tpublic Content()\n\t\t\t\t\t: base(g => g.Content)\n\t\t\t\t{\n\t\t\t\t\tAddLegalValue(new ContentManager(new GameServiceContainer()));\n\n\t\t\t\t\tAddIllegalValue<ArgumentNullException>(null);\n\t\t\t\t}\n\n\t\t\t\t[SetUp]\n\t\t\t\tpublic override void SetUp()\n\t\t\t\t{\n\t\t\t\t\tbase.SetUp();\n\t\t\t\t}\n\n\t\t\t\tpublic override void Has_correct_default_value() { }\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_available_before_Run()\n\t\t\t\t{\n\t\t\t\t\tAssert.That(Game, HasThisProperty.Not.Null);\n\t\t\t\t}\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_not_provided_as_a_service()\n\t\t\t\t{\n\t\t\t\t\tAssert.IsNull(Game.Services.GetService(typeof(ContentManager)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class GraphicsDevice_ : ReadOnlyPropertyFixtureBase<GraphicsDevice>\n\t\t\t{\n\t\t\t\tpublic GraphicsDevice_()\n\t\t\t\t\t: base(g => g.GraphicsDevice)\n\t\t\t\t{ }\n\n\t\t\t\tpublic override void Has_correct_default_value() { }\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_invalid_without_IGraphicsDeviceService()\n\t\t\t\t{\n\t\t\t\t\tAssert.IsNull(Game.Services.GetService(typeof(IGraphicsDeviceService)));\n\t\t\t\t\tAssert.Throws<InvalidOperationException>(() =>\n\t\t\t\t\t{\n\t\t\t\t\t\tvar device = ThisProperty;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_valid_with_IGraphicsDeviceService()\n\t\t\t\t{\n\t\t\t\t\tvar service = new MockGraphicsDeviceService();\n\t\t\t\t\tGame.Services.AddService(typeof(IGraphicsDeviceService), service);\n\n\t\t\t\t\tAssert.That(Game, HasThisProperty.SameAs(service.GraphicsDevice));\n\t\t\t\t}\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_not_available_in_graphical_game_before_Run()\n\t\t\t\t{\n\t\t\t\t\tGame.MakeGraphical();\n\t\t\t\t\tAssert.That(Game, HasThisProperty.Null);\n\t\t\t\t}\n\n\t\t\t\tprivate class MockGraphicsDeviceService : IGraphicsDeviceService\n\t\t\t\t{\n#pragma warning disable 67\n\t\t\t\t\tpublic event EventHandler<EventArgs> DeviceCreated;\n\t\t\t\t\tpublic event EventHandler<EventArgs> DeviceDisposing;\n\t\t\t\t\tpublic event EventHandler<EventArgs> DeviceReset;\n\t\t\t\t\tpublic event EventHandler<EventArgs> DeviceResetting;\n#pragma warning restore 67\n\n\t\t\t\t\t// TODO: It might be nice to try to use a real, live\n\t\t\t\t\t//       GraphicsDevice here rather than null.\n\t\t\t\t\tpublic GraphicsDevice GraphicsDevice { get { return null; } }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class InactiveSleepTime : ReadWritePropertyFixtureBase<TimeSpan>\n\t\t\t{\n\t\t\t\tpublic InactiveSleepTime()\n\t\t\t\t\t: base(g => g.InactiveSleepTime)\n\t\t\t\t{\n\t\t\t\t\tDefaultValue = TimeSpan.FromSeconds(0.02);\n\n\t\t\t\t\tAddLegalValue(TimeSpan.Zero);\n\t\t\t\t\tAddLegalValue(TimeSpan.Zero);\n\t\t\t\t\tAddLegalValue(TimeSpan.FromSeconds(1));\n\t\t\t\t\tAddLegalValue(TimeSpan.MaxValue);\n\n\t\t\t\t\tAddIllegalValue<ArgumentOutOfRangeException>(TimeSpan.FromSeconds(-1));\n\t\t\t\t\tAddIllegalValue<ArgumentOutOfRangeException>(TimeSpan.MinValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class IsActive : ReadOnlyPropertyFixtureBase<bool>\n\t\t\t{\n\t\t\t\tpublic IsActive()\n\t\t\t\t\t: base(g => g.IsActive)\n\t\t\t\t{\n\t\t\t\t\tDefaultValue = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class IsFixedTimeStep : ReadWritePropertyFixtureBase<bool>\n\t\t\t{\n\t\t\t\tpublic IsFixedTimeStep()\n\t\t\t\t\t: base(g => g.IsFixedTimeStep)\n\t\t\t\t{\n\t\t\t\t\tDefaultValue = true;\n\n\t\t\t\t\tAddLegalValue(true);\n\t\t\t\t\tAddLegalValue(false);\n\t\t\t\t}\n\n\t\t\t\tpublic override void Cannot_set_illegal_value(Tuple<bool, Type> valueAndException) { }\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class IsMouseVisible : ReadWritePropertyFixtureBase<bool>\n\t\t\t{\n\t\t\t\tpublic IsMouseVisible()\n\t\t\t\t\t: base(g => g.IsMouseVisible)\n\t\t\t\t{\n\t\t\t\t\tDefaultValue = false;\n\n\t\t\t\t\tAddLegalValue(true);\n\t\t\t\t\tAddLegalValue(false);\n\t\t\t\t}\n\n\t\t\t\tpublic override void Cannot_set_illegal_value(Tuple<bool, Type> valueAndException) { }\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class LaunchParameters_ : ReadOnlyPropertyFixtureBase<LaunchParameters>\n\t\t\t{\n\t\t\t\tpublic LaunchParameters_()\n\t\t\t\t\t: base(g => g.LaunchParameters)\n\t\t\t\t{ }\n\n\t\t\t\tpublic override void Has_correct_default_value() { }\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_available_before_Run()\n\t\t\t\t{\n\t\t\t\t\tAssert.That(Game, HasThisProperty.Not.Null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class Services : ReadOnlyPropertyFixtureBase<GameServiceContainer>\n\t\t\t{\n\t\t\t\tpublic Services()\n\t\t\t\t\t: base(g => g.Services)\n\t\t\t\t{ }\n\n\t\t\t\tpublic override void Has_correct_default_value() { }\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_available_before_Run()\n\t\t\t\t{\n\t\t\t\t\tAssert.That(Game, HasThisProperty.Not.Null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class TargetElapsedTime : ReadWritePropertyFixtureBase<TimeSpan>\n\t\t\t{\n\t\t\t\tpublic TargetElapsedTime()\n\t\t\t\t\t: base(g => g.TargetElapsedTime)\n\t\t\t\t{\n\t\t\t\t\tDefaultValue = TimeSpan.FromTicks(166666);\n\n\t\t\t\t\tAddLegalValue(TimeSpan.FromSeconds(1));\n\t\t\t\t\tAddLegalValue(TimeSpan.MaxValue);\n\n\t\t\t\t\tAddIllegalValue<ArgumentOutOfRangeException>(TimeSpan.Zero);\n\t\t\t\t\tAddIllegalValue<ArgumentOutOfRangeException>(TimeSpan.FromSeconds(-1));\n\t\t\t\t\tAddIllegalValue<ArgumentOutOfRangeException>(TimeSpan.MinValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[TestFixture]\n\t\t\tpublic class Window : ReadOnlyPropertyFixtureBase<GameWindow>\n\t\t\t{\n\t\t\t\tpublic Window()\n\t\t\t\t\t: base(g => g.Window)\n\t\t\t\t{ }\n\n\t\t\t\tpublic override void Has_correct_default_value() { }\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_available_before_Run()\n\t\t\t\t{\n\t\t\t\t\tGame.MakeGraphical();\n\t\t\t\t\tAssert.That(Game, HasThisProperty.Not.Null);\n\t\t\t\t}\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_available_in_non_graphical_game()\n\t\t\t\t{\n\t\t\t\t\tAssert.That(Game, HasThisProperty.Not.Null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic abstract class PropertyFixtureBase<PropertyT> : FixtureBase\n\t\t\t{\n\t\t\t\tprivate Func<Game, PropertyT> _getter;\n\t\t\t\tprotected PropertyFixtureBase(Expression<Func<Game, PropertyT>> propertyExpression)\n\t\t\t\t{\n\t\t\t\t\tMemberExpression member = (MemberExpression)propertyExpression.Body;\n\n\t\t\t\t\t_propertyInfo = (PropertyInfo)member.Member;\n\t\t\t\t\t_getter = propertyExpression.Compile();\n\t\t\t\t}\n\n\t\t\t\tprotected PropertyT _GetValue()\n\t\t\t\t{\n\t\t\t\t\treturn _getter(Game);\n\t\t\t\t}\n\n\t\t\t\tprotected void _SetValue(PropertyT value)\n\t\t\t\t{\n\t\t\t\t}\n\n\t\t\t\tprotected ResolvableConstraintExpression HasThisProperty\n\t\t\t\t{\n\t\t\t\t\tget { return Has.Property(_propertyInfo.Name); }\n\t\t\t\t}\n\n\t\t\t\tprivate PropertyInfo _propertyInfo;\n\n\t\t\t\tprotected PropertyInfo PropertyInfo\n\t\t\t\t{\n\t\t\t\t\tget { return _propertyInfo; }\n\t\t\t\t}\n\n\t\t\t\tprotected virtual PropertyT ThisProperty\n\t\t\t\t{\n\t\t\t\t\tget { return _getter(Game); }\n\t\t\t\t}\n\n\t\t\t\tprivate Maybe<PropertyT> _defaultValue;\n\n\t\t\t\tprotected PropertyT DefaultValue\n\t\t\t\t{\n\t\t\t\t\tget\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!_defaultValue.HasValue)\n\t\t\t\t\t\t\tthrow new InvalidOperationException(\n\t\t\t\t\t\t\t\t\"DefaultValue has never been set.\");\n\t\t\t\t\t\treturn _defaultValue.Value;\n\t\t\t\t\t}\n\t\t\t\t\tset\n\t\t\t\t\t{\n\t\t\t\t\t\t_defaultValue = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t[Test]\n\t\t\t\tpublic virtual void Has_correct_default_value()\n\t\t\t\t{\n\t\t\t\t\tif (!_defaultValue.HasValue)\n\t\t\t\t\t\tthrow new IgnoreException(\"No DefaultValue available\");\n\t\t\t\t\tAssert.That(Game, HasThisProperty.EqualTo(_defaultValue.Value));\n\t\t\t\t}\n\n\t\t\t\tprivate struct Maybe<T>\n\t\t\t\t{\n\t\t\t\t\tpublic Maybe(T value)\n\t\t\t\t\t{\n\t\t\t\t\t\t_hasValue = true;\n\t\t\t\t\t\t_value = value;\n\t\t\t\t\t}\n\n\t\t\t\t\tprivate readonly bool _hasValue;\n\n\t\t\t\t\tpublic bool HasValue\n\t\t\t\t\t{\n\t\t\t\t\t\tget { return _hasValue; }\n\t\t\t\t\t}\n\n\t\t\t\t\tprivate readonly T _value;\n\n\t\t\t\t\tpublic T Value\n\t\t\t\t\t{\n\t\t\t\t\t\tget { return _value; }\n\t\t\t\t\t}\n\n\t\t\t\t\tpublic static implicit operator Maybe<T>(T value)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn new Maybe<T>(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic abstract class ReadOnlyPropertyFixtureBase<PropertyT> : PropertyFixtureBase<PropertyT>\n\t\t\t{\n\t\t\t\tprotected ReadOnlyPropertyFixtureBase(\n\t\t\t\t\tExpression<Func<Game, PropertyT>> propertyExpression)\n\t\t\t\t\t: base(propertyExpression)\n\t\t\t\t{ }\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_read_only()\n\t\t\t\t{\n\t\t\t\t\tif (PropertyInfo.GetGetMethod() == null)\n\t\t\t\t\t\tAssert.Fail(\"Property {0} is not readable.\", PropertyInfo.Name);\n\t\t\t\t\tif (PropertyInfo.GetSetMethod() != null)\n\t\t\t\t\t\tAssert.Fail(\"Property {0} is writeable.\", PropertyInfo.Name);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic abstract class ReadWritePropertyFixtureBase<PropertyT> : PropertyFixtureBase<PropertyT>\n\t\t\t{\n\t\t\t\tprotected ReadWritePropertyFixtureBase(\n\t\t\t\t\tExpression<Func<Game, PropertyT>> propertyExpression)\n\t\t\t\t\t: base(propertyExpression)\n\t\t\t\t{ }\n\n\t\t\t\tprotected new PropertyT ThisProperty\n\t\t\t\t{\n\t\t\t\t\tget { return base.ThisProperty; }\n\t\t\t\t\tset\n\t\t\t\t\t{\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tPropertyInfo.SetValue(Game, value, null);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (TargetInvocationException ex)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Unpack the real exception\n\t\t\t\t\t\t\tthrow ex.InnerException;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t[Test]\n\t\t\t\tpublic void Is_read_write()\n\t\t\t\t{\n\t\t\t\t\tif (PropertyInfo.GetGetMethod() == null)\n\t\t\t\t\t\tAssert.Fail(\"Property {0} is not readable.\", PropertyInfo.Name);\n\t\t\t\t\tif (PropertyInfo.GetSetMethod() == null)\n\t\t\t\t\t\tAssert.Fail(\"Property {0} is not writeable.\", PropertyInfo.Name);\n\t\t\t\t}\n\n\t\t\t\tprotected void AddLegalValue(PropertyT value)\n\t\t\t\t{\n\t\t\t\t\t_legalValues.Add(value);\n\t\t\t\t}\n\n\t\t\t\tprotected void AddIllegalValue<ExceptionT>(PropertyT value)\n\t\t\t\t{\n\t\t\t\t\t_illegalValues.Add(Tuple.Create(value, typeof(ExceptionT)));\n\t\t\t\t}\n\n\t\t\t\tprivate List<PropertyT> _legalValues = new List<PropertyT>();\n\n\t\t\t\tprotected List<PropertyT> LegalValues\n\t\t\t\t{\n\t\t\t\t\tget { return _legalValues; }\n\t\t\t\t}\n\n\t\t\t\tprivate List<Tuple<PropertyT, Type>> _illegalValues =\n\t\t\t\t\tnew List<Tuple<PropertyT, Type>>();\n\n\t\t\t\tprotected List<Tuple<PropertyT, Type>> IllegalValues\n\t\t\t\t{\n\t\t\t\t\tget { return _illegalValues; }\n\t\t\t\t}\n\n\t\t\t\t[Test, TestCaseSource(\"LegalValues\"), Ignore(\"The sourceName specified on a TestCaseSourceAttribute must refer to a static field, property or method.\")]\n\t\t\t\tpublic virtual void Can_set_legal_value(PropertyT value)\n\t\t\t\t{\n\t\t\t\t\tAssert.DoesNotThrow(() => ThisProperty = value);\n\t\t\t\t}\n\n\t\t\t\t[Test, TestCaseSource(\"IllegalValues\"), Ignore(\"The sourceName specified on a TestCaseSourceAttribute must refer to a static field, property or method.\")]\n\t\t\t\tpublic virtual void Cannot_set_illegal_value(Tuple<PropertyT, Type> valueAndException)\n\t\t\t\t{\n\t\t\t\t\tvar value = valueAndException.Item1;\n\t\t\t\t\tvar exceptionType = valueAndException.Item2;\n\t\t\t\t\tAssert.Throws(exceptionType, () => ThisProperty = value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Framework.Game/GameTest.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n\tstatic partial class GameTest\n\t{\n\n\t\t[TestFixture]\n\t\tpublic class Disposal : FixtureBase\n\t\t{\n\t\t\t[TestCase(\"Components\")]\n\t\t\t[TestCase(\"Content\")]\n\t\t\t[TestCase(\"GraphicsDevice\")]\n\t\t\t[TestCase(\"InactiveSleepTime\")]\n\t\t\t[TestCase(\"IsActive\")]\n\t\t\t[TestCase(\"IsFixedTimeStep\")]\n\t\t\t[TestCase(\"IsMouseVisible\")]\n\t\t\t[TestCase(\"LaunchParameters\")]\n\t\t\t[TestCase(\"Services\")]\n\t\t\t[TestCase(\"TargetElapsedTime\")]\n\t\t\t[TestCase(\"Window\")]\n\t\t\tpublic void Property_does_not_throws_after_Dispose(string propertyName)\n\t\t\t{\n\t\t\t\tvar propertyInfo = Game.GetType().GetProperty(propertyName);\n\t\t\t\tif (propertyInfo == null)\n\t\t\t\t\tAssert.Fail(\"Property '{0}' not found\", propertyName);\n\n\t\t\t\tGame.Dispose();\n\t\t\t\tAssertDoesNotThrow<ObjectDisposedException>(() =>\n\t\t\t\t\tRunAndUnpackException(() => propertyInfo.GetValue(Game, null)));\n\t\t\t}\n\n\t\t\t[TestCase(\"Dispose\")]\n\t\t\t[TestCase(\"Exit\")]\n\t\t\t[TestCase(\"ResetElapsedTime\")]\n\t\t\t[TestCase(\"Run\")]\n\t\t\t[TestCase(\"RunOneFrame\")]\n\t\t\t[TestCase(\"SuppressDraw\")]\n\t\t\t[TestCase(\"Tick\")]\n\t\t\tpublic void Method_does_not_throw_after_Dispose(string methodName)\n\t\t\t{\n\t\t\t\tvar methodInfo = Game.GetType().GetMethod(methodName, new Type[0]);\n\t\t\t\tif (methodInfo == null)\n\t\t\t\t\tAssert.Fail(\"Method '{0}' not found\", methodName);\n\n\t\t\t\tGame.Dispose();\n\t\t\t\tAssertDoesNotThrow<ObjectDisposedException>(() =>\n\t\t\t\t\tRunAndUnpackException(() => methodInfo.Invoke(Game, null)));\n\t\t\t}\n\n\t\t\tprivate void RunAndDispose()\n\t\t\t{\n\t\t\t\tGame.MakeGraphical();\n\t\t\t\tGame.Run();\n\t\t\t\tGame.Dispose();\n\t\t\t}\n\n\t\t\tprivate static void RunAndUnpackException(Action action)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\taction();\n\t\t\t\t}\n\t\t\t\tcatch (TargetInvocationException ex)\n\t\t\t\t{\n\t\t\t\t\tthrow ex.InnerException;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprivate void RunDisposeAndTry(Action action, string name, bool shouldThrow)\n\t\t\t{\n\t\t\t\tRunAndDispose();\n\t\t\t\tbool didThrow = false;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\taction();\n\t\t\t\t}\n\t\t\t\tcatch (ObjectDisposedException)\n\t\t\t\t{\n\t\t\t\t\tif (!shouldThrow)\n\t\t\t\t\t\tAssert.Fail(\"{0} threw ObjectDisposed when it shouldn't have.\", name);\n\t\t\t\t\tdidThrow = true;\n\t\t\t\t}\n\t\t\t\tcatch (TargetInvocationException ex)\n\t\t\t\t{\n\t\t\t\t\tif (!(ex.InnerException is ObjectDisposedException))\n\t\t\t\t\t\tthrow;\n\n\t\t\t\t\tif (!shouldThrow)\n\t\t\t\t\t\tAssert.Fail(\"{0} threw ObjectDisposed when it shouldn't have.\", name);\n\t\t\t\t\tdidThrow = true;\n\t\t\t\t}\n\t\t\t\tif (didThrow && !shouldThrow)\n\t\t\t\t\tAssert.Fail(\"{0} did not throw ObjectDisposedException when it should have.\",\n\t\t\t\t\t\t\t name);\n\t\t\t}\n\n\t\t\tprivate static void AssertDoesNotThrow<T>(TestDelegate code) where T : Exception\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tcode();\n\t\t\t\t}\n\t\t\t\tcatch (T ex)\n\t\t\t\t{\n\t\t\t\t\tAssert.AreEqual(null, ex);\n\t\t\t\t}\n\t\t\t\tcatch (Exception ex)\n\t\t\t\t{\n\t\t\t\t\tConsole.WriteLine(\n\t\t\t\t\t\t\"AssertDoesNotThrow<{0}> caught and ignored {1}\", typeof(T), ex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[TestFixture]\n\t\tpublic class Behaviors : FixtureBase\n\t\t{\n\t\t\t[Test]\n\t\t\tpublic void Nongraphical_run_succeeds()\n\t\t\t{\n\t\t\t\tGame.Run();\n\n\t\t\t\tAssert.That(Game, Has.Property(\"UpdateCount\").EqualTo(1));\n\t\t\t\tAssert.That(Game, Has.Property(\"DrawCount\").EqualTo(0));\n\t\t\t}\n\n\t\t\t[Test, Ignore(\"Fix me!\")]\n\t\t\tpublic void Fixed_time_step_skips_draw_when_update_is_slow()\n\t\t\t{\n\t\t\t\tGame.MakeGraphical();\n\n\t\t\t\tvar targetElapsedTime = TimeSpan.FromSeconds(1f / 10f);\n\t\t\t\tvar slowUpdateTime = TimeSpan.FromSeconds(targetElapsedTime.TotalSeconds * 2);\n\n\t\t\t\tvar slowUpdater = new SlowUpdater(Game, slowUpdateTime);\n\t\t\t\tGame.Components.Add(slowUpdater);\n\n\t\t\t\tvar logger = new RunLoopLogger(Game);\n\t\t\t\tGame.Components.Add(logger);\n\n\t\t\t\tGame.MaxUpdateCount = int.MaxValue;\n\t\t\t\tGame.MaxDrawCount = 100;\n\n\t\t\t\tGame.IsFixedTimeStep = true;\n\t\t\t\tGame.TargetElapsedTime = targetElapsedTime;\n\t\t\t\tGame.Run();\n\n\t\t\t\t//Assert.That(_game, Has.Property(\"UpdateCount\").GreaterThan(11));\n\t\t\t\t//Assert.That(_game, Has.Property(\"DrawCount\").EqualTo(10));\n\t\t\t}\n\n\t\t\t[Test]\n\t\t\tpublic void GameTickTest()\n\t\t\t{\n\t\t\t\t// should not throw an exception\n\t\t\t\tGame.ResetElapsedTime();\n\t\t\t\tAssert.DoesNotThrow(() => Game.Tick());\n\t\t\t\tGame.ResetElapsedTime();\n\t\t\t}\n\t\t}\n\n\t\t[TestFixture]\n\t\tpublic class Misc\n\t\t{\n\t\t\t[Test]\n\t\t\tpublic void LoadContentNotCalledWithoutGdm()\n\t\t\t{\n\t\t\t\tvar g = new CountCallsGame();\n\t\t\t\tg.PublicInitialize();\n\n\t\t\t\tAssert.AreEqual(0, g.LoadContentCount);\n\n\t\t\t\tg.Dispose();\n\t\t\t}\n\n\t\t\t[Test]\n\t\t\tpublic void LoadContentNotCalledWithoutGd()\n\t\t\t{\n\t\t\t\tvar g = new CountCallsGame();\n\t\t\t\tvar gdm = new GraphicsDeviceManager(g);\n\n\t\t\t\tg.PublicInitialize();\n\n\t\t\t\tAssert.AreEqual(0, g.LoadContentCount);\n\n\t\t\t\tg.Dispose();\n\t\t\t}\n\n\t\t\t[Test]\n\t\t\tpublic void ExitHappensAtEndOfTick()\n\t\t\t{\n\t\t\t\t// Exit called in Run\n\t\t\t\tvar g = new ExitTestGame();\n\n\t\t\t\t// TODO this is not necessary for XNA, but MG crashes when no GDM is set and Run is called\n\t\t\t\tnew GraphicsDeviceManager(g);\n\t\t\t\tg.Run();\n\t\t\t\tAssert.AreEqual(2, g.UpdateCount);\n\t\t\t\tAssert.AreEqual(0, g.DrawCount); // Draw should be suppressed\n\t\t\t\tAssert.AreEqual(1, g.ExitingCount);\n\n\t\t\t\tg.Dispose();\n\t\t\t}\n\n\n\n\t\t\tprivate class ExitTestGame : CountCallsGame\n\t\t\t{\n\t\t\t\tprivate int count = 0;\n\n\t\t\t\tprotected override void Update(GameTime gameTime)\n\t\t\t\t{\n\t\t\t\t\tif (count > 0)\n\t\t\t\t\t\tExit();\n\n\t\t\t\t\tbase.Update(gameTime);\n\t\t\t\t\tAssert.IsNotNull(Window);\n\t\t\t\t\tAssert.AreEqual(0, ExitingCount);\n\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tprivate class SlowUpdater : GameComponent\n\t\t{\n\t\t\tprivate TimeSpan _updateTime;\n\t\t\tpublic SlowUpdater(Game game, TimeSpan updateTime) :\n\t\t\t\tbase(game)\n\t\t\t{\n\t\t\t\t_updateTime = updateTime;\n\t\t\t}\n\n\t\t\tint _count = 0;\n\t\t\tpublic override void Update(GameTime gameTime)\n\t\t\t{\n\t\t\t\tbase.Update(gameTime);\n\n\t\t\t\tif (_count >= 4)\n\t\t\t\t\treturn;\n\n\t\t\t\t_count++;\n\n\t\t\t\t//if (!gameTime.IsRunningSlowly)\n\t\t\t\t{\n\t\t\t\t\tvar endTick = Stopwatch.GetTimestamp() +\n\t\t\t\t\t\t\t  (long)(Stopwatch.Frequency * _updateTime.TotalSeconds);\n\t\t\t\t\t//long endTick = (long)(_updateTime.TotalMilliseconds * 10) + DateTime.Now.Ticks;\n\t\t\t\t\twhile (Stopwatch.GetTimestamp() < endTick)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Be busy!\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate class RunLoopLogger : DrawableGameComponent\n\t\t{\n\t\t\tpublic RunLoopLogger(Game game) :\n\t\t\t\tbase(game)\n\t\t\t{\n\t\t\t}\n\n\t\t\tprivate List<Entry> _entries = new List<Entry>();\n\t\t\tpublic IEnumerable<Entry> GetEntries()\n\t\t\t{\n\t\t\t\treturn _entries.ToArray();\n\t\t\t}\n\n\t\t\tpublic override void Update(GameTime gameTime)\n\t\t\t{\n\t\t\t\tbase.Update(gameTime);\n\t\t\t\t_entries.Add(Entry.FromUpdate(gameTime));\n\t\t\t}\n\n\t\t\tpublic override void Draw(GameTime gameTime)\n\t\t\t{\n\t\t\t\tbase.Draw(gameTime);\n\t\t\t\t_entries.Add(Entry.FromDraw(gameTime));\n\t\t\t}\n\n\t\t\tpublic string GetLogString()\n\t\t\t{\n\t\t\t\treturn string.Join(\" \", _entries);\n\t\t\t}\n\n\t\t\tpublic struct Entry\n            {\n                public RunLoopAction Action { get; set; }\n                public TimeSpan ElapsedGameTime { get; set; }\n                public TimeSpan TotalGameTime { get; set; }\n                public bool WasRunningSlowly { get; set; }\n\n                public static Entry FromDraw(GameTime gameTime)\n\t\t\t\t{\n\t\t\t\t\treturn new Entry\n\t\t\t\t\t{\n\t\t\t\t\t\tAction = RunLoopAction.Draw,\n\t\t\t\t\t\tElapsedGameTime = gameTime.ElapsedGameTime,\n\t\t\t\t\t\tTotalGameTime = gameTime.TotalGameTime,\n\t\t\t\t\t\tWasRunningSlowly = gameTime.IsRunningSlowly\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tpublic static Entry FromUpdate(GameTime gameTime)\n\t\t\t\t{\n\t\t\t\t\treturn new Entry\n\t\t\t\t\t{\n\t\t\t\t\t\tAction = RunLoopAction.Update,\n\t\t\t\t\t\tElapsedGameTime = gameTime.ElapsedGameTime,\n\t\t\t\t\t\tTotalGameTime = gameTime.TotalGameTime,\n\t\t\t\t\t\tWasRunningSlowly = gameTime.IsRunningSlowly\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tpublic override string ToString()\n\t\t\t\t{\n\t\t\t\t\tchar actionInitial;\n\t\t\t\t\tswitch (Action)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase RunLoopAction.Draw: actionInitial = 'd'; break;\n\t\t\t\t\t\tcase RunLoopAction.Update: actionInitial = 'u'; break;\n\t\t\t\t\t\tdefault: throw new NotSupportedException(Action.ToString());\n\t\t\t\t\t}\n\n\t\t\t\t\treturn string.Format(\n\t\t\t\t\t\t\t   \"{0}({1:0}{2})\",\n\t\t\t\t\t\t\t   actionInitial,\n\t\t\t\t\t\t\t   ElapsedGameTime.TotalMilliseconds,\n\t\t\t\t\t\t\t   WasRunningSlowly ? \"!\" : \"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate enum RunLoopAction\n\t\t{\n\t\t\tDraw,\n\t\t\tUpdate\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/BlendStateTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class BlendStateTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void ShouldNotBeAbleToSetNullBlendState()\n        {\n            Assert.Throws<ArgumentNullException>(() => game.GraphicsDevice.BlendState = null);\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToMutateStateObjectAfterBindingToGraphicsDevice()\n        {\n            BlendState blendState = new BlendState();\n\n            // Can mutate before binding.\n            DoAsserts(blendState, Assert.DoesNotThrow);\n\n            // Can't mutate after binding.\n            game.GraphicsDevice.BlendState = blendState;\n            DoAsserts(blendState, d => Assert.Throws<InvalidOperationException>(d));\n\n            // Even after changing to different BlendState, you still can't mutate a previously-bound object.\n            game.GraphicsDevice.BlendState = BlendState.Opaque;\n            DoAsserts(blendState, d => Assert.Throws<InvalidOperationException>(d));\n\n            blendState.Dispose();\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToMutateDefaultStateObjects()\n        {\n            DoAsserts(BlendState.Additive, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(BlendState.AlphaBlend, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(BlendState.NonPremultiplied, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(BlendState.Opaque, d => Assert.Throws<InvalidOperationException>(d));\n        }\n\n        private static void DoAsserts(BlendState blendState, Action<TestDelegate> assertMethod)\n        {\n            assertMethod(() => blendState.AlphaBlendFunction = BlendFunction.Add);\n            assertMethod(() => blendState.AlphaDestinationBlend = Blend.BlendFactor);\n            assertMethod(() => blendState.AlphaSourceBlend = Blend.BlendFactor);\n            assertMethod(() => blendState.BlendFactor = Color.White);\n            assertMethod(() => blendState.ColorBlendFunction = BlendFunction.Add);\n            assertMethod(() => blendState.ColorDestinationBlend = Blend.BlendFactor);\n            assertMethod(() => blendState.ColorSourceBlend = Blend.BlendFactor);\n            assertMethod(() => blendState.ColorWriteChannels = ColorWriteChannels.All);\n            assertMethod(() => blendState.ColorWriteChannels1 = ColorWriteChannels.All);\n            assertMethod(() => blendState.ColorWriteChannels2 = ColorWriteChannels.All);\n            assertMethod(() => blendState.ColorWriteChannels3 = ColorWriteChannels.All);\n            assertMethod(() => blendState.MultiSampleMask = 0);\n\n#if WINDOWSDX\n            // that is invalid for Reach profile\n            //assertMethod(() => blendState.IndependentBlendEnable = true);\n            //for (int i = 0; i < 4; i++)\n            //{\n            //    assertMethod(() => blendState[0].AlphaBlendFunction = BlendFunction.Add);\n            //    assertMethod(() => blendState[0].AlphaDestinationBlend = Blend.BlendFactor);\n            //    assertMethod(() => blendState[0].AlphaSourceBlend = Blend.BlendFactor);\n            //    assertMethod(() => blendState[0].ColorBlendFunction = BlendFunction.Add);\n            //    assertMethod(() => blendState[0].ColorDestinationBlend = Blend.BlendFactor);\n            //    assertMethod(() => blendState[0].ColorSourceBlend = Blend.BlendFactor);\n            //    assertMethod(() => blendState[0].ColorWriteChannels = ColorWriteChannels.All);\n            //}\n#endif\n\n        }\n\n        [Test]\n        public void VisualTests()\n        {\n            Blend[] blends = new[]\n            {\n                Blend.One,\n                Blend.Zero,\n                Blend.SourceColor,\n                Blend.InverseSourceColor,\n                Blend.SourceAlpha,\n                Blend.InverseSourceAlpha,\n                Blend.DestinationColor,\n                Blend.InverseDestinationColor,\n                Blend.DestinationAlpha,\n                Blend.InverseDestinationAlpha,\n                Blend.BlendFactor,\n                Blend.InverseBlendFactor,\n                Blend.SourceAlphaSaturation,\n            };\n\n            SpriteBatch spriteBatch = new SpriteBatch(gd);\n            Texture2D texture = content.Load<Texture2D>(Paths.Texture(\"MonoGameIcon\"));\n\n            Vector2 size = new Vector2(texture.Width * 0.5f, texture.Height * 0.5f);\n            Vector2 offset = new Vector2(10, 10);\n\n            PrepareFrameCapture();\n\n            gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0);\n\n            for (int y = 0; y < blends.Length; y++)\n            {\n                for (int x = 0; x < blends.Length; x++)\n                {\n                    Vector2 pos = offset + new Vector2(x*size.X, y*size.Y);\n\n                    BlendState blendState = new BlendState();\n                    blendState.ColorSourceBlend = blends[y];\n                    blendState.AlphaSourceBlend = blends[y];\n                    blendState.ColorDestinationBlend = blends[x];\n                    blendState.AlphaDestinationBlend = blends[x];\n                    blendState.BlendFactor = new Color(0.3f, 0.5f, 0.7f);\n\n                    spriteBatch.Begin(SpriteSortMode.Deferred, blendState);\n                    spriteBatch.Draw(texture, new Rectangle((int) pos.X, (int) pos.Y, (int) size.X, (int) size.Y),\n                        Color.White);\n                    spriteBatch.End();\n\n                    blendState.Dispose();\n                }\n            }\n\n            CheckFrames();\n\n            spriteBatch.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/DepthStencilStateTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Kni.Tests.Components;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class DepthStencilStateTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void ShouldNotBeAbleToSetNullDepthStencilState()\n        {\n            Assert.Throws<ArgumentNullException>(() => gd.DepthStencilState = null);\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToMutateStateObjectAfterBindingToGraphicsDevice()\n        {\n            var depthStencilState = new DepthStencilState();\n\n            // Can mutate before binding.\n            DoAsserts(depthStencilState, Assert.DoesNotThrow);\n\n            // Can't mutate after binding.\n            gd.DepthStencilState = depthStencilState;\n            DoAsserts(depthStencilState, d => Assert.Throws<InvalidOperationException>(d));\n\n            // Even after changing to different RasterizerState, you still can't mutate a previously-bound object.\n            gd.DepthStencilState = DepthStencilState.Default;\n            DoAsserts(depthStencilState, d => Assert.Throws<InvalidOperationException>(d));\n\n            depthStencilState.Dispose();\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToMutateDefaultStateObjects()\n        {\n            DoAsserts(DepthStencilState.Default, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(DepthStencilState.DepthRead, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(DepthStencilState.None, d => Assert.Throws<InvalidOperationException>(d));\n        }\n\n        private static void DoAsserts(DepthStencilState depthStencilState, Action<TestDelegate> assertMethod)\n        {\n            assertMethod(() => depthStencilState.CounterClockwiseStencilDepthBufferFail = StencilOperation.Decrement);\n            assertMethod(() => depthStencilState.CounterClockwiseStencilFail = StencilOperation.Decrement);\n            assertMethod(() => depthStencilState.CounterClockwiseStencilFunction = CompareFunction.Always);\n            assertMethod(() => depthStencilState.CounterClockwiseStencilPass = StencilOperation.Decrement);\n            assertMethod(() => depthStencilState.DepthBufferEnable = true);\n            assertMethod(() => depthStencilState.DepthBufferFunction = CompareFunction.Always);\n            assertMethod(() => depthStencilState.DepthBufferWriteEnable = true);\n            assertMethod(() => depthStencilState.ReferenceStencil = 1);\n            assertMethod(() => depthStencilState.StencilDepthBufferFail = StencilOperation.Decrement);\n            assertMethod(() => depthStencilState.StencilEnable = true);\n            assertMethod(() => depthStencilState.StencilFail = StencilOperation.Decrement);\n            assertMethod(() => depthStencilState.StencilFunction = CompareFunction.Always);\n            assertMethod(() => depthStencilState.StencilMask = 1);\n            assertMethod(() => depthStencilState.StencilPass = StencilOperation.Decrement);\n            assertMethod(() => depthStencilState.StencilWriteMask = 1);\n            assertMethod(() => depthStencilState.TwoSidedStencilMode = true);\n        }\n\n        [TestCase(false)]\n        [TestCase(true)]\n        public void VisualTestDepthBufferEnable(bool depthBufferEnable)\n        {\n            PrepareFrameCapture();\n\n            var cube = new Simple3DCubeComponent(gd);\n            cube.LoadContent();\n\n            gd.DepthStencilState = new DepthStencilState\n            {\n                DepthBufferEnable = depthBufferEnable\n            };\n\n            gd.Clear(Color.CornflowerBlue);\n\n            cube.CubeColor = Color.Red;\n            cube.Draw();\n\n            cube.CubePosition = new Vector3(0.4f, 0, 0);\n            cube.CubeColor = Color.Green;\n            cube.Draw();\n\n            CheckFrames();\n\n            cube.UnloadContent();\n        }\n\n        [Test]\n        public void VisualTestStencilBuffer()\n        {\n            PrepareFrameCapture();\n            var cube = new Simple3DCubeComponent(gd);\n            cube.LoadContent();\n\n            gd.Clear(\n                ClearOptions.DepthBuffer | ClearOptions.Stencil | ClearOptions.Target,\n                Color.CornflowerBlue, 1, 0);\n\n            var depthStencilState = new DepthStencilState\n            {\n                ReferenceStencil = 1,\n                StencilEnable = true,\n                StencilFunction = CompareFunction.Always,\n                StencilPass = StencilOperation.Replace,\n                DepthBufferEnable = false\n            };\n            gd.DepthStencilState = depthStencilState;\n\n            cube.CubeColor = Color.Red;\n            cube.Draw();\n\n            depthStencilState.Dispose();\n            depthStencilState = new DepthStencilState\n            {\n                ReferenceStencil = 0,\n                StencilEnable = true,\n                StencilFunction = CompareFunction.Equal,\n                StencilPass = StencilOperation.Keep,\n                DepthBufferEnable = false\n            };\n            gd.DepthStencilState = depthStencilState;\n\n            cube.CubePosition = new Vector3(0.4f, 0, 0);\n            cube.CubeColor = Color.Green;\n            cube.Draw();\n\n            CheckFrames();\n\n            depthStencilState.Dispose();\n            cube.UnloadContent();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/EffectTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Kni.Tests.ContentPipeline;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class EffectTest : GraphicsDeviceTestFixtureBase\n    {\n\n        [Test]\n        public void EffectParameterShouldBeSetIfSetByNameAndGetByIndex()\n        {\n            // This relies on the parameters permanently being on the same index.\n            // Should be no problem except when adding parameters.\n            Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color);\n            game.GraphicsDevice.Textures[0] = texture;\n\n            BasicEffect effect = new BasicEffect(game.GraphicsDevice);\n            effect.TextureEnabled = true;\n            effect.Texture = null;\n            effect.Parameters[\"DiffuseColor\"].SetValue(Color.HotPink.ToVector4());\n            effect.Parameters[\"FogColor\"].SetValue(Color.Honeydew.ToVector3());\n\n            int DiffuseColorIndex = 0;\n            int FogColorIndex = 14;\n\n#if XNA\n            DiffuseColorIndex = 1;\n            FogColorIndex = 15;\n#elif DESKTOPGL\n            DiffuseColorIndex = 1;\n            FogColorIndex = 2;\n#endif\n\n            Assert.That(effect.Parameters[DiffuseColorIndex].GetValueVector4().Equals(Color.HotPink.ToVector4()));\n            Assert.That(effect.Parameters[FogColorIndex].GetValueVector3().Equals(Color.Honeydew.ToVector3()));\n\n            texture.Dispose();\n            effect.Dispose();\n        }\n\n        [Test]\n        public void EffectPassShouldSetTexture()\n        {\n            Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color);\n            game.GraphicsDevice.Textures[0] = null;\n\n            BasicEffect effect = new BasicEffect(game.GraphicsDevice);\n            effect.TextureEnabled = true;\n            effect.Texture = texture;\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.Null);\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture));\n\n            texture.Dispose();\n            effect.Dispose();\n        }\n\n        [Test]\n        public void EffectPassShouldSetTextureOnSubsequentCalls()\n        {\n            Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color);\n            game.GraphicsDevice.Textures[0] = null;\n\n            BasicEffect effect = new BasicEffect(game.GraphicsDevice);\n            effect.TextureEnabled = true;\n            effect.Texture = texture;\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.Null);\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture));\n\n            game.GraphicsDevice.Textures[0] = null;\n\n            effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture));\n\n            texture.Dispose();\n            effect.Dispose();\n        }\n\n        [Test]\n        public void EffectPassShouldSetTextureEvenIfNull()\n        {\n            Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color);\n            game.GraphicsDevice.Textures[0] = texture;\n\n            BasicEffect effect = new BasicEffect(game.GraphicsDevice);\n            effect.TextureEnabled = true;\n            effect.Texture = null;\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture));\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.Null);\n\n            texture.Dispose();\n            effect.Dispose();\n        }\n\n        [Test]\n        public void EffectPassShouldOverrideTextureIfNotExplicitlySet()\n        {\n            Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color);\n            game.GraphicsDevice.Textures[0] = texture;\n\n            BasicEffect effect = new BasicEffect(game.GraphicsDevice);\n            effect.TextureEnabled = true;\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture));\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(game.GraphicsDevice.Textures[0], Is.Null);\n\n            texture.Dispose();\n            effect.Dispose();\n        }\n\n\n        private bool IsSamplerEqual(SamplerState s0, SamplerState s1)\n        {\n            if (s0 == null && s1 == null)\n                return true;\n\n            return s0.Filter == s1.Filter\n                && s0.AddressU == s1.AddressU\n                && s0.AddressV == s1.AddressV\n                ;\n        }\n\n\n        [Test]\n        public void OldSyntaxEffectPassShouldNotOverrideSamplersAndNotOverrideTextures()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            // Reset Samplers and Textures\n            for (int i = 0; i < 16; i++)\n            {\n                device.Textures[i] = null;\n                device.SamplerStates[i] = SamplerState.LinearWrap;\n            }\n\n            Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            texture0.Name = \"texture0\";\n            texture1.Name = \"texture1\";\n\n            SamplerState sampler0 = SamplerState.LinearClamp;\n            SamplerState sampler1 = SamplerState.PointClamp;\n\n            device.SamplerStates[0] = sampler0;\n            device.SamplerStates[1] = sampler1;\n\n            string effectName = \"OldSyntax_x\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            // Samplers shouldn't be exposed as parameters.\n            Assert.That(effect.Parameters.Count == 0);\n\n            device.Textures[0] = texture0;\n            device.Textures[1] = texture1;\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(device.Textures[0], Is.SameAs(texture0));\n            Assert.That(device.Textures[1], Is.SameAs(texture1));\n            Assert.That(device.Textures[2], Is.Null);\n\n            Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0));\n            Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1));\n            Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap));\n\n            effect.Dispose();\n            texture1.Dispose();\n            texture0.Dispose();\n        }\n\n        [Test]\n        public void OldSyntaxEffectPassShouldOverrideSamplersAndNotOverrideTextures()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            // Reset Samplers and Textures\n            for (int i = 0; i < 16; i++)\n            {\n                device.Textures[i] = null;\n                device.SamplerStates[i] = SamplerState.LinearWrap;\n            }\n\n            Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            texture0.Name = \"texture0\";\n            texture1.Name = \"texture1\";\n\n            SamplerState sampler0 = SamplerState.PointWrap;\n            SamplerState sampler1 = SamplerState.PointClamp;\n#if XNA\n            sampler0 = null;\n            sampler1 = null;\n#endif\n\n            string effectName = \"OldSyntax_s0s1\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            // Samplers shouldn't be exposed as parameters.\n            Assert.That(effect.Parameters.Count == 0);\n\n            device.Textures[0] = texture0;\n            device.Textures[1] = texture1;\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(device.Textures[0], Is.SameAs(texture0));\n            Assert.That(device.Textures[1], Is.SameAs(texture1));\n            Assert.That(device.Textures[2], Is.Null);\n\n            Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0));\n            Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1));\n            Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap));\n\n            effect.Dispose();\n            texture1.Dispose();\n            texture0.Dispose();\n        }\n\n        [Test]\n        public void OldSyntaxEffectPassShouldSetTexturesAndNotSamplers()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            // Reset Samplers and Textures\n            for (int i = 0; i < 16; i++)\n            {\n                device.Textures[i] = null;\n                device.SamplerStates[i] = SamplerState.LinearWrap;\n            }\n\n            Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            texture0.Name = \"texture0\";\n            texture1.Name = \"texture1\";\n            texture0.SetData(new Color[] { new Color(0f,0f,1f,1f) });\n            texture1.SetData(new Color[] { new Color(0f,1f,0f,1f) });\n\n            SamplerState sampler0 = SamplerState.LinearWrap;\n            SamplerState sampler1 = SamplerState.LinearWrap;\n\n            string effectName = \"OldSyntax_t0t1\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            effect.Parameters[\"Texture0\"].SetValue(texture0);\n            effect.Parameters[\"Texture1\"].SetValue(texture1);\n\n            BasicEffect basicEffect = new BasicEffect(device);\n            basicEffect.World = Matrix.Identity;\n            basicEffect.View = Matrix.Identity;\n            basicEffect.Projection = Matrix.Identity;\n            basicEffect.CurrentTechnique.Passes[0].Apply(); // apply basic VertexShader\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(device.Textures[0], Is.SameAs(texture0));\n            Assert.That(device.Textures[1], Is.SameAs(texture1));\n            Assert.That(device.Textures[2], Is.Null);\n\n            Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0));\n            Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1));\n            Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap));\n\n\n            RenderTarget2D rt = new RenderTarget2D(device, 1, 1);\n            device.SetRenderTarget(rt);\n            device.Clear(Color.Black);\n            VertexPosition[] vertices = new VertexPosition[4];\n            vertices[0].Position = new Vector3(-1, -1, 0);\n            vertices[1].Position = new Vector3( 1, -1, 0);\n            vertices[2].Position = new Vector3(-1,  1, 0);\n            vertices[3].Position = new Vector3( 1,  1, 0);\n            device.BlendState = BlendState.Opaque;\n            device.DepthStencilState = DepthStencilState.None;\n            device.RasterizerState = RasterizerState.CullNone;\n            device.DrawUserPrimitives(PrimitiveType.TriangleStrip, vertices, 0, 2);\n            device.SetRenderTarget(null);\n            Color[] data = new Color[1];\n            rt.GetData(data);\n            Assert.That(data[0] == new Color(0f, 0.5f, 1f, 1f));\n            rt.Dispose();\n\n\n            effect.Dispose();\n            texture1.Dispose();\n            texture0.Dispose();\n        }\n\n        [Test]\n        public void OldSyntaxEffectPassShouldSetTexturesAndNotSamplers2()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            // Reset Samplers and Textures\n            for (int i = 0; i < 16; i++)\n            {\n                device.Textures[i] = null;\n                device.SamplerStates[i] = SamplerState.LinearWrap;\n            }\n\n            Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            texture0.Name = \"texture0\";\n            texture1.Name = \"texture1\";\n            texture0.SetData(new Color[] { new Color(0f, 0f, 1f, 1f) });\n            texture1.SetData(new Color[] { new Color(0f, 1f, 0f, 1f) });\n\n            SamplerState sampler0 = SamplerState.LinearWrap;\n            SamplerState sampler1 = SamplerState.LinearWrap;\n\n            string effectName = \"OldSyntax_t1t0\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            effect.Parameters[\"Texture0\"].SetValue(texture0);\n            effect.Parameters[\"Texture1\"].SetValue(texture1);\n\n            BasicEffect basicEffect = new BasicEffect(device);\n            basicEffect.World = Matrix.Identity;\n            basicEffect.View = Matrix.Identity;\n            basicEffect.Projection = Matrix.Identity;\n            basicEffect.CurrentTechnique.Passes[0].Apply(); // apply basic VertexShader\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            int t0 = 0;\n            int t1 = 1;\n            int t2 = 2;\n#if KNI\n            //if (device.Adapter.Backend == GraphicsBackend.DirectX11)\n            //{\n            //    t0 = 1;\n            //    t1 = 0;\n            //}\n#endif\n\n            Assert.That(device.Textures[t0], Is.SameAs(texture0));\n            Assert.That(device.Textures[t1], Is.SameAs(texture1));\n            Assert.That(device.Textures[t2], Is.Null);\n\n            Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0));\n            Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1));\n            Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap));\n\n\n            RenderTarget2D rt = new RenderTarget2D(device, 1, 1);\n            device.SetRenderTarget(rt);\n            device.Clear(Color.Black);\n            VertexPosition[] vertices = new VertexPosition[4];\n            vertices[0].Position = new Vector3(-1, -1, 0);\n            vertices[1].Position = new Vector3( 1, -1, 0);\n            vertices[2].Position = new Vector3(-1,  1, 0);\n            vertices[3].Position = new Vector3( 1,  1, 0);\n            device.BlendState = BlendState.Opaque;\n            device.DepthStencilState = DepthStencilState.None;\n            device.RasterizerState = RasterizerState.CullNone;\n            device.DrawUserPrimitives(PrimitiveType.TriangleStrip, vertices, 0, 2);\n            device.SetRenderTarget(null);\n            Color[] data = new Color[1];\n            rt.GetData(data);\n            //TODO: this currently fails on DX11. The order of texture slots has to be swapped.\n            Assert.That(data[0] == new Color(0f, 0.5f, 1f, 1f));\n            rt.Dispose();\n\n\n            effect.Dispose();\n            texture1.Dispose();\n            texture0.Dispose();\n        }\n\n        [Test]\n        public void OldSyntaxEffectPassShouldSetTexturesAndSamplers()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            // Reset Samplers and Textures\n            for (int i = 0; i < 16; i++)\n            {\n                device.Textures[i] = null;\n                device.SamplerStates[i] = SamplerState.LinearWrap;\n            }\n\n            Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            texture0.Name = \"texture0\";\n            texture1.Name = \"texture1\";\n\n            SamplerState sampler0 = SamplerState.PointWrap;\n            SamplerState sampler1 = SamplerState.PointClamp;\n#if XNA\n            sampler0 = null;\n            sampler1 = null;\n#endif\n\n            string effectName = \"OldSyntax_s0s1t0t1\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            effect.Parameters[\"Texture0\"].SetValue(texture0);\n            effect.Parameters[\"Texture1\"].SetValue(texture1);\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(device.Textures[0], Is.SameAs(texture0));\n            Assert.That(device.Textures[1], Is.SameAs(texture1));\n            Assert.That(device.Textures[2], Is.Null);\n\n            Assert.That(IsSamplerEqual(device.SamplerStates[0],sampler0));\n            Assert.That(IsSamplerEqual(device.SamplerStates[1],sampler1));\n            Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap));\n\n            effect.Dispose();\n            texture1.Dispose();\n            texture0.Dispose();\n        }\n\n        [Test]\n        public void DeferredBasicEffectPassShouldSetTexturesAndSamplers()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            // Reset Samplers and Textures\n            for (int i = 0; i < 16; i++)\n            {\n                device.Textures[i] = null;\n                device.SamplerStates[i] = SamplerState.LinearWrap;\n            }\n\n            Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            texture0.Name = \"texture0\";\n            texture1.Name = \"texture1\";\n\n            SamplerState sampler0 = SamplerState.LinearWrap;\n            SamplerState sampler1 = SamplerState.LinearWrap;\n#if XNA\n            sampler0 = null;\n            sampler1 = null;\n#endif\n\n            string effectName = \"DeferredBasicEffect\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            effect.Parameters[\"Diffuse\"].SetValue(texture0);\n            effect.Parameters[\"SpecularMap\"].SetValue(texture1);\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            int t0 = 0;\n            int t1 = 1;\n            int t2 = 2;\n#if KNI\n            //if (device.Adapter.Backend == GraphicsBackend.DirectX11)\n            //{\n            //    t0 = 3;\n            //    t1 = 4;\n            //    t2 = 5;\n            //}\n#endif\n\n            Assert.That(device.Textures[t0], Is.SameAs(texture0));\n            Assert.That(device.Textures[t1], Is.SameAs(texture1));\n            Assert.That(device.Textures[t2], Is.Null);\n\n            Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0));\n            Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1));\n            Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap));\n\n            effect.Dispose();\n            texture1.Dispose();\n            texture0.Dispose();\n        }\n\n#if WINDOWSDX || DESKTOPGL\n\n        [Test]\n        public void NewSyntaxEffectPassShouldSetTexturesAndNotSamplers()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            // Reset Samplers and Textures\n            for (int i = 0; i < 16; i++)\n            {\n                device.Textures[i] = null;\n                device.SamplerStates[i] = SamplerState.LinearWrap;\n            }\n\n            Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            texture0.Name = \"texture0\";\n            texture1.Name = \"texture1\";\n\n            SamplerState sampler0 = SamplerState.LinearWrap;\n            SamplerState sampler1 = SamplerState.LinearWrap;\n\n            string effectName = \"NewSyntax_t0t1\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            effect.Parameters[\"Texture0\"].SetValue(texture0);\n            effect.Parameters[\"Texture1\"].SetValue(texture1);\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(device.Textures[0], Is.SameAs(texture0));\n            Assert.That(device.Textures[1], Is.SameAs(texture1));\n            Assert.That(device.Textures[2], Is.Null);\n\n            Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0));\n            Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1));\n            Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap));\n\n            effect.Dispose();\n            texture1.Dispose();\n            texture0.Dispose();\n        }\n\n        [Test]\n        public void NewSyntaxEffectPassShouldSetTexturesAndSamplers()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            // Reset Samplers and Textures\n            for (int i = 0; i < 16; i++)\n            {\n                device.Textures[i] = null;\n                device.SamplerStates[i] = SamplerState.LinearWrap;\n            }\n\n            Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color);\n            texture0.Name = \"texture0\";\n            texture1.Name = \"texture1\";\n\n            SamplerState sampler0 = SamplerState.PointWrap;\n            SamplerState sampler1 = SamplerState.PointClamp;\n#if XNA\n            sampler0 = null;\n            sampler1 = null;\n#endif\n\n            string effectName = \"NewSyntax_s0s1t0t1\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            effect.Parameters[\"Texture0\"].SetValue(texture0);\n            effect.Parameters[\"Texture1\"].SetValue(texture1);\n\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Assert.That(device.Textures[0], Is.SameAs(texture0));\n            Assert.That(device.Textures[1], Is.SameAs(texture1));\n            Assert.That(device.Textures[2], Is.Null);\n\n            Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0));\n            Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1));\n            Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap));\n\n            effect.Dispose();\n            texture1.Dispose();\n            texture0.Dispose();\n        }\n\n        [Test]\n        public void ShouldCompileComputeShader()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            string effectName = \"ComputeShader\";\n\n            byte[] effectCode = AssetTestUtility.CompileEffect(device, Paths.RawEffect(effectName));\n\n            Effect effect =new Effect(device, effectCode);\n\n        }\n\n\n        [Test]\n        public void ShouldSetAndGetOptimizedMatrix()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            string effectName = \"OptimizedMatrix\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            EffectParameter colorMatrixParam = effect.Parameters[\"ColorMatrix\"];\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n\n            effectPass.Apply();\n\n            Matrix mtx1 = new Matrix(\n                11, 12, 13, 14,\n                21, 22, 23, 24,\n                31, 32, 33, 34,\n                41, 42, 43, 44\n            );\n\n            Matrix mtx2 = colorMatrixParam.GetValueMatrix();\n            Assert.That(mtx2, Is.EqualTo(mtx1));\n\n            Matrix mtx3 = new Matrix(\n                211, 212, 213, 214,\n                221, 222, 223, 224,\n                231, 232, 233, 234,\n                241, 242, 243, 244\n            );\n\n            colorMatrixParam.SetValue(mtx3);\n            Matrix mtx4 = colorMatrixParam.GetValueMatrix();\n            Assert.That(mtx4, Is.EqualTo(mtx3));\n\n            effect.Dispose();\n        }\n\n        [Test]\n        public void ShouldSetAndGetOptimizedMatrixArray()\n        {\n            GraphicsDevice device = game.GraphicsDevice;\n\n            string effectName = \"OptimizedMatrixArray\";\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            EffectParameter colorMatrixParam = effect.Parameters[\"ColorsMatrix\"];\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n\n            effectPass.Apply();\n\n            Matrix mtx0 = new Matrix(\n                11, 12, 13, 14,\n                21, 22, 23, 24,\n                31, 32, 33, 34,\n                41, 42, 43, 44\n            );\n\n            Matrix mtx1 = new Matrix(\n                211, 212, 213, 214,\n                221, 222, 223, 224,\n                231, 232, 233, 234,\n                241, 242, 243, 244\n            );\n\n            Matrix[] mtxArrayA = new Matrix[2] { mtx0, mtx1 };\n\n            colorMatrixParam.SetValue(mtxArrayA);\n\n            Matrix[] mtxArrayB = colorMatrixParam.GetValueMatrixArray(2);\n            Assert.That(mtxArrayA[0], Is.EqualTo(mtxArrayB[0]));\n            Assert.That(mtxArrayA[1], Is.EqualTo(mtxArrayB[1]));\n\n            effect.Dispose();\n        }\n#endif\n\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/GraphicsAdapterTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\n\nnamespace Kni.Tests.Graphics\n{\n    class GraphicsAdapterTest\n    {\n        private static bool Equals(DisplayMode m1, DisplayMode m2)\n        {\n            return m1.Width == m2.Width &&\n                   m1.Height == m2.Height &&\n                   m1.Format == m2.Format &&\n                   m1.AspectRatio == m2.AspectRatio &&\n                   m1.TitleSafeArea == m2.TitleSafeArea;\n        }\n\n        [Test]\n        public static void Adapters()\n        {\n            var adapters = GraphicsAdapter.Adapters;\n            Assert.IsNotNull(adapters);\n            Assert.GreaterOrEqual(adapters.Count, 1);\n\n            var defaultAdapterCount = 0;\n\n            foreach (var adapter in adapters)\n            {\n                Assert.IsNotNull(adapter);\n\n                if (adapter.IsDefaultAdapter)\n                    defaultAdapterCount++;\n                Assert.LessOrEqual(defaultAdapterCount, 1);\n\n                Assert.That(adapter.DeviceName, Is.Not.Null.Or.Empty);\n                Assert.That(adapter.Description, Is.Not.Null.Or.Empty);\n                Assert.AreNotEqual(0, adapter.DeviceId);\n                Assert.AreNotEqual(IntPtr.Zero, adapter.MonitorHandle);\n                Assert.AreNotEqual(0, adapter.VendorId);\n                Assert.AreNotEqual(adapter.SubSystemId, 0);\n                Assert.GreaterOrEqual(adapter.Revision, 0);\n\n                Assert.IsNotNull(adapter.CurrentDisplayMode); \n                Assert.IsNotNull(adapter.SupportedDisplayModes);\n                Assert.GreaterOrEqual(adapter.SupportedDisplayModes.Count(), 1);\n                Assert.AreEqual(1, adapter.SupportedDisplayModes.Count(m => Equals(m, adapter.CurrentDisplayMode)));\n\n                // Seems like XNA treats aspect ratios above 16:10 as wide screen. A 1680x1050 display (exactly 16:10) was considered not to be wide screen.\n                // KNI considers ratios equal or greater than 16:10 to be wide screen.\n                const float minWideScreenAspect = 16.0f / 10.0f;\n#if XNA\n                var isWidescreen = adapter.CurrentDisplayMode.AspectRatio > minWideScreenAspect;\n#else\n                var isWidescreen = adapter.CurrentDisplayMode.AspectRatio >= minWideScreenAspect;\n#endif\n                Assert.AreEqual(isWidescreen, adapter.IsWideScreen); \n\n                foreach (var mode in adapter.SupportedDisplayModes)\n                {\n                    Assert.Greater(mode.Width, 0);\n                    Assert.LessOrEqual(mode.Width, 3840);\n                    Assert.Greater(mode.Height, 0);\n                    Assert.LessOrEqual(mode.Height, 3840);\n\n                    var aspect = mode.Width / (float)mode.Height;\n                    Assert.AreEqual(aspect, mode.AspectRatio);\n\n                    Assert.GreaterOrEqual((int)mode.Format, 0);\n\n                    Assert.GreaterOrEqual(mode.TitleSafeArea.Left, 0);\n                    Assert.GreaterOrEqual(mode.TitleSafeArea.Top, 0);\n                    Assert.Less(mode.TitleSafeArea.Left, mode.TitleSafeArea.Right);\n                    Assert.Less(mode.TitleSafeArea.Top, mode.TitleSafeArea.Bottom);\n                    Assert.LessOrEqual(mode.TitleSafeArea.Width, mode.Width);\n                    Assert.LessOrEqual(mode.TitleSafeArea.Height, mode.Height);\n                }\n            }\n        }\n\n        [Test]\n        public static void DefaultAdapter()\n        {\n            var adapter = GraphicsAdapter.DefaultAdapter;\n            Assert.IsNotNull(adapter);\n            Assert.IsTrue(adapter.IsDefaultAdapter);\n            Assert.Contains(adapter, GraphicsAdapter.Adapters);\n        }\n\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Color, SurfaceFormat.Color, true)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Color, SurfaceFormat.Color, true)]\n        // unsupported renderTarget formats\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Alpha8, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Alpha8, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt1, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt1, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt3, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt3, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt5, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt5, SurfaceFormat.Color, false)]\n#if !XNA\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt1a, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt1a, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt1SRgb, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt1SRgb, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt3SRgb, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt3SRgb, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt5SRgb, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt5SRgb, SurfaceFormat.Color, false)]\n#endif\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.NormalizedByte2, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.NormalizedByte2, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.NormalizedByte4, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.NormalizedByte4, SurfaceFormat.Color, false)]\n        // non-Reach formats\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.HalfSingle, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.HalfSingle, SurfaceFormat.HalfSingle, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.HalfVector2, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector2, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.HalfVector4, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.HalfVector4, SurfaceFormat.HalfVector4, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.HdrBlendable, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.HdrBlendable, SurfaceFormat.HdrBlendable, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Rg32, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Rg32, SurfaceFormat.Rg32, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Rgba1010102, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Rgba1010102, SurfaceFormat.Rgba1010102, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Rgba64, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Rgba64, SurfaceFormat.Rgba64, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Single, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Single, SurfaceFormat.Single, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Vector2, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Vector2, SurfaceFormat.Vector2, true)]\n        [TestCase(GraphicsProfile.Reach, SurfaceFormat.Vector4, SurfaceFormat.Color, false)]\n        [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Vector4, SurfaceFormat.Vector4, true)]\n        public static void QueryRenderTargetFormat_preferredSurface(GraphicsProfile graphicsProfile, SurfaceFormat preferredSurfaceFormat, SurfaceFormat expectedSurfaceFormat, bool expectedIsSupported)\n        {\n            var adapter = GraphicsAdapter.DefaultAdapter;\n\n            SurfaceFormat selectedFormat;\n            DepthFormat selectedDepthFormat;\n            int selectedMultiSampleCount;\n            bool isSupported = adapter.QueryRenderTargetFormat(graphicsProfile, preferredSurfaceFormat, DepthFormat.None, 0,\n                out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount);\n\n            Assert.AreEqual(isSupported, expectedIsSupported);\n            Assert.AreEqual(selectedFormat, expectedSurfaceFormat);\n            Assert.AreEqual(selectedDepthFormat, DepthFormat.None);\n            Assert.AreEqual(selectedMultiSampleCount, 0);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/GraphicsDeviceManagerTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class GraphicsDeviceManagerTest\n    {\n        [Test]\n        public void DefaultParameterValidation()\n        {\n            var game = new Game();\n            var gdm = new GraphicsDeviceManager(game);\n\n            // TODO: Some of these defaults will be different\n            // per-platform... we will #if those cases in here\n            // as we encounter them in the future.\n\n            Assert.AreEqual(800, gdm.PreferredBackBufferWidth);\n            Assert.AreEqual(480, gdm.PreferredBackBufferHeight);\n            Assert.AreEqual(SurfaceFormat.Color, gdm.PreferredBackBufferFormat);\n            Assert.AreEqual(DepthFormat.Depth24, gdm.PreferredDepthStencilFormat);\n            Assert.False(gdm.IsFullScreen);\n            Assert.False(gdm.PreferMultiSampling);\n            Assert.AreEqual(GraphicsProfile.Reach, gdm.GraphicsProfile);\n            Assert.True(gdm.SynchronizeWithVerticalRetrace);\n            Assert.Null(gdm.GraphicsDevice);\n            Assert.AreEqual(DisplayOrientation.Default, gdm.SupportedOrientations);\n\n            game.Dispose();\n        }\n\n        [Test]\n        public void InitializeEventCount()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            var resettingCount = 0;\n            var resetCount = 0;\n            var preparingCount = 0;\n            var createdCount = 0;\n            var devDispCount = 0;\n            var dispCount = 0;\n\n            gdm.DeviceResetting += (s, a) => resettingCount++;\n            gdm.DeviceReset += (s, a) => resetCount++;\n            gdm.PreparingDeviceSettings += (s, a) => preparingCount++;\n            gdm.DeviceCreated += (s, a) => createdCount++;\n            gdm.DeviceDisposing += (s, a) => devDispCount++;\n            gdm.Disposed += (s, a) => dispCount++;\n\n            game.InitializeOnly();\n\n            Assert.AreEqual(0, resettingCount);\n            Assert.AreEqual(0, resetCount);\n            Assert.AreEqual(1, preparingCount);\n            Assert.AreEqual(1, createdCount);\n            Assert.AreEqual(0, devDispCount);\n            Assert.AreEqual(0, dispCount);\n\n            game.Dispose();\n        }\n\n        [Test]\n        public void DoNotModifyPresentationParametersDirectly()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            game.InitializeWith += (sender, args) =>\n            {\n                var gd = game.GraphicsDevice;\n\n                var oldpp = gd.PresentationParameters;\n                gdm.PreferredBackBufferWidth = 100;\n                gdm.ApplyChanges();\n                var newpp = gd.PresentationParameters;\n                Assert.AreNotSame(oldpp, newpp);\n            };\n\n            game.InitializeOnly();\n            game.Dispose();\n        }\n\n        [Test]\n        public void PreparingDeviceSettings()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            var count = 0;\n\n            gdm.PreparingDeviceSettings += (sender, args) =>\n            {\n                Assert.NotNull(args.GraphicsDeviceInformation);\n\n                Assert.NotNull(args.GraphicsDeviceInformation.Adapter);\n                Assert.AreEqual(GraphicsProfile.Reach, args.GraphicsDeviceInformation.GraphicsProfile);\n\n                var pp = args.GraphicsDeviceInformation.PresentationParameters;\n                Assert.NotNull(pp);\n\n                Assert.AreEqual(800, pp.BackBufferWidth);\n                Assert.AreEqual(480, pp.BackBufferHeight);\n                Assert.AreEqual(SurfaceFormat.Color, pp.BackBufferFormat);\n                Assert.AreEqual(DepthFormat.Depth24, pp.DepthStencilFormat);\n                Assert.False(pp.IsFullScreen);\n                Assert.AreEqual(PresentInterval.One, pp.PresentationInterval);\n                Assert.AreEqual(new Rectangle(0, 0, 800, 480), pp.Bounds);\n                Assert.AreNotEqual(IntPtr.Zero, pp.DeviceWindowHandle);\n                Assert.AreEqual(DisplayOrientation.Default, pp.DisplayOrientation);\n                Assert.AreEqual(RenderTargetUsage.DiscardContents, pp.RenderTargetUsage);\n                Assert.AreEqual(0, pp.MultiSampleCount);\n\n                count++;\n            };\n\n            game.InitializeOnly();\n            Assert.AreEqual(1, count);\n            game.Dispose();\n        }\n\n        [Test]\n        public void PreparingDeviceSettingsEventChangeGraphicsProfile()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            Assert.AreEqual(GraphicsProfile.Reach, gdm.GraphicsProfile);\n\n            game.InitializeOnly();\n\n            var invoked = false;\n            gdm.PreparingDeviceSettings += (s, a) =>\n            {\n                a.GraphicsDeviceInformation.GraphicsProfile = GraphicsProfile.HiDef;\n                invoked = true;\n            };\n\n            // make sure that changing the graphics profile creates a new device and does not reset\n            var creationCount = 0;\n            gdm.DeviceCreated += (sender, args) => creationCount++;\n            var resetCount = 0;\n            gdm.DeviceReset += (sender, args) => resetCount++;\n\n            // make a change so ApplyChanges actually does something\n            gdm.PreferredBackBufferWidth = 100;\n            gdm.ApplyChanges();\n\n            // assert that PreparingDeviceSettings is invoked, but the GraphicsProfile of the gdm did not change\n            Assert.That(invoked);\n            Assert.AreEqual(GraphicsProfile.Reach, gdm.GraphicsProfile);\n            Assert.AreEqual(GraphicsProfile.HiDef, gdm.GraphicsDevice.GraphicsProfile);\n\n            Assert.AreEqual(creationCount, 1);\n            Assert.AreEqual(resetCount, 0);\n\n            game.Dispose();\n        }\n\n        [Test]\n        public void PreparingDeviceSettingsArgsPresentationParametersAreApplied()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            var invoked = false;\n\n            game.PreInitializeWith += (sender, args) =>\n            {\n                Assert.AreEqual(RenderTargetUsage.DiscardContents,\n                    gdm.GraphicsDevice.PresentationParameters.RenderTargetUsage);\n\n                gdm.PreparingDeviceSettings += (s, a) =>\n                {\n                    a.GraphicsDeviceInformation.GraphicsProfile = GraphicsProfile.HiDef;\n                    a.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;\n                    invoked = true;\n                };\n            };\n\n            game.InitializeOnly();\n\n            // make a change so ApplyChanges actually does something\n            gdm.PreferredBackBufferWidth = 100;\n            gdm.ApplyChanges();\n\n            Assert.That(invoked);\n            Assert.AreEqual(RenderTargetUsage.PreserveContents, gdm.GraphicsDevice.PresentationParameters.RenderTargetUsage);\n\n            game.Dispose();\n        }\n\n        [Test]\n        public void PreparingDeviceSettingsArgsThrowsWhenPPSetToNull()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            var invoked = false;\n\n            gdm.PreparingDeviceSettings += (s, a) =>\n            {\n                a.GraphicsDeviceInformation.PresentationParameters = null;\n                invoked = true;\n            };\n\n            Assert.Throws(Is.InstanceOf(typeof(Exception)), () => game.InitializeOnly());\n            Assert.That(invoked);\n\n            game.Dispose();\n        }\n\n        [Test]\n        public void ApplyChangesReturnsWhenNoSetterCalled()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            var invoked = false;\n\n            game.PreInitializeWith += (sender, args) =>\n            {\n                gdm.PreparingDeviceSettings += (s, a) =>\n                {\n                    invoked = true;\n                };\n            };\n\n            game.InitializeOnly();\n\n            gdm.ApplyChanges();\n            Assert.IsFalse(invoked);\n\n            // this proves that XNA does not check for equality, but just registers that setters are used\n            gdm.PreferredBackBufferWidth = gdm.PreferredBackBufferWidth;\n\n            gdm.ApplyChanges();\n            Assert.That(invoked);\n\n            game.Dispose();\n        }\n\n        [Test]\n        public void ApplyChangesInvokesPreparingDeviceSettings()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            var invoked = false;\n\n            game.InitializeWith += (sender, args) =>\n            {\n                gdm.PreparingDeviceSettings += (s, a) =>\n                {\n                    invoked = true;\n                };\n            };\n\n            game.InitializeOnly();\n\n            gdm.PreferredBackBufferWidth = gdm.PreferredBackBufferWidth;\n            gdm.ApplyChanges();\n            Assert.That(invoked);\n\n            game.Dispose();\n        }\n\n        [Test]\n        public void ApplyChangesResetsDevice()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            var count = 0;\n\n            gdm.DeviceReset += (sender, args) => count++;\n\n            game.InitializeOnly();\n\n            gdm.PreferredBackBufferWidth = gdm.PreferredBackBufferWidth;\n            gdm.ApplyChanges();\n            Assert.AreEqual(1, count);\n\n            game.Dispose();\n        }\n\n        [Test]\n        public void DeviceDisposingInvokedAfterDeviceDisposed()\n        {\n            var game = new TestGameBase();\n            var gdm = new GraphicsDeviceManager(game);\n\n            var invoked = false;\n\n            gdm.DeviceDisposing += (sender, args) =>\n            {\n                invoked = true;\n                Assert.IsTrue(gdm.GraphicsDevice.IsDisposed);\n            };\n\n            game.InitializeOnly();\n\n            Assert.IsFalse(gdm.GraphicsDevice.IsDisposed);\n            Assert.IsFalse(invoked);\n            // change the graphics profile so the current device needs to be disposed\n            gdm.GraphicsProfile = GraphicsProfile.HiDef;\n            gdm.ApplyChanges();\n            Assert.IsTrue(invoked);\n\n            game.Dispose();\n\n        }\n    }\n\n    internal class GraphicsDeviceManagerFixtureTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void ResettingDeviceTriggersResetEvents()\n        {\n            var resetCount = 0;\n            var resettingCount = 0;\n            gdm.DeviceReset += (sender, args) =>\n            {\n                resetCount++;\n            };\n\n            gdm.DeviceResetting += (sender, args) =>\n            {\n                resettingCount++;\n            };\n\n            gd.Reset();\n\n            Assert.AreEqual(1, resetCount);\n            Assert.AreEqual(1, resettingCount);\n        }\n        \n        [Test]\n        public void NewDeviceDoesNotTriggerReset()\n        {\n            var resetCount = 0;\n            var devLostCount = 0;\n\n            gd.DeviceReset += (sender, args) =>\n            {\n                resetCount++;\n            };\n            gd.DeviceLost += (sender, args) =>\n            {\n                devLostCount++;\n            };\n\n            // changing the profile requires creating a new device\n            gdm.GraphicsProfile = GraphicsProfile.Reach;\n            gdm.ApplyChanges();\n\n            Assert.AreEqual(0, resetCount);\n            Assert.AreEqual(0, devLostCount);\n        }\n\n        [Test]\n        public void ClientSizeChangedOnDeviceReset()\n        {\n            var count = 0;\n            game.Window.ClientSizeChanged += (sender, args) =>\n            {\n                count++;\n            };\n            gdm.GraphicsProfile = GraphicsProfile.HiDef;\n            gdm.ApplyChanges();\n            Assert.AreEqual(0, count);\n\n            gdm.PreferredBackBufferWidth = 100;\n            gdm.ApplyChanges();\n            Assert.AreEqual(0, count);\n\n            // changing the profile will trigger a device reset\n            gdm.GraphicsProfile = GraphicsProfile.Reach;\n            gdm.ApplyChanges();\n            // not even that will trigger the event\n            Assert.AreEqual(0, count);\n        }\n\n        [Test]\n        public void MultiSampleCountRoundsDown()\n        {\n            gdm.PreferMultiSampling = true;\n\n            gdm.PreparingDeviceSettings += (sender, args) =>\n            {\n                var pp = args.GraphicsDeviceInformation.PresentationParameters;\n                pp.MultiSampleCount = 3;\n            };\n\n            gdm.ApplyChanges();\n\n            Assert.AreEqual(2, gd.PresentationParameters.MultiSampleCount);\n\n        }\n\n        [TestCase(false)]\n        [TestCase(true)]\n        public void MSAAEnabled(bool enabled)\n        {\n            gdm.PreferMultiSampling = enabled;\n            gdm.GraphicsProfile = GraphicsProfile.HiDef;\n\n            // first hook an event to do some checks\n            gdm.PreparingDeviceSettings += (sender, args) =>\n            {\n                var pp = args.GraphicsDeviceInformation.PresentationParameters;\n                if (!enabled)\n                    Assert.AreEqual(0, pp.MultiSampleCount);\n                else\n                    Assert.Less(0, pp.MultiSampleCount);\n            };\n\n            // then create a GraphicsDevice\n            gdm.ApplyChanges();\n\n            var tex = new Texture2D(gd, 1, 1);\n            tex.SetData(new[] { Color.White.PackedValue });\n            var spriteBatch = new SpriteBatch(gd);\n\n            if (enabled)\n            {\n                var pp = gd.PresentationParameters;\n                Assert.Less(0, pp.MultiSampleCount);\n                Assert.AreNotEqual(1024, pp.MultiSampleCount);\n            }\n\n            gd.Clear(Color.Black);\n\n            spriteBatch.Begin();\n            spriteBatch.Draw(tex, new Vector2(800 / 2, 480 / 2), null, Color.White, MathHelper.ToRadians(45), new Vector2(0.5f), 200, SpriteEffects.None, 0);\n            spriteBatch.End();\n\n            var data = new Color[800 * 480];\n            gd.GetBackBufferData(data);\n\n            float black = 0;\n            float white = 0;\n            float grey = 0;\n            foreach (var c in data)\n            {\n                if (c == Color.Black)\n                    ++black;\n                else if (c == Color.White)\n                    ++white;\n                else if (c.R == c.G && c.G == c.B && c.R > 0 && c.R < 255)\n                    ++grey;\n            }\n\n            // General percentage of black and white pixels we should be getting.\n            black /= data.Length;\n            white /= data.Length;\n            Assert.Less(black, 0.9f);\n            Assert.Greater(black, 0.8f);\n            Assert.Less(white, 0.2f);\n            Assert.Greater(white, 0.1f);\n\n            // If enabled we should have at least a few grey pixels\n            // else we should have zero grey pixels.\n            grey /= data.Length;\n            if (!enabled)\n                Assert.AreEqual(0, grey);\n            else\n            {\n                Assert.Less(grey, 0.01f);\n                Assert.Greater(grey, 0.001f);\n            }\n\n            tex.Dispose();\n            spriteBatch.Dispose();\n        }\n\n        [Test]\n        public void UnsupportedMultiSampleCountDoesNotThrowException()\n        {\n            gdm.PreferMultiSampling = true;\n\n            gdm.PreparingDeviceSettings += (sender, args) =>\n            {\n                var pp = args.GraphicsDeviceInformation.PresentationParameters;\n                pp.MultiSampleCount = 33; // Set too high. In DX11 is max 32.\n            };\n\n            Assert.DoesNotThrow(()=>gdm.ApplyChanges(), \"GraphicDeviceManager.ApplyChanges()\");\n            Assert.DoesNotThrow(() =>\n            {\n                var pp = gdm.GraphicsDevice.PresentationParameters.Clone();\n                pp.MultiSampleCount = 10000; // Set too high. In DX11 is max 32.\n                gdm.GraphicsDevice.Reset(pp);\n            }, \"GraphicsDevice.Reset(PresentationParameters)\");\n        }\n\n#if WINDOWSDX\n        [Test]\n        public void TooHighMultiSampleCountClampedToMaxSupported()\n        {\n            int maxMultiSampleCount = ((IPlatformGraphicsDevice)gd).Strategy.ToConcrete<Microsoft.Xna.Platform.Graphics.ConcreteGraphicsDevice>().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)gd).Strategy.PresentationParameters.BackBufferFormat);\n            gdm.PreferMultiSampling = true;\n\n            gdm.PreparingDeviceSettings += (sender, args) =>\n            {\n                var pp1 = args.GraphicsDeviceInformation.PresentationParameters;\n                pp1.MultiSampleCount = maxMultiSampleCount + 1;\n            };\n            gdm.ApplyChanges();\n            Assert.AreEqual\n                (maxMultiSampleCount, gdm.GraphicsDevice.PresentationParameters.MultiSampleCount);\n\n            // Test again for GraphicsDevice.Reset(PresentationParameters)\n            var pp2 = gdm.GraphicsDevice.PresentationParameters.Clone();\n            pp2.MultiSampleCount = 0;\n            gdm.GraphicsDevice.Reset(pp2);\n            Assert.AreEqual\n                (0, gdm.GraphicsDevice.PresentationParameters.MultiSampleCount);\n\n            var pp3 = gdm.GraphicsDevice.PresentationParameters.Clone();\n            pp3.MultiSampleCount = 500; // Set too high. max is maxMultiSampleCount\n            gdm.GraphicsDevice.Reset(pp3);\n            Assert.AreEqual\n                (maxMultiSampleCount, gdm.GraphicsDevice.PresentationParameters.MultiSampleCount);\n            \n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/GraphicsDeviceTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing Kni.Tests.ContentPipeline;\nusing NUnit.Framework;\nusing Microsoft.Xna.Platform.Graphics;\n#if DESKTOPGL\nusing Microsoft.Xna.Platform.Graphics.OpenGL;\n#endif\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class GraphicsDeviceTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void BlendFactor()\n        {\n            Assert.AreEqual(Color.White, gd.BlendFactor);\n\n            var blend = new BlendState\n            {\n                BlendFactor = Color.Crimson\n            };\n\n            gd.BlendState = blend;\n            Assert.AreEqual(Color.Crimson, gd.BlendFactor);\n\n            gd.BlendFactor = Color.CornflowerBlue;\n            Assert.AreEqual(Color.Crimson, gd.BlendState.BlendFactor);\n            Assert.AreEqual(Color.CornflowerBlue, gd.BlendFactor);\n\n            blend.Dispose();\n        }\n\n        [Test]\n        public void CtorAdapterNull()\n        {\n            Assert.Throws<ArgumentNullException>(() =>\n            {\n                PresentationParameters pp = new PresentationParameters();\n                pp.BackBufferWidth = 800;\n                pp.BackBufferWidth = 480;\n                new GraphicsDevice(null, GraphicsProfile.Reach, pp);\n            });\n        }\n\n        [Test]\n        public void CtorPresentationParametersNull()\n        {\n            Assert.Throws<ArgumentNullException>(() =>\n            {\n                PresentationParameters pp = null;\n                new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.Reach, pp);\n            }); \n        }\n\n        [Test]\n        public void DisposedWhenDisposingInvoked()\n        {\n            var count = 0;\n\n            gd.Disposing += (sender, args) =>\n            {\n                Assert.IsTrue(gd.IsDisposed);\n                count++;\n            };\n\n            gd.Dispose();\n            Assert.AreEqual(1, count);\n\n            // Disposing should not be invoked more than once\n            gd.Dispose();\n            Assert.AreEqual(1, count);\n        }\n\n        [Test]\n        public void ResetDoesNotTriggerDeviceLost()\n        {\n            // TODO figure out exactly when a device is lost\n            var resetCount = 0;\n            var devLostCount = 0;\n\n            gd.DeviceReset += (sender, args) =>\n            {\n                resetCount++;\n                Assert.AreEqual(0, devLostCount);\n            };\n\n            gd.DeviceLost += (sender, args) =>\n            {\n                devLostCount++;\n                Assert.AreEqual(1, resetCount);\n            };\n\n            gd.Reset();\n\n            Assert.AreEqual(1, resetCount);\n            Assert.AreEqual(0, devLostCount);\n        }\n\n        [Test]\n        public void ResetDoesNotClearState()\n        {\n            gd.RasterizerState = RasterizerState.CullNone;\n            gd.BlendState = BlendState.NonPremultiplied;\n            gd.DepthStencilState = DepthStencilState.None;\n            gd.SamplerStates[0] = SamplerState.PointClamp;\n            var vbb = new VertexBufferBinding(new VertexBuffer(gd, VertexPositionColor.VertexDeclaration, 5, BufferUsage.WriteOnly));\n            gd.SetVertexBuffers(vbb);\n\n            gd.Reset();\n\n            Assert.AreEqual(RasterizerState.CullNone, gd.RasterizerState);\n            Assert.AreEqual(BlendState.NonPremultiplied, gd.BlendState);\n            Assert.AreEqual(DepthStencilState.None, gd.DepthStencilState);\n            Assert.AreEqual(SamplerState.PointClamp, gd.SamplerStates[0]);\n            // TODO GetVertexBuffers is not implemented in MG\n#if XNA\n            Assert.AreEqual(vbb, gd.GetVertexBuffers()[0]);\n#endif\n            vbb.VertexBuffer.Dispose();\n        }\n\n        [Test, Ignore(\"Make sure dynamic graphics resources are notified when graphics device is lost\")]\n        public void ContentLostResources()\n        {\n            // https://blogs.msdn.microsoft.com/shawnhar/2007/12/12/virtualizing-the-graphicsdevice-in-xna-game-studio-2-0/\n\n            var rt = new RenderTarget2D(gdm.GraphicsDevice, 5, 5);\n            var vb = new DynamicVertexBuffer(gd, VertexPositionColor.VertexDeclaration, 1, BufferUsage.None);\n            var ib = new DynamicIndexBuffer(gd, IndexElementSize.SixteenBits, 1, BufferUsage.None);\n            var rtc = new RenderTargetCube(gd, 1, false, SurfaceFormat.Color, DepthFormat.Depth16);\n\n            gd.Reset();\n\n            Assert.IsTrue(rt.IsContentLost);\n            Assert.IsFalse(rt.IsDisposed);\n\n            Assert.IsTrue(vb.IsContentLost);\n            Assert.IsFalse(vb.IsDisposed);\n\n            Assert.IsTrue(ib.IsContentLost);\n            Assert.IsFalse(ib.IsDisposed);\n\n            Assert.IsTrue(rtc.IsContentLost);\n            Assert.IsFalse(rtc.IsDisposed);\n\n            rt.Dispose();\n            vb.Dispose();\n            ib.Dispose();\n            rtc.Dispose();\n        }\n\n        [Test]\n        public void ResetWindowHandleNullThrowsException()\n        {\n            Assert.Throws<ArgumentException>(() =>\n            {\n                PresentationParameters pp = new PresentationParameters();\n                pp.BackBufferWidth = 800;\n                pp.BackBufferWidth = 480;\n                gd.Reset(pp);\n            });\n        }\n\n\t\t[Test]\n\t\tpublic void Clear()\n\t\t{\n\t\t\tvar colors = new Color [] {\n\t\t\t\tColor.Red,\n\t\t\t\tColor.Orange,\n\t\t\t\tColor.Yellow,\n\t\t\t\tColor.Green,\n\t\t\t\tColor.Blue,\n\t\t\t\tColor.Indigo,\n\t\t\t\tColor.Violet\n\t\t\t};\n\n            PrepareFrameCapture(colors.Length);\n\n\t\t    foreach (var color in colors)\n\t\t    {\n\t\t        gd.Clear(color);\n                SubmitFrame();\n\t\t    }\n\n            CheckFrames();\n\t\t}\n\n        [Test]\n        public void DrawPrimitivesParameterValidation()\n        {\n            var vertexBuffer = new VertexBuffer(\n                gd, VertexPositionColorTexture.VertexDeclaration,\n                3, BufferUsage.None);\n\n            // No vertex shader or pixel shader.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1));\n\n            new BasicEffect(gd).CurrentTechnique.Passes[0].Apply();\n\n            // No vertexBuffer.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1));\n\n            gd.SetVertexBuffer(vertexBuffer);\n\n            // Success - \"normal\" usage.\n            Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1));\n\n            // vertexStart too small / large.\n            Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, -1, 1));\n            Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 3, 1));\n\n            // primitiveCount too small / large.\n            Assert.Throws<ArgumentOutOfRangeException>(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 0));\n            Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 2));\n\n            // vertexStart + primitiveCount too large.\n            Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 1, 1));\n\n            vertexBuffer.Dispose();\n        }\n\n        [Test]\n        public void DrawIndexedPrimitivesParameterValidation()\n        {\n            var vertexBuffer = new VertexBuffer(\n                gd, VertexPositionColorTexture.VertexDeclaration,\n                3, BufferUsage.None);\n            var indexBuffer = new IndexBuffer(\n                gd, IndexElementSize.SixteenBits, \n                3, BufferUsage.None);\n\n            // No vertex shader or pixel shader.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1));\n\n            new BasicEffect(gd).CurrentTechnique.Passes[0].Apply();\n\n            // No vertexBuffer.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1));\n\n            gd.SetVertexBuffer(vertexBuffer);\n\n            // No indexBuffer.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1));\n\n            gd.Indices = indexBuffer;\n\n            // Success - \"normal\" usage.\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1));\n\n            // XNA doesn't do upfront parameter validation on the Assert.DoesNotThrow tests,\n            // but it *sometimes* fails later with an AccessViolationException, so we can't actually\n            // run these tests as part of the XNA test suite.\n\n            // baseVertex too small / large.\n#if !XNA\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, -1, 0, 3, 0, 1));\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 3, 0, 3, 0, 1));\n#endif\n\n            // startIndex too small / large.\n#if !XNA\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, -1, 1));\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 3, 1));\n#endif\n\n            // primitiveCount too small / large.\n            Assert.Throws<ArgumentOutOfRangeException>(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 0));\n#if !XNA\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 2));\n#endif\n\n            // startIndex + primitiveCount too large.\n#if !XNA\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 1, 1));\n#endif\n            vertexBuffer.Dispose();\n            indexBuffer.Dispose();\n        }\n\n        // This overload of DrawIndexedPrimitives is not supported on XNA.\n#if !XNA\n        [Test]\n        public void DrawIndexedPrimitivesParameterValidation2()\n        {\n            var vertexBuffer = new VertexBuffer(\n                gd, VertexPositionColorTexture.VertexDeclaration,\n                3, BufferUsage.None);\n            var indexBuffer = new IndexBuffer(\n                gd, IndexElementSize.SixteenBits, \n                3, BufferUsage.None);\n\n            // No vertex shader or pixel shader.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 1));\n\n            var effect = new BasicEffect(gd);\n            effect.CurrentTechnique.Passes[0].Apply();\n\n            // No vertexBuffer.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 1));\n\n            gd.SetVertexBuffer(vertexBuffer);\n\n            // No indexBuffer.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 1));\n\n            gd.Indices = indexBuffer;\n\n            // Success - \"normal\" usage.\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 1));\n\n            // baseVertex too small / large.\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, -1, 0, 1));\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 3, 0, 1));\n\n            // startIndex too small / large.\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, -1, 1));\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 3, 1));\n\n            // primitiveCount too small / large.\n            Assert.Throws<ArgumentOutOfRangeException>(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 0));\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 2));\n\n            // startIndex + primitiveCount too large.\n            Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 1, 1));\n\n            effect.Dispose();\n            vertexBuffer.Dispose();\n            indexBuffer.Dispose();\n        }\n#endif\n\n#if XNA || WINDOWSDX\n        [Test]\n        public void DrawInstancedPrimitivesParameterValidation()\n        {\n            var vertexBuffer = new VertexBuffer(\n                gd, VertexPositionColorTexture.VertexDeclaration,\n                3, BufferUsage.None);\n\n            VertexDeclaration instanceVertexDeclaration = new VertexDeclaration\n            (\n                new VertexElement(0, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 0),\n                new VertexElement(16, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 1),\n                new VertexElement(32, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 2),\n                new VertexElement(48, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 3)\n            );\n            var instanceBuffer = new VertexBuffer(\n                gd, instanceVertexDeclaration,\n                10, BufferUsage.None);\n\n            var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, 3, BufferUsage.None);\n\n            // No vertex shader or pixel shader.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1, 10));\n\n            Effect effect = AssetTestUtility.LoadEffect(content, \"Instancing\");\n            effect.Techniques[0].Passes[0].Apply();\n\n            // No vertexBuffers.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1, 10));\n\n            gd.SetVertexBuffers(\n                new VertexBufferBinding(vertexBuffer, 0, 0),\n                new VertexBufferBinding(instanceBuffer, 0, 1));\n\n            // No indexBuffer.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1, 10));\n\n            gd.Indices = indexBuffer;\n\n            // Success - \"normal\" usage.\n            Assert.DoesNotThrow(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1, 10));\n\n            // primitiveCount too small / large.\n            Assert.Throws<ArgumentOutOfRangeException>(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 0, 10));\n\n            effect.Dispose();\n            vertexBuffer.Dispose();\n            instanceBuffer.Dispose();\n            indexBuffer.Dispose();\n        }\n\n        [Test]\n        public void DrawInstancedPrimitivesVisualTest()\n        {\n            VertexBuffer vertexBuffer = null;\n            IndexBuffer indexBuffer = null;\n            VertexBuffer instanceVertexBuffer = null;\n            Matrix[] worldTransforms = null;\n            EffectPass pass = null;\n\n            // Create vertex and index buffer for a quad.\n            var vertices = new[]\n            {\n                new VertexPositionTexture(new Vector3(-1,  1, 0), new Vector2(0, 0)),\n                new VertexPositionTexture(new Vector3( 1,  1, 0), new Vector2(1, 0)),\n                new VertexPositionTexture(new Vector3(-1, -1, 0), new Vector2(0, 1)),\n                new VertexPositionTexture(new Vector3( 1, -1, 0), new Vector2(1, 1)),\n            };\n            vertexBuffer = new VertexBuffer(\n                gd, VertexPositionTexture.VertexDeclaration,\n                4, BufferUsage.None);\n            vertexBuffer.SetData(vertices);\n\n            var indices = new ushort[] { 0, 1, 2, 1, 3, 2 };\n            indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, 6, BufferUsage.None);\n            indexBuffer.SetData(indices);\n\n            // Create vertex buffer with instance data.\n            worldTransforms = new Matrix[8 * 4];\n            for (int i = 0; i < worldTransforms.Length; i++)\n            {\n                worldTransforms[i] = Matrix.CreateScale(0.4f) *\n                    Matrix.CreateRotationZ(0.05f * i) *\n                    Matrix.CreateTranslation(-3.5f + (i % 8), -1.5f + (int)(i / 8), 0);\n            }\n            VertexDeclaration instanceVertexDeclaration = new VertexDeclaration\n            (\n                new VertexElement(0, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 0),\n                new VertexElement(16, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 1),\n                new VertexElement(32, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 2),\n                new VertexElement(48, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 3)\n            );\n            instanceVertexBuffer = new VertexBuffer(gd, instanceVertexDeclaration, worldTransforms.Length, BufferUsage.None);\n            instanceVertexBuffer.SetData(worldTransforms);\n\n            var view = Matrix.CreateLookAt(new Vector3(0, 0, 6), new Vector3(0, 0, 0), Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(\n                MathHelper.PiOver4, gd.Viewport.AspectRatio, 0.1f, 100);\n\n            Effect effect = AssetTestUtility.LoadEffect(content, \"Instancing\");\n            effect.Parameters[\"View\"].SetValue(view);\n            effect.Parameters[\"Projection\"].SetValue(projection);\n            pass = effect.Techniques[0].Passes[0];\n\n            PrepareFrameCapture();\n\n            gd.Clear(Color.CornflowerBlue);\n\n            gd.SetVertexBuffers(\n                new VertexBufferBinding(vertexBuffer, 0, 0),\n                new VertexBufferBinding(instanceVertexBuffer, 0, 1));\n\n            gd.Indices = indexBuffer;\n\n            pass.Apply();\n\n            gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 6, 0, 2, worldTransforms.Length);\n\n            // There is a minor difference in the rasterization between XNA and DirectX. \n            Similarity = 0.98f;\n\n            CheckFrames();\n\n            effect.Dispose();\n            vertexBuffer.Dispose();\n            instanceVertexBuffer.Dispose();\n            indexBuffer.Dispose();\n        }\n#endif\n\n        [Test]\n        public void DrawUserPrimitivesParameterValidation()\n        {\n            var vertexDataNonEmpty = new[]\n            {\n                new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero),\n                new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero),\n                new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero)\n            };\n            var vertexDataEmpty = new VertexPositionColorTexture[0];\n\n            // No vertex shader or pixel shader.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 1));\n\n            var effect = new BasicEffect(gd);\n            effect.CurrentTechnique.Passes[0].Apply();\n\n            // Success - \"normal\" usage.\n            Assert.DoesNotThrow(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 1));\n\n            // Null vertexData.\n            DoDrawUserPrimitivesAsserts(null, 0, 1, d => Assert.Throws<ArgumentNullException>(d));\n\n            // Empty vertexData.\n            DoDrawUserPrimitivesAsserts(vertexDataEmpty, 0, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // vertexOffset too small / large.\n            DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, -1, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n            DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, 3, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // primitiveCount too small / large.\n            DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, 0, 0, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n            DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, 0, 2, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // vertexOffset + primitiveCount too large.\n            DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, 1, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // Null vertexDeclaration.\n            Assert.Throws<ArgumentNullException>(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 1, null));\n\n            effect.Dispose();\n        }\n\n        private void DoDrawUserPrimitivesAsserts(VertexPositionColorTexture[] vertexData, int vertexOffset, int primitiveCount, Action<TestDelegate> assertMethod)\n        {\n            assertMethod(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, primitiveCount));\n            assertMethod(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, primitiveCount, VertexPositionColorTexture.VertexDeclaration));\n        }\n\n        [Test]\n        public void DrawUserIndexedPrimitivesParameterValidation()\n        {\n            var vertexDataNonEmpty = new[]\n            {\n                new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero),\n                new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero),\n                new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero)\n            };\n            var vertexDataEmpty = new VertexPositionColorTexture[0];\n\n            var indexDataNonEmpty = new short[] { 0, 1, 2 };\n            var indexDataEmpty = new short[0];\n\n            // No vertex shader or pixel shader.\n            Assert.Throws<InvalidOperationException>(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1));\n\n            var effect = new BasicEffect(gd);\n            effect.CurrentTechnique.Passes[0].Apply();\n\n            // Success - \"normal\" usage.\n            Assert.DoesNotThrow(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1));\n\n            // Failure cases.\n\n            // Null vertexData.\n            DoDrawUserIndexedPrimitivesAsserts(null, 0, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws<ArgumentNullException>(d));\n\n            // Empty vertexData.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataEmpty, 0, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws<ArgumentNullException>(d));\n\n            // vertexOffset too small / large.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, -1, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 3, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // numVertices too small / large.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 0, indexDataNonEmpty, 0, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 4, indexDataNonEmpty, 0, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // vertexOffset + numVertices too large.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 1, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // Null indexData.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, null, 0, 1, d => Assert.Throws<ArgumentNullException>(d));\n\n            // Empty indexData.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataEmpty, 0, 1, d => Assert.Throws<ArgumentNullException>(d));\n\n            // indexOffset too small / large.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, -1, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 1, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // primitiveCount too small / large.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, -1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 0, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 2, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // indexOffset + primitiveCount too large.\n            DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 1, 1, d => Assert.Throws<ArgumentOutOfRangeException>(d));\n\n            // Null vertexDeclaration.\n            Assert.Throws<ArgumentNullException>(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1, null));\n\n            // Smaller vertex stride in VertexDeclaration than in actual vertices.\n\n            // XNA is inconsistent; in DrawUserIndexedPrimitives, it allows vertexStride to be less than the actual size of the data,\n            // but in VertexBuffer.SetData, XNA requires vertexStride to greater than or equal to the actual size of the data.\n            // Since we use a DynamicVertexBuffer to implement DrawUserIndexedPrimitives, we use the same validation in both places.\n            // The same applies to DrawUserPrimitives.\n#if XNA\n            Assert.DoesNotThrow(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1, VertexPositionColor.VertexDeclaration));\n            Assert.DoesNotThrow(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty.Select(x => (int) x).ToArray(), 0, 1, VertexPositionColor.VertexDeclaration));\n#else\n            Assert.Throws<ArgumentOutOfRangeException>(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1, VertexPositionColor.VertexDeclaration));\n            Assert.Throws<ArgumentOutOfRangeException>(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty.Select(x => (int) x).ToArray(), 0, 1, VertexPositionColor.VertexDeclaration));\n#endif\n            effect.Dispose();\n        }\n\n        private void DoDrawUserIndexedPrimitivesAsserts(VertexPositionColorTexture[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, Action<TestDelegate> assertMethod)\n        {\n            assertMethod(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount));\n            assertMethod(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, VertexPositionColorTexture.VertexDeclaration));\n\n            var intIndexData = (indexData == null) ? null : indexData.Select(x => (int) x).ToArray();\n            assertMethod(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, numVertices, intIndexData, indexOffset, primitiveCount));\n            assertMethod(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, numVertices, intIndexData, indexOffset, primitiveCount, VertexPositionColorTexture.VertexDeclaration));\n        }\n\n        [Test]\n#if DESKTOPGL\n        [Ignore(\"Vertex Textures are not implemented for OpenGL\")]\n#endif\n        public void VertexTexturesGetSet()\n        {\n            // TODO: The availability of vertex textures should depend on GraphicsProfile.\n\n#if XNA\n            var supportedVertexTextureFormats = new[]\n            {\n                SurfaceFormat.Single, \n                SurfaceFormat.Vector2, \n                SurfaceFormat.Vector4,\n                SurfaceFormat.HalfSingle, \n                SurfaceFormat.HalfVector2, \n                SurfaceFormat.HalfVector4,\n                SurfaceFormat.HdrBlendable\n            };\n#else\n            var supportedVertexTextureFormats = Enum.GetValues(typeof(SurfaceFormat)).Cast<SurfaceFormat>().ToArray();\n#endif\n            foreach (var format in Enum.GetValues(typeof(SurfaceFormat)).Cast<SurfaceFormat>())\n            {\n                var texture = new Texture2D(gd, 4, 4, false, format);\n\n                if (supportedVertexTextureFormats.Contains(format))\n                {\n                    gd.VertexTextures[0] = texture;\n                    var retrievedTexture = gd.VertexTextures[0];\n                    Assert.That(retrievedTexture, Is.SameAs(texture));\n                }\n                else\n                {\n                    Assert.Throws<NotSupportedException>(() =>\n                        gd.VertexTextures[0] = texture);\n                }\n            }\n        }\n\n        private struct VertexPosition2 : IVertexType\n        {\n            public Vector2 Position;\n\n            public static readonly VertexDeclaration VertexDeclaration = new VertexDeclaration(\n                new VertexElement(0, VertexElementFormat.Vector2, VertexElementUsage.Position, 0));\n\n            VertexDeclaration IVertexType.VertexDeclaration\n            {\n                get { return VertexDeclaration; }\n            }\n        }\n\n        [Test]\n#if DESKTOPGL\n        [Ignore(\"Vertex Textures are not implemented for OpenGL\")]\n#endif\n        public void VertexTextureVisualTest()\n        {\n            // Implements an extremely simple terrain that reads from a heightmap in the vertex shader.\n            PrepareFrameCapture();\n\n            const int heightMapSize = 64;\n            var heightMapTexture = new Texture2D(gd, heightMapSize, heightMapSize, false, SurfaceFormat.Single);\n            var heightMapData = new float[heightMapSize * heightMapSize];\n            for (var y = 0; y < heightMapSize; y++)\n                for (var x = 0; x < heightMapSize; x++)\n                    heightMapData[(y * heightMapSize) + x] = (float) Math.Sin(x / 2.0f) + (float) Math.Sin(y / 3.0f);\n            heightMapTexture.SetData(heightMapData);\n\n            var viewMatrix = Matrix.CreateLookAt(new Vector3(32, 10, 60), new Vector3(32, 0, 30), Vector3.Up);\n            var projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4,\n                gd.Viewport.AspectRatio, 1.0f, 100.0f);\n\n            Effect effect = AssetTestUtility.LoadEffect(content, \"VertexTextureEffect\");\n            effect.Parameters[\"WorldViewProj\"].SetValue(viewMatrix * projectionMatrix);\n            effect.Parameters[\"HeightMapTexture\"].SetValue(heightMapTexture);\n            effect.Parameters[\"HeightMapSize\"].SetValue((float) heightMapSize);\n\n            effect.CurrentTechnique.Passes[0].Apply();\n\n            const int numVertices = heightMapSize * heightMapSize;\n            var vertexBuffer = new VertexBuffer(gd, typeof(VertexPosition2), numVertices, BufferUsage.WriteOnly);\n            var vertices = new VertexPosition2[numVertices];\n            for (var y = 0; y < heightMapSize; y++)\n                for (var x = 0; x < heightMapSize; x++)\n                    vertices[(y * heightMapSize) + x] = new VertexPosition2 { Position = new Vector2(x, y) };\n            vertexBuffer.SetData(vertices);\n            gd.SetVertexBuffer(vertexBuffer);\n\n            const int numIndices = (heightMapSize - 1) * (heightMapSize - 1) * 2 * 3;\n            var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, numIndices, BufferUsage.WriteOnly);\n            var indexData = new short[numIndices];\n            var indexIndex = 0;\n            for (short y = 0; y < heightMapSize - 1; y++)\n                for (short x = 0; x < heightMapSize - 1; x++)\n                {\n                    var baseIndex = (short) ((y * heightMapSize) + x);\n\n                    indexData[indexIndex++] = baseIndex;\n                    indexData[indexIndex++] = (short) (baseIndex + heightMapSize);\n                    indexData[indexIndex++] = (short) (baseIndex + 1);\n\n                    indexData[indexIndex++] = (short) (baseIndex + 1);\n                    indexData[indexIndex++] = (short) (baseIndex + heightMapSize);\n                    indexData[indexIndex++] = (short) (baseIndex + heightMapSize + 1);\n                }\n            indexBuffer.SetData(indexData);\n            gd.Indices = indexBuffer;\n\n            gd.RasterizerState = RasterizerState.CullNone;\n\n            gd.Clear(Color.CornflowerBlue);\n\n            gd.DrawIndexedPrimitives(PrimitiveType.TriangleList,\n                0, 0, numVertices, 0, numIndices / 3);\n\n            CheckFrames();\n\n            effect.Dispose();\n            vertexBuffer.Dispose();\n            indexBuffer.Dispose();\n        }\n\n        [Test]\n#if DESKTOPGL\n        [Ignore(\"Vertex samplers are not implemented for OpenGL\")]\n#endif\n        public void VertexSamplerStatesGetSet()\n        {\n            var samplerState = new SamplerState { Filter = TextureFilter.Point };\n            gd.VertexSamplerStates[0] = samplerState;\n\n            var retrievedSamplerState = gd.VertexSamplerStates[0];\n            Assert.That(retrievedSamplerState, Is.SameAs(samplerState));\n\n            samplerState.Dispose();\n        }\n\n        [Test]\n        public void PresentInvalidOperationException()\n        {\n            // This should work else it means we had\n            // some bad state to start this test!\n            gd.Present();\n\n            // You can't call present with a RT set.\n            var rt = new RenderTarget2D(gd, 100, 100);\n            gd.SetRenderTarget(rt);\n            Assert.Throws<InvalidOperationException>(() => gd.Present());\n\n            // Set the default RT and present works again.\n            gd.SetRenderTarget(null);\n            gd.Present();\n\n            // Cleanup.\n            rt.Dispose();\n        }\n\n#if DESKTOPGL\n        [Test]\n        public void DifferentVboGetsSet()\n        {\n            var vb1 = new VertexBuffer(gd, VertexPosition.VertexDeclaration, 6, BufferUsage.None);\n            var vb2 = new VertexBuffer(gd, VertexPosition.VertexDeclaration, 8, BufferUsage.None);\n\n            var se = new SpriteEffect(gd);\n            se.CurrentTechnique.Passes[0].Apply();\n\n            gd.SetVertexBuffer(vb1);\n            gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);\n\n            var GL = ((IPlatformGraphicsContext) ((IPlatformGraphicsDevice)gd).Strategy.CurrentContext).Strategy.ToConcrete<ConcreteGraphicsContext>().GL;\n\n            int vbo;\n            GL.GetInteger(GetPName.ArrayBufferBinding, out vbo);\n            Assert.AreEqual(((IPlatformVertexBuffer)vb1).Strategy.ToConcrete<ConcreteVertexBuffer>().GLVertexBuffer, vbo);\n\n            gd.SetVertexBuffer(vb2);\n            gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);\n\n            GL.GetInteger(GetPName.ArrayBufferBinding, out vbo);\n            Assert.AreEqual(((IPlatformVertexBuffer)vb2).Strategy.ToConcrete<ConcreteVertexBuffer>().GLVertexBuffer, vbo);\n\n            se.Dispose();\n            vb1.Dispose();\n            vb2.Dispose();\n        }\n#endif\n\n        private static Rectangle?[] BackBufferRects()\n        {\n            return new Rectangle?[]\n            {\n                null,\n                new Rectangle(100, 100, 250, 250),\n            };\n        }\n\n        [TestCaseSource(\"BackBufferRects\")]\n        public void GetBackBufferData(Rectangle? rectangle)\n        {\n            gd.Clear(Color.CornflowerBlue);\n\n            Rectangle rect;\n            if (rectangle == null)\n                rect = gd.Viewport.Bounds;\n            else\n                rect = rectangle.Value;\n\n            var tex = content.Load<Texture2D>(Paths.Texture(\"Surge\"));\n            var sb = new SpriteBatch(gd);\n\n            sb.Begin();\n            sb.Draw(tex, new Rectangle(150, 150, 300, 300), Color.White);\n            sb.End();\n\n            var buffer = new Color[rect.Width * rect.Height];\n            gd.GetBackBufferData(rect, buffer, 0, rect.Width * rect.Height);\n\n            var backbufferTex = new Texture2D(gd, rect.Width, rect.Height);\n            backbufferTex.SetData(buffer);\n\n            PrepareFrameCapture();\n            gd.Clear(Color.Red);\n\n            sb.Begin();\n            sb.Draw(backbufferTex, rect, Color.White);\n            sb.End();\n\n            CheckFrames();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/IndexBufferTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class IndexBufferTest: GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void ShouldSetAndGetData()\n        {   \n            var savedData = new short[] { 1, 2, 3, 4 };\n            var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None);\n            indexBuffer.SetData(savedData);\n\n            var readData = new short[4];\n            indexBuffer.GetData(readData, 0, 4);\n            Assert.AreEqual(savedData, readData);\n            \n            indexBuffer.Dispose();\n        }\n\n        [Test]\n        public void ShouldSetAndGetData_elementCount()\n        {\n            var savedData = new short[] { 1, 2, 3, 4 };\n            var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None);\n            indexBuffer.SetData(savedData);\n            \n            var readData = new short[4];\n            indexBuffer.GetData(readData, 0, 2);\n            Assert.AreEqual(1, readData[0]);\n            Assert.AreEqual(2, readData[1]);\n            Assert.AreEqual(0, readData[2]);\n            Assert.AreEqual(0, readData[3]);\n\n            indexBuffer.Dispose();\n        }\n\n        [Test]\n        public void ShouldSetAndGetData_startIndex()\n        {\n            var savedData = new short[] { 1, 2, 3, 4 };\n            var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None);\n            indexBuffer.SetData(savedData);\n\n            var readData = new short[4];\n            indexBuffer.GetData(readData, 2, 2);\n            Assert.AreEqual(0, readData[0]);\n            Assert.AreEqual(0, readData[1]);\n            Assert.AreEqual(1, readData[2]);\n            Assert.AreEqual(2, readData[3]);\n\n            indexBuffer.Dispose();\n        }\n\n        [Test]\n        public void ShouldSetAndGetData_offsetInBytes()\n        {\n            var savedData = new short[] { 1, 2, 3, 4 };\n            var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None);\n            indexBuffer.SetData(savedData);\n\n            var readData = new short[2];\n            indexBuffer.GetData(sizeof(short) * 2, readData, 0, 2);\n            Assert.AreEqual(3, readData[0]);\n            Assert.AreEqual(4, readData[1]);\n\n            indexBuffer.Dispose();\n        }\n\n\n        struct TriangleIndices16\n        {\n            public short A, B, C;\n\n            public TriangleIndices16(short a, short b, short c)\n            {\n                this.A = a;\n                this.B = b;\n                this.C = c;\n            }\n\n            public int VertexStride { get { return (sizeof(short)) * 3; } }\n\n            public override string ToString()\n            {\n                return String.Format(\"A:{0,4} B:{1,4} C:{2,4}\", A, B, C);\n            }\n        }\n\n        [Test]\n        public void ShouldSetAndGetStructData()\n        {\n            short[] savedData = new short[] { 1, 2, 3, 4, 5, 6 };\n            IndexBuffer indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None);\n            indexBuffer.SetData(savedData);\n\n            TriangleIndices16[] readData = new TriangleIndices16[2];\n            indexBuffer.GetData(readData, 0, 2);\n            Assert.AreEqual(savedData[0], readData[0].A);\n            Assert.AreEqual(savedData[1], readData[0].B);\n            Assert.AreEqual(savedData[2], readData[0].C);\n            Assert.AreEqual(savedData[3], readData[1].A);\n            Assert.AreEqual(savedData[4], readData[1].B);\n            Assert.AreEqual(savedData[5], readData[1].C);\n\n            indexBuffer.Dispose();\n        }\n\n        [Test]\n        public void ShouldSetStructAndGetData()\n        {\n            TriangleIndices16[] savedData = new TriangleIndices16[] { new TriangleIndices16(1,2,3), new TriangleIndices16(4, 5, 6) };\n            IndexBuffer indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length*3, BufferUsage.None);\n            indexBuffer.SetData(savedData);\n\n            short[] readData = new short[6];\n            indexBuffer.GetData(readData, 0, 6);\n            Assert.AreEqual(savedData[0].A, readData[0]);\n            Assert.AreEqual(savedData[0].B, readData[1]);\n            Assert.AreEqual(savedData[0].C, readData[2]);\n            Assert.AreEqual(savedData[1].A, readData[3]);\n            Assert.AreEqual(savedData[1].B, readData[4]);\n            Assert.AreEqual(savedData[1].C, readData[5]);\n\n            indexBuffer.Dispose();\n        }\n\n        [Test]\n        public void ShouldDynamicSetAndGetStructData()\n        {\n            short[] savedData = new short[] { 1, 2, 3, 4, 5, 6 };\n            IndexBuffer indexBuffer = new DynamicIndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None);\n            indexBuffer.SetData(savedData);\n\n            TriangleIndices16[] readData = new TriangleIndices16[2];\n            indexBuffer.GetData(readData, 0, 2);\n            Assert.AreEqual(savedData[0], readData[0].A);\n            Assert.AreEqual(savedData[1], readData[0].B);\n            Assert.AreEqual(savedData[2], readData[0].C);\n            Assert.AreEqual(savedData[3], readData[1].A);\n            Assert.AreEqual(savedData[4], readData[1].B);\n            Assert.AreEqual(savedData[5], readData[1].C);\n\n            indexBuffer.Dispose();\n        }\n\n        [Test]\n        public void ShouldDynamicSetStructAndGetData()\n        {\n            TriangleIndices16[] savedData = new TriangleIndices16[] { new TriangleIndices16(1, 2, 3), new TriangleIndices16(4, 5, 6) };\n            IndexBuffer indexBuffer = new DynamicIndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length*3, BufferUsage.None);\n            indexBuffer.SetData(savedData);\n\n            short[] readData = new short[6];\n            indexBuffer.GetData(readData, 0, 6);\n            Assert.AreEqual(savedData[0].A, readData[0]);\n            Assert.AreEqual(savedData[0].B, readData[1]);\n            Assert.AreEqual(savedData[0].C, readData[2]);\n            Assert.AreEqual(savedData[1].A, readData[3]);\n            Assert.AreEqual(savedData[1].B, readData[4]);\n            Assert.AreEqual(savedData[1].C, readData[5]);\n\n            indexBuffer.Dispose();\n        }\n\n        [Test]\n        public void NullDeviceShouldThrowArgumentNullException()\n        {\n            Assert.Throws<ArgumentNullException>(() => \n            {\n                var indexBuffer = new IndexBuffer(null, IndexElementSize.SixteenBits, 3, BufferUsage.None);\n                indexBuffer.Dispose();\n            });\n            GC.GetTotalMemory(true); // collect uninitialized IndexBuffer\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/MiscellaneousTests.cs",
    "content": "﻿using Kni.Tests.Components;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    internal class MiscellaneousTests : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void Colored3DCube()\n        {\n            PrepareFrameCapture();\n\n            var cube = new Colored3DCubeComponent(gd);\n            cube.LoadContent();\n            cube.Draw();\n            cube.UnloadContent();\n\n            CheckFrames();\n        }\n    }\n}"
  },
  {
    "path": "Tests/Framework.Graphics/ModelTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Kni.Tests.Graphics\n{\n\n    [TestFixture]\n    internal sealed class ModelTest : GraphicsDeviceTestFixtureBase\n    {\n        // model exported from default blender project.\n        Model model;\n\n        // cube embedded in default blender project.\n        ModelMesh cube;\n\n        [SetUp]\n        public void Initialize()\n        {\n            model = content.Load<Model>(Paths.Model(\"BlenderDefaultCube\"));\n\n            // model is generated by Blender so by default inside is already named cube.\n            // let's extract them by name to incrise code coverage in ModelMeshCollection.\n            cube = model.Meshes[\"Cube\"];\n        }\n\n        [Test]\n        public void ShouldDrawSampleModel()\n        {\n            // model contains a bit more that only the cube, so let extract the cube\n            // to set transformation matrix. It is necessary to make the cube visible.\n            var cubeBone = model.Bones[1];\n            cubeBone.Transform = Matrix.Identity;\n\n            // let's make the model colored in red and lighted\n            var effect = (BasicEffect)model.Meshes[0].Effects[0];\n            effect.DiffuseColor = Color.Red.ToVector3();\n            effect.EnableDefaultLighting();\n\n            var world = Matrix.Identity;\n            var view = Matrix.CreateLookAt(new Vector3(5, 5, 5), new Vector3(0, 0, 0), Vector3.Up);\n            var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, gd.Viewport.AspectRatio, 0.1f, 100.0f);\n\n            PrepareFrameCapture();\n\n            model.Draw(world, view, projection);\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void MeshPartEffectReplacesOldOneOnParentModel()\n        {\n            // simple model used in test\n            Assume.That(cube.Effects.Count, Is.EqualTo(1));\n\n            var newEffect = new BasicEffect(gd);\n            Assume.That(cube.Effects[0], Is.Not.EqualTo(newEffect));\n\n            cube.MeshParts[0].Effect = newEffect;\n            Assert.That(cube.Effects.Count, Is.EqualTo(1));\n            Assert.That(cube.Effects[0], Is.EqualTo(newEffect));\n        }\n\n#if !XNA // Tests below are valid for KNI only because of manual model creation.\n\n        [Test]\n        public void ShouldConstructAndInitialize()\n        {\n            var actual = new Model(new List<ModelBone>(), new List<ModelMesh>());\n\n            Assert.That(actual.Bones, Is.Empty, \"bones initial list is converted to Bones collection\");\n            Assert.That(actual.Meshes, Is.Empty, \"meshes initial list is converted to Meshes collection\");\n        }\n\n        [Test]\n        public void ShouldNotConstructWhenParamsAreNotValid()\n        {\n            // simple empty collections to make code more readable.\n            var emptyBonesList = new List<ModelBone>();\n            var emptyMeshesList = new List<ModelMesh>();\n\n            // testing constructor's defined exceptions.\n            Assert.Throws<ArgumentNullException>(() => new Model(null, emptyMeshesList));\n            Assert.Throws<ArgumentNullException>(() => new Model(emptyBonesList, null));\n        }\n\n        [Test]\n        public void ShouldReadTransformationsFromBones()\n        {\n            List<ModelBone> someBones = new ModelBone[] \n            { \n                new ModelBone(),\n                new ModelBone()\n            }.ToList();\n            Model model = new Model(someBones, new List<ModelMesh>());\n\n            Matrix[] expected = new Matrix[] { Matrix.Identity * 1, Matrix.Identity * 2 };\n            Matrix[] actual = new Matrix[2];\n            Assume.That(actual, Is.Not.EqualTo(expected));\n\n            model.CopyBoneTransformsFrom(expected);\n            model.CopyBoneTransformsTo(actual);\n\n            Assert.That(actual, Is.EqualTo(expected));\n        }\n\n        [Test]\n        public void CopyBoneTransformsFrom_Exceptions()\n        {\n            List<ModelBone> someBones = new ModelBone[]\n            { \n                new ModelBone() \n            }.ToList();\n            Model model = new Model(someBones, new List<ModelMesh>());\n\n            Assert.Throws<ArgumentNullException>(() => model.CopyBoneTransformsFrom(null));\n            Assert.Throws<ArgumentOutOfRangeException>(() => model.CopyBoneTransformsFrom(new Matrix[0]));\n        }\n\n        [Test]\n        public void CopyBoneTransformsTo_Exceptions()\n        {\n            List<ModelBone> someBones = new ModelBone[]\n            {\n                new ModelBone()\n            }.ToList();\n            Model model = new Model(someBones, new List<ModelMesh>());\n\n            Assert.Throws<ArgumentNullException>(() => model.CopyBoneTransformsTo(null));\n            Assert.Throws<ArgumentOutOfRangeException>(() => model.CopyBoneTransformsTo(new Matrix[0]));\n        }\n\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/OcclusionQueryTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class OcclusionQueryTest : GraphicsDeviceTestFixtureBase\n    {\n\n        [Test]\n        public void ConstructorsAndProperties()\n        {\n            Assert.Throws<ArgumentNullException>(() => new OcclusionQuery(null));\n\n            var occlusionQuery = new OcclusionQuery(gd);\n\n            Assert.IsFalse(occlusionQuery.IsComplete);\n\n            Assert.Throws<InvalidOperationException>(\n                () => { var n = occlusionQuery.PixelCount; },\n                \"PixelCount throws when query not yet started.\");\n\n            occlusionQuery.Dispose();\n        }\n\n        [Test]\n        public void MismatchedBeginEnd()\n        {\n            var occlusionQuery = new OcclusionQuery(gd);\n\n            Assert.Throws<InvalidOperationException>(() => occlusionQuery.End());\n\n            occlusionQuery.Begin();\n            Assert.Throws<InvalidOperationException>(() => occlusionQuery.Begin());\n\n            occlusionQuery.Dispose();\n        }\n\n        [Test]\n        public void QueryOccludedSprites()\n        {\n            var spriteBatch = new SpriteBatch(gd);\n            var whiteTexture = content.Load<Texture2D>(Paths.Texture(\"white-64\"));\n\n            var occlusionQuery = new OcclusionQuery(gd);\n\n            var state = 0;\n            var queryFrameCount = 0;\n\n            Action<int> action = frameNr =>\n            {\n                gd.Clear(Color.CornflowerBlue);\n\n                // White rectangle at depth 0.\n                spriteBatch.Begin(SpriteSortMode.Immediate, null, null, DepthStencilState.Default, null);\n                spriteBatch.Draw(whiteTexture, new Rectangle(100, 100, 100, 100), null, Color.White, 0, Vector2.Zero,\n                    SpriteEffects.None, 0);\n                spriteBatch.End();\n\n                switch (state)\n                {\n                    case 0:\n                        // Make query with red rectangle, 50% occluded.\n                        occlusionQuery.Begin();\n                        spriteBatch.Begin(SpriteSortMode.Immediate, null, null, DepthStencilState.Default, null);\n                        spriteBatch.Draw(whiteTexture, new Rectangle(50, 100, 100, 100), null, Color.Red, 0, Vector2.Zero,\n                            SpriteEffects.None, 1);\n                        spriteBatch.End();\n                        occlusionQuery.End();\n                        state = 1;\n                        queryFrameCount = 0;\n                        break;\n                    case 1:\n                        queryFrameCount++;\n\n                        if (queryFrameCount > 5)\n                            Assert.Fail(\"Occlusion query did not complete.\");\n\n                        if (occlusionQuery.IsComplete)\n                        {\n                            Assert.AreEqual(100*100/2, occlusionQuery.PixelCount);\n                            Console.WriteLine(\"First occlusionQuery completed in {0} frames\", queryFrameCount);\n                            state = 2;\n                        }\n                        break;\n                    case 2:\n                        // Same results as last frame.\n                        Assert.IsTrue(occlusionQuery.IsComplete);\n                        Assert.AreEqual(100*100/2, occlusionQuery.PixelCount);\n\n                        // Reuse query a second time, 10% occlusion.\n                        occlusionQuery.Begin();\n                        spriteBatch.Begin(SpriteSortMode.Immediate, null, null, DepthStencilState.Default, null);\n                        spriteBatch.Draw(whiteTexture, new Rectangle(10, 100, 100, 100), null, Color.Red, 0, Vector2.Zero,\n                            SpriteEffects.None, 1);\n                        spriteBatch.End();\n                        occlusionQuery.End();\n                        state = 3;\n                        queryFrameCount = 0;\n                        break;\n                    case 3:\n                        queryFrameCount++;\n\n                        if (queryFrameCount > 5)\n                            Assert.Fail(\"Occlusion query did not complete.\");\n\n                        if (occlusionQuery.IsComplete)\n                        {\n                            Assert.AreEqual(100*100*9/10, occlusionQuery.PixelCount);\n                            Console.WriteLine(\"Second occlusionQuery completed in {0} frames\", queryFrameCount);\n                            state = 4;\n                        }\n                        break;\n                }\n            };\n\n            Predicate<int> exitCondition = frame => state == 4 || frame > 15;\n            \n            DoGameLoop(action, exitCondition);\n\n            spriteBatch.Dispose();\n            whiteTexture.Dispose();\n            occlusionQuery.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/ProfileReachTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class ProfileReachTest\n    {\n        const GraphicsProfile TestedProfile = GraphicsProfile.Reach;\n        const int PowerOfTwoSize = 32;\n        const int MaxTexture2DSize = 2048;\n        const int MaxTextureCubeSize = 512;\n        const int MaxPrimitives = 65535;\n        const int MaxRenderTargets = 1;\n\n        private TestGameBase _game;\n        private GraphicsDeviceManager _gdm;\n        private GraphicsDevice _gd;\n\n\n        [SetUp]\n        public virtual void SetUp()\n        {\n            _game = new TestGameBase();\n            _gdm = new GraphicsDeviceManager(_game);\n            _gdm.GraphicsProfile = GraphicsProfile.Reach;\n            _game.InitializeOnly();\n            _gd = _gdm.GraphicsDevice;\n        }\n\n        [TearDown]\n        public virtual void TearDown()\n        {\n            _game.Dispose();\n            _game = null;\n            _gdm = null;\n            _gd = null;\n        }\n        \n        /// <summary>\n        /// Ensure we have the correct profile\n        /// </summary>\n        private void CheckProfile()\n        {\n            Assert.AreEqual(_gd.GraphicsProfile, TestedProfile);\n        }\n\n\n        [TestCase(MaxTexture2DSize,   MaxTexture2DSize,   false, SurfaceFormat.Color)]\n        [TestCase(MaxTexture2DSize,   MaxTexture2DSize-1, false, SurfaceFormat.Color)]\n        [TestCase(MaxTexture2DSize-1, MaxTexture2DSize  , false, SurfaceFormat.Color)]\n        [TestCase(MaxTexture2DSize-1, MaxTexture2DSize-1, false, SurfaceFormat.Color)]\n        [TestCase(PowerOfTwoSize,   PowerOfTwoSize,   true,  SurfaceFormat.Color)]\n        [TestCase(PowerOfTwoSize,   PowerOfTwoSize,   false, SurfaceFormat.Dxt1 )]\n        [TestCase(PowerOfTwoSize,   PowerOfTwoSize,   false, SurfaceFormat.Dxt3 )]     \n        [TestCase(PowerOfTwoSize,   PowerOfTwoSize,   false, SurfaceFormat.Dxt5 )]\n        public void Texture2DSize(int width, int height, bool mipMap, SurfaceFormat surfaceFormat = SurfaceFormat.Color)\n        {\n            CheckProfile();\n\n            Texture2D tx = new Texture2D(_gd, width, height, mipMap, surfaceFormat);\n            tx.Dispose();\n        }\n\n        \n        [TestCase(MaxTexture2DSize,   MaxTexture2DSize+1, false, SurfaceFormat.Color)]\n        [TestCase(MaxTexture2DSize+1, MaxTexture2DSize,   false, SurfaceFormat.Color)]\n        [TestCase(MaxTexture2DSize+1, MaxTexture2DSize+1, false, SurfaceFormat.Color)]\n        [TestCase(PowerOfTwoSize,   PowerOfTwoSize-1, true,  SurfaceFormat.Color)]\n        [TestCase(PowerOfTwoSize-1, PowerOfTwoSize  , true,  SurfaceFormat.Color)]\n        [TestCase(PowerOfTwoSize-1, PowerOfTwoSize-1, true,  SurfaceFormat.Color)]\n        [TestCase(PowerOfTwoSize,   PowerOfTwoSize-4, false, SurfaceFormat.Dxt1)]\n        [TestCase(PowerOfTwoSize-4, PowerOfTwoSize  , false, SurfaceFormat.Dxt1)]\n        [TestCase(PowerOfTwoSize-4, PowerOfTwoSize-4, false, SurfaceFormat.Dxt1)]\n        [TestCase(PowerOfTwoSize,   PowerOfTwoSize-4, false, SurfaceFormat.Dxt3)]\n        [TestCase(PowerOfTwoSize-4, PowerOfTwoSize  , false, SurfaceFormat.Dxt3)]\n        [TestCase(PowerOfTwoSize-4, PowerOfTwoSize-4, false, SurfaceFormat.Dxt3)] \n        [TestCase(PowerOfTwoSize,   PowerOfTwoSize-4, false, SurfaceFormat.Dxt5)]\n        [TestCase(PowerOfTwoSize-4, PowerOfTwoSize  , false, SurfaceFormat.Dxt5)]\n        [TestCase(PowerOfTwoSize-4, PowerOfTwoSize-4, false, SurfaceFormat.Dxt5)]\n        public void Texture2DSize_ThrowsNotSupportedException(int width, int height, bool mipMap, SurfaceFormat surfaceFormat = SurfaceFormat.Color)\n        {\n            Assert.Throws<NotSupportedException>( ()=> Texture2DSize(width, height, mipMap, surfaceFormat) );\n        }\n        \n        [TestCase(MaxTextureCubeSize  )]\n        [TestCase(MaxTextureCubeSize/2)]\n        public void TextureCubeSize(int size)\n        {\n            CheckProfile();\n            \n            TextureCube tx = new TextureCube(_gd, size, false, SurfaceFormat.Color);\n            tx.Dispose();\n        }\n        \n        [TestCase(MaxTextureCubeSize*2)]        \n        [TestCase(MaxTextureCubeSize+1)] // nonPowerOfTwo or maxSize\n        [TestCase(MaxTextureCubeSize+4)] // nonPowerOfTwo or maxSize\n        [TestCase(PowerOfTwoSize-4    )]\n        public void TextureCubeSize_ThrowsNotSupportedException(int size)\n        {\n            Assert.Throws<NotSupportedException>( ()=> TextureCubeSize(size) );\n        }\n        \n        [TestCase(16, 16, 16)]\n        public void Texture3DSize_ThrowsNotSupportedException(int width, int height, int depth)\n        {\n            CheckProfile();\n                        \n            Assert.Throws<NotSupportedException>(()=>\n            { \n                Texture3D tx = new Texture3D(_gd, width, height, depth, false, SurfaceFormat.Color);            \n                tx.Dispose();\n            });\n        }\n        \n        [TestCase(SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Bgr565)]\n        [TestCase(SurfaceFormat.Bgra5551)]\n        [TestCase(SurfaceFormat.Bgra4444)]\n        [TestCase(SurfaceFormat.Dxt1)]\n        [TestCase(SurfaceFormat.Dxt3)]\n        [TestCase(SurfaceFormat.Dxt5)]\n#if !DESKTOPGL // NormalizedByte2 & NormalizedByte4 are not implemented under OpenGL\n        [TestCase(SurfaceFormat.NormalizedByte2)]\n        [TestCase(SurfaceFormat.NormalizedByte4)]\n#endif\n        public void Texture2DSurface(SurfaceFormat surfaceFormat)\n        {\n            CheckProfile();\n\n            Texture2D tx = new Texture2D(_gd, 16, 16, false, surfaceFormat);\n            tx.Dispose();\n        }\n\n        [TestCase(SurfaceFormat.Rgba1010102)]\n        [TestCase(SurfaceFormat.Rg32)]\n        [TestCase(SurfaceFormat.Rgba64)]\n        [TestCase(SurfaceFormat.Alpha8)]\n        [TestCase(SurfaceFormat.Single)]\n        [TestCase(SurfaceFormat.Vector2)]\n        [TestCase(SurfaceFormat.Vector4)]\n        [TestCase(SurfaceFormat.HalfSingle)]\n        [TestCase(SurfaceFormat.HalfVector2)]\n        [TestCase(SurfaceFormat.HalfVector4)]\n        [TestCase(SurfaceFormat.HdrBlendable)]\n        public void Texture2DSurface_ThrowsNotSupportedException(SurfaceFormat surfaceFormat)\n        {\n            Assert.Throws<NotSupportedException>(() => Texture2DSurface(surfaceFormat));\n        }\n\n        [TestCase(SurfaceFormat.Color)]\n        public void Texture3DSurface_ThrowsNotSupportedException(SurfaceFormat surfaceFormat)\n        {\n            CheckProfile();\n                        \n            Assert.Throws<NotSupportedException>(()=>\n            {\n                Texture3D tx = new Texture3D(_gd, 16, 16, 16, false, surfaceFormat);\n                tx.Dispose();                \n            });\n        }\n\n        [TestCase(SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Bgr565)]\n        [TestCase(SurfaceFormat.Bgra5551)]\n        [TestCase(SurfaceFormat.Bgra4444)]\n        [TestCase(SurfaceFormat.Dxt1)]\n        [TestCase(SurfaceFormat.Dxt3)]\n        [TestCase(SurfaceFormat.Dxt5)]\n        public void TextureCubeSurface(SurfaceFormat surfaceFormat)\n        {\n            CheckProfile();\n\n            TextureCube tx = new TextureCube(_gd, 16, false, surfaceFormat);\n            tx.Dispose();\n        }\n\n        [TestCase(SurfaceFormat.NormalizedByte2)]\n        [TestCase(SurfaceFormat.NormalizedByte4)]\n        [TestCase(SurfaceFormat.Rgba1010102)]\n        [TestCase(SurfaceFormat.Rg32)]\n        [TestCase(SurfaceFormat.Rgba64)]\n        [TestCase(SurfaceFormat.Alpha8)]\n        [TestCase(SurfaceFormat.Single)]\n        [TestCase(SurfaceFormat.Vector2)]\n        [TestCase(SurfaceFormat.Vector4)]\n        [TestCase(SurfaceFormat.HalfSingle)]\n        [TestCase(SurfaceFormat.HalfVector2)]\n        [TestCase(SurfaceFormat.HalfVector4)]\n        [TestCase(SurfaceFormat.HdrBlendable)]\n        public void TextureCubeSurface_ThrowsNotSupportedException(SurfaceFormat surfaceFormat)\n        {\n            Assert.Throws<NotSupportedException>( ()=> TextureCubeSurface(surfaceFormat) );\n        }\n\n        [TestCase(SurfaceFormat.Color, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Rgba1010102, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Rg32, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Rgba64, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Alpha8, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Single, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Vector2, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Vector4, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.HalfSingle, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.HalfVector2, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.HalfVector4, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.HdrBlendable, SurfaceFormat.Color)]\n        public void RenderTarget2DSurface(SurfaceFormat preferredFormat, SurfaceFormat expectedFallbackFormat)\n        {\n            CheckProfile();\n\n            RenderTarget2D tx = new RenderTarget2D(_gd, 16, 16, false, preferredFormat, DepthFormat.None);\n            Assert.AreEqual(tx.Format, expectedFallbackFormat);\n            tx.Dispose();\n        }\n\n        [TestCase(SurfaceFormat.Color, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Rgba1010102, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Rg32, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Rgba64, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Alpha8, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Single, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Vector2, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Vector4, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.HalfSingle, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.HalfVector2, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.HalfVector4, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.HdrBlendable, SurfaceFormat.Color)]\n        public void RenderTargetCubeSurface(SurfaceFormat preferredFormat, SurfaceFormat expectedFallbackFormat)\n        {\n            CheckProfile();\n\n            RenderTargetCube tx = new RenderTargetCube(_gd, 16, false, preferredFormat, DepthFormat.None);\n            Assert.AreEqual(tx.Format, expectedFallbackFormat);\n            tx.Dispose();\n        }\n        \n        [TestCase(\"DrawPrimitives\", 0, MaxPrimitives)]\n        [TestCase(\"DrawPrimitives\", 3, MaxPrimitives)]\n        [TestCase(\"DrawIndexedPrimitives\", 0, MaxPrimitives)]\n        [TestCase(\"DrawUserPrimitives\", 0, MaxPrimitives)]\n        [TestCase(\"DrawUserPrimitives\", 3, MaxPrimitives)]\n        [TestCase(\"DrawUserIndexedPrimitives\", 0, MaxPrimitives)]\n        public void MaximumPrimitivesPerDrawCall(string method, int vertexStart, int primitiveCount)\n        {\n            CheckProfile();\n\n            int verticesCount = vertexStart + 3*primitiveCount;\n            var effect = new BasicEffect(_gd);\n            effect.CurrentTechnique.Passes[0].Apply();\n            \n            switch(method)\n            {\n                case \"DrawPrimitives\":\n                    var vb = new VertexBuffer(_gd, VertexPositionColor.VertexDeclaration, verticesCount, BufferUsage.None);\n                    _gd.SetVertexBuffer(vb);\n                    _gd.DrawPrimitives(PrimitiveType.TriangleList, vertexStart, primitiveCount);\n                    vb.Dispose();\n                    break;\n                case \"DrawIndexedPrimitives\":\n                    var vb2 = new VertexBuffer(_gd, VertexPositionColor.VertexDeclaration, verticesCount, BufferUsage.None);\n                    var ib2 = new IndexBuffer(_gd, IndexElementSize.SixteenBits, verticesCount, BufferUsage.None);\n                    _gd.SetVertexBuffer(vb2);\n                    _gd.Indices = ib2;\n                    _gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, vertexStart, verticesCount, 0, primitiveCount);\n                    vb2.Dispose();\n                    ib2.Dispose();\n                    break;\n                case \"DrawUserPrimitives\":\n                    var vertices = new VertexPositionColor[verticesCount];\n                    _gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, vertexStart, primitiveCount);\n                    break;\n                case \"DrawUserIndexedPrimitives\":\n                    var vertices2 = new VertexPositionColor[verticesCount];\n                    var indices16bit = new short[verticesCount];\n                    _gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices2, 0, vertices2.Length, indices16bit, 0, primitiveCount);\n                    break;\n                case \"DrawUserIndexedPrimitives_32bit\":\n                    var vertices3 = new VertexPositionColor[verticesCount];\n                    var indices32bit = new int[verticesCount];\n                    _gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices3, 0, vertices3.Length, indices32bit, 0, primitiveCount);\n                    break;\n                default:\n                    throw new ArgumentException(\"method\");\n            }\n            \n            effect.Dispose();\n        }\n\n        [TestCase(\"DrawPrimitives\", 0, MaxPrimitives + 1)]\n        [TestCase(\"DrawIndexedPrimitives\", 0, MaxPrimitives + 1)]\n        [TestCase(\"DrawUserPrimitives\", 0, MaxPrimitives + 1)]\n        [TestCase(\"DrawUserIndexedPrimitives\", 0, MaxPrimitives + 1)]\n        public void MaximumPrimitivesPerDrawCall_ThrowsNotSupportedException(string method, int vertexStart, int primitiveCount)\n        {\n            Assert.Throws<NotSupportedException>( ()=> MaximumPrimitivesPerDrawCall(method, vertexStart, primitiveCount) );\n        }\n\n        [TestCase(IndexElementSize.SixteenBits)]\n        public void IndexBufferElementSize(IndexElementSize elementSize)\n        {\n            CheckProfile();\n\n            IndexBuffer ib = new IndexBuffer(_gd, elementSize, 16, BufferUsage.None);\n            ib.Dispose();\n        }\n\n        [TestCase(IndexElementSize.ThirtyTwoBits)]\n        public void IndexBufferElementSize_ThrowsNotSupportedException(IndexElementSize elementSize)\n        {\n            Assert.Throws<NotSupportedException>( ()=> IndexBufferElementSize(elementSize) );\n        }\n\n        [TestCase(IndexElementSize.SixteenBits)]\n        public void IndicesElementSize(IndexElementSize elementSize)\n        {\n            CheckProfile();\n\n            int verticesCount = 3 * 16;\n            var effect = new BasicEffect(_gd);\n            effect.CurrentTechnique.Passes[0].Apply();\n            var vertices = new VertexPositionColor[verticesCount];\n\n            switch (elementSize)\n            {\n                case IndexElementSize.SixteenBits:\n                    var indices16bit = new short[3 * 16];\n                    _gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices, 0, vertices.Length, indices16bit, 0, 16);\n                    break;\n                case IndexElementSize.ThirtyTwoBits:\n                    var indices32bit = new int[3 * 16];\n                    _gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices, 0, vertices.Length, indices32bit, 0, 16);\n                    break;\n                default:\n                    throw new ArgumentException(\"method\");\n            }\n            \n            effect.Dispose();\n        }\n        \n        [TestCase(IndexElementSize.ThirtyTwoBits)]\n        public void IndicesElementSize_ThrowsNotSupportedException(IndexElementSize elementSize)\n        {            \n            Assert.Throws<NotSupportedException>( ()=> IndicesElementSize(elementSize) );\n        }\n\n        [TestCase()]\n        public void OcclusionQuery_ThrowsNotSupportedException()\n        {\n            CheckProfile();\n\n            Assert.Throws<NotSupportedException>(()=>\n            { \n                var oc = new OcclusionQuery(_gd);\n                oc.Dispose();\n            });\n        }\n\n        [TestCase(MaxRenderTargets)]\n        public void MultipleRenderTargets(int count)\n        {\n            CheckProfile();\n            \n            var rtBinding = new RenderTargetBinding[count];\n            for(int i=0;i<count;i++)\n                rtBinding[i] = new RenderTargetBinding(new RenderTarget2D(_gd, PowerOfTwoSize, PowerOfTwoSize));\n\n            _gd.SetRenderTargets(rtBinding);\n\n            _gd.SetRenderTarget(null);\n            for(int i=0;i<count;i++)\n                rtBinding[i].RenderTarget.Dispose();\n        }\n\n        [TestCase(MaxRenderTargets + 1)]\n        public void MultipleRenderTargets_ThrowsNotSupportedException(int count)\n        {\n            Assert.Throws<NotSupportedException>( ()=> MultipleRenderTargets(count) );\n        }\n\n        [Test]\n        public void NonPowerOfTwoTextureShouldThrowTest()\n        {\n            CheckProfile();\n\n            BasicEffect effect = new BasicEffect(_gd);\n            effect.TextureEnabled = true;\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Texture2D texture0 = new Texture2D(_gd, 8, 9, false, SurfaceFormat.Color);\n            _gd.Textures[0] = texture0;\n\n            _gd.SamplerStates[0] = SamplerState.LinearWrap;\n\n            int vertexStart = 0;\n            int primitiveCount = 2;\n            int verticesCount = vertexStart + 3 * primitiveCount;\n            VertexBuffer vb = new VertexBuffer(_gd, VertexPositionColorTexture.VertexDeclaration, verticesCount, BufferUsage.None);\n            _gd.SetVertexBuffer(vb);\n            \n            Assert.Throws<NotSupportedException>(() => _gd.DrawPrimitives(PrimitiveType.TriangleList, vertexStart, primitiveCount) );\n\n            vb.Dispose();\n            effect.Dispose();\n        }\n\n        [Test]\n        public void NonPowerOfTwoUnusedTextureShouldNotThrowTest()\n        {\n            CheckProfile();\n\n            BasicEffect effect = new BasicEffect(_gd);\n            effect.TextureEnabled = true;\n            EffectPass effectPass = effect.CurrentTechnique.Passes[0];\n            effectPass.Apply();\n\n            Texture2D texture0 = new Texture2D(_gd, 8, 9, false, SurfaceFormat.Color);\n            Texture2D texture1 = new Texture2D(_gd, 9, 8, false, SurfaceFormat.Color);\n            _gd.Textures[0] = texture0;\n            _gd.Textures[1] = texture1;\n\n            _gd.SamplerStates[0] = SamplerState.LinearClamp;\n            _gd.SamplerStates[1] = SamplerState.LinearWrap;\n\n            int vertexStart = 0;\n            int primitiveCount = 2;\n            int verticesCount = vertexStart + 3 * primitiveCount;\n            VertexBuffer vb = new VertexBuffer(_gd, VertexPositionColorTexture.VertexDeclaration, verticesCount, BufferUsage.None);\n            _gd.SetVertexBuffer(vb);\n\n            Assert.DoesNotThrow( ()=> _gd.DrawPrimitives(PrimitiveType.TriangleList, vertexStart, primitiveCount) );\n\n            vb.Dispose();\n            effect.Dispose();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/RasterizerStateTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Kni.Tests.Components;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class RasterizerStateTest : GraphicsDeviceTestFixtureBase\n    {\n        [TestCase(-1f)]\n        [TestCase(1f)]\n        [TestCase(-0.0004f)]\n        public void DepthBiasVisualTest(float depthBias)\n        {\n            var effect = new BasicEffect(gd)\n            {\n                VertexColorEnabled = true,\n                World = Matrix.Identity,\n                View = Matrix.Identity,\n                Projection = Matrix.Identity,\n            };\n            RasterizerState rs;\n            var data = new VertexPositionColor[3];\n            var step = depthBias / 4;\n\n            PrepareFrameCapture();\n            for (var i = 0; i < 4; i++)\n            {\n                var r = i * MathHelper.PiOver2;\n                var bias = i * step;\n                var c = new Color(new Vector3(i / 4f));\n\n                rs = new RasterizerState();\n                rs.DepthBias = bias;\n\n                var rot = Matrix.CreateRotationZ(-r);\n                var v1 = Vector3.Transform(new Vector3(-0.5f, 0f, 0f), rot);\n                var v2 = Vector3.Transform(new Vector3(0.2f, 0.9f, 0f), rot);\n                var v3 = Vector3.Transform(new Vector3(0.2f, -0.9f, 0f), rot);\n\n                data[0] = new VertexPositionColor(v1, c);\n                data[1] = new VertexPositionColor(v2, c);\n                data[2] = new VertexPositionColor(v3, c);\n\n                effect.CurrentTechnique.Passes[0].Apply();\n                gd.RasterizerState = rs;\n                gd.DrawUserPrimitives(PrimitiveType.TriangleList, data, 0, 1, VertexPositionColor.VertexDeclaration);\n\n                rs.Dispose();\n            }\n\n            CheckFrames();\n\n            effect.Dispose();\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToSetNullRasterizerState()\n        {\n            Assert.Throws<ArgumentNullException>(() => gd.RasterizerState = null);\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToMutateStateObjectAfterBindingToGraphicsDevice()\n        {\n            var rasterizerState = new RasterizerState();\n\n            // Can mutate before binding.\n            DoAsserts(rasterizerState, Assert.DoesNotThrow);\n\n            // Can't mutate after binding.\n            gd.RasterizerState = rasterizerState;\n            DoAsserts(rasterizerState, d => Assert.Throws<InvalidOperationException>(d));\n\n            // Even after changing to different RasterizerState, you still can't mutate a previously-bound object.\n            gd.RasterizerState = RasterizerState.CullCounterClockwise;\n            DoAsserts(rasterizerState, d => Assert.Throws<InvalidOperationException>(d));\n\n            rasterizerState.Dispose();\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToMutateDefaultStateObjects()\n        {\n            DoAsserts(RasterizerState.CullClockwise, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(RasterizerState.CullCounterClockwise, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(RasterizerState.CullNone, d => Assert.Throws<InvalidOperationException>(d));\n        }\n\n        private static void DoAsserts(RasterizerState rasterizerState, Action<TestDelegate> assertMethod)\n        {\n            assertMethod(() => rasterizerState.CullMode = CullMode.CullClockwiseFace);\n            assertMethod(() => rasterizerState.DepthBias = 0.1f);\n            assertMethod(() => rasterizerState.FillMode = FillMode.WireFrame);\n            assertMethod(() => rasterizerState.MultiSampleAntiAlias = true);\n            assertMethod(() => rasterizerState.ScissorTestEnable = true);\n            assertMethod(() => rasterizerState.SlopeScaleDepthBias = 0.2f);\n#if !XNA\n            //assertMethod(() => rasterizerState.DepthClipEnable = false);\n#endif\n        }\n\n        [TestCase(CullMode.CullClockwiseFace)]\n        [TestCase(CullMode.CullCounterClockwiseFace)]\n        [TestCase(CullMode.None)]\n        public void VisualTestCullMode(CullMode cullMode)\n        {\n            PrepareFrameCapture();\n\n            var cube = new Colored3DCubeComponent(gd);\n            cube.LoadContent();\n\n            var rasterizerState = new RasterizerState\n            {\n                CullMode = cullMode\n            };\n            gd.RasterizerState = rasterizerState;\n\n            cube.Draw();\n\n            CheckFrames();\n\n            cube.UnloadContent();\n            rasterizerState.Dispose();\n        }\n\n        [TestCase(FillMode.Solid)]\n        [TestCase(FillMode.WireFrame)]\n        public void VisualTestFillMode(FillMode fillMode)\n        {\n            PrepareFrameCapture();\n\n            var cube = new Colored3DCubeComponent(gd);\n            cube.LoadContent();\n\n            var rasterizerState = new RasterizerState\n            {\n                FillMode = fillMode\n            };\n            gd.RasterizerState = rasterizerState;\n\n            cube.Draw();\n\n            CheckFrames();\n\n            cube.UnloadContent();\n            rasterizerState.Dispose();\n        }\n\n        [TestCase(false)]\n        [TestCase(true)]\n        public void VisualTestScissorTestEnable(bool scissorTestEnable)\n        {\n            PrepareFrameCapture();\n\n            var cube = new Colored3DCubeComponent(gd);\n            cube.LoadContent();\n\n            var rasterizerstate = new RasterizerState\n            {\n                ScissorTestEnable = scissorTestEnable\n            };\n            gd.RasterizerState = rasterizerstate;\n\n            var viewport = gd.Viewport;\n            gd.ScissorRectangle = new Rectangle(0, 0,\n                viewport.Width / 2, viewport.Height / 2);\n\n            cube.Draw();\n\n            CheckFrames();\n\n            cube.UnloadContent();\n            rasterizerstate.Dispose();\n        }\n\n#if !XNA\n        [TestCase(false)]\n        [TestCase(true)]\n        public void VisualTestDepthClipEnable(bool depthClipEnable)\n        {\n            PrepareFrameCapture();\n\n            var cube = new Colored3DCubeComponent(gd)\n            {\n                CubePosition = new Vector3(0, 0, 3)\n            };\n            cube.LoadContent();\n\n            var rasterizerstate = new RasterizerState\n            {\n                DepthClipEnable = depthClipEnable\n            };\n            gd.RasterizerState = rasterizerstate;\n\n            cube.Draw();\n\n            CheckFrames();\n\n            cube.UnloadContent();\n            rasterizerstate.Dispose();\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/RenderTarget2DTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class RenderTarget2DTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void ZeroSizeShouldFailTest()\n        {\n            RenderTarget2D renderTarget;\n            Assert.Throws<ArgumentOutOfRangeException>(() => renderTarget = new RenderTarget2D(gd, 0, 1));\n            Assert.Throws<ArgumentOutOfRangeException>(() => renderTarget = new RenderTarget2D(gd, 1, 0));\n            Assert.Throws<ArgumentOutOfRangeException>(() => renderTarget = new RenderTarget2D(gd, 0, 0));\n        }\n\n        [Test]\n        public void NullDeviceShouldThrowArgumentNullException()\n        {\n            Assert.Throws<ArgumentNullException>(() => \n            {\n                var renderTarget = new RenderTarget2D(null, 16, 16);\n                renderTarget.Dispose();\n            });\n            GC.GetTotalMemory(true); // collect uninitialized renderTarget\n        }\n\n        [Test]\n#if XNA\n        [Ignore(\"XNA mipmaps fail our pixel comparison tests\")]\n#endif\n        public void GenerateMips()\n        {\n            // Please note:\n            // The reference image was created with the KNI/Windows test.\n            // Mipmaps created by XNA and KNI are different.\n            // Mipmaps created by DirectX 11 and OpenGL can also be different - at least for \n            // NPOT textures.\n\n            PrepareFrameCapture();\n\n            var texture = content.Load<Texture2D>(Paths.Texture(\"MonoGameIcon\"));\n            var spriteBatch = new SpriteBatch(gd);\n\n            // Remember original (frame capture) render target.\n            var renderTargets = gd.GetRenderTargets();\n\n            var viewport = gd.Viewport;\n            var renderTarget = new RenderTarget2D(\n                gd,\n                128,\n                128,\n                true,     // Enable mipmaps.\n                SurfaceFormat.Color,\n                DepthFormat.None,\n                0,\n                RenderTargetUsage.DiscardContents);\n\n            // Render sprites with random positions into the offscreen render target.\n            gd.SetRenderTarget(renderTarget);\n            gd.Clear(Color.Gray);\n            spriteBatch.Begin();\n            for (int i = 0; i < 5; i++)\n            {\n                spriteBatch.Draw(\n                    texture,\n                    new Vector2(\n                        (i * 1664525 + 1013904223) % (renderTarget.Width - texture.Width),\n                        (i * 22695477 + 7777) % (renderTarget.Height - texture.Height)),\n                    Color.White);\n            }\n            spriteBatch.End();\n\n            gd.SetRenderTargets(renderTargets);\n\n            // Display all mip levels.\n            gd.Clear(Color.CornflowerBlue);\n            int x = 0;\n            int y = 0;\n            for (int i = 0; i < renderTarget.LevelCount; i++)\n            {\n                var samplerState = new SamplerState\n                {\n                    Filter = TextureFilter.Point,\n                    MipMapLevelOfDetailBias = i,\n                    MaxMipLevel = i,\n                };\n                \n                spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, samplerState, null, null);\n                spriteBatch.Draw(renderTarget, new Vector2(x, y), Color.White);\n                spriteBatch.End();\n\n                x += renderTarget.Width + 1;\n                if (x + renderTarget.Width > viewport.Width)\n                {\n                    x = 0;\n                    y += renderTarget.Height + 1;\n                }\n                samplerState.Dispose();\n            }\n\n            CheckFrames();\n\n            texture.Dispose();\n            spriteBatch.Dispose();\n            renderTarget.Dispose();\n        }\n        \n        [TestCase(SurfaceFormat.Color, SurfaceFormat.Color)]\n        // unsupported renderTarget formats\n        [TestCase(SurfaceFormat.Alpha8, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt1, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt3, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt5, SurfaceFormat.Color)]\n#if !XNA        \n        [TestCase(SurfaceFormat.Dxt1a, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt1SRgb, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt3SRgb, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt5SRgb, SurfaceFormat.Color)]\n#endif\n        [TestCase(SurfaceFormat.NormalizedByte2, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.NormalizedByte4, SurfaceFormat.Color)]\n        public void PreferredSurfaceFormatTest(SurfaceFormat preferredSurfaceFormat, SurfaceFormat expectedSurfaceFormat)\n        {                    \n            var renderTarget = new RenderTarget2D(gd, 16, 16, false, preferredSurfaceFormat, DepthFormat.None);\n                    \n            Assert.AreEqual(renderTarget.Format, expectedSurfaceFormat);\n        }\n\n        [Test]\n        public void GetDataMSAA()\n        {\n            const int size = 100;\n            const int size2 = size * size;\n            var rt = new RenderTarget2D(gd, size, size, false, SurfaceFormat.Color, DepthFormat.None, 8, RenderTargetUsage.DiscardContents);\n            var data = new Color[size2];\n            // create some arbitrary data here\n            for (var i = 0; i < size2; i++)\n                data[i] = new Color(new Vector3(1f / (i + 1)));\n\n            rt.SetData(data);\n\n            var returnedData = new Color[size2];\n            rt.GetData(returnedData);\n            // verify that the gotten data is the same as the data we attempt to set\n            for (var i = 0; i < size2; i++)\n                Assert.AreEqual(data[i], returnedData[i]);\n\n            rt.Dispose();\n        }\n\n#if WINDOWSDX\n        [TestCase(1)]\n        [TestCase(2)]\n        public void GetSharedHandle(int preferredMultiSampleCount)\n        {\n            var rt = new RenderTarget2D(gd, 16, 16, false, SurfaceFormat.Color, DepthFormat.None, preferredMultiSampleCount, RenderTargetUsage.PlatformContents, true);            \n            var sharedHandle = rt.GetSharedHandle();\n            Assert.AreNotEqual(sharedHandle, IntPtr.Zero);\n\n            var resource = SharpDX.CppObject.FromPointer<SharpDX.DXGI.Resource>(sharedHandle);\n\n            rt.Dispose();\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/RenderTargetCubeTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class RenderTargetCubeTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void ZeroSizeShouldFailTest()\n        {\n            RenderTargetCube renderTarget;\n            Assert.Throws<ArgumentOutOfRangeException>(() => renderTarget = new RenderTargetCube(gd, 0, false, SurfaceFormat.Color, DepthFormat.None));\n        }\n\n        [Test]\n        public void NullDeviceShouldThrowArgumentNullException()\n        {\n            Assert.Throws<ArgumentNullException>(() => \n            {\n                var renderTarget = new RenderTargetCube(null, 16, false, SurfaceFormat.Color, DepthFormat.None);\n                renderTarget.Dispose();\n            });\n            GC.GetTotalMemory(true); // collect uninitialized renderTarget\n        }\n\n        [TestCase(1)]\n        [TestCase(8)]\n        [TestCase(31)]\n        public void ShouldClearRenderTargetAndGetData(int size)\n        {\n            var dataSize = size * size;\n            var renderTargetCube = new RenderTargetCube(gd, size, false, SurfaceFormat.Color, DepthFormat.Depth16);\n\n            var colors = new[]\n            {\n                Color.BlanchedAlmond,\n                Color.BlueViolet,\n                Color.DarkSeaGreen,\n                Color.ForestGreen,\n                Color.IndianRed,\n                Color.LightGoldenrodYellow\n            };\n\n            for (var i = 0; i < 6; i++)\n            {\n                gd.SetRenderTarget(renderTargetCube, (CubeMapFace) i);\n                gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, colors[i], 1.0f, 0);\n                gd.SetRenderTarget(null, (CubeMapFace) i);\n            }\n\n            for (var i = 0; i < 6; i++)\n            {\n                var readData = new Color[dataSize];\n                renderTargetCube.GetData((CubeMapFace) i, readData);\n\n                for (var j = 0; j < dataSize; j++)\n                    Assert.AreEqual(colors[i], readData[j]);\n            }\n\n            renderTargetCube.Dispose();\n        }\n                \n        [TestCase(SurfaceFormat.Color, SurfaceFormat.Color)]\n        // unsupported renderTarget formats\n        [TestCase(SurfaceFormat.Alpha8, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt1, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt3, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt5, SurfaceFormat.Color)]\n#if !XNA        \n        [TestCase(SurfaceFormat.Dxt1a, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt1SRgb, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt3SRgb, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.Dxt5SRgb, SurfaceFormat.Color)]\n#endif\n        [TestCase(SurfaceFormat.NormalizedByte2, SurfaceFormat.Color)]\n        [TestCase(SurfaceFormat.NormalizedByte4, SurfaceFormat.Color)]\n        public void PreferredSurfaceFormatTest(SurfaceFormat preferredSurfaceFormat, SurfaceFormat expectedSurfaceFormat)\n        {                    \n            var renderTarget = new RenderTargetCube(gd, 16, false, preferredSurfaceFormat, DepthFormat.None);\n                    \n            Assert.AreEqual(renderTarget.Format, expectedSurfaceFormat);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/SamplerStateTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Kni.Tests.ContentPipeline;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class SamplerStateTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void ShouldNotBeAbleToSetNullSamplerState()\n        {\n            Assert.Throws<ArgumentNullException>(() => gd.SamplerStates[0] = null);\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToMutateStateObjectAfterBindingToGraphicsDevice()\n        {\n            var samplerState = new SamplerState();\n\n            // Can mutate before binding.\n            DoAsserts(samplerState, Assert.DoesNotThrow);\n\n            // Can't mutate after binding.\n            gd.SamplerStates[0] = samplerState;\n            DoAsserts(samplerState, d => Assert.Throws<InvalidOperationException>(d));\n\n            // Even after changing to different SamplerState, you still can't mutate a previously-bound object.\n            gd.SamplerStates[0] = SamplerState.AnisotropicClamp;\n            DoAsserts(samplerState, d => Assert.Throws<InvalidOperationException>(d));\n\n            samplerState.Dispose();\n        }\n\n        [Test]\n        public void ShouldNotBeAbleToMutateDefaultStateObjects()\n        {\n            DoAsserts(SamplerState.AnisotropicClamp, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(SamplerState.AnisotropicWrap, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(SamplerState.LinearClamp, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(SamplerState.LinearWrap, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(SamplerState.PointClamp, d => Assert.Throws<InvalidOperationException>(d));\n            DoAsserts(SamplerState.PointWrap, d => Assert.Throws<InvalidOperationException>(d));\n        }\n\n        private static void DoAsserts(SamplerState samplerState, Action<TestDelegate> assertMethod)\n        {\n            assertMethod(() => samplerState.AddressU = TextureAddressMode.Clamp);\n            assertMethod(() => samplerState.AddressV = TextureAddressMode.Clamp);\n            assertMethod(() => samplerState.AddressW = TextureAddressMode.Clamp);\n#if !XNA\n            assertMethod(() => samplerState.BorderColor = Color.Red);\n#endif\n            assertMethod(() => samplerState.Filter = TextureFilter.Anisotropic);\n            assertMethod(() => samplerState.MaxAnisotropy = 0);\n            assertMethod(() => samplerState.MaxMipLevel = 0);\n            assertMethod(() => samplerState.MipMapLevelOfDetailBias = 0);\n#if !XNA\n            assertMethod(() => samplerState.ComparisonFunction = CompareFunction.Always);\n#endif\n        }\n\n#if !XNA\n        [Test]\n        public void VisualTestAddressModes()\n        {\n            PrepareFrameCapture();\n\n            var addressModes = new[]\n            {\n                TextureAddressMode.Border,\n                TextureAddressMode.Clamp, \n                TextureAddressMode.Mirror, \n                TextureAddressMode.Wrap\n            };\n\n\n            var spriteBatch = new SpriteBatch(gd);\n\n            var texture = content.Load<Texture2D>(Paths.Texture(\"MonoGameIcon\"));\n\n            var samplerStates = new SamplerState[addressModes.Length];\n            for (var i = 0; i < addressModes.Length; i++)\n                samplerStates[i] = new SamplerState\n                {\n                    AddressU = addressModes[i],\n                    AddressV = addressModes[i],\n                    AddressW = addressModes[i],\n                    BorderColor = Color.Purple\n                };\n\n            var size = new Vector2(texture.Width * 2, texture.Height * 2);\n            var offset = new Vector2(10, 10);\n\n            gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0);\n\n            for (var i = 0; i < addressModes.Length; i++)\n            {\n                var x = i % 4;\n                var pos = offset + new Vector2(x * size.X, 0);\n                spriteBatch.Begin(SpriteSortMode.Deferred, samplerState: samplerStates[i]);\n                spriteBatch.Draw(texture, \n                    new Rectangle((int) pos.X, (int) pos.Y, (int) size.X, (int) size.Y),\n                    new Rectangle(-20, -20, texture.Width + 40, texture.Height + 40),\n                    Color.White);\n                spriteBatch.End();\n            }\n\n            CheckFrames();\n\n            spriteBatch.Dispose();\n            texture.Dispose();\n            foreach (var state in samplerStates)\n                state.Dispose();\n        }\n#endif\n\n#if !XNA\n        [Test]\n#if DESKTOPGL\n        [Ignore(\"Comparison samplers are ps_4_0 and up, cannot use them on DesktopGL due to MojoShader\")]\n#endif\n        public void VisualTestComparisonFunction()\n        {\n            PrepareFrameCapture();\n\n            var compares = new[]\n            {\n                CompareFunction.Always,\n                CompareFunction.Equal, \n                CompareFunction.Greater, \n                CompareFunction.GreaterEqual,\n                CompareFunction.Less, \n                CompareFunction.LessEqual, \n                CompareFunction.Never, \n                CompareFunction.NotEqual\n            };\n\n            var spriteBatch = new SpriteBatch(gd);\n\n            // Texture contains a horizontal gradient [0..1].\n            // In the shader, we compare samples from this texture to a hardcoded \"0.5\" value, \n            // and run the test once for each comparison function.\n            var texture = new Texture2D(gd, 16, 1, false, SurfaceFormat.Single);\n            var textureData = new float[texture.Width];\n            for (var x = 0; x < texture.Width; x++)\n                textureData[x] = x / (float) texture.Width;\n            texture.SetData(textureData);\n\n            var samplerStates = new SamplerState[compares.Length];\n            for (var i = 0; i < compares.Length; i++)\n                samplerStates[i] = new SamplerState\n                {\n                    AddressU = TextureAddressMode.Clamp,\n                    AddressV = TextureAddressMode.Clamp,\n                    AddressW = TextureAddressMode.Clamp,\n                    ComparisonFunction = compares[i],\n                    FilterMode = TextureFilterMode.Comparison\n                };\n\n            Effect customEffect = AssetTestUtility.LoadEffect(content, \"CustomSpriteBatchEffectComparisonSampler\");\n\n            var size = new Vector2(100, 100);\n            var offset = new Vector2(10, 10);\n\n            gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0);\n\n            for (var i = 0; i < compares.Length; i++)\n            {\n                var x = i % 4;\n                var y = (i > 3) ? 1 : 0;\n                var pos = offset + new Vector2(x * size.X, y * size.Y);\n\n                spriteBatch.Begin(SpriteSortMode.Deferred, samplerState: samplerStates[i], effect: customEffect);\n                spriteBatch.Draw(texture, \n                    new Rectangle((int) pos.X, (int) pos.Y, (int) size.X, (int) size.Y),\n                    Color.White);\n                spriteBatch.End();\n            }\n\n            CheckFrames();\n\n            spriteBatch.Dispose();\n            texture.Dispose();\n            customEffect.Dispose();\n            foreach (var state in samplerStates)\n                state.Dispose();\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/ScissorRectangleTest.cs",
    "content": "using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class ScissorRectangleTest : GraphicsDeviceTestFixtureBase\n    {\n        private SpriteBatch _spriteBatch;\n        private Texture2D _texture;\n        private RenderTarget2D _extraRenderTarget, _rt200x200;\n\n        [SetUp]\n        public override void SetUp()\n        {\n            base.SetUp();\n\n            _spriteBatch = new SpriteBatch(gd);\n            _texture = content.Load<Texture2D>(Paths.Texture(\"Surge\"));\n            _extraRenderTarget = new RenderTarget2D(gd, 256, 256);\n            _rt200x200 = new RenderTarget2D(gd, 200, 200, false, SurfaceFormat.Color, DepthFormat.None);\n        }\n\n        [TearDown]\n        public override void TearDown()\n        {\n            _spriteBatch.Dispose();\n            _spriteBatch = null;\n\n            _texture.Dispose();\n            _texture = null;\n\n            _extraRenderTarget.Dispose();\n            _extraRenderTarget = null;\n\n            _rt200x200.Dispose();\n            _rt200x200 = null;\n\n            base.TearDown();\n        }\n\n        [Test]\n        public void Draw_with_scissor_rect()\n        {\n            PrepareFrameCapture();\n\n            var renderTargets = gd.GetRenderTargets();\n            gd.SetRenderTargets(renderTargets);\n            gd.Clear(Color.Black);\n            gd.SetRenderTarget(_rt200x200);\n            gd.Clear(Color.Red);\n            gd.SetRenderTargets(renderTargets);\n\n            gd.Viewport = new Viewport(100, 100, 200, 200);\n            var scissorTestEnabled = new RasterizerState();\n            scissorTestEnabled.CullMode = CullMode.None;\n            scissorTestEnabled.ScissorTestEnable = true;\n\n            gd.ScissorRectangle = new Rectangle(0, 0, 200, 200);\n\n            _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend,\n                SamplerState.PointClamp, DepthStencilState.Default, scissorTestEnabled);\n\n            _spriteBatch.Draw(_rt200x200, new Rectangle(0, 0, 400, 400), Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Draw_with_render_target_change()\n        {\n            PrepareFrameCapture();\n\n            var renderTargets = gd.GetRenderTargets();\n            gd.ScissorRectangle = new Rectangle(0, 0, 20, 20);\n            gd.SetRenderTarget(_extraRenderTarget);\n            gd.SetRenderTargets(renderTargets);\n\n            gd.Clear(new Color(68, 34, 136, 255));\n            DrawTexture();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Draw_without_render_target_change()\n        {\n            PrepareFrameCapture();\n\n            var renderTargets = gd.GetRenderTargets();\n            gd.ScissorRectangle = new Rectangle(0, 0, 20, 20);\n            gd.SetRenderTargets(renderTargets);\n\n            DrawTexture();\n\n            CheckFrames();\n        }\n\n        private void DrawTexture()\n        {\n            _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);\n            var rasterizerState = new RasterizerState { ScissorTestEnable = true };\n            _spriteBatch.GraphicsDevice.RasterizerState = rasterizerState;\n            _spriteBatch.Draw(_texture, new Vector2(0, 0), Color.White);\n            _spriteBatch.End();\n\n            rasterizerState.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/ShaderTest.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Kni.Tests.ContentPipeline;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n\t[TestFixture]\n\tclass ShaderTest : GraphicsDeviceTestFixtureBase\n    {\n\t\t[TestCase(\"Bevels\")]\n\t\t[TestCase(\"BlackOut\")]\n\t\t[TestCase(\"ColorFlip\")]\n\t\t[TestCase(\"Grayscale\")]\n\t\t[TestCase(\"HighContrast\")]\n\t\t[TestCase(\"Invert\")]\n\t\t[TestCase(\"NoEffect\")]\n        [TestCase(\"RainbowH\")]\n        public void Shader(string effectName)\n\t\t{\n            PrepareFrameCapture();\n\n#if WINDOWSDX || DESKTOPGL\n            Effect effect = AssetTestUtility.CompileAndLoadEffect(gd, Paths.RawEffect(effectName));\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n#endif\n\n            SpriteBatch spriteBatch = new SpriteBatch(gd);\n            // A background texture to test that the effect doesn't\n            // mess up other textures\n            Texture2D background = content.Load<Texture2D>(Paths.Texture(\"fun-background\"));\n            // The texture to apply the effect to\n            Texture2D surge = content.Load<Texture2D>(Paths.Texture(\"Surge\"));\n\n            spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);\n            spriteBatch.Draw(background, Vector2.Zero, Color.White);\n\n            effect.CurrentTechnique.Passes[0].Apply();\n            spriteBatch.Draw(surge, new Vector2(300, 200), null, Color.White,\n                             0f, Vector2.Zero, 2.0f, SpriteEffects.None, 0f);\n            spriteBatch.End();\n\n            CheckFrames();\n\n            spriteBatch.Dispose();\n            effect.Dispose();\n            background.Dispose();\n            surge.Dispose();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/SpriteBatchTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Kni.Tests.ContentPipeline;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class SpriteBatchTest : GraphicsDeviceTestFixtureBase\n    {\n        private SpriteBatch _spriteBatch;\n        private Texture2D _texture;\n        private Texture2D _texture2;\n        private Texture2D _texture3;\n        private BasicEffect _basicEffect;\n        private Effect _grayscaleEffect;\n\n        [SetUp]\n        public override void SetUp()\n        {\n            base.SetUp();\n\n            _spriteBatch = new SpriteBatch(gd);\n            _texture = content.Load<Texture2D>(Paths.Texture(\"MonoGameIcon\"));\n            _texture2 = content.Load<Texture2D>(Paths.Texture(\"Surge\"));\n            _texture3 = content.Load<Texture2D>(Paths.Texture(\"lines-64\"));\n            _basicEffect = new BasicEffect(gd);\n            _basicEffect.VertexColorEnabled = true;\n            _basicEffect.TextureEnabled = true;\n            _basicEffect.View = Matrix.Identity;\n            _basicEffect.World = Matrix.Identity;\n\n            _grayscaleEffect = content.Load<Effect>(Paths.CompiledEffect(\"Grayscale\"));\n        }\n\n        [TearDown]\n        public override void TearDown()\n        {\n            _spriteBatch.Dispose();\n            _texture.Dispose();\n            _texture2.Dispose();\n            _texture3.Dispose();\n            _basicEffect.Dispose();\n            _grayscaleEffect.Dispose();\n\n            base.TearDown();\n        }\n\n        [Test]\n        public void BeginCalledTwiceThrows()\n        {\n            _spriteBatch.Begin();\n            Assert.Throws<InvalidOperationException>(() => _spriteBatch.Begin());\n        }\n\n        [Test]\n        public void BeginNotCalledThrows()\n        {\n            Assert.Throws<InvalidOperationException>(() => _spriteBatch.End());\n        }\n\n        [Test]\n        public void NullDeviceShouldThrowArgumentNullException()\n        {\n            Assert.Throws<ArgumentNullException>(() =>\n            {\n                var spriteBatch = new SpriteBatch(null);\n                spriteBatch.Dispose();\n            });\n            GC.GetTotalMemory(true); // collect uninitialized spriteBatch\n        }\n\n        [Test]\n        public void Draw_without_blend()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque);\n            _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Draw_with_additive_blend()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive);\n            _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White);\n            _spriteBatch.Draw(_texture, new Vector2(30, 30), Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Draw_normal()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(0.5f, 0.5f)]\n        [TestCase(1.5f, 1.5f)]\n        [TestCase(0.75f, 2.0f)]\n        [TestCase(1.25f, 0.8f)]\n        public void Draw_stretched(float xScale, float yScale)\n        {\n            PrepareFrameCapture();\n\n            var rect = new Rectangle(\n                30, 50, (int)(_texture.Width * xScale), (int)(_texture.Height * yScale));\n\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(_texture, rect, Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(\"Red\")]\n        [TestCase(\"GreenYellow\")]\n        [TestCase(\"Teal\")]\n        public void Draw_with_filter_color(string colorName)\n        {\n            var color = colorName.ToColor();\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(_texture, new Vector2(20, 20), color);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(0.38f)]\n        [TestCase(1.41f)]\n        [TestCase(2.17f)]\n        [TestCase(2.81f)]\n        public void Draw_rotated(float rotation)\n        {\n            PrepareFrameCapture();\n\n            var position = new Vector2(50, 50);\n            var origin = new Vector2(_texture.Width / 2, _texture.Height / 2);\n\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(\n                _texture, position, null, Color.White,\n                rotation, origin, 1, SpriteEffects.None, 0);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Draw_with_source_rect()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(\n                _texture, new Vector2(20, 20),\n                new Rectangle(20, 20, 40, 40), Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(10, 10, 40, 40)]\n        [TestCase(30, 30, 30, 50)]\n        [TestCase(20, 30, 80, 60)]\n        public void Draw_with_source_and_dest_rect(int x, int y, int width, int height)\n        {\n            PrepareFrameCapture();\n\n            var destRect = new Rectangle(x, y, width, height);\n            var sourceRect = new Rectangle(20, 20, 40, 40);\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(_texture, destRect, sourceRect, Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(\"Red\", 120)]\n        [TestCase(\"White\", 80)]\n        [TestCase(\"GreenYellow\", 200)]\n        public void Draw_with_alpha_blending(string colorName, byte alpha)\n        {\n            PrepareFrameCapture();\n\n            var color = colorName.ToColor();\n            color = Color.FromNonPremultiplied(color.R, color.G, color.B, alpha);\n\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White);\n            _spriteBatch.Draw(_texture, new Vector2(40, 40), color);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(SpriteEffects.FlipHorizontally)]\n        [TestCase(SpriteEffects.FlipVertically)]\n        [TestCase(SpriteEffects.FlipHorizontally | SpriteEffects.FlipVertically)]\n        public void Draw_with_SpriteEffects(SpriteEffects effects)\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(\n                _texture, new Vector2(30, 30), null, Color.White,\n                0.0f, Vector2.Zero, 1.0f, effects, 0);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        private static readonly Matrix[] Matrices = new Matrix[] {\n            Matrix.Identity,\n            Matrix.CreateRotationZ(0.25f),\n            Matrix.CreateScale(2),\n            Matrix.CreateTranslation(30, 40, 0),\n            Matrix.CreateRotationZ(0.9f) * Matrix.CreateScale(2) * Matrix.CreateTranslation(128, 32, 0)\n        };\n\n        // Note that [Range(0, Matrices.Length -1)] is in use here,\n        // rather then [TestCaseSource(\"Matrices\")].  Passing the matrix\n        // in directly results in an enormous test name (and captured\n        // image filename).\n        [Test]\n        public void Draw_with_matrix([Range(0, 4)] int matrixIndex)\n        {\n            PrepareFrameCapture();\n\n            var matrix = Matrices[matrixIndex];\n\n            _spriteBatch.Begin(\n                SpriteSortMode.Immediate, BlendState.AlphaBlend,\n                null, null, null, null, matrix);\n            _spriteBatch.Draw(_texture, new Vector2(10, 10), Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(SpriteSortMode.BackToFront)]\n        [TestCase(SpriteSortMode.Deferred)]\n        [TestCase(SpriteSortMode.FrontToBack)]\n        [TestCase(SpriteSortMode.Immediate)]\n#if !XNA\n        // Disabled on XNA because the sorting algorithm is probably different\n        [TestCase(SpriteSortMode.Texture)]\n#endif\n        public void Draw_with_SpriteSortMode(SpriteSortMode sortMode)\n        {\n            Similarity = 0.995f;\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin(sortMode, BlendState.AlphaBlend);\n            _spriteBatch.Draw(_texture, new Vector2(110, 110), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.Draw(_texture2, new Vector2(130, 130), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.2f);\n            _spriteBatch.Draw(_texture3, new Vector2(145, 145), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.Draw(_texture, new Vector2(160, 160), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.5f);\n            _spriteBatch.Draw(_texture3, new Vector2(205, 205), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0f);\n            _spriteBatch.Draw(_texture2, new Vector2(190, 190), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.1f);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        // FIXME: This scissoring code is not valid in XNA.\n        //        It complains about RasterizerState being immutable\n        //        after it's bound to a GraphicsDevice.\n        //        KNI probably should too, rather than allowing mutation.\n\n        // Now let's try some scissoring\n        //_spriteBatch.Begin();\n        //_spriteBatch.GraphicsDevice.ScissorRectangle = new Rectangle(50, 40, (int)_clippingSize, (int)_clippingSize);\n        //_spriteBatch.GraphicsDevice.RasterizerState.ScissorTestEnable = true;\n        //_spriteBatch.Draw(_texture, new Rectangle(50, 40, 320, 40), Color.White);\n        //_spriteBatch.DrawString(_font, \"Scissor Clipping Test\", new Vector2(50, 40), Color.Red);\n        //_spriteBatch.End();\n\n        //_spriteBatch.GraphicsDevice.RasterizerState.ScissorTestEnable = false;\n\n        [Test]\n        public void DrawRequiresTexture()\n        {\n            _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque);\n            Assert.Throws<ArgumentNullException>(() => _spriteBatch.Draw(null, new Vector2(20, 20), Color.White));\n            _spriteBatch.End();\n        }\n\n        [Test]\n        public void DrawWithTexture()\n        {\n            Assert.That(gd.Textures[0], Is.Null);\n\n            _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque);\n            _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White);\n            _spriteBatch.End();\n\n            Assert.That(gd.Textures[0], Is.SameAs(_texture));\n        }\n\n        [Test]\n        public void DrawWithCustomEffectAndTwoTextures()\n        {\n            Effect effect = AssetTestUtility.LoadEffect(content, \"CustomSpriteBatchEffect\");\n            var texture2 = new Texture2D(gd, 1, 1, false, SurfaceFormat.Color);\n\n            effect.Parameters[\"SourceTexture\"].SetValue(texture2);\n            effect.Parameters[\"OtherTexture\"].SetValue(texture2);\n\n            _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, null, null, null, effect);\n            _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White);\n            _spriteBatch.End();\n\n            Assert.That(gd.Textures[0], Is.SameAs(_texture));\n            Assert.That(gd.Textures[1], Is.SameAs(texture2));\n\n            effect.Dispose();\n            texture2.Dispose();\n        }\n\n        [Test]\n        public void DrawWithLayerDepth()\n        {\n            PrepareFrameCapture();\n\n            // Row 0, column 0: Deferred, no depth test.\n            _spriteBatch.Begin();\n            _spriteBatch.Draw(\n                _texture, new Vector2(30, 30), null, Color.Red,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, -1.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(40, 40), null, Color.Green,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(50, 50), null, Color.Blue,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(60, 60), null, Color.White,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 2.0f);\n            _spriteBatch.End();\n\n            // Row 0, column 1: Deferred, with depth test.\n            _spriteBatch.Begin(SpriteSortMode.Deferred, null, null, DepthStencilState.Default, null);\n            _spriteBatch.Draw(\n                _texture, new Vector2(130, 30), null, Color.Red,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, -1.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(140, 40), null, Color.Green,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(150, 50), null, Color.Blue,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(160, 60), null, Color.White,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 2.0f);\n            _spriteBatch.End();\n\n            // Row 1, column 0: BackToFront, no depth test.\n            _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.None, null);\n            _spriteBatch.Draw(\n                _texture, new Vector2(30, 130), null, Color.Red,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, -1.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(40, 140), null, Color.Green,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(50, 150), null, Color.Blue,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(60, 160), null, Color.White,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 2.0f);\n            _spriteBatch.End();\n\n            // Row 1, column 1: BackToFront, with depth test.\n            _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.Default, null);\n            _spriteBatch.Draw(\n                _texture, new Vector2(130, 130), null, Color.Red,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, -1.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(140, 140), null, Color.Green,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(150, 150), null, Color.Blue,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.Draw(\n                _texture, new Vector2(160, 160), null, Color.White,\n                0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 2.0f);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Draw_many()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            for (int x = 0; x < 99; x++)\n                for (int y = 0; y < 59; y++)\n                    _spriteBatch.Draw(_texture, new Rectangle(4 + x * 8, 4 + y * 8, 4, 4), Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(SpriteSortMode.Deferred)]\n        [TestCase(SpriteSortMode.Immediate)]\n        public void Draw_with_viewport_changing(SpriteSortMode sortMode)\n        {\n            Similarity = 0.975f;\n            PrepareFrameCapture();\n\n            // Test SpriteEffect\n            var vp = gd.Viewport;\n            var lvp = new Viewport(vp.X, vp.Y, vp.Width / 3, vp.Height); //Left\n            var mvp = new Viewport(vp.X + vp.Width / 3, vp.Y, vp.Width / 3, vp.Height); //middle\n            var rvp = new Viewport(vp.X + (vp.Width / 3) * 2, vp.Y, vp.Width / 3, vp.Height); //Right\n\n            // Test viewport change\n            gd.Viewport = rvp;\n            _spriteBatch.Begin(sortMode, BlendState.AlphaBlend);\n            _spriteBatch.Draw(_texture, new Vector2(10, 10), null, Color.White);\n            gd.Viewport = mvp;\n            _spriteBatch.Draw(_texture2, new Vector2(70, 10), null, Color.White);\n            gd.Viewport = lvp;\n            _spriteBatch.Draw(_texture3, new Vector2(130, 10), null, Color.White);\n            gd.Viewport = vp;\n            _spriteBatch.Draw(_texture2, new Vector2(190, 10), null, Color.White);\n            _spriteBatch.End();\n\n            // Test viewport/effect BasicEffect (Vertex & Pixel shader)\n            Matrix halfPixelOffset = Matrix.Identity;\n#if XNA \n            halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0);\n#else // MG\n            if (gd.UseHalfPixelOffset)\n                halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0);\n#endif\n\n            _basicEffect.Projection = halfPixelOffset * Matrix.CreateOrthographicOffCenter(0, gd.Viewport.Width, gd.Viewport.Height, 0, 0, 1);\n\n            gd.Viewport = rvp;\n            _spriteBatch.Begin(sortMode, BlendState.AlphaBlend, null, null, null, _basicEffect);\n            _spriteBatch.Draw(_texture, new Vector2(10, 110), null, Color.White);\n            gd.Viewport = mvp;\n            _spriteBatch.Draw(_texture2, new Vector2(70, 110), null, Color.White);\n            gd.Viewport = lvp;\n            _spriteBatch.Draw(_texture3, new Vector2(130, 110), null, Color.White);\n            gd.Viewport = vp;\n            _spriteBatch.Draw(_texture2, new Vector2(190, 110), null, Color.White);\n            _spriteBatch.End();\n\n            // Test BasicEffect (Vertex & Pixel shader)\n            // re-apply projection when viewport dimensions change\n            gd.Viewport = rvp;\n            _basicEffect.Projection = halfPixelOffset * Matrix.CreateOrthographicOffCenter(0, gd.Viewport.Width, gd.Viewport.Height, 0, 0, 1);\n            _spriteBatch.Begin(sortMode, BlendState.AlphaBlend, null, null, null, _basicEffect);\n            _spriteBatch.Draw(_texture, new Vector2(10, 210), null, Color.White);\n            gd.Viewport = mvp;\n            _spriteBatch.Draw(_texture2, new Vector2(70, 210), null, Color.White);\n            gd.Viewport = lvp;\n            _spriteBatch.Draw(_texture3, new Vector2(130, 210), null, Color.White);\n            gd.Viewport = vp;\n            _basicEffect.Projection = halfPixelOffset * Matrix.CreateOrthographicOffCenter(0, gd.Viewport.Width, gd.Viewport.Height, 0, 0, 1);\n            _spriteBatch.Draw(_texture2, new Vector2(190, 210), null, Color.White);\n            _spriteBatch.End();\n\n            // TODO: test custom Effect with no Vertex shader\n            gd.Viewport = rvp;\n            _spriteBatch.Begin(sortMode, BlendState.AlphaBlend, null, null, null, _grayscaleEffect);\n            _spriteBatch.Draw(_texture, new Vector2(10, 310), null, Color.White);\n            gd.Viewport = mvp;\n            _spriteBatch.Draw(_texture2, new Vector2(70, 310), null, Color.White);\n            gd.Viewport = lvp;\n            _spriteBatch.Draw(_texture3, new Vector2(130, 310), null, Color.White);\n            gd.Viewport = vp;\n            _spriteBatch.Draw(_texture2, new Vector2(190, 310), null, Color.White);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/SpriteFontTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Text;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class SpriteFontTest : GraphicsDeviceTestFixtureBase\n    {\n\n        private SpriteBatch _spriteBatch;\n        private SpriteFont _defaultFont;\n\n        [SetUp]\n        public override void SetUp()\n        {\n            base.SetUp();\n\n            _spriteBatch = new SpriteBatch(gd);\n            _defaultFont = content.Load<SpriteFont>(Paths.Font(\"Default\"));\n        }\n\n        [TearDown]\n        public override void TearDown()\n        {\n            _spriteBatch.Dispose();\n            _spriteBatch = null;\n\n            base.TearDown();\n        }\n\n        [TestCase(\"Default\", \"The quick brown fox jumps over the lazy dog. 1234567890\", 605, 21)]\n        [TestCase(\"Default\", \"The quick brown fox jumps\\nover the lazy dog.\\n1234567890\", 275, 59)]\n        [TestCase(\"Default\", \"The quick brown fox jumps over the lazy dog.\\r1234567890\", 594, 21)]\n        [TestCase(\"DataFont\", \"The quick brown fox jumps over the lazy dog. 1234567890\", 417, 19)]\n        [TestCase(\"DataFont\", \"The quick brown fox jumps\\nover the lazy dog.\\n1234567890\", 196, 53)]\n        [TestCase(\"JingJing\", \"The quick brown fox jumps over the lazy dog. 1234567890\", 918, 45)]\n        [TestCase(\"JingJing\", \"The quick brown fox jumps\\nover the lazy dog.\\n1234567890\", 435, 135)]\n        [TestCase(\"JingJing\", \"%\", 21, 45)] // LSB=2, W=17, RSB=2\n        [TestCase(\"JingJing\", \"*\", 10, 45)] // LSB=0, W=10, RSB=-1\n        [TestCase(\"Lindsey\", \"The quick brown fox jumps over the lazy dog. 1234567890\", 1031, 49)]\n        [TestCase(\"Lindsey\", \"The quick brown fox jumps\\nover the lazy dog.\\n1234567890\", 454, 139)]\n        [TestCase(\"Lindsey\", \"B\", 25, 49)] // LSB=-3, W=24, RSB=1\n        [TestCase(\"Motorwerk\", \"The quick brown fox jumps over the lazy dog. 1234567890\", 932, 44)]\n        [TestCase(\"Motorwerk\", \"The quick brown fox jumps\\nover the lazy dog.\\n1234567890\", 441, 124)]\n        [TestCase(\"Motorwerk\", \" \", 12, 44)] // LSB=0, W=1, RSB=11\n        [TestCase(\"Motorwerk\", \"(\", 18, 44)] // LSB=3, W=15, RSB=-6\n        [TestCase(\"Motorwerk\", \")\", 14, 44)] // LSB=-1, W=14, RSB=-1\n        [TestCase(\"Motorwerk\", \"_\", 15, 44)] // LSB=-2, W=15, RSB=0\n        [TestCase(\"QuartzMS\", \"The quick brown fox jumps over the lazy dog. 1234567890\", 947, 39)]\n        [TestCase(\"QuartzMS\", \"The quick brown fox jumps\\nover the lazy dog.\\n1234567890\", 440, 111)]\n        [TestCase(\"QuartzMS\", \"#\", 20, 39)] // LSB=0, W=20, RSB=0\n        [TestCase(\"SegoeKeycaps\", \"The quick brown fox jumps over the lazy dog. 1234567890\", 988, 20)]\n        [TestCase(\"SegoeKeycaps\", \"The quick brown fox jumps\\nover the lazy dog.\\n1234567890\", 448, 58)]\n        [TestCase(\"SegoeKeycaps\", \"!\", 16, 20)] // LSB=1, W=15, RSB=0\n        public void MeasureString_returns_correct_values(string fontName, string text, float width, float height)\n        {\n            var font = game.Content.Load<SpriteFont>(Paths.Font(fontName));\n            var actualSize = font.MeasureString(text);\n            var expectedSize = new Vector2(width, height);\n            Assert.That(actualSize, Is.EqualTo(expectedSize).Using(Vector2Comparer.Epsilon));\n        }\n\n        [Test]\n        public void Plain()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            // Row 0: String test.\n            _spriteBatch.DrawString(\n                _defaultFont, \"plain old text\", new Vector2(50, 50), Color.Violet);\n            // Row 1: StringBuilder test.\n            _spriteBatch.DrawString(\n                _defaultFont, new StringBuilder(\"plain old text\"), new Vector2(50, 290), Color.Violet);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Rotated()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            // Row 0: String test.\n            _spriteBatch.DrawString(\n                _defaultFont, \"rotated\", new Vector2(50, 50), Color.Orange,\n                MathHelper.PiOver4, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, \"rotated\", new Vector2(450, 50), Color.Orange,\n                MathHelper.PiOver4, Vector2.Zero, Vector2.One, SpriteEffects.None, 0.0f);\n            // Row 1: StringBuilder test.\n            _spriteBatch.DrawString(\n                _defaultFont, new StringBuilder(\"rotated\"), new Vector2(50, 290), Color.Orange,\n                MathHelper.PiOver4, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, new StringBuilder(\"rotated\"), new Vector2(450, 290), Color.Orange,\n                MathHelper.PiOver4, Vector2.Zero, Vector2.One, SpriteEffects.None, 0.0f);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Scaled()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            // Row 0: String test.\n            _spriteBatch.DrawString(\n                _defaultFont, \"scaled\", new Vector2(50, 50), Color.Orange,\n                0, Vector2.Zero, 2.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, \"scaled\", new Vector2(450, 50), Color.Orange,\n                0, Vector2.Zero, new Vector2(3.0f, 1.5f), SpriteEffects.None, 0.0f);\n            // Row 1: StringBuilder test.\n            _spriteBatch.DrawString(\n                _defaultFont, new StringBuilder(\"scaled\"), new Vector2(50, 290), Color.Orange,\n                0, Vector2.Zero, 2.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, new StringBuilder(\"scaled\"), new Vector2(450, 290), Color.Orange,\n                0, Vector2.Zero, new Vector2(3.0f, 1.5f), SpriteEffects.None, 0.0f);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(SpriteEffects.FlipHorizontally)]\n        [TestCase(SpriteEffects.FlipVertically)]\n        [TestCase(SpriteEffects.FlipHorizontally | SpriteEffects.FlipVertically)]\n        public void Draw_with_SpriteEffects(SpriteEffects effects)\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            // Row 0: String test.\n            _spriteBatch.DrawString(\n                _defaultFont, effects.ToString(), new Vector2(50, 50), Color.Orange,\n                0, Vector2.Zero, 1f, effects, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, effects.ToString(), new Vector2(450, 50), Color.Orange,\n                0, Vector2.Zero, Vector2.One, effects, 0.0f);\n            // Row 1: StringBuilder test.\n            _spriteBatch.DrawString(\n                _defaultFont, new StringBuilder(effects.ToString()), new Vector2(50, 290), Color.Orange,\n                0, Vector2.Zero, 1f, effects, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, new StringBuilder(effects.ToString()), new Vector2(450, 290), Color.Orange,\n                0, Vector2.Zero, Vector2.One, effects, 0.0f);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Origins_rotated()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n\n            var position = new Vector2(100, 100);\n            var text = \"origin\";\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Orange, MathHelper.PiOver4,\n                new Vector2(0f, 0f), 1.0f, SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Blue, MathHelper.PiOver4,\n                new Vector2(40f, 0f), 1.0f, SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.HotPink, MathHelper.PiOver4,\n                new Vector2(0f, 40f), 1.0f, SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Violet, MathHelper.PiOver4,\n                new Vector2(40f, 40f), 1.0f, SpriteEffects.None, 0.0f);\n\n            position = new Vector2(500, 100);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Orange, MathHelper.PiOver4,\n                new Vector2(0f, 0f), new Vector2(1.0f, 1.0f), SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Blue, MathHelper.PiOver4,\n                new Vector2(40f, 0f), new Vector2(1.0f, 1.0f), SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.HotPink, MathHelper.PiOver4,\n                new Vector2(0f, 40f), new Vector2(1.0f, 1.0f), SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Violet, MathHelper.PiOver4,\n                new Vector2(40f, 40f), new Vector2(1.0f, 1.0f), SpriteEffects.None, 0.0f);\n\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Origins_scaled()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n\n            var position = new Vector2(100, 100);\n            var text = \"origin\";\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Orange, 0,\n                new Vector2(0f, 0f), 0.5f, SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Blue, 0,\n                new Vector2(40f, 0f), 2.0f, SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.HotPink, 0,\n                new Vector2(0f, 40f), 0.75f, SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Violet, 0,\n                new Vector2(40f, 40f), 1.0f, SpriteEffects.None, 0.0f);\n\n            position = new Vector2(500, 100);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Orange, 0,\n                new Vector2(0f, 0f), new Vector2(2.0f, 0.5f), SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Blue, 0,\n                new Vector2(40f, 0f), new Vector2(2.0f, 2.0f), SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.HotPink, 0,\n                new Vector2(0f, 40f), new Vector2(2.0f, 0.75f), SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, position, Color.Violet, 0,\n                new Vector2(40f, 40f), new Vector2(2.0f, 1.0f), SpriteEffects.None, 0.0f);\n\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Draw_with_LayerDepth()\n        {\n            PrepareFrameCapture();\n\n            var text = \"depth\";\n\n            // Row 0, column 0: Deferred, no depth test.\n            _spriteBatch.Begin();\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(30, 30), Color.Red,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(40, 40), Color.Green,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(40, 40), Color.Blue,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(60, 60), Color.White,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.End();\n\n            // Row 0, column 1: Deferred, with depth test.\n            _spriteBatch.Begin(SpriteSortMode.Deferred, null, null, DepthStencilState.Default, null);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(330, 30), Color.Red,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(340, 40), Color.Green,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(350, 50), Color.Blue,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(360, 60), Color.White,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.End();\n\n            // Row 1, column 0: BackToFront, no depth test.\n            _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.None, null);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(30, 130), Color.Red,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(40, 140), Color.Green,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(50, 150), Color.Blue,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(60, 160), Color.White,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.End();\n\n            // Row 1, column 1: BackToFront, with depth test.\n            _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.Default, null);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(330, 130), Color.Red,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(340, 140), Color.Green,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(350, 150), Color.Blue,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(360, 160), Color.White,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.End();\n\n            var sb = new StringBuilder(text);\n            // Row 2, column 0: Deferred, no depth test, StringBuilder.\n            _spriteBatch.Begin();\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(30, 270), Color.Red,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(40, 280), Color.Green,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(40, 280), Color.Blue,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(60, 300), Color.White,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.End();\n\n            // Row 2, column 1: Deferred, with depth test, StringBuilder.\n            _spriteBatch.Begin(SpriteSortMode.Deferred, null, null, DepthStencilState.Default, null);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(330, 270), Color.Red,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(340, 280), Color.Green,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(350, 280), Color.Blue,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(360, 300), Color.White,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.End();\n\n            // Row 3, column 0: BackToFront, no depth test, StringBuilder.\n            _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.None, null);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(30, 370), Color.Red,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(40, 380), Color.Green,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(50, 380), Color.Blue,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(60, 400), Color.White,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.End();\n\n            // Row 3, column 1: BackToFront, with depth test, StringBuilder.\n            _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.Default, null);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(330, 370), Color.Red,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(340, 380), Color.Green,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(350, 380), Color.Blue,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(360, 400), Color.White,\n                0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Hullabaloo()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            _spriteBatch.DrawString(\n                _defaultFont, \"hullabaloo\", new Vector2(100, 150), Color.HotPink,\n                MathHelper.ToRadians(15), new Vector2(20f, 50f), new Vector2(0.8f, 1.1f),\n                SpriteEffects.FlipHorizontally, 0.0f);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Hullabaloo2()\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n            _spriteBatch.DrawString(\n                _defaultFont, \"hullabaloo2\", new Vector2(100, 150), Color.Yellow,\n                MathHelper.ToRadians(130), new Vector2(40f, 60f), new Vector2(1.8f, 1.1f),\n                SpriteEffects.FlipVertically, 0.0f);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n\n        [TestCase(\"The quick brown fox jumps over the lazy dog. 1234567890\", TestName = \"Multiline_noNewline\")]\n        [TestCase(\"The quick brown fox jumps\\nover the lazy dog.\\n1234567890\", TestName = \"Multiline_Newline\")]\n        [TestCase(\"The quick brown fox jumps over the lazy dog.\\r1234567890\", TestName = \"Multiline_CarriageReturn\")]\n        [TestCase(@\"A programming genius called Hugh\nSaid 'I really must see if it's true.'\nSo he wrote a routine\nTo ask 'What's it all mean?'\nBut the answer was still '42'.\n                R Humphries, Sutton Coldfield\", TestName = \"Multiline_verbatimString\")]\n        public void Multiline(string text)\n        {\n            PrepareFrameCapture();\n\n            _spriteBatch.Begin();\n\n            // Row 0: String test.\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(10, 10), Color.LightGreen);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(100, 150), Color.Yellow,\n                MathHelper.ToRadians(20), new Vector2(40f, 60f), 0.9f,\n                SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, text, new Vector2(500, 150), Color.Blue,\n                MathHelper.ToRadians(20), new Vector2(40f, 60f), new Vector2(0.4f, 0.8f),\n                SpriteEffects.None, 0.0f);\n\n            // Row 1: StringBuilder test.\n            var sb = new StringBuilder(text);\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(10, 250), Color.LightGreen);\n\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(100, 390), Color.Yellow,\n                MathHelper.ToRadians(20), new Vector2(40f, 60f), 0.9f,\n                SpriteEffects.None, 0.0f);\n\n            _spriteBatch.DrawString(\n                _defaultFont, sb, new Vector2(500, 390), Color.Blue,\n                MathHelper.ToRadians(20), new Vector2(40f, 60f), new Vector2(0.4f, 0.8f),\n                SpriteEffects.None, 0.0f);\n\n            _spriteBatch.End();\n\n            Similarity = 0.985f;\n            CheckFrames();\n        }\n\n        [Test]\n        public void Font_spacing_is_respected()\n        {\n            PrepareFrameCapture();\n            // DataFont has a non-zero Spacing property.\n            var font = content.Load<SpriteFont>(Paths.Font(\"DataFont\"));\n            var text = \"Now is the time for all good DataFonts\";\n\n            _spriteBatch.Begin();\n            // Row 0: String test.\n            _spriteBatch.DrawString(font, text, new Vector2(50, 50), Color.Violet);\n            _spriteBatch.DrawString(font, text, new Vector2(50, 70), Color.Violet,\n                1f, Vector2.Zero, 1f, SpriteEffects.None, 0);\n            _spriteBatch.DrawString(font, text, new Vector2(50, 90), Color.Violet,\n                1f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0);\n            // Row 1: StringBuilder test.            \n            var sb = new StringBuilder(text);\n            _spriteBatch.DrawString(font, sb, new Vector2(50, 290), Color.Violet);\n            _spriteBatch.DrawString(font, sb, new Vector2(50, 310), Color.Violet,\n                1f, Vector2.Zero, 1f, SpriteEffects.None, 0);\n            _spriteBatch.DrawString(font, sb, new Vector2(50, 330), Color.Violet,\n                1f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0);\n            _spriteBatch.End();\n\n            CheckFrames();\n        }\n\n        [TestCase(\"The rain in España stays mainly in the plain - now in français\")]\n        [TestCase(\"\\x1f\")]\n        [TestCase(\"\\x7f\")]\n        public void Throws_when_drawing_unavailable_characters(string text)\n        {\n            _spriteBatch.Begin();\n            Assert.Throws<ArgumentException>(() =>\n                _spriteBatch.DrawString(_defaultFont, text, Vector2.Zero, Color.Violet));\n            _spriteBatch.End();\n        }\n\n        [TestCase('ñ')]\n        [TestCase((char)127)]\n        [TestCase((char)31)]\n        public void Throws_when_setting_unavailable_DefaultCharacter(char character)\n        {\n            Assert.Throws<ArgumentException>(() =>\n                _defaultFont.DefaultCharacter = character);\n        }\n\n        [TestCase((char)32)]\n        [TestCase((char)63)]\n        [TestCase((char)126)]\n        public void Does_not_throw_when_setting_available_DefaultCharacter(char character)\n        {\n            Assert.DoesNotThrow(() => _defaultFont.DefaultCharacter = character);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/Texture2DNonVisualTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    internal class Texture2DNonVisualTest : GraphicsDeviceTestFixtureBase\n    {\n        Texture2D _texture;\n\n#if !XNA\n        [TestCase(\"Assets/Textures/LogoOnly_64px.bmp\")]\n        [TestCase(\"Assets/Textures/LogoOnly_64px.tga\")]\n#endif\n        [TestCase(\"Assets/Textures/LogoOnly_64px.gif\")]\n        [TestCase(\"Assets/Textures/LogoOnly_64px.jpg\")]\n        [TestCase(\"Assets/Textures/LogoOnly_64px.png\")]\n        [TestCase(\"Assets/Textures/1bit.png\")]\n        [TestCase(\"Assets/Textures/8bit.png\")]\n        [TestCase(\"Assets/Textures/24bit.png\")]\n        [TestCase(\"Assets/Textures/32bit.png\")]\n        [TestCase(\"Assets/Textures/sample_1280x853.hdr\")]\n        public void FromStreamShouldWorkTest(string filename)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(filename))\n            {\n                Assert.DoesNotThrow(() => _texture = Texture2D.FromStream(gd, reader.BaseStream));\n            }\n            Assert.NotNull(_texture);\n            try\n            {\n                System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(filename);\n                System.Drawing.GraphicsUnit gu = System.Drawing.GraphicsUnit.Pixel;\n                System.Drawing.RectangleF rf = bitmap.GetBounds(ref gu);\n                Rectangle rt = _texture.Bounds;\n                Assert.AreEqual((int)rf.Bottom, rt.Bottom);\n                Assert.AreEqual((int)rf.Left, rt.Left);\n                Assert.AreEqual((int)rf.Right, rt.Right);\n                Assert.AreEqual((int)rf.Top, rt.Top);\n                bitmap.Dispose();\n            }   //The dds file test case can't be checked with System.Drawing because it does not understand this format\n            catch { }\n            _texture.Dispose();\n            _texture = null;\n        }\n\n#if XNA\n        [TestCase(\"Assets/Textures/LogoOnly_64px.bmp\")]\n#endif\n        // not supported\n        [TestCase(\"Assets/Textures/LogoOnly_64px.tif\")]\n        [TestCase(\"Assets/Textures/LogoOnly_64px.dds\")]\n        [TestCase(\"Assets/Textures/SampleCube64DXT1Mips.dds\")]\n        public void FromStreamShouldFailTest(string filename)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(filename))\n            {\n                Assert.Throws<InvalidOperationException>(() => _texture = Texture2D.FromStream(gd, reader.BaseStream));\n            }\n        }\n\n        [Test]\n        public void FromStreamArgumentNullTest()\n        {\n            Assert.Throws<ArgumentNullException>(() => Texture2D.FromStream(gd, (Stream) null));\n#if !XNA\n            // XNA misses this check and throws a NullReferenceException\n            Assert.Throws<ArgumentNullException>(() => Texture2D.FromStream(null, new MemoryStream()));\n#endif\n        }\n\n        [TestCase]\n        public void FromStreamNotPremultiplied()\n        {\n            // XNA will not try to premultiply your image on\n            // load... this test verifies that this doesn't occur.\n\n            using (var stream = File.OpenRead(\"Assets/Textures/red_128.png\"))\n            using (var texture = Texture2D.FromStream(gd, stream))\n            {\n                Assert.AreEqual(8, texture.Width);\n                Assert.AreEqual(8, texture.Height);\n                Assert.AreEqual(1, texture.LevelCount);\n                var pngData = new Color[8 * 8];\n                texture.GetData(pngData);\n\n                for (var i = 0; i < pngData.Length; i++)\n                {\n                    Assert.AreEqual(255,    pngData[i].R);\n                    Assert.AreEqual(0,      pngData[i].G);\n                    Assert.AreEqual(0,      pngData[i].B);\n                    Assert.AreEqual(128,    pngData[i].A);\n                }\n            }\n        }\n\n        [TestCase]\n        public void FromStreamAtTheEnd()\n        {\n            // Check whether texture can be loaded if a stream being at its end\n            using (var memoryStream = new MemoryStream())\n            {\n                using (var fileStream = File.OpenRead(\"Assets/Textures/red_128.png\"))\n                {\n                    fileStream.CopyTo(memoryStream);\n                }\n                using (var texture = Texture2D.FromStream(gd, memoryStream))\n                {\n                    Assert.AreEqual(8, texture.Width);\n                    Assert.AreEqual(8, texture.Height);\n                    Assert.AreEqual(1, texture.LevelCount);\n                    var pngData = new Color[8 * 8];\n                    texture.GetData(pngData);\n\n                    for (var i = 0; i < pngData.Length; i++)\n                    {\n                        Assert.AreEqual(255, pngData[i].R);\n                        Assert.AreEqual(0, pngData[i].G);\n                        Assert.AreEqual(0, pngData[i].B);\n                        Assert.AreEqual(128, pngData[i].A);\n                    }\n                }\n            }\n        }\n\n#if XNA \n\t\t// FromStream() reads the texture unchanged.\n\t\t// It's up to the user to apply cut-off, premultiply, etc.\n\t\t// This is a break from the default XNA behavior.\n        [TestCase]\n#endif\n        public void FromStreamBlackAlpha()\n        {\n            // XNA will make any pixel with an alpha value\n            // of 0 into black throwing out any color data.\n\n            using (var stream = File.OpenRead(\"Assets/Textures/blue_0.png\"))\n            using (var texture = Texture2D.FromStream(gd, stream))\n            {\n                Assert.AreEqual(8, texture.Width);\n                Assert.AreEqual(8, texture.Height);\n                Assert.AreEqual(1, texture.LevelCount);\n                var pngData = new Color[8 * 8];\n                texture.GetData(pngData);\n\n                for (var i = 0; i < pngData.Length; i++)\n                {\n                    Assert.AreEqual(0, pngData[i].R);\n                    Assert.AreEqual(0, pngData[i].G);\n                    Assert.AreEqual(0, pngData[i].B);\n                    Assert.AreEqual(0, pngData[i].A);\n                }\n            }\n        }\n        \n        [Test]\n        public void ZeroSizeShouldFailTest()\n        {\n            Texture2D texture;\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture2D(gd, 0, 1));\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture2D(gd, 1, 0));\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture2D(gd, 0, 0));\n        }\n\n        [Test]\n        public void SimpleGetSetDataTest()\n        {\n            using (var tex = new Texture2D(gd, 4, 4, false, SurfaceFormat.Color))\n            {\n                const int startIndex = 5;\n                const int x = 2;\n                const int y = 2;\n                const int width = 2;\n                const int height = 2;\n                const int elementCount = 4 * width * height;\n\n                var data = new byte[startIndex + elementCount];\n                for (var i = 0; i < data.Length; i++)\n                    data[i] = (byte) i;\n\n                var rect = new Rectangle(x, y, width, height);\n\n                tex.SetData(0, rect, data, startIndex, elementCount);\n                tex.GetData(0, rect, data, startIndex, elementCount);\n\n                for (var i = 0; i < data.Length; i++)\n                    Assert.AreEqual(i, data[i]);\n            }\n        }\n\n        [TestCase(25, 23, 1, 1, 0, 1)]\n        [TestCase(25, 23, 1, 1, 1, 1)]\n        [TestCase(25, 23, 2, 1, 0, 2)]\n        [TestCase(25, 23, 2, 1, 1, 2)]\n        [TestCase(25, 23, 1, 2, 0, 2)]\n        [TestCase(25, 23, 1, 2, 1, 2)]\n        [TestCase(25, 23, 2, 2, 0, 4)]\n        [TestCase(25, 23, 2, 2, 1, 4)]\n        public void PlatformGetDataWithOffsetTest(int rx, int ry, int rw, int rh, int startIndex, int elementsToRead)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(\"Assets/Textures/LogoOnly_64px.png\"))\n            {\n                Rectangle toReadArea = new Rectangle(rx, ry, rw, rh);\n                Texture2D t = Texture2D.FromStream(gd, reader.BaseStream);\n                Color[] colors = new Color[startIndex + elementsToRead];\n                for (int i = 0; i < colors.Length; i++)\n                {\n                    colors[i] = Color.White;\n                }\n                t.GetData(0, toReadArea, colors, startIndex, elementsToRead);\n                for (int i = 0; i < elementsToRead; i++)\n                {\n                    Assert.AreNotEqual(255, colors[i + startIndex].R, \"colors was not overwritten in position {0}\", startIndex + i);\n                }\n\n                t.Dispose();\n            }\n        }\n        [TestCase(25, 23, 2, 2, 0, 2)]\n        [TestCase(25, 23, 2, 2, 1, 2)]\n        public void GetDataException(int rx, int ry, int rw, int rh, int startIndex, int elementsToRead)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(\"Assets/Textures/LogoOnly_64px.png\"))\n            {\n                Rectangle toReadArea = new Rectangle(rx, ry, rw, rh);\n                Texture2D t = Texture2D.FromStream(gd, reader.BaseStream);\n                Color[] colors = new Color[startIndex + elementsToRead];\n                for (int i = 0; i < colors.Length; i++)\n                {\n                    colors[i] = Color.White;\n                }\n                Assert.Throws<ArgumentException>(() => t.GetData(0, toReadArea, colors, startIndex, elementsToRead));\n\n                t.Dispose();\n            }\n        }\n\n        [TestCase(4096)]\n        public void SetData1ParameterGoodTest(int arraySize)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(\"Assets/Textures/LogoOnly_64px.png\"))\n            {\n                Color[] data = new Color[arraySize];\n                Color[] reference = new Color[4096];\n                Color[] written = new Color[4096];\n                for (int i = 0; i < arraySize; i++)\n                {\n                    data[i] = Color.White;\n                }\n                Texture2D t = Texture2D.FromStream(gd, reader.BaseStream);\n                t.GetData(reference);\n                t.SetData(data);\n                t.GetData(written);\n                for (int i = 0; i < written.Length; i++)\n                {\n                    if (i < arraySize)\n                    {\n                        Assert.AreEqual(255, written[i].R, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].G, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].B, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].A, \"Bad color written in position:{0};\", i);\n                    }\n                    else\n                    {\n                        Assert.AreEqual(reference[i].R, written[i].R, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].G, written[i].G, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].B, written[i].B, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].A, written[i].A, \"Color written in position:{0}; beyond array data\", i);\n                    }\n                }\n\n                t.Dispose();\n            }\n        }\n\n        [TestCase(2000)]\n        [TestCase(4095)]\n        [TestCase(2000000)]\n        [TestCase(4097)]\n        public void SetData1ParameterExceptionTest(int arraySize)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(\"Assets/Textures/LogoOnly_64px.png\"))\n            {\n                Color[] data = new Color[arraySize];\n                Color[] reference = new Color[4096];\n                Color[] written = new Color[4096];\n                for (int i = 0; i < arraySize; i++)\n                {\n                    data[i] = Color.White;\n                }\n                Texture2D t = Texture2D.FromStream(gd, reader.BaseStream);\n                t.GetData(reference);\n                Assert.Throws(Is.InstanceOf<Exception>(), () => t.SetData(data));\n                t.GetData(written);\n                for (int i = 0; i < written.Length; i++)\n                {\n                    Assert.AreEqual(reference[i].R, written[i].R, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].G, written[i].G, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].B, written[i].B, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].A, written[i].A, \"Bad color written in position:{0};\", i);\n                }\n                t.Dispose();\n            }\n        }\n\n        [TestCase(SurfaceFormat.HalfSingle, (short)(160 << 8 + 120))]\n#if !DESKTOPGL\n        // format not supported\n        [TestCase(SurfaceFormat.Vector4, (long)(200 << 48 + 180 << 32 + 160 << 16 + 120))]\n#endif\n        [TestCase(SurfaceFormat.Vector2, (float)(200 << 48 + 180 << 32 + 160 << 16 + 120))]\n        [TestCase(SurfaceFormat.Color, (float)(200 << 24 + 180 << 16 + 160 << 8 + 120))]\n        [TestCase(SurfaceFormat.Color, (byte)150)]\n        [TestCase(SurfaceFormat.Color, (short)(160 << 8 + 120))]\n        [TestCase(SurfaceFormat.Single, (byte)150)]\n        [TestCase(SurfaceFormat.Single, (short)(160 << 8 + 120))]\n        [TestCase(SurfaceFormat.Single, (float)(200 << 24 + 180 << 16 + 160 << 8 + 120))]\n        public void SetDataFormatTest<TBuffer>(SurfaceFormat format, TBuffer value) where TBuffer : struct\n        {\n            const int textureSize = 16;\n\n            var surfaceFormatSize = GetFormatSize(format);\n            var textureSizeBytes = textureSize * surfaceFormatSize;\n\n            var tSizeBytes = Marshal.SizeOf(typeof(TBuffer));\n            var bufferSize = textureSizeBytes / tSizeBytes;\n\n            var buffer = new TBuffer[bufferSize];\n            for (var i = 0; i < bufferSize; i++)\n                buffer[i] = value;\n\n            var t = new Texture2D(gd, textureSize, 1, false, format);\n            t.SetData(buffer);\n\n            var buffer2 = new TBuffer[bufferSize];\n            t.GetData(buffer2);\n\n            for (var i = 0; i < buffer.Length; i++)\n                Assert.AreEqual(buffer[i], buffer2[i]);\n\n            t.Dispose();\n        }\n\n        [Test, Ignore(\"Not supported\")]\n        public void GetVector4FromVector2FormatTest()\n        {\n            Vector2[] buffer2 = new Vector2[4];\n            buffer2[0] = new Vector2(0.1f, 0.2f);\n            buffer2[1] = new Vector2(0.3f, 0.4f);\n            buffer2[2] = new Vector2(0.5f, 0.6f);\n            buffer2[3] = new Vector2(0.7f, 0.8f);\n\n            Texture2D t = new Texture2D(gd, 4, 1, false, SurfaceFormat.Vector2);\n            t.SetData<Vector2>(buffer2);\n\n            Vector4[] buffer4 = new Vector4[2];\n            buffer4[0] = new Vector4(42, 42, 42, 42);\n            buffer4[1] = new Vector4(42, 42, 42, 42); // bound check\n\n            t.GetData<Vector4>(buffer4, 0, 1);\n                        \n            Assert.AreEqual(buffer4[0].X, 0.1f);\n            Assert.AreEqual(buffer4[0].Y, 0.2f);\n            Assert.AreEqual(buffer4[0].Z, 0.3f);\n            Assert.AreEqual(buffer4[0].W, 0.4f);\n            Assert.AreEqual(buffer4[1].X, 42);\n\n            t.Dispose();\n        }\n\n        [TestCase(SurfaceFormat.Color, (long)0)]\n        [TestCase(SurfaceFormat.HalfSingle, (float)0)]\n        public void SetDataFormatFailingTestTBufferTooLarge<TBuffer>(SurfaceFormat format, TBuffer value) where TBuffer : struct\n        {\n            const int textureSize = 16;\n\n            var surfaceFormatSize = GetFormatSize(format);\n            var textureSizeBytes = textureSize * surfaceFormatSize;\n\n            var tSizeBytes = Marshal.SizeOf(typeof(TBuffer));\n            var bufferSize = textureSizeBytes / tSizeBytes;\n\n            var buffer = new TBuffer[bufferSize];\n            for (var i = 0; i < bufferSize; i++)\n                buffer[i] = value;\n\n            var t = new Texture2D(gd, textureSize, 1, false, format);\n            Assert.Throws<ArgumentException>(() => t.SetData(buffer));\n\n            t.Dispose();\n        }\n\n        [Test]\n        public void SetDataFormatFailingTestModTBufferNotZero()\n        {\n            const int textureSize = 12;\n            var format = SurfaceFormat.Vector4;\n            var value = new Vector3(20, 15, 18);\n\n            var surfaceFormatSize = GetFormatSize(format);\n            var textureSizeBytes = textureSize * surfaceFormatSize;\n\n            var tSizeBytes = 12;\n            var bufferSize = textureSizeBytes / tSizeBytes;\n\n            var buffer = new Vector3[bufferSize];\n            for (var i = 0; i < bufferSize; i++)\n                buffer[i] = value;\n\n            var t = new Texture2D(gd, textureSize, 1, false, format);\n            Assert.Throws<ArgumentException>(() => t.SetData(buffer));\n\n            t.Dispose();\n        }\n\n        public static int GetFormatSize(SurfaceFormat surfaceFormat)\n        {\n            switch (surfaceFormat)\n            {\n                case SurfaceFormat.Alpha8:\n                    return 1;\n                case SurfaceFormat.HalfSingle:\n                    return 2;\n                case SurfaceFormat.Single:\n                case SurfaceFormat.Color:\n                    return 4;\n                case SurfaceFormat.Vector2:\n                    return 8;\n                case SurfaceFormat.Vector4:\n                    return 16;\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        [TestCase(4200, 0, 4096)]\n        [TestCase(4097, 1, 4096)]\n        [TestCase(4097, 0, 4096)]\n        [TestCase(4096, 0, 4096)]\n        public void SetData3ParameterGoodTest(int arraySize, int startIndex, int elements)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(\"Assets/Textures/LogoOnly_64px.png\"))\n            {\n                Color[] data = new Color[arraySize];\n                Color[] written = new Color[4096];\n                Color[] reference = new Color[4096];\n                for (int i = 0; i < arraySize; i++)\n                {\n                    data[i] = Color.White;\n                }\n                Texture2D t = Texture2D.FromStream(gd, reader.BaseStream);\n                t.GetData(reference);\n                t.SetData(data, startIndex, elements);\n                t.GetData(written);\n                for (int i = 0; i < written.Length; i++)\n                {\n                    if (i < arraySize)\n                    {\n                        Assert.AreEqual(255, written[i].R, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].G, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].B, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].A, \"Bad color written in position:{0};\", i);\n                    }\n                    else\n                    {\n                        Assert.AreEqual(reference[i].R, written[i].R, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].G, written[i].G, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].B, written[i].B, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].A, written[i].A, \"Color written in position:{0}; beyond array data\", i);\n                    }\n                }\n\n                t.Dispose();\n            }\n        }\n\n        [TestCase(2000, 0, 4096)]\n        [TestCase(4095, 0, 4095)]\n        [TestCase(4095, 1, 4095)]\n        [TestCase(4096, 1, 4096)]\n        [TestCase(4096, 1, 4095)]\n        [TestCase(4095, 1, 4096)]\n        [TestCase(4096, 1, 4097)]\n        [TestCase(4095, 0, 4094)]\n        [TestCase(4097, 1, 4097)]\n        [TestCase(4097, 1, 4098)]\n        [TestCase(4098, 1, 4097)]\n        [TestCase(4097, 0, 4097)]\n        [TestCase(4096, 0, 4095)]\n        public void SetData3ParameterExceptionTest(int arraySize, int startIndex, int elements)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(\"Assets/Textures/LogoOnly_64px.png\"))\n            {\n                Color[] data = new Color[arraySize];\n                Color[] written = new Color[4096];\n                Color[] reference = new Color[4096];\n                for (int i = 0; i < arraySize; i++)\n                {\n                    data[i] = Color.White;\n                }\n                Texture2D t = Texture2D.FromStream(gd, reader.BaseStream);\n                t.GetData(reference);\n                Assert.Throws(Is.InstanceOf<Exception>(), () => t.SetData(data, startIndex, elements));\n                t.GetData(written);\n                for (int i = 0; i < written.Length; i++)\n                {\n                    Assert.AreEqual(reference[i].R, written[i].R, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].G, written[i].G, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].B, written[i].B, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].A, written[i].A, \"Bad color written in position:{0};\", i);\n                }\n\n                t.Dispose();\n            }\n        }\n\n        [TestCase(4096, 0, 4096, 0, 0, 64, 64)]\n        [TestCase(4096, 0, 3969, 1, 1, 63, 63)]\n        [TestCase(3969, 0, 3969, 1, 1, 63, 63)]\n        [TestCase(4096, 1, 3969, 1, 1, 63, 63)]\n        [TestCase(4097, 1, 3969, 1, 1, 63, 63)]\n        [TestCase(3970, 1, 3969, 1, 1, 63, 63)]\n        [TestCase(4097, 1, 4096, 0, 0, 64, 64)]\n        public void SetData5ParameterGoodTest(int arraySize, int startIndex, int elements, int x, int y, int w, int h)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(\"Assets/Textures/LogoOnly_64px.png\"))\n            {\n                Rectangle area = new Rectangle(x, y, w, h);\n                int areaLength = w * h;\n                Color[] data = new Color[arraySize];\n                Color[] reference = new Color[4096];\n                Color[] written = new Color[4096];\n                for (int i = 0; i < arraySize; i++)\n                {\n                    data[i] = Color.White;\n                }\n                Texture2D t = Texture2D.FromStream(gd, reader.BaseStream);\n                t.GetData(reference);\n                t.SetData(0, area, data, startIndex, elements);\n                t.GetData(written);\n                for (int i = 0; i < written.Length; i++)\n                {\n                    int rx = i % 64, ry = i / 64;\n                    if (area.Contains(rx, ry))\n                    {\n                        Assert.AreEqual(255, written[i].R, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].G, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].B, \"Bad color written in position:{0};\", i);\n                        Assert.AreEqual(255, written[i].A, \"Bad color written in position:{0};\", i);\n                    }\n                    else\n                    {\n                        Assert.AreEqual(reference[i].R, written[i].R, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].G, written[i].G, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].B, written[i].B, \"Color written in position:{0}; beyond array data\", i);\n                        Assert.AreEqual(reference[i].A, written[i].A, \"Color written in position:{0}; beyond array data\", i);\n                    }\n                }\n\n                t.Dispose();\n            }\n        }\n        [TestCase(3844, 0, 3844, 1, 1, 63, 63)]\n        [TestCase(3845, 1, 3844, 1, 1, 63, 63)]\n        [TestCase(3969, 0, 4096, 1, 1, 63, 63)]\n        [TestCase(3970, 1, 4096, 1, 1, 63, 63)]\n        [TestCase(4096, 0, 4096, -1, -1, 65, 65)]\n        [TestCase(4096, 0, 4096, 1, 1, 63, 63)]\n        [TestCase(4096, 0, 4095, 0, 0, 64, 64)]\n        [TestCase(4096, 0, 3844, 1, 1, 63, 63)]\n        [TestCase(4097, 1, 4096, 1, 1, 63, 63)]\n        [TestCase(4097, 1, 4095, 0, 0, 64, 64)]\n        [TestCase(4097, 1, 3844, 1, 1, 63, 63)]\n        [TestCase(3970, 1, 4096, 1, 1, 63, 63)]\n        public void SetData5ParameterExceptionTest(int arraySize, int startIndex, int elements, int x, int y, int w, int h)\n        {\n            using (System.IO.StreamReader reader = new System.IO.StreamReader(\"Assets/Textures/LogoOnly_64px.png\"))\n            {\n                Rectangle area = new Rectangle(x, y, w, h);\n                int areaLength = w * h;\n                Color[] data = new Color[arraySize];\n                Color[] reference = new Color[4096];\n                Color[] written = new Color[4096];\n                for (int i = 0; i < arraySize; i++)\n                {\n                    data[i] = Color.White;\n                }\n                Texture2D t = Texture2D.FromStream(gd, reader.BaseStream);\n                t.GetData(reference);\n                Assert.Throws(Is.InstanceOf<Exception>(), () => t.SetData(0, area, data, startIndex, elements));\n                t.GetData(written);\n                for (int i = 0; i < written.Length; i++)\n                {\n                    Assert.AreEqual(reference[i].R, written[i].R, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].G, written[i].G, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].B, written[i].B, \"Bad color written in position:{0};\", i);\n                    Assert.AreEqual(reference[i].A, written[i].A, \"Bad color written in position:{0};\", i);\n                }\n\n                t.Dispose();\n            }\n        }\n\n        [Test]\n        public void GetDataNegativeOrZeroRectWidthAndHeightThrows()\n        {\n            using (var t = new Texture2D(gd, 10, 10))\n            {\n                var data = new Color[4];\n                var data2 = new Color[0];\n                Assert.Throws<ArgumentException>(() => t.GetData(0, new Rectangle(5, 5,  2, -2), data, 0, 4));\n                Assert.Throws<ArgumentException>(() => t.GetData(0, new Rectangle(5, 5, -2,  2), data, 0, 4));\n                Assert.Throws<ArgumentException>(() => t.GetData(0, new Rectangle(5, 5, -2, -2), data, 0, 4));\n\n                Assert.Throws<ArgumentException>(() => t.GetData(0, new Rectangle(5, 5, 0, 2), data2, 0, 4));\n                Assert.Throws<ArgumentException>(() => t.GetData(0, new Rectangle(5, 5, 2, 0), data2, 0, 4));\n                Assert.Throws<ArgumentException>(() => t.GetData(0, new Rectangle(5, 5, 0, 0), data2, 0, 4));\n            }\n        }\n\n        [Test]\n        public void GetAndSetDataDxtCompressed()\n        {\n            var t = content.Load<Texture2D>(Paths.Texture (\"random_16px_dxt\"));\n\n            var b = new byte[t.Width*t.Height/2];\n            var b2 = new byte[t.Width*t.Height/2];\n\n            t.GetData(b);\n            t.SetData(b);\n            t.GetData(b2);\n\n            Assert.AreEqual(b, b2);\n\n            // KNI allows any kind of type that is not larger than one element\n            // while XNA only allows byte.\n#if !XNA\n            var b3 = new short[t.Width*t.Height/4];\n            t.GetData(b3);\n            t.SetData(b3);\n\n            t.GetData(b2);\n            Assert.AreEqual(b, b2);\n\n            var b4 = new int[t.Width*t.Height/8];\n            t.GetData(b4);\n            t.SetData(b4);\n\n            t.GetData(b2);\n            Assert.AreEqual(b, b2);\n\n            var b5 = new long[t.Width*t.Height/16];\n            t.GetData(b5);\n            t.SetData(b5);\n\n            t.GetData(b2);\n            Assert.AreEqual(b, b2);\n\n            // this is too large, DXT1 blocks are 64 bits while Vector4 is 128 bits\n            var b6 = new Vector4[t.Width*t.Height/32];\n            Assert.Throws<ArgumentException>(() => t.GetData(b6));\n            Assert.Throws<ArgumentException>(() => t.SetData(b6));\n\n            var b7 = new Vector3[t.Width*t.Height/24];\n            Assert.Throws<ArgumentException>(() => t.GetData(b7));\n            Assert.Throws<ArgumentException>(() => t.SetData(b7));\n#endif\n\n            t.Dispose();\n        }\n\n        [Test]\n#if DESKTOPGL\n        [Ignore(\"PlatformGetData fails under OpenGL!\")]\n#endif\n        public void LoadOddSizedDxtCompressed()\n        {\n            // This is testing that DXT compressed mip levels that \n            // are not a multiple of 4 are properly loaded.\n\n            var t = content.Load<Texture2D>(Paths.Texture(\"red_668_dxt\"));\n\n            Assert.AreEqual(SurfaceFormat.Dxt1, t.Format);\n            Assert.AreEqual(10, t.LevelCount);\n            Assert.AreEqual(668, t.Width);\n            Assert.AreEqual(668, t.Height);\n\n            for (var m = 0; m < t.LevelCount; m++)\n            {\n                var w = ((t.Width >> m) + 3) & ~3;\n                var h = ((t.Height >> m) + 3) & ~3;\n                var size = w * h / 2;\n\n                // Get the full mip level.\n                var b = new byte[size];\n                t.GetData(m, null, b, 0, size);\n\n                // Decompress it to validate it.\n                var b2 = DxtDecoder.DecompressDxt1(b, t.Width >> m, t.Height >> m);\n\n                // Should be a red opaque texture.\n                for (var p=0; p < b2.Length; p+=4)\n                {\n                    Assert.AreEqual(255,    b2[p + 0]);\n                    Assert.AreEqual(0,      b2[p + 1]);\n                    Assert.AreEqual(0,      b2[p + 2]);\n                    Assert.AreEqual(255,    b2[p + 3]);\n                }            \n            }\n                        \n            t.Dispose();\n        }\n\n        // DXT1\n        [TestCase(8, \"random_16px_dxt\", 0)]\n        [TestCase(8, \"random_16px_dxt\", 1)]\n        // DXT5\n        [TestCase(16, \"random_16px_dxt_alpha\", 0)]\n        [TestCase(16, \"random_16px_dxt_alpha\", 1)]\n        public void GetAndSetDataDxtNotMultipleOf4Rounding(int bs, string texName, int mip)\n        {\n            var t = content.Load<Texture2D>(Paths.Texture (texName));\n\n            var before = new byte[t.Width*t.Height*bs/16];\n            t.GetData(before);\n\n            var b1 = new byte[bs];\n            var b2 = new byte[bs];\n\n            t.GetData(mip, new Rectangle(0, 0, 4, 4), b1, 0, bs);\n\n            t.GetData(mip, new Rectangle(0,0,1,1), b2, 0, bs);\n            t.SetData(mip, new Rectangle(0,0,1,1), b2, 0, bs);\n            Assert.AreEqual(b1, b2);\n\n            t.GetData(mip, new Rectangle(0,0,1,3), b2, 0, bs);\n            t.SetData(mip, new Rectangle(0,0,1,3), b2, 0, bs);\n            Assert.AreEqual(b1, b2);\n\n            t.GetData(mip, new Rectangle(0,0,4,3), b2, 0, bs);\n            t.SetData(mip, new Rectangle(0,0,4,3), b2, 0, bs);\n            Assert.AreEqual(b1, b2);\n\n            t.GetData(mip, new Rectangle(0, 2, 4, 4), b2, 0, bs);\n            t.SetData(mip, new Rectangle(0, 2, 4, 4), b2, 0, bs);\n            Assert.AreEqual(b1, b2);\n\n            t.GetData(mip, new Rectangle(2, 2, 4, 4), b2, 0, bs);\n            t.SetData(mip, new Rectangle(2, 2, 4, 4), b2, 0, bs);\n            Assert.AreEqual(b1, b2);\n\n            t.GetData(mip, new Rectangle(3, 3, 4, 4), b2, 0, bs);\n            t.SetData(mip, new Rectangle(3, 3, 4, 4), b2, 0, bs);\n            Assert.AreEqual(b1, b2);\n\n            t.GetData(mip, new Rectangle(4, 4, 4, 4), b2, 0, bs);\n            t.SetData(mip, new Rectangle(4, 4, 4, 4), b2, 0, bs);\n            Assert.AreNotEqual(b1, b2);\n\n            var after = new byte[t.Width*t.Height*bs/16];\n            t.GetData(after);\n\n            Assert.AreEqual(before, after);\n\n            t.Dispose();\n        }\n\n        [TestCase(\"random_16px_dxt\", 8)]\n        [TestCase(\"random_16px_dxt_alpha\", 16)]\n        public void GetAndSetDataDxtDontRoundWhenOutsideBounds(string texName, int bs)\n        {\n            var t = content.Load<Texture2D>(Paths.Texture(texName));\n\n            var b = new byte[bs];\n\n            // don't round if the unrounded rectangle would be outside the texture area\n            Assert.Throws<ArgumentException>(() => t.GetData(0, new Rectangle(15, 15, 3, 3), b, 0, bs));\n            // this does work\n            t.GetData(0, new Rectangle(15, 15, 1, 1), b, 0, bs);\n\n            t.Dispose();\n        }\n\n        [TestCase(\"random_16px_dxt\", 8)]\n        [TestCase(\"random_16px_dxt_alpha\", 16)]\n        public void GetAndSetDataDxtLowerMips(string texName, int bs)\n        {\n            var t = content.Load<Texture2D>(Paths.Texture(texName));\n\n            var b = new byte[bs];\n            var b2 = new byte[bs];\n\n            t.GetData(0, new Rectangle(0,0,4,4), b, 0, bs);\n            t.GetData(1, new Rectangle(0,0,4,4), b2, 0, bs);\n            t.GetData(2, new Rectangle(0,0,4,4), b2, 0, bs);\n            t.GetData(3, new Rectangle(0,0,2,2), b2, 0, bs);\n            t.GetData(4, new Rectangle(0,0,1,1), b2, 0, bs);\n            t.SetData(3, new Rectangle(0,0,2,2), b2, 0, bs);\n            \n            // would be rounded, but the rectangle is outside the texture area so it wil throw before rounding\n            Assert.Throws<ArgumentException>(() => t.GetData(3, new Rectangle(1, 1, 2, 2), b, 0, bs));\n            Assert.Throws<ArgumentException>(() => t.GetData(3, new Rectangle(0, 0, 3, 3), b, 0, bs));\n\n            t.Dispose();\n        }\n\n        [Test]\n        public void GetDataRowPitch()\n        {\n            const int w = 5;\n            const int h = 4;\n            const int size = w * h;\n            var tex = new Texture2D(gd, w, h, false, SurfaceFormat.Bgr565);\n            var data = new short[size];\n            for (var i = 0; i < data.Length; i++)\n                data[i] = (short) i;\n            tex.SetData(data);\n            var getData = new short[size];\n            tex.GetData(data);\n            for (var i = 0; i < getData.Length; i++)\n                Assert.AreEqual((short) i, data[i]);\n\n            tex.Dispose();\n        }\n\n        [Test]\n        public void NullDeviceShouldThrowArgumentNullException()\n        {\n            Assert.Throws<ArgumentNullException>(() => \n            {\n                var texture = new Texture2D(null, 16, 16);\n                texture.Dispose();\n            });\n            GC.GetTotalMemory(true); // collect uninitialized Texture\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/Texture2DTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Kni.Tests.ContentPipeline;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class Texture2DTest : GraphicsDeviceTestFixtureBase\n    {\n        [TestCase(1, 1)]\n        [TestCase(8, 8)]\n        [TestCase(31, 7)]\n        public void ShouldSetAndGetData(int width, int height)\n        {\n            var dataSize = width * height;\n            var texture2D = new Texture2D(gd, width, height, false, SurfaceFormat.Color);\n            var savedData = new Color[dataSize];\n            for (var index = 0; index < dataSize; index++) savedData[index] = new Color(index % 255, index % 255, index % 255);\n            texture2D.SetData(savedData);\n\n            var readData = new Color[dataSize];\n            texture2D.GetData(readData);\n\n            Assert.AreEqual(savedData, readData);\n\n            texture2D.Dispose();\n        }\n\n        [TestCase(1, 1)]\n        [TestCase(8, 8)]\n        [TestCase(31, 7)]\n        public void ShouldSetAndGetDataForLevel(int width, int height)\n        {\n            var texture2D = new Texture2D(gd, width, height, true, SurfaceFormat.Color);\n\n            for (int i = 0; i < texture2D.LevelCount; i++)\n            {\n                var levelSize = Math.Max(width >> i, 1) * Math.Max(height >> i, 1);\n\n                var savedData = new Color[levelSize];\n                for (var index = 0; index < levelSize; index++)\n                    savedData[index] = new Color(index % 255, index % 255, index % 255);\n                texture2D.SetData(i, null, savedData, 0, savedData.Length);\n\n                var readData = new Color[levelSize];\n                texture2D.GetData(i, null, readData, 0, savedData.Length);\n\n                Assert.AreEqual(savedData, readData);\n            }\n\n            texture2D.Dispose();\n        }\n\n        [Test]\n        public void ShouldGetDataFromRectangle()\n        {\n            const int dataSize = 128 * 128;\n            var texture2D = new Texture2D(gd, 128, 128, false, SurfaceFormat.Color);\n            var savedData = new Color[dataSize];\n            for (var index = 0; index < dataSize; index++) savedData[index] = new Color(index % 255, index % 255, index % 255);\n            texture2D.SetData(savedData);\n\n            var readData = new Color[4];\n            texture2D.GetData(0, new Rectangle(126, 126, 2, 2), readData, 0, 4);\n\n            var expectedData = new[]\n            {\n                new Color(189, 189, 189),\n                new Color(190, 190, 190),\n                new Color(62, 62, 62),\n                new Color(63, 63, 63)\n            };\n            Assert.AreEqual(expectedData, readData);\n\n            texture2D.Dispose();\n        }\n\n#if WINDOWSDX\n        [TestCase(SurfaceFormat.Color, false)]\n        [TestCase(SurfaceFormat.Color, true)]\n        [TestCase(SurfaceFormat.ColorSRgb, false)]\n        [TestCase(SurfaceFormat.ColorSRgb, true)]\n        public void DrawWithSRgbFormats(SurfaceFormat textureFormat, bool sRgbSourceTexture)\n        {\n            PrepareFrameCapture();\n\n            var spriteBatch = new SpriteBatch(gd);\n\n            var width = gd.Viewport.Width;\n            var height = gd.Viewport.Height;\n\n            // Create gradient texture. This will highlight the difference\n            // between sRGB and non-sRGB textures.\n\n            var texture = new Texture2D(\n                gd, width, height,\n                false, textureFormat);\n\n            var heightOver3 = height / 3;\n\n            var textureData = new Color[width * height];\n            for (var y = 0; y < height; y++)\n                for (var x = 0; x < width; x++)\n                {\n                    var colorValue = x / (float) width;\n\n                    // Approximation of sRGB - it's not actually as simple as this,\n                    // but it will suffice for these tests.\n                    if (sRgbSourceTexture)\n                        colorValue = (float) Math.Pow(colorValue, 1 / 2.2);\n\n                    var color = (y < heightOver3) ? new Color(colorValue, 0, 0)\n                        : (y < heightOver3 * 2) ? new Color(0, colorValue, 0)\n                        : new Color(0, 0, colorValue);\n                    textureData[(y * width) + x] = color;\n                }\n            texture.SetData(textureData);\n\n            gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0);\n\n            spriteBatch.Begin();\n            spriteBatch.Draw(texture, Vector2.Zero, Color.White);\n            spriteBatch.End();\n\n            CheckFrames();\n\n            spriteBatch.Dispose();\n            texture.Dispose();\n        }\n#endif\n\n#if !XNA\n        [TestCase(1, 1)]\n        [TestCase(8, 8)]\n        [TestCase(31, 7)]\n#if DESKTOPGL\n        [Ignore(\"Not yet implemented in OpenGL\")]\n#endif\n        public void ShouldSetAndGetDataForTextureArray(int width, int height)\n        {\n            const int arraySize = 4;\n            var texture2D = new Texture2D(gd, width, height, true, SurfaceFormat.Color, arraySize);\n\n            for (var i = 0; i < arraySize; i++)\n                for (var j = 0; j < texture2D.LevelCount; j++)\n                {\n                    var levelSize = Math.Max(width >> j, 1) * Math.Max(height >> j, 1);\n\n                    var savedData = new Color[levelSize];\n                    for (var index = 0; index < levelSize; index++)\n                        savedData[index] = new Color((index + i) % 255, (index + i) % 255, (index + i) % 255);\n                    texture2D.SetData(j, i, null, savedData, 0, savedData.Length);\n\n                    var readData = new Color[levelSize];\n                    texture2D.GetData(j, i, null, readData, 0, readData.Length);\n\n                    Assert.AreEqual(savedData, readData);\n                }\n\n            texture2D.Dispose();\n        }\n#endif\n\n#if WINDOWSDX\n        [Test]\n        public void TextureArrayAsRenderTargetAndShaderResource()\n        {\n            PrepareFrameCapture();\n\n            var solidColorTexture = new Texture2D(gd, 1, 1);\n            solidColorTexture.SetData(new[] { Color.White });\n\n            const int arraySize = 4;\n\n            // Create texture array.\n            var textureArray = new RenderTarget2D(gd, 1, 1, false, SurfaceFormat.Color,\n                DepthFormat.None, 1, RenderTargetUsage.PlatformContents, false, arraySize);\n\n            var colors = new[] { Color.Red, Color.Green, Color.Blue, Color.Yellow };\n\n            var originalRenderTargets = gd.GetRenderTargets();\n\n            // Bind each slice of texture array as render target, and render (different) solid color to each slice.\n            var spriteBatch = new SpriteBatch(gd);\n            for (var i = 0; i < arraySize; i++)\n            {\n                gd.SetRenderTarget(textureArray, i);\n\n                spriteBatch.Begin();\n                spriteBatch.Draw(solidColorTexture, gd.Viewport.Bounds, colors[i]);\n                spriteBatch.End();\n            }\n\n            // Unbind texture array.\n            gd.SetRenderTargets(originalRenderTargets);\n\n            // Now render into backbuffer, using texture array as a shader resource.\n            Effect effect = AssetTestUtility.LoadEffect(content, \"TextureArrayEffect\");\n            effect.Parameters[\"Texture\"].SetValue(textureArray);\n            effect.CurrentTechnique.Passes[0].Apply();\n\n            gd.SamplerStates[0] = SamplerState.LinearClamp;\n\n            // Vertex buffer is not actually used, but currently we need to set a\n            // vertex buffer before calling DrawPrimitives.\n            var vb = new VertexBuffer(gd, typeof(VertexPositionColor), 3, BufferUsage.WriteOnly);\n            gd.SetVertexBuffer(vb);\n\n            gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);\n\n            CheckFrames();\n\n            solidColorTexture.Dispose();\n            spriteBatch.Dispose();\n            textureArray.Dispose();\n            effect.Dispose();\n            vb.Dispose();\n        }\n#endif\n\n        [Test]\n        public void SetDataRowPitch()\n        {\n            PrepareFrameCapture();\n\n            var t = content.Load<Texture2D>(Paths.Texture(\"Logo_65x64_16bit\"));\n            var sb = new SpriteBatch(gd);\n            sb.Begin();\n            sb.Draw(t, new Rectangle(100, 100, 300, 300), null, Color.White);\n            sb.End();\n\n            t.Dispose();\n            sb.Dispose();\n\n            CheckFrames();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/Texture3DNonVisualTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.Graphics\n{\n#if DESKTOPGL\n    [Ignore(\"Texture3D is not implemented for the OpenGL backend.\")]\n#endif\n    [TestFixture]\n    public class Texture3DNonVisualTest\n    {\n        Texture3D t;\n        Color[] reference;\n        const int w=50, h=50, d=50, a = w * d * h;\n        private Game _game;\n\n        [OneTimeSetUp]\n        public void TestFixtureSetUp()\n        {\n            reference = new Color[a];\n            _game = new Game();\n            var graphicsDeviceManager = new GraphicsDeviceManager(_game);\n            graphicsDeviceManager.GraphicsProfile = GraphicsProfile.HiDef;\n            graphicsDeviceManager.ApplyChanges();\n\n            t = new Texture3D(_game.GraphicsDevice, w, h, d, false, SurfaceFormat.Color);\n            for (int layer = 0; layer < d; layer++)\n            {\n                for (int i = 0; i < w * h; i++)\n                {\n                    reference[layer * w * h + i] = new Color(layer * 5, layer * 5, layer * 5, layer * 5);\n                }\n            }\n        }\n\n        [OneTimeTearDown]\n        public void TestFixtureTearDown()\n        {\n            _game.Dispose();\n            t.Dispose();\n        }\n\n        [SetUp]\n        public void TestSetUp()\n        {\n            t.SetData(reference);\n        }\n\n        [Test]\n        public void ZeroSizeShouldFailTest()\n        {\n            Texture3D texture;\n            var gd = _game.GraphicsDevice;\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture3D(gd, 0, 1, 1, false, SurfaceFormat.Color));\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture3D(gd, 1, 0, 1, false, SurfaceFormat.Color));\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture3D(gd, 1, 1, 0, false, SurfaceFormat.Color));\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture3D(gd, 0, 0, 1, false, SurfaceFormat.Color));\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture3D(gd, 1, 0, 0, false, SurfaceFormat.Color));\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture3D(gd, 0, 1, 0, false, SurfaceFormat.Color));\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new Texture3D(gd, 0, 0, 0, false, SurfaceFormat.Color));\n        }\n\n        [Test]\n        public void SetData1ParameterTest()\n        {\n            Color[] written = new Color[a];\n            t.GetData(written);\n            Assert.AreEqual(reference, written);\n        }\n\n        [TestCase(a, 0, a)]\n        [TestCase(a + 1, 0, a)]\n        [TestCase(a + 1, 1, a)]\n        public void SetData3ParametersSuccessTest(int arrayLength, int startIndex, int elementCount)\n        {\n            Color[] write = new Color[arrayLength];\n            Color[] written = new Color[a];\n            for (int i = startIndex; i < arrayLength; i++)\n            {\n                write[i] = new Color(23, 23, 23, 23);\n            }\n            t.SetData(write, startIndex, elementCount);\n            t.GetData(written);\n            for (int i = 0; i < a; i++)\n            {\n                if (i < startIndex)\n                    Assert.AreNotEqual(reference[i], written[i], string.Format(\"Color written from before startIndex\"));\n                else if (i < elementCount + startIndex)\n                    Assert.AreEqual(write[i + startIndex], written[i], string.Format(\"bad color in position {0}\", i));\n                else\n                    Assert.AreEqual(reference[i], written[i], string.Format(\"Color written after elementCount\"));\n            }\n\n        }\n\n        [TestCase(a, 0, a - 1)]\n        [TestCase(a - 1, 0, a)]\n        [TestCase(a, 1, a)]\n        [TestCase(a, 0, a + 1)]\n        [TestCase(a + 1, 1, a + 1)]\n        public void SetData3ParametersExceptionTest(int arrayLength, int startIndex, int elementCount)\n        {\n            Color[] write = new Color[arrayLength];\n            Color[] written = new Color[a];\n            for (int i = startIndex; i < arrayLength; i++)\n            {\n                write[i] = new Color(23, 23, 23, 23);\n            }\n            Assert.Throws(Is.InstanceOf<Exception>(), () =>t.SetData(write, startIndex, elementCount));\n        }\n\n        [TestCase((w - 2) * (h - 2) * (d - 2), 0, (w - 2) * (h - 2) * (d - 2), 1, 1, 1, w - 2, h - 2, d - 2)]\n        [TestCase(a, 0, a, 0, 0, 0, w, h, d)]\n        [TestCase(a + 1, 1, a, 0, 0, 0, w, h, d)]\n        public void SetData9ParametersSuccessTest(int arrayLength, int startIndex, int elementCount, int x, int y, int z, int w, int h, int d)\n        {\n            Color[] write = new Color[arrayLength];\n            Color[] written = new Color[Texture3DNonVisualTest.w * Texture3DNonVisualTest.h * Texture3DNonVisualTest.d];\n            for (int i = startIndex; i < arrayLength; i++)\n            {\n                write[i] = new Color(23, 23, 23, 23);\n            }\n            t.SetData(0, x, y, x + w, y + h, z, z + d, write, startIndex, elementCount);\n            t.GetData(written);\n            int cx, cy, cz;\n            for (int i = 0, j = 0; i < Texture3DNonVisualTest.w * Texture3DNonVisualTest.h * Texture3DNonVisualTest.d; i++)\n            {\n                cx = i % Texture3DNonVisualTest.w;\n                cy = (i / Texture3DNonVisualTest.w) % Texture3DNonVisualTest.h;\n                cz = ((i / Texture3DNonVisualTest.w) / Texture3DNonVisualTest.h) % Texture3DNonVisualTest.d;\n                if (cx >= x && cx < w + x && cy >= y && cy < h + y && cz >= z && cz < d + z)\n                    Assert.AreEqual(write[startIndex + j++], written[i], string.Format(\"bad color in position x:{0};y:{1};z:{2};i:{3}\", cx, cy, cz, i));\n                else\n                    Assert.AreEqual(reference[i], written[i], string.Format(\"bad color in position x:{0};y:{1};z:{2};i:{3}, outside requested area\", cx, cy, cz, i));\n            }\n        }\n\n        [TestCase(a, 0, a, -1, -1, -1, w + 1, h + 1, d + 1)]\n        [TestCase(a, 1, a, 0, 0, 0, w, h, d)]\n        public void SetData9ParametersExceptionTest(int arrayLength, int startIndex, int elementCount, int x, int y, int z, int w, int h, int d)\n        {\n            Color[] write = new Color[arrayLength];\n            for (int i = startIndex; i < arrayLength; i++)\n            {\n                write[i] = new Color(23, 23, 23, 23);\n            }\n            Assert.Throws(Is.InstanceOf<Exception>(), () => t.SetData(0, x, y, x + w, y + h, z, z + d, write, startIndex, elementCount));\n        }\n\n        [Test]\n        public void NullDeviceShouldThrowArgumentNullException()\n        {\n            Assert.Throws<ArgumentNullException>(() => \n            {                \n                var texture = new Texture3D(null, 16, 16, 16, false, SurfaceFormat.Color);\n                texture.Dispose();\n            });\n            GC.GetTotalMemory(true); // collect uninitialized Texture\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/Texture3DTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n#if DESKTOPGL\n    [Ignore(\"Texture3D is not implemented for the OpenGL backend.\")]\n#endif\n    [TestFixture]\n    class Texture3DTest : GraphicsDeviceTestFixtureBase\n    {\n        [TestCase(1, 1, 1)]\n        [TestCase(8, 8, 8)]\n        [TestCase(31, 7, 13)]\n        public void ShouldSetAndGetData(int width, int height, int depth)\n        {\n            var dataSize = width * height * depth;\n            var texture3D = new Texture3D(gd, width, height, depth, false, SurfaceFormat.Color);\n            var savedData = new Color[dataSize];\n            for (var index = 0; index < dataSize; index++) savedData[index] = new Color(index, index, index);\n            texture3D.SetData(savedData);\n\n            var readData = new Color[dataSize];\n            texture3D.GetData(readData);\n\n            Assert.AreEqual(savedData, readData);\n\n            texture3D.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/TextureCubeTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class TextureCubeTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void ZeroSizeShouldFailTest()\n        {\n            TextureCube texture;\n            Assert.Throws<ArgumentOutOfRangeException>(() => texture = new TextureCube(gd, 0, false, SurfaceFormat.Color));\n        }\n\n        [TestCase(1)]\n        [TestCase(8)]\n        [TestCase(31)]\n        public void ShouldSetAndGetData(int size)\n        {\n            var dataSize = size * size;\n            var textureCube = new TextureCube(gd, size, false, SurfaceFormat.Color);\n\n            for (var i = 0; i < 6; i++)\n            {\n                var savedData = new Color[dataSize];\n                for (var index = 0; index < dataSize; index++)\n                    savedData[index] = new Color(index + i, index + i, index + i);\n                textureCube.SetData((CubeMapFace) i, savedData);\n\n                var readData = new Color[dataSize];\n                textureCube.GetData((CubeMapFace) i, readData);\n\n                Assert.AreEqual(savedData, readData);\n            }\n\n            textureCube.Dispose();\n        }\n\n        [Test]\n        public void GetAndSetDataDxtCompressed()\n        {\n            var t = content.Load<TextureCube>(Paths.Texture (\"SampleCube64DXT1Mips\"));\n\n            for (var f = 0; f < 6; f++)\n            {\n                var face = (CubeMapFace) f;\n                var b = new byte[t.Size*t.Size/2];\n                var b2 = new byte[t.Size*t.Size/2];\n\n                t.GetData(face, b);\n                t.SetData(face, b);\n                t.GetData(face, b2);\n\n                Assert.AreEqual(b, b2);\n\n                // KNI allows any kind of type that is not larger than one element\n                // while XNA only allows byte.\n#if !XNA\n                var b3 = new short[t.Size*t.Size/4];\n                t.GetData(face, b3);\n                t.SetData(face, b3);\n\n                t.GetData(face, b2);\n                Assert.AreEqual(b, b2);\n\n                var b4 = new int[t.Size*t.Size/8];\n                t.GetData(face, b4);\n                t.SetData(face, b4);\n\n                t.GetData(face, b2);\n                Assert.AreEqual(b, b2);\n\n                var b5 = new long[t.Size*t.Size/16];\n                t.GetData(face, b5);\n                t.SetData(face, b5);\n\n                t.GetData(face, b2);\n                Assert.AreEqual(b, b2);\n\n                // this is too large, DXT1 blocks are 64 bits while Vector4 is 128 bits\n                var b6 = new Vector4[t.Size*t.Size/32];\n                Assert.Throws<ArgumentException>(() => t.GetData(face, b6));\n                Assert.Throws<ArgumentException>(() => t.SetData(face, b6));\n\n                var b7 = new Vector3[t.Size*t.Size/24];\n                Assert.Throws<ArgumentException>(() => t.GetData(face, b7));\n                Assert.Throws<ArgumentException>(() => t.SetData(face, b7));\n#endif\n            }\n\n            t.Dispose();\n        }\n\n        // DXT1\n        [TestCase(8, \"SampleCube64DXT1Mips\", 0)]\n        [TestCase(8, \"SampleCube64DXT1Mips\", 1)]\n        // TODO DXT5\n        //[TestCase(16, \"SampleCube64DXT5Mips\", 0)]\n        //[TestCase(16, \"SampleCube64DXT5Mips\", 1)]\n        public void GetAndSetDataDxtNotMultipleOf4Rounding(int bs, string texName, int mip)\n        {\n            var t = content.Load<TextureCube>(Paths.Texture (texName));\n\n            for (var f = 0; f < 6; f++)\n            {\n                var face = (CubeMapFace) f;\n                var before = new byte[t.Size*t.Size*bs/16];\n                t.GetData(face, before);\n\n                var b1 = new byte[bs];\n                var b2 = new byte[bs];\n\n                t.GetData(face, mip, new Rectangle(0, 0, 4, 4), b1, 0, bs);\n\n                t.GetData(face, mip, new Rectangle(0, 0, 1, 1), b2, 0, bs);\n                t.SetData(face, mip, new Rectangle(0, 0, 1, 1), b2, 0, bs);\n                Assert.AreEqual(b1, b2);\n\n                t.GetData(face, mip, new Rectangle(0, 0, 1, 3), b2, 0, bs);\n                t.SetData(face, mip, new Rectangle(0, 0, 1, 3), b2, 0, bs);\n                Assert.AreEqual(b1, b2);\n\n                t.GetData(face, mip, new Rectangle(0, 0, 4, 3), b2, 0, bs);\n                t.SetData(face, mip, new Rectangle(0, 0, 4, 3), b2, 0, bs);\n                Assert.AreEqual(b1, b2);\n\n                t.GetData(face, mip, new Rectangle(0, 2, 4, 4), b2, 0, bs);\n                t.SetData(face, mip, new Rectangle(0, 2, 4, 4), b2, 0, bs);\n                Assert.AreEqual(b1, b2);\n\n                t.GetData(face, mip, new Rectangle(2, 2, 4, 4), b2, 0, bs);\n                t.SetData(face, mip, new Rectangle(2, 2, 4, 4), b2, 0, bs);\n                Assert.AreEqual(b1, b2);\n\n                t.GetData(face, mip, new Rectangle(3, 3, 4, 4), b2, 0, bs);\n                t.SetData(face, mip, new Rectangle(3, 3, 4, 4), b2, 0, bs);\n                Assert.AreEqual(b1, b2);\n\n                t.GetData(face, mip, new Rectangle(4, 4, 4, 4), b2, 0, bs);\n                t.SetData(face, mip, new Rectangle(4, 4, 4, 4), b2, 0, bs);\n                Assert.AreNotEqual(b1, b2);\n\n                var after = new byte[t.Size*t.Size*bs/16];\n                t.GetData(face, after);\n\n                Assert.AreEqual(before, after);\n            }\n\n            t.Dispose();\n        }\n\n        [TestCase(\"SampleCube64DXT1Mips\", 8)]\n        //[TestCase(\"SampleCube64DXT5Mips\", 16)]\n        public void GetAndSetDataDxtDontRoundWhenOutsideBounds(string texName, int bs)\n        {\n            var t = content.Load<TextureCube>(Paths.Texture(texName));\n\n            var b = new byte[bs];\n\n            for (var f = 0; f < 6; f++)\n            {\n                var face = (CubeMapFace) f;\n                // don't round if the unrounded rectangle would be outside the texture area\n                Assert.Throws<ArgumentException>(() => t.GetData(face, 0, new Rectangle(63, 63, 3, 3), b, 0, bs));\n                // this does work\n                t.GetData(face, 0, new Rectangle(63, 63, 1, 1), b, 0, bs);\n            }\n\n            t.Dispose();\n        }\n\n        [TestCase(\"SampleCube64DXT1Mips\", 8)]\n        //[TestCase(\"SampleCube64DXT5Mips\", 16)]\n        public void GetAndSetDataDxtLowerMips(string texName, int bs)\n        {\n            var t = content.Load<TextureCube>(Paths.Texture(texName));\n\n            for (var f = 0; f < 6; f++)\n            {\n                var face = (CubeMapFace) f;\n                var b = new byte[bs];\n                var b2 = new byte[bs];\n\n                t.GetData(face, 0, new Rectangle(0, 0, 4, 4), b, 0, bs);\n                t.GetData(face, 1, new Rectangle(0, 0, 4, 4), b2, 0, bs);\n                t.GetData(face, 2, new Rectangle(0, 0, 4, 4), b2, 0, bs);\n                t.GetData(face, 3, new Rectangle(0, 0, 2, 2), b2, 0, bs);\n                t.GetData(face, 4, new Rectangle(0, 0, 1, 1), b2, 0, bs);\n                t.SetData(face, 3, new Rectangle(0, 0, 2, 2), b2, 0, bs);\n\n                // would be rounded, but the rectangle is outside the texture area so it wil throw before rounding\n                Assert.Throws<ArgumentException>(() => t.GetData(face, 5, new Rectangle(1, 1, 2, 2), b, 0, bs));\n                Assert.Throws<ArgumentException>(() => t.GetData(face, 5, new Rectangle(0, 0, 3, 3), b, 0, bs));\n            }\n\n            t.Dispose();\n        }\n\n        [Test]\n        public void NullDeviceShouldThrowArgumentNullException()\n        {\n            Assert.Throws<ArgumentNullException>(() => \n            {                \n                var texture = new TextureCube(null, 16, false, SurfaceFormat.Color);\n                texture.Dispose();\n            });\n            GC.GetTotalMemory(true); // collect uninitialized Texture\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/VertexBufferTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    [TestFixture]\n    class VertexBufferTest : GraphicsDeviceTestFixtureBase\n    {\n        VertexPositionTexture[] savedData = new VertexPositionTexture[] \n        {\n            new VertexPositionTexture(new Vector3(1,2,3), new Vector2(0.1f,0.2f)),\n            new VertexPositionTexture(new Vector3(4,5,6), new Vector2(0.3f,0.4f)),\n            new VertexPositionTexture(new Vector3(7,8,9), new Vector2(0.5f,0.6f)),\n            new VertexPositionTexture(new Vector3(10,11,12), new Vector2(0.7f,0.8f))\n        };\n        VertexPositionTexture vertexZero = new VertexPositionTexture(Vector3.Zero, Vector2.Zero);\n        \n        //[TestCase(true)]\n        [TestCase(false)]\n        public void ShouldSetAndGetData(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                ?new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                :new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            vertexBuffer.SetData(savedData);\n\n            VertexPositionTexture[] readData = new VertexPositionTexture[4];\n            vertexBuffer.GetData(readData, 0, 4);\n            Assert.AreEqual(savedData, readData);\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void ShouldSetAndGetData_elementCount(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            vertexBuffer.SetData(savedData);\n\n            VertexPositionTexture[] readData = new VertexPositionTexture[4];\n            vertexBuffer.GetData(readData, 0, 2);\n            Assert.AreEqual(savedData[0], readData[0]);\n            Assert.AreEqual(savedData[1], readData[1]);\n            Assert.AreEqual(vertexZero, readData[2]);\n            Assert.AreEqual(vertexZero, readData[3]);\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void ShouldSetAndGetData_startIndex(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            vertexBuffer.SetData(savedData);\n\n            VertexPositionTexture[] readData = new VertexPositionTexture[4];\n            vertexBuffer.GetData(readData, 2, 2);\n            Assert.AreEqual(vertexZero, readData[0]);\n            Assert.AreEqual(vertexZero, readData[1]);\n            Assert.AreEqual(savedData[0], readData[2]);\n            Assert.AreEqual(savedData[1], readData[3]);\n\n            vertexBuffer.Dispose();\n        }\n        \n        //[TestCase(true)]\n        [TestCase(false)]\n        public void ShouldSetAndGetData_offsetInBytes(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            vertexBuffer.SetData(savedData);\n\n            VertexPositionTexture[] readData = new VertexPositionTexture[2];\n            int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride;\n            int offsetInBytes = vertexStride * 2;\n            vertexBuffer.GetData(offsetInBytes, readData, 0, 2, vertexStride);\n            Assert.AreEqual(savedData[2], readData[0]);\n            Assert.AreEqual(savedData[3], readData[1]);\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void ShouldSetAndGetDataBytes(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            byte[] savedDataBytes = ArrayUtil.ConvertFrom(savedData);\n            vertexBuffer.SetData(savedDataBytes);\n\n            if (dynamic)\n            {\n                DynamicVertexBuffer dynamicVertexBuffer = vertexBuffer as DynamicVertexBuffer;\n                dynamicVertexBuffer.SetData(savedDataBytes, 0, savedDataBytes.Length, SetDataOptions.None);\n            }\n\n            VertexPositionTexture[] readData = new VertexPositionTexture[4];\n            vertexBuffer.GetData(readData, 0, 4);\n            Assert.AreEqual(savedData, readData);\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void ShouldSetBytesAndGetBytes(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            byte[] savedDataBytes = ArrayUtil.ConvertFrom(savedData);\n            vertexBuffer.SetData(savedDataBytes);\n\n            if (dynamic)\n            {\n                DynamicVertexBuffer dynamicVertexBuffer = vertexBuffer as DynamicVertexBuffer;\n                dynamicVertexBuffer.SetData(savedDataBytes, 0, savedDataBytes.Length, SetDataOptions.None);\n            }\n\n            byte[] readData = new byte[savedDataBytes.Length];\n            vertexBuffer.GetData(readData, 0, readData.Length);\n\n            Assert.AreEqual(savedDataBytes, readData);\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void ShouldSetBytesAndGetStructData(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            byte[] savedDataBytes = new byte[] { 1,2,3,4,5,6,7,8 };\n            vertexBuffer.SetData(savedDataBytes);\n\n            if (dynamic)\n            {\n                DynamicVertexBuffer dynamicVertexBuffer = vertexBuffer as DynamicVertexBuffer;\n                dynamicVertexBuffer.SetData(savedDataBytes, 0, savedDataBytes.Length, SetDataOptions.None);\n            }\n\n            Color[] readData = new Color[2];\n            vertexBuffer.GetData(0, readData, 0, readData.Length, 1);\n\n            Assert.AreEqual(readData[0].R, savedDataBytes[0]);\n            Assert.AreEqual(readData[0].G, savedDataBytes[1]);\n            Assert.AreEqual(readData[0].B, savedDataBytes[2]);\n            Assert.AreEqual(readData[0].A, savedDataBytes[3]);\n            Assert.AreEqual(readData[1].R, savedDataBytes[4]);\n            Assert.AreEqual(readData[1].G, savedDataBytes[5]);\n            Assert.AreEqual(readData[1].B, savedDataBytes[6]);\n            Assert.AreEqual(readData[1].A, savedDataBytes[7]);\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false, -1, 0, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 0, 0, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 0, 1, true, null)]\n        [TestCase(false, 0, -1, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 0, 80, true, null)]\n        [TestCase(false, 0, 81, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 1, 0, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 1, 1, true, null)]\n        [TestCase(false, 1, 79, true, null)]\n        [TestCase(false, 1, 80, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 79, 1, true, null)]\n        [TestCase(false, 79, 2, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 80, 0, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 80, 1, false, typeof(ArgumentOutOfRangeException))]\n        public void SetDataWithElementCount(bool dynamic, int startIndex, int elementCount, bool shouldSucceed, Type expectedExceptionType)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length,BufferUsage.None);\n            byte[] savedDataBytes = ArrayUtil.ConvertFrom(savedData);\n\n            if (!shouldSucceed)\n                Assert.Throws(expectedExceptionType, () => vertexBuffer.SetData(savedDataBytes, startIndex, elementCount));\n            else\n            {\n                vertexBuffer.SetData(savedDataBytes, startIndex, elementCount);\n\n                byte[] readDataBytes = new byte[savedDataBytes.Length];\n                vertexBuffer.GetData(readDataBytes, startIndex, elementCount);\n                Assert.AreEqual(\n                    savedDataBytes.Skip(startIndex).Take(elementCount).ToArray(),\n                    readDataBytes.Skip(startIndex).Take(elementCount).ToArray());\n            }\n\n            vertexBuffer.Dispose();\n        }\n\n        [TestCase(false, 1, -1, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 0, 0, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 80, 0, null)]\n        [TestCase(false, 80, 1, null)]\n        [TestCase(false, 1, 2, null)]\n        [TestCase(false, 1, 40, null)]\n        [TestCase(false, 2, 40, null)]\n        [TestCase(false, 2, 80, typeof(InvalidOperationException))]\n        [TestCase(false, 1, 80, null)]\n        [TestCase(false, 4, 12, null)]\n#if XNA\n        [TestCase(false, 1, 81, null)]\n        [TestCase(false, 2, 81, typeof(InvalidOperationException))]\n#else\n        // We throw when the vertex stride is too large\n        [TestCase(false, 1, 81, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 2, 81, typeof(ArgumentOutOfRangeException))]\n#endif\n        public void SetDataWithElementCountAndVertexStride(bool dynamic, int elementCount, int vertexStride, Type expectedExceptionType)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            byte[] savedDataBytes = ArrayUtil.ConvertFrom(savedData);\n\n            if (expectedExceptionType != null)\n                Assert.Throws(expectedExceptionType, () => vertexBuffer.SetData(0, savedDataBytes, 0, elementCount, vertexStride));\n            else\n            {\n                vertexBuffer.SetData(0, savedDataBytes, 0, elementCount, vertexStride);\n\n                byte[] readDataBytes = new byte[savedDataBytes.Length];\n                vertexBuffer.GetData(0, readDataBytes, 0, elementCount, vertexStride);\n                Assert.AreEqual(\n                    savedDataBytes.Take(elementCount).ToArray(), \n                    readDataBytes.Take(elementCount).ToArray());\n            }\n\n            vertexBuffer.Dispose();\n        }\n\n        [Test]\n        public void GetSetDataVertexStrideTest()\n        {\n            const int size = 5;\n            VertexPositionTexture[] data = new VertexPositionTexture[size];\n            for (int i = 0; i < data.Length; i++)\n            {\n                data[i] = new VertexPositionTexture(\n                    new Vector3(i * 3, i * 3 + 1, i * 3 + 2),\n                    new Vector2(i * 2 / (float) 10, (i * 2 + 1) / (float) 10));\n            }\n\n            VertexBuffer vertexBuffer = new VertexBuffer(gd, VertexPositionTexture.VertexDeclaration, data.Length, BufferUsage.None);\n            vertexBuffer.SetData(data);\n\n            Vector2[] textureCoords = new Vector2[2 * size + 1];\n            textureCoords[0] = new Vector2(-42, 42);\n            vertexBuffer.GetData(3 * 4, textureCoords, 1, size, 20);\n\n            // first one should not be overwritten\n            Assert.AreEqual(new Vector2(-42, 42), textureCoords[0]);\n            // last should not be overwritten\n            for (int i = 1 + size; i< textureCoords.Length; i++)\n                Assert.AreEqual(Vector2.Zero, textureCoords[i]);\n            for (int i = 0; i < size; i++)\n            {\n                int index = i + 1;\n                Vector2 expected = new Vector2(i * 2 / (float) 10, (i * 2 + 1) / (float) 10);\n                Assert.AreEqual(expected, textureCoords[index]);\n            }\n\n            vertexBuffer.SetData(3 * 4, textureCoords, 1, size, 20);\n            vertexBuffer.GetData(3 * 4, textureCoords, 1, size, 20);\n\n            // first one should not be overwritten\n            Assert.AreEqual(new Vector2(-42, 42), textureCoords[0]);\n            // last should not be overwritten\n            for (int i = 1 + size; i< textureCoords.Length; i++)\n                Assert.AreEqual(Vector2.Zero, textureCoords[i]);\n            for (int i = 0; i < size; i++)\n            {\n                int index = i + 1;\n                Vector2 expected = new Vector2(i * 2 / (float) 10, (i * 2 + 1) / (float) 10);\n                Assert.AreEqual(expected, textureCoords[index]);\n            }\n        }\n\n        //[TestCase(true)]\n        [TestCase(false, 1, 20, true, null)]\n        [TestCase(false, 3, 20, true, null)]\n        [TestCase(false, 4, 0, true, null)]\n        [TestCase(false, 4, 16, false, typeof(ArgumentOutOfRangeException))]\n        [TestCase(false, 4, 20, true, null)]\n        [TestCase(false, 5, 20, false, typeof(ArgumentOutOfRangeException))]\n        public void SetDataStructWithElementCountAndVertexStride(bool dynamic, int elementCount, int vertexStride, bool shouldSucceed, Type expectedExceptionType)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length,BufferUsage.None);\n\n            if (!shouldSucceed)\n                Assert.Throws(expectedExceptionType, () => vertexBuffer.SetData(0, savedData, 0, elementCount, vertexStride));\n            else\n            {\n                vertexBuffer.SetData(0, savedData, 0, elementCount, vertexStride);\n\n                VertexPositionTexture[] readData = new VertexPositionTexture[savedData.Length];\n                vertexBuffer.GetData(0, readData, 0, elementCount, vertexStride);\n                Assert.AreEqual(\n                    savedData.Take(elementCount).ToArray(),\n                    readData.Take(elementCount).ToArray());\n            }\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void GetPosition(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            vertexBuffer.SetData(savedData);\n\n            Vector3[] readData = new Vector3[5];\n            readData[4] = new Vector3(42, 42, 42);\n            int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride;\n            vertexBuffer.GetData(0, readData, 0, 4, vertexStride);\n            Assert.AreEqual(savedData[0].Position, readData[0]);\n            Assert.AreEqual(savedData[1].Position, readData[1]);\n            Assert.AreEqual(savedData[2].Position, readData[2]);\n            Assert.AreEqual(savedData[3].Position, readData[3]);\n            Assert.AreEqual(new Vector3(42, 42, 42), readData[4]); // bound check\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void SetPosition(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            Vector3[] positions = new Vector3[]\n            {\n                savedData[0].Position,\n                savedData[1].Position,\n                savedData[2].Position,\n                savedData[3].Position\n            };\n            int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride;\n            vertexBuffer.SetData(0, positions, 0, 4, vertexStride);\n\n            Vector3[] readData = new Vector3[5];\n            readData[4] = new Vector3(42, 42, 42);\n            vertexBuffer.GetData(0, readData, 0, 4, vertexStride);\n            Assert.AreEqual(savedData[0].Position, readData[0]);\n            Assert.AreEqual(savedData[1].Position, readData[1]);\n            Assert.AreEqual(savedData[2].Position, readData[2]);\n            Assert.AreEqual(savedData[3].Position, readData[3]);\n            Assert.AreEqual(new Vector3(42, 42, 42), readData[4]); // bound check\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void GetTextureCoordinate(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            vertexBuffer.SetData(savedData);\n\n            Vector2[] readData = new Vector2[5];\n            readData[4] = new Vector2(42, 42);\n            int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride;\n            int offsetInBytes = VertexPositionTexture.VertexDeclaration.GetVertexElements()[1].Offset;\n            vertexBuffer.GetData(offsetInBytes, readData, 0, 4, vertexStride);\n            Assert.AreEqual(savedData[0].TextureCoordinate, readData[0]);\n            Assert.AreEqual(savedData[1].TextureCoordinate, readData[1]);\n            Assert.AreEqual(savedData[2].TextureCoordinate, readData[2]);\n            Assert.AreEqual(savedData[3].TextureCoordinate, readData[3]);\n            Assert.AreEqual(new Vector2(42, 42), readData[4]); // bound check\n\n            vertexBuffer.Dispose();\n        }\n\n        //[TestCase(true)]\n        [TestCase(false)]\n        public void SetTextureCoordinate(bool dynamic)\n        {\n            VertexBuffer vertexBuffer = (dynamic)\n                                      ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None)\n                                      : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None);\n            Vector2[] texCoords = new Vector2[]\n            {\n                savedData[0].TextureCoordinate,\n                savedData[1].TextureCoordinate,\n                savedData[2].TextureCoordinate,\n                savedData[3].TextureCoordinate\n            };\n            int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride;\n            int offsetInBytes = VertexPositionTexture.VertexDeclaration.GetVertexElements()[1].Offset;\n            vertexBuffer.SetData(offsetInBytes, texCoords, 0, 4, vertexStride);\n\n            Vector2[] readData = new Vector2[5];\n            readData[4] = new Vector2(42, 42);\n            vertexBuffer.GetData(offsetInBytes, readData, 0, 4, vertexStride);\n            Assert.AreEqual(savedData[0].TextureCoordinate, readData[0]);\n            Assert.AreEqual(savedData[1].TextureCoordinate, readData[1]);\n            Assert.AreEqual(savedData[2].TextureCoordinate, readData[2]);\n            Assert.AreEqual(savedData[3].TextureCoordinate, readData[3]);\n            Assert.AreEqual(new Vector2(42, 42), readData[4]); // bound check\n\n            vertexBuffer.Dispose();\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct VertexTextureCoordinateTest : IVertexType\n        {\n            public Vector3 Normal;\n            public Vector2 TextureCoordinate;\n\n            public static readonly VertexDeclaration VertexDeclaration = new VertexDeclaration(\n                new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0),\n                new VertexElement(12, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0));\n\n            VertexDeclaration IVertexType.VertexDeclaration\n            {\n                get { return VertexDeclaration; }\n            }\n        }\n\n        [Test]\n        public void ShouldSucceedWhenVertexFormatDoesMatchShader()\n        {\n            VertexBuffer vertexBuffer = new VertexBuffer(gd, VertexPositionTexture.VertexDeclaration, 3, BufferUsage.None);\n            gd.SetVertexBuffer(vertexBuffer);\n\n            Effect effect = new BasicEffect(gd);\n            effect.CurrentTechnique.Passes[0].Apply();\n\n            Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1));\n\n            vertexBuffer.Dispose();\n        }\n\n        [Test]\n#if DESKTOPGL\n        [Ignore(\"we should figure out if there's a way to check this in OpenGL\")]\n#endif\n        public void ShouldThrowHelpfulExceptionWhenVertexFormatDoesNotMatchShader()\n        {\n            VertexBuffer vertexBuffer = new VertexBuffer(gd, VertexTextureCoordinateTest.VertexDeclaration, 3, BufferUsage.None);\n            gd.SetVertexBuffer(vertexBuffer);\n\n            Effect effect = new BasicEffect(gd);\n            effect.CurrentTechnique.Passes[0].Apply();\n\n            Exception ex = Assert.Throws<InvalidOperationException>(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1));\n#if XNA\n            Assert.That(ex.Message, Is.EqualTo(\"The current vertex declaration does not include all the elements required by the current vertex shader. Position0 is missing.\"));\n#else\n            Assert.That(ex.Message, Is.EqualTo(\"An error occurred while preparing to draw. \"\n                + \"This is probably because the current vertex declaration does not include all the elements \"\n                + \"required by the current vertex shader. The current vertex declaration includes these elements: \" \n                + \"NORMAL0, TEXCOORD0.\"));\n#endif\n\n            vertexBuffer.Dispose();\n        }\n\n        [Test]\n        public void NullDeviceShouldThrowArgumentNullException()\n        {\n            Assert.Throws<ArgumentNullException>(() => \n            {\n                VertexBuffer vertexBuffer = new VertexBuffer(null, typeof(VertexPositionTexture), 3, BufferUsage.None);\n                vertexBuffer.Dispose();\n            });\n            GC.GetTotalMemory(true); // collect uninitialized vertexBuffer\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/ViewportTest.cs",
    "content": "﻿using Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n    class ViewportTest : GraphicsDeviceTestFixtureBase\n    {\n        [Test]\n        public void Affects_draw_origin()\n        {\n            PrepareFrameCapture();\n\n            var spriteBatch = new SpriteBatch(gd);\n            var swatch = content.Load<Texture2D>(Paths.Texture(\"white-64\"));\n\n            gd.Clear(Color.CornflowerBlue);\n            gd.Viewport = new Viewport(20, 40, 100, 100);\n\n            spriteBatch.Begin();\n            spriteBatch.Draw(swatch, new Vector2(10, 20), Color.GreenYellow);\n            spriteBatch.End();\n\n            CheckFrames();\n\n            spriteBatch.Dispose();\n            swatch.Dispose();\n        }\n\n        [Test]\n        public void Does_not_clip_device_clear()\n        {\n            PrepareFrameCapture();\n\n            var presentParams = gd.PresentationParameters;\n            gd.Viewport = new Viewport(\n                0, 0,\n                presentParams.BackBufferWidth,\n                presentParams.BackBufferHeight);\n            gd.Clear(Color.CornflowerBlue);\n\n            gd.Viewport = new Viewport(30, 40, 100, 200);\n            gd.Clear(Color.Red);\n\n            CheckFrames();\n        }\n\n        [Test]\n        public void Clips_SpriteBatch_draws()\n        {\n            PrepareFrameCapture();\n\n            var spriteBatch = new SpriteBatch(gd);\n            var swatch = content.Load<Texture2D>(Paths.Texture(\"white-64\"));\n\n            gd.Clear(Color.CornflowerBlue);\n            gd.Viewport = new Viewport(30, 40, 50, 60);\n\n            spriteBatch.Begin();\n            spriteBatch.Draw(\n                swatch, new Vector2(20, -20), null, Color.Indigo,\n                MathHelper.PiOver4, Vector2.Zero, Vector2.One,\n                SpriteEffects.None, 0);\n            spriteBatch.End();\n\n            CheckFrames();\n\n            spriteBatch.Dispose();\n            swatch.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Graphics/VisualMiscellaneousTests.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework;\nusing Kni.Tests.Components;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Graphics\n{\n\t[TestFixture]\n\tclass VisualMiscellaneousTests : VisualTestFixtureBase\n\t{\n\t\t[Test]\n\t\tpublic void DrawOrder_falls_back_to_order_of_addition_to_Game()\n\t\t{\n\t\t\tGame.PreDrawWith += (sender, e) =>\n\t\t\t{\n\t\t\t\tGame.GraphicsDevice.Clear(Color.CornflowerBlue);\n\t\t\t};\n\n\t\t\tGame.Components.Add(new ImplicitDrawOrderComponent(Game));\n\t\t\tRunMultiFrameTest(captureCount: 5);\n\t\t}\n\n\t\t[TestCase(true)]\n\t\t[TestCase(false)]\n\t\tpublic void TexturedQuad_lighting(bool enableLighting)\n\t\t{\n\t\t\tGame.Components.Add(new TexturedQuadComponent(Game, enableLighting));\n\t\t\tRunSingleFrameTest();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void SpaceshipModel()\n\t\t{\n\t\t\tGame.Components.Add(new SpaceshipModelDrawComponent(Game));\n\t\t\tRunMultiFrameTest(captureCount: 10, captureStride: 2);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Framework.Input/GamePadTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Input\n{\n    public class GamePadTest\n    {\n        #region GamePadButtons\n\n#if !XNA\n        [TestCaseSource(\"GetButtons\")]\n        public void GamePadButtonsTest(params Buttons[] buttons)\n        {\n            var gpb = new GamePadButtons(buttons);\n\n            Assert.AreEqual(buttons.Contains(Buttons.A) ? ButtonState.Pressed : ButtonState.Released, gpb.A);\n            Assert.AreEqual(buttons.Contains(Buttons.B) ? ButtonState.Pressed : ButtonState.Released, gpb.B);\n            Assert.AreEqual(buttons.Contains(Buttons.Back) ? ButtonState.Pressed : ButtonState.Released, gpb.Back);\n            Assert.AreEqual(buttons.Contains(Buttons.X) ? ButtonState.Pressed : ButtonState.Released, gpb.X);\n            Assert.AreEqual(buttons.Contains(Buttons.Y) ? ButtonState.Pressed : ButtonState.Released, gpb.Y);\n            Assert.AreEqual(buttons.Contains(Buttons.Start) ? ButtonState.Pressed : ButtonState.Released, gpb.Start);\n            Assert.AreEqual(buttons.Contains(Buttons.LeftShoulder) ? ButtonState.Pressed : ButtonState.Released, gpb.LeftShoulder);\n            Assert.AreEqual(buttons.Contains(Buttons.LeftStick) ? ButtonState.Pressed : ButtonState.Released, gpb.LeftStick);\n            Assert.AreEqual(buttons.Contains(Buttons.RightShoulder) ? ButtonState.Pressed : ButtonState.Released, gpb.RightShoulder);\n            Assert.AreEqual(buttons.Contains(Buttons.RightStick) ? ButtonState.Pressed : ButtonState.Released, gpb.RightStick);\n            Assert.AreEqual(buttons.Contains(Buttons.BigButton) ? ButtonState.Pressed : ButtonState.Released, gpb.BigButton);\n        }\n#endif\n\n        #endregion\n\n        #region DPad\n\n        [TestCase(ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released)]\n        [TestCase(ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Released)]\n        [TestCase(ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Released)]\n        [TestCase(ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released)]\n        [TestCase(ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Pressed)]\n        public void DpadTest(ButtonState up, ButtonState down, ButtonState left, ButtonState right)\n        {\n            var pad = new GamePadDPad(up, down, left, right);\n            Assert.AreEqual(up, pad.Up);\n            Assert.AreEqual(down, pad.Down);\n            Assert.AreEqual(left, pad.Left);\n            Assert.AreEqual(right, pad.Right);\n\n#if !XNA\n            var pad2 = new GamePadDPad(up, down, left, right);\n\n            Assert.AreEqual(pad, pad2);\n            Assert.AreEqual(pad.GetHashCode(), pad2.GetHashCode());\n\n            var buttons = (Buttons) 0;\n            if (up == ButtonState.Pressed) buttons |= Buttons.DPadUp;\n            if (down == ButtonState.Pressed) buttons |= Buttons.DPadDown;\n            if (left == ButtonState.Pressed) buttons |= Buttons.DPadLeft;\n            if (right == ButtonState.Pressed) buttons |= Buttons.DPadRight;\n\n            var pad3 = new GamePadDPad(buttons);\n            Assert.AreEqual(pad, pad3);\n            Assert.AreEqual(pad.GetHashCode(), pad3.GetHashCode());\n#endif\n        }\n\n        #endregion\n\n        #region Triggers\n\n        [Test]\n        public void TriggersTest([Range(-0.5f, 1.5f, 0.5f)] float left, [Range(1.5f, -0.5f, -0.5f)] float right)\n        {\n            var triggers = new GamePadTriggers(left, right);\n            Assert.AreEqual(MathHelper.Clamp(left, 0f, 1f), triggers.Left);\n            Assert.AreEqual(MathHelper.Clamp(right, 0f, 1f), triggers.Right);\n\n#if !XNA\n            var triggers2 = new GamePadTriggers(left, right);\n            Assert.AreEqual(triggers, triggers2);\n            Assert.AreEqual(triggers.GetHashCode(), triggers2.GetHashCode());\n#endif\n        }\n\n        #endregion\n\n        #region Thumbsticks\n\n#if !XNA\n        [TestCaseSource(\"ThumbStickVirtualButtonsIgnoreDeadZoneTestCases\")]\n        public void ThumbStickVirtualButtonsIgnoreDeadZone(Vector2 left, Vector2 right, GamePadDeadZone deadZone, Buttons expectedButtons)\n        {\n            var state = new GamePadState(new GamePadThumbSticks(left, right, deadZone, deadZone), new GamePadTriggers(), new GamePadButtons(), new GamePadDPad());\n\n            Assert.AreEqual(expectedButtons, GetAllPressedButtons(state));\n        }\n#endif\n\n        private static IEnumerable<TestCaseData> ThumbStickVirtualButtonsIgnoreDeadZoneTestCases\n        {\n            get\n            {\n                yield return new TestCaseData(\n                    Vector2.Zero, Vector2.Zero, GamePadDeadZone.Circular,\n                    (Buttons)0);\n\n                yield return new TestCaseData(\n                    new Vector2(1f, 0.1f), new Vector2(0.1f, 1f), GamePadDeadZone.Circular,\n                    Buttons.LeftThumbstickRight | Buttons.RightThumbstickUp);\n\n                yield return new TestCaseData(\n                    new Vector2(1f, 0.1f), new Vector2(0.1f, 1f), GamePadDeadZone.None,\n                    Buttons.LeftThumbstickRight | Buttons.RightThumbstickUp);\n\n                yield return new TestCaseData(\n                    new Vector2(1f, 0.1f), new Vector2(0.1f, 1f), GamePadDeadZone.IndependentAxes,\n                    Buttons.LeftThumbstickRight | Buttons.RightThumbstickUp);\n\n                yield return new TestCaseData(\n                    new Vector2(0.5f, -0.5f), new Vector2(-0.5f, 0.5f), GamePadDeadZone.Circular,\n                    Buttons.LeftThumbstickRight | Buttons.LeftThumbstickDown | Buttons.RightThumbstickLeft | Buttons.RightThumbstickUp);\n\n                yield return new TestCaseData(\n                    new Vector2(0.1f, -0.1f), new Vector2(-0.1f, 0.1f), GamePadDeadZone.None,\n                    (Buttons)0);\n\n                yield return new TestCaseData(\n                    new Vector2(0.4f, -0.4f), new Vector2(-0.4f, 0.4f), GamePadDeadZone.IndependentAxes,\n                    Buttons.LeftThumbstickRight | Buttons.LeftThumbstickDown | Buttons.RightThumbstickLeft | Buttons.RightThumbstickUp);\n\n                yield return new TestCaseData(\n                    new Vector2(0.4f, 0f), new Vector2(0f, 0.4f), GamePadDeadZone.Circular,\n                    Buttons.LeftThumbstickRight | Buttons.RightThumbstickUp);\n            }\n        }\n\n        private static Buttons GetAllPressedButtons(GamePadState state)\n        {\n            Buttons buttons = 0;\n            foreach (var button in Enum.GetValues(typeof(Buttons)).Cast<Buttons>().Where(state.IsButtonDown))\n                buttons |= button;\n            return buttons;\n        }\n\n#if !XNA\n\n        [Test]\n        public void ThumbsticksCircularDeadZoneClamping()\n        {\n            var left = Vector2.One;\n            var right = Vector2.One;\n\n            var sticks = new GamePadThumbSticks(left, right, GamePadDeadZone.None, GamePadDeadZone.None);\n            Assert.AreEqual(sticks.Left.X, 1);\n            Assert.AreEqual(sticks.Left.Y, 1);\n            Assert.AreEqual(sticks.Right.X, 1);\n            Assert.AreEqual(sticks.Right.Y, 1);\n\n            sticks = new GamePadThumbSticks(left, right, GamePadDeadZone.IndependentAxes, GamePadDeadZone.IndependentAxes);\n            Assert.AreEqual(sticks.Left.X, 1);\n            Assert.AreEqual(sticks.Left.Y, 1);\n            Assert.AreEqual(sticks.Right.X, 1);\n            Assert.AreEqual(sticks.Right.Y, 1);\n\n            sticks = new GamePadThumbSticks(left, right, GamePadDeadZone.Circular, GamePadDeadZone.Circular);\n            Assert.Less(sticks.Left.X, 1);\n            Assert.Less(sticks.Left.Y, 1);\n            Assert.Less(sticks.Right.X, 1);\n            Assert.Less(sticks.Right.Y, 1);\n        }\n\n#endif\n\n        [TestCaseSource(\"PublicConstructorClampsValuesTestCases\")]\n        public void PublicConstructorClampsValues(Vector2 left, Vector2 right, Vector2 expectedLeft, Vector2 expectedRight)\n        {\n            var gamePadThumbSticks = new GamePadThumbSticks(left, right);\n            Assert.That(gamePadThumbSticks.Left, Is.EqualTo(expectedLeft).Using(Vector2Comparer.Epsilon));\n            Assert.That(gamePadThumbSticks.Right, Is.EqualTo(expectedRight).Using(Vector2Comparer.Epsilon));\n        }\n\n        private static IEnumerable<TestCaseData> PublicConstructorClampsValuesTestCases\n        {\n            get\n            {\n                yield return new TestCaseData(\n                    Vector2.Zero, Vector2.Zero,\n                    Vector2.Zero, Vector2.Zero);\n\n                yield return new TestCaseData(\n                    Vector2.One, Vector2.One,\n                    Vector2.One, Vector2.One);\n\n                yield return new TestCaseData(\n                    -Vector2.One, -Vector2.One,\n                    -Vector2.One, -Vector2.One);\n\n                yield return new TestCaseData(\n                    new Vector2(-2.7f, 5.6f), new Vector2(3.5f, -4.8f),\n                    new Vector2(-1f, 1f), new Vector2(1f, -1f));\n\n                yield return new TestCaseData(\n                    new Vector2(34f, 65f), new Vector2(-33f, -17f),\n                    new Vector2(1f, 1f), new Vector2(-1f, -1f));\n            }\n        }\n\n        #endregion\n\n        #region State\n\n        [TestCase((Buttons)0, new[] { ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released })]\n        [TestCase(Buttons.DPadDown, new[] { ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Released })]\n        [TestCase(Buttons.DPadLeft, new[] { ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Released })]\n        [TestCase(Buttons.DPadRight, new[] { ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released })]\n        [TestCase(Buttons.DPadUp, new[] { ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Pressed })]\n        public void ConstructDPadStateWithButtonsArray(Buttons button, ButtonState[] expectedDPadButtonStates)\n        {\n            var state = new GamePadState(Vector2.Zero, Vector2.Zero, 0f, 0f, button != 0 ? new Buttons[] {button} : new Buttons[] {});\n\n            if (button != 0)\n                Assert.True(state.IsButtonDown(button));\n\n            Assert.AreEqual(expectedDPadButtonStates[0], state.DPad.Down, \"DPad.Down Pressed or Released\");\n            Assert.AreEqual(expectedDPadButtonStates[1], state.DPad.Left, \"DPad.Left Pressed or Released\");\n            Assert.AreEqual(expectedDPadButtonStates[2], state.DPad.Right, \"DPad.Right Pressed or Released\");\n            Assert.AreEqual(expectedDPadButtonStates[3], state.DPad.Up, \"DPad.Up Pressed or Released\");\n        }\n\n        private const int Count = 6;\n        public static IEnumerable<Buttons[]> GetButtons()\n        {\n            return new[]\n            {\n                // All\n                Enum.GetValues(typeof(Buttons)).Cast<Buttons>().ToArray(),\n                // None\n                new Buttons[0],\n                // Random\n                new [] { Buttons.Start, Buttons.LeftStick, Buttons.DPadDown, Buttons.A},\n                new [] { Buttons.Back, Buttons.BigButton, Buttons.LeftStick, Buttons.Y, Buttons.B, Buttons.RightShoulder, Buttons.LeftTrigger},\n                new [] { Buttons.RightTrigger, Buttons.RightStick, Buttons.RightShoulder, Buttons.DPadDown, Buttons.DPadLeft },\n                new [] { Buttons.Start, Buttons.Back, Buttons.LeftShoulder, Buttons.X, Buttons.Y, Buttons.B, Buttons.A }\n            };\n        }\n\n        [Test, Sequential]\n        public void TestState([Random(-1f, 1f, Count)] double leftX, [Random(-1f, 1f, Count)] double leftY,\n            [Random(-1f, 1f, Count)] double rightX, [Random(-1f, 1f, Count)] double rightY,\n            [Random(0f, 1f, Count)] double doubleLT, [Random(0f, 1f, Count)] double doubleRT,\n            [ValueSource(\"GetButtons\")] Buttons[] buttons, [Values(true, false, true, false)] bool isConnected)\n        {\n            var leftStick = new Vector2((float) leftX, (float) leftY);\n            var rightStick = new Vector2((float) rightX, (float) rightY);\n            var leftTrigger = (float) doubleLT;\n            var rightTrigger = (float) doubleRT;\n            Buttons allButtons = 0;\n            if (buttons.Any())\n                foreach (var button in buttons)\n                    allButtons |= button;\n\n            var state = new GamePadState(leftStick, rightStick, leftTrigger, rightTrigger, allButtons);\n#if !XNA\n            state.IsConnected = isConnected;\n            Assert.AreEqual(isConnected, state.IsConnected);\n#endif\n\n            Assert.AreEqual(leftStick, state.ThumbSticks.Left);\n            Assert.AreEqual(rightStick, state.ThumbSticks.Right);\n            Assert.AreEqual(leftTrigger, state.Triggers.Left);\n            Assert.AreEqual(rightTrigger, state.Triggers.Right);\n            AssertButtons(buttons, state);\n        }\n\n        private static void AssertButtons(IEnumerable<Buttons> pressedButtons, GamePadState state)\n        {\n            Buttons joinedButtons = 0;\n            foreach (var button in pressedButtons)\n                joinedButtons |= button;\n\n#if !XNA\n            var gamePadButtons = state.Buttons;\n            Assert.AreEqual(joinedButtons, gamePadButtons._buttons);\n#endif\n\n            // all buttons except for thumbstick position buttons and triggers (they're not controlled via buttons here)\n            var allButtons = Enum.GetValues(typeof(Buttons)).OfType<Buttons>()\n                .Where(b => !Regex.IsMatch(Enum.GetName(typeof(Buttons), b), \"(Thumbstick|Trigger)\"));\n\n            foreach (var button in allButtons)\n            {\n                if (pressedButtons.Contains(button))\n                {\n                    Assert.IsTrue(state.IsButtonDown(button));\n                    Assert.IsFalse(state.IsButtonUp(button));\n                }\n                else\n                {\n                    Assert.IsTrue(state.IsButtonUp(button));\n                    Assert.IsFalse(state.IsButtonDown(button));\n                }\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Input/GestureRecognizerTest.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Input.Touch;\nusing Kni.Tests.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Input\n{\n    /// <summary>\n    /// Tests the gesture recognition of the TouchPanelState class. (This will be split out in to another class in the future)\n    /// </summary>\n    [TestFixture]\n    class GestureRecognizerTest\n    {\n        private const GestureType AllDrags = GestureType.DragComplete | GestureType.FreeDrag | GestureType.HorizontalDrag | GestureType.VerticalDrag;\n        private const GestureType AllGestures =\n            GestureType.DoubleTap | GestureType.DragComplete | GestureType.Flick | GestureType.FreeDrag | GestureType.Hold |\n            GestureType.HorizontalDrag | GestureType.Pinch | GestureType.PinchComplete | GestureType.Tap | GestureType.VerticalDrag;\n\n        private TimeSpan GameTimeForFrame(int frameNo)\n        {\n            return TimeSpan.FromSeconds(frameNo / 60D);\n        }\n\n        [OneTimeSetUp]\n        public void OneTimeSetUp()\n        {\n            Game game = new Game();\n\n            TouchPanel.WindowHandle  = game.Window.Handle;\n            TouchPanel.DisplayWidth  = game.Window.ClientBounds.Width;\n            TouchPanel.DisplayHeight = game.Window.ClientBounds.Height;\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            TouchPanel.EnabledGestures = GestureType.None;\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().TestReleaseAllTouches();\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            TouchPanel.GetState();\n        }\n\n        [Test]\n        [Order(0)]\n        public void DoingNothingMakesNoGestures()\n        {\n            TouchPanel.EnabledGestures = AllGestures;\n\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        [Order(1)]\n        public void BasicTapGesture()\n        {\n            TouchPanel.EnabledGestures = GestureType.Tap;\n            var pos = new Vector2(100, 150);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            Assert.AreEqual(GestureType.Tap, gesture.GestureType);\n            Assert.AreEqual(pos, gesture.Position);\n        }\n\n        [Test]\n        [Order(2)]\n        [TestCase(true)]\n        [TestCase(false)]\n        public void BasicDoubleTapGesture(bool enableTap)\n        {\n            GestureSample gesture;\n\n            TouchPanel.EnabledGestures = GestureType.DoubleTap;\n            if (enableTap)\n                TouchPanel.EnabledGestures |= GestureType.Tap;\n            var pos = new Vector2(100, 150);\n\n            //Do a first tap\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Will make a tap event if tap is enabled\n            if (enableTap)\n            {\n                Assert.True(TouchPanel.IsGestureAvailable);\n                gesture = TouchPanel.ReadGesture();\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                Assert.AreEqual(GestureType.Tap, gesture.GestureType);\n                Assert.AreEqual(pos, gesture.Position);\n            }\n            else\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n            }\n\n            //Now do the second tap in the same location, this will make a double tap on press (but no tap)\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.True(TouchPanel.IsGestureAvailable);\n            gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            Assert.AreEqual(GestureType.DoubleTap, gesture.GestureType);\n            Assert.AreEqual(pos, gesture.Position);\n\n            //This release should make no gestures\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(2, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        [Order(3)]\n        [Description(\"Do 2 quick taps, but make the second tap not near the first. Should not make a double tap\")]\n        public void DoubleTapTooFar()\n        {\n            TouchPanel.EnabledGestures = GestureType.DoubleTap;\n            var pos1 = new Vector2(100, 150);\n            var pos2 = new Vector2(100, 150 + TouchPanelStrategy.TapJitterTolerance + 1);\n\n            //Do a first tap\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos1);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos1);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Now do the second tap in a different location\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos2);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Shouldn't make a double tap\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        [TestCase(GestureType.None)]\n        [TestCase(GestureType.FreeDrag | GestureType.DragComplete)]\n        [Description(\"Hold a finger down, then perform a tap and double tap with another, this should not make any tap gestures\")]\n        public void MultiFingerTap(GestureType otherEnabledGestures)\n        {\n            //TODO: This test is based on current behavior. We need to verify that XNA behaves the same\n            //TODO: Need a test for how pinch and tap interact\n\n            TouchPanel.EnabledGestures = otherEnabledGestures | GestureType.Tap | GestureType.DoubleTap;\n            var pos = new Vector2(100, 150);\n\n            //Place a finger down, this finger will never be released\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, new Vector2(10));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Place a new finger down for a tap\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Release it, should not make a tap\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(2, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Press the finger down again, should not make a double tap\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(3, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        [Description(\"Do 2 taps with a long time between. Should not make a double tap\")]\n        public void DoubleTapTooSlow()\n        {\n            TouchPanel.EnabledGestures = GestureType.DoubleTap;\n            var pos = new Vector2(100, 150);\n\n            //Do a first tap\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Now wait 500ms (we require it within 300ms)\n            for (int frame = 3; frame < 33; frame++)\n            {\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n                Assert.False(TouchPanel.IsGestureAvailable);\n            }\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Shouldn't make a double tap\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        public void BasicHold()\n        {\n            TouchPanel.EnabledGestures = GestureType.Hold;\n            var pos = new Vector2(100, 150);\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n\n            //We shouldn't generate the hold until the required time has passed\n            TimeSpan gt = TimeSpan.Zero;\n            do\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                TimeSpan frameSpan = new TimeSpan(TouchPanelStrategy.TimeRequiredForHold.Ticks / 4);\n                gt = gt + frameSpan;\n                Thread.Sleep(frameSpan);\n                FrameworkDispatcher.Update();\n            } while (gt < TouchPanelStrategy.TimeRequiredForHold);\n\n            //The last Update should have generated a hold\n            Assert.True(TouchPanel.IsGestureAvailable);\n\n            var gesture = TouchPanel.ReadGesture();\n            Assert.AreEqual(GestureType.Hold, gesture.GestureType);\n            Assert.AreEqual(pos, gesture.Position);\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        [Description(\"Do a Tap, Double Tap, Hold using 2 taps. Should get gestures for each one\")]\n        public void TapDoubleTapHold()\n        {\n            TouchPanel.EnabledGestures = GestureType.Tap | GestureType.DoubleTap | GestureType.Hold;\n\n            var pos = new Vector2(100, 100);\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Release it, should make a tap\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.True(TouchPanel.IsGestureAvailable);\n\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n            Assert.AreEqual(GestureType.Tap, gesture.GestureType);\n\n            //Place finger again, should make a double tap\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.True(TouchPanel.IsGestureAvailable);\n\n            gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n            Assert.AreEqual(GestureType.DoubleTap, gesture.GestureType);\n\n            //Now hold it for a while to make a hold gesture\n            TimeSpan gt = TimeSpan.Zero;\n            do\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                TimeSpan frameSpan = new TimeSpan(TouchPanelStrategy.TimeRequiredForHold.Ticks / 4);\n                gt = gt + frameSpan;\n                Thread.Sleep(frameSpan);\n                FrameworkDispatcher.Update();\n            } \n            while (gt < (TouchPanelStrategy.TimeRequiredForHold));\n            \n            //The last Update should have generated a hold\n            Assert.True(TouchPanel.IsGestureAvailable);\n            gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            Assert.AreEqual(GestureType.Hold, gesture.GestureType);\n        }\n\n        [Test]\n        [TestCase(AllDrags, GestureType.HorizontalDrag)]\n        [TestCase(GestureType.HorizontalDrag, GestureType.HorizontalDrag)]\n        [TestCase(AllDrags, GestureType.VerticalDrag)]\n        [TestCase(GestureType.VerticalDrag, GestureType.VerticalDrag)]\n        public void BasicDirectionalDrag(GestureType enabledGestures, GestureType direction)\n        {\n            TouchPanel.EnabledGestures = enabledGestures;\n            var startPos = new Vector2(200, 200);\n            Vector2 diffVec;\n\n            if (direction == GestureType.HorizontalDrag)\n                diffVec = new Vector2(10, -1);\n            else //Vertical\n                diffVec = new Vector2(1, -10);\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Move it until it should have made a drag\n            int diff = 0;\n            int frame = 1;\n            while (diff * 10 < TouchPanelStrategy.TapJitterTolerance)\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                diff ++;\n                frame++;\n\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + diff * diffVec);\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n            }\n\n            //We should have a gesture now\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Should get the correct type at the new touch location, with the given delta\n            Assert.AreEqual(direction, gesture.GestureType);\n            Assert.AreEqual(startPos + diff * diffVec, gesture.Position);\n\n            //Delta has only movement in the direction of the drag\n            if (direction == GestureType.HorizontalDrag)\n                Assert.AreEqual(new Vector2(10, 0), gesture.Delta);\n            else //Vertical\n                Assert.AreEqual(new Vector2(0, -10), gesture.Delta);\n\n            //If all gestures are enabled (DragComplete is enabled), releasing our touch will generate a DragComplete gesture\n            frame++;\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, startPos + diff * diffVec);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            if (enabledGestures == AllDrags)\n            {\n                Assert.True(TouchPanel.IsGestureAvailable);\n                gesture = TouchPanel.ReadGesture();\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                Assert.AreEqual(GestureType.DragComplete, gesture.GestureType);\n                Assert.AreEqual(Vector2.Zero, gesture.Position); //This is (0,0) in XNA too. It's weird though!\n            }\n            else\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n            }\n        }\n\n        [Test]\n        [TestCase(AllDrags)]\n        [TestCase(GestureType.FreeDrag | GestureType.DragComplete)]\n        [TestCase(GestureType.FreeDrag)]\n        [Description(\"Drag on an angle, it should generate a FreeDrag event, not a directional one\")]\n        public void BasicFreeDragTest(GestureType enabledGestures)\n        {\n            TouchPanel.EnabledGestures = enabledGestures;\n            var startPos = new Vector2(200, 200);\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Move it until it should have made a drag\n            int diff = 0;\n            int frame = 1;\n            while (new Vector2(diff).Length() < TouchPanelStrategy.TapJitterTolerance)\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                diff += 5;\n                frame++;\n\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(diff));\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n            }\n\n            //We should have a gesture now\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Should get the correct type at the new touch location, with the given delta\n            Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType);\n            Assert.AreEqual(startPos + new Vector2(diff), gesture.Position);\n\n            Assert.AreEqual(new Vector2(5), gesture.Delta);\n\n            //If DragComplete is enabled, releasing our touch will generate a DragComplete gesture\n            frame++;\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, startPos + new Vector2(diff));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            if ((enabledGestures & GestureType.DragComplete) == GestureType.DragComplete)\n            {\n                Assert.True(TouchPanel.IsGestureAvailable);\n                gesture = TouchPanel.ReadGesture();\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                Assert.AreEqual(GestureType.DragComplete, gesture.GestureType);\n                Assert.AreEqual(Vector2.Zero, gesture.Position); //This is (0,0) in XNA too. It's weird though!\n            }\n            else\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n            }\n        }\n\n        [Test]\n        [Description(\"If the user does a horizontal drag, this should be picked up as a free drag instead if horizontal is not enabled\")]\n        public void FreeDragIfDirectionalDisabled()\n        {\n            TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.VerticalDrag;\n            var startPos = new Vector2(200, 200);\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Move it until it should have made a drag\n            int diff = 0;\n            int frame = 1;\n            while (new Vector2(diff, 0).Length() < TouchPanelStrategy.TapJitterTolerance)\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                diff += 5;\n                frame++;\n\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(diff, 0));\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n            }\n\n            //We should have a gesture now\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Should get the correct type at the new touch location, with the given delta\n            Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType);\n            Assert.AreEqual(startPos + new Vector2(diff, 0), gesture.Position);\n\n            Assert.AreEqual(new Vector2(5, 0), gesture.Delta);\n        }\n\n        [Test]\n        [Description(\"Start a drag then disable gestures. Gestures events should just stop, no DragComplete gesture should happen\")]\n        public void DisableGesturesWhileDragging()\n        {\n            TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete;\n            var startPos = new Vector2(200, 200);\n\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Drag it, should get a drag\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(40, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n            Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType);\n\n            //Disable gestures\n            TouchPanel.EnabledGestures = GestureType.None;\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Release that touch, should make no gesture\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, startPos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n\n            //Enable both gestures again, just place the finger down and release it\n            //Should make no gesture\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(2, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        [Description(\"Start a drag then disable gestures. Re-Enable them without releasing the finger. Releasing it then should make a DragComplete\")]\n        public void DisableGesturesWhileDragging2()\n        {\n            TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete;\n            var startPos = new Vector2(200, 200);\n\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Drag it, should get a drag\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(40, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n            Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType);\n\n            //Disable gestures\n            TouchPanel.EnabledGestures = GestureType.None;\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Enable both gestures again, release the finger\n            TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete;\n\n            //Release that touch, should make no gesture\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, startPos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.True(TouchPanel.IsGestureAvailable);\n            gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            Assert.AreEqual(GestureType.DragComplete, gesture.GestureType);\n        }\n\n        [Test]\n        [Description(\"Start a drag then disable gestures. Release finger and replace, then re-enable gestures and release. Should not make a DragComplete\")]\n        public void DisableGesturesWhileDragging3()\n        {\n            TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete;\n            var startPos = new Vector2(200, 200);\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Drag it, should get a drag\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(40, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n            Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType);\n\n            //Disable gestures\n            TouchPanel.EnabledGestures = GestureType.None;\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Release the finger, should make no gesture (gestures are disabled)\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, startPos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Press it down again\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, startPos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Enable both gestures again\n            TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete;\n\n            //Release the second touch, should make no gesture\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(2, startPos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        [Description(\"Enable the tap gesture while dragging with no gestures enabled. No gestures should happen\")]\n        public void EnableTapWhileDragging()\n        {\n            //Based on https://github.com/mono/MonoGame/pull/1543#issuecomment-15004057\n            \n            var pos = new Vector2(10, 10);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Drag it a bit\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos + new Vector2(40, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            TouchPanel.EnabledGestures = GestureType.Tap;\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos + new Vector2(80, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        public void BasicFlick()\n        {\n            TouchPanel.EnabledGestures = GestureType.Flick;\n            var startPos = new Vector2(200, 200);\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Move it until it should have made a flick\n            int diff = 0;\n            int frame = 1;\n            while (new Vector2(diff, 0).Length() < TouchPanelStrategy.TapJitterTolerance)\n            {\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                diff += 30;\n                frame++;\n\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(diff, 0));\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n            }\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Now release\n            frame++;\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, startPos + new Vector2(diff, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Now we should have the flick\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            Assert.AreEqual(GestureType.Flick, gesture.GestureType);\n            Assert.AreEqual(Vector2.Zero, gesture.Position);\n            //Could check Delta here, it contains the flick velocity\n        }\n\n        [Test]\n        [Description(\"Do a short movement within TapJitterTolerance, this should not make a flick even if it is quick\")]\n        public void ShortMovementDoesntMakeAFlick()\n        {\n            TouchPanel.EnabledGestures = GestureType.Flick;\n            var startPos = new Vector2(200, 200);\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Then release it at the edge of the detection size\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, startPos + new Vector2(TouchPanelStrategy.TapJitterTolerance, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //This should not make a flick. If the distance is 1 greater it will.\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n\n        [Test]\n        [Description(\"If Flick and FreeDrag are enabled, both events should be generated without impacting each other. \" +\n                     \"There should be a flick and a DragComplete at the end in that order\")]\n        public void FlickAndFreeDrag()\n        {\n            TouchPanel.EnabledGestures = GestureType.Flick | GestureType.FreeDrag | GestureType.DragComplete;\n            var startPos = new Vector2(200, 200);\n            GestureSample gesture;\n\n            //Place the finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, startPos);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Move it until it should have made a flick\n            int diff = 0;\n            int frame = 1;\n            while (frame < 4)\n            {\n                diff += 40;\n                frame++;\n\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, startPos + new Vector2(diff, 0));\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n\n                //Each drag should make a FreeDrag\n                Assert.True(TouchPanel.IsGestureAvailable);\n                gesture = TouchPanel.ReadGesture();\n                Assert.False(TouchPanel.IsGestureAvailable);\n\n                Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType);\n                Assert.AreEqual(startPos + new Vector2(diff, 0), gesture.Position);\n            }\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Now release\n            frame++;\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, startPos + new Vector2(diff, 0));\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Now we should have the flick\n            Assert.True(TouchPanel.IsGestureAvailable);\n            gesture = TouchPanel.ReadGesture();\n\n            Assert.AreEqual(GestureType.Flick, gesture.GestureType);\n            Assert.AreEqual(Vector2.Zero, gesture.Position);\n            \n            //And then the DragComplete\n            Assert.True(TouchPanel.IsGestureAvailable);\n            gesture = TouchPanel.ReadGesture();\n\n            Assert.AreEqual(GestureType.DragComplete, gesture.GestureType);\n            Assert.AreEqual(Vector2.Zero, gesture.Position);\n\n            //And that should be it\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n\n        [Test]\n        public void BasicPinch()\n        {\n            //TODO: This test is based on current behavior. We need to verify that XNA behaves the same\n\n            TouchPanel.EnabledGestures = GestureType.Pinch | GestureType.PinchComplete;\n\n            var pos1 = new Vector2(200, 200);\n            var pos2 = new Vector2(400, 200);\n\n            //Place a finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos1);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //Place the other finger down\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos2);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            //Now we should have a pinch\n            Assert.True(TouchPanel.IsGestureAvailable);\n            var gesture = TouchPanel.ReadGesture();\n\n            Assert.AreEqual(GestureType.Pinch, gesture.GestureType);\n            Assert.AreEqual(pos1, gesture.Position);\n            Assert.AreEqual(pos2, gesture.Position2);\n\n            //If we do nothing, we shouldn't get more pinch events\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            Assert.False(TouchPanel.IsGestureAvailable);\n\n            //But if we move a finger, we should get an updated pinch\n            pos2 += new Vector2(50, 0);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(2, pos2);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.True(TouchPanel.IsGestureAvailable);\n            gesture = TouchPanel.ReadGesture();\n\n            Assert.AreEqual(GestureType.Pinch, gesture.GestureType);\n            Assert.AreEqual(pos1, gesture.Position);\n            Assert.AreEqual(pos2, gesture.Position2);\n\n            //Now releasing one of the fingers should make a pinch complete event\n            pos1 -= new Vector2(0, 50);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos1);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n\n            Assert.True(TouchPanel.IsGestureAvailable);\n            gesture = TouchPanel.ReadGesture();\n\n            Assert.AreEqual(GestureType.PinchComplete, gesture.GestureType);\n            Assert.AreEqual(Vector2.Zero, gesture.Position);\n            Assert.AreEqual(Vector2.Zero, gesture.Position2);\n\n            //We should have no more events\n            Assert.False(TouchPanel.IsGestureAvailable);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Input/JoystickTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Input;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Input\n{\n    public class JoystickTest\n    {\n        [TestCase(new [] { 12345, -12345 }, new [] { ButtonState.Pressed, ButtonState.Released }, true)]\n        [TestCase(new [] { -7324, -32000 }, new [] { ButtonState.Pressed, ButtonState.Pressed }, false)]\n        public void TestState(int[] axes, ButtonState[] buttons, bool isConnected)\n        {\n            JoystickHat[] hats = new[]\n            {\n                new JoystickHat(Buttons.DPadLeft | Buttons.DPadDown),\n                new JoystickHat(Buttons.DPadLeft | Buttons.DPadUp | Buttons.DPadRight)\n            };\n\n            JoystickState state = new JoystickState();\n            state.Axes = axes;\n            state.Buttons = buttons;\n            state.Hats = hats;\n            state.IsConnected = isConnected;\n\n            Assert.AreEqual(axes, state.Axes);\n            Assert.AreEqual(buttons, state.Buttons);\n            Assert.AreEqual(hats, state.Hats);\n            Assert.AreEqual(isConnected, state.IsConnected);\n        }\n\n        [Test]\n        public void JoyStickHatTest(\n            [Values(ButtonState.Pressed, ButtonState.Released)] ButtonState left, \n            [Values(ButtonState.Pressed, ButtonState.Released)] ButtonState right, \n            [Values(ButtonState.Pressed, ButtonState.Released)] ButtonState up, \n            [Values(ButtonState.Pressed, ButtonState.Released)] ButtonState down)\n        {\n            Buttons dPadButtons = (Buttons)0;\n            dPadButtons |= (left  == ButtonState.Pressed) ? Buttons.DPadLeft : (Buttons)0;\n            dPadButtons |= (right == ButtonState.Pressed) ? Buttons.DPadRight: (Buttons)0;\n            dPadButtons |= (up    == ButtonState.Pressed) ? Buttons.DPadUp   : (Buttons)0;\n            dPadButtons |= (down  == ButtonState.Pressed) ? Buttons.DPadDown : (Buttons)0;\n\n            JoystickHat hat = new JoystickHat(dPadButtons);\n\n            Assert.AreEqual(left, hat.Left);\n            Assert.AreEqual(right, hat.Right);\n            Assert.AreEqual(up, hat.Up);\n            Assert.AreEqual(down, hat.Down);\n        }\n    }\n}"
  },
  {
    "path": "Tests/Framework.Input/KeyboardTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Input;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Input\n{\n    class KeyboardTest\n    {\n\n        [TestCase(new[] { Keys.Up, Keys.A, Keys.Left, Keys.Oem8, Keys.Apps })]\n        public void CtorParams(Keys[] keys)\n        {\n            var state = new KeyboardState(keys);\n            CollectionAssert.AreEquivalent(state.GetPressedKeys(), keys);\n\n            foreach (Keys key in Enum.GetValues(typeof(Keys)))\n            {\n                var keyDown = keys.Contains(key);\n                Assert.AreEqual(keyDown ? KeyState.Down : KeyState.Up, state[key]);\n                Assert.AreEqual(keyDown, state.IsKeyDown(key));\n                Assert.AreEqual(!keyDown, state.IsKeyUp(key));\n            }\n        }\n\n#if !XNA\n        [TestCase(new[] { Keys.Up, Keys.A, Keys.Left, Keys.Oem8, Keys.Apps }, true, false)]\n        [TestCase(new[] { Keys.Right, Keys.Down, Keys.LeftAlt, Keys.LeftShift }, true, true)]\n        [TestCase(new[] { Keys.Delete, Keys.U, Keys.RightWindows, Keys.L, Keys.NumPad2 }, false, false)]\n        [TestCase(new[] { Keys.F9, Keys.F12, Keys.VolumeUp, Keys.OemAuto, Keys.NumPad3 }, false, false)]\n        [TestCase(new[] { Keys.OemMinus, Keys.OemTilde, Keys.Tab, Keys.Zoom }, true, false)]\n        public void TestState(Keys[] keys, bool capsLock, bool numLock)\n        {\n            var keyList = keys.ToList();\n            var state = new KeyboardState(keys, capsLock, numLock);\n\n            CollectionAssert.AreEquivalent(state.GetPressedKeys(), keys);\n            Assert.AreEqual(state.CapsLock, capsLock);\n            Assert.AreEqual(state.NumLock, numLock);\n\n            foreach (Keys key in Enum.GetValues(typeof(Keys)))\n            {\n                var keyDown = keyList.Contains(key);\n                Assert.AreEqual(state.IsKeyDown(key), keyDown);\n                Assert.AreEqual(state.IsKeyUp(key), !keyDown);\n            }\n        }\n\n\n        [TestCase(new[] { Keys.Up, Keys.A, Keys.Left, Keys.Oem8, Keys.Apps })]\n        public void TestGetPressedKeysGarbageless(Keys[] keys)\n        {\n            var state = new KeyboardState(keys);\n\n            int count = state.GetPressedKeyCount();\n            Assert.AreEqual(keys.Length, count);\n\n            Keys[] newKeysArray = new Keys[count];\n\n            state.GetPressedKeys(newKeysArray);\n\n            CollectionAssert.AreEquivalent(keys, newKeysArray);\n        }\n\n#endif\n\n        [Test]\n        public void TestGetState()\n        {\n            Keyboard.GetState();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Input/MouseTest.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing NUnit.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework;\n\nnamespace Kni.Tests.Input\n{\n    class MouseTest\n    {\n        [Test]\n        [TestCase(0, 0, 0, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released)]\n        [TestCase(13, 22, 31, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed)]\n        [TestCase(476, 585, 694, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, ButtonState.Released, ButtonState.Released)]\n        [TestCase(749, 858, 967, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released)]\n        [TestCase(1, 2, 3, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed)]\n        public void Ctor(int x, int y, int scrollWheel, ButtonState leftButton, ButtonState middleButton, ButtonState rightButton, ButtonState xButton1, ButtonState xButton2)\n        {\n            var state = new MouseState(x, y, scrollWheel, leftButton, middleButton, rightButton, xButton1, xButton2);\n\n            Assert.AreEqual(state.X, x);\n            Assert.AreEqual(state.Y, y);\n#if !XNA\n            Assert.AreEqual(state.Position, new Point(x, y));\n#endif\n            Assert.AreEqual(state.ScrollWheelValue, scrollWheel);\n            Assert.AreEqual(state.LeftButton, leftButton);\n            Assert.AreEqual(state.MiddleButton, middleButton);\n            Assert.AreEqual(state.RightButton, rightButton);\n            Assert.AreEqual(state.XButton1, xButton1);\n            Assert.AreEqual(state.XButton2, xButton2);\n#if !XNA\n            Assert.AreEqual(state.HorizontalScrollWheelValue, 0);\n#endif\n        }\n\n        [Test]\n        [TestCase(0, 0, 0, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, 0)]\n        [TestCase(13, 22, 31, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, 32)]\n        [TestCase(476, 585, 694, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, 695)]\n        [TestCase(749, 858, 967, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, 968)]\n        [TestCase(1, 2, 3, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, 4)]\n        public void CtorWithHorizontalScroll(int x, int y, int scrollWheel, ButtonState leftButton, ButtonState middleButton, ButtonState rightButton, ButtonState xButton1, ButtonState xButton2, int horizontalScrollWheel)\n        {\n#if !XNA\n            var state = new MouseState(x, y, scrollWheel, horizontalScrollWheel, 0, 0, leftButton, middleButton, rightButton, xButton1, xButton2);\n#else\n            var state = new MouseState(x, y, scrollWheel, leftButton, middleButton, rightButton, xButton1, xButton2);\n#endif\n\n            Assert.AreEqual(state.X, x);\n            Assert.AreEqual(state.Y, y);\n#if !XNA\n            Assert.AreEqual(state.Position, new Point(x, y));\n#endif\n            Assert.AreEqual(state.ScrollWheelValue, scrollWheel);\n            Assert.AreEqual(state.LeftButton, leftButton);\n            Assert.AreEqual(state.MiddleButton, middleButton);\n            Assert.AreEqual(state.RightButton, rightButton);\n            Assert.AreEqual(state.XButton1, xButton1);\n            Assert.AreEqual(state.XButton2, xButton2);\n#if !XNA\n            Assert.AreEqual(state.HorizontalScrollWheelValue, horizontalScrollWheel);\n#endif\n        }\n\n#if !XNA\n        [TestCase(0, 0, 0, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, 0)]\n        [TestCase(13, 22, 31, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, 32)]\n        [TestCase(476, 585, 694, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, 695)]\n        [TestCase(749, 858, 967, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, 968)]\n        [TestCase(1, 2, 3, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, 4)]\n        public void SetGet(int x, int y, int scrollWheel, ButtonState leftButton, ButtonState middleButton, ButtonState rightButton, ButtonState xButton1, ButtonState xButton2, int horizontalScrollWheel)\n        {\n            var state = new MouseState\n            {\n                X = x,\n                Y = y,\n                ScrollWheelValue = scrollWheel,\n                LeftButton = leftButton,\n                MiddleButton = middleButton,\n                RightButton = rightButton,\n                XButton1 = xButton1,\n                XButton2 = xButton2,\n                HorizontalScrollWheelValue = horizontalScrollWheel\n            };\n            Assert.AreEqual(state.X, x);\n            Assert.AreEqual(state.Y, y);\n            Assert.AreEqual(state.ScrollWheelValue, scrollWheel);\n            Assert.AreEqual(state.LeftButton, leftButton);\n            Assert.AreEqual(state.MiddleButton, middleButton);\n            Assert.AreEqual(state.RightButton, rightButton);\n            Assert.AreEqual(state.XButton1, xButton1);\n            Assert.AreEqual(state.XButton2, xButton2);\n            Assert.AreEqual(state.HorizontalScrollWheelValue, horizontalScrollWheel);\n\n            var state2 = new MouseState(x, y, scrollWheel, horizontalScrollWheel, 0, 0, leftButton, middleButton, rightButton, xButton1, xButton2);\n            Assert.AreEqual(state, state2);\n            Assert.AreEqual(state.GetHashCode(), state2.GetHashCode());\n        }\n#endif\n\n        [Test]\n        public void TestGetState()\n        {\n            Mouse.GetState();\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tests/Framework.Input/TouchCollectionTest.cs",
    "content": "﻿using Microsoft.Xna.Framework.Input.Touch;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    [TestFixture]\n    class TouchCollectionTest\n    {\n        [Test]\n        public void WorksWhenConstructedEmpty()\n        {\n            TouchCollection collection = new TouchCollection();\n\n            Assert.AreEqual(0, collection.Count);\n            foreach (var touch in collection)\n                Assert.Fail(\"Shouldn't have any touches in an empty collection\");\n\n            Assert.AreEqual(-1, collection.IndexOf(new TouchLocation()));\n\n            TouchLocation touchLocation;\n            Assert.False(collection.FindById(1, out touchLocation));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Input/TouchLocationTest.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Framework\n{\n    [TestFixture]\n    class TouchLocationTest\n    {\n    }\n}\n"
  },
  {
    "path": "Tests/Framework.Input/TouchPanelTest.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Input.Touch;\nusing Kni.Tests.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests.Input\n{\n    [TestFixture]\n    internal class TouchPanelTest\n    {\n        private TimeSpan GameTimeForFrame(int frameNo)\n        {\n            return TimeSpan.FromSeconds(frameNo / 60D);\n        }\n\n        [OneTimeSetUp]\n        public void OneTimeSetUp()\n        {\n            Game game = new Game();\n\n            TouchPanel.WindowHandle  = game.Window.Handle;\n            TouchPanel.DisplayWidth  = game.Window.ClientBounds.Width;\n            TouchPanel.DisplayHeight = game.Window.ClientBounds.Height;\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().TestReleaseAllTouches();\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            TouchPanel.GetState();\n        }\n\n        [Test]\n        [Order(0)]\n        public void InitiallyHasNoTouches()\n        {\n            var state = TouchPanel.GetState();\n\n            Assert.AreEqual(0, state.Count);\n            Assert.AreEqual(true, state.IsReadOnly);\n        }\n\n        [Test]\n        [Order(1)]\n        public void PressedStartsATouch()\n        {\n            var pos = new Vector2(100, 50);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n\n            var state = TouchPanel.GetState();\n\n            Assert.AreEqual(1, state.Count);\n\n            var touch = state[0];\n            Assert.AreEqual(TouchLocationState.Pressed, touch.State);\n            Assert.AreEqual(pos, touch.Position);\n        }\n\n        [Test]\n        [Order(2)]\n        [Description(\"In XNA if you press then move your finger before GetState is called, the initial touch position is the latest position of the touch\")]\n        public void PressedThenMoveStartsATouchAtNewPosition()\n        {\n            var pos = new Vector2(101, 50);\n            var pos2 = new Vector2(101, 100);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos2);\n\n            var state = TouchPanel.GetState();\n\n            Assert.AreEqual(1, state.Count);\n\n            var touch = state[0];\n            Assert.AreEqual(TouchLocationState.Pressed, touch.State);\n            Assert.AreEqual(pos2, touch.Position);\n        }\n\n        [Test]\n        [Order(3)]\n        public void MovedDoesntStartATouch(TouchLocationState providedState)\n        {\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, new Vector2(102, 50));\n\n            var state = TouchPanel.GetState();\n\n            Assert.AreEqual(0, state.Count);\n        }\n\n        [Test]\n        [Order(3)]\n        public void ReleasedDoesntStartATouch()\n        {\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, new Vector2(102, 50));\n\n            var state = TouchPanel.GetState();\n\n            Assert.AreEqual(0, state.Count);\n        }\n\n        [Test]\n        [Order(3)]\n        public void CanceledDoesntStartATouch()\n        {\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddCanceledEvent(1, new Vector2(102, 50));\n\n            var state = TouchPanel.GetState();\n\n            Assert.AreEqual(0, state.Count);\n        }\n\n        [Test]\n        [Order(4)]\n        public void PressedAgesToMovedAfterGetState()\n        {\n            var pos = new Vector2(103, 50);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n\n            var initialState = TouchPanel.GetState();\n            var initialTouch = initialState[0];\n\n            var state = TouchPanel.GetState();\n\n            Assert.AreEqual(1, state.Count);\n\n            var touch = state[0];\n            Assert.AreEqual(TouchLocationState.Moved, touch.State);\n            Assert.AreEqual(pos, touch.Position);\n            Assert.AreEqual(initialTouch.Id, touch.Id);\n        }\n\n        [Test]\n        [Order(5)]\n        public void MovingTouchUpdatesPosition()\n        {\n            var pos1 = new Vector2(104, 50);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos1);\n\n            var state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count);\n\n            var touch = state[0];\n            Assert.AreEqual(TouchLocationState.Pressed, touch.State);\n            Assert.AreEqual(pos1, touch.Position);\n\n            var pos2 = new Vector2(104, 50);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos2);\n\n            state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count);\n\n            touch = state[0];\n            Assert.AreEqual(TouchLocationState.Moved, touch.State);\n            Assert.AreEqual(pos2, touch.Position); //Location should be updated\n        }\n\n        [Test]\n        [Order(6)]\n        [TestCase(true)]\n        [TestCase(false)]\n        public void ReleasingTouchMakesItGoAway(bool moveInBetween)\n        {\n            //Touch the screen, we should get one touch with the given location in the pressed state\n            var pos = new Vector2(105, 50);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            \n            var state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count);\n\n            var initialTouch = state[0];\n            Assert.AreEqual(TouchLocationState.Pressed, initialTouch.State);\n            Assert.AreEqual(pos, initialTouch.Position);\n\n            //Now optionally move the touch, should give the same touch in the new location in the moved state\n            if (moveInBetween)\n            {\n                var pos2 = new Vector2(105, 100);\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos2);\n\n                var movedState = TouchPanel.GetState();\n                Assert.AreEqual(1, movedState.Count);\n\n                var touch = movedState[0];\n                Assert.AreEqual(TouchLocationState.Moved, touch.State);\n                Assert.AreEqual(pos2, touch.Position);\n                Assert.AreEqual(initialTouch.Id, touch.Id);\n            }\n\n            //Release the touch, it should then show up as released touch\n            var pos3 = new Vector2(105, 150);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos3);\n\n            var endState = TouchPanel.GetState();\n            Assert.AreEqual(1, endState.Count);\n\n            var endTouch = endState[0];\n            Assert.AreEqual(TouchLocationState.Released, endTouch.State);\n            Assert.AreEqual(pos3, endTouch.Position);\n            Assert.AreEqual(initialTouch.Id, endTouch.Id);\n\n            //Finally get the TouchState again, we should now have no touches\n            var finalState = TouchPanel.GetState();\n            Assert.AreEqual(0, finalState.Count);\n        }\n\n        [Test]\n        [Order(7)]\n        [TestCase(true)]\n        [TestCase(false)]\n        [Description(\"In XNA if you press and release your finger over multiple frames where GetState is not called, the touch never shows up\")]\n        public void TouchBetweenGetStateCallsMakesNoTouch(bool moveInBetween)\n        {\n            var pos = new Vector2(106, 50);\n            var pos2 = new Vector2(106, 150);\n            int frame = 0;\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            if (moveInBetween) //Moving shouldn't change the behavior\n            {\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos2);\n            }\n\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos2);\n\n            var state = TouchPanel.GetState();\n            Assert.AreEqual(0, state.Count); //Should miss the touch that happened between\n        }\n\n        [Test]\n        [Order(8)]\n        [TestCase(true, true)]\n        [TestCase(true, false)]\n        [TestCase(false, true)]\n        [TestCase(false, false)]\n        [Description(\"If you press and release a touch on the same frame we need to show it as pressed that frame and released in the next\")]\n        public void SameFrameTouchAndReleaseMakesTouch(bool moveInBetween, bool waitAFrameForNextState)\n        {\n            var pos = new Vector2(107, 50);\n            var pos2 = new Vector2(107, 150);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            if (moveInBetween) //Moving shouldn't change the behavior\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos2);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos2);\n\n            var state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count); //Should get the touch that happened between\n\n            var touch = state[0];\n            Assert.AreEqual(pos2, touch.Position);\n            Assert.AreEqual(TouchLocationState.Pressed, touch.State);\n\n            if (waitAFrameForNextState)\n            {\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n            }\n\n            state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count); //Touch should still be there, but as released\n\n            touch = state[0];\n            Assert.AreEqual(pos2, touch.Position);\n            Assert.AreEqual(TouchLocationState.Released, touch.State);\n\n\n            if (waitAFrameForNextState)\n            {\n                Thread.Sleep(GameTimeForFrame(1));\n                FrameworkDispatcher.Update();\n            }\n           \n            state = TouchPanel.GetState();\n            Assert.AreEqual(0, state.Count); //Touch should be gone now\n        }\n\n        [Test]\n        [Order(9)]\n        [TestCase(true)]\n        [TestCase(false)]\n        [Description(\"Press and release our finger on the same frame. Don't call GetState that frame, but do the next. We should not get the touch\")]\n        public void SameFrameTouchAndReleaseMissedIfWaitAFrameToGetState(bool moveInBetween)\n        {\n            var pos = new Vector2(108, 50);\n            var pos2 = new Vector2(108, 150);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            if (moveInBetween) //Moving shouldn't change the behavior\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos2);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos2);\n            Thread.Sleep(GameTimeForFrame(1));\n            FrameworkDispatcher.Update();\n            var state = TouchPanel.GetState();\n            Assert.AreEqual(0, state.Count); //Shouldn't get the touch that happened last frame\n        }\n\n        [Test]\n        [Order(10)]\n        [Description(\"Do multiple touches and check they behave as expected\")]\n        public void SimpleMultiTouchTest()\n        {\n            //Start with one touch\n            var pos = new Vector2(109, 50);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n\n            var state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count);\n\n            var initialTouch1 = state[0];\n            Assert.AreEqual(TouchLocationState.Pressed, initialTouch1.State);\n            Assert.AreEqual(pos, initialTouch1.Position);\n\n\n            //Start a second touch\n            var pos2 = new Vector2(150, 100);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos2);\n\n            state = TouchPanel.GetState();\n            Assert.AreEqual(2, state.Count);\n\n            //First touch should now be moved, same location\n            var touch1 = state.First(x => x.Id == initialTouch1.Id);\n            Assert.AreEqual(TouchLocationState.Moved, touch1.State);\n            Assert.AreEqual(pos, touch1.Position);\n\n            //Second touch should be pressed in its position\n            var initialTouch2 = state.First(x => x.Id != initialTouch1.Id);\n            Assert.AreEqual(TouchLocationState.Pressed, initialTouch2.State);\n            Assert.AreEqual(pos2, initialTouch2.Position);\n\n\n            //Move the second touch\n            var pos3 = new Vector2(150, 150);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(2, pos3);\n            \n            state = TouchPanel.GetState();\n            Assert.AreEqual(2, state.Count);\n\n            //touch1 should be the same\n            touch1 = state.First(x => x.Id == initialTouch1.Id);\n            Assert.AreEqual(TouchLocationState.Moved, touch1.State);\n            Assert.AreEqual(pos, touch1.Position);\n\n            //touch2 should be moved in its new location\n            var touch2 = state.First(x => x.Id == initialTouch2.Id);\n            Assert.AreEqual(TouchLocationState.Moved, touch2.State);\n            Assert.AreEqual(pos3, touch2.Position);\n\n\n            //Release the second touch\n            var pos4 = new Vector2(150, 200);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(2, pos4);\n\n            state = TouchPanel.GetState();\n            Assert.AreEqual(2, state.Count);\n\n            //touch1 should be the same\n            touch1 = state.First(x => x.Id == initialTouch1.Id);\n            Assert.AreEqual(TouchLocationState.Moved, touch1.State);\n            Assert.AreEqual(pos, touch1.Position);\n\n            //touch2 should be released in its new location\n            touch2 = state.First(x => x.Id == initialTouch2.Id);\n            Assert.AreEqual(TouchLocationState.Released, touch2.State);\n            Assert.AreEqual(pos4, touch2.Position);\n\n\n            //Move the first touch, second touch shouldn't be there any more\n            var pos5 = new Vector2(100, 200);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(1, pos5);\n\n            state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count);\n\n            //touch1 should be moved to the new position\n            touch1 = state.First(x => x.Id == initialTouch1.Id);\n            Assert.AreEqual(TouchLocationState.Moved, touch1.State);\n            Assert.AreEqual(pos5, touch1.Position);\n\n            //No more touch2\n\n\n            //Release the first touch\n            var pos6 = new Vector2(100, 250);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos6);\n\n            state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count);\n\n            //touch1 should be released at the new position\n            touch1 = state.First(x => x.Id == initialTouch1.Id);\n            Assert.AreEqual(TouchLocationState.Released, touch1.State);\n            Assert.AreEqual(pos6, touch1.Position);\n\n\n            //Now we should have no touches\n            state = TouchPanel.GetState();\n            Assert.AreEqual(0, state.Count);\n        }\n\n        [Test]\n        [Order(11)]\n        [Description(\"Internally TouchPanelState uses a queue of TouchLocation updating state. If it gets longer than 100, it throws away the first ones, which is bad\")]\n        public void TooManyEventsLosesOldOnes()\n        {\n            //To test this, we will start a touch, read the state.\n            //Then release the touch, start a new touch and move it around lots\n            //Then read the state, the first touch should be released\n\n            //Start a touch\n            var pos = new Vector2(1);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n\n            var state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count);\n\n            var initialTouch = state[0];\n            Assert.AreEqual(TouchLocationState.Pressed, initialTouch.State);\n            Assert.AreEqual(pos, initialTouch.Position);\n\n\n            //Release the touch, make a new one and move it around lots\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddReleasedEvent(1, pos);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, new Vector2(2));\n            for (var i = 3; i < 200; i++)\n                ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddMovedEvent(2, new Vector2(i));\n\n            //We should now have the first touch in the release state and the second touch in the pressed state at 199,199\n            state = TouchPanel.GetState();\n            Assert.AreEqual(2, state.Count);\n\n            var newInitialTouch = state.First(x => x.Id == initialTouch.Id);\n            Assert.AreEqual(TouchLocationState.Released, newInitialTouch.State);\n            Assert.AreEqual(pos, newInitialTouch.Position);\n\n            var secondTouch = state.First(x => x.Id != initialTouch.Id);\n            Assert.AreEqual(TouchLocationState.Pressed, secondTouch.State);\n            Assert.AreEqual(new Vector2(199), secondTouch.Position);\n        }\n\n        [Test]\n        [Order(12)]\n        [TestCase(false)]\n        [TestCase(true)]\n        public void ReleaseAllTouchesTest(bool testBetween)\n        {\n            //Create multiple touches in different states\n\n            //Start a touch\n            Vector2 pos = new Vector2(2);\n            Vector2 pos2 = new Vector2(3);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n\n            var state = TouchPanel.GetState();\n            Assert.AreEqual(1, state.Count);\n\n            TouchLocation initialTouch = state[0];\n            Assert.AreEqual(TouchLocationState.Pressed, initialTouch.State);\n            Assert.AreEqual(pos, initialTouch.Position);\n\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos2);\n\n            if (testBetween)\n            {\n                state = TouchPanel.GetState();\n                Assert.AreEqual(2, state.Count);\n                TouchLocation touch = state.First(x => x.Id == initialTouch.Id);\n                TouchLocation touch2 = state.First(x => x.Id != initialTouch.Id);\n\n                Assert.AreEqual(TouchLocationState.Moved, touch.State);\n                Assert.AreEqual(TouchLocationState.Pressed, touch2.State);\n            }\n\n            // Release touches\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(1, pos);\n            ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy<TouchPanelStrategy>().AddPressedEvent(2, pos2);\n\n            //If we saw the second touch happen then we should see it be released, otherwise it will be in pressed, then in released next time\n            state = TouchPanel.GetState();\n            Assert.AreEqual(2, state.Count);\n\n            Assert.AreEqual(testBetween ? TouchLocationState.Released : TouchLocationState.Pressed, state.Single(p => p.Id != initialTouch.Id).State);\n            Assert.AreEqual(TouchLocationState.Released, state.Single(p => p.Id == initialTouch.Id).State);\n\n            if (!testBetween)\n            {\n                state = TouchPanel.GetState();\n                Assert.AreEqual(1, state.Count);\n\n                Assert.AreEqual(TouchLocationState.Released, state[0].State);\n            }\n\n            //Then it should be empty\n            state = TouchPanel.GetState();\n            Assert.AreEqual(0, state.Count);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/Linux/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{6BC96721-9A69-4698-BF22-7BDB319FF381}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>MouseGetStateAndIsMouseVisibleTester</RootNamespace>\n    <AssemblyName>MouseGetStateAndIsMouseVisibleTester</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG; LINUX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame\\ThirdParty\\Lidgren.Network\\Lidgren.Network.Linux.csproj\">\n      <Project>{758CB33D-6EBD-41EA-BB0C-55B1C97A325F}</Project>\n      <Name>Lidgren.Network.Linux</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame\\MonoGame.Framework\\MonoGame.Framework.Linux.csproj\">\n      <Project>{35253CE1-C864-4CD3-8249-4D1319748E8F}</Project>\n      <Name>MonoGame.Framework.Linux</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\Enums.cs\">\n      <Link>Enums.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\Game1.cs\">\n      <Link>Game1.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\InputManager.cs\">\n      <Link>InputManager.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\Object.cs\">\n      <Link>Object.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\Program.cs\">\n      <Link>Program.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\TextManager.cs\">\n      <Link>TextManager.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\Properties\\AssemblyInfo.cs\">\n      <Link>Properties\\AssemblyInfo.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\MainMenu.xib\">\n      <Link>MainMenu.xib</Link>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\Content\\UiCursor.xnb\">\n      <Link>Content\\UiCursor.xnb</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\Content\\fntStandard.xnb\">\n      <Link>Content\\fntStandard.xnb</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/BlockingRun/BlockingRun.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}</ProjectGuid>\n    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>BlockingRun</RootNamespace>\n    <AssemblyName>BlockingRun</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"MonoMac\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Main.cs\" />\n    <Compile Include=\"BlockingRunGame.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Mono\\MonoMac\\v0.0\\Mono.MonoMac.targets\" />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\">\n      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>\n      <Name>MonoGame.Framework.MacOS</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\..\\..\\ThirdParty\\Lidgren.Network\\Lidgren.Network.MacOS.csproj\">\n      <Project>{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}</Project>\n      <Name>Lidgren.Network.MacOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Content\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\SimpleFont.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/BlockingRun/BlockingRunGame.cs",
    "content": "using System;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace BlockingRun\n{\n    public class BlockingRunGame : Game\n    {\n        public BlockingRunGame()\n        {\n            new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n        }\n\n        private SpriteBatch _spriteBatch;\n        private SpriteFont _font;\n        protected override void LoadContent()\n        {\n            base.LoadContent();\n\n            _spriteBatch = new SpriteBatch(GraphicsDevice);\n            _font = Content.Load<SpriteFont>(\"SimpleFont\");\n        }\n\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            base.Draw(gameTime);\n\n            _spriteBatch.Begin();\n            _spriteBatch.DrawString(_font, \"A magical blocking Game.Run!\", Vector2.Zero, Color.White);\n            _spriteBatch.End();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/BlockingRun/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.BlockingRun</string>\n\t<key>CFBundleName</key>\n\t<string>BlockingRun</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.6</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/BlockingRun/Main.cs",
    "content": "using System;\nusing System.Drawing;\n\nusing Microsoft.Xna.Framework;\n\nusing MonoMac.AppKit;\nusing MonoMac.Foundation;\n\nnamespace BlockingRun\n{\n    class MainClass\n    {\n        static void Main(string[] args)\n        {\n            NSApplication.Init();\n\n            Console.WriteLine(\"Starting a blocking game instance...\");\n            using (var pool = new NSAutoreleasePool())\n            using (var game = new BlockingRunGame())\n            {\n                game.Run();\n            }\n\n            Console.WriteLine(\"Starting a second blocking game instance...\");\n            using (var pool = new NSAutoreleasePool())\n            using (var game = new BlockingRunGame())\n            {\n                game.Run();\n            }\n\n            Console.WriteLine(\"Fin\");\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/GamePadTest/Game1.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.GamerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace GamePadTest\n{\n\tpublic class Game1 : Game\n\t{\n\t\tGraphicsDeviceManager graphics;\n\t\tSpriteBatch spriteBatch;\n\n\t\tpublic Game1()\n\t\t{\n\t\t\tgraphics = new GraphicsDeviceManager(this);\n\t\t\tContent.RootDirectory = \"Content\";\n\n\t\t}\n\n\t\tprotected override void Initialize()\n\t\t{\n\t\t\t// TODO: Add your initialization logic here\n\n\t\t\tbase.Initialize();\n\t\t}\n\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\t// Create a new SpriteBatch, which can be used to draw textures.\n\t\t\tspriteBatch = new SpriteBatch(GraphicsDevice);\n\t\t\tServices.AddService(typeof(SpriteBatch), spriteBatch);\n\t\t}\n\n\t\tprotected override void UnloadContent()\n\t\t{\n\t\t\t// TODO: Unload any non ContentManager content here\n\t\t}\n\n\t\tprotected override void Update(GameTime gameTime)\n\t\t{\n\n\t\t\tbase.Update(gameTime);\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\n\t\t\tGraphicsDevice.Clear(Color.CornflowerBlue);\n\n\t\t\tbase.Draw(gameTime);\n\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/GamePadTest/GamePadTest.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}</ProjectGuid>\n    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>GamePadTest</RootNamespace>\n    <AssemblyName>GamePadTest</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"MonoMac\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Mono\\MonoMac\\v0.0\\Mono.MonoMac.targets\" />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\">\n      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>\n      <Name>MonoGame.Framework.MacOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Game1.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\fntStandard.xnb\" />\n    <Content Include=\"Content\\UiCursor.xnb\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Interactive/MacOS/GamePadTest/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.GamePadTest</string>\n\t<key>CFBundleName</key>\n\t<string>GamePadTest</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.6</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/GamePadTest/Program.cs",
    "content": "using System;\n\nnamespace GamePadTest\n{\n\tstatic class Program\n\t{\n\t\tprivate static Game1 game;\n\n\t\t/// <summary>\n\t\t/// The main entry point for the application.\n\t\t/// </summary>\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\tMonoMac.AppKit.NSApplication.Init();\n\n\t\t\tusing (var p = new MonoMac.Foundation.NSAutoreleasePool())\n\t\t\t{\n\t\t\t\tMonoMac.AppKit.NSApplication.SharedApplication.Delegate = new AppDelegate();\n\t\t\t\tMonoMac.AppKit.NSApplication.Main(args);\n\t\t\t}\n\t\t}\n\n\n\t\tclass AppDelegate : MonoMac.AppKit.NSApplicationDelegate\n\t\t{\n\n\t\t\tpublic override void FinishedLaunching(MonoMac.Foundation.NSObject notification)\n\t\t\t{\n\t\t\t\tgame = new Game1();\n\t\t\t\tgame.Run();\n\t\t\t}\n\n\t\t\tpublic override bool ApplicationShouldTerminateAfterLastWindowClosed(MonoMac.AppKit.NSApplication sender)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Enums.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace MouseGetStateAndIsMouseVisibleTester\n{\n    public enum MsState\n    {\n        ButtonWasPressed,\n        ButtonWasDoublePressed,\n        ButtonWasReleased,\n        ButtonStillPressed,\n        ButtonStillReleased\n    }//MsState\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Game1.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.GamerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Media;\n\n\nusing System.Windows.Forms;\n\nnamespace MouseGetStateAndIsMouseVisibleTester\n{\n    public class Game1 : Microsoft.Xna.Framework.Game\n    {\n        GraphicsDeviceManager graphics;\n        SpriteBatch spriteBatch;\n        public TextManager aTm;\n        public InputManager cIm;\n        private SpriteFont sfStandard;\n        public MouseState mousestatus;\n        public Texture2D t2dUiCursor;\n        public Object aObjects;\n        bool bWindowIsCentered = false;\n        bool bFullScreen = false;\n\n        public Game1()\n        {\n            graphics = new GraphicsDeviceManager(this);\n            Content.RootDirectory = \"Content\";\n\n            cIm = new InputManager(this);\n\t\t\tWindow.AllowUserResizing = true;\n\n\t\t\t// Uncomment the line below to test full screen on startup.\n\t\t\t//graphics.IsFullScreen = false;\n\t\t\t//bFullScreen = true;\n\t\t\t\n\t\t\t // Subscribe to the game window's ClientSizeChanged event.\n\t\t\tWindow.ClientSizeChanged += Window_ClientSizeChanged;\n\t\t\tActivated += HandleActivated;\n\t\t\tDeactivated += HandleDeactivated;\n        }\n\n        void HandleDeactivated (object sender, EventArgs e)\n        {\n               Console.WriteLine(\"DeActivated - IsActive? \" + IsActive);\n        }\n\n        void HandleActivated (object sender, EventArgs e)\n        {\n\t\t\tConsole.WriteLine(\"Activated - IsActive? \" + IsActive);\n\t}\n\n    void Window_ClientSizeChanged( object sender, EventArgs e )\n    {\n\t\t\t// Make changes to handle the new window size.\n\t\t\t//Console.WriteLine(\"Window size changed \" + Window.ClientBounds);\n    }\n\n        protected override void Initialize()\n        {\n            // TODO: Add your initialization logic here\n\n            base.Initialize();\n        }\n\n\n        protected override void LoadContent()\n        {\n            // Create a new SpriteBatch, which can be used to draw textures.\n            spriteBatch = new SpriteBatch(GraphicsDevice);\n            Services.AddService(typeof(SpriteBatch), spriteBatch);\n\n            sfStandard = Content.Load<SpriteFont>(\"fntStandard\");\n            t2dUiCursor = Content.Load<Texture2D>(\"UiCursor\");\n\n            aTm = new TextManager(this, sfStandard);\n            Components.Add(aTm);\n\n            aObjects = new Object(this, ref t2dUiCursor);\n            Components.Add(aObjects);\n\n            aObjects.pos.X = 200;\n            aObjects.pos.Y = 200;\n        }\n\n\n        protected override void UnloadContent()\n        {\n            // TODO: Unload any non ContentManager content here\n        }\n\n        public void Toggle()\n        {\n            graphics.ToggleFullScreen();\n            \n\t\t\tif(bFullScreen)\n\t\t\t{\n\t\t\t\tbFullScreen = false;\n\t\t\t}//if\n\t\t\telse\n\t\t\t{\n\t\t\t\tbFullScreen = true;\n\t\t\t}//else\n        }//Toggle\n\n        public int GetBackBufferWidth()\n        {\n            return graphics.PreferredBackBufferWidth;\n        }//GetBackBufferWidth\n\n        public int GetBackBufferHeight()\n        {\n            return graphics.PreferredBackBufferHeight;\n        }//GetBackBufferWidth\n        \n\n        protected override void Update(GameTime gameTime)\n        {\n            mousestatus = Mouse.GetState();\n\n            cIm.InputHandler(mousestatus, gameTime);\n\n            aObjects.pos.X = mousestatus.X;\n            aObjects.pos.Y = mousestatus.Y;\n\n            base.Update(gameTime);\n        }\n\n\n        protected override void Draw(GameTime gameTime)\n        {\n            \n            GraphicsDevice.Clear(Color.CornflowerBlue);\n\n            spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);\n                base.Draw(gameTime); \n            spriteBatch.End();\n\n       \n        }\n        \n        public void CenterWindow()\n        {\n        \tif(bFullScreen) return;\n        \t\n#if MAC\t\n            int index;\n            int upperBound;\n            float fScreenWidth, fScreenHeight, fNewX, fNewY, fWindowWidth, fWindowHeight, fTitleBarHeight;\n\t        Screen[] screens = Screen.AllScreens;\n\t        \n\t        fScreenWidth = fScreenHeight = 0;\n\t        \n            upperBound = screens.GetUpperBound(0);\n            for (index = 0; index <= upperBound; index++)\n            {\n                if (screens[index].Primary)\n                {\n\t\t\t\t\tfScreenWidth = (float)screens[index].Bounds.Width;\n                    fScreenHeight = (float)screens[index].Bounds.Height;  \n                    index = upperBound;\n                }//if\n            }//for\n            \n            fWindowWidth = graphics.PreferredBackBufferWidth;\n            fWindowHeight = graphics.PreferredBackBufferHeight;\n            \t\n            fNewX = (fScreenWidth - fWindowWidth) / 2;\n            fNewY = (fScreenHeight - fWindowHeight) / 2;\n            \n            fTitleBarHeight = this.Window.Window.Frame.Height - fWindowHeight;\n            \n\t\t\tSystem.Drawing.PointF pfLocation = new System.Drawing.PointF(fNewX,fNewY);\n\t\t\tSystem.Drawing.PointF pfSize = new System.Drawing.PointF(fWindowWidth, fWindowHeight + fTitleBarHeight);\n\t\t\tSystem.Drawing.SizeF sfSize = new System.Drawing.SizeF(pfSize);\n\t\t\tSystem.Drawing.RectangleF rectTemp = new System.Drawing.RectangleF(pfLocation, sfSize);\n\t\t\tthis.Window.Window.SetFrame(rectTemp, true);\n#endif\t\t\n        }//CenterWindow\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.MouseGetStateAndIsMouseVisibleTester</string>\n\t<key>CFBundleName</key>\n\t<string>MouseGetStateAndIsMouseVisibleTester</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.6</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/InputManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Net;\nusing Microsoft.Xna.Framework.Storage;\nusing Microsoft.Xna.Framework.Media;\nusing System.IO;\nusing Microsoft.Xna.Framework.GamerServices;\n\nnamespace MouseGetStateAndIsMouseVisibleTester\n{\n    public class InputManager\n    {\n        private Game1 cG;\n        private MouseState mousestatus;\n        private MsState mssButtonLeft;\n        public TimeSpan tsTimeSinceLastClick;\n        private int nClicksForDoubleClick;\n\n\n        public InputManager(Game game)\n        {\n            cG = (Game1)game;\n            mssButtonLeft = MsState.ButtonWasReleased;\n            tsTimeSinceLastClick = TimeSpan.Zero;\n            nClicksForDoubleClick = 0;\n\n        }//InputManger\n\n        public void InputHandler(MouseState mst, GameTime gameTime)\n        {\n            if (!cG.IsActive) return;\n            \n            mousestatus = mst;\n\n            HandleMouseLeftButton(gameTime);\n\n            if (mssButtonLeft == MsState.ButtonWasPressed)\n            {\n                if (mousestatus.X >= 0 && mousestatus.X <= 405)\n                {\n                    if (mousestatus.Y >= 209 && mousestatus.Y <= 250)\n                    {\n                        cG.Toggle();\n                    }//if\n                }//if\n            }//if\n            \n            if (mssButtonLeft == MsState.ButtonWasPressed)\n            {\n                if (mousestatus.X >= 0 && mousestatus.X <= 628)\n                {\n                    if (mousestatus.Y >= 304 && mousestatus.Y <= 350)\n                    {\n                        cG.CenterWindow();\n                    }//if\n                }//if\n            }//if\n        }//InputHandler\n\n        private void HandleMouseLeftButton(GameTime gTime)\n        {\n            tsTimeSinceLastClick += gTime.ElapsedGameTime;\n\n            if (tsTimeSinceLastClick >= TimeSpan.FromMilliseconds(250))\n            {\n                nClicksForDoubleClick = 0;\n            }//if\n\n            if (mousestatus.LeftButton == ButtonState.Pressed)\n            {\n                if (mssButtonLeft == MsState.ButtonWasReleased)\n                {\n                    if (GetMouseX() >= 0 && GetMouseX() <= cG.GetBackBufferWidth())\n                    {\n                        if (GetMouseY() >= 0 && GetMouseY() <= cG.GetBackBufferHeight())\n                        {\n                            mssButtonLeft = MsState.ButtonWasPressed;\n                            nClicksForDoubleClick++;\n\n                            if (nClicksForDoubleClick == 1)\n                            {\n                                tsTimeSinceLastClick = TimeSpan.Zero;\n                            }//if\n\n                            if (nClicksForDoubleClick == 2)\n                            {\n                                if (tsTimeSinceLastClick < TimeSpan.FromMilliseconds(250))\n                                {\n                                    nClicksForDoubleClick = 0;\n                                    mssButtonLeft = MsState.ButtonWasDoublePressed;\n                                }//if\n                            }//if\n\n                            if (nClicksForDoubleClick == 3) nClicksForDoubleClick = 0;\n\n                        }//if\n                    }//if\n                }//if\n                else\n                {\n                    if (mssButtonLeft == MsState.ButtonWasPressed || mssButtonLeft == MsState.ButtonWasDoublePressed)\n                    {\n                        mssButtonLeft = MsState.ButtonStillPressed;\n                    }//if\n                }//else\n            }//if\n\n            if (mousestatus.LeftButton == ButtonState.Released)\n            {\n                mssButtonLeft = MsState.ButtonWasReleased;\n            }//if\n        }//HandleMouseLeftButton\n\n        public float GetMouseX()\n        {\n            return mousestatus.X;\n        }//GetMouseX\n\n        public float GetMouseY()\n        {\n            return mousestatus.Y;\n        }//GetMouseY\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1060</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10D573</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">762</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.29</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">460.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string key=\"NS.object.0\">762</string>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.EditedObjectIDs\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSCustomObject\" id=\"1001\">\n\t\t\t\t<string key=\"NSClassName\">NSObject</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1003\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1004\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\" />\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\" />\n\t\t\t\t\t\t<nil key=\"parent\" />\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1004\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>-3.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\" />\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\" />\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\" />\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\" />\n\t\t\t<int key=\"maxID\">0</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\" />\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\" />\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<nil key=\"IBDocument.LastKnownRelativeProjectPath\" />\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{7B2F1E86-1B56-4F78-9265-EA8852442171}</ProjectGuid>\n    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>MouseGetStateAndIsMouseVisibleTester</RootNamespace>\n    <AssemblyName>MouseGetStateAndIsMouseVisibleTester</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG; MAC</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"MonoMac\" />\n    <Reference Include=\"System.Windows.Forms\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Mono\\MonoMac\\v0.0\\Mono.MonoMac.targets\" />\n  <ItemGroup>\n    <Folder Include=\"Properties\\\" />\n    <Folder Include=\"Content\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Enums.cs\" />\n    <Compile Include=\"Game1.cs\" />\n    <Compile Include=\"InputManager.cs\" />\n    <Compile Include=\"Object.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"TextManager.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\fntStandard.xnb\" />\n    <Content Include=\"Content\\UiCursor.xnb\" />\n  </ItemGroup>\n  <ItemGroup>\n    <InterfaceDefinition Include=\"MainMenu.xib\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\">\n      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>\n      <Name>MonoGame.Framework.MacOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Object.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.GamerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Net;\nusing Microsoft.Xna.Framework.Storage;\n\n\nnamespace MouseGetStateAndIsMouseVisibleTester\n{\n    public class Object : Microsoft.Xna.Framework.DrawableGameComponent\n    {\n        public Vector2 pos;\n        protected Texture2D texture;\n        private Vector2 v2Temp;\n        protected Rectangle recCurrentFrame;\n        public int nAlpha;\n        public float fRotation;\n        public Vector2 vecRotationCenter;\n        private List<Rectangle> frames;\n\n        public Object(Game game, ref Texture2D theTexture)\n            : base(game)\n        {\n            texture = theTexture;\n            v2Temp = new Vector2();\n            fRotation = 0;\n            \n            pos = new Vector2();\n            pos.X = 0;\n            pos.Y = 0;\n\n            vecRotationCenter.X = 0;\n            vecRotationCenter.Y = 0;\n\n            Frames = new List<Rectangle>();\n            Rectangle frame = new Rectangle();\n\n            //Extract the frames from the texture\n            frame.X = 0;\n            frame.Y = 0;\n            frame.Width = texture.Width;\n            frame.Height = texture.Height;\n\n            Frames.Add(frame);\n        }\n\n        public override void Update(GameTime gameTime)\n        {\n            recCurrentFrame = frames[0];\n            \n            base.Update(gameTime);\n        }\n\n        public override void Draw(GameTime gameTime)\n        {\n            v2Temp.X = pos.X - (texture.Width / 2);\n            v2Temp.Y = pos.Y - texture.Height;\n\n            // Get the current spritebatch\n            SpriteBatch sBatch = (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch));\n\n            sBatch.Draw(texture, v2Temp, recCurrentFrame, new Color(255, 255, 255, (byte)nAlpha), fRotation, vecRotationCenter, 1f, SpriteEffects.None, 0);\n\n            base.Draw(gameTime);\n        }\n\n        public List<Rectangle> Frames\n        {\n            get { return frames; }\n            set { frames = value; }\n        }//Frames\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Program.cs",
    "content": "using System;\n\nnamespace MouseGetStateAndIsMouseVisibleTester\n{\n\n#if  WINDOWSDX || XBOX || LINUX\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main(string[] args)\n        {\n            using (Game1 game = new Game1())\n            {\n                game.Run();\n            }\n        }\n    }\n#endif\n#if MAC\n\n\tstatic class Program\n\t{\t\n\t\t/// <summary>\n\t\t/// The main entry point for the application.\n\t\t/// </summary>\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\tMonoMac.AppKit.NSApplication.Init();\n\t\t\t\n\t\t\tusing (var p = new MonoMac.Foundation.NSAutoreleasePool()) \n\t\t\t{\n\t\t\t\tMonoMac.AppKit.NSApplication.SharedApplication.Delegate = new AppDelegate();\n\t\t\t\tMonoMac.AppKit.NSApplication.Main(args);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclass AppDelegate : MonoMac.AppKit.NSApplicationDelegate\n\t{\n\n        Game1 game;\n\t\tpublic override void FinishedLaunching(MonoMac.Foundation.NSObject notification)\n\t\t{\n\t\t\tGame1 game = new Game1();\n\t\t\tgame.Run();\n\t\t}\n\t\t\n\t\tpublic override bool ApplicationShouldTerminateAfterLastWindowClosed(MonoMac.AppKit.NSApplication sender)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t}\n#endif\n}\n\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"MouseGetStateAndIsMouseVisibleTester\")]\n[assembly: AssemblyProduct(\"MouseGetStateAndIsMouseVisibleTester\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type. Only Windows\n// assemblies support COM.\n[assembly: ComVisible(false)]\n\n// On Windows, the following GUID is for the ID of the typelib if this\n// project is exposed to COM. On other platforms, it unique identifies the\n// title storage container when deploying this assembly to the device.\n[assembly: Guid(\"9484ea83-c718-46a9-97f8-fefd52842c19\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/TextManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.GamerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Framework.Net;\nusing Microsoft.Xna.Framework.Storage;\nnamespace MouseGetStateAndIsMouseVisibleTester\n{\n    public class TextManager : Microsoft.Xna.Framework.DrawableGameComponent\n    {\n        public SpriteFont sfStandard;\n        protected SpriteBatch spriteBatch = null;\n        private Game1 cG;\n        \n        public TextManager(Game game, SpriteFont sfStandardFont)\n            : base(game)\n        {\n            cG = (Game1)game;\n            spriteBatch = (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch));\n            sfStandard = sfStandardFont;\n\n        }//TextManager\n\n        public override void Draw(GameTime gameTime)\n        {\n            spriteBatch.DrawString(sfStandard, \"LeftMouse = \" + cG.mousestatus.LeftButton.ToString(), new Vector2(0, 50), Color.White);\n\t\t\t\n#if LINUX\n\t\t\tspriteBatch.DrawString(sfStandard, \"MouseX = \" + Mouse.GetState().X.ToString(), new Vector2(0, 100), Color.White);            \n            spriteBatch.DrawString(sfStandard, \"MouseY = \" + Mouse.GetState().Y.ToString(), new Vector2(0, 130), Color.White);\n#else\t\t\t\n\t\t\ttry\n\t\t\t{\n\t            spriteBatch.DrawString(sfStandard, \"MouseX = \" + cG.Window.Window.MouseLocationOutsideOfEventStream.X.ToString(), new Vector2(0, 100), Color.White);\n\t            spriteBatch.DrawString(sfStandard, \"MouseY = \" + cG.Window.Window.MouseLocationOutsideOfEventStream.Y.ToString(), new Vector2(0, 130), Color.White);\n\t\t\t}//try\n\t\t\tcatch(Exception ex)\n\t\t\t{\n\t\t\t\n\t\t\t}\n#endif   \n\n            spriteBatch.DrawString(sfStandard, \"Click here to Toggle Full Screen\", new Vector2(0, 200), Color.White);\n            \n            spriteBatch.DrawString(sfStandard, \"Click here to center window if in windowed mode\", new Vector2(0, 300), Color.White);\n\n\n        }//Draw\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MouseGetStateAndIsMouseVisibleTester\", \"MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester.csproj\", \"{7B2F1E86-1B56-4F78-9265-EA8852442171}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MonoGame.Framework.MacOS\", \"..\\..\\Public\\Share\\MonoMacSource\\kjpgit\\MonoGame\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\", \"{36C538E6-C32A-4A8D-A39C-566173D7118E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Lidgren.Network.MacOS\", \"..\\..\\Public\\Share\\MonoMacSource\\kjpgit\\MonoGame\\ThirdParty\\Lidgren.Network\\Lidgren.Network.MacOS.csproj\", \"{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|x86 = Release|x86\n\t\tDistribution|Any CPU = Distribution|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.ActiveCfg = Distribution|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.Build.0 = Distribution|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|x86.Build.0 = Release|Any CPU\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Debug|x86.Build.0 = Debug|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Release|x86.ActiveCfg = Release|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Release|x86.Build.0 = Release|x86\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Distribution|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(MonoDevelopProperties) = preSolution\n\t\tStartupItem = MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester.csproj\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Tests/Interactive/MacOS/PrimitivesTest/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n  <startup useLegacyV2RuntimeActivationPolicy=\"true\">\n    <supportedRuntime version=\"v4.0\"/>\n  </startup>\n</configuration>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/PrimitivesTest/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.PrimitivesTest</string>\n\t<key>CFBundleName</key>\n\t<string>PrimitivesTest</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.6</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/PrimitivesTest/PrimitivesTest.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{9704681E-C6DB-4946-9F31-0EF9BE63090A}</ProjectGuid>\n    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>PrimitivesTest</RootNamespace>\n    <AssemblyName>PrimitivesTest</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG; MAC</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"MonoMac\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n    <None Include=\"App.config\" />\n    <None Include=\"Game.ico\" />\n    <None Include=\"GameThumbnail.png\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Mono\\MonoMac\\v0.0\\Mono.MonoMac.targets\" />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\">\n      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>\n      <Name>MonoGame.Framework.MacOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Game1.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Interactive/MacOS/PrimitivesTest/Program.cs",
    "content": "using System;\n\nnamespace DrawUserPrimitivesWindows\n{\n\tstatic class Program\n\t{\n\n\n\t\tprivate static Game1 game;\n\n\t\t/// <summary>\n\t\t/// The main entry point for the application.\n\t\t/// </summary>\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\tMonoMac.AppKit.NSApplication.Init();\n\n\t\t\tusing (var p = new MonoMac.Foundation.NSAutoreleasePool())\n\t\t\t{\n\t\t\t\tMonoMac.AppKit.NSApplication.SharedApplication.Delegate = new AppDelegate();\n\t\t\t\tMonoMac.AppKit.NSApplication.Main(args);\n\t\t\t}\n\t\t}\n\n\n\t\tclass AppDelegate : MonoMac.AppKit.NSApplicationDelegate\n\t\t{\n\t\t\tGame1 game;\n\t\t\tpublic override void FinishedLaunching(MonoMac.Foundation.NSObject notification)\n\t\t\t{\n\t\t\t\tgame = new Game1();\n\t\t\t\tgame.Run();\n\t\t\t}\n\n\t\t\tpublic override bool ApplicationShouldTerminateAfterLastWindowClosed(MonoMac.AppKit.NSApplication sender)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest/Game1.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Media;\n\n\n\n\nnamespace SoundTest\n{\n\tpublic class Game1 : Microsoft.Xna.Framework.Game\n\t{\n\t\tGraphicsDeviceManager graphics;\n\t\tSpriteBatch spriteBatch;\n\n\t\tTexture2D tExplosion;\n\t\tSoundEffect sExplosion;\n\t\tRandom rnd = new Random();\n\t\t\n\t\tclass explosion\n\t\t{\n\t\t\tpublic Vector2 Position;\n\t\t\tpublic float Size;\n\t\t\t\n\t\t\tpublic explosion(Vector2 pos)\n\t\t\t{\n\t\t\t\tPosition = pos;\n\t\t\t\tSize = 1f;\n\t\t\t}\n\t\t}\n\t\t\n\t\tList<explosion> Explosions = new List<explosion>();\n\t\tTimeSpan timer = TimeSpan.Zero;\n\t\tint Interval = 1000; //Milliseconds. The duration of the sound is about 1.5 sec.\n\n\t\tpublic Game1()\n\t\t{\n\t\t\tgraphics = new GraphicsDeviceManager(this);\n\t\t\tContent.RootDirectory = \"Content\";\n\t\t\tgraphics.PreferredBackBufferWidth =  1024;;\n\t\t\tgraphics.PreferredBackBufferHeight = 768;\n\t\t\tgraphics.IsFullScreen = false;\n\t\t}\n\n\t\tprotected override void Initialize()\n\t\t{\n\n\t\t\tbase.Initialize();\n\n\t\t}\n\n\t\t/// <summary>\n\t\t/// LoadContent will be called once per game and is the place to load\n\t\t/// all of your content.\n\t\t/// </summary>\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tspriteBatch = new SpriteBatch(GraphicsDevice);\n\n\t\t\tsExplosion = Content.Load<SoundEffect>(\"ExplosionSound\");\n\t\t\t//sExplosion = Content.Load<SoundEffect>(\"laser1\");\n\t\t\t//sExplosion = Content.Load<SoundEffect>(\"FillingHoneyPot_Loop\");\n\t\t\ttExplosion = Content.Load<Texture2D>(\"Explosion\");\n\t\t}\n\n\n\t\tprotected override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\t\t\t//update explosions\n\t\t\tfor (int i = 0; i<Explosions.Count;i++)\n\t\t\t{\n\t\t\t\tExplosions[i].Size -= 0.01f;\n\t\t\t\tif (Explosions[i].Size < 0.1f)\n\t\t\t\t{\n\t\t\t\t\tExplosions.RemoveAt(i);\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//Check for next explosion\n\t\t\ttimer += gameTime.ElapsedGameTime;\n\t\t\tif (timer.TotalMilliseconds > Interval)\n\t\t\t{\n\t\t\t\ttimer = TimeSpan.Zero;\n\t\t\t\tfloat x = rnd.Next(24,1000);\n\t\t\t\tExplosions.Add(new explosion(new Vector2(x, rnd.Next(50,700))));\n\t\t\t\tsExplosion.Play(1f, 1f, (x / 512f) -1);\n\t\t\t}\n\t\t\t//Check for exit\n\t\t\tKeyboardState state = new KeyboardState();\n\t\t\tstate = Keyboard.GetState();\n\t\t\tif (state.IsKeyDown(Keys.Escape) || state.IsKeyDown(Keys.Space) || state.IsKeyDown(Keys.Enter))\n\t\t\t\tthis.Exit();\n\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tGraphicsDevice.Clear(Color.Black);\n\t\t\tbase.Draw(gameTime);\n\t\t\tspriteBatch.Begin();\n\t\t\t//Draw explosions\n\t\t\tforeach (explosion e in Explosions)\n\t\t\t\tspriteBatch.Draw(tExplosion, e.Position, null, Color.White, 0, Vector2.Zero,e.Size, SpriteEffects.None, 1);\n\t\t\tspriteBatch.End();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.SoundTest</string>\n\t<key>CFBundleName</key>\n\t<string>SoundTest</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.6</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1060</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10D573</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">762</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.29</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">460.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string key=\"NS.object.0\">762</string>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.EditedObjectIDs\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSCustomObject\" id=\"1001\">\n\t\t\t\t<string key=\"NSClassName\">NSObject</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1003\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1004\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\" />\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\" />\n\t\t\t\t\t\t<nil key=\"parent\" />\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1004\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>-3.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\" />\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\" />\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\" />\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\" />\n\t\t\t<int key=\"maxID\">0</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\" />\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\" />\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<nil key=\"IBDocument.LastKnownRelativeProjectPath\" />\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest/Program.cs",
    "content": "#if  WINDOWSDX\nusing System;\n\nnamespace SoundTest\n{\n\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main(string[] args)\n        {\n\t\t\tusing (Game1 game = new Game1())\n            {\n                game.Run();\n            }\n        }\n    }\n}\n#elif MACOS\nusing MonoMac.AppKit;\nusing MonoMac.Foundation;\nusing MonoMac.CoreGraphics;\nusing System.Runtime.InteropServices;\n \nnamespace SoundTest\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            NSApplication.Init();\n \n            using (var p = new NSAutoreleasePool())\n            {\n                NSApplication.SharedApplication.Delegate = new AppDelegate();\n                NSApplication.Main(args);\n            }\n        }\n    }\n \n    class AppDelegate : NSApplicationDelegate\n    {\n\t\tGame1 game;\n        public override void FinishedLaunching(MonoMac.Foundation.NSObject notification)\n        {\n            game = new Game1();\n            game.Run();\n        }\n \n        public override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender)\n        {\n            return true;\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest/SoundTest_MacOS.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}</ProjectGuid>\n    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>SoundTest</RootNamespace>\n    <AssemblyName>SoundTest</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;MACOS</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n    <DefineConstants>MACOS</DefineConstants>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"MonoMac\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n    <None Include=\"Content\\DepositingIntoVat_Loop.wav\" />\n    <None Include=\"Content\\FillingHoneyPot_Loop.xnb\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Mono\\MonoMac\\v0.0\\Mono.MonoMac.targets\" />\n  <ItemGroup>\n    <Folder Include=\"Content\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Game1.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\Explosion.xnb\" />\n    <Content Include=\"Content\\ExplosionSound.xnb\" />\n    <Content Include=\"Content\\DepositingIntoVat_Loop.xnb\" />\n    <Content Include=\"Content\\laser1.wav\" />\n    <Content Include=\"Content\\FillingHoneyPot_Loop.wav\" />\n  </ItemGroup>\n  <ItemGroup>\n    <InterfaceDefinition Include=\"MainMenu.xib\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\">\n      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>\n      <Name>MonoGame.Framework.MacOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/Game1.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace SoundTest\n{\n\tpublic class Game1 : Microsoft.Xna.Framework.Game\n\t{\n\t\tGraphicsDeviceManager graphics;\n\t\tSpriteBatch spriteBatch;\n\t\tTexture2D tExplosion;\n\t\tSoundEffect sExplosion;\n\t\tSoundEffectInstance eExplosion;\n\t\tfloat move = 11f;\n\t\tRandom rnd = new Random();\n\n\t\tclass explosion\n\t\t{\n\t\t\tpublic Vector2 Position;\n\t\t\tpublic float Size;\n\n\t\t\tpublic explosion(Vector2 pos)\n\t\t\t{\n\t\t\t\tPosition = pos;\n\t\t\t\tSize = 1f;\n\t\t\t}\n\t\t}\n\n\t\tList<explosion> Explosions = new List<explosion>();\n\t\tTimeSpan timer = TimeSpan.Zero;\n\t\tint Interval = 1000; //Milliseconds. The duration of the sound is about 1.5 sec.\n\n\t\tpublic Game1()\n\t\t{\n\t\t\tgraphics = new GraphicsDeviceManager(this);\n\t\t\tContent.RootDirectory = \"Content\";\n\t\t\tgraphics.PreferredBackBufferWidth = 1024;\n\t\t\t;\n\t\t\tgraphics.PreferredBackBufferHeight = 768;\n\t\t\tgraphics.IsFullScreen = false;\n\t\t\tExplosions.Add(new explosion(new Vector2(1025, 384)));\n\t\t}\n\n\t\tprotected override void Initialize()\n\t\t{\n\n\t\t\tbase.Initialize();\n\n\t\t}\n\n\t\t/// <summary>\n\t\t/// LoadContent will be called once per game and is the place to load\n\t\t/// all of your content.\n\t\t/// </summary>\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tspriteBatch = new SpriteBatch(GraphicsDevice);\n\n\t\t\tsExplosion = Content.Load<SoundEffect>(\"ExplosionSound\");\n\t\t\ttExplosion = Content.Load<Texture2D>(\"Explosion\");\n\t\t\teExplosion = sExplosion.CreateInstance();\n\t\t}\n\n\t\tprotected override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\t\t\t/*\n\t\t\t//update explosions\n\t\t\tfor (int i = 0; i<Explosions.Count;i++)\n\t\t\t{\n\t\t\t\tExplosions[i].Size -= 0.01f;\n\t\t\t\tif (Explosions[i].Size < 0.1f)\n\t\t\t\t{\n\t\t\t\t\tExplosions.RemoveAt(i);\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//Check for next explosion\n\t\t\ttimer += gameTime.ElapsedGameTime;\n\t\t\tif (timer.TotalMilliseconds > Interval)\n\t\t\t{\n\t\t\t\ttimer = TimeSpan.Zero;\n\t\t\t\tfloat x = rnd.Next(24,1000);\n\t\t\t\tExplosions.Add(new explosion(new Vector2(x, rnd.Next(50,700))));\n\t\t\t\tsExplosion.Play(1f, 1f, (x / 512f) -1);\n\t\t\t}\n\t\t\t*/\n\n\t\t\tfloat pan = 0;\n\t\t\tif (Explosions[0].Position.X > 1024 || Explosions[0].Position.X < 0)\n\t\t\t{\n\t\t\t\tmove = -move;\n\t\t\t\tpan = MathHelper.Clamp((Explosions[0].Position.X / 512f) - 1, -1, 1);\n\t\t\t\teExplosion.Pan = pan;\n\n\t\t\t\teExplosion.Play();\n\t\t\t}\n\t\t\tExplosions[0].Position.X += move;\n\t\t\tpan = MathHelper.Clamp((Explosions[0].Position.X / 512f) - 1, -1, 1);\n\t\t\teExplosion.Pan = pan;\n\t\t\t//Console.WriteLine (pan);\n\n\t\t\t//Check for exit\n\t\t\tKeyboardState state = new KeyboardState();\n\t\t\tstate = Keyboard.GetState();\n\t\t\tif (state.IsKeyDown(Keys.Escape) || state.IsKeyDown(Keys.Space) || state.IsKeyDown(Keys.Enter))\n\t\t\t\tthis.Exit();\n\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tGraphicsDevice.Clear(Color.Black);\n\t\t\tbase.Draw(gameTime);\n\t\t\tspriteBatch.Begin();\n\t\t\t//Draw explosions\n\t\t\tforeach (explosion e in Explosions)\n\t\t\t\tspriteBatch.Draw(tExplosion, e.Position, null, Color.White, 0, Vector2.Zero, e.Size, SpriteEffects.None, 1);\n\t\t\tspriteBatch.End();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.SoundTest</string>\n\t<key>CFBundleName</key>\n\t<string>SoundTest</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.6</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1060</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10D573</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">762</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.29</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">460.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string key=\"NS.object.0\">762</string>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.EditedObjectIDs\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSCustomObject\" id=\"1001\">\n\t\t\t\t<string key=\"NSClassName\">NSObject</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1003\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1004\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\" />\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\" />\n\t\t\t\t\t\t<nil key=\"parent\" />\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1004\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>-3.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\" />\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\" />\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\" />\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\" />\n\t\t\t<int key=\"maxID\">0</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\" />\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\" />\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<nil key=\"IBDocument.LastKnownRelativeProjectPath\" />\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/Program.cs",
    "content": "#if  WINDOWSDX\nusing System;\n\nnamespace SoundTest\n{\n\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        static void Main(string[] args)\n        {\n\t\t\tusing (Game1 game = new Game1())\n            {\n                game.Run();\n            }\n        }\n    }\n}\n#elif MACOS\nusing MonoMac.AppKit;\nusing MonoMac.Foundation;\nusing MonoMac.CoreGraphics;\nusing System.Runtime.InteropServices;\n \nnamespace SoundTest\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            NSApplication.Init();\n \n            using (var p = new NSAutoreleasePool())\n            {\n                NSApplication.SharedApplication.Delegate = new AppDelegate();\n                NSApplication.Main(args);\n            }\n        }\n    }\n \n    class AppDelegate : NSApplicationDelegate\n    {\n\t\tGame1 game;\n \n        public override void FinishedLaunching(MonoMac.Foundation.NSObject notification)\n        {\n            game = new Game1();\n            game.Run();\n        }\n \n        public override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender)\n        {\n            return true;\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/SoundTest2_MacOs.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{79A32C2C-0F38-4ADE-88D1-F8502C520570}</ProjectGuid>\n    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>SoundTest2_MacOs</RootNamespace>\n    <AssemblyName>SoundTest2_MacOs</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG; MACOS</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"MonoMac\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n    <None Include=\"Content\\DepositingIntoVat_Loop.wav\" />\n    <None Include=\"Content\\FillingHoneyPot_Loop.xnb\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Mono\\MonoMac\\v0.0\\Mono.MonoMac.targets\" />\n  <ItemGroup>\n    <Compile Include=\"Game1.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <InterfaceDefinition Include=\"MainMenu.xib\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\Explosion.xnb\" />\n    <Content Include=\"Content\\ExplosionSound.xnb\" />\n    <Content Include=\"Content\\DepositingIntoVat_Loop.xnb\" />\n    <Content Include=\"Content\\laser1.wav\" />\n    <Content Include=\"Content\\FillingHoneyPot_Loop.wav\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\">\n      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>\n      <Name>MonoGame.Framework.MacOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Interactive/MacOS/TestDataSetAndGet/Game1.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// Game.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace TestDataSetAndGet\n{\n    /// <summary>\n    /// This is the main type for your game\n    /// </summary>\n    public class PerPixelCollisionGame : Microsoft.Xna.Framework.Game\n    {\n        GraphicsDeviceManager graphics;\n\n        // The images we will draw\n        Texture2D personTexture;\n        Texture2D blockTexture;\n\t\t\n\t\tTexture2D characterTexture;\n\n        // The color data for the images; used for per pixel collision\n        Color[] personTextureData;\n        Color[] blockTextureData;\n\t\tColor[] characterTextureData;\n\n        // The images will be drawn with this SpriteBatch\n        SpriteBatch spriteBatch;\n\n        // Person \n        Vector2 personPosition;\n        const int PersonMoveSpeed = 5;\n\n        // Blocks\n        List<Vector2> blockPositions = new List<Vector2>();\n        float BlockSpawnProbability = 0.01f;\n        const int BlockFallSpeed = 2;\n\n        Random random = new Random();\n\n        // For when a collision is detected\n        bool personHit = false;\n\n        // The sub-rectangle of the drawable area which should be visible on all TVs\n        Rectangle safeBounds;\n        // Percentage of the screen on every side is the safe area\n        const float SafeAreaPortion = 0.05f;\n\n\n        public PerPixelCollisionGame()\n        {\n            graphics = new GraphicsDeviceManager(this);\n\t\t\tgraphics.SynchronizeWithVerticalRetrace = false;\n            Content.RootDirectory = \"Content\";\n        }\n\n\n        /// <summary>\n        /// Allows the game to perform any initialization it needs to before starting to\n        /// run. This is where it can query for any required services and load any\n        /// non-graphic related content.  Calling base.Initialize will enumerate through\n        /// any components and initialize them as well.\n        /// </summary>\n        protected override void Initialize()\n        {\n            base.Initialize();\n\n            // Calculate safe bounds based on current resolution\n            Viewport viewport = graphics.GraphicsDevice.Viewport;\n            safeBounds = new Rectangle(\n                (int)(viewport.Width * SafeAreaPortion),\n                (int)(viewport.Height * SafeAreaPortion),\n                (int)(viewport.Width * (1 - 2 * SafeAreaPortion)),\n                (int)(viewport.Height * (1 - 2 * SafeAreaPortion)));\n            // Start the player in the center along the bottom of the screen\n            personPosition.X = (safeBounds.Width - personTexture.Width) / 2;\n            personPosition.Y = safeBounds.Height - personTexture.Height;\n        }\n\n\n        /// <summary>\n        /// Load your graphics content.\n        /// </summary>\n        protected override void LoadContent()\n        {\n            // Load textures\n            blockTexture = Content.Load<Texture2D>(\"Block\");\n            personTexture = Content.Load<Texture2D>(\"Character\");\n            //personTexture = Content.Load<Texture2D>(\"Warrior3Active\");\n\t\t\tcharacterTexture = new RenderTarget2D(GraphicsDevice, personTexture.Width, personTexture.Height);\n            // Extract collision data\n            blockTextureData =\n                new Color[blockTexture.Width * blockTexture.Height];\n            blockTexture.GetData(blockTextureData);\n            personTextureData =\n                new Color[personTexture.Width * personTexture.Height];\n            personTexture.GetData(personTextureData);\n\t\t\tcharacterTexture.SetData(personTextureData);\n            characterTextureData =\n                new Color[characterTexture.Width * characterTexture.Height];\n\t\t\tcharacterTexture.GetData(characterTextureData);\n\t\t//personTexture.SetData(characterTextureData);\n            // Create a sprite batch to draw those textures\n            spriteBatch = new SpriteBatch(graphics.GraphicsDevice);\n        }\n\n\n        /// <summary>\n        /// Allows the game to run logic such as updating the world,\n        /// checking for collisions, gathering input and playing audio.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Update(GameTime gameTime)\n        {\n            // Get input\n            KeyboardState keyboard = Keyboard.GetState();\n            GamePadState gamePad = GamePad.GetState(PlayerIndex.One);\n\n            // Allows the game to exit\n            if (gamePad.Buttons.Back == ButtonState.Pressed ||\n                keyboard.IsKeyDown(Keys.Escape))\n            {\n                this.Exit();\n            }\n\n            // Move the player left and right with arrow keys or d-pad\n            if (keyboard.IsKeyDown(Keys.Left) ||\n                gamePad.DPad.Left == ButtonState.Pressed)\n            {\n                personPosition.X -= PersonMoveSpeed;\n            }\n            if (keyboard.IsKeyDown(Keys.Right) ||\n                gamePad.DPad.Right == ButtonState.Pressed)\n            {\n                personPosition.X += PersonMoveSpeed;\n            }\n\n            // Prevent the person from moving off of the screen\n            personPosition.X = MathHelper.Clamp(personPosition.X,\n                safeBounds.Left, safeBounds.Right - personTexture.Width);\n\n            // Spawn new falling blocks\n            if (random.NextDouble() < BlockSpawnProbability)\n            {\n                float x = (float)random.NextDouble() *\n                    (Window.ClientBounds.Width - blockTexture.Width);\n                blockPositions.Add(new Vector2(x, -blockTexture.Height));\n            }\n\n            // Get the bounding rectangle of the person\n            Rectangle personRectangle =\n                new Rectangle((int)personPosition.X, (int)personPosition.Y,\n                personTexture.Width, personTexture.Height);\n\n            // Update each block\n            personHit = false;\n            for (int i = 0; i < blockPositions.Count; i++)\n            {\n                // Animate this block falling\n                blockPositions[i] =\n                    new Vector2(blockPositions[i].X,\n                                blockPositions[i].Y + BlockFallSpeed);\n\n                // Get the bounding rectangle of this block\n                Rectangle blockRectangle =\n                    new Rectangle((int)blockPositions[i].X, (int)blockPositions[i].Y,\n                    blockTexture.Width, blockTexture.Height);\n\n                // Check collision with person\n                if (IntersectPixels(personRectangle, personTextureData,\n                                    blockRectangle, blockTextureData))\n                {\n                    personHit = true;\n                }\n\n                // Remove this block if it have fallen off the screen\n                if (blockPositions[i].Y > Window.ClientBounds.Height)\n                {\n                    blockPositions.RemoveAt(i);\n\n                    // When removing a block, the next block will have the same index\n                    // as the current block. Decrement i to prevent skipping a block.\n                    i--;\n                }\n            }\n\n            base.Update(gameTime);\n        }\n\n        /// <summary>\n        /// This is called when the game should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">Provides a snapshot of timing values.</param>\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice device = graphics.GraphicsDevice;\n\n            // Change the background to red when the person was hit by a block\n            if (personHit)\n            {\n                device.Clear(Color.Red);\n            }\n            else\n            {\n                device.Clear(Color.CornflowerBlue);\n            }\n\n            spriteBatch.Begin();\n\n            // Draw person\n            spriteBatch.Draw(personTexture, personPosition, Color.White);\n\t\t\tVector2 characterPosition = personPosition;\n\t\t\tcharacterPosition.X += personTexture.Width;\n\t\t\tspriteBatch.Draw(characterTexture, characterPosition, Color.White);\n\t\t\t\n            // Draw blocks\n            foreach (Vector2 blockPosition in blockPositions)\n                spriteBatch.Draw(blockTexture, blockPosition, Color.White);\n\n            spriteBatch.End();\n\n\n            base.Draw(gameTime);\n        }\n\n\n        /// <summary>\n        /// Determines if there is overlap of the non-transparent pixels\n        /// between two sprites.\n        /// </summary>\n        /// <param name=\"rectangleA\">Bounding rectangle of the first sprite</param>\n        /// <param name=\"dataA\">Pixel data of the first sprite</param>\n        /// <param name=\"rectangleB\">Bouding rectangle of the second sprite</param>\n        /// <param name=\"dataB\">Pixel data of the second sprite</param>\n        /// <returns>True if non-transparent pixels overlap; false otherwise</returns>\n        static bool IntersectPixels(Rectangle rectangleA, Color[] dataA,\n                                    Rectangle rectangleB, Color[] dataB)\n        {\n            // Find the bounds of the rectangle intersection\n            int top = Math.Max(rectangleA.Top, rectangleB.Top);\n            int bottom = Math.Min(rectangleA.Bottom, rectangleB.Bottom);\n            int left = Math.Max(rectangleA.Left, rectangleB.Left);\n            int right = Math.Min(rectangleA.Right, rectangleB.Right);\n\n            // Check every point within the intersection bounds\n            for (int y = top; y < bottom; y++)\n            {\n                for (int x = left; x < right; x++)\n                {\n                    // Get the color of both pixels at this point\n                    Color colorA = dataA[(x - rectangleA.Left) +\n                                         (y - rectangleA.Top) * rectangleA.Width];\n                    Color colorB = dataB[(x - rectangleB.Left) +\n                                         (y - rectangleB.Top) * rectangleB.Width];\n\n                    // If both pixels are not completely transparent,\n                    if (colorA.A != 0 && colorB.A != 0)\n                    {\n                        // then an intersection has been found\n                        return true;\n                    }\n                }\n            }\n\n            // No intersection found\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/TestDataSetAndGet/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.TestDataSetAndGet</string>\n\t<key>CFBundleName</key>\n\t<string>TestDataSetAndGet</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.6</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/TestDataSetAndGet/Program.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// Program.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\nusing System;\nusing MonoMac.Foundation;\nusing MonoMac.AppKit;\nusing MonoMac.ObjCRuntime;\n\nnamespace TestDataSetAndGet\n{\n\n\tstatic class Program\n\t{\n\t\t/// <summary>\n\t\t/// The main entry point for the application.\n\t\t/// </summary>\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\tNSApplication.Init();\n\n\t\t\tusing (var p = new NSAutoreleasePool())\n\t\t\t{\n\t\t\t\tNSApplication.SharedApplication.Delegate = new AppDelegate();\n\t\t\t\tNSApplication.Main(args);\n\t\t\t}\n\t\t}\n\t}\n\n\tclass AppDelegate : NSApplicationDelegate\n\t{\n\t\tPerPixelCollisionGame game;\n\t\tpublic override void FinishedLaunching(MonoMac.Foundation.NSObject notification)\n\t\t{\n\t\t\tgame = new PerPixelCollisionGame();\n\t\t\tgame.Run();\n\t\t}\n\n\t\tpublic override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t}\n}"
  },
  {
    "path": "Tests/Interactive/MacOS/TestDataSetAndGet/TestDataSetAndGet.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{98CB640D-B8C4-496F-9978-F2571268BD70}</ProjectGuid>\n    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>TestDataSetAndGet</RootNamespace>\n    <AssemblyName>TestDataSetAndGet</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"MonoMac\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n    <None Include=\"Content\\Block.bmp\" />\n    <None Include=\"Content\\Warrior3Active.png\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Mono\\MonoMac\\v0.0\\Mono.MonoMac.targets\" />\n  <ItemGroup>\n    <Folder Include=\"Content\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\ThirdParty\\Lidgren.Network\\Lidgren.Network.MacOS.csproj\">\n      <Project>{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}</Project>\n      <Name>Lidgren.Network.MacOS</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\">\n      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>\n      <Name>MonoGame.Framework.MacOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Game1.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\Block.xnb\" />\n    <Content Include=\"Content\\Character.png\" />\n    <Content Include=\"Content\\Person.bmp\" />\n    <Content Include=\"Content\\Person.xnb\" />\n    <Content Include=\"Content\\Warrior3Active.xnb\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/TextureScaleColorTest/Game1.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Media;\n\n\n\n\nnamespace MonoTest\n{\n\tpublic class Game1 : Microsoft.Xna.Framework.Game\n\t{\n\t\tstatic GraphicsDeviceManager graphics;\n\t\tSpriteBatch spriteBatch;\n\n\t\tpublic static Texture2D BlankTexture;\n\t\tpublic static SpriteFont FontCalibri14;\n\n\t\tpublic Game1()\n\t\t{\n\t\t\tgraphics = new GraphicsDeviceManager(this);\n\t\t\tContent.RootDirectory = \"Content\";\n\t\t\tgraphics.PreferredBackBufferWidth =  640;;\n\t\t\tgraphics.PreferredBackBufferHeight = 480;\n\t\t\tgraphics.IsFullScreen = false;\n\t\t}\n\n\t\tprotected override void Initialize()\n\t\t{\n\n\t\t\tbase.Initialize();\n\n\t\t}\n\n\t\t/// <summary>\n\t\t/// LoadContent will be called once per game and is the place to load\n\t\t/// all of your content.\n\t\t/// </summary>\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tspriteBatch = new SpriteBatch(GraphicsDevice);\n\n\t\t\tFontCalibri14 = Content.Load<SpriteFont>(\"FontCalibri14\");\n\n\t\t\tBlankTexture = Content.Load<Texture2D>(\"Blank\");\n\n//\t\t\tBlankTexture = new Texture2D(GraphicsDevice,1,1);\n//\t\t\tBlankTexture.SetData(new Color[] {Color.White});\n\t\t}\n\n\n\t\tprotected override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tGraphicsDevice.Clear(Color.Black);\n\t\t\tbase.Draw(gameTime);\n\t\t\tspriteBatch.Begin();\n\t\t\tspriteBatch.Draw(BlankTexture,\n\t\t\t\tnew Vector2(100,100),\n\t\t\t\tnull,\n\t\t\t\tColor.Green,\n\t\t\t\t0,\n\t\t\t\tVector2.Zero,\n\t\t\t\tnew Vector2(400,240),\n\t\t\t\tSpriteEffects.None,\n\t\t\t\t0);\n            spriteBatch.DrawString(FontCalibri14, \"There should be no transparency\\nnear the corners?\\n\\nThis box should be solid green.\", new Vector2(150,150), Color.Silver, 0, Vector2.Zero, 1, SpriteEffects.None, 1);\n\t\t\tspriteBatch.End();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/MacOS/TextureScaleColorTest/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.MonoTest</string>\n\t<key>CFBundleName</key>\n\t<string>MonoTest</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>10.6</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/TextureScaleColorTest/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1060</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10D573</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">762</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.29</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">460.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string key=\"NS.object.0\">762</string>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.EditedObjectIDs\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSCustomObject\" id=\"1001\">\n\t\t\t\t<string key=\"NSClassName\">NSObject</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1003\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1004\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\" />\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\" />\n\t\t\t\t\t\t<nil key=\"parent\" />\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1004\" />\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\" />\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>-3.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\" />\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\" />\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\" />\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\" />\n\t\t\t<int key=\"maxID\">0</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\" />\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\" />\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<nil key=\"IBDocument.LastKnownRelativeProjectPath\" />\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Tests/Interactive/MacOS/TextureScaleColorTest/Program.cs",
    "content": "using MonoMac.AppKit;\nusing MonoMac.Foundation;\nusing MonoMac.CoreGraphics;\nusing System.Runtime.InteropServices;\n\nnamespace MonoTest\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            NSApplication.Init();\n\n            using (var p = new NSAutoreleasePool())\n            {\n                NSApplication.SharedApplication.Delegate = new AppDelegate();\n                NSApplication.Main(args);\n            }\n        }\n    }\n\n    class AppDelegate : NSApplicationDelegate\n    {\n        Game1 game;\n\n        public override void FinishedLaunching(MonoMac.Foundation.NSObject notification)\n        {\n            game = new Game1();\n            game.Run();\n        }\n\n        public override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender)\n        {\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "Tests/Interactive/MacOS/TextureScaleColorTest/TextureScaleColorTest.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}</ProjectGuid>\n    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>TextureScaleColorTest</RootNamespace>\n    <AssemblyName>TextureScaleColorTest</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"MonoMac\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Mono\\MonoMac\\v0.0\\Mono.MonoMac.targets\" />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\">\n      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>\n      <Name>MonoGame.Framework.MacOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Game1.cs\" />\n    <Compile Include=\"Program.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n  <ItemGroup>\n    <InterfaceDefinition Include=\"MainMenu.xib\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\FontCalibri14.xnb\" />\n    <Content Include=\"Content\\blank.xnb\" />\n    <Content Include=\"Content\\Test_Win.PNG\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Interactive/MonoGame.InteractiveTests.Linux.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MonoGame.Framework.Linux\", \"..\\..\\MonoGame\\MonoGame.Framework\\MonoGame.Framework.Linux.csproj\", \"{35253CE1-C864-4CD3-8249-4D1319748E8F}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Lidgren.Network.Linux\", \"..\\..\\MonoGame\\ThirdParty\\Lidgren.Network\\Lidgren.Network.Linux.csproj\", \"{758CB33D-6EBD-41EA-BB0C-55B1C97A325F}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MouseGetStateAndIsMouseVisibleTester\", \"Linux\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester.csproj\", \"{6BC96721-9A69-4698-BF22-7BDB319FF381}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|x86.Build.0 = Debug|x86\n\t\t{35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|x86.ActiveCfg = Release|x86\n\t\t{35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|x86.Build.0 = Release|x86\n\t\t{6BC96721-9A69-4698-BF22-7BDB319FF381}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{6BC96721-9A69-4698-BF22-7BDB319FF381}.Debug|x86.Build.0 = Debug|x86\n\t\t{6BC96721-9A69-4698-BF22-7BDB319FF381}.Release|x86.ActiveCfg = Release|x86\n\t\t{6BC96721-9A69-4698-BF22-7BDB319FF381}.Release|x86.Build.0 = Release|x86\n\t\t{758CB33D-6EBD-41EA-BB0C-55B1C97A325F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{758CB33D-6EBD-41EA-BB0C-55B1C97A325F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{758CB33D-6EBD-41EA-BB0C-55B1C97A325F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{758CB33D-6EBD-41EA-BB0C-55B1C97A325F}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(MonoDevelopProperties) = preSolution\n\t\tStartupItem = ..\\..\\MonoGame\\MonoGame.Framework\\MonoGame.Framework.Linux.csproj\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Tests/Interactive/MonoGame.InteractiveTests.MacOS.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MouseGetStateAndIsMouseVisibleTester\", \"MacOS\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester\\MouseGetStateAndIsMouseVisibleTester.csproj\", \"{7B2F1E86-1B56-4F78-9265-EA8852442171}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MonoGame.Framework.MacOS\", \"..\\..\\MonoGame.Framework\\MonoGame.Framework.MacOS.csproj\", \"{36C538E6-C32A-4A8D-A39C-566173D7118E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Lidgren.Network.MacOS\", \"..\\..\\ThirdParty\\Lidgren.Network\\Lidgren.Network.MacOS.csproj\", \"{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"GamePadTest\", \"MacOS\\GamePadTest\\GamePadTest.csproj\", \"{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"PrimitivesTest\", \"MacOS\\PrimitivesTest\\PrimitivesTest.csproj\", \"{9704681E-C6DB-4946-9F31-0EF9BE63090A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"TextureScaleColorTest\", \"MacOS\\TextureScaleColorTest\\TextureScaleColorTest.csproj\", \"{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"TestDataSetAndGet\", \"MacOS\\TestDataSetAndGet\\TestDataSetAndGet.csproj\", \"{98CB640D-B8C4-496F-9978-F2571268BD70}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SoundTest_MacOS\", \"MacOS\\SoundTest\\SoundTest_MacOS.csproj\", \"{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SoundTest2_MacOs\", \"MacOS\\SoundTest2\\SoundTest2_MacOs\\SoundTest2_MacOs.csproj\", \"{79A32C2C-0F38-4ADE-88D1-F8502C520570}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"BlockingRun\", \"MacOS\\BlockingRun\\BlockingRun.csproj\", \"{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|x86 = Release|x86\n\t\tDistribution|Any CPU = Distribution|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.ActiveCfg = Distribution|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.Build.0 = Distribution|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|x86.Build.0 = Release|Any CPU\n\t\t{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Distribution|Any CPU.Build.0 = Debug|Any CPU\n\t\t{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Release|x86.Build.0 = Release|Any CPU\n\t\t{79A32C2C-0F38-4ADE-88D1-F8502C520570}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{79A32C2C-0F38-4ADE-88D1-F8502C520570}.Debug|x86.Build.0 = Debug|x86\n\t\t{79A32C2C-0F38-4ADE-88D1-F8502C520570}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{79A32C2C-0F38-4ADE-88D1-F8502C520570}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{79A32C2C-0F38-4ADE-88D1-F8502C520570}.Release|x86.ActiveCfg = Release|x86\n\t\t{79A32C2C-0F38-4ADE-88D1-F8502C520570}.Release|x86.Build.0 = Release|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Debug|x86.Build.0 = Debug|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Release|x86.ActiveCfg = Release|x86\n\t\t{7B2F1E86-1B56-4F78-9265-EA8852442171}.Release|x86.Build.0 = Release|x86\n\t\t{9704681E-C6DB-4946-9F31-0EF9BE63090A}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9704681E-C6DB-4946-9F31-0EF9BE63090A}.Debug|x86.Build.0 = Debug|x86\n\t\t{9704681E-C6DB-4946-9F31-0EF9BE63090A}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{9704681E-C6DB-4946-9F31-0EF9BE63090A}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{9704681E-C6DB-4946-9F31-0EF9BE63090A}.Release|x86.ActiveCfg = Release|x86\n\t\t{9704681E-C6DB-4946-9F31-0EF9BE63090A}.Release|x86.Build.0 = Release|x86\n\t\t{98CB640D-B8C4-496F-9978-F2571268BD70}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{98CB640D-B8C4-496F-9978-F2571268BD70}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{98CB640D-B8C4-496F-9978-F2571268BD70}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{98CB640D-B8C4-496F-9978-F2571268BD70}.Distribution|Any CPU.Build.0 = Debug|Any CPU\n\t\t{98CB640D-B8C4-496F-9978-F2571268BD70}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{98CB640D-B8C4-496F-9978-F2571268BD70}.Release|x86.Build.0 = Release|Any CPU\n\t\t{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Debug|x86.Build.0 = Debug|x86\n\t\t{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Release|x86.ActiveCfg = Release|x86\n\t\t{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Release|x86.Build.0 = Release|x86\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Distribution|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Release|x86.Build.0 = Release|Any CPU\n\t\t{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Debug|x86.Build.0 = Debug|x86\n\t\t{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Release|x86.ActiveCfg = Release|x86\n\t\t{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Release|x86.Build.0 = Release|x86\n\t\t{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Debug|x86.Build.0 = Debug|x86\n\t\t{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Release|x86.ActiveCfg = Release|x86\n\t\t{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Release|x86.Build.0 = Release|x86\n\t\t{2DDBFED4-9955-4F02-9937-B9AE82836329}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{2DDBFED4-9955-4F02-9937-B9AE82836329}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{2DDBFED4-9955-4F02-9937-B9AE82836329}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2DDBFED4-9955-4F02-9937-B9AE82836329}.Distribution|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2DDBFED4-9955-4F02-9937-B9AE82836329}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{2DDBFED4-9955-4F02-9937-B9AE82836329}.Release|x86.Build.0 = Release|Any CPU\n\t\t{2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Debug|x86.Build.0 = Debug|x86\n\t\t{2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Release|x86.ActiveCfg = Release|x86\n\t\t{2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Release|x86.Build.0 = Release|x86\n\t\t{51147863-7B4E-4467-A5FA-986259EB686F}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{51147863-7B4E-4467-A5FA-986259EB686F}.Debug|x86.Build.0 = Debug|x86\n\t\t{51147863-7B4E-4467-A5FA-986259EB686F}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{51147863-7B4E-4467-A5FA-986259EB686F}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{51147863-7B4E-4467-A5FA-986259EB686F}.Release|x86.ActiveCfg = Release|x86\n\t\t{51147863-7B4E-4467-A5FA-986259EB686F}.Release|x86.Build.0 = Release|x86\n\t\t{AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Debug|x86.Build.0 = Debug|x86\n\t\t{AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Release|x86.ActiveCfg = Release|x86\n\t\t{AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Release|x86.Build.0 = Release|x86\n\t\t{CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Distribution|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Release|x86.Build.0 = Release|Any CPU\n\t\t{CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Debug|x86.Build.0 = Debug|x86\n\t\t{CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Distribution|Any CPU.ActiveCfg = Debug|x86\n\t\t{CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Distribution|Any CPU.Build.0 = Debug|x86\n\t\t{CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Release|x86.ActiveCfg = Release|x86\n\t\t{CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Release|x86.Build.0 = Release|x86\n\t\t{ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Distribution|Any CPU.Build.0 = Debug|Any CPU\n\t\t{ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(MonoDevelopProperties) = preSolution\n\t\tStartupItem = MacOS\\TextureScaleColorTest\\TextureScaleColorTest.csproj\n\t\tPolicies = $0\n\t\t$0.TextStylePolicy = $1\n\t\t$1.inheritsSet = null\n\t\t$1.scope = text/x-csharp\n\t\t$0.CSharpFormattingPolicy = $2\n\t\t$2.NamespaceBraceStyle = EndOfLine\n\t\t$2.ClassBraceStyle = EndOfLine\n\t\t$2.InterfaceBraceStyle = EndOfLine\n\t\t$2.StructBraceStyle = EndOfLine\n\t\t$2.EnumBraceStyle = EndOfLine\n\t\t$2.AfterDelegateDeclarationParameterComma = True\n\t\t$2.BeforeSizeOfParentheses = True\n\t\t$2.BeforeTypeOfParentheses = True\n\t\t$2.SpacesAfterTypecast = True\n\t\t$2.SpacesBeforeArrayDeclarationBrackets = True\n\t\t$2.inheritsSet = Mono\n\t\t$2.inheritsScope = text/x-csharp\n\t\t$2.scope = text/x-csharp\n\t\t$0.TextStylePolicy = $3\n\t\t$3.RemoveTrailingWhitespace = True\n\t\t$3.inheritsSet = Mono\n\t\t$3.inheritsScope = text/plain\n\t\t$3.scope = text/plain\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Tests/Interactive/MonoGame.InteractiveTests.Windows.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SoundTest\", \"Windows\\SoundTest\\SoundTest.csproj\", \"{B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MonoGame.Framework.Windows\", \"..\\..\\MonoGame\\MonoGame.Framework\\MonoGame.Framework.Windows.csproj\", \"{7DE47032-A904-4C29-BD22-2D235E8D91BA}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Lidgren.Network.Windows\", \"..\\..\\MonoGame\\ThirdParty\\Lidgren.Network\\Lidgren.Network.Windows.csproj\", \"{AE483C29-042E-4226-BA52-D247CE7676DA}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SoundTest2\", \"Windows\\SoundTest2\\SoundTest2.csproj\", \"{FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|x86.Build.0 = Debug|x86\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|x86.ActiveCfg = Release|x86\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|x86.Build.0 = Release|x86\n\t\t{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.Build.0 = Release|Any CPU\n\t\t{B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}.Debug|x86.Build.0 = Debug|x86\n\t\t{B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}.Release|x86.ActiveCfg = Release|x86\n\t\t{B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}.Release|x86.Build.0 = Release|x86\n\t\t{FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}.Debug|x86.Build.0 = Debug|x86\n\t\t{FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}.Release|x86.ActiveCfg = Release|x86\n\t\t{FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(MonoDevelopProperties) = preSolution\n\t\tBaseDirectory = Windows\n\t\tStartupItem = Windows\\SoundTest2\\SoundTest2.csproj\n\t\toutputpath = build\\bin\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Tests/Interactive/Windows/Issue1355/Issue1355/Game.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.GamerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Issue1355\n{\n    /// <summary>\n    /// This is the main type for your game\n    /// </summary>\n    public class Game : Microsoft.Xna.Framework.Game\n    {\n        GraphicsDeviceManager Graphics;\n        SpriteBatch SpriteBatch;\n        Texture2D White;\n        SpriteFont Font;\n\n        public Game()\n        {\n            Graphics = new GraphicsDeviceManager(this);\n            Graphics.PreferredBackBufferWidth = 700;\n            Graphics.PreferredBackBufferHeight = 200;\n\n            Content.RootDirectory = \"Content\";\n\n#if MONOGAME\n            Window.Title = \"Issue1355 (MonoGame)\";\n#else\n            Window.Title = \"Issue1355 (XNA)\";\n#endif\n        }\n\n        protected override void LoadContent()\n        {\n            SpriteBatch = new SpriteBatch(GraphicsDevice);\n\n            White = new Texture2D(GraphicsDevice, 1, 1);\n            White.SetData(new[] { Color.White });\n\n            Font = Content.Load<SpriteFont>(\"DutchAndHarley\");\n        }\n\n        protected override void Draw(GameTime gameTime)\n        {\n            GraphicsDevice.Clear(Color.Black);\n\n            const string testText = \"{Dutch & Harley}\";\n\n            SpriteBatch.Begin();\n\n            var textSize = Font.MeasureString(testText);\n            var textPosition = new Vector2(32, 32);\n\n            SpriteBatch.Draw(White, textPosition, null, Color.Red * 0.25f, 0, Vector2.Zero, textSize, SpriteEffects.None, 0);\n\n            SpriteBatch.DrawString(Font, testText, textPosition, Color.White);\n\n            SpriteBatch.End();\n\n            base.Draw(gameTime);\n        }\n\n        public static void Main()\n        {\n            new Game().Run();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Interactive/Windows/Issue1355/Issue1355/Issue1355.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <ProjectGuid>{0650BBB1-A078-4536-850B-182BC3A78B81}</ProjectGuid>\n    <ProjectTypeGuids>{6D335F3A-9D43-41b4-9D22-F6F17C4BE596};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Issue1355</RootNamespace>\n    <AssemblyName>Issue1355</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Client</TargetFrameworkProfile>\n    <XnaFrameworkVersion>v4.0</XnaFrameworkVersion>\n    <XnaPlatform>Windows</XnaPlatform>\n    <XnaProfile>HiDef</XnaProfile>\n    <XnaCrossPlatformGroupID>5ddec1ed-3b22-4d4f-afee-dc1a63970f5d</XnaCrossPlatformGroupID>\n    <XnaOutputType>Game</XnaOutputType>\n    <ApplicationIcon>\n    </ApplicationIcon>\n    <Thumbnail>\n    </Thumbnail>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\x86\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <NoStdLib>true</NoStdLib>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <PlatformTarget>x86</PlatformTarget>\n    <XnaCompressContent>false</XnaCompressContent>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\x86\\Release</OutputPath>\n    <DefineConstants>TRACE;WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <NoStdLib>true</NoStdLib>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <PlatformTarget>x86</PlatformTarget>\n    <XnaCompressContent>true</XnaCompressContent>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.GamerServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Xact, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Video, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Avatar, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Storage, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"mscorlib\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System.Xml\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System.Core\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System.Net\">\n      <Private>False</Private>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Issue1355Content\\Issue1355Content.contentproj\">\n      <Name>Issue1355Content</Name>\n      <XnaReferenceType>Content</XnaReferenceType>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\".NETFramework,Version=v4.0,Profile=Client\">\n      <Visible>False</Visible>\n      <ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\n      <Visible>False</Visible>\n      <ProductName>Windows Installer 3.1</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Xna.Framework.4.0\">\n      <Visible>False</Visible>\n      <ProductName>Microsoft XNA Framework Redistributable 4.0</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Properties\\\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\XNA Game Studio\\Microsoft.Xna.GameStudio.targets\" />\n  <!--\n      To modify your build process, add your task inside one of the targets below and uncomment it. \n      Other similar extension points exist, see Microsoft.Common.targets.\n      <Target Name=\"BeforeBuild\">\n      </Target>\n      <Target Name=\"AfterBuild\">\n      </Target>\n    -->\n</Project>"
  },
  {
    "path": "Tests/Interactive/Windows/Issue1355/Issue1355/Issue1355_MonoGame.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <ProjectGuid>{0650BBB1-A078-4536-850B-182BC3A78B82}</ProjectGuid>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Issue1355</RootNamespace>\n    <AssemblyName>Issue1355_MonoGame</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <Thumbnail>\n    </Thumbnail>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\x86\\Debug</OutputPath>\n    <DefineConstants>TRACE;DEBUG;WINDOWSDX;MONOGAME</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <NoStdLib>true</NoStdLib>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <PlatformTarget>x86</PlatformTarget>\n    <XnaCompressContent>false</XnaCompressContent>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\x86\\Release</OutputPath>\n    <DefineConstants>TRACE;WINDOWSDX;MONOGAME</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <NoStdLib>true</NoStdLib>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <PlatformTarget>x86</PlatformTarget>\n    <XnaCompressContent>true</XnaCompressContent>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"mscorlib\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System.Core\">\n      <Private>False</Private>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Game.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.Windows.csproj\">\n      <Project>{7DE47032-A904-4C29-BD22-2D235E8D91BA}</Project>\n      <Name>MonoGame.Framework.Windows</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Properties\\\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Tests/Interactive/Windows/Issue1355/Issue1355.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Issue1355\", \"Issue1355\\Issue1355.csproj\", \"{0650BBB1-A078-4536-850B-182BC3A78B81}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Issue1355Content\", \"Issue1355Content\\Issue1355Content.contentproj\", \"{2C0E7626-F641-4C10-9682-28CDC9F6EA70}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Issue1355_MonoGame\", \"Issue1355\\Issue1355_MonoGame.csproj\", \"{0650BBB1-A078-4536-850B-182BC3A78B82}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MonoGame.Framework.Windows\", \"..\\..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.Windows.csproj\", \"{7DE47032-A904-4C29-BD22-2D235E8D91BA}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{0650BBB1-A078-4536-850B-182BC3A78B81}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{0650BBB1-A078-4536-850B-182BC3A78B81}.Debug|x86.Build.0 = Debug|x86\n\t\t{0650BBB1-A078-4536-850B-182BC3A78B81}.Release|x86.ActiveCfg = Release|x86\n\t\t{0650BBB1-A078-4536-850B-182BC3A78B81}.Release|x86.Build.0 = Release|x86\n\t\t{2C0E7626-F641-4C10-9682-28CDC9F6EA70}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{2C0E7626-F641-4C10-9682-28CDC9F6EA70}.Release|x86.ActiveCfg = Release|x86\n\t\t{0650BBB1-A078-4536-850B-182BC3A78B82}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{0650BBB1-A078-4536-850B-182BC3A78B82}.Debug|x86.Build.0 = Debug|x86\n\t\t{0650BBB1-A078-4536-850B-182BC3A78B82}.Release|x86.ActiveCfg = Release|x86\n\t\t{0650BBB1-A078-4536-850B-182BC3A78B82}.Release|x86.Build.0 = Release|x86\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Tests/Interactive/Windows/Issue1355/Issue1355Content/DutchAndHarley.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Dutch &amp; Harley</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>48</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>0</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#254;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tests/Interactive/Windows/Issue1355/Issue1355Content/Issue1355Content.contentproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <ProjectGuid>{2C0E7626-F641-4C10-9682-28CDC9F6EA70}</ProjectGuid>\n    <ProjectTypeGuids>{96E2B04D-8817-42c6-938A-82C39BA4D311};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <XnaFrameworkVersion>v4.0</XnaFrameworkVersion>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)</OutputPath>\n    <ContentRootDirectory>Content</ContentRootDirectory>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RootNamespace>Issue1355Content</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.EffectImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.FBXImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.TextureImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.XImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.AudioImporters, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL\">\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.VideoImporters, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL\">\n      <Private>False</Private>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"DutchAndHarley.spritefont\">\n      <Name>DutchAndHarley</Name>\n      <Importer>FontDescriptionImporter</Importer>\n      <Processor>FontDescriptionProcessor</Processor>\n    </Compile>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\XNA Game Studio\\$(XnaFrameworkVersion)\\Microsoft.Xna.GameStudio.ContentPipeline.targets\" />\n  <!--  To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Tests/Interactive/Windows/SoundTest/SoundTest.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>9.0.21022</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>SoundTest</RootNamespace>\n    <AssemblyName>SoundTest</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG; WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame\\MonoGame.Framework\\MonoGame.Framework.Windows.csproj\">\n      <Project>{7DE47032-A904-4C29-BD22-2D235E8D91BA}</Project>\n      <Name>MonoGame.Framework.Windows</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"OpenTK\">\n      <HintPath>..\\..\\..\\..\\OpenTK1.0\\Binaries\\OpenTK\\Release\\OpenTK.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Game1.cs\">\n      <Link>Game1.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Program.cs\">\n      <Link>Program.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Content\\DepositingIntoVat_Loop.wav\">\n      <Link>Content\\DepositingIntoVat_Loop.wav</Link>\n    </None>\n    <None Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Content\\DepositingIntoVat_Loop.xnb\">\n      <Link>Content\\DepositingIntoVat_Loop.xnb</Link>\n    </None>\n    <None Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Content\\FillingHoneyPot_Loop.wav\">\n      <Link>Content\\FillingHoneyPot_Loop.wav</Link>\n    </None>\n    <None Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Content\\FillingHoneyPot_Loop.xnb\">\n      <Link>Content\\FillingHoneyPot_Loop.xnb</Link>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Content\\ExplosionSound.xnb\">\n      <Link>Content\\ExplosionSound.xnb</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Content\\laser1.wav\">\n      <Link>Content\\laser1.wav</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\MacOS\\SoundTest\\SoundTest\\Content\\Explosion.xnb\">\n      <Link>Content\\Explosion.xnb</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Interactive/Windows/SoundTest2/SoundTest2.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>SoundTest2</RootNamespace>\n    <AssemblyName>SoundTest2</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG; WINDOWSDX</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>x86</PlatformTarget>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <ItemGroup>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame\\MonoGame.Framework\\MonoGame.Framework.Windows.csproj\">\n      <Project>{7DE47032-A904-4C29-BD22-2D235E8D91BA}</Project>\n      <Name>MonoGame.Framework.Windows</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Game1.cs\">\n      <Link>Game1.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Program.cs\">\n      <Link>Program.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Content\\DepositingIntoVat_Loop.wav\">\n      <Link>Content\\DepositingIntoVat_Loop.wav</Link>\n    </None>\n    <None Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Content\\DepositingIntoVat_Loop.xnb\">\n      <Link>Content\\DepositingIntoVat_Loop.xnb</Link>\n    </None>\n    <None Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Content\\ExplosionSound.xnb\">\n      <Link>Content\\ExplosionSound.xnb</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Content\\FillingHoneyPot_Loop.wav\">\n      <Link>Content\\FillingHoneyPot_Loop.wav</Link>\n    </None>\n    <None Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Content\\FillingHoneyPot_Loop.xnb\">\n      <Link>Content\\FillingHoneyPot_Loop.xnb</Link>\n    </None>\n    <None Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Content\\laser1.wav\">\n      <Link>Content\\laser1.wav</Link>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\..\\MacOS\\SoundTest2\\SoundTest2_MacOs\\Content\\Explosion.xnb\">\n      <Link>Content\\Explosion.xnb</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Interactive/iOS/AppDelegate.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing MonoTouch.Foundation;\nusing MonoTouch.UIKit;\n\nnamespace MonoGame.InteractiveTests.iOS\n{\n\t[Register(\"AppDelegate\")]\n\tpublic partial class AppDelegate : UIApplicationDelegate\n\t{\n\n\t\tUIWindow _window;\n\t\tUINavigationController _navigationController;\n\t\tRootViewController _rootViewController;\n\n\t\tpublic override bool FinishedLaunching(UIApplication app, NSDictionary options)\n\t\t{\n\t\t\t_window = new UIWindow(UIScreen.MainScreen.Bounds);\n\n\t\t\t_rootViewController = new RootViewController();\n\t\t\t_navigationController = new UINavigationController(_rootViewController);\n\t\t\t_window.RootViewController = _navigationController;\n\n\t\t\t_window.MakeKeyAndVisible();\n\t\t\treturn true;\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/Categories.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace MonoGame.InteractiveTests {\n\tstatic class Categories {\n\t\tpublic const string Default = General;\n\n\t\tpublic const string General = \"General\";\n\t\tpublic const string GamerServices = \"Gamer Services\";\n\t\tpublic const string Meta = \"Meta Tests\";\n\t\tpublic const string Touch = \"Touch\";\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/Guide/GuideTestGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.GamerServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nusing MonoGame.InteractiveTests.TestUI;\nusing System.Drawing;\n\nnamespace MonoGame.InteractiveTests\n{\n\t[InteractiveTest(\"Guide\", Categories.GamerServices)]\n\tpublic class GuideTestGame : Game\n\t{\n\t\tpublic GuideTestGame()\n\t\t{\n\t\t\tvar graphics = new GraphicsDeviceManager(this);\n\t\t\tgraphics.SupportedOrientations =\n\t\t\t\tDisplayOrientation.Portrait |\n\t\t\t\tDisplayOrientation.LandscapeLeft |\n\t\t\t\tDisplayOrientation.LandscapeRight;\n\n\t\t\tComponents.Add(new GamerServicesComponent(this));\n\n\t\t\tContent.RootDirectory = \"Content\";\n\t\t}\n\n\t\tprotected override void Initialize()\n\t\t{\n\t\t\tbase.Initialize();\n\t\t\tTouchPanel.EnabledGestures = GestureType.DoubleTap | GestureType.Tap;\n\t\t}\n\n\t\tprivate SpriteFont _font;\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tbase.LoadContent();\n\n\t\t\t_font = Content.Load<SpriteFont>(@\"Fonts\\Default\");\n\t\t\tInitializeGui();\n\t\t}\n\n\t\tprivate Universe _universe;\n\t\tprivate Label _labelEndShowKeyboardInput;\n\t\tprivate Label _labelShowKeyboardInputCallback;\n\t\tprivate void InitializeGui()\n\t\t{\n\t\t\t_universe = new Universe(Content)\n\t\t\t{\n\t\t\t\tAutoHandleInput = true\n\t\t\t};\n\t\t\tComponents.Add(new UniverseComponent(this, _universe));\n\n\t\t\tvar exitButton = new Button\n\t\t\t{\n\t\t\t\tBackgroundColor = Color.Black,\n\t\t\t\tContent = new Label\n\t\t\t\t{\n\t\t\t\t\tFont = _font,\n\t\t\t\t\tText = \"Exit\",\n\t\t\t\t\tTextColor = Color.White\n\t\t\t\t},\n\t\t\t\tLocation = PointF.Empty\n\t\t\t};\n\n\t\t\texitButton.Content.SizeToFit();\n\t\t\texitButton.SizeToFit();\n\t\t\texitButton.Tapped += (sender, e) =>\n\t\t\t{\n\t\t\t\tExit();\n\t\t\t};\n\n\t\t\t_labelEndShowKeyboardInput = new Label\n\t\t\t{\n\t\t\t\tFrame = new RectangleF(20, 60, 320, 20),\n\t\t\t\tFont = _font,\n\t\t\t\tTextColor = Color.White\n\t\t\t};\n\n\t\t\t_labelShowKeyboardInputCallback = new Label\n\t\t\t{\n\t\t\t\tFrame = new RectangleF(\n\t\t\t\t\t_labelEndShowKeyboardInput.Frame.Left,\n\t\t\t\t\t_labelEndShowKeyboardInput.Frame.Bottom + 10,\n\t\t\t\t\t_labelEndShowKeyboardInput.Frame.Width,\n\t\t\t\t\t_labelEndShowKeyboardInput.Frame.Height),\n\t\t\t\tFont = _font,\n\t\t\t\tTextColor = Color.White\n\t\t\t};\n\n\t\t\tvar buttonShowKeyboardInput = new Button\n\t\t\t{\n\t\t\t\tBackgroundColor = Color.Lavender,\n\t\t\t\tContent = new Label\n\t\t\t\t{\n\t\t\t\t\tFont = _font,\n\t\t\t\t\tText = \"Show Keyboard Input\",\n\t\t\t\t\tTextColor = Color.Black\n\t\t\t\t},\n\t\t\t\tLocation = new PointF(20, 200)\n\t\t\t};\n\n\t\t\tbuttonShowKeyboardInput.Content.SizeToFit();\n\t\t\tbuttonShowKeyboardInput.SizeToFit();\n\t\t\tbuttonShowKeyboardInput.Tapped += (sender, e) =>\n\t\t\t{\n\t\t\t\tTestShowKeyboardInput(\n\t\t\t\t\t\"Some normal title\",\n\t\t\t\t\t\"And a perfectly ordinary description\",\n\t\t\t\t\t\"the default\");\n\t\t\t};\n\n\t\t\tvar buttonShowKeyboardInputLong = new Button\n\t\t\t{\n\t\t\t\tBackgroundColor = Color.Lavender,\n\t\t\t\tContent = new Label\n\t\t\t\t{\n\t\t\t\t\tFont = _font,\n\t\t\t\t\tText = \"Show Keyboard Input (long)\",\n\t\t\t\t\tTextColor = Color.Black\n\t\t\t\t},\n\t\t\t\tLocation = new PointF(\n\t\t\t\t\tbuttonShowKeyboardInput.Frame.Left,\n\t\t\t\t\tbuttonShowKeyboardInput.Frame.Bottom + 10)\n\t\t\t};\n\n\t\t\tbuttonShowKeyboardInputLong.Content.SizeToFit();\n\t\t\tbuttonShowKeyboardInputLong.SizeToFit();\n\t\t\tbuttonShowKeyboardInputLong.Tapped += (sender, e) =>\n\t\t\t{\n\t\t\t\tTestShowKeyboardInput(\n\t\t\t\t\t\"This is the title that never ends, yes it goes on and on my friends.  One \" +\n\t\t\t\t\t\"day some people started writing it, etc\",\n\t\t\t\t\t\"And here is a super-duper description that rambles on a bit about, you \" +\n\t\t\t\t\t\"know, whatever.  And then finally ends over here at about this point.\",\n\t\t\t\t\t\"surprisingly terse default\");\n\t\t\t};\n\n\t\t\t_universe.Add(exitButton);\n\t\t\t_universe.Add(_labelEndShowKeyboardInput);\n\t\t\t_universe.Add(_labelShowKeyboardInputCallback);\n\t\t\t_universe.Add(buttonShowKeyboardInput);\n\t\t\t_universe.Add(buttonShowKeyboardInputLong);\n\t\t}\n\n\t\tprivate void TestShowKeyboardInput(string title, string description, string defaultText)\n\t\t{\n\t\t\tvar result = Guide.BeginShowKeyboardInput(\n\t\t\t\tPlayerIndex.One,\n\t\t\t\ttitle,\n\t\t\t\tdescription,\n\t\t\t\tdefaultText,\n\t\t\t\tGuide_ShowKeyboardInputCallback, null);\n\n\t\t\t_labelEndShowKeyboardInput.Text =\n\t\t\t\t\"EndShow: \" + (Guide.EndShowKeyboardInput(result) ?? \"<null>\");\n\t\t}\n\n\t\tprivate void Guide_ShowKeyboardInputCallback(IAsyncResult result)\n\t\t{\n\t\t\t_labelShowKeyboardInputCallback.Text =\n\t\t\t\t\"CallBack: \" + (Guide.EndShowKeyboardInput(result) ?? \"<null>\");\n\t\t}\n\n\t\tprotected override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tGraphicsDevice.Clear(Color.Indigo);\n\t\t\tbase.Draw(gameTime);\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<integer>1</integer>\n\t\t<integer>2</integer>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/iOS/InteractiveTestAttribute.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace MonoGame.InteractiveTests\n{\n\n\t[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n\tpublic class InteractiveTestAttribute : Attribute\n\t{\n\t\tpublic InteractiveTestAttribute(string name, string category)\n\t\t{\n\t\t\t_name = name;\n\t\t\t_category = category;\n\t\t}\n\n\t\tpublic InteractiveTestAttribute(string name)\n\t\t\t: this(name, null)\n\t\t{\n\t\t}\n\n\t\tpublic InteractiveTestAttribute()\n\t\t\t: this(null, null)\n\t\t{\n\t\t}\n\n\t\tprivate readonly string _name;\n\t\tpublic string Name\n\t\t{\n\t\t\tget { return _name; }\n\t\t}\n\n\t\tprivate readonly string _category;\n\t\tpublic string Category\n\t\t{\n\t\t\tget { return _category; }\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/Main.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing MonoTouch.Foundation;\nusing MonoTouch.UIKit;\n\nnamespace MonoGame.InteractiveTests.iOS\n{\n\tpublic class Application\n\t{\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\tUIApplication.Main(args, null, \"AppDelegate\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/iOS/MonoGame.InteractiveTests.iOS.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">iPhoneSimulator</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{FD07CA6D-A40E-4D8F-9F4D-C90389A97DDE}</ProjectGuid>\n    <ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>MonoGame.InteractiveTests</RootNamespace>\n    <AssemblyName>MonoGameInteractiveTestsiOS</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchDebug>true</MtouchDebug>\n    <MtouchProfiling>true</MtouchProfiling>\n    <MtouchLink>None</MtouchLink>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchLink>None</MtouchLink>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhone' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <MtouchDebug>true</MtouchDebug>\n    <MtouchProfiling>true</MtouchProfiling>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"monotouch\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Main.cs\" />\n    <Compile Include=\"AppDelegate.cs\" />\n    <Compile Include=\"RootViewController.cs\" />\n    <Compile Include=\"InteractiveTestAttribute.cs\" />\n    <Compile Include=\"Guide\\GuideTestGame.cs\" />\n    <Compile Include=\"Categories.cs\" />\n    <Compile Include=\"TestUI\\TestUITestGame.cs\" />\n    <Compile Include=\"TestUI\\Universe.cs\" />\n    <Compile Include=\"TestUI\\View.cs\" />\n    <Compile Include=\"TestUI\\ViewCollection.cs\" />\n    <Compile Include=\"TestUI\\UniverseComponent.cs\" />\n    <Compile Include=\"TestUI\\DrawContext.cs\" />\n    <Compile Include=\"TestUI\\Label.cs\" />\n    <Compile Include=\"TestUI\\PaddingF.cs\" />\n    <Compile Include=\"TestUI\\Button.cs\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <ItemGroup>\n    <Folder Include=\"Guide\\\" />\n    <Folder Include=\"TestUI\\\" />\n    <Folder Include=\"Content\\\" />\n    <Folder Include=\"Content\\Fonts\\\" />\n    <Folder Include=\"Content\\Textures\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\ThirdParty\\Lidgren.Network\\Lidgren.Network.iOS.csproj\">\n      <Project>{734EAA48-F1CA-481A-B391-0285BC0E8B40}</Project>\n      <Name>Lidgren.Network.iOS</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\..\\MonoGame.Framework\\MonoGame.Framework.iOS.csproj\">\n      <Project>{DB8508BB-9849-4CC2-BC0F-8EB5DACB3C47}</Project>\n      <Name>MonoGame.Framework.iOS</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Assets\\MonoGame.Tests.Assets.iOS.csproj\">\n      <Project>{F759DE08-E160-4BB4-9A09-404D5694A4EC}</Project>\n      <Name>MonoGame.Tests.Assets.iOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ProjectExtensions>\n    <MonoDevelop>\n      <Properties>\n        <Policies>\n          <DotNetNamingPolicy DirectoryNamespaceAssociation=\"PrefixedHierarchical\" ResourceNamePolicy=\"FileFormatDefault\" />\n        </Policies>\n      </Properties>\n    </MonoDevelop>\n  </ProjectExtensions>\n  <ItemGroup>\n    <Content Include=\"..\\..\\Assets\\Fonts\\Default.xnb\">\n      <Link>Content\\Fonts\\Default.xnb</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\Assets\\Textures\\white-1.xnb\">\n      <Link>Content\\Textures\\white-1.xnb</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Tests/Interactive/iOS/RootViewController.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Linq;\nusing System.Reflection;\n\nusing MonoTouch.Foundation;\nusing MonoTouch.UIKit;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace MonoGame.InteractiveTests.iOS\n{\n\tpublic class RootViewController : UIViewController\n\t{\n\t\tprivate static bool UserInterfaceIdiomIsPhone\n\t\t{\n\t\t\tget { return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone; }\n\t\t}\n\n\t\tprivate UITableView _tableView;\n\t\tprivate readonly InteractiveTest[] _interactiveTests;\n\n\t\tprivate Game _activeGame;\n\t\tprivate InteractiveTest _activeTest;\n\n\t\tpublic RootViewController()\n\t\t\t: base()\n\t\t{\n\t\t\t_interactiveTests = DiscoverInteractiveTests();\n\t\t\tTitle = \"Interactive Tests\";\n\n\n\n\t\t}\n\n\t\tprivate static InteractiveTest[] DiscoverInteractiveTests()\n\t\t{\n\t\t\tvar assembly = Assembly.GetExecutingAssembly();\n\t\t\tvar tests = new List<InteractiveTest>();\n\t\t\tforeach (var type in assembly.GetTypes())\n\t\t\t{\n\t\t\t\tInteractiveTest test;\n\t\t\t\tif (!InteractiveTest.TryCreateFrom(type, out test))\n\t\t\t\t\tcontinue;\n\n\t\t\t\ttests.Add(test);\n\t\t\t}\n\t\t\treturn tests.ToArray();\n\t\t}\n\n\t\tpublic override void LoadView()\n\t\t{\n\t\t\tView = new UIView();\n\t\t\t_tableView = new UITableView(new RectangleF(PointF.Empty, View.Frame.Size));\n\t\t\t_tableView.AutoresizingMask =\n\t\t\t\tUIViewAutoresizing.FlexibleHeight |\n\t\t\t\tUIViewAutoresizing.FlexibleWidth;\n\n\t\t\t_tableView.Delegate = new TableViewDelegate(this);\n\t\t\t_tableView.DataSource = new TableViewDataSource(this);\n\n\t\t\tView.Add(_tableView);\n\t\t}\n\n\t\tpublic override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation)\n\t\t{\n\t\t\tif (UserInterfaceIdiomIsPhone)\n\t\t\t{\n\t\t\t\treturn (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tprivate void RunTest(InteractiveTest test)\n\t\t{\n\t\t\tif (_activeGame != null || _activeTest != null)\n\t\t\t\tthrow new InvalidOperationException(\"An interactive test is already active.\");\n\n\t\t\t_activeTest = test;\n\n\t\t\t_activeGame = test.Create();\n\t\t\t_activeGame.Exiting += ActiveGame_Exiting;\n\t\t\t_activeGame.Run();\n\n\t\t\tView.Window.Hidden = true;\n\t\t}\n\n\t\tprivate void ActiveGame_Exiting(object sender, EventArgs e)\n\t\t{\n\t\t\t_activeGame.Dispose();\n\t\t\t_activeGame = null;\n\n\t\t\t_activeTest = null;\n\n\t\t\t// HACK: TouchPanel should probably clear itself at the\n\t\t\t//       end of a Game run.\n\t\t\tTouchPanel.EnabledGestures = GestureType.None;\n\n\t\t\tView.Window.MakeKeyAndVisible();\n\t\t\tView.LayoutSubviews();\n\t\t}\n\n\t\tprivate class InteractiveTest\n\t\t{\n\t\t\tpublic static bool TryCreateFrom(Type type, out InteractiveTest test)\n\t\t\t{\n\t\t\t\ttest = null;\n\t\t\t\tif (!typeof(Game).IsAssignableFrom(type))\n\t\t\t\t\treturn false;\n\n\t\t\t\tvar attrs = type.GetCustomAttributes(typeof(InteractiveTestAttribute), false);\n\t\t\t\tif (attrs.Length == 0)\n\t\t\t\t\treturn false;\n\n\t\t\t\tvar attr = (InteractiveTestAttribute)attrs[0];\n\n\t\t\t\ttest = new InteractiveTest(\n\t\t\t\t\ttype, attr.Name ?? type.Name, attr.Category ?? Categories.Default);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tprivate InteractiveTest(Type type, string name, string category)\n\t\t\t{\n\t\t\t\t_type = type;\n\t\t\t\t_name = name;\n\t\t\t\t_category = category;\n\t\t\t}\n\n\t\t\tprivate readonly Type _type;\n\t\t\tpublic Type Type\n\t\t\t{\n\t\t\t\tget { return _type; }\n\t\t\t}\n\n\t\t\tprivate readonly string _name;\n\t\t\tpublic string Name\n\t\t\t{\n\t\t\t\tget { return _name; }\n\t\t\t}\n\n\t\t\tprivate readonly string _category;\n\t\t\tpublic string Category\n\t\t\t{\n\t\t\t\tget { return _category; }\n\t\t\t}\n\n\t\t\tpublic Game Create()\n\t\t\t{\n\t\t\t\treturn (Game)Activator.CreateInstance(_type);\n\t\t\t}\n\t\t}\n\n\t\tprivate class TableViewDelegate : UITableViewDelegate\n\t\t{\n\t\t\tprivate readonly RootViewController _owner;\n\n\t\t\tpublic TableViewDelegate(RootViewController owner)\n\t\t\t{\n\t\t\t\tif (owner == null)\n\t\t\t\t\tthrow new ArgumentNullException(\"owner\");\n\t\t\t\t_owner = owner;\n\t\t\t}\n\n\t\t\tpublic override void RowSelected(UITableView tableView, NSIndexPath indexPath)\n\t\t\t{\n\t\t\t\tvar tests = (IEnumerable<InteractiveTest>)_owner._interactiveTests;\n\t\t\t\tvar categories = tests.Select(x => x.Category).OrderBy(x => x).ToArray();\n\t\t\t\tvar category = categories[indexPath.Section];\n\n\t\t\t\tvar test = tests\n\t\t\t\t\t.Where(x => x.Category == category)\n\t\t\t\t\t.OrderBy(x => x.Name)\n\t\t\t\t\t.ElementAt(indexPath.Row);\n\n\t\t\t\t_owner.RunTest(test);\n\t\t\t}\n\t\t}\n\n\t\tprivate class TableViewDataSource : UITableViewDataSource\n\t\t{\n\n\t\t\tprivate readonly RootViewController _owner;\n\t\t\tpublic TableViewDataSource(RootViewController owner)\n\t\t\t{\n\t\t\t\tif (owner == null)\n\t\t\t\t\tthrow new ArgumentNullException(\"owner\");\n\t\t\t\t_owner = owner;\n\t\t\t}\n\n\t\t\tpublic override int NumberOfSections(UITableView tableView)\n\t\t\t{\n\t\t\t\tvar tests = (IEnumerable<InteractiveTest>)_owner._interactiveTests;\n\t\t\t\treturn tests.Select(x => x.Category).Distinct().Count();\n\t\t\t}\n\n\t\t\tpublic override int RowsInSection(UITableView tableView, int section)\n\t\t\t{\n\t\t\t\tvar tests = (IEnumerable<InteractiveTest>)_owner._interactiveTests;\n\t\t\t\tvar categories = tests.Select(x => x.Category).OrderBy(x => x).ToArray();\n\t\t\t\tvar category = categories[section];\n\n\t\t\t\treturn tests.Where(x => x.Category == category).Count();\n\t\t\t}\n\n\t\t\tpublic override string TitleForHeader(UITableView tableView, int section)\n\t\t\t{\n\t\t\t\tvar tests = (IEnumerable<InteractiveTest>)_owner._interactiveTests;\n\t\t\t\tvar categories = tests.Select(x => x.Category).OrderBy(x => x).ToArray();\n\n\t\t\t\treturn categories[section];\n\t\t\t}\n\n\t\t\tpublic override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)\n\t\t\t{\n\t\t\t\tvar tests = (IEnumerable<InteractiveTest>)_owner._interactiveTests;\n\t\t\t\tvar categories = tests.Select(x => x.Category).OrderBy(x => x).ToArray();\n\t\t\t\tvar category = categories[indexPath.Section];\n\n\t\t\t\tvar test = tests\n\t\t\t\t\t.Where(x => x.Category == category)\n\t\t\t\t\t.OrderBy(x => x.Name)\n\t\t\t\t\t.ElementAt(indexPath.Row);\n\n\t\t\t\tvar cell = tableView.DequeueReusableCell(\"UITableViewCell\");\n\t\t\t\tif (cell == null)\n\t\t\t\t\tcell = new UITableViewCell(UITableViewCellStyle.Default, \"UITableViewCell\");\n\t\t\t\tcell.TextLabel.Text = test.Name;\n\t\t\t\treturn cell;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/Button.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing System.Drawing;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\tclass Button : View\n\t{\n\t\tpublic Button()\n\t\t{\n\t\t\tPadding = new PaddingF(10);\n\t\t}\n\n\t\tprivate View _content;\n\t\tpublic View Content\n\t\t{\n\t\t\tget { return _content; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (_content != value)\n\t\t\t\t{\n\t\t\t\t\tif (_content != null)\n\t\t\t\t\t\t_content.RemoveFromSuperview();\n\t\t\t\t\t_content = value;\n\t\t\t\t\tif (_content != null)\n\t\t\t\t\t\tAdd(_content);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate PaddingF _padding;\n\t\tpublic PaddingF Padding\n\t\t{\n\t\t\tget { return _padding; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (_padding != value)\n\t\t\t\t{\n\t\t\t\t\t_padding = value;\n\t\t\t\t\tSetNeedsLayout();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic override void LayoutSubviews()\n\t\t{\n\t\t\tforeach (var view in Subviews)\n\t\t\t{\n\t\t\t\tview.LayoutIfNeeded();\n\n\t\t\t\tvar frame = view.Frame;\n\t\t\t\tframe.X = Math.Max(frame.X, Padding.Left);\n\t\t\t\tframe.Y = Math.Max(frame.Y, Padding.Top);\n\t\t\t\tview.Frame = frame;\n\t\t\t}\n\t\t}\n\n\t\tpublic override System.Drawing.SizeF SizeThatFits(SizeF size)\n\t\t{\n\t\t\tvar maxContentSize = size;\n\t\t\tif (size != Size.Empty)\n\t\t\t{\n\t\t\t\tsize.Width -= Padding.Horizontal;\n\t\t\t\tsize.Height -= Padding.Vertical;\n\t\t\t}\n\n\t\t\tvar fitSize = Content.SizeThatFits(maxContentSize);\n\t\t\tfitSize.Width += Padding.Horizontal;\n\t\t\tfitSize.Height += Padding.Vertical;\n\t\t\treturn fitSize;\n\t\t}\n\n\t\tpublic event EventHandler<EventArgs> Tapped;\n\t\tprotected virtual void OnTapped(EventArgs e)\n\t\t{\n\t\t\tvar handler = Tapped;\n\t\t\tif (handler != null)\n\t\t\t\thandler(this, e);\n\t\t}\n\n\t\tpublic override bool HandleGestureSample(GestureSample gestureSample, GameTime gameTime)\n\t\t{\n\t\t\tif (gestureSample.GestureType == GestureType.Tap)\n\t\t\t{\n\t\t\t\tOnTapped(EventArgs.Empty);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn base.HandleGestureSample(gestureSample, gameTime);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/DrawContext.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\tclass DrawContext : IDisposable\n\t{\n\t\tprivate readonly Stack<Matrix> _states;\n\t\tpublic DrawContext(GraphicsDevice graphicsDevice, Matrix matrix)\n\t\t{\n\t\t\t_graphicsDevice = graphicsDevice;\n\t\t\t_spriteBatch = new SpriteBatch(graphicsDevice);\n\t\t\t_matrix = matrix;\n\t\t\t_states = new Stack<Matrix>();\n\t\t}\n\n\t\tpublic DrawContext(GraphicsDevice graphicsDevice)\n\t\t\t: this(graphicsDevice, Matrix.Identity)\n\t\t{\n\t\t}\n\n\t\t~DrawContext()\n\t\t{\n\t\t\tDispose(false);\n\t\t}\n\n\t\tprivate readonly GraphicsDevice _graphicsDevice;\n\t\tpublic GraphicsDevice GraphicsDevice\n\t\t{\n\t\t\tget { return _graphicsDevice; }\n\t\t}\n\n\t\tprivate Matrix _matrix;\n\t\tpublic Matrix Matrix\n\t\t{\n\t\t\tget { return _matrix; }\n\t\t}\n\n\t\tprivate readonly SpriteBatch _spriteBatch;\n\t\tpublic SpriteBatch SpriteBatch\n\t\t{\n\t\t\tget { return _spriteBatch; }\n\t\t}\n\n\t\tpublic void Begin(Matrix matrix)\n\t\t{\n\t\t\tif (_states.Count > 0)\n\t\t\t\t_spriteBatch.End();\n\n\t\t\t_states.Push(_matrix);\n\t\t\t_matrix = matrix;\n\t\t\t_spriteBatch.Begin(\n\t\t\t\tSpriteSortMode.Immediate, BlendState.AlphaBlend,\n\t\t\t\tnull, null, null, null, _matrix);\n\t\t}\n\n\t\tpublic void End()\n\t\t{\n\t\t\t_spriteBatch.End();\n\t\t\t_matrix = _states.Pop();\n\n\t\t\tif (_states.Count > 0)\n\t\t\t\t_spriteBatch.Begin\n\t\t\t\t\t(SpriteSortMode.Immediate, BlendState.AlphaBlend,\n\t\t\t\t\t null, null, null, null, _matrix);\n\t\t}\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tDispose(true);\n\t\t}\n\n\t\tprotected virtual void Dispose(bool disposing)\n\t\t{\n\t\t\tif (disposing)\n\t\t\t{\n\t\t\t\t_spriteBatch.Dispose();\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/Label.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing System.Drawing;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\tclass Label : View\n\t{\n\t\tpublic Label()\n\t\t{\n\t\t\tTextColor = Color.Black;\n\t\t\tPadding = new PaddingF(3);\n\t\t}\n\n\t\tpublic SpriteFont Font { get; set; }\n\t\tpublic string Text { get; set; }\n\t\tpublic Color TextColor { get; set; }\n\t\tpublic PaddingF Padding { get; set; }\n\n\t\tpublic override SizeF SizeThatFits(SizeF size)\n\t\t{\n\t\t\tif (Font == null || string.IsNullOrWhiteSpace(Text))\n\t\t\t\treturn Frame.Size;\n\n\t\t\tvar sizeVector = Font.MeasureString(Text);\n\t\t\treturn new SizeF(sizeVector.X + Padding.Horizontal, sizeVector.Y + Padding.Vertical);\n\t\t}\n\n\t\tprotected override void DrawForeground(DrawContext context, GameTime gameTime)\n\t\t{\n\t\t\tif (Font != null && !string.IsNullOrWhiteSpace(Text))\n\t\t\t{\n\t\t\t\tcontext.SpriteBatch.DrawString(\n\t\t\t\t\tFont, Text, new Vector2(Padding.Left, Padding.Top), TextColor);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/PaddingF.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\tstruct PaddingF\n\t{\n\t\tpublic float Left;\n\t\tpublic float Top;\n\t\tpublic float Right;\n\t\tpublic float Bottom;\n\n\t\tpublic float Horizontal\n\t\t{\n\t\t\tget { return Left + Right; }\n\t\t}\n\n\t\tpublic float Vertical\n\t\t{\n\t\t\tget { return Top + Bottom; }\n\t\t}\n\n\t\tpublic PaddingF(float all)\n\t\t{\n\t\t\tLeft = Top = Right = Bottom = all;\n\t\t}\n\n\t\tpublic PaddingF(float left, float top, float right, float bottom)\n\t\t{\n\t\t\tLeft = left;\n\t\t\tTop = top;\n\t\t\tRight = right;\n\t\t\tBottom = bottom;\n\t\t}\n\n\t\tpublic static bool operator ==(PaddingF a, PaddingF b)\n\t\t{\n\t\t\treturn\n\t\t\t\ta.Left == b.Left &&\n\t\t\t\ta.Top == b.Top &&\n\t\t\t\ta.Right == b.Right &&\n\t\t\t\ta.Bottom == b.Bottom;\n\t\t}\n\n\t\tpublic static bool operator !=(PaddingF a, PaddingF b)\n\t\t{\n\t\t\treturn !(a == b);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (!(obj is PaddingF))\n\t\t\t\treturn false;\n\n\t\t\treturn this == (PaddingF)obj;\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\treturn\n\t\t\t\tLeft.GetHashCode() ^\n\t\t\t\t(Top.GetHashCode() << 8) ^\n\t\t\t\t(Right.GetHashCode() << 16) ^\n\t\t\t\t(Bottom.GetHashCode() << 24);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/TestUITestGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Drawing;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\t[InteractiveTest(\"Test UI Test\", Categories.Meta)]\n\tpublic class TestUITestGame : Game\n\t{\n\t\tprivate SpriteFont _font;\n\t\tprivate Universe _universe;\n\n\t\tpublic TestUITestGame()\n\t\t{\n\t\t\tnew GraphicsDeviceManager(this);\n\t\t\tTouchPanel.EnabledGestures = GestureType.DoubleTap | GestureType.Tap;\n\n\t\t\tContent.RootDirectory = \"Content\";\n\t\t}\n\n\t\tprotected override void Initialize()\n\t\t{\n\t\t\tbase.Initialize();\n\t\t}\n\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tbase.LoadContent();\n\n\t\t\t_font = Content.Load<SpriteFont>(@\"Fonts\\Default\");\n\n\t\t\t_universe = new Universe(Content)\n\t\t\t{\n\t\t\t\tAutoHandleInput = true\n\t\t\t};\n\t\t\tComponents.Add(new UniverseComponent(this, _universe));\n\n\t\t\tvar exitButton = new Button\n\t\t\t{\n\t\t\t\tBackgroundColor = Color.Black,\n\t\t\t\tContent = new Label\n\t\t\t\t{\n\t\t\t\t\tFont = _font,\n\t\t\t\t\tText = \"Exit\",\n\t\t\t\t\tTextColor = Color.White\n\t\t\t\t},\n\t\t\t\tLocation = PointF.Empty\n\t\t\t};\n\n\t\t\texitButton.Content.SizeToFit();\n\t\t\texitButton.SizeToFit();\n\t\t\texitButton.Tapped += (sender, e) =>\n\t\t\t{\n\t\t\t\tExit();\n\t\t\t};\n\n\t\t\tvar label = new Label\n\t\t\t{\n\t\t\t\tBackgroundColor = Color.Indigo,\n\t\t\t\tFont = _font,\n\t\t\t\tLocation = new PointF(20, 200),\n\t\t\t\tText = \"fantastic\",\n\t\t\t\tTextColor = Color.White\n\t\t\t};\n\n\t\t\tlabel.SizeToFit();\n\n\t\t\tvar button1 = new Button\n\t\t\t{\n\t\t\t\tBackgroundColor = Color.OrangeRed,\n\t\t\t\tContent = new Label\n\t\t\t\t{\n\t\t\t\t\tFont = _font,\n\t\t\t\t\tText = \"Button 1\",\n\t\t\t\t\tTextColor = Color.White\n\t\t\t\t},\n\t\t\t\tLocation = new PointF(label.Frame.Left, 60)\n\t\t\t};\n\n\t\t\tbutton1.Content.SizeToFit();\n\t\t\tbutton1.SizeToFit();\n\n\t\t\tbutton1.Tapped += (sender, e) =>\n\t\t\t{\n\t\t\t\tlabel.Text = (\"button 1!\");\n\t\t\t};\n\n\t\t\tvar button2 = new Button\n\t\t\t{\n\t\t\t\tBackgroundColor = Color.Goldenrod,\n\t\t\t\tContent = new Label\n\t\t\t\t{\n\t\t\t\t\tFont = _font,\n\t\t\t\t\tText = \"Button 2\",\n\t\t\t\t\tTextColor = Color.White\n\t\t\t\t},\n\t\t\t\tLocation = new PointF(button1.Frame.Left, button1.Frame.Bottom)\n\t\t\t};\n\n\t\t\tbutton2.Content.SizeToFit();\n\t\t\tbutton2.SizeToFit();\n\n\t\t\tbutton2.Tapped += (sender, e) =>\n\t\t\t{\n\t\t\t\tlabel.Text = (\"button 2!\");\n\t\t\t};\n\n\t\t\t_universe.Add(exitButton);\n\t\t\t_universe.Add(button1);\n\t\t\t_universe.Add(button2);\n\t\t\t_universe.Add(label);\n\t\t}\n\n\t\tprotected override void UnloadContent()\n\t\t{\n\t\t\tbase.UnloadContent();\n\n\t\t\t_font = null;\n\t\t}\n\n\t\tprotected override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tGraphicsDevice.Clear(Color.DarkBlue);\n\t\t\tbase.Draw(gameTime);\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/Universe.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Drawing;\nusing System.Linq;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\tclass Universe\n\t{\n\n\t\tprivate readonly ViewCollection _views;\n\t\tpublic Universe(ContentManager content)\n\t\t{\n\t\t\tif (content == null)\n\t\t\t\tthrow new ArgumentNullException(\"content\");\n\t\t\t_content = content;\n\t\t\t_views = new ViewCollection(null);\n\t\t\t_views.Universe = this;\n\t\t}\n\n\t\tprivate readonly ContentManager _content;\n\t\tpublic ContentManager Content\n\t\t{\n\t\t\tget { return _content; }\n\t\t}\n\n\t\tpublic bool AutoHandleInput { get; set; }\n\n\t\tpublic void Add(View view)\n\t\t{\n\t\t\t_views.Add(view);\n\t\t}\n\n\t\tpublic bool HandleGestureSample(GestureSample gestureSample, GameTime gameTime)\n\t\t{\n\t\t\tbool handled = false;\n\t\t\tvar position = new PointF(gestureSample.Position.X, gestureSample.Position.Y);\n\t\t\tforeach (var view in _views.HitTest(position))\n\t\t\t{\n\t\t\t\tif (view.HandleGestureSample(gestureSample, gameTime))\n\t\t\t\t{\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn handled;\n\t\t}\n\n\t\tpublic void Update(GameTime gameTime)\n\t\t{\n\t\t\tif (AutoHandleInput)\n\t\t\t{\n\t\t\t\twhile (TouchPanel.IsGestureAvailable)\n\t\t\t\t{\n\t\t\t\t\tvar gestureSample = TouchPanel.ReadGesture();\n\t\t\t\t\tHandleGestureSample(gestureSample, gameTime);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic void Draw(DrawContext context, GameTime gameTime)\n\t\t{\n\t\t\t_views.Draw(context, gameTime);\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/UniverseComponent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nusing Microsoft.Xna.Framework;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\tclass UniverseComponent : DrawableGameComponent\n\t{\n\t\tpublic UniverseComponent(Game game, Universe universe = null)\n\t\t\t: base(game)\n\t\t{\n\t\t\t_universe = universe ?? new Universe(game.Content);\n\t\t}\n\n\t\tprivate readonly Universe _universe;\n\t\tpublic Universe Universe\n\t\t{\n\t\t\tget { return _universe; }\n\t\t}\n\n\t\tpublic override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\t\t\t_universe.Update(gameTime);\n\t\t}\n\n\t\tprivate DrawContext _drawContext;\n\t\tpublic override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tbase.Draw(gameTime);\n\n\t\t\tif (_drawContext == null || _drawContext.GraphicsDevice != GraphicsDevice)\n\t\t\t\t_drawContext = new DrawContext(GraphicsDevice, Matrix.Identity);\n\n\t\t\t_drawContext.Begin(Matrix.Identity);\n\t\t\ttry\n\t\t\t{\n\t\t\t\t_universe.Draw(_drawContext, gameTime);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\t_drawContext.End();\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/View.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Drawing;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\tclass View\n\t{\n\t\tprivate readonly ViewCollection _subviews;\n\t\tprivate readonly ReadOnlyCollection<View> _readOnlySubviews;\n\t\tprivate bool _needsLayout;\n\t\tpublic View()\n\t\t{\n\t\t\t_subviews = new ViewCollection(this);\n\t\t\t_readOnlySubviews = new ReadOnlyCollection<View>(_subviews);\n\n\t\t\tBackgroundColor = Color.Transparent;\n\t\t\tIsVisible = true;\n\t\t}\n\n\t\tpublic Color BackgroundColor { get; set; }\n\n\t\tprivate RectangleF _frame;\n\t\tpublic RectangleF Frame\n\t\t{\n\t\t\tget { return _frame; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (_frame != value)\n\t\t\t\t{\n\t\t\t\t\t_frame = SetFrameCore(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsVisible { get; set; }\n\n\t\tpublic PointF Location\n\t\t{\n\t\t\tget { return _frame.Location; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tvar newFrame = Frame;\n\t\t\t\tnewFrame.Location = value;\n\t\t\t\tFrame = newFrame;\n\t\t\t}\n\t\t}\n\n\t\tpublic ReadOnlyCollection<View> Subviews\n\t\t{\n\t\t\tget { return _readOnlySubviews; }\n\t\t}\n\n\t\tpublic View Superview { get; set; }\n\n\t\tprivate Universe _universe;\n\t\tpublic Universe Universe\n\t\t{\n\t\t\tget { return _universe; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (_universe != value)\n\t\t\t\t{\n\t\t\t\t\t_universe = value;\n\t\t\t\t\t_subviews.Universe = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic void Add(View subview)\n\t\t{\n\t\t\t_subviews.Add(subview);\n\t\t\tSetNeedsLayout();\n\t\t}\n\n\t\tpublic IEnumerable<View> HitTest(PointF p)\n\t\t{\n\t\t\tforeach (var view in _subviews.HitTest(p))\n\t\t\t\tyield return view;\n\n\t\t\tif (HitTestSelf(p))\n\t\t\t\tyield return this;\n\t\t}\n\n\t\tpublic bool HitTestSelf(PointF p)\n\t\t{\n\t\t\tvar rect = Frame;\n\t\t\trect.Location = PointF.Empty;\n\n\t\t\treturn rect.Contains(p);\n\t\t}\n\n\t\tpublic void LayoutIfNeeded()\n\t\t{\n\t\t\tif (_needsLayout)\n\t\t\t{\n\t\t\t\tLayoutSubviews();\n\t\t\t\t_needsLayout = false;\n\t\t\t}\n\t\t}\n\n\t\tpublic virtual void LayoutSubviews()\n\t\t{\n\t\t}\n\n\t\tprotected virtual RectangleF SetFrameCore(RectangleF frame)\n\t\t{\n\t\t\treturn frame;\n\t\t}\n\n\t\tpublic virtual bool HandleGestureSample(GestureSample gestureSample, GameTime gameTime)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void RemoveFromSuperview()\n\t\t{\n\t\t\tif (Superview == null)\n\t\t\t\tthrow new InvalidOperationException(\"The View does not have a Superview\");\n\n\n\t\t\tSuperview._subviews.Remove(this);\n\t\t\tSuperview.SetNeedsLayout();\n\t\t}\n\n\t\tpublic void SetNeedsLayout()\n\t\t{\n\t\t\t_needsLayout = true;\n\t\t}\n\n\t\tpublic virtual SizeF SizeThatFits(SizeF size)\n\t\t{\n\t\t\treturn Frame.Size;\n\t\t}\n\n\t\tpublic void SizeToFit()\n\t\t{\n\t\t\t// TODO: Distribute the new size according to this\n\t\t\t//       View's Origin (which doesn't exist yet).\n\n\t\t\tif (Superview == null)\n\t\t\t\tFrame = new RectangleF(Frame.Location, SizeThatFits(SizeF.Empty));\n\t\t\telse\n\t\t\t\t// TODO: Calculate the available size based on\n\t\t\t\t//       this View's location and Origin and\n\t\t\t\t//       the Superview Frame.\n\t\t\t\tFrame = new RectangleF(Frame.Location, SizeThatFits(Superview.Frame.Size));\n\t\t}\n\n\t\tpublic virtual void Update(GameTime gameTime)\n\t\t{\n\t\t\tLayoutIfNeeded();\n\t\t}\n\n\t\tpublic virtual void Draw(DrawContext context, GameTime gameTime)\n\t\t{\n\t\t\tLayoutIfNeeded();\n\n\t\t\tDrawBackground(context, gameTime);\n\t\t\tDrawForeground(context, gameTime);\n\t\t\t_subviews.Draw(context, gameTime);\n\t\t\tDrawAboveSubviews(context, gameTime);\n\t\t}\n\n\t\tprotected virtual void DrawBackground(DrawContext context, GameTime gameTime)\n\t\t{\n\t\t\tif (BackgroundColor.A > 0)\n\t\t\t{\n\t\t\t\tvar swatch = Universe.Content.Load<Texture2D>(@\"Textures\\white-1\");\n\t\t\t\tcontext.SpriteBatch.Draw(\n\t\t\t\t\tswatch, Vector2.Zero, null, BackgroundColor, 0, Vector2.Zero,\n\t\t\t\t\tnew Vector2(Frame.Width, Frame.Height), SpriteEffects.None, 0);\n\t\t\t}\n\t\t}\n\n\t\tprotected virtual void DrawForeground(DrawContext context, GameTime gameTime)\n\t\t{\n\t\t}\n\n\t\tprotected virtual void DrawAboveSubviews(DrawContext context, GameTime gameTime)\n\t\t{\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/TestUI/ViewCollection.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Drawing;\n\nusing Microsoft.Xna.Framework;\n\nnamespace MonoGame.InteractiveTests.TestUI\n{\n\tclass ViewCollection : Collection<View>\n\t{\n\n\t\tprivate readonly View _superview;\n\t\tpublic ViewCollection(View superview)\n\t\t{\n\t\t\t_superview = superview;\n\t\t}\n\n\t\tprivate Universe _universe;\n\t\tpublic Universe Universe\n\t\t{\n\t\t\tget { return _universe; }\n\t\t\tset\n\t\t\t{\n\t\t\t\t_universe = value;\n\t\t\t\tforeach (var view in Items)\n\t\t\t\t\tview.Universe = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IEnumerable<View> HitTest(PointF p)\n\t\t{\n\t\t\tforeach (var view in Items)\n\t\t\t{\n\t\t\t\tvar local = p;\n\t\t\t\tlocal.X -= view.Frame.X;\n\t\t\t\tlocal.Y -= view.Frame.Y;\n\n\t\t\t\tforeach (var subview in view.HitTest(local))\n\t\t\t\t\tyield return subview;\n\t\t\t}\n\t\t}\n\n\t\tpublic IEnumerable<View> HitTest(RectangleF rect)\n\t\t{\n\t\t\tthrow new NotImplementedException();\n\t\t}\n\n\t\tpublic void Draw(DrawContext context, GameTime gameTime)\n\t\t{\n\t\t\tforeach (var view in Items)\n\t\t\t{\n\t\t\t\tif (!view.IsVisible)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar matrix = context.Matrix * Matrix.CreateTranslation(view.Frame.X, view.Frame.Y, 0);\n\t\t\t\tcontext.Begin(matrix);\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tview.Draw(context, gameTime);\n\t\t\t\t}\n\t\t\t\tfinally\n\t\t\t\t{\n\t\t\t\t\tcontext.End();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprotected override void InsertItem(int index, View item)\n\t\t{\n\t\t\tbase.InsertItem(index, item);\n\n\t\t\tif (item.Superview != null)\n\t\t\t\titem.RemoveFromSuperview();\n\t\t\titem.Superview = _superview;\n\t\t\titem.Universe = _universe;\n\t\t}\n\n\t\tprotected override void SetItem(int index, View item)\n\t\t{\n\t\t\tthrow new InvalidOperationException(\n\t\t\t\t\"ViewCollection does not support setting items by index.\");\n\t\t}\n\n\t\tprotected override void ClearItems()\n\t\t{\n\t\t\tforeach (var view in Items)\n\t\t\t{\n\t\t\t\tview.Superview = null;\n\t\t\t\tview.Universe = null;\n\t\t\t}\n\n\t\t\tbase.ClearItems();\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/TextureScaleTest/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<string>2</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Interactive/iOS/TextureScaleTest/Program.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// Program.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\nusing System;\n\n#if IOS || TVOS\nusing MonoTouch.Foundation;\nusing MonoTouch.UIKit;\n#endif\n\n\nnamespace MonoTest\n{\n\t[Register(\"AppDelegate\")]\n\tclass Program : UIApplicationDelegate\n\t{\n\t\tpublic override void FinishedLaunching(UIApplication app)\n\t\t{\n\t\t\t// Fun begins..\n\t\t\tusing (Game1 game = new Game1())\n\t\t\t{\n\t\t\t\tgame.Run();\n\t\t\t}\n\n\t\t\t//MediaLibrary lib = new MediaLibrary();\n\t\t\t//object result = lib.Playlists;\n\t\t}\n\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\tUIApplication.Main(args, null, \"AppDelegate\");\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Interactive/iOS/TextureScaleTest/TextureScaleColorTest.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">iPhoneSimulator</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{0955881C-16CE-4A54-B962-11131B471047}</ProjectGuid>\n    <ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>TextureScaleTest</RootNamespace>\n    <AssemblyName>TextureScaleTest</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Debug</OutputPath>\n    <DefineConstants>DEBUG; IOS</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchLink>None</MtouchLink>\n    <MtouchDebug>true</MtouchDebug>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchLink>None</MtouchLink>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhone' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchDebug>true</MtouchDebug>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"monotouch\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\MonoGame\\MonoGame.Framework\\MonoGame.Framework.iOS.csproj\">\n      <Project>{DB8508BB-9849-4CC2-BC0F-8EB5DACB3C47}</Project>\n      <Name>MonoGame.Framework.iOS</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"..\\..\\MacOS\\TextureScaleColorTest\\Game1.cs\">\n      <Link>Game1.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\..\\MacOS\\TextureScaleColorTest\\Content\\FontCalibri14.xnb\">\n      <Link>Content\\FontCalibri14.xnb</Link>\n    </Content>\n    <Content Include=\"..\\..\\MacOS\\TextureScaleColorTest\\Content\\blank.xnb\">\n      <Link>Content\\blank.xnb</Link>\n    </Content>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Tests/Kni.Tests.SDL2.GL.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>\n    <TargetFrameworks>net8.0</TargetFrameworks>\n    <ProjectGuid>{DED2DDB6-D4BE-B1B4-2E54-657374732E57}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Kni.Tests</RootNamespace>\n    <AssemblyName>Kni.Tests</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <OutputPath>bin\\DesktopGL\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\DesktopGL\\$(Platform)\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>$(DefineConstants);KNI;DESKTOPGL</DefineConstants>\n    <LangVersion>Default</LangVersion>\n    <StartupObject>Kni.Tests.Program</StartupObject>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"NUnitLite\" Version=\"3.14.0\" />\n    <PackageReference Include=\"NUnit3TestAdapter\" Version=\"3.17.0\" />\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.10.0\" />\n    <PackageReference Include=\"System.Drawing.Common\" Version=\"8.0.6\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Components\\DrawFrameNumberComponent.cs\" />\n    <Compile Include=\"Components\\FlexibleGameComponent.cs\" />\n    <Compile Include=\"Components\\ImplicitDrawOrderComponent.cs\" />\n    <Compile Include=\"Components\\InitializeOrderComponent.cs\" />\n    <Compile Include=\"Components\\Simple3DCubeComponent.cs\" />\n    <Compile Include=\"Components\\SpaceshipModelDrawComponent.cs\" />\n    <Compile Include=\"Components\\VisualTestDrawableGameComponent.cs\" />\n    <Compile Include=\"Components\\VisualTestGameComponent.cs\" />\n    <Compile Include=\"Components\\Colored3DCubeComponent.cs\" />\n    <Compile Include=\"Components\\TexturedQuadComponent.cs\" />\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Compile Include=\"Framework\\BoundingTest.cs\" />\n    <Compile Include=\"Framework\\ColorTest.cs\" />\n    <Compile Include=\"Framework\\CurveKeyCollectionTest.cs\" />\n    <Compile Include=\"Framework\\CurveKeyTest.cs\" />\n    <Compile Include=\"Framework\\CurveTest.cs\" />\n    <Compile Include=\"Framework\\EnumConformingTest.cs\" />\n    <Compile Include=\"Framework\\FrameworkDispatcherTest.cs\" />\n    <Compile Include=\"Framework\\MathHelperTest.cs\" />\n    <Compile Include=\"Framework\\MatrixTest.cs\" />\n    <Compile Include=\"Framework\\PackedVectorTest.cs\" />\n    <Compile Include=\"Framework\\PlaneTest.cs\" />\n    <Compile Include=\"Framework\\QuaternionTest.cs\" />\n    <Compile Include=\"Framework\\RayTest.cs\" />\n    <Compile Include=\"Framework\\RectangleTest.cs\" />\n    <Compile Include=\"Framework\\TitleContainerTest.cs\" />\n    <Compile Include=\"Framework\\UtilitiesTest.cs\" />\n    <Compile Include=\"Framework\\Vector2Test.cs\" />\n    <Compile Include=\"Framework\\Vector3Test.cs\" />\n    <Compile Include=\"Framework\\Vector4Test.cs\" />\n    <Compile Include=\"Framework\\VertexTests.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Audio\\SoundEffectTest.cs\" />\n    <Compile Include=\"Framework.Audio\\XactTest.cs\" />\n    <Compile Include=\"Framework.Audio\\DynamicSoundEffectInstanceTest.cs\" />\n    <Compile Include=\"Framework.Audio\\SoundEffectInstanceTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Game\\GameComponentTest.cs\" />\n    <Compile Include=\"Framework.Game\\GameTest.cs\" />\n    <Compile Include=\"Framework.Game\\GameTest+Methods.cs\" />\n    <Compile Include=\"Framework.Game\\GameTest+Properties.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Graphics\\BlendStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\EffectTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsAdapterTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsDeviceTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\MiscellaneousTests.cs\" />\n    <Compile Include=\"Framework.Graphics\\IndexBufferTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture2DNonVisualTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture3DNonVisualTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\DepthStencilStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsDeviceManagerTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RasterizerStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RenderTarget2DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RenderTargetCubeTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SamplerStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ScissorRectangleTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture2DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture3DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\TextureCubeTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\VertexBufferTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\VisualMiscellaneousTests.cs\" />\n    <Compile Include=\"Framework.Graphics\\ShaderTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SpriteBatchTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SpriteFontTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ViewportTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ModelTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\OcclusionQueryTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ProfileReachTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Input\\GamePadTest.cs\" />\n    <Compile Include=\"Framework.Input\\JoystickTest.cs\" />\n    <Compile Include=\"Framework.Input\\KeyboardTest.cs\" />\n    <Compile Include=\"Framework.Input\\MouseTest.cs\" />\n    <Compile Include=\"Framework.Input\\TouchCollectionTest.cs\" />\n    <Compile Include=\"Framework.Input\\TouchLocationTest.cs\" />\n    <Compile Include=\"Framework.Input\\TouchPanelTest.cs\" />\n    <Compile Include=\"Framework.Input\\GestureRecognizerTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Runner\\ContentPipeline\\AssetTestUtility.cs\" />\n    <Compile Include=\"Runner\\ContentPipeline\\TestContentBuildLogger.cs\" />\n    <Compile Include=\"Runner\\ContentPipeline\\TestProcessorContext.cs\" />\n    <Compile Include=\"Runner\\Constants.cs\" />\n    <Compile Include=\"Runner\\Extensions.cs\" />\n    <Compile Include=\"Runner\\FrameInfo.cs\" />\n    <Compile Include=\"Runner\\FramePixelData.cs\" />\n    <Compile Include=\"Runner\\FramePixelData.Desktop.cs\" />\n    <Compile Include=\"Runner\\PixelArgb.cs\" />\n    <Compile Include=\"Runner\\Utility.cs\" />\n    <Compile Include=\"Runner\\Program.cs\" />\n    <Compile Include=\"Runner\\GameBase\\CountCallsGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\FixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\MockGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\TestGameBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\GraphicsDeviceTestFixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\VisualTestFixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\VisualTestGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\FrameCompareComponent.cs\" />\n    <Compile Include=\"Runner\\GameBase\\PixelDeltaFrameComparer.cs\" />\n    <Compile Include=\"Runner\\GameBase\\UpdateGuard.cs\" />\n    <Compile Include=\"Utilities\\ActionDaemon.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xgs\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xsb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xwb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_11hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_22hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_44hz_32bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_44hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_88hz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_11hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_11hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_22hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_22hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_44hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.mp3\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.ogg\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.wma\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_11hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_11hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_22hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_22hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_44hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_44hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_8bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_16bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_24bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_float.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_float.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_imaadpcm.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_imaadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_msadpcm.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_msadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_8bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_16bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_24bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_float.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_float.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_imaadpcm.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_imaadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_msadpcm.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_msadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\tests.xsl\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\AlphaTestEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\AlphaTestEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\BasicEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\BasicEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\DualTextureEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\DualTextureEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\EnvironmentMapEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\EnvironmentMapEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\SkinnedEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\SkinnedEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\SpriteEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\SpriteEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Common.fxh\">\n      <Link>Assets\\Effects\\Stock\\Common.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Lighting.fxh\">\n      <Link>Assets\\Effects\\Stock\\Lighting.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Macros.fxh\">\n      <Link>Assets\\Effects\\Stock\\Macros.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Structures.fxh\">\n      <Link>Assets\\Effects\\Stock\\Structures.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Effects\\Bevels.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\BlackOut.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\ColorFlip.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\Grayscale.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\HighContrast.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\Invert.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\NoEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_s0s1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_x.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_t0t1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_t1t0.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_s0s1t0t1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\NewSyntax_t0t1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\NewSyntax_s0s1t0t1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\DeferredBasicEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OptimizedMatrix.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OptimizedMatrixArray.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\RainbowH.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Effects\\ComputeShader.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\BlendState\\VisualTests.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestDepthBufferEnable_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestDepthBufferEnable_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestStencilBuffer.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\DrawInstancedPrimitivesVisualTest.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\VertexTextureVisualTest.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-1.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-3.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-4.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-5.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-6.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-7.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\GetBackBufferData__X_100 Y_100 Width_250 Height_250__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\GetBackBufferData_null_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\Colored3DCube.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-1.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-3.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-4.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-5.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-01.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-03.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-05.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-07.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-09.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-11.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-13.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-15.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-17.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-19.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\TexturedQuad_lighting_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Model\\ShouldDrawSampleModel.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\TexturedQuad_lighting_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_-0.0004f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_1.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_-1.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_CullClockwiseFace_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_CullCounterClockwiseFace_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_None_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestDepthClipEnable_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestDepthClipEnable_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestFillMode_Solid_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestFillMode_WireFrame_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestScissorTestEnable_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestScissorTestEnable_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RenderTarget2D\\GenerateMips.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SamplerState\\VisualTestAddressModes.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SamplerState\\VisualTestComparisonFunction.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\ScissorRectangle\\Draw_without_render_target_change.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\ScissorRectangle\\Draw_with_render_target_change.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\ScissorRectangle\\Draw_with_scissor_rect.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Bevels__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__BlackOut__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__ColorFlip__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Grayscale__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__HighContrast__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Invert__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__NoEffect__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__RainbowH__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_normal.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_0.38f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_1.41f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_2.17f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_2.81f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_0.5f_0.5f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_0.75f_2.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_1.25f_0.8f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_1.5f_1.5f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_without_blend.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_additive_blend.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__GreenYellow__200_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__Red__120_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__White__80_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__GreenYellow__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__Red__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__Teal__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_0_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_1_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_2_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_3_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_4_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_10_10_40_40_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_20_30_80_60_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_30_30_30_50_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_rect.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipHorizontally_ FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipHorizontally_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_BackToFront_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_Deferred_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_FrontToBack_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_Immediate_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_Texture_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_viewport_changing_Deferred_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_viewport_changing_Immediate_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\DrawWithLayerDepth.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_many.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_LayerDepth.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipHorizontally_ FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipHorizontally_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Font_spacing_is_respected.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Hullabaloo.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Hullabaloo2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_CarriageReturn.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_Newline.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_noNewline.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_verbatimString.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Origins_rotated.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Origins_scaled.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Plain.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Rotated.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Scaled.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\DrawWithSRgbFormats_Color_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\DrawWithSRgbFormats_Color_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\DrawWithSRgbFormats_ColorSRgb_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\DrawWithSRgbFormats_ColorSRgb_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\SetDataRowPitch.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\TextureArrayAsRenderTargetAndShaderResource.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Affects_draw_origin.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Clips_SpriteBatch_draws.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Does_not_clip_device_clear.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\01_TheBasics.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\02_Inheritance.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\03_IncludingPrivateMembers.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\04_ExcludingPublicMembers.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\04_ExcludingPublicMembersOutput.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\05_RenamingXmlElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\06_NullReferences.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\07_OptionalElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\08_AllowNull.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\09_Collections.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\10_CollectionItemName.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\11_Dictionaries.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\12_MathTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\13_PolymorphicTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\14_Namespaces.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\15_FlattenContent.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\16_SharedResources.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\17_ExternalReferences.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\18_PrimitiveTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\19_FontDescription.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\20_SystemTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\21_CustomFormatting.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\22_GetterOnlyProperties.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\23_GetterOnlyPolymorphicArrayProperties.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\24_GenericTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\25_StructArrayNoElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\26_ChildCollections.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\27_Colors.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\28_XnaCurve.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Default.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\MonoGameIcon.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Surge.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Localized.spritefont\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Strings.resx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Effects\\OpenGL\\CustomSpriteBatchEffect.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OpenGL\\GrayScale.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Textures\\GlassPane.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Spaceship.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\enemy_0.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Box.blend\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\BlenderDefaultCube.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\dude_2011.fbx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\head.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\jacket.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\pants.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\upBodyC.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\DataFont.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\JingJing.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Lindsey.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Motorwerk.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\QuartzMS.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\SegoeKeycaps.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-1.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\fun-background.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Logo_65x64_16bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Logo_BMPV5.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-monochrome.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-4bits.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.gif\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.jpg\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.tif\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\random_16px_dxt.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\random_16px_dxt_alpha.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\SampleCube64DXT1Mips.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\SampleCube64DXT1Mips.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Sunset.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-R8G8B8.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-X8R8G8B8.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-mipmaps.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Logo555.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Logo565.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\rgbf.tif\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\sample_1280x853.hdr\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\RGBA16.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\1bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\8bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\24bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\32bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\color_24bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\color_32bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\color_48bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\color_64bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\blue_0.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\red_128.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\red_668_dxt.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Projects\\BuildSimpleProject.csproj\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Projects\\Content\\Content.mgcb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Projects\\Content\\ContentFont.spritefont\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"README.md\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1dc4c439-a8a6-4a11-ab3b-a88dcba05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4b8d3f73-bbd2-4057-b86b-8b73b957dc0f}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3f81f76d-f0f3-44fe-a256-40af153c33f7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Design\\Xna.Framework.Design.csproj\">\n      <Project>{e37f98d7-c4e8-4556-b322-aef99638ece1}</Project>\n      <Name>Xna.Framework.Design</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509f44-3566-4b79-bb47-c7c6e2aa2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\">\n      <Project>{acd26013-5730-4caf-9468-3baae867a8a2}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Audio</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\">\n      <Project>{7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\">\n      <Project>{476ee43e-e93b-4019-b8b7-ad52c4216456}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics.MojoProcessor</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\">\n      <Project>{63486463-8aee-483e-862a-7720cd62b4df}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Media</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Platforms\\Kni.Platform.SDL2.GL.csproj\">\n      <Project>{6D75E618-19CA-4C51-9546-F10965FBC0B8}</Project>\n      <Name>XNA.Framework.DesktopGL</Name>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Tests/Kni.Tests.WinForms.DX11.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>\n    <TargetFrameworks>net8.0-windows</TargetFrameworks>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ProjectGuid>{DED2DDB6-D4BE-656D-2E54-657374732E57}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Kni.Tests</RootNamespace>\n    <AssemblyName>Kni.Tests</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <OutputPath>bin\\WindowsDX11\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\WindowsDX11\\$(Platform)\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>$(DefineConstants);KNI;WINDOWSDX</DefineConstants>\n    <LangVersion>Default</LangVersion>\n    <StartupObject>Kni.Tests.Program</StartupObject>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"NUnitLite\" Version=\"3.14.0\" />\n    <PackageReference Include=\"NUnit3TestAdapter\" Version=\"3.17.0\" />\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.10.0\" />\n    <PackageReference Include=\"System.Drawing.Common\" Version=\"8.0.6\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX\" />\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX.DXGI\" />\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Compile Include=\"Components\\DrawFrameNumberComponent.cs\" />\n    <Compile Include=\"Components\\FlexibleGameComponent.cs\" />\n    <Compile Include=\"Components\\ImplicitDrawOrderComponent.cs\" />\n    <Compile Include=\"Components\\InitializeOrderComponent.cs\" />\n    <Compile Include=\"Components\\Simple3DCubeComponent.cs\" />\n    <Compile Include=\"Components\\SpaceshipModelDrawComponent.cs\" />\n    <Compile Include=\"Components\\VisualTestDrawableGameComponent.cs\" />\n    <Compile Include=\"Components\\VisualTestGameComponent.cs\" />\n    <Compile Include=\"Components\\Colored3DCubeComponent.cs\" />\n    <Compile Include=\"Components\\TexturedQuadComponent.cs\" />\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Compile Include=\"ContentPipeline\\BuilderTargetsTest.cs\" />\n    <Compile Include=\"ContentPipeline\\AssetTestClasses.cs\" />\n    <Compile Include=\"ContentPipeline\\AudioContentTests.cs\" />\n    <Compile Include=\"ContentPipeline\\BitmapContentTests.cs\" />\n    <Compile Include=\"ContentPipeline\\ContentCompilerTest.cs\" />\n    <Compile Include=\"ContentPipeline\\EffectProcessorTests.cs\" />\n    <Compile Include=\"ContentPipeline\\FbxImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\FontDescriptionTests.cs\" />\n    <Compile Include=\"ContentPipeline\\FontTextureProcessorTests.cs\" />\n    <Compile Include=\"ContentPipeline\\FontDescriptionProcessorTests.cs\" />\n    <Compile Include=\"ContentPipeline\\IntermediateDeserializerTest.cs\" />\n    <Compile Include=\"ContentPipeline\\IntermediateSerializerTest.cs\" />\n    <Compile Include=\"ContentPipeline\\MeshBuilderTests.cs\" />\n    <Compile Include=\"ContentPipeline\\MeshHelperTest.cs\" />\n    <Compile Include=\"ContentPipeline\\ModelProcessorTests.cs\" />\n    <Compile Include=\"ContentPipeline\\Mp3ImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\OggImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\TestCompiler.cs\" />\n    <Compile Include=\"ContentPipeline\\OpenAssetImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\TestImporterContext.cs\" />\n    <Compile Include=\"ContentPipeline\\TextureContentTests.cs\" />\n    <Compile Include=\"ContentPipeline\\TextureImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\TextureProcessorTests.cs\" />\n    <Compile Include=\"ContentPipeline\\WavImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\WmaImporterTests.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework\\BoundingTest.cs\" />\n    <Compile Include=\"Framework\\ColorTest.cs\" />\n    <Compile Include=\"Framework\\CurveKeyCollectionTest.cs\" />\n    <Compile Include=\"Framework\\CurveKeyTest.cs\" />\n    <Compile Include=\"Framework\\CurveTest.cs\" />\n    <Compile Include=\"Framework\\EnumConformingTest.cs\" />\n    <Compile Include=\"Framework\\FrameworkDispatcherTest.cs\" />\n    <Compile Include=\"Framework\\MathHelperTest.cs\" />\n    <Compile Include=\"Framework\\MatrixTest.cs\" />\n    <Compile Include=\"Framework\\PackedVectorTest.cs\" />\n    <Compile Include=\"Framework\\PlaneTest.cs\" />\n    <Compile Include=\"Framework\\QuaternionTest.cs\" />\n    <Compile Include=\"Framework\\RayTest.cs\" />\n    <Compile Include=\"Framework\\RectangleTest.cs\" />\n    <Compile Include=\"Framework\\TitleContainerTest.cs\" />\n    <Compile Include=\"Framework\\UtilitiesTest.cs\" />\n    <Compile Include=\"Framework\\Vector2Test.cs\" />\n    <Compile Include=\"Framework\\Vector3Test.cs\" />\n    <Compile Include=\"Framework\\Vector4Test.cs\" />\n    <Compile Include=\"Framework\\VertexTests.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Audio\\SoundEffectTest.cs\" />\n    <Compile Include=\"Framework.Audio\\XactTest.cs\" />\n    <Compile Include=\"Framework.Audio\\DynamicSoundEffectInstanceTest.cs\" />\n    <Compile Include=\"Framework.Audio\\SoundEffectInstanceTest.cs\" />\n    <Compile Include=\"Framework.Audio\\XAudio\\SoundEffectInstanceXAudioTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Game\\GameComponentTest.cs\" />\n    <Compile Include=\"Framework.Game\\GameTest.cs\" />\n    <Compile Include=\"Framework.Game\\GameTest+Methods.cs\" />\n    <Compile Include=\"Framework.Game\\GameTest+Properties.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Graphics\\BlendStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\EffectTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsAdapterTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsDeviceTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\MiscellaneousTests.cs\" />\n    <Compile Include=\"Framework.Graphics\\IndexBufferTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture2DNonVisualTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture3DNonVisualTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\DepthStencilStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsDeviceManagerTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RasterizerStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RenderTarget2DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RenderTargetCubeTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SamplerStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ScissorRectangleTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture2DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture3DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\TextureCubeTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\VertexBufferTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\VisualMiscellaneousTests.cs\" />\n    <Compile Include=\"Framework.Graphics\\ShaderTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SpriteBatchTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SpriteFontTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ViewportTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ModelTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\OcclusionQueryTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ProfileReachTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Input\\GamePadTest.cs\" />\n    <Compile Include=\"Framework.Input\\JoystickTest.cs\" />\n    <Compile Include=\"Framework.Input\\KeyboardTest.cs\" />\n    <Compile Include=\"Framework.Input\\MouseTest.cs\" />\n    <Compile Include=\"Framework.Input\\TouchCollectionTest.cs\" />\n    <Compile Include=\"Framework.Input\\TouchLocationTest.cs\" />\n    <Compile Include=\"Framework.Input\\TouchPanelTest.cs\" />\n    <Compile Include=\"Framework.Input\\GestureRecognizerTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Runner\\ContentPipeline\\AssetTestUtility.cs\" />\n    <Compile Include=\"Runner\\ContentPipeline\\TestContentBuildLogger.cs\" />\n    <Compile Include=\"Runner\\ContentPipeline\\TestProcessorContext.cs\" />\n    <Compile Include=\"Runner\\Constants.cs\" />\n    <Compile Include=\"Runner\\Extensions.cs\" />\n    <Compile Include=\"Runner\\FrameInfo.cs\" />\n    <Compile Include=\"Runner\\FramePixelData.cs\" />\n    <Compile Include=\"Runner\\FramePixelData.Desktop.cs\" />\n    <Compile Include=\"Runner\\PixelArgb.cs\" />\n    <Compile Include=\"Runner\\Utility.cs\" />\n    <Compile Include=\"Runner\\Program.cs\" />\n    <Compile Include=\"Runner\\GameBase\\CountCallsGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\FixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\MockGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\TestGameBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\GraphicsDeviceTestFixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\VisualTestFixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\VisualTestGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\FrameCompareComponent.cs\" />\n    <Compile Include=\"Runner\\GameBase\\PixelDeltaFrameComparer.cs\" />\n    <Compile Include=\"Runner\\GameBase\\UpdateGuard.cs\" />\n    <Compile Include=\"Utilities\\ActionDaemon.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xgs\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xsb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xwb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_11hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_22hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_44hz_32bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_44hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_88hz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_11hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_11hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_22hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_22hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_44hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.mp3\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.ogg\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.wma\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_11hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_11hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_22hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_22hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_44hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_44hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_8bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_16bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_24bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_float.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_float.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_imaadpcm.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_imaadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_msadpcm.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_msadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_8bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_16bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_24bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_float.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_float.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_imaadpcm.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_imaadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_msadpcm.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_msadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\tests.xsl\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\AlphaTestEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\AlphaTestEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\BasicEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\BasicEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\DualTextureEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\DualTextureEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\EnvironmentMapEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\EnvironmentMapEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\SkinnedEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\SkinnedEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\SpriteEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\SpriteEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Common.fxh\">\n      <Link>Assets\\Effects\\Stock\\Common.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Lighting.fxh\">\n      <Link>Assets\\Effects\\Stock\\Lighting.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Macros.fxh\">\n      <Link>Assets\\Effects\\Stock\\Macros.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Structures.fxh\">\n      <Link>Assets\\Effects\\Stock\\Structures.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\DefinesTest.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\Instancing.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\ParserTest.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\PreprocessorInclude.fxh\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\PreprocessorTest.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\TextureArrayEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\VertexTextureEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Effects\\Bevels.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\BlackOut.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\ColorFlip.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\Grayscale.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\HighContrast.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\Invert.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\NoEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_s0s1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_x.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_t0t1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_t1t0.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OldSyntax_s0s1t0t1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\NewSyntax_t0t1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\NewSyntax_s0s1t0t1.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\DeferredBasicEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OptimizedMatrix.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\OptimizedMatrixArray.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\RainbowH.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Effects\\ComputeShader.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\CustomSpriteBatchEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\CustomSpriteBatchEffectComparisonSampler.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\BlendState\\VisualTests.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestDepthBufferEnable_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestDepthBufferEnable_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestStencilBuffer.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\DrawInstancedPrimitivesVisualTest.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\VertexTextureVisualTest.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-1.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-3.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-4.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-5.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-6.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-7.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\GetBackBufferData__X_100 Y_100 Width_250 Height_250__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\GetBackBufferData_null_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\Colored3DCube.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-1.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-3.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-4.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-5.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-01.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-03.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-05.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-07.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-09.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-11.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-13.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-15.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-17.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-19.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\TexturedQuad_lighting_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Model\\ShouldDrawSampleModel.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\TexturedQuad_lighting_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_-0.0004f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_1.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_-1.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_CullClockwiseFace_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_CullCounterClockwiseFace_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_None_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestDepthClipEnable_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestDepthClipEnable_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestFillMode_Solid_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestFillMode_WireFrame_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestScissorTestEnable_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestScissorTestEnable_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RenderTarget2D\\GenerateMips.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SamplerState\\VisualTestAddressModes.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SamplerState\\VisualTestComparisonFunction.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\ScissorRectangle\\Draw_without_render_target_change.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\ScissorRectangle\\Draw_with_render_target_change.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\ScissorRectangle\\Draw_with_scissor_rect.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Bevels__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__BlackOut__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__ColorFlip__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Grayscale__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__HighContrast__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Invert__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__NoEffect__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__RainbowH__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_normal.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_0.38f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_1.41f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_2.17f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_2.81f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_0.5f_0.5f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_0.75f_2.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_1.25f_0.8f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_1.5f_1.5f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_without_blend.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_additive_blend.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__GreenYellow__200_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__Red__120_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__White__80_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__GreenYellow__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__Red__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__Teal__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_0_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_1_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_2_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_3_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_4_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_10_10_40_40_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_20_30_80_60_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_30_30_30_50_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_rect.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipHorizontally_ FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipHorizontally_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_BackToFront_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_Deferred_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_FrontToBack_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_Immediate_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_Texture_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_viewport_changing_Deferred_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_viewport_changing_Immediate_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\DrawWithLayerDepth.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_many.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_LayerDepth.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipHorizontally_ FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipHorizontally_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Font_spacing_is_respected.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Hullabaloo.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Hullabaloo2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_CarriageReturn.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_Newline.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_noNewline.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_verbatimString.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Origins_rotated.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Origins_scaled.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Plain.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Rotated.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Scaled.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\DrawWithSRgbFormats_Color_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\DrawWithSRgbFormats_Color_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\DrawWithSRgbFormats_ColorSRgb_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\DrawWithSRgbFormats_ColorSRgb_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\SetDataRowPitch.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Texture2D\\TextureArrayAsRenderTargetAndShaderResource.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Affects_draw_origin.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Clips_SpriteBatch_draws.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Does_not_clip_device_clear.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\01_TheBasics.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\02_Inheritance.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\03_IncludingPrivateMembers.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\04_ExcludingPublicMembers.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\04_ExcludingPublicMembersOutput.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\05_RenamingXmlElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\06_NullReferences.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\07_OptionalElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\08_AllowNull.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\09_Collections.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\10_CollectionItemName.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\11_Dictionaries.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\12_MathTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\13_PolymorphicTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\14_Namespaces.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\15_FlattenContent.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\16_SharedResources.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\17_ExternalReferences.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\18_PrimitiveTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\19_FontDescription.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\20_SystemTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\21_CustomFormatting.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\22_GetterOnlyProperties.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\23_GetterOnlyPolymorphicArrayProperties.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\24_GenericTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\25_StructArrayNoElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\26_ChildCollections.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\27_Colors.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\28_XnaCurve.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Default.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\MonoGameIcon.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Surge.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Localized.spritefont\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Strings.resx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Effects\\DirectX\\CustomSpriteBatchEffect.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\DirectX\\CustomSpriteBatchEffectComparisonSampler.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\DirectX\\GrayScale.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\DirectX\\Instancing.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\DirectX\\TextureArrayEffect.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\DirectX\\VertexTextureEffect.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\Textures\\GlassPane.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Spaceship.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\enemy_0.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Box.blend\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\BlenderDefaultCube.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\dude_2011.fbx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\head.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\jacket.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\pants.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\upBodyC.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\DataFont.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\JingJing.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Lindsey.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Motorwerk.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\QuartzMS.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\SegoeKeycaps.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-1.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\fun-background.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Logo_65x64_16bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Logo_BMPV5.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-monochrome.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-4bits.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.gif\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.jpg\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.tif\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\random_16px_dxt.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\random_16px_dxt_alpha.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\SampleCube64DXT1Mips.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\SampleCube64DXT1Mips.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Sunset.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-R8G8B8.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-X8R8G8B8.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px-mipmaps.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Logo555.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Logo565.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\rgbf.tif\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\sample_1280x853.hdr\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\RGBA16.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\1bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\8bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\24bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\32bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\color_24bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\color_32bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\color_48bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\color_64bit.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\blue_0.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\red_128.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\red_668_dxt.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Projects\\BuildSimpleProject.csproj\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Projects\\Content\\Content.mgcb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Projects\\Content\\ContentFont.spritefont\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"README.md\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1dc4c439-a8a6-4a11-ab3b-a88dcba05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4b8d3f73-bbd2-4057-b86b-8b73b957dc0f}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3f81f76d-f0f3-44fe-a256-40af153c33f7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Design\\Xna.Framework.Design.csproj\">\n      <Project>{e37f98d7-c4e8-4556-b322-aef99638ece1}</Project>\n      <Name>Xna.Framework.Design</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509f44-3566-4b79-bb47-c7c6e2aa2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\">\n      <Project>{acd26013-5730-4caf-9468-3baae867a8a2}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Audio</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\">\n      <Project>{7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\">\n      <Project>{476ee43e-e93b-4019-b8b7-ad52c4216456}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics.MojoProcessor</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\">\n      <Project>{63486463-8aee-483e-862a-7720cd62b4df}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Media</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Platforms\\Kni.Platform.WinForms.DX11.csproj\">\n      <Project>{7de47032-a904-4c29-bd22-2d235e8d91ba}</Project>\n      <Name>XNA.Framework.WindowsDX11</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Tools\\MonoGame.Content.Builder\\MGCB.csproj\">\n      <Project>{4243474D-572E-6E69-646F-77734D474342}</Project>\n      <Name>MGCB</Name>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Tests/Kni.Tests.XNA.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{7134181E-E02F-482F-9250-343ABC60E861}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Kni.Tests</RootNamespace>\n    <AssemblyName>Kni.Tests.XNA</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\XNA\\Debug\\</OutputPath>\n    <IntermediateOutputPath>obj\\XNA\\Debug\\</IntermediateOutputPath>\n    <DefineConstants>TRACE;DEBUG;XNA</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <PlatformTarget>x86</PlatformTarget>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\XNA\\Release\\</OutputPath>\n    <IntermediateOutputPath>obj\\XNA\\Release\\</IntermediateOutputPath>\n    <DefineConstants>TRACE;XNA</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <PlatformTarget>x86</PlatformTarget>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug-CLI|AnyCPU'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\XNA\\Debug-CLI\\</OutputPath>\n    <IntermediateOutputPath>obj\\XNA\\Debug-CLI\\</IntermediateOutputPath>\n    <DefineConstants>TRACE;DEBUG;XNA</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>\n    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>\n    <CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup>\n    <StartupObject />\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\" />\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\" />\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.AudioImporters, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\" />\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.FBXImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\" />\n    <Reference Include=\"Microsoft.Xna.Framework.Content.Pipeline.TextureImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\" />\n    <Reference Include=\"Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\" />\n    <Reference Include=\"Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\" />\n    <Reference Include=\"Microsoft.Xna.Framework.Xact, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"nunit.framework\">\n      <HintPath>..\\ThirdParty\\NUnit\\3.9.0\\net40\\nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunitlite\">\n      <HintPath>..\\ThirdParty\\NUnit\\3.9.0\\net40\\nunitlite.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\src\\Xna.Framework.Graphics\\Graphics\\Utilities\\DxtDecoder.cs\">\n      <Link>Utilities\\DxtDecoder.cs</Link>\n    </Compile>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Components\\DrawFrameNumberComponent.cs\" />\n    <Compile Include=\"Components\\FlexibleGameComponent.cs\" />\n    <Compile Include=\"Components\\ImplicitDrawOrderComponent.cs\" />\n    <Compile Include=\"Components\\InitializeOrderComponent.cs\" />\n    <Compile Include=\"Components\\Simple3DCubeComponent.cs\" />\n    <Compile Include=\"Components\\VisualTestGameComponent.cs\" />\n    <Compile Include=\"Components\\VisualTestDrawableGameComponent.cs\" />\n    <Compile Include=\"Components\\Colored3DCubeComponent.cs\" />\n    <Compile Include=\"Components\\TexturedQuadComponent.cs\" />\n    <Compile Include=\"Components\\SpaceshipModelDrawComponent.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"ContentPipeline\\AssetTestClasses.cs\" />\n    <Compile Include=\"ContentPipeline\\AudioContentTests.cs\" />\n    <Compile Include=\"ContentPipeline\\BitmapContentTests.cs\" />\n    <Compile Include=\"ContentPipeline\\FbxImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\FontDescriptionTests.cs\" />\n    <Compile Include=\"ContentPipeline\\IntermediateDeserializerTest.cs\" />\n    <Compile Include=\"ContentPipeline\\IntermediateSerializerTest.cs\" />\n    <Compile Include=\"ContentPipeline\\MeshBuilderTests.cs\" />\n    <Compile Include=\"ContentPipeline\\MeshHelperTest.cs\" />\n    <Compile Include=\"ContentPipeline\\ModelProcessorTests.cs\" />\n    <Compile Include=\"ContentPipeline\\Mp3ImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\TestImporterContext.cs\" />\n    <Compile Include=\"ContentPipeline\\TextureContentTests.cs\" />\n    <Compile Include=\"ContentPipeline\\TextureProcessorTests.cs\" />\n    <Compile Include=\"ContentPipeline\\WavImporterTests.cs\" />\n    <Compile Include=\"ContentPipeline\\WmaImporterTests.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework\\ColorTest.cs\" />\n    <Compile Include=\"Framework\\CurveKeyCollectionTest.cs\" />\n    <Compile Include=\"Framework\\CurveKeyTest.cs\" />\n    <Compile Include=\"Framework\\CurveTest.cs\" />\n    <Compile Include=\"Framework\\EnumConformingTest.cs\" />\n    <Compile Include=\"Framework\\FrameworkDispatcherTest.cs\" />\n    <Compile Include=\"Framework\\MatrixTest.cs\" />\n    <Compile Include=\"Framework\\PackedVectorTest.cs\" />\n    <Compile Include=\"Framework\\PlaneTest.cs\" />\n    <Compile Include=\"Framework\\QuaternionTest.cs\" />\n    <Compile Include=\"Framework\\RectangleTest.cs\" />\n    <Compile Include=\"Framework\\TitleContainerTest.cs\" />\n    <Compile Include=\"Framework\\Vector2Test.cs\" />\n    <Compile Include=\"Framework\\Vector3Test.cs\" />\n    <Compile Include=\"Framework\\Vector4Test.cs\" />\n    <Compile Include=\"Framework\\VertexTests.cs\" />\n    <Compile Include=\"Framework\\BoundingTest.cs\" />\n    <Compile Include=\"Framework\\MathHelperTest.cs\" />\n    <Compile Include=\"Framework\\RayTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Audio\\DynamicSoundEffectInstanceTest.cs\" />\n    <Compile Include=\"Framework.Audio\\SoundEffectInstanceTest.cs\" />\n    <Compile Include=\"Framework.Audio\\SoundEffectTest.cs\" />\n    <Compile Include=\"Framework.Audio\\XactTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Game\\GameComponentTest.cs\" />\t  \n    <Compile Include=\"Framework.Game\\GameTest.cs\" />\n    <Compile Include=\"Framework.Game\\GameTest+Properties.cs\" />\n    <Compile Include=\"Framework.Game\\GameTest+Methods.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Graphics\\DepthStencilStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\EffectTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsAdapterTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsDeviceManagerTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\GraphicsDeviceTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\MiscellaneousTests.cs\" />\n    <Compile Include=\"Framework.Graphics\\ModelTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\OcclusionQueryTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ProfileReachTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RasterizerStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RenderTarget2DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\RenderTargetCubeTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SamplerStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ScissorRectangleTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ShaderTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SpriteBatchTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\SpriteFontTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture2DNonVisualTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture2DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture3DNonVisualTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\Texture3DTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\TextureCubeTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\VertexBufferTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\ViewportTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\VisualMiscellaneousTests.cs\" />\n    <Compile Include=\"Framework.Graphics\\BlendStateTest.cs\" />\n    <Compile Include=\"Framework.Graphics\\IndexBufferTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Framework.Input\\GamePadTest.cs\" />\n    <Compile Include=\"Framework.Input\\KeyboardTest.cs\" />\n    <Compile Include=\"Framework.Input\\MouseTest.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Runner\\ContentPipeline\\AssetTestUtility.cs\" />\n    <Compile Include=\"Runner\\ContentPipeline\\TestContentBuildLogger.cs\" />\n    <Compile Include=\"Runner\\ContentPipeline\\TestProcessorContext.cs\" />\n    <Compile Include=\"Runner\\Constants.cs\" />\n    <Compile Include=\"Runner\\Extensions.cs\" />\n    <Compile Include=\"Runner\\FrameInfo.cs\" />\n    <Compile Include=\"Runner\\FramePixelData.cs\" />\n    <Compile Include=\"Runner\\FramePixelData.Desktop.cs\" />\n    <Compile Include=\"Runner\\GameBase\\CountCallsGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\FixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\MockGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\GraphicsDeviceTestFixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\TestGameBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\VisualTestFixtureBase.cs\" />\n    <Compile Include=\"Runner\\GameBase\\VisualTestGame.cs\" />\n    <Compile Include=\"Runner\\GameBase\\FrameCompareComponent.cs\" />\n    <Compile Include=\"Runner\\GameBase\\PixelDeltaFrameComparer.cs\" />\n    <Compile Include=\"Runner\\GameBase\\UpdateGuard.cs\" />\n    <Compile Include=\"Runner\\PixelArgb.cs\" />\n    <Compile Include=\"Runner\\Program.cs\" />\n    <Compile Include=\"Runner\\Utility.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Utilities\\ActionDaemon.cs\" />\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\AlphaTestEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\AlphaTestEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\BasicEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\BasicEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\DualTextureEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\DualTextureEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\EnvironmentMapEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\EnvironmentMapEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\SkinnedEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\SkinnedEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\SpriteEffect.fx\">\n      <Link>Assets\\Effects\\Stock\\SpriteEffect.fx</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Common.fxh\">\n      <Link>Assets\\Effects\\Stock\\Common.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Lighting.fxh\">\n      <Link>Assets\\Effects\\Stock\\Lighting.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Macros.fxh\">\n      <Link>Assets\\Effects\\Stock\\Macros.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\Platforms\\Graphics\\Effect\\Shaders\\Structures.fxh\">\n      <Link>Assets\\Effects\\Stock\\Structures.fxh</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_11hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_22hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_44hz_32bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_44hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\bark_mono_88hz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_11hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_11hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_22hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_22hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\blast_mono_44hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.mp3\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo.wma\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_11hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_11hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_22hz.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_22hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_44hz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\rock_loop_stereo_44hz_adpcm_ms.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_24bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_float.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_16bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_24bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_8bit.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_float.wav\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\head.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\jacket.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\pants.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\upBodyC.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\BlendState\\VisualTests.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestDepthBufferEnable_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestDepthBufferEnable_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\DepthStencilState\\VisualTestStencilBuffer.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-1.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-3.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-4.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-5.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-6.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\Clear-7.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\DrawInstancedPrimitivesVisualTest.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\GetBackBufferData_null_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\GetBackBufferData__X_100 Y_100 Width_250 Height_250__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\GraphicsDevice\\VertexTextureVisualTest.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\Colored3DCube.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-1.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-3.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-4.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\DrawOrder_falls_back_to_order_of_addition_to_Game-5.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-01.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-03.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-05.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-07.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-09.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-11.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-13.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-15.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-17.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\SpaceshipModel-19.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\TexturedQuad_lighting_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Miscellaneous\\TexturedQuad_lighting_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Model\\ShouldDrawSampleModel.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_-0.0004f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_-1.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\DepthBiasVisualTest_1.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_CullClockwiseFace_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_CullCounterClockwiseFace_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestCullMode_None_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestFillMode_Solid_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestFillMode_WireFrame_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestScissorTestEnable_False_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\RasterizerState\\VisualTestScissorTestEnable_True_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\ScissorRectangle\\Draw_without_render_target_change.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\ScissorRectangle\\Draw_with_render_target_change.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Bevels__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__BlackOut__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__ColorFlip__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Grayscale__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__HighContrast__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__Invert__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__NoEffect__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Shader\\Shader__RainbowH__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\DrawWithLayerDepth.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_many.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_normal.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_0.38f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_1.41f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_2.17f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_rotated_2.81f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_0.5f_0.5f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_0.75f_2.0f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_1.25f_0.8f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_stretched_1.5f_1.5f_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_without_blend.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_additive_blend.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__GreenYellow__200_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__Red__120_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_alpha_blending__White__80_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__GreenYellow__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__Red__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_filter_color__Teal__.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_0_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_1_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_2_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_3_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_matrix_4_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_10_10_40_40_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_20_30_80_60_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_and_dest_rect_30_30_30_50_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_source_rect.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipHorizontally_ FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipHorizontally_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteEffects_FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_BackToFront_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_Deferred_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_FrontToBack_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_SpriteSortMode_Immediate_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_viewport_changing_Deferred_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteBatch\\Draw_with_viewport_changing_Immediate_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_LayerDepth.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipHorizontally_ FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipHorizontally_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Draw_with_SpriteEffects_FlipVertically_.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Font_spacing_is_respected.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Hullabaloo.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Hullabaloo2.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_CarriageReturn.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_Newline.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_noNewline.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Multiline_verbatimString.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Origins_rotated.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Origins_scaled.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Plain.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Rotated.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\SpriteFont\\Scaled.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Affects_draw_origin.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Clips_SpriteBatch_draws.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\ReferenceImages\\Viewport\\Does_not_clip_device_clear.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\tests.xsl\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\blue_0.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\lines-diag-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.bmp\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.gif\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.jpg\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.tga\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\LogoOnly_64px.tif\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\red_128.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\SampleCube64DXT1Mips.dds\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\01_TheBasics.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\02_Inheritance.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\03_IncludingPrivateMembers.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\04_ExcludingPublicMembers.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\04_ExcludingPublicMembersOutput.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\05_RenamingXmlElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\06_NullReferences.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\07_OptionalElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\08_AllowNull.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\09_Collections.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\10_CollectionItemName.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\11_Dictionaries.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\12_MathTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\13_PolymorphicTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\14_Namespaces.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\15_FlattenContent.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\16_SharedResources.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\17_ExternalReferences.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\Default.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\MonoGameIcon.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\Surge.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\Bevels.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\BlackOut.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\ColorFlip.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\Grayscale.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\HighContrast.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\Invert.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\NoEffect.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\OldSyntax_s0s1.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\OldSyntax_x.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\OldSyntax_t0t1.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\OldSyntax_t1t0.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\OldSyntax_s0s1t0t1.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Effects\\XNA\\RainbowH.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\GlassPane.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Spaceship.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\enemy_0.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Fonts\\DataFont.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-1.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-128.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-32.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\white-64.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Textures\\fun-background.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\18_PrimitiveTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\20_SystemTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\21_CustomFormatting.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\22_GetterOnlyProperties.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\23_GetterOnlyPolymorphicArrayProperties.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\24_GenericTypes.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\25_StructArrayNoElements.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\26_ChildCollections.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\27_Colors.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Xml\\28_XnaCurve.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\Xml\\19_FontDescription.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xgs\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xsb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\Win\\Tests.xwb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_16bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_8bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_mono_44khz_msadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_16bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_8bit.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Audio\\tone_stereo_44khz_msadpcm.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <None Include=\"Assets\\Effects\\XNA\\CustomSpriteBatchEffect.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Assets\\Effects\\XNA\\Instancing.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Assets\\Fonts\\JingJing.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Assets\\Fonts\\Lindsey.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Assets\\Fonts\\Motorwerk.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Assets\\Fonts\\QuartzMS.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Assets\\Fonts\\SegoeKeycaps.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <Content Include=\"Assets\\Models\\BlenderDefaultCube.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Models\\Dude\\dude.fbx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <None Include=\"Assets\\Textures\\random_16px_dxt.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Assets\\Textures\\random_16px_dxt_alpha.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <Content Include=\"Assets\\Textures\\red_668_dxt.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <None Include=\"Assets\\Textures\\SampleCube64DXT1Mips.xnb\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Service Include=\"{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Tests/Kni.Tests.XNA.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34728.123\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Kni.Tests.XNA\", \"Kni.Tests.XNA.csproj\", \"{7134181E-E02F-482F-9250-343ABC60E861}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug-CLI|Any CPU = Debug-CLI|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{7134181E-E02F-482F-9250-343ABC60E861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7134181E-E02F-482F-9250-343ABC60E861}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7134181E-E02F-482F-9250-343ABC60E861}.Debug-CLI|Any CPU.ActiveCfg = Debug-CLI|Any CPU\n\t\t{7134181E-E02F-482F-9250-343ABC60E861}.Debug-CLI|Any CPU.Build.0 = Debug-CLI|Any CPU\n\t\t{7134181E-E02F-482F-9250-343ABC60E861}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7134181E-E02F-482F-9250-343ABC60E861}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {581AF8D9-A313-4EF4-B330-CD28DAF22414}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"KNI Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"KNI Tests\")]\n[assembly: AssemblyCopyright(\"Copyright ©2022 MonoGame Team, ©2022-2024 Nick Kastellanos\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"09287fd6-b28b-45d0-af82-678b1365006e\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Tests/README.md",
    "content": "# KNI Tests\n\nThe KNI Tests run against XNA on Windows and KNI on Windows,\nmacOS and Linux.  They serve as an assurance that KNI conforms\nas closely as possible to XNA.\n\nSimple unit tests make assertions about KNI's core class\nproperties, methods and behavior to guarantee compatibility with XNA in\nthose regards.  Additionally, visual tests verify via frame capture and\ncomparison that KNI renders equivalently to XNA.\n\nCurrently, on Windows, the tests can be run using NUnit and target\neither XNA or KNI.  On macOS and Linux, the tests target\nKNI and are implemented in an executable assembly that can be run\nand debugged directly.  After execution using the custom test runner,\nand HTML report of the results will be loaded in your default browser,\nand a log of stdout can be found in bin\\$(Configuration)\\stdout.txt.\n\n*Note: Currently there is no way to skip or select certain tests to run\nusing the custom runner.  This functionality is coming soon.*\n\n## Rendering Tests\n\nMost rendering tests do not require a game loop, but just need a\nGraphicsDevice to be able to render things. These tests can inherit from\nGraphicsDeviceTestFixtureBase and use the supplied GraphicsDevice 'gd'\nto render. Tests that require rendering were formerly implemented with\nthe VisualTestFixtureBase (we call these \"visual tests\"), but this is no\nlonger recommended unless the test requires an actual Game loop or tests\nfunctionality of the Game class itself because these tests are slower\nand harder to implement. When creating a new rendering test, the first\nrun will fail because there is no reference image. Running the test will\ncapture and save the result. Run the test with the XNA test project to\nget a reference image that checks XNA compatibility, or with MG to make\nsure no regression occurs. After adding the captured frame as a\nreference image, the test should pass.\n\n\n### GraphicsDeviceTestFixtureBase\n\nThere are 3 methods in GraphicsDeviceTestFixtureBase that can be used to\ncapture a frame and compare it to a reference image.\n\n- `PrepareFrameCapture`: Call this before rendering, so a RenderTarget can be\nprepared and set as the target for the GraphicsDevice. Optionally pass\nin the amount of frames you expect to capture. This is used for naming\nthe captures when saving them (i.e. frame1.png or frame001.png) and\nthe amount of captured frames will also be checked explicitly unless\nthe ExactNumberSubmits flag is set to false.\n- `SubmitFrame`: Store the content of the render target in a list of\nsubmitted frames\n- `CheckFrames`: Call this when all frames are submitted. Checks all\nsubmitted frames against reference images if they can be found. Will\nalso write out the captured image and a diff of captured image vs\nreference image if required by the WriteCapture and WriteDiffs settings.\nCompared frames get a similarity score between 0 and 1. If this score is\nhigher than the set Similarity the test will pass.\nFor ease of use, when no frame was submitted but PrepareFrameCapture has\nbeen called, this will submit a frame. Because of this tests that only\nsubmit one frame just need to be wrapped in PrepareFrameCapture/CheckFrames\ncalls and can render as usual in between.\n\n\nIf you still think you need a visual test to properly test a feature,\nread the paragraphs below to get a sense of how to get started.\n\nKNI's visual tests are implemented as ```Game```s and\n```GameComponent```s whose output is captured and compared to known-good\nreference renderings.  Performance is ignored in these tests:  the focus\nhere is correct drawing.\n\n### Workflow for Implementing a Visual Test\n\nA good visual test, like any good test, should perform the minimum work\nnecessary to verify that the functionality under test is correct.  As\nmuch as possible, drawing and test code should be made modular by\ninheriting from ```GameComponent```, ```DrawableGameComponent```,\n```VisualTestGameComponent```, or ```VisualTestDrawableGameComponent```\nto encourage reuse, rather than duplication, in other tests.\n\nHere is one possible workflow for implementing a visual test (assuming\nthe test fixture is already set up):\n\n> Before you start:  \n> Examine the existing visual tests to get a sense of how components\n> are being composed into a test and what components may already\n> satisfy part of the requirements of the new test.\n\n\n1. Implement any new drawing logic needed in a new subclass of one of\n   the \\*Component base classes.\n\n2. Compose your test Game in a new [Test] method.  As this stage, you\n   can run the new test directly to visually verify the rendering.\n\n3. Add a FrameCompareComponent to your test Game with at least one\n   IFrameComparer implementation.  Use the ```FrameCompareComponent```'s\n   predicate to capture and compare frames.\n\n4. Pass the FrameCompareComponent.Results to the diffing, logging and\n   assertion utility methods provided by ```VisualTestFixtureBase```\n\n5. The first time a visual test is run, it will fail for lack of\n   reference images to compare the captured images to.  However, it will\n   write the captured frames to bin\\$(Configuration)\\CapturedFrames\\{TestDir}.\n\n6. Proof the images generated from the first run to ensure that they are\n   correct, then add them to the test project in\n   Assets\\ReferenceImages\\$TestDir.  **Be sure to add them in the\n   projects for all platforms!**  These files should have their build\n   actions set to \"Compile\" and \"Copy if newer\".\n\n7. Rerun the visual test.  The reference images should be copied into\n   place and the test should now pass.\n\n8. XOR diffs between the reference images and captured frames are output\n   into bin\\$(Configuration)\\Diffs\\{TestDir} for debugging purposes.\n\n\n### Notes For Implementing Correct Visual Tests\n\n- **Visual tests must be marked as [RequiresSTA] to work correctly on\n  all platforms**\n- Try not to rely on ```GameComponent.Update```, since capturing frames\n  can make the game run slowly and result in multiple Update calls per\n  Draw.  Instead, inherit from ```VisualTestGameComponent``` or\n  ```VisualTestDrawableGameComponent``` and override\n  ```UpdateOncePerDraw```.\n- For similarity thresholds, prefer Constants.StandardRequiredSimilarity\n  unless there is a very good reason to choose another value.  This will\n  allow the strictness of all the tests to be adjusted together in the\n  future, as requirements change.\n- Use the Paths static class to reduce typos in resource paths.\n\n## Special Considerations\n\n- For new test fixtures, call Paths.SetStandardWorkingDirectory() in\n  [SetUp] \\(VisualTestBase does this for you\\) to ensure that the\n  ```ContentManager``` can find your assets on all platforms.\n- Note that all platforms are forced to run in Synchronous mode and\n  that this doesn't always work perfectly on all platforms yet.\n\n## NUnit Configuration\n\nThere are a few things to know about running these tests under NUnit:\n\n- You must run the -x86 versions of NUnit, because XNA won't work with\n  the 64-bit versions.\n- You must disable shadow copying because having it enabled makes it\n  impossible for the ContentManager to find any assets.\n  - GUI: Tools > Settings > Test Loader > Advanced\n  - CLI: /noshadow\n- For debugger support, Run tests directly in the NUnit process, (note\n  that this may cause a few-seconds-long hang when exiting NUnit after\n  running a visual test) otherwise choose 'single separate process'\n  - This setting can be found in:\n    ```Tools > Settings > Test Loader > Assembly Isolation```\n"
  },
  {
    "path": "Tests/Runner/Constants.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Kni.Tests\n{\n\tstatic class Constants\n\t{\n\t\tpublic const float StandardRequiredSimilarity = 0.99f;\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/ContentPipeline/AssetTestUtility.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content;\n#if WINDOWSDX || DESKTOPGL || XNA\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n#endif\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    internal static class AssetTestUtility\n    {\n\n        public static Effect LoadEffect(ContentManager content, string effectName)\n        {\n#if WINDOWSDX\n            GraphicsDevice gd = ((IGraphicsDeviceService)content.ServiceProvider.GetService(typeof(IGraphicsDeviceService))).GraphicsDevice;\n            \n            Effect effect = AssetTestUtility.CompileAndLoadEffect(gd, Paths.RawEffect(effectName));\n            return effect;\n#else\n            Effect effect = content.Load<Effect>(Paths.CompiledEffect(effectName));\n            return effect;\n#endif\n        }\n\n        public static Effect CompileAndLoadEffect(GraphicsDevice graphicsDevice, string effectPath)\n        {\n            byte[] effectCode = CompileEffect(graphicsDevice, effectPath);\n            return new Effect(graphicsDevice, effectCode);\n        }\n\n        public static byte[] CompileEffect(GraphicsDevice graphicsDevice, string effectPath)\n        {\n#if WINDOWSDX || DESKTOPGL || XNA\n\n            TargetPlatform targetPlatform = TargetPlatform.Windows;\n#if DESKTOPGL\n            targetPlatform = TargetPlatform.DesktopGL;\n#endif\n\n            EffectProcessor effectProcessor = new EffectProcessor();\n            ContentProcessorContext context = new TestProcessorContext(targetPlatform, \"notused.xnb\");\n            EffectContent effectContent = new EffectContent();\n            effectContent.EffectCode = File.ReadAllText(effectPath);\n            effectContent.Identity = new ContentIdentity(effectPath);\n\n            CompiledEffectContent compiledEffect = effectProcessor.Process(effectContent, context);\n            byte[] effectCode = compiledEffect.GetEffectCode();\n            return effectCode;\n#else // OpenGL\n            throw new NotImplementedException();\n#endif\n        }\n    }\n}"
  },
  {
    "path": "Tests/Runner/ContentPipeline/TestContentBuildLogger.cs",
    "content": "﻿using Microsoft.Xna.Framework.Content.Pipeline;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class TestContentBuildLogger : ContentBuildLogger\n    {\n        public override void LogImportantMessage(string message, params object[] messageArgs)\n        {\n        }\n\n        public override void LogMessage(string message, params object[] messageArgs)\n        {\n        }\n\n        public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Runner/ContentPipeline/TestProcessorContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Kni.Tests.ContentPipeline\n{\n    class TestProcessorContext : ContentProcessorContext\n    {\n        private readonly OpaqueDataDictionary _parameters = new OpaqueDataDictionary();\n        private readonly TargetPlatform _targetPlatform;\n        private readonly GraphicsProfile _targetProfile;\n        private readonly string _outputFilename;\n        private readonly TestContentBuildLogger _logger;\n        internal readonly List<string> _dependencies = new List<string>();\n\n        public TestProcessorContext(TargetPlatform targetPlatform,\n                                    string outputFilename)\n        {\n            _targetPlatform = targetPlatform;\n            _targetProfile = GraphicsProfile.HiDef;\n            _outputFilename = outputFilename;\n            _logger = new TestContentBuildLogger();\n        }\n\n        public override string BuildConfiguration\n        {\n            get { return \"Debug\"; }\n        }\n\n        public override string IntermediateDirectory\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override ContentBuildLogger Logger\n        {\n            get { return _logger; }\n        }\n\n        public override string OutputDirectory\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public override string OutputFilename\n        {\n            get { return _outputFilename; }\n        }\n\n        public override OpaqueDataDictionary Parameters\n        {\n            get { return _parameters; }\n        }\n\n        public override TargetPlatform TargetPlatform\n        {\n            get { return _targetPlatform; }\n        }\n\n        public override GraphicsProfile TargetProfile\n        {\n            get { return _targetProfile; }\n        }\n\n        public override void AddDependency(string filename)\n        {\n            _dependencies.Add(filename);\n        }\n\n        public override void AddOutputFile(string filename)\n        {\n        }\n\n        public override TOutput BuildAndLoadAsset<TInput, TOutput>(ExternalReference<TInput> sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName)\n        {\n            return default(TOutput);\n        }\n\n        public override ExternalReference<TOutput> BuildAsset<TInput, TOutput>(ExternalReference<TInput> sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName, string assetName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override TOutput Convert<TInput, TOutput>(TInput input, string processorName, OpaqueDataDictionary processorParameters)\n        {\n            // MaterialProcessor essentially transforms its\n            // input and returns it... not a copy.  So this\n            // seems like a reasonable shortcut for testing.\n            if (typeof(TOutput) == typeof(MaterialContent) && typeof(TInput).IsAssignableFrom(typeof(MaterialContent)))\n                return (TOutput)((object)input);\n\n            Assembly asm = typeof(ContentProcessor<TInput, TOutput>).Assembly;\n            string typeName = \"Microsoft.Xna.Framework.Content.Pipeline.Processors.\" + processorName;\n            object processorInstance = asm.CreateInstance(typeName);\n            ContentProcessor<TInput, TOutput> processor = (ContentProcessor<TInput, TOutput>)processorInstance;\n            if (processor != null)\n            {\n                Type type = processor.GetType();\n                foreach (var kvp in processorParameters)\n                {\n                    PropertyInfo property = type.GetProperty(kvp.Key);\n                    if (property == null)\n                        continue;\n                    property.SetValue(processor, kvp.Value, null);\n                }\n                return processor.Process(input, this);\n            }\n\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Runner/Extensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Text.RegularExpressions;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n\tstatic class Extensions\n\t{\n\t\tpublic static void Add(\n\t\t\tthis GameComponentCollection self,\n\t\t\tparams IGameComponent[] components)\n\t\t{\n\t\t\tforeach (var component in components)\n\t\t\t\tself.Add(component);\n\t\t}\n\n\t\tpublic static Color ToColor(this string self)\n\t\t{\n\t\t\treturn (Color)typeof(Color).InvokeMember(self, BindingFlags.GetProperty, null, null, null);\n\t\t}\n\n\t\tpublic static FramePixelData ToPixelData(this Texture2D texture)\n\t\t{\n\t\t\tvar data = new Color[texture.Width * texture.Height];\n\t\t\ttexture.GetData(data);\n\t\t\treturn new FramePixelData(texture.Width, texture.Height, data);\n\t\t}\n\n\t\tprivate static readonly char[] ForbiddenFileNameChars = \"{}()\\\"',:\".ToCharArray();\n\n\t\tpublic static string ReplaceInvalidFileNameChars(this string self)\n\t\t{\n\t\t\tvar pattern = \"[\" + Regex.Escape(\n\t\t\t\tnew string(ForbiddenFileNameChars) +\n\t\t\t\tnew string(Path.GetInvalidFileNameChars())) + \"]\";\n\t\t\treturn Regex.Replace(self, pattern, \"_\");\n\t\t}\n\n\t\tpublic static string ReplaceInvalidPathChars(this string self)\n\t\t{\n\t\t\tvar pattern = \"[\" + Regex.Escape(\n\t\t\t\tnew string(ForbiddenFileNameChars) +\n\t\t\t\tnew string(Path.GetInvalidPathChars())) + \"]\";\n\t\t\treturn Regex.Replace(self, pattern, \"_\");\n\t\t}\n\n\t\tpublic static StackFrame FindTestEntryFrame(this StackTrace self)\n\t\t{\n\t\t\tforeach (var stackFrame in self.GetFrames())\n\t\t\t{\n\t\t\t\tvar method = stackFrame.GetMethod();\n\t\t\t\tvar testAttributes = method.GetCustomAttributes(typeof(TestAttribute), false);\n\t\t\t\tif (testAttributes.Length > 0)\n\t\t\t\t\treturn stackFrame;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tpublic static StackFrame GetTestEntryStackFrame(this StackTrace self)\n\t\t{\n\t\t\tvar stackFrame = self.FindTestEntryFrame();\n\t\t\tif (stackFrame == null)\n\t\t\t\tthrow new InvalidOperationException(\n\t\t\t\t\t\"No method marked with TestAttribute was found in this StackTrace\");\n\t\t\treturn stackFrame;\n\t\t}\n\n\t\tpublic static string GetTestFolderName(this TestContext self)\n\t\t{\n\t\t\t// TODO: Add support for a custom attribute to override\n\t\t\t//       the calculated name.\n\t\t\t//var method = self.GetMethod();\n\n\t\t\tvar fullTypeName = self.Test.FullName.Remove(\n\t\t\t\tself.Test.FullName.Length - (self.Test.Name.Length + 1));\n\n\t\t\tvar tokens = fullTypeName.Split('.');\n\t\t\tvar typeName = tokens[tokens.Length - 1];\n\t\t\tif (typeName.EndsWith(\"Test\"))\n\t\t\t\ttypeName = typeName.Remove(typeName.Length - \"Test\".Length);\n\t\t\telse if (typeName.EndsWith(\"Tests\"))\n\t\t\t\ttypeName = typeName.Remove(typeName.Length - \"Tests\".Length);\n\n\t\t\treturn typeName.ReplaceInvalidFileNameChars();\n\t\t}\n\n\t\tpublic static string GetTestFrameFileNameFormat(this TestContext self, int maxFrameNumber)\n\t\t{\n\t\t\t// TODO: Add support for a custom attribute to override\n\t\t\t//       the calculated name.\n\n\t\t\tif (maxFrameNumber == 0)\n\t\t\t\treturn self.Test.Name.ReplaceInvalidFileNameChars() + \"-{0}.png\";\n\t\t\tif (maxFrameNumber == 1)\n\t\t\t\treturn self.Test.Name.ReplaceInvalidFileNameChars() + \".png\";\n\n\t\t\tint numDigits = 1 + (int)Math.Log10(maxFrameNumber + 1);\n\n\t\t\tvar builder = new StringBuilder(self.Test.Name.ReplaceInvalidFileNameChars());\n\t\t\tbuilder.Append(\"-{0:\");\n\t\t\tbuilder.Append('0', numDigits);\n\t\t\tbuilder.Append(\"}.png\");\n\t\t\treturn builder.ToString();\n\t\t}\n\n\t\tpublic static void AddService<T>(this GameServiceContainer serviceProvider, T service)\n\t\t{\n\t\t\tserviceProvider.AddService(typeof(T), service);\n\t\t}\n\n\t\tpublic static T RequireService<T>(this IServiceProvider serviceProvider)\n\t\t{\n\t\t\tvar service = (T)serviceProvider.GetService(typeof(T));\n\t\t\tif (service == null)\n\t\t\t\tthrow new ServiceNotFoundException(typeof(T));\n\t\t\treturn service;\n\t\t}\n\t}\n\n\tclass ServiceNotFoundException : Exception\n\t{\n\t\tpublic ServiceNotFoundException(Type serviceType)\n\t\t\t: base(string.Format(\"Required service of type '{0}' was not found.\", serviceType))\n\t\t{\n\t\t\tif (serviceType == null)\n\t\t\t\tthrow new ArgumentNullException(\"serviceType\");\n\t\t\tServiceType = serviceType;\n\n\t\t}\n\n\t\tpublic Type ServiceType { get; private set; }\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/FrameInfo.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nusing Microsoft.Xna.Framework;\n\nnamespace Kni.Tests\n{\n\tstruct FrameInfo\n\t{\n\t\tpublic int UpdateNumber;\n\t\tpublic int DrawNumber;\n\t\tpublic TimeSpan ElapsedGameTime;\n\t\tpublic TimeSpan TotalGameTime;\n\t\tpublic bool IsRunningSlowly;\n\t\tpublic GameTime GameTime;\n\n\t\tpublic void AdvanceUpdate(GameTime gameTime)\n\t\t{\n\t\t\tUpdateNumber++;\n\t\t\tUpdateGameTime(gameTime);\n\t\t}\n\n\t\tpublic void AdvanceDraw(GameTime gameTime)\n\t\t{\n\t\t\tDrawNumber++;\n\t\t\tUpdateGameTime(gameTime);\n\t\t}\n\n\t\tpublic void Reset()\n\t\t{\n\t\t\tUpdateNumber = 0;\n\t\t\tDrawNumber = 0;\n\t\t\tElapsedGameTime = TimeSpan.Zero;\n\t\t\tTotalGameTime = TimeSpan.Zero;\n\t\t\tIsRunningSlowly = false;\n\t\t}\n\n\t\tpublic void UpdateGameTime(GameTime gameTime)\n\t\t{\n\t\t\tGameTime = gameTime;\n\t\t\tElapsedGameTime = gameTime.ElapsedGameTime;\n\t\t\tTotalGameTime = gameTime.TotalGameTime;\n\t\t\tIsRunningSlowly = gameTime.IsRunningSlowly;\n\t\t}\n\t}\n\n\tinterface IFrameInfoSource\n\t{\n\t\tFrameInfo FrameInfo { get; }\n\t}\n\n\tclass FrameInfoEventArgs : EventArgs\n\t{\n\t\tpublic FrameInfoEventArgs(FrameInfo frameInfo)\n\t\t{\n\t\t\t_frameInfo = frameInfo;\n\t\t}\n\n\t\tprivate readonly FrameInfo _frameInfo;\n\t\tpublic FrameInfo FrameInfo { get { return _frameInfo; } }\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/FramePixelData.Desktop.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Drawing.Imaging;\n\nnamespace Kni.Tests\n{\n    partial class FramePixelData\n    {\n        public static unsafe FramePixelData FromFile(string filename)\n        {\n            using (Bitmap bitmap = (Bitmap)Bitmap.FromFile(filename))\n            {\n                var frame = new FramePixelData(bitmap.Width, bitmap.Height);\n\n                var bitmapData = bitmap.LockBits(\n                    new Rectangle(0, 0, bitmap.Width, bitmap.Height),\n                    ImageLockMode.ReadOnly,\n                    PixelFormat.Format32bppArgb);\n\n                try\n                {\n                    byte* pSourceRow = (byte*)bitmapData.Scan0;\n                    int indexFrame = 0;\n                    for (int y = 0; y < frame.Height; ++y)\n                    {\n                        PixelArgb* pPixel = (PixelArgb*)pSourceRow;\n                        for (int x = 0; x < frame.Width; ++x)\n                        {\n                            frame.Data[indexFrame] = new Microsoft.Xna.Framework.Color(\n                                pPixel->R, pPixel->G, pPixel->B, pPixel->A);\n\n                            indexFrame++;\n                            pPixel++;\n                        }\n                        pSourceRow += bitmapData.Stride;\n                    }\n                }\n                finally\n                {\n                    bitmap.UnlockBits(bitmapData);\n                }\n\n                return frame;\n            }\n        }\n\n        public unsafe void Save(string filename, string attachmentDescription = null)\n        {\n            using (var bitmap = new Bitmap(Width, Height, PixelFormat.Format32bppArgb))\n            {\n                var bitmapData = bitmap.LockBits(\n                    new Rectangle(0, 0, bitmap.Width, bitmap.Height),\n                    ImageLockMode.WriteOnly,\n                    PixelFormat.Format32bppArgb);\n\n                try\n                {\n                    byte* pDestRow = (byte*)bitmapData.Scan0;\n                    int indexFrame = 0;\n                    for (int y = 0; y < Height; ++y)\n                    {\n                        PixelArgb* pPixel = (PixelArgb*)pDestRow;\n                        for (int x = 0; x < Width; ++x)\n                        {\n                            pPixel->R = Data[indexFrame].R;\n                            pPixel->G = Data[indexFrame].G;\n                            pPixel->B = Data[indexFrame].B;\n                            pPixel->A = Data[indexFrame].A;\n\n                            indexFrame++;\n                            pPixel++;\n                        }\n                        pDestRow += bitmapData.Stride;\n                    }\n                }\n                finally\n                {\n                    bitmap.UnlockBits(bitmapData);\n                }\n\n                bitmap.Save(filename);\n\n                if (attachmentDescription != null)\n                {\n                    NUnit.Framework.TestContext.AddTestAttachment(filename, attachmentDescription);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Runner/FramePixelData.cs",
    "content": "using System;\nusing Microsoft.Xna.Framework;\n\nnamespace Kni.Tests\n{\n\tpartial class FramePixelData\n\t{\n\t\tpublic FramePixelData(int width, int height, Color[] data)\n\t\t{\n\t\t\t_width = width;\n\t\t\t_height = height;\n\t\t\t_data = data;\n\t\t}\n\n\t\tpublic FramePixelData(int width, int height)\n\t\t\t: this(width, height, new Color[width * height])\n\t\t{\n\t\t}\n\n\t\tprivate Color[] _data;\n\t\tpublic Color[] Data\n\t\t{\n\t\t\tget { return _data; }\n\t\t}\n\n\t\tprivate int _width;\n\t\tpublic int Width { get { return _width; } }\n\n\t\tprivate int _height;\n\t\tpublic int Height { get { return _height; } }\n\t}\n}\n\n"
  },
  {
    "path": "Tests/Runner/FramePixelData.iOS.cs",
    "content": "using System;\nusing System.IO;\n\nusing MonoTouch.CoreGraphics;\nusing MonoTouch.Foundation;\n\nusing Microsoft.Xna.Framework;\nusing System.Runtime.InteropServices;\nusing MonoTouch.ImageIO;\n\nnamespace MonoGame.Tests\n{\n    partial class FramePixelData\n    {\n        public static FramePixelData FromFile(string path)\n        {\n            // HACK: The path should have been resolved correctly\n            //       before now!\n            //var documentsDir = Environment.GetFolderPath (Environment.SpecialFolder.Personal);\n            //path = Path.Combine(documentsDir, path);\n\n            if (!File.Exists(path))\n                throw new FileNotFoundException(path);\n\n            var extension = Path.GetExtension(path).ToLowerInvariant();\n            CGImage image;\n            switch (extension)\n            {\n                case \".png\":\n                    image = CGImageFromPNGFile(path);\n                    break;\n                case \".jpg\":\n                case \".jpeg\":\n                    image = CGImageFromJPEGFile(path);\n                    break;\n                default:\n                    throw new NotSupportedException(string.Format(\n                        \"FramePixelData.FromFile cannot load images of type: {0}\", extension));\n            }\n\n            try\n            {\n                using (var data = image.DataProvider.CopyData())\n                {\n                    var pixels = new Color[data.Length / 4];\n\n                    for (int i = 0; i < pixels.Length; ++i)\n                    {\n                        int dataIndex = i * 4;\n                        pixels[i].R = data[dataIndex];\n                        pixels[i].G = data[dataIndex + 1];\n                        pixels[i].B = data[dataIndex + 2];\n                        pixels[i].A = data[dataIndex + 3];\n                    }\n\n                    return new FramePixelData(image.Width, image.Height, pixels);\n                }\n            }\n            finally\n            {\n                image.Dispose();\n            }\n        }\n\n        public void Save(string path)\n        {\n            var extension = Path.GetExtension(path).ToLowerInvariant();\n            string uttype;\n            switch (extension)\n            {\n                case \".png\": uttype = \"public.png\"; break;\n                case \".jpg\":\n                case \".jpeg\": uttype = \"public.jpeg\"; break;\n                default:\n                    throw new NotSupportedException(string.Format(\n                        \"FramePixelData.Save cannot save images of type: {0}\", extension));\n            }\n\n            //var documentsDir = Environment.GetFolderPath (Environment.SpecialFolder.Personal);\n\n            var handle = GCHandle.Alloc(_data, GCHandleType.Pinned);\n            try\n            {\n                var sizeOfColor = Marshal.SizeOf(typeof(Color));\n                using (var dataProvider = new CGDataProvider(\n                    handle.AddrOfPinnedObject(), _data.Length * sizeOfColor, false))\n                using (var colorSpace = CGColorSpace.CreateDeviceRGB())\n                using (var image = new CGImage(\n                    Width, Height, 8, 32, Width * sizeOfColor, colorSpace,\n                    CGBitmapFlags.ByteOrder32Little | CGBitmapFlags.First,\n                    dataProvider, null, false, CGColorRenderingIntent.Default))\n                {\n\n                    //var fullPath = Path.Combine (documentsDir, path);\n                    Directory.CreateDirectory(Path.GetDirectoryName(path));\n\n                    var url = NSUrl.FromFilename(Path.GetFullPath(path));\n                    var destination = CGImageDestination.FromUrl(url, uttype, 1);\n                    destination.AddImage(image, null);\n                    if (!destination.Close())\n                        throw new Exception(string.Format(\n                            \"Failed to write the image to '{0}'\", path));\n                }\n            }\n            finally\n            {\n                handle.Free();\n            }\n        }\n\n        private static CGImage CGImageFromPNGFile(string filename)\n        {\n            var provider = new CGDataProvider(filename);\n            return CGImage.FromPNG(provider, null, false, CGColorRenderingIntent.AbsoluteColorimetric);\n        }\n\n        private static CGImage CGImageFromJPEGFile(string filename)\n        {\n            var provider = new CGDataProvider(filename);\n            return CGImage.FromJPEG(provider, null, false, CGColorRenderingIntent.AbsoluteColorimetric);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/CountCallsGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n\tclass CountCallsGame : Game\n\t{\n\t\tpublic int BeginRunCount { get; set; }\n\t\tpublic int InitializeCount { get; set; }\n\t\tpublic int LoadContentCount { get; set; }\n\t\tpublic int UnloadContentCount { get; set; }\n\t\tpublic int UpdateCount { get; set; }\n\t\tpublic int BeginDrawCount { get; set; }\n\t\tpublic int DrawCount { get; set; }\n\t\tpublic int EndDrawCount { get; set; }\n\t\tpublic int EndRunCount { get; set; }\n\t\tpublic int DeactivatedCount { get; set; }\n\t\tpublic int ActivatedCount { get; set; }\n\t\tpublic int ExitingCount { get; set; }\n\t\tpublic int DisposeCount { get; set; }\n\n\t\tpublic void PublicBeginRun() { BeginRun(); }\n\t\tprotected override void BeginRun() { BeginRunCount++; base.BeginRun(); }\n\t\tpublic void PublicInitialize() { Initialize(); }\n\t\tprotected override void Initialize() { InitializeCount++; base.Initialize(); }\n\t\tpublic void PublicLoadContent() { LoadContent(); }\n\t\tprotected override void LoadContent() { LoadContentCount++; base.LoadContent(); }\n\t\tpublic void PublicUnloadContent() { UnloadContent(); }\n\t\tprotected override void UnloadContent() { UnloadContentCount++; base.UnloadContent(); }\n\t\tpublic void PublicUpdate(GameTime gt = null) { Update(gt ?? new GameTime()); }\n\t\tprotected override void Update(GameTime gameTime) { UpdateCount++; base.Update(gameTime); }\n\t\tpublic bool PublicBeginDraw() { return BeginDraw(); }\n\t\tprotected override bool BeginDraw() { BeginDrawCount++; return base.BeginDraw(); }\n\t\tpublic void PublicDraw(GameTime gt) { Draw(gt ?? new GameTime()); }\n\t\tprotected override void Draw(GameTime gameTime) { DrawCount++; base.Draw(gameTime); }\n\t\tpublic bool PublicEndDraw() { return BeginDraw(); }\n\t\tprotected override void EndDraw() { EndDrawCount++; base.EndDraw(); }\n\t\tpublic void PublicEndRun() { EndRun(); }\n\t\tprotected override void EndRun() { EndRunCount++; base.EndRun(); }\n\n#if XNA\n        protected override void OnActivated(object sender, EventArgs args) { ActivatedCount++; base.OnActivated(sender, args); }\n        protected override void OnDeactivated(object sender, EventArgs args) { DeactivatedCount++; base.OnDeactivated(sender, args); }\n        protected override void OnExiting(object sender, EventArgs args) { ExitingCount++; base.OnExiting(sender, args); }\n#else\n\t\tprotected override void OnActivated(EventArgs args) { ActivatedCount++; base.OnActivated(args); }\n\t\tprotected override void OnDeactivated(EventArgs args) { DeactivatedCount++; base.OnDeactivated(args); }\n\t\tprotected override void OnExiting(EventArgs args) { ExitingCount++; base.OnExiting(args); }\n#endif\n\t\tprotected override void Dispose(bool disposing) { DisposeCount++; base.Dispose(disposing); }\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/FixtureBase.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n\tabstract class FixtureBase\n\t{\n\t\tprivate MockGame _game;\n\n\t\tprotected MockGame Game\n\t\t{\n\t\t\tget { return _game; }\n\t\t}\n\n\t\t[SetUp]\n\t\tpublic virtual void SetUp()\n\t\t{\n\t\t\tPaths.SetStandardWorkingDirectory();\n\t\t\t_game = new MockGame();\n\t\t}\n\n\t\t[TearDown]\n\t\tpublic virtual void TearDown()\n\t\t{\n\t\t\t_game.Dispose();\n\t\t\t_game = null;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/FrameCompareComponent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.Concurrent;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing System.Threading;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nusing NUnit.Framework;\n\n// TODO: It's likely that a more sophisticated approach will be required for\n//       comparing images.  In particular, comparing pixel deltas would give\n//       quite a high score to some images that humans would rate as extremely\n//       different to each other.  For example, with PixelDeltaComparer, a\n//       totally white background vs a totally white background with a one-pixel\n//       diagonal line from top-left to bottom-right would be scored in the\n//       (very) high 90s for percent similarity, while no human would rate it\n//       so.  Several passes may be desirable, in fact, to test for color\n//       differences, contrast differences, color-contrast differences, edge\n//       differences, etc.\n\nnamespace Kni.Tests.Components\n{\n\t/// <summary>\n\t/// Defines behavior needed for frames to be scheduled for capture and\n\t/// then manipulated and released.\n\t/// </summary>\n\tinterface IFrameCaptureSource\n\t{\n\t\t/// <summary>\n\t\t/// Schedules a frame capture for the next available Draw cycle.\n\t\t/// </summary>\n\t\tvoid ScheduleFrameCapture();\n\n\t\t/// <summary>\n\t\t/// Gets the captured frame from the last scheduled capture.\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tTexture2D GetCapturedFrame();\n\n\t\t/// <summary>\n\t\t/// Notifies the <see cref=\"IFrameCaptureSource\"/> implementation that\n\t\t/// a called has finished using the texture returned by\n\t\t/// <see cref=\"GetCapturedFrame\"/>.\n\t\t/// </summary>\n\t\t/// <param name=\"frame\"></param>\n\t\tvoid ReleaseCapturedFrame(Texture2D frame);\n\t}\n\n\t/// <summary>\n\t/// Defines methods for comparing two visual frames.\n\t/// </summary>\n\tinterface IFrameComparer\n\t{\n\t\t/// <summary>\n\t\t/// Compares two frames and returns a similarity value from 0.0f\n\t\t/// to 1.0f.\n\t\t/// </summary>\n\t\t/// <param name=\"image\">The image to compare.</param>\n\t\t/// <param name=\"referenceImage\">A ground truth image to compare against.</param>\n\t\t/// <returns>A floating point value from 0.0f to 1.0f that\n\t\t/// represents the similarity of the two frames, according to\n\t\t/// this IFrameComparer implementation.</returns>\n\t\tfloat Compare(FramePixelData image, FramePixelData referenceImage);\n\t}\n\n\tclass FrameCompareComponent : DrawableGameComponent, IEnumerable<IFrameComparer>\n\t{\n\t\tprivate static class Errors\n\t\t{\n\t\t\tpublic const string AtLeastOneFrameComparerRequired =\n\t\t\t\t\"At least one IFrameComparer must be added before capturing and comparing frames\";\n\t\t}\n\n\t\tprivate enum RunState\n\t\t{\n\t\t\tIdle,\n\t\t\tDidScheduleFrameCapture,\n\t\t\tDidCaptureFrame\n\t\t}\n\n\t\tprivate IFrameCaptureSource _frameSource;\n\t\tprivate string _fileNameFormat;\n\t\tprivate string _referenceImageDirectory;\n\n\t\tprivate readonly List<Tuple<IFrameComparer, float>> _frameComparers = new List<Tuple<IFrameComparer, float>>();\n\t\tprivate readonly List<FrameComparisonResult> _results = new List<FrameComparisonResult>();\n\t\tprivate readonly object _resultsSync = new object();\n\n\t\tprivate Thread _workThread;\n\t\tprivate readonly object _workThreadSync = new object();\n\n\t\tpublic FrameCompareComponent(\n\t\t\tGame game, Predicate<FrameInfo> captureWhen,\n\t\t\tstring fileNameFormat, string referenceImageDirectory, string outputDirectory)\n\t\t\t: base(game)\n\t\t{\n\t\t\tif (fileNameFormat == null)\n\t\t\t\tthrow new ArgumentNullException(\"fileNameFormat\");\n\t\t\tif (referenceImageDirectory == null)\n\t\t\t\tthrow new ArgumentNullException(\"compareSourceDirectory\");\n\n\t\t\tCaptureWhen = captureWhen;\n\t\t\t_fileNameFormat = fileNameFormat;\n\t\t\t_referenceImageDirectory = referenceImageDirectory;\n\t\t\tOutputDirectory = outputDirectory;\n\t\t}\n\n\t\tpublic static FrameCompareComponent CreateDefault(\n\t\t\tGame game, Predicate<FrameInfo> captureWhen = null, int maxFrameNumber = 99)\n\t\t{\n\t\t\tvar folderName = TestContext.CurrentContext.GetTestFolderName();\n\t\t\tvar fileNameFormat = TestContext.CurrentContext.GetTestFrameFileNameFormat(maxFrameNumber);\n\n\t\t\treturn new FrameCompareComponent(\n\t\t\t\tgame,\n\t\t\t\tcaptureWhen: captureWhen,\n\t\t\t\tfileNameFormat: fileNameFormat,\n\t\t\t\treferenceImageDirectory: Paths.ReferenceImage(folderName),\n\t\t\t\toutputDirectory: Paths.CapturedFrame(folderName))\n\t\t\t\t{\n\t\t\t\t\t{ new PixelDeltaFrameComparer(), 1 }\n\t\t\t\t};\n\t\t}\n\n\t\tprotected override void Dispose(bool disposing)\n\t\t{\n\t\t\tif (disposing)\n\t\t\t{\n\t\t\t\tif (_workThread != null)\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\t_workThread.Abort();\n\t\t\t\t\t}\n\t\t\t\t\tcatch (ThreadStateException) { }\n\t\t\t\t\t_workThread = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose(disposing);\n\t\t}\n\n\t\tpublic Predicate<FrameInfo> CaptureWhen { get; set; }\n\n\t\tprivate RunState _state = RunState.Idle;\n\t\tprivate RunState State\n\t\t{\n\t\t\tget { return _state; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (_state != value)\n\t\t\t\t{\n\t\t\t\t\t// Debugging only\n\t\t\t\t\t//Console.WriteLine (\"State: {0}->{1}\", _state, value);\n\t\t\t\t\t_state = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic string OutputDirectory { get; set; }\n\n\t\tpublic void Add(IFrameComparer comparer, float weight)\n\t\t{\n\t\t\tif (comparer == null)\n\t\t\t\tthrow new ArgumentNullException(\"comparer\");\n\t\t\tif (weight < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"weight\", \"weight must not be negative\");\n\n\t\t\t_frameComparers.Add(Tuple.Create(comparer, weight));\n\t\t}\n\n\t\tpublic bool Remove(IFrameComparer comparer)\n\t\t{\n\t\t\tfor (int i = 0; i < _frameComparers.Count; ++i)\n\t\t\t{\n\t\t\t\tif (object.Equals(_frameComparers[i], comparer))\n\t\t\t\t{\n\t\t\t\t\t_frameComparers.RemoveAt(i);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic IEnumerable<FrameComparisonResult> Results\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\t// Signal the end of the work items, then wait\n\t\t\t\t// for processing to complete.\n\t\t\t\t_workItems.Add(null);\n\t\t\t\tlock (_resultsSync)\n\t\t\t\t\treturn _results;\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Initialize()\n\t\t{\n\t\t\tbase.Initialize();\n\t\t\t_frameSource = Game.Services.RequireService<IFrameCaptureSource>();\n\t\t}\n\n\t\tpublic override void Update(GameTime gameTime)\n\t\t{\n\t\t\tvar frameInfo = Game.Services.RequireService<IFrameInfoSource>().FrameInfo;\n\n\t\t\tif (State == RunState.DidCaptureFrame)\n\t\t\t\tProcessCapturedFrame();\n\n\t\t\tif (State == RunState.Idle && (CaptureWhen == null || CaptureWhen(frameInfo)))\n\t\t\t\tScheduleFrameCapture();\n\t\t}\n\n\t\tpublic override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tswitch (State)\n\t\t\t{\n\t\t\t\tcase RunState.DidScheduleFrameCapture:\n\t\t\t\t\t// By this point, IFrameSource is processing the\n\t\t\t\t\t// capture request, and will have finished by\n\t\t\t\t\t// the next call to Update.\n\t\t\t\t\tState = RunState.DidCaptureFrame;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tprivate void ScheduleFrameCapture()\n\t\t{\n\t\t\t_frameSource.ScheduleFrameCapture();\n\t\t\tState = RunState.DidScheduleFrameCapture;\n\t\t}\n\n\t\tprivate void ProcessCapturedFrame()\n\t\t{\n\t\t\tvar frame = _frameSource.GetCapturedFrame();\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (_frameComparers.Count == 0)\n\t\t\t\t\tthrow new InvalidOperationException(Errors.AtLeastOneFrameComparerRequired);\n\n\t\t\t\tlock (_workThreadSync)\n\t\t\t\t{\n\t\t\t\t\tif (_workThread == null)\n\t\t\t\t\t{\n\t\t\t\t\t\t_workThread = new Thread(CompareAndWriteWorker);\n\t\t\t\t\t\t_workThread.Priority = ThreadPriority.Lowest;\n\t\t\t\t\t\t_workThread.IsBackground = true;\n\t\t\t\t\t\t_workThread.Start();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar frameInfo = Game.Services.RequireService<IFrameInfoSource>().FrameInfo;\n\n\t\t\t\tvar fileName = string.Format(_fileNameFormat, frameInfo.DrawNumber);\n\n\t\t\t\tstring frameOutputPath = null;\n\t\t\t\tif (OutputDirectory != null)\n\t\t\t\t\tframeOutputPath = Path.Combine(OutputDirectory ?? \".\", fileName);\n\t\t\t\tvar referenceImagePath = Path.Combine(_referenceImageDirectory, fileName);\n\n\t\t\t\tvar textureData = GetTextureData(frame);\n\n\t\t\t\t_workItems.Add(new WorkItem(\n\t\t\t\t\tframeInfo, textureData, frame.Width, frame.Height,\n\t\t\t\t\tframeOutputPath, referenceImagePath,\n\t\t\t\t\t_frameComparers.ToArray()));\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\t_frameSource.ReleaseCapturedFrame(frame);\n\t\t\t\tState = RunState.Idle;\n\t\t\t}\n\t\t}\n\n\t\tprivate BlockingCollection<WorkItem> _workItems =\n\t\t\tnew BlockingCollection<WorkItem>(new ConcurrentQueue<WorkItem>());\n\t\tprivate void CompareAndWriteWorker()\n\t\t{\n\t\t\t// HACK: This should not be needed!\n\t\t\tPaths.SetStandardWorkingDirectory();\n\n\t\t\tlock (_resultsSync)\n\t\t\t{\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tvar workItem = _workItems.Take();\n\t\t\t\t\tif (workItem == null)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tif (workItem.FrameOutputPath != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar directory = Path.GetDirectoryName(workItem.FrameOutputPath);\n\t\t\t\t\t\tif (!Directory.Exists(directory))\n\t\t\t\t\t\t\tDirectory.CreateDirectory(directory);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar framePixelData = new FramePixelData(\n\t\t\t\t\t\tworkItem.TextureWidth, workItem.TextureHeight, workItem.TextureData);\n\t\t\t\t\tvar comparePixelData = LoadOrCreateEmptyFramePixelData(workItem.ReferenceImagePath);\n\n\t\t\t\t\tvar similarity = CompareFrames(\n\t\t\t\t\t\tframePixelData,\n\t\t\t\t\t\tcomparePixelData,\n\t\t\t\t\t\tworkItem.FrameComparers);\n\n\t\t\t\t\tif (workItem.FrameOutputPath != null)\n\t\t\t\t\t{\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tframePixelData.Save(workItem.FrameOutputPath, \"Output\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (IOException)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// FIXME: Report this error somehow.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t_results.Add(new FrameComparisonResult(\n\t\t\t\t\t\tworkItem.FrameInfo.DrawNumber, similarity,\n\t\t\t\t\t\tworkItem.ReferenceImagePath, workItem.FrameOutputPath));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlock (_workThreadSync)\n\t\t\t{\n\t\t\t\t_workThread = null;\n\t\t\t}\n\t\t}\n\n\t\tprivate static float CompareFrames(\n\t\t\tFramePixelData image, FramePixelData referenceImage,\n\t\t\tTuple<IFrameComparer, float>[] frameComparers)\n\t\t{\n\t\t\tfloat sumOfWeights = 0;\n\t\t\tforeach (var item in frameComparers)\n\t\t\t{\n\t\t\t\tsumOfWeights += item.Item2;\n\t\t\t}\n\n\t\t\tfloat similarity = 0;\n\t\t\tforeach (var item in frameComparers)\n\t\t\t{\n\t\t\t\tvar comparer = item.Item1;\n\t\t\t\tvar weight = item.Item2;\n\t\t\t\tsimilarity += comparer.Compare(image, referenceImage) * weight / sumOfWeights;\n\t\t\t}\n\t\t\treturn similarity;\n\t\t}\n\n\t\tprivate Color[] GetTextureData(Texture2D frame)\n\t\t{\n\t\t\tvar data = new Color[frame.Width * frame.Height];\n\t\t\tframe.GetData(data);\n\t\t\treturn data;\n\t\t}\n\n\t\tprivate static FramePixelData LoadOrCreateEmptyFramePixelData(string path)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\treturn FramePixelData.FromFile(path);\n\t\t\t}\n\t\t\tcatch (FileNotFoundException)\n\t\t\t{\n\t\t\t\t// TODO: It would be nice to communicate\n\t\t\t\t//       information about what went wrong, when\n\t\t\t\t//       things go wrong.\n\t\t\t\treturn new FramePixelData(0, 0, new Color[0]);\n\t\t\t}\n\t\t}\n\n\t\tpublic IEnumerator<IFrameComparer> GetEnumerator()\n\t\t{\n\t\t\tforeach (var item in _frameComparers)\n\t\t\t\tyield return item.Item1;\n\t\t}\n\n\t\tSystem.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n\t\t{\n\t\t\tforeach (var item in _frameComparers)\n\t\t\t\tyield return item.Item1;\n\t\t}\n\n\t\tprivate class WorkItem\n\t\t{\n\t\t\tpublic readonly FrameInfo FrameInfo;\n\t\t\tpublic readonly Color[] TextureData;\n\t\t\tpublic readonly int TextureWidth;\n\t\t\tpublic readonly int TextureHeight;\n\t\t\tpublic readonly string FrameOutputPath;\n\t\t\tpublic readonly string ReferenceImagePath;\n\t\t\tpublic readonly Tuple<IFrameComparer, float>[] FrameComparers;\n\n\t\t\tpublic WorkItem(\n\t\t\t\tFrameInfo frameInfo,\n\t\t\t\tColor[] textureData, int textureWidth, int textureHeight,\n\t\t\t\tstring frameOutputPath, string referenceImagePath,\n\t\t\t\tTuple<IFrameComparer, float>[] frameComparers)\n\t\t\t{\n\t\t\t\tFrameInfo = frameInfo;\n\t\t\t\tTextureData = textureData;\n\t\t\t\tTextureWidth = textureWidth;\n\t\t\t\tTextureHeight = textureHeight;\n\t\t\t\tFrameOutputPath = frameOutputPath;\n\t\t\t\tReferenceImagePath = referenceImagePath;\n\t\t\t\tFrameComparers = frameComparers;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic struct FrameComparisonResult\n\t{\n\n\t\tpublic FrameComparisonResult(\n\t\t\tint drawNumber, float similarity,\n\t\t\tstring referenceImagePath, string capturedImagePath = null)\n\t\t{\n\t\t\tDrawNumber = drawNumber;\n\t\t\tSimilarity = similarity;\n\t\t\tReferenceImagePath = referenceImagePath;\n\t\t\tCapturedImagePath = capturedImagePath;\n\t\t}\n\n\t\tpublic int DrawNumber;\n\t\tpublic float Similarity;\n\t\tpublic string CapturedImagePath;\n\t\tpublic string ReferenceImagePath;\n\t}\n\n\tclass ConstantComparer : IFrameComparer\n\t{\n\t\tprivate float _value;\n\t\tpublic ConstantComparer(float value)\n\t\t{\n\t\t\tif (value < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"value\", \"value must not be negative\");\n\t\t\t_value = value;\n\t\t}\n\n\t\tpublic float Compare(FramePixelData a, FramePixelData b)\n\t\t{\n\t\t\treturn _value;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/GraphicsDeviceTestFixtureBase.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing Kni.Tests.Components;\nusing Kni.Tests.Utilities;\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n    internal class GraphicsDeviceTestFixtureBase\n    {\n        protected TestGameBase game;\n        protected GraphicsDeviceManager gdm;\n        protected GraphicsDevice gd;\n        protected ContentManager content;\n\n        #region Frame capturing management\n\n        private bool _framePrepared;\n        private bool _frameSubmitted;\n        private bool _framesChecked;\n        private RenderTarget2D _captureRenderTarget;\n        private List<FramePixelData> _submittedFrames;\n        private int _totalFramesExpected;\n        private readonly IFrameComparer _frameComparer = new PixelDeltaFrameComparer();\n        private static readonly ActionDaemon _writerThread = new ActionDaemon();\n\n        #endregion\n\n        #region Frame capturing settings\n\n        protected float Similarity;\n        protected WriteSettings WriteCapture;\n        protected WriteSettings WriteDiffs;\n        protected bool ExactNumberSubmits;\n        protected Color ClearColor;\n\n        #endregion\n\n        #region SetUp and TearDown\n\n        [SetUp]\n        public virtual void SetUp()\n        {\n            game = new TestGameBase();\n            gdm = new GraphicsDeviceManager(game);\n#if !XNA\n            // We enable the half-pixel offset for XNA compatibility\n            gdm.PreferHalfPixelOffset = true;\n#endif\n            // some visual tests require a HiDef profile\n            gdm.GraphicsProfile = GraphicsProfile.HiDef;\n            ((IGraphicsDeviceManager)game.Services.GetService(typeof(IGraphicsDeviceManager))).CreateDevice();\n            gd = game.GraphicsDevice;\n            content = game.Content;\n\n            _framePrepared = false;\n            _frameSubmitted = false;\n            _framesChecked = false;\n\n            Similarity = Constants.StandardRequiredSimilarity;\n            WriteCapture = WriteSettings.Always;\n            WriteDiffs = WriteSettings.WhenFailed;\n            ExactNumberSubmits = false;\n            ClearColor = Color.CornflowerBlue;\n\n            Paths.SetStandardWorkingDirectory();\n        }\n\n        [TearDown]\n        public virtual void TearDown()\n        {\n            game.Dispose();\n            game = null;\n            gdm = null;\n            gd = null;\n            content = null;\n\n            if (_framePrepared && !_framesChecked)\n                Assert.Fail(\"Initialized fixture for rendering but did not check frames.\");\n        }\n\n        #endregion\n\n        #region Utility Methods\n\n        protected void Sleep(int ms)\n        {\n            Thread.Sleep(ms);\n        }\n\n        /// <summary>\n        /// Simulate a game loop.\n        /// </summary>\n        /// <param name=\"action\">The method to execute in the loop, gets the frame number passed to it.</param>\n        /// <param name=\"stopCondition\">If this is true the loop will end, gets the frame number passed to it.</param>\n        /// <param name=\"frameTime\">Time in ms to sleep after a frame.</param>\n        protected void DoGameLoop(Action<int> action, Predicate<int> stopCondition, int frameTime = 16)\n        {\n            var frame = 0;\n            while (!stopCondition(frame))\n            {\n                action(frame);\n\n                Sleep(frameTime);\n                frame++;\n            }\n        }\n\n        #endregion\n\n        #region Frame capture API\n\n        protected void PrepareFrameCapture(int expected = 1)\n        {\n            if (_framePrepared)\n                throw new Exception(\"PrepareFrameCapture should only be called once.\");\n            _framePrepared = true;\n            _totalFramesExpected = expected;\n\t\t\t_captureRenderTarget = new RenderTarget2D(\n\t\t\t\tgd, gd.Viewport.Width, gd.Viewport.Height,\n\t\t\t\tfalse, SurfaceFormat.Color, DepthFormat.Depth24Stencil8);\n            _submittedFrames = new List<FramePixelData>();\n\n\t\t\tgd.SetRenderTarget(_captureRenderTarget);\n            gd.Clear(ClearColor);\n        }\n\n        protected void SubmitFrame()\n        {\n            if (!_framePrepared)\n                throw new Exception(\"PrepareFrameCapture must be called before rendering when submitting a frame.\");\n            _frameSubmitted = true;\n\n            // release the rendertarget so GetData does not fail\n            gd.SetRenderTarget(null);\n\n            var capturedFrame = _captureRenderTarget.ToPixelData();\n            _submittedFrames.Add(capturedFrame);\n\n            gd.SetRenderTarget(_captureRenderTarget);\n        }\n\n        protected void CheckFrames() {\n            if (!_framePrepared)\n                throw new Exception(\"PrepareFrameCapture must be called before rendering to be able to check frames.\");\n\n            // submit the current frame if one is prepared, but none are submitted yet\n            if (!_frameSubmitted)\n                SubmitFrame();\n\n\t\t\tvar folderName = TestContext.CurrentContext.GetTestFolderName();\n            var referenceImageDirectory = Paths.ReferenceImage(folderName);\n            var outputDirectory = Paths.CapturedFrame(folderName);\n            var fileName = TestContext.CurrentContext.GetTestFrameFileNameFormat(_totalFramesExpected);\n            var capturedImagePath = Path.Combine(outputDirectory, fileName);\n            var referenceImagePath = Path.Combine(referenceImageDirectory, fileName);\n            \n            var allResults = new List<FrameComparisonResult>();\n            var failedResults = new List<FrameComparisonResult>();\n            var noReference = new List<string>();\n\n            for (var i = 0; i < _submittedFrames.Count; i++)\n            {\n                var frame = _submittedFrames[i];\n\n                var capturedPath = string.Format(capturedImagePath, i + 1);\n                var referencePath = string.Format(referenceImagePath, i + 1);\n\n                if (!File.Exists(referencePath))\n                {\n                    // no reference frame is available, so just write the image and track the failure\n                    if (WriteCapture == WriteSettings.Always || WriteCapture == WriteSettings.WhenFailed)\n                    {\n                        Directory.CreateDirectory(outputDirectory);\n                        _writerThread.AddAction(() =>\n                            frame.Save(capturedPath, \"Capture\"));\n                    }\n                    noReference.Add(referencePath);\n                    continue;\n                }\n\n                var refFrame = FramePixelData.FromFile(referencePath);\n                var frameSimilarity = _frameComparer.Compare(frame, refFrame);\n\n                var failed = frameSimilarity < Similarity;\n\n                var writeCapture = WriteCapture == WriteSettings.Always ||\n                                  (WriteCapture == WriteSettings.WhenFailed && failed);\n                var writeDiff = WriteDiffs == WriteSettings.Always ||\n                               (WriteDiffs == WriteSettings.WhenFailed && failed);\n\n                var result = new FrameComparisonResult(frameSimilarity, frame, refFrame, \n                    capturedPath, referencePath, failed, writeCapture, writeDiff);\n\n                allResults.Add(result);\n                if (failed) failedResults.Add(result);\n\n                if (result.SaveImage)\n                {\n                    Directory.CreateDirectory(outputDirectory);\n                    _writerThread.AddAction(() =>\n                        result.CapturedData.Save(result.CapturedImagePath, \"Capture\"));\n                }\n\n                if (result.SaveDiff)\n                {\n                    var name = string.Format(fileName, i + 1);\n                    var path = GetDiffPath(name);\n                    result.DiffPath = path;\n                    Directory.CreateDirectory(Path.GetDirectoryName(path));\n                    _writerThread.AddAction(() =>\n                        WriteDiff(result.CapturedData, result.ReferenceData, path));\n                }\n            }\n\n            _framesChecked = true;\n\n            // write results to console\n            WriteComparisonResultReport(allResults, noReference);\n\n            // wait for the writing thread so it doesn't get terminated early\n            if (!_writerThread.Finished)\n                _writerThread.Thread.Join();\n\n            // now do the actual assertions\n            if (ExactNumberSubmits && _totalFramesExpected != allResults.Count)\n            {\n\t\t\t\tAssert.Fail (\n\t\t\t\t\t\"Expected {0} frame comparison result(s), but found {1}\",\n\t\t\t\t\t_totalFramesExpected, allResults.Count);\n            }\n\n            if (failedResults.Count > 0)\n            {\n                Assert.Fail(\n\t\t\t\t\t\"{0} of {1} frames failed the similarity test.\",\n\t\t\t\t\tfailedResults.Count, allResults.Count);\n            }\n\n            if (noReference.Count > 0)\n            {\n                Assert.Fail(\n                    \"Did not find reference image(s): \" + noReference.Aggregate((s1, s2) => s1 + \", \" + s2));\n            }\n        }\n\n        #endregion\n\n        #region ComparisonResults\n\n        private void WriteComparisonResultReport(IEnumerable<FrameComparisonResult> results, List<string> noReference)\n\t\t{\n\t\t\tConsole.WriteLine (\"Required similarity: {0:0.####}\", Similarity);\n\t\t    foreach (var result in results)\n\t\t    {\n\t\t        var captureString = result.SaveImage ? \", Capture: \" + result.CapturedImagePath : \"\";\n\t\t        var referenceString = \", Reference: \" + result.ReferenceImagePath;\n                var diffString = result.SaveDiff ? \", Diff: \" + result.DiffPath : \"\";\n\t\t        Console.WriteLine(\n\t\t            \"Similarity: {0:0.####}{1}{2}{3}\",\n\t\t            result.Similarity, captureString, referenceString, diffString);\n\t\t    }\n\t\t}\n\n        protected class FrameComparisonResult\n        {\n            public float Similarity;\n            public FramePixelData CapturedData;\n            public FramePixelData ReferenceData;\n            public string CapturedImagePath;\n            public string ReferenceImagePath;\n            public string DiffPath;\n            public bool Failed;\n            public bool SaveImage;\n            public bool SaveDiff;\n\n            public FrameComparisonResult(float similarity, FramePixelData captured, FramePixelData reference,\n                string capturedImagePath, string referenceImagePath, bool failed, bool saveImage, bool saveDiff)\n            {\n                Similarity = similarity;\n                CapturedData = captured;\n                ReferenceData = reference;\n                CapturedImagePath = capturedImagePath;\n                ReferenceImagePath = referenceImagePath;\n                Failed = failed;\n                SaveImage = saveImage;\n                SaveDiff = saveDiff;\n            }\n        }\n\n        #endregion\n\n        #region Diff\n\n        private string GetDiffPath(string name)\n        {\n\t\t\tvar folderName = TestContext.CurrentContext.GetTestFolderName();\n            var directory = Paths.CapturedFrameDiff(folderName);\n            var diffFileName = string.Format(\"diff-{0}\", name);\n            return Path.Combine (directory, diffFileName);\n        }\n\n        private void WriteDiff(FramePixelData capture, FramePixelData reference, string outputPath)\n        {\n            var diff = CreateDiff(capture, reference);\n            Normalize(diff);\n            diff.Save(outputPath, \"Diff\");\n        }\n        \n        private static FramePixelData CreateDiff (FramePixelData a, FramePixelData b)\n\t\t{\n\t\t\tint minWidth, maxWidth, minHeight, maxHeight;\n\n\t\t\tMathUtility.MinMax (a.Width, b.Width, out minWidth, out maxWidth);\n\t\t\tMathUtility.MinMax (a.Height, b.Height, out minHeight, out maxHeight);\n\n\t\t\tvar diff = new FramePixelData (maxWidth, maxHeight);\n\n\t\t\tfor (var y = 0; y < minHeight; ++y) {\n\n\t\t\t\tvar indexA = y * a.Width;\n\t\t\t\tvar indexB = y * b.Width;\n\t\t\t\tvar indexDiff = y * diff.Width;\n\n\t\t\t\tfor (var x = 0; x < minWidth; ++x) {\n\t\t\t\t\t// Ignore alpha.  If alpha diffs are\n\t\t\t\t\t// needed, a special strategy will have\n\t\t\t\t\t// to be devised, since XOR'ing two\n\t\t\t\t\t// opaque pixels will cause a totally\n\t\t\t\t\t// transparent pixel and hide any other\n\t\t\t\t\t// difference.\n\t\t\t\t\tdiff.Data [indexDiff] = new Color (\n\t\t\t\t\t\t(byte) (a.Data [indexA].R ^ b.Data [indexB].R),\n\t\t\t\t\t\t(byte) (a.Data [indexA].G ^ b.Data [indexB].G),\n\t\t\t\t\t\t(byte) (a.Data [indexA].B ^ b.Data [indexB].B));\n\n\t\t\t\t\tindexA++;\n\t\t\t\t\tindexB++;\n\t\t\t\t\tindexDiff++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn diff;\n\t\t}\n\n\t\tprivate static void Normalize (FramePixelData frame)\n\t\t{\n\t\t\tvar max = new Color(0, 0, 0, 0);\n\t\t\tforeach (var pixel in frame.Data) {\n\t\t\t\tmax.B = Math.Max (pixel.B, max.B);\n\t\t\t\tmax.G = Math.Max (pixel.G, max.G);\n\t\t\t\tmax.R = Math.Max (pixel.R, max.R);\n\t\t\t\tmax.A = Math.Max (pixel.A, max.A);\n\t\t\t}\n\n\t\t\tif (max.B == 0) max.B = 255;\n\t\t\tif (max.G == 0) max.G = 255;\n\t\t\tif (max.R == 0) max.R = 255;\n\t\t\tif (max.A == 0) max.A = 255;\n\n\t\t\tfor (var i = 0; i < frame.Data.Length; ++i) {\n\t\t\t\tvar pixel = frame.Data[i];\n\n\n\t\t\t\tpixel.B = (byte)(pixel.B * 255 / max.B);\n\t\t\t\tpixel.G = (byte)(pixel.G * 255 / max.G);\n\t\t\t\tpixel.R = (byte)(pixel.R * 255 / max.R);\n\t\t\t\tpixel.A = (byte)(pixel.A * 255 / max.A);\n\n\t\t\t\tframe.Data[i] = pixel;\n\t\t\t}\n\t\t}\n\n        #endregion\n\n        protected enum WriteSettings\n        {\n            Never,\n            Always,\n            WhenFailed,\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/MockGame.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n\tclass MockGame : TestGameBase\n\t{\n\t\tpublic int MinUpdateCount { get; set; }\n\t\tpublic int MaxUpdateCount { get; set; }\n\t\tpublic int MinDrawCount { get; set; }\n\t\tpublic int MaxDrawCount { get; set; }\n\t\tpublic int UpdateCount { get; private set; }\n\t\tpublic int DrawCount { get; private set; }\n\t\tpublic ExitReason ExitReason { get; private set; }\n\n\t\tpublic MockGame()\n\t\t{\n\t\t\tMinUpdateCount = int.MaxValue;\n\t\t\tMinDrawCount = int.MaxValue;\n\t\t\tMaxUpdateCount = 1;\n\t\t\tMaxDrawCount = 1;\n\t\t}\n\n\t\tpublic MockGame MakeGraphical()\n\t\t{\n\t\t\tif (Services.GetService(typeof(IGraphicsDeviceManager)) == null)\n\t\t\t\tnew GraphicsDeviceManager(this);\n\t\t\treturn this;\n\t\t}\n\n\t\tprivate void EvaluateExitCriteria()\n\t\t{\n\t\t\tExitReason reason;\n\t\t\tif (UpdateCount >= MinUpdateCount && DrawCount >= MinDrawCount)\n\t\t\t\treason = ExitReason.MinimumsSatisfied;\n\t\t\telse if (UpdateCount >= MaxUpdateCount)\n\t\t\t\treason = ExitReason.MaxUpdateSatisfied;\n\t\t\telse if (DrawCount >= MaxDrawCount)\n\t\t\t\treason = ExitReason.MaxDrawSatisfied;\n\t\t\telse\n\t\t\t\treason = ExitReason.None;\n\n\t\t\tif (reason != ExitReason.None)\n\t\t\t{\n\t\t\t\tExitReason = reason;\n\t\t\t\tDoExit();\n\t\t\t}\n\t\t}\n\n\t\tprotected override void BeginRun()\n\t\t{\n\t\t\tbase.BeginRun();\n\t\t\tUpdateCount = 0;\n\t\t\tDrawCount = 0;\n\t\t}\n\n\t\tprotected override void EndRun()\n\t\t{\n\t\t\tbase.EndRun();\n#if XNA\n                AbsorbQuitMessage();\n#endif\n\t\t}\n\n\t\tprotected override void Update(GameTime gameTime)\n\t\t{\n\t\t\tbase.Update(gameTime);\n\t\t\tUpdateCount++;\n\t\t\tEvaluateExitCriteria();\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tbase.Draw(gameTime);\n\t\t\tDrawCount++;\n\t\t\tEvaluateExitCriteria();\n\t\t}\n\n\t}\n\n\tpublic enum ExitReason\n\t{\n\t\tNone,\n\t\tMinimumsSatisfied,\n\t\tMaxUpdateSatisfied,\n\t\tMaxDrawSatisfied\n\t}\n\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/PixelDeltaFrameComparer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Kni.Tests.Components \n{\n\tclass PixelDeltaFrameComparer : IFrameComparer \n    {\n        private static int[] GreyScale(FramePixelData pixelData, int newWidth, int newHeight)\n        {\n            var resized = new int[newWidth * newHeight];\n\n            var stepX = pixelData.Width / (float)newWidth;\n            var stepY = pixelData.Height / (float)newHeight;\n\n            for (var y = 0; y < newHeight; y++)\n            {\n                for (var x = 0; x < newWidth; x++)\n                {\n                    // We use a simple nearest neighbor sample as any blending\n                    // would only serve to increase the differences between the images.\n\n                    var sx = (int)(x * stepX);\n                    var sy = (int)(y * stepY);\n                    var si = sx + (sy * pixelData.Width);\n                    var scolor = pixelData.Data[si];\n                    \n                    // Convert to a greyscale value which removes small\n                    // color differences that the eye cannot spot.\n                    var grayScale = (int)((scolor.R * 0.3) + (scolor.G * 0.59) + (scolor.B * 0.11));\n\n                    var di = x + (y * newWidth);\n                    resized[di] = grayScale;\n                }\n            }\n\n            return resized;\n        }\n\n        public float Compare(FramePixelData image, FramePixelData referenceImage)\n\t\t{        \n            // Conver the images down to a common sized greyscale image.\n            var width = Math.Min(image.Width, referenceImage.Width);\n            var height = Math.Min(image.Height, referenceImage.Height);\n            var img = GreyScale(image, width, height);\n            var imgRef = GreyScale(referenceImage, width, height);\n\n            // Find the differences between the greyscale images.\n            var absDiff = new int[width * height];\n            for (var i = 0; i < absDiff.Length; i++)\n                absDiff[i] = Math.Abs(img[i] - imgRef[i]);\n\n            // Find all the differences over the threshold.\n\t\t    const int threshold = 3;\n            var diffPixels = 0;\n            for (var i = 0; i < absDiff.Length; i++)\n            {\n                if (absDiff[i] > threshold) \n                    diffPixels++;\n            }\n\n            // Calculate the difference percentage.\n            var diff = diffPixels / (float)absDiff.Length;\n\t\t    return 1.0f - diff;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/TestGameBase.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Threading;\n\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nusing Kni.Tests.Components;\n\n#if IOS || TVOS\nusing MonoTouch.Foundation;\nusing MonoTouch.UIKit;\n#endif\n\nnamespace Kni.Tests\n{\n\tclass TestGameBase : Game, IFrameInfoSource\n\t{\n\t\tprivate bool _isExiting;\n\n\t\tpublic TestGameBase()\n\t\t{\n#if XNA\n            Content.RootDirectory = AppDomain.CurrentDomain.BaseDirectory;\n#endif\n\t\t\t// We do all the tests using the reference device to\n\t\t\t// avoid driver glitches and get consistent rendering.\n\t\t\tGraphicsAdapter.UseReferenceDevice = true;\n\n\t\t\tServices.AddService<IFrameInfoSource>(this);\n\t\t\tSuppressExtraUpdatesAndDraws = true;\n\t\t}\n\n\t\t#region IFrameInfoSource Implementation\n\n\t\tprivate FrameInfo _frameInfo;\n\t\tpublic FrameInfo FrameInfo\n\t\t{\n\t\t\tget { return _frameInfo; }\n\t\t}\n\n\t\t#endregion IFrameInfoSource Implementation\n\n\t\tpublic Predicate<FrameInfo> ExitCondition { get; set; }\n\t\tpublic bool SuppressExtraUpdatesAndDraws { get; set; }\n\n\t\tpublic event EventHandler<FrameInfoEventArgs> InitializeWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> LoadContentWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> UnloadContentWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> DrawWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> UpdateWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> UpdateOncePerDrawWith;\n\n\t\tpublic event EventHandler<FrameInfoEventArgs> PreInitializeWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> PreLoadContentWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> PreUnloadContentWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> PreDrawWith;\n\t\tpublic event EventHandler<FrameInfoEventArgs> PreUpdateWith;\n\n\t\tpublic void ClearActions()\n\t\t{\n\t\t\tInitializeWith = null;\n\t\t\tLoadContentWith = null;\n\t\t\tUnloadContentWith = null;\n\t\t\tDrawWith = null;\n\t\t\tUpdateWith = null;\n\t\t\tUpdateOncePerDrawWith = null;\n\n\t\t\tPreInitializeWith = null;\n\t\t\tPreLoadContentWith = null;\n\t\t\tPreUnloadContentWith = null;\n\t\t\tPreDrawWith = null;\n\t\t\tPreUpdateWith = null;\n\t\t}\n\n\t\tprivate void SafeRaise(EventHandler<FrameInfoEventArgs> handler)\n\t\t{\n\t\t\tif (handler != null)\n\t\t\t\thandler(this, new FrameInfoEventArgs(FrameInfo));\n\t\t}\n\n\t\tpublic void InitializeOnly()\n\t\t{\n\t\t\tif (GraphicsDevice == null)\n\t\t\t{\n\t\t\t\tvar graphicsDeviceManager = Services.GetService(typeof(IGraphicsDeviceManager)) as IGraphicsDeviceManager;\n\t\t\t\tgraphicsDeviceManager.CreateDevice();\n\t\t\t}\n\t\t\tInitialize();\n\t\t}\n\n\t\tprotected override void Initialize()\n\t\t{\n\t\t\tSafeRaise(PreInitializeWith);\n\t\t\tbase.Initialize();\n\t\t\tSafeRaise(InitializeWith);\n\t\t}\n\n\t\tprotected override void LoadContent()\n\t\t{\n\t\t\tSafeRaise(PreLoadContentWith);\n\t\t\tbase.LoadContent();\n\t\t\tSafeRaise(LoadContentWith);\n\t\t}\n\n\t\tprotected override void UnloadContent()\n\t\t{\n\t\t\tSafeRaise(PreUnloadContentWith);\n\t\t\tbase.UnloadContent();\n\t\t\tSafeRaise(UnloadContentWith);\n\t\t}\n\n\t\tpublic void Run(Predicate<FrameInfo> until = null)\n\t\t{\n\t\t\tif (until != null)\n\t\t\t\tExitCondition = until;\n#if XNA\n\t\t\ttry\n\t\t\t{\n\t\t\t\tbase.Run();\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\t// XNA (WinForms) leaves WM_QUIT hanging around\n\t\t\t\t// in the message queue sometimes, and when it\n\t\t\t\t// does, all future windows that are created are\n\t\t\t\t// instantly killed.  So, we manually absorb any\n\t\t\t\t// WM_QUIT that exists.\n\t\t\t\tif (_isExiting)\n\t\t\t\t\tAbsorbQuitMessage();\n\t\t\t}\n#elif IOS || TVOS || ANDROID\n\t\t\tRunOnMainThreadAndWait();\n#else\n\t\t\tbase.Run();\n#endif\n\t\t}\n\n#if IOS || TVOS || ANDROID\n\t\tprivate void RunOnMainThreadAndWait()\n\t\t{\n\t\t\tvar exitEvent = new ManualResetEvent(false);\n\t\t\tvar exitHandler = new EventHandler<EventArgs>(\n\t\t\t\t(sender, e) => exitEvent.Set() );\n\n\t\t\tExiting += exitHandler;\n\t\t\ttry \n\t\t\t{\n\t\t\t\tInvokeRunOnMainThread();\n\t\t\t\tvar maxExecutionTime = TimeSpan.FromSeconds(30);\n\t\t\t\tif (!exitEvent.WaitOne (maxExecutionTime)) \n\t\t\t\t{\n\t\t\t\t\tthrow new TimeoutException(string.Format(\n\t\t\t\t\t\t\"Game.Run timed out.  Maximum execution time is {0}.\",\n\t\t\t\t\t\tmaxExecutionTime));\n\t\t\t\t}\n\t\t\t}\n\t\t\tfinally \n\t\t\t{\n\t\t\t\tExiting -= exitHandler;\n\t\t\t}\n\t\t}\n#endif\n\n#if IOS || TVOS\n\t\tprivate void InvokeRunOnMainThread()\n\t\t{\n\t\t\tException ex = null;\n\t\t\tUIApplication.SharedApplication.InvokeOnMainThread(() => \n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tbase.Run();\n\t\t\t\t} \n\t\t\t\tcatch (Exception innerEx) \n\t\t\t\t{\n\t\t\t\t\tex = innerEx;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (ex != null)\n\t\t\t\tthrow ex;\n\t\t}\n#endif\n\n#if ANDROID\n\t\tprivate void InvokeRunOnMainThread()\n\t\t{\n\t\t\tthrow new NotImplementedException(\n\t\t\t\t\"Android need to implement TestGameBase.InvokeRunOnMainThread\");\n\t\t}\n#endif\n\n\t\tprivate readonly UpdateGuard _updateGuard = new UpdateGuard();\n\t\tprotected override void Update(GameTime gameTime)\n\t\t{\n\t\t\t_frameInfo.AdvanceUpdate(gameTime);\n\t\t\tEvaluateExitCondition();\n\n\t\t\tif (_isExiting && SuppressExtraUpdatesAndDraws)\n\t\t\t\treturn;\n\n\t\t\tSafeRaise(PreUpdateWith);\n\n\t\t\tbase.Update(gameTime);\n\n\t\t\tif (_updateGuard.ShouldUpdate(FrameInfo))\n\t\t\t\tUpdateOncePerDraw(gameTime);\n\n\t\t\tSafeRaise(UpdateWith);\n\t\t}\n\n\t\tprotected virtual void UpdateOncePerDraw(GameTime gameTime)\n\t\t{\n\t\t\tSafeRaise(UpdateOncePerDrawWith);\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\t\t\t_frameInfo.AdvanceDraw(gameTime);\n\t\t\tEvaluateExitCondition();\n\n\t\t\tif (_isExiting && SuppressExtraUpdatesAndDraws)\n\t\t\t\treturn;\n\n\t\t\tSafeRaise(PreDrawWith);\n\t\t\tbase.Draw(gameTime);\n\t\t\tSafeRaise(DrawWith);\n\t\t}\n\n\t\tprotected void DoExit()\n\t\t{\n\t\t\ttry { Exit(); }\n\t\t\tcatch (PlatformNotSupportedException ex)\n\t\t\t{\n\t\t\t\t// We need to halt the app on platforms that disallow \n\t\t\t\t// exit after we complete running all the unit tests.\n\t\t\t\t// So we do the next best thing can call the internal\n\t\t\t\t// platform code directly which produces the same result.\n\t\t\t\tExit();\n\t\t\t\tSuppressDraw();\n\t\t\t}\n\t\t}\n\n\t\tprivate void EvaluateExitCondition()\n\t\t{\n\t\t\tif (_isExiting || ExitCondition == null)\n\t\t\t\treturn;\n\n\t\t\tif (ExitCondition(_frameInfo))\n\t\t\t{\n\t\t\t\t_isExiting = true;\n\t\t\t\tDoExit();\n\t\t\t}\n\t\t}\n\n#if XNA\n\t\t[StructLayout (LayoutKind.Sequential)]\n\t\tpublic struct NativeMessage \n\t\t{\n\t\t\tpublic IntPtr handle;\n\t\t\tpublic uint msg;\n\t\t\tpublic IntPtr wParam;\n\t\t\tpublic IntPtr lParam;\n\t\t\tpublic uint time;\n\t\t\tpublic System.Drawing.Point p;\n\t\t}\n\n\t\t[DllImport(\"user32.dll\")]\n\t\t[return: MarshalAs(UnmanagedType.Bool)]\n\t\tprivate static extern bool PeekMessage(\n\t\t\tout NativeMessage msg, IntPtr hWnd,\n\t\t\tuint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg);\n\n\t\t[DllImport (\"user32.dll\")]\n\t\tprivate static extern int GetMessage(\n\t\t\tout NativeMessage msg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);\n\n\t\tconst uint WM_QUIT = 0x12;\n\n\t\tprotected static void AbsorbQuitMessage()\n\t\t{\n\t\t\tNativeMessage msg;\n\t\t\tif (!PeekMessage(out msg, IntPtr.Zero, 0, 0, 0))\n\t\t\t\treturn;\n\n\t\t\tdo\n\t\t\t{\n\t\t\t\tint result = GetMessage(out msg, IntPtr.Zero, 0, 0);\n\t\t\t\tif (result == -1 || result == 0)\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\twhile (msg.msg != WM_QUIT);\n\t\t}\n#endif\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/UpdateGuard.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Kni.Tests.Components\n{\n\tclass UpdateGuard\n\t{\n\t\tprivate int _lastDrawNumberOfUpdate = -1;\n\n\t\tpublic bool ShouldUpdate(FrameInfo frameInfo)\n\t\t{\n\t\t\tif (_lastDrawNumberOfUpdate == frameInfo.DrawNumber)\n\t\t\t\treturn false;\n\t\t\t_lastDrawNumberOfUpdate = frameInfo.DrawNumber;\n\t\t\treturn true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/VisualTestFixtureBase.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Microsoft.Xna.Framework;\n\nusing NUnit.Framework;\n\nusing Kni.Tests.Components;\n\nnamespace Kni.Tests\n{\n\tclass VisualTestFixtureBase\n\t{\n\t\tprivate VisualTestGame _game;\n\t\tprotected VisualTestGame Game { get { return _game; } }\n\n\t\t[SetUp]\n\t\tpublic virtual void SetUp()\n\t\t{\n\t\t\tPaths.SetStandardWorkingDirectory();\n\t\t\t_game = new VisualTestGame();\n\t\t\t_game.ExitCondition = x => x.DrawNumber > 1;\n\t\t}\n\n\t\t[TearDown]\n\t\tpublic virtual void TearDown()\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\t_game.Dispose();\n\t\t\t\t_game = null;\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Provides a quick and easy way to run a single frame visual\n\t\t/// test with the default comparison and diff-writing options.\n\t\t/// Tests that need more control over the run-diff-assert\n\t\t/// process should manually call:\n\t\t/// \n\t\t/// <code>\n\t\t/// Game.Components.Add($FrameCompareComponent$);\n\t\t/// Game.Run();\n\t\t/// WriteFrameDiffs();\n\t\t/// AssertFrameComparisonPassed();\n\t\t/// </code>\n\t\t/// </summary>\n\t\t/// <param name=\"similarity\">The similarity to the reference\n\t\t/// image required for a frame to be considered passing.</param>\n\t\t/// <param name=\"writeDiffs\">A value indicating whether visual\n\t\t/// diffs should be written for this test.</param>\n\t\tprotected void RunSingleFrameTest(\n\t\t\tfloat similarity = Constants.StandardRequiredSimilarity,\n\t\t\tbool writeDiffs = true)\n\t\t{\n\t\t\tRunMultiFrameTest(1, 1, similarity, writeDiffs);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Provides a quick and easy way to run a multi-frame visual\n\t\t/// test using the default comparison and diff-writing options.\n\t\t/// Tests that need more control over the run-diff-assert\n\t\t/// process should manually call:\n\t\t/// \n\t\t/// <code>\n\t\t/// Game.Components.Add($FrameCompareComponent$);\n\t\t/// Game.Run();\n\t\t/// WriteFrameDiffs();\n\t\t/// AssertFrameComparisonPassed();\n\t\t/// </code>\n\t\t/// </summary>\n\t\t/// <param name=\"captureCount\">The total number of frames to\n\t\t/// capture.</param>\n\t\t/// <param name=\"captureStride\">How often to capture.  A value\n\t\t/// of 1 captures every frame, 2 captures every other, etc.\n\t\t/// </param>\n\t\t/// <param name=\"similarity\">The similarity to the reference\n\t\t/// image required for a frame to be considered passing.</param>\n\t\t/// <param name=\"writeDiffs\">A value indicating whether visual\n\t\t/// diffs should be written for this test.</param>\n\t\tprotected void RunMultiFrameTest(\n\t\t\tint captureCount,\n\t\t\tint captureStride = 1,\n\t\t\tfloat similarity = Constants.StandardRequiredSimilarity,\n\t\t\tbool writeDiffs = true)\n\t\t{\n\t\t\tif (captureCount < 1)\n\t\t\t\tthrow new ArgumentOutOfRangeException(\n\t\t\t\t\t\"captureCount\", \"captureCount must be positive\");\n\t\t\tif (captureStride < 1)\n\t\t\t\tthrow new ArgumentOutOfRangeException(\n\t\t\t\t\t\"captureStride\", \"captureStride must be positive\");\n\n\t\t\tif (!Game.Components.Any(x => x is FrameCompareComponent))\n\t\t\t\tGame.Components.Add(FrameCompareComponent.CreateDefault(\n\t\t\t\t\tGame,\n\t\t\t\t\tcaptureWhen: x => x.DrawNumber % captureStride == 0,\n\t\t\t\t\tmaxFrameNumber: captureCount * captureStride));\n\n\t\t\tGame.Run(until: x => x.DrawNumber > captureCount * captureStride);\n\t\t\tif (writeDiffs)\n\t\t\t\tWriteFrameDiffs();\n\t\t\tAssertFrameComparisonPassed(similarity: similarity, expectedCount: captureCount);\n\t\t}\n\n\t\tprotected void AssertFrameComparisonPassed(\n\t\t\tfloat similarity = Constants.StandardRequiredSimilarity,\n\t\t\tint expectedCount = 1)\n\t\t{\n\t\t\tvar folderName = TestContext.CurrentContext.GetTestFolderName();\n\t\t\tbool found = false;\n\t\t\tforeach (var frameCompareComponent in Game.Components.OfType<FrameCompareComponent>())\n\t\t\t{\n\t\t\t\tAssertFrameComparisonPassed(frameCompareComponent.Results, similarity, expectedCount);\n\t\t\t\tfound = true;\n\t\t\t}\n\n\t\t\tif (!found)\n\t\t\t\tAssert.Fail(\"No FrameCompareComponents were found.\");\n\t\t}\n\n\t\tprotected static void AssertFrameComparisonPassed(\n\t\t\tIEnumerable<FrameComparisonResult> results, float similarity, int expectedCount)\n\t\t{\n\t\t\tvar allResults = new List<FrameComparisonResult>();\n\t\t\tvar failedResults = new List<FrameComparisonResult>();\n\t\t\tforeach (var result in results)\n\t\t\t{\n\t\t\t\tallResults.Add(result);\n\t\t\t\tif (result.Similarity < similarity)\n\t\t\t\t\tfailedResults.Add(result);\n\t\t\t}\n\n\t\t\tif (allResults.Count != expectedCount)\n\t\t\t\tAssert.Fail(\n\t\t\t\t\t\"Expected {0} frame comparison result(s), but found {1}\",\n\t\t\t\t\texpectedCount, allResults.Count);\n\n\t\t\tWriteComparisonResultReport(allResults, similarity);\n\n\t\t\tif (failedResults.Count > 0)\n\t\t\t{\n\t\t\t\tAssert.Fail(\n\t\t\t\t\t\"{0} of {1} frames failed the similarity test.\",\n\t\t\t\t\tfailedResults.Count, allResults.Count);\n\t\t\t}\n\t\t}\n\n\t\tprivate static void WriteComparisonResultReport(\n\t\t\tIEnumerable<FrameComparisonResult> results, float similarity)\n\t\t{\n\t\t\tConsole.WriteLine(\"Required similarity: {0:0.####}\", similarity);\n\t\t\tforeach (var result in results)\n\t\t\t\tConsole.WriteLine(\n\t\t\t\t\t\"Similarity: {0:0.####}, Capture: {1}, Reference: {2}\",\n\t\t\t\t\tresult.Similarity, result.CapturedImagePath, result.ReferenceImagePath);\n\t\t}\n\n\t\tprotected void WriteFrameDiffs()\n\t\t{\n\t\t\tvar folderName = TestContext.CurrentContext.GetTestFolderName();\n\t\t\tbool found = false;\n\t\t\tforeach (var frameCompareComponent in Game.Components.OfType<FrameCompareComponent>())\n\t\t\t{\n\t\t\t\tWriteFrameDiffs(frameCompareComponent.Results, Paths.CapturedFrameDiff(folderName));\n\t\t\t\tfound = true;\n\t\t\t}\n\n\t\t\tif (!found)\n\t\t\t\tAssert.Fail(\"No FrameCompareComponents were found.\");\n\t\t}\n\n\t\tprotected static void WriteFrameDiffs(\n\t\t\tIEnumerable<FrameComparisonResult> results, string directory)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDirectory.CreateDirectory(directory);\n\t\t\t}\n\t\t\tcatch (IOException)\n\t\t\t{\n\t\t\t}\n\n\t\t\tforeach (var result in results)\n\t\t\t{\n\n\t\t\t\tstring diffFileName = string.Format(\n\t\t\t\t\t\"diff-{0}-{1}.png\",\n\t\t\t\t\tPath.GetFileNameWithoutExtension(result.ReferenceImagePath),\n\t\t\t\t\tPath.GetFileNameWithoutExtension(result.CapturedImagePath));\n\n\n\t\t\t\tstring diffOutputPath = Path.Combine(directory, diffFileName);\n\n\t\t\t\tvar a = FramePixelData.FromFile(result.ReferenceImagePath);\n\t\t\t\tvar b = FramePixelData.FromFile(result.CapturedImagePath);\n\t\t\t\tvar diff = CreateDiff(a, b);\n\t\t\t\tNormalize(diff);\n\t\t\t\tdiff.Save(diffOutputPath, \"Diff\");\n\t\t\t}\n\t\t}\n\n\t\tprivate static FramePixelData CreateDiff(FramePixelData a, FramePixelData b)\n\t\t{\n\t\t\tint minWidth, maxWidth, minHeight, maxHeight;\n\n\t\t\tMathUtility.MinMax(a.Width, b.Width, out minWidth, out maxWidth);\n\t\t\tMathUtility.MinMax(a.Height, b.Height, out minHeight, out maxHeight);\n\n\t\t\tvar diff = new FramePixelData(maxWidth, maxHeight);\n\n\t\t\tfor (int y = 0; y < minHeight; ++y)\n\t\t\t{\n\n\t\t\t\tint indexA = y * a.Width;\n\t\t\t\tint indexB = y * b.Width;\n\t\t\t\tint indexDiff = y * diff.Width;\n\n\t\t\t\tfor (int x = 0; x < minWidth; ++x)\n\t\t\t\t{\n\t\t\t\t\t// Ignore alpha.  If alpha diffs are\n\t\t\t\t\t// needed, a special strategy will have\n\t\t\t\t\t// to be devised, since XOR'ing two\n\t\t\t\t\t// opaque pixels will cause a totally\n\t\t\t\t\t// transparent pixel and hide any other\n\t\t\t\t\t// difference.\n\t\t\t\t\tdiff.Data[indexDiff] = new Color(\n\t\t\t\t\t\t(byte)(a.Data[indexA].R ^ b.Data[indexB].R),\n\t\t\t\t\t\t(byte)(a.Data[indexA].G ^ b.Data[indexB].G),\n\t\t\t\t\t\t(byte)(a.Data[indexA].B ^ b.Data[indexB].B));\n\n\t\t\t\t\tindexA++;\n\t\t\t\t\tindexB++;\n\t\t\t\t\tindexDiff++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn diff;\n\t\t}\n\n\t\tprivate static void Normalize(FramePixelData frame)\n\t\t{\n\t\t\tColor max = new Color(0, 0, 0, 0);\n\t\t\tforeach (var pixel in frame.Data)\n\t\t\t{\n\t\t\t\tmax.B = Math.Max(pixel.B, max.B);\n\t\t\t\tmax.G = Math.Max(pixel.G, max.G);\n\t\t\t\tmax.R = Math.Max(pixel.R, max.R);\n\t\t\t\tmax.A = Math.Max(pixel.A, max.A);\n\t\t\t}\n\n\t\t\tif (max.B == 0) max.B = 255;\n\t\t\tif (max.G == 0) max.G = 255;\n\t\t\tif (max.R == 0) max.R = 255;\n\t\t\tif (max.A == 0) max.A = 255;\n\n\t\t\tfor (int i = 0; i < frame.Data.Length; ++i)\n\t\t\t{\n\t\t\t\tColor pixel = frame.Data[i];\n\n\n\t\t\t\tpixel.B = (byte)(pixel.B * 255 / max.B);\n\t\t\t\tpixel.G = (byte)(pixel.G * 255 / max.G);\n\t\t\t\tpixel.R = (byte)(pixel.R * 255 / max.R);\n\t\t\t\tpixel.A = (byte)(pixel.A * 255 / max.A);\n\n\t\t\t\tframe.Data[i] = pixel;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/GameBase/VisualTestGame.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nusing Kni.Tests.Components;\n\nnamespace Kni.Tests\n{\n\tclass VisualTestGame : TestGameBase, IFrameCaptureSource\n\t{\n\t\tpublic VisualTestGame()\n\t\t{\n\t\t\tnew GraphicsDeviceManager(this)\n\t\t\t{\n\t\t\t\tPreferredBackBufferWidth = 800,\n\t\t\t\tPreferredBackBufferHeight = 480,\n\t\t\t\tGraphicsProfile = GraphicsProfile.HiDef,\n\t\t\t};\n\n\t\t\tServices.AddService<IFrameCaptureSource>(this);\n\t\t}\n\n\t\tprotected override void Draw(GameTime gameTime)\n\t\t{\n\t\t\tif (_shouldCaptureFrame)\n\t\t\t\tStartRenderingToTexture();\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tbase.Draw(gameTime);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (_shouldCaptureFrame)\n\t\t\t\t\tStopRenderingToTexture();\n\t\t\t}\n\n\t\t\t_shouldCaptureFrame = false;\n\t\t}\n\n\t\tprotected override void Dispose(bool disposing)\n\t\t{\n\t\t\tif (disposing)\n\t\t\t{\n\t\t\t\tif (_renderToTextureTarget != null)\n\t\t\t\t{\n\t\t\t\t\t_renderToTextureTarget.Dispose();\n\t\t\t\t\t_renderToTextureTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose(disposing);\n\t\t}\n\n\t\t#region IFrameSource Implementation\n\n\t\tprivate RenderTarget2D _renderToTextureTarget;\n\t\tprivate bool _shouldCaptureFrame;\n\t\tpublic void ScheduleFrameCapture()\n\t\t{\n\t\t\t_shouldCaptureFrame = true;\n\t\t}\n\n\t\tpublic Texture2D GetCapturedFrame()\n\t\t{\n\t\t\treturn _renderToTextureTarget;\n\t\t}\n\n\t\tpublic void ReleaseCapturedFrame(Texture2D frame)\n\t\t{\n\t\t\t_renderToTextureTarget.Dispose();\n\t\t\t_renderToTextureTarget = null;\n\t\t}\n\n\t\tprivate void StartRenderingToTexture()\n\t\t{\n\t\t\tif (_renderToTextureTarget != null)\n\t\t\t\tthrow new InvalidOperationException(\"Already rendering to a different texture.\");\n\n\t\t\t_renderToTextureTarget = new RenderTarget2D(\n\t\t\t\tGraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height,\n\t\t\t\tfalse, SurfaceFormat.Color, DepthFormat.Depth24Stencil8);\n\n\t\t\tGraphicsDevice.SetRenderTarget(_renderToTextureTarget);\n\t\t}\n\n\t\tprivate void StopRenderingToTexture()\n\t\t{\n\t\t\tif (_renderToTextureTarget == null)\n\t\t\t\tthrow new InvalidOperationException(\"Not currently rendering to a texture.\");\n\n\t\t\tGraphicsDevice.SetRenderTarget(null);\n\t\t}\n\n\t\t#endregion IFrameSource Implementation\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/PixelArgb.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\n\nnamespace Kni.Tests\n{\n\t[StructLayout(LayoutKind.Sequential)]\n\tstruct PixelArgb\n\t{\n\t\tpublic const int MaxDelta = 4 * Byte.MaxValue;\n\n\t\tpublic byte B;\n\t\tpublic byte G;\n\t\tpublic byte R;\n\t\tpublic byte A;\n\n\t\tpublic unsafe int Delta(PixelArgb* other)\n\t\t{\n\t\t\treturn\n\t\t\t\tMath.Abs(B - other->B) +\n\t\t\t\tMath.Abs(G - other->G) +\n\t\t\t\tMath.Abs(R - other->R) +\n\t\t\t\tMath.Abs(A - other->A);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/Program.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing NUnitLite;\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n    static class Program\n    {\n        static int Main(string[] args)\n        {\n            return new AutoRun().Execute(args);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Runner/Utility.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework;\nusing NUnit.Framework;\n\nnamespace Kni.Tests\n{\n\n    public class MatrixComparer : IEqualityComparer<Matrix>\n    {\n        static public MatrixComparer Epsilon = new MatrixComparer(0.000001f);\n\n        private readonly float _epsilon;\n\n        private MatrixComparer(float epsilon)\n        {\n            _epsilon = epsilon;\n        }\n\n        public bool Equals(Matrix x, Matrix y)\n        {\n            return Math.Abs(x.M11 - y.M11) < _epsilon &&\n                    Math.Abs(x.M12 - y.M12) < _epsilon &&\n                    Math.Abs(x.M13 - y.M13) < _epsilon &&\n                    Math.Abs(x.M14 - y.M14) < _epsilon &&\n                    Math.Abs(x.M21 - y.M21) < _epsilon &&\n                    Math.Abs(x.M22 - y.M22) < _epsilon &&\n                    Math.Abs(x.M23 - y.M23) < _epsilon &&\n                    Math.Abs(x.M24 - y.M24) < _epsilon &&\n                    Math.Abs(x.M31 - y.M31) < _epsilon &&\n                    Math.Abs(x.M32 - y.M32) < _epsilon &&\n                    Math.Abs(x.M33 - y.M33) < _epsilon &&\n                    Math.Abs(x.M34 - y.M34) < _epsilon &&\n                    Math.Abs(x.M41 - y.M41) < _epsilon &&\n                    Math.Abs(x.M42 - y.M42) < _epsilon &&\n                    Math.Abs(x.M43 - y.M43) < _epsilon &&\n                    Math.Abs(x.M44 - y.M44) < _epsilon;\n        }\n\n        public int GetHashCode(Matrix obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class ByteComparer : IEqualityComparer<byte>\n    {\n        static public ByteComparer Equal = new ByteComparer();\n\n        private ByteComparer()\n        {\n        }\n\n        public bool Equals(byte x, byte y)\n        {\n            return x == y;\n        }\n\n        public int GetHashCode(byte obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class ColorComparer : IEqualityComparer<Color>\n    {\n        static public ColorComparer Equal = new ColorComparer();\n\n        private ColorComparer()\n        {\n        }\n\n        public bool Equals(Color x, Color y)\n        {\n            return x == y;\n        }\n\n        public int GetHashCode(Color obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class FloatComparer : IEqualityComparer<float>\n    {\n        static public FloatComparer Epsilon = new FloatComparer(0.000001f);\n\n        private readonly float _epsilon;\n\n        private FloatComparer(float epsilon)\n        {\n            _epsilon = epsilon;\n        }\n\n        public bool Equals(float x, float y)\n        {\n            return Math.Abs(x - y) < _epsilon;\n        }\n\n        public int GetHashCode(float obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class BoundingSphereComparer : IEqualityComparer<BoundingSphere>\n    {\n        static public BoundingSphereComparer Epsilon = new BoundingSphereComparer(0.000001f);\n\n        private readonly float _epsilon;\n\n        private BoundingSphereComparer(float epsilon)\n        {\n            _epsilon = epsilon;\n        }\n\n        public bool Equals(BoundingSphere x, BoundingSphere y)\n        {\n            return Math.Abs(x.Center.X - y.Center.X) < _epsilon &&\n                    Math.Abs(x.Center.Y - y.Center.Y) < _epsilon &&\n                    Math.Abs(x.Center.Z - y.Center.Z) < _epsilon &&\n                    Math.Abs(x.Radius - y.Radius) < _epsilon;\n        }\n\n        public int GetHashCode(BoundingSphere obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class Vector2Comparer : IEqualityComparer<Vector2>\n    {\n        static public Vector2Comparer Epsilon = new Vector2Comparer(0.000001f);\n\n        private readonly float _epsilon;\n\n        private Vector2Comparer(float epsilon)\n        {\n            _epsilon = epsilon;\n        }\n\n        public bool Equals(Vector2 x, Vector2 y)\n        {\n            return Math.Abs(x.X - y.X) < _epsilon &&\n                   Math.Abs(x.Y - y.Y) < _epsilon;\n        }\n\n        public int GetHashCode(Vector2 obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class Vector3Comparer : IEqualityComparer<Vector3>\n    {\n        static public Vector3Comparer Epsilon = new Vector3Comparer(0.000001f);\n\n        private readonly float _epsilon;\n\n        private Vector3Comparer(float epsilon)\n        {\n            _epsilon = epsilon;\n        }\n\n        public bool Equals(Vector3 x, Vector3 y)\n        {\n            return Math.Abs(x.X - y.X) < _epsilon &&\n                   Math.Abs(x.Y - y.Y) < _epsilon &&\n                   Math.Abs(x.Z - y.Z) < _epsilon;\n        }\n\n        public int GetHashCode(Vector3 obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class Vector4Comparer : IEqualityComparer<Vector4>\n    {\n        static public Vector4Comparer Epsilon = new Vector4Comparer(0.000001f);\n\n        private readonly float _epsilon;\n\n        private Vector4Comparer(float epsilon)\n        {\n            _epsilon = epsilon;\n        }\n\n        public bool Equals(Vector4 x, Vector4 y)\n        {\n            return Math.Abs(x.X - y.X) < _epsilon &&\n                   Math.Abs(x.Y - y.Y) < _epsilon &&\n                   Math.Abs(x.Z - y.Z) < _epsilon &&\n                   Math.Abs(x.W - y.W) < _epsilon;\n        }\n\n        public int GetHashCode(Vector4 obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class QuaternionComparer : IEqualityComparer<Quaternion>\n    {\n        static public QuaternionComparer Epsilon = new QuaternionComparer(0.000001f);\n\n        private readonly float _epsilon;\n\n        private QuaternionComparer(float epsilon)\n        {\n            _epsilon = epsilon;\n        }\n\n        public bool Equals(Quaternion x, Quaternion y)\n        {\n            return Math.Abs(x.X - y.X) < _epsilon &&\n                   Math.Abs(x.Y - y.Y) < _epsilon &&\n                   Math.Abs(x.Z - y.Z) < _epsilon &&\n                   Math.Abs(x.W - y.W) < _epsilon;\n        }\n\n        public int GetHashCode(Quaternion obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n    public class PlaneComparer : IEqualityComparer<Plane>\n    {\n        static public PlaneComparer Epsilon = new PlaneComparer(0.000001f);\n\n        private readonly float _epsilon;\n\n        private PlaneComparer(float epsilon)\n        {\n            _epsilon = epsilon;\n        }\n\n        public bool Equals(Plane x, Plane y)\n        {\n            return Math.Abs(x.Normal.X - y.Normal.X) < _epsilon &&\n                   Math.Abs(x.Normal.Y - y.Normal.Y) < _epsilon &&\n                   Math.Abs(x.Normal.Z - y.Normal.Z) < _epsilon &&\n                   Math.Abs(x.D - y.D) < _epsilon;\n        }\n\n        public int GetHashCode(Plane obj)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public static class ArrayUtil\n    {\n        public static T[] ConvertTo<T>(byte[] source) where T : struct\n        {\n            var sizeOfDest = Marshal.SizeOf(typeof(T));\n            var count = source.Length / sizeOfDest;\n            var dest = new T[count];\n\n            var pinned = GCHandle.Alloc(source, GCHandleType.Pinned);\n            var pointer = pinned.AddrOfPinnedObject();\n\n            for (var i = 0; i < count; i++, pointer += sizeOfDest)\n                dest[i] = (T)Marshal.PtrToStructure(pointer, typeof(T));\n\n            pinned.Free();\n\n            return dest;\n        }\n\n        public static byte[] ConvertFrom<T>(T[] source) where T : struct\n        {\n            var sizeOfSource = Marshal.SizeOf(typeof(T));\n            var count = source.Length;\n            var dest = new byte[sizeOfSource * count];\n\n            var pinned = GCHandle.Alloc(dest, GCHandleType.Pinned);\n            var pointer = pinned.AddrOfPinnedObject();\n\n            for (var i = 0; i < count; i++, pointer += sizeOfSource)\n                Marshal.StructureToPtr(source[i], pointer, true);\n\n            pinned.Free();\n\n            return dest;\n        }\n    }\n\n    static class MathUtility\n    {\n        public static void MinMax(int a, int b, out int min, out int max)\n        {\n            if (a > b)\n            {\n                min = b;\n                max = a;\n            }\n            else\n            {\n                min = a;\n                max = b;\n            }\n        }\n    }\n\n    static class Paths\n    {\n        private const string AssetFolder = \"Assets\";\n        private static readonly string AudioFolder = Path.Combine(AssetFolder, \"Audio\");\n        private static readonly string FontFolder = Path.Combine(AssetFolder, \"Fonts\");\n        private static readonly string ReferenceImageFolder = Path.Combine(AssetFolder, \"ReferenceImages\");\n        private static readonly string TextureFolder = Path.Combine(AssetFolder, \"Textures\");\n        private static readonly string EffectFolder = Path.Combine(AssetFolder, \"Effects\");\n        private static readonly string ModelFolder = Path.Combine(AssetFolder, \"Models\");\n        private static readonly string XmlFolder = Path.Combine(AssetFolder, \"Xml\");\n        private const string CapturedFrameFolder = \"CapturedFrames\";\n        private const string CapturedFrameDiffFolder = \"Diffs\";\n\n        public static string Asset(params string[] pathParts)\n        {\n            return Combine(AssetFolder, pathParts);\n        }\n\n        public static string Audio(params string[] pathParts)\n        {\n            return Combine(AudioFolder, pathParts);\n        }\n\n        public static string Font(params string[] pathParts)\n        {\n            return Combine(FontFolder, pathParts);\n        }\n\n        public static string Texture(params string[] pathParts)\n        {\n            return Combine(TextureFolder, pathParts);\n        }\n\n        public static string RawEffect(params string[] pathParts)\n        {\n            return Combine(EffectFolder, pathParts) + \".fx\";\n        }\n\n        public static string CompiledEffect(params string[] pathParts)\n        {\n            string type;\n#if XNA\n            type = \"XNA\";\n#elif WINDOWSDX\n            type = \"DirectX\";\n#elif DESKTOPGL\n            type = \"OpenGL\";\n#else\n            throw new Exception(\"Make sure the effect path is set up correctly for this platform!\");\n#endif\n            var path = Combine(type, pathParts);\n            return Combine(EffectFolder, path);\n\n        }\n\n        public static string Model(params string[] pathParts)\n        {\n            return Combine(ModelFolder, pathParts);\n        }\n\n        public static string Xml(params string[] pathParts)\n        {\n            return Combine(XmlFolder, pathParts);\n        }\n\n        public static string ReferenceImage(params string[] pathParts)\n        {\n            return Combine(ReferenceImageFolder, pathParts);\n        }\n\n        public static string CapturedFrame(params string[] pathParts)\n        {\n            return Combine(CapturedFrameFolder, pathParts);\n        }\n\n        public static string CapturedFrameDiff(params string[] pathParts)\n        {\n            return Combine(CapturedFrameDiffFolder, pathParts);\n        }\n\n\n        private static string Combine(string head, params string[] tail)\n        {\n            return Path.Combine(head, Path.Combine(tail));\n        }\n\n        public static void SetStandardWorkingDirectory()\n        {\n            var directory = AppDomain.CurrentDomain.BaseDirectory;\n            Directory.SetCurrentDirectory(directory);\n        }\n\n        public static void AreEqual(string expected, string actual)\n        {\n            expected = Path.GetFullPath(expected);\n            actual = Path.GetFullPath(actual);\n            Assert.AreEqual(expected, actual, \"Paths not equal!\");\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tests/Runner/iOS/AppDelegate.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\n\nusing MonoTouch.Foundation;\nusing MonoTouch.UIKit;\n\nusing MonoGame.Tests.Interface;\n\nnamespace MonoGame.Tests.iOS\n{\n\t[Register(\"AppDelegate\")]\n\tpublic partial class AppDelegate : UIApplicationDelegate\n\t{\n\n\t\tprivate FileServer _fileServer;\n\n\t\tpublic override bool FinishedLaunching(UIApplication app, NSDictionary options)\n\t\t{\n\t\t\t// FIXME: Figure out how to pass and receive arguments\n\t\t\t//        in MonoTouch applications.  The Main method\n\t\t\t//        has an empty array and NSProcessInfo has\n\t\t\t//        values specific to Mono launching/debugging.\n\t\t\tMobileInterface.RunAsync(new string[0]);\n\n\t\t\t_fileServer = new FileServer();\n\t\t\t_fileServer.Prefixes.Add(\"http://+:6599/\");\n\t\t\t_fileServer.Start();\n\t\t\treturn true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Runner/iOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleExecutable</key>\n\t<string>MonoGameTests</string>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<integer>1</integer>\n\t\t<integer>2</integer>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Runner/iOS/Main.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing MonoTouch.Foundation;\nusing MonoTouch.UIKit;\n\nnamespace MonoGame.Tests.iOS\n{\n\tpublic class Application\n\t{\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\tUIApplication.Main(args, null, \"AppDelegate\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Tests/Utilities/ActionDaemon.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamespace Kni.Tests.Utilities\n{\n    internal class ActionDaemon\n    {\n        private readonly Queue<Action> _actions = new Queue<Action>();\n        private Thread _thread;\n\n        public Thread Thread\n        {\n            get { return _thread; }\n        }\n\n        public bool Finished\n        {\n            get { return _actions.Count == 0 && (_thread == null || _thread.IsAlive == false); }\n        }\n\n        public void AddAction(Action action)\n        {\n            lock (_actions)\n                _actions.Enqueue(action);\n\n            if (_thread == null || !_thread.IsAlive)\n                Start();\n        }\n\n        public void ForceTermination()\n        {\n            _thread.Abort();\n        }\n\n        public void Clear(bool abortCurrent = false)\n        {\n            lock (_actions)\n                _actions.Clear();\n\n            if (abortCurrent)\n                ForceTermination();\n        }\n\n        private void Start()\n        {\n            _thread = new Thread(DoActions);\n            _thread.Priority = ThreadPriority.Lowest;\n            _thread.IsBackground = true;\n            _thread.Start();\n        }\n\n        private void DoActions()\n        {\n            while (true)\n            {\n                Action currentAction;\n                lock (_actions)\n                {\n                    if (_actions.Count == 0)\n                        break;\n                    currentAction = _actions.Dequeue();\n                }\n                currentAction();\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "ThirdParty/AssimpNet/4.1.0/lib/net40/AssimpNet.xml",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>AssimpNet</name>\n    </assembly>\n    <members>\n        <member name=\"T:Assimp.Animation\">\n            <summary>\n            An animation consists of keyframe data for a number of nodes. For\n            each node affected by the animation, a separate series of data is given.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.Name\">\n            <summary>\n            Gets or sets the name of the animation. If the modeling package the\n            data was exported from only supports a single animation channel, this\n            name is usually empty.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.DurationInTicks\">\n            <summary>\n            Gets or sets the duration of the animation in number of ticks.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.TicksPerSecond\">\n            <summary>\n            Gets or sets the number of ticks per second. It may be zero\n            if it is not specified in the imported file.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.HasNodeAnimations\">\n            <summary>\n            Gets if the animation has node animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.NodeAnimationChannelCount\">\n            <summary>\n            Gets the number of node animation channels where each channel\n            affects a single node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.NodeAnimationChannels\">\n            <summary>\n            Gets the node animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.HasMeshAnimations\">\n            <summary>\n            Gets if the animation has mesh animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshAnimationChannelCount\">\n            <summary>\n            Gets the number of mesh animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshMorphAnimationChannelCount\">\n            <summary>\n            Gets the number of mesh morph animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshAnimationChannels\">\n            <summary>\n            Gets the mesh animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshMorphAnimationChannels\">\n            <summary>\n            Gets the mesh morph animation channels.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Animation.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Animation\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#ToNative(System.IntPtr,Assimp.Unmanaged.AiAnimation@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#FromNative(Assimp.Unmanaged.AiAnimation@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Animation.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.AssimpContext\">\n            <summary>\n            Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion\n            functionality is offered to bypass loading model data into managed memory.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.IsDisposed\">\n            <summary>\n            Gets if the context has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.Scale\">\n            <summary>\n            Gets or sets the uniform scale for the model. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.XAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.YAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.ZAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.UsingCustomIOSystem\">\n            <summary>\n            Gets whether this context is using a user-defined IO system for file handling.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.PropertyConfigurations\">\n            <summary>\n            Gets the property configurations set to this context. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.AssimpContext\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFileFromStream(System.IO.Stream,System.String)\">\n            <summary>\n            Imports a model from the stream without running any post-process steps. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ImportFile\" family of functions.\n            </summary>\n            <param name=\"stream\">Stream to read from</param>\n            <param name=\"formatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful.</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFileFromStream(System.IO.Stream,Assimp.PostProcessSteps,System.String)\">\n            <summary>\n            Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory \n            used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ImportFile\" family of functions.\n            </summary>\n            <param name=\"stream\">Stream to read from</param>\n            <param name=\"postProcessFlags\">Post processing flags, if any</param>\n            <param name=\"formatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful.</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFile(System.String)\">\n            <summary>\n            Imports a model from the specified file without running any post-process steps. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp.\n            </summary>\n            <param name=\"file\">Full path to the file</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFile(System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Imports a model from the specified file. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp.\n            </summary>\n            <param name=\"file\">Full path to the file</param>\n            <param name=\"postProcessFlags\">Post processing flags, if any</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportFile(Assimp.Scene,System.String,System.String)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a file.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"fileName\">Path to the file.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <returns>True if the scene was exported successfully, false otherwise.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportFile(Assimp.Scene,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a file.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"fileName\">Path to the file.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <param name=\"preProcessing\">Preprocessing flags to apply to the model before it is exported.</param>\n            <returns>True if the scene was exported successfully, false otherwise.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportToBlob(Assimp.Scene,System.String)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a data blob.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <returns>The resulting data blob, or null if the export failed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportToBlob(Assimp.Scene,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a data blob.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <param name=\"preProcessing\">Preprocessing flags to apply to the model before it is exported.</param>\n            <returns>The resulting data blob, or null if the export failed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,Assimp.PostProcessSteps,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"importProcessSteps\">Post processing steps used for the import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,System.String)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,Assimp.PostProcessSteps,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"importProcessSteps\">Post processing steps used for the import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,Assimp.PostProcessSteps,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"importProcessSteps\">Post processing steps used for import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,Assimp.PostProcessSteps,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"importProcessSteps\">Post processing steps used for import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.SetIOSystem(Assimp.IOSystem)\">\n            <summary>\n            Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system\n            is used instead.\n            </summary>\n            <param name=\"ioSystem\">Custom file system implementation</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveIOSystem\">\n            <summary>\n            Removes the currently set custom file system implementation from the importer.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetSupportedExportFormats\">\n            <summary>\n            Gets the model formats that are supported for export by Assimp.\n            </summary>\n            <returns>Export formats supported</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetSupportedImportFormats\">\n            <summary>\n            Gets the model formats that are supported for import by Assimp.\n            </summary>\n            <returns>Import formats supported</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetImporterDescriptions\">\n            <summary>\n            Gets descriptions for each importer that assimp has registered.\n            </summary>\n            <returns>Descriptions of supported importers.</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetImporterDescriptionFor(System.String)\">\n            <summary>\n            Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension,\n            they are called in the order that they were registered.\n            </summary>\n            <param name=\"fileExtension\">File extension to query importer support for.</param>\n            <returns>Importer description or null if it does not exist.</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.IsImportFormatSupported(System.String)\">\n            <summary>\n            Checks if the format extension (e.g. \".dae\" or \".obj\") is supported for import.\n            </summary>\n            <param name=\"format\">Model format</param>\n            <returns>True if the format is supported, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.IsExportFormatSupported(System.String)\">\n            <summary>\n            Checks if the format extension (e.g. \".dae\" or \".obj\") is supported for export.\n            </summary>\n            <param name=\"format\">Model format</param>\n            <returns>True if the format is supported, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.SetConfig(Assimp.Configs.PropertyConfig)\">\n            <summary>\n            Sets a configuration property to the context. This is only used during import.\n            </summary>\n            <param name=\"config\">Config to set</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveConfig(System.String)\">\n            <summary>\n            Removes a set configuration property by name.\n            </summary>\n            <param name=\"configName\">Name of the config property</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveConfigs\">\n            <summary>\n            Removes all configuration properties from the context.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ContainsConfig(System.String)\">\n            <summary>\n            Checks if the context has a config set by the specified name.\n            </summary>\n            <param name=\"configName\">Name of the config property</param>\n            <returns>True if the config is present, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.Dispose\">\n            <summary>\n            Disposes of resources held by the context. These include IO systems still attached.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"T:Assimp.AssimpException\">\n            <summary>\n            AssimpNet general exception.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"msg\">The error message.</param>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"paramName\">Name of the param.</param>\n            <param name=\"msg\">The error message.</param>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String,System.Exception)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"msg\">The error message</param>\n            <param name=\"innerException\">The inner exception.</param>\n        </member>\n        <member name=\"T:Assimp.Bone\">\n            <summary>\n            Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame\n            hierarchy and by which it can be addressed by animations. In addition it has a number of\n            influences on vertices.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.Name\">\n            <summary>\n            Gets or sets the name of the bone.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.VertexWeightCount\">\n            <summary>\n            Gets the number of vertex influences the bone contains.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.HasVertexWeights\">\n            <summary>\n            Gets if the bone has vertex weights - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.VertexWeights\">\n            <summary>\n            Gets the vertex weights owned by the bone.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.OffsetMatrix\">\n            <summary>\n            Gets or sets the matrix that transforms from mesh space to bone space in bind pose.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Bone\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.#ctor(System.String,Assimp.Matrix3x3,Assimp.VertexWeight[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Bone\"/> class.\n            </summary>\n            <param name=\"name\">Name of the bone</param>\n            <param name=\"offsetMatrix\">Bone's offset matrix</param>\n            <param name=\"weights\">Vertex weights</param>\n        </member>\n        <member name=\"P:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#ToNative(System.IntPtr,Assimp.Unmanaged.AiBone@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#FromNative(Assimp.Unmanaged.AiBone@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Bone.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Camera\">\n            <summary>\n            Describes a right-handed camera in the scene. An important aspect is that\n            the camera itself is also part of the scenegraph, meaning any values such\n            as the direction vector are not *absolute*, they can be relative to the coordinate\n            system defined by the node which corresponds to the camera. This allows for camera\n            animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Name\">\n            <summary>\n            Gets or sets the name of the camera. This corresponds to a node in the\n            scenegraph with the same name. This node specifies the position of the\n            camera in the scene hierarchy and can be animated.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Position\">\n            <summary>\n            Gets or sets the position of the camera relative to the coordinate space defined by\n            the corresponding node. THe default value is 0|0|0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Up\">\n            <summary>\n            Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the\n            corresponding node. The 'right' vector of the camera is the cross product of the up\n            and direction vectors. The default value is 0|1|0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Direction\">\n            <summary>\n            Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node.\n            The default value is 0|0|1.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.FieldOfview\">\n            <summary>\n            Gets or sets the half horizontal field of view angle, in radians. The FoV angle is\n            the angle between the center line of the screen and the left or right border. The default\n            value is 1/4PI.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ClipPlaneNear\">\n            <summary>\n            Gets or sets the distance of the near clipping plane from the camera. The value may not\n            be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ClipPlaneFar\">\n            <summary>\n            Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must\n            be further than the near clippling plane. The default value is 1000.0f. The ratio between\n            the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid\n            floating-point inaccuracies which can lead to z-fighting.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.AspectRatio\">\n            <summary>\n            Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical\n            values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file.\n            The default value is zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ViewMatrix\">\n            <summary>\n            Gets a right-handed view matrix.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Camera.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Camera\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#ToNative(System.IntPtr,Assimp.Unmanaged.AiCamera@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#FromNative(Assimp.Unmanaged.AiCamera@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Camera.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Color3D\">\n            <summary>\n            Represents a RGB color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Color3D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of RGBA (index 0 access R, 1 access G, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color3D.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n        </member>\n        <member name=\"M:Assimp.Color3D.#ctor(System.Single)\">\n            <summary>\n            Constructs a Color3D where each component is\n            set to the same value.\n            </summary>\n            <param name=\"value\">Value to set R, G, B components</param>\n        </member>\n        <member name=\"M:Assimp.Color3D.IsBlack\">\n            <summary>\n            Determines if the color is black, or close to being black.\n            </summary>\n            <returns>True if the color is black/nearly block, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Adds the two colors together.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(Assimp.Color3D,System.Single)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to add to each component</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(System.Single,Assimp.Color3D)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"value\">Value to add to each component</param>\n            <param name=\"color\">Source color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Subtracts the second color from the first color.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(Assimp.Color3D,System.Single)\">\n            <summary>\n            Subtracts the value from each of the color's components.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to subtract from each component</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(System.Single,Assimp.Color3D)\">\n            <summary>\n            Subtracts the color's components from the value, returning\n            the result as a new color. Same as <c>new Color4D(value) - color</c>\n            </summary>\n            <param name=\"value\">Value for each component of the first color</param>\n            <param name=\"color\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Multiplies the two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Multiplied color.</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(Assimp.Color3D,System.Single)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"value\">Source color</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(System.Single,Assimp.Color3D)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Division(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Divides the first color by the second color, component wise.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Division(Assimp.Color3D,System.Single)\">\n            <summary>\n            Divides the color by a divisor value.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Equality(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Tets equality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Inequality(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Tets inequality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.Equals(Assimp.Color3D)\">\n            <summary>\n            Tests equality between this color and another color\n            </summary>\n            <param name=\"other\">Color to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Color4D\">\n            <summary>\n            Represents a Red-Green-Blue-Alpha (RGBA) color.\n            Color values range from 0 to 1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.A\">\n            <summary>\n            Alpha component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Color4D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of RGBA (index 0 access R, 1 access G, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color4D.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n            <param name=\"a\">Alpha component</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color4D. Alpha is set to 1.0.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single)\">\n            <summary>\n            Constructs a Color4D where each component is\n            set to the same value.\n            </summary>\n            <param name=\"value\">Value to set R, G, B, A components</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(Assimp.Color3D)\">\n            <summary>\n            Constructs a Color4D from a Color3D. Alpha is set to 1.0.\n            </summary>\n            <param name=\"rgb\">RGB values</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(Assimp.Color3D,System.Single)\">\n            <summary>\n            Constructs a Color4D from a Color3D and alpha value.\n            </summary>\n            <param name=\"rgb\">RGB values</param>\n            <param name=\"alpha\">Alpha value</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.IsBlack\">\n            <summary>\n            Determines if the color is black, or close to being black.\n            </summary>\n            <returns>True if the color is black/nearly block, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Adds the two colors together.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(Assimp.Color4D,System.Single)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to add to each component</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(System.Single,Assimp.Color4D)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"value\">Value to add to each component</param>\n            <param name=\"color\">Source color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Subtracts the second color from the first color.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(Assimp.Color4D,System.Single)\">\n            <summary>\n            Subtracts the value from each of the color's components.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to subtract from each component</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(System.Single,Assimp.Color4D)\">\n            <summary>\n            Subtracts the color's components from the value, returning\n            the result as a new color. Same as <c>new Color4D(value) - color</c>\n            </summary>\n            <param name=\"value\">Value for each component of the first color</param>\n            <param name=\"color\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Multiplies the two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Multiplied color.</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(Assimp.Color4D,System.Single)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"value\">Source color</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(System.Single,Assimp.Color4D)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Division(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Divides the first color by the second color, component wise.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Division(Assimp.Color4D,System.Single)\">\n            <summary>\n            Divides the color by a divisor value.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Equality(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Tets equality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Inequality(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Tets inequality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.Equals(Assimp.Color4D)\">\n            <summary>\n            Tests equality between this color and another color\n            </summary>\n            <param name=\"other\">Color to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Configs.PropertyConfig\">\n            <summary>\n            Base property config.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.PropertyConfig.Name\">\n            <summary>\n            Gets the property name.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.#ctor(System.String)\">\n            <summary>\n            Creates a new property config that has no active Assimp property store.\n            </summary>\n            <param name=\"name\">Name of the property.</param>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.ApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IntegerPropertyConfig\">\n            <summary>\n            Describes an integer configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IntegerPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IntegerPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.#ctor(System.String,System.Int32)\">\n            <summary>\n            Constructs a new IntengerPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.#ctor(System.String,System.Int32,System.Int32)\">\n            <summary>\n            constructs a new IntegerPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FloatPropertyConfig\">\n            <summary>\n            Describes a float configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FloatPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FloatPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.#ctor(System.String,System.Single)\">\n            <summary>\n            Constructs a new FloatPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.#ctor(System.String,System.Single,System.Single)\">\n            <summary>\n            Constructs a new FloatPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MatrixPropertyConfig\">\n            <summary>\n            Describes a <see cref=\"T:Assimp.Matrix4x4\"/> configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MatrixPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MatrixPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.#ctor(System.String,Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new MatrixPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.#ctor(System.String,Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new MatrixPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.BooleanPropertyConfig\">\n            <summary>\n            Describes a boolean configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.BooleanPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.BooleanPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new BooleanPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.#ctor(System.String,System.Boolean,System.Boolean)\">\n            <summary>\n            Constructs a new BooleanPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.StringPropertyConfig\">\n            <summary>\n            Describes a string configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.StringPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.StringPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.#ctor(System.String,System.String)\">\n            <summary>\n            Constructs a new StringPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.#ctor(System.String,System.String,System.String)\">\n            <summary>\n            Constructs a new StringPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.ProcessNames(System.String[])\">\n            <summary>\n            Convience method for constructing a whitespace delimited name list.\n            </summary>\n            <param name=\"names\">Array of names</param>\n            <returns>White-space delimited list as a string</returns>\n        </member>\n        <member name=\"T:Assimp.Configs.MeasureTimeConfig\">\n            <summary>\n            Configuration to enable time measurements. If enabled, each\n            part of the loading process is timed and logged. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeasureTimeConfig.MeasureTimeConfigName\">\n            <summary>\n            Gets the string name used by MeasureTimeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeasureTimeConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MeasureTimeConfig.\n            </summary>\n            <param name=\"measureTime\">True if the loading process should be timed or not.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MultithreadingConfig\">\n            <summary>\n            Configuration to set Assimp's multithreading policy. Possible\n            values are -1 to let Assimp decide, 0 to disable multithreading, or\n            any number larger than zero to force a specific number of threads. This\n            is only a hint and may be ignored by Assimp. Default value is -1.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MultithreadingConfig.MultithreadingConfigName\">\n            <summary>\n            Gets the string name used by MultithreadingConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MultithreadingConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MultithreadingConfig.\n            </summary>\n            <param name=\"value\">A value of -1 will let Assimp decide,\n            a value of zero to disable multithreading, and a value greater than zero\n            to force a specific number of threads.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NoSkeletonMeshesConfig\">\n            <summary>\n            Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid\n            in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing\n            the bones. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NoSkeletonMeshesConfig.NoSkeletonMeshesConfigName\">\n            <summary>\n            Gets the string name used by NoSkeletonMeshConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NoSkeletonMeshesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new NoSkeletonMeshConfig.\n            </summary>\n            <param name=\"disableDummySkeletonMeshes\">True if dummy skeleton mesh generation should be disabled, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TangentSmoothingAngleConfig\">\n            <summary>\n            Configuration to set the maximum angle that may be between two vertex tangents/bitangents\n            when they are smoothed during the step to calculate the tangent basis. The default\n            value is 45 degrees.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TangentSmoothingAngleConfig.TangentSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by TangentSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TangentSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new TangentSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle, in degrees.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NormalSmoothingAngleConfig\">\n            <summary>\n            Configuration to set the maximum angle between two face normals at a vertex when\n            they are smoothed during the step to calculate smooth normals. This is frequently\n            called the \"crease angle\". The maximum and default value is 175 degrees.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NormalSmoothingAngleConfig.NormalSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by NormalSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NormalSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new NormalSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle, in degrees.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MDLColorMapConfig\">\n            <summary>\n            Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5)\n            files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains\n            RGB triplets for each of the 256 palette entries. If the file is not found, a\n            default palette (from Quake 1) is used. The default value is \"colormap.lmp\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MDLColorMapConfig.MDLColorMapConfigName\">\n            <summary>\n            Gets the string name used by MDLColorMapConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MDLColorMapConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MDLColorMapConfig.\n            </summary>\n            <param name=\"fileName\">Colormap filename</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MaterialExcludeListConfig\">\n            <summary>\n            Configuration for the the <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/> step\n            to determine what materials to keep. If a material matches one of these names it will not\n            be modified or removed by the post processing step. Default is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MaterialExcludeListConfig.MaterialExcludeListConfigName\">\n            <summary>\n            Gets the string name used by MaterialExcludeListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MaterialExcludeListConfig.#ctor(System.String[])\">\n            <summary>\n            Constructs a new MaterialExcludeListConfig. Material names containing whitespace\n            <c>must</c> be enclosed in single quotation marks.\n            </summary>\n            <param name=\"materialNames\">List of material names that will not be modified or replaced by the remove redundant materials post process step.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.KeepSceneHierarchyConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed\n            where meshes with the same materials are not joined. This option can be useful\n            if you have a scene hierarchy that contains important additional information\n            which you intend to parse. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.KeepSceneHierarchyConfig.KeepSceneHierarchyConfigName\">\n            <summary>\n            Gets the string name used by KeepSceneHierarchyConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.KeepSceneHierarchyConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new KeepHierarchyConfig. \n            </summary>\n            <param name=\"keepHierarchy\">True to keep the hierarchy, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NormalizeVertexComponentsConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to normalize all vertex components into the -1...1 range. The default value is\n            false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NormalizeVertexComponentsConfig.NormalizeVertexComponentsConfigName\">\n            <summary>\n            Gets the string name used by NormalizeVertexComponentsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NormalizeVertexComponentsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new NormalizeVertexComponentsConfig.\n            </summary>\n            <param name=\"normalizeVertexComponents\">True if the post process step should normalize vertex components, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveDegeneratePrimitivesConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step to\n            remove degenerted primitives from the import immediately. The default value is false,\n            where degenerated triangles are converted to lines, and degenerated lines to points.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveDegeneratePrimitivesConfig.RemoveDegeneratePrimitivesConfigName\">\n            <summary>\n            Gets the string name used by RemoveDegeneratePrimitivesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveDegeneratePrimitivesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveDegeneratePrimitivesConfig.\n            </summary>\n            <param name=\"removeDegenerates\">True if the post process step should remove degenerate primitives, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step. If true, the area of the triangles are checked\n            to see if they are greater than 1e-6. If so, the triangle is removed if <see cref=\"T:Assimp.Configs.RemoveDegeneratePrimitivesConfig\"/> is set to true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig.RemoveDegeneratePrimitivesCheckAreaConfigName\">\n            <summary>\n            Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig.\n            </summary>\n            <param name=\"checkArea\">True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NodeExcludeListConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/> step\n            to preserve nodes matching a name in the given list. Nodes that match the names in the list\n            will not be modified or removed. Identifiers containing whitespaces\n            <c>must</c> be enclosed in single quotation marks. The default value is an\n            empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NodeExcludeListConfig.NodeExcludeListConfigName\">\n            <summary>\n            Gets the string name used by NodeExcludeListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NodeExcludeListConfig.#ctor(System.String[])\">\n            <summary>\n            Constructs a new NodeExcludeListConfig.\n            </summary>\n            <param name=\"nodeNames\">List of node names</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MeshTriangleLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step \n            that specifies the maximum number of triangles a mesh can contain. The\n            default value is MeshTriangleLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshTriangleLimitConfig.MeshTriangleLimitConfigName\">\n            <summary>\n            Gets the string name used by MeshTriangleLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshTriangleLimitConfig.MeshTriangleLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeshTriangleLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MeshTriangleLimitConfig.\n            </summary>\n            <param name=\"maxTriangleLimit\">Max number of triangles a mesh can contain.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MeshVertexLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step\n            that specifies the maximum number of vertices a mesh can contain. The\n            default value is MeshVertexLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshVertexLimitConfig.MeshVertexLimitConfigName\">\n            <summary>\n            Gets the string name used by MeshVertexLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshVertexLimitConfig.MeshVertexLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_VERTICES\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeshVertexLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MeshVertexLimitConfig.\n            </summary>\n            <param name=\"maxVertexLimit\">Max number of vertices a mesh can contain.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.VertexBoneWeightLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/> step\n            that specifies the maximum number of bone weights per vertex. The default\n            value is VertexBoneWeightLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexBoneWeightLimitConfig.VertexBoneWeightLimitConfigName\">\n            <summary>\n            gets the string name used by VertexBoneWeightLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexBoneWeightLimitConfig.VertexBoneWeightLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_LBW_MAX_WEIGHTS\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.VertexBoneWeightLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new VertexBoneWeightLimitConfig.\n            </summary>\n            <param name=\"maxBoneWeights\">Max number of bone weights per vertex.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.VertexCacheSizeConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\"/> step\n            that specifies the size of the post-transform vertex cache. The size is\n            given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexCacheSizeConfig.VertexCacheSizeConfigName\">\n            <summary>\n            Gets the string name used by VertexCacheConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexCacheSizeConfig.VertexCacheSizeConfigDefaultValue\">\n            <summary>\n            Gets the defined default vertex cache size, this corresponds to \n            the <see cref=\"F:Assimp.Unmanaged.AiDefines.PP_ICL_PTCACHE_SIZE\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.VertexCacheSizeConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new VertexCacheSizeConfig.\n            </summary>\n            <param name=\"vertexCacheSize\">Size of the post-transform vertex cache, in number of vertices.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveComponentConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.RemoveComponent\"/> step that\n            specifies which parts of the data structure is to be removed. If no valid mesh\n            remains after the step, the import fails. The default value i <see cref=\"F:Assimp.ExcludeComponent.None\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveComponentConfig.RemoveComponentConfigName\">\n            <summary>\n            Gets the string name used by RemoveComponentConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveComponentConfig.#ctor(Assimp.ExcludeComponent)\">\n            <summary>\n            Constructs a new RemoveComponentConfig.\n            </summary>\n            <param name=\"componentsToExclude\">Bit-wise combination of components to exclude.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SortByPrimitiveTypeConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step that\n            specifies which primitive types are to be removed by the step. Specifying all\n            primitive types is illegal. The default value is zero specifying none.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SortByPrimitiveTypeConfig.SortByPrimitiveTypeConfigName\">\n            <summary>\n            Gets the string name used by SortByPrimitiveTypeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SortByPrimitiveTypeConfig.#ctor(Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new SortByPrimitiveTypeConfig.\n            </summary>\n            <param name=\"typesToRemove\">Bit-wise combination of primitive types to remove</param>\n        </member>\n        <member name=\"T:Assimp.Configs.AnimationAccuracyConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step that\n            specifies the floating point accuracy for animation values, specifically\n            the episilon during comparisons. The default value is 0.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.AnimationAccuracyConfig.AnimationAccuracyConfigName\">\n            <summary>\n            Gets the string name used by AnimationAccuracyConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.AnimationAccuracyConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new AnimationAccuracyConfig.\n            </summary>\n            <param name=\"episilon\">Episilon for animation value comparisons.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TransformUVConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.TransformUVCoords\"/> step that\n            specifies which UV transformations are to be evaluated. The default value\n            is for all combinations (scaling, rotation, translation).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TransformUVConfig.TransformUVConfigName\">\n            <summary>\n            Gets the string name used by TransformUVConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TransformUVConfig.#ctor(Assimp.UVTransformFlags)\">\n            <summary>\n            Constructs a new TransformUVConfig.\n            </summary>\n            <param name=\"transformFlags\">Bit-wise combination specifying which UV transforms that should be evaluated.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FavorSpeedConfig\">\n            <summary>\n            Configuration that is a hint to Assimp to favor speed against import quality. Enabling this\n            option may result in faster loading, or it may not. It is just a hint to loaders\n            and post-process steps to use faster code paths if possible. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FavorSpeedConfig.FavorSpeedConfigName\">\n            <summary>\n            Gets the string name used by FavorSpeedConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FavorSpeedConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FavorSpeedConfig.\n            </summary>\n            <param name=\"favorSpeed\">True if Assimp should favor speed at the expense of quality, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MaxBoneCountConfig\">\n            <summary>\n            Configures the maximum bone count per mesh for the <see cref=\"F:Assimp.PostProcessSteps.SplitByBoneCount\"/> step. Meshes are\n            split until the maximum number of bones is reached.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MaxBoneCountConfig.MaxBoneCountConfigName\">\n            <summary>\n            Gets the string name used by MaxBoneCountConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MaxBoneCountConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MaxBoneCountConfig.\n            </summary>\n            <param name=\"maxBones\">The maximum bone count.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TangentTextureChannelIndexConfig\">\n            <summary>\n            Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TangentTextureChannelIndexConfig.TangentTextureChannelIndexConfigName\">\n            <summary>\n            Gets the string name used by TangentTextureChannelIndexConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TangentTextureChannelIndexConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new TangentTextureChannelIndexConfig.\n            </summary>\n            <param name=\"textureChannelIndex\">The zero-based texture channel index.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.DeboneThresholdConfig\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.Debone\"/> threshold that is used to determine what bones are removed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.DeboneThresholdConfig.DeboneThresholdConfigName\">\n            <summary>\n            Gets the string name used by DeboneThresholdConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.DeboneThresholdConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new DeboneThresholdConfig.\n            </summary>\n            <param name=\"threshold\">The debone threshold.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.DeboneAllOrNoneConfig\">\n            <summary>\n            Configuration that requires all bones to qualify for deboning before any are removed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.DeboneAllOrNoneConfig.DeboneAllOrNoneConfigName\">\n            <summary>\n            Gets the string name used by DeboneAllOrNoneConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.DeboneAllOrNoneConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new DeboneAllOrNoneConfig.\n            </summary>\n            <param name=\"allOrNone\">True if all are required, false if none need to qualify.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RootTransformationConfig\">\n            <summary>\n            Configuration for <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> that sets a user defined matrix as the scene root node transformation before\n            transforming vertices. Default value is the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RootTransformationConfig.RootTransformationConfigName\">\n            <summary>\n            Gets the string name used by RootTransformationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RootTransformationConfig.#ctor(Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new RootTransformationConfig.\n            </summary>\n            <param name=\"rootTransform\">Root transformation matrix to be set to the root scene node during the pretransform post process step.</param>\n        </member>\n        <member name=\"M:Assimp.Configs.RootTransformationConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.GlobalScaleConfig\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.GlobalScale\"/> step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model,\n            which this processing step can utilize.\n            </summary>\n            <seealso cref=\"T:Assimp.Configs.FloatPropertyConfig\" />\n        </member>\n        <member name=\"P:Assimp.Configs.GlobalScaleConfig.GlobalScaleConfigName\">\n            <summary>\n            Gets the string name used by GlobalScaleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.GlobalScaleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new GlobalScaleConfig.\n            </summary>\n            <param name=\"globalScale\">Value to scale the entire scene by.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.GlobalKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the \"global\" keyframe that will be imported. There are other configs\n            for specific importers that will override the global setting.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.GlobalKeyFrameImportConfig.GlobalKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by GlobalKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.GlobalKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new GlobalKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3KeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MD3 format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3KeyFrameImportConfig.MD3KeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MD3KeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3KeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MD3KeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD2KeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MD2 format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD2KeyFrameImportConfig.MD2KeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MD2KeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD2KeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MD2KeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MDLKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MDL format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MDLKeyFrameImportConfig.MDLKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MDLKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MDLKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MDLKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SMDKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the SMD format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SMDKeyFrameImportConfig.SMDKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by SMDKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SMDKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new SMDKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.UnrealKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the Unreal format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.UnrealKeyFrameImportConfig.UnrealKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by UnrealKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.UnrealKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new UnrealKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ACSeparateBackfaceCullConfig\">\n            <summary>\n            Configures the AC loader to collect all surfaces which have the \"Backface cull\" flag set in separate\n            meshes. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ACSeparateBackfaceCullConfig.ACSeparateBackfaceCullConfigName\">\n            <summary>\n            Gets the string name used by ACSeparateBackfaceCullConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ACSeparateBackfaceCullConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ACSeparateBackfaceCullConfig.\n            </summary>\n            <param name=\"separateBackfaces\">True if all surfaces that have the \"backface cull\" flag set should be collected in separate meshes, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ACEvaluateSubdivisionConfig\">\n            <summary>\n            Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence\n            of the 'subdiv' attribute in the file). By default, Assimp performs\n            the subdivision using the standard Catmull-Clark algorithm. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ACEvaluateSubdivisionConfig.ACEvaluateSubdivisionConfigName\">\n            <summary>\n            Gets the string name used by ACEvaluateSubdivisionConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ACEvaluateSubdivisionConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ACEvaluateSubdivisionConfig.\n            </summary>\n            <param name=\"evaluateSubdivision\">True if the AC loader should evaluate subdivisions, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.UnrealHandleFlagsConfig\">\n            <summary>\n            Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided).\n            The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.UnrealHandleFlagsConfig.UnrealHandleFlagsConfigName\">\n            <summary>\n            Gets the string name used by UnrealHandleFlagsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.UnrealHandleFlagsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new UnrealHandleFlagsConfig.\n            </summary>\n            <param name=\"handleFlags\">True if the unreal loader should separate faces with different surface flags, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TerragenComputeTexCoordsConfig\">\n            <summary>\n            Configures the terragen import plugin to compute UV's for terrains, if\n            they are not given. Furthermore, a default texture is assigned. The default value is false.\n            <para>UV coordinates for terrains are so simple to compute that you'll usually \n            want to compute them on your own, if you need them. This option is intended for model viewers which\n            want to offer an easy way to apply textures to terrains.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TerragenComputeTexCoordsConfig.TerragenComputeTexCoordsConfigName\">\n            <summary>\n            Gets the string name used by TerragenComputeTexCoordsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TerragenComputeTexCoordsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new TerragenComputeTexCoordsConfig.\n            </summary>\n            <param name=\"computeTexCoords\">True if terran UV coordinates should be computed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ASEReconstructNormalsConfig\">\n            <summary>\n            Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups\n            loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ASEReconstructNormalsConfig.ASEReconstructNormalsConfigName\">\n            <summary>\n            Gets the string name used by ASEReconstructNormalsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ASEReconstructNormalsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ASEReconstructNormalsConfig.\n            </summary>\n            <param name=\"reconstructNormals\">True if normals should be re-computed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3HandleMultiPartConfig\">\n            <summary>\n            Configures the M3D loader to detect and process multi-part Quake player models. These models\n            usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is\n            set to true, Assimp will try to load and combine all three files if one of them is loaded. The\n            default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3HandleMultiPartConfig.MD3HandleMultiPartConfigName\">\n            <summary>\n            Gets the string name used by MD3HandleMultiPartConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3HandleMultiPartConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MD3HandleMultiPartConfig.\n            </summary>\n            <param name=\"handleMultiParts\">True if the split files should be loaded and combined, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3SkinNameConfig\">\n            <summary>\n            Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks\n            whether a file named \"md3_file_name\"_\"skin_name\".skin exists. These files are used by\n            Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue'\n            are typical skin names. The default string value is \"default\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3SkinNameConfig.MD3SkinNameConfigName\">\n            <summary>\n            Gets the string name used by MD3SkinNameConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3SkinNameConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MD3SkinNameConfig.\n            </summary>\n            <param name=\"skinName\">The skin name.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3ShaderSourceConfig\">\n            <summary>\n            Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or\n            relative to where all MD3 shaders reside. the default string value is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3ShaderSourceConfig.MD3ShaderSourceConfigName\">\n            <summary>\n            Gets the string name used by MD3ShaderSourceConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3ShaderSourceConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MD3ShaderSourceConfig.\n            </summary>\n            <param name=\"shaderFile\">The shader file.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWOImportOneLayerConfig\">\n            <summary>\n            Configures the LWO loader to load just one layer from the model.\n            <para>LWO files consist of layers and in some cases it could be useful to load only one of them.\n            This property can be either a string - which specifies the name of the layer - or an integer - the index\n            of the layer. If the property is not set then the whole LWO model is loaded. Loading fails\n            if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty</para>\n            The default value is false (all layers are loaded).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWOImportOneLayerConfig.LWOImportOneLayerConfigName\">\n            <summary>\n            Gets the string name used by LWOImportOneLayerConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWOImportOneLayerConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new LWOImportOneLayerConfig.\n            </summary>\n            <param name=\"importOneLayerOnly\">True if only one layer should be imported, false if all layers should be imported.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD5NoAnimationAutoLoadConfig\">\n            <summary>\n            Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically.\n            The default value is false.\n            <para>The default strategy is to look for a file with the same name but with the MD5ANIm extension\n            in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration\n            option can be used to disable this behavior.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD5NoAnimationAutoLoadConfig.MD5NoAnimationAutoLoadConfigName\">\n            <summary>\n            Gets the string name used by MD5NoAnimationAutoLoadConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD5NoAnimationAutoLoadConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MD5NoAnimationAutoLoadConfig.\n            </summary>\n            <param name=\"noAutoLoadAnim\">True if animations should not be automatically loaded, false if they should be.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWSAnimationStartConfig\">\n            <summary>\n            Defines the beginning of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's. The default value is the one taken from the file.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the start time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation start from the input LWS\n            file ('FirstFrame' line)</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWSAnimationStartConfig.LWSAnimationStartConfigName\">\n            <summary>\n            Gets the string name used by LWSAnimationStartConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWSAnimationStartConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new LWSAnimationStartConfig.\n            </summary>\n            <param name=\"animStart\">Beginning of the time range</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWSAnimationEndConfig\">\n            <summary>\n            Defines the ending of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's. The default value is the one taken from the file\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the end time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation end from the input LWS\n            file.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWSAnimationEndConfig.LWSAnimationEndConfigName\">\n            <summary>\n            Gets the string name used by LWSAnimationEndConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWSAnimationEndConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new LWSAnimationEndConfig.\n            </summary>\n            <param name=\"animEnd\">Ending of the time range</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IRRAnimationFrameRateConfig\">\n            <summary>\n            Defines the output frame rate of the IRR loader.\n            <para>IRR animations are difficult to convert for Assimp and there will always be\n            a loss of quality. This setting defines how many keys per second are returned by the converter.</para>\n            The default value is 100 frames per second.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IRRAnimationFrameRateConfig.IRRAnimationFrameRateConfigName\">\n            <summary>\n            Gets the string name used by IRRAnimationFrameRateConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IRRAnimationFrameRateConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new IRRAnimationFramerateConfig.\n            </summary>\n            <param name=\"frameRate\">Number of frames per second to output.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.OgreMaterialFileConfig\">\n            <summary>\n            The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp\n            where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material,\n            and lastly the material name defined by this config property. The default value is \"Scene.Material\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.OgreMaterialFileConfig.OgreMaterialFileConfigName\">\n            <summary>\n            Gets the string name used by OgreMaterialFileConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.OgreMaterialFileConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new OgreMaterialFileConfig.\n            </summary>\n            <param name=\"materialFileName\">Material file name to load.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.OgreTextureTypeFromFilenameConfig\">\n            <summary>\n            The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified\n            in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: \n            <list type=\"bullet\">\n            <item><description>Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap</description></item>\n            <item><description>Specular Maps: _s, _spec, _specular, _specularmap</description></item>\n            <item><description>Light Maps: _l, _light, _lightmap, _occ, _occlusion</description></item>\n            <item><description>Displacement Maps: _dis, _displacement</description></item>\n            </list>\n            The matching is case insensitive. Postfix is taken between the last \"_\" and last \".\". The default behavior is to detect type from lower cased\n            texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then,\n            <see cref=\"F:Assimp.TextureType.Diffuse\"/> is used. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.OgreTextureTypeFromFilenameConfig.OgreTextureTypeFromFilenameConfigName\">\n            <summary>\n            Gets the string name used by OgreTextureTypeFromFilenameConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.OgreTextureTypeFromFilenameConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new OgreTextureTypeFromFilenameConfig.\n            </summary>\n            <param name=\"fileNameDefinesTextureUsage\">True if the filename defines texture usage, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCSkipSpaceRepresentationsConfig\">\n            <summary>\n            Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCSkipSpaceRepresentationsConfig.IFCSkipSpaceRepresentationsConfigName\">\n            <summary>\n            Gets the string name used by IFCSkipSpaceRepresentationsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCSkipSpaceRepresentationsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IFCSkipSpaceRepresentationsConfig.\n            </summary>\n            <param name=\"skipSpaceRepresentations\">True if the IfcSpace elements are skipped, false if otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCUseCustomTriangulationConfig\">\n            <summary>\n            Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false,\n            walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected\n            with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known\n            issues with these kind of polygons.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCUseCustomTriangulationConfig.IFCUseCustomTriangulationConfigName\">\n            <summary>\n            Gets the string name used by IFCUseCustomTriangulationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCUseCustomTriangulationConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IFCUseCustomTriangulationConfig.\n            </summary>\n            <param name=\"useCustomTriangulation\">True if the loader should use its own triangulation routine for walls/floors, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCSmoothingAngleConfig\">\n            <summary>\n            Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120]\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCSmoothingAngleConfig.IFCSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by IFCSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new IFCSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle when tessellating curves. Needs to be in the range of [5, 120].</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCCylindricalTessellationConfig\">\n            <summary>\n            Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180].\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCCylindricalTessellationConfig.IFCCylindricalTessellationConfigName\">\n            <summary>\n            Gets the string name used by IFCCylindricalTessellationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCCylindricalTessellationConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new IFCCylindricalTessellationConfig.\n            </summary>\n            <param name=\"tessellation\">Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180].</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ColladaIgnoreUpDirectionConfig\">\n            <summary>\n            Specifies whether the collada loader will ignore the up direction. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ColladaIgnoreUpDirectionConfig.ColladaIgnoreUpDirectionConfigName\">\n            <summary>\n            Gets the string name used by ColladaIgnoreUpDirectionConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ColladaIgnoreUpDirectionConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ColladaIgnoreUpDirectionConfig.\n            </summary>\n            <param name=\"ignoreUpDirection\">True if the loader should ignore the up direction, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAllGeometryLayersConfig\">\n            <summary>\n            Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAllGeometryLayersConfig.FBXImportAllGeometryLayersConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAllGeometryLayersConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAllGeometryLayersConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAllGeometryLayersConfig.\n            </summary>\n            <param name=\"importAllGeometryLayers\">True if all geometry layers should be merged, false otherwise to take only the first layer.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAllMaterialsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials,\n            if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAllMaterialsConfig.FBXImportAllMaterialsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAllMaterialsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAllMaterialsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAllMaterialsConfig.\n            </summary>\n            <param name=\"importAllMaterials\">True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials).</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportMaterialsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import materials. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportMaterialsConfig.FBXImportMaterialsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportMaterialsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportMaterialsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportMaterialsConfig.\n            </summary>\n            <param name=\"importMaterials\">True if the FBX importer should import materials, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportEmbeddedTexturesConfig\">\n            <summary>\n            Specifies whether the FBX importer will import embedded textures. Default is true.\n            </summary>\n            <seealso cref=\"T:Assimp.Configs.BooleanPropertyConfig\" />\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportEmbeddedTexturesConfig.FBXImportEmbeddedTexturesConfigName\">\n            <summary>\n            Gets the string name used by FBXImportEmbeddedTexturesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportEmbeddedTexturesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportEmbeddedTexturesConfig.\n            </summary>\n            <param name=\"importTextures\">True if the FBX importer should import embedded textures, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportSearchEmbeddedTexturesConfig\">\n            <summary>\n            Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportSearchEmbeddedTexturesConfig.FBXImportSearchEmbeddedTexturesConfigName\">\n            <summary>\n            Gets the string name used by FBXImportSearchEmbeddedTexturesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportSearchEmbeddedTexturesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportSearchEmbeddedTexturesConfig.\n            </summary>\n            <param name=\"searchEmbeddedTextures\">True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportCamerasConfig\">\n            <summary>\n            Specifies whether the FBX importer will import cameras. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportCamerasConfig.FBXImportCamerasConfigName\">\n            <summary>\n            Gets the string name used by FBXImportCamerasConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportCamerasConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportCamerasConfig.\n            </summary>\n            <param name=\"importCameras\">True if the FBX importer should import cameras, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportLightsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import lights. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportLightsConfig.FBXImportLightsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportLightsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportLightsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportLightsConfig.\n            </summary>\n            <param name=\"importLights\">True if the FBX importer should import lights, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAnimationsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import animations. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAnimationsConfig.FBXImportAnimationsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAnimationsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAnimationsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAnimationsConfig.\n            </summary>\n            <param name=\"importAnimations\">True if the FBX importer should import animations, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXStrictModeConfig\">\n            <summary>\n            Specifies whether the FBX importer will act in strict mode in which only the FBX 2013\n            format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this\n            format is best supported and well-tested. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXStrictModeConfig.FBXStrictModeConfigName\">\n            <summary>\n            Gets the string name used by FBXStrictModeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXStrictModeConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXStrictModeConfig.\n            </summary>\n            <param name=\"useStrictMode\">True if FBX strict mode should be used, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXPreservePivotsConfig\">\n            <summary>\n            Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots\n            and offsets will be evaluated whenever possible. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXPreservePivotsConfig.FBXPreservePivotsConfigName\">\n            <summary>\n            Gets the string name used by FBXPreservePivotsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXPreservePivotsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXPreservePivotsConfig.\n            </summary>\n            <param name=\"preservePivots\">True if pivots should be preserved, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig\">\n            <summary>\n            Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose \n            transformation over their entire defined range. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig.FBXOptimizeEmptyAnimationCurvesConfigName\">\n            <summary>\n            Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXOptimizeEmptyAnimationCurvesConfig.\n            </summary>\n            <param name=\"optimizeEmptyAnimations\">True if empty animation curves should be dropped, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.XFileUseDoublesConfig\">\n            <summary>\n            Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.XFileUseDoublesConfig.XFileUseDoublesConfigName\">\n            <summary>\n            Gets the string name used by XFileUseDoublesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.XFileUseDoublesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new XFileUseDoublesConfig.\n            </summary>\n            <param name=\"useDoubles\">True if the x file uses 64-bit double values rather than 32-bit float values.</param>\n        </member>\n        <member name=\"T:Assimp.EmbeddedTexture\">\n            <summary>\n            Represents an embedded texture. Some file formats directly embed texture assets.\n            Embedded textures may be uncompressed, where the data is given in an uncompressed format.\n            Or it may be compressed in a format like png or jpg. In the latter case, the raw\n            file bytes are given so the application must utilize an image decoder (e.g. DevIL) to\n            get access to the actual color data. This object represents both types, so some properties may or may not be valid depending\n            if it is compressed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.IsCompressed\">\n            <summary>\n            Gets if the texture is compressed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Width\">\n            <summary>\n            Gets the width of the texture in pixels. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Height\">\n            <summary>\n            Gets the height of the texture in pixels. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.HasNonCompressedData\">\n            <summary>\n            Gets if the texture has non-compressed texel data. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.NonCompressedDataSize\">\n            <summary>\n            Gets the size of the non-compressed texel data. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.NonCompressedData\">\n            <summary>\n            Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.HasCompressedData\">\n            <summary>\n            Gets if the embedded texture has compressed data. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedDataSize\">\n            <summary>\n            Gets the size of the compressed data. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedData\">\n            <summary>\n            Gets the raw byte data representing the compressed texture. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedFormatHint\">\n            <summary>\n            Gets the format hint to determine the type of compressed data. This hint\n            is a three-character lower-case hint like \"dds\", \"jpg\", \"png\".\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. Should use only if\n            reading from a native value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. This creates a compressed\n            embedded texture.\n            </summary>\n            <param name=\"compressedFormatHint\">The 3 character format hint.</param>\n            <param name=\"compressedData\">The compressed data.</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor(System.Int32,System.Int32,Assimp.Texel[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. This creates an uncompressed\n            embedded texture.\n            </summary>\n            <param name=\"width\">Width of the texture</param>\n            <param name=\"height\">Height of the texture</param>\n            <param name=\"uncompressedData\">Color data</param>\n            <exception cref=\"T:System.ArgumentException\">Thrown if the data size does not match width * height.</exception>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#ToNative(System.IntPtr,Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#FromNative(Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MetaDataType\">\n            <summary>\n            Enumerates metadata data types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Bool\">\n            <summary>\n            Metadata is a boolean.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Int32\">\n            <summary>\n            Metadata is an integer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.UInt64\">\n            <summary>\n            Metadata is an unsigned 64-bit integer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Float\">\n            <summary>\n            Metadata is a float.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Double\">\n            <summary>\n            Metadata is a double.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.String\">\n            <summary>\n            Metadata is a string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Vector3D\">\n            <summary>\n            Metadata is a <see cref=\"F:Assimp.MetaDataType.Vector3D\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PostProcessSteps\">\n            <summary>\n            Post processing flag options, specifying a number of steps\n            that can be run on the data to either generate additional vertex\n            data or optimize the imported data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.None\">\n            <summary>\n            No flags enabled.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\">\n            <summary>\n            Calculates the tangents and binormals (bitangents)\n            for the imported meshes.\n            <para>\n            This does nothing if a mesh does not have normals. You might\n            want this post processing step to be executed if you plan\n            to use tangent space calculations such as normal mapping. There is a\n            config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which\n            allows you to specify a maximimum smoothing angle for the algorithm.\n            However, usually you'll want to leave it at the default value.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\">\n            <summary>\n            Identifies and joins identical vertex data sets within all\n            imported meshes.\n            <para>\n            After this step is run each mesh does contain only unique vertices\n            anymore, so a vertex is possibly used by multiple faces. You usually\n            want to use this post processing step. If your application deals with\n            indexed geometry, this step is compulsory or you'll just waste rendering\n            time.</para>\n            <para>If this flag is not specified, no vertices are referenced by more than one\n            face and no index buffer is required for rendering.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.MakeLeftHanded\">\n            <summary>\n            Converts all imported data to a left handed coordinate space.\n            \n            <para>By default the data is returned in a right-handed coordinate space,\n            where +X points to the right, +Z towards the viewer, and +Y upwards.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.Triangulate\">\n            <summary>\n            Triangulates all faces of all meshes.\n            <para>\n            By default the imported mesh data might contain faces with more than \n            three indices. For rendering you'll usually want all faces to\n            be triangles. This post processing step splits up all\n            higher faces to triangles. Line and point primitives are *not*\n            modified. If you want 'triangles only' with no other kinds of primitives,\n            try the following:\n            </para>\n            <list type=\"number\">\n            <item>\n            <description>Specify both <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/> and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>.</description>\n            </item>\n            <item>\n            <description>Ignore all point and line meshes when you process Assimp's output</description>\n            </item>\n            </list>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.RemoveComponent\">\n            <summary>\n            Removes some parts of the data structure (animations, materials,\n            light sources, cameras, textures, vertex components).\n            <para>\n            The components to be removed are specified in a separate configuration\n            option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't\n            need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove\n            unrequired stuff from the pipeline as early as possible results in an increased\n            performance and a better optimized output data structure.\n            </para>\n            <para>\n            This step is also useful if you want to force Assimp to recompute normals\n            or tangents. the corresponding steps don't recompute them if they're already\n            there (loaded from the source asset). By using this step you can make sure\n            they are NOT there.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateNormals\">\n            <summary>\n            Generates normals for all faces of all meshes. It may not be\n            specified together with <see cref=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\"/>.\n            <para>\n            This is ignored if normals are already there at the time where this\n            flag is evaluated. Model importers try to load them from the source file,\n            so they're usually already there. Face normals are shared between all\n            points of a single face, so a single point can have multiple normals,\n            which in other words, forces the library to duplicate vertices in\n            some cases. This makes <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> senseless then.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\">\n            <summary>\n            Generates smooth normals for all vertices of all meshes. It\n            may not be specified together with <see cref=\"F:Assimp.PostProcessSteps.GenerateNormals\"/>.\n            <para>\n            This is ignored if normals are already there at the time where\n            this flag is evaluated. Model importers try to load them from the\n            source file, so they're usually already there.\n            </para>\n            <para>The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE\n            allows you to specify an angle maximum for the normal smoothing algorithm.\n            Normals exceeding this limit are not smoothed, resulting in a 'hard' seam\n            between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual\n            appearance.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\">\n            <summary>\n            Splits large meshes into smaller submeshes.\n            <para>\n            This is useful for realtime rendering where the number\n            of triangles which can be maximally processed in a single draw call is\n            usually limited by the video driver/hardware. The maximum vertex buffer\n            is usually limited, too. Both requirements can be met with this step:\n            you may specify both a triangle and a vertex limit for a single mesh.\n            </para>\n            <para>The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT\n            and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default\n            values are 1,000,000.</para>\n            \n            <para>Warning: This can be a time consuming task.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.PreTransformVertices\">\n            <summary>\n            Removes the node graph and \"bakes\" (pre-transforms) all\n            vertices with the local transformation matrices of their nodes.\n            The output scene does still contain nodes, however, there is only\n            a root node with children, each one referencing only one mesh. \n            Each mesh referencing one material. For rendering, you can simply render\n            all meshes in order, you don't need to pay attention to local transformations\n            and the node hierarchy.\n            \n            <para>Warning: Animations are removed during this step.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.LimitBoneWeights\">\n            <summary>\n            Limits the number of bones simultaneously affecting a single\n            vertex to a maximum value.\n            <para>\n            If any vertex is affected by more than that number of bones,\n            the least important vertex weights are removed and the remaining vertex\n            weights are re-normalized so that the weights still sum up to 1.\n            </para>\n            <para>The default bone weight limit is 4 and uses the\n            AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing\n            step might be of interest for you.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ValidateDataStructure\">\n            <summary>\n            Validates the imported scene data structure.\n            <para>\n            This makes sure that all indices are valid, all animations\n            and bones are linked correctly, all material references are\n            correct, etc.\n            </para>\n            It is recommended to capture Assimp's log output if you use this flag,\n            so you can easily find out what's actually wrong if a file fails the\n            validation. The validator is quite rude and will find *all* inconsistencies\n            in the data structure. There are two types of failures:\n            <list type=\"bullet\">\n            <item>\n            <description>Error: There's something wrong with the imported data. Further\n            postprocessing is not possible and the data is not usable at all. The import\n            fails.</description>\n            </item>\n            <item>\n            <description>Warning: There are some minor issues (e.g. 1000000 animation keyframes\n            with the same time), but further postprocessing and use of the data structure is still\n            safe. Warning details are written to the log file.</description>\n            </item>\n            </list>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\">\n            <summary>\n            Re-orders triangles for better vertex cache locality.\n            \n            <para>This step tries to improve the ACMR (average post-transform vertex cache\n            miss ratio) for all meshes. The implementation runs in O(n) time \n            and is roughly based on the <a href=\"http://www.cs.princeton.edu/gfx/pubs/Sander_2007_%3ETR/tipsy.pdf\">'tipsify' algorithm</a>.</para>\n            \n            <para>If you intend to render huge models in hardware, this step might be of interest for you.\n            The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune\n            the cache optimization.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\">\n            <summary>\n            Searches for redundant/unreferenced materials and removes them.\n            <para>\n            This is especially useful in combination with the  PreTransformVertices\n            and OptimizeMeshes flags. Both join small meshes with equal characteristics, but\n            they can't do their work if two meshes have different materials. Because several\n            material settings are always lost during Assimp's import filders and because many\n            exporters don't check for redundant materials, huge models often have materials which\n            are defined several times with exactly the same settings.\n            </para>\n            <para>Several material settings not contributing to the final appearance of a surface\n            are ignored in all comparisons ... the material name is one of them. So, if you're passing\n            additional information through the content pipeline (probably using *magic* material names),\n            don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST\n            setting.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FixInFacingNormals\">\n            <summary>\n            This step tries to determine which meshes have normal vectors\n            that are facing inwards. \n            <para>\n            The algorithm is simple but effective:\n            </para>\n            <para>The bounding box of all vertices and their normals are compared\n            against the volume of the bounding box of all vertices without their normals.\n            This works well for most objects, problems might occur with planar surfaces. However,\n            the step tries to filter such cases. The step inverts all in-facing normals.\n            Generally, it is recommended to enable this step, although the result is not\n            always correct.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\">\n            <summary>\n            This step splits meshes with more than one primitive type in homogeneous submeshes.\n            <para>\n            This step is executed after triangulation and after it returns, just one\n            bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time\n            rendering where point and line primitives are often ignored or rendered separately.\n            </para>\n            <para>\n            You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need.\n            This can be used to easily exclude lines and points, which are rarely used,\n            from the import.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindDegenerates\">\n            <summary>\n            This step searches all meshes for degenerated primitives and\n            converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical.\n            <para>\n            To have degenerated primitives removed, specify the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> flag\n            try one of the following procedures:\n            </para>\n            <list type=\"numbers\">\n            <item>\n            <description>To support lines and points: Set the\n            AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as\n            soon as they are detected. They won't pass any further pipeline steps.</description>\n            </item>\n            <item>\n            <description>If you don't support lines and points: Specify <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> flag, which\n            will move line and point primitives to separate meshes.  Then set the AI_CONFIG_PP_SBP_REMOVE\n            option to <see cref=\"F:Assimp.PrimitiveType.Point\"/> and <see cref=\"F:Assimp.PrimitiveType.Line\"/> to cause <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step\n            to reject point and line meshes from the scene.</description>\n            </item>\n            </list>\n            <para>\n            Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several\n            file formats which do not support lines or points where exporters bypass the format specification and write\n            them as degenerated triangles instead.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindInvalidData\">\n            <summary>\n            This step searches all meshes for invalid data, such as zeroed\n            normal vectors or invalid UV coordinates and removes or fixes them.\n            This is intended to get rid of some common exporter rrors.\n            <para>\n            This is especially useful for normals. If they are invalid,\n            and the step recognizes this, they will be removed and can later\n            be recomputed, e.g. by the GenerateSmoothNormals flag. The step\n            will also remove meshes that are infinitely small and reduce animation\n            tracks consisting of hundreds of redundant keys to a single key. The\n            AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check\n            for duplicate animation tracks.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateUVCoords\">\n            <summary>\n            This step converts non-UV mappings (such as spherical or\n            cylindrical mapping) to proper texture coordinate channels.\n            \n            <para>Most applications will support UV mapping only, so you will\n            probably want to specify this step in every case. Note that Assimp\n            is not always able to match the original mapping implementation of the 3D\n            app which produced a model perfectly. It's always better\n            to let the father app compute the UV channels, at least 3DS max, maya, blender,\n            lightwave, modo, .... are able to achieve this.</para>\n            \n            <para>If this step is not requested, you'll need to process the MATKEY_MAPPING\n            material property in order to display all assets properly.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.TransformUVCoords\">\n            <summary>\n            Applies per-texture UV transformations and bakes them to stand-alone vtexture\n            coordinate channels.\n            \n            <para>UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material\n            key for more information. This step processes all textures with transformed input UV coordinates\n            and generates new (pretransformed) UV channel transformations, so you will probably\n            want to specify this step.</para>\n            \n            <para>UV transformations are usually implemented in realtime apps by\n            transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous)\n            transformation matrix.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindInstances\">\n            <summary>\n            Searches for duplicated meshes and replaces them with a reference\n            to the first mesh.\n            <para>\n            This is time consuming, so don't use it if you have no time. Its\n            main purpose is to work around the limitation with some\n            file formats that don't support instanced meshes, so exporters\n            duplicate meshes.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.OptimizeMeshes\">\n            <summary>\n            Attempts to reduce the number of meshes (and draw calls). \n            <para>\n            This is recommended to be used together with <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/>\n            and is fully compatible with both <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.OptimizeGraph\">\n            <summary>\n            Optimizes scene hierarchy. Nodes with no animations, bones,\n            lights, or cameras assigned are collapsed and joined.\n            \n            <para>Node names can be lost during this step, you can specify\n            names of nodes that should'nt be touched or modified\n            with AI_CONFIG_PP_OG_EXCLUDE_LIST.</para>\n            \n            <para>Use this flag with caution. Most simple files will be collapsed to a \n            single node, complex hierarchies are usually completely lost. That's not\n            the right choice for editor environments, but probably a very effective\n            optimization if you just want to get the model data, convert it to your\n            own format and render it as fast as possible. </para>\n            \n            <para>This flag is designed to be used with <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/> for best\n            results.</para>\n            \n            <para>Scenes with thousands of extremely small meshes packed\n            in deeply nested nodes exist for almost all file formats.\n            Usage of this and <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/> usually fixes them all and\n            makes them renderable.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FlipUVs\">\n            <summary>\n            Flips all UV coordinates along the y-axis\n            and adjusts material settings/bitangents accordingly.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FlipWindingOrder\">\n            <summary>\n            Flips face winding order from CCW (default) to CW.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SplitByBoneCount\">\n            <summary>\n            Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.Debone\">\n            <summary>\n            <para>Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters\n            are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while\n            animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. \n            </para>\n            <para>Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones\n            removed if and only if all bones within the scene qualify for removal.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GlobalScale\">\n            <summary>\n            This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. \n            Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to control this.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ExcludeComponent\">\n            <summary>\n            Enumerates components of the scene or mesh data that\n            can be excluded from the import using the post process step\n            RemoveComponent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.None\">\n            <summary>\n            No components to be excluded.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Normals\">\n            <summary>\n            Removes normal vectors\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.TangentBasis\">\n            <summary>\n            Removes tangents/binormals\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Colors\">\n            <summary>\n            Removes all color sets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.TexCoords\">\n            <summary>\n            Removes all texture UV sets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Boneweights\">\n            <summary>\n            Remove all boneweights from all meshes. Scenegraph\n            nodes corresponding to the bones are NOT removed.\n            Use OptimizeGraph step to remove them.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Animations\">\n            <summary>\n            Removes all node animations.  Coressponding scenegraph\n            nodes are NOT removed. Use OptimizeGraph step to \n            remove them.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Textures\">\n            <summary>\n            Removes all embedded textures.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Lights\">\n            <summary>\n            Removes all light sources. The corresponding scenegraph nodes are\n            NOT removed. Use the OptimizeGraph step to do this.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Cameras\">\n            <summary>\n            Removes all cameras. The corresponding scenegraph\n            nodes are NOT removed. Use the OptimizeGraph step\n            to do this.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Meshes\">\n            <summary>\n            Removes all meshes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Materials\">\n            <summary>\n            Removes all materials. One default material will be generated.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PrimitiveType\">\n            <summary>\n            Enumerates geometric primitive types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Point\">\n            <summary>\n            Point primitive. This is just a single vertex\n            in the virtual world. A face has one index for such a primitive.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Line\">\n            <summary>\n            Line primitive. This is  a line defined through a start and an\n            end position. A face contains exactly two indices for such a primitive.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Triangle\">\n            <summary>\n            Triangle primitive, consisting of three indices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Polygon\">\n            <summary>\n            A n-Gon that has more than three edges (thus is not a triangle).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.AnimationBehaviour\">\n            <summary>\n            Defines an animation channel behaves outside the defined\n            time range. This corresponds to the prestate and poststates\n            of the animation node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Default\">\n            <summary>\n            The value from the default node transformation is taken.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Constant\">\n            <summary>\n            The nearest key value is used without interpolation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Linear\">\n            <summary>\n            The value of the nearest two keys is linearly extrapolated for the current\n            time value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Repeat\">\n            <summary>\n            The animation is repeated. If the animation key goes from n to m\n            and the current time is t, use the value at (t - n ) % (|m-n|).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.MeshMorphingMethod\">\n            <summary>\n            Defines the methods of mesh morphing supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.None\">\n            <summary>\n            No morphing.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.VertexBlend\">\n            <summary>\n            Interpolation between morph targets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.MorphNormalized\">\n            <summary>\n            Normalized morphing between morph targets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.MorphRelative\">\n            <summary>\n            Relative morphing between morph targets.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.LightSourceType\">\n            <summary>\n            Enumerates all supported light sources.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Undefined\">\n            <summary>\n            Unknown light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Directional\">\n            <summary>\n            Directional light source that has a well-defined\n            direction but is infinitely far away, e.g. the sun.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Point\">\n            <summary>\n            Point light source that has a well-defined position in\n            space but is omni-directional, e.g. a light bulb.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Spot\">\n            <summary>\n            Spot light source emits light from a position in space,\n            in a certain direction that is limited by an angle, like\n            a cone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Ambient\">\n            <summary>\n            Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and\n            is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Area\">\n            <summary>\n            An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.BlendMode\">\n            <summary>\n            Defines alpha blending flags, how the final\n            color value of a pixel is computed, based on the following equation:\n            <para>\n            sourceColor * sourceBlend + destColor * destBlend\n            </para>\n            <para>\n            Where the destColor is the previous color in the frame buffer\n            and sourceColor is the material color before the\n            transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BlendMode.Default\">\n            <summary>\n            Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BlendMode.Additive\">\n            <summary>\n            Additive blending: sourcecolor * 1 + destColor * 1.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ShadingMode\">\n            <summary>\n            Defines all shading models supported by the library.\n            <para>\n            The list of shading modes has been taken from Blender. See Blender\n            documentation for more information.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.None\">\n            <summary>\n            No shading mode defined.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Flat\">\n            <summary>\n            Flat shading. Shading is done on a per-face basis and is diffuse only. Also known\n            as 'faceted shading'.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Gouraud\">\n            <summary>\n            Simple Gouraud shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Phong\">\n            <summary>\n            Phong Shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Blinn\">\n            <summary>\n            Phong-Blinn Shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Toon\">\n            <summary>\n            Toon-shading, also known as a 'comic' shader.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.OrenNayar\">\n            <summary>\n            OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness\n            of the material into account.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Minnaert\">\n            <summary>\n            Minnaert shading model. Extension to standard Lambertian shading, taking the \"darkness\" of\n            the material into account.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.CookTorrance\">\n            <summary>\n            CookTorrance shading model. Special shader for metallic surfaces.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.NoShading\">\n            <summary>\n            No shading at all. Constant light influence of 1.0.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Fresnel\">\n            <summary>\n            Fresnel shading.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureFlags\">\n            <summary>\n            Defines some mixed flags for a particular texture. This corresponds\n            to the AI_MAT_KEY_TEXFLAGS property.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.Invert\">\n            <summary>\n            The texture's color values have to be inverted (componentwise 1-n).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.UseAlpha\">\n            <summary>\n            Explicit request to the application to process the alpha channel of the texture. This is mutually\n            exclusive with <see cref=\"F:Assimp.TextureFlags.IgnoreAlpha\"/>. These flags are\n            set if the library can say for sure that the alpha channel is used/is not used.\n            If the model format does not define this, iti s left to the application to decide\n            whether the texture alpha channel - if any - is evaluated or not.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.IgnoreAlpha\">\n            <summary>\n            Explicit request to the application to ignore the alpha channel of the texture. This is mutually\n            exclusive with <see cref=\"F:Assimp.TextureFlags.UseAlpha\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureWrapMode\">\n            <summary>\n            Defines how UV coordinates outside the [0..1] range are handled. Commonly\n            referred to as the 'wrapping mode'\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Wrap\">\n            <summary>\n            A texture coordinate u|v is translated to u % 1| v % 1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Clamp\">\n            <summary>\n            Texture coordinates outside [0...1] are clamped to the nearest valid value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Mirror\">\n            <summary>\n            A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero\n            and 1 - (u % 1) | 1 - (v % 1) otherwise.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Decal\">\n            <summary>\n            If the texture coordinates for a pixel are outside [0...1] the texture is not\n            applied to that pixel.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureMapping\">\n            <summary>\n            Defines how texture coordinates are generated\n            <para>\n            Real-time applications typically require full UV coordinates. So the use\n            of <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/> step is highly recommended.\n            It generates proper UV channels for non-UV mapped objects, as long as an accurate\n            description of how the mapping should look like is given.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.FromUV\">\n            <summary>\n            Coordinates are taken from the an existing UV channel.\n            <para>\n            The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates\n            are to be taken from since meshes can have more than one UV channel.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Sphere\">\n            <summary>\n            Spherical mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Cylinder\">\n            <summary>\n            Cylinder mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Box\">\n            <summary>\n            Cubic mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Plane\">\n            <summary>\n            Planar mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Unknown\">\n            <summary>\n            Unknown mapping that is not recognied.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureOperation\">\n            <summary>\n            Defines how the Nth texture of a specific type is combined\n            with the result of all previous layers.\n            <para>\n            Example (left: key, right: value):\n            <code>\n            DiffColor0     - gray\n            DiffTextureOp0 - TextureOperation.Multiply\n            DiffTexture0   - tex1.png\n            DiffTextureOp0 - TextureOperation.Add\n            DiffTexture1   - tex2.png\n            </code>\n            <para>\n            Written as an equation, the final diffuse term for a specific\n            pixel would be:\n            </para>\n            <code>\n            diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib;\n            </code>\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Multiply\">\n            <summary>\n            T = T1 * T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Add\">\n            <summary>\n            T = T1 + T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Subtract\">\n            <summary>\n            T = T1 - T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Divide\">\n            <summary>\n            T = T1 / T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.SmoothAdd\">\n            <summary>\n            T = (T1 + T2) - (T1 * T2)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.SignedAdd\">\n            <summary>\n            T = T1 + (T2 - 0.5)\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureType\">\n            <summary>\n            Defines the purpose of a texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.None\">\n            <summary>\n            No texture, but the value can be used as a 'texture semantic'.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Diffuse\">\n            <summary>\n            A diffuse texture that is combined with the result of the diffuse lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Specular\">\n            <summary>\n            A specular texture that is combined with the result of the specular lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Ambient\">\n            <summary>\n            An ambient texture that is combined with the ambient lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Emissive\">\n            <summary>\n            An emissive texture that is added to the result of the lighting calculation. It is not influenced\n            by incoming light, instead it represents the light that the object is naturally emitting.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Height\">\n            <summary>\n            A height map texture. by convention, higher gray-scale values stand for\n            higher elevations from some base height.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Normals\">\n            <summary>\n            A tangent-space normal map. There are several conventions for normal maps\n            and Assimp does (intentionally) not distinguish here.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Shininess\">\n            <summary>\n            A texture that defines the glossiness of the material. This is the exponent of the specular (phong)\n            lighting equation. Usually there is a conversion function defined to map the linear color values\n            in the texture to a suitable exponent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Opacity\">\n            <summary>\n            The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite\n            the opposite.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Displacement\">\n            <summary>\n            A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Lightmap\">\n            <summary>\n            A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The\n            texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Reflection\">\n            <summary>\n            A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Unknown\">\n            <summary>\n            An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any\n            further postprocessing.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.SceneFlags\">\n            <summary>\n            Defines the state of the imported scene data structure.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.None\">\n            <summary>\n            Default state of the scene, it imported successfully.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Incomplete\">\n            <summary>\n            Specifies that the scene data structure that was imported is not complete.\n            This flag bypasses some internal validations and allows the import\n            of animation skeletons, material libaries, or camera animation paths\n            using Assimp. Most applications won't support such data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Validated\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>\n            post process step if validation is successful. In a validated scene you can be sure that any\n            cross references in the data structure (e.g. vertex indices) are valid.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.ValidationWarning\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>\n            post process step if validation is successful, but some issues have been found. This can for example\n            mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex\n            do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful\n            for applications which do not capture Assimp's log output.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.NonVerboseFormat\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> post process step.\n            It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the\n            verbose format, all vertices are unique where no vertex is ever referenced by more than one face.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Terrain\">\n            <summary>\n            Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles,\n            in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the\n            z-axis stores the elevation at a specific point.\n            <para>\n            TER (Terragen) and HMP (3D Game Studio) are height map formats.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.AllowShared\">\n            <summary>\n            Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from <see cref=\"F:Assimp.SceneFlags.NonVerboseFormat\"/> as \n            that has internal meanings about postprocessing steps.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ReturnCode\">\n            <summary>\n            Enumerates Assimp function result codes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.Success\">\n            <summary>\n            Function returned successfully.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.Failure\">\n            <summary>\n            There was an error.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.OutOfMemory\">\n            <summary>\n            Assimp ran out of memory.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Origin\">\n            <summary>\n            Seek origins for Assimp's virtual file system API.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.Set\">\n            <summary>\n            Beginning of the file\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.Current\">\n            <summary>\n            Current position of the file pointer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.End\">\n            <summary>\n            End of the file, offsets must be negative.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.DefaultLogStream\">\n            <summary>\n            Enumerates predefined log streaming destinations.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.File\">\n            <summary>\n            Stream log to a file\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.StdOut\">\n            <summary>\n            Stream log to the standard output\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.StdErr\">\n            <summary>\n            Stream log to the standard error output.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.Debugger\">\n            <summary>\n            MSVC only: Stream the log to the debugger (this relies\n            on OutputDebugString from the Win32 SDK).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PropertyType\">\n            <summary>\n            Defines material property types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Float\">\n            <summary>\n            Array of single-precision (32 bit) floats.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Double\">\n            <summary>\n            Array of double-precision (64 bit) floats.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.String\">\n            <summary>\n            Property is a string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Integer\">\n            <summary>\n            Array of 32 bit integers.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Buffer\">\n            <summary>\n            Byte buffer where the content is undefined.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.CompileFlags\">\n            <summary>\n            Enumerates how the native Assimp DLL was compiled\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.Shared\">\n            <summary>\n            Assimp compiled as a shared object (Windows: DLL);\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.STLport\">\n            <summary>\n            Assimp was compiled against STLport\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.Debug\">\n            <summary>\n            Assimp was compiled as a debug build\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.NoBoost\">\n            <summary>\n            Assimp was compiled with the boost work around.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.SingleThreaded\">\n            <summary>\n            Assimp was compiled built to run single threaded.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.UVTransformFlags\">\n            <summary>\n            Defines how UV coordinates should be transformed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Scaling\">\n            <summary>\n            Scaling is evaluated.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Rotation\">\n            <summary>\n            Rotation is evaluated.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Translation\">\n            <summary>\n            Translation is evaluated.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.FileIOMode\">\n            <summary>\n            Defines the desired file I/O mode is when opening a new file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.Write\">\n            <summary>\n            Open the file for writing.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.WriteBinary\">\n            <summary>\n            Open the file for writing binary data to it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.WriteText\">\n            <summary>\n            Open the file for writing text data to it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.Read\">\n            <summary>\n            Open the file for reading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.ReadBinary\">\n            <summary>\n            Open the file for reading binary data from it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.ReadText\">\n            <summary>\n            Open the file for reading text data from it.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ImporterFeatureFlags\">\n            <summary>\n            Defines flags that indicate level of support for common features for a given importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsText\">\n            <summary>\n            Indicates there is a textual encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsBinary\">\n            <summary>\n            Indicates there is a binary encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsCompressed\">\n            <summary>\n            Indicates there is a compressed encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.LimitedSupport\">\n            <summary>\n            Indicates that the importer reads only a very particular subset of the file format. This is common\n            for formats that cannot easily be mapped to the Scene data structure.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.Experimental\">\n            <summary>\n            Indicates that the importer is experimental and used with caution - this is only reserved for importers still in\n            development, and not typically yet in released production code.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ExportDataBlob\">\n            <summary>\n            Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in\n            turn can reference another and so on. This is used to allow exporters to write more than one output for a given\n            scene, such as material files. Existence of such files depends on the format.\n            </summary>\n            <remarks>\n            The stream representation of an ExportDataBlob is as follows:\n            <code>\n            String: Name of the Blob\n            int: Length of Binary Data\n            byte[]: Binary Data\n            bool: If has next data blob\n                String: Name of nested blob\n                int: Length of nested blob binary data\n                byte[]: Nested blob binary data\n                bool: If nested blob has next data blob\n                ....\n            </code>\n            </remarks>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.Name\">\n            <summary>\n            Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files\n            that are nested will have names.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.Data\">\n            <summary>\n            Get the blob data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.NextBlob\">\n            <summary>\n            Gets the next data blob.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.HasData\">\n            <summary>\n            Gets if the blob data is valid.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.#ctor(Assimp.Unmanaged.AiExportDataBlob@)\">\n            <summary>\n            Creates a new ExportDataBlob.\n            </summary>\n            <param name=\"dataBlob\">Unmanaged structure.</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Creates a new ExportDataBlob.\n            </summary>\n            <param name=\"name\">Name</param>\n            <param name=\"data\">Data</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.ToStream(System.IO.Stream)\">\n            <summary>\n            Writes the data blob to the specified stream.\n            </summary>\n            <param name=\"stream\">Output stream</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.FromStream(System.IO.Stream)\">\n            <summary>\n            Reads a data blob from the specified stream.\n            </summary>\n            <param name=\"stream\">Input stream</param>\n            <returns>Data blob</returns>\n        </member>\n        <member name=\"T:Assimp.ExportFormatDescription\">\n            <summary>\n            Describes a file format which Assimp can export to.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.FormatId\">\n            <summary>\n            Gets a short string ID to uniquely identify the export format. E.g. \"collada\" or \"obj\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.Description\">\n            <summary>\n            Gets a short description of the file format to present to users.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.FileExtension\">\n            <summary>\n            Gets the recommended file extension for the exported file in lower case.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ExportFormatDescription.#ctor(Assimp.Unmanaged.AiExportFormatDesc@)\">\n            <summary>\n            Constructs a new ExportFormatDescription.\n            </summary>\n            <param name=\"formatDesc\">Unmanaged structure</param>\n        </member>\n        <member name=\"T:Assimp.Face\">\n            <summary>\n            A single face in a mesh, referring to multiple vertices. This can be a triangle\n            if the index count is equal to three, or a polygon if the count is greater than three.\n            \n            Since multiple primitive types can be contained in a single mesh, this approach\n            allows you to better examine how the mesh is constructed. If you use the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            post process step flag during import, then each mesh will be homogenous where primitive type is concerned.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.IndexCount\">\n            <summary>\n            Gets the number of indices defined in the face.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.HasIndices\">\n            <summary>\n            Gets if the face has faces (should always be true).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.Indices\">\n            <summary>\n            Gets or sets the indices that refer to positions of vertex data in the mesh's vertex \n            arrays.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Face\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.#ctor(System.Int32[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Face\"/> class.\n            </summary>\n            <param name=\"indices\">Face indices</param>\n        </member>\n        <member name=\"P:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#ToNative(System.IntPtr,Assimp.Unmanaged.AiFace@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#FromNative(Assimp.Unmanaged.AiFace@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Face.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.FileIOSystem\">\n            <summary>\n            Simple implementation of an IOSystem that searches for files on the disk. This implementation\n            can be given a number of search directories that it will attempt to locate the file in first, before\n            using the file path given by Assimp. That way, you can load models that have files distributed in a number of other\n            directories besides the root model's.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.#ctor\">\n            <summary>\n            Constructs a new FileIOSystem that does not have any search directories.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.#ctor(System.String[])\">\n            <summary>\n            Constructs a new FileIOSystem that uses the specified search directories.\n            </summary>\n            <param name=\"searchPaths\">Search directories to search for files in</param>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.SetSearchDirectories(System.String[])\">\n            <summary>\n            Sets the search directories the FileIOSystem will use when searching for files.\n            </summary>\n            <param name=\"searchPaths\">Directory paths</param>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.GetSearchDirectories\">\n            <summary>\n            Gets the search directories the FileIOSystem is using.\n            </summary>\n            <returns>Directory paths</returns>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.OpenFile(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Opens a stream to a file.\n            </summary>\n            <param name=\"pathToFile\">Path to the file</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <returns>The IO stream</returns>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.FindFile(System.String,System.String@)\">\n            <summary>\n            Finds the first file that matches the file name (name + extension) in the search paths.\n            </summary>\n            <param name=\"fileName\">File name (+ extension) to search for</param>\n            <param name=\"pathToFile\">Found file path</param>\n            <returns>True if the file was found, false otherwise</returns>\n        </member>\n        <member name=\"T:Assimp.FileIOStream\">\n            <summary>\n            Wraps a FileStream.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ImporterDescription\">\n            <summary>\n            Metadata and feature support information for a given importer.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Name\">\n            <summary>\n            Gets the name of the importer (e.g. Blender3D Importer)\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Author\">\n            <summary>\n            Gets the original author (blank if unknown or assimp team).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Maintainer\">\n            <summary>\n            Gets the name of the current maintainer, if empty then the author maintains.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Comments\">\n            <summary>\n            Gets any implementation comments.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.FeatureFlags\">\n            <summary>\n            Gets the features supported by the importer.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.MinVersion\">\n            <summary>\n            Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.MaxVersion\">\n            <summary>\n            Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.FileExtensions\">\n            <summary>\n            Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.IMarshalable`2\">\n            <summary>\n            Represents an object that can be marshaled to and from a native representation.\n            </summary>\n            <typeparam name=\"Managed\">Managed object type</typeparam>\n            <typeparam name=\"Native\">Native value type</typeparam>\n        </member>\n        <member name=\"P:Assimp.IMarshalable`2.IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.IMarshalable`2.FromNative(`1@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"T:Assimp.INativeCustomMarshaler\">\n            <summary>\n            Custom marshaler for usage with the <see cref=\"T:Assimp.MemoryHelper\"/> for performing marshaling\n            to-and-from unmanaged memory for non-blittable types. A type must be attributed with <see cref=\"T:Assimp.NativeCustomMarshalerAttribute\"/>\n            to automatically have an instance of its marshaler be utilized.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.INativeCustomMarshaler.NativeDataSize\">\n            <summary>\n            Gets the native data size in bytes.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.INativeCustomMarshaler.MarshalManagedToNative(System.Object,System.IntPtr)\">\n            <summary>\n            Marshals the managed object to the unmanaged chunk of memory.\n            </summary>\n            <param name=\"managedObj\">Managed object to marshal.</param>\n            <param name=\"nativeData\">Unmanaged chunk of memory to write to.</param>\n        </member>\n        <member name=\"M:Assimp.INativeCustomMarshaler.MarshalNativeToManaged(System.IntPtr)\">\n            <summary>\n            Marshals the managed object from the unmanaged chunk of memory.\n            </summary>\n            <param name=\"nativeData\">Unmanaged chunk of memory to read from.</param>\n            <returns>Managed object marshaled.</returns>\n        </member>\n        <member name=\"T:Assimp.IOStream\">\n            <summary>\n            Defines a stream to some file input or output source. This object is responsible for reading/writing data\n            that is used by Assimp.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.IsDisposed\">\n            <summary>\n            Gets whether or not this IOStream has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.PathToFile\">\n            <summary>\n            Gets the original path to file given by Assimp.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.FileMode\">\n            <summary>\n            Gets the original desired file access mode.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.IsValid\">\n            <summary>\n            Gets whether the stream is in fact valid - that is, the input/output has been\n            properly located and can be read/written.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.#ctor(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Constructs a new IOStream.\n            </summary>\n            <param name=\"pathToFile\">Path to file given by Assimp</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.IOStream\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Dispose\">\n            <summary>\n            Disposes of resources held by the IOStream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Write(System.Byte[],System.Int64)\">\n            <summary>\n            Writes data to the stream.\n            </summary>\n            <param name=\"dataToWrite\">Data to write</param>\n            <param name=\"count\">Number of bytes to write</param>\n            <returns>Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Read(System.Byte[],System.Int64)\">\n            <summary>\n            Reads data from the stream.\n            </summary>\n            <param name=\"dataRead\">Byte buffer to store the read data in</param>\n            <param name=\"count\">Number of bytes to read</param>\n            <returns>Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Seek(System.Int64,Assimp.Origin)\">\n            <summary>\n            Sets the current file position pointer.\n            </summary>\n            <param name=\"offset\">Offset in bytes from the origin</param>\n            <param name=\"seekOrigin\">Origin reference</param>\n            <returns>ReturnCode indicating success or failure.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.GetPosition\">\n            <summary>\n            Gets the current file position pointer (in bytes).\n            </summary>\n            <returns>Current file position pointer (in bytes)</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.GetFileSize\">\n            <summary>\n            Gets the total file size (in bytes).\n            </summary>\n            <returns>File size in bytes</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Flush\">\n            <summary>\n            Flushes all data currently in the stream buffers.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Close\">\n            <summary>\n            Closes the stream - flushing any data not yet read/written and disposes of resources.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.IOSystem\">\n            <summary>\n            Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening\n            files to read during import, and creating/writing to files during export.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOSystem.IsDisposed\">\n            <summary>\n            Gets whether or not this IOSystem has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOSystem.OpenFileCount\">\n            <summary>\n            Gets the number of currently opened streams.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.#ctor\">\n            <summary>\n            Constructs a new IOSystem.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.IOSystem\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.OpenFile(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Opens a stream to a file.\n            </summary>\n            <param name=\"pathToFile\">Path to the file</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <returns>The IO stream</returns>\n        </member>\n        <member name=\"M:Assimp.IOSystem.CloseFile(Assimp.IOStream)\">\n            <summary>\n            Closes a stream that is owned by this IOSystem.\n            </summary>\n            <param name=\"stream\">Stream to close</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.CloseAllFiles\">\n            <summary>\n            Closes all outstanding streams owned by this IOSystem.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Dispose\">\n            <summary>\n            Disposes of all resources held by this object.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"T:Assimp.Light\">\n            <summary>\n            Describes a light source in the scene. Assimp supports multiple light sources\n            including spot, point, and directional lights. All are defined by a single structure\n            and distinguished by their parameters. Lights have corresponding nodes in the scenegraph.\n            <para>Some file formats such as 3DS and ASE export a \"target point\", e.g. the point\n            a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode\n            of a spotlight's main node called \"spotName.Target\". However, this is just additional information\n            then, the transform tracks of the main node make the spot light already point in the right direction.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Name\">\n            <summary>\n            Gets or sets the name of the light source. This corresponds to a node present in the scenegraph.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.LightType\">\n            <summary>\n            Gets or sets the type of light source. This should never be undefined.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AngleInnerCone\">\n            <summary>\n            Gets or sets the inner angle of a spot light's light cone. The spot light has\n            maximum influence on objects inside this angle. The angle is given in radians, it\n            is 2PI for point lights and defined for directional lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AngleOuterCone\">\n            <summary>\n            Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside\n            this angle. The angle is given in radians. It is 2PI for point lights and undefined for\n            directional lights. The outer angle must be greater than or equal to the inner angle.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationConstant\">\n            <summary>\n            Gets or sets the constant light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>.\n            <para>This member corresponds to the att0 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationLinear\">\n            <summary>\n            Gets or sets the linear light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>\n            <para>This member corresponds to the att1 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationQuadratic\">\n            <summary>\n            Gets or sets the quadratic light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>.\n            <para>This member corresponds to the att2 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Position\">\n            <summary>\n            Gets or sets the position of the light source in space, relative to the\n            transformation of the node corresponding to the light. This is undefined for\n            directional lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Direction\">\n            <summary>\n            Gets or sets the direction of the light source in space, relative to the transformation\n            of the node corresponding to the light. This is undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Up\">\n            <summary>\n            Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light.\n            This is undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorDiffuse\">\n            <summary>\n            Gets or sets the diffuse color of the light source.  The diffuse light color is multiplied with\n            the diffuse material color to obtain the final color that contributes to the diffuse shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorSpecular\">\n            <summary>\n            Gets or sets the specular color of the light source. The specular light color is multiplied with the\n            specular material color to obtain the final color that contributes to the specular shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorAmbient\">\n            <summary>\n            Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient\n            material color to obtain the final color that contributes to the ambient shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AreaSize\">\n            <summary>\n            Gets or sets the Width (X) and Height (Y) of the area that represents an <see cref=\"F:Assimp.LightSourceType.Area\"/> light.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Light.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Light\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#ToNative(System.IntPtr,Assimp.Unmanaged.AiLight@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#FromNative(Assimp.Unmanaged.AiLight@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Light.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.LoggingCallback\">\n            <summary>\n            Callback delegate for Assimp's LogStream.\n            </summary>\n            <param name=\"msg\">Log message</param>\n            <param name=\"userData\">Supplied user data</param>\n        </member>\n        <member name=\"T:Assimp.LogStream\">\n            <summary>\n            Represents a log stream, which receives all log messages and streams them somewhere.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsVerboseLoggingEnabled\">\n            <summary>\n            Gets or sets, if verbose logging is enabled globally.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.UserData\">\n            <summary>\n            Gets or sets the user data to be passed to the callback.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsDisposed\">\n            <summary>\n            Gets whether the logstream has been disposed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsAttached\">\n            <summary>\n            Gets whether or not the logstream is currently attached to the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#cctor\">\n            <summary>\n            Static constructor.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(System.String)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"userData\">User-supplied data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(Assimp.LoggingCallback)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"callback\">Logging callback that is called when messages are received by the log stream.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(Assimp.LoggingCallback,System.String)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"callback\">Logging callback that is called when messages are received by the log stream.</param>\n            <param name=\"userData\">User-supplied data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.LogStream\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.DetachAllLogstreams\">\n            <summary>\n            Detaches all active logstreams from the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.GetAttachedLogStreams\">\n            <summary>\n            Gets all active logstreams that are currently attached to the library.\n            </summary>\n            <returns>Collection of active logstreams attached to the library.</returns>\n        </member>\n        <member name=\"M:Assimp.LogStream.Attach\">\n            <summary>\n            Attaches the logstream to the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Detach\">\n            <summary>\n            Detaches the logstream from the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Log(System.String)\">\n            <summary>\n            Logs a message.\n            </summary>\n            <param name=\"msg\">Message contents</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Dispose\">\n            <summary>\n            Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.LogMessage(System.String,System.String)\">\n            <summary>\n            Override this method to log a message for a subclass of Logstream, if no callback\n            was set.\n            </summary>\n            <param name=\"msg\">Message</param>\n            <param name=\"userData\">User data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnAttach\">\n            <summary>\n            Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnDetach\">\n            <summary>\n            Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving\n            messages until it is re-attached.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ConsoleLogStream\">\n            <summary>\n            Log stream that writes messages to the Console.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.#ctor\">\n            <summary>\n            Constructs a new console logstream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.#ctor(System.String)\">\n            <summary>\n            Constructs a new console logstream.\n            </summary>\n            <param name=\"userData\">User supplied data</param>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.LogMessage(System.String,System.String)\">\n            <summary>\n            Log a message to the console.\n            </summary>\n            <param name=\"msg\">Message</param>\n            <param name=\"userData\">Userdata</param>\n        </member>\n        <member name=\"T:Assimp.Material\">\n            <summary>\n            A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally\n            all this information is stored as key-value pair properties. The class contains many convienence methods and properties for\n            accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present,\n            and if they aren't a default value will be returned.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PropertyCount\">\n            <summary>\n            Gets the number of properties contained in the material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasName\">\n            <summary>\n            Checks if the material has a name property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Name\">\n            <summary>\n            Gets the material name value, if any. Default value is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTwoSided\">\n            <summary>\n            Checks if the material has a two-sided property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsTwoSided\">\n            <summary>\n            Gets if the material should be rendered as two-sided. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShadingMode\">\n            <summary>\n            Checks if the material has a shading-mode property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShadingMode\">\n            <summary>\n            Gets the shading mode. Default value is <see cref=\"F:Assimp.ShadingMode.None\"/>, meaning it is not defined.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasWireFrame\">\n            <summary>\n            Checks if the material has a wireframe property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsWireFrameEnabled\">\n            <summary>\n            Gets if wireframe should be enabled. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasBlendMode\">\n            <summary>\n            Checks if the material has a blend mode property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.BlendMode\">\n            <summary>\n            Gets the blending mode. Default value is <see cref=\"F:Assimp.BlendMode.Default\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasOpacity\">\n            <summary>\n            Checks if the material has an opacity property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Opacity\">\n            <summary>\n            Gets the opacity. Default value is 1.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasBumpScaling\">\n            <summary>\n            Checks if the material has a bump scaling property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.BumpScaling\">\n            <summary>\n            Gets the bump scaling. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShininess\">\n            <summary>\n            Checks if the material has a shininess property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Shininess\">\n            <summary>\n            Gets the shininess. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShininessStrength\">\n            <summary>\n            Checks if the material has a shininess strength property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShininessStrength\">\n            <summary>\n            Gets the shininess strength. Default vaulue is 1.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasReflectivity\">\n            <summary>\n            Checks if the material has a reflectivty property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Reflectivity\">\n            <summary>\n            Gets the reflectivity. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorDiffuse\">\n            <summary>\n            Checks if the material has a color diffuse property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorDiffuse\">\n            <summary>\n            Gets the color diffuse. Default value is white.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorAmbient\">\n            <summary>\n            Checks if the material has a color ambient property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorAmbient\">\n            <summary>\n            Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorSpecular\">\n            <summary>\n            Checks if the material has a color specular property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorSpecular\">\n            <summary>\n            Gets the color specular. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorEmissive\">\n            <summary>\n            Checks if the material has a color emissive property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorEmissive\">\n            <summary>\n            Gets the color emissive. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorTransparent\">\n            <summary>\n            Checks if the material has a color transparent property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorTransparent\">\n            <summary>\n            Gets the color transparent. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorReflective\">\n            <summary>\n            Checks if the material has a color reflective property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorReflective\">\n            <summary>\n            Gets the color reflective. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureDiffuse\">\n            <summary>\n            Gets if the material has a diffuse texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureDiffuse\">\n            <summary>\n            Gets or sets diffuse texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureSpecular\">\n            <summary>\n            Gets if the material has a specular texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureSpecular\">\n            <summary>\n            Gets or sets specular texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureAmbient\">\n            <summary>\n            Gets if the material has a ambient texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureAmbient\">\n            <summary>\n            Gets or sets ambient texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureEmissive\">\n            <summary>\n            Gets if the material has a emissive texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureEmissive\">\n            <summary>\n            Gets or sets emissive texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureHeight\">\n            <summary>\n            Gets if the material has a height texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureHeight\">\n            <summary>\n            Gets or sets height texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureNormal\">\n            <summary>\n            Gets if the material has a normal texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureNormal\">\n            <summary>\n            Gets or sets normal texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureOpacity\">\n            <summary>\n            Gets if the material has an opacity texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureOpacity\">\n            <summary>\n            Gets or sets opacity texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureDisplacement\">\n            <summary>\n            Gets if the material has a displacement texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureDisplacement\">\n            <summary>\n            Gets or sets displacement texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureLightMap\">\n            <summary>\n            Gets if the material has a light map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureLightMap\">\n            <summary>\n            Gets or sets light map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureReflection\">\n            <summary>\n            Gets if the material has a reflection texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureReflection\">\n            <summary>\n            Gets or sets reflection texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Material\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.CreateFullyQualifiedName(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\". This is the name that is used as the material dictionary key.\n            </summary>\n            <param name=\"baseName\">Key basename, this must not be null or empty</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>The fully qualified name</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetNonTextureProperty(System.String)\">\n            <summary>\n            Gets the non-texture properties contained in this Material. The name should be\n            the \"base name\", as in it should not contain texture type/texture index information. E.g. \"$clr.diffuse\" rather than \"$clr.diffuse,0,0\". The extra\n            data will be filled in automatically.\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetProperty(System.String)\">\n            <summary>\n            Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasNonTextureProperty(System.String)\">\n            <summary>\n            Checks if the material has the specified non-texture property. The name should be\n            the \"base name\", as in it should not contain texture type/texture index information. E.g. \"$clr.diffuse\" rather than \"$clr.diffuse,0,0\". The extra\n            data will be filled in automatically.\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasProperty(System.String)\">\n            <summary>\n            Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddProperty(Assimp.MaterialProperty)\">\n            <summary>\n            Adds a property to this material.\n            </summary>\n            <param name=\"matProp\">Material property</param>\n            <returns>True if the property was successfully added, false otherwise (e.g. null or key already present).</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveNonTextureProperty(System.String)\">\n            <summary>\n            Removes a non-texture property from the material.\n            </summary>\n            <param name=\"baseName\">Property name</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Removes a property from the material.\n            </summary>\n            <param name=\"baseName\">Name of the property</param>\n            <param name=\"texType\">Property texture type</param>\n            <param name=\"texIndex\">Property texture index</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveProperty(System.String)\">\n            <summary>\n            Removes a property from the material.\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property ({basename},{texType},{texIndex})</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.Clear\">\n            <summary>\n            Removes all properties from the material;\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.GetAllProperties\">\n            <summary>\n            Gets -all- properties contained in the Material.\n            </summary>\n            <returns>All properties in the material property map.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTextureCount(Assimp.TextureType)\">\n            <summary>\n            Gets all the number of textures that are of the specified texture type.\n            </summary>\n            <param name=\"texType\">Texture type</param>\n            <returns>Texture count</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddMaterialTexture(Assimp.TextureSlot@)\">\n            <summary>\n            Adds a texture to the material - this bulk creates a property for each field. This will\n            either create properties or overwrite existing properties. If the texture has no\n            file path, nothing is added.\n            </summary>\n            <param name=\"texture\">Texture to add</param>\n            <returns>True if the texture properties were added or modified</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddMaterialTexture(Assimp.TextureSlot@,System.Boolean)\">\n            <summary>\n            Adds a texture to the material - this bulk creates a property for each field. This will\n            either create properties or overwrite existing properties. If the texture has no\n            file path, nothing is added.\n            </summary>\n            <param name=\"texture\">Texture to add</param>\n            <param name=\"onlySetFilePath\">True to only set the texture's file path, false otherwise</param>\n            <returns>True if the texture properties were added or modified</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveMaterialTexture(Assimp.TextureSlot@)\">\n            <summary>\n            Removes a texture from the material - this bulk removes a property for each field.\n            If the texture has no file path, nothing is removed\n            </summary>\n            <param name=\"texture\">Texture to remove</param>\n            <returns>True if the texture was removed, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTexture(Assimp.TextureType,System.Int32,Assimp.TextureSlot@)\">\n            <summary>\n            Gets a texture that corresponds to the type/index.\n            </summary>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"texIndex\">Texture index</param>\n            <param name=\"texture\">Texture description</param>\n            <returns>True if the texture was found in the material</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTextures(Assimp.TextureType)\">\n            <summary>\n            Gets all textures that correspond to the type.\n            </summary>\n            <param name=\"type\">Texture type</param>\n            <returns>The array of textures</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetAllMaterialTextures\">\n            <summary>\n            Gets all textures in the material.\n            </summary>\n            <returns>The array of textures</returns>\n        </member>\n        <member name=\"P:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMaterial@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#FromNative(Assimp.Unmanaged.AiMaterial@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Material.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MaterialProperty\">\n            <summary>\n            A key-value pairing that represents some material property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.Name\">\n            <summary>\n            Gets or sets the property key name. E.g. $tex.file. This corresponds to the\n            \"AiMatKeys\" base name constants.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.PropertyType\">\n            <summary>\n            Gets or sets the type of property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.ByteCount\">\n            <summary>\n            Gets the raw byte data count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.HasRawData\">\n            <summary>\n            Checks if the property has data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.RawData\">\n            <summary>\n            Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.TextureType\">\n            <summary>\n            Gets or sets the texture type semantic, for non-texture properties this is always <see cref=\"F:Assimp.TextureType.None\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.TextureIndex\">\n            <summary>\n            Gets or sets the texture index, for non-texture properties this is always zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.FullyQualifiedName\">\n            <summary>\n            Gets the property's fully qualified name. Format: \"{base name},{texture type semantic},{texture index}\". E.g. \"$clr.diffuse,0,0\". This\n            is the key that is used to index the property in the material property map.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a buffer property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"buffer\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Single)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a float property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Int32)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs an integer property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a boolean property.\n            </summary>\n            <param name=\"baseName\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a string property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a texture property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"textureIndex\">Texture index</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Single[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a float array property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"values\">Property values</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Int32[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a int array property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"values\">Property values</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,Assimp.Color3D)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a Color3D property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,Assimp.Color4D)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a Color4D property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatValue\">\n            <summary>\n            Gets the property raw data as a float.\n            </summary>\n            <returns>Float</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetFloatValue(System.Single)\">\n            <summary>\n            Sets the property raw data with a float.\n            </summary>\n            <param name=\"value\">Float.</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetDoubleValue\">\n            <summary>\n            Gets the property raw data as a double.\n            </summary>\n            <returns>Double</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetDoubleValue(System.Double)\">\n            <summary>\n            Sets the property raw data with a double.\n            </summary>\n            <param name=\"value\">Double.</param>\n            <returns>True if successful, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerValue\">\n            <summary>\n            Gets the property raw data as an integer.\n            </summary>\n            <returns>Integer</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetIntegerValue(System.Int32)\">\n            <summary>\n            Sets the property raw data as an integer.\n            </summary>\n            <param name=\"value\">Integer</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetStringValue\">\n            <summary>\n            Gets the property raw data as a string.\n            </summary>\n            <returns>String</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetStringValue(System.String)\">\n            <summary>\n            Sets the property raw data as string.\n            </summary>\n            <param name=\"value\">String</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatArrayValue(System.Int32)\">\n            <summary>\n            Gets the property raw data as a float array.\n            </summary>\n            <param name=\"count\">Number of elements to get</param>\n            <returns>Float array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatArrayValue\">\n            <summary>\n            Gets the property raw data as a float array.\n            </summary>\n            <returns>Float array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetFloatArrayValue(System.Single[])\">\n            <summary>\n            Sets the property raw data as a float array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetDoubleArrayValue\">\n            <summary>\n            Gets the property raw data as a double array.\n            </summary>\n            <returns>Double array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetDoubleArrayValue(System.Double[])\">\n            <summary>\n            Sets the property raw data as a double array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerArrayValue(System.Int32)\">\n            <summary>\n            Gets the property raw data as an integer array.\n            </summary>\n            <param name=\"count\">Number of elements to get</param>\n            <returns>Integer array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerArrayValue\">\n            <summary>\n            Gets the property raw data as an integer array.\n            </summary>\n            <returns>Integer array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetIntegerArrayValue(System.Int32[])\">\n            <summary>\n            Sets the property raw data as an integer array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetBooleanValue\">\n            <summary>\n            Gets the property raw data as a boolean.\n            </summary>\n            <returns>Boolean</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetBooleanValue(System.Boolean)\">\n            <summary>\n            Sets the property raw data as a boolean.\n            </summary>\n            <param name=\"value\">Boolean value</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetColor3DValue\">\n            <summary>\n            Gets the property raw data as a Color3D.\n            </summary>\n            <returns>Color3D</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetColor3DValue(Assimp.Color3D)\">\n            <summary>\n            Sets the property raw data as a Color3D.\n            </summary>\n            <param name=\"value\">Color3D</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetColor4DValue\">\n            <summary>\n            Gets the property raw data as a Color4D.\n            </summary>\n            <returns>Color4D</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetColor4DValue(Assimp.Color4D)\">\n            <summary>\n            Sets the property raw data as a Color4D.\n            </summary>\n            <param name=\"value\">Color4D</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMaterialProperty@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#FromNative(Assimp.Unmanaged.AiMaterialProperty@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Matrix3x3\">\n            <summary>\n            Represents a 3x3 matrix. Assimp docs say their matrices are always row-major,\n            and it looks like they're only describing the memory layout. Matrices are treated\n            as column vectors however (X base in the first column, Y base the second, and Z base the third)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A1\">\n            <summary>\n            Value at row 1, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A2\">\n            <summary>\n            Value at row 1, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A3\">\n            <summary>\n            Value at row 1, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B1\">\n            <summary>\n            Value at row 2, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B2\">\n            <summary>\n            Value at row 2, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B3\">\n            <summary>\n            Value at row 2, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C1\">\n            <summary>\n            Value at row 3, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C2\">\n            <summary>\n            Value at row 3, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C3\">\n            <summary>\n            Value at row 3, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.Identity\">\n            <summary>\n            Gets the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.IsIdentity\">\n            <summary>\n            Gets if this matrix is an identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.Item(System.Int32,System.Int32)\">\n            <summary>\n            Gets or sets the value at the specific one-based row, column\n            index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices\n            out of range return a value of zero.\n            \n            </summary>\n            <param name=\"i\">One-based Row index</param>\n            <param name=\"j\">One-based Column index</param>\n            <returns>Matrix value</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Matrix3x3.\n            </summary>\n            <param name=\"a1\">Element at row 1, column 1</param>\n            <param name=\"a2\">Element at row 1, column 2</param>\n            <param name=\"a3\">Element at row 1, column 3</param>\n            <param name=\"b1\">Element at row 2, column 1</param>\n            <param name=\"b2\">Element at row 2, column 2</param>\n            <param name=\"b3\">Element at row 2, column 3</param>\n            <param name=\"c1\">Element at row 3, column 1</param>\n            <param name=\"c2\">Element at row 3, column 2</param>\n            <param name=\"c3\">Element at row 3, column 3</param>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.#ctor(Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new Matrix3x3.\n            </summary>\n            <param name=\"rotMatrix\">A 4x4 matrix to construct from, only taking the rotation/scaling part.</param>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Transpose\">\n            <summary>\n            Transposes this matrix (rows become columns, vice versa).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Inverse\">\n            <summary>\n            Inverts the matrix. If the matrix is *not* invertible all elements are set to <see cref=\"F:System.Single.NaN\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Determinant\">\n            <summary>\n            Compute the determinant of this matrix.\n            </summary>\n            <returns>The determinant</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromEulerAnglesXYZ(System.Single,System.Single,System.Single)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"x\">Rotation angle about the x-axis, in radians.</param>\n            <param name=\"y\">Rotation angle about the y-axis, in radians.</param>\n            <param name=\"z\">Rotation angle about the z-axis, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromEulerAnglesXYZ(Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"angles\">Vector containing the rotation angles about the x, y, z axes, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationX(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the x-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationY(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the y-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationZ(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the z-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromAngleAxis(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix for a rotation about an arbitrary axis.\n            </summary>\n            <param name=\"radians\">Rotation angle, in radians</param>\n            <param name=\"axis\">Rotation axis, which should be a normalized vector.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromScaling(Assimp.Vector3D)\">\n            <summary>\n            Creates a scaling matrix.\n            </summary>\n            <param name=\"scaling\">Scaling vector</param>\n            <returns>The scaling vector</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromToMatrix(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix that rotates a vector called \"from\" into another\n            vector called \"to\". Based on an algorithm by Tomas Moller and John Hudges:\n            <para>\n            \"Efficiently Building a Matrix to Rotate One Vector to Another\"         \n            Journal of Graphics Tools, 4(4):1-4, 1999\n            </para>\n            </summary>\n            <param name=\"from\">Starting vector</param>\n            <param name=\"to\">Ending vector</param>\n            <returns>Rotation matrix to rotate from the start to end.</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Equality(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Tests equality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Inequality(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Tests inequality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Multiply(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations\n            are left to right.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>Multiplied matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Implicit(Assimp.Matrix4x4)~Assimp.Matrix3x3\">\n            <summary>\n            Implicit conversion from a 4x4 matrix to a 3x3 matrix.\n            </summary>\n            <param name=\"mat\">4x4 matrix</param>\n            <returns>3x3 matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Equals(Assimp.Matrix3x3)\">\n            <summary>\n            Tests equality between this matrix and another.\n            </summary>\n            <param name=\"other\">Other matrix to test</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Matrix4x4\">\n            <summary>\n            Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). \n            Memory layout is row major. Right handed conventions are used by default.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A1\">\n            <summary>\n            Value at row 1, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A2\">\n            <summary>\n            Value at row 1, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A3\">\n            <summary>\n            Value at row 1, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A4\">\n            <summary>\n            Value at row 1, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B1\">\n            <summary>\n            Value at row 2, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B2\">\n            <summary>\n            Value at row 2, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B3\">\n            <summary>\n            Value at row 2, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B4\">\n            <summary>\n            Value at row 2, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C1\">\n            <summary>\n            Value at row 3, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C2\">\n            <summary>\n            Value at row 3, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C3\">\n            <summary>\n            Value at row 3, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C4\">\n            <summary>\n            Value at row 3, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D1\">\n            <summary>\n            Value at row 4, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D2\">\n            <summary>\n            Value at row 4, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D3\">\n            <summary>\n            Value at row 4, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D4\">\n            <summary>\n            Value at row 4, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.Identity\">\n            <summary>\n            Gets the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.IsIdentity\">\n            <summary>\n            Gets if this matrix is an identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.Item(System.Int32,System.Int32)\">\n            <summary>\n            Gets or sets the value at the specific one-based row, column\n            index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices\n            out of range return a value of zero.\n            \n            </summary>\n            <param name=\"i\">One-based Row index</param>\n            <param name=\"j\">One-based Column index</param>\n            <returns>Matrix value</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Matrix4x4.\n            </summary>\n            <param name=\"a1\">Element at row 1, column 1</param>\n            <param name=\"a2\">Element at row 1, column 2</param>\n            <param name=\"a3\">Element at row 1, column 3</param>\n            <param name=\"a4\">Element at row 1, column 4</param>\n            <param name=\"b1\">Element at row 2, column 1</param>\n            <param name=\"b2\">Element at row 2, column 2</param>\n            <param name=\"b3\">Element at row 2, column 3</param>\n            <param name=\"b4\">Element at row 2, column 4</param>\n            <param name=\"c1\">Element at row 3, column 1</param>\n            <param name=\"c2\">Element at row 3, column 2</param>\n            <param name=\"c3\">Element at row 3, column 3</param>\n            <param name=\"c4\">Element at row 3, column 4</param>\n            <param name=\"d1\">Element at row 4, column 1</param>\n            <param name=\"d2\">Element at row 4, column 2</param>\n            <param name=\"d3\">Element at row 4, column 3</param>\n            <param name=\"d4\">Element at row 4, column 4</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.#ctor(Assimp.Matrix3x3)\">\n            <summary>\n            Constructs a new Matrix4x4.\n            </summary>\n            <param name=\"rotMatrix\">Rotation matrix to copy values from.</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Transpose\">\n            <summary>\n            Transposes this matrix (rows become columns, vice versa).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Inverse\">\n            <summary>\n            Inverts the matrix. If the matrix is *not* invertible all elements are set to <see cref=\"F:System.Single.NaN\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Determinant\">\n            <summary>\n            Compute the determinant of this matrix.\n            </summary>\n            <returns>The determinant</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Decompose(Assimp.Vector3D@,Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a transformation matrix into its original scale, rotation, and translation components. The\n            scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And\n            the translation is the output position for the x, y, z axes.\n            </summary>\n            <param name=\"scaling\">Vector to hold the scaling component</param>\n            <param name=\"rotation\">Quaternion to hold the rotation component</param>\n            <param name=\"translation\">Vector to hold the translation component</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.DecomposeNoScaling(Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton\n            quaternion. The translation receives the output position for the x, y, z axes.\n            </summary>\n            <param name=\"rotation\">Quaternion to hold the rotation component</param>\n            <param name=\"translation\">Vector to hold the translation component</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromEulerAnglesXYZ(System.Single,System.Single,System.Single)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"x\">Rotation angle about the x-axis, in radians.</param>\n            <param name=\"y\">Rotation angle about the y-axis, in radians.</param>\n            <param name=\"z\">Rotation angle about the z-axis, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromEulerAnglesXYZ(Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"angles\">Vector containing the rotation angles about the x, y, z axes, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationX(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the x-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationY(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the y-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationZ(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the z-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromAngleAxis(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix for a rotation about an arbitrary axis.\n            </summary>\n            <param name=\"radians\">Rotation angle, in radians</param>\n            <param name=\"axis\">Rotation axis, which should be a normalized vector.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromTranslation(Assimp.Vector3D)\">\n            <summary>\n            Creates a translation matrix.\n            </summary>\n            <param name=\"translation\">Translation vector</param>\n            <returns>The translation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromScaling(Assimp.Vector3D)\">\n            <summary>\n            Creates a scaling matrix.\n            </summary>\n            <param name=\"scaling\">Scaling vector</param>\n            <returns>The scaling vector</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromToMatrix(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix that rotates a vector called \"from\" into another\n            vector called \"to\". Based on an algorithm by Tomas Moller and John Hudges:\n            <para>\n            \"Efficiently Building a Matrix to Rotate One Vector to Another\"         \n            Journal of Graphics Tools, 4(4):1-4, 1999\n            </para>\n            </summary>\n            <param name=\"from\">Starting vector</param>\n            <param name=\"to\">Ending vector</param>\n            <returns>Rotation matrix to rotate from the start to end.</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Equality(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Tests equality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Inequality(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Tests inequality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Multiply(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations\n            are left to right.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>Multiplied matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Implicit(Assimp.Matrix3x3)~Assimp.Matrix4x4\">\n            <summary>\n            Implicit conversion from a 3x3 matrix to a 4x4 matrix.\n            </summary>\n            <param name=\"mat\">3x3 matrix</param>\n            <returns>4x4 matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Equals(Assimp.Matrix4x4)\">\n            <summary>\n            Tests equality between this matrix and another.\n            </summary>\n            <param name=\"other\">Other matrix to test</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.FreeNativeDelegate\">\n            <summary>\n            Delegate for performing unmanaged memory cleanup.\n            </summary>\n            <param name=\"nativeValue\">Location in unmanaged memory of the value to cleanup</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise</param>\n        </member>\n        <member name=\"T:Assimp.MemoryHelper\">\n            <summary>\n            Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``2(``0[])\">\n            <summary>\n            Marshals an array of managed values to a c-style unmanaged array (void*).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"managedArray\">Array of managed values</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``2(``0[],System.Boolean)\">\n            <summary>\n            Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to\n            an unmanaged array of pointers (void**).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"managedArray\">Array of managed values</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``2(System.IntPtr,System.Int32)\">\n            <summary>\n            Marshals an array of managed values from a c-style unmanaged array (void*).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to marshal</param>\n            <returns>Marshaled managed values</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``2(System.IntPtr,System.Int32,System.Boolean)\">\n            <summary>\n            Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from \n            an unmanaged array of pointers (void**).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to marshal</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n            <returns>Marshaled managed values</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``1(``0[])\">\n            <summary>\n            Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types\n            that require marshaling by the runtime (e.g. has MarshalAs attributes).\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"managedArray\">Managed array of structs</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``1(System.IntPtr,System.Int32)\">\n            <summary>\n            Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types\n            that require marshaling by the runtime (e.g. has MarshalAs attributes).\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to read</param>\n            <returns>Managed array</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeNativeArray``1(System.IntPtr,System.Int32,Assimp.FreeNativeDelegate)\">\n            <summary>\n            Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be\n            marshaled into unmanaged memory.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to free</param>\n            <param name=\"action\">Delegate that performs the necessary cleanup</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeNativeArray``1(System.IntPtr,System.Int32,Assimp.FreeNativeDelegate,System.Boolean)\">\n            <summary>\n            Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be\n            marshaled into unmanaged memory.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to free</param>\n            <param name=\"action\">Delegate that performs the necessary cleanup</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativePointer``2(``0)\">\n            <summary>\n            Marshals a managed value to unmanaged memory.\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Unmanaged type</typeparam>\n            <param name=\"managedValue\">Managed value to marshal</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativePointer``2(System.IntPtr)\">\n            <summary>\n            Marshals a managed value from unmanaged memory.\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Unmanaged type</typeparam>\n            <param name=\"ptr\">Pointer to unmanaged memory</param>\n            <returns>The marshaled managed value</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalStructure``1(System.IntPtr,``0@)\">\n            <summary>\n            Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise\n            use the read methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"ptr\">Pointer to marshal</param>\n            <param name=\"value\">The marshaled structure</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalStructure``1(System.IntPtr)\">\n            <summary>\n            Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise\n            use the read methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"ptr\">Pointer to marshal</param>\n            <returns>The marshaled structure</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalPointer``1(``0@,System.IntPtr)\">\n            <summary>\n            Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise\n            use the write methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"value\">Struct to marshal</param>\n            <param name=\"ptr\">Pointer to unmanaged chunk of memory which must be allocated prior to this call</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalSizeOf``1\">\n            <summary>\n            Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime,\n            (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <returns>Size of the struct in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalSizeOf``1(``0[])\">\n            <summary>\n            Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime,\n            (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"array\">Array of structs</param>\n            <returns>Total size, in bytes, of the array's contents.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.PinObject(System.Object)\">\n            <summary>\n            Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime\n            cannot move the object around in memory, which may degrade performance.\n            </summary>\n            <param name=\"obj\">Object to pin.</param>\n            <returns>Pointer to pinned object's memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.UnpinObject(System.Object)\">\n            <summary>\n            Unpins an object in memory, allowing it to once again freely be moved around by the runtime.\n            </summary>\n            <param name=\"obj\">Object to unpin.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.DisposeCollection``1(System.Collections.Generic.ICollection{``0})\">\n            <summary>\n            Convienence method to dispose all items in the collection\n            </summary>\n            <typeparam name=\"T\">IDisposable type</typeparam>\n            <param name=\"collection\">Collection of disposables</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CastToEnum``2(``0)\">\n            <summary>\n            Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value.\n            </summary>\n            <typeparam name=\"V\">Underlying value type.</typeparam>\n            <typeparam name=\"T\">Enum type.</typeparam>\n            <param name=\"value\">Value to cast.</param>\n            <returns>Enum value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AllocateMemory(System.Int32,System.Int32)\">\n            <summary>\n            Allocates unmanaged memory. This memory should only be freed by this helper.\n            </summary>\n            <param name=\"sizeInBytes\">Size to allocate</param>\n            <param name=\"alignment\">Alignment of the memory, by default aligned along 16-byte boundary.</param>\n            <returns>Pointer to the allocated unmanaged memory.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AllocateClearedMemory(System.Int32,System.Byte,System.Int32)\">\n            <summary>\n            Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper.\n            </summary>\n            <param name=\"sizeInBytes\">Size to allocate</param>\n            <param name=\"clearValue\">Value the memory will be cleared to, by default zero.</param>\n            <param name=\"alignment\">Alignment of the memory, by default aligned along 16-byte boundary.</param>\n            <returns>Pointer to the allocated unmanaged memory.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeMemory(System.IntPtr)\">\n            <summary>\n            Frees unmanaged memory that was allocated by this helper.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to unmanaged memory to free.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.IsMemoryAligned(System.IntPtr,System.Int32)\">\n            <summary>\n            Checks if the memory is aligned to the specified alignment.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to the memory</param>\n            <param name=\"alignment\">Alignment value, by defauly 16-byte</param>\n            <returns>True if is aligned, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Swap``1(``0@,``0@)\">\n            <summary>\n            Swaps the value between two references.\n            </summary>\n            <typeparam name=\"T\">Type of data to swap.</typeparam>\n            <param name=\"left\">First reference</param>\n            <param name=\"right\">Second reference</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ComputeFNVModifiedHashCode(System.Byte[])\">\n            <summary>\n            Computes a hash code using the <a href=\"http://bretm.home.comcast.net/~bretm/hash/6.html\">FNV modified algorithm</a>m.\n            </summary>\n            <param name=\"data\">Byte data to hash.</param>\n            <returns>Hash code for the data.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ReadStreamFully(System.IO.Stream,System.Int32)\">\n            <summary>\n            Reads a stream until the end is reached into a byte array. Based on\n            <a href=\"http://www.yoda.arachsys.com/csharp/readbinary.html\">Jon Skeet's implementation</a>.\n            It is up to the caller to dispose of the stream.\n            </summary>\n            <param name=\"stream\">Stream to read all bytes from</param>\n            <param name=\"initialLength\">Initial buffer length, default is 32K</param>\n            <returns>The byte array containing all the bytes from the stream</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Compare(System.Byte[],System.Byte[])\">\n            <summary>\n            Compares two arrays of bytes for equivalence. \n            </summary>\n            <param name=\"firstData\">First array of data.</param>\n            <param name=\"secondData\">Second array of data.</param>\n            <returns>True if both arrays contain the same data, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ClearMemory(System.IntPtr,System.Byte,System.Int32)\">\n            <summary>\n            Clears the memory to the specified value.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to the memory.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"sizeInBytesToClear\">Number of bytes, starting from the memory pointer, to clear.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.SizeOf``1\">\n            <summary>\n            Computes the size of the struct type.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <returns>Size of the struct in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsPointer``1(``0@)\">\n            <summary>\n            Casts the by-ref value into a pointer.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"src\">By-ref value.</param>\n            <returns>Pointer to the value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsPointerReadonly``1(``0@)\">\n            <summary>\n            Casts the readonly by-ref value into a pointer.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"src\">By-ref value.</param>\n            <returns>Pointer to the value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsRef``1(System.IntPtr)\">\n            <summary>\n            Casts the pointer into a by-ref value of the specified type.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"pSrc\">Memory location.</param>\n            <returns>By-ref value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.As``2(``0@)\">\n            <summary>\n            Casts one by-ref type to another, unsafely.\n            </summary>\n            <typeparam name=\"TFrom\">From struct type</typeparam>\n            <typeparam name=\"TTo\">To struct type</typeparam>\n            <param name=\"src\">Source by-ref value.</param>\n            <returns>Reference as the from type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsReadonly``2(``0@)\">\n            <summary>\n            Casts one readonly by-ref type to another, unsafely.\n            </summary>\n            <typeparam name=\"TFrom\">From struct type</typeparam>\n            <typeparam name=\"TTo\">To struct type</typeparam>\n            <param name=\"src\">Source by-ref value.</param>\n            <returns>Reference as the from type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.SizeOf``1(``0[])\">\n            <summary>\n            Computes the size of the struct array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"array\">Array of structs</param>\n            <returns>Total size, in bytes, of the array's contents.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AddIntPtr(System.IntPtr,System.Int32)\">\n            <summary>\n            Adds an offset to the pointer.\n            </summary>\n            <param name=\"ptr\">Pointer</param>\n            <param name=\"offset\">Offset</param>\n            <returns>Pointer plus the offset</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyMemory(System.IntPtr,System.IntPtr,System.Int32)\">\n            <summary>\n            Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer.\n            </summary>\n            <param name=\"pDest\">Destination memory location</param>\n            <param name=\"pSrc\">Source memory location</param>\n            <param name=\"sizeInBytesToCopy\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Count``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Returns the number of elements in the enumerable.\n            </summary>\n            <typeparam name=\"T\">Type of element in collection.</typeparam>\n            <param name=\"source\">Enumerable collection</param>\n            <returns>The number of elements in the enumerable collection.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToByteArray``1(``0[])\">\n            <summary>\n            Converts typed element array to a byte array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"source\">Element array</param>\n            <returns>Byte array copy or null if the source array was not valid.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromByteArray``1(System.Byte[])\">\n            <summary>\n            Converts a byte array to a typed element array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"source\">Byte array</param>\n            <returns>Typed element array or null if the source array was not valid.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyBytes``1(System.Byte[],System.Int32,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies bytes from a byte array to an element array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"srcArray\">Source byte array</param>\n            <param name=\"srcStartIndex\">Starting index in destination array</param>\n            <param name=\"destArray\">Destination element array</param>\n            <param name=\"destStartIndex\">Starting index in destination array</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyBytes``1(``0[],System.Int32,System.Byte[],System.Int32,System.Int32)\">\n            <summary>\n            Copies bytes from an element array to a byte array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"srcArray\">Source element array</param>\n            <param name=\"srcStartIndex\">Starting index in source array</param>\n            <param name=\"destArray\">Destination byte array</param>\n            <param name=\"destStartIndex\">Starting index in destination array</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Reads data from the memory location into the array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <param name=\"data\">Array to store the copied data</param>\n            <param name=\"startIndexInArray\">Zero-based element index to start writing data to in the element array.</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr)\">\n            <summary>\n            Reads a single element from the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <returns>The read value</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr,``0@)\">\n            <summary>\n            Reads a single element from the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <param name=\"value\">The read value.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Write``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Writes data from the array to the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pDest\">Pointer to memory location</param>\n            <param name=\"data\">Array containing data to write</param>\n            <param name=\"startIndexInArray\">Zero-based element index to start reading data from in the element array.</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Write``1(System.IntPtr,``0@)\">\n            <summary>\n            Writes a single element to the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pDest\">Pointer to memory location</param>\n            <param name=\"data\">The value to write</param>\n        </member>\n        <member name=\"T:Assimp.Mesh\">\n            <summary>\n            A mesh represents geometry with a single material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Name\">\n            <summary>\n            Gets or sets the mesh name. This tends to be used\n            when formats name nodes and meshes independently,\n            vertex animations refer to meshes by their names,\n            or importers split meshes up, each mesh will reference\n            the same (dummy) name.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.PrimitiveType\">\n            <summary>\n            Gets or sets the primitive type. This may contain more than one\n            type unless if <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            option is not set.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MaterialIndex\">\n            <summary>\n            Gets or sets the index of the material associated with this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexCount\">\n            <summary>\n            Gets the number of vertices in this mesh. This is the count that all\n            per-vertex lists should be the size of.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasVertices\">\n            <summary>\n            Gets if the mesh has a vertex array. This should always return\n            true provided no special scene flags are set.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Vertices\">\n            <summary>\n            Gets the vertex position list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasNormals\">\n            <summary>\n            Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Normals\">\n            <summary>\n            Gets the vertex normal list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasTangentBasis\">\n            <summary>\n            Gets if the mesh has tangents and bitangents. It is not\n            possible for one to be without the other. If it does exist, the count should be the same as the vertex count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Tangents\">\n            <summary>\n            Gets the vertex tangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BiTangents\">\n            <summary>\n            Gets the vertex bitangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.FaceCount\">\n            <summary>\n            Gets the number of faces contained in the mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasFaces\">\n            <summary>\n            Gets if the mesh contains faces. If no special\n            scene flags are set, this should always return true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Faces\">\n            <summary>\n            Gets the mesh's faces. Each face will contain indices\n            to the vertices.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexColorChannelCount\">\n            <summary>\n            Gets the number of valid vertex color channels contained in the\n            mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel\n            should be the size of <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.TextureCoordinateChannelCount\">\n            <summary>\n            Gets the number of valid texture coordinate channels contained\n            in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count.\n            Each individual channel should be the size of <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexColorChannels\">\n            <summary>\n            Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index\n            in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.TextureCoordinateChannels\">\n            <summary>\n            Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index\n            in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.UVComponentCount\">\n            <summary>\n            Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component\n            value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds\n            to the texture coordinate channel index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BoneCount\">\n            <summary>\n            Gets the number of bones that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasBones\">\n            <summary>\n            Gets if this mesh has bones.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Bones\">\n            <summary>\n            Gets the bones that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MeshAnimationAttachmentCount\">\n            <summary>\n            Gets the number of mesh animation attachments that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasMeshAnimationAttachments\">\n            <summary>\n            Gets if this mesh has mesh animation attachments.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MeshAnimationAttachments\">\n            <summary>\n            Gets the mesh animation attachments that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MorphMethod\">\n            <summary>\n            Gets or sets the morph method used when animation attachments are used.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"name\">Name of the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"primType\">Primitive types contained in the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(System.String,Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"name\">Name of the mesh</param>\n            <param name=\"primType\">Primitive types contained in the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.HasVertexColors(System.Int32)\">\n            <summary>\n            Checks if the mesh has vertex colors for the specified channel. This returns false if the list\n            is null or empty. The channel, if it exists, should contain the same number of entries as <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if vertex colors are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.HasTextureCoords(System.Int32)\">\n            <summary>\n            Checks if the mesh has texture coordinates for the specified channel. This returns false if the list\n            is null or empty. The channel, if it exists, should contain the same number of entries as <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if texture coordinates are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.SetIndices(System.Int32[],System.Int32)\">\n            <summary>\n            Convienence method for setting this meshe's face list from an index buffer.\n            </summary>\n            <param name=\"indices\">Index buffer</param>\n            <param name=\"indicesPerFace\">Indices per face</param>\n            <returns>True if the operation succeeded, false otherwise (e.g. not enough data)</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single\n            index array.\n            </summary>\n            <returns>int index array</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetUnsignedIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single index\n            array as unsigned integers (the default from Assimp, if you need them).\n            </summary>\n            <returns>uint index array</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetShortIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single\n            index array.\n            </summary>\n            <returns>short index array</returns>\n        </member>\n        <member name=\"P:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMesh@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#FromNative(Assimp.Unmanaged.AiMesh@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshAnimationAttachment\">\n            <summary>\n            A mesh attachment store per-vertex animations for a particular frame. You may\n            think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain\n            vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual\n            relationship between the time line and mesh attachments is established by the mesh animation channel,\n            which references singular mesh attachments by their ID and binds them to a time offset.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexCount\">\n            <summary>\n            Gets the number of vertices in this mesh. This is a replacement\n            for the host mesh's vertex count. Likewise, a mesh attachment\n            cannot add or remove per-vertex attributes, therefore the existance\n            of vertex data will match the existance of data in the mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasVertices\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex positions\n            of its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Vertices\">\n            <summary>\n            Gets the vertex position list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasNormals\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex normals of\n            its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Normals\">\n            <summary>\n            Gets the vertex normal list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasTangentBasis\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex\n            tangents and bitangents of its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Tangents\">\n            <summary>\n            Gets the vertex tangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.BiTangents\">\n            <summary>\n            Gets the vertex bitangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexColorChannelCount\">\n            <summary>\n            Gets the number of valid vertex color channels contained in the\n            mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel\n            should be the size of <see cref=\"P:Assimp.MeshAnimationAttachment.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.TextureCoordinateChannelCount\">\n            <summary>\n            Gets the number of valid texture coordinate channels contained\n            in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count.\n            Each individual channel should be the size of <see cref=\"P:Assimp.MeshAnimationAttachment.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexColorChannels\">\n            <summary>\n            Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). \n            Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.TextureCoordinateChannels\">\n            <summary>\n            Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null).\n            Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Weight\">\n            <summary>\n            Gets or sets the weight of the mesh animation.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshAnimationAttachment\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.HasVertexColors(System.Int32)\">\n            <summary>\n            Checks if the mesh attachment overrides a particular set of vertex colors on\n            the host mesh. This returns false if the list is null or empty. The index is between \n            zero and the maximumb number of vertex color channels.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if vertex colors are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.HasTextureCoords(System.Int32)\">\n            <summary>\n            Checks if the mesh attachment overrides a particular set of texture coordinates on\n            the host mesh. This returns false if the list is null or empty. The index is \n            between zero and the maximum number of texture coordinate channels.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if texture coordinates are present in the channel.</returns>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#ToNative(System.IntPtr,Assimp.Unmanaged.AiAnimMesh@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#FromNative(Assimp.Unmanaged.AiAnimMesh@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshAnimationChannel\">\n            <summary>\n            Describes vertex-based animations for a single mesh or a group of meshes. Meshes\n            carry the animation data for each frame. The purpose of this object is to define\n            keyframes, linking each mesh attachment to a particular point in a time.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshName\">\n            <summary>\n            Gets or sets the name of the mesh to be animated. Empty strings are not allowed,\n            animation meshes need to be named (not necessarily uniquely, the name can basically\n            serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshKeyCount\">\n            <summary>\n            Gets the number of meshkeys in this animation channel. There will always\n            be at least one key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.HasMeshKeys\">\n            <summary>\n            Gets if this animation channel has mesh keys - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshKeys\">\n            <summary>\n            Gets the mesh keyframes of the animation. This should not be null.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshAnimationChannel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#FromNative(Assimp.Unmanaged.AiMeshAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshKey\">\n            <summary>\n            Binds an anim mesh (referenced by an index) to a specific point in time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshKey.Value\">\n            <summary>\n            Index of the anim mesh that corresponds to this keyframe.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshKey.#ctor(System.Double,System.Int32)\">\n            <summary>\n            Constructs a new MeshKey.\n            </summary>\n            <param name=\"time\">The time of this key.</param>\n            <param name=\"index\">Index of the anim mesh that corresponds to this keyframe.</param>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_Equality(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's indices are the same, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_Inequality(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's indices are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_LessThan(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_GreaterThan(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.Equals(Assimp.MeshKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their indices are equal</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.MeshMorphAnimationChannel\">\n            <summary>\n            Describes morph-based keyframe animations for a single mesh or a group of meshes.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.Name\">\n            <summary>\n            Gets or sets the name of the mesh to be animated. Empty strings are not allowed,\n            animation meshes need to be named (not necessarily uniquely, the name can basically\n            serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.MeshMorphKeyCount\">\n            <summary>\n            Gets the number of mesh morph keys in this animation channel. There will always be at least one key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.HasMeshMorphKeys\">\n            <summary>\n            Gets if this animation channel has mesh keys - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.MeshMorphKeys\">\n            <summary>\n            Gets the mesh morph keyframes of the animation. This should not be null.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshMorphAnimationChannel\" /> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#FromNative(Assimp.Unmanaged.AiMeshMorphAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshMorphAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshMorphKey\">\n            <summary>\n            Binds a morph animation mesh to a specific point in time.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Time\">\n            <summary>\n            Gets or sets the time of this keyframe.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Values\">\n            <summary>\n            Gets the values at the time of this keyframe. Number of values must equal number of weights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Weights\">\n            <summary>\n            Gets the weights at the time of this keyframe. Number of weights must equal number of values.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshMorphKey\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshMorphKey@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#FromNative(Assimp.Unmanaged.AiMeshMorphKey@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Metadata\">\n            <summary>\n            Represents a container for holding metadata, representing as key-value pairs.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Metadata\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMetadata@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#FromNative(Assimp.Unmanaged.AiMetadata@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Metadata.Entry\">\n            <summary>\n            Represents an entry in a metadata container.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Entry.DataType\">\n            <summary>\n            Gets the type of metadata.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Entry.Data\">\n            <summary>\n            Gets the metadata data stored in this entry.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.#ctor(Assimp.MetaDataType,System.Object)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Metadata.Entry\"/> struct.\n            </summary>\n            <param name=\"dataType\">Type of the data.</param>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.op_Equality(Assimp.Metadata.Entry,Assimp.Metadata.Entry)\">\n            <summary>\n            Tests equality between two entries.\n            </summary>\n            <param name=\"a\">First entry</param>\n            <param name=\"b\">Second entry</param>\n            <returns>True if the entries are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.op_Inequality(Assimp.Metadata.Entry,Assimp.Metadata.Entry)\">\n            <summary>\n            Tests inequality between two entries.\n            </summary>\n            <param name=\"a\">First entry</param>\n            <param name=\"b\">Second entry</param>\n            <returns>True if the entries are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.DataAs``1\">\n            <summary>\n            Gets the data as the specified type. If it cannot be casted to the type, then null is returned.\n            </summary>\n            <typeparam name=\"T\">Type to cast the data to.</typeparam>\n            <returns>Casted data or null.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\" /> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\" /> to compare with this instance.</param>\n            <returns>True if the specified <see cref=\"T:System.Object\" /> is equal to this instance; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.Equals(Assimp.Metadata.Entry)\">\n            <summary>\n            Indicates whether the current object is equal to another object of the same type.\n            </summary>\n            <param name=\"other\">An object to compare with this object.</param>\n            <returns>True if the current object is equal to the <paramref name=\"other\" /> parameter; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. </returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.ToString\">\n            <summary>\n            Returns the fully qualified type name of this instance.\n            </summary>\n            <returns>A <see cref=\"T:System.String\" /> containing a fully qualified type name.</returns>\n        </member>\n        <member name=\"T:Assimp.NativeCustomMarshalerAttribute\">\n            <summary>\n            Attribute for assocating a type with an <see cref=\"T:Assimp.INativeCustomMarshaler\"/> instance.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NativeCustomMarshalerAttribute.Marshaler\">\n            <summary>\n            Gets the associated marshaler.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NativeCustomMarshalerAttribute.#ctor(System.Type)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NativeCustomMarshalerAttribute\"/> class.\n            </summary>\n            <param name=\"type\">Type that implements <see cref=\"T:Assimp.INativeCustomMarshaler\"/></param>\n            <exception cref=\"T:System.NullReferenceException\">Thrown if the type is null.</exception>\n            <exception cref=\"T:System.ArgumentException\">Thrown if the type does not implement <see cref=\"T:Assimp.INativeCustomMarshaler\"/>.</exception>\n        </member>\n        <member name=\"T:Assimp.Node\">\n            <summary>\n            A node in the imported model hierarchy.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Name\">\n            <summary>\n            Gets or sets the name of the node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Transform\">\n            <summary>\n            Gets or sets the transformation of the node relative to its parent.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Parent\">\n            <summary>\n            Gets the node's parent, if it exists. \n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.ChildCount\">\n            <summary>\n            Gets the number of children that is owned by this node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.HasChildren\">\n            <summary>\n            Gets if the node contains children.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Children\">\n            <summary>\n            Gets the node's children.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.MeshCount\">\n            <summary>\n            Gets the number of meshes referenced by this node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.HasMeshes\">\n            <summary>\n            Gets if the node contains mesh references.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.MeshIndices\">\n            <summary>\n            Gets the indices of the meshes referenced by this node. Meshes can be\n            shared between nodes, so there is a mesh collection owned by the scene\n            that each node can reference.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Metadata\">\n            <summary>\n            Gets the node's metadata container.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n            <param name=\"name\">Name of the node</param>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor(System.String,Assimp.Node)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n            <param name=\"name\">Name of the node</param>\n            <param name=\"parent\">Parent of the node</param>\n        </member>\n        <member name=\"M:Assimp.Node.FindNode(System.String)\">\n            <summary>\n            Finds a node with the specific name, which may be this node\n            or any children or children's children, and so on, if it exists.\n            </summary>\n            <param name=\"name\">Node name</param>\n            <returns>The node or null if it does not exist</returns>\n        </member>\n        <member name=\"P:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#IsNativeBlittable\">\n            <summary>\n            Gets a value indicating whether this instance is native blittable.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#ToNative(System.IntPtr,Assimp.Unmanaged.AiNode@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#FromNative(Assimp.Unmanaged.AiNode@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Node.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.NodeAnimationChannel\">\n            <summary>\n            Describes the animation of a single node. The name specifies the bone/node which is affected by\n            this animation chanenl. The keyframes are given in three separate seties of values,\n            one for each position, rotation, and scaling. The transformation matrix is computed from\n            these values and replaces the node's original transformation matrix at a specific time.\n            <para>This means all keys are absolute and not relative to the bone default pose.\n            The order which the transformations are to be applied is scaling, rotation, and translation (SRT).</para>\n            <para>Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no\n            negative time values, but they are not forbidden.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.NodeName\">\n            <summary>\n            Gets or sets the name of the node affected by this animation. It must <c>exist</c> and it <c>must</c>\n            be unique.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PositionKeyCount\">\n            <summary>\n            Gets the number of position keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasPositionKeys\">\n            <summary>\n            Gets if this animation channel contains position keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PositionKeys\">\n            <summary>\n            Gets the position keys of this animation channel. Positions are\n            specified as a 3D vector. If there are position keys, there should\n            also be -at least- one scaling and one rotation key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.RotationKeyCount\">\n            <summary>\n            Gets the number of rotation keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasRotationKeys\">\n            <summary>\n            Gets if the animation channel contains rotation keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.RotationKeys\">\n            <summary>\n            Gets the rotation keys of this animation channel. Rotations are\n            given as quaternions. If this exists, there should be -at least- one\n            scaling and one position key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.ScalingKeyCount\">\n            <summary>\n            Gets the number of scaling keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasScalingKeys\">\n            <summary>\n            Gets if the animation channel contains scaling keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.ScalingKeys\">\n            <summary>\n            Gets the scaling keys of this animation channel. Scalings are\n            specified in a 3D vector. If there are scaling keys, there should\n            also be -at least- one position and one rotation key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PreState\">\n            <summary>\n            Gets or sets how the animation behaves before the first key is encountered. By default the original\n            transformation matrix of the affected node is used.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PostState\">\n            <summary>\n            Gets or sets how the animation behaves after the last key was processed. By default the original\n            transformation matrix of the affected node is taken.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NodeAnimationChannel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiNodeAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#FromNative(Assimp.Unmanaged.AiNodeAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.NodeCollection\">\n            <summary>\n            A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.Count\">\n            <summary>\n            Gets the number of elements contained in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.Item(System.Int32)\">\n            <summary>\n            Gets or sets the element at the specified index.\n            </summary>\n            <param name=\"index\">The child index</param>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.IsReadOnly\">\n            <summary>\n            Gets a value indicating whether the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> is read-only.\n            </summary>\n            <returns>true if the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> is read-only; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.#ctor(Assimp.Node)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NodeCollection\"/> class.\n            </summary>\n            <param name=\"parent\">Parent node</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Add(Assimp.Node)\">\n            <summary>\n            Adds an item to the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n            <param name=\"item\">The object to add to the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.AddRange(Assimp.Node[])\">\n            <summary>\n            Adds a range of items to the list.\n            </summary>\n            <param name=\"items\">Item array</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Clear\">\n            <summary>\n            Removes all items from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Contains(Assimp.Node)\">\n            <summary>\n            Determines whether the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> contains a specific value.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n            <returns>\n            true if <paramref name=\"item\" /> is found in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />; otherwise, false.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.CopyTo(Assimp.Node[],System.Int32)\">\n            <summary>\n            Copies collection contents to the array\n            </summary>\n            <param name=\"array\">The array to copy to.</param>\n            <param name=\"arrayIndex\">Index of the array to start copying.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.IndexOf(Assimp.Node)\">\n            <summary>\n            Determines the index of a specific item in the <see cref=\"T:System.Collections.Generic.IList`1\" />.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.IList`1\" />.</param>\n            <returns>\n            The index of <paramref name=\"item\" /> if found in the list; otherwise, -1.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Insert(System.Int32,Assimp.Node)\">\n            <summary>\n            Inserts an item to the <see cref=\"T:System.Collections.Generic.IList`1\" /> at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index at which <paramref name=\"item\" /> should be inserted.</param>\n            <param name=\"item\">The object to insert into the <see cref=\"T:System.Collections.Generic.IList`1\" />.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the <see cref=\"T:System.Collections.Generic.IList`1\" /> item at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index of the item to remove.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Remove(Assimp.Node)\">\n            <summary>\n            Removes the first occurrence of a specific object from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n            <param name=\"item\">The object to remove from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n            <returns>\n            true if <paramref name=\"item\" /> was successfully removed from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />; otherwise, false. This method also returns false if <paramref name=\"item\" /> is not found in the original <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.ToArray\">\n            <summary>\n            Copies elements in the collection to a new array.\n            </summary>\n            <returns>Array of copied elements</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through the collection.\n            </summary>\n            <returns>A <see cref=\"T:System.Collections.Generic.IEnumerator`1\" /> that can be used to iterate through the collection.</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through a collection.\n            </summary>\n            <returns>An <see cref=\"T:System.Collections.IEnumerator\" /> object that can be used to iterate through the collection.</returns>\n        </member>\n        <member name=\"T:Assimp.Plane\">\n            <summary>\n            Represents a plane in three-dimensional euclidean space where\n            A, B, C are components of the plane normal and D is the distance along the\n            normal from the origin to the plane.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.A\">\n            <summary>\n            X component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.B\">\n            <summary>\n            Y component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.C\">\n            <summary>\n            Z component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.D\">\n            <summary>\n            Distance from the origin to the plane along the normal vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Plane.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Plane.\n            </summary>\n            <param name=\"a\">X component of the normal vector.</param>\n            <param name=\"b\">Y component of the normal vector.</param>\n            <param name=\"c\">Z component of the normal vector.</param>\n            <param name=\"d\">Distance from the origin to the plane along the normal vector.</param>\n        </member>\n        <member name=\"T:Assimp.PostProcessPreset\">\n            <summary>\n            Static class containing preset properties for post processing options.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.ConvertToLeftHanded\">\n            <summary>\n            PostProcess configuration for (some) Direct3D conventions,\n            left handed geometry, upper left origin for UV coordinates,\n            and clockwise face order, suitable for CCW culling.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeFast\">\n            <summary>\n            PostProcess configuration for optimizing data for real-time.\n            Does the following steps:\n            \n            <see cref=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\"/>, <see cref=\"F:Assimp.PostProcessSteps.GenerateNormals\"/>, \n            <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>, <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/>, and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeQuality\">\n            <summary>\n            PostProcess configuration for optimizing\n            data for real-time rendering. Does the following steps:\n            \n            <see cref=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\"/>, <see cref=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\"/>, \n            <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>, <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/>, <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/>, <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/>, <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/>, and\n            <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeMaximumQuality\">\n            <summary>\n            PostProcess configuration for heavily optimizing the data\n            for real-time rendering. Includes all flags in\n            <see cref=\"P:Assimp.PostProcessPreset.TargetRealTimeQuality\"/> as well as \n            <see cref=\"F:Assimp.PostProcessSteps.FindInstances\"/>, <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>, and\n            <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/>\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Quaternion\">\n            <summary>\n            A 4D vector that represents a rotation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.W\">\n            <summary>\n            Rotation component of the quaternion/\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.X\">\n            <summary>\n            X component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.Y\">\n            <summary>\n            Y component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.Z\">\n            <summary>\n            Z component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Quaternion.\n            </summary>\n            <param name=\"w\">W component</param>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(Assimp.Matrix3x3)\">\n            <summary>\n            Constructs a new Quaternion from a rotation matrix.\n            </summary>\n            <param name=\"matrix\">Rotation matrix to create the Quaternion from.</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Quaternion from three euler angles.\n            </summary>\n            <param name=\"pitch\">Pitch</param>\n            <param name=\"yaw\">Yaw</param>\n            <param name=\"roll\">Roll</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Constructs a new Quaternion from an axis-angle.\n            </summary>\n            <param name=\"axis\">Axis</param>\n            <param name=\"angle\">Angle about the axis</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Normalize\">\n            <summary>\n            Normalizes the quaternion.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Conjugate\">\n            <summary>\n            Transforms this quaternion into its conjugate.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.GetMatrix\">\n            <summary>\n            Returns a matrix representation of the quaternion.\n            </summary>\n            <returns>Rotation matrix representing the quaternion.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Slerp(Assimp.Quaternion,Assimp.Quaternion,System.Single)\">\n            <summary>\n            Spherical interpolation between two quaternions.\n            </summary>\n            <param name=\"start\">Start rotation when factor == 0</param>\n            <param name=\"end\">End rotation when factor == 1</param>\n            <param name=\"factor\">Interpolation factor between 0 and 1, values beyond this range yield undefined values</param>\n            <returns>Interpolated quaternion.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Rotate(Assimp.Vector3D,Assimp.Quaternion)\">\n            <summary>\n            Rotates a point by this quaternion.\n            </summary>\n            <param name=\"pt\">Point to rotate</param>\n            <param name=\"quat\">Quaternion representing the rotation</param>\n            <returns>Rotated point.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Multiply(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Multiplies two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>Resulting quaternion</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Equality(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Tests equality between two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>True if the quaternions are equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Inequality(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Tests inequality between two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>True if the quaternions are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Equals(Assimp.Quaternion)\">\n            <summary>\n            Tests equality between two quaternions.\n            </summary>\n            <param name=\"other\">Quaternion to compare</param>\n            <returns>True if the quaternions are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.QuaternionKey\">\n            <summary>\n            Time-value pair specifying a rotation for a given time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.QuaternionKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.QuaternionKey.Value\">\n            <summary>\n            The rotation of this key.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.#ctor(System.Double,Assimp.Quaternion)\">\n            <summary>\n            Constructs a new QuaternionKey.\n            </summary>\n            <param name=\"time\">Time of the key.</param>\n            <param name=\"rot\">Quaternion rotation at the time frame.</param>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_Equality(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's rotations are the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_Inequality(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's rotations are not the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_LessThan(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_GreaterThan(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.Equals(Assimp.QuaternionKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their rotations are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Ray\">\n            <summary>\n            Defines a 3D ray with a point of origin and a direction.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Ray.Position\">\n            <summary>\n            Origin of the ray in space.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Ray.Direction\">\n            <summary>\n            Direction of the ray.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Ray.#ctor(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new Ray.\n            </summary>\n            <param name=\"pos\">Origin of the ray.</param>\n            <param name=\"dir\">Direction of the ray.</param>\n        </member>\n        <member name=\"T:Assimp.Scene\">\n            <summary>\n            Represents a completely imported model or scene. Everything that was imported from the given file can be\n            accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory\n            and Assimp's read only copy is released.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.SceneFlags\">\n            <summary>\n            Gets or sets the state of the imported scene. By default no flags are set, but\n            issues can arise if the flag is set to incomplete.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.RootNode\">\n            <summary>\n            Gets or sets the root node of the scene graph. There will always be at least the root node\n            if the import was successful and no special flags have been set. Presence of further nodes\n            depends on the format and content of the imported file.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasMeshes\">\n            <summary>\n            Gets if the scene contains meshes. Unless if no special scene flags are set\n            this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.MeshCount\">\n            <summary>\n            Gets the number of meshes in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Meshes\">\n            <summary>\n            Gets the meshes contained in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasLights\">\n            <summary>\n            Gets if the scene contains any lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.LightCount\">\n            <summary>\n            Gets the number of lights in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Lights\">\n            <summary>\n            Gets the lights in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasCameras\">\n            <summary>\n            Gets if the scene contains any cameras.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.CameraCount\">\n            <summary>\n            Gets the number of cameras in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Cameras\">\n            <summary>\n            Gets the cameras in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasTextures\">\n            <summary>\n            Gets if the scene contains embedded textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.TextureCount\">\n            <summary>\n            Gets the number of embedded textures in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Textures\">\n            <summary>\n            Gets the embedded textures in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasAnimations\">\n            <summary>\n            Gets if the scene contains any animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.AnimationCount\">\n            <summary>\n            Gets the number of animations in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Animations\">\n            <summary>\n            Gets the animations in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasMaterials\">\n            <summary>\n            Gets if the scene contains any materials. There should always be at least the\n            default Assimp material if no materials were loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.MaterialCount\">\n            <summary>\n            Gets the number of materials in the scene. There should always be at least the\n            default Assimp material if no materials were loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Materials\">\n            <summary>\n            Gets the materials in the scene.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Scene\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.Clear\">\n            <summary>\n            Clears the scene of all components.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.ToUnmanagedScene(Assimp.Scene)\">\n            <summary>\n            Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to\n            <see cref=\"M:Assimp.Scene.FreeUnmanagedScene(System.IntPtr)\"/>, the memory is owned by AssimpNet and cannot be freed by the native library.\n            </summary>\n            <param name=\"scene\">Scene data</param>\n            <returns>Unmanaged scene or NULL if the scene is null.</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.FromUnmanagedScene(System.IntPtr)\">\n            <summary>\n            Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory.\n            </summary>\n            <param name=\"scenePtr\">The unmanaged scene data</param>\n            <returns>The managed scene, or null if the pointer is NULL</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.FreeUnmanagedScene(System.IntPtr)\">\n            <summary>\n            Frees unmanaged memory allocated -ONLY- in <see cref=\"M:Assimp.Scene.ToUnmanagedScene(Assimp.Scene)\"/>. To free an unmanaged scene allocated by the unmanaged Assimp library,\n            call the appropiate <see cref=\"M:Assimp.Unmanaged.AssimpLibrary.ReleaseImport(System.IntPtr)\"/> function.\n            </summary>\n            <param name=\"scenePtr\">Pointer to unmanaged scene data.</param>\n        </member>\n        <member name=\"P:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#ToNative(System.IntPtr,Assimp.Unmanaged.AiScene@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#FromNative(Assimp.Unmanaged.AiScene@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Scene.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Texel\">\n            <summary>\n            Represents a texel in ARGB8888 format.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.A\">\n            <summary>\n            Alpha component.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Texel.#ctor(System.Byte,System.Byte,System.Byte,System.Byte)\">\n            <summary>\n            Constructs a new Texel.\n            </summary>\n            <param name=\"b\">Blue component.</param>\n            <param name=\"g\">Green component.</param>\n            <param name=\"r\">Red component.</param>\n            <param name=\"a\">Alpha component.</param>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Equality(Assimp.Texel,Assimp.Texel)\">\n            <summary>\n            Tests equality between two texels.\n            </summary>\n            <param name=\"a\">First texel</param>\n            <param name=\"b\">Second texel</param>\n            <returns>True if the texels are equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Inequality(Assimp.Texel,Assimp.Texel)\">\n            <summary>\n            Tests inequality between two texels.\n            </summary>\n            <param name=\"a\">First texel</param>\n            <param name=\"b\">Second texel</param>\n            <returns>True if the texels are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Implicit(Assimp.Texel)~Assimp.Color4D\">\n            <summary>\n            Implicitly converts a texel to a Color4D.\n            </summary>\n            <param name=\"texel\">Texel to convert</param>\n            <returns>Converted Color4D</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Texel.Equals(Assimp.Texel)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"other\">Other key to test</param>\n            <returns>True if their indices are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Texel.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.TextureSlot\">\n            <summary>\n            Describes all the values pertaining to a particular texture slot in a material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.FilePath\">\n            <summary>\n            Gets the texture file path.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.TextureType\">\n            <summary>\n            Gets the texture type semantic.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.TextureIndex\">\n            <summary>\n            Gets the texture index in the material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Mapping\">\n            <summary>\n            Gets the texture mapping.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.UVIndex\">\n            <summary>\n            Gets the UV channel index that corresponds to this texture from the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.BlendFactor\">\n            <summary>\n            Gets the blend factor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Operation\">\n            <summary>\n            Gets the texture operation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.WrapModeU\">\n            <summary>\n            Gets the texture wrap mode for the U coordinate.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.WrapModeV\">\n            <summary>\n            Gets the texture wrap mode for the V coordinate.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Flags\">\n            <summary>\n            Gets misc flags.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.TextureSlot.#ctor(System.String,Assimp.TextureType,System.Int32,Assimp.TextureMapping,System.Int32,System.Single,Assimp.TextureOperation,Assimp.TextureWrapMode,Assimp.TextureWrapMode,System.Int32)\">\n            <summary>\n            Constructs a new TextureSlot.\n            </summary>\n            <param name=\"filePath\">Texture filepath</param>\n            <param name=\"typeSemantic\">Texture type semantic</param>\n            <param name=\"texIndex\">Texture index in the material</param>\n            <param name=\"mapping\">Texture mapping</param>\n            <param name=\"uvIndex\">UV channel in mesh that corresponds to this texture</param>\n            <param name=\"blendFactor\">Blend factor</param>\n            <param name=\"texOp\">Texture operation</param>\n            <param name=\"wrapModeU\">Texture wrap mode for U coordinate</param>\n            <param name=\"wrapModeV\">Texture wrap mode for V coordinate</param>\n            <param name=\"flags\">Misc flags</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiConfigs\">\n            <summary>\n            Defines configurable properties for importing models. All properties\n            have default values. Setting config properties are done via the SetProperty*\n            methods in AssimpMethods.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOB_MEASURE_TIME\">\n            <summary>\n            Enables time measurements. If enabled the time needed for each\n            part of the loading process is timed and logged.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOB_MULTITHREADING\">\n            <summary>\n            Sets Assimp's multithreading policy. This is ignored if Assimp is\n            built without boost.thread support. Possible values are: -1 to\n            let Assimp decide, 0 to disable multithreading, and nay number larger than 0\n            to force a specific number of threads. This is only a hint and may be \n            ignored by Assimp.\n            <para>Type: integer. Default: -1</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_NO_SKELETON_MESHES\">\n            <summary>\n            Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid\n            in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing\n            the bones.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the maximum angle that may be between two vertex tangents that their tangents\n            and bitangents are smoothed during the step to calculate the tangent basis. The angle specified \n            is in degrees. The maximum value is 175 degrees.\n            <para>Type: float. Default: 45 degrees</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the maximum angle that may be between two face normals at the same vertex position that\n            their normals will be smoothed together during the calculate smooth normals step. This is commonly\n            called the \"crease angle\". The angle is specified in degrees. Maximum value is 175 degrees (all vertices\n            smoothed).\n            <para>Type: float. Default: 175 degrees</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDL_COLORMAP\">\n            <summary>\n            Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files.\n            This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains\n            RGB triplets for each of the 256 palette entries. If the file is not found, a default\n            palette (from Quake 1) is used.\n            <para>Type: string. Default: \"colormap.lmp\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_RRM_EXCLUDE_LIST\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/> step to\n            keep materials matching a name in a given list. This is a list of\n            1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers\n            containing whitespaces must be enclosed in *single* quotation marks. Tabs or\n            carriage returns are treated as whitespace.\n            <para>If a material matches one of these names, it will not be modified\n            or removed by the post processing step nor will other materials be replaced\n            by a reference to it.</para>\n            <para>Default: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_KEEP_HIERARCHY\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization\n            is performed where meshes with the same materials are not joined.\n            <para>This option could be of used if you have a scene hierarchy that contains\n            important additional information which you intend to parse.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_NORMALIZE\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to normalize all vertex components into the -1...1 range. That is, a bounding\n            box for the whole scene is computed where the maximum component is taken\n            and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension\n            of the input data.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_REMOVE\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step\n            to remove degenerated primitives from the import immediately.\n            <para>The default behavior converts degenerated triangles to lines and\n            degenerated lines to points.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_CHECKAREA\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step\n            to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_REMOVE\"/> is set to true.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_OG_EXCLUDE_LIST\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/> step\n            to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character.\n            Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns\n            and tabs are treated as white space.\n            <para>If a node matches one of these names, it will not be modified or removed by the\n            postprocessing step.</para>\n            <para>Type: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_TRIANGLE_LIMIT\">\n            <summary>\n            Sets the maximum number of triangles a mesh can contain. This is used by the\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step to determine\n            whether a mesh must be split or not.\n            <para>Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_VERTEX_LIMIT\">\n            <summary>\n            Sets the maximum number of vertices in a mesh. This is used by the\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step to determine\n            whether a mesh must be split or not.\n            <para>Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_LBW_MAX_WEIGHTS\">\n            <summary>\n            Sets the maximum number of bones that can affect a single vertex. This is used\n            by the <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/> step.\n            <para>Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_ICL_PTCACHE_SIZE\">\n            <summary>\n            Sets the size of the post-transform vertex cache to optimize vertices for. This is\n            for the <see cref=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\"/> step. The size\n            is given in vertices. Of course you can't know how the vertex format will exactly look\n            like after the import returns, but you can still guess what your meshes will\n            probably have. The default value *has* resulted in slight performance improvements\n            for most Nvidia/AMD cards since 2002.\n            <para>Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_RVC_FLAGS\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.RemoveComponent\"/> step. \n            It specifies the parts of the data structure to be removed.\n            <para>This is a bitwise combination of the <see cref=\"T:Assimp.ExcludeComponent\"/> flag. If no valid mesh is remaining after\n            the step is executed, the import FAILS.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SBP_REMOVE\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step.\n            It specifies which primitive types are to be removed by the step.\n            <para>This is a bitwise combination of the <see cref=\"T:Assimp.PrimitiveType\"/> flag.\n            Specifying ALL types is illegal.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FID_ANIM_ACCURACY\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step.\n            It specifies the floating point accuracy for animation values, specifically the epislon\n            during the comparison. The step checks for animation tracks where all frame values are absolutely equal \n            and removes them. Two floats are considered equal if the invariant <c>abs(n0-n1) > epislon</c> holds\n            true for all vector/quaternion components.\n            <para>Type: float. Default: 0.0f (comparisons are exact)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_TUV_EVALUATE\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.TransformUVCoords\"/> step.\n            It specifies which UV transformations are to be evaluated.\n            <para>This is bitwise combination of the <see cref=\"T:Assimp.UVTransformFlags\"/> flag.</para>\n            <para>Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_FAVOUR_SPEED\">\n            <summary>\n            A hint to Assimp to favour speed against import quality. Enabling this option\n            may result in faster loading, or it may not. It is just a hint to loaders and post-processing\n            steps to use faster code paths if possible. A value not equal to zero stands\n            for true.\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SBBC_MAX_BONES\">\n            <summary>\n            Maximum bone cone per mesh for the <see cref=\"F:Assimp.PostProcessSteps.SplitByBoneCount\"/> step. Meshes\n            are split until the max number of bones is reached.\n            <para>Type: integer. Default: 60</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX\">\n            <summary>\n            Source UV channel for tangent space computation. The specified channel must exist or an error will be raised.\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_DB_THRESHOLD\">\n            <summary>\n            Threshold used to determine if a bone is kept or removed during the <see cref=\"F:Assimp.PostProcessSteps.Debone\"/> step.\n            <para>Type: float. Default: 1.0f</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_DB_ALL_OR_NONE\">\n            <summary>\n            Require all bones to qualify for deboning before any are removed.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step to use a user defined matrix as the scene root node\n            transformation before transforming vertices.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step to use a user defined matrix as the scene root node transformation\n            before transforming vertices.\n            <para>Type: Matrix4x4. Default: Identity Matrix</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.GlobalScale\"/> step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model,\n            which this processing step can utilize.\n            <para>Type: Float. Default: 1.0f.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support\n            vertex keyframes (only bone animation is supported). The libary reads only one frame of models\n            with vertex animations. By default this is the first frame.\n            <para>The default value is 0. This option applies to all importers. However, it is\n            also possible to override the global setting for a specific loader. You can use the\n            AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which\n            you want to override the global setting.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD2_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDL_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDC_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_SMD_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_UNREAL_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL\">\n            <summary>\n            Configures the AC loader to collect all surfaces which have the \"Backface cull\" flag set in separate\n            meshes.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_AC_EVAL_SUBDIVISION\">\n            <summary>\n            Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence\n            of the 'subdiv' attribute in the file). By default, Assimp performs\n            the subdivision using the standard Catmull-Clark algorithm.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS\">\n            <summary>\n            Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided).\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_TER_MAKE_UVS\">\n            <summary>\n            Configures the terragen import plugin to compute UV's for terrains, if\n            they are not given. Furthermore, a default texture is assigned.\n            <para>UV coordinates for terrains are so simple to compute that you'll usually \n            want to compute them on your own, if you need them. This option is intended for model viewers which\n            want to offer an easy way to apply textures to terrains.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS\">\n            <summary>\n            Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups\n            loaded from the file. Some ASE files carry invalid normals, others don't.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART\">\n            <summary>\n            Configures the M3D loader to detect and process multi-part Quake player models. These models\n            usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is\n            set to true, Assimp will try to load and combine all three files if one of them is loaded.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_SKIN_NAME\">\n            <summary>\n            Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks\n            whether a file named \"md3_file_name\"_\"skin_name\".skin exists. These files are used by\n            Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue'\n            are typical skin names.\n            <para>Type: string. Default: \"default\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_SHADER_SRC\">\n            <summary>\n            Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or\n            relative to where all MD3 shaders reside.\n            <para>Type: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY\">\n            <summary>\n            Configures the LWO loader to load just one layer from the model.\n            <para>LWO files consist of layers and in some cases it could be useful to load only one of them.\n            This property can be either a string - which specifies the name of the layer - or an integer - the index\n            of the layer. If the property is not set then the whole LWO model is loaded. Loading fails\n            if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty</para>\n            <para>Type: bool. Default: false (All layers are loaded)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD\">\n            <summary>\n            Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically.\n            <para>The default strategy is to look for a file with the same name but with the MD5ANIm extension\n            in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration\n            option can be used to disable this behavior.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWS_ANIM_START\">\n            <summary>\n            Defines the beginning of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the start time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation start from the input LWS\n            file ('FirstFrame' line)</para>\n            <para>Type: integer. Default: taken from file</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWS_ANIM_END\">\n            <summary>\n            Defines the ending of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the end time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation end from the input LWS\n            file.</para>\n            <para>Type: integer. Default: taken from file</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IRR_ANIM_FPS\">\n            <summary>\n            Defines the output frame rate of the IRR loader.\n            <para>IRR animations are difficult to convert for Assimp and there will always be\n            a loss of quality. This setting defines how many keys per second are returned by the converter.</para>\n            <para>Type: integer. Default: 100</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE\">\n            <summary>\n            The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp\n            where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material,\n            and lastly the material name defined by this config property.\n            <para>Type: string. Default: \"Scene.Material\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME\">\n            <summary>\n            The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified\n            in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: \n            <list type=\"bullet\">\n            <item><description>Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap</description></item>\n            <item><description>Specular Maps: _s, _spec, _specular, _specularmap</description></item>\n            <item><description>Light Maps: _l, _light, _lightmap, _occ, _occlusion</description></item>\n            <item><description>Displacement Maps: _dis, _displacement</description></item>\n            </list>\n            The matching is case insensitive. Postfix is taken between the last \"_\" and last \".\". The default behavior is to detect type from lower cased\n            texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then,\n            <see cref=\"F:Assimp.TextureType.Diffuse\"/> is used.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS\">\n            <summary>\n            Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION\">\n            <summary>\n            Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false,\n            walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected\n            with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known\n            issues with these kind of polygons.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120]\n            <para>Type: Float. Default: 10.0f</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_CYLINDRICAL_TESSELLATION\">\n            <summary>\n            Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180].\n            <para>Type: Integer. Default: 32</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION\">\n            <summary>\n            Specifies whether the collada loader will ignore the up direction.\n            <para>Type: Bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS\">\n            <summary>\n            Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first.\n            <para>Type: bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS\">\n            <summary>\n            Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer\n            will read materials, otherwise this has no effect.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_MATERIALS\">\n            <summary>\n            Specifies whether the FBX importer will read materials.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_TEXTURES\">\n            <summary>\n            Specifies whether the FBX importer will read embedded textures.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_SEARCH_EMBEDDED_TEXTURES\">\n            <summary>\n            Specifies whether the FBX importer will search for embedded loaded textures, where no embedded texture data is provided.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_CAMERAS\">\n            <summary>\n            Specifies whether the FBX importer will read cameras.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_LIGHTS\">\n            <summary>\n            Specifies whether the FBX importer will read light sources.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS\">\n            <summary>\n            Specifies whether the FBX importer will read animations.\n            <para>Type: Bool. default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_STRICT_MODE\">\n            <summary>\n            Specifies whether the FBX importer will act in strict mode in which only the FBX 2013\n            format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this\n            format is best supported and well-tested.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS\">\n            <summary>\n            Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots\n            and offsets will be evaluated whenever possible.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES\">\n            <summary>\n            Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose \n            transformation over their entire defined range.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_EXPORT_XFILE_64BIT\">\n            <summary>\n            Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiDefines\">\n            <summary>\n            Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants\n            are grouped according to their usage or where they're found in the Assimp include files.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_TRIANGLE_LIMIT\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_VERTICES\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_VERTEX_LIMIT\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_LBW_MAX_WEIGHTS\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_LBW_MAX_WEIGHTS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.PP_ICL_PTCACHE_SIZE\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_ICL_PTCACHE_SIZE\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_UVTRAFO_ALL\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_TUV_EVALUATE\"/>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_FACE_INDICES\">\n            <summary>\n            Defines the maximum number of indices per face (polygon).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_BONE_WEIGHTS\">\n            <summary>\n            Defines the maximum number of bone weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_VERTICES\">\n            <summary>\n            Defines the maximum number of vertices per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_FACES\">\n            <summary>\n            Defines the maximum number of faces per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\">\n            <summary>\n            Defines the maximum number of vertex color sets per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\">\n            <summary>\n            Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SBBC_DEFAULT_MAX_BONES\">\n            <summary>\n            Defines the default bone count limit.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEBONE_THRESHOLD\">\n            <summary>\n            Defines the deboning threshold.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.MAX_LENGTH\">\n            <summary>\n            Defines the maximum length of a string used in AiString.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEFAULT_MATERIAL_NAME\">\n            <summary>\n            Defines the default color material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEFAULT_TEXTURED_MATERIAL_NAME\">\n            <summary>\n            Defines the default textured material (if the meshes have UV coords).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMatKeys\">\n            <summary>\n            Static class containing material key constants. A fully qualified mat key\n            name here means that it's a string that combines the mat key (base) name, its\n            texture type semantic, and its texture index into a single string delimited by\n            commas. For non-texture material properties, the texture type semantic and texture\n            index are always zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.NAME_BASE\">\n            <summary>\n            Material name (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.NAME\">\n            <summary>\n            Material name (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TWOSIDED_BASE\">\n            <summary>\n            Two sided property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TWOSIDED\">\n            <summary>\n            Two sided property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADING_MODEL_BASE\">\n            <summary>\n            Shading mode property (ShadingMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADING_MODEL\">\n            <summary>\n            Shading mode property (ShadingMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.ENABLE_WIREFRAME_BASE\">\n            <summary>\n            Enable wireframe property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.ENABLE_WIREFRAME\">\n            <summary>\n            Enable wireframe property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BLEND_FUNC_BASE\">\n            <summary>\n            Blending function (BlendMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BLEND_FUNC\">\n            <summary>\n            Blending function (BlendMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.OPACITY_BASE\">\n            <summary>\n            Opacity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.OPACITY\">\n            <summary>\n            Opacity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BUMPSCALING_BASE\">\n            <summary>\n            Bumpscaling (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BUMPSCALING\">\n            <summary>\n            Bumpscaling (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_BASE\">\n            <summary>\n            Shininess (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS\">\n            <summary>\n            Shininess (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFLECTIVITY_BASE\">\n            <summary>\n            Reflectivity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFLECTIVITY\">\n            <summary>\n            Reflectivity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_STRENGTH_BASE\">\n            <summary>\n            Shininess strength (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_STRENGTH\">\n            <summary>\n            Shininess strength (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFRACTI_BASE\">\n            <summary>\n            Refracti (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFRACTI\">\n            <summary>\n            Refracti (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_DIFFUSE_BASE\">\n            <summary>\n            Diffuse color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_DIFFUSE\">\n            <summary>\n            Diffuse color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_AMBIENT_BASE\">\n            <summary>\n            Ambient color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_AMBIENT\">\n            <summary>\n            Ambient color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_SPECULAR_BASE\">\n            <summary>\n            Specular color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_SPECULAR\">\n            <summary>\n            Specular color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_EMISSIVE_BASE\">\n            <summary>\n            Emissive color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_EMISSIVE\">\n            <summary>\n            Emissive color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_TRANSPARENT_BASE\">\n            <summary>\n            Transparent color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_TRANSPARENT\">\n            <summary>\n            Transparent color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_REFLECTIVE_BASE\">\n            <summary>\n            Reflective color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_REFLECTIVE\">\n            <summary>\n            Reflective color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_BACKGROUND_IMAGE_BASE\">\n            <summary>\n            Background image (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_BACKGROUND_IMAGE\">\n            <summary>\n            Background image (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXTURE_BASE\">\n            <summary>\n            Texture base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.UVWSRC_BASE\">\n            <summary>\n            UVWSRC base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXOP_BASE\">\n            <summary>\n            Texture op base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPING_BASE\">\n            <summary>\n            Mapping base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXBLEND_BASE\">\n            <summary>\n            Texture blend base name.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPINGMODE_U_BASE\">\n            <summary>\n            Mapping mode U base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPINGMODE_V_BASE\">\n            <summary>\n            Mapping mode V base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXMAP_AXIS_BASE\">\n            <summary>\n            Texture map axis base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.UVTRANSFORM_BASE\">\n            <summary>\n            UV transform base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXFLAGS_BASE\">\n            <summary>\n            Texture flags base name\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiMatKeys.GetFullTextureName(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Helper function to get the fully qualified name of a texture property type name. Takes\n            in a base name constant, a texture type, and a texture index and outputs the name in the format:\n            <para>\"baseName,TextureType,texIndex\"</para>\n            </summary>\n            <param name=\"baseName\">Base name</param>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"texIndex\">Texture index</param>\n            <returns>Fully qualified texture name</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiMatKeys.GetBaseName(System.String)\">\n            <summary>\n            Helper function to get the base name from a fully qualified name of a material property type name. The format\n            of such a string is:\n            <para>\"baseName,TextureType,texIndex\"</para>\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified material property name.</param>\n            <returns>Base name of the property type.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary\">\n            <summary>\n            Singleton that governs access to the unmanaged Assimp library functions.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AssimpLibrary.DefaultLibName\">\n            <summary>\n            Default name of the unmanaged library. Based on runtime implementation the prefix (\"lib\" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AssimpLibrary.Instance\">\n            <summary>\n            Gets the AssimpLibrary instance.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AssimpLibrary.IsMultithreadingSupported\">\n            <summary>\n            Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only,\n            then it will not utilize multiple threads during import.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFile(System.String,Assimp.PostProcessSteps,System.IntPtr)\">\n            <summary>\n            Imports a file.\n            </summary>\n            <param name=\"file\">Valid filename</param>\n            <param name=\"flags\">Post process flags specifying what steps are to be run after the import.</param>\n            <param name=\"propStore\">Property store containing config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFile(System.String,Assimp.PostProcessSteps,System.IntPtr,System.IntPtr)\">\n            <summary>\n            Imports a file.\n            </summary>\n            <param name=\"file\">Valid filename</param>\n            <param name=\"flags\">Post process flags specifying what steps are to be run after the import.</param>\n            <param name=\"fileIO\">Pointer to an instance of AiFileIO, a custom file IO system used to open the model and \n            any associated file the loader needs to open, passing NULL uses the default implementation.</param>\n            <param name=\"propStore\">Property store containing config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFileFromStream(System.IO.Stream,Assimp.PostProcessSteps,System.String,System.IntPtr)\">\n            <summary>\n            Imports a scene from a stream. This uses the \"aiImportFileFromMemory\" function. The stream can be from anyplace,\n            not just a memory stream. It is up to the caller to dispose of the stream.\n            </summary>\n            <param name=\"stream\">Stream containing the scene data</param>\n            <param name=\"flags\">Post processing flags</param>\n            <param name=\"formatHint\">A hint to Assimp to decide which importer to use to process the data</param>\n            <param name=\"propStore\">Property store containing the config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ReleaseImport(System.IntPtr)\">\n            <summary>\n            Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled\n            from the managed scene structure - only for scenes whose memory was allocated by the native library!\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ApplyPostProcessing(System.IntPtr,Assimp.PostProcessSteps)\">\n            <summary>\n            Applies a post-processing step on an already imported scene.\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n            <param name=\"flags\">Post processing steps to run.</param>\n            <returns>Pointer to the unmanaged scene data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetExportFormatDescriptions\">\n            <summary>\n            Gets all supported export formats.\n            </summary>\n            <returns>Array of supported export formats.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportSceneToBlob(System.IntPtr,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file.\n            </summary>\n            <param name=\"scene\">Scene to export, it is the responsibility of the caller to free this when finished.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"preProcessing\">Pre processing flags to operate on the scene during the export.</param>\n            <returns>Exported binary blob, or null if there was an error.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportScene(System.IntPtr,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format and writes the result file(s) to disk.\n            </summary>\n            <param name=\"scene\">The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short,\n            this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"fileName\">Output filename to write to</param>\n            <param name=\"preProcessing\">Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input\n            conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format.</param>\n            <returns>Return code specifying if the operation was a success.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportScene(System.IntPtr,System.String,System.String,System.IntPtr,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format and writes the result file(s) to disk.\n            </summary>\n            <param name=\"scene\">The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short,\n            this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"fileName\">Output filename to write to</param>\n            <param name=\"fileIO\">Pointer to an instance of AiFileIO, a custom file IO system used to open the model and \n            any associated file the loader needs to open, passing NULL uses the default implementation.</param>\n            <param name=\"preProcessing\">Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input\n            conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format.</param>\n            <returns>Return code specifying if the operation was a success.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CopyScene(System.IntPtr)\">\n            <summary>\n            Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified\n            and the scene be exported.\n            </summary>\n            <param name=\"sceneToCopy\">Valid scene to be copied</param>\n            <returns>Modifyable copy of the scene</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.AttachLogStream(System.IntPtr)\">\n            <summary>\n            Attaches a log stream callback to catch Assimp messages.\n            </summary>\n            <param name=\"logStreamPtr\">Pointer to an instance of AiLogStream.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.EnableVerboseLogging(System.Boolean)\">\n            <summary>\n            Enables verbose logging.\n            </summary>\n            <param name=\"enable\">True if verbose logging is to be enabled or not.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVerboseLoggingEnabled\">\n            <summary>\n            Gets if verbose logging is enabled.\n            </summary>\n            <returns>True if verbose logging is enabled, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DetachLogStream(System.IntPtr)\">\n            <summary>\n            Detaches a logstream callback.\n            </summary>\n            <param name=\"logStreamPtr\">Pointer to an instance of AiLogStream.</param>\n            <returns>A return code signifying if the function was successful or not.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DetachAllLogStreams\">\n            <summary>\n            Detaches all logstream callbacks currently attached to Assimp.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CreatePropertyStore\">\n            <summary>\n            Create an empty property store. Property stores are used to collect import settings.\n            </summary>\n            <returns>Pointer to property store</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ReleasePropertyStore(System.IntPtr)\">\n            <summary>\n            Deletes a property store.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyInteger(System.IntPtr,System.String,System.Int32)\">\n            <summary>\n            Sets an integer property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyFloat(System.IntPtr,System.String,System.Single)\">\n            <summary>\n            Sets a float property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyString(System.IntPtr,System.String,System.String)\">\n            <summary>\n            Sets a string property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyMatrix(System.IntPtr,System.String,Assimp.Matrix4x4)\">\n            <summary>\n            Sets a matrix property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialColor(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a color value from the material property table.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The color if it exists. If not, the default Color4D value is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialFloatArray(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32,System.UInt32)\">\n            <summary>\n            Retrieves an array of float values with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <param name=\"floatCount\">The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than\n            the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array).</param>\n            <returns>The float array, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialIntegerArray(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32,System.UInt32)\">\n            <summary>\n            Retrieves an array of integer values with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <param name=\"intCount\">The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than\n            the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array).</param>\n            <returns>The integer array, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialProperty(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a material property with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the property from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The material property, if found.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialString(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a string from the material property table.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The string, if it exists. If not, an empty string is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTextureCount(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType)\">\n            <summary>\n            Gets the number of textures contained in the material for a particular texture type.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture Type semantic</param>\n            <returns>The number of textures for the type.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTextureFilePath(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Gets the texture filepath contained in the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture type semantic</param>\n            <param name=\"index\">Texture index</param>\n            <returns>The texture filepath, if it exists. If not an empty string is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTexture(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Gets all values pertaining to a particular texture from a material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture type semantic</param>\n            <param name=\"index\">Texture index</param>\n            <returns>Returns the texture slot struct containing all the information.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetErrorString\">\n            <summary>\n            Gets the last error logged in Assimp.\n            </summary>\n            <returns>The last error message logged.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IsExtensionSupported(System.String)\">\n            <summary>\n            Checks whether the model format extension is supported by Assimp.\n            </summary>\n            <param name=\"extension\">Model format extension, e.g. \".3ds\"</param>\n            <returns>True if the format is supported, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetExtensionList\">\n            <summary>\n            Gets all the model format extensions that are currently supported by Assimp.\n            </summary>\n            <returns>Array of supported format extensions</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetImporterDescriptions\">\n            <summary>\n            Gets a collection of importer descriptions that detail metadata and feature support for each importer.\n            </summary>\n            <returns>Collection of importer descriptions</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMemoryRequirements(System.IntPtr)\">\n            <summary>\n            Gets the memory requirements of the scene.\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n            <returns>The memory information about the scene.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CreateQuaternionFromMatrix(Assimp.Quaternion@,Assimp.Matrix3x3@)\">\n            <summary>\n            Creates a quaternion from the 3x3 rotation matrix.\n            </summary>\n            <param name=\"quat\">Quaternion struct to fill</param>\n            <param name=\"mat\">Rotation matrix</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DecomposeMatrix(Assimp.Matrix4x4@,Assimp.Vector3D@,Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a 4x4 matrix into its scaling, rotation, and translation parts.\n            </summary>\n            <param name=\"mat\">4x4 Matrix to decompose</param>\n            <param name=\"scaling\">Scaling vector</param>\n            <param name=\"rotation\">Quaternion containing the rotation</param>\n            <param name=\"position\">Translation vector</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransposeMatrix4(Assimp.Matrix4x4@)\">\n            <summary>\n            Transposes the 4x4 matrix.\n            </summary>\n            <param name=\"mat\">Matrix to transpose</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransposeMatrix3(Assimp.Matrix3x3@)\">\n            <summary>\n            Transposes the 3x3 matrix.\n            </summary>\n            <param name=\"mat\">Matrix to transpose</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransformVecByMatrix3(Assimp.Vector3D@,Assimp.Matrix3x3@)\">\n            <summary>\n            Transforms the vector by the 3x3 rotation matrix.\n            </summary>\n            <param name=\"vec\">Vector to transform</param>\n            <param name=\"mat\">Rotation matrix</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransformVecByMatrix4(Assimp.Vector3D@,Assimp.Matrix4x4@)\">\n            <summary>\n            Transforms the vector by the 4x4 matrix.\n            </summary>\n            <param name=\"vec\">Vector to transform</param>\n            <param name=\"mat\">Matrix transformation</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.MultiplyMatrix4(Assimp.Matrix4x4@,Assimp.Matrix4x4@)\">\n            <summary>\n            Multiplies two 4x4 matrices. The destination matrix receives the result.\n            </summary>\n            <param name=\"dst\">First input matrix and is also the Matrix to receive the result</param>\n            <param name=\"src\">Second input matrix, to be multiplied with \"dst\".</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.MultiplyMatrix3(Assimp.Matrix3x3@,Assimp.Matrix3x3@)\">\n            <summary>\n            Multiplies two 3x3 matrices. The destination matrix receives the result.\n            </summary>\n            <param name=\"dst\">First input matrix and is also the Matrix to receive the result</param>\n            <param name=\"src\">Second input matrix, to be multiplied with \"dst\".</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IdentityMatrix3(Assimp.Matrix3x3@)\">\n            <summary>\n            Creates a 3x3 identity matrix.\n            </summary>\n            <param name=\"mat\">Matrix to hold the identity</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IdentityMatrix4(Assimp.Matrix4x4@)\">\n            <summary>\n            Creates a 4x4 identity matrix.\n            </summary>\n            <param name=\"mat\">Matrix to hold the identity</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetLegalString\">\n            <summary>\n            Gets the Assimp legal info.\n            </summary>\n            <returns>String containing Assimp legal info.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionMinor\">\n            <summary>\n            Gets the native Assimp DLL's minor version number.\n            </summary>\n            <returns>Assimp minor version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionMajor\">\n            <summary>\n            Gets the native Assimp DLL's major version number.\n            </summary>\n            <returns>Assimp major version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionRevision\">\n            <summary>\n            Gets the native Assimp DLL's revision version number.\n            </summary>\n            <returns>Assimp revision version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersion\">\n            <summary>\n            Gets the native Assimp DLL's current version number as \"major.minor.revision\" string. This is the\n            version of Assimp that this wrapper is currently using.\n            </summary>\n            <returns>Unmanaged DLL version</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionAsVersion\">\n            <summary>\n            Gets the native Assimp DLL's current version number as a .NET version object.\n            </summary>\n            <returns>Unmanaged DLL version</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetCompileFlags\">\n            <summary>\n            Get the compilation flags that describe how the native Assimp DLL was compiled.\n            </summary>\n            <returns>Compilation flags</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary.FunctionNames\">\n            <summary>\n            Defines all the unmanaged assimp C-function names.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary.Functions\">\n            <summary>\n            Defines all of the delegates that represent the unmanaged assimp functions.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.Platform\">\n            <summary>\n            Enumerates supported platforms.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Windows\">\n            <summary>\n            Windows platform.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Linux\">\n            <summary>\n            Linux platform.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Mac\">\n            <summary>\n            Mac platform.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedFunctionNameAttribute\">\n            <summary>\n            An attribute that represents the name of an unmanaged function to import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.UnmanagedFunctionName\">\n            <summary>\n            Name of the unmanaged function.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.#ctor(System.String)\">\n            <summary>\n            Constructs a new <see cref=\"P:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.UnmanagedFunctionName\"/>.\n            </summary>\n            <param name=\"unmanagedFunctionName\">Name of the function.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedLibrary\">\n            <summary>\n            Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list\n            of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load\n            unmanaged libraries.\n            </summary>\n        </member>\n        <member name=\"E:Assimp.Unmanaged.UnmanagedLibrary.LibraryLoaded\">\n            <summary>\n            Occurs when the unmanaged library is loaded.\n            </summary>\n        </member>\n        <member name=\"E:Assimp.Unmanaged.UnmanagedLibrary.LibraryFreed\">\n            <summary>\n            Occurs when the unmanaged library is freed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.IsLibraryLoaded\">\n            <summary>\n            Queries if the unmanaged library has been loaded or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.DefaultLibraryName\">\n            <summary>\n            Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional\n            names can be set in the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/> (e.g. to load versioned DLLs)\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.LibraryPath\">\n            <summary>\n            Gets the path to the unmanaged library DLL that is currently loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.Resolver\">\n            <summary>\n            Gets the resolver used to find the unmanaged library DLL when loading.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.ThrowOnLoadFailure\">\n            <summary>\n            Gets or sets whether an <see cref=\"T:Assimp.AssimpException\"/> is thrown if the unmanaged DLL fails to load for whatever reason. By\n            default this is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.Is64Bit\">\n            <summary>\n            Queries if the OS is 64-bit, if false then it is 32-bit.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.#ctor(System.String,System.Type[])\">\n            <summary>\n            Constructs a new <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/>.\n            </summary>\n            <param name=\"defaultName\">Default name (NOT path) of the unmanaged library.</param>\n            <param name=\"unmanagedFunctionDelegateTypes\">Delegate types to instantiate and load.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.GetPlatform\">\n            <summary>\n            Gets an enum representing the current OS that is application is executing on.\n            </summary>\n            <returns>Platform enumeration.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary\">\n            <summary>\n            Loads the unmanaged library using the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/>.\n            </summary>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(System.String,System.String)\">\n            <summary>\n            Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness.\n            </summary>\n            <param name=\"lib32Path\">Path to the 32-bit DLL</param>\n            <param name=\"lib64Path\">Path to the 64-bit DLL</param>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(System.String)\">\n            <summary>\n            Loads the unmanaged library using the supplied path.\n            </summary>\n            <param name=\"libPath\">Path to the unmanaged DLL.</param>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.FreeLibrary\">\n            <summary>\n            Frees the unmanaged library that is currently loaded.\n            </summary>\n            <returns>True if the library was sucessfully freed.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.GetFunction``1(System.String)\">\n            <summary>\n            Gets a delegate based on the unmanaged function name.\n            </summary>\n            <typeparam name=\"T\">Type of delegate.</typeparam>\n            <param name=\"funcName\">Name of unmanaged function that is exported by the library.</param>\n            <returns>The delegate, or null if not found.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadIfNotLoaded\">\n            <summary>\n            If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library\n            from the default path. This function is thread safe.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.OnLibraryLoaded\">\n            <summary>\n            Called when the library is loaded.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.OnLibraryFreed\">\n            <summary>\n            Called when the library is freed.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\">\n            <summary>\n            Resolves unmanaged DLLs for <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/>. The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs),\n            an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/>\n            for the search strategy.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibraryResolver.Platform\">\n            <summary>\n            Gets the platform that the application is running on. \n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.#ctor(Assimp.Unmanaged.Platform)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/> class.\n            </summary>\n            <param name=\"platformHint\">Platform we're resolving binaries for.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames32(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames64(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths32(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths64(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName32(System.String)\">\n            <summary>\n            Sets an override 32-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName64(System.String)\">\n            <summary>\n            Sets an override 64-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName(System.String)\">\n            <summary>\n            Sets an override 32-bit and 64-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\">\n            <summary>\n            Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback\n            library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try\n            and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution:\n            <para>\n            <list type=\"number\">\n            <item><description>Search user-specified probing paths.</description></item>\n            <item><description>Search {AppBaseDirectory}/runtimes/{RID}/native/.</description></item>\n            <item><description>Search {AppBaseDirectory}/.</description></item>\n            <item><description>Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/.</description></item>\n            </list>\n            </para>\n            <para>\n            The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID\n            is the Runtime Identifier based on the platform/architecture, see also <a href=\"https://docs.microsoft.com/en-us/dotnet/core/rid-catalog\">Microsoft's RID Catalog</a>.\n            </para>\n            </summary>\n            <param name=\"libName\">Name of the library to attempt to resolve.</param>\n            <returns>Full file path to the library, or the file name if not found (e.g. \"libXYZ.so\").</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiScene\">\n            <summary>\n            Represents an aiScene struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Flags\">\n            <summary>\n            unsigned int, flags about the state of the scene\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.RootNode\">\n            <summary>\n            aiNode*, root node of the scenegraph.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumMeshes\">\n            <summary>\n            Number of meshes contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Meshes\">\n            <summary>\n            aiMesh**, meshes in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumMaterials\">\n            <summary>\n            Number of materials contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Materials\">\n            <summary>\n            aiMaterial**, materials in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumAnimations\">\n            <summary>\n            Number of animations contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Animations\">\n            <summary>\n            aiAnimation**, animations in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumTextures\">\n            <summary>\n            Number of embedded textures contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Textures\">\n            <summary>\n            aiTexture**, textures in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumLights\">\n            <summary>\n            Number of lights contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Lights\">\n            <summary>\n            aiLight**, lights in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumCameras\">\n            <summary>\n            Number of cameras contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Cameras\">\n            <summary>\n            aiCamera**, cameras in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.PrivateData\">\n            <summary>\n            void*, Private data do not touch!\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiNode\">\n            <summary>\n            Represents an aiNode struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Name\">\n            <summary>\n            Name of the node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Transformation\">\n            <summary>\n            Node's transform relative to its parent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Parent\">\n            <summary>\n            aiNode*, node's parent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.NumChildren\">\n            <summary>\n            Number of children the node owns.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Children\">\n            <summary>\n            aiNode**, array of nodes this node owns.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.NumMeshes\">\n            <summary>\n            Number of meshes referenced by this node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Meshes\">\n            <summary>\n            unsigned int*, array of mesh indices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.MetaData\">\n            <summary>\n            aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMetadataEntry\">\n            <summary>\n            Represents an aiMetadataEntry struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadataEntry.DataType\">\n            <summary>\n            Type of metadata.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadataEntry.Data\">\n            <summary>\n            Pointer to data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMetadata\">\n            <summary>\n            Represents an aiMetadata struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.NumProperties\">\n            <summary>\n            Length of the Keys and Values arrays.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.keys\">\n            <summary>\n            aiString*, array of keys. May not be NULL. Each entry must exist.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.Values\">\n            <summary>\n            aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMesh\">\n            <summary>\n            Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.PrimitiveTypes\">\n            <summary>\n            unsigned int, bitwise flag detailing types of primitives contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumVertices\">\n            <summary>\n            Number of vertices in the mesh, denotes length of\n            -all- per-vertex arrays.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumFaces\">\n            <summary>\n            Number of faces in the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Vertices\">\n            <summary>\n            aiVector3D*, array of positions.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Normals\">\n            <summary>\n            aiVector3D*, array of normals.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Tangents\">\n            <summary>\n            aiVector3D*, array of tangents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.BiTangents\">\n            <summary>\n            aiVector3D*, array of bitangents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Colors\">\n            <summary>\n            aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.TextureCoords\">\n            <summary>\n            aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumUVComponents\">\n            <summary>\n            unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example.\n            Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Faces\">\n            <summary>\n            aiFace*, array of faces.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumBones\">\n            <summary>\n            Number of bones in the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Bones\">\n            <summary>\n            aiBone**, array of bones.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.MaterialIndex\">\n            <summary>\n            Material index referencing the material in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Name\">\n            <summary>\n            Optional name of the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumAnimMeshes\">\n            <summary>\n            Number of attachment meshes. NOT CURRENTLY IN USE.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.AnimMeshes\">\n            <summary>\n            aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.MorphMethod\">\n            <summary>\n            unsigned int, method of morphing when anim meshes are specified.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiTexture\">\n            <summary>\n            Represents an aiTexture struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Width\">\n            <summary>\n            Width of the texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Height\">\n            <summary>\n            Height of the texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.FormatHint\">\n            <summary>\n            sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that\n            maps to one byte. 8 for string + 1 for terminator.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Data\">\n            <summary>\n            aiTexel*, array of texel data.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.SetFormatHint(System.String)\">\n            <summary>\n            Sets the format hint.\n            </summary>\n            <param name=\"formatHint\">Format hint - must be 3 characters or less</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.GetFormatHint\">\n            <summary>\n            Gets the format hint.\n            </summary>\n            <returns>The format hint</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.GetFormatHint(Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref.\n            </summary>\n            <param name=\"aiTex\">AiTexture</param>\n            <returns>The format hint</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFace\">\n            <summary>\n            Represents an aiFace struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFace.NumIndices\">\n            <summary>\n            Number of indices in the face.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFace.Indices\">\n            <summary>\n            unsigned int*, array of indices.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiBone\">\n            <summary>\n            Represents an aiBone struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Name\">\n            <summary>\n            Name of the bone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.NumWeights\">\n            <summary>\n            Number of weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Weights\">\n            <summary>\n            VertexWeight*, array of vertex weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.OffsetMatrix\">\n            <summary>\n            Matrix that transforms the vertex from mesh to bone space in bind pose\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMaterialProperty\">\n            <summary>\n            Represents an aiMaterialProperty struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Key\">\n            <summary>\n            Name of the property (key).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Semantic\">\n            <summary>\n            Textures: Specifies texture usage. None texture properties\n            have this zero (or None).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Index\">\n            <summary>\n            Textures: Specifies the index of the texture. For non-texture properties\n            this is always zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.DataLength\">\n            <summary>\n            Size of the buffer data in bytes. This value may not be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Type\">\n            <summary>\n            Type of value contained in the buffer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Data\">\n            <summary>\n            char*, byte buffer to hold the property's value.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMaterial\">\n            <summary>\n            Represents an aiMaterial struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.Properties\">\n            <summary>\n            aiMaterialProperty**, array of material properties.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.NumProperties\">\n            <summary>\n            Number of key-value properties.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.NumAllocated\">\n            <summary>\n            Storage allocated for key-value properties.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiNodeAnim\">\n            <summary>\n            Represents an aiNodeAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NodeName\">\n            <summary>\n            Name of the node affected by the animation. The node must exist\n            and be unique.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumPositionKeys\">\n            <summary>\n            Number of position keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.PositionKeys\">\n            <summary>\n            VectorKey*, position keys of this animation channel. Positions\n            are 3D vectors and are accompanied by at least one scaling and one rotation key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumRotationKeys\">\n            <summary>\n            The number of rotation keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.RotationKeys\">\n            <summary>\n            QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions).\n            If there are rotation keys there will be at least one scaling and one position key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumScalingKeys\">\n            <summary>\n            Number of scaling keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.ScalingKeys\">\n            <summary>\n            VectorKey*, scaling keys of this animation channel. Scalings are specified as a\n            3D vector, and if there are scaling keys, there will at least be one position\n            and one rotation key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.Prestate\">\n            <summary>\n            Defines how the animation behaves before the first key is encountered.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.PostState\">\n            <summary>\n            Defines how the animation behaves after the last key was processed.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshAnim\">\n            <summary>\n            Represents an aiMeshAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.Name\">\n            <summary>\n            Name of the mesh to be animated. Empty string not allowed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.NumKeys\">\n            <summary>\n            Number of keys, there is at least one.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.Keys\">\n            <summary>\n            aiMeshkey*, the key frames of the animation. There must exist at least one.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshMorphKey\">\n            <summary>\n            Represents an aiMeshMorphKey struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Values\">\n            <summary>\n            unsigned int*, values at the time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Weights\">\n            <summary>\n            double*, weights at the time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.NumValuesAndWeights\">\n            <summary>\n            unsigned int, the number of values/weights.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshMorphAnim\">\n            <summary>\n            Represents an aiMeshMorphAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.Name\">\n            <summary>\n            aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely,\n            the name can basically serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.NumKeys\">\n            <summary>\n            unsigned int, number of key frames. Must be at least one.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.Keys\">\n            <summary>\n            aiMeshMorphKey*, key frames of the animation.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiAnimation\">\n            <summary>\n            Represents an aiAnimation struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Name\">\n            <summary>\n            Name of the animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Duration\">\n            <summary>\n            Duration of the animation in ticks.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.TicksPerSecond\">\n            <summary>\n            Ticks per second, 0 if not specified in imported file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumChannels\">\n            <summary>\n            Number of bone animation channels, each channel affects a single node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Channels\">\n            <summary>\n            aiNodeAnim**, node animation channels. Each channel affects a single node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumMeshChannels\">\n            <summary>\n            Number of mesh animation channels. Each channel affects a single mesh and defines\n            vertex-based animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.MeshChannels\">\n            <summary>\n            aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. \n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumMeshMorphChannels\">\n            <summary>\n            Number of mesh morph animation channels. Each channel affects a single mesh and defines\n            morphing animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.MeshMorphChannels\">\n            <summary>\n            aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. \n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLight\">\n            <summary>\n            Represents an aiLight struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Name\">\n            <summary>\n            Name of the light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Type\">\n            <summary>\n            Type of light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Position\">\n            <summary>\n            Position of the light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Direction\">\n            <summary>\n            Direction of the spot/directional light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Up\">\n            <summary>\n            Up direction of the light source in space. Undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationConstant\">\n            <summary>\n            Attenuation constant value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationLinear\">\n            <summary>\n            Attenuation linear value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationQuadratic\">\n            <summary>\n            Attenuation quadratic value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorDiffuse\">\n            <summary>\n            Diffuse color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorSpecular\">\n            <summary>\n            Specular color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorAmbient\">\n            <summary>\n            Ambient color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AngleInnerCone\">\n            <summary>\n            Spot light inner angle.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AngleOuterCone\">\n            <summary>\n            Spot light outer angle.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AreaSize\">\n            <summary>\n            Width (X) and Height (Y) of the area that represents an <see cref=\"F:Assimp.LightSourceType.Area\"/> light.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiCamera\">\n            <summary>\n            Represents an aiCamera struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Name\">\n            <summary>\n            Name of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Position\">\n            <summary>\n            Position of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Up\">\n            <summary>\n            Up vector of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.LookAt\">\n            <summary>\n            Viewing direction of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.HorizontalFOV\">\n            <summary>\n            Field Of View of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.ClipPlaneNear\">\n            <summary>\n            Near clip plane distance.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.ClipPlaneFar\">\n            <summary>\n            Far clip plane distance.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Aspect\">\n            <summary>\n            The Aspect ratio.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiString\">\n            <summary>\n            Represents an aiString struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiString.Length\">\n            <summary>\n            Byte length of the UTF-8 string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiString.Data\">\n            <summary>\n            Actual string data.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Unmanaged.AiString\"/> struct.\n            </summary>\n            <param name=\"data\">The string data</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.GetString(Assimp.Unmanaged.AiString@)\">\n            <summary>\n            Convienence method for getting the AiString string - if the length is not greater than zero, it returns\n            an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref.\n            </summary>\n            <param name=\"aiStr\">AiString</param>\n            <returns>AiString string data</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.GetString\">\n            <summary>\n            Convienence method for getting the AiString string - if the length is not greater than zero, it returns\n            an empty string rather than garbage.\n            </summary>\n            <returns>AiString string data</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.SetString(System.String)\">\n            <summary>\n            Convienence method for setting the AiString string (and length).\n            </summary>\n            <param name=\"data\">String data to set</param>\n            <returns>True if the operation was successful, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.ToString\">\n            <summary>\n            Returns the fully qualified type name of this instance.\n            </summary>\n            <returns>A <see cref=\"T:System.String\" /> containing a fully qualified type name.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLogStream\">\n            <summary>\n            Represents a log stream, which receives all log messages and streams them somewhere.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLogStream.Callback\">\n            <summary>\n            Function pointer that gets called when a message is to be logged.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLogStream.UserData\">\n            <summary>\n            char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMemoryInfo\">\n            <summary>\n            Represents the memory requirements for the different components of an imported\n            scene. All sizes in in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Textures\">\n            <summary>\n            Size of the storage allocated for texture data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Materials\">\n            <summary>\n            Size of the storage allocated for material data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Meshes\">\n            <summary>\n            Size of the storage allocated for mesh data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Nodes\">\n            <summary>\n            Size of the storage allocated for node data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Animations\">\n            <summary>\n            Size of the storage allocated for animation data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Cameras\">\n            <summary>\n            Size of the storage allocated for camera data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Lights\">\n            <summary>\n            Size of the storage allocated for light data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Total\">\n            <summary>\n            Total storage allocated for the imported scene, in bytes.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiAnimMesh\">\n            <summary>\n            Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Vertices\">\n            <summary>\n            aiVector3D*, replacement position array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Normals\">\n            <summary>\n            aiVector3D*, replacement normal array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Tangents\">\n            <summary>\n            aiVector3D*, replacement tangent array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.BiTangents\">\n            <summary>\n            aiVector3D*, replacement bitangent array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Colors\">\n            <summary>\n            aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.TextureCoords\">\n            <summary>\n            aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.NumVertices\">\n            <summary>\n            unsigned int, number of vertices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Weight\">\n            <summary>\n            float, weight of the AnimMesh.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiImporterDesc\">\n            <summary>\n            Describes a variety of information about an importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Name\">\n            <summary>\n            char*, full name of the importer (e.g. Blender3D Importer)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Author\">\n            <summary>\n            char*, original author (blank if unknown or assimp team)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Maintainer\">\n            <summary>\n            char*, current maintainer, left blank if the author maintains.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Comments\">\n            <summary>\n            char*, implementation comments. E.g. unimplemented features.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Flags\">\n            <summary>\n            unsigned int, features supported by the importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MinMajor\">\n            <summary>\n            unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MinMinor\">\n            <summary>\n            unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MaxMajor\">\n            <summary>\n            unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MaxMinor\">\n            <summary>\n            unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.FileExtensions\">\n            <summary>\n            char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. \"xml dae\").\n            Multiple importers may respond to the same file extension, assim\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiExportFormatDesc\">\n            <summary>\n            Describes a file format which Assimp can export to.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.FormatId\">\n            <summary>\n            char*, a short string ID to uniquely identify the export format. e.g. \"collada\" or \"obj\"\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.Description\">\n            <summary>\n            char*, a short description of the file format to present to users.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.FileExtension\">\n            <summary>\n            char*, a recommended file extension of the exported file in lower case.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiExportDataBlob\">\n            <summary>\n            Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested\n            blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Size\">\n            <summary>\n            size_t, size of the data in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Data\">\n            <summary>\n            void*, the data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Name\">\n            <summary>\n            AiString, name of the blob.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.NextBlob\">\n            <summary>\n            aiExportDataBlob*, pointer to the next blob in the chain.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileIO\">\n            <summary>\n            Contains callbacks to implement a custom file system to open and close files.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.OpenProc\">\n            <summary>\n            Function pointer to open a new file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.CloseProc\">\n            <summary>\n            Function pointer used to close an existing file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.UserData\">\n            <summary>\n            Char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFile\">\n            <summary>\n            Contains callbacks to read and write to a file opened by a custom file system.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.ReadProc\">\n            <summary>\n            Function pointer to read from a file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.WriteProc\">\n            <summary>\n            Function pointer to write to a file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.TellProc\">\n            <summary>\n            Function pointer to retrieve the current position of the file cursor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.FileSizeProc\">\n            <summary>\n            Function pointer to retrieve the size of the file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.SeekProc\">\n            <summary>\n            Function pointer to set the current position of the file cursor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.FlushProc\">\n            <summary>\n            Function pointer to flush the file contents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.UserData\">\n            <summary>\n            Char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLogStreamCallback\">\n            <summary>\n            Callback delegate for Assimp's LogStream.\n            </summary>\n            <param name=\"msg\">Log message</param>\n            <param name=\"userData\">char* pointer to user data that is passed to the callback</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileWriteProc\">\n            <summary>\n            Callback delegate for a custom file system, to write to a file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance</param>\n            <param name=\"dataToWrite\">Char* pointer to data to write (casted from a void*)</param>\n            <param name=\"sizeOfElemInBytes\">Size of a single element in bytes to write</param>\n            <param name=\"numElements\">Number of elements to write</param>\n            <returns>Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileReadProc\">\n            <summary>\n            Callback delegate for a custom file system, to read from a file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n            <param name=\"dataToRead\">Char* pointer that will store the data read (casted from a void*)</param>\n            <param name=\"sizeOfElemInBytes\">Size of a single element in bytes to read</param>\n            <param name=\"numElements\">Number of elements to read</param>\n            <returns>Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileTellProc\">\n            <summary>\n            Callback delegate for a custom file system, to tell offset/size information about the file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n            <returns>Returns the current file cursor or the file size in bytes. May be -1 if an error has occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileFlushProc\">\n            <summary>\n            Callback delegate for a custom file system, to flush the contents of the file to the disk.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileSeek\">\n            <summary>\n            Callback delegate for a custom file system, to set the current position of the file cursor.\n            </summary>\n            <param name=\"file\">Pointer to An AiFile instance.</param>\n            <param name=\"offset\">Offset from the origin.</param>\n            <param name=\"seekOrigin\">Position used as a reference</param>\n            <returns>Returns success, if successful</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileOpenProc\">\n            <summary>\n            Callback delegate for a custom file system, to open a given file and create a new AiFile instance.\n            </summary>\n            <param name=\"fileIO\">Pointer to an AiFileIO instance.</param>\n            <param name=\"pathToFile\">Path to the target file</param>\n            <param name=\"mode\">Read-write permissions to request</param>\n            <returns>Pointer to an AiFile instance.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileCloseProc\">\n            <summary>\n            Callback delegate for a custom file system, to close a given file and free its memory.\n            </summary>\n            <param name=\"fileIO\">Pointer to an AiFileIO instance.</param>\n            <param name=\"file\">Pointer to an AiFile instance that will be closed.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshColorArray\">\n            <summary>\n            Fixed length array for representing the color channels of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshColorArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshColorArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshTextureCoordinateArray\">\n            <summary>\n            Fixed length array for representing the texture coordinate channels of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshTextureCoordinateArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshTextureCoordinateArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshUVComponentArray\">\n            <summary>\n            Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshUVComponentArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshUVComponentArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.UVTransform\">\n            <summary>\n            Defines how an UV channel is transformed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Translation\">\n            <summary>\n            Translation on the U and V axes. Default is 0|0\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Scaling\">\n            <summary>\n            Scaling on the U and V axes. Default is 1|1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Rotation\">\n            <summary>\n            Rotation in counter-clockwise direction, specfied in\n            radians. The rotation center is 0.5f|0.5f and the\n            default value is zero.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Vector2D\">\n            <summary>\n            Represents a two-dimensional vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector2D.X\">\n            <summary>\n            X component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector2D.Y\">\n            <summary>\n            Y component\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Vector2D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of XY (index 0 access X, 1 access Y. If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.#ctor(System.Single,System.Single)\">\n            <summary>\n            Constructs a new Vector2D.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.#ctor(System.Single)\">\n            <summary>\n            Constructs a new Vector2D with both components\n            set the same value.\n            </summary>\n            <param name=\"value\">Value to set both X and Y to</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Set(System.Single,System.Single)\">\n            <summary>\n            Sets the X and Y values.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Length\">\n            <summary>\n            Calculates the length of the vector.\n            </summary>\n            <returns>Vector's length</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.LengthSquared\">\n            <summary>\n            Calculates the length of the vector squared.\n            </summary>\n            <returns>Vector's length squared</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Normalize\">\n            <summary>\n            Normalizes the vector where all components add to one (Unit Vector), but preserves\n            the direction that the vector represents.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Negate\">\n            <summary>\n            Negates the vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Addition(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Adds two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Added vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Subtraction(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Subtracts the second vector from the first vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Multiplies two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Multiplied vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(System.Single,Assimp.Vector2D)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source vector</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Division(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Divides the first vector by the second vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Division(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Divides the vector by a divisor value.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_UnaryNegation(Assimp.Vector2D)\">\n            <summary>\n            Negates the vector.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <returns>Negated vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Equality(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Tests equality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Inequality(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Tests inequality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Equals(Assimp.Vector2D)\">\n            <summary>\n            Tests equality between this vector and another vector.\n            </summary>\n            <param name=\"other\">Vector to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Vector3D\">\n            <summary>\n            Represents a three-dimensional vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.X\">\n            <summary>\n            X component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.Y\">\n            <summary>\n            Y component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.Z\">\n            <summary>\n            Z component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Vector3D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of XYZ (index 0 access X, 1 access Y, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Vector3D.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Constructs a new Vector3D.\n            </summary>\n            <param name=\"value\">Vector2D containing the X, Y values</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(System.Single)\">\n            <summary>\n            Constructs a new Vector3D where each component is set\n            to the same value.\n            </summary>\n            <param name=\"value\">Value to set X, Y, and Z to</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Set(System.Single,System.Single,System.Single)\">\n            <summary>\n            Sets the X, Y, and Z values.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Length\">\n            <summary>\n            Calculates the length of the vector.\n            </summary>\n            <returns>Vector's length</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.LengthSquared\">\n            <summary>\n            Calculates the length of the vector squared.\n            </summary>\n            <returns>Vector's length squared</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Normalize\">\n            <summary>\n            Normalizes the vector where all components add to one (Unit Vector), but preserves\n            the direction that the vector represents.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Negate\">\n            <summary>\n            Negates the vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Cross(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Calculates the cross product of two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Dot(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Calculates the dot product of two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Addition(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Adds two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Added vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Subtraction(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Subtracts the second vector from the first vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Multiplies two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Multiplied vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source vector</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Matrix3x3,Assimp.Vector3D)\">\n            <summary>\n            Transforms this vector by a 3x3 matrix. This \"post-multiplies\" the two.\n            </summary>\n            <param name=\"matrix\">Source matrix</param>\n            <param name=\"vector\">Source vector</param>\n            <returns>Transformed vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Matrix4x4,Assimp.Vector3D)\">\n            <summary>\n            Transforms this vector by a 4x4 matrix. This \"post-multiplies\" the two.\n            </summary>\n            <param name=\"matrix\">Source matrix</param>\n            <param name=\"vector\">Source vector</param>\n            <returns>Transformed vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Division(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Divides the first vector by the second vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Division(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Divides the vector by a divisor value.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_UnaryNegation(Assimp.Vector3D)\">\n            <summary>\n            Negates the vector.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <returns>Negated vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Equality(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Tests equality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Inequality(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Tests inequality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Equals(Assimp.Vector3D)\">\n            <summary>\n            Tests equality between this vector and another vector.\n            </summary>\n            <param name=\"other\">Vector to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.VectorKey\">\n            <summary>\n            Time-value pair specifying a 3D vector for a given time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VectorKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VectorKey.Value\">\n            <summary>\n            The 3D vector value of this key.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.VectorKey.#ctor(System.Double,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new VectorKey.\n            </summary>\n            <param name=\"time\">The time of this key.</param>\n            <param name=\"vector\">The 3D vector value of this key.</param>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_Equality(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's 3D vectors are the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_Inequality(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's 3D vectors are not the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_LessThan(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_GreaterThan(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.Equals(Assimp.VectorKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their 3D vectors are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.VertexWeight\">\n            <summary>\n            Represents a single influence of a bone on a vertex.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VertexWeight.VertexID\">\n            <summary>\n            Index of the vertex which is influenced by the bone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VertexWeight.Weight\">\n            <summary>\n            Strength of the influence in range of (0...1). All influences\n            from all bones at one vertex amounts to 1.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.VertexWeight.#ctor(System.Int32,System.Single)\">\n            <summary>\n            Constructs a new VertexWeight.\n            </summary>\n            <param name=\"vertID\">Index of the vertex.</param>\n            <param name=\"weight\">Weight of the influence.</param>\n        </member>\n        <member name=\"M:Assimp.VertexWeight.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.MemoryInterop\">\n            <summary>\n            Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or\n            replaces the entire method body. Recommended types to use are generally blittable structs.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.As``2(``0@)\">\n            <summary>\n            Casts the by-ref value from one type to another.\n            </summary>\n            <typeparam name=\"TFrom\">Type to cast from.</typeparam>\n            <typeparam name=\"TTo\">Type to cast to.</typeparam>\n            <param name=\"source\">By-ref value.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsReadonly``2(``0@)\">\n            <summary>\n            Casts the readonly by-ref value from one type to another.\n            </summary>\n            <typeparam name=\"TFrom\">Type to cast from.</typeparam>\n            <typeparam name=\"TTo\">Type to cast to.</typeparam>\n            <param name=\"source\">By-ref value.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsRef``1(System.IntPtr)\">\n            <summary>\n            Casts the pointer to a by-ref value of the specified type.\n            </summary>\n            <typeparam name=\"T\">Type to cast to.</typeparam>\n            <param name=\"pSrc\">Pointer.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteArray``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDest\">Pointer to memory location to receive the data.</param>\n            <param name=\"data\">Array containing data to write.</param>\n            <param name=\"startIndex\">Zero-based index to start reading data from the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteArrayUnaligned``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDest\">Pointer to memory location to write the data.</param>\n            <param name=\"data\">Array containing data to write.</param>\n            <param name=\"startIndex\">Zero-based index to start reading data from the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadArray``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location to read the data.</param>\n            <param name=\"data\">Array to store the copied data.</param>\n            <param name=\"startIndex\">Zero-based index to start writing data to in the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadArrayUnaligned``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location to read the data.</param>\n            <param name=\"data\">Array to store the copied data.</param>\n            <param name=\"startIndex\">Zero-based index to start writing data to in the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.SizeOfInline``1\">\n            <summary>\n            Computes the size of the type (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <returns>Size of the type in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsPointerInline``1(``0@)\">\n            <summary>\n            Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"src\">Ref to a value.</param>\n            <returns>Pointer to the memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsPointerReadonlyInline``1(``0@)\">\n            <summary>\n            Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"src\">Ref to a value.</param>\n            <returns>Pointer to the memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteInline``1(System.Void*,``0@)\">\n            <summary>\n            Writes a single element to the memory location (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDst\">Pointer to memory location.</param>\n            <param name=\"src\">Value to be written.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteUnalignedInline``1(System.Void*,``0@)\">\n            <summary>\n            Writes a single element to the memory location (inlined, unaligned copy).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDst\">Pointer to memory location.</param>\n            <param name=\"src\">Value to be written.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadInline``1(System.Void*)\">\n            <summary>\n            Reads a single element from the memory location (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location.</param>\n            <returns>Value read.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadUnalignedInline``1(System.Void*)\">\n            <summary>\n            Reads a single element from the memory location (inlined, unaligned copy).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location.</param>\n            <returns>Value read.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemCopyInline(System.Void*,System.Void*,System.UInt32)\">\n            <summary>\n            Copies the number of bytes from one pointer to the other (inlined).\n            </summary>\n            <param name=\"pDest\">Pointer to the destination memory location.</param>\n            <param name=\"pSrc\">Pointer to the source memory location</param>\n            <param name=\"byteCount\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemCopyUnalignedInline(System.Void*,System.Void*,System.UInt32)\">\n            <summary>\n            Copies the number of bytes from one pointer to the other (inlined, unaligned copy).\n            </summary>\n            <param name=\"pDest\">Pointer to the destination memory location.</param>\n            <param name=\"pSrc\">Pointer to the source memory location</param>\n            <param name=\"byteCount\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemSetInline(System.Void*,System.Byte,System.UInt32)\">\n            <summary>\n            Clears the memory to a specified value (inlined).\n            </summary>\n            <param name=\"ptr\">Pointer to the memory location.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"byteCount\">Number of bytes to to set.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemSetUnalignedInline(System.Void*,System.Byte,System.UInt32)\">\n            <summary>\n            Clears the memory to a specified value (inlined, unaligned init).\n            </summary>\n            <param name=\"ptr\">Pointer to the memory location.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"byteCount\">Number of bytes to to set.</param>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "ThirdParty/AssimpNet/4.1.0/lib/netstandard1.3/AssimpNet.xml",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>AssimpNet</name>\n    </assembly>\n    <members>\n        <member name=\"T:Assimp.Animation\">\n            <summary>\n            An animation consists of keyframe data for a number of nodes. For\n            each node affected by the animation, a separate series of data is given.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.Name\">\n            <summary>\n            Gets or sets the name of the animation. If the modeling package the\n            data was exported from only supports a single animation channel, this\n            name is usually empty.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.DurationInTicks\">\n            <summary>\n            Gets or sets the duration of the animation in number of ticks.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.TicksPerSecond\">\n            <summary>\n            Gets or sets the number of ticks per second. It may be zero\n            if it is not specified in the imported file.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.HasNodeAnimations\">\n            <summary>\n            Gets if the animation has node animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.NodeAnimationChannelCount\">\n            <summary>\n            Gets the number of node animation channels where each channel\n            affects a single node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.NodeAnimationChannels\">\n            <summary>\n            Gets the node animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.HasMeshAnimations\">\n            <summary>\n            Gets if the animation has mesh animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshAnimationChannelCount\">\n            <summary>\n            Gets the number of mesh animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshMorphAnimationChannelCount\">\n            <summary>\n            Gets the number of mesh morph animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshAnimationChannels\">\n            <summary>\n            Gets the mesh animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshMorphAnimationChannels\">\n            <summary>\n            Gets the mesh morph animation channels.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Animation.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Animation\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#ToNative(System.IntPtr,Assimp.Unmanaged.AiAnimation@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#FromNative(Assimp.Unmanaged.AiAnimation@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Animation.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.AssimpContext\">\n            <summary>\n            Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion\n            functionality is offered to bypass loading model data into managed memory.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.IsDisposed\">\n            <summary>\n            Gets if the context has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.Scale\">\n            <summary>\n            Gets or sets the uniform scale for the model. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.XAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.YAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.ZAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.UsingCustomIOSystem\">\n            <summary>\n            Gets whether this context is using a user-defined IO system for file handling.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.PropertyConfigurations\">\n            <summary>\n            Gets the property configurations set to this context. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.AssimpContext\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFileFromStream(System.IO.Stream,System.String)\">\n            <summary>\n            Imports a model from the stream without running any post-process steps. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ImportFile\" family of functions.\n            </summary>\n            <param name=\"stream\">Stream to read from</param>\n            <param name=\"formatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful.</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFileFromStream(System.IO.Stream,Assimp.PostProcessSteps,System.String)\">\n            <summary>\n            Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory \n            used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ImportFile\" family of functions.\n            </summary>\n            <param name=\"stream\">Stream to read from</param>\n            <param name=\"postProcessFlags\">Post processing flags, if any</param>\n            <param name=\"formatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful.</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFile(System.String)\">\n            <summary>\n            Imports a model from the specified file without running any post-process steps. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp.\n            </summary>\n            <param name=\"file\">Full path to the file</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFile(System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Imports a model from the specified file. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp.\n            </summary>\n            <param name=\"file\">Full path to the file</param>\n            <param name=\"postProcessFlags\">Post processing flags, if any</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportFile(Assimp.Scene,System.String,System.String)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a file.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"fileName\">Path to the file.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <returns>True if the scene was exported successfully, false otherwise.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportFile(Assimp.Scene,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a file.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"fileName\">Path to the file.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <param name=\"preProcessing\">Preprocessing flags to apply to the model before it is exported.</param>\n            <returns>True if the scene was exported successfully, false otherwise.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportToBlob(Assimp.Scene,System.String)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a data blob.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <returns>The resulting data blob, or null if the export failed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportToBlob(Assimp.Scene,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a data blob.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <param name=\"preProcessing\">Preprocessing flags to apply to the model before it is exported.</param>\n            <returns>The resulting data blob, or null if the export failed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,Assimp.PostProcessSteps,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"importProcessSteps\">Post processing steps used for the import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,System.String)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,Assimp.PostProcessSteps,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"importProcessSteps\">Post processing steps used for the import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,Assimp.PostProcessSteps,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"importProcessSteps\">Post processing steps used for import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,Assimp.PostProcessSteps,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"importProcessSteps\">Post processing steps used for import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.SetIOSystem(Assimp.IOSystem)\">\n            <summary>\n            Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system\n            is used instead.\n            </summary>\n            <param name=\"ioSystem\">Custom file system implementation</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveIOSystem\">\n            <summary>\n            Removes the currently set custom file system implementation from the importer.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetSupportedExportFormats\">\n            <summary>\n            Gets the model formats that are supported for export by Assimp.\n            </summary>\n            <returns>Export formats supported</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetSupportedImportFormats\">\n            <summary>\n            Gets the model formats that are supported for import by Assimp.\n            </summary>\n            <returns>Import formats supported</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetImporterDescriptions\">\n            <summary>\n            Gets descriptions for each importer that assimp has registered.\n            </summary>\n            <returns>Descriptions of supported importers.</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetImporterDescriptionFor(System.String)\">\n            <summary>\n            Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension,\n            they are called in the order that they were registered.\n            </summary>\n            <param name=\"fileExtension\">File extension to query importer support for.</param>\n            <returns>Importer description or null if it does not exist.</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.IsImportFormatSupported(System.String)\">\n            <summary>\n            Checks if the format extension (e.g. \".dae\" or \".obj\") is supported for import.\n            </summary>\n            <param name=\"format\">Model format</param>\n            <returns>True if the format is supported, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.IsExportFormatSupported(System.String)\">\n            <summary>\n            Checks if the format extension (e.g. \".dae\" or \".obj\") is supported for export.\n            </summary>\n            <param name=\"format\">Model format</param>\n            <returns>True if the format is supported, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.SetConfig(Assimp.Configs.PropertyConfig)\">\n            <summary>\n            Sets a configuration property to the context. This is only used during import.\n            </summary>\n            <param name=\"config\">Config to set</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveConfig(System.String)\">\n            <summary>\n            Removes a set configuration property by name.\n            </summary>\n            <param name=\"configName\">Name of the config property</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveConfigs\">\n            <summary>\n            Removes all configuration properties from the context.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ContainsConfig(System.String)\">\n            <summary>\n            Checks if the context has a config set by the specified name.\n            </summary>\n            <param name=\"configName\">Name of the config property</param>\n            <returns>True if the config is present, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.Dispose\">\n            <summary>\n            Disposes of resources held by the context. These include IO systems still attached.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"T:Assimp.AssimpException\">\n            <summary>\n            AssimpNet general exception.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"msg\">The error message.</param>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"paramName\">Name of the param.</param>\n            <param name=\"msg\">The error message.</param>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String,System.Exception)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"msg\">The error message</param>\n            <param name=\"innerException\">The inner exception.</param>\n        </member>\n        <member name=\"T:Assimp.Bone\">\n            <summary>\n            Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame\n            hierarchy and by which it can be addressed by animations. In addition it has a number of\n            influences on vertices.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.Name\">\n            <summary>\n            Gets or sets the name of the bone.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.VertexWeightCount\">\n            <summary>\n            Gets the number of vertex influences the bone contains.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.HasVertexWeights\">\n            <summary>\n            Gets if the bone has vertex weights - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.VertexWeights\">\n            <summary>\n            Gets the vertex weights owned by the bone.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.OffsetMatrix\">\n            <summary>\n            Gets or sets the matrix that transforms from mesh space to bone space in bind pose.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Bone\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.#ctor(System.String,Assimp.Matrix3x3,Assimp.VertexWeight[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Bone\"/> class.\n            </summary>\n            <param name=\"name\">Name of the bone</param>\n            <param name=\"offsetMatrix\">Bone's offset matrix</param>\n            <param name=\"weights\">Vertex weights</param>\n        </member>\n        <member name=\"P:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#ToNative(System.IntPtr,Assimp.Unmanaged.AiBone@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#FromNative(Assimp.Unmanaged.AiBone@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Bone.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Camera\">\n            <summary>\n            Describes a right-handed camera in the scene. An important aspect is that\n            the camera itself is also part of the scenegraph, meaning any values such\n            as the direction vector are not *absolute*, they can be relative to the coordinate\n            system defined by the node which corresponds to the camera. This allows for camera\n            animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Name\">\n            <summary>\n            Gets or sets the name of the camera. This corresponds to a node in the\n            scenegraph with the same name. This node specifies the position of the\n            camera in the scene hierarchy and can be animated.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Position\">\n            <summary>\n            Gets or sets the position of the camera relative to the coordinate space defined by\n            the corresponding node. THe default value is 0|0|0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Up\">\n            <summary>\n            Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the\n            corresponding node. The 'right' vector of the camera is the cross product of the up\n            and direction vectors. The default value is 0|1|0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Direction\">\n            <summary>\n            Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node.\n            The default value is 0|0|1.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.FieldOfview\">\n            <summary>\n            Gets or sets the half horizontal field of view angle, in radians. The FoV angle is\n            the angle between the center line of the screen and the left or right border. The default\n            value is 1/4PI.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ClipPlaneNear\">\n            <summary>\n            Gets or sets the distance of the near clipping plane from the camera. The value may not\n            be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ClipPlaneFar\">\n            <summary>\n            Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must\n            be further than the near clippling plane. The default value is 1000.0f. The ratio between\n            the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid\n            floating-point inaccuracies which can lead to z-fighting.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.AspectRatio\">\n            <summary>\n            Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical\n            values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file.\n            The default value is zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ViewMatrix\">\n            <summary>\n            Gets a right-handed view matrix.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Camera.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Camera\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#ToNative(System.IntPtr,Assimp.Unmanaged.AiCamera@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#FromNative(Assimp.Unmanaged.AiCamera@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Camera.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Color3D\">\n            <summary>\n            Represents a RGB color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Color3D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of RGBA (index 0 access R, 1 access G, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color3D.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n        </member>\n        <member name=\"M:Assimp.Color3D.#ctor(System.Single)\">\n            <summary>\n            Constructs a Color3D where each component is\n            set to the same value.\n            </summary>\n            <param name=\"value\">Value to set R, G, B components</param>\n        </member>\n        <member name=\"M:Assimp.Color3D.IsBlack\">\n            <summary>\n            Determines if the color is black, or close to being black.\n            </summary>\n            <returns>True if the color is black/nearly block, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Adds the two colors together.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(Assimp.Color3D,System.Single)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to add to each component</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(System.Single,Assimp.Color3D)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"value\">Value to add to each component</param>\n            <param name=\"color\">Source color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Subtracts the second color from the first color.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(Assimp.Color3D,System.Single)\">\n            <summary>\n            Subtracts the value from each of the color's components.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to subtract from each component</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(System.Single,Assimp.Color3D)\">\n            <summary>\n            Subtracts the color's components from the value, returning\n            the result as a new color. Same as <c>new Color4D(value) - color</c>\n            </summary>\n            <param name=\"value\">Value for each component of the first color</param>\n            <param name=\"color\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Multiplies the two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Multiplied color.</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(Assimp.Color3D,System.Single)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"value\">Source color</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(System.Single,Assimp.Color3D)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Division(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Divides the first color by the second color, component wise.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Division(Assimp.Color3D,System.Single)\">\n            <summary>\n            Divides the color by a divisor value.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Equality(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Tets equality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Inequality(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Tets inequality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.Equals(Assimp.Color3D)\">\n            <summary>\n            Tests equality between this color and another color\n            </summary>\n            <param name=\"other\">Color to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Color4D\">\n            <summary>\n            Represents a Red-Green-Blue-Alpha (RGBA) color.\n            Color values range from 0 to 1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.A\">\n            <summary>\n            Alpha component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Color4D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of RGBA (index 0 access R, 1 access G, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color4D.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n            <param name=\"a\">Alpha component</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color4D. Alpha is set to 1.0.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single)\">\n            <summary>\n            Constructs a Color4D where each component is\n            set to the same value.\n            </summary>\n            <param name=\"value\">Value to set R, G, B, A components</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(Assimp.Color3D)\">\n            <summary>\n            Constructs a Color4D from a Color3D. Alpha is set to 1.0.\n            </summary>\n            <param name=\"rgb\">RGB values</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(Assimp.Color3D,System.Single)\">\n            <summary>\n            Constructs a Color4D from a Color3D and alpha value.\n            </summary>\n            <param name=\"rgb\">RGB values</param>\n            <param name=\"alpha\">Alpha value</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.IsBlack\">\n            <summary>\n            Determines if the color is black, or close to being black.\n            </summary>\n            <returns>True if the color is black/nearly block, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Adds the two colors together.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(Assimp.Color4D,System.Single)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to add to each component</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(System.Single,Assimp.Color4D)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"value\">Value to add to each component</param>\n            <param name=\"color\">Source color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Subtracts the second color from the first color.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(Assimp.Color4D,System.Single)\">\n            <summary>\n            Subtracts the value from each of the color's components.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to subtract from each component</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(System.Single,Assimp.Color4D)\">\n            <summary>\n            Subtracts the color's components from the value, returning\n            the result as a new color. Same as <c>new Color4D(value) - color</c>\n            </summary>\n            <param name=\"value\">Value for each component of the first color</param>\n            <param name=\"color\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Multiplies the two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Multiplied color.</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(Assimp.Color4D,System.Single)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"value\">Source color</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(System.Single,Assimp.Color4D)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Division(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Divides the first color by the second color, component wise.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Division(Assimp.Color4D,System.Single)\">\n            <summary>\n            Divides the color by a divisor value.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Equality(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Tets equality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Inequality(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Tets inequality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.Equals(Assimp.Color4D)\">\n            <summary>\n            Tests equality between this color and another color\n            </summary>\n            <param name=\"other\">Color to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Configs.PropertyConfig\">\n            <summary>\n            Base property config.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.PropertyConfig.Name\">\n            <summary>\n            Gets the property name.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.#ctor(System.String)\">\n            <summary>\n            Creates a new property config that has no active Assimp property store.\n            </summary>\n            <param name=\"name\">Name of the property.</param>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.ApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IntegerPropertyConfig\">\n            <summary>\n            Describes an integer configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IntegerPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IntegerPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.#ctor(System.String,System.Int32)\">\n            <summary>\n            Constructs a new IntengerPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.#ctor(System.String,System.Int32,System.Int32)\">\n            <summary>\n            constructs a new IntegerPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FloatPropertyConfig\">\n            <summary>\n            Describes a float configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FloatPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FloatPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.#ctor(System.String,System.Single)\">\n            <summary>\n            Constructs a new FloatPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.#ctor(System.String,System.Single,System.Single)\">\n            <summary>\n            Constructs a new FloatPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MatrixPropertyConfig\">\n            <summary>\n            Describes a <see cref=\"T:Assimp.Matrix4x4\"/> configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MatrixPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MatrixPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.#ctor(System.String,Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new MatrixPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.#ctor(System.String,Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new MatrixPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.BooleanPropertyConfig\">\n            <summary>\n            Describes a boolean configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.BooleanPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.BooleanPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new BooleanPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.#ctor(System.String,System.Boolean,System.Boolean)\">\n            <summary>\n            Constructs a new BooleanPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.StringPropertyConfig\">\n            <summary>\n            Describes a string configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.StringPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.StringPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.#ctor(System.String,System.String)\">\n            <summary>\n            Constructs a new StringPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.#ctor(System.String,System.String,System.String)\">\n            <summary>\n            Constructs a new StringPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.ProcessNames(System.String[])\">\n            <summary>\n            Convience method for constructing a whitespace delimited name list.\n            </summary>\n            <param name=\"names\">Array of names</param>\n            <returns>White-space delimited list as a string</returns>\n        </member>\n        <member name=\"T:Assimp.Configs.MeasureTimeConfig\">\n            <summary>\n            Configuration to enable time measurements. If enabled, each\n            part of the loading process is timed and logged. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeasureTimeConfig.MeasureTimeConfigName\">\n            <summary>\n            Gets the string name used by MeasureTimeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeasureTimeConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MeasureTimeConfig.\n            </summary>\n            <param name=\"measureTime\">True if the loading process should be timed or not.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MultithreadingConfig\">\n            <summary>\n            Configuration to set Assimp's multithreading policy. Possible\n            values are -1 to let Assimp decide, 0 to disable multithreading, or\n            any number larger than zero to force a specific number of threads. This\n            is only a hint and may be ignored by Assimp. Default value is -1.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MultithreadingConfig.MultithreadingConfigName\">\n            <summary>\n            Gets the string name used by MultithreadingConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MultithreadingConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MultithreadingConfig.\n            </summary>\n            <param name=\"value\">A value of -1 will let Assimp decide,\n            a value of zero to disable multithreading, and a value greater than zero\n            to force a specific number of threads.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NoSkeletonMeshesConfig\">\n            <summary>\n            Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid\n            in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing\n            the bones. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NoSkeletonMeshesConfig.NoSkeletonMeshesConfigName\">\n            <summary>\n            Gets the string name used by NoSkeletonMeshConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NoSkeletonMeshesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new NoSkeletonMeshConfig.\n            </summary>\n            <param name=\"disableDummySkeletonMeshes\">True if dummy skeleton mesh generation should be disabled, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TangentSmoothingAngleConfig\">\n            <summary>\n            Configuration to set the maximum angle that may be between two vertex tangents/bitangents\n            when they are smoothed during the step to calculate the tangent basis. The default\n            value is 45 degrees.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TangentSmoothingAngleConfig.TangentSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by TangentSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TangentSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new TangentSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle, in degrees.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NormalSmoothingAngleConfig\">\n            <summary>\n            Configuration to set the maximum angle between two face normals at a vertex when\n            they are smoothed during the step to calculate smooth normals. This is frequently\n            called the \"crease angle\". The maximum and default value is 175 degrees.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NormalSmoothingAngleConfig.NormalSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by NormalSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NormalSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new NormalSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle, in degrees.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MDLColorMapConfig\">\n            <summary>\n            Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5)\n            files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains\n            RGB triplets for each of the 256 palette entries. If the file is not found, a\n            default palette (from Quake 1) is used. The default value is \"colormap.lmp\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MDLColorMapConfig.MDLColorMapConfigName\">\n            <summary>\n            Gets the string name used by MDLColorMapConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MDLColorMapConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MDLColorMapConfig.\n            </summary>\n            <param name=\"fileName\">Colormap filename</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MaterialExcludeListConfig\">\n            <summary>\n            Configuration for the the <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/> step\n            to determine what materials to keep. If a material matches one of these names it will not\n            be modified or removed by the post processing step. Default is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MaterialExcludeListConfig.MaterialExcludeListConfigName\">\n            <summary>\n            Gets the string name used by MaterialExcludeListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MaterialExcludeListConfig.#ctor(System.String[])\">\n            <summary>\n            Constructs a new MaterialExcludeListConfig. Material names containing whitespace\n            <c>must</c> be enclosed in single quotation marks.\n            </summary>\n            <param name=\"materialNames\">List of material names that will not be modified or replaced by the remove redundant materials post process step.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.KeepSceneHierarchyConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed\n            where meshes with the same materials are not joined. This option can be useful\n            if you have a scene hierarchy that contains important additional information\n            which you intend to parse. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.KeepSceneHierarchyConfig.KeepSceneHierarchyConfigName\">\n            <summary>\n            Gets the string name used by KeepSceneHierarchyConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.KeepSceneHierarchyConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new KeepHierarchyConfig. \n            </summary>\n            <param name=\"keepHierarchy\">True to keep the hierarchy, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NormalizeVertexComponentsConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to normalize all vertex components into the -1...1 range. The default value is\n            false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NormalizeVertexComponentsConfig.NormalizeVertexComponentsConfigName\">\n            <summary>\n            Gets the string name used by NormalizeVertexComponentsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NormalizeVertexComponentsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new NormalizeVertexComponentsConfig.\n            </summary>\n            <param name=\"normalizeVertexComponents\">True if the post process step should normalize vertex components, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveDegeneratePrimitivesConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step to\n            remove degenerted primitives from the import immediately. The default value is false,\n            where degenerated triangles are converted to lines, and degenerated lines to points.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveDegeneratePrimitivesConfig.RemoveDegeneratePrimitivesConfigName\">\n            <summary>\n            Gets the string name used by RemoveDegeneratePrimitivesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveDegeneratePrimitivesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveDegeneratePrimitivesConfig.\n            </summary>\n            <param name=\"removeDegenerates\">True if the post process step should remove degenerate primitives, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step. If true, the area of the triangles are checked\n            to see if they are greater than 1e-6. If so, the triangle is removed if <see cref=\"T:Assimp.Configs.RemoveDegeneratePrimitivesConfig\"/> is set to true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig.RemoveDegeneratePrimitivesCheckAreaConfigName\">\n            <summary>\n            Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig.\n            </summary>\n            <param name=\"checkArea\">True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NodeExcludeListConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/> step\n            to preserve nodes matching a name in the given list. Nodes that match the names in the list\n            will not be modified or removed. Identifiers containing whitespaces\n            <c>must</c> be enclosed in single quotation marks. The default value is an\n            empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NodeExcludeListConfig.NodeExcludeListConfigName\">\n            <summary>\n            Gets the string name used by NodeExcludeListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NodeExcludeListConfig.#ctor(System.String[])\">\n            <summary>\n            Constructs a new NodeExcludeListConfig.\n            </summary>\n            <param name=\"nodeNames\">List of node names</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MeshTriangleLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step \n            that specifies the maximum number of triangles a mesh can contain. The\n            default value is MeshTriangleLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshTriangleLimitConfig.MeshTriangleLimitConfigName\">\n            <summary>\n            Gets the string name used by MeshTriangleLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshTriangleLimitConfig.MeshTriangleLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeshTriangleLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MeshTriangleLimitConfig.\n            </summary>\n            <param name=\"maxTriangleLimit\">Max number of triangles a mesh can contain.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MeshVertexLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step\n            that specifies the maximum number of vertices a mesh can contain. The\n            default value is MeshVertexLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshVertexLimitConfig.MeshVertexLimitConfigName\">\n            <summary>\n            Gets the string name used by MeshVertexLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshVertexLimitConfig.MeshVertexLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_VERTICES\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeshVertexLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MeshVertexLimitConfig.\n            </summary>\n            <param name=\"maxVertexLimit\">Max number of vertices a mesh can contain.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.VertexBoneWeightLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/> step\n            that specifies the maximum number of bone weights per vertex. The default\n            value is VertexBoneWeightLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexBoneWeightLimitConfig.VertexBoneWeightLimitConfigName\">\n            <summary>\n            gets the string name used by VertexBoneWeightLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexBoneWeightLimitConfig.VertexBoneWeightLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_LBW_MAX_WEIGHTS\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.VertexBoneWeightLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new VertexBoneWeightLimitConfig.\n            </summary>\n            <param name=\"maxBoneWeights\">Max number of bone weights per vertex.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.VertexCacheSizeConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\"/> step\n            that specifies the size of the post-transform vertex cache. The size is\n            given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexCacheSizeConfig.VertexCacheSizeConfigName\">\n            <summary>\n            Gets the string name used by VertexCacheConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexCacheSizeConfig.VertexCacheSizeConfigDefaultValue\">\n            <summary>\n            Gets the defined default vertex cache size, this corresponds to \n            the <see cref=\"F:Assimp.Unmanaged.AiDefines.PP_ICL_PTCACHE_SIZE\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.VertexCacheSizeConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new VertexCacheSizeConfig.\n            </summary>\n            <param name=\"vertexCacheSize\">Size of the post-transform vertex cache, in number of vertices.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveComponentConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.RemoveComponent\"/> step that\n            specifies which parts of the data structure is to be removed. If no valid mesh\n            remains after the step, the import fails. The default value i <see cref=\"F:Assimp.ExcludeComponent.None\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveComponentConfig.RemoveComponentConfigName\">\n            <summary>\n            Gets the string name used by RemoveComponentConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveComponentConfig.#ctor(Assimp.ExcludeComponent)\">\n            <summary>\n            Constructs a new RemoveComponentConfig.\n            </summary>\n            <param name=\"componentsToExclude\">Bit-wise combination of components to exclude.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SortByPrimitiveTypeConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step that\n            specifies which primitive types are to be removed by the step. Specifying all\n            primitive types is illegal. The default value is zero specifying none.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SortByPrimitiveTypeConfig.SortByPrimitiveTypeConfigName\">\n            <summary>\n            Gets the string name used by SortByPrimitiveTypeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SortByPrimitiveTypeConfig.#ctor(Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new SortByPrimitiveTypeConfig.\n            </summary>\n            <param name=\"typesToRemove\">Bit-wise combination of primitive types to remove</param>\n        </member>\n        <member name=\"T:Assimp.Configs.AnimationAccuracyConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step that\n            specifies the floating point accuracy for animation values, specifically\n            the episilon during comparisons. The default value is 0.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.AnimationAccuracyConfig.AnimationAccuracyConfigName\">\n            <summary>\n            Gets the string name used by AnimationAccuracyConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.AnimationAccuracyConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new AnimationAccuracyConfig.\n            </summary>\n            <param name=\"episilon\">Episilon for animation value comparisons.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TransformUVConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.TransformUVCoords\"/> step that\n            specifies which UV transformations are to be evaluated. The default value\n            is for all combinations (scaling, rotation, translation).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TransformUVConfig.TransformUVConfigName\">\n            <summary>\n            Gets the string name used by TransformUVConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TransformUVConfig.#ctor(Assimp.UVTransformFlags)\">\n            <summary>\n            Constructs a new TransformUVConfig.\n            </summary>\n            <param name=\"transformFlags\">Bit-wise combination specifying which UV transforms that should be evaluated.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FavorSpeedConfig\">\n            <summary>\n            Configuration that is a hint to Assimp to favor speed against import quality. Enabling this\n            option may result in faster loading, or it may not. It is just a hint to loaders\n            and post-process steps to use faster code paths if possible. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FavorSpeedConfig.FavorSpeedConfigName\">\n            <summary>\n            Gets the string name used by FavorSpeedConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FavorSpeedConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FavorSpeedConfig.\n            </summary>\n            <param name=\"favorSpeed\">True if Assimp should favor speed at the expense of quality, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MaxBoneCountConfig\">\n            <summary>\n            Configures the maximum bone count per mesh for the <see cref=\"F:Assimp.PostProcessSteps.SplitByBoneCount\"/> step. Meshes are\n            split until the maximum number of bones is reached.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MaxBoneCountConfig.MaxBoneCountConfigName\">\n            <summary>\n            Gets the string name used by MaxBoneCountConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MaxBoneCountConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MaxBoneCountConfig.\n            </summary>\n            <param name=\"maxBones\">The maximum bone count.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TangentTextureChannelIndexConfig\">\n            <summary>\n            Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TangentTextureChannelIndexConfig.TangentTextureChannelIndexConfigName\">\n            <summary>\n            Gets the string name used by TangentTextureChannelIndexConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TangentTextureChannelIndexConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new TangentTextureChannelIndexConfig.\n            </summary>\n            <param name=\"textureChannelIndex\">The zero-based texture channel index.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.DeboneThresholdConfig\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.Debone\"/> threshold that is used to determine what bones are removed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.DeboneThresholdConfig.DeboneThresholdConfigName\">\n            <summary>\n            Gets the string name used by DeboneThresholdConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.DeboneThresholdConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new DeboneThresholdConfig.\n            </summary>\n            <param name=\"threshold\">The debone threshold.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.DeboneAllOrNoneConfig\">\n            <summary>\n            Configuration that requires all bones to qualify for deboning before any are removed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.DeboneAllOrNoneConfig.DeboneAllOrNoneConfigName\">\n            <summary>\n            Gets the string name used by DeboneAllOrNoneConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.DeboneAllOrNoneConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new DeboneAllOrNoneConfig.\n            </summary>\n            <param name=\"allOrNone\">True if all are required, false if none need to qualify.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RootTransformationConfig\">\n            <summary>\n            Configuration for <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> that sets a user defined matrix as the scene root node transformation before\n            transforming vertices. Default value is the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RootTransformationConfig.RootTransformationConfigName\">\n            <summary>\n            Gets the string name used by RootTransformationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RootTransformationConfig.#ctor(Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new RootTransformationConfig.\n            </summary>\n            <param name=\"rootTransform\">Root transformation matrix to be set to the root scene node during the pretransform post process step.</param>\n        </member>\n        <member name=\"M:Assimp.Configs.RootTransformationConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.GlobalScaleConfig\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.GlobalScale\"/> step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model,\n            which this processing step can utilize.\n            </summary>\n            <seealso cref=\"T:Assimp.Configs.FloatPropertyConfig\" />\n        </member>\n        <member name=\"P:Assimp.Configs.GlobalScaleConfig.GlobalScaleConfigName\">\n            <summary>\n            Gets the string name used by GlobalScaleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.GlobalScaleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new GlobalScaleConfig.\n            </summary>\n            <param name=\"globalScale\">Value to scale the entire scene by.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.GlobalKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the \"global\" keyframe that will be imported. There are other configs\n            for specific importers that will override the global setting.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.GlobalKeyFrameImportConfig.GlobalKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by GlobalKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.GlobalKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new GlobalKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3KeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MD3 format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3KeyFrameImportConfig.MD3KeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MD3KeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3KeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MD3KeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD2KeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MD2 format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD2KeyFrameImportConfig.MD2KeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MD2KeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD2KeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MD2KeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MDLKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MDL format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MDLKeyFrameImportConfig.MDLKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MDLKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MDLKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MDLKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SMDKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the SMD format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SMDKeyFrameImportConfig.SMDKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by SMDKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SMDKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new SMDKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.UnrealKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the Unreal format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.UnrealKeyFrameImportConfig.UnrealKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by UnrealKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.UnrealKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new UnrealKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ACSeparateBackfaceCullConfig\">\n            <summary>\n            Configures the AC loader to collect all surfaces which have the \"Backface cull\" flag set in separate\n            meshes. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ACSeparateBackfaceCullConfig.ACSeparateBackfaceCullConfigName\">\n            <summary>\n            Gets the string name used by ACSeparateBackfaceCullConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ACSeparateBackfaceCullConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ACSeparateBackfaceCullConfig.\n            </summary>\n            <param name=\"separateBackfaces\">True if all surfaces that have the \"backface cull\" flag set should be collected in separate meshes, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ACEvaluateSubdivisionConfig\">\n            <summary>\n            Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence\n            of the 'subdiv' attribute in the file). By default, Assimp performs\n            the subdivision using the standard Catmull-Clark algorithm. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ACEvaluateSubdivisionConfig.ACEvaluateSubdivisionConfigName\">\n            <summary>\n            Gets the string name used by ACEvaluateSubdivisionConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ACEvaluateSubdivisionConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ACEvaluateSubdivisionConfig.\n            </summary>\n            <param name=\"evaluateSubdivision\">True if the AC loader should evaluate subdivisions, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.UnrealHandleFlagsConfig\">\n            <summary>\n            Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided).\n            The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.UnrealHandleFlagsConfig.UnrealHandleFlagsConfigName\">\n            <summary>\n            Gets the string name used by UnrealHandleFlagsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.UnrealHandleFlagsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new UnrealHandleFlagsConfig.\n            </summary>\n            <param name=\"handleFlags\">True if the unreal loader should separate faces with different surface flags, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TerragenComputeTexCoordsConfig\">\n            <summary>\n            Configures the terragen import plugin to compute UV's for terrains, if\n            they are not given. Furthermore, a default texture is assigned. The default value is false.\n            <para>UV coordinates for terrains are so simple to compute that you'll usually \n            want to compute them on your own, if you need them. This option is intended for model viewers which\n            want to offer an easy way to apply textures to terrains.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TerragenComputeTexCoordsConfig.TerragenComputeTexCoordsConfigName\">\n            <summary>\n            Gets the string name used by TerragenComputeTexCoordsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TerragenComputeTexCoordsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new TerragenComputeTexCoordsConfig.\n            </summary>\n            <param name=\"computeTexCoords\">True if terran UV coordinates should be computed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ASEReconstructNormalsConfig\">\n            <summary>\n            Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups\n            loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ASEReconstructNormalsConfig.ASEReconstructNormalsConfigName\">\n            <summary>\n            Gets the string name used by ASEReconstructNormalsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ASEReconstructNormalsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ASEReconstructNormalsConfig.\n            </summary>\n            <param name=\"reconstructNormals\">True if normals should be re-computed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3HandleMultiPartConfig\">\n            <summary>\n            Configures the M3D loader to detect and process multi-part Quake player models. These models\n            usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is\n            set to true, Assimp will try to load and combine all three files if one of them is loaded. The\n            default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3HandleMultiPartConfig.MD3HandleMultiPartConfigName\">\n            <summary>\n            Gets the string name used by MD3HandleMultiPartConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3HandleMultiPartConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MD3HandleMultiPartConfig.\n            </summary>\n            <param name=\"handleMultiParts\">True if the split files should be loaded and combined, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3SkinNameConfig\">\n            <summary>\n            Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks\n            whether a file named \"md3_file_name\"_\"skin_name\".skin exists. These files are used by\n            Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue'\n            are typical skin names. The default string value is \"default\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3SkinNameConfig.MD3SkinNameConfigName\">\n            <summary>\n            Gets the string name used by MD3SkinNameConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3SkinNameConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MD3SkinNameConfig.\n            </summary>\n            <param name=\"skinName\">The skin name.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3ShaderSourceConfig\">\n            <summary>\n            Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or\n            relative to where all MD3 shaders reside. the default string value is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3ShaderSourceConfig.MD3ShaderSourceConfigName\">\n            <summary>\n            Gets the string name used by MD3ShaderSourceConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3ShaderSourceConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MD3ShaderSourceConfig.\n            </summary>\n            <param name=\"shaderFile\">The shader file.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWOImportOneLayerConfig\">\n            <summary>\n            Configures the LWO loader to load just one layer from the model.\n            <para>LWO files consist of layers and in some cases it could be useful to load only one of them.\n            This property can be either a string - which specifies the name of the layer - or an integer - the index\n            of the layer. If the property is not set then the whole LWO model is loaded. Loading fails\n            if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty</para>\n            The default value is false (all layers are loaded).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWOImportOneLayerConfig.LWOImportOneLayerConfigName\">\n            <summary>\n            Gets the string name used by LWOImportOneLayerConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWOImportOneLayerConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new LWOImportOneLayerConfig.\n            </summary>\n            <param name=\"importOneLayerOnly\">True if only one layer should be imported, false if all layers should be imported.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD5NoAnimationAutoLoadConfig\">\n            <summary>\n            Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically.\n            The default value is false.\n            <para>The default strategy is to look for a file with the same name but with the MD5ANIm extension\n            in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration\n            option can be used to disable this behavior.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD5NoAnimationAutoLoadConfig.MD5NoAnimationAutoLoadConfigName\">\n            <summary>\n            Gets the string name used by MD5NoAnimationAutoLoadConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD5NoAnimationAutoLoadConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MD5NoAnimationAutoLoadConfig.\n            </summary>\n            <param name=\"noAutoLoadAnim\">True if animations should not be automatically loaded, false if they should be.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWSAnimationStartConfig\">\n            <summary>\n            Defines the beginning of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's. The default value is the one taken from the file.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the start time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation start from the input LWS\n            file ('FirstFrame' line)</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWSAnimationStartConfig.LWSAnimationStartConfigName\">\n            <summary>\n            Gets the string name used by LWSAnimationStartConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWSAnimationStartConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new LWSAnimationStartConfig.\n            </summary>\n            <param name=\"animStart\">Beginning of the time range</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWSAnimationEndConfig\">\n            <summary>\n            Defines the ending of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's. The default value is the one taken from the file\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the end time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation end from the input LWS\n            file.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWSAnimationEndConfig.LWSAnimationEndConfigName\">\n            <summary>\n            Gets the string name used by LWSAnimationEndConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWSAnimationEndConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new LWSAnimationEndConfig.\n            </summary>\n            <param name=\"animEnd\">Ending of the time range</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IRRAnimationFrameRateConfig\">\n            <summary>\n            Defines the output frame rate of the IRR loader.\n            <para>IRR animations are difficult to convert for Assimp and there will always be\n            a loss of quality. This setting defines how many keys per second are returned by the converter.</para>\n            The default value is 100 frames per second.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IRRAnimationFrameRateConfig.IRRAnimationFrameRateConfigName\">\n            <summary>\n            Gets the string name used by IRRAnimationFrameRateConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IRRAnimationFrameRateConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new IRRAnimationFramerateConfig.\n            </summary>\n            <param name=\"frameRate\">Number of frames per second to output.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.OgreMaterialFileConfig\">\n            <summary>\n            The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp\n            where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material,\n            and lastly the material name defined by this config property. The default value is \"Scene.Material\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.OgreMaterialFileConfig.OgreMaterialFileConfigName\">\n            <summary>\n            Gets the string name used by OgreMaterialFileConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.OgreMaterialFileConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new OgreMaterialFileConfig.\n            </summary>\n            <param name=\"materialFileName\">Material file name to load.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.OgreTextureTypeFromFilenameConfig\">\n            <summary>\n            The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified\n            in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: \n            <list type=\"bullet\">\n            <item><description>Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap</description></item>\n            <item><description>Specular Maps: _s, _spec, _specular, _specularmap</description></item>\n            <item><description>Light Maps: _l, _light, _lightmap, _occ, _occlusion</description></item>\n            <item><description>Displacement Maps: _dis, _displacement</description></item>\n            </list>\n            The matching is case insensitive. Postfix is taken between the last \"_\" and last \".\". The default behavior is to detect type from lower cased\n            texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then,\n            <see cref=\"F:Assimp.TextureType.Diffuse\"/> is used. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.OgreTextureTypeFromFilenameConfig.OgreTextureTypeFromFilenameConfigName\">\n            <summary>\n            Gets the string name used by OgreTextureTypeFromFilenameConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.OgreTextureTypeFromFilenameConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new OgreTextureTypeFromFilenameConfig.\n            </summary>\n            <param name=\"fileNameDefinesTextureUsage\">True if the filename defines texture usage, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCSkipSpaceRepresentationsConfig\">\n            <summary>\n            Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCSkipSpaceRepresentationsConfig.IFCSkipSpaceRepresentationsConfigName\">\n            <summary>\n            Gets the string name used by IFCSkipSpaceRepresentationsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCSkipSpaceRepresentationsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IFCSkipSpaceRepresentationsConfig.\n            </summary>\n            <param name=\"skipSpaceRepresentations\">True if the IfcSpace elements are skipped, false if otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCUseCustomTriangulationConfig\">\n            <summary>\n            Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false,\n            walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected\n            with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known\n            issues with these kind of polygons.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCUseCustomTriangulationConfig.IFCUseCustomTriangulationConfigName\">\n            <summary>\n            Gets the string name used by IFCUseCustomTriangulationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCUseCustomTriangulationConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IFCUseCustomTriangulationConfig.\n            </summary>\n            <param name=\"useCustomTriangulation\">True if the loader should use its own triangulation routine for walls/floors, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCSmoothingAngleConfig\">\n            <summary>\n            Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120]\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCSmoothingAngleConfig.IFCSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by IFCSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new IFCSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle when tessellating curves. Needs to be in the range of [5, 120].</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCCylindricalTessellationConfig\">\n            <summary>\n            Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180].\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCCylindricalTessellationConfig.IFCCylindricalTessellationConfigName\">\n            <summary>\n            Gets the string name used by IFCCylindricalTessellationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCCylindricalTessellationConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new IFCCylindricalTessellationConfig.\n            </summary>\n            <param name=\"tessellation\">Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180].</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ColladaIgnoreUpDirectionConfig\">\n            <summary>\n            Specifies whether the collada loader will ignore the up direction. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ColladaIgnoreUpDirectionConfig.ColladaIgnoreUpDirectionConfigName\">\n            <summary>\n            Gets the string name used by ColladaIgnoreUpDirectionConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ColladaIgnoreUpDirectionConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ColladaIgnoreUpDirectionConfig.\n            </summary>\n            <param name=\"ignoreUpDirection\">True if the loader should ignore the up direction, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAllGeometryLayersConfig\">\n            <summary>\n            Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAllGeometryLayersConfig.FBXImportAllGeometryLayersConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAllGeometryLayersConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAllGeometryLayersConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAllGeometryLayersConfig.\n            </summary>\n            <param name=\"importAllGeometryLayers\">True if all geometry layers should be merged, false otherwise to take only the first layer.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAllMaterialsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials,\n            if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAllMaterialsConfig.FBXImportAllMaterialsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAllMaterialsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAllMaterialsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAllMaterialsConfig.\n            </summary>\n            <param name=\"importAllMaterials\">True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials).</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportMaterialsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import materials. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportMaterialsConfig.FBXImportMaterialsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportMaterialsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportMaterialsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportMaterialsConfig.\n            </summary>\n            <param name=\"importMaterials\">True if the FBX importer should import materials, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportEmbeddedTexturesConfig\">\n            <summary>\n            Specifies whether the FBX importer will import embedded textures. Default is true.\n            </summary>\n            <seealso cref=\"T:Assimp.Configs.BooleanPropertyConfig\" />\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportEmbeddedTexturesConfig.FBXImportEmbeddedTexturesConfigName\">\n            <summary>\n            Gets the string name used by FBXImportEmbeddedTexturesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportEmbeddedTexturesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportEmbeddedTexturesConfig.\n            </summary>\n            <param name=\"importTextures\">True if the FBX importer should import embedded textures, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportSearchEmbeddedTexturesConfig\">\n            <summary>\n            Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportSearchEmbeddedTexturesConfig.FBXImportSearchEmbeddedTexturesConfigName\">\n            <summary>\n            Gets the string name used by FBXImportSearchEmbeddedTexturesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportSearchEmbeddedTexturesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportSearchEmbeddedTexturesConfig.\n            </summary>\n            <param name=\"searchEmbeddedTextures\">True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportCamerasConfig\">\n            <summary>\n            Specifies whether the FBX importer will import cameras. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportCamerasConfig.FBXImportCamerasConfigName\">\n            <summary>\n            Gets the string name used by FBXImportCamerasConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportCamerasConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportCamerasConfig.\n            </summary>\n            <param name=\"importCameras\">True if the FBX importer should import cameras, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportLightsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import lights. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportLightsConfig.FBXImportLightsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportLightsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportLightsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportLightsConfig.\n            </summary>\n            <param name=\"importLights\">True if the FBX importer should import lights, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAnimationsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import animations. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAnimationsConfig.FBXImportAnimationsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAnimationsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAnimationsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAnimationsConfig.\n            </summary>\n            <param name=\"importAnimations\">True if the FBX importer should import animations, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXStrictModeConfig\">\n            <summary>\n            Specifies whether the FBX importer will act in strict mode in which only the FBX 2013\n            format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this\n            format is best supported and well-tested. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXStrictModeConfig.FBXStrictModeConfigName\">\n            <summary>\n            Gets the string name used by FBXStrictModeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXStrictModeConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXStrictModeConfig.\n            </summary>\n            <param name=\"useStrictMode\">True if FBX strict mode should be used, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXPreservePivotsConfig\">\n            <summary>\n            Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots\n            and offsets will be evaluated whenever possible. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXPreservePivotsConfig.FBXPreservePivotsConfigName\">\n            <summary>\n            Gets the string name used by FBXPreservePivotsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXPreservePivotsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXPreservePivotsConfig.\n            </summary>\n            <param name=\"preservePivots\">True if pivots should be preserved, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig\">\n            <summary>\n            Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose \n            transformation over their entire defined range. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig.FBXOptimizeEmptyAnimationCurvesConfigName\">\n            <summary>\n            Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXOptimizeEmptyAnimationCurvesConfig.\n            </summary>\n            <param name=\"optimizeEmptyAnimations\">True if empty animation curves should be dropped, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.XFileUseDoublesConfig\">\n            <summary>\n            Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.XFileUseDoublesConfig.XFileUseDoublesConfigName\">\n            <summary>\n            Gets the string name used by XFileUseDoublesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.XFileUseDoublesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new XFileUseDoublesConfig.\n            </summary>\n            <param name=\"useDoubles\">True if the x file uses 64-bit double values rather than 32-bit float values.</param>\n        </member>\n        <member name=\"T:Assimp.EmbeddedTexture\">\n            <summary>\n            Represents an embedded texture. Some file formats directly embed texture assets.\n            Embedded textures may be uncompressed, where the data is given in an uncompressed format.\n            Or it may be compressed in a format like png or jpg. In the latter case, the raw\n            file bytes are given so the application must utilize an image decoder (e.g. DevIL) to\n            get access to the actual color data. This object represents both types, so some properties may or may not be valid depending\n            if it is compressed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.IsCompressed\">\n            <summary>\n            Gets if the texture is compressed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Width\">\n            <summary>\n            Gets the width of the texture in pixels. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Height\">\n            <summary>\n            Gets the height of the texture in pixels. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.HasNonCompressedData\">\n            <summary>\n            Gets if the texture has non-compressed texel data. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.NonCompressedDataSize\">\n            <summary>\n            Gets the size of the non-compressed texel data. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.NonCompressedData\">\n            <summary>\n            Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.HasCompressedData\">\n            <summary>\n            Gets if the embedded texture has compressed data. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedDataSize\">\n            <summary>\n            Gets the size of the compressed data. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedData\">\n            <summary>\n            Gets the raw byte data representing the compressed texture. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedFormatHint\">\n            <summary>\n            Gets the format hint to determine the type of compressed data. This hint\n            is a three-character lower-case hint like \"dds\", \"jpg\", \"png\".\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. Should use only if\n            reading from a native value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. This creates a compressed\n            embedded texture.\n            </summary>\n            <param name=\"compressedFormatHint\">The 3 character format hint.</param>\n            <param name=\"compressedData\">The compressed data.</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor(System.Int32,System.Int32,Assimp.Texel[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. This creates an uncompressed\n            embedded texture.\n            </summary>\n            <param name=\"width\">Width of the texture</param>\n            <param name=\"height\">Height of the texture</param>\n            <param name=\"uncompressedData\">Color data</param>\n            <exception cref=\"T:System.ArgumentException\">Thrown if the data size does not match width * height.</exception>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#ToNative(System.IntPtr,Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#FromNative(Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MetaDataType\">\n            <summary>\n            Enumerates metadata data types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Bool\">\n            <summary>\n            Metadata is a boolean.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Int32\">\n            <summary>\n            Metadata is an integer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.UInt64\">\n            <summary>\n            Metadata is an unsigned 64-bit integer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Float\">\n            <summary>\n            Metadata is a float.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Double\">\n            <summary>\n            Metadata is a double.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.String\">\n            <summary>\n            Metadata is a string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Vector3D\">\n            <summary>\n            Metadata is a <see cref=\"F:Assimp.MetaDataType.Vector3D\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PostProcessSteps\">\n            <summary>\n            Post processing flag options, specifying a number of steps\n            that can be run on the data to either generate additional vertex\n            data or optimize the imported data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.None\">\n            <summary>\n            No flags enabled.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\">\n            <summary>\n            Calculates the tangents and binormals (bitangents)\n            for the imported meshes.\n            <para>\n            This does nothing if a mesh does not have normals. You might\n            want this post processing step to be executed if you plan\n            to use tangent space calculations such as normal mapping. There is a\n            config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which\n            allows you to specify a maximimum smoothing angle for the algorithm.\n            However, usually you'll want to leave it at the default value.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\">\n            <summary>\n            Identifies and joins identical vertex data sets within all\n            imported meshes.\n            <para>\n            After this step is run each mesh does contain only unique vertices\n            anymore, so a vertex is possibly used by multiple faces. You usually\n            want to use this post processing step. If your application deals with\n            indexed geometry, this step is compulsory or you'll just waste rendering\n            time.</para>\n            <para>If this flag is not specified, no vertices are referenced by more than one\n            face and no index buffer is required for rendering.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.MakeLeftHanded\">\n            <summary>\n            Converts all imported data to a left handed coordinate space.\n            \n            <para>By default the data is returned in a right-handed coordinate space,\n            where +X points to the right, +Z towards the viewer, and +Y upwards.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.Triangulate\">\n            <summary>\n            Triangulates all faces of all meshes.\n            <para>\n            By default the imported mesh data might contain faces with more than \n            three indices. For rendering you'll usually want all faces to\n            be triangles. This post processing step splits up all\n            higher faces to triangles. Line and point primitives are *not*\n            modified. If you want 'triangles only' with no other kinds of primitives,\n            try the following:\n            </para>\n            <list type=\"number\">\n            <item>\n            <description>Specify both <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/> and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>.</description>\n            </item>\n            <item>\n            <description>Ignore all point and line meshes when you process Assimp's output</description>\n            </item>\n            </list>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.RemoveComponent\">\n            <summary>\n            Removes some parts of the data structure (animations, materials,\n            light sources, cameras, textures, vertex components).\n            <para>\n            The components to be removed are specified in a separate configuration\n            option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't\n            need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove\n            unrequired stuff from the pipeline as early as possible results in an increased\n            performance and a better optimized output data structure.\n            </para>\n            <para>\n            This step is also useful if you want to force Assimp to recompute normals\n            or tangents. the corresponding steps don't recompute them if they're already\n            there (loaded from the source asset). By using this step you can make sure\n            they are NOT there.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateNormals\">\n            <summary>\n            Generates normals for all faces of all meshes. It may not be\n            specified together with <see cref=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\"/>.\n            <para>\n            This is ignored if normals are already there at the time where this\n            flag is evaluated. Model importers try to load them from the source file,\n            so they're usually already there. Face normals are shared between all\n            points of a single face, so a single point can have multiple normals,\n            which in other words, forces the library to duplicate vertices in\n            some cases. This makes <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> senseless then.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\">\n            <summary>\n            Generates smooth normals for all vertices of all meshes. It\n            may not be specified together with <see cref=\"F:Assimp.PostProcessSteps.GenerateNormals\"/>.\n            <para>\n            This is ignored if normals are already there at the time where\n            this flag is evaluated. Model importers try to load them from the\n            source file, so they're usually already there.\n            </para>\n            <para>The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE\n            allows you to specify an angle maximum for the normal smoothing algorithm.\n            Normals exceeding this limit are not smoothed, resulting in a 'hard' seam\n            between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual\n            appearance.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\">\n            <summary>\n            Splits large meshes into smaller submeshes.\n            <para>\n            This is useful for realtime rendering where the number\n            of triangles which can be maximally processed in a single draw call is\n            usually limited by the video driver/hardware. The maximum vertex buffer\n            is usually limited, too. Both requirements can be met with this step:\n            you may specify both a triangle and a vertex limit for a single mesh.\n            </para>\n            <para>The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT\n            and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default\n            values are 1,000,000.</para>\n            \n            <para>Warning: This can be a time consuming task.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.PreTransformVertices\">\n            <summary>\n            Removes the node graph and \"bakes\" (pre-transforms) all\n            vertices with the local transformation matrices of their nodes.\n            The output scene does still contain nodes, however, there is only\n            a root node with children, each one referencing only one mesh. \n            Each mesh referencing one material. For rendering, you can simply render\n            all meshes in order, you don't need to pay attention to local transformations\n            and the node hierarchy.\n            \n            <para>Warning: Animations are removed during this step.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.LimitBoneWeights\">\n            <summary>\n            Limits the number of bones simultaneously affecting a single\n            vertex to a maximum value.\n            <para>\n            If any vertex is affected by more than that number of bones,\n            the least important vertex weights are removed and the remaining vertex\n            weights are re-normalized so that the weights still sum up to 1.\n            </para>\n            <para>The default bone weight limit is 4 and uses the\n            AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing\n            step might be of interest for you.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ValidateDataStructure\">\n            <summary>\n            Validates the imported scene data structure.\n            <para>\n            This makes sure that all indices are valid, all animations\n            and bones are linked correctly, all material references are\n            correct, etc.\n            </para>\n            It is recommended to capture Assimp's log output if you use this flag,\n            so you can easily find out what's actually wrong if a file fails the\n            validation. The validator is quite rude and will find *all* inconsistencies\n            in the data structure. There are two types of failures:\n            <list type=\"bullet\">\n            <item>\n            <description>Error: There's something wrong with the imported data. Further\n            postprocessing is not possible and the data is not usable at all. The import\n            fails.</description>\n            </item>\n            <item>\n            <description>Warning: There are some minor issues (e.g. 1000000 animation keyframes\n            with the same time), but further postprocessing and use of the data structure is still\n            safe. Warning details are written to the log file.</description>\n            </item>\n            </list>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\">\n            <summary>\n            Re-orders triangles for better vertex cache locality.\n            \n            <para>This step tries to improve the ACMR (average post-transform vertex cache\n            miss ratio) for all meshes. The implementation runs in O(n) time \n            and is roughly based on the <a href=\"http://www.cs.princeton.edu/gfx/pubs/Sander_2007_%3ETR/tipsy.pdf\">'tipsify' algorithm</a>.</para>\n            \n            <para>If you intend to render huge models in hardware, this step might be of interest for you.\n            The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune\n            the cache optimization.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\">\n            <summary>\n            Searches for redundant/unreferenced materials and removes them.\n            <para>\n            This is especially useful in combination with the  PreTransformVertices\n            and OptimizeMeshes flags. Both join small meshes with equal characteristics, but\n            they can't do their work if two meshes have different materials. Because several\n            material settings are always lost during Assimp's import filders and because many\n            exporters don't check for redundant materials, huge models often have materials which\n            are defined several times with exactly the same settings.\n            </para>\n            <para>Several material settings not contributing to the final appearance of a surface\n            are ignored in all comparisons ... the material name is one of them. So, if you're passing\n            additional information through the content pipeline (probably using *magic* material names),\n            don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST\n            setting.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FixInFacingNormals\">\n            <summary>\n            This step tries to determine which meshes have normal vectors\n            that are facing inwards. \n            <para>\n            The algorithm is simple but effective:\n            </para>\n            <para>The bounding box of all vertices and their normals are compared\n            against the volume of the bounding box of all vertices without their normals.\n            This works well for most objects, problems might occur with planar surfaces. However,\n            the step tries to filter such cases. The step inverts all in-facing normals.\n            Generally, it is recommended to enable this step, although the result is not\n            always correct.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\">\n            <summary>\n            This step splits meshes with more than one primitive type in homogeneous submeshes.\n            <para>\n            This step is executed after triangulation and after it returns, just one\n            bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time\n            rendering where point and line primitives are often ignored or rendered separately.\n            </para>\n            <para>\n            You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need.\n            This can be used to easily exclude lines and points, which are rarely used,\n            from the import.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindDegenerates\">\n            <summary>\n            This step searches all meshes for degenerated primitives and\n            converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical.\n            <para>\n            To have degenerated primitives removed, specify the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> flag\n            try one of the following procedures:\n            </para>\n            <list type=\"numbers\">\n            <item>\n            <description>To support lines and points: Set the\n            AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as\n            soon as they are detected. They won't pass any further pipeline steps.</description>\n            </item>\n            <item>\n            <description>If you don't support lines and points: Specify <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> flag, which\n            will move line and point primitives to separate meshes.  Then set the AI_CONFIG_PP_SBP_REMOVE\n            option to <see cref=\"F:Assimp.PrimitiveType.Point\"/> and <see cref=\"F:Assimp.PrimitiveType.Line\"/> to cause <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step\n            to reject point and line meshes from the scene.</description>\n            </item>\n            </list>\n            <para>\n            Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several\n            file formats which do not support lines or points where exporters bypass the format specification and write\n            them as degenerated triangles instead.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindInvalidData\">\n            <summary>\n            This step searches all meshes for invalid data, such as zeroed\n            normal vectors or invalid UV coordinates and removes or fixes them.\n            This is intended to get rid of some common exporter rrors.\n            <para>\n            This is especially useful for normals. If they are invalid,\n            and the step recognizes this, they will be removed and can later\n            be recomputed, e.g. by the GenerateSmoothNormals flag. The step\n            will also remove meshes that are infinitely small and reduce animation\n            tracks consisting of hundreds of redundant keys to a single key. The\n            AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check\n            for duplicate animation tracks.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateUVCoords\">\n            <summary>\n            This step converts non-UV mappings (such as spherical or\n            cylindrical mapping) to proper texture coordinate channels.\n            \n            <para>Most applications will support UV mapping only, so you will\n            probably want to specify this step in every case. Note that Assimp\n            is not always able to match the original mapping implementation of the 3D\n            app which produced a model perfectly. It's always better\n            to let the father app compute the UV channels, at least 3DS max, maya, blender,\n            lightwave, modo, .... are able to achieve this.</para>\n            \n            <para>If this step is not requested, you'll need to process the MATKEY_MAPPING\n            material property in order to display all assets properly.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.TransformUVCoords\">\n            <summary>\n            Applies per-texture UV transformations and bakes them to stand-alone vtexture\n            coordinate channels.\n            \n            <para>UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material\n            key for more information. This step processes all textures with transformed input UV coordinates\n            and generates new (pretransformed) UV channel transformations, so you will probably\n            want to specify this step.</para>\n            \n            <para>UV transformations are usually implemented in realtime apps by\n            transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous)\n            transformation matrix.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindInstances\">\n            <summary>\n            Searches for duplicated meshes and replaces them with a reference\n            to the first mesh.\n            <para>\n            This is time consuming, so don't use it if you have no time. Its\n            main purpose is to work around the limitation with some\n            file formats that don't support instanced meshes, so exporters\n            duplicate meshes.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.OptimizeMeshes\">\n            <summary>\n            Attempts to reduce the number of meshes (and draw calls). \n            <para>\n            This is recommended to be used together with <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/>\n            and is fully compatible with both <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.OptimizeGraph\">\n            <summary>\n            Optimizes scene hierarchy. Nodes with no animations, bones,\n            lights, or cameras assigned are collapsed and joined.\n            \n            <para>Node names can be lost during this step, you can specify\n            names of nodes that should'nt be touched or modified\n            with AI_CONFIG_PP_OG_EXCLUDE_LIST.</para>\n            \n            <para>Use this flag with caution. Most simple files will be collapsed to a \n            single node, complex hierarchies are usually completely lost. That's not\n            the right choice for editor environments, but probably a very effective\n            optimization if you just want to get the model data, convert it to your\n            own format and render it as fast as possible. </para>\n            \n            <para>This flag is designed to be used with <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/> for best\n            results.</para>\n            \n            <para>Scenes with thousands of extremely small meshes packed\n            in deeply nested nodes exist for almost all file formats.\n            Usage of this and <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/> usually fixes them all and\n            makes them renderable.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FlipUVs\">\n            <summary>\n            Flips all UV coordinates along the y-axis\n            and adjusts material settings/bitangents accordingly.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FlipWindingOrder\">\n            <summary>\n            Flips face winding order from CCW (default) to CW.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SplitByBoneCount\">\n            <summary>\n            Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.Debone\">\n            <summary>\n            <para>Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters\n            are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while\n            animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. \n            </para>\n            <para>Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones\n            removed if and only if all bones within the scene qualify for removal.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GlobalScale\">\n            <summary>\n            This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. \n            Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to control this.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ExcludeComponent\">\n            <summary>\n            Enumerates components of the scene or mesh data that\n            can be excluded from the import using the post process step\n            RemoveComponent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.None\">\n            <summary>\n            No components to be excluded.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Normals\">\n            <summary>\n            Removes normal vectors\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.TangentBasis\">\n            <summary>\n            Removes tangents/binormals\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Colors\">\n            <summary>\n            Removes all color sets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.TexCoords\">\n            <summary>\n            Removes all texture UV sets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Boneweights\">\n            <summary>\n            Remove all boneweights from all meshes. Scenegraph\n            nodes corresponding to the bones are NOT removed.\n            Use OptimizeGraph step to remove them.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Animations\">\n            <summary>\n            Removes all node animations.  Coressponding scenegraph\n            nodes are NOT removed. Use OptimizeGraph step to \n            remove them.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Textures\">\n            <summary>\n            Removes all embedded textures.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Lights\">\n            <summary>\n            Removes all light sources. The corresponding scenegraph nodes are\n            NOT removed. Use the OptimizeGraph step to do this.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Cameras\">\n            <summary>\n            Removes all cameras. The corresponding scenegraph\n            nodes are NOT removed. Use the OptimizeGraph step\n            to do this.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Meshes\">\n            <summary>\n            Removes all meshes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Materials\">\n            <summary>\n            Removes all materials. One default material will be generated.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PrimitiveType\">\n            <summary>\n            Enumerates geometric primitive types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Point\">\n            <summary>\n            Point primitive. This is just a single vertex\n            in the virtual world. A face has one index for such a primitive.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Line\">\n            <summary>\n            Line primitive. This is  a line defined through a start and an\n            end position. A face contains exactly two indices for such a primitive.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Triangle\">\n            <summary>\n            Triangle primitive, consisting of three indices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Polygon\">\n            <summary>\n            A n-Gon that has more than three edges (thus is not a triangle).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.AnimationBehaviour\">\n            <summary>\n            Defines an animation channel behaves outside the defined\n            time range. This corresponds to the prestate and poststates\n            of the animation node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Default\">\n            <summary>\n            The value from the default node transformation is taken.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Constant\">\n            <summary>\n            The nearest key value is used without interpolation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Linear\">\n            <summary>\n            The value of the nearest two keys is linearly extrapolated for the current\n            time value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Repeat\">\n            <summary>\n            The animation is repeated. If the animation key goes from n to m\n            and the current time is t, use the value at (t - n ) % (|m-n|).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.MeshMorphingMethod\">\n            <summary>\n            Defines the methods of mesh morphing supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.None\">\n            <summary>\n            No morphing.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.VertexBlend\">\n            <summary>\n            Interpolation between morph targets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.MorphNormalized\">\n            <summary>\n            Normalized morphing between morph targets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.MorphRelative\">\n            <summary>\n            Relative morphing between morph targets.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.LightSourceType\">\n            <summary>\n            Enumerates all supported light sources.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Undefined\">\n            <summary>\n            Unknown light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Directional\">\n            <summary>\n            Directional light source that has a well-defined\n            direction but is infinitely far away, e.g. the sun.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Point\">\n            <summary>\n            Point light source that has a well-defined position in\n            space but is omni-directional, e.g. a light bulb.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Spot\">\n            <summary>\n            Spot light source emits light from a position in space,\n            in a certain direction that is limited by an angle, like\n            a cone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Ambient\">\n            <summary>\n            Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and\n            is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Area\">\n            <summary>\n            An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.BlendMode\">\n            <summary>\n            Defines alpha blending flags, how the final\n            color value of a pixel is computed, based on the following equation:\n            <para>\n            sourceColor * sourceBlend + destColor * destBlend\n            </para>\n            <para>\n            Where the destColor is the previous color in the frame buffer\n            and sourceColor is the material color before the\n            transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BlendMode.Default\">\n            <summary>\n            Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BlendMode.Additive\">\n            <summary>\n            Additive blending: sourcecolor * 1 + destColor * 1.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ShadingMode\">\n            <summary>\n            Defines all shading models supported by the library.\n            <para>\n            The list of shading modes has been taken from Blender. See Blender\n            documentation for more information.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.None\">\n            <summary>\n            No shading mode defined.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Flat\">\n            <summary>\n            Flat shading. Shading is done on a per-face basis and is diffuse only. Also known\n            as 'faceted shading'.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Gouraud\">\n            <summary>\n            Simple Gouraud shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Phong\">\n            <summary>\n            Phong Shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Blinn\">\n            <summary>\n            Phong-Blinn Shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Toon\">\n            <summary>\n            Toon-shading, also known as a 'comic' shader.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.OrenNayar\">\n            <summary>\n            OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness\n            of the material into account.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Minnaert\">\n            <summary>\n            Minnaert shading model. Extension to standard Lambertian shading, taking the \"darkness\" of\n            the material into account.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.CookTorrance\">\n            <summary>\n            CookTorrance shading model. Special shader for metallic surfaces.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.NoShading\">\n            <summary>\n            No shading at all. Constant light influence of 1.0.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Fresnel\">\n            <summary>\n            Fresnel shading.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureFlags\">\n            <summary>\n            Defines some mixed flags for a particular texture. This corresponds\n            to the AI_MAT_KEY_TEXFLAGS property.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.Invert\">\n            <summary>\n            The texture's color values have to be inverted (componentwise 1-n).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.UseAlpha\">\n            <summary>\n            Explicit request to the application to process the alpha channel of the texture. This is mutually\n            exclusive with <see cref=\"F:Assimp.TextureFlags.IgnoreAlpha\"/>. These flags are\n            set if the library can say for sure that the alpha channel is used/is not used.\n            If the model format does not define this, iti s left to the application to decide\n            whether the texture alpha channel - if any - is evaluated or not.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.IgnoreAlpha\">\n            <summary>\n            Explicit request to the application to ignore the alpha channel of the texture. This is mutually\n            exclusive with <see cref=\"F:Assimp.TextureFlags.UseAlpha\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureWrapMode\">\n            <summary>\n            Defines how UV coordinates outside the [0..1] range are handled. Commonly\n            referred to as the 'wrapping mode'\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Wrap\">\n            <summary>\n            A texture coordinate u|v is translated to u % 1| v % 1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Clamp\">\n            <summary>\n            Texture coordinates outside [0...1] are clamped to the nearest valid value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Mirror\">\n            <summary>\n            A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero\n            and 1 - (u % 1) | 1 - (v % 1) otherwise.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Decal\">\n            <summary>\n            If the texture coordinates for a pixel are outside [0...1] the texture is not\n            applied to that pixel.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureMapping\">\n            <summary>\n            Defines how texture coordinates are generated\n            <para>\n            Real-time applications typically require full UV coordinates. So the use\n            of <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/> step is highly recommended.\n            It generates proper UV channels for non-UV mapped objects, as long as an accurate\n            description of how the mapping should look like is given.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.FromUV\">\n            <summary>\n            Coordinates are taken from the an existing UV channel.\n            <para>\n            The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates\n            are to be taken from since meshes can have more than one UV channel.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Sphere\">\n            <summary>\n            Spherical mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Cylinder\">\n            <summary>\n            Cylinder mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Box\">\n            <summary>\n            Cubic mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Plane\">\n            <summary>\n            Planar mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Unknown\">\n            <summary>\n            Unknown mapping that is not recognied.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureOperation\">\n            <summary>\n            Defines how the Nth texture of a specific type is combined\n            with the result of all previous layers.\n            <para>\n            Example (left: key, right: value):\n            <code>\n            DiffColor0     - gray\n            DiffTextureOp0 - TextureOperation.Multiply\n            DiffTexture0   - tex1.png\n            DiffTextureOp0 - TextureOperation.Add\n            DiffTexture1   - tex2.png\n            </code>\n            <para>\n            Written as an equation, the final diffuse term for a specific\n            pixel would be:\n            </para>\n            <code>\n            diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib;\n            </code>\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Multiply\">\n            <summary>\n            T = T1 * T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Add\">\n            <summary>\n            T = T1 + T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Subtract\">\n            <summary>\n            T = T1 - T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Divide\">\n            <summary>\n            T = T1 / T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.SmoothAdd\">\n            <summary>\n            T = (T1 + T2) - (T1 * T2)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.SignedAdd\">\n            <summary>\n            T = T1 + (T2 - 0.5)\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureType\">\n            <summary>\n            Defines the purpose of a texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.None\">\n            <summary>\n            No texture, but the value can be used as a 'texture semantic'.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Diffuse\">\n            <summary>\n            A diffuse texture that is combined with the result of the diffuse lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Specular\">\n            <summary>\n            A specular texture that is combined with the result of the specular lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Ambient\">\n            <summary>\n            An ambient texture that is combined with the ambient lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Emissive\">\n            <summary>\n            An emissive texture that is added to the result of the lighting calculation. It is not influenced\n            by incoming light, instead it represents the light that the object is naturally emitting.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Height\">\n            <summary>\n            A height map texture. by convention, higher gray-scale values stand for\n            higher elevations from some base height.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Normals\">\n            <summary>\n            A tangent-space normal map. There are several conventions for normal maps\n            and Assimp does (intentionally) not distinguish here.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Shininess\">\n            <summary>\n            A texture that defines the glossiness of the material. This is the exponent of the specular (phong)\n            lighting equation. Usually there is a conversion function defined to map the linear color values\n            in the texture to a suitable exponent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Opacity\">\n            <summary>\n            The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite\n            the opposite.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Displacement\">\n            <summary>\n            A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Lightmap\">\n            <summary>\n            A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The\n            texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Reflection\">\n            <summary>\n            A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Unknown\">\n            <summary>\n            An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any\n            further postprocessing.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.SceneFlags\">\n            <summary>\n            Defines the state of the imported scene data structure.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.None\">\n            <summary>\n            Default state of the scene, it imported successfully.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Incomplete\">\n            <summary>\n            Specifies that the scene data structure that was imported is not complete.\n            This flag bypasses some internal validations and allows the import\n            of animation skeletons, material libaries, or camera animation paths\n            using Assimp. Most applications won't support such data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Validated\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>\n            post process step if validation is successful. In a validated scene you can be sure that any\n            cross references in the data structure (e.g. vertex indices) are valid.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.ValidationWarning\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>\n            post process step if validation is successful, but some issues have been found. This can for example\n            mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex\n            do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful\n            for applications which do not capture Assimp's log output.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.NonVerboseFormat\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> post process step.\n            It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the\n            verbose format, all vertices are unique where no vertex is ever referenced by more than one face.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Terrain\">\n            <summary>\n            Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles,\n            in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the\n            z-axis stores the elevation at a specific point.\n            <para>\n            TER (Terragen) and HMP (3D Game Studio) are height map formats.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.AllowShared\">\n            <summary>\n            Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from <see cref=\"F:Assimp.SceneFlags.NonVerboseFormat\"/> as \n            that has internal meanings about postprocessing steps.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ReturnCode\">\n            <summary>\n            Enumerates Assimp function result codes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.Success\">\n            <summary>\n            Function returned successfully.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.Failure\">\n            <summary>\n            There was an error.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.OutOfMemory\">\n            <summary>\n            Assimp ran out of memory.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Origin\">\n            <summary>\n            Seek origins for Assimp's virtual file system API.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.Set\">\n            <summary>\n            Beginning of the file\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.Current\">\n            <summary>\n            Current position of the file pointer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.End\">\n            <summary>\n            End of the file, offsets must be negative.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.DefaultLogStream\">\n            <summary>\n            Enumerates predefined log streaming destinations.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.File\">\n            <summary>\n            Stream log to a file\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.StdOut\">\n            <summary>\n            Stream log to the standard output\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.StdErr\">\n            <summary>\n            Stream log to the standard error output.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.Debugger\">\n            <summary>\n            MSVC only: Stream the log to the debugger (this relies\n            on OutputDebugString from the Win32 SDK).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PropertyType\">\n            <summary>\n            Defines material property types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Float\">\n            <summary>\n            Array of single-precision (32 bit) floats.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Double\">\n            <summary>\n            Array of double-precision (64 bit) floats.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.String\">\n            <summary>\n            Property is a string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Integer\">\n            <summary>\n            Array of 32 bit integers.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Buffer\">\n            <summary>\n            Byte buffer where the content is undefined.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.CompileFlags\">\n            <summary>\n            Enumerates how the native Assimp DLL was compiled\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.Shared\">\n            <summary>\n            Assimp compiled as a shared object (Windows: DLL);\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.STLport\">\n            <summary>\n            Assimp was compiled against STLport\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.Debug\">\n            <summary>\n            Assimp was compiled as a debug build\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.NoBoost\">\n            <summary>\n            Assimp was compiled with the boost work around.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.SingleThreaded\">\n            <summary>\n            Assimp was compiled built to run single threaded.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.UVTransformFlags\">\n            <summary>\n            Defines how UV coordinates should be transformed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Scaling\">\n            <summary>\n            Scaling is evaluated.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Rotation\">\n            <summary>\n            Rotation is evaluated.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Translation\">\n            <summary>\n            Translation is evaluated.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.FileIOMode\">\n            <summary>\n            Defines the desired file I/O mode is when opening a new file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.Write\">\n            <summary>\n            Open the file for writing.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.WriteBinary\">\n            <summary>\n            Open the file for writing binary data to it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.WriteText\">\n            <summary>\n            Open the file for writing text data to it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.Read\">\n            <summary>\n            Open the file for reading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.ReadBinary\">\n            <summary>\n            Open the file for reading binary data from it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.ReadText\">\n            <summary>\n            Open the file for reading text data from it.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ImporterFeatureFlags\">\n            <summary>\n            Defines flags that indicate level of support for common features for a given importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsText\">\n            <summary>\n            Indicates there is a textual encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsBinary\">\n            <summary>\n            Indicates there is a binary encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsCompressed\">\n            <summary>\n            Indicates there is a compressed encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.LimitedSupport\">\n            <summary>\n            Indicates that the importer reads only a very particular subset of the file format. This is common\n            for formats that cannot easily be mapped to the Scene data structure.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.Experimental\">\n            <summary>\n            Indicates that the importer is experimental and used with caution - this is only reserved for importers still in\n            development, and not typically yet in released production code.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ExportDataBlob\">\n            <summary>\n            Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in\n            turn can reference another and so on. This is used to allow exporters to write more than one output for a given\n            scene, such as material files. Existence of such files depends on the format.\n            </summary>\n            <remarks>\n            The stream representation of an ExportDataBlob is as follows:\n            <code>\n            String: Name of the Blob\n            int: Length of Binary Data\n            byte[]: Binary Data\n            bool: If has next data blob\n                String: Name of nested blob\n                int: Length of nested blob binary data\n                byte[]: Nested blob binary data\n                bool: If nested blob has next data blob\n                ....\n            </code>\n            </remarks>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.Name\">\n            <summary>\n            Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files\n            that are nested will have names.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.Data\">\n            <summary>\n            Get the blob data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.NextBlob\">\n            <summary>\n            Gets the next data blob.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.HasData\">\n            <summary>\n            Gets if the blob data is valid.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.#ctor(Assimp.Unmanaged.AiExportDataBlob@)\">\n            <summary>\n            Creates a new ExportDataBlob.\n            </summary>\n            <param name=\"dataBlob\">Unmanaged structure.</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Creates a new ExportDataBlob.\n            </summary>\n            <param name=\"name\">Name</param>\n            <param name=\"data\">Data</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.ToStream(System.IO.Stream)\">\n            <summary>\n            Writes the data blob to the specified stream.\n            </summary>\n            <param name=\"stream\">Output stream</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.FromStream(System.IO.Stream)\">\n            <summary>\n            Reads a data blob from the specified stream.\n            </summary>\n            <param name=\"stream\">Input stream</param>\n            <returns>Data blob</returns>\n        </member>\n        <member name=\"T:Assimp.ExportFormatDescription\">\n            <summary>\n            Describes a file format which Assimp can export to.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.FormatId\">\n            <summary>\n            Gets a short string ID to uniquely identify the export format. E.g. \"collada\" or \"obj\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.Description\">\n            <summary>\n            Gets a short description of the file format to present to users.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.FileExtension\">\n            <summary>\n            Gets the recommended file extension for the exported file in lower case.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ExportFormatDescription.#ctor(Assimp.Unmanaged.AiExportFormatDesc@)\">\n            <summary>\n            Constructs a new ExportFormatDescription.\n            </summary>\n            <param name=\"formatDesc\">Unmanaged structure</param>\n        </member>\n        <member name=\"T:Assimp.Face\">\n            <summary>\n            A single face in a mesh, referring to multiple vertices. This can be a triangle\n            if the index count is equal to three, or a polygon if the count is greater than three.\n            \n            Since multiple primitive types can be contained in a single mesh, this approach\n            allows you to better examine how the mesh is constructed. If you use the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            post process step flag during import, then each mesh will be homogenous where primitive type is concerned.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.IndexCount\">\n            <summary>\n            Gets the number of indices defined in the face.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.HasIndices\">\n            <summary>\n            Gets if the face has faces (should always be true).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.Indices\">\n            <summary>\n            Gets or sets the indices that refer to positions of vertex data in the mesh's vertex \n            arrays.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Face\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.#ctor(System.Int32[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Face\"/> class.\n            </summary>\n            <param name=\"indices\">Face indices</param>\n        </member>\n        <member name=\"P:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#ToNative(System.IntPtr,Assimp.Unmanaged.AiFace@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#FromNative(Assimp.Unmanaged.AiFace@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Face.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.FileIOSystem\">\n            <summary>\n            Simple implementation of an IOSystem that searches for files on the disk. This implementation\n            can be given a number of search directories that it will attempt to locate the file in first, before\n            using the file path given by Assimp. That way, you can load models that have files distributed in a number of other\n            directories besides the root model's.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.#ctor\">\n            <summary>\n            Constructs a new FileIOSystem that does not have any search directories.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.#ctor(System.String[])\">\n            <summary>\n            Constructs a new FileIOSystem that uses the specified search directories.\n            </summary>\n            <param name=\"searchPaths\">Search directories to search for files in</param>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.SetSearchDirectories(System.String[])\">\n            <summary>\n            Sets the search directories the FileIOSystem will use when searching for files.\n            </summary>\n            <param name=\"searchPaths\">Directory paths</param>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.GetSearchDirectories\">\n            <summary>\n            Gets the search directories the FileIOSystem is using.\n            </summary>\n            <returns>Directory paths</returns>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.OpenFile(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Opens a stream to a file.\n            </summary>\n            <param name=\"pathToFile\">Path to the file</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <returns>The IO stream</returns>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.FindFile(System.String,System.String@)\">\n            <summary>\n            Finds the first file that matches the file name (name + extension) in the search paths.\n            </summary>\n            <param name=\"fileName\">File name (+ extension) to search for</param>\n            <param name=\"pathToFile\">Found file path</param>\n            <returns>True if the file was found, false otherwise</returns>\n        </member>\n        <member name=\"T:Assimp.FileIOStream\">\n            <summary>\n            Wraps a FileStream.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ImporterDescription\">\n            <summary>\n            Metadata and feature support information for a given importer.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Name\">\n            <summary>\n            Gets the name of the importer (e.g. Blender3D Importer)\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Author\">\n            <summary>\n            Gets the original author (blank if unknown or assimp team).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Maintainer\">\n            <summary>\n            Gets the name of the current maintainer, if empty then the author maintains.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Comments\">\n            <summary>\n            Gets any implementation comments.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.FeatureFlags\">\n            <summary>\n            Gets the features supported by the importer.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.MinVersion\">\n            <summary>\n            Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.MaxVersion\">\n            <summary>\n            Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.FileExtensions\">\n            <summary>\n            Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.IMarshalable`2\">\n            <summary>\n            Represents an object that can be marshaled to and from a native representation.\n            </summary>\n            <typeparam name=\"Managed\">Managed object type</typeparam>\n            <typeparam name=\"Native\">Native value type</typeparam>\n        </member>\n        <member name=\"P:Assimp.IMarshalable`2.IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.IMarshalable`2.FromNative(`1@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"T:Assimp.INativeCustomMarshaler\">\n            <summary>\n            Custom marshaler for usage with the <see cref=\"T:Assimp.MemoryHelper\"/> for performing marshaling\n            to-and-from unmanaged memory for non-blittable types. A type must be attributed with <see cref=\"T:Assimp.NativeCustomMarshalerAttribute\"/>\n            to automatically have an instance of its marshaler be utilized.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.INativeCustomMarshaler.NativeDataSize\">\n            <summary>\n            Gets the native data size in bytes.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.INativeCustomMarshaler.MarshalManagedToNative(System.Object,System.IntPtr)\">\n            <summary>\n            Marshals the managed object to the unmanaged chunk of memory.\n            </summary>\n            <param name=\"managedObj\">Managed object to marshal.</param>\n            <param name=\"nativeData\">Unmanaged chunk of memory to write to.</param>\n        </member>\n        <member name=\"M:Assimp.INativeCustomMarshaler.MarshalNativeToManaged(System.IntPtr)\">\n            <summary>\n            Marshals the managed object from the unmanaged chunk of memory.\n            </summary>\n            <param name=\"nativeData\">Unmanaged chunk of memory to read from.</param>\n            <returns>Managed object marshaled.</returns>\n        </member>\n        <member name=\"T:Assimp.IOStream\">\n            <summary>\n            Defines a stream to some file input or output source. This object is responsible for reading/writing data\n            that is used by Assimp.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.IsDisposed\">\n            <summary>\n            Gets whether or not this IOStream has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.PathToFile\">\n            <summary>\n            Gets the original path to file given by Assimp.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.FileMode\">\n            <summary>\n            Gets the original desired file access mode.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.IsValid\">\n            <summary>\n            Gets whether the stream is in fact valid - that is, the input/output has been\n            properly located and can be read/written.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.#ctor(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Constructs a new IOStream.\n            </summary>\n            <param name=\"pathToFile\">Path to file given by Assimp</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.IOStream\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Dispose\">\n            <summary>\n            Disposes of resources held by the IOStream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Write(System.Byte[],System.Int64)\">\n            <summary>\n            Writes data to the stream.\n            </summary>\n            <param name=\"dataToWrite\">Data to write</param>\n            <param name=\"count\">Number of bytes to write</param>\n            <returns>Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Read(System.Byte[],System.Int64)\">\n            <summary>\n            Reads data from the stream.\n            </summary>\n            <param name=\"dataRead\">Byte buffer to store the read data in</param>\n            <param name=\"count\">Number of bytes to read</param>\n            <returns>Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Seek(System.Int64,Assimp.Origin)\">\n            <summary>\n            Sets the current file position pointer.\n            </summary>\n            <param name=\"offset\">Offset in bytes from the origin</param>\n            <param name=\"seekOrigin\">Origin reference</param>\n            <returns>ReturnCode indicating success or failure.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.GetPosition\">\n            <summary>\n            Gets the current file position pointer (in bytes).\n            </summary>\n            <returns>Current file position pointer (in bytes)</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.GetFileSize\">\n            <summary>\n            Gets the total file size (in bytes).\n            </summary>\n            <returns>File size in bytes</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Flush\">\n            <summary>\n            Flushes all data currently in the stream buffers.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Close\">\n            <summary>\n            Closes the stream - flushing any data not yet read/written and disposes of resources.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.IOSystem\">\n            <summary>\n            Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening\n            files to read during import, and creating/writing to files during export.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOSystem.IsDisposed\">\n            <summary>\n            Gets whether or not this IOSystem has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOSystem.OpenFileCount\">\n            <summary>\n            Gets the number of currently opened streams.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.#ctor\">\n            <summary>\n            Constructs a new IOSystem.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.IOSystem\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.OpenFile(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Opens a stream to a file.\n            </summary>\n            <param name=\"pathToFile\">Path to the file</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <returns>The IO stream</returns>\n        </member>\n        <member name=\"M:Assimp.IOSystem.CloseFile(Assimp.IOStream)\">\n            <summary>\n            Closes a stream that is owned by this IOSystem.\n            </summary>\n            <param name=\"stream\">Stream to close</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.CloseAllFiles\">\n            <summary>\n            Closes all outstanding streams owned by this IOSystem.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Dispose\">\n            <summary>\n            Disposes of all resources held by this object.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"T:Assimp.Light\">\n            <summary>\n            Describes a light source in the scene. Assimp supports multiple light sources\n            including spot, point, and directional lights. All are defined by a single structure\n            and distinguished by their parameters. Lights have corresponding nodes in the scenegraph.\n            <para>Some file formats such as 3DS and ASE export a \"target point\", e.g. the point\n            a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode\n            of a spotlight's main node called \"spotName.Target\". However, this is just additional information\n            then, the transform tracks of the main node make the spot light already point in the right direction.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Name\">\n            <summary>\n            Gets or sets the name of the light source. This corresponds to a node present in the scenegraph.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.LightType\">\n            <summary>\n            Gets or sets the type of light source. This should never be undefined.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AngleInnerCone\">\n            <summary>\n            Gets or sets the inner angle of a spot light's light cone. The spot light has\n            maximum influence on objects inside this angle. The angle is given in radians, it\n            is 2PI for point lights and defined for directional lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AngleOuterCone\">\n            <summary>\n            Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside\n            this angle. The angle is given in radians. It is 2PI for point lights and undefined for\n            directional lights. The outer angle must be greater than or equal to the inner angle.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationConstant\">\n            <summary>\n            Gets or sets the constant light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>.\n            <para>This member corresponds to the att0 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationLinear\">\n            <summary>\n            Gets or sets the linear light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>\n            <para>This member corresponds to the att1 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationQuadratic\">\n            <summary>\n            Gets or sets the quadratic light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>.\n            <para>This member corresponds to the att2 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Position\">\n            <summary>\n            Gets or sets the position of the light source in space, relative to the\n            transformation of the node corresponding to the light. This is undefined for\n            directional lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Direction\">\n            <summary>\n            Gets or sets the direction of the light source in space, relative to the transformation\n            of the node corresponding to the light. This is undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Up\">\n            <summary>\n            Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light.\n            This is undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorDiffuse\">\n            <summary>\n            Gets or sets the diffuse color of the light source.  The diffuse light color is multiplied with\n            the diffuse material color to obtain the final color that contributes to the diffuse shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorSpecular\">\n            <summary>\n            Gets or sets the specular color of the light source. The specular light color is multiplied with the\n            specular material color to obtain the final color that contributes to the specular shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorAmbient\">\n            <summary>\n            Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient\n            material color to obtain the final color that contributes to the ambient shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AreaSize\">\n            <summary>\n            Gets or sets the Width (X) and Height (Y) of the area that represents an <see cref=\"F:Assimp.LightSourceType.Area\"/> light.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Light.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Light\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#ToNative(System.IntPtr,Assimp.Unmanaged.AiLight@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#FromNative(Assimp.Unmanaged.AiLight@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Light.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.LoggingCallback\">\n            <summary>\n            Callback delegate for Assimp's LogStream.\n            </summary>\n            <param name=\"msg\">Log message</param>\n            <param name=\"userData\">Supplied user data</param>\n        </member>\n        <member name=\"T:Assimp.LogStream\">\n            <summary>\n            Represents a log stream, which receives all log messages and streams them somewhere.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsVerboseLoggingEnabled\">\n            <summary>\n            Gets or sets, if verbose logging is enabled globally.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.UserData\">\n            <summary>\n            Gets or sets the user data to be passed to the callback.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsDisposed\">\n            <summary>\n            Gets whether the logstream has been disposed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsAttached\">\n            <summary>\n            Gets whether or not the logstream is currently attached to the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#cctor\">\n            <summary>\n            Static constructor.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(System.String)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"userData\">User-supplied data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(Assimp.LoggingCallback)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"callback\">Logging callback that is called when messages are received by the log stream.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(Assimp.LoggingCallback,System.String)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"callback\">Logging callback that is called when messages are received by the log stream.</param>\n            <param name=\"userData\">User-supplied data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.LogStream\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.DetachAllLogstreams\">\n            <summary>\n            Detaches all active logstreams from the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.GetAttachedLogStreams\">\n            <summary>\n            Gets all active logstreams that are currently attached to the library.\n            </summary>\n            <returns>Collection of active logstreams attached to the library.</returns>\n        </member>\n        <member name=\"M:Assimp.LogStream.Attach\">\n            <summary>\n            Attaches the logstream to the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Detach\">\n            <summary>\n            Detaches the logstream from the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Log(System.String)\">\n            <summary>\n            Logs a message.\n            </summary>\n            <param name=\"msg\">Message contents</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Dispose\">\n            <summary>\n            Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.LogMessage(System.String,System.String)\">\n            <summary>\n            Override this method to log a message for a subclass of Logstream, if no callback\n            was set.\n            </summary>\n            <param name=\"msg\">Message</param>\n            <param name=\"userData\">User data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnAttach\">\n            <summary>\n            Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnDetach\">\n            <summary>\n            Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving\n            messages until it is re-attached.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ConsoleLogStream\">\n            <summary>\n            Log stream that writes messages to the Console.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.#ctor\">\n            <summary>\n            Constructs a new console logstream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.#ctor(System.String)\">\n            <summary>\n            Constructs a new console logstream.\n            </summary>\n            <param name=\"userData\">User supplied data</param>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.LogMessage(System.String,System.String)\">\n            <summary>\n            Log a message to the console.\n            </summary>\n            <param name=\"msg\">Message</param>\n            <param name=\"userData\">Userdata</param>\n        </member>\n        <member name=\"T:Assimp.Material\">\n            <summary>\n            A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally\n            all this information is stored as key-value pair properties. The class contains many convienence methods and properties for\n            accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present,\n            and if they aren't a default value will be returned.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PropertyCount\">\n            <summary>\n            Gets the number of properties contained in the material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasName\">\n            <summary>\n            Checks if the material has a name property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Name\">\n            <summary>\n            Gets the material name value, if any. Default value is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTwoSided\">\n            <summary>\n            Checks if the material has a two-sided property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsTwoSided\">\n            <summary>\n            Gets if the material should be rendered as two-sided. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShadingMode\">\n            <summary>\n            Checks if the material has a shading-mode property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShadingMode\">\n            <summary>\n            Gets the shading mode. Default value is <see cref=\"F:Assimp.ShadingMode.None\"/>, meaning it is not defined.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasWireFrame\">\n            <summary>\n            Checks if the material has a wireframe property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsWireFrameEnabled\">\n            <summary>\n            Gets if wireframe should be enabled. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasBlendMode\">\n            <summary>\n            Checks if the material has a blend mode property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.BlendMode\">\n            <summary>\n            Gets the blending mode. Default value is <see cref=\"F:Assimp.BlendMode.Default\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasOpacity\">\n            <summary>\n            Checks if the material has an opacity property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Opacity\">\n            <summary>\n            Gets the opacity. Default value is 1.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasBumpScaling\">\n            <summary>\n            Checks if the material has a bump scaling property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.BumpScaling\">\n            <summary>\n            Gets the bump scaling. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShininess\">\n            <summary>\n            Checks if the material has a shininess property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Shininess\">\n            <summary>\n            Gets the shininess. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShininessStrength\">\n            <summary>\n            Checks if the material has a shininess strength property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShininessStrength\">\n            <summary>\n            Gets the shininess strength. Default vaulue is 1.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasReflectivity\">\n            <summary>\n            Checks if the material has a reflectivty property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Reflectivity\">\n            <summary>\n            Gets the reflectivity. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorDiffuse\">\n            <summary>\n            Checks if the material has a color diffuse property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorDiffuse\">\n            <summary>\n            Gets the color diffuse. Default value is white.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorAmbient\">\n            <summary>\n            Checks if the material has a color ambient property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorAmbient\">\n            <summary>\n            Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorSpecular\">\n            <summary>\n            Checks if the material has a color specular property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorSpecular\">\n            <summary>\n            Gets the color specular. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorEmissive\">\n            <summary>\n            Checks if the material has a color emissive property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorEmissive\">\n            <summary>\n            Gets the color emissive. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorTransparent\">\n            <summary>\n            Checks if the material has a color transparent property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorTransparent\">\n            <summary>\n            Gets the color transparent. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorReflective\">\n            <summary>\n            Checks if the material has a color reflective property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorReflective\">\n            <summary>\n            Gets the color reflective. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureDiffuse\">\n            <summary>\n            Gets if the material has a diffuse texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureDiffuse\">\n            <summary>\n            Gets or sets diffuse texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureSpecular\">\n            <summary>\n            Gets if the material has a specular texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureSpecular\">\n            <summary>\n            Gets or sets specular texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureAmbient\">\n            <summary>\n            Gets if the material has a ambient texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureAmbient\">\n            <summary>\n            Gets or sets ambient texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureEmissive\">\n            <summary>\n            Gets if the material has a emissive texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureEmissive\">\n            <summary>\n            Gets or sets emissive texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureHeight\">\n            <summary>\n            Gets if the material has a height texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureHeight\">\n            <summary>\n            Gets or sets height texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureNormal\">\n            <summary>\n            Gets if the material has a normal texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureNormal\">\n            <summary>\n            Gets or sets normal texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureOpacity\">\n            <summary>\n            Gets if the material has an opacity texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureOpacity\">\n            <summary>\n            Gets or sets opacity texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureDisplacement\">\n            <summary>\n            Gets if the material has a displacement texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureDisplacement\">\n            <summary>\n            Gets or sets displacement texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureLightMap\">\n            <summary>\n            Gets if the material has a light map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureLightMap\">\n            <summary>\n            Gets or sets light map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureReflection\">\n            <summary>\n            Gets if the material has a reflection texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureReflection\">\n            <summary>\n            Gets or sets reflection texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Material\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.CreateFullyQualifiedName(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\". This is the name that is used as the material dictionary key.\n            </summary>\n            <param name=\"baseName\">Key basename, this must not be null or empty</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>The fully qualified name</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetNonTextureProperty(System.String)\">\n            <summary>\n            Gets the non-texture properties contained in this Material. The name should be\n            the \"base name\", as in it should not contain texture type/texture index information. E.g. \"$clr.diffuse\" rather than \"$clr.diffuse,0,0\". The extra\n            data will be filled in automatically.\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetProperty(System.String)\">\n            <summary>\n            Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasNonTextureProperty(System.String)\">\n            <summary>\n            Checks if the material has the specified non-texture property. The name should be\n            the \"base name\", as in it should not contain texture type/texture index information. E.g. \"$clr.diffuse\" rather than \"$clr.diffuse,0,0\". The extra\n            data will be filled in automatically.\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasProperty(System.String)\">\n            <summary>\n            Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddProperty(Assimp.MaterialProperty)\">\n            <summary>\n            Adds a property to this material.\n            </summary>\n            <param name=\"matProp\">Material property</param>\n            <returns>True if the property was successfully added, false otherwise (e.g. null or key already present).</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveNonTextureProperty(System.String)\">\n            <summary>\n            Removes a non-texture property from the material.\n            </summary>\n            <param name=\"baseName\">Property name</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Removes a property from the material.\n            </summary>\n            <param name=\"baseName\">Name of the property</param>\n            <param name=\"texType\">Property texture type</param>\n            <param name=\"texIndex\">Property texture index</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveProperty(System.String)\">\n            <summary>\n            Removes a property from the material.\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property ({basename},{texType},{texIndex})</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.Clear\">\n            <summary>\n            Removes all properties from the material;\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.GetAllProperties\">\n            <summary>\n            Gets -all- properties contained in the Material.\n            </summary>\n            <returns>All properties in the material property map.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTextureCount(Assimp.TextureType)\">\n            <summary>\n            Gets all the number of textures that are of the specified texture type.\n            </summary>\n            <param name=\"texType\">Texture type</param>\n            <returns>Texture count</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddMaterialTexture(Assimp.TextureSlot@)\">\n            <summary>\n            Adds a texture to the material - this bulk creates a property for each field. This will\n            either create properties or overwrite existing properties. If the texture has no\n            file path, nothing is added.\n            </summary>\n            <param name=\"texture\">Texture to add</param>\n            <returns>True if the texture properties were added or modified</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddMaterialTexture(Assimp.TextureSlot@,System.Boolean)\">\n            <summary>\n            Adds a texture to the material - this bulk creates a property for each field. This will\n            either create properties or overwrite existing properties. If the texture has no\n            file path, nothing is added.\n            </summary>\n            <param name=\"texture\">Texture to add</param>\n            <param name=\"onlySetFilePath\">True to only set the texture's file path, false otherwise</param>\n            <returns>True if the texture properties were added or modified</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveMaterialTexture(Assimp.TextureSlot@)\">\n            <summary>\n            Removes a texture from the material - this bulk removes a property for each field.\n            If the texture has no file path, nothing is removed\n            </summary>\n            <param name=\"texture\">Texture to remove</param>\n            <returns>True if the texture was removed, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTexture(Assimp.TextureType,System.Int32,Assimp.TextureSlot@)\">\n            <summary>\n            Gets a texture that corresponds to the type/index.\n            </summary>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"texIndex\">Texture index</param>\n            <param name=\"texture\">Texture description</param>\n            <returns>True if the texture was found in the material</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTextures(Assimp.TextureType)\">\n            <summary>\n            Gets all textures that correspond to the type.\n            </summary>\n            <param name=\"type\">Texture type</param>\n            <returns>The array of textures</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetAllMaterialTextures\">\n            <summary>\n            Gets all textures in the material.\n            </summary>\n            <returns>The array of textures</returns>\n        </member>\n        <member name=\"P:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMaterial@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#FromNative(Assimp.Unmanaged.AiMaterial@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Material.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MaterialProperty\">\n            <summary>\n            A key-value pairing that represents some material property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.Name\">\n            <summary>\n            Gets or sets the property key name. E.g. $tex.file. This corresponds to the\n            \"AiMatKeys\" base name constants.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.PropertyType\">\n            <summary>\n            Gets or sets the type of property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.ByteCount\">\n            <summary>\n            Gets the raw byte data count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.HasRawData\">\n            <summary>\n            Checks if the property has data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.RawData\">\n            <summary>\n            Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.TextureType\">\n            <summary>\n            Gets or sets the texture type semantic, for non-texture properties this is always <see cref=\"F:Assimp.TextureType.None\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.TextureIndex\">\n            <summary>\n            Gets or sets the texture index, for non-texture properties this is always zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.FullyQualifiedName\">\n            <summary>\n            Gets the property's fully qualified name. Format: \"{base name},{texture type semantic},{texture index}\". E.g. \"$clr.diffuse,0,0\". This\n            is the key that is used to index the property in the material property map.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a buffer property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"buffer\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Single)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a float property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Int32)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs an integer property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a boolean property.\n            </summary>\n            <param name=\"baseName\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a string property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a texture property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"textureIndex\">Texture index</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Single[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a float array property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"values\">Property values</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Int32[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a int array property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"values\">Property values</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,Assimp.Color3D)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a Color3D property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,Assimp.Color4D)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a Color4D property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatValue\">\n            <summary>\n            Gets the property raw data as a float.\n            </summary>\n            <returns>Float</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetFloatValue(System.Single)\">\n            <summary>\n            Sets the property raw data with a float.\n            </summary>\n            <param name=\"value\">Float.</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetDoubleValue\">\n            <summary>\n            Gets the property raw data as a double.\n            </summary>\n            <returns>Double</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetDoubleValue(System.Double)\">\n            <summary>\n            Sets the property raw data with a double.\n            </summary>\n            <param name=\"value\">Double.</param>\n            <returns>True if successful, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerValue\">\n            <summary>\n            Gets the property raw data as an integer.\n            </summary>\n            <returns>Integer</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetIntegerValue(System.Int32)\">\n            <summary>\n            Sets the property raw data as an integer.\n            </summary>\n            <param name=\"value\">Integer</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetStringValue\">\n            <summary>\n            Gets the property raw data as a string.\n            </summary>\n            <returns>String</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetStringValue(System.String)\">\n            <summary>\n            Sets the property raw data as string.\n            </summary>\n            <param name=\"value\">String</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatArrayValue(System.Int32)\">\n            <summary>\n            Gets the property raw data as a float array.\n            </summary>\n            <param name=\"count\">Number of elements to get</param>\n            <returns>Float array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatArrayValue\">\n            <summary>\n            Gets the property raw data as a float array.\n            </summary>\n            <returns>Float array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetFloatArrayValue(System.Single[])\">\n            <summary>\n            Sets the property raw data as a float array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetDoubleArrayValue\">\n            <summary>\n            Gets the property raw data as a double array.\n            </summary>\n            <returns>Double array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetDoubleArrayValue(System.Double[])\">\n            <summary>\n            Sets the property raw data as a double array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerArrayValue(System.Int32)\">\n            <summary>\n            Gets the property raw data as an integer array.\n            </summary>\n            <param name=\"count\">Number of elements to get</param>\n            <returns>Integer array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerArrayValue\">\n            <summary>\n            Gets the property raw data as an integer array.\n            </summary>\n            <returns>Integer array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetIntegerArrayValue(System.Int32[])\">\n            <summary>\n            Sets the property raw data as an integer array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetBooleanValue\">\n            <summary>\n            Gets the property raw data as a boolean.\n            </summary>\n            <returns>Boolean</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetBooleanValue(System.Boolean)\">\n            <summary>\n            Sets the property raw data as a boolean.\n            </summary>\n            <param name=\"value\">Boolean value</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetColor3DValue\">\n            <summary>\n            Gets the property raw data as a Color3D.\n            </summary>\n            <returns>Color3D</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetColor3DValue(Assimp.Color3D)\">\n            <summary>\n            Sets the property raw data as a Color3D.\n            </summary>\n            <param name=\"value\">Color3D</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetColor4DValue\">\n            <summary>\n            Gets the property raw data as a Color4D.\n            </summary>\n            <returns>Color4D</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetColor4DValue(Assimp.Color4D)\">\n            <summary>\n            Sets the property raw data as a Color4D.\n            </summary>\n            <param name=\"value\">Color4D</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMaterialProperty@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#FromNative(Assimp.Unmanaged.AiMaterialProperty@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Matrix3x3\">\n            <summary>\n            Represents a 3x3 matrix. Assimp docs say their matrices are always row-major,\n            and it looks like they're only describing the memory layout. Matrices are treated\n            as column vectors however (X base in the first column, Y base the second, and Z base the third)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A1\">\n            <summary>\n            Value at row 1, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A2\">\n            <summary>\n            Value at row 1, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A3\">\n            <summary>\n            Value at row 1, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B1\">\n            <summary>\n            Value at row 2, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B2\">\n            <summary>\n            Value at row 2, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B3\">\n            <summary>\n            Value at row 2, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C1\">\n            <summary>\n            Value at row 3, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C2\">\n            <summary>\n            Value at row 3, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C3\">\n            <summary>\n            Value at row 3, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.Identity\">\n            <summary>\n            Gets the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.IsIdentity\">\n            <summary>\n            Gets if this matrix is an identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.Item(System.Int32,System.Int32)\">\n            <summary>\n            Gets or sets the value at the specific one-based row, column\n            index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices\n            out of range return a value of zero.\n            \n            </summary>\n            <param name=\"i\">One-based Row index</param>\n            <param name=\"j\">One-based Column index</param>\n            <returns>Matrix value</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Matrix3x3.\n            </summary>\n            <param name=\"a1\">Element at row 1, column 1</param>\n            <param name=\"a2\">Element at row 1, column 2</param>\n            <param name=\"a3\">Element at row 1, column 3</param>\n            <param name=\"b1\">Element at row 2, column 1</param>\n            <param name=\"b2\">Element at row 2, column 2</param>\n            <param name=\"b3\">Element at row 2, column 3</param>\n            <param name=\"c1\">Element at row 3, column 1</param>\n            <param name=\"c2\">Element at row 3, column 2</param>\n            <param name=\"c3\">Element at row 3, column 3</param>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.#ctor(Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new Matrix3x3.\n            </summary>\n            <param name=\"rotMatrix\">A 4x4 matrix to construct from, only taking the rotation/scaling part.</param>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Transpose\">\n            <summary>\n            Transposes this matrix (rows become columns, vice versa).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Inverse\">\n            <summary>\n            Inverts the matrix. If the matrix is *not* invertible all elements are set to <see cref=\"F:System.Single.NaN\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Determinant\">\n            <summary>\n            Compute the determinant of this matrix.\n            </summary>\n            <returns>The determinant</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromEulerAnglesXYZ(System.Single,System.Single,System.Single)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"x\">Rotation angle about the x-axis, in radians.</param>\n            <param name=\"y\">Rotation angle about the y-axis, in radians.</param>\n            <param name=\"z\">Rotation angle about the z-axis, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromEulerAnglesXYZ(Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"angles\">Vector containing the rotation angles about the x, y, z axes, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationX(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the x-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationY(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the y-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationZ(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the z-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromAngleAxis(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix for a rotation about an arbitrary axis.\n            </summary>\n            <param name=\"radians\">Rotation angle, in radians</param>\n            <param name=\"axis\">Rotation axis, which should be a normalized vector.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromScaling(Assimp.Vector3D)\">\n            <summary>\n            Creates a scaling matrix.\n            </summary>\n            <param name=\"scaling\">Scaling vector</param>\n            <returns>The scaling vector</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromToMatrix(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix that rotates a vector called \"from\" into another\n            vector called \"to\". Based on an algorithm by Tomas Moller and John Hudges:\n            <para>\n            \"Efficiently Building a Matrix to Rotate One Vector to Another\"         \n            Journal of Graphics Tools, 4(4):1-4, 1999\n            </para>\n            </summary>\n            <param name=\"from\">Starting vector</param>\n            <param name=\"to\">Ending vector</param>\n            <returns>Rotation matrix to rotate from the start to end.</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Equality(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Tests equality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Inequality(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Tests inequality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Multiply(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations\n            are left to right.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>Multiplied matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Implicit(Assimp.Matrix4x4)~Assimp.Matrix3x3\">\n            <summary>\n            Implicit conversion from a 4x4 matrix to a 3x3 matrix.\n            </summary>\n            <param name=\"mat\">4x4 matrix</param>\n            <returns>3x3 matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Equals(Assimp.Matrix3x3)\">\n            <summary>\n            Tests equality between this matrix and another.\n            </summary>\n            <param name=\"other\">Other matrix to test</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Matrix4x4\">\n            <summary>\n            Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). \n            Memory layout is row major. Right handed conventions are used by default.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A1\">\n            <summary>\n            Value at row 1, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A2\">\n            <summary>\n            Value at row 1, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A3\">\n            <summary>\n            Value at row 1, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A4\">\n            <summary>\n            Value at row 1, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B1\">\n            <summary>\n            Value at row 2, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B2\">\n            <summary>\n            Value at row 2, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B3\">\n            <summary>\n            Value at row 2, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B4\">\n            <summary>\n            Value at row 2, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C1\">\n            <summary>\n            Value at row 3, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C2\">\n            <summary>\n            Value at row 3, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C3\">\n            <summary>\n            Value at row 3, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C4\">\n            <summary>\n            Value at row 3, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D1\">\n            <summary>\n            Value at row 4, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D2\">\n            <summary>\n            Value at row 4, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D3\">\n            <summary>\n            Value at row 4, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D4\">\n            <summary>\n            Value at row 4, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.Identity\">\n            <summary>\n            Gets the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.IsIdentity\">\n            <summary>\n            Gets if this matrix is an identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.Item(System.Int32,System.Int32)\">\n            <summary>\n            Gets or sets the value at the specific one-based row, column\n            index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices\n            out of range return a value of zero.\n            \n            </summary>\n            <param name=\"i\">One-based Row index</param>\n            <param name=\"j\">One-based Column index</param>\n            <returns>Matrix value</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Matrix4x4.\n            </summary>\n            <param name=\"a1\">Element at row 1, column 1</param>\n            <param name=\"a2\">Element at row 1, column 2</param>\n            <param name=\"a3\">Element at row 1, column 3</param>\n            <param name=\"a4\">Element at row 1, column 4</param>\n            <param name=\"b1\">Element at row 2, column 1</param>\n            <param name=\"b2\">Element at row 2, column 2</param>\n            <param name=\"b3\">Element at row 2, column 3</param>\n            <param name=\"b4\">Element at row 2, column 4</param>\n            <param name=\"c1\">Element at row 3, column 1</param>\n            <param name=\"c2\">Element at row 3, column 2</param>\n            <param name=\"c3\">Element at row 3, column 3</param>\n            <param name=\"c4\">Element at row 3, column 4</param>\n            <param name=\"d1\">Element at row 4, column 1</param>\n            <param name=\"d2\">Element at row 4, column 2</param>\n            <param name=\"d3\">Element at row 4, column 3</param>\n            <param name=\"d4\">Element at row 4, column 4</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.#ctor(Assimp.Matrix3x3)\">\n            <summary>\n            Constructs a new Matrix4x4.\n            </summary>\n            <param name=\"rotMatrix\">Rotation matrix to copy values from.</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Transpose\">\n            <summary>\n            Transposes this matrix (rows become columns, vice versa).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Inverse\">\n            <summary>\n            Inverts the matrix. If the matrix is *not* invertible all elements are set to <see cref=\"F:System.Single.NaN\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Determinant\">\n            <summary>\n            Compute the determinant of this matrix.\n            </summary>\n            <returns>The determinant</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Decompose(Assimp.Vector3D@,Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a transformation matrix into its original scale, rotation, and translation components. The\n            scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And\n            the translation is the output position for the x, y, z axes.\n            </summary>\n            <param name=\"scaling\">Vector to hold the scaling component</param>\n            <param name=\"rotation\">Quaternion to hold the rotation component</param>\n            <param name=\"translation\">Vector to hold the translation component</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.DecomposeNoScaling(Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton\n            quaternion. The translation receives the output position for the x, y, z axes.\n            </summary>\n            <param name=\"rotation\">Quaternion to hold the rotation component</param>\n            <param name=\"translation\">Vector to hold the translation component</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromEulerAnglesXYZ(System.Single,System.Single,System.Single)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"x\">Rotation angle about the x-axis, in radians.</param>\n            <param name=\"y\">Rotation angle about the y-axis, in radians.</param>\n            <param name=\"z\">Rotation angle about the z-axis, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromEulerAnglesXYZ(Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"angles\">Vector containing the rotation angles about the x, y, z axes, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationX(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the x-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationY(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the y-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationZ(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the z-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromAngleAxis(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix for a rotation about an arbitrary axis.\n            </summary>\n            <param name=\"radians\">Rotation angle, in radians</param>\n            <param name=\"axis\">Rotation axis, which should be a normalized vector.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromTranslation(Assimp.Vector3D)\">\n            <summary>\n            Creates a translation matrix.\n            </summary>\n            <param name=\"translation\">Translation vector</param>\n            <returns>The translation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromScaling(Assimp.Vector3D)\">\n            <summary>\n            Creates a scaling matrix.\n            </summary>\n            <param name=\"scaling\">Scaling vector</param>\n            <returns>The scaling vector</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromToMatrix(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix that rotates a vector called \"from\" into another\n            vector called \"to\". Based on an algorithm by Tomas Moller and John Hudges:\n            <para>\n            \"Efficiently Building a Matrix to Rotate One Vector to Another\"         \n            Journal of Graphics Tools, 4(4):1-4, 1999\n            </para>\n            </summary>\n            <param name=\"from\">Starting vector</param>\n            <param name=\"to\">Ending vector</param>\n            <returns>Rotation matrix to rotate from the start to end.</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Equality(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Tests equality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Inequality(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Tests inequality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Multiply(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations\n            are left to right.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>Multiplied matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Implicit(Assimp.Matrix3x3)~Assimp.Matrix4x4\">\n            <summary>\n            Implicit conversion from a 3x3 matrix to a 4x4 matrix.\n            </summary>\n            <param name=\"mat\">3x3 matrix</param>\n            <returns>4x4 matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Equals(Assimp.Matrix4x4)\">\n            <summary>\n            Tests equality between this matrix and another.\n            </summary>\n            <param name=\"other\">Other matrix to test</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.FreeNativeDelegate\">\n            <summary>\n            Delegate for performing unmanaged memory cleanup.\n            </summary>\n            <param name=\"nativeValue\">Location in unmanaged memory of the value to cleanup</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise</param>\n        </member>\n        <member name=\"T:Assimp.MemoryHelper\">\n            <summary>\n            Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``2(``0[])\">\n            <summary>\n            Marshals an array of managed values to a c-style unmanaged array (void*).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"managedArray\">Array of managed values</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``2(``0[],System.Boolean)\">\n            <summary>\n            Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to\n            an unmanaged array of pointers (void**).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"managedArray\">Array of managed values</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``2(System.IntPtr,System.Int32)\">\n            <summary>\n            Marshals an array of managed values from a c-style unmanaged array (void*).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to marshal</param>\n            <returns>Marshaled managed values</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``2(System.IntPtr,System.Int32,System.Boolean)\">\n            <summary>\n            Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from \n            an unmanaged array of pointers (void**).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to marshal</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n            <returns>Marshaled managed values</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``1(``0[])\">\n            <summary>\n            Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types\n            that require marshaling by the runtime (e.g. has MarshalAs attributes).\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"managedArray\">Managed array of structs</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``1(System.IntPtr,System.Int32)\">\n            <summary>\n            Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types\n            that require marshaling by the runtime (e.g. has MarshalAs attributes).\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to read</param>\n            <returns>Managed array</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeNativeArray``1(System.IntPtr,System.Int32,Assimp.FreeNativeDelegate)\">\n            <summary>\n            Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be\n            marshaled into unmanaged memory.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to free</param>\n            <param name=\"action\">Delegate that performs the necessary cleanup</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeNativeArray``1(System.IntPtr,System.Int32,Assimp.FreeNativeDelegate,System.Boolean)\">\n            <summary>\n            Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be\n            marshaled into unmanaged memory.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to free</param>\n            <param name=\"action\">Delegate that performs the necessary cleanup</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativePointer``2(``0)\">\n            <summary>\n            Marshals a managed value to unmanaged memory.\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Unmanaged type</typeparam>\n            <param name=\"managedValue\">Managed value to marshal</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativePointer``2(System.IntPtr)\">\n            <summary>\n            Marshals a managed value from unmanaged memory.\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Unmanaged type</typeparam>\n            <param name=\"ptr\">Pointer to unmanaged memory</param>\n            <returns>The marshaled managed value</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalStructure``1(System.IntPtr,``0@)\">\n            <summary>\n            Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise\n            use the read methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"ptr\">Pointer to marshal</param>\n            <param name=\"value\">The marshaled structure</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalStructure``1(System.IntPtr)\">\n            <summary>\n            Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise\n            use the read methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"ptr\">Pointer to marshal</param>\n            <returns>The marshaled structure</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalPointer``1(``0@,System.IntPtr)\">\n            <summary>\n            Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise\n            use the write methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"value\">Struct to marshal</param>\n            <param name=\"ptr\">Pointer to unmanaged chunk of memory which must be allocated prior to this call</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalSizeOf``1\">\n            <summary>\n            Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime,\n            (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <returns>Size of the struct in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalSizeOf``1(``0[])\">\n            <summary>\n            Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime,\n            (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"array\">Array of structs</param>\n            <returns>Total size, in bytes, of the array's contents.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.PinObject(System.Object)\">\n            <summary>\n            Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime\n            cannot move the object around in memory, which may degrade performance.\n            </summary>\n            <param name=\"obj\">Object to pin.</param>\n            <returns>Pointer to pinned object's memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.UnpinObject(System.Object)\">\n            <summary>\n            Unpins an object in memory, allowing it to once again freely be moved around by the runtime.\n            </summary>\n            <param name=\"obj\">Object to unpin.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.DisposeCollection``1(System.Collections.Generic.ICollection{``0})\">\n            <summary>\n            Convienence method to dispose all items in the collection\n            </summary>\n            <typeparam name=\"T\">IDisposable type</typeparam>\n            <param name=\"collection\">Collection of disposables</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CastToEnum``2(``0)\">\n            <summary>\n            Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value.\n            </summary>\n            <typeparam name=\"V\">Underlying value type.</typeparam>\n            <typeparam name=\"T\">Enum type.</typeparam>\n            <param name=\"value\">Value to cast.</param>\n            <returns>Enum value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AllocateMemory(System.Int32,System.Int32)\">\n            <summary>\n            Allocates unmanaged memory. This memory should only be freed by this helper.\n            </summary>\n            <param name=\"sizeInBytes\">Size to allocate</param>\n            <param name=\"alignment\">Alignment of the memory, by default aligned along 16-byte boundary.</param>\n            <returns>Pointer to the allocated unmanaged memory.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AllocateClearedMemory(System.Int32,System.Byte,System.Int32)\">\n            <summary>\n            Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper.\n            </summary>\n            <param name=\"sizeInBytes\">Size to allocate</param>\n            <param name=\"clearValue\">Value the memory will be cleared to, by default zero.</param>\n            <param name=\"alignment\">Alignment of the memory, by default aligned along 16-byte boundary.</param>\n            <returns>Pointer to the allocated unmanaged memory.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeMemory(System.IntPtr)\">\n            <summary>\n            Frees unmanaged memory that was allocated by this helper.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to unmanaged memory to free.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.IsMemoryAligned(System.IntPtr,System.Int32)\">\n            <summary>\n            Checks if the memory is aligned to the specified alignment.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to the memory</param>\n            <param name=\"alignment\">Alignment value, by defauly 16-byte</param>\n            <returns>True if is aligned, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Swap``1(``0@,``0@)\">\n            <summary>\n            Swaps the value between two references.\n            </summary>\n            <typeparam name=\"T\">Type of data to swap.</typeparam>\n            <param name=\"left\">First reference</param>\n            <param name=\"right\">Second reference</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ComputeFNVModifiedHashCode(System.Byte[])\">\n            <summary>\n            Computes a hash code using the <a href=\"http://bretm.home.comcast.net/~bretm/hash/6.html\">FNV modified algorithm</a>m.\n            </summary>\n            <param name=\"data\">Byte data to hash.</param>\n            <returns>Hash code for the data.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ReadStreamFully(System.IO.Stream,System.Int32)\">\n            <summary>\n            Reads a stream until the end is reached into a byte array. Based on\n            <a href=\"http://www.yoda.arachsys.com/csharp/readbinary.html\">Jon Skeet's implementation</a>.\n            It is up to the caller to dispose of the stream.\n            </summary>\n            <param name=\"stream\">Stream to read all bytes from</param>\n            <param name=\"initialLength\">Initial buffer length, default is 32K</param>\n            <returns>The byte array containing all the bytes from the stream</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Compare(System.Byte[],System.Byte[])\">\n            <summary>\n            Compares two arrays of bytes for equivalence. \n            </summary>\n            <param name=\"firstData\">First array of data.</param>\n            <param name=\"secondData\">Second array of data.</param>\n            <returns>True if both arrays contain the same data, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ClearMemory(System.IntPtr,System.Byte,System.Int32)\">\n            <summary>\n            Clears the memory to the specified value.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to the memory.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"sizeInBytesToClear\">Number of bytes, starting from the memory pointer, to clear.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.SizeOf``1\">\n            <summary>\n            Computes the size of the struct type.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <returns>Size of the struct in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsPointer``1(``0@)\">\n            <summary>\n            Casts the by-ref value into a pointer.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"src\">By-ref value.</param>\n            <returns>Pointer to the value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsPointerReadonly``1(``0@)\">\n            <summary>\n            Casts the readonly by-ref value into a pointer.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"src\">By-ref value.</param>\n            <returns>Pointer to the value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsRef``1(System.IntPtr)\">\n            <summary>\n            Casts the pointer into a by-ref value of the specified type.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"pSrc\">Memory location.</param>\n            <returns>By-ref value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.As``2(``0@)\">\n            <summary>\n            Casts one by-ref type to another, unsafely.\n            </summary>\n            <typeparam name=\"TFrom\">From struct type</typeparam>\n            <typeparam name=\"TTo\">To struct type</typeparam>\n            <param name=\"src\">Source by-ref value.</param>\n            <returns>Reference as the from type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsReadonly``2(``0@)\">\n            <summary>\n            Casts one readonly by-ref type to another, unsafely.\n            </summary>\n            <typeparam name=\"TFrom\">From struct type</typeparam>\n            <typeparam name=\"TTo\">To struct type</typeparam>\n            <param name=\"src\">Source by-ref value.</param>\n            <returns>Reference as the from type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.SizeOf``1(``0[])\">\n            <summary>\n            Computes the size of the struct array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"array\">Array of structs</param>\n            <returns>Total size, in bytes, of the array's contents.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AddIntPtr(System.IntPtr,System.Int32)\">\n            <summary>\n            Adds an offset to the pointer.\n            </summary>\n            <param name=\"ptr\">Pointer</param>\n            <param name=\"offset\">Offset</param>\n            <returns>Pointer plus the offset</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyMemory(System.IntPtr,System.IntPtr,System.Int32)\">\n            <summary>\n            Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer.\n            </summary>\n            <param name=\"pDest\">Destination memory location</param>\n            <param name=\"pSrc\">Source memory location</param>\n            <param name=\"sizeInBytesToCopy\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Count``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Returns the number of elements in the enumerable.\n            </summary>\n            <typeparam name=\"T\">Type of element in collection.</typeparam>\n            <param name=\"source\">Enumerable collection</param>\n            <returns>The number of elements in the enumerable collection.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToByteArray``1(``0[])\">\n            <summary>\n            Converts typed element array to a byte array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"source\">Element array</param>\n            <returns>Byte array copy or null if the source array was not valid.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromByteArray``1(System.Byte[])\">\n            <summary>\n            Converts a byte array to a typed element array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"source\">Byte array</param>\n            <returns>Typed element array or null if the source array was not valid.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyBytes``1(System.Byte[],System.Int32,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies bytes from a byte array to an element array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"srcArray\">Source byte array</param>\n            <param name=\"srcStartIndex\">Starting index in destination array</param>\n            <param name=\"destArray\">Destination element array</param>\n            <param name=\"destStartIndex\">Starting index in destination array</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyBytes``1(``0[],System.Int32,System.Byte[],System.Int32,System.Int32)\">\n            <summary>\n            Copies bytes from an element array to a byte array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"srcArray\">Source element array</param>\n            <param name=\"srcStartIndex\">Starting index in source array</param>\n            <param name=\"destArray\">Destination byte array</param>\n            <param name=\"destStartIndex\">Starting index in destination array</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Reads data from the memory location into the array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <param name=\"data\">Array to store the copied data</param>\n            <param name=\"startIndexInArray\">Zero-based element index to start writing data to in the element array.</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr)\">\n            <summary>\n            Reads a single element from the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <returns>The read value</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr,``0@)\">\n            <summary>\n            Reads a single element from the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <param name=\"value\">The read value.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Write``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Writes data from the array to the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pDest\">Pointer to memory location</param>\n            <param name=\"data\">Array containing data to write</param>\n            <param name=\"startIndexInArray\">Zero-based element index to start reading data from in the element array.</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Write``1(System.IntPtr,``0@)\">\n            <summary>\n            Writes a single element to the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pDest\">Pointer to memory location</param>\n            <param name=\"data\">The value to write</param>\n        </member>\n        <member name=\"T:Assimp.Mesh\">\n            <summary>\n            A mesh represents geometry with a single material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Name\">\n            <summary>\n            Gets or sets the mesh name. This tends to be used\n            when formats name nodes and meshes independently,\n            vertex animations refer to meshes by their names,\n            or importers split meshes up, each mesh will reference\n            the same (dummy) name.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.PrimitiveType\">\n            <summary>\n            Gets or sets the primitive type. This may contain more than one\n            type unless if <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            option is not set.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MaterialIndex\">\n            <summary>\n            Gets or sets the index of the material associated with this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexCount\">\n            <summary>\n            Gets the number of vertices in this mesh. This is the count that all\n            per-vertex lists should be the size of.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasVertices\">\n            <summary>\n            Gets if the mesh has a vertex array. This should always return\n            true provided no special scene flags are set.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Vertices\">\n            <summary>\n            Gets the vertex position list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasNormals\">\n            <summary>\n            Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Normals\">\n            <summary>\n            Gets the vertex normal list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasTangentBasis\">\n            <summary>\n            Gets if the mesh has tangents and bitangents. It is not\n            possible for one to be without the other. If it does exist, the count should be the same as the vertex count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Tangents\">\n            <summary>\n            Gets the vertex tangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BiTangents\">\n            <summary>\n            Gets the vertex bitangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.FaceCount\">\n            <summary>\n            Gets the number of faces contained in the mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasFaces\">\n            <summary>\n            Gets if the mesh contains faces. If no special\n            scene flags are set, this should always return true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Faces\">\n            <summary>\n            Gets the mesh's faces. Each face will contain indices\n            to the vertices.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexColorChannelCount\">\n            <summary>\n            Gets the number of valid vertex color channels contained in the\n            mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel\n            should be the size of <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.TextureCoordinateChannelCount\">\n            <summary>\n            Gets the number of valid texture coordinate channels contained\n            in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count.\n            Each individual channel should be the size of <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexColorChannels\">\n            <summary>\n            Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index\n            in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.TextureCoordinateChannels\">\n            <summary>\n            Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index\n            in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.UVComponentCount\">\n            <summary>\n            Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component\n            value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds\n            to the texture coordinate channel index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BoneCount\">\n            <summary>\n            Gets the number of bones that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasBones\">\n            <summary>\n            Gets if this mesh has bones.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Bones\">\n            <summary>\n            Gets the bones that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MeshAnimationAttachmentCount\">\n            <summary>\n            Gets the number of mesh animation attachments that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasMeshAnimationAttachments\">\n            <summary>\n            Gets if this mesh has mesh animation attachments.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MeshAnimationAttachments\">\n            <summary>\n            Gets the mesh animation attachments that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MorphMethod\">\n            <summary>\n            Gets or sets the morph method used when animation attachments are used.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"name\">Name of the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"primType\">Primitive types contained in the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(System.String,Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"name\">Name of the mesh</param>\n            <param name=\"primType\">Primitive types contained in the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.HasVertexColors(System.Int32)\">\n            <summary>\n            Checks if the mesh has vertex colors for the specified channel. This returns false if the list\n            is null or empty. The channel, if it exists, should contain the same number of entries as <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if vertex colors are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.HasTextureCoords(System.Int32)\">\n            <summary>\n            Checks if the mesh has texture coordinates for the specified channel. This returns false if the list\n            is null or empty. The channel, if it exists, should contain the same number of entries as <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if texture coordinates are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.SetIndices(System.Int32[],System.Int32)\">\n            <summary>\n            Convienence method for setting this meshe's face list from an index buffer.\n            </summary>\n            <param name=\"indices\">Index buffer</param>\n            <param name=\"indicesPerFace\">Indices per face</param>\n            <returns>True if the operation succeeded, false otherwise (e.g. not enough data)</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single\n            index array.\n            </summary>\n            <returns>int index array</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetUnsignedIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single index\n            array as unsigned integers (the default from Assimp, if you need them).\n            </summary>\n            <returns>uint index array</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetShortIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single\n            index array.\n            </summary>\n            <returns>short index array</returns>\n        </member>\n        <member name=\"P:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMesh@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#FromNative(Assimp.Unmanaged.AiMesh@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshAnimationAttachment\">\n            <summary>\n            A mesh attachment store per-vertex animations for a particular frame. You may\n            think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain\n            vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual\n            relationship between the time line and mesh attachments is established by the mesh animation channel,\n            which references singular mesh attachments by their ID and binds them to a time offset.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexCount\">\n            <summary>\n            Gets the number of vertices in this mesh. This is a replacement\n            for the host mesh's vertex count. Likewise, a mesh attachment\n            cannot add or remove per-vertex attributes, therefore the existance\n            of vertex data will match the existance of data in the mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasVertices\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex positions\n            of its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Vertices\">\n            <summary>\n            Gets the vertex position list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasNormals\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex normals of\n            its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Normals\">\n            <summary>\n            Gets the vertex normal list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasTangentBasis\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex\n            tangents and bitangents of its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Tangents\">\n            <summary>\n            Gets the vertex tangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.BiTangents\">\n            <summary>\n            Gets the vertex bitangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexColorChannelCount\">\n            <summary>\n            Gets the number of valid vertex color channels contained in the\n            mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel\n            should be the size of <see cref=\"P:Assimp.MeshAnimationAttachment.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.TextureCoordinateChannelCount\">\n            <summary>\n            Gets the number of valid texture coordinate channels contained\n            in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count.\n            Each individual channel should be the size of <see cref=\"P:Assimp.MeshAnimationAttachment.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexColorChannels\">\n            <summary>\n            Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). \n            Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.TextureCoordinateChannels\">\n            <summary>\n            Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null).\n            Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Weight\">\n            <summary>\n            Gets or sets the weight of the mesh animation.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshAnimationAttachment\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.HasVertexColors(System.Int32)\">\n            <summary>\n            Checks if the mesh attachment overrides a particular set of vertex colors on\n            the host mesh. This returns false if the list is null or empty. The index is between \n            zero and the maximumb number of vertex color channels.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if vertex colors are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.HasTextureCoords(System.Int32)\">\n            <summary>\n            Checks if the mesh attachment overrides a particular set of texture coordinates on\n            the host mesh. This returns false if the list is null or empty. The index is \n            between zero and the maximum number of texture coordinate channels.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if texture coordinates are present in the channel.</returns>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#ToNative(System.IntPtr,Assimp.Unmanaged.AiAnimMesh@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#FromNative(Assimp.Unmanaged.AiAnimMesh@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshAnimationChannel\">\n            <summary>\n            Describes vertex-based animations for a single mesh or a group of meshes. Meshes\n            carry the animation data for each frame. The purpose of this object is to define\n            keyframes, linking each mesh attachment to a particular point in a time.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshName\">\n            <summary>\n            Gets or sets the name of the mesh to be animated. Empty strings are not allowed,\n            animation meshes need to be named (not necessarily uniquely, the name can basically\n            serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshKeyCount\">\n            <summary>\n            Gets the number of meshkeys in this animation channel. There will always\n            be at least one key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.HasMeshKeys\">\n            <summary>\n            Gets if this animation channel has mesh keys - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshKeys\">\n            <summary>\n            Gets the mesh keyframes of the animation. This should not be null.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshAnimationChannel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#FromNative(Assimp.Unmanaged.AiMeshAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshKey\">\n            <summary>\n            Binds an anim mesh (referenced by an index) to a specific point in time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshKey.Value\">\n            <summary>\n            Index of the anim mesh that corresponds to this keyframe.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshKey.#ctor(System.Double,System.Int32)\">\n            <summary>\n            Constructs a new MeshKey.\n            </summary>\n            <param name=\"time\">The time of this key.</param>\n            <param name=\"index\">Index of the anim mesh that corresponds to this keyframe.</param>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_Equality(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's indices are the same, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_Inequality(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's indices are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_LessThan(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_GreaterThan(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.Equals(Assimp.MeshKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their indices are equal</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.MeshMorphAnimationChannel\">\n            <summary>\n            Describes morph-based keyframe animations for a single mesh or a group of meshes.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.Name\">\n            <summary>\n            Gets or sets the name of the mesh to be animated. Empty strings are not allowed,\n            animation meshes need to be named (not necessarily uniquely, the name can basically\n            serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.MeshMorphKeyCount\">\n            <summary>\n            Gets the number of mesh morph keys in this animation channel. There will always be at least one key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.HasMeshMorphKeys\">\n            <summary>\n            Gets if this animation channel has mesh keys - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.MeshMorphKeys\">\n            <summary>\n            Gets the mesh morph keyframes of the animation. This should not be null.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshMorphAnimationChannel\" /> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#FromNative(Assimp.Unmanaged.AiMeshMorphAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshMorphAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshMorphKey\">\n            <summary>\n            Binds a morph animation mesh to a specific point in time.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Time\">\n            <summary>\n            Gets or sets the time of this keyframe.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Values\">\n            <summary>\n            Gets the values at the time of this keyframe. Number of values must equal number of weights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Weights\">\n            <summary>\n            Gets the weights at the time of this keyframe. Number of weights must equal number of values.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshMorphKey\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshMorphKey@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#FromNative(Assimp.Unmanaged.AiMeshMorphKey@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Metadata\">\n            <summary>\n            Represents a container for holding metadata, representing as key-value pairs.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Metadata\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMetadata@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#FromNative(Assimp.Unmanaged.AiMetadata@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Metadata.Entry\">\n            <summary>\n            Represents an entry in a metadata container.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Entry.DataType\">\n            <summary>\n            Gets the type of metadata.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Entry.Data\">\n            <summary>\n            Gets the metadata data stored in this entry.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.#ctor(Assimp.MetaDataType,System.Object)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Metadata.Entry\"/> struct.\n            </summary>\n            <param name=\"dataType\">Type of the data.</param>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.op_Equality(Assimp.Metadata.Entry,Assimp.Metadata.Entry)\">\n            <summary>\n            Tests equality between two entries.\n            </summary>\n            <param name=\"a\">First entry</param>\n            <param name=\"b\">Second entry</param>\n            <returns>True if the entries are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.op_Inequality(Assimp.Metadata.Entry,Assimp.Metadata.Entry)\">\n            <summary>\n            Tests inequality between two entries.\n            </summary>\n            <param name=\"a\">First entry</param>\n            <param name=\"b\">Second entry</param>\n            <returns>True if the entries are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.DataAs``1\">\n            <summary>\n            Gets the data as the specified type. If it cannot be casted to the type, then null is returned.\n            </summary>\n            <typeparam name=\"T\">Type to cast the data to.</typeparam>\n            <returns>Casted data or null.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\" /> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\" /> to compare with this instance.</param>\n            <returns>True if the specified <see cref=\"T:System.Object\" /> is equal to this instance; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.Equals(Assimp.Metadata.Entry)\">\n            <summary>\n            Indicates whether the current object is equal to another object of the same type.\n            </summary>\n            <param name=\"other\">An object to compare with this object.</param>\n            <returns>True if the current object is equal to the <paramref name=\"other\" /> parameter; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. </returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.ToString\">\n            <summary>\n            Returns the fully qualified type name of this instance.\n            </summary>\n            <returns>A <see cref=\"T:System.String\" /> containing a fully qualified type name.</returns>\n        </member>\n        <member name=\"T:Assimp.NativeCustomMarshalerAttribute\">\n            <summary>\n            Attribute for assocating a type with an <see cref=\"T:Assimp.INativeCustomMarshaler\"/> instance.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NativeCustomMarshalerAttribute.Marshaler\">\n            <summary>\n            Gets the associated marshaler.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NativeCustomMarshalerAttribute.#ctor(System.Type)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NativeCustomMarshalerAttribute\"/> class.\n            </summary>\n            <param name=\"type\">Type that implements <see cref=\"T:Assimp.INativeCustomMarshaler\"/></param>\n            <exception cref=\"T:System.NullReferenceException\">Thrown if the type is null.</exception>\n            <exception cref=\"T:System.ArgumentException\">Thrown if the type does not implement <see cref=\"T:Assimp.INativeCustomMarshaler\"/>.</exception>\n        </member>\n        <member name=\"T:Assimp.Node\">\n            <summary>\n            A node in the imported model hierarchy.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Name\">\n            <summary>\n            Gets or sets the name of the node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Transform\">\n            <summary>\n            Gets or sets the transformation of the node relative to its parent.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Parent\">\n            <summary>\n            Gets the node's parent, if it exists. \n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.ChildCount\">\n            <summary>\n            Gets the number of children that is owned by this node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.HasChildren\">\n            <summary>\n            Gets if the node contains children.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Children\">\n            <summary>\n            Gets the node's children.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.MeshCount\">\n            <summary>\n            Gets the number of meshes referenced by this node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.HasMeshes\">\n            <summary>\n            Gets if the node contains mesh references.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.MeshIndices\">\n            <summary>\n            Gets the indices of the meshes referenced by this node. Meshes can be\n            shared between nodes, so there is a mesh collection owned by the scene\n            that each node can reference.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Metadata\">\n            <summary>\n            Gets the node's metadata container.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n            <param name=\"name\">Name of the node</param>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor(System.String,Assimp.Node)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n            <param name=\"name\">Name of the node</param>\n            <param name=\"parent\">Parent of the node</param>\n        </member>\n        <member name=\"M:Assimp.Node.FindNode(System.String)\">\n            <summary>\n            Finds a node with the specific name, which may be this node\n            or any children or children's children, and so on, if it exists.\n            </summary>\n            <param name=\"name\">Node name</param>\n            <returns>The node or null if it does not exist</returns>\n        </member>\n        <member name=\"P:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#IsNativeBlittable\">\n            <summary>\n            Gets a value indicating whether this instance is native blittable.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#ToNative(System.IntPtr,Assimp.Unmanaged.AiNode@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#FromNative(Assimp.Unmanaged.AiNode@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Node.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.NodeAnimationChannel\">\n            <summary>\n            Describes the animation of a single node. The name specifies the bone/node which is affected by\n            this animation chanenl. The keyframes are given in three separate seties of values,\n            one for each position, rotation, and scaling. The transformation matrix is computed from\n            these values and replaces the node's original transformation matrix at a specific time.\n            <para>This means all keys are absolute and not relative to the bone default pose.\n            The order which the transformations are to be applied is scaling, rotation, and translation (SRT).</para>\n            <para>Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no\n            negative time values, but they are not forbidden.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.NodeName\">\n            <summary>\n            Gets or sets the name of the node affected by this animation. It must <c>exist</c> and it <c>must</c>\n            be unique.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PositionKeyCount\">\n            <summary>\n            Gets the number of position keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasPositionKeys\">\n            <summary>\n            Gets if this animation channel contains position keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PositionKeys\">\n            <summary>\n            Gets the position keys of this animation channel. Positions are\n            specified as a 3D vector. If there are position keys, there should\n            also be -at least- one scaling and one rotation key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.RotationKeyCount\">\n            <summary>\n            Gets the number of rotation keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasRotationKeys\">\n            <summary>\n            Gets if the animation channel contains rotation keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.RotationKeys\">\n            <summary>\n            Gets the rotation keys of this animation channel. Rotations are\n            given as quaternions. If this exists, there should be -at least- one\n            scaling and one position key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.ScalingKeyCount\">\n            <summary>\n            Gets the number of scaling keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasScalingKeys\">\n            <summary>\n            Gets if the animation channel contains scaling keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.ScalingKeys\">\n            <summary>\n            Gets the scaling keys of this animation channel. Scalings are\n            specified in a 3D vector. If there are scaling keys, there should\n            also be -at least- one position and one rotation key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PreState\">\n            <summary>\n            Gets or sets how the animation behaves before the first key is encountered. By default the original\n            transformation matrix of the affected node is used.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PostState\">\n            <summary>\n            Gets or sets how the animation behaves after the last key was processed. By default the original\n            transformation matrix of the affected node is taken.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NodeAnimationChannel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiNodeAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#FromNative(Assimp.Unmanaged.AiNodeAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.NodeCollection\">\n            <summary>\n            A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.Count\">\n            <summary>\n            Gets the number of elements contained in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.Item(System.Int32)\">\n            <summary>\n            Gets or sets the element at the specified index.\n            </summary>\n            <param name=\"index\">The child index</param>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.IsReadOnly\">\n            <summary>\n            Gets a value indicating whether the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> is read-only.\n            </summary>\n            <returns>true if the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> is read-only; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.#ctor(Assimp.Node)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NodeCollection\"/> class.\n            </summary>\n            <param name=\"parent\">Parent node</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Add(Assimp.Node)\">\n            <summary>\n            Adds an item to the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n            <param name=\"item\">The object to add to the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.AddRange(Assimp.Node[])\">\n            <summary>\n            Adds a range of items to the list.\n            </summary>\n            <param name=\"items\">Item array</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Clear\">\n            <summary>\n            Removes all items from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Contains(Assimp.Node)\">\n            <summary>\n            Determines whether the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> contains a specific value.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n            <returns>\n            true if <paramref name=\"item\" /> is found in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />; otherwise, false.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.CopyTo(Assimp.Node[],System.Int32)\">\n            <summary>\n            Copies collection contents to the array\n            </summary>\n            <param name=\"array\">The array to copy to.</param>\n            <param name=\"arrayIndex\">Index of the array to start copying.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.IndexOf(Assimp.Node)\">\n            <summary>\n            Determines the index of a specific item in the <see cref=\"T:System.Collections.Generic.IList`1\" />.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.IList`1\" />.</param>\n            <returns>\n            The index of <paramref name=\"item\" /> if found in the list; otherwise, -1.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Insert(System.Int32,Assimp.Node)\">\n            <summary>\n            Inserts an item to the <see cref=\"T:System.Collections.Generic.IList`1\" /> at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index at which <paramref name=\"item\" /> should be inserted.</param>\n            <param name=\"item\">The object to insert into the <see cref=\"T:System.Collections.Generic.IList`1\" />.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the <see cref=\"T:System.Collections.Generic.IList`1\" /> item at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index of the item to remove.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Remove(Assimp.Node)\">\n            <summary>\n            Removes the first occurrence of a specific object from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n            <param name=\"item\">The object to remove from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n            <returns>\n            true if <paramref name=\"item\" /> was successfully removed from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />; otherwise, false. This method also returns false if <paramref name=\"item\" /> is not found in the original <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.ToArray\">\n            <summary>\n            Copies elements in the collection to a new array.\n            </summary>\n            <returns>Array of copied elements</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through the collection.\n            </summary>\n            <returns>A <see cref=\"T:System.Collections.Generic.IEnumerator`1\" /> that can be used to iterate through the collection.</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through a collection.\n            </summary>\n            <returns>An <see cref=\"T:System.Collections.IEnumerator\" /> object that can be used to iterate through the collection.</returns>\n        </member>\n        <member name=\"T:Assimp.Plane\">\n            <summary>\n            Represents a plane in three-dimensional euclidean space where\n            A, B, C are components of the plane normal and D is the distance along the\n            normal from the origin to the plane.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.A\">\n            <summary>\n            X component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.B\">\n            <summary>\n            Y component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.C\">\n            <summary>\n            Z component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.D\">\n            <summary>\n            Distance from the origin to the plane along the normal vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Plane.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Plane.\n            </summary>\n            <param name=\"a\">X component of the normal vector.</param>\n            <param name=\"b\">Y component of the normal vector.</param>\n            <param name=\"c\">Z component of the normal vector.</param>\n            <param name=\"d\">Distance from the origin to the plane along the normal vector.</param>\n        </member>\n        <member name=\"T:Assimp.PostProcessPreset\">\n            <summary>\n            Static class containing preset properties for post processing options.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.ConvertToLeftHanded\">\n            <summary>\n            PostProcess configuration for (some) Direct3D conventions,\n            left handed geometry, upper left origin for UV coordinates,\n            and clockwise face order, suitable for CCW culling.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeFast\">\n            <summary>\n            PostProcess configuration for optimizing data for real-time.\n            Does the following steps:\n            \n            <see cref=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\"/>, <see cref=\"F:Assimp.PostProcessSteps.GenerateNormals\"/>, \n            <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>, <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/>, and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeQuality\">\n            <summary>\n            PostProcess configuration for optimizing\n            data for real-time rendering. Does the following steps:\n            \n            <see cref=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\"/>, <see cref=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\"/>, \n            <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>, <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/>, <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/>, <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/>, <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/>, and\n            <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeMaximumQuality\">\n            <summary>\n            PostProcess configuration for heavily optimizing the data\n            for real-time rendering. Includes all flags in\n            <see cref=\"P:Assimp.PostProcessPreset.TargetRealTimeQuality\"/> as well as \n            <see cref=\"F:Assimp.PostProcessSteps.FindInstances\"/>, <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>, and\n            <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/>\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Quaternion\">\n            <summary>\n            A 4D vector that represents a rotation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.W\">\n            <summary>\n            Rotation component of the quaternion/\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.X\">\n            <summary>\n            X component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.Y\">\n            <summary>\n            Y component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.Z\">\n            <summary>\n            Z component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Quaternion.\n            </summary>\n            <param name=\"w\">W component</param>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(Assimp.Matrix3x3)\">\n            <summary>\n            Constructs a new Quaternion from a rotation matrix.\n            </summary>\n            <param name=\"matrix\">Rotation matrix to create the Quaternion from.</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Quaternion from three euler angles.\n            </summary>\n            <param name=\"pitch\">Pitch</param>\n            <param name=\"yaw\">Yaw</param>\n            <param name=\"roll\">Roll</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Constructs a new Quaternion from an axis-angle.\n            </summary>\n            <param name=\"axis\">Axis</param>\n            <param name=\"angle\">Angle about the axis</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Normalize\">\n            <summary>\n            Normalizes the quaternion.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Conjugate\">\n            <summary>\n            Transforms this quaternion into its conjugate.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.GetMatrix\">\n            <summary>\n            Returns a matrix representation of the quaternion.\n            </summary>\n            <returns>Rotation matrix representing the quaternion.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Slerp(Assimp.Quaternion,Assimp.Quaternion,System.Single)\">\n            <summary>\n            Spherical interpolation between two quaternions.\n            </summary>\n            <param name=\"start\">Start rotation when factor == 0</param>\n            <param name=\"end\">End rotation when factor == 1</param>\n            <param name=\"factor\">Interpolation factor between 0 and 1, values beyond this range yield undefined values</param>\n            <returns>Interpolated quaternion.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Rotate(Assimp.Vector3D,Assimp.Quaternion)\">\n            <summary>\n            Rotates a point by this quaternion.\n            </summary>\n            <param name=\"pt\">Point to rotate</param>\n            <param name=\"quat\">Quaternion representing the rotation</param>\n            <returns>Rotated point.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Multiply(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Multiplies two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>Resulting quaternion</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Equality(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Tests equality between two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>True if the quaternions are equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Inequality(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Tests inequality between two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>True if the quaternions are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Equals(Assimp.Quaternion)\">\n            <summary>\n            Tests equality between two quaternions.\n            </summary>\n            <param name=\"other\">Quaternion to compare</param>\n            <returns>True if the quaternions are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.QuaternionKey\">\n            <summary>\n            Time-value pair specifying a rotation for a given time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.QuaternionKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.QuaternionKey.Value\">\n            <summary>\n            The rotation of this key.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.#ctor(System.Double,Assimp.Quaternion)\">\n            <summary>\n            Constructs a new QuaternionKey.\n            </summary>\n            <param name=\"time\">Time of the key.</param>\n            <param name=\"rot\">Quaternion rotation at the time frame.</param>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_Equality(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's rotations are the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_Inequality(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's rotations are not the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_LessThan(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_GreaterThan(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.Equals(Assimp.QuaternionKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their rotations are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Ray\">\n            <summary>\n            Defines a 3D ray with a point of origin and a direction.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Ray.Position\">\n            <summary>\n            Origin of the ray in space.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Ray.Direction\">\n            <summary>\n            Direction of the ray.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Ray.#ctor(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new Ray.\n            </summary>\n            <param name=\"pos\">Origin of the ray.</param>\n            <param name=\"dir\">Direction of the ray.</param>\n        </member>\n        <member name=\"T:Assimp.Scene\">\n            <summary>\n            Represents a completely imported model or scene. Everything that was imported from the given file can be\n            accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory\n            and Assimp's read only copy is released.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.SceneFlags\">\n            <summary>\n            Gets or sets the state of the imported scene. By default no flags are set, but\n            issues can arise if the flag is set to incomplete.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.RootNode\">\n            <summary>\n            Gets or sets the root node of the scene graph. There will always be at least the root node\n            if the import was successful and no special flags have been set. Presence of further nodes\n            depends on the format and content of the imported file.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasMeshes\">\n            <summary>\n            Gets if the scene contains meshes. Unless if no special scene flags are set\n            this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.MeshCount\">\n            <summary>\n            Gets the number of meshes in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Meshes\">\n            <summary>\n            Gets the meshes contained in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasLights\">\n            <summary>\n            Gets if the scene contains any lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.LightCount\">\n            <summary>\n            Gets the number of lights in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Lights\">\n            <summary>\n            Gets the lights in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasCameras\">\n            <summary>\n            Gets if the scene contains any cameras.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.CameraCount\">\n            <summary>\n            Gets the number of cameras in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Cameras\">\n            <summary>\n            Gets the cameras in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasTextures\">\n            <summary>\n            Gets if the scene contains embedded textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.TextureCount\">\n            <summary>\n            Gets the number of embedded textures in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Textures\">\n            <summary>\n            Gets the embedded textures in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasAnimations\">\n            <summary>\n            Gets if the scene contains any animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.AnimationCount\">\n            <summary>\n            Gets the number of animations in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Animations\">\n            <summary>\n            Gets the animations in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasMaterials\">\n            <summary>\n            Gets if the scene contains any materials. There should always be at least the\n            default Assimp material if no materials were loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.MaterialCount\">\n            <summary>\n            Gets the number of materials in the scene. There should always be at least the\n            default Assimp material if no materials were loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Materials\">\n            <summary>\n            Gets the materials in the scene.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Scene\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.Clear\">\n            <summary>\n            Clears the scene of all components.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.ToUnmanagedScene(Assimp.Scene)\">\n            <summary>\n            Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to\n            <see cref=\"M:Assimp.Scene.FreeUnmanagedScene(System.IntPtr)\"/>, the memory is owned by AssimpNet and cannot be freed by the native library.\n            </summary>\n            <param name=\"scene\">Scene data</param>\n            <returns>Unmanaged scene or NULL if the scene is null.</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.FromUnmanagedScene(System.IntPtr)\">\n            <summary>\n            Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory.\n            </summary>\n            <param name=\"scenePtr\">The unmanaged scene data</param>\n            <returns>The managed scene, or null if the pointer is NULL</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.FreeUnmanagedScene(System.IntPtr)\">\n            <summary>\n            Frees unmanaged memory allocated -ONLY- in <see cref=\"M:Assimp.Scene.ToUnmanagedScene(Assimp.Scene)\"/>. To free an unmanaged scene allocated by the unmanaged Assimp library,\n            call the appropiate <see cref=\"M:Assimp.Unmanaged.AssimpLibrary.ReleaseImport(System.IntPtr)\"/> function.\n            </summary>\n            <param name=\"scenePtr\">Pointer to unmanaged scene data.</param>\n        </member>\n        <member name=\"P:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#ToNative(System.IntPtr,Assimp.Unmanaged.AiScene@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#FromNative(Assimp.Unmanaged.AiScene@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Scene.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Texel\">\n            <summary>\n            Represents a texel in ARGB8888 format.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.A\">\n            <summary>\n            Alpha component.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Texel.#ctor(System.Byte,System.Byte,System.Byte,System.Byte)\">\n            <summary>\n            Constructs a new Texel.\n            </summary>\n            <param name=\"b\">Blue component.</param>\n            <param name=\"g\">Green component.</param>\n            <param name=\"r\">Red component.</param>\n            <param name=\"a\">Alpha component.</param>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Equality(Assimp.Texel,Assimp.Texel)\">\n            <summary>\n            Tests equality between two texels.\n            </summary>\n            <param name=\"a\">First texel</param>\n            <param name=\"b\">Second texel</param>\n            <returns>True if the texels are equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Inequality(Assimp.Texel,Assimp.Texel)\">\n            <summary>\n            Tests inequality between two texels.\n            </summary>\n            <param name=\"a\">First texel</param>\n            <param name=\"b\">Second texel</param>\n            <returns>True if the texels are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Implicit(Assimp.Texel)~Assimp.Color4D\">\n            <summary>\n            Implicitly converts a texel to a Color4D.\n            </summary>\n            <param name=\"texel\">Texel to convert</param>\n            <returns>Converted Color4D</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Texel.Equals(Assimp.Texel)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"other\">Other key to test</param>\n            <returns>True if their indices are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Texel.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.TextureSlot\">\n            <summary>\n            Describes all the values pertaining to a particular texture slot in a material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.FilePath\">\n            <summary>\n            Gets the texture file path.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.TextureType\">\n            <summary>\n            Gets the texture type semantic.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.TextureIndex\">\n            <summary>\n            Gets the texture index in the material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Mapping\">\n            <summary>\n            Gets the texture mapping.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.UVIndex\">\n            <summary>\n            Gets the UV channel index that corresponds to this texture from the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.BlendFactor\">\n            <summary>\n            Gets the blend factor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Operation\">\n            <summary>\n            Gets the texture operation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.WrapModeU\">\n            <summary>\n            Gets the texture wrap mode for the U coordinate.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.WrapModeV\">\n            <summary>\n            Gets the texture wrap mode for the V coordinate.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Flags\">\n            <summary>\n            Gets misc flags.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.TextureSlot.#ctor(System.String,Assimp.TextureType,System.Int32,Assimp.TextureMapping,System.Int32,System.Single,Assimp.TextureOperation,Assimp.TextureWrapMode,Assimp.TextureWrapMode,System.Int32)\">\n            <summary>\n            Constructs a new TextureSlot.\n            </summary>\n            <param name=\"filePath\">Texture filepath</param>\n            <param name=\"typeSemantic\">Texture type semantic</param>\n            <param name=\"texIndex\">Texture index in the material</param>\n            <param name=\"mapping\">Texture mapping</param>\n            <param name=\"uvIndex\">UV channel in mesh that corresponds to this texture</param>\n            <param name=\"blendFactor\">Blend factor</param>\n            <param name=\"texOp\">Texture operation</param>\n            <param name=\"wrapModeU\">Texture wrap mode for U coordinate</param>\n            <param name=\"wrapModeV\">Texture wrap mode for V coordinate</param>\n            <param name=\"flags\">Misc flags</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiConfigs\">\n            <summary>\n            Defines configurable properties for importing models. All properties\n            have default values. Setting config properties are done via the SetProperty*\n            methods in AssimpMethods.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOB_MEASURE_TIME\">\n            <summary>\n            Enables time measurements. If enabled the time needed for each\n            part of the loading process is timed and logged.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOB_MULTITHREADING\">\n            <summary>\n            Sets Assimp's multithreading policy. This is ignored if Assimp is\n            built without boost.thread support. Possible values are: -1 to\n            let Assimp decide, 0 to disable multithreading, and nay number larger than 0\n            to force a specific number of threads. This is only a hint and may be \n            ignored by Assimp.\n            <para>Type: integer. Default: -1</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_NO_SKELETON_MESHES\">\n            <summary>\n            Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid\n            in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing\n            the bones.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the maximum angle that may be between two vertex tangents that their tangents\n            and bitangents are smoothed during the step to calculate the tangent basis. The angle specified \n            is in degrees. The maximum value is 175 degrees.\n            <para>Type: float. Default: 45 degrees</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the maximum angle that may be between two face normals at the same vertex position that\n            their normals will be smoothed together during the calculate smooth normals step. This is commonly\n            called the \"crease angle\". The angle is specified in degrees. Maximum value is 175 degrees (all vertices\n            smoothed).\n            <para>Type: float. Default: 175 degrees</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDL_COLORMAP\">\n            <summary>\n            Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files.\n            This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains\n            RGB triplets for each of the 256 palette entries. If the file is not found, a default\n            palette (from Quake 1) is used.\n            <para>Type: string. Default: \"colormap.lmp\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_RRM_EXCLUDE_LIST\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/> step to\n            keep materials matching a name in a given list. This is a list of\n            1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers\n            containing whitespaces must be enclosed in *single* quotation marks. Tabs or\n            carriage returns are treated as whitespace.\n            <para>If a material matches one of these names, it will not be modified\n            or removed by the post processing step nor will other materials be replaced\n            by a reference to it.</para>\n            <para>Default: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_KEEP_HIERARCHY\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization\n            is performed where meshes with the same materials are not joined.\n            <para>This option could be of used if you have a scene hierarchy that contains\n            important additional information which you intend to parse.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_NORMALIZE\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to normalize all vertex components into the -1...1 range. That is, a bounding\n            box for the whole scene is computed where the maximum component is taken\n            and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension\n            of the input data.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_REMOVE\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step\n            to remove degenerated primitives from the import immediately.\n            <para>The default behavior converts degenerated triangles to lines and\n            degenerated lines to points.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_CHECKAREA\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step\n            to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_REMOVE\"/> is set to true.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_OG_EXCLUDE_LIST\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/> step\n            to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character.\n            Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns\n            and tabs are treated as white space.\n            <para>If a node matches one of these names, it will not be modified or removed by the\n            postprocessing step.</para>\n            <para>Type: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_TRIANGLE_LIMIT\">\n            <summary>\n            Sets the maximum number of triangles a mesh can contain. This is used by the\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step to determine\n            whether a mesh must be split or not.\n            <para>Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_VERTEX_LIMIT\">\n            <summary>\n            Sets the maximum number of vertices in a mesh. This is used by the\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step to determine\n            whether a mesh must be split or not.\n            <para>Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_LBW_MAX_WEIGHTS\">\n            <summary>\n            Sets the maximum number of bones that can affect a single vertex. This is used\n            by the <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/> step.\n            <para>Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_ICL_PTCACHE_SIZE\">\n            <summary>\n            Sets the size of the post-transform vertex cache to optimize vertices for. This is\n            for the <see cref=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\"/> step. The size\n            is given in vertices. Of course you can't know how the vertex format will exactly look\n            like after the import returns, but you can still guess what your meshes will\n            probably have. The default value *has* resulted in slight performance improvements\n            for most Nvidia/AMD cards since 2002.\n            <para>Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_RVC_FLAGS\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.RemoveComponent\"/> step. \n            It specifies the parts of the data structure to be removed.\n            <para>This is a bitwise combination of the <see cref=\"T:Assimp.ExcludeComponent\"/> flag. If no valid mesh is remaining after\n            the step is executed, the import FAILS.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SBP_REMOVE\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step.\n            It specifies which primitive types are to be removed by the step.\n            <para>This is a bitwise combination of the <see cref=\"T:Assimp.PrimitiveType\"/> flag.\n            Specifying ALL types is illegal.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FID_ANIM_ACCURACY\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step.\n            It specifies the floating point accuracy for animation values, specifically the epislon\n            during the comparison. The step checks for animation tracks where all frame values are absolutely equal \n            and removes them. Two floats are considered equal if the invariant <c>abs(n0-n1) > epislon</c> holds\n            true for all vector/quaternion components.\n            <para>Type: float. Default: 0.0f (comparisons are exact)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_TUV_EVALUATE\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.TransformUVCoords\"/> step.\n            It specifies which UV transformations are to be evaluated.\n            <para>This is bitwise combination of the <see cref=\"T:Assimp.UVTransformFlags\"/> flag.</para>\n            <para>Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_FAVOUR_SPEED\">\n            <summary>\n            A hint to Assimp to favour speed against import quality. Enabling this option\n            may result in faster loading, or it may not. It is just a hint to loaders and post-processing\n            steps to use faster code paths if possible. A value not equal to zero stands\n            for true.\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SBBC_MAX_BONES\">\n            <summary>\n            Maximum bone cone per mesh for the <see cref=\"F:Assimp.PostProcessSteps.SplitByBoneCount\"/> step. Meshes\n            are split until the max number of bones is reached.\n            <para>Type: integer. Default: 60</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX\">\n            <summary>\n            Source UV channel for tangent space computation. The specified channel must exist or an error will be raised.\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_DB_THRESHOLD\">\n            <summary>\n            Threshold used to determine if a bone is kept or removed during the <see cref=\"F:Assimp.PostProcessSteps.Debone\"/> step.\n            <para>Type: float. Default: 1.0f</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_DB_ALL_OR_NONE\">\n            <summary>\n            Require all bones to qualify for deboning before any are removed.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step to use a user defined matrix as the scene root node\n            transformation before transforming vertices.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step to use a user defined matrix as the scene root node transformation\n            before transforming vertices.\n            <para>Type: Matrix4x4. Default: Identity Matrix</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.GlobalScale\"/> step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model,\n            which this processing step can utilize.\n            <para>Type: Float. Default: 1.0f.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support\n            vertex keyframes (only bone animation is supported). The libary reads only one frame of models\n            with vertex animations. By default this is the first frame.\n            <para>The default value is 0. This option applies to all importers. However, it is\n            also possible to override the global setting for a specific loader. You can use the\n            AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which\n            you want to override the global setting.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD2_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDL_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDC_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_SMD_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_UNREAL_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL\">\n            <summary>\n            Configures the AC loader to collect all surfaces which have the \"Backface cull\" flag set in separate\n            meshes.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_AC_EVAL_SUBDIVISION\">\n            <summary>\n            Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence\n            of the 'subdiv' attribute in the file). By default, Assimp performs\n            the subdivision using the standard Catmull-Clark algorithm.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS\">\n            <summary>\n            Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided).\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_TER_MAKE_UVS\">\n            <summary>\n            Configures the terragen import plugin to compute UV's for terrains, if\n            they are not given. Furthermore, a default texture is assigned.\n            <para>UV coordinates for terrains are so simple to compute that you'll usually \n            want to compute them on your own, if you need them. This option is intended for model viewers which\n            want to offer an easy way to apply textures to terrains.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS\">\n            <summary>\n            Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups\n            loaded from the file. Some ASE files carry invalid normals, others don't.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART\">\n            <summary>\n            Configures the M3D loader to detect and process multi-part Quake player models. These models\n            usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is\n            set to true, Assimp will try to load and combine all three files if one of them is loaded.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_SKIN_NAME\">\n            <summary>\n            Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks\n            whether a file named \"md3_file_name\"_\"skin_name\".skin exists. These files are used by\n            Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue'\n            are typical skin names.\n            <para>Type: string. Default: \"default\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_SHADER_SRC\">\n            <summary>\n            Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or\n            relative to where all MD3 shaders reside.\n            <para>Type: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY\">\n            <summary>\n            Configures the LWO loader to load just one layer from the model.\n            <para>LWO files consist of layers and in some cases it could be useful to load only one of them.\n            This property can be either a string - which specifies the name of the layer - or an integer - the index\n            of the layer. If the property is not set then the whole LWO model is loaded. Loading fails\n            if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty</para>\n            <para>Type: bool. Default: false (All layers are loaded)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD\">\n            <summary>\n            Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically.\n            <para>The default strategy is to look for a file with the same name but with the MD5ANIm extension\n            in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration\n            option can be used to disable this behavior.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWS_ANIM_START\">\n            <summary>\n            Defines the beginning of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the start time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation start from the input LWS\n            file ('FirstFrame' line)</para>\n            <para>Type: integer. Default: taken from file</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWS_ANIM_END\">\n            <summary>\n            Defines the ending of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the end time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation end from the input LWS\n            file.</para>\n            <para>Type: integer. Default: taken from file</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IRR_ANIM_FPS\">\n            <summary>\n            Defines the output frame rate of the IRR loader.\n            <para>IRR animations are difficult to convert for Assimp and there will always be\n            a loss of quality. This setting defines how many keys per second are returned by the converter.</para>\n            <para>Type: integer. Default: 100</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE\">\n            <summary>\n            The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp\n            where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material,\n            and lastly the material name defined by this config property.\n            <para>Type: string. Default: \"Scene.Material\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME\">\n            <summary>\n            The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified\n            in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: \n            <list type=\"bullet\">\n            <item><description>Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap</description></item>\n            <item><description>Specular Maps: _s, _spec, _specular, _specularmap</description></item>\n            <item><description>Light Maps: _l, _light, _lightmap, _occ, _occlusion</description></item>\n            <item><description>Displacement Maps: _dis, _displacement</description></item>\n            </list>\n            The matching is case insensitive. Postfix is taken between the last \"_\" and last \".\". The default behavior is to detect type from lower cased\n            texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then,\n            <see cref=\"F:Assimp.TextureType.Diffuse\"/> is used.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS\">\n            <summary>\n            Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION\">\n            <summary>\n            Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false,\n            walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected\n            with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known\n            issues with these kind of polygons.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120]\n            <para>Type: Float. Default: 10.0f</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_CYLINDRICAL_TESSELLATION\">\n            <summary>\n            Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180].\n            <para>Type: Integer. Default: 32</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION\">\n            <summary>\n            Specifies whether the collada loader will ignore the up direction.\n            <para>Type: Bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS\">\n            <summary>\n            Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first.\n            <para>Type: bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS\">\n            <summary>\n            Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer\n            will read materials, otherwise this has no effect.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_MATERIALS\">\n            <summary>\n            Specifies whether the FBX importer will read materials.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_TEXTURES\">\n            <summary>\n            Specifies whether the FBX importer will read embedded textures.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_SEARCH_EMBEDDED_TEXTURES\">\n            <summary>\n            Specifies whether the FBX importer will search for embedded loaded textures, where no embedded texture data is provided.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_CAMERAS\">\n            <summary>\n            Specifies whether the FBX importer will read cameras.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_LIGHTS\">\n            <summary>\n            Specifies whether the FBX importer will read light sources.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS\">\n            <summary>\n            Specifies whether the FBX importer will read animations.\n            <para>Type: Bool. default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_STRICT_MODE\">\n            <summary>\n            Specifies whether the FBX importer will act in strict mode in which only the FBX 2013\n            format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this\n            format is best supported and well-tested.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS\">\n            <summary>\n            Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots\n            and offsets will be evaluated whenever possible.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES\">\n            <summary>\n            Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose \n            transformation over their entire defined range.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_EXPORT_XFILE_64BIT\">\n            <summary>\n            Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiDefines\">\n            <summary>\n            Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants\n            are grouped according to their usage or where they're found in the Assimp include files.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_TRIANGLE_LIMIT\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_VERTICES\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_VERTEX_LIMIT\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_LBW_MAX_WEIGHTS\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_LBW_MAX_WEIGHTS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.PP_ICL_PTCACHE_SIZE\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_ICL_PTCACHE_SIZE\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_UVTRAFO_ALL\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_TUV_EVALUATE\"/>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_FACE_INDICES\">\n            <summary>\n            Defines the maximum number of indices per face (polygon).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_BONE_WEIGHTS\">\n            <summary>\n            Defines the maximum number of bone weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_VERTICES\">\n            <summary>\n            Defines the maximum number of vertices per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_FACES\">\n            <summary>\n            Defines the maximum number of faces per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\">\n            <summary>\n            Defines the maximum number of vertex color sets per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\">\n            <summary>\n            Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SBBC_DEFAULT_MAX_BONES\">\n            <summary>\n            Defines the default bone count limit.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEBONE_THRESHOLD\">\n            <summary>\n            Defines the deboning threshold.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.MAX_LENGTH\">\n            <summary>\n            Defines the maximum length of a string used in AiString.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEFAULT_MATERIAL_NAME\">\n            <summary>\n            Defines the default color material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEFAULT_TEXTURED_MATERIAL_NAME\">\n            <summary>\n            Defines the default textured material (if the meshes have UV coords).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMatKeys\">\n            <summary>\n            Static class containing material key constants. A fully qualified mat key\n            name here means that it's a string that combines the mat key (base) name, its\n            texture type semantic, and its texture index into a single string delimited by\n            commas. For non-texture material properties, the texture type semantic and texture\n            index are always zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.NAME_BASE\">\n            <summary>\n            Material name (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.NAME\">\n            <summary>\n            Material name (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TWOSIDED_BASE\">\n            <summary>\n            Two sided property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TWOSIDED\">\n            <summary>\n            Two sided property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADING_MODEL_BASE\">\n            <summary>\n            Shading mode property (ShadingMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADING_MODEL\">\n            <summary>\n            Shading mode property (ShadingMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.ENABLE_WIREFRAME_BASE\">\n            <summary>\n            Enable wireframe property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.ENABLE_WIREFRAME\">\n            <summary>\n            Enable wireframe property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BLEND_FUNC_BASE\">\n            <summary>\n            Blending function (BlendMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BLEND_FUNC\">\n            <summary>\n            Blending function (BlendMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.OPACITY_BASE\">\n            <summary>\n            Opacity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.OPACITY\">\n            <summary>\n            Opacity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BUMPSCALING_BASE\">\n            <summary>\n            Bumpscaling (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BUMPSCALING\">\n            <summary>\n            Bumpscaling (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_BASE\">\n            <summary>\n            Shininess (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS\">\n            <summary>\n            Shininess (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFLECTIVITY_BASE\">\n            <summary>\n            Reflectivity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFLECTIVITY\">\n            <summary>\n            Reflectivity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_STRENGTH_BASE\">\n            <summary>\n            Shininess strength (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_STRENGTH\">\n            <summary>\n            Shininess strength (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFRACTI_BASE\">\n            <summary>\n            Refracti (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFRACTI\">\n            <summary>\n            Refracti (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_DIFFUSE_BASE\">\n            <summary>\n            Diffuse color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_DIFFUSE\">\n            <summary>\n            Diffuse color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_AMBIENT_BASE\">\n            <summary>\n            Ambient color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_AMBIENT\">\n            <summary>\n            Ambient color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_SPECULAR_BASE\">\n            <summary>\n            Specular color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_SPECULAR\">\n            <summary>\n            Specular color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_EMISSIVE_BASE\">\n            <summary>\n            Emissive color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_EMISSIVE\">\n            <summary>\n            Emissive color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_TRANSPARENT_BASE\">\n            <summary>\n            Transparent color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_TRANSPARENT\">\n            <summary>\n            Transparent color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_REFLECTIVE_BASE\">\n            <summary>\n            Reflective color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_REFLECTIVE\">\n            <summary>\n            Reflective color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_BACKGROUND_IMAGE_BASE\">\n            <summary>\n            Background image (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_BACKGROUND_IMAGE\">\n            <summary>\n            Background image (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXTURE_BASE\">\n            <summary>\n            Texture base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.UVWSRC_BASE\">\n            <summary>\n            UVWSRC base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXOP_BASE\">\n            <summary>\n            Texture op base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPING_BASE\">\n            <summary>\n            Mapping base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXBLEND_BASE\">\n            <summary>\n            Texture blend base name.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPINGMODE_U_BASE\">\n            <summary>\n            Mapping mode U base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPINGMODE_V_BASE\">\n            <summary>\n            Mapping mode V base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXMAP_AXIS_BASE\">\n            <summary>\n            Texture map axis base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.UVTRANSFORM_BASE\">\n            <summary>\n            UV transform base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXFLAGS_BASE\">\n            <summary>\n            Texture flags base name\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiMatKeys.GetFullTextureName(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Helper function to get the fully qualified name of a texture property type name. Takes\n            in a base name constant, a texture type, and a texture index and outputs the name in the format:\n            <para>\"baseName,TextureType,texIndex\"</para>\n            </summary>\n            <param name=\"baseName\">Base name</param>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"texIndex\">Texture index</param>\n            <returns>Fully qualified texture name</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiMatKeys.GetBaseName(System.String)\">\n            <summary>\n            Helper function to get the base name from a fully qualified name of a material property type name. The format\n            of such a string is:\n            <para>\"baseName,TextureType,texIndex\"</para>\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified material property name.</param>\n            <returns>Base name of the property type.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary\">\n            <summary>\n            Singleton that governs access to the unmanaged Assimp library functions.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AssimpLibrary.DefaultLibName\">\n            <summary>\n            Default name of the unmanaged library. Based on runtime implementation the prefix (\"lib\" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AssimpLibrary.Instance\">\n            <summary>\n            Gets the AssimpLibrary instance.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AssimpLibrary.IsMultithreadingSupported\">\n            <summary>\n            Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only,\n            then it will not utilize multiple threads during import.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFile(System.String,Assimp.PostProcessSteps,System.IntPtr)\">\n            <summary>\n            Imports a file.\n            </summary>\n            <param name=\"file\">Valid filename</param>\n            <param name=\"flags\">Post process flags specifying what steps are to be run after the import.</param>\n            <param name=\"propStore\">Property store containing config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFile(System.String,Assimp.PostProcessSteps,System.IntPtr,System.IntPtr)\">\n            <summary>\n            Imports a file.\n            </summary>\n            <param name=\"file\">Valid filename</param>\n            <param name=\"flags\">Post process flags specifying what steps are to be run after the import.</param>\n            <param name=\"fileIO\">Pointer to an instance of AiFileIO, a custom file IO system used to open the model and \n            any associated file the loader needs to open, passing NULL uses the default implementation.</param>\n            <param name=\"propStore\">Property store containing config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFileFromStream(System.IO.Stream,Assimp.PostProcessSteps,System.String,System.IntPtr)\">\n            <summary>\n            Imports a scene from a stream. This uses the \"aiImportFileFromMemory\" function. The stream can be from anyplace,\n            not just a memory stream. It is up to the caller to dispose of the stream.\n            </summary>\n            <param name=\"stream\">Stream containing the scene data</param>\n            <param name=\"flags\">Post processing flags</param>\n            <param name=\"formatHint\">A hint to Assimp to decide which importer to use to process the data</param>\n            <param name=\"propStore\">Property store containing the config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ReleaseImport(System.IntPtr)\">\n            <summary>\n            Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled\n            from the managed scene structure - only for scenes whose memory was allocated by the native library!\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ApplyPostProcessing(System.IntPtr,Assimp.PostProcessSteps)\">\n            <summary>\n            Applies a post-processing step on an already imported scene.\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n            <param name=\"flags\">Post processing steps to run.</param>\n            <returns>Pointer to the unmanaged scene data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetExportFormatDescriptions\">\n            <summary>\n            Gets all supported export formats.\n            </summary>\n            <returns>Array of supported export formats.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportSceneToBlob(System.IntPtr,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file.\n            </summary>\n            <param name=\"scene\">Scene to export, it is the responsibility of the caller to free this when finished.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"preProcessing\">Pre processing flags to operate on the scene during the export.</param>\n            <returns>Exported binary blob, or null if there was an error.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportScene(System.IntPtr,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format and writes the result file(s) to disk.\n            </summary>\n            <param name=\"scene\">The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short,\n            this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"fileName\">Output filename to write to</param>\n            <param name=\"preProcessing\">Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input\n            conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format.</param>\n            <returns>Return code specifying if the operation was a success.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportScene(System.IntPtr,System.String,System.String,System.IntPtr,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format and writes the result file(s) to disk.\n            </summary>\n            <param name=\"scene\">The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short,\n            this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"fileName\">Output filename to write to</param>\n            <param name=\"fileIO\">Pointer to an instance of AiFileIO, a custom file IO system used to open the model and \n            any associated file the loader needs to open, passing NULL uses the default implementation.</param>\n            <param name=\"preProcessing\">Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input\n            conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format.</param>\n            <returns>Return code specifying if the operation was a success.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CopyScene(System.IntPtr)\">\n            <summary>\n            Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified\n            and the scene be exported.\n            </summary>\n            <param name=\"sceneToCopy\">Valid scene to be copied</param>\n            <returns>Modifyable copy of the scene</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.AttachLogStream(System.IntPtr)\">\n            <summary>\n            Attaches a log stream callback to catch Assimp messages.\n            </summary>\n            <param name=\"logStreamPtr\">Pointer to an instance of AiLogStream.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.EnableVerboseLogging(System.Boolean)\">\n            <summary>\n            Enables verbose logging.\n            </summary>\n            <param name=\"enable\">True if verbose logging is to be enabled or not.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVerboseLoggingEnabled\">\n            <summary>\n            Gets if verbose logging is enabled.\n            </summary>\n            <returns>True if verbose logging is enabled, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DetachLogStream(System.IntPtr)\">\n            <summary>\n            Detaches a logstream callback.\n            </summary>\n            <param name=\"logStreamPtr\">Pointer to an instance of AiLogStream.</param>\n            <returns>A return code signifying if the function was successful or not.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DetachAllLogStreams\">\n            <summary>\n            Detaches all logstream callbacks currently attached to Assimp.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CreatePropertyStore\">\n            <summary>\n            Create an empty property store. Property stores are used to collect import settings.\n            </summary>\n            <returns>Pointer to property store</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ReleasePropertyStore(System.IntPtr)\">\n            <summary>\n            Deletes a property store.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyInteger(System.IntPtr,System.String,System.Int32)\">\n            <summary>\n            Sets an integer property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyFloat(System.IntPtr,System.String,System.Single)\">\n            <summary>\n            Sets a float property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyString(System.IntPtr,System.String,System.String)\">\n            <summary>\n            Sets a string property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyMatrix(System.IntPtr,System.String,Assimp.Matrix4x4)\">\n            <summary>\n            Sets a matrix property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialColor(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a color value from the material property table.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The color if it exists. If not, the default Color4D value is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialFloatArray(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32,System.UInt32)\">\n            <summary>\n            Retrieves an array of float values with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <param name=\"floatCount\">The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than\n            the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array).</param>\n            <returns>The float array, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialIntegerArray(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32,System.UInt32)\">\n            <summary>\n            Retrieves an array of integer values with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <param name=\"intCount\">The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than\n            the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array).</param>\n            <returns>The integer array, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialProperty(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a material property with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the property from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The material property, if found.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialString(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a string from the material property table.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The string, if it exists. If not, an empty string is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTextureCount(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType)\">\n            <summary>\n            Gets the number of textures contained in the material for a particular texture type.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture Type semantic</param>\n            <returns>The number of textures for the type.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTextureFilePath(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Gets the texture filepath contained in the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture type semantic</param>\n            <param name=\"index\">Texture index</param>\n            <returns>The texture filepath, if it exists. If not an empty string is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTexture(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Gets all values pertaining to a particular texture from a material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture type semantic</param>\n            <param name=\"index\">Texture index</param>\n            <returns>Returns the texture slot struct containing all the information.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetErrorString\">\n            <summary>\n            Gets the last error logged in Assimp.\n            </summary>\n            <returns>The last error message logged.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IsExtensionSupported(System.String)\">\n            <summary>\n            Checks whether the model format extension is supported by Assimp.\n            </summary>\n            <param name=\"extension\">Model format extension, e.g. \".3ds\"</param>\n            <returns>True if the format is supported, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetExtensionList\">\n            <summary>\n            Gets all the model format extensions that are currently supported by Assimp.\n            </summary>\n            <returns>Array of supported format extensions</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetImporterDescriptions\">\n            <summary>\n            Gets a collection of importer descriptions that detail metadata and feature support for each importer.\n            </summary>\n            <returns>Collection of importer descriptions</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMemoryRequirements(System.IntPtr)\">\n            <summary>\n            Gets the memory requirements of the scene.\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n            <returns>The memory information about the scene.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CreateQuaternionFromMatrix(Assimp.Quaternion@,Assimp.Matrix3x3@)\">\n            <summary>\n            Creates a quaternion from the 3x3 rotation matrix.\n            </summary>\n            <param name=\"quat\">Quaternion struct to fill</param>\n            <param name=\"mat\">Rotation matrix</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DecomposeMatrix(Assimp.Matrix4x4@,Assimp.Vector3D@,Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a 4x4 matrix into its scaling, rotation, and translation parts.\n            </summary>\n            <param name=\"mat\">4x4 Matrix to decompose</param>\n            <param name=\"scaling\">Scaling vector</param>\n            <param name=\"rotation\">Quaternion containing the rotation</param>\n            <param name=\"position\">Translation vector</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransposeMatrix4(Assimp.Matrix4x4@)\">\n            <summary>\n            Transposes the 4x4 matrix.\n            </summary>\n            <param name=\"mat\">Matrix to transpose</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransposeMatrix3(Assimp.Matrix3x3@)\">\n            <summary>\n            Transposes the 3x3 matrix.\n            </summary>\n            <param name=\"mat\">Matrix to transpose</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransformVecByMatrix3(Assimp.Vector3D@,Assimp.Matrix3x3@)\">\n            <summary>\n            Transforms the vector by the 3x3 rotation matrix.\n            </summary>\n            <param name=\"vec\">Vector to transform</param>\n            <param name=\"mat\">Rotation matrix</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransformVecByMatrix4(Assimp.Vector3D@,Assimp.Matrix4x4@)\">\n            <summary>\n            Transforms the vector by the 4x4 matrix.\n            </summary>\n            <param name=\"vec\">Vector to transform</param>\n            <param name=\"mat\">Matrix transformation</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.MultiplyMatrix4(Assimp.Matrix4x4@,Assimp.Matrix4x4@)\">\n            <summary>\n            Multiplies two 4x4 matrices. The destination matrix receives the result.\n            </summary>\n            <param name=\"dst\">First input matrix and is also the Matrix to receive the result</param>\n            <param name=\"src\">Second input matrix, to be multiplied with \"dst\".</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.MultiplyMatrix3(Assimp.Matrix3x3@,Assimp.Matrix3x3@)\">\n            <summary>\n            Multiplies two 3x3 matrices. The destination matrix receives the result.\n            </summary>\n            <param name=\"dst\">First input matrix and is also the Matrix to receive the result</param>\n            <param name=\"src\">Second input matrix, to be multiplied with \"dst\".</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IdentityMatrix3(Assimp.Matrix3x3@)\">\n            <summary>\n            Creates a 3x3 identity matrix.\n            </summary>\n            <param name=\"mat\">Matrix to hold the identity</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IdentityMatrix4(Assimp.Matrix4x4@)\">\n            <summary>\n            Creates a 4x4 identity matrix.\n            </summary>\n            <param name=\"mat\">Matrix to hold the identity</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetLegalString\">\n            <summary>\n            Gets the Assimp legal info.\n            </summary>\n            <returns>String containing Assimp legal info.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionMinor\">\n            <summary>\n            Gets the native Assimp DLL's minor version number.\n            </summary>\n            <returns>Assimp minor version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionMajor\">\n            <summary>\n            Gets the native Assimp DLL's major version number.\n            </summary>\n            <returns>Assimp major version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionRevision\">\n            <summary>\n            Gets the native Assimp DLL's revision version number.\n            </summary>\n            <returns>Assimp revision version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersion\">\n            <summary>\n            Gets the native Assimp DLL's current version number as \"major.minor.revision\" string. This is the\n            version of Assimp that this wrapper is currently using.\n            </summary>\n            <returns>Unmanaged DLL version</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionAsVersion\">\n            <summary>\n            Gets the native Assimp DLL's current version number as a .NET version object.\n            </summary>\n            <returns>Unmanaged DLL version</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetCompileFlags\">\n            <summary>\n            Get the compilation flags that describe how the native Assimp DLL was compiled.\n            </summary>\n            <returns>Compilation flags</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary.FunctionNames\">\n            <summary>\n            Defines all the unmanaged assimp C-function names.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary.Functions\">\n            <summary>\n            Defines all of the delegates that represent the unmanaged assimp functions.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.Platform\">\n            <summary>\n            Enumerates supported platforms.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Windows\">\n            <summary>\n            Windows platform.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Linux\">\n            <summary>\n            Linux platform.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Mac\">\n            <summary>\n            Mac platform.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedFunctionNameAttribute\">\n            <summary>\n            An attribute that represents the name of an unmanaged function to import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.UnmanagedFunctionName\">\n            <summary>\n            Name of the unmanaged function.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.#ctor(System.String)\">\n            <summary>\n            Constructs a new <see cref=\"P:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.UnmanagedFunctionName\"/>.\n            </summary>\n            <param name=\"unmanagedFunctionName\">Name of the function.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedLibrary\">\n            <summary>\n            Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list\n            of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load\n            unmanaged libraries.\n            </summary>\n        </member>\n        <member name=\"E:Assimp.Unmanaged.UnmanagedLibrary.LibraryLoaded\">\n            <summary>\n            Occurs when the unmanaged library is loaded.\n            </summary>\n        </member>\n        <member name=\"E:Assimp.Unmanaged.UnmanagedLibrary.LibraryFreed\">\n            <summary>\n            Occurs when the unmanaged library is freed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.IsLibraryLoaded\">\n            <summary>\n            Queries if the unmanaged library has been loaded or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.DefaultLibraryName\">\n            <summary>\n            Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional\n            names can be set in the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/> (e.g. to load versioned DLLs)\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.LibraryPath\">\n            <summary>\n            Gets the path to the unmanaged library DLL that is currently loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.Resolver\">\n            <summary>\n            Gets the resolver used to find the unmanaged library DLL when loading.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.ThrowOnLoadFailure\">\n            <summary>\n            Gets or sets whether an <see cref=\"T:Assimp.AssimpException\"/> is thrown if the unmanaged DLL fails to load for whatever reason. By\n            default this is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.Is64Bit\">\n            <summary>\n            Queries if the OS is 64-bit, if false then it is 32-bit.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.#ctor(System.String,System.Type[])\">\n            <summary>\n            Constructs a new <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/>.\n            </summary>\n            <param name=\"defaultName\">Default name (NOT path) of the unmanaged library.</param>\n            <param name=\"unmanagedFunctionDelegateTypes\">Delegate types to instantiate and load.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.GetPlatform\">\n            <summary>\n            Gets an enum representing the current OS that is application is executing on.\n            </summary>\n            <returns>Platform enumeration.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary\">\n            <summary>\n            Loads the unmanaged library using the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/>.\n            </summary>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(System.String,System.String)\">\n            <summary>\n            Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness.\n            </summary>\n            <param name=\"lib32Path\">Path to the 32-bit DLL</param>\n            <param name=\"lib64Path\">Path to the 64-bit DLL</param>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(System.String)\">\n            <summary>\n            Loads the unmanaged library using the supplied path.\n            </summary>\n            <param name=\"libPath\">Path to the unmanaged DLL.</param>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.FreeLibrary\">\n            <summary>\n            Frees the unmanaged library that is currently loaded.\n            </summary>\n            <returns>True if the library was sucessfully freed.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.GetFunction``1(System.String)\">\n            <summary>\n            Gets a delegate based on the unmanaged function name.\n            </summary>\n            <typeparam name=\"T\">Type of delegate.</typeparam>\n            <param name=\"funcName\">Name of unmanaged function that is exported by the library.</param>\n            <returns>The delegate, or null if not found.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadIfNotLoaded\">\n            <summary>\n            If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library\n            from the default path. This function is thread safe.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.OnLibraryLoaded\">\n            <summary>\n            Called when the library is loaded.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.OnLibraryFreed\">\n            <summary>\n            Called when the library is freed.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\">\n            <summary>\n            Resolves unmanaged DLLs for <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/>. The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs),\n            an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/>\n            for the search strategy.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibraryResolver.Platform\">\n            <summary>\n            Gets the platform that the application is running on. \n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.#ctor(Assimp.Unmanaged.Platform)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/> class.\n            </summary>\n            <param name=\"platformHint\">Platform we're resolving binaries for.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames32(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames64(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths32(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths64(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName32(System.String)\">\n            <summary>\n            Sets an override 32-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName64(System.String)\">\n            <summary>\n            Sets an override 64-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName(System.String)\">\n            <summary>\n            Sets an override 32-bit and 64-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\">\n            <summary>\n            Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback\n            library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try\n            and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution:\n            <para>\n            <list type=\"number\">\n            <item><description>Search user-specified probing paths.</description></item>\n            <item><description>Search {AppBaseDirectory}/runtimes/{RID}/native/.</description></item>\n            <item><description>Search {AppBaseDirectory}/.</description></item>\n            <item><description>Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/.</description></item>\n            </list>\n            </para>\n            <para>\n            The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID\n            is the Runtime Identifier based on the platform/architecture, see also <a href=\"https://docs.microsoft.com/en-us/dotnet/core/rid-catalog\">Microsoft's RID Catalog</a>.\n            </para>\n            </summary>\n            <param name=\"libName\">Name of the library to attempt to resolve.</param>\n            <returns>Full file path to the library, or the file name if not found (e.g. \"libXYZ.so\").</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiScene\">\n            <summary>\n            Represents an aiScene struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Flags\">\n            <summary>\n            unsigned int, flags about the state of the scene\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.RootNode\">\n            <summary>\n            aiNode*, root node of the scenegraph.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumMeshes\">\n            <summary>\n            Number of meshes contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Meshes\">\n            <summary>\n            aiMesh**, meshes in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumMaterials\">\n            <summary>\n            Number of materials contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Materials\">\n            <summary>\n            aiMaterial**, materials in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumAnimations\">\n            <summary>\n            Number of animations contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Animations\">\n            <summary>\n            aiAnimation**, animations in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumTextures\">\n            <summary>\n            Number of embedded textures contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Textures\">\n            <summary>\n            aiTexture**, textures in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumLights\">\n            <summary>\n            Number of lights contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Lights\">\n            <summary>\n            aiLight**, lights in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumCameras\">\n            <summary>\n            Number of cameras contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Cameras\">\n            <summary>\n            aiCamera**, cameras in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.PrivateData\">\n            <summary>\n            void*, Private data do not touch!\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiNode\">\n            <summary>\n            Represents an aiNode struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Name\">\n            <summary>\n            Name of the node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Transformation\">\n            <summary>\n            Node's transform relative to its parent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Parent\">\n            <summary>\n            aiNode*, node's parent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.NumChildren\">\n            <summary>\n            Number of children the node owns.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Children\">\n            <summary>\n            aiNode**, array of nodes this node owns.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.NumMeshes\">\n            <summary>\n            Number of meshes referenced by this node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Meshes\">\n            <summary>\n            unsigned int*, array of mesh indices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.MetaData\">\n            <summary>\n            aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMetadataEntry\">\n            <summary>\n            Represents an aiMetadataEntry struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadataEntry.DataType\">\n            <summary>\n            Type of metadata.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadataEntry.Data\">\n            <summary>\n            Pointer to data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMetadata\">\n            <summary>\n            Represents an aiMetadata struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.NumProperties\">\n            <summary>\n            Length of the Keys and Values arrays.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.keys\">\n            <summary>\n            aiString*, array of keys. May not be NULL. Each entry must exist.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.Values\">\n            <summary>\n            aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMesh\">\n            <summary>\n            Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.PrimitiveTypes\">\n            <summary>\n            unsigned int, bitwise flag detailing types of primitives contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumVertices\">\n            <summary>\n            Number of vertices in the mesh, denotes length of\n            -all- per-vertex arrays.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumFaces\">\n            <summary>\n            Number of faces in the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Vertices\">\n            <summary>\n            aiVector3D*, array of positions.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Normals\">\n            <summary>\n            aiVector3D*, array of normals.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Tangents\">\n            <summary>\n            aiVector3D*, array of tangents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.BiTangents\">\n            <summary>\n            aiVector3D*, array of bitangents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Colors\">\n            <summary>\n            aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.TextureCoords\">\n            <summary>\n            aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumUVComponents\">\n            <summary>\n            unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example.\n            Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Faces\">\n            <summary>\n            aiFace*, array of faces.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumBones\">\n            <summary>\n            Number of bones in the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Bones\">\n            <summary>\n            aiBone**, array of bones.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.MaterialIndex\">\n            <summary>\n            Material index referencing the material in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Name\">\n            <summary>\n            Optional name of the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumAnimMeshes\">\n            <summary>\n            Number of attachment meshes. NOT CURRENTLY IN USE.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.AnimMeshes\">\n            <summary>\n            aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.MorphMethod\">\n            <summary>\n            unsigned int, method of morphing when anim meshes are specified.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiTexture\">\n            <summary>\n            Represents an aiTexture struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Width\">\n            <summary>\n            Width of the texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Height\">\n            <summary>\n            Height of the texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.FormatHint\">\n            <summary>\n            sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that\n            maps to one byte. 8 for string + 1 for terminator.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Data\">\n            <summary>\n            aiTexel*, array of texel data.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.SetFormatHint(System.String)\">\n            <summary>\n            Sets the format hint.\n            </summary>\n            <param name=\"formatHint\">Format hint - must be 3 characters or less</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.GetFormatHint\">\n            <summary>\n            Gets the format hint.\n            </summary>\n            <returns>The format hint</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.GetFormatHint(Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref.\n            </summary>\n            <param name=\"aiTex\">AiTexture</param>\n            <returns>The format hint</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFace\">\n            <summary>\n            Represents an aiFace struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFace.NumIndices\">\n            <summary>\n            Number of indices in the face.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFace.Indices\">\n            <summary>\n            unsigned int*, array of indices.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiBone\">\n            <summary>\n            Represents an aiBone struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Name\">\n            <summary>\n            Name of the bone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.NumWeights\">\n            <summary>\n            Number of weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Weights\">\n            <summary>\n            VertexWeight*, array of vertex weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.OffsetMatrix\">\n            <summary>\n            Matrix that transforms the vertex from mesh to bone space in bind pose\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMaterialProperty\">\n            <summary>\n            Represents an aiMaterialProperty struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Key\">\n            <summary>\n            Name of the property (key).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Semantic\">\n            <summary>\n            Textures: Specifies texture usage. None texture properties\n            have this zero (or None).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Index\">\n            <summary>\n            Textures: Specifies the index of the texture. For non-texture properties\n            this is always zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.DataLength\">\n            <summary>\n            Size of the buffer data in bytes. This value may not be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Type\">\n            <summary>\n            Type of value contained in the buffer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Data\">\n            <summary>\n            char*, byte buffer to hold the property's value.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMaterial\">\n            <summary>\n            Represents an aiMaterial struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.Properties\">\n            <summary>\n            aiMaterialProperty**, array of material properties.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.NumProperties\">\n            <summary>\n            Number of key-value properties.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.NumAllocated\">\n            <summary>\n            Storage allocated for key-value properties.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiNodeAnim\">\n            <summary>\n            Represents an aiNodeAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NodeName\">\n            <summary>\n            Name of the node affected by the animation. The node must exist\n            and be unique.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumPositionKeys\">\n            <summary>\n            Number of position keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.PositionKeys\">\n            <summary>\n            VectorKey*, position keys of this animation channel. Positions\n            are 3D vectors and are accompanied by at least one scaling and one rotation key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumRotationKeys\">\n            <summary>\n            The number of rotation keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.RotationKeys\">\n            <summary>\n            QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions).\n            If there are rotation keys there will be at least one scaling and one position key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumScalingKeys\">\n            <summary>\n            Number of scaling keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.ScalingKeys\">\n            <summary>\n            VectorKey*, scaling keys of this animation channel. Scalings are specified as a\n            3D vector, and if there are scaling keys, there will at least be one position\n            and one rotation key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.Prestate\">\n            <summary>\n            Defines how the animation behaves before the first key is encountered.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.PostState\">\n            <summary>\n            Defines how the animation behaves after the last key was processed.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshAnim\">\n            <summary>\n            Represents an aiMeshAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.Name\">\n            <summary>\n            Name of the mesh to be animated. Empty string not allowed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.NumKeys\">\n            <summary>\n            Number of keys, there is at least one.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.Keys\">\n            <summary>\n            aiMeshkey*, the key frames of the animation. There must exist at least one.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshMorphKey\">\n            <summary>\n            Represents an aiMeshMorphKey struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Values\">\n            <summary>\n            unsigned int*, values at the time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Weights\">\n            <summary>\n            double*, weights at the time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.NumValuesAndWeights\">\n            <summary>\n            unsigned int, the number of values/weights.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshMorphAnim\">\n            <summary>\n            Represents an aiMeshMorphAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.Name\">\n            <summary>\n            aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely,\n            the name can basically serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.NumKeys\">\n            <summary>\n            unsigned int, number of key frames. Must be at least one.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.Keys\">\n            <summary>\n            aiMeshMorphKey*, key frames of the animation.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiAnimation\">\n            <summary>\n            Represents an aiAnimation struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Name\">\n            <summary>\n            Name of the animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Duration\">\n            <summary>\n            Duration of the animation in ticks.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.TicksPerSecond\">\n            <summary>\n            Ticks per second, 0 if not specified in imported file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumChannels\">\n            <summary>\n            Number of bone animation channels, each channel affects a single node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Channels\">\n            <summary>\n            aiNodeAnim**, node animation channels. Each channel affects a single node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumMeshChannels\">\n            <summary>\n            Number of mesh animation channels. Each channel affects a single mesh and defines\n            vertex-based animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.MeshChannels\">\n            <summary>\n            aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. \n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumMeshMorphChannels\">\n            <summary>\n            Number of mesh morph animation channels. Each channel affects a single mesh and defines\n            morphing animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.MeshMorphChannels\">\n            <summary>\n            aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. \n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLight\">\n            <summary>\n            Represents an aiLight struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Name\">\n            <summary>\n            Name of the light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Type\">\n            <summary>\n            Type of light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Position\">\n            <summary>\n            Position of the light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Direction\">\n            <summary>\n            Direction of the spot/directional light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Up\">\n            <summary>\n            Up direction of the light source in space. Undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationConstant\">\n            <summary>\n            Attenuation constant value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationLinear\">\n            <summary>\n            Attenuation linear value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationQuadratic\">\n            <summary>\n            Attenuation quadratic value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorDiffuse\">\n            <summary>\n            Diffuse color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorSpecular\">\n            <summary>\n            Specular color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorAmbient\">\n            <summary>\n            Ambient color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AngleInnerCone\">\n            <summary>\n            Spot light inner angle.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AngleOuterCone\">\n            <summary>\n            Spot light outer angle.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AreaSize\">\n            <summary>\n            Width (X) and Height (Y) of the area that represents an <see cref=\"F:Assimp.LightSourceType.Area\"/> light.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiCamera\">\n            <summary>\n            Represents an aiCamera struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Name\">\n            <summary>\n            Name of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Position\">\n            <summary>\n            Position of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Up\">\n            <summary>\n            Up vector of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.LookAt\">\n            <summary>\n            Viewing direction of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.HorizontalFOV\">\n            <summary>\n            Field Of View of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.ClipPlaneNear\">\n            <summary>\n            Near clip plane distance.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.ClipPlaneFar\">\n            <summary>\n            Far clip plane distance.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Aspect\">\n            <summary>\n            The Aspect ratio.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiString\">\n            <summary>\n            Represents an aiString struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiString.Length\">\n            <summary>\n            Byte length of the UTF-8 string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiString.Data\">\n            <summary>\n            Actual string data.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Unmanaged.AiString\"/> struct.\n            </summary>\n            <param name=\"data\">The string data</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.GetString(Assimp.Unmanaged.AiString@)\">\n            <summary>\n            Convienence method for getting the AiString string - if the length is not greater than zero, it returns\n            an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref.\n            </summary>\n            <param name=\"aiStr\">AiString</param>\n            <returns>AiString string data</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.GetString\">\n            <summary>\n            Convienence method for getting the AiString string - if the length is not greater than zero, it returns\n            an empty string rather than garbage.\n            </summary>\n            <returns>AiString string data</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.SetString(System.String)\">\n            <summary>\n            Convienence method for setting the AiString string (and length).\n            </summary>\n            <param name=\"data\">String data to set</param>\n            <returns>True if the operation was successful, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.ToString\">\n            <summary>\n            Returns the fully qualified type name of this instance.\n            </summary>\n            <returns>A <see cref=\"T:System.String\" /> containing a fully qualified type name.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLogStream\">\n            <summary>\n            Represents a log stream, which receives all log messages and streams them somewhere.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLogStream.Callback\">\n            <summary>\n            Function pointer that gets called when a message is to be logged.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLogStream.UserData\">\n            <summary>\n            char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMemoryInfo\">\n            <summary>\n            Represents the memory requirements for the different components of an imported\n            scene. All sizes in in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Textures\">\n            <summary>\n            Size of the storage allocated for texture data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Materials\">\n            <summary>\n            Size of the storage allocated for material data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Meshes\">\n            <summary>\n            Size of the storage allocated for mesh data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Nodes\">\n            <summary>\n            Size of the storage allocated for node data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Animations\">\n            <summary>\n            Size of the storage allocated for animation data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Cameras\">\n            <summary>\n            Size of the storage allocated for camera data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Lights\">\n            <summary>\n            Size of the storage allocated for light data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Total\">\n            <summary>\n            Total storage allocated for the imported scene, in bytes.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiAnimMesh\">\n            <summary>\n            Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Vertices\">\n            <summary>\n            aiVector3D*, replacement position array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Normals\">\n            <summary>\n            aiVector3D*, replacement normal array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Tangents\">\n            <summary>\n            aiVector3D*, replacement tangent array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.BiTangents\">\n            <summary>\n            aiVector3D*, replacement bitangent array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Colors\">\n            <summary>\n            aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.TextureCoords\">\n            <summary>\n            aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.NumVertices\">\n            <summary>\n            unsigned int, number of vertices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Weight\">\n            <summary>\n            float, weight of the AnimMesh.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiImporterDesc\">\n            <summary>\n            Describes a variety of information about an importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Name\">\n            <summary>\n            char*, full name of the importer (e.g. Blender3D Importer)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Author\">\n            <summary>\n            char*, original author (blank if unknown or assimp team)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Maintainer\">\n            <summary>\n            char*, current maintainer, left blank if the author maintains.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Comments\">\n            <summary>\n            char*, implementation comments. E.g. unimplemented features.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Flags\">\n            <summary>\n            unsigned int, features supported by the importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MinMajor\">\n            <summary>\n            unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MinMinor\">\n            <summary>\n            unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MaxMajor\">\n            <summary>\n            unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MaxMinor\">\n            <summary>\n            unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.FileExtensions\">\n            <summary>\n            char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. \"xml dae\").\n            Multiple importers may respond to the same file extension, assim\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiExportFormatDesc\">\n            <summary>\n            Describes a file format which Assimp can export to.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.FormatId\">\n            <summary>\n            char*, a short string ID to uniquely identify the export format. e.g. \"collada\" or \"obj\"\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.Description\">\n            <summary>\n            char*, a short description of the file format to present to users.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.FileExtension\">\n            <summary>\n            char*, a recommended file extension of the exported file in lower case.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiExportDataBlob\">\n            <summary>\n            Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested\n            blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Size\">\n            <summary>\n            size_t, size of the data in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Data\">\n            <summary>\n            void*, the data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Name\">\n            <summary>\n            AiString, name of the blob.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.NextBlob\">\n            <summary>\n            aiExportDataBlob*, pointer to the next blob in the chain.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileIO\">\n            <summary>\n            Contains callbacks to implement a custom file system to open and close files.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.OpenProc\">\n            <summary>\n            Function pointer to open a new file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.CloseProc\">\n            <summary>\n            Function pointer used to close an existing file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.UserData\">\n            <summary>\n            Char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFile\">\n            <summary>\n            Contains callbacks to read and write to a file opened by a custom file system.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.ReadProc\">\n            <summary>\n            Function pointer to read from a file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.WriteProc\">\n            <summary>\n            Function pointer to write to a file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.TellProc\">\n            <summary>\n            Function pointer to retrieve the current position of the file cursor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.FileSizeProc\">\n            <summary>\n            Function pointer to retrieve the size of the file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.SeekProc\">\n            <summary>\n            Function pointer to set the current position of the file cursor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.FlushProc\">\n            <summary>\n            Function pointer to flush the file contents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.UserData\">\n            <summary>\n            Char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLogStreamCallback\">\n            <summary>\n            Callback delegate for Assimp's LogStream.\n            </summary>\n            <param name=\"msg\">Log message</param>\n            <param name=\"userData\">char* pointer to user data that is passed to the callback</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileWriteProc\">\n            <summary>\n            Callback delegate for a custom file system, to write to a file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance</param>\n            <param name=\"dataToWrite\">Char* pointer to data to write (casted from a void*)</param>\n            <param name=\"sizeOfElemInBytes\">Size of a single element in bytes to write</param>\n            <param name=\"numElements\">Number of elements to write</param>\n            <returns>Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileReadProc\">\n            <summary>\n            Callback delegate for a custom file system, to read from a file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n            <param name=\"dataToRead\">Char* pointer that will store the data read (casted from a void*)</param>\n            <param name=\"sizeOfElemInBytes\">Size of a single element in bytes to read</param>\n            <param name=\"numElements\">Number of elements to read</param>\n            <returns>Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileTellProc\">\n            <summary>\n            Callback delegate for a custom file system, to tell offset/size information about the file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n            <returns>Returns the current file cursor or the file size in bytes. May be -1 if an error has occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileFlushProc\">\n            <summary>\n            Callback delegate for a custom file system, to flush the contents of the file to the disk.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileSeek\">\n            <summary>\n            Callback delegate for a custom file system, to set the current position of the file cursor.\n            </summary>\n            <param name=\"file\">Pointer to An AiFile instance.</param>\n            <param name=\"offset\">Offset from the origin.</param>\n            <param name=\"seekOrigin\">Position used as a reference</param>\n            <returns>Returns success, if successful</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileOpenProc\">\n            <summary>\n            Callback delegate for a custom file system, to open a given file and create a new AiFile instance.\n            </summary>\n            <param name=\"fileIO\">Pointer to an AiFileIO instance.</param>\n            <param name=\"pathToFile\">Path to the target file</param>\n            <param name=\"mode\">Read-write permissions to request</param>\n            <returns>Pointer to an AiFile instance.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileCloseProc\">\n            <summary>\n            Callback delegate for a custom file system, to close a given file and free its memory.\n            </summary>\n            <param name=\"fileIO\">Pointer to an AiFileIO instance.</param>\n            <param name=\"file\">Pointer to an AiFile instance that will be closed.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshColorArray\">\n            <summary>\n            Fixed length array for representing the color channels of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshColorArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshColorArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshTextureCoordinateArray\">\n            <summary>\n            Fixed length array for representing the texture coordinate channels of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshTextureCoordinateArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshTextureCoordinateArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshUVComponentArray\">\n            <summary>\n            Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshUVComponentArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshUVComponentArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.UVTransform\">\n            <summary>\n            Defines how an UV channel is transformed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Translation\">\n            <summary>\n            Translation on the U and V axes. Default is 0|0\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Scaling\">\n            <summary>\n            Scaling on the U and V axes. Default is 1|1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Rotation\">\n            <summary>\n            Rotation in counter-clockwise direction, specfied in\n            radians. The rotation center is 0.5f|0.5f and the\n            default value is zero.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Vector2D\">\n            <summary>\n            Represents a two-dimensional vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector2D.X\">\n            <summary>\n            X component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector2D.Y\">\n            <summary>\n            Y component\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Vector2D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of XY (index 0 access X, 1 access Y. If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.#ctor(System.Single,System.Single)\">\n            <summary>\n            Constructs a new Vector2D.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.#ctor(System.Single)\">\n            <summary>\n            Constructs a new Vector2D with both components\n            set the same value.\n            </summary>\n            <param name=\"value\">Value to set both X and Y to</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Set(System.Single,System.Single)\">\n            <summary>\n            Sets the X and Y values.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Length\">\n            <summary>\n            Calculates the length of the vector.\n            </summary>\n            <returns>Vector's length</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.LengthSquared\">\n            <summary>\n            Calculates the length of the vector squared.\n            </summary>\n            <returns>Vector's length squared</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Normalize\">\n            <summary>\n            Normalizes the vector where all components add to one (Unit Vector), but preserves\n            the direction that the vector represents.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Negate\">\n            <summary>\n            Negates the vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Addition(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Adds two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Added vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Subtraction(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Subtracts the second vector from the first vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Multiplies two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Multiplied vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(System.Single,Assimp.Vector2D)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source vector</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Division(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Divides the first vector by the second vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Division(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Divides the vector by a divisor value.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_UnaryNegation(Assimp.Vector2D)\">\n            <summary>\n            Negates the vector.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <returns>Negated vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Equality(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Tests equality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Inequality(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Tests inequality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Equals(Assimp.Vector2D)\">\n            <summary>\n            Tests equality between this vector and another vector.\n            </summary>\n            <param name=\"other\">Vector to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Vector3D\">\n            <summary>\n            Represents a three-dimensional vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.X\">\n            <summary>\n            X component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.Y\">\n            <summary>\n            Y component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.Z\">\n            <summary>\n            Z component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Vector3D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of XYZ (index 0 access X, 1 access Y, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Vector3D.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Constructs a new Vector3D.\n            </summary>\n            <param name=\"value\">Vector2D containing the X, Y values</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(System.Single)\">\n            <summary>\n            Constructs a new Vector3D where each component is set\n            to the same value.\n            </summary>\n            <param name=\"value\">Value to set X, Y, and Z to</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Set(System.Single,System.Single,System.Single)\">\n            <summary>\n            Sets the X, Y, and Z values.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Length\">\n            <summary>\n            Calculates the length of the vector.\n            </summary>\n            <returns>Vector's length</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.LengthSquared\">\n            <summary>\n            Calculates the length of the vector squared.\n            </summary>\n            <returns>Vector's length squared</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Normalize\">\n            <summary>\n            Normalizes the vector where all components add to one (Unit Vector), but preserves\n            the direction that the vector represents.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Negate\">\n            <summary>\n            Negates the vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Cross(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Calculates the cross product of two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Dot(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Calculates the dot product of two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Addition(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Adds two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Added vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Subtraction(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Subtracts the second vector from the first vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Multiplies two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Multiplied vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source vector</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Matrix3x3,Assimp.Vector3D)\">\n            <summary>\n            Transforms this vector by a 3x3 matrix. This \"post-multiplies\" the two.\n            </summary>\n            <param name=\"matrix\">Source matrix</param>\n            <param name=\"vector\">Source vector</param>\n            <returns>Transformed vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Matrix4x4,Assimp.Vector3D)\">\n            <summary>\n            Transforms this vector by a 4x4 matrix. This \"post-multiplies\" the two.\n            </summary>\n            <param name=\"matrix\">Source matrix</param>\n            <param name=\"vector\">Source vector</param>\n            <returns>Transformed vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Division(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Divides the first vector by the second vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Division(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Divides the vector by a divisor value.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_UnaryNegation(Assimp.Vector3D)\">\n            <summary>\n            Negates the vector.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <returns>Negated vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Equality(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Tests equality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Inequality(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Tests inequality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Equals(Assimp.Vector3D)\">\n            <summary>\n            Tests equality between this vector and another vector.\n            </summary>\n            <param name=\"other\">Vector to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.VectorKey\">\n            <summary>\n            Time-value pair specifying a 3D vector for a given time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VectorKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VectorKey.Value\">\n            <summary>\n            The 3D vector value of this key.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.VectorKey.#ctor(System.Double,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new VectorKey.\n            </summary>\n            <param name=\"time\">The time of this key.</param>\n            <param name=\"vector\">The 3D vector value of this key.</param>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_Equality(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's 3D vectors are the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_Inequality(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's 3D vectors are not the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_LessThan(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_GreaterThan(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.Equals(Assimp.VectorKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their 3D vectors are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.VertexWeight\">\n            <summary>\n            Represents a single influence of a bone on a vertex.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VertexWeight.VertexID\">\n            <summary>\n            Index of the vertex which is influenced by the bone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VertexWeight.Weight\">\n            <summary>\n            Strength of the influence in range of (0...1). All influences\n            from all bones at one vertex amounts to 1.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.VertexWeight.#ctor(System.Int32,System.Single)\">\n            <summary>\n            Constructs a new VertexWeight.\n            </summary>\n            <param name=\"vertID\">Index of the vertex.</param>\n            <param name=\"weight\">Weight of the influence.</param>\n        </member>\n        <member name=\"M:Assimp.VertexWeight.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.MemoryInterop\">\n            <summary>\n            Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or\n            replaces the entire method body. Recommended types to use are generally blittable structs.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.As``2(``0@)\">\n            <summary>\n            Casts the by-ref value from one type to another.\n            </summary>\n            <typeparam name=\"TFrom\">Type to cast from.</typeparam>\n            <typeparam name=\"TTo\">Type to cast to.</typeparam>\n            <param name=\"source\">By-ref value.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsReadonly``2(``0@)\">\n            <summary>\n            Casts the readonly by-ref value from one type to another.\n            </summary>\n            <typeparam name=\"TFrom\">Type to cast from.</typeparam>\n            <typeparam name=\"TTo\">Type to cast to.</typeparam>\n            <param name=\"source\">By-ref value.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsRef``1(System.IntPtr)\">\n            <summary>\n            Casts the pointer to a by-ref value of the specified type.\n            </summary>\n            <typeparam name=\"T\">Type to cast to.</typeparam>\n            <param name=\"pSrc\">Pointer.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteArray``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDest\">Pointer to memory location to receive the data.</param>\n            <param name=\"data\">Array containing data to write.</param>\n            <param name=\"startIndex\">Zero-based index to start reading data from the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteArrayUnaligned``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDest\">Pointer to memory location to write the data.</param>\n            <param name=\"data\">Array containing data to write.</param>\n            <param name=\"startIndex\">Zero-based index to start reading data from the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadArray``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location to read the data.</param>\n            <param name=\"data\">Array to store the copied data.</param>\n            <param name=\"startIndex\">Zero-based index to start writing data to in the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadArrayUnaligned``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location to read the data.</param>\n            <param name=\"data\">Array to store the copied data.</param>\n            <param name=\"startIndex\">Zero-based index to start writing data to in the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.SizeOfInline``1\">\n            <summary>\n            Computes the size of the type (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <returns>Size of the type in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsPointerInline``1(``0@)\">\n            <summary>\n            Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"src\">Ref to a value.</param>\n            <returns>Pointer to the memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsPointerReadonlyInline``1(``0@)\">\n            <summary>\n            Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"src\">Ref to a value.</param>\n            <returns>Pointer to the memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteInline``1(System.Void*,``0@)\">\n            <summary>\n            Writes a single element to the memory location (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDst\">Pointer to memory location.</param>\n            <param name=\"src\">Value to be written.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteUnalignedInline``1(System.Void*,``0@)\">\n            <summary>\n            Writes a single element to the memory location (inlined, unaligned copy).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDst\">Pointer to memory location.</param>\n            <param name=\"src\">Value to be written.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadInline``1(System.Void*)\">\n            <summary>\n            Reads a single element from the memory location (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location.</param>\n            <returns>Value read.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadUnalignedInline``1(System.Void*)\">\n            <summary>\n            Reads a single element from the memory location (inlined, unaligned copy).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location.</param>\n            <returns>Value read.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemCopyInline(System.Void*,System.Void*,System.UInt32)\">\n            <summary>\n            Copies the number of bytes from one pointer to the other (inlined).\n            </summary>\n            <param name=\"pDest\">Pointer to the destination memory location.</param>\n            <param name=\"pSrc\">Pointer to the source memory location</param>\n            <param name=\"byteCount\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemCopyUnalignedInline(System.Void*,System.Void*,System.UInt32)\">\n            <summary>\n            Copies the number of bytes from one pointer to the other (inlined, unaligned copy).\n            </summary>\n            <param name=\"pDest\">Pointer to the destination memory location.</param>\n            <param name=\"pSrc\">Pointer to the source memory location</param>\n            <param name=\"byteCount\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemSetInline(System.Void*,System.Byte,System.UInt32)\">\n            <summary>\n            Clears the memory to a specified value (inlined).\n            </summary>\n            <param name=\"ptr\">Pointer to the memory location.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"byteCount\">Number of bytes to to set.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemSetUnalignedInline(System.Void*,System.Byte,System.UInt32)\">\n            <summary>\n            Clears the memory to a specified value (inlined, unaligned init).\n            </summary>\n            <param name=\"ptr\">Pointer to the memory location.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"byteCount\">Number of bytes to to set.</param>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "ThirdParty/AssimpNet/5.0.0/License.txt",
    "content": "\nCopyright (c) 2012-2020 AssimpNet - Nicholas Woodfield\n \nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n \nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n====================================================================================\n\nOpen Asset Import Library (Assimp)\n\n\nCopyright (c) 2006-2018, Assimp Development Team\nAll rights reserved.\n\nRedistribution and use of this software in source and binary forms, \nwith or without modification, are permitted provided that the \nfollowing conditions are met:\n\n* Redistributions of source code must retain the above\n  copyright notice, this list of conditions and the\n  following disclaimer.\n\n* Redistributions in binary form must reproduce the above\n  copyright notice, this list of conditions and the\n  following disclaimer in the documentation and/or other\n  materials provided with the distribution.\n\n* Neither the name of the ASSIMP team, nor the names of its\n  contributors may be used to endorse or promote products\n  derived from this software without specific prior\n  written permission of the ASSIMP Development Team.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n\nAN EXCEPTION applies to all files in the ./test/models-nonbsd subfolder.\nThese are 3d models for testing purposes, from various free sources\non the internet. They are - unless otherwise stated - copyright of\ntheir respective creators, which may impose additional requirements\non the use of their work. For any of these models, see \n<model-name>.source.txt for more legal information. Contact us if you\nare a copyright holder and believe that we credited you inproperly or \nif you don't want your files to appear in the repository.\n\n"
  },
  {
    "path": "ThirdParty/AssimpNet/5.0.0/lib/net40/AssimpNet.xml",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>AssimpNet</name>\n    </assembly>\n    <members>\n        <member name=\"T:Assimp.Animation\">\n            <summary>\n            An animation consists of keyframe data for a number of nodes. For\n            each node affected by the animation, a separate series of data is given.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.Name\">\n            <summary>\n            Gets or sets the name of the animation. If the modeling package the\n            data was exported from only supports a single animation channel, this\n            name is usually empty.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.DurationInTicks\">\n            <summary>\n            Gets or sets the duration of the animation in number of ticks.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.TicksPerSecond\">\n            <summary>\n            Gets or sets the number of ticks per second. It may be zero\n            if it is not specified in the imported file.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.HasNodeAnimations\">\n            <summary>\n            Gets if the animation has node animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.NodeAnimationChannelCount\">\n            <summary>\n            Gets the number of node animation channels where each channel\n            affects a single node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.NodeAnimationChannels\">\n            <summary>\n            Gets the node animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.HasMeshAnimations\">\n            <summary>\n            Gets if the animation has mesh animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshAnimationChannelCount\">\n            <summary>\n            Gets the number of mesh animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshMorphAnimationChannelCount\">\n            <summary>\n            Gets the number of mesh morph animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshAnimationChannels\">\n            <summary>\n            Gets the mesh animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshMorphAnimationChannels\">\n            <summary>\n            Gets the mesh morph animation channels.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Animation.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Animation\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#ToNative(System.IntPtr,Assimp.Unmanaged.AiAnimation@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#FromNative(Assimp.Unmanaged.AiAnimation@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Animation.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.AssimpContext\">\n            <summary>\n            Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion\n            functionality is offered to bypass loading model data into managed memory.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.IsDisposed\">\n            <summary>\n            Gets if the context has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.Scale\">\n            <summary>\n            Gets or sets the uniform scale for the model. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.XAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.YAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.ZAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.UsingCustomIOSystem\">\n            <summary>\n            Gets whether this context is using a user-defined IO system for file handling.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.PropertyConfigurations\">\n            <summary>\n            Gets the property configurations set to this context. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.AssimpContext\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFileFromStream(System.IO.Stream,System.String)\">\n            <summary>\n            Imports a model from the stream without running any post-process steps. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ImportFile\" family of functions.\n            </summary>\n            <param name=\"stream\">Stream to read from</param>\n            <param name=\"formatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful.</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFileFromStream(System.IO.Stream,Assimp.PostProcessSteps,System.String)\">\n            <summary>\n            Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory \n            used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ImportFile\" family of functions.\n            </summary>\n            <param name=\"stream\">Stream to read from</param>\n            <param name=\"postProcessFlags\">Post processing flags, if any</param>\n            <param name=\"formatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful.</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFile(System.String)\">\n            <summary>\n            Imports a model from the specified file without running any post-process steps. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp.\n            </summary>\n            <param name=\"file\">Full path to the file</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFile(System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Imports a model from the specified file. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp.\n            </summary>\n            <param name=\"file\">Full path to the file</param>\n            <param name=\"postProcessFlags\">Post processing flags, if any</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportFile(Assimp.Scene,System.String,System.String)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a file.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"fileName\">Path to the file.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <returns>True if the scene was exported successfully, false otherwise.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportFile(Assimp.Scene,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a file.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"fileName\">Path to the file.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <param name=\"preProcessing\">Preprocessing flags to apply to the model before it is exported.</param>\n            <returns>True if the scene was exported successfully, false otherwise.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportToBlob(Assimp.Scene,System.String)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a data blob.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <returns>The resulting data blob, or null if the export failed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportToBlob(Assimp.Scene,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a data blob.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <param name=\"preProcessing\">Preprocessing flags to apply to the model before it is exported.</param>\n            <returns>The resulting data blob, or null if the export failed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,Assimp.PostProcessSteps,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"importProcessSteps\">Post processing steps used for the import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,System.String)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,Assimp.PostProcessSteps,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"importProcessSteps\">Post processing steps used for the import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,Assimp.PostProcessSteps,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"importProcessSteps\">Post processing steps used for import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,Assimp.PostProcessSteps,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"importProcessSteps\">Post processing steps used for import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.SetIOSystem(Assimp.IOSystem)\">\n            <summary>\n            Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system\n            is used instead.\n            </summary>\n            <param name=\"ioSystem\">Custom file system implementation</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveIOSystem\">\n            <summary>\n            Removes the currently set custom file system implementation from the importer.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetSupportedExportFormats\">\n            <summary>\n            Gets the model formats that are supported for export by Assimp.\n            </summary>\n            <returns>Export formats supported</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetSupportedImportFormats\">\n            <summary>\n            Gets the model formats that are supported for import by Assimp.\n            </summary>\n            <returns>Import formats supported</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetImporterDescriptions\">\n            <summary>\n            Gets descriptions for each importer that assimp has registered.\n            </summary>\n            <returns>Descriptions of supported importers.</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetImporterDescriptionFor(System.String)\">\n            <summary>\n            Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension,\n            they are called in the order that they were registered.\n            </summary>\n            <param name=\"fileExtension\">File extension to query importer support for.</param>\n            <returns>Importer description or null if it does not exist.</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.IsImportFormatSupported(System.String)\">\n            <summary>\n            Checks if the format extension (e.g. \".dae\" or \".obj\") is supported for import.\n            </summary>\n            <param name=\"format\">Model format</param>\n            <returns>True if the format is supported, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.IsExportFormatSupported(System.String)\">\n            <summary>\n            Checks if the format extension (e.g. \".dae\" or \".obj\") is supported for export.\n            </summary>\n            <param name=\"format\">Model format</param>\n            <returns>True if the format is supported, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.SetConfig(Assimp.Configs.PropertyConfig)\">\n            <summary>\n            Sets a configuration property to the context. This is only used during import.\n            </summary>\n            <param name=\"config\">Config to set</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveConfig(System.String)\">\n            <summary>\n            Removes a set configuration property by name.\n            </summary>\n            <param name=\"configName\">Name of the config property</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveConfigs\">\n            <summary>\n            Removes all configuration properties from the context.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ContainsConfig(System.String)\">\n            <summary>\n            Checks if the context has a config set by the specified name.\n            </summary>\n            <param name=\"configName\">Name of the config property</param>\n            <returns>True if the config is present, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.Dispose\">\n            <summary>\n            Disposes of resources held by the context. These include IO systems still attached.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"T:Assimp.AssimpException\">\n            <summary>\n            AssimpNet general exception.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"msg\">The error message.</param>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"paramName\">Name of the param.</param>\n            <param name=\"msg\">The error message.</param>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String,System.Exception)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"msg\">The error message</param>\n            <param name=\"innerException\">The inner exception.</param>\n        </member>\n        <member name=\"T:Assimp.Bone\">\n            <summary>\n            Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame\n            hierarchy and by which it can be addressed by animations. In addition it has a number of\n            influences on vertices and a matrix relating the mesh position to the position of the bone at the time of binding.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.Name\">\n            <summary>\n            Gets or sets the name of the bone.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.VertexWeightCount\">\n            <summary>\n            Gets the number of vertex influences the bone contains.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.HasVertexWeights\">\n            <summary>\n            Gets if the bone has vertex weights - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.VertexWeights\">\n            <summary>\n            Gets the influence weights of this bone, by vertex index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.OffsetMatrix\">\n            <summary>\n            Gets or sets the matrix that transforms from bone space to mesh space in bind pose. This matrix describes the\n            position of the mesh in the local space of this bone when the skeleton was bound. Thus it can be used directly to determine a desired vertex\n            position, given the world-space transform of the bone when animated, and the position of the vertex in mesh space.\n            \n            It is sometimes called an inverse-bind matrix or inverse-bind pose matrix.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Bone\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.#ctor(System.String,Assimp.Matrix3x3,Assimp.VertexWeight[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Bone\"/> class.\n            </summary>\n            <param name=\"name\">Name of the bone</param>\n            <param name=\"offsetMatrix\">Bone's offset matrix</param>\n            <param name=\"weights\">Vertex weights</param>\n        </member>\n        <member name=\"P:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#ToNative(System.IntPtr,Assimp.Unmanaged.AiBone@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#FromNative(Assimp.Unmanaged.AiBone@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Bone.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.BoundingBox\">\n            <summary>\n            Represents an axis-aligned bounding box\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BoundingBox.Min\">\n            <summary>\n            Minimum point of the bounding box.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BoundingBox.Max\">\n            <summary>\n            Maximum point of the bounding box.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.#ctor(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new BoundingBox.\n            </summary>\n            <param name=\"min\">Minimum point.</param>\n            <param name=\"max\">Maximum point.</param>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.op_Equality(Assimp.BoundingBox,Assimp.BoundingBox)\">\n            <summary>\n            Tests equality between two Bounding Boxes.\n            </summary>\n            <param name=\"a\">First BoundingBox</param>\n            <param name=\"b\">Second BoundingBox</param>\n            <returns>True if the Bounding Boxes are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.op_Inequality(Assimp.BoundingBox,Assimp.BoundingBox)\">\n            <summary>\n            Tests inequality between two Bounding Boxes.\n            </summary>\n            <param name=\"a\">First BoundingBox</param>\n            <param name=\"b\">Second BoundingBox</param>\n            <returns>True if the Bounding Boxes are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.Equals(Assimp.BoundingBox)\">\n            <summary>\n            Tests equality between this BoundingBox and another BoundingBox.\n            </summary>\n            <param name=\"other\">BoundingBox to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Camera\">\n            <summary>\n            Describes a right-handed camera in the scene. An important aspect is that\n            the camera itself is also part of the scenegraph, meaning any values such\n            as the direction vector are not *absolute*, they can be relative to the coordinate\n            system defined by the node which corresponds to the camera. This allows for camera\n            animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Name\">\n            <summary>\n            Gets or sets the name of the camera. This corresponds to a node in the\n            scenegraph with the same name. This node specifies the position of the\n            camera in the scene hierarchy and can be animated.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Position\">\n            <summary>\n            Gets or sets the position of the camera relative to the coordinate space defined by\n            the corresponding node. THe default value is 0|0|0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Up\">\n            <summary>\n            Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the\n            corresponding node. The 'right' vector of the camera is the cross product of the up\n            and direction vectors. The default value is 0|1|0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Direction\">\n            <summary>\n            Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node.\n            The default value is 0|0|1.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.FieldOfview\">\n            <summary>\n            Gets or sets the half horizontal field of view angle, in radians. The FoV angle is\n            the angle between the center line of the screen and the left or right border. The default\n            value is 1/4PI.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ClipPlaneNear\">\n            <summary>\n            Gets or sets the distance of the near clipping plane from the camera. The value may not\n            be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ClipPlaneFar\">\n            <summary>\n            Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must\n            be further than the near clippling plane. The default value is 1000.0f. The ratio between\n            the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid\n            floating-point inaccuracies which can lead to z-fighting.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.AspectRatio\">\n            <summary>\n            Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical\n            values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file.\n            The default value is zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ViewMatrix\">\n            <summary>\n            Gets a right-handed view matrix.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Camera.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Camera\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#ToNative(System.IntPtr,Assimp.Unmanaged.AiCamera@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#FromNative(Assimp.Unmanaged.AiCamera@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Camera.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Color3D\">\n            <summary>\n            Represents a RGB color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Color3D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of RGBA (index 0 access R, 1 access G, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color3D.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n        </member>\n        <member name=\"M:Assimp.Color3D.#ctor(System.Single)\">\n            <summary>\n            Constructs a Color3D where each component is\n            set to the same value.\n            </summary>\n            <param name=\"value\">Value to set R, G, B components</param>\n        </member>\n        <member name=\"M:Assimp.Color3D.IsBlack\">\n            <summary>\n            Determines if the color is black, or close to being black.\n            </summary>\n            <returns>True if the color is black/nearly block, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Adds the two colors together.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(Assimp.Color3D,System.Single)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to add to each component</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(System.Single,Assimp.Color3D)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"value\">Value to add to each component</param>\n            <param name=\"color\">Source color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Subtracts the second color from the first color.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(Assimp.Color3D,System.Single)\">\n            <summary>\n            Subtracts the value from each of the color's components.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to subtract from each component</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(System.Single,Assimp.Color3D)\">\n            <summary>\n            Subtracts the color's components from the value, returning\n            the result as a new color. Same as <c>new Color4D(value) - color</c>\n            </summary>\n            <param name=\"value\">Value for each component of the first color</param>\n            <param name=\"color\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Multiplies the two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Multiplied color.</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(Assimp.Color3D,System.Single)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"value\">Source color</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(System.Single,Assimp.Color3D)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Division(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Divides the first color by the second color, component wise.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Division(Assimp.Color3D,System.Single)\">\n            <summary>\n            Divides the color by a divisor value.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Equality(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Tets equality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Inequality(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Tets inequality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.Equals(Assimp.Color3D)\">\n            <summary>\n            Tests equality between this color and another color\n            </summary>\n            <param name=\"other\">Color to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Color4D\">\n            <summary>\n            Represents a Red-Green-Blue-Alpha (RGBA) color.\n            Color values range from 0 to 1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.A\">\n            <summary>\n            Alpha component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Color4D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of RGBA (index 0 access R, 1 access G, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color4D.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n            <param name=\"a\">Alpha component</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color4D. Alpha is set to 1.0.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single)\">\n            <summary>\n            Constructs a Color4D where each component is\n            set to the same value.\n            </summary>\n            <param name=\"value\">Value to set R, G, B, A components</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(Assimp.Color3D)\">\n            <summary>\n            Constructs a Color4D from a Color3D. Alpha is set to 1.0.\n            </summary>\n            <param name=\"rgb\">RGB values</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(Assimp.Color3D,System.Single)\">\n            <summary>\n            Constructs a Color4D from a Color3D and alpha value.\n            </summary>\n            <param name=\"rgb\">RGB values</param>\n            <param name=\"alpha\">Alpha value</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.IsBlack\">\n            <summary>\n            Determines if the color is black, or close to being black.\n            </summary>\n            <returns>True if the color is black/nearly block, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Adds the two colors together.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(Assimp.Color4D,System.Single)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to add to each component</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(System.Single,Assimp.Color4D)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"value\">Value to add to each component</param>\n            <param name=\"color\">Source color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Subtracts the second color from the first color.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(Assimp.Color4D,System.Single)\">\n            <summary>\n            Subtracts the value from each of the color's components.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to subtract from each component</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(System.Single,Assimp.Color4D)\">\n            <summary>\n            Subtracts the color's components from the value, returning\n            the result as a new color. Same as <c>new Color4D(value) - color</c>\n            </summary>\n            <param name=\"value\">Value for each component of the first color</param>\n            <param name=\"color\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Multiplies the two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Multiplied color.</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(Assimp.Color4D,System.Single)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"value\">Source color</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(System.Single,Assimp.Color4D)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Division(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Divides the first color by the second color, component wise.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Division(Assimp.Color4D,System.Single)\">\n            <summary>\n            Divides the color by a divisor value.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Equality(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Tets equality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Inequality(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Tets inequality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.Equals(Assimp.Color4D)\">\n            <summary>\n            Tests equality between this color and another color\n            </summary>\n            <param name=\"other\">Color to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Configs.PropertyConfig\">\n            <summary>\n            Base property config.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.PropertyConfig.Name\">\n            <summary>\n            Gets the property name.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.#ctor(System.String)\">\n            <summary>\n            Creates a new property config that has no active Assimp property store.\n            </summary>\n            <param name=\"name\">Name of the property.</param>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.ApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IntegerPropertyConfig\">\n            <summary>\n            Describes an integer configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IntegerPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IntegerPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.#ctor(System.String,System.Int32)\">\n            <summary>\n            Constructs a new IntengerPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.#ctor(System.String,System.Int32,System.Int32)\">\n            <summary>\n            constructs a new IntegerPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FloatPropertyConfig\">\n            <summary>\n            Describes a float configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FloatPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FloatPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.#ctor(System.String,System.Single)\">\n            <summary>\n            Constructs a new FloatPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.#ctor(System.String,System.Single,System.Single)\">\n            <summary>\n            Constructs a new FloatPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MatrixPropertyConfig\">\n            <summary>\n            Describes a <see cref=\"T:Assimp.Matrix4x4\"/> configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MatrixPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MatrixPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.#ctor(System.String,Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new MatrixPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.#ctor(System.String,Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new MatrixPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.BooleanPropertyConfig\">\n            <summary>\n            Describes a boolean configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.BooleanPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.BooleanPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new BooleanPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.#ctor(System.String,System.Boolean,System.Boolean)\">\n            <summary>\n            Constructs a new BooleanPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.StringPropertyConfig\">\n            <summary>\n            Describes a string configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.StringPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.StringPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.#ctor(System.String,System.String)\">\n            <summary>\n            Constructs a new StringPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.#ctor(System.String,System.String,System.String)\">\n            <summary>\n            Constructs a new StringPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.ProcessNames(System.String[])\">\n            <summary>\n            Convience method for constructing a whitespace delimited name list.\n            </summary>\n            <param name=\"names\">Array of names</param>\n            <returns>White-space delimited list as a string</returns>\n        </member>\n        <member name=\"T:Assimp.Configs.MeasureTimeConfig\">\n            <summary>\n            Configuration to enable time measurements. If enabled, each\n            part of the loading process is timed and logged. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeasureTimeConfig.MeasureTimeConfigName\">\n            <summary>\n            Gets the string name used by MeasureTimeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeasureTimeConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MeasureTimeConfig.\n            </summary>\n            <param name=\"measureTime\">True if the loading process should be timed or not.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MultithreadingConfig\">\n            <summary>\n            Configuration to set Assimp's multithreading policy. Possible\n            values are -1 to let Assimp decide, 0 to disable multithreading, or\n            any number larger than zero to force a specific number of threads. This\n            is only a hint and may be ignored by Assimp. Default value is -1.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MultithreadingConfig.MultithreadingConfigName\">\n            <summary>\n            Gets the string name used by MultithreadingConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MultithreadingConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MultithreadingConfig.\n            </summary>\n            <param name=\"value\">A value of -1 will let Assimp decide,\n            a value of zero to disable multithreading, and a value greater than zero\n            to force a specific number of threads.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NoSkeletonMeshesConfig\">\n            <summary>\n            Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid\n            in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing\n            the bones. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NoSkeletonMeshesConfig.NoSkeletonMeshesConfigName\">\n            <summary>\n            Gets the string name used by NoSkeletonMeshConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NoSkeletonMeshesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new NoSkeletonMeshConfig.\n            </summary>\n            <param name=\"disableDummySkeletonMeshes\">True if dummy skeleton mesh generation should be disabled, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TangentSmoothingAngleConfig\">\n            <summary>\n            Configuration to set the maximum angle that may be between two vertex tangents/bitangents\n            when they are smoothed during the step to calculate the tangent basis. The default\n            value is 45 degrees.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TangentSmoothingAngleConfig.TangentSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by TangentSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TangentSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new TangentSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle, in degrees.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NormalSmoothingAngleConfig\">\n            <summary>\n            Configuration to set the maximum angle between two face normals at a vertex when\n            they are smoothed during the step to calculate smooth normals. This is frequently\n            called the \"crease angle\". The maximum and default value is 175 degrees.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NormalSmoothingAngleConfig.NormalSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by NormalSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NormalSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new NormalSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle, in degrees.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MDLColorMapConfig\">\n            <summary>\n            Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5)\n            files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains\n            RGB triplets for each of the 256 palette entries. If the file is not found, a\n            default palette (from Quake 1) is used. The default value is \"colormap.lmp\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MDLColorMapConfig.MDLColorMapConfigName\">\n            <summary>\n            Gets the string name used by MDLColorMapConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MDLColorMapConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MDLColorMapConfig.\n            </summary>\n            <param name=\"fileName\">Colormap filename</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MaterialExcludeListConfig\">\n            <summary>\n            Configuration for the the <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/> step\n            to determine what materials to keep. If a material matches one of these names it will not\n            be modified or removed by the post processing step. Default is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MaterialExcludeListConfig.MaterialExcludeListConfigName\">\n            <summary>\n            Gets the string name used by MaterialExcludeListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MaterialExcludeListConfig.#ctor(System.String[])\">\n            <summary>\n            Constructs a new MaterialExcludeListConfig. Material names containing whitespace\n            <c>must</c> be enclosed in single quotation marks.\n            </summary>\n            <param name=\"materialNames\">List of material names that will not be modified or replaced by the remove redundant materials post process step.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.KeepSceneHierarchyConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed\n            where meshes with the same materials are not joined. This option can be useful\n            if you have a scene hierarchy that contains important additional information\n            which you intend to parse. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.KeepSceneHierarchyConfig.KeepSceneHierarchyConfigName\">\n            <summary>\n            Gets the string name used by KeepSceneHierarchyConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.KeepSceneHierarchyConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new KeepHierarchyConfig. \n            </summary>\n            <param name=\"keepHierarchy\">True to keep the hierarchy, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NormalizeVertexComponentsConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to normalize all vertex components into the -1...1 range. The default value is\n            false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NormalizeVertexComponentsConfig.NormalizeVertexComponentsConfigName\">\n            <summary>\n            Gets the string name used by NormalizeVertexComponentsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NormalizeVertexComponentsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new NormalizeVertexComponentsConfig.\n            </summary>\n            <param name=\"normalizeVertexComponents\">True if the post process step should normalize vertex components, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveDegeneratePrimitivesConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step to\n            remove degenerted primitives from the import immediately. The default value is false,\n            where degenerated triangles are converted to lines, and degenerated lines to points.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveDegeneratePrimitivesConfig.RemoveDegeneratePrimitivesConfigName\">\n            <summary>\n            Gets the string name used by RemoveDegeneratePrimitivesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveDegeneratePrimitivesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveDegeneratePrimitivesConfig.\n            </summary>\n            <param name=\"removeDegenerates\">True if the post process step should remove degenerate primitives, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step. If true, the area of the triangles are checked\n            to see if they are greater than 1e-6. If so, the triangle is removed if <see cref=\"T:Assimp.Configs.RemoveDegeneratePrimitivesConfig\"/> is set to true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig.RemoveDegeneratePrimitivesCheckAreaConfigName\">\n            <summary>\n            Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig.\n            </summary>\n            <param name=\"checkArea\">True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NodeExcludeListConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/> step\n            to preserve nodes matching a name in the given list. Nodes that match the names in the list\n            will not be modified or removed. Identifiers containing whitespaces\n            <c>must</c> be enclosed in single quotation marks. The default value is an\n            empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NodeExcludeListConfig.NodeExcludeListConfigName\">\n            <summary>\n            Gets the string name used by NodeExcludeListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NodeExcludeListConfig.#ctor(System.String[])\">\n            <summary>\n            Constructs a new NodeExcludeListConfig.\n            </summary>\n            <param name=\"nodeNames\">List of node names</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MeshTriangleLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step \n            that specifies the maximum number of triangles a mesh can contain. The\n            default value is MeshTriangleLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshTriangleLimitConfig.MeshTriangleLimitConfigName\">\n            <summary>\n            Gets the string name used by MeshTriangleLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshTriangleLimitConfig.MeshTriangleLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeshTriangleLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MeshTriangleLimitConfig.\n            </summary>\n            <param name=\"maxTriangleLimit\">Max number of triangles a mesh can contain.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MeshVertexLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step\n            that specifies the maximum number of vertices a mesh can contain. The\n            default value is MeshVertexLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshVertexLimitConfig.MeshVertexLimitConfigName\">\n            <summary>\n            Gets the string name used by MeshVertexLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshVertexLimitConfig.MeshVertexLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_VERTICES\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeshVertexLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MeshVertexLimitConfig.\n            </summary>\n            <param name=\"maxVertexLimit\">Max number of vertices a mesh can contain.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.VertexBoneWeightLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/> step\n            that specifies the maximum number of bone weights per vertex. The default\n            value is VertexBoneWeightLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexBoneWeightLimitConfig.VertexBoneWeightLimitConfigName\">\n            <summary>\n            gets the string name used by VertexBoneWeightLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexBoneWeightLimitConfig.VertexBoneWeightLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_LBW_MAX_WEIGHTS\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.VertexBoneWeightLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new VertexBoneWeightLimitConfig.\n            </summary>\n            <param name=\"maxBoneWeights\">Max number of bone weights per vertex.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.VertexCacheSizeConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\"/> step\n            that specifies the size of the post-transform vertex cache. The size is\n            given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexCacheSizeConfig.VertexCacheSizeConfigName\">\n            <summary>\n            Gets the string name used by VertexCacheConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexCacheSizeConfig.VertexCacheSizeConfigDefaultValue\">\n            <summary>\n            Gets the defined default vertex cache size, this corresponds to \n            the <see cref=\"F:Assimp.Unmanaged.AiDefines.PP_ICL_PTCACHE_SIZE\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.VertexCacheSizeConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new VertexCacheSizeConfig.\n            </summary>\n            <param name=\"vertexCacheSize\">Size of the post-transform vertex cache, in number of vertices.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveComponentConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.RemoveComponent\"/> step that\n            specifies which parts of the data structure is to be removed. If no valid mesh\n            remains after the step, the import fails. The default value i <see cref=\"F:Assimp.ExcludeComponent.None\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveComponentConfig.RemoveComponentConfigName\">\n            <summary>\n            Gets the string name used by RemoveComponentConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveComponentConfig.#ctor(Assimp.ExcludeComponent)\">\n            <summary>\n            Constructs a new RemoveComponentConfig.\n            </summary>\n            <param name=\"componentsToExclude\">Bit-wise combination of components to exclude.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SortByPrimitiveTypeConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step that\n            specifies which primitive types are to be removed by the step. Specifying all\n            primitive types is illegal. The default value is zero specifying none.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SortByPrimitiveTypeConfig.SortByPrimitiveTypeConfigName\">\n            <summary>\n            Gets the string name used by SortByPrimitiveTypeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SortByPrimitiveTypeConfig.#ctor(Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new SortByPrimitiveTypeConfig.\n            </summary>\n            <param name=\"typesToRemove\">Bit-wise combination of primitive types to remove</param>\n        </member>\n        <member name=\"T:Assimp.Configs.AnimationAccuracyConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step that\n            specifies the floating point accuracy for animation values, specifically\n            the episilon during comparisons. The default value is 0.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.AnimationAccuracyConfig.AnimationAccuracyConfigName\">\n            <summary>\n            Gets the string name used by AnimationAccuracyConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.AnimationAccuracyConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new AnimationAccuracyConfig.\n            </summary>\n            <param name=\"episilon\">Episilon for animation value comparisons.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IgnoreTextureCoordinatesConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step. Set to true to\n            ignore texture coordinates. This may be useful if you have to assign different kinds of textures,\n            like seasonally variable ones - one for summer and one for winter. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IgnoreTextureCoordinatesConfig.IgnoreTextureCoordinatesConfigName\">\n            <summary>\n            Gets the string name used by IgnoreTextureCoordinatesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IgnoreTextureCoordinatesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IgnoreTextureCoordinatesConfig.\n            </summary>\n            <param name=\"ignoreTexCoords\">True if texture coordinates should be ignored, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TransformUVConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.TransformUVCoords\"/> step that\n            specifies which UV transformations are to be evaluated. The default value\n            is for all combinations (scaling, rotation, translation).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TransformUVConfig.TransformUVConfigName\">\n            <summary>\n            Gets the string name used by TransformUVConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TransformUVConfig.#ctor(Assimp.UVTransformFlags)\">\n            <summary>\n            Constructs a new TransformUVConfig.\n            </summary>\n            <param name=\"transformFlags\">Bit-wise combination specifying which UV transforms that should be evaluated.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FavorSpeedConfig\">\n            <summary>\n            Configuration that is a hint to Assimp to favor speed against import quality. Enabling this\n            option may result in faster loading, or it may not. It is just a hint to loaders\n            and post-process steps to use faster code paths if possible. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FavorSpeedConfig.FavorSpeedConfigName\">\n            <summary>\n            Gets the string name used by FavorSpeedConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FavorSpeedConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FavorSpeedConfig.\n            </summary>\n            <param name=\"favorSpeed\">True if Assimp should favor speed at the expense of quality, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MaxBoneCountConfig\">\n            <summary>\n            Configures the maximum bone count per mesh for the <see cref=\"F:Assimp.PostProcessSteps.SplitByBoneCount\"/> step. Meshes are\n            split until the maximum number of bones is reached.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MaxBoneCountConfig.MaxBoneCountConfigName\">\n            <summary>\n            Gets the string name used by MaxBoneCountConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MaxBoneCountConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MaxBoneCountConfig.\n            </summary>\n            <param name=\"maxBones\">The maximum bone count.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TangentTextureChannelIndexConfig\">\n            <summary>\n            Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TangentTextureChannelIndexConfig.TangentTextureChannelIndexConfigName\">\n            <summary>\n            Gets the string name used by TangentTextureChannelIndexConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TangentTextureChannelIndexConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new TangentTextureChannelIndexConfig.\n            </summary>\n            <param name=\"textureChannelIndex\">The zero-based texture channel index.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.DeboneThresholdConfig\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.Debone\"/> threshold that is used to determine what bones are removed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.DeboneThresholdConfig.DeboneThresholdConfigName\">\n            <summary>\n            Gets the string name used by DeboneThresholdConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.DeboneThresholdConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new DeboneThresholdConfig.\n            </summary>\n            <param name=\"threshold\">The debone threshold.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.DeboneAllOrNoneConfig\">\n            <summary>\n            Configuration that requires all bones to qualify for deboning before any are removed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.DeboneAllOrNoneConfig.DeboneAllOrNoneConfigName\">\n            <summary>\n            Gets the string name used by DeboneAllOrNoneConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.DeboneAllOrNoneConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new DeboneAllOrNoneConfig.\n            </summary>\n            <param name=\"allOrNone\">True if all are required, false if none need to qualify.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RootTransformationConfig\">\n            <summary>\n            Configuration for <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> that sets a user defined matrix as the scene root node transformation before\n            transforming vertices. Default value is the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RootTransformationConfig.RootTransformationConfigName\">\n            <summary>\n            Gets the string name used by RootTransformationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RootTransformationConfig.#ctor(Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new RootTransformationConfig.\n            </summary>\n            <param name=\"rootTransform\">Root transformation matrix to be set to the root scene node during the pretransform post process step.</param>\n        </member>\n        <member name=\"M:Assimp.Configs.RootTransformationConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.GlobalScaleConfig\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.GlobalScale\"/> step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model,\n            which this processing step can utilize. Default is 1.0.\n            </summary>\n            <seealso cref=\"T:Assimp.Configs.FloatPropertyConfig\" />\n        </member>\n        <member name=\"P:Assimp.Configs.GlobalScaleConfig.GlobalScaleConfigName\">\n            <summary>\n            Gets the string name used by GlobalScaleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.GlobalScaleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new GlobalScaleConfig.\n            </summary>\n            <param name=\"globalScale\">Value to scale the entire scene by.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.AppScaleConfig\">\n            <summary>\n            Applies an application-specific scaling to the <see cref=\"T:Assimp.Configs.GlobalScaleConfig\"/> to allow for backwards compatibility. Default is 1.0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.AppScaleConfig.AppScaleConfigName\">\n            <summary>\n            Gets the string name used by AppScaleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.AppScaleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new AppScaleConfig.\n            </summary>\n            <param name=\"appScale\">Value to scale the global scale by.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.GlobalKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the \"global\" keyframe that will be imported. There are other configs\n            for specific importers that will override the global setting.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.GlobalKeyFrameImportConfig.GlobalKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by GlobalKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.GlobalKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new GlobalKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3KeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MD3 format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3KeyFrameImportConfig.MD3KeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MD3KeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3KeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MD3KeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD2KeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MD2 format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD2KeyFrameImportConfig.MD2KeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MD2KeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD2KeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MD2KeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MDLKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MDL format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MDLKeyFrameImportConfig.MDLKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MDLKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MDLKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MDLKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SMDKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the SMD format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SMDKeyFrameImportConfig.SMDKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by SMDKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SMDKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new SMDKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.UnrealKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the Unreal format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.UnrealKeyFrameImportConfig.UnrealKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by UnrealKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.UnrealKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new UnrealKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ACSeparateBackfaceCullConfig\">\n            <summary>\n            Configures the AC loader to collect all surfaces which have the \"Backface cull\" flag set in separate\n            meshes. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ACSeparateBackfaceCullConfig.ACSeparateBackfaceCullConfigName\">\n            <summary>\n            Gets the string name used by ACSeparateBackfaceCullConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ACSeparateBackfaceCullConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ACSeparateBackfaceCullConfig.\n            </summary>\n            <param name=\"separateBackfaces\">True if all surfaces that have the \"backface cull\" flag set should be collected in separate meshes, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ACEvaluateSubdivisionConfig\">\n            <summary>\n            Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence\n            of the 'subdiv' attribute in the file). By default, Assimp performs\n            the subdivision using the standard Catmull-Clark algorithm. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ACEvaluateSubdivisionConfig.ACEvaluateSubdivisionConfigName\">\n            <summary>\n            Gets the string name used by ACEvaluateSubdivisionConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ACEvaluateSubdivisionConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ACEvaluateSubdivisionConfig.\n            </summary>\n            <param name=\"evaluateSubdivision\">True if the AC loader should evaluate subdivisions, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.UnrealHandleFlagsConfig\">\n            <summary>\n            Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided).\n            The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.UnrealHandleFlagsConfig.UnrealHandleFlagsConfigName\">\n            <summary>\n            Gets the string name used by UnrealHandleFlagsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.UnrealHandleFlagsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new UnrealHandleFlagsConfig.\n            </summary>\n            <param name=\"handleFlags\">True if the unreal loader should separate faces with different surface flags, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TerragenComputeTexCoordsConfig\">\n            <summary>\n            Configures the terragen import plugin to compute UV's for terrains, if\n            they are not given. Furthermore, a default texture is assigned. The default value is false.\n            <para>UV coordinates for terrains are so simple to compute that you'll usually \n            want to compute them on your own, if you need them. This option is intended for model viewers which\n            want to offer an easy way to apply textures to terrains.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TerragenComputeTexCoordsConfig.TerragenComputeTexCoordsConfigName\">\n            <summary>\n            Gets the string name used by TerragenComputeTexCoordsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TerragenComputeTexCoordsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new TerragenComputeTexCoordsConfig.\n            </summary>\n            <param name=\"computeTexCoords\">True if terran UV coordinates should be computed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ASEReconstructNormalsConfig\">\n            <summary>\n            Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups\n            loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ASEReconstructNormalsConfig.ASEReconstructNormalsConfigName\">\n            <summary>\n            Gets the string name used by ASEReconstructNormalsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ASEReconstructNormalsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ASEReconstructNormalsConfig.\n            </summary>\n            <param name=\"reconstructNormals\">True if normals should be re-computed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3HandleMultiPartConfig\">\n            <summary>\n            Configures the M3D loader to detect and process multi-part Quake player models. These models\n            usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is\n            set to true, Assimp will try to load and combine all three files if one of them is loaded. The\n            default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3HandleMultiPartConfig.MD3HandleMultiPartConfigName\">\n            <summary>\n            Gets the string name used by MD3HandleMultiPartConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3HandleMultiPartConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MD3HandleMultiPartConfig.\n            </summary>\n            <param name=\"handleMultiParts\">True if the split files should be loaded and combined, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3SkinNameConfig\">\n            <summary>\n            Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks\n            whether a file named \"md3_file_name\"_\"skin_name\".skin exists. These files are used by\n            Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue'\n            are typical skin names. The default string value is \"default\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3SkinNameConfig.MD3SkinNameConfigName\">\n            <summary>\n            Gets the string name used by MD3SkinNameConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3SkinNameConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MD3SkinNameConfig.\n            </summary>\n            <param name=\"skinName\">The skin name.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3ShaderSourceConfig\">\n            <summary>\n            Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or\n            relative to where all MD3 shaders reside. the default string value is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3ShaderSourceConfig.MD3ShaderSourceConfigName\">\n            <summary>\n            Gets the string name used by MD3ShaderSourceConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3ShaderSourceConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MD3ShaderSourceConfig.\n            </summary>\n            <param name=\"shaderFile\">The shader file.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWOImportOneLayerConfig\">\n            <summary>\n            Configures the LWO loader to load just one layer from the model.\n            <para>LWO files consist of layers and in some cases it could be useful to load only one of them.\n            This property can be either a string - which specifies the name of the layer - or an integer - the index\n            of the layer. If the property is not set then the whole LWO model is loaded. Loading fails\n            if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty</para>\n            The default value is false (all layers are loaded).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWOImportOneLayerConfig.LWOImportOneLayerConfigName\">\n            <summary>\n            Gets the string name used by LWOImportOneLayerConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWOImportOneLayerConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new LWOImportOneLayerConfig.\n            </summary>\n            <param name=\"importOneLayerOnly\">True if only one layer should be imported, false if all layers should be imported.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD5NoAnimationAutoLoadConfig\">\n            <summary>\n            Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically.\n            The default value is false.\n            <para>The default strategy is to look for a file with the same name but with the MD5ANIm extension\n            in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration\n            option can be used to disable this behavior.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD5NoAnimationAutoLoadConfig.MD5NoAnimationAutoLoadConfigName\">\n            <summary>\n            Gets the string name used by MD5NoAnimationAutoLoadConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD5NoAnimationAutoLoadConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MD5NoAnimationAutoLoadConfig.\n            </summary>\n            <param name=\"noAutoLoadAnim\">True if animations should not be automatically loaded, false if they should be.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWSAnimationStartConfig\">\n            <summary>\n            Defines the beginning of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's. The default value is the one taken from the file.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the start time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation start from the input LWS\n            file ('FirstFrame' line)</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWSAnimationStartConfig.LWSAnimationStartConfigName\">\n            <summary>\n            Gets the string name used by LWSAnimationStartConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWSAnimationStartConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new LWSAnimationStartConfig.\n            </summary>\n            <param name=\"animStart\">Beginning of the time range</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWSAnimationEndConfig\">\n            <summary>\n            Defines the ending of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's. The default value is the one taken from the file\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the end time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation end from the input LWS\n            file.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWSAnimationEndConfig.LWSAnimationEndConfigName\">\n            <summary>\n            Gets the string name used by LWSAnimationEndConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWSAnimationEndConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new LWSAnimationEndConfig.\n            </summary>\n            <param name=\"animEnd\">Ending of the time range</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IRRAnimationFrameRateConfig\">\n            <summary>\n            Defines the output frame rate of the IRR loader.\n            <para>IRR animations are difficult to convert for Assimp and there will always be\n            a loss of quality. This setting defines how many keys per second are returned by the converter.</para>\n            The default value is 100 frames per second.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IRRAnimationFrameRateConfig.IRRAnimationFrameRateConfigName\">\n            <summary>\n            Gets the string name used by IRRAnimationFrameRateConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IRRAnimationFrameRateConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new IRRAnimationFramerateConfig.\n            </summary>\n            <param name=\"frameRate\">Number of frames per second to output.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.OgreMaterialFileConfig\">\n            <summary>\n            The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp\n            where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material,\n            and lastly the material name defined by this config property. The default value is \"Scene.Material\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.OgreMaterialFileConfig.OgreMaterialFileConfigName\">\n            <summary>\n            Gets the string name used by OgreMaterialFileConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.OgreMaterialFileConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new OgreMaterialFileConfig.\n            </summary>\n            <param name=\"materialFileName\">Material file name to load.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.OgreTextureTypeFromFilenameConfig\">\n            <summary>\n            The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified\n            in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: \n            <list type=\"bullet\">\n            <item><description>Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap</description></item>\n            <item><description>Specular Maps: _s, _spec, _specular, _specularmap</description></item>\n            <item><description>Light Maps: _l, _light, _lightmap, _occ, _occlusion</description></item>\n            <item><description>Displacement Maps: _dis, _displacement</description></item>\n            </list>\n            The matching is case insensitive. Postfix is taken between the last \"_\" and last \".\". The default behavior is to detect type from lower cased\n            texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then,\n            <see cref=\"F:Assimp.TextureType.Diffuse\"/> is used. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.OgreTextureTypeFromFilenameConfig.OgreTextureTypeFromFilenameConfigName\">\n            <summary>\n            Gets the string name used by OgreTextureTypeFromFilenameConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.OgreTextureTypeFromFilenameConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new OgreTextureTypeFromFilenameConfig.\n            </summary>\n            <param name=\"fileNameDefinesTextureUsage\">True if the filename defines texture usage, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCSkipSpaceRepresentationsConfig\">\n            <summary>\n            Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCSkipSpaceRepresentationsConfig.IFCSkipSpaceRepresentationsConfigName\">\n            <summary>\n            Gets the string name used by IFCSkipSpaceRepresentationsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCSkipSpaceRepresentationsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IFCSkipSpaceRepresentationsConfig.\n            </summary>\n            <param name=\"skipSpaceRepresentations\">True if the IfcSpace elements are skipped, false if otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCUseCustomTriangulationConfig\">\n            <summary>\n            Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false,\n            walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected\n            with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known\n            issues with these kind of polygons.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCUseCustomTriangulationConfig.IFCUseCustomTriangulationConfigName\">\n            <summary>\n            Gets the string name used by IFCUseCustomTriangulationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCUseCustomTriangulationConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IFCUseCustomTriangulationConfig.\n            </summary>\n            <param name=\"useCustomTriangulation\">True if the loader should use its own triangulation routine for walls/floors, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCSmoothingAngleConfig\">\n            <summary>\n            Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120]\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCSmoothingAngleConfig.IFCSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by IFCSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new IFCSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle when tessellating curves. Needs to be in the range of [5, 120].</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCCylindricalTessellationConfig\">\n            <summary>\n            Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180].\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCCylindricalTessellationConfig.IFCCylindricalTessellationConfigName\">\n            <summary>\n            Gets the string name used by IFCCylindricalTessellationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCCylindricalTessellationConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new IFCCylindricalTessellationConfig.\n            </summary>\n            <param name=\"tessellation\">Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180].</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ColladaIgnoreUpDirectionConfig\">\n            <summary>\n            Specifies whether the collada loader will ignore the up direction. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ColladaIgnoreUpDirectionConfig.ColladaIgnoreUpDirectionConfigName\">\n            <summary>\n            Gets the string name used by ColladaIgnoreUpDirectionConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ColladaIgnoreUpDirectionConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ColladaIgnoreUpDirectionConfig.\n            </summary>\n            <param name=\"ignoreUpDirection\">True if the loader should ignore the up direction, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ColladaUseColladaNamesConfig\">\n            <summary>\n            Specifies whether the Collada loader should use Collada names as node names.\n            If this property is set to true, the Collada names will be used as the node name. The behavior is to use the id tag (resp. sid tag, if no id tag is present) instead.\n            Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ColladaUseColladaNamesConfig.ColladaUseColladaNamesConfigName\">\n            <summary>\n            Gets the string name used by ColladaUseColladaNamesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ColladaUseColladaNamesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ColladaUseColladaNamesConfig.\n            </summary>\n            <param name=\"useColladaNames\">True if collada names should be used as node names, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAllGeometryLayersConfig\">\n            <summary>\n            Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAllGeometryLayersConfig.FBXImportAllGeometryLayersConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAllGeometryLayersConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAllGeometryLayersConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAllGeometryLayersConfig.\n            </summary>\n            <param name=\"importAllGeometryLayers\">True if all geometry layers should be merged, false otherwise to take only the first layer.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAllMaterialsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials,\n            if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAllMaterialsConfig.FBXImportAllMaterialsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAllMaterialsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAllMaterialsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAllMaterialsConfig.\n            </summary>\n            <param name=\"importAllMaterials\">True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials).</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportMaterialsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import materials. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportMaterialsConfig.FBXImportMaterialsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportMaterialsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportMaterialsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportMaterialsConfig.\n            </summary>\n            <param name=\"importMaterials\">True if the FBX importer should import materials, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportEmbeddedTexturesConfig\">\n            <summary>\n            Specifies whether the FBX importer will import embedded textures. Default is true.\n            </summary>\n            <seealso cref=\"T:Assimp.Configs.BooleanPropertyConfig\" />\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportEmbeddedTexturesConfig.FBXImportEmbeddedTexturesConfigName\">\n            <summary>\n            Gets the string name used by FBXImportEmbeddedTexturesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportEmbeddedTexturesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportEmbeddedTexturesConfig.\n            </summary>\n            <param name=\"importTextures\">True if the FBX importer should import embedded textures, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportEmbeddedTexturesLegacyNamingConfig\">\n            <summary>\n            Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportEmbeddedTexturesLegacyNamingConfig.FBXImportEmbeddedTexturesLegacyNamingConfigName\">\n            <summary>\n            Gets the string name used by FBXImportSearchEmbeddedTexturesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportEmbeddedTexturesLegacyNamingConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportSearchEmbeddedTexturesConfig.\n            </summary>\n            <param name=\"searchEmbeddedTextures\">True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportCamerasConfig\">\n            <summary>\n            Specifies whether the FBX importer will import cameras. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportCamerasConfig.FBXImportCamerasConfigName\">\n            <summary>\n            Gets the string name used by FBXImportCamerasConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportCamerasConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportCamerasConfig.\n            </summary>\n            <param name=\"importCameras\">True if the FBX importer should import cameras, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportLightsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import lights. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportLightsConfig.FBXImportLightsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportLightsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportLightsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportLightsConfig.\n            </summary>\n            <param name=\"importLights\">True if the FBX importer should import lights, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAnimationsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import animations. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAnimationsConfig.FBXImportAnimationsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAnimationsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAnimationsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAnimationsConfig.\n            </summary>\n            <param name=\"importAnimations\">True if the FBX importer should import animations, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXStrictModeConfig\">\n            <summary>\n            Specifies whether the FBX importer will act in strict mode in which only the FBX 2013\n            format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this\n            format is best supported and well-tested. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXStrictModeConfig.FBXStrictModeConfigName\">\n            <summary>\n            Gets the string name used by FBXStrictModeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXStrictModeConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXStrictModeConfig.\n            </summary>\n            <param name=\"useStrictMode\">True if FBX strict mode should be used, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXPreservePivotsConfig\">\n            <summary>\n            Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots\n            and offsets will be evaluated whenever possible. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXPreservePivotsConfig.FBXPreservePivotsConfigName\">\n            <summary>\n            Gets the string name used by FBXPreservePivotsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXPreservePivotsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXPreservePivotsConfig.\n            </summary>\n            <param name=\"preservePivots\">True if pivots should be preserved, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig\">\n            <summary>\n            Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose \n            transformation over their entire defined range. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig.FBXOptimizeEmptyAnimationCurvesConfigName\">\n            <summary>\n            Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXOptimizeEmptyAnimationCurvesConfig.\n            </summary>\n            <param name=\"optimizeEmptyAnimations\">True if empty animation curves should be dropped, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXConvertToMetersConfig\">\n            <summary>\n            Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m). Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXConvertToMetersConfig.FBXConvertToMetersConfigName\">\n            <summary>\n            Gets the string name used by FBXConvertToMetersConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXConvertToMetersConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXConvertToMetersConfig.\n            </summary>\n            <param name=\"convertToMeters\">True if the importer converts the unit from cm to m, false if do not do a conversion.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SmdLoadAnimationListConfig\">\n            <summary>\n            Specifies whether the importer will load multiple animations. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SmdLoadAnimationListConfig.SmdLoadAnimationListConfigName\">\n            <summary>\n            Gets the string name used by SmdLoadAnimationListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SmdLoadAnimationListConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new SmdLoadAnimationListConfig.\n            </summary>\n            <param name=\"loadAnimList\">True if the importer should load multiple animations, false if only one animation should be loaded.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveEmptyBonesConfig\">\n            <summary>\n            Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g.\n            attachment points). Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveEmptyBonesConfig.RemoveEmptyBonesConfigName\">\n            <summary>\n            Gets the string name used by RemoveEmptyBonesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveEmptyBonesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveEmptyBonesConfig.\n            </summary>\n            <param name=\"removeEmptyBones\">True if the importer should remove empty bones, false if they should be kept.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.XFileUseDoublesConfig\">\n            <summary>\n            Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.XFileUseDoublesConfig.XFileUseDoublesConfigName\">\n            <summary>\n            Gets the string name used by XFileUseDoublesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.XFileUseDoublesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new XFileUseDoublesConfig.\n            </summary>\n            <param name=\"useDoubles\">True if the x file uses 64-bit double values rather than 32-bit float values.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ExportPointCloudsConfig\">\n            <summary>\n            Specifies if the export process should disable a validation step that would remove data that does not contain faces. This will\n            enable point cloud data to be exported, since the 3D data is a collection of vertices without face data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ExportPointCloudsConfig.ExportPointCloudsConfigName\">\n            <summary>\n            Gets the string name used by ExportPointCloudsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ExportPointCloudsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ExportPointCloudConfig.\n            </summary>\n            <param name=\"exportPointCloud\">True if the exporter should treat vertices not grouped in faces as point clouds, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.EmbeddedTexture\">\n            <summary>\n            Represents an embedded texture. Some file formats directly embed texture assets.\n            Embedded textures may be uncompressed, where the data is given in an uncompressed format.\n            Or it may be compressed in a format like png or jpg. In the latter case, the raw\n            file bytes are given so the application must utilize an image decoder (e.g. DevIL) to\n            get access to the actual color data. This object represents both types, so some properties may or may not be valid depending\n            if it is compressed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Filename\">\n            <summary>\n            Gets or sets the texture's original filename.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.IsCompressed\">\n            <summary>\n            Gets if the texture is compressed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Width\">\n            <summary>\n            Gets the width of the texture in pixels. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Height\">\n            <summary>\n            Gets the height of the texture in pixels. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.HasNonCompressedData\">\n            <summary>\n            Gets if the texture has non-compressed texel data. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.NonCompressedDataSize\">\n            <summary>\n            Gets the size of the non-compressed texel data. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.NonCompressedData\">\n            <summary>\n            Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.HasCompressedData\">\n            <summary>\n            Gets if the embedded texture has compressed data. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedDataSize\">\n            <summary>\n            Gets the size of the compressed data. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedData\">\n            <summary>\n            Gets the raw byte data representing the compressed texture. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedFormatHint\">\n            <summary>\n            Gets the format hint to determine the type of compressed data. This hint\n            is a three-character lower-case hint like \"dds\", \"jpg\", \"png\".\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. Should use only if\n            reading from a native value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor(System.String,System.Byte[],System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. This creates a compressed\n            embedded texture.\n            </summary>\n            <param name=\"compressedFormatHint\">The 3 character format hint.</param>\n            <param name=\"compressedData\">The compressed data.</param>\n            <param name=\"originalFileName\">Optional file name for the texture.</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor(System.Int32,System.Int32,Assimp.Texel[],System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. This creates an uncompressed\n            embedded texture.\n            </summary>\n            <param name=\"width\">Width of the texture</param>\n            <param name=\"height\">Height of the texture</param>\n            <param name=\"uncompressedData\">Color data</param>\n            <param name=\"originalFileName\">Optional file name for the texture.</param>\n            <exception cref=\"T:System.ArgumentException\">Thrown if the data size does not match width * height.</exception>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#ToNative(System.IntPtr,Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#FromNative(Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MetaDataType\">\n            <summary>\n            Enumerates metadata data types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Bool\">\n            <summary>\n            Metadata is a boolean.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Int32\">\n            <summary>\n            Metadata is an integer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.UInt64\">\n            <summary>\n            Metadata is an unsigned 64-bit integer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Float\">\n            <summary>\n            Metadata is a float.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Double\">\n            <summary>\n            Metadata is a double.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.String\">\n            <summary>\n            Metadata is a string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Vector3D\">\n            <summary>\n            Metadata is a <see cref=\"F:Assimp.MetaDataType.Vector3D\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PostProcessSteps\">\n            <summary>\n            Post processing flag options, specifying a number of steps\n            that can be run on the data to either generate additional vertex\n            data or optimize the imported data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.None\">\n            <summary>\n            No flags enabled.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\">\n            <summary>\n            Calculates the tangents and binormals (bitangents)\n            for the imported meshes.\n            <para>\n            This does nothing if a mesh does not have normals. You might\n            want this post processing step to be executed if you plan\n            to use tangent space calculations such as normal mapping. There is a\n            config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which\n            allows you to specify a maximimum smoothing angle for the algorithm.\n            However, usually you'll want to leave it at the default value.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\">\n            <summary>\n            Identifies and joins identical vertex data sets within all\n            imported meshes.\n            <para>\n            After this step is run each mesh does contain only unique vertices\n            anymore, so a vertex is possibly used by multiple faces. You usually\n            want to use this post processing step. If your application deals with\n            indexed geometry, this step is compulsory or you'll just waste rendering\n            time.</para>\n            <para>If this flag is not specified, no vertices are referenced by more than one\n            face and no index buffer is required for rendering.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.MakeLeftHanded\">\n            <summary>\n            Converts all imported data to a left handed coordinate space.\n            \n            <para>By default the data is returned in a right-handed coordinate space,\n            where +X points to the right, +Z towards the viewer, and +Y upwards.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.Triangulate\">\n            <summary>\n            Triangulates all faces of all meshes.\n            <para>\n            By default the imported mesh data might contain faces with more than \n            three indices. For rendering you'll usually want all faces to\n            be triangles. This post processing step splits up all\n            higher faces to triangles. Line and point primitives are *not*\n            modified. If you want 'triangles only' with no other kinds of primitives,\n            try the following:\n            </para>\n            <list type=\"number\">\n            <item>\n            <description>Specify both <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/> and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>.</description>\n            </item>\n            <item>\n            <description>Ignore all point and line meshes when you process Assimp's output</description>\n            </item>\n            </list>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.RemoveComponent\">\n            <summary>\n            Removes some parts of the data structure (animations, materials,\n            light sources, cameras, textures, vertex components).\n            <para>\n            The components to be removed are specified in a separate configuration\n            option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't\n            need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove\n            unrequired stuff from the pipeline as early as possible results in an increased\n            performance and a better optimized output data structure.\n            </para>\n            <para>\n            This step is also useful if you want to force Assimp to recompute normals\n            or tangents. the corresponding steps don't recompute them if they're already\n            there (loaded from the source asset). By using this step you can make sure\n            they are NOT there.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateNormals\">\n            <summary>\n            Generates normals for all faces of all meshes. It may not be\n            specified together with <see cref=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\"/>.\n            <para>\n            This is ignored if normals are already there at the time where this\n            flag is evaluated. Model importers try to load them from the source file,\n            so they're usually already there. Face normals are shared between all\n            points of a single face, so a single point can have multiple normals,\n            which in other words, forces the library to duplicate vertices in\n            some cases. This makes <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> senseless then.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\">\n            <summary>\n            Generates smooth normals for all vertices of all meshes. It\n            may not be specified together with <see cref=\"F:Assimp.PostProcessSteps.GenerateNormals\"/>.\n            <para>\n            This is ignored if normals are already there at the time where\n            this flag is evaluated. Model importers try to load them from the\n            source file, so they're usually already there.\n            </para>\n            <para>The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE\n            allows you to specify an angle maximum for the normal smoothing algorithm.\n            Normals exceeding this limit are not smoothed, resulting in a 'hard' seam\n            between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual\n            appearance.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\">\n            <summary>\n            Splits large meshes into smaller submeshes.\n            <para>\n            This is useful for realtime rendering where the number\n            of triangles which can be maximally processed in a single draw call is\n            usually limited by the video driver/hardware. The maximum vertex buffer\n            is usually limited, too. Both requirements can be met with this step:\n            you may specify both a triangle and a vertex limit for a single mesh.\n            </para>\n            <para>The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT\n            and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default\n            values are 1,000,000.</para>\n            \n            <para>Warning: This can be a time consuming task.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.PreTransformVertices\">\n            <summary>\n            Removes the node graph and \"bakes\" (pre-transforms) all\n            vertices with the local transformation matrices of their nodes.\n            The output scene does still contain nodes, however, there is only\n            a root node with children, each one referencing only one mesh. \n            Each mesh referencing one material. For rendering, you can simply render\n            all meshes in order, you don't need to pay attention to local transformations\n            and the node hierarchy.\n            \n            <para>Warning: Animations are removed during this step.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.LimitBoneWeights\">\n            <summary>\n            Limits the number of bones simultaneously affecting a single\n            vertex to a maximum value.\n            <para>\n            If any vertex is affected by more than that number of bones,\n            the least important vertex weights are removed and the remaining vertex\n            weights are re-normalized so that the weights still sum up to 1.\n            </para>\n            <para>The default bone weight limit is 4 and uses the\n            AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing\n            step might be of interest for you.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ValidateDataStructure\">\n            <summary>\n            Validates the imported scene data structure.\n            <para>\n            This makes sure that all indices are valid, all animations\n            and bones are linked correctly, all material references are\n            correct, etc.\n            </para>\n            It is recommended to capture Assimp's log output if you use this flag,\n            so you can easily find out what's actually wrong if a file fails the\n            validation. The validator is quite rude and will find *all* inconsistencies\n            in the data structure. There are two types of failures:\n            <list type=\"bullet\">\n            <item>\n            <description>Error: There's something wrong with the imported data. Further\n            postprocessing is not possible and the data is not usable at all. The import\n            fails.</description>\n            </item>\n            <item>\n            <description>Warning: There are some minor issues (e.g. 1000000 animation keyframes\n            with the same time), but further postprocessing and use of the data structure is still\n            safe. Warning details are written to the log file.</description>\n            </item>\n            </list>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\">\n            <summary>\n            Re-orders triangles for better vertex cache locality.\n            \n            <para>This step tries to improve the ACMR (average post-transform vertex cache\n            miss ratio) for all meshes. The implementation runs in O(n) time \n            and is roughly based on the <a href=\"http://www.cs.princeton.edu/gfx/pubs/Sander_2007_%3ETR/tipsy.pdf\">'tipsify' algorithm</a>.</para>\n            \n            <para>If you intend to render huge models in hardware, this step might be of interest for you.\n            The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune\n            the cache optimization.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\">\n            <summary>\n            Searches for redundant/unreferenced materials and removes them.\n            <para>\n            This is especially useful in combination with the  PreTransformVertices\n            and OptimizeMeshes flags. Both join small meshes with equal characteristics, but\n            they can't do their work if two meshes have different materials. Because several\n            material settings are always lost during Assimp's import filders and because many\n            exporters don't check for redundant materials, huge models often have materials which\n            are defined several times with exactly the same settings.\n            </para>\n            <para>Several material settings not contributing to the final appearance of a surface\n            are ignored in all comparisons ... the material name is one of them. So, if you're passing\n            additional information through the content pipeline (probably using *magic* material names),\n            don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST\n            setting.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FixInFacingNormals\">\n            <summary>\n            This step tries to determine which meshes have normal vectors\n            that are facing inwards. \n            <para>\n            The algorithm is simple but effective:\n            </para>\n            <para>The bounding box of all vertices and their normals are compared\n            against the volume of the bounding box of all vertices without their normals.\n            This works well for most objects, problems might occur with planar surfaces. However,\n            the step tries to filter such cases. The step inverts all in-facing normals.\n            Generally, it is recommended to enable this step, although the result is not\n            always correct.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\">\n            <summary>\n            This step splits meshes with more than one primitive type in homogeneous submeshes.\n            <para>\n            This step is executed after triangulation and after it returns, just one\n            bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time\n            rendering where point and line primitives are often ignored or rendered separately.\n            </para>\n            <para>\n            You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need.\n            This can be used to easily exclude lines and points, which are rarely used,\n            from the import.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindDegenerates\">\n            <summary>\n            This step searches all meshes for degenerated primitives and\n            converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical.\n            <para>\n            To have degenerated primitives removed, specify the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> flag\n            try one of the following procedures:\n            </para>\n            <list type=\"numbers\">\n            <item>\n            <description>To support lines and points: Set the\n            AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as\n            soon as they are detected. They won't pass any further pipeline steps.</description>\n            </item>\n            <item>\n            <description>If you don't support lines and points: Specify <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> flag, which\n            will move line and point primitives to separate meshes.  Then set the AI_CONFIG_PP_SBP_REMOVE\n            option to <see cref=\"F:Assimp.PrimitiveType.Point\"/> and <see cref=\"F:Assimp.PrimitiveType.Line\"/> to cause <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step\n            to reject point and line meshes from the scene.</description>\n            </item>\n            </list>\n            <para>\n            This step also removes very small triangles with a surface area smaller than 10^-6. If you rely on having these small triangles, or notice holes\n            in your model, set the property <see cref=\"T:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig\"/> to false.\n            </para>\n            <para>\n            Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several\n            file formats which do not support lines or points where exporters bypass the format specification and write\n            them as degenerated triangles instead.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindInvalidData\">\n            <summary>\n            This step searches all meshes for invalid data, such as zeroed\n            normal vectors or invalid UV coordinates and removes or fixes them.\n            This is intended to get rid of some common exporter rrors.\n            <para>\n            This is especially useful for normals. If they are invalid,\n            and the step recognizes this, they will be removed and can later\n            be recomputed, e.g. by the GenerateSmoothNormals flag. The step\n            will also remove meshes that are infinitely small and reduce animation\n            tracks consisting of hundreds of redundant keys to a single key. The\n            AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check\n            for duplicate animation tracks.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateUVCoords\">\n            <summary>\n            This step converts non-UV mappings (such as spherical or\n            cylindrical mapping) to proper texture coordinate channels.\n            \n            <para>Most applications will support UV mapping only, so you will\n            probably want to specify this step in every case. Note that Assimp\n            is not always able to match the original mapping implementation of the 3D\n            app which produced a model perfectly. It's always better\n            to let the father app compute the UV channels, at least 3DS max, maya, blender,\n            lightwave, modo, .... are able to achieve this.</para>\n            \n            <para>If this step is not requested, you'll need to process the MATKEY_MAPPING\n            material property in order to display all assets properly.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.TransformUVCoords\">\n            <summary>\n            Applies per-texture UV transformations and bakes them to stand-alone vtexture\n            coordinate channels.\n            \n            <para>UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material\n            key for more information. This step processes all textures with transformed input UV coordinates\n            and generates new (pretransformed) UV channel transformations, so you will probably\n            want to specify this step.</para>\n            \n            <para>UV transformations are usually implemented in realtime apps by\n            transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous)\n            transformation matrix.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindInstances\">\n            <summary>\n            Searches for duplicated meshes and replaces them with a reference\n            to the first mesh.\n            <para>\n            This is time consuming, so don't use it if you have no time. Its\n            main purpose is to work around the limitation with some\n            file formats that don't support instanced meshes, so exporters\n            duplicate meshes.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.OptimizeMeshes\">\n            <summary>\n            Attempts to reduce the number of meshes (and draw calls). \n            <para>\n            This is recommended to be used together with <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/>\n            and is fully compatible with both <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.OptimizeGraph\">\n            <summary>\n            Optimizes scene hierarchy. Nodes with no animations, bones,\n            lights, or cameras assigned are collapsed and joined.\n            \n            <para>Node names can be lost during this step, you can specify\n            names of nodes that should'nt be touched or modified\n            with AI_CONFIG_PP_OG_EXCLUDE_LIST.</para>\n            \n            <para>Use this flag with caution. Most simple files will be collapsed to a \n            single node, complex hierarchies are usually completely lost. That's not\n            the right choice for editor environments, but probably a very effective\n            optimization if you just want to get the model data, convert it to your\n            own format and render it as fast as possible. </para>\n            \n            <para>This flag is designed to be used with <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/> for best\n            results.</para>\n            \n            <para>Scenes with thousands of extremely small meshes packed\n            in deeply nested nodes exist for almost all file formats.\n            Usage of this and <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/> usually fixes them all and\n            makes them renderable.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FlipUVs\">\n            <summary>\n            Flips all UV coordinates along the y-axis\n            and adjusts material settings/bitangents accordingly.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FlipWindingOrder\">\n            <summary>\n            Flips face winding order from CCW (default) to CW.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SplitByBoneCount\">\n            <summary>\n            Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.Debone\">\n            <summary>\n            <para>Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters\n            are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while\n            animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. \n            </para>\n            <para>Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones\n            removed if and only if all bones within the scene qualify for removal.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GlobalScale\">\n            <summary>\n            This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize.\n            Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to setup the global scaling factor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.EmbedTextures\">\n            <summary>\n            A post processting step to embed textures. This will remove external data dependencies for textures. If a texture's file does not exist at the specified path (due, for instance, to\n            an absolute path generate on another system), it will check if a file with the same name exists at the root folder of the imported model, and if so, embeds that.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ForceGenerateNormals\">\n            <summary>\n            If the step to generate normals is set, it will not run if normals already exist. This flag will force that step to run even if normals are present.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.DropNormals\">\n            <summary>\n            Drops normals for all faces of all meshes. This is ignored if no normals are present. Face normals are shared between all points of a single face,\n            so a single point can have multiple normals, which forces the library to duplicate vertices in some cases. <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> is\n            *senseless* then. This process gives sense back to <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateBoundingBoxes\">\n            <summary>\n            Generate bounding boxes for each mesh.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ExcludeComponent\">\n            <summary>\n            Enumerates components of the scene or mesh data that\n            can be excluded from the import using the post process step\n            RemoveComponent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.None\">\n            <summary>\n            No components to be excluded.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Normals\">\n            <summary>\n            Removes normal vectors\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.TangentBasis\">\n            <summary>\n            Removes tangents/binormals\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Colors\">\n            <summary>\n            Removes all color sets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.TexCoords\">\n            <summary>\n            Removes all texture UV sets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Boneweights\">\n            <summary>\n            Remove all boneweights from all meshes. Scenegraph\n            nodes corresponding to the bones are NOT removed.\n            Use OptimizeGraph step to remove them.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Animations\">\n            <summary>\n            Removes all node animations.  Coressponding scenegraph\n            nodes are NOT removed. Use OptimizeGraph step to \n            remove them.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Textures\">\n            <summary>\n            Removes all embedded textures.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Lights\">\n            <summary>\n            Removes all light sources. The corresponding scenegraph nodes are\n            NOT removed. Use the OptimizeGraph step to do this.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Cameras\">\n            <summary>\n            Removes all cameras. The corresponding scenegraph\n            nodes are NOT removed. Use the OptimizeGraph step\n            to do this.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Meshes\">\n            <summary>\n            Removes all meshes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Materials\">\n            <summary>\n            Removes all materials. One default material will be generated.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PrimitiveType\">\n            <summary>\n            Enumerates geometric primitive types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Point\">\n            <summary>\n            Point primitive. This is just a single vertex\n            in the virtual world. A face has one index for such a primitive.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Line\">\n            <summary>\n            Line primitive. This is  a line defined through a start and an\n            end position. A face contains exactly two indices for such a primitive.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Triangle\">\n            <summary>\n            Triangle primitive, consisting of three indices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Polygon\">\n            <summary>\n            A n-Gon that has more than three edges (thus is not a triangle).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.AnimationBehaviour\">\n            <summary>\n            Defines an animation channel behaves outside the defined\n            time range. This corresponds to the prestate and poststates\n            of the animation node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Default\">\n            <summary>\n            The value from the default node transformation is taken.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Constant\">\n            <summary>\n            The nearest key value is used without interpolation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Linear\">\n            <summary>\n            The value of the nearest two keys is linearly extrapolated for the current\n            time value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Repeat\">\n            <summary>\n            The animation is repeated. If the animation key goes from n to m\n            and the current time is t, use the value at (t - n ) % (|m-n|).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.MeshMorphingMethod\">\n            <summary>\n            Defines the methods of mesh morphing supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.None\">\n            <summary>\n            No morphing.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.VertexBlend\">\n            <summary>\n            Interpolation between morph targets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.MorphNormalized\">\n            <summary>\n            Normalized morphing between morph targets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.MorphRelative\">\n            <summary>\n            Relative morphing between morph targets.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.LightSourceType\">\n            <summary>\n            Enumerates all supported light sources.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Undefined\">\n            <summary>\n            Unknown light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Directional\">\n            <summary>\n            Directional light source that has a well-defined\n            direction but is infinitely far away, e.g. the sun.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Point\">\n            <summary>\n            Point light source that has a well-defined position in\n            space but is omni-directional, e.g. a light bulb.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Spot\">\n            <summary>\n            Spot light source emits light from a position in space,\n            in a certain direction that is limited by an angle, like\n            a cone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Ambient\">\n            <summary>\n            Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and\n            is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Area\">\n            <summary>\n            An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.BlendMode\">\n            <summary>\n            Defines alpha blending flags, how the final\n            color value of a pixel is computed, based on the following equation:\n            <para>\n            sourceColor * sourceBlend + destColor * destBlend\n            </para>\n            <para>\n            Where the destColor is the previous color in the frame buffer\n            and sourceColor is the material color before the\n            transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BlendMode.Default\">\n            <summary>\n            Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BlendMode.Additive\">\n            <summary>\n            Additive blending: sourcecolor * 1 + destColor * 1.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ShadingMode\">\n            <summary>\n            Defines all shading models supported by the library.\n            <para>\n            The list of shading modes has been taken from Blender. See Blender\n            documentation for more information.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.None\">\n            <summary>\n            No shading mode defined.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Flat\">\n            <summary>\n            Flat shading. Shading is done on a per-face basis and is diffuse only. Also known\n            as 'faceted shading'.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Gouraud\">\n            <summary>\n            Simple Gouraud shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Phong\">\n            <summary>\n            Phong Shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Blinn\">\n            <summary>\n            Phong-Blinn Shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Toon\">\n            <summary>\n            Toon-shading, also known as a 'comic' shader.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.OrenNayar\">\n            <summary>\n            OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness\n            of the material into account.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Minnaert\">\n            <summary>\n            Minnaert shading model. Extension to standard Lambertian shading, taking the \"darkness\" of\n            the material into account.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.CookTorrance\">\n            <summary>\n            CookTorrance shading model. Special shader for metallic surfaces.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.NoShading\">\n            <summary>\n            No shading at all. Constant light influence of 1.0.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Fresnel\">\n            <summary>\n            Fresnel shading.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureFlags\">\n            <summary>\n            Defines some mixed flags for a particular texture. This corresponds\n            to the AI_MAT_KEY_TEXFLAGS property.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.Invert\">\n            <summary>\n            The texture's color values have to be inverted (componentwise 1-n).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.UseAlpha\">\n            <summary>\n            Explicit request to the application to process the alpha channel of the texture. This is mutually\n            exclusive with <see cref=\"F:Assimp.TextureFlags.IgnoreAlpha\"/>. These flags are\n            set if the library can say for sure that the alpha channel is used/is not used.\n            If the model format does not define this, iti s left to the application to decide\n            whether the texture alpha channel - if any - is evaluated or not.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.IgnoreAlpha\">\n            <summary>\n            Explicit request to the application to ignore the alpha channel of the texture. This is mutually\n            exclusive with <see cref=\"F:Assimp.TextureFlags.UseAlpha\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureWrapMode\">\n            <summary>\n            Defines how UV coordinates outside the [0..1] range are handled. Commonly\n            referred to as the 'wrapping mode'\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Wrap\">\n            <summary>\n            A texture coordinate u|v is translated to u % 1| v % 1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Clamp\">\n            <summary>\n            Texture coordinates outside [0...1] are clamped to the nearest valid value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Mirror\">\n            <summary>\n            A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero\n            and 1 - (u % 1) | 1 - (v % 1) otherwise.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Decal\">\n            <summary>\n            If the texture coordinates for a pixel are outside [0...1] the texture is not\n            applied to that pixel.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureMapping\">\n            <summary>\n            Defines how texture coordinates are generated\n            <para>\n            Real-time applications typically require full UV coordinates. So the use\n            of <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/> step is highly recommended.\n            It generates proper UV channels for non-UV mapped objects, as long as an accurate\n            description of how the mapping should look like is given.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.FromUV\">\n            <summary>\n            Coordinates are taken from the an existing UV channel.\n            <para>\n            The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates\n            are to be taken from since meshes can have more than one UV channel.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Sphere\">\n            <summary>\n            Spherical mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Cylinder\">\n            <summary>\n            Cylinder mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Box\">\n            <summary>\n            Cubic mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Plane\">\n            <summary>\n            Planar mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Unknown\">\n            <summary>\n            Unknown mapping that is not recognied.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureOperation\">\n            <summary>\n            Defines how the Nth texture of a specific type is combined\n            with the result of all previous layers.\n            <para>\n            Example (left: key, right: value):\n            <code>\n            DiffColor0     - gray\n            DiffTextureOp0 - TextureOperation.Multiply\n            DiffTexture0   - tex1.png\n            DiffTextureOp0 - TextureOperation.Add\n            DiffTexture1   - tex2.png\n            </code>\n            <para>\n            Written as an equation, the final diffuse term for a specific\n            pixel would be:\n            </para>\n            <code>\n            diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib;\n            </code>\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Multiply\">\n            <summary>\n            T = T1 * T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Add\">\n            <summary>\n            T = T1 + T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Subtract\">\n            <summary>\n            T = T1 - T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Divide\">\n            <summary>\n            T = T1 / T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.SmoothAdd\">\n            <summary>\n            T = (T1 + T2) - (T1 * T2)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.SignedAdd\">\n            <summary>\n            T = T1 + (T2 - 0.5)\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureType\">\n            <summary>\n            Defines the purpose of a texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.None\">\n            <summary>\n            No texture, but the value can be used as a 'texture semantic'.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Diffuse\">\n            <summary>\n            A diffuse texture that is combined with the result of the diffuse lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Specular\">\n            <summary>\n            A specular texture that is combined with the result of the specular lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Ambient\">\n            <summary>\n            An ambient texture that is combined with the ambient lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Emissive\">\n            <summary>\n            An emissive texture that is added to the result of the lighting calculation. It is not influenced\n            by incoming light, instead it represents the light that the object is naturally emitting.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Height\">\n            <summary>\n            A height map texture. by convention, higher gray-scale values stand for\n            higher elevations from some base height.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Normals\">\n            <summary>\n            A tangent-space normal map. There are several conventions for normal maps\n            and Assimp does (intentionally) not distinguish here.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Shininess\">\n            <summary>\n            A texture that defines the glossiness of the material. This is the exponent of the specular (phong)\n            lighting equation. Usually there is a conversion function defined to map the linear color values\n            in the texture to a suitable exponent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Opacity\">\n            <summary>\n            The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite\n            the opposite.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Displacement\">\n            <summary>\n            A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Lightmap\">\n            <summary>\n            A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The\n            texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Reflection\">\n            <summary>\n            A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.BaseColor\">\n            <summary>\n            PBR texture property. Diffuse/albedo map containing base color regardless of the object surface type.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.NormalCamera\">\n            <summary>\n            PBR texture property. This is not documented in assimp native, but is a normal map in a PBR workflow.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.EmissionColor\">\n            <summary>\n            PBR texture property. Emissive color map, similar to <see cref=\"F:Assimp.TextureType.Emissive\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Metalness\">\n            <summary>\n            PBR texture property. Describes how reflective the object surface is.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Roughness\">\n            <summary>\n            PBR texture property. Describes how rough or smooth the object surface is.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.AmbientOcclusion\">\n            <summary>\n            Dedicated ambient occlusion map, some older formats may set this as a <see cref=\"F:Assimp.TextureType.Lightmap\"/> texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Unknown\">\n            <summary>\n            An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any\n            further postprocessing.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.SceneFlags\">\n            <summary>\n            Defines the state of the imported scene data structure.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.None\">\n            <summary>\n            Default state of the scene, it imported successfully.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Incomplete\">\n            <summary>\n            Specifies that the scene data structure that was imported is not complete.\n            This flag bypasses some internal validations and allows the import\n            of animation skeletons, material libaries, or camera animation paths\n            using Assimp. Most applications won't support such data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Validated\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>\n            post process step if validation is successful. In a validated scene you can be sure that any\n            cross references in the data structure (e.g. vertex indices) are valid.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.ValidationWarning\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>\n            post process step if validation is successful, but some issues have been found. This can for example\n            mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex\n            do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful\n            for applications which do not capture Assimp's log output.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.NonVerboseFormat\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> post process step.\n            It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the\n            verbose format, all vertices are unique where no vertex is ever referenced by more than one face.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Terrain\">\n            <summary>\n            Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles,\n            in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the\n            z-axis stores the elevation at a specific point.\n            <para>\n            TER (Terragen) and HMP (3D Game Studio) are height map formats.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.AllowShared\">\n            <summary>\n            Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from <see cref=\"F:Assimp.SceneFlags.NonVerboseFormat\"/> as \n            that has internal meanings about postprocessing steps.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ReturnCode\">\n            <summary>\n            Enumerates Assimp function result codes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.Success\">\n            <summary>\n            Function returned successfully.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.Failure\">\n            <summary>\n            There was an error.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.OutOfMemory\">\n            <summary>\n            Assimp ran out of memory.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Origin\">\n            <summary>\n            Seek origins for Assimp's virtual file system API.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.Set\">\n            <summary>\n            Beginning of the file\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.Current\">\n            <summary>\n            Current position of the file pointer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.End\">\n            <summary>\n            End of the file, offsets must be negative.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.DefaultLogStream\">\n            <summary>\n            Enumerates predefined log streaming destinations.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.File\">\n            <summary>\n            Stream log to a file\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.StdOut\">\n            <summary>\n            Stream log to the standard output\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.StdErr\">\n            <summary>\n            Stream log to the standard error output.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.Debugger\">\n            <summary>\n            MSVC only: Stream the log to the debugger (this relies\n            on OutputDebugString from the Win32 SDK).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PropertyType\">\n            <summary>\n            Defines material property types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Float\">\n            <summary>\n            Array of single-precision (32 bit) floats.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Double\">\n            <summary>\n            Array of double-precision (64 bit) floats.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.String\">\n            <summary>\n            Property is a string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Integer\">\n            <summary>\n            Array of 32 bit integers.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Buffer\">\n            <summary>\n            Byte buffer where the content is undefined.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.CompileFlags\">\n            <summary>\n            Enumerates how the native Assimp DLL was compiled\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.Shared\">\n            <summary>\n            Assimp compiled as a shared object (Windows: DLL);\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.STLport\">\n            <summary>\n            Assimp was compiled against STLport\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.Debug\">\n            <summary>\n            Assimp was compiled as a debug build\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.NoBoost\">\n            <summary>\n            Assimp was compiled with the boost work around.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.SingleThreaded\">\n            <summary>\n            Assimp was compiled built to run single threaded.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.UVTransformFlags\">\n            <summary>\n            Defines how UV coordinates should be transformed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Scaling\">\n            <summary>\n            Scaling is evaluated.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Rotation\">\n            <summary>\n            Rotation is evaluated.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Translation\">\n            <summary>\n            Translation is evaluated.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.FileIOMode\">\n            <summary>\n            Defines the desired file I/O mode is when opening a new file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.Write\">\n            <summary>\n            Open the file for writing.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.WriteBinary\">\n            <summary>\n            Open the file for writing binary data to it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.WriteText\">\n            <summary>\n            Open the file for writing text data to it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.Read\">\n            <summary>\n            Open the file for reading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.ReadBinary\">\n            <summary>\n            Open the file for reading binary data from it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.ReadText\">\n            <summary>\n            Open the file for reading text data from it.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ImporterFeatureFlags\">\n            <summary>\n            Defines flags that indicate level of support for common features for a given importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsText\">\n            <summary>\n            Indicates there is a textual encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsBinary\">\n            <summary>\n            Indicates there is a binary encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsCompressed\">\n            <summary>\n            Indicates there is a compressed encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.LimitedSupport\">\n            <summary>\n            Indicates that the importer reads only a very particular subset of the file format. This is common\n            for formats that cannot easily be mapped to the Scene data structure.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.Experimental\">\n            <summary>\n            Indicates that the importer is experimental and used with caution - this is only reserved for importers still in\n            development, and not typically yet in released production code.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ExportDataBlob\">\n            <summary>\n            Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in\n            turn can reference another and so on. This is used to allow exporters to write more than one output for a given\n            scene, such as material files. Existence of such files depends on the format.\n            </summary>\n            <remarks>\n            The stream representation of an ExportDataBlob is as follows:\n            <code>\n            String: Name of the Blob\n            int: Length of Binary Data\n            byte[]: Binary Data\n            bool: If has next data blob\n                String: Name of nested blob\n                int: Length of nested blob binary data\n                byte[]: Nested blob binary data\n                bool: If nested blob has next data blob\n                ....\n            </code>\n            </remarks>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.Name\">\n            <summary>\n            Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files\n            that are nested will have names.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.Data\">\n            <summary>\n            Get the blob data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.NextBlob\">\n            <summary>\n            Gets the next data blob.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.HasData\">\n            <summary>\n            Gets if the blob data is valid.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.#ctor(Assimp.Unmanaged.AiExportDataBlob@)\">\n            <summary>\n            Creates a new ExportDataBlob.\n            </summary>\n            <param name=\"dataBlob\">Unmanaged structure.</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Creates a new ExportDataBlob.\n            </summary>\n            <param name=\"name\">Name</param>\n            <param name=\"data\">Data</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.ToStream(System.IO.Stream)\">\n            <summary>\n            Writes the data blob to the specified stream.\n            </summary>\n            <param name=\"stream\">Output stream</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.FromStream(System.IO.Stream)\">\n            <summary>\n            Reads a data blob from the specified stream.\n            </summary>\n            <param name=\"stream\">Input stream</param>\n            <returns>Data blob</returns>\n        </member>\n        <member name=\"T:Assimp.ExportFormatDescription\">\n            <summary>\n            Describes a file format which Assimp can export to.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.FormatId\">\n            <summary>\n            Gets a short string ID to uniquely identify the export format. E.g. \"collada\" or \"obj\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.Description\">\n            <summary>\n            Gets a short description of the file format to present to users.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.FileExtension\">\n            <summary>\n            Gets the recommended file extension for the exported file in lower case.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ExportFormatDescription.#ctor(Assimp.Unmanaged.AiExportFormatDesc@)\">\n            <summary>\n            Constructs a new ExportFormatDescription.\n            </summary>\n            <param name=\"formatDesc\">Unmanaged structure</param>\n        </member>\n        <member name=\"T:Assimp.Face\">\n            <summary>\n            A single face in a mesh, referring to multiple vertices. This can be a triangle\n            if the index count is equal to three, or a polygon if the count is greater than three.\n            \n            Since multiple primitive types can be contained in a single mesh, this approach\n            allows you to better examine how the mesh is constructed. If you use the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            post process step flag during import, then each mesh will be homogenous where primitive type is concerned.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.IndexCount\">\n            <summary>\n            Gets the number of indices defined in the face.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.HasIndices\">\n            <summary>\n            Gets if the face has faces (should always be true).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.Indices\">\n            <summary>\n            Gets or sets the indices that refer to positions of vertex data in the mesh's vertex \n            arrays.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Face\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.#ctor(System.Int32[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Face\"/> class.\n            </summary>\n            <param name=\"indices\">Face indices</param>\n        </member>\n        <member name=\"P:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#ToNative(System.IntPtr,Assimp.Unmanaged.AiFace@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#FromNative(Assimp.Unmanaged.AiFace@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Face.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.FileIOSystem\">\n            <summary>\n            Simple implementation of an IOSystem that searches for files on the disk. This implementation\n            can be given a number of search directories that it will attempt to locate the file in first, before\n            using the file path given by Assimp. That way, you can load models that have files distributed in a number of other\n            directories besides the root model's.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.#ctor\">\n            <summary>\n            Constructs a new FileIOSystem that does not have any search directories.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.#ctor(System.String[])\">\n            <summary>\n            Constructs a new FileIOSystem that uses the specified search directories.\n            </summary>\n            <param name=\"searchPaths\">Search directories to search for files in</param>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.SetSearchDirectories(System.String[])\">\n            <summary>\n            Sets the search directories the FileIOSystem will use when searching for files.\n            </summary>\n            <param name=\"searchPaths\">Directory paths</param>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.GetSearchDirectories\">\n            <summary>\n            Gets the search directories the FileIOSystem is using.\n            </summary>\n            <returns>Directory paths</returns>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.OpenFile(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Opens a stream to a file.\n            </summary>\n            <param name=\"pathToFile\">Path to the file</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <returns>The IO stream</returns>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.FindFile(System.String,System.String@)\">\n            <summary>\n            Finds the first file that matches the file name (name + extension) in the search paths.\n            </summary>\n            <param name=\"fileName\">File name (+ extension) to search for</param>\n            <param name=\"pathToFile\">Found file path</param>\n            <returns>True if the file was found, false otherwise</returns>\n        </member>\n        <member name=\"T:Assimp.FileIOStream\">\n            <summary>\n            Wraps a FileStream.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ImporterDescription\">\n            <summary>\n            Metadata and feature support information for a given importer.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Name\">\n            <summary>\n            Gets the name of the importer (e.g. Blender3D Importer)\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Author\">\n            <summary>\n            Gets the original author (blank if unknown or assimp team).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Maintainer\">\n            <summary>\n            Gets the name of the current maintainer, if empty then the author maintains.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Comments\">\n            <summary>\n            Gets any implementation comments.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.FeatureFlags\">\n            <summary>\n            Gets the features supported by the importer.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.MinVersion\">\n            <summary>\n            Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.MaxVersion\">\n            <summary>\n            Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.FileExtensions\">\n            <summary>\n            Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.IMarshalable`2\">\n            <summary>\n            Represents an object that can be marshaled to and from a native representation.\n            </summary>\n            <typeparam name=\"Managed\">Managed object type</typeparam>\n            <typeparam name=\"Native\">Native value type</typeparam>\n        </member>\n        <member name=\"P:Assimp.IMarshalable`2.IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.IMarshalable`2.FromNative(`1@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"T:Assimp.INativeCustomMarshaler\">\n            <summary>\n            Custom marshaler for usage with the <see cref=\"T:Assimp.MemoryHelper\"/> for performing marshaling\n            to-and-from unmanaged memory for non-blittable types. A type must be attributed with <see cref=\"T:Assimp.NativeCustomMarshalerAttribute\"/>\n            to automatically have an instance of its marshaler be utilized.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.INativeCustomMarshaler.NativeDataSize\">\n            <summary>\n            Gets the native data size in bytes.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.INativeCustomMarshaler.MarshalManagedToNative(System.Object,System.IntPtr)\">\n            <summary>\n            Marshals the managed object to the unmanaged chunk of memory.\n            </summary>\n            <param name=\"managedObj\">Managed object to marshal.</param>\n            <param name=\"nativeData\">Unmanaged chunk of memory to write to.</param>\n        </member>\n        <member name=\"M:Assimp.INativeCustomMarshaler.MarshalNativeToManaged(System.IntPtr)\">\n            <summary>\n            Marshals the managed object from the unmanaged chunk of memory.\n            </summary>\n            <param name=\"nativeData\">Unmanaged chunk of memory to read from.</param>\n            <returns>Managed object marshaled.</returns>\n        </member>\n        <member name=\"T:Assimp.IOStream\">\n            <summary>\n            Defines a stream to some file input or output source. This object is responsible for reading/writing data\n            that is used by Assimp.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.IsDisposed\">\n            <summary>\n            Gets whether or not this IOStream has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.PathToFile\">\n            <summary>\n            Gets the original path to file given by Assimp.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.FileMode\">\n            <summary>\n            Gets the original desired file access mode.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.IsValid\">\n            <summary>\n            Gets whether the stream is in fact valid - that is, the input/output has been\n            properly located and can be read/written.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.#ctor(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Constructs a new IOStream.\n            </summary>\n            <param name=\"pathToFile\">Path to file given by Assimp</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.#ctor(System.String,Assimp.FileIOMode,System.Boolean)\">\n            <summary>\n            Constructs a new IOStream.\n            </summary>\n            <param name=\"pathToFile\">Path to file given by Assimp</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <param name=\"initialize\">True if initialize should be immediately called with the default callbacks. Set this to false\n            if your subclass requires a different way to setup the function pointers.</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Initialize(Assimp.Unmanaged.AiFileWriteProc,Assimp.Unmanaged.AiFileReadProc,Assimp.Unmanaged.AiFileTellProc,Assimp.Unmanaged.AiFileTellProc,Assimp.Unmanaged.AiFileSeek,Assimp.Unmanaged.AiFileFlushProc,System.IntPtr)\">\n            <summary>\n            Initializes the system by setting up native pointers for Assimp to the specified functions. A reference to each\n            supplied callback is held on to avoid it being GC'ed.\n            </summary>\n            <param name=\"aiFileWriteProc\">Handles write requests.</param>\n            <param name=\"aiFileReadProc\">Handles read requests.</param>\n            <param name=\"aiFileTellProc\">Handles tell requests.</param>\n            <param name=\"aiFileSizeProc\">Handles size requests.</param>\n            <param name=\"aiFileSeek\">Handles seek requests.</param>\n            <param name=\"aiFileFlushProc\">Handles flush requests.</param>\n            <param name=\"userData\">Additional user data, if any.</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.IOStream\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Dispose\">\n            <summary>\n            Disposes of resources held by the IOStream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Write(System.Byte[],System.Int64)\">\n            <summary>\n            Writes data to the stream.\n            </summary>\n            <param name=\"dataToWrite\">Data to write</param>\n            <param name=\"count\">Number of bytes to write</param>\n            <returns>Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Read(System.Byte[],System.Int64)\">\n            <summary>\n            Reads data from the stream.\n            </summary>\n            <param name=\"dataRead\">Byte buffer to store the read data in</param>\n            <param name=\"count\">Number of bytes to read</param>\n            <returns>Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Seek(System.Int64,Assimp.Origin)\">\n            <summary>\n            Sets the current file position pointer.\n            </summary>\n            <param name=\"offset\">Offset in bytes from the origin</param>\n            <param name=\"seekOrigin\">Origin reference</param>\n            <returns>ReturnCode indicating success or failure.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.GetPosition\">\n            <summary>\n            Gets the current file position pointer (in bytes).\n            </summary>\n            <returns>Current file position pointer (in bytes)</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.GetFileSize\">\n            <summary>\n            Gets the total file size (in bytes).\n            </summary>\n            <returns>File size in bytes</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Flush\">\n            <summary>\n            Flushes all data currently in the stream buffers.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Close\">\n            <summary>\n            Closes the stream - flushing any data not yet read/written and disposes of resources.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileWriteProc(System.IntPtr,System.IntPtr,System.UIntPtr,System.UIntPtr)\">\n            <summary>\n            Callback for Assimp that handles writes.\n            </summary>\n            <param name=\"file\"></param>\n            <param name=\"dataToWrite\"></param>\n            <param name=\"sizeOfElemInBytes\"></param>\n            <param name=\"numElements\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileReadProc(System.IntPtr,System.IntPtr,System.UIntPtr,System.UIntPtr)\">\n            <summary>\n            Callback for Assimp that handles reads.\n            </summary>\n            <param name=\"file\"></param>\n            <param name=\"dataRead\"></param>\n            <param name=\"sizeOfElemInBytes\"></param>\n            <param name=\"numElements\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileTellProc(System.IntPtr)\">\n            <summary>\n            Callback for Assimp that handles tell requests.\n            </summary>\n            <param name=\"file\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileSizeProc(System.IntPtr)\">\n            <summary>\n            Callback for Assimp that handles size requests.\n            </summary>\n            <param name=\"file\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileSeekProc(System.IntPtr,System.UIntPtr,Assimp.Origin)\">\n            <summary>\n            Callback for Assimp that handles seeks.\n            </summary>\n            <param name=\"file\"></param>\n            <param name=\"offset\"></param>\n            <param name=\"seekOrigin\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileFlushProc(System.IntPtr)\">\n            <summary>Callback for Assimp that handles flushes.</summary>\n            <param name=\"file\"></param>\n        </member>\n        <member name=\"T:Assimp.IOSystem\">\n            <summary>\n            Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening\n            files to read during import, and creating/writing to files during export.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOSystem.IsDisposed\">\n            <summary>\n            Gets whether or not this IOSystem has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOSystem.OpenFileCount\">\n            <summary>\n            Gets the number of currently opened streams.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.#ctor\">\n            <summary>\n            Constructs a new IOSystem.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IOSystem.\n            </summary>\n            <param name=\"initialize\">True if initialize should be immediately called with the default callbacks. Set this to false\n            if your subclass requires a different way to setup the function pointers.</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Initialize(Assimp.Unmanaged.AiFileOpenProc,Assimp.Unmanaged.AiFileCloseProc,System.IntPtr)\">\n            <summary>\n            Initializes the system by setting up native pointers for Assimp to the specified functions.\n            </summary>\n            <param name=\"fileOpenProc\">Handles open file requests.</param>\n            <param name=\"fileCloseProc\">Handles close file requests.</param>\n            <param name=\"userData\">Additional user data, if any.</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.IOSystem\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.OpenFile(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Opens a stream to a file.\n            </summary>\n            <param name=\"pathToFile\">Path to the file</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <returns>The IO stream</returns>\n        </member>\n        <member name=\"M:Assimp.IOSystem.CloseFile(Assimp.IOStream)\">\n            <summary>\n            Closes a stream that is owned by this IOSystem.\n            </summary>\n            <param name=\"stream\">Stream to close</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.CloseAllFiles\">\n            <summary>\n            Closes all outstanding streams owned by this IOSystem.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Dispose\">\n            <summary>\n            Disposes of all resources held by this object.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.OnAiFileOpenProc(System.IntPtr,System.String,System.String)\">\n            <summary>\n            Callback for Assimp that handles a file being opened.\n            </summary>\n            <param name=\"fileIO\"></param>\n            <param name=\"pathToFile\"></param>\n            <param name=\"mode\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOSystem.OnAiFileCloseProc(System.IntPtr,System.IntPtr)\">\n            <summary>\n            Callback for Assimp that handles a file being closed.\n            </summary>\n            <param name=\"fileIO\"></param>\n            <param name=\"file\"></param>\n        </member>\n        <member name=\"T:Assimp.Light\">\n            <summary>\n            Describes a light source in the scene. Assimp supports multiple light sources\n            including spot, point, and directional lights. All are defined by a single structure\n            and distinguished by their parameters. Lights have corresponding nodes in the scenegraph.\n            <para>Some file formats such as 3DS and ASE export a \"target point\", e.g. the point\n            a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode\n            of a spotlight's main node called \"spotName.Target\". However, this is just additional information\n            then, the transform tracks of the main node make the spot light already point in the right direction.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Name\">\n            <summary>\n            Gets or sets the name of the light source. This corresponds to a node present in the scenegraph.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.LightType\">\n            <summary>\n            Gets or sets the type of light source. This should never be undefined.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AngleInnerCone\">\n            <summary>\n            Gets or sets the inner angle of a spot light's light cone. The spot light has\n            maximum influence on objects inside this angle. The angle is given in radians, it\n            is 2PI for point lights and defined for directional lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AngleOuterCone\">\n            <summary>\n            Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside\n            this angle. The angle is given in radians. It is 2PI for point lights and undefined for\n            directional lights. The outer angle must be greater than or equal to the inner angle.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationConstant\">\n            <summary>\n            Gets or sets the constant light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>.\n            <para>This member corresponds to the att0 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationLinear\">\n            <summary>\n            Gets or sets the linear light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>\n            <para>This member corresponds to the att1 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationQuadratic\">\n            <summary>\n            Gets or sets the quadratic light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>.\n            <para>This member corresponds to the att2 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Position\">\n            <summary>\n            Gets or sets the position of the light source in space, relative to the\n            transformation of the node corresponding to the light. This is undefined for\n            directional lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Direction\">\n            <summary>\n            Gets or sets the direction of the light source in space, relative to the transformation\n            of the node corresponding to the light. This is undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Up\">\n            <summary>\n            Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light.\n            This is undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorDiffuse\">\n            <summary>\n            Gets or sets the diffuse color of the light source.  The diffuse light color is multiplied with\n            the diffuse material color to obtain the final color that contributes to the diffuse shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorSpecular\">\n            <summary>\n            Gets or sets the specular color of the light source. The specular light color is multiplied with the\n            specular material color to obtain the final color that contributes to the specular shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorAmbient\">\n            <summary>\n            Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient\n            material color to obtain the final color that contributes to the ambient shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AreaSize\">\n            <summary>\n            Gets or sets the Width (X) and Height (Y) of the area that represents an <see cref=\"F:Assimp.LightSourceType.Area\"/> light.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Light.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Light\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#ToNative(System.IntPtr,Assimp.Unmanaged.AiLight@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#FromNative(Assimp.Unmanaged.AiLight@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Light.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.LoggingCallback\">\n            <summary>\n            Callback delegate for Assimp's LogStream.\n            </summary>\n            <param name=\"msg\">Log message</param>\n            <param name=\"userData\">Supplied user data</param>\n        </member>\n        <member name=\"T:Assimp.LogStream\">\n            <summary>\n            Represents a log stream, which receives all log messages and streams them somewhere.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsVerboseLoggingEnabled\">\n            <summary>\n            Gets or sets, if verbose logging is enabled globally.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.UserData\">\n            <summary>\n            Gets or sets the user data to be passed to the callback.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsDisposed\">\n            <summary>\n            Gets whether the logstream has been disposed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsAttached\">\n            <summary>\n            Gets whether or not the logstream is currently attached to the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#cctor\">\n            <summary>\n            Static constructor.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"initialize\">\n            Whether to immediately initialize the system by setting up native pointers. Set this to\n            false if you want to manually initialize and use custom function pointers for advanced use cases.\n            </param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"userData\">User-supplied data</param>\n            <param name=\"initialize\">True if initialize should be immediately called with the default callbacks. Set this to false\n            if your subclass requires a different way to setup the function pointers.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(Assimp.LoggingCallback)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"callback\">Logging callback that is called when messages are received by the log stream.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(Assimp.LoggingCallback,System.String)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"callback\">Logging callback that is called when messages are received by the log stream.</param>\n            <param name=\"userData\">User-supplied data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.LogStream\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.DetachAllLogstreams\">\n            <summary>\n            Detaches all active logstreams from the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.GetAttachedLogStreams\">\n            <summary>\n            Gets all active logstreams that are currently attached to the library.\n            </summary>\n            <returns>Collection of active logstreams attached to the library.</returns>\n        </member>\n        <member name=\"M:Assimp.LogStream.Attach\">\n            <summary>\n            Attaches the logstream to the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Detach\">\n            <summary>\n            Detaches the logstream from the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Log(System.String)\">\n            <summary>\n            Logs a message.\n            </summary>\n            <param name=\"msg\">Message contents</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Dispose\">\n            <summary>\n            Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.LogMessage(System.String,System.String)\">\n            <summary>\n            Override this method to log a message for a subclass of Logstream, if no callback\n            was set.\n            </summary>\n            <param name=\"msg\">Message</param>\n            <param name=\"userData\">User data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnAttach\">\n            <summary>\n            Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnDetach\">\n            <summary>\n            Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving\n            messages until it is re-attached.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnAiLogStreamCallback(System.String,System.IntPtr)\">\n            <summary>\n            Callback for Assimp that handles a message being logged.\n            </summary>\n            <param name=\"msg\"></param>\n            <param name=\"userData\"></param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Initialize(Assimp.Unmanaged.AiLogStreamCallback,Assimp.LoggingCallback,System.String,System.IntPtr)\">\n            <summary>\n            Initializes the stream by setting up native pointers for Assimp to the specified functions.\n            </summary>\n            <param name=\"aiLogStreamCallback\">Callback that is marshaled to native code, a reference is held on to avoid it being GC'ed.</param>\n            <param name=\"callback\">User callback, if any. Defaults to console if null.</param>\n            <param name=\"userData\">User data, or empty.</param>\n            <param name=\"assimpUserData\">Additional assimp user data, if any.</param>\n        </member>\n        <member name=\"T:Assimp.ConsoleLogStream\">\n            <summary>\n            Log stream that writes messages to the Console.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.#ctor\">\n            <summary>\n            Constructs a new console logstream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.#ctor(System.String)\">\n            <summary>\n            Constructs a new console logstream.\n            </summary>\n            <param name=\"userData\">User supplied data</param>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.LogMessage(System.String,System.String)\">\n            <summary>\n            Log a message to the console.\n            </summary>\n            <param name=\"msg\">Message</param>\n            <param name=\"userData\">Userdata</param>\n        </member>\n        <member name=\"T:Assimp.Material\">\n            <summary>\n            A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally\n            all this information is stored as key-value pair properties. The class contains many convienence methods and properties for\n            accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present,\n            and if they aren't a default value will be returned.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PropertyCount\">\n            <summary>\n            Gets the number of properties contained in the material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasName\">\n            <summary>\n            Checks if the material has a name property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Name\">\n            <summary>\n            Gets the material name value, if any. Default value is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTwoSided\">\n            <summary>\n            Checks if the material has a two-sided property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsTwoSided\">\n            <summary>\n            Gets if the material should be rendered as two-sided. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShadingMode\">\n            <summary>\n            Checks if the material has a shading-mode property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShadingMode\">\n            <summary>\n            Gets the shading mode. Default value is <see cref=\"F:Assimp.ShadingMode.None\"/>, meaning it is not defined.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasWireFrame\">\n            <summary>\n            Checks if the material has a wireframe property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsWireFrameEnabled\">\n            <summary>\n            Gets if wireframe should be enabled. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasBlendMode\">\n            <summary>\n            Checks if the material has a blend mode property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.BlendMode\">\n            <summary>\n            Gets the blending mode. Default value is <see cref=\"F:Assimp.BlendMode.Default\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasOpacity\">\n            <summary>\n            Checks if the material has an opacity property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Opacity\">\n            <summary>\n            Gets the opacity. Default value is 1.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTransparencyFactor\">\n            <summary>\n            Checks if the material has a transparency factor property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TransparencyFactor\">\n            <summary>\n            Gets the transparency factor.  This is used to make a surface more or less opaque (0 = opaque, 1 = transparent). Default value is 0.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasBumpScaling\">\n            <summary>\n            Checks if the material has a bump scaling property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.BumpScaling\">\n            <summary>\n            Gets the bump scaling. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShininess\">\n            <summary>\n            Checks if the material has a shininess property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Shininess\">\n            <summary>\n            Gets the shininess. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShininessStrength\">\n            <summary>\n            Checks if the material has a shininess strength property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShininessStrength\">\n            <summary>\n            Gets the shininess strength. Default vaulue is 1.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasReflectivity\">\n            <summary>\n            Checks if the material has a reflectivty property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Reflectivity\">\n            <summary>\n            Gets the reflectivity. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorDiffuse\">\n            <summary>\n            Checks if the material has a color diffuse property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorDiffuse\">\n            <summary>\n            Gets the color diffuse. Default value is white.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorAmbient\">\n            <summary>\n            Checks if the material has a color ambient property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorAmbient\">\n            <summary>\n            Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorSpecular\">\n            <summary>\n            Checks if the material has a color specular property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorSpecular\">\n            <summary>\n            Gets the color specular. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorEmissive\">\n            <summary>\n            Checks if the material has a color emissive property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorEmissive\">\n            <summary>\n            Gets the color emissive. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorTransparent\">\n            <summary>\n            Checks if the material has a color transparent property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorTransparent\">\n            <summary>\n            Gets the color transparent. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorReflective\">\n            <summary>\n            Checks if the material has a color reflective property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorReflective\">\n            <summary>\n            Gets the color reflective. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureDiffuse\">\n            <summary>\n            Gets if the material has a diffuse texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureDiffuse\">\n            <summary>\n            Gets or sets diffuse texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureSpecular\">\n            <summary>\n            Gets if the material has a specular texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureSpecular\">\n            <summary>\n            Gets or sets specular texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureAmbient\">\n            <summary>\n            Gets if the material has a ambient texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureAmbient\">\n            <summary>\n            Gets or sets ambient texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureEmissive\">\n            <summary>\n            Gets if the material has a emissive texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureEmissive\">\n            <summary>\n            Gets or sets emissive texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureHeight\">\n            <summary>\n            Gets if the material has a height texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureHeight\">\n            <summary>\n            Gets or sets height texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureNormal\">\n            <summary>\n            Gets if the material has a normal texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureNormal\">\n            <summary>\n            Gets or sets normal texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureOpacity\">\n            <summary>\n            Gets if the material has an opacity texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureOpacity\">\n            <summary>\n            Gets or sets opacity texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureDisplacement\">\n            <summary>\n            Gets if the material has a displacement texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureDisplacement\">\n            <summary>\n            Gets or sets displacement texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureLightMap\">\n            <summary>\n            Gets if the material has a light map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureLightMap\">\n            <summary>\n            Gets or sets light map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureAmbientOcclusion\">\n            <summary>\n            Gets if the material has an ambient occlusion map in in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureAmbientOcclusion\">\n            <summary>\n            Gets or sets ambient occlusion texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureReflection\">\n            <summary>\n            Gets if the material has a reflection texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureReflection\">\n            <summary>\n            Gets or sets reflection texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsPBRMaterial\">\n            <summary>\n            Determines if the material is part of a PBR workflow or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBR\">\n            <summary>\n            Gets a group accessor for any PBR properties in the material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShaders\">\n            <summary>\n            Gets if the material has embedded shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Shaders\">\n            <summary>\n            Gets a group accessor for any embedded shader source code in the material.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Material\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.CreateFullyQualifiedName(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\". This is the name that is used as the material dictionary key.\n            </summary>\n            <param name=\"baseName\">Key basename, this must not be null or empty</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>The fully qualified name</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetNonTextureProperty(System.String)\">\n            <summary>\n            Gets the non-texture properties contained in this Material. The name should be\n            the \"base name\", as in it should not contain texture type/texture index information. E.g. \"$clr.diffuse\" rather than \"$clr.diffuse,0,0\". The extra\n            data will be filled in automatically.\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetProperty(System.String)\">\n            <summary>\n            Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasNonTextureProperty(System.String)\">\n            <summary>\n            Checks if the material has the specified non-texture property. The name should be\n            the \"base name\", as in it should not contain texture type/texture index information. E.g. \"$clr.diffuse\" rather than \"$clr.diffuse,0,0\". The extra\n            data will be filled in automatically.\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasProperty(System.String)\">\n            <summary>\n            Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddProperty(Assimp.MaterialProperty)\">\n            <summary>\n            Adds a property to this material.\n            </summary>\n            <param name=\"matProp\">Material property</param>\n            <returns>True if the property was successfully added, false otherwise (e.g. null or key already present).</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveNonTextureProperty(System.String)\">\n            <summary>\n            Removes a non-texture property from the material.\n            </summary>\n            <param name=\"baseName\">Property name</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Removes a property from the material.\n            </summary>\n            <param name=\"baseName\">Name of the property</param>\n            <param name=\"texType\">Property texture type</param>\n            <param name=\"texIndex\">Property texture index</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveProperty(System.String)\">\n            <summary>\n            Removes a property from the material.\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property ({basename},{texType},{texIndex})</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.Clear\">\n            <summary>\n            Removes all properties from the material;\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.GetAllProperties\">\n            <summary>\n            Gets -all- properties contained in the Material.\n            </summary>\n            <returns>All properties in the material property map.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTextureCount(Assimp.TextureType)\">\n            <summary>\n            Gets all the number of textures that are of the specified texture type.\n            </summary>\n            <param name=\"texType\">Texture type</param>\n            <returns>Texture count</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddMaterialTexture(Assimp.TextureSlot@)\">\n            <summary>\n            Adds a texture to the material - this bulk creates a property for each field. This will\n            either create properties or overwrite existing properties. If the texture has no\n            file path, nothing is added.\n            </summary>\n            <param name=\"texture\">Texture to add</param>\n            <returns>True if the texture properties were added or modified</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddMaterialTexture(Assimp.TextureSlot@,System.Boolean)\">\n            <summary>\n            Adds a texture to the material - this bulk creates a property for each field. This will\n            either create properties or overwrite existing properties. If the texture has no\n            file path, nothing is added.\n            </summary>\n            <param name=\"texture\">Texture to add</param>\n            <param name=\"onlySetFilePath\">True to only set the texture's file path, false otherwise</param>\n            <returns>True if the texture properties were added or modified</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveMaterialTexture(Assimp.TextureSlot@)\">\n            <summary>\n            Removes a texture from the material - this bulk removes a property for each field.\n            If the texture has no file path, nothing is removed\n            </summary>\n            <param name=\"texture\">Texture to remove</param>\n            <returns>True if the texture was removed, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTexture(Assimp.TextureType,System.Int32,Assimp.TextureSlot@)\">\n            <summary>\n            Gets a texture that corresponds to the type/index.\n            </summary>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"texIndex\">Texture index</param>\n            <param name=\"texture\">Texture description</param>\n            <returns>True if the texture was found in the material</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTextures(Assimp.TextureType)\">\n            <summary>\n            Gets all textures that correspond to the type.\n            </summary>\n            <param name=\"type\">Texture type</param>\n            <returns>The array of textures</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetAllMaterialTextures\">\n            <summary>\n            Gets all textures in the material.\n            </summary>\n            <returns>The array of textures</returns>\n        </member>\n        <member name=\"P:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMaterial@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#FromNative(Assimp.Unmanaged.AiMaterial@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Material.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Material.PBRMaterialProperties\">\n            <summary>\n            Groups all PBR workflow properties into a single accessor.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureBaseColor\">\n            <summary>\n            Gets if the material has a base color map (albedo/diffuse) texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureBaseColor\">\n            <summary>\n            Gets or sets the base color map (albedo/diffuse) texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureNormalCamera\">\n            <summary>\n            Gets if the material has a normal map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureNormalCamera\">\n            <summary>\n            Gets or sets the normal map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureEmissionColor\">\n            <summary>\n            Gets if the material has an emission color map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureEmissionColor\">\n            <summary>\n            Gets or sets the emission color map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureMetalness\">\n            <summary>\n            Gets if the material has a metalness map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureMetalness\">\n            <summary>\n            Gets or sets the metalness map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureRoughness\">\n            <summary>\n            Gets if the material has a roughness map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureRoughness\">\n            <summary>\n            Gets or sets the roughness map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.PBRMaterialProperties.#ctor(Assimp.Material)\">\n            <summary>\n            Constructs new property group accessor.\n            </summary>\n            <param name=\"parent\">Material</param>\n        </member>\n        <member name=\"T:Assimp.Material.ShaderMaterialProperties\">\n            <summary>\n            Groups all the properties for shader sources in a single accessor.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasShaderLanguageType\">\n            <summary>\n            Gets if the material has a property for shader language type.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.ShaderLanguageType\">\n            <summary>\n            Gets or sets what language (HLSL, GLSL, etc) any shader source code in this material is of.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasVertexShader\">\n            <summary>\n            Gets if the material has a property for vertex shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.VertexShader\">\n            <summary>\n            Gets or sets vertex shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasFragmentShader\">\n            <summary>\n            Gets if the material has a property for fragment (pixel) shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.FragmentShader\">\n            <summary>\n            Gets or sets fragment (pixel) shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasGeometryShader\">\n            <summary>\n            Gets if the material has a property for geometry shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.GeometryShader\">\n            <summary>\n            Gets or sets geometry shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasTesselationShader\">\n            <summary>\n            Gets if the material has a property for tesselation shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.TesselationShader\">\n            <summary>\n            Gets or sets tesselation shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasPrimitiveShader\">\n            <summary>\n            Gets if the material has a property for primitive (domain) shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.PrimitiveShader\">\n            <summary>\n            Gets or sets primitive (domain) shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasComputeShader\">\n            <summary>\n            Gets if the material has a property for compute shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.ComputeShader\">\n            <summary>\n            Gets or sets compute shader source code.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.ShaderMaterialProperties.#ctor(Assimp.Material)\">\n            <summary>\n            Constructs new property group accessor.\n            </summary>\n            <param name=\"parent\">Material</param>\n        </member>\n        <member name=\"T:Assimp.MaterialProperty\">\n            <summary>\n            A key-value pairing that represents some material property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.Name\">\n            <summary>\n            Gets or sets the property key name. E.g. $tex.file. This corresponds to the\n            \"AiMatKeys\" base name constants.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.PropertyType\">\n            <summary>\n            Gets or sets the type of property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.ByteCount\">\n            <summary>\n            Gets the raw byte data count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.HasRawData\">\n            <summary>\n            Checks if the property has data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.RawData\">\n            <summary>\n            Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.TextureType\">\n            <summary>\n            Gets or sets the texture type semantic, for non-texture properties this is always <see cref=\"F:Assimp.TextureType.None\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.TextureIndex\">\n            <summary>\n            Gets or sets the texture index, for non-texture properties this is always zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.FullyQualifiedName\">\n            <summary>\n            Gets the property's fully qualified name. Format: \"{base name},{texture type semantic},{texture index}\". E.g. \"$clr.diffuse,0,0\". This\n            is the key that is used to index the property in the material property map.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a buffer property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"buffer\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Single)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a float property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Int32)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs an integer property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a boolean property.\n            </summary>\n            <param name=\"baseName\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a string property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a texture property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"textureIndex\">Texture index</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Single[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a float array property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"values\">Property values</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Int32[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a int array property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"values\">Property values</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,Assimp.Color3D)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a Color3D property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,Assimp.Color4D)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a Color4D property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatValue\">\n            <summary>\n            Gets the property raw data as a float.\n            </summary>\n            <returns>Float</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetFloatValue(System.Single)\">\n            <summary>\n            Sets the property raw data with a float.\n            </summary>\n            <param name=\"value\">Float.</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetDoubleValue\">\n            <summary>\n            Gets the property raw data as a double.\n            </summary>\n            <returns>Double</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetDoubleValue(System.Double)\">\n            <summary>\n            Sets the property raw data with a double.\n            </summary>\n            <param name=\"value\">Double.</param>\n            <returns>True if successful, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerValue\">\n            <summary>\n            Gets the property raw data as an integer.\n            </summary>\n            <returns>Integer</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetIntegerValue(System.Int32)\">\n            <summary>\n            Sets the property raw data as an integer.\n            </summary>\n            <param name=\"value\">Integer</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetStringValue\">\n            <summary>\n            Gets the property raw data as a string.\n            </summary>\n            <returns>String</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetStringValue(System.String)\">\n            <summary>\n            Sets the property raw data as string.\n            </summary>\n            <param name=\"value\">String</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatArrayValue(System.Int32)\">\n            <summary>\n            Gets the property raw data as a float array.\n            </summary>\n            <param name=\"count\">Number of elements to get</param>\n            <returns>Float array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatArrayValue\">\n            <summary>\n            Gets the property raw data as a float array.\n            </summary>\n            <returns>Float array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetFloatArrayValue(System.Single[])\">\n            <summary>\n            Sets the property raw data as a float array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetDoubleArrayValue\">\n            <summary>\n            Gets the property raw data as a double array.\n            </summary>\n            <returns>Double array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetDoubleArrayValue(System.Double[])\">\n            <summary>\n            Sets the property raw data as a double array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerArrayValue(System.Int32)\">\n            <summary>\n            Gets the property raw data as an integer array.\n            </summary>\n            <param name=\"count\">Number of elements to get</param>\n            <returns>Integer array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerArrayValue\">\n            <summary>\n            Gets the property raw data as an integer array.\n            </summary>\n            <returns>Integer array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetIntegerArrayValue(System.Int32[])\">\n            <summary>\n            Sets the property raw data as an integer array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetBooleanValue\">\n            <summary>\n            Gets the property raw data as a boolean.\n            </summary>\n            <returns>Boolean</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetBooleanValue(System.Boolean)\">\n            <summary>\n            Sets the property raw data as a boolean.\n            </summary>\n            <param name=\"value\">Boolean value</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetColor3DValue\">\n            <summary>\n            Gets the property raw data as a Color3D.\n            </summary>\n            <returns>Color3D</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetColor3DValue(Assimp.Color3D)\">\n            <summary>\n            Sets the property raw data as a Color3D.\n            </summary>\n            <param name=\"value\">Color3D</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetColor4DValue\">\n            <summary>\n            Gets the property raw data as a Color4D.\n            </summary>\n            <returns>Color4D</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetColor4DValue(Assimp.Color4D)\">\n            <summary>\n            Sets the property raw data as a Color4D.\n            </summary>\n            <param name=\"value\">Color4D</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMaterialProperty@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#FromNative(Assimp.Unmanaged.AiMaterialProperty@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Matrix3x3\">\n            <summary>\n            Represents a 3x3 matrix. Assimp docs say their matrices are always row-major,\n            and it looks like they're only describing the memory layout. Matrices are treated\n            as column vectors however (X base in the first column, Y base the second, and Z base the third)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A1\">\n            <summary>\n            Value at row 1, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A2\">\n            <summary>\n            Value at row 1, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A3\">\n            <summary>\n            Value at row 1, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B1\">\n            <summary>\n            Value at row 2, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B2\">\n            <summary>\n            Value at row 2, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B3\">\n            <summary>\n            Value at row 2, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C1\">\n            <summary>\n            Value at row 3, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C2\">\n            <summary>\n            Value at row 3, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C3\">\n            <summary>\n            Value at row 3, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.Identity\">\n            <summary>\n            Gets the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.IsIdentity\">\n            <summary>\n            Gets if this matrix is an identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.Item(System.Int32,System.Int32)\">\n            <summary>\n            Gets or sets the value at the specific one-based row, column\n            index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices\n            out of range return a value of zero.\n            \n            </summary>\n            <param name=\"i\">One-based Row index</param>\n            <param name=\"j\">One-based Column index</param>\n            <returns>Matrix value</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Matrix3x3.\n            </summary>\n            <param name=\"a1\">Element at row 1, column 1</param>\n            <param name=\"a2\">Element at row 1, column 2</param>\n            <param name=\"a3\">Element at row 1, column 3</param>\n            <param name=\"b1\">Element at row 2, column 1</param>\n            <param name=\"b2\">Element at row 2, column 2</param>\n            <param name=\"b3\">Element at row 2, column 3</param>\n            <param name=\"c1\">Element at row 3, column 1</param>\n            <param name=\"c2\">Element at row 3, column 2</param>\n            <param name=\"c3\">Element at row 3, column 3</param>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.#ctor(Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new Matrix3x3.\n            </summary>\n            <param name=\"rotMatrix\">A 4x4 matrix to construct from, only taking the rotation/scaling part.</param>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Transpose\">\n            <summary>\n            Transposes this matrix (rows become columns, vice versa).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Inverse\">\n            <summary>\n            Inverts the matrix. If the matrix is *not* invertible all elements are set to <see cref=\"F:System.Single.NaN\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Determinant\">\n            <summary>\n            Compute the determinant of this matrix.\n            </summary>\n            <returns>The determinant</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromEulerAnglesXYZ(System.Single,System.Single,System.Single)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"x\">Rotation angle about the x-axis, in radians.</param>\n            <param name=\"y\">Rotation angle about the y-axis, in radians.</param>\n            <param name=\"z\">Rotation angle about the z-axis, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromEulerAnglesXYZ(Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"angles\">Vector containing the rotation angles about the x, y, z axes, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationX(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the x-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationY(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the y-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationZ(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the z-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromAngleAxis(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix for a rotation about an arbitrary axis.\n            </summary>\n            <param name=\"radians\">Rotation angle, in radians</param>\n            <param name=\"axis\">Rotation axis, which should be a normalized vector.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromScaling(Assimp.Vector3D)\">\n            <summary>\n            Creates a scaling matrix.\n            </summary>\n            <param name=\"scaling\">Scaling vector</param>\n            <returns>The scaling vector</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromToMatrix(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix that rotates a vector called \"from\" into another\n            vector called \"to\". Based on an algorithm by Tomas Moller and John Hudges:\n            <para>\n            \"Efficiently Building a Matrix to Rotate One Vector to Another\"         \n            Journal of Graphics Tools, 4(4):1-4, 1999\n            </para>\n            </summary>\n            <param name=\"from\">Starting vector</param>\n            <param name=\"to\">Ending vector</param>\n            <returns>Rotation matrix to rotate from the start to end.</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Equality(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Tests equality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Inequality(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Tests inequality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Multiply(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations\n            are left to right.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>Multiplied matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Implicit(Assimp.Matrix4x4)~Assimp.Matrix3x3\">\n            <summary>\n            Implicit conversion from a 4x4 matrix to a 3x3 matrix.\n            </summary>\n            <param name=\"mat\">4x4 matrix</param>\n            <returns>3x3 matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Equals(Assimp.Matrix3x3)\">\n            <summary>\n            Tests equality between this matrix and another.\n            </summary>\n            <param name=\"other\">Other matrix to test</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Matrix4x4\">\n            <summary>\n            Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). \n            Memory layout is row major. Right handed conventions are used by default.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A1\">\n            <summary>\n            Value at row 1, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A2\">\n            <summary>\n            Value at row 1, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A3\">\n            <summary>\n            Value at row 1, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A4\">\n            <summary>\n            Value at row 1, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B1\">\n            <summary>\n            Value at row 2, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B2\">\n            <summary>\n            Value at row 2, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B3\">\n            <summary>\n            Value at row 2, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B4\">\n            <summary>\n            Value at row 2, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C1\">\n            <summary>\n            Value at row 3, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C2\">\n            <summary>\n            Value at row 3, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C3\">\n            <summary>\n            Value at row 3, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C4\">\n            <summary>\n            Value at row 3, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D1\">\n            <summary>\n            Value at row 4, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D2\">\n            <summary>\n            Value at row 4, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D3\">\n            <summary>\n            Value at row 4, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D4\">\n            <summary>\n            Value at row 4, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.Identity\">\n            <summary>\n            Gets the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.IsIdentity\">\n            <summary>\n            Gets if this matrix is an identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.Item(System.Int32,System.Int32)\">\n            <summary>\n            Gets or sets the value at the specific one-based row, column\n            index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices\n            out of range return a value of zero.\n            \n            </summary>\n            <param name=\"i\">One-based Row index</param>\n            <param name=\"j\">One-based Column index</param>\n            <returns>Matrix value</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Matrix4x4.\n            </summary>\n            <param name=\"a1\">Element at row 1, column 1</param>\n            <param name=\"a2\">Element at row 1, column 2</param>\n            <param name=\"a3\">Element at row 1, column 3</param>\n            <param name=\"a4\">Element at row 1, column 4</param>\n            <param name=\"b1\">Element at row 2, column 1</param>\n            <param name=\"b2\">Element at row 2, column 2</param>\n            <param name=\"b3\">Element at row 2, column 3</param>\n            <param name=\"b4\">Element at row 2, column 4</param>\n            <param name=\"c1\">Element at row 3, column 1</param>\n            <param name=\"c2\">Element at row 3, column 2</param>\n            <param name=\"c3\">Element at row 3, column 3</param>\n            <param name=\"c4\">Element at row 3, column 4</param>\n            <param name=\"d1\">Element at row 4, column 1</param>\n            <param name=\"d2\">Element at row 4, column 2</param>\n            <param name=\"d3\">Element at row 4, column 3</param>\n            <param name=\"d4\">Element at row 4, column 4</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.#ctor(Assimp.Matrix3x3)\">\n            <summary>\n            Constructs a new Matrix4x4.\n            </summary>\n            <param name=\"rotMatrix\">Rotation matrix to copy values from.</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Transpose\">\n            <summary>\n            Transposes this matrix (rows become columns, vice versa).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Inverse\">\n            <summary>\n            Inverts the matrix. If the matrix is *not* invertible all elements are set to <see cref=\"F:System.Single.NaN\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Determinant\">\n            <summary>\n            Compute the determinant of this matrix.\n            </summary>\n            <returns>The determinant</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Decompose(Assimp.Vector3D@,Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a transformation matrix into its original scale, rotation, and translation components. The\n            scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And\n            the translation is the output position for the x, y, z axes.\n            </summary>\n            <param name=\"scaling\">Vector to hold the scaling component</param>\n            <param name=\"rotation\">Quaternion to hold the rotation component</param>\n            <param name=\"translation\">Vector to hold the translation component</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.DecomposeNoScaling(Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton\n            quaternion. The translation receives the output position for the x, y, z axes.\n            </summary>\n            <param name=\"rotation\">Quaternion to hold the rotation component</param>\n            <param name=\"translation\">Vector to hold the translation component</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromEulerAnglesXYZ(System.Single,System.Single,System.Single)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"x\">Rotation angle about the x-axis, in radians.</param>\n            <param name=\"y\">Rotation angle about the y-axis, in radians.</param>\n            <param name=\"z\">Rotation angle about the z-axis, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromEulerAnglesXYZ(Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"angles\">Vector containing the rotation angles about the x, y, z axes, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationX(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the x-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationY(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the y-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationZ(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the z-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromAngleAxis(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix for a rotation about an arbitrary axis.\n            </summary>\n            <param name=\"radians\">Rotation angle, in radians</param>\n            <param name=\"axis\">Rotation axis, which should be a normalized vector.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromTranslation(Assimp.Vector3D)\">\n            <summary>\n            Creates a translation matrix.\n            </summary>\n            <param name=\"translation\">Translation vector</param>\n            <returns>The translation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromScaling(Assimp.Vector3D)\">\n            <summary>\n            Creates a scaling matrix.\n            </summary>\n            <param name=\"scaling\">Scaling vector</param>\n            <returns>The scaling vector</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromToMatrix(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix that rotates a vector called \"from\" into another\n            vector called \"to\". Based on an algorithm by Tomas Moller and John Hudges:\n            <para>\n            \"Efficiently Building a Matrix to Rotate One Vector to Another\"         \n            Journal of Graphics Tools, 4(4):1-4, 1999\n            </para>\n            </summary>\n            <param name=\"from\">Starting vector</param>\n            <param name=\"to\">Ending vector</param>\n            <returns>Rotation matrix to rotate from the start to end.</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Equality(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Tests equality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Inequality(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Tests inequality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Multiply(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations\n            are left to right.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>Multiplied matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Implicit(Assimp.Matrix3x3)~Assimp.Matrix4x4\">\n            <summary>\n            Implicit conversion from a 3x3 matrix to a 4x4 matrix.\n            </summary>\n            <param name=\"mat\">3x3 matrix</param>\n            <returns>4x4 matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Equals(Assimp.Matrix4x4)\">\n            <summary>\n            Tests equality between this matrix and another.\n            </summary>\n            <param name=\"other\">Other matrix to test</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.FreeNativeDelegate\">\n            <summary>\n            Delegate for performing unmanaged memory cleanup.\n            </summary>\n            <param name=\"nativeValue\">Location in unmanaged memory of the value to cleanup</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise</param>\n        </member>\n        <member name=\"T:Assimp.MemoryHelper\">\n            <summary>\n            Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``2(``0[])\">\n            <summary>\n            Marshals an array of managed values to a c-style unmanaged array (void*).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"managedArray\">Array of managed values</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``2(``0[],System.Boolean)\">\n            <summary>\n            Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to\n            an unmanaged array of pointers (void**).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"managedArray\">Array of managed values</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``2(System.IntPtr,System.Int32)\">\n            <summary>\n            Marshals an array of managed values from a c-style unmanaged array (void*).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to marshal</param>\n            <returns>Marshaled managed values</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``2(System.IntPtr,System.Int32,System.Boolean)\">\n            <summary>\n            Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from \n            an unmanaged array of pointers (void**).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to marshal</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n            <returns>Marshaled managed values</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``1(``0[])\">\n            <summary>\n            Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types\n            that require marshaling by the runtime (e.g. has MarshalAs attributes).\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"managedArray\">Managed array of structs</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``1(System.IntPtr,System.Int32)\">\n            <summary>\n            Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types\n            that require marshaling by the runtime (e.g. has MarshalAs attributes).\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to read</param>\n            <returns>Managed array</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeNativeArray``1(System.IntPtr,System.Int32,Assimp.FreeNativeDelegate)\">\n            <summary>\n            Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be\n            marshaled into unmanaged memory.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to free</param>\n            <param name=\"action\">Delegate that performs the necessary cleanup</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeNativeArray``1(System.IntPtr,System.Int32,Assimp.FreeNativeDelegate,System.Boolean)\">\n            <summary>\n            Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be\n            marshaled into unmanaged memory.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to free</param>\n            <param name=\"action\">Delegate that performs the necessary cleanup</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativePointer``2(``0)\">\n            <summary>\n            Marshals a managed value to unmanaged memory.\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Unmanaged type</typeparam>\n            <param name=\"managedValue\">Managed value to marshal</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativePointer``2(System.IntPtr)\">\n            <summary>\n            Marshals a managed value from unmanaged memory.\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Unmanaged type</typeparam>\n            <param name=\"ptr\">Pointer to unmanaged memory</param>\n            <returns>The marshaled managed value</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalStructure``1(System.IntPtr,``0@)\">\n            <summary>\n            Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise\n            use the read methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"ptr\">Pointer to marshal</param>\n            <param name=\"value\">The marshaled structure</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalStructure``1(System.IntPtr)\">\n            <summary>\n            Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise\n            use the read methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"ptr\">Pointer to marshal</param>\n            <returns>The marshaled structure</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalPointer``1(``0@,System.IntPtr)\">\n            <summary>\n            Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise\n            use the write methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"value\">Struct to marshal</param>\n            <param name=\"ptr\">Pointer to unmanaged chunk of memory which must be allocated prior to this call</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalSizeOf``1\">\n            <summary>\n            Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime,\n            (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <returns>Size of the struct in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalSizeOf``1(``0[])\">\n            <summary>\n            Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime,\n            (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"array\">Array of structs</param>\n            <returns>Total size, in bytes, of the array's contents.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.PinObject(System.Object)\">\n            <summary>\n            Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime\n            cannot move the object around in memory, which may degrade performance.\n            </summary>\n            <param name=\"obj\">Object to pin.</param>\n            <returns>Pointer to pinned object's memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.UnpinObject(System.Object)\">\n            <summary>\n            Unpins an object in memory, allowing it to once again freely be moved around by the runtime.\n            </summary>\n            <param name=\"obj\">Object to unpin.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.DisposeCollection``1(System.Collections.Generic.ICollection{``0})\">\n            <summary>\n            Convienence method to dispose all items in the collection\n            </summary>\n            <typeparam name=\"T\">IDisposable type</typeparam>\n            <param name=\"collection\">Collection of disposables</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CastToEnum``2(``0)\">\n            <summary>\n            Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value.\n            </summary>\n            <typeparam name=\"V\">Underlying value type.</typeparam>\n            <typeparam name=\"T\">Enum type.</typeparam>\n            <param name=\"value\">Value to cast.</param>\n            <returns>Enum value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AllocateMemory(System.Int32,System.Int32)\">\n            <summary>\n            Allocates unmanaged memory. This memory should only be freed by this helper.\n            </summary>\n            <param name=\"sizeInBytes\">Size to allocate</param>\n            <param name=\"alignment\">Alignment of the memory, by default aligned along 16-byte boundary.</param>\n            <returns>Pointer to the allocated unmanaged memory.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AllocateClearedMemory(System.Int32,System.Byte,System.Int32)\">\n            <summary>\n            Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper.\n            </summary>\n            <param name=\"sizeInBytes\">Size to allocate</param>\n            <param name=\"clearValue\">Value the memory will be cleared to, by default zero.</param>\n            <param name=\"alignment\">Alignment of the memory, by default aligned along 16-byte boundary.</param>\n            <returns>Pointer to the allocated unmanaged memory.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeMemory(System.IntPtr)\">\n            <summary>\n            Frees unmanaged memory that was allocated by this helper.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to unmanaged memory to free.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.IsMemoryAligned(System.IntPtr,System.Int32)\">\n            <summary>\n            Checks if the memory is aligned to the specified alignment.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to the memory</param>\n            <param name=\"alignment\">Alignment value, by defauly 16-byte</param>\n            <returns>True if is aligned, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Swap``1(``0@,``0@)\">\n            <summary>\n            Swaps the value between two references.\n            </summary>\n            <typeparam name=\"T\">Type of data to swap.</typeparam>\n            <param name=\"left\">First reference</param>\n            <param name=\"right\">Second reference</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ComputeFNVModifiedHashCode(System.Byte[])\">\n            <summary>\n            Computes a hash code using the <a href=\"http://bretm.home.comcast.net/~bretm/hash/6.html\">FNV modified algorithm</a>m.\n            </summary>\n            <param name=\"data\">Byte data to hash.</param>\n            <returns>Hash code for the data.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ReadStreamFully(System.IO.Stream,System.Int32)\">\n            <summary>\n            Reads a stream until the end is reached into a byte array. Based on\n            <a href=\"http://www.yoda.arachsys.com/csharp/readbinary.html\">Jon Skeet's implementation</a>.\n            It is up to the caller to dispose of the stream.\n            </summary>\n            <param name=\"stream\">Stream to read all bytes from</param>\n            <param name=\"initialLength\">Initial buffer length, default is 32K</param>\n            <returns>The byte array containing all the bytes from the stream</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Compare(System.Byte[],System.Byte[])\">\n            <summary>\n            Compares two arrays of bytes for equivalence. \n            </summary>\n            <param name=\"firstData\">First array of data.</param>\n            <param name=\"secondData\">Second array of data.</param>\n            <returns>True if both arrays contain the same data, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ClearMemory(System.IntPtr,System.Byte,System.Int32)\">\n            <summary>\n            Clears the memory to the specified value.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to the memory.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"sizeInBytesToClear\">Number of bytes, starting from the memory pointer, to clear.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.SizeOf``1\">\n            <summary>\n            Computes the size of the struct type.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <returns>Size of the struct in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsPointer``1(``0@)\">\n            <summary>\n            Casts the by-ref value into a pointer.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"src\">By-ref value.</param>\n            <returns>Pointer to the value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsPointerReadonly``1(``0@)\">\n            <summary>\n            Casts the readonly by-ref value into a pointer.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"src\">By-ref value.</param>\n            <returns>Pointer to the value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsRef``1(System.IntPtr)\">\n            <summary>\n            Casts the pointer into a by-ref value of the specified type.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"pSrc\">Memory location.</param>\n            <returns>By-ref value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.As``2(``0@)\">\n            <summary>\n            Casts one by-ref type to another, unsafely.\n            </summary>\n            <typeparam name=\"TFrom\">From struct type</typeparam>\n            <typeparam name=\"TTo\">To struct type</typeparam>\n            <param name=\"src\">Source by-ref value.</param>\n            <returns>Reference as the from type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsReadonly``2(``0@)\">\n            <summary>\n            Casts one readonly by-ref type to another, unsafely.\n            </summary>\n            <typeparam name=\"TFrom\">From struct type</typeparam>\n            <typeparam name=\"TTo\">To struct type</typeparam>\n            <param name=\"src\">Source by-ref value.</param>\n            <returns>Reference as the from type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.SizeOf``1(``0[])\">\n            <summary>\n            Computes the size of the struct array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"array\">Array of structs</param>\n            <returns>Total size, in bytes, of the array's contents.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AddIntPtr(System.IntPtr,System.Int32)\">\n            <summary>\n            Adds an offset to the pointer.\n            </summary>\n            <param name=\"ptr\">Pointer</param>\n            <param name=\"offset\">Offset</param>\n            <returns>Pointer plus the offset</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyMemory(System.IntPtr,System.IntPtr,System.Int32)\">\n            <summary>\n            Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer.\n            </summary>\n            <param name=\"pDest\">Destination memory location</param>\n            <param name=\"pSrc\">Source memory location</param>\n            <param name=\"sizeInBytesToCopy\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Count``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Returns the number of elements in the enumerable.\n            </summary>\n            <typeparam name=\"T\">Type of element in collection.</typeparam>\n            <param name=\"source\">Enumerable collection</param>\n            <returns>The number of elements in the enumerable collection.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToByteArray``1(``0[])\">\n            <summary>\n            Converts typed element array to a byte array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"source\">Element array</param>\n            <returns>Byte array copy or null if the source array was not valid.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromByteArray``1(System.Byte[])\">\n            <summary>\n            Converts a byte array to a typed element array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"source\">Byte array</param>\n            <returns>Typed element array or null if the source array was not valid.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyBytes``1(System.Byte[],System.Int32,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies bytes from a byte array to an element array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"srcArray\">Source byte array</param>\n            <param name=\"srcStartIndex\">Starting index in destination array</param>\n            <param name=\"destArray\">Destination element array</param>\n            <param name=\"destStartIndex\">Starting index in destination array</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyBytes``1(``0[],System.Int32,System.Byte[],System.Int32,System.Int32)\">\n            <summary>\n            Copies bytes from an element array to a byte array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"srcArray\">Source element array</param>\n            <param name=\"srcStartIndex\">Starting index in source array</param>\n            <param name=\"destArray\">Destination byte array</param>\n            <param name=\"destStartIndex\">Starting index in destination array</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Reads data from the memory location into the array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <param name=\"data\">Array to store the copied data</param>\n            <param name=\"startIndexInArray\">Zero-based element index to start writing data to in the element array.</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr)\">\n            <summary>\n            Reads a single element from the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <returns>The read value</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr,``0@)\">\n            <summary>\n            Reads a single element from the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <param name=\"value\">The read value.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Write``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Writes data from the array to the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pDest\">Pointer to memory location</param>\n            <param name=\"data\">Array containing data to write</param>\n            <param name=\"startIndexInArray\">Zero-based element index to start reading data from in the element array.</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Write``1(System.IntPtr,``0@)\">\n            <summary>\n            Writes a single element to the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pDest\">Pointer to memory location</param>\n            <param name=\"data\">The value to write</param>\n        </member>\n        <member name=\"T:Assimp.Mesh\">\n            <summary>\n            A mesh represents geometry with a single material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Name\">\n            <summary>\n            Gets or sets the mesh name. This tends to be used\n            when formats name nodes and meshes independently,\n            vertex animations refer to meshes by their names,\n            or importers split meshes up, each mesh will reference\n            the same (dummy) name.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.PrimitiveType\">\n            <summary>\n            Gets or sets the primitive type. This may contain more than one\n            type unless if <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            option is not set.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MaterialIndex\">\n            <summary>\n            Gets or sets the index of the material associated with this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexCount\">\n            <summary>\n            Gets the number of vertices in this mesh. This is the count that all\n            per-vertex lists should be the size of.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasVertices\">\n            <summary>\n            Gets if the mesh has a vertex array. This should always return\n            true provided no special scene flags are set.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Vertices\">\n            <summary>\n            Gets the vertex position list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasNormals\">\n            <summary>\n            Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Normals\">\n            <summary>\n            Gets the vertex normal list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasTangentBasis\">\n            <summary>\n            Gets if the mesh has tangents and bitangents. It is not\n            possible for one to be without the other. If it does exist, the count should be the same as the vertex count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Tangents\">\n            <summary>\n            Gets the vertex tangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BiTangents\">\n            <summary>\n            Gets the vertex bitangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.FaceCount\">\n            <summary>\n            Gets the number of faces contained in the mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasFaces\">\n            <summary>\n            Gets if the mesh contains faces. If no special\n            scene flags are set, this should always return true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Faces\">\n            <summary>\n            Gets the mesh's faces. Each face will contain indices\n            to the vertices.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexColorChannelCount\">\n            <summary>\n            Gets the number of valid vertex color channels contained in the\n            mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel\n            should be the size of <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.TextureCoordinateChannelCount\">\n            <summary>\n            Gets the number of valid texture coordinate channels contained\n            in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count.\n            Each individual channel should be the size of <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexColorChannels\">\n            <summary>\n            Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index\n            in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.TextureCoordinateChannels\">\n            <summary>\n            Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index\n            in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.UVComponentCount\">\n            <summary>\n            Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component\n            value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds\n            to the texture coordinate channel index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BoneCount\">\n            <summary>\n            Gets the number of bones that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasBones\">\n            <summary>\n            Gets if this mesh has bones.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Bones\">\n            <summary>\n            Gets the bones that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MeshAnimationAttachmentCount\">\n            <summary>\n            Gets the number of mesh animation attachments that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasMeshAnimationAttachments\">\n            <summary>\n            Gets if this mesh has mesh animation attachments.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MeshAnimationAttachments\">\n            <summary>\n            Gets the mesh animation attachments that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MorphMethod\">\n            <summary>\n            Gets or sets the morph method used when animation attachments are used.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BoundingBox\">\n            <summary>\n            Gets or sets the axis aligned bounding box that contains the extents of the mesh.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"name\">Name of the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"primType\">Primitive types contained in the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(System.String,Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"name\">Name of the mesh</param>\n            <param name=\"primType\">Primitive types contained in the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.HasVertexColors(System.Int32)\">\n            <summary>\n            Checks if the mesh has vertex colors for the specified channel. This returns false if the list\n            is null or empty. The channel, if it exists, should contain the same number of entries as <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if vertex colors are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.HasTextureCoords(System.Int32)\">\n            <summary>\n            Checks if the mesh has texture coordinates for the specified channel. This returns false if the list\n            is null or empty. The channel, if it exists, should contain the same number of entries as <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if texture coordinates are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.SetIndices(System.Int32[],System.Int32)\">\n            <summary>\n            Convienence method for setting this meshe's face list from an index buffer.\n            </summary>\n            <param name=\"indices\">Index buffer</param>\n            <param name=\"indicesPerFace\">Indices per face</param>\n            <returns>True if the operation succeeded, false otherwise (e.g. not enough data)</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single\n            index array.\n            </summary>\n            <returns>int index array</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetUnsignedIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single index\n            array as unsigned integers (the default from Assimp, if you need them).\n            </summary>\n            <returns>uint index array</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetShortIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single\n            index array.\n            </summary>\n            <returns>short index array</returns>\n        </member>\n        <member name=\"P:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMesh@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#FromNative(Assimp.Unmanaged.AiMesh@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshAnimationAttachment\">\n            <summary>\n            A mesh attachment store per-vertex animations for a particular frame. You may\n            think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain\n            vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual\n            relationship between the time line and mesh attachments is established by the mesh animation channel,\n            which references singular mesh attachments by their ID and binds them to a time offset.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Name\">\n            <summary>\n            Gets or sets the mesh animation name.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexCount\">\n            <summary>\n            Gets the number of vertices in this mesh. This is a replacement\n            for the host mesh's vertex count. Likewise, a mesh attachment\n            cannot add or remove per-vertex attributes, therefore the existance\n            of vertex data will match the existance of data in the mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasVertices\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex positions\n            of its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Vertices\">\n            <summary>\n            Gets the vertex position list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasNormals\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex normals of\n            its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Normals\">\n            <summary>\n            Gets the vertex normal list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasTangentBasis\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex\n            tangents and bitangents of its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Tangents\">\n            <summary>\n            Gets the vertex tangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.BiTangents\">\n            <summary>\n            Gets the vertex bitangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexColorChannelCount\">\n            <summary>\n            Gets the number of valid vertex color channels contained in the\n            mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel\n            should be the size of <see cref=\"P:Assimp.MeshAnimationAttachment.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.TextureCoordinateChannelCount\">\n            <summary>\n            Gets the number of valid texture coordinate channels contained\n            in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count.\n            Each individual channel should be the size of <see cref=\"P:Assimp.MeshAnimationAttachment.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexColorChannels\">\n            <summary>\n            Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). \n            Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.TextureCoordinateChannels\">\n            <summary>\n            Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null).\n            Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Weight\">\n            <summary>\n            Gets or sets the weight of the mesh animation.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshAnimationAttachment\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.HasVertexColors(System.Int32)\">\n            <summary>\n            Checks if the mesh attachment overrides a particular set of vertex colors on\n            the host mesh. This returns false if the list is null or empty. The index is between \n            zero and the maximumb number of vertex color channels.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if vertex colors are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.HasTextureCoords(System.Int32)\">\n            <summary>\n            Checks if the mesh attachment overrides a particular set of texture coordinates on\n            the host mesh. This returns false if the list is null or empty. The index is \n            between zero and the maximum number of texture coordinate channels.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if texture coordinates are present in the channel.</returns>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#ToNative(System.IntPtr,Assimp.Unmanaged.AiAnimMesh@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#FromNative(Assimp.Unmanaged.AiAnimMesh@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshAnimationChannel\">\n            <summary>\n            Describes vertex-based animations for a single mesh or a group of meshes. Meshes\n            carry the animation data for each frame. The purpose of this object is to define\n            keyframes, linking each mesh attachment to a particular point in a time.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshName\">\n            <summary>\n            Gets or sets the name of the mesh to be animated. Empty strings are not allowed,\n            animation meshes need to be named (not necessarily uniquely, the name can basically\n            serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshKeyCount\">\n            <summary>\n            Gets the number of meshkeys in this animation channel. There will always\n            be at least one key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.HasMeshKeys\">\n            <summary>\n            Gets if this animation channel has mesh keys - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshKeys\">\n            <summary>\n            Gets the mesh keyframes of the animation. This should not be null.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshAnimationChannel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#FromNative(Assimp.Unmanaged.AiMeshAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshKey\">\n            <summary>\n            Binds an anim mesh (referenced by an index) to a specific point in time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshKey.Value\">\n            <summary>\n            Index of the anim mesh that corresponds to this keyframe.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshKey.#ctor(System.Double,System.Int32)\">\n            <summary>\n            Constructs a new MeshKey.\n            </summary>\n            <param name=\"time\">The time of this key.</param>\n            <param name=\"index\">Index of the anim mesh that corresponds to this keyframe.</param>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_Equality(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's indices are the same, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_Inequality(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's indices are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_LessThan(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_GreaterThan(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.Equals(Assimp.MeshKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their indices are equal</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.MeshMorphAnimationChannel\">\n            <summary>\n            Describes morph-based keyframe animations for a single mesh or a group of meshes.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.Name\">\n            <summary>\n            Gets or sets the name of the mesh to be animated. Empty strings are not allowed,\n            animation meshes need to be named (not necessarily uniquely, the name can basically\n            serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.MeshMorphKeyCount\">\n            <summary>\n            Gets the number of mesh morph keys in this animation channel. There will always be at least one key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.HasMeshMorphKeys\">\n            <summary>\n            Gets if this animation channel has mesh keys - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.MeshMorphKeys\">\n            <summary>\n            Gets the mesh morph keyframes of the animation. This should not be null.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshMorphAnimationChannel\" /> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#FromNative(Assimp.Unmanaged.AiMeshMorphAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshMorphAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshMorphKey\">\n            <summary>\n            Binds a morph animation mesh to a specific point in time.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Time\">\n            <summary>\n            Gets or sets the time of this keyframe.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Values\">\n            <summary>\n            Gets the values at the time of this keyframe. Number of values must equal number of weights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Weights\">\n            <summary>\n            Gets the weights at the time of this keyframe. Number of weights must equal number of values.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshMorphKey\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshMorphKey@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#FromNative(Assimp.Unmanaged.AiMeshMorphKey@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Metadata\">\n            <summary>\n            Represents a container for holding metadata, representing as key-value pairs.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Metadata\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMetadata@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#FromNative(Assimp.Unmanaged.AiMetadata@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Metadata.Entry\">\n            <summary>\n            Represents an entry in a metadata container.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Entry.DataType\">\n            <summary>\n            Gets the type of metadata.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Entry.Data\">\n            <summary>\n            Gets the metadata data stored in this entry.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.#ctor(Assimp.MetaDataType,System.Object)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Metadata.Entry\"/> struct.\n            </summary>\n            <param name=\"dataType\">Type of the data.</param>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.op_Equality(Assimp.Metadata.Entry,Assimp.Metadata.Entry)\">\n            <summary>\n            Tests equality between two entries.\n            </summary>\n            <param name=\"a\">First entry</param>\n            <param name=\"b\">Second entry</param>\n            <returns>True if the entries are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.op_Inequality(Assimp.Metadata.Entry,Assimp.Metadata.Entry)\">\n            <summary>\n            Tests inequality between two entries.\n            </summary>\n            <param name=\"a\">First entry</param>\n            <param name=\"b\">Second entry</param>\n            <returns>True if the entries are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.DataAs``1\">\n            <summary>\n            Gets the data as the specified type. If it cannot be casted to the type, then null is returned.\n            </summary>\n            <typeparam name=\"T\">Type to cast the data to.</typeparam>\n            <returns>Casted data or null.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\" /> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\" /> to compare with this instance.</param>\n            <returns>True if the specified <see cref=\"T:System.Object\" /> is equal to this instance; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.Equals(Assimp.Metadata.Entry)\">\n            <summary>\n            Indicates whether the current object is equal to another object of the same type.\n            </summary>\n            <param name=\"other\">An object to compare with this object.</param>\n            <returns>True if the current object is equal to the <paramref name=\"other\" /> parameter; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. </returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.ToString\">\n            <summary>\n            Returns the fully qualified type name of this instance.\n            </summary>\n            <returns>A <see cref=\"T:System.String\" /> containing a fully qualified type name.</returns>\n        </member>\n        <member name=\"T:Assimp.NativeCustomMarshalerAttribute\">\n            <summary>\n            Attribute for assocating a type with an <see cref=\"T:Assimp.INativeCustomMarshaler\"/> instance.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NativeCustomMarshalerAttribute.Marshaler\">\n            <summary>\n            Gets the associated marshaler.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NativeCustomMarshalerAttribute.#ctor(System.Type)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NativeCustomMarshalerAttribute\"/> class.\n            </summary>\n            <param name=\"type\">Type that implements <see cref=\"T:Assimp.INativeCustomMarshaler\"/></param>\n            <exception cref=\"T:System.NullReferenceException\">Thrown if the type is null.</exception>\n            <exception cref=\"T:System.ArgumentException\">Thrown if the type does not implement <see cref=\"T:Assimp.INativeCustomMarshaler\"/>.</exception>\n        </member>\n        <member name=\"T:Assimp.Node\">\n            <summary>\n            A node in the imported model hierarchy.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Name\">\n            <summary>\n            Gets or sets the name of the node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Transform\">\n            <summary>\n            Gets or sets the transformation of the node relative to its parent.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Parent\">\n            <summary>\n            Gets the node's parent, if it exists. \n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.ChildCount\">\n            <summary>\n            Gets the number of children that is owned by this node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.HasChildren\">\n            <summary>\n            Gets if the node contains children.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Children\">\n            <summary>\n            Gets the node's children.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.MeshCount\">\n            <summary>\n            Gets the number of meshes referenced by this node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.HasMeshes\">\n            <summary>\n            Gets if the node contains mesh references.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.MeshIndices\">\n            <summary>\n            Gets the indices of the meshes referenced by this node. Meshes can be\n            shared between nodes, so there is a mesh collection owned by the scene\n            that each node can reference.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Metadata\">\n            <summary>\n            Gets the node's metadata container.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n            <param name=\"name\">Name of the node</param>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor(System.String,Assimp.Node)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n            <param name=\"name\">Name of the node</param>\n            <param name=\"parent\">Parent of the node</param>\n        </member>\n        <member name=\"M:Assimp.Node.FindNode(System.String)\">\n            <summary>\n            Finds a node with the specific name, which may be this node\n            or any children or children's children, and so on, if it exists.\n            </summary>\n            <param name=\"name\">Node name</param>\n            <returns>The node or null if it does not exist</returns>\n        </member>\n        <member name=\"P:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#IsNativeBlittable\">\n            <summary>\n            Gets a value indicating whether this instance is native blittable.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#ToNative(System.IntPtr,Assimp.Unmanaged.AiNode@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#FromNative(Assimp.Unmanaged.AiNode@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Node.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.NodeAnimationChannel\">\n            <summary>\n            Describes the animation of a single node. The name specifies the bone/node which is affected by\n            this animation chanenl. The keyframes are given in three separate seties of values,\n            one for each position, rotation, and scaling. The transformation matrix is computed from\n            these values and replaces the node's original transformation matrix at a specific time.\n            <para>This means all keys are absolute and not relative to the bone default pose.\n            The order which the transformations are to be applied is scaling, rotation, and translation (SRT).</para>\n            <para>Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no\n            negative time values, but they are not forbidden.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.NodeName\">\n            <summary>\n            Gets or sets the name of the node affected by this animation. It must <c>exist</c> and it <c>must</c>\n            be unique.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PositionKeyCount\">\n            <summary>\n            Gets the number of position keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasPositionKeys\">\n            <summary>\n            Gets if this animation channel contains position keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PositionKeys\">\n            <summary>\n            Gets the position keys of this animation channel. Positions are\n            specified as a 3D vector. If there are position keys, there should\n            also be -at least- one scaling and one rotation key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.RotationKeyCount\">\n            <summary>\n            Gets the number of rotation keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasRotationKeys\">\n            <summary>\n            Gets if the animation channel contains rotation keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.RotationKeys\">\n            <summary>\n            Gets the rotation keys of this animation channel. Rotations are\n            given as quaternions. If this exists, there should be -at least- one\n            scaling and one position key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.ScalingKeyCount\">\n            <summary>\n            Gets the number of scaling keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasScalingKeys\">\n            <summary>\n            Gets if the animation channel contains scaling keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.ScalingKeys\">\n            <summary>\n            Gets the scaling keys of this animation channel. Scalings are\n            specified in a 3D vector. If there are scaling keys, there should\n            also be -at least- one position and one rotation key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PreState\">\n            <summary>\n            Gets or sets how the animation behaves before the first key is encountered. By default the original\n            transformation matrix of the affected node is used.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PostState\">\n            <summary>\n            Gets or sets how the animation behaves after the last key was processed. By default the original\n            transformation matrix of the affected node is taken.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NodeAnimationChannel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiNodeAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#FromNative(Assimp.Unmanaged.AiNodeAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.NodeCollection\">\n            <summary>\n            A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.Count\">\n            <summary>\n            Gets the number of elements contained in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.Item(System.Int32)\">\n            <summary>\n            Gets or sets the element at the specified index.\n            </summary>\n            <param name=\"index\">The child index</param>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.IsReadOnly\">\n            <summary>\n            Gets a value indicating whether the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> is read-only.\n            </summary>\n            <returns>true if the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> is read-only; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.#ctor(Assimp.Node)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NodeCollection\"/> class.\n            </summary>\n            <param name=\"parent\">Parent node</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Add(Assimp.Node)\">\n            <summary>\n            Adds an item to the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n            <param name=\"item\">The object to add to the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.AddRange(Assimp.Node[])\">\n            <summary>\n            Adds a range of items to the list.\n            </summary>\n            <param name=\"items\">Item array</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Clear\">\n            <summary>\n            Removes all items from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Contains(Assimp.Node)\">\n            <summary>\n            Determines whether the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> contains a specific value.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n            <returns>\n            true if <paramref name=\"item\" /> is found in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />; otherwise, false.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.CopyTo(Assimp.Node[],System.Int32)\">\n            <summary>\n            Copies collection contents to the array\n            </summary>\n            <param name=\"array\">The array to copy to.</param>\n            <param name=\"arrayIndex\">Index of the array to start copying.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.IndexOf(Assimp.Node)\">\n            <summary>\n            Determines the index of a specific item in the <see cref=\"T:System.Collections.Generic.IList`1\" />.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.IList`1\" />.</param>\n            <returns>\n            The index of <paramref name=\"item\" /> if found in the list; otherwise, -1.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Insert(System.Int32,Assimp.Node)\">\n            <summary>\n            Inserts an item to the <see cref=\"T:System.Collections.Generic.IList`1\" /> at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index at which <paramref name=\"item\" /> should be inserted.</param>\n            <param name=\"item\">The object to insert into the <see cref=\"T:System.Collections.Generic.IList`1\" />.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the <see cref=\"T:System.Collections.Generic.IList`1\" /> item at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index of the item to remove.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Remove(Assimp.Node)\">\n            <summary>\n            Removes the first occurrence of a specific object from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n            <param name=\"item\">The object to remove from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n            <returns>\n            true if <paramref name=\"item\" /> was successfully removed from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />; otherwise, false. This method also returns false if <paramref name=\"item\" /> is not found in the original <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.ToArray\">\n            <summary>\n            Copies elements in the collection to a new array.\n            </summary>\n            <returns>Array of copied elements</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through the collection.\n            </summary>\n            <returns>A <see cref=\"T:System.Collections.Generic.IEnumerator`1\" /> that can be used to iterate through the collection.</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through a collection.\n            </summary>\n            <returns>An <see cref=\"T:System.Collections.IEnumerator\" /> object that can be used to iterate through the collection.</returns>\n        </member>\n        <member name=\"T:Assimp.Plane\">\n            <summary>\n            Represents a plane in three-dimensional euclidean space where\n            A, B, C are components of the plane normal and D is the distance along the\n            normal from the origin to the plane.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.A\">\n            <summary>\n            X component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.B\">\n            <summary>\n            Y component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.C\">\n            <summary>\n            Z component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.D\">\n            <summary>\n            Distance from the origin to the plane along the normal vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Plane.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Plane.\n            </summary>\n            <param name=\"a\">X component of the normal vector.</param>\n            <param name=\"b\">Y component of the normal vector.</param>\n            <param name=\"c\">Z component of the normal vector.</param>\n            <param name=\"d\">Distance from the origin to the plane along the normal vector.</param>\n        </member>\n        <member name=\"T:Assimp.PostProcessPreset\">\n            <summary>\n            Static class containing preset properties for post processing options.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.ConvertToLeftHanded\">\n            <summary>\n            PostProcess configuration for (some) Direct3D conventions,\n            left handed geometry, upper left origin for UV coordinates,\n            and clockwise face order, suitable for CCW culling.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeFast\">\n            <summary>\n            PostProcess configuration for optimizing data for real-time.\n            Does the following steps:\n            \n            <see cref=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\"/>, <see cref=\"F:Assimp.PostProcessSteps.GenerateNormals\"/>, \n            <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>, <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/>, and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeQuality\">\n            <summary>\n            PostProcess configuration for optimizing\n            data for real-time rendering. Does the following steps:\n            \n            <see cref=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\"/>, <see cref=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\"/>, \n            <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>, <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/>, <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/>, <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/>, <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/>, and\n            <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeMaximumQuality\">\n            <summary>\n            PostProcess configuration for heavily optimizing the data\n            for real-time rendering. Includes all flags in\n            <see cref=\"P:Assimp.PostProcessPreset.TargetRealTimeQuality\"/> as well as \n            <see cref=\"F:Assimp.PostProcessSteps.FindInstances\"/>, <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>, and\n            <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/>\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Quaternion\">\n            <summary>\n            A 4D vector that represents a rotation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.W\">\n            <summary>\n            Rotation component of the quaternion/\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.X\">\n            <summary>\n            X component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.Y\">\n            <summary>\n            Y component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.Z\">\n            <summary>\n            Z component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Quaternion.\n            </summary>\n            <param name=\"w\">W component</param>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(Assimp.Matrix3x3)\">\n            <summary>\n            Constructs a new Quaternion from a rotation matrix.\n            </summary>\n            <param name=\"matrix\">Rotation matrix to create the Quaternion from.</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Quaternion from three euler angles.\n            </summary>\n            <param name=\"pitch\">Pitch</param>\n            <param name=\"yaw\">Yaw</param>\n            <param name=\"roll\">Roll</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Constructs a new Quaternion from an axis-angle.\n            </summary>\n            <param name=\"axis\">Axis</param>\n            <param name=\"angle\">Angle about the axis</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Normalize\">\n            <summary>\n            Normalizes the quaternion.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Conjugate\">\n            <summary>\n            Transforms this quaternion into its conjugate.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.GetMatrix\">\n            <summary>\n            Returns a matrix representation of the quaternion.\n            </summary>\n            <returns>Rotation matrix representing the quaternion.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Slerp(Assimp.Quaternion,Assimp.Quaternion,System.Single)\">\n            <summary>\n            Spherical interpolation between two quaternions.\n            </summary>\n            <param name=\"start\">Start rotation when factor == 0</param>\n            <param name=\"end\">End rotation when factor == 1</param>\n            <param name=\"factor\">Interpolation factor between 0 and 1, values beyond this range yield undefined values</param>\n            <returns>Interpolated quaternion.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Rotate(Assimp.Vector3D,Assimp.Quaternion)\">\n            <summary>\n            Rotates a point by this quaternion.\n            </summary>\n            <param name=\"pt\">Point to rotate</param>\n            <param name=\"quat\">Quaternion representing the rotation</param>\n            <returns>Rotated point.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Multiply(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Multiplies two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>Resulting quaternion</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Equality(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Tests equality between two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>True if the quaternions are equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Inequality(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Tests inequality between two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>True if the quaternions are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Equals(Assimp.Quaternion)\">\n            <summary>\n            Tests equality between two quaternions.\n            </summary>\n            <param name=\"other\">Quaternion to compare</param>\n            <returns>True if the quaternions are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.QuaternionKey\">\n            <summary>\n            Time-value pair specifying a rotation for a given time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.QuaternionKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.QuaternionKey.Value\">\n            <summary>\n            The rotation of this key.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.#ctor(System.Double,Assimp.Quaternion)\">\n            <summary>\n            Constructs a new QuaternionKey.\n            </summary>\n            <param name=\"time\">Time of the key.</param>\n            <param name=\"rot\">Quaternion rotation at the time frame.</param>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_Equality(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's rotations are the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_Inequality(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's rotations are not the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_LessThan(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_GreaterThan(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.Equals(Assimp.QuaternionKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their rotations are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Ray\">\n            <summary>\n            Defines a 3D ray with a point of origin and a direction.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Ray.Position\">\n            <summary>\n            Origin of the ray in space.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Ray.Direction\">\n            <summary>\n            Direction of the ray.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Ray.#ctor(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new Ray.\n            </summary>\n            <param name=\"pos\">Origin of the ray.</param>\n            <param name=\"dir\">Direction of the ray.</param>\n        </member>\n        <member name=\"T:Assimp.Scene\">\n            <summary>\n            Represents a completely imported model or scene. Everything that was imported from the given file can be\n            accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory\n            and Assimp's read only copy is released.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.SceneFlags\">\n            <summary>\n            Gets or sets the state of the imported scene. By default no flags are set, but\n            issues can arise if the flag is set to incomplete.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.RootNode\">\n            <summary>\n            Gets or sets the root node of the scene graph. There will always be at least the root node\n            if the import was successful and no special flags have been set. Presence of further nodes\n            depends on the format and content of the imported file.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasMeshes\">\n            <summary>\n            Gets if the scene contains meshes. Unless if no special scene flags are set\n            this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.MeshCount\">\n            <summary>\n            Gets the number of meshes in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Meshes\">\n            <summary>\n            Gets the meshes contained in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasLights\">\n            <summary>\n            Gets if the scene contains any lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.LightCount\">\n            <summary>\n            Gets the number of lights in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Lights\">\n            <summary>\n            Gets the lights in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasCameras\">\n            <summary>\n            Gets if the scene contains any cameras.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.CameraCount\">\n            <summary>\n            Gets the number of cameras in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Cameras\">\n            <summary>\n            Gets the cameras in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasTextures\">\n            <summary>\n            Gets if the scene contains embedded textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.TextureCount\">\n            <summary>\n            Gets the number of embedded textures in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Textures\">\n            <summary>\n            Gets the embedded textures in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasAnimations\">\n            <summary>\n            Gets if the scene contains any animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.AnimationCount\">\n            <summary>\n            Gets the number of animations in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Animations\">\n            <summary>\n            Gets the animations in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasMaterials\">\n            <summary>\n            Gets if the scene contains any materials. There should always be at least the\n            default Assimp material if no materials were loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.MaterialCount\">\n            <summary>\n            Gets the number of materials in the scene. There should always be at least the\n            default Assimp material if no materials were loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Materials\">\n            <summary>\n            Gets the materials in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Metadata\">\n            <summary>\n            Gets the metadata of the scene. This data contains global metadata which belongs to the scene like \n            unit-conversions, versions, vendors or other model-specific data. This can be used to store format-specific metadata as well.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Name\">\n            <summary>\n            Gets or sets the name of the scene.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Scene\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Scene\"/> class.\n            </summary>\n            <param name=\"name\">Name of the scene</param>\n        </member>\n        <member name=\"M:Assimp.Scene.Clear\">\n            <summary>\n            Clears the scene of all components.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.GetEmbeddedTexture(System.String)\">\n            <summary>\n            Gets an embedded texture by a string. The string may be a texture ID in the format of \"*1\" or is the\n            file name of the texture.\n            </summary>\n            <param name=\"fileName\">Texture ID or original file name.</param>\n            <returns>Embedded texture or null if it could not be found.</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.ToUnmanagedScene(Assimp.Scene)\">\n            <summary>\n            Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to\n            <see cref=\"M:Assimp.Scene.FreeUnmanagedScene(System.IntPtr)\"/>, the memory is owned by AssimpNet and cannot be freed by the native library.\n            </summary>\n            <param name=\"scene\">Scene data</param>\n            <returns>Unmanaged scene or NULL if the scene is null.</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.FromUnmanagedScene(System.IntPtr)\">\n            <summary>\n            Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory.\n            </summary>\n            <param name=\"scenePtr\">The unmanaged scene data</param>\n            <returns>The managed scene, or null if the pointer is NULL</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.FreeUnmanagedScene(System.IntPtr)\">\n            <summary>\n            Frees unmanaged memory allocated -ONLY- in <see cref=\"M:Assimp.Scene.ToUnmanagedScene(Assimp.Scene)\"/>. To free an unmanaged scene allocated by the unmanaged Assimp library,\n            call the appropiate <see cref=\"M:Assimp.Unmanaged.AssimpLibrary.ReleaseImport(System.IntPtr)\"/> function.\n            </summary>\n            <param name=\"scenePtr\">Pointer to unmanaged scene data.</param>\n        </member>\n        <member name=\"P:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#ToNative(System.IntPtr,Assimp.Unmanaged.AiScene@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#FromNative(Assimp.Unmanaged.AiScene@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Scene.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Texel\">\n            <summary>\n            Represents a texel in ARGB8888 format.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.A\">\n            <summary>\n            Alpha component.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Texel.#ctor(System.Byte,System.Byte,System.Byte,System.Byte)\">\n            <summary>\n            Constructs a new Texel.\n            </summary>\n            <param name=\"b\">Blue component.</param>\n            <param name=\"g\">Green component.</param>\n            <param name=\"r\">Red component.</param>\n            <param name=\"a\">Alpha component.</param>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Equality(Assimp.Texel,Assimp.Texel)\">\n            <summary>\n            Tests equality between two texels.\n            </summary>\n            <param name=\"a\">First texel</param>\n            <param name=\"b\">Second texel</param>\n            <returns>True if the texels are equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Inequality(Assimp.Texel,Assimp.Texel)\">\n            <summary>\n            Tests inequality between two texels.\n            </summary>\n            <param name=\"a\">First texel</param>\n            <param name=\"b\">Second texel</param>\n            <returns>True if the texels are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Implicit(Assimp.Texel)~Assimp.Color4D\">\n            <summary>\n            Implicitly converts a texel to a Color4D.\n            </summary>\n            <param name=\"texel\">Texel to convert</param>\n            <returns>Converted Color4D</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Texel.Equals(Assimp.Texel)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"other\">Other key to test</param>\n            <returns>True if their indices are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Texel.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.TextureSlot\">\n            <summary>\n            Describes all the values pertaining to a particular texture slot in a material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.FilePath\">\n            <summary>\n            Gets the texture file path.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.TextureType\">\n            <summary>\n            Gets the texture type semantic.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.TextureIndex\">\n            <summary>\n            Gets the texture index in the material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Mapping\">\n            <summary>\n            Gets the texture mapping.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.UVIndex\">\n            <summary>\n            Gets the UV channel index that corresponds to this texture from the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.BlendFactor\">\n            <summary>\n            Gets the blend factor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Operation\">\n            <summary>\n            Gets the texture operation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.WrapModeU\">\n            <summary>\n            Gets the texture wrap mode for the U coordinate.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.WrapModeV\">\n            <summary>\n            Gets the texture wrap mode for the V coordinate.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Flags\">\n            <summary>\n            Gets misc flags.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.TextureSlot.#ctor(System.String,Assimp.TextureType,System.Int32,Assimp.TextureMapping,System.Int32,System.Single,Assimp.TextureOperation,Assimp.TextureWrapMode,Assimp.TextureWrapMode,System.Int32)\">\n            <summary>\n            Constructs a new TextureSlot.\n            </summary>\n            <param name=\"filePath\">Texture filepath</param>\n            <param name=\"typeSemantic\">Texture type semantic</param>\n            <param name=\"texIndex\">Texture index in the material</param>\n            <param name=\"mapping\">Texture mapping</param>\n            <param name=\"uvIndex\">UV channel in mesh that corresponds to this texture</param>\n            <param name=\"blendFactor\">Blend factor</param>\n            <param name=\"texOp\">Texture operation</param>\n            <param name=\"wrapModeU\">Texture wrap mode for U coordinate</param>\n            <param name=\"wrapModeV\">Texture wrap mode for V coordinate</param>\n            <param name=\"flags\">Misc flags</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiConfigs\">\n            <summary>\n            Defines configurable properties for importing models. All properties\n            have default values. Setting config properties are done via the SetProperty*\n            methods in AssimpMethods.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOB_MEASURE_TIME\">\n            <summary>\n            Enables time measurements. If enabled the time needed for each\n            part of the loading process is timed and logged.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOB_MULTITHREADING\">\n            <summary>\n            Sets Assimp's multithreading policy. This is ignored if Assimp is\n            built without boost.thread support. Possible values are: -1 to\n            let Assimp decide, 0 to disable multithreading, and nay number larger than 0\n            to force a specific number of threads. This is only a hint and may be \n            ignored by Assimp.\n            <para>Type: integer. Default: -1</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_NO_SKELETON_MESHES\">\n            <summary>\n            Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid\n            in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing\n            the bones.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the maximum angle that may be between two vertex tangents that their tangents\n            and bitangents are smoothed during the step to calculate the tangent basis. The angle specified \n            is in degrees. The maximum value is 175 degrees.\n            <para>Type: float. Default: 45 degrees</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the maximum angle that may be between two face normals at the same vertex position that\n            their normals will be smoothed together during the calculate smooth normals step. This is commonly\n            called the \"crease angle\". The angle is specified in degrees. Maximum value is 175 degrees (all vertices\n            smoothed).\n            <para>Type: float. Default: 175 degrees</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDL_COLORMAP\">\n            <summary>\n            Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files.\n            This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains\n            RGB triplets for each of the 256 palette entries. If the file is not found, a default\n            palette (from Quake 1) is used.\n            <para>Type: string. Default: \"colormap.lmp\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_RRM_EXCLUDE_LIST\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/> step to\n            keep materials matching a name in a given list. This is a list of\n            1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers\n            containing whitespaces must be enclosed in *single* quotation marks. Tabs or\n            carriage returns are treated as whitespace.\n            <para>If a material matches one of these names, it will not be modified\n            or removed by the post processing step nor will other materials be replaced\n            by a reference to it.</para>\n            <para>Default: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_KEEP_HIERARCHY\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization\n            is performed where meshes with the same materials are not joined.\n            <para>This option could be of used if you have a scene hierarchy that contains\n            important additional information which you intend to parse.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_NORMALIZE\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to normalize all vertex components into the -1...1 range. That is, a bounding\n            box for the whole scene is computed where the maximum component is taken\n            and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension\n            of the input data.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_REMOVE\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step\n            to remove degenerated primitives from the import immediately.\n            <para>The default behavior converts degenerated triangles to lines and\n            degenerated lines to points.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_CHECKAREA\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step\n            to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_REMOVE\"/> is set to true.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_OG_EXCLUDE_LIST\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/> step\n            to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character.\n            Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns\n            and tabs are treated as white space.\n            <para>If a node matches one of these names, it will not be modified or removed by the\n            postprocessing step.</para>\n            <para>Type: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_TRIANGLE_LIMIT\">\n            <summary>\n            Sets the maximum number of triangles a mesh can contain. This is used by the\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step to determine\n            whether a mesh must be split or not.\n            <para>Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_VERTEX_LIMIT\">\n            <summary>\n            Sets the maximum number of vertices in a mesh. This is used by the\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step to determine\n            whether a mesh must be split or not.\n            <para>Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_LBW_MAX_WEIGHTS\">\n            <summary>\n            Sets the maximum number of bones that can affect a single vertex. This is used\n            by the <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/> step.\n            <para>Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_ICL_PTCACHE_SIZE\">\n            <summary>\n            Sets the size of the post-transform vertex cache to optimize vertices for. This is\n            for the <see cref=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\"/> step. The size\n            is given in vertices. Of course you can't know how the vertex format will exactly look\n            like after the import returns, but you can still guess what your meshes will\n            probably have. The default value *has* resulted in slight performance improvements\n            for most Nvidia/AMD cards since 2002.\n            <para>Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_RVC_FLAGS\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.RemoveComponent\"/> step. \n            It specifies the parts of the data structure to be removed.\n            <para>This is a bitwise combination of the <see cref=\"T:Assimp.ExcludeComponent\"/> flag. If no valid mesh is remaining after\n            the step is executed, the import FAILS.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SBP_REMOVE\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step.\n            It specifies which primitive types are to be removed by the step.\n            <para>This is a bitwise combination of the <see cref=\"T:Assimp.PrimitiveType\"/> flag.\n            Specifying ALL types is illegal.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FID_ANIM_ACCURACY\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step.\n            It specifies the floating point accuracy for animation values, specifically the epislon\n            during the comparison. The step checks for animation tracks where all frame values are absolutely equal \n            and removes them. Two floats are considered equal if the invariant <c>abs(n0-n1) > epislon</c> holds\n            true for all vector/quaternion components.\n            <para>Type: float. Default: 0.0f (comparisons are exact)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FID_IGNORE_TEXTURECOORDS\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step. Set to true to\n            ignore texture coordinates. This may be useful if you have to assign different kinds of textures,\n            like seasonally variable ones - one for summer and one for winter.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_TUV_EVALUATE\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.TransformUVCoords\"/> step.\n            It specifies which UV transformations are to be evaluated.\n            <para>This is bitwise combination of the <see cref=\"T:Assimp.UVTransformFlags\"/> flag.</para>\n            <para>Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_FAVOUR_SPEED\">\n            <summary>\n            A hint to Assimp to favour speed against import quality. Enabling this option\n            may result in faster loading, or it may not. It is just a hint to loaders and post-processing\n            steps to use faster code paths if possible. A value not equal to zero stands\n            for true.\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SBBC_MAX_BONES\">\n            <summary>\n            Maximum bone cone per mesh for the <see cref=\"F:Assimp.PostProcessSteps.SplitByBoneCount\"/> step. Meshes\n            are split until the max number of bones is reached.\n            <para>Type: integer. Default: 60</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX\">\n            <summary>\n            Source UV channel for tangent space computation. The specified channel must exist or an error will be raised.\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_DB_THRESHOLD\">\n            <summary>\n            Threshold used to determine if a bone is kept or removed during the <see cref=\"F:Assimp.PostProcessSteps.Debone\"/> step.\n            <para>Type: float. Default: 1.0f</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_DB_ALL_OR_NONE\">\n            <summary>\n            Require all bones to qualify for deboning before any are removed.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step to use a user defined matrix as the scene root node\n            transformation before transforming vertices.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step to use a user defined matrix as the scene root node transformation\n            before transforming vertices.\n            <para>Type: Matrix4x4. Default: Identity Matrix</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.GlobalScale\"/> step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model,\n            which this processing step can utilize.\n            <para>Type: Float. Default: 1.0f.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_APP_SCALE_KEY\">\n            <summary>\n            Applies application-specific scale to the global scale factor to allow for backwards compatibility.\n            <para>Type: Float. Default: 1.0f.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support\n            vertex keyframes (only bone animation is supported). The libary reads only one frame of models\n            with vertex animations. By default this is the first frame.\n            <para>The default value is 0. This option applies to all importers. However, it is\n            also possible to override the global setting for a specific loader. You can use the\n            AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which\n            you want to override the global setting.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD2_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDL_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDC_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_SMD_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_UNREAL_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL\">\n            <summary>\n            Configures the AC loader to collect all surfaces which have the \"Backface cull\" flag set in separate\n            meshes.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_AC_EVAL_SUBDIVISION\">\n            <summary>\n            Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence\n            of the 'subdiv' attribute in the file). By default, Assimp performs\n            the subdivision using the standard Catmull-Clark algorithm.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS\">\n            <summary>\n            Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided).\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_TER_MAKE_UVS\">\n            <summary>\n            Configures the terragen import plugin to compute UV's for terrains, if\n            they are not given. Furthermore, a default texture is assigned.\n            <para>UV coordinates for terrains are so simple to compute that you'll usually \n            want to compute them on your own, if you need them. This option is intended for model viewers which\n            want to offer an easy way to apply textures to terrains.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS\">\n            <summary>\n            Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups\n            loaded from the file. Some ASE files carry invalid normals, others don't.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART\">\n            <summary>\n            Configures the M3D loader to detect and process multi-part Quake player models. These models\n            usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is\n            set to true, Assimp will try to load and combine all three files if one of them is loaded.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_SKIN_NAME\">\n            <summary>\n            Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks\n            whether a file named \"md3_file_name\"_\"skin_name\".skin exists. These files are used by\n            Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue'\n            are typical skin names.\n            <para>Type: string. Default: \"default\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_SHADER_SRC\">\n            <summary>\n            Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or\n            relative to where all MD3 shaders reside.\n            <para>Type: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY\">\n            <summary>\n            Configures the LWO loader to load just one layer from the model.\n            <para>LWO files consist of layers and in some cases it could be useful to load only one of them.\n            This property can be either a string - which specifies the name of the layer - or an integer - the index\n            of the layer. If the property is not set then the whole LWO model is loaded. Loading fails\n            if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty</para>\n            <para>Type: bool. Default: false (All layers are loaded)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD\">\n            <summary>\n            Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically.\n            <para>The default strategy is to look for a file with the same name but with the MD5ANIm extension\n            in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration\n            option can be used to disable this behavior.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWS_ANIM_START\">\n            <summary>\n            Defines the beginning of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the start time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation start from the input LWS\n            file ('FirstFrame' line)</para>\n            <para>Type: integer. Default: taken from file</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWS_ANIM_END\">\n            <summary>\n            Defines the ending of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the end time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation end from the input LWS\n            file.</para>\n            <para>Type: integer. Default: taken from file</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IRR_ANIM_FPS\">\n            <summary>\n            Defines the output frame rate of the IRR loader.\n            <para>IRR animations are difficult to convert for Assimp and there will always be\n            a loss of quality. This setting defines how many keys per second are returned by the converter.</para>\n            <para>Type: integer. Default: 100</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE\">\n            <summary>\n            The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp\n            where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material,\n            and lastly the material name defined by this config property.\n            <para>Type: string. Default: \"Scene.Material\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME\">\n            <summary>\n            The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified\n            in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: \n            <list type=\"bullet\">\n            <item><description>Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap</description></item>\n            <item><description>Specular Maps: _s, _spec, _specular, _specularmap</description></item>\n            <item><description>Light Maps: _l, _light, _lightmap, _occ, _occlusion</description></item>\n            <item><description>Displacement Maps: _dis, _displacement</description></item>\n            </list>\n            The matching is case insensitive. Postfix is taken between the last \"_\" and last \".\". The default behavior is to detect type from lower cased\n            texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then,\n            <see cref=\"F:Assimp.TextureType.Diffuse\"/> is used.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS\">\n            <summary>\n            Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION\">\n            <summary>\n            Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false,\n            walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected\n            with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known\n            issues with these kind of polygons.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120]\n            <para>Type: Float. Default: 10.0f</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_CYLINDRICAL_TESSELLATION\">\n            <summary>\n            Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180].\n            <para>Type: Integer. Default: 32</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION\">\n            <summary>\n            Specifies whether the collada loader will ignore the up direction.\n            <para>Type: Bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_COLLADA_USE_COLLADA_NAMES\">\n            <summary>\n            Specifies whether the Collada loader should use Collada names as node names.\n            If this property is set to true, the Collada names will be used as the\n            node name. The default is to use the id tag (resp. sid tag, if no id tag is present) instead.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS\">\n            <summary>\n            Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first.\n            <para>Type: bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS\">\n            <summary>\n            Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer\n            will read materials, otherwise this has no effect.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_MATERIALS\">\n            <summary>\n            Specifies whether the FBX importer will read materials.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_TEXTURES\">\n            <summary>\n            Specifies whether the FBX importer will read embedded textures.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_EMBEDDED_TEXTURES_LEGACY_NAMING\">\n            <summary>\n            Specifies whether the fbx importer will use the legacy embedded texture naming.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_CAMERAS\">\n            <summary>\n            Specifies whether the FBX importer will read cameras.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_LIGHTS\">\n            <summary>\n            Specifies whether the FBX importer will read light sources.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS\">\n            <summary>\n            Specifies whether the FBX importer will read animations.\n            <para>Type: Bool. default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_STRICT_MODE\">\n            <summary>\n            Specifies whether the FBX importer will act in strict mode in which only the FBX 2013\n            format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this\n            format is best supported and well-tested.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS\">\n            <summary>\n            Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots\n            and offsets will be evaluated whenever possible.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES\">\n            <summary>\n            Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose \n            transformation over their entire defined range.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_FBX_CONVERT_TO_M\">\n            <summary>\n            Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m).\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_SMD_LOAD_ANIMATION_LIST\">\n            <summary>\n            Specifies whether the importer will load multiple animations.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES\">\n            <summary>\n            Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g.\n            attachment points).\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_EXPORT_XFILE_64BIT\">\n            <summary>\n            Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_EXPORT_POINT_CLOUDS\">\n            <summary>\n            Specifies whether the export should be able to export point clouds. When this flag is not defined\n            the render data has to contain valid faces. Point  clouds are only a collection of vertices which have no spatial\n            organization by a face and the validation process will remove them. Enabling this feature will switch off the\n            flag and enable the functionality to export pure point clouds.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiDefines\">\n            <summary>\n            Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants\n            are grouped according to their usage or where they're found in the Assimp include files.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_TRIANGLE_LIMIT\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_VERTICES\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_VERTEX_LIMIT\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_LBW_MAX_WEIGHTS\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_LBW_MAX_WEIGHTS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.PP_ICL_PTCACHE_SIZE\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_ICL_PTCACHE_SIZE\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_UVTRAFO_ALL\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_TUV_EVALUATE\"/>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_FACE_INDICES\">\n            <summary>\n            Defines the maximum number of indices per face (polygon).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_BONE_WEIGHTS\">\n            <summary>\n            Defines the maximum number of bone weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_VERTICES\">\n            <summary>\n            Defines the maximum number of vertices per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_FACES\">\n            <summary>\n            Defines the maximum number of faces per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\">\n            <summary>\n            Defines the maximum number of vertex color sets per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\">\n            <summary>\n            Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SBBC_DEFAULT_MAX_BONES\">\n            <summary>\n            Defines the default bone count limit.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEBONE_THRESHOLD\">\n            <summary>\n            Defines the deboning threshold.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.MAX_LENGTH\">\n            <summary>\n            Defines the maximum length of a string used in AiString.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEFAULT_MATERIAL_NAME\">\n            <summary>\n            Defines the default color material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEFAULT_TEXTURED_MATERIAL_NAME\">\n            <summary>\n            Defines the default textured material (if the meshes have UV coords).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMatKeys\">\n            <summary>\n            Static class containing material key constants. A fully qualified mat key\n            name here means that it's a string that combines the mat key (base) name, its\n            texture type semantic, and its texture index into a single string delimited by\n            commas. For non-texture material properties, the texture type semantic and texture\n            index are always zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.NAME_BASE\">\n            <summary>\n            Material name (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.NAME\">\n            <summary>\n            Material name (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TWOSIDED_BASE\">\n            <summary>\n            Two sided property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TWOSIDED\">\n            <summary>\n            Two sided property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADING_MODEL_BASE\">\n            <summary>\n            Shading mode property (ShadingMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADING_MODEL\">\n            <summary>\n            Shading mode property (ShadingMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.ENABLE_WIREFRAME_BASE\">\n            <summary>\n            Enable wireframe property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.ENABLE_WIREFRAME\">\n            <summary>\n            Enable wireframe property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BLEND_FUNC_BASE\">\n            <summary>\n            Blending function (BlendMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BLEND_FUNC\">\n            <summary>\n            Blending function (BlendMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.OPACITY_BASE\">\n            <summary>\n            Opacity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.OPACITY\">\n            <summary>\n            Opacity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TRANSPARENCYFACTOR_BASE\">\n            <summary>\n            Transparency Factor (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TRANSPARENCYFACTOR\">\n            <summary>\n            Transparency Factor (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BUMPSCALING_BASE\">\n            <summary>\n            Bumpscaling (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BUMPSCALING\">\n            <summary>\n            Bumpscaling (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_BASE\">\n            <summary>\n            Shininess (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS\">\n            <summary>\n            Shininess (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFLECTIVITY_BASE\">\n            <summary>\n            Reflectivity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFLECTIVITY\">\n            <summary>\n            Reflectivity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_STRENGTH_BASE\">\n            <summary>\n            Shininess strength (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_STRENGTH\">\n            <summary>\n            Shininess strength (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFRACTI_BASE\">\n            <summary>\n            Refracti (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFRACTI\">\n            <summary>\n            Refracti (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_DIFFUSE_BASE\">\n            <summary>\n            Diffuse color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_DIFFUSE\">\n            <summary>\n            Diffuse color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_AMBIENT_BASE\">\n            <summary>\n            Ambient color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_AMBIENT\">\n            <summary>\n            Ambient color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_SPECULAR_BASE\">\n            <summary>\n            Specular color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_SPECULAR\">\n            <summary>\n            Specular color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_EMISSIVE_BASE\">\n            <summary>\n            Emissive color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_EMISSIVE\">\n            <summary>\n            Emissive color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_TRANSPARENT_BASE\">\n            <summary>\n            Transparent color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_TRANSPARENT\">\n            <summary>\n            Transparent color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_REFLECTIVE_BASE\">\n            <summary>\n            Reflective color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_REFLECTIVE\">\n            <summary>\n            Reflective color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_BACKGROUND_IMAGE_BASE\">\n            <summary>\n            Background image (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_BACKGROUND_IMAGE\">\n            <summary>\n            Background image (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXTURE_BASE\">\n            <summary>\n            Texture base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.UVWSRC_BASE\">\n            <summary>\n            UVWSRC base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXOP_BASE\">\n            <summary>\n            Texture op base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPING_BASE\">\n            <summary>\n            Mapping base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXBLEND_BASE\">\n            <summary>\n            Texture blend base name.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPINGMODE_U_BASE\">\n            <summary>\n            Mapping mode U base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPINGMODE_V_BASE\">\n            <summary>\n            Mapping mode V base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXMAP_AXIS_BASE\">\n            <summary>\n            Texture map axis base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.UVTRANSFORM_BASE\">\n            <summary>\n            UV transform base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXFLAGS_BASE\">\n            <summary>\n            Texture flags base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_SHADERLANG_BASE\">\n            <summary>\n            Shader language type (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_SHADERLANG\">\n            <summary>\n            Shader language type (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_VERTEX_BASE\">\n            <summary>\n            Vertex shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_VERTEX\">\n            <summary>\n            Vertex shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_FRAGMENT_BASE\">\n            <summary>\n            Fragment/Pixel shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_FRAGMENT\">\n            <summary>\n            Fragment/Pixel shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_GEO_BASE\">\n            <summary>\n            Geometry shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_GEO\">\n            <summary>\n            Geometry shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_TESSELATION_BASE\">\n            <summary>\n            Tesselation shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_TESSELATION\">\n            <summary>\n            Tesselation shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_PRIMITIVE_BASE\">\n            <summary>\n            Primitive/Domain shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_PRIMITIVE\">\n            <summary>\n            Primitive/Domain shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_COMPUTE_BASE\">\n            <summary>\n            Compute shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_COMPUTE\">\n            <summary>\n            Compute shader source code (string)\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiMatKeys.GetFullTextureName(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Helper function to get the fully qualified name of a texture property type name. Takes\n            in a base name constant, a texture type, and a texture index and outputs the name in the format:\n            <para>\"baseName,TextureType,texIndex\"</para>\n            </summary>\n            <param name=\"baseName\">Base name</param>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"texIndex\">Texture index</param>\n            <returns>Fully qualified texture name</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiMatKeys.GetBaseName(System.String)\">\n            <summary>\n            Helper function to get the base name from a fully qualified name of a material property type name. The format\n            of such a string is:\n            <para>\"baseName,TextureType,texIndex\"</para>\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified material property name.</param>\n            <returns>Base name of the property type.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary\">\n            <summary>\n            Singleton that governs access to the unmanaged Assimp library functions.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AssimpLibrary.DefaultLibName\">\n            <summary>\n            Default name of the unmanaged library. Based on runtime implementation the prefix (\"lib\" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AssimpLibrary.Instance\">\n            <summary>\n            Gets the AssimpLibrary instance.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AssimpLibrary.IsMultithreadingSupported\">\n            <summary>\n            Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only,\n            then it will not utilize multiple threads during import.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFile(System.String,Assimp.PostProcessSteps,System.IntPtr)\">\n            <summary>\n            Imports a file.\n            </summary>\n            <param name=\"file\">Valid filename</param>\n            <param name=\"flags\">Post process flags specifying what steps are to be run after the import.</param>\n            <param name=\"propStore\">Property store containing config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFile(System.String,Assimp.PostProcessSteps,System.IntPtr,System.IntPtr)\">\n            <summary>\n            Imports a file.\n            </summary>\n            <param name=\"file\">Valid filename</param>\n            <param name=\"flags\">Post process flags specifying what steps are to be run after the import.</param>\n            <param name=\"fileIO\">Pointer to an instance of AiFileIO, a custom file IO system used to open the model and \n            any associated file the loader needs to open, passing NULL uses the default implementation.</param>\n            <param name=\"propStore\">Property store containing config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFileFromStream(System.IO.Stream,Assimp.PostProcessSteps,System.String,System.IntPtr)\">\n            <summary>\n            Imports a scene from a stream. This uses the \"aiImportFileFromMemory\" function. The stream can be from anyplace,\n            not just a memory stream. It is up to the caller to dispose of the stream.\n            </summary>\n            <param name=\"stream\">Stream containing the scene data</param>\n            <param name=\"flags\">Post processing flags</param>\n            <param name=\"formatHint\">A hint to Assimp to decide which importer to use to process the data</param>\n            <param name=\"propStore\">Property store containing the config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ReleaseImport(System.IntPtr)\">\n            <summary>\n            Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled\n            from the managed scene structure - only for scenes whose memory was allocated by the native library!\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ApplyPostProcessing(System.IntPtr,Assimp.PostProcessSteps)\">\n            <summary>\n            Applies a post-processing step on an already imported scene.\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n            <param name=\"flags\">Post processing steps to run.</param>\n            <returns>Pointer to the unmanaged scene data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetExportFormatDescriptions\">\n            <summary>\n            Gets all supported export formats.\n            </summary>\n            <returns>Array of supported export formats.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportSceneToBlob(System.IntPtr,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file.\n            </summary>\n            <param name=\"scene\">Scene to export, it is the responsibility of the caller to free this when finished.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"preProcessing\">Pre processing flags to operate on the scene during the export.</param>\n            <returns>Exported binary blob, or null if there was an error.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportScene(System.IntPtr,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format and writes the result file(s) to disk.\n            </summary>\n            <param name=\"scene\">The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short,\n            this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"fileName\">Output filename to write to</param>\n            <param name=\"preProcessing\">Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input\n            conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format.</param>\n            <returns>Return code specifying if the operation was a success.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportScene(System.IntPtr,System.String,System.String,System.IntPtr,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format and writes the result file(s) to disk.\n            </summary>\n            <param name=\"scene\">The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short,\n            this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"fileName\">Output filename to write to</param>\n            <param name=\"fileIO\">Pointer to an instance of AiFileIO, a custom file IO system used to open the model and \n            any associated file the loader needs to open, passing NULL uses the default implementation.</param>\n            <param name=\"preProcessing\">Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input\n            conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format.</param>\n            <returns>Return code specifying if the operation was a success.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CopyScene(System.IntPtr)\">\n            <summary>\n            Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified\n            and the scene be exported.\n            </summary>\n            <param name=\"sceneToCopy\">Valid scene to be copied</param>\n            <returns>Modifyable copy of the scene</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.AttachLogStream(System.IntPtr)\">\n            <summary>\n            Attaches a log stream callback to catch Assimp messages.\n            </summary>\n            <param name=\"logStreamPtr\">Pointer to an instance of AiLogStream.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.EnableVerboseLogging(System.Boolean)\">\n            <summary>\n            Enables verbose logging.\n            </summary>\n            <param name=\"enable\">True if verbose logging is to be enabled or not.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVerboseLoggingEnabled\">\n            <summary>\n            Gets if verbose logging is enabled.\n            </summary>\n            <returns>True if verbose logging is enabled, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DetachLogStream(System.IntPtr)\">\n            <summary>\n            Detaches a logstream callback.\n            </summary>\n            <param name=\"logStreamPtr\">Pointer to an instance of AiLogStream.</param>\n            <returns>A return code signifying if the function was successful or not.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DetachAllLogStreams\">\n            <summary>\n            Detaches all logstream callbacks currently attached to Assimp.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CreatePropertyStore\">\n            <summary>\n            Create an empty property store. Property stores are used to collect import settings.\n            </summary>\n            <returns>Pointer to property store</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ReleasePropertyStore(System.IntPtr)\">\n            <summary>\n            Deletes a property store.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyInteger(System.IntPtr,System.String,System.Int32)\">\n            <summary>\n            Sets an integer property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyFloat(System.IntPtr,System.String,System.Single)\">\n            <summary>\n            Sets a float property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyString(System.IntPtr,System.String,System.String)\">\n            <summary>\n            Sets a string property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyMatrix(System.IntPtr,System.String,Assimp.Matrix4x4)\">\n            <summary>\n            Sets a matrix property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialColor(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a color value from the material property table.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The color if it exists. If not, the default Color4D value is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialFloatArray(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32,System.UInt32)\">\n            <summary>\n            Retrieves an array of float values with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <param name=\"floatCount\">The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than\n            the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array).</param>\n            <returns>The float array, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialIntegerArray(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32,System.UInt32)\">\n            <summary>\n            Retrieves an array of integer values with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <param name=\"intCount\">The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than\n            the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array).</param>\n            <returns>The integer array, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialProperty(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a material property with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the property from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The material property, if found.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialString(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a string from the material property table.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The string, if it exists. If not, an empty string is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTextureCount(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType)\">\n            <summary>\n            Gets the number of textures contained in the material for a particular texture type.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture Type semantic</param>\n            <returns>The number of textures for the type.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTextureFilePath(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Gets the texture filepath contained in the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture type semantic</param>\n            <param name=\"index\">Texture index</param>\n            <returns>The texture filepath, if it exists. If not an empty string is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTexture(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Gets all values pertaining to a particular texture from a material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture type semantic</param>\n            <param name=\"index\">Texture index</param>\n            <returns>Returns the texture slot struct containing all the information.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetErrorString\">\n            <summary>\n            Gets the last error logged in Assimp.\n            </summary>\n            <returns>The last error message logged.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IsExtensionSupported(System.String)\">\n            <summary>\n            Checks whether the model format extension is supported by Assimp.\n            </summary>\n            <param name=\"extension\">Model format extension, e.g. \".3ds\"</param>\n            <returns>True if the format is supported, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetExtensionList\">\n            <summary>\n            Gets all the model format extensions that are currently supported by Assimp.\n            </summary>\n            <returns>Array of supported format extensions</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetImporterDescriptions\">\n            <summary>\n            Gets a collection of importer descriptions that detail metadata and feature support for each importer.\n            </summary>\n            <returns>Collection of importer descriptions</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMemoryRequirements(System.IntPtr)\">\n            <summary>\n            Gets the memory requirements of the scene.\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n            <returns>The memory information about the scene.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CreateQuaternionFromMatrix(Assimp.Quaternion@,Assimp.Matrix3x3@)\">\n            <summary>\n            Creates a quaternion from the 3x3 rotation matrix.\n            </summary>\n            <param name=\"quat\">Quaternion struct to fill</param>\n            <param name=\"mat\">Rotation matrix</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DecomposeMatrix(Assimp.Matrix4x4@,Assimp.Vector3D@,Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a 4x4 matrix into its scaling, rotation, and translation parts.\n            </summary>\n            <param name=\"mat\">4x4 Matrix to decompose</param>\n            <param name=\"scaling\">Scaling vector</param>\n            <param name=\"rotation\">Quaternion containing the rotation</param>\n            <param name=\"position\">Translation vector</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransposeMatrix4(Assimp.Matrix4x4@)\">\n            <summary>\n            Transposes the 4x4 matrix.\n            </summary>\n            <param name=\"mat\">Matrix to transpose</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransposeMatrix3(Assimp.Matrix3x3@)\">\n            <summary>\n            Transposes the 3x3 matrix.\n            </summary>\n            <param name=\"mat\">Matrix to transpose</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransformVecByMatrix3(Assimp.Vector3D@,Assimp.Matrix3x3@)\">\n            <summary>\n            Transforms the vector by the 3x3 rotation matrix.\n            </summary>\n            <param name=\"vec\">Vector to transform</param>\n            <param name=\"mat\">Rotation matrix</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransformVecByMatrix4(Assimp.Vector3D@,Assimp.Matrix4x4@)\">\n            <summary>\n            Transforms the vector by the 4x4 matrix.\n            </summary>\n            <param name=\"vec\">Vector to transform</param>\n            <param name=\"mat\">Matrix transformation</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.MultiplyMatrix4(Assimp.Matrix4x4@,Assimp.Matrix4x4@)\">\n            <summary>\n            Multiplies two 4x4 matrices. The destination matrix receives the result.\n            </summary>\n            <param name=\"dst\">First input matrix and is also the Matrix to receive the result</param>\n            <param name=\"src\">Second input matrix, to be multiplied with \"dst\".</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.MultiplyMatrix3(Assimp.Matrix3x3@,Assimp.Matrix3x3@)\">\n            <summary>\n            Multiplies two 3x3 matrices. The destination matrix receives the result.\n            </summary>\n            <param name=\"dst\">First input matrix and is also the Matrix to receive the result</param>\n            <param name=\"src\">Second input matrix, to be multiplied with \"dst\".</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IdentityMatrix3(Assimp.Matrix3x3@)\">\n            <summary>\n            Creates a 3x3 identity matrix.\n            </summary>\n            <param name=\"mat\">Matrix to hold the identity</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IdentityMatrix4(Assimp.Matrix4x4@)\">\n            <summary>\n            Creates a 4x4 identity matrix.\n            </summary>\n            <param name=\"mat\">Matrix to hold the identity</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetLegalString\">\n            <summary>\n            Gets the Assimp legal info.\n            </summary>\n            <returns>String containing Assimp legal info.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionMinor\">\n            <summary>\n            Gets the native Assimp DLL's minor version number.\n            </summary>\n            <returns>Assimp minor version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionMajor\">\n            <summary>\n            Gets the native Assimp DLL's major version number.\n            </summary>\n            <returns>Assimp major version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionRevision\">\n            <summary>\n            Gets the native Assimp DLL's revision version number.\n            </summary>\n            <returns>Assimp revision version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetBranchName\">\n            <summary>\n            Returns the branchname of the Assimp runtime.\n            </summary>\n            <returns>The current branch name.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersion\">\n            <summary>\n            Gets the native Assimp DLL's current version number as \"major.minor.revision\" string. This is the\n            version of Assimp that this wrapper is currently using.\n            </summary>\n            <returns>Unmanaged DLL version</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionAsVersion\">\n            <summary>\n            Gets the native Assimp DLL's current version number as a .NET version object.\n            </summary>\n            <returns>Unmanaged DLL version</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetCompileFlags\">\n            <summary>\n            Get the compilation flags that describe how the native Assimp DLL was compiled.\n            </summary>\n            <returns>Compilation flags</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary.FunctionNames\">\n            <summary>\n            Defines all the unmanaged assimp C-function names.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary.Functions\">\n            <summary>\n            Defines all of the delegates that represent the unmanaged assimp functions.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.Platform\">\n            <summary>\n            Enumerates supported platforms.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Windows\">\n            <summary>\n            Windows platform.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Linux\">\n            <summary>\n            Linux platform.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Mac\">\n            <summary>\n            Mac platform.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedFunctionNameAttribute\">\n            <summary>\n            An attribute that represents the name of an unmanaged function to import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.UnmanagedFunctionName\">\n            <summary>\n            Name of the unmanaged function.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.#ctor(System.String)\">\n            <summary>\n            Constructs a new <see cref=\"P:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.UnmanagedFunctionName\"/>.\n            </summary>\n            <param name=\"unmanagedFunctionName\">Name of the function.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedLibrary\">\n            <summary>\n            Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list\n            of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load\n            unmanaged libraries.\n            </summary>\n        </member>\n        <member name=\"E:Assimp.Unmanaged.UnmanagedLibrary.LibraryLoaded\">\n            <summary>\n            Occurs when the unmanaged library is loaded.\n            </summary>\n        </member>\n        <member name=\"E:Assimp.Unmanaged.UnmanagedLibrary.LibraryFreed\">\n            <summary>\n            Occurs when the unmanaged library is freed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.IsLibraryLoaded\">\n            <summary>\n            Queries if the unmanaged library has been loaded or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.DefaultLibraryName\">\n            <summary>\n            Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional\n            names can be set in the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/> (e.g. to load versioned DLLs)\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.LibraryPath\">\n            <summary>\n            Gets the path to the unmanaged library DLL that is currently loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.Resolver\">\n            <summary>\n            Gets the resolver used to find the unmanaged library DLL when loading.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.ThrowOnLoadFailure\">\n            <summary>\n            Gets or sets whether an <see cref=\"T:Assimp.AssimpException\"/> is thrown if the unmanaged DLL fails to load for whatever reason. By\n            default this is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.Is64Bit\">\n            <summary>\n            Queries if the OS is 64-bit, if false then it is 32-bit.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.#ctor(System.String,System.Type[])\">\n            <summary>\n            Constructs a new <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/>.\n            </summary>\n            <param name=\"defaultName\">Default name (NOT path) of the unmanaged library.</param>\n            <param name=\"unmanagedFunctionDelegateTypes\">Delegate types to instantiate and load.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.GetPlatform\">\n            <summary>\n            Gets an enum representing the current OS that is application is executing on.\n            </summary>\n            <returns>Platform enumeration.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary\">\n            <summary>\n            Loads the unmanaged library using the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/>.\n            </summary>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(System.String,System.String)\">\n            <summary>\n            Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness.\n            </summary>\n            <param name=\"lib32Path\">Path to the 32-bit DLL</param>\n            <param name=\"lib64Path\">Path to the 64-bit DLL</param>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(System.String)\">\n            <summary>\n            Loads the unmanaged library using the supplied path.\n            </summary>\n            <param name=\"libPath\">Path to the unmanaged DLL.</param>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.FreeLibrary\">\n            <summary>\n            Frees the unmanaged library that is currently loaded.\n            </summary>\n            <returns>True if the library was sucessfully freed.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.GetFunction``1(System.String)\">\n            <summary>\n            Gets a delegate based on the unmanaged function name.\n            </summary>\n            <typeparam name=\"T\">Type of delegate.</typeparam>\n            <param name=\"funcName\">Name of unmanaged function that is exported by the library.</param>\n            <returns>The delegate, or null if not found.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadIfNotLoaded\">\n            <summary>\n            If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library\n            from the default path. This function is thread safe.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.OnLibraryLoaded\">\n            <summary>\n            Called when the library is loaded.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.OnLibraryFreed\">\n            <summary>\n            Called when the library is freed.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\">\n            <summary>\n            Resolves unmanaged DLLs for <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/>. The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs),\n            an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/>\n            for the search strategy.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibraryResolver.Platform\">\n            <summary>\n            Gets the platform that the application is running on. \n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.#ctor(Assimp.Unmanaged.Platform)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/> class.\n            </summary>\n            <param name=\"platformHint\">Platform we're resolving binaries for.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames32(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames64(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths32(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths64(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName32(System.String)\">\n            <summary>\n            Sets an override 32-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName64(System.String)\">\n            <summary>\n            Sets an override 64-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName(System.String)\">\n            <summary>\n            Sets an override 32-bit and 64-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\">\n            <summary>\n            Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback\n            library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try\n            and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution:\n            <para>\n            <list type=\"number\">\n            <item><description>Search user-specified probing paths.</description></item>\n            <item><description>Search {AppBaseDirectory}/runtimes/{RID}/native/.</description></item>\n            <item><description>Search {AppBaseDirectory}/.</description></item>\n            <item><description>Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/.</description></item>\n            </list>\n            </para>\n            <para>\n            The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID\n            is the Runtime Identifier based on the platform/architecture, see also <a href=\"https://docs.microsoft.com/en-us/dotnet/core/rid-catalog\">Microsoft's RID Catalog</a>.\n            </para>\n            </summary>\n            <param name=\"libName\">Name of the library to attempt to resolve.</param>\n            <returns>Full file path to the library, or the file name if not found (e.g. \"libXYZ.so\").</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiScene\">\n            <summary>\n            Represents an aiScene struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Flags\">\n            <summary>\n            unsigned int, flags about the state of the scene\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.RootNode\">\n            <summary>\n            aiNode*, root node of the scenegraph.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumMeshes\">\n            <summary>\n            Number of meshes contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Meshes\">\n            <summary>\n            aiMesh**, meshes in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumMaterials\">\n            <summary>\n            Number of materials contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Materials\">\n            <summary>\n            aiMaterial**, materials in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumAnimations\">\n            <summary>\n            Number of animations contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Animations\">\n            <summary>\n            aiAnimation**, animations in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumTextures\">\n            <summary>\n            Number of embedded textures contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Textures\">\n            <summary>\n            aiTexture**, textures in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumLights\">\n            <summary>\n            Number of lights contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Lights\">\n            <summary>\n            aiLight**, lights in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumCameras\">\n            <summary>\n            Number of cameras contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Cameras\">\n            <summary>\n            aiCamera**, cameras in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Metadata\">\n            <summary>\n            aiMetadata*, The global metadata assigned to the scene itself.\n            \n            This data contains global metadata which belongs to the scene like \n            unit-conversions, versions, vendors or other model-specific data. This \n            can be used to store format-specific metadata as well.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Name\">\n            <summary>\n            The name of the scene itself.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumSkeletons\">\n            <summary>\n            Number of skeletons contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Skeletons\">\n            <summary>\n            aiSkeleton**, skeletons in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Private\">\n            <summary>\n            Internal data, do not touch\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiNode\">\n            <summary>\n            Represents an aiNode struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Name\">\n            <summary>\n            Name of the node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Transformation\">\n            <summary>\n            Node's transform relative to its parent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Parent\">\n            <summary>\n            aiNode*, node's parent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.NumChildren\">\n            <summary>\n            Number of children the node owns.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Children\">\n            <summary>\n            aiNode**, array of nodes this node owns.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.NumMeshes\">\n            <summary>\n            Number of meshes referenced by this node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Meshes\">\n            <summary>\n            unsigned int*, array of mesh indices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.MetaData\">\n            <summary>\n            aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMetadataEntry\">\n            <summary>\n            Represents an aiMetadataEntry struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadataEntry.DataType\">\n            <summary>\n            Type of metadata.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadataEntry.Data\">\n            <summary>\n            Pointer to data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMetadata\">\n            <summary>\n            Represents an aiMetadata struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.NumProperties\">\n            <summary>\n            Length of the Keys and Values arrays.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.keys\">\n            <summary>\n            aiString*, array of keys. May not be NULL. Each entry must exist.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.Values\">\n            <summary>\n            aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMesh\">\n            <summary>\n            Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.PrimitiveTypes\">\n            <summary>\n            unsigned int, bitwise flag detailing types of primitives contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumVertices\">\n            <summary>\n            Number of vertices in the mesh, denotes length of\n            -all- per-vertex arrays.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumFaces\">\n            <summary>\n            Number of faces in the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Vertices\">\n            <summary>\n            aiVector3D*, array of positions.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Normals\">\n            <summary>\n            aiVector3D*, array of normals.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Tangents\">\n            <summary>\n            aiVector3D*, array of tangents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.BiTangents\">\n            <summary>\n            aiVector3D*, array of bitangents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Colors\">\n            <summary>\n            aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.TextureCoords\">\n            <summary>\n            aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumUVComponents\">\n            <summary>\n            unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example.\n            Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Faces\">\n            <summary>\n            aiFace*, array of faces.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumBones\">\n            <summary>\n            Number of bones in the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Bones\">\n            <summary>\n            aiBone**, array of bones.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.MaterialIndex\">\n            <summary>\n            Material index referencing the material in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Name\">\n            <summary>\n            Optional name of the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumAnimMeshes\">\n            <summary>\n            Number of attachment meshes. NOT CURRENTLY IN USE.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.AnimMeshes\">\n            <summary>\n            aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.MorphMethod\">\n            <summary>\n            unsigned int, method of morphing when anim meshes are specified.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.AABB\">\n            <summary>\n            Axis aligned bounding box.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.TextureCoordsNames\">\n            <summary>\n            aiString[Max_Value], pointer to array of texture coordinate names. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiTexture\">\n            <summary>\n            Represents an aiTexture struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Width\">\n            <summary>\n            Width of the texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Height\">\n            <summary>\n            Height of the texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.FormatHint\">\n            <summary>\n            sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that\n            maps to one byte. 8 for string + 1 for terminator.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Data\">\n            <summary>\n            aiTexel*, array of texel data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Filename\">\n            <summary>\n            Texture original filename.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.SetFormatHint(System.String)\">\n            <summary>\n            Sets the format hint.\n            </summary>\n            <param name=\"formatHint\">Format hint - must be 3 characters or less</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.GetFormatHint\">\n            <summary>\n            Gets the format hint.\n            </summary>\n            <returns>The format hint</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.GetFormatHint(Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref.\n            </summary>\n            <param name=\"aiTex\">AiTexture</param>\n            <returns>The format hint</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFace\">\n            <summary>\n            Represents an aiFace struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFace.NumIndices\">\n            <summary>\n            Number of indices in the face.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFace.Indices\">\n            <summary>\n            unsigned int*, array of indices.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiBone\">\n            <summary>\n            Represents an aiBone struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Name\">\n            <summary>\n            Name of the bone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.NumWeights\">\n            <summary>\n            Number of weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Armature\">\n            <summary>\n            Bone armature, used for skeleton conversion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Node\">\n            <summary>\n            Bone needed in scene, used for skeleton conversion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Weights\">\n            <summary>\n            VertexWeight*, array of vertex weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.OffsetMatrix\">\n            <summary>\n            Matrix that transforms the vertex from mesh to bone space in bind pose\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMaterialProperty\">\n            <summary>\n            Represents an aiMaterialProperty struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Key\">\n            <summary>\n            Name of the property (key).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Semantic\">\n            <summary>\n            Textures: Specifies texture usage. None texture properties\n            have this zero (or None).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Index\">\n            <summary>\n            Textures: Specifies the index of the texture. For non-texture properties\n            this is always zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.DataLength\">\n            <summary>\n            Size of the buffer data in bytes. This value may not be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Type\">\n            <summary>\n            Type of value contained in the buffer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Data\">\n            <summary>\n            char*, byte buffer to hold the property's value.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMaterial\">\n            <summary>\n            Represents an aiMaterial struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.Properties\">\n            <summary>\n            aiMaterialProperty**, array of material properties.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.NumProperties\">\n            <summary>\n            Number of key-value properties.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.NumAllocated\">\n            <summary>\n            Storage allocated for key-value properties.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiNodeAnim\">\n            <summary>\n            Represents an aiNodeAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NodeName\">\n            <summary>\n            Name of the node affected by the animation. The node must exist\n            and be unique.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumPositionKeys\">\n            <summary>\n            Number of position keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.PositionKeys\">\n            <summary>\n            VectorKey*, position keys of this animation channel. Positions\n            are 3D vectors and are accompanied by at least one scaling and one rotation key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumRotationKeys\">\n            <summary>\n            The number of rotation keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.RotationKeys\">\n            <summary>\n            QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions).\n            If there are rotation keys there will be at least one scaling and one position key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumScalingKeys\">\n            <summary>\n            Number of scaling keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.ScalingKeys\">\n            <summary>\n            VectorKey*, scaling keys of this animation channel. Scalings are specified as a\n            3D vector, and if there are scaling keys, there will at least be one position\n            and one rotation key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.Prestate\">\n            <summary>\n            Defines how the animation behaves before the first key is encountered.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.PostState\">\n            <summary>\n            Defines how the animation behaves after the last key was processed.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshAnim\">\n            <summary>\n            Represents an aiMeshAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.Name\">\n            <summary>\n            Name of the mesh to be animated. Empty string not allowed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.NumKeys\">\n            <summary>\n            Number of keys, there is at least one.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.Keys\">\n            <summary>\n            aiMeshkey*, the key frames of the animation. There must exist at least one.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshMorphKey\">\n            <summary>\n            Represents an aiMeshMorphKey struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Values\">\n            <summary>\n            unsigned int*, values at the time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Weights\">\n            <summary>\n            double*, weights at the time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.NumValuesAndWeights\">\n            <summary>\n            unsigned int, the number of values/weights.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshMorphAnim\">\n            <summary>\n            Represents an aiMeshMorphAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.Name\">\n            <summary>\n            aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely,\n            the name can basically serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.NumKeys\">\n            <summary>\n            unsigned int, number of key frames. Must be at least one.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.Keys\">\n            <summary>\n            aiMeshMorphKey*, key frames of the animation.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiAnimation\">\n            <summary>\n            Represents an aiAnimation struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Name\">\n            <summary>\n            Name of the animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Duration\">\n            <summary>\n            Duration of the animation in ticks.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.TicksPerSecond\">\n            <summary>\n            Ticks per second, 0 if not specified in imported file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumChannels\">\n            <summary>\n            Number of bone animation channels, each channel affects a single node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Channels\">\n            <summary>\n            aiNodeAnim**, node animation channels. Each channel affects a single node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumMeshChannels\">\n            <summary>\n            Number of mesh animation channels. Each channel affects a single mesh and defines\n            vertex-based animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.MeshChannels\">\n            <summary>\n            aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. \n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumMeshMorphChannels\">\n            <summary>\n            Number of mesh morph animation channels. Each channel affects a single mesh and defines\n            morphing animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.MeshMorphChannels\">\n            <summary>\n            aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. \n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLight\">\n            <summary>\n            Represents an aiLight struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Name\">\n            <summary>\n            Name of the light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Type\">\n            <summary>\n            Type of light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Position\">\n            <summary>\n            Position of the light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Direction\">\n            <summary>\n            Direction of the spot/directional light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Up\">\n            <summary>\n            Up direction of the light source in space. Undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationConstant\">\n            <summary>\n            Attenuation constant value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationLinear\">\n            <summary>\n            Attenuation linear value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationQuadratic\">\n            <summary>\n            Attenuation quadratic value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorDiffuse\">\n            <summary>\n            Diffuse color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorSpecular\">\n            <summary>\n            Specular color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorAmbient\">\n            <summary>\n            Ambient color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AngleInnerCone\">\n            <summary>\n            Spot light inner angle.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AngleOuterCone\">\n            <summary>\n            Spot light outer angle.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AreaSize\">\n            <summary>\n            Width (X) and Height (Y) of the area that represents an <see cref=\"F:Assimp.LightSourceType.Area\"/> light.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiCamera\">\n            <summary>\n            Represents an aiCamera struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Name\">\n            <summary>\n            Name of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Position\">\n            <summary>\n            Position of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Up\">\n            <summary>\n            Up vector of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.LookAt\">\n            <summary>\n            Viewing direction of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.HorizontalFOV\">\n            <summary>\n            Field Of View of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.ClipPlaneNear\">\n            <summary>\n            Near clip plane distance.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.ClipPlaneFar\">\n            <summary>\n            Far clip plane distance.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Aspect\">\n            <summary>\n            The Aspect ratio.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiString\">\n            <summary>\n            Represents an aiString struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiString.Length\">\n            <summary>\n            Byte length of the UTF-8 string, NOT logical length.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiString.Data\">\n            <summary>\n            Actual string data.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Unmanaged.AiString\"/> struct.\n            </summary>\n            <param name=\"data\">The string data</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.GetString(Assimp.Unmanaged.AiString@)\">\n            <summary>\n            Convienence method for getting the AiString string - if the length is not greater than zero, it returns\n            an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref.\n            </summary>\n            <param name=\"aiStr\">AiString</param>\n            <returns>AiString string data</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.GetString\">\n            <summary>\n            Convienence method for getting the AiString string - if the length is not greater than zero, it returns\n            an empty string rather than garbage.\n            </summary>\n            <returns>AiString string data</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.SetString(System.String)\">\n            <summary>\n            Convienence method for setting the AiString string (and length).\n            </summary>\n            <param name=\"data\">String data to set</param>\n            <returns>True if the operation was successful, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.ToString\">\n            <summary>\n            Returns the fully qualified type name of this instance.\n            </summary>\n            <returns>A <see cref=\"T:System.String\" /> containing a fully qualified type name.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLogStream\">\n            <summary>\n            Represents a log stream, which receives all log messages and streams them somewhere.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLogStream.Callback\">\n            <summary>\n            Function pointer that gets called when a message is to be logged.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLogStream.UserData\">\n            <summary>\n            char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMemoryInfo\">\n            <summary>\n            Represents the memory requirements for the different components of an imported\n            scene. All sizes in in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Textures\">\n            <summary>\n            Size of the storage allocated for texture data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Materials\">\n            <summary>\n            Size of the storage allocated for material data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Meshes\">\n            <summary>\n            Size of the storage allocated for mesh data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Nodes\">\n            <summary>\n            Size of the storage allocated for node data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Animations\">\n            <summary>\n            Size of the storage allocated for animation data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Cameras\">\n            <summary>\n            Size of the storage allocated for camera data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Lights\">\n            <summary>\n            Size of the storage allocated for light data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Total\">\n            <summary>\n            Total storage allocated for the imported scene, in bytes.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiAnimMesh\">\n            <summary>\n            Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Name\">\n            <summary>\n            Anim Mesh name \n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Vertices\">\n            <summary>\n            aiVector3D*, replacement position array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Normals\">\n            <summary>\n            aiVector3D*, replacement normal array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Tangents\">\n            <summary>\n            aiVector3D*, replacement tangent array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.BiTangents\">\n            <summary>\n            aiVector3D*, replacement bitangent array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Colors\">\n            <summary>\n            aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.TextureCoords\">\n            <summary>\n            aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.NumVertices\">\n            <summary>\n            unsigned int, number of vertices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Weight\">\n            <summary>\n            float, weight of the AnimMesh.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiImporterDesc\">\n            <summary>\n            Describes a variety of information about an importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Name\">\n            <summary>\n            char*, full name of the importer (e.g. Blender3D Importer)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Author\">\n            <summary>\n            char*, original author (blank if unknown or assimp team)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Maintainer\">\n            <summary>\n            char*, current maintainer, left blank if the author maintains.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Comments\">\n            <summary>\n            char*, implementation comments. E.g. unimplemented features.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Flags\">\n            <summary>\n            unsigned int, features supported by the importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MinMajor\">\n            <summary>\n            unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MinMinor\">\n            <summary>\n            unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MaxMajor\">\n            <summary>\n            unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MaxMinor\">\n            <summary>\n            unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.FileExtensions\">\n            <summary>\n            char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. \"xml dae\").\n            Multiple importers may respond to the same file extension, assim\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiExportFormatDesc\">\n            <summary>\n            Describes a file format which Assimp can export to.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.FormatId\">\n            <summary>\n            char*, a short string ID to uniquely identify the export format. e.g. \"collada\" or \"obj\"\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.Description\">\n            <summary>\n            char*, a short description of the file format to present to users.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.FileExtension\">\n            <summary>\n            char*, a recommended file extension of the exported file in lower case.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiExportDataBlob\">\n            <summary>\n            Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested\n            blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Size\">\n            <summary>\n            size_t, size of the data in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Data\">\n            <summary>\n            void*, the data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Name\">\n            <summary>\n            AiString, name of the blob.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.NextBlob\">\n            <summary>\n            aiExportDataBlob*, pointer to the next blob in the chain.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileIO\">\n            <summary>\n            Contains callbacks to implement a custom file system to open and close files.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.OpenProc\">\n            <summary>\n            Function pointer to open a new file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.CloseProc\">\n            <summary>\n            Function pointer used to close an existing file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.UserData\">\n            <summary>\n            Char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFile\">\n            <summary>\n            Contains callbacks to read and write to a file opened by a custom file system.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.ReadProc\">\n            <summary>\n            Function pointer to read from a file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.WriteProc\">\n            <summary>\n            Function pointer to write to a file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.TellProc\">\n            <summary>\n            Function pointer to retrieve the current position of the file cursor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.FileSizeProc\">\n            <summary>\n            Function pointer to retrieve the size of the file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.SeekProc\">\n            <summary>\n            Function pointer to set the current position of the file cursor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.FlushProc\">\n            <summary>\n            Function pointer to flush the file contents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.UserData\">\n            <summary>\n            Char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLogStreamCallback\">\n            <summary>\n            Callback delegate for Assimp's LogStream.\n            </summary>\n            <param name=\"msg\">Log message</param>\n            <param name=\"userData\">char* pointer to user data that is passed to the callback</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileWriteProc\">\n            <summary>\n            Callback delegate for a custom file system, to write to a file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance</param>\n            <param name=\"dataToWrite\">Char* pointer to data to write (casted from a void*)</param>\n            <param name=\"sizeOfElemInBytes\">Size of a single element in bytes to write</param>\n            <param name=\"numElements\">Number of elements to write</param>\n            <returns>Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileReadProc\">\n            <summary>\n            Callback delegate for a custom file system, to read from a file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n            <param name=\"dataToRead\">Char* pointer that will store the data read (casted from a void*)</param>\n            <param name=\"sizeOfElemInBytes\">Size of a single element in bytes to read</param>\n            <param name=\"numElements\">Number of elements to read</param>\n            <returns>Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileTellProc\">\n            <summary>\n            Callback delegate for a custom file system, to tell offset/size information about the file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n            <returns>Returns the current file cursor or the file size in bytes. May be -1 if an error has occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileFlushProc\">\n            <summary>\n            Callback delegate for a custom file system, to flush the contents of the file to the disk.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileSeek\">\n            <summary>\n            Callback delegate for a custom file system, to set the current position of the file cursor.\n            </summary>\n            <param name=\"file\">Pointer to An AiFile instance.</param>\n            <param name=\"offset\">Offset from the origin.</param>\n            <param name=\"seekOrigin\">Position used as a reference</param>\n            <returns>Returns success, if successful</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileOpenProc\">\n            <summary>\n            Callback delegate for a custom file system, to open a given file and create a new AiFile instance.\n            </summary>\n            <param name=\"fileIO\">Pointer to an AiFileIO instance.</param>\n            <param name=\"pathToFile\">Path to the target file</param>\n            <param name=\"mode\">Read-write permissions to request</param>\n            <returns>Pointer to an AiFile instance.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileCloseProc\">\n            <summary>\n            Callback delegate for a custom file system, to close a given file and free its memory.\n            </summary>\n            <param name=\"fileIO\">Pointer to an AiFileIO instance.</param>\n            <param name=\"file\">Pointer to an AiFile instance that will be closed.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshColorArray\">\n            <summary>\n            Fixed length array for representing the color channels of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshColorArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshColorArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshTextureCoordinateArray\">\n            <summary>\n            Fixed length array for representing the texture coordinate channels of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshTextureCoordinateArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshTextureCoordinateArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshUVComponentArray\">\n            <summary>\n            Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshUVComponentArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshUVComponentArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.UVTransform\">\n            <summary>\n            Defines how an UV channel is transformed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Translation\">\n            <summary>\n            Translation on the U and V axes. Default is 0|0\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Scaling\">\n            <summary>\n            Scaling on the U and V axes. Default is 1|1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Rotation\">\n            <summary>\n            Rotation in counter-clockwise direction, specfied in\n            radians. The rotation center is 0.5f|0.5f and the\n            default value is zero.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Vector2D\">\n            <summary>\n            Represents a two-dimensional vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector2D.X\">\n            <summary>\n            X component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector2D.Y\">\n            <summary>\n            Y component\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Vector2D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of XY (index 0 access X, 1 access Y. If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.#ctor(System.Single,System.Single)\">\n            <summary>\n            Constructs a new Vector2D.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.#ctor(System.Single)\">\n            <summary>\n            Constructs a new Vector2D with both components\n            set the same value.\n            </summary>\n            <param name=\"value\">Value to set both X and Y to</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Set(System.Single,System.Single)\">\n            <summary>\n            Sets the X and Y values.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Length\">\n            <summary>\n            Calculates the length of the vector.\n            </summary>\n            <returns>Vector's length</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.LengthSquared\">\n            <summary>\n            Calculates the length of the vector squared.\n            </summary>\n            <returns>Vector's length squared</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Normalize\">\n            <summary>\n            Normalizes the vector where all components add to one (Unit Vector), but preserves\n            the direction that the vector represents.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Negate\">\n            <summary>\n            Negates the vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Addition(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Adds two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Added vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Subtraction(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Subtracts the second vector from the first vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Multiplies two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Multiplied vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(System.Single,Assimp.Vector2D)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source vector</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Division(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Divides the first vector by the second vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Division(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Divides the vector by a divisor value.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_UnaryNegation(Assimp.Vector2D)\">\n            <summary>\n            Negates the vector.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <returns>Negated vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Equality(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Tests equality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Inequality(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Tests inequality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Equals(Assimp.Vector2D)\">\n            <summary>\n            Tests equality between this vector and another vector.\n            </summary>\n            <param name=\"other\">Vector to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Vector3D\">\n            <summary>\n            Represents a three-dimensional vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.X\">\n            <summary>\n            X component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.Y\">\n            <summary>\n            Y component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.Z\">\n            <summary>\n            Z component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Vector3D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of XYZ (index 0 access X, 1 access Y, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Vector3D.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Constructs a new Vector3D.\n            </summary>\n            <param name=\"value\">Vector2D containing the X, Y values</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(System.Single)\">\n            <summary>\n            Constructs a new Vector3D where each component is set\n            to the same value.\n            </summary>\n            <param name=\"value\">Value to set X, Y, and Z to</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Set(System.Single,System.Single,System.Single)\">\n            <summary>\n            Sets the X, Y, and Z values.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Length\">\n            <summary>\n            Calculates the length of the vector.\n            </summary>\n            <returns>Vector's length</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.LengthSquared\">\n            <summary>\n            Calculates the length of the vector squared.\n            </summary>\n            <returns>Vector's length squared</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Normalize\">\n            <summary>\n            Normalizes the vector where all components add to one (Unit Vector), but preserves\n            the direction that the vector represents.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Negate\">\n            <summary>\n            Negates the vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Cross(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Calculates the cross product of two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Dot(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Calculates the dot product of two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Addition(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Adds two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Added vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Subtraction(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Subtracts the second vector from the first vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Multiplies two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Multiplied vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source vector</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Matrix3x3,Assimp.Vector3D)\">\n            <summary>\n            Transforms this vector by a 3x3 matrix. This \"post-multiplies\" the two.\n            </summary>\n            <param name=\"matrix\">Source matrix</param>\n            <param name=\"vector\">Source vector</param>\n            <returns>Transformed vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Matrix4x4,Assimp.Vector3D)\">\n            <summary>\n            Transforms this vector by a 4x4 matrix. This \"post-multiplies\" the two.\n            </summary>\n            <param name=\"matrix\">Source matrix</param>\n            <param name=\"vector\">Source vector</param>\n            <returns>Transformed vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Division(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Divides the first vector by the second vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Division(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Divides the vector by a divisor value.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_UnaryNegation(Assimp.Vector3D)\">\n            <summary>\n            Negates the vector.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <returns>Negated vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Equality(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Tests equality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Inequality(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Tests inequality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Equals(Assimp.Vector3D)\">\n            <summary>\n            Tests equality between this vector and another vector.\n            </summary>\n            <param name=\"other\">Vector to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.VectorKey\">\n            <summary>\n            Time-value pair specifying a 3D vector for a given time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VectorKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VectorKey.Value\">\n            <summary>\n            The 3D vector value of this key.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.VectorKey.#ctor(System.Double,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new VectorKey.\n            </summary>\n            <param name=\"time\">The time of this key.</param>\n            <param name=\"vector\">The 3D vector value of this key.</param>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_Equality(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's 3D vectors are the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_Inequality(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's 3D vectors are not the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_LessThan(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_GreaterThan(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.Equals(Assimp.VectorKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their 3D vectors are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.VertexWeight\">\n            <summary>\n            Represents a single influence of a bone on a vertex.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VertexWeight.VertexID\">\n            <summary>\n            Index of the vertex which is influenced by the bone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VertexWeight.Weight\">\n            <summary>\n            Strength of the influence in range of (0...1). All influences\n            from all bones at one vertex amounts to 1.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.VertexWeight.#ctor(System.Int32,System.Single)\">\n            <summary>\n            Constructs a new VertexWeight.\n            </summary>\n            <param name=\"vertID\">Index of the vertex.</param>\n            <param name=\"weight\">Weight of the influence.</param>\n        </member>\n        <member name=\"M:Assimp.VertexWeight.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.MemoryInterop\">\n            <summary>\n            Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or\n            replaces the entire method body. Recommended types to use are generally blittable structs.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.As``2(``0@)\">\n            <summary>\n            Casts the by-ref value from one type to another.\n            </summary>\n            <typeparam name=\"TFrom\">Type to cast from.</typeparam>\n            <typeparam name=\"TTo\">Type to cast to.</typeparam>\n            <param name=\"source\">By-ref value.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsReadonly``2(``0@)\">\n            <summary>\n            Casts the readonly by-ref value from one type to another.\n            </summary>\n            <typeparam name=\"TFrom\">Type to cast from.</typeparam>\n            <typeparam name=\"TTo\">Type to cast to.</typeparam>\n            <param name=\"source\">By-ref value.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsRef``1(System.IntPtr)\">\n            <summary>\n            Casts the pointer to a by-ref value of the specified type.\n            </summary>\n            <typeparam name=\"T\">Type to cast to.</typeparam>\n            <param name=\"pSrc\">Pointer.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteArray``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDest\">Pointer to memory location to receive the data.</param>\n            <param name=\"data\">Array containing data to write.</param>\n            <param name=\"startIndex\">Zero-based index to start reading data from the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteArrayUnaligned``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDest\">Pointer to memory location to write the data.</param>\n            <param name=\"data\">Array containing data to write.</param>\n            <param name=\"startIndex\">Zero-based index to start reading data from the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadArray``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location to read the data.</param>\n            <param name=\"data\">Array to store the copied data.</param>\n            <param name=\"startIndex\">Zero-based index to start writing data to in the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadArrayUnaligned``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location to read the data.</param>\n            <param name=\"data\">Array to store the copied data.</param>\n            <param name=\"startIndex\">Zero-based index to start writing data to in the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.SizeOfInline``1\">\n            <summary>\n            Computes the size of the type (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <returns>Size of the type in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsPointerInline``1(``0@)\">\n            <summary>\n            Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"src\">Ref to a value.</param>\n            <returns>Pointer to the memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsPointerReadonlyInline``1(``0@)\">\n            <summary>\n            Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"src\">Ref to a value.</param>\n            <returns>Pointer to the memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteInline``1(System.Void*,``0@)\">\n            <summary>\n            Writes a single element to the memory location (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDst\">Pointer to memory location.</param>\n            <param name=\"src\">Value to be written.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteUnalignedInline``1(System.Void*,``0@)\">\n            <summary>\n            Writes a single element to the memory location (inlined, unaligned copy).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDst\">Pointer to memory location.</param>\n            <param name=\"src\">Value to be written.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadInline``1(System.Void*)\">\n            <summary>\n            Reads a single element from the memory location (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location.</param>\n            <returns>Value read.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadUnalignedInline``1(System.Void*)\">\n            <summary>\n            Reads a single element from the memory location (inlined, unaligned copy).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location.</param>\n            <returns>Value read.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemCopyInline(System.Void*,System.Void*,System.UInt32)\">\n            <summary>\n            Copies the number of bytes from one pointer to the other (inlined).\n            </summary>\n            <param name=\"pDest\">Pointer to the destination memory location.</param>\n            <param name=\"pSrc\">Pointer to the source memory location</param>\n            <param name=\"byteCount\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemCopyUnalignedInline(System.Void*,System.Void*,System.UInt32)\">\n            <summary>\n            Copies the number of bytes from one pointer to the other (inlined, unaligned copy).\n            </summary>\n            <param name=\"pDest\">Pointer to the destination memory location.</param>\n            <param name=\"pSrc\">Pointer to the source memory location</param>\n            <param name=\"byteCount\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemSetInline(System.Void*,System.Byte,System.UInt32)\">\n            <summary>\n            Clears the memory to a specified value (inlined).\n            </summary>\n            <param name=\"ptr\">Pointer to the memory location.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"byteCount\">Number of bytes to to set.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemSetUnalignedInline(System.Void*,System.Byte,System.UInt32)\">\n            <summary>\n            Clears the memory to a specified value (inlined, unaligned init).\n            </summary>\n            <param name=\"ptr\">Pointer to the memory location.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"byteCount\">Number of bytes to to set.</param>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "ThirdParty/AssimpNet/5.0.0/lib/netstandard2.0/AssimpNet.xml",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>AssimpNet</name>\n    </assembly>\n    <members>\n        <member name=\"T:Assimp.Animation\">\n            <summary>\n            An animation consists of keyframe data for a number of nodes. For\n            each node affected by the animation, a separate series of data is given.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.Name\">\n            <summary>\n            Gets or sets the name of the animation. If the modeling package the\n            data was exported from only supports a single animation channel, this\n            name is usually empty.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.DurationInTicks\">\n            <summary>\n            Gets or sets the duration of the animation in number of ticks.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.TicksPerSecond\">\n            <summary>\n            Gets or sets the number of ticks per second. It may be zero\n            if it is not specified in the imported file.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.HasNodeAnimations\">\n            <summary>\n            Gets if the animation has node animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.NodeAnimationChannelCount\">\n            <summary>\n            Gets the number of node animation channels where each channel\n            affects a single node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.NodeAnimationChannels\">\n            <summary>\n            Gets the node animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.HasMeshAnimations\">\n            <summary>\n            Gets if the animation has mesh animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshAnimationChannelCount\">\n            <summary>\n            Gets the number of mesh animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshMorphAnimationChannelCount\">\n            <summary>\n            Gets the number of mesh morph animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshAnimationChannels\">\n            <summary>\n            Gets the mesh animation channels.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.MeshMorphAnimationChannels\">\n            <summary>\n            Gets the mesh morph animation channels.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Animation.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Animation\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#ToNative(System.IntPtr,Assimp.Unmanaged.AiAnimation@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Animation.Assimp#IMarshalable{Assimp#Animation,Assimp#Unmanaged#AiAnimation}#FromNative(Assimp.Unmanaged.AiAnimation@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Animation.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.AssimpContext\">\n            <summary>\n            Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion\n            functionality is offered to bypass loading model data into managed memory.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.IsDisposed\">\n            <summary>\n            Gets if the context has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.Scale\">\n            <summary>\n            Gets or sets the uniform scale for the model. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.XAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.YAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.ZAxisRotation\">\n            <summary>\n            Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied\n            with the existing root node's transform. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.UsingCustomIOSystem\">\n            <summary>\n            Gets whether this context is using a user-defined IO system for file handling.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.AssimpContext.PropertyConfigurations\">\n            <summary>\n            Gets the property configurations set to this context. This is only used during import.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.AssimpContext\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFileFromStream(System.IO.Stream,System.String)\">\n            <summary>\n            Imports a model from the stream without running any post-process steps. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ImportFile\" family of functions.\n            </summary>\n            <param name=\"stream\">Stream to read from</param>\n            <param name=\"formatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful.</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFileFromStream(System.IO.Stream,Assimp.PostProcessSteps,System.String)\">\n            <summary>\n            Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory \n            used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ImportFile\" family of functions.\n            </summary>\n            <param name=\"stream\">Stream to read from</param>\n            <param name=\"postProcessFlags\">Post processing flags, if any</param>\n            <param name=\"formatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful.</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFile(System.String)\">\n            <summary>\n            Imports a model from the specified file without running any post-process steps. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp.\n            </summary>\n            <param name=\"file\">Full path to the file</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ImportFile(System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Imports a model from the specified file. The importer sets configurations\n            and loads the model into managed memory, releasing the unmanaged memory used by Assimp.\n            </summary>\n            <param name=\"file\">Full path to the file</param>\n            <param name=\"postProcessFlags\">Post processing flags, if any</param>\n            <returns>The imported scene</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportFile(Assimp.Scene,System.String,System.String)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a file.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"fileName\">Path to the file.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <returns>True if the scene was exported successfully, false otherwise.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportFile(Assimp.Scene,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a file.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"fileName\">Path to the file.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <param name=\"preProcessing\">Preprocessing flags to apply to the model before it is exported.</param>\n            <returns>True if the scene was exported successfully, false otherwise.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportToBlob(Assimp.Scene,System.String)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a data blob.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <returns>The resulting data blob, or null if the export failed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ExportToBlob(Assimp.Scene,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports a scene to the specified format and writes it to a data blob.\n            </summary>\n            <param name=\"scene\">Scene containing the model to export.</param>\n            <param name=\"exportFormatId\">FormatID representing the format to export to.</param>\n            <param name=\"preProcessing\">Preprocessing flags to apply to the model before it is exported.</param>\n            <returns>The resulting data blob, or null if the export failed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown if the scene is null.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToFile(System.String,Assimp.PostProcessSteps,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a file.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"importProcessSteps\">Post processing steps used for the import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,System.String)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromFileToBlob(System.String,Assimp.PostProcessSteps,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the file to the specified format and save it to a data blob.\n            </summary>\n            <param name=\"inputFilename\">Input file name to import</param>\n            <param name=\"importProcessSteps\">Post processing steps used for the import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if there was a general error in importing the model.</exception>\n            <exception cref=\"T:System.IO.FileNotFoundException\">Thrown if the file could not be located.</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToFile(System.IO.Stream,System.String,Assimp.PostProcessSteps,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToFile\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"importProcessSteps\">Post processing steps used for import</param>\n            <param name=\"outputFilename\">Output file name to export to</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>True if the conversion was successful or not, false otherwise.</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,System.String)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ConvertFromStreamToBlob(System.IO.Stream,System.String,Assimp.PostProcessSteps,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream.\n            If the format is distributed across multiple files/streams, set a custom <see cref=\"T:Assimp.IOSystem\"/>\n            and use the \"ConvertFromFileToBlob\" family of functions.\n            </summary>\n            <param name=\"inputStream\">Stream to read from</param>\n            <param name=\"importFormatHint\">Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will\n            try to detect what importer to use from the data which may or may not be successful</param>\n            <param name=\"importProcessSteps\">Post processing steps used for import</param>\n            <param name=\"exportFormatId\">Format id that specifies what format to export to</param>\n            <param name=\"exportProcessSteps\">Pre processing steps used for the export</param>\n            <returns>Data blob containing the exported scene in a binary form</returns>\n            <exception cref=\"T:Assimp.AssimpException\">Thrown if the stream is not valid (null or write-only).</exception>\n            <exception cref=\"T:System.ObjectDisposedException\">Thrown if the context has already been disposed of.</exception>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.SetIOSystem(Assimp.IOSystem)\">\n            <summary>\n            Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system\n            is used instead.\n            </summary>\n            <param name=\"ioSystem\">Custom file system implementation</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveIOSystem\">\n            <summary>\n            Removes the currently set custom file system implementation from the importer.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetSupportedExportFormats\">\n            <summary>\n            Gets the model formats that are supported for export by Assimp.\n            </summary>\n            <returns>Export formats supported</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetSupportedImportFormats\">\n            <summary>\n            Gets the model formats that are supported for import by Assimp.\n            </summary>\n            <returns>Import formats supported</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetImporterDescriptions\">\n            <summary>\n            Gets descriptions for each importer that assimp has registered.\n            </summary>\n            <returns>Descriptions of supported importers.</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.GetImporterDescriptionFor(System.String)\">\n            <summary>\n            Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension,\n            they are called in the order that they were registered.\n            </summary>\n            <param name=\"fileExtension\">File extension to query importer support for.</param>\n            <returns>Importer description or null if it does not exist.</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.IsImportFormatSupported(System.String)\">\n            <summary>\n            Checks if the format extension (e.g. \".dae\" or \".obj\") is supported for import.\n            </summary>\n            <param name=\"format\">Model format</param>\n            <returns>True if the format is supported, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.IsExportFormatSupported(System.String)\">\n            <summary>\n            Checks if the format extension (e.g. \".dae\" or \".obj\") is supported for export.\n            </summary>\n            <param name=\"format\">Model format</param>\n            <returns>True if the format is supported, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.SetConfig(Assimp.Configs.PropertyConfig)\">\n            <summary>\n            Sets a configuration property to the context. This is only used during import.\n            </summary>\n            <param name=\"config\">Config to set</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveConfig(System.String)\">\n            <summary>\n            Removes a set configuration property by name.\n            </summary>\n            <param name=\"configName\">Name of the config property</param>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.RemoveConfigs\">\n            <summary>\n            Removes all configuration properties from the context.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.ContainsConfig(System.String)\">\n            <summary>\n            Checks if the context has a config set by the specified name.\n            </summary>\n            <param name=\"configName\">Name of the config property</param>\n            <returns>True if the config is present, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.Dispose\">\n            <summary>\n            Disposes of resources held by the context. These include IO systems still attached.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpContext.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"T:Assimp.AssimpException\">\n            <summary>\n            AssimpNet general exception.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"msg\">The error message.</param>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"paramName\">Name of the param.</param>\n            <param name=\"msg\">The error message.</param>\n        </member>\n        <member name=\"M:Assimp.AssimpException.#ctor(System.String,System.Exception)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Assimp.AssimpException\"/> class.\n            </summary>\n            <param name=\"msg\">The error message</param>\n            <param name=\"innerException\">The inner exception.</param>\n        </member>\n        <member name=\"T:Assimp.Bone\">\n            <summary>\n            Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame\n            hierarchy and by which it can be addressed by animations. In addition it has a number of\n            influences on vertices and a matrix relating the mesh position to the position of the bone at the time of binding.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.Name\">\n            <summary>\n            Gets or sets the name of the bone.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.VertexWeightCount\">\n            <summary>\n            Gets the number of vertex influences the bone contains.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.HasVertexWeights\">\n            <summary>\n            Gets if the bone has vertex weights - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.VertexWeights\">\n            <summary>\n            Gets the influence weights of this bone, by vertex index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Bone.OffsetMatrix\">\n            <summary>\n            Gets or sets the matrix that transforms from bone space to mesh space in bind pose. This matrix describes the\n            position of the mesh in the local space of this bone when the skeleton was bound. Thus it can be used directly to determine a desired vertex\n            position, given the world-space transform of the bone when animated, and the position of the vertex in mesh space.\n            \n            It is sometimes called an inverse-bind matrix or inverse-bind pose matrix.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Bone\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.#ctor(System.String,Assimp.Matrix3x3,Assimp.VertexWeight[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Bone\"/> class.\n            </summary>\n            <param name=\"name\">Name of the bone</param>\n            <param name=\"offsetMatrix\">Bone's offset matrix</param>\n            <param name=\"weights\">Vertex weights</param>\n        </member>\n        <member name=\"P:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#ToNative(System.IntPtr,Assimp.Unmanaged.AiBone@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Bone.Assimp#IMarshalable{Assimp#Bone,Assimp#Unmanaged#AiBone}#FromNative(Assimp.Unmanaged.AiBone@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Bone.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.BoundingBox\">\n            <summary>\n            Represents an axis-aligned bounding box\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BoundingBox.Min\">\n            <summary>\n            Minimum point of the bounding box.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BoundingBox.Max\">\n            <summary>\n            Maximum point of the bounding box.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.#ctor(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new BoundingBox.\n            </summary>\n            <param name=\"min\">Minimum point.</param>\n            <param name=\"max\">Maximum point.</param>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.op_Equality(Assimp.BoundingBox,Assimp.BoundingBox)\">\n            <summary>\n            Tests equality between two Bounding Boxes.\n            </summary>\n            <param name=\"a\">First BoundingBox</param>\n            <param name=\"b\">Second BoundingBox</param>\n            <returns>True if the Bounding Boxes are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.op_Inequality(Assimp.BoundingBox,Assimp.BoundingBox)\">\n            <summary>\n            Tests inequality between two Bounding Boxes.\n            </summary>\n            <param name=\"a\">First BoundingBox</param>\n            <param name=\"b\">Second BoundingBox</param>\n            <returns>True if the Bounding Boxes are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.Equals(Assimp.BoundingBox)\">\n            <summary>\n            Tests equality between this BoundingBox and another BoundingBox.\n            </summary>\n            <param name=\"other\">BoundingBox to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.BoundingBox.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Camera\">\n            <summary>\n            Describes a right-handed camera in the scene. An important aspect is that\n            the camera itself is also part of the scenegraph, meaning any values such\n            as the direction vector are not *absolute*, they can be relative to the coordinate\n            system defined by the node which corresponds to the camera. This allows for camera\n            animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Name\">\n            <summary>\n            Gets or sets the name of the camera. This corresponds to a node in the\n            scenegraph with the same name. This node specifies the position of the\n            camera in the scene hierarchy and can be animated.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Position\">\n            <summary>\n            Gets or sets the position of the camera relative to the coordinate space defined by\n            the corresponding node. THe default value is 0|0|0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Up\">\n            <summary>\n            Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the\n            corresponding node. The 'right' vector of the camera is the cross product of the up\n            and direction vectors. The default value is 0|1|0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Direction\">\n            <summary>\n            Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node.\n            The default value is 0|0|1.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.FieldOfview\">\n            <summary>\n            Gets or sets the half horizontal field of view angle, in radians. The FoV angle is\n            the angle between the center line of the screen and the left or right border. The default\n            value is 1/4PI.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ClipPlaneNear\">\n            <summary>\n            Gets or sets the distance of the near clipping plane from the camera. The value may not\n            be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ClipPlaneFar\">\n            <summary>\n            Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must\n            be further than the near clippling plane. The default value is 1000.0f. The ratio between\n            the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid\n            floating-point inaccuracies which can lead to z-fighting.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.AspectRatio\">\n            <summary>\n            Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical\n            values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file.\n            The default value is zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.ViewMatrix\">\n            <summary>\n            Gets a right-handed view matrix.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Camera.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Camera\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#ToNative(System.IntPtr,Assimp.Unmanaged.AiCamera@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Camera.Assimp#IMarshalable{Assimp#Camera,Assimp#Unmanaged#AiCamera}#FromNative(Assimp.Unmanaged.AiCamera@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Camera.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Color3D\">\n            <summary>\n            Represents a RGB color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color3D.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Color3D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of RGBA (index 0 access R, 1 access G, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color3D.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n        </member>\n        <member name=\"M:Assimp.Color3D.#ctor(System.Single)\">\n            <summary>\n            Constructs a Color3D where each component is\n            set to the same value.\n            </summary>\n            <param name=\"value\">Value to set R, G, B components</param>\n        </member>\n        <member name=\"M:Assimp.Color3D.IsBlack\">\n            <summary>\n            Determines if the color is black, or close to being black.\n            </summary>\n            <returns>True if the color is black/nearly block, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Adds the two colors together.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(Assimp.Color3D,System.Single)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to add to each component</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Addition(System.Single,Assimp.Color3D)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"value\">Value to add to each component</param>\n            <param name=\"color\">Source color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Subtracts the second color from the first color.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(Assimp.Color3D,System.Single)\">\n            <summary>\n            Subtracts the value from each of the color's components.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to subtract from each component</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Subtraction(System.Single,Assimp.Color3D)\">\n            <summary>\n            Subtracts the color's components from the value, returning\n            the result as a new color. Same as <c>new Color4D(value) - color</c>\n            </summary>\n            <param name=\"value\">Value for each component of the first color</param>\n            <param name=\"color\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Multiplies the two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Multiplied color.</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(Assimp.Color3D,System.Single)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"value\">Source color</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Multiply(System.Single,Assimp.Color3D)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Division(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Divides the first color by the second color, component wise.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Division(Assimp.Color3D,System.Single)\">\n            <summary>\n            Divides the color by a divisor value.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Equality(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Tets equality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.op_Inequality(Assimp.Color3D,Assimp.Color3D)\">\n            <summary>\n            Tets inequality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.Equals(Assimp.Color3D)\">\n            <summary>\n            Tests equality between this color and another color\n            </summary>\n            <param name=\"other\">Color to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Color3D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Color4D\">\n            <summary>\n            Represents a Red-Green-Blue-Alpha (RGBA) color.\n            Color values range from 0 to 1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Color4D.A\">\n            <summary>\n            Alpha component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Color4D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of RGBA (index 0 access R, 1 access G, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color4D.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n            <param name=\"a\">Alpha component</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a Color4D. Alpha is set to 1.0.\n            </summary>\n            <param name=\"r\">Red component</param>\n            <param name=\"g\">Green component</param>\n            <param name=\"b\">Blue component</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(System.Single)\">\n            <summary>\n            Constructs a Color4D where each component is\n            set to the same value.\n            </summary>\n            <param name=\"value\">Value to set R, G, B, A components</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(Assimp.Color3D)\">\n            <summary>\n            Constructs a Color4D from a Color3D. Alpha is set to 1.0.\n            </summary>\n            <param name=\"rgb\">RGB values</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.#ctor(Assimp.Color3D,System.Single)\">\n            <summary>\n            Constructs a Color4D from a Color3D and alpha value.\n            </summary>\n            <param name=\"rgb\">RGB values</param>\n            <param name=\"alpha\">Alpha value</param>\n        </member>\n        <member name=\"M:Assimp.Color4D.IsBlack\">\n            <summary>\n            Determines if the color is black, or close to being black.\n            </summary>\n            <returns>True if the color is black/nearly block, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Adds the two colors together.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(Assimp.Color4D,System.Single)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to add to each component</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Addition(System.Single,Assimp.Color4D)\">\n            <summary>\n            Adds the value to each of the components of the color.\n            </summary>\n            <param name=\"value\">Value to add to each component</param>\n            <param name=\"color\">Source color</param>\n            <returns>Added color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Subtracts the second color from the first color.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(Assimp.Color4D,System.Single)\">\n            <summary>\n            Subtracts the value from each of the color's components.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"value\">Value to subtract from each component</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Subtraction(System.Single,Assimp.Color4D)\">\n            <summary>\n            Subtracts the color's components from the value, returning\n            the result as a new color. Same as <c>new Color4D(value) - color</c>\n            </summary>\n            <param name=\"value\">Value for each component of the first color</param>\n            <param name=\"color\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Multiplies the two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Multiplied color.</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(Assimp.Color4D,System.Single)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"value\">Source color</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Multiply(System.Single,Assimp.Color4D)\">\n            <summary>\n            Multiplies the color by a scalar value, component wise.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Division(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Divides the first color by the second color, component wise.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Division(Assimp.Color4D,System.Single)\">\n            <summary>\n            Divides the color by a divisor value.\n            </summary>\n            <param name=\"color\">Source color</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Resulting color</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Equality(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Tets equality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.op_Inequality(Assimp.Color4D,Assimp.Color4D)\">\n            <summary>\n            Tets inequality between two colors.\n            </summary>\n            <param name=\"a\">First color</param>\n            <param name=\"b\">Second color</param>\n            <returns>True if the colors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.Equals(Assimp.Color4D)\">\n            <summary>\n            Tests equality between this color and another color\n            </summary>\n            <param name=\"other\">Color to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Color4D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Configs.PropertyConfig\">\n            <summary>\n            Base property config.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.PropertyConfig.Name\">\n            <summary>\n            Gets the property name.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.#ctor(System.String)\">\n            <summary>\n            Creates a new property config that has no active Assimp property store.\n            </summary>\n            <param name=\"name\">Name of the property.</param>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.ApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"M:Assimp.Configs.PropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IntegerPropertyConfig\">\n            <summary>\n            Describes an integer configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IntegerPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IntegerPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.#ctor(System.String,System.Int32)\">\n            <summary>\n            Constructs a new IntengerPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.#ctor(System.String,System.Int32,System.Int32)\">\n            <summary>\n            constructs a new IntegerPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IntegerPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FloatPropertyConfig\">\n            <summary>\n            Describes a float configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FloatPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FloatPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.#ctor(System.String,System.Single)\">\n            <summary>\n            Constructs a new FloatPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.#ctor(System.String,System.Single,System.Single)\">\n            <summary>\n            Constructs a new FloatPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FloatPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MatrixPropertyConfig\">\n            <summary>\n            Describes a <see cref=\"T:Assimp.Matrix4x4\"/> configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MatrixPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MatrixPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.#ctor(System.String,Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new MatrixPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.#ctor(System.String,Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new MatrixPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MatrixPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.BooleanPropertyConfig\">\n            <summary>\n            Describes a boolean configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.BooleanPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.BooleanPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new BooleanPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.#ctor(System.String,System.Boolean,System.Boolean)\">\n            <summary>\n            Constructs a new BooleanPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.BooleanPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.StringPropertyConfig\">\n            <summary>\n            Describes a string configuration property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.StringPropertyConfig.Value\">\n            <summary>\n            Gets the property value.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.StringPropertyConfig.DefaultValue\">\n            <summary>\n            Gets the default property value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.#ctor(System.String,System.String)\">\n            <summary>\n            Constructs a new StringPropertyConfig.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.#ctor(System.String,System.String,System.String)\">\n            <summary>\n            Constructs a new StringPropertyConfig with a default value.\n            </summary>\n            <param name=\"name\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"defaultValue\">The default property value</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.SetDefaultValue\">\n            <summary>\n            Sets the current value to the default value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"M:Assimp.Configs.StringPropertyConfig.ProcessNames(System.String[])\">\n            <summary>\n            Convience method for constructing a whitespace delimited name list.\n            </summary>\n            <param name=\"names\">Array of names</param>\n            <returns>White-space delimited list as a string</returns>\n        </member>\n        <member name=\"T:Assimp.Configs.MeasureTimeConfig\">\n            <summary>\n            Configuration to enable time measurements. If enabled, each\n            part of the loading process is timed and logged. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeasureTimeConfig.MeasureTimeConfigName\">\n            <summary>\n            Gets the string name used by MeasureTimeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeasureTimeConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MeasureTimeConfig.\n            </summary>\n            <param name=\"measureTime\">True if the loading process should be timed or not.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MultithreadingConfig\">\n            <summary>\n            Configuration to set Assimp's multithreading policy. Possible\n            values are -1 to let Assimp decide, 0 to disable multithreading, or\n            any number larger than zero to force a specific number of threads. This\n            is only a hint and may be ignored by Assimp. Default value is -1.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MultithreadingConfig.MultithreadingConfigName\">\n            <summary>\n            Gets the string name used by MultithreadingConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MultithreadingConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MultithreadingConfig.\n            </summary>\n            <param name=\"value\">A value of -1 will let Assimp decide,\n            a value of zero to disable multithreading, and a value greater than zero\n            to force a specific number of threads.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NoSkeletonMeshesConfig\">\n            <summary>\n            Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid\n            in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing\n            the bones. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NoSkeletonMeshesConfig.NoSkeletonMeshesConfigName\">\n            <summary>\n            Gets the string name used by NoSkeletonMeshConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NoSkeletonMeshesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new NoSkeletonMeshConfig.\n            </summary>\n            <param name=\"disableDummySkeletonMeshes\">True if dummy skeleton mesh generation should be disabled, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TangentSmoothingAngleConfig\">\n            <summary>\n            Configuration to set the maximum angle that may be between two vertex tangents/bitangents\n            when they are smoothed during the step to calculate the tangent basis. The default\n            value is 45 degrees.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TangentSmoothingAngleConfig.TangentSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by TangentSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TangentSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new TangentSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle, in degrees.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NormalSmoothingAngleConfig\">\n            <summary>\n            Configuration to set the maximum angle between two face normals at a vertex when\n            they are smoothed during the step to calculate smooth normals. This is frequently\n            called the \"crease angle\". The maximum and default value is 175 degrees.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NormalSmoothingAngleConfig.NormalSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by NormalSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NormalSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new NormalSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle, in degrees.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MDLColorMapConfig\">\n            <summary>\n            Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5)\n            files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains\n            RGB triplets for each of the 256 palette entries. If the file is not found, a\n            default palette (from Quake 1) is used. The default value is \"colormap.lmp\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MDLColorMapConfig.MDLColorMapConfigName\">\n            <summary>\n            Gets the string name used by MDLColorMapConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MDLColorMapConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MDLColorMapConfig.\n            </summary>\n            <param name=\"fileName\">Colormap filename</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MaterialExcludeListConfig\">\n            <summary>\n            Configuration for the the <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/> step\n            to determine what materials to keep. If a material matches one of these names it will not\n            be modified or removed by the post processing step. Default is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MaterialExcludeListConfig.MaterialExcludeListConfigName\">\n            <summary>\n            Gets the string name used by MaterialExcludeListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MaterialExcludeListConfig.#ctor(System.String[])\">\n            <summary>\n            Constructs a new MaterialExcludeListConfig. Material names containing whitespace\n            <c>must</c> be enclosed in single quotation marks.\n            </summary>\n            <param name=\"materialNames\">List of material names that will not be modified or replaced by the remove redundant materials post process step.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.KeepSceneHierarchyConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed\n            where meshes with the same materials are not joined. This option can be useful\n            if you have a scene hierarchy that contains important additional information\n            which you intend to parse. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.KeepSceneHierarchyConfig.KeepSceneHierarchyConfigName\">\n            <summary>\n            Gets the string name used by KeepSceneHierarchyConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.KeepSceneHierarchyConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new KeepHierarchyConfig. \n            </summary>\n            <param name=\"keepHierarchy\">True to keep the hierarchy, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NormalizeVertexComponentsConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to normalize all vertex components into the -1...1 range. The default value is\n            false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NormalizeVertexComponentsConfig.NormalizeVertexComponentsConfigName\">\n            <summary>\n            Gets the string name used by NormalizeVertexComponentsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NormalizeVertexComponentsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new NormalizeVertexComponentsConfig.\n            </summary>\n            <param name=\"normalizeVertexComponents\">True if the post process step should normalize vertex components, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveDegeneratePrimitivesConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step to\n            remove degenerted primitives from the import immediately. The default value is false,\n            where degenerated triangles are converted to lines, and degenerated lines to points.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveDegeneratePrimitivesConfig.RemoveDegeneratePrimitivesConfigName\">\n            <summary>\n            Gets the string name used by RemoveDegeneratePrimitivesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveDegeneratePrimitivesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveDegeneratePrimitivesConfig.\n            </summary>\n            <param name=\"removeDegenerates\">True if the post process step should remove degenerate primitives, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step. If true, the area of the triangles are checked\n            to see if they are greater than 1e-6. If so, the triangle is removed if <see cref=\"T:Assimp.Configs.RemoveDegeneratePrimitivesConfig\"/> is set to true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig.RemoveDegeneratePrimitivesCheckAreaConfigName\">\n            <summary>\n            Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig.\n            </summary>\n            <param name=\"checkArea\">True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.NodeExcludeListConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/> step\n            to preserve nodes matching a name in the given list. Nodes that match the names in the list\n            will not be modified or removed. Identifiers containing whitespaces\n            <c>must</c> be enclosed in single quotation marks. The default value is an\n            empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.NodeExcludeListConfig.NodeExcludeListConfigName\">\n            <summary>\n            Gets the string name used by NodeExcludeListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.NodeExcludeListConfig.#ctor(System.String[])\">\n            <summary>\n            Constructs a new NodeExcludeListConfig.\n            </summary>\n            <param name=\"nodeNames\">List of node names</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MeshTriangleLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step \n            that specifies the maximum number of triangles a mesh can contain. The\n            default value is MeshTriangleLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshTriangleLimitConfig.MeshTriangleLimitConfigName\">\n            <summary>\n            Gets the string name used by MeshTriangleLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshTriangleLimitConfig.MeshTriangleLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeshTriangleLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MeshTriangleLimitConfig.\n            </summary>\n            <param name=\"maxTriangleLimit\">Max number of triangles a mesh can contain.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MeshVertexLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step\n            that specifies the maximum number of vertices a mesh can contain. The\n            default value is MeshVertexLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshVertexLimitConfig.MeshVertexLimitConfigName\">\n            <summary>\n            Gets the string name used by MeshVertexLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MeshVertexLimitConfig.MeshVertexLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_VERTICES\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MeshVertexLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MeshVertexLimitConfig.\n            </summary>\n            <param name=\"maxVertexLimit\">Max number of vertices a mesh can contain.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.VertexBoneWeightLimitConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/> step\n            that specifies the maximum number of bone weights per vertex. The default\n            value is VertexBoneWeightLimitConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexBoneWeightLimitConfig.VertexBoneWeightLimitConfigName\">\n            <summary>\n            gets the string name used by VertexBoneWeightLimitConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexBoneWeightLimitConfig.VertexBoneWeightLimitConfigDefaultValue\">\n            <summary>\n            Gets the defined default limit value, this corresponds to the\n            <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_LBW_MAX_WEIGHTS\"/> constant.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.VertexBoneWeightLimitConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new VertexBoneWeightLimitConfig.\n            </summary>\n            <param name=\"maxBoneWeights\">Max number of bone weights per vertex.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.VertexCacheSizeConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\"/> step\n            that specifies the size of the post-transform vertex cache. The size is\n            given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexCacheSizeConfig.VertexCacheSizeConfigName\">\n            <summary>\n            Gets the string name used by VertexCacheConfig.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.VertexCacheSizeConfig.VertexCacheSizeConfigDefaultValue\">\n            <summary>\n            Gets the defined default vertex cache size, this corresponds to \n            the <see cref=\"F:Assimp.Unmanaged.AiDefines.PP_ICL_PTCACHE_SIZE\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.VertexCacheSizeConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new VertexCacheSizeConfig.\n            </summary>\n            <param name=\"vertexCacheSize\">Size of the post-transform vertex cache, in number of vertices.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveComponentConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.RemoveComponent\"/> step that\n            specifies which parts of the data structure is to be removed. If no valid mesh\n            remains after the step, the import fails. The default value i <see cref=\"F:Assimp.ExcludeComponent.None\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveComponentConfig.RemoveComponentConfigName\">\n            <summary>\n            Gets the string name used by RemoveComponentConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveComponentConfig.#ctor(Assimp.ExcludeComponent)\">\n            <summary>\n            Constructs a new RemoveComponentConfig.\n            </summary>\n            <param name=\"componentsToExclude\">Bit-wise combination of components to exclude.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SortByPrimitiveTypeConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step that\n            specifies which primitive types are to be removed by the step. Specifying all\n            primitive types is illegal. The default value is zero specifying none.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SortByPrimitiveTypeConfig.SortByPrimitiveTypeConfigName\">\n            <summary>\n            Gets the string name used by SortByPrimitiveTypeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SortByPrimitiveTypeConfig.#ctor(Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new SortByPrimitiveTypeConfig.\n            </summary>\n            <param name=\"typesToRemove\">Bit-wise combination of primitive types to remove</param>\n        </member>\n        <member name=\"T:Assimp.Configs.AnimationAccuracyConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step that\n            specifies the floating point accuracy for animation values, specifically\n            the episilon during comparisons. The default value is 0.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.AnimationAccuracyConfig.AnimationAccuracyConfigName\">\n            <summary>\n            Gets the string name used by AnimationAccuracyConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.AnimationAccuracyConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new AnimationAccuracyConfig.\n            </summary>\n            <param name=\"episilon\">Episilon for animation value comparisons.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IgnoreTextureCoordinatesConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step. Set to true to\n            ignore texture coordinates. This may be useful if you have to assign different kinds of textures,\n            like seasonally variable ones - one for summer and one for winter. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IgnoreTextureCoordinatesConfig.IgnoreTextureCoordinatesConfigName\">\n            <summary>\n            Gets the string name used by IgnoreTextureCoordinatesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IgnoreTextureCoordinatesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IgnoreTextureCoordinatesConfig.\n            </summary>\n            <param name=\"ignoreTexCoords\">True if texture coordinates should be ignored, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TransformUVConfig\">\n            <summary>\n            Configuration for the <see cref=\"F:Assimp.PostProcessSteps.TransformUVCoords\"/> step that\n            specifies which UV transformations are to be evaluated. The default value\n            is for all combinations (scaling, rotation, translation).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TransformUVConfig.TransformUVConfigName\">\n            <summary>\n            Gets the string name used by TransformUVConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TransformUVConfig.#ctor(Assimp.UVTransformFlags)\">\n            <summary>\n            Constructs a new TransformUVConfig.\n            </summary>\n            <param name=\"transformFlags\">Bit-wise combination specifying which UV transforms that should be evaluated.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FavorSpeedConfig\">\n            <summary>\n            Configuration that is a hint to Assimp to favor speed against import quality. Enabling this\n            option may result in faster loading, or it may not. It is just a hint to loaders\n            and post-process steps to use faster code paths if possible. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FavorSpeedConfig.FavorSpeedConfigName\">\n            <summary>\n            Gets the string name used by FavorSpeedConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FavorSpeedConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FavorSpeedConfig.\n            </summary>\n            <param name=\"favorSpeed\">True if Assimp should favor speed at the expense of quality, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MaxBoneCountConfig\">\n            <summary>\n            Configures the maximum bone count per mesh for the <see cref=\"F:Assimp.PostProcessSteps.SplitByBoneCount\"/> step. Meshes are\n            split until the maximum number of bones is reached.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MaxBoneCountConfig.MaxBoneCountConfigName\">\n            <summary>\n            Gets the string name used by MaxBoneCountConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MaxBoneCountConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MaxBoneCountConfig.\n            </summary>\n            <param name=\"maxBones\">The maximum bone count.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TangentTextureChannelIndexConfig\">\n            <summary>\n            Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TangentTextureChannelIndexConfig.TangentTextureChannelIndexConfigName\">\n            <summary>\n            Gets the string name used by TangentTextureChannelIndexConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TangentTextureChannelIndexConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new TangentTextureChannelIndexConfig.\n            </summary>\n            <param name=\"textureChannelIndex\">The zero-based texture channel index.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.DeboneThresholdConfig\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.Debone\"/> threshold that is used to determine what bones are removed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.DeboneThresholdConfig.DeboneThresholdConfigName\">\n            <summary>\n            Gets the string name used by DeboneThresholdConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.DeboneThresholdConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new DeboneThresholdConfig.\n            </summary>\n            <param name=\"threshold\">The debone threshold.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.DeboneAllOrNoneConfig\">\n            <summary>\n            Configuration that requires all bones to qualify for deboning before any are removed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.DeboneAllOrNoneConfig.DeboneAllOrNoneConfigName\">\n            <summary>\n            Gets the string name used by DeboneAllOrNoneConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.DeboneAllOrNoneConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new DeboneAllOrNoneConfig.\n            </summary>\n            <param name=\"allOrNone\">True if all are required, false if none need to qualify.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RootTransformationConfig\">\n            <summary>\n            Configuration for <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> that sets a user defined matrix as the scene root node transformation before\n            transforming vertices. Default value is the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RootTransformationConfig.RootTransformationConfigName\">\n            <summary>\n            Gets the string name used by RootTransformationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RootTransformationConfig.#ctor(Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new RootTransformationConfig.\n            </summary>\n            <param name=\"rootTransform\">Root transformation matrix to be set to the root scene node during the pretransform post process step.</param>\n        </member>\n        <member name=\"M:Assimp.Configs.RootTransformationConfig.OnApplyValue(System.IntPtr)\">\n            <summary>\n            Applies the property value to the given Assimp property store.\n            </summary>\n            <param name=\"propStore\">Assimp property store</param>\n        </member>\n        <member name=\"T:Assimp.Configs.GlobalScaleConfig\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.GlobalScale\"/> step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model,\n            which this processing step can utilize. Default is 1.0.\n            </summary>\n            <seealso cref=\"T:Assimp.Configs.FloatPropertyConfig\" />\n        </member>\n        <member name=\"P:Assimp.Configs.GlobalScaleConfig.GlobalScaleConfigName\">\n            <summary>\n            Gets the string name used by GlobalScaleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.GlobalScaleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new GlobalScaleConfig.\n            </summary>\n            <param name=\"globalScale\">Value to scale the entire scene by.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.AppScaleConfig\">\n            <summary>\n            Applies an application-specific scaling to the <see cref=\"T:Assimp.Configs.GlobalScaleConfig\"/> to allow for backwards compatibility. Default is 1.0.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.AppScaleConfig.AppScaleConfigName\">\n            <summary>\n            Gets the string name used by AppScaleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.AppScaleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new AppScaleConfig.\n            </summary>\n            <param name=\"appScale\">Value to scale the global scale by.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.GlobalKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the \"global\" keyframe that will be imported. There are other configs\n            for specific importers that will override the global setting.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.GlobalKeyFrameImportConfig.GlobalKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by GlobalKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.GlobalKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new GlobalKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3KeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MD3 format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3KeyFrameImportConfig.MD3KeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MD3KeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3KeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MD3KeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD2KeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MD2 format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD2KeyFrameImportConfig.MD2KeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MD2KeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD2KeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MD2KeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MDLKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the MDL format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MDLKeyFrameImportConfig.MDLKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by MDLKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MDLKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new MDLKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SMDKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the SMD format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SMDKeyFrameImportConfig.SMDKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by SMDKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SMDKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new SMDKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.UnrealKeyFrameImportConfig\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only\n            bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the\n            first frame. This config sets the global override for the Unreal format.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.UnrealKeyFrameImportConfig.UnrealKeyFrameImportConfigName\">\n            <summary>\n            Gets the string name used by UnrealKeyFrameImportConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.UnrealKeyFrameImportConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new UnrealKeyFrameImportConfig.\n            </summary>\n            <param name=\"keyFrame\">Keyframe index</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ACSeparateBackfaceCullConfig\">\n            <summary>\n            Configures the AC loader to collect all surfaces which have the \"Backface cull\" flag set in separate\n            meshes. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ACSeparateBackfaceCullConfig.ACSeparateBackfaceCullConfigName\">\n            <summary>\n            Gets the string name used by ACSeparateBackfaceCullConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ACSeparateBackfaceCullConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ACSeparateBackfaceCullConfig.\n            </summary>\n            <param name=\"separateBackfaces\">True if all surfaces that have the \"backface cull\" flag set should be collected in separate meshes, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ACEvaluateSubdivisionConfig\">\n            <summary>\n            Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence\n            of the 'subdiv' attribute in the file). By default, Assimp performs\n            the subdivision using the standard Catmull-Clark algorithm. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ACEvaluateSubdivisionConfig.ACEvaluateSubdivisionConfigName\">\n            <summary>\n            Gets the string name used by ACEvaluateSubdivisionConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ACEvaluateSubdivisionConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ACEvaluateSubdivisionConfig.\n            </summary>\n            <param name=\"evaluateSubdivision\">True if the AC loader should evaluate subdivisions, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.UnrealHandleFlagsConfig\">\n            <summary>\n            Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided).\n            The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.UnrealHandleFlagsConfig.UnrealHandleFlagsConfigName\">\n            <summary>\n            Gets the string name used by UnrealHandleFlagsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.UnrealHandleFlagsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new UnrealHandleFlagsConfig.\n            </summary>\n            <param name=\"handleFlags\">True if the unreal loader should separate faces with different surface flags, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.TerragenComputeTexCoordsConfig\">\n            <summary>\n            Configures the terragen import plugin to compute UV's for terrains, if\n            they are not given. Furthermore, a default texture is assigned. The default value is false.\n            <para>UV coordinates for terrains are so simple to compute that you'll usually \n            want to compute them on your own, if you need them. This option is intended for model viewers which\n            want to offer an easy way to apply textures to terrains.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.TerragenComputeTexCoordsConfig.TerragenComputeTexCoordsConfigName\">\n            <summary>\n            Gets the string name used by TerragenComputeTexCoordsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.TerragenComputeTexCoordsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new TerragenComputeTexCoordsConfig.\n            </summary>\n            <param name=\"computeTexCoords\">True if terran UV coordinates should be computed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ASEReconstructNormalsConfig\">\n            <summary>\n            Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups\n            loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ASEReconstructNormalsConfig.ASEReconstructNormalsConfigName\">\n            <summary>\n            Gets the string name used by ASEReconstructNormalsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ASEReconstructNormalsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ASEReconstructNormalsConfig.\n            </summary>\n            <param name=\"reconstructNormals\">True if normals should be re-computed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3HandleMultiPartConfig\">\n            <summary>\n            Configures the M3D loader to detect and process multi-part Quake player models. These models\n            usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is\n            set to true, Assimp will try to load and combine all three files if one of them is loaded. The\n            default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3HandleMultiPartConfig.MD3HandleMultiPartConfigName\">\n            <summary>\n            Gets the string name used by MD3HandleMultiPartConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3HandleMultiPartConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MD3HandleMultiPartConfig.\n            </summary>\n            <param name=\"handleMultiParts\">True if the split files should be loaded and combined, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3SkinNameConfig\">\n            <summary>\n            Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks\n            whether a file named \"md3_file_name\"_\"skin_name\".skin exists. These files are used by\n            Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue'\n            are typical skin names. The default string value is \"default\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3SkinNameConfig.MD3SkinNameConfigName\">\n            <summary>\n            Gets the string name used by MD3SkinNameConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3SkinNameConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MD3SkinNameConfig.\n            </summary>\n            <param name=\"skinName\">The skin name.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD3ShaderSourceConfig\">\n            <summary>\n            Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or\n            relative to where all MD3 shaders reside. the default string value is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD3ShaderSourceConfig.MD3ShaderSourceConfigName\">\n            <summary>\n            Gets the string name used by MD3ShaderSourceConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD3ShaderSourceConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new MD3ShaderSourceConfig.\n            </summary>\n            <param name=\"shaderFile\">The shader file.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWOImportOneLayerConfig\">\n            <summary>\n            Configures the LWO loader to load just one layer from the model.\n            <para>LWO files consist of layers and in some cases it could be useful to load only one of them.\n            This property can be either a string - which specifies the name of the layer - or an integer - the index\n            of the layer. If the property is not set then the whole LWO model is loaded. Loading fails\n            if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty</para>\n            The default value is false (all layers are loaded).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWOImportOneLayerConfig.LWOImportOneLayerConfigName\">\n            <summary>\n            Gets the string name used by LWOImportOneLayerConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWOImportOneLayerConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new LWOImportOneLayerConfig.\n            </summary>\n            <param name=\"importOneLayerOnly\">True if only one layer should be imported, false if all layers should be imported.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.MD5NoAnimationAutoLoadConfig\">\n            <summary>\n            Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically.\n            The default value is false.\n            <para>The default strategy is to look for a file with the same name but with the MD5ANIm extension\n            in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration\n            option can be used to disable this behavior.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.MD5NoAnimationAutoLoadConfig.MD5NoAnimationAutoLoadConfigName\">\n            <summary>\n            Gets the string name used by MD5NoAnimationAutoLoadConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.MD5NoAnimationAutoLoadConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new MD5NoAnimationAutoLoadConfig.\n            </summary>\n            <param name=\"noAutoLoadAnim\">True if animations should not be automatically loaded, false if they should be.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWSAnimationStartConfig\">\n            <summary>\n            Defines the beginning of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's. The default value is the one taken from the file.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the start time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation start from the input LWS\n            file ('FirstFrame' line)</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWSAnimationStartConfig.LWSAnimationStartConfigName\">\n            <summary>\n            Gets the string name used by LWSAnimationStartConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWSAnimationStartConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new LWSAnimationStartConfig.\n            </summary>\n            <param name=\"animStart\">Beginning of the time range</param>\n        </member>\n        <member name=\"T:Assimp.Configs.LWSAnimationEndConfig\">\n            <summary>\n            Defines the ending of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's. The default value is the one taken from the file\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the end time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation end from the input LWS\n            file.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.LWSAnimationEndConfig.LWSAnimationEndConfigName\">\n            <summary>\n            Gets the string name used by LWSAnimationEndConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.LWSAnimationEndConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new LWSAnimationEndConfig.\n            </summary>\n            <param name=\"animEnd\">Ending of the time range</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IRRAnimationFrameRateConfig\">\n            <summary>\n            Defines the output frame rate of the IRR loader.\n            <para>IRR animations are difficult to convert for Assimp and there will always be\n            a loss of quality. This setting defines how many keys per second are returned by the converter.</para>\n            The default value is 100 frames per second.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IRRAnimationFrameRateConfig.IRRAnimationFrameRateConfigName\">\n            <summary>\n            Gets the string name used by IRRAnimationFrameRateConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IRRAnimationFrameRateConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new IRRAnimationFramerateConfig.\n            </summary>\n            <param name=\"frameRate\">Number of frames per second to output.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.OgreMaterialFileConfig\">\n            <summary>\n            The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp\n            where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material,\n            and lastly the material name defined by this config property. The default value is \"Scene.Material\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.OgreMaterialFileConfig.OgreMaterialFileConfigName\">\n            <summary>\n            Gets the string name used by OgreMaterialFileConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.OgreMaterialFileConfig.#ctor(System.String)\">\n            <summary>\n            Constructs a new OgreMaterialFileConfig.\n            </summary>\n            <param name=\"materialFileName\">Material file name to load.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.OgreTextureTypeFromFilenameConfig\">\n            <summary>\n            The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified\n            in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: \n            <list type=\"bullet\">\n            <item><description>Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap</description></item>\n            <item><description>Specular Maps: _s, _spec, _specular, _specularmap</description></item>\n            <item><description>Light Maps: _l, _light, _lightmap, _occ, _occlusion</description></item>\n            <item><description>Displacement Maps: _dis, _displacement</description></item>\n            </list>\n            The matching is case insensitive. Postfix is taken between the last \"_\" and last \".\". The default behavior is to detect type from lower cased\n            texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then,\n            <see cref=\"F:Assimp.TextureType.Diffuse\"/> is used. The default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.OgreTextureTypeFromFilenameConfig.OgreTextureTypeFromFilenameConfigName\">\n            <summary>\n            Gets the string name used by OgreTextureTypeFromFilenameConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.OgreTextureTypeFromFilenameConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new OgreTextureTypeFromFilenameConfig.\n            </summary>\n            <param name=\"fileNameDefinesTextureUsage\">True if the filename defines texture usage, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCSkipSpaceRepresentationsConfig\">\n            <summary>\n            Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCSkipSpaceRepresentationsConfig.IFCSkipSpaceRepresentationsConfigName\">\n            <summary>\n            Gets the string name used by IFCSkipSpaceRepresentationsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCSkipSpaceRepresentationsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IFCSkipSpaceRepresentationsConfig.\n            </summary>\n            <param name=\"skipSpaceRepresentations\">True if the IfcSpace elements are skipped, false if otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCUseCustomTriangulationConfig\">\n            <summary>\n            Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false,\n            walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected\n            with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known\n            issues with these kind of polygons.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCUseCustomTriangulationConfig.IFCUseCustomTriangulationConfigName\">\n            <summary>\n            Gets the string name used by IFCUseCustomTriangulationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCUseCustomTriangulationConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IFCUseCustomTriangulationConfig.\n            </summary>\n            <param name=\"useCustomTriangulation\">True if the loader should use its own triangulation routine for walls/floors, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCSmoothingAngleConfig\">\n            <summary>\n            Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120]\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCSmoothingAngleConfig.IFCSmoothingAngleConfigName\">\n            <summary>\n            Gets the string name used by IFCSmoothingAngleConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCSmoothingAngleConfig.#ctor(System.Single)\">\n            <summary>\n            Constructs a new IFCSmoothingAngleConfig.\n            </summary>\n            <param name=\"angle\">Smoothing angle when tessellating curves. Needs to be in the range of [5, 120].</param>\n        </member>\n        <member name=\"T:Assimp.Configs.IFCCylindricalTessellationConfig\">\n            <summary>\n            Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180].\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.IFCCylindricalTessellationConfig.IFCCylindricalTessellationConfigName\">\n            <summary>\n            Gets the string name used by IFCCylindricalTessellationConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.IFCCylindricalTessellationConfig.#ctor(System.Int32)\">\n            <summary>\n            Constructs a new IFCCylindricalTessellationConfig.\n            </summary>\n            <param name=\"tessellation\">Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180].</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ColladaIgnoreUpDirectionConfig\">\n            <summary>\n            Specifies whether the collada loader will ignore the up direction. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ColladaIgnoreUpDirectionConfig.ColladaIgnoreUpDirectionConfigName\">\n            <summary>\n            Gets the string name used by ColladaIgnoreUpDirectionConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ColladaIgnoreUpDirectionConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ColladaIgnoreUpDirectionConfig.\n            </summary>\n            <param name=\"ignoreUpDirection\">True if the loader should ignore the up direction, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ColladaUseColladaNamesConfig\">\n            <summary>\n            Specifies whether the Collada loader should use Collada names as node names.\n            If this property is set to true, the Collada names will be used as the node name. The behavior is to use the id tag (resp. sid tag, if no id tag is present) instead.\n            Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ColladaUseColladaNamesConfig.ColladaUseColladaNamesConfigName\">\n            <summary>\n            Gets the string name used by ColladaUseColladaNamesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ColladaUseColladaNamesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ColladaUseColladaNamesConfig.\n            </summary>\n            <param name=\"useColladaNames\">True if collada names should be used as node names, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAllGeometryLayersConfig\">\n            <summary>\n            Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAllGeometryLayersConfig.FBXImportAllGeometryLayersConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAllGeometryLayersConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAllGeometryLayersConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAllGeometryLayersConfig.\n            </summary>\n            <param name=\"importAllGeometryLayers\">True if all geometry layers should be merged, false otherwise to take only the first layer.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAllMaterialsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials,\n            if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAllMaterialsConfig.FBXImportAllMaterialsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAllMaterialsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAllMaterialsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAllMaterialsConfig.\n            </summary>\n            <param name=\"importAllMaterials\">True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials).</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportMaterialsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import materials. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportMaterialsConfig.FBXImportMaterialsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportMaterialsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportMaterialsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportMaterialsConfig.\n            </summary>\n            <param name=\"importMaterials\">True if the FBX importer should import materials, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportEmbeddedTexturesConfig\">\n            <summary>\n            Specifies whether the FBX importer will import embedded textures. Default is true.\n            </summary>\n            <seealso cref=\"T:Assimp.Configs.BooleanPropertyConfig\" />\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportEmbeddedTexturesConfig.FBXImportEmbeddedTexturesConfigName\">\n            <summary>\n            Gets the string name used by FBXImportEmbeddedTexturesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportEmbeddedTexturesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportEmbeddedTexturesConfig.\n            </summary>\n            <param name=\"importTextures\">True if the FBX importer should import embedded textures, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportEmbeddedTexturesLegacyNamingConfig\">\n            <summary>\n            Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportEmbeddedTexturesLegacyNamingConfig.FBXImportEmbeddedTexturesLegacyNamingConfigName\">\n            <summary>\n            Gets the string name used by FBXImportSearchEmbeddedTexturesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportEmbeddedTexturesLegacyNamingConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportSearchEmbeddedTexturesConfig.\n            </summary>\n            <param name=\"searchEmbeddedTextures\">True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportCamerasConfig\">\n            <summary>\n            Specifies whether the FBX importer will import cameras. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportCamerasConfig.FBXImportCamerasConfigName\">\n            <summary>\n            Gets the string name used by FBXImportCamerasConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportCamerasConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportCamerasConfig.\n            </summary>\n            <param name=\"importCameras\">True if the FBX importer should import cameras, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportLightsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import lights. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportLightsConfig.FBXImportLightsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportLightsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportLightsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportLightsConfig.\n            </summary>\n            <param name=\"importLights\">True if the FBX importer should import lights, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXImportAnimationsConfig\">\n            <summary>\n            Specifies whether the FBX importer will import animations. Default is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXImportAnimationsConfig.FBXImportAnimationsConfigName\">\n            <summary>\n            Gets the string name used by FBXImportAnimationsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXImportAnimationsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXImportAnimationsConfig.\n            </summary>\n            <param name=\"importAnimations\">True if the FBX importer should import animations, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXStrictModeConfig\">\n            <summary>\n            Specifies whether the FBX importer will act in strict mode in which only the FBX 2013\n            format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this\n            format is best supported and well-tested. Default is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXStrictModeConfig.FBXStrictModeConfigName\">\n            <summary>\n            Gets the string name used by FBXStrictModeConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXStrictModeConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXStrictModeConfig.\n            </summary>\n            <param name=\"useStrictMode\">True if FBX strict mode should be used, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXPreservePivotsConfig\">\n            <summary>\n            Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots\n            and offsets will be evaluated whenever possible. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXPreservePivotsConfig.FBXPreservePivotsConfigName\">\n            <summary>\n            Gets the string name used by FBXPreservePivotsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXPreservePivotsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXPreservePivotsConfig.\n            </summary>\n            <param name=\"preservePivots\">True if pivots should be preserved, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig\">\n            <summary>\n            Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose \n            transformation over their entire defined range. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig.FBXOptimizeEmptyAnimationCurvesConfigName\">\n            <summary>\n            Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXOptimizeEmptyAnimationCurvesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXOptimizeEmptyAnimationCurvesConfig.\n            </summary>\n            <param name=\"optimizeEmptyAnimations\">True if empty animation curves should be dropped, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.FBXConvertToMetersConfig\">\n            <summary>\n            Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m). Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.FBXConvertToMetersConfig.FBXConvertToMetersConfigName\">\n            <summary>\n            Gets the string name used by FBXConvertToMetersConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.FBXConvertToMetersConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new FBXConvertToMetersConfig.\n            </summary>\n            <param name=\"convertToMeters\">True if the importer converts the unit from cm to m, false if do not do a conversion.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.SmdLoadAnimationListConfig\">\n            <summary>\n            Specifies whether the importer will load multiple animations. Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.SmdLoadAnimationListConfig.SmdLoadAnimationListConfigName\">\n            <summary>\n            Gets the string name used by SmdLoadAnimationListConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.SmdLoadAnimationListConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new SmdLoadAnimationListConfig.\n            </summary>\n            <param name=\"loadAnimList\">True if the importer should load multiple animations, false if only one animation should be loaded.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.RemoveEmptyBonesConfig\">\n            <summary>\n            Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g.\n            attachment points). Default value is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.RemoveEmptyBonesConfig.RemoveEmptyBonesConfigName\">\n            <summary>\n            Gets the string name used by RemoveEmptyBonesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.RemoveEmptyBonesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new RemoveEmptyBonesConfig.\n            </summary>\n            <param name=\"removeEmptyBones\">True if the importer should remove empty bones, false if they should be kept.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.XFileUseDoublesConfig\">\n            <summary>\n            Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.XFileUseDoublesConfig.XFileUseDoublesConfigName\">\n            <summary>\n            Gets the string name used by XFileUseDoublesConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.XFileUseDoublesConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new XFileUseDoublesConfig.\n            </summary>\n            <param name=\"useDoubles\">True if the x file uses 64-bit double values rather than 32-bit float values.</param>\n        </member>\n        <member name=\"T:Assimp.Configs.ExportPointCloudsConfig\">\n            <summary>\n            Specifies if the export process should disable a validation step that would remove data that does not contain faces. This will\n            enable point cloud data to be exported, since the 3D data is a collection of vertices without face data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Configs.ExportPointCloudsConfig.ExportPointCloudsConfigName\">\n            <summary>\n            Gets the string name used by ExportPointCloudsConfig.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Configs.ExportPointCloudsConfig.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new ExportPointCloudConfig.\n            </summary>\n            <param name=\"exportPointCloud\">True if the exporter should treat vertices not grouped in faces as point clouds, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.EmbeddedTexture\">\n            <summary>\n            Represents an embedded texture. Some file formats directly embed texture assets.\n            Embedded textures may be uncompressed, where the data is given in an uncompressed format.\n            Or it may be compressed in a format like png or jpg. In the latter case, the raw\n            file bytes are given so the application must utilize an image decoder (e.g. DevIL) to\n            get access to the actual color data. This object represents both types, so some properties may or may not be valid depending\n            if it is compressed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Filename\">\n            <summary>\n            Gets or sets the texture's original filename.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.IsCompressed\">\n            <summary>\n            Gets if the texture is compressed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Width\">\n            <summary>\n            Gets the width of the texture in pixels. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Height\">\n            <summary>\n            Gets the height of the texture in pixels. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.HasNonCompressedData\">\n            <summary>\n            Gets if the texture has non-compressed texel data. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.NonCompressedDataSize\">\n            <summary>\n            Gets the size of the non-compressed texel data. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.NonCompressedData\">\n            <summary>\n            Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.HasCompressedData\">\n            <summary>\n            Gets if the embedded texture has compressed data. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedDataSize\">\n            <summary>\n            Gets the size of the compressed data. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedData\">\n            <summary>\n            Gets the raw byte data representing the compressed texture. Only valid for compressed textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.CompressedFormatHint\">\n            <summary>\n            Gets the format hint to determine the type of compressed data. This hint\n            is a three-character lower-case hint like \"dds\", \"jpg\", \"png\".\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. Should use only if\n            reading from a native value.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor(System.String,System.Byte[],System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. This creates a compressed\n            embedded texture.\n            </summary>\n            <param name=\"compressedFormatHint\">The 3 character format hint.</param>\n            <param name=\"compressedData\">The compressed data.</param>\n            <param name=\"originalFileName\">Optional file name for the texture.</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.#ctor(System.Int32,System.Int32,Assimp.Texel[],System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.EmbeddedTexture\"/> class. This creates an uncompressed\n            embedded texture.\n            </summary>\n            <param name=\"width\">Width of the texture</param>\n            <param name=\"height\">Height of the texture</param>\n            <param name=\"uncompressedData\">Color data</param>\n            <param name=\"originalFileName\">Optional file name for the texture.</param>\n            <exception cref=\"T:System.ArgumentException\">Thrown if the data size does not match width * height.</exception>\n        </member>\n        <member name=\"P:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#ToNative(System.IntPtr,Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.Assimp#IMarshalable{Assimp#EmbeddedTexture,Assimp#Unmanaged#AiTexture}#FromNative(Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.EmbeddedTexture.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MetaDataType\">\n            <summary>\n            Enumerates metadata data types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Bool\">\n            <summary>\n            Metadata is a boolean.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Int32\">\n            <summary>\n            Metadata is an integer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.UInt64\">\n            <summary>\n            Metadata is an unsigned 64-bit integer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Float\">\n            <summary>\n            Metadata is a float.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Double\">\n            <summary>\n            Metadata is a double.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.String\">\n            <summary>\n            Metadata is a string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MetaDataType.Vector3D\">\n            <summary>\n            Metadata is a <see cref=\"F:Assimp.MetaDataType.Vector3D\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PostProcessSteps\">\n            <summary>\n            Post processing flag options, specifying a number of steps\n            that can be run on the data to either generate additional vertex\n            data or optimize the imported data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.None\">\n            <summary>\n            No flags enabled.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\">\n            <summary>\n            Calculates the tangents and binormals (bitangents)\n            for the imported meshes.\n            <para>\n            This does nothing if a mesh does not have normals. You might\n            want this post processing step to be executed if you plan\n            to use tangent space calculations such as normal mapping. There is a\n            config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which\n            allows you to specify a maximimum smoothing angle for the algorithm.\n            However, usually you'll want to leave it at the default value.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\">\n            <summary>\n            Identifies and joins identical vertex data sets within all\n            imported meshes.\n            <para>\n            After this step is run each mesh does contain only unique vertices\n            anymore, so a vertex is possibly used by multiple faces. You usually\n            want to use this post processing step. If your application deals with\n            indexed geometry, this step is compulsory or you'll just waste rendering\n            time.</para>\n            <para>If this flag is not specified, no vertices are referenced by more than one\n            face and no index buffer is required for rendering.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.MakeLeftHanded\">\n            <summary>\n            Converts all imported data to a left handed coordinate space.\n            \n            <para>By default the data is returned in a right-handed coordinate space,\n            where +X points to the right, +Z towards the viewer, and +Y upwards.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.Triangulate\">\n            <summary>\n            Triangulates all faces of all meshes.\n            <para>\n            By default the imported mesh data might contain faces with more than \n            three indices. For rendering you'll usually want all faces to\n            be triangles. This post processing step splits up all\n            higher faces to triangles. Line and point primitives are *not*\n            modified. If you want 'triangles only' with no other kinds of primitives,\n            try the following:\n            </para>\n            <list type=\"number\">\n            <item>\n            <description>Specify both <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/> and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>.</description>\n            </item>\n            <item>\n            <description>Ignore all point and line meshes when you process Assimp's output</description>\n            </item>\n            </list>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.RemoveComponent\">\n            <summary>\n            Removes some parts of the data structure (animations, materials,\n            light sources, cameras, textures, vertex components).\n            <para>\n            The components to be removed are specified in a separate configuration\n            option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't\n            need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove\n            unrequired stuff from the pipeline as early as possible results in an increased\n            performance and a better optimized output data structure.\n            </para>\n            <para>\n            This step is also useful if you want to force Assimp to recompute normals\n            or tangents. the corresponding steps don't recompute them if they're already\n            there (loaded from the source asset). By using this step you can make sure\n            they are NOT there.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateNormals\">\n            <summary>\n            Generates normals for all faces of all meshes. It may not be\n            specified together with <see cref=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\"/>.\n            <para>\n            This is ignored if normals are already there at the time where this\n            flag is evaluated. Model importers try to load them from the source file,\n            so they're usually already there. Face normals are shared between all\n            points of a single face, so a single point can have multiple normals,\n            which in other words, forces the library to duplicate vertices in\n            some cases. This makes <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> senseless then.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\">\n            <summary>\n            Generates smooth normals for all vertices of all meshes. It\n            may not be specified together with <see cref=\"F:Assimp.PostProcessSteps.GenerateNormals\"/>.\n            <para>\n            This is ignored if normals are already there at the time where\n            this flag is evaluated. Model importers try to load them from the\n            source file, so they're usually already there.\n            </para>\n            <para>The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE\n            allows you to specify an angle maximum for the normal smoothing algorithm.\n            Normals exceeding this limit are not smoothed, resulting in a 'hard' seam\n            between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual\n            appearance.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\">\n            <summary>\n            Splits large meshes into smaller submeshes.\n            <para>\n            This is useful for realtime rendering where the number\n            of triangles which can be maximally processed in a single draw call is\n            usually limited by the video driver/hardware. The maximum vertex buffer\n            is usually limited, too. Both requirements can be met with this step:\n            you may specify both a triangle and a vertex limit for a single mesh.\n            </para>\n            <para>The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT\n            and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default\n            values are 1,000,000.</para>\n            \n            <para>Warning: This can be a time consuming task.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.PreTransformVertices\">\n            <summary>\n            Removes the node graph and \"bakes\" (pre-transforms) all\n            vertices with the local transformation matrices of their nodes.\n            The output scene does still contain nodes, however, there is only\n            a root node with children, each one referencing only one mesh. \n            Each mesh referencing one material. For rendering, you can simply render\n            all meshes in order, you don't need to pay attention to local transformations\n            and the node hierarchy.\n            \n            <para>Warning: Animations are removed during this step.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.LimitBoneWeights\">\n            <summary>\n            Limits the number of bones simultaneously affecting a single\n            vertex to a maximum value.\n            <para>\n            If any vertex is affected by more than that number of bones,\n            the least important vertex weights are removed and the remaining vertex\n            weights are re-normalized so that the weights still sum up to 1.\n            </para>\n            <para>The default bone weight limit is 4 and uses the\n            AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing\n            step might be of interest for you.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ValidateDataStructure\">\n            <summary>\n            Validates the imported scene data structure.\n            <para>\n            This makes sure that all indices are valid, all animations\n            and bones are linked correctly, all material references are\n            correct, etc.\n            </para>\n            It is recommended to capture Assimp's log output if you use this flag,\n            so you can easily find out what's actually wrong if a file fails the\n            validation. The validator is quite rude and will find *all* inconsistencies\n            in the data structure. There are two types of failures:\n            <list type=\"bullet\">\n            <item>\n            <description>Error: There's something wrong with the imported data. Further\n            postprocessing is not possible and the data is not usable at all. The import\n            fails.</description>\n            </item>\n            <item>\n            <description>Warning: There are some minor issues (e.g. 1000000 animation keyframes\n            with the same time), but further postprocessing and use of the data structure is still\n            safe. Warning details are written to the log file.</description>\n            </item>\n            </list>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\">\n            <summary>\n            Re-orders triangles for better vertex cache locality.\n            \n            <para>This step tries to improve the ACMR (average post-transform vertex cache\n            miss ratio) for all meshes. The implementation runs in O(n) time \n            and is roughly based on the <a href=\"http://www.cs.princeton.edu/gfx/pubs/Sander_2007_%3ETR/tipsy.pdf\">'tipsify' algorithm</a>.</para>\n            \n            <para>If you intend to render huge models in hardware, this step might be of interest for you.\n            The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune\n            the cache optimization.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\">\n            <summary>\n            Searches for redundant/unreferenced materials and removes them.\n            <para>\n            This is especially useful in combination with the  PreTransformVertices\n            and OptimizeMeshes flags. Both join small meshes with equal characteristics, but\n            they can't do their work if two meshes have different materials. Because several\n            material settings are always lost during Assimp's import filders and because many\n            exporters don't check for redundant materials, huge models often have materials which\n            are defined several times with exactly the same settings.\n            </para>\n            <para>Several material settings not contributing to the final appearance of a surface\n            are ignored in all comparisons ... the material name is one of them. So, if you're passing\n            additional information through the content pipeline (probably using *magic* material names),\n            don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST\n            setting.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FixInFacingNormals\">\n            <summary>\n            This step tries to determine which meshes have normal vectors\n            that are facing inwards. \n            <para>\n            The algorithm is simple but effective:\n            </para>\n            <para>The bounding box of all vertices and their normals are compared\n            against the volume of the bounding box of all vertices without their normals.\n            This works well for most objects, problems might occur with planar surfaces. However,\n            the step tries to filter such cases. The step inverts all in-facing normals.\n            Generally, it is recommended to enable this step, although the result is not\n            always correct.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\">\n            <summary>\n            This step splits meshes with more than one primitive type in homogeneous submeshes.\n            <para>\n            This step is executed after triangulation and after it returns, just one\n            bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time\n            rendering where point and line primitives are often ignored or rendered separately.\n            </para>\n            <para>\n            You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need.\n            This can be used to easily exclude lines and points, which are rarely used,\n            from the import.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindDegenerates\">\n            <summary>\n            This step searches all meshes for degenerated primitives and\n            converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical.\n            <para>\n            To have degenerated primitives removed, specify the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> flag\n            try one of the following procedures:\n            </para>\n            <list type=\"numbers\">\n            <item>\n            <description>To support lines and points: Set the\n            AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as\n            soon as they are detected. They won't pass any further pipeline steps.</description>\n            </item>\n            <item>\n            <description>If you don't support lines and points: Specify <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> flag, which\n            will move line and point primitives to separate meshes.  Then set the AI_CONFIG_PP_SBP_REMOVE\n            option to <see cref=\"F:Assimp.PrimitiveType.Point\"/> and <see cref=\"F:Assimp.PrimitiveType.Line\"/> to cause <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step\n            to reject point and line meshes from the scene.</description>\n            </item>\n            </list>\n            <para>\n            This step also removes very small triangles with a surface area smaller than 10^-6. If you rely on having these small triangles, or notice holes\n            in your model, set the property <see cref=\"T:Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig\"/> to false.\n            </para>\n            <para>\n            Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several\n            file formats which do not support lines or points where exporters bypass the format specification and write\n            them as degenerated triangles instead.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindInvalidData\">\n            <summary>\n            This step searches all meshes for invalid data, such as zeroed\n            normal vectors or invalid UV coordinates and removes or fixes them.\n            This is intended to get rid of some common exporter rrors.\n            <para>\n            This is especially useful for normals. If they are invalid,\n            and the step recognizes this, they will be removed and can later\n            be recomputed, e.g. by the GenerateSmoothNormals flag. The step\n            will also remove meshes that are infinitely small and reduce animation\n            tracks consisting of hundreds of redundant keys to a single key. The\n            AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check\n            for duplicate animation tracks.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateUVCoords\">\n            <summary>\n            This step converts non-UV mappings (such as spherical or\n            cylindrical mapping) to proper texture coordinate channels.\n            \n            <para>Most applications will support UV mapping only, so you will\n            probably want to specify this step in every case. Note that Assimp\n            is not always able to match the original mapping implementation of the 3D\n            app which produced a model perfectly. It's always better\n            to let the father app compute the UV channels, at least 3DS max, maya, blender,\n            lightwave, modo, .... are able to achieve this.</para>\n            \n            <para>If this step is not requested, you'll need to process the MATKEY_MAPPING\n            material property in order to display all assets properly.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.TransformUVCoords\">\n            <summary>\n            Applies per-texture UV transformations and bakes them to stand-alone vtexture\n            coordinate channels.\n            \n            <para>UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material\n            key for more information. This step processes all textures with transformed input UV coordinates\n            and generates new (pretransformed) UV channel transformations, so you will probably\n            want to specify this step.</para>\n            \n            <para>UV transformations are usually implemented in realtime apps by\n            transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous)\n            transformation matrix.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FindInstances\">\n            <summary>\n            Searches for duplicated meshes and replaces them with a reference\n            to the first mesh.\n            <para>\n            This is time consuming, so don't use it if you have no time. Its\n            main purpose is to work around the limitation with some\n            file formats that don't support instanced meshes, so exporters\n            duplicate meshes.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.OptimizeMeshes\">\n            <summary>\n            Attempts to reduce the number of meshes (and draw calls). \n            <para>\n            This is recommended to be used together with <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/>\n            and is fully compatible with both <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.OptimizeGraph\">\n            <summary>\n            Optimizes scene hierarchy. Nodes with no animations, bones,\n            lights, or cameras assigned are collapsed and joined.\n            \n            <para>Node names can be lost during this step, you can specify\n            names of nodes that should'nt be touched or modified\n            with AI_CONFIG_PP_OG_EXCLUDE_LIST.</para>\n            \n            <para>Use this flag with caution. Most simple files will be collapsed to a \n            single node, complex hierarchies are usually completely lost. That's not\n            the right choice for editor environments, but probably a very effective\n            optimization if you just want to get the model data, convert it to your\n            own format and render it as fast as possible. </para>\n            \n            <para>This flag is designed to be used with <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/> for best\n            results.</para>\n            \n            <para>Scenes with thousands of extremely small meshes packed\n            in deeply nested nodes exist for almost all file formats.\n            Usage of this and <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/> usually fixes them all and\n            makes them renderable.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FlipUVs\">\n            <summary>\n            Flips all UV coordinates along the y-axis\n            and adjusts material settings/bitangents accordingly.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.FlipWindingOrder\">\n            <summary>\n            Flips face winding order from CCW (default) to CW.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.SplitByBoneCount\">\n            <summary>\n            Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.Debone\">\n            <summary>\n            <para>Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters\n            are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while\n            animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. \n            </para>\n            <para>Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones\n            removed if and only if all bones within the scene qualify for removal.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GlobalScale\">\n            <summary>\n            This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize.\n            Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to setup the global scaling factor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.EmbedTextures\">\n            <summary>\n            A post processting step to embed textures. This will remove external data dependencies for textures. If a texture's file does not exist at the specified path (due, for instance, to\n            an absolute path generate on another system), it will check if a file with the same name exists at the root folder of the imported model, and if so, embeds that.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.ForceGenerateNormals\">\n            <summary>\n            If the step to generate normals is set, it will not run if normals already exist. This flag will force that step to run even if normals are present.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.DropNormals\">\n            <summary>\n            Drops normals for all faces of all meshes. This is ignored if no normals are present. Face normals are shared between all points of a single face,\n            so a single point can have multiple normals, which forces the library to duplicate vertices in some cases. <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> is\n            *senseless* then. This process gives sense back to <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PostProcessSteps.GenerateBoundingBoxes\">\n            <summary>\n            Generate bounding boxes for each mesh.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ExcludeComponent\">\n            <summary>\n            Enumerates components of the scene or mesh data that\n            can be excluded from the import using the post process step\n            RemoveComponent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.None\">\n            <summary>\n            No components to be excluded.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Normals\">\n            <summary>\n            Removes normal vectors\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.TangentBasis\">\n            <summary>\n            Removes tangents/binormals\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Colors\">\n            <summary>\n            Removes all color sets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.TexCoords\">\n            <summary>\n            Removes all texture UV sets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Boneweights\">\n            <summary>\n            Remove all boneweights from all meshes. Scenegraph\n            nodes corresponding to the bones are NOT removed.\n            Use OptimizeGraph step to remove them.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Animations\">\n            <summary>\n            Removes all node animations.  Coressponding scenegraph\n            nodes are NOT removed. Use OptimizeGraph step to \n            remove them.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Textures\">\n            <summary>\n            Removes all embedded textures.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Lights\">\n            <summary>\n            Removes all light sources. The corresponding scenegraph nodes are\n            NOT removed. Use the OptimizeGraph step to do this.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Cameras\">\n            <summary>\n            Removes all cameras. The corresponding scenegraph\n            nodes are NOT removed. Use the OptimizeGraph step\n            to do this.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Meshes\">\n            <summary>\n            Removes all meshes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ExcludeComponent.Materials\">\n            <summary>\n            Removes all materials. One default material will be generated.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PrimitiveType\">\n            <summary>\n            Enumerates geometric primitive types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Point\">\n            <summary>\n            Point primitive. This is just a single vertex\n            in the virtual world. A face has one index for such a primitive.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Line\">\n            <summary>\n            Line primitive. This is  a line defined through a start and an\n            end position. A face contains exactly two indices for such a primitive.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Triangle\">\n            <summary>\n            Triangle primitive, consisting of three indices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PrimitiveType.Polygon\">\n            <summary>\n            A n-Gon that has more than three edges (thus is not a triangle).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.AnimationBehaviour\">\n            <summary>\n            Defines an animation channel behaves outside the defined\n            time range. This corresponds to the prestate and poststates\n            of the animation node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Default\">\n            <summary>\n            The value from the default node transformation is taken.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Constant\">\n            <summary>\n            The nearest key value is used without interpolation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Linear\">\n            <summary>\n            The value of the nearest two keys is linearly extrapolated for the current\n            time value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.AnimationBehaviour.Repeat\">\n            <summary>\n            The animation is repeated. If the animation key goes from n to m\n            and the current time is t, use the value at (t - n ) % (|m-n|).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.MeshMorphingMethod\">\n            <summary>\n            Defines the methods of mesh morphing supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.None\">\n            <summary>\n            No morphing.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.VertexBlend\">\n            <summary>\n            Interpolation between morph targets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.MorphNormalized\">\n            <summary>\n            Normalized morphing between morph targets.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshMorphingMethod.MorphRelative\">\n            <summary>\n            Relative morphing between morph targets.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.LightSourceType\">\n            <summary>\n            Enumerates all supported light sources.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Undefined\">\n            <summary>\n            Unknown light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Directional\">\n            <summary>\n            Directional light source that has a well-defined\n            direction but is infinitely far away, e.g. the sun.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Point\">\n            <summary>\n            Point light source that has a well-defined position in\n            space but is omni-directional, e.g. a light bulb.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Spot\">\n            <summary>\n            Spot light source emits light from a position in space,\n            in a certain direction that is limited by an angle, like\n            a cone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Ambient\">\n            <summary>\n            Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and\n            is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.LightSourceType.Area\">\n            <summary>\n            An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.BlendMode\">\n            <summary>\n            Defines alpha blending flags, how the final\n            color value of a pixel is computed, based on the following equation:\n            <para>\n            sourceColor * sourceBlend + destColor * destBlend\n            </para>\n            <para>\n            Where the destColor is the previous color in the frame buffer\n            and sourceColor is the material color before the\n            transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BlendMode.Default\">\n            <summary>\n            Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.BlendMode.Additive\">\n            <summary>\n            Additive blending: sourcecolor * 1 + destColor * 1.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ShadingMode\">\n            <summary>\n            Defines all shading models supported by the library.\n            <para>\n            The list of shading modes has been taken from Blender. See Blender\n            documentation for more information.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.None\">\n            <summary>\n            No shading mode defined.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Flat\">\n            <summary>\n            Flat shading. Shading is done on a per-face basis and is diffuse only. Also known\n            as 'faceted shading'.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Gouraud\">\n            <summary>\n            Simple Gouraud shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Phong\">\n            <summary>\n            Phong Shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Blinn\">\n            <summary>\n            Phong-Blinn Shading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Toon\">\n            <summary>\n            Toon-shading, also known as a 'comic' shader.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.OrenNayar\">\n            <summary>\n            OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness\n            of the material into account.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Minnaert\">\n            <summary>\n            Minnaert shading model. Extension to standard Lambertian shading, taking the \"darkness\" of\n            the material into account.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.CookTorrance\">\n            <summary>\n            CookTorrance shading model. Special shader for metallic surfaces.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.NoShading\">\n            <summary>\n            No shading at all. Constant light influence of 1.0.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ShadingMode.Fresnel\">\n            <summary>\n            Fresnel shading.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureFlags\">\n            <summary>\n            Defines some mixed flags for a particular texture. This corresponds\n            to the AI_MAT_KEY_TEXFLAGS property.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.Invert\">\n            <summary>\n            The texture's color values have to be inverted (componentwise 1-n).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.UseAlpha\">\n            <summary>\n            Explicit request to the application to process the alpha channel of the texture. This is mutually\n            exclusive with <see cref=\"F:Assimp.TextureFlags.IgnoreAlpha\"/>. These flags are\n            set if the library can say for sure that the alpha channel is used/is not used.\n            If the model format does not define this, iti s left to the application to decide\n            whether the texture alpha channel - if any - is evaluated or not.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureFlags.IgnoreAlpha\">\n            <summary>\n            Explicit request to the application to ignore the alpha channel of the texture. This is mutually\n            exclusive with <see cref=\"F:Assimp.TextureFlags.UseAlpha\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureWrapMode\">\n            <summary>\n            Defines how UV coordinates outside the [0..1] range are handled. Commonly\n            referred to as the 'wrapping mode'\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Wrap\">\n            <summary>\n            A texture coordinate u|v is translated to u % 1| v % 1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Clamp\">\n            <summary>\n            Texture coordinates outside [0...1] are clamped to the nearest valid value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Mirror\">\n            <summary>\n            A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero\n            and 1 - (u % 1) | 1 - (v % 1) otherwise.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureWrapMode.Decal\">\n            <summary>\n            If the texture coordinates for a pixel are outside [0...1] the texture is not\n            applied to that pixel.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureMapping\">\n            <summary>\n            Defines how texture coordinates are generated\n            <para>\n            Real-time applications typically require full UV coordinates. So the use\n            of <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/> step is highly recommended.\n            It generates proper UV channels for non-UV mapped objects, as long as an accurate\n            description of how the mapping should look like is given.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.FromUV\">\n            <summary>\n            Coordinates are taken from the an existing UV channel.\n            <para>\n            The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates\n            are to be taken from since meshes can have more than one UV channel.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Sphere\">\n            <summary>\n            Spherical mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Cylinder\">\n            <summary>\n            Cylinder mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Box\">\n            <summary>\n            Cubic mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Plane\">\n            <summary>\n            Planar mapping\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureMapping.Unknown\">\n            <summary>\n            Unknown mapping that is not recognied.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureOperation\">\n            <summary>\n            Defines how the Nth texture of a specific type is combined\n            with the result of all previous layers.\n            <para>\n            Example (left: key, right: value):\n            <code>\n            DiffColor0     - gray\n            DiffTextureOp0 - TextureOperation.Multiply\n            DiffTexture0   - tex1.png\n            DiffTextureOp0 - TextureOperation.Add\n            DiffTexture1   - tex2.png\n            </code>\n            <para>\n            Written as an equation, the final diffuse term for a specific\n            pixel would be:\n            </para>\n            <code>\n            diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib;\n            </code>\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Multiply\">\n            <summary>\n            T = T1 * T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Add\">\n            <summary>\n            T = T1 + T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Subtract\">\n            <summary>\n            T = T1 - T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.Divide\">\n            <summary>\n            T = T1 / T2\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.SmoothAdd\">\n            <summary>\n            T = (T1 + T2) - (T1 * T2)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureOperation.SignedAdd\">\n            <summary>\n            T = T1 + (T2 - 0.5)\n            </summary>\n        </member>\n        <member name=\"T:Assimp.TextureType\">\n            <summary>\n            Defines the purpose of a texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.None\">\n            <summary>\n            No texture, but the value can be used as a 'texture semantic'.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Diffuse\">\n            <summary>\n            A diffuse texture that is combined with the result of the diffuse lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Specular\">\n            <summary>\n            A specular texture that is combined with the result of the specular lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Ambient\">\n            <summary>\n            An ambient texture that is combined with the ambient lighting equation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Emissive\">\n            <summary>\n            An emissive texture that is added to the result of the lighting calculation. It is not influenced\n            by incoming light, instead it represents the light that the object is naturally emitting.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Height\">\n            <summary>\n            A height map texture. by convention, higher gray-scale values stand for\n            higher elevations from some base height.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Normals\">\n            <summary>\n            A tangent-space normal map. There are several conventions for normal maps\n            and Assimp does (intentionally) not distinguish here.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Shininess\">\n            <summary>\n            A texture that defines the glossiness of the material. This is the exponent of the specular (phong)\n            lighting equation. Usually there is a conversion function defined to map the linear color values\n            in the texture to a suitable exponent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Opacity\">\n            <summary>\n            The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite\n            the opposite.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Displacement\">\n            <summary>\n            A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Lightmap\">\n            <summary>\n            A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The\n            texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Reflection\">\n            <summary>\n            A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.BaseColor\">\n            <summary>\n            PBR texture property. Diffuse/albedo map containing base color regardless of the object surface type.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.NormalCamera\">\n            <summary>\n            PBR texture property. This is not documented in assimp native, but is a normal map in a PBR workflow.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.EmissionColor\">\n            <summary>\n            PBR texture property. Emissive color map, similar to <see cref=\"F:Assimp.TextureType.Emissive\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Metalness\">\n            <summary>\n            PBR texture property. Describes how reflective the object surface is.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Roughness\">\n            <summary>\n            PBR texture property. Describes how rough or smooth the object surface is.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.AmbientOcclusion\">\n            <summary>\n            Dedicated ambient occlusion map, some older formats may set this as a <see cref=\"F:Assimp.TextureType.Lightmap\"/> texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureType.Unknown\">\n            <summary>\n            An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any\n            further postprocessing.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.SceneFlags\">\n            <summary>\n            Defines the state of the imported scene data structure.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.None\">\n            <summary>\n            Default state of the scene, it imported successfully.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Incomplete\">\n            <summary>\n            Specifies that the scene data structure that was imported is not complete.\n            This flag bypasses some internal validations and allows the import\n            of animation skeletons, material libaries, or camera animation paths\n            using Assimp. Most applications won't support such data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Validated\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>\n            post process step if validation is successful. In a validated scene you can be sure that any\n            cross references in the data structure (e.g. vertex indices) are valid.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.ValidationWarning\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>\n            post process step if validation is successful, but some issues have been found. This can for example\n            mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex\n            do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful\n            for applications which do not capture Assimp's log output.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.NonVerboseFormat\">\n            <summary>\n            This flag is set by the <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/> post process step.\n            It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the\n            verbose format, all vertices are unique where no vertex is ever referenced by more than one face.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.Terrain\">\n            <summary>\n            Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles,\n            in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the\n            z-axis stores the elevation at a specific point.\n            <para>\n            TER (Terragen) and HMP (3D Game Studio) are height map formats.\n            </para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.SceneFlags.AllowShared\">\n            <summary>\n            Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from <see cref=\"F:Assimp.SceneFlags.NonVerboseFormat\"/> as \n            that has internal meanings about postprocessing steps.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ReturnCode\">\n            <summary>\n            Enumerates Assimp function result codes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.Success\">\n            <summary>\n            Function returned successfully.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.Failure\">\n            <summary>\n            There was an error.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ReturnCode.OutOfMemory\">\n            <summary>\n            Assimp ran out of memory.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Origin\">\n            <summary>\n            Seek origins for Assimp's virtual file system API.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.Set\">\n            <summary>\n            Beginning of the file\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.Current\">\n            <summary>\n            Current position of the file pointer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Origin.End\">\n            <summary>\n            End of the file, offsets must be negative.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.DefaultLogStream\">\n            <summary>\n            Enumerates predefined log streaming destinations.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.File\">\n            <summary>\n            Stream log to a file\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.StdOut\">\n            <summary>\n            Stream log to the standard output\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.StdErr\">\n            <summary>\n            Stream log to the standard error output.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.DefaultLogStream.Debugger\">\n            <summary>\n            MSVC only: Stream the log to the debugger (this relies\n            on OutputDebugString from the Win32 SDK).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.PropertyType\">\n            <summary>\n            Defines material property types.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Float\">\n            <summary>\n            Array of single-precision (32 bit) floats.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Double\">\n            <summary>\n            Array of double-precision (64 bit) floats.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.String\">\n            <summary>\n            Property is a string.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Integer\">\n            <summary>\n            Array of 32 bit integers.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.PropertyType.Buffer\">\n            <summary>\n            Byte buffer where the content is undefined.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.CompileFlags\">\n            <summary>\n            Enumerates how the native Assimp DLL was compiled\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.Shared\">\n            <summary>\n            Assimp compiled as a shared object (Windows: DLL);\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.STLport\">\n            <summary>\n            Assimp was compiled against STLport\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.Debug\">\n            <summary>\n            Assimp was compiled as a debug build\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.NoBoost\">\n            <summary>\n            Assimp was compiled with the boost work around.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.CompileFlags.SingleThreaded\">\n            <summary>\n            Assimp was compiled built to run single threaded.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.UVTransformFlags\">\n            <summary>\n            Defines how UV coordinates should be transformed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Scaling\">\n            <summary>\n            Scaling is evaluated.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Rotation\">\n            <summary>\n            Rotation is evaluated.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransformFlags.Translation\">\n            <summary>\n            Translation is evaluated.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.FileIOMode\">\n            <summary>\n            Defines the desired file I/O mode is when opening a new file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.Write\">\n            <summary>\n            Open the file for writing.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.WriteBinary\">\n            <summary>\n            Open the file for writing binary data to it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.WriteText\">\n            <summary>\n            Open the file for writing text data to it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.Read\">\n            <summary>\n            Open the file for reading.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.ReadBinary\">\n            <summary>\n            Open the file for reading binary data from it.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.FileIOMode.ReadText\">\n            <summary>\n            Open the file for reading text data from it.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ImporterFeatureFlags\">\n            <summary>\n            Defines flags that indicate level of support for common features for a given importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsText\">\n            <summary>\n            Indicates there is a textual encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsBinary\">\n            <summary>\n            Indicates there is a binary encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.SupportsCompressed\">\n            <summary>\n            Indicates there is a compressed encoding of the file format and it is supported.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.LimitedSupport\">\n            <summary>\n            Indicates that the importer reads only a very particular subset of the file format. This is common\n            for formats that cannot easily be mapped to the Scene data structure.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.ImporterFeatureFlags.Experimental\">\n            <summary>\n            Indicates that the importer is experimental and used with caution - this is only reserved for importers still in\n            development, and not typically yet in released production code.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ExportDataBlob\">\n            <summary>\n            Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in\n            turn can reference another and so on. This is used to allow exporters to write more than one output for a given\n            scene, such as material files. Existence of such files depends on the format.\n            </summary>\n            <remarks>\n            The stream representation of an ExportDataBlob is as follows:\n            <code>\n            String: Name of the Blob\n            int: Length of Binary Data\n            byte[]: Binary Data\n            bool: If has next data blob\n                String: Name of nested blob\n                int: Length of nested blob binary data\n                byte[]: Nested blob binary data\n                bool: If nested blob has next data blob\n                ....\n            </code>\n            </remarks>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.Name\">\n            <summary>\n            Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files\n            that are nested will have names.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.Data\">\n            <summary>\n            Get the blob data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.NextBlob\">\n            <summary>\n            Gets the next data blob.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportDataBlob.HasData\">\n            <summary>\n            Gets if the blob data is valid.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.#ctor(Assimp.Unmanaged.AiExportDataBlob@)\">\n            <summary>\n            Creates a new ExportDataBlob.\n            </summary>\n            <param name=\"dataBlob\">Unmanaged structure.</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Creates a new ExportDataBlob.\n            </summary>\n            <param name=\"name\">Name</param>\n            <param name=\"data\">Data</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.ToStream(System.IO.Stream)\">\n            <summary>\n            Writes the data blob to the specified stream.\n            </summary>\n            <param name=\"stream\">Output stream</param>\n        </member>\n        <member name=\"M:Assimp.ExportDataBlob.FromStream(System.IO.Stream)\">\n            <summary>\n            Reads a data blob from the specified stream.\n            </summary>\n            <param name=\"stream\">Input stream</param>\n            <returns>Data blob</returns>\n        </member>\n        <member name=\"T:Assimp.ExportFormatDescription\">\n            <summary>\n            Describes a file format which Assimp can export to.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.FormatId\">\n            <summary>\n            Gets a short string ID to uniquely identify the export format. E.g. \"collada\" or \"obj\".\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.Description\">\n            <summary>\n            Gets a short description of the file format to present to users.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ExportFormatDescription.FileExtension\">\n            <summary>\n            Gets the recommended file extension for the exported file in lower case.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ExportFormatDescription.#ctor(Assimp.Unmanaged.AiExportFormatDesc@)\">\n            <summary>\n            Constructs a new ExportFormatDescription.\n            </summary>\n            <param name=\"formatDesc\">Unmanaged structure</param>\n        </member>\n        <member name=\"T:Assimp.Face\">\n            <summary>\n            A single face in a mesh, referring to multiple vertices. This can be a triangle\n            if the index count is equal to three, or a polygon if the count is greater than three.\n            \n            Since multiple primitive types can be contained in a single mesh, this approach\n            allows you to better examine how the mesh is constructed. If you use the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            post process step flag during import, then each mesh will be homogenous where primitive type is concerned.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.IndexCount\">\n            <summary>\n            Gets the number of indices defined in the face.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.HasIndices\">\n            <summary>\n            Gets if the face has faces (should always be true).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Face.Indices\">\n            <summary>\n            Gets or sets the indices that refer to positions of vertex data in the mesh's vertex \n            arrays.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Face\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.#ctor(System.Int32[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Face\"/> class.\n            </summary>\n            <param name=\"indices\">Face indices</param>\n        </member>\n        <member name=\"P:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#ToNative(System.IntPtr,Assimp.Unmanaged.AiFace@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Face.Assimp#IMarshalable{Assimp#Face,Assimp#Unmanaged#AiFace}#FromNative(Assimp.Unmanaged.AiFace@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Face.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.FileIOSystem\">\n            <summary>\n            Simple implementation of an IOSystem that searches for files on the disk. This implementation\n            can be given a number of search directories that it will attempt to locate the file in first, before\n            using the file path given by Assimp. That way, you can load models that have files distributed in a number of other\n            directories besides the root model's.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.#ctor\">\n            <summary>\n            Constructs a new FileIOSystem that does not have any search directories.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.#ctor(System.String[])\">\n            <summary>\n            Constructs a new FileIOSystem that uses the specified search directories.\n            </summary>\n            <param name=\"searchPaths\">Search directories to search for files in</param>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.SetSearchDirectories(System.String[])\">\n            <summary>\n            Sets the search directories the FileIOSystem will use when searching for files.\n            </summary>\n            <param name=\"searchPaths\">Directory paths</param>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.GetSearchDirectories\">\n            <summary>\n            Gets the search directories the FileIOSystem is using.\n            </summary>\n            <returns>Directory paths</returns>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.OpenFile(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Opens a stream to a file.\n            </summary>\n            <param name=\"pathToFile\">Path to the file</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <returns>The IO stream</returns>\n        </member>\n        <member name=\"M:Assimp.FileIOSystem.FindFile(System.String,System.String@)\">\n            <summary>\n            Finds the first file that matches the file name (name + extension) in the search paths.\n            </summary>\n            <param name=\"fileName\">File name (+ extension) to search for</param>\n            <param name=\"pathToFile\">Found file path</param>\n            <returns>True if the file was found, false otherwise</returns>\n        </member>\n        <member name=\"T:Assimp.FileIOStream\">\n            <summary>\n            Wraps a FileStream.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.ImporterDescription\">\n            <summary>\n            Metadata and feature support information for a given importer.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Name\">\n            <summary>\n            Gets the name of the importer (e.g. Blender3D Importer)\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Author\">\n            <summary>\n            Gets the original author (blank if unknown or assimp team).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Maintainer\">\n            <summary>\n            Gets the name of the current maintainer, if empty then the author maintains.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.Comments\">\n            <summary>\n            Gets any implementation comments.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.FeatureFlags\">\n            <summary>\n            Gets the features supported by the importer.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.MinVersion\">\n            <summary>\n            Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.MaxVersion\">\n            <summary>\n            Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.ImporterDescription.FileExtensions\">\n            <summary>\n            Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.IMarshalable`2\">\n            <summary>\n            Represents an object that can be marshaled to and from a native representation.\n            </summary>\n            <typeparam name=\"Managed\">Managed object type</typeparam>\n            <typeparam name=\"Native\">Native value type</typeparam>\n        </member>\n        <member name=\"P:Assimp.IMarshalable`2.IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.IMarshalable`2.FromNative(`1@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"T:Assimp.INativeCustomMarshaler\">\n            <summary>\n            Custom marshaler for usage with the <see cref=\"T:Assimp.MemoryHelper\"/> for performing marshaling\n            to-and-from unmanaged memory for non-blittable types. A type must be attributed with <see cref=\"T:Assimp.NativeCustomMarshalerAttribute\"/>\n            to automatically have an instance of its marshaler be utilized.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.INativeCustomMarshaler.NativeDataSize\">\n            <summary>\n            Gets the native data size in bytes.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.INativeCustomMarshaler.MarshalManagedToNative(System.Object,System.IntPtr)\">\n            <summary>\n            Marshals the managed object to the unmanaged chunk of memory.\n            </summary>\n            <param name=\"managedObj\">Managed object to marshal.</param>\n            <param name=\"nativeData\">Unmanaged chunk of memory to write to.</param>\n        </member>\n        <member name=\"M:Assimp.INativeCustomMarshaler.MarshalNativeToManaged(System.IntPtr)\">\n            <summary>\n            Marshals the managed object from the unmanaged chunk of memory.\n            </summary>\n            <param name=\"nativeData\">Unmanaged chunk of memory to read from.</param>\n            <returns>Managed object marshaled.</returns>\n        </member>\n        <member name=\"T:Assimp.IOStream\">\n            <summary>\n            Defines a stream to some file input or output source. This object is responsible for reading/writing data\n            that is used by Assimp.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.IsDisposed\">\n            <summary>\n            Gets whether or not this IOStream has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.PathToFile\">\n            <summary>\n            Gets the original path to file given by Assimp.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.FileMode\">\n            <summary>\n            Gets the original desired file access mode.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOStream.IsValid\">\n            <summary>\n            Gets whether the stream is in fact valid - that is, the input/output has been\n            properly located and can be read/written.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.#ctor(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Constructs a new IOStream.\n            </summary>\n            <param name=\"pathToFile\">Path to file given by Assimp</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.#ctor(System.String,Assimp.FileIOMode,System.Boolean)\">\n            <summary>\n            Constructs a new IOStream.\n            </summary>\n            <param name=\"pathToFile\">Path to file given by Assimp</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <param name=\"initialize\">True if initialize should be immediately called with the default callbacks. Set this to false\n            if your subclass requires a different way to setup the function pointers.</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Initialize(Assimp.Unmanaged.AiFileWriteProc,Assimp.Unmanaged.AiFileReadProc,Assimp.Unmanaged.AiFileTellProc,Assimp.Unmanaged.AiFileTellProc,Assimp.Unmanaged.AiFileSeek,Assimp.Unmanaged.AiFileFlushProc,System.IntPtr)\">\n            <summary>\n            Initializes the system by setting up native pointers for Assimp to the specified functions. A reference to each\n            supplied callback is held on to avoid it being GC'ed.\n            </summary>\n            <param name=\"aiFileWriteProc\">Handles write requests.</param>\n            <param name=\"aiFileReadProc\">Handles read requests.</param>\n            <param name=\"aiFileTellProc\">Handles tell requests.</param>\n            <param name=\"aiFileSizeProc\">Handles size requests.</param>\n            <param name=\"aiFileSeek\">Handles seek requests.</param>\n            <param name=\"aiFileFlushProc\">Handles flush requests.</param>\n            <param name=\"userData\">Additional user data, if any.</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.IOStream\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Dispose\">\n            <summary>\n            Disposes of resources held by the IOStream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.IOStream.Write(System.Byte[],System.Int64)\">\n            <summary>\n            Writes data to the stream.\n            </summary>\n            <param name=\"dataToWrite\">Data to write</param>\n            <param name=\"count\">Number of bytes to write</param>\n            <returns>Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Read(System.Byte[],System.Int64)\">\n            <summary>\n            Reads data from the stream.\n            </summary>\n            <param name=\"dataRead\">Byte buffer to store the read data in</param>\n            <param name=\"count\">Number of bytes to read</param>\n            <returns>Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Seek(System.Int64,Assimp.Origin)\">\n            <summary>\n            Sets the current file position pointer.\n            </summary>\n            <param name=\"offset\">Offset in bytes from the origin</param>\n            <param name=\"seekOrigin\">Origin reference</param>\n            <returns>ReturnCode indicating success or failure.</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.GetPosition\">\n            <summary>\n            Gets the current file position pointer (in bytes).\n            </summary>\n            <returns>Current file position pointer (in bytes)</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.GetFileSize\">\n            <summary>\n            Gets the total file size (in bytes).\n            </summary>\n            <returns>File size in bytes</returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.Flush\">\n            <summary>\n            Flushes all data currently in the stream buffers.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.Close\">\n            <summary>\n            Closes the stream - flushing any data not yet read/written and disposes of resources.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileWriteProc(System.IntPtr,System.IntPtr,System.UIntPtr,System.UIntPtr)\">\n            <summary>\n            Callback for Assimp that handles writes.\n            </summary>\n            <param name=\"file\"></param>\n            <param name=\"dataToWrite\"></param>\n            <param name=\"sizeOfElemInBytes\"></param>\n            <param name=\"numElements\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileReadProc(System.IntPtr,System.IntPtr,System.UIntPtr,System.UIntPtr)\">\n            <summary>\n            Callback for Assimp that handles reads.\n            </summary>\n            <param name=\"file\"></param>\n            <param name=\"dataRead\"></param>\n            <param name=\"sizeOfElemInBytes\"></param>\n            <param name=\"numElements\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileTellProc(System.IntPtr)\">\n            <summary>\n            Callback for Assimp that handles tell requests.\n            </summary>\n            <param name=\"file\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileSizeProc(System.IntPtr)\">\n            <summary>\n            Callback for Assimp that handles size requests.\n            </summary>\n            <param name=\"file\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileSeekProc(System.IntPtr,System.UIntPtr,Assimp.Origin)\">\n            <summary>\n            Callback for Assimp that handles seeks.\n            </summary>\n            <param name=\"file\"></param>\n            <param name=\"offset\"></param>\n            <param name=\"seekOrigin\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOStream.OnAiFileFlushProc(System.IntPtr)\">\n            <summary>Callback for Assimp that handles flushes.</summary>\n            <param name=\"file\"></param>\n        </member>\n        <member name=\"T:Assimp.IOSystem\">\n            <summary>\n            Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening\n            files to read during import, and creating/writing to files during export.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOSystem.IsDisposed\">\n            <summary>\n            Gets whether or not this IOSystem has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.IOSystem.OpenFileCount\">\n            <summary>\n            Gets the number of currently opened streams.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.#ctor\">\n            <summary>\n            Constructs a new IOSystem.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new IOSystem.\n            </summary>\n            <param name=\"initialize\">True if initialize should be immediately called with the default callbacks. Set this to false\n            if your subclass requires a different way to setup the function pointers.</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Initialize(Assimp.Unmanaged.AiFileOpenProc,Assimp.Unmanaged.AiFileCloseProc,System.IntPtr)\">\n            <summary>\n            Initializes the system by setting up native pointers for Assimp to the specified functions.\n            </summary>\n            <param name=\"fileOpenProc\">Handles open file requests.</param>\n            <param name=\"fileCloseProc\">Handles close file requests.</param>\n            <param name=\"userData\">Additional user data, if any.</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.IOSystem\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.OpenFile(System.String,Assimp.FileIOMode)\">\n            <summary>\n            Opens a stream to a file.\n            </summary>\n            <param name=\"pathToFile\">Path to the file</param>\n            <param name=\"fileMode\">Desired file access mode</param>\n            <returns>The IO stream</returns>\n        </member>\n        <member name=\"M:Assimp.IOSystem.CloseFile(Assimp.IOStream)\">\n            <summary>\n            Closes a stream that is owned by this IOSystem.\n            </summary>\n            <param name=\"stream\">Stream to close</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.CloseAllFiles\">\n            <summary>\n            Closes all outstanding streams owned by this IOSystem.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Dispose\">\n            <summary>\n            Disposes of all resources held by this object.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.IOSystem.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.IOSystem.OnAiFileOpenProc(System.IntPtr,System.String,System.String)\">\n            <summary>\n            Callback for Assimp that handles a file being opened.\n            </summary>\n            <param name=\"fileIO\"></param>\n            <param name=\"pathToFile\"></param>\n            <param name=\"mode\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Assimp.IOSystem.OnAiFileCloseProc(System.IntPtr,System.IntPtr)\">\n            <summary>\n            Callback for Assimp that handles a file being closed.\n            </summary>\n            <param name=\"fileIO\"></param>\n            <param name=\"file\"></param>\n        </member>\n        <member name=\"T:Assimp.Light\">\n            <summary>\n            Describes a light source in the scene. Assimp supports multiple light sources\n            including spot, point, and directional lights. All are defined by a single structure\n            and distinguished by their parameters. Lights have corresponding nodes in the scenegraph.\n            <para>Some file formats such as 3DS and ASE export a \"target point\", e.g. the point\n            a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode\n            of a spotlight's main node called \"spotName.Target\". However, this is just additional information\n            then, the transform tracks of the main node make the spot light already point in the right direction.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Name\">\n            <summary>\n            Gets or sets the name of the light source. This corresponds to a node present in the scenegraph.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.LightType\">\n            <summary>\n            Gets or sets the type of light source. This should never be undefined.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AngleInnerCone\">\n            <summary>\n            Gets or sets the inner angle of a spot light's light cone. The spot light has\n            maximum influence on objects inside this angle. The angle is given in radians, it\n            is 2PI for point lights and defined for directional lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AngleOuterCone\">\n            <summary>\n            Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside\n            this angle. The angle is given in radians. It is 2PI for point lights and undefined for\n            directional lights. The outer angle must be greater than or equal to the inner angle.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationConstant\">\n            <summary>\n            Gets or sets the constant light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>.\n            <para>This member corresponds to the att0 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationLinear\">\n            <summary>\n            Gets or sets the linear light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>\n            <para>This member corresponds to the att1 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AttenuationQuadratic\">\n            <summary>\n            Gets or sets the quadratic light attenuation factor. The intensity of the light source\n            at a given distance 'd' from the light position is <code>Atten = 1 / (att0 + att1 * d + att2 * d*d)</code>.\n            <para>This member corresponds to the att2 variable in the equation and is undefined for directional lights.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Position\">\n            <summary>\n            Gets or sets the position of the light source in space, relative to the\n            transformation of the node corresponding to the light. This is undefined for\n            directional lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Direction\">\n            <summary>\n            Gets or sets the direction of the light source in space, relative to the transformation\n            of the node corresponding to the light. This is undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Up\">\n            <summary>\n            Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light.\n            This is undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorDiffuse\">\n            <summary>\n            Gets or sets the diffuse color of the light source.  The diffuse light color is multiplied with\n            the diffuse material color to obtain the final color that contributes to the diffuse shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorSpecular\">\n            <summary>\n            Gets or sets the specular color of the light source. The specular light color is multiplied with the\n            specular material color to obtain the final color that contributes to the specular shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.ColorAmbient\">\n            <summary>\n            Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient\n            material color to obtain the final color that contributes to the ambient shading term.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.AreaSize\">\n            <summary>\n            Gets or sets the Width (X) and Height (Y) of the area that represents an <see cref=\"F:Assimp.LightSourceType.Area\"/> light.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Light.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Light\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#ToNative(System.IntPtr,Assimp.Unmanaged.AiLight@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Light.Assimp#IMarshalable{Assimp#Light,Assimp#Unmanaged#AiLight}#FromNative(Assimp.Unmanaged.AiLight@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Light.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.LoggingCallback\">\n            <summary>\n            Callback delegate for Assimp's LogStream.\n            </summary>\n            <param name=\"msg\">Log message</param>\n            <param name=\"userData\">Supplied user data</param>\n        </member>\n        <member name=\"T:Assimp.LogStream\">\n            <summary>\n            Represents a log stream, which receives all log messages and streams them somewhere.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsVerboseLoggingEnabled\">\n            <summary>\n            Gets or sets, if verbose logging is enabled globally.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.UserData\">\n            <summary>\n            Gets or sets the user data to be passed to the callback.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsDisposed\">\n            <summary>\n            Gets whether the logstream has been disposed or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.LogStream.IsAttached\">\n            <summary>\n            Gets whether or not the logstream is currently attached to the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#cctor\">\n            <summary>\n            Static constructor.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(System.Boolean)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"initialize\">\n            Whether to immediately initialize the system by setting up native pointers. Set this to\n            false if you want to manually initialize and use custom function pointers for advanced use cases.\n            </param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"userData\">User-supplied data</param>\n            <param name=\"initialize\">True if initialize should be immediately called with the default callbacks. Set this to false\n            if your subclass requires a different way to setup the function pointers.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(Assimp.LoggingCallback)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"callback\">Logging callback that is called when messages are received by the log stream.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.#ctor(Assimp.LoggingCallback,System.String)\">\n            <summary>\n            Constructs a new LogStream.\n            </summary>\n            <param name=\"callback\">Logging callback that is called when messages are received by the log stream.</param>\n            <param name=\"userData\">User-supplied data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:Assimp.LogStream\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.DetachAllLogstreams\">\n            <summary>\n            Detaches all active logstreams from the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.GetAttachedLogStreams\">\n            <summary>\n            Gets all active logstreams that are currently attached to the library.\n            </summary>\n            <returns>Collection of active logstreams attached to the library.</returns>\n        </member>\n        <member name=\"M:Assimp.LogStream.Attach\">\n            <summary>\n            Attaches the logstream to the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Detach\">\n            <summary>\n            Detaches the logstream from the library.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Log(System.String)\">\n            <summary>\n            Logs a message.\n            </summary>\n            <param name=\"msg\">Message contents</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Dispose\">\n            <summary>\n            Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.Dispose(System.Boolean)\">\n            <summary>\n            Releases unmanaged and - optionally - managed resources.\n            </summary>\n            <param name=\"disposing\">True to release both managed and unmanaged resources; False to release only unmanaged resources.</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.LogMessage(System.String,System.String)\">\n            <summary>\n            Override this method to log a message for a subclass of Logstream, if no callback\n            was set.\n            </summary>\n            <param name=\"msg\">Message</param>\n            <param name=\"userData\">User data</param>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnAttach\">\n            <summary>\n            Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnDetach\">\n            <summary>\n            Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving\n            messages until it is re-attached.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.LogStream.OnAiLogStreamCallback(System.String,System.IntPtr)\">\n            <summary>\n            Callback for Assimp that handles a message being logged.\n            </summary>\n            <param name=\"msg\"></param>\n            <param name=\"userData\"></param>\n        </member>\n        <member name=\"M:Assimp.LogStream.Initialize(Assimp.Unmanaged.AiLogStreamCallback,Assimp.LoggingCallback,System.String,System.IntPtr)\">\n            <summary>\n            Initializes the stream by setting up native pointers for Assimp to the specified functions.\n            </summary>\n            <param name=\"aiLogStreamCallback\">Callback that is marshaled to native code, a reference is held on to avoid it being GC'ed.</param>\n            <param name=\"callback\">User callback, if any. Defaults to console if null.</param>\n            <param name=\"userData\">User data, or empty.</param>\n            <param name=\"assimpUserData\">Additional assimp user data, if any.</param>\n        </member>\n        <member name=\"T:Assimp.ConsoleLogStream\">\n            <summary>\n            Log stream that writes messages to the Console.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.#ctor\">\n            <summary>\n            Constructs a new console logstream.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.#ctor(System.String)\">\n            <summary>\n            Constructs a new console logstream.\n            </summary>\n            <param name=\"userData\">User supplied data</param>\n        </member>\n        <member name=\"M:Assimp.ConsoleLogStream.LogMessage(System.String,System.String)\">\n            <summary>\n            Log a message to the console.\n            </summary>\n            <param name=\"msg\">Message</param>\n            <param name=\"userData\">Userdata</param>\n        </member>\n        <member name=\"T:Assimp.Material\">\n            <summary>\n            A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally\n            all this information is stored as key-value pair properties. The class contains many convienence methods and properties for\n            accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present,\n            and if they aren't a default value will be returned.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PropertyCount\">\n            <summary>\n            Gets the number of properties contained in the material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasName\">\n            <summary>\n            Checks if the material has a name property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Name\">\n            <summary>\n            Gets the material name value, if any. Default value is an empty string.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTwoSided\">\n            <summary>\n            Checks if the material has a two-sided property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsTwoSided\">\n            <summary>\n            Gets if the material should be rendered as two-sided. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShadingMode\">\n            <summary>\n            Checks if the material has a shading-mode property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShadingMode\">\n            <summary>\n            Gets the shading mode. Default value is <see cref=\"F:Assimp.ShadingMode.None\"/>, meaning it is not defined.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasWireFrame\">\n            <summary>\n            Checks if the material has a wireframe property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsWireFrameEnabled\">\n            <summary>\n            Gets if wireframe should be enabled. Default value is false.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasBlendMode\">\n            <summary>\n            Checks if the material has a blend mode property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.BlendMode\">\n            <summary>\n            Gets the blending mode. Default value is <see cref=\"F:Assimp.BlendMode.Default\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasOpacity\">\n            <summary>\n            Checks if the material has an opacity property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Opacity\">\n            <summary>\n            Gets the opacity. Default value is 1.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTransparencyFactor\">\n            <summary>\n            Checks if the material has a transparency factor property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TransparencyFactor\">\n            <summary>\n            Gets the transparency factor.  This is used to make a surface more or less opaque (0 = opaque, 1 = transparent). Default value is 0.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasBumpScaling\">\n            <summary>\n            Checks if the material has a bump scaling property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.BumpScaling\">\n            <summary>\n            Gets the bump scaling. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShininess\">\n            <summary>\n            Checks if the material has a shininess property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Shininess\">\n            <summary>\n            Gets the shininess. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShininessStrength\">\n            <summary>\n            Checks if the material has a shininess strength property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShininessStrength\">\n            <summary>\n            Gets the shininess strength. Default vaulue is 1.0f.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasReflectivity\">\n            <summary>\n            Checks if the material has a reflectivty property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Reflectivity\">\n            <summary>\n            Gets the reflectivity. Default value is 0.0f;\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorDiffuse\">\n            <summary>\n            Checks if the material has a color diffuse property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorDiffuse\">\n            <summary>\n            Gets the color diffuse. Default value is white.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorAmbient\">\n            <summary>\n            Checks if the material has a color ambient property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorAmbient\">\n            <summary>\n            Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorSpecular\">\n            <summary>\n            Checks if the material has a color specular property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorSpecular\">\n            <summary>\n            Gets the color specular. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorEmissive\">\n            <summary>\n            Checks if the material has a color emissive property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorEmissive\">\n            <summary>\n            Gets the color emissive. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorTransparent\">\n            <summary>\n            Checks if the material has a color transparent property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorTransparent\">\n            <summary>\n            Gets the color transparent. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasColorReflective\">\n            <summary>\n            Checks if the material has a color reflective property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ColorReflective\">\n            <summary>\n            Gets the color reflective. Default value is black.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureDiffuse\">\n            <summary>\n            Gets if the material has a diffuse texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureDiffuse\">\n            <summary>\n            Gets or sets diffuse texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureSpecular\">\n            <summary>\n            Gets if the material has a specular texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureSpecular\">\n            <summary>\n            Gets or sets specular texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureAmbient\">\n            <summary>\n            Gets if the material has a ambient texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureAmbient\">\n            <summary>\n            Gets or sets ambient texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureEmissive\">\n            <summary>\n            Gets if the material has a emissive texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureEmissive\">\n            <summary>\n            Gets or sets emissive texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureHeight\">\n            <summary>\n            Gets if the material has a height texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureHeight\">\n            <summary>\n            Gets or sets height texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureNormal\">\n            <summary>\n            Gets if the material has a normal texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureNormal\">\n            <summary>\n            Gets or sets normal texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureOpacity\">\n            <summary>\n            Gets if the material has an opacity texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureOpacity\">\n            <summary>\n            Gets or sets opacity texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureDisplacement\">\n            <summary>\n            Gets if the material has a displacement texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureDisplacement\">\n            <summary>\n            Gets or sets displacement texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureLightMap\">\n            <summary>\n            Gets if the material has a light map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureLightMap\">\n            <summary>\n            Gets or sets light map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureAmbientOcclusion\">\n            <summary>\n            Gets if the material has an ambient occlusion map in in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureAmbientOcclusion\">\n            <summary>\n            Gets or sets ambient occlusion texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasTextureReflection\">\n            <summary>\n            Gets if the material has a reflection texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.TextureReflection\">\n            <summary>\n            Gets or sets reflection texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.IsPBRMaterial\">\n            <summary>\n            Determines if the material is part of a PBR workflow or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBR\">\n            <summary>\n            Gets a group accessor for any PBR properties in the material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.HasShaders\">\n            <summary>\n            Gets if the material has embedded shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.Shaders\">\n            <summary>\n            Gets a group accessor for any embedded shader source code in the material.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Material\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.CreateFullyQualifiedName(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\". This is the name that is used as the material dictionary key.\n            </summary>\n            <param name=\"baseName\">Key basename, this must not be null or empty</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>The fully qualified name</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetNonTextureProperty(System.String)\">\n            <summary>\n            Gets the non-texture properties contained in this Material. The name should be\n            the \"base name\", as in it should not contain texture type/texture index information. E.g. \"$clr.diffuse\" rather than \"$clr.diffuse,0,0\". The extra\n            data will be filled in automatically.\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetProperty(System.String)\">\n            <summary>\n            Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property</param>\n            <returns>The material property, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasNonTextureProperty(System.String)\">\n            <summary>\n            Checks if the material has the specified non-texture property. The name should be\n            the \"base name\", as in it should not contain texture type/texture index information. E.g. \"$clr.diffuse\" rather than \"$clr.diffuse,0,0\". The extra\n            data will be filled in automatically.\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"baseName\">Key basename</param>\n            <param name=\"texType\">Texture type; non-texture properties should leave this <see cref=\"F:Assimp.TextureType.None\"/></param>\n            <param name=\"texIndex\">Texture index; non-texture properties should leave this zero.</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.HasProperty(System.String)\">\n            <summary>\n            Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g.\n            \"$clr.diffuse,0,0\" or \"$tex.file,1,0\".\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property</param>\n            <returns>True if the property exists, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddProperty(Assimp.MaterialProperty)\">\n            <summary>\n            Adds a property to this material.\n            </summary>\n            <param name=\"matProp\">Material property</param>\n            <returns>True if the property was successfully added, false otherwise (e.g. null or key already present).</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveNonTextureProperty(System.String)\">\n            <summary>\n            Removes a non-texture property from the material.\n            </summary>\n            <param name=\"baseName\">Property name</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveProperty(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Removes a property from the material.\n            </summary>\n            <param name=\"baseName\">Name of the property</param>\n            <param name=\"texType\">Property texture type</param>\n            <param name=\"texIndex\">Property texture index</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveProperty(System.String)\">\n            <summary>\n            Removes a property from the material.\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified name of the property ({basename},{texType},{texIndex})</param>\n            <returns>True if the property was removed, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Material.Clear\">\n            <summary>\n            Removes all properties from the material;\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.GetAllProperties\">\n            <summary>\n            Gets -all- properties contained in the Material.\n            </summary>\n            <returns>All properties in the material property map.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTextureCount(Assimp.TextureType)\">\n            <summary>\n            Gets all the number of textures that are of the specified texture type.\n            </summary>\n            <param name=\"texType\">Texture type</param>\n            <returns>Texture count</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddMaterialTexture(Assimp.TextureSlot@)\">\n            <summary>\n            Adds a texture to the material - this bulk creates a property for each field. This will\n            either create properties or overwrite existing properties. If the texture has no\n            file path, nothing is added.\n            </summary>\n            <param name=\"texture\">Texture to add</param>\n            <returns>True if the texture properties were added or modified</returns>\n        </member>\n        <member name=\"M:Assimp.Material.AddMaterialTexture(Assimp.TextureSlot@,System.Boolean)\">\n            <summary>\n            Adds a texture to the material - this bulk creates a property for each field. This will\n            either create properties or overwrite existing properties. If the texture has no\n            file path, nothing is added.\n            </summary>\n            <param name=\"texture\">Texture to add</param>\n            <param name=\"onlySetFilePath\">True to only set the texture's file path, false otherwise</param>\n            <returns>True if the texture properties were added or modified</returns>\n        </member>\n        <member name=\"M:Assimp.Material.RemoveMaterialTexture(Assimp.TextureSlot@)\">\n            <summary>\n            Removes a texture from the material - this bulk removes a property for each field.\n            If the texture has no file path, nothing is removed\n            </summary>\n            <param name=\"texture\">Texture to remove</param>\n            <returns>True if the texture was removed, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTexture(Assimp.TextureType,System.Int32,Assimp.TextureSlot@)\">\n            <summary>\n            Gets a texture that corresponds to the type/index.\n            </summary>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"texIndex\">Texture index</param>\n            <param name=\"texture\">Texture description</param>\n            <returns>True if the texture was found in the material</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetMaterialTextures(Assimp.TextureType)\">\n            <summary>\n            Gets all textures that correspond to the type.\n            </summary>\n            <param name=\"type\">Texture type</param>\n            <returns>The array of textures</returns>\n        </member>\n        <member name=\"M:Assimp.Material.GetAllMaterialTextures\">\n            <summary>\n            Gets all textures in the material.\n            </summary>\n            <returns>The array of textures</returns>\n        </member>\n        <member name=\"P:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMaterial@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Material.Assimp#IMarshalable{Assimp#Material,Assimp#Unmanaged#AiMaterial}#FromNative(Assimp.Unmanaged.AiMaterial@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Material.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Material.PBRMaterialProperties\">\n            <summary>\n            Groups all PBR workflow properties into a single accessor.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureBaseColor\">\n            <summary>\n            Gets if the material has a base color map (albedo/diffuse) texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureBaseColor\">\n            <summary>\n            Gets or sets the base color map (albedo/diffuse) texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureNormalCamera\">\n            <summary>\n            Gets if the material has a normal map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureNormalCamera\">\n            <summary>\n            Gets or sets the normal map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureEmissionColor\">\n            <summary>\n            Gets if the material has an emission color map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureEmissionColor\">\n            <summary>\n            Gets or sets the emission color map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureMetalness\">\n            <summary>\n            Gets if the material has a metalness map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureMetalness\">\n            <summary>\n            Gets or sets the metalness map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.HasTextureRoughness\">\n            <summary>\n            Gets if the material has a roughness map texture in the first texture index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.PBRMaterialProperties.TextureRoughness\">\n            <summary>\n            Gets or sets the roughness map texture properties in the first texture index.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.PBRMaterialProperties.#ctor(Assimp.Material)\">\n            <summary>\n            Constructs new property group accessor.\n            </summary>\n            <param name=\"parent\">Material</param>\n        </member>\n        <member name=\"T:Assimp.Material.ShaderMaterialProperties\">\n            <summary>\n            Groups all the properties for shader sources in a single accessor.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasShaderLanguageType\">\n            <summary>\n            Gets if the material has a property for shader language type.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.ShaderLanguageType\">\n            <summary>\n            Gets or sets what language (HLSL, GLSL, etc) any shader source code in this material is of.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasVertexShader\">\n            <summary>\n            Gets if the material has a property for vertex shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.VertexShader\">\n            <summary>\n            Gets or sets vertex shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasFragmentShader\">\n            <summary>\n            Gets if the material has a property for fragment (pixel) shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.FragmentShader\">\n            <summary>\n            Gets or sets fragment (pixel) shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasGeometryShader\">\n            <summary>\n            Gets if the material has a property for geometry shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.GeometryShader\">\n            <summary>\n            Gets or sets geometry shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasTesselationShader\">\n            <summary>\n            Gets if the material has a property for tesselation shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.TesselationShader\">\n            <summary>\n            Gets or sets tesselation shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasPrimitiveShader\">\n            <summary>\n            Gets if the material has a property for primitive (domain) shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.PrimitiveShader\">\n            <summary>\n            Gets or sets primitive (domain) shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.HasComputeShader\">\n            <summary>\n            Gets if the material has a property for compute shader source code.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Material.ShaderMaterialProperties.ComputeShader\">\n            <summary>\n            Gets or sets compute shader source code.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Material.ShaderMaterialProperties.#ctor(Assimp.Material)\">\n            <summary>\n            Constructs new property group accessor.\n            </summary>\n            <param name=\"parent\">Material</param>\n        </member>\n        <member name=\"T:Assimp.MaterialProperty\">\n            <summary>\n            A key-value pairing that represents some material property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.Name\">\n            <summary>\n            Gets or sets the property key name. E.g. $tex.file. This corresponds to the\n            \"AiMatKeys\" base name constants.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.PropertyType\">\n            <summary>\n            Gets or sets the type of property.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.ByteCount\">\n            <summary>\n            Gets the raw byte data count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.HasRawData\">\n            <summary>\n            Checks if the property has data.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.RawData\">\n            <summary>\n            Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.TextureType\">\n            <summary>\n            Gets or sets the texture type semantic, for non-texture properties this is always <see cref=\"F:Assimp.TextureType.None\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.TextureIndex\">\n            <summary>\n            Gets or sets the texture index, for non-texture properties this is always zero.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.FullyQualifiedName\">\n            <summary>\n            Gets the property's fully qualified name. Format: \"{base name},{texture type semantic},{texture index}\". E.g. \"$clr.diffuse,0,0\". This\n            is the key that is used to index the property in the material property map.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Byte[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a buffer property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"buffer\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Single)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a float property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Int32)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs an integer property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Boolean)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Constructs a boolean property.\n            </summary>\n            <param name=\"baseName\">Name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a string property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a texture property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"textureIndex\">Texture index</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Single[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a float array property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"values\">Property values</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,System.Int32[])\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a int array property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"values\">Property values</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,Assimp.Color3D)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a Color3D property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.#ctor(System.String,Assimp.Color4D)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MaterialProperty\"/> class. Creates a Color4D property.\n            </summary>\n            <param name=\"baseName\">Base name of the property</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatValue\">\n            <summary>\n            Gets the property raw data as a float.\n            </summary>\n            <returns>Float</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetFloatValue(System.Single)\">\n            <summary>\n            Sets the property raw data with a float.\n            </summary>\n            <param name=\"value\">Float.</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetDoubleValue\">\n            <summary>\n            Gets the property raw data as a double.\n            </summary>\n            <returns>Double</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetDoubleValue(System.Double)\">\n            <summary>\n            Sets the property raw data with a double.\n            </summary>\n            <param name=\"value\">Double.</param>\n            <returns>True if successful, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerValue\">\n            <summary>\n            Gets the property raw data as an integer.\n            </summary>\n            <returns>Integer</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetIntegerValue(System.Int32)\">\n            <summary>\n            Sets the property raw data as an integer.\n            </summary>\n            <param name=\"value\">Integer</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetStringValue\">\n            <summary>\n            Gets the property raw data as a string.\n            </summary>\n            <returns>String</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetStringValue(System.String)\">\n            <summary>\n            Sets the property raw data as string.\n            </summary>\n            <param name=\"value\">String</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatArrayValue(System.Int32)\">\n            <summary>\n            Gets the property raw data as a float array.\n            </summary>\n            <param name=\"count\">Number of elements to get</param>\n            <returns>Float array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetFloatArrayValue\">\n            <summary>\n            Gets the property raw data as a float array.\n            </summary>\n            <returns>Float array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetFloatArrayValue(System.Single[])\">\n            <summary>\n            Sets the property raw data as a float array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetDoubleArrayValue\">\n            <summary>\n            Gets the property raw data as a double array.\n            </summary>\n            <returns>Double array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetDoubleArrayValue(System.Double[])\">\n            <summary>\n            Sets the property raw data as a double array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerArrayValue(System.Int32)\">\n            <summary>\n            Gets the property raw data as an integer array.\n            </summary>\n            <param name=\"count\">Number of elements to get</param>\n            <returns>Integer array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetIntegerArrayValue\">\n            <summary>\n            Gets the property raw data as an integer array.\n            </summary>\n            <returns>Integer array</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetIntegerArrayValue(System.Int32[])\">\n            <summary>\n            Sets the property raw data as an integer array.\n            </summary>\n            <param name=\"values\">Values to set</param>\n            <returns>True if successful, otherwise false</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetBooleanValue\">\n            <summary>\n            Gets the property raw data as a boolean.\n            </summary>\n            <returns>Boolean</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetBooleanValue(System.Boolean)\">\n            <summary>\n            Sets the property raw data as a boolean.\n            </summary>\n            <param name=\"value\">Boolean value</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetColor3DValue\">\n            <summary>\n            Gets the property raw data as a Color3D.\n            </summary>\n            <returns>Color3D</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetColor3DValue(Assimp.Color3D)\">\n            <summary>\n            Sets the property raw data as a Color3D.\n            </summary>\n            <param name=\"value\">Color3D</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.GetColor4DValue\">\n            <summary>\n            Gets the property raw data as a Color4D.\n            </summary>\n            <returns>Color4D</returns>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.SetColor4DValue(Assimp.Color4D)\">\n            <summary>\n            Sets the property raw data as a Color4D.\n            </summary>\n            <param name=\"value\">Color4D</param>\n            <returns>True if successful, false otherwise</returns>\n        </member>\n        <member name=\"P:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMaterialProperty@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.Assimp#IMarshalable{Assimp#MaterialProperty,Assimp#Unmanaged#AiMaterialProperty}#FromNative(Assimp.Unmanaged.AiMaterialProperty@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MaterialProperty.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Matrix3x3\">\n            <summary>\n            Represents a 3x3 matrix. Assimp docs say their matrices are always row-major,\n            and it looks like they're only describing the memory layout. Matrices are treated\n            as column vectors however (X base in the first column, Y base the second, and Z base the third)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A1\">\n            <summary>\n            Value at row 1, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A2\">\n            <summary>\n            Value at row 1, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.A3\">\n            <summary>\n            Value at row 1, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B1\">\n            <summary>\n            Value at row 2, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B2\">\n            <summary>\n            Value at row 2, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.B3\">\n            <summary>\n            Value at row 2, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C1\">\n            <summary>\n            Value at row 3, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C2\">\n            <summary>\n            Value at row 3, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix3x3.C3\">\n            <summary>\n            Value at row 3, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.Identity\">\n            <summary>\n            Gets the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.IsIdentity\">\n            <summary>\n            Gets if this matrix is an identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix3x3.Item(System.Int32,System.Int32)\">\n            <summary>\n            Gets or sets the value at the specific one-based row, column\n            index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices\n            out of range return a value of zero.\n            \n            </summary>\n            <param name=\"i\">One-based Row index</param>\n            <param name=\"j\">One-based Column index</param>\n            <returns>Matrix value</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Matrix3x3.\n            </summary>\n            <param name=\"a1\">Element at row 1, column 1</param>\n            <param name=\"a2\">Element at row 1, column 2</param>\n            <param name=\"a3\">Element at row 1, column 3</param>\n            <param name=\"b1\">Element at row 2, column 1</param>\n            <param name=\"b2\">Element at row 2, column 2</param>\n            <param name=\"b3\">Element at row 2, column 3</param>\n            <param name=\"c1\">Element at row 3, column 1</param>\n            <param name=\"c2\">Element at row 3, column 2</param>\n            <param name=\"c3\">Element at row 3, column 3</param>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.#ctor(Assimp.Matrix4x4)\">\n            <summary>\n            Constructs a new Matrix3x3.\n            </summary>\n            <param name=\"rotMatrix\">A 4x4 matrix to construct from, only taking the rotation/scaling part.</param>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Transpose\">\n            <summary>\n            Transposes this matrix (rows become columns, vice versa).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Inverse\">\n            <summary>\n            Inverts the matrix. If the matrix is *not* invertible all elements are set to <see cref=\"F:System.Single.NaN\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Determinant\">\n            <summary>\n            Compute the determinant of this matrix.\n            </summary>\n            <returns>The determinant</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromEulerAnglesXYZ(System.Single,System.Single,System.Single)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"x\">Rotation angle about the x-axis, in radians.</param>\n            <param name=\"y\">Rotation angle about the y-axis, in radians.</param>\n            <param name=\"z\">Rotation angle about the z-axis, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromEulerAnglesXYZ(Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"angles\">Vector containing the rotation angles about the x, y, z axes, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationX(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the x-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationY(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the y-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromRotationZ(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the z-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromAngleAxis(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix for a rotation about an arbitrary axis.\n            </summary>\n            <param name=\"radians\">Rotation angle, in radians</param>\n            <param name=\"axis\">Rotation axis, which should be a normalized vector.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromScaling(Assimp.Vector3D)\">\n            <summary>\n            Creates a scaling matrix.\n            </summary>\n            <param name=\"scaling\">Scaling vector</param>\n            <returns>The scaling vector</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.FromToMatrix(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix that rotates a vector called \"from\" into another\n            vector called \"to\". Based on an algorithm by Tomas Moller and John Hudges:\n            <para>\n            \"Efficiently Building a Matrix to Rotate One Vector to Another\"         \n            Journal of Graphics Tools, 4(4):1-4, 1999\n            </para>\n            </summary>\n            <param name=\"from\">Starting vector</param>\n            <param name=\"to\">Ending vector</param>\n            <returns>Rotation matrix to rotate from the start to end.</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Equality(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Tests equality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Inequality(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Tests inequality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Multiply(Assimp.Matrix3x3,Assimp.Matrix3x3)\">\n            <summary>\n            Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations\n            are left to right.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>Multiplied matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.op_Implicit(Assimp.Matrix4x4)~Assimp.Matrix3x3\">\n            <summary>\n            Implicit conversion from a 4x4 matrix to a 3x3 matrix.\n            </summary>\n            <param name=\"mat\">4x4 matrix</param>\n            <returns>3x3 matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Equals(Assimp.Matrix3x3)\">\n            <summary>\n            Tests equality between this matrix and another.\n            </summary>\n            <param name=\"other\">Other matrix to test</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix3x3.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Matrix4x4\">\n            <summary>\n            Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). \n            Memory layout is row major. Right handed conventions are used by default.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A1\">\n            <summary>\n            Value at row 1, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A2\">\n            <summary>\n            Value at row 1, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A3\">\n            <summary>\n            Value at row 1, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.A4\">\n            <summary>\n            Value at row 1, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B1\">\n            <summary>\n            Value at row 2, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B2\">\n            <summary>\n            Value at row 2, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B3\">\n            <summary>\n            Value at row 2, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.B4\">\n            <summary>\n            Value at row 2, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C1\">\n            <summary>\n            Value at row 3, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C2\">\n            <summary>\n            Value at row 3, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C3\">\n            <summary>\n            Value at row 3, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.C4\">\n            <summary>\n            Value at row 3, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D1\">\n            <summary>\n            Value at row 4, column 1 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D2\">\n            <summary>\n            Value at row 4, column 2 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D3\">\n            <summary>\n            Value at row 4, column 3 of the matrix\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Matrix4x4.D4\">\n            <summary>\n            Value at row 4, column 4 of the matrix\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.Identity\">\n            <summary>\n            Gets the identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.IsIdentity\">\n            <summary>\n            Gets if this matrix is an identity matrix.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Matrix4x4.Item(System.Int32,System.Int32)\">\n            <summary>\n            Gets or sets the value at the specific one-based row, column\n            index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices\n            out of range return a value of zero.\n            \n            </summary>\n            <param name=\"i\">One-based Row index</param>\n            <param name=\"j\">One-based Column index</param>\n            <returns>Matrix value</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Matrix4x4.\n            </summary>\n            <param name=\"a1\">Element at row 1, column 1</param>\n            <param name=\"a2\">Element at row 1, column 2</param>\n            <param name=\"a3\">Element at row 1, column 3</param>\n            <param name=\"a4\">Element at row 1, column 4</param>\n            <param name=\"b1\">Element at row 2, column 1</param>\n            <param name=\"b2\">Element at row 2, column 2</param>\n            <param name=\"b3\">Element at row 2, column 3</param>\n            <param name=\"b4\">Element at row 2, column 4</param>\n            <param name=\"c1\">Element at row 3, column 1</param>\n            <param name=\"c2\">Element at row 3, column 2</param>\n            <param name=\"c3\">Element at row 3, column 3</param>\n            <param name=\"c4\">Element at row 3, column 4</param>\n            <param name=\"d1\">Element at row 4, column 1</param>\n            <param name=\"d2\">Element at row 4, column 2</param>\n            <param name=\"d3\">Element at row 4, column 3</param>\n            <param name=\"d4\">Element at row 4, column 4</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.#ctor(Assimp.Matrix3x3)\">\n            <summary>\n            Constructs a new Matrix4x4.\n            </summary>\n            <param name=\"rotMatrix\">Rotation matrix to copy values from.</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Transpose\">\n            <summary>\n            Transposes this matrix (rows become columns, vice versa).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Inverse\">\n            <summary>\n            Inverts the matrix. If the matrix is *not* invertible all elements are set to <see cref=\"F:System.Single.NaN\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Determinant\">\n            <summary>\n            Compute the determinant of this matrix.\n            </summary>\n            <returns>The determinant</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Decompose(Assimp.Vector3D@,Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a transformation matrix into its original scale, rotation, and translation components. The\n            scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And\n            the translation is the output position for the x, y, z axes.\n            </summary>\n            <param name=\"scaling\">Vector to hold the scaling component</param>\n            <param name=\"rotation\">Quaternion to hold the rotation component</param>\n            <param name=\"translation\">Vector to hold the translation component</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.DecomposeNoScaling(Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton\n            quaternion. The translation receives the output position for the x, y, z axes.\n            </summary>\n            <param name=\"rotation\">Quaternion to hold the rotation component</param>\n            <param name=\"translation\">Vector to hold the translation component</param>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromEulerAnglesXYZ(System.Single,System.Single,System.Single)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"x\">Rotation angle about the x-axis, in radians.</param>\n            <param name=\"y\">Rotation angle about the y-axis, in radians.</param>\n            <param name=\"z\">Rotation angle about the z-axis, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromEulerAnglesXYZ(Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix from a set of euler angles.\n            </summary>\n            <param name=\"angles\">Vector containing the rotation angles about the x, y, z axes, in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationX(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the x-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationY(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the y-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromRotationZ(System.Single)\">\n            <summary>\n            Creates a rotation matrix for a rotation about the z-axis.\n            </summary>\n            <param name=\"radians\">Rotation angle in radians.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromAngleAxis(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix for a rotation about an arbitrary axis.\n            </summary>\n            <param name=\"radians\">Rotation angle, in radians</param>\n            <param name=\"axis\">Rotation axis, which should be a normalized vector.</param>\n            <returns>The rotation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromTranslation(Assimp.Vector3D)\">\n            <summary>\n            Creates a translation matrix.\n            </summary>\n            <param name=\"translation\">Translation vector</param>\n            <returns>The translation matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromScaling(Assimp.Vector3D)\">\n            <summary>\n            Creates a scaling matrix.\n            </summary>\n            <param name=\"scaling\">Scaling vector</param>\n            <returns>The scaling vector</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.FromToMatrix(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Creates a rotation matrix that rotates a vector called \"from\" into another\n            vector called \"to\". Based on an algorithm by Tomas Moller and John Hudges:\n            <para>\n            \"Efficiently Building a Matrix to Rotate One Vector to Another\"         \n            Journal of Graphics Tools, 4(4):1-4, 1999\n            </para>\n            </summary>\n            <param name=\"from\">Starting vector</param>\n            <param name=\"to\">Ending vector</param>\n            <returns>Rotation matrix to rotate from the start to end.</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Equality(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Tests equality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Inequality(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Tests inequality between two matrices.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>True if the matrices are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Multiply(Assimp.Matrix4x4,Assimp.Matrix4x4)\">\n            <summary>\n            Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations\n            are left to right.\n            </summary>\n            <param name=\"a\">First matrix</param>\n            <param name=\"b\">Second matrix</param>\n            <returns>Multiplied matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.op_Implicit(Assimp.Matrix3x3)~Assimp.Matrix4x4\">\n            <summary>\n            Implicit conversion from a 3x3 matrix to a 4x4 matrix.\n            </summary>\n            <param name=\"mat\">3x3 matrix</param>\n            <returns>4x4 matrix</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Equals(Assimp.Matrix4x4)\">\n            <summary>\n            Tests equality between this matrix and another.\n            </summary>\n            <param name=\"other\">Other matrix to test</param>\n            <returns>True if the matrices are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Matrix4x4.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.FreeNativeDelegate\">\n            <summary>\n            Delegate for performing unmanaged memory cleanup.\n            </summary>\n            <param name=\"nativeValue\">Location in unmanaged memory of the value to cleanup</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise</param>\n        </member>\n        <member name=\"T:Assimp.MemoryHelper\">\n            <summary>\n            Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``2(``0[])\">\n            <summary>\n            Marshals an array of managed values to a c-style unmanaged array (void*).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"managedArray\">Array of managed values</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``2(``0[],System.Boolean)\">\n            <summary>\n            Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to\n            an unmanaged array of pointers (void**).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"managedArray\">Array of managed values</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``2(System.IntPtr,System.Int32)\">\n            <summary>\n            Marshals an array of managed values from a c-style unmanaged array (void*).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to marshal</param>\n            <returns>Marshaled managed values</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``2(System.IntPtr,System.Int32,System.Boolean)\">\n            <summary>\n            Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from \n            an unmanaged array of pointers (void**).\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Native type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to marshal</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n            <returns>Marshaled managed values</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativeArray``1(``0[])\">\n            <summary>\n            Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types\n            that require marshaling by the runtime (e.g. has MarshalAs attributes).\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"managedArray\">Managed array of structs</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativeArray``1(System.IntPtr,System.Int32)\">\n            <summary>\n            Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types\n            that require marshaling by the runtime (e.g. has MarshalAs attributes).\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to read</param>\n            <returns>Managed array</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeNativeArray``1(System.IntPtr,System.Int32,Assimp.FreeNativeDelegate)\">\n            <summary>\n            Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be\n            marshaled into unmanaged memory.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to free</param>\n            <param name=\"action\">Delegate that performs the necessary cleanup</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeNativeArray``1(System.IntPtr,System.Int32,Assimp.FreeNativeDelegate,System.Boolean)\">\n            <summary>\n            Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be\n            marshaled into unmanaged memory.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"nativeArray\">Pointer to unmanaged memory</param>\n            <param name=\"length\">Number of elements to free</param>\n            <param name=\"action\">Delegate that performs the necessary cleanup</param>\n            <param name=\"arrayOfPointers\">True if the pointer is an array of pointers, false otherwise.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToNativePointer``2(``0)\">\n            <summary>\n            Marshals a managed value to unmanaged memory.\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Unmanaged type</typeparam>\n            <param name=\"managedValue\">Managed value to marshal</param>\n            <returns>Pointer to unmanaged memory</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromNativePointer``2(System.IntPtr)\">\n            <summary>\n            Marshals a managed value from unmanaged memory.\n            </summary>\n            <typeparam name=\"Managed\">Managed type</typeparam>\n            <typeparam name=\"Native\">Unmanaged type</typeparam>\n            <param name=\"ptr\">Pointer to unmanaged memory</param>\n            <returns>The marshaled managed value</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalStructure``1(System.IntPtr,``0@)\">\n            <summary>\n            Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise\n            use the read methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"ptr\">Pointer to marshal</param>\n            <param name=\"value\">The marshaled structure</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalStructure``1(System.IntPtr)\">\n            <summary>\n            Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise\n            use the read methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"ptr\">Pointer to marshal</param>\n            <returns>The marshaled structure</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalPointer``1(``0@,System.IntPtr)\">\n            <summary>\n            Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise\n            use the write methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"value\">Struct to marshal</param>\n            <param name=\"ptr\">Pointer to unmanaged chunk of memory which must be allocated prior to this call</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalSizeOf``1\">\n            <summary>\n            Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime,\n            (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <returns>Size of the struct in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.MarshalSizeOf``1(``0[])\">\n            <summary>\n            Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime,\n            (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"array\">Array of structs</param>\n            <returns>Total size, in bytes, of the array's contents.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.PinObject(System.Object)\">\n            <summary>\n            Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime\n            cannot move the object around in memory, which may degrade performance.\n            </summary>\n            <param name=\"obj\">Object to pin.</param>\n            <returns>Pointer to pinned object's memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.UnpinObject(System.Object)\">\n            <summary>\n            Unpins an object in memory, allowing it to once again freely be moved around by the runtime.\n            </summary>\n            <param name=\"obj\">Object to unpin.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.DisposeCollection``1(System.Collections.Generic.ICollection{``0})\">\n            <summary>\n            Convienence method to dispose all items in the collection\n            </summary>\n            <typeparam name=\"T\">IDisposable type</typeparam>\n            <param name=\"collection\">Collection of disposables</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CastToEnum``2(``0)\">\n            <summary>\n            Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value.\n            </summary>\n            <typeparam name=\"V\">Underlying value type.</typeparam>\n            <typeparam name=\"T\">Enum type.</typeparam>\n            <param name=\"value\">Value to cast.</param>\n            <returns>Enum value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AllocateMemory(System.Int32,System.Int32)\">\n            <summary>\n            Allocates unmanaged memory. This memory should only be freed by this helper.\n            </summary>\n            <param name=\"sizeInBytes\">Size to allocate</param>\n            <param name=\"alignment\">Alignment of the memory, by default aligned along 16-byte boundary.</param>\n            <returns>Pointer to the allocated unmanaged memory.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AllocateClearedMemory(System.Int32,System.Byte,System.Int32)\">\n            <summary>\n            Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper.\n            </summary>\n            <param name=\"sizeInBytes\">Size to allocate</param>\n            <param name=\"clearValue\">Value the memory will be cleared to, by default zero.</param>\n            <param name=\"alignment\">Alignment of the memory, by default aligned along 16-byte boundary.</param>\n            <returns>Pointer to the allocated unmanaged memory.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FreeMemory(System.IntPtr)\">\n            <summary>\n            Frees unmanaged memory that was allocated by this helper.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to unmanaged memory to free.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.IsMemoryAligned(System.IntPtr,System.Int32)\">\n            <summary>\n            Checks if the memory is aligned to the specified alignment.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to the memory</param>\n            <param name=\"alignment\">Alignment value, by defauly 16-byte</param>\n            <returns>True if is aligned, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Swap``1(``0@,``0@)\">\n            <summary>\n            Swaps the value between two references.\n            </summary>\n            <typeparam name=\"T\">Type of data to swap.</typeparam>\n            <param name=\"left\">First reference</param>\n            <param name=\"right\">Second reference</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ComputeFNVModifiedHashCode(System.Byte[])\">\n            <summary>\n            Computes a hash code using the <a href=\"http://bretm.home.comcast.net/~bretm/hash/6.html\">FNV modified algorithm</a>m.\n            </summary>\n            <param name=\"data\">Byte data to hash.</param>\n            <returns>Hash code for the data.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ReadStreamFully(System.IO.Stream,System.Int32)\">\n            <summary>\n            Reads a stream until the end is reached into a byte array. Based on\n            <a href=\"http://www.yoda.arachsys.com/csharp/readbinary.html\">Jon Skeet's implementation</a>.\n            It is up to the caller to dispose of the stream.\n            </summary>\n            <param name=\"stream\">Stream to read all bytes from</param>\n            <param name=\"initialLength\">Initial buffer length, default is 32K</param>\n            <returns>The byte array containing all the bytes from the stream</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Compare(System.Byte[],System.Byte[])\">\n            <summary>\n            Compares two arrays of bytes for equivalence. \n            </summary>\n            <param name=\"firstData\">First array of data.</param>\n            <param name=\"secondData\">Second array of data.</param>\n            <returns>True if both arrays contain the same data, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ClearMemory(System.IntPtr,System.Byte,System.Int32)\">\n            <summary>\n            Clears the memory to the specified value.\n            </summary>\n            <param name=\"memoryPtr\">Pointer to the memory.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"sizeInBytesToClear\">Number of bytes, starting from the memory pointer, to clear.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.SizeOf``1\">\n            <summary>\n            Computes the size of the struct type.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <returns>Size of the struct in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsPointer``1(``0@)\">\n            <summary>\n            Casts the by-ref value into a pointer.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"src\">By-ref value.</param>\n            <returns>Pointer to the value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsPointerReadonly``1(``0@)\">\n            <summary>\n            Casts the readonly by-ref value into a pointer.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"src\">By-ref value.</param>\n            <returns>Pointer to the value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsRef``1(System.IntPtr)\">\n            <summary>\n            Casts the pointer into a by-ref value of the specified type.\n            </summary>\n            <typeparam name=\"T\">Struct type.</typeparam>\n            <param name=\"pSrc\">Memory location.</param>\n            <returns>By-ref value.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.As``2(``0@)\">\n            <summary>\n            Casts one by-ref type to another, unsafely.\n            </summary>\n            <typeparam name=\"TFrom\">From struct type</typeparam>\n            <typeparam name=\"TTo\">To struct type</typeparam>\n            <param name=\"src\">Source by-ref value.</param>\n            <returns>Reference as the from type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AsReadonly``2(``0@)\">\n            <summary>\n            Casts one readonly by-ref type to another, unsafely.\n            </summary>\n            <typeparam name=\"TFrom\">From struct type</typeparam>\n            <typeparam name=\"TTo\">To struct type</typeparam>\n            <param name=\"src\">Source by-ref value.</param>\n            <returns>Reference as the from type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.SizeOf``1(``0[])\">\n            <summary>\n            Computes the size of the struct array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"array\">Array of structs</param>\n            <returns>Total size, in bytes, of the array's contents.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.AddIntPtr(System.IntPtr,System.Int32)\">\n            <summary>\n            Adds an offset to the pointer.\n            </summary>\n            <param name=\"ptr\">Pointer</param>\n            <param name=\"offset\">Offset</param>\n            <returns>Pointer plus the offset</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyMemory(System.IntPtr,System.IntPtr,System.Int32)\">\n            <summary>\n            Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer.\n            </summary>\n            <param name=\"pDest\">Destination memory location</param>\n            <param name=\"pSrc\">Source memory location</param>\n            <param name=\"sizeInBytesToCopy\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Count``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Returns the number of elements in the enumerable.\n            </summary>\n            <typeparam name=\"T\">Type of element in collection.</typeparam>\n            <param name=\"source\">Enumerable collection</param>\n            <returns>The number of elements in the enumerable collection.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.ToByteArray``1(``0[])\">\n            <summary>\n            Converts typed element array to a byte array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"source\">Element array</param>\n            <returns>Byte array copy or null if the source array was not valid.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.FromByteArray``1(System.Byte[])\">\n            <summary>\n            Converts a byte array to a typed element array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"source\">Byte array</param>\n            <returns>Typed element array or null if the source array was not valid.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyBytes``1(System.Byte[],System.Int32,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies bytes from a byte array to an element array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"srcArray\">Source byte array</param>\n            <param name=\"srcStartIndex\">Starting index in destination array</param>\n            <param name=\"destArray\">Destination element array</param>\n            <param name=\"destStartIndex\">Starting index in destination array</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.CopyBytes``1(``0[],System.Int32,System.Byte[],System.Int32,System.Int32)\">\n            <summary>\n            Copies bytes from an element array to a byte array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"srcArray\">Source element array</param>\n            <param name=\"srcStartIndex\">Starting index in source array</param>\n            <param name=\"destArray\">Destination byte array</param>\n            <param name=\"destStartIndex\">Starting index in destination array</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Reads data from the memory location into the array.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <param name=\"data\">Array to store the copied data</param>\n            <param name=\"startIndexInArray\">Zero-based element index to start writing data to in the element array.</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr)\">\n            <summary>\n            Reads a single element from the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <returns>The read value</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Read``1(System.IntPtr,``0@)\">\n            <summary>\n            Reads a single element from the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pSrc\">Pointer to memory location</param>\n            <param name=\"value\">The read value.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Write``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Writes data from the array to the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pDest\">Pointer to memory location</param>\n            <param name=\"data\">Array containing data to write</param>\n            <param name=\"startIndexInArray\">Zero-based element index to start reading data from in the element array.</param>\n            <param name=\"count\">Number of elements to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryHelper.Write``1(System.IntPtr,``0@)\">\n            <summary>\n            Writes a single element to the memory location.\n            </summary>\n            <typeparam name=\"T\">Struct type</typeparam>\n            <param name=\"pDest\">Pointer to memory location</param>\n            <param name=\"data\">The value to write</param>\n        </member>\n        <member name=\"T:Assimp.Mesh\">\n            <summary>\n            A mesh represents geometry with a single material.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Name\">\n            <summary>\n            Gets or sets the mesh name. This tends to be used\n            when formats name nodes and meshes independently,\n            vertex animations refer to meshes by their names,\n            or importers split meshes up, each mesh will reference\n            the same (dummy) name.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.PrimitiveType\">\n            <summary>\n            Gets or sets the primitive type. This may contain more than one\n            type unless if <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            option is not set.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MaterialIndex\">\n            <summary>\n            Gets or sets the index of the material associated with this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexCount\">\n            <summary>\n            Gets the number of vertices in this mesh. This is the count that all\n            per-vertex lists should be the size of.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasVertices\">\n            <summary>\n            Gets if the mesh has a vertex array. This should always return\n            true provided no special scene flags are set.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Vertices\">\n            <summary>\n            Gets the vertex position list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasNormals\">\n            <summary>\n            Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Normals\">\n            <summary>\n            Gets the vertex normal list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasTangentBasis\">\n            <summary>\n            Gets if the mesh has tangents and bitangents. It is not\n            possible for one to be without the other. If it does exist, the count should be the same as the vertex count.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Tangents\">\n            <summary>\n            Gets the vertex tangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BiTangents\">\n            <summary>\n            Gets the vertex bitangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.FaceCount\">\n            <summary>\n            Gets the number of faces contained in the mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasFaces\">\n            <summary>\n            Gets if the mesh contains faces. If no special\n            scene flags are set, this should always return true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Faces\">\n            <summary>\n            Gets the mesh's faces. Each face will contain indices\n            to the vertices.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexColorChannelCount\">\n            <summary>\n            Gets the number of valid vertex color channels contained in the\n            mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel\n            should be the size of <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.TextureCoordinateChannelCount\">\n            <summary>\n            Gets the number of valid texture coordinate channels contained\n            in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count.\n            Each individual channel should be the size of <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.VertexColorChannels\">\n            <summary>\n            Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index\n            in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.TextureCoordinateChannels\">\n            <summary>\n            Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index\n            in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.UVComponentCount\">\n            <summary>\n            Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component\n            value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds\n            to the texture coordinate channel index.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BoneCount\">\n            <summary>\n            Gets the number of bones that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasBones\">\n            <summary>\n            Gets if this mesh has bones.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.Bones\">\n            <summary>\n            Gets the bones that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MeshAnimationAttachmentCount\">\n            <summary>\n            Gets the number of mesh animation attachments that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.HasMeshAnimationAttachments\">\n            <summary>\n            Gets if this mesh has mesh animation attachments.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MeshAnimationAttachments\">\n            <summary>\n            Gets the mesh animation attachments that influence this mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.MorphMethod\">\n            <summary>\n            Gets or sets the morph method used when animation attachments are used.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Mesh.BoundingBox\">\n            <summary>\n            Gets or sets the axis aligned bounding box that contains the extents of the mesh.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"name\">Name of the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"primType\">Primitive types contained in the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.#ctor(System.String,Assimp.PrimitiveType)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Mesh\"/> class.\n            </summary>\n            <param name=\"name\">Name of the mesh</param>\n            <param name=\"primType\">Primitive types contained in the mesh.</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.HasVertexColors(System.Int32)\">\n            <summary>\n            Checks if the mesh has vertex colors for the specified channel. This returns false if the list\n            is null or empty. The channel, if it exists, should contain the same number of entries as <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if vertex colors are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.HasTextureCoords(System.Int32)\">\n            <summary>\n            Checks if the mesh has texture coordinates for the specified channel. This returns false if the list\n            is null or empty. The channel, if it exists, should contain the same number of entries as <see cref=\"P:Assimp.Mesh.VertexCount\"/>.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if texture coordinates are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.SetIndices(System.Int32[],System.Int32)\">\n            <summary>\n            Convienence method for setting this meshe's face list from an index buffer.\n            </summary>\n            <param name=\"indices\">Index buffer</param>\n            <param name=\"indicesPerFace\">Indices per face</param>\n            <returns>True if the operation succeeded, false otherwise (e.g. not enough data)</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single\n            index array.\n            </summary>\n            <returns>int index array</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetUnsignedIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single index\n            array as unsigned integers (the default from Assimp, if you need them).\n            </summary>\n            <returns>uint index array</returns>\n        </member>\n        <member name=\"M:Assimp.Mesh.GetShortIndices\">\n            <summary>\n            Convienence method for accumulating all face indices into a single\n            index array.\n            </summary>\n            <returns>short index array</returns>\n        </member>\n        <member name=\"P:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMesh@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.Assimp#IMarshalable{Assimp#Mesh,Assimp#Unmanaged#AiMesh}#FromNative(Assimp.Unmanaged.AiMesh@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Mesh.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshAnimationAttachment\">\n            <summary>\n            A mesh attachment store per-vertex animations for a particular frame. You may\n            think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain\n            vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual\n            relationship between the time line and mesh attachments is established by the mesh animation channel,\n            which references singular mesh attachments by their ID and binds them to a time offset.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Name\">\n            <summary>\n            Gets or sets the mesh animation name.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexCount\">\n            <summary>\n            Gets the number of vertices in this mesh. This is a replacement\n            for the host mesh's vertex count. Likewise, a mesh attachment\n            cannot add or remove per-vertex attributes, therefore the existance\n            of vertex data will match the existance of data in the mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasVertices\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex positions\n            of its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Vertices\">\n            <summary>\n            Gets the vertex position list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasNormals\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex normals of\n            its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Normals\">\n            <summary>\n            Gets the vertex normal list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.HasTangentBasis\">\n            <summary>\n            Checks whether the attachment mesh overrides the vertex\n            tangents and bitangents of its host mesh.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Tangents\">\n            <summary>\n            Gets the vertex tangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.BiTangents\">\n            <summary>\n            Gets the vertex bitangent list.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexColorChannelCount\">\n            <summary>\n            Gets the number of valid vertex color channels contained in the\n            mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel\n            should be the size of <see cref=\"P:Assimp.MeshAnimationAttachment.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.TextureCoordinateChannelCount\">\n            <summary>\n            Gets the number of valid texture coordinate channels contained\n            in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count.\n            Each individual channel should be the size of <see cref=\"P:Assimp.MeshAnimationAttachment.VertexCount\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.VertexColorChannels\">\n            <summary>\n            Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). \n            Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.TextureCoordinateChannels\">\n            <summary>\n            Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null).\n            Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Weight\">\n            <summary>\n            Gets or sets the weight of the mesh animation.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshAnimationAttachment\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.HasVertexColors(System.Int32)\">\n            <summary>\n            Checks if the mesh attachment overrides a particular set of vertex colors on\n            the host mesh. This returns false if the list is null or empty. The index is between \n            zero and the maximumb number of vertex color channels.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if vertex colors are present in the channel.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.HasTextureCoords(System.Int32)\">\n            <summary>\n            Checks if the mesh attachment overrides a particular set of texture coordinates on\n            the host mesh. This returns false if the list is null or empty. The index is \n            between zero and the maximum number of texture coordinate channels.\n            </summary>\n            <param name=\"channelIndex\">Channel index</param>\n            <returns>True if texture coordinates are present in the channel.</returns>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#ToNative(System.IntPtr,Assimp.Unmanaged.AiAnimMesh@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.Assimp#IMarshalable{Assimp#MeshAnimationAttachment,Assimp#Unmanaged#AiAnimMesh}#FromNative(Assimp.Unmanaged.AiAnimMesh@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationAttachment.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshAnimationChannel\">\n            <summary>\n            Describes vertex-based animations for a single mesh or a group of meshes. Meshes\n            carry the animation data for each frame. The purpose of this object is to define\n            keyframes, linking each mesh attachment to a particular point in a time.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshName\">\n            <summary>\n            Gets or sets the name of the mesh to be animated. Empty strings are not allowed,\n            animation meshes need to be named (not necessarily uniquely, the name can basically\n            serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshKeyCount\">\n            <summary>\n            Gets the number of meshkeys in this animation channel. There will always\n            be at least one key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.HasMeshKeys\">\n            <summary>\n            Gets if this animation channel has mesh keys - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.MeshKeys\">\n            <summary>\n            Gets the mesh keyframes of the animation. This should not be null.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshAnimationChannel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.Assimp#IMarshalable{Assimp#MeshAnimationChannel,Assimp#Unmanaged#AiMeshAnim}#FromNative(Assimp.Unmanaged.AiMeshAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshKey\">\n            <summary>\n            Binds an anim mesh (referenced by an index) to a specific point in time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.MeshKey.Value\">\n            <summary>\n            Index of the anim mesh that corresponds to this keyframe.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshKey.#ctor(System.Double,System.Int32)\">\n            <summary>\n            Constructs a new MeshKey.\n            </summary>\n            <param name=\"time\">The time of this key.</param>\n            <param name=\"index\">Index of the anim mesh that corresponds to this keyframe.</param>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_Equality(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's indices are the same, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_Inequality(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's indices are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_LessThan(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.op_GreaterThan(Assimp.MeshKey,Assimp.MeshKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.Equals(Assimp.MeshKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their indices are equal</returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.MeshKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.MeshMorphAnimationChannel\">\n            <summary>\n            Describes morph-based keyframe animations for a single mesh or a group of meshes.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.Name\">\n            <summary>\n            Gets or sets the name of the mesh to be animated. Empty strings are not allowed,\n            animation meshes need to be named (not necessarily uniquely, the name can basically\n            serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.MeshMorphKeyCount\">\n            <summary>\n            Gets the number of mesh morph keys in this animation channel. There will always be at least one key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.HasMeshMorphKeys\">\n            <summary>\n            Gets if this animation channel has mesh keys - this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.MeshMorphKeys\">\n            <summary>\n            Gets the mesh morph keyframes of the animation. This should not be null.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshMorphAnimationChannel\" /> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#FromNative(Assimp.Unmanaged.AiMeshMorphAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.Assimp#IMarshalable{Assimp#MeshMorphAnimationChannel,Assimp#Unmanaged#AiMeshMorphAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshMorphAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.MeshMorphKey\">\n            <summary>\n            Binds a morph animation mesh to a specific point in time.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Time\">\n            <summary>\n            Gets or sets the time of this keyframe.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Values\">\n            <summary>\n            Gets the values at the time of this keyframe. Number of values must equal number of weights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Weights\">\n            <summary>\n            Gets the weights at the time of this keyframe. Number of weights must equal number of values.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.MeshMorphKey\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMeshMorphKey@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.Assimp#IMarshalable{Assimp#MeshMorphKey,Assimp#Unmanaged#AiMeshMorphKey}#FromNative(Assimp.Unmanaged.AiMeshMorphKey@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.MeshMorphKey.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Metadata\">\n            <summary>\n            Represents a container for holding metadata, representing as key-value pairs.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Metadata\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#ToNative(System.IntPtr,Assimp.Unmanaged.AiMetadata@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.Assimp#IMarshalable{Assimp#Metadata,Assimp#Unmanaged#AiMetadata}#FromNative(Assimp.Unmanaged.AiMetadata@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Metadata.Entry\">\n            <summary>\n            Represents an entry in a metadata container.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Entry.DataType\">\n            <summary>\n            Gets the type of metadata.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Metadata.Entry.Data\">\n            <summary>\n            Gets the metadata data stored in this entry.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.#ctor(Assimp.MetaDataType,System.Object)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Metadata.Entry\"/> struct.\n            </summary>\n            <param name=\"dataType\">Type of the data.</param>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.op_Equality(Assimp.Metadata.Entry,Assimp.Metadata.Entry)\">\n            <summary>\n            Tests equality between two entries.\n            </summary>\n            <param name=\"a\">First entry</param>\n            <param name=\"b\">Second entry</param>\n            <returns>True if the entries are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.op_Inequality(Assimp.Metadata.Entry,Assimp.Metadata.Entry)\">\n            <summary>\n            Tests inequality between two entries.\n            </summary>\n            <param name=\"a\">First entry</param>\n            <param name=\"b\">Second entry</param>\n            <returns>True if the entries are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.DataAs``1\">\n            <summary>\n            Gets the data as the specified type. If it cannot be casted to the type, then null is returned.\n            </summary>\n            <typeparam name=\"T\">Type to cast the data to.</typeparam>\n            <returns>Casted data or null.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\" /> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\" /> to compare with this instance.</param>\n            <returns>True if the specified <see cref=\"T:System.Object\" /> is equal to this instance; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.Equals(Assimp.Metadata.Entry)\">\n            <summary>\n            Indicates whether the current object is equal to another object of the same type.\n            </summary>\n            <param name=\"other\">An object to compare with this object.</param>\n            <returns>True if the current object is equal to the <paramref name=\"other\" /> parameter; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. </returns>\n        </member>\n        <member name=\"M:Assimp.Metadata.Entry.ToString\">\n            <summary>\n            Returns the fully qualified type name of this instance.\n            </summary>\n            <returns>A <see cref=\"T:System.String\" /> containing a fully qualified type name.</returns>\n        </member>\n        <member name=\"T:Assimp.NativeCustomMarshalerAttribute\">\n            <summary>\n            Attribute for assocating a type with an <see cref=\"T:Assimp.INativeCustomMarshaler\"/> instance.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NativeCustomMarshalerAttribute.Marshaler\">\n            <summary>\n            Gets the associated marshaler.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NativeCustomMarshalerAttribute.#ctor(System.Type)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NativeCustomMarshalerAttribute\"/> class.\n            </summary>\n            <param name=\"type\">Type that implements <see cref=\"T:Assimp.INativeCustomMarshaler\"/></param>\n            <exception cref=\"T:System.NullReferenceException\">Thrown if the type is null.</exception>\n            <exception cref=\"T:System.ArgumentException\">Thrown if the type does not implement <see cref=\"T:Assimp.INativeCustomMarshaler\"/>.</exception>\n        </member>\n        <member name=\"T:Assimp.Node\">\n            <summary>\n            A node in the imported model hierarchy.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Name\">\n            <summary>\n            Gets or sets the name of the node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Transform\">\n            <summary>\n            Gets or sets the transformation of the node relative to its parent.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Parent\">\n            <summary>\n            Gets the node's parent, if it exists. \n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.ChildCount\">\n            <summary>\n            Gets the number of children that is owned by this node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.HasChildren\">\n            <summary>\n            Gets if the node contains children.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Children\">\n            <summary>\n            Gets the node's children.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.MeshCount\">\n            <summary>\n            Gets the number of meshes referenced by this node.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.HasMeshes\">\n            <summary>\n            Gets if the node contains mesh references.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.MeshIndices\">\n            <summary>\n            Gets the indices of the meshes referenced by this node. Meshes can be\n            shared between nodes, so there is a mesh collection owned by the scene\n            that each node can reference.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Node.Metadata\">\n            <summary>\n            Gets the node's metadata container.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n            <param name=\"name\">Name of the node</param>\n        </member>\n        <member name=\"M:Assimp.Node.#ctor(System.String,Assimp.Node)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Node\"/> class.\n            </summary>\n            <param name=\"name\">Name of the node</param>\n            <param name=\"parent\">Parent of the node</param>\n        </member>\n        <member name=\"M:Assimp.Node.FindNode(System.String)\">\n            <summary>\n            Finds a node with the specific name, which may be this node\n            or any children or children's children, and so on, if it exists.\n            </summary>\n            <param name=\"name\">Node name</param>\n            <returns>The node or null if it does not exist</returns>\n        </member>\n        <member name=\"P:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#IsNativeBlittable\">\n            <summary>\n            Gets a value indicating whether this instance is native blittable.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#ToNative(System.IntPtr,Assimp.Unmanaged.AiNode@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Node.Assimp#IMarshalable{Assimp#Node,Assimp#Unmanaged#AiNode}#FromNative(Assimp.Unmanaged.AiNode@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Node.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.NodeAnimationChannel\">\n            <summary>\n            Describes the animation of a single node. The name specifies the bone/node which is affected by\n            this animation chanenl. The keyframes are given in three separate seties of values,\n            one for each position, rotation, and scaling. The transformation matrix is computed from\n            these values and replaces the node's original transformation matrix at a specific time.\n            <para>This means all keys are absolute and not relative to the bone default pose.\n            The order which the transformations are to be applied is scaling, rotation, and translation (SRT).</para>\n            <para>Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no\n            negative time values, but they are not forbidden.</para>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.NodeName\">\n            <summary>\n            Gets or sets the name of the node affected by this animation. It must <c>exist</c> and it <c>must</c>\n            be unique.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PositionKeyCount\">\n            <summary>\n            Gets the number of position keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasPositionKeys\">\n            <summary>\n            Gets if this animation channel contains position keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PositionKeys\">\n            <summary>\n            Gets the position keys of this animation channel. Positions are\n            specified as a 3D vector. If there are position keys, there should\n            also be -at least- one scaling and one rotation key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.RotationKeyCount\">\n            <summary>\n            Gets the number of rotation keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasRotationKeys\">\n            <summary>\n            Gets if the animation channel contains rotation keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.RotationKeys\">\n            <summary>\n            Gets the rotation keys of this animation channel. Rotations are\n            given as quaternions. If this exists, there should be -at least- one\n            scaling and one position key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.ScalingKeyCount\">\n            <summary>\n            Gets the number of scaling keys in the animation channel.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.HasScalingKeys\">\n            <summary>\n            Gets if the animation channel contains scaling keys.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.ScalingKeys\">\n            <summary>\n            Gets the scaling keys of this animation channel. Scalings are\n            specified in a 3D vector. If there are scaling keys, there should\n            also be -at least- one position and one rotation key.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PreState\">\n            <summary>\n            Gets or sets how the animation behaves before the first key is encountered. By default the original\n            transformation matrix of the affected node is used.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.PostState\">\n            <summary>\n            Gets or sets how the animation behaves after the last key was processed. By default the original\n            transformation matrix of the affected node is taken.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NodeAnimationChannel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#ToNative(System.IntPtr,Assimp.Unmanaged.AiNodeAnim@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.Assimp#IMarshalable{Assimp#NodeAnimationChannel,Assimp#Unmanaged#AiNodeAnim}#FromNative(Assimp.Unmanaged.AiNodeAnim@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.NodeAnimationChannel.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.NodeCollection\">\n            <summary>\n            A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.Count\">\n            <summary>\n            Gets the number of elements contained in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.Item(System.Int32)\">\n            <summary>\n            Gets or sets the element at the specified index.\n            </summary>\n            <param name=\"index\">The child index</param>\n        </member>\n        <member name=\"P:Assimp.NodeCollection.IsReadOnly\">\n            <summary>\n            Gets a value indicating whether the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> is read-only.\n            </summary>\n            <returns>true if the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> is read-only; otherwise, false.</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.#ctor(Assimp.Node)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.NodeCollection\"/> class.\n            </summary>\n            <param name=\"parent\">Parent node</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Add(Assimp.Node)\">\n            <summary>\n            Adds an item to the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n            <param name=\"item\">The object to add to the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.AddRange(Assimp.Node[])\">\n            <summary>\n            Adds a range of items to the list.\n            </summary>\n            <param name=\"items\">Item array</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Clear\">\n            <summary>\n            Removes all items from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Contains(Assimp.Node)\">\n            <summary>\n            Determines whether the <see cref=\"T:System.Collections.Generic.ICollection`1\" /> contains a specific value.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n            <returns>\n            true if <paramref name=\"item\" /> is found in the <see cref=\"T:System.Collections.Generic.ICollection`1\" />; otherwise, false.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.CopyTo(Assimp.Node[],System.Int32)\">\n            <summary>\n            Copies collection contents to the array\n            </summary>\n            <param name=\"array\">The array to copy to.</param>\n            <param name=\"arrayIndex\">Index of the array to start copying.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.IndexOf(Assimp.Node)\">\n            <summary>\n            Determines the index of a specific item in the <see cref=\"T:System.Collections.Generic.IList`1\" />.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.IList`1\" />.</param>\n            <returns>\n            The index of <paramref name=\"item\" /> if found in the list; otherwise, -1.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Insert(System.Int32,Assimp.Node)\">\n            <summary>\n            Inserts an item to the <see cref=\"T:System.Collections.Generic.IList`1\" /> at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index at which <paramref name=\"item\" /> should be inserted.</param>\n            <param name=\"item\">The object to insert into the <see cref=\"T:System.Collections.Generic.IList`1\" />.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the <see cref=\"T:System.Collections.Generic.IList`1\" /> item at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index of the item to remove.</param>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.Remove(Assimp.Node)\">\n            <summary>\n            Removes the first occurrence of a specific object from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </summary>\n            <param name=\"item\">The object to remove from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />.</param>\n            <returns>\n            true if <paramref name=\"item\" /> was successfully removed from the <see cref=\"T:System.Collections.Generic.ICollection`1\" />; otherwise, false. This method also returns false if <paramref name=\"item\" /> is not found in the original <see cref=\"T:System.Collections.Generic.ICollection`1\" />.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.ToArray\">\n            <summary>\n            Copies elements in the collection to a new array.\n            </summary>\n            <returns>Array of copied elements</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through the collection.\n            </summary>\n            <returns>A <see cref=\"T:System.Collections.Generic.IEnumerator`1\" /> that can be used to iterate through the collection.</returns>\n        </member>\n        <member name=\"M:Assimp.NodeCollection.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through a collection.\n            </summary>\n            <returns>An <see cref=\"T:System.Collections.IEnumerator\" /> object that can be used to iterate through the collection.</returns>\n        </member>\n        <member name=\"T:Assimp.Plane\">\n            <summary>\n            Represents a plane in three-dimensional euclidean space where\n            A, B, C are components of the plane normal and D is the distance along the\n            normal from the origin to the plane.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.A\">\n            <summary>\n            X component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.B\">\n            <summary>\n            Y component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.C\">\n            <summary>\n            Z component of the normal vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Plane.D\">\n            <summary>\n            Distance from the origin to the plane along the normal vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Plane.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Plane.\n            </summary>\n            <param name=\"a\">X component of the normal vector.</param>\n            <param name=\"b\">Y component of the normal vector.</param>\n            <param name=\"c\">Z component of the normal vector.</param>\n            <param name=\"d\">Distance from the origin to the plane along the normal vector.</param>\n        </member>\n        <member name=\"T:Assimp.PostProcessPreset\">\n            <summary>\n            Static class containing preset properties for post processing options.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.ConvertToLeftHanded\">\n            <summary>\n            PostProcess configuration for (some) Direct3D conventions,\n            left handed geometry, upper left origin for UV coordinates,\n            and clockwise face order, suitable for CCW culling.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeFast\">\n            <summary>\n            PostProcess configuration for optimizing data for real-time.\n            Does the following steps:\n            \n            <see cref=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\"/>, <see cref=\"F:Assimp.PostProcessSteps.GenerateNormals\"/>, \n            <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>, <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/>, and <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeQuality\">\n            <summary>\n            PostProcess configuration for optimizing\n            data for real-time rendering. Does the following steps:\n            \n            <see cref=\"F:Assimp.PostProcessSteps.CalculateTangentSpace\"/>, <see cref=\"F:Assimp.PostProcessSteps.GenerateSmoothNormals\"/>, \n            <see cref=\"F:Assimp.PostProcessSteps.JoinIdenticalVertices\"/>, <see cref=\"F:Assimp.PostProcessSteps.Triangulate\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.GenerateUVCoords\"/>, <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/>\n            <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/>, <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/>,\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/>, <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/>, and\n            <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/>\n            </summary>\n        </member>\n        <member name=\"P:Assimp.PostProcessPreset.TargetRealTimeMaximumQuality\">\n            <summary>\n            PostProcess configuration for heavily optimizing the data\n            for real-time rendering. Includes all flags in\n            <see cref=\"P:Assimp.PostProcessPreset.TargetRealTimeQuality\"/> as well as \n            <see cref=\"F:Assimp.PostProcessSteps.FindInstances\"/>, <see cref=\"F:Assimp.PostProcessSteps.ValidateDataStructure\"/>, and\n            <see cref=\"F:Assimp.PostProcessSteps.OptimizeMeshes\"/>\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Quaternion\">\n            <summary>\n            A 4D vector that represents a rotation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.W\">\n            <summary>\n            Rotation component of the quaternion/\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.X\">\n            <summary>\n            X component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.Y\">\n            <summary>\n            Y component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Quaternion.Z\">\n            <summary>\n            Z component of the vector part of the quaternion.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(System.Single,System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Quaternion.\n            </summary>\n            <param name=\"w\">W component</param>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(Assimp.Matrix3x3)\">\n            <summary>\n            Constructs a new Quaternion from a rotation matrix.\n            </summary>\n            <param name=\"matrix\">Rotation matrix to create the Quaternion from.</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Quaternion from three euler angles.\n            </summary>\n            <param name=\"pitch\">Pitch</param>\n            <param name=\"yaw\">Yaw</param>\n            <param name=\"roll\">Roll</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.#ctor(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Constructs a new Quaternion from an axis-angle.\n            </summary>\n            <param name=\"axis\">Axis</param>\n            <param name=\"angle\">Angle about the axis</param>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Normalize\">\n            <summary>\n            Normalizes the quaternion.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Conjugate\">\n            <summary>\n            Transforms this quaternion into its conjugate.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Quaternion.GetMatrix\">\n            <summary>\n            Returns a matrix representation of the quaternion.\n            </summary>\n            <returns>Rotation matrix representing the quaternion.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Slerp(Assimp.Quaternion,Assimp.Quaternion,System.Single)\">\n            <summary>\n            Spherical interpolation between two quaternions.\n            </summary>\n            <param name=\"start\">Start rotation when factor == 0</param>\n            <param name=\"end\">End rotation when factor == 1</param>\n            <param name=\"factor\">Interpolation factor between 0 and 1, values beyond this range yield undefined values</param>\n            <returns>Interpolated quaternion.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Rotate(Assimp.Vector3D,Assimp.Quaternion)\">\n            <summary>\n            Rotates a point by this quaternion.\n            </summary>\n            <param name=\"pt\">Point to rotate</param>\n            <param name=\"quat\">Quaternion representing the rotation</param>\n            <returns>Rotated point.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Multiply(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Multiplies two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>Resulting quaternion</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Equality(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Tests equality between two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>True if the quaternions are equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.op_Inequality(Assimp.Quaternion,Assimp.Quaternion)\">\n            <summary>\n            Tests inequality between two quaternions.\n            </summary>\n            <param name=\"a\">First quaternion</param>\n            <param name=\"b\">Second quaternion</param>\n            <returns>True if the quaternions are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Equals(Assimp.Quaternion)\">\n            <summary>\n            Tests equality between two quaternions.\n            </summary>\n            <param name=\"other\">Quaternion to compare</param>\n            <returns>True if the quaternions are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.Equals(System.Object)\">\n            <summary>\n            Tests equality between this color and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a color and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Quaternion.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.QuaternionKey\">\n            <summary>\n            Time-value pair specifying a rotation for a given time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.QuaternionKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.QuaternionKey.Value\">\n            <summary>\n            The rotation of this key.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.#ctor(System.Double,Assimp.Quaternion)\">\n            <summary>\n            Constructs a new QuaternionKey.\n            </summary>\n            <param name=\"time\">Time of the key.</param>\n            <param name=\"rot\">Quaternion rotation at the time frame.</param>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_Equality(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's rotations are the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_Inequality(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's rotations are not the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_LessThan(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.op_GreaterThan(Assimp.QuaternionKey,Assimp.QuaternionKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.Equals(Assimp.QuaternionKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their rotations are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.QuaternionKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Ray\">\n            <summary>\n            Defines a 3D ray with a point of origin and a direction.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Ray.Position\">\n            <summary>\n            Origin of the ray in space.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Ray.Direction\">\n            <summary>\n            Direction of the ray.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Ray.#ctor(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new Ray.\n            </summary>\n            <param name=\"pos\">Origin of the ray.</param>\n            <param name=\"dir\">Direction of the ray.</param>\n        </member>\n        <member name=\"T:Assimp.Scene\">\n            <summary>\n            Represents a completely imported model or scene. Everything that was imported from the given file can be\n            accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory\n            and Assimp's read only copy is released.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.SceneFlags\">\n            <summary>\n            Gets or sets the state of the imported scene. By default no flags are set, but\n            issues can arise if the flag is set to incomplete.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.RootNode\">\n            <summary>\n            Gets or sets the root node of the scene graph. There will always be at least the root node\n            if the import was successful and no special flags have been set. Presence of further nodes\n            depends on the format and content of the imported file.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasMeshes\">\n            <summary>\n            Gets if the scene contains meshes. Unless if no special scene flags are set\n            this should always be true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.MeshCount\">\n            <summary>\n            Gets the number of meshes in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Meshes\">\n            <summary>\n            Gets the meshes contained in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasLights\">\n            <summary>\n            Gets if the scene contains any lights.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.LightCount\">\n            <summary>\n            Gets the number of lights in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Lights\">\n            <summary>\n            Gets the lights in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasCameras\">\n            <summary>\n            Gets if the scene contains any cameras.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.CameraCount\">\n            <summary>\n            Gets the number of cameras in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Cameras\">\n            <summary>\n            Gets the cameras in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasTextures\">\n            <summary>\n            Gets if the scene contains embedded textures.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.TextureCount\">\n            <summary>\n            Gets the number of embedded textures in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Textures\">\n            <summary>\n            Gets the embedded textures in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasAnimations\">\n            <summary>\n            Gets if the scene contains any animations.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.AnimationCount\">\n            <summary>\n            Gets the number of animations in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Animations\">\n            <summary>\n            Gets the animations in the scene, if any.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.HasMaterials\">\n            <summary>\n            Gets if the scene contains any materials. There should always be at least the\n            default Assimp material if no materials were loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.MaterialCount\">\n            <summary>\n            Gets the number of materials in the scene. There should always be at least the\n            default Assimp material if no materials were loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Materials\">\n            <summary>\n            Gets the materials in the scene.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Metadata\">\n            <summary>\n            Gets the metadata of the scene. This data contains global metadata which belongs to the scene like \n            unit-conversions, versions, vendors or other model-specific data. This can be used to store format-specific metadata as well.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Scene.Name\">\n            <summary>\n            Gets or sets the name of the scene.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.#ctor\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Scene\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Scene\"/> class.\n            </summary>\n            <param name=\"name\">Name of the scene</param>\n        </member>\n        <member name=\"M:Assimp.Scene.Clear\">\n            <summary>\n            Clears the scene of all components.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.GetEmbeddedTexture(System.String)\">\n            <summary>\n            Gets an embedded texture by a string. The string may be a texture ID in the format of \"*1\" or is the\n            file name of the texture.\n            </summary>\n            <param name=\"fileName\">Texture ID or original file name.</param>\n            <returns>Embedded texture or null if it could not be found.</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.ToUnmanagedScene(Assimp.Scene)\">\n            <summary>\n            Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to\n            <see cref=\"M:Assimp.Scene.FreeUnmanagedScene(System.IntPtr)\"/>, the memory is owned by AssimpNet and cannot be freed by the native library.\n            </summary>\n            <param name=\"scene\">Scene data</param>\n            <returns>Unmanaged scene or NULL if the scene is null.</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.FromUnmanagedScene(System.IntPtr)\">\n            <summary>\n            Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory.\n            </summary>\n            <param name=\"scenePtr\">The unmanaged scene data</param>\n            <returns>The managed scene, or null if the pointer is NULL</returns>\n        </member>\n        <member name=\"M:Assimp.Scene.FreeUnmanagedScene(System.IntPtr)\">\n            <summary>\n            Frees unmanaged memory allocated -ONLY- in <see cref=\"M:Assimp.Scene.ToUnmanagedScene(Assimp.Scene)\"/>. To free an unmanaged scene allocated by the unmanaged Assimp library,\n            call the appropiate <see cref=\"M:Assimp.Unmanaged.AssimpLibrary.ReleaseImport(System.IntPtr)\"/> function.\n            </summary>\n            <param name=\"scenePtr\">Pointer to unmanaged scene data.</param>\n        </member>\n        <member name=\"P:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#IsNativeBlittable\">\n            <summary>\n            Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes).\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#ToNative(System.IntPtr,Assimp.Unmanaged.AiScene@)\">\n            <summary>\n            Writes the managed data to the native value.\n            </summary>\n            <param name=\"thisPtr\">Optional pointer to the memory that will hold the native value.</param>\n            <param name=\"nativeValue\">Output native value</param>\n        </member>\n        <member name=\"M:Assimp.Scene.Assimp#IMarshalable{Assimp#Scene,Assimp#Unmanaged#AiScene}#FromNative(Assimp.Unmanaged.AiScene@)\">\n            <summary>\n            Reads the unmanaged data from the native value.\n            </summary>\n            <param name=\"nativeValue\">Input native value</param>\n        </member>\n        <member name=\"M:Assimp.Scene.FreeNative(System.IntPtr,System.Boolean)\">\n            <summary>\n            Frees unmanaged memory created by <see cref=\"M:Assimp.IMarshalable`2.ToNative(System.IntPtr,`1@)\"/>.\n            </summary>\n            <param name=\"nativeValue\">Native value to free</param>\n            <param name=\"freeNative\">True if the unmanaged memory should be freed, false otherwise.</param>\n        </member>\n        <member name=\"T:Assimp.Texel\">\n            <summary>\n            Represents a texel in ARGB8888 format.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.B\">\n            <summary>\n            Blue component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.G\">\n            <summary>\n            Green component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.R\">\n            <summary>\n            Red component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Texel.A\">\n            <summary>\n            Alpha component.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Texel.#ctor(System.Byte,System.Byte,System.Byte,System.Byte)\">\n            <summary>\n            Constructs a new Texel.\n            </summary>\n            <param name=\"b\">Blue component.</param>\n            <param name=\"g\">Green component.</param>\n            <param name=\"r\">Red component.</param>\n            <param name=\"a\">Alpha component.</param>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Equality(Assimp.Texel,Assimp.Texel)\">\n            <summary>\n            Tests equality between two texels.\n            </summary>\n            <param name=\"a\">First texel</param>\n            <param name=\"b\">Second texel</param>\n            <returns>True if the texels are equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Inequality(Assimp.Texel,Assimp.Texel)\">\n            <summary>\n            Tests inequality between two texels.\n            </summary>\n            <param name=\"a\">First texel</param>\n            <param name=\"b\">Second texel</param>\n            <returns>True if the texels are not equal, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.op_Implicit(Assimp.Texel)~Assimp.Color4D\">\n            <summary>\n            Implicitly converts a texel to a Color4D.\n            </summary>\n            <param name=\"texel\">Texel to convert</param>\n            <returns>Converted Color4D</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.Texel.Equals(Assimp.Texel)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"other\">Other key to test</param>\n            <returns>True if their indices are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Texel.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Texel.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.TextureSlot\">\n            <summary>\n            Describes all the values pertaining to a particular texture slot in a material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.FilePath\">\n            <summary>\n            Gets the texture file path.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.TextureType\">\n            <summary>\n            Gets the texture type semantic.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.TextureIndex\">\n            <summary>\n            Gets the texture index in the material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Mapping\">\n            <summary>\n            Gets the texture mapping.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.UVIndex\">\n            <summary>\n            Gets the UV channel index that corresponds to this texture from the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.BlendFactor\">\n            <summary>\n            Gets the blend factor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Operation\">\n            <summary>\n            Gets the texture operation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.WrapModeU\">\n            <summary>\n            Gets the texture wrap mode for the U coordinate.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.WrapModeV\">\n            <summary>\n            Gets the texture wrap mode for the V coordinate.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.TextureSlot.Flags\">\n            <summary>\n            Gets misc flags.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.TextureSlot.#ctor(System.String,Assimp.TextureType,System.Int32,Assimp.TextureMapping,System.Int32,System.Single,Assimp.TextureOperation,Assimp.TextureWrapMode,Assimp.TextureWrapMode,System.Int32)\">\n            <summary>\n            Constructs a new TextureSlot.\n            </summary>\n            <param name=\"filePath\">Texture filepath</param>\n            <param name=\"typeSemantic\">Texture type semantic</param>\n            <param name=\"texIndex\">Texture index in the material</param>\n            <param name=\"mapping\">Texture mapping</param>\n            <param name=\"uvIndex\">UV channel in mesh that corresponds to this texture</param>\n            <param name=\"blendFactor\">Blend factor</param>\n            <param name=\"texOp\">Texture operation</param>\n            <param name=\"wrapModeU\">Texture wrap mode for U coordinate</param>\n            <param name=\"wrapModeV\">Texture wrap mode for V coordinate</param>\n            <param name=\"flags\">Misc flags</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiConfigs\">\n            <summary>\n            Defines configurable properties for importing models. All properties\n            have default values. Setting config properties are done via the SetProperty*\n            methods in AssimpMethods.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOB_MEASURE_TIME\">\n            <summary>\n            Enables time measurements. If enabled the time needed for each\n            part of the loading process is timed and logged.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOB_MULTITHREADING\">\n            <summary>\n            Sets Assimp's multithreading policy. This is ignored if Assimp is\n            built without boost.thread support. Possible values are: -1 to\n            let Assimp decide, 0 to disable multithreading, and nay number larger than 0\n            to force a specific number of threads. This is only a hint and may be \n            ignored by Assimp.\n            <para>Type: integer. Default: -1</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_NO_SKELETON_MESHES\">\n            <summary>\n            Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid\n            in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing\n            the bones.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the maximum angle that may be between two vertex tangents that their tangents\n            and bitangents are smoothed during the step to calculate the tangent basis. The angle specified \n            is in degrees. The maximum value is 175 degrees.\n            <para>Type: float. Default: 45 degrees</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the maximum angle that may be between two face normals at the same vertex position that\n            their normals will be smoothed together during the calculate smooth normals step. This is commonly\n            called the \"crease angle\". The angle is specified in degrees. Maximum value is 175 degrees (all vertices\n            smoothed).\n            <para>Type: float. Default: 175 degrees</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDL_COLORMAP\">\n            <summary>\n            Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files.\n            This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains\n            RGB triplets for each of the 256 palette entries. If the file is not found, a default\n            palette (from Quake 1) is used.\n            <para>Type: string. Default: \"colormap.lmp\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_RRM_EXCLUDE_LIST\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.RemoveRedundantMaterials\"/> step to\n            keep materials matching a name in a given list. This is a list of\n            1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers\n            containing whitespaces must be enclosed in *single* quotation marks. Tabs or\n            carriage returns are treated as whitespace.\n            <para>If a material matches one of these names, it will not be modified\n            or removed by the post processing step nor will other materials be replaced\n            by a reference to it.</para>\n            <para>Default: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_KEEP_HIERARCHY\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization\n            is performed where meshes with the same materials are not joined.\n            <para>This option could be of used if you have a scene hierarchy that contains\n            important additional information which you intend to parse.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_NORMALIZE\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step\n            to normalize all vertex components into the -1...1 range. That is, a bounding\n            box for the whole scene is computed where the maximum component is taken\n            and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension\n            of the input data.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_REMOVE\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step\n            to remove degenerated primitives from the import immediately.\n            <para>The default behavior converts degenerated triangles to lines and\n            degenerated lines to points.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_CHECKAREA\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.FindDegenerates\"/> step\n            to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FD_REMOVE\"/> is set to true.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_OG_EXCLUDE_LIST\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.OptimizeGraph\"/> step\n            to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character.\n            Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns\n            and tabs are treated as white space.\n            <para>If a node matches one of these names, it will not be modified or removed by the\n            postprocessing step.</para>\n            <para>Type: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_TRIANGLE_LIMIT\">\n            <summary>\n            Sets the maximum number of triangles a mesh can contain. This is used by the\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step to determine\n            whether a mesh must be split or not.\n            <para>Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_VERTEX_LIMIT\">\n            <summary>\n            Sets the maximum number of vertices in a mesh. This is used by the\n            <see cref=\"F:Assimp.PostProcessSteps.SplitLargeMeshes\"/> step to determine\n            whether a mesh must be split or not.\n            <para>Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_LBW_MAX_WEIGHTS\">\n            <summary>\n            Sets the maximum number of bones that can affect a single vertex. This is used\n            by the <see cref=\"F:Assimp.PostProcessSteps.LimitBoneWeights\"/> step.\n            <para>Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_ICL_PTCACHE_SIZE\">\n            <summary>\n            Sets the size of the post-transform vertex cache to optimize vertices for. This is\n            for the <see cref=\"F:Assimp.PostProcessSteps.ImproveCacheLocality\"/> step. The size\n            is given in vertices. Of course you can't know how the vertex format will exactly look\n            like after the import returns, but you can still guess what your meshes will\n            probably have. The default value *has* resulted in slight performance improvements\n            for most Nvidia/AMD cards since 2002.\n            <para>Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_RVC_FLAGS\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.RemoveComponent\"/> step. \n            It specifies the parts of the data structure to be removed.\n            <para>This is a bitwise combination of the <see cref=\"T:Assimp.ExcludeComponent\"/> flag. If no valid mesh is remaining after\n            the step is executed, the import FAILS.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SBP_REMOVE\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.SortByPrimitiveType\"/> step.\n            It specifies which primitive types are to be removed by the step.\n            <para>This is a bitwise combination of the <see cref=\"T:Assimp.PrimitiveType\"/> flag.\n            Specifying ALL types is illegal.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FID_ANIM_ACCURACY\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step.\n            It specifies the floating point accuracy for animation values, specifically the epislon\n            during the comparison. The step checks for animation tracks where all frame values are absolutely equal \n            and removes them. Two floats are considered equal if the invariant <c>abs(n0-n1) > epislon</c> holds\n            true for all vector/quaternion components.\n            <para>Type: float. Default: 0.0f (comparisons are exact)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_FID_IGNORE_TEXTURECOORDS\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.FindInvalidData\"/> step. Set to true to\n            ignore texture coordinates. This may be useful if you have to assign different kinds of textures,\n            like seasonally variable ones - one for summer and one for winter.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_TUV_EVALUATE\">\n            <summary>\n            Input parameter to the <see cref=\"F:Assimp.PostProcessSteps.TransformUVCoords\"/> step.\n            It specifies which UV transformations are to be evaluated.\n            <para>This is bitwise combination of the <see cref=\"T:Assimp.UVTransformFlags\"/> flag.</para>\n            <para>Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_FAVOUR_SPEED\">\n            <summary>\n            A hint to Assimp to favour speed against import quality. Enabling this option\n            may result in faster loading, or it may not. It is just a hint to loaders and post-processing\n            steps to use faster code paths if possible. A value not equal to zero stands\n            for true.\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SBBC_MAX_BONES\">\n            <summary>\n            Maximum bone cone per mesh for the <see cref=\"F:Assimp.PostProcessSteps.SplitByBoneCount\"/> step. Meshes\n            are split until the max number of bones is reached.\n            <para>Type: integer. Default: 60</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX\">\n            <summary>\n            Source UV channel for tangent space computation. The specified channel must exist or an error will be raised.\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_DB_THRESHOLD\">\n            <summary>\n            Threshold used to determine if a bone is kept or removed during the <see cref=\"F:Assimp.PostProcessSteps.Debone\"/> step.\n            <para>Type: float. Default: 1.0f</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_DB_ALL_OR_NONE\">\n            <summary>\n            Require all bones to qualify for deboning before any are removed.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step to use a user defined matrix as the scene root node\n            transformation before transforming vertices.\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.PreTransformVertices\"/> step to use a user defined matrix as the scene root node transformation\n            before transforming vertices.\n            <para>Type: Matrix4x4. Default: Identity Matrix</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY\">\n            <summary>\n            Configures the <see cref=\"F:Assimp.PostProcessSteps.GlobalScale\"/> step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model,\n            which this processing step can utilize.\n            <para>Type: Float. Default: 1.0f.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_APP_SCALE_KEY\">\n            <summary>\n            Applies application-specific scale to the global scale factor to allow for backwards compatibility.\n            <para>Type: Float. Default: 1.0f.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\">\n            <summary>\n            Sets the vertex animation keyframe to be imported. Assimp does not support\n            vertex keyframes (only bone animation is supported). The libary reads only one frame of models\n            with vertex animations. By default this is the first frame.\n            <para>The default value is 0. This option applies to all importers. However, it is\n            also possible to override the global setting for a specific loader. You can use the\n            AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which\n            you want to override the global setting.</para>\n            <para>Type: integer. Default: 0</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD2_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDL_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MDC_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_SMD_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_UNREAL_KEYFRAME\">\n            <summary>\n            See the documentation for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_GLOBAL_KEYFRAME\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL\">\n            <summary>\n            Configures the AC loader to collect all surfaces which have the \"Backface cull\" flag set in separate\n            meshes.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_AC_EVAL_SUBDIVISION\">\n            <summary>\n            Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence\n            of the 'subdiv' attribute in the file). By default, Assimp performs\n            the subdivision using the standard Catmull-Clark algorithm.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS\">\n            <summary>\n            Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided).\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_TER_MAKE_UVS\">\n            <summary>\n            Configures the terragen import plugin to compute UV's for terrains, if\n            they are not given. Furthermore, a default texture is assigned.\n            <para>UV coordinates for terrains are so simple to compute that you'll usually \n            want to compute them on your own, if you need them. This option is intended for model viewers which\n            want to offer an easy way to apply textures to terrains.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS\">\n            <summary>\n            Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups\n            loaded from the file. Some ASE files carry invalid normals, others don't.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART\">\n            <summary>\n            Configures the M3D loader to detect and process multi-part Quake player models. These models\n            usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is\n            set to true, Assimp will try to load and combine all three files if one of them is loaded.\n            <para>Type: bool. Default: true</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_SKIN_NAME\">\n            <summary>\n            Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks\n            whether a file named \"md3_file_name\"_\"skin_name\".skin exists. These files are used by\n            Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue'\n            are typical skin names.\n            <para>Type: string. Default: \"default\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD3_SHADER_SRC\">\n            <summary>\n            Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or\n            relative to where all MD3 shaders reside.\n            <para>Type: string. Default: \"\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY\">\n            <summary>\n            Configures the LWO loader to load just one layer from the model.\n            <para>LWO files consist of layers and in some cases it could be useful to load only one of them.\n            This property can be either a string - which specifies the name of the layer - or an integer - the index\n            of the layer. If the property is not set then the whole LWO model is loaded. Loading fails\n            if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty</para>\n            <para>Type: bool. Default: false (All layers are loaded)</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD\">\n            <summary>\n            Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically.\n            <para>The default strategy is to look for a file with the same name but with the MD5ANIm extension\n            in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration\n            option can be used to disable this behavior.</para>\n            <para>Type: bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWS_ANIM_START\">\n            <summary>\n            Defines the beginning of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the start time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation start from the input LWS\n            file ('FirstFrame' line)</para>\n            <para>Type: integer. Default: taken from file</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_LWS_ANIM_END\">\n            <summary>\n            Defines the ending of the time range for which the LWS loader evaluates animations and computes\n            AiNodeAnim's.\n            <para>Assimp provides full conversion of Lightwave's envelope system, including pre and post\n            conditions. The loader computes linearly subsampled animation channels with the frame rate\n            given in the LWS file. This property defines the end time.</para>\n            <para>Animation channels are only generated if a node has at least one envelope with more than one key\n            assigned. This property is given in frames where '0' is the first. By default,\n            if this property is not set, the importer takes the animation end from the input LWS\n            file.</para>\n            <para>Type: integer. Default: taken from file</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IRR_ANIM_FPS\">\n            <summary>\n            Defines the output frame rate of the IRR loader.\n            <para>IRR animations are difficult to convert for Assimp and there will always be\n            a loss of quality. This setting defines how many keys per second are returned by the converter.</para>\n            <para>Type: integer. Default: 100</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE\">\n            <summary>\n            The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp\n            where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material,\n            and lastly the material name defined by this config property.\n            <para>Type: string. Default: \"Scene.Material\"</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME\">\n            <summary>\n            The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified\n            in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: \n            <list type=\"bullet\">\n            <item><description>Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap</description></item>\n            <item><description>Specular Maps: _s, _spec, _specular, _specularmap</description></item>\n            <item><description>Light Maps: _l, _light, _lightmap, _occ, _occlusion</description></item>\n            <item><description>Displacement Maps: _dis, _displacement</description></item>\n            </list>\n            The matching is case insensitive. Postfix is taken between the last \"_\" and last \".\". The default behavior is to detect type from lower cased\n            texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then,\n            <see cref=\"F:Assimp.TextureType.Diffuse\"/> is used.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS\">\n            <summary>\n            Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION\">\n            <summary>\n            Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false,\n            walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected\n            with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known\n            issues with these kind of polygons.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_SMOOTHING_ANGLE\">\n            <summary>\n            Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120]\n            <para>Type: Float. Default: 10.0f</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_IFC_CYLINDRICAL_TESSELLATION\">\n            <summary>\n            Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180].\n            <para>Type: Integer. Default: 32</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION\">\n            <summary>\n            Specifies whether the collada loader will ignore the up direction.\n            <para>Type: Bool. Default: false</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_COLLADA_USE_COLLADA_NAMES\">\n            <summary>\n            Specifies whether the Collada loader should use Collada names as node names.\n            If this property is set to true, the Collada names will be used as the\n            node name. The default is to use the id tag (resp. sid tag, if no id tag is present) instead.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS\">\n            <summary>\n            Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first.\n            <para>Type: bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS\">\n            <summary>\n            Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer\n            will read materials, otherwise this has no effect.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_MATERIALS\">\n            <summary>\n            Specifies whether the FBX importer will read materials.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_TEXTURES\">\n            <summary>\n            Specifies whether the FBX importer will read embedded textures.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_EMBEDDED_TEXTURES_LEGACY_NAMING\">\n            <summary>\n            Specifies whether the fbx importer will use the legacy embedded texture naming.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_CAMERAS\">\n            <summary>\n            Specifies whether the FBX importer will read cameras.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_LIGHTS\">\n            <summary>\n            Specifies whether the FBX importer will read light sources.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS\">\n            <summary>\n            Specifies whether the FBX importer will read animations.\n            <para>Type: Bool. default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_STRICT_MODE\">\n            <summary>\n            Specifies whether the FBX importer will act in strict mode in which only the FBX 2013\n            format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this\n            format is best supported and well-tested.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS\">\n            <summary>\n            Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots\n            and offsets will be evaluated whenever possible.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES\">\n            <summary>\n            Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose \n            transformation over their entire defined range.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_FBX_CONVERT_TO_M\">\n            <summary>\n            Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m).\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_SMD_LOAD_ANIMATION_LIST\">\n            <summary>\n            Specifies whether the importer will load multiple animations.\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES\">\n            <summary>\n            Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g.\n            attachment points).\n            <para>Type: Bool. Default: true.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_EXPORT_XFILE_64BIT\">\n            <summary>\n            Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_EXPORT_POINT_CLOUDS\">\n            <summary>\n            Specifies whether the export should be able to export point clouds. When this flag is not defined\n            the render data has to contain valid faces. Point  clouds are only a collection of vertices which have no spatial\n            organization by a face and the validation process will remove them. Enabling this feature will switch off the\n            flag and enable the functionality to export pure point clouds.\n            <para>Type: Bool. Default: false.</para>\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiDefines\">\n            <summary>\n            Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants\n            are grouped according to their usage or where they're found in the Assimp include files.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_TRIANGLE_LIMIT\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SLM_DEFAULT_MAX_VERTICES\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_SLM_VERTEX_LIMIT\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_LBW_MAX_WEIGHTS\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_LBW_MAX_WEIGHTS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.PP_ICL_PTCACHE_SIZE\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_ICL_PTCACHE_SIZE\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_UVTRAFO_ALL\">\n            <summary>\n            Default value for <see cref=\"F:Assimp.Unmanaged.AiConfigs.AI_CONFIG_PP_TUV_EVALUATE\"/>\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_FACE_INDICES\">\n            <summary>\n            Defines the maximum number of indices per face (polygon).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_BONE_WEIGHTS\">\n            <summary>\n            Defines the maximum number of bone weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_VERTICES\">\n            <summary>\n            Defines the maximum number of vertices per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_FACES\">\n            <summary>\n            Defines the maximum number of faces per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\">\n            <summary>\n            Defines the maximum number of vertex color sets per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\">\n            <summary>\n            Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_SBBC_DEFAULT_MAX_BONES\">\n            <summary>\n            Defines the default bone count limit.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEBONE_THRESHOLD\">\n            <summary>\n            Defines the deboning threshold.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.MAX_LENGTH\">\n            <summary>\n            Defines the maximum length of a string used in AiString.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEFAULT_MATERIAL_NAME\">\n            <summary>\n            Defines the default color material.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiDefines.AI_DEFAULT_TEXTURED_MATERIAL_NAME\">\n            <summary>\n            Defines the default textured material (if the meshes have UV coords).\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMatKeys\">\n            <summary>\n            Static class containing material key constants. A fully qualified mat key\n            name here means that it's a string that combines the mat key (base) name, its\n            texture type semantic, and its texture index into a single string delimited by\n            commas. For non-texture material properties, the texture type semantic and texture\n            index are always zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.NAME_BASE\">\n            <summary>\n            Material name (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.NAME\">\n            <summary>\n            Material name (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TWOSIDED_BASE\">\n            <summary>\n            Two sided property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TWOSIDED\">\n            <summary>\n            Two sided property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADING_MODEL_BASE\">\n            <summary>\n            Shading mode property (ShadingMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADING_MODEL\">\n            <summary>\n            Shading mode property (ShadingMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.ENABLE_WIREFRAME_BASE\">\n            <summary>\n            Enable wireframe property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.ENABLE_WIREFRAME\">\n            <summary>\n            Enable wireframe property (boolean)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BLEND_FUNC_BASE\">\n            <summary>\n            Blending function (BlendMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BLEND_FUNC\">\n            <summary>\n            Blending function (BlendMode)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.OPACITY_BASE\">\n            <summary>\n            Opacity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.OPACITY\">\n            <summary>\n            Opacity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TRANSPARENCYFACTOR_BASE\">\n            <summary>\n            Transparency Factor (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TRANSPARENCYFACTOR\">\n            <summary>\n            Transparency Factor (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BUMPSCALING_BASE\">\n            <summary>\n            Bumpscaling (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.BUMPSCALING\">\n            <summary>\n            Bumpscaling (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_BASE\">\n            <summary>\n            Shininess (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS\">\n            <summary>\n            Shininess (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFLECTIVITY_BASE\">\n            <summary>\n            Reflectivity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFLECTIVITY\">\n            <summary>\n            Reflectivity (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_STRENGTH_BASE\">\n            <summary>\n            Shininess strength (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHININESS_STRENGTH\">\n            <summary>\n            Shininess strength (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFRACTI_BASE\">\n            <summary>\n            Refracti (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.REFRACTI\">\n            <summary>\n            Refracti (float)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_DIFFUSE_BASE\">\n            <summary>\n            Diffuse color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_DIFFUSE\">\n            <summary>\n            Diffuse color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_AMBIENT_BASE\">\n            <summary>\n            Ambient color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_AMBIENT\">\n            <summary>\n            Ambient color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_SPECULAR_BASE\">\n            <summary>\n            Specular color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_SPECULAR\">\n            <summary>\n            Specular color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_EMISSIVE_BASE\">\n            <summary>\n            Emissive color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_EMISSIVE\">\n            <summary>\n            Emissive color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_TRANSPARENT_BASE\">\n            <summary>\n            Transparent color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_TRANSPARENT\">\n            <summary>\n            Transparent color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_REFLECTIVE_BASE\">\n            <summary>\n            Reflective color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.COLOR_REFLECTIVE\">\n            <summary>\n            Reflective color (Color4D)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_BACKGROUND_IMAGE_BASE\">\n            <summary>\n            Background image (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_BACKGROUND_IMAGE\">\n            <summary>\n            Background image (String)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXTURE_BASE\">\n            <summary>\n            Texture base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.UVWSRC_BASE\">\n            <summary>\n            UVWSRC base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXOP_BASE\">\n            <summary>\n            Texture op base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPING_BASE\">\n            <summary>\n            Mapping base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXBLEND_BASE\">\n            <summary>\n            Texture blend base name.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPINGMODE_U_BASE\">\n            <summary>\n            Mapping mode U base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.MAPPINGMODE_V_BASE\">\n            <summary>\n            Mapping mode V base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXMAP_AXIS_BASE\">\n            <summary>\n            Texture map axis base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.UVTRANSFORM_BASE\">\n            <summary>\n            UV transform base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.TEXFLAGS_BASE\">\n            <summary>\n            Texture flags base name\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_SHADERLANG_BASE\">\n            <summary>\n            Shader language type (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.GLOBAL_SHADERLANG\">\n            <summary>\n            Shader language type (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_VERTEX_BASE\">\n            <summary>\n            Vertex shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_VERTEX\">\n            <summary>\n            Vertex shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_FRAGMENT_BASE\">\n            <summary>\n            Fragment/Pixel shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_FRAGMENT\">\n            <summary>\n            Fragment/Pixel shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_GEO_BASE\">\n            <summary>\n            Geometry shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_GEO\">\n            <summary>\n            Geometry shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_TESSELATION_BASE\">\n            <summary>\n            Tesselation shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_TESSELATION\">\n            <summary>\n            Tesselation shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_PRIMITIVE_BASE\">\n            <summary>\n            Primitive/Domain shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_PRIMITIVE\">\n            <summary>\n            Primitive/Domain shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_COMPUTE_BASE\">\n            <summary>\n            Compute shader source code (string)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMatKeys.SHADER_COMPUTE\">\n            <summary>\n            Compute shader source code (string)\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiMatKeys.GetFullTextureName(System.String,Assimp.TextureType,System.Int32)\">\n            <summary>\n            Helper function to get the fully qualified name of a texture property type name. Takes\n            in a base name constant, a texture type, and a texture index and outputs the name in the format:\n            <para>\"baseName,TextureType,texIndex\"</para>\n            </summary>\n            <param name=\"baseName\">Base name</param>\n            <param name=\"texType\">Texture type</param>\n            <param name=\"texIndex\">Texture index</param>\n            <returns>Fully qualified texture name</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiMatKeys.GetBaseName(System.String)\">\n            <summary>\n            Helper function to get the base name from a fully qualified name of a material property type name. The format\n            of such a string is:\n            <para>\"baseName,TextureType,texIndex\"</para>\n            </summary>\n            <param name=\"fullyQualifiedName\">Fully qualified material property name.</param>\n            <returns>Base name of the property type.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary\">\n            <summary>\n            Singleton that governs access to the unmanaged Assimp library functions.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AssimpLibrary.DefaultLibName\">\n            <summary>\n            Default name of the unmanaged library. Based on runtime implementation the prefix (\"lib\" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AssimpLibrary.Instance\">\n            <summary>\n            Gets the AssimpLibrary instance.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AssimpLibrary.IsMultithreadingSupported\">\n            <summary>\n            Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only,\n            then it will not utilize multiple threads during import.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFile(System.String,Assimp.PostProcessSteps,System.IntPtr)\">\n            <summary>\n            Imports a file.\n            </summary>\n            <param name=\"file\">Valid filename</param>\n            <param name=\"flags\">Post process flags specifying what steps are to be run after the import.</param>\n            <param name=\"propStore\">Property store containing config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFile(System.String,Assimp.PostProcessSteps,System.IntPtr,System.IntPtr)\">\n            <summary>\n            Imports a file.\n            </summary>\n            <param name=\"file\">Valid filename</param>\n            <param name=\"flags\">Post process flags specifying what steps are to be run after the import.</param>\n            <param name=\"fileIO\">Pointer to an instance of AiFileIO, a custom file IO system used to open the model and \n            any associated file the loader needs to open, passing NULL uses the default implementation.</param>\n            <param name=\"propStore\">Property store containing config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ImportFileFromStream(System.IO.Stream,Assimp.PostProcessSteps,System.String,System.IntPtr)\">\n            <summary>\n            Imports a scene from a stream. This uses the \"aiImportFileFromMemory\" function. The stream can be from anyplace,\n            not just a memory stream. It is up to the caller to dispose of the stream.\n            </summary>\n            <param name=\"stream\">Stream containing the scene data</param>\n            <param name=\"flags\">Post processing flags</param>\n            <param name=\"formatHint\">A hint to Assimp to decide which importer to use to process the data</param>\n            <param name=\"propStore\">Property store containing the config name-values, may be null.</param>\n            <returns>Pointer to the unmanaged data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ReleaseImport(System.IntPtr)\">\n            <summary>\n            Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled\n            from the managed scene structure - only for scenes whose memory was allocated by the native library!\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ApplyPostProcessing(System.IntPtr,Assimp.PostProcessSteps)\">\n            <summary>\n            Applies a post-processing step on an already imported scene.\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n            <param name=\"flags\">Post processing steps to run.</param>\n            <returns>Pointer to the unmanaged scene data structure.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetExportFormatDescriptions\">\n            <summary>\n            Gets all supported export formats.\n            </summary>\n            <returns>Array of supported export formats.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportSceneToBlob(System.IntPtr,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file.\n            </summary>\n            <param name=\"scene\">Scene to export, it is the responsibility of the caller to free this when finished.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"preProcessing\">Pre processing flags to operate on the scene during the export.</param>\n            <returns>Exported binary blob, or null if there was an error.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportScene(System.IntPtr,System.String,System.String,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format and writes the result file(s) to disk.\n            </summary>\n            <param name=\"scene\">The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short,\n            this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"fileName\">Output filename to write to</param>\n            <param name=\"preProcessing\">Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input\n            conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format.</param>\n            <returns>Return code specifying if the operation was a success.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ExportScene(System.IntPtr,System.String,System.String,System.IntPtr,Assimp.PostProcessSteps)\">\n            <summary>\n            Exports the given scene to a chosen file format and writes the result file(s) to disk.\n            </summary>\n            <param name=\"scene\">The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short,\n            this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately.</param>\n            <param name=\"formatId\">Format id describing which format to export to.</param>\n            <param name=\"fileName\">Output filename to write to</param>\n            <param name=\"fileIO\">Pointer to an instance of AiFileIO, a custom file IO system used to open the model and \n            any associated file the loader needs to open, passing NULL uses the default implementation.</param>\n            <param name=\"preProcessing\">Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input\n            conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format.</param>\n            <returns>Return code specifying if the operation was a success.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CopyScene(System.IntPtr)\">\n            <summary>\n            Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified\n            and the scene be exported.\n            </summary>\n            <param name=\"sceneToCopy\">Valid scene to be copied</param>\n            <returns>Modifyable copy of the scene</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.AttachLogStream(System.IntPtr)\">\n            <summary>\n            Attaches a log stream callback to catch Assimp messages.\n            </summary>\n            <param name=\"logStreamPtr\">Pointer to an instance of AiLogStream.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.EnableVerboseLogging(System.Boolean)\">\n            <summary>\n            Enables verbose logging.\n            </summary>\n            <param name=\"enable\">True if verbose logging is to be enabled or not.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVerboseLoggingEnabled\">\n            <summary>\n            Gets if verbose logging is enabled.\n            </summary>\n            <returns>True if verbose logging is enabled, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DetachLogStream(System.IntPtr)\">\n            <summary>\n            Detaches a logstream callback.\n            </summary>\n            <param name=\"logStreamPtr\">Pointer to an instance of AiLogStream.</param>\n            <returns>A return code signifying if the function was successful or not.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DetachAllLogStreams\">\n            <summary>\n            Detaches all logstream callbacks currently attached to Assimp.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CreatePropertyStore\">\n            <summary>\n            Create an empty property store. Property stores are used to collect import settings.\n            </summary>\n            <returns>Pointer to property store</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.ReleasePropertyStore(System.IntPtr)\">\n            <summary>\n            Deletes a property store.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyInteger(System.IntPtr,System.String,System.Int32)\">\n            <summary>\n            Sets an integer property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyFloat(System.IntPtr,System.String,System.Single)\">\n            <summary>\n            Sets a float property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyString(System.IntPtr,System.String,System.String)\">\n            <summary>\n            Sets a string property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.SetImportPropertyMatrix(System.IntPtr,System.String,Assimp.Matrix4x4)\">\n            <summary>\n            Sets a matrix property value.\n            </summary>\n            <param name=\"propertyStore\">Pointer to property store</param>\n            <param name=\"name\">Property name</param>\n            <param name=\"value\">Property value</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialColor(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a color value from the material property table.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The color if it exists. If not, the default Color4D value is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialFloatArray(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32,System.UInt32)\">\n            <summary>\n            Retrieves an array of float values with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <param name=\"floatCount\">The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than\n            the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array).</param>\n            <returns>The float array, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialIntegerArray(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32,System.UInt32)\">\n            <summary>\n            Retrieves an array of integer values with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <param name=\"intCount\">The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than\n            the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array).</param>\n            <returns>The integer array, if it exists</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialProperty(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a material property with the specific key from the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the property from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The material property, if found.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialString(Assimp.Unmanaged.AiMaterial@,System.String,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Retrieves a string from the material property table.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"key\">Ai mat key (base) name to search for</param>\n            <param name=\"texType\">Texture Type semantic, always zero for non-texture properties</param>\n            <param name=\"texIndex\">Texture index, always zero for non-texture properties</param>\n            <returns>The string, if it exists. If not, an empty string is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTextureCount(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType)\">\n            <summary>\n            Gets the number of textures contained in the material for a particular texture type.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture Type semantic</param>\n            <returns>The number of textures for the type.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTextureFilePath(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Gets the texture filepath contained in the material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture type semantic</param>\n            <param name=\"index\">Texture index</param>\n            <returns>The texture filepath, if it exists. If not an empty string is returned.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMaterialTexture(Assimp.Unmanaged.AiMaterial@,Assimp.TextureType,System.UInt32)\">\n            <summary>\n            Gets all values pertaining to a particular texture from a material.\n            </summary>\n            <param name=\"mat\">Material to retrieve the data from</param>\n            <param name=\"type\">Texture type semantic</param>\n            <param name=\"index\">Texture index</param>\n            <returns>Returns the texture slot struct containing all the information.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetErrorString\">\n            <summary>\n            Gets the last error logged in Assimp.\n            </summary>\n            <returns>The last error message logged.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IsExtensionSupported(System.String)\">\n            <summary>\n            Checks whether the model format extension is supported by Assimp.\n            </summary>\n            <param name=\"extension\">Model format extension, e.g. \".3ds\"</param>\n            <returns>True if the format is supported, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetExtensionList\">\n            <summary>\n            Gets all the model format extensions that are currently supported by Assimp.\n            </summary>\n            <returns>Array of supported format extensions</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetImporterDescriptions\">\n            <summary>\n            Gets a collection of importer descriptions that detail metadata and feature support for each importer.\n            </summary>\n            <returns>Collection of importer descriptions</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetMemoryRequirements(System.IntPtr)\">\n            <summary>\n            Gets the memory requirements of the scene.\n            </summary>\n            <param name=\"scene\">Pointer to the unmanaged scene data structure.</param>\n            <returns>The memory information about the scene.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.CreateQuaternionFromMatrix(Assimp.Quaternion@,Assimp.Matrix3x3@)\">\n            <summary>\n            Creates a quaternion from the 3x3 rotation matrix.\n            </summary>\n            <param name=\"quat\">Quaternion struct to fill</param>\n            <param name=\"mat\">Rotation matrix</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.DecomposeMatrix(Assimp.Matrix4x4@,Assimp.Vector3D@,Assimp.Quaternion@,Assimp.Vector3D@)\">\n            <summary>\n            Decomposes a 4x4 matrix into its scaling, rotation, and translation parts.\n            </summary>\n            <param name=\"mat\">4x4 Matrix to decompose</param>\n            <param name=\"scaling\">Scaling vector</param>\n            <param name=\"rotation\">Quaternion containing the rotation</param>\n            <param name=\"position\">Translation vector</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransposeMatrix4(Assimp.Matrix4x4@)\">\n            <summary>\n            Transposes the 4x4 matrix.\n            </summary>\n            <param name=\"mat\">Matrix to transpose</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransposeMatrix3(Assimp.Matrix3x3@)\">\n            <summary>\n            Transposes the 3x3 matrix.\n            </summary>\n            <param name=\"mat\">Matrix to transpose</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransformVecByMatrix3(Assimp.Vector3D@,Assimp.Matrix3x3@)\">\n            <summary>\n            Transforms the vector by the 3x3 rotation matrix.\n            </summary>\n            <param name=\"vec\">Vector to transform</param>\n            <param name=\"mat\">Rotation matrix</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.TransformVecByMatrix4(Assimp.Vector3D@,Assimp.Matrix4x4@)\">\n            <summary>\n            Transforms the vector by the 4x4 matrix.\n            </summary>\n            <param name=\"vec\">Vector to transform</param>\n            <param name=\"mat\">Matrix transformation</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.MultiplyMatrix4(Assimp.Matrix4x4@,Assimp.Matrix4x4@)\">\n            <summary>\n            Multiplies two 4x4 matrices. The destination matrix receives the result.\n            </summary>\n            <param name=\"dst\">First input matrix and is also the Matrix to receive the result</param>\n            <param name=\"src\">Second input matrix, to be multiplied with \"dst\".</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.MultiplyMatrix3(Assimp.Matrix3x3@,Assimp.Matrix3x3@)\">\n            <summary>\n            Multiplies two 3x3 matrices. The destination matrix receives the result.\n            </summary>\n            <param name=\"dst\">First input matrix and is also the Matrix to receive the result</param>\n            <param name=\"src\">Second input matrix, to be multiplied with \"dst\".</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IdentityMatrix3(Assimp.Matrix3x3@)\">\n            <summary>\n            Creates a 3x3 identity matrix.\n            </summary>\n            <param name=\"mat\">Matrix to hold the identity</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.IdentityMatrix4(Assimp.Matrix4x4@)\">\n            <summary>\n            Creates a 4x4 identity matrix.\n            </summary>\n            <param name=\"mat\">Matrix to hold the identity</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetLegalString\">\n            <summary>\n            Gets the Assimp legal info.\n            </summary>\n            <returns>String containing Assimp legal info.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionMinor\">\n            <summary>\n            Gets the native Assimp DLL's minor version number.\n            </summary>\n            <returns>Assimp minor version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionMajor\">\n            <summary>\n            Gets the native Assimp DLL's major version number.\n            </summary>\n            <returns>Assimp major version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionRevision\">\n            <summary>\n            Gets the native Assimp DLL's revision version number.\n            </summary>\n            <returns>Assimp revision version number</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetBranchName\">\n            <summary>\n            Returns the branchname of the Assimp runtime.\n            </summary>\n            <returns>The current branch name.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersion\">\n            <summary>\n            Gets the native Assimp DLL's current version number as \"major.minor.revision\" string. This is the\n            version of Assimp that this wrapper is currently using.\n            </summary>\n            <returns>Unmanaged DLL version</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetVersionAsVersion\">\n            <summary>\n            Gets the native Assimp DLL's current version number as a .NET version object.\n            </summary>\n            <returns>Unmanaged DLL version</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AssimpLibrary.GetCompileFlags\">\n            <summary>\n            Get the compilation flags that describe how the native Assimp DLL was compiled.\n            </summary>\n            <returns>Compilation flags</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary.FunctionNames\">\n            <summary>\n            Defines all the unmanaged assimp C-function names.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AssimpLibrary.Functions\">\n            <summary>\n            Defines all of the delegates that represent the unmanaged assimp functions.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.Platform\">\n            <summary>\n            Enumerates supported platforms.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Windows\">\n            <summary>\n            Windows platform.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Linux\">\n            <summary>\n            Linux platform.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.Platform.Mac\">\n            <summary>\n            Mac platform.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedFunctionNameAttribute\">\n            <summary>\n            An attribute that represents the name of an unmanaged function to import.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.UnmanagedFunctionName\">\n            <summary>\n            Name of the unmanaged function.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.#ctor(System.String)\">\n            <summary>\n            Constructs a new <see cref=\"P:Assimp.Unmanaged.UnmanagedFunctionNameAttribute.UnmanagedFunctionName\"/>.\n            </summary>\n            <param name=\"unmanagedFunctionName\">Name of the function.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedLibrary\">\n            <summary>\n            Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list\n            of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load\n            unmanaged libraries.\n            </summary>\n        </member>\n        <member name=\"E:Assimp.Unmanaged.UnmanagedLibrary.LibraryLoaded\">\n            <summary>\n            Occurs when the unmanaged library is loaded.\n            </summary>\n        </member>\n        <member name=\"E:Assimp.Unmanaged.UnmanagedLibrary.LibraryFreed\">\n            <summary>\n            Occurs when the unmanaged library is freed.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.IsLibraryLoaded\">\n            <summary>\n            Queries if the unmanaged library has been loaded or not.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.DefaultLibraryName\">\n            <summary>\n            Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional\n            names can be set in the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/> (e.g. to load versioned DLLs)\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.LibraryPath\">\n            <summary>\n            Gets the path to the unmanaged library DLL that is currently loaded.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.Resolver\">\n            <summary>\n            Gets the resolver used to find the unmanaged library DLL when loading.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.ThrowOnLoadFailure\">\n            <summary>\n            Gets or sets whether an <see cref=\"T:Assimp.AssimpException\"/> is thrown if the unmanaged DLL fails to load for whatever reason. By\n            default this is true.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibrary.Is64Bit\">\n            <summary>\n            Queries if the OS is 64-bit, if false then it is 32-bit.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.#ctor(System.String,System.Type[])\">\n            <summary>\n            Constructs a new <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/>.\n            </summary>\n            <param name=\"defaultName\">Default name (NOT path) of the unmanaged library.</param>\n            <param name=\"unmanagedFunctionDelegateTypes\">Delegate types to instantiate and load.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.GetPlatform\">\n            <summary>\n            Gets an enum representing the current OS that is application is executing on.\n            </summary>\n            <returns>Platform enumeration.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary\">\n            <summary>\n            Loads the unmanaged library using the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/>.\n            </summary>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(System.String,System.String)\">\n            <summary>\n            Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness.\n            </summary>\n            <param name=\"lib32Path\">Path to the 32-bit DLL</param>\n            <param name=\"lib64Path\">Path to the 64-bit DLL</param>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(System.String)\">\n            <summary>\n            Loads the unmanaged library using the supplied path.\n            </summary>\n            <param name=\"libPath\">Path to the unmanaged DLL.</param>\n            <returns>True if the library was found and successfully loaded.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.FreeLibrary\">\n            <summary>\n            Frees the unmanaged library that is currently loaded.\n            </summary>\n            <returns>True if the library was sucessfully freed.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.GetFunction``1(System.String)\">\n            <summary>\n            Gets a delegate based on the unmanaged function name.\n            </summary>\n            <typeparam name=\"T\">Type of delegate.</typeparam>\n            <param name=\"funcName\">Name of unmanaged function that is exported by the library.</param>\n            <returns>The delegate, or null if not found.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.LoadIfNotLoaded\">\n            <summary>\n            If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library\n            from the default path. This function is thread safe.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.OnLibraryLoaded\">\n            <summary>\n            Called when the library is loaded.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibrary.OnLibraryFreed\">\n            <summary>\n            Called when the library is freed.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\">\n            <summary>\n            Resolves unmanaged DLLs for <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/>. The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs),\n            an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/>\n            for the search strategy.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.UnmanagedLibraryResolver.Platform\">\n            <summary>\n            Gets the platform that the application is running on. \n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.#ctor(Assimp.Unmanaged.Platform)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibraryResolver\"/> class.\n            </summary>\n            <param name=\"platformHint\">Platform we're resolving binaries for.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames32(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames64(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetFallbackLibraryNames(System.String[])\">\n            <summary>\n            Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing.\n            </summary>\n            <param name=\"fallbackLibNames\">Null to clear, or set of fallback library names.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths32(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths64(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetProbingPaths(System.String[])\">\n            <summary>\n            Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order\n            that they are given.\n            </summary>\n            <param name=\"probingPaths\">Null to clear, or set of paths to probe.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName32(System.String)\">\n            <summary>\n            Sets an override 32-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName64(System.String)\">\n            <summary>\n            Sets an override 64-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.SetOverrideLibraryName(System.String)\">\n            <summary>\n            Sets an override 32-bit and 64-bit library name. By default, the <see cref=\"T:Assimp.Unmanaged.UnmanagedLibrary\"/> implementations creates a default name for the library, which\n            is passed into <see cref=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\"/> for resolving. If the override is non-null, it will be used instead. This is useful if the library\n            to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where \"lib\" is the prefix and \".so\" the extension).\n            </summary>\n            <param name=\"overrideName\">Null to clear, or override library name.</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.UnmanagedLibraryResolver.ResolveLibraryPath(System.String)\">\n            <summary>\n            Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback\n            library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try\n            and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution:\n            <para>\n            <list type=\"number\">\n            <item><description>Search user-specified probing paths.</description></item>\n            <item><description>Search {AppBaseDirectory}/runtimes/{RID}/native/.</description></item>\n            <item><description>Search {AppBaseDirectory}/.</description></item>\n            <item><description>Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/.</description></item>\n            </list>\n            </para>\n            <para>\n            The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID\n            is the Runtime Identifier based on the platform/architecture, see also <a href=\"https://docs.microsoft.com/en-us/dotnet/core/rid-catalog\">Microsoft's RID Catalog</a>.\n            </para>\n            </summary>\n            <param name=\"libName\">Name of the library to attempt to resolve.</param>\n            <returns>Full file path to the library, or the file name if not found (e.g. \"libXYZ.so\").</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiScene\">\n            <summary>\n            Represents an aiScene struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Flags\">\n            <summary>\n            unsigned int, flags about the state of the scene\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.RootNode\">\n            <summary>\n            aiNode*, root node of the scenegraph.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumMeshes\">\n            <summary>\n            Number of meshes contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Meshes\">\n            <summary>\n            aiMesh**, meshes in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumMaterials\">\n            <summary>\n            Number of materials contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Materials\">\n            <summary>\n            aiMaterial**, materials in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumAnimations\">\n            <summary>\n            Number of animations contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Animations\">\n            <summary>\n            aiAnimation**, animations in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumTextures\">\n            <summary>\n            Number of embedded textures contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Textures\">\n            <summary>\n            aiTexture**, textures in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumLights\">\n            <summary>\n            Number of lights contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Lights\">\n            <summary>\n            aiLight**, lights in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumCameras\">\n            <summary>\n            Number of cameras contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Cameras\">\n            <summary>\n            aiCamera**, cameras in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Metadata\">\n            <summary>\n            aiMetadata*, The global metadata assigned to the scene itself.\n            \n            This data contains global metadata which belongs to the scene like \n            unit-conversions, versions, vendors or other model-specific data. This \n            can be used to store format-specific metadata as well.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Name\">\n            <summary>\n            The name of the scene itself.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.NumSkeletons\">\n            <summary>\n            Number of skeletons contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Skeletons\">\n            <summary>\n            aiSkeleton**, skeletons in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiScene.Private\">\n            <summary>\n            Internal data, do not touch\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiNode\">\n            <summary>\n            Represents an aiNode struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Name\">\n            <summary>\n            Name of the node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Transformation\">\n            <summary>\n            Node's transform relative to its parent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Parent\">\n            <summary>\n            aiNode*, node's parent.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.NumChildren\">\n            <summary>\n            Number of children the node owns.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Children\">\n            <summary>\n            aiNode**, array of nodes this node owns.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.NumMeshes\">\n            <summary>\n            Number of meshes referenced by this node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.Meshes\">\n            <summary>\n            unsigned int*, array of mesh indices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNode.MetaData\">\n            <summary>\n            aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMetadataEntry\">\n            <summary>\n            Represents an aiMetadataEntry struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadataEntry.DataType\">\n            <summary>\n            Type of metadata.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadataEntry.Data\">\n            <summary>\n            Pointer to data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMetadata\">\n            <summary>\n            Represents an aiMetadata struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.NumProperties\">\n            <summary>\n            Length of the Keys and Values arrays.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.keys\">\n            <summary>\n            aiString*, array of keys. May not be NULL. Each entry must exist.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMetadata.Values\">\n            <summary>\n            aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMesh\">\n            <summary>\n            Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.PrimitiveTypes\">\n            <summary>\n            unsigned int, bitwise flag detailing types of primitives contained.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumVertices\">\n            <summary>\n            Number of vertices in the mesh, denotes length of\n            -all- per-vertex arrays.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumFaces\">\n            <summary>\n            Number of faces in the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Vertices\">\n            <summary>\n            aiVector3D*, array of positions.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Normals\">\n            <summary>\n            aiVector3D*, array of normals.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Tangents\">\n            <summary>\n            aiVector3D*, array of tangents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.BiTangents\">\n            <summary>\n            aiVector3D*, array of bitangents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Colors\">\n            <summary>\n            aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.TextureCoords\">\n            <summary>\n            aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumUVComponents\">\n            <summary>\n            unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example.\n            Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Faces\">\n            <summary>\n            aiFace*, array of faces.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumBones\">\n            <summary>\n            Number of bones in the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Bones\">\n            <summary>\n            aiBone**, array of bones.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.MaterialIndex\">\n            <summary>\n            Material index referencing the material in the scene.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.Name\">\n            <summary>\n            Optional name of the mesh.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.NumAnimMeshes\">\n            <summary>\n            Number of attachment meshes. NOT CURRENTLY IN USE.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.AnimMeshes\">\n            <summary>\n            aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.MorphMethod\">\n            <summary>\n            unsigned int, method of morphing when anim meshes are specified.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.AABB\">\n            <summary>\n            Axis aligned bounding box.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMesh.TextureCoordsNames\">\n            <summary>\n            aiString[Max_Value], pointer to array of texture coordinate names. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiTexture\">\n            <summary>\n            Represents an aiTexture struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Width\">\n            <summary>\n            Width of the texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Height\">\n            <summary>\n            Height of the texture.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.FormatHint\">\n            <summary>\n            sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that\n            maps to one byte. 8 for string + 1 for terminator.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Data\">\n            <summary>\n            aiTexel*, array of texel data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiTexture.Filename\">\n            <summary>\n            Texture original filename.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.SetFormatHint(System.String)\">\n            <summary>\n            Sets the format hint.\n            </summary>\n            <param name=\"formatHint\">Format hint - must be 3 characters or less</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.GetFormatHint\">\n            <summary>\n            Gets the format hint.\n            </summary>\n            <returns>The format hint</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiTexture.GetFormatHint(Assimp.Unmanaged.AiTexture@)\">\n            <summary>\n            Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref.\n            </summary>\n            <param name=\"aiTex\">AiTexture</param>\n            <returns>The format hint</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFace\">\n            <summary>\n            Represents an aiFace struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFace.NumIndices\">\n            <summary>\n            Number of indices in the face.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFace.Indices\">\n            <summary>\n            unsigned int*, array of indices.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiBone\">\n            <summary>\n            Represents an aiBone struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Name\">\n            <summary>\n            Name of the bone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.NumWeights\">\n            <summary>\n            Number of weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Armature\">\n            <summary>\n            Bone armature, used for skeleton conversion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Node\">\n            <summary>\n            Bone needed in scene, used for skeleton conversion.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.Weights\">\n            <summary>\n            VertexWeight*, array of vertex weights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiBone.OffsetMatrix\">\n            <summary>\n            Matrix that transforms the vertex from mesh to bone space in bind pose\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMaterialProperty\">\n            <summary>\n            Represents an aiMaterialProperty struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Key\">\n            <summary>\n            Name of the property (key).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Semantic\">\n            <summary>\n            Textures: Specifies texture usage. None texture properties\n            have this zero (or None).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Index\">\n            <summary>\n            Textures: Specifies the index of the texture. For non-texture properties\n            this is always zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.DataLength\">\n            <summary>\n            Size of the buffer data in bytes. This value may not be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Type\">\n            <summary>\n            Type of value contained in the buffer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterialProperty.Data\">\n            <summary>\n            char*, byte buffer to hold the property's value.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMaterial\">\n            <summary>\n            Represents an aiMaterial struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.Properties\">\n            <summary>\n            aiMaterialProperty**, array of material properties.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.NumProperties\">\n            <summary>\n            Number of key-value properties.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMaterial.NumAllocated\">\n            <summary>\n            Storage allocated for key-value properties.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiNodeAnim\">\n            <summary>\n            Represents an aiNodeAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NodeName\">\n            <summary>\n            Name of the node affected by the animation. The node must exist\n            and be unique.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumPositionKeys\">\n            <summary>\n            Number of position keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.PositionKeys\">\n            <summary>\n            VectorKey*, position keys of this animation channel. Positions\n            are 3D vectors and are accompanied by at least one scaling and one rotation key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumRotationKeys\">\n            <summary>\n            The number of rotation keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.RotationKeys\">\n            <summary>\n            QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions).\n            If there are rotation keys there will be at least one scaling and one position key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.NumScalingKeys\">\n            <summary>\n            Number of scaling keys.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.ScalingKeys\">\n            <summary>\n            VectorKey*, scaling keys of this animation channel. Scalings are specified as a\n            3D vector, and if there are scaling keys, there will at least be one position\n            and one rotation key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.Prestate\">\n            <summary>\n            Defines how the animation behaves before the first key is encountered.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiNodeAnim.PostState\">\n            <summary>\n            Defines how the animation behaves after the last key was processed.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshAnim\">\n            <summary>\n            Represents an aiMeshAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.Name\">\n            <summary>\n            Name of the mesh to be animated. Empty string not allowed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.NumKeys\">\n            <summary>\n            Number of keys, there is at least one.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshAnim.Keys\">\n            <summary>\n            aiMeshkey*, the key frames of the animation. There must exist at least one.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshMorphKey\">\n            <summary>\n            Represents an aiMeshMorphKey struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Values\">\n            <summary>\n            unsigned int*, values at the time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.Weights\">\n            <summary>\n            double*, weights at the time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphKey.NumValuesAndWeights\">\n            <summary>\n            unsigned int, the number of values/weights.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshMorphAnim\">\n            <summary>\n            Represents an aiMeshMorphAnim struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.Name\">\n            <summary>\n            aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely,\n            the name can basically serve as a wildcard to select a group of meshes with similar animation setup).\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.NumKeys\">\n            <summary>\n            unsigned int, number of key frames. Must be at least one.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMeshMorphAnim.Keys\">\n            <summary>\n            aiMeshMorphKey*, key frames of the animation.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiAnimation\">\n            <summary>\n            Represents an aiAnimation struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Name\">\n            <summary>\n            Name of the animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Duration\">\n            <summary>\n            Duration of the animation in ticks.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.TicksPerSecond\">\n            <summary>\n            Ticks per second, 0 if not specified in imported file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumChannels\">\n            <summary>\n            Number of bone animation channels, each channel affects a single node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.Channels\">\n            <summary>\n            aiNodeAnim**, node animation channels. Each channel affects a single node.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumMeshChannels\">\n            <summary>\n            Number of mesh animation channels. Each channel affects a single mesh and defines\n            vertex-based animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.MeshChannels\">\n            <summary>\n            aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. \n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.NumMeshMorphChannels\">\n            <summary>\n            Number of mesh morph animation channels. Each channel affects a single mesh and defines\n            morphing animation.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimation.MeshMorphChannels\">\n            <summary>\n            aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. \n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLight\">\n            <summary>\n            Represents an aiLight struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Name\">\n            <summary>\n            Name of the light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Type\">\n            <summary>\n            Type of light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Position\">\n            <summary>\n            Position of the light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Direction\">\n            <summary>\n            Direction of the spot/directional light.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.Up\">\n            <summary>\n            Up direction of the light source in space. Undefined for point lights.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationConstant\">\n            <summary>\n            Attenuation constant value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationLinear\">\n            <summary>\n            Attenuation linear value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AttenuationQuadratic\">\n            <summary>\n            Attenuation quadratic value.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorDiffuse\">\n            <summary>\n            Diffuse color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorSpecular\">\n            <summary>\n            Specular color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.ColorAmbient\">\n            <summary>\n            Ambient color.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AngleInnerCone\">\n            <summary>\n            Spot light inner angle.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AngleOuterCone\">\n            <summary>\n            Spot light outer angle.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLight.AreaSize\">\n            <summary>\n            Width (X) and Height (Y) of the area that represents an <see cref=\"F:Assimp.LightSourceType.Area\"/> light.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiCamera\">\n            <summary>\n            Represents an aiCamera struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Name\">\n            <summary>\n            Name of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Position\">\n            <summary>\n            Position of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Up\">\n            <summary>\n            Up vector of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.LookAt\">\n            <summary>\n            Viewing direction of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.HorizontalFOV\">\n            <summary>\n            Field Of View of the camera.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.ClipPlaneNear\">\n            <summary>\n            Near clip plane distance.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.ClipPlaneFar\">\n            <summary>\n            Far clip plane distance.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiCamera.Aspect\">\n            <summary>\n            The Aspect ratio.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiString\">\n            <summary>\n            Represents an aiString struct.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiString.Length\">\n            <summary>\n            Byte length of the UTF-8 string, NOT logical length.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiString.Data\">\n            <summary>\n            Actual string data.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.#ctor(System.String)\">\n            <summary>\n            Constructs a new instance of the <see cref=\"T:Assimp.Unmanaged.AiString\"/> struct.\n            </summary>\n            <param name=\"data\">The string data</param>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.GetString(Assimp.Unmanaged.AiString@)\">\n            <summary>\n            Convienence method for getting the AiString string - if the length is not greater than zero, it returns\n            an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref.\n            </summary>\n            <param name=\"aiStr\">AiString</param>\n            <returns>AiString string data</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.GetString\">\n            <summary>\n            Convienence method for getting the AiString string - if the length is not greater than zero, it returns\n            an empty string rather than garbage.\n            </summary>\n            <returns>AiString string data</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.SetString(System.String)\">\n            <summary>\n            Convienence method for setting the AiString string (and length).\n            </summary>\n            <param name=\"data\">String data to set</param>\n            <returns>True if the operation was successful, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.Unmanaged.AiString.ToString\">\n            <summary>\n            Returns the fully qualified type name of this instance.\n            </summary>\n            <returns>A <see cref=\"T:System.String\" /> containing a fully qualified type name.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLogStream\">\n            <summary>\n            Represents a log stream, which receives all log messages and streams them somewhere.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLogStream.Callback\">\n            <summary>\n            Function pointer that gets called when a message is to be logged.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiLogStream.UserData\">\n            <summary>\n            char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMemoryInfo\">\n            <summary>\n            Represents the memory requirements for the different components of an imported\n            scene. All sizes in in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Textures\">\n            <summary>\n            Size of the storage allocated for texture data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Materials\">\n            <summary>\n            Size of the storage allocated for material data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Meshes\">\n            <summary>\n            Size of the storage allocated for mesh data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Nodes\">\n            <summary>\n            Size of the storage allocated for node data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Animations\">\n            <summary>\n            Size of the storage allocated for animation data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Cameras\">\n            <summary>\n            Size of the storage allocated for camera data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Lights\">\n            <summary>\n            Size of the storage allocated for light data, in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiMemoryInfo.Total\">\n            <summary>\n            Total storage allocated for the imported scene, in bytes.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiAnimMesh\">\n            <summary>\n            Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Name\">\n            <summary>\n            Anim Mesh name \n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Vertices\">\n            <summary>\n            aiVector3D*, replacement position array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Normals\">\n            <summary>\n            aiVector3D*, replacement normal array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Tangents\">\n            <summary>\n            aiVector3D*, replacement tangent array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.BiTangents\">\n            <summary>\n            aiVector3D*, replacement bitangent array.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Colors\">\n            <summary>\n            aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.TextureCoords\">\n            <summary>\n            aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.NumVertices\">\n            <summary>\n            unsigned int, number of vertices.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiAnimMesh.Weight\">\n            <summary>\n            float, weight of the AnimMesh.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiImporterDesc\">\n            <summary>\n            Describes a variety of information about an importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Name\">\n            <summary>\n            char*, full name of the importer (e.g. Blender3D Importer)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Author\">\n            <summary>\n            char*, original author (blank if unknown or assimp team)\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Maintainer\">\n            <summary>\n            char*, current maintainer, left blank if the author maintains.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Comments\">\n            <summary>\n            char*, implementation comments. E.g. unimplemented features.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.Flags\">\n            <summary>\n            unsigned int, features supported by the importer.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MinMajor\">\n            <summary>\n            unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MinMinor\">\n            <summary>\n            unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MaxMajor\">\n            <summary>\n            unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.MaxMinor\">\n            <summary>\n            unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiImporterDesc.FileExtensions\">\n            <summary>\n            char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. \"xml dae\").\n            Multiple importers may respond to the same file extension, assim\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiExportFormatDesc\">\n            <summary>\n            Describes a file format which Assimp can export to.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.FormatId\">\n            <summary>\n            char*, a short string ID to uniquely identify the export format. e.g. \"collada\" or \"obj\"\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.Description\">\n            <summary>\n            char*, a short description of the file format to present to users.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportFormatDesc.FileExtension\">\n            <summary>\n            char*, a recommended file extension of the exported file in lower case.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiExportDataBlob\">\n            <summary>\n            Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested\n            blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Size\">\n            <summary>\n            size_t, size of the data in bytes.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Data\">\n            <summary>\n            void*, the data.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.Name\">\n            <summary>\n            AiString, name of the blob.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiExportDataBlob.NextBlob\">\n            <summary>\n            aiExportDataBlob*, pointer to the next blob in the chain.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileIO\">\n            <summary>\n            Contains callbacks to implement a custom file system to open and close files.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.OpenProc\">\n            <summary>\n            Function pointer to open a new file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.CloseProc\">\n            <summary>\n            Function pointer used to close an existing file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFileIO.UserData\">\n            <summary>\n            Char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFile\">\n            <summary>\n            Contains callbacks to read and write to a file opened by a custom file system.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.ReadProc\">\n            <summary>\n            Function pointer to read from a file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.WriteProc\">\n            <summary>\n            Function pointer to write to a file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.TellProc\">\n            <summary>\n            Function pointer to retrieve the current position of the file cursor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.FileSizeProc\">\n            <summary>\n            Function pointer to retrieve the size of the file.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.SeekProc\">\n            <summary>\n            Function pointer to set the current position of the file cursor.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.FlushProc\">\n            <summary>\n            Function pointer to flush the file contents.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Unmanaged.AiFile.UserData\">\n            <summary>\n            Char*, user defined opaque data.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiLogStreamCallback\">\n            <summary>\n            Callback delegate for Assimp's LogStream.\n            </summary>\n            <param name=\"msg\">Log message</param>\n            <param name=\"userData\">char* pointer to user data that is passed to the callback</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileWriteProc\">\n            <summary>\n            Callback delegate for a custom file system, to write to a file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance</param>\n            <param name=\"dataToWrite\">Char* pointer to data to write (casted from a void*)</param>\n            <param name=\"sizeOfElemInBytes\">Size of a single element in bytes to write</param>\n            <param name=\"numElements\">Number of elements to write</param>\n            <returns>Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileReadProc\">\n            <summary>\n            Callback delegate for a custom file system, to read from a file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n            <param name=\"dataToRead\">Char* pointer that will store the data read (casted from a void*)</param>\n            <param name=\"sizeOfElemInBytes\">Size of a single element in bytes to read</param>\n            <param name=\"numElements\">Number of elements to read</param>\n            <returns>Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileTellProc\">\n            <summary>\n            Callback delegate for a custom file system, to tell offset/size information about the file.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n            <returns>Returns the current file cursor or the file size in bytes. May be -1 if an error has occured.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileFlushProc\">\n            <summary>\n            Callback delegate for a custom file system, to flush the contents of the file to the disk.\n            </summary>\n            <param name=\"file\">Pointer to an AiFile instance.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileSeek\">\n            <summary>\n            Callback delegate for a custom file system, to set the current position of the file cursor.\n            </summary>\n            <param name=\"file\">Pointer to An AiFile instance.</param>\n            <param name=\"offset\">Offset from the origin.</param>\n            <param name=\"seekOrigin\">Position used as a reference</param>\n            <returns>Returns success, if successful</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileOpenProc\">\n            <summary>\n            Callback delegate for a custom file system, to open a given file and create a new AiFile instance.\n            </summary>\n            <param name=\"fileIO\">Pointer to an AiFileIO instance.</param>\n            <param name=\"pathToFile\">Path to the target file</param>\n            <param name=\"mode\">Read-write permissions to request</param>\n            <returns>Pointer to an AiFile instance.</returns>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiFileCloseProc\">\n            <summary>\n            Callback delegate for a custom file system, to close a given file and free its memory.\n            </summary>\n            <param name=\"fileIO\">Pointer to an AiFileIO instance.</param>\n            <param name=\"file\">Pointer to an AiFile instance that will be closed.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshColorArray\">\n            <summary>\n            Fixed length array for representing the color channels of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_COLOR_SETS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshColorArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshColorArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshTextureCoordinateArray\">\n            <summary>\n            Fixed length array for representing the texture coordinate channels of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshTextureCoordinateArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshTextureCoordinateArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.Unmanaged.AiMeshUVComponentArray\">\n            <summary>\n            Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal\n            to <see cref=\"F:Assimp.Unmanaged.AiDefines.AI_MAX_NUMBER_OF_TEXTURECOORDS\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshUVComponentArray.Length\">\n            <summary>\n            Gets the length of the array.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Unmanaged.AiMeshUVComponentArray.Item(System.Int32)\">\n            <summary>\n            Gets or sets an array value at the specified index.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n        </member>\n        <member name=\"T:Assimp.UVTransform\">\n            <summary>\n            Defines how an UV channel is transformed.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Translation\">\n            <summary>\n            Translation on the U and V axes. Default is 0|0\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Scaling\">\n            <summary>\n            Scaling on the U and V axes. Default is 1|1.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.UVTransform.Rotation\">\n            <summary>\n            Rotation in counter-clockwise direction, specfied in\n            radians. The rotation center is 0.5f|0.5f and the\n            default value is zero.\n            </summary>\n        </member>\n        <member name=\"T:Assimp.Vector2D\">\n            <summary>\n            Represents a two-dimensional vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector2D.X\">\n            <summary>\n            X component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector2D.Y\">\n            <summary>\n            Y component\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Vector2D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of XY (index 0 access X, 1 access Y. If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.#ctor(System.Single,System.Single)\">\n            <summary>\n            Constructs a new Vector2D.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.#ctor(System.Single)\">\n            <summary>\n            Constructs a new Vector2D with both components\n            set the same value.\n            </summary>\n            <param name=\"value\">Value to set both X and Y to</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Set(System.Single,System.Single)\">\n            <summary>\n            Sets the X and Y values.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Length\">\n            <summary>\n            Calculates the length of the vector.\n            </summary>\n            <returns>Vector's length</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.LengthSquared\">\n            <summary>\n            Calculates the length of the vector squared.\n            </summary>\n            <returns>Vector's length squared</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Normalize\">\n            <summary>\n            Normalizes the vector where all components add to one (Unit Vector), but preserves\n            the direction that the vector represents.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Negate\">\n            <summary>\n            Negates the vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Addition(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Adds two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Added vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Subtraction(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Subtracts the second vector from the first vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Multiplies two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Multiplied vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Multiply(System.Single,Assimp.Vector2D)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source vector</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Division(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Divides the first vector by the second vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Division(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Divides the vector by a divisor value.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_UnaryNegation(Assimp.Vector2D)\">\n            <summary>\n            Negates the vector.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <returns>Negated vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Equality(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Tests equality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.op_Inequality(Assimp.Vector2D,Assimp.Vector2D)\">\n            <summary>\n            Tests inequality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Equals(Assimp.Vector2D)\">\n            <summary>\n            Tests equality between this vector and another vector.\n            </summary>\n            <param name=\"other\">Vector to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Vector2D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.Vector3D\">\n            <summary>\n            Represents a three-dimensional vector.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.X\">\n            <summary>\n            X component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.Y\">\n            <summary>\n            Y component.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.Vector3D.Z\">\n            <summary>\n            Z component.\n            </summary>\n        </member>\n        <member name=\"P:Assimp.Vector3D.Item(System.Int32)\">\n            <summary>\n            Gets or sets the component value at the specified zero-based index\n            in the order of XYZ (index 0 access X, 1 access Y, etc). If\n            the index is not in range, a value of zero is returned.\n            </summary>\n            <param name=\"index\">Zero-based index.</param>\n            <returns>The component value</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(System.Single,System.Single,System.Single)\">\n            <summary>\n            Constructs a new Vector3D.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(Assimp.Vector2D,System.Single)\">\n            <summary>\n            Constructs a new Vector3D.\n            </summary>\n            <param name=\"value\">Vector2D containing the X, Y values</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.#ctor(System.Single)\">\n            <summary>\n            Constructs a new Vector3D where each component is set\n            to the same value.\n            </summary>\n            <param name=\"value\">Value to set X, Y, and Z to</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Set(System.Single,System.Single,System.Single)\">\n            <summary>\n            Sets the X, Y, and Z values.\n            </summary>\n            <param name=\"x\">X component</param>\n            <param name=\"y\">Y component</param>\n            <param name=\"z\">Z component</param>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Length\">\n            <summary>\n            Calculates the length of the vector.\n            </summary>\n            <returns>Vector's length</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.LengthSquared\">\n            <summary>\n            Calculates the length of the vector squared.\n            </summary>\n            <returns>Vector's length squared</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Normalize\">\n            <summary>\n            Normalizes the vector where all components add to one (Unit Vector), but preserves\n            the direction that the vector represents.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Negate\">\n            <summary>\n            Negates the vector.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Cross(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Calculates the cross product of two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Dot(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Calculates the dot product of two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Addition(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Adds two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Added vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Subtraction(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Subtracts the second vector from the first vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Resulting vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Multiplies two vectors together.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Multiplied vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"scale\">Scalar value</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(System.Single,Assimp.Vector3D)\">\n            <summary>\n            Multiplies a vector by a scalar.\n            </summary>\n            <param name=\"scale\">Scalar value</param>\n            <param name=\"value\">Source vector</param>\n            <returns>Scaled vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Matrix3x3,Assimp.Vector3D)\">\n            <summary>\n            Transforms this vector by a 3x3 matrix. This \"post-multiplies\" the two.\n            </summary>\n            <param name=\"matrix\">Source matrix</param>\n            <param name=\"vector\">Source vector</param>\n            <returns>Transformed vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Multiply(Assimp.Matrix4x4,Assimp.Vector3D)\">\n            <summary>\n            Transforms this vector by a 4x4 matrix. This \"post-multiplies\" the two.\n            </summary>\n            <param name=\"matrix\">Source matrix</param>\n            <param name=\"vector\">Source vector</param>\n            <returns>Transformed vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Division(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Divides the first vector by the second vector.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Division(Assimp.Vector3D,System.Single)\">\n            <summary>\n            Divides the vector by a divisor value.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <param name=\"divisor\">Divisor</param>\n            <returns>Divided vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_UnaryNegation(Assimp.Vector3D)\">\n            <summary>\n            Negates the vector.\n            </summary>\n            <param name=\"value\">Source vector</param>\n            <returns>Negated vector</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Equality(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Tests equality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.op_Inequality(Assimp.Vector3D,Assimp.Vector3D)\">\n            <summary>\n            Tests inequality between two vectors.\n            </summary>\n            <param name=\"a\">First vector</param>\n            <param name=\"b\">Second vector</param>\n            <returns>True if the vectors are not equal, false otherwise</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Equals(Assimp.Vector3D)\">\n            <summary>\n            Tests equality between this vector and another vector.\n            </summary>\n            <param name=\"other\">Vector to test against</param>\n            <returns>True if components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.Equals(System.Object)\">\n            <summary>\n            Tests equality between this vector and another object.\n            </summary>\n            <param name=\"obj\">Object to test against</param>\n            <returns>True if the object is a vector and the components are equal</returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.Vector3D.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.VectorKey\">\n            <summary>\n            Time-value pair specifying a 3D vector for a given time.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VectorKey.Time\">\n            <summary>\n            The time of this key.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VectorKey.Value\">\n            <summary>\n            The 3D vector value of this key.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.VectorKey.#ctor(System.Double,Assimp.Vector3D)\">\n            <summary>\n            Constructs a new VectorKey.\n            </summary>\n            <param name=\"time\">The time of this key.</param>\n            <param name=\"vector\">The 3D vector value of this key.</param>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_Equality(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests equality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's 3D vectors are the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_Inequality(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the key's 3D vectors are not the same, false otherwise.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_LessThan(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is less than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.op_GreaterThan(Assimp.VectorKey,Assimp.VectorKey)\">\n            <summary>\n            Tests inequality between two keys.\n            </summary>\n            <param name=\"a\">The first key</param>\n            <param name=\"b\">The second key</param>\n            <returns>True if the first key's time is greater than the second key's.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <see cref=\"T:System.Object\"/> is equal to this instance.\n            </summary>\n            <param name=\"obj\">The <see cref=\"T:System.Object\"/> to compare with this instance.</param>\n            <returns>\n              <c>true</c> if the specified <see cref=\"T:System.Object\"/> is equal to this instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.Equals(Assimp.VectorKey)\">\n            <summary>\n            Tests equality between this key and another.\n            </summary>\n            <param name=\"key\">Other key to test</param>\n            <returns>True if their 3D vectors are equal.</returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.GetHashCode\">\n            <summary>\n            Returns a hash code for this instance.\n            </summary>\n            <returns>\n            A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. \n            </returns>\n        </member>\n        <member name=\"M:Assimp.VectorKey.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.VertexWeight\">\n            <summary>\n            Represents a single influence of a bone on a vertex.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VertexWeight.VertexID\">\n            <summary>\n            Index of the vertex which is influenced by the bone.\n            </summary>\n        </member>\n        <member name=\"F:Assimp.VertexWeight.Weight\">\n            <summary>\n            Strength of the influence in range of (0...1). All influences\n            from all bones at one vertex amounts to 1.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.VertexWeight.#ctor(System.Int32,System.Single)\">\n            <summary>\n            Constructs a new VertexWeight.\n            </summary>\n            <param name=\"vertID\">Index of the vertex.</param>\n            <param name=\"weight\">Weight of the influence.</param>\n        </member>\n        <member name=\"M:Assimp.VertexWeight.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents this instance.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents this instance.\n            </returns>\n        </member>\n        <member name=\"T:Assimp.MemoryInterop\">\n            <summary>\n            Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or\n            replaces the entire method body. Recommended types to use are generally blittable structs.\n            </summary>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.As``2(``0@)\">\n            <summary>\n            Casts the by-ref value from one type to another.\n            </summary>\n            <typeparam name=\"TFrom\">Type to cast from.</typeparam>\n            <typeparam name=\"TTo\">Type to cast to.</typeparam>\n            <param name=\"source\">By-ref value.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsReadonly``2(``0@)\">\n            <summary>\n            Casts the readonly by-ref value from one type to another.\n            </summary>\n            <typeparam name=\"TFrom\">Type to cast from.</typeparam>\n            <typeparam name=\"TTo\">Type to cast to.</typeparam>\n            <param name=\"source\">By-ref value.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsRef``1(System.IntPtr)\">\n            <summary>\n            Casts the pointer to a by-ref value of the specified type.\n            </summary>\n            <typeparam name=\"T\">Type to cast to.</typeparam>\n            <param name=\"pSrc\">Pointer.</param>\n            <returns>Ref to the value, as the new type.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteArray``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDest\">Pointer to memory location to receive the data.</param>\n            <param name=\"data\">Array containing data to write.</param>\n            <param name=\"startIndex\">Zero-based index to start reading data from the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteArrayUnaligned``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDest\">Pointer to memory location to write the data.</param>\n            <param name=\"data\">Array containing data to write.</param>\n            <param name=\"startIndex\">Zero-based index to start reading data from the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadArray``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location to read the data.</param>\n            <param name=\"data\">Array to store the copied data.</param>\n            <param name=\"startIndex\">Zero-based index to start writing data to in the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadArrayUnaligned``1(System.IntPtr,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location to read the data.</param>\n            <param name=\"data\">Array to store the copied data.</param>\n            <param name=\"startIndex\">Zero-based index to start writing data to in the array.</param>\n            <param name=\"count\">Number of elements to copy.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.SizeOfInline``1\">\n            <summary>\n            Computes the size of the type (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <returns>Size of the type in bytes.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsPointerInline``1(``0@)\">\n            <summary>\n            Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"src\">Ref to a value.</param>\n            <returns>Pointer to the memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.AsPointerReadonlyInline``1(``0@)\">\n            <summary>\n            Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning.\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"src\">Ref to a value.</param>\n            <returns>Pointer to the memory location.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteInline``1(System.Void*,``0@)\">\n            <summary>\n            Writes a single element to the memory location (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDst\">Pointer to memory location.</param>\n            <param name=\"src\">Value to be written.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.WriteUnalignedInline``1(System.Void*,``0@)\">\n            <summary>\n            Writes a single element to the memory location (inlined, unaligned copy).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pDst\">Pointer to memory location.</param>\n            <param name=\"src\">Value to be written.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadInline``1(System.Void*)\">\n            <summary>\n            Reads a single element from the memory location (inlined).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location.</param>\n            <returns>Value read.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.ReadUnalignedInline``1(System.Void*)\">\n            <summary>\n            Reads a single element from the memory location (inlined, unaligned copy).\n            </summary>\n            <typeparam name=\"T\">Type of data.</typeparam>\n            <param name=\"pSrc\">Pointer to memory location.</param>\n            <returns>Value read.</returns>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemCopyInline(System.Void*,System.Void*,System.UInt32)\">\n            <summary>\n            Copies the number of bytes from one pointer to the other (inlined).\n            </summary>\n            <param name=\"pDest\">Pointer to the destination memory location.</param>\n            <param name=\"pSrc\">Pointer to the source memory location</param>\n            <param name=\"byteCount\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemCopyUnalignedInline(System.Void*,System.Void*,System.UInt32)\">\n            <summary>\n            Copies the number of bytes from one pointer to the other (inlined, unaligned copy).\n            </summary>\n            <param name=\"pDest\">Pointer to the destination memory location.</param>\n            <param name=\"pSrc\">Pointer to the source memory location</param>\n            <param name=\"byteCount\">Number of bytes to copy</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemSetInline(System.Void*,System.Byte,System.UInt32)\">\n            <summary>\n            Clears the memory to a specified value (inlined).\n            </summary>\n            <param name=\"ptr\">Pointer to the memory location.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"byteCount\">Number of bytes to to set.</param>\n        </member>\n        <member name=\"M:Assimp.MemoryInterop.MemSetUnalignedInline(System.Void*,System.Byte,System.UInt32)\">\n            <summary>\n            Clears the memory to a specified value (inlined, unaligned init).\n            </summary>\n            <param name=\"ptr\">Pointer to the memory location.</param>\n            <param name=\"clearValue\">Value the memory will be cleared to.</param>\n            <param name=\"byteCount\">Number of bytes to to set.</param>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "ThirdParty/GamepadConfig/GamepadConfig.exe.config",
    "content": "<?xml version=\"1.0\"?>\n<configuration>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0,Profile=Client\"/></startup></configuration>\n"
  },
  {
    "path": "ThirdParty/GamepadConfig/License.txt",
    "content": "These files can be used for commercial and non-commercial projects that makes use of MonoGame."
  },
  {
    "path": "ThirdParty/GamepadConfig/Settings.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Settings xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n</Settings>"
  },
  {
    "path": "ThirdParty/GamepadConfig/Tao.Sdl.dll.config",
    "content": "<configuration>\n    <dllmap dll=\"SDL.dll\" os=\"windows\" target=\"SDL.dll\"/>\n    <dllmap dll=\"SDL.dll\" os=\"osx\" target=\"/Library/Frameworks/SDL.framework/SDL\" />\n    <dllmap dll=\"SDL.dll\" os=\"!windows,osx\" target=\"libSDL-1.2.so.0\"/>\n\n    <dllmap dll=\"SDL_image.dll\" os=\"windows\" target=\"SDL_image.dll\"/>\n    <dllmap dll=\"SDL_image.dll\" os=\"osx\" target=\"/Library/Frameworks/SDL_image.framework/SDL_image\" />\n    <dllmap dll=\"SDL_image.dll\" os=\"!windows,osx\" target=\"libSDL_image-1.2.so.0\" />\n\n    <dllmap dll=\"SDL_mixer.dll\" os=\"windows\" target=\"SDL_mixer.dll\"/>\n    <dllmap dll=\"SDL_mixer.dll\" os=\"osx\" target=\"/Library/Frameworks/SDL_mixer.framework/SDL_mixer\" />\n    <dllmap dll=\"SDL_mixer.dll\" os=\"!windows,osx\" target=\"libSDL_mixer-1.2.so.0\" />\n\n    <dllmap dll=\"SDL_ttf.dll\" os=\"windows\" target=\"SDL_ttf.dll\"/>\n    <dllmap dll=\"SDL_ttf.dll\" os=\"osx\" target=\"/Library/Frameworks/SDL_ttf.framework/SDL_ttf\" />\n    <dllmap dll=\"SDL_ttf.dll\" os=\"!windows,osx\" target=\"libSDL_ttf-2.0.so.0\" />\n\n    <dllmap dll=\"SDL_net.dll\" os=\"windows\" target=\"SDL_net.dll\"/>\n    <dllmap dll=\"SDL_net.dll\" os=\"osx\" target=\"/Library/Frameworks/SDL_net.framework/SDL_net\" />\n    <dllmap dll=\"SDL_net.dll\" os=\"!windows,osx\" target=\"libSDL_net-1.2.so.0\" />\n\n    <dllmap dll=\"smpeg.dll\" os=\"windows\" target=\"smpeg.dll\"/>\n    <dllmap dll=\"smpeg.dll\" os=\"osx\" target=\"/Library/Frameworks/smpeg.framework/smpeg\" />\n    <dllmap dll=\"smpeg.dll\" os=\"!windows,osx\" target=\"libsmpeg-0.4.so.0\" />\n\n    <dllmap dll=\"SDL_gfx.dll\" os=\"windows\" target=\"SDL_gfx.dll\"/>\n    <dllmap dll=\"SDL_gfx.dll\" os=\"osx\" target=\"/Library/Frameworks/SDL_gfx.framework/SDL_gfx\" />\n    <dllmap dll=\"SDL_gfx.dll\" os=\"!windows,osx\" target=\"libSDL_gfx.so.13\" />\n</configuration>\n"
  },
  {
    "path": "ThirdParty/GamepadConfig/Xbox 360 Gamepad.xml",
    "content": "<?xml version=\"1.0\"?>\n<PadConfig xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <JoystickName>潃瑮潲汬牥⠠托硯㌠〶圠物汥獥⁳敒散癩牥映牯圠湩潤獷)</JoystickName>\n  <ID>0</ID>\n  <LeftStick>\n    <X>\n      <Negative>\n        <ID>0</ID>\n        <Type>Axis</Type>\n        <Negative>true</Negative>\n      </Negative>\n      <Positive>\n        <ID>0</ID>\n        <Type>Axis</Type>\n        <Negative>false</Negative>\n      </Positive>\n    </X>\n    <Y>\n      <Negative>\n        <ID>1</ID>\n        <Type>Axis</Type>\n        <Negative>true</Negative>\n      </Negative>\n      <Positive>\n        <ID>1</ID>\n        <Type>Axis</Type>\n        <Negative>false</Negative>\n      </Positive>\n    </Y>\n    <Press>\n      <ID>8</ID>\n      <Type>Button</Type>\n      <Negative>false</Negative>\n    </Press>\n  </LeftStick>\n  <RightStick>\n    <X>\n      <Negative>\n        <ID>0</ID>\n        <Type>None</Type>\n        <Negative>false</Negative>\n      </Negative>\n      <Positive>\n        <ID>0</ID>\n        <Type>None</Type>\n        <Negative>false</Negative>\n      </Positive>\n    </X>\n    <Y>\n      <Negative>\n        <ID>0</ID>\n        <Type>None</Type>\n        <Negative>false</Negative>\n      </Negative>\n      <Positive>\n        <ID>0</ID>\n        <Type>None</Type>\n        <Negative>false</Negative>\n      </Positive>\n    </Y>\n    <Press>\n      <ID>9</ID>\n      <Type>Button</Type>\n      <Negative>false</Negative>\n    </Press>\n  </RightStick>\n  <Dpad>\n    <Up>\n      <ID>0</ID>\n      <Type>PovUp</Type>\n      <Negative>false</Negative>\n    </Up>\n    <Down>\n      <ID>0</ID>\n      <Type>PovDown</Type>\n      <Negative>false</Negative>\n    </Down>\n    <Left>\n      <ID>0</ID>\n      <Type>PovLeft</Type>\n      <Negative>false</Negative>\n    </Left>\n    <Right>\n      <ID>0</ID>\n      <Type>PovRight</Type>\n      <Negative>false</Negative>\n    </Right>\n  </Dpad>\n  <Button_A>\n    <ID>0</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_A>\n  <Button_B>\n    <ID>1</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_B>\n  <Button_X>\n    <ID>2</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_X>\n  <Button_Y>\n    <ID>3</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_Y>\n  <Button_LB>\n    <ID>4</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_LB>\n  <Button_RB>\n    <ID>5</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_RB>\n  <Button_Start>\n    <ID>7</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_Start>\n  <Button_Back>\n    <ID>6</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_Back>\n  <LeftTrigger>\n    <ID>2</ID>\n    <Type>Axis</Type>\n    <Negative>false</Negative>\n  </LeftTrigger>\n  <RightTrigger>\n    <ID>2</ID>\n    <Type>Axis</Type>\n    <Negative>true</Negative>\n  </RightTrigger>\n</PadConfig>"
  },
  {
    "path": "ThirdParty/GamepadConfig/Xbox 360 Wireless Receiver.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PadConfig xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <JoystickName>Xbox 360 Wireless Receiver</JoystickName>\n  <ID>0</ID>\n  <LeftStick>\n    <X>\n      <Negative>\n        <ID>0</ID>\n        <Type>Axis</Type>\n        <Negative>true</Negative>\n      </Negative>\n      <Positive>\n        <ID>0</ID>\n        <Type>Axis</Type>\n        <Negative>false</Negative>\n      </Positive>\n    </X>\n    <Y>\n      <Negative>\n        <ID>1</ID>\n        <Type>Axis</Type>\n        <Negative>true</Negative>\n      </Negative>\n      <Positive>\n        <ID>1</ID>\n        <Type>Axis</Type>\n        <Negative>false</Negative>\n      </Positive>\n    </Y>\n    <Press>\n      <ID>9</ID>\n      <Type>Button</Type>\n      <Negative>false</Negative>\n    </Press>\n  </LeftStick>\n  <RightStick>\n    <X>\n      <Negative>\n        <ID>3</ID>\n        <Type>Axis</Type>\n        <Negative>true</Negative>\n      </Negative>\n      <Positive>\n        <ID>3</ID>\n        <Type>Axis</Type>\n        <Negative>false</Negative>\n      </Positive>\n    </X>\n    <Y>\n      <Negative>\n        <ID>4</ID>\n        <Type>Axis</Type>\n        <Negative>true</Negative>\n      </Negative>\n      <Positive>\n        <ID>4</ID>\n        <Type>Axis</Type>\n        <Negative>false</Negative>\n      </Positive>\n    </Y>\n    <Press>\n      <ID>10</ID>\n      <Type>Button</Type>\n      <Negative>false</Negative>\n    </Press>\n  </RightStick>\n  <Dpad>\n    <Up>\n      <ID>13</ID>\n      <Type>Button</Type>\n      <Negative>false</Negative>\n    </Up>\n    <Down>\n      <ID>14</ID>\n      <Type>Button</Type>\n      <Negative>false</Negative>\n    </Down>\n    <Left>\n      <ID>11</ID>\n      <Type>Button</Type>\n      <Negative>false</Negative>\n    </Left>\n    <Right>\n      <ID>12</ID>\n      <Type>Button</Type>\n      <Negative>false</Negative>\n    </Right>\n  </Dpad>\n  <Button_A>\n    <ID>0</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_A>\n  <Button_B>\n    <ID>1</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_B>\n  <Button_X>\n    <ID>2</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_X>\n  <Button_Y>\n    <ID>3</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_Y>\n  <Button_LB>\n    <ID>4</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_LB>\n  <Button_RB>\n    <ID>5</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_RB>\n  <Button_Start>\n    <ID>7</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_Start>\n  <Button_Back>\n    <ID>6</ID>\n    <Type>Button</Type>\n    <Negative>false</Negative>\n  </Button_Back>\n  <LeftTrigger>\n    <ID>2</ID>\n    <Type>Axis</Type>\n    <Negative>false</Negative>\n  </LeftTrigger>\n  <RightTrigger>\n    <ID>5</ID>\n    <Type>Axis</Type>\n    <Negative>false</Negative>\n  </RightTrigger>\n</PadConfig>"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Documentation/ChangedFromV2.txt",
    "content": "﻿\r\n\r\n* The NetBuffer object is gone; instead there are NetOutgoingMessage and NetIncomingMessage objects\r\n\r\n* No need to allocate a read buffer before calling ReadMessage\r\n\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Documentation/Discovery.html",
    "content": "﻿<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r\n<html>\r\n<head>\r\n\t<style type=\"text/css\">\r\n\t\tbody\r\n\t\t{\r\n\t\t\tfont-family: Verdana, Geneva, Arial, sans-serif;\r\n\t\t\tfont-size: small;\r\n\t\t\tmargin-left: 20px;\r\n\t\t\tbackground-color: #dddddd;\r\n\t\t}\r\n\t\ttd\r\n\t\t{\r\n\t\t\tfont-family: Verdana, Geneva, Arial, sans-serif;\r\n\t\t\tfont-size: small;\r\n\t\t}\r\n\t\t.page\r\n\t\t{\r\n\t\t\twidth: 700px;\r\n\t\t}\r\n\t\t.cf\r\n\t\t{\r\n\t\t\tfont-family: Courier New;\r\n\t\t\tfont-size: 10pt;\r\n\t\t\tcolor: black;\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 16px;\r\n\t\t\tborder: 1px solid black;\r\n\t\t}\r\n\t\t.cl\r\n\t\t{\r\n\t\t\tmargin: 0px;\r\n\t\t}\r\n\t\t.cb1\r\n\t\t{\r\n\t\t\tcolor: green;\r\n\t\t}\r\n\t\t.cb2\r\n\t\t{\r\n\t\t\tcolor: #2b91af;\r\n\t\t}\r\n\t\t.cb3\r\n\t\t{\r\n\t\t\tcolor: blue;\r\n\t\t}\r\n\t\t.cb4\r\n\t\t{\r\n\t\t\tcolor: #a31515;\r\n\t\t}\r\n\t</style>\r\n\t<title>Peer/server discovery</title>\r\n</head>\r\n<body>\r\n\t<table>\r\n\t\t<tr>\r\n\t\t\t<td class=\"page\">\r\n\t\t\t\t<h1>Peer/server discovery</h1>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tPeer discovery is the process of clients detecting what servers are available. Discovery requests can be made in two ways; \r\n\t\t\t\t\tlocally as a broadcast, which will send a signal to all peers on your subnet. Secondly you can contact an ip address directly \r\n\t\t\t\t\tand query it if a server is running.\r\n\t\t\t\t</p>\r\n\t\t\t\t<p>Responding to discovery requests are done in the same way regardless of how the request is made.</p>\r\n\t\t\t\t\r\n\t\t\t\t<p>Here's how to do on the client side; ie. the side which makes a request:</p>\r\n\t\t\t\t<div class=\"cf\">\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb1\">// Enable DiscoveryResponse messages</span></pre>\r\n\t\t\t\t\t<pre class=\"cl\">config.EnableMessageType(<span class=\"cb2\">NetIncomingMessageType</span>.DiscoveryResponse);</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;</pre>\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb1\">// Emit a discovery signal</span></pre>\r\n\t\t\t\t\t<pre class=\"cl\">Client.DiscoverLocalPeers(14242);</pre>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<p>This will send a discovery signal to your subnet; Here's how to receive the signal on the server side, and send a response back to the client:</p>\r\n\r\n<div class=\"cf\">\r\n<pre class=\"cl\"><span class=\"cb1\">// Enable DiscoveryRequest messages</span></pre>\r\n<pre class=\"cl\">config.EnableMessageType(<span class=\"cb2\">NetIncomingMessageType</span>.DiscoveryRequest);</pre>\r\n<pre class=\"cl\">&nbsp;</pre>\r\n<pre class=\"cl\"><span class=\"cb1\">// Standard message reading loop</span></pre>\r\n<pre class=\"cl\"><span class=\"cb3\">while</span> ((inc = Server.ReadMessage()) != <span class=\"cb1\">null</span>)</pre>\r\n<pre class=\"cl\">{</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; <span class=\"cb3\">switch</span> (inc.MessageType)</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; {</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">case</span> <span class=\"cb2\">NetIncomingMessageType</span>.DiscoveryRequest:</pre>\r\n<pre class=\"cl\">&nbsp;</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb1\">// Create a response and write some example data to it</span></pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb2\">NetOutgoingMessage</span> response = Server.CreateMessage();</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; response.Write(<span class=\"cb4\">&quot;My server name&quot;</span>);</pre>\r\n<pre class=\"cl\">&nbsp;</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb1\">// Send the response to the sender of the request</span></pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Server.SendDiscoveryResponse(response, inc.SenderEndpoint);</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">break</span>;</pre>\r\n</div>\r\n\r\n<p>When the response then reaches the client, you can read the data you wrote on the server:</p>\r\n\r\n<div class=\"cf\">\r\n<pre class=\"cl\"><span class=\"cb1\">// Standard message reading loop</span></pre>\r\n<pre class=\"cl\"><span class=\"cb3\">while</span> ((inc = Client.ReadMessage()) != <span class=\"cb1\">null</span>)</pre>\r\n<pre class=\"cl\">{</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; <span class=\"cb3\">switch</span> (inc.MessageType)</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; {</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">case</span> <span class=\"cb2\">NetIncomingMessageType</span>.DiscoveryResponse:</pre>\r\n<pre class=\"cl\">&nbsp;</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb2\">Console</span>.WriteLine(<span class=\"cb4\">&quot;Found server at &quot;</span> + inc.SenderEndpoint + <span class=\"cb4\">&quot; name: &quot;</span> + inc.ReadString());</pre>\r\n<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">break</span>;</pre>\r\n</div>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Documentation/Improvements.txt",
    "content": "﻿\r\nImprovements over last version of library:\r\n\r\n* New delivery type: Reliable sequenced (Lost packets are resent but late arrivals are dropped)\r\n* Disconnects and shutdown requests are now queued properly, so calling shutdown will still send any queued messages before shutting down\r\n* All messages are pooled/recycled for zero garbage\r\n* Reduced CPU usage and lower latencies (in the <1 ms range, but still) due to better socket polling\r\n* All public members of NetPeer/NetConnection are completely thread safe\r\n* Larger number of delivery channels\r\n* More exact roundtrip measurement\r\n* Method serialize entire objects via reflection\r\n* Unique identifier now exists for all peers/connections\r\n* More flexible peer discovery; filters possible and arbitrary data can be sent with response\r\n* Much better protection against malformed messages crashing the app\r\n\r\nAPI enhancements:\r\n* NetPeerConfiguration immutable properties now locked once NetPeer is initialized\r\n* Messages cannot be send twice by accident\r\n* Impossible to confuse sending and receiving buffers since they're different classes\r\n* No more confusion if user should create a buffer or preallocate and reuse\r\n\r\n\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Documentation/PacketLayout.txt",
    "content": "﻿\r\nPER MESSAGE:\r\n7 bits - NetMessageType\r\n1 bit - Is a message fragment?\r\n\r\n[8 bits NetMessageLibraryType, if NetMessageType == Library]\r\n\r\n[16 bits sequence number, if NetMessageType >= UserSequenced]\r\n\r\n8/16 bits - Payload length in bits (variable size ushort)\r\n\r\n[16 bits fragments group id, if fragmented]\r\n[16 bits fragments total count, if fragmented]\r\n[16 bits fragment number, if fragmented]\r\n\r\n[x - Payload] if length > 0\r\n\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Documentation/SimulatingBadNetwork.html",
    "content": "﻿<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r\n<html>\r\n<head>\r\n\t<style type=\"text/css\">\r\n\t\tbody\r\n\t\t{\r\n\t\t\tfont-family: Verdana, Geneva, Arial, sans-serif;\r\n\t\t\tfont-size: small;\r\n\t\t\tmargin-left: 20px;\r\n\t\t\tbackground-color: #dddddd;\r\n\t\t}\r\n\t\ttd\r\n\t\t{\r\n\t\t\tfont-family: Verdana, Geneva, Arial, sans-serif;\r\n\t\t\tfont-size: small;\r\n\t\t}\r\n\t\t.cf\r\n\t\t{\r\n\t\t\tfont-family: Courier New;\r\n\t\t\tfont-size: 10pt;\r\n\t\t\tcolor: black;\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 16px;\r\n\t\t\tborder: 1px solid black;\r\n\t\t}\r\n\t\t.cl\r\n\t\t{\r\n\t\t\tmargin: 0px;\r\n\t\t}\r\n\t\t.cb1\r\n\t\t{\r\n\t\t\tcolor: green;\r\n\t\t}\r\n\t\t.cb2\r\n\t\t{\r\n\t\t\tcolor: #2b91af;\r\n\t\t}\r\n\t\t.cb3\r\n\t\t{\r\n\t\t\tcolor: blue;\r\n\t\t}\r\n\t\t.cb4\r\n\t\t{\r\n\t\t\tcolor: #a31515;\r\n\t\t}\r\n\t</style>\r\n\t<title>Lidgren tutorial</title>\r\n</head>\r\n<body>\r\n\t<table>\r\n\t\t<tr>\r\n\t\t\t<td width=\"700\">\r\n\t\t\t\t<h1>Simulating bad network conditions</h1>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tOn the internet, your packets are likely to run in to all kinds of trouble. They will be delayed and lost and they might even arrive multiple times at the destination. Lidgren has a few option to simulate how your application or game will react when this happens.<br />\r\n\t\t\t\t\tThey are all configured using the NetPeerConfiguration class - these properties exists:</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t<div class=\"cf\">\r\n\t\t\t\t\t<table>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\t<b>SimulatedLoss</b>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\tThis is a float which simulates lost packets. A value of 0 will disable this feature, a value of 0.5f will make half of your sent packets disappear, chosen randomly. Note that packets may contain several messages - this is the amount of packets lost.\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colspan=\"3\">\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\t<b>SimulatedDuplicatesChance</b>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\tThis is a float which determines the chance that a packet will be duplicated at the destination. 0 means no packets will be duplicated, 0.5f means that on average, every other packet will be duplicated.\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colspan=\"3\">\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\t<b>SimulatedMinimumLatency</b><br />\r\n\t\t\t\t\t\t\t\t<b>SimulatedRandomLatency</b>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\tThese two properties control simulating delay of packets in seconds (not milliseconds, use 0.05 for 50 ms of lag). They work on top of the actual network delay and the total delay will be:<br />\r\n\t\t\t\t\t\t\t\tActual one way latency + SimulatedMinimumLatency + [Randomly per packet 0 to SimulatedRandomLatency seconds]\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t\t\r\n\t\t\t\t</div>\r\n\t\t\t\t\t<p>It's recommended to assume symmetric condtions and configure server and client with the same simulation settings.</p>\r\n\t\t\t\t\t<p>Simulating bad network conditions only works in DEBUG builds.</p>\r\n\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Documentation/TODO.txt",
    "content": "﻿\r\nCompleted features:\r\n* Message coalescing\r\n* Peer, connection statistics\r\n* Lag, loss and duplication simulation for testing\r\n* Connection approval\r\n* Throttling\r\n* Clock synchronization to detect jitter per packet (NetTime.RemoteNow)\r\n* Peer discovery\r\n* Message fragmentation\r\n\r\nMissing features:\r\n* Receipts 25% done, need design\r\n* More realistic lag/loss (lumpy)\r\n* Detect estimated packet loss\r\n* More advanced ack packet\r\n\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Documentation/Tutorial.html",
    "content": "﻿<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r\n<html>\r\n<head>\r\n\t<style type=\"text/css\">\r\n\t\tbody\r\n\t\t{\r\n\t\t\tfont-family: Verdana, Geneva, Arial, sans-serif;\r\n\t\t\tfont-size: small;\r\n\t\t\tmargin-left: 20px;\r\n\t\t\tbackground-color: #dddddd;\r\n\t\t}\r\n\t\ttd\r\n\t\t{\r\n\t\t\tfont-family: Verdana, Geneva, Arial, sans-serif;\r\n\t\t\tfont-size: small;\r\n\t\t}\r\n\t\t.cf\r\n\t\t{\r\n\t\t\tfont-family: Courier New;\r\n\t\t\tfont-size: 10pt;\r\n\t\t\tcolor: black;\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 16px;\r\n\t\t\tborder: 1px solid black;\r\n\t\t}\r\n\t\t.cl\r\n\t\t{\r\n\t\t\tmargin: 0px;\r\n\t\t}\r\n\t\t.cb1\r\n\t\t{\r\n\t\t\tcolor: green;\r\n\t\t}\r\n\t\t.cb2\r\n\t\t{\r\n\t\t\tcolor: #2b91af;\r\n\t\t}\r\n\t\t.cb3\r\n\t\t{\r\n\t\t\tcolor: blue;\r\n\t\t}\r\n\t\t.cb4\r\n\t\t{\r\n\t\t\tcolor: #a31515;\r\n\t\t}\r\n\t</style>\r\n\t<title>Lidgren basics tutorial</title>\r\n</head>\r\n<body>\r\n\t<table>\r\n\t\t<tr>\r\n\t\t\t<td width=\"700\">\r\n\t\t\t\t<h1>\r\n\t\t\t\t\tLidgren basics</h1>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLidgren network library is all about messages. There are two types of messages:</p>\r\n\t\t\t\t<li>Library messages telling you things like a peer has connected or diagnostics messages (warnings, errors) when unexpected things happen.</li>\r\n\t\t\t\t<li>Data messages which is data sent from a remote (connected or unconnected) peer.</li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tThe base class for establishing connections, receiving and sending message are the NetPeer class. Using it you can make a peer-to-peer network, but if you are creating a server/client topology there are special classes called NetServer and NetClient. They inherit NetPeer but sets some defaults and includes some helper methods/properties.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tHere's how to set up a NetServer:</p>\r\n\t\t\t\t<div class=\"cf\">\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb2\">NetPeerConfiguration</span> config = <span class=\"cb3\">new</span> <span class=\"cb2\">NetPeerConfiguration</span>(<span class=\"cb4\">&quot;MyExampleName&quot;</span>);</pre>\r\n\t\t\t\t\t<pre class=\"cl\">config.Port = 14242;</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;</pre>\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb2\">NetServer</span> server = <span class=\"cb3\">new</span> <span class=\"cb2\">NetServer</span>(config);</pre>\r\n\t\t\t\t\t<pre class=\"cl\">server.Start();</pre>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tThe code above first creates a configuration. It has lots of properties you can change, but the default values should be pretty good for most applications. The string you provide in the constructor (MyExampleName) is an identifier to distinquish it from other applications using the lidgren library. Just make sure you use the same string in both server and client - or you will be unable to communicate between them.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tSecondly we've set the local port the server should listen to. This is the port number we tell the client(s) what port number to connect to. The local port can be set for a client too, but it's not needed and not recommended.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tThirdly we create our server object and fourth we Start() it. Starting the server will create a new network thread and bind to a socket and start listening for connections.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tEarly on we spoke about messages; now is the time to start receiving and sending some. Here's a code snippet for receiving messages:</p>\r\n\t\t\t\t<div class=\"cf\">\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb2\">NetIncomingMessage</span> msg;</pre>\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb3\">while</span> ((msg = server.ReadMessage()) != <span class=\"cb3\">null</span>)</pre>\r\n\t\t\t\t\t<pre class=\"cl\">{</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; <span class=\"cb3\">switch</span> (msg.MessageType)</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; {</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">case</span> <span class=\"cb2\">NetIncomingMessageType</span>.VerboseDebugMessage:</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">case</span> <span class=\"cb2\">NetIncomingMessageType</span>.DebugMessage:</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">case</span> <span class=\"cb2\">NetIncomingMessageType</span>.WarningMessage:</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">case</span> <span class=\"cb2\">NetIncomingMessageType</span>.ErrorMessage:</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb2\">Console</span>.WriteLine(msg.ReadString());</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">break</span>;</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">default</span>:</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb2\">Console</span>.WriteLine(<span class=\"cb4\">&quot;Unhandled type: &quot;</span> + msg.MessageType);</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span class=\"cb3\">break</span>;</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; }</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;&nbsp;&nbsp; server.Recycle(msg);</pre>\r\n\t\t\t\t\t<pre class=\"cl\">}</pre>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tSo, lets dissect the above code. First we declare a NetIncomingMessage, which is the type of incoming messages. Then we read a message and handles it, looping back as long as there are messages to fetch. For each message we find, we switch on sometime called MessageType - it's a description what the message contains. In this code example we only catch messages of type VerboseDebugMessage, DebugMessage, WarningMessage and ErrorMessage. All those four types are emitted by the library to inform about various events. They all contains a single string, so we use the method ReadString() to extract a copy of that string and print it in the console.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tReading data will increment the internal message pointer so you can read subsequent data using the Read*() methods.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tFor all other message type we just print that it's currently unhandled.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tFinally, we recycle the message after we're done with it - this will enable the library to reuse the object and create less garbage.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tSending messages are even easier:</p>\r\n\t\t\t\t<div class=\"cf\">\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb2\">NetOutgoingMessage</span> sendMsg = server.CreateMessage();</pre>\r\n\t\t\t\t\t<pre class=\"cl\">sendMsg.Write(<span class=\"cb4\">&quot;Hello&quot;</span>);</pre>\r\n\t\t\t\t\t<pre class=\"cl\">sendMsg.Write(42);</pre>\r\n\t\t\t\t\t<pre class=\"cl\">&nbsp;</pre>\r\n\t\t\t\t\t<pre class=\"cl\">server.SendMessage(sendMsg, recipient, <span class=\"cb2\">NetDeliveryMethod</span>.ReliableOrdered);</pre>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tThe above code first creates a new message, or uses a recycled message, which is why it's not possible to just create a message using new(). It then writes a string (\"Hello\") and an integer (System.Int32, 4 bytes in size) to the message.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tThen the message is sent using the SendMessage() method. The first argument is the message to send, the second argument is the recipient connection - which we'll not go into detail about just yet - and the third argument are HOW to deliver the message, or rather how to behave if network conditions are bad and a packet gets lost, duplicated or reordered.</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tThere are five delivery methods available:</p>\r\n\t\t\t\t<div class=\"cf\">\r\n\t\t\t\t\t<table>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\t<b>Unreliable</b>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\tThis is just UDP. Messages can be lost, received more than once and messages sent after other messages may be received before them.\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colspan=\"3\">\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\t<b>UnreliableSequenced</b>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\tUsing this delivery method messages can still be lost; but you're protected against duplicated messages and if a message arrives late; that is, if a message sent after this one has already been received - it will be dropped. This means you will never receive \"older\" data than what you already have received.\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colspan=\"3\">\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\t<b>ReliableUnordered</b>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\tThis delivery method ensures that every message sent will be received eventually. It does not however guarantee what order they will be received; late messages may be delivered before older ones.\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colspan=\"3\">\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\t<b>ReliableSequenced</b>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\tThis delivery method is similar to UnreliableSequenced; except that is guarantees that SOME messages will be received - if you only send one message - it will be received. If you sent two messages quickly, and they get reordered in transit, only the newest message will be received - but at least ONE of them will be received guaranteed.\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colspan=\"3\">\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td valign=\"top\"><b>ReliableOrdered</b></td>\r\n\t\t\t\t\t\t\t<td>&nbsp;</td>\r\n\t\t\t\t\t\t\t<td valign=\"top\">\r\n\t\t\t\t\t\t\t\tThis delivery method guarantees that messages will always be received in the exact order they were sent.\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tHere's how to read and decode the message above:</p>\r\n\t\t\t\t<div class=\"cf\">\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb2\">NetIncomingMessage</span> incMsg = server.ReadMessage();</pre>\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb3\">string</span> str = incMsg.ReadString();</pre>\r\n\t\t\t\t\t<pre class=\"cl\"><span class=\"cb3\">int</span> a = incMsg.ReadInt32();</pre>\r\n\t\t\t\t</div>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetAESEncryption.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Security.Cryptography;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic class NetAESEncryption : NetCryptoProviderBase\r\n\t{\r\n\t\tpublic NetAESEncryption(NetPeer peer)\r\n\t\t\t: base(peer, new AesCryptoServiceProvider())\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic NetAESEncryption(NetPeer peer, string key)\r\n\t\t\t: base(peer, new AesCryptoServiceProvider())\r\n\t\t{\r\n\t\t\tSetKey(key);\r\n\t\t}\r\n\r\n\t\tpublic NetAESEncryption(NetPeer peer, byte[] data, int offset, int count)\r\n\t\t\t: base(peer, new AesCryptoServiceProvider())\r\n\t\t{\r\n\t\t\tSetKey(data, offset, count);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetBlockEncryptionBase.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Base for a non-threadsafe encryption class\r\n\t/// </summary>\r\n\tpublic abstract class NetBlockEncryptionBase : NetEncryption\r\n\t{\r\n\t\t// temporary space for one block to avoid reallocating every time\r\n\t\tprivate byte[] m_tmp;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Block size in bytes for this cipher\r\n\t\t/// </summary>\r\n\t\tpublic abstract int BlockSize { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetBlockEncryptionBase constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetBlockEncryptionBase(NetPeer peer)\r\n\t\t\t: base(peer)\r\n\t\t{\r\n\t\t\tm_tmp = new byte[BlockSize];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encrypt am outgoing message with this algorithm; no writing can be done to the message after encryption, or message will be corrupted\r\n\t\t/// </summary>\r\n\t\tpublic override bool Encrypt(NetOutgoingMessage msg)\r\n\t\t{\r\n\t\t\tint payloadBitLength = msg.LengthBits;\r\n\t\t\tint numBytes = msg.LengthBytes;\r\n\t\t\tint blockSize = BlockSize;\r\n\t\t\tint numBlocks = (int)Math.Ceiling((double)numBytes / (double)blockSize);\r\n\t\t\tint dstSize = numBlocks * blockSize;\r\n\r\n\t\t\tmsg.EnsureBufferSize(dstSize * 8 + (4 * 8)); // add 4 bytes for payload length at end\r\n\t\t\tmsg.LengthBits = dstSize * 8; // length will automatically adjust +4 bytes when payload length is written\r\n\r\n\t\t\tfor(int i=0;i<numBlocks;i++)\r\n\t\t\t{\r\n\t\t\t\tEncryptBlock(msg.m_data, (i * blockSize), m_tmp);\r\n\t\t\t\tBuffer.BlockCopy(m_tmp, 0, msg.m_data, (i * blockSize), m_tmp.Length);\r\n\t\t\t}\r\n\r\n\t\t\t// add true payload length last\r\n\t\t\tmsg.Write((UInt32)payloadBitLength);\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decrypt an incoming message encrypted with corresponding Encrypt\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"msg\">message to decrypt</param>\r\n\t\t/// <returns>true if successful; false if failed</returns>\r\n\t\tpublic override bool Decrypt(NetIncomingMessage msg)\r\n\t\t{\r\n\t\t\tint numEncryptedBytes = msg.LengthBytes - 4; // last 4 bytes is true bit length\r\n\t\t\tint blockSize = BlockSize;\r\n\t\t\tint numBlocks = numEncryptedBytes / blockSize;\r\n\t\t\tif (numBlocks * blockSize != numEncryptedBytes)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tfor (int i = 0; i < numBlocks; i++)\r\n\t\t\t{\r\n\t\t\t\tDecryptBlock(msg.m_data, (i * blockSize), m_tmp);\r\n\t\t\t\tBuffer.BlockCopy(m_tmp, 0, msg.m_data, (i * blockSize), m_tmp.Length);\r\n\t\t\t}\r\n\r\n\t\t\t// read 32 bits of true payload length\r\n\t\t\tuint realSize = NetBitWriter.ReadUInt32(msg.m_data, 32, (numEncryptedBytes * 8));\r\n\t\t\tmsg.m_bitLength = (int)realSize;\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encrypt a block of bytes\r\n\t\t/// </summary>\r\n\t\tprotected abstract void EncryptBlock(byte[] source, int sourceOffset, byte[] destination);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decrypt a block of bytes\r\n\t\t/// </summary>\r\n\t\tprotected abstract void DecryptBlock(byte[] source, int sourceOffset, byte[] destination);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetCryptoProviderBase.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Security.Cryptography;\n\nnamespace Lidgren.Network\n{\n\tpublic abstract class NetCryptoProviderBase : NetEncryption\n\t{\n\t\tprotected SymmetricAlgorithm m_algorithm;\n\n\t\tpublic NetCryptoProviderBase(NetPeer peer, SymmetricAlgorithm algo)\n\t\t\t: base(peer)\n\t\t{\n\t\t\tm_algorithm = algo;\n\t\t\tm_algorithm.GenerateKey();\n\t\t\tm_algorithm.GenerateIV();\n\t\t}\n\n\t\tpublic override void SetKey(byte[] data, int offset, int count)\n\t\t{\n\t\t\tint len = m_algorithm.Key.Length;\n\t\t\tvar key = new byte[len];\n\t\t\tfor (int i = 0; i < len; i++)\n\t\t\t\tkey[i] = data[offset + (i % count)];\n\t\t\tm_algorithm.Key = key;\n\n\t\t\tlen = m_algorithm.IV.Length;\n\t\t\tkey = new byte[len];\n\t\t\tfor (int i = 0; i < len; i++)\n\t\t\t\tkey[len - 1 - i] = data[offset + (i % count)];\n\t\t\tm_algorithm.IV = key;\n\t\t}\n\n\t\tpublic override bool Encrypt(NetOutgoingMessage msg)\n\t\t{\n\t\t\tint unEncLenBits = msg.LengthBits;\n\n\t\t\tvar ms = new MemoryStream();\n\t\t\tvar cs = new CryptoStream(ms, m_algorithm.CreateEncryptor(), CryptoStreamMode.Write);\n\t\t\tcs.Write(msg.m_data, 0, msg.LengthBytes);\n\t\t\tcs.Close();\n\n\t\t\t// get results\n\t\t\tvar arr = ms.ToArray();\n\t\t\tms.Close();\n\n\t\t\tmsg.EnsureBufferSize((arr.Length + 4) * 8);\n\t\t\tmsg.LengthBits = 0; // reset write pointer\n\t\t\tmsg.Write((uint)unEncLenBits);\n\t\t\tmsg.Write(arr);\n\t\t\tmsg.LengthBits = (arr.Length + 4) * 8;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic override bool Decrypt(NetIncomingMessage msg)\n\t\t{\n\t\t\tint unEncLenBits = (int)msg.ReadUInt32();\n\n\t\t\tvar ms = new MemoryStream(msg.m_data, 4, msg.LengthBytes - 4);\n\t\t\tvar cs = new CryptoStream(ms, m_algorithm.CreateDecryptor(), CryptoStreamMode.Read);\n\n\t\t\tvar result = m_peer.GetStorage(unEncLenBits);\n\t\t\tcs.Read(result, 0, NetUtility.BytesToHoldBits(unEncLenBits));\n\t\t\tcs.Close();\n\n\t\t\t// TODO: recycle existing msg\n\n\t\t\tmsg.m_data = result;\n\t\t\tmsg.m_bitLength = unEncLenBits;\n\t\t\tmsg.m_readPosition = 0;\n\n\t\t\treturn true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetDESEncryption.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Security.Cryptography;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic class NetDESEncryption : NetCryptoProviderBase\r\n\t{\r\n\t\tpublic NetDESEncryption(NetPeer peer)\r\n\t\t\t: base(peer, new DESCryptoServiceProvider())\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic NetDESEncryption(NetPeer peer, string key)\r\n\t\t\t: base(peer, new DESCryptoServiceProvider())\r\n\t\t{\r\n\t\t\tSetKey(key);\r\n\t\t}\r\n\r\n\t\tpublic NetDESEncryption(NetPeer peer, byte[] data, int offset, int count)\r\n\t\t\t: base(peer, new DESCryptoServiceProvider())\r\n\t\t{\r\n\t\t\tSetKey(data, offset, count);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetEncryption.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\n\nnamespace Lidgren.Network\n{\n\t/// <summary>\n\t/// Interface for an encryption algorithm\n\t/// </summary>\n\tpublic abstract class NetEncryption\n\t{\n\t\t/// <summary>\n\t\t/// NetPeer\n\t\t/// </summary>\n\t\tprotected NetPeer m_peer;\n\n\t\t/// <summary>\n\t\t/// Constructor\n\t\t/// </summary>\n\t\tpublic NetEncryption(NetPeer peer)\n\t\t{\n\t\t\tif (peer == null)\n\t\t\t\tthrow new NetException(\"Peer must not be null\");\n\t\t\tm_peer = peer;\n\t\t}\n\n\t\tpublic void SetKey(string str)\n\t\t{\n\t\t\tvar bytes = System.Text.Encoding.ASCII.GetBytes(str);\n\t\t\tSetKey(bytes, 0, bytes.Length);\n\t\t}\n\n\t\tpublic abstract void SetKey(byte[] data, int offset, int count);\n\n\t\t/// <summary>\n\t\t/// Encrypt an outgoing message in place\n\t\t/// </summary>\n\t\tpublic abstract bool Encrypt(NetOutgoingMessage msg);\n\n\t\t/// <summary>\n\t\t/// Decrypt an incoming message in place\n\t\t/// </summary>\n\t\tpublic abstract bool Decrypt(NetIncomingMessage msg);\n\t}\n}\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetRC2Encryption.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Security.Cryptography;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic class NetRC2Encryption : NetCryptoProviderBase\r\n\t{\r\n\t\tpublic NetRC2Encryption(NetPeer peer)\r\n\t\t\t: base(peer, new RC2CryptoServiceProvider())\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic NetRC2Encryption(NetPeer peer, string key)\r\n\t\t\t: base(peer, new RC2CryptoServiceProvider())\r\n\t\t{\r\n\t\t\tSetKey(key);\r\n\t\t}\r\n\r\n\t\tpublic NetRC2Encryption(NetPeer peer, byte[] data, int offset, int count)\r\n\t\t\t: base(peer, new RC2CryptoServiceProvider())\r\n\t\t{\r\n\t\t\tSetKey(data, offset, count);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetTripleDESEncryption.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Security.Cryptography;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic class NetTripleDESEncryption : NetCryptoProviderBase\r\n\t{\r\n\t\tpublic NetTripleDESEncryption(NetPeer peer)\r\n\t\t\t: base(peer, new TripleDESCryptoServiceProvider())\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic NetTripleDESEncryption(NetPeer peer, string key)\r\n\t\t\t: base(peer, new TripleDESCryptoServiceProvider())\r\n\t\t{\r\n\t\t\tSetKey(key);\r\n\t\t}\r\n\r\n\t\tpublic NetTripleDESEncryption(NetPeer peer, byte[] data, int offset, int count)\r\n\t\t\t: base(peer, new TripleDESCryptoServiceProvider())\r\n\t\t{\r\n\t\t\tSetKey(data, offset, count);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetXorEncryption.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Example class; not very good encryption\r\n\t/// </summary>\r\n\tpublic class NetXorEncryption : NetEncryption\r\n\t{\r\n\t\tprivate byte[] m_key;\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetXorEncryption constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetXorEncryption(NetPeer peer, byte[] key)\r\n\t\t\t: base(peer)\r\n\t\t{\r\n\t\t\tm_key = key;\r\n\t\t}\r\n\r\n\t\tpublic override void SetKey(byte[] data, int offset, int count)\r\n\t\t{\r\n\t\t\tm_key = new byte[count];\r\n\t\t\tArray.Copy(data, offset, m_key, 0, count);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetXorEncryption constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetXorEncryption(NetPeer peer, string key)\r\n\t\t\t: base(peer)\r\n\t\t{\r\n\t\t\tm_key = Encoding.UTF8.GetBytes(key);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encrypt an outgoing message\r\n\t\t/// </summary>\r\n\t\tpublic override bool Encrypt(NetOutgoingMessage msg)\r\n\t\t{\r\n\t\t\tint numBytes = msg.LengthBytes;\r\n\t\t\tfor (int i = 0; i < numBytes; i++)\r\n\t\t\t{\r\n\t\t\t\tint offset = i % m_key.Length;\r\n\t\t\t\tmsg.m_data[i] = (byte)(msg.m_data[i] ^ m_key[offset]);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decrypt an incoming message\r\n\t\t/// </summary>\r\n\t\tpublic override bool Decrypt(NetIncomingMessage msg)\r\n\t\t{\r\n\t\t\tint numBytes = msg.LengthBytes;\r\n\t\t\tfor (int i = 0; i < numBytes; i++)\r\n\t\t\t{\r\n\t\t\t\tint offset = i % m_key.Length;\r\n\t\t\t\tmsg.m_data[i] = (byte)(msg.m_data[i] ^ m_key[offset]);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Encryption/NetXteaEncryption.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\nusing System;\r\nusing System.Security.Cryptography;\r\nusing System.Text;\r\nusing System.Security;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Methods to encrypt and decrypt data using the XTEA algorithm\r\n\t/// </summary>\r\n\tpublic sealed class NetXtea : NetBlockEncryptionBase\r\n\t{\r\n\t\tprivate const int c_blockSize = 8;\r\n\t\tprivate const int c_keySize = 16;\r\n\t\tprivate const int c_delta = unchecked((int)0x9E3779B9);\r\n\r\n\t\tprivate readonly int m_numRounds;\r\n\t\tprivate readonly uint[] m_sum0;\r\n\t\tprivate readonly uint[] m_sum1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the block size for this cipher\r\n\t\t/// </summary>\r\n\t\tpublic override int BlockSize { get { return c_blockSize; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// 16 byte key\r\n\t\t/// </summary>\r\n\t\tpublic NetXtea(NetPeer peer, byte[] key, int rounds)\r\n\t\t\t: base(peer)\r\n\t\t{\r\n\t\t\tif (key.Length < c_keySize)\r\n\t\t\t\tthrow new NetException(\"Key too short!\");\r\n\r\n\t\t\tm_numRounds = rounds;\r\n\t\t\tm_sum0 = new uint[m_numRounds];\r\n\t\t\tm_sum1 = new uint[m_numRounds];\r\n\t\t\tuint[] tmp = new uint[8];\r\n\r\n\t\t\tint num2;\r\n\t\t\tint index = num2 = 0;\r\n\t\t\twhile (index < 4)\r\n\t\t\t{\r\n\t\t\t\ttmp[index] = BitConverter.ToUInt32(key, num2);\r\n\t\t\t\tindex++;\r\n\t\t\t\tnum2 += 4;\r\n\t\t\t}\r\n\t\t\tfor (index = num2 = 0; index < 32; index++)\r\n\t\t\t{\r\n\t\t\t\tm_sum0[index] = ((uint)num2) + tmp[num2 & 3];\r\n\t\t\t\tnum2 += -1640531527;\r\n\t\t\t\tm_sum1[index] = ((uint)num2) + tmp[(num2 >> 11) & 3];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// 16 byte key\r\n\t\t/// </summary>\r\n\t\tpublic NetXtea(NetPeer peer, byte[] key)\r\n\t\t\t: this(peer, key, 32)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// String to hash for key\r\n\t\t/// </summary>\r\n\t\tpublic NetXtea(NetPeer peer, string key)\r\n\t\t\t: this(peer, NetUtility.CreateSHA1Hash(key), 32)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic override void SetKey(byte[] data, int offset, int length)\r\n\t\t{\r\n\t\t\tvar key = NetUtility.CreateSHA1Hash(data, offset, length);\r\n\t\t\tNetException.Assert(key.Length == 16);\r\n\t\t\tSetKey(key, 0, 16);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encrypts a block of bytes\r\n\t\t/// </summary>\r\n\t\tprotected override void EncryptBlock(byte[] source, int sourceOffset, byte[] destination)\r\n\t\t{\r\n\t\t\tuint v0 = BytesToUInt(source, sourceOffset);\r\n\t\t\tuint v1 = BytesToUInt(source, sourceOffset + 4);\r\n\r\n\t\t\tfor (int i = 0; i != m_numRounds; i++)\r\n\t\t\t{\r\n\t\t\t\tv0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ m_sum0[i];\r\n\t\t\t\tv1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ m_sum1[i];\r\n\t\t\t}\r\n\r\n\t\t\tUIntToBytes(v0, destination, 0);\r\n\t\t\tUIntToBytes(v1, destination, 0 + 4);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decrypts a block of bytes\r\n\t\t/// </summary>\r\n\t\tprotected override void DecryptBlock(byte[] source, int sourceOffset, byte[] destination)\r\n\t\t{\r\n\t\t\t// Pack bytes into integers\r\n\t\t\tuint v0 = BytesToUInt(source, sourceOffset);\r\n\t\t\tuint v1 = BytesToUInt(source, sourceOffset + 4);\r\n\r\n\t\t\tfor (int i = m_numRounds - 1; i >= 0; i--)\r\n\t\t\t{\r\n\t\t\t\tv1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ m_sum1[i];\r\n\t\t\t\tv0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ m_sum0[i];\r\n\t\t\t}\r\n\r\n\t\t\tUIntToBytes(v0, destination, 0);\r\n\t\t\tUIntToBytes(v1, destination, 0 + 4);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tprivate static uint BytesToUInt(byte[] bytes, int offset)\r\n\t\t{\r\n\t\t\tuint retval = (uint)(bytes[offset] << 24);\r\n\t\t\tretval |= (uint)(bytes[++offset] << 16);\r\n\t\t\tretval |= (uint)(bytes[++offset] << 8);\r\n\t\t\treturn (retval | bytes[++offset]);\r\n\t\t}\r\n\r\n\t\tprivate static void UIntToBytes(uint value, byte[] destination, int destinationOffset)\r\n\t\t{\r\n\t\t\tdestination[destinationOffset++] = (byte)(value >> 24);\r\n\t\t\tdestination[destinationOffset++] = (byte)(value >> 16);\r\n\t\t\tdestination[destinationOffset++] = (byte)(value >> 8);\r\n\t\t\tdestination[destinationOffset++] = (byte)value;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NamespaceDoc.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Lidgren Network Library\r\n\t/// </summary>\r\n\tinternal class NamespaceDoc\r\n\t{\r\n\t\t// <include file='_Namespace.xml' path='Documentation/*' />\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBigInteger.cs",
    "content": "﻿using System;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Big integer class based on BouncyCastle (http://www.bouncycastle.org) big integer code\r\n\t/// </summary>\r\n\tinternal class NetBigInteger\r\n\t{\r\n\t\tprivate const long IMASK = 0xffffffffL;\r\n\t\tprivate const ulong UIMASK = (ulong)IMASK;\r\n\r\n\t\tprivate static readonly int[] ZeroMagnitude = new int[0];\r\n\t\tprivate static readonly byte[] ZeroEncoding = new byte[0];\r\n\r\n\t\tpublic static readonly NetBigInteger Zero = new NetBigInteger(0, ZeroMagnitude, false);\r\n\t\tpublic static readonly NetBigInteger One = createUValueOf(1);\r\n\t\tpublic static readonly NetBigInteger Two = createUValueOf(2);\r\n\t\tpublic static readonly NetBigInteger Three = createUValueOf(3);\r\n\t\tpublic static readonly NetBigInteger Ten = createUValueOf(10);\r\n\r\n\t\tprivate const int chunk2 = 1;\r\n\t\tprivate static readonly NetBigInteger radix2 = ValueOf(2);\r\n\t\tprivate static readonly NetBigInteger radix2E = radix2.Pow(chunk2);\r\n\r\n\t\tprivate const int chunk10 = 19;\r\n\t\tprivate static readonly NetBigInteger radix10 = ValueOf(10);\r\n\t\tprivate static readonly NetBigInteger radix10E = radix10.Pow(chunk10);\r\n\r\n\t\tprivate const int chunk16 = 16;\r\n\t\tprivate static readonly NetBigInteger radix16 = ValueOf(16);\r\n\t\tprivate static readonly NetBigInteger radix16E = radix16.Pow(chunk16);\r\n\r\n\t\tprivate const int BitsPerByte = 8;\r\n\t\tprivate const int BitsPerInt = 32;\r\n\t\tprivate const int BytesPerInt = 4;\r\n\r\n\t\tprivate int m_sign; // -1 means -ve; +1 means +ve; 0 means 0;\r\n\t\tprivate int[] m_magnitude; // array of ints with [0] being the most significant\r\n\t\tprivate int m_numBits = -1; // cache BitCount() value\r\n\t\tprivate int m_numBitLength = -1; // cache calcBitLength() value\r\n\t\tprivate long m_quote = -1L; // -m^(-1) mod b, b = 2^32 (see Montgomery mult.)\r\n\r\n\t\tprivate static int GetByteLength(\r\n\t\t\tint nBits)\r\n\t\t{\r\n\t\t\treturn (nBits + BitsPerByte - 1) / BitsPerByte;\r\n\t\t}\r\n\r\n\t\tprivate NetBigInteger()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tprivate NetBigInteger(\r\n\t\t\tint signum,\r\n\t\t\tint[] mag,\r\n\t\t\tbool checkMag)\r\n\t\t{\r\n\t\t\tif (checkMag)\r\n\t\t\t{\r\n\t\t\t\tint i = 0;\r\n\t\t\t\twhile (i < mag.Length && mag[i] == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t++i;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (i == mag.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\t//\t\t\t\t\tsign = 0;\r\n\t\t\t\t\tm_magnitude = ZeroMagnitude;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tm_sign = signum;\r\n\r\n\t\t\t\t\tif (i == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tm_magnitude = mag;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// strip leading 0 words\r\n\t\t\t\t\t\tm_magnitude = new int[mag.Length - i];\r\n\t\t\t\t\t\tArray.Copy(mag, i, m_magnitude, 0, m_magnitude.Length);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tm_sign = signum;\r\n\t\t\t\tm_magnitude = mag;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger(\r\n\t\t\tstring value)\r\n\t\t\t: this(value, 10)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger(\r\n\t\t\tstring str,\r\n\t\t\tint radix)\r\n\t\t{\r\n\t\t\tif (str.Length == 0)\r\n\t\t\t\tthrow new FormatException(\"Zero length BigInteger\");\r\n\r\n\t\t\tNumberStyles style;\r\n\t\t\tint chunk;\r\n\t\t\tNetBigInteger r;\r\n\t\t\tNetBigInteger rE;\r\n\r\n\t\t\tswitch (radix)\r\n\t\t\t{\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\t// Is there anyway to restrict to binary digits?\r\n\t\t\t\t\tstyle = NumberStyles.Integer;\r\n\t\t\t\t\tchunk = chunk2;\r\n\t\t\t\t\tr = radix2;\r\n\t\t\t\t\trE = radix2E;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 10:\r\n\t\t\t\t\t// This style seems to handle spaces and minus sign already (our processing redundant?)\r\n\t\t\t\t\tstyle = NumberStyles.Integer;\r\n\t\t\t\t\tchunk = chunk10;\r\n\t\t\t\t\tr = radix10;\r\n\t\t\t\t\trE = radix10E;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 16:\r\n\t\t\t\t\t// TODO Should this be HexNumber?\r\n\t\t\t\t\tstyle = NumberStyles.AllowHexSpecifier;\r\n\t\t\t\t\tchunk = chunk16;\r\n\t\t\t\t\tr = radix16;\r\n\t\t\t\t\trE = radix16E;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new FormatException(\"Only bases 2, 10, or 16 allowed\");\r\n\t\t\t}\r\n\r\n\r\n\t\t\tint index = 0;\r\n\t\t\tm_sign = 1;\r\n\r\n\t\t\tif (str[0] == '-')\r\n\t\t\t{\r\n\t\t\t\tif (str.Length == 1)\r\n\t\t\t\t\tthrow new FormatException(\"Zero length BigInteger\");\r\n\r\n\t\t\t\tm_sign = -1;\r\n\t\t\t\tindex = 1;\r\n\t\t\t}\r\n\r\n\t\t\t// strip leading zeros from the string str\r\n\t\t\twhile (index < str.Length && Int32.Parse(str[index].ToString(), style) == 0)\r\n\t\t\t{\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\r\n\t\t\tif (index >= str.Length)\r\n\t\t\t{\r\n\t\t\t\t// zero value - we're done\r\n\t\t\t\tm_sign = 0;\r\n\t\t\t\tm_magnitude = ZeroMagnitude;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//////\r\n\t\t\t// could we work out the max number of ints required to store\r\n\t\t\t// str.Length digits in the given base, then allocate that\r\n\t\t\t// storage in one hit?, then Generate the magnitude in one hit too?\r\n\t\t\t//////\r\n\r\n\t\t\tNetBigInteger b = Zero;\r\n\r\n\r\n\t\t\tint next = index + chunk;\r\n\r\n\t\t\tif (next <= str.Length)\r\n\t\t\t{\r\n\t\t\t\tdo\r\n\t\t\t\t{\r\n\t\t\t\t\tstring s = str.Substring(index, chunk);\r\n\t\t\t\t\tulong i = ulong.Parse(s, style);\r\n\t\t\t\t\tNetBigInteger bi = createUValueOf(i);\r\n\r\n\t\t\t\t\tswitch (radix)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\tif (i > 1)\r\n\t\t\t\t\t\t\t\tthrow new FormatException(\"Bad character in radix 2 string: \" + s);\r\n\r\n\t\t\t\t\t\t\tb = b.ShiftLeft(1);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 16:\r\n\t\t\t\t\t\t\tb = b.ShiftLeft(64);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tb = b.Multiply(rE);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tb = b.Add(bi);\r\n\r\n\t\t\t\t\tindex = next;\r\n\t\t\t\t\tnext += chunk;\r\n\t\t\t\t}\r\n\t\t\t\twhile (next <= str.Length);\r\n\t\t\t}\r\n\r\n\t\t\tif (index < str.Length)\r\n\t\t\t{\r\n\t\t\t\tstring s = str.Substring(index);\r\n\t\t\t\tulong i = ulong.Parse(s, style);\r\n\t\t\t\tNetBigInteger bi = createUValueOf(i);\r\n\r\n\t\t\t\tif (b.m_sign > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (radix == 2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// NB: Can't reach here since we are parsing one char at a time\r\n\t\t\t\t\t\tDebug.Assert(false);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (radix == 16)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tb = b.ShiftLeft(s.Length << 2);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tb = b.Multiply(r.Pow(s.Length));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tb = b.Add(bi);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tb = bi;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Note: This is the previous (slower) algorithm\r\n\t\t\t//\t\t\twhile (index < value.Length)\r\n\t\t\t//            {\r\n\t\t\t//\t\t\t\tchar c = value[index];\r\n\t\t\t//\t\t\t\tstring s = c.ToString();\r\n\t\t\t//\t\t\t\tint i = Int32.Parse(s, style);\r\n\t\t\t//\r\n\t\t\t//                b = b.Multiply(r).Add(ValueOf(i));\r\n\t\t\t//                index++;\r\n\t\t\t//            }\r\n\r\n\t\t\tm_magnitude = b.m_magnitude;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger(\r\n\t\t\tbyte[] bytes)\r\n\t\t\t: this(bytes, 0, bytes.Length)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger(\r\n\t\t\tbyte[] bytes,\r\n\t\t\tint offset,\r\n\t\t\tint length)\r\n\t\t{\r\n\t\t\tif (length == 0)\r\n\t\t\t\tthrow new FormatException(\"Zero length BigInteger\");\r\n\t\t\tif ((sbyte)bytes[offset] < 0)\r\n\t\t\t{\r\n\t\t\t\tm_sign = -1;\r\n\r\n\t\t\t\tint end = offset + length;\r\n\r\n\t\t\t\tint iBval;\r\n\t\t\t\t// strip leading sign bytes\r\n\t\t\t\tfor (iBval = offset; iBval < end && ((sbyte)bytes[iBval] == -1); iBval++)\r\n\t\t\t\t{\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (iBval >= end)\r\n\t\t\t\t{\r\n\t\t\t\t\tm_magnitude = One.m_magnitude;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tint numBytes = end - iBval;\r\n\t\t\t\t\tbyte[] inverse = new byte[numBytes];\r\n\r\n\t\t\t\t\tint index = 0;\r\n\t\t\t\t\twhile (index < numBytes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinverse[index++] = (byte)~bytes[iBval++];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tDebug.Assert(iBval == end);\r\n\r\n\t\t\t\t\twhile (inverse[--index] == byte.MaxValue)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinverse[index] = byte.MinValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinverse[index]++;\r\n\r\n\t\t\t\t\tm_magnitude = MakeMagnitude(inverse, 0, inverse.Length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// strip leading zero bytes and return magnitude bytes\r\n\t\t\t\tm_magnitude = MakeMagnitude(bytes, offset, length);\r\n\t\t\t\tm_sign = m_magnitude.Length > 0 ? 1 : 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static int[] MakeMagnitude(\r\n\t\t\tbyte[] bytes,\r\n\t\t\tint offset,\r\n\t\t\tint length)\r\n\t\t{\r\n\t\t\tint end = offset + length;\r\n\r\n\t\t\t// strip leading zeros\r\n\t\t\tint firstSignificant;\r\n\t\t\tfor (firstSignificant = offset; firstSignificant < end\r\n\t\t\t\t&& bytes[firstSignificant] == 0; firstSignificant++)\r\n\t\t\t{\r\n\t\t\t}\r\n\r\n\t\t\tif (firstSignificant >= end)\r\n\t\t\t{\r\n\t\t\t\treturn ZeroMagnitude;\r\n\t\t\t}\r\n\r\n\t\t\tint nInts = (end - firstSignificant + 3) / BytesPerInt;\r\n\t\t\tint bCount = (end - firstSignificant) % BytesPerInt;\r\n\t\t\tif (bCount == 0)\r\n\t\t\t{\r\n\t\t\t\tbCount = BytesPerInt;\r\n\t\t\t}\r\n\r\n\t\t\tif (nInts < 1)\r\n\t\t\t{\r\n\t\t\t\treturn ZeroMagnitude;\r\n\t\t\t}\r\n\r\n\t\t\tint[] mag = new int[nInts];\r\n\r\n\t\t\tint v = 0;\r\n\t\t\tint magnitudeIndex = 0;\r\n\t\t\tfor (int i = firstSignificant; i < end; ++i)\r\n\t\t\t{\r\n\t\t\t\tv <<= 8;\r\n\t\t\t\tv |= bytes[i] & 0xff;\r\n\t\t\t\tbCount--;\r\n\t\t\t\tif (bCount <= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tmag[magnitudeIndex] = v;\r\n\t\t\t\t\tmagnitudeIndex++;\r\n\t\t\t\t\tbCount = BytesPerInt;\r\n\t\t\t\t\tv = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (magnitudeIndex < mag.Length)\r\n\t\t\t{\r\n\t\t\t\tmag[magnitudeIndex] = v;\r\n\t\t\t}\r\n\r\n\t\t\treturn mag;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger(\r\n\t\t\tint sign,\r\n\t\t\tbyte[] bytes)\r\n\t\t\t: this(sign, bytes, 0, bytes.Length)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger(\r\n\t\t\tint sign,\r\n\t\t\tbyte[] bytes,\r\n\t\t\tint offset,\r\n\t\t\tint length)\r\n\t\t{\r\n\t\t\tif (sign < -1 || sign > 1)\r\n\t\t\t\tthrow new FormatException(\"Invalid sign value\");\r\n\r\n\t\t\tif (sign == 0)\r\n\t\t\t{\r\n\t\t\t\t//sign = 0;\r\n\t\t\t\tm_magnitude = ZeroMagnitude;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// copy bytes\r\n\t\t\t\tm_magnitude = MakeMagnitude(bytes, offset, length);\r\n\t\t\t\tm_sign = m_magnitude.Length < 1 ? 0 : sign;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Abs()\r\n\t\t{\r\n\t\t\treturn m_sign >= 0 ? this : Negate();\r\n\t\t}\r\n\r\n\t\t// return a = a + b - b preserved.\r\n\t\tprivate static int[] AddMagnitudes(\r\n\t\t\tint[] a,\r\n\t\t\tint[] b)\r\n\t\t{\r\n\t\t\tint tI = a.Length - 1;\r\n\t\t\tint vI = b.Length - 1;\r\n\t\t\tlong m = 0;\r\n\r\n\t\t\twhile (vI >= 0)\r\n\t\t\t{\r\n\t\t\t\tm += ((long)(uint)a[tI] + (long)(uint)b[vI--]);\r\n\t\t\t\ta[tI--] = (int)m;\r\n\t\t\t\tm = (long)((ulong)m >> 32);\r\n\t\t\t}\r\n\r\n\t\t\tif (m != 0)\r\n\t\t\t{\r\n\t\t\t\twhile (tI >= 0 && ++a[tI--] == 0)\r\n\t\t\t\t{\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn a;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Add(\r\n\t\t\tNetBigInteger value)\r\n\t\t{\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn value;\r\n\r\n\t\t\tif (m_sign != value.m_sign)\r\n\t\t\t{\r\n\t\t\t\tif (value.m_sign == 0)\r\n\t\t\t\t\treturn this;\r\n\r\n\t\t\t\tif (value.m_sign < 0)\r\n\t\t\t\t\treturn Subtract(value.Negate());\r\n\r\n\t\t\t\treturn value.Subtract(Negate());\r\n\t\t\t}\r\n\r\n\t\t\treturn AddToMagnitude(value.m_magnitude);\r\n\t\t}\r\n\r\n\t\tprivate NetBigInteger AddToMagnitude(\r\n\t\t\tint[] magToAdd)\r\n\t\t{\r\n\t\t\tint[] big, small;\r\n\t\t\tif (m_magnitude.Length < magToAdd.Length)\r\n\t\t\t{\r\n\t\t\t\tbig = magToAdd;\r\n\t\t\t\tsmall = m_magnitude;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tbig = m_magnitude;\r\n\t\t\t\tsmall = magToAdd;\r\n\t\t\t}\r\n\r\n\t\t\t// Conservatively avoid over-allocation when no overflow possible\r\n\t\t\tuint limit = uint.MaxValue;\r\n\t\t\tif (big.Length == small.Length)\r\n\t\t\t\tlimit -= (uint)small[0];\r\n\r\n\t\t\tbool possibleOverflow = (uint)big[0] >= limit;\r\n\r\n\t\t\tint[] bigCopy;\r\n\t\t\tif (possibleOverflow)\r\n\t\t\t{\r\n\t\t\t\tbigCopy = new int[big.Length + 1];\r\n\t\t\t\tbig.CopyTo(bigCopy, 1);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tbigCopy = (int[])big.Clone();\r\n\t\t\t}\r\n\r\n\t\t\tbigCopy = AddMagnitudes(bigCopy, small);\r\n\r\n\t\t\treturn new NetBigInteger(m_sign, bigCopy, possibleOverflow);\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger And(\r\n\t\t\tNetBigInteger value)\r\n\t\t{\r\n\t\t\tif (m_sign == 0 || value.m_sign == 0)\r\n\t\t\t{\r\n\t\t\t\treturn Zero;\r\n\t\t\t}\r\n\r\n\t\t\tint[] aMag = m_sign > 0\r\n\t\t\t\t? m_magnitude\r\n\t\t\t\t: Add(One).m_magnitude;\r\n\r\n\t\t\tint[] bMag = value.m_sign > 0\r\n\t\t\t\t? value.m_magnitude\r\n\t\t\t\t: value.Add(One).m_magnitude;\r\n\r\n\t\t\tbool resultNeg = m_sign < 0 && value.m_sign < 0;\r\n\t\t\tint resultLength = System.Math.Max(aMag.Length, bMag.Length);\r\n\t\t\tint[] resultMag = new int[resultLength];\r\n\r\n\t\t\tint aStart = resultMag.Length - aMag.Length;\r\n\t\t\tint bStart = resultMag.Length - bMag.Length;\r\n\r\n\t\t\tfor (int i = 0; i < resultMag.Length; ++i)\r\n\t\t\t{\r\n\t\t\t\tint aWord = i >= aStart ? aMag[i - aStart] : 0;\r\n\t\t\t\tint bWord = i >= bStart ? bMag[i - bStart] : 0;\r\n\r\n\t\t\t\tif (m_sign < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\taWord = ~aWord;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value.m_sign < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tbWord = ~bWord;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresultMag[i] = aWord & bWord;\r\n\r\n\t\t\t\tif (resultNeg)\r\n\t\t\t\t{\r\n\t\t\t\t\tresultMag[i] = ~resultMag[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tNetBigInteger result = new NetBigInteger(1, resultMag, true);\r\n\r\n\t\t\tif (resultNeg)\r\n\t\t\t{\r\n\t\t\t\tresult = result.Not();\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\t\r\n\t\tprivate int calcBitLength(\r\n\t\t\tint indx,\r\n\t\t\tint[] mag)\r\n\t\t{\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tif (indx >= mag.Length)\r\n\t\t\t\t\treturn 0;\r\n\r\n\t\t\t\tif (mag[indx] != 0)\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t++indx;\r\n\t\t\t}\r\n\r\n\t\t\t// bit length for everything after the first int\r\n\t\t\tint bitLength = 32 * ((mag.Length - indx) - 1);\r\n\r\n\t\t\t// and determine bitlength of first int\r\n\t\t\tint firstMag = mag[indx];\r\n\t\t\tbitLength += BitLen(firstMag);\r\n\r\n\t\t\t// Check for negative powers of two\r\n\t\t\tif (m_sign < 0 && ((firstMag & -firstMag) == firstMag))\r\n\t\t\t{\r\n\t\t\t\tdo\r\n\t\t\t\t{\r\n\t\t\t\t\tif (++indx >= mag.Length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t--bitLength;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\twhile (mag[indx] == 0);\r\n\t\t\t}\r\n\r\n\t\t\treturn bitLength;\r\n\t\t}\r\n\r\n\t\tpublic int BitLength\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (m_numBitLength == -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tm_numBitLength = m_sign == 0\r\n\t\t\t\t\t\t? 0\r\n\t\t\t\t\t\t: calcBitLength(0, m_magnitude);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn m_numBitLength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//\r\n\t\t// BitLen(value) is the number of bits in value.\r\n\t\t//\r\n\t\tprivate static int BitLen(\r\n\t\t\tint w)\r\n\t\t{\r\n\t\t\t// Binary search - decision tree (5 tests, rarely 6)\r\n\t\t\treturn (w < 1 << 15 ? (w < 1 << 7\r\n\t\t\t\t? (w < 1 << 3 ? (w < 1 << 1\r\n\t\t\t\t? (w < 1 << 0 ? (w < 0 ? 32 : 0) : 1)\r\n\t\t\t\t: (w < 1 << 2 ? 2 : 3)) : (w < 1 << 5\r\n\t\t\t\t? (w < 1 << 4 ? 4 : 5)\r\n\t\t\t\t: (w < 1 << 6 ? 6 : 7)))\r\n\t\t\t\t: (w < 1 << 11\r\n\t\t\t\t? (w < 1 << 9 ? (w < 1 << 8 ? 8 : 9) : (w < 1 << 10 ? 10 : 11))\r\n\t\t\t\t: (w < 1 << 13 ? (w < 1 << 12 ? 12 : 13) : (w < 1 << 14 ? 14 : 15)))) : (w < 1 << 23 ? (w < 1 << 19\r\n\t\t\t\t? (w < 1 << 17 ? (w < 1 << 16 ? 16 : 17) : (w < 1 << 18 ? 18 : 19))\r\n\t\t\t\t: (w < 1 << 21 ? (w < 1 << 20 ? 20 : 21) : (w < 1 << 22 ? 22 : 23))) : (w < 1 << 27\r\n\t\t\t\t? (w < 1 << 25 ? (w < 1 << 24 ? 24 : 25) : (w < 1 << 26 ? 26 : 27))\r\n\t\t\t\t: (w < 1 << 29 ? (w < 1 << 28 ? 28 : 29) : (w < 1 << 30 ? 30 : 31)))));\r\n\t\t}\r\n\r\n\t\tprivate bool QuickPow2Check()\r\n\t\t{\r\n\t\t\treturn m_sign > 0 && m_numBits == 1;\r\n\t\t}\r\n\r\n\t\tpublic int CompareTo(\r\n\t\t\tobject obj)\r\n\t\t{\r\n\t\t\treturn CompareTo((NetBigInteger)obj);\r\n\t\t}\r\n\r\n\t\t\r\n\t\t// unsigned comparison on two arrays - note the arrays may\r\n\t\t// start with leading zeros.\r\n\t\tprivate static int CompareTo(\r\n\t\t\tint xIndx,\r\n\t\t\tint[] x,\r\n\t\t\tint yIndx,\r\n\t\t\tint[] y)\r\n\t\t{\r\n\t\t\twhile (xIndx != x.Length && x[xIndx] == 0)\r\n\t\t\t{\r\n\t\t\t\txIndx++;\r\n\t\t\t}\r\n\r\n\t\t\twhile (yIndx != y.Length && y[yIndx] == 0)\r\n\t\t\t{\r\n\t\t\t\tyIndx++;\r\n\t\t\t}\r\n\r\n\t\t\treturn CompareNoLeadingZeroes(xIndx, x, yIndx, y);\r\n\t\t}\r\n\r\n\t\tprivate static int CompareNoLeadingZeroes(\r\n\t\t\tint xIndx,\r\n\t\t\tint[] x,\r\n\t\t\tint yIndx,\r\n\t\t\tint[] y)\r\n\t\t{\r\n\t\t\tint diff = (x.Length - y.Length) - (xIndx - yIndx);\r\n\r\n\t\t\tif (diff != 0)\r\n\t\t\t{\r\n\t\t\t\treturn diff < 0 ? -1 : 1;\r\n\t\t\t}\r\n\r\n\t\t\t// lengths of magnitudes the same, test the magnitude values\r\n\r\n\t\t\twhile (xIndx < x.Length)\r\n\t\t\t{\r\n\t\t\t\tuint v1 = (uint)x[xIndx++];\r\n\t\t\t\tuint v2 = (uint)y[yIndx++];\r\n\r\n\t\t\t\tif (v1 != v2)\r\n\t\t\t\t\treturn v1 < v2 ? -1 : 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tpublic int CompareTo(\r\n\t\t\tNetBigInteger value)\r\n\t\t{\r\n\t\t\treturn m_sign < value.m_sign ? -1\r\n\t\t\t\t: m_sign > value.m_sign ? 1\r\n\t\t\t\t: m_sign == 0 ? 0\r\n\t\t\t\t: m_sign * CompareNoLeadingZeroes(0, m_magnitude, 0, value.m_magnitude);\r\n\t\t}\r\n\r\n\t\t// return z = x / y - done in place (z value preserved, x contains the remainder)\r\n\t\tprivate int[] Divide(\r\n\t\t\tint[] x,\r\n\t\t\tint[] y)\r\n\t\t{\r\n\t\t\tint xStart = 0;\r\n\t\t\twhile (xStart < x.Length && x[xStart] == 0)\r\n\t\t\t{\r\n\t\t\t\t++xStart;\r\n\t\t\t}\r\n\r\n\t\t\tint yStart = 0;\r\n\t\t\twhile (yStart < y.Length && y[yStart] == 0)\r\n\t\t\t{\r\n\t\t\t\t++yStart;\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Assert(yStart < y.Length);\r\n\r\n\t\t\tint xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y);\r\n\t\t\tint[] count;\r\n\r\n\t\t\tif (xyCmp > 0)\r\n\t\t\t{\r\n\t\t\t\tint yBitLength = calcBitLength(yStart, y);\r\n\t\t\t\tint xBitLength = calcBitLength(xStart, x);\r\n\t\t\t\tint shift = xBitLength - yBitLength;\r\n\r\n\t\t\t\tint[] iCount;\r\n\t\t\t\tint iCountStart = 0;\r\n\r\n\t\t\t\tint[] c;\r\n\t\t\t\tint cStart = 0;\r\n\t\t\t\tint cBitLength = yBitLength;\r\n\t\t\t\tif (shift > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t//\t\t\t\t\tiCount = ShiftLeft(One.magnitude, shift);\r\n\t\t\t\t\tiCount = new int[(shift >> 5) + 1];\r\n\t\t\t\t\tiCount[0] = 1 << (shift % 32);\r\n\r\n\t\t\t\t\tc = ShiftLeft(y, shift);\r\n\t\t\t\t\tcBitLength += shift;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tiCount = new int[] { 1 };\r\n\r\n\t\t\t\t\tint len = y.Length - yStart;\r\n\t\t\t\t\tc = new int[len];\r\n\t\t\t\t\tArray.Copy(y, yStart, c, 0, len);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcount = new int[iCount.Length];\r\n\r\n\t\t\t\tfor (; ; )\r\n\t\t\t\t{\r\n\t\t\t\t\tif (cBitLength < xBitLength\r\n\t\t\t\t\t\t|| CompareNoLeadingZeroes(xStart, x, cStart, c) >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSubtract(xStart, x, cStart, c);\r\n\t\t\t\t\t\tAddMagnitudes(count, iCount);\r\n\r\n\t\t\t\t\t\twhile (x[xStart] == 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (++xStart == x.Length)\r\n\t\t\t\t\t\t\t\treturn count;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//xBitLength = calcBitLength(xStart, x);\r\n\t\t\t\t\t\txBitLength = 32 * (x.Length - xStart - 1) + BitLen(x[xStart]);\r\n\r\n\t\t\t\t\t\tif (xBitLength <= yBitLength)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (xBitLength < yBitLength)\r\n\t\t\t\t\t\t\t\treturn count;\r\n\r\n\t\t\t\t\t\t\txyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y);\r\n\r\n\t\t\t\t\t\t\tif (xyCmp <= 0)\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tshift = cBitLength - xBitLength;\r\n\r\n\t\t\t\t\t// NB: The case where c[cStart] is 1-bit is harmless\r\n\t\t\t\t\tif (shift == 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tuint firstC = (uint)c[cStart] >> 1;\r\n\t\t\t\t\t\tuint firstX = (uint)x[xStart];\r\n\t\t\t\t\t\tif (firstC > firstX)\r\n\t\t\t\t\t\t\t++shift;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (shift < 2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tc = ShiftRightOneInPlace(cStart, c);\r\n\t\t\t\t\t\t--cBitLength;\r\n\t\t\t\t\t\tiCount = ShiftRightOneInPlace(iCountStart, iCount);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tc = ShiftRightInPlace(cStart, c, shift);\r\n\t\t\t\t\t\tcBitLength -= shift;\r\n\t\t\t\t\t\tiCount = ShiftRightInPlace(iCountStart, iCount, shift);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//cStart = c.Length - ((cBitLength + 31) / 32);\r\n\t\t\t\t\twhile (c[cStart] == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t++cStart;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\twhile (iCount[iCountStart] == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t++iCountStart;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcount = new int[1];\r\n\t\t\t}\r\n\r\n\t\t\tif (xyCmp == 0)\r\n\t\t\t{\r\n\t\t\t\tAddMagnitudes(count, One.m_magnitude);\r\n\t\t\t\tArray.Clear(x, xStart, x.Length - xStart);\r\n\t\t\t}\r\n\r\n\t\t\treturn count;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Divide(\r\n\t\t\tNetBigInteger val)\r\n\t\t{\r\n\t\t\tif (val.m_sign == 0)\r\n\t\t\t\tthrow new ArithmeticException(\"Division by zero error\");\r\n\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn Zero;\r\n\r\n\t\t\tif (val.QuickPow2Check()) // val is power of two\r\n\t\t\t{\r\n\t\t\t\tNetBigInteger result = Abs().ShiftRight(val.Abs().BitLength - 1);\r\n\t\t\t\treturn val.m_sign == m_sign ? result : result.Negate();\r\n\t\t\t}\r\n\r\n\t\t\tint[] mag = (int[])m_magnitude.Clone();\r\n\r\n\t\t\treturn new NetBigInteger(m_sign * val.m_sign, Divide(mag, val.m_magnitude), true);\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger[] DivideAndRemainder(\r\n\t\t\tNetBigInteger val)\r\n\t\t{\r\n\t\t\tif (val.m_sign == 0)\r\n\t\t\t\tthrow new ArithmeticException(\"Division by zero error\");\r\n\r\n\t\t\tNetBigInteger[] biggies = new NetBigInteger[2];\r\n\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t{\r\n\t\t\t\tbiggies[0] = Zero;\r\n\t\t\t\tbiggies[1] = Zero;\r\n\t\t\t}\r\n\t\t\telse if (val.QuickPow2Check()) // val is power of two\r\n\t\t\t{\r\n\t\t\t\tint e = val.Abs().BitLength - 1;\r\n\t\t\t\tNetBigInteger quotient = Abs().ShiftRight(e);\r\n\t\t\t\tint[] remainder = LastNBits(e);\r\n\r\n\t\t\t\tbiggies[0] = val.m_sign == m_sign ? quotient : quotient.Negate();\r\n\t\t\t\tbiggies[1] = new NetBigInteger(m_sign, remainder, true);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tint[] remainder = (int[])m_magnitude.Clone();\r\n\t\t\t\tint[] quotient = Divide(remainder, val.m_magnitude);\r\n\r\n\t\t\t\tbiggies[0] = new NetBigInteger(m_sign * val.m_sign, quotient, true);\r\n\t\t\t\tbiggies[1] = new NetBigInteger(m_sign, remainder, true);\r\n\t\t\t}\r\n\r\n\t\t\treturn biggies;\r\n\t\t}\r\n\r\n\t\tpublic override bool Equals(\r\n\t\t\tobject obj)\r\n\t\t{\r\n\t\t\tif (obj == this)\r\n\t\t\t\treturn true;\r\n\r\n\t\t\tNetBigInteger biggie = obj as NetBigInteger;\r\n\t\t\tif (biggie == null)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tif (biggie.m_sign != m_sign || biggie.m_magnitude.Length != m_magnitude.Length)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tfor (int i = 0; i < m_magnitude.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (biggie.m_magnitude[i] != m_magnitude[i])\r\n\t\t\t\t{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Gcd(\r\n\t\t\tNetBigInteger value)\r\n\t\t{\r\n\t\t\tif (value.m_sign == 0)\r\n\t\t\t\treturn Abs();\r\n\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn value.Abs();\r\n\r\n\t\t\tNetBigInteger r;\r\n\t\t\tNetBigInteger u = this;\r\n\t\t\tNetBigInteger v = value;\r\n\r\n\t\t\twhile (v.m_sign != 0)\r\n\t\t\t{\r\n\t\t\t\tr = u.Mod(v);\r\n\t\t\t\tu = v;\r\n\t\t\t\tv = r;\r\n\t\t\t}\r\n\r\n\t\t\treturn u;\r\n\t\t}\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\tint hc = m_magnitude.Length;\r\n\t\t\tif (m_magnitude.Length > 0)\r\n\t\t\t{\r\n\t\t\t\thc ^= m_magnitude[0];\r\n\r\n\t\t\t\tif (m_magnitude.Length > 1)\r\n\t\t\t\t{\r\n\t\t\t\t\thc ^= m_magnitude[m_magnitude.Length - 1];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn m_sign < 0 ? ~hc : hc;\r\n\t\t}\r\n\r\n\t\tprivate NetBigInteger Inc()\r\n\t\t{\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn One;\r\n\r\n\t\t\tif (m_sign < 0)\r\n\t\t\t\treturn new NetBigInteger(-1, doSubBigLil(m_magnitude, One.m_magnitude), true);\r\n\r\n\t\t\treturn AddToMagnitude(One.m_magnitude);\r\n\t\t}\r\n\r\n\t\tpublic int IntValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn m_sign == 0 ? 0\r\n\t\t\t\t\t: m_sign > 0 ? m_magnitude[m_magnitude.Length - 1]\r\n\t\t\t\t\t: -m_magnitude[m_magnitude.Length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tpublic NetBigInteger Max(\r\n\t\t\tNetBigInteger value)\r\n\t\t{\r\n\t\t\treturn CompareTo(value) > 0 ? this : value;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Min(\r\n\t\t\tNetBigInteger value)\r\n\t\t{\r\n\t\t\treturn CompareTo(value) < 0 ? this : value;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Mod(\r\n\t\t\tNetBigInteger m)\r\n\t\t{\r\n\t\t\tif (m.m_sign < 1)\r\n\t\t\t\tthrow new ArithmeticException(\"Modulus must be positive\");\r\n\r\n\t\t\tNetBigInteger biggie = Remainder(m);\r\n\r\n\t\t\treturn (biggie.m_sign >= 0 ? biggie : biggie.Add(m));\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger ModInverse(\r\n\t\t\tNetBigInteger m)\r\n\t\t{\r\n\t\t\tif (m.m_sign < 1)\r\n\t\t\t\tthrow new ArithmeticException(\"Modulus must be positive\");\r\n\r\n\t\t\tNetBigInteger x = new NetBigInteger();\r\n\t\t\tNetBigInteger gcd = ExtEuclid(this, m, x, null);\r\n\r\n\t\t\tif (!gcd.Equals(One))\r\n\t\t\t\tthrow new ArithmeticException(\"Numbers not relatively prime.\");\r\n\r\n\t\t\tif (x.m_sign < 0)\r\n\t\t\t{\r\n\t\t\t\tx.m_sign = 1;\r\n\t\t\t\t//x = m.Subtract(x);\r\n\t\t\t\tx.m_magnitude = doSubBigLil(m.m_magnitude, x.m_magnitude);\r\n\t\t\t}\r\n\r\n\t\t\treturn x;\r\n\t\t}\r\n\r\n\t\tprivate static NetBigInteger ExtEuclid(\r\n\t\t\tNetBigInteger a,\r\n\t\t\tNetBigInteger b,\r\n\t\t\tNetBigInteger u1Out,\r\n\t\t\tNetBigInteger u2Out)\r\n\t\t{\r\n\t\t\tNetBigInteger u1 = One;\r\n\t\t\tNetBigInteger u3 = a;\r\n\t\t\tNetBigInteger v1 = Zero;\r\n\t\t\tNetBigInteger v3 = b;\r\n\r\n\t\t\twhile (v3.m_sign > 0)\r\n\t\t\t{\r\n\t\t\t\tNetBigInteger[] q = u3.DivideAndRemainder(v3);\r\n\r\n\t\t\t\tNetBigInteger tmp = v1.Multiply(q[0]);\r\n\t\t\t\tNetBigInteger tn = u1.Subtract(tmp);\r\n\t\t\t\tu1 = v1;\r\n\t\t\t\tv1 = tn;\r\n\r\n\t\t\t\tu3 = v3;\r\n\t\t\t\tv3 = q[1];\r\n\t\t\t}\r\n\r\n\t\t\tif (u1Out != null)\r\n\t\t\t{\r\n\t\t\t\tu1Out.m_sign = u1.m_sign;\r\n\t\t\t\tu1Out.m_magnitude = u1.m_magnitude;\r\n\t\t\t}\r\n\r\n\t\t\tif (u2Out != null)\r\n\t\t\t{\r\n\t\t\t\tNetBigInteger tmp = u1.Multiply(a);\r\n\t\t\t\ttmp = u3.Subtract(tmp);\r\n\t\t\t\tNetBigInteger res = tmp.Divide(b);\r\n\t\t\t\tu2Out.m_sign = res.m_sign;\r\n\t\t\t\tu2Out.m_magnitude = res.m_magnitude;\r\n\t\t\t}\r\n\r\n\t\t\treturn u3;\r\n\t\t}\r\n\r\n\t\tprivate static void ZeroOut(\r\n\t\t\tint[] x)\r\n\t\t{\r\n\t\t\tArray.Clear(x, 0, x.Length);\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger ModPow(\r\n\t\t\tNetBigInteger exponent,\r\n\t\t\tNetBigInteger m)\r\n\t\t{\r\n\t\t\tif (m.m_sign < 1)\r\n\t\t\t\tthrow new ArithmeticException(\"Modulus must be positive\");\r\n\r\n\t\t\tif (m.Equals(One))\r\n\t\t\t\treturn Zero;\r\n\r\n\t\t\tif (exponent.m_sign == 0)\r\n\t\t\t\treturn One;\r\n\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn Zero;\r\n\r\n\t\t\tint[] zVal = null;\r\n\t\t\tint[] yAccum = null;\r\n\t\t\tint[] yVal;\r\n\r\n\t\t\t// Montgomery exponentiation is only possible if the modulus is odd,\r\n\t\t\t// but AFAIK, this is always the case for crypto algo's\r\n\t\t\tbool useMonty = ((m.m_magnitude[m.m_magnitude.Length - 1] & 1) == 1);\r\n\t\t\tlong mQ = 0;\r\n\t\t\tif (useMonty)\r\n\t\t\t{\r\n\t\t\t\tmQ = m.GetMQuote();\r\n\r\n\t\t\t\t// tmp = this * R mod m\r\n\t\t\t\tNetBigInteger tmp = ShiftLeft(32 * m.m_magnitude.Length).Mod(m);\r\n\t\t\t\tzVal = tmp.m_magnitude;\r\n\r\n\t\t\t\tuseMonty = (zVal.Length <= m.m_magnitude.Length);\r\n\r\n\t\t\t\tif (useMonty)\r\n\t\t\t\t{\r\n\t\t\t\t\tyAccum = new int[m.m_magnitude.Length + 1];\r\n\t\t\t\t\tif (zVal.Length < m.m_magnitude.Length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tint[] longZ = new int[m.m_magnitude.Length];\r\n\t\t\t\t\t\tzVal.CopyTo(longZ, longZ.Length - zVal.Length);\r\n\t\t\t\t\t\tzVal = longZ;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!useMonty)\r\n\t\t\t{\r\n\t\t\t\tif (m_magnitude.Length <= m.m_magnitude.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\t//zAccum = new int[m.magnitude.Length * 2];\r\n\t\t\t\t\tzVal = new int[m.m_magnitude.Length];\r\n\t\t\t\t\tm_magnitude.CopyTo(zVal, zVal.Length - m_magnitude.Length);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// in normal practice we'll never see ..\r\n\t\t\t\t\t//\r\n\t\t\t\t\tNetBigInteger tmp = Remainder(m);\r\n\r\n\t\t\t\t\t//zAccum = new int[m.magnitude.Length * 2];\r\n\t\t\t\t\tzVal = new int[m.m_magnitude.Length];\r\n\t\t\t\t\ttmp.m_magnitude.CopyTo(zVal, zVal.Length - tmp.m_magnitude.Length);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tyAccum = new int[m.m_magnitude.Length * 2];\r\n\t\t\t}\r\n\r\n\t\t\tyVal = new int[m.m_magnitude.Length];\r\n\r\n\t\t\t//\r\n\t\t\t// from LSW to MSW\r\n\t\t\t//\r\n\t\t\tfor (int i = 0; i < exponent.m_magnitude.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tint v = exponent.m_magnitude[i];\r\n\t\t\t\tint bits = 0;\r\n\r\n\t\t\t\tif (i == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\twhile (v > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tv <<= 1;\r\n\t\t\t\t\t\tbits++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// first time in initialise y\r\n\t\t\t\t\t//\r\n\t\t\t\t\tzVal.CopyTo(yVal, 0);\r\n\r\n\t\t\t\t\tv <<= 1;\r\n\t\t\t\t\tbits++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (v != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (useMonty)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Montgomery square algo doesn't exist, and a normal\r\n\t\t\t\t\t\t// square followed by a Montgomery reduction proved to\r\n\t\t\t\t\t\t// be almost as heavy as a Montgomery mulitply.\r\n\t\t\t\t\t\tMultiplyMonty(yAccum, yVal, yVal, m.m_magnitude, mQ);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSquare(yAccum, yVal);\r\n\t\t\t\t\t\tRemainder(yAccum, m.m_magnitude);\r\n\t\t\t\t\t\tArray.Copy(yAccum, yAccum.Length - yVal.Length, yVal, 0, yVal.Length);\r\n\t\t\t\t\t\tZeroOut(yAccum);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbits++;\r\n\r\n\t\t\t\t\tif (v < 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (useMonty)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tMultiplyMonty(yAccum, yVal, zVal, m.m_magnitude, mQ);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tMultiply(yAccum, yVal, zVal);\r\n\t\t\t\t\t\t\tRemainder(yAccum, m.m_magnitude);\r\n\t\t\t\t\t\t\tArray.Copy(yAccum, yAccum.Length - yVal.Length, yVal, 0,\r\n\t\t\t\t\t\t\t\tyVal.Length);\r\n\t\t\t\t\t\t\tZeroOut(yAccum);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tv <<= 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (bits < 32)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (useMonty)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tMultiplyMonty(yAccum, yVal, yVal, m.m_magnitude, mQ);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSquare(yAccum, yVal);\r\n\t\t\t\t\t\tRemainder(yAccum, m.m_magnitude);\r\n\t\t\t\t\t\tArray.Copy(yAccum, yAccum.Length - yVal.Length, yVal, 0, yVal.Length);\r\n\t\t\t\t\t\tZeroOut(yAccum);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbits++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (useMonty)\r\n\t\t\t{\r\n\t\t\t\t// Return y * R^(-1) mod m by doing y * 1 * R^(-1) mod m\r\n\t\t\t\tZeroOut(zVal);\r\n\t\t\t\tzVal[zVal.Length - 1] = 1;\r\n\t\t\t\tMultiplyMonty(yAccum, yVal, zVal, m.m_magnitude, mQ);\r\n\t\t\t}\r\n\r\n\t\t\tNetBigInteger result = new NetBigInteger(1, yVal, true);\r\n\r\n\t\t\treturn exponent.m_sign > 0\r\n\t\t\t\t? result\r\n\t\t\t\t: result.ModInverse(m);\r\n\t\t}\r\n\r\n\t\t// return w with w = x * x - w is assumed to have enough space.\r\n\t\tprivate static int[] Square(\r\n\t\t\tint[] w,\r\n\t\t\tint[] x)\r\n\t\t{\r\n\t\t\t// Note: this method allows w to be only (2 * x.Length - 1) words if result will fit\r\n\t\t\t//\t\t\tif (w.Length != 2 * x.Length)\r\n\t\t\t//\t\t\t\tthrow new ArgumentException(\"no I don't think so...\");\r\n\r\n\t\t\tulong u1, u2, c;\r\n\r\n\t\t\tint wBase = w.Length - 1;\r\n\r\n\t\t\tfor (int i = x.Length - 1; i != 0; i--)\r\n\t\t\t{\r\n\t\t\t\tulong v = (ulong)(uint)x[i];\r\n\r\n\t\t\t\tu1 = v * v;\r\n\t\t\t\tu2 = u1 >> 32;\r\n\t\t\t\tu1 = (uint)u1;\r\n\r\n\t\t\t\tu1 += (ulong)(uint)w[wBase];\r\n\r\n\t\t\t\tw[wBase] = (int)(uint)u1;\r\n\t\t\t\tc = u2 + (u1 >> 32);\r\n\r\n\t\t\t\tfor (int j = i - 1; j >= 0; j--)\r\n\t\t\t\t{\r\n\t\t\t\t\t--wBase;\r\n\t\t\t\t\tu1 = v * (ulong)(uint)x[j];\r\n\t\t\t\t\tu2 = u1 >> 31; // multiply by 2!\r\n\t\t\t\t\tu1 = (uint)(u1 << 1); // multiply by 2!\r\n\t\t\t\t\tu1 += c + (ulong)(uint)w[wBase];\r\n\r\n\t\t\t\t\tw[wBase] = (int)(uint)u1;\r\n\t\t\t\t\tc = u2 + (u1 >> 32);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tc += (ulong)(uint)w[--wBase];\r\n\t\t\t\tw[wBase] = (int)(uint)c;\r\n\r\n\t\t\t\tif (--wBase >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tw[wBase] = (int)(uint)(c >> 32);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert((uint)(c >> 32) == 0);\r\n\t\t\t\t}\r\n\t\t\t\twBase += i;\r\n\t\t\t}\r\n\r\n\t\t\tu1 = (ulong)(uint)x[0];\r\n\t\t\tu1 = u1 * u1;\r\n\t\t\tu2 = u1 >> 32;\r\n\t\t\tu1 = u1 & IMASK;\r\n\r\n\t\t\tu1 += (ulong)(uint)w[wBase];\r\n\r\n\t\t\tw[wBase] = (int)(uint)u1;\r\n\t\t\tif (--wBase >= 0)\r\n\t\t\t{\r\n\t\t\t\tw[wBase] = (int)(uint)(u2 + (u1 >> 32) + (ulong)(uint)w[wBase]);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert((uint)(u2 + (u1 >> 32)) == 0);\r\n\t\t\t}\r\n\r\n\t\t\treturn w;\r\n\t\t}\r\n\r\n\t\t// return x with x = y * z - x is assumed to have enough space.\r\n\t\tprivate static int[] Multiply(\r\n\t\t\tint[] x,\r\n\t\t\tint[] y,\r\n\t\t\tint[] z)\r\n\t\t{\r\n\t\t\tint i = z.Length;\r\n\r\n\t\t\tif (i < 1)\r\n\t\t\t\treturn x;\r\n\r\n\t\t\tint xBase = x.Length - y.Length;\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tlong a = z[--i] & IMASK;\r\n\t\t\t\tlong val = 0;\r\n\r\n\t\t\t\tfor (int j = y.Length - 1; j >= 0; j--)\r\n\t\t\t\t{\r\n\t\t\t\t\tval += a * (y[j] & IMASK) + (x[xBase + j] & IMASK);\r\n\r\n\t\t\t\t\tx[xBase + j] = (int)val;\r\n\r\n\t\t\t\t\tval = (long)((ulong)val >> 32);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t--xBase;\r\n\r\n\t\t\t\tif (i < 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (xBase >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tx[xBase] = (int)val;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDebug.Assert(val == 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tx[xBase] = (int)val;\r\n\t\t\t}\r\n\r\n\t\t\treturn x;\r\n\t\t}\r\n\r\n\t\tprivate static long FastExtEuclid(\r\n\t\t\tlong a,\r\n\t\t\tlong b,\r\n\t\t\tlong[] uOut)\r\n\t\t{\r\n\t\t\tlong u1 = 1;\r\n\t\t\tlong u3 = a;\r\n\t\t\tlong v1 = 0;\r\n\t\t\tlong v3 = b;\r\n\r\n\t\t\twhile (v3 > 0)\r\n\t\t\t{\r\n\t\t\t\tlong q, tn;\r\n\r\n\t\t\t\tq = u3 / v3;\r\n\r\n\t\t\t\ttn = u1 - (v1 * q);\r\n\t\t\t\tu1 = v1;\r\n\t\t\t\tv1 = tn;\r\n\r\n\t\t\t\ttn = u3 - (v3 * q);\r\n\t\t\t\tu3 = v3;\r\n\t\t\t\tv3 = tn;\r\n\t\t\t}\r\n\r\n\t\t\tuOut[0] = u1;\r\n\t\t\tuOut[1] = (u3 - (u1 * a)) / b;\r\n\r\n\t\t\treturn u3;\r\n\t\t}\r\n\r\n\t\tprivate static long FastModInverse(\r\n\t\t\tlong v,\r\n\t\t\tlong m)\r\n\t\t{\r\n\t\t\tif (m < 1)\r\n\t\t\t\tthrow new ArithmeticException(\"Modulus must be positive\");\r\n\r\n\t\t\tlong[] x = new long[2];\r\n\t\t\tlong gcd = FastExtEuclid(v, m, x);\r\n\r\n\t\t\tif (gcd != 1)\r\n\t\t\t\tthrow new ArithmeticException(\"Numbers not relatively prime.\");\r\n\r\n\t\t\tif (x[0] < 0)\r\n\t\t\t{\r\n\t\t\t\tx[0] += m;\r\n\t\t\t}\r\n\r\n\t\t\treturn x[0];\r\n\t\t}\r\n\r\n\t\tprivate long GetMQuote()\r\n\t\t{\r\n\t\t\tDebug.Assert(m_sign > 0);\r\n\r\n\t\t\tif (m_quote != -1)\r\n\t\t\t{\r\n\t\t\t\treturn m_quote; // already calculated\r\n\t\t\t}\r\n\r\n\t\t\tif (m_magnitude.Length == 0 || (m_magnitude[m_magnitude.Length - 1] & 1) == 0)\r\n\t\t\t{\r\n\t\t\t\treturn -1; // not for even numbers\r\n\t\t\t}\r\n\r\n\t\t\tlong v = (((~m_magnitude[m_magnitude.Length - 1]) | 1) & 0xffffffffL);\r\n\t\t\tm_quote = FastModInverse(v, 0x100000000L);\r\n\r\n\t\t\treturn m_quote;\r\n\t\t}\r\n\r\n\t\tprivate static void MultiplyMonty(\r\n\t\t\tint[] a,\r\n\t\t\tint[] x,\r\n\t\t\tint[] y,\r\n\t\t\tint[] m,\r\n\t\t\tlong mQuote)\r\n\t\t// mQuote = -m^(-1) mod b\r\n\t\t{\r\n\t\t\tif (m.Length == 1)\r\n\t\t\t{\r\n\t\t\t\tx[0] = (int)MultiplyMontyNIsOne((uint)x[0], (uint)y[0], (uint)m[0], (ulong)mQuote);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tint n = m.Length;\r\n\t\t\tint nMinus1 = n - 1;\r\n\t\t\tlong y_0 = y[nMinus1] & IMASK;\r\n\r\n\t\t\t// 1. a = 0 (Notation: a = (a_{n} a_{n-1} ... a_{0})_{b} )\r\n\t\t\tArray.Clear(a, 0, n + 1);\r\n\r\n\t\t\t// 2. for i from 0 to (n - 1) do the following:\r\n\t\t\tfor (int i = n; i > 0; i--)\r\n\t\t\t{\r\n\t\t\t\tlong x_i = x[i - 1] & IMASK;\r\n\r\n\t\t\t\t// 2.1 u = ((a[0] + (x[i] * y[0]) * mQuote) mod b\r\n\t\t\t\tlong u = ((((a[n] & IMASK) + ((x_i * y_0) & IMASK)) & IMASK) * mQuote) & IMASK;\r\n\r\n\t\t\t\t// 2.2 a = (a + x_i * y + u * m) / b\r\n\t\t\t\tlong prod1 = x_i * y_0;\r\n\t\t\t\tlong prod2 = u * (m[nMinus1] & IMASK);\r\n\t\t\t\tlong tmp = (a[n] & IMASK) + (prod1 & IMASK) + (prod2 & IMASK);\r\n\t\t\t\tlong carry = (long)((ulong)prod1 >> 32) + (long)((ulong)prod2 >> 32) + (long)((ulong)tmp >> 32);\r\n\t\t\t\tfor (int j = nMinus1; j > 0; j--)\r\n\t\t\t\t{\r\n\t\t\t\t\tprod1 = x_i * (y[j - 1] & IMASK);\r\n\t\t\t\t\tprod2 = u * (m[j - 1] & IMASK);\r\n\t\t\t\t\ttmp = (a[j] & IMASK) + (prod1 & IMASK) + (prod2 & IMASK) + (carry & IMASK);\r\n\t\t\t\t\tcarry = (long)((ulong)carry >> 32) + (long)((ulong)prod1 >> 32) +\r\n\t\t\t\t\t\t(long)((ulong)prod2 >> 32) + (long)((ulong)tmp >> 32);\r\n\t\t\t\t\ta[j + 1] = (int)tmp; // division by b\r\n\t\t\t\t}\r\n\t\t\t\tcarry += (a[0] & IMASK);\r\n\t\t\t\ta[1] = (int)carry;\r\n\t\t\t\ta[0] = (int)((ulong)carry >> 32); // OJO!!!!!\r\n\t\t\t}\r\n\r\n\t\t\t// 3. if x >= m the x = x - m\r\n\t\t\tif (CompareTo(0, a, 0, m) >= 0)\r\n\t\t\t{\r\n\t\t\t\tSubtract(0, a, 0, m);\r\n\t\t\t}\r\n\r\n\t\t\t// put the result in x\r\n\t\t\tArray.Copy(a, 1, x, 0, n);\r\n\t\t}\r\n\r\n\t\tprivate static uint MultiplyMontyNIsOne(\r\n\t\t\tuint x,\r\n\t\t\tuint y,\r\n\t\t\tuint m,\r\n\t\t\tulong mQuote)\r\n\t\t{\r\n\t\t\tulong um = m;\r\n\t\t\tulong prod1 = (ulong)x * (ulong)y;\r\n\t\t\tulong u = (prod1 * mQuote) & UIMASK;\r\n\t\t\tulong prod2 = u * um;\r\n\t\t\tulong tmp = (prod1 & UIMASK) + (prod2 & UIMASK);\r\n\t\t\tulong carry = (prod1 >> 32) + (prod2 >> 32) + (tmp >> 32);\r\n\r\n\t\t\tif (carry > um)\r\n\t\t\t{\r\n\t\t\t\tcarry -= um;\r\n\t\t\t}\r\n\r\n\t\t\treturn (uint)(carry & UIMASK);\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Modulus(\r\n\t\t\tNetBigInteger val)\r\n\t\t{\r\n\t\t\treturn Mod(val);\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Multiply(\r\n\t\t\tNetBigInteger val)\r\n\t\t{\r\n\t\t\tif (m_sign == 0 || val.m_sign == 0)\r\n\t\t\t\treturn Zero;\r\n\r\n\t\t\tif (val.QuickPow2Check()) // val is power of two\r\n\t\t\t{\r\n\t\t\t\tNetBigInteger result = ShiftLeft(val.Abs().BitLength - 1);\r\n\t\t\t\treturn val.m_sign > 0 ? result : result.Negate();\r\n\t\t\t}\r\n\r\n\t\t\tif (QuickPow2Check()) // this is power of two\r\n\t\t\t{\r\n\t\t\t\tNetBigInteger result = val.ShiftLeft(Abs().BitLength - 1);\r\n\t\t\t\treturn m_sign > 0 ? result : result.Negate();\r\n\t\t\t}\r\n\r\n\t\t\tint maxBitLength = BitLength + val.BitLength;\r\n\t\t\tint resLength = (maxBitLength + BitsPerInt - 1) / BitsPerInt;\r\n\r\n\t\t\tint[] res = new int[resLength];\r\n\r\n\t\t\tif (val == this)\r\n\t\t\t{\r\n\t\t\t\tSquare(res, m_magnitude);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tMultiply(res, m_magnitude, val.m_magnitude);\r\n\t\t\t}\r\n\r\n\t\t\treturn new NetBigInteger(m_sign * val.m_sign, res, true);\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Negate()\r\n\t\t{\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn this;\r\n\r\n\t\t\treturn new NetBigInteger(-m_sign, m_magnitude, false);\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Not()\r\n\t\t{\r\n\t\t\treturn Inc().Negate();\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Pow(int exp)\r\n\t\t{\r\n\t\t\tif (exp < 0)\r\n\t\t\t{\r\n\t\t\t\tthrow new ArithmeticException(\"Negative exponent\");\r\n\t\t\t}\r\n\r\n\t\t\tif (exp == 0)\r\n\t\t\t{\r\n\t\t\t\treturn One;\r\n\t\t\t}\r\n\r\n\t\t\tif (m_sign == 0 || Equals(One))\r\n\t\t\t{\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tNetBigInteger y = One;\r\n\t\t\tNetBigInteger z = this;\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tif ((exp & 0x1) == 1)\r\n\t\t\t\t{\r\n\t\t\t\t\ty = y.Multiply(z);\r\n\t\t\t\t}\r\n\t\t\t\texp >>= 1;\r\n\t\t\t\tif (exp == 0) break;\r\n\t\t\t\tz = z.Multiply(z);\r\n\t\t\t}\r\n\r\n\t\t\treturn y;\r\n\t\t}\r\n\t\t\r\n\t\tprivate int Remainder(\r\n\t\t\tint m)\r\n\t\t{\r\n\t\t\tDebug.Assert(m > 0);\r\n\r\n\t\t\tlong acc = 0;\r\n\t\t\tfor (int pos = 0; pos < m_magnitude.Length; ++pos)\r\n\t\t\t{\r\n\t\t\t\tlong posVal = (uint)m_magnitude[pos];\r\n\t\t\t\tacc = (acc << 32 | posVal) % m;\r\n\t\t\t}\r\n\r\n\t\t\treturn (int)acc;\r\n\t\t}\r\n\r\n\t\t// return x = x % y - done in place (y value preserved)\r\n\t\tprivate int[] Remainder(\r\n\t\t\tint[] x,\r\n\t\t\tint[] y)\r\n\t\t{\r\n\t\t\tint xStart = 0;\r\n\t\t\twhile (xStart < x.Length && x[xStart] == 0)\r\n\t\t\t{\r\n\t\t\t\t++xStart;\r\n\t\t\t}\r\n\r\n\t\t\tint yStart = 0;\r\n\t\t\twhile (yStart < y.Length && y[yStart] == 0)\r\n\t\t\t{\r\n\t\t\t\t++yStart;\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Assert(yStart < y.Length);\r\n\r\n\t\t\tint xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y);\r\n\r\n\t\t\tif (xyCmp > 0)\r\n\t\t\t{\r\n\t\t\t\tint yBitLength = calcBitLength(yStart, y);\r\n\t\t\t\tint xBitLength = calcBitLength(xStart, x);\r\n\t\t\t\tint shift = xBitLength - yBitLength;\r\n\r\n\t\t\t\tint[] c;\r\n\t\t\t\tint cStart = 0;\r\n\t\t\t\tint cBitLength = yBitLength;\r\n\t\t\t\tif (shift > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tc = ShiftLeft(y, shift);\r\n\t\t\t\t\tcBitLength += shift;\r\n\t\t\t\t\tDebug.Assert(c[0] != 0);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tint len = y.Length - yStart;\r\n\t\t\t\t\tc = new int[len];\r\n\t\t\t\t\tArray.Copy(y, yStart, c, 0, len);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (; ; )\r\n\t\t\t\t{\r\n\t\t\t\t\tif (cBitLength < xBitLength\r\n\t\t\t\t\t\t|| CompareNoLeadingZeroes(xStart, x, cStart, c) >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSubtract(xStart, x, cStart, c);\r\n\r\n\t\t\t\t\t\twhile (x[xStart] == 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (++xStart == x.Length)\r\n\t\t\t\t\t\t\t\treturn x;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//xBitLength = calcBitLength(xStart, x);\r\n\t\t\t\t\t\txBitLength = 32 * (x.Length - xStart - 1) + BitLen(x[xStart]);\r\n\r\n\t\t\t\t\t\tif (xBitLength <= yBitLength)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (xBitLength < yBitLength)\r\n\t\t\t\t\t\t\t\treturn x;\r\n\r\n\t\t\t\t\t\t\txyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y);\r\n\r\n\t\t\t\t\t\t\tif (xyCmp <= 0)\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tshift = cBitLength - xBitLength;\r\n\r\n\t\t\t\t\t// NB: The case where c[cStart] is 1-bit is harmless\r\n\t\t\t\t\tif (shift == 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tuint firstC = (uint)c[cStart] >> 1;\r\n\t\t\t\t\t\tuint firstX = (uint)x[xStart];\r\n\t\t\t\t\t\tif (firstC > firstX)\r\n\t\t\t\t\t\t\t++shift;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (shift < 2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tc = ShiftRightOneInPlace(cStart, c);\r\n\t\t\t\t\t\t--cBitLength;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tc = ShiftRightInPlace(cStart, c, shift);\r\n\t\t\t\t\t\tcBitLength -= shift;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//cStart = c.Length - ((cBitLength + 31) / 32);\r\n\t\t\t\t\twhile (c[cStart] == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t++cStart;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (xyCmp == 0)\r\n\t\t\t{\r\n\t\t\t\tArray.Clear(x, xStart, x.Length - xStart);\r\n\t\t\t}\r\n\r\n\t\t\treturn x;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Remainder(\r\n\t\t\tNetBigInteger n)\r\n\t\t{\r\n\t\t\tif (n.m_sign == 0)\r\n\t\t\t\tthrow new ArithmeticException(\"Division by zero error\");\r\n\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn Zero;\r\n\r\n\t\t\t// For small values, use fast remainder method\r\n\t\t\tif (n.m_magnitude.Length == 1)\r\n\t\t\t{\r\n\t\t\t\tint val = n.m_magnitude[0];\r\n\r\n\t\t\t\tif (val > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (val == 1)\r\n\t\t\t\t\t\treturn Zero;\r\n\r\n\t\t\t\t\tint rem = Remainder(val);\r\n\r\n\t\t\t\t\treturn rem == 0\r\n\t\t\t\t\t\t? Zero\r\n\t\t\t\t\t\t: new NetBigInteger(m_sign, new int[] { rem }, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (CompareNoLeadingZeroes(0, m_magnitude, 0, n.m_magnitude) < 0)\r\n\t\t\t\treturn this;\r\n\r\n\t\t\tint[] result;\r\n\t\t\tif (n.QuickPow2Check())  // n is power of two\r\n\t\t\t{\r\n\t\t\t\tresult = LastNBits(n.Abs().BitLength - 1);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult = (int[])m_magnitude.Clone();\r\n\t\t\t\tresult = Remainder(result, n.m_magnitude);\r\n\t\t\t}\r\n\r\n\t\t\treturn new NetBigInteger(m_sign, result, true);\r\n\t\t}\r\n\r\n\t\tprivate int[] LastNBits(\r\n\t\t\tint n)\r\n\t\t{\r\n\t\t\tif (n < 1)\r\n\t\t\t\treturn ZeroMagnitude;\r\n\r\n\t\t\tint numWords = (n + BitsPerInt - 1) / BitsPerInt;\r\n\t\t\tnumWords = System.Math.Min(numWords, m_magnitude.Length);\r\n\t\t\tint[] result = new int[numWords];\r\n\r\n\t\t\tArray.Copy(m_magnitude, m_magnitude.Length - numWords, result, 0, numWords);\r\n\r\n\t\t\tint hiBits = n % 32;\r\n\t\t\tif (hiBits != 0)\r\n\t\t\t{\r\n\t\t\t\tresult[0] &= ~(-1 << hiBits);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\r\n\t\t// do a left shift - this returns a new array.\r\n\t\tprivate static int[] ShiftLeft(\r\n\t\t\tint[] mag,\r\n\t\t\tint n)\r\n\t\t{\r\n\t\t\tint nInts = (int)((uint)n >> 5);\r\n\t\t\tint nBits = n & 0x1f;\r\n\t\t\tint magLen = mag.Length;\r\n\t\t\tint[] newMag;\r\n\r\n\t\t\tif (nBits == 0)\r\n\t\t\t{\r\n\t\t\t\tnewMag = new int[magLen + nInts];\r\n\t\t\t\tmag.CopyTo(newMag, 0);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tint i = 0;\r\n\t\t\t\tint nBits2 = 32 - nBits;\r\n\t\t\t\tint highBits = (int)((uint)mag[0] >> nBits2);\r\n\r\n\t\t\t\tif (highBits != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tnewMag = new int[magLen + nInts + 1];\r\n\t\t\t\t\tnewMag[i++] = highBits;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tnewMag = new int[magLen + nInts];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tint m = mag[0];\r\n\t\t\t\tfor (int j = 0; j < magLen - 1; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tint next = mag[j + 1];\r\n\r\n\t\t\t\t\tnewMag[i++] = (m << nBits) | (int)((uint)next >> nBits2);\r\n\t\t\t\t\tm = next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnewMag[i] = mag[magLen - 1] << nBits;\r\n\t\t\t}\r\n\r\n\t\t\treturn newMag;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger ShiftLeft(\r\n\t\t\tint n)\r\n\t\t{\r\n\t\t\tif (m_sign == 0 || m_magnitude.Length == 0)\r\n\t\t\t\treturn Zero;\r\n\r\n\t\t\tif (n == 0)\r\n\t\t\t\treturn this;\r\n\r\n\t\t\tif (n < 0)\r\n\t\t\t\treturn ShiftRight(-n);\r\n\r\n\t\t\tNetBigInteger result = new NetBigInteger(m_sign, ShiftLeft(m_magnitude, n), true);\r\n\r\n\t\t\tif (m_numBits != -1)\r\n\t\t\t{\r\n\t\t\t\tresult.m_numBits = m_sign > 0\r\n\t\t\t\t\t? m_numBits\r\n\t\t\t\t\t: m_numBits + n;\r\n\t\t\t}\r\n\r\n\t\t\tif (m_numBitLength != -1)\r\n\t\t\t{\r\n\t\t\t\tresult.m_numBitLength = m_numBitLength + n;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t// do a right shift - this does it in place.\r\n\t\tprivate static int[] ShiftRightInPlace(\r\n\t\t\tint start,\r\n\t\t\tint[] mag,\r\n\t\t\tint n)\r\n\t\t{\r\n\t\t\tint nInts = (int)((uint)n >> 5) + start;\r\n\t\t\tint nBits = n & 0x1f;\r\n\t\t\tint magEnd = mag.Length - 1;\r\n\r\n\t\t\tif (nInts != start)\r\n\t\t\t{\r\n\t\t\t\tint delta = (nInts - start);\r\n\r\n\t\t\t\tfor (int i = magEnd; i >= nInts; i--)\r\n\t\t\t\t{\r\n\t\t\t\t\tmag[i] = mag[i - delta];\r\n\t\t\t\t}\r\n\t\t\t\tfor (int i = nInts - 1; i >= start; i--)\r\n\t\t\t\t{\r\n\t\t\t\t\tmag[i] = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (nBits != 0)\r\n\t\t\t{\r\n\t\t\t\tint nBits2 = 32 - nBits;\r\n\t\t\t\tint m = mag[magEnd];\r\n\r\n\t\t\t\tfor (int i = magEnd; i > nInts; --i)\r\n\t\t\t\t{\r\n\t\t\t\t\tint next = mag[i - 1];\r\n\r\n\t\t\t\t\tmag[i] = (int)((uint)m >> nBits) | (next << nBits2);\r\n\t\t\t\t\tm = next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmag[nInts] = (int)((uint)mag[nInts] >> nBits);\r\n\t\t\t}\r\n\r\n\t\t\treturn mag;\r\n\t\t}\r\n\r\n\t\t// do a right shift by one - this does it in place.\r\n\t\tprivate static int[] ShiftRightOneInPlace(\r\n\t\t\tint start,\r\n\t\t\tint[] mag)\r\n\t\t{\r\n\t\t\tint i = mag.Length;\r\n\t\t\tint m = mag[i - 1];\r\n\r\n\t\t\twhile (--i > start)\r\n\t\t\t{\r\n\t\t\t\tint next = mag[i - 1];\r\n\t\t\t\tmag[i] = ((int)((uint)m >> 1)) | (next << 31);\r\n\t\t\t\tm = next;\r\n\t\t\t}\r\n\r\n\t\t\tmag[start] = (int)((uint)mag[start] >> 1);\r\n\r\n\t\t\treturn mag;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger ShiftRight(\r\n\t\t\tint n)\r\n\t\t{\r\n\t\t\tif (n == 0)\r\n\t\t\t\treturn this;\r\n\r\n\t\t\tif (n < 0)\r\n\t\t\t\treturn ShiftLeft(-n);\r\n\r\n\t\t\tif (n >= BitLength)\r\n\t\t\t\treturn (m_sign < 0 ? One.Negate() : Zero);\r\n\r\n\t\t\t//\t\t\tint[] res = (int[]) magnitude.Clone();\r\n\t\t\t//\r\n\t\t\t//\t\t\tres = ShiftRightInPlace(0, res, n);\r\n\t\t\t//\r\n\t\t\t//\t\t\treturn new BigInteger(sign, res, true);\r\n\r\n\t\t\tint resultLength = (BitLength - n + 31) >> 5;\r\n\t\t\tint[] res = new int[resultLength];\r\n\r\n\t\t\tint numInts = n >> 5;\r\n\t\t\tint numBits = n & 31;\r\n\r\n\t\t\tif (numBits == 0)\r\n\t\t\t{\r\n\t\t\t\tArray.Copy(m_magnitude, 0, res, 0, res.Length);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tint numBits2 = 32 - numBits;\r\n\r\n\t\t\t\tint magPos = m_magnitude.Length - 1 - numInts;\r\n\t\t\t\tfor (int i = resultLength - 1; i >= 0; --i)\r\n\t\t\t\t{\r\n\t\t\t\t\tres[i] = (int)((uint)m_magnitude[magPos--] >> numBits);\r\n\r\n\t\t\t\t\tif (magPos >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tres[i] |= m_magnitude[magPos] << numBits2;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Assert(res[0] != 0);\r\n\r\n\t\t\treturn new NetBigInteger(m_sign, res, false);\r\n\t\t}\r\n\r\n\t\tpublic int SignValue\r\n\t\t{\r\n\t\t\tget { return m_sign; }\r\n\t\t}\r\n\r\n\t\t// returns x = x - y - we assume x is >= y\r\n\t\tprivate static int[] Subtract(\r\n\t\t\tint xStart,\r\n\t\t\tint[] x,\r\n\t\t\tint yStart,\r\n\t\t\tint[] y)\r\n\t\t{\r\n\t\t\tDebug.Assert(yStart < y.Length);\r\n\t\t\tDebug.Assert(x.Length - xStart >= y.Length - yStart);\r\n\r\n\t\t\tint iT = x.Length;\r\n\t\t\tint iV = y.Length;\r\n\t\t\tlong m;\r\n\t\t\tint borrow = 0;\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tm = (x[--iT] & IMASK) - (y[--iV] & IMASK) + borrow;\r\n\t\t\t\tx[iT] = (int)m;\r\n\r\n\t\t\t\t//\t\t\t\tborrow = (m < 0) ? -1 : 0;\r\n\t\t\t\tborrow = (int)(m >> 63);\r\n\t\t\t}\r\n\t\t\twhile (iV > yStart);\r\n\r\n\t\t\tif (borrow != 0)\r\n\t\t\t{\r\n\t\t\t\twhile (--x[--iT] == -1)\r\n\t\t\t\t{\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn x;\r\n\t\t}\r\n\r\n\t\tpublic NetBigInteger Subtract(\r\n\t\t\tNetBigInteger n)\r\n\t\t{\r\n\t\t\tif (n.m_sign == 0)\r\n\t\t\t\treturn this;\r\n\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn n.Negate();\r\n\r\n\t\t\tif (m_sign != n.m_sign)\r\n\t\t\t\treturn Add(n.Negate());\r\n\r\n\t\t\tint compare = CompareNoLeadingZeroes(0, m_magnitude, 0, n.m_magnitude);\r\n\t\t\tif (compare == 0)\r\n\t\t\t\treturn Zero;\r\n\r\n\t\t\tNetBigInteger bigun, lilun;\r\n\t\t\tif (compare < 0)\r\n\t\t\t{\r\n\t\t\t\tbigun = n;\r\n\t\t\t\tlilun = this;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tbigun = this;\r\n\t\t\t\tlilun = n;\r\n\t\t\t}\r\n\r\n\t\t\treturn new NetBigInteger(m_sign * compare, doSubBigLil(bigun.m_magnitude, lilun.m_magnitude), true);\r\n\t\t}\r\n\r\n\t\tprivate static int[] doSubBigLil(\r\n\t\t\tint[] bigMag,\r\n\t\t\tint[] lilMag)\r\n\t\t{\r\n\t\t\tint[] res = (int[])bigMag.Clone();\r\n\r\n\t\t\treturn Subtract(0, res, 0, lilMag);\r\n\t\t}\r\n\r\n\t\tpublic byte[] ToByteArray()\r\n\t\t{\r\n\t\t\treturn ToByteArray(false);\r\n\t\t}\r\n\r\n\t\tpublic byte[] ToByteArrayUnsigned()\r\n\t\t{\r\n\t\t\treturn ToByteArray(true);\r\n\t\t}\r\n\r\n\t\tprivate byte[] ToByteArray(\r\n\t\t\tbool unsigned)\r\n\t\t{\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn unsigned ? ZeroEncoding : new byte[1];\r\n\r\n\t\t\tint nBits = (unsigned && m_sign > 0)\r\n\t\t\t\t? BitLength\r\n\t\t\t\t: BitLength + 1;\r\n\r\n\t\t\tint nBytes = GetByteLength(nBits);\r\n\t\t\tbyte[] bytes = new byte[nBytes];\r\n\r\n\t\t\tint magIndex = m_magnitude.Length;\r\n\t\t\tint bytesIndex = bytes.Length;\r\n\r\n\t\t\tif (m_sign > 0)\r\n\t\t\t{\r\n\t\t\t\twhile (magIndex > 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tuint mag = (uint)m_magnitude[--magIndex];\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)mag;\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)(mag >> 8);\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)(mag >> 16);\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)(mag >> 24);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuint lastMag = (uint)m_magnitude[0];\r\n\t\t\t\twhile (lastMag > byte.MaxValue)\r\n\t\t\t\t{\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)lastMag;\r\n\t\t\t\t\tlastMag >>= 8;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbytes[--bytesIndex] = (byte)lastMag;\r\n\t\t\t}\r\n\t\t\telse // sign < 0\r\n\t\t\t{\r\n\t\t\t\tbool carry = true;\r\n\r\n\t\t\t\twhile (magIndex > 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tuint mag = ~((uint)m_magnitude[--magIndex]);\r\n\r\n\t\t\t\t\tif (carry)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcarry = (++mag == uint.MinValue);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)mag;\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)(mag >> 8);\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)(mag >> 16);\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)(mag >> 24);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuint lastMag = (uint)m_magnitude[0];\r\n\r\n\t\t\t\tif (carry)\r\n\t\t\t\t{\r\n\t\t\t\t\t// Never wraps because magnitude[0] != 0\r\n\t\t\t\t\t--lastMag;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (lastMag > byte.MaxValue)\r\n\t\t\t\t{\r\n\t\t\t\t\tbytes[--bytesIndex] = (byte)~lastMag;\r\n\t\t\t\t\tlastMag >>= 8;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbytes[--bytesIndex] = (byte)~lastMag;\r\n\r\n\t\t\t\tif (bytesIndex > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tbytes[--bytesIndex] = byte.MaxValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn bytes;\r\n\t\t}\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn ToString(10);\r\n\t\t}\r\n\r\n\t\tpublic string ToString(\r\n\t\t\tint radix)\r\n\t\t{\r\n\t\t\tswitch (radix)\r\n\t\t\t{\r\n\t\t\t\tcase 2:\r\n\t\t\t\tcase 10:\r\n\t\t\t\tcase 16:\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new FormatException(\"Only bases 2, 10, 16 are allowed\");\r\n\t\t\t}\r\n\r\n\t\t\t// NB: Can only happen to internally managed instances\r\n\t\t\tif (m_magnitude == null)\r\n\t\t\t\treturn \"null\";\r\n\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn \"0\";\r\n\r\n\t\t\tDebug.Assert(m_magnitude.Length > 0);\r\n\r\n\t\t\tStringBuilder sb = new StringBuilder();\r\n\r\n\t\t\tif (radix == 16)\r\n\t\t\t{\r\n\t\t\t\tsb.Append(m_magnitude[0].ToString(\"x\"));\r\n\r\n\t\t\t\tfor (int i = 1; i < m_magnitude.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(m_magnitude[i].ToString(\"x8\"));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (radix == 2)\r\n\t\t\t{\r\n\t\t\t\tsb.Append('1');\r\n\r\n\t\t\t\tfor (int i = BitLength - 2; i >= 0; --i)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(TestBit(i) ? '1' : '0');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// This is algorithm 1a from chapter 4.4 in Seminumerical Algorithms, slow but it works\r\n\t\t\t\tStack S = new Stack();\r\n\t\t\t\tNetBigInteger bs = ValueOf(radix);\r\n\r\n\t\t\t\tNetBigInteger u = Abs();\r\n\t\t\t\tNetBigInteger b;\r\n\r\n\t\t\t\twhile (u.m_sign != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tb = u.Mod(bs);\r\n\t\t\t\t\tif (b.m_sign == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tS.Push(\"0\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// see how to interact with different bases\r\n\t\t\t\t\t\tS.Push(b.m_magnitude[0].ToString(\"d\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tu = u.Divide(bs);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Then pop the stack\r\n\t\t\t\twhile (S.Count != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append((string)S.Pop());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tstring s = sb.ToString();\r\n\r\n\t\t\tDebug.Assert(s.Length > 0);\r\n\r\n\t\t\t// Strip leading zeros. (We know this number is not all zeroes though)\r\n\t\t\tif (s[0] == '0')\r\n\t\t\t{\r\n\t\t\t\tint nonZeroPos = 0;\r\n\t\t\t\twhile (s[++nonZeroPos] == '0') { }\r\n\r\n\t\t\t\ts = s.Substring(nonZeroPos);\r\n\t\t\t}\r\n\r\n\t\t\tif (m_sign == -1)\r\n\t\t\t{\r\n\t\t\t\ts = \"-\" + s;\r\n\t\t\t}\r\n\r\n\t\t\treturn s;\r\n\t\t}\r\n\r\n\t\tprivate static NetBigInteger createUValueOf(\r\n\t\t\tulong value)\r\n\t\t{\r\n\t\t\tint msw = (int)(value >> 32);\r\n\t\t\tint lsw = (int)value;\r\n\r\n\t\t\tif (msw != 0)\r\n\t\t\t\treturn new NetBigInteger(1, new int[] { msw, lsw }, false);\r\n\r\n\t\t\tif (lsw != 0)\r\n\t\t\t{\r\n\t\t\t\tNetBigInteger n = new NetBigInteger(1, new int[] { lsw }, false);\r\n\t\t\t\t// Check for a power of two\r\n\t\t\t\tif ((lsw & -lsw) == lsw)\r\n\t\t\t\t{\r\n\t\t\t\t\tn.m_numBits = 1;\r\n\t\t\t\t}\r\n\t\t\t\treturn n;\r\n\t\t\t}\r\n\r\n\t\t\treturn Zero;\r\n\t\t}\r\n\r\n\t\tprivate static NetBigInteger createValueOf(\r\n\t\t\tlong value)\r\n\t\t{\r\n\t\t\tif (value < 0)\r\n\t\t\t{\r\n\t\t\t\tif (value == long.MinValue)\r\n\t\t\t\t\treturn createValueOf(~value).Not();\r\n\r\n\t\t\t\treturn createValueOf(-value).Negate();\r\n\t\t\t}\r\n\r\n\t\t\treturn createUValueOf((ulong)value);\r\n\t\t}\r\n\r\n\t\tpublic static NetBigInteger ValueOf(\r\n\t\t\tlong value)\r\n\t\t{\r\n\t\t\tswitch (value)\r\n\t\t\t{\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\treturn Zero;\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\treturn One;\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\treturn Two;\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\treturn Three;\r\n\t\t\t\tcase 10:\r\n\t\t\t\t\treturn Ten;\r\n\t\t\t}\r\n\r\n\t\t\treturn createValueOf(value);\r\n\t\t}\r\n\r\n\t\tpublic int GetLowestSetBit()\r\n\t\t{\r\n\t\t\tif (m_sign == 0)\r\n\t\t\t\treturn -1;\r\n\r\n\t\t\tint w = m_magnitude.Length;\r\n\r\n\t\t\twhile (--w > 0)\r\n\t\t\t{\r\n\t\t\t\tif (m_magnitude[w] != 0)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tint word = (int)m_magnitude[w];\r\n\t\t\tDebug.Assert(word != 0);\r\n\r\n\t\t\tint b = (word & 0x0000FFFF) == 0\r\n\t\t\t\t? (word & 0x00FF0000) == 0\r\n\t\t\t\t\t? 7\r\n\t\t\t\t\t: 15\r\n\t\t\t\t: (word & 0x000000FF) == 0\r\n\t\t\t\t\t? 23\r\n\t\t\t\t\t: 31;\r\n\r\n\t\t\twhile (b > 0)\r\n\t\t\t{\r\n\t\t\t\tif ((word << b) == int.MinValue)\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tb--;\r\n\t\t\t}\r\n\r\n\t\t\treturn ((m_magnitude.Length - w) * 32 - (b + 1));\r\n\t\t}\r\n\r\n\t\tpublic bool TestBit(\r\n\t\t\tint n)\r\n\t\t{\r\n\t\t\tif (n < 0)\r\n\t\t\t\tthrow new ArithmeticException(\"Bit position must not be negative\");\r\n\r\n\t\t\tif (m_sign < 0)\r\n\t\t\t\treturn !Not().TestBit(n);\r\n\r\n\t\t\tint wordNum = n / 32;\r\n\t\t\tif (wordNum >= m_magnitude.Length)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tint word = m_magnitude[m_magnitude.Length - 1 - wordNum];\r\n\t\t\treturn ((word >> (n % 32)) & 1) > 0;\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBitVector.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\nusing System;\r\nusing System.Text;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Fixed size vector of booleans\r\n\t/// </summary>\r\n\tpublic sealed class NetBitVector\r\n\t{\r\n\t\tprivate readonly int m_capacity;\r\n\t\tprivate readonly int[] m_data;\r\n\t\tprivate int m_numBitsSet;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of bits/booleans stored in this vector\r\n\t\t/// </summary>\r\n\t\tpublic int Capacity { get { return m_capacity; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetBitVector constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetBitVector(int bitsCapacity)\r\n\t\t{\r\n\t\t\tm_capacity = bitsCapacity;\r\n\t\t\tm_data = new int[(bitsCapacity + 31) / 32];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns true if all bits/booleans are set to zero/false\r\n\t\t/// </summary>\r\n\t\tpublic bool IsEmpty()\r\n\t\t{\r\n\t\t\treturn (m_numBitsSet == 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the number of bits/booleans set to one/true\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic int Count()\r\n\t\t{\r\n\t\t\treturn m_numBitsSet;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shift all bits one step down, cycling the first bit to the top\r\n\t\t/// </summary>\r\n\t\tpublic void RotateDown()\r\n\t\t{\r\n\t\t\tint lenMinusOne = m_data.Length - 1;\r\n\r\n\t\t\tint firstBit = m_data[0] & 1;\r\n\t\t\tfor (int i = 0; i < lenMinusOne; i++)\r\n\t\t\t\tm_data[i] = ((m_data[i] >> 1) & ~(1 << 31)) | m_data[i + 1] << 31;\r\n\r\n\t\t\tint lastIndex = m_capacity - 1 - (32 * lenMinusOne);\r\n\r\n\t\t\t// special handling of last int\r\n\t\t\tint cur = m_data[lenMinusOne];\r\n\t\t\tcur = cur >> 1;\r\n\t\t\tcur |= firstBit << lastIndex;\r\n\r\n\t\t\tm_data[lenMinusOne] = cur;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the first (lowest) index set to true\r\n\t\t/// </summary>\r\n\t\tpublic int GetFirstSetIndex()\r\n\t\t{\r\n\t\t\tint idx = 0;\r\n\r\n\t\t\tint data = m_data[0];\r\n\t\t\twhile (data == 0)\r\n\t\t\t{\r\n\t\t\t\tidx++;\r\n\t\t\t\tdata = m_data[idx];\r\n\t\t\t}\r\n\r\n\t\t\tint a = 0;\r\n\t\t\twhile (((data >> a) & 1) == 0)\r\n\t\t\t\ta++;\r\n\r\n\t\t\treturn (idx * 32) + a;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the bit/bool at the specified index\r\n\t\t/// </summary>\r\n\t\tpublic bool Get(int bitIndex)\r\n\t\t{\r\n\t\t\tNetException.Assert(bitIndex >= 0 && bitIndex < m_capacity);\r\n\r\n\t\t\treturn (m_data[bitIndex / 32] & (1 << (bitIndex % 32))) != 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets or clears the bit/bool at the specified index\r\n\t\t/// </summary>\r\n\t\tpublic void Set(int bitIndex, bool value)\r\n\t\t{\r\n\t\t\tNetException.Assert(bitIndex >= 0 && bitIndex < m_capacity);\r\n\r\n\t\t\tint idx = bitIndex / 32;\r\n\t\t\tif (value)\r\n\t\t\t{\r\n\t\t\t\tif ((m_data[idx] & (1 << (bitIndex % 32))) == 0)\r\n\t\t\t\t\tm_numBitsSet++;\r\n\t\t\t\tm_data[idx] |= (1 << (bitIndex % 32));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif ((m_data[idx] & (1 << (bitIndex % 32))) != 0)\r\n\t\t\t\t\tm_numBitsSet--;\r\n\t\t\t\tm_data[idx] &= (~(1 << (bitIndex % 32)));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the bit/bool at the specified index\r\n\t\t/// </summary>\r\n\t\t[System.Runtime.CompilerServices.IndexerName(\"Bit\")]\r\n\t\tpublic bool this[int index]\r\n\t\t{\r\n\t\t\tget { return Get(index); }\r\n\t\t\tset { Set(index, value); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets all bits/booleans to zero/false\r\n\t\t/// </summary>\r\n\t\tpublic void Clear()\r\n\t\t{\r\n\t\t\tArray.Clear(m_data, 0, m_data.Length);\r\n\t\t\tm_numBitsSet = 0;\r\n\t\t\tNetException.Assert(this.IsEmpty());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents this object\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tStringBuilder bdr = new StringBuilder(m_capacity + 2);\r\n\t\t\tbdr.Append('[');\r\n\t\t\tfor (int i = 0; i < m_capacity; i++)\r\n\t\t\t\tbdr.Append(Get(m_capacity - i - 1) ? '1' : '0');\r\n\t\t\tbdr.Append(']');\r\n\t\t\treturn bdr.ToString();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBitWriter.cs",
    "content": "﻿//#define UNSAFE\r\n//#define BIGENDIAN\r\n/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Helper class for NetBuffer to write/read bits\r\n\t/// </summary>\r\n\tpublic static class NetBitWriter\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Read 1-8 bits from a buffer into a byte\r\n\t\t/// </summary>\r\n\t\tpublic static byte ReadByte(byte[] fromBuffer, int numberOfBits, int readBitOffset)\r\n\t\t{\r\n\t\t\tNetException.Assert(((numberOfBits > 0) && (numberOfBits < 9)), \"Read() can only read between 1 and 8 bits\");\r\n\r\n\t\t\tint bytePtr = readBitOffset >> 3;\r\n\t\t\tint startReadAtIndex = readBitOffset - (bytePtr * 8); // (readBitOffset % 8);\r\n\r\n\t\t\tif (startReadAtIndex == 0 && numberOfBits == 8)\r\n\t\t\t\treturn fromBuffer[bytePtr];\r\n\r\n\t\t\t// mask away unused bits lower than (right of) relevant bits in first byte\r\n\t\t\tbyte returnValue = (byte)(fromBuffer[bytePtr] >> startReadAtIndex);\r\n\r\n\t\t\tint numberOfBitsInSecondByte = numberOfBits - (8 - startReadAtIndex);\r\n\r\n\t\t\tif (numberOfBitsInSecondByte < 1)\r\n\t\t\t{\r\n\t\t\t\t// we don't need to read from the second byte, but we DO need\r\n\t\t\t\t// to mask away unused bits higher than (left of) relevant bits\r\n\t\t\t\treturn (byte)(returnValue & (255 >> (8 - numberOfBits)));\r\n\t\t\t}\r\n\r\n\t\t\tbyte second = fromBuffer[bytePtr + 1];\r\n\r\n\t\t\t// mask away unused bits higher than (left of) relevant bits in second byte\r\n\t\t\tsecond &= (byte)(255 >> (8 - numberOfBitsInSecondByte));\r\n\r\n\t\t\treturn (byte)(returnValue | (byte)(second << (numberOfBits - numberOfBitsInSecondByte)));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Read several bytes from a buffer\r\n\t\t/// </summary>\r\n\t\tpublic static void ReadBytes(byte[] fromBuffer, int numberOfBytes, int readBitOffset, byte[] destination, int destinationByteOffset)\r\n\t\t{\r\n\t\t\tint readPtr = readBitOffset >> 3;\r\n\t\t\tint startReadAtIndex = readBitOffset - (readPtr * 8); // (readBitOffset % 8);\r\n\r\n\t\t\tif (startReadAtIndex == 0)\r\n\t\t\t{\r\n\t\t\t\tBuffer.BlockCopy(fromBuffer, readPtr, destination, destinationByteOffset, numberOfBytes);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tint secondPartLen = 8 - startReadAtIndex;\r\n\t\t\tint secondMask = 255 >> secondPartLen;\r\n\r\n\t\t\tfor (int i = 0; i < numberOfBytes; i++)\r\n\t\t\t{\r\n\t\t\t\t// mask away unused bits lower than (right of) relevant bits in byte\r\n\t\t\t\tint b = fromBuffer[readPtr] >> startReadAtIndex;\r\n\r\n\t\t\t\treadPtr++;\r\n\r\n\t\t\t\t// mask away unused bits higher than (left of) relevant bits in second byte\r\n\t\t\t\tint second = fromBuffer[readPtr] & secondMask;\r\n\r\n\t\t\t\tdestination[destinationByteOffset++] = (byte)(b | (second << secondPartLen));\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Write 0-8 bits of data to buffer\r\n\t\t/// </summary>\r\n\t\tpublic static void WriteByte(byte source, int numberOfBits, byte[] destination, int destBitOffset)\r\n\t\t{\r\n\t\t\tif (numberOfBits == 0)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tNetException.Assert(((numberOfBits >= 0) && (numberOfBits <= 8)), \"Must write between 0 and 8 bits!\");\r\n\r\n\t\t\t// Mask out all the bits we dont want\r\n\t\t\tsource = (byte)(source & (0xFF >> (8 - numberOfBits)));\r\n\r\n\t\t\tint p = destBitOffset >> 3;\r\n\t\t\tint bitsUsed = destBitOffset & 0x7; // mod 8\r\n\t\t\tint bitsFree = 8 - bitsUsed;\r\n\t\t\tint bitsLeft = bitsFree - numberOfBits;\r\n\r\n\t\t\t// Fast path, everything fits in the first byte\r\n\t\t\tif (bitsLeft >= 0)\r\n\t\t\t{\r\n\t\t\t\tint mask = (0xFF >> bitsFree) | (0xFF << (8 - bitsLeft));\r\n\r\n\t\t\t\tdestination[p] = (byte)(\r\n\t\t\t\t\t// Mask out lower and upper bits\r\n\t\t\t\t\t(destination[p] & mask) |\r\n\r\n\t\t\t\t\t// Insert new bits\r\n\t\t\t\t\t(source << bitsUsed)\r\n\t\t\t\t);\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tdestination[p] = (byte)(\r\n\t\t\t\t// Mask out upper bits\r\n\t\t\t\t(destination[p] & (0xFF >> bitsFree)) |\r\n\r\n\t\t\t\t// Write the lower bits to the upper bits in the first byte\r\n\t\t\t\t(source << bitsUsed)\r\n\t\t\t);\r\n\r\n\t\t\tp += 1;\r\n\r\n\t\t\tdestination[p] = (byte)(\r\n\t\t\t\t// Mask out lower bits\r\n\t\t\t\t(destination[p] & (0xFF << (numberOfBits - bitsFree))) |\r\n\r\n\t\t\t\t// Write the upper bits to the lower bits of the second byte\r\n\t\t\t\t(source >> bitsFree)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Write several whole bytes\r\n\t\t/// </summary>\r\n\t\tpublic static void WriteBytes(byte[] source, int sourceByteOffset, int numberOfBytes, byte[] destination, int destBitOffset)\r\n\t\t{\r\n\t\t\tint dstBytePtr = destBitOffset >> 3;\r\n\t\t\tint firstPartLen = (destBitOffset % 8);\r\n\r\n\t\t\tif (firstPartLen == 0)\r\n\t\t\t{\r\n\t\t\t\tBuffer.BlockCopy(source, sourceByteOffset, destination, dstBytePtr, numberOfBytes);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tint lastPartLen = 8 - firstPartLen;\r\n\r\n\t\t\tfor (int i = 0; i < numberOfBytes; i++)\r\n\t\t\t{\r\n\t\t\t\tbyte src = source[sourceByteOffset + i];\r\n\r\n\t\t\t\t// write last part of this byte\r\n\t\t\t\tdestination[dstBytePtr] &= (byte)(255 >> lastPartLen); // clear before writing\r\n\t\t\t\tdestination[dstBytePtr] |= (byte)(src << firstPartLen); // write first half\r\n\r\n\t\t\t\tdstBytePtr++;\r\n\r\n\t\t\t\t// write first part of next byte\r\n\t\t\t\tdestination[dstBytePtr] &= (byte)(255 << firstPartLen); // clear before writing\r\n\t\t\t\tdestination[dstBytePtr] |= (byte)(src >> lastPartLen); // write second half\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads an unsigned 16 bit integer\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n#if UNSAFE\r\n\t\tpublic static unsafe ushort ReadUInt16(byte[] fromBuffer, int numberOfBits, int readBitOffset)\r\n\t\t{\r\n\t\t\tDebug.Assert(((numberOfBits > 0) && (numberOfBits <= 16)), \"ReadUInt16() can only read between 1 and 16 bits\");\r\n\r\n\t\t\tif (numberOfBits == 16 && ((readBitOffset % 8) == 0))\r\n\t\t\t{\r\n\t\t\t\tfixed (byte* ptr = &(fromBuffer[readBitOffset / 8]))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn *(((ushort*)ptr));\r\n\t\t\t\t}\r\n\t\t\t}\r\n#else\r\n\t\tpublic static ushort ReadUInt16(byte[] fromBuffer, int numberOfBits, int readBitOffset)\r\n\t\t{\r\n\t\t\tDebug.Assert(((numberOfBits > 0) && (numberOfBits <= 16)), \"ReadUInt16() can only read between 1 and 16 bits\");\r\n#endif\r\n\t\t\tushort returnValue;\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\treturnValue = ReadByte(fromBuffer, numberOfBits, readBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\treturnValue = ReadByte(fromBuffer, 8, readBitOffset);\r\n\t\t\tnumberOfBits -= 8;\r\n\t\t\treadBitOffset += 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\treturnValue |= (ushort)(ReadByte(fromBuffer, numberOfBits, readBitOffset) << 8);\r\n\t\t\t}\r\n\r\n#if BIGENDIAN\r\n\t\t\t// reorder bytes\r\n\t\t\tuint retVal = returnValue;\r\n\t\t\tretVal = ((retVal & 0x0000ff00) >> 8) | ((retVal & 0x000000ff) << 8);\r\n\t\t\treturn (ushort)retVal;\r\n#else\r\n\t\t\treturn returnValue;\r\n#endif\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads the specified number of bits into an UInt32\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n#if UNSAFE\r\n\t\tpublic static unsafe uint ReadUInt32(byte[] fromBuffer, int numberOfBits, int readBitOffset)\r\n\t\t{\r\n\t\t\tNetException.Assert(((numberOfBits > 0) && (numberOfBits <= 32)), \"ReadUInt32() can only read between 1 and 32 bits\");\r\n\r\n\t\t\tif (numberOfBits == 32 && ((readBitOffset % 8) == 0))\r\n\t\t\t{\r\n\t\t\t\tfixed (byte* ptr = &(fromBuffer[readBitOffset / 8]))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn *(((uint*)ptr));\r\n\t\t\t\t}\r\n\t\t\t}\r\n#else\r\n\t\t\r\n\t\tpublic static uint ReadUInt32(byte[] fromBuffer, int numberOfBits, int readBitOffset)\r\n\t\t{\r\n\t\t\tNetException.Assert(((numberOfBits > 0) && (numberOfBits <= 32)), \"ReadUInt32() can only read between 1 and 32 bits\");\r\n#endif\r\n\t\t\tuint returnValue;\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\treturnValue = ReadByte(fromBuffer, numberOfBits, readBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\treturnValue = ReadByte(fromBuffer, 8, readBitOffset);\r\n\t\t\tnumberOfBits -= 8;\r\n\t\t\treadBitOffset += 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\treturnValue |= (uint)(ReadByte(fromBuffer, numberOfBits, readBitOffset) << 8);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\treturnValue |= (uint)(ReadByte(fromBuffer, 8, readBitOffset) << 8);\r\n\t\t\tnumberOfBits -= 8;\r\n\t\t\treadBitOffset += 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tuint r = ReadByte(fromBuffer, numberOfBits, readBitOffset);\r\n\t\t\t\tr <<= 16;\r\n\t\t\t\treturnValue |= r;\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\treturnValue |= (uint)(ReadByte(fromBuffer, 8, readBitOffset) << 16);\r\n\t\t\tnumberOfBits -= 8;\r\n\t\t\treadBitOffset += 8;\r\n\r\n\t\t\treturnValue |= (uint)(ReadByte(fromBuffer, numberOfBits, readBitOffset) << 24);\r\n\r\n#if BIGENDIAN\r\n\t\t\t// reorder bytes\r\n\t\t\treturn\r\n\t\t\t\t((returnValue & 0xff000000) >> 24) |\r\n\t\t\t\t((returnValue & 0x00ff0000) >> 8) |\r\n\t\t\t\t((returnValue & 0x0000ff00) << 8) |\r\n\t\t\t\t((returnValue & 0x000000ff) << 24);\r\n#else\r\n\t\t\treturn returnValue;\r\n#endif\r\n\t\t}\r\n\r\n\t\t//[CLSCompliant(false)]\r\n\t\t//public static ulong ReadUInt64(byte[] fromBuffer, int numberOfBits, int readBitOffset)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes an unsigned 16 bit integer\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic static void WriteUInt16(ushort source, int numberOfBits, byte[] destination, int destinationBitOffset)\r\n\t\t{\r\n\t\t\tif (numberOfBits == 0)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tNetException.Assert((numberOfBits >= 0 && numberOfBits <= 16), \"numberOfBits must be between 0 and 16\");\r\n#if BIGENDIAN\r\n\t\t\t// reorder bytes\r\n\t\t\tuint intSource = source;\r\n\t\t\tintSource = ((intSource & 0x0000ff00) >> 8) | ((intSource & 0x000000ff) << 8);\r\n\t\t\tsource = (ushort)intSource;\r\n#endif\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)source, numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tNetBitWriter.WriteByte((byte)source, 8, destination, destinationBitOffset);\r\n\r\n\t\t\tnumberOfBits -= 8;\r\n\t\t\tif (numberOfBits > 0)\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 8), numberOfBits, destination, destinationBitOffset + 8);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes the specified number of bits into a byte array\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic static int WriteUInt32(uint source, int numberOfBits, byte[] destination, int destinationBitOffset)\r\n\t\t{\r\n#if BIGENDIAN\r\n\t\t\t// reorder bytes\r\n\t\t\tsource = ((source & 0xff000000) >> 24) |\r\n\t\t\t\t((source & 0x00ff0000) >> 8) |\r\n\t\t\t\t((source & 0x0000ff00) << 8) |\r\n\t\t\t\t((source & 0x000000ff) << 24);\r\n#endif\r\n\r\n\t\t\tint returnValue = destinationBitOffset + numberOfBits;\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)source, numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)source, 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 8), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 8), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 16), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 16), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 24), numberOfBits, destination, destinationBitOffset);\r\n\t\t\treturn returnValue;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes the specified number of bits into a byte array\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic static int WriteUInt64(ulong source, int numberOfBits, byte[] destination, int destinationBitOffset)\r\n\t\t{\r\n#if BIGENDIAN\r\n\t\t\tsource = ((source & 0xff00000000000000L) >> 56) |\r\n\t\t\t\t((source & 0x00ff000000000000L) >> 40) |\r\n\t\t\t\t((source & 0x0000ff0000000000L) >> 24) |\r\n\t\t\t\t((source & 0x000000ff00000000L) >> 8) |\r\n\t\t\t\t((source & 0x00000000ff000000L) << 8) |\r\n\t\t\t\t((source & 0x0000000000ff0000L) << 24) |\r\n\t\t\t\t((source & 0x000000000000ff00L) << 40) |\r\n\t\t\t\t((source & 0x00000000000000ffL) << 56);\r\n#endif\r\n\r\n\t\t\tint returnValue = destinationBitOffset + numberOfBits;\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)source, numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)source, 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 8), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 8), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 16), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 16), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 24), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 24), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 32), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 32), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 40), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 40), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 48), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 48), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\tif (numberOfBits <= 8)\r\n\t\t\t{\r\n\t\t\t\tNetBitWriter.WriteByte((byte)(source >> 56), numberOfBits, destination, destinationBitOffset);\r\n\t\t\t\treturn returnValue;\r\n\t\t\t}\r\n\t\t\tNetBitWriter.WriteByte((byte)(source >> 56), 8, destination, destinationBitOffset);\r\n\t\t\tdestinationBitOffset += 8;\r\n\t\t\tnumberOfBits -= 8;\r\n\r\n\t\t\treturn returnValue;\r\n\t\t}\r\n\r\n\t\t//\r\n\t\t// Variable size\r\n\t\t//\r\n\r\n\t\t/// <summary>\r\n\t\t/// Write Base128 encoded variable sized unsigned integer\r\n\t\t/// </summary>\r\n\t\t/// <returns>number of bytes written</returns>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic static int WriteVariableUInt32(byte[] intoBuffer, int offset, uint value)\r\n\t\t{\r\n\t\t\tint retval = 0;\r\n\t\t\tuint num1 = (uint)value;\r\n\t\t\twhile (num1 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tintoBuffer[offset + retval] = (byte)(num1 | 0x80);\r\n\t\t\t\tnum1 = num1 >> 7;\r\n\t\t\t\tretval++;\r\n\t\t\t}\r\n\t\t\tintoBuffer[offset + retval] = (byte)num1;\r\n\t\t\treturn retval + 1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads a UInt32 written using WriteUnsignedVarInt(); will increment offset!\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic static uint ReadVariableUInt32(byte[] buffer, ref int offset)\r\n\t\t{\r\n\t\t\tint num1 = 0;\r\n\t\t\tint num2 = 0;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tNetException.Assert(num2 != 0x23, \"Bad 7-bit encoded integer\");\r\n\r\n\t\t\t\tbyte num3 = buffer[offset++];\r\n\t\t\t\tnum1 |= (num3 & 0x7f) << (num2 & 0x1f);\r\n\t\t\t\tnum2 += 7;\r\n\t\t\t\tif ((num3 & 0x80) == 0)\r\n\t\t\t\t\treturn (uint)num1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBuffer.Peek.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\nthe Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or\nsubstantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\nusing System;\nusing System.Diagnostics;\nusing System.Net;\n\nnamespace Lidgren.Network\n{\n\tpublic partial class NetBuffer\n\t{\n\t\t/// <summary>\n\t\t/// Gets the internal data buffer\n\t\t/// </summary>\n\t\tpublic byte[] PeekDataBuffer() { return m_data; }\n\n\t\t//\n\t\t// 1 bit\n\t\t//\n\t\t/// <summary>\n\t\t/// Reads a 1-bit Boolean without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic bool PeekBoolean()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 1, c_readOverflowError);\n\t\t\tbyte retval = NetBitWriter.ReadByte(m_data, 1, m_readPosition);\n\t\t\treturn (retval > 0 ? true : false);\n\t\t}\n\n\t\t//\n\t\t// 8 bit \n\t\t//\n\t\t/// <summary>\n\t\t/// Reads a Byte without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic byte PeekByte()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 8, c_readOverflowError);\n\t\t\tbyte retval = NetBitWriter.ReadByte(m_data, 8, m_readPosition);\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads an SByte without advancing the read pointer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic sbyte PeekSByte()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 8, c_readOverflowError);\n\t\t\tbyte retval = NetBitWriter.ReadByte(m_data, 8, m_readPosition);\n\t\t\treturn (sbyte)retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bits into a Byte without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic byte PeekByte(int numberOfBits)\n\t\t{\n\t\t\tbyte retval = NetBitWriter.ReadByte(m_data, numberOfBits, m_readPosition);\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bytes without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic byte[] PeekBytes(int numberOfBytes)\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= (numberOfBytes * 8), c_readOverflowError);\n\n\t\t\tbyte[] retval = new byte[numberOfBytes];\n\t\t\tNetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, retval, 0);\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bytes without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic void PeekBytes(byte[] into, int offset, int numberOfBytes)\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= (numberOfBytes * 8), c_readOverflowError);\n\t\t\tNetException.Assert(offset + numberOfBytes <= into.Length);\n\n\t\t\tNetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, into, offset);\n\t\t\treturn;\n\t\t}\n\n\t\t//\n\t\t// 16 bit\n\t\t//\n\t\t/// <summary>\n\t\t/// Reads an Int16 without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic Int16 PeekInt16()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 16, c_readOverflowError);\n\t\t\tuint retval = NetBitWriter.ReadUInt16(m_data, 16, m_readPosition);\n\t\t\treturn (short)retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a UInt16 without advancing the read pointer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt16 PeekUInt16()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 16, c_readOverflowError);\n\t\t\tuint retval = NetBitWriter.ReadUInt16(m_data, 16, m_readPosition);\n\t\t\treturn (ushort)retval;\n\t\t}\n\n\t\t//\n\t\t// 32 bit\n\t\t//\n\t\t/// <summary>\n\t\t/// Reads an Int32 without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic Int32 PeekInt32()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError);\n\t\t\tuint retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\treturn (Int32)retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bits into an Int32 without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic Int32 PeekInt32(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert((numberOfBits > 0 && numberOfBits <= 32), \"ReadInt() can only read between 1 and 32 bits\");\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError);\n\n\t\t\tuint retval = NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition);\n\n\t\t\tif (numberOfBits == 32)\n\t\t\t\treturn (int)retval;\n\n\t\t\tint signBit = 1 << (numberOfBits - 1);\n\t\t\tif ((retval & signBit) == 0)\n\t\t\t\treturn (int)retval; // positive\n\n\t\t\t// negative\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\tuint mask = ((uint)-1) >> (33 - numberOfBits);\n\t\t\t\tuint tmp = (retval & mask) + 1;\n\t\t\t\treturn -((int)tmp);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a UInt32 without advancing the read pointer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt32 PeekUInt32()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError);\n\t\t\tuint retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bits into a UInt32 without advancing the read pointer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt32 PeekUInt32(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert((numberOfBits > 0 && numberOfBits <= 32), \"ReadUInt() can only read between 1 and 32 bits\");\n\t\t\t//NetException.Assert(m_bitLength - m_readBitPtr >= numberOfBits, \"tried to read past buffer size\");\n\n\t\t\tUInt32 retval = NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition);\n\t\t\treturn retval;\n\t\t}\n\n\t\t//\n\t\t// 64 bit\n\t\t//\n\t\t/// <summary>\n\t\t/// Reads a UInt64 without advancing the read pointer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt64 PeekUInt64()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError);\n\n\t\t\tulong low = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\tulong high = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition + 32);\n\n\t\t\tulong retval = low + (high << 32);\n\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads an Int64 without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic Int64 PeekInt64()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError);\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\tulong retval = PeekUInt64();\n\t\t\t\tlong longRetval = (long)retval;\n\t\t\t\treturn longRetval;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bits into an UInt64 without advancing the read pointer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt64 PeekUInt64(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert((numberOfBits > 0 && numberOfBits <= 64), \"ReadUInt() can only read between 1 and 64 bits\");\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError);\n\n\t\t\tulong retval;\n\t\t\tif (numberOfBits <= 32)\n\t\t\t{\n\t\t\t\tretval = (ulong)NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tretval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\t\tretval |= NetBitWriter.ReadUInt32(m_data, numberOfBits - 32, m_readPosition) << 32;\n\t\t\t}\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bits into an Int64 without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic Int64 PeekInt64(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(((numberOfBits > 0) && (numberOfBits < 65)), \"ReadInt64(bits) can only read between 1 and 64 bits\");\n\t\t\treturn (long)PeekUInt64(numberOfBits);\n\t\t}\n\n\t\t//\n\t\t// Floating point\n\t\t//\n\t\t/// <summary>\n\t\t/// Reads a 32-bit Single without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic float PeekFloat()\n\t\t{\n\t\t\treturn PeekSingle();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32-bit Single without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic float PeekSingle()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError);\n\n\t\t\tif ((m_readPosition & 7) == 0) // read directly\n\t\t\t{\n\t\t\t\tfloat retval = BitConverter.ToSingle(m_data, m_readPosition >> 3);\n\t\t\t\treturn retval;\n\t\t\t}\n\n\t\t\tbyte[] bytes = PeekBytes(4);\n\t\t\treturn BitConverter.ToSingle(bytes, 0);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 64-bit Double without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic double PeekDouble()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError);\n\n\t\t\tif ((m_readPosition & 7) == 0) // read directly\n\t\t\t{\n\t\t\t\t// read directly\n\t\t\t\tdouble retval = BitConverter.ToDouble(m_data, m_readPosition >> 3);\n\t\t\t\treturn retval;\n\t\t\t}\n\n\t\t\tbyte[] bytes = PeekBytes(8);\n\t\t\treturn BitConverter.ToDouble(bytes, 0);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a string without advancing the read pointer\n\t\t/// </summary>\n\t\tpublic string PeekString()\n\t\t{\n\t\t\tint wasReadPosition = m_readPosition;\n\t\t\tstring retval = ReadString();\n\t\t\tm_readPosition = wasReadPosition;\n\t\t\treturn retval;\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBuffer.Read.Reflection.cs",
    "content": " /* Copyright (c) 2010 Michael Lidgren\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\nthe Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or\nsubstantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nusing System;\nusing System.Reflection;\n\nnamespace Lidgren.Network\n{\n\tpublic partial class NetBuffer\n\t{\n\t\t/// <summary>\n\t\t/// Reads all public and private declared instance fields of the object in alphabetical order using reflection\n\t\t/// </summary>\n\t\tpublic void ReadAllFields(object target)\n\t\t{\n\t\t\tReadAllFields(target, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads all fields with the specified binding of the object in alphabetical order using reflection\n\t\t/// </summary>\n\t\tpublic void ReadAllFields(object target, BindingFlags flags)\n\t\t{\n\t\t\tif (target == null)\n\t\t\t\tthrow new ArgumentNullException(\"target\");\n\n\t\t\tType tp = target.GetType();\n\n\t\t\tFieldInfo[] fields = tp.GetFields(flags);\n\t\t\tNetUtility.SortMembersList(fields);\n\n\t\t\tforeach (FieldInfo fi in fields)\n\t\t\t{\n\t\t\t\tobject value;\n\n\t\t\t\t// find read method\n\t\t\t\tMethodInfo readMethod;\n\t\t\t\tif (s_readMethods.TryGetValue(fi.FieldType, out readMethod))\n\t\t\t\t{\n\t\t\t\t\t// read value\n\t\t\t\t\tvalue = readMethod.Invoke(this, null);\n\n\t\t\t\t\t// set the value\n\t\t\t\t\tfi.SetValue(target, value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads all public and private declared instance fields of the object in alphabetical order using reflection\n\t\t/// </summary>\n\t\tpublic void ReadAllProperties(object target)\n\t\t{\n\t\t\tReadAllProperties(target, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads all fields with the specified binding of the object in alphabetical order using reflection\n\t\t/// </summary>\n\t\tpublic void ReadAllProperties(object target, BindingFlags flags)\n\t\t{\n\t\t\tif (target == null)\n\t\t\t\tthrow new ArgumentNullException(\"target\");\n\n\t\t\tType tp = target.GetType();\n\n\t\t\tPropertyInfo[] fields = tp.GetProperties(flags);\n\t\t\tNetUtility.SortMembersList(fields);\n\t\t\tforeach (PropertyInfo fi in fields)\n\t\t\t{\n\t\t\t\tobject value;\n\n\t\t\t\t// find read method\n\t\t\t\tMethodInfo readMethod;\n\t\t\t\tif (s_readMethods.TryGetValue(fi.PropertyType, out readMethod))\n\t\t\t\t{\n\t\t\t\t\t// read value\n\t\t\t\t\tvalue = readMethod.Invoke(this, null);\n\n\t\t\t\t\t// set the value\n#if UNITY_WEBPLAYER || UNITY_4_5\n\t\t\t\t\tvar setMethod = fi.GetSetMethod();\n#else\n\t\t\t\t\tvar setMethod = fi.SetMethod;\n#endif\n\t\t\t\t\tif (setMethod != null)\n\t\t\t\t\t\tsetMethod.Invoke(target, new object[] { value });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBuffer.Read.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Reflection;\nusing System.Net;\n\nnamespace Lidgren.Network\n{\n\t/// <summary>\n\t/// Base class for NetIncomingMessage and NetOutgoingMessage\n\t/// </summary>\n\tpublic partial class NetBuffer\n\t{\n\t\tprivate const string c_readOverflowError = \"Trying to read past the buffer size - likely caused by mismatching Write/Reads, different size or order.\";\n\n\t\t/// <summary>\n\t\t/// Reads a boolean value (stored as a single bit) written using Write(bool)\n\t\t/// </summary>\n\t\tpublic bool ReadBoolean()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 1, c_readOverflowError);\n\t\t\tbyte retval = NetBitWriter.ReadByte(m_data, 1, m_readPosition);\n\t\t\tm_readPosition += 1;\n\t\t\treturn (retval > 0 ? true : false);\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Reads a byte\n\t\t/// </summary>\n\t\tpublic byte ReadByte()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 8, c_readOverflowError);\n\t\t\tbyte retval = NetBitWriter.ReadByte(m_data, 8, m_readPosition);\n\t\t\tm_readPosition += 8;\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a byte and returns true or false for success\n\t\t/// </summary>\n\t\tpublic bool ReadByte(out byte result)\n\t\t{\n\t\t\tif (m_bitLength - m_readPosition < 8)\n\t\t\t{\n\t\t\t\tresult = 0;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tresult = NetBitWriter.ReadByte(m_data, 8, m_readPosition);\n\t\t\tm_readPosition += 8;\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a signed byte\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic sbyte ReadSByte()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 8, c_readOverflowError);\n\t\t\tbyte retval = NetBitWriter.ReadByte(m_data, 8, m_readPosition);\n\t\t\tm_readPosition += 8;\n\t\t\treturn (sbyte)retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads 1 to 8 bits into a byte\n\t\t/// </summary>\n\t\tpublic byte ReadByte(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(numberOfBits > 0 && numberOfBits <= 8, \"ReadByte(bits) can only read between 1 and 8 bits\");\n\t\t\tbyte retval = NetBitWriter.ReadByte(m_data, numberOfBits, m_readPosition);\n\t\t\tm_readPosition += numberOfBits;\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bytes\n\t\t/// </summary>\n\t\tpublic byte[] ReadBytes(int numberOfBytes)\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition + 7 >= (numberOfBytes * 8), c_readOverflowError);\n\n\t\t\tbyte[] retval = new byte[numberOfBytes];\n\t\t\tNetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, retval, 0);\n\t\t\tm_readPosition += (8 * numberOfBytes);\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bytes and returns true for success\n\t\t/// </summary>\n\t\tpublic bool ReadBytes(int numberOfBytes, out byte[] result)\n\t\t{\n\t\t\tif (m_bitLength - m_readPosition + 7 < (numberOfBytes * 8))\n\t\t\t{\n\t\t\t\tresult = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tresult = new byte[numberOfBytes];\n\t\t\tNetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, result, 0);\n\t\t\tm_readPosition += (8 * numberOfBytes);\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bytes into a preallocated array\n\t\t/// </summary>\n\t\t/// <param name=\"into\">The destination array</param>\n\t\t/// <param name=\"offset\">The offset where to start writing in the destination array</param>\n\t\t/// <param name=\"numberOfBytes\">The number of bytes to read</param>\n\t\tpublic void ReadBytes(byte[] into, int offset, int numberOfBytes)\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition + 7 >= (numberOfBytes * 8), c_readOverflowError);\n\t\t\tNetException.Assert(offset + numberOfBytes <= into.Length);\n\n\t\t\tNetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, into, offset);\n\t\t\tm_readPosition += (8 * numberOfBytes);\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the specified number of bits into a preallocated array\n\t\t/// </summary>\n\t\t/// <param name=\"into\">The destination array</param>\n\t\t/// <param name=\"offset\">The offset where to start writing in the destination array</param>\n\t\t/// <param name=\"numberOfBits\">The number of bits to read</param>\n\t\tpublic void ReadBits(byte[] into, int offset, int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError);\n\t\t\tNetException.Assert(offset + NetUtility.BytesToHoldBits(numberOfBits) <= into.Length);\n\n\t\t\tint numberOfWholeBytes = numberOfBits / 8;\n\t\t\tint extraBits = numberOfBits - (numberOfWholeBytes * 8);\n\n\t\t\tNetBitWriter.ReadBytes(m_data, numberOfWholeBytes, m_readPosition, into, offset);\n\t\t\tm_readPosition += (8 * numberOfWholeBytes);\n\n\t\t\tif (extraBits > 0)\n\t\t\t\tinto[offset + numberOfWholeBytes] = ReadByte(extraBits);\n\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 16 bit signed integer written using Write(Int16)\n\t\t/// </summary>\n\t\tpublic Int16 ReadInt16()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 16, c_readOverflowError);\n\t\t\tuint retval = NetBitWriter.ReadUInt16(m_data, 16, m_readPosition);\n\t\t\tm_readPosition += 16;\n\t\t\treturn (short)retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 16 bit unsigned integer written using Write(UInt16)\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt16 ReadUInt16()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 16, c_readOverflowError);\n\t\t\tuint retval = NetBitWriter.ReadUInt16(m_data, 16, m_readPosition);\n\t\t\tm_readPosition += 16;\n\t\t\treturn (ushort)retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit signed integer written using Write(Int32)\n\t\t/// </summary>\n\t\tpublic Int32 ReadInt32()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError);\n\t\t\tuint retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\tm_readPosition += 32;\n\t\t\treturn (Int32)retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit signed integer written using Write(Int32)\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic bool ReadInt32(out Int32 result)\n\t\t{\n\t\t\tif (m_bitLength - m_readPosition < 32)\n\t\t\t{\n\t\t\t\tresult = 0;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tresult = (Int32)NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\tm_readPosition += 32;\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a signed integer stored in 1 to 32 bits, written using Write(Int32, Int32)\n\t\t/// </summary>\n\t\tpublic Int32 ReadInt32(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(numberOfBits > 0 && numberOfBits <= 32, \"ReadInt32(bits) can only read between 1 and 32 bits\");\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError);\n\n\t\t\tuint retval = NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition);\n\t\t\tm_readPosition += numberOfBits;\n\n\t\t\tif (numberOfBits == 32)\n\t\t\t\treturn (int)retval;\n\n\t\t\tint signBit = 1 << (numberOfBits - 1);\n\t\t\tif ((retval & signBit) == 0)\n\t\t\t\treturn (int)retval; // positive\n\n\t\t\t// negative\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\tuint mask = ((uint)-1) >> (33 - numberOfBits);\n\t\t\t\tuint tmp = (retval & mask) + 1;\n\t\t\t\treturn -((int)tmp);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads an 32 bit unsigned integer written using Write(UInt32)\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt32 ReadUInt32()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError);\n\t\t\tuint retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\tm_readPosition += 32;\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads an 32 bit unsigned integer written using Write(UInt32) and returns true for success\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic bool ReadUInt32(out UInt32 result)\n\t\t{\n\t\t\tif (m_bitLength - m_readPosition < 32)\n\t\t\t{\n\t\t\t\tresult = 0;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tresult = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\tm_readPosition += 32;\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads an unsigned integer stored in 1 to 32 bits, written using Write(UInt32, Int32)\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt32 ReadUInt32(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(numberOfBits > 0 && numberOfBits <= 32, \"ReadUInt32(bits) can only read between 1 and 32 bits\");\n\t\t\t//NetException.Assert(m_bitLength - m_readBitPtr >= numberOfBits, \"tried to read past buffer size\");\n\n\t\t\tUInt32 retval = NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition);\n\t\t\tm_readPosition += numberOfBits;\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 64 bit unsigned integer written using Write(UInt64)\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt64 ReadUInt64()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError);\n\n\t\t\tulong low = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\tm_readPosition += 32;\n\t\t\tulong high = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\n\t\t\tulong retval = low + (high << 32);\n\n\t\t\tm_readPosition += 32;\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 64 bit signed integer written using Write(Int64)\n\t\t/// </summary>\n\t\tpublic Int64 ReadInt64()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError);\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\tulong retval = ReadUInt64();\n\t\t\t\tlong longRetval = (long)retval;\n\t\t\t\treturn longRetval;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads an unsigned integer stored in 1 to 64 bits, written using Write(UInt64, Int32)\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt64 ReadUInt64(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(numberOfBits > 0 && numberOfBits <= 64, \"ReadUInt64(bits) can only read between 1 and 64 bits\");\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError);\n\n\t\t\tulong retval;\n\t\t\tif (numberOfBits <= 32)\n\t\t\t{\n\t\t\t\tretval = (ulong)NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tretval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition);\n\t\t\t\tretval |= NetBitWriter.ReadUInt32(m_data, numberOfBits - 32, m_readPosition) << 32;\n\t\t\t}\n\t\t\tm_readPosition += numberOfBits;\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a signed integer stored in 1 to 64 bits, written using Write(Int64, Int32)\n\t\t/// </summary>\n\t\tpublic Int64 ReadInt64(int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(((numberOfBits > 0) && (numberOfBits <= 64)), \"ReadInt64(bits) can only read between 1 and 64 bits\");\n\t\t\treturn (long)ReadUInt64(numberOfBits);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit floating point value written using Write(Single)\n\t\t/// </summary>\n\t\tpublic float ReadFloat()\n\t\t{\n\t\t\treturn ReadSingle();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit floating point value written using Write(Single)\n\t\t/// </summary>\n\t\tpublic float ReadSingle()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError);\n\n\t\t\tif ((m_readPosition & 7) == 0) // read directly\n\t\t\t{\n\t\t\t\tfloat retval = BitConverter.ToSingle(m_data, m_readPosition >> 3);\n\t\t\t\tm_readPosition += 32;\n\t\t\t\treturn retval;\n\t\t\t}\n\n\t\t\tbyte[] bytes = ReadBytes(4);\n\t\t\treturn BitConverter.ToSingle(bytes, 0);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit floating point value written using Write(Single)\n\t\t/// </summary>\n\t\tpublic bool ReadSingle(out float result)\n\t\t{\n\t\t\tif (m_bitLength - m_readPosition < 32)\n\t\t\t{\n\t\t\t\tresult = 0.0f;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ((m_readPosition & 7) == 0) // read directly\n\t\t\t{\n\t\t\t\tresult = BitConverter.ToSingle(m_data, m_readPosition >> 3);\n\t\t\t\tm_readPosition += 32;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbyte[] bytes = ReadBytes(4);\n\t\t\tresult = BitConverter.ToSingle(bytes, 0);\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 64 bit floating point value written using Write(Double)\n\t\t/// </summary>\n\t\tpublic double ReadDouble()\n\t\t{\n\t\t\tNetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError);\n\n\t\t\tif ((m_readPosition & 7) == 0) // read directly\n\t\t\t{\n\t\t\t\t// read directly\n\t\t\t\tdouble retval = BitConverter.ToDouble(m_data, m_readPosition >> 3);\n\t\t\t\tm_readPosition += 64;\n\t\t\t\treturn retval;\n\t\t\t}\n\n\t\t\tbyte[] bytes = ReadBytes(8);\n\t\t\treturn BitConverter.ToDouble(bytes, 0);\n\t\t}\n\n\t\t//\n\t\t// Variable bit count\n\t\t//\n\n\t\t/// <summary>\n\t\t/// Reads a variable sized UInt32 written using WriteVariableUInt32()\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic uint ReadVariableUInt32()\n\t\t{\n\t\t\tint num1 = 0;\n\t\t\tint num2 = 0;\n\t\t\twhile (m_bitLength - m_readPosition >= 8)\n\t\t\t{\n\t\t\t\tbyte num3 = this.ReadByte();\n\t\t\t\tnum1 |= (num3 & 0x7f) << num2;\n\t\t\t\tnum2 += 7;\n\t\t\t\tif ((num3 & 0x80) == 0)\n\t\t\t\t\treturn (uint)num1;\n\t\t\t}\n\n\t\t\t// ouch; failed to find enough bytes; malformed variable length number?\n\t\t\treturn (uint)num1;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a variable sized UInt32 written using WriteVariableUInt32() and returns true for success\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic bool ReadVariableUInt32(out uint result)\n\t\t{\n\t\t\tint num1 = 0;\n\t\t\tint num2 = 0;\n\t\t\twhile (m_bitLength - m_readPosition >= 8)\n\t\t\t{\n\t\t\t\tbyte num3;\n\t\t\t\tif (ReadByte(out num3) == false)\n\t\t\t\t{\n\t\t\t\t\tresult = 0;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tnum1 |= (num3 & 0x7f) << num2;\n\t\t\t\tnum2 += 7;\n\t\t\t\tif ((num3 & 0x80) == 0)\n\t\t\t\t{\n\t\t\t\t\tresult = (uint)num1;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult = (uint)num1;\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a variable sized Int32 written using WriteVariableInt32()\n\t\t/// </summary>\n\t\tpublic int ReadVariableInt32()\n\t\t{\n\t\t\tuint n = ReadVariableUInt32();\n\t\t\treturn (int)(n >> 1) ^ -(int)(n & 1); // decode zigzag\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a variable sized Int64 written using WriteVariableInt64()\n\t\t/// </summary>\n\t\tpublic Int64 ReadVariableInt64()\n\t\t{\n\t\t\tUInt64 n = ReadVariableUInt64();\n\t\t\treturn (Int64)(n >> 1) ^ -(long)(n & 1); // decode zigzag\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a variable sized UInt32 written using WriteVariableInt64()\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic UInt64 ReadVariableUInt64()\n\t\t{\n\t\t\tUInt64 num1 = 0;\n\t\t\tint num2 = 0;\n\t\t\twhile (m_bitLength - m_readPosition >= 8)\n\t\t\t{\n\t\t\t\t//if (num2 == 0x23)\n\t\t\t\t//\tthrow new FormatException(\"Bad 7-bit encoded integer\");\n\n\t\t\t\tbyte num3 = this.ReadByte();\n\t\t\t\tnum1 |= ((UInt64)num3 & 0x7f) << num2;\n\t\t\t\tnum2 += 7;\n\t\t\t\tif ((num3 & 0x80) == 0)\n\t\t\t\t\treturn num1;\n\t\t\t}\n\n\t\t\t// ouch; failed to find enough bytes; malformed variable length number?\n\t\t\treturn num1;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit floating point value written using WriteSignedSingle()\n\t\t/// </summary>\n\t\t/// <param name=\"numberOfBits\">The number of bits used when writing the value</param>\n\t\t/// <returns>A floating point value larger or equal to -1 and smaller or equal to 1</returns>\n\t\tpublic float ReadSignedSingle(int numberOfBits)\n\t\t{\n\t\t\tuint encodedVal = ReadUInt32(numberOfBits);\n\t\t\tint maxVal = (1 << numberOfBits) - 1;\n\t\t\treturn ((float)(encodedVal + 1) / (float)(maxVal + 1) - 0.5f) * 2.0f;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit floating point value written using WriteUnitSingle()\n\t\t/// </summary>\n\t\t/// <param name=\"numberOfBits\">The number of bits used when writing the value</param>\n\t\t/// <returns>A floating point value larger or equal to 0 and smaller or equal to 1</returns>\n\t\tpublic float ReadUnitSingle(int numberOfBits)\n\t\t{\n\t\t\tuint encodedVal = ReadUInt32(numberOfBits);\n\t\t\tint maxVal = (1 << numberOfBits) - 1;\n\t\t\treturn (float)(encodedVal + 1) / (float)(maxVal + 1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit floating point value written using WriteRangedSingle()\n\t\t/// </summary>\n\t\t/// <param name=\"min\">The minimum value used when writing the value</param>\n\t\t/// <param name=\"max\">The maximum value used when writing the value</param>\n\t\t/// <param name=\"numberOfBits\">The number of bits used when writing the value</param>\n\t\t/// <returns>A floating point value larger or equal to MIN and smaller or equal to MAX</returns>\n\t\tpublic float ReadRangedSingle(float min, float max, int numberOfBits)\n\t\t{\n\t\t\tfloat range = max - min;\n\t\t\tint maxVal = (1 << numberOfBits) - 1;\n\t\t\tfloat encodedVal = (float)ReadUInt32(numberOfBits);\n\t\t\tfloat unit = encodedVal / (float)maxVal;\n\t\t\treturn min + (unit * range);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a 32 bit integer value written using WriteRangedInteger()\n\t\t/// </summary>\n\t\t/// <param name=\"min\">The minimum value used when writing the value</param>\n\t\t/// <param name=\"max\">The maximum value used when writing the value</param>\n\t\t/// <returns>A signed integer value larger or equal to MIN and smaller or equal to MAX</returns>\n\t\tpublic int ReadRangedInteger(int min, int max)\n\t\t{\n\t\t\tuint range = (uint)(max - min);\n\t\t\tint numBits = NetUtility.BitsToHoldUInt(range);\n\n\t\t\tuint rvalue = ReadUInt32(numBits);\n\t\t\treturn (int)(min + rvalue);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a string written using Write(string)\n\t\t/// </summary>\n\t\tpublic string ReadString()\n\t\t{\n\t\t\tint byteLen = (int)ReadVariableUInt32();\n\n\t\t\tif (byteLen <= 0)\n\t\t\t\treturn String.Empty;\n\n\t\t\tif ((ulong)(m_bitLength - m_readPosition) < ((ulong)byteLen * 8))\n\t\t\t{\n\t\t\t\t// not enough data\n#if DEBUG\n\t\t\t\t\n\t\t\t\tthrow new NetException(c_readOverflowError);\n#else\n\t\t\t\tm_readPosition = m_bitLength;\n\t\t\t\treturn null; // unfortunate; but we need to protect against DDOS\n#endif\n\t\t\t}\n\n\t\t\tif ((m_readPosition & 7) == 0)\n\t\t\t{\n\t\t\t\t// read directly\n\t\t\t\tstring retval = System.Text.Encoding.UTF8.GetString(m_data, m_readPosition >> 3, byteLen);\n\t\t\t\tm_readPosition += (8 * byteLen);\n\t\t\t\treturn retval;\n\t\t\t}\n\n\t\t\tbyte[] bytes = ReadBytes(byteLen);\n\t\t\treturn System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a string written using Write(string) and returns true for success\n\t\t/// </summary>\n\t\tpublic bool ReadString(out string result)\n\t\t{\n\t\t\tuint byteLen;\n\t\t\tif (ReadVariableUInt32(out byteLen) == false)\n\t\t\t{\n\t\t\t\tresult = String.Empty;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (byteLen <= 0)\n\t\t\t{\n\t\t\t\tresult = String.Empty;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (m_bitLength - m_readPosition < (byteLen * 8))\n\t\t\t{\n\t\t\t\tresult = String.Empty;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ((m_readPosition & 7) == 0)\n\t\t\t{\n\t\t\t\t// read directly\n\t\t\t\tresult = System.Text.Encoding.UTF8.GetString(m_data, m_readPosition >> 3, (int)byteLen);\n\t\t\t\tm_readPosition += (8 * (int)byteLen);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbyte[] bytes;\n\t\t\tif (ReadBytes((int)byteLen, out bytes) == false)\n\t\t\t{\n\t\t\t\tresult = String.Empty;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tresult = System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length);\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a value, in local time comparable to NetTime.Now, written using WriteTime() for the connection supplied\n\t\t/// </summary>\n\t\tpublic double ReadTime(NetConnection connection, bool highPrecision)\n\t\t{\n\t\t\tdouble remoteTime = (highPrecision ? ReadDouble() : (double)ReadSingle());\n\n\t\t\tif (connection == null)\n\t\t\t\tthrow new NetException(\"Cannot call ReadTime() on message without a connected sender (ie. unconnected messages)\");\n\n\t\t\t// lets bypass NetConnection.GetLocalTime for speed\n\t\t\treturn remoteTime - connection.m_remoteTimeOffset;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a stored IPv4 endpoint description\n\t\t/// </summary>\n\t\tpublic IPEndPoint ReadIPEndPoint()\n\t\t{\n\t\t\tbyte len = ReadByte();\n\t\t\tbyte[] addressBytes = ReadBytes(len);\n\t\t\tint port = (int)ReadUInt16();\n\n\t\t\tIPAddress address = new IPAddress(addressBytes);\n\t\t\treturn new IPEndPoint(address, port);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes.\n\t\t/// </summary>\n\t\tpublic void SkipPadBits()\n\t\t{\n\t\t\tm_readPosition = ((m_readPosition + 7) >> 3) * 8;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes.\n\t\t/// </summary>\n\t\tpublic void ReadPadBits()\n\t\t{\n\t\t\tm_readPosition = ((m_readPosition + 7) >> 3) * 8;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Pads data with the specified number of bits.\n\t\t/// </summary>\n\t\tpublic void SkipPadBits(int numberOfBits)\n\t\t{\n\t\t\tm_readPosition += numberOfBits;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBuffer.Write.Reflection.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\nthe Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or\nsubstantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nusing System;\nusing System.Reflection;\n\nnamespace Lidgren.Network\n{\n\tpublic partial class NetBuffer\n\t{\n\t\t/// <summary>\n\t\t/// Writes all public and private declared instance fields of the object in alphabetical order using reflection\n\t\t/// </summary>\n\t\tpublic void WriteAllFields(object ob)\n\t\t{\n\t\t\tWriteAllFields(ob, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes all fields with specified binding in alphabetical order using reflection\n\t\t/// </summary>\n\t\tpublic void WriteAllFields(object ob, BindingFlags flags)\n\t\t{\n\t\t\tif (ob == null)\n\t\t\t\treturn;\n\t\t\tType tp = ob.GetType();\n\n\t\t\tFieldInfo[] fields = tp.GetFields(flags);\n\t\t\tNetUtility.SortMembersList(fields);\n\n\t\t\tforeach (FieldInfo fi in fields)\n\t\t\t{\n\t\t\t\tobject value = fi.GetValue(ob);\n\n\t\t\t\t// find the appropriate Write method\n\t\t\t\tMethodInfo writeMethod;\n\t\t\t\tif (s_writeMethods.TryGetValue(fi.FieldType, out writeMethod))\n\t\t\t\t\twriteMethod.Invoke(this, new object[] { value });\n\t\t\t\telse\n\t\t\t\t\tthrow new NetException(\"Failed to find write method for type \" + fi.FieldType);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes all public and private declared instance properties of the object in alphabetical order using reflection\n\t\t/// </summary>\n\t\tpublic void WriteAllProperties(object ob)\n\t\t{\n\t\t\tWriteAllProperties(ob, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes all properties with specified binding in alphabetical order using reflection\n\t\t/// </summary>\n\t\tpublic void WriteAllProperties(object ob, BindingFlags flags)\n\t\t{\n\t\t\tif (ob == null)\n\t\t\t\treturn;\n\t\t\tType tp = ob.GetType();\n\n\t\t\tPropertyInfo[] fields = tp.GetProperties(flags);\n\t\t\tNetUtility.SortMembersList(fields);\n\n\t\t\tforeach (PropertyInfo fi in fields)\n\t\t\t{\n#if UNITY_WEBPLAYER || UNITY_4_5\n\t\t\t\tMethodInfo getMethod = fi.GetGetMethod();\n#else\n\t\t\t\tMethodInfo getMethod = fi.GetMethod;\n#endif\n\t\t\t\tif (getMethod != null)\n\t\t\t\t{\n\t\t\t\t\tobject value = getMethod.Invoke(ob, null);\n\n\t\t\t\t\t// find the appropriate Write method\n\t\t\t\t\tMethodInfo writeMethod;\n\t\t\t\t\tif (s_writeMethods.TryGetValue(fi.PropertyType, out writeMethod))\n\t\t\t\t\t\twriteMethod.Invoke(this, new object[] { value });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBuffer.Write.cs",
    "content": "﻿//#define UNSAFE\n//#define BIGENDIAN\n/* Copyright (c) 2010 Michael Lidgren\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\nthe Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or\nsubstantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nusing System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Reflection;\nusing System.Text;\nusing System.Runtime.InteropServices;\n\nnamespace Lidgren.Network\n{\n\t/// <summary>\n\t/// Utility struct for writing Singles\n\t/// </summary>\n\t[StructLayout(LayoutKind.Explicit)]\n\tpublic struct SingleUIntUnion\n\t{\n\t\t/// <summary>\n\t\t/// Value as a 32 bit float\n\t\t/// </summary>\n\t\t[FieldOffset(0)]\n\t\tpublic float SingleValue;\n\n\t\t/// <summary>\n\t\t/// Value as an unsigned 32 bit integer\n\t\t/// </summary>\n\t\t[FieldOffset(0)]\n\t\t[CLSCompliant(false)]\n\t\tpublic uint UIntValue;\n\t}\n\n\tpublic partial class NetBuffer\n\t{\n\t\t/// <summary>\n\t\t/// Ensures the buffer can hold this number of bits\n\t\t/// </summary>\n\t\tpublic void EnsureBufferSize(int numberOfBits)\n\t\t{\n\t\t\tint byteLen = ((numberOfBits + 7) >> 3);\n\t\t\tif (m_data == null)\n\t\t\t{\n\t\t\t\tm_data = new byte[byteLen + c_overAllocateAmount];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (m_data.Length < byteLen)\n\t\t\t\tArray.Resize<byte>(ref m_data, byteLen + c_overAllocateAmount);\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Ensures the buffer can hold this number of bits\n\t\t/// </summary>\n\t\tinternal void InternalEnsureBufferSize(int numberOfBits)\n\t\t{\n\t\t\tint byteLen = ((numberOfBits + 7) >> 3);\n\t\t\tif (m_data == null)\n\t\t\t{\n\t\t\t\tm_data = new byte[byteLen];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (m_data.Length < byteLen)\n\t\t\t\tArray.Resize<byte>(ref m_data, byteLen);\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a boolean value using 1 bit\n\t\t/// </summary>\n\t\tpublic void Write(bool value)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 1);\n\t\t\tNetBitWriter.WriteByte((value ? (byte)1 : (byte)0), 1, m_data, m_bitLength);\n\t\t\tm_bitLength += 1;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Write a byte\n\t\t/// </summary>\n\t\tpublic void Write(byte source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 8);\n\t\t\tNetBitWriter.WriteByte(source, 8, m_data, m_bitLength);\n\t\t\tm_bitLength += 8;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a signed byte\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Write(sbyte source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 8);\n\t\t\tNetBitWriter.WriteByte((byte)source, 8, m_data, m_bitLength);\n\t\t\tm_bitLength += 8;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes 1 to 8 bits of a byte\n\t\t/// </summary>\n\t\tpublic void Write(byte source, int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert((numberOfBits > 0 && numberOfBits <= 8), \"Write(byte, numberOfBits) can only write between 1 and 8 bits\");\n\t\t\tEnsureBufferSize(m_bitLength + numberOfBits);\n\t\t\tNetBitWriter.WriteByte(source, numberOfBits, m_data, m_bitLength);\n\t\t\tm_bitLength += numberOfBits;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes all bytes in an array\n\t\t/// </summary>\n\t\tpublic void Write(byte[] source)\n\t\t{\n\t\t\tif (source == null)\n\t\t\t\tthrow new ArgumentNullException(\"source\");\n\t\t\tint bits = source.Length * 8;\n\t\t\tEnsureBufferSize(m_bitLength + bits);\n\t\t\tNetBitWriter.WriteBytes(source, 0, source.Length, m_data, m_bitLength);\n\t\t\tm_bitLength += bits;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes the specified number of bytes from an array\n\t\t/// </summary>\n\t\tpublic void Write(byte[] source, int offsetInBytes, int numberOfBytes)\n\t\t{\n\t\t\tif (source == null)\n\t\t\t\tthrow new ArgumentNullException(\"source\");\n\t\t\tint bits = numberOfBytes * 8;\n\t\t\tEnsureBufferSize(m_bitLength + bits);\n\t\t\tNetBitWriter.WriteBytes(source, offsetInBytes, numberOfBytes, m_data, m_bitLength);\n\t\t\tm_bitLength += bits;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes an unsigned 16 bit integer\n\t\t/// </summary>\n\t\t/// <param name=\"source\"></param>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Write(UInt16 source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 16);\n\t\t\tNetBitWriter.WriteUInt16(source, 16, m_data, m_bitLength);\n\t\t\tm_bitLength += 16;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a 16 bit unsigned integer at a given offset in the buffer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void WriteAt(Int32 offset, UInt16 source)\n\t\t{\n\t\t\tint newBitLength = Math.Max(m_bitLength, offset + 16);\n\t\t\tEnsureBufferSize(newBitLength);\n\t\t\tNetBitWriter.WriteUInt16(source, 16, m_data, offset);\n\t\t\tm_bitLength = newBitLength;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes an unsigned integer using 1 to 16 bits\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Write(UInt16 source, int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert((numberOfBits > 0 && numberOfBits <= 16), \"Write(ushort, numberOfBits) can only write between 1 and 16 bits\");\n\t\t\tEnsureBufferSize(m_bitLength + numberOfBits);\n\t\t\tNetBitWriter.WriteUInt16(source, numberOfBits, m_data, m_bitLength);\n\t\t\tm_bitLength += numberOfBits;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a signed 16 bit integer\n\t\t/// </summary>\n\t\tpublic void Write(Int16 source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 16);\n\t\t\tNetBitWriter.WriteUInt16((ushort)source, 16, m_data, m_bitLength);\n\t\t\tm_bitLength += 16;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a 16 bit signed integer at a given offset in the buffer\n\t\t/// </summary>\n\t\tpublic void WriteAt(Int32 offset, Int16 source)\n\t\t{\n\t\t\tint newBitLength = Math.Max(m_bitLength, offset + 16);\n\t\t\tEnsureBufferSize(newBitLength);\n\t\t\tNetBitWriter.WriteUInt16((ushort)source, 16, m_data, offset);\n\t\t\tm_bitLength = newBitLength;\n\t\t}\n\n#if UNSAFE\n\t\t/// <summary>\n\t\t/// Writes a 32 bit signed integer\n\t\t/// </summary>\n\t\tpublic unsafe void Write(Int32 source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 32);\n\n\t\t\t// can write fast?\n\t\t\tif (m_bitLength % 8 == 0)\n\t\t\t{\n\t\t\t\tfixed (byte* numRef = &Data[m_bitLength / 8])\n\t\t\t\t{\n\t\t\t\t\t*((int*)numRef) = source;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tNetBitWriter.WriteUInt32((UInt32)source, 32, Data, m_bitLength);\n\t\t\t}\n\t\t\tm_bitLength += 32;\n\t\t}\n#else\n\t\t/// <summary>\n\t\t/// Writes a 32 bit signed integer\n\t\t/// </summary>\n\t\tpublic void Write(Int32 source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 32);\n\t\t\tNetBitWriter.WriteUInt32((UInt32)source, 32, m_data, m_bitLength);\n\t\t\tm_bitLength += 32;\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Writes a 32 bit signed integer at a given offset in the buffer\n\t\t/// </summary>\n\t\tpublic void WriteAt(Int32 offset, Int32 source)\n\t\t{\n\t\t\tint newBitLength = Math.Max(m_bitLength, offset + 32);\n\t\t\tEnsureBufferSize(newBitLength);\n\t\t\tNetBitWriter.WriteUInt32((UInt32)source, 32, m_data, offset);\n\t\t\tm_bitLength = newBitLength;\n\t\t}\n\n#if UNSAFE\n\t\t/// <summary>\n\t\t/// Writes a 32 bit unsigned integer\n\t\t/// </summary>\n\t\tpublic unsafe void Write(UInt32 source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 32);\n\n\t\t\t// can write fast?\n\t\t\tif (m_bitLength % 8 == 0)\n\t\t\t{\n\t\t\t\tfixed (byte* numRef = &Data[m_bitLength / 8])\n\t\t\t\t{\n\t\t\t\t\t*((uint*)numRef) = source;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tNetBitWriter.WriteUInt32(source, 32, Data, m_bitLength);\n\t\t\t}\n\n\t\t\tm_bitLength += 32;\n\t\t}\n#else\n\t\t/// <summary>\n\t\t/// Writes a 32 bit unsigned integer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Write(UInt32 source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 32);\n\t\t\tNetBitWriter.WriteUInt32(source, 32, m_data, m_bitLength);\n\t\t\tm_bitLength += 32;\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Writes a 32 bit unsigned integer at a given offset in the buffer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void WriteAt(Int32 offset, UInt32 source)\n\t\t{\n\t\t\tint newBitLength = Math.Max(m_bitLength, offset + 32);\n\t\t\tEnsureBufferSize(newBitLength);\n\t\t\tNetBitWriter.WriteUInt32(source, 32, m_data, offset);\n\t\t\tm_bitLength = newBitLength;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a 32 bit signed integer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Write(UInt32 source, int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert((numberOfBits > 0 && numberOfBits <= 32), \"Write(uint, numberOfBits) can only write between 1 and 32 bits\");\n\t\t\tEnsureBufferSize(m_bitLength + numberOfBits);\n\t\t\tNetBitWriter.WriteUInt32(source, numberOfBits, m_data, m_bitLength);\n\t\t\tm_bitLength += numberOfBits;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a signed integer using 1 to 32 bits\n\t\t/// </summary>\n\t\tpublic void Write(Int32 source, int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert((numberOfBits > 0 && numberOfBits <= 32), \"Write(int, numberOfBits) can only write between 1 and 32 bits\");\n\t\t\tEnsureBufferSize(m_bitLength + numberOfBits);\n\n\t\t\tif (numberOfBits != 32)\n\t\t\t{\n\t\t\t\t// make first bit sign\n\t\t\t\tint signBit = 1 << (numberOfBits - 1);\n\t\t\t\tif (source < 0)\n\t\t\t\t\tsource = (-source - 1) | signBit;\n\t\t\t\telse\n\t\t\t\t\tsource &= (~signBit);\n\t\t\t}\n\n\t\t\tNetBitWriter.WriteUInt32((uint)source, numberOfBits, m_data, m_bitLength);\n\n\t\t\tm_bitLength += numberOfBits;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a 64 bit unsigned integer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Write(UInt64 source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 64);\n\t\t\tNetBitWriter.WriteUInt64(source, 64, m_data, m_bitLength);\n\t\t\tm_bitLength += 64;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a 64 bit unsigned integer at a given offset in the buffer\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void WriteAt(Int32 offset, UInt64 source)\n\t\t{\n\t\t\tint newBitLength = Math.Max(m_bitLength, offset + 64);\n\t\t\tEnsureBufferSize(newBitLength);\n\t\t\tNetBitWriter.WriteUInt64(source, 64, m_data, offset);\n\t\t\tm_bitLength = newBitLength;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes an unsigned integer using 1 to 64 bits\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Write(UInt64 source, int numberOfBits)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + numberOfBits);\n\t\t\tNetBitWriter.WriteUInt64(source, numberOfBits, m_data, m_bitLength);\n\t\t\tm_bitLength += numberOfBits;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a 64 bit signed integer\n\t\t/// </summary>\n\t\tpublic void Write(Int64 source)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + 64);\n\t\t\tulong usource = (ulong)source;\n\t\t\tNetBitWriter.WriteUInt64(usource, 64, m_data, m_bitLength);\n\t\t\tm_bitLength += 64;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a signed integer using 1 to 64 bits\n\t\t/// </summary>\n\t\tpublic void Write(Int64 source, int numberOfBits)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + numberOfBits);\n\t\t\tulong usource = (ulong)source;\n\t\t\tNetBitWriter.WriteUInt64(usource, numberOfBits, m_data, m_bitLength);\n\t\t\tm_bitLength += numberOfBits;\n\t\t}\n\n\t\t//\n\t\t// Floating point\n\t\t//\n#if UNSAFE\n\t\t/// <summary>\n\t\t/// Writes a 32 bit floating point value\n\t\t/// </summary>\n\t\tpublic unsafe void Write(float source)\n\t\t{\n\t\t\tuint val = *((uint*)&source);\n#if BIGENDIAN\n\t\t\t\tval = NetUtility.SwapByteOrder(val);\n#endif\n\t\t\tWrite(val);\n\t\t}\n#else\n\t\t/// <summary>\n\t\t/// Writes a 32 bit floating point value\n\t\t/// </summary>\n\t\tpublic void Write(float source)\n\t\t{\n\t\t\t// Use union to avoid BitConverter.GetBytes() which allocates memory on the heap\n\t\t\tSingleUIntUnion su;\n\t\t\tsu.UIntValue = 0; // must initialize every member of the union to avoid warning\n\t\t\tsu.SingleValue = source;\n\n#if BIGENDIAN\n\t\t\t// swap byte order\n\t\t\tsu.UIntValue = NetUtility.SwapByteOrder(su.UIntValue);\n#endif\n\t\t\tWrite(su.UIntValue);\n\t\t}\n#endif\n\n#if UNSAFE\n\t\t/// <summary>\n\t\t/// Writes a 64 bit floating point value\n\t\t/// </summary>\n\t\tpublic unsafe void Write(double source)\n\t\t{\n\t\t\tulong val = *((ulong*)&source);\n#if BIGENDIAN\n\t\t\tval = NetUtility.SwapByteOrder(val);\n#endif\n\t\t\tWrite(val);\n\t\t}\n#else\n\t\t/// <summary>\n\t\t/// Writes a 64 bit floating point value\n\t\t/// </summary>\n\t\tpublic void Write(double source)\n\t\t{\n\t\t\tbyte[] val = BitConverter.GetBytes(source);\n#if BIGENDIAN\n\t\t\t// 0 1 2 3   4 5 6 7\n\n\t\t\t// swap byte order\n\t\t\tbyte tmp = val[7];\n\t\t\tval[7] = val[0];\n\t\t\tval[0] = tmp;\n\n\t\t\ttmp = val[6];\n\t\t\tval[6] = val[1];\n\t\t\tval[1] = tmp;\n\n\t\t\ttmp = val[5];\n\t\t\tval[5] = val[2];\n\t\t\tval[2] = tmp;\n\n\t\t\ttmp = val[4];\n\t\t\tval[4] = val[3];\n\t\t\tval[3] = tmp;\n#endif\n\t\t\tWrite(val);\n\t\t}\n#endif\n\n\t\t//\n\t\t// Variable bits\n\t\t//\n\n\t\t/// <summary>\n\t\t/// Write Base128 encoded variable sized unsigned integer of up to 32 bits\n\t\t/// </summary>\n\t\t/// <returns>number of bytes written</returns>\n\t\t[CLSCompliant(false)]\n\t\tpublic int WriteVariableUInt32(uint value)\n\t\t{\n\t\t\tint retval = 1;\n\t\t\tuint num1 = (uint)value;\n\t\t\twhile (num1 >= 0x80)\n\t\t\t{\n\t\t\t\tthis.Write((byte)(num1 | 0x80));\n\t\t\t\tnum1 = num1 >> 7;\n\t\t\t\tretval++;\n\t\t\t}\n\t\t\tthis.Write((byte)num1);\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Write Base128 encoded variable sized signed integer of up to 32 bits\n\t\t/// </summary>\n\t\t/// <returns>number of bytes written</returns>\n\t\tpublic int WriteVariableInt32(int value)\n\t\t{\n\t\t\tuint zigzag = (uint)(value << 1) ^ (uint)(value >> 31);\n\t\t\treturn WriteVariableUInt32(zigzag);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Write Base128 encoded variable sized signed integer of up to 64 bits\n\t\t/// </summary>\n\t\t/// <returns>number of bytes written</returns>\n\t\tpublic int WriteVariableInt64(Int64 value)\n\t\t{\n\t\t\tulong zigzag = (ulong)(value << 1) ^ (ulong)(value >> 63);\n\t\t\treturn WriteVariableUInt64(zigzag);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Write Base128 encoded variable sized unsigned integer of up to 64 bits\n\t\t/// </summary>\n\t\t/// <returns>number of bytes written</returns>\n\t\t[CLSCompliant(false)]\n\t\tpublic int WriteVariableUInt64(UInt64 value)\n\t\t{\n\t\t\tint retval = 1;\n\t\t\tUInt64 num1 = (UInt64)value;\n\t\t\twhile (num1 >= 0x80)\n\t\t\t{\n\t\t\t\tthis.Write((byte)(num1 | 0x80));\n\t\t\t\tnum1 = num1 >> 7;\n\t\t\t\tretval++;\n\t\t\t}\n\t\t\tthis.Write((byte)num1);\n\t\t\treturn retval;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Compress (lossy) a float in the range -1..1 using numberOfBits bits\n\t\t/// </summary>\n\t\tpublic void WriteSignedSingle(float value, int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(((value >= -1.0) && (value <= 1.0)), \" WriteSignedSingle() must be passed a float in the range -1 to 1; val is \" + value);\n\n\t\t\tfloat unit = (value + 1.0f) * 0.5f;\n\t\t\tint maxVal = (1 << numberOfBits) - 1;\n\t\t\tuint writeVal = (uint)(unit * (float)maxVal);\n\n\t\t\tWrite(writeVal, numberOfBits);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Compress (lossy) a float in the range 0..1 using numberOfBits bits\n\t\t/// </summary>\n\t\tpublic void WriteUnitSingle(float value, int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(((value >= 0.0) && (value <= 1.0)), \" WriteUnitSingle() must be passed a float in the range 0 to 1; val is \" + value);\n\n\t\t\tint maxValue = (1 << numberOfBits) - 1;\n\t\t\tuint writeVal = (uint)(value * (float)maxValue);\n\n\t\t\tWrite(writeVal, numberOfBits);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Compress a float within a specified range using a certain number of bits\n\t\t/// </summary>\n\t\tpublic void WriteRangedSingle(float value, float min, float max, int numberOfBits)\n\t\t{\n\t\t\tNetException.Assert(((value >= min) && (value <= max)), \" WriteRangedSingle() must be passed a float in the range MIN to MAX; val is \" + value);\n\n\t\t\tfloat range = max - min;\n\t\t\tfloat unit = ((value - min) / range);\n\t\t\tint maxVal = (1 << numberOfBits) - 1;\n\t\t\tWrite((UInt32)((float)maxVal * unit), numberOfBits);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes an integer with the least amount of bits need for the specified range\n\t\t/// Returns number of bits written\n\t\t/// </summary>\n\t\tpublic int WriteRangedInteger(int min, int max, int value)\n\t\t{\n\t\t\tNetException.Assert(value >= min && value <= max, \"Value not within min/max range!\");\n\n\t\t\tuint range = (uint)(max - min);\n\t\t\tint numBits = NetUtility.BitsToHoldUInt(range);\n\n\t\t\tuint rvalue = (uint)(value - min);\n\t\t\tWrite(rvalue, numBits);\n\n\t\t\treturn numBits;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Write a string\n\t\t/// </summary>\n\t\tpublic void Write(string source)\n\t\t{\n\t\t\tif (string.IsNullOrEmpty(source))\n\t\t\t{\n\t\t\t\tWriteVariableUInt32(0);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbyte[] bytes = Encoding.UTF8.GetBytes(source);\n\t\t\tEnsureBufferSize(m_bitLength + 8 + (bytes.Length * 8));\n\t\t\tWriteVariableUInt32((uint)bytes.Length);\n\t\t\tWrite(bytes);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes an endpoint description\n\t\t/// </summary>\n\t\tpublic void Write(IPEndPoint endPoint)\n\t\t{\n\t\t\tbyte[] bytes = endPoint.Address.GetAddressBytes();\n\t\t\tWrite((byte)bytes.Length);\n\t\t\tWrite(bytes);\n\t\t\tWrite((ushort)endPoint.Port);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes the current local time to a message; readable (and convertable to local time) by the remote host using ReadTime()\n\t\t/// </summary>\n\t\tpublic void WriteTime(bool highPrecision)\n\t\t{\n\t\t\tdouble localTime = NetTime.Now;\n\t\t\tif (highPrecision)\n\t\t\t\tWrite(localTime);\n\t\t\telse\n\t\t\t\tWrite((float)localTime);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a local timestamp to a message; readable (and convertable to local time) by the remote host using ReadTime()\n\t\t/// </summary>\n\t\tpublic void WriteTime(double localTime, bool highPrecision)\n\t\t{\n\t\t\tif (highPrecision)\n\t\t\t\tWrite(localTime);\n\t\t\telse\n\t\t\t\tWrite((float)localTime);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes.\n\t\t/// </summary>\n\t\tpublic void WritePadBits()\n\t\t{\n\t\t\tm_bitLength = ((m_bitLength + 7) >> 3) * 8;\n\t\t\tEnsureBufferSize(m_bitLength);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Pads data with the specified number of bits.\n\t\t/// </summary>\n\t\tpublic void WritePadBits(int numberOfBits)\n\t\t{\n\t\t\tm_bitLength += numberOfBits;\n\t\t\tEnsureBufferSize(m_bitLength);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append all the bits of message to this message\n\t\t/// </summary>\n\t\tpublic void Write(NetBuffer buffer)\n\t\t{\n\t\t\tEnsureBufferSize(m_bitLength + (buffer.LengthBytes * 8));\n\n\t\t\tWrite(buffer.m_data, 0, buffer.LengthBytes);\n\n\t\t\t// did we write excessive bits?\n\t\t\tint bitsInLastByte = (buffer.m_bitLength % 8);\n\t\t\tif (bitsInLastByte != 0)\n\t\t\t{\n\t\t\t\tint excessBits = 8 - bitsInLastByte;\n\t\t\t\tm_bitLength -= excessBits;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetBuffer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace Lidgren.Network\n{\n\tpublic partial class NetBuffer\n\t{\n\t\t/// <summary>\n\t\t/// Number of bytes to overallocate for each message to avoid resizing\n\t\t/// </summary>\n\t\tprotected const int c_overAllocateAmount = 4;\n\n\t\tprivate static readonly Dictionary<Type, MethodInfo> s_readMethods;\n\t\tprivate static readonly Dictionary<Type, MethodInfo> s_writeMethods;\n\n\t\tinternal byte[] m_data;\n\t\tinternal int m_bitLength;\n\t\tinternal int m_readPosition;\n\n\t\t/// <summary>\n\t\t/// Gets or sets the internal data buffer\n\t\t/// </summary>\n\t\tpublic byte[] Data\n\t\t{\n\t\t\tget { return m_data; }\n\t\t\tset { m_data = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the length of the used portion of the buffer in bytes\n\t\t/// </summary>\n\t\tpublic int LengthBytes\n\t\t{\n\t\t\tget { return ((m_bitLength + 7) >> 3); }\n\t\t\tset\n\t\t\t{\n\t\t\t\tm_bitLength = value * 8;\n\t\t\t\tInternalEnsureBufferSize(m_bitLength);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the length of the used portion of the buffer in bits\n\t\t/// </summary>\n\t\tpublic int LengthBits\n\t\t{\n\t\t\tget { return m_bitLength; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tm_bitLength = value;\n\t\t\t\tInternalEnsureBufferSize(m_bitLength);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the read position in the buffer, in bits (not bytes)\n\t\t/// </summary>\n\t\tpublic long Position\n\t\t{\n\t\t\tget { return (long)m_readPosition; }\n\t\t\tset { m_readPosition = (int)value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the position in the buffer in bytes; note that the bits of the first returned byte may already have been read - check the Position property to make sure.\n\t\t/// </summary>\n\t\tpublic int PositionInBytes\n\t\t{\n\t\t\tget { return (int)(m_readPosition / 8); }\n\t\t}\n\t\t\n\t\tstatic NetBuffer()\n\t\t{\n\t\t\ts_readMethods = new Dictionary<Type, MethodInfo>();\n\t\t\tMethodInfo[] methods = typeof(NetIncomingMessage).GetMethods(BindingFlags.Instance | BindingFlags.Public);\n\t\t\tforeach (MethodInfo mi in methods)\n\t\t\t{\n\t\t\t\tif (mi.GetParameters().Length == 0 && mi.Name.StartsWith(\"Read\", StringComparison.InvariantCulture) && mi.Name.Substring(4) == mi.ReturnType.Name)\n\t\t\t\t{\n\t\t\t\t\ts_readMethods[mi.ReturnType] = mi;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ts_writeMethods = new Dictionary<Type, MethodInfo>();\n\t\t\tmethods = typeof(NetOutgoingMessage).GetMethods(BindingFlags.Instance | BindingFlags.Public);\n\t\t\tforeach (MethodInfo mi in methods)\n\t\t\t{\n\t\t\t\tif (mi.Name.Equals(\"Write\", StringComparison.InvariantCulture))\n\t\t\t\t{\n\t\t\t\t\tParameterInfo[] pis = mi.GetParameters();\n\t\t\t\t\tif (pis.Length == 1)\n\t\t\t\t\t\ts_writeMethods[pis[0].ParameterType] = mi;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetClient.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\nusing System;\r\nusing System.Net;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Specialized version of NetPeer used for a \"client\" connection. It does not accept any incoming connections and maintains a ServerConnection property\r\n\t/// </summary>\r\n\tpublic class NetClient : NetPeer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Gets the connection to the server, if any\r\n\t\t/// </summary>\r\n\t\tpublic NetConnection ServerConnection\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tNetConnection retval = null;\r\n\t\t\t\tif (m_connections.Count > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretval = m_connections[0];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// preempted!\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn retval;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the connection status of the server connection (or NetConnectionStatus.Disconnected if no connection)\r\n\t\t/// </summary>\r\n\t\tpublic NetConnectionStatus ConnectionStatus\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tvar conn = ServerConnection;\r\n\t\t\t\tif (conn == null)\r\n\t\t\t\t\treturn NetConnectionStatus.Disconnected;\r\n\t\t\t\treturn conn.Status;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetClient constructor\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"config\"></param>\r\n\t\tpublic NetClient(NetPeerConfiguration config)\r\n\t\t\t: base(config)\r\n\t\t{\r\n\t\t\tconfig.AcceptIncomingConnections = false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connect to a remote server\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"remoteEndPoint\">The remote endpoint to connect to</param>\r\n\t\t/// <param name=\"hailMessage\">The hail message to pass</param>\r\n\t\t/// <returns>server connection, or null if already connected</returns>\r\n\t\tpublic override NetConnection Connect(IPEndPoint remoteEndPoint, NetOutgoingMessage hailMessage)\r\n\t\t{\r\n\t\t\tlock (m_connections)\r\n\t\t\t{\r\n\t\t\t\tif (m_connections.Count > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tLogWarning(\"Connect attempt failed; Already connected\");\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlock (m_handshakes)\r\n\t\t\t{\r\n\t\t\t\tif (m_handshakes.Count > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tLogWarning(\"Connect attempt failed; Handshake already in progress\");\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn base.Connect(remoteEndPoint, hailMessage);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Disconnect from server\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"byeMessage\">reason for disconnect</param>\r\n\t\tpublic void Disconnect(string byeMessage)\r\n\t\t{\r\n\t\t\tNetConnection serverConnection = ServerConnection;\r\n\t\t\tif (serverConnection == null)\r\n\t\t\t{\r\n\t\t\t\tlock (m_handshakes)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (m_handshakes.Count > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLogVerbose(\"Aborting connection attempt\");\r\n\t\t\t\t\t\tforeach(var hs in m_handshakes)\r\n\t\t\t\t\t\t\ths.Value.Disconnect(byeMessage);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tLogWarning(\"Disconnect requested when not connected!\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tserverConnection.Disconnect(byeMessage);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends message to server\r\n\t\t/// </summary>\r\n\t\tpublic NetSendResult SendMessage(NetOutgoingMessage msg, NetDeliveryMethod method)\r\n\t\t{\r\n\t\t\tNetConnection serverConnection = ServerConnection;\r\n\t\t\tif (serverConnection == null)\r\n\t\t\t{\r\n\t\t\t\tLogWarning(\"Cannot send message, no server connection!\");\r\n\t\t\t\treturn NetSendResult.FailedNotConnected;\r\n\t\t\t}\r\n\r\n\t\t\treturn serverConnection.SendMessage(msg, method, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends message to server\r\n\t\t/// </summary>\r\n\t\tpublic NetSendResult SendMessage(NetOutgoingMessage msg, NetDeliveryMethod method, int sequenceChannel)\r\n\t\t{\r\n\t\t\tNetConnection serverConnection = ServerConnection;\r\n\t\t\tif (serverConnection == null)\r\n\t\t\t{\r\n\t\t\t\tLogWarning(\"Cannot send message, no server connection!\");\r\n\t\t\t\treturn NetSendResult.FailedNotConnected;\r\n\t\t\t}\r\n\r\n\t\t\treturn serverConnection.SendMessage(msg, method, sequenceChannel);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents this object\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn \"[NetClient \" + ServerConnection + \"]\";\r\n\t\t}\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetConnection.Handshake.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetConnection\r\n\t{\r\n\t\tinternal bool m_connectRequested;\r\n\t\tinternal bool m_disconnectRequested;\r\n\t\tinternal bool m_disconnectReqSendBye;\r\n\t\tinternal string m_disconnectMessage;\r\n\t\tinternal bool m_connectionInitiator;\r\n\t\tinternal NetIncomingMessage m_remoteHailMessage;\r\n\t\tinternal float m_lastHandshakeSendTime;\r\n\t\tinternal int m_handshakeAttempts;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The message that the remote part specified via Connect() or Approve() - can be null.\r\n\t\t/// </summary>\r\n\t\tpublic NetIncomingMessage RemoteHailMessage { get { return m_remoteHailMessage; } }\r\n\r\n\t\t// heartbeat called when connection still is in m_handshakes of NetPeer\r\n\t\tinternal void UnconnectedHeartbeat(float now)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tif (m_disconnectRequested)\r\n\t\t\t\tExecuteDisconnect(m_disconnectMessage, true);\r\n\r\n\t\t\tif (m_connectRequested)\r\n\t\t\t{\r\n\t\t\t\tswitch (m_status)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase NetConnectionStatus.Connected:\r\n\t\t\t\t\tcase NetConnectionStatus.RespondedConnect:\r\n\t\t\t\t\t\t// reconnect\r\n\t\t\t\t\t\tExecuteDisconnect(\"Reconnecting\", true);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase NetConnectionStatus.InitiatedConnect:\r\n\t\t\t\t\t\t// send another connect attempt\r\n\t\t\t\t\t\tSendConnect(now);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase NetConnectionStatus.Disconnected:\r\n\t\t\t\t\t\tm_peer.ThrowOrLog(\"This connection is Disconnected; spent. A new one should have been created\");\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase NetConnectionStatus.Disconnecting:\r\n\t\t\t\t\t\t// let disconnect finish first\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase NetConnectionStatus.None:\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tSendConnect(now);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (now - m_lastHandshakeSendTime > m_peerConfiguration.m_resendHandshakeInterval)\r\n\t\t\t{\r\n\t\t\t\tif (m_handshakeAttempts >= m_peerConfiguration.m_maximumHandshakeAttempts)\r\n\t\t\t\t{\r\n\t\t\t\t\t// failed to connect\r\n\t\t\t\t\tExecuteDisconnect(\"Failed to establish connection - no response from remote host\", true);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// resend handshake\r\n\t\t\t\tswitch (m_status)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase NetConnectionStatus.InitiatedConnect:\r\n\t\t\t\t\t\tSendConnect(now);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase NetConnectionStatus.RespondedConnect:\r\n\t\t\t\t\t\tSendConnectResponse(now, true);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase NetConnectionStatus.RespondedAwaitingApproval:\r\n\t\t\t\t\t\t// awaiting approval\r\n\t\t\t\t\t\tm_lastHandshakeSendTime = now; // postpone handshake resend\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase NetConnectionStatus.None:\r\n\t\t\t\t\tcase NetConnectionStatus.ReceivedInitiation:\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tm_peer.LogWarning(\"Time to resend handshake, but status is \" + m_status);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void ExecuteDisconnect(string reason, bool sendByeMessage)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\t// clear send queues\r\n\t\t\tfor (int i = 0; i < m_sendChannels.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tNetSenderChannelBase channel = m_sendChannels[i];\r\n\t\t\t\tif (channel != null)\r\n\t\t\t\t\tchannel.Reset();\r\n\t\t\t}\r\n\r\n\t\t\tif (sendByeMessage)\r\n\t\t\t\tSendDisconnect(reason, true);\r\n\r\n\t\t\tif (m_status == NetConnectionStatus.ReceivedInitiation)\r\n\t\t\t{\r\n\t\t\t\t// nothing much has happened yet; no need to send disconnected status message\r\n\t\t\t\tm_status = NetConnectionStatus.Disconnected;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tSetStatus(NetConnectionStatus.Disconnected, reason);\r\n\t\t\t}\r\n\r\n\t\t\t// in case we're still in handshake\r\n\t\t\tlock (m_peer.m_handshakes)\r\n\t\t\t\tm_peer.m_handshakes.Remove(m_remoteEndPoint);\r\n\r\n\t\t\tm_disconnectRequested = false;\r\n\t\t\tm_connectRequested = false;\r\n\t\t\tm_handshakeAttempts = 0;\r\n\t\t}\r\n\r\n\t\tinternal void SendConnect(float now)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tint preAllocate = 13 + m_peerConfiguration.AppIdentifier.Length;\r\n\t\t\tpreAllocate += (m_localHailMessage == null ? 0 : m_localHailMessage.LengthBytes);\r\n\r\n\t\t\tNetOutgoingMessage om = m_peer.CreateMessage(preAllocate);\r\n\t\t\tom.m_messageType = NetMessageType.Connect;\r\n\t\t\tom.Write(m_peerConfiguration.AppIdentifier);\r\n\t\t\tom.Write(m_peer.m_uniqueIdentifier);\r\n\t\t\tom.Write(now);\r\n\r\n\t\t\tWriteLocalHail(om);\r\n\t\t\t\r\n\t\t\tm_peer.SendLibrary(om, m_remoteEndPoint);\r\n\r\n\t\t\tm_connectRequested = false;\r\n\t\t\tm_lastHandshakeSendTime = now;\r\n\t\t\tm_handshakeAttempts++;\r\n\r\n\t\t\tif (m_handshakeAttempts > 1)\r\n\t\t\t\tm_peer.LogDebug(\"Resending Connect...\");\r\n\t\t\tSetStatus(NetConnectionStatus.InitiatedConnect, \"Locally requested connect\");\r\n\t\t}\r\n\r\n\t\tinternal void SendConnectResponse(float now, bool onLibraryThread)\r\n\t\t{\r\n\t\t\tif (onLibraryThread)\r\n\t\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tNetOutgoingMessage om = m_peer.CreateMessage(m_peerConfiguration.AppIdentifier.Length + 13 + (m_localHailMessage == null ? 0 : m_localHailMessage.LengthBytes));\r\n\t\t\tom.m_messageType = NetMessageType.ConnectResponse;\r\n\t\t\tom.Write(m_peerConfiguration.AppIdentifier);\r\n\t\t\tom.Write(m_peer.m_uniqueIdentifier);\r\n\t\t\tom.Write(now);\r\n\r\n\t\t\tWriteLocalHail(om);\r\n\r\n\t\t\tif (onLibraryThread)\r\n\t\t\t\tm_peer.SendLibrary(om, m_remoteEndPoint);\r\n\t\t\telse\r\n\t\t\t\tm_peer.m_unsentUnconnectedMessages.Enqueue(new NetTuple<System.Net.IPEndPoint, NetOutgoingMessage>(m_remoteEndPoint, om));\r\n\r\n\t\t\tm_lastHandshakeSendTime = now;\r\n\t\t\tm_handshakeAttempts++;\r\n\r\n\t\t\tif (m_handshakeAttempts > 1)\r\n\t\t\t\tm_peer.LogDebug(\"Resending ConnectResponse...\");\r\n\r\n\t\t\tSetStatus(NetConnectionStatus.RespondedConnect, \"Remotely requested connect\");\r\n\t\t}\r\n\r\n\t\tinternal void SendDisconnect(string reason, bool onLibraryThread)\r\n\t\t{\r\n\t\t\tif (onLibraryThread)\r\n\t\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tNetOutgoingMessage om = m_peer.CreateMessage(reason);\r\n\t\t\tom.m_messageType = NetMessageType.Disconnect;\r\n\t\t\tif (onLibraryThread)\r\n\t\t\t\tm_peer.SendLibrary(om, m_remoteEndPoint);\r\n\t\t\telse\r\n\t\t\t\tm_peer.m_unsentUnconnectedMessages.Enqueue(new NetTuple<System.Net.IPEndPoint, NetOutgoingMessage>(m_remoteEndPoint, om));\r\n\t\t}\r\n\r\n\t\tprivate void WriteLocalHail(NetOutgoingMessage om)\r\n\t\t{\r\n\t\t\tif (m_localHailMessage != null)\r\n\t\t\t{\r\n\t\t\t\tbyte[] hi = m_localHailMessage.Data;\r\n\t\t\t\tif (hi != null && hi.Length >= m_localHailMessage.LengthBytes)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (om.LengthBytes + m_localHailMessage.LengthBytes > m_peerConfiguration.m_maximumTransmissionUnit - 10)\r\n\t\t\t\t\t\tm_peer.ThrowOrLog(\"Hail message too large; can maximally be \" + (m_peerConfiguration.m_maximumTransmissionUnit - 10 - om.LengthBytes));\r\n\t\t\t\t\tom.Write(m_localHailMessage.Data, 0, m_localHailMessage.LengthBytes);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void SendConnectionEstablished()\r\n\t\t{\r\n\t\t\tNetOutgoingMessage om = m_peer.CreateMessage(4);\r\n\t\t\tom.m_messageType = NetMessageType.ConnectionEstablished;\r\n\t\t\tom.Write((float)NetTime.Now);\r\n\t\t\tm_peer.SendLibrary(om, m_remoteEndPoint);\r\n\r\n\t\t\tm_handshakeAttempts = 0;\r\n\r\n\t\t\tInitializePing();\r\n\t\t\tif (m_status != NetConnectionStatus.Connected)\r\n\t\t\t\tSetStatus(NetConnectionStatus.Connected, \"Connected to \" + NetUtility.ToHexString(m_remoteUniqueIdentifier));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Approves this connection; sending a connection response to the remote host\r\n\t\t/// </summary>\r\n\t\tpublic void Approve()\r\n\t\t{\r\n\t\t\tif (m_status != NetConnectionStatus.RespondedAwaitingApproval)\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogWarning(\"Approve() called in wrong status; expected RespondedAwaitingApproval; got \" + m_status);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_localHailMessage = null;\r\n\t\t\tm_handshakeAttempts = 0;\r\n\t\t\tSendConnectResponse((float)NetTime.Now, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Approves this connection; sending a connection response to the remote host\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"localHail\">The local hail message that will be set as RemoteHailMessage on the remote host</param>\r\n\t\tpublic void Approve(NetOutgoingMessage localHail)\r\n\t\t{\r\n\t\t\tif (m_status != NetConnectionStatus.RespondedAwaitingApproval)\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogWarning(\"Approve() called in wrong status; expected RespondedAwaitingApproval; got \" + m_status);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_localHailMessage = localHail;\r\n\t\t\tm_handshakeAttempts = 0;\r\n\t\t\tSendConnectResponse((float)NetTime.Now, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Denies this connection; disconnecting it\r\n\t\t/// </summary>\r\n\t\tpublic void Deny()\r\n\t\t{\r\n\t\t\tDeny(string.Empty);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Denies this connection; disconnecting it\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"reason\">The stated reason for the disconnect, readable as a string in the StatusChanged message on the remote host</param>\r\n\t\tpublic void Deny(string reason)\r\n\t\t{\r\n\t\t\t// send disconnect; remove from handshakes\r\n\t\t\tSendDisconnect(reason, false);\r\n\r\n\t\t\t// remove from handshakes\r\n\t\t\tlock (m_peer.m_handshakes)\r\n\t\t\t\tm_peer.m_handshakes.Remove(m_remoteEndPoint);\r\n\t\t}\r\n\r\n\t\tinternal void ReceivedHandshake(double now, NetMessageType tp, int ptr, int payloadLength)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tbyte[] hail;\r\n\t\t\tswitch (tp)\r\n\t\t\t{\r\n\t\t\t\tcase NetMessageType.Connect:\r\n\t\t\t\t\tif (m_status == NetConnectionStatus.ReceivedInitiation)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Whee! Server full has already been checked\r\n\t\t\t\t\t\tbool ok = ValidateHandshakeData(ptr, payloadLength, out hail);\r\n\t\t\t\t\t\tif (ok)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (hail != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tm_remoteHailMessage = m_peer.CreateIncomingMessage(NetIncomingMessageType.Data, hail);\r\n\t\t\t\t\t\t\t\tm_remoteHailMessage.LengthBits = (hail.Length * 8);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tm_remoteHailMessage = null; \r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (m_peerConfiguration.IsMessageTypeEnabled(NetIncomingMessageType.ConnectionApproval))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// ok, let's not add connection just yet\r\n\t\t\t\t\t\t\t\tNetIncomingMessage appMsg = m_peer.CreateIncomingMessage(NetIncomingMessageType.ConnectionApproval, (m_remoteHailMessage == null ? 0 : m_remoteHailMessage.LengthBytes));\r\n\t\t\t\t\t\t\t\tappMsg.m_receiveTime = now;\r\n\t\t\t\t\t\t\t\tappMsg.m_senderConnection = this;\r\n\t\t\t\t\t\t\t\tappMsg.m_senderEndPoint = this.m_remoteEndPoint;\r\n\t\t\t\t\t\t\t\tif (m_remoteHailMessage != null)\r\n\t\t\t\t\t\t\t\t\tappMsg.Write(m_remoteHailMessage.m_data, 0, m_remoteHailMessage.LengthBytes);\r\n\t\t\t\t\t\t\t\tSetStatus(NetConnectionStatus.RespondedAwaitingApproval, \"Awaiting approval\");\r\n\t\t\t\t\t\t\t\tm_peer.ReleaseMessage(appMsg);\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tSendConnectResponse((float)now, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (m_status == NetConnectionStatus.RespondedAwaitingApproval)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tm_peer.LogWarning(\"Ignoring multiple Connect() most likely due to a delayed Approval\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (m_status == NetConnectionStatus.RespondedConnect)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// our ConnectResponse must have been lost\r\n\t\t\t\t\t\tSendConnectResponse((float)now, true);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tm_peer.LogDebug(\"Unhandled Connect: \" + tp + \", status is \" + m_status + \" length: \" + payloadLength);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetMessageType.ConnectResponse:\r\n\t\t\t\t\tHandleConnectResponse(now, tp, ptr, payloadLength);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase NetMessageType.ConnectionEstablished:\r\n\t\t\t\t\tswitch (m_status)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase NetConnectionStatus.Connected:\r\n\t\t\t\t\t\t\t// ok...\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase NetConnectionStatus.Disconnected:\r\n\t\t\t\t\t\tcase NetConnectionStatus.Disconnecting:\r\n\t\t\t\t\t\tcase NetConnectionStatus.None:\r\n\t\t\t\t\t\t\t// too bad, almost made it\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase NetConnectionStatus.ReceivedInitiation:\r\n\t\t\t\t\t\t\t// uh, a little premature... ignore\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase NetConnectionStatus.InitiatedConnect:\r\n\t\t\t\t\t\t\t// weird, should have been RespondedConnect...\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase NetConnectionStatus.RespondedConnect:\r\n\t\t\t\t\t\t\t// awesome\r\n\t\t\t\t\r\n\t\t\t\t\t\t\tNetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength);\r\n\t\t\t\t\t\t\tInitializeRemoteTimeOffset(msg.ReadSingle());\r\n\r\n\t\t\t\t\t\t\tm_peer.AcceptConnection(this);\r\n\t\t\t\t\t\t\tInitializePing();\r\n\t\t\t\t\t\t\tSetStatus(NetConnectionStatus.Connected, \"Connected to \" + NetUtility.ToHexString(m_remoteUniqueIdentifier));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase NetMessageType.Disconnect:\r\n\t\t\t\t\t// ouch\r\n\t\t\t\t\tstring reason = \"Ouch\";\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tNetIncomingMessage inc = m_peer.SetupReadHelperMessage(ptr, payloadLength);\r\n\t\t\t\t\t\treason = inc.ReadString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch\r\n\t\t\t\t\t{\r\n\t\t\t\t\t}\r\n\t\t\t\t\tExecuteDisconnect(reason, false);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase NetMessageType.Discovery:\r\n\t\t\t\t\tm_peer.HandleIncomingDiscoveryRequest(now, m_remoteEndPoint, ptr, payloadLength);\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase NetMessageType.DiscoveryResponse:\r\n\t\t\t\t\tm_peer.HandleIncomingDiscoveryResponse(now, m_remoteEndPoint, ptr, payloadLength);\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase NetMessageType.Ping:\r\n\t\t\t\t\t// silently ignore\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tm_peer.LogDebug(\"Unhandled type during handshake: \" + tp + \" length: \" + payloadLength);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void HandleConnectResponse(double now, NetMessageType tp, int ptr, int payloadLength)\r\n\t\t{\r\n\t\t\tbyte[] hail;\r\n\t\t\tswitch (m_status)\r\n\t\t\t{\r\n\t\t\t\tcase NetConnectionStatus.InitiatedConnect:\r\n\t\t\t\t\t// awesome\r\n\t\t\t\t\tbool ok = ValidateHandshakeData(ptr, payloadLength, out hail);\r\n\t\t\t\t\tif (ok)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (hail != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tm_remoteHailMessage = m_peer.CreateIncomingMessage(NetIncomingMessageType.Data, hail);\r\n\t\t\t\t\t\t\tm_remoteHailMessage.LengthBits = (hail.Length * 8);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tm_remoteHailMessage = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tm_peer.AcceptConnection(this);\r\n\t\t\t\t\t\tSendConnectionEstablished();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetConnectionStatus.RespondedConnect:\r\n\t\t\t\t\t// hello, wtf?\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetConnectionStatus.Disconnecting:\r\n\t\t\t\tcase NetConnectionStatus.Disconnected:\r\n\t\t\t\tcase NetConnectionStatus.ReceivedInitiation:\r\n\t\t\t\tcase NetConnectionStatus.None:\r\n\t\t\t\t\t// wtf? anyway, bye!\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetConnectionStatus.Connected:\r\n\t\t\t\t\t// my ConnectionEstablished must have been lost, send another one\r\n\t\t\t\t\tSendConnectionEstablished();\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate bool ValidateHandshakeData(int ptr, int payloadLength, out byte[] hail)\r\n\t\t{\r\n\t\t\thail = null;\r\n\r\n\t\t\t// create temporary incoming message\r\n\t\t\tNetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tstring remoteAppIdentifier = msg.ReadString();\r\n\t\t\t\tlong remoteUniqueIdentifier = msg.ReadInt64();\r\n\t\t\t\tInitializeRemoteTimeOffset(msg.ReadSingle());\r\n\r\n\t\t\t\tint remainingBytes = payloadLength - (msg.PositionInBytes - ptr);\r\n\t\t\t\tif (remainingBytes > 0)\r\n\t\t\t\t\thail = msg.ReadBytes(remainingBytes);\r\n\r\n\t\t\t\tif (remoteAppIdentifier != m_peer.m_configuration.AppIdentifier)\r\n\t\t\t\t{\r\n\t\t\t\t\tExecuteDisconnect(\"Wrong application identifier!\", true);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tm_remoteUniqueIdentifier = remoteUniqueIdentifier;\r\n\t\t\t}\r\n\t\t\tcatch(Exception ex)\r\n\t\t\t{\r\n\t\t\t\t// whatever; we failed\r\n\t\t\t\tExecuteDisconnect(\"Handshake data validation failed\", true);\r\n\t\t\t\tm_peer.LogWarning(\"ReadRemoteHandshakeData failed: \" + ex.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Disconnect from the remote peer\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"byeMessage\">the message to send with the disconnect message</param>\r\n\t\tpublic void Disconnect(string byeMessage)\r\n\t\t{\r\n\t\t\t// user or library thread\r\n\t\t\tif (m_status == NetConnectionStatus.None || m_status == NetConnectionStatus.Disconnected)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tm_peer.LogVerbose(\"Disconnect requested for \" + this);\r\n\t\t\tm_disconnectMessage = byeMessage;\r\n\r\n\t\t\tif (m_status != NetConnectionStatus.Disconnected && m_status != NetConnectionStatus.None)\r\n\t\t\t\tSetStatus(NetConnectionStatus.Disconnecting, byeMessage);\r\n\r\n\t\t\tm_handshakeAttempts = 0;\r\n\t\t\tm_disconnectRequested = true;\r\n\t\t\tm_disconnectReqSendBye = true;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetConnection.Latency.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetConnection\r\n\t{\r\n\t\tprivate float m_sentPingTime;\r\n\t\tprivate int m_sentPingNumber;\r\n\t\tprivate float m_averageRoundtripTime;\r\n\t\tprivate float m_timeoutDeadline = float.MaxValue;\r\n\r\n\t\t// local time value + m_remoteTimeOffset = remote time value\r\n\t\tinternal double m_remoteTimeOffset;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current average roundtrip time in seconds\r\n\t\t/// </summary>\r\n\t\tpublic float AverageRoundtripTime { get { return m_averageRoundtripTime; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Time offset between this peer and the remote peer\r\n\t\t/// </summary>\r\n\t\tpublic float RemoteTimeOffset { get { return (float)m_remoteTimeOffset; } }\r\n\r\n\t\t// this might happen more than once\r\n\t\tinternal void InitializeRemoteTimeOffset(float remoteSendTime)\r\n\t\t{\r\n\t\t\tm_remoteTimeOffset = (remoteSendTime + (m_averageRoundtripTime / 2.0)) - NetTime.Now;\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Gets local time value comparable to NetTime.Now from a remote value\r\n\t\t/// </summary>\r\n\t\tpublic double GetLocalTime(double remoteTimestamp)\r\n\t\t{\r\n\t\t\treturn remoteTimestamp - m_remoteTimeOffset;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the remote time value for a local time value produced by NetTime.Now\r\n\t\t/// </summary>\r\n\t\tpublic double GetRemoteTime(double localTimestamp)\r\n\t\t{\r\n\t\t\treturn localTimestamp + m_remoteTimeOffset;\r\n\t\t}\r\n\r\n\t\tinternal void InitializePing()\r\n\t\t{\r\n\t\t\tfloat now = (float)NetTime.Now;\r\n\r\n\t\t\t// randomize ping sent time (0.25 - 1.0 x ping interval)\r\n\t\t\tm_sentPingTime = now;\r\n\t\t\tm_sentPingTime -= (m_peerConfiguration.PingInterval * 0.25f); // delay ping for a little while\r\n\t\t\tm_sentPingTime -= (MWCRandom.Instance.NextSingle() * (m_peerConfiguration.PingInterval * 0.75f));\r\n\t\t\tm_timeoutDeadline = now + (m_peerConfiguration.m_connectionTimeout * 2.0f); // initially allow a little more time\r\n\r\n\t\t\t// make it better, quick :-)\r\n\t\t\tSendPing();\r\n\t\t}\r\n\r\n\t\tinternal void SendPing()\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tm_sentPingNumber++;\r\n\r\n\t\t\tm_sentPingTime = (float)NetTime.Now;\r\n\t\t\tNetOutgoingMessage om = m_peer.CreateMessage(1);\r\n\t\t\tom.Write((byte)m_sentPingNumber); // truncating to 0-255\r\n\t\t\tom.m_messageType = NetMessageType.Ping;\r\n\r\n\t\t\tint len = om.Encode(m_peer.m_sendBuffer, 0, 0);\r\n\t\t\tbool connectionReset;\r\n\t\t\tm_peer.SendPacket(len, m_remoteEndPoint, 1, out connectionReset);\r\n\r\n\t\t\tm_statistics.PacketSent(len, 1);\r\n\t\t\tm_peer.Recycle(om);\r\n\t\t}\r\n\r\n\t\tinternal void SendPong(int pingNumber)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tNetOutgoingMessage om = m_peer.CreateMessage(5);\r\n\t\t\tom.Write((byte)pingNumber);\r\n\t\t\tom.Write((float)NetTime.Now); // we should update this value to reflect the exact point in time the packet is SENT\r\n\t\t\tom.m_messageType = NetMessageType.Pong;\r\n\r\n\t\t\tint len = om.Encode(m_peer.m_sendBuffer, 0, 0);\r\n\t\t\tbool connectionReset;\r\n\r\n\t\t\tm_peer.SendPacket(len, m_remoteEndPoint, 1, out connectionReset);\r\n\r\n\t\t\tm_statistics.PacketSent(len, 1);\r\n\t\t\tm_peer.Recycle(om);\r\n\t\t}\r\n\r\n\t\tinternal void ReceivedPong(float now, int pongNumber, float remoteSendTime)\r\n\t\t{\r\n\t\t\tif ((byte)pongNumber != (byte)m_sentPingNumber)\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogVerbose(\"Ping/Pong mismatch; dropped message?\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_timeoutDeadline = now + m_peerConfiguration.m_connectionTimeout;\r\n\r\n\t\t\tfloat rtt = now - m_sentPingTime;\r\n\t\t\tNetException.Assert(rtt >= 0);\r\n\r\n\t\t\tdouble diff = (remoteSendTime + (rtt / 2.0)) - now;\r\n\r\n\t\t\tif (m_averageRoundtripTime < 0)\r\n\t\t\t{\r\n\t\t\t\tm_remoteTimeOffset = diff;\r\n\t\t\t\tm_averageRoundtripTime = rtt;\r\n\t\t\t\tm_peer.LogDebug(\"Initiated average roundtrip time to \" + NetTime.ToReadable(m_averageRoundtripTime) + \" Remote time is: \" + (now + diff));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tm_averageRoundtripTime = (m_averageRoundtripTime * 0.7f) + (float)(rtt * 0.3f);\r\n\r\n\t\t\t\tm_remoteTimeOffset = ((m_remoteTimeOffset * (double)(m_sentPingNumber - 1)) + diff) / (double)m_sentPingNumber;\r\n\t\t\t\tm_peer.LogVerbose(\"Updated average roundtrip time to \" + NetTime.ToReadable(m_averageRoundtripTime) + \", remote time to \" + (now + m_remoteTimeOffset) + \" (ie. diff \" + m_remoteTimeOffset + \")\");\r\n\t\t\t}\r\n\r\n\t\t\t// update resend delay for all channels\r\n\t\t\tfloat resendDelay = GetResendDelay();\r\n\t\t\tforeach (var chan in m_sendChannels)\r\n\t\t\t{\r\n\t\t\t\tvar rchan = chan as NetReliableSenderChannel;\r\n\t\t\t\tif (rchan != null)\r\n\t\t\t\t\trchan.m_resendDelay = resendDelay;\r\n\t\t\t}\r\n\r\n\t\t\t// m_peer.LogVerbose(\"Timeout deadline pushed to  \" + m_timeoutDeadline);\r\n\r\n\t\t\t// notify the application that average rtt changed\r\n\t\t\tif (m_peer.m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.ConnectionLatencyUpdated))\r\n\t\t\t{\r\n\t\t\t\tNetIncomingMessage update = m_peer.CreateIncomingMessage(NetIncomingMessageType.ConnectionLatencyUpdated, 4);\r\n\t\t\t\tupdate.m_senderConnection = this;\r\n\t\t\t\tupdate.m_senderEndPoint = this.m_remoteEndPoint;\r\n\t\t\t\tupdate.Write(rtt);\r\n\t\t\t\tm_peer.ReleaseMessage(update);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetConnection.MTU.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetConnection  \r\n\t{\r\n\t\tprivate enum ExpandMTUStatus\r\n\t\t{\r\n\t\t\tNone,\r\n\t\t\tInProgress,\r\n\t\t\tFinished\r\n\t\t}\r\n\r\n\t\tprivate const int c_protocolMaxMTU = (int)((((float)ushort.MaxValue / 8.0f) - 1.0f));\r\n\r\n\t\tprivate ExpandMTUStatus m_expandMTUStatus;\r\n\r\n\t\tprivate int m_largestSuccessfulMTU;\r\n\t\tprivate int m_smallestFailedMTU;\r\n\r\n\t\tprivate int m_lastSentMTUAttemptSize;\r\n\t\tprivate double m_lastSentMTUAttemptTime;\r\n\t\tprivate int m_mtuAttemptFails;\r\n\r\n\t\tinternal int m_currentMTU;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current MTU in bytes. If PeerConfiguration.AutoExpandMTU is false, this will be PeerConfiguration.MaximumTransmissionUnit.\r\n\t\t/// </summary>\r\n\t\tpublic int CurrentMTU { get { return m_currentMTU; } }\r\n\r\n\t\tinternal void InitExpandMTU(double now)\r\n\t\t{\r\n\t\t\tm_lastSentMTUAttemptTime = now + m_peerConfiguration.m_expandMTUFrequency + 1.5f + m_averageRoundtripTime; // wait a tiny bit before starting to expand mtu\r\n\t\t\tm_largestSuccessfulMTU = 512;\r\n\t\t\tm_smallestFailedMTU = -1;\r\n\t\t\tm_currentMTU = m_peerConfiguration.MaximumTransmissionUnit;\r\n\t\t}\r\n\r\n\t\tprivate void MTUExpansionHeartbeat(double now)\r\n\t\t{\r\n\t\t\tif (m_expandMTUStatus == ExpandMTUStatus.Finished)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (m_expandMTUStatus == ExpandMTUStatus.None)\r\n\t\t\t{\r\n\t\t\t\tif (m_peerConfiguration.m_autoExpandMTU == false)\r\n\t\t\t\t{\r\n\t\t\t\t\tFinalizeMTU(m_currentMTU);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// begin expansion\r\n\t\t\t\tExpandMTU(now);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (now > m_lastSentMTUAttemptTime + m_peerConfiguration.ExpandMTUFrequency)\r\n\t\t\t{\r\n\t\t\t\tm_mtuAttemptFails++;\r\n\t\t\t\tif (m_mtuAttemptFails == 3)\r\n\t\t\t\t{\r\n\t\t\t\t\tFinalizeMTU(m_currentMTU);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// timed out; ie. failed\r\n\t\t\t\tm_smallestFailedMTU = m_lastSentMTUAttemptSize;\r\n\t\t\t\tExpandMTU(now);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ExpandMTU(double now)\r\n\t\t{\r\n\t\t\tint tryMTU;\r\n\r\n\t\t\t// we've nevered encountered failure\r\n\t\t\tif (m_smallestFailedMTU == -1)\r\n\t\t\t{\r\n\t\t\t\t// we've never encountered failure; expand by 25% each time\r\n\t\t\t\ttryMTU = (int)((float)m_currentMTU * 1.25f);\r\n\t\t\t\t//m_peer.LogDebug(\"Trying MTU \" + tryMTU);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// we HAVE encountered failure; so try in between\r\n\t\t\t\ttryMTU = (int)(((float)m_smallestFailedMTU + (float)m_largestSuccessfulMTU) / 2.0f);\r\n\t\t\t\t//m_peer.LogDebug(\"Trying MTU \" + m_smallestFailedMTU + \" <-> \" + m_largestSuccessfulMTU + \" = \" + tryMTU);\r\n\t\t\t}\r\n\r\n\t\t\tif (tryMTU > c_protocolMaxMTU)\r\n\t\t\t\ttryMTU = c_protocolMaxMTU;\r\n\r\n\t\t\tif (tryMTU == m_largestSuccessfulMTU)\r\n\t\t\t{\r\n\t\t\t\t//m_peer.LogDebug(\"Found optimal MTU - exiting\");\r\n\t\t\t\tFinalizeMTU(m_largestSuccessfulMTU);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tSendExpandMTU(now, tryMTU);\r\n\t\t}\r\n\r\n\t\tprivate void SendExpandMTU(double now, int size)\r\n\t\t{\r\n\t\t\tNetOutgoingMessage om = m_peer.CreateMessage(size);\r\n\t\t\tbyte[] tmp = new byte[size];\r\n\t\t\tom.Write(tmp);\r\n\t\t\tom.m_messageType = NetMessageType.ExpandMTURequest;\r\n\t\t\tint len = om.Encode(m_peer.m_sendBuffer, 0, 0);\r\n\r\n\t\t\tbool ok = m_peer.SendMTUPacket(len, m_remoteEndPoint);\r\n\t\t\tif (ok == false)\r\n\t\t\t{\r\n\t\t\t\t//m_peer.LogDebug(\"Send MTU failed for size \" + size);\r\n\r\n\t\t\t\t// failure\r\n\t\t\t\tif (m_smallestFailedMTU == -1 || size < m_smallestFailedMTU)\r\n\t\t\t\t{\r\n\t\t\t\t\tm_smallestFailedMTU = size;\r\n\t\t\t\t\tm_mtuAttemptFails++;\r\n\t\t\t\t\tif (m_mtuAttemptFails >= m_peerConfiguration.ExpandMTUFailAttempts)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tFinalizeMTU(m_largestSuccessfulMTU);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tExpandMTU(now);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_lastSentMTUAttemptSize = size;\r\n\t\t\tm_lastSentMTUAttemptTime = now;\r\n\r\n\t\t\tm_statistics.PacketSent(len, 1);\r\n\t\t\tm_peer.Recycle(om);\r\n\t\t}\r\n\r\n\t\tprivate void FinalizeMTU(int size)\r\n\t\t{\r\n\t\t\tif (m_expandMTUStatus == ExpandMTUStatus.Finished)\r\n\t\t\t\treturn;\r\n\t\t\tm_expandMTUStatus = ExpandMTUStatus.Finished;\r\n\t\t\tm_currentMTU = size;\r\n\t\t\tif (m_currentMTU != m_peerConfiguration.m_maximumTransmissionUnit)\r\n\t\t\t\tm_peer.LogDebug(\"Expanded Maximum Transmission Unit to: \" + m_currentMTU + \" bytes\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tprivate void SendMTUSuccess(int size)\r\n\t\t{\r\n\t\t\tNetOutgoingMessage om = m_peer.CreateMessage(4);\r\n\t\t\tom.Write(size);\r\n\t\t\tom.m_messageType = NetMessageType.ExpandMTUSuccess;\r\n\t\t\tint len = om.Encode(m_peer.m_sendBuffer, 0, 0);\r\n\t\t\tbool connectionReset;\r\n\t\t\tm_peer.SendPacket(len, m_remoteEndPoint, 1, out connectionReset);\r\n\t\t\tm_peer.Recycle(om);\r\n\r\n\t\t\t//m_peer.LogDebug(\"Received MTU expand request for \" + size + \" bytes\");\r\n\r\n\t\t\tm_statistics.PacketSent(len, 1);\r\n\t\t}\r\n\r\n\t\tprivate void HandleExpandMTUSuccess(double now, int size)\r\n\t\t{\r\n\t\t\tif (size > m_largestSuccessfulMTU)\r\n\t\t\t\tm_largestSuccessfulMTU = size;\r\n\r\n\t\t\tif (size < m_currentMTU)\r\n\t\t\t{\r\n\t\t\t\t//m_peer.LogDebug(\"Received low MTU expand success (size \" + size + \"); current mtu is \" + m_currentMTU);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//m_peer.LogDebug(\"Expanding MTU to \" + size);\r\n\t\t\tm_currentMTU = size;\r\n\r\n\t\t\tExpandMTU(now);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetConnection.cs",
    "content": "﻿using System;\r\nusing System.Net;\r\nusing System.Threading;\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Represents a connection to a remote peer\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"RemoteUniqueIdentifier={RemoteUniqueIdentifier} RemoteEndPoint={remoteEndPoint}\")]\r\n\tpublic partial class NetConnection\r\n\t{\r\n\t\tprivate const int m_infrequentEventsSkipFrames = 8; // number of heartbeats to skip checking for infrequent events (ping, timeout etc)\r\n\t\tprivate const int m_messageCoalesceFrames = 3; // number of heartbeats to wait for more incoming messages before sending packet\r\n\r\n\t\tinternal NetPeer m_peer;\r\n\t\tinternal NetPeerConfiguration m_peerConfiguration;\r\n\t\tinternal NetConnectionStatus m_status;\r\n\t\tinternal NetConnectionStatus m_visibleStatus;\r\n\t\tinternal IPEndPoint m_remoteEndPoint;\r\n\t\tinternal NetSenderChannelBase[] m_sendChannels;\r\n\t\tinternal NetReceiverChannelBase[] m_receiveChannels;\r\n\t\tinternal NetOutgoingMessage m_localHailMessage;\r\n\t\tinternal long m_remoteUniqueIdentifier;\r\n\t\tinternal NetQueue<NetTuple<NetMessageType, int>> m_queuedOutgoingAcks;\r\n\t\tinternal NetQueue<NetTuple<NetMessageType, int>> m_queuedIncomingAcks;\r\n\t\tprivate int m_sendBufferWritePtr;\r\n\t\tprivate int m_sendBufferNumMessages;\r\n\t\tprivate object m_tag;\r\n\t\tinternal NetConnectionStatistics m_statistics;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the application defined object containing data about the connection\r\n\t\t/// </summary>\r\n\t\tpublic object Tag\r\n\t\t{\r\n\t\t\tget { return m_tag; }\r\n\t\t\tset { m_tag = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the peer which holds this connection\r\n\t\t/// </summary>\r\n\t\tpublic NetPeer Peer { get { return m_peer; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current status of the connection (synced to the last status message read)\r\n\t\t/// </summary>\r\n\t\tpublic NetConnectionStatus Status { get { return m_visibleStatus; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets various statistics for this connection\r\n\t\t/// </summary>\r\n\t\tpublic NetConnectionStatistics Statistics { get { return m_statistics; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the remote endpoint for the connection\r\n\t\t/// </summary>\r\n\t\tpublic IPEndPoint RemoteEndPoint { get { return m_remoteEndPoint; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the unique identifier of the remote NetPeer for this connection\r\n\t\t/// </summary>\r\n\t\tpublic long RemoteUniqueIdentifier { get { return m_remoteUniqueIdentifier; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the local hail message that was sent as part of the handshake\r\n\t\t/// </summary>\r\n\t\tpublic NetOutgoingMessage LocalHailMessage { get { return m_localHailMessage; } }\r\n\r\n\t\t// gets the time before automatically resending an unacked message\r\n\t\tinternal float GetResendDelay()\r\n\t\t{\r\n\t\t\tfloat avgRtt = m_averageRoundtripTime;\r\n\t\t\tif (avgRtt <= 0)\r\n\t\t\t\tavgRtt = 0.1f; // \"default\" resend is based on 100 ms roundtrip time\r\n\t\t\treturn 0.025f + (avgRtt * 2.1f); // 25 ms + double rtt\r\n\t\t}\r\n\r\n\t\tinternal NetConnection(NetPeer peer, IPEndPoint remoteEndPoint)\r\n\t\t{\r\n\t\t\tm_peer = peer;\r\n\t\t\tm_peerConfiguration = m_peer.Configuration;\r\n\t\t\tm_status = NetConnectionStatus.None;\r\n\t\t\tm_visibleStatus = NetConnectionStatus.None;\r\n\t\t\tm_remoteEndPoint = remoteEndPoint;\r\n\t\t\tm_sendChannels = new NetSenderChannelBase[NetConstants.NumTotalChannels];\r\n\t\t\tm_receiveChannels = new NetReceiverChannelBase[NetConstants.NumTotalChannels];\r\n\t\t\tm_queuedOutgoingAcks = new NetQueue<NetTuple<NetMessageType, int>>(4);\r\n\t\t\tm_queuedIncomingAcks = new NetQueue<NetTuple<NetMessageType, int>>(4);\r\n\t\t\tm_statistics = new NetConnectionStatistics(this);\r\n\t\t\tm_averageRoundtripTime = -1.0f;\r\n\t\t\tm_currentMTU = m_peerConfiguration.MaximumTransmissionUnit;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Change the internal endpoint to this new one. Used when, during handshake, a switch in port is detected (due to NAT)\r\n\t\t/// </summary>\r\n\t\tinternal void MutateEndPoint(IPEndPoint endPoint)\r\n\t\t{\r\n\t\t\tm_remoteEndPoint = endPoint;\r\n\t\t}\r\n\r\n\t\tinternal void SetStatus(NetConnectionStatus status, string reason)\r\n\t\t{\r\n\t\t\t// user or library thread\r\n\r\n\t\t\tif (status == m_status)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tm_status = status;\r\n\t\t\tif (reason == null)\r\n\t\t\t\treason = string.Empty;\r\n\r\n\t\t\tif (m_status == NetConnectionStatus.Connected)\r\n\t\t\t{\r\n\t\t\t\tm_timeoutDeadline = (float)NetTime.Now + m_peerConfiguration.m_connectionTimeout;\r\n\t\t\t\tm_peer.LogVerbose(\"Timeout deadline initialized to  \" + m_timeoutDeadline);\r\n\t\t\t}\r\n\r\n\t\t\tif (m_peerConfiguration.IsMessageTypeEnabled(NetIncomingMessageType.StatusChanged))\r\n\t\t\t{\r\n\t\t\t\tNetIncomingMessage info = m_peer.CreateIncomingMessage(NetIncomingMessageType.StatusChanged, 4 + reason.Length + (reason.Length > 126 ? 2 : 1));\r\n\t\t\t\tinfo.m_senderConnection = this;\r\n\t\t\t\tinfo.m_senderEndPoint = m_remoteEndPoint;\r\n\t\t\t\tinfo.Write((byte)m_status);\r\n\t\t\t\tinfo.Write(reason);\r\n\t\t\t\tm_peer.ReleaseMessage(info);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// app dont want those messages, update visible status immediately\r\n\t\t\t\tm_visibleStatus = m_status;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void Heartbeat(float now, uint frameCounter)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tNetException.Assert(m_status != NetConnectionStatus.InitiatedConnect && m_status != NetConnectionStatus.RespondedConnect);\r\n\r\n\t\t\tif ((frameCounter % m_infrequentEventsSkipFrames) == 0)\r\n\t\t\t{\r\n\t\t\t\tif (now > m_timeoutDeadline)\r\n\t\t\t\t{\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// connection timed out\r\n\t\t\t\t\t//\r\n\t\t\t\t\tm_peer.LogVerbose(\"Connection timed out at \" + now + \" deadline was \" + m_timeoutDeadline);\r\n\t\t\t\t\tExecuteDisconnect(\"Connection timed out\", true);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// send ping?\r\n\t\t\t\tif (m_status == NetConnectionStatus.Connected)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (now > m_sentPingTime + m_peer.m_configuration.m_pingInterval)\r\n\t\t\t\t\t\tSendPing();\r\n\r\n\t\t\t\t\t// handle expand mtu\r\n\t\t\t\t\tMTUExpansionHeartbeat(now);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (m_disconnectRequested)\r\n\t\t\t\t{\r\n\t\t\t\t\tExecuteDisconnect(m_disconnectMessage, m_disconnectReqSendBye);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tbool connectionReset; // TODO: handle connection reset\r\n\r\n\t\t\t//\r\n\t\t\t// Note: at this point m_sendBufferWritePtr and m_sendBufferNumMessages may be non-null; resends may already be queued up\r\n\t\t\t//\r\n\r\n\t\t\tbyte[] sendBuffer = m_peer.m_sendBuffer;\r\n\t\t\tint mtu = m_currentMTU;\r\n\r\n\t\t\tif ((frameCounter % m_messageCoalesceFrames) == 0) // coalesce a few frames\r\n\t\t\t{\r\n\t\t\t\t//\r\n\t\t\t\t// send ack messages\r\n\t\t\t\t//\r\n\t\t\t\twhile (m_queuedOutgoingAcks.Count > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tint acks = (mtu - (m_sendBufferWritePtr + 5)) / 3; // 3 bytes per actual ack\r\n\t\t\t\t\tif (acks > m_queuedOutgoingAcks.Count)\r\n\t\t\t\t\t\tacks = m_queuedOutgoingAcks.Count;\r\n\r\n\t\t\t\t\tNetException.Assert(acks > 0);\r\n\r\n\t\t\t\t\tm_sendBufferNumMessages++;\r\n\r\n\t\t\t\t\t// write acks header\r\n\t\t\t\t\tsendBuffer[m_sendBufferWritePtr++] = (byte)NetMessageType.Acknowledge;\r\n\t\t\t\t\tsendBuffer[m_sendBufferWritePtr++] = 0; // no sequence number\r\n\t\t\t\t\tsendBuffer[m_sendBufferWritePtr++] = 0; // no sequence number\r\n\t\t\t\t\tint len = (acks * 3) * 8; // bits\r\n\t\t\t\t\tsendBuffer[m_sendBufferWritePtr++] = (byte)len;\r\n\t\t\t\t\tsendBuffer[m_sendBufferWritePtr++] = (byte)(len >> 8);\r\n\r\n\t\t\t\t\t// write acks\r\n\t\t\t\t\tfor (int i = 0; i < acks; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tNetTuple<NetMessageType, int> tuple;\r\n\t\t\t\t\t\tm_queuedOutgoingAcks.TryDequeue(out tuple);\r\n\r\n\t\t\t\t\t\t//m_peer.LogVerbose(\"Sending ack for \" + tuple.Item1 + \"#\" + tuple.Item2);\r\n\r\n\t\t\t\t\t\tsendBuffer[m_sendBufferWritePtr++] = (byte)tuple.Item1;\r\n\t\t\t\t\t\tsendBuffer[m_sendBufferWritePtr++] = (byte)tuple.Item2;\r\n\t\t\t\t\t\tsendBuffer[m_sendBufferWritePtr++] = (byte)(tuple.Item2 >> 8);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (m_queuedOutgoingAcks.Count > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// send packet and go for another round of acks\r\n\t\t\t\t\t\tNetException.Assert(m_sendBufferWritePtr > 0 && m_sendBufferNumMessages > 0);\r\n\t\t\t\t\t\tm_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connectionReset);\r\n\t\t\t\t\t\tm_statistics.PacketSent(m_sendBufferWritePtr, 1);\r\n\t\t\t\t\t\tm_sendBufferWritePtr = 0;\r\n\t\t\t\t\t\tm_sendBufferNumMessages = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//\r\n\t\t\t\t// Parse incoming acks (may trigger resends)\r\n\t\t\t\t//\r\n\t\t\t\tNetTuple<NetMessageType, int> incAck;\r\n\t\t\t\twhile (m_queuedIncomingAcks.TryDequeue(out incAck))\r\n\t\t\t\t{\r\n\t\t\t\t\t//m_peer.LogVerbose(\"Received ack for \" + acktp + \"#\" + seqNr);\r\n\t\t\t\t\tNetSenderChannelBase chan = m_sendChannels[(int)incAck.Item1 - 1];\r\n\r\n\t\t\t\t\t// If we haven't sent a message on this channel there is no reason to ack it\r\n\t\t\t\t\tif (chan == null)\r\n\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\tchan.ReceiveAcknowledge(now, incAck.Item2);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//\r\n\t\t\t// send queued messages\r\n\t\t\t//\r\n\t\t\tif (m_peer.m_executeFlushSendQueue)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = m_sendChannels.Length - 1; i >= 0; i--)    // Reverse order so reliable messages are sent first\r\n\t\t\t\t{\r\n\t\t\t\t\tvar channel = m_sendChannels[i];\r\n\t\t\t\t\tNetException.Assert(m_sendBufferWritePtr < 1 || m_sendBufferNumMessages > 0);\r\n\t\t\t\t\tif (channel != null)\r\n\t\t\t\t\t\tchannel.SendQueuedMessages(now);\r\n\t\t\t\t\tNetException.Assert(m_sendBufferWritePtr < 1 || m_sendBufferNumMessages > 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//\r\n\t\t\t// Put on wire data has been written to send buffer but not yet sent\r\n\t\t\t//\r\n\t\t\tif (m_sendBufferWritePtr > 0)\r\n\t\t\t{\r\n\t\t\t\tm_peer.VerifyNetworkThread();\r\n\t\t\t\tNetException.Assert(m_sendBufferWritePtr > 0 && m_sendBufferNumMessages > 0);\r\n\t\t\t\tm_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connectionReset);\r\n\t\t\t\tm_statistics.PacketSent(m_sendBufferWritePtr, m_sendBufferNumMessages);\r\n\t\t\t\tm_sendBufferWritePtr = 0;\r\n\t\t\t\tm_sendBufferNumMessages = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// Queue an item for immediate sending on the wire\r\n\t\t// This method is called from the ISenderChannels\r\n\t\tinternal void QueueSendMessage(NetOutgoingMessage om, int seqNr)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tint sz = om.GetEncodedSize();\r\n\t\t\t//if (sz > m_currentMTU)\r\n\t\t\t//\tm_peer.LogWarning(\"Message larger than MTU! Fragmentation must have failed!\");\r\n\r\n\t\t\tbool connReset; // TODO: handle connection reset\r\n\r\n\t\t\t// can fit this message together with previously written to buffer?\r\n\t\t\tif (m_sendBufferWritePtr + sz > m_currentMTU)\r\n\t\t\t{\r\n\t\t\t\tif (m_sendBufferWritePtr > 0 && m_sendBufferNumMessages > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// previous message in buffer; send these first\r\n\t\t\t\t\tm_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connReset);\r\n\t\t\t\t\tm_statistics.PacketSent(m_sendBufferWritePtr, m_sendBufferNumMessages);\r\n\t\t\t\t\tm_sendBufferWritePtr = 0;\r\n\t\t\t\t\tm_sendBufferNumMessages = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// encode it into buffer regardless if it (now) fits within MTU or not\r\n\t\t\tm_sendBufferWritePtr = om.Encode(m_peer.m_sendBuffer, m_sendBufferWritePtr, seqNr);\r\n\t\t\tm_sendBufferNumMessages++;\r\n\r\n\t\t\tif (m_sendBufferWritePtr > m_currentMTU)\r\n\t\t\t{\r\n\t\t\t\t// send immediately; we're already over MTU\r\n\t\t\t\tm_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connReset);\r\n\t\t\t\tm_statistics.PacketSent(m_sendBufferWritePtr, m_sendBufferNumMessages);\r\n\t\t\t\tm_sendBufferWritePtr = 0;\r\n\t\t\t\tm_sendBufferNumMessages = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to this remote connection\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"msg\">The message to send</param>\r\n\t\t/// <param name=\"method\">How to deliver the message</param>\r\n\t\t/// <param name=\"sequenceChannel\">Sequence channel within the delivery method</param>\r\n\t\tpublic NetSendResult SendMessage(NetOutgoingMessage msg, NetDeliveryMethod method, int sequenceChannel)\r\n\t\t{\r\n\t\t\treturn m_peer.SendMessage(msg, this, method, sequenceChannel);\r\n\t\t}\r\n\r\n\t\t// called by SendMessage() and NetPeer.SendMessage; ie. may be user thread\r\n\t\tinternal NetSendResult EnqueueMessage(NetOutgoingMessage msg, NetDeliveryMethod method, int sequenceChannel)\r\n\t\t{\r\n\t\t\tif (m_status != NetConnectionStatus.Connected)\r\n\t\t\t\treturn NetSendResult.FailedNotConnected;\r\n\r\n\t\t\tNetMessageType tp = (NetMessageType)((int)method + sequenceChannel);\r\n\t\t\tmsg.m_messageType = tp;\r\n\r\n\t\t\t// TODO: do we need to make this more thread safe?\r\n\t\t\tint channelSlot = (int)method - 1 + sequenceChannel;\r\n\t\t\tNetSenderChannelBase chan = m_sendChannels[channelSlot];\r\n\t\t\tif (chan == null)\r\n\t\t\t\tchan = CreateSenderChannel(tp);\r\n\r\n\t\t\tif ((method != NetDeliveryMethod.Unreliable && method != NetDeliveryMethod.UnreliableSequenced) && msg.GetEncodedSize() > m_currentMTU)\r\n\t\t\t\tm_peer.ThrowOrLog(\"Reliable message too large! Fragmentation failure?\");\r\n\r\n\t\t\tvar retval = chan.Enqueue(msg);\r\n\t\t\t//if (retval == NetSendResult.Sent && m_peerConfiguration.m_autoFlushSendQueue == false)\r\n\t\t\t//\tretval = NetSendResult.Queued; // queued since we're not autoflushing\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t// may be on user thread\r\n\t\tprivate NetSenderChannelBase CreateSenderChannel(NetMessageType tp)\r\n\t\t{\r\n\t\t\tNetSenderChannelBase chan;\r\n\t\t\tlock (m_sendChannels)\r\n\t\t\t{\r\n\t\t\t\tNetDeliveryMethod method = NetUtility.GetDeliveryMethod(tp);\r\n\t\t\t\tint sequenceChannel = (int)tp - (int)method;\r\n\r\n\t\t\t\tint channelSlot = (int)method - 1 + sequenceChannel;\r\n\t\t\t\tif (m_sendChannels[channelSlot] != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// we were pre-empted by another call to this method\r\n\t\t\t\t\tchan = m_sendChannels[channelSlot];\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\r\n\t\t\t\t\tswitch (method)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase NetDeliveryMethod.Unreliable:\r\n\t\t\t\t\t\tcase NetDeliveryMethod.UnreliableSequenced:\r\n\t\t\t\t\t\t\tchan = new NetUnreliableSenderChannel(this, NetUtility.GetWindowSize(method));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase NetDeliveryMethod.ReliableOrdered:\r\n\t\t\t\t\t\t\tchan = new NetReliableSenderChannel(this, NetUtility.GetWindowSize(method));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase NetDeliveryMethod.ReliableSequenced:\r\n\t\t\t\t\t\tcase NetDeliveryMethod.ReliableUnordered:\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tchan = new NetReliableSenderChannel(this, NetUtility.GetWindowSize(method));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tm_sendChannels[channelSlot] = chan;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn chan;\r\n\t\t}\r\n\r\n\t\t// received a library message while Connected\r\n\t\tinternal void ReceivedLibraryMessage(NetMessageType tp, int ptr, int payloadLength)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tfloat now = (float)NetTime.Now;\r\n\r\n\t\t\tswitch (tp)\r\n\t\t\t{\r\n\t\t\t\tcase NetMessageType.Connect:\r\n\t\t\t\t\tm_peer.LogDebug(\"Received handshake message (\" + tp + \") despite connection being in place\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase NetMessageType.ConnectResponse:\r\n\t\t\t\t\t// handshake message must have been lost\r\n\t\t\t\t\tHandleConnectResponse(now, tp, ptr, payloadLength);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase NetMessageType.ConnectionEstablished:\r\n\t\t\t\t\t// do nothing, all's well\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase NetMessageType.LibraryError:\r\n\t\t\t\t\tm_peer.ThrowOrLog(\"LibraryError received by ReceivedLibraryMessage; this usually indicates a malformed message\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase NetMessageType.Disconnect:\r\n\t\t\t\t\tNetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength);\r\n\r\n\t\t\t\t\tm_disconnectRequested = true;\r\n\t\t\t\t\tm_disconnectMessage = msg.ReadString();\r\n\t\t\t\t\tm_disconnectReqSendBye = false;\r\n\t\t\t\t\t//ExecuteDisconnect(msg.ReadString(), false);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetMessageType.Acknowledge:\r\n\t\t\t\t\tfor (int i = 0; i < payloadLength; i+=3)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tNetMessageType acktp = (NetMessageType)m_peer.m_receiveBuffer[ptr++]; // netmessagetype\r\n\t\t\t\t\t\tint seqNr = m_peer.m_receiveBuffer[ptr++];\r\n\t\t\t\t\t\tseqNr |= (m_peer.m_receiveBuffer[ptr++] << 8);\r\n\r\n\t\t\t\t\t\t// need to enqueue this and handle it in the netconnection heartbeat; so be able to send resends together with normal sends\r\n\t\t\t\t\t\tm_queuedIncomingAcks.Enqueue(new NetTuple<NetMessageType, int>(acktp, seqNr));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetMessageType.Ping:\r\n\t\t\t\t\tint pingNr = m_peer.m_receiveBuffer[ptr++];\r\n\t\t\t\t\tSendPong(pingNr);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetMessageType.Pong:\r\n\t\t\t\t\tNetIncomingMessage pmsg = m_peer.SetupReadHelperMessage(ptr, payloadLength);\r\n\t\t\t\t\tint pongNr = pmsg.ReadByte();\r\n\t\t\t\t\tfloat remoteSendTime = pmsg.ReadSingle();\r\n\t\t\t\t\tReceivedPong(now, pongNr, remoteSendTime);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetMessageType.ExpandMTURequest:\r\n\t\t\t\t\tSendMTUSuccess(payloadLength);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetMessageType.ExpandMTUSuccess:\r\n\t\t\t\t\tif (m_peer.Configuration.AutoExpandMTU == false)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tm_peer.LogDebug(\"Received ExpandMTURequest altho AutoExpandMTU is turned off!\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tNetIncomingMessage emsg = m_peer.SetupReadHelperMessage(ptr, payloadLength);\r\n\t\t\t\t\tint size = emsg.ReadInt32();\r\n\t\t\t\t\tHandleExpandMTUSuccess(now, size);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetMessageType.NatIntroduction:\r\n\t\t\t\t\t// Unusual situation where server is actually already known, but got a nat introduction - oh well, lets handle it as usual\r\n\t\t\t\t\tm_peer.HandleNatIntroduction(ptr);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tm_peer.LogWarning(\"Connection received unhandled library message: \" + tp);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void ReceivedMessage(NetIncomingMessage msg)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\tNetMessageType tp = msg.m_receivedMessageType;\r\n\r\n\t\t\tint channelSlot = (int)tp - 1;\r\n\t\t\tNetReceiverChannelBase chan = m_receiveChannels[channelSlot];\r\n\t\t\tif (chan == null)\r\n\t\t\t\tchan = CreateReceiverChannel(tp);\r\n\r\n\t\t\tchan.ReceiveMessage(msg);\r\n\t\t}\r\n\r\n\t\tprivate NetReceiverChannelBase CreateReceiverChannel(NetMessageType tp)\r\n\t\t{\r\n\t\t\tm_peer.VerifyNetworkThread();\r\n\r\n\t\t\t// create receiver channel\r\n\t\t\tNetReceiverChannelBase chan;\r\n\t\t\tNetDeliveryMethod method = NetUtility.GetDeliveryMethod(tp);\r\n\t\t\tswitch (method)\r\n\t\t\t{\r\n\t\t\t\tcase NetDeliveryMethod.Unreliable:\r\n\t\t\t\t\tchan = new NetUnreliableUnorderedReceiver(this);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetDeliveryMethod.ReliableOrdered:\r\n\t\t\t\t\tchan = new NetReliableOrderedReceiver(this, NetConstants.ReliableOrderedWindowSize);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetDeliveryMethod.UnreliableSequenced:\r\n\t\t\t\t\tchan = new NetUnreliableSequencedReceiver(this);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetDeliveryMethod.ReliableUnordered:\r\n\t\t\t\t\tchan = new NetReliableUnorderedReceiver(this, NetConstants.ReliableOrderedWindowSize);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase NetDeliveryMethod.ReliableSequenced:\r\n\t\t\t\t\tchan = new NetReliableSequencedReceiver(this, NetConstants.ReliableSequencedWindowSize);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new NetException(\"Unhandled NetDeliveryMethod!\");\r\n\t\t\t}\r\n\r\n\t\t\tint channelSlot = (int)tp - 1;\r\n\t\t\tNetException.Assert(m_receiveChannels[channelSlot] == null);\r\n\t\t\tm_receiveChannels[channelSlot] = chan;\r\n\r\n\t\t\treturn chan;\r\n\t\t}\r\n\r\n\t\tinternal void QueueAck(NetMessageType tp, int sequenceNumber)\r\n\t\t{\r\n\t\t\tm_queuedOutgoingAcks.Enqueue(new NetTuple<NetMessageType, int>(tp, sequenceNumber));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Zero windowSize indicates that the channel is not yet instantiated (used)\r\n\t\t/// Negative freeWindowSlots means this amount of messages are currently queued but delayed due to closed window\r\n\t\t/// </summary>\r\n\t\tpublic void GetSendQueueInfo(NetDeliveryMethod method, int sequenceChannel, out int windowSize, out int freeWindowSlots)\r\n\t\t{\r\n\t\t\tint channelSlot = (int)method - 1 + sequenceChannel;\r\n\t\t\tvar chan = m_sendChannels[channelSlot];\r\n\t\t\tif (chan == null)\r\n\t\t\t{\r\n\t\t\t\twindowSize = NetUtility.GetWindowSize(method);\r\n\t\t\t\tfreeWindowSlots = windowSize;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\twindowSize = chan.WindowSize;\r\n\t\t\tfreeWindowSlots = chan.GetAllowedSends() - chan.m_queuedSends.Count;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tpublic bool CanSendImmediately(NetDeliveryMethod method, int sequenceChannel)\r\n\t\t{\r\n\t\t\tint channelSlot = (int)method - 1 + sequenceChannel;\r\n\t\t\tvar chan = m_sendChannels[channelSlot];\r\n\t\t\tif (chan == null)\r\n\t\t\t\treturn true;\r\n\t\t\treturn (chan.GetAllowedSends() - chan.m_queuedSends.Count) > 0;\r\n\t\t}\r\n\r\n\t\tinternal void Shutdown(string reason)\r\n\t\t{\r\n\t\t\tExecuteDisconnect(reason, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents this object\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn \"[NetConnection to \" + m_remoteEndPoint + \"]\";\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetConnectionStatistics.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\n\r\n// Uncomment the line below to get statistics in RELEASE builds\r\n//#define USE_RELEASE_STATISTICS\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal enum MessageResendReason\r\n\t{\r\n\t\tDelay,\r\n\t\tHoleInSequence\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Statistics for a NetConnection instance\r\n\t/// </summary>\r\n\tpublic sealed class NetConnectionStatistics\r\n\t{\r\n\t\tprivate readonly NetConnection m_connection;\r\n\r\n\t\tinternal int m_sentPackets;\r\n\t\tinternal int m_receivedPackets;\r\n\r\n\t\tinternal int m_sentMessages;\r\n\t\tinternal int m_receivedMessages;\r\n\t\tinternal int m_receivedFragments;\r\n\r\n\t\tinternal int m_sentBytes;\r\n\t\tinternal int m_receivedBytes;\r\n\r\n\t\tinternal int m_resentMessagesDueToDelay;\r\n\t\tinternal int m_resentMessagesDueToHole;\r\n\r\n\t\tinternal NetConnectionStatistics(NetConnection conn)\r\n\t\t{\r\n\t\t\tm_connection = conn;\r\n\t\t\tReset();\r\n\t\t}\r\n\r\n\t\tinternal void Reset()\r\n\t\t{\r\n\t\t\tm_sentPackets = 0;\r\n\t\t\tm_receivedPackets = 0;\r\n\t\t\tm_sentMessages = 0;\r\n\t\t\tm_receivedMessages = 0;\r\n\t\t\tm_receivedFragments = 0;\r\n\t\t\tm_sentBytes = 0;\r\n\t\t\tm_receivedBytes = 0;\r\n\t\t\tm_resentMessagesDueToDelay = 0;\r\n\t\t\tm_resentMessagesDueToHole = 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of sent packets for this connection\r\n\t\t/// </summary>\r\n\t\tpublic int SentPackets { get { return m_sentPackets; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of received packets for this connection\r\n\t\t/// </summary>\r\n\t\tpublic int ReceivedPackets { get { return m_receivedPackets; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of sent bytes for this connection\r\n\t\t/// </summary>\r\n\t\tpublic int SentBytes { get { return m_sentBytes; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of received bytes for this connection\r\n\t\t/// </summary>\r\n\t\tpublic int ReceivedBytes { get { return m_receivedBytes; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of resent reliable messages for this connection\r\n\t\t/// </summary>\r\n\t\tpublic int ResentMessages { get { return m_resentMessagesDueToHole + m_resentMessagesDueToDelay; } }\r\n\r\n\t\t// public double LastSendRespondedTo { get { return m_connection.m_lastSendRespondedTo; } }\r\n\r\n#if USE_RELEASE_STATISTICS\r\n\t\tinternal void PacketSent(int numBytes, int numMessages)\r\n\t\t{\r\n\t\t\tNetException.Assert(numBytes > 0 && numMessages > 0);\r\n\t\t\tm_sentPackets++;\r\n\t\t\tm_sentBytes += numBytes;\r\n\t\t\tm_sentMessages += numMessages;\r\n\t\t}\r\n#else\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void PacketSent(int numBytes, int numMessages)\r\n\t\t{\r\n\t\t\tNetException.Assert(numBytes > 0 && numMessages > 0);\r\n\t\t\tm_sentPackets++;\r\n\t\t\tm_sentBytes += numBytes;\r\n\t\t\tm_sentMessages += numMessages;\r\n\t\t}\r\n#endif\r\n\r\n#if USE_RELEASE_STATISTICS\r\n\t\tinternal void PacketReceived(int numBytes, int numMessages)\r\n\t\t{\r\n\t\t\tNetException.Assert(numBytes > 0 && numMessages > 0);\r\n\t\t\tm_receivedPackets++;\r\n\t\t\tm_receivedBytes += numBytes;\r\n\t\t\tm_receivedMessages += numMessages;\r\n\t\t}\r\n#else\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void PacketReceived(int numBytes, int numMessages, int numFragments)\r\n\t\t{\r\n\t\t\tNetException.Assert(numBytes > 0 && numMessages > 0);\r\n\t\t\tm_receivedPackets++;\r\n\t\t\tm_receivedBytes += numBytes;\r\n\t\t\tm_receivedMessages += numMessages;\r\n\t\t\tm_receivedFragments += numFragments;\r\n\t\t}\r\n#endif\r\n\r\n#if USE_RELEASE_STATISTICS\r\n\t\tinternal void MessageResent(MessageResendReason reason)\r\n\t\t{\r\n\t\t\tif (reason == MessageResendReason.Delay)\r\n\t\t\t\tm_resentMessagesDueToDelay++;\r\n\t\t\telse\r\n\t\t\t\tm_resentMessagesDueToHole++;\r\n\t\t}\r\n#else\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void MessageResent(MessageResendReason reason)\r\n\t\t{\r\n\t\t\tif (reason == MessageResendReason.Delay)\r\n\t\t\t\tm_resentMessagesDueToDelay++;\r\n\t\t\telse\r\n\t\t\t\tm_resentMessagesDueToHole++;\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents this object\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tStringBuilder bdr = new StringBuilder();\r\n\t\t\t//bdr.AppendLine(\"Average roundtrip time: \" + NetTime.ToReadable(m_connection.m_averageRoundtripTime));\r\n\t\t\tbdr.AppendLine(\"Current MTU: \" + m_connection.m_currentMTU);\r\n\t\t\tbdr.AppendLine(\"Sent \" + m_sentBytes + \" bytes in \" + m_sentMessages + \" messages in \" + m_sentPackets + \" packets\");\r\n\t\t\tbdr.AppendLine(\"Received \" + m_receivedBytes + \" bytes in \" + m_receivedMessages + \" messages (of which \" + m_receivedFragments + \" fragments) in \" + m_receivedPackets + \" packets\");\r\n\r\n\t\t\tif (m_resentMessagesDueToDelay > 0)\r\n\t\t\t\tbdr.AppendLine(\"Resent messages (delay): \" + m_resentMessagesDueToDelay);\r\n\t\t\tif (m_resentMessagesDueToHole > 0)\r\n\t\t\t\tbdr.AppendLine(\"Resent messages (holes): \" + m_resentMessagesDueToHole);\r\n\r\n\t\t\tint numUnsent = 0;\r\n\t\t\tint numStored = 0;\r\n\t\t\tforeach (NetSenderChannelBase sendChan in m_connection.m_sendChannels)\r\n\t\t\t{\r\n\t\t\t\tif (sendChan == null)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tnumUnsent += sendChan.m_queuedSends.Count;\r\n\r\n\t\t\t\tvar relSendChan = sendChan as NetReliableSenderChannel;\r\n\t\t\t\tif (relSendChan != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int i = 0; i < relSendChan.m_storedMessages.Length; i++)\r\n\t\t\t\t\t\tif (relSendChan.m_storedMessages[i].Message != null)\r\n\t\t\t\t\t\t\tnumStored++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tint numWithheld = 0;\r\n\t\t\tforeach (NetReceiverChannelBase recChan in m_connection.m_receiveChannels)\r\n\t\t\t{\r\n\t\t\t\tvar relRecChan = recChan as NetReliableOrderedReceiver;\r\n\t\t\t\tif (relRecChan != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int i = 0; i < relRecChan.m_withheldMessages.Length; i++)\r\n\t\t\t\t\t\tif (relRecChan.m_withheldMessages[i] != null)\r\n\t\t\t\t\t\t\tnumWithheld++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tbdr.AppendLine(\"Unsent messages: \" + numUnsent);\r\n\t\t\tbdr.AppendLine(\"Stored messages: \" + numStored);\r\n\t\t\tbdr.AppendLine(\"Withheld messages: \" + numWithheld);\r\n\r\n\t\t\treturn bdr.ToString();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetConnectionStatus.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\nusing System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Status for a NetConnection instance\r\n\t/// </summary>\r\n\tpublic enum NetConnectionStatus\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// No connection, or attempt, in place\r\n\t\t/// </summary>\r\n\t\tNone,\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Connect has been sent; waiting for ConnectResponse\r\n\t\t/// </summary>\r\n\t\tInitiatedConnect,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connect was received, but ConnectResponse hasn't been sent yet\r\n\t\t/// </summary>\r\n\t\tReceivedInitiation,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connect was received and ApprovalMessage released to the application; awaiting Approve() or Deny()\r\n\t\t/// </summary>\r\n\t\tRespondedAwaitingApproval, // We got Connect, released ApprovalMessage\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connect was received and ConnectResponse has been sent; waiting for ConnectionEstablished\r\n\t\t/// </summary>\r\n\t\tRespondedConnect, // we got Connect, sent ConnectResponse\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connected\r\n\t\t/// </summary>\r\n\t\tConnected,\t\t  // we received ConnectResponse (if initiator) or ConnectionEstablished (if passive)\r\n\r\n\t\t/// <summary>\r\n\t\t/// In the process of disconnecting\r\n\t\t/// </summary>\r\n\t\tDisconnecting,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Disconnected\r\n\t\t/// </summary>\r\n\t\tDisconnected\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetConstants.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\nusing System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// All the constants used when compiling the library\r\n\t/// </summary>\r\n\tinternal static class NetConstants\r\n\t{\r\n\t\tinternal const int NumTotalChannels = 99;\r\n\r\n\t\tinternal const int NetChannelsPerDeliveryMethod = 32;\r\n\r\n\t\tinternal const int NumSequenceNumbers = 1024;\r\n\r\n\t\tinternal const int HeaderByteSize = 5;\r\n\r\n\t\tinternal const int UnreliableWindowSize = 128;\r\n\t\tinternal const int ReliableOrderedWindowSize = 64;\r\n\t\tinternal const int ReliableSequencedWindowSize = 64;\r\n\t\tinternal const int DefaultWindowSize = 64;\r\n\r\n\t\tinternal const int MaxFragmentationGroups = ushort.MaxValue - 1;\r\n\r\n\t\tinternal const int UnfragmentedMessageHeaderSize = 5;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Number of channels which needs a sequence number to work\r\n\t\t/// </summary>\r\n\t\tinternal const int NumSequencedChannels = ((int)NetMessageType.UserReliableOrdered1 + NetConstants.NetChannelsPerDeliveryMethod) - (int)NetMessageType.UserSequenced1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Number of reliable channels\r\n\t\t/// </summary>\r\n\t\tinternal const int NumReliableChannels = ((int)NetMessageType.UserReliableOrdered1 + NetConstants.NetChannelsPerDeliveryMethod) - (int)NetMessageType.UserReliableUnordered;\r\n\t\t\r\n\t\tinternal const string ConnResetMessage = \"Connection was reset by remote host\";\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetDeliveryMethod.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// How the library deals with resends and handling of late messages\r\n\t/// </summary>\r\n\tpublic enum NetDeliveryMethod : byte\r\n\t{\r\n\t\t//\r\n\t\t// Actually a publicly visible subset of NetMessageType\r\n\t\t//\r\n\r\n\t\t/// <summary>\r\n\t\t/// Indicates an error\r\n\t\t/// </summary>\r\n\t\tUnknown = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unreliable, unordered delivery\r\n\t\t/// </summary>\r\n\t\tUnreliable = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unreliable delivery, but automatically dropping late messages\r\n\t\t/// </summary>\r\n\t\tUnreliableSequenced = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reliable delivery, but unordered\r\n\t\t/// </summary>\r\n\t\tReliableUnordered = 34,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reliable delivery, except for late messages which are dropped\r\n\t\t/// </summary>\r\n\t\tReliableSequenced = 35,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reliable, ordered delivery\r\n\t\t/// </summary>\r\n\t\tReliableOrdered = 67,\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetException.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Exception thrown in the Lidgren Network Library\r\n\t/// </summary>\r\n\tpublic sealed class NetException : Exception\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// NetException constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetException()\r\n\t\t\t: base()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetException constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetException(string message)\r\n\t\t\t: base(message)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetException constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetException(string message, Exception inner)\r\n\t\t\t: base(message, inner)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Throws an exception, in DEBUG only, if first parameter is false\r\n\t\t/// </summary>\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tpublic static void Assert(bool isOk, string message)\r\n\t\t{\r\n\t\t\tif (!isOk)\r\n\t\t\t\tthrow new NetException(message);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Throws an exception, in DEBUG only, if first parameter is false\r\n\t\t/// </summary>\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tpublic static void Assert(bool isOk)\r\n\t\t{\r\n\t\t\tif (!isOk)\r\n\t\t\t\tthrow new NetException();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetFragmentationHelper.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal static class NetFragmentationHelper\r\n\t{\r\n\t\tinternal static int WriteHeader(\r\n\t\t\tbyte[] destination,\r\n\t\t\tint ptr,\r\n\t\t\tint group,\r\n\t\t\tint totalBits,\r\n\t\t\tint chunkByteSize,\r\n\t\t\tint chunkNumber)\r\n\t\t{\r\n\t\t\tuint num1 = (uint)group;\r\n\t\t\twhile (num1 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tdestination[ptr++] = (byte)(num1 | 0x80);\r\n\t\t\t\tnum1 = num1 >> 7;\r\n\t\t\t}\r\n\t\t\tdestination[ptr++] = (byte)num1;\r\n\r\n\t\t\t// write variable length fragment total bits\r\n\t\t\tuint num2 = (uint)totalBits;\r\n\t\t\twhile (num2 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tdestination[ptr++] = (byte)(num2 | 0x80);\r\n\t\t\t\tnum2 = num2 >> 7;\r\n\t\t\t}\r\n\t\t\tdestination[ptr++] = (byte)num2;\r\n\r\n\t\t\t// write variable length fragment chunk size\r\n\t\t\tuint num3 = (uint)chunkByteSize;\r\n\t\t\twhile (num3 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tdestination[ptr++] = (byte)(num3 | 0x80);\r\n\t\t\t\tnum3 = num3 >> 7;\r\n\t\t\t}\r\n\t\t\tdestination[ptr++] = (byte)num3;\r\n\r\n\t\t\t// write variable length fragment chunk number\r\n\t\t\tuint num4 = (uint)chunkNumber;\r\n\t\t\twhile (num4 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tdestination[ptr++] = (byte)(num4 | 0x80);\r\n\t\t\t\tnum4 = num4 >> 7;\r\n\t\t\t}\r\n\t\t\tdestination[ptr++] = (byte)num4;\r\n\r\n\t\t\treturn ptr;\r\n\t\t}\r\n\r\n\t\tinternal static int ReadHeader(byte[] buffer, int ptr, out int group, out int totalBits, out int chunkByteSize, out int chunkNumber)\r\n\t\t{\r\n\t\t\tint num1 = 0;\r\n\t\t\tint num2 = 0;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tbyte num3 = buffer[ptr++];\r\n\t\t\t\tnum1 |= (num3 & 0x7f) << (num2 & 0x1f);\r\n\t\t\t\tnum2 += 7;\r\n\t\t\t\tif ((num3 & 0x80) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tgroup = num1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tnum1 = 0;\r\n\t\t\tnum2 = 0;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tbyte num3 = buffer[ptr++];\r\n\t\t\t\tnum1 |= (num3 & 0x7f) << (num2 & 0x1f);\r\n\t\t\t\tnum2 += 7;\r\n\t\t\t\tif ((num3 & 0x80) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\ttotalBits = num1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tnum1 = 0;\r\n\t\t\tnum2 = 0;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tbyte num3 = buffer[ptr++];\r\n\t\t\t\tnum1 |= (num3 & 0x7f) << (num2 & 0x1f);\r\n\t\t\t\tnum2 += 7;\r\n\t\t\t\tif ((num3 & 0x80) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tchunkByteSize = num1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tnum1 = 0;\r\n\t\t\tnum2 = 0;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tbyte num3 = buffer[ptr++];\r\n\t\t\t\tnum1 |= (num3 & 0x7f) << (num2 & 0x1f);\r\n\t\t\t\tnum2 += 7;\r\n\t\t\t\tif ((num3 & 0x80) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tchunkNumber = num1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn ptr;\r\n\t\t}\r\n\r\n\t\tinternal static int GetFragmentationHeaderSize(int groupId, int totalBytes, int chunkByteSize, int numChunks)\r\n\t\t{\r\n\t\t\tint len = 4;\r\n\r\n\t\t\t// write variable length fragment group id\r\n\t\t\tuint num1 = (uint)groupId;\r\n\t\t\twhile (num1 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tlen++;\r\n\t\t\t\tnum1 = num1 >> 7;\r\n\t\t\t}\r\n\r\n\t\t\t// write variable length fragment total bits\r\n\t\t\tuint num2 = (uint)(totalBytes * 8);\r\n\t\t\twhile (num2 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tlen++;\r\n\t\t\t\tnum2 = num2 >> 7;\r\n\t\t\t}\r\n\r\n\t\t\t// write variable length fragment chunk byte size\r\n\t\t\tuint num3 = (uint)chunkByteSize;\r\n\t\t\twhile (num3 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tlen++;\r\n\t\t\t\tnum3 = num3 >> 7;\r\n\t\t\t}\r\n\r\n\t\t\t// write variable length fragment chunk number\r\n\t\t\tuint num4 = (uint)numChunks;\r\n\t\t\twhile (num4 >= 0x80)\r\n\t\t\t{\r\n\t\t\t\tlen++;\r\n\t\t\t\tnum4 = num4 >> 7;\r\n\t\t\t}\r\n\r\n\t\t\treturn len;\r\n\t\t}\r\n\r\n\t\tinternal static int GetBestChunkSize(int group, int totalBytes, int mtu)\r\n\t\t{\r\n\t\t\tint tryChunkSize = mtu - NetConstants.HeaderByteSize - 4; // naive approximation\r\n\t\t\tint est = GetFragmentationHeaderSize(group, totalBytes, tryChunkSize, totalBytes / tryChunkSize);\r\n\t\t\ttryChunkSize = mtu - NetConstants.HeaderByteSize - est; // slightly less naive approximation\r\n\r\n\t\t\tint headerSize = 0;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\ttryChunkSize--; // keep reducing chunk size until it fits within MTU including header\r\n\r\n\t\t\t\tint numChunks = totalBytes / tryChunkSize;\r\n\t\t\t\tif (numChunks * tryChunkSize < totalBytes)\r\n\t\t\t\t\tnumChunks++;\r\n\r\n\t\t\t\theaderSize = GetFragmentationHeaderSize(group, totalBytes, tryChunkSize, numChunks); // 4+ bytes\r\n\r\n\t\t\t} while (tryChunkSize + headerSize + NetConstants.HeaderByteSize + 1 >= mtu);\r\n\r\n\t\t\treturn tryChunkSize;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetFragmentationInfo.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic sealed class NetFragmentationInfo\r\n\t{\r\n\t\tpublic int TotalFragmentCount;\r\n\t\tpublic bool[] Received;\r\n\t\tpublic int TotalReceived;\r\n\t\tpublic int FragmentSize;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetIncomingMessage.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\nusing System;\r\nusing System.Net;\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Incoming message either sent from a remote peer or generated within the library\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"Type={MessageType} LengthBits={LengthBits}\")]\r\n\tpublic sealed class NetIncomingMessage : NetBuffer\r\n\t{\r\n\t\tinternal NetIncomingMessageType m_incomingMessageType;\r\n\t\tinternal IPEndPoint m_senderEndPoint;\r\n\t\tinternal NetConnection m_senderConnection;\r\n\t\tinternal int m_sequenceNumber;\r\n\t\tinternal NetMessageType m_receivedMessageType;\r\n\t\tinternal bool m_isFragment;\r\n\t\tinternal double m_receiveTime;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the type of this incoming message\r\n\t\t/// </summary>\r\n\t\tpublic NetIncomingMessageType MessageType { get { return m_incomingMessageType; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the delivery method this message was sent with (if user data)\r\n\t\t/// </summary>\r\n\t\tpublic NetDeliveryMethod DeliveryMethod { get { return NetUtility.GetDeliveryMethod(m_receivedMessageType); } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the sequence channel this message was sent with (if user data)\r\n\t\t/// </summary>\r\n\t\tpublic int SequenceChannel { get { return (int)m_receivedMessageType - (int)NetUtility.GetDeliveryMethod(m_receivedMessageType); } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// IPEndPoint of sender, if any\r\n\t\t/// </summary>\r\n\t\tpublic IPEndPoint SenderEndPoint { get { return m_senderEndPoint; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetConnection of sender, if any\r\n\t\t/// </summary>\r\n\t\tpublic NetConnection SenderConnection { get { return m_senderConnection; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// What local time the message was received from the network\r\n\t\t/// </summary>\r\n\t\tpublic double ReceiveTime { get { return m_receiveTime; } }\r\n\r\n\t\tinternal NetIncomingMessage()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tinternal NetIncomingMessage(NetIncomingMessageType tp)\r\n\t\t{\r\n\t\t\tm_incomingMessageType = tp;\r\n\t\t}\r\n\r\n\t\tinternal void Reset()\r\n\t\t{\r\n\t\t\tm_incomingMessageType = NetIncomingMessageType.Error;\r\n\t\t\tm_readPosition = 0;\r\n\t\t\tm_receivedMessageType = NetMessageType.LibraryError;\r\n\t\t\tm_senderConnection = null;\r\n\t\t\tm_bitLength = 0;\r\n\t\t\tm_isFragment = false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decrypt a message\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"encryption\">The encryption algorithm used to encrypt the message</param>\r\n\t\t/// <returns>true on success</returns>\r\n\t\tpublic bool Decrypt(NetEncryption encryption)\r\n\t\t{\r\n\t\t\treturn encryption.Decrypt(this);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads a value, in local time comparable to NetTime.Now, written using WriteTime()\r\n\t\t/// Must have a connected sender\r\n\t\t/// </summary>\r\n\t\tpublic double ReadTime(bool highPrecision)\r\n\t\t{\r\n\t\t\treturn ReadTime(m_senderConnection, highPrecision);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents this object\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn \"[NetIncomingMessage #\" + m_sequenceNumber + \" \" + this.LengthBytes + \" bytes]\";\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetIncomingMessageType.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\nusing System;\r\nusing System.Diagnostics.CodeAnalysis;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// The type of a NetIncomingMessage\r\n\t/// </summary>\r\n\t[SuppressMessage(\"Microsoft.Design\", \"CA1027:MarkEnumsWithFlags\")]\r\n\tpublic enum NetIncomingMessageType\r\n\t{\r\n\t\t//\r\n\t\t// library note: values are power-of-two, but they are not flags - it's a convenience for NetPeerConfiguration.DisabledMessageTypes\r\n\t\t//\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error; this value should never appear\r\n\t\t/// </summary>\r\n\t\tError = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Status for a connection changed\r\n\t\t/// </summary>\r\n\t\tStatusChanged = 1 << 0,\t\t\t// Data (string)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Data sent using SendUnconnectedMessage\r\n\t\t/// </summary>\r\n\t\tUnconnectedData = 1 << 1,\t\t// Data\t\t\t\t\tBased on data received\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connection approval is needed\r\n\t\t/// </summary>\r\n\t\tConnectionApproval = 1 << 2,\t// Data\r\n\r\n\t\t/// <summary>\r\n\t\t/// Application data\r\n\t\t/// </summary>\r\n\t\tData = 1 << 3,\t\t\t\t\t// Data\t\t\t\t\tBased on data received\r\n\r\n\t\t/// <summary>\r\n\t\t/// Receipt of delivery\r\n\t\t/// </summary>\r\n\t\tReceipt = 1 << 4,\t\t\t\t// Data\r\n\r\n\t\t/// <summary>\r\n\t\t/// Discovery request for a response\r\n\t\t/// </summary>\r\n\t\tDiscoveryRequest = 1 << 5,\t\t// (no data)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Discovery response to a request\r\n\t\t/// </summary>\r\n\t\tDiscoveryResponse = 1 << 6,\t\t// Data\r\n\r\n\t\t/// <summary>\r\n\t\t/// Verbose debug message\r\n\t\t/// </summary>\r\n\t\tVerboseDebugMessage = 1 << 7,\t// Data (string)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Debug message\r\n\t\t/// </summary>\r\n\t\tDebugMessage = 1 << 8,\t\t\t// Data (string)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Warning message\r\n\t\t/// </summary>\r\n\t\tWarningMessage = 1 << 9,\t\t// Data (string)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error message\r\n\t\t/// </summary>\r\n\t\tErrorMessage = 1 << 10,\t\t\t// Data (string)\r\n\r\n\t\t/// <summary>\r\n\t\t/// NAT introduction was successful\r\n\t\t/// </summary>\r\n\t\tNatIntroductionSuccess = 1 << 11, // Data (as passed to master server)\r\n\r\n\t\t/// <summary>\r\n\t\t/// A roundtrip was measured and NetConnection.AverageRoundtripTime was updated\r\n\t\t/// </summary>\r\n\t\tConnectionLatencyUpdated = 1 << 12, // Seconds as a Single\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetMessageType.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\nusing System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal enum NetMessageType : byte\r\n\t{\r\n\t\tUnconnected = 0,\r\n\r\n\t\tUserUnreliable = 1,\r\n\r\n\t\tUserSequenced1 = 2,\r\n\t\tUserSequenced2 = 3,\r\n\t\tUserSequenced3 = 4,\r\n\t\tUserSequenced4 = 5,\r\n\t\tUserSequenced5 = 6,\r\n\t\tUserSequenced6 = 7,\r\n\t\tUserSequenced7 = 8,\r\n\t\tUserSequenced8 = 9,\r\n\t\tUserSequenced9 = 10,\r\n\t\tUserSequenced10 = 11,\r\n\t\tUserSequenced11 = 12,\r\n\t\tUserSequenced12 = 13,\r\n\t\tUserSequenced13 = 14,\r\n\t\tUserSequenced14 = 15,\r\n\t\tUserSequenced15 = 16,\r\n\t\tUserSequenced16 = 17,\r\n\t\tUserSequenced17 = 18,\r\n\t\tUserSequenced18 = 19,\r\n\t\tUserSequenced19 = 20,\r\n\t\tUserSequenced20 = 21,\r\n\t\tUserSequenced21 = 22,\r\n\t\tUserSequenced22 = 23,\r\n\t\tUserSequenced23 = 24,\r\n\t\tUserSequenced24 = 25,\r\n\t\tUserSequenced25 = 26,\r\n\t\tUserSequenced26 = 27,\r\n\t\tUserSequenced27 = 28,\r\n\t\tUserSequenced28 = 29,\r\n\t\tUserSequenced29 = 30,\r\n\t\tUserSequenced30 = 31,\r\n\t\tUserSequenced31 = 32,\r\n\t\tUserSequenced32 = 33,\r\n\r\n\t\tUserReliableUnordered = 34,\r\n\r\n\t\tUserReliableSequenced1 = 35,\r\n\t\tUserReliableSequenced2 = 36,\r\n\t\tUserReliableSequenced3 = 37,\r\n\t\tUserReliableSequenced4 = 38,\r\n\t\tUserReliableSequenced5 = 39,\r\n\t\tUserReliableSequenced6 = 40,\r\n\t\tUserReliableSequenced7 = 41,\r\n\t\tUserReliableSequenced8 = 42,\r\n\t\tUserReliableSequenced9 = 43,\r\n\t\tUserReliableSequenced10 = 44,\r\n\t\tUserReliableSequenced11 = 45,\r\n\t\tUserReliableSequenced12 = 46,\r\n\t\tUserReliableSequenced13 = 47,\r\n\t\tUserReliableSequenced14 = 48,\r\n\t\tUserReliableSequenced15 = 49,\r\n\t\tUserReliableSequenced16 = 50,\r\n\t\tUserReliableSequenced17 = 51,\r\n\t\tUserReliableSequenced18 = 52,\r\n\t\tUserReliableSequenced19 = 53,\r\n\t\tUserReliableSequenced20 = 54,\r\n\t\tUserReliableSequenced21 = 55,\r\n\t\tUserReliableSequenced22 = 56,\r\n\t\tUserReliableSequenced23 = 57,\r\n\t\tUserReliableSequenced24 = 58,\r\n\t\tUserReliableSequenced25 = 59,\r\n\t\tUserReliableSequenced26 = 60,\r\n\t\tUserReliableSequenced27 = 61,\r\n\t\tUserReliableSequenced28 = 62,\r\n\t\tUserReliableSequenced29 = 63,\r\n\t\tUserReliableSequenced30 = 64,\r\n\t\tUserReliableSequenced31 = 65,\r\n\t\tUserReliableSequenced32 = 66,\r\n\r\n\t\tUserReliableOrdered1 = 67,\r\n\t\tUserReliableOrdered2 = 68,\r\n\t\tUserReliableOrdered3 = 69,\r\n\t\tUserReliableOrdered4 = 70,\r\n\t\tUserReliableOrdered5 = 71,\r\n\t\tUserReliableOrdered6 = 72,\r\n\t\tUserReliableOrdered7 = 73,\r\n\t\tUserReliableOrdered8 = 74,\r\n\t\tUserReliableOrdered9 = 75,\r\n\t\tUserReliableOrdered10 = 76,\r\n\t\tUserReliableOrdered11 = 77,\r\n\t\tUserReliableOrdered12 = 78,\r\n\t\tUserReliableOrdered13 = 79,\r\n\t\tUserReliableOrdered14 = 80,\r\n\t\tUserReliableOrdered15 = 81,\r\n\t\tUserReliableOrdered16 = 82,\r\n\t\tUserReliableOrdered17 = 83,\r\n\t\tUserReliableOrdered18 = 84,\r\n\t\tUserReliableOrdered19 = 85,\r\n\t\tUserReliableOrdered20 = 86,\r\n\t\tUserReliableOrdered21 = 87,\r\n\t\tUserReliableOrdered22 = 88,\r\n\t\tUserReliableOrdered23 = 89,\r\n\t\tUserReliableOrdered24 = 90,\r\n\t\tUserReliableOrdered25 = 91,\r\n\t\tUserReliableOrdered26 = 92,\r\n\t\tUserReliableOrdered27 = 93,\r\n\t\tUserReliableOrdered28 = 94,\r\n\t\tUserReliableOrdered29 = 95,\r\n\t\tUserReliableOrdered30 = 96,\r\n\t\tUserReliableOrdered31 = 97,\r\n\t\tUserReliableOrdered32 = 98,\r\n\r\n\t\tUnused1 = 99,\r\n\t\tUnused2 = 100,\r\n\t\tUnused3 = 101,\r\n\t\tUnused4 = 102,\r\n\t\tUnused5 = 103,\r\n\t\tUnused6 = 104,\r\n\t\tUnused7 = 105,\r\n\t\tUnused8 = 106,\r\n\t\tUnused9 = 107,\r\n\t\tUnused10 = 108,\r\n\t\tUnused11 = 109,\r\n\t\tUnused12 = 110,\r\n\t\tUnused13 = 111,\r\n\t\tUnused14 = 112,\r\n\t\tUnused15 = 113,\r\n\t\tUnused16 = 114,\r\n\t\tUnused17 = 115,\r\n\t\tUnused18 = 116,\r\n\t\tUnused19 = 117,\r\n\t\tUnused20 = 118,\r\n\t\tUnused21 = 119,\r\n\t\tUnused22 = 120,\r\n\t\tUnused23 = 121,\r\n\t\tUnused24 = 122,\r\n\t\tUnused25 = 123,\r\n\t\tUnused26 = 124,\r\n\t\tUnused27 = 125,\r\n\t\tUnused28 = 126,\r\n\t\tUnused29 = 127,\r\n\r\n\t\tLibraryError = 128,\r\n\t\tPing = 129, // used for RTT calculation\r\n\t\tPong = 130, // used for RTT calculation\r\n\t\tConnect = 131,\r\n\t\tConnectResponse = 132,\r\n\t\tConnectionEstablished = 133,\r\n\t\tAcknowledge = 134,\r\n\t\tDisconnect = 135,\r\n\t\tDiscovery = 136,\r\n\t\tDiscoveryResponse = 137,\r\n\t\tNatPunchMessage = 138, // send between peers\r\n\t\tNatIntroduction = 139, // send to master server\r\n\t\tExpandMTURequest = 140,\r\n\t\tExpandMTUSuccess = 141,\r\n\t}\r\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetNatIntroduction.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Net;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetPeer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Send NetIntroduction to hostExternal and clientExternal; introducing client to host\r\n\t\t/// </summary>\r\n\t\tpublic void Introduce(\r\n\t\t\tIPEndPoint hostInternal,\r\n\t\t\tIPEndPoint hostExternal,\r\n\t\t\tIPEndPoint clientInternal,\r\n\t\t\tIPEndPoint clientExternal,\r\n\t\t\tstring token)\r\n\t\t{\r\n\t\t\t// send message to client\r\n\t\t\tNetOutgoingMessage msg = CreateMessage(10 + token.Length + 1);\r\n\t\t\tmsg.m_messageType = NetMessageType.NatIntroduction;\r\n\t\t\tmsg.Write((byte)0);\r\n\t\t\tmsg.Write(hostInternal);\r\n\t\t\tmsg.Write(hostExternal);\r\n\t\t\tmsg.Write(token);\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(clientExternal, msg));\r\n\r\n\t\t\t// send message to host\r\n\t\t\tmsg = CreateMessage(10 + token.Length + 1);\r\n\t\t\tmsg.m_messageType = NetMessageType.NatIntroduction;\r\n\t\t\tmsg.Write((byte)1);\r\n\t\t\tmsg.Write(clientInternal);\r\n\t\t\tmsg.Write(clientExternal);\r\n\t\t\tmsg.Write(token);\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(hostExternal, msg));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when host/client receives a NatIntroduction message from a master server\r\n\t\t/// </summary>\r\n\t\tinternal void HandleNatIntroduction(int ptr)\r\n\t\t{\r\n\t\t\tVerifyNetworkThread();\r\n\r\n\t\t\t// read intro\r\n\t\t\tNetIncomingMessage tmp = SetupReadHelperMessage(ptr, 1000); // never mind length\r\n\r\n\t\t\tbyte hostByte = tmp.ReadByte();\r\n\t\t\tIPEndPoint remoteInternal = tmp.ReadIPEndPoint();\r\n\t\t\tIPEndPoint remoteExternal = tmp.ReadIPEndPoint();\r\n\t\t\tstring token = tmp.ReadString();\r\n\t\t\tbool isHost = (hostByte != 0);\r\n\r\n\t\t\tLogDebug(\"NAT introduction received; we are designated \" + (isHost ? \"host\" : \"client\"));\r\n\r\n\t\t\tNetOutgoingMessage punch;\r\n\r\n\t\t\tif (!isHost && m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.NatIntroductionSuccess) == false)\r\n\t\t\t\treturn; // no need to punch - we're not listening for nat intros!\r\n\r\n\t\t\t// send internal punch\r\n\t\t\tpunch = CreateMessage(1);\r\n\t\t\tpunch.m_messageType = NetMessageType.NatPunchMessage;\r\n\t\t\tpunch.Write(hostByte);\r\n\t\t\tpunch.Write(token);\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(remoteInternal, punch));\r\n\t\t\tLogDebug(\"NAT punch sent to \" + remoteInternal);\r\n\r\n\t\t\t// send external punch\r\n\t\t\tpunch = CreateMessage(1);\r\n\t\t\tpunch.m_messageType = NetMessageType.NatPunchMessage;\r\n\t\t\tpunch.Write(hostByte);\r\n\t\t\tpunch.Write(token);\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(remoteExternal, punch));\r\n\t\t\tLogDebug(\"NAT punch sent to \" + remoteExternal);\r\n\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when receiving a NatPunchMessage from a remote endpoint\r\n\t\t/// </summary>\r\n\t\tprivate void HandleNatPunch(int ptr, IPEndPoint senderEndPoint)\r\n\t\t{\r\n\t\t\tNetIncomingMessage tmp = SetupReadHelperMessage(ptr, 1000); // never mind length\r\n\r\n\t\t\tbyte fromHostByte = tmp.ReadByte();\r\n\t\t\tif (fromHostByte == 0)\r\n\t\t\t{\r\n\t\t\t\t// it's from client\r\n\t\t\t\tLogDebug(\"NAT punch received from \" + senderEndPoint + \" we're host, so we ignore this\");\r\n\t\t\t\treturn; // don't alert hosts about nat punch successes; only clients\r\n\t\t\t}\r\n\t\t\tstring token = tmp.ReadString();\r\n\r\n\t\t\tLogDebug(\"NAT punch received from \" + senderEndPoint + \" we're client, so we've succeeded - token is \" + token);\r\n\r\n\t\t\t//\r\n\t\t\t// Release punch success to client; enabling him to Connect() to msg.SenderIPEndPoint if token is ok\r\n\t\t\t//\r\n\t\t\tNetIncomingMessage punchSuccess = CreateIncomingMessage(NetIncomingMessageType.NatIntroductionSuccess, 10);\r\n\t\t\tpunchSuccess.m_senderEndPoint = senderEndPoint;\r\n\t\t\tpunchSuccess.Write(token);\r\n\t\t\tReleaseMessage(punchSuccess);\r\n\r\n\t\t\t// send a return punch just for good measure\r\n\t\t\tvar punch = CreateMessage(1);\r\n\t\t\tpunch.m_messageType = NetMessageType.NatPunchMessage;\r\n\t\t\tpunch.Write((byte)0);\r\n\t\t\tpunch.Write(token);\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(senderEndPoint, punch));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetOutgoingMessage.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\nusing System;\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Outgoing message used to send data to remote peer(s)\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"LengthBits={LengthBits}\")]\r\n\tpublic sealed class NetOutgoingMessage : NetBuffer\r\n\t{\r\n\t\tinternal NetMessageType m_messageType;\r\n\t\tinternal bool m_isSent;\r\n\t\tinternal int m_recyclingCount;\r\n\r\n\t\tinternal int m_fragmentGroup;             // which group of fragments ths belongs to\r\n\t\tinternal int m_fragmentGroupTotalBits;    // total number of bits in this group\r\n\t\tinternal int m_fragmentChunkByteSize;\t  // size, in bytes, of every chunk but the last one\r\n\t\tinternal int m_fragmentChunkNumber;       // which number chunk this is, starting with 0\r\n\r\n\t\tinternal NetOutgoingMessage()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tinternal void Reset()\r\n\t\t{\r\n\t\t\tm_messageType = NetMessageType.LibraryError;\r\n\t\t\tm_bitLength = 0;\r\n\t\t\tm_isSent = false;\r\n\t\t\tm_recyclingCount = 0;\r\n\t\t\tm_fragmentGroup = 0;\r\n\t\t}\r\n\r\n\t\tinternal int Encode(byte[] intoBuffer, int ptr, int sequenceNumber)\r\n\t\t{\r\n\t\t\t//  8 bits - NetMessageType\r\n\t\t\t//  1 bit  - Fragment?\r\n\t\t\t// 15 bits - Sequence number\r\n\t\t\t// 16 bits - Payload length in bits\r\n\t\t\t\r\n\t\t\tintoBuffer[ptr++] = (byte)m_messageType;\r\n\r\n\t\t\tbyte low = (byte)((sequenceNumber << 1) | (m_fragmentGroup == 0 ? 0 : 1));\r\n\t\t\tintoBuffer[ptr++] = low;\r\n\t\t\tintoBuffer[ptr++] = (byte)(sequenceNumber >> 7);\r\n\r\n\t\t\tif (m_fragmentGroup == 0)\r\n\t\t\t{\r\n\t\t\t\tintoBuffer[ptr++] = (byte)m_bitLength;\r\n\t\t\t\tintoBuffer[ptr++] = (byte)(m_bitLength >> 8);\r\n\r\n\t\t\t\tint byteLen = NetUtility.BytesToHoldBits(m_bitLength);\r\n\t\t\t\tif (byteLen > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tBuffer.BlockCopy(m_data, 0, intoBuffer, ptr, byteLen);\r\n\t\t\t\t\tptr += byteLen;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tint wasPtr = ptr;\r\n\t\t\t\tintoBuffer[ptr++] = (byte)m_bitLength;\r\n\t\t\t\tintoBuffer[ptr++] = (byte)(m_bitLength >> 8);\r\n\r\n\t\t\t\t//\r\n\t\t\t\t// write fragmentation header\r\n\t\t\t\t//\r\n\t\t\t\tptr = NetFragmentationHelper.WriteHeader(intoBuffer, ptr, m_fragmentGroup, m_fragmentGroupTotalBits, m_fragmentChunkByteSize, m_fragmentChunkNumber);\r\n\t\t\t\tint hdrLen = ptr - wasPtr - 2;\r\n\r\n\t\t\t\t// update length\r\n\t\t\t\tint realBitLength = m_bitLength + (hdrLen * 8);\r\n\t\t\t\tintoBuffer[wasPtr] = (byte)realBitLength;\r\n\t\t\t\tintoBuffer[wasPtr + 1] = (byte)(realBitLength >> 8);\r\n\r\n\t\t\t\tint byteLen = NetUtility.BytesToHoldBits(m_bitLength);\r\n\t\t\t\tif (byteLen > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tBuffer.BlockCopy(m_data, (int)(m_fragmentChunkNumber * m_fragmentChunkByteSize), intoBuffer, ptr, byteLen);\r\n\t\t\t\t\tptr += byteLen;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tNetException.Assert(ptr > 0);\r\n\t\t\treturn ptr;\r\n\t\t}\r\n\r\n\t\tinternal int GetEncodedSize()\r\n\t\t{\r\n\t\t\tint retval = NetConstants.UnfragmentedMessageHeaderSize; // regular headers\r\n\t\t\tif (m_fragmentGroup != 0)\r\n\t\t\t\tretval += NetFragmentationHelper.GetFragmentationHeaderSize(m_fragmentGroup, m_fragmentGroupTotalBits / 8, m_fragmentChunkByteSize, m_fragmentChunkNumber);\r\n\t\t\tretval += this.LengthBytes;\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encrypt this message using the provided algorithm; no more writing can be done before sending it or the message will be corrupt!\r\n\t\t/// </summary>\r\n\t\tpublic bool Encrypt(NetEncryption encryption)\r\n\t\t{\r\n\t\t\treturn encryption.Encrypt(this);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents this object\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tif (m_isSent)\r\n\t\t\t\treturn \"[NetOutgoingMessage \" + m_messageType + \" \" + this.LengthBytes + \" bytes]\";\r\n\r\n\t\t\treturn \"[NetOutgoingMessage \" + this.LengthBytes + \" bytes]\";\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeer.Discovery.cs",
    "content": "﻿using System;\r\nusing System.Net;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetPeer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Emit a discovery signal to all hosts on your subnet\r\n\t\t/// </summary>\r\n\t\tpublic void DiscoverLocalPeers(int serverPort)\r\n\t\t{\r\n\t\t\tNetOutgoingMessage om = CreateMessage(0);\r\n\t\t\tom.m_messageType = NetMessageType.Discovery;\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(new IPEndPoint(IPAddress.Broadcast, serverPort), om));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emit a discovery signal to a single known host\r\n\t\t/// </summary>\r\n\t\tpublic bool DiscoverKnownPeer(string host, int serverPort)\r\n\t\t{\r\n\t\t\tIPAddress address = NetUtility.Resolve(host);\r\n\t\t\tif (address == null)\r\n\t\t\t\treturn false;\r\n\t\t\tDiscoverKnownPeer(new IPEndPoint(address, serverPort));\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emit a discovery signal to a single known host\r\n\t\t/// </summary>\r\n\t\tpublic void DiscoverKnownPeer(IPEndPoint endPoint)\r\n\t\t{\r\n\t\t\tNetOutgoingMessage om = CreateMessage(0);\r\n\t\t\tom.m_messageType = NetMessageType.Discovery;\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(endPoint, om));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a discovery response message\r\n\t\t/// </summary>\r\n\t\tpublic void SendDiscoveryResponse(NetOutgoingMessage msg, IPEndPoint recipient)\r\n\t\t{\r\n\t\t\tif (recipient == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"recipient\");\r\n\r\n\t\t\tif (msg == null)\r\n\t\t\t\tmsg = CreateMessage(0);\r\n\t\t\telse if (msg.m_isSent)\r\n\t\t\t\tthrow new NetException(\"Message has already been sent!\");\r\n\r\n\t\t\tif (msg.LengthBytes >= m_configuration.MaximumTransmissionUnit)\r\n\t\t\t\tthrow new NetException(\"Cannot send discovery message larger than MTU (currently \" + m_configuration.MaximumTransmissionUnit + \" bytes)\");\r\n\r\n\t\t\tmsg.m_messageType = NetMessageType.DiscoveryResponse;\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(recipient, msg));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeer.Fragmentation.cs",
    "content": "﻿using System;\r\nusing System.Threading;\r\nusing System.Collections.Generic;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal class ReceivedFragmentGroup\r\n\t{\r\n\t\t//public float LastReceived;\r\n\t\tpublic byte[] Data;\r\n\t\tpublic NetBitVector ReceivedChunks;\r\n\t}\r\n\r\n\tpublic partial class NetPeer\r\n\t{\r\n\t\tprivate int m_lastUsedFragmentGroup;\r\n\r\n\t\tprivate Dictionary<NetConnection, Dictionary<int, ReceivedFragmentGroup>> m_receivedFragmentGroups;\r\n\r\n\t\t// on user thread\r\n\t\tprivate NetSendResult SendFragmentedMessage(NetOutgoingMessage msg, IList<NetConnection> recipients, NetDeliveryMethod method, int sequenceChannel)\r\n\t\t{\r\n\t\t\t// Note: this group id is PER SENDING/NetPeer; ie. same id is sent to all recipients;\r\n\t\t\t// this should be ok however; as long as recipients differentiate between same id but different sender\r\n\t\t\tint group = Interlocked.Increment(ref m_lastUsedFragmentGroup);\r\n\t\t\tif (group >= NetConstants.MaxFragmentationGroups)\r\n\t\t\t{\r\n\t\t\t\t// @TODO: not thread safe; but in practice probably not an issue\r\n\t\t\t\tm_lastUsedFragmentGroup = 1;\r\n\t\t\t\tgroup = 1;\r\n\t\t\t}\r\n\t\t\tmsg.m_fragmentGroup = group;\r\n\r\n\t\t\t// do not send msg; but set fragmentgroup in case user tries to recycle it immediately\r\n\r\n\t\t\t// create fragmentation specifics\r\n\t\t\tint totalBytes = msg.LengthBytes;\r\n\r\n\t\t\t// determine minimum mtu for all recipients\r\n\t\t\tint mtu = GetMTU(recipients);\r\n\t\t\tint bytesPerChunk = NetFragmentationHelper.GetBestChunkSize(group, totalBytes, mtu);\r\n\r\n\t\t\tint numChunks = totalBytes / bytesPerChunk;\r\n\t\t\tif (numChunks * bytesPerChunk < totalBytes)\r\n\t\t\t\tnumChunks++;\r\n\r\n\t\t\tNetSendResult retval = NetSendResult.Sent;\r\n\r\n\t\t\tint bitsPerChunk = bytesPerChunk * 8;\r\n\t\t\tint bitsLeft = msg.LengthBits;\r\n\t\t\tfor (int i = 0; i < numChunks; i++)\r\n\t\t\t{\r\n\t\t\t\tNetOutgoingMessage chunk = CreateMessage(0);\r\n\r\n\t\t\t\tchunk.m_bitLength = (bitsLeft > bitsPerChunk ? bitsPerChunk : bitsLeft);\r\n\t\t\t\tchunk.m_data = msg.m_data;\r\n\t\t\t\tchunk.m_fragmentGroup = group;\r\n\t\t\t\tchunk.m_fragmentGroupTotalBits = totalBytes * 8;\r\n\t\t\t\tchunk.m_fragmentChunkByteSize = bytesPerChunk;\r\n\t\t\t\tchunk.m_fragmentChunkNumber = i;\r\n\r\n\t\t\t\tNetException.Assert(chunk.m_bitLength != 0);\r\n\t\t\t\tNetException.Assert(chunk.GetEncodedSize() < mtu);\r\n\r\n\t\t\t\tInterlocked.Add(ref chunk.m_recyclingCount, recipients.Count);\r\n\r\n\t\t\t\tforeach (NetConnection recipient in recipients)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar res = recipient.EnqueueMessage(chunk, method, sequenceChannel);\r\n\t\t\t\t\tif ((int)res > (int)retval)\r\n\t\t\t\t\t\tretval = res; // return \"worst\" result\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbitsLeft -= bitsPerChunk;\r\n\t\t\t}\r\n\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\tprivate void HandleReleasedFragment(NetIncomingMessage im)\r\n\t\t{\r\n\t\t\tVerifyNetworkThread();\r\n\r\n\t\t\t//\r\n\t\t\t// read fragmentation header and combine fragments\r\n\t\t\t//\r\n\t\t\tint group;\r\n\t\t\tint totalBits;\r\n\t\t\tint chunkByteSize;\r\n\t\t\tint chunkNumber;\r\n\t\t\tint ptr = NetFragmentationHelper.ReadHeader(\r\n\t\t\t\tim.m_data, 0,\r\n\t\t\t\tout group,\r\n\t\t\t\tout totalBits,\r\n\t\t\t\tout chunkByteSize,\r\n\t\t\t\tout chunkNumber\r\n\t\t\t);\r\n\r\n\t\t\tNetException.Assert(im.LengthBytes > ptr);\r\n\r\n\t\t\tNetException.Assert(group > 0);\r\n\t\t\tNetException.Assert(totalBits > 0);\r\n\t\t\tNetException.Assert(chunkByteSize > 0);\r\n\t\t\t\r\n\t\t\tint totalBytes = NetUtility.BytesToHoldBits((int)totalBits);\r\n\t\t\tint totalNumChunks = totalBytes / chunkByteSize;\r\n\t\t\tif (totalNumChunks * chunkByteSize < totalBytes)\r\n\t\t\t\ttotalNumChunks++;\r\n\r\n\t\t\tNetException.Assert(chunkNumber < totalNumChunks);\r\n\r\n\t\t\tif (chunkNumber >= totalNumChunks)\r\n\t\t\t{\r\n\t\t\t\tLogWarning(\"Index out of bounds for chunk \" + chunkNumber + \" (total chunks \" + totalNumChunks + \")\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tDictionary<int, ReceivedFragmentGroup> groups;\r\n\t\t\tif (!m_receivedFragmentGroups.TryGetValue(im.SenderConnection, out groups))\r\n\t\t\t{\r\n\t\t\t\tgroups = new Dictionary<int, ReceivedFragmentGroup>();\r\n\t\t\t\tm_receivedFragmentGroups[im.SenderConnection] = groups;\r\n\t\t\t}\r\n\r\n\t\t\tReceivedFragmentGroup info;\r\n\t\t\tif (!groups.TryGetValue(group, out info))\r\n\t\t\t{\r\n\t\t\t\tinfo = new ReceivedFragmentGroup();\r\n\t\t\t\tinfo.Data = new byte[totalBytes];\r\n\t\t\t\tinfo.ReceivedChunks = new NetBitVector(totalNumChunks);\r\n\t\t\t\tgroups[group] = info;\r\n\t\t\t}\r\n\r\n\t\t\tinfo.ReceivedChunks[chunkNumber] = true;\r\n\t\t\t//info.LastReceived = (float)NetTime.Now;\r\n\r\n\t\t\t// copy to data\r\n\t\t\tint offset = (chunkNumber * chunkByteSize);\r\n\t\t\tBuffer.BlockCopy(im.m_data, ptr, info.Data, offset, im.LengthBytes - ptr);\r\n\r\n\t\t\tint cnt = info.ReceivedChunks.Count();\r\n\t\t\t//LogVerbose(\"Found fragment #\" + chunkNumber + \" in group \" + group + \" offset \" + offset + \" of total bits \" + totalBits + \" (total chunks done \" + cnt + \")\");\r\n\r\n\t\t\tLogVerbose(\"Received fragment \" + chunkNumber + \" of \" + totalNumChunks + \" (\" + cnt + \" chunks received)\");\r\n\r\n\t\t\tif (info.ReceivedChunks.Count() == totalNumChunks)\r\n\t\t\t{\r\n\t\t\t\t// Done! Transform this incoming message\r\n\t\t\t\tim.m_data = info.Data;\r\n\t\t\t\tim.m_bitLength = (int)totalBits;\r\n\t\t\t\tim.m_isFragment = false;\r\n\r\n\t\t\t\tLogVerbose(\"Fragment group #\" + group + \" fully received in \" + totalNumChunks + \" chunks (\" + totalBits + \" bits)\");\r\n\t\t\t\tgroups.Remove(group);\r\n\r\n\t\t\t\tReleaseMessage(im);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// data has been copied; recycle this incoming message\r\n\t\t\t\tRecycle(im);\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeer.Internal.cs",
    "content": "﻿#if !__ANDROID__ && !IOS && !UNITY_WEBPLAYER && !UNITY_ANDROID && !UNITY_IPHONE\r\n#define IS_MAC_AVAILABLE\r\n#endif\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.Threading;\r\nusing System.Diagnostics;\r\nusing System.Security.Cryptography;\r\nusing System.Net.Sockets;\r\nusing System.Collections.Generic;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetPeer\r\n\t{\r\n\t\tprivate NetPeerStatus m_status;\r\n\t\tprivate Thread m_networkThread;\r\n\t\tprivate Socket m_socket;\r\n\t\tinternal byte[] m_sendBuffer;\r\n\t\tinternal byte[] m_receiveBuffer;\r\n\t\tinternal NetIncomingMessage m_readHelperMessage;\r\n\t\tprivate EndPoint m_senderRemote;\r\n\t\tprivate object m_initializeLock = new object();\r\n\t\tprivate uint m_frameCounter;\r\n\t\tprivate double m_lastHeartbeat;\r\n\t\tprivate double m_lastSocketBind = float.MinValue;\r\n\t\tprivate NetUPnP m_upnp;\r\n\r\n\t\tinternal readonly NetPeerConfiguration m_configuration;\r\n\t\tprivate readonly NetQueue<NetIncomingMessage> m_releasedIncomingMessages;\r\n\t\tinternal readonly NetQueue<NetTuple<IPEndPoint, NetOutgoingMessage>> m_unsentUnconnectedMessages;\r\n\r\n\t\tinternal Dictionary<IPEndPoint, NetConnection> m_handshakes;\r\n\r\n\t\tinternal readonly NetPeerStatistics m_statistics;\r\n\t\tinternal long m_uniqueIdentifier;\r\n\t\tinternal bool m_executeFlushSendQueue;\r\n\r\n\t\tprivate AutoResetEvent m_messageReceivedEvent;\r\n\t\tprivate List<NetTuple<SynchronizationContext, SendOrPostCallback>> m_receiveCallbacks;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the socket, if Start() has been called\r\n\t\t/// </summary>\r\n\t\tpublic Socket Socket { get { return m_socket; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Call this to register a callback for when a new message arrives\r\n\t\t/// </summary>\r\n\t\tpublic void RegisterReceivedCallback(SendOrPostCallback callback, SynchronizationContext syncContext = null)\r\n\t\t{\r\n\t\t\tif (syncContext == null)\r\n\t\t\t\tsyncContext = SynchronizationContext.Current;\r\n\t\t\tif (syncContext == null)\r\n\t\t\t\tthrow new NetException(\"Need a SynchronizationContext to register callback on correct thread!\");\r\n\t\t\tif (m_receiveCallbacks == null)\r\n\t\t\t\tm_receiveCallbacks = new List<NetTuple<SynchronizationContext, SendOrPostCallback>>();\r\n\t\t\tm_receiveCallbacks.Add(new NetTuple<SynchronizationContext, SendOrPostCallback>(syncContext, callback));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Call this to unregister a callback, but remember to do it in the same synchronization context!\r\n\t\t/// </summary>\r\n\t\tpublic void UnregisterReceivedCallback(SendOrPostCallback callback)\r\n\t\t{\r\n\t\t\tif (m_receiveCallbacks == null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\t// remove all callbacks regardless of sync context\r\n\t\tRestartRemoveCallbacks:\r\n\t\t\tfor (int i = 0; i < m_receiveCallbacks.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tif (m_receiveCallbacks[i].Item2.Equals(callback))\r\n\t\t\t\t{\r\n\t\t\t\t\tm_receiveCallbacks.RemoveAt(i);\r\n\t\t\t\t\tgoto RestartRemoveCallbacks;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (m_receiveCallbacks.Count < 1)\r\n\t\t\t\tm_receiveCallbacks = null;\r\n\t\t}\r\n\r\n\t\tinternal void ReleaseMessage(NetIncomingMessage msg)\r\n\t\t{\r\n\t\t\tNetException.Assert(msg.m_incomingMessageType != NetIncomingMessageType.Error);\r\n\r\n\t\t\tif (msg.m_isFragment)\r\n\t\t\t{\r\n\t\t\t\tHandleReleasedFragment(msg);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_releasedIncomingMessages.Enqueue(msg);\r\n\r\n\t\t\tif (m_messageReceivedEvent != null)\r\n\t\t\t\tm_messageReceivedEvent.Set();\r\n\r\n\t\t\tif (m_receiveCallbacks != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (var tuple in m_receiveCallbacks)\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttuple.Item1.Post(tuple.Item2, this);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (Exception ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLogWarning(\"Receive callback exception:\" + ex);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void BindSocket(bool reBind)\r\n\t\t{\r\n\t\t\tdouble now = NetTime.Now;\r\n\t\t\tif (now - m_lastSocketBind < 1.0)\r\n\t\t\t{\r\n\t\t\t\tLogDebug(\"Suppressed socket rebind; last bound \" + (now - m_lastSocketBind) + \" seconds ago\");\r\n\t\t\t\treturn; // only allow rebind once every second\r\n\t\t\t}\r\n\t\t\tm_lastSocketBind = now;\r\n\r\n\t\t\tif (m_socket == null)\r\n\t\t\t\tm_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);\r\n\r\n\t\t\tif (reBind)\r\n\t\t\t\tm_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, (int)1); \r\n\r\n\t\t\tm_socket.ReceiveBufferSize = m_configuration.ReceiveBufferSize;\r\n\t\t\tm_socket.SendBufferSize = m_configuration.SendBufferSize;\r\n\t\t\tm_socket.Blocking = false;\r\n\r\n\t\t\tvar ep = (EndPoint)new IPEndPoint(m_configuration.LocalAddress, reBind ? m_listenPort : m_configuration.Port);\r\n\t\t\tm_socket.Bind(ep);\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tconst uint IOC_IN = 0x80000000;\r\n\t\t\t\tconst uint IOC_VENDOR = 0x18000000;\r\n\t\t\t\tuint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;\r\n\t\t\t\tm_socket.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);\r\n\t\t\t}\r\n\t\t\tcatch\r\n\t\t\t{\r\n\t\t\t\t// ignore; SIO_UDP_CONNRESET not supported on this platform\r\n\t\t\t}\r\n\r\n\t\t\tIPEndPoint boundEp = m_socket.LocalEndPoint as IPEndPoint;\r\n\t\t\tLogDebug(\"Socket bound to \" + boundEp + \": \" + m_socket.IsBound);\r\n\t\t\tm_listenPort = boundEp.Port;\r\n\t\t}\r\n\r\n\t\tprivate void InitializeNetwork()\r\n\t\t{\r\n\t\t\tlock (m_initializeLock)\r\n\t\t\t{\r\n\t\t\t\tm_configuration.Lock();\r\n\r\n\t\t\t\tif (m_status == NetPeerStatus.Running)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tif (m_configuration.m_enableUPnP)\r\n\t\t\t\t\tm_upnp = new NetUPnP(this);\r\n\r\n\t\t\t\tInitializePools();\r\n\r\n\t\t\t\tm_releasedIncomingMessages.Clear();\r\n\t\t\t\tm_unsentUnconnectedMessages.Clear();\r\n\t\t\t\tm_handshakes.Clear();\r\n\r\n\t\t\t\t// bind to socket\r\n\t\t\t\tBindSocket(false);\r\n\r\n\t\t\t\tm_receiveBuffer = new byte[m_configuration.ReceiveBufferSize];\r\n\t\t\t\tm_sendBuffer = new byte[m_configuration.SendBufferSize];\r\n\t\t\t\tm_readHelperMessage = new NetIncomingMessage(NetIncomingMessageType.Error);\r\n\t\t\t\tm_readHelperMessage.m_data = m_receiveBuffer;\r\n\r\n\t\t\t\tbyte[] macBytes = new byte[8];\r\n\t\t\t\tMWCRandom.Instance.NextBytes(macBytes);\r\n\r\n#if IS_MAC_AVAILABLE\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tSystem.Net.NetworkInformation.PhysicalAddress pa = NetUtility.GetMacAddress();\r\n\t\t\t\t\tif (pa != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmacBytes = pa.GetAddressBytes();\r\n\t\t\t\t\t\tLogVerbose(\"Mac address is \" + NetUtility.ToHexString(macBytes));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLogWarning(\"Failed to get Mac address\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (NotSupportedException)\r\n\t\t\t\t{\r\n\t\t\t\t\t// not supported; lets just keep the random bytes set above\r\n\t\t\t\t}\r\n#endif\r\n\t\t\t\tIPEndPoint boundEp = m_socket.LocalEndPoint as IPEndPoint;\r\n\t\t\t\tbyte[] epBytes = BitConverter.GetBytes(boundEp.GetHashCode());\r\n\t\t\t\tbyte[] combined = new byte[epBytes.Length + macBytes.Length];\r\n\t\t\t\tArray.Copy(epBytes, 0, combined, 0, epBytes.Length);\r\n\t\t\t\tArray.Copy(macBytes, 0, combined, epBytes.Length, macBytes.Length);\r\n\t\t\t\tm_uniqueIdentifier = BitConverter.ToInt64(NetUtility.CreateSHA1Hash(combined), 0);\r\n\r\n\t\t\t\tm_status = NetPeerStatus.Running;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void NetworkLoop()\r\n\t\t{\r\n\t\t\tVerifyNetworkThread();\r\n\r\n\t\t\tLogDebug(\"Network thread started\");\r\n\r\n\t\t\t//\r\n\t\t\t// Network loop\r\n\t\t\t//\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tHeartbeat();\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception ex)\r\n\t\t\t\t{\r\n\t\t\t\t\tLogWarning(ex.ToString());\r\n\t\t\t\t}\r\n\t\t\t} while (m_status == NetPeerStatus.Running);\r\n\r\n\t\t\t//\r\n\t\t\t// perform shutdown\r\n\t\t\t//\r\n\t\t\tExecutePeerShutdown();\r\n\t\t}\r\n\r\n\t\tprivate void ExecutePeerShutdown()\r\n\t\t{\r\n\t\t\tVerifyNetworkThread();\r\n\r\n\t\t\tLogDebug(\"Shutting down...\");\r\n\r\n\t\t\t// disconnect and make one final heartbeat\r\n\t\t\tvar list = new List<NetConnection>(m_handshakes.Count + m_connections.Count);\r\n\t\t\tlock (m_connections)\r\n\t\t\t{\r\n\t\t\t\tforeach (var conn in m_connections)\r\n\t\t\t\t\tif (conn != null)\r\n\t\t\t\t\t\tlist.Add(conn);\r\n\r\n\t\t\t\tlock (m_handshakes)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (var hs in m_handshakes.Values)\r\n\t\t\t\t\t\tif (hs != null)\r\n\t\t\t\t\t\t\tlist.Add(hs);\r\n\r\n\t\t\t\t\t// shut down connections\r\n\t\t\t\t\tforeach (NetConnection conn in list)\r\n\t\t\t\t\t\tconn.Shutdown(m_shutdownReason);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tFlushDelayedPackets();\r\n\r\n\t\t\t// one final heartbeat, will send stuff and do disconnect\r\n\t\t\tHeartbeat();\r\n\r\n\t\t\tThread.Sleep(10);\r\n\r\n\t\t\tlock (m_initializeLock)\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tif (m_socket != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tm_socket.Shutdown(SocketShutdown.Receive);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch(Exception ex)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLogDebug(\"Socket.Shutdown exception: \" + ex.ToString());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tm_socket.Close(2); // 2 seconds timeout\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (Exception ex)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLogDebug(\"Socket.Close exception: \" + ex.ToString());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tm_socket = null;\r\n\t\t\t\t\tm_status = NetPeerStatus.NotRunning;\r\n\t\t\t\t\tLogDebug(\"Shutdown complete\");\r\n\r\n\t\t\t\t\t// wake up any threads waiting for server shutdown\r\n\t\t\t\t\tif (m_messageReceivedEvent != null)\r\n\t\t\t\t\t\tm_messageReceivedEvent.Set();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tm_lastSocketBind = float.MinValue;\r\n\t\t\t\tm_receiveBuffer = null;\r\n\t\t\t\tm_sendBuffer = null;\r\n\t\t\t\tm_unsentUnconnectedMessages.Clear();\r\n\t\t\t\tm_connections.Clear();\r\n\t\t\t\tm_connectionLookup.Clear();\r\n\t\t\t\tm_handshakes.Clear();\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tprivate void Heartbeat()\r\n\t\t{\r\n\t\t\tVerifyNetworkThread();\r\n\r\n\t\t\tdouble dnow = NetTime.Now;\r\n\t\t\tfloat now = (float)dnow;\r\n\r\n\t\t\tdouble delta = dnow - m_lastHeartbeat;\r\n\r\n\t\t\tint maxCHBpS = 1250 - m_connections.Count;\r\n\t\t\tif (maxCHBpS < 250)\r\n\t\t\t\tmaxCHBpS = 250;\r\n\t\t\tif (delta > (1.0 / (double)maxCHBpS) || delta < 0.0) // max connection heartbeats/second max\r\n\t\t\t{\r\n\t\t\t\tm_frameCounter++;\r\n\t\t\t\tm_lastHeartbeat = dnow;\r\n\r\n\t\t\t\t// do handshake heartbeats\r\n\t\t\t\tif ((m_frameCounter % 3) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (var kvp in m_handshakes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tNetConnection conn = kvp.Value as NetConnection;\r\n#if DEBUG\r\n\t\t\t\t\t\t// sanity check\r\n\t\t\t\t\t\tif (kvp.Key != kvp.Key)\r\n\t\t\t\t\t\t\tLogWarning(\"Sanity fail! Connection in handshake list under wrong key!\");\r\n#endif\r\n\t\t\t\t\t\tconn.UnconnectedHeartbeat(now);\r\n\t\t\t\t\t\tif (conn.m_status == NetConnectionStatus.Connected || conn.m_status == NetConnectionStatus.Disconnected)\r\n\t\t\t\t\t\t{\r\n#if DEBUG\r\n\t\t\t\t\t\t\t// sanity check\r\n\t\t\t\t\t\t\tif (conn.m_status == NetConnectionStatus.Disconnected && m_handshakes.ContainsKey(conn.RemoteEndPoint))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tLogWarning(\"Sanity fail! Handshakes list contained disconnected connection!\");\r\n\t\t\t\t\t\t\t\tm_handshakes.Remove(conn.RemoteEndPoint);\r\n\t\t\t\t\t\t\t}\r\n#endif\r\n\t\t\t\t\t\t\tbreak; // collection has been modified\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n#if DEBUG\r\n\t\t\t\tSendDelayedPackets();\r\n#endif\r\n\r\n\t\t\t\t// update m_executeFlushSendQueue\r\n\t\t\t\tif (m_configuration.m_autoFlushSendQueue)\r\n\t\t\t\t\tm_executeFlushSendQueue = true;\r\n\r\n\t\t\t\t// do connection heartbeats\r\n\t\t\t\tlock (m_connections)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (NetConnection conn in m_connections)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconn.Heartbeat(now, m_frameCounter);\r\n\t\t\t\t\t\tif (conn.m_status == NetConnectionStatus.Disconnected)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//\r\n\t\t\t\t\t\t\t// remove connection\r\n\t\t\t\t\t\t\t//\r\n\t\t\t\t\t\t\tm_connections.Remove(conn);\r\n\t\t\t\t\t\t\tm_connectionLookup.Remove(conn.RemoteEndPoint);\r\n\t\t\t\t\t\t\tbreak; // can't continue iteration here\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tm_executeFlushSendQueue = false;\r\n\r\n\t\t\t\t// send unsent unconnected messages\r\n\t\t\t\tNetTuple<IPEndPoint, NetOutgoingMessage> unsent;\r\n\t\t\t\twhile (m_unsentUnconnectedMessages.TryDequeue(out unsent))\r\n\t\t\t\t{\r\n\t\t\t\t\tNetOutgoingMessage om = unsent.Item2;\r\n\r\n\t\t\t\t\tbool connReset;\r\n\t\t\t\t\tint len = om.Encode(m_sendBuffer, 0, 0);\r\n\t\t\t\t\tSendPacket(len, unsent.Item1, 1, out connReset);\r\n\r\n\t\t\t\t\tInterlocked.Decrement(ref om.m_recyclingCount);\r\n\t\t\t\t\tif (om.m_recyclingCount <= 0)\r\n\t\t\t\t\t\tRecycle(om);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//\r\n\t\t\t// read from socket\r\n\t\t\t//\r\n\t\t\tif (m_socket == null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (!m_socket.Poll(1000, SelectMode.SelectRead)) // wait up to 1 ms for data to arrive\r\n\t\t\t\treturn;\r\n\r\n\t\t\t//if (m_socket == null || m_socket.Available < 1)\r\n\t\t\t//\treturn;\r\n\r\n\t\t\t// update now\r\n\t\t\tdnow = NetTime.Now;\r\n\t\t\tnow = (float)dnow;\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tint bytesReceived = 0;\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tbytesReceived = m_socket.ReceiveFrom(m_receiveBuffer, 0, m_receiveBuffer.Length, SocketFlags.None, ref m_senderRemote);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (SocketException sx)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (sx.SocketErrorCode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase SocketError.ConnectionReset:\r\n\t\t\t\t\t\t\t// connection reset by peer, aka connection forcibly closed aka \"ICMP port unreachable\" \r\n\t\t\t\t\t\t\t// we should shut down the connection; but m_senderRemote seemingly cannot be trusted, so which connection should we shut down?!\r\n\t\t\t\t\t\t\t// So, what to do?\r\n\t\t\t\t\t\t\tLogWarning(\"ConnectionReset\");\r\n\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t\tcase SocketError.NotConnected:\r\n\t\t\t\t\t\t\t// socket is unbound; try to rebind it (happens on mobile when process goes to sleep)\r\n\t\t\t\t\t\t\tBindSocket(true);\r\n\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tLogWarning(\"Socket exception: \" + sx.ToString());\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (bytesReceived < NetConstants.HeaderByteSize)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t//LogVerbose(\"Received \" + bytesReceived + \" bytes\");\r\n\r\n\t\t\t\tIPEndPoint ipsender = (IPEndPoint)m_senderRemote;\r\n\r\n\t\t\t\tif (m_upnp != null && now < m_upnp.m_discoveryResponseDeadline && bytesReceived > 32)\r\n\t\t\t\t{\r\n\t\t\t\t\t// is this an UPnP response?\r\n\t\t\t\t\tstring resp = System.Text.Encoding.ASCII.GetString(m_receiveBuffer, 0, bytesReceived);\r\n\t\t\t\t\tif (resp.Contains(\"upnp:rootdevice\") || resp.Contains(\"UPnP/1.0\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tresp = resp.Substring(resp.ToLower().IndexOf(\"location:\") + 9);\r\n\t\t\t\t\t\t\tresp = resp.Substring(0, resp.IndexOf(\"\\r\")).Trim();\r\n\t\t\t\t\t\t\tm_upnp.ExtractServiceUrl(resp);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (Exception ex)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLogDebug(\"Failed to parse UPnP response: \" + ex.ToString());\r\n\r\n\t\t\t\t\t\t\t// don't try to parse this packet further\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tNetConnection sender = null;\r\n\t\t\t\tm_connectionLookup.TryGetValue(ipsender, out sender);\r\n\r\n\t\t\t\t//\r\n\t\t\t\t// parse packet into messages\r\n\t\t\t\t//\r\n\t\t\t\tint numMessages = 0;\r\n\t\t\t\tint numFragments = 0;\r\n\t\t\t\tint ptr = 0;\r\n\t\t\t\twhile ((bytesReceived - ptr) >= NetConstants.HeaderByteSize)\r\n\t\t\t\t{\r\n\t\t\t\t\t// decode header\r\n\t\t\t\t\t//  8 bits - NetMessageType\r\n\t\t\t\t\t//  1 bit  - Fragment?\r\n\t\t\t\t\t// 15 bits - Sequence number\r\n\t\t\t\t\t// 16 bits - Payload length in bits\r\n\r\n\t\t\t\t\tnumMessages++;\r\n\r\n\t\t\t\t\tNetMessageType tp = (NetMessageType)m_receiveBuffer[ptr++];\r\n\r\n\t\t\t\t\tbyte low = m_receiveBuffer[ptr++];\r\n\t\t\t\t\tbyte high = m_receiveBuffer[ptr++];\r\n\r\n\t\t\t\t\tbool isFragment = ((low & 1) == 1);\r\n\t\t\t\t\tushort sequenceNumber = (ushort)((low >> 1) | (((int)high) << 7));\r\n\r\n\t\t\t\t\tnumFragments++;\r\n\r\n\t\t\t\t\tushort payloadBitLength = (ushort)(m_receiveBuffer[ptr++] | (m_receiveBuffer[ptr++] << 8));\r\n\t\t\t\t\tint payloadByteLength = NetUtility.BytesToHoldBits(payloadBitLength);\r\n\r\n\t\t\t\t\tif (bytesReceived - ptr < payloadByteLength)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLogWarning(\"Malformed packet; stated payload length \" + payloadByteLength + \", remaining bytes \" + (bytesReceived - ptr));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (tp >= NetMessageType.Unused1 && tp <= NetMessageType.Unused29)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tThrowOrLog(\"Unexpected NetMessageType: \" + tp);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (tp >= NetMessageType.LibraryError)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (sender != null)\r\n\t\t\t\t\t\t\t\tsender.ReceivedLibraryMessage(tp, ptr, payloadByteLength);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tReceivedUnconnectedLibraryMessage(dnow, ipsender, tp, ptr, payloadByteLength);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (sender == null && !m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.UnconnectedData))\r\n\t\t\t\t\t\t\t\treturn; // dropping unconnected message since it's not enabled\r\n\r\n\t\t\t\t\t\t\tNetIncomingMessage msg = CreateIncomingMessage(NetIncomingMessageType.Data, payloadByteLength);\r\n\t\t\t\t\t\t\tmsg.m_isFragment = isFragment;\r\n\t\t\t\t\t\t\tmsg.m_receiveTime = dnow;\r\n\t\t\t\t\t\t\tmsg.m_sequenceNumber = sequenceNumber;\r\n\t\t\t\t\t\t\tmsg.m_receivedMessageType = tp;\r\n\t\t\t\t\t\t\tmsg.m_senderConnection = sender;\r\n\t\t\t\t\t\t\tmsg.m_senderEndPoint = ipsender;\r\n\t\t\t\t\t\t\tmsg.m_bitLength = payloadBitLength;\r\n\r\n\t\t\t\t\t\t\tBuffer.BlockCopy(m_receiveBuffer, ptr, msg.m_data, 0, payloadByteLength);\r\n\t\t\t\t\t\t\tif (sender != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (tp == NetMessageType.Unconnected)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t// We're connected; but we can still send unconnected messages to this peer\r\n\t\t\t\t\t\t\t\t\tmsg.m_incomingMessageType = NetIncomingMessageType.UnconnectedData;\r\n\t\t\t\t\t\t\t\t\tReleaseMessage(msg);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t// connected application (non-library) message\r\n\t\t\t\t\t\t\t\t\tsender.ReceivedMessage(msg);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// at this point we know the message type is enabled\r\n\t\t\t\t\t\t\t\t// unconnected application (non-library) message\r\n\t\t\t\t\t\t\t\tmsg.m_incomingMessageType = NetIncomingMessageType.UnconnectedData;\r\n\t\t\t\t\t\t\t\tReleaseMessage(msg);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (Exception ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLogError(\"Packet parsing error: \" + ex.Message + \" from \" + ipsender);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tptr += payloadByteLength;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tm_statistics.PacketReceived(bytesReceived, numMessages, numFragments);\r\n\t\t\t\tif (sender != null)\r\n\t\t\t\t\tsender.m_statistics.PacketReceived(bytesReceived, numMessages, numFragments);\r\n\r\n\t\t\t} while (m_socket.Available > 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// If NetPeerConfiguration.AutoFlushSendQueue() is false; you need to call this to send all messages queued using SendMessage()\r\n\t\t/// </summary>\r\n\t\tpublic void FlushSendQueue()\r\n\t\t{\r\n\t\t\tm_executeFlushSendQueue = true;\r\n\t\t}\r\n\r\n\t\tinternal void HandleIncomingDiscoveryRequest(double now, IPEndPoint senderEndPoint, int ptr, int payloadByteLength)\r\n\t\t{\r\n\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.DiscoveryRequest))\r\n\t\t\t{\r\n\t\t\t\tNetIncomingMessage dm = CreateIncomingMessage(NetIncomingMessageType.DiscoveryRequest, payloadByteLength);\r\n\t\t\t\tif (payloadByteLength > 0)\r\n\t\t\t\t\tBuffer.BlockCopy(m_receiveBuffer, ptr, dm.m_data, 0, payloadByteLength);\r\n\t\t\t\tdm.m_receiveTime = now;\r\n\t\t\t\tdm.m_bitLength = payloadByteLength * 8;\r\n\t\t\t\tdm.m_senderEndPoint = senderEndPoint;\r\n\t\t\t\tReleaseMessage(dm);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void HandleIncomingDiscoveryResponse(double now, IPEndPoint senderEndPoint, int ptr, int payloadByteLength)\r\n\t\t{\r\n\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.DiscoveryResponse))\r\n\t\t\t{\r\n\t\t\t\tNetIncomingMessage dr = CreateIncomingMessage(NetIncomingMessageType.DiscoveryResponse, payloadByteLength);\r\n\t\t\t\tif (payloadByteLength > 0)\r\n\t\t\t\t\tBuffer.BlockCopy(m_receiveBuffer, ptr, dr.m_data, 0, payloadByteLength);\r\n\t\t\t\tdr.m_receiveTime = now;\r\n\t\t\t\tdr.m_bitLength = payloadByteLength * 8;\r\n\t\t\t\tdr.m_senderEndPoint = senderEndPoint;\r\n\t\t\t\tReleaseMessage(dr);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ReceivedUnconnectedLibraryMessage(double now, IPEndPoint senderEndPoint, NetMessageType tp, int ptr, int payloadByteLength)\r\n\t\t{\r\n\t\t\tNetConnection shake;\r\n\t\t\tif (m_handshakes.TryGetValue(senderEndPoint, out shake))\r\n\t\t\t{\r\n\t\t\t\tshake.ReceivedHandshake(now, tp, ptr, payloadByteLength);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//\r\n\t\t\t// Library message from a completely unknown sender; lets just accept Connect\r\n\t\t\t//\r\n\t\t\tswitch (tp)\r\n\t\t\t{\r\n\t\t\t\tcase NetMessageType.Discovery:\r\n\t\t\t\t\tHandleIncomingDiscoveryRequest(now, senderEndPoint, ptr, payloadByteLength);\r\n\t\t\t\t\treturn;\r\n\t\t\t\tcase NetMessageType.DiscoveryResponse:\r\n\t\t\t\t\tHandleIncomingDiscoveryResponse(now, senderEndPoint, ptr, payloadByteLength);\r\n\t\t\t\t\treturn;\r\n\t\t\t\tcase NetMessageType.NatIntroduction:\r\n\t\t\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.NatIntroductionSuccess))\r\n\t\t\t\t\t\tHandleNatIntroduction(ptr);\r\n\t\t\t\t\treturn;\r\n\t\t\t\tcase NetMessageType.NatPunchMessage:\r\n\t\t\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.NatIntroductionSuccess))\r\n\t\t\t\t\t\tHandleNatPunch(ptr, senderEndPoint);\r\n\t\t\t\t\treturn;\r\n\t\t\t\tcase NetMessageType.ConnectResponse:\r\n\r\n\t\t\t\t\tlock (m_handshakes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tforeach (var hs in m_handshakes)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (hs.Key.Address.Equals(senderEndPoint.Address))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (hs.Value.m_connectionInitiator)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t//\r\n\t\t\t\t\t\t\t\t\t// We are currently trying to connection to XX.XX.XX.XX:Y\r\n\t\t\t\t\t\t\t\t\t// ... but we just received a ConnectResponse from XX.XX.XX.XX:Z\r\n\t\t\t\t\t\t\t\t\t// Lets just assume the router decided to use this port instead\r\n\t\t\t\t\t\t\t\t\t//\r\n\t\t\t\t\t\t\t\t\tvar hsconn = hs.Value;\r\n\t\t\t\t\t\t\t\t\tm_connectionLookup.Remove(hs.Key);\r\n\t\t\t\t\t\t\t\t\tm_handshakes.Remove(hs.Key);\r\n\r\n\t\t\t\t\t\t\t\t\tLogDebug(\"Detected host port change; rerouting connection to \" + senderEndPoint);\r\n\t\t\t\t\t\t\t\t\thsconn.MutateEndPoint(senderEndPoint);\r\n\r\n\t\t\t\t\t\t\t\t\tm_connectionLookup.Add(senderEndPoint, hsconn);\r\n\t\t\t\t\t\t\t\t\tm_handshakes.Add(senderEndPoint, hsconn);\r\n\r\n\t\t\t\t\t\t\t\t\thsconn.ReceivedHandshake(now, tp, ptr, payloadByteLength);\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tLogWarning(\"Received unhandled library message \" + tp + \" from \" + senderEndPoint);\r\n\t\t\t\t\treturn;\r\n\t\t\t\tcase NetMessageType.Connect:\r\n\t\t\t\t\tif (m_configuration.AcceptIncomingConnections == false)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLogWarning(\"Received Connect, but we're not accepting incoming connections!\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// handle connect\r\n\t\t\t\t\t// It's someone wanting to shake hands with us!\r\n\r\n\t\t\t\t\tint reservedSlots = m_handshakes.Count + m_connections.Count;\r\n\t\t\t\t\tif (reservedSlots >= m_configuration.m_maximumConnections)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// server full\r\n\t\t\t\t\t\tNetOutgoingMessage full = CreateMessage(\"Server full\");\r\n\t\t\t\t\t\tfull.m_messageType = NetMessageType.Disconnect;\r\n\t\t\t\t\t\tSendLibrary(full, senderEndPoint);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Ok, start handshake!\r\n\t\t\t\t\tNetConnection conn = new NetConnection(this, senderEndPoint);\r\n\t\t\t\t\tconn.m_status = NetConnectionStatus.ReceivedInitiation;\r\n\t\t\t\t\tm_handshakes.Add(senderEndPoint, conn);\r\n\t\t\t\t\tconn.ReceivedHandshake(now, tp, ptr, payloadByteLength);\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase NetMessageType.Disconnect:\r\n\t\t\t\t\t// this is probably ok\r\n\t\t\t\t\tLogVerbose(\"Received Disconnect from unconnected source: \" + senderEndPoint);\r\n\t\t\t\t\treturn;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tLogWarning(\"Received unhandled library message \" + tp + \" from \" + senderEndPoint);\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void AcceptConnection(NetConnection conn)\r\n\t\t{\r\n\t\t\t// LogDebug(\"Accepted connection \" + conn);\r\n\t\t\tconn.InitExpandMTU(NetTime.Now);\r\n\r\n\t\t\tif (m_handshakes.Remove(conn.m_remoteEndPoint) == false)\r\n\t\t\t\tLogWarning(\"AcceptConnection called but m_handshakes did not contain it!\");\r\n\r\n\t\t\tlock (m_connections)\r\n\t\t\t{\r\n\t\t\t\tif (m_connections.Contains(conn))\r\n\t\t\t\t{\r\n\t\t\t\t\tLogWarning(\"AcceptConnection called but m_connection already contains it!\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tm_connections.Add(conn);\r\n\t\t\t\t\tm_connectionLookup.Add(conn.m_remoteEndPoint, conn);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void VerifyNetworkThread()\r\n\t\t{\r\n\t\t\tThread ct = Thread.CurrentThread;\r\n\t\t\tif (Thread.CurrentThread != m_networkThread)\r\n\t\t\t\tthrow new NetException(\"Executing on wrong thread! Should be library system thread (is \" + ct.Name + \" mId \" + ct.ManagedThreadId + \")\");\r\n\t\t}\r\n\r\n\t\tinternal NetIncomingMessage SetupReadHelperMessage(int ptr, int payloadLength)\r\n\t\t{\r\n\t\t\tVerifyNetworkThread();\r\n\r\n\t\t\tm_readHelperMessage.m_bitLength = (ptr + payloadLength) * 8;\r\n\t\t\tm_readHelperMessage.m_readPosition = (ptr * 8);\r\n\t\t\treturn m_readHelperMessage;\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeer.LatencySimulation.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\n//#define USE_RELEASE_STATISTICS\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Net;\r\nusing System.Net.Sockets;\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetPeer\r\n\t{\r\n\r\n#if DEBUG\r\n\t\tprivate readonly List<DelayedPacket> m_delayedPackets = new List<DelayedPacket>();\r\n\r\n\t\tprivate class DelayedPacket\r\n\t\t{\r\n\t\t\tpublic byte[] Data;\r\n\t\t\tpublic double DelayedUntil;\r\n\t\t\tpublic IPEndPoint Target;\r\n\t\t}\r\n\r\n\t\tinternal void SendPacket(int numBytes, IPEndPoint target, int numMessages, out bool connectionReset)\r\n\t\t{\r\n\t\t\tconnectionReset = false;\r\n\r\n\t\t\t// simulate loss\r\n\t\t\tfloat loss = m_configuration.m_loss;\r\n\t\t\tif (loss > 0.0f)\r\n\t\t\t{\r\n\t\t\t\tif ((float)MWCRandom.Instance.NextDouble() < loss)\r\n\t\t\t\t{\r\n\t\t\t\t\tLogVerbose(\"Sending packet \" + numBytes + \" bytes - SIMULATED LOST!\");\r\n\t\t\t\t\treturn; // packet \"lost\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tm_statistics.PacketSent(numBytes, numMessages);\r\n\r\n\t\t\t// simulate latency\r\n\t\t\tfloat m = m_configuration.m_minimumOneWayLatency;\r\n\t\t\tfloat r = m_configuration.m_randomOneWayLatency;\r\n\t\t\tif (m == 0.0f && r == 0.0f)\r\n\t\t\t{\r\n\t\t\t\t// no latency simulation\r\n\t\t\t\t// LogVerbose(\"Sending packet \" + numBytes + \" bytes\");\r\n\t\t\t\tbool wasSent = ActuallySendPacket(m_sendBuffer, numBytes, target, out connectionReset);\r\n\t\t\t\t// TODO: handle wasSent == false?\r\n\r\n\t\t\t\tif (m_configuration.m_duplicates > 0.0f && MWCRandom.Instance.NextDouble() < m_configuration.m_duplicates)\r\n\t\t\t\t\tActuallySendPacket(m_sendBuffer, numBytes, target, out connectionReset); // send it again!\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tint num = 1;\r\n\t\t\tif (m_configuration.m_duplicates > 0.0f && MWCRandom.Instance.NextSingle() < m_configuration.m_duplicates)\r\n\t\t\t\tnum++;\r\n\r\n\t\t\tfloat delay = 0;\r\n\t\t\tfor (int i = 0; i < num; i++)\r\n\t\t\t{\r\n\t\t\t\tdelay = m_configuration.m_minimumOneWayLatency + (MWCRandom.Instance.NextSingle() * m_configuration.m_randomOneWayLatency);\r\n\r\n\t\t\t\t// Enqueue delayed packet\r\n\t\t\t\tDelayedPacket p = new DelayedPacket();\r\n\t\t\t\tp.Target = target;\r\n\t\t\t\tp.Data = new byte[numBytes];\r\n\t\t\t\tBuffer.BlockCopy(m_sendBuffer, 0, p.Data, 0, numBytes);\r\n\t\t\t\tp.DelayedUntil = NetTime.Now + delay;\r\n\r\n\t\t\t\tm_delayedPackets.Add(p);\r\n\t\t\t}\r\n\r\n\t\t\t// LogVerbose(\"Sending packet \" + numBytes + \" bytes - delayed \" + NetTime.ToReadable(delay));\r\n\t\t}\r\n\r\n\t\tprivate void SendDelayedPackets()\r\n\t\t{\r\n\t\t\tif (m_delayedPackets.Count <= 0)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tdouble now = NetTime.Now;\r\n\r\n\t\t\tbool connectionReset;\r\n\r\n\t\tRestartDelaySending:\r\n\t\t\tforeach (DelayedPacket p in m_delayedPackets)\r\n\t\t\t{\r\n\t\t\t\tif (now > p.DelayedUntil)\r\n\t\t\t\t{\r\n\t\t\t\t\tActuallySendPacket(p.Data, p.Data.Length, p.Target, out connectionReset);\r\n\t\t\t\t\tm_delayedPackets.Remove(p);\r\n\t\t\t\t\tgoto RestartDelaySending;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void FlushDelayedPackets()\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tbool connectionReset;\r\n\t\t\t\tforeach (DelayedPacket p in m_delayedPackets)\r\n\t\t\t\t\tActuallySendPacket(p.Data, p.Data.Length, p.Target, out connectionReset);\r\n\t\t\t\tm_delayedPackets.Clear();\r\n\t\t\t}\r\n\t\t\tcatch { }\r\n\t\t}\r\n\r\n\t\tinternal bool ActuallySendPacket(byte[] data, int numBytes, IPEndPoint target, out bool connectionReset)\r\n\t\t{\r\n\t\t\tconnectionReset = false;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// TODO: refactor this check outta here\r\n\t\t\t\tif (target.Address == IPAddress.Broadcast)\r\n\t\t\t\t{\r\n\t\t\t\t\t// Some networks do not allow \r\n\t\t\t\t\t// a global broadcast so we use the BroadcastAddress from the configuration\r\n\t\t\t\t\t// this can be resolved to a local broadcast addresss e.g 192.168.x.255                    \r\n\t\t\t\t\ttarget.Address = m_configuration.BroadcastAddress;\r\n\t\t\t\t\tm_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tint bytesSent = m_socket.SendTo(data, 0, numBytes, SocketFlags.None, target);\r\n\t\t\t\tif (numBytes != bytesSent)\r\n\t\t\t\t\tLogWarning(\"Failed to send the full \" + numBytes + \"; only \" + bytesSent + \" bytes sent in packet!\");\r\n\r\n\t\t\t\t// LogDebug(\"Sent \" + numBytes + \" bytes\");\r\n\t\t\t}\r\n\t\t\tcatch (SocketException sx)\r\n\t\t\t{\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.WouldBlock)\r\n\t\t\t\t{\r\n\t\t\t\t\t// send buffer full?\r\n\t\t\t\t\tLogWarning(\"Socket threw exception; would block - send buffer full? Increase in NetPeerConfiguration\");\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.ConnectionReset)\r\n\t\t\t\t{\r\n\t\t\t\t\t// connection reset by peer, aka connection forcibly closed aka \"ICMP port unreachable\" \r\n\t\t\t\t\tconnectionReset = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tLogError(\"Failed to send packet: \" + sx);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tLogError(\"Failed to send packet: \" + ex);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tif (target.Address == IPAddress.Broadcast)\r\n\t\t\t\t\tm_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tinternal bool SendMTUPacket(int numBytes, IPEndPoint target)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tm_socket.DontFragment = true;\r\n\t\t\t\tint bytesSent = m_socket.SendTo(m_sendBuffer, 0, numBytes, SocketFlags.None, target);\r\n\t\t\t\tif (numBytes != bytesSent)\r\n\t\t\t\t\tLogWarning(\"Failed to send the full \" + numBytes + \"; only \" + bytesSent + \" bytes sent in packet!\");\r\n\r\n\t\t\t\tm_statistics.PacketSent(numBytes, 1);\r\n\t\t\t}\r\n\t\t\tcatch (SocketException sx)\r\n\t\t\t{\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.MessageSize)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.WouldBlock)\r\n\t\t\t\t{\r\n\t\t\t\t\t// send buffer full?\r\n\t\t\t\t\tLogWarning(\"Socket threw exception; would block - send buffer full? Increase in NetPeerConfiguration\");\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.ConnectionReset)\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tLogError(\"Failed to send packet: (\" + sx.SocketErrorCode + \") \" + sx);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tLogError(\"Failed to send packet: \" + ex);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_socket.DontFragment = false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n#else\r\n\t\tinternal bool SendMTUPacket(int numBytes, IPEndPoint target)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tm_socket.DontFragment = true;\r\n\t\t\t\tint bytesSent = m_socket.SendTo(m_sendBuffer, 0, numBytes, SocketFlags.None, target);\r\n\t\t\t\tif (numBytes != bytesSent)\r\n\t\t\t\t\tLogWarning(\"Failed to send the full \" + numBytes + \"; only \" + bytesSent + \" bytes sent in packet!\");\r\n\t\t\t}\r\n\t\t\tcatch (SocketException sx)\r\n\t\t\t{\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.MessageSize)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.WouldBlock)\r\n\t\t\t\t{\r\n\t\t\t\t\t// send buffer full?\r\n\t\t\t\t\tLogWarning(\"Socket threw exception; would block - send buffer full? Increase in NetPeerConfiguration\");\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.ConnectionReset)\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tLogError(\"Failed to send packet: (\" + sx.SocketErrorCode + \") \" + sx);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tLogError(\"Failed to send packet: \" + ex);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_socket.DontFragment = false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t//\r\n\t\t// Release - just send the packet straight away\r\n\t\t//\r\n\t\tinternal void SendPacket(int numBytes, IPEndPoint target, int numMessages, out bool connectionReset)\r\n\t\t{\r\n#if USE_RELEASE_STATISTICS\r\n\t\t\tm_statistics.PacketSent(numBytes, numMessages);\r\n#endif\r\n\t\t\tconnectionReset = false;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// TODO: refactor this check outta here\r\n\t\t\t\tif (target.Address == IPAddress.Broadcast)\r\n\t\t\t\t\tm_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);\r\n\r\n\t\t\t\tint bytesSent = m_socket.SendTo(m_sendBuffer, 0, numBytes, SocketFlags.None, target);\r\n\t\t\t\tif (numBytes != bytesSent)\r\n\t\t\t\t\tLogWarning(\"Failed to send the full \" + numBytes + \"; only \" + bytesSent + \" bytes sent in packet!\");\r\n\t\t\t}\r\n\t\t\tcatch (SocketException sx)\r\n\t\t\t{\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.WouldBlock)\r\n\t\t\t\t{\r\n\t\t\t\t\t// send buffer full?\r\n\t\t\t\t\tLogWarning(\"Socket threw exception; would block - send buffer full? Increase in NetPeerConfiguration\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (sx.SocketErrorCode == SocketError.ConnectionReset)\r\n\t\t\t\t{\r\n\t\t\t\t\t// connection reset by peer, aka connection forcibly closed aka \"ICMP port unreachable\" \r\n\t\t\t\t\tconnectionReset = true;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tLogError(\"Failed to send packet: \" + sx);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tLogError(\"Failed to send packet: \" + ex);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tif (target.Address == IPAddress.Broadcast)\r\n\t\t\t\t\tm_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tprivate void FlushDelayedPackets()\r\n\t\t{\r\n\t\t}\r\n#endif\r\n\t}\r\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeer.Logging.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetPeer\r\n\t{\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void LogVerbose(string message)\r\n\t\t{\r\n#if __ANDROID__\r\n\t\t\tAndroid.Util.Log.WriteLine(Android.Util.LogPriority.Verbose, \"\", message);\r\n#endif\r\n\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.VerboseDebugMessage))\r\n\t\t\t\tReleaseMessage(CreateIncomingMessage(NetIncomingMessageType.VerboseDebugMessage, message));\r\n\t\t}\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void LogDebug(string message)\r\n\t\t{\r\n#if __ANDROID__\r\n\t\t\tAndroid.Util.Log.WriteLine(Android.Util.LogPriority.Debug, \"\", message);\r\n#endif\r\n\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.DebugMessage))\r\n\t\t\t\tReleaseMessage(CreateIncomingMessage(NetIncomingMessageType.DebugMessage, message));\r\n\t\t}\r\n\r\n\t\tinternal void LogWarning(string message)\r\n\t\t{\r\n#if __ANDROID__\r\n\t\t\tAndroid.Util.Log.WriteLine(Android.Util.LogPriority.Warn, \"\", message);\r\n#endif\r\n\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.WarningMessage))\r\n\t\t\t\tReleaseMessage(CreateIncomingMessage(NetIncomingMessageType.WarningMessage, message));\r\n\t\t}\r\n\r\n\t\tinternal void LogError(string message)\r\n\t\t{\r\n#if __ANDROID__\r\n\t\t\tAndroid.Util.Log.WriteLine(Android.Util.LogPriority.Error, \"\", message);\r\n#endif\r\n\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.ErrorMessage))\r\n\t\t\t\tReleaseMessage(CreateIncomingMessage(NetIncomingMessageType.ErrorMessage, message));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeer.MessagePools.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetPeer\r\n\t{\r\n\t\tprivate List<byte[]> m_storagePool; // sorted smallest to largest\r\n\t\tprivate NetQueue<NetOutgoingMessage> m_outgoingMessagesPool;\r\n\t\tprivate NetQueue<NetIncomingMessage> m_incomingMessagesPool;\r\n\r\n\t\tinternal int m_storagePoolBytes;\r\n\r\n\t\tprivate void InitializePools()\r\n\t\t{\r\n\t\t\tif (m_configuration.UseMessageRecycling)\r\n\t\t\t{\r\n\t\t\t\tm_storagePool = new List<byte[]>(16);\r\n\t\t\t\tm_outgoingMessagesPool = new NetQueue<NetOutgoingMessage>(4);\r\n\t\t\t\tm_incomingMessagesPool = new NetQueue<NetIncomingMessage>(4);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tm_storagePool = null;\r\n\t\t\t\tm_outgoingMessagesPool = null;\r\n\t\t\t\tm_incomingMessagesPool = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal byte[] GetStorage(int minimumCapacityInBytes)\r\n\t\t{\r\n\t\t\tif (m_storagePool == null)\r\n\t\t\t\treturn new byte[minimumCapacityInBytes];\r\n\r\n\t\t\tlock (m_storagePool)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < m_storagePool.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tbyte[] retval = m_storagePool[i];\r\n\t\t\t\t\tif (retval != null && retval.Length >= minimumCapacityInBytes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tm_storagePool[i] = null;\r\n\t\t\t\t\t\tm_storagePoolBytes -= retval.Length;\r\n\t\t\t\t\t\treturn retval;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tm_statistics.m_bytesAllocated += minimumCapacityInBytes;\r\n\t\t\treturn new byte[minimumCapacityInBytes];\r\n\t\t}\r\n\r\n\t\tinternal void Recycle(byte[] storage)\r\n\t\t{\r\n\t\t\tif (m_storagePool == null || storage == null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tlock (m_storagePool)\r\n\t\t\t{\r\n\t\t\t\tm_storagePoolBytes += storage.Length;\r\n\t\t\t\tint cnt = m_storagePool.Count;\r\n\t\t\t\tfor (int i = 0; i < cnt; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (m_storagePool[i] == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tm_storagePool[i] = storage;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tm_storagePool.Add(storage);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new message for sending\r\n\t\t/// </summary>\r\n\t\tpublic NetOutgoingMessage CreateMessage()\r\n\t\t{\r\n\t\t\treturn CreateMessage(m_configuration.m_defaultOutgoingMessageCapacity);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new message for sending and writes the provided string to it\r\n\t\t/// </summary>\r\n\t\tpublic NetOutgoingMessage CreateMessage(string content)\r\n\t\t{\r\n\t\t\tvar om = CreateMessage(2 + content.Length); // fair guess\r\n\t\t\tom.Write(content);\r\n\t\t\treturn om;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new message for sending\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"initialCapacity\">initial capacity in bytes</param>\r\n\t\tpublic NetOutgoingMessage CreateMessage(int initialCapacity)\r\n\t\t{\r\n\t\t\tNetOutgoingMessage retval;\r\n\t\t\tif (m_outgoingMessagesPool == null || !m_outgoingMessagesPool.TryDequeue(out retval))\r\n\t\t\t\tretval = new NetOutgoingMessage();\r\n\r\n\t\t\tif (initialCapacity > 0)\r\n\t\t\t\tretval.m_data = GetStorage(initialCapacity);\r\n\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\tinternal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, byte[] useStorageData)\r\n\t\t{\r\n\t\t\tNetIncomingMessage retval;\r\n\t\t\tif (m_incomingMessagesPool == null || !m_incomingMessagesPool.TryDequeue(out retval))\r\n\t\t\t\tretval = new NetIncomingMessage(tp);\r\n\t\t\telse\r\n\t\t\t\tretval.m_incomingMessageType = tp;\r\n\t\t\tretval.m_data = useStorageData;\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\tinternal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, int minimumByteSize)\r\n\t\t{\r\n\t\t\tNetIncomingMessage retval;\r\n\t\t\tif (m_incomingMessagesPool == null || !m_incomingMessagesPool.TryDequeue(out retval))\r\n\t\t\t\tretval = new NetIncomingMessage(tp);\r\n\t\t\telse\r\n\t\t\t\tretval.m_incomingMessageType = tp;\r\n\t\t\tretval.m_data = GetStorage(minimumByteSize);\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Recycles a NetIncomingMessage instance for reuse; taking pressure off the garbage collector\r\n\t\t/// </summary>\r\n\t\tpublic void Recycle(NetIncomingMessage msg)\r\n\t\t{\r\n\t\t\tif (m_incomingMessagesPool == null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tNetException.Assert(m_incomingMessagesPool.Contains(msg) == false, \"Recyling already recycled message! Thread race?\");\r\n\r\n\t\t\tbyte[] storage = msg.m_data;\r\n\t\t\tmsg.m_data = null;\r\n\t\t\tRecycle(storage);\r\n\t\t\tmsg.Reset();\r\n\t\t\tm_incomingMessagesPool.Enqueue(msg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Recycles a list of NetIncomingMessage instances for reuse; taking pressure off the garbage collector\r\n\t\t/// </summary>\r\n\t\tpublic void Recycle(IEnumerable<NetIncomingMessage> toRecycle)\r\n\t\t{\r\n\t\t\tif (m_incomingMessagesPool == null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\t// first recycle the storage of each message\r\n\t\t\tif (m_storagePool != null)\r\n\t\t\t{\r\n\t\t\t\tlock (m_storagePool)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (var msg in toRecycle)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar storage = msg.m_data;\r\n\t\t\t\t\t\tmsg.m_data = null;\r\n\t\t\t\t\t\tm_storagePoolBytes += storage.Length;\r\n\t\t\t\t\t\tint cnt = m_storagePool.Count;\r\n\t\t\t\t\t\tfor (int i = 0; i < cnt; i++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (m_storagePool[i] == null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tm_storagePool[i] = storage;\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmsg.Reset();\r\n\t\t\t\t\t\tm_storagePool.Add(storage);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// then recycle the message objects\r\n\t\t\tm_incomingMessagesPool.Enqueue(toRecycle);\r\n\t\t}\r\n\r\n\t\tinternal void Recycle(NetOutgoingMessage msg)\r\n\t\t{\r\n\t\t\tif (m_outgoingMessagesPool == null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tNetException.Assert(m_outgoingMessagesPool.Contains(msg) == false, \"Recyling already recycled message! Thread race?\");\r\n\t\t\t\r\n\t\t\tbyte[] storage = msg.m_data;\r\n\t\t\tmsg.m_data = null;\r\n\t\t\t\r\n\t\t\t// message fragments cannot be recycled\r\n\t\t\t// TODO: find a way to recycle large message after all fragments has been acknowledged; or? possibly better just to garbage collect them\r\n\t\t\tif (msg.m_fragmentGroup == 0)\r\n\t\t\t\tRecycle(storage);\r\n\t\r\n\t\t\tmsg.Reset();\r\n\t\t\tm_outgoingMessagesPool.Enqueue(msg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an incoming message with the required capacity for releasing to the application\r\n\t\t/// </summary>\r\n\t\tinternal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, string text)\r\n\t\t{\r\n\t\t\tNetIncomingMessage retval;\r\n\t\t\tif (string.IsNullOrEmpty(text))\r\n\t\t\t{\r\n\t\t\t\tretval = CreateIncomingMessage(tp, 1);\r\n\t\t\t\tretval.Write(string.Empty);\r\n\t\t\t\treturn retval;\r\n\t\t\t}\r\n\r\n\t\t\tint numBytes = System.Text.Encoding.UTF8.GetByteCount(text);\r\n\t\t\tretval = CreateIncomingMessage(tp, numBytes + (numBytes > 127 ? 2 : 1));\r\n\t\t\tretval.Write(text);\r\n\r\n\t\t\treturn retval;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeer.Send.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading;\r\nusing System.Net;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tpublic partial class NetPeer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Send a message to a specific connection\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"msg\">The message to send</param>\r\n\t\t/// <param name=\"recipient\">The recipient connection</param>\r\n\t\t/// <param name=\"method\">How to deliver the message</param>\r\n\t\tpublic NetSendResult SendMessage(NetOutgoingMessage msg, NetConnection recipient, NetDeliveryMethod method)\r\n\t\t{\r\n\t\t\treturn SendMessage(msg, recipient, method, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to a specific connection\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"msg\">The message to send</param>\r\n\t\t/// <param name=\"recipient\">The recipient connection</param>\r\n\t\t/// <param name=\"method\">How to deliver the message</param>\r\n\t\t/// <param name=\"sequenceChannel\">Sequence channel within the delivery method</param>\r\n\t\tpublic NetSendResult SendMessage(NetOutgoingMessage msg, NetConnection recipient, NetDeliveryMethod method, int sequenceChannel)\r\n\t\t{\r\n\t\t\tif (msg == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"msg\");\r\n\t\t\tif (recipient == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"recipient\");\r\n\t\t\tif (sequenceChannel >= NetConstants.NetChannelsPerDeliveryMethod)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"sequenceChannel\");\r\n\r\n\t\t\tNetException.Assert(\r\n\t\t\t\t((method != NetDeliveryMethod.Unreliable && method != NetDeliveryMethod.ReliableUnordered) ||\r\n\t\t\t\t((method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.ReliableUnordered) && sequenceChannel == 0)),\r\n\t\t\t\t\"Delivery method \" + method + \" cannot use sequence channels other than 0!\"\r\n\t\t\t);\r\n\r\n\t\t\tNetException.Assert(method != NetDeliveryMethod.Unknown, \"Bad delivery method!\");\r\n\r\n\t\t\tif (msg.m_isSent)\r\n\t\t\t\tthrow new NetException(\"This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently\");\r\n\t\t\tmsg.m_isSent = true;\r\n\r\n\t\t\tbool suppressFragmentation = (method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.UnreliableSequenced) && m_configuration.UnreliableSizeBehaviour != NetUnreliableSizeBehaviour.NormalFragmentation;\r\n\r\n\t\t\tint len = NetConstants.UnfragmentedMessageHeaderSize + msg.LengthBytes; // headers + length, faster than calling msg.GetEncodedSize\r\n\t\t\tif (len <= recipient.m_currentMTU || suppressFragmentation)\r\n\t\t\t{\r\n\t\t\t\tInterlocked.Increment(ref msg.m_recyclingCount);\r\n\t\t\t\treturn recipient.EnqueueMessage(msg, method, sequenceChannel);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// message must be fragmented!\r\n\t\t\t\tif (recipient.m_status != NetConnectionStatus.Connected)\r\n\t\t\t\t\treturn NetSendResult.FailedNotConnected;\r\n\t\t\t\treturn SendFragmentedMessage(msg, new NetConnection[] { recipient }, method, sequenceChannel);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static int GetMTU(IList<NetConnection> recipients)\r\n\t\t{\r\n\t\t\tint count = recipients.Count;\r\n\r\n\t\t\tint mtu = int.MaxValue;\r\n\t\t\tif (count < 1)\r\n\t\t\t{\r\n#if DEBUG\r\n\t\t\t\tthrow new NetException(\"GetMTU called with no recipients\");\r\n#else\r\n\t\t\t\t// we don't have access to the particular peer, so just use default MTU\r\n\t\t\t\treturn NetPeerConfiguration.kDefaultMTU;\r\n#endif\r\n\t\t\t}\r\n\r\n\t\t\tfor(int i=0;i<count;i++)\r\n\t\t\t{\r\n\t\t\t\tvar conn = recipients[i];\r\n\t\t\t\tint cmtu = conn.m_currentMTU;\r\n\t\t\t\tif (cmtu < mtu)\r\n\t\t\t\t\tmtu = cmtu;\r\n\t\t\t}\r\n\t\t\treturn mtu;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to a list of connections\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"msg\">The message to send</param>\r\n\t\t/// <param name=\"recipients\">The list of recipients to send to</param>\r\n\t\t/// <param name=\"method\">How to deliver the message</param>\r\n\t\t/// <param name=\"sequenceChannel\">Sequence channel within the delivery method</param>\r\n\t\tpublic void SendMessage(NetOutgoingMessage msg, List<NetConnection> recipients, NetDeliveryMethod method, int sequenceChannel)\r\n\t\t{\r\n\t\t\tif (msg == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"msg\");\r\n\t\t\tif (recipients == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"recipients\");\r\n\t\t\tif (recipients.Count < 1)\r\n\t\t\t\tthrow new NetException(\"recipients must contain at least one item\");\r\n\t\t\tif (method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.ReliableUnordered)\r\n\t\t\t\tNetException.Assert(sequenceChannel == 0, \"Delivery method \" + method + \" cannot use sequence channels other than 0!\");\r\n\t\t\tif (msg.m_isSent)\r\n\t\t\t\tthrow new NetException(\"This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently\");\r\n\r\n\t\t\tint mtu = GetMTU(recipients);\r\n\r\n\t\t\tmsg.m_isSent = true;\r\n\r\n\t\t\tint len = msg.GetEncodedSize();\r\n\t\t\tif (len <= mtu)\r\n\t\t\t{\r\n\t\t\t\tInterlocked.Add(ref msg.m_recyclingCount, recipients.Count);\r\n\t\t\t\tforeach (NetConnection conn in recipients)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (conn == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tInterlocked.Decrement(ref msg.m_recyclingCount);\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tNetSendResult res = conn.EnqueueMessage(msg, method, sequenceChannel);\r\n\t\t\t\t\tif (res != NetSendResult.Queued && res != NetSendResult.Sent)\r\n\t\t\t\t\t\tInterlocked.Decrement(ref msg.m_recyclingCount);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// message must be fragmented!\r\n\t\t\t\tSendFragmentedMessage(msg, recipients, method, sequenceChannel);\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to an unconnected host\r\n\t\t/// </summary>\r\n\t\tpublic void SendUnconnectedMessage(NetOutgoingMessage msg, string host, int port)\r\n\t\t{\r\n\t\t\tif (msg == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"msg\");\r\n\t\t\tif (host == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"host\");\r\n\t\t\tif (msg.m_isSent)\r\n\t\t\t\tthrow new NetException(\"This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently\");\r\n\t\t\tif (msg.LengthBytes > m_configuration.MaximumTransmissionUnit)\r\n\t\t\t\tthrow new NetException(\"Unconnected messages too long! Must be shorter than NetConfiguration.MaximumTransmissionUnit (currently \" + m_configuration.MaximumTransmissionUnit + \")\");\r\n\r\n\t\t\tIPAddress adr = NetUtility.Resolve(host);\r\n\t\t\tif (adr == null)\r\n\t\t\t\tthrow new NetException(\"Failed to resolve \" + host);\r\n\r\n\t\t\tmsg.m_messageType = NetMessageType.Unconnected;\r\n\t\t\tmsg.m_isSent = true;\r\n\r\n\t\t\tInterlocked.Increment(ref msg.m_recyclingCount);\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(new IPEndPoint(adr, port), msg));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to an unconnected host\r\n\t\t/// </summary>\r\n\t\tpublic void SendUnconnectedMessage(NetOutgoingMessage msg, IPEndPoint recipient)\r\n\t\t{\r\n\t\t\tif (msg == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"msg\");\r\n\t\t\tif (recipient == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"recipient\");\r\n\t\t\tif (msg.m_isSent)\r\n\t\t\t\tthrow new NetException(\"This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently\");\r\n\t\t\tif (msg.LengthBytes > m_configuration.MaximumTransmissionUnit)\r\n\t\t\t\tthrow new NetException(\"Unconnected messages too long! Must be shorter than NetConfiguration.MaximumTransmissionUnit (currently \" + m_configuration.MaximumTransmissionUnit + \")\");\r\n\r\n\t\t\tmsg.m_messageType = NetMessageType.Unconnected;\r\n\t\t\tmsg.m_isSent = true;\r\n\r\n\t\t\tInterlocked.Increment(ref msg.m_recyclingCount);\r\n\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(recipient, msg));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to an unconnected host\r\n\t\t/// </summary>\r\n\t\tpublic void SendUnconnectedMessage(NetOutgoingMessage msg, IList<IPEndPoint> recipients)\r\n\t\t{\r\n\t\t\tif (msg == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"msg\");\r\n\t\t\tif (recipients == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"recipients\");\r\n\t\t\tif (recipients.Count < 1)\r\n\t\t\t\tthrow new NetException(\"recipients must contain at least one item\");\r\n\t\t\tif (msg.m_isSent)\r\n\t\t\t\tthrow new NetException(\"This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently\");\r\n\t\t\tif (msg.LengthBytes > m_configuration.MaximumTransmissionUnit)\r\n\t\t\t\tthrow new NetException(\"Unconnected messages too long! Must be shorter than NetConfiguration.MaximumTransmissionUnit (currently \" + m_configuration.MaximumTransmissionUnit + \")\");\r\n\r\n\t\t\tmsg.m_messageType = NetMessageType.Unconnected;\r\n\t\t\tmsg.m_isSent = true;\r\n\r\n\t\t\tInterlocked.Add(ref msg.m_recyclingCount, recipients.Count);\r\n\t\t\tforeach(IPEndPoint ep in recipients)\r\n\t\t\t\tm_unsentUnconnectedMessages.Enqueue(new NetTuple<IPEndPoint, NetOutgoingMessage>(ep, msg));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to this exact same netpeer (loopback)\r\n\t\t/// </summary>\r\n\t\tpublic void SendUnconnectedToSelf(NetOutgoingMessage msg)\r\n\t\t{\r\n\t\t\tif (msg == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"msg\");\r\n\t\t\tif (msg.m_isSent)\r\n\t\t\t\tthrow new NetException(\"This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently\");\r\n\r\n\t\t\tmsg.m_messageType = NetMessageType.Unconnected;\r\n\t\t\tmsg.m_isSent = true;\r\n\r\n\t\t\tif (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.UnconnectedData) == false)\r\n\t\t\t\treturn; // dropping unconnected message since it's not enabled for receiving\r\n\r\n\t\t\tNetIncomingMessage om = CreateIncomingMessage(NetIncomingMessageType.UnconnectedData, msg.LengthBytes);\r\n\t\t\tom.Write(msg);\r\n\t\t\tom.m_isFragment = false;\r\n\t\t\tom.m_receiveTime = NetTime.Now;\r\n\t\t\tom.m_senderConnection = null;\r\n\t\t\tom.m_senderEndPoint = m_socket.LocalEndPoint as IPEndPoint;\r\n\t\t\tNetException.Assert(om.m_bitLength == msg.LengthBits);\r\n\r\n\t\t\tReleaseMessage(om);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeer.cs",
    "content": "﻿using System;\r\nusing System.Threading;\r\nusing System.Collections.Generic;\r\nusing System.Net;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Represents a local peer capable of holding zero, one or more connections to remote peers\r\n\t/// </summary>\r\n\tpublic partial class NetPeer\r\n\t{\r\n\t\tprivate static int s_initializedPeersCount;\r\n\r\n\t\tprivate int m_listenPort;\r\n\t\tprivate object m_tag;\r\n\t\tprivate object m_messageReceivedEventCreationLock = new object();\r\n\r\n\t\tinternal readonly List<NetConnection> m_connections;\r\n\t\tprivate readonly Dictionary<IPEndPoint, NetConnection> m_connectionLookup;\r\n\r\n\t\tprivate string m_shutdownReason;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the NetPeerStatus of the NetPeer\r\n\t\t/// </summary>\r\n\t\tpublic NetPeerStatus Status { get { return m_status; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Signalling event which can be waited on to determine when a message is queued for reading.\r\n\t\t/// Note that there is no guarantee that after the event is signaled the blocked thread will \r\n\t\t/// find the message in the queue. Other user created threads could be preempted and dequeue \r\n\t\t/// the message before the waiting thread wakes up.\r\n\t\t/// </summary>\r\n\t\tpublic AutoResetEvent MessageReceivedEvent\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (m_messageReceivedEvent == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tlock (m_messageReceivedEventCreationLock) // make sure we don't create more than one event object\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (m_messageReceivedEvent == null)\r\n\t\t\t\t\t\t\tm_messageReceivedEvent = new AutoResetEvent(false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn m_messageReceivedEvent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a unique identifier for this NetPeer based on Mac address and ip/port. Note! Not available until Start() has been called!\r\n\t\t/// </summary>\r\n\t\tpublic long UniqueIdentifier { get { return m_uniqueIdentifier; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the port number this NetPeer is listening and sending on, if Start() has been called\r\n\t\t/// </summary>\r\n\t\tpublic int Port { get { return m_listenPort; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an UPnP object if enabled in the NetPeerConfiguration\r\n\t\t/// </summary>\r\n\t\tpublic NetUPnP UPnP { get { return m_upnp; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the application defined object containing data about the peer\r\n\t\t/// </summary>\r\n\t\tpublic object Tag\r\n\t\t{\r\n\t\t\tget { return m_tag; }\r\n\t\t\tset { m_tag = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a copy of the list of connections\r\n\t\t/// </summary>\r\n\t\tpublic List<NetConnection> Connections\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tlock (m_connections)\r\n\t\t\t\t\treturn new List<NetConnection>(m_connections);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of active connections\r\n\t\t/// </summary>\r\n\t\tpublic int ConnectionsCount\r\n\t\t{\r\n\t\t\tget { return m_connections.Count; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Statistics on this NetPeer since it was initialized\r\n\t\t/// </summary>\r\n\t\tpublic NetPeerStatistics Statistics\r\n\t\t{\r\n\t\t\tget { return m_statistics; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the configuration used to instanciate this NetPeer\r\n\t\t/// </summary>\r\n\t\tpublic NetPeerConfiguration Configuration { get { return m_configuration; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetPeer constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetPeer(NetPeerConfiguration config)\r\n\t\t{\r\n\t\t\tm_configuration = config;\r\n\t\t\tm_statistics = new NetPeerStatistics(this);\r\n\t\t\tm_releasedIncomingMessages = new NetQueue<NetIncomingMessage>(4);\r\n\t\t\tm_unsentUnconnectedMessages = new NetQueue<NetTuple<IPEndPoint, NetOutgoingMessage>>(2);\r\n\t\t\tm_connections = new List<NetConnection>();\r\n\t\t\tm_connectionLookup = new Dictionary<IPEndPoint, NetConnection>();\r\n\t\t\tm_handshakes = new Dictionary<IPEndPoint, NetConnection>();\r\n\t\t\tm_senderRemote = (EndPoint)new IPEndPoint(IPAddress.Any, 0);\r\n\t\t\tm_status = NetPeerStatus.NotRunning;\r\n\t\t\tm_receivedFragmentGroups = new Dictionary<NetConnection, Dictionary<int, ReceivedFragmentGroup>>();\t\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binds to socket and spawns the networking thread\r\n\t\t/// </summary>\r\n\t\tpublic void Start()\r\n\t\t{\r\n\t\t\tif (m_status != NetPeerStatus.NotRunning)\r\n\t\t\t{\r\n\t\t\t\t// already running! Just ignore...\r\n\t\t\t\tLogWarning(\"Start() called on already running NetPeer - ignoring.\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_status = NetPeerStatus.Starting;\r\n\r\n\t\t\t// fix network thread name\r\n\t\t\tif (m_configuration.NetworkThreadName == \"Lidgren network thread\")\r\n\t\t\t{\r\n\t\t\t\tint pc = Interlocked.Increment(ref s_initializedPeersCount);\r\n\t\t\t\tm_configuration.NetworkThreadName = \"Lidgren network thread \" + pc.ToString();\r\n\t\t\t}\r\n\r\n\t\t\tInitializeNetwork();\r\n\t\t\t\r\n\t\t\t// start network thread\r\n\t\t\tm_networkThread = new Thread(new ThreadStart(NetworkLoop));\r\n\t\t\tm_networkThread.Name = m_configuration.NetworkThreadName;\r\n\t\t\tm_networkThread.IsBackground = true;\r\n\t\t\tm_networkThread.Start();\r\n\r\n\t\t\t// send upnp discovery\r\n\t\t\tif (m_upnp != null)\r\n\t\t\t\tm_upnp.Discover(this);\r\n\r\n\t\t\t// allow some time for network thread to start up in case they call Connect() or UPnP calls immediately\r\n\t\t\tThread.Sleep(50);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get the connection, if any, for a certain remote endpoint\r\n\t\t/// </summary>\r\n\t\tpublic NetConnection GetConnection(IPEndPoint ep)\r\n\t\t{\r\n\t\t\tNetConnection retval;\r\n\r\n\t\t\t// this should not pose a threading problem, m_connectionLookup is never added to concurrently\r\n\t\t\t// and TryGetValue will not throw an exception on fail, only yield null, which is acceptable\r\n\t\t\tm_connectionLookup.TryGetValue(ep, out retval);\r\n\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Read a pending message from any connection, blocking up to maxMillis if needed\r\n\t\t/// </summary>\r\n\t\tpublic NetIncomingMessage WaitMessage(int maxMillis)\r\n\t\t{\r\n\t\t\tvar msg = ReadMessage();\r\n\t\t\tif (msg != null)\r\n\t\t\t\treturn msg; // no need to wait; we already have a message to deliver\r\n\t\t\tvar msgEvt = MessageReceivedEvent;\r\n\t\t\tmsgEvt.WaitOne(maxMillis);\r\n\t\t\treturn ReadMessage();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Read a pending message from any connection, if any\r\n\t\t/// </summary>\r\n\t\tpublic NetIncomingMessage ReadMessage()\r\n\t\t{\r\n\t\t\tNetIncomingMessage retval;\r\n\t\t\tif (m_releasedIncomingMessages.TryDequeue(out retval))\r\n\t\t\t{\r\n\t\t\t\tif (retval.MessageType == NetIncomingMessageType.StatusChanged)\r\n\t\t\t\t{\r\n\t\t\t\t\tNetConnectionStatus status = (NetConnectionStatus)retval.PeekByte();\r\n\t\t\t\t\tretval.SenderConnection.m_visibleStatus = status;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Read a pending message from any connection, if any\r\n\t\t/// </summary>\r\n\t\tpublic int ReadMessages(IList<NetIncomingMessage> addTo)\r\n\t\t{\r\n\t\t\tint added = m_releasedIncomingMessages.TryDrain(addTo);\r\n\t\t\tif (added > 0)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < added; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar index = addTo.Count - added + i;\r\n\t\t\t\t\tvar nim = addTo[index];\r\n\t\t\t\t\tif (nim.MessageType == NetIncomingMessageType.StatusChanged)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tNetConnectionStatus status = (NetConnectionStatus)nim.PeekByte();\r\n\t\t\t\t\t\tnim.SenderConnection.m_visibleStatus = status;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn added;\r\n\t\t}\r\n\r\n\t\t// send message immediately\r\n\t\tinternal void SendLibrary(NetOutgoingMessage msg, IPEndPoint recipient)\r\n\t\t{\r\n\t\t\tVerifyNetworkThread();\r\n\t\t\tNetException.Assert(msg.m_isSent == false);\r\n\r\n\t\t\tbool connReset;\r\n\t\t\tint len = msg.Encode(m_sendBuffer, 0, 0);\r\n\t\t\tSendPacket(len, recipient, 1, out connReset);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a connection to a remote endpoint\r\n\t\t/// </summary>\r\n\t\tpublic NetConnection Connect(string host, int port)\r\n\t\t{\r\n\t\t\treturn Connect(new IPEndPoint(NetUtility.Resolve(host), port), null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a connection to a remote endpoint\r\n\t\t/// </summary>\r\n\t\tpublic NetConnection Connect(string host, int port, NetOutgoingMessage hailMessage)\r\n\t\t{\r\n\t\t\treturn Connect(new IPEndPoint(NetUtility.Resolve(host), port), hailMessage);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a connection to a remote endpoint\r\n\t\t/// </summary>\r\n\t\tpublic NetConnection Connect(IPEndPoint remoteEndPoint)\r\n\t\t{\r\n\t\t\treturn Connect(remoteEndPoint, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a connection to a remote endpoint\r\n\t\t/// </summary>\r\n\t\tpublic virtual NetConnection Connect(IPEndPoint remoteEndPoint, NetOutgoingMessage hailMessage)\r\n\t\t{\r\n\t\t\tif (remoteEndPoint == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"remoteEndPoint\");\r\n\r\n\t\t\tlock (m_connections)\r\n\t\t\t{\r\n\t\t\t\tif (m_status == NetPeerStatus.NotRunning)\r\n\t\t\t\t\tthrow new NetException(\"Must call Start() first\");\r\n\r\n\t\t\t\tif (m_connectionLookup.ContainsKey(remoteEndPoint))\r\n\t\t\t\t\tthrow new NetException(\"Already connected to that endpoint!\");\r\n\r\n\t\t\t\tNetConnection hs;\r\n\t\t\t\tif (m_handshakes.TryGetValue(remoteEndPoint, out hs))\r\n\t\t\t\t{\r\n\t\t\t\t\t// already trying to connect to that endpoint; make another try\r\n\t\t\t\t\tswitch (hs.m_status)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase NetConnectionStatus.InitiatedConnect:\r\n\t\t\t\t\t\t\t// send another connect\r\n\t\t\t\t\t\t\ths.m_connectRequested = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase NetConnectionStatus.RespondedConnect:\r\n\t\t\t\t\t\t\t// send another response\r\n\t\t\t\t\t\t\ths.SendConnectResponse((float)NetTime.Now, false);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t// weird\r\n\t\t\t\t\t\t\tLogWarning(\"Weird situation; Connect() already in progress to remote endpoint; but hs status is \" + hs.m_status);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn hs;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tNetConnection conn = new NetConnection(this, remoteEndPoint);\r\n\t\t\t\tconn.m_status = NetConnectionStatus.InitiatedConnect;\r\n\t\t\t\tconn.m_localHailMessage = hailMessage;\r\n\r\n\t\t\t\t// handle on network thread\r\n\t\t\t\tconn.m_connectRequested = true;\r\n\t\t\t\tconn.m_connectionInitiator = true;\r\n\r\n\t\t\t\tm_handshakes.Add(remoteEndPoint, conn);\r\n\r\n\t\t\t\treturn conn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send raw bytes; only used for debugging\r\n\t\t/// </summary>\r\n#if DEBUG\r\n\t\tpublic void RawSend(byte[] arr, int offset, int length, IPEndPoint destination)\r\n#else\r\n\t\tpublic void RawSend(byte[] arr, int offset, int length, IPEndPoint destination)\r\n#endif\r\n\t{\r\n\t\t\t// wrong thread - this miiiight crash with network thread... but what's a boy to do.\r\n\t\t\tArray.Copy(arr, offset, m_sendBuffer, 0, length);\r\n\t\t\tbool unused;\r\n\t\t\tSendPacket(length, destination, 1, out unused);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// In DEBUG, throws an exception, in RELEASE logs an error message\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\"></param>\r\n\t\tinternal void ThrowOrLog(string message)\r\n\t\t{\r\n#if DEBUG\r\n\t\t\tthrow new NetException(message);\r\n#else\r\n\t\t\tLogError(message);\r\n#endif\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Disconnects all active connections and closes the socket\r\n\t\t/// </summary>\r\n\t\tpublic void Shutdown(string bye)\r\n\t\t{\r\n\t\t\t// called on user thread\r\n\t\t\tif (m_socket == null)\r\n\t\t\t\treturn; // already shut down\r\n\r\n\t\t\tLogDebug(\"Shutdown requested\");\r\n\t\t\tm_shutdownReason = bye;\r\n\t\t\tm_status = NetPeerStatus.ShutdownRequested;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeerConfiguration.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\nusing System;\r\nusing System.Net;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Partly immutable after NetPeer has been initialized\r\n\t/// </summary>\r\n\tpublic sealed class NetPeerConfiguration\r\n\t{\r\n\t\t// Maximum transmission unit\r\n\t\t// Ethernet can take 1500 bytes of payload, so lets stay below that.\r\n\t\t// The aim is for a max full packet to be 1440 bytes (30 x 48 bytes, lower than 1468)\r\n\t\t// -20 bytes IP header\r\n\t\t//  -8 bytes UDP header\r\n\t\t//  -4 bytes to be on the safe side and align to 8-byte boundary\r\n\t\t// Total 1408 bytes\r\n\t\t// Note that lidgren headers (5 bytes) are not included here; since it's part of the \"mtu payload\"\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Default MTU value in bytes\r\n\t\t/// </summary>\r\n\t\tpublic const int kDefaultMTU = 1408;\r\n\t\t\r\n\t\tprivate const string c_isLockedMessage = \"You may not modify the NetPeerConfiguration after it has been used to initialize a NetPeer\";\r\n\r\n\t\tprivate bool m_isLocked;\r\n\t\tprivate readonly string m_appIdentifier;\r\n\t\tprivate string m_networkThreadName;\r\n\t\tprivate IPAddress m_localAddress;\r\n\t\tprivate IPAddress m_broadcastAddress;\r\n\t\tinternal bool m_acceptIncomingConnections;\r\n\t\tinternal int m_maximumConnections;\r\n\t\tinternal int m_defaultOutgoingMessageCapacity;\r\n\t\tinternal float m_pingInterval;\r\n\t\tinternal bool m_useMessageRecycling;\r\n\t\tinternal float m_connectionTimeout;\r\n\t\tinternal bool m_enableUPnP;\r\n\t\tinternal bool m_autoFlushSendQueue;\r\n\t\tprivate NetUnreliableSizeBehaviour m_unreliableSizeBehaviour;\r\n\r\n\t\tinternal NetIncomingMessageType m_disabledTypes;\r\n\t\tinternal int m_port;\r\n\t\tinternal int m_receiveBufferSize;\r\n\t\tinternal int m_sendBufferSize;\r\n\t\tinternal float m_resendHandshakeInterval;\r\n\t\tinternal int m_maximumHandshakeAttempts;\r\n\r\n\t\t// bad network simulation\r\n\t\tinternal float m_loss;\r\n\t\tinternal float m_duplicates;\r\n\t\tinternal float m_minimumOneWayLatency;\r\n\t\tinternal float m_randomOneWayLatency;\r\n\r\n\t\t// MTU\r\n\t\tinternal int m_maximumTransmissionUnit;\r\n\t\tinternal bool m_autoExpandMTU;\r\n\t\tinternal float m_expandMTUFrequency;\r\n\t\tinternal int m_expandMTUFailAttempts;\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetPeerConfiguration constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetPeerConfiguration(string appIdentifier)\r\n\t\t{\r\n\t\t\tif (string.IsNullOrEmpty(appIdentifier))\r\n\t\t\t\tthrow new NetException(\"App identifier must be at least one character long\");\r\n\t\t\tm_appIdentifier = appIdentifier;\r\n\r\n\t\t\t//\r\n\t\t\t// default values\r\n\t\t\t//\r\n\t\t\tm_disabledTypes = NetIncomingMessageType.ConnectionApproval | NetIncomingMessageType.UnconnectedData | NetIncomingMessageType.VerboseDebugMessage | NetIncomingMessageType.ConnectionLatencyUpdated | NetIncomingMessageType.NatIntroductionSuccess;\r\n\t\t\tm_networkThreadName = \"Lidgren network thread\";\r\n\t\t\tm_localAddress = IPAddress.Any;\r\n\t\t\tm_broadcastAddress = IPAddress.Broadcast;\r\n\t\t\tvar ip = NetUtility.GetBroadcastAddress();\r\n\t\t\tif (ip != null)\r\n\t\t\t{\r\n\t\t\t\tm_broadcastAddress = ip;\r\n\t\t\t}\r\n\t\t\tm_port = 0;\r\n\t\t\tm_receiveBufferSize = 131071;\r\n\t\t\tm_sendBufferSize = 131071;\r\n\t\t\tm_acceptIncomingConnections = false;\r\n\t\t\tm_maximumConnections = 32;\r\n\t\t\tm_defaultOutgoingMessageCapacity = 16;\r\n\t\t\tm_pingInterval = 4.0f;\r\n\t\t\tm_connectionTimeout = 25.0f;\r\n\t\t\tm_useMessageRecycling = true;\r\n\t\t\tm_resendHandshakeInterval = 3.0f;\r\n\t\t\tm_maximumHandshakeAttempts = 5;\r\n\t\t\tm_autoFlushSendQueue = true;\r\n\r\n\t\t\tm_maximumTransmissionUnit = kDefaultMTU;\r\n\t\t\tm_autoExpandMTU = false;\r\n\t\t\tm_expandMTUFrequency = 2.0f;\r\n\t\t\tm_expandMTUFailAttempts = 5;\r\n\t\t\tm_unreliableSizeBehaviour = NetUnreliableSizeBehaviour.IgnoreMTU;\r\n\r\n\t\t\tm_loss = 0.0f;\r\n\t\t\tm_minimumOneWayLatency = 0.0f;\r\n\t\t\tm_randomOneWayLatency = 0.0f;\r\n\t\t\tm_duplicates = 0.0f;\r\n\r\n\t\t\tm_isLocked = false;\r\n\t\t}\r\n\r\n\t\tinternal void Lock()\r\n\t\t{\r\n\t\t\tm_isLocked = true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the identifier of this application; the library can only connect to matching app identifier peers\r\n\t\t/// </summary>\r\n\t\tpublic string AppIdentifier\r\n\t\t{\r\n\t\t\tget { return m_appIdentifier; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enables receiving of the specified type of message\r\n\t\t/// </summary>\r\n\t\tpublic void EnableMessageType(NetIncomingMessageType type)\r\n\t\t{\r\n\t\t\tm_disabledTypes &= (~type);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Disables receiving of the specified type of message\r\n\t\t/// </summary>\r\n\t\tpublic void DisableMessageType(NetIncomingMessageType type)\r\n\t\t{\r\n\t\t\tm_disabledTypes |= type;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enables or disables receiving of the specified type of message\r\n\t\t/// </summary>\r\n\t\tpublic void SetMessageTypeEnabled(NetIncomingMessageType type, bool enabled)\r\n\t\t{\r\n\t\t\tif (enabled)\r\n\t\t\t\tm_disabledTypes &= (~type);\r\n\t\t\telse\r\n\t\t\t\tm_disabledTypes |= type;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets if receiving of the specified type of message is enabled\r\n\t\t/// </summary>\r\n\t\tpublic bool IsMessageTypeEnabled(NetIncomingMessageType type)\r\n\t\t{\r\n\t\t\treturn !((m_disabledTypes & type) == type);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the behaviour of unreliable sends above MTU\r\n\t\t/// </summary>\r\n\t\tpublic NetUnreliableSizeBehaviour UnreliableSizeBehaviour\r\n\t\t{\r\n\t\t\tget { return m_unreliableSizeBehaviour; }\r\n\t\t\tset { m_unreliableSizeBehaviour = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the name of the library network thread. Cannot be changed once NetPeer is initialized.\r\n\t\t/// </summary>\r\n\t\tpublic string NetworkThreadName\r\n\t\t{\r\n\t\t\tget { return m_networkThreadName; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(\"NetworkThreadName may not be set after the NetPeer which uses the configuration has been started\");\r\n\t\t\t\tm_networkThreadName = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the maximum amount of connections this peer can hold. Cannot be changed once NetPeer is initialized.\r\n\t\t/// </summary>\r\n\t\tpublic int MaximumConnections\r\n\t\t{\r\n\t\t\tget { return m_maximumConnections; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_maximumConnections = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the maximum amount of bytes to send in a single packet, excluding ip, udp and lidgren headers. Cannot be changed once NetPeer is initialized.\r\n\t\t/// </summary>\r\n\t\tpublic int MaximumTransmissionUnit\r\n\t\t{\r\n\t\t\tget { return m_maximumTransmissionUnit; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tif (value < 1 || value >= ((ushort.MaxValue + 1) / 8))\r\n\t\t\t\t\tthrow new NetException(\"MaximumTransmissionUnit must be between 1 and \" + (((ushort.MaxValue + 1) / 8) - 1) + \" bytes\");\r\n\t\t\t\tm_maximumTransmissionUnit = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the default capacity in bytes when NetPeer.CreateMessage() is called without argument\r\n\t\t/// </summary>\r\n\t\tpublic int DefaultOutgoingMessageCapacity\r\n\t\t{\r\n\t\t\tget { return m_defaultOutgoingMessageCapacity; }\r\n\t\t\tset { m_defaultOutgoingMessageCapacity = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the time between latency calculating pings\r\n\t\t/// </summary>\r\n\t\tpublic float PingInterval\r\n\t\t{\r\n\t\t\tget { return m_pingInterval; }\r\n\t\t\tset { m_pingInterval = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets if the library should recycling messages to avoid excessive garbage collection. Cannot be changed once NetPeer is initialized.\r\n\t\t/// </summary>\r\n\t\tpublic bool UseMessageRecycling\r\n\t\t{\r\n\t\t\tget { return m_useMessageRecycling; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_useMessageRecycling = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the number of seconds timeout will be postponed on a successful ping/pong\r\n\t\t/// </summary>\r\n\t\tpublic float ConnectionTimeout\r\n\t\t{\r\n\t\t\tget { return m_connectionTimeout; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (value < m_pingInterval)\r\n\t\t\t\t\tthrow new NetException(\"Connection timeout cannot be lower than ping interval!\");\r\n\t\t\t\tm_connectionTimeout = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enables UPnP support; enabling port forwarding and getting external ip\r\n\t\t/// </summary>\r\n\t\tpublic bool EnableUPnP\r\n\t\t{\r\n\t\t\tget { return m_enableUPnP; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_enableUPnP = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enables or disables automatic flushing of the send queue. If disabled, you must manully call NetPeer.FlushSendQueue() to flush sent messages to network.\r\n\t\t/// </summary>\r\n\t\tpublic bool AutoFlushSendQueue\r\n\t\t{\r\n\t\t\tget { return m_autoFlushSendQueue; }\r\n\t\t\tset { m_autoFlushSendQueue = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the local ip address to bind to. Defaults to IPAddress.Any. Cannot be changed once NetPeer is initialized.\r\n\t\t/// </summary>\r\n\t\tpublic IPAddress LocalAddress\r\n\t\t{\r\n\t\t\tget { return m_localAddress; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_localAddress = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the local broadcast address to use when broadcasting\r\n\t\t/// </summary>\r\n\t\tpublic IPAddress BroadcastAddress\r\n\t\t{\r\n\t\t\tget { return m_broadcastAddress; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_broadcastAddress = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the local port to bind to. Defaults to 0. Cannot be changed once NetPeer is initialized.\r\n\t\t/// </summary>\r\n\t\tpublic int Port\r\n\t\t{\r\n\t\t\tget { return m_port; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_port = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the size in bytes of the receiving buffer. Defaults to 131071 bytes. Cannot be changed once NetPeer is initialized.\r\n\t\t/// </summary>\r\n\t\tpublic int ReceiveBufferSize\r\n\t\t{\r\n\t\t\tget { return m_receiveBufferSize; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_receiveBufferSize = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the size in bytes of the sending buffer. Defaults to 131071 bytes. Cannot be changed once NetPeer is initialized.\r\n\t\t/// </summary>\r\n\t\tpublic int SendBufferSize\r\n\t\t{\r\n\t\t\tget { return m_sendBufferSize; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_sendBufferSize = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets if the NetPeer should accept incoming connections. This is automatically set to true in NetServer and false in NetClient.\r\n\t\t/// </summary>\r\n\t\tpublic bool AcceptIncomingConnections\r\n\t\t{\r\n\t\t\tget { return m_acceptIncomingConnections; }\r\n\t\t\tset { m_acceptIncomingConnections = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the number of seconds between handshake attempts\r\n\t\t/// </summary>\r\n\t\tpublic float ResendHandshakeInterval\r\n\t\t{\r\n\t\t\tget { return m_resendHandshakeInterval; }\r\n\t\t\tset { m_resendHandshakeInterval = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the maximum number of handshake attempts before failing to connect\r\n\t\t/// </summary>\r\n\t\tpublic int MaximumHandshakeAttempts\r\n\t\t{\r\n\t\t\tget { return m_maximumHandshakeAttempts; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (value < 1)\r\n\t\t\t\t\tthrow new NetException(\"MaximumHandshakeAttempts must be at least 1\");\r\n\t\t\t\tm_maximumHandshakeAttempts = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets if the NetPeer should send large messages to try to expand the maximum transmission unit size\r\n\t\t/// </summary>\r\n\t\tpublic bool AutoExpandMTU\r\n\t\t{\r\n\t\t\tget { return m_autoExpandMTU; }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (m_isLocked)\r\n\t\t\t\t\tthrow new NetException(c_isLockedMessage);\r\n\t\t\t\tm_autoExpandMTU = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets how often to send large messages to expand MTU if AutoExpandMTU is enabled\r\n\t\t/// </summary>\r\n\t\tpublic float ExpandMTUFrequency\r\n\t\t{\r\n\t\t\tget { return m_expandMTUFrequency; }\r\n\t\t\tset { m_expandMTUFrequency = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the number of failed expand mtu attempts to perform before setting final MTU\r\n\t\t/// </summary>\r\n\t\tpublic int ExpandMTUFailAttempts\r\n\t\t{\r\n\t\t\tget { return m_expandMTUFailAttempts; }\r\n\t\t\tset { m_expandMTUFailAttempts = value; }\r\n\t\t}\r\n\r\n#if DEBUG\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the simulated amount of sent packets lost from 0.0f to 1.0f\r\n\t\t/// </summary>\r\n\t\tpublic float SimulatedLoss\r\n\t\t{\r\n\t\t\tget { return m_loss; }\r\n\t\t\tset { m_loss = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the minimum simulated amount of one way latency for sent packets in seconds\r\n\t\t/// </summary>\r\n\t\tpublic float SimulatedMinimumLatency\r\n\t\t{\r\n\t\t\tget { return m_minimumOneWayLatency; }\r\n\t\t\tset { m_minimumOneWayLatency = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the simulated added random amount of one way latency for sent packets in seconds\r\n\t\t/// </summary>\r\n\t\tpublic float SimulatedRandomLatency\r\n\t\t{\r\n\t\t\tget { return m_randomOneWayLatency; }\r\n\t\t\tset { m_randomOneWayLatency = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the average simulated one way latency in seconds\r\n\t\t/// </summary>\r\n\t\tpublic float SimulatedAverageLatency\r\n\t\t{\r\n\t\t\tget { return m_minimumOneWayLatency + (m_randomOneWayLatency * 0.5f); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the simulated amount of duplicated packets from 0.0f to 1.0f\r\n\t\t/// </summary>\r\n\t\tpublic float SimulatedDuplicatesChance\r\n\t\t{\r\n\t\t\tget { return m_duplicates; }\r\n\t\t\tset { m_duplicates = value; }\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a memberwise shallow clone of this configuration\r\n\t\t/// </summary>\r\n\t\tpublic NetPeerConfiguration Clone()\r\n\t\t{\r\n\t\t\tNetPeerConfiguration retval = this.MemberwiseClone() as NetPeerConfiguration;\r\n\t\t\tretval.m_isLocked = false;\r\n\t\t\treturn retval;\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Behaviour of unreliable sends above MTU\r\n\t/// </summary>\r\n\tpublic enum NetUnreliableSizeBehaviour\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Sending an unreliable message will ignore MTU and send everything in a single packet; this is the new default\r\n\t\t/// </summary>\r\n\t\tIgnoreMTU = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Old behaviour; use normal fragmentation for unreliable messages - if a fragment is dropped, memory for received fragments are never reclaimed!\r\n\t\t/// </summary>\r\n\t\tNormalFragmentation = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Alternate behaviour; just drops unreliable messages above MTU\r\n\t\t/// </summary>\r\n\t\tDropAboveMTU = 2,\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeerStatistics.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\n\r\n// Uncomment the line below to get statistics in RELEASE builds\r\n//#define USE_RELEASE_STATISTICS\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Statistics for a NetPeer instance\r\n\t/// </summary>\r\n\tpublic sealed class NetPeerStatistics\r\n\t{\r\n\t\tprivate readonly NetPeer m_peer;\r\n\r\n\t\tinternal int m_sentPackets;\r\n\t\tinternal int m_receivedPackets;\r\n\r\n\t\tinternal int m_sentMessages;\r\n\t\tinternal int m_receivedMessages;\r\n\t\tinternal int m_receivedFragments;\r\n\r\n\t\tinternal int m_sentBytes;\r\n\t\tinternal int m_receivedBytes;\r\n\r\n\t\tinternal long m_bytesAllocated;\r\n\r\n\t\tinternal NetPeerStatistics(NetPeer peer)\r\n\t\t{\r\n\t\t\tm_peer = peer;\r\n\t\t\tReset();\r\n\t\t}\r\n\r\n\t\tinternal void Reset()\r\n\t\t{\r\n\t\t\tm_sentPackets = 0;\r\n\t\t\tm_receivedPackets = 0;\r\n\r\n\t\t\tm_sentMessages = 0;\r\n\t\t\tm_receivedMessages = 0;\r\n\t\t\tm_receivedFragments = 0;\r\n\r\n\t\t\tm_sentBytes = 0;\r\n\t\t\tm_receivedBytes = 0;\r\n\r\n\t\t\tm_bytesAllocated = 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of sent packets since the NetPeer was initialized\r\n\t\t/// </summary>\r\n\t\tpublic int SentPackets { get { return m_sentPackets; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of received packets since the NetPeer was initialized\r\n\t\t/// </summary>\r\n\t\tpublic int ReceivedPackets { get { return m_receivedPackets; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of sent messages since the NetPeer was initialized\r\n\t\t/// </summary>\r\n\t\tpublic int SentMessages { get { return m_sentMessages; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of received messages since the NetPeer was initialized\r\n\t\t/// </summary>\r\n\t\tpublic int ReceivedMessages { get { return m_receivedMessages; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of sent bytes since the NetPeer was initialized\r\n\t\t/// </summary>\r\n\t\tpublic int SentBytes { get { return m_sentBytes; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of received bytes since the NetPeer was initialized\r\n\t\t/// </summary>\r\n\t\tpublic int ReceivedBytes { get { return m_receivedBytes; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of bytes allocated (and possibly garbage collected) for message storage\r\n\t\t/// </summary>\r\n\t\tpublic long StorageBytesAllocated { get { return m_bytesAllocated; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of bytes in the recycled pool\r\n\t\t/// </summary>\r\n\t\tpublic int BytesInRecyclePool { get { return m_peer.m_storagePoolBytes; } }\r\n\r\n#if USE_RELEASE_STATISTICS\r\n\t\tinternal void PacketSent(int numBytes, int numMessages)\r\n\t\t{\r\n\t\t\tm_sentPackets++;\r\n\t\t\tm_sentBytes += numBytes;\r\n\t\t\tm_sentMessages += numMessages;\r\n\t\t}\r\n#else\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void PacketSent(int numBytes, int numMessages)\r\n\t\t{\r\n\t\t\tm_sentPackets++;\r\n\t\t\tm_sentBytes += numBytes;\r\n\t\t\tm_sentMessages += numMessages;\r\n\t\t}\r\n#endif\r\n\r\n#if USE_RELEASE_STATISTICS\r\n\t\tinternal void PacketReceived(int numBytes, int numMessages)\r\n\t\t{\r\n\t\t\tm_receivedPackets++;\r\n\t\t\tm_receivedBytes += numBytes;\r\n\t\t\tm_receivedMessages += numMessages;\r\n\t\t}\r\n#else\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void PacketReceived(int numBytes, int numMessages, int numFragments)\r\n\t\t{\r\n\t\t\tm_receivedPackets++;\r\n\t\t\tm_receivedBytes += numBytes;\r\n\t\t\tm_receivedMessages += numMessages;\r\n\t\t\tm_receivedFragments += numFragments;\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents this object\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tStringBuilder bdr = new StringBuilder();\r\n\t\t\tbdr.AppendLine(m_peer.ConnectionsCount.ToString() + \" connections\");\r\n#if DEBUG || USE_RELEASE_STATISTICS\r\n\t\t\tbdr.AppendLine(\"Sent \" + m_sentBytes + \" bytes in \" + m_sentMessages + \" messages in \" + m_sentPackets + \" packets\");\r\n\t\t\tbdr.AppendLine(\"Received \" + m_receivedBytes + \" bytes in \" + m_receivedMessages + \" messages (of which \" + m_receivedFragments + \" fragments) in \" + m_receivedPackets + \" packets\");\r\n#else\r\n\t\t\tbdr.AppendLine(\"Sent (n/a) bytes in (n/a) messages in (n/a) packets\");\r\n\t\t\tbdr.AppendLine(\"Received (n/a) bytes in (n/a) messages in (n/a) packets\");\r\n#endif\r\n\t\t\tbdr.AppendLine(\"Storage allocated \" + m_bytesAllocated + \" bytes\");\r\n\t\t\tbdr.AppendLine(\"Recycled pool \" + m_peer.m_storagePoolBytes + \" bytes\");\r\n\t\t\treturn bdr.ToString();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetPeerStatus.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\nusing System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Status for a NetPeer instance\r\n\t/// </summary>\r\n\tpublic enum NetPeerStatus\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// NetPeer is not running; socket is not bound\r\n\t\t/// </summary>\r\n\t\tNotRunning = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetPeer is in the process of starting up\r\n\t\t/// </summary>\r\n\t\tStarting = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetPeer is bound to socket and listening for packets\r\n\t\t/// </summary>\r\n\t\tRunning = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shutdown has been requested and will be executed shortly\r\n\t\t/// </summary>\r\n\t\tShutdownRequested = 3,\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetQueue.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Threading;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Thread safe (blocking) expanding queue with TryDequeue() and EnqueueFirst()\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"Count={Count} Capacity={Capacity}\")]\r\n\tpublic sealed class NetQueue<T>\r\n\t{\r\n\t\t// Example:\r\n\t\t// m_capacity = 8\r\n\t\t// m_size = 6\r\n\t\t// m_head = 4\r\n\t\t//\r\n\t\t// [0] item\r\n\t\t// [1] item (tail = ((head + size - 1) % capacity)\r\n\t\t// [2] \r\n\t\t// [3] \r\n\t\t// [4] item (head)\r\n\t\t// [5] item\r\n\t\t// [6] item \r\n\t\t// [7] item\r\n\t\t//\r\n\t\tprivate T[] m_items;\r\n\t\tprivate readonly ReaderWriterLockSlim m_lock = new ReaderWriterLockSlim();\r\n\t\tprivate int m_size;\r\n\t\tprivate int m_head;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of items in the queue\r\n\t\t/// </summary>\r\n\t\tpublic int Count { get { return m_size; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current capacity for the queue\r\n\t\t/// </summary>\r\n\t\tpublic int Capacity { get { return m_items.Length; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetQueue constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetQueue(int initialCapacity)\r\n\t\t{\r\n\t\t\tm_items = new T[initialCapacity];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an item last/tail of the queue\r\n\t\t/// </summary>\r\n\t\tpublic void Enqueue(T item)\r\n\t\t{\r\n\t\t\tm_lock.EnterWriteLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (m_size == m_items.Length)\r\n\t\t\t\t\tSetCapacity(m_items.Length + 8);\r\n\r\n\t\t\t\tint slot = (m_head + m_size) % m_items.Length;\r\n\t\t\t\tm_items[slot] = item;\r\n\t\t\t\tm_size++;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitWriteLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an item last/tail of the queue\r\n\t\t/// </summary>\r\n\t\tpublic void Enqueue(IEnumerable<T> items)\r\n\t\t{\r\n\t\t\tm_lock.EnterWriteLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tforeach (var item in items)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (m_size == m_items.Length)\r\n\t\t\t\t\t\tSetCapacity(m_items.Length + 8); // @TODO move this out of loop\r\n\r\n\t\t\t\t\tint slot = (m_head + m_size) % m_items.Length;\r\n\t\t\t\t\tm_items[slot] = item;\r\n\t\t\t\t\tm_size++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitWriteLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Places an item first, at the head of the queue\r\n\t\t/// </summary>\r\n\t\tpublic void EnqueueFirst(T item)\r\n\t\t{\r\n\t\t\tm_lock.EnterWriteLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (m_size >= m_items.Length)\r\n\t\t\t\t\tSetCapacity(m_items.Length + 8);\r\n\r\n\t\t\t\tm_head--;\r\n\t\t\t\tif (m_head < 0)\r\n\t\t\t\t\tm_head = m_items.Length - 1;\r\n\t\t\t\tm_items[m_head] = item;\r\n\t\t\t\tm_size++;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitWriteLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// must be called from within a write locked m_lock!\r\n\t\tprivate void SetCapacity(int newCapacity)\r\n\t\t{\r\n\t\t\tif (m_size == 0)\r\n\t\t\t{\r\n\t\t\t\tif (m_size == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tm_items = new T[newCapacity];\r\n\t\t\t\t\tm_head = 0;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tT[] newItems = new T[newCapacity];\r\n\r\n\t\t\tif (m_head + m_size - 1 < m_items.Length)\r\n\t\t\t{\r\n\t\t\t\tArray.Copy(m_items, m_head, newItems, 0, m_size);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tArray.Copy(m_items, m_head, newItems, 0, m_items.Length - m_head);\r\n\t\t\t\tArray.Copy(m_items, 0, newItems, m_items.Length - m_head, (m_size - (m_items.Length - m_head)));\r\n\t\t\t}\r\n\r\n\t\t\tm_items = newItems;\r\n\t\t\tm_head = 0;\r\n\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an item from the head of the queue, or returns default(T) if empty\r\n\t\t/// </summary>\r\n\t\tpublic bool TryDequeue(out T item)\r\n\t\t{\r\n\t\t\tif (m_size == 0)\r\n\t\t\t{\r\n\t\t\t\titem = default(T);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tm_lock.EnterWriteLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (m_size == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\titem = default(T);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem = m_items[m_head];\r\n\t\t\t\tm_items[m_head] = default(T);\r\n\r\n\t\t\t\tm_head = (m_head + 1) % m_items.Length;\r\n\t\t\t\tm_size--;\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch\r\n\t\t\t{\r\n#if DEBUG\r\n\t\t\t\tthrow;\r\n#else\r\n\t\t\t\titem = default(T);\r\n\t\t\t\treturn false;\r\n#endif\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitWriteLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets all items from the head of the queue, or returns number of items popped\r\n\t\t/// </summary>\r\n\t\tpublic int TryDrain(IList<T> addTo)\r\n\t\t{\r\n\t\t\tif (m_size == 0)\r\n\t\t\t\treturn 0;\r\n\r\n\t\t\tm_lock.EnterWriteLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tint added = m_size;\r\n\t\t\t\twhile (m_size > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = m_items[m_head];\r\n\t\t\t\t\taddTo.Add(item);\r\n\r\n\t\t\t\t\tm_items[m_head] = default(T);\r\n\t\t\t\t\tm_head = (m_head + 1) % m_items.Length;\r\n\t\t\t\t\tm_size--;\r\n\t\t\t\t}\r\n\t\t\t\treturn added;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitWriteLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns default(T) if queue is empty\r\n\t\t/// </summary>\r\n\t\tpublic T TryPeek(int offset)\r\n\t\t{\r\n\t\t\tif (m_size == 0)\r\n\t\t\t\treturn default(T);\r\n\r\n\t\t\tm_lock.EnterReadLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (m_size == 0)\r\n\t\t\t\t\treturn default(T);\r\n\t\t\t\treturn m_items[(m_head + offset) % m_items.Length];\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitReadLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether an item is in the queue\r\n\t\t/// </summary>\r\n\t\tpublic bool Contains(T item)\r\n\t\t{\r\n\t\t\tm_lock.EnterReadLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tint ptr = m_head;\r\n\t\t\t\tfor (int i = 0; i < m_size; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (m_items[ptr] == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (item == null)\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (m_items[ptr].Equals(item))\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tptr = (ptr + 1) % m_items.Length;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitReadLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Copies the queue items to a new array\r\n\t\t/// </summary>\r\n\t\tpublic T[] ToArray()\r\n\t\t{\r\n\t\t\tm_lock.EnterReadLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tT[] retval = new T[m_size];\r\n\t\t\t\tint ptr = m_head;\r\n\t\t\t\tfor (int i = 0; i < m_size; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tretval[i] = m_items[ptr++];\r\n\t\t\t\t\tif (ptr >= m_items.Length)\r\n\t\t\t\t\t\tptr = 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn retval;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitReadLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes all objects from the queue\r\n\t\t/// </summary>\r\n\t\tpublic void Clear()\r\n\t\t{\r\n\t\t\tm_lock.EnterWriteLock();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < m_items.Length; i++)\r\n\t\t\t\t\tm_items[i] = default(T);\r\n\t\t\t\tm_head = 0;\r\n\t\t\t\tm_size = 0;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tm_lock.ExitWriteLock();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetRandom.Implementations.cs",
    "content": "﻿using System;\nusing System.Security.Cryptography;\n\nnamespace Lidgren.Network\n{\n\t/// <summary>\n\t/// Multiply With Carry random\n\t/// </summary>\n\tpublic class MWCRandom : NetRandom\n\t{\n\t\t/// <summary>\n\t\t/// Get global instance of MWCRandom\n\t\t/// </summary>\n\t\tpublic static new readonly MWCRandom Instance = new MWCRandom();\n\n\t\tprivate uint m_w, m_z;\n\n\t\t/// <summary>\n\t\t/// Constructor with randomized seed\n\t\t/// </summary>\n\t\tpublic MWCRandom()\n\t\t{\n\t\t\tInitialize(NetRandomSeed.GetUInt64());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// (Re)initialize this instance with provided 32 bit seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic override void Initialize(uint seed)\n\t\t{\n\t\t\tm_w = seed;\n\t\t\tm_z = seed * 16777619;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// (Re)initialize this instance with provided 64 bit seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Initialize(ulong seed)\n\t\t{\n\t\t\tm_w = (uint)seed;\n\t\t\tm_z = (uint)(seed >> 32);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic override uint NextUInt32()\n\t\t{\n\t\t\tm_z = 36969 * (m_z & 65535) + (m_z >> 16);\n\t\t\tm_w = 18000 * (m_w & 65535) + (m_w >> 16);\n\t\t\treturn ((m_z << 16) + m_w);\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// Xor Shift based random\n\t/// </summary>\n\tpublic sealed class XorShiftRandom : NetRandom\n\t{\n\t\t/// <summary>\n\t\t/// Get global instance of XorShiftRandom\n\t\t/// </summary>\n\t\tpublic static new readonly XorShiftRandom Instance = new XorShiftRandom();\n\n\t\tprivate const uint c_x = 123456789;\n\t\tprivate const uint c_y = 362436069;\n\t\tprivate const uint c_z = 521288629;\n\t\tprivate const uint c_w = 88675123;\n\n\t\tprivate uint m_x, m_y, m_z, m_w;\n\n\t\t/// <summary>\n\t\t/// Constructor with randomized seed\n\t\t/// </summary>\n\t\tpublic XorShiftRandom()\n\t\t{\n\t\t\tInitialize(NetRandomSeed.GetUInt64());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Constructor with provided 64 bit seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic XorShiftRandom(ulong seed)\n\t\t{\n\t\t\tInitialize(seed);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// (Re)initialize this instance with provided 32 bit seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic override void Initialize(uint seed)\n\t\t{\n\t\t\tm_x = (uint)seed;\n\t\t\tm_y = c_y;\n\t\t\tm_z = c_z;\n\t\t\tm_w = c_w;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// (Re)initialize this instance with provided 64 bit seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic void Initialize(ulong seed)\n\t\t{\n\t\t\tm_x = (uint)seed;\n\t\t\tm_y = c_y;\n\t\t\tm_z = (uint)(seed << 32);\n\t\t\tm_w = c_w;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic override uint NextUInt32()\n\t\t{\n\t\t\tuint t = (m_x ^ (m_x << 11));\n\t\t\tm_x = m_y; m_y = m_z; m_z = m_w;\n\t\t\treturn (m_w = (m_w ^ (m_w >> 19)) ^ (t ^ (t >> 8)));\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// Mersenne Twister based random\n\t/// </summary>\n\tpublic sealed class MersenneTwisterRandom : NetRandom\n\t{\n\t\t/// <summary>\n\t\t/// Get global instance of MersenneTwisterRandom\n\t\t/// </summary>\n\t\tpublic static new readonly MersenneTwisterRandom Instance = new MersenneTwisterRandom();\n\n\t\tprivate const int N = 624;\n\t\tprivate const int M = 397;\n\t\tprivate const uint MATRIX_A = 0x9908b0dfU;\n\t\tprivate const uint UPPER_MASK = 0x80000000U;\n\t\tprivate const uint LOWER_MASK = 0x7fffffffU;\n\t\tprivate const uint TEMPER1 = 0x9d2c5680U;\n\t\tprivate const uint TEMPER2 = 0xefc60000U;\n\t\tprivate const int TEMPER3 = 11;\n\t\tprivate const int TEMPER4 = 7;\n\t\tprivate const int TEMPER5 = 15;\n\t\tprivate const int TEMPER6 = 18;\n\n\t\tprivate UInt32[] mt;\n\t\tprivate int mti;\n\t\tprivate UInt32[] mag01;\n\n\t\tprivate const double c_realUnitInt = 1.0 / ((double)int.MaxValue + 1.0);\n\n\t\t/// <summary>\n\t\t/// Constructor with randomized seed\n\t\t/// </summary>\n\t\tpublic MersenneTwisterRandom()\n\t\t{\n\t\t\tInitialize(NetRandomSeed.GetUInt32());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Constructor with provided 32 bit seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic MersenneTwisterRandom(uint seed)\n\t\t{\n\t\t\tInitialize(seed);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// (Re)initialize this instance with provided 32 bit seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic override void Initialize(uint seed)\n\t\t{\n\t\t\tmt = new UInt32[N];\n\t\t\tmti = N + 1;\n\t\t\tmag01 = new UInt32[] { 0x0U, MATRIX_A };\n\t\t\tmt[0] = seed;\n\t\t\tfor (int i = 1; i < N; i++)\n\t\t\t\tmt[i] = (UInt32)(1812433253 * (mt[i - 1] ^ (mt[i - 1] >> 30)) + i);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic override uint NextUInt32()\n\t\t{\n\t\t\tUInt32 y;\n\t\t\tif (mti >= N)\n\t\t\t{\n\t\t\t\tGenRandAll();\n\t\t\t\tmti = 0;\n\t\t\t}\n\t\t\ty = mt[mti++];\n\t\t\ty ^= (y >> TEMPER3);\n\t\t\ty ^= (y << TEMPER4) & TEMPER1;\n\t\t\ty ^= (y << TEMPER5) & TEMPER2;\n\t\t\ty ^= (y >> TEMPER6);\n\t\t\treturn y;\n\t\t}\n\n\t\tprivate void GenRandAll()\n\t\t{\n\t\t\tint kk = 1;\n\t\t\tUInt32 y;\n\t\t\tUInt32 p;\n\t\t\ty = mt[0] & UPPER_MASK;\n\t\t\tdo\n\t\t\t{\n\t\t\t\tp = mt[kk];\n\t\t\t\tmt[kk - 1] = mt[kk + (M - 1)] ^ ((y | (p & LOWER_MASK)) >> 1) ^ mag01[p & 1];\n\t\t\t\ty = p & UPPER_MASK;\n\t\t\t} while (++kk < N - M + 1);\n\t\t\tdo\n\t\t\t{\n\t\t\t\tp = mt[kk];\n\t\t\t\tmt[kk - 1] = mt[kk + (M - N - 1)] ^ ((y | (p & LOWER_MASK)) >> 1) ^ mag01[p & 1];\n\t\t\t\ty = p & UPPER_MASK;\n\t\t\t} while (++kk < N);\n\t\t\tp = mt[0];\n\t\t\tmt[N - 1] = mt[M - 1] ^ ((y | (p & LOWER_MASK)) >> 1) ^ mag01[p & 1];\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// RNGCryptoServiceProvider based random; very slow but cryptographically safe\n\t/// </summary>\n\tpublic class CryptoRandom : NetRandom\n\t{\n\t\t/// <summary>\n\t\t/// Global instance of CryptoRandom\n\t\t/// </summary>\n\t\tpublic static new readonly CryptoRandom Instance = new CryptoRandom();\n\n\t\tprivate RandomNumberGenerator m_rnd = new RNGCryptoServiceProvider();\n\n\t\t/// <summary>\n\t\t/// Seed in CryptoRandom does not create deterministic sequences\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic override void Initialize(uint seed)\n\t\t{\n\t\t\tbyte[] tmp = new byte[seed % 16];\n\t\t\tm_rnd.GetBytes(tmp); // just prime it\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic override uint NextUInt32()\n\t\t{\n\t\t\tvar bytes = new byte[4];\n\t\t\tm_rnd.GetBytes(bytes);\n\t\t\treturn (uint)bytes[0] | (((uint)bytes[1]) << 8) | (((uint)bytes[2]) << 16) | (((uint)bytes[3]) << 24);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fill the specified buffer with random values\n\t\t/// </summary>\n\t\tpublic override void NextBytes(byte[] buffer)\n\t\t{\n\t\t\tm_rnd.GetBytes(buffer);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fills all bytes from offset to offset + length in buffer with random values\n\t\t/// </summary>\n\t\tpublic override void NextBytes(byte[] buffer, int offset, int length)\n\t\t{\n\t\t\tvar bytes = new byte[length];\n\t\t\tm_rnd.GetBytes(bytes);\n\t\t\tArray.Copy(bytes, 0, buffer, offset, length);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetRandom.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// NetRandom base class\r\n\t/// </summary>\r\n\tpublic abstract class NetRandom : Random\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Get global instance of NetRandom (uses MWCRandom)\r\n\t\t/// </summary>\r\n\t\tpublic static NetRandom Instance = new MWCRandom();\r\n\r\n\t\tprivate const double c_realUnitInt = 1.0 / ((double)int.MaxValue + 1.0);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Constructor with randomized seed\r\n\t\t/// </summary>\r\n\t\tpublic NetRandom()\r\n\t\t{\r\n\t\t\tInitialize(NetRandomSeed.GetUInt32());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Constructor with provided 32 bit seed\r\n\t\t/// </summary>\r\n\t\tpublic NetRandom(int seed)\r\n\t\t{\r\n\t\t\tInitialize((uint)seed);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// (Re)initialize this instance with provided 32 bit seed\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic virtual void Initialize(uint seed)\r\n\t\t{\r\n\t\t\t// should be abstract, but non-CLS compliant methods can't be abstract!\r\n\t\t\tthrow new NotImplementedException(\"Implement this in inherited classes\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic virtual uint NextUInt32()\r\n\t\t{\r\n\t\t\t// should be abstract, but non-CLS compliant methods can't be abstract!\r\n\t\t\tthrow new NotImplementedException(\"Implement this in inherited classes\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a random value that is greater or equal than 0 and less than Int32.MaxValue\r\n\t\t/// </summary>\r\n\t\tpublic override int Next()\r\n\t\t{\r\n\t\t\tvar retval = (int)(0x7FFFFFFF & NextUInt32());\r\n\t\t\tif (retval == 0x7FFFFFFF)\r\n\t\t\t\treturn NextInt32();\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a random value greater or equal than 0 and less or equal than Int32.MaxValue (inclusively)\r\n\t\t/// </summary>\r\n\t\tpublic int NextInt32()\r\n\t\t{\r\n\t\t\treturn (int)(0x7FFFFFFF & NextUInt32());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns random value larger or equal to 0.0 and less than 1.0\r\n\t\t/// </summary>\r\n\t\tpublic override double NextDouble()\r\n\t\t{\r\n\t\t\treturn c_realUnitInt * NextInt32();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns random value is greater or equal than 0.0 and less than 1.0\r\n\t\t/// </summary>\r\n\t\tprotected override double Sample()\r\n\t\t{\r\n\t\t\treturn c_realUnitInt * NextInt32();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns random value is greater or equal than 0.0f and less than 1.0f\r\n\t\t/// </summary>\r\n\t\tpublic float NextSingle()\r\n\t\t{\r\n\t\t\tvar retval = (float)(c_realUnitInt * NextInt32());\r\n\t\t\tif (retval == 1.0f)\r\n\t\t\t\treturn NextSingle();\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a random value is greater or equal than 0 and less than maxValue\r\n\t\t/// </summary>\r\n\t\tpublic override int Next(int maxValue)\r\n\t\t{\r\n\t\t\treturn (int)(NextDouble() * maxValue);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a random value is greater or equal than minValue and less than maxValue\r\n\t\t/// </summary>\r\n\t\tpublic override int Next(int minValue, int maxValue)\r\n\t\t{\r\n            return minValue + (int)(NextDouble() * (double)(maxValue - minValue));\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Generates a random value between UInt64.MinValue to UInt64.MaxValue\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic ulong NextUInt64()\r\n\t\t{\r\n\t\t\tulong retval = NextUInt32();\r\n\t\t\tretval |= NextUInt32() << 32;\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\tprivate uint m_boolValues;\r\n\t\tprivate int m_nextBoolIndex;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns true or false, randomly\r\n\t\t/// </summary>\r\n\t\tpublic bool NextBool()\r\n\t\t{\r\n\t\t\tif (m_nextBoolIndex >= 32)\r\n\t\t\t{\r\n\t\t\t\tm_boolValues = NextUInt32();\r\n\t\t\t\tm_nextBoolIndex = 1;\r\n\t\t\t}\r\n\r\n\t\t\tvar retval = ((m_boolValues >> m_nextBoolIndex) & 1) == 1;\r\n\t\t\tm_nextBoolIndex++;\r\n\t\t\treturn retval;\r\n\t\t}\r\n\t\t\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fills all bytes from offset to offset + length in buffer with random values\r\n\t\t/// </summary>\r\n\t\tpublic virtual void NextBytes(byte[] buffer, int offset, int length)\r\n\t\t{\r\n\t\t\tint full = length / 4;\r\n\t\t\tint ptr = offset;\r\n\t\t\tfor (int i = 0; i < full; i++)\r\n\t\t\t{\r\n\t\t\t\tuint r = NextUInt32();\r\n\t\t\t\tbuffer[ptr++] = (byte)r;\r\n\t\t\t\tbuffer[ptr++] = (byte)(r >> 8);\r\n\t\t\t\tbuffer[ptr++] = (byte)(r >> 16);\r\n\t\t\t\tbuffer[ptr++] = (byte)(r >> 24);\r\n\t\t\t}\r\n\r\n\t\t\tint rest = length - (full * 4);\r\n\t\t\tfor (int i = 0; i < rest; i++)\r\n\t\t\t\tbuffer[ptr++] = (byte)NextUInt32();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fill the specified buffer with random values\r\n\t\t/// </summary>\r\n\t\tpublic override void NextBytes(byte[] buffer)\r\n\t\t{\r\n\t\t\tNextBytes(buffer, 0, buffer.Length);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetRandomSeed.cs",
    "content": "﻿using System;\nusing System.Threading;\n\nnamespace Lidgren.Network\n{\n\t/// <summary>\n\t/// Class for generating random seeds\n\t/// </summary>\n\tpublic static class NetRandomSeed\n\t{\n\t\tprivate static int m_seedIncrement = -1640531527;\n\n\t\t/// <summary>\n\t\t/// Generates a 32 bit random seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic static uint GetUInt32()\n\t\t{\n\t\t\tulong seed = GetUInt64();\n\t\t\tuint low = (uint)seed;\n\t\t\tuint high = (uint)(seed >> 32);\n\t\t\treturn low ^ high;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generates a 64 bit random seed\n\t\t/// </summary>\n\t\t[CLSCompliant(false)]\n\t\tpublic static ulong GetUInt64()\n\t\t{\n#if !__ANDROID__ && !IOS && !UNITY_WEBPLAYER && !UNITY_ANDROID && !UNITY_IPHONE\n\t\t\tulong seed = (ulong)System.Diagnostics.Stopwatch.GetTimestamp();\n\t\t\tseed ^= (ulong)Environment.WorkingSet;\n\t\t\tulong s2 = (ulong)Interlocked.Increment(ref m_seedIncrement);\n\t\t\ts2 |= (((ulong)Guid.NewGuid().GetHashCode()) << 32);\n\t\t\tseed ^= s2;\n#else\n\t\t\tulong seed = (ulong)Environment.TickCount;\n\t\t\tseed |= (((ulong)(new object().GetHashCode())) << 32);\n\t\t\tulong s2 = (ulong)Guid.NewGuid().GetHashCode();\n\t\t\ts2 |= (((ulong)Interlocked.Increment(ref m_seedIncrement)) << 32);\n\t\t\tseed ^= s2;\n#endif\n\t\t\treturn seed;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetReceiverChannelBase.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal abstract class NetReceiverChannelBase\r\n\t{\r\n\t\tinternal NetPeer m_peer;\r\n\t\tinternal NetConnection m_connection;\r\n\r\n\t\tpublic NetReceiverChannelBase(NetConnection connection)\r\n\t\t{\r\n\t\t\tm_connection = connection;\r\n\t\t\tm_peer = connection.m_peer;\r\n\t\t}\r\n\r\n\t\tinternal abstract void ReceiveMessage(NetIncomingMessage msg);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetReliableOrderedReceiver.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal sealed class NetReliableOrderedReceiver : NetReceiverChannelBase\r\n\t{\r\n\t\tprivate int m_windowStart;\r\n\t\tprivate int m_windowSize;\r\n\t\tprivate NetBitVector m_earlyReceived;\r\n\t\tinternal NetIncomingMessage[] m_withheldMessages;\r\n\r\n\t\tpublic NetReliableOrderedReceiver(NetConnection connection, int windowSize)\r\n\t\t\t: base(connection)\r\n\t\t{\r\n\t\t\tm_windowSize = windowSize;\r\n\t\t\tm_withheldMessages = new NetIncomingMessage[windowSize];\r\n\t\t\tm_earlyReceived = new NetBitVector(windowSize);\r\n\t\t}\r\n\r\n\t\tprivate void AdvanceWindow()\r\n\t\t{\r\n\t\t\tm_earlyReceived.Set(m_windowStart % m_windowSize, false);\r\n\t\t\tm_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;\r\n\t\t}\r\n\r\n\t\tinternal override void ReceiveMessage(NetIncomingMessage message)\r\n\t\t{\r\n\t\t\tint relate = NetUtility.RelativeSequenceNumber(message.m_sequenceNumber, m_windowStart);\r\n\r\n\t\t\t// ack no matter what\r\n\t\t\tm_connection.QueueAck(message.m_receivedMessageType, message.m_sequenceNumber);\r\n\r\n\t\t\tif (relate == 0)\r\n\t\t\t{\r\n\t\t\t\t// Log(\"Received message #\" + message.SequenceNumber + \" right on time\");\r\n\r\n\t\t\t\t//\r\n\t\t\t\t// excellent, right on time\r\n\t\t\t\t//\r\n\t\t\t\t//m_peer.LogVerbose(\"Received RIGHT-ON-TIME \" + message);\r\n\r\n\t\t\t\tAdvanceWindow();\r\n\t\t\t\tm_peer.ReleaseMessage(message);\r\n\r\n\t\t\t\t// release withheld messages\r\n\t\t\t\tint nextSeqNr = (message.m_sequenceNumber + 1) % NetConstants.NumSequenceNumbers;\r\n\r\n\t\t\t\twhile (m_earlyReceived[nextSeqNr % m_windowSize])\r\n\t\t\t\t{\r\n\t\t\t\t\tmessage = m_withheldMessages[nextSeqNr % m_windowSize];\r\n\t\t\t\t\tNetException.Assert(message != null);\r\n\r\n\t\t\t\t\t// remove it from withheld messages\r\n\t\t\t\t\tm_withheldMessages[nextSeqNr % m_windowSize] = null;\r\n\r\n\t\t\t\t\tm_peer.LogVerbose(\"Releasing withheld message #\" + message);\r\n\r\n\t\t\t\t\tm_peer.ReleaseMessage(message);\r\n\r\n\t\t\t\t\tAdvanceWindow();\r\n\t\t\t\t\tnextSeqNr++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (relate < 0)\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogVerbose(\"Received message #\" + message.m_sequenceNumber + \" DROPPING DUPLICATE\");\r\n\t\t\t\t// duplicate\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// relate > 0 = early message\r\n\t\t\tif (relate > m_windowSize)\r\n\t\t\t{\r\n\t\t\t\t// too early message!\r\n\t\t\t\tm_peer.LogDebug(\"Received \" + message + \" TOO EARLY! Expected \" + m_windowStart);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_earlyReceived.Set(message.m_sequenceNumber % m_windowSize, true);\r\n\t\t\tm_peer.LogVerbose(\"Received \" + message + \" WITHHOLDING, waiting for \" + m_windowStart);\r\n\t\t\tm_withheldMessages[message.m_sequenceNumber % m_windowSize] = message;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetReliableSenderChannel.cs",
    "content": "﻿using System;\r\nusing System.Threading;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Sender part of Selective repeat ARQ for a particular NetChannel\r\n\t/// </summary>\r\n\tinternal sealed class NetReliableSenderChannel : NetSenderChannelBase\r\n\t{\r\n\t\tprivate NetConnection m_connection;\r\n\t\tprivate int m_windowStart;\r\n\t\tprivate int m_windowSize;\r\n\t\tprivate int m_sendStart;\r\n\r\n\t\tprivate NetBitVector m_receivedAcks;\r\n\t\tinternal NetStoredReliableMessage[] m_storedMessages;\r\n\r\n\t\tinternal float m_resendDelay;\r\n\r\n\t\tinternal override int WindowSize { get { return m_windowSize; } }\r\n\r\n\t\tinternal NetReliableSenderChannel(NetConnection connection, int windowSize)\r\n\t\t{\r\n\t\t\tm_connection = connection;\r\n\t\t\tm_windowSize = windowSize;\r\n\t\t\tm_windowStart = 0;\r\n\t\t\tm_sendStart = 0;\r\n\t\t\tm_receivedAcks = new NetBitVector(NetConstants.NumSequenceNumbers);\r\n\t\t\tm_storedMessages = new NetStoredReliableMessage[m_windowSize];\r\n\t\t\tm_queuedSends = new NetQueue<NetOutgoingMessage>(8);\r\n\t\t\tm_resendDelay = m_connection.GetResendDelay();\r\n\t\t}\r\n\r\n\t\tinternal override int GetAllowedSends()\r\n\t\t{\r\n\t\t\tint retval = m_windowSize - ((m_sendStart + NetConstants.NumSequenceNumbers) - m_windowStart) % NetConstants.NumSequenceNumbers;\r\n\t\t\tNetException.Assert(retval >= 0 && retval <= m_windowSize);\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\tinternal override void Reset()\r\n\t\t{\r\n\t\t\tm_receivedAcks.Clear();\r\n\t\t\tfor (int i = 0; i < m_storedMessages.Length; i++)\r\n\t\t\t\tm_storedMessages[i].Reset();\r\n\t\t\tm_queuedSends.Clear();\r\n\t\t\tm_windowStart = 0;\r\n\t\t\tm_sendStart = 0;\r\n\t\t}\r\n\r\n\t\tinternal override NetSendResult Enqueue(NetOutgoingMessage message)\r\n\t\t{\r\n\t\t\tm_queuedSends.Enqueue(message);\r\n\t\t\tif (m_queuedSends.Count <= GetAllowedSends())\r\n\t\t\t\treturn NetSendResult.Sent;\r\n\t\t\treturn NetSendResult.Queued;\r\n\t\t}\r\n\r\n\t\t// call this regularely\r\n\t\tinternal override void SendQueuedMessages(float now)\r\n\t\t{\r\n\t\t\t//\r\n\t\t\t// resends\r\n\t\t\t//\r\n\t\t\tfor (int i = 0; i < m_storedMessages.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tNetOutgoingMessage om = m_storedMessages[i].Message;\r\n\t\t\t\tif (om == null)\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\tfloat t = m_storedMessages[i].LastSent;\r\n\t\t\t\tif (t > 0 && (now - t) > m_resendDelay)\r\n\t\t\t\t{\r\n\t\t\t\t\t// deduce sequence number\r\n\t\t\t\t\t/*\r\n\t\t\t\t\tint startSlot = m_windowStart % m_windowSize;\r\n\t\t\t\t\tint seqNr = m_windowStart;\r\n\t\t\t\t\twhile (startSlot != i)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstartSlot--;\r\n\t\t\t\t\t\tif (startSlot < 0)\r\n\t\t\t\t\t\t\tstartSlot = m_windowSize - 1;\r\n\t\t\t\t\t\tseqNr--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t*/\r\n\r\n\t\t\t\t\t//m_connection.m_peer.LogVerbose(\"Resending due to delay #\" + m_storedMessages[i].SequenceNumber + \" \" + om.ToString());\r\n\t\t\t\t\tm_connection.m_statistics.MessageResent(MessageResendReason.Delay);\r\n\r\n\t\t\t\t\tm_connection.QueueSendMessage(om, m_storedMessages[i].SequenceNumber);\r\n\r\n\t\t\t\t\tm_storedMessages[i].LastSent = now;\r\n\t\t\t\t\tm_storedMessages[i].NumSent++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tint num = GetAllowedSends();\r\n\t\t\tif (num < 1)\r\n\t\t\t\treturn;\r\n\r\n\t\t\t// queued sends\r\n\t\t\twhile (m_queuedSends.Count > 0 && num > 0)\r\n\t\t\t{\r\n\t\t\t\tNetOutgoingMessage om;\r\n\t\t\t\tif (m_queuedSends.TryDequeue(out om))\r\n\t\t\t\t\tExecuteSend(now, om);\r\n\t\t\t\tnum--;\r\n\t\t\t\tNetException.Assert(num == GetAllowedSends());\r\n\t\t\t}\r\n\t\t}\r\n\t\t\t\r\n\t\tprivate void ExecuteSend(float now, NetOutgoingMessage message)\r\n\t\t{\r\n\t\t\tint seqNr = m_sendStart;\r\n\t\t\tm_sendStart = (m_sendStart + 1) % NetConstants.NumSequenceNumbers;\r\n\r\n\t\t\tm_connection.QueueSendMessage(message, seqNr);\r\n\r\n\t\t\tint storeIndex = seqNr % m_windowSize;\r\n\t\t\tNetException.Assert(m_storedMessages[storeIndex].Message == null);\r\n\r\n\t\t\tm_storedMessages[storeIndex].NumSent++;\r\n\t\t\tm_storedMessages[storeIndex].Message = message;\r\n\t\t\tm_storedMessages[storeIndex].LastSent = now;\r\n\t\t\tm_storedMessages[storeIndex].SequenceNumber = seqNr;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tprivate void DestoreMessage(int storeIndex)\r\n\t\t{\r\n\t\t\tNetOutgoingMessage storedMessage = m_storedMessages[storeIndex].Message;\r\n#if DEBUG\r\n\t\t\tif (storedMessage == null)\r\n\t\t\t\tthrow new NetException(\"m_storedMessages[\" + storeIndex + \"].Message is null; sent \" + m_storedMessages[storeIndex].NumSent + \" times, last time \" + (NetTime.Now - m_storedMessages[storeIndex].LastSent) + \" seconds ago\");\r\n#else\r\n\t\t\tif (storedMessage != null)\r\n\t\t\t{\r\n#endif\r\n\t\t\tif (Interlocked.Decrement(ref storedMessage.m_recyclingCount) <= 0)\r\n\t\t\t\tm_connection.m_peer.Recycle(storedMessage);\r\n\r\n#if !DEBUG\r\n\t\t\t}\r\n#endif\r\n\t\t\tm_storedMessages[storeIndex] = new NetStoredReliableMessage();\r\n\t\t}\r\n\r\n\t\t// remoteWindowStart is remote expected sequence number; everything below this has arrived properly\r\n\t\t// seqNr is the actual nr received\r\n\t\tinternal override void ReceiveAcknowledge(float now, int seqNr)\r\n\t\t{\r\n\t\t\t// late (dupe), on time or early ack?\r\n\t\t\tint relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart);\r\n\r\n\t\t\tif (relate < 0)\r\n\t\t\t{\r\n\t\t\t\t//m_connection.m_peer.LogDebug(\"Received late/dupe ack for #\" + seqNr);\r\n\t\t\t\treturn; // late/duplicate ack\r\n\t\t\t}\r\n\r\n\t\t\tif (relate == 0)\r\n\t\t\t{\r\n\t\t\t\t//m_connection.m_peer.LogDebug(\"Received right-on-time ack for #\" + seqNr);\r\n\r\n\t\t\t\t// ack arrived right on time\r\n\t\t\t\tNetException.Assert(seqNr == m_windowStart);\r\n\r\n\t\t\t\tm_receivedAcks[m_windowStart] = false;\r\n\t\t\t\tDestoreMessage(m_windowStart % m_windowSize);\r\n\t\t\t\tm_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;\r\n\r\n\t\t\t\t// advance window if we already have early acks\r\n\t\t\t\twhile (m_receivedAcks.Get(m_windowStart))\r\n\t\t\t\t{\r\n\t\t\t\t\t//m_connection.m_peer.LogDebug(\"Using early ack for #\" + m_windowStart + \"...\");\r\n\t\t\t\t\tm_receivedAcks[m_windowStart] = false;\r\n\t\t\t\t\tDestoreMessage(m_windowStart % m_windowSize);\r\n\r\n\t\t\t\t\tNetException.Assert(m_storedMessages[m_windowStart % m_windowSize].Message == null); // should already be destored\r\n\t\t\t\t\tm_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;\r\n\t\t\t\t\t//m_connection.m_peer.LogDebug(\"Advancing window to #\" + m_windowStart);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//\r\n\t\t\t// early ack... (if it has been sent!)\r\n\t\t\t//\r\n\t\t\t// If it has been sent either the m_windowStart message was lost\r\n\t\t\t// ... or the ack for that message was lost\r\n\t\t\t//\r\n\r\n\t\t\t//m_connection.m_peer.LogDebug(\"Received early ack for #\" + seqNr);\r\n\r\n\t\t\tint sendRelate = NetUtility.RelativeSequenceNumber(seqNr, m_sendStart);\r\n\t\t\tif (sendRelate <= 0)\r\n\t\t\t{\r\n\t\t\t\t// yes, we've sent this message - it's an early (but valid) ack\r\n\t\t\t\tif (m_receivedAcks[seqNr])\r\n\t\t\t\t{\r\n\t\t\t\t\t// we've already destored/been acked for this message\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tm_receivedAcks[seqNr] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (sendRelate > 0)\r\n\t\t\t{\r\n\t\t\t\t// uh... we haven't sent this message yet? Weird, dupe or error...\r\n\t\t\t\tNetException.Assert(false, \"Got ack for message not yet sent?\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Ok, lets resend all missing acks\r\n\t\t\tint rnr = seqNr;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\trnr--;\r\n\t\t\t\tif (rnr < 0)\r\n\t\t\t\t\trnr = NetConstants.NumSequenceNumbers - 1;\r\n\r\n\t\t\t\tif (m_receivedAcks[rnr])\r\n\t\t\t\t{\r\n\t\t\t\t\t// m_connection.m_peer.LogDebug(\"Not resending #\" + rnr + \" (since we got ack)\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tint slot = rnr % m_windowSize;\r\n\t\t\t\t\tNetException.Assert(m_storedMessages[slot].Message != null);\r\n\t\t\t\t\tif (m_storedMessages[slot].NumSent == 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// just sent once; resend immediately since we found gap in ack sequence\r\n\t\t\t\t\t\tNetOutgoingMessage rmsg = m_storedMessages[slot].Message;\r\n\t\t\t\t\t\t//m_connection.m_peer.LogVerbose(\"Resending #\" + rnr + \" (\" + rmsg + \")\");\r\n\r\n\t\t\t\t\t\tif (now - m_storedMessages[slot].LastSent < (m_resendDelay * 0.35f))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// already resent recently\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tm_storedMessages[slot].LastSent = now;\r\n\t\t\t\t\t\t\tm_storedMessages[slot].NumSent++;\r\n\t\t\t\t\t\t\tm_connection.m_statistics.MessageResent(MessageResendReason.HoleInSequence);\r\n\t\t\t\t\t\t\tm_connection.QueueSendMessage(rmsg, rnr);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t} while (rnr != m_windowStart);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetReliableSequencedReceiver.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal sealed class NetReliableSequencedReceiver : NetReceiverChannelBase\r\n\t{\r\n\t\tprivate int m_windowStart;\r\n\t\tprivate int m_windowSize;\r\n\r\n\t\tpublic NetReliableSequencedReceiver(NetConnection connection, int windowSize)\r\n\t\t\t: base(connection)\r\n\t\t{\r\n\t\t\tm_windowSize = windowSize;\r\n\t\t}\r\n\r\n\t\tprivate void AdvanceWindow()\r\n\t\t{\r\n\t\t\tm_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;\r\n\t\t}\r\n\r\n\t\tinternal override void ReceiveMessage(NetIncomingMessage message)\r\n\t\t{\r\n\t\t\tint nr = message.m_sequenceNumber;\r\n\r\n\t\t\tint relate = NetUtility.RelativeSequenceNumber(nr, m_windowStart);\r\n\r\n\t\t\t// ack no matter what\r\n\t\t\tm_connection.QueueAck(message.m_receivedMessageType, nr);\r\n\r\n\t\t\tif (relate == 0)\r\n\t\t\t{\r\n\t\t\t\t// Log(\"Received message #\" + message.SequenceNumber + \" right on time\");\r\n\r\n\t\t\t\t//\r\n\t\t\t\t// excellent, right on time\r\n\t\t\t\t//\r\n\r\n\t\t\t\tAdvanceWindow();\r\n\t\t\t\tm_peer.ReleaseMessage(message);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (relate < 0)\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogVerbose(\"Received message #\" + message.m_sequenceNumber + \" DROPPING LATE or DUPE\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// relate > 0 = early message\r\n\t\t\tif (relate > m_windowSize)\r\n\t\t\t{\r\n\t\t\t\t// too early message!\r\n\t\t\t\tm_peer.LogDebug(\"Received \" + message + \" TOO EARLY! Expected \" + m_windowStart);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// ok\r\n\t\t\tm_windowStart = (m_windowStart + relate) % NetConstants.NumSequenceNumbers;\r\n\t\t\tm_peer.ReleaseMessage(message);\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetReliableUnorderedReceiver.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal sealed class NetReliableUnorderedReceiver : NetReceiverChannelBase\r\n\t{\r\n\t\tprivate int m_windowStart;\r\n\t\tprivate int m_windowSize;\r\n\t\tprivate NetBitVector m_earlyReceived;\r\n\r\n\t\tpublic NetReliableUnorderedReceiver(NetConnection connection, int windowSize)\r\n\t\t\t: base(connection)\r\n\t\t{\r\n\t\t\tm_windowSize = windowSize;\r\n\t\t\tm_earlyReceived = new NetBitVector(windowSize);\r\n\t\t}\r\n\r\n\t\tprivate void AdvanceWindow()\r\n\t\t{\r\n\t\t\tm_earlyReceived.Set(m_windowStart % m_windowSize, false);\r\n\t\t\tm_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;\r\n\t\t}\r\n\r\n\t\tinternal override void ReceiveMessage(NetIncomingMessage message)\r\n\t\t{\r\n\t\t\tint relate = NetUtility.RelativeSequenceNumber(message.m_sequenceNumber, m_windowStart);\r\n\r\n\t\t\t// ack no matter what\r\n\t\t\tm_connection.QueueAck(message.m_receivedMessageType, message.m_sequenceNumber);\r\n\r\n\t\t\tif (relate == 0)\r\n\t\t\t{\r\n\t\t\t\t// Log(\"Received message #\" + message.SequenceNumber + \" right on time\");\r\n\r\n\t\t\t\t//\r\n\t\t\t\t// excellent, right on time\r\n\t\t\t\t//\r\n\t\t\t\t//m_peer.LogVerbose(\"Received RIGHT-ON-TIME \" + message);\r\n\r\n\t\t\t\tAdvanceWindow();\r\n\t\t\t\tm_peer.ReleaseMessage(message);\r\n\r\n\t\t\t\t// release withheld messages\r\n\t\t\t\tint nextSeqNr = (message.m_sequenceNumber + 1) % NetConstants.NumSequenceNumbers;\r\n\r\n\t\t\t\twhile (m_earlyReceived[nextSeqNr % m_windowSize])\r\n\t\t\t\t{\r\n\t\t\t\t\t//message = m_withheldMessages[nextSeqNr % m_windowSize];\r\n\t\t\t\t\t//NetException.Assert(message != null);\r\n\r\n\t\t\t\t\t// remove it from withheld messages\r\n\t\t\t\t\t//m_withheldMessages[nextSeqNr % m_windowSize] = null;\r\n\r\n\t\t\t\t\t//m_peer.LogVerbose(\"Releasing withheld message #\" + message);\r\n\r\n\t\t\t\t\t//m_peer.ReleaseMessage(message);\r\n\r\n\t\t\t\t\tAdvanceWindow();\r\n\t\t\t\t\tnextSeqNr++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (relate < 0)\r\n\t\t\t{\r\n\t\t\t\t// duplicate\r\n\t\t\t\tm_peer.LogVerbose(\"Received message #\" + message.m_sequenceNumber + \" DROPPING DUPLICATE\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// relate > 0 = early message\r\n\t\t\tif (relate > m_windowSize)\r\n\t\t\t{\r\n\t\t\t\t// too early message!\r\n\t\t\t\tm_peer.LogDebug(\"Received \" + message + \" TOO EARLY! Expected \" + m_windowStart);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_earlyReceived.Set(message.m_sequenceNumber % m_windowSize, true);\r\n\t\t\t//m_peer.LogVerbose(\"Received \" + message + \" WITHHOLDING, waiting for \" + m_windowStart);\r\n\t\t\t//m_withheldMessages[message.m_sequenceNumber % m_windowSize] = message;\r\n\r\n\t\t\tm_peer.ReleaseMessage(message);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetSRP.cs",
    "content": "﻿#define USE_SHA256\r\n\r\nusing System;\r\nusing System.Security.Cryptography;\r\nusing System.Text;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Helper methods for implementing SRP authentication\r\n\t/// </summary>\r\n\tpublic static class NetSRP\r\n\t{\r\n\t\tprivate static readonly NetBigInteger N = new NetBigInteger(\"0115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3\", 16);\r\n\t\tprivate static readonly NetBigInteger g = NetBigInteger.Two;\r\n\t\tprivate static readonly NetBigInteger k = ComputeMultiplier();\r\n\r\n\t\tprivate static HashAlgorithm GetHashAlgorithm()\r\n\t\t{\r\n#if USE_SHA256\r\n\t\t\t// this does not seem to work as of yet\r\n\t\t\treturn SHA256.Create();\r\n#else\r\n\t\t\treturn SHA1.Create();\r\n#endif\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compute multiplier (k)\r\n\t\t/// </summary>\r\n\t\tprivate static NetBigInteger ComputeMultiplier()\r\n\t\t{\r\n\t\t\tstring one = NetUtility.ToHexString(N.ToByteArrayUnsigned());\r\n\t\t\tstring two = NetUtility.ToHexString(g.ToByteArrayUnsigned());\r\n\r\n\t\t\tstring ccstr = one + two.PadLeft(one.Length, '0');\r\n\t\t\tbyte[] cc = NetUtility.ToByteArray(ccstr);\r\n\r\n\t\t\tvar sha = GetHashAlgorithm();\r\n\t\t\tvar ccHashed = sha.ComputeHash(cc);\r\n\r\n\t\t\treturn new NetBigInteger(NetUtility.ToHexString(ccHashed), 16);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create 16 bytes of random salt\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] CreateRandomSalt()\r\n\t\t{\r\n\t\t\tbyte[] retval = new byte[16];\r\n\t\t\tCryptoRandom.Instance.NextBytes(retval);\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create 32 bytes of random ephemeral value\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] CreateRandomEphemeral()\r\n\t\t{\r\n\t\t\tbyte[] retval = new byte[32];\r\n\t\t\tCryptoRandom.Instance.NextBytes(retval);\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computer private key (x)\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] ComputePrivateKey(string username, string password, byte[] salt)\r\n\t\t{\r\n\t\t\tvar sha = GetHashAlgorithm();\r\n\r\n\t\t\tbyte[] tmp = Encoding.UTF8.GetBytes(username + \":\" + password);\r\n\t\t\tbyte[] innerHash = sha.ComputeHash(tmp);\r\n\r\n\t\t\tbyte[] total = new byte[innerHash.Length + salt.Length];\r\n\t\t\tBuffer.BlockCopy(salt, 0, total, 0, salt.Length);\r\n\t\t\tBuffer.BlockCopy(innerHash, 0, total, salt.Length, innerHash.Length);\r\n\r\n\t\t\t// x   ie. H(salt || H(username || \":\" || password))\r\n\t\t\treturn new NetBigInteger(NetUtility.ToHexString(sha.ComputeHash(total)), 16).ToByteArrayUnsigned();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a verifier that the server can later use to authenticate users later on (v)\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] ComputeServerVerifier(byte[] privateKey)\r\n\t\t{\r\n\t\t\tNetBigInteger x = new NetBigInteger(NetUtility.ToHexString(privateKey), 16);\r\n\r\n\t\t\t// Verifier (v) = g^x (mod N)\r\n\t\t\tvar serverVerifier = g.ModPow(x, N);\r\n\r\n\t\t\treturn serverVerifier.ToByteArrayUnsigned();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// SHA hash data\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] Hash(byte[] data)\r\n\t\t{\r\n\t\t\tvar sha = GetHashAlgorithm();\r\n\t\t\treturn sha.ComputeHash(data);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compute client public ephemeral value (A)\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] ComputeClientEphemeral(byte[] clientPrivateEphemeral) // a\r\n\t\t{\r\n\t\t\t// A= g^a (mod N) \r\n\t\t\tNetBigInteger a = new NetBigInteger(NetUtility.ToHexString(clientPrivateEphemeral), 16);\r\n\t\t\tNetBigInteger retval = g.ModPow(a, N);\r\n\r\n\t\t\treturn retval.ToByteArrayUnsigned();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compute server ephemeral value (B)\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] ComputeServerEphemeral(byte[] serverPrivateEphemeral, byte[] verifier) // b\r\n\t\t{\r\n\t\t\tvar b = new NetBigInteger(NetUtility.ToHexString(serverPrivateEphemeral), 16);\r\n\t\t\tvar v = new NetBigInteger(NetUtility.ToHexString(verifier), 16);\r\n\r\n\t\t\t// B = kv + g^b (mod N) \r\n\t\t\tvar bb = g.ModPow(b, N);\r\n\t\t\tvar kv = v.Multiply(k);\r\n\t\t\tvar B = (kv.Add(bb)).Mod(N);\r\n\r\n\t\t\treturn B.ToByteArrayUnsigned();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compute intermediate value (u)\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] ComputeU(byte[] clientPublicEphemeral, byte[] serverPublicEphemeral)\r\n\t\t{\r\n\t\t\t// u = SHA-1(A || B)\r\n\t\t\tstring one = NetUtility.ToHexString(clientPublicEphemeral);\r\n\t\t\tstring two = NetUtility.ToHexString(serverPublicEphemeral);\r\n\r\n\t\t\tint len = 66; //  Math.Max(one.Length, two.Length);\r\n\t\t\tstring ccstr = one.PadLeft(len, '0') + two.PadLeft(len, '0');\r\n\r\n\t\t\tbyte[] cc = NetUtility.ToByteArray(ccstr);\r\n\r\n\t\t\tvar sha = GetHashAlgorithm();\r\n\t\t\tvar ccHashed = sha.ComputeHash(cc);\r\n\r\n\t\t\treturn new NetBigInteger(NetUtility.ToHexString(ccHashed), 16).ToByteArrayUnsigned();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the server session value\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] ComputeServerSessionValue(byte[] clientPublicEphemeral, byte[] verifier, byte[] udata, byte[] serverPrivateEphemeral)\r\n\t\t{\r\n\t\t\t// S = (Av^u) ^ b (mod N)\r\n\t\t\tvar A = new NetBigInteger(NetUtility.ToHexString(clientPublicEphemeral), 16);\r\n\t\t\tvar v = new NetBigInteger(NetUtility.ToHexString(verifier), 16);\r\n\t\t\tvar u = new NetBigInteger(NetUtility.ToHexString(udata), 16);\r\n\t\t\tvar b = new NetBigInteger(NetUtility.ToHexString(serverPrivateEphemeral), 16);\r\n\r\n\t\t\tNetBigInteger retval = v.ModPow(u, N).Multiply(A).Mod(N).ModPow(b, N).Mod(N);\r\n\r\n\t\t\treturn retval.ToByteArrayUnsigned();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the client session value\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] ComputeClientSessionValue(byte[] serverPublicEphemeral, byte[] xdata,  byte[] udata, byte[] clientPrivateEphemeral)\r\n\t\t{\r\n\t\t\t// (B - kg^x) ^ (a + ux)   (mod N)\r\n\t\t\tvar B = new NetBigInteger(NetUtility.ToHexString(serverPublicEphemeral), 16);\r\n\t\t\tvar x = new NetBigInteger(NetUtility.ToHexString(xdata), 16);\r\n\t\t\tvar u = new NetBigInteger(NetUtility.ToHexString(udata), 16);\r\n\t\t\tvar a = new NetBigInteger(NetUtility.ToHexString(clientPrivateEphemeral), 16);\r\n\r\n\t\t\tvar bx = g.ModPow(x, N);\r\n\t\t\tvar btmp = B.Add(N.Multiply(k)).Subtract(bx.Multiply(k)).Mod(N);\r\n\t\t\treturn btmp.ModPow(x.Multiply(u).Add(a), N).ToByteArrayUnsigned();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create XTEA symmetrical encryption object from sessionValue\r\n\t\t/// </summary>\r\n\t\tpublic static NetXtea CreateEncryption(NetPeer peer, byte[] sessionValue)\r\n\t\t{\r\n\t\t\tvar sha = GetHashAlgorithm();\r\n\t\t\tvar hash = sha.ComputeHash(sessionValue);\r\n\t\t\t\r\n\t\t\tvar key = new byte[16];\r\n\t\t\tfor(int i=0;i<16;i++)\r\n\t\t\t{\r\n\t\t\t\tkey[i] = hash[i];\r\n\t\t\t\tfor (int j = 1; j < hash.Length / 16; j++)\r\n\t\t\t\t\tkey[i] ^= hash[i + (j * 16)];\r\n\t\t\t}\r\n\r\n\t\t\treturn new NetXtea(peer, key);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetSendResult.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Result of a SendMessage call\r\n\t/// </summary>\r\n\tpublic enum NetSendResult\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Message failed to enqueue because there is no connection\r\n\t\t/// </summary>\r\n\t\tFailedNotConnected = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Message was immediately sent\r\n\t\t/// </summary>\r\n\t\tSent = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Message was queued for delivery\r\n\t\t/// </summary>\r\n\t\tQueued = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Message was dropped immediately since too many message were queued\r\n\t\t/// </summary>\r\n\t\tDropped = 3\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetSenderChannelBase.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal abstract class NetSenderChannelBase\r\n\t{\r\n\t\t// access this directly to queue things in this channel\r\n\t\tinternal NetQueue<NetOutgoingMessage> m_queuedSends;\r\n\r\n\t\tinternal abstract int WindowSize { get; }\r\n\r\n\t\tinternal abstract int GetAllowedSends();\r\n\r\n\t\tinternal abstract NetSendResult Enqueue(NetOutgoingMessage message);\r\n\t\tinternal abstract void SendQueuedMessages(float now);\r\n\t\tinternal abstract void Reset();\r\n\t\tinternal abstract void ReceiveAcknowledge(float now, int sequenceNumber);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetServer.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Specialized version of NetPeer used for \"server\" peers\r\n\t/// </summary>\r\n\tpublic class NetServer : NetPeer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// NetServer constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetServer(NetPeerConfiguration config)\r\n\t\t\t: base(config)\r\n\t\t{\r\n\t\t\tconfig.AcceptIncomingConnections = true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to all connections\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"msg\">The message to send</param>\r\n\t\t/// <param name=\"method\">How to deliver the message</param>\r\n\t\tpublic void SendToAll(NetOutgoingMessage msg, NetDeliveryMethod method)\r\n\t\t{\r\n\t\t\tvar all = this.Connections;\r\n\t\t\tif (all.Count <= 0)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tSendMessage(msg, all, method, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Send a message to all connections except one\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"msg\">The message to send</param>\r\n\t\t/// <param name=\"method\">How to deliver the message</param>\r\n\t\t/// <param name=\"except\">Don't send to this particular connection</param>\r\n\t\t/// <param name=\"sequenceChannel\">Which sequence channel to use for the message</param>\r\n\t\tpublic void SendToAll(NetOutgoingMessage msg, NetConnection except, NetDeliveryMethod method, int sequenceChannel)\r\n\t\t{\r\n\t\t\tvar all = this.Connections;\r\n\t\t\tif (all.Count <= 0)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (except == null)\r\n\t\t\t{\r\n\t\t\t\tSendMessage(msg, all, method, sequenceChannel);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tList<NetConnection> recipients = new List<NetConnection>(all.Count - 1);\r\n\t\t\tforeach (var conn in all)\r\n\t\t\t\tif (conn != except)\r\n\t\t\t\t\trecipients.Add(conn);\r\n\r\n\t\t\tif (recipients.Count > 0)\r\n\t\t\t\tSendMessage(msg, recipients, method, sequenceChannel);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents this object\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn \"[NetServer \" + ConnectionsCount + \" connections]\";\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetStoredReliableMessage.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal struct NetStoredReliableMessage\r\n\t{\r\n\t\tpublic int NumSent;\r\n\t\tpublic float LastSent;\r\n\t\tpublic NetOutgoingMessage Message;\r\n\t\tpublic int SequenceNumber;\r\n\r\n\t\tpublic void Reset()\r\n\t\t{\r\n\t\t\tNumSent = 0;\r\n\t\t\tLastSent = 0;\r\n\t\t\tMessage = null;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetTime.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n*/\r\n#define IS_STOPWATCH_AVAILABLE\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Time service\r\n\t/// </summary>\r\n\tpublic static class NetTime\r\n\t{\r\n#if IS_STOPWATCH_AVAILABLE\r\n\t\tprivate static readonly long s_timeInitialized = Stopwatch.GetTimestamp();\r\n\t\tprivate static readonly double s_dInvFreq = 1.0 / (double)Stopwatch.Frequency;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get number of seconds since the application started\r\n\t\t/// </summary>\r\n\t\tpublic static double Now { get { return (double)(Stopwatch.GetTimestamp() - s_timeInitialized) * s_dInvFreq; } }\r\n#else\r\n\t\tprivate static readonly uint s_timeInitialized = (uint)Environment.TickCount;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get number of seconds since the application started\r\n\t\t/// </summary>\r\n\t\tpublic static double Now { get { return (double)((uint)Environment.TickCount - s_timeInitialized) / 1000.0; } }\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Given seconds it will output a human friendly readable string (milliseconds if less than 60 seconds)\r\n\t\t/// </summary>\r\n\t\tpublic static string ToReadable(double seconds)\r\n\t\t{\r\n\t\t\tif (seconds > 60)\r\n\t\t\t\treturn TimeSpan.FromSeconds(seconds).ToString();\r\n\t\t\treturn (seconds * 1000.0).ToString(\"N2\") + \" ms\";\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetTuple.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t// replace with BCL 4.0 Tuple<> when appropriate\r\n\tinternal struct NetTuple<A, B>\r\n\t{\r\n\t\tpublic A Item1;\r\n\t\tpublic B Item2;\r\n\r\n\t\tpublic NetTuple(A item1, B item2)\r\n\t\t{\r\n\t\t\tItem1 = item1;\r\n\t\t\tItem2 = item2;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetUPnP.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Net;\r\nusing System.Net.Sockets;\r\nusing System.Threading;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Status of the UPnP capabilities\r\n\t/// </summary>\r\n\tpublic enum UPnPStatus\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Still discovering UPnP capabilities\r\n\t\t/// </summary>\r\n\t\tDiscovering,\r\n\r\n\t\t/// <summary>\r\n\t\t/// UPnP is not available\r\n\t\t/// </summary>\r\n\t\tNotAvailable,\r\n\r\n\t\t/// <summary>\r\n\t\t/// UPnP is available and ready to use\r\n\t\t/// </summary>\r\n\t\tAvailable\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// UPnP support class\r\n\t/// </summary>\r\n\tpublic class NetUPnP\r\n\t{\r\n\t\tprivate const int c_discoveryTimeOutMillis = 1000;\r\n\r\n\t\tprivate string m_serviceUrl;\r\n\t\tprivate string m_serviceName = \"\";\r\n\t\tprivate NetPeer m_peer;\r\n\t\tprivate ManualResetEvent m_discoveryComplete = new ManualResetEvent(false);\r\n\r\n\t\tinternal float m_discoveryResponseDeadline;\r\n\r\n\t\tprivate UPnPStatus m_status;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Status of the UPnP capabilities of this NetPeer\r\n\t\t/// </summary>\r\n\t\tpublic UPnPStatus Status { get { return m_status; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// NetUPnP constructor\r\n\t\t/// </summary>\r\n\t\tpublic NetUPnP(NetPeer peer)\r\n\t\t{\r\n\t\t\tm_peer = peer;\r\n\t\t\tm_discoveryResponseDeadline = float.MinValue;\r\n\t\t}\r\n\r\n\t\tinternal void Discover(NetPeer peer)\r\n\t\t{\r\n\t\t\tstring str =\r\n\"M-SEARCH * HTTP/1.1\\r\\n\" +\r\n\"HOST: 239.255.255.250:1900\\r\\n\" +\r\n\"ST:upnp:rootdevice\\r\\n\" +\r\n\"MAN:\\\"ssdp:discover\\\"\\r\\n\" +\r\n\"MX:3\\r\\n\\r\\n\";\r\n\r\n\t\t\tm_status = UPnPStatus.Discovering;\r\n\r\n\t\t\tbyte[] arr = System.Text.Encoding.UTF8.GetBytes(str);\r\n\r\n\t\t\tm_peer.LogDebug(\"Attempting UPnP discovery\");\r\n\t\t\tpeer.Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);\r\n\t\t\tpeer.RawSend(arr, 0, arr.Length, new IPEndPoint(IPAddress.Broadcast, 1900));\r\n\t\t\tpeer.Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false);\r\n\r\n\t\t\t// allow some extra time for router to respond\r\n\t\t\t// System.Threading.Thread.Sleep(50);\r\n\r\n\t\t\tm_discoveryResponseDeadline = (float)NetTime.Now + 6.0f; // arbitrarily chosen number, router gets 6 seconds to respond\r\n\t\t\tm_status = UPnPStatus.Discovering;\r\n\t\t}\r\n\r\n\t\tinternal void ExtractServiceUrl(string resp)\r\n\t\t{\r\n#if !DEBUG\r\n\t\t\ttry\r\n\t\t\t{\r\n#endif\r\n\t\t\tXmlDocument desc = new XmlDocument();\r\n\t\t\tdesc.Load(WebRequest.Create(resp).GetResponse().GetResponseStream());\r\n\t\t\tXmlNamespaceManager nsMgr = new XmlNamespaceManager(desc.NameTable);\r\n\t\t\tnsMgr.AddNamespace(\"tns\", \"urn:schemas-upnp-org:device-1-0\");\r\n\t\t\tXmlNode typen = desc.SelectSingleNode(\"//tns:device/tns:deviceType/text()\", nsMgr);\r\n\t\t\tif (!typen.Value.Contains(\"InternetGatewayDevice\"))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tm_serviceName = \"WANIPConnection\";\r\n\t\t\tXmlNode node = desc.SelectSingleNode(\"//tns:service[tns:serviceType=\\\"urn:schemas-upnp-org:service:\" + m_serviceName + \":1\\\"]/tns:controlURL/text()\", nsMgr);\r\n\t\t\tif (node == null)\r\n\t\t\t{\r\n\t\t\t\t//try another service name\r\n\t\t\t\tm_serviceName = \"WANPPPConnection\";\r\n\t\t\t\tnode = desc.SelectSingleNode(\"//tns:service[tns:serviceType=\\\"urn:schemas-upnp-org:service:\" + m_serviceName + \":1\\\"]/tns:controlURL/text()\", nsMgr);\r\n\t\t\t\tif (node == null)\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tm_serviceUrl = CombineUrls(resp, node.Value);\r\n\t\t\tm_peer.LogDebug(\"UPnP service ready\");\r\n\t\t\tm_status = UPnPStatus.Available;\r\n\t\t\tm_discoveryComplete.Set();\r\n#if !DEBUG\r\n\t\t\t}\r\n\t\t\tcatch\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogVerbose(\"Exception ignored trying to parse UPnP XML response\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n#endif\r\n\t\t}\r\n\r\n\t\tprivate static string CombineUrls(string gatewayURL, string subURL)\r\n\t\t{\r\n\t\t\t// Is Control URL an absolute URL?\r\n\t\t\tif ((subURL.Contains(\"http:\")) || (subURL.Contains(\".\")))\r\n\t\t\t\treturn subURL;\r\n\r\n\t\t\tgatewayURL = gatewayURL.Replace(\"http://\", \"\");  // strip any protocol\r\n\t\t\tint n = gatewayURL.IndexOf(\"/\");\r\n\t\t\tif (n != -1)\r\n\t\t\t\tgatewayURL = gatewayURL.Substring(0, n);  // Use first portion of URL\r\n\t\t\treturn \"http://\" + gatewayURL + subURL;\r\n\t\t}\r\n\r\n\t\tprivate bool CheckAvailability()\r\n\t\t{\r\n\t\t\tswitch (m_status)\r\n\t\t\t{\r\n\t\t\t\tcase UPnPStatus.NotAvailable:\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tcase UPnPStatus.Available:\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tcase UPnPStatus.Discovering:\r\n\t\t\t\t\tif (m_discoveryComplete.WaitOne(c_discoveryTimeOutMillis))\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\tif (NetTime.Now > m_discoveryResponseDeadline)\r\n\t\t\t\t\t\tm_status = UPnPStatus.NotAvailable;\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Add a forwarding rule to the router using UPnP\r\n\t\t/// </summary>\r\n\t\tpublic bool ForwardPort(int port, string description)\r\n\t\t{\r\n\t\t\tif (!CheckAvailability())\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tIPAddress mask;\r\n\t\t\tvar client = NetUtility.GetMyAddress(out mask);\r\n\t\t\tif (client == null)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tSOAPRequest(m_serviceUrl,\r\n\t\t\t\t\t\"<u:AddPortMapping xmlns:u=\\\"urn:schemas-upnp-org:service:\" + m_serviceName + \":1\\\">\" +\r\n\t\t\t\t\t\"<NewRemoteHost></NewRemoteHost>\" +\r\n\t\t\t\t\t\"<NewExternalPort>\" + port.ToString() + \"</NewExternalPort>\" +\r\n\t\t\t\t\t\"<NewProtocol>\" + ProtocolType.Udp.ToString().ToUpper(System.Globalization.CultureInfo.InvariantCulture) + \"</NewProtocol>\" +\r\n\t\t\t\t\t\"<NewInternalPort>\" + port.ToString() + \"</NewInternalPort>\" +\r\n\t\t\t\t\t\"<NewInternalClient>\" + client.ToString() + \"</NewInternalClient>\" +\r\n\t\t\t\t\t\"<NewEnabled>1</NewEnabled>\" +\r\n\t\t\t\t\t\"<NewPortMappingDescription>\" + description + \"</NewPortMappingDescription>\" +\r\n\t\t\t\t\t\"<NewLeaseDuration>0</NewLeaseDuration>\" +\r\n\t\t\t\t\t\"</u:AddPortMapping>\",\r\n\t\t\t\t\t\"AddPortMapping\");\r\n\r\n\t\t\t\tm_peer.LogDebug(\"Sent UPnP port forward request\");\r\n\t\t\t\tSystem.Threading.Thread.Sleep(50);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogWarning(\"UPnP port forward failed: \" + ex.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Delete a forwarding rule from the router using UPnP\r\n\t\t/// </summary>\r\n\t\tpublic bool DeleteForwardingRule(int port)\r\n\t\t{\r\n\t\t\tif (!CheckAvailability())\r\n\t\t\t\treturn false;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tSOAPRequest(m_serviceUrl,\r\n\t\t\t\t\"<u:DeletePortMapping xmlns:u=\\\"urn:schemas-upnp-org:service:\" + m_serviceName + \":1\\\">\" +\r\n\t\t\t\t\"<NewRemoteHost>\" +\r\n\t\t\t\t\"</NewRemoteHost>\" +\r\n\t\t\t\t\"<NewExternalPort>\" + port + \"</NewExternalPort>\" +\r\n\t\t\t\t\"<NewProtocol>\" + ProtocolType.Udp.ToString().ToUpper(System.Globalization.CultureInfo.InvariantCulture) + \"</NewProtocol>\" +\r\n\t\t\t\t\"</u:DeletePortMapping>\", \"DeletePortMapping\");\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogWarning(\"UPnP delete forwarding rule failed: \" + ex.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieve the extern ip using UPnP\r\n\t\t/// </summary>\r\n\t\tpublic IPAddress GetExternalIP()\r\n\t\t{\r\n\t\t\tif (!CheckAvailability())\r\n\t\t\t\treturn null;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tXmlDocument xdoc = SOAPRequest(m_serviceUrl, \"<u:GetExternalIPAddress xmlns:u=\\\"urn:schemas-upnp-org:service:\" + m_serviceName + \":1\\\">\" +\r\n\t\t\t\t\"</u:GetExternalIPAddress>\", \"GetExternalIPAddress\");\r\n\t\t\t\tXmlNamespaceManager nsMgr = new XmlNamespaceManager(xdoc.NameTable);\r\n\t\t\t\tnsMgr.AddNamespace(\"tns\", \"urn:schemas-upnp-org:device-1-0\");\r\n\t\t\t\tstring IP = xdoc.SelectSingleNode(\"//NewExternalIPAddress/text()\", nsMgr).Value;\r\n\t\t\t\treturn IPAddress.Parse(IP);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tm_peer.LogWarning(\"Failed to get external IP: \" + ex.Message);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate XmlDocument SOAPRequest(string url, string soap, string function)\r\n\t\t{\r\n\t\t\tstring req = \"<?xml version=\\\"1.0\\\"?>\" +\r\n\t\t\t\"<s:Envelope xmlns:s=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\" s:encodingStyle=\\\"http://schemas.xmlsoap.org/soap/encoding/\\\">\" +\r\n\t\t\t\"<s:Body>\" +\r\n\t\t\tsoap +\r\n\t\t\t\"</s:Body>\" +\r\n\t\t\t\"</s:Envelope>\";\r\n\t\t\tWebRequest r = HttpWebRequest.Create(url);\r\n\t\t\tr.Method = \"POST\";\r\n\t\t\tbyte[] b = System.Text.Encoding.UTF8.GetBytes(req);\r\n\t\t\tr.Headers.Add(\"SOAPACTION\", \"\\\"urn:schemas-upnp-org:service:\" + m_serviceName + \":1#\" + function + \"\\\"\"); \r\n\t\t\tr.ContentType = \"text/xml; charset=\\\"utf-8\\\"\";\r\n\t\t\tr.ContentLength = b.Length;\r\n\t\t\tr.GetRequestStream().Write(b, 0, b.Length);\r\n\t\t\tXmlDocument resp = new XmlDocument();\r\n\t\t\tWebResponse wres = r.GetResponse();\r\n\t\t\tStream ress = wres.GetResponseStream();\r\n\t\t\tresp.Load(ress);\r\n\t\t\treturn resp;\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetUnreliableSenderChannel.cs",
    "content": "﻿using System;\r\nusing System.Threading;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Sender part of Selective repeat ARQ for a particular NetChannel\r\n\t/// </summary>\r\n\tinternal sealed class NetUnreliableSenderChannel : NetSenderChannelBase\r\n\t{\r\n\t\tprivate NetConnection m_connection;\r\n\t\tprivate int m_windowStart;\r\n\t\tprivate int m_windowSize;\r\n\t\tprivate int m_sendStart;\r\n\r\n\t\tprivate NetBitVector m_receivedAcks;\r\n\r\n\t\tinternal override int WindowSize { get { return m_windowSize; } }\r\n\r\n\t\tinternal NetUnreliableSenderChannel(NetConnection connection, int windowSize)\r\n\t\t{\r\n\t\t\tm_connection = connection;\r\n\t\t\tm_windowSize = windowSize;\r\n\t\t\tm_windowStart = 0;\r\n\t\t\tm_sendStart = 0;\r\n\t\t\tm_receivedAcks = new NetBitVector(NetConstants.NumSequenceNumbers);\r\n\t\t\tm_queuedSends = new NetQueue<NetOutgoingMessage>(8);\r\n\t\t}\r\n\r\n\t\tinternal override int GetAllowedSends()\r\n\t\t{\r\n\t\t\tint retval = m_windowSize - ((m_sendStart + NetConstants.NumSequenceNumbers) - m_windowStart) % m_windowSize;\r\n\t\t\tNetException.Assert(retval >= 0 && retval <= m_windowSize);\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\tinternal override void Reset()\r\n\t\t{\r\n\t\t\tm_receivedAcks.Clear();\r\n\t\t\tm_queuedSends.Clear();\r\n\t\t\tm_windowStart = 0;\r\n\t\t\tm_sendStart = 0;\r\n\t\t}\r\n\r\n\t\tinternal override NetSendResult Enqueue(NetOutgoingMessage message)\r\n\t\t{\r\n\t\t\tint queueLen = m_queuedSends.Count + 1;\r\n\t\t\tint left = GetAllowedSends();\r\n\t\t\tif (queueLen > left || (message.LengthBytes > m_connection.m_currentMTU && m_connection.m_peerConfiguration.UnreliableSizeBehaviour == NetUnreliableSizeBehaviour.DropAboveMTU))\r\n\t\t\t{\r\n\t\t\t\tm_connection.Peer.Recycle(message);\r\n\t\t\t\treturn NetSendResult.Dropped;\r\n\t\t\t}\r\n\r\n\t\t\tm_queuedSends.Enqueue(message);\r\n\t\t\treturn NetSendResult.Sent;\r\n\t\t}\r\n\r\n\t\t// call this regularely\r\n\t\tinternal override void SendQueuedMessages(float now)\r\n\t\t{\r\n\t\t\tint num = GetAllowedSends();\r\n\t\t\tif (num < 1)\r\n\t\t\t\treturn;\r\n\r\n\t\t\t// queued sends\r\n\t\t\twhile (m_queuedSends.Count > 0 && num > 0)\r\n\t\t\t{\r\n\t\t\t\tNetOutgoingMessage om;\r\n\t\t\t\tif (m_queuedSends.TryDequeue(out om))\r\n\t\t\t\t\tExecuteSend(om);\r\n\t\t\t\tnum--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ExecuteSend(NetOutgoingMessage message)\r\n\t\t{\r\n\t\t\tm_connection.m_peer.VerifyNetworkThread();\r\n\r\n\t\t\tint seqNr = m_sendStart;\r\n\t\t\tm_sendStart = (m_sendStart + 1) % NetConstants.NumSequenceNumbers;\r\n\r\n\t\t\tm_connection.QueueSendMessage(message, seqNr);\r\n\r\n\t\t\tInterlocked.Decrement(ref message.m_recyclingCount);\r\n\t\t\tif (message.m_recyclingCount <= 0)\r\n\t\t\t\tm_connection.m_peer.Recycle(message);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t// remoteWindowStart is remote expected sequence number; everything below this has arrived properly\r\n\t\t// seqNr is the actual nr received\r\n\t\tinternal override void ReceiveAcknowledge(float now, int seqNr)\r\n\t\t{\r\n\t\t\t// late (dupe), on time or early ack?\r\n\t\t\tint relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart);\r\n\r\n\t\t\tif (relate < 0)\r\n\t\t\t{\r\n\t\t\t\t//m_connection.m_peer.LogDebug(\"Received late/dupe ack for #\" + seqNr);\r\n\t\t\t\treturn; // late/duplicate ack\r\n\t\t\t}\r\n\r\n\t\t\tif (relate == 0)\r\n\t\t\t{\r\n\t\t\t\t//m_connection.m_peer.LogDebug(\"Received right-on-time ack for #\" + seqNr);\r\n\r\n\t\t\t\t// ack arrived right on time\r\n\t\t\t\tNetException.Assert(seqNr == m_windowStart);\r\n\r\n\t\t\t\tm_receivedAcks[m_windowStart] = false;\r\n\t\t\t\tm_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Advance window to this position\r\n\t\t\tm_receivedAcks[seqNr] = true;\r\n\r\n\t\t\twhile (m_windowStart != seqNr)\r\n\t\t\t{\r\n\t\t\t\tm_receivedAcks[m_windowStart] = false;\r\n\t\t\t\tm_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetUnreliableSequencedReceiver.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal sealed class NetUnreliableSequencedReceiver : NetReceiverChannelBase\r\n\t{\r\n\t\tprivate int m_lastReceivedSequenceNumber = -1;\r\n\r\n\t\tpublic NetUnreliableSequencedReceiver(NetConnection connection)\r\n\t\t\t: base(connection)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tinternal override void ReceiveMessage(NetIncomingMessage msg)\r\n\t\t{\r\n\t\t\tint nr = msg.m_sequenceNumber;\r\n\r\n\t\t\t// ack no matter what\r\n\t\t\tm_connection.QueueAck(msg.m_receivedMessageType, nr);\r\n\r\n\t\t\tint relate = NetUtility.RelativeSequenceNumber(nr, m_lastReceivedSequenceNumber + 1);\r\n\t\t\tif (relate < 0)\r\n\t\t\t\treturn; // drop if late\r\n\r\n\t\t\tm_lastReceivedSequenceNumber = nr;\r\n\t\t\tm_peer.ReleaseMessage(msg);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetUnreliableUnorderedReceiver.cs",
    "content": "﻿using System;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\tinternal sealed class NetUnreliableUnorderedReceiver : NetReceiverChannelBase\r\n\t{\r\n\t\tpublic NetUnreliableUnorderedReceiver(NetConnection connection)\r\n\t\t\t: base(connection)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tinternal override void ReceiveMessage(NetIncomingMessage msg)\r\n\t\t{\r\n\t\t\t// ack no matter what\r\n\t\t\tm_connection.QueueAck(msg.m_receivedMessageType, msg.m_sequenceNumber);\r\n\r\n\t\t\tm_peer.ReleaseMessage(msg);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "ThirdParty/Lidgren.Network/NetUtility.cs",
    "content": "﻿/* Copyright (c) 2010 Michael Lidgren\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\r\nand associated documentation files (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to permit persons to whom\r\nthe Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or\r\nsubstantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\n#if !__ANDROID__ && !IOS && !UNITY_WEBPLAYER && !UNITY_ANDROID && !UNITY_IPHONE\r\n#define IS_FULL_NET_AVAILABLE\r\n#endif\r\n\r\nusing System;\r\nusing System.Net;\r\n\r\n#if IS_FULL_NET_AVAILABLE\r\nusing System.Net.NetworkInformation;\r\n#endif\r\n\r\nusing System.Net.Sockets;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing System.Collections.Generic;\r\nusing System.Security.Cryptography;\r\n\r\nnamespace Lidgren.Network\r\n{\r\n\t/// <summary>\r\n\t/// Utility methods\r\n\t/// </summary>\r\n\tpublic static class NetUtility\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Resolve endpoint callback\r\n\t\t/// </summary>\r\n\t\tpublic delegate void ResolveEndPointCallback(IPEndPoint endPoint);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Resolve address callback\r\n\t\t/// </summary>\r\n\t\tpublic delegate void ResolveAddressCallback(IPAddress adr);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get IPv4 endpoint from notation (xxx.xxx.xxx.xxx) or hostname and port number (asynchronous version)\r\n\t\t/// </summary>\r\n\t\tpublic static void ResolveAsync(string ipOrHost, int port, ResolveEndPointCallback callback)\r\n\t\t{\r\n\t\t\tResolveAsync(ipOrHost, delegate(IPAddress adr)\r\n\t\t\t{\r\n\t\t\t\tif (adr == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tcallback(null);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tcallback(new IPEndPoint(adr, port));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get IPv4 endpoint from notation (xxx.xxx.xxx.xxx) or hostname and port number\r\n\t\t/// </summary>\r\n\t\tpublic static IPEndPoint Resolve(string ipOrHost, int port)\r\n\t\t{\r\n\t\t\tIPAddress adr = Resolve(ipOrHost);\r\n\t\t\treturn new IPEndPoint(adr, port);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get IPv4 address from notation (xxx.xxx.xxx.xxx) or hostname (asynchronous version)\r\n\t\t/// </summary>\r\n\t\tpublic static void ResolveAsync(string ipOrHost, ResolveAddressCallback callback)\r\n\t\t{\r\n\t\t\tif (string.IsNullOrEmpty(ipOrHost))\r\n\t\t\t\tthrow new ArgumentException(\"Supplied string must not be empty\", \"ipOrHost\");\r\n\r\n\t\t\tipOrHost = ipOrHost.Trim();\r\n\r\n\t\t\tIPAddress ipAddress = null;\r\n\t\t\tif (IPAddress.TryParse(ipOrHost, out ipAddress))\r\n\t\t\t{\r\n\t\t\t\tif (ipAddress.AddressFamily == AddressFamily.InterNetwork)\r\n\t\t\t\t{\r\n\t\t\t\t\tcallback(ipAddress);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthrow new ArgumentException(\"This method will not currently resolve other than ipv4 addresses\");\r\n\t\t\t}\r\n\r\n\t\t\t// ok must be a host name\r\n\t\t\tIPHostEntry entry;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tDns.BeginGetHostEntry(ipOrHost, delegate(IAsyncResult result)\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tentry = Dns.EndGetHostEntry(result);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (SocketException ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (ex.SocketErrorCode == SocketError.HostNotFound)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//LogWrite(string.Format(CultureInfo.InvariantCulture, \"Failed to resolve host '{0}'.\", ipOrHost));\r\n\t\t\t\t\t\t\tcallback(null);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (entry == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcallback(null);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// check each entry for a valid IP address\r\n\t\t\t\t\tforeach (IPAddress ipCurrent in entry.AddressList)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (ipCurrent.AddressFamily == AddressFamily.InterNetwork)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcallback(ipCurrent);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcallback(null);\r\n\t\t\t\t}, null);\r\n\t\t\t}\r\n\t\t\tcatch (SocketException ex)\r\n\t\t\t{\r\n\t\t\t\tif (ex.SocketErrorCode == SocketError.HostNotFound)\r\n\t\t\t\t{\r\n\t\t\t\t\t//LogWrite(string.Format(CultureInfo.InvariantCulture, \"Failed to resolve host '{0}'.\", ipOrHost));\r\n\t\t\t\t\tcallback(null);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get IPv4 address from notation (xxx.xxx.xxx.xxx) or hostname\r\n\t\t/// </summary>\r\n\t\tpublic static IPAddress Resolve(string ipOrHost)\r\n\t\t{\r\n\t\t\tif (string.IsNullOrEmpty(ipOrHost))\r\n\t\t\t\tthrow new ArgumentException(\"Supplied string must not be empty\", \"ipOrHost\");\r\n\r\n\t\t\tipOrHost = ipOrHost.Trim();\r\n\r\n\t\t\tIPAddress ipAddress = null;\r\n\t\t\tif (IPAddress.TryParse(ipOrHost, out ipAddress))\r\n\t\t\t{\r\n\t\t\t\tif (ipAddress.AddressFamily == AddressFamily.InterNetwork)\r\n\t\t\t\t\treturn ipAddress;\r\n\t\t\t\tthrow new ArgumentException(\"This method will not currently resolve other than ipv4 addresses\");\r\n\t\t\t}\r\n\r\n\t\t\t// ok must be a host name\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tvar addresses = Dns.GetHostAddresses(ipOrHost);\r\n\t\t\t\tif (addresses == null)\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tforeach (var address in addresses)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (address.AddressFamily == AddressFamily.InterNetwork)\r\n\t\t\t\t\t\treturn address;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (SocketException ex)\r\n\t\t\t{\r\n\t\t\t\tif (ex.SocketErrorCode == SocketError.HostNotFound)\r\n\t\t\t\t{\r\n\t\t\t\t\t//LogWrite(string.Format(CultureInfo.InvariantCulture, \"Failed to resolve host '{0}'.\", ipOrHost));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n#if IS_FULL_NET_AVAILABLE\r\n\r\n\t\tprivate static NetworkInterface GetNetworkInterface()\r\n\t\t{\r\n\t\t\tIPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();\r\n\t\t\tif (computerProperties == null)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tNetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();\r\n\t\t\tif (nics == null || nics.Length < 1)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tNetworkInterface best = null;\r\n\t\t\tforeach (NetworkInterface adapter in nics)\r\n\t\t\t{\r\n\t\t\t\tif (adapter.NetworkInterfaceType == NetworkInterfaceType.Loopback || adapter.NetworkInterfaceType == NetworkInterfaceType.Unknown)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tif (!adapter.Supports(NetworkInterfaceComponent.IPv4))\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tif (best == null)\r\n\t\t\t\t\tbest = adapter;\r\n\t\t\t\tif (adapter.OperationalStatus != OperationalStatus.Up)\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t// make sure this adapter has any ipv4 addresses\r\n\t\t\t\tIPInterfaceProperties properties = adapter.GetIPProperties();\r\n\t\t\t\tforeach (UnicastIPAddressInformation unicastAddress in properties.UnicastAddresses)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (unicastAddress != null && unicastAddress.Address != null && unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Yes it does, return this network interface.\r\n\t\t\t\t\t\treturn adapter;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn best;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the physical (MAC) address for the first usable network interface\r\n\t\t/// </summary>\r\n\t\tpublic static PhysicalAddress GetMacAddress()\r\n\t\t{\r\n\t\t\tNetworkInterface ni = GetNetworkInterface();\r\n\t\t\tif (ni == null)\r\n\t\t\t\treturn null;\r\n\t\t\treturn ni.GetPhysicalAddress();\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a hex string from an Int64 value\r\n\t\t/// </summary>\r\n\t\tpublic static string ToHexString(long data)\r\n\t\t{\r\n\t\t\treturn ToHexString(BitConverter.GetBytes(data));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a hex string from an array of bytes\r\n\t\t/// </summary>\r\n\t\tpublic static string ToHexString(byte[] data)\r\n\t\t{\r\n\t\t\treturn ToHexString(data, 0, data.Length);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a hex string from an array of bytes\r\n\t\t/// </summary>\r\n\t\tpublic static string ToHexString(byte[] data, int offset, int length)\r\n\t\t{\r\n\t\t\tchar[] c = new char[length * 2];\r\n\t\t\tbyte b;\r\n\t\t\tfor (int i = 0; i < length; ++i)\r\n\t\t\t{\r\n\t\t\t\tb = ((byte)(data[offset + i] >> 4));\r\n\t\t\t\tc[i * 2] = (char)(b > 9 ? b + 0x37 : b + 0x30);\r\n\t\t\t\tb = ((byte)(data[offset + i] & 0xF));\r\n\t\t\t\tc[i * 2 + 1] = (char)(b > 9 ? b + 0x37 : b + 0x30);\r\n\t\t\t}\r\n\t\t\treturn new string(c);\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Gets the local broadcast address\r\n\t\t/// </summary>\r\n\t\tpublic static IPAddress GetBroadcastAddress()\r\n\t\t{\r\n#if __ANDROID__\r\n\t\t\ttry{\r\n\t\t\tAndroid.Net.Wifi.WifiManager wifi = (Android.Net.Wifi.WifiManager)Android.App.Application.Context.GetSystemService(Android.App.Activity.WifiService);\r\n\t\t\tif (wifi.IsWifiEnabled)\r\n\t\t\t{\r\n\t\t\t\tvar dhcp = wifi.DhcpInfo;\r\n\t\t\t\t\t\r\n\t\t\t\tint broadcast = (dhcp.IpAddress & dhcp.Netmask) | ~dhcp.Netmask;\r\n\t    \t\tbyte[] quads = new byte[4];\r\n\t    \t\tfor (int k = 0; k < 4; k++)\r\n\t\t\t\t{\r\n\t      \t\t\tquads[k] = (byte) ((broadcast >> k * 8) & 0xFF);\r\n\t\t\t\t}\r\n\t\t\t\treturn new IPAddress(quads);\r\n\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch // Catch Access Denied Errors\r\n\t\t\t{\r\n\t\t\t\treturn IPAddress.Broadcast;\r\n\t\t\t}\r\n#endif\t\t\r\n#if IS_FULL_NET_AVAILABLE\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tNetworkInterface ni = GetNetworkInterface();\r\n\t\t\t\tif (ni == null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\tIPInterfaceProperties properties = ni.GetIPProperties();\r\n\t\t\t\tforeach (UnicastIPAddressInformation unicastAddress in properties.UnicastAddresses)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (unicastAddress != null && unicastAddress.Address != null && unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar mask = unicastAddress.IPv4Mask;\r\n\t\t\t\t\t\tbyte[] ipAdressBytes = unicastAddress.Address.GetAddressBytes();\r\n\t\t\t\t        byte[] subnetMaskBytes = mask.GetAddressBytes();\r\n\t\t\t\t\r\n\t\t\t\t        if (ipAdressBytes.Length != subnetMaskBytes.Length)\r\n\t\t\t\t            throw new ArgumentException(\"Lengths of IP address and subnet mask do not match.\");\r\n\t\t\t\t\r\n\t\t\t\t        byte[] broadcastAddress = new byte[ipAdressBytes.Length];\r\n\t\t\t\t        for (int i = 0; i < broadcastAddress.Length; i++)\r\n\t\t\t\t        {\r\n\t\t\t\t            broadcastAddress[i] = (byte)(ipAdressBytes[i] | (subnetMaskBytes[i] ^ 255));\r\n\t\t\t\t        }\r\n\t\t\t\t        return new IPAddress(broadcastAddress);\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch // Catch any errors \r\n\t\t\t{\r\n\t\t\t    return IPAddress.Broadcast;\r\n\t\t\t}\r\n#endif\t\t\r\n\t\t\treturn IPAddress.Broadcast;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets my local IPv4 address (not necessarily external) and subnet mask\r\n\t\t/// </summary>\r\n\t\tpublic static IPAddress GetMyAddress(out IPAddress mask)\r\n\t\t{\r\n\t\t\tmask = null;\r\n#if __ANDROID__\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tAndroid.Net.Wifi.WifiManager wifi = (Android.Net.Wifi.WifiManager)Android.App.Application.Context.GetSystemService(Android.App.Activity.WifiService);\r\n\t\t\t\tif (!wifi.IsWifiEnabled) return null;\r\n\t\t\t\tvar dhcp = wifi.DhcpInfo;\r\n\t\t\t\t\t\r\n\t\t\t\tint addr = dhcp.IpAddress;\r\n\t    \t\tbyte[] quads = new byte[4];\r\n\t    \t\tfor (int k = 0; k < 4; k++)\r\n\t\t\t\t{\r\n\t      \t\t\tquads[k] = (byte) ((addr >> k * 8) & 0xFF);\r\n\t\t\t\t}\t\t\t\r\n\t\t\t\treturn new IPAddress(quads);\r\n\t\t\t}\r\n\t\t\tcatch // Catch Access Denied errors\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\t\r\n#endif\t\t\t\r\n#if IS_FULL_NET_AVAILABLE\r\n\t\t\tNetworkInterface ni = GetNetworkInterface();\r\n\t\t\tif (ni == null)\r\n\t\t\t{\r\n\t\t\t\tmask = null;\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tIPInterfaceProperties properties = ni.GetIPProperties();\r\n\t\t\tforeach (UnicastIPAddressInformation unicastAddress in properties.UnicastAddresses)\r\n\t\t\t{\r\n\t\t\t\tif (unicastAddress != null && unicastAddress.Address != null && unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork)\r\n\t\t\t\t{\r\n\t\t\t\t\tmask = unicastAddress.IPv4Mask;\r\n\t\t\t\t\treturn unicastAddress.Address;\r\n\t\t\t\t}\r\n\t\t\t}\r\n#endif\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns true if the IPEndPoint supplied is on the same subnet as this host\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsLocal(IPEndPoint endPoint)\r\n\t\t{\r\n\t\t\tif (endPoint == null)\r\n\t\t\t\treturn false;\r\n\t\t\treturn IsLocal(endPoint.Address);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns true if the IPAddress supplied is on the same subnet as this host\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsLocal(IPAddress remote)\r\n\t\t{\r\n\t\t\tIPAddress mask;\r\n\t\t\tIPAddress local = GetMyAddress(out mask);\r\n\r\n\t\t\tif (mask == null)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tuint maskBits = BitConverter.ToUInt32(mask.GetAddressBytes(), 0);\r\n\t\t\tuint remoteBits = BitConverter.ToUInt32(remote.GetAddressBytes(), 0);\r\n\t\t\tuint localBits = BitConverter.ToUInt32(local.GetAddressBytes(), 0);\r\n\r\n\t\t\t// compare network portions\r\n\t\t\treturn ((remoteBits & maskBits) == (localBits & maskBits));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns how many bits are necessary to hold a certain number\r\n\t\t/// </summary>\r\n\t\t[CLSCompliant(false)]\r\n\t\tpublic static int BitsToHoldUInt(uint value)\r\n\t\t{\r\n\t\t\tint bits = 1;\r\n\t\t\twhile ((value >>= 1) != 0)\r\n\t\t\t\tbits++;\r\n\t\t\treturn bits;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns how many bytes are required to hold a certain number of bits\r\n\t\t/// </summary>\r\n\t\tpublic static int BytesToHoldBits(int numBits)\r\n\t\t{\r\n\t\t\treturn (numBits + 7) / 8;\r\n\t\t}\r\n\r\n\t\tinternal static UInt32 SwapByteOrder(UInt32 value)\r\n\t\t{\r\n\t\t\treturn\r\n\t\t\t\t((value & 0xff000000) >> 24) |\r\n\t\t\t\t((value & 0x00ff0000) >> 8) |\r\n\t\t\t\t((value & 0x0000ff00) << 8) |\r\n\t\t\t\t((value & 0x000000ff) << 24);\r\n\t\t}\r\n\r\n\t\tinternal static UInt64 SwapByteOrder(UInt64 value)\r\n\t\t{\r\n\t\t\treturn\r\n\t\t\t\t((value & 0xff00000000000000L) >> 56) |\r\n\t\t\t\t((value & 0x00ff000000000000L) >> 40) |\r\n\t\t\t\t((value & 0x0000ff0000000000L) >> 24) |\r\n\t\t\t\t((value & 0x000000ff00000000L) >> 8) |\r\n\t\t\t\t((value & 0x00000000ff000000L) << 8) |\r\n\t\t\t\t((value & 0x0000000000ff0000L) << 24) |\r\n\t\t\t\t((value & 0x000000000000ff00L) << 40) |\r\n\t\t\t\t((value & 0x00000000000000ffL) << 56);\r\n\t\t}\r\n\r\n\t\tinternal static bool CompareElements(byte[] one, byte[] two)\r\n\t\t{\r\n\t\t\tif (one.Length != two.Length)\r\n\t\t\t\treturn false;\r\n\t\t\tfor (int i = 0; i < one.Length; i++)\r\n\t\t\t\tif (one[i] != two[i])\r\n\t\t\t\t\treturn false;\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Convert a hexadecimal string to a byte array\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] ToByteArray(String hexString)\r\n\t\t{\r\n\t\t\tbyte[] retval = new byte[hexString.Length / 2];\r\n\t\t\tfor (int i = 0; i < hexString.Length; i += 2)\r\n\t\t\t\tretval[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a number of bytes to a shorter, more readable string representation\r\n\t\t/// </summary>\r\n\t\tpublic static string ToHumanReadable(long bytes)\r\n\t\t{\r\n\t\t\tif (bytes < 4000) // 1-4 kb is printed in bytes\r\n\t\t\t\treturn bytes + \" bytes\";\r\n\t\t\tif (bytes < 1000 * 1000) // 4-999 kb is printed in kb\r\n\t\t\t\treturn Math.Round(((double)bytes / 1000.0), 2) + \" kilobytes\";\r\n\t\t\treturn Math.Round(((double)bytes / (1000.0 * 1000.0)), 2) + \" megabytes\"; // else megabytes\r\n\t\t}\r\n\r\n\t\tinternal static int RelativeSequenceNumber(int nr, int expected)\r\n\t\t{\r\n\t\t\treturn (nr - expected + NetConstants.NumSequenceNumbers + (NetConstants.NumSequenceNumbers / 2)) % NetConstants.NumSequenceNumbers - (NetConstants.NumSequenceNumbers / 2);\r\n\r\n\t\t\t// old impl:\r\n\t\t\t//int retval = ((nr + NetConstants.NumSequenceNumbers) - expected) % NetConstants.NumSequenceNumbers;\r\n\t\t\t//if (retval > (NetConstants.NumSequenceNumbers / 2))\r\n\t\t\t//\tretval -= NetConstants.NumSequenceNumbers;\r\n\t\t\t//return retval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the window size used internally in the library for a certain delivery method\r\n\t\t/// </summary>\r\n\t\tpublic static int GetWindowSize(NetDeliveryMethod method)\r\n\t\t{\r\n\t\t\tswitch (method)\r\n\t\t\t{\r\n\t\t\t\tcase NetDeliveryMethod.Unknown:\r\n\t\t\t\t\treturn 0;\r\n\r\n\t\t\t\tcase NetDeliveryMethod.Unreliable:\r\n\t\t\t\tcase NetDeliveryMethod.UnreliableSequenced:\r\n\t\t\t\t\treturn NetConstants.UnreliableWindowSize;\r\n\r\n\t\t\t\tcase NetDeliveryMethod.ReliableOrdered:\r\n\t\t\t\t\treturn NetConstants.ReliableOrderedWindowSize;\r\n\r\n\t\t\t\tcase NetDeliveryMethod.ReliableSequenced:\r\n\t\t\t\tcase NetDeliveryMethod.ReliableUnordered:\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn NetConstants.DefaultWindowSize;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// shell sort\r\n\t\tinternal static void SortMembersList(System.Reflection.MemberInfo[] list)\r\n\t\t{\r\n\t\t\tint h;\r\n\t\t\tint j;\r\n\t\t\tSystem.Reflection.MemberInfo tmp;\r\n\r\n\t\t\th = 1;\r\n\t\t\twhile (h * 3 + 1 <= list.Length)\r\n\t\t\t\th = 3 * h + 1;\r\n\r\n\t\t\twhile (h > 0)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = h - 1; i < list.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\ttmp = list[i];\r\n\t\t\t\t\tj = i;\r\n\t\t\t\t\twhile (true)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (j >= h)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (string.Compare(list[j - h].Name, tmp.Name, StringComparison.InvariantCulture) > 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tlist[j] = list[j - h];\r\n\t\t\t\t\t\t\t\tj -= h;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlist[j] = tmp;\r\n\t\t\t\t}\r\n\t\t\t\th /= 3;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static NetDeliveryMethod GetDeliveryMethod(NetMessageType mtp)\r\n\t\t{\r\n\t\t\tif (mtp >= NetMessageType.UserReliableOrdered1)\r\n\t\t\t\treturn NetDeliveryMethod.ReliableOrdered;\r\n\t\t\telse if (mtp >= NetMessageType.UserReliableSequenced1)\r\n\t\t\t\treturn NetDeliveryMethod.ReliableSequenced;\r\n\t\t\telse if (mtp >= NetMessageType.UserReliableUnordered)\r\n\t\t\t\treturn NetDeliveryMethod.ReliableUnordered;\r\n\t\t\telse if (mtp >= NetMessageType.UserSequenced1)\r\n\t\t\t\treturn NetDeliveryMethod.UnreliableSequenced;\r\n\t\t\treturn NetDeliveryMethod.Unreliable;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a comma delimited string from a lite of items\r\n\t\t/// </summary>\r\n\t\tpublic static string MakeCommaDelimitedList<T>(IList<T> list)\r\n\t\t{\r\n\t\t\tvar cnt = list.Count;\r\n\t\t\tStringBuilder bdr = new StringBuilder(cnt * 5); // educated guess\r\n\t\t\tfor(int i=0;i<cnt;i++)\r\n\t\t\t{\r\n\t\t\t\tbdr.Append(list[i].ToString());\r\n\t\t\t\tif (i != cnt - 1)\r\n\t\t\t\t\tbdr.Append(\", \");\r\n\t\t\t}\r\n\t\t\treturn bdr.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a SHA1 digest from a string\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] CreateSHA1Hash(string key)\r\n\t\t{\r\n\t\t\tusing (var sha = new SHA1CryptoServiceProvider())\r\n\t\t\t\treturn sha.ComputeHash(Encoding.UTF8.GetBytes(key));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a SHA1 digest from a byte buffer\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] CreateSHA1Hash(byte[] data)\r\n\t\t{\r\n\t\t\tusing (var sha = new SHA1CryptoServiceProvider())\r\n\t\t\t\treturn sha.ComputeHash(data);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a SHA1 digest from a byte buffer\r\n\t\t/// </summary>\r\n\t\tpublic static byte[] CreateSHA1Hash(byte[] data, int offset, int count)\r\n\t\t{\r\n\t\t\tusing (var sha = new SHA1CryptoServiceProvider())\r\n\t\t\t\treturn sha.ComputeHash(data, offset, count);\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Lidgren.Network\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"Lidgren.Network\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2012\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"78f2a988-46e1-4fc4-b7b4-dd2cbe46da6a\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"2012.1.7.0\")]\r\n[assembly: AssemblyFileVersion(\"2012.1.7.0\")]\r\n[assembly: System.CLSCompliant(true)]"
  },
  {
    "path": "ThirdParty/Lidgren.Network/Resources/Resource.Designer.cs",
    "content": ""
  },
  {
    "path": "ThirdParty/SharpFont/Windows/x64/SharpFont.XML",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>SharpFont</name>\n    </assembly>\n    <members>\n        <member name=\"T:SharpFont.AutoHinterScript\">\n            <summary>\n            A list of constants used for the glyph-to-script-map property to specify the script submodule the auto-hinter\n            should use for hinting a particular glyph.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.AutoHinterScript.None\">\n            <summary>\n            Don't auto-hint this glyph.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.AutoHinterScript.Latin\">\n            <summary>\n            Apply the latin auto-hinter. For the auto-hinter, ‘latin’ is a very broad term, including Cyrillic and\n            Greek also since characters from those scripts share the same design constraints.\n            </summary>\n            <remarks><para>\n            By default, characters from the following Unicode ranges are assigned to this submodule.\n            </para><para><code>\n            U+0020 - U+007F  // Basic Latin (no control characters)\n            U+00A0 - U+00FF  // Latin-1 Supplement (no control characters)\n            U+0100 - U+017F  // Latin Extended-A\n            U+0180 - U+024F  // Latin Extended-B\n            U+0250 - U+02AF  // IPA Extensions\n            U+02B0 - U+02FF  // Spacing Modifier Letters\n            U+0300 - U+036F  // Combining Diacritical Marks\n            U+0370 - U+03FF  // Greek and Coptic\n            U+0400 - U+04FF  // Cyrillic\n            U+0500 - U+052F  // Cyrillic Supplement\n            U+1D00 - U+1D7F  // Phonetic Extensions\n            U+1D80 - U+1DBF  // Phonetic Extensions Supplement\n            U+1DC0 - U+1DFF  // Combining Diacritical Marks Supplement\n            U+1E00 - U+1EFF  // Latin Extended Additional\n            U+1F00 - U+1FFF  // Greek Extended\n            U+2000 - U+206F  // General Punctuation\n            U+2070 - U+209F  // Superscripts and Subscripts\n            U+20A0 - U+20CF  // Currency Symbols\n            U+2150 - U+218F  // Number Forms\n            U+2460 - U+24FF  // Enclosed Alphanumerics\n            U+2C60 - U+2C7F  // Latin Extended-C\n            U+2DE0 - U+2DFF  // Cyrillic Extended-A\n            U+2E00 - U+2E7F  // Supplemental Punctuation\n            U+A640 - U+A69F  // Cyrillic Extended-B\n            U+A720 - U+A7FF  // Latin Extended-D\n            U+FB00 - U+FB06  // Alphab. Present. Forms (Latin Ligatures)\n            U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols\n            U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement\n            </code></para></remarks>\n        </member>\n        <member name=\"F:SharpFont.AutoHinterScript.Cjk\">\n            <summary>\n            Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old Vietnamese, and some other scripts.\n            </summary>\n            <remarks><para>\n            By default, characters from the following Unicode ranges are assigned to this submodule.\n            </para><para><code>\n            U+1100 - U+11FF  // Hangul Jamo\n            U+2E80 - U+2EFF  // CJK Radicals Supplement\n            U+2F00 - U+2FDF  // Kangxi Radicals\n            U+2FF0 - U+2FFF  // Ideographic Description Characters\n            U+3000 - U+303F  // CJK Symbols and Punctuation\n            U+3040 - U+309F  // Hiragana\n            U+30A0 - U+30FF  // Katakana\n            U+3100 - U+312F  // Bopomofo\n            U+3130 - U+318F  // Hangul Compatibility Jamo\n            U+3190 - U+319F  // Kanbun\n            U+31A0 - U+31BF  // Bopomofo Extended\n            U+31C0 - U+31EF  // CJK Strokes\n            U+31F0 - U+31FF  // Katakana Phonetic Extensions\n            U+3200 - U+32FF  // Enclosed CJK Letters and Months\n            U+3300 - U+33FF  // CJK Compatibility\n            U+3400 - U+4DBF  // CJK Unified Ideographs Extension A\n            U+4DC0 - U+4DFF  // Yijing Hexagram Symbols\n            U+4E00 - U+9FFF  // CJK Unified Ideographs\n            U+A960 - U+A97F  // Hangul Jamo Extended-A\n            U+AC00 - U+D7AF  // Hangul Syllables\n            U+D7B0 - U+D7FF  // Hangul Jamo Extended-B\n            U+F900 - U+FAFF  // CJK Compatibility Ideographs\n            U+FE10 - U+FE1F  // Vertical forms\n            U+FE30 - U+FE4F  // CJK Compatibility Forms\n            U+FF00 - U+FFEF  // Halfwidth and Fullwidth Forms\n            U+1B000 - U+1B0FF // Kana Supplement\n            U+1D300 - U+1D35F // Tai Xuan Hing Symbols\n            U+1F200 - U+1F2FF // Enclosed Ideographic Supplement\n            U+20000 - U+2A6DF // CJK Unified Ideographs Extension B\n            U+2A700 - U+2B73F // CJK Unified Ideographs Extension C\n            U+2B740 - U+2B81F // CJK Unified Ideographs Extension D\n            U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement\n            </code></para></remarks>\n        </member>\n        <member name=\"F:SharpFont.AutoHinterScript.Indic\">\n            <summary>\n            Apply the indic auto-hinter, covering all major scripts from the Indian sub-continent and some other\n            related scripts like Thai, Lao, or Tibetan.\n            </summary>\n            <remarks><para>\n            By default, characters from the following Unicode ranges are assigned to this submodule.\n            </para><para><code>\n            U+0900 - U+0DFF  // Indic Range\n            U+0F00 - U+0FFF  // Tibetan\n            U+1900 - U+194F  // Limbu\n            U+1B80 - U+1BBF  // Sundanese\n            U+1C80 - U+1CDF  // Meetei Mayak\n            U+A800 - U+A82F  // Syloti Nagri \n            U+11800 - U+118DF // Sharada\n            </code></para><para>\n            Note that currently Indic support is rudimentary only, missing blue zone support.\n            </para></remarks>\n        </member>\n        <member name=\"T:SharpFont.BBox\">\n            <summary>\n            A structure used to hold an outline's bounding box, i.e., the\n            coordinates of its extrema in the horizontal and vertical directions.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.BBox.#ctor(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.BBox\"/> struct.\n            </summary>\n            <param name=\"left\">The left bound.</param>\n            <param name=\"bottom\">The bottom bound.</param>\n            <param name=\"right\">The right bound.</param>\n            <param name=\"top\">The upper bound.</param>\n        </member>\n        <member name=\"P:SharpFont.BBox.Left\">\n            <summary>\n            Gets the horizontal minimum (left-most).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BBox.Bottom\">\n            <summary>\n            Gets the vertical minimum (bottom-most).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BBox.Right\">\n            <summary>\n            Gets the horizontal maximum (right-most).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BBox.Top\">\n            <summary>\n            Gets the vertical maximum (top-most).\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.BBox.op_Equality(SharpFont.BBox,SharpFont.BBox)\">\n            <summary>\n            Compares two instances of <see cref=\"T:SharpFont.BBox\"/> for equality.\n            </summary>\n            <param name=\"left\">A <see cref=\"T:SharpFont.BBox\"/>.</param>\n            <param name=\"right\">Another <see cref=\"T:SharpFont.BBox\"/>.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.BBox.op_Inequality(SharpFont.BBox,SharpFont.BBox)\">\n            <summary>\n            Compares two instances of <see cref=\"T:SharpFont.BBox\"/> for inequality.\n            </summary>\n            <param name=\"left\">A <see cref=\"T:SharpFont.BBox\"/>.</param>\n            <param name=\"right\">Another <see cref=\"T:SharpFont.BBox\"/>.</param>\n            <returns>A value indicating inequality.</returns>\n        </member>\n        <member name=\"M:SharpFont.BBox.Equals(SharpFont.BBox)\">\n            <summary>\n            Compares this instance of <see cref=\"T:SharpFont.BBox\"/> to another for equality.\n            </summary>\n            <param name=\"other\">A <see cref=\"T:SharpFont.BBox\"/>.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.BBox.Equals(System.Object)\">\n            <summary>\n            Compares this instance of <see cref=\"T:SharpFont.BBox\"/> to an object for equality.\n            </summary>\n            <param name=\"obj\">An object.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.BBox.GetHashCode\">\n            <summary>\n            Gets a unique hash code for this instance.\n            </summary>\n            <returns>A hash code.</returns>\n        </member>\n        <member name=\"M:SharpFont.BBox.ToString\">\n            <summary>\n            Gets a string that represents this instance.\n            </summary>\n            <returns>A string representation of this instance.</returns>\n        </member>\n        <member name=\"T:SharpFont.Bdf.Property\">\n            <summary>\n            This structure models a given BDF/PCF property.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Bdf.Property.Type\">\n            <summary>\n            Gets the property type.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Bdf.Property.Atom\">\n            <summary>\n            Gets the atom string, if type is <see cref=\"F:SharpFont.Bdf.PropertyType.Atom\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Bdf.Property.Integer\">\n            <summary>\n            Gets a signed integer, if type is <see cref=\"F:SharpFont.Bdf.PropertyType.Integer\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Bdf.Property.Cardinal\">\n            <summary>\n            Gets an unsigned integer, if type is <see cref=\"F:SharpFont.Bdf.PropertyType.Cardinal\"/>.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Bdf.PropertyType\">\n            <summary>\n            A list of BDF property types.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Bdf.PropertyType.None\">\n            <summary>Value 0 is used to indicate a missing property.</summary>\n        </member>\n        <member name=\"F:SharpFont.Bdf.PropertyType.Atom\">\n            <summary>Property is a string atom.</summary>\n        </member>\n        <member name=\"F:SharpFont.Bdf.PropertyType.Integer\">\n            <summary>Property is a 32-bit signed integer.</summary>\n        </member>\n        <member name=\"F:SharpFont.Bdf.PropertyType.Cardinal\">\n            <summary>Property is a 32-bit unsigned integer.</summary>\n        </member>\n        <member name=\"T:SharpFont.Cff.HintingEngine\">\n            <summary>\n            A list of constants used for the hinting-engine property to select the hinting engine for CFF fonts.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Cff.HintingEngine.FreeType\">\n            <summary>Use the old FreeType hinting engine.</summary>\n        </member>\n        <member name=\"F:SharpFont.Cff.HintingEngine.Adobe\">\n            <summary>Use the hinting engine contributed by Adobe.</summary>\n        </member>\n        <member name=\"T:SharpFont.ClassicKernValidationFlags\">\n            <summary>\n            A list of bit-field constants used with <see cref=\"M:SharpFont.Face.ClassicKernValidate(SharpFont.ClassicKernValidationFlags)\"/> to indicate the classic kern\n            dialect or dialects. If the selected type doesn't fit, <see cref=\"M:SharpFont.Face.ClassicKernValidate(SharpFont.ClassicKernValidationFlags)\"/> regards the table\n            as invalid.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.ClassicKernValidationFlags.Microsoft\">\n            <summary>Handle the ‘kern’ table as a classic Microsoft kern table.</summary>\n        </member>\n        <member name=\"F:SharpFont.ClassicKernValidationFlags.Apple\">\n            <summary>Handle the ‘kern’ table as a classic Apple kern table.</summary>\n        </member>\n        <member name=\"F:SharpFont.ClassicKernValidationFlags.All\">\n            <summary>Handle the ‘kern’ as either classic Apple or Microsoft kern table.</summary>\n        </member>\n        <member name=\"T:SharpFont.FTBitmap\">\n            <summary>\n            A structure used to describe a bitmap or pixmap to the raster. Note that we now manage pixmaps of various\n            depths through the <see cref=\"P:SharpFont.FTBitmap.PixelMode\"/> field.\n            </summary>\n            <remarks>\n            For now, the only pixel modes supported by FreeType are mono and grays. However, drivers might be added in the\n            future to support more ‘colorful’ options.\n            </remarks>\n        </member>\n        <member name=\"M:SharpFont.FTBitmap.#ctor(SharpFont.Library)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.FTBitmap\"/> class.\n            </summary>\n            <param name=\"library\">The parent <see cref=\"T:SharpFont.Library\"/>.</param>\n        </member>\n        <member name=\"M:SharpFont.FTBitmap.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:SharpFont.FTBitmap\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the <see cref=\"T:SharpFont.FTBitmap\"/> has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.Rows\">\n            <summary>\n            Gets the number of bitmap rows.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.Width\">\n            <summary>\n            Gets the number of pixels in bitmap row.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.Pitch\">\n            <summary><para>\n            Gets the pitch's absolute value is the number of bytes taken by one bitmap row, including padding. However,\n            the pitch is positive when the bitmap has a ‘down’ flow, and negative when it has an ‘up’ flow. In all\n            cases, the pitch is an offset to add to a bitmap pointer in order to go down one row.\n            </para><para>\n            Note that ‘padding’ means the alignment of a bitmap to a byte border, and FreeType functions normally align\n            to the smallest possible integer value.\n            </para><para>\n            For the B/W rasterizer, ‘pitch’ is always an even number.\n            </para><para>\n            To change the pitch of a bitmap (say, to make it a multiple of 4), use <see cref=\"M:SharpFont.FTBitmap.Convert(SharpFont.Library,System.Int32)\"/>.\n            Alternatively, you might use callback functions to directly render to the application's surface; see the\n            file ‘example2.cpp’ in the tutorial for a demonstration.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.Buffer\">\n            <summary>\n            Gets a typeless pointer to the bitmap buffer. This value should be aligned on 32-bit boundaries in most\n            cases.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.GrayLevels\">\n            <summary>\n            Gets the number of gray levels used in the bitmap. This field is only used with\n            <see cref=\"F:SharpFont.PixelMode.Gray\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.PixelMode\">\n            <summary>\n            Gets the pixel mode, i.e., how pixel bits are stored.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.PaletteMode\">\n            <summary>\n            Gets how the palette is stored. This field is intended for paletted pixel modes.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.Palette\">\n            <summary>\n            Gets a typeless pointer to the bitmap palette; this field is intended for paletted pixel modes.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTBitmap.BufferData\">\n            <summary>\n            Gets the <see cref=\"T:SharpFont.FTBitmap\"/>'s buffer as a byte array.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTBitmap.Copy(SharpFont.Library)\">\n            <summary>\n            Copy a bitmap into another one.\n            </summary>\n            <param name=\"library\">A handle to a library object.</param>\n            <returns>A handle to the target bitmap.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTBitmap.Embolden(SharpFont.Library,System.Int32,System.Int32)\">\n            <summary>\n            Embolden a bitmap. The new bitmap will be about ‘xStrength’ pixels wider and ‘yStrength’ pixels higher. The\n            left and bottom borders are kept unchanged.\n            </summary>\n            <remarks><para>\n            The current implementation restricts ‘xStrength’ to be less than or equal to 8 if bitmap is of pixel_mode\n            <see cref=\"F:SharpFont.PixelMode.Mono\"/>.\n            </para><para>\n            If you want to embolden the bitmap owned by a <see cref=\"T:SharpFont.GlyphSlot\"/>, you should call\n            <see cref=\"M:SharpFont.GlyphSlot.OwnBitmap\"/> on the slot first.\n            </para></remarks>\n            <param name=\"library\">A handle to a library object.</param>\n            <param name=\"xStrength\">\n            How strong the glyph is emboldened horizontally. Expressed in 26.6 pixel format.\n            </param>\n            <param name=\"yStrength\">\n            How strong the glyph is emboldened vertically. Expressed in 26.6 pixel format.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.FTBitmap.Convert(SharpFont.Library,System.Int32)\">\n            <summary>\n            Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, or 8bpp to a bitmap object with depth 8bpp, making the\n            number of used bytes per line (a.k.a. the ‘pitch’) a multiple of ‘alignment’.\n            </summary>\n            <remarks><para>\n            It is possible to call <see cref=\"M:SharpFont.FTBitmap.Convert(SharpFont.Library,System.Int32)\"/> multiple times without calling\n            <see cref=\"M:SharpFont.FTBitmap.Dispose\"/> (the memory is simply reallocated).\n            </para><para>\n            Use <see cref=\"M:SharpFont.FTBitmap.Dispose\"/> to finally remove the bitmap object.\n            </para><para>\n            The ‘library’ argument is taken to have access to FreeType's memory handling functions.\n            </para></remarks>\n            <param name=\"library\">A handle to a library object.</param>\n            <param name=\"alignment\">\n            The pitch of the bitmap is a multiple of this parameter. Common values are 1, 2, or 4.\n            </param>\n            <returns>The target bitmap.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTBitmap.ToGdipBitmap(System.Drawing.Color)\">\n            <summary>\n            Copies the contents of the <see cref=\"T:SharpFont.FTBitmap\"/> to a <see cref=\"T:System.Drawing.Bitmap\"/>.\n            </summary>\n            <returns>A <see cref=\"T:System.Drawing.Bitmap\"/> containing this bitmap's data.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTBitmap.Dispose\">\n            <summary>\n            Disposes an instance of the <see cref=\"T:SharpFont.FTBitmap\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.BitmapGlyph\">\n            <summary>\n            A structure used for bitmap glyph images. This really is a ‘sub-class’ of <see cref=\"T:SharpFont.Glyph\"/>.\n            </summary>\n            <remarks><para>\n            You can typecast an <see cref=\"T:SharpFont.Glyph\"/> to <see cref=\"T:SharpFont.BitmapGlyph\"/> if you have ‘<see cref=\"P:SharpFont.Glyph.Format\"/> ==\n            <see cref=\"F:SharpFont.GlyphFormat.Bitmap\"/>’. This lets you access the bitmap's contents easily.\n            </para><para>\n            The corresponding pixel buffer is always owned by <see cref=\"T:SharpFont.BitmapGlyph\"/> and is thus created and destroyed\n            with it.\n            </para></remarks>\n        </member>\n        <member name=\"M:SharpFont.BitmapGlyph.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:SharpFont.BitmapGlyph\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapGlyph.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the object has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapGlyph.Root\">\n            <summary>\n            Gets the root <see cref=\"T:SharpFont.Glyph\"/> fields.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapGlyph.Left\">\n            <summary>\n            Gets the left-side bearing, i.e., the horizontal distance from the current pen position to the left border\n            of the glyph bitmap.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapGlyph.Top\">\n            <summary>\n            Gets the top-side bearing, i.e., the vertical distance from the current pen position to the top border of\n            the glyph bitmap. This distance is positive for upwards y!\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapGlyph.Bitmap\">\n            <summary>\n            Gets a descriptor for the bitmap.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.BitmapGlyph.op_Implicit(SharpFont.BitmapGlyph)~SharpFont.Glyph\">\n            <summary>\n            Casts a <see cref=\"T:SharpFont.BitmapGlyph\"/> back up to a <see cref=\"T:SharpFont.Glyph\"/>. The eqivalent of\n            <see cref=\"P:SharpFont.BitmapGlyph.Root\"/>.\n            </summary>\n            <param name=\"g\">A <see cref=\"T:SharpFont.BitmapGlyph\"/>.</param>\n            <returns>A <see cref=\"T:SharpFont.Glyph\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.BitmapGlyph.ToGlyph\">\n            <summary>\n            A CLS-compliant version of the implicit cast to <see cref=\"T:SharpFont.Glyph\"/>.\n            </summary>\n            <returns>A <see cref=\"T:SharpFont.Glyph\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.BitmapGlyph.Dispose\">\n            <summary>\n            Disposes an instance of the <see cref=\"T:SharpFont.BitmapGlyph\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.BitmapSize\">\n            <summary>\n            This structure models the metrics of a bitmap strike (i.e., a set of\n            glyphs for a given point size and resolution) in a bitmap font. It is\n            used for the <see cref=\"P:SharpFont.Face.AvailableSizes\"/> field of\n            <see cref=\"T:SharpFont.Face\"/>.\n            </summary>\n            <remarks><para>\n            Windows FNT: The nominal size given in a FNT font is not reliable. Thus\n            when the driver finds it incorrect, it sets ‘size’ to some calculated\n            values and sets ‘x_ppem’ and ‘y_ppem’ to the pixel width and height\n            given in the font, respectively.\n            </para><para>\n            TrueType embedded bitmaps: ‘size’, ‘width’, and ‘height’ values are not\n            contained in the bitmap strike itself. They are computed from the\n            global font parameters.\n            </para></remarks>\n        </member>\n        <member name=\"P:SharpFont.BitmapSize.Height\">\n            <summary>\n            Gets the vertical distance, in pixels, between two consecutive\n            baselines. It is always positive.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapSize.Width\">\n            <summary>\n            Gets the average width, in pixels, of all glyphs in the strike.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapSize.Size\">\n            <summary>\n            Gets the nominal size of the strike in 26.6 fractional points. This\n            field is not very useful.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapSize.NominalWidth\">\n            <summary>\n            Gets the horizontal ppem (nominal width) in 26.6 fractional pixels.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.BitmapSize.NominalHeight\">\n            <summary>\n            Gets the vertical ppem (nominal height) in 26.6 fractional pixels.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Cache.CMapCache\">\n            <summary>\n            An opaque handle used to model a charmap cache. This cache is to hold character codes -> glyph indices\n            mappings.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Cache.CMapCache.#ctor(SharpFont.Cache.Manager)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Cache.CMapCache\"/> class.\n            </summary>\n            <remarks>\n            Like all other caches, this one will be destroyed with the cache manager.\n            </remarks>\n            <param name=\"manager\">A handle to the cache manager.</param>\n        </member>\n        <member name=\"M:SharpFont.Cache.CMapCache.Lookup(System.IntPtr,System.Int32,System.UInt32)\">\n            <summary>\n            Translate a character code into a glyph index, using the charmap cache.\n            </summary>\n            <param name=\"faceId\">The source face ID.</param>\n            <param name=\"cmapIndex\">\n            The index of the charmap in the source face. Any negative value means to use the cache <see cref=\"T:SharpFont.Face\"/>'s\n            default charmap.\n            </param>\n            <param name=\"charCode\">The character code (in the corresponding charmap).</param>\n            <returns>Glyph index. 0 means ‘no glyph’.</returns>\n        </member>\n        <member name=\"T:SharpFont.Cache.FaceRequester\">\n            <summary>\n            A callback function provided by client applications. It is used by the cache manager to translate a given\n            FTC_FaceID into a new valid <see cref=\"T:SharpFont.Face\"/> object, on demand.\n            </summary>\n            <remarks><para>\n            The third parameter ‘req_data’ is the same as the one passed by the client when\n            <see cref=\"M:SharpFont.Cache.Manager.#ctor(SharpFont.Library,System.UInt32,System.UInt32,System.UInt64,SharpFont.Cache.FaceRequester,System.IntPtr)\"/> is called.\n            </para><para>\n            The face requester should not perform funny things on the returned face object, like creating a new\n            <see cref=\"T:SharpFont.FTSize\"/> for it, or setting a transformation through <see cref=\"M:SharpFont.Face.SetTransform(SharpFont.FTMatrix,SharpFont.FTVector)\"/>!\n            </para></remarks>\n            <param name=\"faceId\">The face ID to resolve.</param>\n            <param name=\"library\">A handle to a FreeType library object.</param>\n            <param name=\"requestData\">Application-provided request data (see note below).</param>\n            <param name=\"aface\">A new <see cref=\"T:SharpFont.Face\"/> handle.</param>\n            <returns>FreeType error code. 0 means success.</returns>\n        </member>\n        <member name=\"T:SharpFont.Cache.ImageCache\">\n            <summary>\n            A handle to an glyph image cache object. They are designed to hold many distinct glyph images while not\n            exceeding a certain memory threshold.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Cache.ImageCache.#ctor(SharpFont.Cache.Manager)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Cache.ImageCache\"/> class.\n            </summary>\n            <param name=\"manager\">The parent manager for the image cache.</param>\n        </member>\n        <member name=\"M:SharpFont.Cache.ImageCache.Lookup(SharpFont.Cache.ImageType,System.UInt32,SharpFont.Cache.Node@)\">\n            <summary>\n            Retrieve a given glyph image from a glyph image cache.\n            </summary>\n            <remarks><para>\n            The returned glyph is owned and managed by the glyph image cache. Never try to transform or discard it\n            manually! You can however create a copy with <see cref=\"M:SharpFont.Glyph.Copy\"/> and modify the new one.\n            </para><para>\n            If ‘node’ is not NULL, it receives the address of the cache node containing the glyph image,\n            after increasing its reference count. This ensures that the node (as well as the <see cref=\"T:SharpFont.Glyph\"/>) will\n            always be kept in the cache until you call <see cref=\"M:SharpFont.Cache.Node.Unref(SharpFont.Cache.Manager)\"/> to ‘release’ it.\n            </para><para>\n            If ‘node’ is NULL, the cache node is left unchanged, which means that the <see cref=\"T:SharpFont.Glyph\"/>\n            could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that\n            it is persistent!\n            </para></remarks>\n            <param name=\"type\">A pointer to a glyph image type descriptor.</param>\n            <param name=\"gIndex\">The glyph index to retrieve.</param>\n            <param name=\"node\">\n            Used to return the address of of the corresponding cache node after incrementing its reference count (see\n            note below).\n            </param>\n            <returns>The corresponding <see cref=\"T:SharpFont.Glyph\"/> object. 0 in case of failure.</returns>\n        </member>\n        <member name=\"M:SharpFont.Cache.ImageCache.LookupScaler(SharpFont.Cache.Scaler,SharpFont.LoadFlags,System.UInt32,SharpFont.Cache.Node@)\">\n            <summary>\n            A variant of <see cref=\"M:SharpFont.Cache.ImageCache.Lookup(SharpFont.Cache.ImageType,System.UInt32,SharpFont.Cache.Node@)\"/> that uses a <see cref=\"T:SharpFont.Cache.Scaler\"/> to specify the face ID and its\n            size.\n            </summary>\n            <remarks><para>\n            The returned glyph is owned and managed by the glyph image cache. Never try to transform or discard it\n            manually! You can however create a copy with <see cref=\"M:SharpFont.Glyph.Copy\"/> and modify the new one.\n            </para><para>\n            If ‘node’ is not NULL, it receives the address of the cache node containing the glyph image,\n            after increasing its reference count. This ensures that the node (as well as the <see cref=\"T:SharpFont.Glyph\"/>) will\n            always be kept in the cache until you call <see cref=\"M:SharpFont.Cache.Node.Unref(SharpFont.Cache.Manager)\"/> to ‘release’ it.\n            </para><para>\n            If ‘node’ is NULL, the cache node is left unchanged, which means that the <see cref=\"T:SharpFont.Glyph\"/>\n            could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that\n            it is persistent!\n            </para><para>\n            Calls to <see cref=\"M:SharpFont.Face.SetCharSize(System.Int32,System.Int32,System.UInt32,System.UInt32)\"/> and friends have no effect on cached glyphs; you should always use\n            the FreeType cache API instead.\n            </para></remarks>\n            <param name=\"scaler\">A pointer to a scaler descriptor.</param>\n            <param name=\"loadFlags\">The corresponding load flags.</param>\n            <param name=\"gIndex\">The glyph index to retrieve.</param>\n            <param name=\"node\">\n            Used to return the address of of the corresponding cache node after incrementing its reference count (see\n            note below).\n            </param>\n            <returns>The corresponding <see cref=\"T:SharpFont.Glyph\"/> object. 0 in case of failure.</returns>\n        </member>\n        <member name=\"T:SharpFont.Cache.ImageType\">\n            <summary>\n            A structure used to model the type of images in a glyph cache.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.ImageType.FaceId\">\n            <summary>\n            Gets the face ID.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.ImageType.Width\">\n            <summary>\n            Gets the width in pixels.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.ImageType.Height\">\n            <summary>\n            Gets the height in pixels.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.ImageType.Flags\">\n            <summary>\n            Gets the load flags, as in <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Cache.Manager\">\n            <summary><para>\n            This object corresponds to one instance of the cache-subsystem. It is used to cache one or more\n            <see cref=\"T:SharpFont.Face\"/> objects, along with corresponding <see cref=\"T:SharpFont.FTSize\"/> objects.\n            </para><para>\n            The manager intentionally limits the total number of opened <see cref=\"T:SharpFont.Face\"/> and <see cref=\"T:SharpFont.FTSize\"/> objects\n            to control memory usage. See the ‘max_faces’ and ‘max_sizes’ parameters of\n            <see cref=\"M:SharpFont.Cache.Manager.#ctor(SharpFont.Library,System.UInt32,System.UInt32,System.UInt64,SharpFont.Cache.FaceRequester,System.IntPtr)\"/>.\n            </para><para>\n            The manager is also used to cache ‘nodes’ of various types while limiting their total memory usage.\n            </para><para>\n            All limitations are enforced by keeping lists of managed objects in most-recently-used order, and flushing old\n            nodes to make room for new ones.\n            </para></summary>\n        </member>\n        <member name=\"M:SharpFont.Cache.Manager.#ctor(SharpFont.Library,System.UInt32,System.UInt32,System.UInt64,SharpFont.Cache.FaceRequester,System.IntPtr)\">\n            <summary>\n            Initializes a new instance of the Manager class.\n            </summary>\n            <param name=\"library\">The parent FreeType library handle to use.</param>\n            <param name=\"maxFaces\">\n            Maximum number of opened <see cref=\"T:SharpFont.Face\"/> objects managed by this cache instance. Use 0 for defaults.\n            </param>\n            <param name=\"maxSizes\">\n            Maximum number of opened <see cref=\"T:SharpFont.FTSize\"/> objects managed by this cache instance. Use 0 for defaults.\n            </param>\n            <param name=\"maxBytes\">\n            Maximum number of bytes to use for cached data nodes. Use 0 for defaults. Note that this value does not\n            account for managed <see cref=\"T:SharpFont.Face\"/> and <see cref=\"T:SharpFont.FTSize\"/> objects.\n            </param>\n            <param name=\"requester\">\n            An application-provided callback used to translate face IDs into real <see cref=\"T:SharpFont.Face\"/> objects.\n            </param>\n            <param name=\"requestData\">\n            A generic pointer that is passed to the requester each time it is called (see <see cref=\"T:SharpFont.Cache.FaceRequester\"/>).\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Cache.Manager.Finalize\">\n            <summary>\n            Finalizes an instance of the Manager class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.Manager.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the object has been disposed.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Cache.Manager.Reset\">\n            <summary>\n            Empty a given cache manager. This simply gets rid of all the currently cached <see cref=\"T:SharpFont.Face\"/> and\n            <see cref=\"T:SharpFont.FTSize\"/> objects within the manager.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Cache.Manager.LookupFace(System.IntPtr)\">\n            <summary>\n            Retrieve the <see cref=\"T:SharpFont.Face\"/> object that corresponds to a given face ID through a cache manager.\n            </summary>\n            <remarks><para>\n            The returned <see cref=\"T:SharpFont.Face\"/> object is always owned by the manager. You should never try to discard it\n            yourself.\n            </para><para>\n            The <see cref=\"T:SharpFont.Face\"/> object doesn't necessarily have a current size object (i.e., <see cref=\"P:SharpFont.Face.Size\"/>\n            can be 0). If you need a specific ‘font size’, use <see cref=\"M:SharpFont.Cache.Manager.LookupSize(SharpFont.Cache.Scaler)\"/> instead.\n            </para><para>\n            Never change the face's transformation matrix (i.e., never call the <see cref=\"M:SharpFont.Face.SetTransform(SharpFont.FTMatrix,SharpFont.FTVector)\"/>\n            function) on a returned face! If you need to transform glyphs, do it yourself after glyph loading.\n            </para><para>\n            When you perform a lookup, out-of-memory errors are detected within the lookup and force incremental\n            flushes of the cache until enough memory is released for the lookup to succeed.\n            </para><para>\n            If a lookup fails with <see cref=\"F:SharpFont.Error.OutOfMemory\"/> the cache has already been completely flushed, and\n            still no memory was available for the operation.\n            </para></remarks>\n            <param name=\"faceId\">The ID of the face object.</param>\n            <returns>A handle to the face object.</returns>\n        </member>\n        <member name=\"M:SharpFont.Cache.Manager.LookupSize(SharpFont.Cache.Scaler)\">\n            <summary>\n            Retrieve the <see cref=\"T:SharpFont.FTSize\"/> object that corresponds to a given <see cref=\"T:SharpFont.Cache.Scaler\"/> pointer through a\n            cache manager.\n            </summary>\n            <remarks><para>\n            The returned <see cref=\"T:SharpFont.FTSize\"/> object is always owned by the/ manager. You should never try to discard\n            it by yourself.\n            </para><para>\n            You can access the parent <see cref=\"T:SharpFont.Face\"/> object simply as <see cref=\"P:SharpFont.FTSize.Face\"/> if you need it.\n            Note that this object is also owned by the manager.\n            </para><para>\n            When you perform a lookup, out-of-memory errors are detected within the lookup and force incremental\n            flushes of the cache until enough memory is released for the lookup to succeed.\n            </para><para>\n            If a lookup fails with <see cref=\"F:SharpFont.Error.OutOfMemory\"/> the cache has already been completely flushed, and\n            still no memory is available for the operation.\n            </para></remarks>\n            <param name=\"scaler\">A scaler handle.</param>\n            <returns>A handle to the size object.</returns>\n        </member>\n        <member name=\"M:SharpFont.Cache.Manager.RemoveFaceId(System.IntPtr)\">\n            <summary>\n            A special function used to indicate to the cache manager that a given FTC_FaceID is no longer valid, either\n            because its content changed, or because it was deallocated or uninstalled.\n            </summary>\n            <remarks><para>\n            This function flushes all nodes from the cache corresponding to this ‘faceID’, with the\n            exception of nodes with a non-null reference count.\n            </para><para>\n            Such nodes are however modified internally so as to never appear in later lookups with the same\n             ‘faceID’ value, and to be immediately destroyed when released by all their users.\n            </para></remarks>\n            <param name=\"faceId\">The FTC_FaceID to be removed.</param>\n        </member>\n        <member name=\"M:SharpFont.Cache.Manager.Dispose\">\n            <summary>\n            Disposes the Manager.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Cache.Node\">\n            <summary><para>\n            An opaque handle to a cache node object. Each cache node is reference-counted. A node with a count of 0 might\n            be flushed out of a full cache whenever a lookup request is performed.\n            </para><para>\n            If you look up nodes, you have the ability to ‘acquire’ them, i.e., to increment their reference count. This\n            will prevent the node from being flushed out of the cache until you explicitly ‘release’ it.\n            </para></summary>\n            <see cref=\"M:SharpFont.Cache.Node.Unref(SharpFont.Cache.Manager)\"/>\n            <seealso cref=\"M:SharpFont.Cache.SBitCache.Lookup(SharpFont.Cache.ImageType,System.UInt32,SharpFont.Cache.Node@)\"/>\n            <seealso cref=\"M:SharpFont.Cache.ImageCache.Lookup(SharpFont.Cache.ImageType,System.UInt32,SharpFont.Cache.Node@)\"/>\n        </member>\n        <member name=\"M:SharpFont.Cache.Node.Unref(SharpFont.Cache.Manager)\">\n            <summary>\n            Decrement a cache node's internal reference count. When the count reaches 0, it is not destroyed but\n            becomes eligible for subsequent cache flushes.\n            </summary>\n            <param name=\"manager\">The cache manager handle.</param>\n        </member>\n        <member name=\"T:SharpFont.Cache.SBit\">\n            <summary>\n            A handle to a small bitmap cache. These are special cache objects used to store small glyph bitmaps (and\n            anti-aliased pixmaps) in a much more efficient way than the traditional glyph image cache implemented by\n            <see cref=\"T:SharpFont.Cache.ImageCache\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.Width\">\n            <summary>\n            Gets the bitmap width in pixels.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.Height\">\n            <summary>\n            Gets the bitmap height in pixels.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.Left\">\n            <summary>\n            Gets the horizontal distance from the pen position to the left bitmap border (a.k.a. ‘left side bearing’,\n            or ‘lsb’).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.Top\">\n            <summary>\n            Gets the vertical distance from the pen position (on the baseline) to the upper bitmap border (a.k.a. ‘top\n            side bearing’). The distance is positive for upwards y coordinates.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.Format\">\n            <summary>\n            Gets the format of the glyph bitmap (monochrome or gray).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.MaxGrays\">\n            <summary>\n            Gets the maximum gray level value (in the range 1 to 255).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.Pitch\">\n            <summary>\n            Gets the number of bytes per bitmap line. May be positive or negative.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.AdvanceX\">\n            <summary>\n            Gets the horizontal advance width in pixels.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.AdvanceY\">\n            <summary>\n            Gets the vertical advance height in pixels.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.SBit.Buffer\">\n            <summary>\n            Gets a pointer to the bitmap pixels.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Cache.SBitCache\">\n            <summary>\n            A handle to a small bitmap cache. These are special cache objects used to store small glyph bitmaps (and\n            anti-aliased pixmaps) in a much more efficient way than the traditional glyph image cache implemented by\n            <see cref=\"T:SharpFont.Cache.ImageCache\"/>.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Cache.SBitCache.#ctor(SharpFont.Cache.Manager)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Cache.SBitCache\"/> class.\n            </summary>\n            <param name=\"manager\">A handle to the source cache manager.</param>\n        </member>\n        <member name=\"M:SharpFont.Cache.SBitCache.Lookup(SharpFont.Cache.ImageType,System.UInt32,SharpFont.Cache.Node@)\">\n            <summary>\n            Look up a given small glyph bitmap in a given sbit cache and ‘lock’ it to prevent its flushing from the\n            cache until needed.\n            </summary>\n            <remarks><para>\n            The small bitmap descriptor and its bit buffer are owned by the cache and should never be freed by the\n            application. They might as well disappear from memory on the next cache lookup, so don't treat them as\n            persistent data.\n            </para><para>\n            The descriptor's ‘buffer’ field is set to 0 to indicate a missing glyph bitmap.\n            </para><para>\n            If ‘node’ is not NULL, it receives the address of the cache node containing the bitmap, after\n            increasing its reference count. This ensures that the node (as well as the image) will always be kept in\n            the cache until you call <see cref=\"M:SharpFont.Cache.Node.Unref(SharpFont.Cache.Manager)\"/> to ‘release’ it.\n            </para><para>\n            If ‘node’ is NULL, the cache node is left unchanged, which means that the bitmap could be\n            flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is\n            persistent!\n            </para></remarks>\n            <param name=\"type\">A pointer to the glyph image type descriptor.</param>\n            <param name=\"gIndex\">The glyph index.</param>\n            <param name=\"node\">\n            Used to return the address of of the corresponding cache node after incrementing its reference count (see\n            note below).\n            </param>\n            <returns>A handle to a small bitmap descriptor.</returns>\n        </member>\n        <member name=\"M:SharpFont.Cache.SBitCache.LookupScaler(SharpFont.Cache.Scaler,SharpFont.LoadFlags,System.UInt32,SharpFont.Cache.Node@)\">\n            <summary>\n            A variant of <see cref=\"M:SharpFont.Cache.SBitCache.Lookup(SharpFont.Cache.ImageType,System.UInt32,SharpFont.Cache.Node@)\"/> that uses a <see cref=\"T:SharpFont.Cache.Scaler\"/> to specify the face ID and its\n            size.\n            </summary>\n            <remarks><para>\n            The small bitmap descriptor and its bit buffer are owned by the cache and should never be freed by the\n            application. They might as well disappear from memory on the next cache lookup, so don't treat them as\n            persistent data.\n            </para><para>\n            The descriptor's ‘buffer’ field is set to 0 to indicate a missing glyph bitmap.\n            </para><para>\n            If ‘node’ is not NULL, it receives the address of the cache node containing the bitmap, after\n            increasing its reference count. This ensures that the node (as well as the image) will always be kept in\n            the cache until you call <see cref=\"M:SharpFont.Cache.Node.Unref(SharpFont.Cache.Manager)\"/> to ‘release’ it.\n            </para><para>\n            If ‘node’ is NULL, the cache node is left unchanged, which means that the bitmap could be\n            flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is\n            persistent!\n            </para></remarks>\n            <param name=\"scaler\">A pointer to the scaler descriptor.</param>\n            <param name=\"loadFlags\">The corresponding load flags.</param>\n            <param name=\"gIndex\">The glyph index.</param>\n            <param name=\"node\">\n            Used to return the address of of the corresponding cache node after incrementing its reference count (see\n            note below).\n            </param>\n            <returns>A handle to a small bitmap descriptor.</returns>\n        </member>\n        <member name=\"T:SharpFont.Cache.Scaler\">\n            <summary>\n            A structure used to describe a given character size in either pixels or points to the cache manager.\n            </summary>\n            <remarks>\n            This type is mainly used to retrieve <see cref=\"T:SharpFont.FTSize\"/> objects through the cache manager.\n            </remarks>\n            <see cref=\"M:SharpFont.Cache.Manager.LookupSize(SharpFont.Cache.Scaler)\"/>\n        </member>\n        <member name=\"P:SharpFont.Cache.Scaler.FaceId\">\n            <summary>\n            Gets the source face ID.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.Scaler.Width\">\n            <summary>\n            Gets the character width.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.Scaler.Height\">\n            <summary>\n            Gets the character height.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.Scaler.Pixel\">\n            <summary>\n            Gets a boolean. If true, the ‘width’ and ‘height’ fields are interpreted as integer pixel character sizes.\n            Otherwise, they are expressed as 1/64th of points.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.Scaler.ResolutionX\">\n            <summary>\n            Gets the horizontal resolution in dpi; only used when ‘pixel’ is value 0.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Cache.Scaler.ResolutionY\">\n            <summary>\n            Gets the vertical resolution in dpi; only used when ‘pixel’ is value 0.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.CharMap\">\n            <summary>\n            The base charmap structure.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.CharMap.Face\">\n            <summary>\n            Gets a handle to the parent face object.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.CharMap.Encoding\">\n            <summary>\n            Gets an <see cref=\"P:SharpFont.CharMap.Encoding\"/> tag identifying the charmap. Use this with\n            <see cref=\"M:SharpFont.Face.SelectCharmap(SharpFont.Encoding)\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.CharMap.PlatformId\">\n            <summary>\n            Gets an ID number describing the platform for the following encoding ID. This comes directly from the\n            TrueType specification and should be emulated for other formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.CharMap.EncodingId\">\n            <summary>\n            Gets a platform specific encoding number. This also comes from the TrueType specification and should be\n            emulated similarly.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.CharMap.GetCharmapIndex\">\n            <summary>\n            Retrieve index of a given charmap.\n            </summary>\n            <returns>The index into the array of character maps within the face to which ‘charmap’ belongs.</returns>\n        </member>\n        <member name=\"M:SharpFont.CharMap.GetCMapLanguageId\">\n            <summary>\n            Return TrueType/sfnt specific cmap language ID. Definitions of language ID values are in\n            ‘freetype/ttnameid.h’.\n            </summary>\n            <returns>\n            The language ID of ‘charmap’. If ‘charmap’ doesn't belong to a TrueType/sfnt face, just return 0 as the\n            default value.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.CharMap.GetCMapFormat\">\n            <summary>\n            Return TrueType/sfnt specific cmap format.\n            </summary>\n            <returns>The format of ‘charmap’. If ‘charmap’ doesn't belong to a TrueType/sfnt face, return -1.</returns>\n        </member>\n        <member name=\"T:SharpFont.Data\">\n            <summary>\n            Read-only binary data represented as a pointer and a length.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Data.Pointer\">\n            <summary>\n            Gets the data.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Data.Length\">\n            <summary>\n            Gets the length of the data in bytes.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Encoding\">\n            <summary>\n            An enumeration used to specify character sets supported by charmaps.\n            Used in the FT_Select_Charmap API function.\n            </summary>\n            <remarks><para>\n            Despite the name, this enumeration lists specific character repertories\n            (i.e., charsets), and not text encoding methods (e.g., UTF-8, UTF-16,\n            etc.).\n            </para><para>\n            Other encodings might be defined in the future.\n            </para></remarks>\n        </member>\n        <member name=\"F:SharpFont.Encoding.None\">\n            <summary>\n            The encoding value 0 is reserved.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.MicrosoftSymbol\">\n            <summary>\n            Corresponds to the Microsoft Symbol encoding, used to encode\n            mathematical symbols in the 32..255 character code range.\n            </summary>\n            <see href=\"http://www.ceviz.net/symbol.htm\"/>\n        </member>\n        <member name=\"F:SharpFont.Encoding.Unicode\">\n            <summary><para>\n            Corresponds to the Unicode character set. This value covers all\n            versions of the Unicode repertoire, including ASCII and Latin-1.\n            Most fonts include a Unicode charmap, but not all of them.\n            </para><para>\n            For example, if you want to access Unicode value U+1F028 (and the\n            font contains it), use value 0x1F028 as the input value for\n            FT_Get_Char_Index.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.Sjis\">\n            <summary>\n            Corresponds to Japanese SJIS encoding.\n            </summary>\n            <see href=\"http://langsupport.japanreference.com/encoding.shtml\"/>\n        </member>\n        <member name=\"F:SharpFont.Encoding.GB2312\">\n            <summary>\n            Corresponds to an encoding system for Simplified Chinese as used\n            used in mainland China.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.Big5\">\n            <summary>\n            Corresponds to an encoding system for Traditional Chinese as used\n            in Taiwan and Hong Kong.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.Wansung\">\n            <summary>\n            Corresponds to the Korean encoding system known as Wansung.\n            </summary>\n            <see href=\"http://www.microsoft.com/typography/unicode/949.txt\"/>\n        </member>\n        <member name=\"F:SharpFont.Encoding.Johab\">\n            <summary>\n            The Korean standard character set (KS C 5601-1992), which\n            corresponds to MS Windows code page 1361. This character set\n            includes all possible Hangeul character combinations.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.AdobeStandard\">\n            <summary>\n            Corresponds to the Adobe Standard encoding, as found in Type 1,\n            CFF, and OpenType/CFF fonts. It is limited to 256 character codes.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.AdobeExpert\">\n            <summary>\n            Corresponds to the Adobe Expert encoding, as found in Type 1, CFF,\n            and OpenType/CFF fonts. It is limited to 256 character codes.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.AdobeCustom\">\n            <summary>\n            Corresponds to a custom encoding, as found in Type 1, CFF, and\n            OpenType/CFF fonts. It is limited to 256 character codes.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.AdobeLatin1\">\n            <summary>\n            Corresponds to a Latin-1 encoding as defined in a Type 1 PostScript\n            font. It is limited to 256 character codes.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.OldLatin2\">\n            <summary>\n            This value is deprecated and was never used nor reported by\n            FreeType. Don't use or test for it.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Encoding.AppleRoman\">\n            <summary>\n            Corresponds to the 8-bit Apple roman encoding. Many TrueType and\n            OpenType fonts contain a charmap for this encoding, since older\n            versions of Mac OS are able to use it.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Fnt.Header\">\n            <summary>\n            Windows FNT Header info.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Fnt.WinFntId\">\n            <summary>\n            A list of valid values for the ‘charset’ byte in <see cref=\"T:SharpFont.Fnt.Header\"/>. Exact mapping tables for the various\n            cpXXXX encodings (except for cp1361) can be found at <see href=\"ftp://ftp.unicode.org\" /> in the\n            MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of\n            MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1252\">\n            <summary>\n            ANSI encoding. A superset of ISO 8859-1.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.Default\">\n            <summary>\n            This is used for font enumeration and font creation as a ‘don't care’ value. Valid font files don't contain\n            this value. When querying for information about the character set of the font that is currently selected\n            into a specified device context, this return value (of the related Windows API) simply denotes failure.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.Symbol\">\n            <summary>\n            There is no known mapping table available.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.Mac\">\n            <summary>\n            Mac Roman encoding.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP932\">\n            <summary>\n            A superset of Japanese Shift-JIS (with minor deviations).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP949\">\n            <summary>\n            A superset of Korean Hangul KS C 5601-1987 (with different ordering and minor deviations).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1361\">\n            <summary>\n            Korean (Johab).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP936\">\n            <summary>\n            A superset of simplified Chinese GB 2312-1980 (with different ordering and minor deviations).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP950\">\n            <summary>\n            A superset of traditional Chinese Big 5 ETen (with different ordering and minor deviations).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1253\">\n            <summary>\n            A superset of Greek ISO 8859-7 (with minor modifications).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1254\">\n            <summary>\n            A superset of Turkish ISO 8859-9.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1258\">\n            <summary>\n            For Vietnamese. This encoding doesn't cover all necessary characters.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1255\">\n            <summary>\n            A superset of Hebrew ISO 8859-8 (with some modifications).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1256\">\n            <summary>\n            A superset of Arabic ISO 8859-6 (with different ordering).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1257\">\n            <summary>\n            A superset of Baltic ISO 8859-13 (with some deviations).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1251\">\n            <summary>\n            A superset of Russian ISO 8859-5 (with different ordering).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP874\">\n            <summary>\n            A superset of Thai TIS 620 and ISO 8859-11.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.CP1250\">\n            <summary>\n            A superset of East European ISO 8859-2 (with slightly different ordering).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Fnt.WinFntId.Oem\">\n            <summary><para>\n            From Michael Pöttgen &lt;michael@poettgen.de&gt;:\n            The ‘Windows Font Mapping’ article says that <see cref=\"F:SharpFont.Fnt.WinFntId.Oem\"/> is used for the charset of vector\n            fonts, like ‘modern.fon’, ‘roman.fon’, and ‘script.fon’ on Windows.\n            </para><para>\n            The ‘CreateFont’ documentation says: The <see cref=\"F:SharpFont.Fnt.WinFntId.Oem\"/> value specifies a character set that is\n            operating-system dependent.\n            </para><para>\n            The ‘IFIMETRICS’ documentation from the ‘Windows Driver Development Kit’ says: This font supports an\n            OEM-specific character set. The OEM character set is system dependent.\n            </para><para>\n            In general OEM, as opposed to ANSI (i.e., cp1252), denotes the second default codepage that most\n            international versions of Windows have. It is one of the OEM codepages from \n            <see href=\"http://www.microsoft.com/globaldev/reference/cphome.mspx\"/>, and is used for the ‘DOS boxes’, to\n            support legacy applications. A German Windows version for example usually uses ANSI codepage 1252 and OEM\n            codepage 850.\n            </para></summary>\n        </member>\n        <member name=\"T:SharpFont.ListIterator\">\n            <summary>\n            An <see cref=\"T:SharpFont.FTList\"/> iterator function which is called during a list parse by <see cref=\"M:SharpFont.FTList.Iterate(SharpFont.ListIterator,System.IntPtr)\"/>.\n            </summary>\n            <param name=\"node\">The current iteration list node.</param>\n            <param name=\"user\">\n            A typeless pointer passed to <see cref=\"T:SharpFont.ListIterator\"/>. Can be used to point to the iteration's state.\n            </param>\n            <returns>Error code.</returns>\n        </member>\n        <member name=\"T:SharpFont.ListDestructor\">\n            <summary>\n            An <see cref=\"T:SharpFont.FTList\"/> iterator function which is called during a list finalization by\n            <see cref=\"M:SharpFont.FTList.Finalize(SharpFont.ListDestructor,SharpFont.Memory,System.IntPtr)\"/> to destroy all elements in a given list.\n            </summary>\n            <param name=\"memory\">The current system object.</param>\n            <param name=\"data\">The current object to destroy.</param>\n            <param name=\"user\">\n            A typeless pointer passed to <see cref=\"M:SharpFont.FTList.Iterate(SharpFont.ListIterator,System.IntPtr)\"/>. It can be used to point to the iteration's state.\n            </param>\n        </member>\n        <member name=\"T:SharpFont.FTList\">\n            <summary>\n            A structure used to hold a simple doubly-linked list. These are used in many parts of FreeType.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTList.Head\">\n            <summary>\n            Gets the head (first element) of doubly-linked list.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTList.Tail\">\n            <summary>\n            Gets the tail (last element) of doubly-linked list.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTList.Find(System.IntPtr)\">\n            <summary>\n            Find the list node for a given listed object.\n            </summary>\n            <param name=\"data\">The address of the listed object.</param>\n            <returns>List node. NULL if it wasn't found.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTList.Add(SharpFont.ListNode)\">\n            <summary>\n            Append an element to the end of a list.\n            </summary>\n            <param name=\"node\">The node to append.</param>\n        </member>\n        <member name=\"M:SharpFont.FTList.Insert(SharpFont.ListNode)\">\n            <summary>\n            Insert an element at the head of a list.\n            </summary>\n            <param name=\"node\">The node to insert.</param>\n        </member>\n        <member name=\"M:SharpFont.FTList.Remove(SharpFont.ListNode)\">\n            <summary>\n            Remove a node from a list. This function doesn't check whether the node is in the list!\n            </summary>\n            <param name=\"node\">The node to remove.</param>\n        </member>\n        <member name=\"M:SharpFont.FTList.Up(SharpFont.ListNode)\">\n            <summary>\n            Move a node to the head/top of a list. Used to maintain LRU lists.\n            </summary>\n            <param name=\"node\">The node to move.</param>\n        </member>\n        <member name=\"M:SharpFont.FTList.Iterate(SharpFont.ListIterator,System.IntPtr)\">\n            <summary>\n            Parse a list and calls a given iterator function on each element. Note that parsing is stopped as soon as\n            one of the iterator calls returns a non-zero value.\n            </summary>\n            <param name=\"iterator\">An iterator function, called on each node of the list.</param>\n            <param name=\"user\">A user-supplied field which is passed as the second argument to the iterator.</param>\n        </member>\n        <member name=\"M:SharpFont.FTList.Finalize(SharpFont.ListDestructor,SharpFont.Memory,System.IntPtr)\">\n            <summary>\n            Destroy all elements in the list as well as the list itself.\n            </summary>\n            <remarks>\n            This function expects that all nodes added by <see cref=\"M:SharpFont.FTList.Add(SharpFont.ListNode)\"/> or <see cref=\"M:SharpFont.FTList.Insert(SharpFont.ListNode)\"/> have been\n            dynamically allocated.\n            </remarks>\n            <param name=\"destroy\">A list destructor that will be applied to each element of the list.</param>\n            <param name=\"memory\">The current memory object which handles deallocation.</param>\n            <param name=\"user\">A user-supplied field which is passed as the last argument to the destructor.</param>\n        </member>\n        <member name=\"T:SharpFont.GlyphToScriptMapProperty\">\n            <summary>\n            The data exchange structure for the glyph-to-script-map property.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.GlyphToScriptMapProperty.#ctor(SharpFont.Face)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.GlyphToScriptMapProperty\"/> class.\n            </summary>\n            <param name=\"face\">The face to apply the property to.</param>\n        </member>\n        <member name=\"P:SharpFont.GlyphToScriptMapProperty.Face\">\n            <summary>\n            Gets or sets the associated face.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphToScriptMapProperty.Map\">\n            <summary>\n            Gets or sets the associated map.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.IncreaseXHeightProperty\">\n            <summary>\n            The data exchange structure for the increase-x-height property.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.IncreaseXHeightProperty.#ctor(SharpFont.Face)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.IncreaseXHeightProperty\"/> class.\n            </summary>\n            <param name=\"face\">The face to increase the X height of.</param>\n        </member>\n        <member name=\"P:SharpFont.IncreaseXHeightProperty.Face\">\n            <summary>\n            Gets or sets the associated face.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.IncreaseXHeightProperty.Limit\">\n            <summary>\n            Gets or sets the limit property.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Internal.BitmapRec\">\n            <summary>\n            Internally represents a Bitmap.\n            </summary>\n            <remarks>\n            Refer to <see cref=\"T:SharpFont.FTBitmap\"/> for FreeType documentation.\n            </remarks>\n        </member>\n        <member name=\"T:SharpFont.Internal.BitmapSizeRec\">\n            <summary>\n            Internally represents a BitmapSize.\n            </summary>\n            <remarks>\n            Refer to <see cref=\"T:SharpFont.BitmapSize\"/> for FreeType documentation.\n            </remarks>\n        </member>\n        <member name=\"T:SharpFont.Internal.CharMapRec\">\n            <summary>\n            Internally represents a CharMap.\n            </summary>\n            <remarks>\n            Refer to <see cref=\"T:SharpFont.CharMap\"/> for FreeType documentation.\n            </remarks>\n        </member>\n        <member name=\"T:SharpFont.Internal.FaceRec\">\n            <summary>\n            Internally represents a Face.\n            </summary>\n            <remarks>\n            Refer to <see cref=\"T:SharpFont.Face\"/> for FreeType documentation.\n            </remarks>\n        </member>\n        <member name=\"T:SharpFont.Internal.GlyphMetricsRec\">\n            <summary>\n            Internally represents a GlyphMetrics.\n            </summary>\n            <remarks>\n            Refer to <see cref=\"T:SharpFont.GlyphMetrics\"/> for FreeType documentation.\n            </remarks>\n        </member>\n        <member name=\"T:SharpFont.Internal.GlyphSlotRec\">\n            <summary>\n            Internally represents a GlyphSlot.\n            </summary>\n            <remarks>\n            Refer to <see cref=\"T:SharpFont.GlyphSlot\"/> for FreeType documentation.\n            </remarks>\n        </member>\n        <member name=\"T:SharpFont.Internal.SizeRequestRec\">\n            <summary>\n            Internally represents a <see cref=\"T:SharpFont.SizeRequest\"/>.\n            </summary>\n            <remarks>\n            Refer to <see cref=\"T:SharpFont.SizeRequest\"/> for FreeType documentation.\n            </remarks>\n        </member>\n        <member name=\"T:SharpFont.LcdFilter\">\n            <summary>\n            A list of values to identify various types of LCD filters.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LcdFilter.None\">\n            <summary>\n            Do not perform filtering. When used with subpixel rendering, this results in sometimes severe color\n            fringes.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LcdFilter.Default\">\n            <summary>\n            The default filter reduces color fringes considerably, at the cost of a slight blurriness in the output.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LcdFilter.Light\">\n            <summary>\n            The light filter is a variant that produces less blurriness at the cost of slightly more color fringes than\n            the default one. It might be better, depending on taste, your monitor, or your personal vision.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LcdFilter.Legacy\">\n            <summary><para>\n            This filter corresponds to the original libXft color filter. It provides high contrast output but can\n            exhibit really bad color fringes if glyphs are not extremely well hinted to the pixel grid. In other words,\n            it only works well if the TrueType bytecode interpreter is enabled and high-quality hinted fonts are used.\n            </para><para>\n            This filter is only provided for comparison purposes, and might be disabled or stay unsupported in the\n            future.\n            </para></summary>\n        </member>\n        <member name=\"T:SharpFont.ListNode\">\n            <summary>\n            A structure used to hold a single list element.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ListNode.Previous\">\n            <summary>\n            Gets the previous element in the list. NULL if first.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ListNode.Next\">\n            <summary>\n            Gets the next element in the list. NULL if last.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ListNode.Data\">\n            <summary>\n            Gets a typeless pointer to the listed object.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.AllocFunc\">\n            <summary>\n            A function used to allocate ‘size’ bytes from ‘memory’.\n            </summary>\n            <param name=\"memory\">A handle to the source memory manager.</param>\n            <param name=\"size\">The size in bytes to allocate.</param>\n            <returns>Address of new memory block. 0 in case of failure.</returns>\n        </member>\n        <member name=\"T:SharpFont.FreeFunc\">\n            <summary>\n            A function used to release a given block of memory.\n            </summary>\n            <param name=\"memory\">A handle to the source memory manager.</param>\n            <param name=\"block\">The address of the target memory block.</param>\n        </member>\n        <member name=\"T:SharpFont.ReallocFunc\">\n            <summary>\n            A function used to re-allocate a given block of memory.\n            </summary>\n            <remarks>\n            In case of error, the old block must still be available.\n            </remarks>\n            <param name=\"memory\">A handle to the source memory manager.</param>\n            <param name=\"currentSize\">The block's current size in bytes.</param>\n            <param name=\"newSize\">The block's requested new size.</param>\n            <param name=\"block\">The block's current address.</param>\n            <returns>New block address. 0 in case of memory shortage.</returns>\n        </member>\n        <member name=\"T:SharpFont.Memory\">\n            <summary>\n            A structure used to describe a given memory manager to FreeType 2.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Memory.User\">\n            <summary>\n            Gets a generic typeless pointer for user data.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Memory.Allocate\">\n            <summary>\n            Gets a pointer type to an allocation function.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Memory.Free\">\n            <summary>\n            Gets a pointer type to an memory freeing function.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Memory.Reallocate\">\n            <summary>\n            Gets a pointer type to a reallocation function.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Memory.GzipUncompress(System.Byte[],System.Byte[])\">\n            <summary>\n            Decompress a zipped input buffer into an output buffer. This function is modeled after zlib's ‘uncompress’\n            function.\n            </summary>\n            <remarks>\n            This function may return <see cref=\"F:SharpFont.Error.UnimplementedFeature\"/> if your build of FreeType was not\n            compiled with zlib support.\n            </remarks>\n            <param name=\"input\">The input buffer.</param>\n            <param name=\"output\">The output buffer.</param>\n            <returns>The length of the used data in output.</returns>\n        </member>\n        <member name=\"T:SharpFont.ModuleConstructor\">\n            <summary>\n            A function used to initialize (not create) a new module object.\n            </summary>\n            <param name=\"module\">The module to initialize.</param>\n            <returns>FreeType error code.</returns>\n        </member>\n        <member name=\"T:SharpFont.ModuleDestructor\">\n            <summary>\n            A function used to finalize (not destroy) a given module object.\n            </summary>\n            <param name=\"module\">The module to finalize.</param>\n        </member>\n        <member name=\"T:SharpFont.ModuleRequester\">\n            <summary>\n            A function used to query a given module for a specific interface.\n            </summary>\n            <param name=\"module\">The module that contains the interface.</param>\n            <param name=\"name\">The name of the interface in the module.</param>\n            <returns>The interface.</returns>\n        </member>\n        <member name=\"T:SharpFont.ModuleClass\">\n            <summary>\n            The module class descriptor.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ModuleClass.Flags\">\n            <summary>\n            Gets bit flags describing the module.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ModuleClass.Size\">\n            <summary>\n            Gets the size of one module object/instance in bytes.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ModuleClass.Name\">\n            <summary>\n            Gets the name of the module.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ModuleClass.Version\">\n            <summary>\n            Gets the version, as a 16.16 fixed number (major.minor).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ModuleClass.Requires\">\n            <summary>\n            Gets the version of FreeType this module requires, as a 16.16 fixed number (major.minor). Starts at version\n            2.0, i.e., 0x20000.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ModuleClass.Init\">\n            <summary>\n            Gets the initializing function.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ModuleClass.Done\">\n            <summary>\n            Gets the finalizing function.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.ModuleClass.GetInterface\">\n            <summary>\n            Gets the interface requesting function.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.MultipleMasters.MMAxis\">\n            <summary><para>\n            A simple structure used to model a given axis in design space for Multiple Masters fonts.\n            </para><para>\n            This structure can't be used for GX var fonts.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MMAxis.Name\">\n            <summary>\n            Gets the axis's name.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MMAxis.Minimum\">\n            <summary>\n            Gets the axis's minimum design coordinate.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MMAxis.Maximum\">\n            <summary>\n            Gets the axis's maximum design coordinate.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.MultipleMasters.MMVar\">\n            <summary><para>\n            A structure used to model the axes and space of a Multiple Masters or GX var distortable font.\n            </para><para>\n            Some fields are specific to one format and not to the other.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MMVar.AxisCount\">\n            <summary>\n            Gets the number of axes. The maximum value is 4 for MM; no limit in GX.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MMVar.DesignsCount\">\n            <summary>\n            Gets the number of designs; should be normally 2^num_axis for MM fonts. Not meaningful for GX (where every\n            glyph could have a different number of designs).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MMVar.NamedStylesCount\">\n            <summary>\n            Gets the number of named styles; only meaningful for GX which allows certain design coordinates to have a\n            string ID (in the ‘name’ table) associated with them. The font can tell the user that, for example,\n            Weight=1.5 is ‘Bold’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MMVar.Axis\">\n            <summary>\n            Gets a table of axis descriptors. GX fonts contain slightly more data than MM.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MMVar.NamedStyle\">\n            <summary>\n            Gets a table of named styles. Only meaningful with GX.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.MultipleMasters.MultiMaster\">\n            <summary><para>\n            A structure used to model the axes and space of a Multiple Masters font.\n            </para><para>\n            This structure can't be used for GX var fonts.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MultiMaster.AxisCount\">\n            <summary>\n            Gets the number of axes. Cannot exceed 4.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MultiMaster.DesignsCount\">\n            <summary>\n            Gets the number of designs; should be normally 2^num_axis even though the Type 1 specification strangely\n            allows for intermediate designs to be present. This number cannot exceed 16.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.MultiMaster.Axis\">\n            <summary>\n            Gets a table of axis descriptors.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.MultipleMasters.VarAxis\">\n            <summary>\n            A simple structure used to model a given axis in design space for Multiple Masters and GX var fonts.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.VarAxis.Name\">\n            <summary>\n            Gets the axis's name. Not always meaningful for GX.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.VarAxis.Minimum\">\n            <summary>\n            Gets the axis's minimum design coordinate.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.VarAxis.Default\">\n            <summary>\n            Gets the axis's default design coordinate. FreeType computes meaningful default values for MM; it is then\n            an integer value, not in 16.16 format.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.VarAxis.Maximum\">\n            <summary>\n            Gets the axis's maximum design coordinate.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.VarAxis.Tag\">\n            <summary>\n            Gets the axis's tag (the GX equivalent to ‘name’). FreeType provides default values for MM if possible.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.VarAxis.StrId\">\n            <summary>\n            Gets the entry in ‘name’ table (another GX version of ‘name’). Not meaningful for MM.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.MultipleMasters.VarNamedStyle\">\n            <summary><para>\n            A simple structure used to model a named style in a GX var font.\n            </para><para>\n            This structure can't be used for MM fonts.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.VarNamedStyle.Coordinates\">\n            <summary>\n            Gets the design coordinates for this style. This is an array with one entry for each axis.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.MultipleMasters.VarNamedStyle.StrId\">\n            <summary>\n            Gets the entry in ‘name’ table identifying this style.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.OpenTypeValidationFlags\">\n            <summary>\n            A list of bit-field constants used with <see cref=\"M:SharpFont.Face.OpenTypeValidate(SharpFont.OpenTypeValidationFlags,System.IntPtr@,System.IntPtr@,System.IntPtr@,System.IntPtr@,System.IntPtr@)\"/> to indicate which OpenType tables\n            should be validated.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OpenTypeValidationFlags.Base\">\n            <summary>Validate BASE table.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenTypeValidationFlags.Gdef\">\n            <summary>Validate GDEF table.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenTypeValidationFlags.Gpos\">\n            <summary>Validate GPOS table.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenTypeValidationFlags.Gsub\">\n            <summary>Validate GSUB table.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenTypeValidationFlags.Jstf\">\n            <summary>Validate JSTF table.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenTypeValidationFlags.Math\">\n            <summary>Validate MATH table.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenTypeValidationFlags.All\">\n            <summary>Validate all OpenType tables.</summary>\n        </member>\n        <member name=\"T:SharpFont.Orientation\">\n            <summary><para>\n            A list of values used to describe an outline's contour orientation.\n            </para><para>\n            The TrueType and PostScript specifications use different conventions to determine whether outline contours\n            should be filled or unfilled.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.Orientation.TrueType\">\n            <summary>\n            According to the TrueType specification, clockwise contours must be filled, and counter-clockwise ones must\n            be unfilled.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Orientation.PostScript\">\n            <summary>\n            According to the PostScript specification, counter-clockwise contours must be filled, and clockwise ones\n            must be unfilled.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Orientation.FillRight\">\n            <summary>\n            This is identical to <see cref=\"F:SharpFont.Orientation.TrueType\"/>, but is used to remember that in TrueType, everything that is\n            to the right of the drawing direction of a contour must be filled.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Orientation.FillLeft\">\n            <summary>\n            This is identical to <see cref=\"F:SharpFont.Orientation.PostScript\"/>, but is used to remember that in PostScript, everything that\n            is to the left of the drawing direction of a contour must be filled.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Orientation.None\">\n            <summary>\n            The orientation cannot be determined. That is, different parts of the glyph have different orientation.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.OutlineGlyph\">\n            <summary>\n            A structure used for outline (vectorial) glyph images. This really is a ‘sub-class’ of <see cref=\"T:SharpFont.Glyph\"/>.\n            </summary>\n            <remarks><para>\n            You can typecast an <see cref=\"T:SharpFont.Glyph\"/> to <see cref=\"T:SharpFont.OutlineGlyph\"/> if you have ‘<see cref=\"P:SharpFont.Glyph.Format\"/>\n            == <see cref=\"F:SharpFont.GlyphFormat.Outline\"/>’. This lets you access the outline's content easily.\n            </para><para>\n            As the outline is extracted from a glyph slot, its coordinates are expressed normally in 26.6 pixels, unless\n            the flag <see cref=\"F:SharpFont.LoadFlags.NoScale\"/> was used in <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> or\n            <see cref=\"M:SharpFont.Face.LoadChar(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>.\n            </para><para>\n            The outline's tables are always owned by the object and are destroyed with it.\n            </para></remarks>\n        </member>\n        <member name=\"M:SharpFont.OutlineGlyph.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:SharpFont.OutlineGlyph\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OutlineGlyph.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the object has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OutlineGlyph.Root\">\n            <summary>\n            Gets the root <see cref=\"T:SharpFont.Glyph\"/> fields.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OutlineGlyph.Outline\">\n            <summary>\n            Gets a descriptor for the outline.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.OutlineGlyph.op_Implicit(SharpFont.OutlineGlyph)~SharpFont.Glyph\">\n            <summary>\n            Casts a <see cref=\"T:SharpFont.OutlineGlyph\"/> back up to a <see cref=\"T:SharpFont.Glyph\"/>. The eqivalent of\n            <see cref=\"P:SharpFont.OutlineGlyph.Root\"/>.\n            </summary>\n            <param name=\"g\">A <see cref=\"T:SharpFont.OutlineGlyph\"/>.</param>\n            <returns>A <see cref=\"T:SharpFont.Glyph\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.OutlineGlyph.ToGlyph\">\n            <summary>\n            A CLS-compliant version of the implicit cast to <see cref=\"T:SharpFont.Glyph\"/>.\n            </summary>\n            <returns>A <see cref=\"T:SharpFont.Glyph\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.OutlineGlyph.Dispose\">\n            <summary>\n            Disposes an instance of the <see cref=\"T:SharpFont.OutlineGlyph\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.PInvokeHelper\">\n            <summary>\n            Helpful methods to make marshalling simpler.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.PInvokeHelper.PtrToStructure``1(System.IntPtr)\">\n            <summary>\n            A generic wrapper for <see cref=\"M:System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Type)\"/>.\n            </summary>\n            <typeparam name=\"T\">The type to cast to.</typeparam>\n            <param name=\"reference\">The pointer that holds the struct.</param>\n            <returns>A marshalled struct.</returns>\n        </member>\n        <member name=\"M:SharpFont.PInvokeHelper.Copy(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.Int32)\">\n            <summary>\n            A method to copy data from one pointer to another, byte by byte.\n            </summary>\n            <param name=\"source\">The source pointer.</param>\n            <param name=\"destination\">The destination pointer.</param>\n            <param name=\"count\">The number of bytes to copy.</param>\n        </member>\n        <member name=\"T:SharpFont.PostScript.FaceDict\">\n            <summary>\n            A structure used to represent data in a CID top-level dictionary.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.PostScript.FaceInfo\">\n            <summary>\n            A structure used to represent CID Face information.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.PostScript.FontInfo\">\n            <summary>\n            A structure used to model a Type 1 or Type 2 FontInfo dictionary. Note that for Multiple Master fonts, each\n            instance has its own FontInfo dictionary.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.PostScript.Private\">\n            <summary>\n            A structure used to model a Type 1 or Type 2 private dictionary. Note that for Multiple Master fonts, each\n            instance has its own Private dictionary.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.PostScript.DictionaryKeys\">\n            <summary>\n            An enumeration used in calls to <see cref=\"M:SharpFont.Face.GetPSFontValue(SharpFont.PostScript.DictionaryKeys,System.UInt32,System.IntPtr@,System.Int32)\"/> to identify the Type 1 dictionary entry to\n            retrieve.\n            </summary>\n            <see href=\"http://partners.adobe.com/public/developer/en/font/T1_SPEC.PDF\"/>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.FontType\">\n            <summary>\n            The font's type. Type 1 fonts must have a value of 1.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.FontMatrix\">\n            <summary>\n            The font's matrix. Typically scaled 1000:1.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.FontBBox\">\n            <summary>\n            The font's general bounding box.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.PaintType\">\n            <summary>\n            The font's method of painting characters. Type 1 only supports fill (0) and outline (2).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.FontName\">\n            <summary>\n            The font's name.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.UniqueId\">\n            <summary>\n            A unique identifier for popular fonts assigned by Adobe.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.NumCharStrings\">\n            <summary>\n            The number of characters the font can draw.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.NumSubrs\">\n            <summary>\n            The number of charstring subroutines in the font.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.Subr\">\n            <summary>\n            The font's subroutines.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.StdHW\">\n            <summary>\n            An array with only one real number entry expressing the dominant width of horizontal stems (measured\n            vertically in character space units).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.StdVW\">\n            <summary>\n            An array with only one real number entry expressing the dominant width of vertical stems (measured\n            horizontally in character space units).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.NumBlueValues\">\n            <summary>\n            The number of BlueValues the font defines. The value must be at least 0 and at most 14. (7 integer pairs).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.BlueValue\">\n            <summary>\n            An array of integer pairs. The first pair must be the base overshoot position and the base-line.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.BlueFuzz\">\n            <summary>\n            An optional entry that speciﬁes the number of character space units to extend (in both directions) the\n            effect of an alignment zone on a horizontal stem. The default value is 1.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.NumOtherBlues\">\n            <summary>\n            The number of OtherBlue values. The value must be at least 0 and at most 10 (5 integer pairs).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.OtherBlue\">\n            <summary>\n            An optional array of integer pairs very similar to those in <see cref=\"F:SharpFont.PostScript.DictionaryKeys.BlueValue\"/>.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.NumFamilyBlues\">\n            <summary>\n            The number of FamilyBlue values.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.FamilyBlue\">\n            <summary>\n            An array of integer pairs very similar to those in <see cref=\"F:SharpFont.PostScript.DictionaryKeys.BlueValue\"/>.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.NumFamilyOtherBlues\">\n            <summary>\n            The number of FamilyOtherBlue values.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.FamilyOtherBlue\">\n            <summary>\n            An array of integer pairs very similar to those in <see cref=\"F:SharpFont.PostScript.DictionaryKeys.OtherBlue\"/>.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.BlueScale\">\n            <summary>\n            An optional entry that controls the point size at which overshoot suppression ceases. The default value is\n            0.039625.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.BlueShift\">\n            <summary>\n            An optional entry that indicates a character space distance beyond the ﬂat position of alignment zones at\n            which overshoot enforcement for character features occurs. The default value is 7.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.NumStemSnapH\">\n            <summary>\n            The number of StemSnapH values. Cannot exceed 12.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.StemSnapH\">\n            <summary>\n            An array of up to 12 real numbers of the most common widths (including the dominant width given in the\n            StdHW array) for horizontal stems (measured vertically). These widths must be sorted in increasing order.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.NumStemSnapV\">\n            <summary>\n            The number of StemSnapV values. Cannot exceed 12.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.StemSnapV\">\n            <summary>\n            An array of up to 12 real numbers of the most common widths (including the dominant width given in the\n            StdVW array) for vertical stems (measured horizontally). These widths must be sorted in increasing order.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.ForceBold\">\n            <summary>\n            A boolean value indicating whether to force bold characters when a regular character is drawn 1-pixel wide.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.RndStemUp\">\n            <summary>\n            Compatibility entry. Use only for font programs in language group 1.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.MinFeature\">\n            <summary>\n            Obsolete. Set to {16 16}. Required.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.LenIV\">\n            <summary>\n            An integer specifying the number of random bytes at the beginning of charstrings for encryption. By default\n            this value is 4.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.Password\">\n            <summary>\n            Compatibility entry. Set to 5839.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PostScript.DictionaryKeys.LanguageGroup\">\n            <summary>\n            Identifies the language group of the font. A value of 0 indicates a language that uses Latin, Greek,\n            Cyrillic, etc. characters. A value of 1 indicates a language that consists of Chinese ideographs, Jpaanese\n            Kanji, and Korean Hangul. The default value is 0.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.PostScript.BlendFlags\">\n            <summary>\n            A set of flags used to indicate which fields are present in a given blend dictionary (font info or private).\n            Used to support Multiple Masters fonts.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.PostScript.EncodingType\">\n            <summary>\n            An enumeration describing the ‘Encoding’ entry in a Type 1 dictionary.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Raster\">\n            <summary>\n            A handle (pointer) to a raster object. Each object can be used independently to convert an outline into a\n            bitmap or pixmap.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.RasterFlags\">\n            <summary>\n            A list of bit flag constants as used in the ‘flags’ field of a <see cref=\"T:SharpFont.RasterParams\"/> structure.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.RasterFlags.Default\">\n            <summary>\n            This value is 0.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.RasterFlags.AntiAlias\">\n            <summary>\n            This flag is set to indicate that an anti-aliased glyph image should be generated. Otherwise, it will be\n            monochrome (1-bit).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.RasterFlags.Direct\">\n            <summary><para>\n            This flag is set to indicate direct rendering. In this mode, client applications must provide their own\n            span callback. This lets them directly draw or compose over an existing bitmap. If this bit is not set, the\n            target pixmap's buffer must be zeroed before rendering.\n            </para><para>\n            Note that for now, direct rendering is only possible with anti-aliased glyphs.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.RasterFlags.Clip\">\n            <summary><para>\n            This flag is only used in direct rendering mode. If set, the output will be clipped to a box specified in\n            the ‘clip_box’ field of the <see cref=\"T:SharpFont.RasterParams\"/> structure.\n            </para><para>\n            Note that by default, the glyph bitmap is clipped to the target pixmap, except in direct rendering mode\n            where all spans are generated if no clipping box is set.\n            </para></summary>\n        </member>\n        <member name=\"T:SharpFont.RasterNewFunc\">\n            <summary>\n            A function used to create a new raster object.\n            </summary>\n            <remarks>\n            The ‘memory’ parameter is a typeless pointer in order to avoid un-wanted dependencies on the rest of the\n            FreeType code. In practice, it is an <see cref=\"T:SharpFont.Memory\"/> object, i.e., a handle to the standard FreeType\n            memory allocator. However, this field can be completely ignored by a given raster implementation.\n            </remarks>\n            <param name=\"memory\">A handle to the memory allocator.</param>\n            <param name=\"raster\">A handle to the new raster object.</param>\n            <returns>Error code. 0 means success.</returns>\n        </member>\n        <member name=\"T:SharpFont.RasterDoneFunc\">\n            <summary>\n            A function used to destroy a given raster object.\n            </summary>\n            <param name=\"raster\">A handle to the raster object.</param>\n        </member>\n        <member name=\"T:SharpFont.RasterResetFunc\">\n            <summary><para>\n            FreeType provides an area of memory called the ‘render pool’, available to all registered rasters. This pool\n            can be freely used during a given scan-conversion but is shared by all rasters. Its content is thus transient.\n            </para><para>\n            This function is called each time the render pool changes, or just after a new raster object is created.\n            </para></summary>\n            <remarks>\n            Rasters can ignore the render pool and rely on dynamic memory allocation if they want to (a handle to the\n            memory allocator is passed to the raster constructor). However, this is not recommended for efficiency\n            purposes.\n            </remarks>\n            <param name=\"raster\">A handle to the new raster object.</param>\n            <param name=\"pool_base\">The address in memory of the render pool.</param>\n            <param name=\"pool_size\">The size in bytes of the render pool.</param>\n        </member>\n        <member name=\"T:SharpFont.RasterSetModeFunc\">\n            <summary>\n            This function is a generic facility to change modes or attributes in a given raster. This can be used for\n            debugging purposes, or simply to allow implementation-specific ‘features’ in a given raster module.\n            </summary>\n            <param name=\"raster\">A handle to the new raster object.</param>\n            <param name=\"mode\">A 4-byte tag used to name the mode or property.</param>\n            <param name=\"args\">A pointer to the new mode/property to use.</param>\n        </member>\n        <member name=\"T:SharpFont.RasterRenderFunc\">\n            <summary>\n            Invoke a given raster to scan-convert a given glyph image into a target\n            bitmap.\n            </summary>\n            <remarks><para>\n            The exact format of the source image depends on the raster's glyph format defined in its\n            <see cref=\"T:SharpFont.RasterFuncs\"/> structure. It can be an <see cref=\"T:SharpFont.Outline\"/> or anything else in order to support a\n            large array of glyph formats.\n            </para><para>\n            Note also that the render function can fail and return a <see cref=\"F:SharpFont.Error.UnimplementedFeature\"/> error code if\n            the raster used does not support direct composition.\n            </para><para>\n            XXX: For now, the standard raster doesn't support direct composition but this should change for the final\n            release (see the files ‘demos/src/ftgrays.c’ and ‘demos/src/ftgrays2.c’ for examples of distinct\n            implementations which support direct composition).\n            </para></remarks>\n            <param name=\"raster\">A handle to the raster object.</param>\n            <param name=\"params\">\n            A pointer to an <see cref=\"T:SharpFont.RasterParams\"/> structure used to store the rendering parameters.\n            </param>\n            <returns>Error code. 0 means success.</returns>\n        </member>\n        <member name=\"T:SharpFont.RasterFuncs\">\n            <summary>\n            A structure used to describe a given raster class to the library.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterFuncs.Format\">\n            <summary>\n            Gets the supported glyph format for this raster.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterFuncs.New\">\n            <summary>\n            Gets the raster constructor.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterFuncs.Reset\">\n            <summary>\n            Gets a function used to reset the render pool within the raster.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterFuncs.SetMode\">\n            <summary>\n            Gets a function to set or change modes.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterFuncs.Render\">\n            <summary>\n            Gets a function to render a glyph into a given bitmap.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterFuncs.Done\">\n            <summary>\n            Gets the raster destructor.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.RasterSpanFunc\">\n            <summary>\n            A function used as a call-back by the anti-aliased renderer in order to let client applications draw themselves\n            the gray pixel spans on each scan line.\n            </summary>\n            <remarks><para>\n            This callback allows client applications to directly render the gray spans of the anti-aliased bitmap to any\n            kind of surfaces.\n            </para><para>\n            This can be used to write anti-aliased outlines directly to a given background bitmap, and even perform\n            translucency.\n            </para><para>\n            Note that the ‘count’ field cannot be greater than a fixed value defined by the ‘FT_MAX_GRAY_SPANS’\n            configuration macro in ‘ftoption.h’. By default, this value is set to 32, which means that if there are more\n            than 32 spans on a given scanline, the callback is called several times with the same ‘y’ parameter in order to\n            draw all callbacks.\n            </para><para>\n            Otherwise, the callback is only called once per scan-line, and only for those scanlines that do have ‘gray’\n            pixels on them.\n            </para></remarks>\n            <param name=\"y\">The scanline's y coordinate.</param>\n            <param name=\"count\">The number of spans to draw on this scanline.</param>\n            <param name=\"spans\">A table of ‘count’ spans to draw on the scanline.</param>\n            <param name=\"user\">User-supplied data that is passed to the callback.</param>\n        </member>\n        <member name=\"T:SharpFont.RasterBitTestFunc\">\n            <summary><para>\n            THIS TYPE IS DEPRECATED. DO NOT USE IT.\n            </para><para>\n            A function used as a call-back by the monochrome scan-converter to test whether a given target pixel is already\n            set to the drawing ‘color’. These tests are crucial to implement drop-out control per-se the TrueType spec.\n            </para></summary>\n            <param name=\"y\">The pixel's y coordinate.</param>\n            <param name=\"x\">The pixel's x coordinate.</param>\n            <param name=\"user\">User-supplied data that is passed to the callback.</param>\n            <returns>1 if the pixel is ‘set’, 0 otherwise.</returns>\n        </member>\n        <member name=\"T:SharpFont.RasterBitSetFunc\">\n            <summary><para>\n            THIS TYPE IS DEPRECATED. DO NOT USE IT.\n            </para><para>\n            A function used as a call-back by the monochrome scan-converter to set an individual target pixel. This is\n            crucial to implement drop-out control according to the TrueType specification.\n            </para></summary>\n            <param name=\"y\">The pixel's y coordinate.</param>\n            <param name=\"x\">The pixel's x coordinate.</param>\n            <param name=\"user\">User-supplied data that is passed to the callback.</param>\n        </member>\n        <member name=\"T:SharpFont.RasterParams\">\n            <summary>\n            A structure to hold the arguments used by a raster's render function.\n            </summary>\n            <remarks><para>\n            An anti-aliased glyph bitmap is drawn if the <see cref=\"F:SharpFont.RasterFlags.AntiAlias\"/> bit flag is set in the ‘flags’\n            field, otherwise a monochrome bitmap is generated.\n            </para><para>\n            If the <see cref=\"F:SharpFont.RasterFlags.Direct\"/> bit flag is set in ‘flags’, the raster will call the ‘gray_spans’\n            callback to draw gray pixel spans, in the case of an aa glyph bitmap, it will call ‘black_spans’, and\n            ‘bit_test’ and ‘bit_set’ in the case of a monochrome bitmap. This allows direct composition over a pre-existing\n            bitmap through user-provided callbacks to perform the span drawing/composition.\n            </para><para>\n            Note that the ‘bit_test’ and ‘bit_set’ callbacks are required when rendering a monochrome bitmap, as they are\n            crucial to implement correct drop-out control as defined in the TrueType specification.\n            </para></remarks>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.Target\">\n            <summary>\n            Gets the target bitmap.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.Source\">\n            <summary>\n            Gets a pointer to the source glyph image (e.g., an <see cref=\"T:SharpFont.Outline\"/>).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.Flags\">\n            <summary>\n            Gets the rendering flags.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.GraySpans\">\n            <summary>\n            Gets the gray span drawing callback.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.BlackSpans\">\n            <summary>\n            Gets the black span drawing callback. UNIMPLEMENTED!\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.BitTest\">\n            <summary>\n            Gets the bit test callback. UNIMPLEMENTED!\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.BitSet\">\n            <summary>\n            Gets the bit set callback. UNIMPLEMENTED!\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.User\">\n            <summary>\n            Gets the user-supplied data that is passed to each drawing callback.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RasterParams.ClipBox\">\n            <summary>\n            Gets an optional clipping box. It is only used in direct rendering mode. Note that coordinates here should\n            be expressed in integer pixels (and not in 26.6 fixed-point units).\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Renderer\">\n            <summary>\n            A handle to a given FreeType renderer. A renderer is a special module in charge of converting a glyph image to\n            a bitmap, when necessary. Each renderer supports a given glyph image format, and one or more target surface\n            depths.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.RendererClass\">\n            <summary>\n            The renderer module class descriptor.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RendererClass.Root\">\n            <summary>\n            Gets the root <see cref=\"T:SharpFont.ModuleClass\"/> fields.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RendererClass.Format\">\n            <summary>\n            Gets the glyph image format this renderer handles.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RendererClass.RenderGlyph\">\n            <summary>\n            Gets a method used to render the image that is in a given glyph slot into a bitmap.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RendererClass.TransformGlyph\">\n            <summary>\n            Gets a method used to transform the image that is in a given glyph slot.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RendererClass.GetGlyphCBox\">\n            <summary>\n            Gets a method used to access the glyph's cbox.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RendererClass.SetMode\">\n            <summary>\n            Gets a method used to pass additional parameters.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.RendererClass.RasterClass\">\n            <summary>\n            Gets a pointer to its raster's class.\n            </summary>\n            <remarks>For <see cref=\"F:SharpFont.GlyphFormat.Outline\"/> renderers only.</remarks>\n        </member>\n        <member name=\"T:SharpFont.StreamDesc\">\n            <summary>\n            A union type used to store either a long or a pointer. This is used to store a file descriptor or a ‘FILE*’ in\n            an input stream.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.StreamDesc.Value\">\n            <summary>\n            Gets the <see cref=\"T:SharpFont.StreamDesc\"/> as a file descriptor.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.StreamDesc.Pointer\">\n            <summary>\n            Gets the <see cref=\"T:SharpFont.StreamDesc\"/> as an input stream (FILE*).\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Stroker\">\n            <summary>\n            Opaque handler to a path stroker object.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Stroker.#ctor(SharpFont.Library)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Stroker\"/> class.\n            </summary>\n            <param name=\"library\">FreeType library handle.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:SharpFont.Stroker\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Stroker.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the <see cref=\"T:SharpFont.Stroker\"/> has been disposed.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Stroker.Set(System.Int32,SharpFont.StrokerLineCap,SharpFont.StrokerLineJoin,System.Int32)\">\n            <summary>\n            Reset a stroker object's attributes.\n            </summary>\n            <remarks>\n            The radius is expressed in the same units as the outline coordinates.\n            </remarks>\n            <param name=\"radius\">The border radius.</param>\n            <param name=\"lineCap\">The line cap style.</param>\n            <param name=\"lineJoin\">The line join style.</param>\n            <param name=\"miterLimit\">\n            The miter limit for the <see cref=\"F:SharpFont.StrokerLineJoin.MiterFixed\"/> and\n            <see cref=\"F:SharpFont.StrokerLineJoin.MiterVariable\"/> line join styles, expressed as 16.16 fixed point value.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.Rewind\">\n            <summary>\n            Reset a stroker object without changing its attributes. You should call this function before beginning a\n            new series of calls to <see cref=\"M:SharpFont.Stroker.BeginSubPath(SharpFont.FTVector,System.Boolean)\"/> or <see cref=\"M:SharpFont.Stroker.EndSubPath\"/>.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Stroker.ParseOutline(SharpFont.Outline,System.Boolean)\">\n            <summary>\n            A convenience function used to parse a whole outline with the stroker. The resulting outline(s) can be\n            retrieved later by functions like <see cref=\"M:SharpFont.Stroker.GetCounts(System.UInt32@,System.UInt32@)\"/> and <see cref=\"M:SharpFont.Stroker.Export(SharpFont.Outline)\"/>.\n            </summary>\n            <remarks><para>\n            If ‘opened’ is 0 (the default), the outline is treated as a closed path, and the stroker generates two\n            distinct ‘border’ outlines.\n            </para><para>\n            If ‘opened’ is 1, the outline is processed as an open path, and the stroker generates a single ‘stroke’\n            outline.\n            </para><para>\n            This function calls <see cref=\"M:SharpFont.Stroker.Rewind\"/> automatically.\n            </para></remarks>\n            <param name=\"outline\">The source outline.</param>\n            <param name=\"opened\">\n            A boolean. If 1, the outline is treated as an open path instead of a closed one.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.BeginSubPath(SharpFont.FTVector,System.Boolean)\">\n            <summary>\n            Start a new sub-path in the stroker.\n            </summary>\n            <remarks>\n            This function is useful when you need to stroke a path that is not stored as an <see cref=\"T:SharpFont.Outline\"/>\n            object.\n            </remarks>\n            <param name=\"to\">A pointer to the start vector.</param>\n            <param name=\"open\">A boolean. If 1, the sub-path is treated as an open one.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.EndSubPath\">\n            <summary>\n            Close the current sub-path in the stroker.\n            </summary>\n            <remarks>\n            You should call this function after <see cref=\"M:SharpFont.Stroker.BeginSubPath(SharpFont.FTVector,System.Boolean)\"/>. If the subpath was not ‘opened’, this\n            function ‘draws’ a single line segment to the start position when needed.\n            </remarks>\n        </member>\n        <member name=\"M:SharpFont.Stroker.LineTo(SharpFont.FTVector)\">\n            <summary>\n            ‘Draw’ a single line segment in the stroker's current sub-path, from the last position.\n            </summary>\n            <remarks>\n            You should call this function between <see cref=\"M:SharpFont.Stroker.BeginSubPath(SharpFont.FTVector,System.Boolean)\"/> and <see cref=\"M:SharpFont.Stroker.EndSubPath\"/>.\n            </remarks>\n            <param name=\"to\">A pointer to the destination point.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.ConicTo(SharpFont.FTVector,SharpFont.FTVector)\">\n            <summary>\n            ‘Draw’ a single quadratic Bézier in the stroker's current sub-path, from the last position.\n            </summary>\n            <remarks>\n            You should call this function between <see cref=\"M:SharpFont.Stroker.BeginSubPath(SharpFont.FTVector,System.Boolean)\"/> and <see cref=\"M:SharpFont.Stroker.EndSubPath\"/>.\n            </remarks>\n            <param name=\"control\">A pointer to a Bézier control point.</param>\n            <param name=\"to\">A pointer to the destination point.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.CubicTo(SharpFont.FTVector,SharpFont.FTVector,SharpFont.FTVector)\">\n            <summary>\n            ‘Draw’ a single cubic Bézier in the stroker's current sub-path, from the last position.\n            </summary>\n            <remarks>\n            You should call this function between <see cref=\"M:SharpFont.Stroker.BeginSubPath(SharpFont.FTVector,System.Boolean)\"/> and <see cref=\"M:SharpFont.Stroker.EndSubPath\"/>.\n            </remarks>\n            <param name=\"control1\">A pointer to the first Bézier control point.</param>\n            <param name=\"control2\">A pointer to second Bézier control point.</param>\n            <param name=\"to\">A pointer to the destination point.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.GetBorderCounts(SharpFont.StrokerBorder,System.UInt32@,System.UInt32@)\">\n            <summary>\n            Call this function once you have finished parsing your paths with the stroker. It returns the number of\n            points and contours necessary to export one of the ‘border’ or ‘stroke’ outlines generated by the stroker.\n            </summary>\n            <remarks><para>\n            When an outline, or a sub-path, is ‘closed’, the stroker generates two independent ‘border’ outlines, named\n            ‘left’ and ‘right’.\n            </para><para>\n            When the outline, or a sub-path, is ‘opened’, the stroker merges the ‘border’ outlines with caps. The\n            ‘left’ border receives all points, while the ‘right’ border becomes empty.\n            </para><para>\n            Use the function <see cref=\"M:SharpFont.Stroker.GetCounts(System.UInt32@,System.UInt32@)\"/> instead if you want to retrieve the counts associated to both\n            borders.\n            </para></remarks>\n            <param name=\"border\">The border index.</param>\n            <param name=\"pointsCount\">The number of points.</param>\n            <param name=\"contoursCount\">The number of contours.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.ExportBorder(SharpFont.StrokerBorder,SharpFont.Outline)\">\n            <summary><para>\n            Call this function after <see cref=\"M:SharpFont.Stroker.GetBorderCounts(SharpFont.StrokerBorder,System.UInt32@,System.UInt32@)\"/> to export the corresponding border to your own\n            <see cref=\"T:SharpFont.Outline\"/> structure.\n            </para><para>\n            Note that this function appends the border points and contours to your outline, but does not try to resize\n            its arrays.\n            </para></summary>\n            <remarks><para>\n            Always call this function after <see cref=\"M:SharpFont.Stroker.GetBorderCounts(SharpFont.StrokerBorder,System.UInt32@,System.UInt32@)\"/> to get sure that there is enough room in your\n            <see cref=\"T:SharpFont.Outline\"/> object to receive all new data.\n            </para><para>\n            When an outline, or a sub-path, is ‘closed’, the stroker generates two independent ‘border’ outlines, named\n            ‘left’ and ‘right’.\n            </para><para>\n            When the outline, or a sub-path, is ‘opened’, the stroker merges the ‘border’ outlines with caps. The\n            ‘left’ border receives all points, while the ‘right’ border becomes empty.\n            </para><para>\n            Use the function <see cref=\"M:SharpFont.Stroker.Export(SharpFont.Outline)\"/> instead if you want to retrieve all borders at once.\n            </para></remarks>\n            <param name=\"border\">The border index.</param>\n            <param name=\"outline\">The target outline handle.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.GetCounts(System.UInt32@,System.UInt32@)\">\n            <summary>\n            Call this function once you have finished parsing your paths with the stroker. It returns the number of\n            points and contours necessary to export all points/borders from the stroked outline/path.\n            </summary>\n            <param name=\"pointsCount\">The number of points.</param>\n            <param name=\"contoursCount\">The number of contours.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.Export(SharpFont.Outline)\">\n            <summary><para>\n            Call this function after <see cref=\"M:SharpFont.Stroker.GetBorderCounts(SharpFont.StrokerBorder,System.UInt32@,System.UInt32@)\"/> to export all borders to your own\n            <see cref=\"T:SharpFont.Outline\"/> structure.\n            </para><para>\n            Note that this function appends the border points and contours to your outline, but does not try to resize\n            its arrays.\n            </para></summary>\n            <param name=\"outline\">The target outline handle.</param>\n        </member>\n        <member name=\"M:SharpFont.Stroker.Dispose\">\n            <summary>\n            Disposes an instance of the <see cref=\"T:SharpFont.Stroker\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.StrokerBorder\">\n            <summary>\n            These values are used to select a given stroke border in <see cref=\"M:SharpFont.Stroker.GetBorderCounts(SharpFont.StrokerBorder,System.UInt32@,System.UInt32@)\"/> and\n            <see cref=\"M:SharpFont.Stroker.ExportBorder(SharpFont.StrokerBorder,SharpFont.Outline)\"/>.\n            </summary>\n            <remarks><para>\n            Applications are generally interested in the ‘inside’ and ‘outside’ borders. However, there is no direct\n            mapping between these and the ‘left’ and ‘right’ ones, since this really depends on the glyph's drawing\n            orientation, which varies between font formats.\n            </para><para>\n            You can however use <see cref=\"M:SharpFont.Outline.GetInsideBorder\"/> and <see cref=\"M:SharpFont.Outline.GetOutsideBorder\"/> to get\n            these.\n            </para></remarks>\n        </member>\n        <member name=\"F:SharpFont.StrokerBorder.Left\">\n            <summary>\n            Select the left border, relative to the drawing direction.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerBorder.Right\">\n            <summary>\n            Select the right border, relative to the drawing direction.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.StrokerLineCap\">\n            <summary>\n            These values determine how the end of opened sub-paths are rendered in a stroke.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerLineCap.Butt\">\n            <summary>\n            The end of lines is rendered as a full stop on the last point itself.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerLineCap.Round\">\n            <summary>\n            The end of lines is rendered as a half-circle around the last point.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerLineCap.Square\">\n            <summary>\n            The end of lines is rendered as a square around the last point.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.StrokerLineJoin\">\n            <summary>\n            These values determine how two joining lines are rendered in a stroker.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerLineJoin.Round\">\n            <summary>\n            Used to render rounded line joins. Circular arcs are used to join two lines smoothly.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerLineJoin.Bevel\">\n            <summary>\n            Used to render beveled line joins. The outer corner of the joined lines is filled by enclosing the\n            triangular region of the corner with a straight line between the outer corners of each stroke.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerLineJoin.MiterVariable\">\n            <summary>\n            Used to render mitered line joins, with fixed bevels if the miter limit is exceeded. The outer edges of the\n            strokes for the two segments are extended until they meet at an angle. If the segments meet at too sharp an\n            angle (such that the miter would extend from the intersection of the segments a distance greater than the\n            product of the miter limit value and the border radius), then a bevel join (see above) is used instead.\n            This prevents long spikes being created. <see cref=\"F:SharpFont.StrokerLineJoin.MiterFixed\"/> generates a miter line join as used in\n            PostScript and PDF.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerLineJoin.Miter\">\n            <summary>\n            An alias for <see cref=\"F:SharpFont.StrokerLineJoin.MiterVariable\"/>, retained for backwards compatibility.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.StrokerLineJoin.MiterFixed\">\n            <summary>\n            Used to render mitered line joins, with variable bevels if the miter limit is exceeded. The intersection of\n            the strokes is clipped at a line perpendicular to the bisector of the angle between the strokes, at the\n            distance from the intersection of the segments equal to the product of the miter limit value and the border\n            radius. This prevents long spikes being created. <see cref=\"F:SharpFont.StrokerLineJoin.MiterVariable\"/> generates a mitered line join\n            as used in XPS.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueTypeValidationFlags\">\n            <summary>\n            A list of bit-field constants used with <see cref=\"M:SharpFont.Face.TrueTypeGXValidate(SharpFont.TrueTypeValidationFlags,System.Byte[][],System.UInt32)\"/> to indicate which TrueTypeGX/AAT\n            Type tables should be validated.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Feat\">\n            <summary>Validate ‘feat’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Mort\">\n            <summary>Validate ‘mort’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Morx\">\n            <summary>Validate ‘morx’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Bsln\">\n            <summary>Validate ‘bsln’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Just\">\n            <summary>Validate ‘just’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Kern\">\n            <summary>Validate ‘kern’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Opbd\">\n            <summary>Validate ‘opbd’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Trak\">\n            <summary>Validate ‘trak’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Prop\">\n            <summary>Validate ‘prop’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.Lcar\">\n            <summary>Validate ‘lcar’ table.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueTypeValidationFlags.All\">\n            <summary>Validate all TrueTypeGX tables.</summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.SfntName\">\n            <summary>\n            A structure used to model an SFNT ‘name’ table entry.\n            </summary>\n            <remarks>\n            Possible values for ‘platform_id’, ‘encoding_id’, ‘language_id’, and ‘name_id’ are given in the file\n            ‘ttnameid.h’. For details please refer to the TrueType or OpenType specification.\n            </remarks>\n            <see cref=\"P:SharpFont.TrueType.SfntName.PlatformId\"/>\n            <see cref=\"T:SharpFont.TrueType.AppleEncodingId\"/>\n            <see cref=\"T:SharpFont.TrueType.MacEncodingId\"/>\n            <see cref=\"T:SharpFont.TrueType.MicrosoftEncodingId\"/>\n        </member>\n        <member name=\"P:SharpFont.TrueType.SfntName.PlatformId\">\n            <summary>\n            Gets the platform ID for ‘string’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.SfntName.EncodingId\">\n            <summary>\n            Gets the encoding ID for ‘string’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.SfntName.LanguageId\">\n            <summary>\n            Gets the language ID for ‘string’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.SfntName.NameId\">\n            <summary>\n            Gets an identifier for ‘string’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.SfntName.String\">\n            <summary><para>\n            Gets the ‘name’ string. Note that its format differs depending on the (platform,encoding) pair. It can be a\n            Pascal String, a UTF-16 one, etc.\n            </para><para>\n            Generally speaking, the string is not zero-terminated. Please refer to the TrueType specification for\n            details.\n            </para></summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.AppleEncodingId\">\n            <summary>\n            A list of valid values for the ‘encoding_id’ for TT_PLATFORM_APPLE_UNICODE charmaps and name entries.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AppleEncodingId.Default\">\n            <summary>Unicode version 1.0.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AppleEncodingId.Unicode11\">\n            <summary>Unicode 1.1; specifies Hangul characters starting at U+34xx.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AppleEncodingId.Iso10646\">\n            <summary>Deprecated (identical to preceding).</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AppleEncodingId.Unicode20\">\n            <summary>Unicode 2.0 and beyond (UTF-16 BMP only).</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AppleEncodingId.Unicode32\">\n            <summary>Unicode 3.1 and beyond, using UTF-32.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AppleEncodingId.VariantSelector\">\n            <summary>From Adobe, not Apple. Not a normal cmap. Specifies variations on a real cmap.</summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.MacEncodingId\">\n            <summary>\n            A list of valid values for the ‘encoding_id’ for TT_PLATFORM_MACINTOSH charmaps and name entries.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Roman\">\n            <summary>Roman encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Japanese\">\n            <summary>Japanese encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.TraditionalChinese\">\n            <summary>Traditional Chinese encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Korean\">\n            <summary>Korean encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Arabic\">\n            <summary>Arabic encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Hebrew\">\n            <summary>Hebrew encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Greek\">\n            <summary>Greek encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Russian\">\n            <summary>Russian encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.RSymbol\">\n            <summary>RSymbol encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Devanagari\">\n            <summary>Devanagari encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Gurmukhi\">\n            <summary>Gurmukhi encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Gujarati\">\n            <summary>Gujarati encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Oriya\">\n            <summary>Oriya encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Bengali\">\n            <summary>Bengali encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Tamil\">\n            <summary>Tamil encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Telugu\">\n            <summary>Telugu encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Kannada\">\n            <summary>Kannada encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Malayalam\">\n            <summary>Malayalam encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Sinhalese\">\n            <summary>Sinhalese encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Burmese\">\n            <summary>Burmese encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Khmer\">\n            <summary>Khmer encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Thai\">\n            <summary>Thai encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Laotian\">\n            <summary>Laotian encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Georgian\">\n            <summary>Georgian encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Armenian\">\n            <summary>Amernian encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Maldivian\">\n            <summary>Maldivian encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.SimplifiedChinese\">\n            <summary>Simplified Chinese encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Tibetan\">\n            <summary>Tibetan encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Mongolian\">\n            <summary>Mongolian encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Geez\">\n            <summary>Geez encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Slavic\">\n            <summary>Slavic encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Vietnamese\">\n            <summary>Vietnamese encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Sindhi\">\n            <summary>Sindhi encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MacEncodingId.Uninterpreted\">\n            <summary>No encoding specified.</summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.MicrosoftEncodingId\">\n            <summary>\n            A list of valid values for the ‘encoding_id’ for TT_PLATFORM_MICROSOFT charmaps and name entries.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MicrosoftEncodingId.Symbol\">\n            <summary>\n            Corresponds to Microsoft symbol encoding. See FT_ENCODING_MS_SYMBOL.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MicrosoftEncodingId.Unicode\">\n            <summary>\n            Corresponds to a Microsoft WGL4 charmap, matching Unicode. See FT_ENCODING_UNICODE.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MicrosoftEncodingId.Sjis\">\n            <summary>\n            Corresponds to SJIS Japanese encoding. See FT_ENCODING_SJIS.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MicrosoftEncodingId.GB2312\">\n            <summary>\n            Corresponds to Simplified Chinese as used in Mainland China. See FT_ENCODING_GB2312.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MicrosoftEncodingId.Big5\">\n            <summary>\n            Corresponds to Traditional Chinese as used in Taiwan and Hong Kong. See FT_ENCODING_BIG5.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MicrosoftEncodingId.Wansung\">\n            <summary>\n            Corresponds to Korean Wansung encoding. See FT_ENCODING_WANSUNG.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MicrosoftEncodingId.Johab\">\n            <summary>\n            Corresponds to Johab encoding. See FT_ENCODING_JOHAB.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.MicrosoftEncodingId.Ucs4\">\n            <summary>\n            Corresponds to UCS-4 or UTF-32 charmaps. This has been added to the OpenType specification version 1.4\n            (mid-2001.)\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.AdobeEncodingId\">\n            <summary>\n            A list of valid values for the ‘encoding_id’ for TT_PLATFORM_ADOBE charmaps. This is a FreeType-specific\n            extension!\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AdobeEncodingId.Standard\">\n            <summary>Adobe standard encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AdobeEncodingId.Expert\">\n            <summary>Adobe expert encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AdobeEncodingId.Custom\">\n            <summary>Adobe custom encoding.</summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.AdobeEncodingId.Latin1\">\n            <summary>Adobe Latin 1 encoding.</summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.Header\">\n            <summary>\n            A structure used to model a TrueType font header table. All fields follow the TrueType specification.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.HoriHeader\">\n            <summary>\n            A structure used to model a TrueType horizontal header, the ‘hhea’ table, as well as the corresponding\n            horizontal metrics table, i.e., the ‘hmtx’ table.\n            </summary>\n            <remarks><para>\n            IMPORTANT: The <see cref=\"T:SharpFont.TrueType.HoriHeader\"/> and <see cref=\"T:SharpFont.TrueType.VertHeader\"/> structures should be identical except for\n            the names of their fields which are different.\n            </para><para>\n            This ensures that a single function in the ‘ttload’ module is able to read both the horizontal and vertical\n            headers.\n            </para></remarks>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.Version\">\n            <summary>\n            Gets the table version.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.Ascender\">\n            <summary><para>\n            Gets the font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in\n            the font.\n            </para><para>\n            This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a\n            portion of the glyphs found in the font (maybe ASCII).\n            </para><para>\n            You should use the ‘sTypoAscender’ field of the OS/2 table instead if you want the correct one.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.Descender\">\n            <summary><para>\n            Gets the font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points\n            found in the font. It is negative.\n            </para><para>\n            This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a\n            portion of the glyphs found in the font (maybe ASCII).\n            </para><para>\n            You should use the ‘sTypoDescender’ field of the OS/2 table instead if you want the correct one.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.LineGap\">\n            <summary>\n            Gets the font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the\n            baseline-to-baseline distance for the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.AdvanceWidthMax\">\n            <summary>\n            Gets the maximum of all advance widths found in the font. It can be used to compute the maximum width of an\n            arbitrary string of text.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.MinimumLeftSideBearing\">\n            <summary>\n            Gets the minimum left side bearing of all glyphs within the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.MinimumRightSideBearing\">\n            <summary>\n            Gets the minimum right side bearing of all glyphs within the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.MaximumExtentX\">\n            <summary>\n            Gets the maximum horizontal extent (i.e., the ‘width’ of a glyph's bounding box) for all glyphs in the\n            font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.CaretSlopeRise\">\n            <summary>\n            Gets the rise coefficient of the cursor's slope of the cursor (slope=rise/run).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.CaretSlopeRun\">\n            <summary>\n            Gets the run coefficient of the cursor's slope.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.Reserved\">\n            <summary>\n            Gets the 8 reserved bytes.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.MetricDataFormat\">\n            <summary>\n            Gets 0, always.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.HMetricsCount\">\n            <summary>\n            Gets the number of HMetrics entries in the ‘hmtx’ table -- this value can be smaller than the total number\n            of glyphs in the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.LongMetrics\">\n            <summary>\n            Gets a pointer into the ‘hmtx’ table.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.HoriHeader.ShortMetrics\">\n            <summary>\n            Gets a pointer into the ‘hmtx’ table.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.MaxProfile\">\n            <summary>\n            The maximum profile is a table containing many max values which can be used to pre-allocate arrays. This\n            ensures that no memory allocation occurs during a glyph load.\n            </summary>\n            <remarks>\n            This structure is only used during font loading.\n            </remarks>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.Version\">\n            <summary>\n            Gets the version number.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.GlyphCount\">\n            <summary>\n            Gets the number of glyphs in this TrueType font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxPoints\">\n            <summary>\n            Gets the maximum number of points in a non-composite TrueType glyph. See also the structure element\n            ‘maxCompositePoints’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxContours\">\n            <summary>\n            Gets the maximum number of contours in a non-composite TrueType glyph. See also the structure element\n            ‘maxCompositeContours’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxCompositePoints\">\n            <summary>\n            Gets the maximum number of points in a composite TrueType glyph. See also the structure element\n            ‘maxPoints’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxCompositeContours\">\n            <summary>\n            Gets the maximum number of contours in a composite TrueType glyph. See also the structure element\n            ‘maxContours’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxZones\">\n            <summary>\n            Gets the maximum number of zones used for glyph hinting.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxTwilightPoints\">\n            <summary>\n            Gets the maximum number of points in the twilight zone used for glyph hinting.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxStorage\">\n            <summary>\n            Gets the maximum number of elements in the storage area used for glyph hinting.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxFunctionDefs\">\n            <summary>\n            Gets the maximum number of function definitions in the TrueType bytecode for this font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxInstructionDefs\">\n            <summary>\n            Gets the maximum number of instruction definitions in the TrueType bytecode for this font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxStackElements\">\n            <summary>\n            Gets the maximum number of stack elements used during bytecode interpretation.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxSizeOfInstructions\">\n            <summary>\n            Gets the maximum number of TrueType opcodes used for glyph hinting.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxComponentElements\">\n            <summary>\n            Gets the maximum number of simple (i.e., non- composite) glyphs in a composite glyph.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.MaxProfile.MaxComponentDepth\">\n            <summary>\n            Gets the maximum nesting depth of composite glyphs.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.OS2\">\n            <summary><para>\n            A structure used to model a TrueType OS/2 table. This is the long table version. All fields comply to the\n            TrueType specification.\n            </para><para>\n            Note that we now support old Mac fonts which do not include an OS/2 table. In this case, the ‘version’ field is\n            always set to 0xFFFF.\n            </para></summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.Pclt\">\n            <summary>\n            A structure used to model a TrueType PCLT table. All fields comply to the TrueType specification.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.PlatformId\">\n            <summary>\n            A list of valid values for the ‘platform_id’ identifier code in <see cref=\"T:SharpFont.CharMap\"/> and\n            <see cref=\"T:SharpFont.TrueType.SfntName\"/> structures.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.PlatformId.AppleUnicode\">\n            <summary>\n            Used by Apple to indicate a Unicode character map and/or name entry. See TT_APPLE_ID_XXX for corresponding\n            ‘encoding_id’ values. Note that name entries in this format are coded as big-endian UCS-2 character codes\n            only.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.PlatformId.Macintosh\">\n            <summary>\n            Used by Apple to indicate a MacOS-specific charmap and/or name entry. See TT_MAC_ID_XXX for corresponding\n            ‘encoding_id’ values. Note that most TrueType fonts contain an Apple roman charmap to be usable on MacOS\n            systems (even if they contain a Microsoft charmap as well).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.PlatformId.Iso\">\n            <summary>\n            This value was used to specify ISO/IEC 10646 charmaps. It is however now deprecated. See TT_ISO_ID_XXX for\n            a list of corresponding ‘encoding_id’ values.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.PlatformId.Microsoft\">\n            <summary>\n            Used by Microsoft to indicate Windows-specific charmaps. See TT_MS_ID_XXX for a list of corresponding\n            ‘encoding_id’ values. Note that most fonts contain a Unicode charmap using (TT_PLATFORM_MICROSOFT,\n            TT_MS_ID_UNICODE_CS).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.PlatformId.Custom\">\n            <summary>\n            Used to indicate application-specific charmaps.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.PlatformId.Adobe\">\n            <summary>\n            This value isn't part of any font format specification, but is used by FreeType to report Adobe-specific\n            charmaps in an <see cref=\"T:SharpFont.CharMap\"/> structure. See TT_ADOBE_ID_XXX.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.EngineType\">\n            <summary>\n            A list of values describing which kind of TrueType bytecode engine is implemented in a given\n            <see cref=\"T:SharpFont.Library\"/> instance. It is used by the <see cref=\"M:SharpFont.Library.GetTrueTypeEngineType\"/> function.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.EngineType.None\">\n            <summary>\n            The library doesn't implement any kind of bytecode interpreter.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.EngineType.Unpatented\">\n            <summary><para>\n            The library implements a bytecode interpreter that doesn't support the patented operations of the TrueType\n            virtual machine.\n            </para><para>\n            Its main use is to load certain Asian fonts which position and scale glyph components with bytecode\n            instructions. It produces bad output for most other fonts.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.TrueType.EngineType.Patented\">\n            <summary>\n            The library implements a bytecode interpreter that covers the full instruction set of the TrueType virtual\n            machine (this was governed by patents until May 2010, hence the name).\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.Postscript\">\n            <summary>\n            A structure used to model a TrueType PostScript table. All fields comply to the TrueType specification. This\n            structure does not reference the PostScript glyph names, which can be nevertheless accessed with the ‘ttpost’\n            module.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.SfntTag\">\n            <summary>\n            An enumeration used to specify the index of an SFNT table. Used in the <see cref=\"M:SharpFont.Face.GetSfntTable(SharpFont.TrueType.SfntTag)\"/> API\n            function.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.TrueType.VertHeader\">\n            <summary>\n            A structure used to model a TrueType vertical header, the ‘vhea’ table, as well as the corresponding vertical\n            metrics table, i.e., the ‘vmtx’ table.\n            </summary>\n            <remarks><para>\n            IMPORTANT: The <see cref=\"T:SharpFont.TrueType.HoriHeader\"/> and <see cref=\"T:SharpFont.TrueType.VertHeader\"/> structures should be identical except for\n            the names of their fields which are different.\n            </para><para>\n            This ensures that a single function in the ‘ttload’ module is able to read both the horizontal and vertical\n            headers.\n            </para></remarks>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.Version\">\n            <summary>\n            Gets the table version.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.Ascender\">\n            <summary><para>\n            Gets the font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in\n            the font.\n            </para><para>\n            This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a\n            portion of the glyphs found in the font (maybe ASCII).\n            </para><para>\n            You should use the ‘sTypoAscender’ field of the OS/2 table instead if you want the correct one.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.Descender\">\n            <summary><para>\n            Gets the font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points\n            found in the font. It is negative.\n            </para><para>\n            This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a\n            portion of the glyphs found in the font (maybe ASCII).\n            </para><para>\n            You should use the ‘sTypoDescender’ field of the OS/2 table instead if you want the correct one.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.LineGap\">\n            <summary>\n            Gets the font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the\n            baseline-to-baseline distance for the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.AdvanceHeightMax\">\n            <summary>\n            Gets the maximum of all advance heights found in the font. It can be used to compute the maximum height of\n            an arbitrary string of text.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.MinimumTopSideBearing\">\n            <summary>\n            Gets the minimum top side bearing of all glyphs within the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.MinimumBottomSideBearing\">\n            <summary>\n            Gets the minimum bottom side bearing of all glyphs within the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.MaximumExtentY\">\n            <summary>\n            Gets the maximum vertical extent (i.e., the ‘height’ of a glyph's bounding box) for all glyphs in the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.CaretSlopeRise\">\n            <summary>\n            Gets the rise coefficient of the cursor's slope of the cursor (slope=rise/run).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.CaretSlopeRun\">\n            <summary>\n            Gets the run coefficient of the cursor's slope.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.Reserved\">\n            <summary>\n            Gets the 8 reserved bytes.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.MetricDataFormat\">\n            <summary>\n            Gets 0, always.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.VMetricsCount\">\n            <summary>\n            Gets the number of VMetrics entries in the ‘vmtx’ table -- this value can be smaller than the total number\n            of glyphs in the font.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.LongMetrics\">\n            <summary>\n            Gets a pointer into the ‘vmtx’ table.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.TrueType.VertHeader.ShortMetrics\">\n            <summary>\n            Gets a pointer into the ‘vmtx’ table.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Error\">\n            <summary>\n            FreeType error codes.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Error.Ok\">\n            <summary>No error.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.CannotOpenResource\">\n            <summary>Cannot open resource.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.UnknownFileFormat\">\n            <summary>Unknown file format.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidFileFormat\">\n            <summary>Broken file.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidVersion\">\n            <summary>Invalid FreeType version.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.LowerModuleVersion\">\n            <summary>Module version is too low.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidArgument\">\n            <summary>Invalid argument.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.UnimplementedFeature\">\n            <summary>Unimplemented feature.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidTable\">\n            <summary>Broken table.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidOffset\">\n            <summary>Broken offset within table.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.ArrayTooLarge\">\n            <summary>Array allocation size too large.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidGlyphIndex\">\n            <summary>Invalid glyph index.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidCharacterCode\">\n            <summary>Invalid character code.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidGlyphFormat\">\n            <summary>Unsupported glyph image format.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.CannotRenderGlyph\">\n            <summary>Cannot render this glyph format.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidOutline\">\n            <summary>Invalid outline.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidComposite\">\n            <summary>Invalid composite glyph.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.TooManyHints\">\n            <summary>Too many hints.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidPixelSize\">\n            <summary>Invalid pixel size.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidHandle\">\n            <summary>Invalid object handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidLibraryHandle\">\n            <summary>Invalid library handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidDriverHandle\">\n            <summary>Invalid module handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidFaceHandle\">\n            <summary>Invalid face handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidSizeHandle\">\n            <summary>Invalid size handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidSlotHandle\">\n            <summary>Invalid glyph slot handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidCharMapHandle\">\n            <summary>Invalid charmap handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidCacheHandle\">\n            <summary>Invalid cache manager handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidStreamHandle\">\n            <summary>Invalid stream handle.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.TooManyDrivers\">\n            <summary>Too many modules.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.TooManyExtensions\">\n            <summary>Too many extensions.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.OutOfMemory\">\n            <summary>Out of memory.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.UnlistedObject\">\n            <summary>Unlisted object.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.CannotOpenStream\">\n            <summary>Cannot open stream.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidStreamSeek\">\n            <summary>Invalid stream seek.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidStreamSkip\">\n            <summary>Invalid stream skip.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidStreamRead\">\n            <summary>Invalid stream read.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidStreamOperation\">\n            <summary>Invalid stream operation.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidFrameOperation\">\n            <summary>Invalid frame operation.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.NestedFrameAccess\">\n            <summary>Nested frame access.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidFrameRead\">\n            <summary>Invalid frame read.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.RasterUninitialized\">\n            <summary>Raster uninitialized.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.RasterCorrupted\">\n            <summary>Raster corrupted.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.RasterOverflow\">\n            <summary>Raster overflow.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.RasterNegativeHeight\">\n            <summary>Negative height while rastering.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.TooManyCaches\">\n            <summary>Too many registered caches.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidOpCode\">\n            <summary>Invalid opcode.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.TooFewArguments\">\n            <summary>Too few arguments.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.StackOverflow\">\n            <summary>Stack overflow.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.CodeOverflow\">\n            <summary>Code overflow.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.BadArgument\">\n            <summary>Bad argument.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.DivideByZero\">\n            <summary>Division by zero.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidReference\">\n            <summary>Invalid reference.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.DebugOpCode\">\n            <summary>Found debug opcode.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.EndfInExecStream\">\n            <summary>Found ENDF opcode in execution stream.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.NestedDefs\">\n            <summary>Nested DEFS.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidCodeRange\">\n            <summary>Invalid code range.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.ExecutionTooLong\">\n            <summary>Execution context too long.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.TooManyFunctionDefs\">\n            <summary>Too many function definitions.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.TooManyInstructionDefs\">\n            <summary>Too many instruction definitions.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.TableMissing\">\n            <summary>SFNT font table missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.HorizHeaderMissing\">\n            <summary>Horizontal header (hhea) table missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.LocationsMissing\">\n            <summary>Locations (loca) table missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.NameTableMissing\">\n            <summary>Name table missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.CMapTableMissing\">\n            <summary>Character map (cmap) table missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.HmtxTableMissing\">\n            <summary>Horizontal metrics (hmtx) table missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.PostTableMissing\">\n            <summary>PostScript (post) table missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidHorizMetrics\">\n            <summary>Invalid horizontal metrics.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidCharMapFormat\">\n            <summary>Invalid character map (cmap) format.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidPPem\">\n            <summary>Invalid ppem value.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidVertMetrics\">\n            <summary>Invalid vertical metrics.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.CouldNotFindContext\">\n            <summary>Could not find context.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidPostTableFormat\">\n            <summary>Invalid PostScript (post) table format.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.InvalidPostTable\">\n            <summary>Invalid PostScript (post) table.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.SyntaxError\">\n            <summary>Opcode syntax error.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.StackUnderflow\">\n            <summary>Argument stack underflow.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.Ignore\">\n            <summary>Ignore this error.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.NoUnicodeGlyphName\">\n            <summary>No Unicode glyph name found.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.MissingStartfontField\">\n            <summary>`STARTFONT' field missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.MissingFontField\">\n            <summary>`FONT' field missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.MissingSizeField\">\n            <summary>`SIZE' field missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.MissingFontboudingboxField\">\n            <summary>`FONTBOUNDINGBOX' field missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.MissingCharsField\">\n            <summary>`CHARS' field missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.MissingStartcharField\">\n            <summary>`STARTCHAR' field missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.MissingEncodingField\">\n            <summary>`ENCODING' field missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.MissingBbxField\">\n            <summary>`BBX' field missing.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.BbxTooBig\">\n            <summary>`BBX' too big.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.CorruptedFontHeader\">\n            <summary>Font header corrupted or missing fields.</summary>\n        </member>\n        <member name=\"F:SharpFont.Error.CorruptedFontGlyphs\">\n            <summary>Font glyphs corrupted or missing fields.</summary>\n        </member>\n        <member name=\"T:SharpFont.Face\">\n            <summary>\n            FreeType root face class structure. A face object models a typeface in a font file.\n            </summary>\n            <remarks>\n            Fields may be changed after a call to <see cref=\"M:SharpFont.Face.AttachFile(System.String)\"/> or <see cref=\"M:SharpFont.Face.AttachStream(SharpFont.OpenArgs)\"/>.\n            </remarks>\n        </member>\n        <member name=\"M:SharpFont.Face.#ctor(SharpFont.Library,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Face\"/> class with a default faceIndex of 0.\n            </summary>\n            <param name=\"library\">The parent library.</param>\n            <param name=\"path\">The path of the font file.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.#ctor(SharpFont.Library,System.String,System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Face\"/> class.\n            </summary>\n            <param name=\"library\">The parent library.</param>\n            <param name=\"path\">The path of the font file.</param>\n            <param name=\"faceIndex\">The index of the face to take from the file.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.#ctor(SharpFont.Library,System.Byte[],System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Face\"/> class from a file that's already loaded into memory.\n            </summary>\n            <param name=\"library\">The parent library.</param>\n            <param name=\"file\">The loaded file.</param>\n            <param name=\"faceIndex\">The index of the face to take from the file.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.#ctor(SharpFont.Library,System.IntPtr,System.Int32,System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Face\"/> class from a file that's already loaded into memory.\n            </summary>\n            <param name=\"library\">The parent library.</param>\n            <param name=\"bufferPtr\"></param>\n            <param name=\"length\"></param>\n            <param name=\"faceIndex\">The index of the face to take from the file.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.#ctor(System.IntPtr,SharpFont.Library)\">\n            <summary>\n            Initializes a new instance of the Face class.\n            </summary>\n            <param name=\"reference\">A pointer to the unmanaged memory containing the Face.</param>\n            <param name=\"parent\">The parent <see cref=\"T:SharpFont.Library\"/>.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.Finalize\">\n            <summary>\n            Finalizes an instance of the Face class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the object has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.FaceCount\">\n            <summary>\n            Gets the number of faces in the font file. Some font formats can have multiple faces in a font file.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.FaceIndex\">\n            <summary>\n            Gets the index of the face in the font file. It is set to 0 if there is only one face in the font file.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.FaceFlags\">\n            <summary>\n            Gets a set of bit flags that give important information about the face.\n            </summary>\n            <see cref=\"P:SharpFont.Face.FaceFlags\"/>\n        </member>\n        <member name=\"P:SharpFont.Face.StyleFlags\">\n            <summary>\n            Gets a set of bit flags indicating the style of the face.\n            </summary>\n            <see cref=\"P:SharpFont.Face.StyleFlags\"/>\n        </member>\n        <member name=\"P:SharpFont.Face.GlyphCount\">\n            <summary><para>\n            Gets the number of glyphs in the face. If the face is scalable and has sbits (see ‘num_fixed_sizes’), it is\n            set to the number of outline glyphs.\n            </para><para>\n            For CID-keyed fonts, this value gives the highest CID used in the font.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.Face.FamilyName\">\n            <summary>\n            Gets the face's family name. This is an ASCII string, usually in English, which describes the typeface's\n            family (like ‘Times New Roman’, ‘Bodoni’, ‘Garamond’, etc). This is a least common denominator used to list\n            fonts. Some formats (TrueType &amp; OpenType) provide localized and Unicode versions of this string.\n            Applications should use the format specific interface to access them. Can be NULL (e.g., in fonts embedded\n            in a PDF file).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.StyleName\">\n            <summary>\n            Gets the face's style name. This is an ASCII string, usually in English, which describes the typeface's\n            style (like ‘Italic’, ‘Bold’, ‘Condensed’, etc). Not all font formats provide a style name, so this field\n            is optional, and can be set to NULL. As for ‘family_name’, some formats provide localized and Unicode\n            versions of this string. Applications should use the format specific interface to access them.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.FixedSizesCount\">\n            <summary>\n            Gets the number of bitmap strikes in the face. Even if the face is scalable, there might still be bitmap\n            strikes, which are called ‘sbits’ in that case.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.AvailableSizes\">\n            <summary>\n            Gets an array of FT_Bitmap_Size for all bitmap strikes in the face. It is set to NULL if there is no bitmap\n            strike.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.CharmapsCount\">\n            <summary>\n            Gets the number of charmaps in the face.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.CharMaps\">\n            <summary>\n            Gets an array of the charmaps of the face.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.Generic\">\n            <summary>\n            Gets or sets a field reserved for client uses.\n            </summary>\n            <see cref=\"P:SharpFont.Face.Generic\"/>\n        </member>\n        <member name=\"P:SharpFont.Face.BBox\">\n            <summary><para>\n            Gets the font bounding box. Coordinates are expressed in font units (see ‘units_per_EM’). The box is large\n            enough to contain any glyph from the font. Thus, ‘bbox.yMax’ can be seen as the ‘maximal ascender’, and\n            ‘bbox.yMin’ as the ‘minimal descender’. Only relevant for scalable formats.\n            </para><para>\n            Note that the bounding box might be off by (at least) one pixel for hinted fonts. See FT_Size_Metrics for\n            further discussion.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.Face.UnitsPerEM\">\n            <summary>\n            Gets the number of font units per EM square for this face. This is typically 2048 for TrueType fonts, and\n            1000 for Type 1 fonts. Only relevant for scalable formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.Ascender\">\n            <summary>\n            Gets the typographic ascender of the face, expressed in font units. For font formats not having this\n            information, it is set to ‘bbox.yMax’. Only relevant for scalable formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.Descender\">\n            <summary>\n            Gets the typographic descender of the face, expressed in font units. For font formats not having this\n            information, it is set to ‘bbox.yMin’.Note that this field is usually negative. Only relevant for scalable\n            formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.Height\">\n            <summary>\n            Gets the height is the vertical distance between two consecutive baselines, expressed in font units. It is\n            always positive. Only relevant for scalable formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.MaxAdvanceWidth\">\n            <summary>\n            Gets the maximal advance width, in font units, for all glyphs in this face. This can be used to make word\n            wrapping computations faster. Only relevant for scalable formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.MaxAdvanceHeight\">\n            <summary>\n            Gets the maximal advance height, in font units, for all glyphs in this face. This is only relevant for\n            vertical layouts, and is set to ‘height’ for fonts that do not provide vertical metrics. Only relevant for\n            scalable formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.UnderlinePosition\">\n            <summary>\n            Gets the position, in font units, of the underline line for this face. It is the center of the underlining\n            stem. Only relevant for scalable formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.UnderlineThickness\">\n            <summary>\n            Gets the thickness, in font units, of the underline for this face. Only relevant for scalable formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.Glyph\">\n            <summary>\n            Gets the face's associated glyph slot(s).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.Size\">\n            <summary>\n            Gets the current active size for this face.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.CharMap\">\n            <summary>\n            Gets the current active charmap for this face.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.HasHoriziontal\">\n            <summary>\n            Gets a value indicating whether a face object contains horizontal metrics (this is true for all font\n            formats though).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.HasVertical\">\n            <summary>\n            Gets a value indicating whether a face object contains vertical metrics.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.HasKerning\">\n            <summary>\n            Gets a value indicating whether a face object contains kerning data that can be accessed with\n            <see cref=\"M:SharpFont.Face.GetKerning(System.UInt32,System.UInt32,SharpFont.KerningMode)\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.IsScalable\">\n            <summary>\n            Gets a value indicating whether a face object contains a scalable font face (true for TrueType, Type 1,\n            Type 42, CID, OpenType/CFF, and PFR font formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.IsSfnt\">\n            <summary><para>\n            Gets a value indicating whether a face object contains a font whose format is based on the SFNT storage\n            scheme. This usually means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded bitmap fonts.\n            </para><para>\n            If this macro is true, all functions defined in FT_SFNT_NAMES_H and FT_TRUETYPE_TABLES_H are available.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.Face.IsFixedWidth\">\n            <summary>\n            Gets a value indicating whether a face object contains a font face that contains fixed-width (or\n            ‘monospace’, ‘fixed-pitch’, etc.) glyphs.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.HasFixedSizes\">\n            <summary>\n            Gets a value indicating whether a face object contains some embedded bitmaps.\n            </summary>\n            <see cref=\"P:SharpFont.Face.AvailableSizes\"/>\n        </member>\n        <member name=\"P:SharpFont.Face.HasGlyphNames\">\n            <summary>\n            Gets a value indicating whether a face object contains some glyph names that can be accessed through \n            <see cref=\"M:SharpFont.Face.GetGlyphName(System.UInt32,System.Int32)\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.HasMultipleMasters\">\n            <summary>\n            Gets a value indicating whether a face object contains some multiple masters. The functions provided by\n            FT_MULTIPLE_MASTERS_H are then available to choose the exact design you want.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Face.IsCidKeyed\">\n            <summary><para>\n            Gets a value indicating whether a face object contains a CID-keyed font. See the discussion of\n            FT_FACE_FLAG_CID_KEYED for more details.\n            </para><para>\n            If this macro is true, all functions defined in FT_CID_H are available.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.Face.IsTricky\">\n            <summary>\n            Gets a value indicating whether a face represents a ‘tricky’ font. See the discussion of\n            FT_FACE_FLAG_TRICKY for more details.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Face.CheckTrueTypePatents\">\n            <summary><para>\n            Parse all bytecode instructions of a TrueType font file to check whether any of the patented opcodes are\n            used. This is only useful if you want to be able to use the unpatented hinter with fonts that do not use\n            these opcodes.\n            </para><para>\n            Note that this function parses all glyph instructions in the font file, which may be slow.\n            </para></summary>\n            <remarks>\n            Since May 2010, TrueType hinting is no longer patented.\n            </remarks>\n            <returns>True if this is a TrueType font that uses one of the patented opcodes, false otherwise.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.SetUnpatentedHinting(System.Boolean)\">\n            <summary>\n            Enable or disable the unpatented hinter for a given <see cref=\"T:SharpFont.Face\"/>. Only enable it if you have\n            determined that the face doesn't use any patented opcodes.\n            </summary>\n            <remarks>\n            Since May 2010, TrueType hinting is no longer patented.\n            </remarks>\n            <param name=\"value\">New boolean setting.</param>\n            <returns>\n            The old setting value. This will always be false if this is not an SFNT font, or if the unpatented hinter\n            is not compiled in this instance of the library.\n            </returns>\n            <see cref=\"M:SharpFont.Face.CheckTrueTypePatents\"/>\n        </member>\n        <member name=\"M:SharpFont.Face.AttachFile(System.String)\">\n            <summary>\n            This function calls <see cref=\"M:SharpFont.Face.AttachStream(SharpFont.OpenArgs)\"/> to attach a file.\n            </summary>\n            <param name=\"path\">The pathname.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.AttachStream(SharpFont.OpenArgs)\">\n            <summary>\n            ‘Attach’ data to a face object. Normally, this is used to read additional information for the face object.\n            For example, you can attach an AFM file that comes with a Type 1 font to get the kerning values and other\n            metrics.\n            </summary>\n            <remarks><para>\n            The meaning of the ‘attach’ (i.e., what really happens when the new file is read) is not fixed by FreeType\n            itself. It really depends on the font format (and thus the font driver).\n            </para><para>\n            Client applications are expected to know what they are doing when invoking this function. Most drivers\n            simply do not implement file attachments.\n            </para></remarks>\n            <param name=\"parameters\">A pointer to <see cref=\"T:SharpFont.OpenArgs\"/> which must be filled by the caller.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.SelectSize(System.Int32)\">\n            <summary>\n            Select a bitmap strike.\n            </summary>\n            <param name=\"strikeIndex\">\n            The index of the bitmap strike in the <see cref=\"P:SharpFont.Face.AvailableSizes\"/> field of <see cref=\"T:SharpFont.Face\"/>\n            structure.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Face.RequestSize(SharpFont.SizeRequest)\">\n            <summary>\n            Resize the scale of the active <see cref=\"T:SharpFont.FTSize\"/> object in a face.\n            </summary>\n            <param name=\"request\">A pointer to a <see cref=\"T:SharpFont.SizeRequest\"/>.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetCharSize(System.Int32,System.Int32,System.UInt32,System.UInt32)\">\n            <summary>\n            This function calls <see cref=\"M:SharpFont.Face.RequestSize(SharpFont.SizeRequest)\"/> to request the nominal size (in points).\n            </summary>\n            <remarks><para>\n            If either the character width or height is zero, it is set equal to the other value.\n            </para><para>\n            If either the horizontal or vertical resolution is zero, it is set equal to the other value.\n            </para><para>\n            A character width or height smaller than 1pt is set to 1pt; if both resolution values are zero, they are\n            set to 72dpi.\n            </para></remarks>\n            <param name=\"width\">The nominal width, in 26.6 fractional points.</param>\n            <param name=\"height\">The nominal height, in 26.6 fractional points.</param>\n            <param name=\"horizontalResolution\">The horizontal resolution in dpi.</param>\n            <param name=\"verticalResolution\">The vertical resolution in dpi.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetPixelSizes(System.UInt32,System.UInt32)\">\n            <summary>\n            This function calls <see cref=\"M:SharpFont.Face.RequestSize(SharpFont.SizeRequest)\"/> to request the nominal size (in pixels).\n            </summary>\n            <param name=\"width\">The nominal width, in pixels.</param>\n            <param name=\"height\">The nominal height, in pixels</param>\n        </member>\n        <member name=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\">\n            <summary>\n            A function used to load a single glyph into the glyph slot of a face object.\n            </summary>\n            <remarks><para>\n            The loaded glyph may be transformed. See <see cref=\"M:SharpFont.Face.SetTransform(SharpFont.FTMatrix,SharpFont.FTVector)\"/> for the details.\n            </para><para>\n            For subsetted CID-keyed fonts, <see cref=\"F:SharpFont.Error.InvalidArgument\"/> is returned for invalid CID values (this\n            is, for CID values which don't have a corresponding glyph in the font). See the discussion of the\n            <see cref=\"F:SharpFont.FaceFlags.CidKeyed\"/> flag for more details.\n            </para></remarks>\n            <param name=\"glyphIndex\">\n            The index of the glyph in the font file. For CID-keyed fonts (either in PS or in CFF format) this argument\n            specifies the CID value.\n            </param>\n            <param name=\"flags\">\n            A flag indicating what to load for this glyph. The <see cref=\"T:SharpFont.LoadFlags\"/> constants can be used to control\n            the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not,\n            whether to hint the outline, etc).\n            </param>\n            <param name=\"target\">The target to OR with the flags.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.LoadChar(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\">\n            <summary>\n            A function used to load a single glyph into the glyph slot of a face object, according to its character\n            code.\n            </summary>\n            <remarks>\n            This function simply calls <see cref=\"M:SharpFont.Face.GetCharIndex(System.UInt32)\"/> and <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>\n            </remarks>\n            <param name=\"charCode\">\n            The glyph's character code, according to the current charmap used in the face.\n            </param>\n            <param name=\"flags\">\n            A flag indicating what to load for this glyph. The <see cref=\"T:SharpFont.LoadFlags\"/> constants can be used to control\n            the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not,\n            whether to hint the outline, etc).\n            </param>\n            <param name=\"target\">The target to OR with the flags.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetTransform(SharpFont.FTMatrix,SharpFont.FTVector)\">\n            <summary>\n            A function used to set the transformation that is applied to glyph images when they are loaded into a glyph\n            slot through <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>.\n            </summary>\n            <remarks><para>\n            The transformation is only applied to scalable image formats after the glyph has been loaded. It means that\n            hinting is unaltered by the transformation and is performed on the character size given in the last call to\n            <see cref=\"M:SharpFont.Face.SetCharSize(System.Int32,System.Int32,System.UInt32,System.UInt32)\"/> or <see cref=\"M:SharpFont.Face.SetPixelSizes(System.UInt32,System.UInt32)\"/>.\n            </para><para>\n            Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’.\n            </para></remarks>\n            <param name=\"matrix\">\n            A pointer to the transformation's 2x2 matrix. Use the method overloads for the identity matrix.\n            </param>\n            <param name=\"delta\">\n            A pointer to the translation vector. Use the method overloads for the null vector.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetTransform(SharpFont.FTVector)\">\n            <summary>\n            A function used to set the transformation that is applied to glyph images when they are loaded into a glyph\n            slot through <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> with the identity matrix.\n            </summary>\n            <remarks><para>\n            The transformation is only applied to scalable image formats after the glyph has been loaded. It means that\n            hinting is unaltered by the transformation and is performed on the character size given in the last call to\n            <see cref=\"M:SharpFont.Face.SetCharSize(System.Int32,System.Int32,System.UInt32,System.UInt32)\"/> or <see cref=\"M:SharpFont.Face.SetPixelSizes(System.UInt32,System.UInt32)\"/>.\n            </para><para>\n            Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’.\n            </para></remarks>\n            <param name=\"delta\">\n            A pointer to the translation vector. Use the method overloads for the null vector.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetTransform(SharpFont.FTMatrix)\">\n            <summary>\n            A function used to set the transformation that is applied to glyph images when they are loaded into a glyph\n            slot through <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> with the null vector.\n            </summary>\n            <remarks><para>\n            The transformation is only applied to scalable image formats after the glyph has been loaded. It means that\n            hinting is unaltered by the transformation and is performed on the character size given in the last call to\n            <see cref=\"M:SharpFont.Face.SetCharSize(System.Int32,System.Int32,System.UInt32,System.UInt32)\"/> or <see cref=\"M:SharpFont.Face.SetPixelSizes(System.UInt32,System.UInt32)\"/>.\n            </para><para>\n            Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’.\n            </para></remarks>\n            <param name=\"matrix\">\n            A pointer to the transformation's 2x2 matrix. Use the method overloads for the identity matrix.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetTransform\">\n            <summary>\n            A function used to set the transformation that is applied to glyph images when they are loaded into a glyph\n            slot through <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> with the null vector and the identity matrix.\n            </summary>\n            <remarks><para>\n            The transformation is only applied to scalable image formats after the glyph has been loaded. It means that\n            hinting is unaltered by the transformation and is performed on the character size given in the last call to\n            <see cref=\"M:SharpFont.Face.SetCharSize(System.Int32,System.Int32,System.UInt32,System.UInt32)\"/> or <see cref=\"M:SharpFont.Face.SetPixelSizes(System.UInt32,System.UInt32)\"/>.\n            </para><para>\n            Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’.\n            </para></remarks>\n        </member>\n        <member name=\"M:SharpFont.Face.GetKerning(System.UInt32,System.UInt32,SharpFont.KerningMode)\">\n            <summary>\n            Return the kerning vector between two glyphs of a same face.\n            </summary>\n            <remarks>\n            Only horizontal layouts (left-to-right &amp; right-to-left) are supported by this method. Other layouts, or\n            more sophisticated kernings, are out of the scope of this API function -- they can be implemented through\n            format-specific interfaces.\n            </remarks>\n            <param name=\"leftGlyph\">The index of the left glyph in the kern pair.</param>\n            <param name=\"rightGlyph\">The index of the right glyph in the kern pair.</param>\n            <param name=\"mode\">Determines the scale and dimension of the returned kerning vector.</param>\n            <returns>\n            The kerning vector. This is either in font units or in pixels (26.6 format) for scalable formats, and in\n            pixels for fixed-sizes formats.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetTrackKerning(System.Int32,System.Int32)\">\n            <summary>\n            Return the track kerning for a given face object at a given size.\n            </summary>\n            <param name=\"pointSize\">The point size in 16.16 fractional points.</param>\n            <param name=\"degree\">The degree of tightness.</param>\n            <returns>The kerning in 16.16 fractional points.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetGlyphName(System.UInt32,System.Int32)\">\n            <summary>\n            Retrieve the ASCII name of a given glyph in a face. This only works for those faces where\n            <see cref=\"P:SharpFont.Face.HasGlyphNames\"/> returns 1.\n            </summary>\n            <remarks><para>\n            An error is returned if the face doesn't provide glyph names or if the glyph index is invalid. In all cases\n            of failure, the first byte of ‘buffer’ is set to 0 to indicate an empty name.\n            </para><para>\n            The glyph name is truncated to fit within the buffer if it is too long. The returned string is always\n            zero-terminated.\n            </para><para>\n            Be aware that FreeType reorders glyph indices internally so that glyph index 0 always corresponds to the\n            ‘missing glyph’ (called ‘.notdef’).\n            </para><para>\n            This function is not compiled within the library if the config macro ‘FT_CONFIG_OPTION_NO_GLYPH_NAMES’ is\n            defined in ‘include/freetype/config/ftoptions.h’.\n            </para></remarks>\n            <param name=\"glyphIndex\">The glyph index.</param>\n            <param name=\"bufferSize\">The maximal number of bytes available in the buffer.</param>\n            <returns>The ASCII name of a given glyph in a face.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetGlyphName(System.UInt32,System.Byte[])\">\n            <summary>\n            Retrieve the ASCII name of a given glyph in a face. This only works for those faces where\n            <see cref=\"P:SharpFont.Face.HasGlyphNames\"/> returns 1.\n            </summary>\n            <remarks><para>\n            An error is returned if the face doesn't provide glyph names or if the glyph index is invalid. In all cases\n            of failure, the first byte of ‘buffer’ is set to 0 to indicate an empty name.\n            </para><para>\n            The glyph name is truncated to fit within the buffer if it is too long. The returned string is always\n            zero-terminated.\n            </para><para>\n            Be aware that FreeType reorders glyph indices internally so that glyph index 0 always corresponds to the\n            ‘missing glyph’ (called ‘.notdef’).\n            </para><para>\n            This function is not compiled within the library if the config macro ‘FT_CONFIG_OPTION_NO_GLYPH_NAMES’ is\n            defined in ‘include/freetype/config/ftoptions.h’.\n            </para></remarks>\n            <param name=\"glyphIndex\">The glyph index.</param>\n            <param name=\"buffer\">The target buffer where the name is copied to.</param>\n            <returns>The ASCII name of a given glyph in a face.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetPostscriptName\">\n            <summary>\n            Retrieve the ASCII Postscript name of a given face, if available. This only works with Postscript and\n            TrueType fonts.\n            </summary>\n            <remarks>\n            The returned pointer is owned by the face and is destroyed with it.\n            </remarks>\n            <returns>A pointer to the face's Postscript name. NULL if unavailable.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.SelectCharmap(SharpFont.Encoding)\">\n            <summary>\n            Select a given charmap by its encoding tag (as listed in ‘freetype.h’).\n            </summary>\n            <remarks><para>\n            This function returns an error if no charmap in the face corresponds to the encoding queried here.\n            </para><para>\n            Because many fonts contain more than a single cmap for Unicode encoding, this function has some special\n            code to select the one which covers Unicode best. It is thus preferable to <see cref=\"M:SharpFont.Face.SetCharmap(SharpFont.CharMap)\"/> in\n            this case.\n            </para></remarks>\n            <param name=\"encoding\">A handle to the selected encoding.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetCharmap(SharpFont.CharMap)\">\n            <summary>\n            Select a given charmap for character code to glyph index mapping.\n            </summary>\n            <remarks>\n            This function returns an error if the charmap is not part of the face (i.e., if it is not listed in the\n            <see cref=\"P:SharpFont.Face.CharMaps\"/>’ table).\n            </remarks>\n            <param name=\"charmap\">A handle to the selected charmap.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.GetCharIndex(System.UInt32)\">\n            <summary>\n            Return the glyph index of a given character code. This function uses a charmap object to do the mapping.\n            </summary>\n            <remarks>\n            If you use FreeType to manipulate the contents of font files directly, be aware that the glyph index\n            returned by this function doesn't always correspond to the internal indices used within the file. This is\n            done to ensure that value 0 always corresponds to the ‘missing glyph’.\n            </remarks>\n            <param name=\"charCode\">The character code.</param>\n            <returns>The glyph index. 0 means ‘undefined character code’.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetFirstChar(System.UInt32@)\">\n            <summary>\n            This function is used to return the first character code in the current charmap of a given face. It also\n            returns the corresponding glyph index.\n            </summary>\n            <remarks><para>\n            You should use this function with <see cref=\"M:SharpFont.Face.GetNextChar(System.UInt32,System.UInt32@)\"/> to be able to parse all character codes\n            available in a given charmap.\n            </para><para>\n            Note that ‘agindex’ is set to 0 if the charmap is empty. The result itself can be 0 in two cases: if the\n            charmap is empty or when the value 0 is the first valid character code.\n            </para></remarks>\n            <param name=\"glyphIndex\">Glyph index of first character code. 0 if charmap is empty.</param>\n            <returns>The charmap's first character code.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetNextChar(System.UInt32,System.UInt32@)\">\n            <summary>\n            This function is used to return the next character code in the current charmap of a given face following\n            the value ‘charCode’, as well as the corresponding glyph index.\n            </summary>\n            <remarks><para>\n            You should use this function with <see cref=\"M:SharpFont.Face.GetFirstChar(System.UInt32@)\"/> to walk over all character codes available\n            in a given charmap. See the note for this function for a simple code example.\n            </para><para>\n            Note that ‘*agindex’ is set to 0 when there are no more codes in the charmap.\n            </para></remarks>\n            <param name=\"charCode\">The starting character code.</param>\n            <param name=\"glyphIndex\">Glyph index of first character code. 0 if charmap is empty.</param>\n            <returns>The charmap's next character code.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetNameIndex(System.String)\">\n            <summary>\n            Return the glyph index of a given glyph name. This function uses driver specific objects to do the\n            translation.\n            </summary>\n            <param name=\"name\">The glyph name.</param>\n            <returns>The glyph index. 0 means ‘undefined character code’.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetFSTypeFlags\">\n            <summary>\n            Return the <see cref=\"T:SharpFont.EmbeddingTypes\"/> flags for a font.\n            </summary>\n            <remarks>\n            Use this function rather than directly reading the ‘fs_type’ field in the <see cref=\"T:SharpFont.PostScript.FontInfo\"/>\n            structure which is only guaranteed to return the correct results for Type 1 fonts.\n            </remarks>\n            <returns>The fsType flags, <see cref=\"T:SharpFont.EmbeddingTypes\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetCharVariantIndex(System.UInt32,System.UInt32)\">\n            <summary>\n            Return the glyph index of a given character code as modified by the variation selector.\n            </summary>\n            <remarks><para>\n            If you use FreeType to manipulate the contents of font files directly, be aware that the glyph index\n            returned by this function doesn't always correspond to the internal indices used within the file. This is\n            done to ensure that value 0 always corresponds to the ‘missing glyph’.\n            </para><para>\n            This function is only meaningful if a) the font has a variation selector cmap sub table, and b) the current\n            charmap has a Unicode encoding.\n            </para></remarks>\n            <param name=\"charCode\">The character code point in Unicode.</param>\n            <param name=\"variantSelector\">The Unicode code point of the variation selector.</param>\n            <returns>\n            The glyph index. 0 means either ‘undefined character code’, or ‘undefined selector code’, or ‘no variation\n            selector cmap subtable’, or ‘current CharMap is not Unicode’.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetCharVariantIsDefault(System.UInt32,System.UInt32)\">\n            <summary>\n            Check whether this variant of this Unicode character is the one to be found in the ‘cmap’.\n            </summary>\n            <remarks>\n            This function is only meaningful if the font has a variation selector cmap subtable.\n            </remarks>\n            <param name=\"charCode\">The character codepoint in Unicode.</param>\n            <param name=\"variantSelector\">The Unicode codepoint of the variation selector.</param>\n            <returns>\n            1 if found in the standard (Unicode) cmap, 0 if found in the variation selector cmap, or -1 if it is not a\n            variant.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetVariantSelectors\">\n            <summary>\n            Return a zero-terminated list of Unicode variant selectors found in the font.\n            </summary>\n            <remarks>\n            The last item in the array is 0; the array is owned by the <see cref=\"T:SharpFont.Face\"/> object but can be overwritten\n            or released on the next call to a FreeType function.\n            </remarks>\n            <returns>\n            A pointer to an array of selector code points, or NULL if there is no valid variant selector cmap subtable.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetVariantsOfChar(System.UInt32)\">\n            <summary>\n            Return a zero-terminated list of Unicode variant selectors found in the font.\n            </summary>\n            <remarks>\n            The last item in the array is 0; the array is owned by the <see cref=\"T:SharpFont.Face\"/> object but can be overwritten\n            or released on the next call to a FreeType function.\n            </remarks>\n            <param name=\"charCode\">The character codepoint in Unicode.</param>\n            <returns>\n            A pointer to an array of variant selector code points which are active for the given character, or NULL if\n            the corresponding list is empty.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetCharsOfVariant(System.UInt32)\">\n            <summary>\n            Return a zero-terminated list of Unicode character codes found for the specified variant selector.\n            </summary>\n            <remarks>\n            The last item in the array is 0; the array is owned by the <see cref=\"T:SharpFont.Face\"/> object but can be overwritten\n            or released on the next call to a FreeType function.\n            </remarks>\n            <param name=\"variantSelector\">The variant selector code point in Unicode.</param>\n            <returns>\n            A list of all the code points which are specified by this selector (both default and non-default codes are\n            returned) or NULL if there is no valid cmap or the variant selector is invalid.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.NewSize\">\n            <summary>\n            Create a new size object from a given face object.\n            </summary>\n            <remarks>\n            You need to call <see cref=\"M:SharpFont.FTSize.Activate\"/> in order to select the new size for upcoming calls to\n            <see cref=\"M:SharpFont.Face.SetPixelSizes(System.UInt32,System.UInt32)\"/>, <see cref=\"M:SharpFont.Face.SetCharSize(System.Int32,System.Int32,System.UInt32,System.UInt32)\"/>, <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>, <see cref=\"M:SharpFont.Face.LoadChar(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>,\n            etc.\n            </remarks>\n            <returns>A handle to a new size object.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetMultiMaster\">\n            <summary><para>\n            Retrieve the Multiple Master descriptor of a given font.\n            </para><para>\n            This function can't be used with GX fonts.\n            </para></summary>\n            <returns>The Multiple Masters descriptor.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetMMVar\">\n            <summary>\n            Retrieve the Multiple Master/GX var descriptor of a given font.\n            </summary>\n            <returns>\n            The Multiple Masters/GX var descriptor. Allocates a data structure, which the user must free (a single call\n            to FT_FREE will do it).\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.SetMMDesignCoordinates(System.Int64[])\">\n            <summary><para>\n            For Multiple Masters fonts, choose an interpolated font design through design coordinates.\n            </para><para>\n            This function can't be used with GX fonts.\n            </para></summary>\n            <param name=\"coords\">An array of design coordinates.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetVarDesignCoordinates(System.Int64[])\">\n            <summary>\n            For Multiple Master or GX Var fonts, choose an interpolated font design through design coordinates.\n            </summary>\n            <param name=\"coords\">An array of design coordinates.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetMMBlendCoordinates(System.Int64[])\">\n            <summary>\n            For Multiple Masters and GX var fonts, choose an interpolated font design through normalized blend\n            coordinates.\n            </summary>\n            <param name=\"coords\">The design coordinates array (each element must be between 0 and 1.0).</param>\n        </member>\n        <member name=\"M:SharpFont.Face.SetVarBlendCoordinates(System.Int64[])\">\n            <summary>\n            This is another name of <see cref=\"M:SharpFont.Face.SetMMBlendCoordinates(System.Int64[])\"/>.\n            </summary>\n            <param name=\"coords\">The design coordinates array (each element must be between 0 and 1.0).</param>\n        </member>\n        <member name=\"M:SharpFont.Face.GetSfntTable(SharpFont.TrueType.SfntTag)\">\n            <summary>\n            Return a pointer to a given SFNT table within a face.\n            </summary>\n            <remarks><para>\n            The table is owned by the face object and disappears with it.\n            </para><para>\n            This function is only useful to access SFNT tables that are loaded by the sfnt, truetype, and opentype\n            drivers. See <see cref=\"T:SharpFont.TrueType.SfntTag\"/> for a list.\n            </para></remarks>\n            <param name=\"tag\">The index of the SFNT table.</param>\n            <returns><para>\n            A type-less pointer to the table. This will be 0 in case of error, or if the corresponding table was not\n            found OR loaded from the file.\n            </para><para>\n            Use a typecast according to ‘tag’ to access the structure elements.\n            </para></returns>\n        </member>\n        <member name=\"M:SharpFont.Face.LoadSfntTable(System.UInt32,System.Int32,System.IntPtr,System.UInt32@)\">\n            <summary>\n            Load any font table into client memory.\n            </summary>\n            <remarks>\n            If you need to determine the table's length you should first call this function with ‘*length’ set to 0, as\n            in the following example:\n            <code>\n            FT_ULong  length = 0;\n            \n            \n            error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &amp;length );\n            if ( error ) { ... table does not exist ... }\n            \n            buffer = malloc( length );\n            if ( buffer == NULL ) { ... not enough memory ... }\n            \n            error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &amp;length );\n            if ( error ) { ... could not load table ... }\n            </code>\n            </remarks>\n            <param name=\"tag\">\n            The four-byte tag of the table to load. Use the value 0 if you want to access the whole font file.\n            Otherwise, you can use one of the definitions found in the FT_TRUETYPE_TAGS_H file, or forge a new one with\n            FT_MAKE_TAG.\n            </param>\n            <param name=\"offset\">The starting offset in the table (or file if tag == 0).</param>\n            <param name=\"buffer\">\n            The target buffer address. The client must ensure that the memory array is big enough to hold the data.\n            </param>\n            <param name=\"length\"><para>\n            If the ‘length’ parameter is NULL, then try to load the whole table. Return an error code if it fails.\n            </para><para>\n            Else, if ‘*length’ is 0, exit immediately while returning the table's (or file) full size in it.\n            </para><para>\n            Else the number of bytes to read from the table or file, from the starting offset.\n            </para></param>\n        </member>\n        <member name=\"M:SharpFont.Face.SfntTableInfo(System.UInt32,SharpFont.TrueType.SfntTag)\">\n            <summary>\n            Return information on an SFNT table.\n            </summary>\n            <param name=\"tableIndex\">\n            The index of an SFNT table. The function returns <see cref=\"F:SharpFont.Error.TableMissing\"/> for an invalid value.\n            </param>\n            <param name=\"tag\">\n            The name tag of the SFNT table. If the value is NULL, ‘table_index’ is ignored, and ‘length’ returns the\n            number of SFNT tables in the font.\n            </param>\n            <returns>The length of the SFNT table (or the number of SFNT tables, depending on ‘tag’).</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.SfntTableInfo\">\n            <summary>\n            Only gets the number of SFNT tables.\n            </summary>\n            <returns>The number of SFNT tables.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.HasPSGlyphNames\">\n            <summary><para>\n            Return true if a given face provides reliable PostScript glyph names. This is similar to using the\n            <see cref=\"P:SharpFont.Face.HasGlyphNames\"/> macro, except that certain fonts (mostly TrueType) contain incorrect\n            glyph name tables.\n            </para><para>\n            When this function returns true, the caller is sure that the glyph names returned by\n            <see cref=\"M:SharpFont.Face.GetGlyphName(System.UInt32,System.Int32)\"/> are reliable.\n            </para></summary>\n            <returns>Boolean. True if glyph names are reliable.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetPSFontInfo\">\n            <summary>\n            Retrieve the <see cref=\"T:SharpFont.PostScript.FontInfo\"/> structure corresponding to a given PostScript font.\n            </summary>\n            <remarks><para>\n            The string pointers within the font info structure are owned by the face and don't need to be freed by the\n            caller.\n            </para><para>\n            If the font's format is not PostScript-based, this function will return the\n            <see cref=\"F:SharpFont.Error.InvalidArgument\"/> error code.\n            </para></remarks>\n            <returns>Output font info structure pointer.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetPSFontPrivate\">\n            <summary>\n            Retrieve the <see cref=\"T:SharpFont.PostScript.Private\"/> structure corresponding to a given PostScript font.\n            </summary>\n            <remarks><para>\n            The string pointers within the <see cref=\"T:SharpFont.PostScript.Private\"/> structure are owned by the face and don't\n            need to be freed by the caller.\n            </para><para>\n            If the font's format is not PostScript-based, this function returns the <see cref=\"F:SharpFont.Error.InvalidArgument\"/>\n            error code.\n            </para></remarks>\n            <returns>Output private dictionary structure pointer.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetPSFontValue(SharpFont.PostScript.DictionaryKeys,System.UInt32,System.IntPtr@,System.Int32)\">\n            <summary>\n            Retrieve the value for the supplied key from a PostScript font.\n            </summary>\n            <remarks><para>\n            The values returned are not pointers into the internal structures of the face, but are ‘fresh’ copies, so\n            that the memory containing them belongs to the calling application. This also enforces the ‘read-only’\n            nature of these values, i.e., this function cannot be used to manipulate the face.\n            </para><para>\n            ‘value’ is a void pointer because the values returned can be of various types.\n            </para><para>\n            If either ‘value’ is NULL or ‘value_len’ is too small, just the required memory size for the requested\n            entry is returned.\n            </para><para>\n            The ‘idx’ parameter is used, not only to retrieve elements of, for example, the FontMatrix or FontBBox, but\n            also to retrieve name keys from the CharStrings dictionary, and the charstrings themselves. It is ignored\n            for atomic values.\n            </para><para>\n            <see cref=\"F:SharpFont.PostScript.DictionaryKeys.BlueScale\"/> returns a value that is scaled up by 1000. To get the\n            value as in the font stream, you need to divide by 65536000.0 (to remove the FT_Fixed scale, and the x1000\n            scale).\n            </para><para>\n            IMPORTANT: Only key/value pairs read by the FreeType interpreter can be retrieved. So, for example,\n            PostScript procedures such as NP, ND, and RD are not available. Arbitrary keys are, obviously, not be\n            available either.\n            </para><para>\n            If the font's format is not PostScript-based, this function returns the <see cref=\"F:SharpFont.Error.InvalidArgument\"/>\n            error code.\n            </para></remarks>\n            <param name=\"key\">An enumeration value representing the dictionary key to retrieve.</param>\n            <param name=\"idx\">For array values, this specifies the index to be returned.</param>\n            <param name=\"value\">A pointer to memory into which to write the value.</param>\n            <param name=\"valueLength\">The size, in bytes, of the memory supplied for the value.</param>\n            <returns>\n            The amount of memory (in bytes) required to hold the requested value (if it exists, -1 otherwise).\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetSfntNameCount\">\n            <summary>\n            Retrieve the number of name strings in the SFNT ‘name’ table.\n            </summary>\n            <returns>The number of strings in the ‘name’ table.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetSfntName(System.UInt32)\">\n            <summary>\n            Retrieve a string of the SFNT ‘name’ table for a given index.\n            </summary>\n            <remarks><para>\n            The ‘string’ array returned in the ‘aname’ structure is not null-terminated. The application should\n            deallocate it if it is no longer in use.\n            </para><para>\n            Use <see cref=\"M:SharpFont.Face.GetSfntNameCount\"/> to get the total number of available ‘name’ table entries, then do a\n            loop until you get the right platform, encoding, and name ID.\n            </para></remarks>\n            <param name=\"idx\">The index of the ‘name’ string.</param>\n            <returns>The indexed <see cref=\"T:SharpFont.TrueType.SfntName\"/> structure.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetBdfCharsetId(System.String@,System.String@)\">\n            <summary>\n            Retrieve a BDF font character set identity, according to the BDF specification.\n            </summary>\n            <remarks>\n            This function only works with BDF faces, returning an error otherwise.\n            </remarks>\n            <param name=\"encoding\">Charset encoding, as a C string, owned by the face.</param>\n            <param name=\"registry\">Charset registry, as a C string, owned by the face.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.GetBdfProperty(System.String)\">\n            <summary>\n            Retrieve a BDF property from a BDF or PCF font file.\n            </summary>\n            <remarks><para>\n            This function works with BDF and PCF fonts. It returns an error otherwise. It also returns an error if the\n            property is not in the font.\n            </para><para>\n            A ‘property’ is a either key-value pair within the STARTPROPERTIES ... ENDPROPERTIES block of a BDF font or\n            a key-value pair from the ‘info->props’ array within a ‘FontRec’ structure of a PCF font.\n            </para><para>\n            Integer properties are always stored as ‘signed’ within PCF fonts; consequently,\n            <see cref=\"F:SharpFont.Bdf.PropertyType.Cardinal\"/> is a possible return value for BDF fonts only.\n            </para><para>\n            In case of error, ‘aproperty->type’ is always set to <see cref=\"F:SharpFont.Bdf.PropertyType.None\"/>.\n            </para></remarks>\n            <param name=\"propertyName\">The property name.</param>\n            <returns>The property.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetCidRegistryOrderingSupplement(System.String@,System.String@,System.Int32@)\">\n            <summary>\n            Retrieve the Registry/Ordering/Supplement triple (also known as the \"R/O/S\") from a CID-keyed font.\n            </summary>\n            <remarks>\n            This function only works with CID faces, returning an error otherwise.\n            </remarks>\n            <param name=\"registry\">The registry, as a C string, owned by the face.</param>\n            <param name=\"ordering\">The ordering, as a C string, owned by the face.</param>\n            <param name=\"supplement\">The supplement.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.GetCidIsInternallyCidKeyed\">\n            <summary>\n            Retrieve the type of the input face, CID keyed or not. In constrast to the \n            <see cref=\"P:SharpFont.Face.IsCidKeyed\"/> macro this function returns successfully also for CID-keyed fonts in an\n            SNFT wrapper.\n            </summary>\n            <remarks>\n            This function only works with CID faces and OpenType fonts, returning an error otherwise.\n            </remarks>\n            <returns>The type of the face as an FT_Bool.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetCidFromGlyphIndex(System.UInt32)\">\n            <summary>\n            Retrieve the CID of the input glyph index.\n            </summary>\n            <remarks>\n            This function only works with CID faces and OpenType fonts, returning an error otherwise.\n            </remarks>\n            <param name=\"glyphIndex\">The input glyph index.</param>\n            <returns>The CID as an uint.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetPfrMetrics(System.UInt32@,System.UInt32@,System.Int32@,System.Int32@)\">\n            <summary>\n            Return the outline and metrics resolutions of a given PFR face.\n            </summary>\n            <remarks>\n            If the input face is not a PFR, this function will return an error. However, in all cases, it will return\n            valid values.\n            </remarks>\n            <param name=\"outlineResolution\">\n            Outline resolution. This is equivalent to ‘face->units_per_EM’ for non-PFR fonts. Optional (parameter can\n            be NULL).\n            </param>\n            <param name=\"metricsResolution\">\n            Metrics resolution. This is equivalent to ‘outline_resolution’ for non-PFR fonts. Optional (parameter can\n            be NULL).\n            </param>\n            <param name=\"metricsXScale\">\n            A 16.16 fixed-point number used to scale distance expressed in metrics units to device sub-pixels. This is\n            equivalent to ‘face->size->x_scale’, but for metrics only. Optional (parameter can be NULL).\n            </param>\n            <param name=\"metricsYScale\">\n            Same as ‘ametrics_x_scale’ but for the vertical direction. optional (parameter can be NULL).\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Face.GetPfrKerning(System.UInt32,System.UInt32)\">\n            <summary>\n            Return the kerning pair corresponding to two glyphs in a PFR face. The distance is expressed in metrics\n            units, unlike the result of <see cref=\"M:SharpFont.Face.GetKerning(System.UInt32,System.UInt32,SharpFont.KerningMode)\"/>.\n            </summary>\n            <remarks><para>\n            This function always return distances in original PFR metrics units. This is unlike\n            <see cref=\"M:SharpFont.Face.GetKerning(System.UInt32,System.UInt32,SharpFont.KerningMode)\"/> with the <see cref=\"F:SharpFont.KerningMode.Unscaled\"/> mode, which always returns\n            distances converted to outline units.\n            </para><para>\n            You can use the value of the ‘x_scale’ and ‘y_scale’ parameters returned by <see cref=\"M:SharpFont.Face.GetPfrMetrics(System.UInt32@,System.UInt32@,System.Int32@,System.Int32@)\"/> to\n            scale these to device sub-pixels.\n            </para></remarks>\n            <param name=\"left\">Index of the left glyph.</param>\n            <param name=\"right\">Index of the right glyph.</param>\n            <returns>A kerning vector.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetPfrAdvance(System.UInt32)\">\n            <summary>\n            Return a given glyph advance, expressed in original metrics units, from a PFR font.\n            </summary>\n            <remarks>\n            You can use the ‘x_scale’ or ‘y_scale’ results of <see cref=\"M:SharpFont.Face.GetPfrMetrics(System.UInt32@,System.UInt32@,System.Int32@,System.Int32@)\"/> to convert the advance to\n            device sub-pixels (i.e., 1/64th of pixels).\n            </remarks>\n            <param name=\"glyphIndex\">The glyph index.</param>\n            <returns>The glyph advance in metrics units.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetWinFntHeader\">\n            <summary>\n            Retrieve a Windows FNT font info header.\n            </summary>\n            <remarks>\n            This function only works with Windows FNT faces, returning an error otherwise.\n            </remarks>\n            <returns>The WinFNT header.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetX11FontFormat\">\n            <summary>\n            Return a string describing the format of a given face, using values which can be used as an X11\n            FONT_PROPERTY. Possible values are ‘TrueType’, ‘Type 1’, ‘BDF’, ‘PCF’, ‘Type 42’, ‘CID Type 1’, ‘CFF’,\n            ‘PFR’, and ‘Windows FNT’.\n            </summary>\n            <returns>Font format string. NULL in case of error.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetGasp(System.UInt32)\">\n            <summary>\n            Read the ‘gasp’ table from a TrueType or OpenType font file and return the entry corresponding to a given\n            character pixel size.\n            </summary>\n            <param name=\"ppem\">The vertical character pixel size.</param>\n            <returns>\n            Bit flags (see <see cref=\"T:SharpFont.Gasp\"/>), or <see cref=\"F:SharpFont.Gasp.NoTable\"/> if there is no ‘gasp’ table in the face.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetAdvance(System.UInt32,SharpFont.LoadFlags)\">\n            <summary>\n            Retrieve the advance value of a given glyph outline in a <see cref=\"T:SharpFont.Face\"/>. By default, the unhinted\n            advance is returned in font units.\n            </summary>\n            <remarks><para>\n            This function may fail if you use <see cref=\"F:SharpFont.LoadFlags.AdvanceFlagFastOnly\"/> and if the corresponding font\n            backend doesn't have a quick way to retrieve the advances.\n            </para><para>\n            A scaled advance is returned in 16.16 format but isn't transformed by the affine transformation specified\n            by <see cref=\"M:SharpFont.Face.SetTransform(SharpFont.FTMatrix,SharpFont.FTVector)\"/>.\n            </para></remarks>\n            <param name=\"glyphIndex\">The glyph index.</param>\n            <param name=\"flags\">\n            A set of bit flags similar to those used when calling <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>, used to determine what kind\n            of advances you need.\n            </param>\n            <returns><para>\n            The advance value, in either font units or 16.16 format.\n            </para><para>\n            If <see cref=\"F:SharpFont.LoadFlags.VerticalLayout\"/> is set, this is the vertical advance corresponding to a vertical\n            layout. Otherwise, it is the horizontal advance in a horizontal layout.\n            </para></returns>\n        </member>\n        <member name=\"M:SharpFont.Face.GetAdvances(System.UInt32,System.UInt32,SharpFont.LoadFlags)\">\n            <summary>\n            Retrieve the advance values of several glyph outlines in an\n            <see cref=\"T:SharpFont.Face\"/>. By default, the unhinted advances are returned\n            in font units.\n            </summary>\n            <remarks><para>\n            This function may fail if you use\n            <see cref=\"F:SharpFont.LoadFlags.AdvanceFlagFastOnly\"/> and if the\n            corresponding font backend doesn't have a quick way to retrieve the\n            advances.\n            </para><para>\n            Scaled advances are returned in 16.16 format but aren't transformed\n            by the affine transformation specified by\n            <see cref=\"M:SharpFont.Face.SetTransform(SharpFont.FTMatrix,SharpFont.FTVector)\"/>.\n            </para></remarks>\n            <param name=\"start\">The first glyph index.</param>\n            <param name=\"count\">The number of advance values you want to retrieve.</param>\n            <param name=\"flags\">A set of bit flags similar to those used when calling <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>.</param>\n            <returns><para>The advances, in either font units or 16.16 format. This array must contain at least ‘count’ elements.\n            </para><para>\n            If <see cref=\"F:SharpFont.LoadFlags.VerticalLayout\"/> is set, these are the vertical advances corresponding to a vertical layout. Otherwise, they are the horizontal advances in a horizontal layout.</para></returns>\n        </member>\n        <member name=\"M:SharpFont.Face.OpenTypeValidate(SharpFont.OpenTypeValidationFlags,System.IntPtr@,System.IntPtr@,System.IntPtr@,System.IntPtr@,System.IntPtr@)\">\n            <summary>\n            Validate various OpenType tables to assure that all offsets and indices are valid. The idea is that a\n            higher-level library which actually does the text layout can access those tables without error checking\n            (which can be quite time consuming).\n            </summary>\n            <remarks><para>\n            This function only works with OpenType fonts, returning an error otherwise.\n            </para><para>\n            After use, the application should deallocate the five tables with <see cref=\"M:SharpFont.Face.OpenTypeFree(System.IntPtr)\"/>. A NULL value\n            indicates that the table either doesn't exist in the font, or the application hasn't asked for validation.\n            </para></remarks>\n            <param name=\"flags\">A bit field which specifies the tables to be validated.</param>\n            <param name=\"baseTable\">A pointer to the BASE table.</param>\n            <param name=\"gdefTable\">A pointer to the GDEF table.</param>\n            <param name=\"gposTable\">A pointer to the GPOS table.</param>\n            <param name=\"gsubTable\">A pointer to the GSUB table.</param>\n            <param name=\"jstfTable\">A pointer to the JSTF table.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.OpenTypeFree(System.IntPtr)\">\n            <summary>\n            Free the buffer allocated by OpenType validator.\n            </summary>\n            <remarks>\n            This function must be used to free the buffer allocated by <see cref=\"M:SharpFont.Face.OpenTypeValidate(SharpFont.OpenTypeValidationFlags,System.IntPtr@,System.IntPtr@,System.IntPtr@,System.IntPtr@,System.IntPtr@)\"/> only.\n            </remarks>\n            <param name=\"table\">The pointer to the buffer that is allocated by <see cref=\"M:SharpFont.Face.OpenTypeValidate(SharpFont.OpenTypeValidationFlags,System.IntPtr@,System.IntPtr@,System.IntPtr@,System.IntPtr@,System.IntPtr@)\"/>.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.TrueTypeGXValidate(SharpFont.TrueTypeValidationFlags,System.Byte[][],System.UInt32)\">\n            <summary>\n            Validate various TrueTypeGX tables to assure that all offsets and indices are valid. The idea is that a\n            higher-level library which actually does the text layout can access those tables without error checking\n            (which can be quite time consuming).\n            </summary>\n            <remarks><para>\n            This function only works with TrueTypeGX fonts, returning an error otherwise.\n            </para><para>\n            After use, the application should deallocate the buffers pointed to by each ‘tables’ element, by calling\n            <see cref=\"M:SharpFont.Face.TrueTypeGXFree(System.IntPtr)\"/>. A NULL value indicates that the table either doesn't exist in the font, the\n            application hasn't asked for validation, or the validator doesn't have the ability to validate the sfnt\n            table.\n            </para></remarks>\n            <param name=\"flags\">A bit field which specifies the tables to be validated.</param>\n            <param name=\"tables\">\n            The array where all validated sfnt tables are stored. The array itself must be allocated by a client.\n            </param>\n            <param name=\"tableLength\">\n            The size of the ‘tables’ array. Normally, FT_VALIDATE_GX_LENGTH should be passed.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Face.TrueTypeGXFree(System.IntPtr)\">\n            <summary>\n            Free the buffer allocated by TrueTypeGX validator.\n            </summary>\n            <remarks>\n            This function must be used to free the buffer allocated by <see cref=\"M:SharpFont.Face.TrueTypeGXValidate(SharpFont.TrueTypeValidationFlags,System.Byte[][],System.UInt32)\"/> only.\n            </remarks>\n            <param name=\"table\">The pointer to the buffer allocated by <see cref=\"M:SharpFont.Face.TrueTypeGXValidate(SharpFont.TrueTypeValidationFlags,System.Byte[][],System.UInt32)\"/>.</param>\n        </member>\n        <member name=\"M:SharpFont.Face.ClassicKernValidate(SharpFont.ClassicKernValidationFlags)\">\n            <summary><para>\n            Validate classic (16-bit format) kern table to assure that the offsets and indices are valid. The idea is\n            that a higher-level library which actually does the text layout can access those tables without error\n            checking (which can be quite time consuming).\n            </para><para>\n            The ‘kern’ table validator in <see cref=\"M:SharpFont.Face.TrueTypeGXValidate(SharpFont.TrueTypeValidationFlags,System.Byte[][],System.UInt32)\"/> deals with both the new 32-bit format and\n            the classic 16-bit format, while <see cref=\"M:SharpFont.Face.ClassicKernValidate(SharpFont.ClassicKernValidationFlags)\"/> only supports the classic 16-bit format.\n            </para></summary>\n            <remarks>\n            After use, the application should deallocate the buffers pointed to by ‘ckern_table’, by calling\n            <see cref=\"M:SharpFont.Face.ClassicKernFree(System.IntPtr)\"/>. A NULL value indicates that the table doesn't exist in the font.\n            </remarks>\n            <param name=\"flags\">A bit field which specifies the dialect to be validated.</param>\n            <returns>A pointer to the kern table.</returns>\n        </member>\n        <member name=\"M:SharpFont.Face.ClassicKernFree(System.IntPtr)\">\n            <summary>\n            Free the buffer allocated by classic Kern validator.\n            </summary>\n            <remarks>\n            This function must be used to free the buffer allocated by <see cref=\"M:SharpFont.Face.ClassicKernValidate(SharpFont.ClassicKernValidationFlags)\"/> only.\n            </remarks>\n            <param name=\"table\">\n            The pointer to the buffer that is allocated by <see cref=\"M:SharpFont.Face.ClassicKernValidate(SharpFont.ClassicKernValidationFlags)\"/>.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Face.Dispose\">\n            <summary>\n            Disposes the Face.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.FaceFlags\">\n            <summary>\n            A list of bit flags used in the ‘face_flags’ field of the <see cref=\"T:SharpFont.Face\"/> structure. They inform client\n            applications of properties of the corresponding face.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.None\">\n            <summary>\n            No style flags.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.Scalable\">\n            <summary>\n            Indicates that the face contains outline glyphs. This doesn't prevent bitmap strikes, i.e., a face can have\n            both this and and <see cref=\"F:SharpFont.FaceFlags.FixedSizes\"/> set.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.FixedSizes\">\n            <summary>\n            Indicates that the face contains bitmap strikes. See also <see cref=\"P:SharpFont.Face.FixedSizesCount\"/> and\n            <see cref=\"P:SharpFont.Face.AvailableSizes\"/>.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.FixedWidth\">\n            <summary>\n            Indicates that the face contains fixed-width characters (like Courier, Lucido, MonoType, etc.).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.Sfnt\">\n            <summary>\n            Indicates that the face uses the ‘sfnt’ storage scheme. For now, this means TrueType and OpenType.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.Horizontal\">\n            <summary>\n            Indicates that the face contains horizontal glyph metrics. This should be set for all common formats.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.Vertical\">\n            <summary>\n            Indicates that the face contains vertical glyph metrics. This is only available in some formats, not all of\n            them.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.Kerning\">\n            <summary>\n            Indicates that the face contains kerning information. If set, the kerning distance can be retrieved through\n            the function <see cref=\"M:SharpFont.Face.GetKerning(System.UInt32,System.UInt32,SharpFont.KerningMode)\"/>. Otherwise the function always return the vector (0,0). Note\n            that FreeType doesn't handle kerning data from the ‘GPOS’ table (as present in some OpenType fonts).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.FastGlyphs\">\n            <summary>\n            THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.MultipleMasters\">\n            <summary>\n            Indicates that the font contains multiple masters and is capable of interpolating between them. See the\n            multiple-masters specific API for details.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.GlyphNames\">\n            <summary>\n            Indicates that the font contains glyph names that can be retrieved through\n            <see cref=\"M:SharpFont.Face.GetGlyphName(System.UInt32,System.Int32)\"/>. Note that some TrueType fonts contain broken glyph name\n            tables. Use the function <see cref=\"M:SharpFont.Face.HasPSGlyphNames\"/> when needed.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.ExternalStream\">\n            <summary>\n            Used internally by FreeType to indicate that a face's stream was provided by the client application and\n            should not be destroyed when <see cref=\"M:SharpFont.Face.Dispose\"/> is called. Don't read or test this flag.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.Hinter\">\n            <summary>\n            Set if the font driver has a hinting machine of its own. For example, with TrueType fonts, it makes sense\n            to use data from the SFNT ‘gasp’ table only if the native TrueType hinting engine (with the bytecode\n            interpreter) is available and active.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.CidKeyed\">\n            <summary><para>\n            Set if the font is CID-keyed. In that case, the font is not accessed by glyph indices but by CID values.\n            For subsetted CID-keyed fonts this has the consequence that not all index values are a valid argument to\n            <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>. Only the CID values for which corresponding glyphs in the subsetted font\n            exist make <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> return successfully; in all other cases you get an\n            <see cref=\"F:SharpFont.Error.InvalidArgument\"/> error.\n            </para><para>\n            Note that CID-keyed fonts which are in an SFNT wrapper don't have this flag set since the glyphs are\n            accessed in the normal way (using contiguous indices); the ‘CID-ness’ isn't visible to the application.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.Tricky\">\n            <summary><para>\n            Set if the font is ‘tricky’, this is, it always needs the font format's native hinting engine to get a\n            reasonable result. A typical example is the Chinese font ‘mingli.ttf’ which uses TrueType bytecode\n            instructions to move and scale all of its subglyphs.\n            </para><para>\n            It is not possible to autohint such fonts using <see cref=\"F:SharpFont.LoadFlags.ForceAutohint\"/>; it will also ignore\n            <see cref=\"F:SharpFont.LoadFlags.NoHinting\"/>. You have to set both <see cref=\"F:SharpFont.LoadFlags.NoHinting\"/> and\n            <see cref=\"F:SharpFont.LoadFlags.ForceAutohint\"/> to really disable hinting; however, you probably never want this\n            except for demonstration purposes.\n            </para><para>\n            Currently, there are about a dozen TrueType fonts in the list of tricky fonts; they are hard-coded in file\n            ‘ttobjs.c’.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.FaceFlags.Color\">\n            <summary>\n            Set if the font has color glyph tables. To access color glyphs use <see cref=\"F:SharpFont.LoadFlags.Color\"/>.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.FreeTypeException\">\n            <summary>\n            An exception that gets thrown when FreeType returns an error code.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FreeTypeException.#ctor(SharpFont.Error)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.FreeTypeException\"/> class.\n            </summary>\n            <param name=\"error\">The error returned by FreeType.</param>\n        </member>\n        <member name=\"P:SharpFont.FreeTypeException.Error\">\n            <summary>\n            Gets the FreeType error code that caused the exception.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.EmbeddingTypes\">\n            <summary>\n            A list of bit flags used in the ‘fsType’ field of the OS/2 table in a\n            TrueType or OpenType font and the ‘FSType’ entry in a PostScript font.\n            These bit flags are returned by FT_Get_FSType_Flags; they inform client\n            applications of embedding and subsetting restrictions associated with a\n            font.\n            </summary>\n            <remarks>\n            While the fsType flags can indicate that a font may be embedded, a\n            license with the font vendor may be separately required to use the font\n            in this way.\n            </remarks>\n            <see href=\"http://www.adobe.com/devnet/acrobat/pdfs/FontPolicies.pdf\"/>\n        </member>\n        <member name=\"F:SharpFont.EmbeddingTypes.Installable\">\n            <summary>\n            Fonts with no fsType bit set may be embedded and permanently\n            installed on the remote system by an application.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.EmbeddingTypes.RestrictedLicense\">\n            <summary>\n            Fonts that have only this bit set must not be modified, embedded\n            or exchanged in any manner without first obtaining permission of\n            the font software copyright owner.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.EmbeddingTypes.PreviewAndPrint\">\n            <summary>\n            If this bit is set, the font may be embedded and temporarily loaded\n            on the remote system. Documents containing Preview &amp; Print\n            fonts must be opened ‘read-only’; no edits can be applied to the\n            document.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.EmbeddingTypes.Editable\">\n            <summary>\n            If this bit is set, the font may be embedded but must only be\n            installed temporarily on other systems. In contrast to Preview\n            &amp; Print fonts, documents containing editable fonts may be\n            opened for reading, editing is permitted, and changes may be saved.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.EmbeddingTypes.NoSubsetting\">\n            <summary>\n            If this bit is set, the font may not be subsetted prior to\n            embedding.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.EmbeddingTypes.BitmapOnly\">\n            <summary>\n            If this bit is set, only bitmaps contained in the font may be\n            embedded; no outline data may be embedded. If there are no bitmaps\n            available in the font, then the font is unembeddable.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.FT\">\n            <summary>\n            Provides an API very similar to the original FreeType API.\n            </summary>\n            <remarks>\n            Useful for porting over C code that relies on FreeType. For everything else, use the instance methods of the\n            classes provided by SharpFont, they are designed to follow .NET naming and style conventions.\n            </remarks>\n            <content>\n            This file contains all the raw FreeType2 function signatures.\n            </content>\n        </member>\n        <member name=\"F:SharpFont.FT.AnglePI\">\n            <summary>\n            The angle pi expressed in FT_Angle units.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FT.Angle2PI\">\n            <summary>\n            The angle 2*pi expressed in FT_Angle units.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FT.AnglePI2\">\n            <summary>\n            The angle pi/2 expressed in FT_Angle units.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FT.AnglePI4\">\n            <summary>\n            The angle pi/4 expressed in FT_Angle units.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FT.MulDiv(System.Int32,System.Int32,System.Int32)\">\n            <summary><para>\n            A very simple function used to perform the computation ‘(a*b)/c’ with maximal accuracy (it uses a 64-bit\n            intermediate integer whenever necessary).\n            </para><para>\n            This function isn't necessarily as fast as some processor specific operations, but is at least completely\n            portable.\n            </para></summary>\n            <param name=\"a\">The first multiplier.</param>\n            <param name=\"b\">The second multiplier.</param>\n            <param name=\"c\">The divisor.</param>\n            <returns>\n            The result of ‘(a*b)/c’. This function never traps when trying to divide by zero; it simply returns\n            ‘MaxInt’ or ‘MinInt’ depending on the signs of ‘a’ and ‘b’.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.FT.MulFix(System.Int32,System.Int32)\">\n            <summary>\n            A very simple function used to perform the computation ‘(a*b)/0x10000’ with maximal accuracy. Most of the\n            time this is used to multiply a given value by a 16.16 fixed float factor.\n            </summary>\n            <remarks><para>\n            This function has been optimized for the case where the absolute value of ‘a’ is less than 2048, and ‘b’ is\n            a 16.16 scaling factor. As this happens mainly when scaling from notional units to fractional pixels in\n            FreeType, it resulted in noticeable speed improvements between versions 2.x and 1.x.\n            </para><para>\n            As a conclusion, always try to place a 16.16 factor as the second argument of this function; this can make\n            a great difference.\n            </para></remarks>\n            <param name=\"a\">The first multiplier.</param>\n            <param name=\"b\">The second multiplier. Use a 16.16 factor here whenever possible (see note below).</param>\n            <returns>The result of ‘(a*b)/0x10000’.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.DivFix(System.Int32,System.Int32)\">\n            <summary>\n            A very simple function used to perform the computation ‘(a*0x10000)/b’ with maximal accuracy. Most of the\n            time, this is used to divide a given value by a 16.16 fixed float factor.\n            </summary>\n            <remarks>\n            The optimization for <see cref=\"M:SharpFont.FT.DivFix(System.Int32,System.Int32)\"/> is simple: If (a &lt;&lt; 16) fits in 32 bits, then the division\n            is computed directly. Otherwise, we use a specialized version of <see cref=\"M:SharpFont.FT.MulDiv(System.Int32,System.Int32,System.Int32)\"/>.\n            </remarks>\n            <param name=\"a\">The first multiplier.</param>\n            <param name=\"b\">The second multiplier. Use a 16.16 factor here whenever possible (see note below).</param>\n            <returns>The result of ‘(a*0x10000)/b’.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.RoundFix(System.Int32)\">\n            <summary>\n            A very simple function used to round a 16.16 fixed number.\n            </summary>\n            <param name=\"a\">The number to be rounded.</param>\n            <returns>The result of ‘(a + 0x8000) &amp; -0x10000’.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.CeilFix(System.Int32)\">\n            <summary>\n            A very simple function used to compute the ceiling function of a 16.16 fixed number.\n            </summary>\n            <param name=\"a\">The number for which the ceiling function is to be computed.</param>\n            <returns>The result of ‘(a + 0x10000 - 1) &amp; -0x10000’.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.FloorFix(System.Int32)\">\n            <summary>\n            A very simple function used to compute the floor function of a 16.16 fixed number.\n            </summary>\n            <param name=\"a\">The number for which the floor function is to be computed.</param>\n            <returns>The result of ‘a &amp; -0x10000’.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.Sin(System.Int32)\">\n            <summary>\n            Return the sinus of a given angle in fixed point format.\n            </summary>\n            <remarks>\n            If you need both the sinus and cosinus for a given angle, use the function <see cref=\"M:SharpFont.FTVector.Unit(System.Int32)\"/>.\n            </remarks>\n            <param name=\"angle\">The input angle.</param>\n            <returns>The sinus value.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.Cos(System.Int32)\">\n            <summary>\n            Return the cosinus of a given angle in fixed point format.\n            </summary>\n            <remarks>\n            If you need both the sinus and cosinus for a given angle, use the function <see cref=\"M:SharpFont.FTVector.Unit(System.Int32)\"/>.\n            </remarks>\n            <param name=\"angle\">The input angle.</param>\n            <returns>The cosinus value.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.Tan(System.Int32)\">\n            <summary>\n            Return the tangent of a given angle in fixed point format.\n            </summary>\n            <param name=\"angle\">The input angle.</param>\n            <returns>The tangent value.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.Atan2(System.Int32,System.Int32)\">\n            <summary>\n            Return the arc-tangent corresponding to a given vector (x,y) in the 2d plane.\n            </summary>\n            <param name=\"x\">The horizontal vector coordinate.</param>\n            <param name=\"y\">The vertical vector coordinate.</param>\n            <returns>The arc-tangent value (i.e. angle).</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.AngleDiff(System.Int32,System.Int32)\">\n            <summary>\n            Return the difference between two angles. The result is always constrained to the [-PI..PI] interval.\n            </summary>\n            <param name=\"angle1\">First angle.</param>\n            <param name=\"angle2\">Second angle.</param>\n            <returns>Constrained value of ‘value2-value1’.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.GetFileFromMacName(System.String,System.Int32@)\">\n            <summary>\n            Return an FSSpec for the disk file containing the named font.\n            </summary>\n            <param name=\"fontName\">Mac OS name of the font (e.g., Times New Roman Bold).</param>\n            <param name=\"faceIndex\">Index of the face. For passing to <see cref=\"M:SharpFont.Library.NewFaceFromFSSpec(System.IntPtr,System.Int32)\"/>.</param>\n            <returns>FSSpec to the file. For passing to <see cref=\"M:SharpFont.Library.NewFaceFromFSSpec(System.IntPtr,System.Int32)\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.GetFileFromMacAtsName(System.String,System.Int32@)\">\n            <summary>\n            Return an FSSpec for the disk file containing the named font.\n            </summary>\n            <param name=\"fontName\">Mac OS name of the font in ATS framework.</param>\n            <param name=\"faceIndex\">Index of the face. For passing to <see cref=\"M:SharpFont.Library.NewFaceFromFSSpec(System.IntPtr,System.Int32)\"/>.</param>\n            <returns>FSSpec to the file. For passing to <see cref=\"M:SharpFont.Library.NewFaceFromFSSpec(System.IntPtr,System.Int32)\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.FT.GetFilePathFromMacAtsName(System.String,System.Byte[])\">\n            <summary>\n            Return a pathname of the disk file and face index for given font name which is handled by ATS framework.\n            </summary>\n            <param name=\"fontName\">Mac OS name of the font in ATS framework.</param>\n            <param name=\"path\">\n            Buffer to store pathname of the file. For passing to <see cref=\"M:SharpFont.Library.NewFace(System.String,System.Int32)\"/>. The client must\n            allocate this buffer before calling this function.\n            </param>\n            <returns>Index of the face. For passing to <see cref=\"M:SharpFont.Library.NewFace(System.String,System.Int32)\"/>.</returns>\n        </member>\n        <member name=\"F:SharpFont.FT.FreetypeDll\">\n            <summary>\n            Defines the location of the FreeType DLL. Update SharpFont.dll.config if you change this!\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.FT.CallConvention\">\n            <summary>\n            Defines the calling convention for P/Invoking the native freetype methods.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Gasp\">\n            <summary>\n            A list of values and/or bit-flags returned by the FT_Get_Gasp function.\n            </summary>\n            <remarks><para>\n            The bit-flags <see cref=\"F:SharpFont.Gasp.DoGridfit\"/> and <see cref=\"F:SharpFont.Gasp.DoGray\"/> are to be used for standard font\n            rasterization only. Independently of that, <see cref=\"F:SharpFont.Gasp.SymmetricSmoothing\"/> and\n            <see cref=\"F:SharpFont.Gasp.SymmetricGridfit\"/> are to be used if ClearType is enabled (and <see cref=\"F:SharpFont.Gasp.DoGridfit\"/>\n            and <see cref=\"F:SharpFont.Gasp.DoGray\"/> are consequently ignored).\n            </para><para>\n            ‘ClearType’ is Microsoft's implementation of LCD rendering, partly protected by patents.\n            </para></remarks>\n        </member>\n        <member name=\"F:SharpFont.Gasp.NoTable\">\n            <summary>\n            This special value means that there is no GASP table in this face. It is up to the client to decide what to\n            do.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Gasp.DoGridfit\">\n            <summary>\n            Grid-fitting and hinting should be performed at the specified ppem. This really means TrueType bytecode\n            interpretation. If this bit is not set, no hinting gets applied.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Gasp.DoGray\">\n            <summary>\n            Anti-aliased rendering should be performed at the specified ppem. If not set, do monochrome rendering.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Gasp.SymmetricSmoothing\">\n            <summary>\n            If set, smoothing along multiple axes must be used with ClearType.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.Gasp.SymmetricGridfit\">\n            <summary>\n            Grid-fitting must be used with ClearType's symmetric smoothing.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.GenericFinalizer\">\n            <summary>\n            Describe a function used to destroy the ‘client’ data of any FreeType object. See the description of the\n            <see cref=\"T:SharpFont.Generic\"/> type for details of usage.\n            </summary>\n            <param name=\"object\">\n            The address of the FreeType object which is under finalization. Its client data is accessed through its\n            ‘generic’ field.\n            </param>\n        </member>\n        <member name=\"T:SharpFont.Generic\">\n            <summary><para>\n            Client applications often need to associate their own data to a variety of FreeType core objects. For example,\n            a text layout API might want to associate a glyph cache to a given size object.\n            </para><para>\n            Most FreeType object contains a ‘generic’ field, of type <see cref=\"T:SharpFont.Generic\"/>, which usage is left to client\n            applications and font servers.\n            </para><para>\n            It can be used to store a pointer to client-specific data, as well as the address of a ‘finalizer’ function,\n            which will be called by FreeType when the object is destroyed (for example, the previous client example would\n            put the address of the glyph cache destructor in the ‘finalizer’ field).\n            </para></summary>\n        </member>\n        <member name=\"M:SharpFont.Generic.#ctor(System.IntPtr,SharpFont.GenericFinalizer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Generic\"/> class.\n            </summary>\n            <param name=\"data\">\n            A typeless pointer to some client data. The data it cointains must stay fixed until finalizer is called.\n            </param>\n            <param name=\"finalizer\">A delegate that gets called when the contained object gets finalized.</param>\n        </member>\n        <member name=\"P:SharpFont.Generic.SizeInBytes\">\n            <summary>\n            Gets the size of a <see cref=\"T:SharpFont.Generic\"/>, in bytes.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Generic.Data\">\n            <summary>\n            Gets or sets a typeless pointer to any client-specified data. This field is completely ignored by the\n            FreeType library.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Generic.Finalizer\">\n            <summary>\n            Gets or sets a pointer to a <see cref=\"T:SharpFont.GenericFinalizer\"/> function, which will be called when the object\n            is destroyed. If this field is set to NULL, no code will be called.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Glyph\">\n            <summary>\n            The root glyph structure contains a given glyph image plus its advance width in 16.16 fixed float format.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Glyph.Finalize\">\n            <summary>\n            Finalizes an instance of the Glyph class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Glyph.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the object has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Glyph.Library\">\n            <summary>\n            Gets a handle to the FreeType library object.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Glyph.Format\">\n            <summary>\n            Gets the format of the glyph's image.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Glyph.Advance\">\n            <summary>\n            Gets a 16.16 vector that gives the glyph's advance width.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Glyph.op_Explicit(SharpFont.Glyph)~SharpFont.BitmapGlyph\">\n            <summary>\n            Downcasts a <see cref=\"T:SharpFont.Glyph\"/> to a <see cref=\"T:SharpFont.BitmapGlyph\"/>\n            </summary>\n            <param name=\"g\">A <see cref=\"T:SharpFont.Glyph\"/>.</param>\n            <returns>A <see cref=\"T:SharpFont.BitmapGlyph\"/>.</returns>\n            <exception cref=\"T:System.InvalidCastException\">\n            If the <see cref=\"T:SharpFont.Glyph\"/>'s format is not <see cref=\"F:SharpFont.GlyphFormat.Bitmap\"/>.\n            </exception>\n        </member>\n        <member name=\"M:SharpFont.Glyph.op_Explicit(SharpFont.Glyph)~SharpFont.OutlineGlyph\">\n            <summary>\n            Downcasts a <see cref=\"T:SharpFont.Glyph\"/> to a <see cref=\"T:SharpFont.OutlineGlyph\"/>\n            </summary>\n            <param name=\"g\">A <see cref=\"T:SharpFont.Glyph\"/>.</param>\n            <returns>A <see cref=\"T:SharpFont.OutlineGlyph\"/>.</returns>\n            <exception cref=\"T:System.InvalidCastException\">\n            If the <see cref=\"T:SharpFont.Glyph\"/>'s format is not <see cref=\"F:SharpFont.GlyphFormat.Outline\"/>.\n            </exception>\n        </member>\n        <member name=\"M:SharpFont.Glyph.ToBitmapGlyph\">\n            <summary>\n            CLS-compliant equivalent of an explicit cast to <see cref=\"T:SharpFont.BitmapGlyph\"/>.\n            </summary>\n            <returns>A <see cref=\"T:SharpFont.BitmapGlyph\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.Glyph.ToOutlineGlyph\">\n            <summary>\n            CLS-compliant equivalent of an explicit cast to <see cref=\"T:SharpFont.OutlineGlyph\"/>.\n            </summary>\n            <returns>A <see cref=\"T:SharpFont.OutlineGlyph\"/>.</returns>\n        </member>\n        <member name=\"M:SharpFont.Glyph.Copy\">\n            <summary>\n            A function used to copy a glyph image. Note that the created <see cref=\"T:SharpFont.Glyph\"/> object must be released\n            with <see cref=\"M:SharpFont.Glyph.Dispose\"/>.\n            </summary>\n            <returns>A handle to the target glyph object. 0 in case of error.</returns>\n        </member>\n        <member name=\"M:SharpFont.Glyph.Transform(SharpFont.FTMatrix,SharpFont.FTVector)\">\n            <summary>\n            Transform a glyph image if its format is scalable.\n            </summary>\n            <param name=\"matrix\">A pointer to a 2x2 matrix to apply.</param>\n            <param name=\"delta\">\n            A pointer to a 2d vector to apply. Coordinates are expressed in 1/64th of a pixel.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Glyph.GetCBox(SharpFont.GlyphBBoxMode)\">\n            <summary><para>\n            Return a glyph's ‘control box’. The control box encloses all the outline's points, including Bézier control\n            points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some\n            situations (like when rotating an outline which contains Bézier outside arcs).\n            </para><para>\n            Computing the control box is very fast, while getting the bounding box can take much more time as it needs\n            to walk over all segments and arcs in the outline. To get the latter, you can use the ‘ftbbox’ component\n            which is dedicated to this single task.\n            </para></summary>\n            <remarks><para>\n            Coordinates are relative to the glyph origin, using the y upwards convention.\n            </para><para>\n            If the glyph has been loaded with <see cref=\"F:SharpFont.LoadFlags.NoScale\"/>, ‘bbox_mode’ must be set to\n            <see cref=\"F:SharpFont.GlyphBBoxMode.Unscaled\"/> to get unscaled font units in 26.6 pixel format. The value\n            <see cref=\"F:SharpFont.GlyphBBoxMode.Subpixels\"/> is another name for this constant.\n            </para><para>\n            If the font is tricky and the glyph has been loaded with <see cref=\"F:SharpFont.LoadFlags.NoScale\"/>, the resulting\n            CBox is meaningless. To get reasonable values for the CBox it is necessary to load the glyph at a large\n            ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting\n            the CBox which can be eventually converted back to font units.\n            </para><para>\n            Note that the maximum coordinates are exclusive, which means that one can compute the width and height of\n            the glyph image (be it in integer or 26.6 pixels) as:\n            </para><para>\n            <code>\n            width  = bbox.xMax - bbox.xMin;\n            height = bbox.yMax - bbox.yMin;\n            </code>\n            </para><para>\n            Note also that for 26.6 coordinates, if ‘bbox_mode’ is set to <see cref=\"F:SharpFont.GlyphBBoxMode.Gridfit\"/>, the\n            coordinates will also be grid-fitted, which corresponds to:\n            </para><para>\n            <code>\n            bbox.xMin = FLOOR(bbox.xMin);\n            bbox.yMin = FLOOR(bbox.yMin);\n            bbox.xMax = CEILING(bbox.xMax);\n            bbox.yMax = CEILING(bbox.yMax);\n            </code>\n            </para><para>\n            To get the bbox in pixel coordinates, set ‘bbox_mode’ to <see cref=\"F:SharpFont.GlyphBBoxMode.Truncate\"/>.\n            </para><para>\n            To get the bbox in grid-fitted pixel coordinates, set ‘bbox_mode’ to <see cref=\"F:SharpFont.GlyphBBoxMode.Pixels\"/>.\n            </para></remarks>\n            <param name=\"mode\">The mode which indicates how to interpret the returned bounding box values.</param>\n            <returns>\n            The glyph coordinate bounding box. Coordinates are expressed in 1/64th of pixels if it is grid-fitted.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Glyph.ToBitmap(SharpFont.RenderMode,SharpFont.FTVector,System.Boolean)\">\n            <summary>\n            Convert a given glyph object to a bitmap glyph object.\n            </summary>\n            <remarks><para>\n            This function does nothing if the glyph format isn't scalable.\n            </para><para>\n            The glyph image is translated with the ‘origin’ vector before rendering.\n            </para><para>\n            The first parameter is a pointer to an <see cref=\"T:SharpFont.Glyph\"/> handle, that will be replaced by this function\n            (with newly allocated data). Typically, you would use (omitting error handling):\n            </para><para>\n            --sample code ommitted--\n            </para></remarks>\n            <param name=\"renderMode\">An enumeration that describes how the data is rendered.</param>\n            <param name=\"origin\">\n            A pointer to a vector used to translate the glyph image before rendering. Can be 0 (if no translation). The\n            origin is expressed in 26.6 pixels.\n            </param>\n            <param name=\"destroy\">\n            A boolean that indicates that the original glyph image should be destroyed by this function. It is never\n            destroyed in case of error.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Glyph.Stroke(SharpFont.Stroker,System.Boolean)\">\n            <summary>\n            Stroke a given outline glyph object with a given stroker.\n            </summary>\n            <remarks>\n            The source glyph is untouched in case of error.\n            </remarks>\n            <param name=\"stroker\">A stroker handle.</param>\n            <param name=\"destroy\">A Boolean. If 1, the source glyph object is destroyed on success.</param>\n            <returns>New glyph handle.</returns>\n        </member>\n        <member name=\"M:SharpFont.Glyph.StrokeBorder(SharpFont.Stroker,System.Boolean,System.Boolean)\">\n            <summary>\n            Stroke a given outline glyph object with a given stroker, but only return either its inside or outside\n            border.\n            </summary>\n            <remarks>\n            The source glyph is untouched in case of error.\n            </remarks>\n            <param name=\"stroker\">A stroker handle.</param>\n            <param name=\"inside\">A Boolean. If 1, return the inside border, otherwise the outside border.</param>\n            <param name=\"destroy\">A Boolean. If 1, the source glyph object is destroyed on success.</param>\n            <returns>New glyph handle.</returns>\n        </member>\n        <member name=\"M:SharpFont.Glyph.Dispose\">\n            <summary>\n            Disposes the Glyph.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.GlyphBBoxMode\">\n            <summary>\n            The mode how the values of <see cref=\"M:SharpFont.Glyph.GetCBox(SharpFont.GlyphBBoxMode)\"/> are returned.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphBBoxMode.Unscaled\">\n            <summary>Return unscaled font units.</summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphBBoxMode.Subpixels\">\n            <summary>Return unfitted 26.6 coordinates.</summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphBBoxMode.Gridfit\">\n            <summary>Return grid-fitted 26.6 coordinates.</summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphBBoxMode.Truncate\">\n            <summary>Return coordinates in integer pixels.</summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphBBoxMode.Pixels\">\n            <summary>Return grid-fitted pixel coordinates.</summary>\n        </member>\n        <member name=\"T:SharpFont.GlyphFormat\">\n            <summary>\n            An enumeration type used to describe the format of a given glyph image. Note that this version of FreeType only\n            supports two image formats, even though future font drivers will be able to register their own format.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphFormat.None\">\n            <summary>\n            The value 0 is reserved.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphFormat.Composite\">\n            <summary>\n            The glyph image is a composite of several other images. This format is only used with\n            <see cref=\"F:SharpFont.LoadFlags.NoRecurse\"/>, and is used to report compound glyphs (like accented characters).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphFormat.Bitmap\">\n            <summary>\n            The glyph image is a bitmap, and can be described as an <see cref=\"T:SharpFont.FTBitmap\"/>. You generally need to\n            access the ‘bitmap’ field of the <see cref=\"T:SharpFont.GlyphSlot\"/> structure to read it.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphFormat.Outline\">\n            <summary>\n            The glyph image is a vectorial outline made of line segments and Bézier arcs; it can be described as an\n            <see cref=\"F:SharpFont.GlyphFormat.Outline\"/>; you generally want to access the ‘outline’ field of the <see cref=\"T:SharpFont.GlyphSlot\"/>\n            structure to read it.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.GlyphFormat.Plotter\">\n            <summary>\n            The glyph image is a vectorial path with no inside and outside contours. Some Type 1 fonts, like those in\n            the Hershey family, contain glyphs in this format. These are described as <see cref=\"F:SharpFont.GlyphFormat.Outline\"/>, but\n            FreeType isn't currently capable of rendering them correctly.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.GlyphMetrics\">\n            <summary>\n            A structure used to model the metrics of a single glyph. The values are expressed in 26.6 fractional pixel\n            format; if the flag <see cref=\"F:SharpFont.LoadFlags.NoScale\"/> has been used while loading the glyph, values are expressed\n            in font units instead.\n            </summary>\n            <remarks>\n            If not disabled with <see cref=\"F:SharpFont.LoadFlags.NoHinting\"/>, the values represent dimensions of the hinted glyph (in\n            case hinting is applicable).\n            </remarks>\n        </member>\n        <member name=\"P:SharpFont.GlyphMetrics.Width\">\n            <summary>\n            Gets the glyph's width.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphMetrics.Height\">\n            <summary>\n            Gets the glyph's height.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphMetrics.HorizontalBearingX\">\n            <summary>\n            Gets the left side bearing for horizontal layout.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphMetrics.HorizontalBearingY\">\n            <summary>\n            Gets the top side bearing for horizontal layout.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphMetrics.HorizontalAdvance\">\n            <summary>\n            Gets the advance width for horizontal layout.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphMetrics.VerticalBearingX\">\n            <summary>\n            Gets the left side bearing for vertical layout.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphMetrics.VerticalBearingY\">\n            <summary>\n            Gets the top side bearing for vertical layout. Larger positive values mean further below the vertical glyph\n            origin.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphMetrics.VerticalAdvance\">\n            <summary>\n            Gets the advance height for vertical layout. Positive values mean the glyph has a positive advance\n            downward.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.GlyphSlot\">\n            <summary>\n            FreeType root glyph slot class structure. A glyph slot is a container where individual glyphs can be loaded, be\n            they in outline or bitmap format.\n            </summary>\n            <remarks><para>\n            If <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> is called with default flags (see <see cref=\"F:SharpFont.LoadFlags.Default\"/>)\n            the glyph image is loaded in the glyph slot in its native format (e.g., an outline glyph for TrueType and Type\n            1 formats).\n            </para><para>\n            This image can later be converted into a bitmap by calling <see cref=\"M:SharpFont.GlyphSlot.RenderGlyph(SharpFont.RenderMode)\"/>. This function finds the\n            current renderer for the native image's format, then invokes it.\n            </para><para>\n            The renderer is in charge of transforming the native image through the slot's face transformation fields, then\n            converting it into a bitmap that is returned in ‘slot->bitmap’.\n            </para><para>\n            Note that ‘slot->bitmap_left’ and ‘slot->bitmap_top’ are also used to specify the position of the bitmap\n            relative to the current pen position (e.g., coordinates (0,0) on the baseline). Of course, ‘slot->format’ is\n            also changed to <see cref=\"F:SharpFont.GlyphFormat.Bitmap\"/>.\n            </para></remarks>\n            <example>\n            <code>\n            FT_Pos  origin_x\t   = 0;\n            FT_Pos  prev_rsb_delta = 0;\n            \n            \n            for all glyphs do\n            &lt;compute kern between current and previous glyph and add it to\n            \t`origin_x'&gt;\n            \n            &lt;load glyph with `FT_Load_Glyph'&gt;\n            \n            if ( prev_rsb_delta - face-&gt;glyph-&gt;lsb_delta &gt;= 32 )\n            \torigin_x -= 64;\n            else if ( prev_rsb_delta - face->glyph-&gt;lsb_delta &lt; -32 )\n            \torigin_x += 64;\n            \n            prev_rsb_delta = face-&gt;glyph->rsb_delta;\n            \n            &lt;save glyph image, or render glyph, or ...&gt;\n            \n            origin_x += face-&gt;glyph-&gt;advance.x;\n            endfor  \n            </code>\n            </example>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Library\">\n            <summary>\n            Gets a handle to the FreeType library instance this slot belongs to.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Face\">\n            <summary>\n            Gets a handle to the parent face object.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Next\">\n            <summary>\n            Gets the next <see cref=\"T:SharpFont.GlyphSlot\"/>. In some cases (like some font tools), several glyph slots per face\n            object can be a good thing. As this is rare, the glyph slots are listed through a direct, single-linked\n            list using its ‘next’ field.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Generic\">\n            <summary>\n            Gets a typeless pointer which is unused by the FreeType library or any of its drivers. It can be used by\n            client applications to link their own data to each glyph slot object.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Metrics\">\n            <summary><para>\n            Gets the metrics of the last loaded glyph in the slot. The returned values depend on the last load flags\n            (see the <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> API function) and can be expressed either in 26.6\n            fractional pixels or font units.\n            </para><para>\n            Note that even when the glyph image is transformed, the metrics are not.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.LinearHorizontalAdvance\">\n            <summary>\n            Gets the advance width of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless\n            <see cref=\"F:SharpFont.LoadFlags.LinearDesign\"/> is set when loading the glyph. This field can be important to perform\n            correct WYSIWYG layout. Only relevant for outline glyphs.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.LinearVerticalAdvance\">\n            <summary>\n            Gets the advance height of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless\n            <see cref=\"F:SharpFont.LoadFlags.LinearDesign\"/> is set when loading the glyph. This field can be important to perform\n            correct WYSIWYG layout. Only relevant for outline glyphs.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Advance\">\n            <summary>\n            Gets the advance. This shorthand is, depending on <see cref=\"F:SharpFont.LoadFlags.IgnoreTransform\"/>, the transformed\n            advance width for the glyph (in 26.6 fractional pixel format). As specified with\n            <see cref=\"F:SharpFont.LoadFlags.VerticalLayout\"/>, it uses either the ‘horiAdvance’ or the ‘vertAdvance’ value of\n            ‘metrics’ field.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Format\">\n            <summary>\n            Gets the glyph format. This field indicates the format of the image contained in the glyph slot. Typically\n            <see cref=\"F:SharpFont.GlyphFormat.Bitmap\"/>, <see cref=\"F:SharpFont.GlyphFormat.Outline\"/>, or\n            <see cref=\"F:SharpFont.GlyphFormat.Composite\"/>, but others are possible.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Bitmap\">\n            <summary>\n            Gets the bitmap. This field is used as a bitmap descriptor when the slot format is\n            <see cref=\"F:SharpFont.GlyphFormat.Bitmap\"/>. Note that the address and content of the bitmap buffer can change between\n            calls of <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> and a few other functions.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.BitmapLeft\">\n            <summary>\n            Gets the bitmap's left bearing expressed in integer pixels. Of course, this is only valid if the format is\n            <see cref=\"F:SharpFont.GlyphFormat.Bitmap\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.BitmapTop\">\n            <summary>\n            Gets the bitmap's top bearing expressed in integer pixels. Remember that this is the distance from the\n            baseline to the top-most glyph scanline, upwards y coordinates being positive.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Outline\">\n            <summary>\n            Gets the outline descriptor for the current glyph image if its format is <see cref=\"F:SharpFont.GlyphFormat.Outline\"/>.\n            Once a glyph is loaded, ‘outline’ can be transformed, distorted, embolded, etc. However, it must not be\n            freed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.SubglyphsCount\">\n            <summary>\n            Gets the number of subglyphs in a composite glyph. This field is only valid for the composite glyph format\n            that should normally only be loaded with the <see cref=\"F:SharpFont.LoadFlags.NoRecurse\"/> flag. For now this is\n            internal to FreeType.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Subglyphs\">\n            <summary>\n            Gets an array of subglyph descriptors for composite glyphs. There are ‘num_subglyphs’ elements in there.\n            Currently internal to FreeType.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.ControlData\">\n            <summary>\n            Gets the control data. Certain font drivers can also return the control data for a given glyph image (e.g.\n            TrueType bytecode, Type 1 charstrings, etc.). This field is a pointer to such data.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.ControlLength\">\n            <summary>\n            Gets the length in bytes of the control data.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.DeltaLsb\">\n            <summary>\n            Gets the difference between hinted and unhinted left side bearing while autohinting is active. Zero\n            otherwise.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.DeltaRsb\">\n            <summary>\n            Gets the difference between hinted and unhinted right side bearing while autohinting is active. Zero\n            otherwise.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.GlyphSlot.Other\">\n            <summary>\n            Gets other data. Really wicked formats can use this pointer to present their own glyph image to client\n            applications. Note that the application needs to know about the image format.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.GlyphSlot.RenderGlyph(SharpFont.RenderMode)\">\n            <summary>\n            Convert a given glyph image to a bitmap. It does so by inspecting the glyph image format, finding the\n            relevant renderer, and invoking it.\n            </summary>\n            <param name=\"mode\">This is the render mode used to render the glyph image into a bitmap.</param>\n        </member>\n        <member name=\"M:SharpFont.GlyphSlot.GetSubGlyphInfo(System.UInt32,System.Int32@,SharpFont.SubGlyphFlags@,System.Int32@,System.Int32@,SharpFont.FTMatrix@)\">\n            <summary>\n            Retrieve a description of a given subglyph. Only use it if <see cref=\"P:SharpFont.GlyphSlot.Format\"/> is\n            <see cref=\"F:SharpFont.GlyphFormat.Composite\"/>; an error is returned otherwise.\n            </summary>\n            <remarks>\n            The values of ‘*p_arg1’, ‘*p_arg2’, and ‘*p_transform’ must be interpreted depending on the flags returned\n            in ‘*p_flags’. See the TrueType specification for details.\n            </remarks>\n            <param name=\"subIndex\">\n            The index of the subglyph. Must be less than <see cref=\"P:SharpFont.GlyphSlot.SubglyphsCount\"/>.\n            </param>\n            <param name=\"index\">The glyph index of the subglyph.</param>\n            <param name=\"flags\">The subglyph flags, see <see cref=\"T:SharpFont.SubGlyphFlags\"/>.</param>\n            <param name=\"arg1\">The subglyph's first argument (if any).</param>\n            <param name=\"arg2\">The subglyph's second argument (if any).</param>\n            <param name=\"transform\">The subglyph transformation (if any).</param>\n        </member>\n        <member name=\"M:SharpFont.GlyphSlot.GetGlyph\">\n            <summary>\n            A function used to extract a glyph image from a slot. Note that the created <see cref=\"T:SharpFont.Glyph\"/> object must\n            be released with <see cref=\"M:SharpFont.Glyph.Dispose\"/>.\n            </summary>\n            <returns>A handle to the glyph object.</returns>\n        </member>\n        <member name=\"M:SharpFont.GlyphSlot.OwnBitmap\">\n            <summary>\n            Make sure that a glyph slot owns ‘slot->bitmap’.\n            </summary>\n            <remarks>\n            This function is to be used in combination with <see cref=\"M:SharpFont.FTBitmap.Embolden(SharpFont.Library,System.Int32,System.Int32)\"/>.\n            </remarks>\n        </member>\n        <member name=\"T:SharpFont.KerningMode\">\n            <summary>\n            An enumeration used to specify which kerning values to return in <see cref=\"M:SharpFont.Face.GetKerning(System.UInt32,System.UInt32,SharpFont.KerningMode)\"/>.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.KerningMode.Default\">\n            <summary>\n            Return scaled and grid-fitted kerning distances.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.KerningMode.Unfitted\">\n            <summary>\n            Return scaled but un-grid-fitted kerning distances.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.KerningMode.Unscaled\">\n            <summary>\n            Return the kerning vector in original font units.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Library\">\n            <summary><para>\n            A handle to a FreeType library instance. Each ‘library’ is completely independent from the others; it is the\n            ‘root’ of a set of objects like fonts, faces, sizes, etc.\n            </para><para>\n            It also embeds a memory manager (see <see cref=\"T:SharpFont.Memory\"/>), as well as a scan-line converter object (see\n            <see cref=\"T:SharpFont.Raster\"/>).\n            </para><para>\n            For multi-threading applications each thread should have its own <see cref=\"T:SharpFont.Library\"/> object.\n            </para></summary>\n        </member>\n        <member name=\"M:SharpFont.Library.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Library\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Library.#ctor(SharpFont.Memory)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Library\"/> class.\n            </summary>\n            <param name=\"memory\">A custom FreeType memory manager.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:SharpFont.Library\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Library.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the object has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Library.Version\">\n            <summary>\n            Gets the version of the FreeType library being used.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Library.NewFace(System.String,System.Int32)\">\n            <summary>\n            This function calls <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/> to open a font by its pathname.\n            </summary>\n            <param name=\"path\">A path to the font file.</param>\n            <param name=\"faceIndex\">The index of the face within the font. The first face has index 0.</param>\n            <returns>\n            A handle to a new face object. If ‘faceIndex’ is greater than or equal to zero, it must be non-NULL.\n            </returns>\n            <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>\n        </member>\n        <member name=\"M:SharpFont.Library.NewMemoryFace(System.Byte[],System.Int32)\">\n            <summary>\n            This function calls <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/> to open a font which has been loaded into memory.\n            </summary>\n            <remarks>\n            You must not deallocate the memory before calling <see cref=\"M:SharpFont.Face.Dispose\"/>.\n            </remarks>\n            <param name=\"file\">A pointer to the beginning of the font data.</param>\n            <param name=\"faceIndex\">The index of the face within the font. The first face has index 0.</param>\n            <returns>\n            A handle to a new face object. If ‘faceIndex’ is greater than or equal to zero, it must be non-NULL.\n            </returns>\n            <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>\n        </member>\n        <member name=\"M:SharpFont.Library.NewMemoryFace(System.IntPtr,System.Int32,System.Int32)\">\n            <summary>\n            This function calls <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/> to open a font which has been loaded into memory.\n            </summary>\n            <param name=\"bufferPtr\">A pointer to the beginning of the font data.</param>\n            <param name=\"length\">Length of the buffer</param>\n            <param name=\"faceIndex\">The index of the face within the font. The first face has index 0.</param>\n            <returns>\n            A handle to a new face object. If ‘faceIndex’ is greater than or equal to zero, it must be non-NULL.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\">\n            <summary>\n            Create a <see cref=\"T:SharpFont.Face\"/> object from a given resource described by <see cref=\"T:SharpFont.OpenArgs\"/>.\n            </summary>\n            <remarks><para>\n            Unlike FreeType 1.x, this function automatically creates a glyph slot for the face object which can be\n            accessed directly through <see cref=\"P:SharpFont.Face.Glyph\"/>.\n            </para><para>\n            OpenFace can be used to quickly check whether the font format of a given font resource is supported by\n            FreeType. If the ‘faceIndex’ field is negative, the function's return value is 0 if the font format is\n            recognized, or non-zero otherwise; the function returns a more or less empty face handle in ‘*aface’ (if\n            ‘aface’ isn't NULL). The only useful field in this special case is <see cref=\"P:SharpFont.Face.FaceCount\"/> which gives\n            the number of faces within the font file. After examination, the returned <see cref=\"T:SharpFont.Face\"/> structure\n            should be deallocated with a call to <see cref=\"M:SharpFont.Face.Dispose\"/>.\n            </para><para>\n            Each new face object created with this function also owns a default <see cref=\"T:SharpFont.FTSize\"/> object, accessible\n            as <see cref=\"P:SharpFont.Face.Size\"/>.\n            </para><para>\n            See the discussion of reference counters in the description of FT_Reference_Face.\n            </para></remarks>\n            <param name=\"args\">\n            A pointer to an <see cref=\"T:SharpFont.OpenArgs\"/> structure which must be filled by the caller.\n            </param>\n            <param name=\"faceIndex\">The index of the face within the font. The first face has index 0.</param>\n            <returns>\n            A handle to a new face object. If ‘faceIndex’ is greater than or equal to zero, it must be non-NULL.\n            </returns>\n        </member>\n        <member name=\"M:SharpFont.Library.NewFaceFromFond(System.IntPtr,System.Int32)\">\n            <summary>\n            Create a new face object from a FOND resource.\n            </summary>\n            <remarks>\n            This function can be used to create <see cref=\"T:SharpFont.Face\"/> objects from fonts that are installed in the system\n            as follows.\n            <code>\n            fond = GetResource( 'FOND', fontName );\n            error = FT_New_Face_From_FOND( library, fond, 0, &amp;face );\n            </code>\n            </remarks>\n            <param name=\"fond\">A FOND resource.</param>\n            <param name=\"faceIndex\">Only supported for the -1 ‘sanity check’ special case.</param>\n            <returns>A handle to a new face object.</returns>\n        </member>\n        <member name=\"M:SharpFont.Library.NewFaceFromFSSpec(System.IntPtr,System.Int32)\">\n            <summary>\n            Create a new face object from a given resource and typeface index using an FSSpec to the font file.\n            </summary>\n            <remarks>\n            <see cref=\"M:SharpFont.Library.NewFaceFromFSSpec(System.IntPtr,System.Int32)\"/> is identical to <see cref=\"M:SharpFont.Library.NewFace(System.String,System.Int32)\"/> except it accepts an FSSpec instead\n            of a path.\n            </remarks>\n            <param name=\"spec\">FSSpec to the font file.</param>\n            <param name=\"faceIndex\">The index of the face within the resource. The first face has index 0.</param>\n            <returns>A handle to a new face object.</returns>\n        </member>\n        <member name=\"M:SharpFont.Library.NewFaceFromFSRef(System.IntPtr,System.Int32)\">\n            <summary>\n            Create a new face object from a given resource and typeface index using an FSRef to the font file.\n            </summary>\n            <remarks>\n            <see cref=\"M:SharpFont.Library.NewFaceFromFSRef(System.IntPtr,System.Int32)\"/> is identical to <see cref=\"M:SharpFont.Library.NewFace(System.String,System.Int32)\"/> except it accepts an FSRef instead of\n            a path.\n            </remarks>\n            <param name=\"ref\">FSRef to the font file.</param>\n            <param name=\"faceIndex\">The index of the face within the resource. The first face has index 0.</param>\n            <returns>A handle to a new face object.</returns>\n        </member>\n        <member name=\"M:SharpFont.Library.AddModule(SharpFont.ModuleClass)\">\n            <summary>\n            Add a new module to a given library instance.\n            </summary>\n            <remarks>\n            An error will be returned if a module already exists by that name, or if the module requires a version of\n            FreeType that is too great.\n            </remarks>\n            <param name=\"clazz\">A pointer to class descriptor for the module.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.GetModule(System.String)\">\n            <summary>\n            Find a module by its name.\n            </summary>\n            <remarks>\n            FreeType's internal modules aren't documented very well, and you should look up the source code for\n            details.\n            </remarks>\n            <param name=\"moduleName\">The module's name (as an ASCII string).</param>\n            <returns>A module handle. 0 if none was found.</returns>\n        </member>\n        <member name=\"M:SharpFont.Library.RemoveModule(SharpFont.Module)\">\n            <summary>\n            Remove a given module from a library instance.\n            </summary>\n            <remarks>\n            The module object is destroyed by the function in case of success.\n            </remarks>\n            <param name=\"module\">A handle to a module object.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.PropertySet(System.String,System.String,System.IntPtr)\">\n            <summary>\n            Set a property for a given module.\n            </summary>\n            <param name=\"moduleName\">The module name.</param>\n            <param name=\"propertyName\"><para>The property name. Properties are described in the ‘Synopsis’ subsection\n            of the module's documentation.\n            </para><para>\n            Note that only a few modules have properties.</para></param>\n            <param name=\"value\">A generic pointer to a variable or structure which gives the new value of the property.\n            The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's\n            documentation.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.PropertySet``1(System.String,System.String,``0)\">\n            <summary>\n            Set a property for a given module.\n            </summary>\n            <typeparam name=\"T\">The type of property to set.</typeparam>\n            <param name=\"moduleName\">The module name.</param>\n            <param name=\"propertyName\"><para>The property name. Properties are described in the ‘Synopsis’ subsection\n            of the module's documentation.\n            </para><para>\n            Note that only a few modules have properties.</para></param>\n            <param name=\"value\">A generic pointer to a variable or structure which gives the new value of the property.\n            The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's\n            documentation.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.PropertySet(System.String,System.String,SharpFont.GlyphToScriptMapProperty)\">\n            <summary>\n            Set a property for a given module.\n            </summary>\n            <param name=\"moduleName\">The module name.</param>\n            <param name=\"propertyName\"><para>The property name. Properties are described in the ‘Synopsis’ subsection\n            of the module's documentation.\n            </para><para>\n            Note that only a few modules have properties.</para></param>\n            <param name=\"value\">A generic pointer to a variable or structure which gives the new value of the property.\n            The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's\n            documentation.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.PropertySet(System.String,System.String,SharpFont.IncreaseXHeightProperty)\">\n            <summary>\n            Set a property for a given module.\n            </summary>\n            <param name=\"moduleName\">The module name.</param>\n            <param name=\"propertyName\"><para>The property name. Properties are described in the ‘Synopsis’ subsection\n            of the module's documentation.\n            </para><para>\n            Note that only a few modules have properties.</para></param>\n            <param name=\"value\">A generic pointer to a variable or structure which gives the new value of the property.\n            The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's\n            documentation.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.PropertyGet(System.String,System.String,System.IntPtr@)\">\n            <summary>\n            Get a module's property value.\n            </summary>\n            <param name=\"moduleName\">The module name.</param>\n            <param name=\"propertyName\">The property name. Properties are described in the ‘Synopsis’ subsection of the\n            module's documentation.</param>\n            <param name=\"value\">A generic pointer to a variable or structure which gives the value of the property. The\n            exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's\n            documentation.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.PropertyGet``1(System.String,System.String,``0@)\">\n            <summary>\n            Get a module's property value.\n            </summary>\n            <typeparam name=\"T\">The type of property to get.</typeparam>\n            <param name=\"moduleName\">The module name.</param>\n            <param name=\"propertyName\">The property name. Properties are described in the ‘Synopsis’ subsection of the\n            module's documentation.</param>\n            <param name=\"value\">A generic pointer to a variable or structure which gives the value of the property. The\n            exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's\n            documentation.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.PropertyGet(System.String,System.String,SharpFont.GlyphToScriptMapProperty@)\">\n            <summary>\n            Get a module's property value.\n            </summary>\n            <param name=\"moduleName\">The module name.</param>\n            <param name=\"propertyName\">The property name. Properties are described in the ‘Synopsis’ subsection of the\n            module's documentation.</param>\n            <param name=\"value\">A generic pointer to a variable or structure which gives the value of the property. The\n            exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's\n            documentation.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.PropertyGet(System.String,System.String,SharpFont.IncreaseXHeightProperty@)\">\n            <summary>\n            Get a module's property value.\n            </summary>\n            <param name=\"moduleName\">The module name.</param>\n            <param name=\"propertyName\">The property name. Properties are described in the ‘Synopsis’ subsection of the\n            module's documentation.</param>\n            <param name=\"value\">A generic pointer to a variable or structure which gives the value of the property. The\n            exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's\n            documentation.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.SetDebugHook(System.UInt32,System.IntPtr)\">\n            <summary>\n            Set a debug hook function for debugging the interpreter of a font format.\n            </summary>\n            <remarks><para>\n            Currently, four debug hook slots are available, but only two (for the TrueType and the Type 1 interpreter)\n            are defined.\n            </para><para>\n            Since the internal headers of FreeType are no longer installed, the symbol ‘FT_DEBUG_HOOK_TRUETYPE’ isn't\n            available publicly. This is a bug and will be fixed in a forthcoming release.\n            </para></remarks>\n            <param name=\"hookIndex\">The index of the debug hook. You should use the values defined in ‘ftobjs.h’, e.g.,\n            ‘FT_DEBUG_HOOK_TRUETYPE’.</param>\n            <param name=\"debugHook\">The function used to debug the interpreter.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.AddDefaultModules\">\n            <summary>\n            Add the set of default drivers to a given library object. This is only useful when you create a library\n            object with <see cref=\"M:SharpFont.Library.#ctor(SharpFont.Memory)\"/> (usually to plug a custom memory manager).\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Library.GetRenderer(SharpFont.GlyphFormat)\">\n            <summary>\n            Retrieve the current renderer for a given glyph format.\n            </summary>\n            <remarks><para>\n            An error will be returned if a module already exists by that name, or if the module requires a version of\n            FreeType that is too great.\n            </para><para>\n            To add a new renderer, simply use <see cref=\"M:SharpFont.Library.AddModule(SharpFont.ModuleClass)\"/>. To retrieve a renderer by its name, use\n            <see cref=\"M:SharpFont.Library.GetModule(System.String)\"/>.\n            </para></remarks>\n            <param name=\"format\">The glyph format.</param>\n            <returns>A renderer handle. 0 if none found.</returns>\n        </member>\n        <member name=\"M:SharpFont.Library.SetRenderer(SharpFont.Renderer,System.UInt32,SharpFont.Parameter[])\">\n            <summary>\n            Set the current renderer to use, and set additional mode.\n            </summary>\n            <remarks><para>\n            In case of success, the renderer will be used to convert glyph images in the renderer's known format into\n            bitmaps.\n            </para><para>\n            This doesn't change the current renderer for other formats.\n            </para><para>\n            Currently, only the B/W renderer, if compiled with FT_RASTER_OPTION_ANTI_ALIASING (providing a 5-levels\n            anti-aliasing mode; this option must be set directly in ‘ftraster.c’ and is undefined by default) accepts a\n            single tag ‘pal5’ to set its gray palette as a character string with 5 elements. Consequently, the third\n            and fourth argument are zero normally.\n            </para></remarks>\n            <param name=\"renderer\">A handle to the renderer object.</param>\n            <param name=\"numParams\">The number of additional parameters.</param>\n            <param name=\"parameters\">Additional parameters.</param>\n        </member>\n        <member name=\"M:SharpFont.Library.SetLcdFilter(SharpFont.LcdFilter)\">\n            <summary>\n            This function is used to apply color filtering to LCD decimated bitmaps, like the ones used when calling\n            <see cref=\"M:SharpFont.GlyphSlot.RenderGlyph(SharpFont.RenderMode)\"/> with <see cref=\"F:SharpFont.RenderMode.Lcd\"/> or\n            <see cref=\"F:SharpFont.RenderMode.VerticalLcd\"/>.\n            </summary>\n            <remarks><para>\n            This feature is always disabled by default. Clients must make an explicit call to this function with a\n            ‘filter’ value other than <see cref=\"F:SharpFont.LcdFilter.None\"/> in order to enable it.\n            </para><para>\n            Due to <b>PATENTS</b> covering subpixel rendering, this function doesn't do anything except returning\n            <see cref=\"F:SharpFont.Error.UnimplementedFeature\"/> if the configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is\n            not defined in your build of the library, which should correspond to all default builds of FreeType.\n            </para><para>\n            The filter affects glyph bitmaps rendered through <see cref=\"M:SharpFont.GlyphSlot.RenderGlyph(SharpFont.RenderMode)\"/>,\n            <see cref=\"M:SharpFont.Outline.GetBitmap(SharpFont.FTBitmap)\"/>, <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>, and <see cref=\"M:SharpFont.Face.LoadChar(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>.\n            </para><para>\n            It does not affect the output of <see cref=\"M:SharpFont.Outline.Render(SharpFont.RasterParams)\"/> and\n            <see cref=\"M:SharpFont.Outline.GetBitmap(SharpFont.FTBitmap)\"/>.\n            </para><para>\n            If this feature is activated, the dimensions of LCD glyph bitmaps are either larger or taller than the\n            dimensions of the corresponding outline with regards to the pixel grid. For example, for\n            <see cref=\"F:SharpFont.RenderMode.Lcd\"/>, the filter adds up to 3 pixels to the left, and up to 3 pixels to the right.\n            </para><para>\n            The bitmap offset values are adjusted correctly, so clients shouldn't need to modify their layout and glyph\n            positioning code when enabling the filter.\n            </para></remarks>\n            <param name=\"filter\"><para>\n            The filter type.\n            </para><para>\n            You can use <see cref=\"F:SharpFont.LcdFilter.None\"/> here to disable this feature, or <see cref=\"F:SharpFont.LcdFilter.Default\"/>\n            to use a default filter that should work well on most LCD screens.\n            </para></param>\n        </member>\n        <member name=\"M:SharpFont.Library.SetLcdFilterWeights(System.Byte[])\">\n            <summary>\n            Use this function to override the filter weights selected by <see cref=\"M:SharpFont.Library.SetLcdFilter(SharpFont.LcdFilter)\"/>. By default,\n            FreeType uses the quintuple (0x00, 0x55, 0x56, 0x55, 0x00) for <see cref=\"F:SharpFont.LcdFilter.Light\"/>, and (0x10,\n            0x40, 0x70, 0x40, 0x10) for <see cref=\"F:SharpFont.LcdFilter.Default\"/> and <see cref=\"F:SharpFont.LcdFilter.Legacy\"/>.\n            </summary>\n            <remarks><para>\n            Due to <b>PATENTS</b> covering subpixel rendering, this function doesn't do anything except returning\n            <see cref=\"F:SharpFont.Error.UnimplementedFeature\"/> if the configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is\n            not defined in your build of the library, which should correspond to all default builds of FreeType.\n            </para><para>\n            This function must be called after <see cref=\"M:SharpFont.Library.SetLcdFilter(SharpFont.LcdFilter)\"/> to have any effect.\n            </para></remarks>\n            <param name=\"weights\">\n            A pointer to an array; the function copies the first five bytes and uses them to specify the filter\n            weights.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Library.GetTrueTypeEngineType\">\n            <summary>\n            Return an <see cref=\"T:SharpFont.TrueType.EngineType\"/> value to indicate which level of the TrueType virtual machine a given\n            library instance supports.\n            </summary>\n            <returns>A value indicating which level is supported.</returns>\n        </member>\n        <member name=\"M:SharpFont.Library.Dispose\">\n            <summary>\n            Disposes the Library.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.LoadFlags\">\n            <summary>\n            A list of bit-field constants used with <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> to indicate what kind of operations to\n            perform during glyph loading.\n            </summary>\n            <remarks><para>\n            By default, hinting is enabled and the font's native hinter (see <see cref=\"F:SharpFont.FaceFlags.Hinter\"/>) is preferred\n            over the auto-hinter. You can disable hinting by setting <see cref=\"F:SharpFont.LoadFlags.NoHinting\"/> or change the\n            precedence by setting <see cref=\"F:SharpFont.LoadFlags.ForceAutohint\"/>. You can also set\n            <see cref=\"F:SharpFont.LoadFlags.NoAutohint\"/> in case you don't want the auto-hinter to be used at all.\n            </para><para>\n            See the description of <see cref=\"F:SharpFont.FaceFlags.Tricky\"/> for a special exception (affecting only a handful of\n            Asian fonts).\n            </para><para>\n            Besides deciding which hinter to use, you can also decide which hinting algorithm to use. See\n            <see cref=\"T:SharpFont.LoadTarget\"/> for details.\n            </para></remarks>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.Default\">\n            <summary>\n            Corresponding to 0, this value is used as the default glyph load operation. In this case, the following\n            happens:\n            <list type=\"number\">\n            <item><description>\n            FreeType looks for a bitmap for the glyph corresponding to the face's current size. If one is found, the\n            function returns. The bitmap data can be accessed from the glyph slot (see note below).\n            </description></item>\n            <item><description>\n            If no embedded bitmap is searched or found, FreeType looks for a scalable outline. If one is found, it is\n            loaded from the font file, scaled to device pixels, then ‘hinted’ to the pixel grid in order to optimize\n            it. The outline data can be accessed from the glyph slot (see note below).\n            </description></item>\n            </list>\n            Note that by default, the glyph loader doesn't render outlines into bitmaps. The following flags are used\n            to modify this default behaviour to more specific and useful cases.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.NoScale\">\n            <summary><para>\n            Don't scale the outline glyph loaded, but keep it in font units.\n            </para><para>\n            This flag implies <see cref=\"F:SharpFont.LoadFlags.NoHinting\"/> and <see cref=\"F:SharpFont.LoadFlags.NoBitmap\"/>, and unsets\n            <see cref=\"F:SharpFont.LoadFlags.Render\"/>.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.NoHinting\">\n            <summary><para>\n            Disable hinting. This generally generates ‘blurrier’ bitmap glyph when the glyph is rendered in any of the\n            anti-aliased modes. See also the note below.\n            </para><para>\n            This flag is implied by <see cref=\"F:SharpFont.LoadFlags.NoScale\"/>.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.Render\">\n            <summary><para>\n            Call <see cref=\"M:SharpFont.GlyphSlot.RenderGlyph(SharpFont.RenderMode)\"/> after the glyph is loaded. By default, the glyph is rendered in\n            <see cref=\"F:SharpFont.RenderMode.Normal\"/> mode. This can be overridden by <see cref=\"T:SharpFont.LoadTarget\"/> or\n            <see cref=\"F:SharpFont.LoadFlags.Monochrome\"/>.\n            </para><para>\n            This flag is unset by <see cref=\"F:SharpFont.LoadFlags.NoScale\"/>.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.NoBitmap\">\n            <summary><para>\n            Ignore bitmap strikes when loading. Bitmap-only fonts ignore this flag.\n            </para><para>\n            <see cref=\"F:SharpFont.LoadFlags.NoScale\"/> always sets this flag.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.VerticalLayout\">\n            <summary>\n            Load the glyph for vertical text layout. Don't use it as it is problematic currently.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.ForceAutohint\">\n            <summary>\n            Indicates that the auto-hinter is preferred over the font's native hinter. See also the note below.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.CropBitmap\">\n            <summary>\n            Indicates that the font driver should crop the loaded bitmap glyph (i.e., remove all space around its black\n            bits). Not all drivers implement this.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.Pedantic\">\n            <summary>\n            Indicates that the font driver should perform pedantic verifications during glyph loading. This is mostly\n            used to detect broken glyphs in fonts. By default, FreeType tries to handle broken fonts also.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.IgnoreGlobalAdvanceWidth\">\n            <summary>\n            Ignored. Deprecated.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.NoRecurse\">\n            <summary><para>\n            This flag is only used internally. It merely indicates that the font driver should not load composite\n            glyphs recursively. Instead, it should set the ‘num_subglyph’ and ‘subglyphs’ values of the glyph slot\n            accordingly, and set ‘glyph->format’ to <see cref=\"F:SharpFont.GlyphFormat.Composite\"/>.\n            </para><para>\n            The description of sub-glyphs is not available to client applications for now.\n            </para><para>\n            This flag implies <see cref=\"F:SharpFont.LoadFlags.NoScale\"/> and <see cref=\"F:SharpFont.LoadFlags.IgnoreTransform\"/>.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.IgnoreTransform\">\n            <summary>\n            Indicates that the transform matrix set by <see cref=\"M:SharpFont.Face.SetTransform(SharpFont.FTMatrix,SharpFont.FTVector)\"/> should be ignored.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.Monochrome\">\n            <summary><para>\n            This flag is used with <see cref=\"F:SharpFont.LoadFlags.Render\"/> to indicate that you want to render an outline glyph\n            to a 1-bit monochrome bitmap glyph, with 8 pixels packed into each byte of the bitmap data.\n            </para><para>\n            Note that this has no effect on the hinting algorithm used. You should rather use\n            <see cref=\"F:SharpFont.LoadTarget.Mono\"/> so that the monochrome-optimized hinting algorithm is used.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.LinearDesign\">\n            <summary>\n            Indicates that the ‘linearHoriAdvance’ and ‘linearVertAdvance’ fields of <see cref=\"T:SharpFont.GlyphSlot\"/> should be\n            kept in font units. See <see cref=\"T:SharpFont.GlyphSlot\"/> for details.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.NoAutohint\">\n            <summary>\n            Disable auto-hinter. See also the note below.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.Color\">\n            <summary>\n            This flag is used to request loading of color embedded-bitmap images. The resulting color bitmaps, if\n            available, will have the <see cref=\"F:SharpFont.PixelMode.Bgra\"/> format. When the flag is not used and color bitmaps\n            are found, they will be converted to 256-level gray bitmaps transparently. Those bitmaps will be in the\n            <see cref=\"F:SharpFont.PixelMode.Gray\"/> format.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadFlags.AdvanceFlagFastOnly\">\n            <summary><para>\n            A bit-flag to be OR-ed with the ‘flags’ parameter of the <see cref=\"M:SharpFont.Face.GetAdvance(System.UInt32,SharpFont.LoadFlags)\"/> and\n            <see cref=\"M:SharpFont.Face.GetAdvances(System.UInt32,System.UInt32,SharpFont.LoadFlags)\"/> functions.\n            </para><para>\n            If set, it indicates that you want these functions to fail if the corresponding hinting mode or font driver\n            doesn't allow for very quick advance computation.\n            </para><para>\n            Typically, glyphs which are either unscaled, unhinted, bitmapped, or light-hinted can have their advance\n            width computed very quickly.\n            </para><para>\n            Normal and bytecode hinted modes, which require loading, scaling, and hinting of the glyph outline, are\n            extremely slow by comparison.\n            </para></summary>\n        </member>\n        <member name=\"T:SharpFont.LoadTarget\">\n             <summary><para>\n             A list of values that are used to select a specific hinting algorithm to use by the hinter. You should OR one\n             of these values to your ‘load_flags’ when calling <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/>.\n             </para><para>\n             Note that font's native hinters may ignore the hinting algorithm you  have specified (e.g., the TrueType\n             bytecode interpreter). You can set <see cref=\"F:SharpFont.LoadFlags.ForceAutohint\"/> to ensure that the auto-hinter is\n             used.\n             </para><para>\n             Also note that <see cref=\"F:SharpFont.LoadTarget.Light\"/> is an exception, in that it always implies\n             <see cref=\"F:SharpFont.LoadFlags.ForceAutohint\"/>.\n             </para></summary>\n             <remarks><para>\n             You should use only one of the <see cref=\"T:SharpFont.LoadTarget\"/> values in your ‘load_flags’. They can't be ORed.\n             </para><para>\n             If <see cref=\"F:SharpFont.LoadFlags.Render\"/> is also set, the glyph is rendered in the corresponding mode (i.e., the mode\n             which matches the used algorithm best) unless <see cref=\"F:SharpFont.LoadFlags.Monochrome\"/> is set.\n             </para><para>\n             You can use a hinting algorithm that doesn't correspond to the same rendering mode. As an example, it is\n             possible to use the ‘light’ hinting algorithm and have the results rendered in horizontal LCD pixel mode, with\n             code like:\n             <code>\n             FT_Load_Glyph( face, glyph_index,\n                      load_flags | FT_LOAD_TARGET_LIGHT );\n            \n             FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );\n             </code>\n             </para></remarks>\n        </member>\n        <member name=\"F:SharpFont.LoadTarget.Normal\">\n            <summary>\n            This corresponds to the default hinting algorithm, optimized for standard gray-level rendering. For\n            monochrome output, use <see cref=\"F:SharpFont.LoadTarget.Mono\"/> instead.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadTarget.Light\">\n            <summary><para>\n            A lighter hinting algorithm for non-monochrome modes. Many generated glyphs are more fuzzy but better\n            resemble its original shape. A bit like rendering on Mac OS X.\n            </para><para>\n            As a special exception, this target implies <see cref=\"F:SharpFont.LoadFlags.ForceAutohint\"/>.\n            </para></summary>\n        </member>\n        <member name=\"F:SharpFont.LoadTarget.Mono\">\n            <summary>\n            Strong hinting algorithm that should only be used for monochrome output. The result is probably unpleasant\n            if the glyph is rendered in non-monochrome modes.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadTarget.Lcd\">\n            <summary>\n            A variant of <see cref=\"F:SharpFont.LoadTarget.Normal\"/> optimized for horizontally decimated LCD displays.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.LoadTarget.VerticalLcd\">\n            <summary>\n            A variant of <see cref=\"F:SharpFont.LoadTarget.Normal\"/> optimized for vertically decimated LCD displays.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.FTMatrix\">\n            <summary>\n            A simple structure used to store a 2x2 matrix. Coefficients are in 16.16 fixed float format. The computation\n            performed is:\n            <code>\n            x' = x*xx + y*xy\n            y' = x*yx + y*yy\n            </code>\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.#ctor(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.FTMatrix\"/> struct.\n            </summary>\n            <param name=\"xx\">Matrix coefficient XX.</param>\n            <param name=\"xy\">Matrix coefficient XY.</param>\n            <param name=\"yx\">Matrix coefficient YX.</param>\n            <param name=\"yy\">Matrix coefficient YY.</param>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.#ctor(SharpFont.FTVector,SharpFont.FTVector)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.FTMatrix\"/> struct.\n            </summary>\n            <param name=\"row0\">Matrix coefficients XX, XY.</param>\n            <param name=\"row1\">Matrix coefficients YX, YY.</param>\n        </member>\n        <member name=\"P:SharpFont.FTMatrix.XX\">\n            <summary>\n            Gets or sets the matrix coefficient.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTMatrix.XY\">\n            <summary>\n            Gets or sets the matrix coefficient.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTMatrix.YX\">\n            <summary>\n            Gets or sets the matrix coefficient.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTMatrix.YY\">\n            <summary>\n            Gets or sets the matrix coefficient.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.op_Equality(SharpFont.FTMatrix,SharpFont.FTMatrix)\">\n            <summary>\n            Compares two instances of <see cref=\"T:SharpFont.FTMatrix\"/> for equality.\n            </summary>\n            <param name=\"left\">A <see cref=\"T:SharpFont.FTMatrix\"/>.</param>\n            <param name=\"right\">Another <see cref=\"T:SharpFont.FTMatrix\"/>.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.op_Inequality(SharpFont.FTMatrix,SharpFont.FTMatrix)\">\n            <summary>\n            Compares two instances of <see cref=\"T:SharpFont.FTMatrix\"/> for inequality.\n            </summary>\n            <param name=\"left\">A <see cref=\"T:SharpFont.FTMatrix\"/>.</param>\n            <param name=\"right\">Another <see cref=\"T:SharpFont.FTMatrix\"/>.</param>\n            <returns>A value indicating inequality.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.Multiply(SharpFont.FTMatrix,SharpFont.FTMatrix)\">\n            <summary>\n            Perform the matrix operation ‘b = a*b’.\n            </summary>\n            <remarks>\n            The result is undefined if either ‘a’ or ‘b’ is zero.\n            </remarks>\n            <param name=\"a\">A pointer to matrix ‘a’.</param>\n            <param name=\"b\">A pointer to matrix ‘b’.</param>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.Multiply(SharpFont.FTMatrix)\">\n            <summary>\n            Perform the matrix operation ‘b = a*b’.\n            </summary>\n            <remarks>\n            The result is undefined if either ‘a’ or ‘b’ is zero.\n            </remarks>\n            <param name=\"b\">A pointer to matrix ‘b’.</param>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.Invert\">\n            <summary>\n            Invert a 2x2 matrix. Return an error if it can't be inverted.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.Equals(SharpFont.FTMatrix)\">\n            <summary>\n            Compares this instance of <see cref=\"T:SharpFont.FTMatrix\"/> to another for equality.\n            </summary>\n            <param name=\"other\">A <see cref=\"T:SharpFont.FTMatrix\"/>.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.Equals(System.Object)\">\n            <summary>\n            Compares this instance of <see cref=\"T:SharpFont.FTMatrix\"/> to an object for equality.\n            </summary>\n            <param name=\"obj\">An object.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTMatrix.GetHashCode\">\n            <summary>\n            Gets a unique hash code for this instance.\n            </summary>\n            <returns>A hash code.</returns>\n        </member>\n        <member name=\"T:SharpFont.Module\">\n            <summary>\n            A handle to a given FreeType module object. Each module can be a font driver, a renderer, or anything else that\n            provides services to the formers.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.OpenArgs\">\n            <summary>\n            A structure used to indicate how to open a new font file or stream. A pointer to such a structure can be used\n            as a parameter for the functions <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/> and <see cref=\"M:SharpFont.Face.AttachStream(SharpFont.OpenArgs)\"/>.\n            </summary>\n            <remarks>\n            The stream type is determined by the contents of <see cref=\"P:SharpFont.OpenArgs.Flags\"/> which are tested in the following order by\n            <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>:\n            <list type=\"bullet\">\n            <item><description>\n            If the <see cref=\"F:SharpFont.OpenFlags.Memory\"/> bit is set, assume that this is a memory file of <see cref=\"P:SharpFont.OpenArgs.MemorySize\"/>\n            bytes, located at <see cref=\"P:SharpFont.OpenArgs.MemoryBase\"/>. The data are are not copied, and the client is responsible for\n            releasing and destroying them after the corresponding call to <see cref=\"M:SharpFont.Face.Dispose\"/>.\n            </description></item>\n            <item><description>\n            Otherwise, if the <see cref=\"F:SharpFont.OpenFlags.Stream\"/> bit is set, assume that a custom input stream\n            <see cref=\"P:SharpFont.OpenArgs.Stream\"/> is used.\n            </description></item>\n            <item><description>\n            Otherwise, if the <see cref=\"F:SharpFont.OpenFlags.PathName\"/> bit is set, assume that this is a normal file and use\n            <see cref=\"P:SharpFont.OpenArgs.PathName\"/> to open it.\n            </description></item>\n            <item><description>\n            If the <see cref=\"F:SharpFont.OpenFlags.Driver\"/> bit is set, <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/> only tries to open the file\n            with the driver whose handler is in <see cref=\"P:SharpFont.OpenArgs.Driver\"/>.\n            </description></item>\n            <item><description>\n            If the <see cref=\"F:SharpFont.OpenFlags.Params\"/> bit is set, the parameters given by <see cref=\"P:SharpFont.OpenArgs.ParamsCount\"/> and\n            <see cref=\"P:SharpFont.OpenArgs.Params\"/> is used. They are ignored otherwise.\n            </description></item>\n            </list>\n            Ideally, both the <see cref=\"P:SharpFont.OpenArgs.PathName\"/> and <see cref=\"P:SharpFont.OpenArgs.Params\"/> fields should be tagged as ‘const’; this is\n            missing for API backwards compatibility. In other words, applications should treat them as read-only.\n            </remarks>\n        </member>\n        <member name=\"P:SharpFont.OpenArgs.Flags\">\n            <summary>\n            Gets a set of bit flags indicating how to use the structure.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OpenArgs.MemoryBase\">\n            <summary>\n            Gets the first byte of the file in memory.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OpenArgs.MemorySize\">\n            <summary>\n            Gets the size in bytes of the file in memory.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OpenArgs.PathName\">\n            <summary>\n            Gets a pointer to an 8-bit file pathname.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OpenArgs.Stream\">\n            <summary>\n            Gets a handle to a source stream object.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OpenArgs.Driver\">\n            <summary>\n            Gets the font driver to use to open the face. If set to 0, FreeType tries to load the face with each one of\n            the drivers in its list.\n            </summary>\n            <remarks>This field is exclusively used by <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>.</remarks>\n        </member>\n        <member name=\"P:SharpFont.OpenArgs.ParamsCount\">\n            <summary>\n            Gets the number of extra parameters.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OpenArgs.Params\">\n            <summary>\n            Gets the extra parameters passed to the font driver when opening a new face.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.OpenFlags\">\n            <summary>\n            A list of bit-field constants used within the ‘flags’ field of the <see cref=\"T:SharpFont.OpenArgs\"/> structure.\n            </summary>\n            <remarks>\n            The <see cref=\"F:SharpFont.OpenFlags.Memory\"/>, <see cref=\"F:SharpFont.OpenFlags.Stream\"/>, and <see cref=\"F:SharpFont.OpenFlags.PathName\"/> flags\n            are mutually exclusive.\n            </remarks>\n        </member>\n        <member name=\"F:SharpFont.OpenFlags.Memory\">\n            <summary>This is a memory-based stream.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenFlags.Stream\">\n            <summary>Copy the stream from the ‘stream’ field.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenFlags.PathName\">\n            <summary>Create a new input stream from a C path name.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenFlags.Driver\">\n            <summary>Use the ‘driver’ field.</summary>\n        </member>\n        <member name=\"F:SharpFont.OpenFlags.Params\">\n            <summary>Use the ‘num_params’ and ‘params’ fields.</summary>\n        </member>\n        <member name=\"T:SharpFont.Outline\">\n            <summary>\n            This structure is used to describe an outline to the scan-line converter.\n            </summary>\n            <remarks>\n            The B/W rasterizer only checks bit 2 in the ‘tags’ array for the first point of each contour. The drop-out mode\n            as given with <see cref=\"F:SharpFont.OutlineFlags.IgnoreDropouts\"/>, <see cref=\"F:SharpFont.OutlineFlags.SmartDropouts\"/>, and\n            <see cref=\"F:SharpFont.OutlineFlags.IncludeStubs\"/> in ‘flags’ is then overridden.\n            </remarks>\n        </member>\n        <member name=\"M:SharpFont.Outline.#ctor(SharpFont.Library,System.UInt32,System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Outline\"/> class.\n            </summary>\n            <remarks>\n            The reason why this function takes a ‘library’ parameter is simply to use the library's memory allocator.\n            </remarks>\n            <param name=\"library\">\n            A handle to the library object from where the outline is allocated. Note however that the new outline will\n            not necessarily be freed, when destroying the library, by <see cref=\"M:SharpFont.Library.Finalize\"/>.\n            </param>\n            <param name=\"pointsCount\">The maximum number of points within the outline.</param>\n            <param name=\"contoursCount\">The maximum number of contours within the outline.</param>\n        </member>\n        <member name=\"M:SharpFont.Outline.#ctor(SharpFont.Memory,System.UInt32,System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.Outline\"/> class.\n            </summary>\n            <param name=\"memory\">A handle to the memory object from where the outline is allocated.</param>\n            <param name=\"pointsCount\">The maximum number of points within the outline.</param>\n            <param name=\"contoursCount\">The maximum number of contours within the outline.</param>\n        </member>\n        <member name=\"M:SharpFont.Outline.Finalize\">\n            <summary>\n            Finalizes an instance of the <see cref=\"T:SharpFont.Outline\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Outline.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the <see cref=\"T:SharpFont.Outline\"/> has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Outline.ContoursCount\">\n            <summary>\n            Gets the number of contours in the outline.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Outline.PointsCount\">\n            <summary>\n            Gets the number of points in the outline.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Outline.Points\">\n            <summary>\n            Gets a pointer to an array of ‘PointsCount’ <see cref=\"T:SharpFont.FTVector\"/> elements, giving the outline's point\n            coordinates.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Outline.Tags\">\n            <summary><para>\n            Gets a pointer to an array of ‘PointsCount’ chars, giving each outline point's type.\n            </para><para>\n            If bit 0 is unset, the point is ‘off’ the curve, i.e., a Bézier control point, while it is ‘on’ if set.\n            </para><para>\n            Bit 1 is meaningful for ‘off’ points only. If set, it indicates a third-order Bézier arc control point; and\n            a second-order control point if unset.\n            </para><para>\n            If bit 2 is set, bits 5-7 contain the drop-out mode (as defined in the OpenType specification; the value is\n            the same as the argument to the SCANMODE instruction).\n            </para><para>\n            Bits 3 and 4 are reserved for internal purposes.\n            </para></summary>\n        </member>\n        <member name=\"P:SharpFont.Outline.Contours\">\n            <summary>\n            Gets an array of ‘ContoursCount’ shorts, giving the end point of each contour within the outline. For\n            example, the first contour is defined by the points ‘0’ to ‘Contours[0]’, the second one is defined by the\n            points ‘Contours[0]+1’ to ‘Contours[1]’, etc.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Outline.Flags\">\n            <summary>\n            Gets a set of bit flags used to characterize the outline and give hints to the scan-converter and hinter on\n            how to convert/grid-fit it.\n            </summary>\n            <see cref=\"T:SharpFont.OutlineFlags\"/>\n        </member>\n        <member name=\"M:SharpFont.Outline.Copy(SharpFont.Outline)\">\n            <summary>\n            Copy an outline into another one. Both objects must have the same sizes (number of points &amp; number of\n            contours) when this function is called.\n            </summary>\n            <param name=\"target\">A handle to the target outline.</param>\n        </member>\n        <member name=\"M:SharpFont.Outline.Translate(System.Int32,System.Int32)\">\n            <summary>\n            Apply a simple translation to the points of an outline.\n            </summary>\n            <param name=\"offsetX\">The horizontal offset.</param>\n            <param name=\"offsetY\">The vertical offset.</param>\n        </member>\n        <member name=\"M:SharpFont.Outline.Transform(SharpFont.FTMatrix)\">\n            <summary>\n            Apply a simple 2x2 matrix to all of an outline's points. Useful for applying rotations, slanting, flipping,\n            etc.\n            </summary>\n            <remarks>\n            You can use <see cref=\"M:SharpFont.Outline.Translate(System.Int32,System.Int32)\"/> if you need to translate the outline's points.\n            </remarks>\n            <param name=\"matrix\">A pointer to the transformation matrix.</param>\n        </member>\n        <member name=\"M:SharpFont.Outline.Embolden(System.Int32)\">\n            <summary><para>\n            Embolden an outline. The new outline will be at most 4 times ‘strength’ pixels wider and higher. You may\n            think of the left and bottom borders as unchanged.\n            </para><para>\n            Negative ‘strength’ values to reduce the outline thickness are possible also.\n            </para></summary>\n            <remarks><para>\n            The used algorithm to increase or decrease the thickness of the glyph doesn't change the number of points;\n            this means that certain situations like acute angles or intersections are sometimes handled incorrectly.\n            </para><para>\n            If you need ‘better’ metrics values you should call <see cref=\"M:SharpFont.Outline.GetCBox\"/> or <see cref=\"M:SharpFont.Outline.GetBBox\"/>.\n            </para></remarks>\n            <example>\n            FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );\n            if ( face-&gt;slot-&gt;format == FT_GLYPH_FORMAT_OUTLINE )\n            \tFT_Outline_Embolden( &amp;face-&gt;slot-&gt;outline, strength );\n            </example>\n            <param name=\"strength\">How strong the glyph is emboldened. Expressed in 26.6 pixel format.</param>\n        </member>\n        <member name=\"M:SharpFont.Outline.EmboldenXY(System.Int32,System.Int32)\">\n            <summary>\n            Embolden an outline. The new outline will be ‘xstrength’ pixels wider and ‘ystrength’ pixels higher.\n            Otherwise, it is similar to <see cref=\"M:SharpFont.Outline.Embolden(System.Int32)\"/>, which uses the same strength in both directions.\n            </summary>\n            <param name=\"strengthX\">\n            How strong the glyph is emboldened in the X direction. Expressed in 26.6 pixel format.\n            </param>\n            <param name=\"strengthY\">\n            How strong the glyph is emboldened in the Y direction. Expressed in 26.6 pixel format.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Outline.Reverse\">\n            <summary>\n            Reverse the drawing direction of an outline. This is used to ensure consistent fill conventions for\n            mirrored glyphs.\n            </summary>\n            <remarks><para>\n            This function toggles the bit flag <see cref=\"F:SharpFont.OutlineFlags.ReverseFill\"/> in the outline's ‘flags’ field.\n            </para><para>\n            It shouldn't be used by a normal client application, unless it knows what it is doing.\n            </para></remarks>\n        </member>\n        <member name=\"M:SharpFont.Outline.Check\">\n            <summary>\n            Check the contents of an outline descriptor.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.Outline.GetBBox\">\n            <summary>\n            Compute the exact bounding box of an outline. This is slower than computing the control box. However, it\n            uses an advanced algorithm which returns very quickly when the two boxes coincide. Otherwise, the outline\n            Bézier arcs are traversed to extract their extrema.\n            </summary>\n            <remarks>\n            If the font is tricky and the glyph has been loaded with <see cref=\"F:SharpFont.LoadFlags.NoScale\"/>, the resulting\n            BBox is meaningless. To get reasonable values for the BBox it is necessary to load the glyph at a large\n            ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting\n            the BBox which can be eventually converted back to font units.\n            </remarks>\n            <returns>The outline's exact bounding box.</returns>\n        </member>\n        <member name=\"M:SharpFont.Outline.Decompose(SharpFont.OutlineFuncs,System.IntPtr)\">\n            <summary>\n            Walk over an outline's structure to decompose it into individual segments and Bézier arcs. This function\n            also emits ‘move to’ operations to indicate the start of new contours in the outline.\n            </summary>\n            <param name=\"funcInterface\">\n            A table of ‘emitters’, i.e., function pointers called during decomposition to indicate path operations.\n            </param>\n            <param name=\"user\">\n            A typeless pointer which is passed to each emitter during the decomposition. It can be used to store the\n            state during the decomposition.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Outline.GetCBox\">\n            <summary><para>\n            Return an outline's ‘control box’. The control box encloses all the outline's points, including Bézier\n            control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger\n            in some situations (like when rotating an outline which contains Bézier outside arcs).\n            </para><para>\n            Computing the control box is very fast, while getting the bounding box can take much more time as it needs\n            to walk over all segments and arcs in the outline. To get the latter, you can use the ‘ftbbox’ component\n            which is dedicated to this single task.\n            </para></summary>\n            <remarks>See <see cref=\"M:SharpFont.Glyph.GetCBox(SharpFont.GlyphBBoxMode)\"/> for a discussion of tricky fonts.</remarks>\n            <returns>The outline's control box.</returns>\n        </member>\n        <member name=\"M:SharpFont.Outline.GetBitmap(SharpFont.FTBitmap)\">\n            <summary>\n            Render an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap.\n            </summary>\n            <remarks><para>\n            This function does NOT CREATE the bitmap, it only renders an outline image within the one you pass to it!\n            Consequently, the various fields in ‘abitmap’ should be set accordingly.\n            </para><para>\n            It will use the raster corresponding to the default glyph format.\n            </para><para>\n            The value of the ‘num_grays’ field in ‘abitmap’ is ignored. If you select the gray-level rasterizer, and\n            you want less than 256 gray levels, you have to use <see cref=\"M:SharpFont.Outline.Render(SharpFont.RasterParams)\"/> directly.\n            </para></remarks>\n            <param name=\"bitmap\">A pointer to the target bitmap descriptor.</param>\n        </member>\n        <member name=\"M:SharpFont.Outline.GetBitmap(SharpFont.Library,SharpFont.FTBitmap)\">\n            <summary>\n            Render an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap.\n            </summary>\n            <remarks><para>\n            This function does NOT CREATE the bitmap, it only renders an outline image within the one you pass to it!\n            Consequently, the various fields in ‘abitmap’ should be set accordingly.\n            </para><para>\n            It will use the raster corresponding to the default glyph format.\n            </para><para>\n            The value of the ‘num_grays’ field in ‘abitmap’ is ignored. If you select the gray-level rasterizer, and\n            you want less than 256 gray levels, you have to use <see cref=\"M:SharpFont.Outline.Render(SharpFont.Library,SharpFont.RasterParams)\"/> directly.\n            </para></remarks>\n            <param name=\"library\">A handle to a FreeType library object.</param>\n            <param name=\"bitmap\">A pointer to the target bitmap descriptor.</param>\n        </member>\n        <member name=\"M:SharpFont.Outline.Render(SharpFont.RasterParams)\">\n            <summary>\n            Render an outline within a bitmap using the current scan-convert. This function uses an\n            <see cref=\"T:SharpFont.RasterParams\"/> structure as an argument, allowing advanced features like direct composition,\n            translucency, etc.\n            </summary>\n            <remarks><para>\n            You should know what you are doing and how <see cref=\"T:SharpFont.RasterParams\"/> works to use this function.\n            </para><para>\n            The field ‘params.source’ will be set to ‘outline’ before the scan converter is called, which means that\n            the value you give to it is actually ignored.\n            </para><para>\n            The gray-level rasterizer always uses 256 gray levels. If you want less gray levels, you have to provide\n            your own span callback. See the <see cref=\"F:SharpFont.RasterFlags.Direct\"/> value of the ‘flags’ field in the\n            <see cref=\"T:SharpFont.RasterParams\"/> structure for more details.\n            </para></remarks>\n            <param name=\"parameters\">\n            A pointer to an <see cref=\"T:SharpFont.RasterParams\"/> structure used to describe the rendering operation.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Outline.Render(SharpFont.Library,SharpFont.RasterParams)\">\n            <summary>\n            Render an outline within a bitmap using the current scan-convert. This function uses an\n            <see cref=\"T:SharpFont.RasterParams\"/> structure as an argument, allowing advanced features like direct composition,\n            translucency, etc.\n            </summary>\n            <remarks><para>\n            You should know what you are doing and how <see cref=\"T:SharpFont.RasterParams\"/> works to use this function.\n            </para><para>\n            The field ‘params.source’ will be set to ‘outline’ before the scan converter is called, which means that\n            the value you give to it is actually ignored.\n            </para><para>\n            The gray-level rasterizer always uses 256 gray levels. If you want less gray levels, you have to provide\n            your own span callback. See the <see cref=\"F:SharpFont.RasterFlags.Direct\"/> value of the ‘flags’ field in the\n            <see cref=\"T:SharpFont.RasterParams\"/> structure for more details.\n            </para></remarks>\n            <param name=\"library\">A handle to a FreeType library object.</param>\n            <param name=\"parameters\">\n            A pointer to an <see cref=\"T:SharpFont.RasterParams\"/> structure used to describe the rendering operation.\n            </param>\n        </member>\n        <member name=\"M:SharpFont.Outline.GetOrientation\">\n            <summary><para>\n            This function analyzes a glyph outline and tries to compute its fill orientation (see \n            <see cref=\"T:SharpFont.Orientation\"/>). This is done by computing the direction of each global horizontal and/or\n            vertical extrema within the outline.\n            </para><para>\n            Note that this will return <see cref=\"F:SharpFont.Orientation.TrueType\"/> for empty outlines.\n            </para></summary>\n            <returns>The orientation.</returns>\n        </member>\n        <member name=\"M:SharpFont.Outline.GetInsideBorder\">\n            <summary>\n            Retrieve the <see cref=\"T:SharpFont.StrokerBorder\"/> value corresponding to the ‘inside’ borders of a given outline.\n            </summary>\n            <returns>The border index. <see cref=\"F:SharpFont.StrokerBorder.Right\"/> for empty or invalid outlines.</returns>\n        </member>\n        <member name=\"M:SharpFont.Outline.GetOutsideBorder\">\n            <summary>\n            Retrieve the <see cref=\"T:SharpFont.StrokerBorder\"/> value corresponding to the ‘outside’ borders of a given outline.\n            </summary>\n            <returns>The border index. <see cref=\"F:SharpFont.StrokerBorder.Left\"/> for empty or invalid outlines.</returns>\n        </member>\n        <member name=\"M:SharpFont.Outline.Dispose\">\n            <summary>\n            Disposes an instance of the <see cref=\"T:SharpFont.Outline\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.OutlineFlags\">\n            <summary>\n            A list of bit-field constants use for the flags in an outline's ‘flags’ field.\n            </summary>\n            <remarks><para>\n            The flags <see cref=\"F:SharpFont.OutlineFlags.IgnoreDropouts\"/>, <see cref=\"F:SharpFont.OutlineFlags.SmartDropouts\"/>, and\n            <see cref=\"F:SharpFont.OutlineFlags.IncludeStubs\"/> are ignored by the smooth rasterizer.\n            </para><para>\n            There exists a second mechanism to pass the drop-out mode to the B/W rasterizer; see the ‘tags’ field in\n            <see cref=\"T:SharpFont.Outline\"/>.\n            </para><para>\n            Please refer to the description of the ‘SCANTYPE’ instruction in the OpenType specification (in file\n            ‘ttinst1.doc’) how simple drop-outs, smart drop-outs, and stubs are defined.\n            </para></remarks>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.None\">\n            <summary>\n            Value 0 is reserved.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.Owner\">\n            <summary>\n            If set, this flag indicates that the outline's field arrays (i.e., ‘points’, ‘flags’, and ‘contours’) are\n            ‘owned’ by the outline object, and should thus be freed when it is destroyed.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.EvenOddFill\">\n            <summary>\n            By default, outlines are filled using the non-zero winding rule. If set to 1, the outline will be filled\n            using the even-odd fill rule (only works with the smooth rasterizer).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.ReverseFill\">\n            <summary>\n            By default, outside contours of an outline are oriented in clock-wise direction, as defined in the TrueType\n            specification. This flag is set if the outline uses the opposite direction (typically for Type 1 fonts).\n            This flag is ignored by the scan converter.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.IgnoreDropouts\">\n            <summary>\n            By default, the scan converter will try to detect drop-outs in an outline and correct the glyph bitmap to\n            ensure consistent shape continuity. If set, this flag hints the scan-line converter to ignore such cases.\n            See below for more information.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.SmartDropouts\">\n            <summary>\n            Select smart dropout control. If unset, use simple dropout control. Ignored if\n            <see cref=\"F:SharpFont.OutlineFlags.IgnoreDropouts\"/> is set. See below for more information.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.IncludeStubs\">\n            <summary>\n            If set, turn pixels on for ‘stubs’, otherwise exclude them. Ignored if\n            <see cref=\"F:SharpFont.OutlineFlags.IgnoreDropouts\"/> is set. See below for more information.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.HighPrecision\">\n            <summary>\n            This flag indicates that the scan-line converter should try to convert this outline to bitmaps with the\n            highest possible quality. It is typically set for small character sizes. Note that this is only a hint that\n            might be completely ignored by a given scan-converter.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.OutlineFlags.SinglePass\">\n            <summary>\n            This flag is set to force a given scan-converter to only use a single pass over the outline to render a\n            bitmap glyph image. Normally, it is set for very large character sizes. It is only a hint that might be\n            completely ignored by a given scan-converter.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.MoveToFunc\">\n            <summary><para>\n            A function pointer type used to describe the signature of a ‘move to’ function during outline\n            walking/decomposition.\n            </para><para>\n            A ‘move to’ is emitted to start a new contour in an outline.\n            </para></summary>\n            <param name=\"to\">A pointer to the target point of the ‘move to’.</param>\n            <param name=\"user\">A typeless pointer which is passed from the caller of the decomposition function.</param>\n            <returns>Error code. 0 means success.</returns>\n        </member>\n        <member name=\"T:SharpFont.LineToFunc\">\n            <summary><para>\n            A function pointer type used to describe the signature of a ‘line to’ function during outline\n            walking/decomposition.\n            </para><para>\n            A ‘line to’ is emitted to indicate a segment in the outline.\n            </para></summary>\n            <param name=\"to\">A pointer to the target point of the ‘line to’.</param>\n            <param name=\"user\">A typeless pointer which is passed from the caller of the decomposition function.</param>\n            <returns>Error code. 0 means success.</returns>\n        </member>\n        <member name=\"T:SharpFont.ConicToFunc\">\n            <summary><para>\n            A function pointer type used to describe the signature of a ‘conic to’ function during outline walking or\n            decomposition.\n            </para><para>\n            A ‘conic to’ is emitted to indicate a second-order Bézier arc in the outline.\n            </para></summary>\n            <param name=\"control\">\n            An intermediate control point between the last position and the new target in ‘to’.\n            </param>\n            <param name=\"to\">A pointer to the target end point of the conic arc.</param>\n            <param name=\"user\">A typeless pointer which is passed from the caller of the decomposition function.</param>\n            <returns>Error code. 0 means success.</returns>\n        </member>\n        <member name=\"T:SharpFont.CubicToFunc\">\n            <summary><para>\n            A function pointer type used to describe the signature of a ‘cubic to’ function during outline walking or\n            decomposition.\n            </para><para>\n            A ‘cubic to’ is emitted to indicate a third-order Bézier arc.\n            </para></summary>\n            <param name=\"control1\">A pointer to the first Bézier control point.</param>\n            <param name=\"control2\">A pointer to the second Bézier control point.</param>\n            <param name=\"to\">A pointer to the target end point.</param>\n            <param name=\"user\">A typeless pointer which is passed from the caller of the decomposition function.</param>\n            <returns>Error code. 0 means success.</returns>\n        </member>\n        <member name=\"T:SharpFont.OutlineFuncs\">\n            <summary>\n            A structure to hold various function pointers used during outline decomposition in order to emit segments,\n            conic, and cubic Béziers.\n            </summary>\n            <remarks>\n            The point coordinates sent to the emitters are the transformed version of the original coordinates (this is\n            important for high accuracy during scan-conversion). The transformation is simple:\n            <code>\n            x' = (x &lt;&lt; shift) - delta\n            y' = (x &lt;&lt; shift) - delta\n            </code>\n            Set the values of ‘shift’ and ‘delta’ to 0 to get the original point coordinates.\n            </remarks>\n        </member>\n        <member name=\"M:SharpFont.OutlineFuncs.#ctor\">\n            <summary>\n            Initializes a new instance of the OutlineFuncs class.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.OutlineFuncs.#ctor(SharpFont.MoveToFunc,SharpFont.LineToFunc,SharpFont.ConicToFunc,SharpFont.CubicToFunc,System.Int32,System.Int32)\">\n            <summary>\n            Initializes a new instance of the OutlineFuncs class.\n            </summary>\n            <param name=\"moveTo\">The move to delegate.</param>\n            <param name=\"lineTo\">The line to delegate.</param>\n            <param name=\"conicTo\">The conic to delegate.</param>\n            <param name=\"cubicTo\">The cubic to delegate.</param>\n            <param name=\"shift\">A value to shift by.</param>\n            <param name=\"delta\">A delta to transform by.</param>\n        </member>\n        <member name=\"P:SharpFont.OutlineFuncs.MoveFunction\">\n            <summary>\n            Gets or sets the ‘move to’ emitter.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OutlineFuncs.LineFuction\">\n            <summary>\n            Gets or sets the segment emitter.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OutlineFuncs.ConicFunction\">\n            <summary>\n            Gets or sets the second-order Bézier arc emitter.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OutlineFuncs.CubicFunction\">\n            <summary>\n            Gets or sets the third-order Bézier arc emitter.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OutlineFuncs.Shift\">\n            <summary>\n            Gets or sets the shift that is applied to coordinates before they are sent to the emitter.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.OutlineFuncs.Delta\">\n            <summary>\n            Gets the delta that is applied to coordinates before they are sent to the emitter, but after the\n            shift.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Parameter\">\n            <summary>\n            A simple structure used to pass more or less generic parameters to <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>.\n            </summary>\n            <remarks>\n            The ID and function of parameters are driver-specific. See the various <see cref=\"T:SharpFont.ParamTag\"/> flags for more\n            information.\n            </remarks>\n        </member>\n        <member name=\"P:SharpFont.Parameter.Tag\">\n            <summary>\n            Gets a four-byte identification tag.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Parameter.Data\">\n            <summary>\n            Gets a pointer to the parameter data.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.ParamTag\">\n            <summary>\n            Constants used as the tag of <see cref=\"T:SharpFont.Parameter\"/> structures.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.ParamTag.IgnorePreferredFamily\">\n            <summary>\n            A constant used as the tag of <see cref=\"T:SharpFont.Parameter\"/> structures to make <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>\n            ignore preferred family subfamily names in ‘name’ table since OpenType version 1.4. For backwards\n            compatibility with legacy systems which has 4-face-per-family restriction.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.ParamTag.IgnorePreferredSubfamily\">\n            <summary>\n            A constant used as the tag of <see cref=\"T:SharpFont.Parameter\"/> structures to make <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>\n            ignore preferred subfamily names in ‘name’ table since OpenType version 1.4. For backwards compatibility\n            with legacy systems which has 4-face-per-family restriction.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.ParamTag.Incremental\">\n            <summary>\n            A constant used as the tag of <see cref=\"T:SharpFont.Parameter\"/> structures to indicate an incremental loading object\n            to be used by FreeType.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.ParamTag.UnpatentedHinting\">\n            <summary>\n            A constant used as the tag of an <see cref=\"T:SharpFont.Parameter\"/> structure to indicate that unpatented methods only\n            should be used by the TrueType bytecode interpreter for a typeface opened by\n            <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.PixelMode\">\n            <summary>\n            An enumeration type used to describe the format of pixels in a given bitmap. Note that additional formats may\n            be added in the future.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PixelMode.None\">\n            <summary>\n            Value 0 is reserved.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PixelMode.Mono\">\n            <summary>\n            A monochrome bitmap, using 1 bit per pixel. Note that pixels are stored in most-significant order (MSB),\n            which means that the left-most pixel in a byte has value 128.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PixelMode.Gray\">\n            <summary>\n            An 8-bit bitmap, generally used to represent anti-aliased glyph images. Each pixel is stored in one byte.\n            Note that the number of ‘gray’ levels is stored in the ‘num_grays’ field of the <see cref=\"T:SharpFont.FTBitmap\"/>\n            structure (it generally is 256).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PixelMode.Gray2\">\n            <summary>\n            A 2-bit per pixel bitmap, used to represent embedded anti-aliased bitmaps in font files according to the\n            OpenType specification. We haven't found a single font using this format, however.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PixelMode.Gray4\">\n            <summary>\n            A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps in font files according to the\n            OpenType specification. We haven't found a single font using this format, however.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PixelMode.Lcd\">\n            <summary>\n            An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on LCD displays; the\n            bitmap is three times wider than the original glyph image. See also <see cref=\"F:SharpFont.RenderMode.Lcd\"/>.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PixelMode.VerticalLcd\">\n            <summary>\n            An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on rotated LCD displays;\n            the bitmap is three times taller than the original glyph image. See also\n            <see cref=\"F:SharpFont.RenderMode.VerticalLcd\"/>.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.PixelMode.Bgra\">\n            <summary>\n            An image with four 8-bit channels per pixel, representing a color image (such as emoticons) with alpha\n            channel. For each pixel, the format is BGRA, which means, the blue channel comes first in memory. The color\n            channels are pre-multiplied and in the sRGB colorspace. For example, full red at half-translucent opacity\n            will be represented as ‘00,00,80,80’, not ‘00,00,FF,80’.\n            </summary>\n            <seealso cref=\"F:SharpFont.LoadFlags.Color\"/>\n        </member>\n        <member name=\"T:SharpFont.RenderMode\">\n            <summary><para>\n            An enumeration type that lists the render modes supported by FreeType 2. Each mode corresponds to a specific\n            type of scanline conversion performed on the outline.\n            </para><para>\n            For bitmap fonts and embedded bitmaps the <see cref=\"P:SharpFont.FTBitmap.PixelMode\"/> field in the <see cref=\"T:SharpFont.GlyphSlot\"/>\n            structure gives the format of the returned bitmap.\n            </para><para>\n            All modes except <see cref=\"F:SharpFont.RenderMode.Mono\"/> use 256 levels of opacity.\n            </para></summary>\n            <remarks><para>\n            The LCD-optimized glyph bitmaps produced by <see cref=\"M:SharpFont.GlyphSlot.RenderGlyph(SharpFont.RenderMode)\"/> can be filtered to reduce\n            color-fringes by using <see cref=\"M:SharpFont.Library.SetLcdFilter(SharpFont.LcdFilter)\"/> (not active in the default builds). It is up to the\n            caller to either call <see cref=\"M:SharpFont.Library.SetLcdFilter(SharpFont.LcdFilter)\"/> (if available) or do the filtering itself.\n            </para><para>\n            The selected render mode only affects vector glyphs of a font. Embedded bitmaps often have a different pixel\n            mode like <see cref=\"F:SharpFont.PixelMode.Mono\"/>. You can use <see cref=\"M:SharpFont.FTBitmap.Convert(SharpFont.Library,System.Int32)\"/> to transform them into 8-bit\n            pixmaps.\n            </para></remarks>\n        </member>\n        <member name=\"F:SharpFont.RenderMode.Normal\">\n            <summary>\n            This is the default render mode; it corresponds to 8-bit anti-aliased bitmaps.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.RenderMode.Light\">\n            <summary>\n            This is equivalent to <see cref=\"F:SharpFont.RenderMode.Normal\"/>. It is only defined as a separate value because\n            render modes are also used indirectly to define hinting algorithm selectors.\n            </summary>\n            <see cref=\"T:SharpFont.LoadTarget\"/>\n        </member>\n        <member name=\"F:SharpFont.RenderMode.Mono\">\n            <summary>\n            This mode corresponds to 1-bit bitmaps (with 2 levels of opacity).\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.RenderMode.Lcd\">\n            <summary>\n            This mode corresponds to horizontal RGB and BGR sub-pixel displays like LCD screens. It produces 8-bit\n            bitmaps that are 3 times the width of the original glyph outline in pixels, and which use the\n            <see cref=\"F:SharpFont.PixelMode.Lcd\"/> mode.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.RenderMode.VerticalLcd\">\n            <summary>\n            This mode corresponds to vertical RGB and BGR sub-pixel displays (like PDA screens, rotated LCD displays,\n            etc.). It produces 8-bit bitmaps that are 3 times the height of the original glyph outline in pixels and\n            use the <see cref=\"F:SharpFont.PixelMode.VerticalLcd\"/> mode.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.FTSize\">\n            <summary>\n            FreeType root size class structure. A size object models a face object at a given size.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTSize.#ctor(SharpFont.Face)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.FTSize\"/> class.\n            </summary>\n            <param name=\"parent\">The parent face.</param>\n        </member>\n        <member name=\"M:SharpFont.FTSize.Finalize\">\n            <summary>\n            Finalizes an instance of the FTSize class.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTSize.IsDisposed\">\n            <summary>\n            Gets a value indicating whether the object has been disposed.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTSize.Face\">\n            <summary>\n            Gets a handle to the parent face object.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTSize.Generic\">\n            <summary>\n            Gets or sets a typeless pointer, which is unused by the FreeType library or any of its drivers. It can be used by\n            client applications to link their own data to each size object.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTSize.Metrics\">\n            <summary>\n            Gets metrics for this size object. This field is read-only.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTSize.Activate\">\n            <summary><para>\n            Even though it is possible to create several size objects for a given face (see\n            <see cref=\"M:SharpFont.Face.NewSize\"/> for details), functions like <see cref=\"M:SharpFont.Face.LoadGlyph(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> or\n            <see cref=\"M:SharpFont.Face.LoadChar(System.UInt32,SharpFont.LoadFlags,SharpFont.LoadTarget)\"/> only use the one which has been activated last to determine the\n            ‘current character pixel size’.\n            </para><para>\n            This function can be used to ‘activate’ a previously created size object.\n            </para></summary>\n            <remarks>\n            If ‘face’ is the size's parent face object, this function changes the value of ‘face->size’ to the input\n            size handle.\n            </remarks>\n        </member>\n        <member name=\"M:SharpFont.FTSize.Dispose\">\n            <summary>\n            Diposes the FTSize.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.SizeMetrics\">\n            <summary>\n            The size metrics structure gives the metrics of a size object.\n            </summary>\n            <remarks><para>\n            The scaling values, if relevant, are determined first during a size changing operation. The remaining fields\n            are then set by the driver. For scalable formats, they are usually set to scaled values of the corresponding\n            fields in <see cref=\"T:SharpFont.Face\"/>.\n            </para><para>\n            Note that due to glyph hinting, these values might not be exact for certain fonts. Thus they must be treated as\n            unreliable with an error margin of at least one pixel!\n            </para><para>\n            Indeed, the only way to get the exact metrics is to render all glyphs. As this would be a definite performance\n            hit, it is up to client applications to perform such computations.\n            </para><para>\n            The <see cref=\"T:SharpFont.SizeMetrics\"/> structure is valid for bitmap fonts also.\n            </para></remarks>\n        </member>\n        <member name=\"P:SharpFont.SizeMetrics.NominalWidth\">\n            <summary>\n            Gets the width of the scaled EM square in pixels, hence the term ‘ppem’ (pixels per EM). It is also referred to\n            as ‘nominal width’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.SizeMetrics.NominalHeight\">\n            <summary>\n            Gets the height of the scaled EM square in pixels, hence the term ‘ppem’ (pixels per EM). It is also referred to\n            as ‘nominal height’.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.SizeMetrics.ScaleX\">\n            <summary>\n            Gets a 16.16 fractional scaling value used to convert horizontal metrics from font units to 26.6 fractional\n            pixels. Only relevant for scalable font formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.SizeMetrics.ScaleY\">\n            <summary>\n            Gets a 16.16 fractional scaling value used to convert vertical metrics from font units to 26.6 fractional\n            pixels. Only relevant for scalable font formats.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.SizeMetrics.Ascender\">\n            <summary>\n            Gets the ascender in 26.6 fractional pixels.\n            </summary>\n            <see cref=\"T:SharpFont.Face\"/>\n        </member>\n        <member name=\"P:SharpFont.SizeMetrics.Descender\">\n            <summary>\n            Gets the descender in 26.6 fractional pixels.\n            </summary>\n            <see cref=\"T:SharpFont.Face\"/>\n        </member>\n        <member name=\"P:SharpFont.SizeMetrics.Height\">\n            <summary>\n            Gets the height in 26.6 fractional pixels.\n            </summary>\n            <see cref=\"T:SharpFont.Face\"/>\n        </member>\n        <member name=\"P:SharpFont.SizeMetrics.MaxAdvance\">\n            <summary>\n            Gets the maximal advance width in 26.6 fractional pixels.\n            </summary>\n            <see cref=\"T:SharpFont.Face\"/>\n        </member>\n        <member name=\"T:SharpFont.SizeRequest\">\n            <summary>\n            A structure used to model a size request.\n            </summary>\n            <remarks>\n            If <see cref=\"P:SharpFont.SizeRequest.Width\"/> is zero, then the horizontal scaling value is set equal to the vertical scaling value,\n            and vice versa.\n            </remarks>\n        </member>\n        <member name=\"P:SharpFont.SizeRequest.RequestType\">\n            <summary>\n            Gets the type of request. See <see cref=\"T:SharpFont.SizeRequestType\"/>.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.SizeRequest.Width\">\n            <summary>\n            Gets or sets the desired width.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.SizeRequest.Height\">\n            <summary>\n            Gets or sets the desired height.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.SizeRequest.HorizontalResolution\">\n            <summary>\n            Gets or sets the horizontal resolution. If set to zero, <see cref=\"P:SharpFont.SizeRequest.Width\"/> is treated as a 26.6 fractional pixel\n            value.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.SizeRequest.VerticalResolution\">\n            <summary>\n            Gets or sets the horizontal resolution. If set to zero, <see cref=\"P:SharpFont.SizeRequest.Height\"/> is treated as a 26.6 fractional pixel\n            value.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.SizeRequest.op_Equality(SharpFont.SizeRequest,SharpFont.SizeRequest)\">\n            <summary>\n            Compares two <see cref=\"T:SharpFont.SizeRequest\"/>s for equality.\n            </summary>\n            <param name=\"left\">A <see cref=\"T:SharpFont.SizeRequest\"/>.</param>\n            <param name=\"right\">Another <see cref=\"T:SharpFont.SizeRequest\"/>.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.SizeRequest.op_Inequality(SharpFont.SizeRequest,SharpFont.SizeRequest)\">\n            <summary>\n            Compares two <see cref=\"T:SharpFont.SizeRequest\"/>s for inequality.\n            </summary>\n            <param name=\"left\">A <see cref=\"T:SharpFont.SizeRequest\"/>.</param>\n            <param name=\"right\">Another <see cref=\"T:SharpFont.SizeRequest\"/>.</param>\n            <returns>A value indicating inequality.</returns>\n        </member>\n        <member name=\"M:SharpFont.SizeRequest.Equals(SharpFont.SizeRequest)\">\n            <summary>\n            Compares this instance of <see cref=\"T:SharpFont.SizeRequest\"/> to another for equality.\n            </summary>\n            <param name=\"other\">A <see cref=\"T:SharpFont.SizeRequest\"/>.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.SizeRequest.Equals(System.Object)\">\n            <summary>\n            Compares this instance of <see cref=\"T:SharpFont.SizeRequest\"/> to another object for equality.\n            </summary>\n            <param name=\"obj\">An object.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.SizeRequest.GetHashCode\">\n            <summary>\n            Gets a unique hash code for this instance.\n            </summary>\n            <returns>A unique hash code.</returns>\n        </member>\n        <member name=\"T:SharpFont.SizeRequestType\">\n            <summary>\n            An enumeration type that lists the supported size request types.\n            </summary>\n            <remarks><para>\n            The above descriptions only apply to scalable formats. For bitmap formats, the behaviour is up to the driver.\n            </para><para>\n            See the note section of <see cref=\"T:SharpFont.SizeMetrics\"/> if you wonder how size\n            requesting relates to scaling values.\n            </para></remarks>\n        </member>\n        <member name=\"F:SharpFont.SizeRequestType.Normal\">\n            <summary>\n            The nominal size. The ‘units_per_EM’ field of <see cref=\"T:SharpFont.Face\"/> is used to determine both scaling values.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.SizeRequestType.RealDimensions\">\n            <summary>\n            The real dimension. The sum of the the ‘ascender’ and (minus of) the ‘descender’ fields of\n            <see cref=\"T:SharpFont.Face\"/> are used to determine both scaling values.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.SizeRequestType.BoundingBox\">\n            <summary>\n            The font bounding box. The width and height of the ‘bbox’ field of <see cref=\"T:SharpFont.Face\"/> are used to determine\n            the horizontal and vertical scaling value, respectively.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.SizeRequestType.Cell\">\n            <summary>\n            The ‘max_advance_width’ field of <see cref=\"T:SharpFont.Face\"/> is used to determine the horizontal scaling value; the\n            vertical scaling value is determined the same way as <see cref=\"F:SharpFont.SizeRequestType.RealDimensions\"/> does.\n            Finally, both scaling values are set to the smaller one. This type is useful if you want to specify the\n            font size for, say, a window of a given dimension and 80x24 cells.\n            </summary>\n        </member>\n        <member name=\"F:SharpFont.SizeRequestType.Scales\">\n            <summary>\n            Specify the scaling values directly.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.Span\">\n            <summary>\n            A structure used to model a single span of gray (or black) pixels when rendering a monochrome or anti-aliased\n            bitmap.\n            </summary>\n            <remarks><para>\n            This structure is used by the span drawing callback type named <see cref=\"T:SharpFont.RasterSpanFunc\"/> which takes the y\n            coordinate of the span as a a parameter.\n            </para><para>\n            The coverage value is always between 0 and 255. If you want less gray values, the callback function has to\n            reduce them.\n            </para></remarks>\n        </member>\n        <member name=\"P:SharpFont.Span.X\">\n            <summary>\n            Gets the span's horizontal start position.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Span.Length\">\n            <summary>\n            Gets the span's length in pixels.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.Span.Coverage\">\n            <summary>\n            Gets the span color/coverage, ranging from 0 (background) to 255 (foreground). Only used for anti-aliased\n            rendering.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.StreamIOFunc\">\n            <summary>\n            A function used to seek and read data from a given input stream.\n            </summary>\n            <remarks>\n            This function might be called to perform a seek or skip operation with a ‘count’ of 0. A non-zero return value\n            then indicates an error.\n            </remarks>\n            <param name=\"stream\">A handle to the source stream.</param>\n            <param name=\"offset\">The offset of read in stream (always from start).</param>\n            <param name=\"buffer\">The address of the read buffer.</param>\n            <param name=\"count\">The number of bytes to read from the stream.</param>\n            <returns>The number of bytes effectively read by the stream.</returns>\n        </member>\n        <member name=\"T:SharpFont.StreamCloseFunc\">\n            <summary>\n            A function used to close a given input stream.\n            </summary>\n            <param name=\"stream\">A handle to the target stream.</param>\n        </member>\n        <member name=\"T:SharpFont.FTStream\">\n            <summary>\n            A handle to an input stream.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Base\">\n            <summary>\n            Gets base. For memory-based streams, this is the address of the first stream byte in memory. This field\n            should always be set to NULL for disk-based streams.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Size\">\n            <summary>\n            Gets the stream size in bytes.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Position\">\n            <summary>\n            Gets the current position within the stream.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Descriptor\">\n            <summary>\n            Gets the descriptor. This field is a union that can hold an integer or a pointer. It is used by stream\n            implementations to store file descriptors or ‘FILE*’ pointers.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.PathName\">\n            <summary>\n            Gets the path name. This field is completely ignored by FreeType. However, it is often useful during\n            debugging to use it to store the stream's filename (where available).\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Read\">\n            <summary>\n            Gets the stream's input function.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Close\">\n            <summary>\n            Gets the stream's close function.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Memory\">\n            <summary>\n            Gets the memory manager to use to preload frames. This is set internally by FreeType and shouldn't be\n            touched by stream implementations.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Cursor\">\n            <summary>\n            Gets the cursor. This field is set and used internally by FreeType when parsing frames.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTStream.Limit\">\n            <summary>\n            Gets the limit. This field is set and used internally by FreeType when parsing frames.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTStream.OpenGzip(SharpFont.FTStream)\">\n            <summary>\n            Open a new stream to parse gzip-compressed font files. This is mainly used to support the compressed\n            ‘*.pcf.gz’ fonts that come with XFree86.\n            </summary>\n            <remarks><para>\n            The source stream must be opened before calling this function.\n            </para><para>\n            Calling the internal function ‘FT_Stream_Close’ on the new stream will not call ‘FT_Stream_Close’ on the\n            source stream. None of the stream objects will be released to the heap.\n            </para><para>\n            The stream implementation is very basic and resets the decompression process each time seeking backwards is\n            needed within the stream.\n            </para><para>\n            In certain builds of the library, gzip compression recognition is automatically handled when calling\n            <see cref=\"M:SharpFont.Library.NewFace(System.String,System.Int32)\"/> or <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>. This means that if no font driver is\n            capable of handling the raw compressed file, the library will try to open a gzipped stream from it and\n            re-open the face with it.\n            </para><para>\n            This function may return <see cref=\"F:SharpFont.Error.UnimplementedFeature\"/> if your build of FreeType was not\n            compiled with zlib support.\n            </para></remarks>\n            <param name=\"source\">The source stream.</param>\n        </member>\n        <member name=\"M:SharpFont.FTStream.OpenLzw(SharpFont.FTStream)\">\n            <summary>\n            Open a new stream to parse LZW-compressed font files. This is mainly used to support the compressed\n            ‘*.pcf.Z’ fonts that come with XFree86.\n            </summary>\n            <remarks><para>\n            The source stream must be opened before calling this function.\n            </para><para>\n            Calling the internal function ‘FT_Stream_Close’ on the new stream will not call ‘FT_Stream_Close’ on the\n            source stream. None of the stream objects will be released to the heap.\n            </para><para>\n            The stream implementation is very basic and resets the decompression process each time seeking backwards is\n            needed within the stream.\n            </para><para>\n            In certain builds of the library, LZW compression recognition is automatically handled when calling\n            <see cref=\"M:SharpFont.Library.NewFace(System.String,System.Int32)\"/> or <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>. This means that if no font driver is\n            capable of handling the raw compressed file, the library will try to open a LZW stream from it and re-open\n            the face with it.\n            </para><para>\n            This function may return <see cref=\"F:SharpFont.Error.UnimplementedFeature\"/> if your build of FreeType was not\n            compiled with LZW support.\n            </para></remarks>\n            <param name=\"source\">The source stream.</param>\n        </member>\n        <member name=\"M:SharpFont.FTStream.StreamOpenBzip2(SharpFont.FTStream)\">\n            <summary>\n            Open a new stream to parse bzip2-compressed font files. This is mainly used to support the compressed\n            ‘*.pcf.bz2’ fonts that come with XFree86.\n            </summary>\n            <remarks><para>\n            The source stream must be opened before calling this function.\n            </para><para>\n            Calling the internal function ‘FT_Stream_Close’ on the new stream will not call ‘FT_Stream_Close’ on the\n            source stream. None of the stream objects will be released to the heap.\n            </para><para>\n            The stream implementation is very basic and resets the decompression process each time seeking backwards is\n            needed within the stream.\n            </para><para>\n            In certain builds of the library, bzip2 compression recognition is automatically handled when calling\n            <see cref=\"M:SharpFont.Library.NewFace(System.String,System.Int32)\"/> or <see cref=\"M:SharpFont.Library.OpenFace(SharpFont.OpenArgs,System.Int32)\"/>. This means that if no font driver is\n            capable of handling the raw compressed file, the library will try to open a bzip2 stream from it and\n            re-open the face with it.\n            </para><para>\n            This function may return <see cref=\"F:SharpFont.Error.UnimplementedFeature\"/> if your build of FreeType was not\n            compiled with bzip2 support.\n            </para></remarks>\n            <param name=\"source\">The source stream.</param>\n        </member>\n        <member name=\"T:SharpFont.StyleFlags\">\n            <summary>\n            A list of bit-flags used to indicate the style of a given face. These are used in the ‘style_flags’ field of\n            <see cref=\"T:SharpFont.Face\"/>.\n            </summary>\n            <remarks>\n            The style information as provided by FreeType is very basic. More details are beyond the scope and should be\n            done on a higher level (for example, by analyzing various fields of the ‘OS/2’ table in SFNT based fonts).\n            </remarks>\n        </member>\n        <member name=\"F:SharpFont.StyleFlags.None\">\n            <summary>No style flags.</summary>\n        </member>\n        <member name=\"F:SharpFont.StyleFlags.Italic\">\n            <summary>Indicates that a given face style is italic or oblique.</summary>\n        </member>\n        <member name=\"F:SharpFont.StyleFlags.Bold\">\n            <summary>Indicates that a given face is bold.</summary>\n        </member>\n        <member name=\"T:SharpFont.SubGlyph\">\n            <summary>\n            The subglyph structure is an internal object used to describe subglyphs (for example, in the case of\n            composites).\n            </summary>\n            <remarks><para>\n            The subglyph implementation is not part of the high-level API, hence the forward structure declaration.\n            </para><para>\n            You can however retrieve subglyph information with <see cref=\"M:SharpFont.GlyphSlot.GetSubGlyphInfo(System.UInt32,System.Int32@,SharpFont.SubGlyphFlags@,System.Int32@,System.Int32@,SharpFont.FTMatrix@)\"/>.\n            </para></remarks>\n        </member>\n        <member name=\"T:SharpFont.SubGlyphFlags\">\n            <summary>\n            A list of constants used to describe subglyphs. Please refer to the TrueType specification for the meaning of\n            the various flags.\n            </summary>\n        </member>\n        <member name=\"T:SharpFont.FTVector\">\n            <summary>\n            A simple structure used to store a 2D vector.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTVector.#ctor(System.Int32,System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:SharpFont.FTVector\"/> struct.\n            </summary>\n            <param name=\"x\">The horizontal coordinate.</param>\n            <param name=\"y\">The vertical coordinate.</param>\n        </member>\n        <member name=\"P:SharpFont.FTVector.X\">\n            <summary>\n            Gets or sets the horizontal coordinate.\n            </summary>\n        </member>\n        <member name=\"P:SharpFont.FTVector.Y\">\n            <summary>\n            Gets or sets the vertical coordinate.\n            </summary>\n        </member>\n        <member name=\"M:SharpFont.FTVector.op_Equality(SharpFont.FTVector,SharpFont.FTVector)\">\n            <summary>\n            Compares two instances of <see cref=\"T:SharpFont.FTVector\"/> for equality.\n            </summary>\n            <param name=\"left\">A <see cref=\"T:SharpFont.FTVector\"/>.</param>\n            <param name=\"right\">Another <see cref=\"T:SharpFont.FTVector\"/>.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTVector.op_Inequality(SharpFont.FTVector,SharpFont.FTVector)\">\n            <summary>\n            Compares two instances of <see cref=\"T:SharpFont.FTVector\"/> for inequality.\n            </summary>\n            <param name=\"left\">A <see cref=\"T:SharpFont.FTVector\"/>.</param>\n            <param name=\"right\">Another <see cref=\"T:SharpFont.FTVector\"/>.</param>\n            <returns>A value indicating inequality.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTVector.Unit(System.Int32)\">\n            <summary><para>\n            Return the unit vector corresponding to a given angle. After the call, the value of ‘vec.x’ will be\n            ‘sin(angle)’, and the value of ‘vec.y’ will be ‘cos(angle)’.\n            </para><para>\n            This function is useful to retrieve both the sinus and cosinus of a given angle quickly.\n            </para></summary>\n            <param name=\"angle\">The address of angle.</param>\n            <returns>The address of target vector.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTVector.FromPolar(System.Int32,System.Int32)\">\n            <summary>\n            Compute vector coordinates from a length and angle.\n            </summary>\n            <param name=\"length\">The vector length.</param>\n            <param name=\"angle\">The vector angle.</param>\n            <returns>The address of source vector.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTVector.Transform(SharpFont.FTMatrix)\">\n            <summary>\n            Transform a single vector through a 2x2 matrix.\n            </summary>\n            <remarks>\n            The result is undefined if either ‘vector’ or ‘matrix’ is invalid.\n            </remarks>\n            <param name=\"matrix\">A pointer to the source 2x2 matrix.</param>\n        </member>\n        <member name=\"M:SharpFont.FTVector.Rotate(System.Int32)\">\n            <summary>\n            Rotate a vector by a given angle.\n            </summary>\n            <param name=\"angle\">The address of angle.</param>\n        </member>\n        <member name=\"M:SharpFont.FTVector.Length\">\n            <summary>\n            Return the length of a given vector.\n            </summary>\n            <returns>The vector length, expressed in the same units that the original vector coordinates.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTVector.Polarize(System.Int32@,System.Int32@)\">\n            <summary>\n            Compute both the length and angle of a given vector.\n            </summary>\n            <param name=\"length\">The vector length.</param>\n            <param name=\"angle\">The vector angle.</param>\n        </member>\n        <member name=\"M:SharpFont.FTVector.Equals(SharpFont.FTVector)\">\n            <summary>\n            Compares this instance of <see cref=\"T:SharpFont.FTVector\"/> to another for equality.\n            </summary>\n            <param name=\"other\">A <see cref=\"T:SharpFont.FTVector\"/>.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTVector.Equals(System.Object)\">\n            <summary>\n            Compares this instance of <see cref=\"T:SharpFont.FTVector\"/> to an object for equality.\n            </summary>\n            <param name=\"obj\">An object.</param>\n            <returns>A value indicating equality.</returns>\n        </member>\n        <member name=\"M:SharpFont.FTVector.GetHashCode\">\n            <summary>\n            Gets a unique hash code for this instance.\n            </summary>\n            <returns>A hash code.</returns>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "ThirdParty/Typography/README.md",
    "content": "https://github.com/kniEngine/kniDependencies.Typography/"
  },
  {
    "path": "ThirdParty/Typography/netstandard2.0/Typography.GlyphLayout.deps.json",
    "content": "{\n  \"runtimeTarget\": {\n    \"name\": \".NETStandard,Version=v2.0/\",\n    \"signature\": \"\"\n  },\n  \"compilationOptions\": {},\n  \"targets\": {\n    \".NETStandard,Version=v2.0\": {},\n    \".NETStandard,Version=v2.0/\": {\n      \"Typography.GlyphLayout/1.0.0\": {\n        \"dependencies\": {\n          \"NETStandard.Library\": \"2.0.3\",\n          \"Typography.OpenFont\": \"1.0.0\"\n        },\n        \"runtime\": {\n          \"Typography.GlyphLayout.dll\": {}\n        }\n      },\n      \"Microsoft.NETCore.Platforms/1.1.0\": {},\n      \"NETStandard.Library/2.0.3\": {\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.1.0\"\n        }\n      },\n      \"nkast.Xna.Framework/4.2.9001\": {\n        \"runtime\": {\n          \"lib/netstandard2.0/Xna.Framework.dll\": {\n            \"assemblyVersion\": \"4.2.9001.0\",\n            \"fileVersion\": \"4.2.9001.0\"\n          }\n        }\n      },\n      \"Typography.OpenFont/1.0.0\": {\n        \"dependencies\": {\n          \"nkast.Xna.Framework\": \"4.2.9001\"\n        },\n        \"runtime\": {\n          \"Typography.OpenFont.dll\": {\n            \"assemblyVersion\": \"1.0.0.0\",\n            \"fileVersion\": \"1.0.0.0\"\n          }\n        }\n      }\n    }\n  },\n  \"libraries\": {\n    \"Typography.GlyphLayout/1.0.0\": {\n      \"type\": \"project\",\n      \"serviceable\": false,\n      \"sha512\": \"\"\n    },\n    \"Microsoft.NETCore.Platforms/1.1.0\": {\n      \"type\": \"package\",\n      \"serviceable\": true,\n      \"sha512\": \"sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==\",\n      \"path\": \"microsoft.netcore.platforms/1.1.0\",\n      \"hashPath\": \"microsoft.netcore.platforms.1.1.0.nupkg.sha512\"\n    },\n    \"NETStandard.Library/2.0.3\": {\n      \"type\": \"package\",\n      \"serviceable\": true,\n      \"sha512\": \"sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==\",\n      \"path\": \"netstandard.library/2.0.3\",\n      \"hashPath\": \"netstandard.library.2.0.3.nupkg.sha512\"\n    },\n    \"nkast.Xna.Framework/4.2.9001\": {\n      \"type\": \"package\",\n      \"serviceable\": true,\n      \"sha512\": \"sha512-HGW9WIYZ/+uwQvCZTdPKMmLWIdcTfDZ42LbYZpRwwOkL1SJRcD3/cL2PfhUffMDwqwz1BMFfMacOmd3sfJizYQ==\",\n      \"path\": \"nkast.xna.framework/4.2.9001\",\n      \"hashPath\": \"nkast.xna.framework.4.2.9001.nupkg.sha512\"\n    },\n    \"Typography.OpenFont/1.0.0\": {\n      \"type\": \"project\",\n      \"serviceable\": false,\n      \"sha512\": \"\"\n    }\n  }\n}"
  },
  {
    "path": "ThirdParty/Typography/netstandard2.0/Typography.OpenFont.deps.json",
    "content": "{\n  \"runtimeTarget\": {\n    \"name\": \".NETStandard,Version=v2.0/\",\n    \"signature\": \"\"\n  },\n  \"compilationOptions\": {},\n  \"targets\": {\n    \".NETStandard,Version=v2.0\": {},\n    \".NETStandard,Version=v2.0/\": {\n      \"Typography.OpenFont/1.0.0\": {\n        \"dependencies\": {\n          \"NETStandard.Library\": \"2.0.3\",\n          \"nkast.Xna.Framework\": \"4.2.9001\"\n        },\n        \"runtime\": {\n          \"Typography.OpenFont.dll\": {}\n        }\n      },\n      \"Microsoft.NETCore.Platforms/1.1.0\": {},\n      \"NETStandard.Library/2.0.3\": {\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.1.0\"\n        }\n      },\n      \"nkast.Xna.Framework/4.2.9001\": {\n        \"runtime\": {\n          \"lib/netstandard2.0/Xna.Framework.dll\": {\n            \"assemblyVersion\": \"4.2.9001.0\",\n            \"fileVersion\": \"4.2.9001.0\"\n          }\n        }\n      }\n    }\n  },\n  \"libraries\": {\n    \"Typography.OpenFont/1.0.0\": {\n      \"type\": \"project\",\n      \"serviceable\": false,\n      \"sha512\": \"\"\n    },\n    \"Microsoft.NETCore.Platforms/1.1.0\": {\n      \"type\": \"package\",\n      \"serviceable\": true,\n      \"sha512\": \"sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==\",\n      \"path\": \"microsoft.netcore.platforms/1.1.0\",\n      \"hashPath\": \"microsoft.netcore.platforms.1.1.0.nupkg.sha512\"\n    },\n    \"NETStandard.Library/2.0.3\": {\n      \"type\": \"package\",\n      \"serviceable\": true,\n      \"sha512\": \"sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==\",\n      \"path\": \"netstandard.library/2.0.3\",\n      \"hashPath\": \"netstandard.library.2.0.3.nupkg.sha512\"\n    },\n    \"nkast.Xna.Framework/4.2.9001\": {\n      \"type\": \"package\",\n      \"serviceable\": true,\n      \"sha512\": \"sha512-HGW9WIYZ/+uwQvCZTdPKMmLWIdcTfDZ42LbYZpRwwOkL1SJRcD3/cL2PfhUffMDwqwz1BMFfMacOmd3sfJizYQ==\",\n      \"path\": \"nkast.xna.framework/4.2.9001\",\n      \"hashPath\": \"nkast.xna.framework.4.2.9001.nupkg.sha512\"\n    }\n  }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ActionStack.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Content.Pipeline.Editor\n{\n    internal interface IProjectAction\n    {\n        bool Do();\n        bool Undo();\n    }\n\n    internal delegate void CanUndoRedoChanged(bool canUndo, bool canRedo);\n\n    partial class PipelineController\n    {                \n        /// <summary>\n        /// Represents a stack of undo/redo-able actions.\n        /// </summary>\n        private class ActionStack\n        {\n            private readonly List<IProjectAction> _undoStack;\n            private readonly List<IProjectAction> _redoStack;\n\n            public bool CanUndo { get; private set; }\n            public bool CanRedo { get; private set; }\n            \n            public event CanUndoRedoChanged OnCanUndoRedoChanged;\n\n            public ActionStack()\n            {\n                _undoStack = new List<IProjectAction>();\n                _redoStack = new List<IProjectAction>();\n            }\n\n            public void Add(IProjectAction action)\n            {\n                _undoStack.Add(action);\n\n                if (_redoStack.Count > 0)\n                    _redoStack.Clear();\n\n                Update();\n            }\n\n            public void Undo()\n            {\n                if (!_undoStack.Any())\n                    return;\n\n                var action = _undoStack.Last();\n                if (action.Undo())\n                {\n                    _undoStack.Remove(action);\n                    _redoStack.Add(action);\n                }\n\n                Update();\n            }\n\n            public void Redo()\n            {\n                if (!_redoStack.Any())\n                    return;\n\n                var action = _redoStack.Last();\n                if (action.Do())\n                {\n                    _redoStack.Remove(action);\n                    _undoStack.Add(action);\n                }\n\n                Update();\n            }\n\n            public void Clear()\n            {\n                _undoStack.Clear();\n                _redoStack.Clear();\n\n                Update();\n            }\n\n            private void Update()\n            {\n                var canUndo = _undoStack.Any();\n                var canRedo = _redoStack.Any();\n\n                if (canUndo != CanUndo || canRedo != CanRedo)\n                {\n                    CanUndo = canUndo;\n                    CanRedo = canRedo;\n\n                    if (OnCanUndoRedoChanged != null)\n                        OnCanUndoRedoChanged(canUndo, canRedo);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/AssemblyAttributes.cs",
    "content": "﻿using System.Reflection;\nusing System;\n\nnamespace Content.Pipeline.Editor\n{\n\tpublic static class AssemblyAttributes\n\t{\n\t\tpublic static string AssemblyTitle\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tobject[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);\n\t\t\t\tif (attributes.Length > 0)\n\t\t\t\t{\n\t\t\t\t\tAssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];\n\t\t\t\t\tif (titleAttribute.Title != \"\")\n\t\t\t\t\t{\n\t\t\t\t\t\treturn titleAttribute.Title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);\n\t\t\t}\n\t\t}\n\n\t\tpublic static string AssemblyVersion\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn Assembly.GetExecutingAssembly().GetName().Version.ToString();\n\t\t\t}\n\t\t}\n\n\t\tpublic static string AssemblyDescription\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tobject[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);\n\t\t\t\tif (attributes.Length == 0)\n\t\t\t\t{\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\treturn ((AssemblyDescriptionAttribute)attributes[0]).Description;\n\t\t\t}\n\t\t}\n\n\t\tpublic static string AssemblyProduct\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tobject[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);\n\t\t\t\tif (attributes.Length == 0)\n\t\t\t\t{\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\treturn ((AssemblyProductAttribute)attributes[0]).Product;\n\t\t\t}\n\t\t}\n\n\t\tpublic static string AssemblyCopyright\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tobject[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);\n\t\t\t\tif (attributes.Length == 0)\n\t\t\t\t{\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\treturn ((AssemblyCopyrightAttribute)attributes[0]).Copyright;\n\t\t\t}\n\t\t}\n\n\t\tpublic static string AssemblyCompany\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tobject[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);\n\t\t\t\tif (attributes.Length == 0)\n\t\t\t\t{\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\treturn ((AssemblyCompanyAttribute)attributes[0]).Company;\n\t\t\t}\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/CommandLineParser.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.ComponentModel;\n\n\nnamespace Content.Pipeline.Editor\n{\n\n    /// <summary>\n    /// Adapted from this generic command line argument parser:\n    /// http://blogs.msdn.com/b/shawnhar/archive/2012/04/20/a-reusable-reflection-based-command-line-parser.aspx     \n    /// </summary>\n    public class MGBuildParser\n    {\n        #region Supporting Types\n\n        public class PreprocessorProperty\n        {\n            public string Name;            \n            public string CurrentValue;\n\n            public PreprocessorProperty()\n            {\n                Name = string.Empty;\n                CurrentValue = string.Empty;\n            }\n        }\n\n        public class PreprocessorPropertyCollection\n        {\n            private readonly List<PreprocessorProperty> _properties;\n\n            public PreprocessorPropertyCollection()\n            {\n                _properties = new List<PreprocessorProperty>();\n            }\n\n            public string this[string name]\n            {\n                get\n                {\n                    foreach (var i in _properties)\n                    {\n                        if (i.Name.Equals(name))\n                            return i.CurrentValue;\n                    }\n\n                    return null;\n                }\n\n                set\n                {\n                    foreach (var i in _properties)\n                    {\n                        if (i.Name.Equals(name))\n                        {\n                            i.CurrentValue = value;\n                            return;\n                        }\n                    }\n\n                    var prop = new PreprocessorProperty()\n                        {\n                            Name = name,\n                            CurrentValue = value,\n                        };\n                    _properties.Add(prop);\n                }\n            }\n        }\n\n        #endregion\n\n        private readonly object _optionsObject;\n        private readonly Queue<MemberInfo> _requiredOptions;\n        private readonly Dictionary<string, MemberInfo> _optionalOptions;\n        private readonly List<string> _requiredUsageHelp;\n\n        public readonly PreprocessorPropertyCollection _properties;\n\n        public delegate void ErrorCallback(string msg, object[] args);\n        public event ErrorCallback OnError;\n\n        public MGBuildParser(object optionsObject)\n        {\n            _optionsObject = optionsObject;\n            _requiredOptions = new Queue<MemberInfo>();\n            _optionalOptions = new Dictionary<string, MemberInfo>();\n            _requiredUsageHelp = new List<string>();\n\n            _properties = new PreprocessorPropertyCollection();\n\n            // Reflect to find what commandline options are available...\n\n            // Fields\n            foreach (var field in optionsObject.GetType().GetFields())\n            {\n                var param = GetAttribute<CommandLineParameterAttribute>(field);\n                if (param == null)\n                    continue;\n\n                CheckReservedPrefixes(param.Name);\n\n                if (param.Required)\n                {\n                    // Record a required option.\n                    _requiredOptions.Enqueue(field);\n\n                    _requiredUsageHelp.Add(string.Format(\"<{0}>\", param.Name));\n                }\n                else\n                {\n                    // Record an optional option.\n                    _optionalOptions.Add(param.Name.ToLowerInvariant(), field);\n                }\n            }\n\n            // Properties\n            foreach (var property in optionsObject.GetType().GetProperties())\n            {\n                var param = GetAttribute<CommandLineParameterAttribute>(property);\n                if (param == null)\n                    continue;\n\n                CheckReservedPrefixes(param.Name);\n\n                if (param.Required)\n                {\n                    // Record a required option.\n                    _requiredOptions.Enqueue(property);\n\n                    _requiredUsageHelp.Add(string.Format(\"<{0}>\", param.Name));\n                }\n                else\n                {\n                    // Record an optional option.\n                    _optionalOptions.Add(param.Name.ToLowerInvariant(), property);\n                }\n            }\n\n            // Methods\n            foreach (var method in optionsObject.GetType().GetMethods())\n            {\n                var param = GetAttribute<CommandLineParameterAttribute>(method);\n                if (param == null)\n                    continue;\n\n                CheckReservedPrefixes(param.Name);\n\n                // Only accept methods that take less than 1 parameter.\n                if (method.GetParameters().Length > 1)\n                    throw new NotSupportedException(\"Methods must have one or zero parameters.\");\n\n                if (param.Required)\n                {\n                    // Record a required option.\n                    _requiredOptions.Enqueue(method);\n\n                    _requiredUsageHelp.Add(string.Format(\"<{0}>\", param.Name));\n                }\n                else\n                {\n                    // Record an optional option.\n                    _optionalOptions.Add(param.Name.ToLowerInvariant(), method);\n                }\n            }\n        }        \n\n        public bool Parse(IEnumerable<string> args)\n        {\n            args = Preprocess(args);\n\n            var showUsage = true;\n            var success = true;            \n            foreach (var arg in args)\n            {\n                showUsage = false;\n\n                if (!ParseArgument(arg))\n                {\n                    success = false;\n                    break;\n                }\n            }\n\n            var missingRequiredOption = _requiredOptions.FirstOrDefault(field => !IsList(field) || GetList(field).Count == 0);\n            if (missingRequiredOption != null)\n            {\n                ShowError(\"Missing argument '{0}'\", GetAttribute<CommandLineParameterAttribute>(missingRequiredOption).Name);\n                return false;\n            }\n\n            if (showUsage)\n                ShowError(null);\n\n            return success;\n        }\n\n        private IEnumerable<string> Preprocess(IEnumerable<string> args)\n        {\n            var output = new List<string>();\n            var lines = new List<string>(args);\n            var ifstack = new Stack<Tuple<string, string>>();\n            var fileStack = new Stack<string>();\n\n            while (lines.Count > 0)\n            {            \n                var arg = lines[0];\n                lines.RemoveAt(0);\n\n                if (arg.StartsWith(\"# Begin:\"))\n                {\n                    var file = arg.Substring(8);\n                    fileStack.Push(file);\n                    continue;\n                }\n\n                if (arg.StartsWith(\"# End:\"))\n                {\n                    fileStack.Pop();\n                    continue;\n                }\n\n                if (arg.StartsWith(\"$endif\"))\n                {\n                    ifstack.Pop();\n                    continue;\n                }\n                \n                if (ifstack.Count > 0)\n                {\n                    var skip = false;\n                    foreach (var i in ifstack)\n                    {\n                        var val = _properties[i.Item1];\n                        if (!(i.Item2).Equals(val))\n                        {\n                            skip = true;\n                            break;\n                        }\n                    }\n\n                    if (skip)\n                        continue;\n                }\n\n                if (arg.StartsWith(\"$set\"))\n                {\n                    var words = arg.Substring(5).Split('=');\n                    var name = words[0];\n                    var value = words[1];\n\n                    _properties[name] = value;\n\n                    continue;\n                }\n\n                if (arg.StartsWith(\"$if\"))\n                {\n                    if (fileStack.Count == 0)\n                        throw new Exception(\"$if is invalid outside of a response file.\");\n\n                    var words = arg.Substring(4).Split('=');\n                    var name = words[0];\n                    var value = words[1];\n\n                    var condition = new Tuple<string, string>(name, value);\n                    ifstack.Push(condition);\n                    \n                    continue;\n                }\n\n                if (arg.StartsWith(\"/@:\") || arg.StartsWith(\"-@:\"))\n                {\n                    var file = arg.Substring(3);\n                    var commands = File.ReadAllLines(file);\n                    var offset = 0;\n                    lines.Insert(0, string.Format(\"# Begin:{0} \", file));\n                    offset++;\n\n                    for (var j = 0; j < commands.Length; j++)\n                    {\n                        var line = commands[j];\n                        if (string.IsNullOrEmpty(line))\n                            continue;\n                        if (line.StartsWith(\"#\"))\n                            continue;\n\n                        lines.Insert(offset, line);\n                        offset++;\n                    }\n\n                    lines.Insert(offset, string.Format(\"# End:{0}\", file));\n\n                    continue;\n                }                \n                \n                output.Add(arg);\n            }\n\n            return output.ToArray();\n        }\n\n        private bool ParseArgument(string arg)\n        {\n            if (arg.StartsWith(\"/\") || arg.StartsWith(\"-\"))\n            {\n                // After the first escaped argument we can no\n                // longer read non-escaped arguments.\n                if (_requiredOptions.Count > 0)\n                    return false;\n\n                // Parse an optional argument.\n                char[] separators = {':'};\n\n                string[] split = arg.Substring(1).Split(separators, 2, StringSplitOptions.None);\n\n                string name = split[0];\n                string value = (split.Length > 1) ? split[1] : \"true\";\n\n                MemberInfo member;\n\n                if (!_optionalOptions.TryGetValue(name.ToLowerInvariant(), out member))\n                {\n                    ShowError(\"Unknown option '{0}'\", name);\n                    return false;\n                }\n\n                return SetOption(member, value);\n            }\n\n            if (_requiredOptions.Count > 0)\n            {\n                // Parse the next non escaped argument.\n                var field = _requiredOptions.Peek();\n\n                if (!IsList(field))\n                    _requiredOptions.Dequeue();\n\n                return SetOption(field, arg);\n            }\n\n            ShowError(\"Too many arguments\");\n            return false;\n        }\n\n\n        bool SetOption(MemberInfo member, string value)\n        {\n            try\n            {\n                if (IsList(member))\n                {\n                    // Append this value to a list of options.\n                    GetList(member).Add(ChangeType(value, ListElementType(member)));\n                }\n                else\n                {\n                    // Set the value of a single option.\n                    if (member is MethodInfo)\n                    {\n                        MethodInfo method = member as MethodInfo;\n                        ParameterInfo[] parameters = method.GetParameters();\n                        if (parameters.Length == 0)\n                            method.Invoke(_optionsObject, null);\n                        else\n                            method.Invoke(_optionsObject, new[] { ChangeType(value, parameters[0].ParameterType) });\n                    }\n                    else if (member is FieldInfo)\n                    {\n                        FieldInfo field = member as FieldInfo;\n                        field.SetValue(_optionsObject, ChangeType(value, field.FieldType));\n                    }\n                    else \n                    {\n                        PropertyInfo property = member as PropertyInfo;\n                        property.SetValue(_optionsObject, ChangeType(value, property.PropertyType), null);\n                    }\n                }\n\n                return true;\n            }\n            catch(TargetInvocationException tiex)\n            {\n                ShowError(\"Invalid value '{0}' for option '{1}'\", value, GetAttribute<CommandLineParameterAttribute>(member).Name);\n                ShowError(tiex.InnerException.Message);\n                return false;\n            }\n            catch\n            {\n                ShowError(\"Invalid value '{0}' for option '{1}'\", value, GetAttribute<CommandLineParameterAttribute>(member).Name);\n                return false;\n            }\n        }\n\n        static readonly string[] ReservedPrefixes = new[]\n            {   \n                \"$\",\n                \"/\",                \n                \"#\",\n                \"-\",\n            };\n\n        static void CheckReservedPrefixes(string str)\n        {\n            foreach (var i in ReservedPrefixes)\n            {\n                if (str.StartsWith(i))\n                    throw new Exception(string.Format(\"'{0}' is a reserved prefix and cannot be used at the start of an argument name.\", i));\n            }\n        }\n\n        static object ChangeType(string value, Type type)\n        {\n            TypeConverter converter = TypeDescriptor.GetConverter(type);\n\n            return converter.ConvertFromInvariantString(value);\n        }\n\n\n        static bool IsList(MemberInfo member)\n        {\n            if (member is MethodInfo)\n                return false;\n\n            if (member is FieldInfo)\n                return typeof(IList).IsAssignableFrom((member as FieldInfo).FieldType);\n            \n            return typeof(IList).IsAssignableFrom((member as PropertyInfo).PropertyType);\n        }\n\n\n        IList GetList(MemberInfo member)\n        {\n            if (member is PropertyInfo)\n                return (IList)(member as PropertyInfo).GetValue(_optionsObject, null);\n\n            if (member is FieldInfo)\n                return (IList)(member as FieldInfo).GetValue(_optionsObject);\n\n            throw new Exception();\n        }\n\n\n        static Type ListElementType(MemberInfo member)\n        {\n            if (member is FieldInfo)\n            {\n                var field = member as FieldInfo;\n                var interfaces = from i in field.FieldType.GetInterfaces()\n                                 where i.IsGenericType && i.GetGenericTypeDefinition() == typeof (IEnumerable<>)\n                                 select i;\n\n                return interfaces.First().GetGenericArguments()[0];\n            }\n\n            if (member is PropertyInfo)\n            {\n                var property = member as PropertyInfo;\n                var interfaces = from i in property.PropertyType.GetInterfaces()\n                                 where i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable<>)\n                                 select i;\n\n                return interfaces.First().GetGenericArguments()[0];\n            }\n\n            throw new ArgumentException(\"Only FieldInfo and PropertyInfo are valid arguments.\", \"member\");\n        }\n\n        public string Title { get; set; }\n\n        bool IsWindows(PlatformID platform)\n        {\n            switch (platform)\n            {\n                case PlatformID.Win32NT:\n                case PlatformID.Win32S:\n                case PlatformID.Win32Windows:\n                case PlatformID.WinCE:\n                    return true;\n            }\n            return false;\n        }\n\n        public void ShowError(string message, params object[] args)\n        {\n            if (!string.IsNullOrEmpty(message) && OnError != null)\n            {\n                OnError(message, args);\n                return;\n            }\n\n            var name = Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().ProcessName);\n\n            if (!string.IsNullOrEmpty(Title))\n            {\n                Console.Error.WriteLine(Title);\n                Console.Error.WriteLine();\n            }\n\n            if (!string.IsNullOrEmpty(message))\n            {\n                Console.Error.WriteLine(message, args);\n                Console.Error.WriteLine();\n            }\n\n            var defaultParamPrefix = IsWindows(Environment.OSVersion.Platform) ? \"  /\" : \"  -\";\n            Console.Error.WriteLine(\"Usage: {0} {1}{2}\", \n                name, \n                string.Join(\" \", _requiredUsageHelp), \n                _optionalOptions.Count > 0 ? \" <Options>\" : string.Empty);\n\n            if (_optionalOptions.Count > 0)\n            {\n                Console.Error.WriteLine();\n                Console.Error.WriteLine(\"Options:\\n\");\n\n                foreach (var pair in _optionalOptions)\n                {\n                    var field = pair.Value as FieldInfo;\n                    var prop = pair.Value as PropertyInfo;\n                    var method = pair.Value as MethodInfo;\n                    var param = GetAttribute<CommandLineParameterAttribute>(pair.Value);\n\n                    var hasValue = false;\n\n                    if (field != null && field.FieldType != typeof (bool))\n                        hasValue = true;\n                    if (prop != null && prop.PropertyType != typeof (bool))\n                        hasValue = true;\n                    if (method != null && method.GetParameters().Length != 0)\n                        hasValue = true;\n\n                    if (hasValue)\n                        Console.Error.WriteLine(defaultParamPrefix + \"{0}:<{1}>\\n    {2}\\n\", param.Name, param.ValueName, param.Description);\n                    else\n                        Console.Error.WriteLine(defaultParamPrefix + \"{0}\\n    {1}\\n\", param.Name, param.Description);\n                }\n            }\n        }\n\n\n        static T GetAttribute<T>(ICustomAttributeProvider provider) where T : Attribute\n        {\n            return provider.GetCustomAttributes(typeof(T), false).OfType<T>().FirstOrDefault();\n        }\n    }\n\n    // Used on an optionsObject field or method to rename the corresponding commandline option.\n    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property)]\n    public sealed class CommandLineParameterAttribute : Attribute\n    {\n        public CommandLineParameterAttribute()\n        {\n            ValueName = \"value\";\n        }\n\n        public string Name { get; set; }\n\n        public bool Required { get; set; }\n\n        public string ValueName { get; set; }\n\n        public string Description { get; set; }        \n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/CompressionMethod.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nnamespace Content.Pipeline.Editor\n{\n    public enum CompressionMethod\n    {\n        Default      = 0,\n        //ZLX        = 1,\n        LZ4          = 2,\n        Brotli       = 3,\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ContentFolder.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.ComponentModel;\nusing System.Linq;\n\nnamespace Content.Pipeline.Editor\n{\n    public class FolderItem : IProjectItem\n    {                \n        public FolderItem(string path)\n        {\n            Location = path;\n            Name = path;\n            if (Name.Contains(\"/\"))\n                Name = Name.Split('/').Last();\n        }\n\n        [Browsable(false)]\n        public string OriginalPath { get { return Location; } }\n\n        [Category(\"Common\")]\n        [Description(\"The name of this folder.\")]\n        public string Name { get; private set; }\n\n        [Category(\"Common\")]\n        [Description(\"The file path to this folder.\")]\n        public string Location { get; private set; }\n\n        [Browsable(false)]\n        public string Icon { get; set; }\n\n        [Browsable(false)]\n        public bool Exists { get; set; }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ContentItem.Importer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Content.Pipeline.Editor\n{\n    /// <summary>\n    /// Custom converter for the Processor property of a ContentItem.\n    /// </summary>\n    internal class ImporterConverter : TypeConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            if (context.Instance is Array)\n            {\n                Array array = context.Instance as Array;\n                foreach (var obj in array)\n                {\n                    ContentItem item = obj as ContentItem;\n                    if (item.BuildAction == BuildAction.Copy)\n                        return false;\n                }\n            }\n            else\n            {\n                ContentItem contentItem = context.Instance as ContentItem;\n                if (contentItem.BuildAction == BuildAction.Copy)\n                    return false;\n            }                \n                        \n            return true;\n        }\n\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return PipelineTypes.ImportersStandardValuesCollection;\n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            if (sourceType == typeof (string))\n                return true;\n\n            return base.CanConvertFrom(context, sourceType);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            if (value is string)\n            {\n                string str = value as string;\n\n                foreach (ImporterTypeDescription i in PipelineTypes.Importers)\n                {\n                    if (i.DisplayName.Equals(str))\n                        return i;\n                }\n                \n                if (string.IsNullOrEmpty(str))\n                    return PipelineTypes.NullImporter;\n                else\n                    return PipelineTypes.MissingImporter;\n            }\n\n            return base.ConvertFrom(context, culture, value);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string))\n            {\n                ImporterTypeDescription importer = (ImporterTypeDescription)value; // contentItem.Importer;\n                //System.Diagnostics.Debug.Assert(importer == value);\n\n                if (importer == PipelineTypes.MissingImporter)\n                {\n                    ContentItem contentItem = (ContentItem)context.Instance;\n                    return string.Format(\"[missing] {0}\", contentItem.ImporterName ?? \"[null]\");\n                }\n\n                return importer.DisplayName;\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n        public override bool GetPropertiesSupported(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ContentItem.Processor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Content.Pipeline.Editor\n{\n    /// <summary>\n    /// Custom converter for the Processor property of a ContentItem.\n    /// </summary>\n    internal class ProcessorConverter : TypeConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            if (context.Instance is Array)\n            {\n                Array array = context.Instance as Array;\n                foreach (var obj in array)\n                {\n                    ContentItem item = obj as ContentItem;\n                    if (item.BuildAction == BuildAction.Copy)\n                        return false;\n                }\n            }\n            else\n            {\n                ContentItem contentItem = context.Instance as ContentItem;\n                if (contentItem.BuildAction == BuildAction.Copy)\n                    return false;\n            }                \n                        \n            return true;\n        }\n\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return PipelineTypes.ProcessorsStandardValuesCollection;            \n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            if (sourceType == typeof (string))\n                return true;\n\n            return base.CanConvertFrom(context, sourceType);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            if (value is string)\n            {\n                foreach (ProcessorTypeDescription i in PipelineTypes.Processors)\n                {\n                    if (i.DisplayName.Equals(value))\n                        return i;\n                }\n            }\n\n            return base.ConvertFrom(context, culture, value);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string))\n            {\n                ProcessorTypeDescription processor = (ProcessorTypeDescription)value;\n\n                if (processor == PipelineTypes.MissingProcessor)\n                {\n                    ContentItem contentItem = context.Instance as ContentItem;\n                    return string.Format(\"[missing] {0}\", contentItem.ProcessorName);\n                }\n\n                return processor.DisplayName;\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n        public override bool GetPropertiesSupported(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ContentItem.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Globalization;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nnamespace Content.Pipeline.Editor\n{\n    public enum BuildAction\n    {\n        Build,\n        Copy,\n    }\n\n    [TypeConverter(typeof(ContentItemConverter))]\n    public class ContentItem : IProjectItem\n    {\n        public IContentItemObserver Observer;\n        \n        public string ImporterName;\n        public string ProcessorName;\n        public OpaqueDataDictionary ProcessorParams;\n\n        private ImporterTypeDescription _importer;\n        private ProcessorTypeDescription _processor;\n        private BuildAction _buildAction;\n\n        #region IProjectItem\n\n        [Browsable(false)]\n        public string OriginalPath { get; set; }\n        public string OutputFile; // This refers to the \"Link\" which can override the default output location\n\n        [Category(\"1.Common\")]\n        [Description(\"The file name of this item.\")]\n        public string Name \n        { \n            get\n            {\n                if (OutputFile != null)\n                    return System.IO.Path.GetFileName(OutputFile);\n\n                return System.IO.Path.GetFileName(OriginalPath);\n            }\n        }\n\n        [Category(\"1.Common\")]\n        [Description(\"The folder where this item is located.\")]\n        public string Location\n        {\n            get\n            {\n                return System.IO.Path.GetDirectoryName(OriginalPath);\n            }\n        }\n\n        [Browsable(false)]\n        public string Icon { get; set; }\n\n        [Browsable(false)]\n        public bool Exists { get; set; }\n\n        #endregion\n\n        [Category(\"2.Settings\")]\n        [DisplayName(\"Build Action\")]\n        [Description(\"The way to process this content item.\")]\n        public BuildAction BuildAction\n        {\n            get { return _buildAction; }\n            set\n            {\n                if (_buildAction == value)\n                    return;\n\n                _buildAction = value;\n\n                if (Observer != null)\n                    Observer.OnItemModified(this);\n            }\n        }\n\n        [Category(\"2.Settings\")]\n        [Description(\"The importer used to load the content file.\")]\n        [TypeConverter(typeof(ImporterConverter))]\n        public ImporterTypeDescription Importer\n        {\n            get { return _importer; }\n            set\n            {\n                if (_importer == value)\n                    return;\n\n                _importer = value;\n                ImporterName = _importer.TypeName;                \n\n                // Validate that our processor can accept input content of the type output by the new importer.\n                if ((_processor == null || _processor.InputType != _importer.OutputType) && _processor != PipelineTypes.MissingProcessor)\n                {\n                    // If it cannot, set the default processor.\n                    Processor = PipelineTypes.FindProcessor(_importer.DefaultProcessor, _importer);\n                }\n\n                if (Observer != null)\n                    Observer.OnItemModified(this);\n            }\n        }\n\n        [Category(\"2.Settings\")]\n        [Description(\"The processor used to transform the content for runtime use.\")]\n        [TypeConverter(typeof(ProcessorConverter))]\n        public ProcessorTypeDescription Processor\n        {\n            get { return _processor; }\n            set\n            {\n                if (_processor == value)\n                    return;\n                \n                _processor = value;\n                ProcessorName = _processor.TypeName;\n                \n                // When the processor changes reset our parameters\n                // to the default for the processor type.\n                ProcessorParams.Clear();\n                //foreach (var p in _processor.Properties)\n                //    ProcessorParams.Add(p.Name, p.DefaultValue);\n\n                if (Observer != null)\n                    Observer.OnItemModified(this);\n\n                // Note:\n                // There is no need to validate that the new processor can accept input\n                // of the type output by our importer, because that should be handled by\n                // only showing valid processors in the drop-down (eg, within ProcessConverter).\n            }\n        }\n\n        public void ResolveTypes()\n        {\n            if (BuildAction == BuildAction.Copy)\n            {\n                // Copy items do not have importers or processors.\n                _importer = PipelineTypes.NullImporter;\n                _processor = PipelineTypes.NullProcessor;\n            }\n            else\n            {\n                _importer = PipelineTypes.FindImporter(ImporterName, System.IO.Path.GetExtension(OriginalPath));\n                if (_importer != null && (string.IsNullOrEmpty(ImporterName) || ImporterName != _importer.TypeName))\n                    ImporterName = _importer.TypeName;\n\n                if (_importer == null)\n                    _importer = PipelineTypes.MissingImporter;\n\n                _processor = PipelineTypes.FindProcessor(ProcessorName, _importer);\n                if (_processor != null && (string.IsNullOrEmpty(ProcessorName) || ProcessorName != _processor.TypeName))\n                    ProcessorName = _processor.TypeName;\n\n                if (_processor == null)\n                    _processor = PipelineTypes.MissingProcessor;\n\n                // ProcessorParams get deserialized as strings\n                // this code converts them to object(s) of their actual type\n                // so that the correct editor appears within the property grid.\n                foreach (var p in _processor.Properties)\n                {\n                    if (ProcessorParams.ContainsKey(p.Name))\n                    {\n                        object src = ProcessorParams[p.Name];\n                        if (src != null)\n                        {\n                            Type srcType = src.GetType();\n\n                            TypeConverter converter = PipelineTypes.FindConverter(p.Type);\n\n                            // Should we throw an exception here?\n                            // This property will actually not be editable in the property grid\n                            // since we do not have a type converter for it.\n                            if (converter.CanConvertFrom(srcType))\n                            {\n                                object dst = converter.ConvertFrom(null, CultureInfo.InvariantCulture, src);\n                                ProcessorParams[p.Name] = dst;\n                            }\n                        }\n                    }\n                    else\n                    {\n                        //ProcessorParams[p.Name] = p.DefaultValue;\n                    }\n                }\n            }\n        }\n\n        public override string ToString()\n        {\n            return System.IO.Path.GetFileName(OriginalPath);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ContentItemConverter.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\n\nnamespace Content.Pipeline.Editor\n{\n    public class ContentItemConverter : TypeConverter\n    {\n        private static Attribute[] CategoryProcessorParams = new Attribute[] { new CategoryAttribute(\"3.ProcessorParams\") };\n\n        public override bool GetPropertiesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n\n        public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)\n        {\n            PropertyDescriptorCollection props = new PropertyDescriptorCollection(null);\n\n            foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(value, attributes, true))\n                props.Add(prop);\n\n            ContentItem contentItem = value as ContentItem;\n\n            if (contentItem.Processor == PipelineTypes.MissingProcessor)\n            {\n                foreach (var p in contentItem.ProcessorParams)\n                {\n                    PropertyDescriptor desc = new ReadonlyProcessorParamsPropertyDescriptor(p.Key,\n                                                                                            p.Value.GetType(),\n                                                                                            CategoryProcessorParams);\n                    props.Add(desc);\n                }\n            }\n            else\n            {\n                foreach (var p in contentItem.Processor.Properties)\n                {\n                    PropertyDescriptor desc = new ProcessorParamsPropertyDescriptor(p.Name,\n                                                                                    p.Type,\n                                                                                    CategoryProcessorParams);\n                    props.Add(desc);\n                } \n            }\n\n            return props;\n        }\n    }\n\n    public class ProcessorParamsPropertyDescriptor : PropertyDescriptor\n    {\n        private static Type _componentType = typeof(ContentItem);\n\n        private readonly Type _propertyType;\n\n        public ProcessorParamsPropertyDescriptor(string propertyName, Type propertyType, Attribute[] attrs)\n            : base(propertyName, attrs)\n        {\n            _propertyType = propertyType;\n        }\n\n        public override object GetValue(object component)\n        {\n            ContentItem contentItem = component as ContentItem;\n\n            if (contentItem.ProcessorParams.ContainsKey(base.Name))\n                return contentItem.ProcessorParams[base.Name];\n\n            if (contentItem.Processor.Properties.Contains(base.Name))\n                return contentItem.Processor.Properties[base.Name].DefaultValue;\n\n            return string.Empty;\n        }\n\n        public override void SetValue(object component, object value)\n        {\n            ContentItem contentItem = component as ContentItem;\n\n            contentItem.ProcessorParams[base.Name] = value;\n        }\n\n        public override void ResetValue(object component)\n        {\n            SetValue(component, null);\n        }\n\n        public override bool CanResetValue(object component) { return true; }\n        public override Type ComponentType { get { return _componentType; } }\n        public override bool IsReadOnly { get { return false; } }\n        public override Type PropertyType { get { return _propertyType; } }\n        public override bool ShouldSerializeValue(object component) { return true; }\n    }\n\n    public class ReadonlyProcessorParamsPropertyDescriptor : ProcessorParamsPropertyDescriptor\n    {\n\n        public ReadonlyProcessorParamsPropertyDescriptor(string propertyName, Type propertyType, Attribute[] attrs)\n            : base(propertyName, propertyType, attrs)\n        {\n        }\n\n        public override void SetValue(object component, object value)\n        {\n        }\n\n        public override void ResetValue(object component)\n        {\n        }\n\n        public override bool CanResetValue(object component) { return false; }\n        public override bool IsReadOnly { get { return true; } }\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ContentItemPathComparer.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System.Collections.Generic;\n\nnamespace Content.Pipeline.Editor\n{\n    internal class ContentItemPathComparer : IComparer<ContentItem>\n    {\n        private readonly PathComparer _pathComparer = new PathComparer();\n\n        public int Compare(ContentItem x, ContentItem y)\n        {\n            return _pathComparer.Compare(x.OriginalPath, y.OriginalPath);\n        }\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ContentItemState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nnamespace Content.Pipeline.Editor\n{\n    /// <summary>\n    /// Snapshot of a ContentItem's state, used for undo/redo.\n    /// </summary>\n    internal class ContentItemState\n    {\n        public BuildAction BuildAction;\n        public string SourceFile;\n        public string ImporterName;\n        public string ProcessorName;\n        public OpaqueDataDictionary ProcessorParams;\n\n        /// <summary>\n        /// Create a ContentItemState storing member values of the passed ContentItem.\n        /// </summary>        \n        public static ContentItemState Get(ContentItem item)\n        {\n            var state = new ContentItemState()\n                {\n                    BuildAction = item.BuildAction,\n                    SourceFile = item.OriginalPath,\n                    ImporterName = item.ImporterName,\n                    ProcessorName = item.ProcessorName,\n                    ProcessorParams = new OpaqueDataDictionary(),\n                };\n\n            foreach (var pair in item.ProcessorParams)\n            {\n                state.ProcessorParams[pair.Key] = pair.Value;\n            }\n\n            return state;\n        }\n\n        /// <summary>\n        /// Set a ContentItem's member values from this state object.\n        /// </summary>\n        public void Apply(ContentItem item)\n        {\n            item.BuildAction = BuildAction;\n            item.OriginalPath = SourceFile;\n            item.ImporterName = ImporterName;\n            item.ProcessorName = ProcessorName;\n            item.ProcessorParams = new OpaqueDataDictionary();\n\n            foreach (var pair in ProcessorParams)\n            {\n                item.ProcessorParams[pair.Key] = pair.Value;\n            }\n        }\n    }    \n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ContentItemTemplate.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Content.Pipeline.Editor\n{\n    public class ContentItemTemplate\n    {\n        public string Label;\n        public string Icon;\n        public string ImporterName;\n        public string ProcessorName;\n        public string TemplateFile;\n\n        public override string ToString()\n        {\n            return Label;\n        }\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/FileType.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Content.Pipeline.Editor\n{\n    public enum FileType\n    {\n        Base,\n        File,\n        Folder\n    }\n}\n\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/IController.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Content.Pipeline.Editor\n{\n    public interface IContentItemObserver\n    {\n        void OnItemModified(ContentItem item);\n    }\n\n    interface IController : IContentItemObserver\n    {\n        /// <summary>\n        /// Types of content which can be created and added to a project. \n        /// </summary>\n        IEnumerable<ContentItemTemplate> Templates { get; }\n\n        Selection Selection { get; }\n\n        /// <summary>\n        /// True if there is a project.\n        /// </summary>\n        bool ProjectOpen { get; }\n\n        /// <summary>\n        /// True if the project has unsaved changes.\n        /// </summary>\n        bool ProjectDirty { get; }\n\n        /// <summary>\n        /// True if the project is actively building.\n        /// </summary>\n        bool ProjectBuilding { get; }\n\n        bool SingleThread { get; set; }\n\n        /// <summary>\n        /// The view this controller is attached to.\n        /// </summary>\n        IView View { get; }\n\n        /// <summary>\n        /// Triggered when the project starts loading.\n        /// </summary>\n        event Action OnProjectLoading;\n\n        /// <summary>\n        /// Triggered when the project finishes loading.\n        /// </summary>\n        event Action OnProjectLoaded;\n\n        /// <summary>\n        /// Triggered when the project finishes building.\n        /// </summary>\n        event Action OnBuildStarted;\n\n        /// <summary>\n        /// Triggered when the project finishes building.\n        /// </summary>\n        event Action OnBuildFinished;\n\n        /// <summary>\n        /// Notify controller that a property of Project or its contents has been modified.\n        /// </summary>\n        void OnProjectModified();\n\n        /// <summary>\n        /// Notify controller that Project.References has been modified.\n        /// </summary>\n        void OnReferencesModified();\n\n        void NewProject();\n\n        void ImportProject();\n\n        void OpenProject();\n\n        void OpenProject(string projectFilePath);\n\n        void CloseProject();\n\n        bool SaveProject(bool saveAs);\n        \n        void Build(bool rebuild);\n\n        void RebuildItems(IEnumerable<IProjectItem> items);\n\n        void Clean();\n\n        void CancelBuild();\n\n        bool Exit();\n\n        #region ContentItem\n\n        void Move (string[] paths, string[] newpaths, FileType[] types);\n        \n        void Include(string initialDirectory);\n\n        void IncludeFolder(string initialDirectory);\n\n        void Include(IEnumerable<string> files, IEnumerable<string> folders);\n\n        void Exclude(IEnumerable<ContentItem> items, IEnumerable<string> folders);        \n\n        void NewItem(string name, string location, ContentItemTemplate template);\n\n        void NewFolder(string name, string location);\n\n        void AddAction(IProjectAction action);\n\n        IProjectItem GetItem(string originalPath);\n\n        #endregion\n\n        #region Undo, Redo\n\n        event CanUndoRedoChanged OnCanUndoRedoChanged;\n\n        bool CanRedo { get; }\n\n        bool CanUndo { get; }\n\n        void Undo();\n\n        void Redo();\n\n        #endregion\n\n        string GetFullPath(string filePath);\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/IProjectItem.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Content.Pipeline.Editor\n{\n    interface IProjectItem\n    {\n        string OriginalPath { get; }\n        string Name { get; }\n        string Location { get; }\n        string Icon { get; set; }\n        bool Exists { get; set; }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/IProjectObserver.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Content.Pipeline.Editor\n{\n    interface IProjectObserver\n    {\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/IView.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Content.Pipeline.Editor\n{\n    enum AskResult\n    {\n        Yes,\n        No,\n        Cancel\n    }\n\n    interface IView\n    {\n        void Attach(IController controller);\n\n        AskResult AskSaveOrCancel();\n\n        bool AskSaveName(ref string filePath, string title);\n\n        bool AskOpenProject(out string projectFilePath);\n\n        bool AskImportProject(out string projectFilePath);\n\n        void ShowError(string title, string message);\n\n        void ShowMessage(string message);\n\n        void BeginTreeUpdate();\n\n        void SetTreeRoot(IProjectItem item);\n\n        void AddTreeItem(IProjectItem item);\n\n        void AddTreeFolder(string folder);\n\n        void RemoveTreeItem(ContentItem contentItem);\n\n        void RemoveTreeFolder(string folder);\n\n        void UpdateTreeItem(IProjectItem item);\n\n        void EndTreeUpdate();\n\n        void UpdateProperties(IProjectItem item);\n\n        void OutputAppend(string text);\n\n        void OutputClear();\n\n        void OutputPopulateAssets(PipelineProject project, IEnumerable<IProjectItem> items);\n\n        bool ChooseContentFile(string initialDirectory, out List<string> files);  \n\n        bool ChooseContentFolder(string initialDirectory, out string folder);\n\n        void OnTemplateDefined(ContentItemTemplate item);\n\n        Process CreateProcess(string exe, string commands);\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/OutputParser.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Text.RegularExpressions;\n\nnamespace Content.Pipeline.Editor\n{\n    enum OutputState\n    {\n        Initialized,\n        BuildBegin,\n        Cleaning,\n        Skipping,\n        BuildAsset,\n        BuildError,\n        BuildWarning,\n        BuildErrorContinue,\n        BuildEnd,\n        BuildTime,\n        BuildTerminated,\n\n        Unknown\n    }\n\n    class OutputParser\n    {\n        internal OutputState State { get; private set; }\n        internal String Filename { get; private set; }\n        internal String ErrorMessage { get; private set; }\n        internal String BuildBeginTime { get; private set; }\n        internal String BuildInfo { get; private set; }\n        internal String BuildElapsedTime { get; private set; }\n\n\n        Regex _reBuildBegin = new Regex(@\"^(Build started)\\W+(?<buildBeginTime>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reCleaning = new Regex(@\"^(Cleaning)\\W(?<filename>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reSkipping = new Regex(@\"^(Skipping)\\W(?<filename>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reBuildAsset = new Regex(@\"^(?<filename>([a-zA-Z]:)?/.+?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reBuildError = new Regex(@\"^(?<filename>([a-zA-Z]:)?/.+?)\\W*?:\\W*?error\\W*?:\\W*(?<errorMessage>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reFileErrorWithLineNum   = new Regex(@\"^(?<filename>.+?)(\\((?<line>[0-9]+),(?<column>[0-9]+)(-(?<columnEnd>[0-9]+))?\\))?:\\W*?(error)\\W*(?<errorCode>[A-Z][0-9]+)\\W*:\\W*(?<errorMessage>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reFileWarningWithLineNum = new Regex(@\"^(?<filename>.+?)(\\((?<line>[0-9]+),(?<column>[0-9]+)(-(?<columnEnd>[0-9]+))?\\))?:\\W*?(warning)\\W*(?<warningCode>[A-Z][0-9]+)\\W*:\\W*(?<warningMessage>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reFileWarning = new Regex(@\"^(?<filename>.+?):\\W*?(warning)\\W*:\\W*(?<warningMessage>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reFileError = new Regex(@\"^(?<filename>([a-zA-Z]:)?/.+?)\\W*?: (?<errorMessage>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reBuildEnd = new Regex(@\"^(Build)\\W+(?<buildInfo>.*?)\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        Regex _reBuildTime = new Regex(@\"^(Time elapsed)\\W+(?<buildElapsedTime>.*?)\\.\\r?$\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n        \n\n        public OutputParser()\n        {\n            Reset();\n        }\n\n        internal void Reset()\n        {\n            State = OutputState.Initialized;\n            Filename = null;\n            BuildBeginTime = null;\n            BuildInfo = null;\n            BuildElapsedTime = null;\n            ErrorMessage = null;\n        }\n\n        internal void Parse(string text)\n        {   \n            ParseLine(text);\n        }\n\n\n        private void ParseLine(string line)\n        {\n            /* \n             * Line <-- BuildBegin\n             * Line <-- BuildEnd\n             * Line <-- BuildTime\n             * Line <-- Cleaning\n             * Line <-- Skipping\n             * Line <-- BuildError (BuildErrorContinue)+\n             * Line <-- BuildAsset\n             * BuildBegin   <-- \"Build\" \"started\" buildBeginTime\n             * Cleaning     <-- \"Cleaning\" filenane\n             * Skipping     <-- \"Skipping\" filenane\n             * BuildAsset   <-- filename\n             * BuildError   <-- filename ':' \"Error\" ':' errorMessage\n             * BuildErrorContinue <-- errorMessage\n             * BuildEnd     <-- \"Build\" buildInfo\n             * BuildTime    <-- \"Time\" \"elapsed\" buildElapsedTime\n             */\n\n            var prevState = State;\n            var prevFilename = Filename;\n\n            State = OutputState.Unknown;\n            Filename = null;            \n            BuildBeginTime = null;\n            BuildInfo = null;\n            BuildElapsedTime = null;\n            ErrorMessage = null;\n\n            if (line == \"Build terminated!\")\n            {\n                State = OutputState.BuildTerminated;\n            }\n            else if (_reBuildBegin.IsMatch(line))\n            {\n                State = OutputState.BuildBegin;\n                var m = _reBuildBegin.Match(line);\n                BuildBeginTime = m.Groups[\"buildBeginTime\"].Value;\n            }\n            else if (_reBuildEnd.IsMatch(line))\n            {\n                State = OutputState.BuildEnd;\n                var m = _reBuildEnd.Match(line);\n                BuildInfo = m.Groups[\"buildInfo\"].Value;\n            }\n            else if (_reBuildTime.IsMatch(line))\n            {\n                State = OutputState.BuildTime;\n                var m = _reBuildTime.Match(line);\n                BuildElapsedTime = m.Groups[\"buildElapsedTime\"].Value;\n            }\n            else if (_reCleaning.IsMatch(line))\n            {\n                State = OutputState.Cleaning;\n                var m = _reCleaning.Match(line);\n                Filename = m.Groups[\"filename\"].Value;\n            }\n            else if (_reSkipping.IsMatch(line))\n            {\n                State = OutputState.Skipping;\n                var m = _reSkipping.Match(line);\n                Filename = m.Groups[\"filename\"].Value;\n            }\n            else if (_reBuildError.IsMatch(line))\n            {\n                State = OutputState.BuildError;\n                var m = _reBuildError.Match(line);\n                Filename = m.Groups[\"filename\"].Value;\n                ErrorMessage = m.Groups[\"errorMessage\"].Value;\n            }\n            else if (_reFileErrorWithLineNum.IsMatch(line))\n            {\n                State = OutputState.BuildError;\n                var m = _reFileErrorWithLineNum.Match(line);\n                var lineNum = m.Groups[\"line\"];\n                var columnBegin = m.Groups[\"column\"];\n                var columnEnd = m.Groups[\"columnEnd\"];\n                var column = columnBegin.Value;\n                if(columnEnd.Success)\n                    column += \"-\" + columnEnd.Value;\n                var errorCode = m.Groups[\"errorCode\"];\n                Filename = m.Groups[\"filename\"].Value.Replace(\"\\\\\\\\\",\"/\").Replace(\"\\\\\", \"/\");\n                ErrorMessage = string.Format(\"{0} ({1},{2}): {3}\", errorCode, lineNum, column, m.Groups[\"errorMessage\"].Value);\n            }\n            else if (_reFileWarningWithLineNum.IsMatch(line))\n            {\n                State = OutputState.BuildWarning;\n                var m = _reFileWarningWithLineNum.Match(line);\n                var lineNum = m.Groups[\"line\"];\n                var columnBegin = m.Groups[\"column\"];\n                var columnEnd = m.Groups[\"columnEnd\"];                \n                var column = columnBegin.Value;\n                if(columnEnd.Success)\n                    column += \"-\" + columnEnd.Value;\n                var errorCode = m.Groups[\"warningCode\"];\n                Filename = m.Groups[\"filename\"].Value.Replace(\"\\\\\\\\\", \"/\").Replace(\"\\\\\", \"/\");\n                ErrorMessage = string.Format(\"{0} ({1},{2}): {3}\", errorCode, lineNum, column, m.Groups[\"warningMessage\"].Value);\n            }\n            else if (_reFileWarning.IsMatch(line))\n            {\n                State = OutputState.BuildWarning;\n                var m = _reFileWarning.Match(line);\n                Filename = m.Groups[\"filename\"].Value.Replace(\"\\\\\\\\\", \"/\").Replace(\"\\\\\", \"/\");\n                ErrorMessage = m.Groups[\"warningMessage\"].Value;\n            }\n            else if (_reFileError.IsMatch(line))\n            {\n                State = OutputState.BuildError;\n                var m = _reFileError.Match(line);\n                Filename = m.Groups[\"filename\"].Value;\n                ErrorMessage = m.Groups[\"errorMessage\"].Value;\n            }\n            else if (_reBuildAsset.IsMatch(line))\n            {\n                State = OutputState.BuildAsset;\n                var m = _reBuildAsset.Match(line);\n                Filename = m.Groups[\"filename\"].Value;\n            }\n            else if (prevState == OutputState.BuildError || prevState == OutputState.BuildErrorContinue)\n            {\n                State = OutputState.BuildErrorContinue;\n                Filename = prevFilename;\n                ErrorMessage = line.TrimEnd();\n            }\n            else\n            {\n                State = OutputState.Unknown;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/Package.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\n\nnamespace Content.Pipeline.Editor\n{\n    public struct Package : IComparable<Package>\n    {\n        public string Name;\n        public string Version;\n\n        public static Package Parse(string packageReference)\n        {\n            packageReference.Trim();\n\n            Package package;\n            package.Name = packageReference;\n            package.Version = String.Empty;\n\n            string[] split = packageReference.Split(' ');\n            if (split.Length == 2)\n            {\n                package.Name = split[0].Trim();\n                package.Version = split[1].Trim();\n            }\n\n            return package;\n        }\n\n        public override string ToString()\n        {\n            string result = this.Name;\n            if (this.Version != String.Empty)\n                result += \" \" + this.Version;\n\n            return result;\n        }\n\n        int IComparable<Package>.CompareTo(Package other)\n        {\n            int compName = this.Name.CompareTo(other.Name);\n            if (compName != 0)\n                return compName;\n\n            int compVersion = this.Version.CompareTo(other.Version);\n            if (compVersion != 0)\n                return compVersion;\n\n            return 0;\n        }\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PackageReferencesCollection.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\n\nnamespace Content.Pipeline.Editor\n{\n    public sealed class PackageReferencesCollection\n    {\n        public const string Extension = \".kniContent\";\n       \n        public List<Package> Packages { get; set; }\n\n\n        public PackageReferencesCollection()\n        {\n            Packages = new List<Package>();\n        }\n\n        public void SaveBinary(string filePath)\n        {\n            using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))\n            using (var writer = new PackageReferencesCollectionBinaryWriter(stream))\n            {\n                writer.Write(this);\n            }\n        }\n\n        public static PackageReferencesCollection LoadBinary(string filePath)\n        {\n            try\n            {\n                if (!File.Exists(filePath))\n                    return null;\n\n                using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None))\n                using (var reader = new PackageReferencesCollectionBinaryReader(stream))\n                {\n                    PackageReferencesCollection result = new PackageReferencesCollection();\n                    reader.Read(result);\n                    return result;\n                }\n            }\n            catch (Exception)\n            {\n                return null;\n            }\n        }\n\n        public int PackagesCount { get { return this.Packages.Count; } }\n\n        internal void AddPackage(Package package)\n        {\n            this.Packages.Add(package);\n        }\n\n        internal class PackageReferencesCollectionBinaryWriter : BinaryWriter\n        {\n            private const string Header = \"KNIC\"; // content db\n            private const short MajorVersion =  3;\n            private const short MinorVersion = 15;\n            private const int DataType = 3; // PackageReferencesCollection data\n\n\n            public PackageReferencesCollectionBinaryWriter(Stream output) : base(output)\n            {\n            }\n\n            internal void Write(PackageReferencesCollection value)\n            {\n                Write((byte)Header[0]);\n                Write((byte)Header[1]);\n                Write((byte)Header[2]);\n                Write((byte)Header[3]);\n                Write((Int16)MajorVersion);\n                Write((Int16)MinorVersion);\n                Write((Int32)DataType);\n                Write((Int32)0); // reserved\n\n\n                WritePackedInt(value.Packages.Count);\n                for (int i = 0; i < value.Packages.Count; i++)\n                {\n                    Write(value.Packages[i].Name);\n                    Write(value.Packages[i].Version);\n                }\n\n                return;\n            }\n\n            protected void WritePackedInt(int value)\n            {\n                // write zigzag encoded int\n                int zzint = ((value << 1) ^ (value >> 31));\n                Write7BitEncodedInt(zzint);\n            }\n\n            private void WriteStringOrNull(string value)\n            {\n                if (value != null)\n                {\n                    Write(true);\n                    Write(value);\n                }\n                else\n                    Write(false);\n            }\n\n        }\n\n        internal class PackageReferencesCollectionBinaryReader : BinaryReader\n        {\n            private const string Header = \"KNIC\"; // content db\n            private const short MajorVersion =  3;\n            private const short MinorVersion = 15;\n            private const int DataType = 3; // PackageReferencesCollection data\n\n\n            public PackageReferencesCollectionBinaryReader(Stream output) : base(output)\n            {\n            }\n\n            internal void Read(PackageReferencesCollection value)\n            {\n                if (ReadByte() != Header[0]\n                ||  ReadByte() != Header[1]\n                ||  ReadByte() != Header[2]\n                ||  ReadByte() != Header[3])\n                    throw new Exception(\"Invalid file.\");\n\n                if (ReadInt16() != MajorVersion\n                ||  ReadInt16() != MinorVersion)\n                    throw new Exception(\"Invalid file version.\");\n\n                int dataType = ReadInt32(); \n                if (dataType != DataType)\n                    throw new Exception(\"Invalid data type.\");\n\n                int reserved0 = ReadInt32();\n\n                int packagesCount = ReadPackedInt();\n                value.Packages = new List<Package>(packagesCount);\n                for (int i = 0; i < packagesCount; i++)\n                {\n                    Package package;\n                    package.Name = ReadString();\n                    package.Version = ReadString();\n                    value.Packages.Add(package);\n                }\n\n                return;\n            }\n\n            private int ReadPackedInt()\n            {\n                unchecked\n                {\n                    // read zigzag encoded int\n                    int zzint = Read7BitEncodedInt();\n                    return ((int)((uint)zzint >> 1) ^ (-(zzint & 1)));\n                }\n            }\n\n            private string ReadStringOrNull()\n            {\n                if (ReadBoolean())\n                    return ReadString();\n                else\n                    return null;\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PathComparer.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Content.Pipeline.Editor\n{\n    internal class PathComparer : IComparer<string>\n    {\n        private readonly StringComparer _stringComparer = StringComparer.Ordinal;\n\n        public int Compare(string x, string y)\n        {\n            var sx = x.Split('/', '\\\\');\n            var sy = y.Split('/', '\\\\');\n\n            int minLength = Math.Min(sx.Length, sy.Length);\n            for (int i = 0; i < minLength-1; i++)\n            {\n                int cmp = _stringComparer.Compare(sx[i], sy[i]);\n                if (cmp != 0)\n                    return cmp;\n            }\n\n            if (sx.Length > sy.Length)\n                    return -1;\n            if (sy.Length > sx.Length)\n                    return 1;\n\n            return _stringComparer.Compare(sx[minLength - 1], sy[minLength - 1]);\n        }\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PathHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Content.Pipeline.Editor\n{\n    public static class PathHelper\n    {\n        /// <summary>\n        /// The/universal/standard/directory/seperator.\n        /// </summary>\n        public const char DirectorySeparator = '/';\n\n        /// <summary>\n        /// Returns a path string normalized to the\\Windows\\standard.\n        /// </summary>\n        public static string NormalizeWindows(string path)\n        {\n            return path.Replace('/', '\\\\');\n        }\n\n        /// <summary>\n        /// Returns a path string normalized to the/universal/standard.\n        /// </summary>\n        public static string Normalize(string path)\n        {\n            return path.Replace('\\\\', '/');\n        }\n\n        /// <summary>\n        /// Returns a directory path string normalized to the/universal/standard\n        /// with a trailing seperator.\n        /// </summary>\n        public static string NormalizeDirectory(string path)\n        {\n            return path.Replace('\\\\', '/').TrimEnd('/') + '/';\n        }\n\n        /// <summary>\n        /// Returns a path relative to the base path.\n        /// </summary>\n        /// <param name=\"basePath\">The path to make relative to.  Must end with directory seperator.</param>\n        /// <param name=\"path\">The path to be made relative to the basePath.</param>\n        /// <returns>The relative path or the original string if it is not absolute or cannot be made relative.</returns>\n        public static string GetRelativePath(string basePath, string path)\n        {\n            Uri uri;\n            if (!Uri.TryCreate(path, UriKind.Absolute, out uri))\n                return path;\n\n            uri = new Uri(basePath).MakeRelativeUri(uri);\n            var str = Uri.UnescapeDataString(uri.ToString());\n\n            return Normalize(str);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.ExcludeAction.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\n\nnamespace Content.Pipeline.Editor\n{\n    internal partial class PipelineController\n    {        \n        private class ExcludeAction : IProjectAction\n        {\n            private readonly PipelineController _con;\n            private readonly ContentItemState[] _state;\n            private readonly string[] _folder;\n\n            public ExcludeAction(PipelineController controller, IEnumerable<ContentItem> items, IEnumerable<string> folders)\n            {\n                _con = controller;\n                _folder = (folders == null) ? new string[0] : folders.ToArray();\n\n                if(items == null)\n                    _state = new ContentItemState[0];\n                else\n                {\n                    _state = new ContentItemState[items.Count()];\n                    \n                    var i = 0;\n                    foreach (var item in items)\n                    {\n                        _state[i++] = ContentItemState.Get(item);\n                    }\n                }\n            }\n\n            public bool Do()\n            {\n                _con.View.BeginTreeUpdate();\n\n                foreach (var obj in _state)\n                {\n                    for (var i = 0; i < _con._project.ContentItems.Count; i++)\n                    {\n                        var item = _con._project.ContentItems[i];\n                        if (item.OriginalPath == obj.SourceFile)\n                        {\n                            _con._project.ContentItems.Remove(item);\n                            _con.View.RemoveTreeItem(item);\n                            break;\n                        }\n                    }\n                }\n\n                foreach (string f in _folder)\n                    _con.View.RemoveTreeFolder(f);\n\n                _con.View.EndTreeUpdate();\n                _con.ProjectDirty = true;\n\n                return true;\n            }\n\n            public bool Undo()\n            {\n                _con.View.BeginTreeUpdate();\n\n                foreach(string f in _folder)\n                    _con.View.AddTreeFolder(f);\n\n                foreach (var obj in _state)\n                {\n                    var item = new ContentItem()\n                        {\n                            Observer = _con,\n                            Exists = File.Exists(System.IO.Path.GetDirectoryName(_con._project.OriginalPath) + Path.DirectorySeparatorChar + obj.SourceFile)\n                        };\n                    obj.Apply(item);\n                    item.ResolveTypes();\n\n                    _con._project.ContentItems.Add(item);\n                    _con.View.AddTreeItem(item);\n                }\n\n                _con.View.EndTreeUpdate();\n                _con.ProjectDirty = true;\n\n                return true;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.IncludeAction.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\n\nnamespace Content.Pipeline.Editor\n{\n    internal partial class PipelineController\n    {\n        private class IncludeAction : IProjectAction\n        {\n            private readonly PipelineController _con;\n            private readonly string[] _folder;\n            private readonly string[] _files;\n\n            public IncludeAction(PipelineController controller, IEnumerable<string> files) : this(controller, files, null)\n            {\n                \n            }\n\n            public IncludeAction(PipelineController controller, IEnumerable<string> files, IEnumerable<string> folders)\n            {\n                _con = controller;\n\n                _files = files == null ? new string[0] : files.ToArray();\n                _folder = folders == null ? new string[0] : folders.ToArray();\n\n                for (int i = 0; i < _folder.Length; i++)\n                {\n                    if (Path.IsPathRooted(_folder[i]))\n                    {\n                        string projectloc = controller._project.Location;\n                        if (_folder[i].Length >= projectloc.Length + 1)\n                            _folder[i] = _folder[i].Substring(projectloc.Length + 1);\n                    }\n\n                    if(_folder[i].EndsWith(Path.DirectorySeparatorChar.ToString()))\n                        _folder[i] = _folder[i].Remove(_folder[i].Length - 1);\n                }\n            }\n\n            public bool Do()\n            {\n                var parser = new PipelineProjectParser(_con, _con._project);\n                _con.View.BeginTreeUpdate();\n\n                _con.Selection.Clear(_con);\n\n                foreach(string f in _folder)\n                    if(f != \"\")\n                        _con.View.AddTreeFolder(f);\n\n                for (var i = 0; i < _files.Length; i++ )\n                {\n                    bool skipduplicate = false;\n\n                    switch (Environment.OSVersion.Platform) \n                    {\n                        case PlatformID.Win32NT:\n                        case PlatformID.Win32S:\n                        case PlatformID.Win32Windows:\n                        case PlatformID.WinCE:\n                            skipduplicate = true;\n                            break;\n                    }\n\n                    var f = _files[i];\n                    if (!parser.AddContent(f, skipDuplicates: skipduplicate, inorder: true, out int index))\n                        continue;\n\n                    var item = _con._project.ContentItems[index];\n                    item.Observer = _con;\n                    item.ResolveTypes();\n\n                    _files[i] = item.OriginalPath;\n\n                    _con.View.AddTreeItem(item);\n                    _con.Selection.Add(item, _con);\n                }\n\n                _con.View.EndTreeUpdate();\n                _con.ProjectDirty = true;\n\n                return true;\n            }\n\n            public bool Undo()\n            {\n                _con.View.BeginTreeUpdate();\n\n                foreach (var f in _files)\n                {\n                    for (var i = 0; i < _con._project.ContentItems.Count; i++)\n                    {\n                        var item = _con._project.ContentItems[i];\n                        if (item.OriginalPath == f)\n                        {\n                            _con.View.RemoveTreeItem(item);\n                            _con._project.ContentItems.Remove(item);\n                            _con.Selection.Remove(item, _con);\n                            break;\n                        }\n                    }\n                }\n\n                foreach(string f in _folder)\n                    if(f != \"\")\n                        _con.View.RemoveTreeFolder(f);\n\n                _con.View.EndTreeUpdate();\n                _con.ProjectDirty = true;\n\n                return true;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.MoveAction.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.IO;\nusing System.Collections.Generic;\n\nnamespace Content.Pipeline.Editor\n{\n    internal partial class PipelineController\n    {\n        private class MoveAction : IProjectAction\n        {\n            private readonly PipelineController _con;\n\n            private readonly string[] paths;\n            private readonly string[] newpaths;\n            private readonly FileType[] types;\n\n            public MoveAction(PipelineController controller, string[] paths, string[] newpaths, FileType[] types)\n            {\n                _con = controller;\n\n                this.paths = paths;\n                this.newpaths = newpaths;\n                this.types = types;\n            }\n\n            private bool Move(string path, string newpath, FileType type)\n            {\n                _con.View.BeginTreeUpdate();\n\n                if (type == FileType.File)\n                {\n                    var item = _con.GetItem(path) as ContentItem;\n                    string fullpath = _con.GetFullPath(path);\n                    string fullnewpath = _con.GetFullPath(newpath);\n\n                    if (item == null)\n                    {\n                        _con.View.ShowError(\"Error\", \"An internal error has occured.\");\n                        return false;\n                    }\n\n                    try\n                    {\n                        if (File.Exists(fullnewpath))\n                        {\n                            _con.View.ShowError(\"Error\", \"File: \\\"\" + fullnewpath + \"\\\" already exists.\");\n                            return false;\n                        }\n\n                        File.Move(fullpath, fullnewpath);\n                    }\n                    catch\n                    {\n                        _con.View.ShowError(\"Error\", \"An error has occurred while trying to move a file.\");\n                        return false;\n                    }\n\n                    MoveFile(item, newpath);\n                }\n                else if (type == FileType.Folder)\n                {\n                    string fullpath = _con.GetFullPath(path);\n                    string fullnewpath = _con.GetFullPath(newpath);\n\n                    try\n                    {\n                        if (Directory.Exists(fullnewpath))\n                        {\n                            _con.View.ShowError(\"Error\", \"Directory: \\\"\" + fullnewpath + \"\\\" already exists.\");\n                            return false;\n                        }\n\n                        Directory.Move(fullpath, fullnewpath);\n                    }\n                    catch\n                    {\n                        _con.View.ShowError(\"Error\", \"An error has occurred while trying to move the directory.\");\n                        return false;\n                    }\n\n                    var cis = new List<ContentItem>();\n                    var nps = new List<string>();\n\n                    for (var i = 0; i < _con._project.ContentItems.Count; i++)\n                    {\n                        var item = _con._project.ContentItems[i];\n                        if (item.OriginalPath.StartsWith(path))\n                        {\n                            cis.Add(item);\n                            nps.Add(newpath + item.OriginalPath.Substring(path.Length));\n                        }\n                    }\n\n                    for (int i = 0; i < nps.Count; i++)\n                    {\n                        MoveFile(cis[i], newpath + cis[i].OriginalPath.Substring(path.Length));\n                    }\n\n                    _con.View.RemoveTreeFolder(path);\n                }\n                else if (type == FileType.Base)\n                {\n                    _con.MoveProject(newpath);\n                }\n\n                _con.View.EndTreeUpdate();\n                _con.ProjectDirty = true;\n\n                return true;\n            }\n\n            private void MoveFile(ContentItem item, string newpath)\n            {\n                _con._project.ContentItems.Remove(item);\n                _con.View.RemoveTreeItem(item);\n\n                item.OriginalPath = newpath;\n                item.ResolveTypes();\n\n                _con._project.ContentItems.Add(item);\n                _con.View.AddTreeItem(item);\n            }\n\n            public bool Do()\n            {\n                bool ret = true;\n\n                for (int i = 0; i < paths.Length; i++)\n                    ret = ret && Move(paths[i], newpaths[i], types[i]);\n\n                return ret;\n            }\n\n            public bool Undo()\n            {\n                bool ret = true;\n\n                for (int i = 0; i < paths.Length; i++)\n                    ret = ret && Move(newpaths[i], paths[i], types[i]);\n\n                return ret;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.NewAction.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\n\nnamespace Content.Pipeline.Editor\n{\n    internal partial class PipelineController\n    {        \n        private class NewAction : IProjectAction\n        {\n            private readonly PipelineController _con;\n            private readonly string _name;\n            private readonly string _location;\n            private readonly ContentItemTemplate _template;\n\n            public NewAction(PipelineController controller, string name, string location, ContentItemTemplate template)\n            {\n                _con = controller;\n                _name = name;\n                _location = location;\n                _template = template;                \n            }\n\n            public bool Do()\n            {\n                var ext = Path.GetExtension(_template.TemplateFile);\n                var filename = Path.ChangeExtension(_name, ext);\n                var fullpath = _con.GetFullPath(Path.Combine(_location, filename));\n\n                if (File.Exists(fullpath))\n                {\n                    _con.View.ShowError(\"Error\", string.Format(\"File already exists: '{0}'.\", fullpath));\n                    return false;\n                }\n\n                File.Copy(_template.TemplateFile, fullpath);\n\n                var parser = new PipelineProjectParser(_con, _con._project);\n                _con.View.BeginTreeUpdate();\n\n                _con.Selection.Clear(_con);\n\n                if (parser.AddContent(fullpath, skipDuplicates: true, inorder: true, out int index))\n                {\n                    var item = _con._project.ContentItems[index];\n                    item.Observer = _con;\n                    item.ImporterName = _template.ImporterName;\n                    item.ProcessorName = _template.ProcessorName;\n                    item.ResolveTypes();\n\n                    _con.View.AddTreeItem(item);\n                    _con.Selection.Add(item, _con);\n                }\n\n                _con.View.EndTreeUpdate();\n                _con.ProjectDirty = true;\n\n                return true;\n            }\n\n            public bool Undo()\n            {\n                var ext = Path.GetExtension(_template.TemplateFile);\n                var filename = Path.ChangeExtension(_name, ext);\n                var fullpath = Path.Combine(_location, filename);\n\n                if (!File.Exists(fullpath))\n                {\n                    _con.View.ShowError(\"Error\", string.Format(\"File does not exist: '{0}'.\", fullpath));\n                    return false;\n                }\n\n                File.Delete(fullpath);\n                \n                _con.View.BeginTreeUpdate();\n\n                for (var i = 0; i < _con._project.ContentItems.Count; i++)\n                {\n                    var item = _con._project.ContentItems[i];\n                    var path = Path.GetFullPath(_con._project.Location + \"\\\\\" + item.OriginalPath);\n\n                    if (fullpath == path)\n                    {\n                        _con._project.ContentItems.Remove(item);\n                        _con.View.RemoveTreeItem(item);\n                        _con.Selection.Remove(item, _con);\n                    }\n                }\n                    \n                _con.View.EndTreeUpdate();\n                _con.ProjectDirty = true;\n\n                return true;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.UpdateContentItemAction.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Content.Pipeline.Editor\n{\n    internal class UpdateContentItemAction : IProjectAction\n    {\n        private readonly IView _view;\n        private readonly IController _con;\n        private List<ContentItemState> _states;\n\n        public UpdateContentItemAction(IView view, IController con, IEnumerable<ContentItemState> states)\n        {\n            _view = view;\n            _con = con;\n            _states = states.ToList();\n        }\n\n        public bool Do()\n        {\n            Toggle();\n            return true;\n        }\n\n        public bool Undo()\n        {\n            Toggle();\n            return true;\n        }\n\n        private void Toggle()\n        {\n            for (int i = 0; i < _states.Count; i++)\n            {\n                var item = (ContentItem)_con.GetItem(_states[i].SourceFile);\n                var state = ContentItemState.Get(item);\n                _states[i].Apply(item);\n                _states[i] = state;\n\n                item.ResolveTypes();\n\n                _view.BeginTreeUpdate();\n                _view.UpdateProperties(item);\n                _view.UpdateTreeItem(item);\n                _view.EndTreeUpdate();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.UpdateProjectAction.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.ComponentModel;\n\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Content.Pipeline.Editor\n{\n    internal class UpdateProjectAction : IProjectAction\n    {\n        private readonly IView _view;\n        private readonly IController _con;\n        private readonly bool _referencesChanged;\n        private readonly bool _packageReferencesChanged;\n\n\n        private ProjectState _state;\n\n        public UpdateProjectAction(IView view, IController con, PipelineProject item, PropertyDescriptor property, object previousValue)\n        {\n            _view = view;\n            _con = con;\n\n            _state = new ProjectState(item);\n\n            switch (property.Name)\n            {\n                case \"OutputDir\":\n                    _state.OutputDir = (string)previousValue;\n                    break;\n                case \"IntermediateDir\":\n                    _state.IntermediateDir = (string)previousValue;\n                    break;\n                case \"References\":\n                    _state.References = new List<string>((List<string>)previousValue);\n                    _referencesChanged = true;\n                    break;\n                case \"PackageReferences\":\n                    _state.PackageReferences = new List<Package>((List<Package>)previousValue);\n                    _packageReferencesChanged = true;\n                    break;\n                case \"Platform\":\n                    _state.Platform = (TargetPlatform)previousValue;\n                    break;\n                case \"Profile\":\n                    _state.Profile = (GraphicsProfile)previousValue;\n                    break;\n                case \"Config\":\n                    _state.Config = (string)previousValue;\n                    break;\n                case \"OriginalPath\":\n                    _state.OriginalPath = (string)previousValue;\n                    break;\n            }\n        }\n\n        public bool Do()\n        {\n            Toggle();\n            return true;\n        }\n\n        public bool Undo()\n        {\n            Toggle();\n            return true;\n        }\n\n        private void Toggle()\n        {\n            PipelineProject item = (PipelineProject)_con.GetItem(_state.OriginalPath);\n            ProjectState state = new ProjectState(item);\n            _state.Apply(item);\n            _state = state;\n\n            if (_referencesChanged || _packageReferencesChanged)\n                _con.OnReferencesModified();\n            else\n                _con.OnProjectModified();\n\n            _view.BeginTreeUpdate();\n            _view.UpdateProperties(item);\n            _view.UpdateTreeItem(item);\n            _view.EndTreeUpdate();\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Content.Pipeline.Editor\n{\n    internal partial class PipelineController : IController\n    {\n        private PipelineProject _project;\n\n        private Task _buildTask;\n        private Process _buildProcess;\n\n        private readonly List<ContentItemTemplate> _templateItems;\n\n        private static readonly string [] _mgcbSearchPaths = new []       \n        {\n            \"\", // root\n#if DEBUG\n            \"../../../../../MGCB/bin/Windows/AnyCPU/Debug\",\n            Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), \"../../../../../MonoGame.Content.Builder/bin/Windows/AnyCPU/Debug\"),\n#else\n            \"../../../../../MGCB/bin/Windows/AnyCPU/Release\",\n            Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), \"../../../../../MonoGame.Content.Builder/bin/Windows/AnyCPU/Release\"),\n#endif\n            \"../MGCB\",\n            Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), \"../MGCB\"),\n            Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),\n        };\n\n        public IEnumerable<ContentItemTemplate> Templates\n        {\n            get { return _templateItems; }\n        }\n\n        public Selection Selection { get; private set; }\n\n        public bool SingleThread { get; set; }\n\n        public string ProjectLocation\n        {\n            get { return _project.Location; }\n        }\n\n        public string ProjectOutputDir\n        {\n            get { return _project.OutputDir; }\n        }\n        \n        public bool ProjectOpen { get; private set; }\n\n        public bool ProjectDirty { get; set; }\n\n        public bool ProjectBuilding \n        {\n            get\n            {\n                return _buildTask != null && !_buildTask.IsCompleted;\n            }\n        }\n\n        public IView View { get; private set; }\n\n        public event Action OnProjectLoading;\n\n        public event Action OnProjectLoaded;\n\n        public event Action OnBuildStarted;\n\n        public event Action OnBuildFinished;\n\n        public PipelineController(IView view)\n        {\n            _actionStack = new ActionStack();\n            Selection = new Selection();\n\n            View = view;\n            View.Attach(this);\n            ProjectOpen = false;\n\n            _templateItems = new List<ContentItemTemplate>();\n            LoadTemplates(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), \"Templates\"));\n        }\n\n        public void OnProjectModified()\n        {            \n            Debug.Assert(ProjectOpen, \"OnProjectModified called with no project open?\");\n            ProjectDirty = true;\n            View.UpdateProperties(_project);\n        }\n\n        public void OnReferencesModified()\n        {\n            Debug.Assert(ProjectOpen, \"OnReferencesModified called with no project open?\");\n            ProjectDirty = true;\n            ResolveTypes();\n            View.UpdateProperties(_project);\n        }\n\n        public void OnItemModified(ContentItem contentItem)\n        {\n            Debug.Assert(ProjectOpen, \"OnItemModified called with no project open?\");\n            ProjectDirty = true;\n            View.UpdateProperties(contentItem);\n\n            View.BeginTreeUpdate();\n            View.UpdateTreeItem(contentItem);\n            View.EndTreeUpdate();\n        }\n\n        public void NewProject()\n        {\n            // Make sure we give the user a chance to\n            // save the project if they need too.\n            if (!AskSaveProject())\n                return;\n\n            // A project needs a root directory or it is impossible to resolve relative paths.\n            // So we need the user to choose that location even though the project has not\n            // yet actually been saved to disk.\n            var projectFilePath = Environment.CurrentDirectory;\n            if (!View.AskSaveName(ref projectFilePath, \"New Project\"))\n                return;\n\n            CloseProject();\n\n            if (OnProjectLoading != null)\n                OnProjectLoading();\n\n            // Clear existing project data, initialize to a new blank project.\n            _actionStack.Clear();\n            _project = new PipelineProject();            \n            PipelineTypes.Load(_project);\n\n            // Save the new project.\n            _project.OriginalPath = projectFilePath;\n            ProjectOpen = true;\n            ProjectDirty = true;\n\n            UpdateTree();\n\n            if (OnProjectLoaded != null)\n                OnProjectLoaded();\n        }\n\n        public void ImportProject()\n        {\n            // Make sure we give the user a chance to\n            // save the project if they need too.\n            if (!AskSaveProject())\n                return;\n\n            string projectFilePath;\n            if (!View.AskImportProject(out projectFilePath))\n                return;\n\n            CloseProject();\n\n            if (OnProjectLoading != null)\n                OnProjectLoading();\n\n            try\n            {\n                _actionStack.Clear();\n                _project = new PipelineProject();\n                var parser = new PipelineProjectParser(this, _project);\n                parser.ImportProject(projectFilePath);\n\n                ResolveTypes();                \n                \n                ProjectOpen = true;\n                ProjectDirty = true;                \n            }\n            catch (Exception e)\n            {\n                View.ShowError(\"Open Project\", \"Failed to open project!\");\n                return;\n            }\n\n            UpdateTree();\n\n            if (OnProjectLoaded != null)\n                OnProjectLoaded();\n        }\n\n        public void OpenProject()\n        {\n            // Make sure we give the user a chance to\n            // save the project if they need too.\n            if (!AskSaveProject())\n                return;\n\n            string projectFilePath;\n            if (!View.AskOpenProject(out projectFilePath))\n                return;\n            \n            OpenProject(projectFilePath);\n        }\n\n        public void OpenProject(string projectFilePath)\n        {\n            CloseProject();\n\n            if (OnProjectLoading != null)\n                OnProjectLoading();\n\n#if !DEBUG\n            try\n#endif\n            {\n                _actionStack.Clear();\n                _project = new PipelineProject();\n                \n                var parser = new PipelineProjectParser(this, _project);\n                var errorCallback = new MGBuildParser.ErrorCallback((msg, args) => View.OutputAppend(string.Format(Path.GetFileName(projectFilePath) + \": \" + msg, args)));\n                parser.OpenProject(projectFilePath, errorCallback);\n\n                ResolveTypes();\n\n                ProjectOpen = true;\n                ProjectDirty = false;\n\n                PipelineSettingsMgr.Current.AddProjectHistory(projectFilePath);\n                PipelineSettingsMgr.Settings.StartupProject = projectFilePath;\n                PipelineSettingsMgr.Current.Save();\n            }\n#if !DEBUG\n            catch (Exception e)\n            {\n                View.ShowError(\"Open Project\", \"Failed to open project!\");\n                return;\n            }\n#endif\n\n            UpdateTree();\n\n            if (OnProjectLoaded != null)\n                OnProjectLoaded();\n        }\n\n        public void CloseProject()\n        {\n            if (!ProjectOpen)\n                return;\n\n            // Make sure we give the user a chance to\n            // save the project if they need too.\n            if (!AskSaveProject())\n                return;\n\n            ProjectOpen = false;\n            ProjectDirty = false;\n            _project = null;\n            _actionStack.Clear();\n            View.OutputClear();\n\n            PipelineSettingsMgr.Settings.StartupProject = null;\n            PipelineSettingsMgr.Current.Save();\n\n            Selection.Clear(this);\n            UpdateTree();\n        }\n\n        public bool MoveProject(string newname)\n        {\n            string opath = _project.OriginalPath;\n            string ext = Path.GetExtension(opath);\n\n            try\n            {\n                File.Delete(_project.OriginalPath);\n            }\n            catch\n            {\n                View.ShowError(\"Error\", \"Could not delete old project file.\");\n                return false;\n            }\n\n            _project.OriginalPath = Path.GetDirectoryName(opath) + Path.DirectorySeparatorChar + newname + ext;\n            if (!SaveProject(false))\n            {\n                _project.OriginalPath = opath;\n                SaveProject(false);\n                View.ShowError(\"Error\", \"Could not save the new project file.\");\n                return false;\n            }\n            View.SetTreeRoot(_project);\n\n            return true;\n        }\n        \n        public bool SaveProject(bool saveAs)\n        {\n            // Do we need file name?\n            if (saveAs || string.IsNullOrEmpty(_project.OriginalPath))\n            {\n                string newFilePath = _project.OriginalPath;\n                if (!View.AskSaveName(ref newFilePath, null))\n                    return false;\n\n                _project.OriginalPath = newFilePath;\n\t\t\t\tView.SetTreeRoot(_project);\n            }\n\n            // Do the save.\n            ProjectDirty = false;\n            var parser = new PipelineProjectParser(this, _project);\n            parser.SaveProject();\n\n            // Note: This is where a project loaded via 'new project' or 'import project' \n            //       get recorded into PipelineSettings because up until this point they did not\n            //       exist as files on disk.\n            PipelineSettingsMgr.Current.AddProjectHistory(_project.OriginalPath);\n            PipelineSettingsMgr.Settings.StartupProject = _project.OriginalPath;\n            PipelineSettingsMgr.Current.Save();\n\n            return true;\n        }\n\n        public void Build(bool rebuild)\n        {\n            var commands = string.Format(\"/@:\\\"{0}\\\" {1}\", _project.OriginalPath, rebuild ? \"/rebuild\" : string.Empty);\n\n            if (SingleThread)\n                commands += \" /singleThread\";\n\n            BuildCommand(_project.ContentItems, commands);\n        }\n\n        public void RebuildItems(IEnumerable<IProjectItem> items)\n        {\n            // Make sure we save first!\n            if (!AskSaveProject())\n                return;\n\n            // Create a unique file within the same folder as\n            // the normal project to store this incremental build.\n            var uniqueName = Guid.NewGuid().ToString();\n            var tempPath = Path.Combine(Path.GetDirectoryName(_project.OriginalPath), uniqueName);\n\n            // Write the incremental project file limiting the\n            // content to just the files we want to rebuild.\n            using (var io = File.CreateText(tempPath))\n            {\n                var parser = new PipelineProjectParser(this, _project);\n                parser.SaveProject(io, (i) => !items.Contains(i));\n            }\n\n            // Run the build the command.\n            var commands = string.Format(\"/@:\\\"{0}\\\" /rebuild /incremental\", tempPath);\n\n            if (SingleThread)\n                commands += \" /singleThread\";\n\n            BuildCommand(items, commands);\n\n            // Cleanup the temp file once we're done.\n            _buildTask.ContinueWith((e) => File.Delete(tempPath));\n        }\n\n        private void BuildCommand(IEnumerable<IProjectItem> items, string commands)\n        {\n            Debug.Assert(_buildTask == null || _buildTask.IsCompleted, \"The previous build wasn't completed!\");\n\n            // Make sure we save first!\n            if (!AskSaveProject())\n                return;\n\n            if (OnBuildStarted != null)\n                OnBuildStarted();\n\n            View.OutputClear();\n            View.OutputPopulateAssets(_project, items);\n\n            _buildTask = Task.Factory.StartNew(() => DoBuild(commands));\n            if (OnBuildFinished != null)\n                _buildTask.ContinueWith((e) => OnBuildFinished());\n        }\n\n        public void Clean()\n        {\n            Debug.Assert(_buildTask == null || _buildTask.IsCompleted, \"The previous build wasn't completed!\");\n\n            // Make sure we save first!\n            if (!AskSaveProject())\n                return;\n\n            if (OnBuildStarted != null)\n                OnBuildStarted();\n\n            View.OutputClear();\n            View.OutputPopulateAssets(_project, _project.ContentItems);\n\n            string commands = string.Format(\"/@:\\\"{0}\\\" \", _project.OriginalPath);\n            commands += \" /clean\";\n\n            //commands += string.Format(\" /intermediateDir:\\\"{0}\\\" /outputDir:\\\"{1}\\\"\", _project.IntermediateDir, _project.OutputDir);\n\n            if (SingleThread)\n                commands += \" /singleThread\";\n\n            _buildTask = Task.Factory.StartNew(() => DoBuild(commands));\n            if (OnBuildFinished != null)\n                _buildTask.ContinueWith((e) => OnBuildFinished());          \n        }\n\n        private string FindMGCB()\n        {\n            foreach (var root in _mgcbSearchPaths)\n            {\n                var mgcbPath = Path.Combine(root, \"MGCB.exe\");\n                if (File.Exists(mgcbPath))\n                    return Path.GetFullPath(mgcbPath);\n            }\n\n            throw new FileNotFoundException(\"MGCB.exe is not in the search path!\");\n        }\n\n        private void DoBuild(string commands)\n        {\n            Encoding encoding;\n            try\n            {\n                encoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage);\n            }\n            catch (NotSupportedException)\n            {\n                encoding = Encoding.UTF8;\n            }\n            catch (ArgumentException)\n            {\n                encoding = Encoding.UTF8;\n            }\n            try\n            {\n                // Prepare the process.\n                _buildProcess = View.CreateProcess(FindMGCB(), commands);\n                _buildProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(_project.OriginalPath);\n                _buildProcess.StartInfo.CreateNoWindow = true;\n                _buildProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;\n                _buildProcess.StartInfo.UseShellExecute = false;\n                _buildProcess.StartInfo.RedirectStandardOutput = true;\n                _buildProcess.StartInfo.StandardOutputEncoding = encoding;\n                _buildProcess.OutputDataReceived += (sender, args) => View.OutputAppend(args.Data);\n\n                // Fire off the process.\n                _buildProcess.Start();\n                _buildProcess.BeginOutputReadLine();\n                _buildProcess.WaitForExit();\n            }\n            catch (Exception ex)\n            {\n                // If we got a message assume it has everything the user needs to know.\n                if (!string.IsNullOrEmpty(ex.Message))\n                    View.OutputAppend(\"Build failed:  \" + ex.Message);\n                else\n                {\n                    // Else we need to get verbose.\n                    View.OutputAppend(\"Build failed:\" + Environment.NewLine);\n                    View.OutputAppend(ex.ToString());\n                }\n            }\n\n            // Clear the process pointer, so that cancel\n            // can run after we've already finished.\n            lock (_buildTask)\n                _buildProcess = null;\n        }\n\n        public void CancelBuild()\n        {\n            if (_buildTask == null || _buildTask.IsCompleted)\n                return;\n\n            lock (_buildTask)\n            {\n                if (_buildProcess == null)\n                    return;\n\n                _buildProcess.Kill();\n                View.OutputAppend(\"Build terminated!\" + Environment.NewLine);\n            }\n        }\n\n        /// <summary>\n        /// Prompt the user if they wish to save the project.\n        /// Save it if yes is chosen.\n        /// Return true if yes or no is chosen.\n        /// Return false if cancel is chosen.\n        /// </summary>\n        private bool AskSaveProject()\n        {\n            // If the project is not dirty \n            // then we can simply skip it.\n            if (!ProjectDirty)\n                return true;\n\n            // Ask the user if they want to save or cancel.\n            var result = View.AskSaveOrCancel();\n\n            // Did we cancel the exit?\n            if (result == AskResult.Cancel)\n                return false;\n\n            // Did we want to skip saving?\n            if (result == AskResult.No)\n                return true;\n\n            return SaveProject(false);\n        }\n\n        private void UpdateTree()\n        {\n            View.BeginTreeUpdate();\n\n            if (_project == null || string.IsNullOrEmpty(_project.OriginalPath))\n                View.SetTreeRoot(null);\n            else\n            {\n                View.SetTreeRoot(_project);\n\n                foreach (var item in _project.ContentItems)\n                    View.AddTreeItem(item);\n            }            \n\n            View.EndTreeUpdate();\n        }\n\n        public bool Exit()\n        {\n            // Can't exit if we're building!\n            if (ProjectBuilding)\n            {\n                View.ShowMessage(\"You cannot exit while the project is building!\");\n                return false;\n            }\n\n            // Make sure we give the user a chance to\n            // save the project if they need too.\n            return AskSaveProject();\n        }\n\n        public void Include(string initialDirectory)\n        {\n            // Root the path to the project.\n            if (!Path.IsPathRooted(initialDirectory))\n                initialDirectory = Path.Combine(_project.Location, initialDirectory);\n            if (!initialDirectory.EndsWith(Path.DirectorySeparatorChar.ToString()))\n                initialDirectory += Path.DirectorySeparatorChar.ToString();\n\n            List<string> files;\n            if (!View.ChooseContentFile(initialDirectory, out files))\n                return;\n\n            Include(initialDirectory, files.ToArray());\n        }\n\n        private void Include(string initialDirectory, string[] f)\n        {\n            List<string> files = new List<string>();\n            files.AddRange(f);\n\n            List<string> sc = new List<string>(), dc = new List<string>();\n\n            for (int i = 0; i < files.Count; i++)\n            {\n                if (!files[i].StartsWith(initialDirectory))\n                {\n                    string newfile = Path.Combine(initialDirectory, Path.GetFileName(files[i]));\n\n                    if (File.Exists(newfile))\n                        continue;\n\n                    sc.Add(files[i]);\n                    dc.Add(newfile);\n                    files[i] = newfile;\n                }\n            }\n\n            if (files.Count == 0)\n                return;\n\n            try\n            {\n                for (int i = 0; i < sc.Count; i++)\n                    File.Copy(sc[i], dc[i]);\n\n                var action = new IncludeAction(this, files);\n                if(action.Do())\n                    _actionStack.Add(action);  \n            }\n            catch\n            {\n                View.ShowError(\"Error While Copying Files\", \"An error occurred while the files were being copied, aborting.\");\n            }\n        }\n\n        public void IncludeFolder(string initialDirectory)\n        {\n            // Root the path to the project.\n            if (!Path.IsPathRooted(initialDirectory))\n                initialDirectory = Path.Combine(_project.Location, initialDirectory);\n            if (!initialDirectory.EndsWith(Path.DirectorySeparatorChar.ToString()))\n                initialDirectory += Path.DirectorySeparatorChar.ToString();\n\n            string folder;\n            if (!View.ChooseContentFolder(initialDirectory, out folder))\n                return;\n\n            IncludeFolder(initialDirectory, new []{ folder });\n        }\n\n        public void IncludeFolder(string initialDirectory, string[] dirs)\n        {\n            List<string> ffiles = new List<string>();\n            List<string> ddirectories = new List<string>();\n\n            List<string> sc = new List<string>(), dc = new List<string>();\n\n            foreach (string fol in dirs)\n            {\n                List<string> files = new List<string>();\n                List<string> directories = new List<string>();\n\n                string folder = fol;\n\n                if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString()))\n                    folder += Path.DirectorySeparatorChar;\n\n                files.AddRange(GetFiles(folder));\n                directories.Add(folder);\n                directories.AddRange(GetDirectories(folder));\n\n                if (!folder.StartsWith(initialDirectory))\n                {\n                    string nd = folder.Replace(folder, initialDirectory + (new DirectoryInfo(folder)).Name + Path.DirectorySeparatorChar);\n                    \n                    for (int i = 0; i < directories.Count; i++)\n                        ddirectories.Add(directories[i].Replace(folder, initialDirectory + (new DirectoryInfo(folder)).Name + Path.DirectorySeparatorChar));\n\n                    for (int i = 0; i < files.Count; i++)\n                        ffiles.Add(files[i].Replace(folder, initialDirectory + (new DirectoryInfo(folder)).Name + Path.DirectorySeparatorChar));\n\n                    sc.Add(folder);\n                    dc.Add(nd);\n                }\n                else\n                {\n                    ddirectories.AddRange(directories);\n                    ffiles.AddRange(files);\n                }\n            }\n\n            try\n            {\n                for (int i = 0; i < sc.Count; i++)\n                    DirectoryCopy(sc[i], dc[i]);\n\n                var action2 = new IncludeAction(this, ffiles, ddirectories);\n                if (action2.Do())\n                    _actionStack.Add(action2);\n            }\n            catch\n            {\n                View.ShowError(\"Error While Copying Files\", \"An error occurred while the directories were being copied, aborting.\");\n            }\n        }\n\n        private static void DirectoryCopy(string sourceDirName, string destDirName)\n        {\n            DirectoryInfo dir = new DirectoryInfo(sourceDirName);\n            DirectoryInfo[] dirs = dir.GetDirectories();\n\n            if (!Directory.Exists(destDirName))\n                Directory.CreateDirectory(destDirName);\n\n            FileInfo[] files = dir.GetFiles();\n            foreach (FileInfo file in files)\n            {\n                string temppath = Path.Combine(destDirName, file.Name);\n                file.CopyTo(temppath, false);\n            }\n\n            foreach (DirectoryInfo subdir in dirs)\n            {\n                string temppath = Path.Combine(destDirName, subdir.Name);\n                DirectoryCopy(subdir.FullName, temppath);\n            }\n        }\n\n        public void Move (string[] paths, string[] newnames, FileType[] types)\n        {\n            var action = new MoveAction(this, paths, newnames, types);\n            if(action.Do())\n                _actionStack.Add(action);\n        }\n        \n        public void Include(IEnumerable<string> inputfiles, IEnumerable<string> inputfolders)\n        {\n            var action = new PipelineController.IncludeAction(this, inputfiles, inputfolders);\n            action.Do();\n            _actionStack.Add(action);\n\n            //// Root the path to the project.\n            //if (!Path.IsPathRooted(initialDirectory))\n            //    initialDirectory = Path.Combine(_project.Location, initialDirectory);\n            //if (!initialDirectory.EndsWith(Path.DirectorySeparatorChar.ToString()))\n            //    initialDirectory += Path.DirectorySeparatorChar.ToString();\n\n            //IncludeFolder(initialDirectory, folders);\n            //Include(initialDirectory, files);\n        }\n\n        private List<string> GetFiles(string folder)\n        {\n            List<string> ret = new List<string>();\n\n            string[] directories = Directory.GetDirectories(folder);\n            foreach (string d in directories)\n                ret.AddRange(GetFiles(d));\n\n            ret.AddRange(Directory.GetFiles(folder));\n\n            return ret;\n        }\n\n        private List<string> GetDirectories(string folder)\n        {\n            List<string> ret = new List<string>();\n\n            string[] directories = Directory.GetDirectories(folder);\n            foreach (string d in directories)\n            {\n                ret.Add(d);\n                ret.AddRange(GetDirectories(d));\n            }\n\n            return ret;\n        }\n\n        public void Exclude(IEnumerable<ContentItem> items, IEnumerable<string> folders)\n        {\n            var action = new ExcludeAction(this, items, folders);\n            if(action.Do())\n                _actionStack.Add(action);\n        }\n\n        public void NewItem(string name, string location, ContentItemTemplate template)\n        {\n            var action = new NewAction(this, name, location, template);\n            if(action.Do())\n                _actionStack.Add(action);\n        }\n\n        public void NewFolder(string name, string location)\n        {\n            string folder = Path.Combine(location, name);\n\n            if (!Path.IsPathRooted(folder))\n                folder = _project.Location + Path.DirectorySeparatorChar + folder;\n\n            try\n            {\n                if (!Directory.Exists(folder))\n                    Directory.CreateDirectory(folder);\n            }\n            catch\n            {\n                View.ShowError (\"Error While Creating a Directory\", \"An error has occured while the directory: \\\"\" + folder + \"\\\" was beeing created, aborting...\");\n                return;\n            }\n\n            var action = new IncludeAction(this, null, new List<string> { folder });\n            if(action.Do())\n                _actionStack.Add(action);\n        }\n\n        public void AddAction(IProjectAction action)\n        {\n            _actionStack.Add(action);\n        }\n\n        public IProjectItem GetItem(string originalPath)\n        {\n            if (_project.OriginalPath.Equals(originalPath, StringComparison.OrdinalIgnoreCase))\n                return _project;\n\n            foreach (var i in _project.ContentItems)\n            {\n                if (string.Equals(i.OriginalPath, originalPath, StringComparison.OrdinalIgnoreCase))\n                {\n                    return i;\n                }\n            }\n\n            return null;\n        }\n\n        #region Undo, Redo\n\n        private readonly ActionStack _actionStack;\n\n        public event CanUndoRedoChanged OnCanUndoRedoChanged\n        {\n            add { _actionStack.OnCanUndoRedoChanged += value; }\n            remove { _actionStack.OnCanUndoRedoChanged -= value; } \n        }\n\n        public bool CanUndo { get { return _actionStack.CanUndo; } }\n\n        public bool CanRedo { get { return _actionStack.CanRedo; } }\n\n        public void Undo()\n        {\n            _actionStack.Undo();\n        }\n\n        public void Redo()\n        {\n            _actionStack.Redo();\n        }\n\n        #endregion\n\n        private void ResolveTypes()\n        {\n            PipelineTypes.Load(_project);\n            foreach (var i in _project.ContentItems)\n            {\n                i.Observer = this;\n                i.ResolveTypes();\n                View.UpdateProperties(i);\n            }\n\n            LoadTemplates(Path.Combine(_project.Location, \"MGTemplates\"));\n        }\n\n        private void LoadTemplates(string path)\n        {\n            if (!Directory.Exists(path))\n                return;\n\n            var files = Directory.GetFiles(path, \"*.template\", SearchOption.AllDirectories);\n            foreach (var f in files)\n            {\n                var lines = File.ReadAllLines(f);\n                if (lines.Length != 5)\n                    throw new Exception(\"Invalid template\");\n\n                var item = new ContentItemTemplate()\n                    {\n                        Label = lines[0],\n                        Icon = lines[1],\n                        ImporterName = lines[2],\n                        ProcessorName = lines[3],\n                        TemplateFile = lines[4],\n                    };\n                \n                if (_templateItems.Any(i => i.Label == item.Label))\n                    continue;\n\n                var fpath = Path.GetDirectoryName(f);\n                item.TemplateFile = Path.GetFullPath(Path.Combine(fpath, item.TemplateFile));\n\n                View.OnTemplateDefined(item);\n\n                _templateItems.Add(item);\n            }\n        }\n\n        public string GetFullPath(string filePath)\n        {\n            if (_project == null || Path.IsPathRooted(filePath))\n            {\n                if (filePath.Length == 2 && filePath[0] != '/')\n                    filePath += \"\\\\\";\n                return filePath;\n            }\n\n            filePath = filePath.Replace(\"/\", Path.DirectorySeparatorChar.ToString());\n            if (filePath.StartsWith(\"\\\\\"))\n                filePath = filePath.Substring(1);\n\n            return _project.Location + Path.DirectorySeparatorChar + filePath;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineProject.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Content.Pipeline.Editor\n{\n    public class PipelineProject : IProjectItem\n    {\n        public string OriginalPath { get; set; }\n\n        public List<ContentItem> ContentItems { get; private set; }\n\n        public string OutputDir { get; set; }\n\n        public string IntermediateDir { get; set; }\n\n        public List<string> References { get; set; }\n\n        public List<Package> PackageReferences { get; set; }\n\n        public TargetPlatform Platform { get; set; }\n\n        public GraphicsProfile Profile { get; set; }\n\n        public string Config { get; set; }\n\n        public bool Compress { get; set; }\n\n        public CompressionMethod Compression { get; set; }\n\n        #region IPipelineItem\n\n        public string Name\n        {\n            get\n            {\n                if (string.IsNullOrEmpty(OriginalPath))\n                    return \"\";\n\n                return System.IO.Path.GetFileNameWithoutExtension(OriginalPath);\n            }\n        }\n\n        public string Location\n        {\n            get\n            {\n                if (string.IsNullOrEmpty(OriginalPath))\n                    return \"\";\n\n                return Path.GetDirectoryName(OriginalPath);\n            }\n        }\n\n        [Browsable(false)]\n        public string Icon { get; set; }\n\n        [Browsable(false)]\n        public bool Exists { get; set; }\n\n        #endregion\n\n        public PipelineProject()\n        {\n            ContentItems = new List<ContentItem>();\n            References = new List<string>();\n            PackageReferences = new List<Package>();\n            OutputDir = \"bin\";\n            IntermediateDir = \"obj\";\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineProjectParser.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Xml;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Content.Pipeline.Editor\n{\n    public class PipelineProjectParser\n    {\n        #region Other Data\n\n        private readonly PipelineProject _project;\n        private readonly IContentItemObserver _observer;\n        private readonly OpaqueDataDictionary _processorParams = new OpaqueDataDictionary();\n        \n        private string _processor;\n        \n        #endregion\n\n        #region CommandLineParameters\n\n        [CommandLineParameter(\n            Name = \"outputDir\",\n            ValueName = \"directoryPath\",\n            Description = \"The directory where all content is written.\")]\n        public string OutputDir { set { _project.OutputDir = value; } }\n\n        [CommandLineParameter(\n            Name = \"intermediateDir\",\n            ValueName = \"directoryPath\",\n            Description = \"The directory where all intermediate files are written.\")]\n        public string IntermediateDir { set { _project.IntermediateDir = value; } }\n\n        [CommandLineParameter(\n            Name = \"reference\",\n            ValueName = \"assemblyNameOrFile\",\n            Description = \"Adds an assembly reference for resolving content importers, processors, and writers.\")]\n        public List<string> References \n        {\n            set { _project.References = value; }\n            get { return _project.References; }\n        }\n\n        [CommandLineParameter(\n            Name = \"packageReference\",\n            ValueName = \"package\",\n            Description = \"Adds a nuget package reference for resolving content importers, processors, and writers.\")]\n        public void SetPackageReference(string packageReference)\n        {\n            Package package = Package.Parse(packageReference);\n            _project.PackageReferences.Add(package);\n        }\n\n        [CommandLineParameter(\n            Name = \"platform\",\n            ValueName = \"targetPlatform\",\n            Description = \"Set the target platform for this build.  Defaults to Windows.\")]\n        public TargetPlatform Platform { set { _project.Platform = value; } }\n\n        [CommandLineParameter(\n            Name = \"profile\",\n            ValueName = \"graphicsProfile\",\n            Description = \"Set the target graphics profile for this build.  Defaults to HiDef.\")]\n        public GraphicsProfile Profile { set { _project.Profile = value; } }\n\n        [CommandLineParameter(\n            Name = \"config\",\n            ValueName = \"string\",\n            Description = \"The optional build config string from the build system.\")]\n        public string Config { set { _project.Config = value; } }\n\n        #pragma warning disable 414\n\n        // Allow a MGCB file containing the /rebuild parameter to be imported without error\n        [CommandLineParameter(\n            Name = \"rebuild\",\n            ValueName = \"bool\",\n            Description = \"Forces a rebuild of the project.\")]\n        public bool Rebuild { set { _rebuild = value; } }\n        private bool _rebuild;\n\n        // Allow a MGCB file containing the /clean parameter to be imported without error\n        [CommandLineParameter(\n            Name = \"clean\",\n            ValueName = \"bool\",\n            Description = \"Removes intermediate and output files.\")]\n        public bool Clean { set { _clean = value; } }\n        private bool _clean;\n\n        #pragma warning restore 414\n\n        [CommandLineParameter(\n            Name = \"compress\",\n            ValueName = \"bool\",\n            Description = \"Content files can be compressed for smaller file sizes.\")]\n        public bool Compress { set { _project.Compress = value; } }\n\n        [CommandLineParameter(\n            Name = \"compression\",\n            ValueName = \"string\",\n            Description = \"The compression method.\")]\n        public CompressionMethod Compression { set { _project.Compression = value; } }\n\n        [CommandLineParameter(\n            Name = \"importer\",\n            ValueName = \"className\",\n            Description = \"Defines the class name of the content importer for reading source content.\")]\n        public string Importer;\n\n        [CommandLineParameter(\n            Name = \"processor\",\n            ValueName = \"className\",\n            Description = \"Defines the class name of the content processor for processing imported content.\")]\n        public string Processor\n        {\n            get { return _processor; }\n            set\n            {\n                _processor = value;\n                _processorParams.Clear();\n            }\n        }\n\n        [CommandLineParameter(\n            Name = \"processorParam\",\n            ValueName = \"name=value\",\n            Description = \"Defines a parameter name and value to set on a content processor.\")]\n        public void AddProcessorParam(string nameAndValue)\n        {\n            var keyAndValue = nameAndValue.Split('=');\n            if (keyAndValue.Length != 2)\n            {\n                // Do we error out or something?\n                return;\n            }\n\n            _processorParams.Remove(keyAndValue[0]);\n            _processorParams.Add(keyAndValue[0], keyAndValue[1]);\n        }\n\n        [CommandLineParameter(\n            Name = \"build\",\n            ValueName = \"sourceFile\",\n            Description = \"Build the content source file using the previously set switches and options.\")]\n        public void OnBuild(string sourceFile)\n        {\n            AddContent(sourceFile, skipDuplicates: false, inorder: false, out int index);\n        }\n\n        public bool AddContent(string sourceFile, bool skipDuplicates, bool inorder, out int index)\n        {\n            string link = null;\n            if (sourceFile.Contains(\";\"))\n            {\n                var split = sourceFile.Split(';');\n                sourceFile = split[0];\n\n                if (split.Length > 0)\n                    link = split[1];\n            }\n\n            // Make sure the source file is relative to the project.\n            var projectDir = ProjectDirectory + Path.DirectorySeparatorChar;\n\n            sourceFile = PathHelper.GetRelativePath(projectDir, sourceFile);\n\n            if (sourceFile.Contains(\"..\"))\n                throw new InvalidOperationException(\"Content file is not rooted in content path \\\"\"+ projectDir+\"\\\"\");\n\n            // Do we have a duplicate?\n            var previous = _project.ContentItems.FindIndex(e => string.Equals(e.OriginalPath, sourceFile, StringComparison.InvariantCultureIgnoreCase));\n            if (previous != -1)\n            {\n                if (skipDuplicates)\n                {\n                    index = previous;\n                    return false;\n                }\n\n                // Replace the duplicate.\n                _project.ContentItems.RemoveAt(previous);\n            }\n\n            // Create the item for processing later.\n            var item = new ContentItem\n            {\n                Observer = _observer,\n                BuildAction = BuildAction.Build,\n                OriginalPath = sourceFile,\n                OutputFile = link,\n                ImporterName = Importer,\n                ProcessorName = Processor,\n                ProcessorParams = new OpaqueDataDictionary(),\n                Exists = File.Exists(projectDir + sourceFile)\n            };\n            index = _project.ContentItems.Count;\n            if (inorder)\n            {\n                index = _project.ContentItems.BinarySearch(item, new ContentItemPathComparer());\n                if (index < 0)\n                    index = ~index;\n            }\n            _project.ContentItems.Insert(index, item);\n\n            // Copy the current processor parameters blind as we\n            // will validate and remove invalid parameters during\n            // the build process later.\n            foreach (var pair in _processorParams)\n                item.ProcessorParams.Add(pair.Key, pair.Value);\n\n            return true;\n        }\n\n        [CommandLineParameter(\n            Name = \"copy\",\n            ValueName = \"sourceFile\",\n            Description = \"Copy the content source file verbatim to the output directory.\")]\n        public void OnCopy(string sourceFile)\n        {\n            string link = null;\n            if (sourceFile.Contains(\";\"))\n            {\n                var split = sourceFile.Split(';');\n                sourceFile = split[0];\n\n                if (split.Length > 0)\n                    link = split[1];\n            }\n\n            // Make sure the source file is relative to the project.\n            var projectDir = ProjectDirectory + Path.DirectorySeparatorChar;\n\n            sourceFile = PathHelper.GetRelativePath(projectDir, sourceFile);\n\n            if (sourceFile.Contains(\"..\"))\n                throw new InvalidOperationException(\"Content file is not rooted in content path \\\"\" + projectDir + \"\\\"\");\n\n            // Remove duplicates... keep this new one.\n            var previous = _project.ContentItems.FirstOrDefault(e => e.OriginalPath.Equals(sourceFile));\n            if (previous != null)\n                _project.ContentItems.Remove(previous);\n\n            // Create the item for processing later.\n            var item = new ContentItem\n            {\n                BuildAction = BuildAction.Copy,\n                OriginalPath = sourceFile,\n                OutputFile = link,\n                ProcessorParams = new OpaqueDataDictionary(),\n                Exists = File.Exists(projectDir + sourceFile)\n            };\n            _project.ContentItems.Add(item);\n\n            // Copy the current processor parameters blind as we\n            // will validate and remove invalid parameters during\n            // the build process later.\n            foreach (var pair in _processorParams)\n                item.ProcessorParams.Add(pair.Key, pair.Value);\n        }\n\n        #endregion\n\n        public PipelineProjectParser(IContentItemObserver observer, PipelineProject project)\n        {\n            _observer = observer;\n            _project = project;\n        }        \n\n        public void OpenProject(string projectFilePath, MGBuildParser.ErrorCallback errorCallback)\n        {\n            _project.ContentItems.Clear();\n\n            // Store the file name for saving later.\n            _project.OriginalPath = projectFilePath;\n\n            var parser = new MGBuildParser(this);\n            parser.Title = \"Pipeline\";\n\n            if (errorCallback != null)\n                parser.OnError += errorCallback;\n\n            var commands = new string[]\n            {\n                string.Format(\"/@:{0}\", projectFilePath),\n            };\n            parser.Parse(commands);\n        }\n\n        public void SaveProject()\n        {\n            using (var io = File.CreateText(_project.OriginalPath))\n                SaveProject(io, null);\n        }\n        \n        public void SaveProject(TextWriter io, Func<ContentItem, bool> filterItem)\n        {\n            const string lineFormat = \"/{0}:{1}\";\n            const string processorParamFormat = \"{0}={1}\";\n            string line;\n\n            line = FormatDivider(\"Global Properties\");\n            io.WriteLine(line);\n\n            line = string.Format(lineFormat, \"outputDir\", _project.OutputDir);\n            io.WriteLine(line);\n\n            line = string.Format(lineFormat, \"intermediateDir\", _project.IntermediateDir);\n            io.WriteLine(line);\n\n            line = string.Format(lineFormat, \"platform\", _project.Platform);\n            io.WriteLine(line);\n\n            line = string.Format(lineFormat, \"config\", _project.Config);\n            io.WriteLine(line);\n\n            line = string.Format(lineFormat, \"profile\", _project.Profile);\n            io.WriteLine(line);\n\n            line = string.Format(lineFormat, \"compress\", _project.Compress);\n            io.WriteLine(line);\n\n            if (_project.Compression != CompressionMethod.Default)\n            {\n                line = string.Format(lineFormat, \"compression\", _project.Compression);\n                io.WriteLine(line);\n            }\n\n            line = FormatDivider(\"References\");\n            io.WriteLine(line);\n\n            foreach (string i in _project.References)\n            {\n                line = string.Format(lineFormat, \"reference\", i);\n                io.WriteLine(line);\n            }\n\n            foreach (Package i in _project.PackageReferences)\n            {\n                line = string.Format(lineFormat, \"packageReference\", i.ToString());\n                io.WriteLine(line);\n            }\n\n            line = FormatDivider(\"Content\");\n            io.WriteLine(line);\n            \n            foreach (var i in _project.ContentItems)\n            {\n                // Reject any items that don't pass the filter.              \n                if (filterItem != null && filterItem(i))\n                    continue;\n\n                // Wrap content item lines with a begin comment line\n                // to make them more cohesive (for version control).                  \n                line = string.Format(\"#begin {0}\", i.OriginalPath);\n                io.WriteLine(line);\n\n                if (i.BuildAction == BuildAction.Copy)\n                {\n                    string buildValue = i.OriginalPath;\n                    if (i.OutputFile != null)\n                        buildValue += \";\" + i.OutputFile;\n                    line = string.Format(lineFormat, \"copy\", buildValue);\n                    io.WriteLine(line);\n                    io.WriteLine();\n                }\n                else\n                {\n\n                    // Write importer.\n                    {\n                        line = string.Format(lineFormat, \"importer\", i.ImporterName);\n                        io.WriteLine(line);\n                    }\n\n                    // Write processor.\n                    {\n                        line = string.Format(lineFormat, \"processor\", i.ProcessorName);\n                        io.WriteLine(line);\n                    }\n\n                    // Write processor parameters.\n                    {\n                        if (i.Processor == PipelineTypes.MissingProcessor)\n                        {\n                            // Could still be missing the real processor.\n                            // If so, write the string parameters from import.\n                            foreach (var j in i.ProcessorParams)\n                            {\n                                line = string.Format(lineFormat, \"processorParam\", string.Format(processorParamFormat, j.Key, j.Value));\n                                io.WriteLine(line);\n                            }\n                        }\n                        else\n                        {\n                            // Otherwise, write only values which are defined by the real processor.\n                            foreach (var j in i.Processor.Properties)\n                            {\n                                object value = null;\n                                if (i.ProcessorParams.ContainsKey(j.Name))\n                                    value = i.ProcessorParams[j.Name];\n\n                                // JCF: I 'think' writting an empty string for null would be appropriate but to be on the safe side\n                                //      im just not writting the value at all.\n                                if (value != null)\n                                {\n                                    var converter = PipelineTypes.FindConverter(value.GetType());\n                                    var valueStr = converter.ConvertTo(null, CultureInfo.InvariantCulture, value, typeof(string));\n                                    line = string.Format(lineFormat, \"processorParam\", string.Format(processorParamFormat, j.Name, valueStr));\n                                    io.WriteLine(line);\n                                }\n                            }\n                        }\n                    }\n\n                    string buildValue = i.OriginalPath;\n                    if (i.OutputFile != null)\n                        buildValue += \";\" + i.OutputFile;\n                    line = string.Format(lineFormat, \"build\", buildValue);\n                    io.WriteLine(line);\n                    io.WriteLine();\n                }\n            }\n        }\n\n        public void ImportProject(string projectFilePath)\n        {\n            _project.OriginalPath = projectFilePath.Remove(projectFilePath.LastIndexOf('.')) + \".mgcb\";\n\n            using (XmlReader io = XmlReader.Create(File.OpenText(projectFilePath)))\n            {\n                while (io.Read())\n                {\n                    if (io.NodeType == XmlNodeType.Element)\n                    {\n                        var buildAction = io.LocalName;\n                        if (buildAction.Equals(\"Reference\"))\n                        {\n                            string include, hintPath;\n                            ReadIncludeReference(io, out include, out hintPath);\n\n                            if (!string.IsNullOrEmpty(hintPath) &&\n                                hintPath.IndexOf(\"microsoft\", StringComparison.CurrentCultureIgnoreCase) == -1 &&\n                                hintPath.IndexOf(\"monogamecontentprocessors\", StringComparison.CurrentCultureIgnoreCase) == -1)\n                            {\n                                _project.References.Add(hintPath);\n                            }\n                        }\n                        else if (buildAction.Equals(\"Content\") || buildAction.Equals(\"None\"))\n                        {\n                            string include, copyToOutputDirectory;\n                            ReadIncludeContent(io, out include, out copyToOutputDirectory);\n\n                            if (!string.IsNullOrEmpty(copyToOutputDirectory) && !copyToOutputDirectory.Equals(\"Never\"))\n                            {\n                                var sourceFilePath = Path.GetDirectoryName(projectFilePath);\n                                sourceFilePath += \"\\\\\" + include;\n\n                                OnCopy(sourceFilePath);\n                            }\n                        }\n                        else if (buildAction.Equals(\"Compile\"))\n                        {\n                            string include, name, importer, processor;\n                            string[] processorParams;\n                            ReadIncludeCompile(io, out include, out name, out importer, out processor, out processorParams);\n\n                            Importer = importer;\n                            Processor = processor;\n                            if (processorParams != null)\n                            {\n                                foreach (var i in processorParams)\n                                    AddProcessorParam(i);\n                            }\n\n                            var sourceFilePath = Path.GetDirectoryName(projectFilePath);\n                            sourceFilePath += \"\\\\\" + include;\n\n                            OnBuild(sourceFilePath);\n                        }\n                    }\n                }\n            }\n        }\n\n        private string ProjectDirectory\n        {\n            get\n            {\n                return _project.Location;                \n            }\n        }\n\n        private void ReadIncludeReference(XmlReader io, out string include, out string hintPath)\n        {\n            include = io.GetAttribute(\"Include\").Unescape();            \n            hintPath = null;\n\n            if (!io.IsEmptyElement)\n            {\n                var depth = io.Depth;\n                for (io.Read(); io.Depth != depth; io.Read())\n                {\n                    // process sub nodes\n                    if (io.IsStartElement(\"HintPath\"))\n                    {\n                        io.Read();\n                        hintPath = io.Value.Unescape();\n                    }\n                }\n            }\n        }\n\n        private void ReadIncludeContent(XmlReader io, out string include, out string copyToOutputDirectory)\n        {\n            copyToOutputDirectory = null;\n            include = io.GetAttribute(\"Include\").Unescape();\n\n            if (!io.IsEmptyElement)\n            {\n                var depth = io.Depth;\n                for (io.Read(); io.Depth != depth; io.Read())\n                {\n                    // process sub nodes here.\n\n                    if (io.IsStartElement())\n                    {\n                        switch (io.LocalName)\n                        {\n                            case \"CopyToOutputDirectory\":\n                                io.Read();\n                                copyToOutputDirectory = io.Value.Unescape();\n                                break;\n                        }\n                    }\n                }\n            }\n        }\n\n        private void ReadIncludeCompile(XmlReader io,\n                                        out string include,\n                                        out string name,\n                                        out string importer,\n                                        out string processor,\n                                        out string[] processorParams)\n        {\n            name = null;\n            importer = null;\n            processor = null;\n\n            include = io.GetAttribute(\"Include\").Unescape();\n            var parameters = new List<string>();\n\n            if (!io.IsEmptyElement)\n            {\n                var depth = io.Depth;\n                for (io.Read(); io.Depth != depth; io.Read())\n                {\n                    // process sub nodes here.\n\n                    if (io.IsStartElement())\n                    {\n                        switch (io.LocalName)\n                        {\n                            case \"Name\":\n                                io.Read();\n                                name = io.Value.Unescape();\n                                break;\n                            case \"Importer\":\n                                io.Read();\n                                importer = io.Value.Unescape();\n                                break;\n                            case \"Processor\":\n                                io.Read();\n                                processor = io.Value.Unescape();\n                                break;\n                            default:\n                                if (io.LocalName.Contains(\"ProcessorParameters_\"))\n                                {\n                                    var line = io.LocalName.Replace(\"ProcessorParameters_\", \"\");\n                                    line += \"=\";\n                                    io.Read();\n                                    line += io.Value;\n                                    parameters.Add(line.Unescape());\n                                }\n                                break;\n                        }\n                    }\n                }\n            }\n\n            processorParams = parameters.ToArray();\n        }\n\n        private string FormatDivider(string label)\n        {\n            var commentFormat = Environment.NewLine + \"#----------------------------------------------------------------------------#\" + Environment.NewLine;\n\n            label = \" \" + label + \" \";\n            var src = commentFormat.Length / 2 - label.Length / 2;\n            var dst = src + label.Length;\n\n            return commentFormat.Substring(0, src) + label + commentFormat.Substring(dst);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineSettings.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.IsolatedStorage;\nusing System.Xml.Serialization;\n\nnamespace Content.Pipeline.Editor\n{\n    public class PipelineSettings\n    {\n        public List<string> ProjectHistory = new List<string>();\n        public string StartupProject;\n        public Microsoft.Xna.Framework.Point Size;\n        public int HSeparator, VSeparator;\n        public bool Maximized, FilterOutput;\n\n    }\n\n    public class PipelineSettingsMgr\n    {\n        private const string SettingsPath = \"Settings.xml\";\n        private IsolatedStorageFile _isoStore;\n\n        public bool IsInit;\n\n        public static PipelineSettingsMgr Current { get; private set; }\n        \n        public static PipelineSettings Settings { get; private set; }\n\n        static PipelineSettingsMgr()\n        {\n            Current = new PipelineSettingsMgr();\n            Settings = new PipelineSettings();\n        }\n        \n        public PipelineSettingsMgr()\n        {\n            _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);            \n        }\n\n        /// <summary>\n        /// If the project already exists in history, it will be moved to the end.\n        /// </summary>\n        public void AddProjectHistory(string file)\n        {\n            string cleanFile = file.Trim();\n            Settings.ProjectHistory.Remove(cleanFile);\n            Settings.ProjectHistory.Add(cleanFile);\n        }\n        \n        public void RemoveProjectHistory(string file)\n        {\n            string cleanFile = file.Trim();\n            Settings.ProjectHistory.Remove(cleanFile);\n        }\n\n        public void Clear()\n        {\n            Settings.ProjectHistory.Clear();\n            Settings.StartupProject = null;\n            Save();\n        }\n\n        public void Save()\n        {\n            FileMode mode = FileMode.CreateNew;\n            if (_isoStore.FileExists (SettingsPath)) \n\t\t\t\tmode = FileMode.Truncate;\n\n            using (Stream isoStream = new IsolatedStorageFileStream(SettingsPath, mode, _isoStore))\n            using (TextWriter writer = new StreamWriter(isoStream))\n            {\n                XmlSerializer serializer = new XmlSerializer(typeof(PipelineSettings));\n                serializer.Serialize(writer, Settings);\n            }\n        }\n\n        public void Load()\n\t\t{\n            if (_isoStore.FileExists(SettingsPath))\n            {\n                using (Stream isoStream = new IsolatedStorageFileStream(SettingsPath, FileMode.Open, _isoStore))\n                using (TextReader reader = new StreamReader(isoStream))\n                {\n                    XmlSerializer serializer = new XmlSerializer(typeof(PipelineSettings));\n                    Settings = (PipelineSettings)serializer.Deserialize(reader);\n                }\n            }\n\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/PipelineTypes.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nnamespace Content.Pipeline.Editor\n{\n    public class ImporterTypeDescription\n    {        \n        public string TypeName;\n        public string DisplayName;\n        public string DefaultProcessor;        \n        public IEnumerable<string> FileExtensions;\n        public Type OutputType;\n\n        public override string ToString()\n        {\n            return TypeName;\n        }\n\n        public override int GetHashCode()\n        {\n            return TypeName == null ? 0 : TypeName.GetHashCode();\n        }\n\n        public override bool Equals(object obj)\n        {\n            var other = obj as ImporterTypeDescription;\n            if (other == null)\n                return false;\n            \n            if (string.IsNullOrEmpty(other.TypeName) != string.IsNullOrEmpty(TypeName))\n                return false;\n\n            return TypeName.Equals(other.TypeName);\n        }\n    };\n\n    public class ProcessorTypeDescription\n    {\n        #region Supporting Types \n\n        public struct Property\n        {\n            public string Name;\n            public Type Type;\n            public object DefaultValue;\n\n            public override string ToString()\n            {\n                return Name;\n            }\n        }\n\n        public class ProcessorPropertyCollection : IEnumerable<Property>\n        {\n            private readonly Property[] _properties;\n\n            public ProcessorPropertyCollection(IEnumerable<Property> properties)\n            {\n                _properties = properties.ToArray();\n            }\n \n            public Property this[int index]\n            {\n                get\n                {\n                    return _properties[index];\n                }\n                set\n                {\n                    _properties[index] = value;\n                }\n            }\n\n            public Property this[string name]\n            {\n                get\n                {\n                    foreach (var p in _properties)\n                    {\n                        if (p.Name.Equals(name))\n                            return p;\n                    }\n\n                    throw new IndexOutOfRangeException();\n                }    \n            \n                set\n                {\n                    for (var i = 0; i < _properties.Length; i++)\n                    {\n                        var p = _properties[i];\n                        if (p.Name.Equals(name))\n                        {\n                            _properties[i] = value;\n                            return;\n                        }\n\n                    }\n\n                    throw new IndexOutOfRangeException();\n                }\n            }\n\n            public bool Contains(string name)\n            {\n                return _properties.Any(e => e.Name == name);\n            }\n\n            public IEnumerator<Property> GetEnumerator()\n            {\n                return _properties.AsEnumerable().GetEnumerator();\n            }\n\n            IEnumerator IEnumerable.GetEnumerator()\n            {\n                return _properties.GetEnumerator();\n            }\n        }\n\n        #endregion\n        \n        public string TypeName;\n        public string DisplayName;\n        public ProcessorPropertyCollection Properties;\n        public Type InputType;\n\n        public override string ToString()\n        {\n            return TypeName;\n        }\n    };\n\n    internal class PipelineTypes\n    {\n        [DebuggerDisplay(\"ImporterInfo: {Type.Name}\")]\n        private struct ImporterInfo\n        {\n            public ContentImporterAttribute Attribute;\n            public Type Type;\n        }\n\n        [DebuggerDisplay(\"ProcessorInfo: {Type.Name}\")]\n        private struct ProcessorInfo\n        {\n            public ContentProcessorAttribute Attribute;\n            public Type Type;\n        }\n\n        private static List<ImporterInfo> _importers;\n        private static List<ProcessorInfo> _processors;\n\n        public static ImporterTypeDescription[] Importers { get; private set; }\n        public static ProcessorTypeDescription[] Processors { get; private set; }\n\n        public static ImporterTypeDescription NullImporter { get; private set; }\n        public static ProcessorTypeDescription NullProcessor { get; private set; }\n\n        public static ImporterTypeDescription MissingImporter { get; private set; }\n        public static ProcessorTypeDescription MissingProcessor { get; private set; }\n\n        public static TypeConverter.StandardValuesCollection ImportersStandardValuesCollection { get; private set; }\n        public static TypeConverter.StandardValuesCollection ProcessorsStandardValuesCollection { get; private set; }\n\n        private static readonly Dictionary<string, string> _oldNameRemap = new Dictionary<string, string>()\n            {\n                { \"MGMaterialProcessor\", \"MaterialProcessor\" },\n                { \"MGSongProcessor\", \"SongProcessor\" },\n                { \"MGSoundEffectProcessor\", \"SoundEffectProcessor\" },\n                { \"MGSpriteFontDescriptionProcessor\", \"FontDescriptionProcessor\" },\n                { \"MGSpriteFontTextureProcessor\", \"FontTextureProcessor\" },\n                { \"MGTextureProcessor\", \"TextureProcessor\" },\n                { \"MGEffectProcessor\", \"EffectProcessor\" },\n            };\n\n        private static string RemapOldNames(string name)\n        {\n            if (_oldNameRemap.ContainsKey(name))\n                return _oldNameRemap[name];\n\n            return name;\n        }\n\n        static PipelineTypes()\n        {\n            MissingImporter = new ImporterTypeDescription()\n                {\n                    DisplayName = \"Invalid / Missing Importer\",\n                };\n\n            MissingProcessor = new ProcessorTypeDescription()\n                {\n                    DisplayName = \"Invalid / Missing Processor\",\n                    Properties = new ProcessorTypeDescription.ProcessorPropertyCollection(new ProcessorTypeDescription.Property[0]),\n                };\n\n            NullImporter = new ImporterTypeDescription()\n            {\n                DisplayName = \"\",\n            };\n\n            NullProcessor = new ProcessorTypeDescription()\n            {\n                DisplayName = \"\",\n                Properties = new ProcessorTypeDescription.ProcessorPropertyCollection(new ProcessorTypeDescription.Property[0]),\n            };\n        }\n\n        public static void Load(PipelineProject project)\n        {\n            Unload();\n\n            List<string> assemblyPaths = new List<string>();\n\n            string projectRoot = project.Location;\n\n            foreach (string i in project.References)\n            {\n                string path = Path.Combine(projectRoot, i);\n\n                if (string.IsNullOrEmpty(path))\n                    throw new ArgumentException(\"assemblyFilePath cannot be null!\");\n                if (!Path.IsPathRooted(path))\n                    throw new ArgumentException(\"assemblyFilePath must be absolute!\");\n\n                // Make sure we're not adding the same assembly twice.\n                path = PathHelper.Normalize(path);\n                if (!assemblyPaths.Contains(path))\n                    assemblyPaths.Add(path);\n            }\n\n            try\n            {\n                AddPackageReferences(project, projectRoot, project.PackageReferences, assemblyPaths);\n            }\n            catch (Exception ex)\n            {\n                System.Windows.Forms.MessageBox.Show(\n                    string.Format(\"Failed to resolve package references.\\n\\n {0}.\", ex.Message),\n                    \"KNI Pipeline - \" + Path.GetFileName(project.OriginalPath),\n                    System.Windows.Forms.MessageBoxButtons.OK,\n                    System.Windows.Forms.MessageBoxIcon.Error);\n            }\n\n            ResolveAssemblies(assemblyPaths);\n\n            var importerDescriptions = new ImporterTypeDescription[_importers.Count];\n            int cur = 0;\n            foreach (var item in _importers)\n            {\n                // Find the abstract base class ContentImporter<T>.\n                Type baseType = item.Type.BaseType;\n                while (!baseType.IsAbstract)\n                    baseType = baseType.BaseType;\n\n                Type outputType = baseType.GetGenericArguments()[0];\n                var desc = new ImporterTypeDescription()\n                    {\n                        TypeName = item.Type.Name,\n                        DisplayName = item.Attribute.DisplayName,\n                        DefaultProcessor = item.Attribute.DefaultProcessor,                        \n                        FileExtensions = item.Attribute.FileExtensions,   \n                        OutputType = outputType,\n                    };\n                importerDescriptions[cur] = desc;\n                cur++;\n            }\n\n            Importers = importerDescriptions;\n            ImportersStandardValuesCollection = new TypeConverter.StandardValuesCollection(Importers);\n\n            var processorDescriptions = new ProcessorTypeDescription[_processors.Count];\n\n            const BindingFlags bindings = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;\n\n            cur = 0;\n            foreach (var item in _processors)\n            {\n                var obj = Activator.CreateInstance(item.Type);\n                var typeProperties = item.Type.GetProperties(bindings);\n                var properties = new List<ProcessorTypeDescription.Property>();\n                foreach (var i in typeProperties)\n                {\n                    // TODO:\n                    //p.GetCustomAttribute(typeof(ContentPipelineIgnore))\n\n                    var p = new ProcessorTypeDescription.Property()\n                        {\n                            Name = i.Name,\n                            Type = i.PropertyType,\n                            DefaultValue = i.GetValue(obj, null),\n                        };\n                    properties.Add(p);\n                }\n\n                Type inputType = (obj as IContentProcessor).InputType;\n                var desc = new ProcessorTypeDescription()\n                {\n                    TypeName = item.Type.Name,\n                    DisplayName = item.Attribute.DisplayName,\n                    Properties = new ProcessorTypeDescription.ProcessorPropertyCollection(properties),\n                    InputType = inputType,\n                };\n                if (string.IsNullOrEmpty(desc.DisplayName))\n                    desc.DisplayName = desc.TypeName;\n\n                processorDescriptions[cur] = desc;\n                cur++;\n            }\n\n            Processors = processorDescriptions;\n            ProcessorsStandardValuesCollection = new TypeConverter.StandardValuesCollection(Processors);\n        }\n\n        private static void AddPackageReferences(PipelineProject manager, string projectDirectory, List<Package> packageReferences, List<string> assemblyPaths)\n        {\n            if (packageReferences.Count == 0)\n                return;\n\n            string intermediateFolder = \"obj/\";\n            intermediateFolder = Path.Combine(projectDirectory, intermediateFolder);\n            intermediateFolder = PathHelper.Normalize(intermediateFolder);\n            if (!Directory.Exists(intermediateFolder))\n                Directory.CreateDirectory(intermediateFolder);\n\n            const string packageReferencesProjFolder = \".Packages\";\n            const string libraryName = \"PackagesLibrary\";\n\n            string fullPackageReferencesFolder = Path.Combine(intermediateFolder, packageReferencesProjFolder);\n            if (!Directory.Exists(fullPackageReferencesFolder))\n                Directory.CreateDirectory(fullPackageReferencesFolder);\n\n            string projFolder = manager.Name;\n\n            string fullPackageReferencesProjFolder = Path.Combine(fullPackageReferencesFolder, projFolder);\n            fullPackageReferencesProjFolder = PathHelper.Normalize(fullPackageReferencesProjFolder);\n\n            string publishDir = \"publish\";\n\n            bool rebuild = false;\n\n            // load db\n            List<Package> packages = new List<Package>(packageReferences);\n            packages.Sort();\n            string intermediatePackageCollectionPath = Path.Combine(fullPackageReferencesProjFolder, Path.ChangeExtension(libraryName, PackageReferencesCollection.Extension));\n            PackageReferencesCollection previousPackageReferencesCollection = PackageReferencesCollection.LoadBinary(intermediatePackageCollectionPath);\n            if (previousPackageReferencesCollection != null\n            && previousPackageReferencesCollection.PackagesCount == packages.Count)\n            {\n                for (int i = 0; i < packages.Count; i++)\n                {\n                    if (packages[i].Name != previousPackageReferencesCollection.Packages[i].Name\n                    ||  packages[i].Version != previousPackageReferencesCollection.Packages[i].Version)\n                    {\n                        rebuild = true;\n                        break;\n                    }\n                }\n            }\n            else rebuild = true;\n\n            // build PackageReferencesLibrary\n            if (rebuild)\n            {\n                using (var modalWindow = new System.Windows.Forms.Form())\n                {\n                    modalWindow.Text = \"KNI Pipeline\";\n                    modalWindow.Width = 300;\n                    modalWindow.Height = 80;\n                    modalWindow.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\n                    modalWindow.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n                    modalWindow.ControlBox = false;\n                    modalWindow.TopMost = true;\n                    var label = new System.Windows.Forms.Label();\n                    label.Text = \"Resolving Package References...\";\n                    label.Dock = System.Windows.Forms.DockStyle.Fill;\n                    label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\n                    modalWindow.Controls.Add(label);\n                    modalWindow.Show();\n\n                    string framework = \"netstandard2.0\";\n#if NET8_0_OR_GREATER\n                    framework = \"net8.0\";\n#endif\n                    string newCmd = String.Format(\"new classlib --framework \\\"{0}\\\" -n {1} -o \\\"{2}\\\"\", framework, libraryName, projFolder);\n                    newCmd += \" --force\";\n                    ExecuteDotnet(fullPackageReferencesFolder, newCmd);\n\n\n                    foreach (Package packageReference in packageReferences)\n                    {\n                        string addCmd = String.Format(\"add {0}.csproj package {1} \", libraryName, packageReference.Name);\n                        addCmd += \" --no-restore\";\n                        if (packageReference.Version != String.Empty)\n                            addCmd += \" --version \" + packageReference.Version;\n                        ExecuteDotnet(fullPackageReferencesProjFolder, addCmd);\n                    }\n\n                    string cleanCmd = String.Format(\"clean {0}.csproj --output {1}\", libraryName, publishDir);\n                    cleanCmd += \" --nologo\";\n                    ExecuteDotnet(fullPackageReferencesProjFolder, cleanCmd);\n                    string publishCmd = String.Format(\"publish {0}.csproj --output {1}\", libraryName, publishDir);\n                    publishCmd += \" --nologo\";\n                    ExecuteDotnet(fullPackageReferencesProjFolder, publishCmd);\n\n                    // save db\n                    PackageReferencesCollection dbfile = new PackageReferencesCollection();\n                    foreach (Package package in packages)\n                        dbfile.AddPackage(package);\n                    dbfile.SaveBinary(intermediatePackageCollectionPath);\n                }\n            }\n\n            // load packages\n            string fullPublishDir = Path.Combine(fullPackageReferencesProjFolder, publishDir);\n            fullPublishDir = PathHelper.Normalize(fullPublishDir);\n\n            string[] references = Directory.GetFiles(fullPublishDir, \"*.dll\");\n\n            foreach (string assemblyFile in references)\n            {\n                string assemblyFileName = Path.GetFileNameWithoutExtension(assemblyFile);\n                // skip the empty project and known pipeline libraries.\n                if (assemblyFileName == libraryName)\n                    continue;\n                if (assemblyFileName.StartsWith(\"Xna.Framework\"))\n                    continue;\n\n                assemblyPaths.Add(assemblyFile);\n            }\n\n            return;\n        }\n\n        private static void ExecuteDotnet(string workingDirectory, string args)\n        {\n            ProcessStartInfo startInfo = new ProcessStartInfo(\"dotnet\", args);\n            startInfo.CreateNoWindow = true;\n            startInfo.WorkingDirectory = workingDirectory;\n            startInfo.UseShellExecute = false;\n            startInfo.RedirectStandardOutput = true;\n            startInfo.RedirectStandardError = true;\n\n            using (Process process = Process.Start(startInfo))\n            {\n                process.WaitForExit();\n                if (process.ExitCode != 0)\n                {\n                    string output = process.StandardOutput.ReadToEnd();\n                    Console.Write(output);\n                    string error = process.StandardError.ReadToEnd();\n                    Console.Write(error);\n                    throw new PipelineException(output + error);\n                }\n            }\n        }\n\n        public static void Unload()\n        {\n            _importers = null;\n            Importers = null;\n         \n            _processors = null;\n            Processors = null;\n\n            ImportersStandardValuesCollection = null;\n            ProcessorsStandardValuesCollection = null;\n        }        \n\n        public static TypeConverter FindConverter(Type type)\n        {\n\n            return TypeDescriptor.GetConverter(type);\n        }\n\n        public static ImporterTypeDescription FindImporter(string name, string fileExtension)\n        {\n            if (!string.IsNullOrEmpty(name))\n            {\n                name = RemapOldNames(name);\n                \n                foreach (var i in Importers)\n                {\n                    if (i.TypeName.Equals(name))\n                        return i;\n                }\n\n                foreach (var i in Importers)\n                {\n                    if (i.DisplayName.Equals(name))\n                        return i;\n                }\n\n                //Debug.Fail(string.Format(\"Importer not found! name={0}, ext={1}\", name, fileExtension));\n                return null;\n            }\n\n            var lowerFileExt = fileExtension.ToLowerInvariant();\n            foreach (var i in Importers)\n            {\n                if (i.FileExtensions.Any(e => e.ToLowerInvariant() == lowerFileExt))\n                    return i;\n            }\n\n            //Debug.Fail(string.Format(\"Importer not found! name={0}, ext={1}\", name, fileExtension));\n            return null;\n        }\n\n        public static ProcessorTypeDescription FindProcessor(string name, ImporterTypeDescription importer)\n        {\n            if (!string.IsNullOrEmpty(name))\n            {\n                name = RemapOldNames(name);\n\n                foreach (var i in Processors)\n                {\n                    if (i.TypeName.Equals(name))\n                        return i;\n                }\n\n                //Debug.Fail(string.Format(\"Processor not found! name={0}, importer={1}\", name, importer));\n                return null;\n            }\n\n            if (importer != null)\n            {\n                foreach (var i in Processors)\n                {\n                    if (i.TypeName.Equals(importer.DefaultProcessor))\n                        return i;\n                }\n            }\n\n            //Debug.Fail(string.Format(\"Processor not found! name={0}, importer={1}\", name, importer));\n            return null;\n        }\n\n        private static void ResolveAssemblies(IEnumerable<string> assemblyPaths)\n        {\n            _importers = new List<ImporterInfo>();\n            _processors = new List<ProcessorInfo>();\n            \n            var assemblies = new List<Assembly>();\n            assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.IContentProcessor).Assembly); // Common\n            assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.SoundEffectProcessor).Assembly); // Audio\n            assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.VideoProcessor).Assembly); // Media\n            assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.TextureProcessor).Assembly); // Graphics\n            assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.EffectProcessor).Assembly); // Graphics Effects\n\n            foreach (var asm in assemblies)\n            {\n                //try\n                {\n                    var exportedTypes = asm.GetTypes();\n                    ProcessTypes(exportedTypes);\n                }\n                //catch (Exception e) { }\n            }\n\n            foreach (var path in assemblyPaths)\n            {\n                try\n                {\n                    var a = Assembly.LoadFrom(path);\n                    var types = a.GetTypes();\n                    ProcessTypes(types);\n                }\n                catch \n                {\n                    //Logger.LogWarning(null, null, \"Failed to load assembly '{0}': {1}\", assemblyPath, e.Message);\n                    // The assembly failed to load... nothing\n                    // we can do but ignore it.\n                    continue;\n                }                \n            }\n        }\n\n        private static void ProcessTypes(IEnumerable<Type> types)\n        {\n            foreach (var t in types)\n            {\n                if (t.IsAbstract)\n                    continue;\n\n                if (t.GetInterface(@\"IContentImporter\") == typeof(IContentImporter))\n                {\n                    var attributes = t.GetCustomAttributes(typeof(ContentImporterAttribute), false);\n                    if (attributes.Length != 0)\n                    {\n                        var importerAttribute = attributes[0] as ContentImporterAttribute;\n                        _importers.Add(new ImporterInfo { Attribute = importerAttribute, Type = t });\n                    }\n                    else\n                    {\n                        // If no attribute specify default one\n                        var importerAttribute = new ContentImporterAttribute(\".*\");\n                        importerAttribute.DefaultProcessor = \"\";\n                        importerAttribute.DisplayName = t.Name;\n                        _importers.Add(new ImporterInfo { Attribute = importerAttribute, Type = t });\n                    }\n                }\n                else if (t.GetInterface(@\"IContentProcessor\") == typeof(IContentProcessor))\n                {\n                    var attributes = t.GetCustomAttributes(typeof(ContentProcessorAttribute), false);\n                    if (attributes.Length != 0)\n                    {\n                        var processorAttribute = attributes[0] as ContentProcessorAttribute;\n                        _processors.Add(new ProcessorInfo { Attribute = processorAttribute, Type = t });\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/ProjectState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Content.Pipeline.Editor\n{\n    /// <summary>\n    /// Snapshot of a PipelineProject's state, used for undo/redo.\n    /// </summary>\n    internal class ProjectState\n    {\n        public string OutputDir;\n        public string IntermediateDir;\n        public List<string> References;\n        public List<Package> PackageReferences;\n        public TargetPlatform Platform;\n        public GraphicsProfile Profile;\n        public string Config;\n        public string OriginalPath;\n\n        /// <summary>\n        /// Create a ProjectState storing member values of the passed PipelineProject.\n        /// </summary>\n        public ProjectState(PipelineProject proj)\n        {\n            this.OriginalPath = proj.OriginalPath;\n            this.OutputDir = proj.OutputDir;\n            this.IntermediateDir = proj.IntermediateDir;\n            this.References = new List<string>(proj.References);\n            this.PackageReferences = new List<Package>(proj.PackageReferences);\n            this.Platform = proj.Platform;\n            this.Profile = proj.Profile;\n            this.Config = proj.Config;\n        }\n\n        /// <summary>\n        /// Set a PipelineProject's member values from this state object.\n        /// </summary>\n        public void Apply(PipelineProject proj)\n        {\n            proj.OutputDir = OutputDir;\n            proj.IntermediateDir = IntermediateDir;\n            proj.References = new List<string>(this.References);\n            proj.PackageReferences = new List<Package>(this.PackageReferences);\n            proj.Platform = Platform;\n            proj.Profile = Profile;\n            proj.Config = Config;\n        }\n    }    \n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/Selection.cs",
    "content": "﻿using System.Collections;\nusing System.Collections.Generic;\n\nnamespace Content.Pipeline.Editor\n{\n    internal delegate void SelectionModified(Selection selection, object source);\n\n    internal class Selection : IEnumerable<IProjectItem>\n    {\n        private readonly List<IProjectItem> _list;\n\n        public event SelectionModified Modified;\n\n        public int Count\n        {\n            get { return _list.Count; }\n        }\n\n        public Selection()\n        {\n            _list = new List<IProjectItem>();\n        }\n        \n        public void Add(IProjectItem item, object source)\n        {\n            _list.Add(item);\n            if (Modified != null)\n                Modified(this, source);\n        }\n\n        public void Remove(IProjectItem item, object source)\n        {\n            _list.Remove(item);\n            if (Modified != null)\n                Modified(this, source);\n        }\n\n        public void Clear(object source)\n        {\n            _list.Clear();\n            if (Modified != null)\n                Modified(this, source);\n        }\n\n        public IEnumerator<IProjectItem> GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/StringExtensions.cs",
    "content": "﻿ using System;\n using System.Security;\n\nnamespace Content.Pipeline.Editor\n{\n    public static class StringExtensions\n    {\n        public static string Unescape(this string text)\n        {\n            if (string.IsNullOrEmpty(text))\n                return text;\n\n            var result = Uri.UnescapeDataString(text);\n\n            // JCF: XmlReader already does this.\n            /*\n            result = result.Replace(\"&apos;\", \"'\");\n            result = result.Replace(\"&quot;\", \"\\\"\");\n            result = result.Replace(\"&gt;\", \">\");\n            result = result.Replace(\"&amp;\", \"&\");\n            */             \n            \n            return result;\n        }\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Common/Util.cs",
    "content": "﻿using System;\nusing System.IO;\n\nnamespace Content.Pipeline.Editor\n{\n    internal static class Util\n    {\n        /// <summary>        \n        /// Returns the path 'filspec' made relative path 'folder'.\n        /// \n        /// If 'folder' is not an absolute path, throws ArgumentException.\n        /// If 'filespec' is not an absolute path, returns 'filespec' unmodified.\n        /// </summary>\n        public static string GetRelativePath(string filespec, string folder)\n        {\n            if (!Path.IsPathRooted(filespec))\n                return filespec;\n\n            if (!Path.IsPathRooted(folder))\n                throw new ArgumentException(\"Must be an absolute path.\", \"folder\");\n\n            var pathUri = new Uri(filespec);\n\n            if (folder[folder.Length-1] != Path.DirectorySeparatorChar)\n                folder += Path.DirectorySeparatorChar;\n\n            var folderUri = new Uri(folder);\n            var result = folderUri.MakeRelativeUri(pathUri).ToString();\n            result = result.Replace('/', Path.DirectorySeparatorChar);\n            result = Uri.UnescapeDataString(result);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Content.Pipeline.Editor.net4.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{CF15F9CF-0DF8-4B18-B0A0-F5AA33EA3598}</ProjectGuid>\n    <ApplicationIcon>App.ico</ApplicationIcon>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>Content.Pipeline.Editor</RootNamespace>\n    <AssemblyName>PipelineEditor</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS1591;CS1574;CS0419</NoWarn>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <TargetFrameworkProfile />\n    <LangVersion>Default</LangVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <Optimize>false</Optimize>\n    <DebugType>full</DebugType>\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n    <OutputPath>bin\\AnyCPU\\Debug\\net4</OutputPath>\n    <IntermediateOutputPath>obj\\Windows\\AnyCPU\\Debug</IntermediateOutputPath>\n    <DefineConstants>DEBUG;TRACE;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <Optimize>true</Optimize>\n    <DebugType>none</DebugType>\n    <OutputPath>bin\\AnyCPU\\Release\\net4</OutputPath>\n    <IntermediateOutputPath>obj\\Windows\\AnyCPU\\Release</IntermediateOutputPath>\n    <DefineConstants>TRACE;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Design\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Common\\ActionStack.cs\" />\n    <Compile Include=\"Common\\AssemblyAttributes.cs\" />\n    <Compile Include=\"Common\\CommandLineParser.cs\" />\n    <Compile Include=\"Common\\CompressionMethod.cs\" />\n    <Compile Include=\"Common\\ContentFolder.cs\" />\n    <Compile Include=\"Common\\ContentItem.cs\" />\n    <Compile Include=\"Common\\ContentItem.Processor.cs\" />\n    <Compile Include=\"Common\\ContentItem.Importer.cs\" />\n    <Compile Include=\"Common\\ContentItemPathComparer.cs\" />\n    <Compile Include=\"Common\\ContentItemTemplate.cs\" />\n    <Compile Include=\"Common\\ContentItemState.cs\" />\n    <Compile Include=\"Common\\FileType.cs\" />\n    <Compile Include=\"Common\\Selection.cs\" />\n    <Compile Include=\"Common\\PathComparer.cs\" />\n    <Compile Include=\"Common\\PathHelper.cs\" />\n    <Compile Include=\"Common\\ProjectState.cs\" />\n    <Compile Include=\"Common\\PipelineController.MoveAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.NewAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.ExcludeAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.IncludeAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.UpdateContentItemAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.UpdateProjectAction.cs\" />\n    <Compile Include=\"Common\\PipelineSettings.cs\" />\n    <Compile Include=\"Common\\IController.cs\" />\n    <Compile Include=\"Common\\IProjectItem.cs\" />\n    <Compile Include=\"Common\\IProjectObserver.cs\" />\n    <Compile Include=\"Common\\IView.cs\" />\n    <Compile Include=\"Common\\OutputParser.cs\" />\n    <Compile Include=\"Common\\Package.cs\" />\n    <Compile Include=\"Common\\PackageReferencesCollection.cs\" />\n    <Compile Include=\"Common\\PipelineProjectParser.cs\" />\n    <Compile Include=\"Common\\Util.cs\" />\n    <Compile Include=\"Common\\StringExtensions.cs\" />\n    <Compile Include=\"Common\\CustomPropertyDescriptors.cs\" />\n    <Compile Include=\"Common\\PipelineController.cs\" />\n    <Compile Include=\"Common\\PipelineProject.cs\" />\n    <Compile Include=\"Common\\PipelineTypes.cs\" />\n    <Compile Include=\"Forms\\BuildIcons.cs\" />\n    <Compile Include=\"Forms\\ContentIcons.cs\" />\n    <Compile Include=\"Forms\\EditorIcons.cs\" />\n    <Compile Include=\"Forms\\FolderSelectDialog.cs\" />\n    <Compile Include=\"Forms\\MainView.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\MainView.Designer.cs\">\n      <DependentUpon>MainView.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\NewContentDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\NewContentDialog.Designer.cs\">\n      <DependentUpon>NewContentDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\MultiSelectTreeview.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\Controls\\FilterOutputControl.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\Controls\\TabControlEx.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\PipelineProjectProxy.cs\" />\n    <Compile Include=\"Forms\\TreeViewExtensions.cs\" />\n    <Compile Include=\"Forms\\SortedEnumTypeConverter.cs\" />\n    <Compile Include=\"Forms\\AboutDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\AboutDialog.Designer.cs\">\n      <DependentUpon>AboutDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\PackageDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\PackageDialog.Designer.cs\">\n      <DependentUpon>PackageDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\PackageReferenceDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\PackageReferenceDialog.Designer.cs\">\n      <DependentUpon>PackageReferenceDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\ReferenceDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\ReferenceDialog.Designer.cs\">\n      <DependentUpon>ReferenceDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\TextEditDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\TextEditDialog.Designer.cs\">\n      <DependentUpon>TextEditDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n      <DesignTime>True</DesignTime>\n    </Compile>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Design\\Xna.Framework.Design.csproj\">\n      <Project>{e37f98d7-c4e8-4556-b322-aef99638ece1}</Project>\n      <Name>Xna.Framework.Design</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509f44-3566-4b79-bb47-c7c6e2aa2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\">\n      <Project>{acd26013-5730-4caf-9468-3baae867a8a2}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Audio</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\">\n      <Project>{7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\">\n      <Project>{476ee43e-e93b-4019-b8b7-ad52c4216456}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics.MojoProcessor</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\">\n      <Project>{63486463-8aee-483e-862a-7720cd62b4df}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Media</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\MonoGame.Content.Builder\\MGCB.csproj\">\n      <Project>{4243474d-572e-6e69-646f-77734d474342}</Project>\n      <Name>MGCB</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"app.manifest\" />\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <None Include=\"Templates\\Effect.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\Effect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\Effect.template\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\LocalizedSpriteFont.spritefont\" />\n    <None Include=\"Templates\\LocalizedSpriteFont.template\" />\n    <None Include=\"Templates\\SpriteEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\SpriteEffect.template\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\Xml.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\XmlContent.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\XmlContent.template\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\Font.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\SpriteFont.spritefont\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\SpriteFont.template\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Forms\\TextEditDialog.resx\">\n      <DependentUpon>TextEditDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\MainView.resx\">\n      <DependentUpon>MainView.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\AboutDialog.resx\">\n      <DependentUpon>AboutDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\PackageDialog.resx\">\n      <DependentUpon>PackageDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\PackageReferenceDialog.resx\">\n      <DependentUpon>PackageReferenceDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\ReferenceDialog.resx\">\n      <DependentUpon>ReferenceDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\NewContentDialog.resx\">\n      <DependentUpon>NewContentDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"App.ico\" />\n    <EmbeddedResource Include=\"Icons\\blueprint.png\" />\n    <EmbeddedResource Include=\"Icons\\missing.png\" />\n    <EmbeddedResource Include=\"Icons\\folder_closed.png\" />\n    <EmbeddedResource Include=\"Icons\\folder_open.png\" />\n    <EmbeddedResource Include=\"Icons\\folder_missing.png\" />\n    <EmbeddedResource Include=\"Icons\\settings.png\" />\n    <EmbeddedResource Include=\"Icons\\build_begin_end.png\" />\n    <EmbeddedResource Include=\"Icons\\build_clean.png\" />\n    <EmbeddedResource Include=\"Icons\\build_fail.png\" />\n    <EmbeddedResource Include=\"Icons\\build_processing.png\" />\n    <EmbeddedResource Include=\"Icons\\build_queued.png\" />\n    <EmbeddedResource Include=\"Icons\\build_skip.png\" />\n    <EmbeddedResource Include=\"Icons\\build_succeed.png\" />\n    <EmbeddedResource Include=\"Icons\\Toolbar\\New.png\">\n      <LogicalName>Toolbar.New.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Open.png\">\n      <LogicalName>Toolbar.Open.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Save.png\">\n      <LogicalName>Toolbar.Save.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\NewItem.png\">\n      <LogicalName>Toolbar.NewItem.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\ExistingItem.png\">\n      <LogicalName>Toolbar.ExistingItem.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\NewFolder.png\">\n      <LogicalName>Toolbar.NewFolder.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\ExistingFolder.png\">\n      <LogicalName>Toolbar.ExistingFolder.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Build.png\">\n      <LogicalName>Toolbar.Build.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Rebuild.png\">\n      <LogicalName>Toolbar.Rebuild.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Clean.png\">\n      <LogicalName>Toolbar.Clean.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\FilterOutput.png\">\n      <LogicalName>Toolbar.FilterOutput.png</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <_PostBuildHookTimestamp>@(IntermediateAssembly->'%(FullPath).timestamp')</_PostBuildHookTimestamp>\n  </PropertyGroup>\n  <Target Name=\"PostBuildHooks\" Inputs=\"@(IntermediateAssembly);@(ReferencePath)\" Outputs=\"@(IntermediateAssembly);$(_PostBuildHookTimestamp)\" AfterTargets=\"CoreCompile\" BeforeTargets=\"AfterCompile\">\n    <Touch Files=\"$(_PostBuildHookTimestamp)\" AlwaysCreate=\"True\" />\n  </Target>\n</Project>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Content.Pipeline.Editor.net8.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <RuntimeIdentifiers>win-x64</RuntimeIdentifiers>\n    <ProjectGuid>{5212C44E-1573-43C2-85E8-5751A12FBBFD}</ProjectGuid>\n    <ApplicationIcon>App.ico</ApplicationIcon>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>Content.Pipeline.Editor</RootNamespace>\n    <AssemblyName>PipelineEditor</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS1591;CS1574;CS0419</NoWarn>\n    <GenerateDocumentationFile>False</GenerateDocumentationFile>\n    <OutputPath>bin\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\Windows\\$(Platform)\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>$(DefineConstants);</DefineConstants>\n    <LangVersion>Default</LangVersion>\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Common\\ActionStack.cs\" />\n    <Compile Include=\"Common\\AssemblyAttributes.cs\" />\n    <Compile Include=\"Common\\CommandLineParser.cs\" />\n    <Compile Include=\"Common\\CompressionMethod.cs\" />\n    <Compile Include=\"Common\\ContentFolder.cs\" />\n    <Compile Include=\"Common\\ContentItem.cs\" />\n    <Compile Include=\"Common\\ContentItem.Importer.cs\" />\n    <Compile Include=\"Common\\ContentItem.Processor.cs\" />\n    <Compile Include=\"Common\\ContentItemConverter.cs\" />\n    <Compile Include=\"Common\\ContentItemPathComparer.cs\" />\n    <Compile Include=\"Common\\ContentItemTemplate.cs\" />\n    <Compile Include=\"Common\\ContentItemState.cs\" />\n    <Compile Include=\"Common\\FileType.cs\" />\n    <Compile Include=\"Common\\Selection.cs\" />\n    <Compile Include=\"Common\\PathComparer.cs\" />\n    <Compile Include=\"Common\\PathHelper.cs\" />\n    <Compile Include=\"Common\\ProjectState.cs\" />\n    <Compile Include=\"Common\\PipelineController.MoveAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.NewAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.ExcludeAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.IncludeAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.UpdateContentItemAction.cs\" />\n    <Compile Include=\"Common\\PipelineController.UpdateProjectAction.cs\" />\n    <Compile Include=\"Common\\PipelineSettings.cs\" />\n    <Compile Include=\"Common\\IController.cs\" />\n    <Compile Include=\"Common\\IProjectItem.cs\" />\n    <Compile Include=\"Common\\IProjectObserver.cs\" />\n    <Compile Include=\"Common\\IView.cs\" />\n    <Compile Include=\"Common\\OutputParser.cs\" />\n    <Compile Include=\"Common\\Package.cs\" />\n    <Compile Include=\"Common\\PackageReferencesCollection.cs\" />\n    <Compile Include=\"Common\\PipelineProjectParser.cs\" />\n    <Compile Include=\"Common\\Util.cs\" />\n    <Compile Include=\"Common\\StringExtensions.cs\" />\n    <Compile Include=\"Common\\PipelineController.cs\" />\n    <Compile Include=\"Common\\PipelineProject.cs\" />\n    <Compile Include=\"Common\\PipelineTypes.cs\" />\n    <Compile Include=\"Forms\\BuildIcons.cs\" />\n    <Compile Include=\"Forms\\ContentIcons.cs\" />\n    <Compile Include=\"Forms\\EditorIcons.cs\" />\n    <Compile Include=\"Forms\\FolderSelectDialog.cs\" />\n    <Compile Include=\"Forms\\MainView.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\MainView.Designer.cs\">\n      <DependentUpon>MainView.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\NewContentDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\NewContentDialog.Designer.cs\">\n      <DependentUpon>NewContentDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\MultiSelectTreeview.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\Controls\\FilterOutputControl.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\Controls\\TabControlEx.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\PipelineProjectProxy.cs\" />\n    <Compile Include=\"Forms\\TreeViewExtensions.cs\" />\n    <Compile Include=\"Forms\\TreeViewNodeSorter.cs\" />\t  \n    <Compile Include=\"Forms\\SortedEnumTypeConverter.cs\" />\n    <Compile Include=\"Forms\\AboutDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\AboutDialog.Designer.cs\">\n      <DependentUpon>AboutDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\PackageDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\PackageDialog.Designer.cs\">\n      <DependentUpon>PackageDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\PackageReferenceDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\PackageReferenceDialog.Designer.cs\">\n      <DependentUpon>PackageReferenceDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\ReferenceDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\ReferenceDialog.Designer.cs\">\n      <DependentUpon>ReferenceDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Forms\\TextEditDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"Forms\\TextEditDialog.Designer.cs\">\n      <DependentUpon>TextEditDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n      <DesignTime>True</DesignTime>\n    </Compile>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Design\\Xna.Framework.Design.csproj\">\n      <Project>{e37f98d7-c4e8-4556-b322-aef99638ece1}</Project>\n      <Name>Xna.Framework.Design</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509f44-3566-4b79-bb47-c7c6e2aa2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\">\n      <Project>{acd26013-5730-4caf-9468-3baae867a8a2}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Audio</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\">\n      <Project>{7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\">\n      <Project>{476ee43e-e93b-4019-b8b7-ad52c4216456}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics.MojoProcessor</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\">\n      <Project>{63486463-8aee-483e-862a-7720cd62b4df}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Media</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\MonoGame.Content.Builder\\MGCB.csproj\">\n      <Project>{4243474d-572e-6e69-646f-77734d474342}</Project>\n      <Name>MGCB</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"app.manifest\" />\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <None Include=\"Templates\\Effect.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\Effect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\Effect.template\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\LocalizedSpriteFont.spritefont\" />\n    <None Include=\"Templates\\LocalizedSpriteFont.template\" />\n    <None Include=\"Templates\\SpriteEffect.fx\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\SpriteEffect.template\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\Xml.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\XmlContent.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\XmlContent.template\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\Font.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\SpriteFont.spritefont\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Templates\\SpriteFont.template\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Forms\\TextEditDialog.resx\">\n      <DependentUpon>TextEditDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\MainView.resx\">\n      <DependentUpon>MainView.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\AboutDialog.resx\">\n      <DependentUpon>AboutDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\PackageDialog.resx\">\n      <DependentUpon>PackageDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\PackageReferenceDialog.resx\">\n      <DependentUpon>PackageReferenceDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\ReferenceDialog.resx\">\n      <DependentUpon>ReferenceDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Forms\\NewContentDialog.resx\">\n      <DependentUpon>NewContentDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"App.ico\" />\n    <EmbeddedResource Include=\"Icons\\blueprint.png\" />\n    <EmbeddedResource Include=\"Icons\\missing.png\" />\n    <EmbeddedResource Include=\"Icons\\folder_closed.png\" />\n    <EmbeddedResource Include=\"Icons\\folder_open.png\" />\n    <EmbeddedResource Include=\"Icons\\folder_missing.png\" />\n    <EmbeddedResource Include=\"Icons\\settings.png\" />\n    <EmbeddedResource Include=\"Icons\\build_begin_end.png\" />\n    <EmbeddedResource Include=\"Icons\\build_clean.png\" />\n    <EmbeddedResource Include=\"Icons\\build_fail.png\" />\n    <EmbeddedResource Include=\"Icons\\build_processing.png\" />\n    <EmbeddedResource Include=\"Icons\\build_queued.png\" />\n    <EmbeddedResource Include=\"Icons\\build_skip.png\" />\n    <EmbeddedResource Include=\"Icons\\build_succeed.png\" />\n    <EmbeddedResource Include=\"Icons\\Toolbar\\New.png\">\n      <LogicalName>Toolbar.New.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Open.png\">\n      <LogicalName>Toolbar.Open.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Save.png\">\n      <LogicalName>Toolbar.Save.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\NewItem.png\">\n      <LogicalName>Toolbar.NewItem.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\ExistingItem.png\">\n      <LogicalName>Toolbar.ExistingItem.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\NewFolder.png\">\n      <LogicalName>Toolbar.NewFolder.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\ExistingFolder.png\">\n      <LogicalName>Toolbar.ExistingFolder.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Build.png\">\n      <LogicalName>Toolbar.Build.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Rebuild.png\">\n      <LogicalName>Toolbar.Rebuild.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\Clean.png\">\n      <LogicalName>Toolbar.Clean.png</LogicalName>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Icons\\Toolbar\\FilterOutput.png\">\n      <LogicalName>Toolbar.FilterOutput.png</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <PropertyGroup>\n    <_PostBuildHookTimestamp>@(IntermediateAssembly->'%(FullPath).timestamp')</_PostBuildHookTimestamp>\n  </PropertyGroup>\n  <Target Name=\"PostBuildHooks\" Inputs=\"@(IntermediateAssembly);@(ReferencePath)\" Outputs=\"@(IntermediateAssembly);$(_PostBuildHookTimestamp)\" AfterTargets=\"CoreCompile\" BeforeTargets=\"AfterCompile\">\n    <Touch Files=\"$(_PostBuildHookTimestamp)\" AlwaysCreate=\"True\" />\n  </Target>\n\n\n</Project>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/AboutDialog.Designer.cs",
    "content": "﻿namespace Content.Pipeline.Editor\n{\n    partial class AboutDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutDialog));\n            this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();\n            this.logoPictureBox = new System.Windows.Forms.PictureBox();\n            this.labelProductName = new System.Windows.Forms.Label();\n            this.labelVersion = new System.Windows.Forms.Label();\n            this.labelCopyright = new System.Windows.Forms.Label();\n            this.labelCompanyName = new System.Windows.Forms.Label();\n            this.textBoxDescription = new System.Windows.Forms.TextBox();\n            this.okButton = new System.Windows.Forms.Button();\n            this.tableLayoutPanel.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit();\n            this.SuspendLayout();\n            // \n            // tableLayoutPanel\n            // \n            this.tableLayoutPanel.ColumnCount = 2;\n            this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 21.0396F));\n            this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 78.9604F));\n            this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0);\n            this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0);\n            this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1);\n            this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2);\n            this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3);\n            this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4);\n            this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5);\n            this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9);\n            this.tableLayoutPanel.Name = \"tableLayoutPanel\";\n            this.tableLayoutPanel.RowCount = 6;\n            this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));\n            this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));\n            this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));\n            this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));\n            this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));\n            this.tableLayoutPanel.Size = new System.Drawing.Size(404, 256);\n            this.tableLayoutPanel.TabIndex = 0;\n            // \n            // logoPictureBox\n            // \n            this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject(\"logoPictureBox.Image\")));\n            this.logoPictureBox.Location = new System.Drawing.Point(3, 3);\n            this.logoPictureBox.Name = \"logoPictureBox\";\n            this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6);\n            this.logoPictureBox.Size = new System.Drawing.Size(78, 250);\n            this.logoPictureBox.TabIndex = 12;\n            this.logoPictureBox.TabStop = false;\n            // \n            // labelProductName\n            // \n            this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.labelProductName.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this.labelProductName.Location = new System.Drawing.Point(90, 0);\n            this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);\n            this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17);\n            this.labelProductName.Name = \"labelProductName\";\n            this.labelProductName.Size = new System.Drawing.Size(311, 17);\n            this.labelProductName.TabIndex = 19;\n            this.labelProductName.Text = \"Product Name\";\n            this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            // \n            // labelVersion\n            // \n            this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.labelVersion.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this.labelVersion.Location = new System.Drawing.Point(90, 25);\n            this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);\n            this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17);\n            this.labelVersion.Name = \"labelVersion\";\n            this.labelVersion.Size = new System.Drawing.Size(311, 17);\n            this.labelVersion.TabIndex = 0;\n            this.labelVersion.Text = \"Version\";\n            this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            // \n            // labelCopyright\n            // \n            this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.labelCopyright.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this.labelCopyright.Location = new System.Drawing.Point(90, 50);\n            this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);\n            this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17);\n            this.labelCopyright.Name = \"labelCopyright\";\n            this.labelCopyright.Size = new System.Drawing.Size(311, 17);\n            this.labelCopyright.TabIndex = 21;\n            this.labelCopyright.Text = \"Copyright\";\n            this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            // \n            // labelCompanyName\n            // \n            this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.labelCompanyName.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this.labelCompanyName.Location = new System.Drawing.Point(90, 75);\n            this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);\n            this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17);\n            this.labelCompanyName.Name = \"labelCompanyName\";\n            this.labelCompanyName.Size = new System.Drawing.Size(311, 17);\n            this.labelCompanyName.TabIndex = 22;\n            this.labelCompanyName.Text = \"Company Name\";\n            this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            // \n            // textBoxDescription\n            // \n            this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.textBoxDescription.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this.textBoxDescription.Location = new System.Drawing.Point(90, 103);\n            this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);\n            this.textBoxDescription.Multiline = true;\n            this.textBoxDescription.Name = \"textBoxDescription\";\n            this.textBoxDescription.ReadOnly = true;\n            this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both;\n            this.textBoxDescription.Size = new System.Drawing.Size(311, 122);\n            this.textBoxDescription.TabIndex = 23;\n            this.textBoxDescription.TabStop = false;\n            this.textBoxDescription.Text = \"Description\";\n            // \n            // okButton\n            // \n            this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.okButton.Location = new System.Drawing.Point(326, 231);\n            this.okButton.Name = \"okButton\";\n            this.okButton.Size = new System.Drawing.Size(75, 22);\n            this.okButton.TabIndex = 24;\n            this.okButton.Text = \"&OK\";\n            this.okButton.Click += new System.EventHandler(this.okButton_Click);\n            // \n            // AboutDialog\n            // \n            this.AcceptButton = this.okButton;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(422, 274);\n            this.Controls.Add(this.tableLayoutPanel);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"AboutDialog\";\n            this.Padding = new System.Windows.Forms.Padding(9);\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"AboutDialog\";\n            this.tableLayoutPanel.ResumeLayout(false);\n            this.tableLayoutPanel.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;\n        private System.Windows.Forms.PictureBox logoPictureBox;\n        private System.Windows.Forms.Label labelProductName;\n        private System.Windows.Forms.Label labelVersion;\n        private System.Windows.Forms.Label labelCopyright;\n        private System.Windows.Forms.Label labelCompanyName;\n        private System.Windows.Forms.TextBox textBoxDescription;\n        private System.Windows.Forms.Button okButton;\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/AboutDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Linq;\nusing System.Reflection;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    partial class AboutDialog : Form\n    {\n        public AboutDialog()\n        {\n            InitializeComponent();\n            this.Text = String.Format(\"About {0}\", AssemblyAttributes.AssemblyTitle);\n            this.labelProductName.Text = AssemblyAttributes.AssemblyProduct;\n            this.labelVersion.Text = String.Format(\"Version {0}\", AssemblyAttributes.AssemblyVersion);\n            this.labelCopyright.Text = AssemblyAttributes.AssemblyCopyright;\n            this.labelCompanyName.Text = AssemblyAttributes.AssemblyCompany;\n            this.textBoxDescription.Text = AssemblyAttributes.AssemblyDescription;\n        }\n\n        private void okButton_Click(object sender, EventArgs e)\n        {\n            this.Close();\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/AboutDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"logoPictureBox.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAABGdBTUEAALGPC/xhBQAAADBQTFRF/8wQ\n        /////9lM//LD/9Y9//zw/88g/99q/+WH//nh/+yl//XS/+mW/9xb/++0/+J5blhboAAAABl0RVh0U29m\n        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAE8SURBVFhH7ZRJcsQgDEURk7Hdw/1vG+kLCF2VBFU7\n        2aT4C1sI6QFicHRRvwFwF7QAfwfI9T/XAAiyqQHmdkb8y4Yf5CmFIO0YRBrwDSASJQQUOvpcvHSXZpBX\n        75eAvLMBArvqXGqepM0BMGjnscVKd+22AwoC2gxYN3SbAdqvNVAAnVIIKyCnoV+KIUrcRJ44JwAdtG4f\n        bKhYAaq2/bUpetzlK04L4FAPAIeuSSVO0xIqQUwfWyV4a8U5AdQiYhF8IhHZ54ZzOgE4rFUJCJXIG1xG\n        QItmQge4TedlA7gTESkPAKeFMAIihnuZAd+wB9s41HOA29iQGuBWtEj31NtsAbijPQdDJGfuPwOiZ+nt\n        z+0RYOfwuuVPWNcAeE8L8ALA7tilSQuArA54TwuwAKIFWADRAvwfwDVdBBB9ALA4CCBvqHlSAAAAAElF\n        TkSuQmCC\n</value>\n  </data>\n</root>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/BuildIcons.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Drawing;\nusing System.IO;\nusing System.Reflection;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    public class BuildIcons: IDisposable\n    {\n        public ImageList Icons { get; private set; }\n\n        public const int BeginEnd = 0;\n        public const int Queued = 1;\n        public const int Clean = 2;\n        public const int Fail = 3;\n        public const int Processing = 4;\n        public const int Skip = 5;\n        public const int Succeed = 6;\n        public const int Null = 7; // set to >= Icons.Images.Count for no icon\n     \n\n        public BuildIcons()\n        {\n            Icons = new ImageList();\n            Icons.ColorDepth = ColorDepth.Depth32Bit;\n\n            var asm = Assembly.GetExecutingAssembly();\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.build_begin_end.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.build_queued.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.build_clean.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.build_fail.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.build_processing.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.build_skip.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.build_succeed.png\")));\n        }\n\n        ~BuildIcons()\n        {\n            Dispose(false);\n        }\n        \n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                Icons.Dispose();\n            }\n            Icons = null;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/ContentIcons.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Drawing;\nusing System.IO;\nusing System.Reflection;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    public class ContentIcons: IDisposable\n    {\n        public ImageList Icons { get; private set; }\n\n        public const int ContentItemIcon = 0;\n        public const int ContentMissingIcon = 1;\n        public const int FolderOpenIcon = 2;\n        public const int FolderClosedIcon = 3;\n        public const int ProjectIcon = 4;\n        public const int MaxDefinedIconIndex = 5;\n     \n\n        public ContentIcons()\n        {\n            Icons = new ImageList();\n            Icons.ColorDepth = ColorDepth.Depth32Bit;\n\n            var asm = Assembly.GetExecutingAssembly();\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.blueprint.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.missing.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.folder_open.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.folder_closed.png\")));\n            Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.settings.png\")));\n        }\n\n        ~ContentIcons()\n        {\n            Dispose(false);\n        }\n        \n        internal int GetIcon(bool exists, string fullPath)\n        {\n            if (!exists)\n                return ContentMissingIcon;\n\n            string ext = Path.GetExtension(fullPath).ToLowerInvariant();\n\n            int idx = Icons.Images.IndexOfKey(ext);\n            //cache the icon\n            if (idx == -1)\n            {\n                Icon icon =null;\n                try\n                {\n                    icon = Icon.ExtractAssociatedIcon(fullPath);\n                    Icons.Images.Add(ext, icon);\n                    idx = Icons.Images.IndexOfKey(ext);\n                }\n                catch (ArgumentException aex) \n                {\n                    //The filePath does not indicate a valid file. \n                    //-or-\n                    //The filePath indicates a Universal Naming Convention (UNC) path\n                }\n                catch(FileNotFoundException fnfex) \n                { \n                }\n            }\n            if (idx != -1)\n                return idx;\n            \n            //return default icon\n            return ContentItemIcon;\n        }\n        \n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                Icons.Dispose();\n            }\n            Icons = null;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/Controls/FilterOutputControl.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Windows.Forms;\n\n\nnamespace Content.Pipeline.Editor.Windows.Controls\n{\n    public partial class FilterOutputControl : TreeView\n    {\n        const int WM_VSCROLL = 0x0115;\n        const int SB_BOTTOM  = 0x07;\n        [System.Runtime.InteropServices.DllImport(\"user32.dll\", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = false)]\n        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);\n\n        private BuildIcons _buildIcons;\n        private TreeNode _lastTreeNode;\n\n        private PipelineProject _project;\n        private List<IProjectItem> _contentItems;\n        Dictionary<string, TreeNode> _assetMap = new Dictionary<string, TreeNode>();\n        Dictionary<string, TreeNode> _xnbMap = new Dictionary<string, TreeNode>();\n\n        private OutputParser _outputParser;\n        private string _prevFilename;\n\n        Uri _folderUri;\n        Uri _outputUri;\n\n\n        public FilterOutputControl() : base()\n        {\n            this._buildIcons = new BuildIcons();\n            this.ImageList = _buildIcons.Icons;\n            _outputParser = new OutputParser();\n        }\n\n        internal void SetBaseFolder(IController controller)\n        {\n            string pl = ((PipelineController)controller).ProjectLocation;\n            if (!pl.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()))\n                pl += System.IO.Path.DirectorySeparatorChar;\n            _folderUri = new Uri(pl);\n\n            string pod = ((PipelineController)controller).ProjectOutputDir;\n            if (!pod.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()))\n                pod += System.IO.Path.DirectorySeparatorChar;\n            pod = Path.Combine(pl, pod);\n            _outputUri = new Uri(pod);\n\n            _outputParser.Reset();\n        }\n\n        protected override void OnBeforeSelect(TreeViewCancelEventArgs e)\n        {\n            // disable selection for all nodes\n            e.Cancel = true;\n        }\n\n        internal void WriteLine(string line)\n        {\n            if (string.IsNullOrWhiteSpace(line))\n                return;\n\n            this.SuspendLayout();\n            this.BeginUpdate();\n            try\n            {\n                _outputParser.Parse(line);\n\n                line = line.TrimEnd(new[] { ' ', '\\n', '\\r', '\\t' });\n\n                switch (_outputParser.State)\n                {\n                    case OutputState.BuildBegin:\n                        {\n                            var tn = AddItem(BuildIcons.BeginEnd, line);\n                            PopulateAssets();\n                            break;\n                        }\n\n                    case OutputState.Cleaning:\n                        {\n                            var tn = AddItem(_outputParser.Filename, BuildIcons.Clean, \"Cleaned \" + GetRelativeOutputPath(_outputParser.Filename));\n                            tn.ToolTipText = line;\n                            AddSubItem(tn, line);\n                            break;\n                        }\n                    case OutputState.Skipping:\n                        {\n                            var tn = AddItem(_outputParser.Filename, BuildIcons.Skip, \"Skipped \" + GetRelativePath(_outputParser.Filename));\n                            tn.ToolTipText = line;\n                            AddSubItem(tn, line);\n                            break;\n                        }\n                    case OutputState.BuildAsset:\n                        {\n                            var tn = AddItem(_outputParser.Filename, BuildIcons.Processing, \"Building \" + GetRelativePath(_outputParser.Filename));\n                            tn.ToolTipText = line;\n                            AddSubItem(tn, line);\n                            break;\n                        }\n\n                    case OutputState.BuildError:\n                        {\n                            _lastTreeNode.ImageIndex = BuildIcons.Fail;\n                            _lastTreeNode.SelectedImageIndex = BuildIcons.Fail;\n                            _lastTreeNode.ToolTipText += Environment.NewLine + Environment.NewLine + _outputParser.ErrorMessage;\n                            AddSubItem(_lastTreeNode, _outputParser.ErrorMessage).ForeColor = System.Drawing.Color.DarkRed;\n                            break;\n                        }\n                    case OutputState.BuildErrorContinue:\n                        {\n                            _lastTreeNode.ToolTipText += Environment.NewLine + _outputParser.ErrorMessage;\n                            AddSubItem(_lastTreeNode, _outputParser.ErrorMessage).ForeColor = System.Drawing.Color.DarkRed;\n                            break;\n                        }\n\n                    case OutputState.BuildEnd:\n                        {\n                            var tn = AddItem(BuildIcons.BeginEnd, line);\n                            break;\n                        }\n                    case OutputState.BuildTime:\n                        {\n                            _lastTreeNode.Text = _lastTreeNode.Text.TrimEnd(new[] { '.', ' ' }) + \", \" + line;\n                            SendMessage(this.Handle, WM_VSCROLL, SB_BOTTOM, 0); //scroll down to the end\n                            break;\n                        }\n                }\n\n                _prevFilename = _outputParser.Filename;\n            }\n            catch (Exception ex)\n            {\n                string msg = String.Format(\"output: \\\"{0}\\\"\\n\\nError message: {1}\", line, ex.Message);\n                MessageBox.Show(msg, \"Failed to parse output\", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);\n            }\n            finally\n            {\n                this.EndUpdate();\n                this.ResumeLayout();\n            }\n        }\n\n        private TreeNode AddItem(int iconIdx, string text, TreeNode node = null)\n        {\n            if (node == null)\n            {\n                node = new TreeNode(text, iconIdx, iconIdx);\n                this.Nodes.Add(node);\n            }\n            else\n            {\n                node.Text = text;\n                node.ImageIndex = iconIdx;\n                node.SelectedImageIndex = iconIdx;\n            }\n\n            if (_lastTreeNode != null && _lastTreeNode.ImageIndex == BuildIcons.Processing)\n            {\n                _lastTreeNode.ImageIndex = BuildIcons.Succeed;\n                _lastTreeNode.SelectedImageIndex = BuildIcons.Succeed;\n\n                if (_lastTreeNode.Text.StartsWith(\"Building\"))\n                    _lastTreeNode.Text = _lastTreeNode.Text.Substring(9);\n            }\n\n            _lastTreeNode = node;\n\n            node.EnsureVisible();\n            //SendMessage(this.Handle, WM_VSCROLL, SB_BOTTOM, 0); //scroll down to the end\n\n            return node;\n        }\n\n        private TreeNode AddItem(string filename, int iconIdx, string text)\n        {\n            TreeNode item = null;\n            var key = filename;\n            //normalize key\n            key = Path.ChangeExtension(key, null);\n            key = key.Replace('\\\\', '/');\n            key = new Uri(key).AbsolutePath;\n\n            //get node\n            _assetMap.TryGetValue(key, out item);\n            if (item == null)\n                _xnbMap.TryGetValue(key, out item);\n\n            return AddItem(iconIdx, text, item);\n        }\n\n        private static TreeNode AddSubItem(TreeNode treeNode, string text)\n        {\n            var subTreeNode = new TreeNode(text, BuildIcons.Null, BuildIcons.Null);\n            treeNode.Nodes.Add(subTreeNode);\n            return subTreeNode;\n        }\n\n        private string GetRelativePath(string path)\n        {\n            var pathUri = new Uri(path);\n            return Uri.UnescapeDataString(_folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', System.IO.Path.DirectorySeparatorChar));\n        }\n\n        private string GetRelativeOutputPath(string path)\n        {\n            var pathUri = new Uri(path);\n            return Uri.UnescapeDataString(_outputUri.MakeRelativeUri(pathUri).ToString().Replace('/', System.IO.Path.DirectorySeparatorChar));\n        }\n\n        internal void Clear()\n        {\n            this.Nodes.Clear();\n\n            _project = null;\n            _contentItems = null;\n            _assetMap.Clear();\n            _xnbMap.Clear();\n        }\n\n        internal void PopulateAssets(PipelineProject project, IEnumerable<IProjectItem> items)\n        {\n            this._project = project;\n            this._contentItems = new List<IProjectItem>(items);\n        }\n\n        internal void PopulateAssets()\n        {\n            // Suspend FilterOutput\n            this.SuspendLayout();\n\n            foreach (var ContentItem in _contentItems)\n            {\n                var node = new TreeNode(ContentItem.OriginalPath, BuildIcons.Queued, BuildIcons.Queued);\n\n                this.Nodes.Add(node);\n\n                string key = Path.Combine(_project.Location, ContentItem.OriginalPath);\n                //normalize key\n                key = Path.ChangeExtension(key, null);\n                key = key.Replace('\\\\', '/');\n                key = new Uri(key).AbsolutePath;\n                _assetMap.Add(key, node); //map key to node\n\n                var resolvedOutputDir = ReplaceSymbols(_project, _project.OutputDir);\n                key = Path.Combine(_project.Location, resolvedOutputDir, ContentItem.OriginalPath);\n                //normalize key\n                key = Path.ChangeExtension(key, null);\n                key = key.Replace('\\\\', '/');\n                key = new Uri(key).AbsolutePath;\n                _xnbMap.Add(key, node); //map key to node\n            }\n\n            // Resume FilterOutput Layout\n            this.ResumeLayout();\n        }\n\n        string ReplaceSymbols(PipelineProject project, string parameter)\n        {\n            if (string.IsNullOrWhiteSpace(parameter))\n                return parameter;\n            return parameter\n                .Replace(\"$(Platform)\", project.Platform.ToString())\n                .Replace(\"$(Configuration)\", project.Config)\n                .Replace(\"$(Config)\", project.Config)\n                .Replace(\"$(Profile)\", project.Profile.ToString());\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/Controls/TabControlEx.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor.Windows.Controls\n{\n    public partial class TabControlEx : TabControl\n    {\n        const int TCM_ADJUSTRECT = 0x1328;\n\n        [Browsable(true)]\n        [EditorBrowsable(EditorBrowsableState.Always)]\n        [Category(\"Behavior\")]\n        [DefaultValue(false)]\n        public bool HideTabHeader { get; set; }\n\n        public TabControlEx():base()\n        {\n        }\n\n        protected override void WndProc(ref Message m)\n        {\n            switch (m.Msg)\n            {\n                case TCM_ADJUSTRECT:\n                    if (HideTabHeader && !DesignMode)\n                    {\n                        m.Result = (IntPtr)1;\n                        return;\n                    }\n                    break;\n            }\n            \n            base.WndProc(ref m);\n        }        \n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/EditorIcons.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    public static class EditorIcons\n    {\n        public static ImageList Templates { get; private set; }\n\n        static EditorIcons()\n        {\n            Templates = new ImageList();\n\n            var asm = Assembly.GetExecutingAssembly();\n            Templates.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@\"Content.Pipeline.Editor.Icons.blueprint.png\")));\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/FolderSelectDialog.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Drawing.Design;\nusing System.IO;\nusing System.Reflection;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    public class FolderSelectEditor : UITypeEditor\n    {\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)\n        {\n            var project = context.Instance as PipelineProjectProxy;\n            \n            var initialDir = (string)value;\n            if (initialDir == null || !Directory.Exists(initialDir))\n                initialDir = project.Location;\n\n            var dlg = new FolderSelectDialog()\n                {                    \n                    InitialDirectory = initialDir,\n                    Title = \"Select Folder\",\n                };\n\n            if (dlg.ShowDialog(MainView.Form))\n                return dlg.FileName;\n\n            return value;            \n        }\n    }\n    \n    /// <summary>\n    /// Wraps System.Windows.Forms.OpenFileDialog to make it present\n    /// a vista-style dialog.\n    /// </summary>\n    public class FolderSelectDialog\n\t{\n\t\t// Wrapped dialog\n\t\tSystem.Windows.Forms.OpenFileDialog ofd = null;\n\n\t\t/// <summary>\n\t\t/// Default constructor\n\t\t/// </summary>\n\t\tpublic FolderSelectDialog()\n\t\t{\n\t\t\tofd = new System.Windows.Forms.OpenFileDialog();\n\n\t\t\tofd.Filter = \"Folders|\\n\";\n\t\t\tofd.AddExtension = false;\n\t\t\tofd.CheckFileExists = false;\n\t\t\tofd.DereferenceLinks = true;\n\t\t\tofd.Multiselect = false;\n\t\t}\n\n\t\t#region Properties\n\n\t\t/// <summary>\n\t\t/// Gets/Sets the initial folder to be selected. A null value selects the current directory.\n\t\t/// </summary>\n\t\tpublic string InitialDirectory\n\t\t{\n\t\t\tget { return ofd.InitialDirectory; }\n\t\t\tset { ofd.InitialDirectory = value == null || value.Length == 0 ? Environment.CurrentDirectory : value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets/Sets the title to show in the dialog\n\t\t/// </summary>\n\t\tpublic string Title\n\t\t{\n\t\t\tget { return ofd.Title; }\n\t\t\tset { ofd.Title = value == null ? \"Select a folder\" : value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the selected folder\n\t\t/// </summary>\n\t\tpublic string FileName\n\t\t{\n\t\t\tget { return ofd.FileName; }\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Methods\n\n        /// <summary>\n        /// Shows the dialog\n        /// </summary>\n        /// <param name=\"wndOwner\">Handle of the control to be parent</param>\n        /// <returns>True if the user presses OK else false</returns>\n        public bool ShowDialog(IWin32Window wndOwner)\n\t\t{\n\t\t\tif (Environment.OSVersion.Version.Major >= 6)\n\t\t\t{\n                Type tofd = ofd.GetType();\n                Assembly asm = tofd.Assembly;\n                string nsForms = asm.GetName().Name + \".\";\n\n                Type tFileDialog = typeof(FileDialog);               \n                Type tIFileDialog = asm.GetType(nsForms + \"FileDialogNative+IFileDialog\");\n                Type tFOS = asm.GetType(nsForms + \"FileDialogNative+FOS\");\n                Type tVistaDialogEvents = asm.GetType(nsForms + \"FileDialog+VistaDialogEvents\");\n                \n                MethodInfo miCreateVistaDialog = tofd.GetMethod(\"CreateVistaDialog\", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));\n                MethodInfo miOnBeforeVistaDialog = tofd.GetMethod(\"OnBeforeVistaDialog\", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));\n                MethodInfo miGetOptions = tFileDialog.GetMethod(\"GetOptions\", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));\n                MethodInfo miSetOptions = tIFileDialog.GetMethod(\"SetOptions\", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));\n\n                object dialog = miCreateVistaDialog.Invoke(ofd, new object[] { });\n\n                miOnBeforeVistaDialog.Invoke(ofd, new [] { dialog });\n\n                uint options = (uint)miGetOptions.Invoke(ofd, new object[] { });                \n                uint FOS_PICKFOLDERS = (uint)tFOS.GetField(\"FOS_PICKFOLDERS\").GetValue(null);\n                options |= FOS_PICKFOLDERS;\n\n                miSetOptions.Invoke(dialog, new object[] { options });\n\n                object pfde = null;   \n                ConstructorInfo[] ctorInfos = tVistaDialogEvents.GetConstructors();\n                foreach (ConstructorInfo ci in ctorInfos)\n                {\n                    try\n                    {\n                        pfde = ci.Invoke(new[] { ofd });\n                        break;\n                    }\n                    catch { }\n                }\n\n                MethodInfo miAdvise = tIFileDialog.GetMethod(\"Advise\", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));\n                MethodInfo miShow = tIFileDialog.GetMethod(\"Show\", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));\n                MethodInfo miUnadvise = tIFileDialog.GetMethod(\"Unadvise\", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));\n\n\t\t\t\tuint num = 0;\n\t\t\t\tobject[] parameters = new [] { pfde, num };\n                miAdvise.Invoke(dialog, parameters);\n                num = (uint)parameters[1];\n\t\t\t\ttry\n\t\t\t\t{\n                    int num2 = (int)miShow.Invoke(dialog, new object[] { wndOwner.Handle });\n                    return (0 == num2);\n\n                }\n\t\t\t\tfinally\n\t\t\t\t{\n                    miUnadvise.Invoke(dialog, new object[] { num });\n                    GC.KeepAlive(pfde);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar fbd = new FolderBrowserDialog();\n\t\t\t\tfbd.Description = this.Title;\n\t\t\t\tfbd.SelectedPath = this.InitialDirectory;\n\t\t\t\tfbd.ShowNewFolderButton = false;\n\t\t\t\tif (fbd.ShowDialog(wndOwner) != DialogResult.OK)\n                    return false;\n\t\t\t\tofd.FileName = fbd.SelectedPath;\n                return true;\n\t\t\t}\n\t\t}\n\n        #endregion\n    }\n\n}\n\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/MainView.Designer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    partial class MainView\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            System.Windows.Forms.ToolStripSeparator _toolStripSeparator3;\n            System.Windows.Forms.ToolStripSeparator _toolStripSeparator1;\n            System.Windows.Forms.ToolStripSeparator _toolStripSeparator2;\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainView));\n            this._mainMenu = new System.Windows.Forms.MenuStrip();\n            this._fileMenu = new System.Windows.Forms.ToolStripMenuItem();\n            this._newProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._openProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._openRecentMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._closeMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();\n            this._importProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._saveMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._saveAsMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._exitMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._undoMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._redoMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n            this._addMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.newItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.newFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();\n            this.existingItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.existingFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this._renameMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._deleteMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._buildMenu = new System.Windows.Forms.ToolStripMenuItem();\n            this._buildMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._rebuildMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._cleanMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();\n            this._filterOutputMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._singlethreadMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._cancelBuildSeparator = new System.Windows.Forms.ToolStripSeparator();\n            this._cancelBuildMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._helpMenu = new System.Windows.Forms.ToolStripMenuItem();\n            this._viewHelpMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._aboutMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._treeContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this._treeOpenFileMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._treeAddMenu = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripMenuItem();\n            this._treeSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this._treeOpenFileLocationMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._treeRebuildMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n            this._treeRenameMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._treeDeleteMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this._toolNew = new System.Windows.Forms.ToolStripButton();\n            this._toolOpen = new System.Windows.Forms.ToolStripButton();\n            this._toolSave = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();\n            this._toolNewItem = new System.Windows.Forms.ToolStripButton();\n            this._toolAddItem = new System.Windows.Forms.ToolStripButton();\n            this._toolNewFolder = new System.Windows.Forms.ToolStripButton();\n            this._toolAddFolder = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();\n            this._toolBuild = new System.Windows.Forms.ToolStripButton();\n            this._toolRebuild = new System.Windows.Forms.ToolStripButton();\n            this._toolClean = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator();\n            this._toolFilterOutput = new System.Windows.Forms.ToolStripButton();\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this._splitEditorOutput = new System.Windows.Forms.SplitContainer();\n            this._splitTreeProps = new System.Windows.Forms.SplitContainer();\n            this._treeView = new Content.Pipeline.Editor.MultiSelectTreeview();\n            this._propertyGrid = new System.Windows.Forms.PropertyGrid();\n            this._outputTabs = new Content.Pipeline.Editor.Windows.Controls.TabControlEx();\n            this._outputTabPage1 = new System.Windows.Forms.TabPage();\n            this._outputWindow = new System.Windows.Forms.RichTextBox();\n            this._outputTabPage2 = new System.Windows.Forms.TabPage();\n            this._filterOutputWindow = new Content.Pipeline.Editor.Windows.Controls.FilterOutputControl();\n            _toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();\n            _toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            _toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n            this._mainMenu.SuspendLayout();\n            this._treeContextMenu.SuspendLayout();\n            this.toolStrip1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this._splitEditorOutput)).BeginInit();\n            this._splitEditorOutput.Panel1.SuspendLayout();\n            this._splitEditorOutput.Panel2.SuspendLayout();\n            this._splitEditorOutput.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this._splitTreeProps)).BeginInit();\n            this._splitTreeProps.Panel1.SuspendLayout();\n            this._splitTreeProps.Panel2.SuspendLayout();\n            this._splitTreeProps.SuspendLayout();\n            this._outputTabs.SuspendLayout();\n            this._outputTabPage1.SuspendLayout();\n            this._outputTabPage2.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // _toolStripSeparator3\n            // \n            _toolStripSeparator3.Name = \"_toolStripSeparator3\";\n            _toolStripSeparator3.Size = new System.Drawing.Size(207, 6);\n            // \n            // _toolStripSeparator1\n            // \n            _toolStripSeparator1.Name = \"_toolStripSeparator1\";\n            _toolStripSeparator1.Size = new System.Drawing.Size(207, 6);\n            // \n            // _toolStripSeparator2\n            // \n            _toolStripSeparator2.Name = \"_toolStripSeparator2\";\n            _toolStripSeparator2.Size = new System.Drawing.Size(167, 6);\n            // \n            // _mainMenu\n            // \n            this._mainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this._fileMenu,\n            this.editToolStripMenuItem,\n            this._buildMenu,\n            this._helpMenu});\n            this._mainMenu.Location = new System.Drawing.Point(0, 0);\n            this._mainMenu.Name = \"_mainMenu\";\n            this._mainMenu.Size = new System.Drawing.Size(784, 28);\n            this._mainMenu.TabIndex = 0;\n            this._mainMenu.Text = \"menuStrip1\";\n            this._mainMenu.MenuActivate += new System.EventHandler(this.MainMenuMenuActivate);\n            // \n            // _fileMenu\n            // \n            this._fileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this._newProjectMenuItem,\n            this._openProjectMenuItem,\n            this._openRecentMenuItem,\n            this._closeMenuItem,\n            this.toolStripSeparator3,\n            this._importProjectMenuItem,\n            _toolStripSeparator3,\n            this._saveMenuItem,\n            this._saveAsMenuItem,\n            _toolStripSeparator1,\n            this._exitMenuItem});\n            this._fileMenu.Name = \"_fileMenu\";\n            this._fileMenu.Size = new System.Drawing.Size(44, 24);\n            this._fileMenu.Text = \"&File\";\n            // \n            // _newProjectMenuItem\n            // \n            this._newProjectMenuItem.Name = \"_newProjectMenuItem\";\n            this._newProjectMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) \n            | System.Windows.Forms.Keys.N)));\n            this._newProjectMenuItem.Size = new System.Drawing.Size(210, 24);\n            this._newProjectMenuItem.Text = \"New...\";\n            this._newProjectMenuItem.Click += new System.EventHandler(this.OnNewProjectClick);\n            // \n            // _openProjectMenuItem\n            // \n            this._openProjectMenuItem.Name = \"_openProjectMenuItem\";\n            this._openProjectMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));\n            this._openProjectMenuItem.Size = new System.Drawing.Size(210, 24);\n            this._openProjectMenuItem.Text = \"Open...\";\n            this._openProjectMenuItem.Click += new System.EventHandler(this.OnOpenProjectClick);\n            // \n            // _openRecentMenuItem\n            // \n            this._openRecentMenuItem.Name = \"_openRecentMenuItem\";\n            this._openRecentMenuItem.Size = new System.Drawing.Size(210, 24);\n            this._openRecentMenuItem.Text = \"Open Recent\";\n            // \n            // _closeMenuItem\n            // \n            this._closeMenuItem.Name = \"_closeMenuItem\";\n            this._closeMenuItem.Size = new System.Drawing.Size(210, 24);\n            this._closeMenuItem.Text = \"Close\";\n            this._closeMenuItem.Click += new System.EventHandler(this.OnCloseProjectClick);\n            // \n            // toolStripSeparator3\n            // \n            this.toolStripSeparator3.Name = \"toolStripSeparator3\";\n            this.toolStripSeparator3.Size = new System.Drawing.Size(207, 6);\n            // \n            // _importProjectMenuItem\n            // \n            this._importProjectMenuItem.Name = \"_importProjectMenuItem\";\n            this._importProjectMenuItem.Size = new System.Drawing.Size(210, 24);\n            this._importProjectMenuItem.Text = \"Import...\";\n            this._importProjectMenuItem.Click += new System.EventHandler(this.OnImportProjectClick);\n            // \n            // _saveMenuItem\n            // \n            this._saveMenuItem.Name = \"_saveMenuItem\";\n            this._saveMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));\n            this._saveMenuItem.Size = new System.Drawing.Size(210, 24);\n            this._saveMenuItem.Text = \"&Save\";\n            this._saveMenuItem.Click += new System.EventHandler(this.OnSaveProjectClick);\n            // \n            // _saveAsMenuItem\n            // \n            this._saveAsMenuItem.Name = \"_saveAsMenuItem\";\n            this._saveAsMenuItem.Size = new System.Drawing.Size(210, 24);\n            this._saveAsMenuItem.Text = \"Save &As...\";\n            this._saveAsMenuItem.Click += new System.EventHandler(this.OnSaveAsProjectClick);\n            // \n            // _exitMenuItem\n            // \n            this._exitMenuItem.Name = \"_exitMenuItem\";\n            this._exitMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));\n            this._exitMenuItem.Size = new System.Drawing.Size(210, 24);\n            this._exitMenuItem.Text = \"E&xit\";\n            this._exitMenuItem.Click += new System.EventHandler(this.ExitMenuItemClick);\n            // \n            // editToolStripMenuItem\n            // \n            this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this._undoMenuItem,\n            this._redoMenuItem,\n            this.toolStripSeparator2,\n            this._addMenuItem,\n            this.toolStripSeparator1,\n            this._renameMenuItem,\n            this._deleteMenuItem});\n            this.editToolStripMenuItem.Name = \"editToolStripMenuItem\";\n            this.editToolStripMenuItem.Size = new System.Drawing.Size(47, 24);\n            this.editToolStripMenuItem.Text = \"&Edit\";\n            // \n            // _undoMenuItem\n            // \n            this._undoMenuItem.Enabled = false;\n            this._undoMenuItem.Name = \"_undoMenuItem\";\n            this._undoMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z)));\n            this._undoMenuItem.Size = new System.Drawing.Size(165, 24);\n            this._undoMenuItem.Text = \"Undo\";\n            this._undoMenuItem.Click += new System.EventHandler(this.OnUndoClick);\n            // \n            // _redoMenuItem\n            // \n            this._redoMenuItem.Enabled = false;\n            this._redoMenuItem.Name = \"_redoMenuItem\";\n            this._redoMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y)));\n            this._redoMenuItem.Size = new System.Drawing.Size(165, 24);\n            this._redoMenuItem.Text = \"Redo\";\n            this._redoMenuItem.Click += new System.EventHandler(this.OnRedoClick);\n            // \n            // toolStripSeparator2\n            // \n            this.toolStripSeparator2.Name = \"toolStripSeparator2\";\n            this.toolStripSeparator2.Size = new System.Drawing.Size(162, 6);\n            // \n            // _addMenuItem\n            // \n            this._addMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.newItemToolStripMenuItem,\n            this.newFolderToolStripMenuItem,\n            this.toolStripMenuItem2,\n            this.existingItemToolStripMenuItem,\n            this.existingFolderToolStripMenuItem});\n            this._addMenuItem.Name = \"_addMenuItem\";\n            this._addMenuItem.Size = new System.Drawing.Size(165, 24);\n            this._addMenuItem.Text = \"Add\";\n            // \n            // newItemToolStripMenuItem\n            // \n            this.newItemToolStripMenuItem.Name = \"newItemToolStripMenuItem\";\n            this.newItemToolStripMenuItem.Size = new System.Drawing.Size(184, 24);\n            this.newItemToolStripMenuItem.Text = \"New Item...\";\n            this.newItemToolStripMenuItem.Click += new System.EventHandler(this.OnNewItemClick);\n            // \n            // newFolderToolStripMenuItem\n            // \n            this.newFolderToolStripMenuItem.Name = \"newFolderToolStripMenuItem\";\n            this.newFolderToolStripMenuItem.Size = new System.Drawing.Size(184, 24);\n            this.newFolderToolStripMenuItem.Text = \"New Folder...\";\n            this.newFolderToolStripMenuItem.Click += new System.EventHandler(this.OnNewFolderClick);\n            // \n            // toolStripMenuItem2\n            // \n            this.toolStripMenuItem2.Name = \"toolStripMenuItem2\";\n            this.toolStripMenuItem2.Size = new System.Drawing.Size(181, 6);\n            // \n            // existingItemToolStripMenuItem\n            // \n            this.existingItemToolStripMenuItem.Name = \"existingItemToolStripMenuItem\";\n            this.existingItemToolStripMenuItem.Size = new System.Drawing.Size(184, 24);\n            this.existingItemToolStripMenuItem.Text = \"Existing Item...\";\n            this.existingItemToolStripMenuItem.Click += new System.EventHandler(this.OnAddItemClick);\n            // \n            // existingFolderToolStripMenuItem\n            // \n            this.existingFolderToolStripMenuItem.Name = \"existingFolderToolStripMenuItem\";\n            this.existingFolderToolStripMenuItem.Size = new System.Drawing.Size(184, 24);\n            this.existingFolderToolStripMenuItem.Text = \"Existing Folder...\";\n            this.existingFolderToolStripMenuItem.Click += new System.EventHandler(this.OnAddFolderClick);\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(162, 6);\n            // \n            // _renameMenuItem\n            // \n            this._renameMenuItem.Name = \"_renameMenuItem\";\n            this._renameMenuItem.Size = new System.Drawing.Size(165, 24);\n            this._renameMenuItem.Text = \"Rename\";\n            this._renameMenuItem.Click += new System.EventHandler(this.OnRenameItemClick);\n            // \n            // _deleteMenuItem\n            // \n            this._deleteMenuItem.Name = \"_deleteMenuItem\";\n            this._deleteMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete;\n            this._deleteMenuItem.Size = new System.Drawing.Size(165, 24);\n            this._deleteMenuItem.Text = \"&Remove\";\n            this._deleteMenuItem.Click += new System.EventHandler(this.OnDeleteItemClick);\n            // \n            // _buildMenu\n            // \n            this._buildMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this._buildMenuItem,\n            this._rebuildMenuItem,\n            this._cleanMenuItem,\n            this.toolStripSeparator5,\n            this._filterOutputMenuItem,\n            this._singlethreadMenuItem,\n            this._cancelBuildSeparator,\n            this._cancelBuildMenuItem});\n            this._buildMenu.Name = \"_buildMenu\";\n            this._buildMenu.Size = new System.Drawing.Size(55, 24);\n            this._buildMenu.Text = \"&Build\";\n            // \n            // _buildMenuItem\n            // \n            this._buildMenuItem.Name = \"_buildMenuItem\";\n            this._buildMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F6;\n            this._buildMenuItem.Size = new System.Drawing.Size(201, 24);\n            this._buildMenuItem.Text = \"&Build\";\n            this._buildMenuItem.Click += new System.EventHandler(this.BuildMenuItemClick);\n            // \n            // _rebuildMenuItem\n            // \n            this._rebuildMenuItem.Name = \"_rebuildMenuItem\";\n            this._rebuildMenuItem.Size = new System.Drawing.Size(201, 24);\n            this._rebuildMenuItem.Text = \"&Rebuild\";\n            this._rebuildMenuItem.Click += new System.EventHandler(this.RebuildMenuItemClick);\n            // \n            // _cleanMenuItem\n            // \n            this._cleanMenuItem.Name = \"_cleanMenuItem\";\n            this._cleanMenuItem.Size = new System.Drawing.Size(201, 24);\n            this._cleanMenuItem.Text = \"&Clean\";\n            this._cleanMenuItem.Click += new System.EventHandler(this.CleanMenuItemClick);\n            // \n            // toolStripSeparator5\n            // \n            this.toolStripSeparator5.Name = \"toolStripSeparator5\";\n            this.toolStripSeparator5.Size = new System.Drawing.Size(198, 6);\n            // \n            // _filterOutputMenuItem\n            // \n            this._filterOutputMenuItem.Checked = true;\n            this._filterOutputMenuItem.CheckOnClick = true;\n            this._filterOutputMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;\n            this._filterOutputMenuItem.Name = \"_filterOutputMenuItem\";\n            this._filterOutputMenuItem.Size = new System.Drawing.Size(201, 24);\n            this._filterOutputMenuItem.Text = \"Filter Output\";\n            this._filterOutputMenuItem.CheckedChanged += new System.EventHandler(this.FilterOutputMenuItem_CheckedChanged);\n            // \n            // _singlethreadMenuItem\n            // \n            this._singlethreadMenuItem.CheckOnClick = true;\n            this._singlethreadMenuItem.Name = \"_singlethreadMenuItem\";\n            this._singlethreadMenuItem.Size = new System.Drawing.Size(201, 24);\n            this._singlethreadMenuItem.Text = \"SingleThread\";\n            // \n            // _cancelBuildSeparator\n            // \n            this._cancelBuildSeparator.Name = \"_cancelBuildSeparator\";\n            this._cancelBuildSeparator.Size = new System.Drawing.Size(198, 6);\n            this._cancelBuildSeparator.Visible = false;\n            // \n            // _cancelBuildMenuItem\n            // \n            this._cancelBuildMenuItem.Name = \"_cancelBuildMenuItem\";\n            this._cancelBuildMenuItem.ShortcutKeyDisplayString = \"Ctrl+Break\";\n            this._cancelBuildMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Pause)));\n            this._cancelBuildMenuItem.Size = new System.Drawing.Size(201, 24);\n            this._cancelBuildMenuItem.Text = \"Cancel\";\n            this._cancelBuildMenuItem.Visible = false;\n            this._cancelBuildMenuItem.Click += new System.EventHandler(this.CancelBuildMenuItemClick);\n            // \n            // _helpMenu\n            // \n            this._helpMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this._viewHelpMenuItem,\n            _toolStripSeparator2,\n            this._aboutMenuItem});\n            this._helpMenu.Name = \"_helpMenu\";\n            this._helpMenu.Size = new System.Drawing.Size(53, 24);\n            this._helpMenu.Text = \"&Help\";\n            // \n            // _viewHelpMenuItem\n            // \n            this._viewHelpMenuItem.Name = \"_viewHelpMenuItem\";\n            this._viewHelpMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1;\n            this._viewHelpMenuItem.Size = new System.Drawing.Size(170, 24);\n            this._viewHelpMenuItem.Text = \"&View Help\";\n            this._viewHelpMenuItem.Click += new System.EventHandler(this.ViewHelpMenuItemClick);\n            // \n            // _aboutMenuItem\n            // \n            this._aboutMenuItem.Name = \"_aboutMenuItem\";\n            this._aboutMenuItem.Size = new System.Drawing.Size(170, 24);\n            this._aboutMenuItem.Text = \"&About...\";\n            this._aboutMenuItem.Click += new System.EventHandler(this.AboutMenuItemClick);\n            // \n            // _treeContextMenu\n            // \n            this._treeContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this._treeOpenFileMenuItem,\n            this._treeAddMenu,\n            this._treeSeparator1,\n            this._treeOpenFileLocationMenuItem,\n            this._treeRebuildMenuItem,\n            this.toolStripSeparator4,\n            this._treeRenameMenuItem,\n            this._treeDeleteMenuItem});\n            this._treeContextMenu.Name = \"itemContextMenu\";\n            this._treeContextMenu.Size = new System.Drawing.Size(203, 160);\n            this._treeContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.MainMenuMenuActivate);\n            // \n            // _treeOpenFileMenuItem\n            // \n            this._treeOpenFileMenuItem.Name = \"_treeOpenFileMenuItem\";\n            this._treeOpenFileMenuItem.Size = new System.Drawing.Size(202, 24);\n            this._treeOpenFileMenuItem.Text = \"Open File\";\n            this._treeOpenFileMenuItem.Click += new System.EventHandler(this.ContextMenu_OpenFile_Click);\n            // \n            // _treeAddMenu\n            // \n            this._treeAddMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripMenuItem3,\n            this.toolStripMenuItem4,\n            this.toolStripSeparator7,\n            this.toolStripMenuItem5,\n            this.toolStripMenuItem6});\n            this._treeAddMenu.Name = \"_treeAddMenu\";\n            this._treeAddMenu.Size = new System.Drawing.Size(202, 24);\n            this._treeAddMenu.Text = \"Add\";\n            // \n            // toolStripMenuItem3\n            // \n            this.toolStripMenuItem3.Name = \"toolStripMenuItem3\";\n            this.toolStripMenuItem3.Size = new System.Drawing.Size(184, 24);\n            this.toolStripMenuItem3.Text = \"New Item...\";\n            this.toolStripMenuItem3.Click += new System.EventHandler(this.OnNewItemClick);\n            // \n            // toolStripMenuItem4\n            // \n            this.toolStripMenuItem4.Name = \"toolStripMenuItem4\";\n            this.toolStripMenuItem4.Size = new System.Drawing.Size(184, 24);\n            this.toolStripMenuItem4.Text = \"New Folder...\";\n            this.toolStripMenuItem4.Click += new System.EventHandler(this.OnNewFolderClick);\n            // \n            // toolStripSeparator7\n            // \n            this.toolStripSeparator7.Name = \"toolStripSeparator7\";\n            this.toolStripSeparator7.Size = new System.Drawing.Size(181, 6);\n            // \n            // toolStripMenuItem5\n            // \n            this.toolStripMenuItem5.Name = \"toolStripMenuItem5\";\n            this.toolStripMenuItem5.Size = new System.Drawing.Size(184, 24);\n            this.toolStripMenuItem5.Text = \"Existing Item...\";\n            this.toolStripMenuItem5.Click += new System.EventHandler(this.OnAddItemClick);\n            // \n            // toolStripMenuItem6\n            // \n            this.toolStripMenuItem6.Name = \"toolStripMenuItem6\";\n            this.toolStripMenuItem6.Size = new System.Drawing.Size(184, 24);\n            this.toolStripMenuItem6.Text = \"Existing Folder...\";\n            this.toolStripMenuItem6.Click += new System.EventHandler(this.OnAddFolderClick);\n            // \n            // _treeSeparator1\n            // \n            this._treeSeparator1.Name = \"_treeSeparator1\";\n            this._treeSeparator1.Size = new System.Drawing.Size(199, 6);\n            // \n            // _treeOpenFileLocationMenuItem\n            // \n            this._treeOpenFileLocationMenuItem.Name = \"_treeOpenFileLocationMenuItem\";\n            this._treeOpenFileLocationMenuItem.Size = new System.Drawing.Size(202, 24);\n            this._treeOpenFileLocationMenuItem.Text = \"Open File Location\";\n            this._treeOpenFileLocationMenuItem.Click += new System.EventHandler(this.ContextMenu_OpenFileLocation_Click);\n            // \n            // _treeRebuildMenuItem\n            // \n            this._treeRebuildMenuItem.Name = \"_treeRebuildMenuItem\";\n            this._treeRebuildMenuItem.Size = new System.Drawing.Size(202, 24);\n            this._treeRebuildMenuItem.Text = \"Rebuild\";\n            this._treeRebuildMenuItem.Click += new System.EventHandler(this.RebuildItemsMenuItemClick);\n            // \n            // toolStripSeparator4\n            // \n            this.toolStripSeparator4.Name = \"toolStripSeparator4\";\n            this.toolStripSeparator4.Size = new System.Drawing.Size(199, 6);\n            // \n            // _treeRenameMenuItem\n            // \n            this._treeRenameMenuItem.Name = \"_treeRenameMenuItem\";\n            this._treeRenameMenuItem.Size = new System.Drawing.Size(202, 24);\n            this._treeRenameMenuItem.Text = \"Rename\";\n            this._treeRenameMenuItem.Click += new System.EventHandler(this.OnRenameItemClick);\n            // \n            // _treeDeleteMenuItem\n            // \n            this._treeDeleteMenuItem.Name = \"_treeDeleteMenuItem\";\n            this._treeDeleteMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete;\n            this._treeDeleteMenuItem.Size = new System.Drawing.Size(202, 24);\n            this._treeDeleteMenuItem.Text = \"&Remove\";\n            this._treeDeleteMenuItem.Click += new System.EventHandler(this.OnDeleteItemClick);\n            // \n            // _toolNew\n            // \n            this._toolNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolNew.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolNew.Image\")));\n            this._toolNew.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolNew.Name = \"_toolNew\";\n            this._toolNew.Size = new System.Drawing.Size(23, 22);\n            this._toolNew.Text = \"New\";\n            this._toolNew.Click += new System.EventHandler(this.OnNewProjectClick);\n            // \n            // _toolOpen\n            // \n            this._toolOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolOpen.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolOpen.Image\")));\n            this._toolOpen.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolOpen.Name = \"_toolOpen\";\n            this._toolOpen.Size = new System.Drawing.Size(23, 22);\n            this._toolOpen.Text = \"Open\";\n            this._toolOpen.Click += new System.EventHandler(this.OnOpenProjectClick);\n            // \n            // _toolSave\n            // \n            this._toolSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolSave.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolSave.Image\")));\n            this._toolSave.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolSave.Name = \"_toolSave\";\n            this._toolSave.Size = new System.Drawing.Size(23, 22);\n            this._toolSave.Text = \"Save\";\n            this._toolSave.Click += new System.EventHandler(this.OnSaveProjectClick);\n            // \n            // toolStripSeparator6\n            // \n            this.toolStripSeparator6.Name = \"toolStripSeparator6\";\n            this.toolStripSeparator6.Size = new System.Drawing.Size(6, 25);\n            // \n            // _toolNewItem\n            // \n            this._toolNewItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolNewItem.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolNewItem.Image\")));\n            this._toolNewItem.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolNewItem.Name = \"_toolNewItem\";\n            this._toolNewItem.Size = new System.Drawing.Size(23, 22);\n            this._toolNewItem.Text = \"Add New Item\";\n            this._toolNewItem.Click += new System.EventHandler(this.OnNewItemClick);\n            // \n            // _toolAddItem\n            // \n            this._toolAddItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolAddItem.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolAddItem.Image\")));\n            this._toolAddItem.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolAddItem.Name = \"_toolAddItem\";\n            this._toolAddItem.Size = new System.Drawing.Size(23, 22);\n            this._toolAddItem.Text = \"Add Existing Item\";\n            this._toolAddItem.Click += new System.EventHandler(this.OnAddItemClick);\n            // \n            // _toolNewFolder\n            // \n            this._toolNewFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolNewFolder.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolNewFolder.Image\")));\n            this._toolNewFolder.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolNewFolder.Name = \"_toolNewFolder\";\n            this._toolNewFolder.Size = new System.Drawing.Size(23, 22);\n            this._toolNewFolder.Text = \"Add New Folder\";\n            this._toolNewFolder.Click += new System.EventHandler(this.OnNewFolderClick);\n            // \n            // _toolAddFolder\n            // \n            this._toolAddFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolAddFolder.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolAddFolder.Image\")));\n            this._toolAddFolder.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolAddFolder.Name = \"_toolAddFolder\";\n            this._toolAddFolder.Size = new System.Drawing.Size(23, 22);\n            this._toolAddFolder.Text = \"Add Existing Folder\";\n            this._toolAddFolder.Click += new System.EventHandler(this.OnAddFolderClick);\n            // \n            // toolStripSeparator8\n            // \n            this.toolStripSeparator8.Name = \"toolStripSeparator8\";\n            this.toolStripSeparator8.Size = new System.Drawing.Size(6, 25);\n            // \n            // _toolBuild\n            // \n            this._toolBuild.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolBuild.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolBuild.Image\")));\n            this._toolBuild.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolBuild.Name = \"_toolBuild\";\n            this._toolBuild.Size = new System.Drawing.Size(23, 22);\n            this._toolBuild.Text = \"Build\";\n            this._toolBuild.Click += new System.EventHandler(this.BuildMenuItemClick);\n            // \n            // _toolRebuild\n            // \n            this._toolRebuild.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolRebuild.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolRebuild.Image\")));\n            this._toolRebuild.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolRebuild.Name = \"_toolRebuild\";\n            this._toolRebuild.Size = new System.Drawing.Size(23, 22);\n            this._toolRebuild.Text = \"Rebuild\";\n            this._toolRebuild.Click += new System.EventHandler(this.RebuildMenuItemClick);\n            // \n            // _toolClean\n            // \n            this._toolClean.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolClean.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolClean.Image\")));\n            this._toolClean.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolClean.Name = \"_toolClean\";\n            this._toolClean.Size = new System.Drawing.Size(23, 22);\n            this._toolClean.Text = \"Clean\";\n            this._toolClean.Click += new System.EventHandler(this.CleanMenuItemClick);\n            // \n            // toolStripSeparator9\n            // \n            this.toolStripSeparator9.Name = \"toolStripSeparator9\";\n            this.toolStripSeparator9.Size = new System.Drawing.Size(6, 25);\n            // \n            // _toolFilterOutput\n            // \n            this._toolFilterOutput.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this._toolFilterOutput.Image = ((System.Drawing.Image)(resources.GetObject(\"_toolFilterOutput.Image\")));\n            this._toolFilterOutput.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this._toolFilterOutput.Name = \"_toolFilterOutput\";\n            this._toolFilterOutput.Size = new System.Drawing.Size(23, 22);\n            this._toolFilterOutput.Text = \"Filter Output\";\n            this._toolFilterOutput.Click += new System.EventHandler(this._toolFilterOutput_Click);\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this._toolNew,\n            this._toolOpen,\n            this._toolSave,\n            this.toolStripSeparator6,\n            this._toolNewItem,\n            this._toolAddItem,\n            this._toolNewFolder,\n            this._toolAddFolder,\n            this.toolStripSeparator8,\n            this._toolBuild,\n            this._toolRebuild,\n            this._toolClean,\n            this.toolStripSeparator9,\n            this._toolFilterOutput});\n            this.toolStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow;\n            this.toolStrip1.Location = new System.Drawing.Point(0, 28);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.Padding = new System.Windows.Forms.Padding(4, 0, 1, 0);\n            this.toolStrip1.Size = new System.Drawing.Size(784, 25);\n            this.toolStrip1.TabIndex = 3;\n            this.toolStrip1.Text = \"toolStrip1\";\n            // \n            // _splitEditorOutput\n            // \n            this._splitEditorOutput.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._splitEditorOutput.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;\n            this._splitEditorOutput.Location = new System.Drawing.Point(0, 53);\n            this._splitEditorOutput.Name = \"_splitEditorOutput\";\n            // \n            // _splitEditorOutput.Panel1\n            // \n            this._splitEditorOutput.Panel1.Controls.Add(this._splitTreeProps);\n            // \n            // _splitEditorOutput.Panel2\n            // \n            this._splitEditorOutput.Panel2.Controls.Add(this._outputTabs);\n            this._splitEditorOutput.Size = new System.Drawing.Size(784, 508);\n            this._splitEditorOutput.SplitterDistance = 306;\n            this._splitEditorOutput.TabIndex = 4;\n            this._splitEditorOutput.TabStop = false;\n            this._splitEditorOutput.SplitterMoved += _splitEditorOutput_SplitterMoved;\n            // \n            // _splitTreeProps\n            // \n            this._splitTreeProps.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._splitTreeProps.Location = new System.Drawing.Point(0, 0);\n            this._splitTreeProps.Name = \"_splitTreeProps\";\n            this._splitTreeProps.Orientation = System.Windows.Forms.Orientation.Horizontal;\n            // \n            // _splitTreeProps.Panel1\n            // \n            this._splitTreeProps.Panel1.Controls.Add(this._treeView);\n            // \n            // _splitTreeProps.Panel2\n            // \n            this._splitTreeProps.Panel2.Controls.Add(this._propertyGrid);\n            this._splitTreeProps.Size = new System.Drawing.Size(306, 508);\n            this._splitTreeProps.SplitterDistance = 198;\n            this._splitTreeProps.TabIndex = 1;\n            this._splitTreeProps.TabStop = false;\n            this._splitTreeProps.SplitterMoved += _splitTreeProps_SplitterMoved;\n            // \n            // _treeView\n            // \n            this._treeView.AllowDrop = true;\n            this._treeView.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._treeView.DragOverNodeBackColor = System.Drawing.SystemColors.Highlight;\n            this._treeView.DragOverNodeForeColor = System.Drawing.SystemColors.HighlightText;\n            this._treeView.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this._treeView.ItemHeight = 22;\n            this._treeView.Location = new System.Drawing.Point(0, 0);\n            this._treeView.Name = \"_treeView\";\n            this._treeView.Size = new System.Drawing.Size(306, 198);\n            this._treeView.TabIndex = 0;\n            this._treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TreeViewAfterSelect);\n            this._treeView.DragDrop += new System.Windows.Forms.DragEventHandler(this._treeView_DragDrop);\n            this._treeView.DragOver += new System.Windows.Forms.DragEventHandler(this._treeView_DragOver);\n            this._treeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TreeViewOnKeyDown);\n            this._treeView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.TreeViewMouseUp);\n            // \n            // _propertyGrid\n            // \n            this._propertyGrid.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;\n            this._propertyGrid.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._propertyGrid.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this._propertyGrid.Location = new System.Drawing.Point(0, 0);\n            this._propertyGrid.Name = \"_propertyGrid\";\n            this._propertyGrid.Size = new System.Drawing.Size(306, 306);\n            this._propertyGrid.TabIndex = 0;\n            // \n            // _outputTabs\n            // \n            this._outputTabs.Appearance = System.Windows.Forms.TabAppearance.FlatButtons;\n            this._outputTabs.Controls.Add(this._outputTabPage1);\n            this._outputTabs.Controls.Add(this._outputTabPage2);\n            this._outputTabs.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._outputTabs.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this._outputTabs.HideTabHeader = true;\n            this._outputTabs.Location = new System.Drawing.Point(0, 0);\n            this._outputTabs.Margin = new System.Windows.Forms.Padding(0);\n            this._outputTabs.Name = \"_outputTabs\";\n            this._outputTabs.Padding = new System.Drawing.Point(0, 0);\n            this._outputTabs.SelectedIndex = 0;\n            this._outputTabs.Size = new System.Drawing.Size(474, 508);\n            this._outputTabs.TabIndex = 0;\n            this._outputTabs.TabStop = false;\n            // \n            // _outputTabPage1\n            // \n            this._outputTabPage1.Controls.Add(this._outputWindow);\n            this._outputTabPage1.Location = new System.Drawing.Point(4, 25);\n            this._outputTabPage1.Margin = new System.Windows.Forms.Padding(0);\n            this._outputTabPage1.Name = \"_outputTabPage1\";\n            this._outputTabPage1.Size = new System.Drawing.Size(466, 479);\n            this._outputTabPage1.TabIndex = 0;\n            this._outputTabPage1.Text = \"_outputTabPage1\";\n            this._outputTabPage1.UseVisualStyleBackColor = true;\n            // \n            // _outputWindow\n            // \n            this._outputWindow.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._outputWindow.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this._outputWindow.HideSelection = false;\n            this._outputWindow.Location = new System.Drawing.Point(0, 0);\n            this._outputWindow.Name = \"_outputWindow\";\n            this._outputWindow.ReadOnly = true;\n            this._outputWindow.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;\n            this._outputWindow.Size = new System.Drawing.Size(466, 479);\n            this._outputWindow.TabIndex = 0;\n            this._outputWindow.TabStop = false;\n            this._outputWindow.Text = \"\";\n            // \n            // _outputTabPage2\n            // \n            this._outputTabPage2.Controls.Add(this._filterOutputWindow);\n            this._outputTabPage2.Location = new System.Drawing.Point(4, 25);\n            this._outputTabPage2.Margin = new System.Windows.Forms.Padding(0);\n            this._outputTabPage2.Name = \"_outputTabPage2\";\n            this._outputTabPage2.Size = new System.Drawing.Size(523, 479);\n            this._outputTabPage2.TabIndex = 0;\n            this._outputTabPage2.Text = \"_outputTabPage2\";\n            this._outputTabPage2.UseVisualStyleBackColor = true;\n            // \n            // _filterOutputWindow\n            // \n            this._filterOutputWindow.BackColor = System.Drawing.SystemColors.Control;\n            this._filterOutputWindow.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._filterOutputWindow.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161)));\n            this._filterOutputWindow.FullRowSelect = true;\n            this._filterOutputWindow.ImageIndex = 0;\n            this._filterOutputWindow.ItemHeight = 22;\n            this._filterOutputWindow.Location = new System.Drawing.Point(0, 0);\n            this._filterOutputWindow.Name = \"_filterOutputWindow\";\n            this._filterOutputWindow.SelectedImageIndex = 0;\n            this._filterOutputWindow.ShowLines = false;\n            this._filterOutputWindow.ShowNodeToolTips = true;\n            this._filterOutputWindow.Size = new System.Drawing.Size(523, 479);\n            this._filterOutputWindow.TabIndex = 0;\n            // \n            // MainView\n            // \n            this.AllowDrop = true;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(784, 561);\n            this.Controls.Add(this._splitEditorOutput);\n            this.Controls.Add(this.toolStrip1);\n            this.Controls.Add(this._mainMenu);\n            this.DoubleBuffered = true;\n            this.MainMenuStrip = this._mainMenu;\n            this.MinimumSize = new System.Drawing.Size(320, 240);\n            this.Name = \"MainView\";\n            this.Text = \"Kni Pipeline\";\n            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainView_FormClosing);\n            this.Load += new System.EventHandler(this.MainView_Load);\n            this.Shown += new System.EventHandler(this.MainView_Shown);\n            this.SizeChanged += new System.EventHandler(this.MainView_SizeChanged);\n            this.DragDrop += new System.Windows.Forms.DragEventHandler(this.MainView_DragDrop);\n            this.DragEnter += new System.Windows.Forms.DragEventHandler(this.MainView_DragEnter);\n            this._mainMenu.ResumeLayout(false);\n            this._mainMenu.PerformLayout();\n            this._treeContextMenu.ResumeLayout(false);\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            this._splitEditorOutput.Panel1.ResumeLayout(false);\n            this._splitEditorOutput.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this._splitEditorOutput)).EndInit();\n            this._splitEditorOutput.ResumeLayout(false);\n            this._splitTreeProps.Panel1.ResumeLayout(false);\n            this._splitTreeProps.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this._splitTreeProps)).EndInit();\n            this._splitTreeProps.ResumeLayout(false);\n            this._outputTabs.ResumeLayout(false);\n            this._outputTabPage1.ResumeLayout(false);\n            this._outputTabPage2.ResumeLayout(false);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.MenuStrip _mainMenu;\n        private System.Windows.Forms.ToolStripMenuItem _fileMenu;\n        private System.Windows.Forms.ToolStripMenuItem _newProjectMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _openProjectMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _saveMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _exitMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _buildMenu;\n        private System.Windows.Forms.ToolStripMenuItem _buildMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _rebuildMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _cleanMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _helpMenu;\n        private System.Windows.Forms.ToolStripMenuItem _viewHelpMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _aboutMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _saveAsMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _closeMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _importProjectMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _undoMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _redoMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\n        private System.Windows.Forms.ToolStripMenuItem _deleteMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\n        private System.Windows.Forms.ToolStripMenuItem _cancelBuildMenuItem;\n        private System.Windows.Forms.ToolStripSeparator _cancelBuildSeparator;\n        private System.Windows.Forms.ContextMenuStrip _treeContextMenu;\n        private System.Windows.Forms.ToolStripMenuItem _treeDeleteMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;\n        private System.Windows.Forms.ToolStripMenuItem _treeRebuildMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;\n        private System.Windows.Forms.ToolStripMenuItem _filterOutputMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _singlethreadMenuItem;\n        private System.Windows.Forms.ToolStripSeparator _treeSeparator1;\n        private System.Windows.Forms.ToolStripMenuItem _treeOpenFileMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem _treeOpenFileLocationMenuItem;\n        private ToolStripMenuItem _openRecentMenuItem;\n        private ToolStripMenuItem _addMenuItem;\n        private ToolStripMenuItem newItemToolStripMenuItem;\n        private ToolStripMenuItem newFolderToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem2;\n        private ToolStripMenuItem existingItemToolStripMenuItem;\n        private ToolStripMenuItem existingFolderToolStripMenuItem;\n        private ToolStripMenuItem _treeAddMenu;\n        private ToolStripMenuItem toolStripMenuItem3;\n        private ToolStripMenuItem toolStripMenuItem4;\n        private ToolStripSeparator toolStripSeparator7;\n        private ToolStripMenuItem toolStripMenuItem5;\n        private ToolStripMenuItem toolStripMenuItem6;\n        private ToolStripMenuItem _renameMenuItem;\n        private ToolStripMenuItem _treeRenameMenuItem;\n        private ToolStripButton _toolNew;\n        private ToolStripButton _toolOpen;\n        private ToolStripButton _toolSave;\n        private ToolStripSeparator toolStripSeparator6;\n        private ToolStripButton _toolNewItem;\n        private ToolStripButton _toolAddItem;\n        private ToolStripButton _toolNewFolder;\n        private ToolStripButton _toolAddFolder;\n        private ToolStripSeparator toolStripSeparator8;\n        private ToolStripButton _toolBuild;\n        private ToolStripButton _toolRebuild;\n        private ToolStripButton _toolClean;\n        private ToolStripSeparator toolStripSeparator9;\n        private ToolStripButton _toolFilterOutput;\n        private ToolStrip toolStrip1;\n        private SplitContainer _splitEditorOutput;\n        private SplitContainer _splitTreeProps;\n        private MultiSelectTreeview _treeView;\n        private PropertyGrid _propertyGrid;\n        private Windows.Controls.TabControlEx _outputTabs;\n        private TabPage _outputTabPage1;\n        private RichTextBox _outputWindow;\n        private TabPage _outputTabPage2;\n        private Windows.Controls.FilterOutputControl _filterOutputWindow;\n    }\n}\n\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/MainView.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.IO;\nusing System.IO.IsolatedStorage;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{    \n    partial class MainView : Form, IView, IProjectObserver\n    {\n        // The project which will be opened as soon as a controller is attached.\n        // Is used when PipelineTool is launched to open a project, provided by the command line.\n        public string OpenProjectPath;\n\n        public static IController _controller;\n        private ContentIcons _treeIcons;\n        private List<ContentItemState> _oldValues = new List<ContentItemState>();\n\n        private bool _treeUpdating;\n        private bool _treeSort;\n\n        private const string MGContentProjectFileFilter = \"MG Content Build Files (*.mgcb)|*.mgcb\";\n        private const string XnaContentProjectFileFilter = \"XNA Content Project Files (*.contentproj)|*.contentproj\";\n\n        public static MainView Form { get; private set; }\n\n        public MainView()\n        {            \n            InitializeComponent();\n\n            // Set MenuBar color to Window color if the current OS is Windows 10\n            if (System.Environment.OSVersion.Version.Major == 10)\n                this._mainMenu.BackColor = SystemColors.Window;\n\n            // Set the application icon this form.\n            Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);\n\n            // Find an appropriate font for console like output.\n            var faces = new [] { \"Consolas\", \"Lucida Console\", \"Courier New\" };\n            for (var f=0; f < faces.Length; f++)\n            {\n                _outputWindow.Font = new System.Drawing.Font(faces[f], 11F, FontStyle.Regular, GraphicsUnit.Point, (byte)0);\n                _filterOutputWindow.Font = new System.Drawing.Font(faces[f], 11F, FontStyle.Regular, GraphicsUnit.Point, (byte)0);\n                if (_outputWindow.Font.Name == faces[f])\n                    break;               \n            }\n\n            _outputWindow.SelectionHangingIndent = TextRenderer.MeasureText(\" \", _outputWindow.Font).Width;            \n\n            _treeIcons = new ContentIcons();\n            \n            _treeView.TreeViewNodeSorter = new TreeViewNodeSorter();\n            _treeView.ImageList = _treeIcons.Icons;\n            _treeView.BeforeExpand += TreeViewOnBeforeExpand;\n            _treeView.BeforeCollapse += TreeViewOnBeforeCollapse;\n            _treeView.NodeMouseClick += TreeViewOnNodeMouseClick;\n            _treeView.NodeMouseDoubleClick += TreeViewOnNodeMouseDoubleClick;\n\n            _propertyGrid.PropertyValueChanged += OnPropertyGridPropertyValueChanged;\n\n            InitOutputWindowContextMenu();\n\n            Form = this;\n        }\n\n        public void Attach(IController controller)\n        {\n            _controller = controller;\n\n            var updateMenus = new Action(UpdateMenus);\n            var invokeUpdateMenus = new Action(() => Invoke(updateMenus));\n\n            _controller.OnBuildStarted += delegate\n            {\n                _filterOutputWindow.SetBaseFolder(_controller);\n                UpdateMenus();\n            };\n            _controller.OnBuildFinished += invokeUpdateMenus;\n            _controller.OnProjectLoading += invokeUpdateMenus;\n            _controller.OnProjectLoaded += invokeUpdateMenus;\n\n            var updateUndoRedo = new CanUndoRedoChanged(UpdateUndoRedo);\n            var invokeUpdateUndoRedo = new CanUndoRedoChanged((u, r) => Invoke(updateUndoRedo, u, r));\n\n            _controller.OnCanUndoRedoChanged += invokeUpdateUndoRedo;\n            _controller.Selection.Modified += OnSelectionModified;\n        }\n\n        private void InitOutputWindowContextMenu()\n        {\n            ContextMenuStrip contextMenu = new ContextMenuStrip();\n\n            ToolStripMenuItem miCopy = new ToolStripMenuItem(\"&Copy\");\n            miCopy.Click += (o, a) =>\n            {\n                if (!string.IsNullOrEmpty(_outputWindow.SelectedText))\n                    Clipboard.SetText(_outputWindow.SelectedText);\n            };\n\n            ToolStripMenuItem miSelectAll = new ToolStripMenuItem(\"&Select all\");\n            miSelectAll.Click += (o, a) => _outputWindow.SelectAll();\n\n            contextMenu.Items.Add(miCopy);\n            contextMenu.Items.Add(miSelectAll);\n\n            _outputWindow.ContextMenuStrip = contextMenu;\n        }\n\n        public void OnTemplateDefined(ContentItemTemplate template)\n        {\n            // Load icon\n            try\n            {\n                var iconPath = Path.Combine(Path.GetDirectoryName(template.TemplateFile), template.Icon);                \n                var iconName = Path.GetFileNameWithoutExtension(iconPath);\n\n                if (!EditorIcons.Templates.Images.ContainsKey(iconName))\n                {\n                    var iconImage = Image.FromFile(iconPath);\n                    EditorIcons.Templates.Images.Add(iconName, iconImage);\n                }\n\n                template.Icon = iconName;\n            }\n            catch (Exception)\n            {\n                template.Icon = \"Default\";\n            }\n        }\n\n        private void OnSelectionModified(Selection selection, object sender)\n        {\n            if (sender == this)\n                return;\n\n            _treeView.SelectedNodes = _controller.Selection.Select(FindNode);\n        }\n\n        private TreeNode FindNode(IProjectItem projectItem)\n        {\n            foreach (var n in _treeView.AllNodes())\n            {\n                var i = n.Tag as IProjectItem;\n                if (i.OriginalPath == projectItem.OriginalPath)\n                    return n;                \n            }\n\n            return null;\n        }\n\n        private void OnPropertyGridPropertyValueChanged(object s, PropertyValueChangedEventArgs args)\n        {\n            if (args.ChangedItem.Label == \"References\")\n                _controller.OnReferencesModified();\n            if (args.ChangedItem.Label == \"PackageReferences\")\n                _controller.OnReferencesModified();\n\n            var obj = _propertyGrid.SelectedObject as PipelineProjectProxy;\n\n            if (obj != null)\n            {\n                var item = (PipelineProject)_controller.GetItem(obj.OriginalPath);\n                var action = new UpdateProjectAction(this, _controller, item, args.ChangedItem.PropertyDescriptor, args.OldValue);\n                _controller.AddAction(action);\n\n                _controller.OnProjectModified();\n            }\n            else\n            {\n                var action = new UpdateContentItemAction(this, _controller, _oldValues);\n                _controller.AddAction(action);\n\n                _controller.OnProjectModified();\n            }\n        }\n\n        private void TreeViewOnNodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)\n        {\n            // Show menu only if the right mouse button is clicked.\n            if (e.Button == MouseButtons.Right)\n            {\n                // Point where the mouse is clicked.\n                var p = new Point(e.X, e.Y);\n\n                // Get the node that the user has clicked.\n                var node = _treeView.GetNodeAt(p);\n                if (node != null)\n                {\n                    TreeViewShowContextMenu(node, p);\n                }\n            }\n        }\n\n        private void TreeViewShowContextMenu(TreeNode node, Point contextMenuLocation)\n        {\n            if (!_treeView.SelectedNodes.Contains(node))\n            {\n                _treeView.SelectedNode = node;\n            }\n\n            if (_treeView.SelectedNodes.Count() == 1)\n            {\n                _treeSeparator1.Visible = true;\n                _treeOpenFileLocationMenuItem.Visible = true;\n                _treeRenameMenuItem.Visible = true;\n\n                if (node.Tag is ContentItem)\n                    _treeAddMenu.Visible = false;\n                else\n                    _treeAddMenu.Visible = true;\n\n                if (node.Tag is FolderItem)\n                    _treeOpenFileMenuItem.Visible = false;\n                else\n                    _treeOpenFileMenuItem.Visible = true;\n            }\n            else\n            {\n                _treeAddMenu.Visible = false;\n                _treeOpenFileMenuItem.Visible = false;\n                _treeOpenFileLocationMenuItem.Visible = false;\n                _treeRenameMenuItem.Visible = false;\n                _treeSeparator1.Visible = false;\n            }\n\n            _treeContextMenu.Show(_treeView, contextMenuLocation);\n        }\n\n        private void TreeViewOnNodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs args)\n        {\n            // Even though we support 'Open File' as an action on the root (PipelineProject)\n            // double clicking on it toggles whether it is expanded. \n            // So if you want to open it just use the menu.\n            if (!(args.Node.Tag is ContentItem))\n                return;\n\n            ContextMenu_OpenFile_Click(sender, args);            \n        }\n\n        public void UpdateRecentProjectList()\n        {\n            try\n            {\n                _mainMenu.SuspendLayout();\n\n                // TODO: clear removed projects from DropDownItems\n\n                // attach added projects to DropDownItems\n                foreach (string project in PipelineSettingsMgr.Settings.ProjectHistory)\n                {\n                    if (_openRecentMenuItem.DropDownItems.ContainsKey(project))\n                        continue;\n\n                    ToolStripMenuItem recentItem = new ToolStripMenuItem(project);\n                    recentItem.Name = project;\n                    _openRecentMenuItem.DropDownItems.Insert(0, recentItem);\n\n                    // We need a local to make the delegate work correctly.\n                    string localProject = project;\n                    recentItem.Click += (sender, args) =>\n                    {\n                        _controller.OpenProject(localProject);\n                    };\n                }\n\n                _openRecentMenuItem.Enabled = (_openRecentMenuItem.DropDownItems.Count >= 1);\n            }\n            finally\n            {\n                _mainMenu.ResumeLayout();\n            }\n        }\n\n        public AskResult AskSaveOrCancel()\n        {\n            var result = MessageBox.Show(\n                this,\n                \"Do you want to save the project first?\",\n                \"Save Project\",\n                MessageBoxButtons.YesNoCancel,\n                MessageBoxIcon.Exclamation,\n                MessageBoxDefaultButton.Button3);\n\n            if (result == DialogResult.Yes)\n                return AskResult.Yes;\n            if (result == DialogResult.No)\n                return AskResult.No;\n\n            return AskResult.Cancel;\n        }\n\n        public bool AskSaveName(ref string filePath, string title)\n        {\n            var dialog = new SaveFileDialog\n            {\n                Title = title,\n                RestoreDirectory = true,\n                InitialDirectory = Path.GetDirectoryName(filePath),\n                FileName = Path.GetFileName(filePath),\n                AddExtension = true,\n                CheckPathExists = true,\n                Filter = MGContentProjectFileFilter,\n                FilterIndex = 2,                \n            };\n            var result = dialog.ShowDialog(this);\n            filePath = dialog.FileName;\n            return result != DialogResult.Cancel;\n        }\n\n        public bool AskOpenProject(out string projectFilePath)\n        {\n            var dialog = new OpenFileDialog()\n            {\n                RestoreDirectory = true,\n                AddExtension = true,\n                CheckPathExists = true,\n                CheckFileExists = true,\n                Filter = MGContentProjectFileFilter,\n                FilterIndex = 2,\n            };\n            var result = dialog.ShowDialog(this);\n            projectFilePath = dialog.FileName;\n            return result != DialogResult.Cancel;\n        }\n\n        public bool AskImportProject(out string projectFilePath)\n        {\n            var dialog = new OpenFileDialog()\n            {\n                RestoreDirectory = true,\n                AddExtension = true,\n                CheckPathExists = true,\n                CheckFileExists = true,\n                Filter = XnaContentProjectFileFilter,\n                FilterIndex = 2,\n            };\n            var result = dialog.ShowDialog(this);\n            projectFilePath = dialog.FileName;\n            return result != DialogResult.Cancel;\n        }\n\n        public void ShowError(string title, string message)\n        {\n            MessageBox.Show(this, message, title, MessageBoxButtons.OK, MessageBoxIcon.Stop);\n        }\n\n        public void ShowMessage(string message)\n        {\n            MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);\n        }\n\n        public void BeginTreeUpdate()\n        {\n            Debug.Assert(_treeUpdating == false, \"Must finish previous tree update!\");\n            _treeUpdating = true;\n            _treeSort = false;\n            _treeView.BeginUpdate();\n        }\n\n        public void SetTreeRoot(IProjectItem item)\n        {\n            Debug.Assert(_treeUpdating, \"Must call BeginTreeUpdate() first!\");\n\n            _propertyGrid.SelectedObject = null;\n\n            if(item == null)\n            {\n                _treeView.Nodes.Clear();\n                return;\n            }\n\n            var project = item as PipelineProject;\n            if (project == null)\n                return;\n\n            TreeNode root;\n\n            if (_treeView.Nodes.Count == 0)\n                root = _treeView.Nodes.Add(string.Empty, item.Name, -1);\n            else\n                root = _treeView.Nodes[0];\n\n            root.Tag = new PipelineProjectProxy(project);\n            root.SelectedImageIndex = ContentIcons.ProjectIcon;\n            root.ImageIndex = ContentIcons.ProjectIcon;\n            root.Text = item.Name;\n\n            _propertyGrid.SelectedObject = root.Tag;\n\n            UpdateMenus();\n        }\n\n        public void AddTreeItem(IProjectItem item)\n        {\n            Debug.Assert(_treeUpdating, \"Must call BeginTreeUpdate() first!\");\n            _treeSort = true;\n\n            var path = item.Location;\n            var folders = path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar}, StringSplitOptions.RemoveEmptyEntries);\n\n            var root = _treeView.Nodes[0];\n            var parent = root.Nodes;\n            foreach (var folder in folders)\n            {\n                var found = parent.Find(folder, false);\n                if (found.Length == 0)\n                {\n                    var folderNode = parent.Add(folder, folder, -1);\n                    folderNode.ImageIndex = ContentIcons.FolderClosedIcon;\n                    folderNode.SelectedImageIndex = ContentIcons.FolderClosedIcon;\n\n                    var idx = path.IndexOf(folder);\n                    var curPath = path.Substring(0, idx + folder.Length);\n                    folderNode.Tag = new FolderItem(curPath);\n                    \n                    parent = folderNode.Nodes;\n                }\n                else\n                    parent = found[0].Nodes;\n            }\n\n            string fullPath = ((PipelineController)_controller).GetFullPath(item.OriginalPath);\n            int iconIdx = _treeIcons.GetIcon(item.Exists, fullPath);\n\n            var node = parent.Add(string.Empty, item.Name, -1);\n            node.Tag = item;\n            node.ImageIndex = iconIdx;\n            node.SelectedImageIndex = iconIdx;\n\n            _treeView.SelectedNode = node;\n\n            root.Expand();\n        }\n\n        public void RemoveTreeItem(ContentItem item)\n        {\n            Debug.Assert(_treeUpdating, \"Must call BeginTreeUpdate() first!\");\n\n            var node = _treeView.AllNodes().Find(f => f.Tag == item);\n            if (node == null)\n                return;\n\n            node.Remove();\n\n            var obj = _propertyGrid.SelectedObject as ContentItem;\n            if (obj != null && obj.OriginalPath == item.OriginalPath)\n                _propertyGrid.SelectedObject = null;\n        }\n\n        public void SelectTreeItem(IProjectItem item)\n        {\n            Debug.Assert(_treeUpdating, \"Must call BeginTreeUpdate() first!\");\n\n            var node = _treeView.AllNodes().Find(e => e.Tag == item);\n            if (node != null)\n                _treeView.SelectedNode = node;\n        }\n\n        public void UpdateTreeItem(IProjectItem item)\n        {\n            Debug.Assert(_treeUpdating, \"Must call BeginTreeUpdate() first!\");\n\n            var node = _treeView.AllNodes().Find(e => e.Tag == item);\n            if (node != null)\n\t\t\t{\n\t\t\t\t// Do something useful, eg...\n\t\t\t\t/* \n\t\t\t\tif (!node.IsValid)\n\t\t\t\t{\n\t                node.ForeColor = Color.Red;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnode.ForeColor = Color.Black;\n\t\t\t\t}*/\n\t\t\t}\n        }\n\n        public void EndTreeUpdate()\n        {\n            Debug.Assert(_treeUpdating, \"Must call BeginTreeUpdate() first!\");\n\n            if (_treeSort)\n            {\n                var node = _treeView.SelectedNode;\n                _treeView.Sort();\n                _treeView.SelectedNode = node;\n            }\n            _treeSort = false;\n            _treeView.EndUpdate();\n\n            _treeUpdating = false;\n\n            UpdateMenus();\n        }\n\n        public void ShowProperties(IProjectItem item)\n        {\n            _propertyGrid.SelectedObject = item;\n            _propertyGrid.ExpandAllGridItems();\n        }\n\n        public void UpdateProperties(IProjectItem item)\n        {\n            foreach (var obj in _controller.Selection)\n            {\n                if (obj.OriginalPath.Equals(item.OriginalPath, StringComparison.OrdinalIgnoreCase))\n                {\n                    _propertyGrid.Refresh();\n                    _propertyGrid.ExpandAllGridItems();\n                    break;\n                }\n            }\n\n            UpdateMenus();\n        }\n\n        public void OutputAppend(string text)\n        {\n            if (text == null)\n                return;\n\n            // We need to append newlines.\n            var line = string.Concat(text, Environment.NewLine);\n\n            // Write the output... safely if needed.\n            if (InvokeRequired)\n            {\n                _outputWindow.Invoke(new Action<string>(_outputWindow.AppendText), new object[] { line });\n                _filterOutputWindow.Invoke(new Action<string>(_filterOutputWindow.WriteLine), new object[] { line });\n            }\n            else\n            {\n                _outputWindow.AppendText(line);\n                _filterOutputWindow.WriteLine(line);\n            }\n        }\n\n        public bool ChooseContentFile(string initialDirectory, out List<string> files)\n        {\n            var dlg = new OpenFileDialog()\n            {\n                RestoreDirectory = true,\n                AddExtension = true,\n                CheckPathExists = true,\n                CheckFileExists = true,\n                Filter = \"All Files (*.*)|*.*\",\n                InitialDirectory = initialDirectory,\n                Multiselect = true,\n                \n            };\n\n            var result = dlg.ShowDialog(this);\n            files = new List<string>();\n\n            if (result != DialogResult.OK)\n                return false;\n\n            files.AddRange(dlg.FileNames);\n\n            return true;\n        }\n\n        public void OutputClear()\n        {\n            _outputWindow.Clear();\n            _filterOutputWindow.Clear();\n        }\n\n        public void OutputPopulateAssets(PipelineProject project, IEnumerable<IProjectItem> items)\n        {\n            _filterOutputWindow.PopulateAssets(project, items);\n        }\n\n        public Process CreateProcess(string exe, string commands)\n        {\n            var _buildProcess = new Process();\n            _buildProcess.StartInfo.FileName = exe;\n            _buildProcess.StartInfo.Arguments = commands;\n            return _buildProcess;\n        }\n\n        private void ExitMenuItemClick(object sender, System.EventArgs e)\n        {\n            if (_controller.Exit())\n                Application.Exit();\n        }\n\n        private void MainView_Load(object sender, EventArgs e)\n        {            \n            // We only load the PipelineSettings.StartupProject if there was not\n            // already a project specified via command line.\n            if (string.IsNullOrEmpty(OpenProjectPath))\n            {\n                var startupProject = PipelineSettingsMgr.Settings.StartupProject;\n                if (!string.IsNullOrEmpty(startupProject) && File.Exists(startupProject))                \n                    OpenProjectPath = startupProject;                \n            }\n\n            PipelineSettingsMgr.Settings.StartupProject = null;\n            \n            if (!string.IsNullOrEmpty(OpenProjectPath))\n            {\n                _controller.OpenProject(OpenProjectPath);\n                OpenProjectPath = null;\n            }\n\n            UpdateMenus();\n        }\n\n        private void MainView_SizeChanged(object sender, EventArgs e)\n        {\n            if (this.WindowState != FormWindowState.Maximized && PipelineSettingsMgr.Current.IsInit)\n            {\n                PipelineSettingsMgr.Settings.Size.X = this.Width;\n                PipelineSettingsMgr.Settings.Size.Y = this.Height;\n            }\n        }\n\n        private void _splitTreeProps_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (this.WindowState != FormWindowState.Maximized && PipelineSettingsMgr.Current.IsInit)\n                PipelineSettingsMgr.Settings.HSeparator = _splitTreeProps.SplitterDistance;\n        }\n\n        private void _splitEditorOutput_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (this.WindowState != FormWindowState.Maximized && PipelineSettingsMgr.Current.IsInit)\n                PipelineSettingsMgr.Settings.VSeparator = _splitEditorOutput.SplitterDistance;\n        }\n\n        private void MainView_FormClosing(object sender, FormClosingEventArgs e)\n        {\n            if (e.CloseReason == CloseReason.UserClosing)\n            {\n                if (!_controller.Exit())\n                    e.Cancel = true;\n\n                PipelineSettingsMgr.Settings.Maximized = (this.WindowState == FormWindowState.Maximized);\n                PipelineSettingsMgr.Settings.FilterOutput = _filterOutputMenuItem.Checked;\n                PipelineSettingsMgr.Current.Save();\n            }\n        }        \n\n        private void OnNewProjectClick(object sender, EventArgs e)\n        {\n            _controller.NewProject();\n        }\n\n        private void OnImportProjectClick(object sender, EventArgs e)\n        {\n            _controller.ImportProject();\n        }\n\n        private void OnOpenProjectClick(object sender, EventArgs e)\n        {\n            _controller.OpenProject();\n        }\n\n        private void OnCloseProjectClick(object sender, EventArgs e)\n        {\n            _controller.CloseProject();\n        }\n\n        private void OnSaveProjectClick(object sender, System.EventArgs e)\n        {\n            _controller.SaveProject(false);\n        }\n\n        private void OnSaveAsProjectClick(object sender, System.EventArgs e)\n        {\n            _controller.SaveProject(true);\n        }\n\n        private void TreeViewAfterSelect(object sender, TreeViewEventArgs e)\n        {            \n            _controller.Selection.Clear(this);\n            _propertyGrid.SelectedObject = null;\n\n            _oldValues.Clear();\n\n            foreach (var node in _treeView.SelectedNodes)\n            {\n                var item = node.Tag as IProjectItem;\n\n                if (item is ContentItem)\n                    _oldValues.Add(ContentItemState.Get(item as ContentItem));\n\n                _controller.Selection.Add(item, this);\n            }\n\n            _propertyGrid.SelectedObjects = _controller.Selection.ToArray();\n            _propertyGrid.ExpandAllGridItems();\n        }\n\n        private void TreeViewMouseUp(object sender, MouseEventArgs e)\n        {\n            // Show menu only if the right mouse button is clicked.\n            if (e.Button != MouseButtons.Right)\n                return;\n\n            // Point where the mouse is clicked.\n            var p = new Point(e.X, e.Y);\n\n            // Get the node that the user has clicked.\n            var node = _treeView.GetNodeAt(p);\n            if (node == null) \n                return;\n\n            // Select the node the user has clicked.\n            _treeView.SelectedNode = node;\n\n            // TODO: Show context menu!\n        }\n\n        private void BuildMenuItemClick(object sender, EventArgs e)\n        {\n            _controller.SingleThread = _singlethreadMenuItem.Checked;\n            _controller.Build(false);\n        }\n\n        private void RebuildMenuItemClick(object sender, EventArgs e)\n        {\n            _controller.SingleThread = _singlethreadMenuItem.Checked;\n            _controller.Build(true);\n        }\n\n        private void RebuildItemsMenuItemClick(object sender, EventArgs e)\n        {\n            _controller.SingleThread = _singlethreadMenuItem.Checked;\n            _controller.RebuildItems(_treeView.GetSelectedContentItems());\n        }\n\n        private void CleanMenuItemClick(object sender, EventArgs e)\n        {\n            _controller.SingleThread = _singlethreadMenuItem.Checked;\n            _controller.Clean();\n        }\n        \n        private void FilterOutputMenuItem_CheckedChanged(object sender, EventArgs e)\n        {\n            _outputTabs.SelectedIndex = _filterOutputMenuItem.Checked ? 1 : 0;\n            _toolFilterOutput.Checked = _filterOutputMenuItem.Checked;\n        }\n\n        private void CancelBuildMenuItemClick(object sender, EventArgs e)\n        {\n            _controller.CancelBuild();\n        }        \n\n        private void TreeViewOnBeforeCollapse(object sender, TreeViewCancelEventArgs e)\n        {\n            if (e.Node.ImageIndex == ContentIcons.FolderOpenIcon)\n            {\n                e.Node.ImageIndex = ContentIcons.FolderClosedIcon;\n                e.Node.SelectedImageIndex = ContentIcons.FolderClosedIcon;\n            }\n        }\n\n        private void TreeViewOnBeforeExpand(object sender, TreeViewCancelEventArgs e)\n        {\n            if (e.Node.ImageIndex == ContentIcons.FolderClosedIcon)\n            {\n                e.Node.ImageIndex = ContentIcons.FolderOpenIcon;\n                e.Node.SelectedImageIndex = ContentIcons.FolderOpenIcon;\n            }\n        }\n\n        private void TreeViewOnKeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Apps)\n            {\n                if (_treeView.SelectedNode != null)\n                {\n                    Point nodeCoords = _treeView.PointToScreen(_treeView.SelectedNode.Bounds.Location);\n                    TreeViewShowContextMenu(_treeView.SelectedNode, nodeCoords);\n                }\n            }\n        }\n\n        private void MainMenuMenuActivate(object sender, EventArgs e)\n        {\n            UpdateMenus();\n        }\n\n        private void UpdateMenus()\n        {\n            var notBuilding = !_controller.ProjectBuilding;\n            var projectOpen = _controller.ProjectOpen;\n            var projectOpenAndNotBuilding = projectOpen && notBuilding;\n            var count = _treeView.SelectedNodes.Count();\n\n            // Update the state of all menu items.\n\n            _newProjectMenuItem.Enabled = _toolNew.Enabled = notBuilding;\n            _openProjectMenuItem.Enabled = _toolOpen.Enabled = notBuilding;\n            _importProjectMenuItem.Enabled = notBuilding;\n\n            _saveMenuItem.Enabled = _toolSave.Enabled = projectOpenAndNotBuilding && _controller.ProjectDirty;\n            _saveAsMenuItem.Enabled = projectOpenAndNotBuilding;\n            _closeMenuItem.Enabled = projectOpenAndNotBuilding;\n\n            _exitMenuItem.Enabled = notBuilding;\n\n            _addMenuItem.Enabled = _toolNewItem.Enabled = _toolAddItem.Enabled =\n                _toolNewFolder.Enabled = _toolAddFolder.Enabled = projectOpen & count <= 1;\n            _deleteMenuItem.Enabled = projectOpen & count > 0;\n            _renameMenuItem.Enabled = projectOpen & count == 1;\n\n            _buildMenuItem.Enabled = _toolBuild.Enabled = projectOpenAndNotBuilding;\n\n            _treeRebuildMenuItem.Enabled = _rebuildMenuItem.Enabled = _toolRebuild.Enabled = projectOpenAndNotBuilding;\n            _rebuildMenuItem.Enabled = _treeRebuildMenuItem.Enabled;\n\n            _cleanMenuItem.Enabled = _toolClean.Enabled = projectOpenAndNotBuilding;\n            _cancelBuildSeparator.Visible = !notBuilding;\n            _cancelBuildMenuItem.Enabled = !notBuilding;\n            _cancelBuildMenuItem.Visible = !notBuilding;\n      \n            UpdateUndoRedo(_controller.CanUndo, _controller.CanRedo);\n\n            UpdateRecentProjectList();\n        }\n        \n        private void UpdateUndoRedo(bool canUndo, bool canRedo)\n        {\n            _undoMenuItem.Enabled = canUndo;\n            _redoMenuItem.Enabled = canRedo;\n        }\n\n        private void OnDeleteItemClick(object sender, EventArgs e)\n        {\n            var items = new List<ContentItem>();\n            var nodes = _treeView.SelectedNodesRecursive;\n            List<string> dirs = new List<string>();\n\n            foreach (var node in nodes)\n            {\n                var item = node.Tag as ContentItem;\n                if (item != null && !items.Contains(item))\n                    items.Add(item);\n                else\n                    dirs.Add(node.FullPath.Substring(_treeView.Nodes[0].Text.Length + 1));\n            }\n\n            _controller.Exclude(items, dirs);\n        }\n\n        private void ViewHelpMenuItemClick(object sender, EventArgs e)\n        {\n            Process.Start(\"https://github.com/kniEngine/kni/blob/main/Documentation/articles/content/using_mgcb_editor.md\");\n        }\n\n        private void AboutMenuItemClick(object sender, EventArgs e)\n        {\n            var about = new AboutDialog();\n            about.Show();\n        }\n\n        private void OnAddItemClick(object sender, EventArgs e)\n        {\n            var node = _treeView.SelectedNode ?? _treeView.Nodes[0];\n            var item = node.Tag as IProjectItem;\n            _controller.Include(item.Location);\n        }\n\n        private void OnNewItemClick(object sender, System.EventArgs e)\n        {\n            var dlg = new NewContentDialog(_controller.Templates, EditorIcons.Templates);\n            if (dlg.ShowDialog(this) == DialogResult.OK)\n            {\n                var template = dlg.Selected;\n                var location = ((_treeView.SelectedNode ?? _treeView.Nodes[0]).Tag as IProjectItem).Location;\n\n                // Ensure name is unique among files at this location?\n                _controller.NewItem(dlg.NameGiven, location, template);\n            }\n        }\n\n        private void OnAddFolderClick(object sender, EventArgs e)\n        {\n            var node = _treeView.SelectedNode ?? _treeView.Nodes[0];\n            string location = \"\";\n\n            if (node != null)\n            {\n                var item = node.Tag as IProjectItem;\n                if (item != null)\n                    location = item.Location;\n                else\n                    location = node.FullPath.Substring(_treeView.Nodes[0].Text.Length + 1);\n            }\n\n            _controller.IncludeFolder(location);\n        }\n\n        private void OnNewFolderClick(object sender, EventArgs e)\n        {\n            var node = _treeView.SelectedNode ?? _treeView.Nodes[0];\n            string location = \"\";\n\n            if (node != null)\n            {\n                var item = node.Tag as IProjectItem;\n                if (item != null)\n                    location = item.Location;\n                else\n                    location = node.FullPath.Substring(_treeView.Nodes[0].Text.Length + 1);\n            }\n\n            var dialog = new TextEditDialog(\"New Folder\", \"Folder Name:\", \"\");\n            if (dialog.ShowDialog() == DialogResult.OK)\n                _controller.NewFolder(dialog.text, location);\n        }\n\n        private void OnRedoClick(object sender, EventArgs e)\n        {\n            _controller.Redo();\n        }\n\n        private void OnUndoClick(object sender, EventArgs e)\n        {\n            _controller.Undo();\n        }\n\n        private void OnRenameItemClick(object sender, EventArgs e)\n        {\n            FileType type = FileType.Base;\n\n            var item = (_treeView.SelectedNode.Tag as IProjectItem);\n            string path = item.OriginalPath;\n\n            if (_treeView.SelectedNode.Tag is ContentItem)\n                type = FileType.File;\n            else if (_treeView.SelectedNode.Tag is FolderItem)\n                type = FileType.Folder;\n            else\n                path = item.Name;\n\n            TextEditDialog dialog = new TextEditDialog(\"Rename\", \"New Name:\", _treeView.SelectedNode.Text);\n\n            if (dialog.ShowDialog() == DialogResult.OK)\n            {\n                string newpath = System.IO.Path.GetDirectoryName(path) + System.IO.Path.DirectorySeparatorChar + dialog.text;\n                _controller.Move(new [] { path }, new [] { newpath.StartsWith(System.IO.Path.DirectorySeparatorChar.ToString()) ? newpath.Substring(1) : newpath }, new[] { type });\n            }\n        }\n\n        private void ContextMenu_OpenFile_Click(object sender, EventArgs e)\n        {\n            string filePath = (_treeView.SelectedNode.Tag as IProjectItem).OriginalPath;\n            string absolutePath = _controller.GetFullPath(filePath);\n\n            if (File.Exists(absolutePath))\n            {\n                ProcessStartInfo startInfo = new ProcessStartInfo();\n                startInfo.FileName = absolutePath;\n                startInfo.UseShellExecute = true;\n                Process.Start(startInfo);\n            }\n        }\n\n        private void ContextMenu_OpenFileLocation_Click(object sender, EventArgs e)\n        {\n            var filePath = (_treeView.SelectedNode.Tag as IProjectItem).OriginalPath;\n            filePath = _controller.GetFullPath(filePath);\n\n            if (File.Exists(filePath) || Directory.Exists(filePath))\n            {\n                Process.Start(\"explorer.exe\", \"/select, \" + filePath);\n\n            }\n        }\n\n        // http://stackoverflow.com/a/3955553/168235\n        #region Custom Word-Wrapping (Output Window)\n        \n        const uint EM_SETWORDBREAKPROC = 0x00D0;\n\n        [DllImport(\"user32.dll\")]\n        extern static IntPtr SendMessage(IntPtr hwnd, uint message, IntPtr wParam, IntPtr lParam);\n\n        delegate int EditWordBreakProc(IntPtr text, int pos_in_text, int bCharSet, int action);\n\n        event EditWordBreakProc WordWrapCallbackEvent;\n        \n        private int WordWrapCallback(IntPtr text, int pos_in_text, int bCharSet, int action)\n        {\n            return 0;\n        }\n        #endregion\n\n        private void MainView_Shown(object sender, EventArgs e)\n        {\n            WordWrapCallbackEvent = new EditWordBreakProc(WordWrapCallback);\n\n            IntPtr ptr_func = Marshal.GetFunctionPointerForDelegate(WordWrapCallbackEvent);\n\n            SendMessage(_outputWindow.Handle, EM_SETWORDBREAKPROC, IntPtr.Zero, ptr_func);\n\n            // load settings\n            if (PipelineSettingsMgr.Settings.VSeparator != 0)\n            {\n                this.Width = PipelineSettingsMgr.Settings.Size.X;\n                this.Height = PipelineSettingsMgr.Settings.Size.Y;\n\n                _splitEditorOutput.SplitterDistance = PipelineSettingsMgr.Settings.VSeparator;\n                _splitTreeProps.SplitterDistance = PipelineSettingsMgr.Settings.HSeparator;\n\n                _filterOutputMenuItem.Checked = _toolFilterOutput.Checked = PipelineSettingsMgr.Settings.FilterOutput;\n\n                if (PipelineSettingsMgr.Settings.Maximized)\n                    this.WindowState = FormWindowState.Maximized;\n            }\n            else\n            {\n                PipelineSettingsMgr.Settings.Size.X = this.Width;\n                PipelineSettingsMgr.Settings.Size.Y = this.Height;\n\n                PipelineSettingsMgr.Settings.VSeparator = _splitEditorOutput.SplitterDistance;\n                PipelineSettingsMgr.Settings.HSeparator = _splitTreeProps.SplitterDistance;\n            }\n            PipelineSettingsMgr.Current.IsInit = true;\n\n            _outputTabs.SelectedIndex = _filterOutputMenuItem.Checked ? 1 : 0;\n        }\n\n        public void AddTreeFolder(string afolder)\n        {\n            Debug.Assert(_treeUpdating, \"Must call BeginTreeUpdate() first!\");\n            _treeSort = true;\n\n            var path = afolder;\n            var folders = path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries);\n\n            var root = _treeView.Nodes[0];\n            var parent = root.Nodes;\n            foreach (var folder in folders)\n            {\n                var found = parent.Find(folder, false);\n                if (found.Length == 0)\n                {\n                    var folderNode = parent.Add(folder, folder, -1);\n                    folderNode.ImageIndex = ContentIcons.FolderClosedIcon;\n                    folderNode.SelectedImageIndex = ContentIcons.FolderClosedIcon;\n\n                    var idx = path.IndexOf(folder);\n                    var curPath = path.Substring(0, idx + folder.Length);\n                    folderNode.Tag = new FolderItem(curPath);\n\n                    parent = folderNode.Nodes;\n                }\n                else\n                    parent = found[0].Nodes;\n            }\n\n            root.Expand();\n        }\n\n        public void RemoveTreeFolder(string folder)\n        {\n            Debug.Assert(_treeUpdating, \"Must call BeginTreeUpdate() first!\");\n            _treeSort = true;\n\n            var path = folder;\n            var folders = path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries);\n\n            var root = _treeView.Nodes[0];\n            var parent = root.Nodes;\n\n            for (int i = 0; i < folders.Length;i++)\n            {\n                var found = parent.Find(folders[i], false);\n\n                if (found.Length == 0)\n                    return;\n                else if (i != folders.Length - 1)\n                    parent = found[0].Nodes;\n                else\n                    parent.Remove(found[0]);\n            }\n        }\n\n        public bool ChooseContentFolder(string initialDirectory, out string folder)\n        {\n            var dialog = new FolderBrowserDialog();\n            dialog.SelectedPath = initialDirectory;\n            if (dialog.ShowDialog() == DialogResult.OK)\n            {\n                folder = dialog.SelectedPath;\n                return true;\n            }\n\n            folder = \"\";\n            return false;\n        }\n\n        #region drag & drop\n        private void MainView_DragEnter(object sender, DragEventArgs e)\n        {\n            e.Effect = DragDropEffects.None;\n            string filename = GetDropFile(e.Data, \".mgcb\");\n            if (filename != null) \n                e.Effect = DragDropEffects.Copy;\n        }\n\n        private void MainView_DragDrop(object sender, DragEventArgs e)\n        {\n            string filename = GetDropFile(e.Data, \".mgcb\");\n            if (filename != null)\n                _controller.OpenProject(filename);\n        }\n\n        private string GetDropFile(IDataObject dataObject, string extension)\n        {\n            if (dataObject.GetDataPresent(DataFormats.FileDrop))\n            {\n                string[] files = (string[])dataObject.GetData(DataFormats.FileDrop);\n                foreach (var filename in files)\n                {\n                    if (Path.GetExtension(filename).Equals(extension, StringComparison.OrdinalIgnoreCase))\n                        return filename;\n                }\n            }\n            return null;\n        }\n\n        private void _treeView_DragOver(object sender, DragEventArgs e)\n        {\n            e.Effect = DragDropEffects.None;\n\n            IProjectItem targetItem = GetDropTargetItem(sender, e);\n            if (GetDropAssets(e.Data, targetItem) != null)\n                e.Effect = DragDropEffects.Copy;\n        }\n\n        private void _treeView_DragDrop(object sender, DragEventArgs e)\n        {\n            IProjectItem targetItem = GetDropTargetItem(sender, e);\n            var droppedAssets = GetDropAssets(e.Data, targetItem);\n            if (droppedAssets != null)\n            {\n                // seperate assets \n                List<string> IncludeAssets = new List<string>();\n                List<string> CopyOrLinkAssets = new List<string>();\n                string initialDirectory = ((PipelineController)_controller).GetFullPath(\"\");\n                foreach (var filename in droppedAssets)\n                {\n                    if (filename.StartsWith(initialDirectory))\n                        IncludeAssets.Add(filename);\n                    else\n                        CopyOrLinkAssets.Add(filename);\n                }\n\n                //include assets that are under the project base directory\n                List<string> files = new List<string>();\n                List<string> folders = new List<string>();\n                foreach (var filename in IncludeAssets)\n                {\n                    if (File.GetAttributes(filename).HasFlag(FileAttributes.Directory))\n                        folders.Add(filename);\n                    else\n                        files.Add(filename);\n                        \n                }\n                _controller.Include(files, folders);\n\n                //TODO: copy or link assets that are not under the project base directory\n                //\n            }\n        }\n\n        private static IProjectItem GetDropTargetItem(object sender, DragEventArgs e)\n        {\n            var treeView = sender as TreeView;\n            var targetPoint = treeView.PointToClient(new Point(e.X, e.Y));\n            var targetNode = treeView.GetNodeAt(targetPoint);\n\n            IProjectItem targetItem = (IProjectItem)((targetNode == null) ? null : targetNode.Tag);\n            return targetItem;\n        }\n\n        // return a list of files that are allowed to drop on target item\n        private List<string> GetDropAssets(IDataObject dataObject, IProjectItem targetItem)\n        {\n            if (!dataObject.GetDataPresent(DataFormats.FileDrop))\n                return null; \n            if (targetItem is ContentItem)\n                return null; //drop to ContentItem is not allowed\n            \n            string initialDirectory = ((PipelineController)_controller).GetFullPath(\"\");\n            string[] files = (string[])dataObject.GetData(DataFormats.FileDrop);\n            \n            if (targetItem is FolderItem)\n            {   \n                return null; //drop to FolderItem is not yet supported\n            }\n\n            if ((targetItem is PipelineProjectProxy) || targetItem == null)\n            {\n                List<string> result = new List<string>();\n                foreach (var filename in files)\n                {\n                    // filter items\n                    if (Path.GetExtension(filename).Equals(\".MGCB\", StringComparison.OrdinalIgnoreCase))\n                        continue; //drop of .MGCB files is not allowed\n                    if (!filename.StartsWith(initialDirectory))\n                        continue; //Copy/Link items is not yet supported\n                    result.Add(filename);\n                }\n                if (result.Count > 0)\n                    return result;\n            }\n            \n            return null;\n        }\n\n        #endregion\n\n        private void _toolFilterOutput_Click(object sender, EventArgs e)\n        {\n            _filterOutputMenuItem.Checked = !_filterOutputMenuItem.Checked;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/MainView.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"_toolStripSeparator3.GenerateMember\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>False</value>\n  </metadata>\n  <metadata name=\"_toolStripSeparator1.GenerateMember\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>False</value>\n  </metadata>\n  <metadata name=\"_toolStripSeparator2.GenerateMember\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>False</value>\n  </metadata>\n  <metadata name=\"_mainMenu.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"_treeContextMenu.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>132, 17</value>\n  </metadata>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"_toolNew.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC0SURBVDhPrY/BDQIhEEWpwyqsgb680oZFUICJVdiCp9Us\n        7FXzYT4OE9R14yQvMDD/set0LcvyIHK0rnTwfNi1/RumlNJeorVwwaBdvfcdIYRegiFwvZxKiKDn3W26\n        F6ykCXRw1Kc5dQKA8yYgNmjRIvRFgELDkF31q/h0SIYCYl8f/X+MsdxJvApotUEr0HMSfwkwqPcjKMg5\n        HyW+TSDRWn8T8HKTQPOzQBcFn/gqWEOddu4JH/WN/fh+e1wAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"_toolOpen.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADoSURBVDhPzZAxDoJAEEX3Bt7EeAauYKuX8BAUNngAKzsL\n        Y0GlhRbUxtLEythYaALCsu3oXxgyLFGwc5KXsLvz386iZBljSBBrrQflUbdCqD9ZkRrOaTTbSZmkKX5v\n        BtxweyQkJWEYkud5Fb7v1yUIL6Mz9cYLG3KZro+Uphkl8bMhYYEN47bT9W6nwDfCmGS7j0hnuiYA6KsE\n        aN4cLo0wnoM9RopsjgXuBMB9O8DokLiCALfzP8ABGnCTREogrwQoLECe560CwP1lvBBw6JOA+XMBH3YR\n        lNGi2Mj8LJDFgm+0CrpQdCv1AoU8iRaUluKHAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"_toolSave.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABRSURBVDhPY6AK+Pbt239S8NevX+dDtUIASJAheA4cf3j/\n        EY6RxUB0zIR9mIaQYgAIwwyBaifdABAm2gBkjKyGtgYQg0cNGJQGkIOh2ikBDAwAR/4LjdUkCHIAAAAA\n        SUVORK5CYII=\n</value>\n  </data>\n  <data name=\"_toolNewItem.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACkSURBVDhP5ZK9DYMwFIQzRwokxCbeCyEQhVtWStiAQQAJ\n        u3V80XsRFpeYhionfYX97s7m56by3g+RsGOQUV7RPGnwUd/3JZNYvss518M8dlVSoGvMxcoFk4IQCsa2\n        /OwBsXLBgJDC1r9IbxBPRujZFInJGEPBLPsOrLU0DN4F8hj0K2ybC8u8HjgUQHGR/Ac4mYUBLVBhUw0s\n        DP6pIMd1Befx4QXCKlC0hGyA6wAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"_toolAddItem.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABfSURBVDhPY4CBb9++/UfGUGHiAUiTRZcJGJNkALKtyAbA\n        MFQZboCsER1TxQBCmKAXnJyccGKQPNQdmIGITQM6xjAAGYMUfHj/ESvGagAMwDSPGkAlAwhh2hlAPP72\n        HwCNoBTnMYIrPQAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"_toolNewFolder.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB9SURBVDhPY0AG3759+w/DUCHiALLGQ7VScDYIQ5XgB8ga\n        0WmoEtwApAiEX97YD9YEwyA+TA6qFDsAKUDWiI2PD2P4H5vGO9uqsGKQHIorsNFPTi///+H9RwyMYQAM\n        E2s7CIPkwQaAALImQhphGMMAbIrw4VEDaGEA6fjbfwAIeZgfrfHBswAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"_toolAddFolder.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACBSURBVDhPY6AJ+P//P9unT58effv27T8uDJT/C6QnQ7Wg\n        gq9fv2a8f3L5/51tlTjx3Z11YEPAGkAmQU2E2/DoyJT/T8+v+f/h/Ues+O6uRrA6sAEgzSATMWzZUQtW\n        iA2D5OEGgBjomonBowYMKgNwpQN8mGBKJISh6rHnBToCBgYAxYxmm36uVR4AAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"_toolBuild.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACgSURBVDhPtZDBDYAgDEUdyRm4swWDeGIKtmAQL4wCXDHf\n        WNIUFDXa5Kftb/uCTjxyzmuMcT7qopTahRoeZthB3Q0sQimlRQLIg471NjA0xpQQwr7IAfAwGwLoyDnX\n        rYcAa21dlsKsAcCQ8t4XrXU9RA2vt1ufLQf0zfyfcNHNKWCkLgCZw656yt8CnugSgJ57sicP+R/AHTWA\n        N6qA98plA092u5UZZO2MAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"_toolRebuild.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACjSURBVDhPtZDJDcMgEEVdkmvgThcUkhNV0AWF+EIfSSTg\n        SvSRB41YjG05Iz0xzPKEvfCIMW7e+3XPkxAigxw19DCDvBsYBCGEVy2gGtjH20BTKZWcc3mQC1BDbyqg\n        JWNMN58KtNZluAa9RoBCjbU2SSnLInLUerPl2XWDvpn/Ew7tDAUzugKcXHZ0p/NZwRUawR2Ggs/7mxnd\n        if8JzlIE94npB0x8kNVSv0TSAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"_toolClean.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADGSURBVDhPlZBBDoMgEEU9G3sOwCHq2q5t2HOGmrDThVfx\n        Hm03bGm+5SeDEgs/mZgwvDeDXUtCCPFYqfU/BJxzUSkVtdbtAu/9DrOqBbi4rmsGY5MqAS5t25bB2ATn\n        RQEbLMB4L2Fswl5CfpEQLhljsqmQQFYFjuMjTs8pExRh5Ai+X5+9lnnZi4IijKBhrY3DcM9gfrEJ5JcC\n        Svpbf5JgK/64hJwjJfIZKE6/FCBSwk2qpstICf5J9XQZKWmaLkMJKx0X0nVfAYShAr3vEz4AAAAASUVO\n        RK5CYII=\n</value>\n  </data>\n  <data name=\"_toolFilterOutput.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABBSURBVDhPY6AW+E8mHkQA3UnIzsSH4QCrICkA2QCyDMFl\n        ALo4OoYDnBLEAoo0gwA2zciG4sKDCGBzHjF4wAEDAwCugky0VBDcOQAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>284, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>25</value>\n  </metadata>\n</root>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/MultiSelectTreeview.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Windows.Forms;\nusing System.Runtime.InteropServices;\n\nnamespace Content.Pipeline.Editor\n{\n\tpublic class MultiSelectTreeview : TreeView\n    {\n        [DllImport(\"user32.dll\")]\n        private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, int lParam);\n\n        #region Selected Node(s) Properties\n\n        private readonly List<TreeNode> _selectedNodes = null;\n\n        private Color _dragOverNodeForeColor = SystemColors.HighlightText;\n        private Color _dragOverNodeBackColor = SystemColors.Highlight;\n        private TreeNode _previousNode;\n\n        /// <summary>\n        /// The baskground colour of the node being dragged over.\n        /// </summary>\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Color DragOverNodeBackColor\n        {\n            get\n            {\n                return this._dragOverNodeBackColor;\n            }\n            set\n            {\n                this._dragOverNodeBackColor = value;\n            }\n        }\n\n        /// <summary>\n        /// The foreground colour of the node being dragged over.\n        /// </summary>\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Color DragOverNodeForeColor\n        {\n            get\n            {\n                return this._dragOverNodeForeColor;\n            }\n            set\n            {\n                this._dragOverNodeForeColor = value;\n            }\n        }\n\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic IEnumerable<TreeNode> SelectedNodes\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _selectedNodes;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tClearSelectedNodes();\n\t\t\t\tif( value != null )\n\t\t\t\t{\n\t\t\t\t\tforeach( var node in value )\n\t\t\t\t\t{\n\t\t\t\t\t\tToggleNode( node, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t    public IEnumerable<TreeNode> SelectedNodesRecursive\n\t    {\n            get\n            {                \n                var nodes = new List<TreeNode>();\n\n                foreach (var node in _selectedNodes)\n                {\n                    if (!nodes.Contains(node))\n                        nodes.Add(node);\n\n                    var children = new List<TreeNode>();\n                    TreeViewExtensions.AddTreeNodesRecursive(node.Nodes, children);\n\n                    foreach (var child in children)\n                    {\n                        if (!nodes.Contains(child))\n                            nodes.Add(child);\n                    }\n                }\n\n                return nodes;\n            }\n\t    }\n\n\t\t// Note we use the new keyword to Hide the native treeview's SelectedNode property.\n\t\tprivate TreeNode _selectedNode;\n\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic new TreeNode SelectedNode\n\t\t{\n\t\t\tget { return _selectedNode; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tClearSelectedNodes();\n\t\t\t\tif( value != null )\n\t\t\t\t{\n\t\t\t\t\tSelectNode( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\tpublic MultiSelectTreeview()\n\t\t{\n\t\t\t_selectedNodes = new List<TreeNode>();\n\t\t\tbase.SelectedNode = null;\n\t\t}\n\n\t\t#region Overridden Events\n\n\t\tprotected override void OnGotFocus( EventArgs e )\n\t\t{\n\t\t\t// Make sure at least one node has a selection\n\t\t\t// this way we can tab to the ctrl and use the \n\t\t\t// keyboard to select nodes\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif( _selectedNode == null && this.TopNode != null )\n\t\t\t\t{\n\t\t\t\t\tToggleNode( this.TopNode, true );\n\t\t\t\t}\n\n\t\t\t\tbase.OnGotFocus( e );\n\t\t\t}\n\t\t\tcatch( Exception ex )\n\t\t\t{\n\t\t\t\tHandleException( ex );\n\t\t\t}\n\t\t}\n\n\t\tprotected override void OnMouseDown( MouseEventArgs e )\n\t\t{\n\t\t\t// If the user clicks on a node that was not\n\t\t\t// previously selected, select it now.\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tbase.SelectedNode = null;\n\n\t\t\t\tTreeNode node = this.GetNodeAt( e.Location );\n\t\t\t\tif( node != null )\n\t\t\t\t{\n\t\t\t\t\tint leftBound = node.Bounds.X; // - 20; // Allow user to click on image\n\t\t\t\t\tint rightBound = node.Bounds.Right + 10; // Give a little extra room\n\t\t\t\t\tif( e.Location.X > leftBound && e.Location.X < rightBound )\n\t\t\t\t\t{\n\t\t\t\t\t\tif( ModifierKeys == Keys.None && ( _selectedNodes.Contains( node ) ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Potential Drag Operation\n\t\t\t\t\t\t\t// Let Mouse Up do select\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tSelectNode( node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbase.OnMouseDown( e );\n\t\t\t}\n\t\t\tcatch( Exception ex )\n\t\t\t{\n\t\t\t\tHandleException( ex );\n\t\t\t}\n\t\t}\n\n\t\tprotected override void OnMouseUp( MouseEventArgs e )\n\t\t{\n\t\t\t// If the clicked on a node that WAS previously\n\t\t\t// selected then, reselect it now. This will clear\n\t\t\t// any other selected nodes. e.g. A B C D are selected\n\t\t\t// the user clicks on B, now A C & D are no longer selected.\n            // JCF: Only do that for left clicks.\n            //      Right clicks brings up a context menu which will apply even a multiselection.\n\t\t\ttry\n\t\t\t{\n\t\t\t    if (e.Button.HasFlag(MouseButtons.Left))\n\t\t\t    {\n\t\t\t        // Check to see if a node was clicked on \n\t\t\t        TreeNode node = this.GetNodeAt(e.Location);\n\t\t\t        if (node != null)\n\t\t\t        {\n\t\t\t            if (ModifierKeys == Keys.None && _selectedNodes.Contains(node))\n\t\t\t            {\n\t\t\t                int leftBound = node.Bounds.X; // -20; // Allow user to click on image\n\t\t\t                int rightBound = node.Bounds.Right + 10; // Give a little extra room\n\t\t\t                if (e.Location.X > leftBound && e.Location.X < rightBound)\n\t\t\t                {\n\n\t\t\t                    SelectNode(node);\n\t\t\t                }\n\t\t\t            }\n\t\t\t        }\n\n                    base.OnMouseUp(e);\n\t\t\t    }\t\t\t    \n\t\t\t}\n\t\t\tcatch( Exception ex )\n\t\t\t{\n\t\t\t\tHandleException( ex );\n\t\t\t}\n        }\n\n        protected override void OnDragOver(DragEventArgs drgevent)\n        {\n            // Get the node from the mouse position, colour it\n            Point pt = this.PointToClient(new Point(drgevent.X, drgevent.Y));\n            TreeNode treeNode = this.GetNodeAt(pt);\n\n            // Change node color\n            if (this._previousNode != null && this._previousNode != treeNode)\n            {\n                this._previousNode.BackColor = SystemColors.HighlightText;\n                this._previousNode.ForeColor = SystemColors.ControlText;\n            }\n\n            if (treeNode != null && treeNode.BackColor != this._dragOverNodeBackColor)\n            {\n                treeNode.BackColor = this._dragOverNodeBackColor;\n                treeNode.ForeColor = this._dragOverNodeForeColor;\n            }\n\n            // Scrolling down/up\n            if (pt.Y + 10 > this.ClientSize.Height)\n                SendMessage(this.Handle, 277, (IntPtr)1, 0);\n            else if (pt.Y < this.Top + 10)\n                SendMessage(this.Handle, 277, (IntPtr)0, 0);\n\n            // Remember the target node, so we can set it back\n            this._previousNode = treeNode;\n\n            base.OnDragOver(drgevent);\n        }\n\n        protected override void OnDragDrop(DragEventArgs drgevent)\n        {\n            // Restore node color\n            if (this._previousNode != null)\n            {\n                this._previousNode.BackColor = SystemColors.HighlightText;\n                this._previousNode.ForeColor = SystemColors.ControlText;\n                this._previousNode = null;\n            }\n\n            base.OnDragDrop(drgevent);\n        }\n\n        protected override void OnItemDrag( ItemDragEventArgs e )\n\t\t{\n\t\t\t// If the user drags a node and the node being dragged is NOT\n\t\t\t// selected, then clear the active selection, select the\n\t\t\t// node being dragged and drag it. Otherwise if the node being\n\t\t\t// dragged is selected, drag the entire selection.\n\t\t\ttry\n\t\t\t{\n\t\t\t\tTreeNode node = e.Item as TreeNode;\n\n\t\t\t\tif( node != null )\n\t\t\t\t{\n\t\t\t\t\tif( !_selectedNodes.Contains( node ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tSelectSingleNode( node );\n\t\t\t\t\t\tToggleNode( node, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbase.OnItemDrag( e );\n\t\t\t}\n\t\t\tcatch( Exception ex )\n\t\t\t{\n\t\t\t\tHandleException( ex );\n\t\t\t}\n\t\t}\n\n\t\tprotected override void OnBeforeSelect( TreeViewCancelEventArgs e )\n\t\t{\n\t\t\t// Never allow base.SelectedNode to be set!\n\t\t\ttry\n\t\t\t{\n\t\t\t\tbase.SelectedNode = null;\n\t\t\t\te.Cancel = true;\n\n\t\t\t\tbase.OnBeforeSelect( e );\n\t\t\t}\n\t\t\tcatch( Exception ex )\n\t\t\t{\n\t\t\t\tHandleException( ex );\n\t\t\t}\n\t\t}\n\n\t\tprotected override void OnAfterSelect( TreeViewEventArgs e )\n\t\t{\n\t\t\t// Never allow base.SelectedNode to be set!\n\t\t\ttry\n\t\t\t{\n\t\t\t\tbase.OnAfterSelect( e );\n\t\t\t\tbase.SelectedNode = null;\n\t\t\t}\n\t\t\tcatch( Exception ex )\n\t\t\t{\n\t\t\t\tHandleException( ex );\n\t\t\t}\n\t\t}\n\n\t\tprotected override void OnKeyDown( KeyEventArgs e )\n\t\t{\n\t\t\t// Handle all possible key strokes for the control.\n\t\t\t// including navigation, selection, etc.\n\n\t\t\tbase.OnKeyDown( e );\n\n\t\t\tif( e.KeyCode == Keys.ShiftKey ) return;\n\n\t\t\t//this.BeginUpdate();\n\t\t\tbool bShift = ( ModifierKeys == Keys.Shift );\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Nothing is selected in the tree, this isn't a good state\n\t\t\t\t// select the top node\n\t\t\t\tif( _selectedNode == null && this.TopNode != null )\n\t\t\t\t{\n\t\t\t\t\tToggleNode( this.TopNode, true );\n\t\t\t\t}\n\n\t\t\t\t// Nothing is still selected in the tree, this isn't a good state, leave.\n\t\t\t\tif( _selectedNode == null ) return;\n\n\t\t\t\tif( e.KeyCode == Keys.Left )\n\t\t\t\t{\n\t\t\t\t\tif( _selectedNode.IsExpanded && _selectedNode.Nodes.Count > 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Collapse an expanded node that has children\n\t\t\t\t\t\t_selectedNode.Collapse();\n\t\t\t\t\t}\n\t\t\t\t\telse if( _selectedNode.Parent != null )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Node is already collapsed, try to select its parent.\n\t\t\t\t\t\tSelectSingleNode( _selectedNode.Parent );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( e.KeyCode == Keys.Right )\n\t\t\t\t{\n\t\t\t\t\tif( !_selectedNode.IsExpanded )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Expand a collpased node's children\n\t\t\t\t\t\t_selectedNode.Expand();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// Node was already expanded, select the first child\n\t\t\t\t\t\tSelectSingleNode( _selectedNode.FirstNode );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( e.KeyCode == Keys.Up )\n\t\t\t\t{\n\t\t\t\t\t// Select the previous node\n\t\t\t\t\tif( _selectedNode.PrevVisibleNode != null )\n\t\t\t\t\t{\n\t\t\t\t\t\tSelectNode( _selectedNode.PrevVisibleNode );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( e.KeyCode == Keys.Down )\n\t\t\t\t{\n\t\t\t\t\t// Select the next node\n\t\t\t\t\tif( _selectedNode.NextVisibleNode != null )\n\t\t\t\t\t{\n\t\t\t\t\t\tSelectNode( _selectedNode.NextVisibleNode );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( e.KeyCode == Keys.Home )\n\t\t\t\t{\n\t\t\t\t\tif( bShift )\n\t\t\t\t\t{\n\t\t\t\t\t\tif( _selectedNode.Parent == null )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Select all of the root nodes up to this point \n\t\t\t\t\t\t\tif( this.Nodes.Count > 0 )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSelectNode( this.Nodes[0] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Select all of the nodes up to this point under this nodes parent\n\t\t\t\t\t\t\tSelectNode( _selectedNode.Parent.FirstNode );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// Select this first node in the tree\n\t\t\t\t\t\tif( this.Nodes.Count > 0 )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tSelectSingleNode( this.Nodes[0] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( e.KeyCode == Keys.End )\n\t\t\t\t{\n\t\t\t\t\tif( bShift )\n\t\t\t\t\t{\n\t\t\t\t\t\tif( _selectedNode.Parent == null )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Select the last ROOT node in the tree\n\t\t\t\t\t\t\tif( this.Nodes.Count > 0 )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSelectNode( this.Nodes[this.Nodes.Count - 1] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Select the last node in this branch\n\t\t\t\t\t\t\tSelectNode( _selectedNode.Parent.LastNode );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif( this.Nodes.Count > 0 )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Select the last node visible node in the tree.\n\t\t\t\t\t\t\t// Don't expand branches incase the tree is virtual\n\t\t\t\t\t\t\tTreeNode ndLast = this.Nodes[0].LastNode;\n\t\t\t\t\t\t\twhile( ndLast.IsExpanded && ( ndLast.LastNode != null ) )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tndLast = ndLast.LastNode;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tSelectSingleNode( ndLast );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( e.KeyCode == Keys.PageUp )\n\t\t\t\t{\n\t\t\t\t\t// Select the highest node in the display\n\t\t\t\t\tint nCount = this.VisibleCount;\n\t\t\t\t\tTreeNode ndCurrent = _selectedNode;\n\t\t\t\t\twhile( ( nCount ) > 0 && ( ndCurrent.PrevVisibleNode != null ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tndCurrent = ndCurrent.PrevVisibleNode;\n\t\t\t\t\t\tnCount--;\n\t\t\t\t\t}\n\t\t\t\t\tSelectSingleNode( ndCurrent );\n\t\t\t\t}\n\t\t\t\telse if( e.KeyCode == Keys.PageDown )\n\t\t\t\t{\n\t\t\t\t\t// Select the lowest node in the display\n\t\t\t\t\tint nCount = this.VisibleCount;\n\t\t\t\t\tTreeNode ndCurrent = _selectedNode;\n\t\t\t\t\twhile( ( nCount ) > 0 && ( ndCurrent.NextVisibleNode != null ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tndCurrent = ndCurrent.NextVisibleNode;\n\t\t\t\t\t\tnCount--;\n\t\t\t\t\t}\n\t\t\t\t\tSelectSingleNode( ndCurrent );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Assume this is a search character a-z, A-Z, 0-9, etc.\n\t\t\t\t\t// Select the first node after the current node that \n\t\t\t\t\t// starts with this character\n\t\t\t\t\tstring sSearch = ( (char) e.KeyValue ).ToString();\n\n\t\t\t\t\tTreeNode ndCurrent = _selectedNode;\n\t\t\t\t\twhile( ( ndCurrent.NextVisibleNode != null ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tndCurrent = ndCurrent.NextVisibleNode;\n\t\t\t\t\t\tif( ndCurrent.Text.StartsWith( sSearch ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tSelectSingleNode( ndCurrent );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch( Exception ex )\n\t\t\t{\n\t\t\t\tHandleException( ex );\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tthis.EndUpdate();\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Helper Methods\n\n\t\tprivate void SelectNode( TreeNode node )\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tthis.BeginUpdate();\n\n\t\t\t\tif( _selectedNode == null || ModifierKeys == Keys.Control )\n\t\t\t\t{\n\t\t\t\t\t// Ctrl+Click selects an unselected node, or unselects a selected node.\n\t\t\t\t\tbool bIsSelected = _selectedNodes.Contains( node );\n\t\t\t\t\tToggleNode( node, !bIsSelected );\n\t\t\t\t}\n\t\t\t\telse if( ModifierKeys == Keys.Shift )\n\t\t\t\t{\n\t\t\t\t\t// Shift+Click selects nodes between the selected node and here.\n\t\t\t\t\tTreeNode ndStart = _selectedNode;\n\t\t\t\t\tTreeNode ndEnd = node;\n\n\t\t\t\t\tif( ndStart.Parent == ndEnd.Parent )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Selected node and clicked node have same parent, easy case.\n\t\t\t\t\t\tif( ndStart.Index < ndEnd.Index )\n\t\t\t\t\t\t{\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// If the selected node is beneath the clicked node walk down\n\t\t\t\t\t\t\t// selecting each Visible node until we reach the end.\n\t\t\t\t\t\t\twhile( ndStart != ndEnd )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tndStart = ndStart.NextVisibleNode;\n\t\t\t\t\t\t\t\tif( ndStart == null ) break;\n\t\t\t\t\t\t\t\tToggleNode( ndStart, true );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if( ndStart.Index == ndEnd.Index )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Clicked same node, do nothing\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// If the selected node is above the clicked node walk up\n\t\t\t\t\t\t\t// selecting each Visible node until we reach the end.\n\t\t\t\t\t\t\twhile( ndStart != ndEnd )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tndStart = ndStart.PrevVisibleNode;\n\t\t\t\t\t\t\t\tif( ndStart == null ) break;\n\t\t\t\t\t\t\t\tToggleNode( ndStart, true );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// Selected node and clicked node have same parent, hard case.\n\t\t\t\t\t\t// We need to find a common parent to determine if we need\n\t\t\t\t\t\t// to walk down selecting, or walk up selecting.\n\n\t\t\t\t\t\tTreeNode ndStartP = ndStart;\n\t\t\t\t\t\tTreeNode ndEndP = ndEnd;\n\t\t\t\t\t\tint startDepth = Math.Min( ndStartP.Level, ndEndP.Level );\n\n\t\t\t\t\t\t// Bring lower node up to common depth\n\t\t\t\t\t\twhile( ndStartP.Level > startDepth )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tndStartP = ndStartP.Parent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Bring lower node up to common depth\n\t\t\t\t\t\twhile( ndEndP.Level > startDepth )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tndEndP = ndEndP.Parent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Walk up the tree until we find the common parent\n\t\t\t\t\t\twhile( ndStartP.Parent != ndEndP.Parent )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tndStartP = ndStartP.Parent;\n\t\t\t\t\t\t\tndEndP = ndEndP.Parent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Select the node\n\t\t\t\t\t\tif( ndStartP.Index < ndEndP.Index )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// If the selected node is beneath the clicked node walk down\n\t\t\t\t\t\t\t// selecting each Visible node until we reach the end.\n\t\t\t\t\t\t\twhile( ndStart != ndEnd )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tndStart = ndStart.NextVisibleNode;\n\t\t\t\t\t\t\t\tif( ndStart == null ) break;\n\t\t\t\t\t\t\t\tToggleNode( ndStart, true );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if( ndStartP.Index == ndEndP.Index )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif( ndStart.Level < ndEnd.Level )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\twhile( ndStart != ndEnd )\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tndStart = ndStart.NextVisibleNode;\n\t\t\t\t\t\t\t\t\tif( ndStart == null ) break;\n\t\t\t\t\t\t\t\t\tToggleNode( ndStart, true );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\twhile( ndStart != ndEnd )\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tndStart = ndStart.PrevVisibleNode;\n\t\t\t\t\t\t\t\t\tif( ndStart == null ) break;\n\t\t\t\t\t\t\t\t\tToggleNode( ndStart, true );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// If the selected node is above the clicked node walk up\n\t\t\t\t\t\t\t// selecting each Visible node until we reach the end.\n\t\t\t\t\t\t\twhile( ndStart != ndEnd )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tndStart = ndStart.PrevVisibleNode;\n\t\t\t\t\t\t\t\tif( ndStart == null ) break;\n\t\t\t\t\t\t\t\tToggleNode( ndStart, true );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Just clicked a node, select it\n\t\t\t\t\tSelectSingleNode( node );\n\t\t\t\t}\n\n\t\t\t\tOnAfterSelect( new TreeViewEventArgs( _selectedNode ) );\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tthis.EndUpdate();\n\t\t\t}\n\t\t}\n\n\t\tprivate void ClearSelectedNodes()\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tforeach( TreeNode node in _selectedNodes )\n\t\t\t\t{\n\t\t\t\t\tnode.BackColor = this.BackColor;\n\t\t\t\t\tnode.ForeColor = this.ForeColor;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\t_selectedNodes.Clear();\n\t\t\t\t_selectedNode = null;\n\t\t\t}\n\t\t}\n\n\t\tprivate void SelectSingleNode( TreeNode node )\n\t\t{\n\t\t\tif( node == null )\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tClearSelectedNodes();\n\t\t\tToggleNode( node, true );\n\t\t\tnode.EnsureVisible();\n\n\t\t\tOnAfterSelect( new TreeViewEventArgs( _selectedNode ) );\n        }\n\n\t\tprivate void ToggleNode( TreeNode node, bool bSelectNode )\n\t\t{\n\t\t\tif( bSelectNode )\n\t\t\t{\n\t\t\t\t_selectedNode = node;\n\t\t\t\tif( !_selectedNodes.Contains( node ) )\n\t\t\t\t{\n\t\t\t\t\t_selectedNodes.Add( node );\n\t\t\t\t}\n\t\t\t\tnode.BackColor = SystemColors.Highlight;\n\t\t\t\tnode.ForeColor = SystemColors.HighlightText;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_selectedNodes.Remove( node );\n\t\t\t\tnode.BackColor = this.BackColor;\n\t\t\t\tnode.ForeColor = this.ForeColor;\n\t\t\t}\n\t\t}\n\n\t\tprivate void HandleException( Exception ex )\n\t\t{\n\t\t\t// Perform some error handling here.\n\t\t\t// We don't want to bubble errors to the CLR. \n\t\t\tMessageBox.Show( ex.Message );\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/NewContentDialog.Designer.cs",
    "content": "﻿namespace Content.Pipeline.Editor\n{\n    partial class NewContentDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this._buttonPanel = new System.Windows.Forms.Panel();\n            this._cancelBtn = new System.Windows.Forms.Button();\n            this._okBtn = new System.Windows.Forms.Button();\n            this._namePanel = new System.Windows.Forms.Panel();\n            this._namePanelTable = new System.Windows.Forms.TableLayoutPanel();\n            this._name = new System.Windows.Forms.TextBox();\n            this._namePanelLabel = new System.Windows.Forms.Label();\n            this._listView = new System.Windows.Forms.ListView();\n            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.tableLayoutPanel1.SuspendLayout();\n            this._buttonPanel.SuspendLayout();\n            this._namePanel.SuspendLayout();\n            this._namePanelTable.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this._buttonPanel, 0, 2);\n            this.tableLayoutPanel1.Controls.Add(this._namePanel, 0, 1);\n            this.tableLayoutPanel1.Controls.Add(this._listView, 0, 0);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 3;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(283, 323);\n            this.tableLayoutPanel1.TabIndex = 2;\n            // \n            // _buttonPanel\n            // \n            this._buttonPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));\n            this._buttonPanel.BackColor = System.Drawing.SystemColors.Control;\n            this._buttonPanel.Controls.Add(this._cancelBtn);\n            this._buttonPanel.Controls.Add(this._okBtn);\n            this._buttonPanel.Location = new System.Drawing.Point(0, 293);\n            this._buttonPanel.Margin = new System.Windows.Forms.Padding(0);\n            this._buttonPanel.Name = \"_buttonPanel\";\n            this._buttonPanel.Size = new System.Drawing.Size(283, 30);\n            this._buttonPanel.TabIndex = 1;\n            // \n            // _cancelBtn\n            // \n            this._cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this._cancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this._cancelBtn.Location = new System.Drawing.Point(199, 3);\n            this._cancelBtn.Name = \"_cancelBtn\";\n            this._cancelBtn.Size = new System.Drawing.Size(75, 23);\n            this._cancelBtn.TabIndex = 1;\n            this._cancelBtn.Text = \"Cancel\";\n            this._cancelBtn.UseVisualStyleBackColor = true;\n            // \n            // _okBtn\n            // \n            this._okBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this._okBtn.DialogResult = System.Windows.Forms.DialogResult.OK;\n            this._okBtn.Enabled = false;\n            this._okBtn.Location = new System.Drawing.Point(118, 3);\n            this._okBtn.Name = \"_okBtn\";\n            this._okBtn.Size = new System.Drawing.Size(75, 23);\n            this._okBtn.TabIndex = 0;\n            this._okBtn.Text = \"Ok\";\n            this._okBtn.UseVisualStyleBackColor = true;\n            // \n            // _namePanel\n            // \n            this._namePanel.AutoSize = true;\n            this._namePanel.Controls.Add(this._namePanelTable);\n            this._namePanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._namePanel.Location = new System.Drawing.Point(3, 264);\n            this._namePanel.Name = \"_namePanel\";\n            this._namePanel.Size = new System.Drawing.Size(277, 26);\n            this._namePanel.TabIndex = 2;\n            // \n            // _namePanelTable\n            // \n            this._namePanelTable.AutoSize = true;\n            this._namePanelTable.ColumnCount = 2;\n            this._namePanelTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\n            this._namePanelTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this._namePanelTable.Controls.Add(this._name, 1, 0);\n            this._namePanelTable.Controls.Add(this._namePanelLabel, 0, 0);\n            this._namePanelTable.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._namePanelTable.Location = new System.Drawing.Point(0, 0);\n            this._namePanelTable.Name = \"_namePanelTable\";\n            this._namePanelTable.RowCount = 1;\n            this._namePanelTable.RowStyles.Add(new System.Windows.Forms.RowStyle());\n            this._namePanelTable.Size = new System.Drawing.Size(277, 26);\n            this._namePanelTable.TabIndex = 2;\n            // \n            // _name\n            // \n            this._name.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._name.Location = new System.Drawing.Point(47, 3);\n            this._name.Name = \"_name\";\n            this._name.Size = new System.Drawing.Size(227, 20);\n            this._name.TabIndex = 1;\n            // \n            // _namePanelLabel\n            // \n            this._namePanelLabel.AutoSize = true;\n            this._namePanelLabel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._namePanelLabel.Location = new System.Drawing.Point(3, 0);\n            this._namePanelLabel.Name = \"_namePanelLabel\";\n            this._namePanelLabel.Size = new System.Drawing.Size(38, 26);\n            this._namePanelLabel.TabIndex = 2;\n            this._namePanelLabel.Text = \"Name:\";\n            this._namePanelLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\n            // \n            // _listView\n            // \n            this._listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.columnHeader1});\n            this._listView.Dock = System.Windows.Forms.DockStyle.Fill;\n            this._listView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;\n            this._listView.HideSelection = false;\n            this._listView.LabelWrap = false;\n            this._listView.Location = new System.Drawing.Point(3, 3);\n            this._listView.MultiSelect = false;\n            this._listView.Name = \"_listView\";\n            this._listView.Scrollable = false;\n            this._listView.Size = new System.Drawing.Size(277, 255);\n            this._listView.TabIndex = 3;\n            this._listView.UseCompatibleStateImageBehavior = false;\n            this._listView.View = System.Windows.Forms.View.Details;\n            this._listView.SelectedIndexChanged += new System.EventHandler(this.OnSelectedValueChanged);\n            this._listView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.OnDoubleClick);\n            // \n            // columnHeader1\n            // \n            this.columnHeader1.Width = 417;\n            // \n            // NewContentDialog\n            // \n            this.AcceptButton = this._okBtn;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;\n            this.CancelButton = this._cancelBtn;\n            this.ClientSize = new System.Drawing.Size(283, 323);\n            this.Controls.Add(this.tableLayoutPanel1);\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"NewContentDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"New Content\";\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this._buttonPanel.ResumeLayout(false);\n            this._namePanel.ResumeLayout(false);\n            this._namePanel.PerformLayout();\n            this._namePanelTable.ResumeLayout(false);\n            this._namePanelTable.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;\n        private System.Windows.Forms.Panel _namePanel;\n        private System.Windows.Forms.TextBox _name;\n        private System.Windows.Forms.TableLayoutPanel _namePanelTable;\n        private System.Windows.Forms.Label _namePanelLabel;\n        private System.Windows.Forms.ListView _listView;\n        private System.Windows.Forms.ColumnHeader columnHeader1;\n        private System.Windows.Forms.Panel _buttonPanel;\n        private System.Windows.Forms.Button _cancelBtn;\n        private System.Windows.Forms.Button _okBtn;\n\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/NewContentDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    public partial class NewContentDialog : Form\n    {\n        public ContentItemTemplate Selected\n        {\n            get\n            {\n                if (_listView.SelectedItems == null || _listView.SelectedItems.Count == 0)\n                    return null;\n\n                return _listView.SelectedItems[0].Tag as ContentItemTemplate;\n            }\n        }\n\n        public string NameGiven\n        {\n            get\n            {\n                if (string.IsNullOrEmpty(_name.Text))\n                {\n                    var item = Selected;\n                    if (item == null)\n                        return \"NewContentItem\";\n\n                    return string.Concat(\"New\", Path.GetFileNameWithoutExtension(item.TemplateFile));\n                }\n\n                return _name.Text;\n            }\n        }\n\n        public NewContentDialog(IEnumerable<ContentItemTemplate> items, ImageList icons)\n        {            \n            InitializeComponent();\n\n            _listView.SmallImageList = icons;\n\n            _listView.Items.Clear();\n            foreach (var i in items)\n            {\n                var obj = new ListViewItem(i.Label, i.Icon);\n                obj.Tag = i;\n                _listView.Items.Add(obj);\n            }\n        }\n\n        private void OnSelectedValueChanged(object sender, EventArgs e)\n        {\n            _okBtn.Enabled = _listView.SelectedItems.Count > 0;\n        }\n\n        private void OnDoubleClick(object sender, MouseEventArgs e)\n        {\n            if (Selected != null)\n            {\n                _okBtn.PerformClick();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/NewContentDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/PackageDialog.Designer.cs",
    "content": "﻿using System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor.Forms\n{\n    partial class PackageDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PackageDialog));\n            tbName = new TextBox();\n            okButton = new Button();\n            cancelButton = new Button();\n            label1 = new Label();\n            label2 = new Label();\n            tbVersion = new TextBox();\n            llSearchNuget = new LinkLabel();\n            SuspendLayout();\n            // \n            // tbName\n            // \n            tbName.Location = new System.Drawing.Point(12, 32);\n            tbName.Name = \"tbName\";\n            tbName.Size = new System.Drawing.Size(359, 27);\n            tbName.TabIndex = 0;\n            // \n            // okButton\n            // \n            okButton.DialogResult = DialogResult.OK;\n            okButton.Location = new System.Drawing.Point(296, 88);\n            okButton.Name = \"okButton\";\n            okButton.Size = new System.Drawing.Size(100, 35);\n            okButton.TabIndex = 2;\n            okButton.Text = \"&OK\";\n            // \n            // cancelButton\n            // \n            cancelButton.DialogResult = DialogResult.Cancel;\n            cancelButton.Location = new System.Drawing.Point(402, 88);\n            cancelButton.Name = \"cancelButton\";\n            cancelButton.Size = new System.Drawing.Size(100, 35);\n            cancelButton.TabIndex = 3;\n            cancelButton.Text = \"&Cancel\";\n            // \n            // label1\n            // \n            label1.AutoSize = true;\n            label1.Location = new System.Drawing.Point(12, 9);\n            label1.Name = \"label1\";\n            label1.Size = new System.Drawing.Size(63, 20);\n            label1.TabIndex = 3;\n            label1.Text = \"Package\";\n            // \n            // label2\n            // \n            label2.AutoSize = true;\n            label2.Location = new System.Drawing.Point(377, 9);\n            label2.Name = \"label2\";\n            label2.Size = new System.Drawing.Size(57, 20);\n            label2.TabIndex = 4;\n            label2.Text = \"Version\";\n            // \n            // tbVersion\n            // \n            tbVersion.Location = new System.Drawing.Point(377, 32);\n            tbVersion.Name = \"tbVersion\";\n            tbVersion.Size = new System.Drawing.Size(125, 27);\n            tbVersion.TabIndex = 1;\n            // \n            // llSearchNuget\n            // \n            llSearchNuget.AutoSize = true;\n            llSearchNuget.Location = new System.Drawing.Point(12, 62);\n            llSearchNuget.Name = \"llSearchNuget\";\n            llSearchNuget.Size = new System.Drawing.Size(140, 20);\n            llSearchNuget.TabIndex = 5;\n            llSearchNuget.TabStop = true;\n            llSearchNuget.Text = \"search on nuget.org\";\n            llSearchNuget.LinkClicked += llSearchNuget_LinkClicked;\n            // \n            // PackageDialog\n            // \n            AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);\n            AutoScaleMode = AutoScaleMode.Font;\n            ClientSize = new System.Drawing.Size(514, 135);\n            Controls.Add(llSearchNuget);\n            Controls.Add(tbVersion);\n            Controls.Add(label2);\n            Controls.Add(label1);\n            Controls.Add(tbName);\n            Controls.Add(okButton);\n            Controls.Add(cancelButton);\n            FormBorderStyle = FormBorderStyle.FixedToolWindow;\n            Name = \"PackageDialog\";\n            Text = \"Package\";\n            ResumeLayout(false);\n            PerformLayout();\n        }\n\n        #endregion\n        private Button okButton;\n        private Button cancelButton;\n        private Label label1;\n        private Label label2;\n        public TextBox tbName;\n        public TextBox tbVersion;\n        private LinkLabel llSearchNuget;\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/PackageDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor.Forms\n{\n    public partial class PackageDialog : Form\n    {\n        public PackageDialog()\n        {\n            InitializeComponent();\n        }\n\n        private void llSearchNuget_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            string nugetUrl = \"https://www.nuget.org/packages?q=\";\n\n            string packageName = this.tbName.Text;\n            string tags = \"Tags:\\\"kni\\\",\\\"pipeline\\\"\";\n            string query = string.Format(\"{0} {1}\", packageName, tags);\n\n            ProcessStartInfo startInfo = new ProcessStartInfo();\n            startInfo.FileName = nugetUrl + Uri.EscapeDataString(query);\n            startInfo.UseShellExecute = true;\n            Process.Start(startInfo);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/PackageDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/PackageReferenceDialog.Designer.cs",
    "content": "﻿namespace Content.Pipeline.Editor\n{\n    partial class PackageReferenceDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.buttonOk = new System.Windows.Forms.Button();\n            this.buttonCancel = new System.Windows.Forms.Button();\n            this.buttonAdd = new System.Windows.Forms.Button();\n            this.buttonRemove = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // listView1\n            // \n            this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            columnHeader1, columnHeader2});\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(12, 12);\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(473, 300);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            // \n            // columnHeader1\n            // \n            this.columnHeader1.Text = \"Name\";\n            this.columnHeader1.Width = 460;\n            // \n            // columnHeader2\n            // \n            this.columnHeader2.Text = \"Version\";\n            // \n            // buttonOk\n            // \n            this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK;\n            this.buttonOk.Location = new System.Drawing.Point(498, 258);\n            this.buttonOk.Name = \"buttonOk\";\n            this.buttonOk.Size = new System.Drawing.Size(75, 23);\n            this.buttonOk.TabIndex = 1;\n            this.buttonOk.Text = \"Ok\";\n            this.buttonOk.UseVisualStyleBackColor = true;\n            // \n            // buttonCancel\n            // \n            this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.buttonCancel.Location = new System.Drawing.Point(498, 287);\n            this.buttonCancel.Name = \"buttonCancel\";\n            this.buttonCancel.Size = new System.Drawing.Size(75, 23);\n            this.buttonCancel.TabIndex = 2;\n            this.buttonCancel.Text = \"Cancel\";\n            this.buttonCancel.UseVisualStyleBackColor = true;\n            // \n            // buttonAdd\n            // \n            this.buttonAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\n            this.buttonAdd.Location = new System.Drawing.Point(498, 12);\n            this.buttonAdd.Name = \"buttonAdd\";\n            this.buttonAdd.Size = new System.Drawing.Size(75, 23);\n            this.buttonAdd.TabIndex = 3;\n            this.buttonAdd.Text = \"Add\";\n            this.buttonAdd.UseVisualStyleBackColor = true;\n            this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click);\n            // \n            // buttonRemove\n            // \n            this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\n            this.buttonRemove.Location = new System.Drawing.Point(498, 41);\n            this.buttonRemove.Name = \"buttonRemove\";\n            this.buttonRemove.Size = new System.Drawing.Size(75, 23);\n            this.buttonRemove.TabIndex = 4;\n            this.buttonRemove.Text = \"Remove\";\n            this.buttonRemove.UseVisualStyleBackColor = true;\n            this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click);\n            // \n            // PackageReferenceDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(584, 321);\n            this.Controls.Add(this.buttonRemove);\n            this.Controls.Add(this.buttonAdd);\n            this.Controls.Add(this.buttonOk);\n            this.Controls.Add(this.buttonCancel);\n            this.Controls.Add(this.listView1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;\n            this.Name = \"PackageReferenceDialog\";\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"PackageReference Editor\";\n            this.Load += new System.EventHandler(this.ReferenceDialog_Load);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.ListView listView1;\n        private System.Windows.Forms.Button buttonOk;\n        private System.Windows.Forms.Button buttonCancel;\n        private System.Windows.Forms.Button buttonAdd;\n        private System.Windows.Forms.Button buttonRemove;\n        private System.Windows.Forms.ColumnHeader columnHeader1;\n        private System.Windows.Forms.ColumnHeader columnHeader2;\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/PackageReferenceDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.IO;\nusing System.Windows.Forms.Design;\nusing System.Drawing.Design;\nusing System.Text.RegularExpressions;\n\nnamespace Content.Pipeline.Editor\n{\n    public partial class PackageReferenceDialog : Form\n    {\n        public List<Package> Lines;\n\n        public PackageReferenceDialog()\n        {\n            InitializeComponent();\n        }\n\n        private void ReferenceDialog_Load(object sender, EventArgs e)\n        {\n            foreach (Package item in this.Lines)\n            {\n                string version = (item.Version != String.Empty) ? item.Version : \"*\";\n                string[] itemValues = new string[] { item.Name, version };\n                listView1.Items.Add(new ListViewItem(itemValues));\n            }\n        }\n\n        private void buttonAdd_Click(object sender, EventArgs e)\n        {\n            Forms.PackageDialog packageDialog = new Forms.PackageDialog();\n\n            DialogResult res = packageDialog.ShowDialog(this);\n            if (res == DialogResult.OK)\n            {\n                Package package = default;\n                package.Name = packageDialog.tbName.Text.Trim();\n                package.Version = packageDialog.tbVersion.Text.Trim();\n\n                if (String.IsNullOrWhiteSpace(package.Name))\n                    return;\n\n                Match match = Regex.Match(package.Name,\n                     @\"(dotnet add package )?(?<Name>[^\\s]+)(\\s+--version)?(\\s+(?<VersionNumber>[^\\s]+))\");\n                if (match.Success)\n                {\n                    package.Name = match.Groups[\"Name\"].Value;\n                    if (package.Version == String.Empty && match.Groups[\"VersionNumber\"].Success)\n                        package.Version = match.Groups[\"VersionNumber\"].Value;\n                }\n\n                foreach (Package line in this.Lines)\n                {\n                    if (line.Name == package.Name)\n                        return;\n                }\n\n                this.Lines.Add(package);\n\n                string version = (package.Version != String.Empty) ? package.Version : \"*\";\n                string[] itemValues = new string[] { package.Name, version };\n                listView1.Items.Add(new ListViewItem(itemValues));\n            }\n        }\n\n        private void buttonRemove_Click(object sender, EventArgs e)\n        {\n            var indices = listView1.SelectedIndices;\n            for (int i = indices.Count - 1; i >= 0; i--)\n            {\n                int index = int.Parse(indices[i].ToString());\n                listView1.Items.RemoveAt(indices[i]);\n                this.Lines.RemoveAt(index);\n\n            }\n        }\n    }\n\n    /// <summary>\n    /// Custom editor for a the PackageReferences property of a PipelineProject.\n    /// </summary>    \n    public class PackageReferenceListEditor : UITypeEditor\n    {\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)\n        {\n            IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;\n            List<Package> lines = (List<Package>)value;\n            if (svc != null && lines != null)\n            {\n                using (var form = new PackageReferenceDialog())\n                {\n                    form.Lines = lines;\n                    if (svc.ShowDialog(form) == DialogResult.OK)\n                    {\n                        lines = form.Lines;\n                        MainView._controller.OnReferencesModified();\n                    }\n                }\n            }\n\n            return lines;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/PackageReferenceDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/PipelineProjectProxy.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing.Design;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Content.Pipeline.Editor\n{\n    /// <summary>\n    /// Wraps a PipelineProject object, defining its appearance within the windows specific IView (MainView).\n    /// </summary>\n    internal class PipelineProjectProxy : IProjectItem\n    {\n        private readonly PipelineProject _project;\n\n        [Category(\"Settings\")]\n        [DisplayName(\"Output Folder\")]\n        [Description(\"The folder where the final build content is placed.\")]\n        [Editor(typeof(FolderSelectEditor), typeof(UITypeEditor))]\n        public string OutputDir\n        {\n            get { return _project.OutputDir; }\n            set\n            {\n                _project.OutputDir = Util.GetRelativePath(value, _project.Location);\n            }\n        }\n\n        [Category(\"Settings\")]\n        [DisplayName(\"Intermediate Folder\")]\n        [Description(\"The folder where intermediate files are placed when building content.\")]\n        [Editor(typeof(FolderSelectEditor), typeof(UITypeEditor))]\n        public string IntermediateDir\n        {\n            get { return _project.IntermediateDir; }\n            set\n            {\n                _project.IntermediateDir = Util.GetRelativePath(value, _project.Location);\n            }\n        }\n\n        [Category(\"Settings\")]\n        [Editor(typeof(AssemblyReferenceListEditor), typeof(UITypeEditor))]\n        public List<string> References\n        {\n            get { return _project.References; }\n            set { _project.References = value; }\n        }\n        [Category(\"Settings\")]\n        [Editor(typeof(PackageReferenceListEditor), typeof(UITypeEditor))]\n        public List<Package> PackageReferences\n        {\n            get { return _project.PackageReferences; }\n            set { _project.PackageReferences = value; }\n        }\n\n        [Category(\"Settings\")]\n        [Description(\"The platform to target when building content.\")]\n        [TypeConverter(typeof(SortedEnumTypeConverter))]\n        public TargetPlatform Platform\n        {\n            get { return _project.Platform; }\n            set { _project.Platform = value; }\n        }\n\n        [Category(\"Settings\")]\n        [Description(\"The graphics profile to target when building content.\")]\n        public GraphicsProfile Profile\n        {\n            get { return _project.Profile; }\n            set { _project.Profile = value; }\n        }\n\n        [Category(\"Settings\")]\n        [Description(\"The configuration to target when building content.\")]\n        public string Config\n        {\n            get { return _project.Config; }\n            set { _project.Config = value; }\n        }\n\n        [Category(\"Settings\")]\n        [DisplayName(\"Compress\")]\n        [Description(\"Content files can be compressed for smaller file sizes.\")]\n        public bool Compress\n        {\n            get { return _project.Compress; }\n            set { _project.Compress = value; }\n        }\n\n        [Category(\"Settings\")]\n        [DisplayName(\"Compression\")]\n        [Description(\"The compression method.\")]\n        public CompressionMethod Compression\n        {\n            get { return _project.Compression; }\n            set { _project.Compression = value; }\n        }\n\n        [Category(\"Statistics\")]\n        [DisplayName(\"Total Items\")]\n        [Description(\"The total amount of content items in the project.\")]\n        public int TotalItems\n        {\n            get { return _project.ContentItems.Count; }\n        }\n\n        #region IPipelineItem\n\n        [Browsable(false)]\n        public string OriginalPath\n        {\n            get { return _project.OriginalPath; }\n        }\n\n        [Category(\"Common\")]\n        [Description(\"The name of this project.\")]\n        public string Name\n        {\n            get { return _project.Name; }\n        }\n\n        [Category(\"Common\")]\n        [Description(\"The folder where this project file is located.\")]\n        public string Location\n        {\n            get { return _project.Location; }\n        }\n\n        [Browsable(false)]\n        public string Icon\n        {\n            get { return _project.Icon; }\n            set { _project.Icon = value; }\n        }\n\n        [Browsable(false)]\n        public bool Exists\n        {\n            get { return _project.Exists; }\n            set { _project.Exists = value; }\n        }\n\n        #endregion\n\n        public PipelineProjectProxy(PipelineProject project)\n        {\n            _project = project;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/ReferenceDialog.Designer.cs",
    "content": "﻿namespace Content.Pipeline.Editor\n{\n    partial class ReferenceDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.buttonOk = new System.Windows.Forms.Button();\n            this.buttonCancel = new System.Windows.Forms.Button();\n            this.buttonAdd = new System.Windows.Forms.Button();\n            this.buttonRemove = new System.Windows.Forms.Button();\n            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.SuspendLayout();\n            // \n            // listView1\n            // \n            this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.columnHeader1,\n            this.columnHeader2});\n            this.listView1.Location = new System.Drawing.Point(12, 12);\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(473, 300);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            // \n            // buttonOk\n            // \n            this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK;\n            this.buttonOk.Location = new System.Drawing.Point(498, 258);\n            this.buttonOk.Name = \"buttonOk\";\n            this.buttonOk.Size = new System.Drawing.Size(75, 23);\n            this.buttonOk.TabIndex = 1;\n            this.buttonOk.Text = \"Ok\";\n            this.buttonOk.UseVisualStyleBackColor = true;\n            // \n            // buttonCancel\n            // \n            this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.buttonCancel.Location = new System.Drawing.Point(498, 287);\n            this.buttonCancel.Name = \"buttonCancel\";\n            this.buttonCancel.Size = new System.Drawing.Size(75, 23);\n            this.buttonCancel.TabIndex = 2;\n            this.buttonCancel.Text = \"Cancel\";\n            this.buttonCancel.UseVisualStyleBackColor = true;\n            // \n            // buttonAdd\n            // \n            this.buttonAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\n            this.buttonAdd.Location = new System.Drawing.Point(498, 12);\n            this.buttonAdd.Name = \"buttonAdd\";\n            this.buttonAdd.Size = new System.Drawing.Size(75, 23);\n            this.buttonAdd.TabIndex = 3;\n            this.buttonAdd.Text = \"Add\";\n            this.buttonAdd.UseVisualStyleBackColor = true;\n            this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click);\n            // \n            // buttonRemove\n            // \n            this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\n            this.buttonRemove.Location = new System.Drawing.Point(498, 41);\n            this.buttonRemove.Name = \"buttonRemove\";\n            this.buttonRemove.Size = new System.Drawing.Size(75, 23);\n            this.buttonRemove.TabIndex = 4;\n            this.buttonRemove.Text = \"Remove\";\n            this.buttonRemove.UseVisualStyleBackColor = true;\n            this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click);\n            // \n            // columnHeader1\n            // \n            this.columnHeader1.Text = \"Name\";\n            this.columnHeader1.Width = 250;\n            // \n            // columnHeader2\n            // \n            this.columnHeader2.Text = \"Location\";\n            this.columnHeader2.Width = 350;\n            // \n            // ReferenceDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(584, 321);\n            this.Controls.Add(this.buttonRemove);\n            this.Controls.Add(this.buttonAdd);\n            this.Controls.Add(this.buttonOk);\n            this.Controls.Add(this.buttonCancel);\n            this.Controls.Add(this.listView1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;\n            this.Name = \"ReferenceDialog\";\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Reference Editor\";\n            this.Load += new System.EventHandler(this.ReferenceDialog_Load);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.ListView listView1;\n        private System.Windows.Forms.Button buttonOk;\n        private System.Windows.Forms.Button buttonCancel;\n        private System.Windows.Forms.Button buttonAdd;\n        private System.Windows.Forms.Button buttonRemove;\n        private System.Windows.Forms.ColumnHeader columnHeader1;\n        private System.Windows.Forms.ColumnHeader columnHeader2;\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/ReferenceDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.IO;\nusing System.Windows.Forms.Design;\nusing System.Drawing.Design;\n\nnamespace Content.Pipeline.Editor\n{\n    public partial class ReferenceDialog : Form\n    {\n        public List<string> Lines;\n\n        public ReferenceDialog()\n        {\n            InitializeComponent();\n        }\n\n        private void ReferenceDialog_Load(object sender, EventArgs e)\n        {\n            foreach (string item in this.Lines)\n            {\n                string[] itemValues = new string[] { Path.GetFileName(item), item };\n                listView1.Items.Add(new ListViewItem(itemValues));\n            }\n        }\n\n        private void buttonAdd_Click(object sender, EventArgs e)\n        {\n            OpenFileDialog dialog = new OpenFileDialog();\n            dialog.Filter = \"Dll Files (.dll)|*.dll|All Files (*.*)|*.*\";\n            dialog.Multiselect = true;\n\n            if (dialog.ShowDialog() == DialogResult.OK)\n            {\n                string pl = ((PipelineController)MainView._controller).ProjectLocation;\n                if (!pl.EndsWith(Path.DirectorySeparatorChar.ToString()))\n                    pl += Path.DirectorySeparatorChar;\n\n                Uri folderUri = new Uri(pl);\n\n                foreach(string filename in dialog.FileNames)\n                {\n                    Uri pathUri = new Uri(filename);\n                    string fl = Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', System.IO.Path.DirectorySeparatorChar));\n\n                    if (!this.Lines.Contains(fl))\n                    {\n                        this.Lines.Add(fl);\n                        string[] itemValues = new string[] { Path.GetFileName(fl), fl };\n                        listView1.Items.Add(new ListViewItem(itemValues));\n                    }\n                }\n            }\n        }\n\n        private void buttonRemove_Click(object sender, EventArgs e)\n        {\n            var indices = listView1.SelectedIndices;\n            for (int i = indices.Count - 1; i >= 0; i--)\n            {\n                int index = int.Parse(indices[i].ToString());\n                listView1.Items.RemoveAt(indices[i]);\n                this.Lines.RemoveAt(index);\n\n            }\n        }\n    }\n\n    /// <summary>\n    /// Custom editor for a the References property of a PipelineProject.\n    /// </summary>    \n    public class AssemblyReferenceListEditor : UITypeEditor\n    {\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)\n        {\n            IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;\n            List<string> lines = (List<string>)value;\n            if (svc != null && lines != null)\n            {\n                using (var form = new ReferenceDialog())\n                {\n                    form.Lines = lines;\n                    if (svc.ShowDialog(form) == DialogResult.OK)\n                    {\n                        lines = form.Lines;\n                        MainView._controller.OnReferencesModified();\n                    }\n                }\n            }\n\n            return lines;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/ReferenceDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/SortedEnumTypeConverter.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Content.Pipeline.Editor\n{\n    class SortedEnumTypeConverter : EnumConverter\n    {\n        private readonly Type _enumType;\n        private readonly StandardValuesCollection _values;\n\n        public SortedEnumTypeConverter(Type type) : \n            base(type)\n        {\n            _enumType = this.EnumType;\n            if (_enumType.IsGenericType\n            &&  _enumType.GetGenericTypeDefinition() == typeof(Nullable<>))\n                _enumType = Nullable.GetUnderlyingType(_enumType);\n\n            string[] values = Enum.GetNames(_enumType);\n            Array.Sort(values);\n            _values = new StandardValuesCollection(values);\n        }\n\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return _values;\n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            if (sourceType == typeof(string)\n            ||  sourceType == _enumType)\n                return true;\n\n            return base.CanConvertFrom(context, sourceType);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            if (value != null)\n            {\n                if (value.GetType() == _enumType)\n                    return value;\n\n                if (value is string)\n                    return Enum.Parse(_enumType, value as string, true);\n            }\n\n            return base.ConvertFrom(context, culture, value);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string))\n            {\n                if (value != null)\n                {\n                    if (value is string)\n                        return value;\n\n                    return Enum.GetName(_enumType, value);\n                }\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/TextEditDialog.Designer.cs",
    "content": "﻿namespace Content.Pipeline.Editor\n{\n    partial class TextEditDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.textBox1 = new System.Windows.Forms.TextBox();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.button1 = new System.Windows.Forms.Button();\n            this.button2 = new System.Windows.Forms.Button();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(35, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"label1\";\n            // \n            // textBox1\n            // \n            this.textBox1.Location = new System.Drawing.Point(12, 37);\n            this.textBox1.Name = \"textBox1\";\n            this.textBox1.Size = new System.Drawing.Size(362, 20);\n            this.textBox1.TabIndex = 1;\n            this.textBox1.KeyUp += this.TextBox1_KeyUp;\n            // \n            // panel1\n            // \n            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel1.Controls.Add(this.button2);\n            this.panel1.Controls.Add(this.button1);\n            this.panel1.Location = new System.Drawing.Point(1, 68);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(385, 45);\n            this.panel1.TabIndex = 2;\n            // \n            // button1\n            // \n            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.button1.Location = new System.Drawing.Point(298, 10);\n            this.button1.Name = \"button1\";\n            this.button1.Size = new System.Drawing.Size(75, 23);\n            this.button1.TabIndex = 0;\n            this.button1.Text = \"Cancel\";\n            this.button1.UseVisualStyleBackColor = true;\n            this.button1.Click += new System.EventHandler(this.button1_Click);\n            // \n            // button2\n            // \n            this.button2.DialogResult = System.Windows.Forms.DialogResult.OK;\n            this.button2.Location = new System.Drawing.Point(217, 10);\n            this.button2.Name = \"button2\";\n            this.button2.Size = new System.Drawing.Size(75, 23);\n            this.button2.TabIndex = 3;\n            this.button2.Text = \"OK\";\n            this.button2.UseVisualStyleBackColor = true;\n            this.button2.Click += new System.EventHandler(this.button2_Click);\n            // \n            // TextEditDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(386, 113);\n            this.Controls.Add(this.panel1);\n            this.Controls.Add(this.textBox1);\n            this.Controls.Add(this.label1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"TextEditDialog\";\n            this.Text = \"TextEditDialog\";\n            this.panel1.ResumeLayout(false);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.TextBox textBox1;\n        private System.Windows.Forms.Panel panel1;\n        private System.Windows.Forms.Button button1;\n        private System.Windows.Forms.Button button2;\n    }\n}"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/TextEditDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    public partial class TextEditDialog : Form\n    {\n        public string text = \"\";\n\n        public TextEditDialog(string title, string label, string text)\n        {\n            InitializeComponent();\n\n            this.Text = title;\n            label1.Text = label;\n            textBox1.Text = text;\n        }\n\n        private void TextBox1_KeyUp (object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Enter && button2.Enabled)\n            {\n                this.DialogResult = button2.DialogResult;\n                button2_Click(sender, e);\n            }\n        }\n\n        private void button2_Click(object sender, EventArgs e)\n        {\n            text = textBox1.Text;\n            this.Close();\n        }\n\n        private void button1_Click(object sender, EventArgs e)\n        {\n            this.Close();\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/TextEditDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/TreeViewExtensions.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    static class TreeViewExtensions\n    {\n        public static List<TreeNode> AllNodes(this TreeView tree)\n        {\n            var list = new List<TreeNode>();\n            AddTreeNodesRecursive(tree.Nodes, list);\n            return list;\n        }\n\n        public static void AddTreeNodesRecursive(TreeNodeCollection nodeCollection, List<TreeNode> results)\n        {\n            foreach (var i in nodeCollection)\n            {\n                var node = i as TreeNode;\n                results.Add(node);\n\n                AddTreeNodesRecursive(node.Nodes, results);\n            }\n        }\n\n        public static IEnumerable<ContentItem> GetSelectedContentItems(this MultiSelectTreeview tree)\n        {\n            var found = tree.SelectedNodesRecursive;\n\n            foreach (var node in found)\n            {\n                var item = node.Tag as ContentItem;\n                if (item != null)\n                    yield return item;\n            }\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Forms/TreeViewNodeSorter.cs",
    "content": "﻿// Copyright (C)2026 Nick Kastellanos\n\nusing System.Collections;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    internal class TreeViewNodeSorter : IComparer\n    {\n        int IComparer.Compare(object x, object y)\n        {\n            TreeNode a = (TreeNode)x;\n            TreeNode b = (TreeNode)y;\n\n            if (a.Tag != null && b.Tag != null)\n            {\n                if ((a.Tag is FolderItem) && !(b.Tag is FolderItem))\n                    return -1;\n                if (!(a.Tag is FolderItem) && (b.Tag is FolderItem))\n                    return +1;\n            }\n\n            return a.Text.CompareTo(b.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Program.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.Windows.Forms;\n\nnamespace Content.Pipeline.Editor\n{\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main(string [] args)\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n\n            PipelineSettingsMgr.Current.Load();\n\n\t\t\tvar view = new MainView();\n            if (args != null && args.Length > 0)\n            {\n                var projectFilePath = string.Join(\" \", args);\n                view.OpenProjectPath = projectFilePath;\n            }\n\n            var controller = new PipelineController(view);\n            Application.Run(view);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Properties/AssemblyInfo.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"KNI Pipeline Editor\")]\n[assembly: AssemblyDescription(\"Content pipeline tool for KNI framework.\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"KNI Pipeline Tool\")]\n[assembly: AssemblyCopyright(\"Copyright ©2025 Nick Kastellanos, Copyright © MonoGameTeam 2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"8b7e176c-bcab-4258-b4c4-231b1c4e7bfb\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"4.2.9001.0\")]\n[assembly: AssemblyFileVersion(\"4.2.9001.0\")]\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Content.Pipeline.Editor.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"15.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Content.Pipeline.Editor.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Content.Pipeline.Editor.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"15.9.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/Effect.fx",
    "content": "﻿\nmatrix WorldViewProjection;\n\nstruct VertexShaderInput\n{\n\tfloat4 Position : POSITION0;\n\tfloat4 Color : COLOR0;\n};\n\nstruct VertexShaderOutput\n{\n\tfloat4 Position : SV_POSITION;\n\tfloat4 Color : COLOR0;\n};\n\nVertexShaderOutput MainVS(in VertexShaderInput input)\n{\n\tVertexShaderOutput output = (VertexShaderOutput)0;\n\n\toutput.Position = mul(input.Position, WorldViewProjection);\n\toutput.Color = input.Color;\n\n\treturn output;\n}\n\nfloat4 MainPS(VertexShaderOutput input) : COLOR\n{\n\treturn input.Color;\n}\n\ntechnique BasicColorDrawing\n{\n\tpass pass0\n\t{\n\t\tVertexShader = compile vs_4_0_level_9_1 MainVS();\n\t\tPixelShader = compile ps_4_0_level_9_1 MainPS();\n\t}\n};"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/Effect.template",
    "content": "﻿Effect\nEffect.png\nEffectImporter\nEffectProcessor\nEffect.fx"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/LocalizedSpriteFont.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:LocalizedFontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Arial</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>12</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>0</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    For localized fonts you can leave this empty as the character range will be picked up\n    from the Resource Files.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#32;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n    <!--\n    ResourceFiles control the characters which will be in the font. It does this\n    by scanning the text in each of the resource files and adding those specific\n    characters to the font. \n    -->\n    <ResourceFiles>\n        <!-- <Resx>Strings.resx</Resx> -->\n    </ResourceFiles>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/LocalizedSpriteFont.template",
    "content": "﻿LocalizedSpriteFont Description\nFont.png\nFontDescriptionImporter\nLocalizedFontProcessor\nLocalizedSpriteFont.spritefont"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/SpriteEffect.fx",
    "content": "﻿\nTexture2D SpriteTexture : register(t0);\nsampler2D SpriteTextureSampler : register(s0) = sampler_state\n{\n    Texture = <SpriteTexture>;\n};\n\nstruct VertexShaderOutput\n{\n\tfloat4 Position : SV_POSITION;\n\tfloat4 Color : COLOR0;\n\tfloat2 TextureCoordinates : TEXCOORD0;\n};\n\nfloat4 MainPS(VertexShaderOutput input) : COLOR\n{\n\treturn tex2D(SpriteTextureSampler, input.TextureCoordinates) * input.Color;\n}\n\ntechnique SpriteDrawing\n{\n\tpass pass0\n\t{\n\t\tPixelShader = compile ps_4_0_level_9_1 MainPS();\n\t}\n};"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/SpriteEffect.template",
    "content": "﻿Sprite Effect\nEffect.png\nEffectImporter\nEffectProcessor\nSpriteEffect.fx"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/SpriteFont.spritefont",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file contains an xml description of a font, and will be read by the XNA\nFramework Content Pipeline. Follow the comments to customize the appearance\nof the font in your game, and to change the characters which are available to draw\nwith.\n-->\n<XnaContent xmlns:Graphics=\"Microsoft.Xna.Framework.Content.Pipeline.Graphics\">\n  <Asset Type=\"Graphics:FontDescription\">\n\n    <!--\n    Modify this string to change the font that will be imported.\n    -->\n    <FontName>Arial</FontName>\n\n    <!--\n    Size is a float value, measured in points. Modify this value to change\n    the size of the font.\n    -->\n    <Size>12</Size>\n\n    <!--\n    Spacing is a float value, measured in pixels. Modify this value to change\n    the amount of spacing in between characters.\n    -->\n    <Spacing>0</Spacing>\n\n    <!--\n    UseKerning controls the layout of the font. If this value is true, kerning information\n    will be used when placing characters.\n    -->\n    <UseKerning>true</UseKerning>\n\n    <!--\n    Style controls the style of the font. Valid entries are \"Regular\", \"Bold\", \"Italic\",\n    and \"Bold, Italic\", and are case sensitive.\n    -->\n    <Style>Regular</Style>\n\n    <!--\n    If you uncomment this line, the default character will be substituted if you draw\n    or measure text that contains characters which were not included in the font.\n    -->\n    <!-- <DefaultCharacter>�</DefaultCharacter> -->\n\n    <!--\n    CharacterRegions control what letters are available in the font. Every\n    character from Start to End will be built and made available for drawing. The\n    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin\n    character set. The characters are ordered according to the Unicode standard.\n    See the documentation for more information.\n    -->\n    <CharacterRegions>\n      <CharacterRegion>\n        <Start>&#32;</Start>\n        <End>&#126;</End>\n      </CharacterRegion>\n    </CharacterRegions>\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/SpriteFont.template",
    "content": "﻿SpriteFont Description\nFont.png\nFontDescriptionImporter\nFontDescriptionProcessor\nSpriteFont.spritefont"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/XmlContent.template",
    "content": "﻿Xml Content\nXml.png\nXmlImporter\nPassThroughProcessor\nXmlContent.xml"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/Templates/XmlContent.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<XnaContent xmlns:ns=\"Microsoft.Xna.Framework\">\n  <Asset Type=\"Object\">\n  </Asset>\n</XnaContent>\n"
  },
  {
    "path": "Tools/Content.Pipeline.Editor.WinForms/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MyApplication.app\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->\n  <!--\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n    </windowsSettings>\n  </application>\n  -->\n\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <!--\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity\n          type=\"win32\"\n          name=\"Microsoft.Windows.Common-Controls\"\n          version=\"6.0.0.0\"\n          processorArchitecture=\"*\"\n          publicKeyToken=\"6595b64144ccf1df\"\n          language=\"*\"\n        />\n    </dependentAssembly>\n  </dependency>\n  -->\n\n</assembly>\n"
  },
  {
    "path": "Tools/Directory.Build.props",
    "content": "<Project>\n  <Import Project=\"..\\kniPackage.props\" />\n</Project>\n\n"
  },
  {
    "path": "Tools/EffectCompiler/BuildLogger.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\n\nnamespace EffectCompiler\n{\n    internal class BuildLogger : ContentBuildLogger\n    {\n        public override void LogImportantMessage(string message, params object[] messageArgs)\n        {\n            Console.WriteLine(message, messageArgs);\n        }\n\n        public override void LogMessage(string message, params object[] messageArgs)\n        {\n            Console.WriteLine(message, messageArgs);\n        }\n\n        public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs)\n        {\n            var warning = string.Empty;\n            if (contentIdentity != null && !string.IsNullOrEmpty(contentIdentity.SourceFilename))\n            {\n                warning = contentIdentity.SourceFilename;\n                if (!string.IsNullOrEmpty(contentIdentity.FragmentIdentifier))\n                    warning += \"(\" + contentIdentity.FragmentIdentifier + \")\";\n                warning += \": \";\n            }\n\n            if (messageArgs != null && messageArgs.Length != 0)\n                warning += string.Format(message, messageArgs);\n            else if (!string.IsNullOrEmpty(message))\n                warning += message;\n\n            Console.WriteLine(warning);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/EffectCompiler/CommandLineParser.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.ComponentModel;\n\n\nnamespace EffectCompiler\n{\n    // Reusable, reflection based helper for parsing commandline options.\n    //\n    // From Shawn Hargreaves Blog:\n    // http://blogs.msdn.com/b/shawnhar/archive/2012/04/20/a-reusable-reflection-based-command-line-parser.aspx\n    //\n    public class CommandLineParser\n    {\n        object _optionsObject;\n\n        Queue<FieldInfo> _requiredOptions = new Queue<FieldInfo>();\n        Dictionary<string, FieldInfo> _optionalOptions = new Dictionary<string, FieldInfo>();\n\n        List<string> _requiredUsageHelp = new List<string>();\n        List<string> _optionalUsageHelp = new List<string>();\n\n\n        // Constructor.\n        public CommandLineParser(object optionsObject)\n        {\n            this._optionsObject = optionsObject;\n\n            // Reflect to find what commandline options are available.\n            foreach (var field in optionsObject.GetType().GetFields())\n            {\n                String description;\n                var fieldName = GetOptionNameAndDescription(field, out description);\n\n                if (GetAttribute<RequiredAttribute>(field) != null)\n                {\n                    // Record a required option.\n                    _requiredOptions.Enqueue(field);\n\n                    _requiredUsageHelp.Add(string.Format(\"<{0}> {1}\", fieldName, description));\n                }\n                else\n                {\n                    // Record an optional option.\n                    _optionalOptions.Add(fieldName.ToLowerInvariant(), field);\n\n                    if (field.FieldType == typeof(bool))\n                        _optionalUsageHelp.Add(string.Format(\"/{0} {1}\", fieldName, description));\n                    else\n                        _optionalUsageHelp.Add(string.Format(\"/{0}:value {1}\", fieldName, description));\n                }\n            }\n        }\n\n\n        public bool ParseCommandLine(string[] args)\n        {\n            // Parse each argument in turn.\n            foreach (var arg in args)\n            {\n                if (!ParseArgument(arg.Trim()))\n                    return false;\n            }\n\n            // Make sure we got all the required options.\n            var missingRequiredOption = _requiredOptions.FirstOrDefault(field => !IsList(field) || GetList(field).Count == 0);\n\n            if (missingRequiredOption != null)\n            {\n                ShowError(\"Missing argument '{0}'\", GetOptionName(missingRequiredOption));\n                return false;\n            }\n\n            return true;\n        }\n\n\n        bool ParseArgument(string arg)\n        {\n            if (_requiredOptions.Count > 0)\n            {\n                // Parse the next non escaped argument.\n                var field = _requiredOptions.Peek();\n\n                if (!IsList(field))\n                    _requiredOptions.Dequeue();\n\n                return SetOption(field, arg);\n            }\n            else if (arg.StartsWith(\"/\"))\n            {\n                // After the first escaped argument we can no\n                // longer read non-escaped arguments.\n                _requiredOptions.Clear();\n\n                // Parse an optional argument.\n                char[] separators = { ':' };\n\n                var split = arg.Substring(1).Split(separators, 2, StringSplitOptions.None);\n\n                var name = split[0];\n                var value = (split.Length > 1) ? split[1] : \"true\";\n\n                FieldInfo field;\n\n                if (!_optionalOptions.TryGetValue(name.ToLowerInvariant(), out field))\n                {\n                    ShowError(\"Unknown option '{0}'\", name);\n                    return false;\n                }\n\n                return SetOption(field, value);\n            }\n            \n            ShowError(\"Too many arguments\");\n            return false;\n        }\n\n\n        bool SetOption(FieldInfo field, string value)\n        {\n            try\n            {\n                if (IsList(field))\n                {\n                    // Append this value to a list of options.\n                    GetList(field).Add(ChangeType(value, ListElementType(field)));\n                }\n                else\n                {\n                    // Set the value of a single option.\n                    field.SetValue(_optionsObject, ChangeType(value, field.FieldType));\n                }\n\n                return true;\n            }\n            catch\n            {\n                ShowError(\"Invalid value '{0}' for option '{1}'\", value, GetOptionName(field));\n                return false;\n            }\n        }\n\n\n        static object ChangeType(string value, Type type)\n        {\n            var converter = TypeDescriptor.GetConverter(type);\n\n            return converter.ConvertFromInvariantString(value);\n        }\n\n\n        static bool IsList(FieldInfo field)\n        {\n            return typeof(IList).IsAssignableFrom(field.FieldType);\n        }\n\n\n        IList GetList(FieldInfo field)\n        {\n            return (IList)field.GetValue(_optionsObject);\n        }\n\n\n        static Type ListElementType(FieldInfo field)\n        {\n            var interfaces = from i in field.FieldType.GetInterfaces()\n                             where i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable<>)\n                             select i;\n\n            return interfaces.First().GetGenericArguments()[0];\n        }\n\n\n        static string GetOptionName(FieldInfo field)\n        {\n            var nameAttribute = GetAttribute<NameAttribute>(field);\n            if (nameAttribute != null)\n                return nameAttribute.Name;\n            else\n                return field.Name;\n        }\n\n        static string GetOptionNameAndDescription(FieldInfo field, out String description)\n        {\n            var nameAttribute = GetAttribute<NameAttribute>(field);\n\n            if (nameAttribute != null)\n            {\n                description = nameAttribute.Description;\n                return nameAttribute.Name;\n            }\n            else\n            {\n                description = null;\n                return field.Name;\n            }\n        }\n\n        public string Title { get; set; }\n\n        void ShowError(string message, params object[] args)\n        {\n            var name = Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().ProcessName);\n\n            if (!string.IsNullOrEmpty(Title))\n            {\n                Console.Error.WriteLine(Title);\n                Console.Error.WriteLine();\n            }\n            Console.Error.WriteLine(message, args);\n            Console.Error.WriteLine();\n            Console.Error.WriteLine(\"Usage: {0} {1}\", name, string.Join(\" \", _requiredUsageHelp));\n\n            if (_optionalUsageHelp.Count > 0)\n            {\n                Console.Error.WriteLine();\n                Console.Error.WriteLine(\"Options:\");\n\n                foreach (string optional in _optionalUsageHelp)\n                    Console.Error.WriteLine(\"    {0}\", optional);\n            }\n        }\n\n\n        static T GetAttribute<T>(ICustomAttributeProvider provider) where T : Attribute\n        {\n            return provider.GetCustomAttributes(typeof(T), false).OfType<T>().FirstOrDefault();\n        }\n\n\n        // Used on optionsObject fields to indicate which options are required.\n        [AttributeUsage(AttributeTargets.Field)]\n        public sealed class RequiredAttribute : Attribute\n        {\n        }\n\n        // Used on an optionsObject field to rename the corresponding commandline option.\n        [AttributeUsage(AttributeTargets.Field)]\n        public class NameAttribute : Attribute\n        {\n            public NameAttribute(string name)\n            {\n                Name = name;\n                Description = null;\n            }\n\n            public NameAttribute(string name, string description)\n            {\n                Name = name;\n                Description = description;\n            }\n\n            public string Name { get; private set; }\n            public string Description { get; protected set; }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tools/EffectCompiler/EffectCompiler.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>\n    <TargetFrameworks>net48;net8.0</TargetFrameworks>\n    <ProjectGuid>{46474D32-2E58-6957-6E64-6F7773324D47}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>EffectCompiler</RootNamespace>\n    <AssemblyName>KNIFXC</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS1591;CS1574;CS0419</NoWarn>\n    <GenerateDocumentationFile>False</GenerateDocumentationFile>\n    <OutputPath>bin\\Windows\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\Windows\\$(Platform)\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>$(DefineConstants);WINDOWSDX</DefineConstants>\n    <LangVersion>7.3</LangVersion>\n    <ApplicationIcon>App.ico</ApplicationIcon>\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Options.cs\" />\n    <Compile Include=\"CommandLineParser.cs\" />\n    <Compile Include=\"BuildLogger.cs\" />\n    <Compile Include=\"ImporterContext.cs\" />\n    <Compile Include=\"ProcessorContext.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"App.ico\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4b8d3f73-bbd2-4057-b86b-8b73b957dc0f}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509f44-3566-4b79-bb47-c7c6e2aa2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\">\n      <Project>{7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\">\n      <Project>{476ee43e-e93b-4019-b8b7-ad52c4216456}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics.MojoProcessor</Name>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Tools/EffectCompiler/ImporterContext.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nnamespace EffectCompiler\n{\n    class ImporterContext : ContentImporterContext\n    {\n        ContentBuildLogger _logger;\n\n        public ImporterContext(ContentBuildLogger logger) : base()\n        {\n            _logger = logger;\n        }\n\n        public override string IntermediateDirectory { get { throw new NotImplementedException(); } }\n\n        public override string OutputDirectory { get { throw new NotImplementedException(); } }\n\n        public override ContentBuildLogger Logger { get { return _logger; } }\n\n        public override void AddDependency(string filename)\n        {\n            \n        }\n    }\n}\n"
  },
  {
    "path": "Tools/EffectCompiler/Options.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace EffectCompiler\n{\n\n    public class Options\n    {\n        [CommandLineParser.Required]\n        public string SourceFile;\n\n        [CommandLineParser.Required]\n        public string OutputFile = string.Empty;\n\n        [CommandLineParser.Name(\"Platform\", \"\\t - Specify the shader target Platform. Allowed values: (Windows,WindowsStoreApp,DesktopGL,Android,iOS,BlazorGL).\")]\n        public TargetPlatform Platform = (TargetPlatform)(-1);\n\n        [CommandLineParser.Name(\"Backend\", \"\\t - Specify the shader target Backend. Allowed values: (DirectX11,OpenGL).\")]\n        public List<GraphicsBackend> Backend = new List<GraphicsBackend>();\n\n        [CommandLineParser.Name(\"Profile\", \"\\t - Specify the shader target GraphicsProfile. Allowed values: (Reach, HiDef)\")]\n        public GraphicsProfile Profile = GraphicsProfile.Reach;\n\n        [CommandLineParser.Name(\"Config\", \"\\t - BuildConfiguration. Set to 'Debug' to include extra debug information in the compiled effect.\")]\n        public string Config;\n\n        [CommandLineParser.Name(\"Defines\", \"\\t - Semicolon-delimited define assignments\")]\n        public string Defines;\n    }\n}\n"
  },
  {
    "path": "Tools/EffectCompiler/ProcessorContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace EffectCompiler\n{\n    internal class ProcessorContext : ContentProcessorContext\n    {\n        ContentBuildLogger _logger;\n        OpaqueDataDictionary _parameters = new OpaqueDataDictionary();\n        TargetPlatform _targetPlatform;\n        GraphicsProfile _targetProfile;\n        string _buildConfiguration;\n        string _outputFilename;\n\n        public ProcessorContext(ContentBuildLogger logger, TargetPlatform targetPlatform, GraphicsProfile targetProfile, string outputFilename, string config) : base()\n        {\n            _logger = logger;\n            _targetPlatform = targetPlatform;\n            _targetProfile = targetProfile;\n            _outputFilename = outputFilename;\n            _buildConfiguration = config;\n        }\n\n        public override string IntermediateDirectory { get { throw new NotImplementedException(); } }\n\n        public override string OutputDirectory { get { throw new NotImplementedException(); } }\n\n        public override string BuildConfiguration { get { return _buildConfiguration; } }\n\n        public override ContentBuildLogger Logger { get { return _logger; } }\n\n\n        public override string OutputFilename { get { return _outputFilename; } }\n\n        public override OpaqueDataDictionary Parameters { get { return _parameters; } }\n\n        public override TargetPlatform TargetPlatform { get { return _targetPlatform; } }\n\n        public override GraphicsProfile TargetProfile { get { return _targetProfile; } }\n\n        public override void AddDependency(string filename)\n        {\n            \n        }\n\n        public override void AddOutputFile(string filename)\n        {\n            throw new System.NotImplementedException();\n        }\n\n        public override TOutput BuildAndLoadAsset<TInput, TOutput>(ExternalReference<TInput> sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName)\n        {\n            throw new System.NotImplementedException();\n        }\n\n        public override ExternalReference<TOutput> BuildAsset<TInput, TOutput>(ExternalReference<TInput> sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName, string assetName)\n        {\n            throw new System.NotImplementedException();\n        }\n\n        public override TOutput Convert<TInput, TOutput>(TInput input, string processorName, OpaqueDataDictionary processorParameters)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/EffectCompiler/Program.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace EffectCompiler\n{\n    public static class Program\n    {\n        public static int Main(string[] args)\n        {\n            Options options = new Options();\n            CommandLineParser parser = new CommandLineParser(options);\n            parser.Title = \"knifxc - The KNI Effect compiler.\";\n\n            if (!parser.ParseCommandLine(args))\n                return 1;\n            \n            // Validate the input file exits.\n            if (!File.Exists(options.SourceFile))\n            {\n                Console.Error.WriteLine(\"The input file '{0}' was not found!\", options.SourceFile);\n                return 1;\n            }\n            \n            try\n            {\n                ContentBuildLogger logger = new BuildLogger();\n\n                ContentImporter<EffectContent> importer = new EffectImporter();\n                ContentImporterContext importerContext = new ImporterContext(logger);\n                EffectContent content = importer.Import(options.SourceFile, importerContext);\n\n                EffectProcessor processor = new EffectProcessor();\n                processor.Defines = options.Defines;\n\n                if (options.Platform == (TargetPlatform)(-1))\n                {\n                    if (options.Backend.Count == 0)\n                        throw new InvalidOperationException(\"Missing argument 'Platform' or 'Backend'\");\n                    else\n                        options.Platform = TargetPlatform.Windows;\n                }\n\n                ContentProcessorContext processorContext = new ProcessorContext(logger, options.Platform, options.Profile, options.OutputFile, options.Config);\n                if (options.Backend.Count > 0)\n                    processorContext.Parameters.Add(\"_GraphicsBackendList\", options.Backend);\n\n                CompiledEffectContent output = processor.Process(content, processorContext);\n\n                byte[] effectCode = output.GetEffectCode();\n                File.WriteAllBytes(options.OutputFile, effectCode);\n            }\n            catch(Exception ex)\n            {\n                Console.WriteLine(ex.Message);\n                return 1;\n            }\n            \n            // We finished succesfully.\n            Console.WriteLine(\"Compiled '{0}' to '{1}'.\", options.SourceFile, options.OutputFile);\n            return 0;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tools/EffectCompiler/Properties/AssemblyInfo.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"KNIFXC\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"KNIFXC\")]\n[assembly: AssemblyCopyright(\"Copyright (C)2022 The MonoGame Team, ©2022-2024 Nick Kastellanos\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Mark the assembly as CLS compliant so it can be safely used in other .NET languages\n[assembly: CLSCompliant(true)]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"91c6a368-4017-4be4-babb-39cca4870312\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"4.2.9001.0\")]\n[assembly: AssemblyFileVersion(\"4.2.9001.0\")]\n"
  },
  {
    "path": "Tools/EffectCompiler/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"EffectCompiler\": {\n      \"commandName\": \"Project\",\n      \"commandLineArgs\": \"AlphaTestEffect.fx ..\\\\Resources\\\\AlphaTestEffect.fxo /Backend:DirectX11 /Backend:OpenGL /Backend:GLES\",\n      \"workingDirectory\": \"..\\\\..\\\\Platforms\\\\Graphics\\\\Effect\\\\Shaders\"\n    }\n  }\n}"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/AssertListener.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    internal class AssertListener : DefaultTraceListener\n    {\n        public override void Fail(string message)\n        {\n            if (message == null)\n                message = \"\";\n\n            throw new Exception(\"Debug assertion failed: \" + message);\n        }\n\n        public override void Fail(string message, string detailMessage)\n        {\n            if (message == null)\n                message = \"\";\n            if (detailMessage == null)\n                detailMessage = \"\";\n\n            throw new Exception(\"Debug assertion failed: \" + message + \"\\n\" + detailMessage);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/BuildAsyncState.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    internal class BuildAsyncState\n    {\n        public string SourceFile { get; internal set; }\n        public string OutputFile { get; internal set; }\n        public string Importer  { get; internal set; }\n        public string Processor { get; internal set; }\n        public OpaqueDataDictionary ProcessorParams { get; internal set; }\n        public ConsoleAsyncLogger Logger { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/BuildEvent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    public class BuildEvent\n    {\n        public const string Extension = \".kniContent\";\n\n        private static readonly OpaqueDataDictionary EmptyParameters = new OpaqueDataDictionary();\n\n        public BuildEvent()\n        {\n            SourceFile = string.Empty;\n            DestFile = string.Empty;\n            Importer = string.Empty;\n            Processor = string.Empty;\n            Parameters = new OpaqueDataDictionary();\n            Dependencies = new List<string>();\n            BuildAsset = new List<string>();\n            BuildOutput = new List<string>();\n        }\n\n        /// <summary>\n        /// Absolute path to the source file.\n        /// </summary>\n        public string SourceFile { get; set; }\n\n        /// <summary>\n        /// The date/time stamp of the source file.\n        /// </summary>\n        public DateTime SourceTime { get; set; }\n\n        /// <summary>\n        /// Absolute path to the output file.\n        /// </summary>\n        public string DestFile { get; set; }\n\n        /// <summary>\n        /// The date/time stamp of the destination file.\n        /// </summary>\n        public DateTime DestTime { get; set; }\n\n        public string Importer { get; set; }\n\n        /// <summary>\n        /// The date/time stamp of the DLL containing the importer.\n        /// </summary>\n        public DateTime ImporterTime { get; set; }\n\n        public string Processor { get; set; }\n\n        /// <summary>\n        /// The date/time stamp of the DLL containing the processor.\n        /// </summary>\n        public DateTime ProcessorTime { get; set; }\n\n        public OpaqueDataDictionary Parameters { get; set; }\n\n        /// <summary>\n        /// Gets or sets the dependencies.\n        /// </summary>\n        /// <value>The dependencies.</value>\n        /// <remarks>\n        /// Dependencies are extra files that are required in addition to the <see cref=\"SourceFile\"/>.\n        /// Dependencies are added using <see cref=\"ContentProcessorContext.AddDependency\"/>. Changes\n        /// to the dependent file causes a rebuilt of the content.\n        /// </remarks>\n        public List<string> Dependencies { get; set; }\n\n        /// <summary>\n        /// Gets or sets the additional (nested) assets.\n        /// </summary>\n        /// <value>The additional (nested) assets.</value>\n        /// <remarks>\n        /// <para>\n        /// Additional assets are built by using an <see cref=\"ExternalReference{T}\"/> and calling\n        /// <see cref=\"ContentProcessorContext.BuildAndLoadAsset{TInput,TOutput}(ExternalReference{TInput},string)\"/>\n        /// or <see cref=\"ContentProcessorContext.BuildAsset{TInput,TOutput}(ExternalReference{TInput},string)\"/>.\n        /// </para>\n        /// <para>\n        /// Examples: The mesh processor may build textures and effects in addition to the mesh.\n        /// </para>\n        /// </remarks>\n        public List<string> BuildAsset { get; set; }\n\n        /// <summary>\n        /// Gets or sets the related output files.\n        /// </summary>\n        /// <value>The related output files.</value>\n        /// <remarks>\n        /// Related output files are non-XNB files that are included in addition to the XNB files.\n        /// Related output files need to be copied to the output folder by a content processor and\n        /// registered by calling <see cref=\"ContentProcessorContext.AddOutputFile\"/>.\n        /// </remarks>\n        public List<string> BuildOutput { get; set; }\n\n\n        public void SaveBinary(string filePath)\n        {\n            // Make sure the directory exists.\n            Directory.CreateDirectory(Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar);\n\n            using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))\n            using (var writer = new PipelineBuildEventBinaryWriter(stream))\n            {\n                writer.Write(this);\n            }\n        }\n\n        public static BuildEvent LoadBinary(string filePath)\n        {\n            try\n            {\n                if (!File.Exists(filePath))\n                    return null;\n\n                using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None))\n                using (var reader = new PipelineBuildEventBinaryReader(stream))\n                {\n                    BuildEvent result = new BuildEvent();\n                    reader.Read(result);\n                    return result;\n                }\n            }\n            catch (Exception)\n            {\n                return null;\n            }\n        }\n\n        internal bool NeedsRebuild(PipelineManager manager, BuildEvent cachedEvent)\n        {\n            // If we have no previously cached build event then we cannot\n            // be sure that the state hasn't changed... force a rebuild.\n            if (cachedEvent == null)\n                return true;\n\n            // Verify that the last write time of the source file matches\n            // what we recorded when it was built.  If it is different\n            // that means someone modified it and we need to rebuild.\n            DateTime sourceWriteTime = File.GetLastWriteTime(SourceFile);\n            if (cachedEvent.SourceTime != sourceWriteTime)\n                return true;\n\n            // Do the same test for the dest file.\n            DateTime destWriteTime = File.GetLastWriteTime(DestFile);\n            if (cachedEvent.DestTime != destWriteTime)\n                return true;\n\n            // If the source file is newer than the dest file\n            // then it must have been updated and needs a rebuild.\n            if (sourceWriteTime >= destWriteTime)\n                return true;\n\n            // Are any of the dependancy files newer than the dest file?\n            foreach (string depFile in cachedEvent.Dependencies)\n            {\n                if (File.GetLastWriteTime(depFile) >= destWriteTime)\n                    return true;\n            }\n\n            // This shouldn't happen...  but if the source or dest files changed\n            // then force a rebuild.\n            if (cachedEvent.SourceFile != SourceFile\n            ||  cachedEvent.DestFile != DestFile)\n                return true;\n\n            // Did the importer change?\n            if (cachedEvent.Importer != Importer)\n                return true;\n\n            // Did the processor change?\n            if (cachedEvent.Processor != Processor)\n                return true;\n\n            // Did the importer assembly change?\n            DateTime importerAssemblyTimestamp = manager.GetImporterAssemblyTimestamp(cachedEvent.Importer);\n            if (importerAssemblyTimestamp > cachedEvent.ImporterTime)\n                return true;\n\n            // Did the processor assembly change?\n            DateTime processorAssemblyTimestamp = manager.GetProcessorAssemblyTimestamp(cachedEvent.Processor);\n            if (processorAssemblyTimestamp > cachedEvent.ProcessorTime)\n                return true;\n\n            // Did the parameters change?\n            OpaqueDataDictionary processorDefaultValues = manager.GetProcessorDefaultValues(Processor);\n            if (!AreParametersEqual(cachedEvent.Parameters, Parameters, processorDefaultValues))\n                return true;\n\n            return false;\n        }\n\n        internal static bool AreParametersEqual(OpaqueDataDictionary parameters0, OpaqueDataDictionary parameters1, OpaqueDataDictionary processorDefaultValues)\n        {\n            Debug.Assert(processorDefaultValues != null, \"processorDefaultValues must not be empty.\");\n            Debug.Assert(EmptyParameters != null && EmptyParameters.Count == 0);\n\n            // Same reference or both null?\n            if (parameters0 == parameters1)\n                return true;\n\n            if (parameters0 == null)\n                parameters0 = EmptyParameters;\n            if (parameters1 == null)\n                parameters1 = EmptyParameters;\n\n            // Are both dictionaries empty?\n            if (parameters0.Count == 0 && parameters1.Count == 0)\n                return true;\n\n            // Compare the values with the second dictionary or\n            // the default values.\n            if (parameters0.Count < parameters1.Count)\n            {\n                OpaqueDataDictionary dummy = parameters0;\n                parameters0 = parameters1;\n                parameters1 = dummy;\n            }\n\n            // Compare parameters0 with parameters1 or processorDefaultValues.\n            foreach (KeyValuePair<string, object> pair in parameters0)\n            {\n                object value0 = pair.Value;\n                object value1;\n\n                // Search for matching parameter.\n                if (!parameters1.TryGetValue(pair.Key, out value1) && !processorDefaultValues.TryGetValue(pair.Key, out value1))\n                    return false;\n\n                if (!AreEqual(value0, value1))\n                    return false;\n            }\n\n            // Compare parameters which are only in parameters1 with processorDefaultValues.\n            foreach (KeyValuePair<string, object> pair in parameters1)\n            {\n                if (parameters0.ContainsKey(pair.Key))\n                    continue;\n\n                object defaultValue;\n                if (!processorDefaultValues.TryGetValue(pair.Key, out defaultValue))\n                    return false;\n\n                if (!AreEqual(pair.Value, defaultValue))\n                    return false;\n            }\n\n            return true;\n        }\n\n        private static bool AreEqual(object value0, object value1)\n        {\n            // Are values equal or both null?\n            if (Equals(value0, value1))\n                return true;\n\n            // Is one value null?\n            if (value0 == null || value1 == null)\n                return false;\n\n            // Values are of different type: Compare string representation.\n            if (ConvertToString(value0) != ConvertToString(value1))\n                return false;\n\n            return true;\n        }\n\n        private static string ConvertToString(object value)\n        {\n            if (value == null)\n                return null;\n\n            TypeConverter typeConverter = TypeDescriptor.GetConverter(value.GetType());\n            return typeConverter.ConvertToInvariantString(value);\n        }\n\n\n        internal class PipelineBuildEventBinaryWriter : BinaryWriter\n        {\n            private const string Header = \"KNIC\"; // content db\n            private const short MajorVersion =  3;\n            private const short MinorVersion = 15;\n            private const short DataType = 2; // PipelineBuildEvent data\n\n\n            public PipelineBuildEventBinaryWriter(Stream output) : base(output)\n            {\n            }\n\n            internal void Write(BuildEvent value)\n            {\n                Write(Header.ToCharArray());\n                Write((Int16)MajorVersion);\n                Write((Int16)MinorVersion);\n                Write((Int32)DataType);\n                Write((Int32)0); // reserved\n\n\n                WriteStringOrNull(value.SourceFile);\n                WriteDateTime(value.SourceTime);\n\n                WriteStringOrNull(value.DestFile);\n                WriteDateTime(value.DestTime);\n\n                WriteStringOrNull(value.Importer);\n                WriteDateTime(value.ImporterTime);\n\n                WriteStringOrNull(value.Processor);\n                WriteDateTime(value.ProcessorTime);\n\n                WritePackedInt(value.Parameters.Count);\n                foreach (var param in value.Parameters)\n                {\n                    WriteStringOrNull(param.Key);\n                    WriteStringOrNull(ConvertToString(param.Value));\n                }\n\n                WritePackedInt(value.Dependencies.Count);\n                for (int i = 0; i < value.Dependencies.Count; i++)\n                    WriteStringOrNull(value.Dependencies[i]);\n\n                WritePackedInt(value.BuildAsset.Count);\n                for (int i = 0; i < value.BuildAsset.Count; i++)\n                    WriteStringOrNull(value.BuildAsset[i]);\n\n                WritePackedInt(value.BuildOutput.Count);\n                for (int i = 0; i < value.BuildOutput.Count; i++)\n                    WriteStringOrNull(value.BuildOutput[i]);\n\n                return;\n            }\n\n            protected void WritePackedInt(int value)\n            {\n                // write zigzag encoded int\n                int zzint = ((value << 1) ^ (value >> 31));\n                Write7BitEncodedInt(zzint);\n            }\n\n            private void WriteStringOrNull(string value)\n            {\n                if (value != null)\n                {\n                    Write(true);\n                    Write(value);\n                }\n                else\n                    Write(false);\n            }\n\n            private void WriteDateTime(DateTime value)\n            {\n                Write((Int64)value.ToBinary());\n            }\n        }\n\n\n        internal class PipelineBuildEventBinaryReader : BinaryReader\n        {\n            private const string Header = \"KNIC\"; // content db\n            private const short MajorVersion =  3;\n            private const short MinorVersion = 15;\n            private const int DataType = 2; // PipelineBuildEvent data\n\n\n            public PipelineBuildEventBinaryReader(Stream output) : base(output)\n            {\n            }\n\n            internal void Read(BuildEvent value)\n            {\n                if (ReadByte() != Header[0]\n                ||  ReadByte() != Header[1]\n                ||  ReadByte() != Header[2]\n                ||  ReadByte() != Header[3])\n                    throw new Exception(\"Invalid file.\");\n\n                if (ReadInt16() != MajorVersion\n                || ReadInt16() != MinorVersion)\n                    throw new Exception(\"Invalid file version.\");\n\n                int dataType = ReadInt32();\n                if (dataType != DataType)\n                    throw new Exception(\"Invalid data type.\");\n\n                int reserved0 = ReadInt32();\n\n                value.SourceFile = ReadStringOrNull();\n                value.SourceTime = ReadDateTime();\n\n                value.DestFile = ReadStringOrNull();\n                value.DestTime = ReadDateTime();\n\n                value.Importer = ReadStringOrNull();\n                value.ImporterTime = ReadDateTime();\n\n                value.Processor = ReadStringOrNull();\n                value.ProcessorTime = ReadDateTime();\n\n                int parametersCount = ReadPackedInt();\n                value.Parameters = new OpaqueDataDictionary();\n                for (int i = 0; i < parametersCount; i++)\n                {\n                    value.Parameters.Add(\n                        ReadStringOrNull(),\n                        ReadStringOrNull());\n                }\n\n                int dependenciesCount = ReadPackedInt();\n                value.Dependencies = new List<string>(dependenciesCount);\n                for (int i = 0; i < dependenciesCount; i++)\n                    value.Dependencies.Add(ReadStringOrNull());\n\n                int buildAssetCount = ReadPackedInt();\n                value.BuildAsset = new List<string>(buildAssetCount);\n                for (int i = 0; i < buildAssetCount; i++)\n                    value.BuildAsset.Add(ReadStringOrNull());\n\n                int buildOutputCount = ReadPackedInt();\n                value.BuildOutput = new List<string>(buildOutputCount);\n                for (int i = 0; i < buildOutputCount; i++)\n                    value.BuildOutput.Add(ReadStringOrNull());\n\n                return;\n            }\n\n\n            private int ReadPackedInt()\n            {\n                unchecked\n                {\n                    // read zigzag encoded int\n                    int zzint = Read7BitEncodedInt();\n                    return ((int)((uint)zzint >> 1) ^ (-(zzint & 1)));\n                }\n            }\n\n            private string ReadStringOrNull()\n            {\n                if (ReadBoolean())\n                    return ReadString();\n                else\n                    return null;\n            }\n\n            private DateTime ReadDateTime()\n            {\n                return DateTime.FromBinary(ReadInt64());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/CommandLineParser.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.ComponentModel;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    /// <summary>\n    /// Adapted from this generic command line argument parser:\n    /// http://blogs.msdn.com/b/shawnhar/archive/2012/04/20/a-reusable-reflection-based-command-line-parser.aspx     \n    /// </summary>\n    public class CommandLineParser\n    {\n        public static CommandLineParser Instance;\n\n        private readonly object _optionsObject;\n        private readonly Queue<MemberInfo> _requiredOptions;\n        private readonly Dictionary<string, MemberInfo> _optionalOptions;\n        private readonly Dictionary<string, string> _flags;\n        private readonly List<string> _requiredUsageHelp;\n\n        public readonly Dictionary<string, string> _properties;\n\n        public delegate void ErrorCallback(string msg, object[] args);\n        public event ErrorCallback OnError;\n\n        public CommandLineParser(object optionsObject)\n        {\n            Instance = this;\n\n            _optionsObject = optionsObject;\n            _requiredOptions = new Queue<MemberInfo>();\n            _optionalOptions = new Dictionary<string, MemberInfo>();\n            _requiredUsageHelp = new List<string>();\n\n            _properties = new Dictionary<string, string>();\n\n            // Reflect to find what commandline options are available...\n\n            // Fields\n            foreach (var field in optionsObject.GetType().GetFields())\n            {\n                var param = GetAttribute<CommandLineParameterAttribute>(field);\n                if (param == null)\n                    continue;\n\n                CheckReservedPrefixes(param.Name);\n\n                if (param.Required)\n                {\n                    // Record a required option.\n                    _requiredOptions.Enqueue(field);\n\n                    _requiredUsageHelp.Add(string.Format(\"<{0}>\", param.Name));\n                }\n                else\n                {\n                    // Record an optional option.\n                    _optionalOptions.Add(param.Name.ToLowerInvariant(), field);\n                }\n            }\n\n            // Properties\n            foreach (var property in optionsObject.GetType().GetProperties())\n            {\n                var param = GetAttribute<CommandLineParameterAttribute>(property);\n                if (param == null)\n                    continue;\n\n                CheckReservedPrefixes(param.Name);\n\n                if (param.Required)\n                {\n                    // Record a required option.\n                    _requiredOptions.Enqueue(property);\n\n                    _requiredUsageHelp.Add(string.Format(\"<{0}>\", param.Name));\n                }\n                else\n                {\n                    // Record an optional option.\n                    _optionalOptions.Add(param.Name.ToLowerInvariant(), property);\n                }\n            }\n\n            // Methods\n            foreach (var method in optionsObject.GetType().GetMethods())\n            {\n                var param = GetAttribute<CommandLineParameterAttribute>(method);\n                if (param == null)\n                    continue;\n\n                CheckReservedPrefixes(param.Name);\n\n                // Only accept methods that take less than 1 parameter.\n                if (method.GetParameters().Length > 1)\n                    throw new NotSupportedException(\"Methods must have one or zero parameters.\");\n\n                if (param.Required)\n                {\n                    // Record a required option.\n                    _requiredOptions.Enqueue(method);\n\n                    _requiredUsageHelp.Add(string.Format(\"<{0}>\", param.Name));\n                }\n                else\n                {\n                    // Record an optional option.\n                    _optionalOptions.Add(param.Name.ToLowerInvariant(), method);\n                }\n            }\n\n            _flags = new Dictionary<string, string>();\n            foreach(var pair in _optionalOptions)\n            {\n                var fi = GetAttribute<CommandLineParameterAttribute>(pair.Value);\n                if(!string.IsNullOrEmpty(fi.Flag))\n                    _flags.Add(fi.Flag, fi.Name);\n            }\n        }        \n\n        public bool Parse(IEnumerable<string> args)\n        {\n            var preprocargs = Preprocess(args);\n\n            var showUsage = true;\n            var success = true;\n            foreach (var arg in preprocargs)\n            {\n                showUsage = false;\n\n                if (!ParseFlags(arg))\n                {\n                    success = false;\n                    break;\n                }\n            }\n\n            var missingRequiredOption = _requiredOptions.FirstOrDefault(field => !IsList(field) || GetList(field).Count == 0);\n            if (missingRequiredOption != null)\n            {\n                ShowError(\"Missing argument '{0}'\", GetAttribute<CommandLineParameterAttribute>(missingRequiredOption).Name);\n                return false;\n            }\n\n            if (showUsage)\n                ShowError(null);\n\n            return success;\n        }\n\n        private IEnumerable<string> Preprocess(IEnumerable<string> args)\n        {\n            var output = new List<string>();\n            var ifstack = new Stack<IfCondition>();\n            foreach (var arg in args)\n                ParsePreprocessArg(arg, output, ifstack, false);\n\n            return output;\n        }\n\n        private void ParsePreprocessArg(string arg, List<string> output, Stack<IfCondition> ifstack, bool inResponseFile)\n        {\n            if (arg.StartsWith(\"$endif\"))\n            {\n                ifstack.Pop();\n                return;\n            }\n\n            if (ifstack.Count > 0)\n            {\n                foreach (var ifCondition in ifstack)\n                {\n                    var expected = ifCondition.Value;\n                    string actual;\n                    if (!_properties.TryGetValue(ifCondition.Key, out actual))\n                        return;\n                    if (expected != string.Empty && !expected.Equals(actual))\n                        return;\n                }\n            }\n\n            if (arg.StartsWith(\"$set \"))\n            {\n                if (!inResponseFile)\n                    throw new Exception(\"$set is invalid outside of a response file.\");\n                var words = arg.Substring(5).Split('=');\n                var name = words[0].Trim();\n                var value = words.Length > 1 ? words[1].Trim() : string.Empty;\n\n                _properties[name] = value;\n                return;\n            }\n\n            if (arg.StartsWith(\"$if \"))\n            {\n                if (!inResponseFile)\n                    throw new Exception(\"$if is invalid outside of a response file.\");\n\n                var words = arg.Substring(4).Split('=');\n                var name = words[0].Trim();\n                var value = words.Length > 1 ? words[1].Trim() : string.Empty;\n\n                var condition = new IfCondition(name, value);\n                ifstack.Push(condition);\n\n                return;\n            }\n\n            if (arg.StartsWith(\"/define:\") || arg.StartsWith(\"--define:\"))\n            {\n                arg = arg.Substring(arg[0] == '/' ? 8 : 9);\n\n                var words = arg.Split('=');\n                var name = words[0];\n                var value = words.Length > 1 ? words[1] : string.Empty;\n\n                _properties[name] = value;\n\n                return;\n            }\n\n            if (arg.StartsWith(\"/@:\") || arg.StartsWith(\"--@:\") || arg.StartsWith(\"-@:\"))\n            {\n                string file = null;\n                if (arg.StartsWith(\"/@:\") || arg.StartsWith(\"-@:\"))\n                    file = arg.Substring(3);\n                if (file.StartsWith(\"--@:\"))\n                    file = arg.Substring(4);\n\n                file = Path.GetFullPath(file);\n\n                if (!File.Exists(file))\n                    throw new Exception(string.Format(\"File '{0}' does not exist.\", file));\n\n                string responseFilename = Path.GetFileName(file);\n                if (!inResponseFile)\n                    output.Add(\"/@:\" + responseFilename);\n\n                var prevDir = Directory.GetCurrentDirectory();\n                var dir = Path.GetDirectoryName(file);\n\n                if (prevDir != dir)\n                {\n                    // make sure the working dir is changed both during preprocessing and during execution\n                    Directory.SetCurrentDirectory(dir);\n                    output.Add(\"/workingDir:\" + dir);\n                }\n\n                var lines = File.ReadAllLines(file);\n                foreach (var line in lines)\n                {\n                    if (string.IsNullOrWhiteSpace(line) || line.StartsWith(\"#\"))\n                        continue;\n\n                    ParsePreprocessArg(line, output, ifstack, true);\n                }\n\n                if (prevDir != dir)\n                {\n                    Directory.SetCurrentDirectory(prevDir);\n                    output.Add(\"/workingDir:\" + prevDir);\n                }\n\n                return;\n            }\n\n            output.Add(arg);\n        }\n\n        private bool ParseFlags(string arg)\n        {\n            // Only one flag\n            if (arg.Length >= 3 &&\n                (arg[0] == '-' || arg[0] == '/') &&\n                (arg[2] == '=' || arg[2] == ':'))\n            {\n                string name;\n                if (!_flags.TryGetValue(arg[1].ToString(), out name))\n                {\n                    ShowError(\"Unknown option '{0}'\", arg[1].ToString());\n                    return false;\n                }\n\n                ParseArgument(\"/\" + name + arg.Substring(2));\n                return true;\n            }\n\n            // Not a flag, parse argument\n            return ParseArgument(arg);\n        }\n\n        private bool ParseArgument(string arg)\n        {\n            if (arg.StartsWith(\"/\") || arg.StartsWith(\"--\"))\n            {\n                // After the first escaped argument we can no\n                // longer read non-escaped arguments.\n                if (_requiredOptions.Count > 0)\n                    return false;\n\n                // Parse an optional argument.\n                char[] separators = { ':', '=' };\n\n                var split = arg.Substring(arg.StartsWith(\"/\") ? 1 : 2).Split(separators, 2, StringSplitOptions.None);\n\n                var name = split[0];\n                var value = (split.Length > 1) ? split[1] : \"true\";\n\n                MemberInfo member;\n\n                if (!_optionalOptions.TryGetValue(name.ToLowerInvariant(), out member))\n                {\n                    ShowError(\"Unknown option '{0}'\", name);\n                    return false;\n                }\n\n                return SetOption(member, value);\n            }\n\n            if (_requiredOptions.Count > 0)\n            {\n                // Parse the next non escaped argument.\n                var field = _requiredOptions.Peek();\n\n                if (!IsList(field))\n                    _requiredOptions.Dequeue();\n\n                return SetOption(field, arg);\n            }\n\n            ShowError(\"Too many arguments\");\n            return false;\n        }\n\n\n        bool SetOption(MemberInfo member, string value)\n        {\n            try\n            {\n                if (IsList(member))\n                {\n                    // Append this value to a list of options.\n                    GetList(member).Add(ChangeType(value, ListElementType(member)));\n                }\n                else\n                {\n                    // Set the value of a single option.\n                    if (member is MethodInfo)\n                    {\n                        var method = member as MethodInfo;\n                        var parameters = method.GetParameters();\n                        if (parameters.Length == 0)\n                            method.Invoke(_optionsObject, null);\n                        else\n                            method.Invoke(_optionsObject, new[] { ChangeType(value, parameters[0].ParameterType) });\n                    }\n                    else if (member is FieldInfo)\n                    {\n                        var field = member as FieldInfo;\n                        field.SetValue(_optionsObject, ChangeType(value, field.FieldType));\n                    }\n                    else \n                    {\n                        var property = member as PropertyInfo;\n                        property.SetValue(_optionsObject, ChangeType(value, property.PropertyType), null);\n                    }\n                }\n\n                return true;\n            }\n            catch (TargetInvocationException tiex)\n            {\n                ShowError(\"Invalid value '{0}' for option '{1}'\", value, GetAttribute<CommandLineParameterAttribute>(member).Name);\n                ShowError(tiex.InnerException.Message);\n                return false;\n            }\n            catch\n            {\n                ShowError(\"Invalid value '{0}' for option '{1}'\", value, GetAttribute<CommandLineParameterAttribute>(member).Name);\n                return false;\n            }\n        }\n\n        static readonly string[] ReservedPrefixes = new[]\n            {   \n                \"$\",\n                \"/\",                \n                \"#\",\n                \"--\",\n                \"-\"\n            };\n\n        static void CheckReservedPrefixes(string str)\n        {\n            foreach (var i in ReservedPrefixes)\n            {\n                if (str.StartsWith(i))\n                    throw new Exception(string.Format(\"'{0}' is a reserved prefix and cannot be used at the start of an argument name.\", i));\n            }\n        }\n\n        static object ChangeType(string value, Type type)\n        {\n            var converter = TypeDescriptor.GetConverter(type);\n\n            return converter.ConvertFromInvariantString(value);\n        }\n\n\n        static bool IsList(MemberInfo member)\n        {\n            if (member is MethodInfo)\n                return false;\n\n            if (member is FieldInfo)\n                return typeof(IList).IsAssignableFrom((member as FieldInfo).FieldType);\n            \n            return typeof(IList).IsAssignableFrom((member as PropertyInfo).PropertyType);\n        }\n\n\n        IList GetList(MemberInfo member)\n        {\n            if (member is PropertyInfo)\n                return (IList)(member as PropertyInfo).GetValue(_optionsObject, null);\n\n            if (member is FieldInfo)\n                return (IList)(member as FieldInfo).GetValue(_optionsObject);\n\n            throw new Exception();\n        }\n\n\n        static Type ListElementType(MemberInfo member)\n        {\n            if (member is FieldInfo)\n            {\n                var field = member as FieldInfo;\n                var interfaces = from i in field.FieldType.GetInterfaces()\n                                 where i.IsGenericType && i.GetGenericTypeDefinition() == typeof (IEnumerable<>)\n                                 select i;\n\n                return interfaces.First().GetGenericArguments()[0];\n            }\n\n            if (member is PropertyInfo)\n            {\n                var property = member as PropertyInfo;\n                var interfaces = from i in property.PropertyType.GetInterfaces()\n                                 where i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable<>)\n                                 select i;\n\n                return interfaces.First().GetGenericArguments()[0];\n            }\n\n            throw new ArgumentException(\"Only FieldInfo and PropertyInfo are valid arguments.\", \"member\");\n        }\n\n        public string Title { get; set; }\n\n        bool IsWindows()\n        {\n            switch (Environment.OSVersion.Platform)\n            {\n                case PlatformID.Win32NT:\n                case PlatformID.Win32S:\n                case PlatformID.Win32Windows:\n                case PlatformID.WinCE:\n                    return true;\n            }\n            return false;\n        }\n\n        public void ShowError(string message, params object[] args)\n        {\n            if (!string.IsNullOrEmpty(message) && OnError != null)\n            {\n                OnError(message, args);\n                return;\n            }\n\n            var name = Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().ProcessName);\n\n            if (!string.IsNullOrEmpty(Title))\n            {\n                Console.Error.WriteLine(Title);\n                Console.Error.WriteLine();\n            }\n\n            if (!string.IsNullOrEmpty(message))\n            {\n                Console.Error.WriteLine(message, args);\n                Console.Error.WriteLine();\n            }\n\n            var defaultParamPrefix = IsWindows() ? \"/\" : \"--\";\n            Console.Error.WriteLine(\"Usage: {0} {1}{2}\", \n                name, \n                _requiredUsageHelp.Count > 0 ? string.Join(\" \", _requiredUsageHelp) + \" \" : string.Empty, \n                _optionalOptions.Count > 0 ? \"<Options>\" : string.Empty);\n\n            if (_optionalOptions.Count > 0)\n            {\n                Console.Error.WriteLine();\n                Console.Error.WriteLine(\"Options:\");\n\n                var data = _optionalOptions.Values.ToList();\n                data.Sort((x, y) => {\n                    var px = GetAttribute<CommandLineParameterAttribute>(x);\n                    var py = GetAttribute<CommandLineParameterAttribute>(y);\n\n                    return px.Name.CompareTo(py.Name);\n                });\n\n                foreach(var d in data)\n                {\n                    var attr = GetAttribute<CommandLineParameterAttribute>(d);\n                    var field = d as FieldInfo;\n                    var prop = d as PropertyInfo;\n                    var method = d as MethodInfo;\n                    var hasValue = false;\n\n                    if (field != null && field.FieldType != typeof (bool))\n                        hasValue = true;\n                    if (prop != null && prop.PropertyType != typeof (bool))\n                        hasValue = true;\n                    if (method != null && method.GetParameters().Length != 0)\n                        hasValue = true;\n                    \n                    var s = \"  \";\n\n                    s += (!string.IsNullOrEmpty(attr.Flag)) ? (IsWindows() ? \"/\" : \"-\") + attr.Flag + \",\" : \"   \";\n                    s += \" \" + defaultParamPrefix + attr.Name;\n\n                    if (hasValue)\n                    {\n                        if (IsWindows())\n                            s += \":<\" + attr.ValueName + \">\";\n                        else\n                            s += \"=\" + attr.ValueName.Replace(\"=\", \":\").ToUpper();\n                    }\n\n                    s = s.PadRight(35, ' ');\n\n                    // Wrap text description\n                    var bw = Math.Max(60, Console.BufferWidth);\n                    var desc = attr.Description.Split(' ');\n\n                    foreach(var dw in desc)\n                    {\n                        if (s.Length + dw.Length >= bw)\n                        {\n                            Console.WriteLine(s);\n                            s = string.Empty.PadRight(37, ' ');\n                        }\n\n                        s += \" \" + dw;\n                    }\n\n                    Console.WriteLine(s);\n                }\n            }\n        }\n\n        static T GetAttribute<T>(ICustomAttributeProvider provider) where T : Attribute\n        {\n            return provider.GetCustomAttributes(typeof(T), false).OfType<T>().FirstOrDefault();\n        }\n\n        private struct IfCondition\n        {\n            public readonly string Key;\n            public readonly string Value;\n\n            public IfCondition(string key, string value)\n            {\n                Key = key;\n                Value = value;\n            }\n        }\n    }\n\n    // Used on an optionsObject field or method to rename the corresponding commandline option.\n    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property)]\n    public sealed class CommandLineParameterAttribute : Attribute\n    {\n        public CommandLineParameterAttribute()\n        {\n            ValueName = \"value\";\n        }\n\n        public string Name { get; set; }\n\n        public string Flag { get; set; }\n\n        public bool Required { get; set; }\n\n        public string ValueName { get; set; }\n\n        public string Description { get; set; }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/CompressionMethod.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    public enum CompressionMethod\n    {\n        Default      = 0,\n        //ZLX        = 1,\n        LZ4          = 2,\n        Brotli       = 3,\n    }\n}"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/ConsoleAsyncLogger.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    internal class ConsoleAsyncLogger : ConsoleLogger\n    {\n        private ConsoleLogger _logger;\n        Queue<ICmd> _commandQueue = new Queue<ICmd>();\n        private bool _immediate = false;\n\n        public bool Immediate\n        {\n            get { return _immediate; }\n            set\n            {\n                if (value != _immediate)\n                {\n                    if (_immediate) Flush();\n                    _immediate = value;\n                }\n            }\n        }\n\n        public ConsoleAsyncLogger(ConsoleLogger logger)\n        {\n            this._logger = logger;\n        }\n\n        //public override string LoggerRootDirectory\n        //{\n        //    get { return _logger.LoggerRootDirectory; }\n        //    set { throw new InvalidOperationException(); }\n        //}\n        \n        public override void LogImportantMessage(string message, params object[] messageArgs)\n        {\n            Enqueue(new LogImportantMessageCmd(message, messageArgs));\n        }\n\n        public override void LogMessage(string message, params object[] messageArgs)\n        {\n            Enqueue(new LogMessageCmd(message, messageArgs));\n        }\n\n        public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs)\n        {\n            Enqueue(new LogWarningCmd(helpLink, contentIdentity, message, messageArgs));\n        }\n        \n        public override void PushFile(string filename)\n        {\n            Enqueue(new PushFileCmd(filename));\n        }\n\n        public override void PopFile()\n        {\n            Enqueue(new PopFileCmd());\n        }\n\n        public override void Indent()\n        {\n            Enqueue(new IndentCmd());\n        }\n\n        public override void Unindent()\n        {\n            Enqueue(new UnindentCmd());\n        }\n\n        private void Enqueue(ICmd cmd)\n        {\n            _commandQueue.Enqueue(cmd);\n            if (Immediate) Flush();\n        }\n\n        internal void Flush()\n        {\n            while(_commandQueue.Count>0)\n            {\n                var cmd = _commandQueue.Dequeue();\n                cmd.Execute(_logger);\n            }\n        }\n\n        #region command queue\n        interface ICmd\n        {\n            void Execute(ConsoleLogger reciever);\n        }\n        \n        class LogImportantMessageCmd : ICmd\n        {\n            private string message;\n            private object[] messageArgs;\n            public LogImportantMessageCmd(string message, object[] messageArgs)\n            {\n                this.message = message;\n                this.messageArgs = messageArgs;\n            }\n            public void Execute(ConsoleLogger reciever) { reciever.LogImportantMessage(message, messageArgs); }\n        }\n\n        class LogMessageCmd : ICmd\n        {\n            private string message;\n            private object[] messageArgs;\n            public LogMessageCmd(string message, object[] messageArgs)\n            {\n                this.message = message;\n                this.messageArgs = messageArgs;\n            }\n            public void Execute(ConsoleLogger reciever) { reciever.LogMessage(message, messageArgs); }\n        }\n        \n        class LogWarningCmd : ICmd\n        {\n            private string helpLink;\n            private ContentIdentity contentIdentity;\n            private string message;\n            private object[] messageArgs;\n            public LogWarningCmd(string helpLink, ContentIdentity contentIdentity, string message, object[] messageArgs)\n            {\n                this.helpLink = helpLink;\n                this.contentIdentity = contentIdentity;\n                this.message = message;\n                this.messageArgs = messageArgs;\n            }\n            public void Execute(ConsoleLogger reciever) { reciever.LogWarning(helpLink, contentIdentity, message, messageArgs); }\n        }\n\n        class PushFileCmd: ICmd\n        {\n            private string filename;\n            public PushFileCmd(string filename) { this.filename = filename; }\n            public void Execute(ConsoleLogger reciever) { reciever.PushFile(filename); }\n        }\n\n        class PopFileCmd : ICmd\n        {\n            public PopFileCmd() { }\n            public void Execute(ConsoleLogger reciever) { reciever.PopFile(); }\n        }\n\n        class IndentCmd : ICmd\n        {\n            public IndentCmd() { }\n            public void Execute(ConsoleLogger reciever) { reciever.Indent(); }\n        }\n\n        class UnindentCmd : ICmd\n        {\n            public UnindentCmd() { }\n            public void Execute(ConsoleLogger reciever) { reciever.Unindent(); }\n        }\n        \n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/ConsoleLogger.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    internal class ConsoleLogger : ContentBuildLogger\n    {\n        private int indentCount = 0;\n\n        public virtual void Indent()\n        {\n            indentCount++;\n        }\n\n        public virtual void Unindent()\n        {\n            indentCount--;\n        }\n\n        protected string IndentString { get { return String.Empty.PadLeft(Math.Max(0, indentCount), '\\t'); } }\n\n\n        public override void LogMessage(string message, params object[] messageArgs)\n        {\n\t\t\tConsole.WriteLine(IndentString + message, messageArgs);\n        }\n\n        public override void LogImportantMessage(string message, params object[] messageArgs)\n        {\n            // TODO: How do i make it high importance?\n            Console.WriteLine(IndentString + message, messageArgs);\n        }\n\n        public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs)\n        {\n            var warning = string.Empty;\n            if (contentIdentity != null && !string.IsNullOrEmpty(contentIdentity.SourceFilename))\n            {\n                warning = contentIdentity.SourceFilename;\n                if (!string.IsNullOrEmpty(contentIdentity.FragmentIdentifier))\n                    warning += \"(\" + contentIdentity.FragmentIdentifier + \")\";\n                else\n                    warning += \" \";\n            }\n            else\n            {\n                warning = GetCurrentFilename(contentIdentity);\n                warning += \" \";\n            }\n            warning += \": warning \";\n            \n            // extract errorCode from message\n            var match = System.Text.RegularExpressions.Regex.Match(message, @\"([A-Z]+[0-9]+):(.+)\");\n            if (match.Success || match.Groups.Count == 2)\n            {\n                warning += match.Groups[1].Value;\n                warning += \" \";\n                message = match.Groups[2].Value;\n            }\n\n            warning += \": \";\n\n            if (messageArgs != null && messageArgs.Length != 0)\n                warning += string.Format(message, messageArgs);\n            else if (!string.IsNullOrEmpty(message))\n                warning += message;\n\n            Console.WriteLine(warning);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/ContentBuilder.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    class ContentBuilder\n    {\n        [CommandLineParameter(\n            Name = \"singleThread\",\n            Flag = \"s\",\n            Description = \"Use single Thread.\")]\n        public bool SingleThread = false;\n\n        [CommandLineParameter(\n            Name = \"quiet\",\n            Flag = \"q\",\n            Description = \"Only output content build errors.\")]\n        public bool Quiet = false;\n        \n        [CommandLineParameter(\n            Name = \"help\",\n            Flag = \"h\",\n            Description = \"Displays this help.\")]\n        public void Help()\n        {\n            CommandLineParser.Instance.ShowError(null);\n        }\n\n        private string _responseFilename = string.Empty;\n\n        [CommandLineParameter(\n            Name = \"@\",\n            Flag = \"@\",\n            ValueName = \"responseFile\",\n            Description = \"Read a text response file with additional command line options and switches.\")]\n        // This property only exists for documentation.\n        // The actual handling of '/@' is done in the preprocess step.\n        public void SetResponseFile(string responseFilename)\n        {\n            _responseFilename = responseFilename;\n        }\n\n        [CommandLineParameter(\n            Name = \"workingDir\",\n            Flag = \"w\",\n            ValueName = \"directoryPath\",\n            Description = \"The working directory where all source content is located.\")]\n        public void SetWorkingDir(string path)\n        {\n            Directory.SetCurrentDirectory(path);\n        }\n\n        private string _outputDir = string.Empty;\n\n        [CommandLineParameter(\n            Name = \"outputDir\",\n            Flag = \"o\",\n            ValueName = \"path\",\n            Description = \"The directory where all content is written.\")]\n        public void SetOutputDir(string path)\n        {\n            _outputDir = Path.GetFullPath(path);\n        }\n\n        private string _intermediateDir = string.Empty;\n\n        [CommandLineParameter(\n            Name = \"intermediateDir\",\n            Flag = \"n\",\n            ValueName = \"path\",\n            Description = \"The directory where all intermediate files are written.\")]\n        public void SetIntermediateDir(string path)\n        {\n            _intermediateDir = Path.GetFullPath(path);\n        }\n\n        [CommandLineParameter(\n            Name = \"rebuild\",\n            Flag = \"r\",\n            Description = \"Forces a full rebuild of all content.\")]\n        public bool Rebuild = false;\n\n        [CommandLineParameter(\n            Name = \"clean\",\n            Flag = \"c\",\n            Description = \"Delete all previously built content and intermediate files.\")]\n        public bool Clean = false;\n\n        [CommandLineParameter(\n            Name = \"incremental\",\n            Flag = \"I\",\n            Description = \"Skip cleaning files not included in the current build.\")]\n        public bool Incremental = false;\n\n        [CommandLineParameter(\n            Name = \"reference\",\n            Flag = \"f\",\n            ValueName = \"assembly\",\n            Description = \"Adds an assembly reference for resolving content importers, processors, and writers.\")]\n        public readonly List<string> References = new List<string>();\n\n        private readonly List<Package> _packageReferences = new List<Package>();\n\n        [CommandLineParameter(\n            Name = \"packageReference\",\n            ValueName = \"package\",\n            Description = \"Adds a nuget package reference for resolving content importers, processors, and writers.\")]\n        public void SetPackageReference(string packageReference)\n        {\n            Package package = Package.Parse(packageReference);\n            _packageReferences.Add(package);\n        }\n\n        [CommandLineParameter(\n            Name = \"platform\",\n            Flag = \"t\",\n            ValueName = \"targetPlatform\",\n            Description = \"Set the target platform for this build.  Defaults to Windows desktop DirectX.\")]\n        public TargetPlatform Platform = TargetPlatform.Windows;\n\n        [CommandLineParameter(\n            Name = \"profile\",\n            Flag = \"g\",\n            ValueName = \"graphicsProfile\",\n            Description = \"Set the target graphics profile for this build.  Defaults to HiDef.\")]\n        public GraphicsProfile Profile = GraphicsProfile.HiDef;\n\n        [CommandLineParameter(\n            Name = \"config\",\n            ValueName = \"string\",\n            Description = \"The optional build config string from the build system.\")]\n        public string Config = string.Empty;\n\n        [CommandLineParameter(\n            Name = \"importer\",\n            Flag = \"i\",\n            ValueName = \"className\",\n            Description = \"Defines the class name of the content importer for reading source content.\")]\n        public string Importer = null;\n\n        [CommandLineParameter(\n            Name = \"processor\",\n            Flag = \"p\",\n            ValueName = \"className\",\n            Description = \"Defines the class name of the content processor for processing imported content.\")]\n        public void SetProcessor(string processor)\n        {\n            _processor = processor;\n            \n            // If you are changing the processor then reset all \n            // the processor parameters.\n            _processorParams.Clear();\n        }\n\n        private string _processor = null;\n        private readonly OpaqueDataDictionary _processorParams = new OpaqueDataDictionary();\n\n        [CommandLineParameter(\n            Name = \"processorParam\",\n            Flag = \"m\",\n            ValueName = \"name=value\",\n            Description = \"Defines a parameter name and value to set on a content processor.\")]\n        public void AddProcessorParam(string nameAndValue)\n        {\n            var keyAndValue = nameAndValue.Split('=', ':');\n            if (keyAndValue.Length != 2)\n            {\n                // Do we error out or something?\n                return;\n            }\n\n            _processorParams.Remove(keyAndValue[0]);\n            _processorParams.Add(keyAndValue[0], keyAndValue[1]);\n        }\n\n        [CommandLineParameter(\n            Name = \"build\",\n            Flag = \"b\",\n            ValueName = \"sourceFile\",\n            Description = \"Build the content source file using the previously set switches and options. Optional destination path may be specified with \\\"sourceFile;destFile\\\" if you wish to change the output filepath.\")]\n        public void OnBuild(string sourceFile)\n        {\n            string link = null;\n            if (sourceFile.Contains(\";\"))\n            {\n                var split = sourceFile.Split(';');\n                sourceFile = split[0];\n\n                if(split.Length > 0)\n                    link = split[1];\n            }\n\n            string projectDir = Directory.GetCurrentDirectory();\n\n            //if (sourceFile.Contains(\"..\"))\n            //    throw new InvalidOperationException(\"Content file is not rooted in content path \\\"\" + projectDir + \"\\\"\");\n\n            // Make sure the source file is absolute.\n            if (!Path.IsPathRooted(sourceFile))\n                sourceFile = Path.Combine(projectDir, sourceFile);\n\n            // link should remain relative, absolute path will get set later when the build occurs\n\n            sourceFile = PathHelper.Normalize(sourceFile);\n\n            // Remove duplicates... keep this new one.\n            int previous = _contentItems.FindIndex(e => string.Equals(e.SourceFile, sourceFile, StringComparison.InvariantCultureIgnoreCase));\n            if (previous != -1)\n            {\n                _contentItemsMap.Remove(_contentItems[previous].SourceFile.ToLowerInvariant());\n                _contentItems.RemoveAt(previous);\n            }\n\n            // Create the item for processing later.\n            ContentItem contentItem = new ContentItem\n            {\n                SourceFile = sourceFile,\n                OutputFile = link,\n                Importer = Importer, \n                Processor = _processor,\n                ProcessorParams = new OpaqueDataDictionary()\n            };\n            _contentItems.Add(contentItem);\n            _contentItemsMap.Add(contentItem.SourceFile.ToLowerInvariant(), contentItem);\n\n            // Copy the current processor parameters blind as we\n            // will validate and remove invalid parameters during\n            // the build process later.\n            foreach (var pair in _processorParams)\n                contentItem.ProcessorParams.Add(pair.Key, pair.Value);\n        }\n\n        [CommandLineParameter(\n            Name = \"copy\",\n            ValueName = \"sourceFile\",\n            Description = \"Copy the content source file verbatim to the output directory.\")]\n        public void OnCopy(string sourceFile)\n        {\n            string link = null;\n            if (sourceFile.Contains(\";\"))\n            {\n                var split = sourceFile.Split(';');\n                sourceFile = split[0];\n\n                if (split.Length > 0)\n                    link = split[1];\n            }\n\n            if (!Path.IsPathRooted(sourceFile))\n                sourceFile = Path.Combine(Directory.GetCurrentDirectory(), sourceFile);\n\n            sourceFile = PathHelper.Normalize(sourceFile);\n\n            // Remove duplicates... keep this new one.\n            var previous = _copyItems.FindIndex(e => string.Equals(e.SourceFile, sourceFile, StringComparison.InvariantCultureIgnoreCase));\n            if (previous != -1)\n                _copyItems.RemoveAt(previous);\n\n            _copyItems.Add(new CopyItem { SourceFile = sourceFile, Link = link });\n        }\n\n        [CommandLineParameter(\n            Name = \"compress\",\n            Description = \"Compress the XNB files for smaller file sizes.\")]\n        public bool CompressContent = false;\n\n        [CommandLineParameter(\n            Name = \"compression\",\n            Description = \"The compression method.\")]\n        public CompressionMethod Compression = CompressionMethod.Default;\n\n        public class ContentItem\n        {\n            public string SourceFile;\n            public string OutputFile; // This refers to the \"Link\" which can override the default output location\n\n            public string Importer;\n            public string Processor;\n            public OpaqueDataDictionary ProcessorParams;\n        }\n\n        public class CopyItem\n        {\n            public string SourceFile;\n            public string Link;\n        }\n\n        private PipelineManager _manager;\n        private readonly List<ContentItem> _contentItems = new List<ContentItem>();\n        private readonly Dictionary<string, ContentItem> _contentItemsMap = new Dictionary<string, ContentItem>();\n        private readonly List<CopyItem> _copyItems = new List<CopyItem>();\n        public int SuccessCount { get; private set; }\n        public int ErrorCount { get; private set; }\n\n        public bool HasWork\n        {\n            get { return _contentItems.Count > 0 || _copyItems.Count > 0 || Clean; }    \n        }\n\n        public ContentBuilder()\n        {\n            AttachAssertListener(new AssertListener());\n        }\n\n        [Conditional(\"DEBUG\")]\n        public static void AttachAssertListener(TraceListener traceListener)\n        {\n            if (!Debugger.IsAttached\n            && Trace.Listeners.Count == 1\n            && Trace.Listeners[0].GetType() == typeof(DefaultTraceListener))\n            {\n                Trace.Listeners.Clear();\n                Trace.Listeners.Add(traceListener);\n            }\n        }\n\n        string ReplaceSymbols(string parameter)\n        {\n            if (string.IsNullOrWhiteSpace(parameter))\n                return parameter;\n\n            parameter = parameter.Replace(\"$(Platform)\", Platform.ToString());\n            parameter = parameter.Replace(\"$(Configuration)\", Config);\n            parameter = parameter.Replace(\"$(Config)\", Config);\n            parameter = parameter.Replace(\"$(Profile)\", this.Profile.ToString());\n\n            return parameter;\n        }\n\n        public void Build()\n        {\n            string projectDirectory = PathHelper.Normalize(Directory.GetCurrentDirectory());\n\n            string outputPath = ReplaceSymbols(_outputDir);\n            if (!Path.IsPathRooted(outputPath))\n                outputPath = PathHelper.Normalize(Path.GetFullPath(Path.Combine(projectDirectory, outputPath)));\n\n            string intermediatePath = ReplaceSymbols(_intermediateDir);\n            if (!Path.IsPathRooted(intermediatePath))\n                intermediatePath = PathHelper.Normalize(Path.GetFullPath(Path.Combine(projectDirectory, intermediatePath)));\n\n            ContentCompression compression = ContentCompression.Uncompressed;\n            if (this.CompressContent)\n            {\n                switch (this.Compression)\n                {\n                    case CompressionMethod.Default:\n                        compression = ContentCompression.LegacyLZ4;\n                        break;\n                    case CompressionMethod.LZ4:\n                        compression = ContentCompression.LZ4;\n                        break;\n                    case CompressionMethod.Brotli:\n                        compression = ContentCompression.Brotli;\n                        break;\n                    default:\n                        throw new InvalidOperationException();\n                }\n            }\n\n            _manager = new PipelineManager(projectDirectory, _responseFilename, outputPath, intermediatePath, this.Quiet);\n\n            // Feed all the assembly references to the pipeline manager\n            // so it can resolve importers, processors, writers, and types.\n            AddReferences(_manager, projectDirectory, this.References);\n\n            AddPackageReferences(_manager, projectDirectory, this._packageReferences);\n\n            // Load the previously serialized list of built content.\n            bool targetChanged = false;\n            SourceFileCollection previousFileCollection = LoadFileCollection(intermediatePath);\n            if (previousFileCollection != null)\n            {\n                // If the target changed in any way then we need to force\n                // a full rebuild even under incremental builds.\n                targetChanged = previousFileCollection.Config != Config\n                             || previousFileCollection.Platform != Platform\n                             || previousFileCollection.Profile != Profile\n                             || previousFileCollection.Compression != compression\n                              ;\n\n                // First clean previously built content.\n                CleanItems(previousFileCollection, targetChanged);\n                // TODO: Should we be cleaning copy items?  I think maybe we should.\n            }\n\n            if (Clean)\n                return;\n\n            SourceFileCollection newFileCollection = new SourceFileCollection\n            {\n                Profile = _manager.Profile = Profile,\n                Platform = _manager.Platform = Platform,\n                Compression = _manager.Compression = compression,\n                Config = _manager.Config = Config\n            };\n            SuccessCount = 0;\n            ErrorCount = 0;\n\n            // Before building the content, register all files to be built.\n            // (Necessary to correctly resolve external references.)\n            foreach (ContentItem contentItem in _contentItems)\n            {\n                try\n                {\n                    BuildEvent buildEvent = _manager.CreateBuildEvent(contentItem.SourceFile, contentItem.OutputFile, contentItem.Importer, contentItem.Processor, contentItem.ProcessorParams);\n                    OpaqueDataDictionary processorDefaultValues = _manager.GetProcessorDefaultValues(buildEvent.Processor);\n                    PipelineManager.TrackBuildEvent(_manager._buildEventsMap, buildEvent, processorDefaultValues);\n                }\n                catch { /* Ignore exception */ }\n            }\n\n            if (SingleThread)\n                BuildItemsSingleThread(_contentItems, newFileCollection);\n            else\n                BuildItemsMultiThread(_contentItems, newFileCollection);\n\n            // If this is an incremental build we merge the list\n            // of previous content with the new list.\n            if (Incremental && !targetChanged && previousFileCollection != null)\n                newFileCollection.Merge(previousFileCollection);\n\n            // Delete the old file and write the new content \n            // list if we have any to serialize.\n            DeleteFileCollection(intermediatePath);\n            if (newFileCollection.SourceFilesCount > 0)\n                SaveFileCollection(intermediatePath, newFileCollection);\n\n            // Process copy items (files that bypass the content pipeline)\n            CopyItems(_copyItems, projectDirectory, outputPath);\n        }\n\n        private void AddReferences(PipelineManager manager, string projectDirectory, List<string> references)\n        {\n            foreach (string r in references)\n            {\n                string assemblyFile = ReplaceSymbols(r);\n                if (!Path.IsPathRooted(assemblyFile))\n                    assemblyFile = Path.GetFullPath(Path.Combine(projectDirectory, assemblyFile));\n\n                manager.AddAssembly(assemblyFile);\n            }\n        }\n\n        private void AddPackageReferences(PipelineManager manager, string projectDirectory, List<Package> packageReferences)\n        {\n            if (packageReferences.Count == 0)\n                return;\n\n            string intermediateFolder = \"obj/\";\n            intermediateFolder = Path.Combine(projectDirectory, intermediateFolder);\n            intermediateFolder = PathHelper.Normalize(intermediateFolder);\n            if (!Directory.Exists(intermediateFolder))\n                Directory.CreateDirectory(intermediateFolder);\n\n            const string packageReferencesProjFolder = \".Packages\";\n            const string libraryName = \"PackagesLibrary\";\n\n            string fullPackageReferencesFolder = Path.Combine(intermediateFolder, packageReferencesProjFolder);\n            if (!Directory.Exists(fullPackageReferencesFolder))\n                Directory.CreateDirectory(fullPackageReferencesFolder);\n\n            string projFolder = Path.GetFileNameWithoutExtension(manager.ResponseFilename);\n\n            string fullPackageReferencesProjFolder = Path.Combine(fullPackageReferencesFolder, projFolder);\n            fullPackageReferencesProjFolder = PathHelper.Normalize(fullPackageReferencesProjFolder);\n\n            string publishDir = \"publish\";\n\n            bool rebuild = false;\n\n            // load db\n            List<Package> packages = new List<Package>(packageReferences);\n            packages.Sort();\n            string intermediatePackageCollectionPath = Path.Combine(fullPackageReferencesProjFolder, Path.ChangeExtension(libraryName, PackageReferencesCollection.Extension));\n            PackageReferencesCollection previousPackageReferencesCollection = PackageReferencesCollection.LoadBinary(intermediatePackageCollectionPath);\n            if (previousPackageReferencesCollection != null\n            &&  previousPackageReferencesCollection.PackagesCount == packages.Count)\n            {\n                for (int i = 0; i < packages.Count; i++)\n                {\n                    if (packages[i].Name != previousPackageReferencesCollection.Packages[i].Name\n                    ||  packages[i].Version != previousPackageReferencesCollection.Packages[i].Version)\n                    {\n                        rebuild = true;\n                        break;\n                    }\n                }\n            }\n            else rebuild = true;\n\n            // build PackageReferencesLibrary\n            if (rebuild)\n            {\n                string framework = \"netstandard2.0\";\n#if NET8_0_OR_GREATER\n                framework = \"net8.0\";\n#endif\n                string newCmd = String.Format(\"new classlib --framework \\\"{0}\\\" -n {1} -o \\\"{2}\\\"\", framework, libraryName, projFolder);\n                newCmd += \" --force\";\n                ExecuteDotnet(fullPackageReferencesFolder, newCmd);\n\n\n                foreach (Package packageReference in packageReferences)\n                {\n                    string addCmd = String.Format(\"add {0}.csproj package {1} \", libraryName, packageReference.Name);\n                    addCmd += \" --no-restore\";\n                    if (packageReference.Version != String.Empty)\n                        addCmd += \" --version \" + packageReference.Version;\n                    ExecuteDotnet(fullPackageReferencesProjFolder, addCmd);\n                }\n\n                string cleanCmd = String.Format(\"clean {0}.csproj --output {1}\", libraryName, publishDir);\n                cleanCmd += \" --nologo\";\n                ExecuteDotnet(fullPackageReferencesProjFolder, cleanCmd);\n                string publishCmd = String.Format(\"publish {0}.csproj --output {1}\", libraryName, publishDir);\n                publishCmd += \" --nologo\";\n                ExecuteDotnet(fullPackageReferencesProjFolder, publishCmd);\n\n                // save db\n                PackageReferencesCollection dbfile = new PackageReferencesCollection();\n                foreach (Package package in packages)\n                    dbfile.AddPackage(package);\n                dbfile.SaveBinary(intermediatePackageCollectionPath);\n            }\n\n            // load packages\n            string fullPublishDir = Path.Combine(fullPackageReferencesProjFolder, publishDir);\n            fullPublishDir = PathHelper.Normalize(fullPublishDir);\n\n            string[] references = Directory.GetFiles(fullPublishDir, \"*.dll\");\n\n            foreach (string assemblyFile in references)\n            {\n                string assemblyFileName = Path.GetFileNameWithoutExtension(assemblyFile);\n                // skip the empty project and known pipeline libraries.\n                if (assemblyFileName == libraryName)\n                        continue;\n                if (assemblyFileName.StartsWith(\"Xna.Framework\"))\n                    continue;\n\n                manager.AddAssembly(assemblyFile);\n            }\n\n            return;\n        }\n\n        private void ExecuteDotnet(string workingDirectory, string args)\n        {\n            ProcessStartInfo startInfo = new ProcessStartInfo(\"dotnet\", args);\n            startInfo.CreateNoWindow = true;\n            startInfo.WorkingDirectory = workingDirectory;\n            startInfo.UseShellExecute = false;\n            startInfo.RedirectStandardOutput = true;\n            startInfo.RedirectStandardError = true;\n\n            using (Process process = Process.Start(startInfo))\n            {\n                process.WaitForExit();\n                if (process.ExitCode != 0)\n                {\n                    string output = process.StandardOutput.ReadToEnd();\n                    Console.Write(output);\n                    string error = process.StandardError.ReadToEnd();\n                    Console.Write(error);\n                    throw new PipelineException(output + error);\n                }\n            }\n            \n        }\n\n        private void CleanItems(SourceFileCollection previousFileCollection, bool targetChanged)\n        {\n            bool cleanOrRebuild = Clean || Rebuild;\n\n            for (int i = 0; i < previousFileCollection.SourceFilesCount; i++)\n            {\n                string prevSourceFile = previousFileCollection.SourceFiles[i];\n\n                bool inContent = _contentItemsMap.ContainsKey(prevSourceFile.ToLowerInvariant());\n                bool cleanOldContent     = !inContent && !Incremental;\n                bool cleanRebuiltContent =  inContent && cleanOrRebuild;\n                if (targetChanged || cleanRebuiltContent || cleanOldContent)\n                {\n                    string prevDestFile = previousFileCollection.DestFiles[i];\n                    _manager.ResolveOutputFilepath(prevSourceFile, ref prevDestFile);\n                    _manager.CleanContent( prevDestFile);\n                    lock (_manager._buildEventsMap)\n                    {\n                        _manager._buildEventsMap.Remove(prevSourceFile);\n                    }\n                }\n            }\n        }\n\n        private void BuildItemsSingleThread(List<ContentItem> contentItems, SourceFileCollection fileCollection)\n        {\n            foreach (ContentItem contentItem in contentItems)\n            {\n                try\n                {\n                    BuildEvent buildEvent = _manager.CreateBuildEvent(\n                                          contentItem.SourceFile,\n                                          contentItem.OutputFile,\n                                          contentItem.Importer,\n                                          contentItem.Processor,\n                                          contentItem.ProcessorParams\n                                          );\n                    // Load the previous content event if it exists.\n                    BuildEvent cachedBuildEvent = _manager.LoadBuildEvent(buildEvent.DestFile);\n                    _manager.BuildContent(_manager.Logger, buildEvent, cachedBuildEvent, buildEvent.DestFile);\n\n                    fileCollection.AddFile(contentItem.SourceFile, contentItem.OutputFile);\n                    SuccessCount++;\n                }\n                catch (InvalidContentException ex)\n                {\n                    WriteError(ex, contentItem.SourceFile);\n                }\n                catch (PipelineException ex)\n                {\n                    WriteError(ex, contentItem.SourceFile);\n                }\n                catch (Exception ex)\n                {\n                    WriteError(ex, contentItem.SourceFile);\n                }\n            }\n        }\n\n        private void BuildItemsMultiThread(List<ContentItem> contentItems, SourceFileCollection fileCollection)\n        {\n            var buildTaskQueue = new Queue<Task<BuildEvent>>();\n            var activeBuildTasks = new List<Task<BuildEvent>>();\n            bool firstTask = true;\n\n            int maxConcurrentTasks = Environment.ProcessorCount;\n\n            int ci = 0;\n            while (ci < contentItems.Count || activeBuildTasks.Count > 0 || buildTaskQueue.Count > 0)\n            {\n                // Create build tasks.\n                while (activeBuildTasks.Count < maxConcurrentTasks && ci < contentItems.Count)\n                {\n                    BuildAsyncState buildState = new BuildAsyncState()\n                    {\n                        SourceFile = contentItems[ci].SourceFile,\n                        OutputFile = contentItems[ci].OutputFile,\n                        Importer = contentItems[ci].Importer,\n                        Processor = contentItems[ci].Processor,\n                        ProcessorParams = contentItems[ci].ProcessorParams,\n                        Logger = new ConsoleAsyncLogger(_manager.Logger),\n                    };\n                    buildState.Logger.Immediate = firstTask;\n\n                    Task<BuildEvent> task = Task.Factory.StartNew<BuildEvent>((stateobj) =>\n                    {\n                        BuildAsyncState state = stateobj as BuildAsyncState;\n                        //Console.WriteLine(\"Task Started - \" + Path.GetFileName(state.SourceFile));\n                        BuildEvent buildEvent = _manager.CreateBuildEvent(\n                                              state.SourceFile,\n                                              state.OutputFile,\n                                              state.Importer,\n                                              state.Processor,\n                                              state.ProcessorParams\n                                              );\n                        // Load the previous content event if it exists.\n                        BuildEvent cachedBuildEvent = _manager.LoadBuildEvent(buildEvent.DestFile);\n                        _manager.BuildContent(state.Logger, buildEvent, cachedBuildEvent, buildEvent.DestFile);\n                        //Console.WriteLine(\"Task Ended - \" + Path.GetFileName(state.SourceFile));\n                        return buildEvent;\n                    }, buildState, TaskCreationOptions.PreferFairness);\n                    buildTaskQueue.Enqueue(task);\n                    activeBuildTasks.Add(task);\n                    firstTask = false;\n                    ci++;\n                }\n\n                if (buildTaskQueue.Count > 0)\n                {\n                    // Get task at the top of the queue.\n                    var topTask = buildTaskQueue.Peek();\n                    var topBuildState = topTask.AsyncState as BuildAsyncState;\n                    topBuildState.Logger.Immediate = true;\n\n                    // Remove task from queue if completed.\n                    if (topTask.IsCompleted || topTask.IsCanceled || topTask.IsFaulted)\n                    {\n                        buildTaskQueue.Dequeue();\n                        //flash log\n                        topBuildState.Logger.Flush();\n\n                        if (topTask.IsFaulted)\n                        {\n                            if (topTask.Exception.InnerException is InvalidContentException)\n                            {\n                                InvalidContentException ex = topTask.Exception.InnerException as InvalidContentException;\n                                WriteError(ex, topBuildState.SourceFile);\n                            }\n                            else if (topTask.Exception.InnerException is PipelineException)\n                            {\n                                PipelineException ex = topTask.Exception.InnerException as PipelineException;\n                                WriteError(ex, topBuildState.SourceFile);\n                            }\n                            else\n                            {\n                                Exception ex = topTask.Exception.InnerException;\n                                WriteError(ex, topBuildState.SourceFile);\n                            }\n                        }\n                        else if (topTask.IsCanceled)\n                        {\n                            //\n                        }\n\n                        continue;\n                    }\n                }\n\n                Task.WaitAny(activeBuildTasks.ToArray());\n\n                // Remove completed tasks.\n                for (int i = activeBuildTasks.Count - 1; i >= 0; i--)\n                {\n                    Task<BuildEvent> task = activeBuildTasks[i];\n                    if (task.IsCompleted || task.IsCanceled || task.IsFaulted)\n                    {\n                        activeBuildTasks.RemoveAt(i);\n                        if (task.IsCompleted)\n                        {\n                            BuildAsyncState buildState = task.AsyncState as BuildAsyncState;\n\n                            fileCollection.AddFile(buildState.SourceFile, buildState.OutputFile);\n                            SuccessCount++;\n                        }\n                    }\n                }\n            }\n        }\n\n        private void CopyItems(List<CopyItem> copyItems, string projectDirectory, string outputPath)\n        {\n            object syncHandle = new object();\n\n            Parallel.ForEach(copyItems, (item) =>\n            {\n                try\n                {\n                    // Figure out an asset name relative to the project directory,\n                    // retaining the file extension.\n                    // Note that replacing a sub-path like this requires consistent\n                    // directory separator characters.\n                    string relativeName = item.Link;\n                    if (string.IsNullOrWhiteSpace(relativeName))\n                        relativeName = item.SourceFile.Replace(projectDirectory, string.Empty)\n                                            .TrimStart(Path.DirectorySeparatorChar)\n                                            .TrimStart(Path.AltDirectorySeparatorChar);\n                    string dest = Path.Combine(outputPath, relativeName);\n\n                    // Only copy if the source file is newer than the destination.\n                    // We may want to provide an option for overriding this, but for\n                    // nearly all cases this is the desired behavior.\n                    if (File.Exists(dest) && !Rebuild)\n                    {\n                        DateTime srcTime = File.GetLastWriteTimeUtc(item.SourceFile);\n                        DateTime dstTime = File.GetLastWriteTimeUtc(dest);\n                        if (srcTime <= dstTime)\n                        {\n                            lock (syncHandle)\n                            {\n                                if (!this.Quiet)\n                                {\n                                    string skipSourceFileOutput = String.Format(\"Skipping {0}\", item.SourceFile);\n                                    //if (!string.IsNullOrEmpty(item.Link))\n                                    //    skipSourceFileOutput = String.Format(\"Skipping {0} => {1}\", item.SourceFile, item.Link);\n                                    Console.WriteLine(skipSourceFileOutput);\n                                }\n                                SuccessCount++;\n                                return;\n                            }\n                        }\n                    }\n\n                    DateTime startTime = DateTime.UtcNow;\n\n                    // Create the destination directory if it doesn't already exist.\n                    string destPath = Path.GetDirectoryName(dest);\n                    if (!Directory.Exists(destPath))\n                        Directory.CreateDirectory(destPath);\n\n                    File.Copy(item.SourceFile, dest, true);\n\n                    // Destination file should not be read-only even if original was.\n                    FileAttributes fileAttr = File.GetAttributes(dest);\n                    fileAttr = fileAttr & (~FileAttributes.ReadOnly);\n                    File.SetAttributes(dest, fileAttr);\n\n                    TimeSpan buildTime = DateTime.UtcNow - startTime;\n\n                }\n                catch (Exception ex)\n                {\n                    lock (syncHandle)\n                    {\n                        string buildSourceFileOutput = String.Format(\"{0}\", item.SourceFile);\n                        if (!string.IsNullOrEmpty(item.Link))\n                        {\n                            //buildSourceFileOutput = String.Format(\"{0} => {1}\", item.SourceFile, item.Link);\n                        }\n                        Console.WriteLine(buildSourceFileOutput);\n                        WriteError(ex, item.SourceFile);\n                        ErrorCount++;\n                        return;\n                    }\n                }\n\n                lock (syncHandle)\n                {\n                    string buildSourceFileOutput = String.Format(\"{0}\", item.SourceFile);\n                    if (!string.IsNullOrEmpty(item.Link))\n                    {\n                        //buildSourceFileOutput = String.Format(\"{0} => {1}\", item.SourceFile, item.Link);\n                    }\n                    Console.WriteLine(buildSourceFileOutput);\n                    SuccessCount++;\n                    return;\n                }\n            });\n        }\n        \n        private void WriteError(InvalidContentException ex, string sourceFile)\n        {\n            string message = string.Empty;\n            if (ex.ContentIdentity != null && !string.IsNullOrEmpty(ex.ContentIdentity.SourceFilename))\n            {\n                message = ex.ContentIdentity.SourceFilename;\n                if (!string.IsNullOrEmpty(ex.ContentIdentity.FragmentIdentifier))\n                    message += \"(\" + ex.ContentIdentity.FragmentIdentifier + \")\";\n                else\n                    message += \" \";\n            }\n            else\n            {\n                message = sourceFile;\n                message += \" \";\n            }\n            message += \": error \";\n\n            // extract errorCode from message\n            System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(ex.Message, @\"([A-Z]+[0-9]+):(.+)\");\n            if (match.Success || match.Groups.Count == 2)\n                message += match.Groups[1].Value + \" : \" + match.Groups[2].Value;\n            else\n                message += \": \" + ex.Message;\n\n            Console.Error.WriteLine(message);\n            ErrorCount++;\n        }\n\n        private void WriteError(PipelineException ex, string sourceFile)\n        {\n            Console.Error.WriteLine(\"{0} : error : {1}\", sourceFile, ex.Message);\n            if (ex.InnerException != null)\n                Console.Error.WriteLine(ex.InnerException.ToString());\n            ErrorCount++;\n        }\n\n        private void WriteError(Exception ex, string sourceFile)\n        {\n            Console.Error.WriteLine(\"{0} : error : {1}\", sourceFile, ex.Message);\n            if (ex.InnerException != null)\n                Console.Error.WriteLine(ex.InnerException.ToString());\n            ErrorCount++;\n        }\n        \n        private void DeleteFileCollection(string intermediatePath)\n        {\n            string dbname = _responseFilename;\n            if (dbname == String.Empty)\n                dbname = PipelineManager.DefaultFileCollectionFilename;\n\n            string intermediateFileCollectionPath = Path.Combine(intermediatePath, Path.ChangeExtension(dbname, SourceFileCollection.Extension));\n            if (File.Exists(intermediateFileCollectionPath))\n                File.Delete(intermediateFileCollectionPath);\n        }\n\n        private void SaveFileCollection(string intermediatePath, SourceFileCollection fileCollection)\n        {\n            string dbname = _responseFilename;\n            if (dbname == String.Empty)\n                dbname = PipelineManager.DefaultFileCollectionFilename;\n\n            string intermediateFileCollectionPath = Path.Combine(intermediatePath, Path.ChangeExtension(dbname, SourceFileCollection.Extension));\n            fileCollection.SaveBinary(intermediateFileCollectionPath);\n        }\n\n        private SourceFileCollection LoadFileCollection(string intermediatePath)\n        {\n            string dbname = _responseFilename;\n            if (dbname == String.Empty)\n                dbname = PipelineManager.DefaultFileCollectionFilename;\n\n            string intermediateFileCollectionPath = Path.Combine(intermediatePath, Path.ChangeExtension(dbname, SourceFileCollection.Extension));\n            return SourceFileCollection.LoadBinary(intermediateFileCollectionPath);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/Directory.Build.props",
    "content": "<Project>\n\n\t<PropertyGroup>\n\t\t<BaseIntermediateOutputPath>obj\\$(MSBuildProjectName)\\</BaseIntermediateOutputPath>\n\t</PropertyGroup>\t\n\n</Project>\n\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/ImporterContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    internal class ImporterContext : ContentImporterContext\n    {\n        private readonly PipelineManager _manager;\n        ConsoleLogger _logger;\n        private readonly BuildEvent _buildEvent;\n\n        public ImporterContext(PipelineManager manager, ConsoleLogger logger, BuildEvent buildEvent)\n        {\n            _manager = manager;\n            _logger = logger;\n            _buildEvent = buildEvent;\n        }\n\n        public override string IntermediateDirectory { get { return _manager.IntermediateDirectory; } }\n        public override string OutputDirectory { get { return _manager.OutputDirectory; } }\n        public override ContentBuildLogger Logger { get { return _logger; } }\n\n        public override void AddDependency(string filename)\n        {            \n            if (!_buildEvent.Dependencies.Contains(filename))\n                _buildEvent.Dependencies.Add(filename);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/MGCB.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>\n    <TargetFrameworks>net48;net8.0-windows;net8.0</TargetFrameworks>\n    <ProjectGuid>{4243474D-572E-6E69-646F-77734D474342}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Microsoft.Xna.Framework.Content.Pipeline.Builder</RootNamespace>\n    <AssemblyName>MGCB</AssemblyName>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS1591;CS1574;CS0419</NoWarn>\n    <GenerateDocumentationFile>False</GenerateDocumentationFile>\n    <OutputPath>bin\\Windows\\$(Platform)\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\Windows\\$(Platform)\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>$(DefineConstants);WINDOWSDX</DefineConstants>\n    <LangVersion>7.3</LangVersion>\n    <ApplicationIcon>App.ico</ApplicationIcon>\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(TargetFramework)' == 'net8.0-windows' \">\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>true</UseWPF>\n    <RuntimeIdentifiers>win-x64</RuntimeIdentifiers>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>\n  </PropertyGroup>\n\t\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"AssertListener.cs\" />\n    <Compile Include=\"CompressionMethod.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"BuildAsyncState.cs\" />\n    <Compile Include=\"BuildEvent.cs\" />\n    <Compile Include=\"CommandLineParser.cs\" />\n    <Compile Include=\"ConsoleAsyncLogger.cs\" />\n    <Compile Include=\"ConsoleLogger.cs\" />\n    <Compile Include=\"ContentBuilder.cs\" />\n    <Compile Include=\"ImporterContext.cs\" />\n    <Compile Include=\"Package.cs\" />\n    <Compile Include=\"PackageReferencesCollection.cs\" />\n    <Compile Include=\"PathHelper.cs\" />\n    <Compile Include=\"PipelineManager.cs\" />\n    <Compile Include=\"ProcessorContext.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"SourceFileCollection.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"App.ico\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Design\\Xna.Framework.Design.csproj\">\n      <Project>{E37F98D7-C4E8-4556-B322-AEF99638ECE1}</Project>\n      <Name>Xna.Framework.Design</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj\">\n      <Project>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</Project>\n      <Name>Xna.Framework.Audio</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj\">\n      <Project>{6B3E56F7-C567-463C-9746-0244FD959322}</Project>\n      <Name>Xna.Framework.Devices</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj\">\n      <Project>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</Project>\n      <Name>Xna.Framework.Storage</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.XR\\Xna.Framework.XR.csproj\">\n      <Project>{6D0D985D-B256-4208-9E78-77897D461698}</Project>\n      <Name>Xna.Framework.XR</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509f44-3566-4b79-bb47-c7c6e2aa2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\">\n      <Project>{acd26013-5730-4caf-9468-3baae867a8a2}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Audio</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\">\n      <Project>{7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj\">\n      <Project>{476ee43e-e93b-4019-b8b7-ad52c4216456}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics.MojoProcessor</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj\">\n      <Project>{63486463-8aee-483e-862a-7720cd62b4df}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Media</Name>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0-windows' Or '$(TargetFramework)' == 'net48' \">\n    <ProjectReference Include=\"..\\..\\Platforms\\Kni.Platform.WinForms.DX11.csproj\">\n      <Project>{7DE47032-A904-4C29-BD22-2D235E8D91BA}</Project>\n      <Name>Kni.Platform.WinForms.DX11</Name>\n    </ProjectReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/Package.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    public struct Package : IComparable<Package>\n    {\n        public string Name;\n        public string Version;\n\n        public static Package Parse(string packageReference)\n        {\n            packageReference.Trim();\n\n            Package package;\n            package.Name = packageReference;\n            package.Version = String.Empty;\n\n            string[] split = packageReference.Split(' ');\n            if (split.Length == 2)\n            {\n                package.Name = split[0].Trim();\n                package.Version = split[1].Trim();\n            }\n\n            return package;\n        }\n\n        public override string ToString()\n        {\n            string result = this.Name;\n            if (this.Version != String.Empty)\n                result += \" \" + this.Version;\n\n            return result;\n        }\n\n        int IComparable<Package>.CompareTo(Package other)\n        {\n            int compName = this.Name.CompareTo(other.Name);\n            if (compName != 0)\n                return compName;\n\n            int compVersion = this.Version.CompareTo(other.Version);\n            if (compVersion != 0)\n                return compVersion;\n\n            return 0;\n        }\n    }\n}"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/PackageReferencesCollection.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    public sealed class PackageReferencesCollection\n    {\n        public const string Extension = \".kniContent\";\n       \n        public List<Package> Packages { get; set; }\n\n\n        public PackageReferencesCollection()\n        {\n            Packages = new List<Package>();\n        }\n\n        public void SaveBinary(string filePath)\n        {\n            using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))\n            using (var writer = new PackageReferencesCollectionBinaryWriter(stream))\n            {\n                writer.Write(this);\n            }\n        }\n\n        public static PackageReferencesCollection LoadBinary(string filePath)\n        {\n            try\n            {\n                if (!File.Exists(filePath))\n                    return null;\n\n                using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None))\n                using (var reader = new PackageReferencesCollectionBinaryReader(stream))\n                {\n                    PackageReferencesCollection result = new PackageReferencesCollection();\n                    reader.Read(result);\n                    return result;\n                }\n            }\n            catch (Exception)\n            {\n                return null;\n            }\n        }\n\n        public int PackagesCount { get { return this.Packages.Count; } }\n\n        internal void AddPackage(Package package)\n        {\n            this.Packages.Add(package);\n        }\n\n        internal class PackageReferencesCollectionBinaryWriter : BinaryWriter\n        {\n            private const string Header = \"KNIC\"; // content db\n            private const short MajorVersion =  3;\n            private const short MinorVersion = 15;\n            private const int DataType = 3; // PackageReferencesCollection data\n\n\n            public PackageReferencesCollectionBinaryWriter(Stream output) : base(output)\n            {\n            }\n\n            internal void Write(PackageReferencesCollection value)\n            {\n                Write((byte)Header[0]);\n                Write((byte)Header[1]);\n                Write((byte)Header[2]);\n                Write((byte)Header[3]);\n                Write((Int16)MajorVersion);\n                Write((Int16)MinorVersion);\n                Write((Int32)DataType);\n                Write((Int32)0); // reserved\n\n\n                WritePackedInt(value.Packages.Count);\n                for (int i = 0; i < value.Packages.Count; i++)\n                {\n                    Write(value.Packages[i].Name);\n                    Write(value.Packages[i].Version);\n                }\n\n                return;\n            }\n\n            protected void WritePackedInt(int value)\n            {\n                // write zigzag encoded int\n                int zzint = ((value << 1) ^ (value >> 31));\n                Write7BitEncodedInt(zzint);\n            }\n\n            private void WriteStringOrNull(string value)\n            {\n                if (value != null)\n                {\n                    Write(true);\n                    Write(value);\n                }\n                else\n                    Write(false);\n            }\n\n        }\n\n        internal class PackageReferencesCollectionBinaryReader : BinaryReader\n        {\n            private const string Header = \"KNIC\"; // content db\n            private const short MajorVersion =  3;\n            private const short MinorVersion = 15;\n            private const int DataType = 3; // PackageReferencesCollection data\n\n\n            public PackageReferencesCollectionBinaryReader(Stream output) : base(output)\n            {\n            }\n\n            internal void Read(PackageReferencesCollection value)\n            {\n                if (ReadByte() != Header[0]\n                ||  ReadByte() != Header[1]\n                ||  ReadByte() != Header[2]\n                ||  ReadByte() != Header[3])\n                    throw new Exception(\"Invalid file.\");\n\n                if (ReadInt16() != MajorVersion\n                ||  ReadInt16() != MinorVersion)\n                    throw new Exception(\"Invalid file version.\");\n\n                int dataType = ReadInt32(); \n                if (dataType != DataType)\n                    throw new Exception(\"Invalid data type.\");\n\n                int reserved0 = ReadInt32();\n\n                int packagesCount = ReadPackedInt();\n                value.Packages = new List<Package>(packagesCount);\n                for (int i = 0; i < packagesCount; i++)\n                {\n                    Package package;\n                    package.Name = ReadString();\n                    package.Version = ReadString();\n                    value.Packages.Add(package);\n                }\n\n                return;\n            }\n\n            private int ReadPackedInt()\n            {\n                unchecked\n                {\n                    // read zigzag encoded int\n                    int zzint = Read7BitEncodedInt();\n                    return ((int)((uint)zzint >> 1) ^ (-(zzint & 1)));\n                }\n            }\n\n            private string ReadStringOrNull()\n            {\n                if (ReadBoolean())\n                    return ReadString();\n                else\n                    return null;\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/PathHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    internal static class PathHelper\n    {\n        /// <summary>\n        /// The/universal/standard/directory/seperator.\n        /// </summary>\n        public const char DirectorySeparator = '/';\n\n        /// <summary>\n        /// Returns a path string normalized to the/universal/standard.\n        /// </summary>\n        public static string Normalize(string path)\n        {\n            return path.Replace('\\\\', '/');\n        }\n\n        /// <summary>\n        /// Returns a directory path string normalized to the/universal/standard\n        /// with a trailing seperator.\n        /// </summary>\n        public static string NormalizeDirectory(string path)\n        {\n            return path.Replace('\\\\', '/').TrimEnd('/') + '/';\n        }\n\n        /// <summary>\n        /// Returns a path string normalized to the\\Windows\\standard.\n        /// </summary>\n        public static string NormalizeWindows(string path)\n        {\n            return path.Replace('/', '\\\\');\n        }\n\n        /// <summary>\n        /// Returns a path relative to the base path.\n        /// </summary>\n        /// <param name=\"basePath\">The path to make relative to.  Must end with directory seperator.</param>\n        /// <param name=\"path\">The path to be made relative to the basePath.</param>\n        /// <returns>The relative path or the original string if it is not absolute or cannot be made relative.</returns>\n        public static string GetRelativePath(string basePath, string path)\n        {\n            Uri uri;\n            if (!Uri.TryCreate(path, UriKind.Absolute, out uri))\n                return path;\n\n            uri = new Uri(basePath).MakeRelativeUri(uri);\n            var str = Uri.UnescapeDataString(uri.ToString());\n\n            return Normalize(str);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/PipelineManager.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    internal class PipelineManager\n    {\n        [DebuggerDisplay(\"ImporterInfo: {type.Name}\")]\n        private struct ImporterInfo\n        {\n            public ContentImporterAttribute attribute;\n            public Type type;\n            public DateTime assemblyTimestamp;\n        };\n\n        private List<ImporterInfo> _importers;\n\n        [DebuggerDisplay(\"ProcessorInfo: {type.Name}\")]\n        private struct ProcessorInfo\n        {\n            public ContentProcessorAttribute attribute;\n            public Type type;\n            public DateTime assemblyTimestamp;\n        };\n\n        private List<ProcessorInfo> _processors;\n\n        private List<Type> _writers;\n\n        // Keep track of all built assets. (Required to resolve automatic names \"AssetName_n\".)\n        //   Key = absolute, normalized path of source file\n        //   Value = list of build events\n        // (Note: When using external references, an asset may be built multiple times\n        // with different parameters.)\n        internal readonly Dictionary<string, List<BuildEvent>> _buildEventsMap;\n\n        // Store default values for content processor parameters. (Necessary to compare processor\n        // parameters. See PipelineBuildEvent.AreParametersEqual.)\n        //   Key = name of content processor\n        //   Value = processor parameters\n        private readonly Dictionary<string, OpaqueDataDictionary> _processorDefaultValues;\n\n        private readonly SortedSet<string> _processingBuildEvents;\n\n        public string ProjectDirectory { get; private set; }\n        public string ResponseFilename { get; private set; }\n        public string OutputDirectory { get; private set; }\n        public string IntermediateDirectory { get; private set; }\n        public bool Quiet { get; private set; }\n\n        private ContentCompiler _compiler;\n\n        internal readonly ConsoleLogger Logger;\n\n        public List<string> Assemblies { get; private set; }\n\n        /// <summary>\n        /// The current target graphics profile for which all content is built.\n        /// </summary>\n        public GraphicsProfile Profile { get; set; }\n\n        /// <summary>\n        /// The current target platform for which all content is built.\n        /// </summary>\n        public TargetPlatform Platform { get; set; }\n\n        /// <summary>\n        /// The build configuration passed thru to content processors.\n        /// </summary>\n        public string Config { get; set; }\n\n        /// <summary>\n        /// Gets or sets the compression method.\n        /// </summary>\n        public ContentCompression Compression { get; set; }\n\n        internal const String DefaultFileCollectionFilename = \"assetsdb.kniContent\";\n\n        public PipelineManager(string projectDir, string responseFilename, string outputDir, string intermediateDir, bool quiet)\n        {\n            _buildEventsMap = new Dictionary<string, List<BuildEvent>>();\n            _processorDefaultValues = new Dictionary<string, OpaqueDataDictionary>();\n            _processingBuildEvents = new SortedSet<string>();\n\n            Assemblies = new List<string>();\n            Logger = new ConsoleLogger();\n\n            ProjectDirectory = PathHelper.NormalizeDirectory(projectDir);\n            ResponseFilename = responseFilename;\n            OutputDirectory = PathHelper.NormalizeDirectory(outputDir);\n            IntermediateDirectory = PathHelper.NormalizeDirectory(intermediateDir);\n            Quiet = quiet;\n        }\n\n        public void AddAssembly(string assemblyFilePath)\n        {\n            if (assemblyFilePath == null)\n                throw new ArgumentException(\"assemblyFilePath cannot be null!\");\n            if (!Path.IsPathRooted(assemblyFilePath))\n                throw new ArgumentException(\"assemblyFilePath must be absolute!\");\n\n            // Make sure we're not adding the same assembly twice.\n            assemblyFilePath = PathHelper.Normalize(assemblyFilePath);\n            if (!this.Assemblies.Contains(assemblyFilePath))\n            {\n                this.Assemblies.Add(assemblyFilePath);\n\n                //TODO need better way to update caches\n                _processors = null;\n                _importers = null;\n                _writers = null;\n            }\n        }\n\n        private void ResolveAssemblies()\n        {\n            _importers = new List<ImporterInfo>();\n            _processors = new List<ProcessorInfo>();\n            _writers = new List<Type>();\n\n            // import the build-in Processors\n            LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.IContentProcessor).Assembly); // Common\n            LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.SoundEffectProcessor).Assembly); // Audio\n            LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.VideoProcessor).Assembly); // Media\n            LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.TextureProcessor).Assembly); // Graphics\n            LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.EffectProcessor).Assembly); // Graphics Effects\n\n            // import the referenced Processors\n            foreach (string assemblyPath in Assemblies)\n            {\n                try\n                {\n                    LoadAssembly(Assembly.LoadFrom(assemblyPath));\n                }\n                catch (BadImageFormatException e)\n                {\n                    Logger.LogWarning(null, null, \"Assembly is either corrupt or built using a different \" +\n                        \"target platform than this process. Reference another target architecture (x86, x64, \" +\n                        \"AnyCPU, etc.) of this assembly. '{0}': {1}\", assemblyPath, e.Message);\n                    // The assembly failed to load... nothing\n                    // we can do but ignore it.\n                    continue;\n                }\n                catch (Exception e)\n                {\n                    Logger.LogWarning(null, null, \"Failed to load assembly '{0}': {1}\", assemblyPath, e.Message);\n                    continue;\n                }\n            }\n        }\n\n        private void LoadAssembly(Assembly asm)\n        {\n            Type[] exportedTypes;\n            DateTime assemblyTimestamp;\n\n            try\n            {\n                exportedTypes = asm.GetTypes();\n                assemblyTimestamp = File.GetLastWriteTime(asm.Location);\n            }\n            catch (ReflectionTypeLoadException e)\n            {\n                string missingTypes = String.Empty;\n                foreach (var le in e.LoaderExceptions)\n                    missingTypes += le.Message;\n\n                Logger.LogWarning(null, null, missingTypes +\n                    \" '{0}': {1}\", asm.Location, e.Message);\n                // The assembly failed to load... nothing\n                // we can do but ignore it.\n                return;\n            }\n            catch (Exception e)\n            {\n                Logger.LogWarning(null, null, \"Failed to load assembly '{0}': {1}\", asm.Location, e.Message);\n                return;\n            }\n\n            foreach (Type type in exportedTypes)\n            {\n                if (type.IsAbstract)\n                    continue;\n\n                if (type.GetInterface(@\"IContentImporter\") != null)\n                {\n                    var attributes = type.GetCustomAttributes(typeof(ContentImporterAttribute), false);\n                    if (attributes.Length != 0)\n                    {\n                        var importerAttribute = attributes[0] as ContentImporterAttribute;\n                        _importers.Add(new ImporterInfo\n                        {\n                            attribute = importerAttribute,\n                            type = type,\n                            assemblyTimestamp = assemblyTimestamp\n                        });\n                    }\n                    else\n                    {\n                        // If no attribute specify default one\n                        var importerAttribute = new ContentImporterAttribute(\".*\");\n                        importerAttribute.DefaultProcessor = \"\";\n                        importerAttribute.DisplayName = type.Name;\n                        var importerInfo = new ImporterInfo\n                        {\n                            attribute = importerAttribute,\n                            type = type,\n                            assemblyTimestamp = assemblyTimestamp\n                        };\n                        if (_importers.Contains(importerInfo))\n                        {\n                            Logger.LogWarning(null, null, \"Duplicate Type '{0}': {1}\", type.Name);\n                            continue;\n                        }\n                        _importers.Add(importerInfo);\n                    }\n                }\n                else if (type.GetInterface(@\"IContentProcessor\") != null)\n                {\n                    var attributes = type.GetCustomAttributes(typeof(ContentProcessorAttribute), false);\n                    if (attributes.Length != 0)\n                    {\n                        var processorAttribute = attributes[0] as ContentProcessorAttribute;\n                        var processorInfo = new ProcessorInfo\n                        {\n                            attribute = processorAttribute,\n                            type = type,\n                            assemblyTimestamp = assemblyTimestamp\n                        };\n                        if (_processors.Contains(processorInfo))\n                        {\n                            Logger.LogWarning(null, null, \"Duplicate Type '{0}': {1}\", type.Name);\n                            continue;\n                        }\n                        _processors.Add(processorInfo);\n                    }\n                }\n                else if (type.GetInterface(@\"ContentTypeWriter\") != null)\n                {\n                    // TODO: This doesn't work... how do i find these?\n                    _writers.Add(type);\n                }\n            }\n        }\n\n        public Type[] GetImporterTypes()\n        {\n            if (_importers == null)\n                ResolveAssemblies();\n\n            List<Type> types = new List<Type>();\n\n            foreach (var item in _importers) \n            {\n                types.Add(item.type);\n            }\n\n            return types.ToArray();\n        }\n\n        public Type[] GetProcessorTypes()\n        {\n            if (_processors == null)\n                ResolveAssemblies();\n            \n            List<Type> types = new List<Type>();\n            \n            foreach (var item in _processors) \n            {\n                types.Add(item.type);\n            }\n            \n            return types.ToArray();\n        }\n\n        private IContentImporter CreateImporter(string importerName)\n        {\n            if (_importers == null)\n                ResolveAssemblies();\n\n            // Search for the importer.\n            foreach (var info in _importers)\n            {\n                if (info.type.Name.Equals(importerName))\n                    return Activator.CreateInstance(info.type) as IContentImporter;\n            }\n\n            throw new PipelineException(\"Failed to create importer '{0}'\", importerName);\n        }\n\n        public string FindImporterByExtension(string ext)\n        {\n            if (_importers == null)\n                ResolveAssemblies();\n\n            // Search for the importer.\n            foreach (var info in _importers)\n            {\n                if (info.attribute.FileExtensions.Any(e => e.Equals(ext, StringComparison.InvariantCultureIgnoreCase)))\n                    return info.type.Name;\n            }\n\n            return null;\n        }\n\n        public DateTime GetImporterAssemblyTimestamp(string name)\n        {\n            if (_importers == null)\n                ResolveAssemblies();\n\n            // Search for the importer.\n            foreach (var info in _importers)\n            {\n                if (info.type.Name.Equals(name))\n                    return info.assemblyTimestamp;\n            }\n\n            return DateTime.MaxValue;\n        }\n\n        public string FindDefaultProcessor(string importer)\n        {\n            if (_importers == null)\n                ResolveAssemblies();\n\n            // Search for the importer.\n            foreach (var info in _importers)\n            {\n                if (info.type.Name == importer)\n                    return info.attribute.DefaultProcessor;\n            }\n\n            return null;\n        }\n\n        public Type GetProcessorType(string name)\n        {\n            if (_processors == null)\n                ResolveAssemblies();\n\n            // Search for the processor type.\n            foreach (var info in _processors)\n            {\n                if (info.type.Name.Equals(name))\n                    return info.type;\n            }\n\n            return null;\n        }\n\n        public void ResolveImporterAndProcessor(string sourceFilepath, ref string importerName, ref string processorName)\n        {\n            // Resolve the importer name.\n            if (string.IsNullOrEmpty(importerName))\n                importerName = FindImporterByExtension(Path.GetExtension(sourceFilepath));\n            if (string.IsNullOrEmpty(importerName))\n                throw new Exception(string.Format(\"Couldn't find a default importer for '{0}'!\", sourceFilepath));\n\n            // Resolve the processor name.\n            if (string.IsNullOrEmpty(processorName))\n                processorName = FindDefaultProcessor(importerName);\n            if (string.IsNullOrEmpty(processorName))\n                throw new Exception(string.Format(\"Couldn't find a default processor for importer '{0}'!\", importerName));\n        }\n\n        public IContentProcessor CreateProcessor(string name, OpaqueDataDictionary processorParameters)\n        {\n            Type processorType = GetProcessorType(name);\n            if (processorType == null)\n                return null;\n\n            // Create the processor.\n            IContentProcessor processor = (IContentProcessor)Activator.CreateInstance(processorType);\n\n            // Convert and set the parameters on the processor.\n            foreach (var param in processorParameters)\n            {\n                PropertyInfo property = processorType.GetProperty(param.Key, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance);\n                if (property == null || property.GetSetMethod(false) == null)\n                    continue;\n\n                // If the property value is already of the correct type then set it.\n                if (property.PropertyType.IsInstanceOfType(param.Value))\n                    property.SetValue(processor, param.Value, null);\n                else\n                {\n                    // Find a type converter for this property.\n                    TypeConverter typeConverter = TypeDescriptor.GetConverter(property.PropertyType);\n                    if (typeConverter.CanConvertFrom(param.Value.GetType()))\n                    {\n                        object propValue = typeConverter.ConvertFrom(null, CultureInfo.InvariantCulture, param.Value);\n                        property.SetValue(processor, propValue, null);\n                    }\n                }\n            }\n\n            return processor;\n        }\n\n        /// <summary>\n        /// Gets the default values for the content processor parameters.\n        /// </summary>\n        /// <param name=\"processorName\">The name of the content processor.</param>\n        /// <returns>\n        /// A dictionary containing the default value for each parameter. Returns\n        /// <see langword=\"null\"/> if the content processor has not been created yet.\n        /// </returns>\n        public OpaqueDataDictionary GetProcessorDefaultValues(string processorName)\n        {\n            // null is not allowed as key in dictionary.\n            if (processorName == null)\n                processorName = string.Empty;\n\n            OpaqueDataDictionary processorDefaultValues;\n\n            lock (_processorDefaultValues)\n            {\n                if (!_processorDefaultValues.TryGetValue(processorName, out processorDefaultValues))\n                {\n                    // Create the content processor instance and read the default values.\n                    processorDefaultValues = new OpaqueDataDictionary();\n                    var processorType = GetProcessorType(processorName);\n                    if (processorType != null)\n                    {\n                        try\n                        {\n                            var processor = (IContentProcessor)Activator.CreateInstance(processorType);\n                            var properties = processorType.GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance);\n                            foreach (var property in properties)\n                                processorDefaultValues.Add(property.Name, property.GetValue(processor, null));\n                        }\n                        catch\n                        {\n                            // Ignore exception. Will be handled in ProcessContent.\n                        }\n                    }\n\n                    _processorDefaultValues.Add(processorName, processorDefaultValues);\n                }\n            }\n\n            return processorDefaultValues;\n        }\n\n        public DateTime GetProcessorAssemblyTimestamp(string name)\n        {\n            if (_processors == null)\n                ResolveAssemblies();\n\n            // Search for the processor.\n            foreach (var info in _processors)\n            {\n                if (info.type.Name.Equals(name))\n                    return info.assemblyTimestamp;\n            }\n\n            return DateTime.MaxValue;\n        }\n\n        public OpaqueDataDictionary ValidateProcessorParameters(string processorName, OpaqueDataDictionary processorParameters)\n        {\n            OpaqueDataDictionary result = new OpaqueDataDictionary();\n\n            Type processorType = GetProcessorType(processorName);\n            if (processorType == null || processorParameters == null)\n            {\n                return result;\n            }\n\n            foreach (var param in processorParameters)\n            {\n                PropertyInfo property = processorType.GetProperty(param.Key, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance);\n                if (property == null || property.GetSetMethod(false) == null)\n                    continue;\n\n                // Make sure we can assign the value.\n                if (!property.PropertyType.IsInstanceOfType(param.Value))\n                {\n                    // Make sure we can convert the value.\n                    TypeConverter typeConverter = TypeDescriptor.GetConverter(property.PropertyType);\n                    if (!typeConverter.CanConvertFrom(param.Value.GetType()))\n                        continue;\n                }\n\n                result.Add(param.Key, param.Value);\n            }\n\n            return result;\n        }\n\n        internal void ResolveOutputFilepath(string sourceFilepath, ref string outputFilepath)\n        {\n            // If the output path is null... build it from the source file path.\n            if (string.IsNullOrEmpty(outputFilepath))\n            {\n                string filename = Path.GetFileNameWithoutExtension(sourceFilepath) + \".xnb\";\n                string directory = PathHelper.GetRelativePath(ProjectDirectory,\n                                                           Path.GetDirectoryName(sourceFilepath) +\n                                                           Path.DirectorySeparatorChar);\n                outputFilepath = Path.Combine(OutputDirectory, directory, filename);\n            }\n            else\n            {\n                // If the extension is not XNB or the source file extension then add XNB.\n                string sourceExt = Path.GetExtension(sourceFilepath);\n                if (outputFilepath.EndsWith(sourceExt, StringComparison.InvariantCultureIgnoreCase))\n                    outputFilepath = outputFilepath.Substring(0, outputFilepath.Length - sourceExt.Length);\n                if (!outputFilepath.EndsWith(\".xnb\", StringComparison.InvariantCultureIgnoreCase))\n                    outputFilepath += \".xnb\";\n\n                // If the path isn't rooted then put it into the output directory.\n                if (!Path.IsPathRooted(outputFilepath))\n                    outputFilepath = Path.Combine(OutputDirectory, outputFilepath);\n            }\n\n            outputFilepath = PathHelper.Normalize(outputFilepath);\n        }\n\n        private void DeleteBuildEvent(string destFile)\n        {\n            string dbname = ResponseFilename;\n            if (dbname == String.Empty)\n                dbname = DefaultFileCollectionFilename;\n\n            string relativeEventPath = Path.ChangeExtension(PathHelper.GetRelativePath(OutputDirectory, destFile), BuildEvent.Extension);\n            string intermediateEventPath = Path.Combine(IntermediateDirectory, Path.GetFileNameWithoutExtension(dbname), relativeEventPath);\n            if (File.Exists(intermediateEventPath))\n                File.Delete(intermediateEventPath);\n        }\n\n        private void SaveBuildEvent(string destFile, BuildEvent buildEvent)\n        {\n            string dbname = ResponseFilename;\n            if (dbname == String.Empty)\n                dbname = DefaultFileCollectionFilename;\n\n            string relativeEventPath = Path.ChangeExtension(PathHelper.GetRelativePath(OutputDirectory, destFile), BuildEvent.Extension);\n            string intermediateEventPath = Path.Combine(IntermediateDirectory, Path.GetFileNameWithoutExtension(dbname), relativeEventPath);\n            intermediateEventPath = Path.GetFullPath(intermediateEventPath);\n            buildEvent.SaveBinary(intermediateEventPath);\n        }\n\n        internal BuildEvent LoadBuildEvent(string destFile)\n        {\n            string dbname = ResponseFilename;\n            if (dbname == String.Empty)\n                dbname = DefaultFileCollectionFilename;\n\n            string relativeEventPath = Path.ChangeExtension(PathHelper.GetRelativePath(OutputDirectory, destFile), BuildEvent.Extension);\n            string intermediateEventPath = Path.Combine(IntermediateDirectory, Path.GetFileNameWithoutExtension(dbname), relativeEventPath);\n            intermediateEventPath = Path.GetFullPath(intermediateEventPath);\n            return BuildEvent.LoadBinary(intermediateEventPath);\n        }\n\n        internal BuildEvent CreateBuildEvent(string sourceFilepath, string outputFilepath, string importerName, string processorName, OpaqueDataDictionary processorParameters)\n        {\n            sourceFilepath = PathHelper.Normalize(sourceFilepath);\n            ResolveOutputFilepath(sourceFilepath, ref outputFilepath);\n            ResolveImporterAndProcessor(sourceFilepath, ref importerName, ref processorName);\n            OpaqueDataDictionary ProcessorParams = ValidateProcessorParameters(processorName, processorParameters);\n\n            BuildEvent buildEvent = new BuildEvent\n            {\n                SourceFile = sourceFilepath,\n                DestFile = outputFilepath,\n                Importer = importerName,\n                Processor = processorName,\n                Parameters = ProcessorParams,\n            };\n            return buildEvent;\n        }\n\n        internal void BuildContent(ConsoleLogger logger, BuildEvent buildEvent, BuildEvent cachedBuildEvent, string destFilePath)\n        {\n            if (!File.Exists(buildEvent.SourceFile))\n            {\n                logger.LogMessage(\"{0}\", buildEvent.SourceFile);\n                throw new PipelineException(\"The source file '{0}' does not exist!\", buildEvent.SourceFile);\n            }\n\n            logger.PushFile(buildEvent.SourceFile);\n\n            OpaqueDataDictionary processorDefaultValues = GetProcessorDefaultValues(buildEvent.Processor);\n\n            // Keep track of all build events. (Required to resolve automatic names \"AssetName_n\".)\n            TrackBuildEvent(_buildEventsMap, buildEvent, processorDefaultValues);\n\n            bool building = RegisterBuildEvent(buildEvent);\n            bool rebuild = buildEvent.NeedsRebuild(this, cachedBuildEvent);\n            rebuild = rebuild && !building;\n\n            if (rebuild)\n                logger.LogMessage(\"{0}\", buildEvent.SourceFile);\n            if (!rebuild && !this.Quiet)\n                logger.LogMessage(\"Skipping {0}\", buildEvent.SourceFile);\n\n            logger.Indent();\n            try\n            {\n                if (!rebuild && cachedBuildEvent != null)\n                {\n                    // While this asset doesn't need to be rebuilt the dependent assets might.\n                    foreach (string asset in cachedBuildEvent.BuildAsset)\n                    {\n                        BuildEvent assetCachedBuildEvent = LoadBuildEvent(asset);\n\n                        // If we cannot find the cached event for the dependancy\n                        // then we have to trigger a rebuild of the parent content.\n                        if (assetCachedBuildEvent == null)\n                        {\n                            rebuild = true;\n                            break;\n                        }\n\n                        BuildEvent depBuildEvent = new BuildEvent\n                        {\n                            SourceFile = assetCachedBuildEvent.SourceFile,\n                            DestFile = assetCachedBuildEvent.DestFile,\n                            Importer = assetCachedBuildEvent.Importer,\n                            Processor = assetCachedBuildEvent.Processor,\n                            Parameters = assetCachedBuildEvent.Parameters,\n                        };\n\n                        // Give the asset a chance to rebuild.\n                        BuildContent(logger, depBuildEvent, assetCachedBuildEvent, asset);\n                    }\n                }\n\n                // Do we need to rebuild?\n                if (rebuild)\n                {\n                    // Import and process the content.\n                    ContentImporterContext importContext = new ImporterContext(this, logger, buildEvent);\n                    if (!File.Exists(buildEvent.SourceFile))\n                        throw new PipelineException(\"The source file '{0}' does not exist!\", buildEvent.SourceFile);\n                    // Store the last write time of the source file so we can detect if it has been changed.\n                    buildEvent.SourceTime = File.GetLastWriteTime(buildEvent.SourceFile);\n                    object importedObject = ImportContent(buildEvent.Importer, importContext, buildEvent.SourceFile);\n                    ContentProcessorContext processContext = new ProcessorContext(this, logger, buildEvent);\n                    object processedObject = ProcessContent(buildEvent.Processor, processContext, importedObject);\n\n                    // Write the content to disk.\n                    WriteXnb(processedObject, processContext);\n\n                    // Store the last write time of the output XNB here so we can verify it hasn't been tampered with.\n                    buildEvent.DestTime = File.GetLastWriteTime(processContext.OutputFilename);\n                    // Store the timestamp of the DLLs containing the importer and processor.\n                    buildEvent.ImporterTime = GetImporterAssemblyTimestamp(buildEvent.Importer);\n                    buildEvent.ProcessorTime = GetProcessorAssemblyTimestamp(buildEvent.Processor);\n\n                    // Store the new event into the intermediate folder.\n                    SaveBuildEvent(destFilePath, buildEvent);\n                }\n\n            }\n            finally\n            {\n                logger.Unindent();\n                logger.PopFile();\n            }\n        }\n\n        private bool RegisterBuildEvent(BuildEvent buildEvent)\n        {\n            lock (_processingBuildEvents)\n            {\n                if (!_processingBuildEvents.Contains(buildEvent.DestFile))\n                {\n                    _processingBuildEvents.Add(buildEvent.DestFile);\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        public object ImportContent(string importerName, ContentImporterContext importContext, string sourceFile)\n        {\n            IContentImporter importer = CreateImporter(importerName);\n\n            // Try importing the content.\n            object importedObject;\n            try\n            {\n                importedObject = importer.Import(sourceFile, importContext);\n                return importedObject;\n            }\n            catch (PipelineException) { throw; }\n            catch (InvalidContentException) { throw; }\n            catch (Exception inner)\n            {\n                throw new PipelineException(string.Format(\"Importer '{0}' had unexpected failure!\", importerName), inner);\n            }\n        }\n\n        public object ProcessContent(string processorName, ContentProcessorContext processContext, object importedObject)\n        {\n            // The pipelineEvent.Processor can be null or empty. In this case the\n            // asset should be imported but not processed.\n            if (string.IsNullOrEmpty(processorName))\n                return importedObject;\n\n            IContentProcessor processor = CreateProcessor2(processorName, processContext.Parameters, importedObject.GetType());\n\n            // Process the imported object.\n            object processedObject;\n            try\n            {\n                processedObject = processor.Process(importedObject, processContext);\n                return processedObject;\n            }\n            catch (PipelineException) { throw; }\n            catch (InvalidContentException) { throw; }\n            catch (Exception inner)\n            {\n                throw new PipelineException(string.Format(\"Processor '{0}' had unexpected failure!\", processorName), inner);\n            }\n        }\n\n        public void CleanContent(string outputFilepath)\n        {\n            // First try to load the event file.\n            BuildEvent cachedBuildEvent = LoadBuildEvent(outputFilepath);\n            if (cachedBuildEvent != null)\n            {\n                // Remove related output files (non-XNB files) that were copied to the output folder.\n                foreach (var asset in cachedBuildEvent.BuildOutput)\n                {\n                    Logger.LogMessage(\"Cleaning {0}\", asset);\n                    // Remove file (non .xnb file) from output folder.\n                    if (File.Exists(asset))\n                        File.Delete(asset);\n                }\n\n                // Recursively clean additional (nested) assets.\n                foreach (string asset in cachedBuildEvent.BuildAsset)\n                {\n                    BuildEvent assetCachedBuildEvent = LoadBuildEvent(asset);\n                    if (assetCachedBuildEvent != null)\n                    {\n                        string assetOutputFilepath = asset;\n                        ResolveOutputFilepath(string.Empty, ref assetOutputFilepath);\n                        CleanContent(assetOutputFilepath);\n                        continue;\n                    }\n                    \n                    Logger.LogMessage(\"Cleaning {0}\", asset);\n                    // Remove asset (.xnb file) from output folder.\n                    if (File.Exists(asset))\n                        File.Delete(asset);\n                    // Remove event file (.kniContent file) from intermediate folder.\n                    DeleteBuildEvent(asset);\n                }\n            }\n\n            Logger.LogMessage(\"Cleaning {0}\", outputFilepath);\n            // Remove asset (.xnb file) from output folder.\n            if (File.Exists(outputFilepath))\n                File.Delete(outputFilepath);\n            // Remove event file (.kniContent file) from intermediate folder.\n            DeleteBuildEvent(outputFilepath);\n        }\n\n        private void WriteXnb(object content, ContentProcessorContext processContext)\n        {\n            // Make sure the output directory exists.\n            string outputFileDir = Path.GetDirectoryName(processContext.OutputFilename);\n\n            Directory.CreateDirectory(outputFileDir);\n\n            if (_compiler == null)\n                _compiler = new ContentCompiler();\n\n            // Write the XNB.\n            using (Stream stream = new FileStream(processContext.OutputFilename, FileMode.Create, FileAccess.Write, FileShare.None))\n                _compiler.Compile(stream, content, Platform, Profile, Compression, OutputDirectory, outputFileDir);\n        }\n\n        private IContentProcessor CreateProcessor2(string processorName, OpaqueDataDictionary processorParameters, Type importedObjectType)\n        {\n            IContentProcessor processor = CreateProcessor(processorName, processorParameters);\n            if (processor == null)\n                throw new PipelineException(\"Failed to create processor '{0}'\", processorName);\n\n            // Make sure the input type is valid.\n            if (!processor.InputType.IsAssignableFrom(importedObjectType))\n            {\n                throw new PipelineException(\n                    string.Format(\"The type '{0}' cannot be processed by {1} as a {2}!\",\n                    importedObjectType.FullName,\n                    processorName,\n                    processor.InputType.FullName));\n            }\n\n            return processor;\n        }\n\n        /// <summary>\n        /// Stores the pipeline build event (in memory) if no matching event is found.\n        /// </summary>\n        /// <param name=\"buildEvent\">The pipeline build event.</param>\n        internal static void TrackBuildEvent(Dictionary<string, List<BuildEvent>> buildEventsMap, BuildEvent buildEvent, OpaqueDataDictionary processorDefaultValues)\n        {\n            lock (buildEventsMap)\n            {\n                if (!buildEventsMap.TryGetValue(buildEvent.SourceFile, out List<BuildEvent> buildEvents))\n                {\n                    buildEvents = new List<BuildEvent>(1);\n                    buildEventsMap.Add(buildEvent.SourceFile, buildEvents);\n                }\n\n                BuildEvent matchedBuildEvent = FindMatchingEvent(buildEvents, buildEvent.DestFile, buildEvent.Importer, buildEvent.Processor, buildEvent.Parameters, processorDefaultValues);\n                if (matchedBuildEvent == null)\n                    buildEvents.Add(buildEvent);\n            }\n        }\n\n        /// <summary>\n        /// Gets an automatic asset name, such as \"AssetName_0\".\n        /// </summary>\n        /// <param name=\"sourceFileName\">The source file name.</param>\n        /// <param name=\"importerName\">The name of the content importer. Can be <see langword=\"null\"/>.</param>\n        /// <param name=\"processorName\">The name of the content processor. Can be <see langword=\"null\"/>.</param>\n        /// <param name=\"processorParameters\">The processor parameters. Can be <see langword=\"null\"/>.</param>\n        /// <returns>The asset name.</returns>\n        public string GetAssetName(string sourceFileName, string importerName, string processorName, OpaqueDataDictionary processorParameters, ContentBuildLogger logger)\n        {\n            if (!Path.IsPathRooted(sourceFileName))\n                sourceFileName = Path.Combine(this.ProjectDirectory, sourceFileName);\n\n            // Get source file name, which is used for lookup in _pipelineBuildEvents.\n            sourceFileName = PathHelper.Normalize(sourceFileName);\n            string relativeSourceFileName = PathHelper.GetRelativePath(ProjectDirectory, sourceFileName);\n\n            List<BuildEvent> buildEvents;\n\n            lock (_buildEventsMap)\n            {\n                if (_buildEventsMap.TryGetValue(sourceFileName, out buildEvents))\n                {\n                    // This source file has already been build.\n                    // --> Compare pipeline build events.\n                    ResolveImporterAndProcessor(sourceFileName, ref importerName, ref processorName);\n\n                    OpaqueDataDictionary processorDefaultValues = GetProcessorDefaultValues(processorName);\n\n                    BuildEvent matchedBuildEvent = FindMatchingEvent(buildEvents, null, importerName, processorName, processorParameters, processorDefaultValues);\n                    if (matchedBuildEvent != null)\n                    {\n                        // Matching pipeline build event found.\n                        string existingName = matchedBuildEvent.DestFile;\n                        existingName = PathHelper.GetRelativePath(OutputDirectory, existingName);\n                        existingName = existingName.Substring(0, existingName.Length - 4);   // Remove \".xnb\".\n                        return existingName;\n                    }\n\n                    logger.LogMessage(string.Format(\"Warning: Asset {0} built multiple times with different settings.\", relativeSourceFileName));\n                }\n            }\n\n            // No pipeline build event with matching settings found.\n            // Get default asset name by searching the existing .kniContent files.\n            string directoryName = Path.GetDirectoryName(relativeSourceFileName);\n            string fileName = Path.GetFileNameWithoutExtension(relativeSourceFileName);\n            string assetName = Path.Combine(directoryName, fileName);\n            assetName = PathHelper.Normalize(assetName);\n\n            for (int index = 0; ; index++)\n            {\n                string destFile = assetName + '_' + index;\n                BuildEvent existingBuildEvent = LoadBuildEvent(destFile);\n                if (existingBuildEvent == null)\n                    return destFile;\n\n                string existingBuildEventDestFile = existingBuildEvent.DestFile;\n                existingBuildEventDestFile = PathHelper.GetRelativePath(ProjectDirectory, existingBuildEventDestFile);\n                existingBuildEventDestFile = Path.Combine(Path.GetDirectoryName(existingBuildEventDestFile), Path.GetFileNameWithoutExtension(existingBuildEventDestFile));\n                existingBuildEventDestFile = PathHelper.Normalize(existingBuildEventDestFile);\n\n                string fullDestFile = Path.Combine(OutputDirectory, destFile);\n                string relativeDestFile = PathHelper.GetRelativePath(ProjectDirectory, fullDestFile);\n                relativeDestFile = PathHelper.Normalize(relativeDestFile);\n\n                if (existingBuildEventDestFile.Equals(relativeDestFile)\n                &&  existingBuildEvent.Importer  == importerName\n                &&  existingBuildEvent.Processor == processorName)\n                {\n                    OpaqueDataDictionary processorDefaultValues = GetProcessorDefaultValues(processorName);\n                    if (BuildEvent.AreParametersEqual(existingBuildEvent.Parameters, processorParameters, processorDefaultValues))\n                        return destFile;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Determines whether the specified list contains a matching pipeline build event.\n        /// </summary>\n        /// <param name=\"pipelineBuildEvents\">The list of pipeline build events.</param>\n        /// <param name=\"destFile\">Absolute path to the output file. Can be <see langword=\"null\"/>.</param>\n        /// <param name=\"importerName\">The name of the content importer. Can be <see langword=\"null\"/>.</param>\n        /// <param name=\"processorName\">The name of the content processor. Can be <see langword=\"null\"/>.</param>\n        /// <param name=\"processorParameters\">The processor parameters. Can be <see langword=\"null\"/>.</param>\n        /// <returns>\n        /// The matching pipeline build event, or <see langword=\"null\"/>.\n        /// </returns>\n        private static BuildEvent FindMatchingEvent(List<BuildEvent> pipelineBuildEvents, string destFile, string importerName, string processorName, OpaqueDataDictionary processorParameters, OpaqueDataDictionary processorDefaultValues)\n        {\n            foreach (BuildEvent existingBuildEvent in pipelineBuildEvents)\n            {\n                if ((destFile == null || existingBuildEvent.DestFile.Equals(destFile))\n                &&  existingBuildEvent.Importer == importerName\n                &&  existingBuildEvent.Processor == processorName)\n                {\n                    if (BuildEvent.AreParametersEqual(existingBuildEvent.Parameters, processorParameters, processorDefaultValues))\n                    {\n                        return existingBuildEvent;\n                    }\n                }\n            }\n\n            return null;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/ProcessorContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    internal class ProcessorContext : ContentProcessorContext\n    {\n        private readonly PipelineManager _manager;\n        ConsoleLogger _logger;\n        private readonly BuildEvent _buildEvent;\n\n        public ProcessorContext(PipelineManager manager, ConsoleLogger logger, BuildEvent buildEvent)\n        {\n            _manager = manager;\n            _logger = logger;\n            _buildEvent = buildEvent;\n        }\n\n        public override TargetPlatform TargetPlatform { get { return _manager.Platform; } }\n        public override GraphicsProfile TargetProfile { get { return _manager.Profile; } }\n\n        public override string BuildConfiguration { get { return _manager.Config; } }\n\n        public override string IntermediateDirectory { get { return _manager.IntermediateDirectory; } }\n        public override string OutputDirectory { get { return _manager.OutputDirectory; } }\n        public override string OutputFilename { get { return _buildEvent.DestFile; } }\n\n        public override OpaqueDataDictionary Parameters { get { return _buildEvent.Parameters; } }\n\n        public override ContentBuildLogger Logger { get { return _logger; } }\n\n        public override void AddDependency(string filename)\n        {\n            if (!_buildEvent.Dependencies.Contains(filename))\n                _buildEvent.Dependencies.Add(filename);\n        }\n\n        public override void AddOutputFile(string filename)\n        {\n            if (!_buildEvent.BuildOutput.Contains(filename))\n                _buildEvent.BuildOutput.Add(filename);\n        }\n\n        public override TOutput Convert<TInput, TOutput>(   TInput input, \n                                                            string processorName,\n                                                            OpaqueDataDictionary processorParameters)\n        {\n            IContentProcessor processor = _manager.CreateProcessor(processorName, processorParameters);\n            ProcessorContext processContext = new ProcessorContext(_manager, this._logger, new BuildEvent { Parameters = processorParameters } );\n            var processedObject = processor.Process(input, processContext);\n           \n            // Add its dependencies and built assets to ours.\n            foreach (string dependency in processContext._buildEvent.Dependencies)\n            {\n                if (!_buildEvent.Dependencies.Contains(dependency))\n                    _buildEvent.Dependencies.Add(dependency);\n            }\n            foreach (string buildAsset in processContext._buildEvent.BuildAsset)\n            {\n                if (!_buildEvent.BuildAsset.Contains(buildAsset))\n                    _buildEvent.BuildAsset.Add(buildAsset);\n            }\n\n            return (TOutput)processedObject;\n        }\n\n        public override TOutput BuildAndLoadAsset<TInput, TOutput>( ExternalReference<TInput> sourceAsset,\n                                                                    string processorName,\n                                                                    OpaqueDataDictionary processorParameters,\n                                                                    string importerName)\n        {\n            var sourceFilepath = PathHelper.Normalize(sourceAsset.Filename);\n\n            // The processorName can be null or empty. In this case the asset should\n            // be imported but not processed. This is, for example, necessary to merge\n            // animation files as described here:\n            // http://blogs.msdn.com/b/shawnhar/archive/2010/06/18/merging-animation-files.aspx.\n\n            bool processAsset = !string.IsNullOrEmpty(processorName);\n            _manager.ResolveImporterAndProcessor(sourceFilepath, ref importerName, ref processorName);\n\n            // Make sure the source file is absolute.\n            string sourceFile = sourceAsset.Filename;\n            if (!Path.IsPathRooted(sourceFile))\n                sourceFile = Path.Combine(_manager.ProjectDirectory, sourceFile);\n            sourceFile = PathHelper.Normalize(sourceFile);\n\n            BuildEvent buildEvent = new BuildEvent\n            { \n                SourceFile = sourceFile,\n                Importer = importerName,\n                Processor = processAsset ? processorName : null,\n                Parameters = _manager.ValidateProcessorParameters(processorName, processorParameters),\n            };\n\n            ImporterContext importContext = new ImporterContext(_manager, _logger, buildEvent);\n            if (!File.Exists(buildEvent.SourceFile))\n                throw new PipelineException(\"The source file '{0}' does not exist!\", buildEvent.SourceFile);\n            // Store the last write time of the source file so we can detect if it has been changed.\n            buildEvent.SourceTime = File.GetLastWriteTime(buildEvent.SourceFile);\n            object importedObject = _manager.ImportContent(buildEvent.Importer, importContext, buildEvent.SourceFile);\n            ContentProcessorContext processContext = new ProcessorContext(_manager, _logger, buildEvent);\n            object processedObject = _manager.ProcessContent(buildEvent.Processor, processContext, importedObject);\n\n            // Record that we processed this dependent asset.\n            if (!_buildEvent.Dependencies.Contains(sourceFilepath))\n                _buildEvent.Dependencies.Add(sourceFilepath);\n\n            return (TOutput)processedObject;\n        }\n\n        public override ExternalReference<TOutput> BuildAsset<TInput, TOutput>( ExternalReference<TInput> sourceAsset,\n                                                                                string processorName,\n                                                                                OpaqueDataDictionary processorParameters,\n                                                                                string importerName, \n                                                                                string assetName)\n        {\n            if (string.IsNullOrEmpty(assetName))\n                assetName = _manager.GetAssetName(sourceAsset.Filename, importerName, processorName, processorParameters, this._logger);\n\n            // Make sure the source file is absolute.\n            string sourceFile = sourceAsset.Filename;\n            if (!Path.IsPathRooted(sourceFile))\n                sourceFile = Path.Combine(_manager.ProjectDirectory, sourceFile);\n            sourceFile = PathHelper.Normalize(sourceFile);\n\n            // Build the content.\n            BuildEvent buildEvent = _manager.CreateBuildEvent(sourceFile, assetName, importerName, processorName, processorParameters);\n            BuildEvent cachedBuildEvent = _manager.LoadBuildEvent(buildEvent.DestFile);\n            _manager.BuildContent(this._logger, buildEvent, cachedBuildEvent, buildEvent.DestFile);\n\n            // Record that we built this dependent asset.\n            if (!_buildEvent.BuildAsset.Contains(buildEvent.DestFile))\n                _buildEvent.BuildAsset.Add(buildEvent.DestFile);\n\n            return new ExternalReference<TOutput>(buildEvent.DestFile);\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/Program.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    class Program\n    {\n        static int Main(string[] args)\n        {\n            // We force all stderr to redirect to stdout\n            // to avoid any out of order console output.\n            Console.SetError(Console.Out);\n\n            if (!Environment.Is64BitProcess && Environment.OSVersion.Platform != PlatformID.Unix)\n            {\n                Console.Error.WriteLine(\"The KNI content Builder tool only work on a 64bit OS.\");\n                return -1;\n            }\n\n            ContentBuilder content = new ContentBuilder();\n\n            // Parse the command line.\n            CommandLineParser parser = new CommandLineParser(content)\n            {\n                Title = \"KNI Content Builder\\n\" +\n                        \"Builds optimized game content for KNI projects.\"\n            };\n\n            if (!parser.Parse(args))\n                return -1;\n            \n            // Print a startup message.\n            DateTime buildStarted = DateTime.Now;\n            if (!content.Quiet)\n                Console.WriteLine(\"Build started {0}\\n\", buildStarted);\n\n            // Let the content build.\n            content.Build();\n\n            // Print the finishing info.\n            if (!content.Quiet)\n            {\n                Console.WriteLine(\"\\nBuild {0} succeeded, {1} failed.\\n\", \n                                  content.SuccessCount, content.ErrorCount);\n                Console.WriteLine(\"Time elapsed {0:hh\\\\:mm\\\\:ss\\\\.fff}.\", DateTime.Now - buildStarted);\n            }\n            else\n            {\n                Console.WriteLine(\"KNI content pipeline builder: {0} succeeded, {1} failed, took {2:hh\\\\:mm\\\\:ss\\\\.fff}.\", \n                                  content.SuccessCount, content.ErrorCount, DateTime.Now - buildStarted);\n            }\n\n            // Return the error count.\n            return content.ErrorCount;\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"MGCB\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"MGCB\")]\n[assembly: AssemblyCopyright(\"Copyright ©2025 MonoGame Team, ©2022 Nick Kastellanos\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"b64484a5-f0ca-47cb-8149-59272a68966d\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"4.2.9001.0\")]\n[assembly: AssemblyFileVersion(\"4.2.9001.0\")]\n"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"Debug ContentFont\": {\n      \"commandName\": \"Project\",\n      \"commandLineArgs\": \"/@:Content.mgcb /Rebuild /SingleThread\",\n      \"workingDirectory\": \"X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Projects\\\\Content\\\\\"\n    },\n    \"Debug DirectX Effects\": {\n      \"commandName\": \"Project\",\n      \"commandLineArgs\": \"/@:DirectX.mgcb /Rebuild /SingleThread\",\n      \"workingDirectory\": \"X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Effects\\\\\"\n    },\n    \"Debug OpenGL Effects\": {\n      \"commandName\": \"Project\",\n      \"commandLineArgs\": \"/@:OpenGL.mgcb /Rebuild /SingleThread\",\n      \"workingDirectory\": \"X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Effects\\\\\"\n    },\n    \"Debug NoResponseFile\": {\n      \"commandName\": \"Project\",\n      \"commandLineArgs\": \"/SingleThread /outputDir:X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Effects\\\\DirectX /intermediateDir:X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Effects\\\\obj\\\\ /platform:Windows /importer:EffectImporter /processor:EffectProcessor /build:X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Effects\\\\Bevels.fx /build:X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Effects\\\\BlackOut.fx /build:X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Effects\\\\ColorFlip.fx\",\n      \"workingDirectory\": \"X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\Effects\\\\\"\n    }\n  }\n}"
  },
  {
    "path": "Tools/MonoGame.Content.Builder/SourceFileCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Builder\n{\n    public sealed class SourceFileCollection\n    {\n        public const string Extension = \".kniContent\";\n \n        public GraphicsProfile Profile { get; set; }\n\n        public TargetPlatform Platform { get; set; }\n\n        public ContentCompression Compression { get; set; }\n\n        public string Config { get; set; }\n\n        public List<string> SourceFiles { get; set; }\n\n        public List<string> DestFiles { get; set; }\n\n\n        public SourceFileCollection()\n        {\n            SourceFiles = new List<string>();\n            DestFiles = new List<string>();\n            Config = string.Empty;\n        }\n\n        public void SaveBinary(string filePath)\n        {\n            using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))\n            using (var writer = new SourceFileCollectionBinaryWriter(stream))\n            {\n                writer.Write(this);\n            }\n        }\n\n        public static SourceFileCollection LoadBinary(string filePath)\n        {\n            try\n            {\n                if (!File.Exists(filePath))\n                    return null;\n\n                using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None))\n                using (var reader = new SourceFileCollectionBinaryReader(stream))\n                {\n                    SourceFileCollection result = new SourceFileCollection();\n                    reader.Read(result);\n                    return result;\n                }\n            }\n            catch (Exception)\n            {\n                return null;\n            }\n        }\n\n        public int SourceFilesCount { get { return this.SourceFiles.Count; } }\n\n        internal void AddFile(string sourceFile, string outputFile)\n        {\n            this.SourceFiles.Add(sourceFile);\n            this.DestFiles.Add(outputFile);\n        }\n\n        public void Merge(SourceFileCollection previousFileCollection)\n        {\n            for (int i = 0; i < previousFileCollection.SourceFiles.Count; i++)\n            {\n                string prevSourceFile = previousFileCollection.SourceFiles[i];\n                string prevDestFile = previousFileCollection.DestFiles[i];\n\n                bool contains = this.SourceFiles.Exists((sourceFile) => string.Equals(sourceFile, prevSourceFile, StringComparison.InvariantCultureIgnoreCase));\n                if (!contains)\n                {\n                    this.SourceFiles.Add(prevSourceFile);\n                    this.DestFiles.Add(prevDestFile);\n                }\n            }\n        }\n\n\n        internal class SourceFileCollectionBinaryWriter : BinaryWriter\n        {\n            private const string Header = \"KNIC\"; // content db\n            private const short MajorVersion =  3;\n            private const short MinorVersion = 15;\n            private const int DataType = 1; // SourceFileCollection data\n\n\n            public SourceFileCollectionBinaryWriter(Stream output) : base(output)\n            {\n            }\n\n            internal void Write(SourceFileCollection value)\n            {\n                Write((byte)Header[0]);\n                Write((byte)Header[1]);\n                Write((byte)Header[2]);\n                Write((byte)Header[3]);\n                Write((Int16)MajorVersion);\n                Write((Int16)MinorVersion);\n                Write((Int32)DataType);\n                Write((Int32)0); // reserved\n\n\n                Write((Int32)value.Profile);\n                Write((Int32)value.Platform);\n                Write((Int32)value.Compression);\n                WriteStringOrNull(value.Config);\n\n                WritePackedInt(value.SourceFiles.Count);\n                for (int i = 0; i < value.SourceFiles.Count; i++)\n                {\n                    WriteStringOrNull(value.SourceFiles[i]);\n                    WriteStringOrNull(value.DestFiles[i]);\n                }\n\n                return;\n            }\n\n            protected void WritePackedInt(int value)\n            {\n                // write zigzag encoded int\n                int zzint = ((value << 1) ^ (value >> 31));\n                Write7BitEncodedInt(zzint);\n            }\n\n            private void WriteStringOrNull(string value)\n            {\n                if (value != null)\n                {\n                    Write(true);\n                    Write(value);\n                }\n                else\n                    Write(false);\n            }\n\n        }\n\n        internal class SourceFileCollectionBinaryReader : BinaryReader\n        {\n            private const string Header = \"KNIC\"; // content db\n            private const short MajorVersion =  3;\n            private const short MinorVersion = 15;\n            private const int DataType = 1; // SourceFileCollection data\n\n\n            public SourceFileCollectionBinaryReader(Stream output) : base(output)\n            {\n            }\n\n            internal void Read(SourceFileCollection value)\n            {\n                if (ReadByte() != Header[0]\n                ||  ReadByte() != Header[1]\n                ||  ReadByte() != Header[2]\n                ||  ReadByte() != Header[3])\n                    throw new Exception(\"Invalid file.\");\n\n                if (ReadInt16() != MajorVersion\n                ||  ReadInt16() != MinorVersion)\n                    throw new Exception(\"Invalid file version.\");\n\n                int dataType = ReadInt32(); \n                if (dataType != DataType)\n                    throw new Exception(\"Invalid data type.\");\n\n                int reserved0 = ReadInt32();\n\n\n                value.Profile = (GraphicsProfile)ReadInt32();\n                value.Platform = (TargetPlatform)ReadInt32();\n                value.Compression = (ContentCompression)ReadInt32();\n                value.Config = ReadStringOrNull();\n\n                int filesCount = ReadPackedInt();\n                value.SourceFiles = new List<string>(filesCount);\n                value.DestFiles = new List<string>(filesCount);\n                for (int i = 0; i < filesCount; i++)\n                {\n                    value.SourceFiles.Add(ReadStringOrNull());\n                    value.DestFiles.Add(ReadStringOrNull());\n                }\n\n                return;\n            }\n\n            private int ReadPackedInt()\n            {\n                unchecked\n                {\n                    // read zigzag encoded int\n                    int zzint = Read7BitEncodedInt();\n                    return ((int)((uint)zzint >> 1) ^ (-(zzint & 1)));\n                }\n            }\n\n            private string ReadStringOrNull()\n            {\n                if (ReadBoolean())\n                    return ReadString();\n                else\n                    return null;\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Packaging.Flatpak/BuildFlatpakTask.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Build.Framework;\nusing Microsoft.Build.Utilities;\n\nnamespace MonoGame.Packaging\n{\n    public class BuildFlatpakTask : Task\n    {\n        [Required]\n        public string IntermediateDir { get; set; }\n\n        [Required]\n        public string OutputPath { get; set; }\n\n        [Required]\n        public string ProjectDir { get; set; }\n\n        [Required]\n        public string PublishDir { get; set; }\n\n        [Required]\n        public string AssemblyName { get; set; }\n\n        [Required]\n        public string Title { get; set; }\n\n        [Required]\n        public string Id { get; set; }\n\n        [Required]\n        public string IconPath { get; set; }\n\n        public override bool Execute()\n        {\n            try\n            {\n                Log.LogMessage(MessageImportance.Normal, \"BuildFlatpakTask: Starting...\");\n\n                // Ensure that flatpak command is installed\n                if (!IsFlatpakInstalled())\n                {\n                    Log.LogMessage(MessageImportance.High, \"Flatpak command not found :(\");\n                    return false;\n                }\n\n                // Setup intermediate directory\n                var objpath = Path.Combine(ProjectDir, IntermediateDir, \"Flatpak\");\n                if (Directory.Exists(objpath))\n                    Directory.Delete(objpath, true);\n                Directory.CreateDirectory(objpath);\n\n                // Generate metadata\n                Log.LogMessage(MessageImportance.Normal, \"BuildFlatpakTask: Generating metadata\");\n                var metadatalines = new[] {\n                    \"[Application]\",\n                    \"name=\" + Id,\n                    \"runtime=org.freedesktop.Platform/x86_64/1.6\",\n                    \"command=/app/opt/\" + AssemblyName + \"/\" + AssemblyName,\n                    \"\",\n                    \"[Context]\",\n                    \"shared=ipc;network;\",\n                    \"sockets=x11;wayland;pulseaudio;\",\n                    \"devices=all;\"\n                };\n                File.WriteAllLines(Path.Combine(objpath, \"metadata\"), metadatalines);\n\n                // Copy over icon\n                Log.LogMessage(MessageImportance.Normal, \"BuildFlatpakTask: Copying over icon\");\n                var icondir = Path.Combine(objpath, \"export/share/icons\");\n                Directory.CreateDirectory(icondir);\n                File.Copy(Path.Combine(ProjectDir, IconPath), Path.Combine(icondir, Id + \".png\"));\n\n                // Generate .desktop launcher file\n                Log.LogMessage(MessageImportance.Normal, \"BuildFlatpakTask: Generating launcher file\");\n                var desktopdir = Path.Combine(objpath, \"export/share/applications\");\n                Directory.CreateDirectory(desktopdir);\n                var desktoplines = new[] {\n                    \"[Desktop Entry]\",\n                    \"Name=\" + Title,\n                    \"Exec=/app/opt/\" + AssemblyName + \"/\" + AssemblyName,\n                    \"Type=Application\",\n                    \"Icon=\" + Id,\n                    \"Categories=Game;\"\n                };\n                File.WriteAllLines(Path.Combine(desktopdir, Id + \".desktop\"), desktoplines);\n\n                // Copy over game\n                Log.LogMessage(MessageImportance.Normal, \"BuildFlatpakTask: Copying over game data\");\n                var sourcegamedir = Path.Combine(ProjectDir, PublishDir);\n                var gamedir = Path.Combine(objpath, \"files/opt/\" + AssemblyName + \"/\");\n                Directory.CreateDirectory(gamedir);\n                foreach (var dirpath in Directory.GetDirectories(sourcegamedir, \"*\", SearchOption.AllDirectories))\n                    Directory.CreateDirectory(dirpath.Replace(sourcegamedir, gamedir));\n                foreach (var filepath in Directory.GetFiles(sourcegamedir, \"*.*\", SearchOption.AllDirectories))\n                    File.Copy(filepath, filepath.Replace(sourcegamedir, gamedir));\n\n                // Copy over suplementary libraries\n                var libdir = Path.Combine(Path.GetDirectoryName((new Uri(typeof(BuildFlatpakTask).Assembly.CodeBase)).LocalPath), \"../../extra\");\n                Directory.CreateDirectory(Path.Combine(objpath, \"files/lib\"));\n                File.Copy(Path.Combine(libdir, \"libunwind-x86_64.so.8\"), Path.Combine(objpath, \"files/lib/libunwind-x86_64.so.8\"));\n                File.Copy(Path.Combine(libdir, \"libunwind.so.8\"), Path.Combine(objpath, \"files/lib/libunwind.so.8\"));\n                File.Copy(Path.Combine(libdir, \"libSDL2-2.0.so.0.8.0\"), Path.Combine(objpath, \"files/opt/\" + AssemblyName + \"/libSDL2-2.so\"), true);\n\n                // Generate flatpak\n                Log.LogMessage(MessageImportance.Normal, \"BuildFlatpakTask: Generating flatpak\");\n                var repodir = Path.Combine(ProjectDir, IntermediateDir, \"FlatpakRepo\");\n                if (Directory.Exists(repodir))\n                    Directory.Delete(repodir, true);\n                Directory.CreateDirectory(repodir);\n                var flatpak = Path.Combine(ProjectDir, OutputPath, AssemblyName + \".flatpak\");\n                CallFlatpak(\"build-export \" + repodir + \" \" + objpath);\n                CallFlatpak(\"build-bundle \" + repodir + \" \" + flatpak + \" \" + Id);\n\n                Log.LogMessage(MessageImportance.High, \"BuildFlatpakTask: Flatpak generated at: \" + flatpak);\n            }\n            catch (Exception e)\n            {\n                Log.LogMessage(MessageImportance.High, \"An error occured while trying to package the project into a flatpak.\");\n                Log.LogMessage(MessageImportance.High, \"Error Info: \" + e.ToString());\n\n                return false;\n            }\n\n            return true;\n        }\n\n        private bool IsFlatpakInstalled()\n        {\n            var proc = new Process();\n            proc.StartInfo.FileName = \"which\";\n            proc.StartInfo.Arguments = \"flatpak\";\n            proc.StartInfo.UseShellExecute = false;\n            proc.StartInfo.RedirectStandardOutput = true;\n            proc.Start();\n            proc.WaitForExit();\n            proc.StandardOutput.ReadToEnd();\n\n            return proc.ExitCode == 0;\n        }\n\n        private void CallFlatpak(string args)\n        {\n            var proc = new Process();\n            proc.StartInfo.FileName = \"flatpak\";\n            proc.StartInfo.Arguments = args;\n            proc.StartInfo.UseShellExecute = false;\n            proc.StartInfo.RedirectStandardOutput = true;\n            proc.Start();\n            proc.WaitForExit();\n\n            while (!proc.StandardOutput.EndOfStream)\n                Log.LogMessage(MessageImportance.Normal, proc.StandardOutput.ReadLine());\n        }\n    }\n}\n"
  },
  {
    "path": "Tools/MonoGame.Packaging.Flatpak/MonoGame.Packaging.Flatpak.Common.props",
    "content": "<Project>\n\n  <ItemGroup>\n    <Compile Include=\"BuildFlatpakTask.cs\" />\n  </ItemGroup>\n  \n</Project>\n"
  },
  {
    "path": "Tools/MonoGame.Packaging.Flatpak/MonoGame.Packaging.Flatpak.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\r\n    <TargetFrameworks>netstandard2.0;net46</TargetFrameworks>\r\n    <BaseOutputPath>..\\..\\Artifacts\\MonoGame.Packaging.Flatpak</BaseOutputPath>\r\n    <BuildOutputTargetFolder>tasks</BuildOutputTargetFolder>\r\n    <PackageIconUrl>https://pbs.twimg.com/profile_images/487954549441691649/O3KsHAsb_400x400.png</PackageIconUrl>\r\n    <RepositoryUrl>https://github.com/MonoGame/MonoGame.git</RepositoryUrl>\r\n    <Description>This package allows you to package up your MonoGame game into a flatpak installer for Linux.</Description>\r\n    <PackageTags>monogame;.net core;core;packaging;flatpak</PackageTags>\r\n    <Authors>MonoGame Team</Authors>\r\n    <PackageId>MonoGame.Packaging.Flatpak</PackageId>\r\n  </PropertyGroup>\r\n\r\n  <Import Project=\"MonoGame.Packaging.Flatpak.Common.props\" />\r\n\r\n  <ItemGroup>\r\n    <Content Include=\"MonoGame.Packaging.Flatpak.targets\" PackagePath=\"build\\MonoGame.Packaging.Flatpak.targets\" />\r\n    <Content Include=\"..\\..\\ThirdParty\\Dependencies\\FlatpakLibs\\*\" PackagePath=\"extra\\\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Build.Framework\" Version=\"15.1.1012\" />\r\n    <PackageReference Include=\"Microsoft.Build.Utilities.Core\" Version=\"15.1.1012\" />\r\n\r\n    <PackageReference Update=\"@(PackageReference)\" PrivateAssets=\"All\" />\r\n\r\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\r\n      <PrivateAssets>all</PrivateAssets>\r\n    </PackageReference>\r\n  </ItemGroup>\r\n\r\n</Project>"
  },
  {
    "path": "Tools/MonoGame.Packaging.Flatpak/MonoGame.Packaging.Flatpak.targets",
    "content": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n    <!-- Select correct MSBuild task assembly. -->\n    <MGFlatpakFoler Condition=\" '$(MSBuildRuntimeType)' == 'Core' \">netstandard2.0</MGFlatpakFoler>\n    <MGFlatpakFoler Condition=\" '$(MSBuildRuntimeType)' != 'Core' \">net46</MGFlatpakFoler>\n    <MGFlatpakTaskAssembly>$(MSBuildThisFileDirectory)..\\tasks\\$(MGFlatpakFoler)\\MonoGame.Packaging.Flatpak.dll</MGFlatpakTaskAssembly>\n\n    <!-- Init task properties -->\n    <MGFlatpakIntermediateDir Condition=\" '$(MGFlatpakIntermediateDir)' == '' \">$(IntermediateOutputPath)</MGFlatpakIntermediateDir>\n    <MGFlatpakOutputPath Condition=\" '$(MGFlatpakOutputPath)' == '' \">$(OutputPath)</MGFlatpakOutputPath>\n    <MGFlatpakProjectDir Condition=\" '$(MGFlatpakProjectDir)' == '' \">$(ProjectDir)</MGFlatpakProjectDir>\n    <MGFlatpakPublishDir Condition=\" '$(MGFlatpakPublishDir)' == '' \">$(PublishDir)</MGFlatpakPublishDir>\n    <MGFlatpakAssemblyName Condition=\" '$(MGFlatpakAssemblyName)' == '' \">$(AssemblyName)</MGFlatpakAssemblyName>\n    <MGFlatpakTitle Condition=\" '$(MGFlatpakTitle)' == '' \">$(AssemblyTitle)</MGFlatpakTitle>\n    <MGFlatpakId Condition=\" '$(MGFlatpakId)' == '' \">com.$(Company).$(AssemblyName)</MGFlatpakId>\n    <MGFlatpakIcon Condition=\" '$(MGFlatpakIcon)' == '' \">Icon.png</MGFlatpakIcon>\n  </PropertyGroup>\n\n  <UsingTask TaskName=\"MonoGame.Packaging.BuildFlatpakTask\" AssemblyFile=\"$(MGFlatpakTaskAssembly)\" />\n\n  <Target Name=\"PackageFlatpak\" AfterTargets=\"Publish\" Condition=\" '$(RuntimeIdentifier)'=='linux-x64' \">\n    <BuildFlatpakTask IntermediateDir=\"$(MGFlatpakIntermediateDir)\"\n                    OutputPath=\"$(MGFlatpakOutputPath)\"\n                    ProjectDir=\"$(MGFlatpakProjectDir)\"\n                    PublishDir=\"$(MGFlatpakPublishDir)\"\n                    AssemblyName=\"$(MGFlatpakAssemblyName)\"\n                    Title=\"$(MGFlatpakTitle)\"\n                    Id=\"$(MGFlatpakId)\"\n                    IconPath=\"$(MGFlatpakIcon)\" />\n  </Target>\n\n</Project>"
  },
  {
    "path": "Tools/MonoGame.Packaging.Flatpak/README.md",
    "content": "**This package only works if you are targeting .NET Core.** This package allows you to package up your MonoGame game into a flatpak installer for Linux.\n\n## Requirements:\n- netcoreapp as the target\n- flatpak\n  - org.freedesktop.Platform/x86_64/1.6\n  - org.freedesktop.Sdk/x86_64/1.6\n\nFlatpak install instructions: [https://flatpak.org/setup/](https://flatpak.org/setup/)\n\nTo install the required runtimes, simply do:\n```sh\nflatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo\nflatpak install flathub org.freedesktop.Platform/x86_64/1.6\nflatpak install flathub org.freedesktop.Sdk/x86_64/1.6\n```\n\n## Usage:\nCall the publish command as you normally would: `dotnet publish -r linux-x64`, the resulting flatpak should get generated in the output directory.\n\n## Customization:\nThis nuget package offers the following properties for customizing the build of the flatpak. Simply set them in the csproj or pass them to msbuild to change their values:\n\n```\n| Variable Name            | Description / Default value            |\n| ------------------------ | -------------------------------------- |\n| MGFlatpakIntermediateDir | Folder for temporary files.            |\n|                          | $(IntermediateOutputPath)              |\n| ------------------------ | -------------------------------------- |\n| MGFlatpakOutputPath      | The output folder for the flatpak.     |\n|                          | $(OutputPath)                          |\n| ------------------------ | -------------------------------------- |\n| MGFlatpakProjectDir      | The current project directory.         |\n|                          | $(ProjectDir)                          |\n| ------------------------ | -------------------------------------- |\n| MGFlatpakPublishDir      | The publish output folder.             |\n|                          | $(PublishDir)                          |\n| ------------------------ | -------------------------------------- |\n| MGFlatpakAssemblyName    | The output assembly to run.            |\n|                          | $(AssemblyName)                        |\n| ------------------------ | -------------------------------------- |\n| MGFlatpakTitle           | The game title.                        |\n|                          | $(AssemblyTitle)                       |\n| ------------------------ | -------------------------------------- |\n| MGFlatpakId              | The game id.                           |\n|                          | com.$(Company).$(AssemblyName)         |\n| ------------------------ | -------------------------------------- |\n| MGFlatpakIcon            | The icon file, needs to be png format. |\n|                          | Icon.png                               |\n```\n\n"
  },
  {
    "path": "default.build",
    "content": "<?xml version=\"1.0\"?>\n<project name=\"KNI Build Script\" default=\"build\" basedir=\".\">\n\n  <description>The KNI automated build script.</description>\n\n  <property name=\"os\" value=\"${operating-system::get-platform(environment::get-operating-system())}\" />\n  <property name=\"msbuild17\" value=\"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\\msbuild.exe\" />\n  <property name=\"msbuild18\" value=\"C:\\Program Files\\Microsoft Visual Studio\\18\\Community\\MSBuild\\Current\\Bin\\msbuild.exe\" />\n\n  <property name=\"nugetPath\" value=\"C:\\Program Files (x86)\\NuGet3\\nuget.exe\" />\n  <property name=\"nugetPackageVersion\" value=\"4.2.9001\" />\n  \n  <!-- Helper default target. -->\n  <target   name=\"build\" \n            description=\"Build, run tests, generate docs, and create installers.\" \n            depends=\"_clean,build_code,build_nuget,run_tests,build_docs,build_installer\" />\n\n  <!-- Clean the build output directories. -->\n  <target name=\"_clean\">\n    <delete dir=\"${project::get-base-directory()}\\Artifacts\" />\n    <delete dir=\"${project::get-base-directory()}\\Platforms\\obj\" />\n    \n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework\\Xna.Framework.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Content\\Xna.Framework.Content.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Media\\Xna.Framework.Media.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Game\\Xna.Framework.Game.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Input\\Xna.Framework.Input.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.XR\\Xna.Framework.XR.csproj /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Design\\Xna.Framework.Design.csproj /t:Clean /p:Configuration=Release\" />\n    \n    <exec program=\"dotnet\" commandline=\"build Kni.Platform.Blazor.GL.sln /t:Clean /p:Configuration=Release\" />\n    \n    <exec program=\"dotnet\" commandline=\"build Kni.Platform.WinForms.DX11.sln /t:Clean /p:Configuration=Release\" />\n    \n    <exec program=\"${msbuild17}\" commandline='Kni.Platform.UAP.DX11.sln /t:Clean /p:Configuration=Release /p:Platform=\"Any CPU\"' />\n    \n    <exec program=\"dotnet\" commandline=\"build Kni.Platform.SDL2.GL.sln /t:Clean /p:Configuration=Release\" />\n    \n    <exec program=\"dotnet\" commandline=\"build Kni.Platform.Android.GL.sln /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build Kni.Platform.Oculus.GL.sln /t:Clean /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"build Kni.Platform.Cardboard.GL.sln /t:Clean /p:Configuration=Release\" />\n    \n    <exec program=\"dotnet\" commandline=\"build Kni.Platform.iOS.GL.sln /t:Clean /p:Configuration=Release\" />\n    \n    <exec program=\"${msbuild17}\" commandline=\"Kni.Platform.Android.GL.Xamarin.sln /t:Clean /p:Configuration=Release\" />\n    \n  </target>\n  \n  <!-- Shortcut for building all valid target platforms -->\n  <target name=\"build_code\" description=\"Build all the projects.\">\n      \n    <call target=\"build_framework\"/>\n    <call target=\"build_ref\"/>\n    <call target=\"build_blazorGL\" />\n    <call target=\"build_windows\"/>\n    <call target=\"build_windowsUAP10\" />\n    <call target=\"build_desktopGL\"/>\n    <call target=\"build_android\" />\n    <call target=\"build_oculus\" />\n    <call target=\"build_cardboard\" />\n    <call target=\"build_ios\" />\n  </target>\n \n\n  <target name=\"build_nuget\" description=\"Build nuget packages.\">\n      \n    <!-- <exec program=\"BuildNuget.bat\" commandline=\"\" /> -->\n\n    <exec program=\"dotnet\" commandline=\"pack src\\Xna.Framework\\Xna.Framework.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack src\\Xna.Framework.Design\\Xna.Framework.Design.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack Platforms\\Kni.Platform.Ref.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n\n    <exec program=\"dotnet\" commandline=\"pack src\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack src\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack src\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack src\\Xna.Framework.Content.Pipeline.Media\\Xna.Framework.Content.Pipeline.Media.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n\n    <exec program=\"${nugetPath}\" commandline=\"pack NuGetPackages/Content.Pipeline.Builder.nuspec\t-OutputDirectory ${project::get-base-directory()}\\Artifacts\\Packages\\          -BasePath .  -Version ${nugetPackageVersion}  -Properties Configuration=Release\" />\n    <exec program=\"${nugetPath}\" commandline=\"pack NuGetPackages/Content.Pipeline.Builder.Windows.nuspec\t-OutputDirectory ${project::get-base-directory()}\\Artifacts\\Packages\\  -BasePath .  -Version ${nugetPackageVersion}  -Properties Configuration=Release\" />\n\n    <exec program=\"${nugetPath}\" commandline=\"pack NuGetPackages/MonoGame.Framework.WindowsUniversal.nuspec\t-OutputDirectory ${project::get-base-directory()}\\Artifacts\\Packages\\  -BasePath .  -Version ${nugetPackageVersion}  -Properties Configuration=Release\" />\n\n    <exec program=\"dotnet\" commandline=\"pack Platforms\\Kni.Platform.Android.GL.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack Platforms\\Kni.Platform.Oculus.GL.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack Platforms\\Kni.Platform.iOS.GL.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack Platforms\\Kni.Platform.WinForms.DX11.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack Platforms\\Kni.Platform.SDL2.GL.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack Kni.Platform.Blazor.GL.sln --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n    <exec program=\"dotnet\" commandline=\"pack Platforms\\Kni.Platform.WinForms.DX11.OculusOVR.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n\n    <exec program=\"dotnet\" commandline=\"pack Platforms\\Kni.Platform.Cardboard.GL.csproj --output ${project::get-base-directory()}\\Artifacts\\Packages\\ /t:Build /p:Configuration=Release\" />\n\n  </target>\n\n\n  <!-- Build targets for the various platforms. -->\n\n  <target name=\"build_framework\" description=\"Build framework\">\n\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework\\Xna.Framework.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Content\\Xna.Framework.Content.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Media\\Xna.Framework.Media.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Game\\Xna.Framework.Game.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Input\\Xna.Framework.Input.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.XR\\Xna.Framework.XR.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Design\\Xna.Framework.Design.csproj /t:restore\" />\n\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework\\Xna.Framework.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Content\\Xna.Framework.Content.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Audio\\Xna.Framework.Audio.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Media\\Xna.Framework.Media.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Devices\\Xna.Framework.Devices.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Game\\Xna.Framework.Game.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Input\\Xna.Framework.Input.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Storage\\Xna.Framework.Storage.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.XR\\Xna.Framework.XR.csproj /t:Build /p:Configuration=Release\" />\n      <exec program=\"dotnet\" commandline=\"build src\\Xna.Framework.Design\\Xna.Framework.Design.csproj /t:Build /p:Configuration=Release\" />\n\n  </target>\n    \n  <target name=\"build_ref\" description=\"Build reference\">\n\n      <exec program=\"dotnet\" commandline=\"build Platforms\\Kni.Platform.Ref.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build Platforms\\Kni.Platform.Ref.csproj /t:Build /p:Configuration=Release\" />\n\n  </target>\n  \n  <target name=\"build_blazorGL\" description=\"Build BlazorGL\">\n\n      <exec program=\"dotnet\" commandline=\"build Kni.Platform.Blazor.GL.sln /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build Kni.Platform.Blazor.GL.sln /t:Build /p:Configuration=Release\" />\n      \n  </target>\n  \n  <target name=\"build_windows\" description=\"Build Windows\">\n\n      <exec program=\"dotnet\" commandline=\"build Kni.Platform.WinForms.DX11.sln /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build Kni.Platform.WinForms.DX11.sln /t:Build /p:Configuration=Release /m\" />\n      \n  </target>\n  \n  <target name=\"build_desktopGL\" description=\"Build DesktopGL\">\n\n      <exec program=\"dotnet\" commandline=\"build Platforms\\Kni.Platform.SDL2.GL.csproj /t:restore\" />\n      <exec program=\"dotnet\" commandline=\"build Platforms\\Kni.Platform.SDL2.GL.csproj /t:Build /p:Configuration=Release\" />\n      \n  </target>\n\n  <target name=\"build_ios\" description=\"Build iOS\">\n\n      <exec program=\"dotnet\" commandline='build Kni.Platform.iOS.GL.sln /t:Restore /p:Configuration=Release' />\n      <exec program=\"dotnet\" commandline='build Kni.Platform.iOS.GL.sln /t:Build /p:Configuration=Release' />\n\n  </target>\n\n  <target name=\"build_android\" description=\"Build Android\">\n\n      <if test=\"${file::exists('C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Novell\\Novell.MonoDroid.CSharp.targets')}\">\n        <exec program=\"${msbuild17}\" commandline=\"Kni.Platform.Android.GL.Xamarin.sln /t:Build /p:Configuration=Release\" />\n      </if>\n\n      <exec program=\"dotnet\" commandline='build Kni.Platform.Android.GL.sln /t:Restore /p:Configuration=Release' />\n      <exec program=\"dotnet\" commandline='build Kni.Platform.Android.GL.sln /t:Build /p:Configuration=Release' />\n\n  </target>\n  \n  <target name=\"build_oculus\" description=\"Build Oculus\">\n      <exec program=\"dotnet\" commandline='build Kni.Platform.Oculus.GL.sln /t:Restore /p:Configuration=Release' />\n      <exec program=\"dotnet\" commandline='build Kni.Platform.Oculus.GL.sln /t:Build /p:Configuration=Release' />\n  </target>\n\n  <target name=\"build_cardboard\" description=\"Build Cardboard\">\n      <exec program=\"dotnet\" commandline='build Kni.Platform.Cardboard.GL.sln /t:Restore /p:Configuration=Release' />\n      <exec program=\"dotnet\" commandline='build Kni.Platform.Cardboard.GL.sln /t:Build /p:Configuration=Release' />\n  </target>\n\n  <target name=\"build_windowsUAP10\" description=\"Build Windows 10 UAP\">\n\n      <!--\n      <exec program=\"${msbuild17}\" commandline='Platforms\\Kni.Platform.UAP.DX11.csproj /t:Restore /p:Configuration=Release' />\n      <exec program=\"${msbuild17}\" commandline='Platforms\\Kni.Platform.UAP.DX11.csproj /p:Configuration=Release' />\n      -->\n      <exec program=\"${msbuild17}\" commandline='Kni.Platform.UAP.DX11.sln /t:Restore /p:Configuration=Release' />\n      <exec program=\"${msbuild17}\" commandline='Kni.Platform.UAP.DX11.sln /t:Build /p:Configuration=Release /p:Platform=\"Any CPU\"' />\n\n  </target>\n\n\n  <!-- Run the unit tests... will fail if the code hasn't been built. -->\n  <target name=\"run_tests\" description=\"Run all the tests\" >\n\n    <if test=\"${os == 'Win32NT' and '$rununittests'=='true'  }\">\n      <exec program=\"Kni.Tests.exe\" workingdir=\"Tests/bin/WindowsDX11/AnyCPU/Release/net48/\" basedir=\"Tests/bin/WindowsDX11/AnyCPU/Release/net48/\"/>\n    </if>\n\n  </target>\n\n\n  <!-- Generate the docs... will fail if the code hasn't been built. -->\n  <target name=\"build_docs\" description=\"Build the documentation.\" >\n    <if test=\"${os == 'Win32NT' and '$runbuilddocs'=='true' }\">\n      <delete dir=\"${project::get-base-directory()}\\Documentation\\Output\" />\n      <exec program=\"SharpDoc.exe\" basedir=\"ThirdParty\\Dependencies\\SharpDoc\" commandline=\"-config Documentation\\config.xml\" />\n    </if>\n  </target>\n\n\n  <!-- Create the installers... will fail if the code hasn't been built. -->\n  <target name=\"build_installer\" description=\"Build the installers.\" >\n    <nant buildfile=\"Templates/VisualStudio2022/default.build\" target=\"build\" />\n    <nant buildfile=\"Templates/default.build\" target=\"build\" />\n    <nant buildfile=\"Installers/default.build\" target=\"build\" />\n  </target>\n\n</project>\n"
  },
  {
    "path": "global.json",
    "content": "{\n  \"sdk\": {\n    \"version\": \"8.0.415\"\n  }\n}\n"
  },
  {
    "path": "kniPackage.props",
    "content": "﻿<Project>\n  <PropertyGroup>\n    <PackageIcon>Icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/kniengine/kni/</PackageProjectUrl>\n    <RepositoryUrl>https://github.com/kniengine/kni/</RepositoryUrl>\n    <Authors>Kastellanos Nikos, MonoGame Team</Authors>\n    <copyright>©2013-2025 Kastellanos Nikos,\n                ©2009-2022 The MonoGame Team</copyright>\n    <PackageLicenseExpression>MS-PL</PackageLicenseExpression>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"$(MSBuildThisFileDirectory)Images\\Icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n</Project>\n\n"
  },
  {
    "path": "src/Xna.Framework/BoundingBox.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Represents an axis-aligned bounding box (AABB) in 3D space.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct BoundingBox : IEquatable<BoundingBox>\n    {\n\n        #region Public Fields\n\n        /// <summary>\n        ///   The minimum extent of this <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        [DataMember]\n        public Vector3 Min;\n      \n        /// <summary>\n        ///   The maximum extent of this <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        [DataMember]\n        public Vector3 Max;\n\n        /// <summary>\n        ///   The number of corners in a <see cref=\"BoundingBox\"/>. This is equal to 8.\n        /// </summary>\n        public const int CornerCount = 8;\n\n        #endregion Public Fields\n\n\n        #region Public Constructors\n\n        /// <summary>\n        ///   Create a <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"min\">The minimum extent of the <see cref=\"BoundingBox\"/>.</param>\n        /// <param name=\"max\">The maximum extent of the <see cref=\"BoundingBox\"/>.</param>\n        public BoundingBox(Vector3 min, Vector3 max)\n        {\n            this.Min = min;\n            this.Max = max;\n        }\n\n        #endregion Public Constructors\n\n\n        #region Public Methods\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> contains another <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The <see cref=\"BoundingBox\"/> to test for overlap.</param>\n        /// <returns>\n        ///   A value indicating if this <see cref=\"BoundingBox\"/> contains,\n        ///   intersects with or is disjoint with <paramref name=\"box\"/>.\n        /// </returns>\n        public ContainmentType Contains(BoundingBox box)\n        {\n            //test if all corner is in the same side of a face by just checking min and max\n            if (box.Max.X < Min.X\n                || box.Min.X > Max.X\n                || box.Max.Y < Min.Y\n                || box.Min.Y > Max.Y\n                || box.Max.Z < Min.Z\n                || box.Min.Z > Max.Z)\n                return ContainmentType.Disjoint;\n\n\n            if (box.Min.X >= Min.X\n                && box.Max.X <= Max.X\n                && box.Min.Y >= Min.Y\n                && box.Max.Y <= Max.Y\n                && box.Min.Z >= Min.Z\n                && box.Max.Z <= Max.Z)\n                return ContainmentType.Contains;\n\n            return ContainmentType.Intersects;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> contains another <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The <see cref=\"BoundingBox\"/> to test for overlap.</param>\n        /// <param name=\"result\">\n        ///   A value indicating if this <see cref=\"BoundingBox\"/> contains,\n        ///   intersects with or is disjoint with <paramref name=\"box\"/>.\n        /// </param>\n        public void Contains(ref BoundingBox box, out ContainmentType result)\n        {\n            result = Contains(box);\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> contains a <see cref=\"BoundingFrustum\"/>.\n        /// WARNING: Reported to not work properly.\n        /// If a BoundingFrustum that is outside a BoundingBox, the returned value will be ContainmentType.Intersects.\n        /// If instead call the equivalent (?) function on the BoundingFrustum.Contains(BoundingBox), we get the right result, namely ContainmentType.Disjoint.\n        /// </summary>\n        /// <param name=\"frustum\">The <see cref=\"BoundingFrustum\"/> to test for overlap.</param>\n        /// <returns>\n        ///   A value indicating if this <see cref=\"BoundingBox\"/> contains,\n        ///   intersects with or is disjoint with <paramref name=\"frustum\"/>.\n        /// </returns>\n        public ContainmentType Contains(BoundingFrustum frustum)\n        {\n            int i;\n            for (i = 0; i < BoundingFrustum.CornerCount; i++)\n            {\n                this.Contains(ref frustum._corners[i], out ContainmentType contained);\n                if (contained != ContainmentType.Contains)\n                    break;\n            }\n\n            if (i == BoundingFrustum.CornerCount)\n                return ContainmentType.Contains;\n\n            if (i > 0)\n                return ContainmentType.Intersects;\n\n            if (this.Intersects(frustum))\n                return ContainmentType.Intersects;\n            else\n                return ContainmentType.Disjoint;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> contains a <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingSphere\"/> to test for overlap.</param>\n        /// <returns>\n        ///   A value indicating if this <see cref=\"BoundingBox\"/> contains,\n        ///   intersects with or is disjoint with <paramref name=\"sphere\"/>.\n        /// </returns>\n        public ContainmentType Contains(BoundingSphere sphere)\n        {\n            if (sphere.Center.X - Min.X >= sphere.Radius\n                && sphere.Center.Y - Min.Y >= sphere.Radius\n                && sphere.Center.Z - Min.Z >= sphere.Radius\n                && Max.X - sphere.Center.X >= sphere.Radius\n                && Max.Y - sphere.Center.Y >= sphere.Radius\n                && Max.Z - sphere.Center.Z >= sphere.Radius)\n                return ContainmentType.Contains;\n\n            double dmin = 0;\n\n            double e = sphere.Center.X - Min.X;\n            if (e < 0)\n            {\n                if (e < -sphere.Radius)\n                {\n                    return ContainmentType.Disjoint;\n                }\n                dmin += e * e;\n            }\n            else\n            {\n                e = sphere.Center.X - Max.X;\n                if (e > 0)\n                {\n                    if (e > sphere.Radius)\n                    {\n                        return ContainmentType.Disjoint;\n                    }\n                    dmin += e * e;\n                }\n            }\n\n            e = sphere.Center.Y - Min.Y;\n            if (e < 0)\n            {\n                if (e < -sphere.Radius)\n                {\n                    return ContainmentType.Disjoint;\n                }\n                dmin += e * e;\n            }\n            else\n            {\n                e = sphere.Center.Y - Max.Y;\n                if (e > 0)\n                {\n                    if (e > sphere.Radius)\n                    {\n                        return ContainmentType.Disjoint;\n                    }\n                    dmin += e * e;\n                }\n            }\n\n            e = sphere.Center.Z - Min.Z;\n            if (e < 0)\n            {\n                if (e < -sphere.Radius)\n                {\n                    return ContainmentType.Disjoint;\n                }\n                dmin += e * e;\n            }\n            else\n            {\n                e = sphere.Center.Z - Max.Z;\n                if (e > 0)\n                {\n                    if (e > sphere.Radius)\n                    {\n                        return ContainmentType.Disjoint;\n                    }\n                    dmin += e * e;\n                }\n            }\n\n            if (dmin <= sphere.Radius * sphere.Radius)\n                return ContainmentType.Intersects;\n\n            return ContainmentType.Disjoint;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> contains a <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingSphere\"/> to test for overlap.</param>\n        /// <param name=\"result\">\n        ///   A value indicating if this <see cref=\"BoundingBox\"/> contains,\n        ///   intersects with or is disjoint with <paramref name=\"sphere\"/>.\n        /// </param>\n        public void Contains(ref BoundingSphere sphere, out ContainmentType result)\n        {\n            result = this.Contains(sphere);\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> contains a point.\n        /// </summary>\n        /// <param name=\"point\">The <see cref=\"Vector3\"/> to test.</param>\n        /// <returns>\n        ///   <see cref=\"ContainmentType.Contains\"/> if this <see cref=\"BoundingBox\"/> contains\n        ///   <paramref name=\"point\"/> or <see cref=\"ContainmentType.Disjoint\"/> if it does not.\n        /// </returns>\n        public ContainmentType Contains(Vector3 point)\n        {\n            ContainmentType result;\n            this.Contains(ref point, out result);\n            return result;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> contains a point.\n        /// </summary>\n        /// <param name=\"point\">The <see cref=\"Vector3\"/> to test.</param>\n        /// <param name=\"result\">\n        ///   <see cref=\"ContainmentType.Contains\"/> if this <see cref=\"BoundingBox\"/> contains\n        ///   <paramref name=\"point\"/> or <see cref=\"ContainmentType.Disjoint\"/> if it does not.\n        /// </param>\n        public void Contains(ref Vector3 point, out ContainmentType result)\n        {\n            //first we get if point is out of box\n            if (point.X < this.Min.X\n                || point.X > this.Max.X\n                || point.Y < this.Min.Y\n                || point.Y > this.Max.Y\n                || point.Z < this.Min.Z\n                || point.Z > this.Max.Z)\n            {\n                result = ContainmentType.Disjoint;\n            }\n            else\n            {\n                result = ContainmentType.Contains;\n            }\n        }\n\n        private static readonly Vector3 MaxVector3 = new Vector3(float.MaxValue);\n        private static readonly Vector3 MinVector3 = new Vector3(float.MinValue);\n\n\n        /// <summary>\n        /// Create a bounding box from the given list of points.\n        /// </summary>\n        /// <param name=\"points\">The array of Vector3 instances defining the point cloud to bound</param>\n        /// <param name=\"index\">The base index to start iterating from</param>\n        /// <param name=\"count\">The number of points to iterate</param>\n        /// <returns>A bounding box that encapsulates the given point cloud.</returns>\n        /// <exception cref=\"System.ArgumentException\">Thrown if the given array is null or has no points.</exception>\n        public static BoundingBox CreateFromPoints(Vector3[] points, int index = 0, int count = -1)\n        {\n            if (points == null || points.Length == 0)\n                throw new ArgumentException();\n\n            if (count == -1)\n                count = points.Length;\n\n            var minVec = points[index];\n            var maxVec = minVec;\n            for (int i = index + 1; i < count; i++)\n            {\n                var ptVector = points[i];\n\n                if (ptVector.X < minVec.X)\n                    minVec.X = ptVector.X;\n                else if (ptVector.X > maxVec.X)\n                    maxVec.X = ptVector.X;\n                if (ptVector.Y < minVec.Y)\n                    minVec.Y = ptVector.Y;\n                else if (ptVector.Y > maxVec.Y)\n                    maxVec.Y = ptVector.Y;\n                if (ptVector.Z < minVec.Z)\n                    minVec.Z = ptVector.Z;\n                else if (ptVector.Z > maxVec.Z)\n                    maxVec.Z = ptVector.Z;\n            }\n\n            BoundingBox result;\n            result.Min = minVec;\n            result.Max = maxVec;\n            return result;\n        }\n\n\n        /// <summary>\n        /// Create a bounding box from the given list of points.\n        /// </summary>\n        /// <param name=\"points\">The list of Vector3 instances defining the point cloud to bound</param>\n        /// <param name=\"index\">The base index to start iterating from</param>\n        /// <param name=\"count\">The number of points to iterate</param>\n        /// <returns>A bounding box that encapsulates the given point cloud.</returns>\n        /// <exception cref=\"System.ArgumentException\">Thrown if the given list is null or has no points.</exception>\n        public static BoundingBox CreateFromPoints(List<Vector3> points, int index = 0, int count = -1)\n        {\n            if (points == null || points.Count == 0)\n                throw new ArgumentException();\n\n            if (count == -1)\n                count = points.Count;\n\n            var minVec = points[index];\n            var maxVec = minVec;\n            for (int i = index + 1; i < count; i++)\n            {\n                var ptVector = points[i];\n\n                if (ptVector.X < minVec.X)\n                    minVec.X = ptVector.X;\n                else if (ptVector.X > maxVec.X)\n                    maxVec.X = ptVector.X;\n                if (ptVector.Y < minVec.Y)\n                    minVec.Y = ptVector.Y;\n                else if (ptVector.Y > maxVec.Y)\n                    maxVec.Y = ptVector.Y;\n                if (ptVector.Z < minVec.Z)\n                    minVec.Z = ptVector.Z;\n                else if (ptVector.Z > maxVec.Z)\n                    maxVec.Z = ptVector.Z;\n            }\n\n            BoundingBox result;\n            result.Min = minVec;\n            result.Max = maxVec;\n            return result;\n        }\n\n\n        /// <summary>\n        ///   Create the enclosing <see cref=\"BoundingBox\"/> from the given list of points.\n        /// </summary>\n        /// <param name=\"points\">The list of <see cref=\"Vector3\"/> instances defining the point cloud to bound.</param>\n        /// <returns>A <see cref=\"BoundingBox\"/> that encloses the given point cloud.</returns>\n        /// <exception cref=\"System.ArgumentException\">Thrown if the given list has no points.</exception>\n        public static BoundingBox CreateFromPoints(IEnumerable<Vector3> points)\n        {\n            if (points == null)\n                throw new ArgumentNullException();\n\n            var empty = true;\n            var minVec = MaxVector3;\n            var maxVec = MinVector3;\n            foreach (var ptVector in points)\n            {\n                if (ptVector.X < minVec.X)\n                    minVec.X = ptVector.X;\n                if (ptVector.X > maxVec.X)\n                    maxVec.X = ptVector.X;\n                if (ptVector.Y < minVec.Y)\n                    minVec.Y = ptVector.Y;\n                if (ptVector.Y > maxVec.Y)\n                    maxVec.Y = ptVector.Y;\n                if (ptVector.Z < minVec.Z)\n                    minVec.Z = ptVector.Z;\n                if (ptVector.Z > maxVec.Z)\n                    maxVec.Z = ptVector.Z;\n\n                empty = false;\n            }\n            if (empty)\n                throw new ArgumentException();\n\n            BoundingBox result;\n            result.Min = minVec;\n            result.Max = maxVec;\n            return result;\n        }\n\n        /// <summary>\n        ///   Create the enclosing <see cref=\"BoundingBox\"/> of a <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingSphere\"/> to enclose.</param>\n        /// <returns>A <see cref=\"BoundingBox\"/> enclosing <paramref name=\"sphere\"/>.</returns>\n        public static BoundingBox CreateFromSphere(BoundingSphere sphere)\n        {\n            BoundingBox result;\n            CreateFromSphere(ref sphere, out result);\n            return result;\n        }\n\n        /// <summary>\n        ///   Create the enclosing <see cref=\"BoundingBox\"/> of a <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingSphere\"/> to enclose.</param>\n        /// <param name=\"result\">A <see cref=\"BoundingBox\"/> enclosing <paramref name=\"sphere\"/>.</param>\n        public static void CreateFromSphere(ref BoundingSphere sphere, out BoundingBox result)\n        {\n            var corner = new Vector3(sphere.Radius);\n            result.Min = sphere.Center - corner;\n            result.Max = sphere.Center + corner;\n        }\n\n        /// <summary>\n        ///   Create the <see cref=\"BoundingBox\"/> enclosing two other <see cref=\"BoundingBox\"/> instances.\n        /// </summary>\n        /// <param name=\"original\">A <see cref=\"BoundingBox\"/> to enclose.</param>\n        /// <param name=\"additional\">A <see cref=\"BoundingBox\"/> to enclose.</param>\n        /// <returns>\n        ///   The <see cref=\"BoundingBox\"/> enclosing <paramref name=\"original\"/> and <paramref name=\"additional\"/>.\n        /// </returns>\n        public static BoundingBox CreateMerged(BoundingBox original, BoundingBox additional)\n        {\n            BoundingBox result;\n            CreateMerged(ref original, ref additional, out result);\n            return result;\n        }\n\n        /// <summary>\n        ///   Create the <see cref=\"BoundingBox\"/> enclosing two other <see cref=\"BoundingBox\"/> instances.\n        /// </summary>\n        /// <param name=\"original\">A <see cref=\"BoundingBox\"/> to enclose.</param>\n        /// <param name=\"additional\">A <see cref=\"BoundingBox\"/> to enclose.</param>\n        /// <param name=\"result\">\n        ///   The <see cref=\"BoundingBox\"/> enclosing <paramref name=\"original\"/> and <paramref name=\"additional\"/>.\n        /// </param>\n        public static void CreateMerged(ref BoundingBox original, ref BoundingBox additional, out BoundingBox result)\n        {\n            result.Min.X = Math.Min(original.Min.X, additional.Min.X);\n            result.Min.Y = Math.Min(original.Min.Y, additional.Min.Y);\n            result.Min.Z = Math.Min(original.Min.Z, additional.Min.Z);\n            result.Max.X = Math.Max(original.Max.X, additional.Max.X);\n            result.Max.Y = Math.Max(original.Max.Y, additional.Max.Y);\n            result.Max.Z = Math.Max(original.Max.Z, additional.Max.Z);\n        }\n\n        /// <summary>\n        ///   Check if two <see cref=\"BoundingBox\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"BoundingBox\"/> to compare with this <see cref=\"BoundingBox\"/>.</param>\n        /// <returns>\n        ///   <code>true</code> if <paramref name=\"other\"/> is equal to this <see cref=\"BoundingBox\"/>,\n        ///   <code>false</code> if it is not.\n        /// </returns>\n        public bool Equals(BoundingBox other)\n        {\n            return (this.Min == other.Min) && (this.Max == other.Max);\n        }\n\n        /// <summary>\n        ///   Check if two <see cref=\"BoundingBox\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare with this <see cref=\"BoundingBox\"/>.</param>\n        /// <returns>\n        ///   <code>true</code> if <paramref name=\"obj\"/> is equal to this <see cref=\"BoundingBox\"/>,\n        ///   <code>false</code> if it is not.\n        /// </returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is BoundingBox) && this.Equals((BoundingBox)obj);\n        }\n\n        /// <summary>\n        ///   Get an array of <see cref=\"Vector3\"/> containing the corners of this <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <returns>An array of <see cref=\"Vector3\"/> containing the corners of this <see cref=\"BoundingBox\"/>.</returns>\n        public Vector3[] GetCorners()\n        {\n            return new Vector3[] {\n                new Vector3(this.Min.X, this.Max.Y, this.Max.Z), \n                new Vector3(this.Max.X, this.Max.Y, this.Max.Z),\n                new Vector3(this.Max.X, this.Min.Y, this.Max.Z), \n                new Vector3(this.Min.X, this.Min.Y, this.Max.Z), \n                new Vector3(this.Min.X, this.Max.Y, this.Min.Z),\n                new Vector3(this.Max.X, this.Max.Y, this.Min.Z),\n                new Vector3(this.Max.X, this.Min.Y, this.Min.Z),\n                new Vector3(this.Min.X, this.Min.Y, this.Min.Z)\n            };\n        }\n\n        /// <summary>\n        ///   Fill the first 8 places of an array of <see cref=\"Vector3\"/>\n        ///   with the corners of this <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"corners\">The array to fill.</param>\n        /// <exception cref=\"ArgumentNullException\">If <paramref name=\"corners\"/> is <code>null</code>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">\n        ///   If <paramref name=\"corners\"/> has a length of less than 8.\n        /// </exception>\n        public void GetCorners(Vector3[] corners)\n        {\n            if (corners == null)\n            {\n                throw new ArgumentNullException(\"corners\");\n            }\n            if (corners.Length < 8)\n            {\n                throw new ArgumentOutOfRangeException(\"corners\", \"Not Enought Corners\");\n            }\n            corners[0].X = this.Min.X;\n            corners[0].Y = this.Max.Y;\n            corners[0].Z = this.Max.Z;\n            corners[1].X = this.Max.X;\n            corners[1].Y = this.Max.Y;\n            corners[1].Z = this.Max.Z;\n            corners[2].X = this.Max.X;\n            corners[2].Y = this.Min.Y;\n            corners[2].Z = this.Max.Z;\n            corners[3].X = this.Min.X;\n            corners[3].Y = this.Min.Y;\n            corners[3].Z = this.Max.Z;\n            corners[4].X = this.Min.X;\n            corners[4].Y = this.Max.Y;\n            corners[4].Z = this.Min.Z;\n            corners[5].X = this.Max.X;\n            corners[5].Y = this.Max.Y;\n            corners[5].Z = this.Min.Z;\n            corners[6].X = this.Max.X;\n            corners[6].Y = this.Min.Y;\n            corners[6].Z = this.Min.Z;\n            corners[7].X = this.Min.X;\n            corners[7].Y = this.Min.Y;\n            corners[7].Z = this.Min.Z;\n        }\n\n        /// <summary>\n        ///   Get the hash code for this <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <returns>A hash code for this <see cref=\"BoundingBox\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return this.Min.GetHashCode() + this.Max.GetHashCode();\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects another <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The <see cref=\"BoundingBox\"/> to test for intersection.</param>\n        /// <returns>\n        ///   <code>true</code> if this <see cref=\"BoundingBox\"/> intersects <paramref name=\"box\"/>,\n        ///   <code>false</code> if it does not.\n        /// </returns>\n        public bool Intersects(BoundingBox box)\n        {\n            bool result;\n            IntersectsHelper.BoundingBoxIntersectsBoundingBox(ref this, ref box, out result);\n            return result;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects another <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The <see cref=\"BoundingBox\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        ///   <code>true</code> if this <see cref=\"BoundingBox\"/> intersects <paramref name=\"box\"/>,\n        ///   <code>false</code> if it does not.\n        /// </param>\n        public void Intersects(ref BoundingBox box, out bool result)\n        {\n            IntersectsHelper.BoundingBoxIntersectsBoundingBox(ref this, ref box, out result);\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects a <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"frustum\">The <see cref=\"BoundingFrustum\"/> to test for intersection.</param>\n        /// <returns>\n        ///   <code>true</code> if this <see cref=\"BoundingBox\"/> intersects <paramref name=\"frustum\"/>,\n        ///   <code>false</code> if it does not.\n        /// </returns>\n        public bool Intersects(BoundingFrustum frustum)\n        {\n            IntersectsHelper.BoundingBoxIntersectsBoundingFrustum(ref this, frustum, out bool result);\n            return result;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects a <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingFrustum\"/> to test for intersection.</param>\n        /// <returns>\n        ///   <code>true</code> if this <see cref=\"BoundingBox\"/> intersects <paramref name=\"sphere\"/>,\n        ///   <code>false</code> if it does not.\n        /// </returns>\n        public bool Intersects(BoundingSphere sphere)\n        {\n            bool result;\n            IntersectsHelper.BoundingBoxIntersectsBoundingSphere(ref this, ref sphere, out result);\n            return result;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects a <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingFrustum\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        ///   <code>true</code> if this <see cref=\"BoundingBox\"/> intersects <paramref name=\"sphere\"/>,\n        ///   <code>false</code> if it does not.\n        /// </param>\n        public void Intersects(ref BoundingSphere sphere, out bool result)\n        {\n            IntersectsHelper.BoundingBoxIntersectsBoundingSphere(ref this, ref sphere, out result);\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects a <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"plane\">The <see cref=\"Plane\"/> to test for intersection.</param>\n        /// <returns>\n        ///   <code>true</code> if this <see cref=\"BoundingBox\"/> intersects <paramref name=\"plane\"/>,\n        ///   <code>false</code> if it does not.\n        /// </returns>\n        public PlaneIntersectionType Intersects(Plane plane)\n        {\n            PlaneIntersectionType result;\n            IntersectsHelper.BoundingBoxIntersectsPlane(ref this, ref plane, out result);\n            return result;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects a <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"plane\">The <see cref=\"Plane\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        ///   <code>true</code> if this <see cref=\"BoundingBox\"/> intersects <paramref name=\"plane\"/>,\n        ///   <code>false</code> if it does not.\n        /// </param>\n        public void Intersects(ref Plane plane, out PlaneIntersectionType result)\n        {\n            IntersectsHelper.BoundingBoxIntersectsPlane(ref this, ref plane, out result);\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects a <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <param name=\"ray\">The <see cref=\"Ray\"/> to test for intersection.</param>\n        /// <returns>\n        ///   The distance along the <see cref=\"Ray\"/> to the intersection point or\n        ///   <code>null</code> if the <see cref=\"Ray\"/> does not intesect this <see cref=\"BoundingBox\"/>.\n        /// </returns>\n        public Nullable<float> Intersects(Ray ray)\n        {\n            float? result;\n            IntersectsHelper.BoundingBoxIntersectsRay(ref this, ref ray, out result);\n            return result;\n        }\n\n        /// <summary>\n        ///   Check if this <see cref=\"BoundingBox\"/> intersects a <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <param name=\"ray\">The <see cref=\"Ray\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        ///   The distance along the <see cref=\"Ray\"/> to the intersection point or\n        ///   <code>null</code> if the <see cref=\"Ray\"/> does not intesect this <see cref=\"BoundingBox\"/>.\n        /// </param>\n        public void Intersects(ref Ray ray, out Nullable<float> result)\n        {\n            IntersectsHelper.BoundingBoxIntersectsRay(ref this, ref ray,  out result);\n        }\n\n        /// <summary>\n        ///   Check if two <see cref=\"BoundingBox\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\">A <see cref=\"BoundingBox\"/> to compare the other.</param>\n        /// <param name=\"right\">A <see cref=\"BoundingBox\"/> to compare the other.</param>\n        /// <returns>\n        ///   <code>true</code> if <paramref name=\"left\"/> is equal to this <paramref name=\"right\"/>,\n        ///   <code>false</code> if it is not.\n        /// </returns>\n        public static bool operator ==(BoundingBox left, BoundingBox right)\n        {\n            return left.Equals(right);\n        }\n\n        /// <summary>\n        ///   Check if two <see cref=\"BoundingBox\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\">A <see cref=\"BoundingBox\"/> to compare the other.</param>\n        /// <param name=\"b\">A <see cref=\"BoundingBox\"/> to compare the other.</param>\n        /// <returns>\n        ///   <code>true</code> if <paramref name=\"left\"/> is not equal to this <paramref name=\"b\"/>,\n        ///   <code>false</code> if it is.\n        /// </returns>\n        public static bool operator !=(BoundingBox left, BoundingBox b)\n        {\n            return !left.Equals(b);\n        }\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    \"Min( \", this.Min.DebugDisplayString, \" )  \\r\\n\",\n                    \"Max( \",this.Max.DebugDisplayString, \" )\"\n                    );\n            }\n        }\n\n        /// <summary>\n        /// Get a <see cref=\"String\"/> representation of this <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"BoundingBox\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{{Min:\" + this.Min.ToString() + \" Max:\" + this.Max.ToString() + \"}}\";\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"min\"></param>\n        /// <param name=\"max\"></param>\n        public void Deconstruct(out Vector3 min, out Vector3 max)\n        {\n            min = Min;\n            max = Max;\n        }\n\n        #endregion Public Methods\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/BoundingFrustum.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Defines a viewing frustum for intersection operations.\n    /// </summary>\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public class BoundingFrustum : IEquatable<BoundingFrustum>\n    {\n        #region Private Fields\n\n        private Matrix _matrix;\n        internal readonly Vector3[] _corners = new Vector3[CornerCount];\n        internal readonly Plane[] _planes = new Plane[PlaneCount];\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The number of planes in the frustum.\n        /// </summary>\n        public const int PlaneCount = 6;\n\n        /// <summary>\n        /// The number of corner points in the frustum.\n        /// </summary>\n        public const int CornerCount = 8;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"Matrix\"/> of the frustum.\n        /// </summary>\n        public Matrix Matrix\n        {\n            get { return this._matrix; }\n            set\n            {\n                this._matrix = value;\n                this.CreatePlanes();    // FIXME: The odds are the planes will be used a lot more often than the matrix\n                this.CreateCorners();   // is updated, so this should help performance. I hope ;)\n            }\n        }\n\n        /// <summary>\n        /// Gets the near plane of the frustum.\n        /// </summary>\n        public Plane Near\n        {\n            get { return this._planes[0]; }\n        }\n\n        /// <summary>\n        /// Gets the far plane of the frustum.\n        /// </summary>\n        public Plane Far\n        {\n            get { return this._planes[1]; }\n        }\n\n        /// <summary>\n        /// Gets the left plane of the frustum.\n        /// </summary>\n        public Plane Left\n        {\n            get { return this._planes[2]; }\n        }\n\n        /// <summary>\n        /// Gets the right plane of the frustum.\n        /// </summary>\n        public Plane Right\n        {\n            get { return this._planes[3]; }\n        }\n\n        /// <summary>\n        /// Gets the top plane of the frustum.\n        /// </summary>\n        public Plane Top\n        {\n            get { return this._planes[4]; }\n        }\n\n        /// <summary>\n        /// Gets the bottom plane of the frustum.\n        /// </summary>\n        public Plane Bottom\n        {\n            get { return this._planes[5]; }\n        }\n\n        #endregion\n\n        #region Internal Properties\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    \"Near( \", this._planes[0].DebugDisplayString, \" )  \\r\\n\",\n                    \"Far( \", this._planes[1].DebugDisplayString, \" )  \\r\\n\",\n                    \"Left( \", this._planes[2].DebugDisplayString, \" )  \\r\\n\",\n                    \"Right( \", this._planes[3].DebugDisplayString, \" )  \\r\\n\",\n                    \"Top( \", this._planes[4].DebugDisplayString, \" )  \\r\\n\",\n                    \"Bottom( \", this._planes[5].DebugDisplayString, \" )  \"\n                    );\n            }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Constructs the frustum by extracting the view planes from a matrix.\n        /// </summary>\n        /// <param name=\"value\">Combined matrix which usually is (View * Projection).</param>\n        public BoundingFrustum(Matrix value)\n        {\n            this._matrix = value;\n            this.CreatePlanes();\n            this.CreateCorners();\n        }\n\n        #endregion\n\n        #region Operators\n\n        /// <summary>\n        /// Compares whether two <see cref=\"BoundingFrustum\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"BoundingFrustum\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"BoundingFrustum\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(BoundingFrustum left, BoundingFrustum right)\n        {\n            if (Equals(left, null))\n                return (Equals(right, null));\n\n            if (Equals(right, null))\n                return (Equals(left, null));\n\n            return left._matrix == (right._matrix);\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"BoundingFrustum\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"BoundingFrustum\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"BoundingFrustum\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\n        public static bool operator !=(BoundingFrustum left, BoundingFrustum right)\n        {\n            return !(left == right);\n        }\n\n        #endregion\n\n        #region Public Methods\n\n        #region Contains\n\n        /// <summary>\n        /// Containment test between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">A <see cref=\"BoundingBox\"/> for testing.</param>\n        /// <returns>Result of testing for containment between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingBox\"/>.</returns>\n        public ContainmentType Contains(BoundingBox box)\n        {\n            ContainmentType result = default(ContainmentType);\n            this.Contains(ref box, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Containment test between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">A <see cref=\"BoundingBox\"/> for testing.</param>\n        /// <param name=\"result\">Result of testing for containment between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingBox\"/> as an output parameter.</param>\n        public void Contains(ref BoundingBox box, out ContainmentType result)\n        {\n            result = ContainmentType.Contains;\n            for (int i = 0; i < PlaneCount; i++)\n            {\n                _planes[i].Intersects(ref box, out PlaneIntersectionType planeIntersectionType);\n                switch (planeIntersectionType)\n                {\n                    case PlaneIntersectionType.Front:\n                        result = ContainmentType.Disjoint;\n                        return;\n                    case PlaneIntersectionType.Intersecting:\n                        result = ContainmentType.Intersects;\n                        break;\n                }\n            }\n\n            if (result == ContainmentType.Intersects)\n            {\n                BoundingBox fbox = BoundingBox.CreateFromPoints(_corners);\n                box.Intersects(ref fbox, out bool intersects);\n                if (!intersects)\n                    result = ContainmentType.Disjoint;\n            }\n        }\n\n        /// <summary>\n        /// Containment test between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"frustum\">A <see cref=\"BoundingFrustum\"/> for testing.</param>\n        /// <returns>Result of testing for containment between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingFrustum\"/>.</returns>\n        public ContainmentType Contains(BoundingFrustum frustum)\n        {\n            if (this == frustum)                // We check to see if the two frustums are equal\n                return ContainmentType.Contains;// If they are, there's no need to go any further.\n\n            int i;\n            for (i = 0; i < BoundingFrustum.CornerCount; i++)\n            {\n                this.Contains(ref frustum._corners[i], out ContainmentType contained);\n                if (contained != ContainmentType.Contains)\n                    break;\n            }\n\n            if (i == BoundingFrustum.CornerCount)\n                return ContainmentType.Contains;\n\n            if (i > 0)\n                return ContainmentType.Intersects;\n\n            if (this.Intersects(frustum))\n                return ContainmentType.Intersects;\n            else\n                return ContainmentType.Disjoint;\n        }\n\n        /// <summary>\n        /// Containment test between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">A <see cref=\"BoundingSphere\"/> for testing.</param>\n        /// <returns>Result of testing for containment between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingSphere\"/>.</returns>\n        public ContainmentType Contains(BoundingSphere sphere)\n        {\n            ContainmentType result = default(ContainmentType);\n            this.Contains(ref sphere, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Containment test between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">A <see cref=\"BoundingSphere\"/> for testing.</param>\n        /// <param name=\"result\">Result of testing for containment between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"BoundingSphere\"/> as an output parameter.</param>\n        public void Contains(ref BoundingSphere sphere, out ContainmentType result)\n        {\n            result = ContainmentType.Contains;\n            for (int i = 0; i < PlaneCount; i++)\n            {\n                _planes[i].Intersects(ref sphere, out PlaneIntersectionType planeIntersectionType);\n                switch (planeIntersectionType)\n                {\n                    case PlaneIntersectionType.Front:\n                        result = ContainmentType.Disjoint;\n                        return;\n                    case PlaneIntersectionType.Intersecting:\n                        result = ContainmentType.Intersects;\n                        break;\n                }\n            }\n\n            if (result == ContainmentType.Intersects)\n            {\n                Intersects(ref sphere, out bool intersects);\n                if (!intersects)\n                    result = ContainmentType.Disjoint;\n            }\n        }\n\n        /// <summary>\n        /// Containment test between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"point\">A <see cref=\"Vector3\"/> for testing.</param>\n        /// <returns>Result of testing for containment between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"Vector3\"/>.</returns>\n        public ContainmentType Contains(Vector3 point)\n        {\n            ContainmentType result = default(ContainmentType);\n            this.Contains(ref point, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Containment test between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"point\">A <see cref=\"Vector3\"/> for testing.</param>\n        /// <param name=\"result\">Result of testing for containment between this <see cref=\"BoundingFrustum\"/> and specified <see cref=\"Vector3\"/> as an output parameter.</param>\n        public void Contains(ref Vector3 point, out ContainmentType result)\n        {\n            result = ContainmentType.Contains;\n            for (int i = 0; i < PlaneCount; i++)\n            {\n                this._planes[i].DotCoordinate(ref point, out float dot);\n                if (dot > 0)\n                {   \n                    result = ContainmentType.Disjoint;\n                    return;\n                }\n            }\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"BoundingFrustum\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(BoundingFrustum other)\n        {\n            return (this == other);\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is BoundingFrustum) && this == ((BoundingFrustum)obj);\n        }\n\n        /// <summary>\n        /// Returns a copy of internal corners array.\n        /// </summary>\n        /// <returns>The array of corners.</returns>\n        public Vector3[] GetCorners()\n        {\n            return (Vector3[])this._corners.Clone();\n        }\n\n        /// <summary>\n        /// Returns a copy of internal corners array.\n        /// </summary>\n        /// <param name=\"corners\">The array which values will be replaced to corner values of this instance. It must have size of <see cref=\"BoundingFrustum.CornerCount\"/>.</param>\n        public void GetCorners(Vector3[] corners)\n        {\n            if (corners == null) throw new ArgumentNullException(\"corners\");\n            if (corners.Length < CornerCount) throw new ArgumentOutOfRangeException(\"corners\");\n\n            this._corners.CopyTo(corners, 0);\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"BoundingFrustum\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return this._matrix.GetHashCode();\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"BoundingBox\"/> intersects with this <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"box\">A <see cref=\"BoundingBox\"/> for intersection test.</param>\n        /// <returns><c>true</c> if specified <see cref=\"BoundingBox\"/> intersects with this <see cref=\"BoundingFrustum\"/>; <c>false</c> otherwise.</returns>\n        public bool Intersects(BoundingBox box)\n        {\n            IntersectsHelper.BoundingBoxIntersectsBoundingFrustum(ref box, this, out bool result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"BoundingBox\"/> intersects with this <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"box\">A <see cref=\"BoundingBox\"/> for intersection test.</param>\n        /// <param name=\"result\"><c>true</c> if specified <see cref=\"BoundingBox\"/> intersects with this <see cref=\"BoundingFrustum\"/>; <c>false</c> otherwise as an output parameter.</param>\n        public void Intersects(ref BoundingBox box, out bool result)\n        {\n            IntersectsHelper.BoundingBoxIntersectsBoundingFrustum(ref box, this ,out result);\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"BoundingFrustum\"/> intersects with this <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"frustum\">An other <see cref=\"BoundingFrustum\"/> for intersection test.</param>\n        /// <returns><c>true</c> if other <see cref=\"BoundingFrustum\"/> intersects with this <see cref=\"BoundingFrustum\"/>; <c>false</c> otherwise.</returns>\n        public bool Intersects(BoundingFrustum frustum)//frustum)\n        {\n            if (this == frustum)\n                return true;\n\n            IntersectsHelper.BoundingFrustumIntersectsBoundingFrustum(this, frustum, out bool result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"BoundingSphere\"/> intersects with this <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">A <see cref=\"BoundingSphere\"/> for intersection test.</param>\n        /// <returns><c>true</c> if specified <see cref=\"BoundingSphere\"/> intersects with this <see cref=\"BoundingFrustum\"/>; <c>false</c> otherwise.</returns>\n        public bool Intersects(BoundingSphere sphere)\n        {\n            IntersectsHelper.BoundingFrustumIntersectsBoundingSphere(this, ref sphere, out bool result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"BoundingSphere\"/> intersects with this <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">A <see cref=\"BoundingSphere\"/> for intersection test.</param>\n        /// <param name=\"result\"><c>true</c> if specified <see cref=\"BoundingSphere\"/> intersects with this <see cref=\"BoundingFrustum\"/>; <c>false</c> otherwise as an output parameter.</param>\n        public void Intersects(ref BoundingSphere sphere, out bool result)\n        {\n            IntersectsHelper.BoundingFrustumIntersectsBoundingSphere(this, ref sphere, out result);\n        }\n\n        /// <summary>\n        /// Gets type of intersection between specified <see cref=\"Plane\"/> and this <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"plane\">A <see cref=\"Plane\"/> for intersection test.</param>\n        /// <returns>A plane intersection type.</returns>\n        public PlaneIntersectionType Intersects(Plane plane)\n        {\n            IntersectsHelper.BoundingFrustumIntersectsPlane(this, ref plane, out PlaneIntersectionType result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets type of intersection between specified <see cref=\"Plane\"/> and this <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"plane\">A <see cref=\"Plane\"/> for intersection test.</param>\n        /// <param name=\"result\">A plane intersection type as an output parameter.</param>\n        public void Intersects(ref Plane plane, out PlaneIntersectionType result)\n        {\n            IntersectsHelper.BoundingFrustumIntersectsPlane(this, ref plane, out result);\n        }\n        \n        /// <summary>\n        /// Gets the distance of intersection of <see cref=\"Ray\"/> and this <see cref=\"BoundingFrustum\"/> or null if no intersection happens.\n        /// </summary>\n        /// <param name=\"ray\">A <see cref=\"Ray\"/> for intersection test.</param>\n        /// <returns>Distance at which ray intersects with this <see cref=\"BoundingFrustum\"/> or null if no intersection happens.</returns>\n        public float? Intersects(Ray ray)\n        {\n            float? result;\n            IntersectsHelper.BoundingFrustumIntersectsRay(this, ref ray, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets the distance of intersection of <see cref=\"Ray\"/> and this <see cref=\"BoundingFrustum\"/> or null if no intersection happens.\n        /// </summary>\n        /// <param name=\"ray\">A <see cref=\"Ray\"/> for intersection test.</param>\n        /// <param name=\"result\">Distance at which ray intersects with this <see cref=\"BoundingFrustum\"/> or null if no intersection happens as an output parameter.</param>\n        public void Intersects(ref Ray ray, out float? result)\n        {\n            IntersectsHelper.BoundingFrustumIntersectsRay(this, ref ray, out result);\n        } \n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"BoundingFrustum\"/> in the format:\n        /// {Near:[nearPlane] Far:[farPlane] Left:[leftPlane] Right:[rightPlane] Top:[topPlane] Bottom:[bottomPlane]}\n        /// </summary>\n        /// <returns><see cref=\"String\"/> representation of this <see cref=\"BoundingFrustum\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{Near: \" + this._planes[0] +\n                   \" Far:\" + this._planes[1] +\n                   \" Left:\" + this._planes[2] +\n                   \" Right:\" + this._planes[3] +\n                   \" Top:\" + this._planes[4] +\n                   \" Bottom:\" + this._planes[5] +\n                   \"}\";\n        }\n\n        #endregion\n\n        #region Private Methods\n\n        private void CreateCorners()\n        {\n            IntersectionPoint(ref this._planes[0], ref this._planes[2], ref this._planes[4], out this._corners[0]);\n            IntersectionPoint(ref this._planes[0], ref this._planes[3], ref this._planes[4], out this._corners[1]);\n            IntersectionPoint(ref this._planes[0], ref this._planes[3], ref this._planes[5], out this._corners[2]);\n            IntersectionPoint(ref this._planes[0], ref this._planes[2], ref this._planes[5], out this._corners[3]);\n            IntersectionPoint(ref this._planes[1], ref this._planes[2], ref this._planes[4], out this._corners[4]);\n            IntersectionPoint(ref this._planes[1], ref this._planes[3], ref this._planes[4], out this._corners[5]);\n            IntersectionPoint(ref this._planes[1], ref this._planes[3], ref this._planes[5], out this._corners[6]);\n            IntersectionPoint(ref this._planes[1], ref this._planes[2], ref this._planes[5], out this._corners[7]);\n        }\n\n        private void CreatePlanes()\n        {            \n            this._planes[0] = new Plane(-this._matrix.M13, -this._matrix.M23, -this._matrix.M33, -this._matrix.M43);\n            this._planes[1] = new Plane(this._matrix.M13 - this._matrix.M14, this._matrix.M23 - this._matrix.M24, this._matrix.M33 - this._matrix.M34, this._matrix.M43 - this._matrix.M44);\n            this._planes[2] = new Plane(-this._matrix.M14 - this._matrix.M11, -this._matrix.M24 - this._matrix.M21, -this._matrix.M34 - this._matrix.M31, -this._matrix.M44 - this._matrix.M41);\n            this._planes[3] = new Plane(this._matrix.M11 - this._matrix.M14, this._matrix.M21 - this._matrix.M24, this._matrix.M31 - this._matrix.M34, this._matrix.M41 - this._matrix.M44);\n            this._planes[4] = new Plane(this._matrix.M12 - this._matrix.M14, this._matrix.M22 - this._matrix.M24, this._matrix.M32 - this._matrix.M34, this._matrix.M42 - this._matrix.M44);\n            this._planes[5] = new Plane(-this._matrix.M14 - this._matrix.M12, -this._matrix.M24 - this._matrix.M22, -this._matrix.M34 - this._matrix.M32, -this._matrix.M44 - this._matrix.M42);\n            \n            this.NormalizePlane(ref this._planes[0]);\n            this.NormalizePlane(ref this._planes[1]);\n            this.NormalizePlane(ref this._planes[2]);\n            this.NormalizePlane(ref this._planes[3]);\n            this.NormalizePlane(ref this._planes[4]);\n            this.NormalizePlane(ref this._planes[5]);\n        }\n\n        private static void IntersectionPoint(ref Plane a, ref Plane b, ref Plane c, out Vector3 result)\n        {\n            // Formula used\n            //                d1 ( N2 * N3 ) + d2 ( N3 * N1 ) + d3 ( N1 * N2 )\n            //P =   -------------------------------------------------------------------------\n            //                             N1 . ( N2 * N3 )\n            //\n            // Note: N refers to the normal, d refers to the displacement. '.' means dot product. '*' means cross product\n            \n            Vector3 v1, v2, v3;\n            Vector3 cross;\n            \n            Vector3.Cross(ref b.Normal, ref c.Normal, out cross);\n            \n            float f;\n            Vector3.Dot(ref a.Normal, ref cross, out f);\n            f *= -1.0f;\n            \n            Vector3.Cross(ref b.Normal, ref c.Normal, out cross);\n            Vector3.Multiply(ref cross, a.D, out v1);\n            //v1 = (a.D * (Vector3.Cross(b.Normal, c.Normal)));\n            \n            \n            Vector3.Cross(ref c.Normal, ref a.Normal, out cross);\n            Vector3.Multiply(ref cross, b.D, out v2);\n            //v2 = (b.D * (Vector3.Cross(c.Normal, a.Normal)));\n            \n            \n            Vector3.Cross(ref a.Normal, ref b.Normal, out cross);\n            Vector3.Multiply(ref cross, c.D, out v3);\n            //v3 = (c.D * (Vector3.Cross(a.Normal, b.Normal)));\n            \n            result.X = (v1.X + v2.X + v3.X) / f;\n            result.Y = (v1.Y + v2.Y + v3.Y) / f;\n            result.Z = (v1.Z + v2.Z + v3.Z) / f;\n        }\n        \n        private void NormalizePlane(ref Plane p)\n        {\n            float factor = 1f / p.Normal.Length();\n            p.Normal.X *= factor;\n            p.Normal.Y *= factor;\n            p.Normal.Z *= factor;\n            p.D *= factor;\n        }\n\n        #endregion\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework/BoundingSphere.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Describes a sphere in 3D-space for bounding operations.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct BoundingSphere : IEquatable<BoundingSphere>\n    {\n        #region Public Fields\n\n        /// <summary>\n        /// The sphere center.\n        /// </summary>\n        [DataMember]\n        public Vector3 Center;\n\n        /// <summary>\n        /// The sphere radius.\n        /// </summary>\n        [DataMember]\n        public float Radius;\n\n        #endregion\n\n        #region Internal Properties\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    \"Center( \", this.Center.DebugDisplayString, \" )  \\r\\n\",\n                    \"Radius( \", this.Radius.ToString(), \" )\"\n                    );\n            }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Constructs a bounding sphere with the specified center and radius.  \n        /// </summary>\n        /// <param name=\"center\">The sphere center.</param>\n        /// <param name=\"radius\">The sphere radius.</param>\n        public BoundingSphere(Vector3 center, float radius)\n        {\n            this.Center = center;\n            this.Radius = radius;\n        }\n\n        #endregion\n\n        #region Public Methods\n\n        #region Contains\n\n        /// <summary>\n        /// Test if a bounding box is fully inside, outside, or just intersecting the sphere.\n        /// </summary>\n        /// <param name=\"box\">The box for testing.</param>\n        /// <returns>The containment type.</returns>\n        public ContainmentType Contains(BoundingBox box)\n        {\n            //check if all corner is in sphere\n            bool inside = true;\n            foreach (Vector3 corner in box.GetCorners())\n            {\n                if (this.Contains(corner) == ContainmentType.Disjoint)\n                {\n                    inside = false;\n                    break;\n                }\n            }\n\n            if (inside)\n                return ContainmentType.Contains;\n\n            //check if the distance from sphere center to cube face < radius\n            double dmin = 0;\n\n            if (Center.X < box.Min.X)\n                dmin += (Center.X - box.Min.X) * (Center.X - box.Min.X);\n\n            else if (Center.X > box.Max.X)\n                    dmin += (Center.X - box.Max.X) * (Center.X - box.Max.X);\n\n            if (Center.Y < box.Min.Y)\n                dmin += (Center.Y - box.Min.Y) * (Center.Y - box.Min.Y);\n\n            else if (Center.Y > box.Max.Y)\n                dmin += (Center.Y - box.Max.Y) * (Center.Y - box.Max.Y);\n\n            if (Center.Z < box.Min.Z)\n                dmin += (Center.Z - box.Min.Z) * (Center.Z - box.Min.Z);\n\n            else if (Center.Z > box.Max.Z)\n                dmin += (Center.Z - box.Max.Z) * (Center.Z - box.Max.Z);\n\n            if (dmin <= Radius * Radius) \n                return ContainmentType.Intersects;\n            \n            //else disjoint\n            return ContainmentType.Disjoint;\n        }\n\n        /// <summary>\n        /// Test if a bounding box is fully inside, outside, or just intersecting the sphere.\n        /// </summary>\n        /// <param name=\"box\">The box for testing.</param>\n        /// <param name=\"result\">The containment type as an output parameter.</param>\n        public void Contains(ref BoundingBox box, out ContainmentType result)\n        {\n            result = this.Contains(box);\n        }\n\n        /// <summary>\n        /// Test if a frustum is fully inside, outside, or just intersecting the sphere.\n        /// </summary>\n        /// <param name=\"frustum\">The frustum for testing.</param>\n        /// <returns>The containment type.</returns>\n        public ContainmentType Contains(BoundingFrustum frustum)\n        {\n            int i;\n            for (i = 0; i < BoundingFrustum.CornerCount; i++)\n            {\n                this.Contains(ref frustum._corners[i], out ContainmentType contained);\n                if (contained == ContainmentType.Disjoint)\n                    break;\n            }\n\n            if (i == BoundingFrustum.CornerCount)\n                return ContainmentType.Contains;\n\n            if (i > 0)\n                return ContainmentType.Intersects;\n\n            if (this.Intersects(frustum))\n                return ContainmentType.Intersects;\n            else\n                return ContainmentType.Disjoint;\n        }\n\n        /// <summary>\n        /// Test if a frustum is fully inside, outside, or just intersecting the sphere.\n        /// </summary>\n        /// <param name=\"frustum\">The frustum for testing.</param>\n        /// <param name=\"result\">The containment type as an output parameter.</param>\n        public void Contains(ref BoundingFrustum frustum,out ContainmentType result)\n        {\n            result = this.Contains(frustum);\n        }\n\n        /// <summary>\n        /// Test if a sphere is fully inside, outside, or just intersecting the sphere.\n        /// </summary>\n        /// <param name=\"sphere\">The other sphere for testing.</param>\n        /// <returns>The containment type.</returns>\n        public ContainmentType Contains(BoundingSphere sphere)\n        {\n            ContainmentType result;\n            Contains(ref sphere, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Test if a sphere is fully inside, outside, or just intersecting the sphere.\n        /// </summary>\n        /// <param name=\"sphere\">The other sphere for testing.</param>\n        /// <param name=\"result\">The containment type as an output parameter.</param>\n        public void Contains(ref BoundingSphere sphere, out ContainmentType result)\n        {\n            float sqDistance;\n            Vector3.DistanceSquared(ref sphere.Center, ref Center, out sqDistance);\n\n            if (sqDistance > (sphere.Radius + Radius) * (sphere.Radius + Radius))\n                result = ContainmentType.Disjoint;\n\n            else if (sqDistance <= (Radius - sphere.Radius) * (Radius - sphere.Radius))\n                result = ContainmentType.Contains;\n\n            else\n                result = ContainmentType.Intersects;\n        }\n\n        /// <summary>\n        /// Test if a point is fully inside, outside, or just intersecting the sphere.\n        /// </summary>\n        /// <param name=\"point\">The vector in 3D-space for testing.</param>\n        /// <returns>The containment type.</returns>\n        public ContainmentType Contains(Vector3 point)\n        {\n            ContainmentType result;\n            Contains(ref point, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Test if a point is fully inside, outside, or just intersecting the sphere.\n        /// </summary>\n        /// <param name=\"point\">The vector in 3D-space for testing.</param>\n        /// <param name=\"result\">The containment type as an output parameter.</param>\n        public void Contains(ref Vector3 point, out ContainmentType result)\n        {\n            float sqRadius = Radius * Radius;\n            float sqDistance;\n            Vector3.DistanceSquared(ref point, ref Center, out sqDistance);\n            \n            if (sqDistance > sqRadius)\n                result = ContainmentType.Disjoint;\n\n            else if (sqDistance < sqRadius)\n                result = ContainmentType.Contains;\n\n            else \n                result = ContainmentType.Intersects;\n        }\n\n        #endregion\n\n        #region CreateFromBoundingBox\n\n        /// <summary>\n        /// Creates the smallest <see cref=\"BoundingSphere\"/> that can contain a specified <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The box to create the sphere from.</param>\n        /// <returns>The new <see cref=\"BoundingSphere\"/>.</returns>\n        public static BoundingSphere CreateFromBoundingBox(BoundingBox box)\n        {\n            BoundingSphere result;\n            CreateFromBoundingBox(ref box, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates the smallest <see cref=\"BoundingSphere\"/> that can contain a specified <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The box to create the sphere from.</param>\n        /// <param name=\"result\">The new <see cref=\"BoundingSphere\"/> as an output parameter.</param>\n        public static void CreateFromBoundingBox(ref BoundingBox box, out BoundingSphere result)\n        {\n            // Find the center of the box.\n            Vector3 center = new Vector3((box.Min.X + box.Max.X) / 2.0f,\n                                         (box.Min.Y + box.Max.Y) / 2.0f,\n                                         (box.Min.Z + box.Max.Z) / 2.0f);\n\n            // Find the distance between the center and one of the corners of the box.\n            float radius = Vector3.Distance(center, box.Max);\n\n            result = new BoundingSphere(center, radius);\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Creates the smallest <see cref=\"BoundingSphere\"/> that can contain a specified <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"frustum\">The frustum to create the sphere from.</param>\n        /// <returns>The new <see cref=\"BoundingSphere\"/>.</returns>\n        public static BoundingSphere CreateFromFrustum(BoundingFrustum frustum)\n        {\n            return CreateFromPoints(frustum.GetCorners());\n        }\n\n        /// <summary>\n        /// Creates the smallest <see cref=\"BoundingSphere\"/> that can contain a specified list of points in 3D-space. \n        /// </summary>\n        /// <param name=\"points\">List of point to create the sphere from.</param>\n        /// <returns>The new <see cref=\"BoundingSphere\"/>.</returns>\n        public static BoundingSphere CreateFromPoints(IEnumerable<Vector3> points)\n        {\n            if (points == null )\n                throw new ArgumentNullException(\"points\");\n\n            // From \"Real-Time Collision Detection\" (Page 89)\n\n            var minx = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);\n            var maxx = -minx;\n            var miny = minx;\n            var maxy = -minx;\n            var minz = minx;\n            var maxz = -minx;\n\n            // Find the most extreme points along the principle axis.\n            var numPoints = 0;           \n            foreach (var pt in points)\n            {\n                ++numPoints;\n\n                if (pt.X < minx.X) \n                    minx = pt;\n                if (pt.X > maxx.X) \n                    maxx = pt;\n                if (pt.Y < miny.Y) \n                    miny = pt;\n                if (pt.Y > maxy.Y) \n                    maxy = pt;\n                if (pt.Z < minz.Z) \n                    minz = pt;\n                if (pt.Z > maxz.Z) \n                    maxz = pt;\n            }\n\n            if (numPoints == 0)\n                throw new ArgumentException(\"You should have at least one point in points.\");\n\n            var sqDistX = Vector3.DistanceSquared(maxx, minx);\n            var sqDistY = Vector3.DistanceSquared(maxy, miny);\n            var sqDistZ = Vector3.DistanceSquared(maxz, minz);\n\n            // Pick the pair of most distant points.\n            var min = minx;\n            var max = maxx;\n            if (sqDistY > sqDistX && sqDistY > sqDistZ) \n            {\n                max = maxy;\n                min = miny;\n            }\n            if (sqDistZ > sqDistX && sqDistZ > sqDistY) \n            {\n                max = maxz;\n                min = minz;\n            }\n            \n            var center = (min + max) * 0.5f;\n            var radius = Vector3.Distance(max, center);\n            \n            // Test every point and expand the sphere.\n            // The current bounding sphere is just a good approximation and may not enclose all points.            \n            // From: Mathematics for 3D Game Programming and Computer Graphics, Eric Lengyel, Third Edition.\n            // Page 218\n            float sqRadius = radius * radius;\n            foreach (var pt in points)\n            {\n                Vector3 diff = (pt-center);\n                float sqDist = diff.LengthSquared();\n                if (sqDist > sqRadius)\n                {\n                    float distance = (float)Math.Sqrt(sqDist); // equal to diff.Length();\n                    Vector3 direction = diff / distance;\n                    Vector3 G = center - radius * direction;\n                    center = (G + pt) / 2;\n                    radius = Vector3.Distance(pt, center);\n                    sqRadius = radius * radius;\n                }\n            }\n\n            return new BoundingSphere(center, radius);\n        }\n\n        /// <summary>\n        /// Creates the smallest <see cref=\"BoundingSphere\"/> that can contain two spheres.\n        /// </summary>\n        /// <param name=\"original\">First sphere.</param>\n        /// <param name=\"additional\">Second sphere.</param>\n        /// <returns>The new <see cref=\"BoundingSphere\"/>.</returns>\n        public static BoundingSphere CreateMerged(BoundingSphere original, BoundingSphere additional)\n        {\n            BoundingSphere result;\n            CreateMerged(ref original, ref additional, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates the smallest <see cref=\"BoundingSphere\"/> that can contain two spheres.\n        /// </summary>\n        /// <param name=\"original\">First sphere.</param>\n        /// <param name=\"additional\">Second sphere.</param>\n        /// <param name=\"result\">The new <see cref=\"BoundingSphere\"/> as an output parameter.</param>\n        public static void CreateMerged(ref BoundingSphere original, ref BoundingSphere additional, out BoundingSphere result)\n        {\n            Vector3 ocenterToaCenter = Vector3.Subtract(additional.Center, original.Center);\n            float distance = ocenterToaCenter.Length();\n            if (distance <= original.Radius + additional.Radius)//intersect\n            {\n                if (distance <= original.Radius - additional.Radius)//original contain additional\n                {\n                    result = original;\n                    return;\n                }\n                if (distance <= additional.Radius - original.Radius)//additional contain original\n                {\n                    result = additional;\n                    return;\n                }\n            }\n            //else find center of new sphere and radius\n            float leftRadius = Math.Max(original.Radius - distance, additional.Radius);\n            float Rightradius = Math.Max(original.Radius + distance, additional.Radius);\n            ocenterToaCenter = ocenterToaCenter + (((leftRadius - Rightradius) / (2 * ocenterToaCenter.Length())) * ocenterToaCenter);//oCenterToResultCenter\n\n            result = new BoundingSphere();\n            result.Center = original.Center + ocenterToaCenter;\n            result.Radius = (leftRadius + Rightradius) / 2;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"BoundingSphere\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(BoundingSphere other)\n        {\n            return this.Center == other.Center && this.Radius == other.Radius;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is BoundingSphere)\n                return this.Equals((BoundingSphere)obj);\n\n            return false;\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"BoundingSphere\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return this.Center.GetHashCode() + this.Radius.GetHashCode();\n        }\n\n        #region Intersects\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"BoundingBox\"/> intersects with this sphere.\n        /// </summary>\n        /// <param name=\"box\">The box for testing.</param>\n        /// <returns><c>true</c> if <see cref=\"BoundingBox\"/> intersects with this sphere; <c>false</c> otherwise.</returns>\n        public bool Intersects(BoundingBox box)\n        {\n            bool result;\n            IntersectsHelper.BoundingBoxIntersectsBoundingSphere(ref box, ref this, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"BoundingBox\"/> intersects with this sphere.\n        /// </summary>\n        /// <param name=\"box\">The box for testing.</param>\n        /// <param name=\"result\"><c>true</c> if <see cref=\"BoundingBox\"/> intersects with this sphere; <c>false</c> otherwise. As an output parameter.</param>\n        public void Intersects(ref BoundingBox box, out bool result)\n        {\n            IntersectsHelper.BoundingBoxIntersectsBoundingSphere(ref box, ref this, out result);\n        }\n\n        public bool Intersects(BoundingFrustum frustum)\n        {\n            if (frustum == null)\n                throw new NullReferenceException();\n\n            IntersectsHelper.BoundingFrustumIntersectsBoundingSphere(frustum, ref this, out bool result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets whether or not the other <see cref=\"BoundingSphere\"/> intersects with this sphere.\n        /// </summary>\n        /// <param name=\"sphere\">The other sphere for testing.</param>\n        /// <returns><c>true</c> if other <see cref=\"BoundingSphere\"/> intersects with this sphere; <c>false</c> otherwise.</returns>\n        public bool Intersects(BoundingSphere sphere)\n        {\n            bool result;\n            IntersectsHelper.BoundingSphereIntersectsBoundingSphere(ref this, ref sphere, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets whether or not the other <see cref=\"BoundingSphere\"/> intersects with this sphere.\n        /// </summary>\n        /// <param name=\"sphere\">The other sphere for testing.</param>\n        /// <param name=\"result\"><c>true</c> if other <see cref=\"BoundingSphere\"/> intersects with this sphere; <c>false</c> otherwise. As an output parameter.</param>\n        public void Intersects(ref BoundingSphere sphere, out bool result)\n        {\n            IntersectsHelper.BoundingSphereIntersectsBoundingSphere(ref this, ref sphere, out result);\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"Plane\"/> intersects with this sphere.\n        /// </summary>\n        /// <param name=\"plane\">The plane for testing.</param>\n        /// <returns>Type of intersection.</returns>\n        public PlaneIntersectionType Intersects(Plane plane)\n        {\n            PlaneIntersectionType result;\n            IntersectsHelper.BoundingSphereIntersectsPlane(ref this, ref plane, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"Plane\"/> intersects with this sphere.\n        /// </summary>\n        /// <param name=\"plane\">The plane for testing.</param>\n        /// <param name=\"result\">Type of intersection as an output parameter.</param>\n        public void Intersects(ref Plane plane, out PlaneIntersectionType result)\n        {\n            IntersectsHelper.BoundingSphereIntersectsPlane(ref this, ref plane, out result);\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"Ray\"/> intersects with this sphere.\n        /// </summary>\n        /// <param name=\"ray\">The ray for testing.</param>\n        /// <returns>Distance of ray intersection or <c>null</c> if there is no intersection.</returns>\n        public float? Intersects(Ray ray)\n        {\n            float? result;\n            IntersectsHelper.BoundingSphereIntersectsRay(ref this, ref ray, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Gets whether or not a specified <see cref=\"Ray\"/> intersects with this sphere.\n        /// </summary>\n        /// <param name=\"ray\">The ray for testing.</param>\n        /// <param name=\"result\">Distance of ray intersection or <c>null</c> if there is no intersection as an output parameter.</param>\n        public void Intersects(ref Ray ray, out float? result)\n        {\n            IntersectsHelper.BoundingSphereIntersectsRay(ref this, ref ray, out result);\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"BoundingSphere\"/> in the format:\n        /// {Center:[<see cref=\"Center\"/>] Radius:[<see cref=\"Radius\"/>]}\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"BoundingSphere\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{Center:\" + this.Center + \" Radius:\" + this.Radius + \"}\";\n        }\n\n        #region Transform\n\n        /// <summary>\n        /// Creates a new <see cref=\"BoundingSphere\"/> that contains a transformation of translation and scale from this sphere by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <returns>Transformed <see cref=\"BoundingSphere\"/>.</returns>\n        public BoundingSphere Transform(Matrix matrix)\n        {\n            BoundingSphere sphere = new BoundingSphere();\n            sphere.Center = Vector3.Transform(this.Center, matrix);\n            sphere.Radius = this.Radius * ((float)Math.Sqrt((double)Math.Max((matrix.M11 * matrix.M11) + (matrix.M12 * matrix.M12) + (matrix.M13 * matrix.M13), Math.Max( (matrix.M21 * matrix.M21) + (matrix.M22 * matrix.M22) + (matrix.M23 * matrix.M23), (matrix.M31 * matrix.M31) + (matrix.M32 * matrix.M32) + (matrix.M33 * matrix.M33)))));\n            return sphere;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"BoundingSphere\"/> that contains a transformation of translation and scale from this sphere by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Transformed <see cref=\"BoundingSphere\"/> as an output parameter.</param>\n        public void Transform(ref Matrix matrix, out BoundingSphere result)\n        {\n            result.Center = Vector3.Transform(this.Center, matrix);\n            result.Radius = this.Radius * ((float)Math.Sqrt((double)Math.Max((matrix.M11 * matrix.M11) + (matrix.M12 * matrix.M12) + (matrix.M13 * matrix.M13), Math.Max((matrix.M21 * matrix.M21) + (matrix.M22 * matrix.M22) + (matrix.M23 * matrix.M23), (matrix.M31 * matrix.M31) + (matrix.M32 * matrix.M32) + (matrix.M33 * matrix.M33)))));\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"center\"></param>\n        /// <param name=\"radius\"></param>\n        public void Deconstruct(out Vector3 center, out float radius)\n        {\n            center = Center;\n            radius = Radius;\n        }\n\n        #endregion\n\n        #region Operators\n\n        /// <summary>\n        /// Compares whether two <see cref=\"BoundingSphere\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"a\"><see cref=\"BoundingSphere\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"b\"><see cref=\"BoundingSphere\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator == (BoundingSphere a, BoundingSphere b)\n        {\n            return a.Equals(b);\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"BoundingSphere\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"a\"><see cref=\"BoundingSphere\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"b\"><see cref=\"BoundingSphere\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\n        public static bool operator != (BoundingSphere a, BoundingSphere b)\n        {\n            return !a.Equals(b);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Complex.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\n#if NET8_0_OR_GREATER\nusing SysNumerics = System.Numerics;\n#endif\n\n\nnamespace Microsoft.Xna.Framework\n{\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct Complex : IEquatable<Complex>\n    {\n        #region Private Fields\n\n        private static readonly Complex _zero = new Complex(0, 0);\n        private static readonly Complex _one = new Complex(1, 0);\n        private static readonly Complex _imaginaryOne = new Complex(0, 1);\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The real part of this <see cref=\"Complex\"/> number.\n        /// </summary>\n        [DataMember]\n        public float R;\n\n        /// <summary>\n        /// The imaginary part of this <see cref=\"Complex\"/> number.\n        /// </summary>\n        [DataMember]\n        public float i;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// Returns a <see cref=\"Complex\"/> number with components (0, 0i).\n        /// </summary>\n        public static Complex Zero { get { return _zero; } }\n\n        /// <summary>\n        /// Returns a <see cref=\"Complex\"/> number with components (1, 0i).\n        /// </summary>\n        public static Complex One { get { return _one; } }\n\n        /// <summary>\n        /// Returns a <see cref=\"Complex\"/> number with components (0, 1i).\n        /// </summary>\n        public static Complex ImaginaryOne { get { return _imaginaryOne; } }\n\n        /// <summary>\n        /// Returns a <see cref=\"Complex\"/> number with components (1, 0i).\n        /// </summary>\n        public static Complex Identity { get { return _one; } }\n\n        public float Phase\n        {\n            get { return (float)Math.Atan2(i, R); }\n        }\n\n        public float Magnitude\n        {\n            get { return (float)Math.Sqrt((R * R) + (i * i)); }\n        }\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                if (this == Complex.Identity)\n                    return \"Identity\";\n\n                return String.Format(\"{{R: {0} i: {1} Magnitude: {2} Phase: {3}}}\",\n                    R, i, Magnitude, Phase);\n            }\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Constructs a complex number with real and imaginary components.\n        /// </summary>\n        /// <param name=\"real\">The real part of this <see cref=\"Complex\"/> number.</param>\n        /// <param name=\"imaginary\"> The imaginary part of this <see cref=\"Complex\"/> number.</param>\n        public Complex(float real, float imaginary)\n        {\n            R = real;\n            i = imaginary;\n        }\n\n        /// <summary>\n        /// Constructs a complex number from <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <param name=\"value\">The R,i components.</param>\n        public Complex(Vector2 value)\n        {\n            R = value.X;\n            i = value.Y;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Complex\"/> number from the specified angle.\n        /// </summary>\n        /// /// <param name=\"phase\">The angle in radians.</param>\n        /// /// <param name=\"magnitude\">The magnitude.</param>\n        public static Complex CreateFromPolarCoordinates(float phase, float magnitude)\n        {\n            Complex result;\n            result.R = (float)Math.Cos(phase) * magnitude;\n            result.i = (float)Math.Sin(phase) * magnitude;\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Complex\"/> number from the specified angle.\n        /// </summary>\n        /// /// <param name=\"angle\">The angle in radians.</param>\n        public static Complex CreateFromAngle(float angle)\n        {\n            Complex result;\n            result.R = (float)Math.Cos(angle);\n            result.i = (float)Math.Sin(angle);\n            return result;\n        }\n\n        /// <summary>\n        /// Transforms this complex number into its conjugated version.\n        /// </summary>\n        public void Conjugate()\n        {\n            i = -i;\n        }\n\n        /// <summary>\n        /// Flips the sign of the all the complex number components.\n        /// </summary>\n        public void Negate()\n        {\n            R = -R;\n            i = -i;\n        }\n\n        /// <summary>\n        /// Returns the squared magnitude of the complex number.\n        /// </summary>\n        /// <returns>The squared magnitude of the complex number components.</returns>\n        public float MagnitudeSquared()\n        {\n            return (R * R) + (i * i);\n        }\n\n        /// <summary>\n        /// Scales the complex number magnitude to unit length.\n        /// </summary>\n        public void Normalize()\n        {\n            float mag = Magnitude;\n            R = R / mag;\n            i = i / mag;\n        }\n\n        /// <summary>\n        /// Gets a <see cref=\"Vector2\"/> representation for this complex number.\n        /// </summary>\n        /// <returns>A <see cref=\"Vector2\"/> representation for this complex number.</returns>\n        public Vector2 ToVector2()\n        {\n            return new Vector2(R, i);\n        }\n\n        internal Complex Rotate90()\n        {\n            return new Complex(-i, +R);\n        }\n\n        internal Complex Rotate180()\n        {\n            return new Complex(-R, -i);\n        }\n\n        internal Complex Rotate270()\n        {\n            return new Complex(+i, -R);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Complex\"/> number that contains a multiplication of two complex numbers.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/> number.</param>\n        /// <param name=\"right\">Source <see cref=\"Complex\"/> number.</param>\n        /// <returns>The result of the complex number multiplication.</returns>\n        public static Complex Multiply(Complex left, Complex right)\n        {\n            return new Complex(left.R * right.R - left.i * right.i,\n                               left.i * right.R + left.R * right.i);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Complex\"/> number that contains a multiplication of two complex numbers.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/> number.</param>\n        /// <param name=\"right\">Source <see cref=\"Complex\"/> number.</param>\n        /// <param name=\"result\">The result of the complex number multiplication as an output parameter.</param>\n        public static void Multiply(ref Complex left, ref Complex right, out Complex result)\n        {\n            result = new Complex(left.R * right.R - left.i * right.i,\n                                 left.i * right.R + left.R * right.i);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Complex\"/> that contains a multiplication of <see cref=\"Complex\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <returns>The result of the Complex multiplication with a scalar.</returns>\n        public static Complex Multiply(Complex left, float right)\n        {\n            left.R *= right;\n            left.i *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Complex\"/> that contains a multiplication of <see cref=\"Complex\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <param name=\"result\">The result of the multiplication with a scalar as an output parameter.</param>\n        public static void Multiply(ref Complex left, float right, out Complex result)\n        {\n            result.R = left.R * right;\n            result.i = left.i * right;\n        }\n\n        public static Complex Divide(Complex left, Complex right)\n        {\n            return new Complex(right.R * left.R + right.i * left.i,\n                               right.R * left.i - right.i * left.R);\n        }\n\n        public static void Divide(ref Complex left, ref Complex right, out Complex result)\n        {\n            result = new Complex(right.R * left.R + right.i * left.i,\n                                 right.R * left.i - right.i * left.R);\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Complex\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <returns>The result of dividing a Complex by a scalar.</returns>\n        public static Complex Divide(Complex left, float right)\n        {\n            left.R /= right;\n            left.i /= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Complex\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <param name=\"result\">The result of dividing a Complex by a scalar as an output parameter.</param>\n        public static void Divide(ref Complex left, float right, out Complex result)\n        {\n            result.R = left.R / right;\n            result.i = left.i / right;\n        }\n\n        /// <summary>\n        /// Transforms this complex number into its conjugated version.\n        /// </summary>\n        /// <param name=\"value\">The complex number which values will be used to create the conjugated version.</param>\n        /// <returns>The conjugate version of the specified complex number.</returns>\n        public static Complex Conjugate(Complex value)\n        {\n            return new Complex(value.R, -value.i);\n        }\n\n        /// <summary>\n        /// Transforms this complex number into its conjugated version.\n        /// </summary>\n        /// <param name=\"value\">The complex number which values will be used to create the conjugated version.</param>\n        /// <param name=\"result\">The conjugated version of the specified complex number as an output parameter.</param>\n        public static void Conjugate(ref Complex value, out Complex result)\n        {\n            result = new Complex(value.R, -value.i);\n        }\n\n        /// <summary>\n        /// Flips the sign of the all the complex number components.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Complex\"/>.</param>\n        /// <returns>The result of the complex number negation.</returns>\n        public static Complex Negate(Complex value)\n        {\n            return new Complex(-value.R, -value.i);\n        }\n\n        /// <summary>\n        /// Flips the sign of the all the complex number components.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Complex\"/>.</param>\n        /// <param name=\"result\">The result of the complex number negation as an output parameter.</param>\n        public static void Negate(ref Complex value, out Complex result)\n        {\n            result = new Complex(-value.R, -value.i);\n        }\n\n        /// <summary>\n        /// Scales the complex number magnitude to unit length.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Complex\"/>.</param>\n        /// <returns>The unit length complex number.</returns>\n        public static Complex Normalize(Complex value)\n        {\n            float mag = value.Magnitude;\n            return new Complex(value.R / mag, -value.i / mag);\n        }\n\n        /// <summary>\n        /// Scales the complex number magnitude to unit length.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Complex\"/>.</param>\n        /// <param name=\"result\">The unit length complex number as an output parameter.</param>\n        public static void Normalize(ref Complex value, out Complex result)\n        {\n            float mag = value.Magnitude;\n            result = new Complex(value.R / mag, -value.i / mag);\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Complex\"/>.\n        /// </summary>\n        /// <param name=\"real\">The real part of this <see cref=\"Complex\" /> number.</param>\n        /// <param name=\"imaginary\">The imaginary part of this <see cref=\"Complex\"/> number.</param>\n        public void Deconstruct(out float real, out float imaginary)\n        {\n            real = this.R;\n            imaginary = this.i;\n        }\n\n\n        #region Operators\n\n        /// <summary>\n        /// Flips the sign of the all the complex number components.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Complex\"/> on the right of the sub sign.</param>\n        /// <returns>The result of the complex number negation.</returns>\n        public static Complex operator -(Complex value)\n        {\n            return new Complex(-value.R, -value.i);\n        }\n\n        /// <summary>\n        /// Multiplies two complex numbers.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/> number on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Complex\"/> number on the right of the mul sign.</param>\n        /// <returns>Result of the complex numbers multiplication.</returns>\n        public static Complex operator *(Complex left, Complex right)\n        {\n            return new Complex(left.R * right.R - left.i * right.i,\n                               left.i * right.R + left.R * right.i);\n        }\n\n        /// <summary>\n        /// Multiplies the components of a <see cref=\"Complex\"/> number by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Scalar value on the right of the mul sign.</param>\n        /// <returns>Result of the complex number multiplication with a scalar.</returns>\n        public static Complex operator *(Complex left, float right)\n        {\n            left.R *= right;\n            left.i *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides a <see cref=\"Complex\"/> number by the other <see cref=\"Complex\"/> number.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/> number on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Complex\"/> number on the right of the div sign.</param>\n        /// <returns>The result of dividing the complex numbers.</returns>\n        public static Complex operator /(Complex left, Complex right)\n        {\n            return new Complex(right.R * left.R + right.i * left.i,\n                               right.R * left.i - right.i * left.R);\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Complex\"/> number by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Complex\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor scalar on the right of the div sign.</param>\n        /// <returns>The result of dividing a complex number by a scalar.</returns>\n        public static Complex operator /(Complex left, float right)\n        {\n            left.R /= right;\n            left.i /= right;\n            return left;\n        }\n\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Complex\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Complex\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Complex\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Complex left, Complex right)\n        {\n            return left.R == right.R && left.i == right.i;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Complex\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Complex\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Complex\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\n        public static bool operator !=(Complex left, Complex right)\n        {\n            return left.R != right.R || left.i != right.i;\n        }\n\n#if NET8_0_OR_GREATER\n        public static explicit operator Complex(SysNumerics.Complex value)\n        {\n            Complex result;\n            result.R = (float)value.Real;\n            result.i = (float)value.Imaginary;\n            return result;\n        }\n\n        public static explicit operator SysNumerics.Complex(Complex value)\n        {\n            return new SysNumerics.Complex(\n                (double)value.R,\n                (double)value.i);\n        }\n#endif\n\n        #endregion\n\n\n        #region IEquatable<Complex>\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is Complex)\n                return Equals((Complex)obj);\n            return false;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Complex\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Complex\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Complex other)\n        {\n            return R == other.R &&\n                   i == other.i;\n        }\n\n        #endregion\n\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Complex\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Complex\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return R.GetHashCode() + i.GetHashCode();\n        }\n\n        /// <inheritdoc/>\n        public override string ToString()\n        {\n            return String.Format(\"{{R: {0}, i: {1} }}\", R, i);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/ContainmentType.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Defines how the bounding volumes intersects or contain one another.\n    /// </summary>\n    public enum ContainmentType\n    {\n        /// <summary>\n        /// Indicates that there is no overlap between two bounding volumes.\n        /// </summary>\n        Disjoint,\n        /// <summary>\n        /// Indicates that one bounding volume completely contains another volume.\n        /// </summary>\n        Contains,\n        /// <summary>\n        /// Indicates that bounding volumes partially overlap one another.\n        /// </summary>\n        Intersects\n    }\n}"
  },
  {
    "path": "src/Xna.Framework/Curve.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Contains a collection of <see cref=\"CurveKey\"/> points in 2D space and provides methods for evaluating features of the curve they define.\n    /// </summary>\n    // TODO : [TypeConverter(typeof(ExpandableObjectConverter))]\n    [DataContract]\n    public class Curve : ICurveEvaluator<float>\n    {\n        #region Private Fields\n\n        private CurveLoopType _preLoop;\n        private CurveLoopType _postLoop;\n        private CurveKeyCollection _keys;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Returns <c>true</c> if this curve is constant (has zero or one points); <c>false</c> otherwise.\n        /// </summary>\n        [DataMember]\n        public bool IsConstant\n        {\n            get { return this._keys.Count <= 1; }\n        }\n\n        /// <summary>\n        /// Defines how to handle weighting values that are less than the first control point in the curve.\n        /// </summary>\n        [DataMember]\n        public CurveLoopType PreLoop\n        {\n            get { return this._preLoop; }\n            set { this._preLoop = value; }\n        }\n\n        /// <summary>\n        /// Defines how to handle weighting values that are greater than the last control point in the curve.\n        /// </summary>\n        [DataMember]\n        public CurveLoopType PostLoop\n        {\n            get { return this._postLoop; }\n            set { this._postLoop = value; }\n        }\n\n        /// <summary>\n        /// The collection of curve keys.\n        /// </summary>\n        [DataMember]\n        public CurveKeyCollection Keys\n        {\n            get { return this._keys; }\n        }\n\n        #endregion\n\n        #region Public Constructors\n\n        /// <summary>\n        /// Constructs a curve.\n        /// </summary>\n        public Curve()\n        {\n            this._keys = new CurveKeyCollection();\n        }\n\n        #endregion\n\n        #region Public Methods\n\n        /// <summary>\n        /// Creates a copy of this curve.\n        /// </summary>\n        /// <returns>A copy of this curve.</returns>\n        public Curve Clone()\n        {\n            Curve curve = new Curve();\n\n            curve._keys = this._keys.Clone();\n            curve._preLoop = this._preLoop;\n            curve._postLoop = this._postLoop;\n\n            return curve;\n        }\n\n        /// <summary>\n        /// Evaluate the value at a position of this <see cref=\"Curve\"/>.\n        /// </summary>\n        /// <param name=\"position\">The position on this <see cref=\"Curve\"/>.</param>\n        /// <returns>Value at the position on this <see cref=\"Curve\"/>.</returns>\n        public float Evaluate(float position)\n        {\n            if (_keys.Count == 0)\n            {\n                return 0f;\n            }\n                        \n            if (_keys.Count == 1)\n            {\n                return _keys[0].Value;\n            }\n            \n            CurveKey first = _keys[0];\n            CurveKey last = _keys[_keys.Count - 1];\n\n            if (position < first.Position)\n            {\n                switch (this.PreLoop)\n                {\n                    case CurveLoopType.Constant:\n                        //constant\n                        return first.Value;\n\n                    case CurveLoopType.Linear:\n                        // linear y = a*x +b with a tangeant of last point\n                        return first.Value - first.TangentIn * (first.Position - position);\n\n                    case CurveLoopType.Cycle:\n                        //start -> end / start -> end\n                        int cycle = GetNumberOfCycle(position);\n                        float virtualPos = position - (cycle * (last.Position - first.Position));\n                        return GetCurvePosition(virtualPos);\n\n                    case CurveLoopType.CycleOffset:\n                        //make the curve continue (with no step) so must up the curve each cycle of delta(value)\n                        cycle = GetNumberOfCycle(position);\n                        virtualPos = position - (cycle * (last.Position - first.Position));\n                        return (GetCurvePosition(virtualPos) + cycle * (last.Value - first.Value));\n\n                    case CurveLoopType.Oscillate:\n                        //go back on curve from end and target start \n                        // start-> end / end -> start\n                        cycle = GetNumberOfCycle(position);\n                        if (0 == cycle % 2f)//if pair\n                            virtualPos = position - (cycle * (last.Position - first.Position));\n                        else\n                            virtualPos = last.Position - position + first.Position + (cycle * (last.Position - first.Position));\n                        return GetCurvePosition(virtualPos);\n                }\n            }\n            else if (position > last.Position)\n            {\n                int cycle;\n                switch (this.PostLoop)\n                {\n                    case CurveLoopType.Constant:\n                        //constant\n                        return last.Value;\n\n                    case CurveLoopType.Linear:\n                        // linear y = a*x +b with a tangeant of last point\n                        return last.Value + first.TangentOut * (position - last.Position);\n\n                    case CurveLoopType.Cycle:\n                        //start -> end / start -> end\n                        cycle = GetNumberOfCycle(position);\n                        float virtualPos = position - (cycle * (last.Position - first.Position));\n                        return GetCurvePosition(virtualPos);\n\n                    case CurveLoopType.CycleOffset:\n                        //make the curve continue (with no step) so must up the curve each cycle of delta(value)\n                        cycle = GetNumberOfCycle(position);\n                        virtualPos = position - (cycle * (last.Position - first.Position));\n                        return (GetCurvePosition(virtualPos) + cycle * (last.Value - first.Value));\n\n                    case CurveLoopType.Oscillate:\n                        //go back on curve from end and target start \n                        // start-> end / end -> start\n                        cycle = GetNumberOfCycle(position);\n                        virtualPos = position - (cycle * (last.Position - first.Position));\n                        if (0 == cycle % 2f)//if pair\n                            virtualPos = position - (cycle * (last.Position - first.Position));\n                        else\n                            virtualPos = last.Position - position + first.Position + (cycle * (last.Position - first.Position));\n                        return GetCurvePosition(virtualPos);\n                }\n            }\n\n            //in curve\n            return GetCurvePosition(position);\n        }\n\n        /// <summary>\n        /// Computes tangents for all keys in the collection.\n        /// </summary>\n        /// <param name=\"tangentType\">The tangent type for both in and out.</param>\n        public void ComputeTangents (CurveTangent tangentType)\n        {\n            ComputeTangents(tangentType, tangentType);\n        }\n        \n        /// <summary>\n        /// Computes tangents for all keys in the collection.\n        /// </summary>\n        /// <param name=\"tangentInType\">The tangent in-type. <see cref=\"CurveKey.TangentIn\"/> for more details.</param>\n        /// <param name=\"tangentOutType\">The tangent out-type. <see cref=\"CurveKey.TangentOut\"/> for more details.</param>\n        public void ComputeTangents(CurveTangent tangentInType, CurveTangent tangentOutType)\n        {\n            for (var i = 0; i < Keys.Count; ++i)\n            {\n                ComputeTangent(i, tangentInType, tangentOutType);\n            }\n        }\n\n        /// <summary>\n        /// Computes tangent for the specific key in the collection.\n        /// </summary>\n        /// <param name=\"keyIndex\">The index of a key in the collection.</param>\n        /// <param name=\"tangentType\">The tangent type for both in and out.</param>\n        public void ComputeTangent(int keyIndex, CurveTangent tangentType)\n        {\n            ComputeTangent(keyIndex, tangentType, tangentType);\n        }\n\n        /// <summary>\n        /// Computes tangent for the specific key in the collection.\n        /// </summary>\n        /// <param name=\"keyIndex\">The index of key in the collection.</param>\n        /// <param name=\"tangentInType\">The tangent in-type. <see cref=\"CurveKey.TangentIn\"/> for more details.</param>\n        /// <param name=\"tangentOutType\">The tangent out-type. <see cref=\"CurveKey.TangentOut\"/> for more details.</param>\n        public void ComputeTangent(int keyIndex, CurveTangent tangentInType, CurveTangent tangentOutType)\n        {\n            // See http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.curvetangent.aspx\n\n            var key = _keys[keyIndex];\n\n            float p0, p, p1;\n            p0 = p = p1 = key.Position;\n\n            float v0, v, v1;\n            v0 = v = v1 = key.Value;\n\n            if ( keyIndex > 0 )\n            {\n                p0 = _keys[keyIndex - 1].Position;\n                v0 = _keys[keyIndex - 1].Value;\n            }\n\n            if (keyIndex < _keys.Count-1)\n            {\n                p1 = _keys[keyIndex + 1].Position;\n                v1 = _keys[keyIndex + 1].Value;\n            }\n\n            switch (tangentInType)\n            {\n                case CurveTangent.Flat:\n                    key.TangentIn = 0;\n                    break;\n                case CurveTangent.Linear:\n                    key.TangentIn = v - v0;\n                    break;\n                case CurveTangent.Smooth:\n                    var pn = p1 - p0;\n                    if (Math.Abs(pn) < float.Epsilon)\n                        key.TangentIn = 0;\n                    else\n                        key.TangentIn = (v1 - v0) * ((p - p0) / pn);\n                    break;\n            }\n\n            switch (tangentOutType)\n            {\n                case CurveTangent.Flat:\n                    key.TangentOut = 0;\n                    break;\n                case CurveTangent.Linear:\n                    key.TangentOut = v1 - v;\n                    break;\n                case CurveTangent.Smooth:\n                    var pn = p1 - p0;\n                    if (Math.Abs(pn) < float.Epsilon)\n                        key.TangentOut = 0;\n                    else\n                        key.TangentOut = (v1 - v0) * ((p1 - p) / pn);\n                    break;\n            }\n        }\n\n        #endregion\n\n        #region Private Methods\n\n        private int GetNumberOfCycle(float position)\n        {\n            float cycle = (position - _keys[0].Position) / (_keys[_keys.Count - 1].Position - _keys[0].Position);\n            if (cycle < 0f)\n                cycle--;\n            return (int)cycle;\n        }\n\n        private float GetCurvePosition(float position)\n        {\n            //only for position in curve\n            CurveKey prev = this._keys[0];\n            CurveKey next;\n            for (int i = 1; i < this._keys.Count; ++i)\n            {\n                next = this.Keys[i];\n                if (next.Position >= position)\n                {\n                    if (prev.Continuity == CurveContinuity.Step)\n                    {\n                        if (position >= 1f)\n                        {\n                            return next.Value;\n                        }\n                        return prev.Value;\n                    }\n                    float t = (position - prev.Position) / (next.Position - prev.Position);//to have t in [0,1]\n                    float ts = t * t;\n                    float tss = ts * t;\n                    //After a lot of search on internet I have found all about spline function\n                    // and bezier (phi'sss ancien) but finaly use hermite curve \n                    //http://en.wikipedia.org/wiki/Cubic_Hermite_spline\n                    //P(t) = (2*t^3 - 3t^2 + 1)*P0 + (t^3 - 2t^2 + t)m0 + (-2t^3 + 3t^2)P1 + (t^3-t^2)m1\n                    //with P0.value = prev.value , m0 = prev.tangentOut, P1= next.value, m1 = next.TangentIn\n                    return (2 * tss - 3 * ts + 1f) * prev.Value + (tss - 2 * ts + t) * prev.TangentOut + (3 * ts - 2 * tss) * next.Value + (tss - ts) * next.TangentIn;\n                }\n                prev = next;\n            }\n            return 0f;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/CurveContinuity.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Defines the continuity of keys on a <see cref=\"Curve\"/>.\n    /// </summary>\n    public enum CurveContinuity\n    {\n        /// <summary>\n        /// Interpolation can be used between this key and the next.\n        /// </summary>\n        Smooth,\n        /// <summary>\n        /// Interpolation cannot be used. A position between the two points returns this point.\n        /// </summary>\n        Step\n    }\n}"
  },
  {
    "path": "src/Xna.Framework/CurveKey.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Key point on the <see cref=\"Curve\"/>.\n    /// </summary>\n    // TODO : [TypeConverter(typeof(ExpandableObjectConverter))]\n    [DataContract]\n    public class CurveKey : IEquatable<CurveKey>, IComparable<CurveKey>\n    {\n        #region Private Fields\n\n        private CurveContinuity _continuity;\n        private readonly float _position;\n        private float _tangentIn;\n        private float _tangentOut;\n        private float _value;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// Gets or sets the indicator whether the segment between this point and the next point on the curve is discrete or continuous.\n        /// </summary>\n        [DataMember]\n        public CurveContinuity Continuity\n        {\n            get { return this._continuity; }\n            set { this._continuity = value; }\n        }\n\n        /// <summary>\n        /// Gets a position of the key on the curve.\n        /// </summary>\n        [DataMember]\n        public float Position\n        {\n            get { return this._position; }\n        }\n\n        /// <summary>\n        /// Gets or sets a tangent when approaching this point from the previous point on the curve.\n        /// </summary>\n        [DataMember]\n        public float TangentIn\n        {\n            get { return this._tangentIn; }\n            set { this._tangentIn = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets a tangent when leaving this point to the next point on the curve.\n        /// </summary>\n        [DataMember]\n        public float TangentOut\n        {\n            get { return this._tangentOut; }\n            set { this._tangentOut = value; }\n        }\n\n        /// <summary>\n        /// Gets a value of this point.\n        /// </summary>\n        [DataMember]\n        public float Value\n        {\n            get { return this._value; }\n            set { this._value = value; }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Creates a new instance of <see cref=\"CurveKey\"/> class with position: 0 and value: 0.\n        /// </summary>\n        public CurveKey() : this(0, 0)\n        {\n            // This parameterless constructor is needed for correct serialization of CurveKeyCollection and CurveKey.\n        }\n\n        /// <summary>\n        /// Creates a new instance of <see cref=\"CurveKey\"/> class.\n        /// </summary>\n        /// <param name=\"position\">Position on the curve.</param>\n        /// <param name=\"value\">Value of the control point.</param>\n        public CurveKey(float position, float value)\n            : this(position, value, 0, 0, CurveContinuity.Smooth)\n        {\n\n        }\n\n        /// <summary>\n        /// Creates a new instance of <see cref=\"CurveKey\"/> class.\n        /// </summary>\n        /// <param name=\"position\">Position on the curve.</param>\n        /// <param name=\"value\">Value of the control point.</param>\n        /// <param name=\"tangentIn\">Tangent approaching point from the previous point on the curve.</param>\n        /// <param name=\"tangentOut\">Tangent leaving point toward next point on the curve.</param>\n        public CurveKey(float position, float value, float tangentIn, float tangentOut)\n            : this(position, value, tangentIn, tangentOut, CurveContinuity.Smooth)\n        {\n\n        }\n\n        /// <summary>\n        /// Creates a new instance of <see cref=\"CurveKey\"/> class.\n        /// </summary>\n        /// <param name=\"position\">Position on the curve.</param>\n        /// <param name=\"value\">Value of the control point.</param>\n        /// <param name=\"tangentIn\">Tangent approaching point from the previous point on the curve.</param>\n        /// <param name=\"tangentOut\">Tangent leaving point toward next point on the curve.</param>\n        /// <param name=\"continuity\">Indicates whether the curve is discrete or continuous.</param>\n        public CurveKey(float position, float value, float tangentIn, float tangentOut, CurveContinuity continuity)\n        {\n            this._position = position;\n            this._value = value;\n            this._tangentIn = tangentIn;\n            this._tangentOut = tangentOut;\n            this._continuity = continuity;\n        }\n\n        #endregion\n\n        /// <summary>\n        /// \n        /// Compares whether two <see cref=\"CurveKey\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"CurveKey\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"CurveKey\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\t\n        public static bool operator !=(CurveKey left, CurveKey right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"CurveKey\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"CurveKey\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"CurveKey\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(CurveKey left, CurveKey right)\n        {\n            if (object.Equals(left, null))\n                return object.Equals(right, null);\n\n            if (object.Equals(right, null))\n                return object.Equals(left, null);\n\n            return (left._position == right._position)\n                && (left._value == right._value)\n                && (left._tangentIn == right._tangentIn)\n                && (left._tangentOut == right._tangentOut)\n                && (left._continuity == right._continuity);\n        }\n\n        /// <summary>\n        /// Creates a copy of this key.\n        /// </summary>\n        /// <returns>A copy of this key.</returns>\n        public CurveKey Clone()\n        {\n            return new CurveKey(this._position, this._value, this._tangentIn, this._tangentOut, this._continuity);\n        }\n\n        #region Inherited Methods\n\n        public int CompareTo(CurveKey other)\n        {\n            return this._position.CompareTo(other._position);\n        }\n\n        public bool Equals(CurveKey other)\n        {\n            return (this == other);\n        }\n\n        public override bool Equals(object obj)\n        {\n            return (obj as CurveKey) != null && Equals((CurveKey)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return this._position.GetHashCode() ^ this._value.GetHashCode() ^ this._tangentIn.GetHashCode() ^\n                this._tangentOut.GetHashCode() ^ this._continuity.GetHashCode();\n        } \n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/CurveKeyCollection.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// The collection of the <see cref=\"CurveKey\"/> elements and a part of the <see cref=\"Curve\"/> class.\n    /// </summary>\n    // TODO : [TypeConverter(typeof(ExpandableObjectConverter))]\n    [DataContract]\n    public class CurveKeyCollection : ICollection<CurveKey>\n    {\n        #region Private Fields\n\n        private readonly List<CurveKey> _keys;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// Indexer.\n        /// </summary>\n        /// <param name=\"index\">The index of key in this collection.</param>\n        /// <returns><see cref=\"CurveKey\"/> at <paramref name=\"index\"/> position.</returns>\n        [DataMember(Name = \"Items\")]\n        public CurveKey this[int index]\n        {\n            get { return _keys[index]; }\n            set\n            {\n                if (value == null)\n                    throw new ArgumentNullException();\n\n                if (index >= _keys.Count)\n                    throw new IndexOutOfRangeException();\n\n                if (_keys[index].Position == value.Position)\n                    _keys[index] = value;\n                else\n                {\n                    _keys.RemoveAt(index);\n                    _keys.Add(value);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Returns the count of keys in this collection.\n        /// </summary>\n        [DataMember]\n        public int Count\n        {\n            get { return _keys.Count; }\n        }\n\n        /// <summary>\n        /// Returns false because it is not a read-only collection.\n        /// </summary>\n        [DataMember]\n        public bool IsReadOnly\n        {\n            get { return false; }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Creates a new instance of <see cref=\"CurveKeyCollection\"/> class.\n        /// </summary>\n        public CurveKeyCollection()\n        {\n            _keys = new List<CurveKey>();\n        }\n\n        #endregion\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _keys.GetEnumerator();\n        }\n\n\n        /// <summary>\n        /// Adds a key to this collection.\n        /// </summary>\n        /// <param name=\"item\">New key for the collection.</param>\n        /// <exception cref=\"ArgumentNullException\">Throws if <paramref name=\"item\"/> is null.</exception>\n        /// <remarks>The new key would be added respectively to a position of that key and the position of other keys.</remarks>\n        public void Add(CurveKey item)\n        {\n            if (item == null)\n                throw new ArgumentNullException(\"item\");\n\n            if (_keys.Count == 0)\n            {\n                this._keys.Add(item);\n                return;\n            }\n\n            for (int i = 0; i < this._keys.Count; i++)\n            {\n                if (item.Position < this._keys[i].Position)\n                {\n                    this._keys.Insert(i, item);\n                    return;\n                }\n            }\n\n            this._keys.Add(item);\n        }\n\n        /// <summary>\n        /// Removes all keys from this collection.\n        /// </summary>\n        public void Clear()\n        {\n            _keys.Clear();\n        }\n\n        /// <summary>\n        /// Creates a copy of this collection.\n        /// </summary>\n        /// <returns>A copy of this collection.</returns>\n        public CurveKeyCollection Clone()\n        {\n            CurveKeyCollection ckc = new CurveKeyCollection();\n            foreach (CurveKey key in this._keys)\n                ckc.Add(key);\n            return ckc;\n        }\n\n        /// <summary>\n        /// Determines whether this collection contains a specific key.\n        /// </summary>\n        /// <param name=\"item\">The key to locate in this collection.</param>\n        /// <returns><c>true</c> if the key is found; <c>false</c> otherwise.</returns>\n        public bool Contains(CurveKey item)\n        {\n            return _keys.Contains(item);\n        }\n\n        /// <summary>\n        /// Copies the keys of this collection to an array, starting at the array index provided.\n        /// </summary>\n        /// <param name=\"array\">Destination array where elements will be copied.</param>\n        /// <param name=\"arrayIndex\">The zero-based index in the array to start copying from.</param>\n        public void CopyTo(CurveKey[] array, int arrayIndex)\n        {\n            _keys.CopyTo(array, arrayIndex);\n        }\n\n        /// <summary>\n        /// Returns an enumerator that iterates through the collection.\n        /// </summary>\n        /// <returns>An enumerator for the <see cref=\"CurveKeyCollection\"/>.</returns>\n        public IEnumerator<CurveKey> GetEnumerator()\n        {\n            return _keys.GetEnumerator();\n        }\n\n        /// <summary>\n        /// Finds element in the collection and returns its index.\n        /// </summary>\n        /// <param name=\"item\">Element for the search.</param>\n        /// <returns>Index of the element; or -1 if item is not found.</returns>\n        public int IndexOf(CurveKey item)\n        {\n            return _keys.IndexOf(item);\n        }\n\n        /// <summary>\n        /// Removes element at the specified index.\n        /// </summary>\n        /// <param name=\"index\">The index which element will be removed.</param>\n        public void RemoveAt(int index)\n        {\n            _keys.RemoveAt(index);\n        }\n        \n        /// <summary>\n        /// Removes specific element.\n        /// </summary>\n        /// <param name=\"item\">The element</param>\n        /// <returns><c>true</c> if item is successfully removed; <c>false</c> otherwise. This method also returns <c>false</c> if item was not found.</returns>\n        public bool Remove(CurveKey item)\n        {\n            return _keys.Remove(item);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/CurveLoopType.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Defines how the <see cref=\"Curve\"/> value is determined for position before first point or after the end point on the <see cref=\"Curve\"/>.\n    /// </summary>\n    public enum CurveLoopType\n    {\n        /// <summary>\n        /// The value of <see cref=\"Curve\"/> will be evaluated as first point for positions before the beginning and end point for positions after the end.\n        /// </summary>\n        Constant,\n        /// <summary>\n        /// The positions will wrap around from the end to beginning of the <see cref=\"Curve\"/> for determined the value.\n        /// </summary>\n        Cycle,\n        /// <summary>\n        /// The positions will wrap around from the end to beginning of the <see cref=\"Curve\"/>.\n        /// The value will be offset by the difference between the values of first and end <see cref=\"CurveKey\"/> multiplied by the wrap amount.\n        /// If the position is before the beginning of the <see cref=\"Curve\"/> the difference will be subtracted from its value; otherwise the difference will be added.\n        /// </summary>\n        CycleOffset,\n        /// <summary>\n        /// The value at the end of the <see cref=\"Curve\"/> act as an offset from the same side of the <see cref=\"Curve\"/> toward the opposite side.\n        /// </summary>\n        Oscillate,\n        /// <summary>\n        /// The linear interpolation will be performed for determined the value. \n        /// </summary>\n        Linear\n    }\n}"
  },
  {
    "path": "src/Xna.Framework/CurveTangent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Defines the different tangent types to be calculated for <see cref=\"CurveKey\"/> points in a <see cref=\"Curve\"/>.\n    /// </summary>\n    public enum CurveTangent\n    {\n        /// <summary>\n        /// The tangent which always has a value equal to zero. \n        /// </summary>\n        Flat,\n        /// <summary>\n        /// The tangent which contains a difference between current tangent value and the tangent value from the previous <see cref=\"CurveKey\"/>. \n        /// </summary>\n        Linear,\n        /// <summary>\n        /// The smoouth tangent which contains the inflection between <see cref=\"CurveKey.TangentIn\"/> and <see cref=\"CurveKey.TangentOut\"/> by taking into account the values of both neighbors of the <see cref=\"CurveKey\"/>.\n        /// </summary>\n        Smooth\n    }\n}"
  },
  {
    "path": "src/Xna.Framework/FrameworkDispatcher.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform;\n\nnamespace Microsoft.Xna.Platform\n{\n    public interface IFrameworkDispatcher\n    {\n        event Action OnUpdate;\n        void Update();\n    }\n}\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Helper class for processing internal framework events.\n    /// </summary>\n    /// <remarks>\n    /// If you use <see cref=\"Game\"/> class, <see cref=\"Update()\"/> is called automatically.\n    /// Otherwise you must call it as part of your game loop.\n    /// </remarks>\n    public sealed class FrameworkDispatcher : IFrameworkDispatcher\n    {\n        private static FrameworkDispatcher _current;\n\n        /// <summary>\n        /// Returns the current FrameworkDispatcher instance.\n        /// </summary> \n        public static FrameworkDispatcher Current\n        {\n            get\n            {\n                lock (typeof(FrameworkDispatcher))\n                {\n                    if (_current == null)\n                        _current = new FrameworkDispatcher();\n                    return _current;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Processes framework events.\n        /// </summary>\n        public static void Update()\n        {\n            ((IFrameworkDispatcher)FrameworkDispatcher.Current).Update();\n        }\n\n\n        private Action _onUpdate;\n\n        private FrameworkDispatcher()\n        {\n\n        }\n\n        event Action IFrameworkDispatcher.OnUpdate\n        {\n            add { _onUpdate += value; }\n            remove { _onUpdate -= value; }\n        }\n\n        void IFrameworkDispatcher.Update()\n        {\n            var updateHandler = _onUpdate;\n            if (updateHandler != null)\n                updateHandler();\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "src/Xna.Framework/ICurveEvaluator.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Interface for curve evaluation. Implemented by <see cref=\"Curve\"/>\n    /// </summary>    \n    public interface ICurveEvaluator<T>\n    {\n        /// <summary>\n        /// Evaluate the value at a position of this <see cref=\"ICurveEvaluator{T}\"/>.\n        /// </summary>\n        /// <param name=\"position\">The position on this <see cref=\"ICurveEvaluator{T}\"/>.</param>\n        /// <returns>Value at the position on this <see cref=\"ICurveEvaluator{T}\"/>.</returns>\n        T Evaluate(float position);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/ILLink.Descriptors.xml",
    "content": "<linker>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework/IntersectsHelper.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework\n{\n    internal class IntersectsHelper\n    {\n        internal static void BoundingBoxIntersectsBoundingBox(ref BoundingBox box, ref BoundingBox other, out bool result)\n        {\n            if ((box.Max.X >= other.Min.X) && (box.Min.X <= other.Max.X))\n            {\n                if ((box.Max.Y < other.Min.Y) || (box.Min.Y > other.Max.Y))\n                {\n                    result = false;\n                    return;\n                }\n\n                result = (box.Max.Z >= other.Min.Z) && (box.Min.Z <= other.Max.Z);\n                return;\n            }\n\n            result = false;\n            return;\n        }\n\n        internal static void BoundingBoxIntersectsBoundingFrustum(ref BoundingBox box, BoundingFrustum frustum, out bool result)\n        {\n            result = true;\n            for (int i = 0; i < BoundingFrustum.PlaneCount; i++)\n            {\n                frustum._planes[i].Intersects(ref box, out PlaneIntersectionType planeIntersectionType);\n                switch (planeIntersectionType)\n                {\n                    case PlaneIntersectionType.Front:\n                        result = false;\n                        return;\n                }\n            }\n\n            BoundingBox fbox = BoundingBox.CreateFromPoints(frustum._corners);\n            box.Intersects(ref fbox, out result);\n        }\n\n        internal static void BoundingBoxIntersectsPlane(ref BoundingBox box, ref Plane plane, out PlaneIntersectionType result)\n        {\n            // See http://zach.in.tu-clausthal.de/teaching/cg_literatur/lighthouse3d_view_frustum_culling/index.html\n\n            Vector3 positiveVertex;\n            Vector3 negativeVertex;\n\n            if (plane.Normal.X >= 0)\n            {\n                positiveVertex.X = box.Max.X;\n                negativeVertex.X = box.Min.X;\n            }\n            else\n            {\n                positiveVertex.X = box.Min.X;\n                negativeVertex.X = box.Max.X;\n            }\n\n            if (plane.Normal.Y >= 0)\n            {\n                positiveVertex.Y = box.Max.Y;\n                negativeVertex.Y = box.Min.Y;\n            }\n            else\n            {\n                positiveVertex.Y = box.Min.Y;\n                negativeVertex.Y = box.Max.Y;\n            }\n\n            if (plane.Normal.Z >= 0)\n            {\n                positiveVertex.Z = box.Max.Z;\n                negativeVertex.Z = box.Min.Z;\n            }\n            else\n            {\n                positiveVertex.Z = box.Min.Z;\n                negativeVertex.Z = box.Max.Z;\n            }\n\n            // Inline Vector3.Dot(plane.Normal, negativeVertex) + plane.D;\n            var distance = plane.Normal.X * negativeVertex.X + plane.Normal.Y * negativeVertex.Y + plane.Normal.Z * negativeVertex.Z + plane.D;\n            if (distance > 0)\n            {\n                result = PlaneIntersectionType.Front;\n                return;\n            }\n\n            // Inline Vector3.Dot(plane.Normal, positiveVertex) + plane.D;\n            distance = plane.Normal.X * positiveVertex.X + plane.Normal.Y * positiveVertex.Y + plane.Normal.Z * positiveVertex.Z + plane.D;\n            if (distance < 0)\n            {\n                result = PlaneIntersectionType.Back;\n                return;\n            }\n\n            result = PlaneIntersectionType.Intersecting;\n        }\n\n        // adapted from http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-7-intersecting-simple-shapes/ray-box-intersection/\n        internal static void BoundingBoxIntersectsRay(ref BoundingBox box, ref Ray ray, out float? result)\n        {\n            const float Epsilon = 1e-6f;\n\n            float? tMin = null, tMax = null;\n\n            if (Math.Abs(ray.Direction.X) < Epsilon)\n            {\n                if (ray.Position.X < box.Min.X || ray.Position.X > box.Max.X)\n                {\n                    result = null;\n                    return;\n                }\n            }\n            else\n            {\n                tMin = (box.Min.X - ray.Position.X) / ray.Direction.X;\n                tMax = (box.Max.X - ray.Position.X) / ray.Direction.X;\n\n                if (tMin > tMax)\n                {\n                    var temp = tMin;\n                    tMin = tMax;\n                    tMax = temp;\n                }\n            }\n\n            if (Math.Abs(ray.Direction.Y) < Epsilon)\n            {\n                if (ray.Position.Y < box.Min.Y || ray.Position.Y > box.Max.Y)\n                {\n                    result = null;\n                    return;\n                }\n            }\n            else\n            {\n                var tMinY = (box.Min.Y - ray.Position.Y) / ray.Direction.Y;\n                var tMaxY = (box.Max.Y - ray.Position.Y) / ray.Direction.Y;\n\n                if (tMinY > tMaxY)\n                {\n                    var temp = tMinY;\n                    tMinY = tMaxY;\n                    tMaxY = temp;\n                }\n\n                if ((tMin.HasValue && tMin > tMaxY) || (tMax.HasValue && tMinY > tMax))\n                {\n                    result = null;\n                    return;\n                }\n\n                if (!tMin.HasValue || tMinY > tMin) tMin = tMinY;\n                if (!tMax.HasValue || tMaxY < tMax) tMax = tMaxY;\n            }\n\n            if (Math.Abs(ray.Direction.Z) < Epsilon)\n            {\n                if (ray.Position.Z < box.Min.Z || ray.Position.Z > box.Max.Z)\n                {\n                    result = null;\n                    return;\n                }\n            }\n            else\n            {\n                var tMinZ = (box.Min.Z - ray.Position.Z) / ray.Direction.Z;\n                var tMaxZ = (box.Max.Z - ray.Position.Z) / ray.Direction.Z;\n\n                if (tMinZ > tMaxZ)\n                {\n                    var temp = tMinZ;\n                    tMinZ = tMaxZ;\n                    tMaxZ = temp;\n                }\n\n                if ((tMin.HasValue && tMin > tMaxZ) || (tMax.HasValue && tMinZ > tMax))\n                {\n                    result = null;\n                    return;\n                }\n\n                if (!tMin.HasValue || tMinZ > tMin) tMin = tMinZ;\n                if (!tMax.HasValue || tMaxZ < tMax) tMax = tMaxZ;\n            }\n\n            // having a positive tMax and a negative tMin means the ray is inside the box\n            // we expect the intesection distance to be 0 in that case\n            if ((tMin.HasValue && tMin < 0) && tMax > 0)\n            {\n                result = 0;\n                return;\n            }\n\n            // a negative tMin means that the intersection point is behind the ray's origin\n            // we discard these as not hitting the AABB\n            if (tMin < 0)\n            {\n                result = null;\n                return;\n            }\n\n            result = tMin;\n            return;\n        }\n\n        internal static void BoundingBoxIntersectsBoundingSphere(ref BoundingBox box, ref BoundingSphere sphere, out bool result)\n        {\n            double squareDistance = 0.0;\n            if (sphere.Center.X < box.Min.X) squareDistance += (sphere.Center.X - box.Min.X) * (sphere.Center.X - box.Min.X);\n            else if (sphere.Center.X > box.Max.X) squareDistance += (sphere.Center.X - box.Max.X) * (sphere.Center.X - box.Max.X);\n            if (sphere.Center.Y < box.Min.Y) squareDistance += (sphere.Center.Y - box.Min.Y) * (sphere.Center.Y - box.Min.Y);\n            else if (sphere.Center.Y > box.Max.Y) squareDistance += (sphere.Center.Y - box.Max.Y) * (sphere.Center.Y - box.Max.Y);\n            if (sphere.Center.Z < box.Min.Z) squareDistance += (sphere.Center.Z - box.Min.Z) * (sphere.Center.Z - box.Min.Z);\n            else if (sphere.Center.Z > box.Max.Z) squareDistance += (sphere.Center.Z - box.Max.Z) * (sphere.Center.Z - box.Max.Z);\n            result = squareDistance <= sphere.Radius * sphere.Radius;\n        }\n\n        internal static void BoundingFrustumIntersectsBoundingFrustum(BoundingFrustum frustum, BoundingFrustum other, out bool result)\n        {\n            result = true;\n            for (int i = 0; i < BoundingFrustum.PlaneCount; i++)\n            {\n                other.Intersects(ref frustum._planes[i], out PlaneIntersectionType planeIntersectionType);\n                switch (planeIntersectionType)\n                {\n                    case PlaneIntersectionType.Front:\n                        result = false;\n                        return;\n                }\n            }\n\n            for (int i = 0; i < BoundingFrustum.PlaneCount; i++)\n            {\n                frustum.Intersects(ref other._planes[i], out PlaneIntersectionType planeIntersectionType);\n                switch (planeIntersectionType)\n                {\n                    case PlaneIntersectionType.Front:\n                        result = false;\n                        return;\n                }\n            }\n        }\n\n        internal static void BoundingFrustumIntersectsPlane(BoundingFrustum frustum, ref Plane plane, out PlaneIntersectionType result)\n        {\n            result = plane.Intersects(ref frustum._corners[0]);\n            for (int i = 1; i < frustum._corners.Length; i++)\n            {\n                PlaneIntersectionType planeIntersectionType = plane.Intersects(ref frustum._corners[i]);\n                if (planeIntersectionType != result)\n                    result = PlaneIntersectionType.Intersecting;\n            }\n        }\n\n        internal static void BoundingFrustumIntersectsBoundingSphere(BoundingFrustum frustum, ref BoundingSphere sphere, out bool result)\n        {\n            result = true;\n            int sphereBack = 0;\n            int sphereCenterBack = 0;\n            for (int i = 0; i < BoundingFrustum.PlaneCount; i++)\n            {\n                float distance = frustum._planes[i].DotCoordinate(sphere.Center);\n                if (distance > sphere.Radius) // PlaneIntersectionType.Front\n                {\n                    result = false;\n                    return;\n                }\n                else if (distance < -sphere.Radius) // PlaneIntersectionType.Back\n                {\n                    sphereBack++;\n                }\n                else // PlaneIntersectionType.Intersecting\n                {\n                }\n\n                if (distance < 0)\n                    sphereCenterBack++;\n            }\n\n            // The sphere is inside the frustum (sphereBack==6),\n            // or intersects with 1 face and is contained by the other 5 (sphereBack==5).\n            if (sphereBack >= (BoundingFrustum.PlaneCount - 1))\n                return;\n\n            // The sphere center is inside the frustum.\n            if (sphereCenterBack == BoundingFrustum.PlaneCount)\n                return;\n\n            // The sphere intersects with an edge.\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[0], ref frustum._corners[1], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[1], ref frustum._corners[2], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[2], ref frustum._corners[3], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[3], ref frustum._corners[0], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[4], ref frustum._corners[5], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[5], ref frustum._corners[6], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[6], ref frustum._corners[7], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[7], ref frustum._corners[4], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[0], ref frustum._corners[4], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[1], ref frustum._corners[5], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[2], ref frustum._corners[6], ref sphere))\n                return;\n            if (SegmentIntersectsBoundingSphere(ref frustum._corners[3], ref frustum._corners[7], ref sphere))\n                return;\n\n            float dotCoord0 = frustum._planes[0].DotCoordinate(sphere.Center);\n            if (dotCoord0 >= 0 && dotCoord0 <= sphere.Radius)\n            {\n                Vector3 pt0 = sphere.Center - dotCoord0 * frustum._planes[0].Normal;\n                FixedPolygon4 points = new FixedPolygon4(frustum._corners, 1, 0, 3, 2);\n                points.OrderQuad(ref frustum._planes[0].Normal);\n                if (PointInPolygon(ref pt0, points))\n                    return;\n            }\n            float dotCoord1 = frustum._planes[1].DotCoordinate(sphere.Center);\n            if (dotCoord1 >= 0 && dotCoord1 <= sphere.Radius)\n            {\n                Vector3 pt1 = sphere.Center - dotCoord1 * frustum._planes[1].Normal;\n                FixedPolygon4 points = new FixedPolygon4(frustum._corners, 4, 5, 6, 7);\n                points.OrderQuad(ref frustum._planes[1].Normal);\n                if (PointInPolygon(ref pt1, points))\n                    return;\n            }\n            float dotCoord2 = frustum._planes[2].DotCoordinate(sphere.Center);\n            if (dotCoord2 >= 0 && dotCoord2 <= sphere.Radius)\n            {\n                Vector3 pt2 = sphere.Center - dotCoord2 * frustum._planes[2].Normal;\n                FixedPolygon4 points =new FixedPolygon4(frustum._corners, 3, 0, 7, 4);\n                points.OrderQuad(ref frustum._planes[2].Normal);\n                if (PointInPolygon(ref pt2, points))\n                    return;\n            }\n            float dotCoord3 = frustum._planes[3].DotCoordinate(sphere.Center);\n            if (dotCoord3 >= 0 && dotCoord3 <= sphere.Radius)\n            {\n                Vector3 pt3 = sphere.Center - dotCoord3 * frustum._planes[3].Normal;\n                FixedPolygon4 points =new FixedPolygon4(frustum._corners, 1, 2, 5, 6);\n                points.OrderQuad(ref frustum._planes[3].Normal);\n                if (PointInPolygon(ref pt3, points))\n                    return;\n            }\n            float dotCoord4 = frustum._planes[4].DotCoordinate(sphere.Center);\n            if (dotCoord4 >= 0 && dotCoord4 <= sphere.Radius)\n            {\n                Vector3 pt4 = sphere.Center - dotCoord4 * frustum._planes[4].Normal;\n                FixedPolygon4 points =new FixedPolygon4(frustum._corners, 0, 1, 4, 5);\n                points.OrderQuad(ref frustum._planes[4].Normal);\n                if (PointInPolygon(ref pt4, points))\n                    return;\n            }\n            float dotCoord5 = frustum._planes[5].DotCoordinate(sphere.Center);\n            if (dotCoord5 >= 0 && dotCoord5 <= sphere.Radius)\n            {\n                Vector3 pt5 = sphere.Center - dotCoord5 * frustum._planes[5].Normal;\n                FixedPolygon4 points =new FixedPolygon4(frustum._corners, 2, 3, 6, 7);\n                points.OrderQuad(ref frustum._planes[5].Normal);\n                if (PointInPolygon(ref pt5, points))\n                    return;\n            }\n\n            result = false;\n        }\n\n        private struct FixedPolygon4\n        {\n            private Vector3[] _corners;\n            private int _v0, _v1,_v2,_v3;\n\n            internal FixedPolygon4(Vector3[] corners, int v0, int v1, int v2, int v3)\n            {\n                this._corners = corners;\n                this._v0 = v0;\n                this._v1 = v1;\n                this._v2 = v2;\n                this._v3 = v3;\n            }\n\n            public Vector3 this[int idx]\n            {\n                get\n                {\n                    switch (idx)\n                    {\n                        case 0: return _corners[_v0];\n                        case 1: return _corners[_v1];\n                        case 2: return _corners[_v2];\n                        case 3: return _corners[_v3];\n\n                        default:\n                            throw new InvalidOperationException(\"idx\");\n                    }\n                }\n            }\n\n            private int GetInternalKey(int idx)\n            {\n                switch (idx)\n                {\n                    case 0: return _v0;\n                    case 1: return _v1;\n                    case 2: return _v2;\n                    case 3: return _v3;\n\n                    default:\n                        throw new InvalidOperationException(\"idx\");\n                }\n            }\n\n            private void SetInternalKey(int idx, int keyInternal)\n            {\n                switch (idx)\n                {\n                    case 0: _v0 = keyInternal; return;\n                    case 1: _v1 = keyInternal; return;\n                    case 2: _v2 = keyInternal; return;\n                    case 3: _v3 = keyInternal; return;\n\n                    default:\n                        throw new InvalidOperationException(\"idx\");\n                }\n            }\n\n            internal unsafe void OrderQuad(ref Vector3 normal)\n            {\n                Vector3 center = (this[0] + this[1] + this[2] + this[3]) * 0.25f;\n\n                normal = Vector3.Normalize(normal);\n                Vector3 refAxis = Math.Abs(normal.X) > 0.9f ? Vector3.UnitY : Vector3.UnitX;\n                Vector3 u = Vector3.Normalize(Vector3.Cross(normal, refAxis));\n                Vector3 v = Vector3.Cross(normal, u);\n\n                // precompute angles\n                float* angles = stackalloc float[4];\n                angles[0] = (float)Math.Atan2(Vector3.Dot(this[0] - center, v), Vector3.Dot(this[0] - center, u));\n                angles[1] = (float)Math.Atan2(Vector3.Dot(this[1] - center, v), Vector3.Dot(this[1] - center, u));\n                angles[2] = (float)Math.Atan2(Vector3.Dot(this[2] - center, v), Vector3.Dot(this[2] - center, u));\n                angles[3] = (float)Math.Atan2(Vector3.Dot(this[3] - center, v), Vector3.Dot(this[3] - center, u));\n\n                // simple insertion sort for 4 items\n                for (int i = 1; i < 4; i++)\n                {\n                    int keyInternal = GetInternalKey(i);\n                    float keyAngle = angles[i];\n                    int j = i-1;\n                    while (j >= 0 && angles[j] > keyAngle)\n                    {\n                        SetInternalKey(j+1, GetInternalKey(j));\n                        angles[j+1] = angles[j];\n                        j--;\n                    }\n                    SetInternalKey(j+1, keyInternal);\n                    angles[j+1] = keyAngle;\n                }\n            }\n        }\n\n        private static bool PointInPolygon(ref Vector3 pt, FixedPolygon4 points)\n        {\n            return (IsPointInTriangle(ref pt, points[0], points[1], points[2]) \n                ||  IsPointInTriangle(ref pt, points[0], points[2], points[3]));\n        }\n\n        static bool IsPointInTriangle(ref Vector3 pt, Vector3 a, Vector3 b, Vector3 c)\n        {\n            Vector3 v0 = c - a;\n            Vector3 v1 = b - a;\n            Vector3 v2 = pt - a;\n\n            float dot00 = Vector3.Dot(v0, v0);\n            float dot01 = Vector3.Dot(v0, v1);\n            float dot02 = Vector3.Dot(v0, v2);\n            float dot11 = Vector3.Dot(v1, v1);\n            float dot12 = Vector3.Dot(v1, v2);\n\n            float denom = dot00 * dot11 - dot01 * dot01;\n            if (denom == 0) return false;\n\n            float u = (dot11 * dot02 - dot01 * dot12) / denom;\n            float v = (dot00 * dot12 - dot01 * dot02) / denom;\n\n            return (u >= 0) && (v >= 0) && (u + v <= 1);\n        }\n\n        private static bool SegmentIntersectsBoundingSphere(ref Vector3 pos0, ref Vector3 pos1, ref BoundingSphere sphere)\n        {\n            Vector3 direction = pos1 - pos0;\n            float sqSegmentLength = direction.LengthSquared();\n\n            float segmentLength = (float)Math.Sqrt(sqSegmentLength);\n            Vector3 segmentNormal = direction;\n            segmentNormal.X /= segmentLength;\n            segmentNormal.Y /= segmentLength;\n            segmentNormal.Z /= segmentLength;\n\n            Ray ray = new Ray(pos0, segmentNormal);\n\n            ray.Intersects(ref sphere, out float? result);\n            if (result != null && result < segmentLength)\n                return true;\n\n            return false;\n        }\n\n        internal static void BoundingSphereIntersectsBoundingSphere(ref BoundingSphere sphere, ref BoundingSphere other, out bool result)\n        {\n            Vector3.DistanceSquared(ref other.Center, ref sphere.Center, out float sqDistance);\n\n            result = (sqDistance <= (other.Radius + sphere.Radius) * (other.Radius + sphere.Radius));\n        }\n\n        internal static void BoundingSphereIntersectsPlane(ref BoundingSphere sphere, ref Plane plane, out PlaneIntersectionType result)\n        {\n            Vector3.Dot(ref plane.Normal, ref sphere.Center, out float distance);\n            distance += plane.D;\n\n            if (distance > sphere.Radius)\n                result = PlaneIntersectionType.Front;\n            else if (distance < -sphere.Radius)\n                result = PlaneIntersectionType.Back;\n            else\n                result = PlaneIntersectionType.Intersecting;\n        }\n\n        internal static void BoundingSphereIntersectsRay(ref BoundingSphere sphere, ref Ray ray, out float? result)\n        {\n            // Find the vector between where the ray starts the the sphere's centre\n            Vector3 difference = sphere.Center - ray.Position;\n\n            float differenceLengthSquared = difference.LengthSquared();\n            float sphereRadiusSquared = sphere.Radius * sphere.Radius;\n\n            float distanceAlongRay;\n\n            // If the distance between the ray start and the sphere's centre is less than\n            // the radius of the sphere, it means we've intersected. N.B. checking the LengthSquared is faster.\n            if (differenceLengthSquared < sphereRadiusSquared)\n            {\n                result = 0.0f;\n                return;\n            }\n\n            Vector3.Dot(ref ray.Direction, ref difference, out distanceAlongRay);\n            // If the ray is pointing away from the sphere then we don't ever intersect\n            if (distanceAlongRay < 0)\n            {\n                result = null;\n                return;\n            }\n\n            // Next we kinda use Pythagoras to check if we are within the bounds of the sphere\n            // if x = radius of sphere\n            // if y = distance between ray position and sphere centre\n            // if z = the distance we've travelled along the ray\n            // if x^2 + z^2 - y^2 < 0, we do not intersect\n            float dist = sphereRadiusSquared + distanceAlongRay * distanceAlongRay - differenceLengthSquared;\n\n            result = (dist < 0) ? null : distanceAlongRay - (float?)Math.Sqrt(dist);\n        }\n\n        internal static void PlaneIntersectsRay(ref Plane plane, ref Ray ray, out float? result)\n        {\n            float den = Vector3.Dot(ray.Direction, plane.Normal);\n            if (Math.Abs(den) < 0.00001f)\n            {\n                result = null;\n                return;\n            }\n\n            result = (-plane.D - Vector3.Dot(plane.Normal, ray.Position)) / den;\n\n            if (result < 0.0f)\n            {\n                if (result < -0.00001f)\n                {\n                    result = null;\n                    return;\n                }\n\n                result = 0.0f;\n            }\n        }\n\n        internal static void BoundingFrustumIntersectsRay(BoundingFrustum frustum, ref Ray ray, out float? result)\n        {\n            // From \"Real-Time Collision Detection\" (Page 198)\n\n            float tfirst = 0;\n            float tlast = float.MaxValue;\n            for (int i = 0; i < BoundingFrustum.PlaneCount; i++)\n            {\n                float dist  = -(Vector3.Dot(frustum._planes[i].Normal, ray.Position) + frustum._planes[i].D);\n                float denom = Vector3.Dot(frustum._planes[i].Normal, ray.Direction);\n\n                const float epsilon = 1e-6f;\n\n                if (Math.Abs(denom) < epsilon)\n                {\n                    if (dist > 0f) // ray runs parallel to the plane.\n                    {\n                        result = null;\n                        return;\n                    }\n                }\n                else\n                {\n                    float t = dist / denom;\n\n                    if (denom < 0f)\n                    {\n                        if (t > tfirst)\n                            tfirst = t;\n                    }\n                    else\n                    {\n                        if (t < tlast)\n                            tlast = t;\n                    }\n\n                    if (tfirst > tlast)\n                    {\n                        result = null;\n                        return;\n                    }\n                }\n            }\n\n            result = tfirst;\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/MathHelper.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Contains commonly used precalculated values and mathematical operations.\n    /// </summary>\n    public static class MathHelper\n    {\n        /// <summary>\n        /// Represents the mathematical constant e(2.71828175).\n        /// </summary>\n        public const float E = (float)Math.E;\n        \n        /// <summary>\n        /// Represents the log base ten of e(0.4342945).\n        /// </summary>\n        public const float Log10E = 0.4342945f;\n        \n        /// <summary>\n        /// Represents the log base two of e(1.442695).\n        /// </summary>\n        public const float Log2E = 1.442695f;\n        \n        /// <summary>\n        /// Represents the value of pi(3.14159274).\n        /// </summary>\n        public const float Pi = (float)Math.PI;\n        \n        /// <summary>\n        /// Represents the value of pi divided by two(1.57079637).\n        /// </summary>\n        public const float PiOver2 = (float)(Math.PI / 2.0);\n        \n        /// <summary>\n        /// Represents the value of pi divided by four(0.7853982).\n        /// </summary>\n        public const float PiOver4 = (float)(Math.PI / 4.0);\n        \n        /// <summary>\n        /// Represents the value of pi times two(6.28318548).\n        /// </summary>\n        public const float TwoPi = (float)(Math.PI * 2.0);\n        \n        /// <summary>\n        /// Represents the value of pi times two(6.28318548).\n        /// This is an alias of TwoPi.\n        /// </summary>\n        public const float Tau = TwoPi;\n        \n        /// <summary>\n        /// Returns the Cartesian coordinate for one axis of a point that is defined by a given triangle and two normalized barycentric (areal) coordinates.\n        /// </summary>\n        /// <param name=\"value1\">The coordinate on one axis of vertex 1 of the defining triangle.</param>\n        /// <param name=\"value2\">The coordinate on the same axis of vertex 2 of the defining triangle.</param>\n        /// <param name=\"value3\">The coordinate on the same axis of vertex 3 of the defining triangle.</param>\n        /// <param name=\"amount1\">The normalized barycentric (areal) coordinate b2, equal to the weighting factor for vertex 2, the coordinate of which is specified in value2.</param>\n        /// <param name=\"amount2\">The normalized barycentric (areal) coordinate b3, equal to the weighting factor for vertex 3, the coordinate of which is specified in value3.</param>\n        /// <returns>Cartesian coordinate of the specified point with respect to the axis being used.</returns>\n        public static float Barycentric(float value1, float value2, float value3, float amount1, float amount2)\n        {\n            return value1 + (value2 - value1) * amount1 + (value3 - value1) * amount2;\n        }\n\n    /// <summary>\n        /// Performs a Catmull-Rom interpolation using the specified positions.\n        /// </summary>\n        /// <param name=\"value1\">The first position in the interpolation.</param>\n        /// <param name=\"value2\">The second position in the interpolation.</param>\n        /// <param name=\"value3\">The third position in the interpolation.</param>\n        /// <param name=\"value4\">The fourth position in the interpolation.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <returns>A position that is the result of the Catmull-Rom interpolation.</returns>\n        public static float CatmullRom(float value1, float value2, float value3, float value4, float amount)\n        {\n            // Using formula from http://www.mvps.org/directx/articles/catmull/\n            // Internally using doubles not to lose precision\n            double amountSquared = amount * amount;\n            double amountCubed = amountSquared * amount;\n            return (float)(0.5 * (2.0 * value2 +\n                (value3 - value1) * amount +\n                (2.0 * value1 - 5.0 * value2 + 4.0 * value3 - value4) * amountSquared +\n                (3.0 * value2 - value1 - 3.0 * value3 + value4) * amountCubed));\n        }\n\n    /// <summary>\n        /// Restricts a value to be within a specified range.\n        /// </summary>\n        /// <param name=\"value\">The value to clamp.</param>\n        /// <param name=\"min\">The minimum value. If <c>value</c> is less than <c>min</c>, <c>min</c> will be returned.</param>\n        /// <param name=\"max\">The maximum value. If <c>value</c> is greater than <c>max</c>, <c>max</c> will be returned.</param>\n        /// <returns>The clamped value.</returns>\n        public static float Clamp(float value, float min, float max)\n        {\n            // First we check to see if we're greater than the max\n            value = (value > max) ? max : value;\n\n            // Then we check to see if we're less than the min.\n            value = (value < min) ? min : value;\n\n            // There's no check to see if min > max.\n            return value;\n        }\n        \n        /// <summary>\n        /// Restricts a value to be within a specified range.\n        /// </summary>\n        /// <param name=\"value\">The value to clamp.</param>\n        /// <param name=\"min\">The minimum value. If <c>value</c> is less than <c>min</c>, <c>min</c> will be returned.</param>\n        /// <param name=\"max\">The maximum value. If <c>value</c> is greater than <c>max</c>, <c>max</c> will be returned.</param>\n        /// <returns>The clamped value.</returns>\n        public static int Clamp(int value, int min, int max)\n        { \n            value = (value > max) ? max : value; \n            value = (value < min) ? min : value; \n            return value;\n        }\n        \n        /// <summary>\n        /// Calculates the absolute value of the difference of two values.\n        /// </summary>\n        /// <param name=\"value1\">Source value.</param>\n        /// <param name=\"value2\">Source value.</param>\n        /// <returns>Distance between the two values.</returns>\n        public static float Distance(float value1, float value2)\n        {\n            return Math.Abs(value1 - value2);\n        }\n        \n        /// <summary>\n        /// Performs a Hermite spline interpolation.\n        /// </summary>\n        /// <param name=\"value1\">Source position.</param>\n        /// <param name=\"tangent1\">Source tangent.</param>\n        /// <param name=\"value2\">Source position.</param>\n        /// <param name=\"tangent2\">Source tangent.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <returns>The result of the Hermite spline interpolation.</returns>\n        public static float Hermite(float value1, float tangent1, float value2, float tangent2, float amount)\n        {\n            // All transformed to double not to lose precision\n            // Otherwise, for high numbers of param:amount the result is NaN instead of Infinity\n            double v1 = value1, v2 = value2, t1 = tangent1, t2 = tangent2, s = amount, result;\n            double sCubed = s * s * s;\n            double sSquared = s * s;\n\n            if (amount == 0f)\n                result = value1;\n            else if (amount == 1f)\n                result = value2;\n            else\n                result = (2 * v1 - 2 * v2 + t2 + t1) * sCubed +\n                    (3 * v2 - 3 * v1 - 2 * t1 - t2) * sSquared +\n                    t1 * s +\n                    v1;\n            return (float)result;\n        }\n        \n        \n        /// <summary>\n        /// Linearly interpolates between two values.\n        /// </summary>\n        /// <param name=\"start\">Source value.</param>\n        /// <param name=\"end\">Destination value.</param>\n        /// <param name=\"amount\">Value between 0 and 1 indicating the weight of value2.</param>\n        /// <returns>Interpolated value.</returns> \n        /// <remarks>This method performs the linear interpolation based on the following formula:\n        /// <code>value1 + (value2 - value1) * amount</code>.\n        /// Passing amount a value of 0 will cause value1 to be returned, a value of 1 will cause value2 to be returned.\n        /// See <see cref=\"MathHelper.LerpPrecise\"/> for a less efficient version with more precision around edge cases.\n        /// </remarks>\n        public static float Lerp(float start, float end, float amount)\n        {\n            return start + (end - start) * amount;\n        }\n\n\n        /// <summary>\n        /// Linearly interpolates between two values.\n        /// This method is a less efficient, more precise version of <see cref=\"MathHelper.Lerp\"/>.\n        /// See remarks for more info.\n        /// </summary>\n        /// <param name=\"start\">Source value.</param>\n        /// <param name=\"end\">Destination value.</param>\n        /// <param name=\"amount\">Value between 0 and 1 indicating the weight of value2.</param>\n        /// <returns>Interpolated value.</returns>\n        /// <remarks>This method performs the linear interpolation based on the following formula:\n        /// <code>((1 - amount) * value1) + (value2 * amount)</code>.\n        /// Passing amount a value of 0 will cause value1 to be returned, a value of 1 will cause value2 to be returned.\n        /// This method does not have the floating point precision issue that <see cref=\"MathHelper.Lerp\"/> has.\n        /// i.e. If there is a big gap between value1 and value2 in magnitude (e.g. value1=10000000000000000, value2=1),\n        /// right at the edge of the interpolation range (amount=1), <see cref=\"MathHelper.Lerp\"/> will return 0 (whereas it should return 1).\n        /// This also holds for value1=10^17, value2=10; value1=10^18,value2=10^2... so on.\n        /// For an in depth explanation of the issue, see below references:\n        /// Relevant Wikipedia Article: https://en.wikipedia.org/wiki/Linear_interpolation#Programming_language_support\n        /// Relevant StackOverflow Answer: http://stackoverflow.com/questions/4353525/floating-point-linear-interpolation#answer-23716956\n        /// </remarks>\n        public static float LerpPrecise(float start, float end, float amount)\n        {\n            return (start * (1 - amount)) + (end * amount);\n        }\n\n        /// <summary>\n        /// Returns the greater of two values.\n        /// </summary>\n        /// <param name=\"value1\">Source value.</param>\n        /// <param name=\"value2\">Source value.</param>\n        /// <returns>The greater value.</returns>\n        public static float Max(float value1, float value2)\n        {\n            return value1 > value2 ? value1 : value2;\n        }\n\n        /// <summary>\n        /// Returns the greater of two values.\n        /// </summary>\n        /// <param name=\"value1\">Source value.</param>\n        /// <param name=\"value2\">Source value.</param>\n        /// <returns>The greater value.</returns>\n        public static int Max(int value1, int value2)\n        {\n            return value1 > value2 ? value1 : value2;\n        }\n        \n        /// <summary>\n        /// Returns the lesser of two values.\n        /// </summary>\n        /// <param name=\"value1\">Source value.</param>\n        /// <param name=\"value2\">Source value.</param>\n        /// <returns>The lesser value.</returns>\n        public static float Min(float value1, float value2)\n        {\n            return value1 < value2 ? value1 : value2;\n        }\n\n        /// <summary>\n        /// Returns the lesser of two values.\n        /// </summary>\n        /// <param name=\"value1\">Source value.</param>\n        /// <param name=\"value2\">Source value.</param>\n        /// <returns>The lesser value.</returns>\n        public static int Min(int value1, int value2)\n        {\n            return value1 < value2 ? value1 : value2;\n        }\n        \n        /// <summary>\n        /// Interpolates between two values using a cubic equation.\n        /// </summary>\n        /// <param name=\"value1\">Source value.</param>\n        /// <param name=\"value2\">Source value.</param>\n        /// <param name=\"amount\">Weighting value.</param>\n        /// <returns>Interpolated value.</returns>\n        public static float SmoothStep(float value1, float value2, float amount)\n        {\n            // It is expected that 0 < amount < 1\n            // If amount < 0, return value1\n            // If amount > 1, return value2\n            float result = MathHelper.Clamp(amount, 0f, 1f);\n            result = MathHelper.Hermite(value1, 0f, value2, 0f, result);\n\n            return result;\n        }\n        \n        /// <summary>\n        /// Converts radians to degrees.\n        /// </summary>\n        /// <param name=\"radians\">The angle in radians.</param>\n        /// <returns>The angle in degrees.</returns>\n        /// <remarks>\n        /// This method uses double precision internally,\n        /// though it returns single float\n        /// Factor = 180 / pi\n        /// </remarks>\n        public static float ToDegrees(float radians)\n        { \n            return (float)(radians * 57.295779513082320876798154814105);\n        }\n        \n        /// <summary>\n        /// Converts degrees to radians.\n        /// </summary>\n        /// <param name=\"degrees\">The angle in degrees.</param>\n        /// <returns>The angle in radians.</returns>\n        /// <remarks>\n        /// This method uses double precision internally,\n        /// though it returns single float\n        /// Factor = pi / 180\n        /// </remarks>\n        public static float ToRadians(float degrees)\n        { \n            return (float)(degrees * 0.017453292519943295769236907684886);\n        }\n     \n        /// <summary>\n        /// Reduces a given angle to a value between π and -π.\n        /// </summary>\n        /// <param name=\"angle\">The angle to reduce, in radians.</param>\n        /// <returns>The new angle, in radians.</returns>\n        public static float WrapAngle(float angle)\n        {\n            if ((angle > -Pi) && (angle <= Pi))\n                return angle;\n            angle %= TwoPi;\n            if (angle <= -Pi)\n                return angle + TwoPi;\n            if (angle > Pi)\n                return angle - TwoPi;\n            return angle;\n        }\n\n        /// <summary>\n        /// Determines if value is powered by two.\n        /// </summary>\n        /// <param name=\"value\">A value.</param>\n        /// <returns><c>true</c> if <c>value</c> is powered by two; otherwise <c>false</c>.</returns>\n        public static bool IsPowerOfTwo(int value)\n        {\n            return (value > 0) && ((value & (value - 1)) == 0);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Matrix.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\n#if NET8_0_OR_GREATER\nusing System.Runtime.CompilerServices;\nusing SysNumerics = System.Numerics;\n#endif\n\nnamespace Microsoft.Xna.Framework\n{ \n    /// <summary>\n    /// Represents the right-handed 4x4 floating point matrix, which can store translation, scale and rotation information.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct Matrix : IEquatable<Matrix>\n    {\n        #region Public Constructors\n\n        /// <summary>\n        /// Constructs a matrix.\n        /// </summary>\n        /// <param name=\"m11\">A first row and first column value.</param>\n        /// <param name=\"m12\">A first row and second column value.</param>\n        /// <param name=\"m13\">A first row and third column value.</param>\n        /// <param name=\"m14\">A first row and fourth column value.</param>\n        /// <param name=\"m21\">A second row and first column value.</param>\n        /// <param name=\"m22\">A second row and second column value.</param>\n        /// <param name=\"m23\">A second row and third column value.</param>\n        /// <param name=\"m24\">A second row and fourth column value.</param>\n        /// <param name=\"m31\">A third row and first column value.</param>\n        /// <param name=\"m32\">A third row and second column value.</param>\n        /// <param name=\"m33\">A third row and third column value.</param>\n        /// <param name=\"m34\">A third row and fourth column value.</param>\n        /// <param name=\"m41\">A fourth row and first column value.</param>\n        /// <param name=\"m42\">A fourth row and second column value.</param>\n        /// <param name=\"m43\">A fourth row and third column value.</param>\n        /// <param name=\"m44\">A fourth row and fourth column value.</param>\n        public Matrix(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31,\n                      float m32, float m33, float m34, float m41, float m42, float m43, float m44)\n        {\n            this.M11 = m11;\n            this.M12 = m12;\n            this.M13 = m13;\n            this.M14 = m14;\n            this.M21 = m21;\n            this.M22 = m22;\n            this.M23 = m23;\n            this.M24 = m24;\n            this.M31 = m31;\n            this.M32 = m32;\n            this.M33 = m33;\n            this.M34 = m34;\n            this.M41 = m41;\n            this.M42 = m42;\n            this.M43 = m43;\n            this.M44 = m44;\n        }\n\n        /// <summary>\n        /// Constructs a matrix.\n        /// </summary>\n        /// <param name=\"row1\">A first row of the created matrix.</param>\n        /// <param name=\"row2\">A second row of the created matrix.</param>\n        /// <param name=\"row3\">A third row of the created matrix.</param>\n        /// <param name=\"row4\">A fourth row of the created matrix.</param>\n        public Matrix(Vector4 row1, Vector4 row2, Vector4 row3, Vector4 row4)\n        {\n            this.M11 = row1.X;\n            this.M12 = row1.Y;\n            this.M13 = row1.Z;\n            this.M14 = row1.W;\n            this.M21 = row2.X;\n            this.M22 = row2.Y;\n            this.M23 = row2.Z;\n            this.M24 = row2.W;\n            this.M31 = row3.X;\n            this.M32 = row3.Y;\n            this.M33 = row3.Z;\n            this.M34 = row3.W;\n            this.M41 = row4.X;\n            this.M42 = row4.Y;\n            this.M43 = row4.Z;\n            this.M44 = row4.W;\n        }\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// A first row and first column value.\n        /// </summary>\n        [DataMember]\n        public float M11;\n\n        /// <summary>\n        /// A first row and second column value.\n        /// </summary>\n        [DataMember]\n        public float M12;\n\n        /// <summary>\n        /// A first row and third column value.\n        /// </summary>\n        [DataMember]\n        public float M13;\n\n        /// <summary>\n        /// A first row and fourth column value.\n        /// </summary>\n        [DataMember]\n        public float M14;\n\n        /// <summary>\n        /// A second row and first column value.\n        /// </summary>\n        [DataMember]\n        public float M21;\n\n        /// <summary>\n        /// A second row and second column value.\n        /// </summary>\n        [DataMember]\n        public float M22;\n\n        /// <summary>\n        /// A second row and third column value.\n        /// </summary>\n        [DataMember]\n        public float M23;\n\n        /// <summary>\n        /// A second row and fourth column value.\n        /// </summary>\n        [DataMember]\n        public float M24;\n\n        /// <summary>\n        /// A third row and first column value.\n        /// </summary>\n        [DataMember]\n        public float M31;\n\n        /// <summary>\n        /// A third row and second column value.\n        /// </summary>\n        [DataMember]\n        public float M32;\n\n        /// <summary>\n        /// A third row and third column value.\n        /// </summary>\n        [DataMember]\n        public float M33;\n\n        /// <summary>\n        /// A third row and fourth column value.\n        /// </summary>\n        [DataMember]\n        public float M34;\n\n        /// <summary>\n        /// A fourth row and first column value.\n        /// </summary>\n        [DataMember]\n        public float M41;\n\n        /// <summary>\n        /// A fourth row and second column value.\n        /// </summary>\n        [DataMember]\n        public float M42;\n\n        /// <summary>\n        /// A fourth row and third column value.\n        /// </summary>\n        [DataMember]\n        public float M43;\n\n        /// <summary>\n        /// A fourth row and fourth column value.\n        /// </summary>\n        [DataMember]\n        public float M44;\n\n        #endregion\n\n        #region Indexers\n\n        /// <summary>\n        /// Get or set the matrix element at the given index, indexed in row major order.\n        /// </summary>\n        /// <param name=\"index\">The linearized, zero-based index of the matrix element.</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\">\n        /// If the index is less than <code>0</code> or larger than <code>15</code>.\n        /// </exception>\n        public float this[int index]\n        {\n            get\n            {\n                switch (index)\n                {\n                    case 0: return M11;\n                    case 1: return M12;\n                    case 2: return M13;\n                    case 3: return M14;\n                    case 4: return M21;\n                    case 5: return M22;\n                    case 6: return M23;\n                    case 7: return M24;\n                    case 8: return M31;\n                    case 9: return M32;\n                    case 10: return M33;\n                    case 11: return M34;\n                    case 12: return M41;\n                    case 13: return M42;\n                    case 14: return M43;\n                    case 15: return M44;\n                    default: throw new ArgumentOutOfRangeException();\n                }\n            }\n\n            set\n            {\n                switch (index)\n                {\n                    case 0: M11 = value; break;\n                    case 1: M12 = value; break;\n                    case 2: M13 = value; break;\n                    case 3: M14 = value; break;\n                    case 4: M21 = value; break;\n                    case 5: M22 = value; break;\n                    case 6: M23 = value; break;\n                    case 7: M24 = value; break;\n                    case 8: M31 = value; break;\n                    case 9: M32 = value; break;\n                    case 10: M33 = value; break;\n                    case 11: M34 = value; break;\n                    case 12: M41 = value; break;\n                    case 13: M42 = value; break;\n                    case 14: M43 = value; break;\n                    case 15: M44 = value; break;\n                    default: throw new ArgumentOutOfRangeException();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Get or set the value at the specified row and column (indices are zero-based).\n        /// </summary>\n        /// <param name=\"row\">The row of the element.</param>\n        /// <param name=\"column\">The column of the element.</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\">\n        /// If the row or column is less than <code>0</code> or larger than <code>3</code>.\n        /// </exception>\n        public float this[int row, int column]\n        {\n            get\n            {\n                return this[(row * 4) + column];\n            }\n\n            set\n            {\n                this[(row * 4) + column] = value;\n            }\n        }\n\n        #endregion\n\n        #region Private Members\n        private static Matrix identity = new Matrix(1f, 0f, 0f, 0f, \n                                                    0f, 1f, 0f, 0f, \n                                                    0f, 0f, 1f, 0f, \n                                                    0f, 0f, 0f, 1f);\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// The backward vector formed from the third row M31, M32, M33 elements.\n        /// </summary>\n        public Vector3 Backward\n        {\n            get { return new Vector3(this.M31, this.M32, this.M33); }\n            set\n            {\n                this.M31 = value.X;\n                this.M32 = value.Y;\n                this.M33 = value.Z;\n            }\n        }\n\n        /// <summary>\n        /// The down vector formed from the second row -M21, -M22, -M23 elements.\n        /// </summary>\n        public Vector3 Down\n        {\n            get { return new Vector3(-this.M21, -this.M22, -this.M23); }\n            set\n            {\n                this.M21 = -value.X;\n                this.M22 = -value.Y;\n                this.M23 = -value.Z;\n            }\n        }\n\n        /// <summary>\n        /// The forward vector formed from the third row -M31, -M32, -M33 elements.\n        /// </summary>\n        public Vector3 Forward\n        {\n            get { return new Vector3(-this.M31, -this.M32, -this.M33); }\n            set\n            {\n                this.M31 = -value.X;\n                this.M32 = -value.Y;\n                this.M33 = -value.Z;\n            }\n        }\n\n        /// <summary>\n        /// Returns the identity matrix.\n        /// </summary>\n        public static Matrix Identity\n        {\n            get { return identity; }\n        }\n\n        /// <summary>\n        /// The left vector formed from the first row -M11, -M12, -M13 elements.\n        /// </summary>\n        public Vector3 Left\n        {\n            get { return new Vector3(-this.M11, -this.M12, -this.M13); }\n            set\n            {\n                this.M11 = -value.X;\n                this.M12 = -value.Y;\n                this.M13 = -value.Z;\n            }\n        }\n\n        /// <summary>\n        /// The right vector formed from the first row M11, M12, M13 elements.\n        /// </summary>\n        public Vector3 Right\n        {\n            get { return new Vector3(this.M11, this.M12, this.M13); }\n            set\n            {\n                this.M11 = value.X;\n                this.M12 = value.Y;\n                this.M13 = value.Z;\n            }\n        }\n\n        /// <summary>\n        /// Position stored in this matrix.\n        /// </summary>\n        public Vector3 Translation\n        {\n            get { return new Vector3(this.M41, this.M42, this.M43); }\n            set\n            {\n                this.M41 = value.X;\n                this.M42 = value.Y;\n                this.M43 = value.Z;\n            }\n        }\n\n        /// <summary>\n        /// The upper vector formed from the second row M21, M22, M23 elements.\n        /// </summary>\n        public Vector3 Up\n        {\n            get { return new Vector3(this.M21, this.M22, this.M23); }\n            set\n            {\n                this.M21 = value.X;\n                this.M22 = value.Y;\n                this.M23 = value.Z;\n            }\n        }\n        #endregion\n\n        #region Public Methods\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> which contains sum of two matrixes.\n        /// </summary>\n        /// <param name=\"left\">The first matrix to add.</param>\n        /// <param name=\"right\">The second matrix to add.</param>\n        /// <returns>The result of the matrix addition.</returns>\n        public static Matrix Add(Matrix left, Matrix right)\n        {\n            left.M11 += right.M11;\n            left.M12 += right.M12;\n            left.M13 += right.M13;\n            left.M14 += right.M14;\n            left.M21 += right.M21;\n            left.M22 += right.M22;\n            left.M23 += right.M23;\n            left.M24 += right.M24;\n            left.M31 += right.M31;\n            left.M32 += right.M32;\n            left.M33 += right.M33;\n            left.M34 += right.M34;\n            left.M41 += right.M41;\n            left.M42 += right.M42;\n            left.M43 += right.M43;\n            left.M44 += right.M44;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> which contains sum of two matrixes.\n        /// </summary>\n        /// <param name=\"left\">The first matrix to add.</param>\n        /// <param name=\"right\">The second matrix to add.</param>\n        /// <param name=\"result\">The result of the matrix addition as an output parameter.</param>\n        public static void Add(ref Matrix left, ref Matrix right, out Matrix result)\n        {\n            result.M11 = left.M11 + right.M11;\n            result.M12 = left.M12 + right.M12;\n            result.M13 = left.M13 + right.M13;\n            result.M14 = left.M14 + right.M14;\n            result.M21 = left.M21 + right.M21;\n            result.M22 = left.M22 + right.M22;\n            result.M23 = left.M23 + right.M23;\n            result.M24 = left.M24 + right.M24;\n            result.M31 = left.M31 + right.M31;\n            result.M32 = left.M32 + right.M32;\n            result.M33 = left.M33 + right.M33;\n            result.M34 = left.M34 + right.M34;\n            result.M41 = left.M41 + right.M41;\n            result.M42 = left.M42 + right.M42;\n            result.M43 = left.M43 + right.M43;\n            result.M44 = left.M44 + right.M44;\n\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> for spherical billboarding that rotates around specified object position.\n        /// </summary>\n        /// <param name=\"objectPosition\">Position of billboard object. It will rotate around that vector.</param>\n        /// <param name=\"cameraPosition\">The camera position.</param>\n        /// <param name=\"cameraUpVector\">The camera up vector.</param>\n        /// <param name=\"cameraForwardVector\">Optional camera forward vector.</param>\n        /// <returns>The <see cref=\"Matrix\"/> for spherical billboarding.</returns>\n        public static Matrix CreateBillboard(Vector3 objectPosition, Vector3 cameraPosition,\n            Vector3 cameraUpVector, Nullable<Vector3> cameraForwardVector)\n        {\n            Matrix result;\n\n            // Delegate to the other overload of the function to do the work\n            CreateBillboard(ref objectPosition, ref cameraPosition, ref cameraUpVector, cameraForwardVector, out result);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> for spherical billboarding that rotates around specified object position.\n        /// </summary>\n        /// <param name=\"objectPosition\">Position of billboard object. It will rotate around that vector.</param>\n        /// <param name=\"cameraPosition\">The camera position.</param>\n        /// <param name=\"cameraUpVector\">The camera up vector.</param>\n        /// <param name=\"cameraForwardVector\">Optional camera forward vector.</param>\n        /// <param name=\"result\">The <see cref=\"Matrix\"/> for spherical billboarding as an output parameter.</param>\n        public static void CreateBillboard(ref Vector3 objectPosition, ref Vector3 cameraPosition,\n            ref Vector3 cameraUpVector, Vector3? cameraForwardVector, out Matrix result)\n        {\n            Vector3 diffPosition;\n            diffPosition.X = objectPosition.X - cameraPosition.X;\n            diffPosition.Y = objectPosition.Y - cameraPosition.Y;\n            diffPosition.Z = objectPosition.Z - cameraPosition.Z;\n            float distanceSq = diffPosition.LengthSquared();\n            if (distanceSq < 0.0001f)\n            {\n                diffPosition = (cameraForwardVector.HasValue)\n                             ? -cameraForwardVector.Value\n                             : Vector3.Forward;\n            }\n            else\n            {\n                float distance = (float)Math.Sqrt((double)distanceSq);\n                Vector3.Divide(ref diffPosition, distance, out diffPosition);\n            }\n\n            Vector3 right;\n            Vector3.Cross(ref cameraUpVector, ref diffPosition, out right);\n            right.Normalize();\n            Vector3 up;\n            Vector3.Cross(ref diffPosition, ref right, out up);\n\n            result.M11 = right.X;\n            result.M12 = right.Y;\n            result.M13 = right.Z;\n            result.M14 = 0;\n            result.M21 = up.X;\n            result.M22 = up.Y;\n            result.M23 = up.Z;\n            result.M24 = 0;\n            result.M31 = diffPosition.X;\n            result.M32 = diffPosition.Y;\n            result.M33 = diffPosition.Z;\n            result.M34 = 0;\n            result.M41 = objectPosition.X;\n            result.M42 = objectPosition.Y;\n            result.M43 = objectPosition.Z;\n            result.M44 = 1;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> for cylindrical billboarding that rotates around specified axis.\n        /// </summary>\n        /// <param name=\"objectPosition\">Object position the billboard will rotate around.</param>\n        /// <param name=\"cameraPosition\">Camera position.</param>\n        /// <param name=\"rotateAxis\">Axis of billboard for rotation.</param>\n        /// <param name=\"cameraForwardVector\">Optional camera forward vector.</param>\n        /// <param name=\"objectForwardVector\">Optional object forward vector.</param>\n        /// <returns>The <see cref=\"Matrix\"/> for cylindrical billboarding.</returns>\n        public static Matrix CreateConstrainedBillboard(Vector3 objectPosition, Vector3 cameraPosition,\n            Vector3 rotateAxis, Nullable<Vector3> cameraForwardVector, Nullable<Vector3> objectForwardVector)\n        {\n            Matrix result;\n            CreateConstrainedBillboard(ref objectPosition, ref cameraPosition, ref rotateAxis,\n                cameraForwardVector, objectForwardVector, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> for cylindrical billboarding that rotates around specified axis.\n        /// </summary>\n        /// <param name=\"objectPosition\">Object position the billboard will rotate around.</param>\n        /// <param name=\"cameraPosition\">Camera position.</param>\n        /// <param name=\"rotateAxis\">Axis of billboard for rotation.</param>\n        /// <param name=\"cameraForwardVector\">Optional camera forward vector.</param>\n        /// <param name=\"objectForwardVector\">Optional object forward vector.</param>\n        /// <param name=\"result\">The <see cref=\"Matrix\"/> for cylindrical billboarding as an output parameter.</param>\n        public static void CreateConstrainedBillboard(ref Vector3 objectPosition, ref Vector3 cameraPosition,\n            ref Vector3 rotateAxis, Vector3? cameraForwardVector, Vector3? objectForwardVector, out Matrix result)\n        {\n            Vector3 diffPosition;\n            diffPosition.X = objectPosition.X - cameraPosition.X;\n            diffPosition.Y = objectPosition.Y - cameraPosition.Y;\n            diffPosition.Z = objectPosition.Z - cameraPosition.Z;\n            float distanceSq = diffPosition.LengthSquared();\n            if (distanceSq < 0.0001f)\n            {\n                diffPosition = (cameraForwardVector.HasValue)\n                             ? -cameraForwardVector.Value\n                             : Vector3.Forward;\n            }\n            else\n            {\n                float distance = (float)Math.Sqrt((double)distanceSq);\n                Vector3.Divide(ref diffPosition, distance, out diffPosition);\n            }\n\n            Vector3 backward;\n            Vector3 right;\n            Vector3 up = rotateAxis;\n            float dot;\n            Vector3.Dot(ref rotateAxis, ref diffPosition, out dot);\n            if (Math.Abs(dot) > 0.9982547f)\n            {\n                if (objectForwardVector.HasValue)\n                {\n                    backward = objectForwardVector.Value;\n                    Vector3.Dot(ref rotateAxis, ref backward, out dot);\n                    if (Math.Abs(dot) > 0.9982547f)\n                    {\n                        dot = ((rotateAxis.X * Vector3.Forward.X) + (rotateAxis.Y * Vector3.Forward.Y)) + (rotateAxis.Z * Vector3.Forward.Z);\n                        backward = (Math.Abs(dot) > 0.9982547f)\n                                 ? Vector3.Right\n                                 : Vector3.Forward;\n                    }\n                }\n                else\n                {\n                    dot = ((rotateAxis.X * Vector3.Forward.X) + (rotateAxis.Y * Vector3.Forward.Y)) + (rotateAxis.Z * Vector3.Forward.Z);\n                    backward = (Math.Abs(dot) > 0.9982547f)\n                             ? Vector3.Right\n                             : Vector3.Forward;\n                }\n                Vector3.Cross(ref rotateAxis, ref backward, out right);\n                right.Normalize();\n                Vector3.Cross(ref right, ref rotateAxis, out backward);\n                backward.Normalize();\n            }\n            else\n            {\n                Vector3.Cross(ref rotateAxis, ref diffPosition, out right);\n                right.Normalize();\n                Vector3.Cross(ref right, ref up, out backward);\n                backward.Normalize();\n            }\n            result.M11 = right.X;\n            result.M12 = right.Y;\n            result.M13 = right.Z;\n            result.M14 = 0;\n            result.M21 = up.X;\n            result.M22 = up.Y;\n            result.M23 = up.Z;\n            result.M24 = 0;\n            result.M31 = backward.X;\n            result.M32 = backward.Y;\n            result.M33 = backward.Z;\n            result.M34 = 0;\n            result.M41 = objectPosition.X;\n            result.M42 = objectPosition.Y;\n            result.M43 = objectPosition.Z;\n            result.M44 = 1;\n\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> which contains the rotation moment around specified axis.\n        /// </summary>\n        /// <param name=\"axis\">The axis of rotation.</param>\n        /// <param name=\"angle\">The angle of rotation in radians.</param>\n        /// <returns>The rotation <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateFromAxisAngle(Vector3 axis, float angle)\n        {\n            Matrix result;\n            CreateFromAxisAngle(ref axis, angle, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> which contains the rotation moment around specified axis.\n        /// </summary>\n        /// <param name=\"axis\">The axis of rotation.</param>\n        /// <param name=\"angle\">The angle of rotation in radians.</param>\n        /// <param name=\"result\">The rotation <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Matrix result)\n        {\n            float x = axis.X;\n            float y = axis.Y;\n            float z = axis.Z;\n\n            float sin = (float) Math.Sin((double)angle);\n            float cos = (float) Math.Cos((double)angle);\n\n            float xx = x * x;\n            float yy = y * y;\n            float zz = z * z;\n            float xy = x * y;\n            float xz = x * z;\n            float yz = y * z;\n\n            result.M11 = xx + (cos * (1f - xx));\n            result.M12 = xy - (cos * xy) + (sin * z);\n            result.M13 = xz - (cos * xz) - (sin * y);\n            result.M14 = 0;\n            result.M21 = xy - (cos * xy) - (sin * z);\n            result.M22 = yy + (cos * (1f - yy));\n            result.M23 = yz - (cos * yz) + (sin * x);\n            result.M24 = 0;\n            result.M31 = xz - (cos * xz) + (sin * y);\n            result.M32 = yz - (cos * yz) - (sin * x);\n            result.M33 = zz + (cos * (1f - zz));\n            result.M34 = 0;\n            result.M41 = 0;\n            result.M42 = 0;\n            result.M43 = 0;\n            result.M44 = 1;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> from a <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"quaternion\"><see cref=\"Quaternion\"/> of rotation moment.</param>\n        /// <returns>The rotation <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateFromQuaternion(Quaternion quaternion)\n        {\n            Matrix result;\n            CreateFromQuaternion(ref quaternion, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> from a <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"quaternion\"><see cref=\"Quaternion\"/> of rotation moment.</param>\n        /// <param name=\"result\">The rotation <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateFromQuaternion(ref Quaternion quaternion, out Matrix result)\n        {\n            float xx = quaternion.X * quaternion.X;\n            float yy = quaternion.Y * quaternion.Y;\n            float zz = quaternion.Z * quaternion.Z;\n            float xy = quaternion.X * quaternion.Y;\n            float zw = quaternion.Z * quaternion.W;\n            float zx = quaternion.Z * quaternion.X;\n            float yw = quaternion.Y * quaternion.W;\n            float yz = quaternion.Y * quaternion.Z;\n            float xw = quaternion.X * quaternion.W;\n\n            result.M11 = 1f - (2f * (yy + zz));\n            result.M12 = 2f * (xy + zw);\n            result.M13 = 2f * (zx - yw);\n            result.M14 = 0f;\n            result.M21 = 2f * (xy - zw);\n            result.M22 = 1f - (2f * (zz + xx));\n            result.M23 = 2f * (yz + xw);\n            result.M24 = 0f;\n            result.M31 = 2f * (zx + yw);\n            result.M32 = 2f * (yz - xw);\n            result.M33 = 1f - (2f * (yy + xx));\n            result.M34 = 0f;\n            result.M41 = 0f;\n            result.M42 = 0f;\n            result.M43 = 0f;\n            result.M44 = 1f;\n        }\n\n        /// <summary>\n        /// Creates a new transform <see cref=\"Matrix\"/> from a <see cref=\"Pose2\"/>.\n        /// </summary>\n        /// <param name=\"pose\">The <see cref=\"Pose2\"/>.</param>\n        /// <returns>The transform <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateFromPose(Pose2 pose)\n        {\n            Matrix result;\n            result = Matrix.CreateRotationZ(pose.Orientation);\n            result.M41 = pose.Translation.X;\n            result.M42 = pose.Translation.Y;\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new transform <see cref=\"Matrix\"/> from a <see cref=\"Pose3\"/>.\n        /// </summary>\n        /// <param name=\"pose\">The <see cref=\"Pose3\"/>.</param>\n        /// <returns>The transform <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateFromPose(Pose3 pose)\n        {\n            Matrix result;\n            result = Matrix.CreateFromQuaternion(pose.Orientation);\n            result.Translation = pose.Translation;\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> from the specified yaw, pitch and roll values.\n        /// </summary>\n        /// <param name=\"yaw\">The yaw rotation value in radians.</param>\n        /// <param name=\"pitch\">The pitch rotation value in radians.</param>\n        /// <param name=\"roll\">The roll rotation value in radians.</param>\n        /// <returns>The rotation <see cref=\"Matrix\"/>.</returns>\n        /// <remarks>For more information about yaw, pitch and roll visit http://en.wikipedia.org/wiki/Euler_angles.\n        /// </remarks>\n        public static Matrix CreateFromYawPitchRoll(float yaw, float pitch, float roll)\n        {\n            Matrix result;\n            CreateFromYawPitchRoll(yaw, pitch, roll, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> from the specified yaw, pitch and roll values.\n        /// </summary>\n        /// <param name=\"yaw\">The yaw rotation value in radians.</param>\n        /// <param name=\"pitch\">The pitch rotation value in radians.</param>\n        /// <param name=\"roll\">The roll rotation value in radians.</param>\n        /// <param name=\"result\">The rotation <see cref=\"Matrix\"/> as an output parameter.</param>\n        /// <remarks>For more information about yaw, pitch and roll visit http://en.wikipedia.org/wiki/Euler_angles.\n        /// </remarks>\n        public static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Matrix result)\n        {\n            Quaternion quaternion;\n            Quaternion.CreateFromYawPitchRoll(yaw, pitch, roll, out quaternion);\n            CreateFromQuaternion(ref quaternion, out result);\n        }\n\n        /// <summary>\n        /// Creates a new viewing <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"cameraPosition\">Position of the camera.</param>\n        /// <param name=\"cameraTarget\">Lookup vector of the camera.</param>\n        /// <param name=\"cameraUpVector\">The direction of the upper edge of the camera.</param>\n        /// <returns>The viewing <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateLookAt(Vector3 cameraPosition, Vector3 cameraTarget, Vector3 cameraUpVector)\n        {\n            Matrix result;\n            CreateLookAt(ref cameraPosition, ref cameraTarget, ref cameraUpVector, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new viewing <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"cameraPosition\">Position of the camera.</param>\n        /// <param name=\"cameraTarget\">Lookup vector of the camera.</param>\n        /// <param name=\"cameraUpVector\">The direction of the upper edge of the camera.</param>\n        /// <param name=\"result\">The viewing <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateLookAt(ref Vector3 cameraPosition, ref Vector3 cameraTarget, ref Vector3 cameraUpVector, out Matrix result)\n        {\n            Vector3 vec3 = Vector3.Normalize(cameraPosition - cameraTarget);\n            Vector3 vec1 = Vector3.Normalize(Vector3.Cross(cameraUpVector, vec3));\n            Vector3 vec2 = Vector3.Cross(vec3, vec1);\n            result.M11 = vec1.X;\n            result.M12 = vec2.X;\n            result.M13 = vec3.X;\n            result.M14 = 0f;\n            result.M21 = vec1.Y;\n            result.M22 = vec2.Y;\n            result.M23 = vec3.Y;\n            result.M24 = 0f;\n            result.M31 = vec1.Z;\n            result.M32 = vec2.Z;\n            result.M33 = vec3.Z;\n            result.M34 = 0f;\n            result.M41 = -Vector3.Dot(vec1, cameraPosition);\n            result.M42 = -Vector3.Dot(vec2, cameraPosition);\n            result.M43 = -Vector3.Dot(vec3, cameraPosition);\n            result.M44 = 1f;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for orthographic view.\n        /// </summary>\n        /// <param name=\"width\">Width of the viewing volume.</param>\n        /// <param name=\"height\">Height of the viewing volume.</param>\n        /// <param name=\"zNearPlane\">Depth of the near plane.</param>\n        /// <param name=\"zFarPlane\">Depth of the far plane.</param>\n        /// <returns>The new projection <see cref=\"Matrix\"/> for orthographic view.</returns>\n        public static Matrix CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane)\n        {\n            Matrix result;\n            CreateOrthographic(width, height, zNearPlane, zFarPlane, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for orthographic view.\n        /// </summary>\n        /// <param name=\"width\">Width of the viewing volume.</param>\n        /// <param name=\"height\">Height of the viewing volume.</param>\n        /// <param name=\"zNearPlane\">Depth of the near plane.</param>\n        /// <param name=\"zFarPlane\">Depth of the far plane.</param>\n        /// <param name=\"result\">The new projection <see cref=\"Matrix\"/> for orthographic view as an output parameter.</param>\n        public static void CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane, out Matrix result)\n        {\n            result.M11 = 2f / width;\n            result.M12 = result.M13 = result.M14 = 0f;\n            result.M22 = 2f / height;\n            result.M21 = result.M23 = result.M24 = 0f;\n            result.M33 = 1f / (zNearPlane - zFarPlane);\n            result.M31 = result.M32 = result.M34 = 0f;\n            result.M41 = result.M42 = 0f;\n            result.M43 = zNearPlane / (zNearPlane - zFarPlane);\n            result.M44 = 1f;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for customized orthographic view.\n        /// </summary>\n        /// <param name=\"left\">Lower x-value at the near plane.</param>\n        /// <param name=\"right\">Upper x-value at the near plane.</param>\n        /// <param name=\"bottom\">Lower y-coordinate at the near plane.</param>\n        /// <param name=\"top\">Upper y-value at the near plane.</param>\n        /// <param name=\"zNearPlane\">Depth of the near plane.</param>\n        /// <param name=\"zFarPlane\">Depth of the far plane.</param>\n        /// <returns>The new projection <see cref=\"Matrix\"/> for customized orthographic view.</returns>\n        public static Matrix CreateOrthographicOffCenter(float left, float right, float bottom, float top, float zNearPlane, float zFarPlane)\n        {\n            Matrix result;\n            CreateOrthographicOffCenter(left, right, bottom, top, zNearPlane, zFarPlane, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for customized orthographic view.\n        /// </summary>\n        /// <param name=\"viewingVolume\">The viewing volume.</param>\n        /// <param name=\"zNearPlane\">Depth of the near plane.</param>\n        /// <param name=\"zFarPlane\">Depth of the far plane.</param>\n        /// <returns>The new projection <see cref=\"Matrix\"/> for customized orthographic view.</returns>\n        public static Matrix CreateOrthographicOffCenter(Rectangle viewingVolume, float zNearPlane, float zFarPlane)\n        {\n            Matrix result;\n            CreateOrthographicOffCenter(viewingVolume.Left, viewingVolume.Right, viewingVolume.Bottom, viewingVolume.Top, zNearPlane, zFarPlane, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for customized orthographic view.\n        /// </summary>\n        /// <param name=\"left\">Lower x-value at the near plane.</param>\n        /// <param name=\"right\">Upper x-value at the near plane.</param>\n        /// <param name=\"bottom\">Lower y-coordinate at the near plane.</param>\n        /// <param name=\"top\">Upper y-value at the near plane.</param>\n        /// <param name=\"zNearPlane\">Depth of the near plane.</param>\n        /// <param name=\"zFarPlane\">Depth of the far plane.</param>\n        /// <param name=\"result\">The new projection <see cref=\"Matrix\"/> for customized orthographic view as an output parameter.</param>\n        public static void CreateOrthographicOffCenter(float left, float right, float bottom, float top, float zNearPlane, float zFarPlane, out Matrix result)\n        {\n            result.M11 = (float)(2.0 / ((double)right - (double)left));\n            result.M12 = 0.0f;\n            result.M13 = 0.0f;\n            result.M14 = 0.0f;\n            result.M21 = 0.0f;\n            result.M22 = (float)(2.0 / ((double)top - (double)bottom));\n            result.M23 = 0.0f;\n            result.M24 = 0.0f;\n            result.M31 = 0.0f;\n            result.M32 = 0.0f;\n            result.M33 = (float)(1.0 / ((double)zNearPlane - (double)zFarPlane));\n            result.M34 = 0.0f;\n            result.M41 = (float)(((double)left + (double)right) / ((double)left - (double)right));\n            result.M42 = (float)(((double)top + (double)bottom) / ((double)bottom - (double)top));\n            result.M43 = (float)((double)zNearPlane / ((double)zNearPlane - (double)zFarPlane));\n            result.M44 = 1.0f;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for perspective view.\n        /// </summary>\n        /// <param name=\"width\">Width of the viewing volume.</param>\n        /// <param name=\"height\">Height of the viewing volume.</param>\n        /// <param name=\"nearPlaneDistance\">Distance to the near plane.</param>\n        /// <param name=\"farPlaneDistance\">Distance to the far plane.</param>\n        /// <returns>The new projection <see cref=\"Matrix\"/> for perspective view.</returns>\n        public static Matrix CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance)\n        {\n            Matrix result;\n            CreatePerspective(width, height, nearPlaneDistance, farPlaneDistance, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for perspective view.\n        /// </summary>\n        /// <param name=\"width\">Width of the viewing volume.</param>\n        /// <param name=\"height\">Height of the viewing volume.</param>\n        /// <param name=\"nearPlaneDistance\">Distance to the near plane.</param>\n        /// <param name=\"farPlaneDistance\">Distance to the far plane.</param>\n        /// <param name=\"result\">The new projection <see cref=\"Matrix\"/> for perspective view as an output parameter.</param>\n        public static void CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance, out Matrix result)\n        {\n            if (nearPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"nearPlaneDistance <= 0\");\n            }\n            if (farPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"farPlaneDistance <= 0\");\n            }\n            if (nearPlaneDistance >= farPlaneDistance)\n            {\n                throw new ArgumentException(\"nearPlaneDistance >= farPlaneDistance\");\n            }\n\n            result.M11 = (2.0f * nearPlaneDistance) / width;\n            result.M12 = result.M13 = result.M14 = 0.0f;\n            result.M22 = (2.0f * nearPlaneDistance) / height;\n            result.M21 = result.M23 = result.M24 = 0.0f;            \n            result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);\n            result.M31 = result.M32 = 0.0f;\n            result.M34 = -1.0f;\n            result.M41 = result.M42 = result.M44 = 0.0f;\n            result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance);\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for perspective view with field of view.\n        /// </summary>\n        /// <param name=\"fieldOfView\">Field of view in the y direction in radians.</param>\n        /// <param name=\"aspectRatio\">Width divided by height of the viewing volume.</param>\n        /// <param name=\"nearPlaneDistance\">Distance to the near plane.</param>\n        /// <param name=\"farPlaneDistance\">Distance to the far plane.</param>\n        /// <returns>The new projection <see cref=\"Matrix\"/> for perspective view with FOV.</returns>\n        public static Matrix CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance)\n        {\n            Matrix result;\n            CreatePerspectiveFieldOfView(fieldOfView, aspectRatio, nearPlaneDistance, farPlaneDistance, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for perspective view with field of view.\n        /// </summary>\n        /// <param name=\"fieldOfView\">Field of view in the y direction in radians.</param>\n        /// <param name=\"aspectRatio\">Width divided by height of the viewing volume.</param>\n        /// <param name=\"nearPlaneDistance\">Distance of the near plane.</param>\n        /// <param name=\"farPlaneDistance\">Distance of the far plane.</param>\n        /// <param name=\"result\">The new projection <see cref=\"Matrix\"/> for perspective view with FOV as an output parameter.</param>\n        public static void CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance, out Matrix result)\n        {\n            if ((fieldOfView <= 0f) || (fieldOfView >= 3.141593f))\n            {\n                throw new ArgumentException(\"fieldOfView <= 0 or >= PI\");\n            }\n            if (nearPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"nearPlaneDistance <= 0\");\n            }\n            if (farPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"farPlaneDistance <= 0\");\n            }\n            if (nearPlaneDistance >= farPlaneDistance)\n            {\n                throw new ArgumentException(\"nearPlaneDistance >= farPlaneDistance\");\n            }\n\n            float yScale = 1.0f / (float)Math.Tan((double)fieldOfView * 0.5f);\n            float xScale = yScale / aspectRatio;\n\n            result.M11 = xScale;\n            result.M12 = result.M13 = result.M14 = 0.0f;\n            result.M22 = yScale;\n            result.M21 = result.M23 = result.M24 = 0.0f;\n            result.M31 = result.M32 = 0.0f;            \n            result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);\n            result.M34 = -1.0f;\n            result.M41 = result.M42 = result.M44 = 0.0f;\n            result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance);\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for customized perspective view.\n        /// </summary>\n        /// <param name=\"left\">Lower x-value at the near plane.</param>\n        /// <param name=\"right\">Upper x-value at the near plane.</param>\n        /// <param name=\"bottom\">Lower y-coordinate at the near plane.</param>\n        /// <param name=\"top\">Upper y-value at the near plane.</param>\n        /// <param name=\"nearPlaneDistance\">Distance to the near plane.</param>\n        /// <param name=\"farPlaneDistance\">Distance to the far plane.</param>\n        /// <returns>The new <see cref=\"Matrix\"/> for customized perspective view.</returns>\n        public static Matrix CreatePerspectiveOffCenter(float left, float right, float bottom, float top, float nearPlaneDistance, float farPlaneDistance)\n        {\n            Matrix result;\n            CreatePerspectiveOffCenter(left, right, bottom, top, nearPlaneDistance, farPlaneDistance, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for customized perspective view.\n        /// </summary>\n        /// <param name=\"viewingVolume\">The viewing volume.</param>\n        /// <param name=\"nearPlaneDistance\">Distance to the near plane.</param>\n        /// <param name=\"farPlaneDistance\">Distance to the far plane.</param>\n        /// <returns>The new <see cref=\"Matrix\"/> for customized perspective view.</returns>\n        public static Matrix CreatePerspectiveOffCenter(Rectangle viewingVolume, float nearPlaneDistance, float farPlaneDistance)\n        {\n            Matrix result;\n            CreatePerspectiveOffCenter(viewingVolume.Left, viewingVolume.Right, viewingVolume.Bottom, viewingVolume.Top, nearPlaneDistance, farPlaneDistance, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new projection <see cref=\"Matrix\"/> for customized perspective view.\n        /// </summary>\n        /// <param name=\"left\">Lower x-value at the near plane.</param>\n        /// <param name=\"right\">Upper x-value at the near plane.</param>\n        /// <param name=\"bottom\">Lower y-coordinate at the near plane.</param>\n        /// <param name=\"top\">Upper y-value at the near plane.</param>\n        /// <param name=\"nearPlaneDistance\">Distance to the near plane.</param>\n        /// <param name=\"farPlaneDistance\">Distance to the far plane.</param>\n        /// <param name=\"result\">The new <see cref=\"Matrix\"/> for customized perspective view as an output parameter.</param>\n        public static void CreatePerspectiveOffCenter(float left, float right, float bottom, float top, float nearPlaneDistance, float farPlaneDistance, out Matrix result)\n        {\n            if (nearPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"nearPlaneDistance <= 0\");\n            }\n            if (farPlaneDistance <= 0f)\n            {\n                throw new ArgumentException(\"farPlaneDistance <= 0\");\n            }\n            if (nearPlaneDistance >= farPlaneDistance)\n            {\n                throw new ArgumentException(\"nearPlaneDistance >= farPlaneDistance\");\n            }\n            result.M11 = (2f * nearPlaneDistance) / (right - left);\n            result.M12 = result.M13 = result.M14 = 0;\n            result.M22 = (2f * nearPlaneDistance) / (top - bottom);\n            result.M21 = result.M23 = result.M24 = 0;\n            result.M31 = (left + right) / (right - left);\n            result.M32 = (top + bottom) / (top - bottom);\n            result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);\n            result.M34 = -1;\n            result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance);\n            result.M41 = result.M42 = result.M44 = 0;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> around X axis.\n        /// </summary>\n        /// <param name=\"radians\">Angle in radians.</param>\n        /// <returns>The rotation <see cref=\"Matrix\"/> around X axis.</returns>\n        public static Matrix CreateRotationX(float radians)\n        {\n            Matrix result;\n            CreateRotationX(radians, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> around X axis.\n        /// </summary>\n        /// <param name=\"radians\">Angle in radians.</param>\n        /// <param name=\"result\">The rotation <see cref=\"Matrix\"/> around X axis as an output parameter.</param>\n        public static void CreateRotationX(float radians, out Matrix result)\n        {\n            result = Matrix.Identity;\n\n            float cos = (float)Math.Cos(radians);\n            float sin = (float)Math.Sin(radians);\n            \n            result.M22 = cos;\n            result.M23 = sin;\n            result.M32 = -sin;\n            result.M33 = cos;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> around Y axis.\n        /// </summary>\n        /// <param name=\"radians\">Angle in radians.</param>\n        /// <returns>The rotation <see cref=\"Matrix\"/> around Y axis.</returns>\n        public static Matrix CreateRotationY(float radians)\n        {\n            Matrix result;\n            CreateRotationY(radians, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> around Y axis.\n        /// </summary>\n        /// <param name=\"radians\">Angle in radians.</param>\n        /// <param name=\"result\">The rotation <see cref=\"Matrix\"/> around Y axis as an output parameter.</param>\n        public static void CreateRotationY(float radians, out Matrix result)\n        {\n            result = Matrix.Identity;\n\n            float cos = (float)Math.Cos(radians);\n            float sin = (float)Math.Sin(radians);\n            \n            result.M11 = cos;\n            result.M13 = -sin;\n            result.M31 = sin;\n            result.M33 = cos;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> around Z axis.\n        /// </summary>\n        /// <param name=\"radians\">Angle in radians.</param>\n        /// <returns>The rotation <see cref=\"Matrix\"/> around Z axis.</returns>\n        public static Matrix CreateRotationZ(float radians)\n        {\n            Matrix result;\n            CreateRotationZ(radians, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> around Z axis.\n        /// </summary>\n        /// <param name=\"radians\">Angle in radians.</param>\n        /// <param name=\"result\">The rotation <see cref=\"Matrix\"/> around Z axis as an output parameter.</param>\n        public static void CreateRotationZ(float radians, out Matrix result)\n        {\n            result = Matrix.Identity;\n\n            float cos = (float)Math.Cos(radians);\n            float sin = (float)Math.Sin(radians);\n            \n            result.M11 = cos;\n            result.M12 = sin;\n            result.M21 = -sin;\n            result.M22 = cos;\n        }\n\n        /// <summary>\n        /// Creates a new rotation <see cref=\"Matrix\"/> around Z axis.\n        /// </summary>\n        /// <param name=\"rotation\">A normalized Complex number.</param>\n        /// <returns>The rotation <see cref=\"Matrix\"/> around Z axis.</returns>\n        public static Matrix CreateRotationZ(Complex rotation)\n        {\n            Matrix result = Matrix.Identity;\n            result.M11 = rotation.R;\n            result.M12 = rotation.i;\n            result.M21 = -rotation.i;\n            result.M22 = rotation.R;\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new scaling <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"scale\">Scale value for all three axises.</param>\n        /// <returns>The scaling <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateScale(float scale)\n        {\n            Matrix result;\n            CreateScale(scale, scale, scale, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new scaling <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"scale\">Scale value for all three axises.</param>\n        /// <param name=\"result\">The scaling <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateScale(float scale, out Matrix result)\n        {\n            CreateScale(scale, scale, scale, out result);\n        }\n\n        /// <summary>\n        /// Creates a new scaling <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"xScale\">Scale value for X axis.</param>\n        /// <param name=\"yScale\">Scale value for Y axis.</param>\n        /// <param name=\"zScale\">Scale value for Z axis.</param>\n        /// <returns>The scaling <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateScale(float xScale, float yScale, float zScale)\n        {\n            Matrix result;\n            CreateScale(xScale, yScale, zScale, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new scaling <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"xScale\">Scale value for X axis.</param>\n        /// <param name=\"yScale\">Scale value for Y axis.</param>\n        /// <param name=\"zScale\">Scale value for Z axis.</param>\n        /// <param name=\"result\">The scaling <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateScale(float xScale, float yScale, float zScale, out Matrix result)\n        {\n            result.M11 = xScale;\n            result.M12 = 0;\n            result.M13 = 0;\n            result.M14 = 0;\n            result.M21 = 0;\n            result.M22 = yScale;\n            result.M23 = 0;\n            result.M24 = 0;\n            result.M31 = 0;\n            result.M32 = 0;\n            result.M33 = zScale;\n            result.M34 = 0;\n            result.M41 = 0;\n            result.M42 = 0;\n            result.M43 = 0;\n            result.M44 = 1;\n        }\n\n        /// <summary>\n        /// Creates a new scaling <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"scales\"><see cref=\"Vector3\"/> representing x,y and z scale values.</param>\n        /// <returns>The scaling <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateScale(Vector3 scales)\n        {\n            Matrix result;\n            CreateScale(ref scales, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new scaling <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"scales\"><see cref=\"Vector3\"/> representing x,y and z scale values.</param>\n        /// <param name=\"result\">The scaling <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateScale(ref Vector3 scales, out Matrix result)\n        {\n            result.M11 = scales.X;\n            result.M12 = 0;\n            result.M13 = 0;\n            result.M14 = 0;\n            result.M21 = 0;\n            result.M22 = scales.Y;\n            result.M23 = 0;\n            result.M24 = 0;\n            result.M31 = 0;\n            result.M32 = 0;\n            result.M33 = scales.Z;\n            result.M34 = 0;\n            result.M41 = 0;\n            result.M42 = 0;\n            result.M43 = 0;\n            result.M44 = 1;\n        }\n\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that flattens geometry into a specified <see cref=\"Plane\"/> as if casting a shadow from a specified light source. \n        /// </summary>\n        /// <param name=\"lightDirection\">A vector specifying the direction from which the light that will cast the shadow is coming.</param>\n        /// <param name=\"plane\">The plane onto which the new matrix should flatten geometry so as to cast a shadow.</param>\n        /// <returns>A <see cref=\"Matrix\"/> that can be used to flatten geometry onto the specified plane from the specified direction. </returns>\n        public static Matrix CreateShadow(Vector3 lightDirection, Plane plane)\n        {\n            Matrix result;\n            CreateShadow(ref lightDirection, ref plane, out result);\n            return result;\n        }\n\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that flattens geometry into a specified <see cref=\"Plane\"/> as if casting a shadow from a specified light source. \n        /// </summary>\n        /// <param name=\"lightDirection\">A vector specifying the direction from which the light that will cast the shadow is coming.</param>\n        /// <param name=\"plane\">The plane onto which the new matrix should flatten geometry so as to cast a shadow.</param>\n        /// <param name=\"result\">A <see cref=\"Matrix\"/> that can be used to flatten geometry onto the specified plane from the specified direction as an output parameter.</param>\n        public static void CreateShadow(ref Vector3 lightDirection, ref Plane plane, out Matrix result)\n        {\n            float dot = (plane.Normal.X * lightDirection.X) + (plane.Normal.Y * lightDirection.Y) + (plane.Normal.Z * lightDirection.Z);\n            float x = -plane.Normal.X;\n            float y = -plane.Normal.Y;\n            float z = -plane.Normal.Z;\n            float d = -plane.D;\n\n            result.M11 = (x * lightDirection.X) + dot;\n            result.M12 = x * lightDirection.Y;\n            result.M13 = x * lightDirection.Z;\n            result.M14 = 0;\n            result.M21 = y * lightDirection.X;\n            result.M22 = (y * lightDirection.Y) + dot;\n            result.M23 = y * lightDirection.Z;\n            result.M24 = 0;            \n            result.M31 = z * lightDirection.X;\n            result.M32 = z * lightDirection.Y;\n            result.M33 = (z * lightDirection.Z) + dot;\n            result.M34 = 0;            \n            result.M41 = d * lightDirection.X;\n            result.M42 = d * lightDirection.Y;\n            result.M43 = d * lightDirection.Z;\n            result.M44 = dot;\n        }\n        \n        /// <summary>\n        /// Creates a new translation <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"xPosition\">X coordinate of translation.</param>\n        /// <param name=\"yPosition\">Y coordinate of translation.</param>\n        /// <param name=\"zPosition\">Z coordinate of translation.</param>\n        /// <returns>The translation <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateTranslation(float xPosition, float yPosition, float zPosition)\n        {\n            Matrix result;\n            CreateTranslation(xPosition, yPosition, zPosition, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new translation <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"position\">X,Y and Z coordinates of translation.</param>\n        /// <param name=\"result\">The translation <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateTranslation(ref Vector3 position, out Matrix result)\n        {\n            result.M11 = 1;\n            result.M12 = 0;\n            result.M13 = 0;\n            result.M14 = 0;\n            result.M21 = 0;\n            result.M22 = 1;\n            result.M23 = 0;\n            result.M24 = 0;\n            result.M31 = 0;\n            result.M32 = 0;\n            result.M33 = 1;\n            result.M34 = 0;\n            result.M41 = position.X;\n            result.M42 = position.Y;\n            result.M43 = position.Z;\n            result.M44 = 1;\n        }\n\n        /// <summary>\n        /// Creates a new translation <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"position\">X,Y and Z coordinates of translation.</param>\n        /// <returns>The translation <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateTranslation(Vector3 position)\n        {\n            Matrix result;\n            CreateTranslation(ref position, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new translation <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"xPosition\">X coordinate of translation.</param>\n        /// <param name=\"yPosition\">Y coordinate of translation.</param>\n        /// <param name=\"zPosition\">Z coordinate of translation.</param>\n        /// <param name=\"result\">The translation <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateTranslation(float xPosition, float yPosition, float zPosition, out Matrix result)\n        {\n            result.M11 = 1;\n            result.M12 = 0;\n            result.M13 = 0;\n            result.M14 = 0;\n            result.M21 = 0;\n            result.M22 = 1;\n            result.M23 = 0;\n            result.M24 = 0;\n            result.M31 = 0;\n            result.M32 = 0;\n            result.M33 = 1;\n            result.M34 = 0;\n            result.M41 = xPosition;\n            result.M42 = yPosition;\n            result.M43 = zPosition;\n            result.M44 = 1;\n        }\n        \n        /// <summary>\n        /// Creates a new reflection <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">The plane that used for reflection calculation.</param>\n        /// <returns>The reflection <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateReflection(Plane value)\n        {\n            Matrix result;\n            CreateReflection(ref value, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new reflection <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">The plane that used for reflection calculation.</param>\n        /// <param name=\"result\">The reflection <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateReflection(ref Plane value, out Matrix result)\n        {\n            Plane plane;\n            Plane.Normalize(ref value, out plane);\n\n            float nx = plane.Normal.X;\n            float ny = plane.Normal.Y;\n            float nz = plane.Normal.Z;\n            float x2 = -2f * nx;\n            float y2 = -2f * ny;\n            float z2 = -2f * nz;\n\n            result.M11 = x2 * nx + 1f;\n            result.M12 = y2 * nx;\n            result.M13 = z2 * nx;\n            result.M14 = 0;\n            result.M21 = x2 * ny;\n            result.M22 = y2 * ny + 1;\n            result.M23 = z2 * ny;\n            result.M24 = 0;\n            result.M31 = x2 * nz;\n            result.M32 = y2 * nz;\n            result.M33 = z2 * nz + 1;\n            result.M34 = 0;\n            result.M41 = x2 * plane.D;\n            result.M42 = y2 * plane.D;\n            result.M43 = z2 * plane.D;\n            result.M44 = 0 + 1;\n        }\n\n        /// <summary>\n        /// Creates a new world <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"position\">The position vector.</param>\n        /// <param name=\"forward\">The forward direction vector.</param>\n        /// <param name=\"up\">The upward direction vector. Usually <see cref=\"Vector3.Up\"/>.</param>\n        /// <returns>The world <see cref=\"Matrix\"/>.</returns>\n        public static Matrix CreateWorld(Vector3 position, Vector3 forward, Vector3 up)\n        {\n            Matrix result;\n            CreateWorld(ref position, ref forward, ref up, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new world <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"position\">The position vector.</param>\n        /// <param name=\"forward\">The forward direction vector.</param>\n        /// <param name=\"up\">The upward direction vector. Usually <see cref=\"Vector3.Up\"/>.</param>\n        /// <param name=\"result\">The world <see cref=\"Matrix\"/> as an output parameter.</param>\n        public static void CreateWorld(ref Vector3 position, ref Vector3 forward, ref Vector3 up, out Matrix result)\n        {\n                        Vector3 x, y, z;\n                        Vector3.Normalize(ref forward, out z);\n                        Vector3.Cross(ref forward, ref up, out x);\n                        Vector3.Cross(ref x, ref forward, out y);\n                        x.Normalize();\n                        y.Normalize();            \n                        \n                        result = new Matrix();\n                        result.Right = x;\n                        result.Up = y;\n                        result.Forward = z;\n                        result.Translation = position;\n                        result.M44 = 1f;\n        }\n\n        /// <summary>\n        /// Decomposes this matrix to translation, rotation and scale elements. Returns <c>true</c> if matrix can be decomposed; <c>false</c> otherwise.\n        /// </summary>\n        /// <param name=\"scale\">Scale vector as an output parameter.</param>\n        /// <param name=\"rotation\">Rotation quaternion as an output parameter.</param>\n        /// <param name=\"translation\">Translation vector as an output parameter.</param>\n        /// <returns><c>true</c> if matrix can be decomposed; <c>false</c> otherwise.</returns>\n        public bool Decompose(out Vector3 scale, out Quaternion rotation, out Vector3 translation)\n        {\n            translation.X = this.M41;\n            translation.Y = this.M42;\n            translation.Z = this.M43;\n\n            float xs = (Math.Sign(M11 * M12 * M13 * M14) < 0) ? -1 : 1;\n            float ys = (Math.Sign(M21 * M22 * M23 * M24) < 0) ? -1 : 1;\n            float zs = (Math.Sign(M31 * M32 * M33 * M34) < 0) ? -1 : 1;\n\n            scale.X = xs * (float)Math.Sqrt(this.M11 * this.M11 + this.M12 * this.M12 + this.M13 * this.M13);\n            scale.Y = ys * (float)Math.Sqrt(this.M21 * this.M21 + this.M22 * this.M22 + this.M23 * this.M23);\n            scale.Z = zs * (float)Math.Sqrt(this.M31 * this.M31 + this.M32 * this.M32 + this.M33 * this.M33);\n\n            if (scale.X == 0.0 || scale.Y == 0.0 || scale.Z == 0.0)\n            {\n                rotation = Quaternion.Identity;\n                return false;\n            }\n\n            Matrix m1 = new Matrix(this.M11 / scale.X, M12 / scale.X, M13 / scale.X, 0,\n                                   this.M21 / scale.Y, M22 / scale.Y, M23 / scale.Y, 0,\n                                   this.M31 / scale.Z, M32 / scale.Z, M33 / scale.Z, 0,\n                                   0, 0, 0, 1);\n\n            rotation = Quaternion.CreateFromRotationMatrix(m1);\n            return true;\n        }\t\n\n        /// <summary>\n        /// Returns a determinant of this <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <returns>Determinant of this <see cref=\"Matrix\"/></returns>\n        /// <remarks>See more about determinant here - http://en.wikipedia.org/wiki/Determinant.\n        /// </remarks>\n        public float Determinant()\n        {\n            float tmp1 = (M33 * M44) - (M34 * M43);\n            float tmp2 = (M32 * M44) - (M34 * M42);\n            float tmp3 = (M32 * M43) - (M33 * M42);\n            float tmp4 = (M31 * M44) - (M34 * M41);\n            float tmp5 = (M31 * M43) - (M33 * M41);\n            float tmp6 = (M31 * M42) - (M32 * M41);\n\n            float det = 0f;\n            det = det + M11 * ( (M22 * tmp1) - (M23 * tmp2) + (M24 * tmp3) );\n            det = det - M12 * ( (M21 * tmp1) - (M23 * tmp4) + (M24 * tmp5) );\n            det = det + M13 * ( (M21 * tmp2) - (M22 * tmp4) + (M24 * tmp6) );\n            det = det - M14 * ( (M21 * tmp3) - (M22 * tmp5) + (M23 * tmp6) );\n            return det;\n        }\n\n        /// <summary>\n        /// Divides the elements of a <see cref=\"Matrix\"/> by the elements of another matrix.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Matrix\"/>.</param>\n        /// <returns>The result of dividing the matrix.</returns>\n        public static Matrix Divide(Matrix left, Matrix right)\n        {\n            left.M11 = left.M11 / right.M11;\n            left.M12 = left.M12 / right.M12;\n            left.M13 = left.M13 / right.M13;\n            left.M14 = left.M14 / right.M14;\n            left.M21 = left.M21 / right.M21;\n            left.M22 = left.M22 / right.M22;\n            left.M23 = left.M23 / right.M23;\n            left.M24 = left.M24 / right.M24;\n            left.M31 = left.M31 / right.M31;\n            left.M32 = left.M32 / right.M32;\n            left.M33 = left.M33 / right.M33;\n            left.M34 = left.M34 / right.M34;\n            left.M41 = left.M41 / right.M41;\n            left.M42 = left.M42 / right.M42;\n            left.M43 = left.M43 / right.M43;\n            left.M44 = left.M44 / right.M44;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the elements of a <see cref=\"Matrix\"/> by the elements of another matrix.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">The result of dividing the matrix as an output parameter.</param>\n        public static void Divide(ref Matrix left, ref Matrix right, out Matrix result)\n        {\n            result.M11 = left.M11 / right.M11;\n            result.M12 = left.M12 / right.M12;\n            result.M13 = left.M13 / right.M13;\n            result.M14 = left.M14 / right.M14;\n            result.M21 = left.M21 / right.M21;\n            result.M22 = left.M22 / right.M22;\n            result.M23 = left.M23 / right.M23;\n            result.M24 = left.M24 / right.M24;\n            result.M31 = left.M31 / right.M31;\n            result.M32 = left.M32 / right.M32;\n            result.M33 = left.M33 / right.M33;\n            result.M34 = left.M34 / right.M34;\n            result.M41 = left.M41 / right.M41;\n            result.M42 = left.M42 / right.M42;\n            result.M43 = left.M43 / right.M43;\n            result.M44 = left.M44 / right.M44;\n        }\n\n        /// <summary>\n        /// Divides the elements of a <see cref=\"Matrix\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <returns>The result of dividing a matrix by a scalar.</returns>\n        public static Matrix Divide(Matrix left, float right)\n        {\n            float factor = 1f / right;\n            left.M11 = left.M11 * factor;\n            left.M12 = left.M12 * factor;\n            left.M13 = left.M13 * factor;\n            left.M14 = left.M14 * factor;\n            left.M21 = left.M21 * factor;\n            left.M22 = left.M22 * factor;\n            left.M23 = left.M23 * factor;\n            left.M24 = left.M24 * factor;\n            left.M31 = left.M31 * factor;\n            left.M32 = left.M32 * factor;\n            left.M33 = left.M33 * factor;\n            left.M34 = left.M34 * factor;\n            left.M41 = left.M41 * factor;\n            left.M42 = left.M42 * factor;\n            left.M43 = left.M43 * factor;\n            left.M44 = left.M44 * factor;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the elements of a <see cref=\"Matrix\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <param name=\"result\">The result of dividing a matrix by a scalar as an output parameter.</param>\n        public static void Divide(ref Matrix left, float right, out Matrix result)\n        {\n            float factor = 1f / right;\n            result.M11 = left.M11 * factor;\n            result.M12 = left.M12 * factor;\n            result.M13 = left.M13 * factor;\n            result.M14 = left.M14 * factor;\n            result.M21 = left.M21 * factor;\n            result.M22 = left.M22 * factor;\n            result.M23 = left.M23 * factor;\n            result.M24 = left.M24 * factor;\n            result.M31 = left.M31 * factor;\n            result.M32 = left.M32 * factor;\n            result.M33 = left.M33 * factor;\n            result.M34 = left.M34 * factor;\n            result.M41 = left.M41 * factor;\n            result.M42 = left.M42 * factor;\n            result.M43 = left.M43 * factor;\n            result.M44 = left.M44 * factor;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Matrix\"/> without any tolerance.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Matrix\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Matrix other)\n        {\n            return ((this.M11 == other.M11) && (this.M22 == other.M22) && (this.M33 == other.M33) && (this.M44 == other.M44) && (this.M12 == other.M12) && (this.M13 == other.M13) && (this.M14 == other.M14) && (this.M21 == other.M21) && (this.M23 == other.M23) && (this.M24 == other.M24) && (this.M31 == other.M31) && (this.M32 == other.M32) && (this.M34 == other.M34) && (this.M41 == other.M41) && (this.M42 == other.M42) && (this.M43 == other.M43));\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/> without any tolerance.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            bool flag = false;\n            if (obj is Matrix)\n            {\n                flag = this.Equals((Matrix) obj);\n            }\n            return flag;\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Matrix\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return (this.M11.GetHashCode() + this.M12.GetHashCode() + this.M13.GetHashCode() + this.M14.GetHashCode() + this.M21.GetHashCode() + this.M22.GetHashCode() + this.M23.GetHashCode() + this.M24.GetHashCode() + this.M31.GetHashCode() + this.M32.GetHashCode() + this.M33.GetHashCode() + this.M34.GetHashCode() + this.M41.GetHashCode() + this.M42.GetHashCode() + this.M43.GetHashCode() + this.M44.GetHashCode());\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> which contains inversion of the specified matrix. \n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Matrix\"/>.</param>\n        /// <returns>The inverted matrix.</returns>\n        public static Matrix Invert(Matrix value)\n        {\n            Matrix result;\n            Invert(ref value, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> which contains inversion of the specified matrix. \n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">The inverted matrix as output parameter.</param>\n        public static void Invert(ref Matrix value, out Matrix result)\n        {\n            float tmp01 = (float)  ((double)value.M33 * (double)value.M44 - (double)value.M34 * (double)value.M43);\n            float tmp02 = (float)  ((double)value.M32 * (double)value.M44 - (double)value.M34 * (double)value.M42);\n            float tmp03 = (float)  ((double)value.M32 * (double)value.M43 - (double)value.M33 * (double)value.M42);\n            float tmp04 = (float)  ((double)value.M31 * (double)value.M44 - (double)value.M34 * (double)value.M41);\n            float tmp05 = (float)  ((double)value.M31 * (double)value.M43 - (double)value.M33 * (double)value.M41);\n            float tmp06 = (float)  ((double)value.M31 * (double)value.M42 - (double)value.M32 * (double)value.M41);\n\n            float tmp07 = (float)  ((double)value.M22 * (double)tmp01 - (double)value.M23 * (double)tmp02 + (double) value.M24 * (double)tmp03);\n            float tmp08 = (float) -((double)value.M21 * (double)tmp01 - (double)value.M23 * (double)tmp04 + (double) value.M24 * (double)tmp05);\n            float tmp09 = (float)  ((double)value.M21 * (double)tmp02 - (double)value.M22 * (double)tmp04 + (double) value.M24 * (double)tmp06);\n            float tmp10 = (float) -((double)value.M21 * (double)tmp03 - (double)value.M22 * (double)tmp05 + (double) value.M23 * (double)tmp06);\n            float tmp11 = (float)  (1.0 / ((double)value.M11 * (double)tmp07 + (double)value.M12 * (double)tmp08 + (double)value.M13 * (double)tmp09 + (double)value.M14 * (double)tmp10));\n\n            float m11 = tmp07 * tmp11;\n            float m21 = tmp08 * tmp11;\n            float m31 = tmp09 * tmp11;\n            float m41 = tmp10 * tmp11;\n\n            float m12 = (float) -((double) value.M12 * (double)tmp01 - (double)value.M13 * (double)tmp02 + (double)value.M14 * (double)tmp03) * tmp11;\n            float m22 = (float)  ((double) value.M11 * (double)tmp01 - (double)value.M13 * (double)tmp04 + (double)value.M14 * (double)tmp05) * tmp11;\n            float m32 = (float) -((double) value.M11 * (double)tmp02 - (double)value.M12 * (double)tmp04 + (double)value.M14 * (double)tmp06) * tmp11;\n            float m42 = (float)  ((double) value.M11 * (double)tmp03 - (double)value.M12 * (double)tmp05 + (double)value.M13 * (double)tmp06) * tmp11;\n\n            float tmp12 = (float) ((double)value.M23 * (double)value.M44 - (double)value.M24 * (double)value.M43);\n            float tmp13 = (float) ((double)value.M22 * (double)value.M44 - (double)value.M24 * (double)value.M42);\n            float tmp14 = (float) ((double)value.M22 * (double)value.M43 - (double)value.M23 * (double)value.M42);\n            float tmp15 = (float) ((double)value.M21 * (double)value.M44 - (double)value.M24 * (double)value.M41);\n            float tmp16 = (float) ((double)value.M21 * (double)value.M43 - (double)value.M23 * (double)value.M41);\n            float tmp17 = (float) ((double)value.M21 * (double)value.M42 - (double)value.M22 * (double)value.M41);\n\n            float m13 = (float)  ((double)value.M12 * (double)tmp12 - (double)value.M13 * (double)tmp13 + (double)value.M14 * (double)tmp14) * tmp11;\n            float m23 = (float) -((double)value.M11 * (double)tmp12 - (double)value.M13 * (double)tmp15 + (double)value.M14 * (double)tmp16) * tmp11;\n            float m33 = (float)  ((double)value.M11 * (double)tmp13 - (double)value.M12 * (double)tmp15 + (double)value.M14 * (double)tmp17) * tmp11;\n            float m43 = (float) -((double)value.M11 * (double)tmp14 - (double)value.M12 * (double)tmp16 + (double)value.M13 * (double)tmp17) * tmp11;\n\n            float tmp18 = (float) ((double)value.M23 * (double)value.M34 - (double)value.M24 * (double)value.M33);\n            float tmp19 = (float) ((double)value.M22 * (double)value.M34 - (double)value.M24 * (double)value.M32);\n            float tmp20 = (float) ((double)value.M22 * (double)value.M33 - (double)value.M23 * (double)value.M32);\n            float tmp21 = (float) ((double)value.M21 * (double)value.M34 - (double)value.M24 * (double)value.M31);\n            float tmp22 = (float) ((double)value.M21 * (double)value.M33 - (double)value.M23 * (double)value.M31);\n            float tmp23 = (float) ((double)value.M21 * (double)value.M32 - (double)value.M22 * (double)value.M31);\n\n            float m14 = (float) -((double)value.M12 * (double)tmp18 - (double)value.M13 * (double)tmp19 + (double)value.M14 * (double)tmp20) * tmp11;\n            float m24 = (float)  ((double)value.M11 * (double)tmp18 - (double)value.M13 * (double)tmp21 + (double)value.M14 * (double)tmp22) * tmp11;\n            float m34 = (float) -((double)value.M11 * (double)tmp19 - (double)value.M12 * (double)tmp21 + (double)value.M14 * (double)tmp23) * tmp11;\n            float m44 = (float)  ((double)value.M11 * (double)tmp20 - (double)value.M12 * (double)tmp22 + (double)value.M13 * (double)tmp23) * tmp11;\n\n            result.M11 = m11;\n            result.M12 = m12;\n            result.M13 = m13;\n            result.M14 = m14;\n            result.M21 = m21;\n            result.M22 = m22;\n            result.M23 = m23;\n            result.M24 = m24;\n            result.M31 = m31;\n            result.M32 = m32;\n            result.M33 = m33;\n            result.M34 = m34;\n            result.M41 = m41;\n            result.M42 = m42;\n            result.M43 = m43;\n            result.M44 = m44;\n\n\n            /*\t\t\t\n            \n            ///\n            // Use Laplace expansion theorem to calculate the inverse of a 4x4 matrix\n            // \n            // 1. Calculate the 2x2 determinants needed the 4x4 determinant based on the 2x2 determinants \n            // 3. Create the adjugate matrix, which satisfies: A * adj(A) = det(A) * I\n            // 4. Divide adjugate matrix with the determinant to find the inverse\n            \n            float det1, det2, det3, det4, det5, det6, det7, det8, det9, det10, det11, det12;\n            float detMatrix;\n            FindDeterminants(ref matrix, out detMatrix, out det1, out det2, out det3, out det4, out det5, out det6, \n                             out det7, out det8, out det9, out det10, out det11, out det12);\n            \n            float invDetMatrix = 1f / detMatrix;\n            \n            Matrix ret; // Allow for matrix and result to point to the same structure\n            \n            ret.M11 = (matrix.M22*det12 - matrix.M23*det11 + matrix.M24*det10) * invDetMatrix;\n            ret.M12 = (-matrix.M12*det12 + matrix.M13*det11 - matrix.M14*det10) * invDetMatrix;\n            ret.M13 = (matrix.M42*det6 - matrix.M43*det5 + matrix.M44*det4) * invDetMatrix;\n            ret.M14 = (-matrix.M32*det6 + matrix.M33*det5 - matrix.M34*det4) * invDetMatrix;\n            ret.M21 = (-matrix.M21*det12 + matrix.M23*det9 - matrix.M24*det8) * invDetMatrix;\n            ret.M22 = (matrix.M11*det12 - matrix.M13*det9 + matrix.M14*det8) * invDetMatrix;\n            ret.M23 = (-matrix.M41*det6 + matrix.M43*det3 - matrix.M44*det2) * invDetMatrix;\n            ret.M24 = (matrix.M31*det6 - matrix.M33*det3 + matrix.M34*det2) * invDetMatrix;\n            ret.M31 = (matrix.M21*det11 - matrix.M22*det9 + matrix.M24*det7) * invDetMatrix;\n            ret.M32 = (-matrix.M11*det11 + matrix.M12*det9 - matrix.M14*det7) * invDetMatrix;\n            ret.M33 = (matrix.M41*det5 - matrix.M42*det3 + matrix.M44*det1) * invDetMatrix;\n            ret.M34 = (-matrix.M31*det5 + matrix.M32*det3 - matrix.M34*det1) * invDetMatrix;\n            ret.M41 = (-matrix.M21*det10 + matrix.M22*det8 - matrix.M23*det7) * invDetMatrix;\n            ret.M42 = (matrix.M11*det10 - matrix.M12*det8 + matrix.M13*det7) * invDetMatrix;\n            ret.M43 = (-matrix.M41*det4 + matrix.M42*det2 - matrix.M43*det1) * invDetMatrix;\n            ret.M44 = (matrix.M31*det4 - matrix.M32*det2 + matrix.M33*det1) * invDetMatrix;\n            \n            result = ret;\n            */\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that contains linear interpolation of the values in specified matrixes.\n        /// </summary>\n        /// <param name=\"start\">The first <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"end\">The second <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <returns>>The result of linear interpolation of the specified matrixes.</returns>\n        public static Matrix Lerp(Matrix start, Matrix end, float amount)\n        {\n            start.M11 = start.M11 + ((end.M11 - start.M11) * amount);\n            start.M12 = start.M12 + ((end.M12 - start.M12) * amount);\n            start.M13 = start.M13 + ((end.M13 - start.M13) * amount);\n            start.M14 = start.M14 + ((end.M14 - start.M14) * amount);\n            start.M21 = start.M21 + ((end.M21 - start.M21) * amount);\n            start.M22 = start.M22 + ((end.M22 - start.M22) * amount);\n            start.M23 = start.M23 + ((end.M23 - start.M23) * amount);\n            start.M24 = start.M24 + ((end.M24 - start.M24) * amount);\n            start.M31 = start.M31 + ((end.M31 - start.M31) * amount);\n            start.M32 = start.M32 + ((end.M32 - start.M32) * amount);\n            start.M33 = start.M33 + ((end.M33 - start.M33) * amount);\n            start.M34 = start.M34 + ((end.M34 - start.M34) * amount);\n            start.M41 = start.M41 + ((end.M41 - start.M41) * amount);\n            start.M42 = start.M42 + ((end.M42 - start.M42) * amount);\n            start.M43 = start.M43 + ((end.M43 - start.M43) * amount);\n            start.M44 = start.M44 + ((end.M44 - start.M44) * amount);\n            return start;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that contains linear interpolation of the values in specified matrixes.\n        /// </summary>\n        /// <param name=\"start\">The first <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"end\">The second <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <param name=\"result\">The result of linear interpolation of the specified matrixes as an output parameter.</param>\n        public static void Lerp(ref Matrix start, ref Matrix end, float amount, out Matrix result)\n        {\n            result.M11 = start.M11 + ((end.M11 - start.M11) * amount);\n            result.M12 = start.M12 + ((end.M12 - start.M12) * amount);\n            result.M13 = start.M13 + ((end.M13 - start.M13) * amount);\n            result.M14 = start.M14 + ((end.M14 - start.M14) * amount);\n            result.M21 = start.M21 + ((end.M21 - start.M21) * amount);\n            result.M22 = start.M22 + ((end.M22 - start.M22) * amount);\n            result.M23 = start.M23 + ((end.M23 - start.M23) * amount);\n            result.M24 = start.M24 + ((end.M24 - start.M24) * amount);\n            result.M31 = start.M31 + ((end.M31 - start.M31) * amount);\n            result.M32 = start.M32 + ((end.M32 - start.M32) * amount);\n            result.M33 = start.M33 + ((end.M33 - start.M33) * amount);\n            result.M34 = start.M34 + ((end.M34 - start.M34) * amount);\n            result.M41 = start.M41 + ((end.M41 - start.M41) * amount);\n            result.M42 = start.M42 + ((end.M42 - start.M42) * amount);\n            result.M43 = start.M43 + ((end.M43 - start.M43) * amount);\n            result.M44 = start.M44 + ((end.M44 - start.M44) * amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that contains a multiplication of two matrix.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Matrix\"/>.</param>\n        /// <returns>Result of the matrix multiplication.</returns>\n        public static Matrix Multiply(Matrix left, Matrix right)\n        {\n            float m11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41);\n            float m12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42);\n            float m13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43);\n            float m14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44);\n            float m21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41);\n            float m22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42);\n            float m23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43);\n            float m24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44);\n            float m31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41);\n            float m32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42);\n            float m33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43);\n            float m34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44);\n            float m41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41);\n            float m42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42);\n            float m43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43);\n            float m44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44);\n            left.M11 = m11;\n            left.M12 = m12;\n            left.M13 = m13;\n            left.M14 = m14;\n            left.M21 = m21;\n            left.M22 = m22;\n            left.M23 = m23;\n            left.M24 = m24;\n            left.M31 = m31;\n            left.M32 = m32;\n            left.M33 = m33;\n            left.M34 = m34;\n            left.M41 = m41;\n            left.M42 = m42;\n            left.M43 = m43;\n            left.M44 = m44;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that contains a multiplication of two matrix.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Result of the matrix multiplication as an output parameter.</param>\n        public static void Multiply(ref Matrix left, ref Matrix right, out Matrix result)\n        {\n            float m11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41);\n            float m12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42);\n            float m13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43);\n            float m14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44);\n            float m21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41);\n            float m22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42);\n            float m23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43);\n            float m24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44);\n            float m31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41);\n            float m32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42);\n            float m33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43);\n            float m34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44);\n            float m41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41);\n            float m42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42);\n            float m43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43);\n            float m44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44);\n            result.M11 = m11;\n            result.M12 = m12;\n            result.M13 = m13;\n            result.M14 = m14;\n            result.M21 = m21;\n            result.M22 = m22;\n            result.M23 = m23;\n            result.M24 = m24;\n            result.M31 = m31;\n            result.M32 = m32;\n            result.M33 = m33;\n            result.M34 = m34;\n            result.M41 = m41;\n            result.M42 = m42;\n            result.M43 = m43;\n            result.M44 = m44;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that contains a multiplication of <see cref=\"Matrix\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <returns>Result of the matrix multiplication with a scalar.</returns>\n        public static Matrix Multiply(Matrix left, float right)\n        {\n            left.M11 *= right;\n            left.M12 *= right;\n            left.M13 *= right;\n            left.M14 *= right;\n            left.M21 *= right;\n            left.M22 *= right;\n            left.M23 *= right;\n            left.M24 *= right;\n            left.M31 *= right;\n            left.M32 *= right;\n            left.M33 *= right;\n            left.M34 *= right;\n            left.M41 *= right;\n            left.M42 *= right;\n            left.M43 *= right;\n            left.M44 *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that contains a multiplication of <see cref=\"Matrix\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <param name=\"result\">Result of the matrix multiplication with a scalar as an output parameter.</param>\n        public static void Multiply(ref Matrix left, float right, out Matrix result)\n        {\n            result.M11 = left.M11 * right;\n            result.M12 = left.M12 * right;\n            result.M13 = left.M13 * right;\n            result.M14 = left.M14 * right;\n            result.M21 = left.M21 * right;\n            result.M22 = left.M22 * right;\n            result.M23 = left.M23 * right;\n            result.M24 = left.M24 * right;\n            result.M31 = left.M31 * right;\n            result.M32 = left.M32 * right;\n            result.M33 = left.M33 * right;\n            result.M34 = left.M34 * right;\n            result.M41 = left.M41 * right;\n            result.M42 = left.M42 * right;\n            result.M43 = left.M43 * right;\n            result.M44 = left.M44 * right;\n\n        }\n\n        /// <summary>\n        /// Copy the values of specified <see cref=\"Matrix\"/> to the float array.\n        /// </summary>\n        /// <param name=\"matrix\">The source <see cref=\"Matrix\"/>.</param>\n        /// <returns>The array which matrix values will be stored.</returns>\n        /// <remarks>\n        /// Required for OpenGL 2.0 projection matrix stuff.\n        /// </remarks>\n        public static float[] ToFloatArray(Matrix matrix)\n        {\n            float[] matarray = {\n                                    matrix.M11, matrix.M12, matrix.M13, matrix.M14,\n                                    matrix.M21, matrix.M22, matrix.M23, matrix.M24,\n                                    matrix.M31, matrix.M32, matrix.M33, matrix.M34,\n                                    matrix.M41, matrix.M42, matrix.M43, matrix.M44\n                                };\n            return matarray;\n        }\n\n        /// <summary>\n        /// Returns a matrix with the all values negated.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Matrix\"/>.</param>\n        /// <returns>Result of the matrix negation.</returns>\n        public static Matrix Negate(Matrix value)\n        {\n            value.M11 = -value.M11;\n            value.M12 = -value.M12;\n            value.M13 = -value.M13;\n            value.M14 = -value.M14;\n            value.M21 = -value.M21;\n            value.M22 = -value.M22;\n            value.M23 = -value.M23;\n            value.M24 = -value.M24;\n            value.M31 = -value.M31;\n            value.M32 = -value.M32;\n            value.M33 = -value.M33;\n            value.M34 = -value.M34;\n            value.M41 = -value.M41;\n            value.M42 = -value.M42;\n            value.M43 = -value.M43;\n            value.M44 = -value.M44;\n            return value;\n        }\n\n        /// <summary>\n        /// Returns a matrix with the all values negated.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Result of the matrix negation as an output parameter.</param>\n        public static void Negate(ref Matrix value, out Matrix result)\n        {\n            result.M11 = -value.M11;\n            result.M12 = -value.M12;\n            result.M13 = -value.M13;\n            result.M14 = -value.M14;\n            result.M21 = -value.M21;\n            result.M22 = -value.M22;\n            result.M23 = -value.M23;\n            result.M24 = -value.M24;\n            result.M31 = -value.M31;\n            result.M32 = -value.M32;\n            result.M33 = -value.M33;\n            result.M34 = -value.M34;\n            result.M41 = -value.M41;\n            result.M42 = -value.M42;\n            result.M43 = -value.M43;\n            result.M44 = -value.M44;\n        }\n\n        /// <summary>\n        /// Adds two matrixes.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/> on the left of the add sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Matrix\"/> on the right of the add sign.</param>\n        /// <returns>Sum of the matrixes.</returns>\n        public static Matrix operator +(Matrix left, Matrix right)\n        {\n            left.M11 = left.M11 + right.M11;\n            left.M12 = left.M12 + right.M12;\n            left.M13 = left.M13 + right.M13;\n            left.M14 = left.M14 + right.M14;\n            left.M21 = left.M21 + right.M21;\n            left.M22 = left.M22 + right.M22;\n            left.M23 = left.M23 + right.M23;\n            left.M24 = left.M24 + right.M24;\n            left.M31 = left.M31 + right.M31;\n            left.M32 = left.M32 + right.M32;\n            left.M33 = left.M33 + right.M33;\n            left.M34 = left.M34 + right.M34;\n            left.M41 = left.M41 + right.M41;\n            left.M42 = left.M42 + right.M42;\n            left.M43 = left.M43 + right.M43;\n            left.M44 = left.M44 + right.M44;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the elements of a <see cref=\"Matrix\"/> by the elements of another <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Matrix\"/> on the right of the div sign.</param>\n        /// <returns>The result of dividing the matrixes.</returns>\n        public static Matrix operator /(Matrix left, Matrix right)\n        {\n            left.M11 = left.M11 / right.M11;\n            left.M12 = left.M12 / right.M12;\n            left.M13 = left.M13 / right.M13;\n            left.M14 = left.M14 / right.M14;\n            left.M21 = left.M21 / right.M21;\n            left.M22 = left.M22 / right.M22;\n            left.M23 = left.M23 / right.M23;\n            left.M24 = left.M24 / right.M24;\n            left.M31 = left.M31 / right.M31;\n            left.M32 = left.M32 / right.M32;\n            left.M33 = left.M33 / right.M33;\n            left.M34 = left.M34 / right.M34;\n            left.M41 = left.M41 / right.M41;\n            left.M42 = left.M42 / right.M42;\n            left.M43 = left.M43 / right.M43;\n            left.M44 = left.M44 / right.M44;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the elements of a <see cref=\"Matrix\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor scalar on the right of the div sign.</param>\n        /// <returns>The result of dividing a matrix by a scalar.</returns>\n        public static Matrix operator /(Matrix left, float right)\n        {\n            float factor = 1f / right;\n            left.M11 = left.M11 * factor;\n            left.M12 = left.M12 * factor;\n            left.M13 = left.M13 * factor;\n            left.M14 = left.M14 * factor;\n            left.M21 = left.M21 * factor;\n            left.M22 = left.M22 * factor;\n            left.M23 = left.M23 * factor;\n            left.M24 = left.M24 * factor;\n            left.M31 = left.M31 * factor;\n            left.M32 = left.M32 * factor;\n            left.M33 = left.M33 * factor;\n            left.M34 = left.M34 * factor;\n            left.M41 = left.M41 * factor;\n            left.M42 = left.M42 * factor;\n            left.M43 = left.M43 * factor;\n            left.M44 = left.M44 * factor;\n            return left;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Matrix\"/> instances are equal without any tolerance.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/> on the left of the equal sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Matrix\"/> on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Matrix left, Matrix right)\n        {\n            return (\n                left.M11 == right.M11 &&\n                left.M12 == right.M12 &&\n                left.M13 == right.M13 &&\n                left.M14 == right.M14 &&\n                left.M21 == right.M21 &&\n                left.M22 == right.M22 &&\n                left.M23 == right.M23 &&\n                left.M24 == right.M24 &&\n                left.M31 == right.M31 &&\n                left.M32 == right.M32 &&\n                left.M33 == right.M33 &&\n                left.M34 == right.M34 &&\n                left.M41 == right.M41 &&\n                left.M42 == right.M42 &&\n                left.M43 == right.M43 &&\n                left.M44 == right.M44\n                );\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Matrix\"/> instances are not equal without any tolerance.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/> on the left of the not equal sign.</param>\n        /// <param name=\"matrix2\">Source <see cref=\"Matrix\"/> on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\n        public static bool operator !=(Matrix left, Matrix matrix2)\n        {\n            return (\n                left.M11 != matrix2.M11 ||\n                left.M12 != matrix2.M12 ||\n                left.M13 != matrix2.M13 ||\n                left.M14 != matrix2.M14 ||\n                left.M21 != matrix2.M21 ||\n                left.M22 != matrix2.M22 ||\n                left.M23 != matrix2.M23 ||\n                left.M24 != matrix2.M24 ||\n                left.M31 != matrix2.M31 ||\n                left.M32 != matrix2.M32 ||\n                left.M33 != matrix2.M33 ||\n                left.M34 != matrix2.M34 ||\n                left.M41 != matrix2.M41 ||\n                left.M42 != matrix2.M42 ||\n                left.M43 != matrix2.M43 ||\n                left.M44 != matrix2.M44\n                );\n        }\n\n        /// <summary>\n        /// Multiplies two matrixes.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Matrix\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the matrix multiplication.</returns>\n        /// <remarks>\n        /// Using matrix multiplication algorithm - see http://en.wikipedia.org/wiki/Matrix_multiplication.\n        /// </remarks>\n        public static Matrix operator *(Matrix left, Matrix right)\n        {\n            float m11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41);\n            float m12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42);\n            float m13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43);\n            float m14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44);\n            float m21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41);\n            float m22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42);\n            float m23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43);\n            float m24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44);\n            float m31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41);\n            float m32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42);\n            float m33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43);\n            float m34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44);\n            float m41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41);\n            float m42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42);\n            float m43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43);\n            float m44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44);\n            left.M11 = m11;\n            left.M12 = m12;\n            left.M13 = m13;\n            left.M14 = m14;\n            left.M21 = m21;\n            left.M22 = m22;\n            left.M23 = m23;\n            left.M24 = m24;\n            left.M31 = m31;\n            left.M32 = m32;\n            left.M33 = m33;\n            left.M34 = m34;\n            left.M41 = m41;\n            left.M42 = m42;\n            left.M43 = m43;\n            left.M44 = m44;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the elements of matrix by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Scalar value on the right of the mul sign.</param>\n        /// <returns>Result of the matrix multiplication with a scalar.</returns>\n        public static Matrix operator *(Matrix left, float right)\n        {\n            left.M11 = left.M11 * right;\n            left.M12 = left.M12 * right;\n            left.M13 = left.M13 * right;\n            left.M14 = left.M14 * right;\n            left.M21 = left.M21 * right;\n            left.M22 = left.M22 * right;\n            left.M23 = left.M23 * right;\n            left.M24 = left.M24 * right;\n            left.M31 = left.M31 * right;\n            left.M32 = left.M32 * right;\n            left.M33 = left.M33 * right;\n            left.M34 = left.M34 * right;\n            left.M41 = left.M41 * right;\n            left.M42 = left.M42 * right;\n            left.M43 = left.M43 * right;\n            left.M44 = left.M44 * right;\n            return left;\n        }\n\n        /// <summary>\n        /// Subtracts the values of one <see cref=\"Matrix\"/> from another <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Matrix\"/> on the left of the sub sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Matrix\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the matrix subtraction.</returns>\n        public static Matrix operator -(Matrix left, Matrix right)\n        {\n            left.M11 = left.M11 - right.M11;\n            left.M12 = left.M12 - right.M12;\n            left.M13 = left.M13 - right.M13;\n            left.M14 = left.M14 - right.M14;\n            left.M21 = left.M21 - right.M21;\n            left.M22 = left.M22 - right.M22;\n            left.M23 = left.M23 - right.M23;\n            left.M24 = left.M24 - right.M24;\n            left.M31 = left.M31 - right.M31;\n            left.M32 = left.M32 - right.M32;\n            left.M33 = left.M33 - right.M33;\n            left.M34 = left.M34 - right.M34;\n            left.M41 = left.M41 - right.M41;\n            left.M42 = left.M42 - right.M42;\n            left.M43 = left.M43 - right.M43;\n            left.M44 = left.M44 - right.M44;\n            return left;\n        }\n\n        /// <summary>\n        /// Inverts values in the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Matrix\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the inversion.</returns>\n        public static Matrix operator -(Matrix value)\n        {\n            value.M11 = -value.M11;\n            value.M12 = -value.M12;\n            value.M13 = -value.M13;\n            value.M14 = -value.M14;\n            value.M21 = -value.M21;\n            value.M22 = -value.M22;\n            value.M23 = -value.M23;\n            value.M24 = -value.M24;\n            value.M31 = -value.M31;\n            value.M32 = -value.M32;\n            value.M33 = -value.M33;\n            value.M34 = -value.M34;\n            value.M41 = -value.M41;\n            value.M42 = -value.M42;\n            value.M43 = -value.M43;\n            value.M44 = -value.M44;\n            return value;\n        }\n\n#if NET8_0_OR_GREATER\n        public static explicit operator Matrix(SysNumerics.Matrix4x4 value)\n        {\n            return Unsafe.BitCast<SysNumerics.Matrix4x4,Matrix>(value);\n        }\n\n        public static explicit operator SysNumerics.Matrix4x4(Matrix value)\n        {\n            return Unsafe.BitCast<Matrix, SysNumerics.Matrix4x4>(value);\n        }\n#endif\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that contains subtraction of one matrix from another.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">The second <see cref=\"Matrix\"/>.</param>\n        /// <returns>The result of the matrix subtraction.</returns>\n        public static Matrix Subtract(Matrix left, Matrix right)\n        {\n            left.M11 = left.M11 - right.M11;\n            left.M12 = left.M12 - right.M12;\n            left.M13 = left.M13 - right.M13;\n            left.M14 = left.M14 - right.M14;\n            left.M21 = left.M21 - right.M21;\n            left.M22 = left.M22 - right.M22;\n            left.M23 = left.M23 - right.M23;\n            left.M24 = left.M24 - right.M24;\n            left.M31 = left.M31 - right.M31;\n            left.M32 = left.M32 - right.M32;\n            left.M33 = left.M33 - right.M33;\n            left.M34 = left.M34 - right.M34;\n            left.M41 = left.M41 - right.M41;\n            left.M42 = left.M42 - right.M42;\n            left.M43 = left.M43 - right.M43;\n            left.M44 = left.M44 - right.M44;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Matrix\"/> that contains subtraction of one matrix from another.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"right\">The second <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">The result of the matrix subtraction as an output parameter.</param>\n        public static void Subtract(ref Matrix left, ref Matrix right, out Matrix result)\n        {\n            result.M11 = left.M11 - right.M11;\n            result.M12 = left.M12 - right.M12;\n            result.M13 = left.M13 - right.M13;\n            result.M14 = left.M14 - right.M14;\n            result.M21 = left.M21 - right.M21;\n            result.M22 = left.M22 - right.M22;\n            result.M23 = left.M23 - right.M23;\n            result.M24 = left.M24 - right.M24;\n            result.M31 = left.M31 - right.M31;\n            result.M32 = left.M32 - right.M32;\n            result.M33 = left.M33 - right.M33;\n            result.M34 = left.M34 - right.M34;\n            result.M41 = left.M41 - right.M41;\n            result.M42 = left.M42 - right.M42;\n            result.M43 = left.M43 - right.M43;\n            result.M44 = left.M44 - right.M44;\n        }\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                if (this == Identity)\n                {\n                    return \"Identity\";\n                }\n\n                return string.Concat(\n                     \"( \", this.M11.ToString(), \"  \", this.M12.ToString(), \"  \", this.M13.ToString(), \"  \", this.M14.ToString(), \" )  \\r\\n\",\n                     \"( \", this.M21.ToString(), \"  \", this.M22.ToString(), \"  \", this.M23.ToString(), \"  \", this.M24.ToString(), \" )  \\r\\n\",\n                     \"( \", this.M31.ToString(), \"  \", this.M32.ToString(), \"  \", this.M33.ToString(), \"  \", this.M34.ToString(), \" )  \\r\\n\",\n                     \"( \", this.M41.ToString(), \"  \", this.M42.ToString(), \"  \", this.M43.ToString(), \"  \", this.M44.ToString(), \" )\");\n            }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Matrix\"/> in the format:\n        /// {M11:[<see cref=\"M11\"/>] M12:[<see cref=\"M12\"/>] M13:[<see cref=\"M13\"/>] M14:[<see cref=\"M14\"/>]}\n        /// {M21:[<see cref=\"M21\"/>] M12:[<see cref=\"M22\"/>] M13:[<see cref=\"M23\"/>] M14:[<see cref=\"M24\"/>]}\n        /// {M31:[<see cref=\"M31\"/>] M32:[<see cref=\"M32\"/>] M33:[<see cref=\"M33\"/>] M34:[<see cref=\"M34\"/>]}\n        /// {M41:[<see cref=\"M41\"/>] M42:[<see cref=\"M42\"/>] M43:[<see cref=\"M43\"/>] M44:[<see cref=\"M44\"/>]}\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"Matrix\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{M11:\" + M11 + \" M12:\" + M12 + \" M13:\" + M13 + \" M14:\" + M14 + \"}\"\n                + \" {M21:\" + M21 + \" M22:\" + M22 + \" M23:\" + M23 + \" M24:\" + M24 + \"}\"\n                + \" {M31:\" + M31 + \" M32:\" + M32 + \" M33:\" + M33 + \" M34:\" + M34 + \"}\"\n                + \" {M41:\" + M41 + \" M42:\" + M42 + \" M43:\" + M43 + \" M44:\" + M44 + \"}\";\n        }\n\n        /// <summary>\n        /// Swap the matrix rows and columns.\n        /// </summary>\n        /// <param name=\"value\">The matrix for transposing operation.</param>\n        /// <returns>The new <see cref=\"Matrix\"/> which contains the transposing result.</returns>\n        public static Matrix Transpose(Matrix value)\n        {\n            Matrix result;\n            Transpose(ref value, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Swap the matrix rows and columns.\n        /// </summary>\n        /// <param name=\"value\">The matrix for transposing operation.</param>\n        /// <param name=\"result\">The new <see cref=\"Matrix\"/> which contains the transposing result as an output parameter.</param>\n        public static void Transpose(ref Matrix value, out Matrix result)\n        {\n            Matrix ret;\n            \n            ret.M11 = value.M11;\n            ret.M12 = value.M21;\n            ret.M13 = value.M31;\n            ret.M14 = value.M41;\n\n            ret.M21 = value.M12;\n            ret.M22 = value.M22;\n            ret.M23 = value.M32;\n            ret.M24 = value.M42;\n\n            ret.M31 = value.M13;\n            ret.M32 = value.M23;\n            ret.M33 = value.M33;\n            ret.M34 = value.M43;\n\n            ret.M41 = value.M14;\n            ret.M42 = value.M24;\n            ret.M43 = value.M34;\n            ret.M44 = value.M44;\n            \n            result = ret;\n        }\n        #endregion\n\n        #region Private Static Methods\n\n        /// <summary>\n        /// Helper method for using the Laplace expansion theorem using two rows expansions to calculate major and \n        /// minor determinants of a 4x4 matrix. This method is used for inverting a matrix.\n        /// </summary>\n        private static void FindDeterminants(ref Matrix value, out float major, \n                                             out float minor1, out float minor2, out float minor3, out float minor4, out float minor5, out float minor6,\n                                             out float minor7, out float minor8, out float minor9, out float minor10, out float minor11, out float minor12)\n        {\n                double det1 = (double)value.M11 * (double)value.M22 - (double)value.M12 * (double)value.M21;\n                double det2 = (double)value.M11 * (double)value.M23 - (double)value.M13 * (double)value.M21;\n                double det3 = (double)value.M11 * (double)value.M24 - (double)value.M14 * (double)value.M21;\n                double det4 = (double)value.M12 * (double)value.M23 - (double)value.M13 * (double)value.M22;\n                double det5 = (double)value.M12 * (double)value.M24 - (double)value.M14 * (double)value.M22;\n                double det6 = (double)value.M13 * (double)value.M24 - (double)value.M14 * (double)value.M23;\n                double det7 = (double)value.M31 * (double)value.M42 - (double)value.M32 * (double)value.M41;\n                double det8 = (double)value.M31 * (double)value.M43 - (double)value.M33 * (double)value.M41;\n                double det9 = (double)value.M31 * (double)value.M44 - (double)value.M34 * (double)value.M41;\n                double det10 = (double)value.M32 * (double)value.M43 - (double)value.M33 * (double)value.M42;\n                double det11 = (double)value.M32 * (double)value.M44 - (double)value.M34 * (double)value.M42;\n                double det12 = (double)value.M33 * (double)value.M44 - (double)value.M34 * (double)value.M43;\n                \n                major = (float)(det1*det12 - det2*det11 + det3*det10 + det4*det9 - det5*det8 + det6*det7);\n                minor1 = (float)det1;\n                minor2 = (float)det2;\n                minor3 = (float)det3;\n                minor4 = (float)det4;\n                minor5 = (float)det5;\n                minor6 = (float)det6;\n                minor7 = (float)det7;\n                minor8 = (float)det8;\n                minor9 = (float)det9;\n                minor10 = (float)det10;\n                minor11 = (float)det11;\n                minor12 = (float)det12;\n        }\n        \n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Plane.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\n#if NET8_0_OR_GREATER\nusing System.Runtime.CompilerServices;\nusing SysNumerics = System.Numerics;\n#endif\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// A plane in 3d space, represented by its normal away from the origin and its distance from the origin, D.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct Plane : IEquatable<Plane>\n    {\n        #region Public Fields\n\n        /// <summary>\n        /// The normal of the <see cref=\"Plane\"/>.\n        /// </summary>\n        [DataMember]\n        public Vector3 Normal;\n\n        /// <summary>\n        /// The distance of the <see cref=\"Plane\"/> to the origin.\n        /// </summary>\n        [DataMember]\n        public float D;\n\n        #endregion Public Fields\n\n\n        #region Constructors\n\n        /// <summary>\n        /// Create a <see cref=\"Plane\"/> with the first three components of the specified <see cref=\"Vector4\"/>\n        /// as the normal and the last component as the distance to the origin.\n        /// </summary>\n        /// <param name=\"value\">A vector holding the normal and distance to origin.</param>\n        public Plane(Vector4 value)\n        {\n            Normal.X = value.X;\n            Normal.Y = value.Y;\n            Normal.Z = value.Z;\n            D = value.W;\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"Plane\"/> with the specified normal and distance to the origin.\n        /// </summary>\n        /// <param name=\"normal\">The normal of the plane.</param>\n        /// <param name=\"d\">The distance to the origin.</param>\n        public Plane(Vector3 normal, float d)\n        {\n            Normal = normal;\n            D = d;\n        }\n\n        /// <summary>\n        /// Create the <see cref=\"Plane\"/> that contains the three specified points.\n        /// </summary>\n        /// <param name=\"a\">A point the created <see cref=\"Plane\"/> should contain.</param>\n        /// <param name=\"b\">A point the created <see cref=\"Plane\"/> should contain.</param>\n        /// <param name=\"c\">A point the created <see cref=\"Plane\"/> should contain.</param>\n        public Plane(Vector3 a, Vector3 b, Vector3 c)\n        {\n            Vector3 ab = b - a;\n            Vector3 ac = c - a;\n\n            Vector3.Cross(ref ab, ref ac, out Normal);\n            Normal.Normalize();\n            D = -(Vector3.Dot(Normal, a));\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"Plane\"/> with the first three values as the X, Y and Z\n        /// components of the normal and the last value as the distance to the origin.\n        /// </summary>\n        /// <param name=\"a\">The X component of the normal.</param>\n        /// <param name=\"b\">The Y component of the normal.</param>\n        /// <param name=\"c\">The Z component of the normal.</param>\n        /// <param name=\"d\">The distance to the origin.</param>\n        public Plane(float a, float b, float c, float d)\n        {\n            Normal.X = a;\n            Normal.Y = b;\n            Normal.Z = c;\n            D = d;\n        }\n\n        #endregion Constructors\n\n\n        #region Public Methods\n\n        /// <summary>\n        /// Get the dot product of a <see cref=\"Vector4\"/> with this <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Vector4\"/> to calculate the dot product with.</param>\n        /// <returns>The dot product of the specified <see cref=\"Vector4\"/> and this <see cref=\"Plane\"/>.</returns>\n        public float Dot(Vector4 value)\n        {\n            return this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z + this.D * value.W;\n        }\n\n        /// <summary>\n        /// Get the dot product of a <see cref=\"Vector4\"/> with this <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Vector4\"/> to calculate the dot product with.</param>\n        /// <param name=\"result\">\n        /// The dot product of the specified <see cref=\"Vector4\"/> and this <see cref=\"Plane\"/>.\n        /// </param>\n        public void Dot(ref Vector4 value, out float result)\n        {\n            result = this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z + this.D * value.W;\n        }\n\n        /// <summary>\n        /// Get the dot product of a <see cref=\"Vector3\"/> with\n        /// the <see cref=\"Normal\"/> vector of this <see cref=\"Plane\"/>\n        /// plus the <see cref=\"D\"/> value of this <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Vector3\"/> to calculate the dot product with.</param>\n        /// <returns>\n        /// The dot product of the specified <see cref=\"Vector3\"/> and the normal of this <see cref=\"Plane\"/>\n        /// plus the <see cref=\"D\"/> value of this <see cref=\"Plane\"/>.\n        /// </returns>\n        public float DotCoordinate(Vector3 value)\n        {\n            return this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z + this.D;\n        }\n\n        /// <summary>\n        /// Get the dot product of a <see cref=\"Vector3\"/> with\n        /// the <see cref=\"Normal\"/> vector of this <see cref=\"Plane\"/>\n        /// plus the <see cref=\"D\"/> value of this <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Vector3\"/> to calculate the dot product with.</param>\n        /// <param name=\"result\">\n        /// The dot product of the specified <see cref=\"Vector3\"/> and the normal of this <see cref=\"Plane\"/>\n        /// plus the <see cref=\"D\"/> value of this <see cref=\"Plane\"/>.\n        /// </param>\n        public void DotCoordinate(ref Vector3 value, out float result)\n        {\n            result = this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z + this.D;\n        }\n\n        /// <summary>\n        /// Get the dot product of a <see cref=\"Vector3\"/> with\n        /// the <see cref=\"Normal\"/> vector of this <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Vector3\"/> to calculate the dot product with.</param>\n        /// <returns>\n        /// The dot product of the specified <see cref=\"Vector3\"/> and the normal of this <see cref=\"Plane\"/>.\n        /// </returns>\n        public float DotNormal(Vector3 value)\n        {\n            return this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z;\n        }\n\n        /// <summary>\n        /// Get the dot product of a <see cref=\"Vector3\"/> with\n        /// the <see cref=\"Normal\"/> vector of this <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Vector3\"/> to calculate the dot product with.</param>\n        /// <param name=\"result\">\n        /// The dot product of the specified <see cref=\"Vector3\"/> and the normal of this <see cref=\"Plane\"/>.\n        /// </param>\n        public void DotNormal(ref Vector3 value, out float result)\n        {\n            result = this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z;\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"Plane\"/> that contains the specified point and has the specified <see cref=\"Normal\"/> vector.\n        /// </summary>\n        /// <param name=\"normal\">The normal of the plane.</param>\n        /// <param name=\"point\">A point the created <see cref=\"Plane\"/> should contain.</param>\n        public static Plane FromPoint(Vector3 normal, Vector3 point)\n        {\n            Plane result;\n            result.Normal = normal;\n            // project point on normal. //Opt: -Vector3.Dot(normal, point);\n            result.D = -(normal.X * point.X + normal.Y * point.Y + normal.Z * point.Z);\n            return result;\n        }\n\n        /// <summary>\n        /// Transforms a normalized plane by a matrix.\n        /// </summary>\n        /// <param name=\"plane\">The normalized plane to transform.</param>\n        /// <param name=\"matrix\">The transformation matrix.</param>\n        /// <returns>The transformed plane.</returns>\n        public static Plane Transform(Plane plane, Matrix matrix)\n        {\n            Plane result;\n            Transform(ref plane, ref matrix, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Transforms a normalized plane by a matrix.\n        /// </summary>\n        /// <param name=\"plane\">The normalized plane to transform.</param>\n        /// <param name=\"matrix\">The transformation matrix.</param>\n        /// <param name=\"result\">The transformed plane.</param>\n        public static void Transform(ref Plane plane, ref Matrix matrix, out Plane result)\n        {\n            // See \"Transforming Normals\" in http://www.glprogramming.com/red/appendixf.html\n            // for an explanation of how this works.\n\n            Matrix transformedMatrix;\n            Matrix.Invert(ref matrix, out transformedMatrix);\n            Matrix.Transpose(ref transformedMatrix, out transformedMatrix);\n\n            var vector = new Vector4(plane.Normal, plane.D);\n\n            Vector4 transformedVector;\n            Vector4.Transform(ref vector, ref transformedMatrix, out transformedVector);\n\n            result = new Plane(transformedVector);\n        }\n\n        /// <summary>\n        /// Transforms a normalized plane by a quaternion rotation.\n        /// </summary>\n        /// <param name=\"plane\">The normalized plane to transform.</param>\n        /// <param name=\"rotation\">The quaternion rotation.</param>\n        /// <returns>The transformed plane.</returns>\n        public static Plane Transform(Plane plane, Quaternion rotation)\n        {\n            Plane result;\n            Transform(ref plane, ref rotation, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Transforms a normalized plane by a quaternion rotation.\n        /// </summary>\n        /// <param name=\"plane\">The normalized plane to transform.</param>\n        /// <param name=\"rotation\">The quaternion rotation.</param>\n        /// <param name=\"result\">The transformed plane.</param>\n        public static void Transform(ref Plane plane, ref Quaternion rotation, out Plane result)\n        {\n            Vector3.Transform(ref plane.Normal, ref rotation, out result.Normal);\n            result.D = plane.D;\n        }\n\n        /// <summary>\n        /// Normalize the normal vector of this plane.\n        /// </summary>\n        public void Normalize()\n        {\n            float length = Normal.Length();\n            float factor =  1f / length;\n            Normal.X = Normal.X * factor;\n            Normal.Y = Normal.Y * factor;\n            Normal.Z = Normal.Z * factor;\n            D = D * factor;\n        }\n\n        /// <summary>\n        /// Get a normalized version of the specified plane.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Plane\"/> to normalize.</param>\n        /// <returns>A normalized version of the specified <see cref=\"Plane\"/>.</returns>\n        public static Plane Normalize(Plane value)\n        {\n            Plane result;\n            Normalize(ref value, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Get a normalized version of the specified plane.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Plane\"/> to normalize.</param>\n        /// <param name=\"result\">A normalized version of the specified <see cref=\"Plane\"/>.</param>\n        public static void Normalize(ref Plane value, out Plane result)\n        {\n            float length = value.Normal.Length();\n            float factor =  1f / length;\n            result.Normal.X = value.Normal.X * factor;\n            result.Normal.Y = value.Normal.Y * factor;\n            result.Normal.Z = value.Normal.Z * factor;\n            result.D = value.D * factor;\n        }\n\n#if NET8_0_OR_GREATER\n        public static explicit operator Plane(SysNumerics.Plane value)\n        {\n            return Unsafe.BitCast<SysNumerics.Plane, Plane>(value);\n        }\n\n        public static explicit operator SysNumerics.Plane(Plane value)\n        {\n            return Unsafe.BitCast<Plane, SysNumerics.Plane>(value);\n        }\n#endif\n\n        /// <summary>\n        /// Check if two planes are not equal.\n        /// </summary>\n        /// <param name=\"left\">A <see cref=\"Plane\"/> to check for inequality.</param>\n        /// <param name=\"right\">A <see cref=\"Plane\"/> to check for inequality.</param>\n        /// <returns><code>true</code> if the two planes are not equal, <code>false</code> if they are.</returns>\n        public static bool operator !=(Plane left, Plane right)\n        {\n            return !left.Equals(right);\n        }\n\n        /// <summary>\n        /// Check if two planes are equal.\n        /// </summary>\n        /// <param name=\"left\">A <see cref=\"Plane\"/> to check for equality.</param>\n        /// <param name=\"right\">A <see cref=\"Plane\"/> to check for equality.</param>\n        /// <returns><code>true</code> if the two planes are equal, <code>false</code> if they are not.</returns>\n        public static bool operator ==(Plane left, Plane right)\n        {\n            return left.Equals(right);\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> is equal to another <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"other\">An <see cref=\"Object\"/> to check for equality with this <see cref=\"Plane\"/>.</param>\n        /// <returns>\n        /// <code>true</code> if the specified <see cref=\"object\"/> is equal to this <see cref=\"Plane\"/>,\n        /// <code>false</code> if it is not.\n        /// </returns>\n        public override bool Equals(object other)\n        {\n            return (other is Plane) ? this.Equals((Plane)other) : false;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> is equal to another <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"other\">A <see cref=\"Plane\"/> to check for equality with this <see cref=\"Plane\"/>.</param>\n        /// <returns>\n        /// <code>true</code> if the specified <see cref=\"Plane\"/> is equal to this one,\n        /// <code>false</code> if it is not.\n        /// </returns>\n        public bool Equals(Plane other)\n        {\n            return ((Normal == other.Normal) && (D == other.D));\n        }\n\n        /// <summary>\n        /// Get a hash code for this <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <returns>A hash code for this <see cref=\"Plane\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return Normal.GetHashCode() ^ D.GetHashCode();\n        }\n\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> intersects a <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The <see cref=\"BoundingBox\"/> to test for intersection.</param>\n        /// <returns>\n        /// The type of intersection of this <see cref=\"Plane\"/> with the specified <see cref=\"BoundingBox\"/>.\n        /// </returns>\n        public PlaneIntersectionType Intersects(BoundingBox box)\n        {\n            PlaneIntersectionType result;\n            IntersectsHelper.BoundingBoxIntersectsPlane(ref box, ref this, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> intersects a <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The <see cref=\"BoundingBox\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        /// The type of intersection of this <see cref=\"Plane\"/> with the specified <see cref=\"BoundingBox\"/>.\n        /// </param>\n        public void Intersects(ref BoundingBox box, out PlaneIntersectionType result)\n        {\n            IntersectsHelper.BoundingBoxIntersectsPlane(ref box, ref this, out result);\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> intersects a <see cref=\"BoundingFrustum\"/>.\n        /// </summary>\n        /// <param name=\"frustum\">The <see cref=\"BoundingFrustum\"/> to test for intersection.</param>\n        /// <returns>\n        /// The type of intersection of this <see cref=\"Plane\"/> with the specified <see cref=\"BoundingFrustum\"/>.\n        /// </returns>\n        public PlaneIntersectionType Intersects(BoundingFrustum frustum)\n        {\n            IntersectsHelper.BoundingFrustumIntersectsPlane(frustum, ref this, out PlaneIntersectionType result);\n            return result;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> intersects a <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingSphere\"/> to test for intersection.</param>\n        /// <returns>\n        /// The type of intersection of this <see cref=\"Plane\"/> with the specified <see cref=\"BoundingSphere\"/>.\n        /// </returns>\n        public PlaneIntersectionType Intersects(BoundingSphere sphere)\n        {\n            PlaneIntersectionType result;\n            IntersectsHelper.BoundingSphereIntersectsPlane(ref sphere, ref this, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> intersects a <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingSphere\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        /// The type of intersection of this <see cref=\"Plane\"/> with the specified <see cref=\"BoundingSphere\"/>.\n        /// </param>\n        public void Intersects(ref BoundingSphere sphere, out PlaneIntersectionType result)\n        {\n            IntersectsHelper.BoundingSphereIntersectsPlane(ref sphere, ref this, out result);\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> intersects a <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <param name=\"ray\">The <see cref=\"Ray\"/> to test for intersection.</param>\n        /// <returns>\n        /// The distance along the ray of the intersection or <code>null</code> if the\n        /// <see cref=\"Ray\"/> does not intersect this <see cref=\"Plane\"/>.\n        /// </returns>\n        public float? Intersects(Ray ray)\n        {\n            float? result;\n            IntersectsHelper.PlaneIntersectsRay(ref this, ref ray, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Plane\"/> intersects a <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <param name=\"ray\">The <see cref=\"Ray\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        /// The distance along the ray of the intersection or <code>null</code> if the\n        /// <see cref=\"Ray\"/> does not intersect this <see cref=\"Plane\"/>.\n        /// </param>\n        public void Intersects(ref Ray ray, out float? result)\n        {\n            IntersectsHelper.PlaneIntersectsRay(ref this, ref ray, out result);\n        }\n\n        internal PlaneIntersectionType Intersects(ref Vector3 point)\n        {\n            float distance;\n            DotCoordinate(ref point, out distance);\n\n            if (distance > 0)\n                return PlaneIntersectionType.Front;\n\n            if (distance < 0)\n                return PlaneIntersectionType.Back;\n\n            return PlaneIntersectionType.Intersecting;\n        }\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    this.Normal.DebugDisplayString, \"  \",\n                    this.D.ToString()\n                    );\n            }\n        }\n\n        /// <summary>\n        /// Get a <see cref=\"String\"/> representation of this <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"Plane\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{Normal:\" + Normal + \" D:\" + D + \"}\";\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"normal\"></param>\n        /// <param name=\"d\"></param>\n        public void Deconstruct(out Vector3 normal, out float d)\n        {\n            normal = Normal;\n            d = D;\n        }\n\n        #endregion\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework/PlaneIntersectionType.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Defines the intersection between a <see cref=\"Plane\"/> and a bounding volume.\n    /// </summary>\n    public enum PlaneIntersectionType\n    {\n        /// <summary>\n        /// There is no intersection, the bounding volume is in the negative half space of the plane.\n        /// </summary>\n        Front,\n        /// <summary>\n        /// There is no intersection, the bounding volume is in the positive half space of the plane.\n        /// </summary>\n        Back,\n        /// <summary>\n        /// The plane is intersected.\n        /// </summary>\n        Intersecting\n    }\n}"
  },
  {
    "path": "src/Xna.Framework/PlayerIndex.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework\n{   \n    /// <summary>\n    /// Defines the index of player for various MonoGame components.\n    /// </summary>\n    public enum PlayerIndex\n    {\n        /// <summary>\n        /// The first player index.\n        /// </summary>\n        One = 0,\n        /// <summary>\n        /// The second player index.\n        /// </summary>\n        Two = 1,\n        /// <summary>\n        /// The third player index.\n        /// </summary>\n        Three = 2,\n        /// <summary>\n        /// The fourth player index.\n        /// </summary>\n        Four = 3\n    }\n}"
  },
  {
    "path": "src/Xna.Framework/Point.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Describes a 2D-point.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct Point : IEquatable<Point>\n    {\n        #region Private Fields\n\n        private static readonly Point zeroPoint = new Point();\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The x coordinate of this <see cref=\"Point\"/>.\n        /// </summary>\n        [DataMember]\n        public int X;\n\n        /// <summary>\n        /// The y coordinate of this <see cref=\"Point\"/>.\n        /// </summary>\n        [DataMember]\n        public int Y;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// Returns a <see cref=\"Point\"/> with coordinates 0, 0.\n        /// </summary>\n        public static Point Zero\n        {\n            get { return zeroPoint; }\n        }\n\n        #endregion\n\n        #region Internal Properties\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    this.X.ToString(), \"  \",\n                    this.Y.ToString()\n                );\n            }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Constructs a point with X and Y from two values.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate in 2d-space.</param>\n        /// <param name=\"y\">The y coordinate in 2d-space.</param>\n        public Point(int x, int y)\n        {\n            this.X = x;\n            this.Y = y;\n        }\n\n        /// <summary>\n        /// Constructs a point with X and Y set to the same value.\n        /// </summary>\n        /// <param name=\"value\">The x and y coordinates in 2d-space.</param>\n        public Point(int value)\n        {\n            this.X = value;\n            this.Y = value;\n        }\n\n        #endregion\n\n        #region Operators\n\n        /// <summary>\n        /// Adds two points.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Point\"/> on the left of the add sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Point\"/> on the right of the add sign.</param>\n        /// <returns>Sum of the points.</returns>\n        public static Point operator +(Point left, Point right)\n        {\n            return new Point(left.X + right.X, left.Y + right.Y);\n        }\n\n        /// <summary>\n        /// Subtracts a <see cref=\"Point\"/> from a <see cref=\"Point\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Point\"/> on the left of the sub sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Point\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the subtraction.</returns>\n        public static Point operator -(Point left, Point right)\n        {\n            return new Point(left.X - right.X, left.Y - right.Y);\n        }\n\n        /// <summary>\n        /// Multiplies the components of two points by each other.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Point\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Point\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the multiplication.</returns>\n        public static Point operator *(Point left, Point right)\n        {\n            return new Point(left.X * right.X, left.Y * right.Y);\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Point\"/> by the components of another <see cref=\"Point\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Point\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Point\"/> on the right of the div sign.</param>\n        /// <returns>The result of dividing the points.</returns>\n        public static Point operator /(Point left, Point right)\n        {\n            return new Point(left.X / right.X, left.Y / right.Y);\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Point\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Point\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Point\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Point left, Point right)\n        {\n            return left.Equals(right);\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Point\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Point\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Point\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\t\n        public static bool operator !=(Point left, Point right)\n        {\n            return !left.Equals(right);\n        }\n\n        #endregion\n\n        #region Public methods\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Point) && Equals((Point)obj);\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Point\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Point\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Point other)\n        {\n            return ((X == other.X) && (Y == other.Y));\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Point\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Point\"/>.</returns>\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hash = 17;\n                hash = hash * 23 + X.GetHashCode();\n                hash = hash * 23 + Y.GetHashCode();\n                return hash;\n            }\n\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Point\"/> in the format:\n        /// {X:[<see cref=\"X\"/>] Y:[<see cref=\"Y\"/>]}\n        /// </summary>\n        /// <returns><see cref=\"String\"/> representation of this <see cref=\"Point\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{X:\" + X + \" Y:\" + Y + \"}\";\n        }\n\n        /// <summary>\n        /// Gets a <see cref=\"Vector2\"/> representation for this object.\n        /// </summary>\n        /// <returns>A <see cref=\"Vector2\"/> representation for this object.</returns>\n        public Vector2 ToVector2()\n        {\n            return new Vector2(X, Y);\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Point\"/>.\n        /// </summary>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        public void Deconstruct(out int x, out int y)\n        {\n            x = X;\n            y = Y;\n        }\n\n        #endregion\n    }\n}\n\n\n"
  },
  {
    "path": "src/Xna.Framework/Pose2.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct Pose2 : IEquatable<Pose2>\n    {\n        #region Private Fields\n\n        private static readonly Pose2 _identity = new Pose2(Complex.Identity, Vector2.Zero);\n\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The orientation of this <see cref=\"Pose2\"/>.\n        /// </summary>\n        [DataMember]\n        public Complex Orientation;\n\n        /// <summary>\n        /// The translation part of this <see cref=\"Pose2\"/>.\n        /// </summary>\n        [DataMember]\n        public Vector2 Translation;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// Returns the identity <see cref=\"Pose2\"/> .\n        /// </summary>\n        public static Pose2 Identity { get { return _identity; } }\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                if (this == Pose2.Identity)\n                    return \"Identity\";\n\n                return String.Format(\"{{Orientation: {0} Translation: {1} }}\",\n                    Orientation, Translation);\n            }\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Constructs a 2D Pose with orientation and translation.\n        /// </summary>\n        /// <param name=\"orientation\">The orientation of this <see cref=\"Pose2\"/>.</param>\n        /// <param name=\"translation\"> The translation of this <see cref=\"Pose2\"/>.</param>\n        public Pose2(Complex orientation, Vector2 translation)\n        {\n            this.Orientation = orientation;\n            this.Translation = translation;\n        }\n\n        /// <summary>\n        /// Returns the inverse pose, which represents the opposite transformation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Pose2\"/>.</param>\n        /// <returns>The inverse pose.</returns>\n        public static Pose2 Inverse(Pose2 value)\n        {\n            Pose2 result;\n            result.Orientation = Complex.Conjugate(value.Orientation);\n            result.Translation = Vector2.Transform(-value.Translation, result.Orientation);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Pose2\"/> that contains a multiplication of two poses.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Pose2\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Pose2\"/>.</param>\n        /// <returns>The result of the pose multiplication.</returns>\n        public static Pose2 Multiply(Pose2 left, Pose2 right)\n        {\n            Pose2 result;\n            result.Orientation = Complex.Multiply(left.Orientation, right.Orientation);\n            result.Translation = Vector2.Transform(left.Translation, right);\n            return result;\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Pose2\"/>.\n        /// </summary>\n        /// <param name=\"orientation\">The orientation of this <see cref=\"Pose2\" />.</param>\n        /// <param name=\"translation\">The translation of this <see cref=\"Pose2\"/>.</param>\n        public void Deconstruct(out Complex orientation, out Vector2 translation)\n        {\n            orientation = this.Orientation;\n            translation = this.Translation;\n        }\n\n        #region Operators\n\n        /// <summary>\n        /// Multiplies two poses.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Pose2\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Pose2\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the poses multiplication.</returns>\n        public static Pose2 operator *(Pose2 left, Pose2 right)\n        {\n            Pose2 result;\n            result = Pose2.Multiply(left, right);\n            return result;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Pose2\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Pose2\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Pose2\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Pose2 left, Pose2 right)\n        {\n            return left.Orientation == right.Orientation && left.Translation == right.Translation;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Pose2\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Pose2\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Pose2\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\n        public static bool operator !=(Pose2 left, Pose2 right)\n        {\n            return left.Orientation != right.Orientation || left.Translation != right.Translation;\n        }\n\n        #endregion\n\n\n        #region IEquatable<Pose2>\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is Pose2)\n                return Equals((Pose2)obj);\n            return false;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Pose2\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Pose2\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Pose2 other)\n        {\n            return Orientation == other.Orientation\n                && Translation == other.Translation;\n        }\n\n        #endregion\n\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Pose2\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Pose2\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return Orientation.GetHashCode() + Translation.GetHashCode();\n        }\n\n        /// <inheritdoc/>\n        public override string ToString()\n        {\n            return String.Format(\"{{Orientation: {0}, Translation: {1} }}\", Orientation, Translation);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Pose3.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    [StructLayout(LayoutKind.Sequential, Size = 32)]\n    public struct Pose3 : IEquatable<Pose3>\n    {\n        #region Private Fields\n\n        private static readonly Pose3 _identity = new Pose3(Quaternion.Identity, Vector3.Zero);\n\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The orientation of this <see cref=\"Pose3\"/>.\n        /// </summary>\n        [DataMember]\n        public Quaternion Orientation;\n\n        /// <summary>\n        /// The translation part of this <see cref=\"Pose3\"/>.\n        /// </summary>\n        [DataMember]\n        public Vector3 Translation;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// Returns the identity <see cref=\"Pose3\"/> .\n        /// </summary>\n        public static Pose3 Identity { get { return _identity; } }\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                if (this == Pose3.Identity)\n                    return \"Identity\";\n\n                return String.Format(\"{{Orientation: {0} Translation: {1} }}\",\n                    Orientation, Translation);\n            }\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Constructs a 3D Pose with orientation and translation.\n        /// </summary>\n        /// <param name=\"orientation\">The orientation of this <see cref=\"Pose3\"/>.</param>\n        /// <param name=\"translation\"> The translation of this <see cref=\"Pose3\"/>.</param>\n        public Pose3(Quaternion orientation, Vector3 translation)\n        {\n            this.Orientation = orientation;\n            this.Translation = translation;\n        }\n\n        /// <summary>\n        /// Returns the inverse pose, which represents the opposite transformation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Pose3\"/>.</param>\n        /// <returns>The inverse pose.</returns>\n        public static Pose3 Inverse(Pose3 value)\n        {\n            Pose3 result;\n            result.Orientation = Quaternion.Inverse(value.Orientation);\n            result.Translation = Vector3.Transform(-value.Translation, result.Orientation);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Pose3\"/> that contains a multiplication of two poses.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Pose3\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Pose3\"/>.</param>\n        /// <returns>The result of the pose multiplication.</returns>\n        public static Pose3 Multiply(Pose3 left, Pose3 right)\n        {\n            Pose3 result;\n            result.Orientation = Quaternion.Multiply(left.Orientation, right.Orientation);\n            result.Translation = Vector3.Transform(left.Translation, right);\n            return result;\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Pose3\"/>.\n        /// </summary>\n        /// <param name=\"orientation\">The orientation of this <see cref=\"Pose3\" />.</param>\n        /// <param name=\"translation\">The translation of this <see cref=\"Pose3\"/>.</param>\n        public void Deconstruct(out Quaternion orientation, out Vector3 translation)\n        {\n            orientation = this.Orientation;\n            translation = this.Translation;\n        }\n\n        #region Operators\n\n        /// <summary>\n        /// Multiplies two poses.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Pose3\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Pose3\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the poses multiplication.</returns>\n        public static Pose3 operator *(Pose3 left, Pose3 right)\n        {\n            Pose3 result;\n            result = Pose3.Multiply(left, right);\n            return result;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Pose3\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Pose3\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Pose3\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Pose3 left, Pose3 right)\n        {\n            return left.Orientation == right.Orientation && left.Translation == right.Translation;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Pose3\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Pose3\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Pose3\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\n        public static bool operator !=(Pose3 left, Pose3 right)\n        {\n            return left.Orientation != right.Orientation || left.Translation != right.Translation;\n        }\n\n        #endregion\n\n\n        #region IEquatable<Pose3>\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is Pose3)\n                return Equals((Pose3)obj);\n            return false;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Pose3\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Pose3\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Pose3 other)\n        {\n            return Orientation == other.Orientation\n                && Translation == other.Translation;\n        }\n\n        #endregion\n\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Pose3\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Pose3\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return Orientation.GetHashCode() + Translation.GetHashCode();\n        }\n\n        /// <inheritdoc/>\n        public override string ToString()\n        {\n            return String.Format(\"{{Orientation: {0}, Translation: {1} }}\", Orientation, Translation);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Properties/AssemblyInfo.cs",
    "content": "using System;\n\n[assembly:CLSCompliant(true)]\n\n"
  },
  {
    "path": "src/Xna.Framework/Quaternion.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\n#if NET8_0_OR_GREATER\nusing System.Runtime.CompilerServices;\nusing SysNumerics = System.Numerics;\n#endif\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// An efficient mathematical representation for three dimensional rotations.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct Quaternion : IEquatable<Quaternion>\n    {\n        #region Private Fields\n\n        private static readonly Quaternion _identity = new Quaternion(0, 0, 0, 1);\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The x coordinate of this <see cref=\"Quaternion\"/>.\n        /// </summary>\n        [DataMember]\n        public float X;\n\n        /// <summary>\n        /// The y coordinate of this <see cref=\"Quaternion\"/>.\n        /// </summary>\n        [DataMember]\n        public float Y;\n\n        /// <summary>\n        /// The z coordinate of this <see cref=\"Quaternion\"/>.\n        /// </summary>\n        [DataMember]\n        public float Z;\n\n        /// <summary>\n        /// The rotation component of this <see cref=\"Quaternion\"/>.\n        /// </summary>\n        [DataMember]\n        public float W;\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Constructs a quaternion with X, Y, Z and W from four values.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate in 3d-space.</param>\n        /// <param name=\"y\">The y coordinate in 3d-space.</param>\n        /// <param name=\"z\">The z coordinate in 3d-space.</param>\n        /// <param name=\"w\">The rotation component.</param>\n        public Quaternion(float x, float y, float z, float w)\n        {\n            this.X = x;\n            this.Y = y;\n            this.Z = z;\n            this.W = w;\n        }\n\n        /// <summary>\n        /// Constructs a quaternion with X, Y, Z from <see cref=\"Vector3\"/> and rotation component from a scalar.\n        /// </summary>\n        /// <param name=\"value\">The x, y, z coordinates in 3d-space.</param>\n        /// <param name=\"w\">The rotation component.</param>\n        public Quaternion(Vector3 value, float w)\n        {\n            this.X = value.X;\n            this.Y = value.Y;\n            this.Z = value.Z;\n            this.W = w;\n        }\n\n        /// <summary>\n        /// Constructs a quaternion from <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <param name=\"value\">The x, y, z coordinates in 3d-space and the rotation component.</param>\n        public Quaternion(Vector4 value)\n        {\n            this.X = value.X;\n            this.Y = value.Y;\n            this.Z = value.Z;\n            this.W = value.W;\n        }\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Returns a quaternion representing no rotation.\n        /// </summary>\n        public static Quaternion Identity\n        {\n            get{ return _identity; }\n        }\n\n        #endregion\n\n        #region Internal Properties\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                if (this == Quaternion._identity)\n                {\n                    return \"Identity\";\n                }\n\n                return string.Concat(\n                    this.X.ToString(), \" \",\n                    this.Y.ToString(), \" \",\n                    this.Z.ToString(), \" \",\n                    this.W.ToString()\n                );\n            }\n        }\n\n        #endregion\n\n        #region Public Methods\n\n        #region Add\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains the sum of two quaternions.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <returns>The result of the quaternion addition.</returns>\n        public static Quaternion Add(Quaternion left, Quaternion right)\n        {\n            Quaternion result;\n            result.X = left.X + right.X;\n            result.Y = left.Y + right.Y;\n            result.Z = left.Z + right.Z;\n            result.W = left.W + right.W;\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains the sum of two quaternions.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"result\">The result of the quaternion addition as an output parameter.</param>\n        public static void Add(ref Quaternion left, ref Quaternion right, out Quaternion result)\n        {\n            result.X = left.X + right.X;\n            result.Y = left.Y + right.Y;\n            result.Z = left.Z + right.Z;\n            result.W = left.W + right.W;\n        }\n\n        #endregion\n\n        #region Concatenate\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains concatenation between two quaternion.\n        /// </summary>\n        /// <param name=\"value1\">The first <see cref=\"Quaternion\"/> to concatenate.</param>\n        /// <param name=\"value2\">The second <see cref=\"Quaternion\"/> to concatenate.</param>\n        /// <returns>The result of rotation of <paramref name=\"value1\"/> followed by <paramref name=\"value2\"/> rotation.</returns>\n        public static Quaternion Concatenate(Quaternion value1, Quaternion value2)\n        {\n            Quaternion result;\n            result.X = (value2.X * value1.W) + (value1.X * value2.W) +((value2.Y * value1.Z) - (value2.Z * value1.Y));\n            result.Y = (value2.Y * value1.W) + (value1.Y * value2.W) +((value2.Z * value1.X) - (value2.X * value1.Z));\n            result.Z = (value2.Z * value1.W) + (value1.Z * value2.W) +((value2.X * value1.Y) - (value2.Y * value1.X));\n            result.W = (value2.W * value1.W) -((value2.X * value1.X) + (value2.Y * value1.Y) + (value2.Z * value1.Z));\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains concatenation between two quaternion.\n        /// </summary>\n        /// <param name=\"value1\">The first <see cref=\"Quaternion\"/> to concatenate.</param>\n        /// <param name=\"value2\">The second <see cref=\"Quaternion\"/> to concatenate.</param>\n        /// <param name=\"result\">The result of rotation of <paramref name=\"value1\"/> followed by <paramref name=\"value2\"/> rotation as an output parameter.</param>\n        public static void Concatenate(ref Quaternion value1, ref Quaternion value2, out Quaternion result)\n        {\n            float x = (value2.X * value1.W) + (value1.X * value2.W) +((value2.Y * value1.Z) - (value2.Z * value1.Y));\n            float y = (value2.Y * value1.W) + (value1.Y * value2.W) +((value2.Z * value1.X) - (value2.X * value1.Z));\n            float z = (value2.Z * value1.W) + (value1.Z * value2.W) +((value2.X * value1.Y) - (value2.Y * value1.X));\n            float w = (value2.W * value1.W) -((value2.X * value1.X) + (value2.Y * value1.Y) + (value2.Z * value1.Z));\n            result.X = x;\n            result.Y = y;\n            result.Z = z;\n            result.W = w;\n        }\n\n        #endregion\n\n        #region Conjugate\n\n        /// <summary>\n        /// Transforms this quaternion into its conjugated version.\n        /// </summary>\n        public void Conjugate()\n        {\n            X = -X;\n            Y = -Y;\n            Z = -Z;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains conjugated version of the specified quaternion.\n        /// </summary>\n        /// <param name=\"value\">The quaternion which values will be used to create the conjugated version.</param>\n        /// <returns>The conjugate version of the specified quaternion.</returns>\n        public static Quaternion Conjugate(Quaternion value)\n        {\n            return new Quaternion(-value.X,-value.Y,-value.Z,value.W);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains conjugated version of the specified quaternion.\n        /// </summary>\n        /// <param name=\"value\">The quaternion which values will be used to create the conjugated version.</param>\n        /// <param name=\"result\">The conjugated version of the specified quaternion as an output parameter.</param>\n        public static void Conjugate(ref Quaternion value, out Quaternion result)\n        {\n            result.X = -value.X;\n            result.Y = -value.Y;\n            result.Z = -value.Z;\n            result.W = value.W;\n        }\n\n        #endregion\n\n        #region CreateFromAxisAngle\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> from the specified axis and angle.\n        /// </summary>\n        /// <param name=\"axis\">The axis of rotation.</param>\n        /// <param name=\"angle\">The angle in radians.</param>\n        /// <returns>The new quaternion builded from axis and angle.</returns>\n        public static Quaternion CreateFromAxisAngle(Vector3 axis, float angle)\n        {\n            float half = angle * 0.5f;\n            float sin = (float)Math.Sin(half);\n            float cos = (float)Math.Cos(half);\n            return new Quaternion(axis.X * sin, axis.Y * sin, axis.Z * sin, cos);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> from the specified axis and angle.\n        /// </summary>\n        /// <param name=\"axis\">The axis of rotation.</param>\n        /// <param name=\"angle\">The angle in radians.</param>\n        /// <param name=\"result\">The new quaternion builded from axis and angle as an output parameter.</param>\n        public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Quaternion result)\n        {\n            float half = angle * 0.5f;\n            float sin = (float)Math.Sin(half);\n            float cos = (float)Math.Cos(half);\n            result.X = axis.X * sin;\n            result.Y = axis.Y * sin;\n            result.Z = axis.Z * sin;\n            result.W = cos;\n        }\n\n        #endregion\n\n        #region CreateFromRotationMatrix\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> from the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"matrix\">The rotation matrix.</param>\n        /// <returns>A quaternion composed from the rotation part of the matrix.</returns>\n        public static Quaternion CreateFromRotationMatrix(Matrix matrix)\n        {\n            Quaternion result;\n            float sqrt;\n            float half;\n            float scale = matrix.M11 + matrix.M22 + matrix.M33;\n\n            if (scale > 0.0f)\n            {\n                sqrt = (float)Math.Sqrt(scale + 1.0f);\n                result.W = sqrt * 0.5f;\n                sqrt = 0.5f / sqrt;\n\n                result.X = (matrix.M23 - matrix.M32) * sqrt;\n                result.Y = (matrix.M31 - matrix.M13) * sqrt;\n                result.Z = (matrix.M12 - matrix.M21) * sqrt;\n\n                return result;\n            }\n            if ((matrix.M11 >= matrix.M22) && (matrix.M11 >= matrix.M33))\n            {\n                sqrt = (float) Math.Sqrt(1.0f + matrix.M11 - matrix.M22 - matrix.M33);\n                half = 0.5f / sqrt;\n\n                result.X = 0.5f * sqrt;\n                result.Y = (matrix.M12 + matrix.M21) * half;\n                result.Z = (matrix.M13 + matrix.M31) * half;\n                result.W = (matrix.M23 - matrix.M32) * half;\n\n                return result;\n            }\n            if (matrix.M22 > matrix.M33)\n            {\n                sqrt = (float) Math.Sqrt(1.0f + matrix.M22 - matrix.M11 - matrix.M33);\n                half = 0.5f / sqrt;\n\n                result.X = (matrix.M21 + matrix.M12) * half;\n                result.Y = 0.5f * sqrt;\n                result.Z = (matrix.M32 + matrix.M23) * half;\n                result.W = (matrix.M31 - matrix.M13) * half;\n\n                return result;\n            }\n            sqrt = (float) Math.Sqrt(1.0f + matrix.M33 - matrix.M11 - matrix.M22);\n            half = 0.5f / sqrt;\n\n            result.X = (matrix.M31 + matrix.M13) * half;\n            result.Y = (matrix.M32 + matrix.M23) * half;\n            result.Z = 0.5f * sqrt;\n            result.W = (matrix.M12 - matrix.M21) * half;\n\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> from the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"matrix\">The rotation matrix.</param>\n        /// <param name=\"result\">A quaternion composed from the rotation part of the matrix as an output parameter.</param>\n        public static void CreateFromRotationMatrix(ref Matrix matrix, out Quaternion result)\n        {\n            float sqrt;\n            float half;\n            float scale = matrix.M11 + matrix.M22 + matrix.M33;\n\n            if (scale > 0.0f)\n            {\n                sqrt = (float)Math.Sqrt(scale + 1.0f);\n                result.W = sqrt * 0.5f;\n                sqrt = 0.5f / sqrt;\n\n                result.X = (matrix.M23 - matrix.M32) * sqrt;\n                result.Y = (matrix.M31 - matrix.M13) * sqrt;\n                result.Z = (matrix.M12 - matrix.M21) * sqrt;\n            }\n            else\n            if ((matrix.M11 >= matrix.M22) && (matrix.M11 >= matrix.M33))\n            {\n                sqrt = (float)Math.Sqrt(1.0f + matrix.M11 - matrix.M22 - matrix.M33);\n                half = 0.5f / sqrt;\n\n                result.X = 0.5f * sqrt;\n                result.Y = (matrix.M12 + matrix.M21) * half;\n                result.Z = (matrix.M13 + matrix.M31) * half;\n                result.W = (matrix.M23 - matrix.M32) * half;\n            }\n            else if (matrix.M22 > matrix.M33)\n            {\n                sqrt = (float) Math.Sqrt(1.0f + matrix.M22 - matrix.M11 - matrix.M33);\n                half = 0.5f/sqrt;\n\n                result.X = (matrix.M21 + matrix.M12)*half;\n                result.Y = 0.5f*sqrt;\n                result.Z = (matrix.M32 + matrix.M23)*half;\n                result.W = (matrix.M31 - matrix.M13)*half;\n            }\n            else\n            {\n                sqrt = (float)Math.Sqrt(1.0f + matrix.M33 - matrix.M11 - matrix.M22);\n                half = 0.5f / sqrt;\n\n                result.X = (matrix.M31 + matrix.M13) * half;\n                result.Y = (matrix.M32 + matrix.M23) * half;\n                result.Z = 0.5f * sqrt;\n                result.W = (matrix.M12 - matrix.M21) * half;\n            }\n        }\n\n        #endregion\n\n        #region CreateFromYawPitchRoll\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> from the specified yaw, pitch and roll angles.\n        /// </summary>\n        /// <param name=\"yaw\">Yaw around the y axis in radians.</param>\n        /// <param name=\"pitch\">Pitch around the x axis in radians.</param>\n        /// <param name=\"roll\">Roll around the z axis in radians.</param>\n        /// <returns>A new quaternion from the concatenated yaw, pitch, and roll angles.</returns>\n        public static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll)\n        {\n            float halfRoll = roll * 0.5f;\n            float halfPitch = pitch * 0.5f;\n            float halfYaw = yaw * 0.5f;\n\n            float sinRoll = (float)Math.Sin(halfRoll);\n            float cosRoll = (float)Math.Cos(halfRoll);\n            float sinPitch = (float)Math.Sin(halfPitch);\n            float cosPitch = (float)Math.Cos(halfPitch);\n            float sinYaw = (float)Math.Sin(halfYaw);\n            float cosYaw = (float)Math.Cos(halfYaw);\n\n            return new Quaternion((cosYaw * sinPitch * cosRoll) + (sinYaw * cosPitch * sinRoll),\n                                  (sinYaw * cosPitch * cosRoll) - (cosYaw * sinPitch * sinRoll),\n                                  (cosYaw * cosPitch * sinRoll) - (sinYaw * sinPitch * cosRoll),\n                                  (cosYaw * cosPitch * cosRoll) + (sinYaw * sinPitch * sinRoll));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> from the specified yaw, pitch and roll angles.\n        /// </summary>\n        /// <param name=\"yaw\">Yaw around the y axis in radians.</param>\n        /// <param name=\"pitch\">Pitch around the x axis in radians.</param>\n        /// <param name=\"roll\">Roll around the z axis in radians.</param>\n        /// <param name=\"result\">A new quaternion from the concatenated yaw, pitch, and roll angles as an output parameter.</param>\n        public static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Quaternion result)\n        {\n            float halfRoll = roll * 0.5f;\n            float halfPitch = pitch * 0.5f;\n            float halfYaw = yaw * 0.5f;\n\n            float sinRoll = (float)Math.Sin(halfRoll);\n            float cosRoll = (float)Math.Cos(halfRoll);\n            float sinPitch = (float)Math.Sin(halfPitch);\n            float cosPitch = (float)Math.Cos(halfPitch);\n            float sinYaw = (float)Math.Sin(halfYaw);\n            float cosYaw = (float)Math.Cos(halfYaw);\n\n            result.X = (cosYaw * sinPitch * cosRoll) + (sinYaw * cosPitch * sinRoll);\n            result.Y = (sinYaw * cosPitch * cosRoll) - (cosYaw * sinPitch * sinRoll);\n            result.Z = (cosYaw * cosPitch * sinRoll) - (sinYaw * sinPitch * cosRoll);\n            result.W = (cosYaw * cosPitch * cosRoll) + (sinYaw * sinPitch * sinRoll);\n        }\n\n        #endregion\n\n        #region Divide\n\n        /// <summary>\n        /// Divides a <see cref=\"Quaternion\"/> by the other <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Quaternion\"/>.</param>\n        /// <returns>The result of dividing the quaternions.</returns>\n        public static Quaternion Divide(Quaternion left, Quaternion right)\n        {\n            // Opt: right = Quaternion.Inverse(right);\n            float dot = right.X * right.X + right.Y * right.Y + right.Z * right.Z + right.W * right.W;\n            float factor = 1f / dot;\n            right.X = -right.X * factor;\n            right.Y = -right.Y * factor;\n            right.Z = -right.Z * factor;\n            right.W = right.W * factor;\n\n            float x2 = (left.Y * right.Z) - (left.Z * right.Y);\n            float y2 = (left.Z * right.X) - (left.X * right.Z);\n            float z2 = (left.X * right.Y) - (left.Y * right.X);\n            float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z);\n\n            Quaternion result;\n            result.X = (left.X * right.W) + (right.X * left.W) + x2;\n            result.Y = (left.Y * right.W) + (right.Y * left.W) + y2;\n            result.Z = (left.Z * right.W) + (right.Z * left.W) + z2;\n            result.W = (left.W * right.W) - w2;\n            return result;\n        }\n\n        /// <summary>\n        /// Divides a <see cref=\"Quaternion\"/> by the other <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"result\">The result of dividing the quaternions as an output parameter.</param>\n        public static void Divide(ref Quaternion left, ref Quaternion right, out Quaternion result)\n        {\n            // Opt: Quaternion invright = Quaternion.Inverse(right);\n            float dot = right.X * right.X + right.Y * right.Y + right.Z * right.Z + right.W * right.W;\n            float factor = 1f / dot;\n            float invrightX = -right.X * factor;\n            float invrightY = -right.Y * factor;\n            float invrightZ = -right.Z * factor;\n            float invrightW =  right.W * factor;\n\n            float x2 = (left.Y * invrightZ) - (left.Z * invrightY);\n            float y2 = (left.Z * invrightX) - (left.X * invrightZ);\n            float z2 = (left.X * invrightY) - (left.Y * invrightX);\n            float w2 = (left.X * invrightX) + (left.Y * invrightY) + (left.Z * invrightZ);\n\n            float x = (left.X * invrightW) + (invrightX * left.W) + x2;\n            float y = (left.Y * invrightW) + (invrightY * left.W) + y2;\n            float z = (left.Z * invrightW) + (invrightZ * left.W) + z2;\n            float w = (left.W * invrightW) - w2;\n            result.X = x;\n            result.Y = y;\n            result.Z = z;\n            result.W = w;\n        }\n\n        #endregion\n\n        #region Dot\n\n        /// <summary>\n        /// Returns a dot product of two quaternions.\n        /// </summary>\n        /// <param name=\"left\">The first quaternion.</param>\n        /// <param name=\"right\">The second quaternion.</param>\n        /// <returns>The dot product of two quaternions.</returns>\n        public static float Dot(Quaternion left, Quaternion right)\n        {\n            return (left.X * right.X + left.Y * right.Y + left.Z * right.Z + left.W * right.W);\n        }\n\n        /// <summary>\n        /// Returns a dot product of two quaternions.\n        /// </summary>\n        /// <param name=\"left\">The first quaternion.</param>\n        /// <param name=\"right\">The second quaternion.</param>\n        /// <param name=\"result\">The dot product of two quaternions as an output parameter.</param>\n        public static void Dot(ref Quaternion left, ref Quaternion right, out float result)\n        {\n            result = left.X * right.X + left.Y * right.Y + left.Z * right.Z + left.W * right.W;\n        }\n\n        #endregion\n\n        #region Equals\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is Quaternion)\n                return Equals((Quaternion)obj);\n            return false;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Quaternion\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Quaternion other)\n        {\n            return X == other.X &&\n                   Y == other.Y &&\n                   Z == other.Z &&\n                   W == other.W;\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Quaternion\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return X.GetHashCode() + Y.GetHashCode() + Z.GetHashCode() + W.GetHashCode();\n        }\n\n        #region Inverse\n\n        /// <summary>\n        /// Returns the inverse quaternion which represents the opposite rotation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <returns>The inverse quaternion.</returns>\n        public static Quaternion Inverse(Quaternion value)\n        {\n            float dot = (value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W);\n\n            Quaternion result;\n            float factor = 1f / dot;\n            result.X = -value.X * factor;\n            result.Y = -value.Y * factor;\n            result.Z = -value.Z * factor;\n            result.W =  value.W * factor;\n            return result;\n        }\n\n        /// <summary>\n        /// Returns the inverse quaternion which represents the opposite rotation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"result\">The inverse quaternion as an output parameter.</param>\n        public static void Inverse(ref Quaternion value, out Quaternion result)\n        {\n            float dot = (value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W);\n\n            float factor = 1f / dot;\n            result.X = -value.X * factor;\n            result.Y = -value.Y * factor;\n            result.Z = -value.Z * factor;\n            result.W =  value.W * factor;\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Returns the magnitude of the quaternion components.\n        /// </summary>\n        /// <returns>The magnitude of the quaternion components.</returns>\n        public float Length()\n        {\n            return (float) Math.Sqrt((X * X) + (Y * Y) + (Z * Z) + (W * W));\n        }\n\n        /// <summary>\n        /// Returns the squared magnitude of the quaternion components.\n        /// </summary>\n        /// <returns>The squared magnitude of the quaternion components.</returns>\n        public float LengthSquared()\n        {\n            return (X * X) + (Y * Y) + (Z * Z) + (W * W);\n        }\n\n        #region Lerp\n\n        /// <summary>\n        /// Performs a linear blend between two quaternions.\n        /// </summary>\n        /// <param name=\"start\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"end\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"amount\">The blend amount where 0 returns <paramref name=\"start\"/> and 1 <paramref name=\"end\"/>.</param>\n        /// <returns>The result of linear blending between two quaternions.</returns>\n        public static Quaternion Lerp(Quaternion start, Quaternion end, float amount)\n        {\n            float a = 1f - amount;\n            float b = amount;\n            float dot = start.X * end.X + start.Y * end.Y + start.Z * end.Z + start.W * end.W;\n\n            Quaternion result;\n            if (dot >= 0f)\n            {\n                result.X = a * start.X + b * end.X;\n                result.Y = a * start.Y + b * end.Y;\n                result.Z = a * start.Z + b * end.Z;\n                result.W = a * start.W + b * end.W;\n            }\n            else\n            {\n                result.X = a * start.X - b * end.X;\n                result.Y = a * start.Y - b * end.Y;\n                result.Z = a * start.Z - b * end.Z;\n                result.W = a * start.W - b * end.W;\n            }\n\n            float lengthSq = result.X * result.X + result.Y * result.Y + result.Z * result.Z + result.W * result.W;\n            float invLength = 1f / ((float)Math.Sqrt((double)lengthSq));\n            result.X *= invLength;\n            result.Y *= invLength;\n            result.Z *= invLength;\n            result.W *= invLength;\n            return result;\n        }\n\n        /// <summary>\n        /// Performs a linear blend between two quaternions.\n        /// </summary>\n        /// <param name=\"start\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"end\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"amount\">The blend amount where 0 returns <paramref name=\"start\"/> and 1 <paramref name=\"end\"/>.</param>\n        /// <param name=\"result\">The result of linear blending between two quaternions as an output parameter.</param>\n        public static void Lerp(ref Quaternion start, ref Quaternion end, float amount, out Quaternion result)\n        {\n            float a = 1f - amount;\n            float b = amount;\n            float dot = start.X * end.X + start.Y * end.Y + start.Z * end.Z + start.W * end.W;\n\n            if (dot >= 0f)\n            {\n                result.X = a * start.X + b * end.X;\n                result.Y = a * start.Y + b * end.Y;\n                result.Z = a * start.Z + b * end.Z;\n                result.W = a * start.W + b * end.W;\n            }\n            else\n            {\n                result.X = a * start.X - b * end.X;\n                result.Y = a * start.Y - b * end.Y;\n                result.Z = a * start.Z - b * end.Z;\n                result.W = a * start.W - b * end.W;\n            }\n            float lengthSq = result.X * result.X + result.Y * result.Y + result.Z * result.Z + result.W * result.W;\n            float invLength = 1f / ((float)Math.Sqrt((double)lengthSq));\n            result.X *= invLength;\n            result.Y *= invLength;\n            result.Z *= invLength;\n            result.W *= invLength;\n\n        }\n\n        #endregion\n\n        #region Slerp\n\n        /// <summary>\n        /// Performs a spherical linear blend between two quaternions.\n        /// </summary>\n        /// <param name=\"start\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"end\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"amount\">The blend amount where 0 returns <paramref name=\"start\"/> and 1 <paramref name=\"end\"/>.</param>\n        /// <returns>The result of spherical linear blending between two quaternions.</returns>\n        public static Quaternion Slerp(Quaternion start, Quaternion end, float amount)\n        {\n            float a = 1f - amount;\n            float b = amount;\n            float dot = start.X * end.X + start.Y * end.Y + start.Z * end.Z + start.W * end.W;\n\n            float dotAbs = Math.Abs(dot);\n            if (dotAbs <= 0.999999f)\n            {\n                float acos   = (float)Math.Acos(dotAbs);\n                float invSin = (float)(1.0 / Math.Sin(acos));\n                a = (float)Math.Sin(a * acos) * invSin;\n                b = (float)Math.Sin(b * acos) * invSin;\n            }\n            if (dot < 0f)\n                b = -b;\n\n            Quaternion result;\n            result.X = a * start.X + b * end.X;\n            result.Y = a * start.Y + b * end.Y;\n            result.Z = a * start.Z + b * end.Z;\n            result.W = a * start.W + b * end.W;\n            return result;\n        }\n\n        /// <summary>\n        /// Performs a spherical linear blend between two quaternions.\n        /// </summary>\n        /// <param name=\"start\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"end\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"amount\">The blend amount where 0 returns <paramref name=\"start\"/> and 1 <paramref name=\"end\"/>.</param>\n        /// <param name=\"result\">The result of spherical linear blending between two quaternions as an output parameter.</param>\n        public static void Slerp(ref Quaternion start, ref Quaternion end, float amount, out Quaternion result)\n        {\n            float a = 1f - amount;\n            float b = amount;\n            float dot = start.X * end.X + start.Y * end.Y + start.Z * end.Z + start.W * end.W;\n\n            float dotAbs = Math.Abs(dot);\n            if (dotAbs <= 0.999999f)\n            {\n                float acos   = (float)Math.Acos(dotAbs);\n                float invSin = (float)(1.0 / Math.Sin(acos));\n                a = (float)Math.Sin(a * acos) * invSin;\n                b = (float)Math.Sin(b * acos) * invSin;\n            }\n            if (dot < 0f)\n                b = -b;\n\n            result.X = a * start.X + b * end.X;\n            result.Y = a * start.Y + b * end.Y;\n            result.Z = a * start.Z + b * end.Z;\n            result.W = a * start.W + b * end.W;\n        }\n\n        #endregion\n\n        #region Subtract\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains subtraction of one <see cref=\"Quaternion\"/> from another.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <returns>The result of the quaternion subtraction.</returns>\n        public static Quaternion Subtract(Quaternion left, Quaternion right)\n        {\n            Quaternion result;\n            result.X = left.X - right.X;\n            result.Y = left.Y - right.Y;\n            result.Z = left.Z - right.Z;\n            result.W = left.W - right.W;\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains subtraction of one <see cref=\"Quaternion\"/> from another.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"result\">The result of the quaternion subtraction as an output parameter.</param>\n        public static void Subtract(ref Quaternion left, ref Quaternion right, out Quaternion result)\n        {\n            result.X = left.X - right.X;\n            result.Y = left.Y - right.Y;\n            result.Z = left.Z - right.Z;\n            result.W = left.W - right.W;\n        }\n\n        #endregion\n\n        #region Multiply\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains a multiplication of two quaternions.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <returns>The result of the quaternion multiplication.</returns>\n        public static Quaternion Multiply(Quaternion left, Quaternion right)\n        {\n            Quaternion result;\n            float x2 = (left.Y * right.Z) - (left.Z * right.Y);\n            float y2 = (left.Z * right.X) - (left.X * right.Z);\n            float z2 = (left.X * right.Y) - (left.Y * right.X);\n            float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z);\n\n            result.X = (left.X * right.W) + (right.X * left.W) + x2;\n            result.Y = (left.Y * right.W) + (right.Y * left.W) + y2;\n            result.Z = (left.Z * right.W) + (right.Z * left.W) + z2;\n            result.W = (left.W * right.W) - w2;\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains a multiplication of <see cref=\"Quaternion\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <returns>The result of the quaternion multiplication with a scalar.</returns>\n        public static Quaternion Multiply(Quaternion left, float right)\n        {\n            Quaternion result;\n            result.X = left.X * right;\n            result.Y = left.Y * right;\n            result.Z = left.Z * right;\n            result.W = left.W * right;\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains a multiplication of <see cref=\"Quaternion\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <param name=\"result\">The result of the quaternion multiplication with a scalar as an output parameter.</param>\n        public static void Multiply(ref Quaternion left, float right, out Quaternion result)\n        {\n            result.X = left.X * right;\n            result.Y = left.Y * right;\n            result.Z = left.Z * right;\n            result.W = left.W * right;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Quaternion\"/> that contains a multiplication of two quaternions.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"result\">The result of the quaternion multiplication as an output parameter.</param>\n        public static void Multiply(ref Quaternion left, ref Quaternion right, out Quaternion result)\n        {\n            float x2 = (left.Y * right.Z) - (left.Z * right.Y);\n            float y2 = (left.Z * right.X) - (left.X * right.Z);\n            float z2 = (left.X * right.Y) - (left.Y * right.X);\n            float w2  = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z);\n\n            float x = (left.X * right.W) + (right.X * left.W) + x2;\n            float y = (left.Y * right.W) + (right.Y * left.W) + y2;\n            float z = (left.Z * right.W) + (right.Z * left.W) + z2;\n            float w = (left.W * right.W) - w2;\n\n            result.X = x;\n            result.Y = y;\n            result.Z = z;\n            result.W = w;\n        }\n\n        #endregion\n\n        #region Negate\n\n        /// <summary>\n        /// Flips the sign of the all the quaternion components.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <returns>The result of the quaternion negation.</returns>\n        public static Quaternion Negate(Quaternion value)\n        {\n            return new Quaternion(-value.X, -value.Y, -value.Z, -value.W);\n        }\n\n        /// <summary>\n        /// Flips the sign of the all the quaternion components.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"result\">The result of the quaternion negation as an output parameter.</param>\n        public static void Negate(ref Quaternion value, out Quaternion result)\n        {\n            result.X = -value.X;\n            result.Y = -value.Y;\n            result.Z = -value.Z;\n            result.W = -value.W;\n        }\n\n        #endregion\n\n        #region Normalize\n\n        /// <summary>\n        /// Scales the quaternion magnitude to unit length.\n        /// </summary>\n        public void Normalize()\n        {\n            float magnitute = (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z) + (W * W));\n\n            float factor = 1f / magnitute;\n            X *= factor;\n            Y *= factor;\n            Z *= factor;\n            W *= factor;\n        }\n\n        /// <summary>\n        /// Scales the quaternion magnitude to unit length.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <returns>The unit length quaternion.</returns>\n        public static Quaternion Normalize(Quaternion value)\n        {\n            float magnitute = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W));\n\n            Quaternion result;\n            float factor = 1f / magnitute;\n            result.X = value.X * factor;\n            result.Y = value.Y * factor;\n            result.Z = value.Z * factor;\n            result.W = value.W * factor;\n            return result;\n        }\n\n        /// <summary>\n        /// Scales the quaternion magnitude to unit length.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Quaternion\"/>.</param>\n        /// <param name=\"result\">The unit length quaternion an output parameter.</param>\n        public static void Normalize(ref Quaternion value, out Quaternion result)\n        {\n            float magnitute = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W));\n\n            float factor = 1f / magnitute;\n            result.X = value.X * factor;\n            result.Y = value.Y * factor;\n            result.Z = value.Z * factor;\n            result.W = value.W * factor;\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Quaternion\"/> in the format:\n        /// {X:[<see cref=\"X\"/>] Y:[<see cref=\"Y\"/>] Z:[<see cref=\"Z\"/>] W:[<see cref=\"W\"/>]}\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"Quaternion\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{X:\" + X + \" Y:\" + Y + \" Z:\" + Z + \" W:\" + W + \"}\";\n        }\n\n        /// <summary>\n        /// Gets a <see cref=\"Vector4\"/> representation for this object.\n        /// </summary>\n        /// <returns>A <see cref=\"Vector4\"/> representation for this object.</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(X,Y,Z,W);\n        }\n\n        public void Deconstruct(out float x, out float y, out float z, out float w)\n        {\n            x = X;\n            y = Y;\n            z = Z;\n            w = W;\n        }\n\n        #endregion\n\n        #region Operators\n\n        /// <summary>\n        /// Adds two quaternions.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/> on the left of the add sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Quaternion\"/> on the right of the add sign.</param>\n        /// <returns>Sum of the vectors.</returns>\n        public static Quaternion operator +(Quaternion left, Quaternion right)\n        {\n            Quaternion result;\n            result.X = left.X + right.X;\n            result.Y = left.Y + right.Y;\n            result.Z = left.Z + right.Z;\n            result.W = left.W + right.W;\n            return result;\n        }\n\n        /// <summary>\n        /// Divides a <see cref=\"Quaternion\"/> by the other <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Quaternion\"/> on the right of the div sign.</param>\n        /// <returns>The result of dividing the quaternions.</returns>\n        public static Quaternion operator /(Quaternion left, Quaternion right)\n        {\n            // Opt: right = Quaternion.Inverse(right);\n            float dot = right.X * right.X + right.Y * right.Y + right.Z * right.Z + right.W * right.W;\n            float factor = 1f / dot;\n            right.X = -right.X * factor;\n            right.Y = -right.Y * factor;\n            right.Z = -right.Z * factor;\n            right.W =  right.W * factor;\n\n            float x2 = (left.Y * right.Z) - (left.Z * right.Y);\n            float y2 = (left.Z * right.X) - (left.X * right.Z);\n            float z2 = (left.X * right.Y) - (left.Y * right.X);\n            float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z);\n\n            Quaternion result;\n            result.X = (left.X * right.W) + (right.X * left.W) + x2;\n            result.Y = (left.Y * right.W) + (right.Y * left.W) + y2;\n            result.Z = (left.Z * right.W) + (right.Z * left.W) + z2;\n            result.W = (left.W * right.W) - w2;\n            return result;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Quaternion\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Quaternion\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Quaternion\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Quaternion left, Quaternion right)\n        {\n            return ((left.X == right.X) && (left.Y == right.Y) && (left.Z == right.Z) && (left.W == right.W));\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Quaternion\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Quaternion\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Quaternion\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\n        public static bool operator !=(Quaternion left, Quaternion right)\n        {\n            if ((left.X == right.X) && (left.Y == right.Y) && (left.Z == right.Z))\n            {\n                return (left.W != right.W);\n            }\n            return true;\n        }\n\n        /// <summary>\n        /// Multiplies two quaternions.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Quaternion\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Quaternion\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the quaternions multiplication.</returns>\n        public static Quaternion operator *(Quaternion left, Quaternion right)\n        {\n            float x2 = (left.Y * right.Z) - (left.Z * right.Y);\n            float y2 = (left.Z * right.X) - (left.X * right.Z);\n            float z2 = (left.X * right.Y) - (left.Y * right.X);\n            float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z);\n\n            Quaternion result;\n            result.X = (left.X * right.W) + (right.X * left.W) + x2;\n            result.Y = (left.Y * right.W) + (right.Y * left.W) + y2;\n            result.Z = (left.Z * right.W) + (right.Z * left.W) + z2;\n            result.W = (left.W * right.W) - w2;\n            return result;\n        }\n\n        /// <summary>\n        /// Multiplies the components of quaternion by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Scalar value on the right of the mul sign.</param>\n        /// <returns>Result of the quaternion multiplication with a scalar.</returns>\n        public static Quaternion operator *(Quaternion left, float right)\n        {\n            Quaternion result;\n            result.X = left.X * right;\n            result.Y = left.Y * right;\n            result.Z = left.Z * right;\n            result.W = left.W * right;\n            return result;\n        }\n\n        /// <summary>\n        /// Subtracts a <see cref=\"Quaternion\"/> from a <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/> on the left of the sub sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the quaternion subtraction.</returns>\n        public static Quaternion operator -(Quaternion left, Quaternion right)\n        {\n            Quaternion result;\n            result.X = left.X - right.X;\n            result.Y = left.Y - right.Y;\n            result.Z = left.Z - right.Z;\n            result.W = left.W - right.W;\n            return result;\n\n        }\n\n        /// <summary>\n        /// Flips the sign of the all the quaternion components.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Quaternion\"/> on the right of the sub sign.</param>\n        /// <returns>The result of the quaternion negation.</returns>\n        public static Quaternion operator -(Quaternion value)\n        {\n            Quaternion quaternion2;\n            quaternion2.X = -value.X;\n            quaternion2.Y = -value.Y;\n            quaternion2.Z = -value.Z;\n            quaternion2.W = -value.W;\n            return quaternion2;\n        }\n\n#if NET8_0_OR_GREATER\n        public static explicit operator Quaternion(SysNumerics.Quaternion value)\n        {\n            return Unsafe.BitCast<SysNumerics.Quaternion, Quaternion>(value);\n        }\n\n        public static explicit operator SysNumerics.Quaternion(Quaternion value)\n        {\n            return Unsafe.BitCast<Quaternion, SysNumerics.Quaternion>(value);\n        }\n#endif\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Ray.cs",
    "content": "﻿// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Represents a ray with an origin and a direction in 3D space.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct Ray : IEquatable<Ray>\n    {\n        #region Public Fields\n\n        /// <summary>\n        /// The direction of this <see cref=\"Ray\"/>. This vector is assumed to be normalized.\n        /// </summary>\n        [DataMember]\n        public Vector3 Direction;\n      \n        /// <summary>\n        /// The origin of this <see cref=\"Ray\"/>.\n        /// </summary>\n        [DataMember]\n        public Vector3 Position;\n\n        #endregion\n\n\n        #region Public Constructors\n\n        /// <summary>\n        /// Create a <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <param name=\"position\">The origin of the <see cref=\"Ray\"/>.</param>\n        /// <param name=\"direction\">The direction of the <see cref=\"Ray\"/>. This vector is assumed to be normalized.</param>\n        public Ray(Vector3 position, Vector3 direction)\n        {\n            this.Position = position;\n            this.Direction = direction;\n        }\n\n        #endregion\n\n\n        #region Public Methods\n\n        /// <summary>\n        /// Check if the specified <see cref=\"Object\"/> is equal to this <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to test for equality with this <see cref=\"Ray\"/>.</param>\n        /// <returns>\n        /// <code>true</code> if the specified <see cref=\"Object\"/> is equal to this <see cref=\"Ray\"/>,\n        /// <code>false</code> if it is not.\n        /// </returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Ray) && this.Equals((Ray)obj);\n        }\n\n        /// <summary>\n        /// Check if the specified <see cref=\"Ray\"/> is equal to this <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Ray\"/> to test for equality with this <see cref=\"Ray\"/>.</param>\n        /// <returns>\n        /// <code>true</code> if the specified <see cref=\"Ray\"/> is equal to this <see cref=\"Ray\"/>,\n        /// <code>false</code> if it is not.\n        /// </returns>\n        public bool Equals(Ray other)\n        {\n            return this.Position.Equals(other.Position) && this.Direction.Equals(other.Direction);\n        }\n\n        /// <summary>\n        /// Get a hash code for this <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <returns>A hash code for this <see cref=\"Ray\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return Position.GetHashCode() ^ Direction.GetHashCode();\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Ray\"/> intersects the specified <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The <see cref=\"BoundingBox\"/> to test for intersection.</param>\n        /// <returns>\n        /// The distance along the ray of the intersection or <code>null</code> if this\n        /// <see cref=\"Ray\"/> does not intersect the <see cref=\"BoundingBox\"/>.\n        /// </returns>\n        public float? Intersects(BoundingBox box)\n        {\n            float? result;\n            IntersectsHelper.BoundingBoxIntersectsRay(ref box, ref this, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Ray\"/> intersects the specified <see cref=\"BoundingBox\"/>.\n        /// </summary>\n        /// <param name=\"box\">The <see cref=\"BoundingBox\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        /// The distance along the ray of the intersection or <code>null</code> if this\n        /// <see cref=\"Ray\"/> does not intersect the <see cref=\"BoundingBox\"/>.\n        /// </param>\n        public void Intersects(ref BoundingBox box, out float? result)\n        {\n            IntersectsHelper.BoundingBoxIntersectsRay(ref box, ref this, out result);\n        }\n\n        public float? Intersects(BoundingFrustum frustum)\n        {\n            if (frustum == null)\n                throw new ArgumentNullException(\"frustum\");\n\n            float? result;\n            IntersectsHelper.BoundingFrustumIntersectsRay(frustum, ref this, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Ray\"/> intersects the specified <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingBox\"/> to test for intersection.</param>\n        /// <returns>\n        /// The distance along the ray of the intersection or <code>null</code> if this\n        /// <see cref=\"Ray\"/> does not intersect the <see cref=\"BoundingSphere\"/>.\n        /// </returns>\n        public float? Intersects(BoundingSphere sphere)\n        {\n            float? result;\n            IntersectsHelper.BoundingSphereIntersectsRay(ref sphere, ref this, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Ray\"/> intersects the specified <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"plane\">The <see cref=\"Plane\"/> to test for intersection.</param>\n        /// <returns>\n        /// The distance along the ray of the intersection or <code>null</code> if this\n        /// <see cref=\"Ray\"/> does not intersect the <see cref=\"Plane\"/>.\n        /// </returns>\n        public float? Intersects(Plane plane)\n        {\n            float? result;\n            IntersectsHelper.PlaneIntersectsRay(ref plane, ref this, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Ray\"/> intersects the specified <see cref=\"Plane\"/>.\n        /// </summary>\n        /// <param name=\"plane\">The <see cref=\"Plane\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        /// The distance along the ray of the intersection or <code>null</code> if this\n        /// <see cref=\"Ray\"/> does not intersect the <see cref=\"Plane\"/>.\n        /// </param>\n        public void Intersects(ref Plane plane, out float? result)\n        {\n            IntersectsHelper.PlaneIntersectsRay(ref plane, ref this, out result);\n        }\n\n        /// <summary>\n        /// Check if this <see cref=\"Ray\"/> intersects the specified <see cref=\"BoundingSphere\"/>.\n        /// </summary>\n        /// <param name=\"sphere\">The <see cref=\"BoundingBox\"/> to test for intersection.</param>\n        /// <param name=\"result\">\n        /// The distance along the ray of the intersection or <code>null</code> if this\n        /// <see cref=\"Ray\"/> does not intersect the <see cref=\"BoundingSphere\"/>.\n        /// </param>\n        public void Intersects(ref BoundingSphere sphere, out float? result)\n        {\n            IntersectsHelper.BoundingSphereIntersectsRay(ref sphere, ref this, out result);\n        }\n\n        /// <summary>\n        /// Check if two rays are not equal.\n        /// </summary>\n        /// <param name=\"left\">A ray to check for inequality.</param>\n        /// <param name=\"right\">A ray to check for inequality.</param>\n        /// <returns><code>true</code> if the two rays are not equal, <code>false</code> if they are.</returns>\n        public static bool operator !=(Ray left, Ray right)\n        {\n            return !left.Equals(right);\n        }\n\n        /// <summary>\n        /// Check if two rays are equal.\n        /// </summary>\n        /// <param name=\"left\">A ray to check for equality.</param>\n        /// <param name=\"right\">A ray to check for equality.</param>\n        /// <returns><code>true</code> if the two rays are equals, <code>false</code> if they are not.</returns>\n        public static bool operator ==(Ray left, Ray right)\n        {\n            return left.Equals(right);\n        }\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    \"Pos( \", this.Position.DebugDisplayString, \" )  \\r\\n\",\n                    \"Dir( \", this.Direction.DebugDisplayString, \" )\"\n                );\n            }\n        }\n\n        /// <summary>\n        /// Get a <see cref=\"String\"/> representation of this <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"Ray\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{{Position:\" + Position.ToString() + \" Direction:\" + Direction.ToString() + \"}}\";\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Ray\"/>.\n        /// </summary>\n        /// <param name=\"position\">Receives the start position of the ray.</param>\n        /// <param name=\"direction\">Receives the direction of the ray.</param>\n        public void Deconstruct(out Vector3 position, out Vector3 direction)\n        {\n            position = Position;\n            direction = Direction;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Rectangle.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.Serialization;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Describes a 2D-rectangle. \n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    public struct Rectangle : IEquatable<Rectangle>\n    {\n        #region Private Fields\n\n        private static Rectangle emptyRectangle = new Rectangle();\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The x coordinate of the top-left corner of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        [DataMember]\n        public int X;\n\n        /// <summary>\n        /// The y coordinate of the top-left corner of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        [DataMember]\n        public int Y;\n\n        /// <summary>\n        /// The width of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        [DataMember]\n        public int Width;\n\n        /// <summary>\n        /// The height of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        [DataMember]\n        public int Height;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Returns a <see cref=\"Rectangle\"/> with X=0, Y=0, Width=0, Height=0.\n        /// </summary>\n        public static Rectangle Empty\n        {\n            get { return emptyRectangle; }\n        }\n\n        /// <summary>\n        /// Returns the x coordinate of the left edge of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        public int Left\n        {\n            get { return this.X; }\n        }\n\n        /// <summary>\n        /// Returns the x coordinate of the right edge of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        public int Right\n        {\n            get { return (this.X + this.Width); }\n        }\n\n        /// <summary>\n        /// Returns the y coordinate of the top edge of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        public int Top\n        {\n            get { return this.Y; }\n        }\n\n        /// <summary>\n        /// Returns the y coordinate of the bottom edge of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        public int Bottom\n        {\n            get { return (this.Y + this.Height); }\n        }\n\n        /// <summary>\n        /// Whether or not this <see cref=\"Rectangle\"/> has a <see cref=\"Width\"/> and\n        /// <see cref=\"Height\"/> of 0, and a <see cref=\"Location\"/> of (0, 0).\n        /// </summary>\n        public bool IsEmpty\n        {\n            get { return ((this.Width == 0) && (this.Height == 0) && (this.X == 0) && (this.Y == 0)); }\n        }\n\n        /// <summary>\n        /// The top-left coordinates of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        public Point Location\n        {\n            get { return new Point(this.X, this.Y); }\n            set\n            {\n                X = value.X;\n                Y = value.Y;\n            }\n        }\n\n        /// <summary>\n        /// The width-height coordinates of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        public Point Size\n        {\n            get { return new Point(this.Width,this.Height); }\n            set\n            {\n                Width = value.X;\n                Height = value.Y;\n            }\n        }\n\n        /// <summary>\n        /// A <see cref=\"Point\"/> located in the center of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <remarks>\n        /// If <see cref=\"Width\"/> or <see cref=\"Height\"/> is an odd number,\n        /// the center point will be rounded down.\n        /// </remarks>\n        public Point Center\n        {\n            get { return new Point(this.X + (this.Width / 2), this.Y + (this.Height / 2)); }\n        }\n\n        #endregion\n\n        #region Internal Properties\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    this.X, \"  \",\n                    this.Y, \"  \",\n                    this.Width, \"  \",\n                    this.Height\n                    );\n            }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Creates a new instance of <see cref=\"Rectangle\"/> struct, with the specified\n        /// position, width, and height.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate of the top-left corner of the created <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"y\">The y coordinate of the top-left corner of the created <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"width\">The width of the created <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"height\">The height of the created <see cref=\"Rectangle\"/>.</param>\n        public Rectangle(int x, int y, int width, int height)\n        {\n            this.X = x;\n            this.Y = y;\n            this.Width = width;\n            this.Height = height;\n        }\n\n        /// <summary>\n        /// Creates a new instance of <see cref=\"Rectangle\"/> struct, with the specified\n        /// location and size.\n        /// </summary>\n        /// <param name=\"location\">The x and y coordinates of the top-left corner of the created <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"size\">The width and height of the created <see cref=\"Rectangle\"/>.</param>\n        public Rectangle(Point location,Point size)\n        {\n            this.X = location.X;\n            this.Y = location.Y;\n            this.Width = size.X;\n            this.Height = size.Y;\n        }\n\n        #endregion\n\n        #region Operators\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Rectangle\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Rectangle\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Rectangle\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Rectangle left, Rectangle right)\n        {\n            return ((left.X == right.X) && (left.Y == right.Y) && (left.Width == right.Width) && (left.Height == right.Height));\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Rectangle\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Rectangle\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Rectangle\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\n        public static bool operator !=(Rectangle left, Rectangle right)\n        {\n            return !(left == right);\n        }\n\n        #endregion\n\n        #region Public Methods\n       \n        /// <summary>\n        /// Gets whether or not the provided coordinates lie within the bounds of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate of the point to check for containment.</param>\n        /// <param name=\"y\">The y coordinate of the point to check for containment.</param>\n        /// <returns><c>true</c> if the provided coordinates lie inside this <see cref=\"Rectangle\"/>; <c>false</c> otherwise.</returns>\n        public bool Contains(int x, int y)\n        {\n            return ((this.X <= x) && (x < (this.X + this.Width)) && (this.Y <= y) && (y < (this.Y + this.Height)));\n        }\n\n        /// <summary>\n        /// Gets whether or not the provided coordinates lie within the bounds of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate of the point to check for containment.</param>\n        /// <param name=\"y\">The y coordinate of the point to check for containment.</param>\n        /// <returns><c>true</c> if the provided coordinates lie inside this <see cref=\"Rectangle\"/>; <c>false</c> otherwise.</returns>\n        public bool Contains(float x, float y)\n        {\n            return ((this.X <= x) && (x < (this.X + this.Width)) && (this.Y <= y)) && (y < (this.Y + this.Height));\n        }\n        \n        /// <summary>\n        /// Gets whether or not the provided <see cref=\"Point\"/> lies within the bounds of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"value\">The coordinates to check for inclusion in this <see cref=\"Rectangle\"/>.</param>\n        /// <returns><c>true</c> if the provided <see cref=\"Point\"/> lies inside this <see cref=\"Rectangle\"/>; <c>false</c> otherwise.</returns>\n        public bool Contains(Point value)\n        {\n            return ((this.X <= value.X) && (value.X < (this.X + this.Width)) && (this.Y <= value.Y) && (value.Y < (this.Y + this.Height)));\n        }\n\n        /// <summary>\n        /// Gets whether or not the provided <see cref=\"Point\"/> lies within the bounds of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"value\">The coordinates to check for inclusion in this <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"result\"><c>true</c> if the provided <see cref=\"Point\"/> lies inside this <see cref=\"Rectangle\"/>; <c>false</c> otherwise. As an output parameter.</param>\n        public void Contains(ref Point value, out bool result)\n        {\n            result = ((this.X <= value.X) && (value.X < (this.X + this.Width)) && (this.Y <= value.Y) && (value.Y < (this.Y + this.Height)));\n        }\n\n        /// <summary>\n        /// Gets whether or not the provided <see cref=\"Vector2\"/> lies within the bounds of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"value\">The coordinates to check for inclusion in this <see cref=\"Rectangle\"/>.</param>\n        /// <returns><c>true</c> if the provided <see cref=\"Vector2\"/> lies inside this <see cref=\"Rectangle\"/>; <c>false</c> otherwise.</returns>\n        public bool Contains(Vector2 value)\n        {\n            return ((this.X <= value.X) && (value.X < (this.X + this.Width)) && (this.Y <= value.Y)) && (value.Y < (this.Y + this.Height));\n        }\n\n        /// <summary>\n        /// Gets whether or not the provided <see cref=\"Vector2\"/> lies within the bounds of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"value\">The coordinates to check for inclusion in this <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"result\"><c>true</c> if the provided <see cref=\"Vector2\"/> lies inside this <see cref=\"Rectangle\"/>; <c>false</c> otherwise. As an output parameter.</param>\n        public void Contains(ref Vector2 value, out bool result)\n        {\n            result = ((this.X <= value.X) && (value.X < (this.X + this.Width)) && (this.Y <= value.Y) && (value.Y < (this.Y + this.Height)));\n        }\n\n        /// <summary>\n        /// Gets whether or not the provided <see cref=\"Rectangle\"/> lies within the bounds of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Rectangle\"/> to check for inclusion in this <see cref=\"Rectangle\"/>.</param>\n        /// <returns><c>true</c> if the provided <see cref=\"Rectangle\"/>'s bounds lie entirely inside this <see cref=\"Rectangle\"/>; <c>false</c> otherwise.</returns>\n        public bool Contains(Rectangle value)\n        {\n            return ((this.X <= value.X) && ((value.X + value.Width) <= (this.X + this.Width)) && (this.Y <= value.Y) && ((value.Y + value.Height) <= (this.Y + this.Height)));\n        }\n\n        /// <summary>\n        /// Gets whether or not the provided <see cref=\"Rectangle\"/> lies within the bounds of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"value\">The <see cref=\"Rectangle\"/> to check for inclusion in this <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"result\"><c>true</c> if the provided <see cref=\"Rectangle\"/>'s bounds lie entirely inside this <see cref=\"Rectangle\"/>; <c>false</c> otherwise. As an output parameter.</param>\n        public void Contains(ref Rectangle value,out bool result)\n        {\n            result = ((this.X <= value.X) && ((value.X + value.Width) <= (this.X + this.Width)) && (this.Y <= value.Y) && ((value.Y + value.Height) <= (this.Y + this.Height)));\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Rectangle) && this == ((Rectangle)obj);\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Rectangle\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Rectangle other)\n        {\n            return this == other;\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Rectangle\"/>.</returns>\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hash = 17;\n                hash = hash * 23 + X.GetHashCode();\n                hash = hash * 23 + Y.GetHashCode();\n                hash = hash * 23 + Width.GetHashCode();\n                hash = hash * 23 + Height.GetHashCode();\n                return hash;\n            }\n        }\n\n        /// <summary>\n        /// Adjusts the edges of this <see cref=\"Rectangle\"/> by specified horizontal and vertical amounts. \n        /// </summary>\n        /// <param name=\"horizontalAmount\">Value to adjust the left and right edges.</param>\n        /// <param name=\"verticalAmount\">Value to adjust the top and bottom edges.</param>\n        public void Inflate(int horizontalAmount, int verticalAmount)\n        {\n            X -= horizontalAmount;\n            Y -= verticalAmount;\n            Width += horizontalAmount * 2;\n            Height += verticalAmount * 2;\n        }\n\n        /// <summary>\n        /// Adjusts the edges of this <see cref=\"Rectangle\"/> by specified horizontal and vertical amounts. \n        /// </summary>\n        /// <param name=\"horizontalAmount\">Value to adjust the left and right edges.</param>\n        /// <param name=\"verticalAmount\">Value to adjust the top and bottom edges.</param>\n        public void Inflate(float horizontalAmount, float verticalAmount)\n        {\n            X -= (int)horizontalAmount;\n            Y -= (int)verticalAmount;\n            Width += (int)horizontalAmount * 2;\n            Height += (int)verticalAmount * 2;\n        }\n\n        /// <summary>\n        /// Gets whether or not the other <see cref=\"Rectangle\"/> intersects with this rectangle.\n        /// </summary>\n        /// <param name=\"value\">The other rectangle for testing.</param>\n        /// <returns><c>true</c> if other <see cref=\"Rectangle\"/> intersects with this rectangle; <c>false</c> otherwise.</returns>\n        public bool Intersects(Rectangle value)\n        {\n            return value.Left < Right &&\n                   Left < value.Right &&\n                   value.Top < Bottom &&\n                   Top < value.Bottom;\n        }\n\n\n        /// <summary>\n        /// Gets whether or not the other <see cref=\"Rectangle\"/> intersects with this rectangle.\n        /// </summary>\n        /// <param name=\"value\">The other rectangle for testing.</param>\n        /// <param name=\"result\"><c>true</c> if other <see cref=\"Rectangle\"/> intersects with this rectangle; <c>false</c> otherwise. As an output parameter.</param>\n        public void Intersects(ref Rectangle value, out bool result)\n        {\n            result = value.Left < Right &&\n                     Left < value.Right &&\n                     value.Top < Bottom &&\n                     Top < value.Bottom;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Rectangle\"/> that contains overlapping region of two other rectangles.\n        /// </summary>\n        /// <param name=\"value1\">The first <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"value2\">The second <see cref=\"Rectangle\"/>.</param>\n        /// <returns>Overlapping region of the two rectangles.</returns>\n        public static Rectangle Intersect(Rectangle value1, Rectangle value2)\n        {\n            Rectangle rectangle;\n            Intersect(ref value1, ref value2, out rectangle);\n            return rectangle;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Rectangle\"/> that contains overlapping region of two other rectangles.\n        /// </summary>\n        /// <param name=\"value1\">The first <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"value2\">The second <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"result\">Overlapping region of the two rectangles as an output parameter.</param>\n        public static void Intersect(ref Rectangle value1, ref Rectangle value2, out Rectangle result)\n        {\n            if (value1.Intersects(value2))\n            {\n                int right_side = Math.Min(value1.X + value1.Width, value2.X + value2.Width);\n                int left_side = Math.Max(value1.X, value2.X);\n                int top_side = Math.Max(value1.Y, value2.Y);\n                int bottom_side = Math.Min(value1.Y + value1.Height, value2.Y + value2.Height);\n                result = new Rectangle(left_side, top_side, right_side - left_side, bottom_side - top_side);\n            }\n            else\n            {\n                result = new Rectangle(0, 0, 0, 0);\n            }\n        }\n\n        /// <summary>\n        /// Changes the <see cref=\"Location\"/> of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"offsetX\">The x coordinate to add to this <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"offsetY\">The y coordinate to add to this <see cref=\"Rectangle\"/>.</param>\n        public void Offset(int offsetX, int offsetY)\n        {\n            X += offsetX;\n            Y += offsetY;\n        }\n\n        /// <summary>\n        /// Changes the <see cref=\"Location\"/> of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"offsetX\">The x coordinate to add to this <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"offsetY\">The y coordinate to add to this <see cref=\"Rectangle\"/>.</param>\n        public void Offset(float offsetX, float offsetY)\n        {\n            X += (int)offsetX;\n            Y += (int)offsetY;\n        }\n\n        /// <summary>\n        /// Changes the <see cref=\"Location\"/> of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"amount\">The x and y components to add to this <see cref=\"Rectangle\"/>.</param>\n        public void Offset(Point amount)\n        {\n            X += amount.X;\n            Y += amount.Y;\n        }\n\n        /// <summary>\n        /// Changes the <see cref=\"Location\"/> of this <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"amount\">The x and y components to add to this <see cref=\"Rectangle\"/>.</param>\n        public void Offset(Vector2 amount)\n        {\n            X += (int)amount.X;\n            Y += (int)amount.Y;\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Rectangle\"/> in the format:\n        /// {X:[<see cref=\"X\"/>] Y:[<see cref=\"Y\"/>] Width:[<see cref=\"Width\"/>] Height:[<see cref=\"Height\"/>]}\n        /// </summary>\n        /// <returns><see cref=\"String\"/> representation of this <see cref=\"Rectangle\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{X:\" + X + \" Y:\" + Y + \" Width:\" + Width + \" Height:\" + Height + \"}\";\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Rectangle\"/> that completely contains two other rectangles.\n        /// </summary>\n        /// <param name=\"value1\">The first <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"value2\">The second <see cref=\"Rectangle\"/>.</param>\n        /// <returns>The union of the two rectangles.</returns>\n        public static Rectangle Union(Rectangle value1, Rectangle value2)\n        {\n            int x = Math.Min(value1.X, value2.X);\n            int y = Math.Min(value1.Y, value2.Y);\n            return new Rectangle(x, y,\n                                 Math.Max(value1.Right, value2.Right) - x,\n                                     Math.Max(value1.Bottom, value2.Bottom) - y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Rectangle\"/> that completely contains two other rectangles.\n        /// </summary>\n        /// <param name=\"value1\">The first <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"value2\">The second <see cref=\"Rectangle\"/>.</param>\n        /// <param name=\"result\">The union of the two rectangles as an output parameter.</param>\n        public static void Union(ref Rectangle value1, ref Rectangle value2, out Rectangle result)\n        {\n            result.X = Math.Min(value1.X, value2.X);\n            result.Y = Math.Min(value1.Y, value2.Y);\n            result.Width = Math.Max(value1.Right, value2.Right) - result.X;\n            result.Height = Math.Max(value1.Bottom, value2.Bottom) - result.Y;\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Rectangle\"/>.\n        /// </summary>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        /// <param name=\"width\"></param>\n        /// <param name=\"height\"></param>\n        public void Deconstruct(out int x, out int y, out int width, out int height)\n        {\n            x = X;\n            y = Y;\n            width = Width;\n            height = Height;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Vector2.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\n#if NET8_0_OR_GREATER\nusing System.Runtime.CompilerServices;\nusing SysNumerics = System.Numerics;\n#endif\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Describes a 2D-vector.\n    /// </summary>\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    [DataContract]\n    [TypeConverter(\"Microsoft.Xna.Framework.Design.Vector2Converter, Xna.Framework.Design\")]\n    public struct Vector2 : IEquatable<Vector2>\n    {\n        #region Private Fields\n\n        private static readonly Vector2 zeroVector = new Vector2(0f, 0f);\n        private static readonly Vector2 unitVector = new Vector2(1f, 1f);\n        private static readonly Vector2 unitXVector = new Vector2(1f, 0f);\n        private static readonly Vector2 unitYVector = new Vector2(0f, 1f);\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The x coordinate of this <see cref=\"Vector2\"/>.\n        /// </summary>\n        [DataMember]\n        public float X;\n\n        /// <summary>\n        /// The y coordinate of this <see cref=\"Vector2\"/>.\n        /// </summary>\n        [DataMember]\n        public float Y;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector2\"/> with components 0, 0.\n        /// </summary>\n        public static Vector2 Zero\n        {\n            get { return zeroVector; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector2\"/> with components 1, 1.\n        /// </summary>\n        public static Vector2 One\n        {\n            get { return unitVector; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector2\"/> with components 1, 0.\n        /// </summary>\n        public static Vector2 UnitX\n        {\n            get { return unitXVector; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector2\"/> with components 0, 1.\n        /// </summary>\n        public static Vector2 UnitY\n        {\n            get { return unitYVector; }\n        }\n\n        #endregion\n\n        #region Internal Properties\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    this.X.ToString(), \"  \",\n                    this.Y.ToString()\n                );\n            }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Constructs a 2d vector with X and Y from two values.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate in 2d-space.</param>\n        /// <param name=\"y\">The y coordinate in 2d-space.</param>\n        public Vector2(float x, float y)\n        {\n            this.X = x;\n            this.Y = y;\n        }\n\n        /// <summary>\n        /// Constructs a 2d vector with X and Y set to the same value.\n        /// </summary>\n        /// <param name=\"value\">The x and y coordinates in 2d-space.</param>\n        public Vector2(float value)\n        {\n            this.X = value;\n            this.Y = value;\n        }\n\n        #endregion\n\n        #region Operators\n\n        /// <summary>\n        /// Inverts values in the specified <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the inversion.</returns>\n        public static Vector2 operator -(Vector2 value)\n        {\n            value.X = -value.X;\n            value.Y = -value.Y;\n            return value;\n        }\n\n        /// <summary>\n        /// Adds two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/> on the left of the add sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector2\"/> on the right of the add sign.</param>\n        /// <returns>Sum of the vectors.</returns>\n        public static Vector2 operator +(Vector2 left, Vector2 right)\n        {\n            left.X += right.X;\n            left.Y += right.Y;\n            return left;\n        }\n\n        /// <summary>\n        /// Subtracts a <see cref=\"Vector2\"/> from a <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/> on the left of the sub sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector2\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the vector subtraction.</returns>\n        public static Vector2 operator -(Vector2 left, Vector2 right)\n        {\n            left.X -= right.X;\n            left.Y -= right.Y;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of two vectors by each other.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector2\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication.</returns>\n        public static Vector2 operator *(Vector2 left, Vector2 right)\n        {\n            left.X *= right.X;\n            left.Y *= right.Y;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of vector by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Scalar value on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication with a scalar.</returns>\n        public static Vector2 operator *(Vector2 left, float right)\n        {\n            left.X *= right;\n            left.Y *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of vector by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Scalar value on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector2\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication with a scalar.</returns>\n        public static Vector2 operator *(float left, Vector2 right)\n        {\n            right.X *= left;\n            right.Y *= left;\n            return right;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector2\"/> by the components of another <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector2\"/> on the right of the div sign.</param>\n        /// <returns>The result of dividing the vectors.</returns>\n        public static Vector2 operator /(Vector2 left, Vector2 right)\n        {\n            left.X /= right.X;\n            left.Y /= right.Y;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector2\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor scalar on the right of the div sign.</param>\n        /// <returns>The result of dividing a vector by a scalar.</returns>\n        public static Vector2 operator /(Vector2 left, float right)\n        {\n            float factor = 1 / right;\n            left.X *= factor;\n            left.Y *= factor;\n            return left;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Vector2\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Vector2\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Vector2\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Vector2 left, Vector2 right)\n        {\n            return left.X == right.X && left.Y == right.Y;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Vector2\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Vector2\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Vector2\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\t\n        public static bool operator !=(Vector2 left, Vector2 right)\n        {\n            return left.X != right.X || left.Y != right.Y;\n        }\n\n#if NET8_0_OR_GREATER\n        public static explicit operator Vector2(SysNumerics.Vector2 value)\n        {\n            return Unsafe.BitCast<SysNumerics.Vector2, Vector2>(value);\n        }\n\n        public static explicit operator SysNumerics.Vector2(Vector2 value)\n        {\n            return Unsafe.BitCast<Vector2, SysNumerics.Vector2>(value);\n        }\n#endif\n\n        #endregion\n\n        #region Public Methods\n\n        /// <summary>\n        /// Performs vector addition on <paramref name=\"left\"/> and <paramref name=\"right\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first vector to add.</param>\n        /// <param name=\"right\">The second vector to add.</param>\n        /// <returns>The result of the vector addition.</returns>\n        public static Vector2 Add(Vector2 left, Vector2 right)\n        {\n            left.X += right.X;\n            left.Y += right.Y;\n            return left;\n        }\n\n        /// <summary>\n        /// Performs vector addition on <paramref name=\"left\"/> and\n        /// <paramref name=\"right\"/>, storing the result of the\n        /// addition in <paramref name=\"result\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first vector to add.</param>\n        /// <param name=\"right\">The second vector to add.</param>\n        /// <param name=\"result\">The result of the vector addition.</param>\n        public static void Add(ref Vector2 left, ref Vector2 right, out Vector2 result)\n        {\n            result.X = left.X + right.X;\n            result.Y = left.Y + right.Y;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 2d-triangle.\n        /// </summary>\n        /// <param name=\"value1\">The first vector of 2d-triangle.</param>\n        /// <param name=\"value2\">The second vector of 2d-triangle.</param>\n        /// <param name=\"value3\">The third vector of 2d-triangle.</param>\n        /// <param name=\"amount1\">Barycentric scalar <c>b2</c> which represents a weighting factor towards second vector of 2d-triangle.</param>\n        /// <param name=\"amount2\">Barycentric scalar <c>b3</c> which represents a weighting factor towards third vector of 2d-triangle.</param>\n        /// <returns>The cartesian translation of barycentric coordinates.</returns>\n        public static Vector2 Barycentric(Vector2 value1, Vector2 value2, Vector2 value3, float amount1, float amount2)\n        {\n            return new Vector2(\n                MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2),\n                MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 2d-triangle.\n        /// </summary>\n        /// <param name=\"value1\">The first vector of 2d-triangle.</param>\n        /// <param name=\"value2\">The second vector of 2d-triangle.</param>\n        /// <param name=\"value3\">The third vector of 2d-triangle.</param>\n        /// <param name=\"amount1\">Barycentric scalar <c>b2</c> which represents a weighting factor towards second vector of 2d-triangle.</param>\n        /// <param name=\"amount2\">Barycentric scalar <c>b3</c> which represents a weighting factor towards third vector of 2d-triangle.</param>\n        /// <param name=\"result\">The cartesian translation of barycentric coordinates as an output parameter.</param>\n        public static void Barycentric(ref Vector2 value1, ref Vector2 value2, ref Vector2 value3, float amount1, float amount2, out Vector2 result)\n        {\n            result.X = MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2);\n            result.Y = MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains CatmullRom interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector in interpolation.</param>\n        /// <param name=\"value2\">The second vector in interpolation.</param>\n        /// <param name=\"value3\">The third vector in interpolation.</param>\n        /// <param name=\"value4\">The fourth vector in interpolation.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <returns>The result of CatmullRom interpolation.</returns>\n        public static Vector2 CatmullRom(Vector2 value1, Vector2 value2, Vector2 value3, Vector2 value4, float amount)\n        {\n            return new Vector2(\n                MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount),\n                MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains CatmullRom interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector in interpolation.</param>\n        /// <param name=\"value2\">The second vector in interpolation.</param>\n        /// <param name=\"value3\">The third vector in interpolation.</param>\n        /// <param name=\"value4\">The fourth vector in interpolation.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <param name=\"result\">The result of CatmullRom interpolation as an output parameter.</param>\n        public static void CatmullRom(ref Vector2 value1, ref Vector2 value2, ref Vector2 value3, ref Vector2 value4, float amount, out Vector2 result)\n        {\n            result.X = MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount);\n            result.Y = MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount);\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector2\"/> towards positive infinity.\n        /// </summary>\n        public void Ceiling()\n        {\n            X = (float)Math.Ceiling(X);\n            Y = (float)Math.Ceiling(Y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains members from another vector rounded towards positive infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector2\"/>.</returns>\n        public static Vector2 Ceiling(Vector2 value)\n        {\n            value.X = (float)Math.Ceiling(value.X);\n            value.Y = (float)Math.Ceiling(value.Y);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains members from another vector rounded towards positive infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector2\"/>.</param>\n        public static void Ceiling(ref Vector2 value, out Vector2 result)\n        {\n            result.X = (float)Math.Ceiling(value.X);\n            result.Y = (float)Math.Ceiling(value.Y);\n        }\n\n        /// <summary>\n        /// Clamps the specified value within a range.\n        /// </summary>\n        /// <param name=\"value1\">The value to clamp.</param>\n        /// <param name=\"min\">The min value.</param>\n        /// <param name=\"max\">The max value.</param>\n        /// <returns>The clamped value.</returns>\n        public static Vector2 Clamp(Vector2 value1, Vector2 min, Vector2 max)\n        {\n            return new Vector2(\n                MathHelper.Clamp(value1.X, min.X, max.X),\n                MathHelper.Clamp(value1.Y, min.Y, max.Y));\n        }\n\n        /// <summary>\n        /// Clamps the specified value within a range.\n        /// </summary>\n        /// <param name=\"value1\">The value to clamp.</param>\n        /// <param name=\"min\">The min value.</param>\n        /// <param name=\"max\">The max value.</param>\n        /// <param name=\"result\">The clamped value as an output parameter.</param>\n        public static void Clamp(ref Vector2 value1, ref Vector2 min, ref Vector2 max, out Vector2 result)\n        {\n            result.X = MathHelper.Clamp(value1.X, min.X, max.X);\n            result.Y = MathHelper.Clamp(value1.Y, min.Y, max.Y);\n        }\n\n        /// <summary>\n        /// Returns the distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The distance between two vectors.</returns>\n        public static float Distance(Vector2 value1, Vector2 value2)\n        {\n            float dX = value1.X - value2.X;\n            float dY = value1.Y - value2.Y;\n            return (float)Math.Sqrt(dX * dX + dY * dY);\n        }\n\n        /// <summary>\n        /// Returns the distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The distance between two vectors as an output parameter.</param>\n        public static void Distance(ref Vector2 value1, ref Vector2 value2, out float result)\n        {\n            float v1 = value1.X - value2.X, v2 = value1.Y - value2.Y;\n            result = (float)Math.Sqrt((v1 * v1) + (v2 * v2));\n        }\n\n        /// <summary>\n        /// Returns the squared distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The squared distance between two vectors.</returns>\n        public static float DistanceSquared(Vector2 value1, Vector2 value2)\n        {\n            float dX = value1.X - value2.X;\n            float dY = value1.Y - value2.Y;\n            return (dX * dX + dY * dY);\n        }\n\n        /// <summary>\n        /// Returns the squared distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The squared distance between two vectors as an output parameter.</param>\n        public static void DistanceSquared(ref Vector2 value1, ref Vector2 value2, out float result)\n        {\n            float v1 = value1.X - value2.X, v2 = value1.Y - value2.Y;\n            result = (v1 * v1) + (v2 * v2);\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector2\"/> by the components of another <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector2\"/>.</param>\n        /// <returns>The result of dividing the vectors.</returns>\n        public static Vector2 Divide(Vector2 left, Vector2 right)\n        {\n            left.X /= right.X;\n            left.Y /= right.Y;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector2\"/> by the components of another <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"result\">The result of dividing the vectors as an output parameter.</param>\n        public static void Divide(ref Vector2 left, ref Vector2 right, out Vector2 result)\n        {\n            result.X = left.X / right.X;\n            result.Y = left.Y / right.Y;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector2\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <returns>The result of dividing a vector by a scalar.</returns>\n        public static Vector2 Divide(Vector2 left, float right)\n        {\n            float factor = 1 / right;\n            left.X *= factor;\n            left.Y *= factor;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector2\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <param name=\"result\">The result of dividing a vector by a scalar as an output parameter.</param>\n        public static void Divide(ref Vector2 left, float right, out Vector2 result)\n        {\n            float factor = 1 / right;\n            result.X = left.X * factor;\n            result.Y = left.Y * factor;\n        }\n\n        /// <summary>\n        /// Returns a dot product of two vectors.\n        /// </summary>\n        /// <param name=\"left\">The first vector.</param>\n        /// <param name=\"right\">The second vector.</param>\n        /// <returns>The dot product of two vectors.</returns>\n        public static float Dot(Vector2 left, Vector2 right)\n        {\n            return left.X * right.X + left.Y * right.Y;\n        }\n\n        /// <summary>\n        /// Returns a dot product of two vectors.\n        /// </summary>\n        /// <param name=\"left\">The first vector.</param>\n        /// <param name=\"right\">The second vector.</param>\n        /// <param name=\"result\">The dot product of two vectors as an output parameter.</param>\n        public static void Dot(ref Vector2 left, ref Vector2 right, out float result)\n        {\n            result = left.X * right.X + left.Y * right.Y;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is Vector2)\n            {\n                return Equals((Vector2)obj);\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Vector2\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Vector2 other)\n        {\n            return (X == other.X) && (Y == other.Y);\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector2\"/> towards negative infinity.\n        /// </summary>\n        public void Floor()\n        {\n            X = (float)Math.Floor(X);\n            Y = (float)Math.Floor(Y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains members from another vector rounded towards negative infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector2\"/>.</returns>\n        public static Vector2 Floor(Vector2 value)\n        {\n            value.X = (float)Math.Floor(value.X);\n            value.Y = (float)Math.Floor(value.Y);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains members from another vector rounded towards negative infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector2\"/>.</param>\n        public static void Floor(ref Vector2 value, out Vector2 result)\n        {\n            result.X = (float)Math.Floor(value.X);\n            result.Y = (float)Math.Floor(value.Y);\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Vector2\"/>.</returns>\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (X.GetHashCode() * 397) ^ Y.GetHashCode();\n            }\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains hermite spline interpolation.\n        /// </summary>\n        /// <param name=\"value1\">The first position vector.</param>\n        /// <param name=\"tangent1\">The first tangent vector.</param>\n        /// <param name=\"value2\">The second position vector.</param>\n        /// <param name=\"tangent2\">The second tangent vector.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <returns>The hermite spline interpolation vector.</returns>\n        public static Vector2 Hermite(Vector2 value1, Vector2 tangent1, Vector2 value2, Vector2 tangent2, float amount)\n        {\n            return new Vector2(MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount), MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains hermite spline interpolation.\n        /// </summary>\n        /// <param name=\"value1\">The first position vector.</param>\n        /// <param name=\"tangent1\">The first tangent vector.</param>\n        /// <param name=\"value2\">The second position vector.</param>\n        /// <param name=\"tangent2\">The second tangent vector.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <param name=\"result\">The hermite spline interpolation vector as an output parameter.</param>\n        public static void Hermite(ref Vector2 value1, ref Vector2 tangent1, ref Vector2 value2, ref Vector2 tangent2, float amount, out Vector2 result)\n        {\n            result.X = MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount);\n            result.Y = MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount);\n        }\n\n        /// <summary>\n        /// Returns the length of this <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <returns>The length of this <see cref=\"Vector2\"/>.</returns>\n        public float Length()\n        {\n            return (float)Math.Sqrt((X * X) + (Y * Y));\n        }\n\n        /// <summary>\n        /// Returns the squared length of this <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <returns>The squared length of this <see cref=\"Vector2\"/>.</returns>\n        public float LengthSquared()\n        {\n            return (X * X) + (Y * Y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains linear interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <returns>The result of linear interpolation of the specified vectors.</returns>\n        public static Vector2 Lerp(Vector2 start, Vector2 end, float amount)\n        {\n            Vector2 result;\n            result.X = MathHelper.Lerp(start.X, end.X, amount);\n            result.Y = MathHelper.Lerp(start.Y, end.Y, amount);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains linear interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <param name=\"result\">The result of linear interpolation of the specified vectors as an output parameter.</param>\n        public static void Lerp(ref Vector2 start, ref Vector2 end, float amount, out Vector2 result)\n        {\n            result.X = MathHelper.Lerp(start.X, end.X, amount);\n            result.Y = MathHelper.Lerp(start.Y, end.Y, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains linear interpolation of the specified vectors.\n        /// Uses <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for the interpolation.\n        /// Less efficient but more precise compared to <see cref=\"Vector2.Lerp(Vector2, Vector2, float)\"/>.\n        /// See remarks section of <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for more info.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <returns>The result of linear interpolation of the specified vectors.</returns>\n        public static Vector2 LerpPrecise(Vector2 start, Vector2 end, float amount)\n        {\n            Vector2 result;\n            result.X = MathHelper.LerpPrecise(start.X, end.X, amount);\n            result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains linear interpolation of the specified vectors.\n        /// Uses <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for the interpolation.\n        /// Less efficient but more precise compared to <see cref=\"Vector2.Lerp(ref Vector2, ref Vector2, float, out Vector2)\"/>.\n        /// See remarks section of <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for more info.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <param name=\"result\">The result of linear interpolation of the specified vectors as an output parameter.</param>\n        public static void LerpPrecise(ref Vector2 start, ref Vector2 end, float amount, out Vector2 result)\n        { \n            result.X = MathHelper.LerpPrecise(start.X, end.X, amount);\n            result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a maximal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The <see cref=\"Vector2\"/> with maximal values from the two vectors.</returns>\n        public static Vector2 Max(Vector2 value1, Vector2 value2)\n        {\n            return new Vector2(value1.X > value2.X ? value1.X : value2.X,\n                               value1.Y > value2.Y ? value1.Y : value2.Y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a maximal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The <see cref=\"Vector2\"/> with maximal values from the two vectors as an output parameter.</param>\n        public static void Max(ref Vector2 value1, ref Vector2 value2, out Vector2 result)\n        {\n            result.X = value1.X > value2.X ? value1.X : value2.X;\n            result.Y = value1.Y > value2.Y ? value1.Y : value2.Y;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a minimal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The <see cref=\"Vector2\"/> with minimal values from the two vectors.</returns>\n        public static Vector2 Min(Vector2 value1, Vector2 value2)\n        {\n            return new Vector2(value1.X < value2.X ? value1.X : value2.X,\n                               value1.Y < value2.Y ? value1.Y : value2.Y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a minimal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The <see cref=\"Vector2\"/> with minimal values from the two vectors as an output parameter.</param>\n        public static void Min(ref Vector2 value1, ref Vector2 value2, out Vector2 result)\n        {\n            result.X = value1.X < value2.X ? value1.X : value2.X;\n            result.Y = value1.Y < value2.Y ? value1.Y : value2.Y;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a multiplication of two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector2\"/>.</param>\n        /// <returns>The result of the vector multiplication.</returns>\n        public static Vector2 Multiply(Vector2 left, Vector2 right)\n        {\n            left.X *= right.X;\n            left.Y *= right.Y;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a multiplication of two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"result\">The result of the vector multiplication as an output parameter.</param>\n        public static void Multiply(ref Vector2 left, ref Vector2 right, out Vector2 result)\n        {\n            result.X = left.X * right.X;\n            result.Y = left.Y * right.Y;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a multiplication of <see cref=\"Vector2\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <returns>The result of the vector multiplication with a scalar.</returns>\n        public static Vector2 Multiply(Vector2 left, float right)\n        {\n            left.X *= right;\n            left.Y *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a multiplication of <see cref=\"Vector2\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <param name=\"result\">The result of the multiplication with a scalar as an output parameter.</param>\n        public static void Multiply(ref Vector2 left, float right, out Vector2 result)\n        {\n            result.X = left.X * right;\n            result.Y = left.Y * right;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains the specified vector inversion.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <returns>The result of the vector inversion.</returns>\n        public static Vector2 Negate(Vector2 value)\n        {\n            value.X = -value.X;\n            value.Y = -value.Y;\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains the specified vector inversion.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"result\">The result of the vector inversion as an output parameter.</param>\n        public static void Negate(ref Vector2 value, out Vector2 result)\n        {\n            result.X = -value.X;\n            result.Y = -value.Y;\n        }\n\n        /// <summary>\n        /// Turns this <see cref=\"Vector2\"/> to a unit vector with the same direction.\n        /// </summary>\n        public void Normalize()\n        {\n            float val = 1.0f / (float)Math.Sqrt((X * X) + (Y * Y));\n            X *= val;\n            Y *= val;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a normalized values from another vector.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <returns>Unit vector.</returns>\n        public static Vector2 Normalize(Vector2 value)\n        {\n            float val = 1.0f / (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y));\n            value.X *= val;\n            value.Y *= val;\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a normalized values from another vector.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"result\">Unit vector as an output parameter.</param>\n        public static void Normalize(ref Vector2 value, out Vector2 result)\n        {\n            float val = 1.0f / (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y));\n            result.X = value.X * val;\n            result.Y = value.Y * val;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains reflect vector of the given vector and normal.\n        /// </summary>\n        /// <param name=\"vector\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"normal\">Reflection normal.</param>\n        /// <returns>Reflected vector.</returns>\n        public static Vector2 Reflect(Vector2 vector, Vector2 normal)\n        {\n            Vector2 result;\n            float val = 2.0f * ((vector.X * normal.X) + (vector.Y * normal.Y));\n            result.X = vector.X - (normal.X * val);\n            result.Y = vector.Y - (normal.Y * val);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains reflect vector of the given vector and normal.\n        /// </summary>\n        /// <param name=\"vector\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"normal\">Reflection normal.</param>\n        /// <param name=\"result\">Reflected vector as an output parameter.</param>\n        public static void Reflect(ref Vector2 vector, ref Vector2 normal, out Vector2 result)\n        {\n            float val = 2.0f * ((vector.X * normal.X) + (vector.Y * normal.Y));\n            result.X = vector.X - (normal.X * val);\n            result.Y = vector.Y - (normal.Y * val);\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector2\"/> to the nearest integer value.\n        /// </summary>\n        public void Round()\n        {\n            X = (float)Math.Round(X);\n            Y = (float)Math.Round(Y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains members from another vector rounded to the nearest integer value.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector2\"/>.</returns>\n        public static Vector2 Round(Vector2 value)\n        {\n            value.X = (float)Math.Round(value.X);\n            value.Y = (float)Math.Round(value.Y);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains members from another vector rounded to the nearest integer value.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector2\"/>.</param>\n        public static void Round(ref Vector2 value, out Vector2 result)\n        {\n            result.X = (float)Math.Round(value.X);\n            result.Y = (float)Math.Round(value.Y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains cubic interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"value2\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"amount\">Weighting value.</param>\n        /// <returns>Cubic interpolation of the specified vectors.</returns>\n        public static Vector2 SmoothStep(Vector2 value1, Vector2 value2, float amount)\n        {\n            return new Vector2(\n                MathHelper.SmoothStep(value1.X, value2.X, amount),\n                MathHelper.SmoothStep(value1.Y, value2.Y, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains cubic interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"value2\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"amount\">Weighting value.</param>\n        /// <param name=\"result\">Cubic interpolation of the specified vectors as an output parameter.</param>\n        public static void SmoothStep(ref Vector2 value1, ref Vector2 value2, float amount, out Vector2 result)\n        {\n            result.X = MathHelper.SmoothStep(value1.X, value2.X, amount);\n            result.Y = MathHelper.SmoothStep(value1.Y, value2.Y, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains subtraction of on <see cref=\"Vector2\"/> from a another.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector2\"/>.</param>\n        /// <returns>The result of the vector subtraction.</returns>\n        public static Vector2 Subtract(Vector2 left, Vector2 right)\n        {\n            left.X -= right.X;\n            left.Y -= right.Y;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains subtraction of on <see cref=\"Vector2\"/> from a another.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"result\">The result of the vector subtraction as an output parameter.</param>\n        public static void Subtract(ref Vector2 left, ref Vector2 right, out Vector2 result)\n        {\n            result.X = left.X - right.X;\n            result.Y = left.Y - right.Y;\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Vector2\"/> in the format:\n        /// {X:[<see cref=\"X\"/>] Y:[<see cref=\"Y\"/>]}\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"Vector2\"/>.</returns>\n        public override string ToString()\n        {\n            return String.Format(\"{{X: {0}, Y: {1} }}\", X, Y);\n        }\n\n        /// <summary>\n        /// Gets a <see cref=\"Point\"/> representation for this object.\n        /// </summary>\n        /// <returns>A <see cref=\"Point\"/> representation for this object.</returns>\n        public Point ToPoint()\n        {\n            return new Point((int) X,(int) Y);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"position\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <returns>Transformed <see cref=\"Vector2\"/>.</returns>\n        public static Vector2 Transform(Vector2 position, Matrix matrix)\n        {\n            return new Vector2((position.X * matrix.M11) + (position.Y * matrix.M21) + matrix.M41, (position.X * matrix.M12) + (position.Y * matrix.M22) + matrix.M42);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"position\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector2\"/> as an output parameter.</param>\n        public static void Transform(ref Vector2 position, ref Matrix matrix, out Vector2 result)\n        {\n            var x = (position.X * matrix.M11) + (position.Y * matrix.M21) + matrix.M41;\n            var y = (position.X * matrix.M12) + (position.Y * matrix.M22) + matrix.M42;\n            result.X = x;\n            result.Y = y;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Quaternion\"/>, representing the rotation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <returns>Transformed <see cref=\"Vector2\"/>.</returns>\n        public static Vector2 Transform(Vector2 value, Quaternion rotation)\n        {\n            Transform(ref value, ref rotation, out value);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Quaternion\"/>, representing the rotation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector2\"/> as an output parameter.</param>\n        public static void Transform(ref Vector2 value, ref Quaternion rotation, out Vector2 result)\n        {\n            var rot1 = new Vector3(rotation.X + rotation.X, rotation.Y + rotation.Y, rotation.Z + rotation.Z);\n            var rot2 = new Vector3(rotation.X, rotation.X, rotation.W);\n            var rot3 = new Vector3(1, rotation.Y, rotation.Z);\n            var rot4 = rot1*rot2;\n            var rot5 = rot1*rot3;\n\n            var v = new Vector2();\n            v.X = (float)((double)value.X * (1.0 - (double)rot5.Y - (double)rot5.Z) + (double)value.Y * ((double)rot4.Y - (double)rot4.Z));\n            v.Y = (float)((double)value.X * ((double)rot4.Y + (double)rot4.Z) + (double)value.Y * (1.0 - (double)rot4.X - (double)rot5.Z));\n            result.X = v.X;\n            result.Y = v.Y;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Complex\"/> number.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"complex\">The transformation <see cref=\"Complex\"/> number which contains rotation and magnitude transformation.</param>\n        /// <returns>Transformed <see cref=\"Vector2\"/>.</returns>\n        public static Vector2 Transform(Vector2 value, Complex complex)\n        {\n            return new Vector2(value.X * complex.R - value.Y * complex.i,\n                               value.Y * complex.R + value.X * complex.i);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Complex\"/> number.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"complex\">The transformation <see cref=\"Complex\"/> which contains rotation and magnitude transformation.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector2\"/> as an output parameter.</param>\n        public static void Transform(ref Vector2 value, ref Complex complex, out Vector2 result)\n        {\n            result = new Vector2(value.X * complex.R - value.Y * complex.i,\n                                 value.Y * complex.R + value.X * complex.i);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Pose2\"/> number.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"pose\">The transformation <see cref=\"Pose2\"/> which contains rotation and translation transformation.</param>\n        /// <returns>Transformed <see cref=\"Vector2\"/>.</returns>\n        public static Vector2 Transform(Vector2 value, Pose2 pose)\n        {\n            Vector2 result;\n            Vector2.Transform(ref value, ref pose.Orientation, out result);\n            Vector2.Add(ref result, ref pose.Translation, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Apply transformation on vectors within array of <see cref=\"Vector2\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector2\"/> should be written.</param>\n        /// <param name=\"length\">The number of vectors to be transformed.</param>\n        public static void Transform\n        (\n            Vector2[] sourceArray, int sourceIndex,\n            ref Matrix matrix,\n            Vector2[] destinationArray, int destinationIndex,\n            int length\n        )\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if (sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n\n            for (int x = 0; x < length; x++)\n            {\n                Vector2.Transform(ref sourceArray[sourceIndex + x], ref matrix, out destinationArray[destinationIndex + x]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on vectors within array of <see cref=\"Vector2\"/> by the specified <see cref=\"Quaternion\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector2\"/> should be written.</param>\n        /// <param name=\"length\">The number of vectors to be transformed.</param>\n        public static void Transform\n        (\n            Vector2[] sourceArray, int sourceIndex,\n            ref Quaternion rotation,\n            Vector2[] destinationArray, int destinationIndex,\n            int length\n        )\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if (sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n\n            for (int x = 0; x < length; x++)\n            {\n                Vector2.Transform(ref sourceArray[sourceIndex + x], ref rotation, out destinationArray[destinationIndex + x]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on vectors within array of <see cref=\"Vector2\"/> by the specified <see cref=\"Complex\"/> number and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"complex\">The transformation <see cref=\"Complex\"/> number.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector2\"/> should be written.</param>\n        /// <param name=\"length\">The number of vectors to be transformed.</param>\n        public static void Transform\n        (\n            Vector2[] sourceArray, int sourceIndex,\n            ref Complex complex,\n            Vector2[] destinationArray, int destinationIndex,\n            int length\n        )\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if (sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n\n            for (int x = 0; x < length; x++)\n            {\n                Vector2.Transform(ref sourceArray[sourceIndex + x], ref complex, out destinationArray[destinationIndex + x]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on all vectors within array of <see cref=\"Vector2\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void Transform(Vector2[] sourceArray, ref Matrix matrix, Vector2[] destinationArray)\n        {\n            Vector2.Transform(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length);\n        }\n\n        /// <summary>\n        /// Apply transformation on all vectors within array of <see cref=\"Vector2\"/> by the specified <see cref=\"Quaternion\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void Transform(Vector2[] sourceArray, ref Quaternion rotation, Vector2[] destinationArray)\n        {\n            Vector2.Transform(sourceArray, 0, ref rotation, destinationArray, 0, sourceArray.Length);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of the specified normal by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"normal\">Source <see cref=\"Vector2\"/> which represents a normal vector.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <returns>Transformed normal.</returns>\n        public static Vector2 TransformNormal(Vector2 normal, Matrix matrix)\n        {\n            return new Vector2((normal.X * matrix.M11) + (normal.Y * matrix.M21),(normal.X * matrix.M12) + (normal.Y * matrix.M22));\n        }\n\n        /// <summary>\n        /// Apply transformation on all vectors within array of <see cref=\"Vector2\"/> by the specified <see cref=\"Complex\"/> number and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"complex\">The <see cref=\"Complex\"/> number which contains rotation and magnitude transformation.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void Transform(Vector2[] sourceArray, ref Complex complex, Vector2[] destinationArray)\n        {\n            Vector2.Transform(sourceArray, 0, ref complex, destinationArray, 0, sourceArray.Length);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector2\"/> that contains a transformation of the specified normal by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"normal\">Source <see cref=\"Vector2\"/> which represents a normal vector.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Transformed normal as an output parameter.</param>\n        public static void TransformNormal(ref Vector2 normal, ref Matrix matrix, out Vector2 result)\n        {\n            var x = (normal.X * matrix.M11) + (normal.Y * matrix.M21);\n            var y = (normal.X * matrix.M12) + (normal.Y * matrix.M22);\n            result.X = x;\n            result.Y = y;\n        }\n\n        /// <summary>\n        /// Apply transformation on normals within array of <see cref=\"Vector2\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector2\"/> should be written.</param>\n        /// <param name=\"length\">The number of normals to be transformed.</param>\n        public static void TransformNormal\n        (\n            Vector2[] sourceArray, int sourceIndex,\n            ref Matrix matrix,\n            Vector2[] destinationArray, int destinationIndex,\n            int length\n        )\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if (sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n\n            for (int i = 0; i < length; i++)\n            {\n                Vector2.TransformNormal(ref sourceArray[sourceIndex + i], ref matrix, out destinationArray[destinationIndex + i]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on all normals within array of <see cref=\"Vector2\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void TransformNormal(Vector2[] sourceArray, ref Matrix matrix,Vector2[] destinationArray)\n        {\n            Vector2.TransformNormal(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length);\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Vector2\"/>.\n        /// </summary>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        public void Deconstruct(out float x, out float y)\n        {\n            x = X;\n            y = Y;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Vector3.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\n#if NET8_0_OR_GREATER\nusing System.Runtime.CompilerServices;\nusing SysNumerics = System.Numerics;\n#endif\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Describes a 3D-vector.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    [TypeConverter(\"Microsoft.Xna.Framework.Design.Vector3Converter, Xna.Framework.Design\")]\n    public struct Vector3 : IEquatable<Vector3>\n    {\n        #region Private Fields\n\n        private static readonly Vector3 zero = new Vector3(0f, 0f, 0f);\n        private static readonly Vector3 one = new Vector3(1f, 1f, 1f);\n        private static readonly Vector3 unitX = new Vector3(1f, 0f, 0f);\n        private static readonly Vector3 unitY = new Vector3(0f, 1f, 0f);\n        private static readonly Vector3 unitZ = new Vector3(0f, 0f, 1f);\n        private static readonly Vector3 up = new Vector3(0f, 1f, 0f);\n        private static readonly Vector3 down = new Vector3(0f, -1f, 0f);\n        private static readonly Vector3 right = new Vector3(1f, 0f, 0f);\n        private static readonly Vector3 left = new Vector3(-1f, 0f, 0f);\n        private static readonly Vector3 forward = new Vector3(0f, 0f, -1f);\n        private static readonly Vector3 backward = new Vector3(0f, 0f, 1f);\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The x coordinate of this <see cref=\"Vector3\"/>.\n        /// </summary>\n        [DataMember]\n        public float X;\n\n        /// <summary>\n        /// The y coordinate of this <see cref=\"Vector3\"/>.\n        /// </summary>\n        [DataMember]\n        public float Y;\n\n        /// <summary>\n        /// The z coordinate of this <see cref=\"Vector3\"/>.\n        /// </summary>\n        [DataMember]\n        public float Z;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 0, 0, 0.\n        /// </summary>\n        public static Vector3 Zero\n        {\n            get { return zero; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 1, 1, 1.\n        /// </summary>\n        public static Vector3 One\n        {\n            get { return one; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 1, 0, 0.\n        /// </summary>\n        public static Vector3 UnitX\n        {\n            get { return unitX; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 0, 1, 0.\n        /// </summary>\n        public static Vector3 UnitY\n        {\n            get { return unitY; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 0, 0, 1.\n        /// </summary>\n        public static Vector3 UnitZ\n        {\n            get { return unitZ; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 0, 1, 0.\n        /// </summary>\n        public static Vector3 Up\n        {\n            get { return up; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 0, -1, 0.\n        /// </summary>\n        public static Vector3 Down\n        {\n            get { return down; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 1, 0, 0.\n        /// </summary>\n        public static Vector3 Right\n        {\n            get { return right; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components -1, 0, 0.\n        /// </summary>\n        public static Vector3 Left\n        {\n            get { return left; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 0, 0, -1.\n        /// </summary>\n        public static Vector3 Forward\n        {\n            get { return forward; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector3\"/> with components 0, 0, 1.\n        /// </summary>\n        public static Vector3 Backward\n        {\n            get { return backward; }\n        }\n\n        #endregion\n\n        #region Internal Properties\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    this.X.ToString(), \"  \",\n                    this.Y.ToString(), \"  \",\n                    this.Z.ToString()\n                );\n            }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Constructs a 3d vector with X, Y and Z from three values.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate in 3d-space.</param>\n        /// <param name=\"y\">The y coordinate in 3d-space.</param>\n        /// <param name=\"z\">The z coordinate in 3d-space.</param>\n        public Vector3(float x, float y, float z)\n        {\n            this.X = x;\n            this.Y = y;\n            this.Z = z;\n        }\n\n        /// <summary>\n        /// Constructs a 3d vector with X, Y and Z set to the same value.\n        /// </summary>\n        /// <param name=\"value\">The x, y and z coordinates in 3d-space.</param>\n        public Vector3(float value)\n        {\n            this.X = value;\n            this.Y = value;\n            this.Z = value;\n        }\n\n        /// <summary>\n        /// Constructs a 3d vector with X, Y from <see cref=\"Vector2\"/> and Z from a scalar.\n        /// </summary>\n        /// <param name=\"value\">The x and y coordinates in 3d-space.</param>\n        /// <param name=\"z\">The z coordinate in 3d-space.</param>\n        public Vector3(Vector2 value, float z)\n        {\n            this.X = value.X;\n            this.Y = value.Y;\n            this.Z = z;\n        }\n        \n        #endregion\n        \n        #region Public Methods\n\n        /// <summary>\n        /// Performs vector addition on <paramref name=\"left\"/> and <paramref name=\"right\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first vector to add.</param>\n        /// <param name=\"right\">The second vector to add.</param>\n        /// <returns>The result of the vector addition.</returns>\n        public static Vector3 Add(Vector3 left, Vector3 right)\n        {\n            left.X += right.X;\n            left.Y += right.Y;\n            left.Z += right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Performs vector addition on <paramref name=\"left\"/> and\n        /// <paramref name=\"right\"/>, storing the result of the\n        /// addition in <paramref name=\"result\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first vector to add.</param>\n        /// <param name=\"right\">The second vector to add.</param>\n        /// <param name=\"result\">The result of the vector addition.</param>\n        public static void Add(ref Vector3 left, ref Vector3 right, out Vector3 result)\n        {\n            result.X = left.X + right.X;\n            result.Y = left.Y + right.Y;\n            result.Z = left.Z + right.Z;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 3d-triangle.\n        /// </summary>\n        /// <param name=\"value1\">The first vector of 3d-triangle.</param>\n        /// <param name=\"value2\">The second vector of 3d-triangle.</param>\n        /// <param name=\"value3\">The third vector of 3d-triangle.</param>\n        /// <param name=\"amount1\">Barycentric scalar <c>b2</c> which represents a weighting factor towards second vector of 3d-triangle.</param>\n        /// <param name=\"amount2\">Barycentric scalar <c>b3</c> which represents a weighting factor towards third vector of 3d-triangle.</param>\n        /// <returns>The cartesian translation of barycentric coordinates.</returns>\n        public static Vector3 Barycentric(Vector3 value1, Vector3 value2, Vector3 value3, float amount1, float amount2)\n        {\n            return new Vector3(\n                MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2),\n                MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2),\n                MathHelper.Barycentric(value1.Z, value2.Z, value3.Z, amount1, amount2));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 3d-triangle.\n        /// </summary>\n        /// <param name=\"value1\">The first vector of 3d-triangle.</param>\n        /// <param name=\"value2\">The second vector of 3d-triangle.</param>\n        /// <param name=\"value3\">The third vector of 3d-triangle.</param>\n        /// <param name=\"amount1\">Barycentric scalar <c>b2</c> which represents a weighting factor towards second vector of 3d-triangle.</param>\n        /// <param name=\"amount2\">Barycentric scalar <c>b3</c> which represents a weighting factor towards third vector of 3d-triangle.</param>\n        /// <param name=\"result\">The cartesian translation of barycentric coordinates as an output parameter.</param>\n        public static void Barycentric(ref Vector3 value1, ref Vector3 value2, ref Vector3 value3, float amount1, float amount2, out Vector3 result)\n        {\n            result.X = MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2);\n            result.Y = MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2);\n            result.Z = MathHelper.Barycentric(value1.Z, value2.Z, value3.Z, amount1, amount2);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains CatmullRom interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector in interpolation.</param>\n        /// <param name=\"value2\">The second vector in interpolation.</param>\n        /// <param name=\"value3\">The third vector in interpolation.</param>\n        /// <param name=\"value4\">The fourth vector in interpolation.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <returns>The result of CatmullRom interpolation.</returns>\n        public static Vector3 CatmullRom(Vector3 value1, Vector3 value2, Vector3 value3, Vector3 value4, float amount)\n        {\n            return new Vector3(\n                MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount),\n                MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount),\n                MathHelper.CatmullRom(value1.Z, value2.Z, value3.Z, value4.Z, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains CatmullRom interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector in interpolation.</param>\n        /// <param name=\"value2\">The second vector in interpolation.</param>\n        /// <param name=\"value3\">The third vector in interpolation.</param>\n        /// <param name=\"value4\">The fourth vector in interpolation.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <param name=\"result\">The result of CatmullRom interpolation as an output parameter.</param>\n        public static void CatmullRom(ref Vector3 value1, ref Vector3 value2, ref Vector3 value3, ref Vector3 value4, float amount, out Vector3 result)\n        {\n            result.X = MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount);\n            result.Y = MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount);\n            result.Z = MathHelper.CatmullRom(value1.Z, value2.Z, value3.Z, value4.Z, amount);\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector3\"/> towards positive infinity.\n        /// </summary>\n        public void Ceiling()\n        {\n            X = (float)Math.Ceiling(X);\n            Y = (float)Math.Ceiling(Y);\n            Z = (float)Math.Ceiling(Z);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains members from another vector rounded towards positive infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector3\"/>.</returns>\n        public static Vector3 Ceiling(Vector3 value)\n        {\n            value.X = (float)Math.Ceiling(value.X);\n            value.Y = (float)Math.Ceiling(value.Y);\n            value.Z = (float)Math.Ceiling(value.Z);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains members from another vector rounded towards positive infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector3\"/>.</param>\n        public static void Ceiling(ref Vector3 value, out Vector3 result)\n        {\n            result.X = (float)Math.Ceiling(value.X);\n            result.Y = (float)Math.Ceiling(value.Y);\n            result.Z = (float)Math.Ceiling(value.Z);\n        }\n\n        /// <summary>\n        /// Clamps the specified value within a range.\n        /// </summary>\n        /// <param name=\"value1\">The value to clamp.</param>\n        /// <param name=\"min\">The min value.</param>\n        /// <param name=\"max\">The max value.</param>\n        /// <returns>The clamped value.</returns>\n        public static Vector3 Clamp(Vector3 value1, Vector3 min, Vector3 max)\n        {\n            return new Vector3(\n                MathHelper.Clamp(value1.X, min.X, max.X),\n                MathHelper.Clamp(value1.Y, min.Y, max.Y),\n                MathHelper.Clamp(value1.Z, min.Z, max.Z));\n        }\n\n        /// <summary>\n        /// Clamps the specified value within a range.\n        /// </summary>\n        /// <param name=\"value1\">The value to clamp.</param>\n        /// <param name=\"min\">The min value.</param>\n        /// <param name=\"max\">The max value.</param>\n        /// <param name=\"result\">The clamped value as an output parameter.</param>\n        public static void Clamp(ref Vector3 value1, ref Vector3 min, ref Vector3 max, out Vector3 result)\n        {\n            result.X = MathHelper.Clamp(value1.X, min.X, max.X);\n            result.Y = MathHelper.Clamp(value1.Y, min.Y, max.Y);\n            result.Z = MathHelper.Clamp(value1.Z, min.Z, max.Z);\n        }\n\n        /// <summary>\n        /// Computes the cross product of two vectors.\n        /// </summary>\n        /// <param name=\"left\">The first vector.</param>\n        /// <param name=\"right\">The second vector.</param>\n        /// <returns>The cross product of two vectors.</returns>\n        public static Vector3 Cross(Vector3 left, Vector3 right)\n        {\n            Vector3 result;\n            result.X =  (left.Y * right.Z) - (right.Y * left.Z);\n            result.Y = -(left.X * right.Z) + (right.X * left.Z);\n            result.Z =  (left.X * right.Y) - (right.X * left.Y);\n            return result;\n        }\n\n        /// <summary>\n        /// Computes the cross product of two vectors.\n        /// </summary>\n        /// <param name=\"left\">The first vector.</param>\n        /// <param name=\"right\">The second vector.</param>\n        /// <param name=\"result\">The cross product of two vectors as an output parameter.</param>\n        public static void Cross(ref Vector3 left, ref Vector3 right, out Vector3 result)\n        {\n            var x =  (left.Y * right.Z) - (right.Y * left.Z);\n            var y = -(left.X * right.Z) + (right.X * left.Z);\n            var z =  (left.X * right.Y) - (right.X * left.Y);\n            result.X = x;\n            result.Y = y;\n            result.Z = z;\n        }\n\n        /// <summary>\n        /// Returns the distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The distance between two vectors.</returns>\n        public static float Distance(Vector3 value1, Vector3 value2)\n        {\n            float result;\n            DistanceSquared(ref value1, ref value2, out result);\n            return (float)Math.Sqrt(result);\n        }\n\n        /// <summary>\n        /// Returns the distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The distance between two vectors as an output parameter.</param>\n        public static void Distance(ref Vector3 value1, ref Vector3 value2, out float result)\n        {\n            DistanceSquared(ref value1, ref value2, out result);\n            result = (float)Math.Sqrt(result);\n        }\n\n        /// <summary>\n        /// Returns the squared distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The squared distance between two vectors.</returns>\n        public static float DistanceSquared(Vector3 value1, Vector3 value2)\n        {\n            return  (value1.X - value2.X) * (value1.X - value2.X) +\n                    (value1.Y - value2.Y) * (value1.Y - value2.Y) +\n                    (value1.Z - value2.Z) * (value1.Z - value2.Z);\n        }\n\n        /// <summary>\n        /// Returns the squared distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The squared distance between two vectors as an output parameter.</param>\n        public static void DistanceSquared(ref Vector3 value1, ref Vector3 value2, out float result)\n        {\n            result = (value1.X - value2.X) * (value1.X - value2.X) +\n                     (value1.Y - value2.Y) * (value1.Y - value2.Y) +\n                     (value1.Z - value2.Z) * (value1.Z - value2.Z);\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector3\"/> by the components of another <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector3\"/>.</param>\n        /// <returns>The result of dividing the vectors.</returns>\n        public static Vector3 Divide(Vector3 left, Vector3 right)\n        {\n            left.X /= right.X;\n            left.Y /= right.Y;\n            left.Z /= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector3\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <returns>The result of dividing a vector by a scalar.</returns>\n        public static Vector3 Divide(Vector3 left, float right)\n        {\n            float factor = 1 / right;\n            left.X *= factor;\n            left.Y *= factor;\n            left.Z *= factor;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector3\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <param name=\"result\">The result of dividing a vector by a scalar as an output parameter.</param>\n        public static void Divide(ref Vector3 left, float right, out Vector3 result)\n        {\n            float factor = 1 / right;\n            result.X = left.X * factor;\n            result.Y = left.Y * factor;\n            result.Z = left.Z * factor;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector3\"/> by the components of another <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"result\">The result of dividing the vectors as an output parameter.</param>\n        public static void Divide(ref Vector3 left, ref Vector3 right, out Vector3 result)\n        {\n            result.X = left.X / right.X;\n            result.Y = left.Y / right.Y;\n            result.Z = left.Z / right.Z;\n        }\n\n        /// <summary>\n        /// Returns a dot product of two vectors.\n        /// </summary>\n        /// <param name=\"left\">The first vector.</param>\n        /// <param name=\"right\">The second vector.</param>\n        /// <returns>The dot product of two vectors.</returns>\n        public static float Dot(Vector3 left, Vector3 right)\n        {\n            return left.X * right.X + left.Y * right.Y + left.Z * right.Z;\n        }\n\n        /// <summary>\n        /// Returns a dot product of two vectors.\n        /// </summary>\n        /// <param name=\"left\">The first vector.</param>\n        /// <param name=\"right\">The second vector.</param>\n        /// <param name=\"result\">The dot product of two vectors as an output parameter.</param>\n        public static void Dot(ref Vector3 left, ref Vector3 right, out float result)\n        {\n            result = left.X * right.X + left.Y * right.Y + left.Z * right.Z;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (!(obj is Vector3))\n                return false;\n\n            var other = (Vector3)obj;\n            return  X == other.X &&\n                    Y == other.Y &&\n                    Z == other.Z;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Vector3\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Vector3 other)\n        {\n            return  X == other.X && \n                    Y == other.Y &&\n                    Z == other.Z;\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector3\"/> towards negative infinity.\n        /// </summary>\n        public void Floor()\n        {\n            X = (float)Math.Floor(X);\n            Y = (float)Math.Floor(Y);\n            Z = (float)Math.Floor(Z);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains members from another vector rounded towards negative infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector3\"/>.</returns>\n        public static Vector3 Floor(Vector3 value)\n        {\n            value.X = (float)Math.Floor(value.X);\n            value.Y = (float)Math.Floor(value.Y);\n            value.Z = (float)Math.Floor(value.Z);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains members from another vector rounded towards negative infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector3\"/>.</param>\n        public static void Floor(ref Vector3 value, out Vector3 result)\n        {\n            result.X = (float)Math.Floor(value.X);\n            result.Y = (float)Math.Floor(value.Y);\n            result.Z = (float)Math.Floor(value.Z);\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Vector3\"/>.</returns>\n        public override int GetHashCode() {\n            unchecked\n            {\n                var hashCode = X.GetHashCode();\n                hashCode = (hashCode * 397) ^ Y.GetHashCode();\n                hashCode = (hashCode * 397) ^ Z.GetHashCode();\n                return hashCode;\n            }\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains hermite spline interpolation.\n        /// </summary>\n        /// <param name=\"value1\">The first position vector.</param>\n        /// <param name=\"tangent1\">The first tangent vector.</param>\n        /// <param name=\"value2\">The second position vector.</param>\n        /// <param name=\"tangent2\">The second tangent vector.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <returns>The hermite spline interpolation vector.</returns>\n        public static Vector3 Hermite(Vector3 value1, Vector3 tangent1, Vector3 value2, Vector3 tangent2, float amount)\n        {\n            return new Vector3(MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount),\n                               MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount),\n                               MathHelper.Hermite(value1.Z, tangent1.Z, value2.Z, tangent2.Z, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains hermite spline interpolation.\n        /// </summary>\n        /// <param name=\"value1\">The first position vector.</param>\n        /// <param name=\"tangent1\">The first tangent vector.</param>\n        /// <param name=\"value2\">The second position vector.</param>\n        /// <param name=\"tangent2\">The second tangent vector.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <param name=\"result\">The hermite spline interpolation vector as an output parameter.</param>\n        public static void Hermite(ref Vector3 value1, ref Vector3 tangent1, ref Vector3 value2, ref Vector3 tangent2, float amount, out Vector3 result)\n        {\n            result.X = MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount);\n            result.Y = MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount);\n            result.Z = MathHelper.Hermite(value1.Z, tangent1.Z, value2.Z, tangent2.Z, amount);\n        }\n\n        /// <summary>\n        /// Returns the length of this <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <returns>The length of this <see cref=\"Vector3\"/>.</returns>\n        public float Length()\n        {\n            return (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z));\n        }\n\n        /// <summary>\n        /// Returns the squared length of this <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <returns>The squared length of this <see cref=\"Vector3\"/>.</returns>\n        public float LengthSquared()\n        {\n            return (X * X) + (Y * Y) + (Z * Z);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains linear interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <returns>The result of linear interpolation of the specified vectors.</returns>\n        public static Vector3 Lerp(Vector3 start, Vector3 end, float amount)\n        {\n            Vector3 result;\n            result.X = MathHelper.Lerp(start.X, end.X, amount);\n            result.Y = MathHelper.Lerp(start.Y, end.Y, amount);\n            result.Z = MathHelper.Lerp(start.Z, end.Z, amount);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains linear interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <param name=\"result\">The result of linear interpolation of the specified vectors as an output parameter.</param>\n        public static void Lerp(ref Vector3 start, ref Vector3 end, float amount, out Vector3 result)\n        {\n            result.X = MathHelper.Lerp(start.X, end.X, amount);\n            result.Y = MathHelper.Lerp(start.Y, end.Y, amount);\n            result.Z = MathHelper.Lerp(start.Z, end.Z, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains linear interpolation of the specified vectors.\n        /// Uses <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for the interpolation.\n        /// Less efficient but more precise compared to <see cref=\"Vector3.Lerp(Vector3, Vector3, float)\"/>.\n        /// See remarks section of <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for more info.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <returns>The result of linear interpolation of the specified vectors.</returns>\n        public static Vector3 LerpPrecise(Vector3 start, Vector3 end, float amount)\n        {\n            Vector3 result;\n            result.X = MathHelper.LerpPrecise(start.X, end.X, amount);\n            result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount);\n            result.Z = MathHelper.LerpPrecise(start.Z, end.Z, amount);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains linear interpolation of the specified vectors.\n        /// Uses <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for the interpolation.\n        /// Less efficient but more precise compared to <see cref=\"Vector3.Lerp(ref Vector3, ref Vector3, float, out Vector3)\"/>.\n        /// See remarks section of <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for more info.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <param name=\"result\">The result of linear interpolation of the specified vectors as an output parameter.</param>\n        public static void LerpPrecise(ref Vector3 start, ref Vector3 end, float amount, out Vector3 result)\n        {\n            result.X = MathHelper.LerpPrecise(start.X, end.X, amount);\n            result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount);\n            result.Z = MathHelper.LerpPrecise(start.Z, end.Z, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a maximal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The <see cref=\"Vector3\"/> with maximal values from the two vectors.</returns>\n        public static Vector3 Max(Vector3 value1, Vector3 value2)\n        {\n            return new Vector3(\n                MathHelper.Max(value1.X, value2.X),\n                MathHelper.Max(value1.Y, value2.Y),\n                MathHelper.Max(value1.Z, value2.Z));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a maximal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The <see cref=\"Vector3\"/> with maximal values from the two vectors as an output parameter.</param>\n        public static void Max(ref Vector3 value1, ref Vector3 value2, out Vector3 result)\n        {\n            result.X = MathHelper.Max(value1.X, value2.X);\n            result.Y = MathHelper.Max(value1.Y, value2.Y);\n            result.Z = MathHelper.Max(value1.Z, value2.Z);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a minimal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The <see cref=\"Vector3\"/> with minimal values from the two vectors.</returns>\n        public static Vector3 Min(Vector3 value1, Vector3 value2)\n        {\n            return new Vector3(\n                MathHelper.Min(value1.X, value2.X),\n                MathHelper.Min(value1.Y, value2.Y),\n                MathHelper.Min(value1.Z, value2.Z));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a minimal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The <see cref=\"Vector3\"/> with minimal values from the two vectors as an output parameter.</param>\n        public static void Min(ref Vector3 value1, ref Vector3 value2, out Vector3 result)\n        {\n            result.X = MathHelper.Min(value1.X, value2.X);\n            result.Y = MathHelper.Min(value1.Y, value2.Y);\n            result.Z = MathHelper.Min(value1.Z, value2.Z);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a multiplication of two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/>.</param>\n        /// <returns>The result of the vector multiplication.</returns>\n        public static Vector3 Multiply(Vector3 left, Vector3 right)\n        {\n            left.X *= right.X;\n            left.Y *= right.Y;\n            left.Z *= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a multiplication of <see cref=\"Vector3\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <returns>The result of the vector multiplication with a scalar.</returns>\n        public static Vector3 Multiply(Vector3 left, float right)\n        {\n            left.X *= right;\n            left.Y *= right;\n            left.Z *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a multiplication of <see cref=\"Vector3\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <param name=\"result\">The result of the multiplication with a scalar as an output parameter.</param>\n        public static void Multiply(ref Vector3 left, float right, out Vector3 result)\n        {\n            result.X = left.X * right;\n            result.Y = left.Y * right;\n            result.Z = left.Z * right;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a multiplication of two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"result\">The result of the vector multiplication as an output parameter.</param>\n        public static void Multiply(ref Vector3 left, ref Vector3 right, out Vector3 result)\n        {\n            result.X = left.X * right.X;\n            result.Y = left.Y * right.Y;\n            result.Z = left.Z * right.Z;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains the specified vector inversion.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <returns>The result of the vector inversion.</returns>\n        public static Vector3 Negate(Vector3 value)\n        {\n            value = new Vector3(-value.X, -value.Y, -value.Z);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains the specified vector inversion.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"result\">The result of the vector inversion as an output parameter.</param>\n        public static void Negate(ref Vector3 value, out Vector3 result)\n        {\n            result.X = -value.X;\n            result.Y = -value.Y;\n            result.Z = -value.Z;\n        }\n\n        /// <summary>\n        /// Turns this <see cref=\"Vector3\"/> to a unit vector with the same direction.\n        /// </summary>\n        public void Normalize()\n        {\n            float factor = (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z));\n            factor = 1f / factor;\n            X *= factor;\n            Y *= factor;\n            Z *= factor;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a normalized values from another vector.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <returns>Unit vector.</returns>\n        public static Vector3 Normalize(Vector3 value)\n        {\n            float factor = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z));\n            factor = 1f / factor;\n            return new Vector3(value.X * factor, value.Y * factor, value.Z * factor);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a normalized values from another vector.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"result\">Unit vector as an output parameter.</param>\n        public static void Normalize(ref Vector3 value, out Vector3 result)\n        {\n            float factor = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z));\n            factor = 1f / factor;\n            result.X = value.X * factor;\n            result.Y = value.Y * factor;\n            result.Z = value.Z * factor;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains reflect vector of the given vector and normal.\n        /// </summary>\n        /// <param name=\"vector\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"normal\">Reflection normal.</param>\n        /// <returns>Reflected vector.</returns>\n        public static Vector3 Reflect(Vector3 vector, Vector3 normal)\n        {\n            // I is the original array\n            // N is the normal of the incident plane\n            // R = I - (2 * N * ( DotProduct[ I,N] ))\n            Vector3 reflectedVector;\n            // inline the dotProduct here instead of calling method\n            float dotProduct = ((vector.X * normal.X) + (vector.Y * normal.Y)) + (vector.Z * normal.Z);\n            reflectedVector.X = vector.X - (2.0f * normal.X) * dotProduct;\n            reflectedVector.Y = vector.Y - (2.0f * normal.Y) * dotProduct;\n            reflectedVector.Z = vector.Z - (2.0f * normal.Z) * dotProduct;\n\n            return reflectedVector;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains reflect vector of the given vector and normal.\n        /// </summary>\n        /// <param name=\"vector\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"normal\">Reflection normal.</param>\n        /// <param name=\"result\">Reflected vector as an output parameter.</param>\n        public static void Reflect(ref Vector3 vector, ref Vector3 normal, out Vector3 result)\n        {\n            // I is the original array\n            // N is the normal of the incident plane\n            // R = I - (2 * N * ( DotProduct[ I,N] ))\n\n            // inline the dotProduct here instead of calling method\n            float dotProduct = ((vector.X * normal.X) + (vector.Y * normal.Y)) + (vector.Z * normal.Z);\n            result.X = vector.X - (2.0f * normal.X) * dotProduct;\n            result.Y = vector.Y - (2.0f * normal.Y) * dotProduct;\n            result.Z = vector.Z - (2.0f * normal.Z) * dotProduct;\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector3\"/> towards the nearest integer value.\n        /// </summary>\n        public void Round()\n        {\n            X = (float)Math.Round(X);\n            Y = (float)Math.Round(Y);\n            Z = (float)Math.Round(Z);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains members from another vector rounded to the nearest integer value.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector3\"/>.</returns>\n        public static Vector3 Round(Vector3 value)\n        {\n            value.X = (float)Math.Round(value.X);\n            value.Y = (float)Math.Round(value.Y);\n            value.Z = (float)Math.Round(value.Z);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains members from another vector rounded to the nearest integer value.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector3\"/>.</param>\n        public static void Round(ref Vector3 value, out Vector3 result)\n        {\n            result.X = (float)Math.Round(value.X);\n            result.Y = (float)Math.Round(value.Y);\n            result.Z = (float)Math.Round(value.Z);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains cubic interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"value2\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"amount\">Weighting value.</param>\n        /// <returns>Cubic interpolation of the specified vectors.</returns>\n        public static Vector3 SmoothStep(Vector3 value1, Vector3 value2, float amount)\n        {\n            return new Vector3(\n                MathHelper.SmoothStep(value1.X, value2.X, amount),\n                MathHelper.SmoothStep(value1.Y, value2.Y, amount),\n                MathHelper.SmoothStep(value1.Z, value2.Z, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains cubic interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"value2\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"amount\">Weighting value.</param>\n        /// <param name=\"result\">Cubic interpolation of the specified vectors as an output parameter.</param>\n        public static void SmoothStep(ref Vector3 value1, ref Vector3 value2, float amount, out Vector3 result)\n        {\n            result.X = MathHelper.SmoothStep(value1.X, value2.X, amount);\n            result.Y = MathHelper.SmoothStep(value1.Y, value2.Y, amount);\n            result.Z = MathHelper.SmoothStep(value1.Z, value2.Z, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains subtraction of on <see cref=\"Vector3\"/> from a another.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/>.</param>\n        /// <returns>The result of the vector subtraction.</returns>\n        public static Vector3 Subtract(Vector3 left, Vector3 right)\n        {\n            left.X -= right.X;\n            left.Y -= right.Y;\n            left.Z -= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains subtraction of on <see cref=\"Vector3\"/> from a another.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"result\">The result of the vector subtraction as an output parameter.</param>\n        public static void Subtract(ref Vector3 left, ref Vector3 right, out Vector3 result)\n        {\n            result.X = left.X - right.X;\n            result.Y = left.Y - right.Y;\n            result.Z = left.Z - right.Z;\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Vector3\"/> in the format:\n        /// {X:[<see cref=\"X\"/>] Y:[<see cref=\"Y\"/>] Z:[<see cref=\"Z\"/>]}\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"Vector3\"/>.</returns>\n        public override string ToString()\n        {\n            return String.Format(\"{{X: {0}, Y: {1}, Z: {2} }}\", X, Y, Z);\n        }\n\n        #region Transform\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"position\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <returns>Transformed <see cref=\"Vector3\"/>.</returns>\n        public static Vector3 Transform(Vector3 position, Matrix matrix)\n        {\n            Transform(ref position, ref matrix, out position);\n            return position;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"position\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector3\"/> as an output parameter.</param>\n        public static void Transform(ref Vector3 position, ref Matrix matrix, out Vector3 result)\n        {\n            var x = (position.X * matrix.M11) + (position.Y * matrix.M21) + (position.Z * matrix.M31) + matrix.M41;\n            var y = (position.X * matrix.M12) + (position.Y * matrix.M22) + (position.Z * matrix.M32) + matrix.M42;\n            var z = (position.X * matrix.M13) + (position.Y * matrix.M23) + (position.Z * matrix.M33) + matrix.M43;\n            result.X = x;\n            result.Y = y;\n            result.Z = z;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Quaternion\"/>, representing the rotation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <returns>Transformed <see cref=\"Vector3\"/>.</returns>\n        public static Vector3 Transform(Vector3 value, Quaternion rotation)\n        {\n            Vector3 result;\n            Transform(ref value, ref rotation, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Quaternion\"/>, representing the rotation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector3\"/> as an output parameter.</param>\n        public static void Transform(ref Vector3 value, ref Quaternion rotation, out Vector3 result)\n        {\n            float x = 2 * (rotation.Y * value.Z - rotation.Z * value.Y);\n            float y = 2 * (rotation.Z * value.X - rotation.X * value.Z);\n            float z = 2 * (rotation.X * value.Y - rotation.Y * value.X);\n\n            result.X = value.X + x * rotation.W + (rotation.Y * z - rotation.Z * y);\n            result.Y = value.Y + y * rotation.W + (rotation.Z * x - rotation.X * z);\n            result.Z = value.Z + z * rotation.W + (rotation.X * y - rotation.Y * x);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Pose3\"/>, representing the rotation and translation.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"pose\">The <see cref=\"Pose3\"/> which contains rotation and translation transformation.</param>\n        /// <returns>Transformed <see cref=\"Vector3\"/>.</returns>\n        public static Vector3 Transform(Vector3 value, Pose3 pose)\n        {\n            Vector3 result;\n            Vector3.Transform(ref value, ref pose.Orientation, out result);\n            Vector3.Add(ref result, ref pose.Translation, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Apply transformation on vectors within array of <see cref=\"Vector3\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector3\"/> should be written.</param>\n        /// <param name=\"length\">The number of vectors to be transformed.</param>\n        public static void Transform(Vector3[] sourceArray, int sourceIndex, ref Matrix matrix, Vector3[] destinationArray, int destinationIndex, int length)\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if (sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n            \n            for (var i = 0; i < length; i++)\n            {\n                Vector3.Transform(ref sourceArray[sourceIndex + i], ref matrix, out destinationArray[destinationIndex + i]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on vectors within array of <see cref=\"Vector3\"/> by the specified <see cref=\"Quaternion\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector3\"/> should be written.</param>\n        /// <param name=\"length\">The number of vectors to be transformed.</param>\n        public static void Transform(Vector3[] sourceArray, int sourceIndex, ref Quaternion rotation, Vector3[] destinationArray, int destinationIndex, int length)\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if (sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n            \n            for (var i = 0; i < length; i++)\n            {\n                Vector3.Transform(ref sourceArray[sourceIndex + i], ref rotation, out destinationArray[destinationIndex + i]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on all vectors within array of <see cref=\"Vector3\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void Transform(Vector3[] sourceArray, ref Matrix matrix, Vector3[] destinationArray)\n        {\n            Vector3.Transform(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length);\n        }\n\n        /// <summary>\n        /// Apply transformation on all vectors within array of <see cref=\"Vector3\"/> by the specified <see cref=\"Quaternion\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void Transform(Vector3[] sourceArray, ref Quaternion rotation, Vector3[] destinationArray)\n        {\n            Vector3.Transform(sourceArray, 0, ref rotation, destinationArray, 0, sourceArray.Length);\n        }\n\n        #endregion\n\n        #region TransformNormal\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a transformation of the specified normal by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"normal\">Source <see cref=\"Vector3\"/> which represents a normal vector.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <returns>Transformed normal.</returns>\n        public static Vector3 TransformNormal(Vector3 normal, Matrix matrix)\n        {\n            TransformNormal(ref normal, ref matrix, out normal);\n            return normal;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector3\"/> that contains a transformation of the specified normal by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"normal\">Source <see cref=\"Vector3\"/> which represents a normal vector.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Transformed normal as an output parameter.</param>\n        public static void TransformNormal(ref Vector3 normal, ref Matrix matrix, out Vector3 result)\n        {\n            var x = (normal.X * matrix.M11) + (normal.Y * matrix.M21) + (normal.Z * matrix.M31);\n            var y = (normal.X * matrix.M12) + (normal.Y * matrix.M22) + (normal.Z * matrix.M32);\n            var z = (normal.X * matrix.M13) + (normal.Y * matrix.M23) + (normal.Z * matrix.M33);\n            result.X = x;\n            result.Y = y;\n            result.Z = z;\n        }\n\n        /// <summary>\n        /// Apply transformation on normals within array of <see cref=\"Vector3\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector3\"/> should be written.</param>\n        /// <param name=\"length\">The number of normals to be transformed.</param>\n        public static void TransformNormal\n        (\n            Vector3[] sourceArray, int sourceIndex,\n            ref Matrix matrix,\n            Vector3[] destinationArray,int destinationIndex,\n            int length\n        )\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if(sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n\n            for (int i = 0; i < length; i++)\n            {\n                Vector3.TransformNormal(ref sourceArray[sourceIndex + i], ref matrix, out destinationArray[destinationIndex + i]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on all normals within array of <see cref=\"Vector3\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void TransformNormal(Vector3[] sourceArray, ref Matrix matrix, Vector3[] destinationArray)\n        {\n            Vector3.TransformNormal(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length);\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        /// <param name=\"z\"></param>\n        public void Deconstruct(out float x, out float y, out float z)\n        {\n            x = X;\n            y = Y;\n            z = Z;\n        }\n\n        #endregion\n\n        #region Operators\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Vector3\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Vector3\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Vector3\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Vector3 left, Vector3 right)\n        {\n            return left.X == right.X\n                && left.Y == right.Y\n                && left.Z == right.Z;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Vector3\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Vector3\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Vector3\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\t\n        public static bool operator !=(Vector3 left, Vector3 right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Adds two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/> on the left of the add sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/> on the right of the add sign.</param>\n        /// <returns>Sum of the vectors.</returns>\n        public static Vector3 operator +(Vector3 left, Vector3 right)\n        {\n            left.X += right.X;\n            left.Y += right.Y;\n            left.Z += right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Inverts values in the specified <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the inversion.</returns>\n        public static Vector3 operator -(Vector3 value)\n        {\n            value = new Vector3(-value.X, -value.Y, -value.Z);\n            return value;\n        }\n\n        /// <summary>\n        /// Subtracts a <see cref=\"Vector3\"/> from a <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/> on the left of the sub sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the vector subtraction.</returns>\n        public static Vector3 operator -(Vector3 left, Vector3 right)\n        {\n            left.X -= right.X;\n            left.Y -= right.Y;\n            left.Z -= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of two vectors by each other.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication.</returns>\n        public static Vector3 operator *(Vector3 left, Vector3 right)\n        {\n            left.X *= right.X;\n            left.Y *= right.Y;\n            left.Z *= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of vector by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Scalar value on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication with a scalar.</returns>\n        public static Vector3 operator *(Vector3 left, float right)\n        {\n            left.X *= right;\n            left.Y *= right;\n            left.Z *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of vector by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Scalar value on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector3\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication with a scalar.</returns>\n        public static Vector3 operator *(float left, Vector3 right)\n        {\n            right.X *= left;\n            right.Y *= left;\n            right.Z *= left;\n            return right;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector3\"/> by the components of another <see cref=\"Vector3\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector3\"/> on the right of the div sign.</param>\n        /// <returns>The result of dividing the vectors.</returns>\n        public static Vector3 operator /(Vector3 left, Vector3 right)\n        {\n            left.X /= right.X;\n            left.Y /= right.Y;\n            left.Z /= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector3\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector3\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor scalar on the right of the div sign.</param>\n        /// <returns>The result of dividing a vector by a scalar.</returns>\n        public static Vector3 operator /(Vector3 left, float right)\n        {\n            float factor = 1 / right;\n            left.X *= factor;\n            left.Y *= factor;\n            left.Z *= factor;\n            return left;\n        }\n\n#if NET8_0_OR_GREATER\n        public static explicit operator Vector3(SysNumerics.Vector3 value)\n        {\n            return Unsafe.BitCast<SysNumerics.Vector3, Vector3>(value);\n        }\n\n        public static explicit operator SysNumerics.Vector3(Vector3 value)\n        {\n            return Unsafe.BitCast<Vector3, SysNumerics.Vector3>(value);\n        }\n#endif\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Vector4.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Runtime.Serialization;\n\n#if NET8_0_OR_GREATER\nusing System.Runtime.CompilerServices;\nusing SysNumerics = System.Numerics;\n#endif\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Describes a 4D-vector.\n    /// </summary>\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    [DataContract]\n    [TypeConverter(\"Microsoft.Xna.Framework.Design.Vector4Converter, Xna.Framework.Design\")]\n    public struct Vector4 : IEquatable<Vector4>\n    {\n        #region Private Fields\n\n        private static readonly Vector4 zero = new Vector4();\n        private static readonly Vector4 one = new Vector4(1f, 1f, 1f, 1f);\n        private static readonly Vector4 unitX = new Vector4(1f, 0f, 0f, 0f);\n        private static readonly Vector4 unitY = new Vector4(0f, 1f, 0f, 0f);\n        private static readonly Vector4 unitZ = new Vector4(0f, 0f, 1f, 0f);\n        private static readonly Vector4 unitW = new Vector4(0f, 0f, 0f, 1f);\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// The x coordinate of this <see cref=\"Vector4\"/>.\n        /// </summary>\n        [DataMember]\n        public float X;\n\n        /// <summary>\n        /// The y coordinate of this <see cref=\"Vector4\"/>.\n        /// </summary>\n        [DataMember]\n        public float Y;\n\n        /// <summary>\n        /// The z coordinate of this <see cref=\"Vector4\"/>.\n        /// </summary>\n        [DataMember]\n        public float Z;\n\n        /// <summary>\n        /// The w coordinate of this <see cref=\"Vector4\"/>.\n        /// </summary>\n        [DataMember]\n        public float W;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector4\"/> with components 0, 0, 0, 0.\n        /// </summary>\n        public static Vector4 Zero\n        {\n            get { return zero; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector4\"/> with components 1, 1, 1, 1.\n        /// </summary>\n        public static Vector4 One\n        {\n            get { return one; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector4\"/> with components 1, 0, 0, 0.\n        /// </summary>\n        public static Vector4 UnitX\n        {\n            get { return unitX; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector4\"/> with components 0, 1, 0, 0.\n        /// </summary>\n        public static Vector4 UnitY\n        {\n            get { return unitY; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector4\"/> with components 0, 0, 1, 0.\n        /// </summary>\n        public static Vector4 UnitZ\n        {\n            get { return unitZ; }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"Vector4\"/> with components 0, 0, 0, 1.\n        /// </summary>\n        public static Vector4 UnitW\n        {\n            get { return unitW; }\n        }\n\n        #endregion\n\n        #region Internal Properties\n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    this.X.ToString(), \"  \",\n                    this.Y.ToString(), \"  \",\n                    this.Z.ToString(), \"  \",\n                    this.W.ToString()\n                );\n            }\n        }\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Constructs a 3d vector with X, Y, Z and W from four values.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate in 4d-space.</param>\n        /// <param name=\"y\">The y coordinate in 4d-space.</param>\n        /// <param name=\"z\">The z coordinate in 4d-space.</param>\n        /// <param name=\"w\">The w coordinate in 4d-space.</param>\n        public Vector4(float x, float y, float z, float w)\n        {\n            this.X = x;\n            this.Y = y;\n            this.Z = z;\n            this.W = w;\n        }\n\n        /// <summary>\n        /// Constructs a 3d vector with X and Z from <see cref=\"Vector2\"/> and Z and W from the scalars.\n        /// </summary>\n        /// <param name=\"value\">The x and y coordinates in 4d-space.</param>\n        /// <param name=\"z\">The z coordinate in 4d-space.</param>\n        /// <param name=\"w\">The w coordinate in 4d-space.</param>\n        public Vector4(Vector2 value, float z, float w)\n        {\n            this.X = value.X;\n            this.Y = value.Y;\n            this.Z = z;\n            this.W = w;\n        }\n\n        /// <summary>\n        /// Constructs a 3d vector with X, Y, Z from <see cref=\"Vector3\"/> and W from a scalar.\n        /// </summary>\n        /// <param name=\"value\">The x, y and z coordinates in 4d-space.</param>\n        /// <param name=\"w\">The w coordinate in 4d-space.</param>\n        public Vector4(Vector3 value, float w)\n        {\n            this.X = value.X;\n            this.Y = value.Y;\n            this.Z = value.Z;\n            this.W = w;\n        }\n\n        /// <summary>\n        /// Constructs a 4d vector with X, Y, Z and W set to the same value.\n        /// </summary>\n        /// <param name=\"value\">The x, y, z and w coordinates in 4d-space.</param>\n        public Vector4(float value)\n        {\n            this.X = value;\n            this.Y = value;\n            this.Z = value;\n            this.W = value;\n        }\n\n        #endregion\n\n        #region Public Methods\n\n        /// <summary>\n        /// Performs vector addition on <paramref name=\"left\"/> and <paramref name=\"right\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first vector to add.</param>\n        /// <param name=\"right\">The second vector to add.</param>\n        /// <returns>The result of the vector addition.</returns>\n        public static Vector4 Add(Vector4 left, Vector4 right)\n        {\n            left.X += right.X;\n            left.Y += right.Y;\n            left.Z += right.Z;\n            left.W += right.W;\n            return left;\n        }\n\n        /// <summary>\n        /// Performs vector addition on <paramref name=\"left\"/> and\n        /// <paramref name=\"right\"/>, storing the result of the\n        /// addition in <paramref name=\"result\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first vector to add.</param>\n        /// <param name=\"right\">The second vector to add.</param>\n        /// <param name=\"result\">The result of the vector addition.</param>\n        public static void Add(ref Vector4 left, ref Vector4 right, out Vector4 result)\n        {\n            result.X = left.X + right.X;\n            result.Y = left.Y + right.Y;\n            result.Z = left.Z + right.Z;\n            result.W = left.W + right.W;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 4d-triangle.\n        /// </summary>\n        /// <param name=\"value1\">The first vector of 4d-triangle.</param>\n        /// <param name=\"value2\">The second vector of 4d-triangle.</param>\n        /// <param name=\"value3\">The third vector of 4d-triangle.</param>\n        /// <param name=\"amount1\">Barycentric scalar <c>b2</c> which represents a weighting factor towards second vector of 4d-triangle.</param>\n        /// <param name=\"amount2\">Barycentric scalar <c>b3</c> which represents a weighting factor towards third vector of 4d-triangle.</param>\n        /// <returns>The cartesian translation of barycentric coordinates.</returns>\n        public static Vector4 Barycentric(Vector4 value1, Vector4 value2, Vector4 value3, float amount1, float amount2)\n        {\n            return new Vector4(\n                MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2),\n                MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2),\n                MathHelper.Barycentric(value1.Z, value2.Z, value3.Z, amount1, amount2),\n                MathHelper.Barycentric(value1.W, value2.W, value3.W, amount1, amount2));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 4d-triangle.\n        /// </summary>\n        /// <param name=\"value1\">The first vector of 4d-triangle.</param>\n        /// <param name=\"value2\">The second vector of 4d-triangle.</param>\n        /// <param name=\"value3\">The third vector of 4d-triangle.</param>\n        /// <param name=\"amount1\">Barycentric scalar <c>b2</c> which represents a weighting factor towards second vector of 4d-triangle.</param>\n        /// <param name=\"amount2\">Barycentric scalar <c>b3</c> which represents a weighting factor towards third vector of 4d-triangle.</param>\n        /// <param name=\"result\">The cartesian translation of barycentric coordinates as an output parameter.</param>\n        public static void Barycentric(ref Vector4 value1, ref Vector4 value2, ref Vector4 value3, float amount1, float amount2, out Vector4 result)\n        {\n            result.X = MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2);\n            result.Y = MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2);\n            result.Z = MathHelper.Barycentric(value1.Z, value2.Z, value3.Z, amount1, amount2);\n            result.W = MathHelper.Barycentric(value1.W, value2.W, value3.W, amount1, amount2);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains CatmullRom interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector in interpolation.</param>\n        /// <param name=\"value2\">The second vector in interpolation.</param>\n        /// <param name=\"value3\">The third vector in interpolation.</param>\n        /// <param name=\"value4\">The fourth vector in interpolation.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <returns>The result of CatmullRom interpolation.</returns>\n        public static Vector4 CatmullRom(Vector4 value1, Vector4 value2, Vector4 value3, Vector4 value4, float amount)\n        {\n            return new Vector4(\n                MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount),\n                MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount),\n                MathHelper.CatmullRom(value1.Z, value2.Z, value3.Z, value4.Z, amount),\n                MathHelper.CatmullRom(value1.W, value2.W, value3.W, value4.W, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains CatmullRom interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector in interpolation.</param>\n        /// <param name=\"value2\">The second vector in interpolation.</param>\n        /// <param name=\"value3\">The third vector in interpolation.</param>\n        /// <param name=\"value4\">The fourth vector in interpolation.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <param name=\"result\">The result of CatmullRom interpolation as an output parameter.</param>\n        public static void CatmullRom(ref Vector4 value1, ref Vector4 value2, ref Vector4 value3, ref Vector4 value4, float amount, out Vector4 result)\n        {\n            result.X = MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount);\n            result.Y = MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount);\n            result.Z = MathHelper.CatmullRom(value1.Z, value2.Z, value3.Z, value4.Z, amount);\n            result.W = MathHelper.CatmullRom(value1.W, value2.W, value3.W, value4.W, amount);\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector4\"/> towards positive infinity.\n        /// </summary>\n        public void Ceiling()\n        {\n            X = (float)Math.Ceiling(X);\n            Y = (float)Math.Ceiling(Y);\n            Z = (float)Math.Ceiling(Z);\n            W = (float)Math.Ceiling(W);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains members from another vector rounded towards positive infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Ceiling(Vector4 value)\n        {\n            value.X = (float)Math.Ceiling(value.X);\n            value.Y = (float)Math.Ceiling(value.Y);\n            value.Z = (float)Math.Ceiling(value.Z);\n            value.W = (float)Math.Ceiling(value.W);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains members from another vector rounded towards positive infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector4\"/>.</param>\n        public static void Ceiling(ref Vector4 value, out Vector4 result)\n        {\n            result.X = (float)Math.Ceiling(value.X);\n            result.Y = (float)Math.Ceiling(value.Y);\n            result.Z = (float)Math.Ceiling(value.Z);\n            result.W = (float)Math.Ceiling(value.W);\n        }\n\n        /// <summary>\n        /// Clamps the specified value within a range.\n        /// </summary>\n        /// <param name=\"value1\">The value to clamp.</param>\n        /// <param name=\"min\">The min value.</param>\n        /// <param name=\"max\">The max value.</param>\n        /// <returns>The clamped value.</returns>\n        public static Vector4 Clamp(Vector4 value1, Vector4 min, Vector4 max)\n        {\n            return new Vector4(\n                MathHelper.Clamp(value1.X, min.X, max.X),\n                MathHelper.Clamp(value1.Y, min.Y, max.Y),\n                MathHelper.Clamp(value1.Z, min.Z, max.Z),\n                MathHelper.Clamp(value1.W, min.W, max.W));\n        }\n\n        /// <summary>\n        /// Clamps the specified value within a range.\n        /// </summary>\n        /// <param name=\"value1\">The value to clamp.</param>\n        /// <param name=\"min\">The min value.</param>\n        /// <param name=\"max\">The max value.</param>\n        /// <param name=\"result\">The clamped value as an output parameter.</param>\n        public static void Clamp(ref Vector4 value1, ref Vector4 min, ref Vector4 max, out Vector4 result)\n        {\n            result.X = MathHelper.Clamp(value1.X, min.X, max.X);\n            result.Y = MathHelper.Clamp(value1.Y, min.Y, max.Y);\n            result.Z = MathHelper.Clamp(value1.Z, min.Z, max.Z);\n            result.W = MathHelper.Clamp(value1.W, min.W, max.W);\n        }\n\n        /// <summary>\n        /// Returns the distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The distance between two vectors.</returns>\n        public static float Distance(Vector4 value1, Vector4 value2)\n        {\n            return (float)Math.Sqrt(DistanceSquared(value1, value2));\n        }\n\n        /// <summary>\n        /// Returns the distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The distance between two vectors as an output parameter.</param>\n        public static void Distance(ref Vector4 value1, ref Vector4 value2, out float result)\n        {\n            result = (float)Math.Sqrt(DistanceSquared(value1, value2));\n        }\n\n        /// <summary>\n        /// Returns the squared distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The squared distance between two vectors.</returns>\n        public static float DistanceSquared(Vector4 value1, Vector4 value2)\n        {\n              return (value1.W - value2.W) * (value1.W - value2.W) +\n                     (value1.X - value2.X) * (value1.X - value2.X) +\n                     (value1.Y - value2.Y) * (value1.Y - value2.Y) +\n                     (value1.Z - value2.Z) * (value1.Z - value2.Z);\n        }\n\n        /// <summary>\n        /// Returns the squared distance between two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The squared distance between two vectors as an output parameter.</param>\n        public static void DistanceSquared(ref Vector4 value1, ref Vector4 value2, out float result)\n        {\n            result = (value1.W - value2.W) * (value1.W - value2.W) +\n                     (value1.X - value2.X) * (value1.X - value2.X) +\n                     (value1.Y - value2.Y) * (value1.Y - value2.Y) +\n                     (value1.Z - value2.Z) * (value1.Z - value2.Z);\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector4\"/> by the components of another <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector4\"/>.</param>\n        /// <returns>The result of dividing the vectors.</returns>\n        public static Vector4 Divide(Vector4 left, Vector4 right)\n        {\n            left.W /= right.W;\n            left.X /= right.X;\n            left.Y /= right.Y;\n            left.Z /= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector4\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <returns>The result of dividing a vector by a scalar.</returns>\n        public static Vector4 Divide(Vector4 left, float right)\n        {\n            float factor = 1f / right;\n            left.W *= factor;\n            left.X *= factor;\n            left.Y *= factor;\n            left.Z *= factor;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector4\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Divisor scalar.</param>\n        /// <param name=\"result\">The result of dividing a vector by a scalar as an output parameter.</param>\n        public static void Divide(ref Vector4 left, float right, out Vector4 result)\n        {\n            float factor = 1f / right;\n            result.W = left.W * factor;\n            result.X = left.X * factor;\n            result.Y = left.Y * factor;\n            result.Z = left.Z * factor;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector4\"/> by the components of another <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"result\">The result of dividing the vectors as an output parameter.</param>\n        public static void Divide(ref Vector4 left, ref Vector4 right, out Vector4 result)\n        {\n            result.W = left.W / right.W;\n            result.X = left.X / right.X;\n            result.Y = left.Y / right.Y;\n            result.Z = left.Z / right.Z;\n        }\n\n        /// <summary>\n        /// Returns a dot product of two vectors.\n        /// </summary>\n        /// <param name=\"left\">The first vector.</param>\n        /// <param name=\"right\">The second vector.</param>\n        /// <returns>The dot product of two vectors.</returns>\n        public static float Dot(Vector4 left, Vector4 right)\n        {\n            return left.X * right.X + left.Y * right.Y + left.Z * right.Z + left.W * right.W;\n        }\n\n        /// <summary>\n        /// Returns a dot product of two vectors.\n        /// </summary>\n        /// <param name=\"left\">The first vector.</param>\n        /// <param name=\"right\">The second vector.</param>\n        /// <param name=\"result\">The dot product of two vectors as an output parameter.</param>\n        public static void Dot(ref Vector4 left, ref Vector4 right, out float result)\n        {\n            result = left.X * right.X + left.Y * right.Y + left.Z * right.Z + left.W * right.W;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Object\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Object\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Vector4) ? this == (Vector4)obj : false;\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Vector4\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Vector4 other)\n        {\n            return this.W == other.W\n                && this.X == other.X\n                && this.Y == other.Y\n                && this.Z == other.Z;\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector4\"/> towards negative infinity.\n        /// </summary>\n        public void Floor()\n        {\n            X = (float)Math.Floor(X);\n            Y = (float)Math.Floor(Y);\n            Z = (float)Math.Floor(Z);\n            W = (float)Math.Floor(W);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains members from another vector rounded towards negative infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Floor(Vector4 value)\n        {\n            value.X = (float)Math.Floor(value.X);\n            value.Y = (float)Math.Floor(value.Y);\n            value.Z = (float)Math.Floor(value.Z);\n            value.W = (float)Math.Floor(value.W);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains members from another vector rounded towards negative infinity.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector4\"/>.</param>\n        public static void Floor(ref Vector4 value, out Vector4 result)\n        {\n            result.X = (float)Math.Floor(value.X);\n            result.Y = (float)Math.Floor(value.Y);\n            result.Z = (float)Math.Floor(value.Z);\n            result.W = (float)Math.Floor(value.W);\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Vector4\"/>.</returns>\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = W.GetHashCode();\n                hashCode = (hashCode * 397) ^ X.GetHashCode();\n                hashCode = (hashCode * 397) ^ Y.GetHashCode();\n                hashCode = (hashCode * 397) ^ Z.GetHashCode();\n                return hashCode;\n            }\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains hermite spline interpolation.\n        /// </summary>\n        /// <param name=\"value1\">The first position vector.</param>\n        /// <param name=\"tangent1\">The first tangent vector.</param>\n        /// <param name=\"value2\">The second position vector.</param>\n        /// <param name=\"tangent2\">The second tangent vector.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <returns>The hermite spline interpolation vector.</returns>\n        public static Vector4 Hermite(Vector4 value1, Vector4 tangent1, Vector4 value2, Vector4 tangent2, float amount)\n        {\n            return new Vector4(MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount),\n                               MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount),\n                               MathHelper.Hermite(value1.Z, tangent1.Z, value2.Z, tangent2.Z, amount),\n                               MathHelper.Hermite(value1.W, tangent1.W, value2.W, tangent2.W, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains hermite spline interpolation.\n        /// </summary>\n        /// <param name=\"value1\">The first position vector.</param>\n        /// <param name=\"tangent1\">The first tangent vector.</param>\n        /// <param name=\"value2\">The second position vector.</param>\n        /// <param name=\"tangent2\">The second tangent vector.</param>\n        /// <param name=\"amount\">Weighting factor.</param>\n        /// <param name=\"result\">The hermite spline interpolation vector as an output parameter.</param>\n        public static void Hermite(ref Vector4 value1, ref Vector4 tangent1, ref Vector4 value2, ref Vector4 tangent2, float amount, out Vector4 result)\n        {\n            result.W = MathHelper.Hermite(value1.W, tangent1.W, value2.W, tangent2.W, amount);\n            result.X = MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount);\n            result.Y = MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount);\n            result.Z = MathHelper.Hermite(value1.Z, tangent1.Z, value2.Z, tangent2.Z, amount);\n        }\n\n        /// <summary>\n        /// Returns the length of this <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <returns>The length of this <see cref=\"Vector4\"/>.</returns>\n        public float Length()\n        {\n            return (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z) + (W * W));\n        }\n\n        /// <summary>\n        /// Returns the squared length of this <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <returns>The squared length of this <see cref=\"Vector4\"/>.</returns>\n        public float LengthSquared()\n        {\n            return (X * X) + (Y * Y) + (Z * Z) + (W * W);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains linear interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <returns>The result of linear interpolation of the specified vectors.</returns>\n        public static Vector4 Lerp(Vector4 start, Vector4 end, float amount)\n        {\n            Vector4 result;\n            result.X = MathHelper.Lerp(start.X, end.X, amount);\n            result.Y = MathHelper.Lerp(start.Y, end.Y, amount);\n            result.Z = MathHelper.Lerp(start.Z, end.Z, amount);\n            result.W = MathHelper.Lerp(start.W, end.W, amount);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains linear interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <param name=\"result\">The result of linear interpolation of the specified vectors as an output parameter.</param>\n        public static void Lerp(ref Vector4 start, ref Vector4 end, float amount, out Vector4 result)\n        {\n            result.X = MathHelper.Lerp(start.X, end.X, amount);\n            result.Y = MathHelper.Lerp(start.Y, end.Y, amount);\n            result.Z = MathHelper.Lerp(start.Z, end.Z, amount);\n            result.W = MathHelper.Lerp(start.W, end.W, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains linear interpolation of the specified vectors.\n        /// Uses <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for the interpolation.\n        /// Less efficient but more precise compared to <see cref=\"Vector4.Lerp(Vector4, Vector4, float)\"/>.\n        /// See remarks section of <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for more info.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <returns>The result of linear interpolation of the specified vectors.</returns>\n        public static Vector4 LerpPrecise(Vector4 start, Vector4 end, float amount)\n        {\n            Vector4 result;\n            result.X = MathHelper.LerpPrecise(start.X, end.X, amount);\n            result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount);\n            result.Z = MathHelper.LerpPrecise(start.Z, end.Z, amount);\n            result.W = MathHelper.LerpPrecise(start.W, end.W, amount);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains linear interpolation of the specified vectors.\n        /// Uses <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for the interpolation.\n        /// Less efficient but more precise compared to <see cref=\"Vector4.Lerp(ref Vector4, ref Vector4, float, out Vector4)\"/>.\n        /// See remarks section of <see cref=\"MathHelper.LerpPrecise\"/> on MathHelper for more info.\n        /// </summary>\n        /// <param name=\"start\">The first vector.</param>\n        /// <param name=\"end\">The second vector.</param>\n        /// <param name=\"amount\">Weighting value(between 0.0 and 1.0).</param>\n        /// <param name=\"result\">The result of linear interpolation of the specified vectors as an output parameter.</param>\n        public static void LerpPrecise(ref Vector4 start, ref Vector4 end, float amount, out Vector4 result)\n        {\n            result.X = MathHelper.LerpPrecise(start.X, end.X, amount);\n            result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount);\n            result.Z = MathHelper.LerpPrecise(start.Z, end.Z, amount);\n            result.W = MathHelper.LerpPrecise(start.W, end.W, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a maximal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The <see cref=\"Vector4\"/> with maximal values from the two vectors.</returns>\n        public static Vector4 Max(Vector4 value1, Vector4 value2)\n        {\n            return new Vector4(\n               MathHelper.Max(value1.X, value2.X),\n               MathHelper.Max(value1.Y, value2.Y),\n               MathHelper.Max(value1.Z, value2.Z),\n               MathHelper.Max(value1.W, value2.W));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a maximal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The <see cref=\"Vector4\"/> with maximal values from the two vectors as an output parameter.</param>\n        public static void Max(ref Vector4 value1, ref Vector4 value2, out Vector4 result)\n        {\n            result.X = MathHelper.Max(value1.X, value2.X);\n            result.Y = MathHelper.Max(value1.Y, value2.Y);\n            result.Z = MathHelper.Max(value1.Z, value2.Z);\n            result.W = MathHelper.Max(value1.W, value2.W);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a minimal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <returns>The <see cref=\"Vector4\"/> with minimal values from the two vectors.</returns>\n        public static Vector4 Min(Vector4 value1, Vector4 value2)\n        {\n            return new Vector4(\n               MathHelper.Min(value1.X, value2.X),\n               MathHelper.Min(value1.Y, value2.Y),\n               MathHelper.Min(value1.Z, value2.Z),\n               MathHelper.Min(value1.W, value2.W));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a minimal values from the two vectors.\n        /// </summary>\n        /// <param name=\"value1\">The first vector.</param>\n        /// <param name=\"value2\">The second vector.</param>\n        /// <param name=\"result\">The <see cref=\"Vector4\"/> with minimal values from the two vectors as an output parameter.</param>\n        public static void Min(ref Vector4 value1, ref Vector4 value2, out Vector4 result)\n        {\n            result.X = MathHelper.Min(value1.X, value2.X);\n            result.Y = MathHelper.Min(value1.Y, value2.Y);\n            result.Z = MathHelper.Min(value1.Z, value2.Z);\n            result.W = MathHelper.Min(value1.W, value2.W);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a multiplication of two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector4\"/>.</param>\n        /// <returns>The result of the vector multiplication.</returns>\n        public static Vector4 Multiply(Vector4 left, Vector4 right)\n        {\n            left.W *= right.W;\n            left.X *= right.X;\n            left.Y *= right.Y;\n            left.Z *= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a multiplication of <see cref=\"Vector4\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <returns>The result of the vector multiplication with a scalar.</returns>\n        public static Vector4 Multiply(Vector4 left, float right)\n        {\n            left.W *= right;\n            left.X *= right;\n            left.Y *= right;\n            left.Z *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a multiplication of <see cref=\"Vector4\"/> and a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Scalar value.</param>\n        /// <param name=\"result\">The result of the multiplication with a scalar as an output parameter.</param>\n        public static void Multiply(ref Vector4 left, float right, out Vector4 result)\n        {\n            result.W = left.W * right;\n            result.X = left.X * right;\n            result.Y = left.Y * right;\n            result.Z = left.Z * right;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a multiplication of two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"result\">The result of the vector multiplication as an output parameter.</param>\n        public static void Multiply(ref Vector4 left, ref Vector4 right, out Vector4 result)\n        {\n            result.W = left.W * right.W;\n            result.X = left.X * right.X;\n            result.Y = left.Y * right.Y;\n            result.Z = left.Z * right.Z;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains the specified vector inversion.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <returns>The result of the vector inversion.</returns>\n        public static Vector4 Negate(Vector4 value)\n        {\n            value = new Vector4(-value.X, -value.Y, -value.Z, -value.W);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains the specified vector inversion.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"result\">The result of the vector inversion as an output parameter.</param>\n        public static void Negate(ref Vector4 value, out Vector4 result)\n        {\n            result.X = -value.X;\n            result.Y = -value.Y;\n            result.Z = -value.Z;\n            result.W = -value.W;\n        }\n\n        /// <summary>\n        /// Turns this <see cref=\"Vector4\"/> to a unit vector with the same direction.\n        /// </summary>\n        public void Normalize()\n        {\n            float factor = (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z) + (W * W));\n            factor = 1f / factor;\n            X *= factor;\n            Y *= factor;\n            Z *= factor;\n            W *= factor;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a normalized values from another vector.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <returns>Unit vector.</returns>\n        public static Vector4 Normalize(Vector4 value)\n        {\n            float factor = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W));\n            factor = 1f / factor;\n            return new Vector4(value.X*factor,value.Y*factor,value.Z*factor,value.W*factor);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a normalized values from another vector.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"result\">Unit vector as an output parameter.</param>\n        public static void Normalize(ref Vector4 value, out Vector4 result)\n        {\n            float factor = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W));\n            factor = 1f / factor;\n            result.W = value.W * factor;\n            result.X = value.X * factor;\n            result.Y = value.Y * factor;\n            result.Z = value.Z * factor;\n        }\n\n        /// <summary>\n        /// Round the members of this <see cref=\"Vector4\"/> to the nearest integer value.\n        /// </summary>\n        public void Round()\n        {\n            X = (float)Math.Round(X);\n            Y = (float)Math.Round(Y);\n            Z = (float)Math.Round(Z);\n            W = (float)Math.Round(W);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains members from another vector rounded to the nearest integer value.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <returns>The rounded <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Round(Vector4 value)\n        {\n            value.X = (float)Math.Round(value.X);\n            value.Y = (float)Math.Round(value.Y);\n            value.Z = (float)Math.Round(value.Z);\n            value.W = (float)Math.Round(value.W);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains members from another vector rounded to the nearest integer value.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"result\">The rounded <see cref=\"Vector4\"/>.</param>\n        public static void Round(ref Vector4 value, out Vector4 result)\n        {\n            result.X = (float)Math.Round(value.X);\n            result.Y = (float)Math.Round(value.Y);\n            result.Z = (float)Math.Round(value.Z);\n            result.W = (float)Math.Round(value.W);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains cubic interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"value2\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"amount\">Weighting value.</param>\n        /// <returns>Cubic interpolation of the specified vectors.</returns>\n        public static Vector4 SmoothStep(Vector4 value1, Vector4 value2, float amount)\n        {\n            return new Vector4(\n                MathHelper.SmoothStep(value1.X, value2.X, amount),\n                MathHelper.SmoothStep(value1.Y, value2.Y, amount),\n                MathHelper.SmoothStep(value1.Z, value2.Z, amount),\n                MathHelper.SmoothStep(value1.W, value2.W, amount));\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains cubic interpolation of the specified vectors.\n        /// </summary>\n        /// <param name=\"value1\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"value2\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"amount\">Weighting value.</param>\n        /// <param name=\"result\">Cubic interpolation of the specified vectors as an output parameter.</param>\n        public static void SmoothStep(ref Vector4 value1, ref Vector4 value2, float amount, out Vector4 result)\n        {\n            result.X = MathHelper.SmoothStep(value1.X, value2.X, amount);\n            result.Y = MathHelper.SmoothStep(value1.Y, value2.Y, amount);\n            result.Z = MathHelper.SmoothStep(value1.Z, value2.Z, amount);\n            result.W = MathHelper.SmoothStep(value1.W, value2.W, amount);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains subtraction of on <see cref=\"Vector4\"/> from a another.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector4\"/>.</param>\n        /// <returns>The result of the vector subtraction.</returns>\n        public static Vector4 Subtract(Vector4 left, Vector4 right)\n        {\n            left.W -= right.W;\n            left.X -= right.X;\n            left.Y -= right.Y;\n            left.Z -= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains subtraction of on <see cref=\"Vector4\"/> from a another.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"result\">The result of the vector subtraction as an output parameter.</param>\n        public static void Subtract(ref Vector4 left, ref Vector4 right, out Vector4 result)\n        {\n            result.W = left.W - right.W;\n            result.X = left.X - right.X;\n            result.Y = left.Y - right.Y;\n            result.Z = left.Z - right.Z;\n        }\n\n        #region Transform\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <returns>Transformed <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Transform(Vector2 value, Matrix matrix)\n        {\n            Vector4 result;\n            Transform(ref value, ref matrix, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <returns>Transformed <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Transform(Vector2 value, Quaternion rotation)\n        {\n            Vector4 result;\n            Transform(ref value, ref rotation, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <returns>Transformed <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Transform(Vector3 value, Matrix matrix)\n        {\n            Vector4 result;\n            Transform(ref value, ref matrix, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <returns>Transformed <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Transform(Vector3 value, Quaternion rotation)\n        {\n            Vector4 result;\n            Transform(ref value, ref rotation, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 4d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <returns>Transformed <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Transform(Vector4 value, Matrix matrix)\n        {\n            Transform(ref value, ref matrix, out value);\n            return value;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 4d-vector by the specified <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <returns>Transformed <see cref=\"Vector4\"/>.</returns>\n        public static Vector4 Transform(Vector4 value, Quaternion rotation)\n        {\n            Vector4 result;\n            Transform(ref value, ref rotation, out result);\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector4\"/> as an output parameter.</param>\n        public static void Transform(ref Vector2 value, ref Matrix matrix, out Vector4 result)\n        {\n            result.X = (value.X * matrix.M11) + (value.Y * matrix.M21) + matrix.M41;\n            result.Y = (value.X * matrix.M12) + (value.Y * matrix.M22) + matrix.M42;\n            result.Z = (value.X * matrix.M13) + (value.Y * matrix.M23) + matrix.M43;\n            result.W = (value.X * matrix.M14) + (value.Y * matrix.M24) + matrix.M44;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 2d-vector by the specified <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector2\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector4\"/> as an output parameter.</param>\n        public static void Transform(ref Vector2 value, ref Quaternion rotation, out Vector4 result)\n        {\n            double xx = rotation.X + rotation.X;\n            double yy = rotation.Y + rotation.Y;\n            double zz = rotation.Z + rotation.Z;\n            double wxx = rotation.W * xx;\n            double wyy = rotation.W * yy;\n            double wzz = rotation.W * zz;\n            double xxx = rotation.X * xx;\n            double xyy = rotation.X * yy;\n            double xzz = rotation.X * zz;\n            double yyy = rotation.Y * yy;\n            double yzz = rotation.Y * zz;\n            double zzz = rotation.Z * zz;\n            result.X = (float)((double)value.X * (1.0 - yyy - zzz) + (double)value.Y * (xyy - wzz));\n            result.Y = (float)((double)value.X * (xyy + wzz) + (double)value.Y * (1.0 - xxx - zzz));\n            result.Z = (float)((double)value.X * (xzz - wyy) + (double)value.Y * (yzz + wxx));\n            result.W = 1f;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector4\"/> as an output parameter.</param>\n        public static void Transform(ref Vector3 value, ref Matrix matrix, out Vector4 result)\n        {\n            result.X = (value.X * matrix.M11) + (value.Y * matrix.M21) + (value.Z * matrix.M31) + matrix.M41;\n            result.Y = (value.X * matrix.M12) + (value.Y * matrix.M22) + (value.Z * matrix.M32) + matrix.M42;\n            result.Z = (value.X * matrix.M13) + (value.Y * matrix.M23) + (value.Z * matrix.M33) + matrix.M43;\n            result.W = (value.X * matrix.M14) + (value.Y * matrix.M24) + (value.Z * matrix.M34) + matrix.M44;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 3d-vector by the specified <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector3\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector4\"/> as an output parameter.</param>\n        public static void Transform(ref Vector3 value, ref Quaternion rotation, out Vector4 result)\n        {\n            double xx = rotation.X + rotation.X;\n            double yy = rotation.Y + rotation.Y;\n            double zz = rotation.Z + rotation.Z;\n            double wxx = rotation.W * xx;\n            double wyy = rotation.W * yy;\n            double wzz = rotation.W * zz;\n            double xxx = rotation.X * xx;\n            double xyy = rotation.X * yy;\n            double xzz = rotation.X * zz;\n            double yyy = rotation.Y * yy;\n            double yzz = rotation.Y * zz;\n            double zzz = rotation.Z * zz;\n            result.X = (float)((double)value.X * (1.0 - yyy - zzz) + (double)value.Y * (xyy - wzz) + (double)value.Z * (xzz + wyy));\n            result.Y = (float)((double)value.X * (xyy + wzz) + (double)value.Y * (1.0 - xxx - zzz) + (double)value.Z * (yzz - wxx));\n            result.Z = (float)((double)value.X * (xzz - wyy) + (double)value.Y * (yzz + wxx) + (double)value.Z * (1.0 - xxx - yyy));\n            result.W = 1f;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 4d-vector by the specified <see cref=\"Matrix\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector4\"/> as an output parameter.</param>\n        public static void Transform(ref Vector4 value, ref Matrix matrix, out Vector4 result)\n        {\n            var x = (value.X * matrix.M11) + (value.Y * matrix.M21) + (value.Z * matrix.M31) + (value.W * matrix.M41);\n            var y = (value.X * matrix.M12) + (value.Y * matrix.M22) + (value.Z * matrix.M32) + (value.W * matrix.M42);\n            var z = (value.X * matrix.M13) + (value.Y * matrix.M23) + (value.Z * matrix.M33) + (value.W * matrix.M43);\n            var w = (value.X * matrix.M14) + (value.Y * matrix.M24) + (value.Z * matrix.M34) + (value.W * matrix.M44);\n            result.X = x;\n            result.Y = y;\n            result.Z = z;\n            result.W = w;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"Vector4\"/> that contains a transformation of 4d-vector by the specified <see cref=\"Quaternion\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/>.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"result\">Transformed <see cref=\"Vector4\"/> as an output parameter.</param>\n        public static void Transform(ref Vector4 value, ref Quaternion rotation, out Vector4 result)\n        {\n            double xx = rotation.X + rotation.X;\n            double yy = rotation.Y + rotation.Y;\n            double zz = rotation.Z + rotation.Z;\n            double wxx = rotation.W * xx;\n            double wyy = rotation.W * yy;\n            double wzz = rotation.W * zz;\n            double xxx = rotation.X * xx;\n            double xyy = rotation.X * yy;\n            double xzz = rotation.X * zz;\n            double yyy = rotation.Y * yy;\n            double yzz = rotation.Y * zz;\n            double zzz = rotation.Z * zz;\n            result.X = (float)((double)value.X * (1.0 - yyy - zzz) + (double)value.Y * (xyy - wzz) + (double)value.Z * (xzz + wyy));\n            result.Y = (float)((double)value.X * (xyy + wzz) + (double)value.Y * (1.0 - xxx - zzz) + (double)value.Z * (yzz - wxx));\n            result.Z = (float)((double)value.X * (xzz - wyy) + (double)value.Y * (yzz + wxx) + (double)value.Z * (1.0 - xxx - yyy));\n            result.W = value.W;\n        }\n\n        /// <summary>\n        /// Apply transformation on vectors within array of <see cref=\"Vector4\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector4\"/> should be written.</param>\n        /// <param name=\"length\">The number of vectors to be transformed.</param>\n        public static void Transform\n        (\n            Vector4[] sourceArray, int sourceIndex,\n            ref Matrix matrix,\n            Vector4[] destinationArray, int destinationIndex,\n            int length\n        )\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if (sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n\n            for (var i = 0; i < length; i++)\n            {\n                Vector4.Transform(ref sourceArray[sourceIndex + i], ref matrix, out destinationArray[destinationIndex + i]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on vectors within array of <see cref=\"Vector4\"/> by the specified <see cref=\"Quaternion\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"sourceIndex\">The starting index of transformation in the source array.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        /// <param name=\"destinationIndex\">The starting index in the destination array, where the first <see cref=\"Vector4\"/> should be written.</param>\n        /// <param name=\"length\">The number of vectors to be transformed.</param>\n        public static void Transform\n        (\n            Vector4[] sourceArray, int sourceIndex,\n            ref Quaternion rotation,\n            Vector4[] destinationArray, int destinationIndex,\n            int length\n        )\n        {\n            if (sourceArray == null)\n                throw new ArgumentNullException(\"sourceArray\");\n            if (destinationArray == null)\n                throw new ArgumentNullException(\"destinationArray\");\n            if (sourceArray.Length < sourceIndex + length)\n                throw new ArgumentException(\"Source array length is lesser than sourceIndex + length\");\n            if (destinationArray.Length < destinationIndex + length)\n                throw new ArgumentException(\"Destination array length is lesser than destinationIndex + length\");\n\n            for (var i = 0; i < length; i++)\n            {\n                Vector4.Transform(ref sourceArray[sourceIndex + i], ref rotation, out destinationArray[destinationIndex + i]);\n            }\n        }\n\n        /// <summary>\n        /// Apply transformation on all vectors within array of <see cref=\"Vector4\"/> by the specified <see cref=\"Matrix\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"matrix\">The transformation <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void Transform(Vector4[] sourceArray, ref Matrix matrix, Vector4[] destinationArray)\n        {\n            Vector4.Transform(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length);\n        }\n\n        /// <summary>\n        /// Apply transformation on all vectors within array of <see cref=\"Vector4\"/> by the specified <see cref=\"Quaternion\"/> and places the results in an another array.\n        /// </summary>\n        /// <param name=\"sourceArray\">Source array.</param>\n        /// <param name=\"rotation\">The <see cref=\"Quaternion\"/> which contains rotation transformation.</param>\n        /// <param name=\"destinationArray\">Destination array.</param>\n        public static void Transform(Vector4[] sourceArray, ref Quaternion rotation, Vector4[] destinationArray)\n        {\n            Vector4.Transform(sourceArray, 0, ref rotation, destinationArray, 0, sourceArray.Length);\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Vector4\"/> in the format:\n        /// {X:[<see cref=\"X\"/>] Y:[<see cref=\"Y\"/>] Z:[<see cref=\"Z\"/>] W:[<see cref=\"W\"/>]}\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"Vector4\"/>.</returns>\n        public override string ToString()\n        {\n            return String.Format(\"{{X: {0}, Y: {1}, Z: {2}, W: {3} }}\", X, Y, Z, W);\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        /// <param name=\"z\"></param>\n        /// <param name=\"w\"></param>\n        public void Deconstruct(out float x, out float y, out float z, out float w)\n        {\n            x = X;\n            y = Y;\n            z = Z;\n            w = W;\n        }\n\n        #endregion\n\n        #region Operators\n\n        /// <summary>\n        /// Inverts values in the specified <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <param name=\"value\">Source <see cref=\"Vector4\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the inversion.</returns>\n        public static Vector4 operator -(Vector4 value)\n        {\n            return new Vector4(-value.X, -value.Y, -value.Z, -value.W);\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Vector4\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Vector4\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Vector4\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Vector4 left, Vector4 right)\n        {\n            return left.W == right.W\n                && left.X == right.X\n                && left.Y == right.Y\n                && left.Z == right.Z;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"Vector4\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Vector4\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Vector4\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\t\n        public static bool operator !=(Vector4 left, Vector4 right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Adds two vectors.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/> on the left of the add sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector4\"/> on the right of the add sign.</param>\n        /// <returns>Sum of the vectors.</returns>\n        public static Vector4 operator +(Vector4 left, Vector4 right)\n        {\n            left.W += right.W;\n            left.X += right.X;\n            left.Y += right.Y;\n            left.Z += right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Subtracts a <see cref=\"Vector4\"/> from a <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/> on the left of the sub sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector4\"/> on the right of the sub sign.</param>\n        /// <returns>Result of the vector subtraction.</returns>\n        public static Vector4 operator -(Vector4 left, Vector4 right)\n        {\n            left.W -= right.W;\n            left.X -= right.X;\n            left.Y -= right.Y;\n            left.Z -= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of two vectors by each other.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector4\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication.</returns>\n        public static Vector4 operator *(Vector4 left, Vector4 right)\n        {\n            left.W *= right.W;\n            left.X *= right.X;\n            left.Y *= right.Y;\n            left.Z *= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of vector by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/> on the left of the mul sign.</param>\n        /// <param name=\"right\">Scalar value on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication with a scalar.</returns>\n        public static Vector4 operator *(Vector4 left, float right)\n        {\n            left.W *= right;\n            left.X *= right;\n            left.Y *= right;\n            left.Z *= right;\n            return left;\n        }\n\n        /// <summary>\n        /// Multiplies the components of vector by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Scalar value on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Vector4\"/> on the right of the mul sign.</param>\n        /// <returns>Result of the vector multiplication with a scalar.</returns>\n        public static Vector4 operator *(float left, Vector4 right)\n        {\n            right.W *= left;\n            right.X *= left;\n            right.Y *= left;\n            right.Z *= left;\n            return right;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector4\"/> by the components of another <see cref=\"Vector4\"/>.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor <see cref=\"Vector4\"/> on the right of the div sign.</param>\n        /// <returns>The result of dividing the vectors.</returns>\n        public static Vector4 operator /(Vector4 left, Vector4 right)\n        {\n            left.W /= right.W;\n            left.X /= right.X;\n            left.Y /= right.Y;\n            left.Z /= right.Z;\n            return left;\n        }\n\n        /// <summary>\n        /// Divides the components of a <see cref=\"Vector4\"/> by a scalar.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Vector4\"/> on the left of the div sign.</param>\n        /// <param name=\"right\">Divisor scalar on the right of the div sign.</param>\n        /// <returns>The result of dividing a vector by a scalar.</returns>\n        public static Vector4 operator /(Vector4 left, float right)\n        {\n            float factor = 1f / right;\n            left.W *= factor;\n            left.X *= factor;\n            left.Y *= factor;\n            left.Z *= factor;\n            return left;\n        }\n\n#if NET8_0_OR_GREATER\n        public static explicit operator Vector4(SysNumerics.Vector4 value)\n        {\n            return Unsafe.BitCast<SysNumerics.Vector4, Vector4>(value);\n        }\n\n        public static explicit operator SysNumerics.Vector4(Vector4 value)\n        {\n            return Unsafe.BitCast<Vector4, SysNumerics.Vector4>(value);\n        }\n#endif\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework/Xna.Framework.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{741B4B1E-89E4-434C-8867-6129838AFD51}</ProjectGuid>\n    <AssemblyName>Xna.Framework</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The core framework.</Description>\n    <PackageTags>KNI;.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"BoundingBox.cs\" />\n    <Compile Include=\"BoundingFrustum.cs\" />\n    <Compile Include=\"BoundingSphere.cs\" />\n    <Compile Include=\"Complex.cs\" />\n    <Compile Include=\"ContainmentType.cs\" />\n    <Compile Include=\"Curve.cs\" />\n    <Compile Include=\"CurveContinuity.cs\" />\n    <Compile Include=\"CurveKey.cs\" />\n    <Compile Include=\"CurveKeyCollection.cs\" />\n    <Compile Include=\"CurveLoopType.cs\" />\n    <Compile Include=\"CurveTangent.cs\" />\n    <Compile Include=\"FrameworkDispatcher.cs\" />\n    <Compile Include=\"ICurveEvaluator.cs\" />\n    <Compile Include=\"IntersectsHelper.cs\" />\n    <Compile Include=\"MathHelper.cs\" />\n    <Compile Include=\"Matrix.cs\" />\n    <Compile Include=\"Plane.cs\" />\n    <Compile Include=\"PlaneIntersectionType.cs\" />\n    <Compile Include=\"PlayerIndex.cs\" />\n    <Compile Include=\"Point.cs\" />\n    <Compile Include=\"Pose2.cs\" />\n    <Compile Include=\"Pose3.cs\" />\n    <Compile Include=\"Quaternion.cs\" />\n    <Compile Include=\"Ray.cs\" />\n    <Compile Include=\"Rectangle.cs\" />\n    <Compile Include=\"Vector2.cs\" />\n    <Compile Include=\"Vector3.cs\" />\n    <Compile Include=\"Vector4.cs\" />\n  </ItemGroup>\n    \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/AudioChannels.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// Represents how many channels are used in the audio data.\n    /// </summary>\n    public enum AudioChannels\n    {\n        /// <summary>Single channel.</summary> \n        Mono = 1,\n        /// <summary>Two channels.</summary> \n        Stereo = 2\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/AudioEmitter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// Represents a 3D audio emitter. Used to simulate 3D audio effects.\n    /// </summary>\n    public class AudioEmitter\n    {\n        /// <summary>Initializes a new AudioEmitter instance.</summary>\n        public AudioEmitter()\n        {\n            _dopplerScale = 1.0f;\n            Forward = Vector3.Forward;\n            Position = Vector3.Zero;\n            Up = Vector3.Up;\n            Velocity = Vector3.Zero;\n        }\n\n        private float _dopplerScale;\n\n        /// <summary>Gets or sets a scale applied to the Doppler effect between the AudioEmitter and an AudioListener.</summary>\n        /// <remarks>\n        /// <para>Defaults to 1.0</para>\n        /// <para>A value of 1.0 leaves the Doppler effect unmodified.</para>\n        /// </remarks>\n        public float DopplerScale \n        {\n            get\n            {\n                return _dopplerScale;\n            }\n\n            set\n            {\n                if (value < 0.0f)\n                    throw new ArgumentOutOfRangeException(\"value\", \"AudioEmitter.DopplerScale must be greater than or equal to 0.0f\");\n\n                _dopplerScale = value;\n            }\n        }\n\n        /// <summary>Gets or sets the emitter's forward vector.</summary>\n        /// <remarks>\n        /// <para>Defaults to Vector3.Forward. (new Vector3(0, 0, -1))</para>\n        /// <para>Used with AudioListener.Velocity to calculate Doppler values.</para>\n        /// <para>The Forward and Up values must be orthonormal.</para>\n        /// </remarks>\n        public Vector3 Forward {\n            get;\n            set;\n        }\n\n        /// <summary>Gets or sets the position of this emitter.</summary>\n        public Vector3 Position {\n            get;\n            set;\n        }\n\n        /// <summary>Gets or sets the emitter's Up vector.</summary>\n        /// <remarks>\n        /// <para>Defaults to Vector3.Up. (new Vector3(0, -1, 1)).</para>\n        /// <para>The Up and Forward vectors must be orthonormal.</para>\n        /// </remarks>\n        public Vector3 Up {\n            get;\n            set;\n        }\n\n        /// <summary>Gets or sets the emitter's velocity vector.</summary>\n        /// <remarks>\n        /// <para>Defaults to Vector3.Zero.</para>\n        /// <para>This value is only used when calculating Doppler values.</para>\n        /// </remarks>\n        public Vector3 Velocity {\n            get;\n            set;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/AudioFactory.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public abstract class AudioFactory\n    {\n        private volatile static AudioFactory _current;\n\n        internal static AudioFactory Current\n        {\n            get\n            {\n                AudioFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (AudioService.SyncHandle)\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"AudioFactory not found.\");\n                    Console.WriteLine(\"Initialize audio with 'AudioFactory.RegisterAudioFactory(new ConcreteAudioFactory());'.\");\n                    AudioFactory audioFactory = CreateAudioFactory();\n                    AudioFactory.RegisterAudioFactory(audioFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static AudioFactory CreateAudioFactory()\n        {\n            Console.WriteLine(\"Registering Concrete AudioFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.Audio.ConcreteAudioFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(AudioFactory)) && !type.IsAbstract)\n                    return (AudioFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterAudioFactory(AudioFactory audioFactory)\n        {\n            if (audioFactory == null)\n                throw new NullReferenceException(\"audioFactory\");\n\n            lock (AudioService.SyncHandle)\n            {\n                if (_current == null)\n                    _current = audioFactory;\n                else\n                    throw new InvalidOperationException(\"AudioFactory allready registered.\");\n            }\n        }\n\n        public abstract AudioServiceStrategy CreateAudioServiceStrategy();\n        public abstract MicrophoneStrategy CreateMicrophoneStrategy();\n        public abstract SoundEffectStrategy CreateSoundEffectStrategy();\n    }\n\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/AudioListener.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// Represents a 3D audio listener. Used when simulating 3D Audio.\n    /// </summary>\n    public class AudioListener\n    {\n        /// <summary>\n        /// Create an <see cref=\"AudioListener\"/> instance.\n        /// </summary>\n        public AudioListener()\n        {\n            Forward = Vector3.Forward;\n            Position = Vector3.Zero;\n            Up = Vector3.Up;\n            Velocity = Vector3.Zero;\n        }\n\n        /// <summary>Gets or sets the listener's forward vector.</summary>\n        /// <remarks>\n        /// <para>Defaults to Vector3.Forward. (new Vector3(0, 0, -1))</para>\n        /// <para>Used with AudioListener.Velocity and AudioEmitter.Velocity to calculate Doppler values.</para>\n        /// <para>The Forward and Up vectors must be orthonormal.</para>\n        /// </remarks>\n        public Vector3 Forward {\n            get;\n            set;\n        }\n\n        /// <summary>Gets or sets the listener's position.</summary>\n        /// <remarks>\n        /// Defaults to Vector3.Zero.\n        /// </remarks>\n        public Vector3 Position {\n            get;\n            set;\n        }\n\n        /// <summary>\n        /// Gets or sets the listener's up vector..\n        /// </summary>\n        /// <remarks>\n        /// <para>Defaults to Vector3.Up (New Vector3(0, -1, 0)).</para>\n        /// <para>Used with AudioListener.Velocity and AudioEmitter.Velocity to calculate Doppler values.</para>\n        /// <para>The values of the Forward and Up vectors must be orthonormal.</para>\n        /// </remarks>\n        public Vector3 Up {\n            get;\n            set;\n        }\n\n        /// <summary>Gets or sets the listener's velocity vector.</summary>\n        /// <remarks>\n        /// <para>Defaults to Vector3.Zero.</para>\n        /// <para>Scaled by DopplerScale to calculate the Doppler effect value applied to a Cue.</para>\n        /// <para>This value is only used to calculate Doppler values.</para>\n        /// </remarks>\n        public Vector3 Velocity {\n            get;\n            set;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/AudioService.InstancePool.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public sealed partial class AudioService\n    {\n        private LinkedList<SoundEffectInstance> _pooledInstances = new LinkedList<SoundEffectInstance>();\n\n        /// <summary>\n        /// Add the specified instance to the pool if it is a pooled instance and removes it from the\n        /// list of playing instances.\n        /// </summary>\n        /// <param name=\"inst\">The SoundEffectInstance</param>\n        internal void AddPooledInstance(SoundEffectInstance inst)\n        {\n            if (inst.PooledInstancesNode == null)\n                return;\n\n            int maxPooledInstances = Math.Min(512, MAX_PLAYING_INSTANCES) * 2;\n            if (_pooledInstances.Count >= maxPooledInstances)\n            {\n                var firstNode = _pooledInstances.First;\n                firstNode.Value.Dispose();\n                _pooledInstances.Remove(firstNode);\n            }\n\n            _pooledInstances.AddLast(inst.PooledInstancesNode);\n        }\n\n        /// <summary>\n        /// Returns a pooled SoundEffectInstance if one is available, or allocates a new\n        /// SoundEffectInstance if the pool is empty.\n        /// </summary>\n        /// <returns>The SoundEffectInstance.</returns>\n        private SoundEffectInstance GetPooledInstance(SoundEffect effect, bool forXAct = false)\n        {\n            // search for an instance of effect\n            for (var node = _pooledInstances.First; node != null; node = node.Next)\n            {\n                if (ReferenceEquals(node.Value._effect, effect))\n                {\n                    SoundEffectInstance inst = node.Value;\n                    _pooledInstances.Remove(inst.PooledInstancesNode);\n\n                    inst._strategy.IsXAct = forXAct;\n                    inst.Reset();\n                    return inst;\n                }\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/AudioService.Microphones.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    /// <summary>\n    /// Handles the buffer events of all DynamicSoundEffectInstance instances.\n    /// </summary>\n    public sealed partial class AudioService\n    {\n        internal Microphone _defaultMicrophone = null;\n        internal List<Microphone> _microphones = new List<Microphone>();\n\n        private void UpdateMicrophones()\n        {\n            // querying all running microphones for new samples available\n            for (int i = 0; i < _microphones.Count; i++)\n                _microphones[i].UpdateBuffer();\n        }\n\n        private void StopMicrophones()\n        {\n            // stopping all running microphones before shutting down audio devices\n            for (int i = 0; i < _microphones.Count; i++)\n                _microphones[i].Stop();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/AudioService.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{   \n    public sealed partial class AudioService : IDisposable\n        , IPlatformAudioService\n    {\n        private volatile static AudioService _current;\n        private AudioServiceStrategy _strategy;\n\n        private LinkedList<SoundEffectInstance> _playingInstances = new LinkedList<SoundEffectInstance>();\n        private readonly LinkedList<DynamicSoundEffectInstance> _dynamicPlayingInstances = new LinkedList<DynamicSoundEffectInstance>();\n\n        public readonly static object SyncHandle = new object();\n\n        AudioServiceStrategy IPlatformAudioService.Strategy { get { return _strategy; } }\n\n        public static AudioService Current\n        {\n            get\n            {\n                AudioService current = _current;\n                if (current != null)\n                    return current;\n\n                // Create instance\n                lock(SyncHandle)\n                {\n                    if (_current == null)\n                    {   \n                        try\n                        {\n                            _current = new AudioService();\n                        }\n                        catch (Exception ex)\n                        {\n                            throw new NoAudioHardwareException(\"Audio has failed to initialize.\", ex);\n                        }\n                    }\n                    return _current;\n                }\n            }\n        }\n\n\n        internal int MAX_PLAYING_INSTANCES\n        {\n            get { return _strategy.PlatformGetMaxPlayingInstances(); }\n        }\n\n        private AudioService()\n        {\n            PreserveAudioContentTypeReaders();\n\n            _strategy = AudioFactory.Current.CreateAudioServiceStrategy();\n            _strategy.PlatformPopulateCaptureDevices(_microphones, ref _defaultMicrophone);\n\n            ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate += AudioService.Update;\n        }\n\n        // Trick to prevent the linker removing the code, but not actually execute the code\n        static bool _trimmingFalseFlag = false;\n        private static void PreserveAudioContentTypeReaders()\n        {\n#pragma warning disable 0219, 0649\n            // Trick to prevent the linker removing the code, but not actually execute the code\n            if (_trimmingFalseFlag)\n            {\n                // Dummy variables required for it to work with trimming ** DO NOT DELETE **\n                // This forces the classes not to be optimized out when deploying with trimming\n\n                // Framework.Audio types\n                SoundEffectReader hSoundEffectReader = new SoundEffectReader();\n            }\n#pragma warning restore 0219, 0649\n        }\n\n        internal static void UpdateMasterVolume()\n        {\n            if (_current == null) return;\n\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                    _current._UpdateMasterVolume();\n            }\n        }\n\n        internal static void OnEffectDisposed(SoundEffect effect, bool disposing)\n        {\n            if (_current == null) return;\n\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                    _current._OnEffectDisposed(effect, disposing);\n            }\n        }\n\n        internal static void Update()\n        {\n            if (_current == null) return;\n\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                {\n                    _current.UpdatePlayingInstances();\n                    _current.UpdateMicrophones();\n                }\n            }\n\n        }\n\n        public static void Suspend()\n        {\n            if (_current == null) return;\n\n            // Shutdown\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                {\n                    _current._strategy.Suspend();\n                }\n            }\n        }\n\n        public static void Resume()\n        {\n            if (_current == null) return;\n\n            // Shutdown\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                {\n                    _current._strategy.Resume();\n                }\n            }\n        }\n\n        public static void Shutdown()\n        {\n            if (_current == null) return;\n\n            // Shutdown\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                {\n                    _current.Dispose();\n                    _current = null;\n                }\n            }\n        }\n\n        private void _UpdateMasterVolume()\n        {\n            for (var node = _playingInstances.First; node != null; node = node.Next)\n            {\n                SoundEffectInstance inst = node.Value;\n\n                // XAct sounds are not controlled by the SoundEffect\n                // master volume, so we can skip them completely.\n                if (inst._strategy.IsXAct)\n                    continue;\n\n                // Re-applying the volume to itself will update\n                // the sound with the current master volume.\n                inst.Volume = inst.Volume;\n            }\n        }\n\n        public void SetReverbSettings(ReverbSettings reverbSettings)\n        {\n            _strategy.PlatformSetReverbSettings(reverbSettings);\n        }\n\n        /// <summary>\n        /// Iterates the list of playing instances, stop them and return them to the pool if they are instances of the given SoundEffect.\n        /// </summary>\n        /// <param name=\"effect\">The SoundEffect</param>\n        /// <param name=\"disposing\">true if the Effect was disposed. false if it was collected.</param>\n        private void _OnEffectDisposed(SoundEffect effect, bool disposing)\n        {\n            // stop playing instances of the disposed effect\n            for (var node = _playingInstances.First; node != null; )\n            {\n                SoundEffectInstance inst = node.Value;\n                node = node.Next;\n\n                if (inst._effect == effect)\n                {\n                    inst.Stop();\n                }\n            }\n\n            // remove instances of the disposed effect from _pooledInstances\n            for (var node = _pooledInstances.First; node != null;)\n            {\n                SoundEffectInstance inst = node.Value;\n                node = node.Next;\n\n                if (inst._effect == effect)\n                {\n                    _pooledInstances.Remove(inst.PooledInstancesNode);\n\n                    if (disposing)\n                    {\n                        inst.Dispose();\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Iterates the list of playing instances, returning them to the pool if they\n        /// have stopped playing.\n        /// </summary>\n        private void UpdatePlayingInstances()\n        {\n            // Updates buffer queues of the currently playing dynamic instances.\n            // XNA posts \"DynamicSoundEffectInstance.BufferNeeded\" events always on the main thread.\n            for (var node = _dynamicPlayingInstances.First; node != null;)\n            {\n                DynamicSoundEffectInstance inst = node.Value;\n                node = node.Next;\n\n                if (!inst.IsDisposed)\n                    inst.Update();\n            }\n\n            // Cleanup instances which have finished playing.\n            for (var node = _playingInstances.First; node != null; )\n            {\n                SoundEffectInstance inst = node.Value;\n                node = node.Next;\n\n                // Don't consume XACT instances... XACT will\n                // clear this flag when it is done with the wave.\n                if (inst._strategy.IsXAct)\n                    continue;\n\n                System.Diagnostics.Debug.Assert(!inst.IsDisposed);\n\n                inst.UpdateState();\n            }\n        }\n\n        internal bool Play(SoundEffect effect)\n        {\n            lock (SyncHandle)\n            {\n                // is Sounds Available?\n                if (!(_playingInstances.Count < MAX_PLAYING_INSTANCES))\n                    return false;\n\n                SoundEffectInstance inst = GetInstance(effect);\n\n                inst.Play();\n            }\n\n            return true;\n        }\n\n        internal bool Play(SoundEffect effect, float volume, float pitch, float pan)\n        {\n            lock (SyncHandle)\n            {\n                // is Sounds Available?\n                if (!(_playingInstances.Count < MAX_PLAYING_INSTANCES))\n                    return false;\n\n                SoundEffectInstance inst = GetInstance(effect);\n\n                inst.Volume = volume;\n                inst.Pitch = pitch;\n                inst.Pan = pan;\n\n                inst.Play();\n            }\n\n            return true;\n        }\n\n        internal SoundEffectInstance GetInstance(SoundEffect effect, bool isXAct = false)\n        {\n            SoundEffectInstance inst = GetPooledInstance(effect, isXAct);\n            if (inst == null)\n                inst = new SoundEffectInstance(this, effect, true, isXAct);\n\n            return inst;\n        }\n\n        internal void AddPlayingInstance(SoundEffectInstance inst)\n        {\n            if (_playingInstances.Count >= MAX_PLAYING_INSTANCES) // is Sounds Available?\n                throw new InstancePlayLimitException();\n\n            _playingInstances.AddLast(inst.PlayingInstancesNode);\n        }\n\n        internal void RemovePlayingInstance(SoundEffectInstance inst)\n        {\n            _playingInstances.Remove(inst.PlayingInstancesNode);\n        }\n\n        public void AddDynamicPlayingInstance(DynamicSoundEffectInstance instance)\n        {\n            _dynamicPlayingInstances.AddLast(instance.DynamicPlayingInstancesNode);\n        }\n\n        public void RemoveDynamicPlayingInstance(DynamicSoundEffectInstance instance)\n        {\n            _dynamicPlayingInstances.Remove(instance.DynamicPlayingInstancesNode);\n        }\n\n\n        /// <summary>\n        /// Returns the duration for 16-bit PCM audio.\n        /// </summary>\n        /// <param name=\"sizeInBytes\">The length of the audio data in bytes.</param>\n        /// <param name=\"sampleRate\">Sample rate, in Hertz (Hz). Must be between 8000 Hz and 48000 Hz</param>\n        /// <param name=\"channels\">Number of channels in the audio data.</param>\n        /// <returns>The duration of the audio data.</returns>\n        internal static TimeSpan GetSampleDuration(int sizeInBytes, int sampleRate, AudioChannels channels)\n        {\n            if (sizeInBytes < 0)\n                throw new ArgumentException(\"Buffer size cannot be negative.\", \"sizeInBytes\");\n            if (sampleRate < 8000 || sampleRate > 48000)\n                throw new ArgumentOutOfRangeException(\"sampleRate\");\n\n            int numChannels = (int)channels;\n            if (numChannels != 1 && numChannels != 2)\n                throw new ArgumentOutOfRangeException(\"channels\");\n\n            float dur = sizeInBytes / (sampleRate * numChannels * 16f / 8f);\n\n            return TimeSpan.FromSeconds(dur);\n        }\n\n        /// <summary>\n        /// Returns the data size in bytes for 16bit PCM audio.\n        /// </summary>\n        /// <param name=\"duration\">The total duration of the audio data.</param>\n        /// <param name=\"sampleRate\">Sample rate, in Hertz (Hz), of audio data. Must be between 8,000 and 48,000 Hz.</param>\n        /// <param name=\"channels\">Number of channels in the audio data.</param>\n        /// <returns>The size in bytes of a single sample of audio data.</returns>\n        internal static int GetSampleSizeInBytes(TimeSpan duration, int sampleRate, AudioChannels channels)\n        {\n            if (duration < TimeSpan.Zero || duration > TimeSpan.FromMilliseconds(0x7FFFFFF))\n                throw new ArgumentOutOfRangeException(\"duration\");\n            if (sampleRate < 8000 || sampleRate > 48000)\n                throw new ArgumentOutOfRangeException(\"sampleRate\");\n\n            int numChannels = (int)channels;\n            if (numChannels != 1 && numChannels != 2)\n                throw new ArgumentOutOfRangeException(\"channels\");\n\n            return (int)(duration.TotalSeconds * (sampleRate * numChannels * 16f / 8f));\n        }\n\n\n        #region IDisposable\n\n        private bool isDisposed = false;\n        public event EventHandler Disposing;\n\n        ~AudioService()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (isDisposed)\n                    return;\n\n                // stop playing instances of the disposed AudioSystem\n                for (var node = _playingInstances.First; node != null;)\n                {\n                    SoundEffectInstance inst = node.Value;\n                    node = node.Next;\n\n                    inst.Stop();\n                }\n\n                var handler = Disposing;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n\n                // dispose pooled instances\n                for (var node = _pooledInstances.First; node != null;)\n                {\n                    SoundEffectInstance inst = node.Value;\n                    node = node.Next;\n\n                    inst.Dispose();\n                }\n\n                // stop all running microphones\n                StopMicrophones();\n\n                ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate -= AudioService.Update;\n\n                _strategy.Dispose();\n                _strategy = null;\n\n                // free unmanaged resources (unmanaged objects)\n                _playingInstances.Clear();\n                _pooledInstances.Clear();\n\n                // set large fields to null.\n                _playingInstances = null;\n                _pooledInstances = null;\n\n                isDisposed = true;\n            }\n            else\n            {\n                if (isDisposed)\n                    return;\n\n                ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate -= AudioService.Update;\n\n                // stop all running microphones\n                StopMicrophones();\n                \n                _strategy = null;\n\n                // free unmanaged resources (unmanaged objects)\n                _playingInstances.Clear();\n                _pooledInstances.Clear();\n                _microphones.Clear();\n\n                // set large fields to null.\n                _playingInstances = null;\n                _pooledInstances = null;\n                _microphones = null;\n                _defaultMicrophone = null;\n\n                isDisposed = true;\n            }\n        }\n\n\n        #endregion // IDisposable\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/AudioServiceStrategy.cs",
    "content": "﻿// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Audio;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public interface IPlatformAudioService\n    {\n        AudioServiceStrategy Strategy { get; }\n    }\n\n    abstract public class AudioServiceStrategy : IDisposable\n    {\n        // factory methods\n        public abstract SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy _strategy);\n        public abstract IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels);\n\n        public abstract void Suspend();\n        public abstract void Resume();\n        public abstract int PlatformGetMaxPlayingInstances();\n        public abstract void PlatformSetReverbSettings(ReverbSettings reverbSettings);\n\n        public abstract void PlatformPopulateCaptureDevices(List<Microphone> microphones, ref Microphone defaultMicrophone);\n\n        public T ToConcrete<T>() where T : AudioServiceStrategy\n        {\n            return (T)this;\n        }\n\n        protected Microphone CreateMicrophone(string deviceIdentifier)\n        {\n            return new Microphone(deviceIdentifier);\n        }\n\n        #region IDisposable\n        ~AudioServiceStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n        #endregion\n    }\n\n    abstract public class MicrophoneStrategy : IDisposable\n    {\n        private int _sampleRate = 44100;\n        private TimeSpan _bufferDuration = TimeSpan.FromMilliseconds(1000.0);\n        private MicrophoneState _state = MicrophoneState.Stopped;\n\n        public int SampleRate\n        { \n            get { return _sampleRate; }\n            protected set { _sampleRate = value; }\n        }\n\n        public virtual TimeSpan BufferDuration\n        {\n            get { return _bufferDuration; }\n            set { _bufferDuration = value; }\n        }\n\n        public virtual MicrophoneState State\n        {\n            get { return _state; }\n            set { _state = value; }\n        }\n\n        public abstract void PlatformStart(string deviceName);\n        public abstract void PlatformStop();\n        public abstract bool PlatformUpdate();\n        public abstract bool PlatformIsHeadset();\n        public abstract int PlatformGetData(byte[] buffer, int offset, int count);\n\n\n        public TimeSpan GetSampleDuration(int sizeInBytes)\n        {\n            // this should be 10ms aligned\n            // this assumes 16bit mono data\n            return AudioService.GetSampleDuration(sizeInBytes, _sampleRate, AudioChannels.Mono);\n        }\n\n        public int GetSampleSizeInBytes(TimeSpan duration)\n        {\n            // this should be 10ms aligned\n            // this assumes 16bit mono data\n            return AudioService.GetSampleSizeInBytes(duration, _sampleRate, AudioChannels.Mono);\n        }\n\n\n        #region IDisposable\n        ~MicrophoneStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n        #endregion\n    }\n\n    abstract public class SoundEffectStrategy : IDisposable\n    {\n        public abstract void PlatformLoadAudioStream(Stream stream, out TimeSpan duration);\n\n        public abstract void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength);\n        public abstract void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength);\n        public abstract void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength);\n\n\n        #region IDisposable\n        ~SoundEffectStrategy()\n        {\n           Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);            \n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n        #endregion\n    }\n\n    public interface IPlatformSoundEffectInstance\n    {\n        T GetStrategy<T>() where T : SoundEffectInstanceStrategy;\n    }\n\n    abstract public class SoundEffectInstanceStrategy : IDisposable\n    {\n        private bool _isXAct;\n        private bool _isLooped;\n        private float _pan;\n        private float _volume;\n        private float _pitch;\n\n        public virtual bool IsXAct\n        {\n            get { return _isXAct; }\n            set { _isXAct = value; }\n        }\n\n        public virtual bool IsLooped\n        {\n            get { return _isLooped; }\n            set { _isLooped = value; }\n        }\n\n        public virtual float Pan\n        {\n            get { return _pan; }\n            set { _pan = value; }\n        }\n\n        public virtual float Volume\n        {\n            get { return _volume; }\n            set { _volume = value; }\n        }\n\n        public virtual float Pitch\n        {\n            get { return _pitch; }\n            set { _pitch = value; }\n        }\n\n        protected SoundEffectInstanceStrategy(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy) { }\n\n        public abstract void PlatformApply3D(AudioListener listener, AudioEmitter emitter);\n        public abstract void PlatformSetIsLooped(bool isLooped, SoundState state);\n        public abstract bool PlatformUpdateState(ref SoundState state);\n\n        public abstract void PlatformPause();\n        public abstract void PlatformPlay(bool isLooped);\n        public abstract void PlatformResume(bool isLooped);\n        public abstract void PlatformStop();\n\n        public abstract void PlatformRelease(bool isLooped);\n\n        public abstract void PlatformSetReverbMix(SoundState state, float mix, float pan);\n        public abstract void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency);\n        public abstract void PlatformClearFilter();\n\n        #region IDisposable\n        ~SoundEffectInstanceStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n        #endregion\n    }\n\n    public interface IDynamicSoundEffectInstanceStrategy\n    {\n        DynamicSoundEffectInstance DynamicSoundEffectInstance { get; set; }\n\n        int BuffersNeeded { get; set; }\n\n        void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state);\n        void DynamicPlatformUpdateBuffers();\n        void DynamicPlatformClearBuffers();\n        int DynamicPlatformGetPendingBufferCount();\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/DynamicSoundEffectInstance.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// A <see cref=\"SoundEffectInstance\"/> for which the audio buffer is provided by the game at run time.\n    /// </summary>\n    public sealed class DynamicSoundEffectInstance : SoundEffectInstance\n    {\n        private IDynamicSoundEffectInstanceStrategy _dynamicStrategy;\n\n        private const int TargetPendingBufferCount = 3;\n        private bool _initialBuffersNeeded;\n        \n        private int _sampleRate;\n        private AudioChannels _channels;\n        private SoundState _dynamicState = SoundState.Stopped;\n\n        internal LinkedListNode<DynamicSoundEffectInstance> DynamicPlayingInstancesNode { get; private set; }\n\n        #region Public Properties\n\n        /// <summary>\n        /// This value has no effect on DynamicSoundEffectInstance.\n        /// It may not be set.\n        /// </summary>\n        public override bool IsLooped\n        {\n            get { return false; }\n            set\n            {\n                AssertNotDisposed();\n                if (value == true)\n                    throw new InvalidOperationException(\"IsLooped cannot be set true. Submit looped audio data to implement looping.\");\n            }\n        }\n\n        public override SoundState State\n        {\n            get\n            {\n                AssertNotDisposed();\n                return _dynamicState;\n            }\n        }\n\n        /// <summary>\n        /// Returns the number of audio buffers queued for playback.\n        /// </summary>\n        public int PendingBufferCount\n        {\n            get\n            {\n                AssertNotDisposed();\n                return _dynamicStrategy.DynamicPlatformGetPendingBufferCount();\n            }\n        }\n\n        /// <summary>\n        /// The event that occurs when the number of queued audio buffers is less than or equal to 2.\n        /// </summary>\n        /// <remarks>\n        /// This event may occur when <see cref=\"Play()\"/> is called or during playback when a buffer is completed.\n        /// </remarks>\n        public event EventHandler<EventArgs> BufferNeeded;\n\n        #endregion\n\n        #region Public Constructor\n\n        /// <param name=\"sampleRate\">Sample rate, in Hertz (Hz).</param>\n        /// <param name=\"channels\">Number of channels (mono or stereo).</param>\n        public DynamicSoundEffectInstance(int sampleRate, AudioChannels channels) \n            : base(AudioService.Current)\n        {\n            if ((sampleRate < 8000) || (sampleRate > 48000))\n                throw new ArgumentOutOfRangeException(\"sampleRate\");\n            if ((channels != AudioChannels.Mono) && (channels != AudioChannels.Stereo))\n                throw new ArgumentOutOfRangeException(\"channels\");\n            \n            _sampleRate = sampleRate;\n            _channels = channels;\n\n            // This instance is added to the pool so that its volume reflects master volume changes\n            // and it contributes to the playing instances limit, but the source/voice is not owned by the pool.\n            DynamicPlayingInstancesNode = new LinkedListNode<DynamicSoundEffectInstance>(this);\n\n            _dynamicStrategy = ((IPlatformAudioService)_audioService).Strategy.CreateDynamicSoundEffectInstanceStrategy(_sampleRate, (int)_channels);\n            _strategy = (SoundEffectInstanceStrategy)_dynamicStrategy;\n            _dynamicStrategy.DynamicSoundEffectInstance = this;\n        }\n\n        #endregion\n\n        #region Public Functions\n\n        /// <summary>\n        /// Returns the duration of an audio buffer of the specified size, based on the settings of this instance.\n        /// </summary>\n        /// <param name=\"sizeInBytes\">Size of the buffer, in bytes.</param>\n        /// <returns>The playback length of the buffer.</returns>\n        public TimeSpan GetSampleDuration(int sizeInBytes)\n        {\n            AssertNotDisposed();\n            return AudioService.GetSampleDuration(sizeInBytes, _sampleRate, _channels);\n        }\n\n        /// <summary>\n        /// Returns the size, in bytes, of a buffer of the specified duration, based on the settings of this instance.\n        /// </summary>\n        /// <param name=\"duration\">The playback length of the buffer.</param>\n        /// <returns>The data size of the buffer, in bytes.</returns>\n        public int GetSampleSizeInBytes(TimeSpan duration)\n        {\n            AssertNotDisposed();\n            return AudioService.GetSampleSizeInBytes(duration, _sampleRate, _channels);\n        }\n\n        /// <summary>\n        /// Pauses playback of the DynamicSoundEffectInstance.\n        /// </summary>\n        public override void Pause()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = _dynamicState;\n                switch (state)\n                {\n                    case SoundState.Paused:\n                        return;\n                    case SoundState.Stopped:\n                        return;\n                    case SoundState.Playing:\n                        {\n                            _strategy.PlatformPause();\n                            _dynamicState = SoundState.Paused;\n                            _initialBuffersNeeded = false;\n                        }\n                        return;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Plays or resumes the DynamicSoundEffectInstance.\n        /// </summary>\n        public override void Play()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = _dynamicState;\n                switch (state)\n                {\n                    case SoundState.Playing:\n                        return;\n                    case SoundState.Paused:\n                        Resume();\n                        return;\n                    case SoundState.Stopped:\n                        {\n                            // Ensure that the volume reflects master volume, which is done by the setter.\n                            Volume = Volume;\n\n                            _strategy.PlatformPlay(IsLooped);\n                            _dynamicState = SoundState.Playing;\n                            _initialBuffersNeeded = true;\n\n                            _audioService.AddPlayingInstance(this);\n                            _audioService.AddDynamicPlayingInstance(this);\n                        }\n                        return;\n                }               \n            }\n        }\n\n        /// <summary>\n        /// Resumes playback of the DynamicSoundEffectInstance.\n        /// </summary>\n        public override void Resume()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = _dynamicState;\n                switch (state)\n                {\n                    case SoundState.Playing:\n                        return;\n                    case SoundState.Stopped:\n                        Play();\n                        return;\n                    case SoundState.Paused:\n                        {\n                            Volume = Volume;\n\n                            _strategy.PlatformResume(IsLooped);\n                            _dynamicState = SoundState.Playing;\n                        }\n                        return;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Immediately stops playing the DynamicSoundEffectInstance.\n        /// </summary>\n        /// <remarks>\n        /// Calling this also releases all queued buffers.\n        /// </remarks>\n        public override void Stop()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = _dynamicState;\n                switch (state)\n                {\n                    case SoundState.Stopped:\n                        {\n                            _dynamicStrategy.DynamicPlatformClearBuffers();\n                        }\n                        return;\n                    case SoundState.Paused:\n                    case SoundState.Playing:\n                        {\n                            _strategy.PlatformStop();\n                            _dynamicState = SoundState.Stopped;\n\n                            _dynamicStrategy.DynamicPlatformClearBuffers();\n                            _initialBuffersNeeded = false;\n\n                            _audioService.RemovePlayingInstance(this);\n                            _audioService.RemoveDynamicPlayingInstance(this);\n                        }\n                        return;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Stops playing the DynamicSoundEffectInstance.\n        /// </summary>\n        /// <remarks>\n        /// Calling this also releases all queued buffers.\n        /// </remarks>\n        public override void Stop(bool immediate)\n        {\n            if (immediate)\n            {\n                Stop();\n                return;\n            }\n            \n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = State;\n                switch (state)\n                {\n                    case SoundState.Stopped:\n                        {\n                            _dynamicStrategy.DynamicPlatformClearBuffers();\n                        }\n                        return;\n                    case SoundState.Paused:\n                    case SoundState.Playing:\n                        {\n                            System.Diagnostics.Debug.Assert(IsLooped == false);\n                            _strategy.PlatformRelease(IsLooped);\n                        }\n                        return;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Queues an audio buffer for playback.\n        /// </summary>\n        /// <remarks>\n        /// The buffer length must conform to alignment requirements for the audio format.\n        /// </remarks>\n        /// <param name=\"buffer\">The buffer containing PCM audio data.</param>\n        public void SubmitBuffer(byte[] buffer)\n        {\n            SubmitBuffer(buffer, 0, buffer.Length);\n        }\n\n        /// <summary>\n        /// Queues an audio buffer for playback.\n        /// </summary>\n        /// <remarks>\n        /// The buffer length must conform to alignment requirements for the audio format.\n        /// </remarks>\n        /// <param name=\"buffer\">The buffer containing PCM audio data.</param>\n        /// <param name=\"offset\">The starting position of audio data.</param>\n        /// <param name=\"count\">The amount of bytes to use.</param>\n        public void SubmitBuffer(byte[] buffer, int offset, int count)\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                if ((buffer == null) || (buffer.Length == 0))\n                    throw new ArgumentException(\"Buffer may not be null or empty.\");\n                if (count <= 0)\n                    throw new ArgumentException(\"Number of bytes must be greater than zero.\");\n                if ((offset + count) > buffer.Length)\n                    throw new ArgumentException(\"Buffer is shorter than the specified number of bytes from the offset.\");\n\n                // Ensure that the buffer length and start position match alignment.\n                int sampleSize = 2 * (int)_channels;\n                if (count % sampleSize != 0)\n                    throw new ArgumentException(\"Number of bytes does not match format alignment.\");\n                if (offset % sampleSize != 0)\n                    throw new ArgumentException(\"Offset into the buffer does not match format alignment.\");\n\n                if (PendingBufferCount >= 64)\n                    throw new InvalidOperationException(\"Buffers Limit Exceeded.\");\n\n                _dynamicStrategy.DynamicPlatformSubmitBuffer(buffer, offset, count, _dynamicState);\n            }\n        }\n\n        #endregion\n\n        #region Nonpublic Functions\n\n        internal void Update()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                // Update the buffers\n                _dynamicStrategy.DynamicPlatformUpdateBuffers();\n                if (this.IsDisposed)\n                    return;\n\n                if (_initialBuffersNeeded)\n                    _dynamicStrategy.BuffersNeeded = Math.Max(_dynamicStrategy.BuffersNeeded, TargetPendingBufferCount - 1 - PendingBufferCount);\n\n                // Raise the event\n                var bufferNeededHandler = BufferNeeded;\n                if (bufferNeededHandler != null)\n                {\n                    // raise the event for each processed buffer\n                    while(_dynamicStrategy.BuffersNeeded-- != 0)\n                    {\n                        bufferNeededHandler(this, EventArgs.Empty);\n                        if (this.IsDisposed)\n                            return;\n                    }\n\n                    if (State == SoundState.Playing && PendingBufferCount < TargetPendingBufferCount)\n                        bufferNeededHandler(this, EventArgs.Empty);\n                }\n\n                _initialBuffersNeeded = true;\n                _dynamicStrategy.BuffersNeeded = 0;\n            }\n        }\n\n        private void AssertNotDisposed()\n        {\n            if (IsDisposed)\n                throw new ObjectDisposedException(\"DynamicSoundEffectInstance\");\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if(disposing)\n            {\n                if (_dynamicStrategy !=null)\n                    _dynamicStrategy.DynamicSoundEffectInstance = null;\n                base.Dispose(disposing);\n                _dynamicStrategy = null;\n                DynamicPlayingInstancesNode = null;\n            }\n            else\n            {\n                if (_dynamicStrategy != null)\n                    _dynamicStrategy.DynamicSoundEffectInstance = null;\n                base.Dispose(disposing);\n                _dynamicStrategy = null;\n                DynamicPlayingInstancesNode = null;\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/InstancePlayLimitException.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// The exception thrown when the system attempts to play more SoundEffectInstances than allotted.\n    /// </summary>\n    /// <remarks>\n    /// Most platforms have a hard limit on how many sounds can be played simultaneously. This exception is thrown when that limit is exceeded.\n    /// </remarks>\n    [DataContract]\n    public sealed class InstancePlayLimitException : Exception\n    {\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Microphone.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// Microphone state. \n    /// </summary>\n    public enum MicrophoneState\n    {\n        Started,\n        Stopped\n    }\n\n    /// <summary>\n    /// Provides microphones capture features. \n    /// </summary>\n    public sealed class Microphone\n    {\n        MicrophoneStrategy _strategy { get; set; }\n\n        #region Internal Constructors\n        \n        internal Microphone() : this(null)\n        {\n        }\n\n        internal Microphone(string name)\n        {\n            Name = name;\n            _strategy = AudioFactory.Current.CreateMicrophoneStrategy();\n        }\n\n        #endregion\n\n        #region Public Fields\n\n        /// <summary>\n        /// Returns the friendly name of the microphone.\n        /// </summary>\n        public readonly string Name;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Gets or sets the capture buffer duration. This value must be greater than 100 milliseconds, lower than 1000 milliseconds, and must be 10 milliseconds aligned (BufferDuration % 10 == 10).\n        /// </summary>\n        public TimeSpan BufferDuration\n        {\n            get { return _strategy.BufferDuration; }\n            set\n            {\n                if (value.TotalMilliseconds < 100 || value.TotalMilliseconds > 1000)\n                    throw new ArgumentOutOfRangeException(\"Buffer duration must be a value between 100 and 1000 milliseconds.\");\n                if (value.TotalMilliseconds % 10 != 0)\n                    throw new ArgumentOutOfRangeException(\"Buffer duration must be 10ms aligned (BufferDuration % 10 == 0)\");\n\n                _strategy.BufferDuration = value;\n            }\n        }\n\n        /// <summary>\n        /// Determines if the microphone is a wired headset.\n        /// Note: XNA could know if a headset microphone was plugged in an Xbox 360 controller but MonoGame can't.\n        /// </summary>\n        public bool IsHeadset\n        {\n            get { return _strategy.PlatformIsHeadset(); }\n        }\n\n        /// <summary>\n        /// Returns the sample rate of the captured audio.\n        /// Note: default value is 44100hz\n        /// </summary>\n        public int SampleRate\n        {\n            get { return _strategy.SampleRate; }\n        }\n\n        /// <summary>\n        /// Returns the state of the Microphone. \n        /// </summary>\n        public MicrophoneState State\n        {\n            get { return _strategy.State; }\n        }\n\n        #endregion\n\n        #region Static Members\n\n        private static ReadOnlyCollection<Microphone> _readOnlyMicrophones = null;\n\n        /// <summary>\n        /// Returns all compatible microphones.\n        /// </summary>\n        public static ReadOnlyCollection<Microphone> All\n        {\n            get\n            {\n                if (_readOnlyMicrophones == null)\n                    _readOnlyMicrophones = new ReadOnlyCollection<Microphone>(AudioService.Current._microphones);\n                return _readOnlyMicrophones;\n            }\n        }\n        \n        /// <summary>\n        /// Returns the default microphone.\n        /// </summary>\n        public static Microphone Default\n        {\n            get { return AudioService.Current._defaultMicrophone; }\n        }       \n\n        #endregion\n\n        #region Public Methods\n\n        /// <summary>\n        /// Returns the duration based on the size of the buffer (assuming 16-bit PCM data).\n        /// </summary>\n        /// <param name=\"sizeInBytes\">Size, in bytes</param>\n        /// <returns>TimeSpan of the duration.</returns>\n        public TimeSpan GetSampleDuration(int sizeInBytes)\n        {\n            return _strategy.GetSampleDuration(sizeInBytes);\n        }\n\n        /// <summary>\n        /// Returns the size, in bytes, of the array required to hold the specified duration of 16-bit PCM data. \n        /// </summary>\n        /// <param name=\"duration\">TimeSpan of the duration of the sample.</param>\n        /// <returns>Size, in bytes, of the buffer.</returns>\n        public int GetSampleSizeInBytes(TimeSpan duration)\n        {\n            // this should be 10ms aligned\n            // this assumes 16bit mono data\n            return _strategy.GetSampleSizeInBytes(duration);\n        }\n\n        /// <summary>\n        /// Starts microphone capture.\n        /// </summary>\n        public void Start()\n        {\n            MicrophoneState state = State;\n            switch (state)\n            {\n                case MicrophoneState.Started:\n                    return;\n                case MicrophoneState.Stopped:\n                    {\n                        _strategy.PlatformStart(Name);\n                        _strategy.State = MicrophoneState.Started;\n                    }\n                    return;\n            }\n        }\n\n        /// <summary>\n        /// Stops microphone capture.\n        /// </summary>\n        public void Stop()\n        {\n            MicrophoneState state = State;\n            switch (state)\n            {\n                case MicrophoneState.Started:\n                    {\n                        _strategy.PlatformStop();\n                        _strategy.State = MicrophoneState.Stopped;\n                    }\n                    return;\n                case MicrophoneState.Stopped:\n                    return;\n            }\n        }\n\n        /// <summary>\n        /// Gets the latest available data from the microphone.\n        /// </summary>\n        /// <param name=\"buffer\">Buffer, in bytes, of the captured data (16-bit PCM).</param>\n        /// <returns>The buffer size, in bytes, of the captured data.</returns>\n        public int GetData(byte[] buffer)\n        {\n            return GetData(buffer, 0, buffer.Length);\n        }\n\n        /// <summary>\n        /// Gets the latest available data from the microphone.\n        /// </summary>\n        /// <param name=\"buffer\">Buffer, in bytes, of the captured data (16-bit PCM).</param>\n        /// <param name=\"offset\">Byte offset.</param>\n        /// <param name=\"count\">Amount, in bytes.</param>\n        /// <returns>The buffer size, in bytes, of the captured data.</returns>\n        public int GetData(byte[] buffer, int offset, int count)\n        {\n            if (State == MicrophoneState.Stopped || BufferReady == null)\n                return 0;\n\n            return _strategy.PlatformGetData(buffer, offset, count);\n        }\n\n        #endregion\n\n        #region Public Events\n\n        /// <summary>\n        /// Event fired when the audio data are available.\n        /// </summary>\n        public event EventHandler<EventArgs> BufferReady;\n\n        #endregion\n\n\n        internal void UpdateBuffer()\n        {\n            MicrophoneState state = State;\n            switch (state)\n            {\n                case MicrophoneState.Started:\n                    {\n                        var handler = BufferReady;\n                        if (handler == null)\n                            return;\n\n                        if (_strategy.PlatformUpdate())\n                            handler.Invoke(this, EventArgs.Empty);\n                    }\n                    return;\n                case MicrophoneState.Stopped:\n                    return;\n            }\n        }\n\n        #region Static Methods\n\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/NoAudioHardwareException.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n\n    /// <summary>\n    /// The exception thrown when no audio hardware is present, or driver issues are detected.\n    /// </summary>\n    [DataContract]\n    public sealed class NoAudioHardwareException : Exception\n    {\n        /// <param name=\"msg\">A message describing the error.</param>\n        public NoAudioHardwareException(string msg)\n            : base(msg)\n        {\n        }\n\n        /// <param name=\"msg\">A message describing the error.</param>\n        /// <param name=\"innerException\">The exception that is the underlying cause of the current exception. If not null, the current exception is raised in a try/catch block that handled the innerException.</param>\n        public NoAudioHardwareException(string msg, Exception innerException)\n            : base(msg, innerException)\n        {\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/NoMicrophoneConnectedException.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n\n    /// <summary>\n    /// The exception thrown when no audio hardware is present, or driver issues are detected.\n    /// </summary>\n    [DataContract]\n    public sealed class NoMicrophoneConnectedException : Exception\n    {\n        public NoMicrophoneConnectedException()\n            : base()\n        {\n        }\n\n        /// <param name=\"msg\">A message describing the error.</param>\n        public NoMicrophoneConnectedException(string msg)\n            : base(msg)\n        {\n        }\n\n        /// <param name=\"msg\">A message describing the error.</param>\n        /// <param name=\"innerException\">The exception that is the underlying cause of the current exception. If not null, the current exception is raised in a try/catch block that handled the innerException.</param>\n        public NoMicrophoneConnectedException(string msg, Exception innerException)\n            : base(msg, innerException)\n        {\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/SoundEffect.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n﻿\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>Represents a loaded sound resource.</summary>\n    /// <remarks>\n    /// <para>A SoundEffect represents the buffer used to hold audio data and metadata. SoundEffectInstances are used to play from SoundEffects. Multiple SoundEffectInstance objects can be created and played from the same SoundEffect object.</para>\n    /// <para>The only limit on the number of loaded SoundEffects is restricted by available memory. When a SoundEffect is disposed, all SoundEffectInstances created from it will become invalid.</para>\n    /// <para>SoundEffect.Play() can be used for 'fire and forget' sounds. If advanced playback controls like volume or pitch is required, use SoundEffect.CreateInstance().</para>\n    /// </remarks>\n    public sealed class SoundEffect : IDisposable\n    {\n        #region Internal Audio Data\n\n        private string _name = string.Empty;\n        \n        private bool _isDisposed = false;\n        private readonly TimeSpan _duration;\n\n        #endregion\n\n        internal SoundEffectStrategy _strategy { get; set; }\n\n        #region Internal Constructors\n\n        // Only used from SoundEffect.FromStream.\n        private SoundEffect(Stream stream)\n        {\n            /*\n              The Stream object must point to the head of a valid PCM wave file. Also, this wave file must be in the RIFF bitstream format.\n              The audio format has the following restrictions:\n              Must be a PCM wave file\n              Can only be mono or stereo\n              Must be 8 or 16 bit\n              Sample rate must be between 8,000 Hz and 48,000 Hz\n            */\n\n            _strategy = AudioFactory.Current.CreateSoundEffectStrategy();\n            _strategy.PlatformLoadAudioStream(stream, out _duration);\n        }\n\n        // Only used from SoundEffectReader.\n        internal SoundEffect(byte[] header, byte[] buffer, int bufferSize, int durationMs, int loopStart, int loopLength)\n        {\n            _duration = TimeSpan.FromMilliseconds(durationMs);\n\n            _strategy = AudioFactory.Current.CreateSoundEffectStrategy();\n            _strategy.PlatformInitializeFormat(header, buffer, 0, bufferSize, loopStart, loopLength);\n        }\n\n        // Only used from XACT WaveBank.\n        internal SoundEffect(MiniFormatTag codec, byte[] buffer, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength)\n        {\n            _strategy = AudioFactory.Current.CreateSoundEffectStrategy();\n\n            switch(codec)\n            {\n                // Handle the common case... the rest is platform specific.\n                case MiniFormatTag.Pcm:\n                    _duration = TimeSpan.FromSeconds((float)buffer.Length / (sampleRate * blockAlignment));\n                    _strategy.PlatformInitializePcm(buffer, 0, buffer.Length, 16, sampleRate, channels, loopStart, loopLength);\n                    return;\n\n                case MiniFormatTag.Adpcm:\n                    _duration = TimeSpan.FromSeconds((float)loopLength / sampleRate);\n                    _strategy.PlatformInitializeXactAdpcm(buffer, 0, buffer.Length, channels, sampleRate, blockAlignment, loopStart, loopLength);\n                    return;\n\n                default:\n                    throw new NotSupportedException(\"Unsupported sound format!\");\n            }\n        }\n\n        #endregion\n\n        #region Public Constructors\n\n        /// <summary>\n        /// Create a sound effect.\n        /// </summary>\n        /// <param name=\"buffer\">The buffer with the sound data.</param>\n        /// <param name=\"sampleRate\">The sound data sample rate in hertz.</param>\n        /// <param name=\"channels\">The number of channels in the sound data.</param>\n        /// <remarks>This only supports uncompressed 16bit PCM wav data.</remarks>\n        public SoundEffect(byte[] buffer, int sampleRate, AudioChannels channels)\n             : this(buffer, 0, buffer != null ? buffer.Length : 0, sampleRate, channels, 0, 0)\n        {\n        }\n\n        /// <summary>\n        /// Create a sound effect.\n        /// </summary>\n        /// <param name=\"buffer\">The buffer with the sound data.</param>\n        /// <param name=\"offset\">The offset to the start of the sound data in bytes.</param>\n        /// <param name=\"count\">The length of the sound data in bytes.</param>\n        /// <param name=\"sampleRate\">The sound data sample rate in hertz.</param>\n        /// <param name=\"channels\">The number of channels in the sound data.</param>\n        /// <param name=\"loopStart\">The position where the sound should begin looping in samples.</param>\n        /// <param name=\"loopLength\">The duration of the sound data loop in samples.</param>\n        /// <remarks>This only supports uncompressed 16bit PCM wav data.</remarks>\n        public SoundEffect(byte[] buffer, int offset, int count, int sampleRate, AudioChannels channels, int loopStart, int loopLength)\n        {\n            if (sampleRate < 8000 || sampleRate > 48000)\n                throw new ArgumentOutOfRangeException(\"sampleRate\");\n            if ((int)channels != 1 && (int)channels != 2)\n                throw new ArgumentOutOfRangeException(\"channels\");\n\n            if (buffer == null || buffer.Length == 0)\n                throw new ArgumentException(\"Ensure that the buffer length is non-zero.\", \"buffer\");\n\n            int blockAlign = (int)channels * 2;\n            if (count <= 0)\n                throw new ArgumentException(\"Ensure that the count is greater than zero.\", \"count\");\n            if ((count % blockAlign) != 0)\n                throw new ArgumentException(\"Ensure that the count meets the block alignment requirements for the number of channels.\", \"count\");\n\n            if (offset < 0)\n                throw new ArgumentException(\"The offset cannot be negative.\", \"offset\");\n            if (((ulong)count + (ulong)offset) > (ulong)buffer.Length)\n                throw new ArgumentException(\"Ensure that the offset+count region lines within the buffer.\", \"offset\");\n\n            int totalSamples = count / blockAlign;\n\n            if (loopStart < 0)\n                throw new ArgumentException(\"The loopStart cannot be negative.\", \"loopStart\");\n            if (loopStart > totalSamples)\n                throw new ArgumentException(\"The loopStart cannot be greater than the total number of samples.\", \"loopStart\");\n\n            if (loopLength == 0)\n                loopLength = totalSamples - loopStart;\n\n            if (loopLength < 0)\n                throw new ArgumentException(\"The loopLength cannot be negative.\", \"loopLength\");\n            if (((ulong)loopStart + (ulong)loopLength) > (ulong)totalSamples)\n                throw new ArgumentException(\"Ensure that the loopStart+loopLength region lies within the sample range.\", \"loopLength\");\n\n            _duration = AudioService.GetSampleDuration(count, sampleRate, channels);\n\n            _strategy = AudioFactory.Current.CreateSoundEffectStrategy();\n            _strategy.PlatformInitializePcm(buffer, offset, count, 16, sampleRate, (int)channels, loopStart, loopLength);\n        }\n\n        #endregion\n\n        #region Finalizer\n\n        /// <summary>\n        /// Releases unmanaged resources and performs other cleanup operations before the\n        /// <see cref=\"Microsoft.Xna.Framework.Audio.SoundEffect\"/> is reclaimed by garbage collection.\n        /// </summary>\n        ~SoundEffect()\n        {\n            Dispose(false);\n        }\n\n        #endregion\n\n        #region Additional SoundEffect/SoundEffectInstance Creation Methods\n\n        /// <summary>\n        /// Creates a new SoundEffectInstance for this SoundEffect.\n        /// </summary>\n        /// <returns>A new SoundEffectInstance for this SoundEffect.</returns>\n        /// <remarks>Creating a SoundEffectInstance before calling SoundEffectInstance.Play() allows you to access advanced playback features, such as volume, pitch, and 3D positioning.</remarks>\n        public SoundEffectInstance CreateInstance()\n        {\n            return new SoundEffectInstance(AudioService.Current, this);\n        }\n\n        /// <summary>\n        /// Creates a new SoundEffect object based on the specified data stream.\n        /// </summary>\n        /// <param name=\"stream\">A stream containing the wave data.</param>\n        /// <returns>A new SoundEffect object.</returns>\n        /// <remarks>The stream must point to the head of a valid wave file in the RIFF bitstream format.  The formats supported are:\n        /// <list type=\"bullet\">\n        /// <item>\n        /// <description>8-bit unsigned PCM</description>\n        /// <description>16-bit signed PCM</description>\n        /// <description>24-bit signed PCM</description>\n        /// <description>32-bit IEEE float PCM</description>\n        /// <description>MS-ADPCM 4-bit compressed</description>\n        /// <description>IMA/ADPCM (IMA4) 4-bit compressed</description>\n        /// </item>\n        /// </list>\n        /// </remarks>\n        public static SoundEffect FromStream(Stream stream)\n        {\n            if (stream == null)\n                throw new ArgumentNullException(\"stream\");\n\n            return new SoundEffect(stream);\n        }\n        #endregion\n\n        #region Play\n\n        /// <summary>Gets an internal SoundEffectInstance and plays it.</summary>\n        /// <returns>True if a SoundEffectInstance was successfully played, false if not.</returns>\n        /// <remarks>\n        /// <para>Play returns false if more SoundEffectInstances are currently playing then the platform allows.</para>\n        /// <para>To loop a sound or apply 3D effects, call SoundEffect.CreateInstance() and SoundEffectInstance.Play() instead.</para>\n        /// <para>SoundEffectInstances used by SoundEffect.Play() are pooled internally.</para>\n        /// </remarks>\n        public bool Play()\n        {\n            return AudioService.Current.Play(this);\n        }\n\n        /// <summary>Gets an internal SoundEffectInstance and plays it with the specified volume, pitch, and panning.</summary>\n        /// <returns>True if a SoundEffectInstance was successfully created and played, false if not.</returns>\n        /// <param name=\"volume\">Volume, ranging from 0.0 (silence) to 1.0 (full volume). Volume during playback is scaled by SoundEffect.MasterVolume.</param>\n        /// <param name=\"pitch\">Pitch adjustment, ranging from -1.0 (down an octave) to 0.0 (no change) to 1.0 (up an octave).</param>\n        /// <param name=\"pan\">Panning, ranging from -1.0 (left speaker) to 0.0 (centered), 1.0 (right speaker).</param>\n        /// <remarks>\n        /// <para>Play returns false if more SoundEffectInstances are currently playing then the platform allows.</para>\n        /// <para>To apply looping or simulate 3D audio, call SoundEffect.CreateInstance() and SoundEffectInstance.Play() instead.</para>\n        /// <para>SoundEffectInstances used by SoundEffect.Play() are pooled internally.</para>\n        /// </remarks>\n        public bool Play(float volume, float pitch, float pan)\n        {\n            return AudioService.Current.Play(this, volume, pitch,  pan);\n        }\n\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>Gets the duration of the SoundEffect.</summary>\n        public TimeSpan Duration\n        {\n            get\n            {\n                if (_duration.Ticks == 0)\n                    throw new NotSupportedException();\n                return _duration;\n            }\n        }\n\n        /// <summary>Gets or sets the asset name of the SoundEffect.</summary>\n        public string Name\n        {\n            get { return _name; }\n            set { _name = value; }\n        }\n\n        #endregion\n\n        #region Static Members\n\n        static float _masterVolume = 1.0f;\n        /// <summary>\n        /// Gets or sets the master volume scale applied to all SoundEffectInstances.\n        /// </summary>\n        /// <remarks>\n        /// <para>Each SoundEffectInstance has its own Volume property that is independent to SoundEffect.MasterVolume. During playback SoundEffectInstance.Volume is multiplied by SoundEffect.MasterVolume.</para>\n        /// <para>This property is used to adjust the volume on all current and newly created SoundEffectInstances. The volume of an individual SoundEffectInstance can be adjusted on its own.</para>\n        /// </remarks>\n        public static float MasterVolume \n        { \n            get { return _masterVolume; }\n            set\n            {\n                if (value < 0.0f || value > 1.0f)\n                    throw new ArgumentOutOfRangeException();\n\n                if (_masterVolume == value)\n                    return;\n                \n                _masterVolume = value;\n                AudioService.UpdateMasterVolume();\n            }\n        }\n\n        static float _distanceScale = 1.0f;\n        /// <summary>\n        /// Gets or sets the scale of distance calculations.\n        /// </summary>\n        /// <remarks> \n        /// <para>DistanceScale defaults to 1.0 and must be greater than 0.0.</para>\n        /// <para>Higher values reduce the rate of falloff between the sound and listener.</para>\n        /// </remarks>\n        public static float DistanceScale\n        {\n            get { return _distanceScale; }\n            set\n            {\n                if (value <= 0f)\n                    throw new ArgumentOutOfRangeException(\"value\", \"value of DistanceScale\");\n\n                _distanceScale = value;\n            }\n        }\n\n        static float _dopplerScale = 1f;\n        /// <summary>\n        /// Gets or sets the scale of Doppler calculations applied to sounds.\n        /// </summary>\n        /// <remarks>\n        /// <para>DopplerScale defaults to 1.0 and must be greater or equal to 0.0</para>\n        /// <para>Affects the relative velocity of emitters and listeners.</para>\n        /// <para>Higher values more dramatically shift the pitch for the given relative velocity of the emitter and listener.</para>\n        /// </remarks>\n        public static float DopplerScale\n        {\n            get { return _dopplerScale; }\n            set\n            {\n                // As per documenation it does not look like the value can be less than 0\n                //   although the documentation does not say it throws an error we will anyway\n                //   just so it is like the DistanceScale\n                if (value < 0.0f)\n                    throw new ArgumentOutOfRangeException(\"value\", \"value of DopplerScale\");\n\n                _dopplerScale = value;\n            }\n        }\n\n        static float speedOfSound = 343.5f;\n        /// <summary>Returns the speed of sound used when calculating the Doppler effect..</summary>\n        /// <remarks>\n        /// <para>Defaults to 343.5. Value is measured in meters per second.</para>\n        /// <para>Has no effect on distance attenuation.</para>\n        /// </remarks>\n        public static float SpeedOfSound\n        {\n            get { return speedOfSound; }\n            set\n            {\n                if (value <= 0.0f)\n                    throw new ArgumentOutOfRangeException();\n\n                speedOfSound = value;\n            }\n        }\n\n        #endregion\n\n        #region IDisposable Members\n\n        /// <summary>Indicates whether the object is disposed.</summary>\n        public bool IsDisposed { get { return _isDisposed; } }\n\n        /// <summary>Releases the resources held by this <see cref=\"Microsoft.Xna.Framework.Audio.SoundEffect\"/>.</summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases the resources held by this <see cref=\"Microsoft.Xna.Framework.Audio.SoundEffect\"/>.\n        /// </summary>\n        /// <param name=\"disposing\">If set to <c>true</c>, Dispose was called explicitly.</param>\n        /// <remarks>If the disposing parameter is true, the Dispose method was called explicitly. This\n        /// means that managed objects referenced by this instance should be disposed or released as\n        /// required.  If the disposing parameter is false, Dispose was called by the finalizer and\n        /// no managed objects should be touched because we do not know if they are still valid or\n        /// not at that time.  Unmanaged resources should always be released.</remarks>\n        void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                lock (AudioService.SyncHandle)\n                {\n                    if (IsDisposed) return;\n\n                    // Clean up managed objects\n\n                    // Clean up unmanaged resources\n                    AudioService.OnEffectDisposed(this, disposing);\n\n                    _strategy.Dispose();\n                    _strategy = null;\n\n                    _isDisposed = true;\n                }\n            }\n            else\n            {\n                lock (AudioService.SyncHandle)\n                {\n                    if (IsDisposed) return;\n\n                    // Clean up unmanaged resources\n                    AudioService.OnEffectDisposed(this, disposing);\n                }\n            }\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/SoundEffectInstance.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>Represents a single instance of a playing, paused, or stopped sound.</summary>\n    /// <remarks>\n    /// <para>SoundEffectInstances are created through SoundEffect.CreateInstance() and used internally by SoundEffect.Play()</para>\n    /// </remarks>\n    public class SoundEffectInstance : IPlatformSoundEffectInstance, IDisposable\n    {\n        internal AudioService _audioService { get; private set; }\n        internal SoundEffectInstanceStrategy _strategy;\n\n        internal LinkedListNode<SoundEffectInstance> PlayingInstancesNode { get; private set; }\n        internal LinkedListNode<SoundEffectInstance> PooledInstancesNode { get; private set; }\n\n        private SoundState _state = SoundState.Stopped;\n        private bool _isDisposed = false;\n        internal SoundEffect _effect;\n\n\n        /// <summary>Enables or Disables whether the SoundEffectInstance should repeat after playback.</summary>\n        /// <remarks>This value has no effect on an already playing sound.</remarks>\n        public virtual bool IsLooped\n        { \n            get { return _strategy.IsLooped; }\n            set\n            {\n                if (value == _strategy.IsLooped) return;\n\n                //   XNA will throw an InvalidOperationException if you change 'IsLooped'\n                // after the first call to 'Play()'\n                //   If the audio platform can't release or resume loop while a sound is playing\n                // it's preferred to throw an exception in 'PlatformSetIsLooped()'\n\n                _strategy.PlatformSetIsLooped(value, State);\n                _strategy.IsLooped = value;\n            }\n        }\n\n        /// <summary>Gets or sets the pan, or speaker balance..</summary>\n        /// <value>Pan value ranging from -1.0 (left speaker) to 0.0 (centered), 1.0 (right speaker). Values outside of this range will throw an exception.</value>\n        /// <remarks>In OpenAL Panning/3D works only with mono sounds.</remarks>\n        public float Pan\n        {\n            get { return _strategy.Pan; } \n            set\n            {\n                if (value < -1.0f || value > 1.0f)\n                    throw new ArgumentOutOfRangeException();\n\n                _strategy.Pan = value;\n            }\n        }\n\n        /// <summary>Gets or sets the pitch adjustment.</summary>\n        /// <value>Pitch adjustment, ranging from -1.0 (down an octave) to 0.0 (no change) to 1.0 (up an octave). Values outside of this range will throw an Exception.</value>\n        public float Pitch\n        {\n            get { return _strategy.Pitch; }\n            set\n            {\n                // XAct sounds effects don't have pitch limits\n                if (!_strategy.IsXAct && (value < -1.0f || value > 1.0f))\n                    throw new ArgumentOutOfRangeException();\n\n                _strategy.Pitch = value;\n            }\n        }\n\n        /// <summary>Gets or sets the volume of the SoundEffectInstance.</summary>\n        /// <value>Volume, ranging from 0.0 (silence) to 1.0 (full volume). Volume during playback is scaled by SoundEffect.MasterVolume.</value>\n        /// <remarks>\n        /// This is the volume relative to SoundEffect.MasterVolume. Before playback, this Volume property is multiplied by SoundEffect.MasterVolume when determining the final mix volume.\n        /// </remarks>\n        public float Volume\n        {\n            get { return _strategy.Volume; }\n            set\n            {\n                // XAct sound effects don't have volume limits.\n                if (!_strategy.IsXAct && (value < 0.0f || value > 1.0f))\n                    throw new ArgumentOutOfRangeException();\n\n                _strategy.Volume = value;\n            }\n        }\n\n        /// <summary>Gets the SoundEffectInstance's current playback state.</summary>\n        public virtual SoundState State\n        {\n            get\n            {\n                lock (AudioService.SyncHandle)\n                {\n                    UpdateState();\n                    return _state;\n                }\n            }\n        }\n\n        /// <summary>Indicates whether the object is disposed.</summary>\n        public bool IsDisposed { get { return _isDisposed; } }\n\n        T IPlatformSoundEffectInstance.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        internal SoundEffectInstance(AudioService audioService)\n        {\n            System.Diagnostics.Debug.Assert(audioService != null);\n\n            _audioService = audioService;\n            _effect = null;\n            PlayingInstancesNode = new LinkedListNode<SoundEffectInstance>(this);\n            PooledInstancesNode = null;\n        }\n\n        internal SoundEffectInstance(AudioService audioService, SoundEffect effect, bool isPooled = false, bool isXAct = false)\n        {\n            System.Diagnostics.Debug.Assert(audioService != null);\n            System.Diagnostics.Debug.Assert(effect != null);\n\n            _audioService = audioService;\n            _effect = effect;\n            PlayingInstancesNode = new LinkedListNode<SoundEffectInstance>(this);\n            PooledInstancesNode = (isPooled) ? new LinkedListNode<SoundEffectInstance>(this) : null;\n\n\n            _strategy = ((IPlatformAudioService)audioService).Strategy.CreateSoundEffectInstanceStrategy(_effect._strategy);\n            _strategy.IsXAct = isXAct;\n        }\n\n        /// <summary>\n        /// Releases unmanaged resources and performs other cleanup operations before the\n        /// <see cref=\"Microsoft.Xna.Framework.Audio.SoundEffectInstance\"/> is reclaimed by garbage collection.\n        /// </summary>\n        ~SoundEffectInstance()\n        {\n            Dispose(false);\n        }\n\n        /// <summary>Applies 3D positioning to the SoundEffectInstance using a single listener.</summary>\n        /// <param name=\"listener\">Data about the listener.</param>\n        /// <param name=\"emitter\">Data about the source of emission.</param>\n        public void Apply3D(AudioListener listener, AudioEmitter emitter)\n        {\n            _strategy.PlatformApply3D(listener, emitter);\n        }\n\n        /// <summary>Applies 3D positioning to the SoundEffectInstance using multiple listeners.</summary>\n        /// <param name=\"listeners\">Data about each listener.</param>\n        /// <param name=\"emitter\">Data about the source of emission.</param>\n        /// <remarks>In OpenAL Panning/3D works only with mono sounds.</remarks>\n        public void Apply3D(AudioListener[] listeners, AudioEmitter emitter)\n        {\n            foreach (AudioListener listener in listeners)\n                _strategy.PlatformApply3D(listener, emitter);\n        }\n\n        /// <summary>Pauses playback of a SoundEffectInstance.</summary>\n        /// <remarks>Paused instances can be resumed with SoundEffectInstance.Play() or SoundEffectInstance.Resume().</remarks>\n        public virtual void Pause()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = State;\n                switch (state)\n                {\n                    case SoundState.Paused:\n                        return;\n                    case SoundState.Stopped:\n                        return;\n                    case SoundState.Playing:\n                        {\n                            _strategy.PlatformPause();\n                            _state = SoundState.Paused;\n                        }\n                        return;\n                }\n            }\n        }\n\n        /// <summary>Plays or resumes a SoundEffectInstance.</summary>\n        /// <remarks>Throws an exception if more sounds are playing than the platform allows.</remarks>\n        public virtual void Play()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = State;\n                switch (state)\n                {\n                    case SoundState.Playing:\n                        return;\n                    case SoundState.Paused:\n                        Resume();\n                        return;\n                    case SoundState.Stopped:\n                        {\n                            // we need to be sure the latest\n                            // master volume level is applied before playback.\n                            _strategy.Volume = _strategy.Volume;\n\n                            _strategy.PlatformPlay(_strategy.IsLooped);\n                            _state = SoundState.Playing;\n                            _audioService.AddPlayingInstance(this);\n                        }\n                        return;\n                }\n            }\n        }\n\n        /// <summary>Resumes playback for a SoundEffectInstance.</summary>\n        // <remarks>Only has effect on a SoundEffectInstance in a paused state.</remarks>\n        // In XNA 'Resume()' behaves exactly like 'Play()'.\n        public virtual void Resume()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = State;\n                switch (state)\n                {\n                    case SoundState.Playing:\n                        return;\n                    case SoundState.Stopped:\n                        Play();\n                        return;\n                    case SoundState.Paused:\n                        {\n                            _strategy.PlatformResume(_strategy.IsLooped);\n                            _state = SoundState.Playing;\n                        }\n                        return;\n                }\n            }\n        }\n\n        /// <summary>Immediately stops playing a SoundEffectInstance.</summary>\n        public virtual void Stop()\n        {\n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = State;\n                switch (state)\n                {\n                    case SoundState.Stopped:\n                        return;\n                    case SoundState.Paused:\n                    case SoundState.Playing:\n                        {\n                            _strategy.PlatformStop();\n                            _state = SoundState.Stopped;\n                            _audioService.RemovePlayingInstance(this);\n                        }\n                        return;\n                }\n            }\n        }\n\n        /// <summary>Stops playing a SoundEffectInstance, either immediately or as authored.</summary>\n        /// <param name=\"immediate\">Determined whether the sound stops immediately, or after playing its release phase and/or transitions.</param>\n        /// <remarks>Stopping a sound with the immediate argument set to false will allow it to play any release phases, such as fade, before coming to a stop.</remarks>\n        public virtual void Stop(bool immediate)\n        {\n            if (immediate)\n            {\n                Stop();\n                return;\n            }\n            \n            lock (AudioService.SyncHandle)\n            {\n                AssertNotDisposed();\n\n                SoundState state = State;\n                switch (state)\n                {\n                    case SoundState.Stopped:\n                        return;\n                    case SoundState.Paused:\n                    case SoundState.Playing:\n                        _strategy.PlatformRelease(_strategy.IsLooped);\n                        return;\n                }\n            }\n        }\n\n        internal void UpdateState()\n        {\n            if (_strategy.PlatformUpdateState(ref _state))\n            {\n                if (_state == SoundState.Stopped)\n                {\n                    _audioService.RemovePlayingInstance(this);\n                    _audioService.AddPooledInstance(this);\n                }\n            }\n        }\n\n        internal void SetReverbMix(float reverbMix)\n        {\n            _strategy.PlatformSetReverbMix(State, reverbMix, _strategy.Pan);\n        }\n        \n        internal void SetFilter(FilterMode mode, float filterQ, float frequency)\n        {\n            _strategy.PlatformSetFilter(State, mode, filterQ, frequency);\n        }\n\n        /// <summary>\n        /// Reset used instance to the \"default\" state.\n        /// </summary>\n        internal void Reset()\n        {\n            Volume = 1.0f;\n            Pan = 0.0f;\n            Pitch = 0.0f;\n            IsLooped = false;\n            SetReverbMix(0);\n            _strategy.PlatformClearFilter();\n        }\n\n        /// <summary>Releases the resources held by this <see cref=\"Microsoft.Xna.Framework.Audio.SoundEffectInstance\"/>.</summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases the resources held by this <see cref=\"Microsoft.Xna.Framework.Audio.SoundEffectInstance\"/>.\n        /// </summary>\n        /// <param name=\"disposing\">If set to <c>true</c>, Dispose was called explicitly.</param>\n        /// <remarks>If the disposing parameter is true, the Dispose method was called explicitly. This\n        /// means that managed objects referenced by this instance should be disposed or released as\n        /// required.  If the disposing parameter is false, Dispose was called by the finalizer and\n        /// no managed objects should be touched because we do not know if they are still valid or\n        /// not at that time.  Unmanaged resources should always be released.</remarks>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                lock (AudioService.SyncHandle)\n                {\n                    if (_isDisposed)\n                        return;\n\n                    if (_strategy != null)\n                    {\n                        Stop();\n                        _strategy.Dispose();\n                        _strategy = null;\n                    }\n\n                    _audioService = null;\n                    _effect = null;\n                    PlayingInstancesNode = null;\n                    PooledInstancesNode = null;\n\n                    _isDisposed = true;\n                }\n            }\n            else\n            {\n                lock (AudioService.SyncHandle)\n                {\n                    if (_isDisposed)\n                        return;\n\n                    if (_strategy != null)\n                    { \n                        Stop();\n                        _strategy = null;\n                    }\n\n                    _audioService = null;\n                    _effect = null;\n                    PlayingInstancesNode = null;\n                    PooledInstancesNode = null;\n\n                    _isDisposed = true;\n                }\n            }\n        }\n\n        private void AssertNotDisposed()\n        {\n            if (IsDisposed)\n                throw new ObjectDisposedException(\"SoundEffectInstance\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/SoundState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>Described the playback state of a SoundEffectInstance.</summary>\n    public enum SoundState\n    {\n        /// <summary>The SoundEffectInstance is currently playing.</summary>\n        Playing,\n        /// <summary>The SoundEffectInstance is currently paused.</summary>\n        Paused,\n        /// <summary>The SoundEffectInstance is currently stopped.</summary>\n        Stopped\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Utilities/AudioUtil.cs",
    "content": "using System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    internal static class AudioUtil\n    {\n        /// <summary>\n        /// Takes WAV data and appends a header to it.\n        /// </summary>\n        internal static byte[] FormatWavData(byte[] buffer, int sampleRate, int channels)\n        {\n            //buffer should contain 16-bit PCM wave data\n            short bitsPerSample = 16;\n\n            using (MemoryStream mStream = new MemoryStream(44+buffer.Length))\n            using (BinaryWriter writer = new BinaryWriter(mStream))\n            {\n                writer.Write(\"RIFF\".ToCharArray()); //chunk id\n                writer.Write((int)(36 + buffer.Length)); //chunk size\n                writer.Write(\"WAVE\".ToCharArray()); //RIFF type\n\n                writer.Write(\"fmt \".ToCharArray()); //chunk id\n                writer.Write((int)16); //format header size\n                writer.Write((short)1); //format (PCM)\n                writer.Write((short)channels);\n                writer.Write((int)sampleRate);\n                short blockAlign = (short)((bitsPerSample / 8) * (int)channels);\n                writer.Write((int)(sampleRate * blockAlign)); //byte rate\n                writer.Write((short)blockAlign);\n                writer.Write((short)bitsPerSample);\n\n                writer.Write(\"data\".ToCharArray()); //chunk id\n                writer.Write((int)buffer.Length); //data size\n\n                writer.Write(buffer);\n                \n                return mStream.ToArray();\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Utilities/MsAdpcmDecoder.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Platform.Audio.Utilities\n{\n    public static class MsAdpcmDecoder\n    {\n\n        #region MS-ADPCM decoding\n\n        static int[] adaptationTable = new int[]\n        {\n            230, 230, 230, 230, 307, 409, 512, 614,\n            768, 614, 512, 409, 307, 230, 230, 230\n        };\n\n        static int[] adaptationCoeff1 = new int[]\n        {\n            256, 512, 0, 192, 240, 460, 392\n        };\n\n        static int[] adaptationCoeff2 = new int[]\n        {\n            0, -256, 0, 64, 0, -208, -232\n        };\n\n        struct MsAdpcmState\n        {\n            public int delta;\n            public int sample1;\n            public int sample2;\n            public int coeff1;\n            public int coeff2;\n        }\n\n        static int MsAdpcmExpandNibble(ref MsAdpcmState channel, int nibble)\n        {\n            int nibbleSign = nibble - (((nibble & 0x08) != 0) ? 0x10 : 0);\n            int predictor = ((channel.sample1 * channel.coeff1) + (channel.sample2 * channel.coeff2)) / 256 + (nibbleSign * channel.delta);\n\n            if (predictor < -32768)\n                predictor = -32768;\n            else if (predictor > 32767)\n                predictor = 32767;\n\n            channel.sample2 = channel.sample1;\n            channel.sample1 = predictor;\n\n            channel.delta = (adaptationTable[nibble] * channel.delta) / 256;\n            if (channel.delta < 16)\n                channel.delta = 16;\n\n            return predictor;\n        }\n\n        // Convert buffer containing MS-ADPCM wav data to a 16-bit signed PCM buffer\n        public static byte[] ConvertMsAdpcmToPcm(byte[] buffer, int offset, int count, int channels, int blockAlignment)\n        {\n            MsAdpcmState channel0 = new MsAdpcmState();\n            MsAdpcmState channel1 = new MsAdpcmState();\n            int blockPredictor;\n\n            int sampleCountFullBlock = ((blockAlignment / channels) - 7) * 2 + 2;\n            int sampleCountLastBlock = 0;\n            if ((count % blockAlignment) > 0)\n                sampleCountLastBlock = (((count % blockAlignment) / channels) - 7) * 2 + 2;\n            int sampleCount = ((count / blockAlignment) * sampleCountFullBlock) + sampleCountLastBlock;\n\n            byte[] samples = new byte[sampleCount * sizeof(short) * channels];\n            int sampleOffset = 0;\n\n            bool stereo = channels == 2;\n\n            while (count > 0)\n            {\n                int blockSize = blockAlignment;\n                if (count < blockSize)\n                    blockSize = count;\n                count -= blockAlignment;\n\n                int totalSamples = ((blockSize / channels) - 7) * 2 + 2;\n                if (totalSamples < 2)\n                    break;\n\n                int offsetStart = offset;\n                blockPredictor = buffer[offset];\n                ++offset;\n                if (blockPredictor > 6)\n                    blockPredictor = 6;\n                channel0.coeff1 = adaptationCoeff1[blockPredictor];\n                channel0.coeff2 = adaptationCoeff2[blockPredictor];\n                if (stereo)\n                {\n                    blockPredictor = buffer[offset];\n                    ++offset;\n                    if (blockPredictor > 6)\n                        blockPredictor = 6;\n                    channel1.coeff1 = adaptationCoeff1[blockPredictor];\n                    channel1.coeff2 = adaptationCoeff2[blockPredictor];\n                }\n\n                channel0.delta = buffer[offset];\n                channel0.delta |= buffer[offset + 1] << 8;\n                if ((channel0.delta & 0x8000) != 0)\n                    channel0.delta -= 0x10000;\n                offset += 2;\n                if (stereo)\n                {\n                    channel1.delta = buffer[offset];\n                    channel1.delta |= buffer[offset + 1] << 8;\n                    if ((channel1.delta & 0x8000) != 0)\n                        channel1.delta -= 0x10000;\n                    offset += 2;\n                }\n\n                channel0.sample1 = buffer[offset];\n                channel0.sample1 |= buffer[offset + 1] << 8;\n                if ((channel0.sample1 & 0x8000) != 0)\n                    channel0.sample1 -= 0x10000;\n                offset += 2;\n                if (stereo)\n                {\n                    channel1.sample1 = buffer[offset];\n                    channel1.sample1 |= buffer[offset + 1] << 8;\n                    if ((channel1.sample1 & 0x8000) != 0)\n                        channel1.sample1 -= 0x10000;\n                    offset += 2;\n                }\n\n                channel0.sample2 = buffer[offset];\n                channel0.sample2 |= buffer[offset + 1] << 8;\n                if ((channel0.sample2 & 0x8000) != 0)\n                    channel0.sample2 -= 0x10000;\n                offset += 2;\n                if (stereo)\n                {\n                    channel1.sample2 = buffer[offset];\n                    channel1.sample2 |= buffer[offset + 1] << 8;\n                    if ((channel1.sample2 & 0x8000) != 0)\n                        channel1.sample2 -= 0x10000;\n                    offset += 2;\n                }\n\n                if (stereo)\n                {\n                    samples[sampleOffset] = (byte)channel0.sample2;\n                    samples[sampleOffset + 1] = (byte)(channel0.sample2 >> 8);\n                    samples[sampleOffset + 2] = (byte)channel1.sample2;\n                    samples[sampleOffset + 3] = (byte)(channel1.sample2 >> 8);\n                    samples[sampleOffset + 4] = (byte)channel0.sample1;\n                    samples[sampleOffset + 5] = (byte)(channel0.sample1 >> 8);\n                    samples[sampleOffset + 6] = (byte)channel1.sample1;\n                    samples[sampleOffset + 7] = (byte)(channel1.sample1 >> 8);\n                    sampleOffset += 8;\n                }\n                else\n                {\n                    samples[sampleOffset] = (byte)channel0.sample2;\n                    samples[sampleOffset + 1] = (byte)(channel0.sample2 >> 8);\n                    samples[sampleOffset + 2] = (byte)channel0.sample1;\n                    samples[sampleOffset + 3] = (byte)(channel0.sample1 >> 8);\n                    sampleOffset += 4;\n                }\n\n                blockSize -= (offset - offsetStart);\n                if (stereo)\n                {\n                    for (int i = 0; i < blockSize; ++i)\n                    {\n                        int nibbles = buffer[offset];\n\n                        int sample = MsAdpcmExpandNibble(ref channel0, nibbles >> 4);\n                        samples[sampleOffset] = (byte)sample;\n                        samples[sampleOffset + 1] = (byte)(sample >> 8);\n\n                        sample = MsAdpcmExpandNibble(ref channel1, nibbles & 0x0f);\n                        samples[sampleOffset + 2] = (byte)sample;\n                        samples[sampleOffset + 3] = (byte)(sample >> 8);\n\n                        sampleOffset += 4;\n                        ++offset;\n                    }\n                }\n                else\n                {\n                    for (int i = 0; i < blockSize; ++i)\n                    {\n                        int nibbles = buffer[offset];\n\n                        int sample = MsAdpcmExpandNibble(ref channel0, nibbles >> 4);\n                        samples[sampleOffset] = (byte)sample;\n                        samples[sampleOffset + 1] = (byte)(sample >> 8);\n\n                        sample = MsAdpcmExpandNibble(ref channel0, nibbles & 0x0f);\n                        samples[sampleOffset + 2] = (byte)sample;\n                        samples[sampleOffset + 3] = (byte)(sample >> 8);\n\n                        sampleOffset += 4;\n                        ++offset;\n                    }\n                }\n            }\n\n            return samples;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/AudioCategory.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// Provides functionality for manipulating multiple sounds at a time.\n    /// </summary>\n    public struct AudioCategory : IEquatable<AudioCategory>\n    {\n        readonly string _name;\n        readonly AudioEngine _engine;\n        readonly List<XactSound> _sounds;\n\n        // This is a bit gross, but we use an array here\n        // instead of a field since AudioCategory is a struct\n        // This allows us to save _volume when the user\n        // holds onto a reference of AudioCategory, or when a cue\n        // is created/loaded after the volume's already been set.\n        internal float[] _volume;\n\n        internal bool isBackgroundMusic;\n        internal bool isPublic;\n\n        internal bool instanceLimit;\n        internal int maxInstances;\n        internal MaxInstanceBehavior InstanceBehavior;\n\n        internal CrossfadeType fadeType;\n        internal float fadeIn;\n        internal float fadeOut;\n\n        \n        internal AudioCategory(AudioEngine audioengine, string name, BinaryReader reader)\n        {\n            Debug.Assert(audioengine != null);\n            Debug.Assert(!string.IsNullOrEmpty(name));\n\n            _sounds = new List<XactSound>();\n            _name = name;\n            _engine = audioengine;\n\n            maxInstances = reader.ReadByte();\n            instanceLimit = maxInstances != 0xff;\n\n            fadeIn = (reader.ReadUInt16() / 1000f);\n            fadeOut = (reader.ReadUInt16() / 1000f);\n\n            byte instanceFlags = reader.ReadByte();\n            fadeType = (CrossfadeType)(instanceFlags & 0x7);\n            InstanceBehavior = (MaxInstanceBehavior)(instanceFlags >> 3);\n\n            reader.ReadUInt16(); //unkn\n\n            float volume = XactHelpers.ParseVolumeFromDecibels(reader.ReadByte());\n            _volume = new float[1] { volume };\n\n            byte visibilityFlags = reader.ReadByte();\n            isBackgroundMusic = (visibilityFlags & 0x1) != 0;\n            isPublic = (visibilityFlags & 0x2) != 0;\n        }\n\n        internal void AddSound(XactSound sound)\n        {\n            _sounds.Add(sound);\n        }\n\n        internal int GetPlayingInstanceCount()\n        {\n            int sum = 0;\n            for (int i = 0; i < _sounds.Count; i++)\n            {\n                if (_sounds[i].Playing)\n                    sum++;\n            }\n            return sum;\n        }\n\n        internal XactSound GetOldestInstance()\n        {\n            for (int i = 0; i < _sounds.Count; i++)\n            {\n                if (_sounds[i].Playing)\n                    return _sounds[i];\n            }\n            return null;\n        }\n\n        /// <summary>\n        /// Gets the category's friendly name.\n        /// </summary>\n        public string Name { get { return _name; } }\n\n        /// <summary>\n        /// Pauses all associated sounds.\n        /// </summary>\n        public void Pause()\n        {\n            foreach (XactSound sound in _sounds)\n                sound.Pause();\n        }\n\n        /// <summary>\n        /// Resumes all associated paused sounds.\n        /// </summary>\n        public void Resume()\n        {\n            foreach (XactSound sound in _sounds)\n                sound.Resume();\n        }\n\n        /// <summary>\n        /// Stops all associated sounds.\n        /// </summary>\n        public void Stop(AudioStopOptions options)\n        {\n            foreach (XactSound sound in _sounds)\n                sound.Stop(options);\n        }\n\n        /// <summary>\n        /// Set the volume for this <see cref=\"AudioCategory\"/>.\n        /// </summary>\n        /// <param name=\"volume\">The new volume of the category.</param>\n        /// <exception cref=\"ArgumentException\">If the volume is less than zero.</exception>\n        public void SetVolume(float volume)\n        {\n            if (volume < 0)\n                throw new ArgumentException(\"The volume must be positive.\");\n\n            // Updating all the sounds in a category can be\n            // very expensive... so avoid it if we can.\n            if (_volume[0] == volume)\n                return;\n\n            _volume[0] = volume;\n\n            foreach (XactSound sound in _sounds)\n                sound.UpdateCategoryVolume(volume);\n        }\n\n        /// <summary>\n        /// Determines whether two AudioCategory instances are equal.\n        /// </summary>\n        /// <param name=\"left\">First AudioCategory instance to compare.</param>\n        /// <param name=\"right\">Second AudioCategory instance to compare.</param>\n        /// <returns>true if the objects are equal or false if they aren't.</returns>\n        public static bool operator ==(AudioCategory left, AudioCategory right)\n        {\n            return left._engine == right._engine && left._name.Equals(right._name, StringComparison.Ordinal);\n        }\n\n        /// <summary>\n        /// Determines whether two AudioCategory instances are not equal.\n        /// </summary>\n        /// <param name=\"left\">First AudioCategory instance to compare.</param>\n        /// <param name=\"second\">Second AudioCategory instance to compare.</param>\n        /// <returns>true if the objects are not equal or false if they are.</returns>\n        public static bool operator !=(AudioCategory left, AudioCategory second)\n        {\n            return left._engine != second._engine || !left._name.Equals(second._name, StringComparison.Ordinal);\n        }\n\n        /// <summary>\n        /// Determines whether two AudioCategory instances are equal.\n        /// </summary>\n        /// <param name=\"other\">AudioCategory to compare with this instance.</param>\n        /// <returns>true if the objects are equal or false if they aren't</returns>\n        public bool Equals(AudioCategory other)\n        {\n            return _engine == other._engine && _name.Equals(other._name, StringComparison.Ordinal);\n        }\n\n        /// <summary>\n        /// Determines whether two AudioCategory instances are equal.\n        /// </summary>\n        /// <param name=\"obj\">Object to compare with this instance.</param>\n        /// <returns>true if the objects are equal or false if they aren't.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is AudioCategory)\n            {\n                AudioCategory other = (AudioCategory)obj;\n                return _engine == other._engine && _name.Equals(other._name, StringComparison.Ordinal);\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Gets the hash code for this instance.\n        /// </summary>\n        /// <returns>Hash code for this object.</returns>\n        public override int GetHashCode()\n        {\n            return _name.GetHashCode() ^ _engine.GetHashCode();\n        }\n\n        /// <summary>\n        /// Returns the name of this AudioCategory\n        /// </summary>\n        /// <returns>Friendly name of the AudioCategory</returns>\n        public override string ToString()\n        {\n            return _name;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/AudioEngine.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// Class used to create and manipulate code audio objects.\n    /// </summary> \n    public class AudioEngine : IDisposable\n    {\n        private readonly AudioCategory[] _categories;\n        private readonly Dictionary<string, int> _categoryLookup = new Dictionary<string, int>();\n\n        private readonly RpcVariable[] _variables;\n        private readonly Dictionary<string, int> _variableLookup = new Dictionary<string, int>();\n\n        private readonly RpcVariable[] _cueVariables;\n\n        private readonly Stopwatch _stopwatch;\n        private TimeSpan _lastUpdateTime;\n\n        private readonly ReverbSettings _reverbSettings;\n        private readonly RpcCurve[] _reverbCurves;\n\n        internal List<Cue> ActiveCues = new List<Cue>();\n\n        internal AudioCategory[] Categories { get { return _categories; } }\n\n        internal Dictionary<string, WaveBank> Wavebanks = new Dictionary<string, WaveBank>();\n\n        internal readonly RpcCurve[] RpcCurves;\n\n        internal readonly object UpdateLock = new object();\n\n        internal RpcVariable[] CreateCueVariables()\n        {\n            RpcVariable[] clone = new RpcVariable[_cueVariables.Length];\n            Array.Copy(_cueVariables, clone, _cueVariables.Length);\n            return clone;\n        }\n\n        /// <summary>\n        /// The current content version.\n        /// </summary>\n        public const int ContentVersion = 39;\n\n        /// <param name=\"settingsFile\">Path to a XACT settings file.</param>\n        public AudioEngine(string settingsFile)\n            : this(settingsFile, TimeSpan.Zero, \"\")\n        {            \n        }\n\n        /// <param name=\"settingsFile\">Path to a XACT settings file.</param>\n        /// <param name=\"lookAheadTime\">Determines how many milliseconds the engine will look ahead when determing when to transition to another sound.</param>\n        /// <param name=\"rendererId\">A string that specifies the audio renderer to use.</param>\n        /// <remarks>For the best results, use a lookAheadTime of 250 milliseconds or greater.</remarks>\n        public AudioEngine(string settingsFile, TimeSpan lookAheadTime, string rendererId)\n        {\n            if (string.IsNullOrEmpty(settingsFile))\n                throw new ArgumentNullException(\"settingsFile\");\n\n            // Read the xact settings file\n            // Credits to alisci01 for initial format documentation\n            using (Stream stream = TitleContainer.OpenStream(settingsFile))\n            using (BinaryReader reader = new BinaryReader(stream)) \n            {\n                uint magic = reader.ReadUInt32();\n                if (magic != 0x46534758) //'XGFS'\n                    throw new ArgumentException(\"XGS format not recognized\");\n\n                reader.ReadUInt16(); // toolVersion\n                uint formatVersion = reader.ReadUInt16();\n                if (formatVersion != 42)\n                    Debug.WriteLine(\"Warning: XGS format \" + formatVersion + \" not supported!\");\n\n                reader.ReadUInt16(); // crc\n                reader.ReadUInt32(); // lastModifiedLow\n                reader.ReadUInt32(); // lastModifiedHigh\n                reader.ReadByte(); //unkn, 0x03. Platform?\n\n                uint numCats = reader.ReadUInt16();\n                uint numVars = reader.ReadUInt16();\n\n                reader.ReadUInt16(); //unkn, 0x16\n                reader.ReadUInt16(); //unkn, 0x16\n\n                uint numRpc = reader.ReadUInt16();\n                uint numDspPresets = reader.ReadUInt16(); \n                uint numDspParams = reader.ReadUInt16(); \n\n                uint catsOffset = reader.ReadUInt32();\n                uint varsOffset = reader.ReadUInt32();\n\n                reader.ReadUInt32(); //unknown, leads to a short with value of 1?\n                reader.ReadUInt32(); // catNameIndexOffset\n                reader.ReadUInt32(); //unknown, two shorts of values 2 and 3?\n                reader.ReadUInt32(); // varNameIndexOffset\n\n                uint catNamesOffset = reader.ReadUInt32();\n                uint varNamesOffset = reader.ReadUInt32();\n                uint rpcOffset = reader.ReadUInt32();\n                reader.ReadUInt32(); // dspPresetsOffset\n                uint dspParamsOffset = reader.ReadUInt32(); \n\n                reader.BaseStream.Seek(catNamesOffset, SeekOrigin.Begin);\n                string[] categoryNames = ReadNullTerminatedStrings(numCats, reader);\n\n                _categories = new AudioCategory[numCats];\n                reader.BaseStream.Seek(catsOffset, SeekOrigin.Begin);\n                for (int i=0; i<numCats; i++) \n                {\n                    _categories [i] = new AudioCategory(this, categoryNames [i], reader);\n                    _categoryLookup.Add(categoryNames [i], i);\n                }\n\n                reader.BaseStream.Seek(varNamesOffset, SeekOrigin.Begin);\n                string[] varNames = ReadNullTerminatedStrings(numVars, reader);\n\n                List<RpcVariable> variables = new List<RpcVariable>();\n                List<RpcVariable> cueVariables = new List<RpcVariable>();\n                List<RpcVariable> globalVariables = new List<RpcVariable>();\n                reader.BaseStream.Seek(varsOffset, SeekOrigin.Begin);\n                for (int i = 0; i < numVars; i++)\n                {\n                    RpcVariable v = new RpcVariable();\n                    v.Name = varNames[i];\n                    v.Flags = reader.ReadByte();\t\t\t\t\t\t\n                    v.InitValue = reader.ReadSingle();\n                    v.MinValue = reader.ReadSingle();\n                    v.MaxValue = reader.ReadSingle();\n                    v.Value = v.InitValue;\n\n                    variables.Add(v);\n                    if (!v.IsGlobal)\n                        cueVariables.Add(v);\n                    else\n                    {\n                        globalVariables.Add(v);\n                        _variableLookup.Add(v.Name, globalVariables.Count - 1);                        \n                    }\n                }\n                _cueVariables = cueVariables.ToArray();\n                _variables = globalVariables.ToArray();\n\n                List<RpcCurve> reverbCurves = new List<RpcCurve>();\n                RpcCurves = new RpcCurve[numRpc];\n                if (numRpc > 0)\n                {\n                    reader.BaseStream.Seek(rpcOffset, SeekOrigin.Begin);\n                    for (int i = 0; i < numRpc; i++)\n                    {\n                        RpcCurve curve = new RpcCurve();\n                        curve.FileOffset = (uint)reader.BaseStream.Position;\n\n                        RpcVariable variable = variables[ reader.ReadUInt16() ];\n                        if (variable.IsGlobal)\n                        {\n                            curve.IsGlobal = true;\n                            curve.Variable = globalVariables.FindIndex(e => e.Name == variable.Name);\n                        }\n                        else\n                        {\n                            curve.IsGlobal = false;\n                            curve.Variable = cueVariables.FindIndex(e => e.Name == variable.Name);\n                        }\n\n                        int pointCount = (int)reader.ReadByte();\n                        curve.Parameter = (RpcParameter)reader.ReadUInt16();\n\n                        curve.Points = new RpcPoint[pointCount];\n                        for (int j = 0; j < pointCount; j++) \n                        {\n                            curve.Points[j].Position = reader.ReadSingle();\n                            curve.Points[j].Value = reader.ReadSingle();\n                            curve.Points[j].Type = (RpcPointType)reader.ReadByte();\n                        }\n\n                        // If the parameter is greater than the max then this is a DSP\n                        // parameter which is for reverb.\n                        int dspParameter = curve.Parameter - RpcParameter.NumParameters;\n                        if (dspParameter >= 0 && variable.IsGlobal)\n                            reverbCurves.Add(curve);\n\n                        RpcCurves[i] = curve;\n                    }\n                }\n                _reverbCurves = reverbCurves.ToArray();\n\n                if (numDspPresets > 0)\n                {\n                    // Note:  It seemed like MS designed this to support multiple\n                    // DSP effects, but in practice XACT only has one... Microsoft Reverb.\n                    //\n                    // So because of this we know exactly how many presets and \n                    // parameters we should have.\n                    if (numDspPresets != 1)\n                        throw new Exception(\"Unexpected number of DSP presets!\");\n                    if (numDspParams != 22)\n                        throw new Exception(\"Unexpected number of DSP parameters!\");\n\n                    reader.BaseStream.Seek(dspParamsOffset, SeekOrigin.Begin);\n                    _reverbSettings = new ReverbSettings(reader);\n                }\n            }\n\n            _stopwatch = new Stopwatch();\n            _stopwatch.Start();\n        }\n\n        internal int GetRpcIndex(uint fileOffset)\n        {\n            for (int i = 0; i < RpcCurves.Length; i++)\n            {\n                if (RpcCurves[i].FileOffset == fileOffset)\n                    return i;\n            }\n\n            return -1;\n        }\n\n        private static string[] ReadNullTerminatedStrings(uint count, BinaryReader reader)\n        {\n            string[] ret = new string[count];\n            \n            for (int i = 0; i < count; i++) \n            {\n                List<char> s = new List<char>();\n                while (reader.PeekChar() != 0) \n                    s.Add(reader.ReadChar()); \n\n                reader.ReadChar();\n                ret[i] = new string(s.ToArray());\n            }\n\n            return ret;\n        }\n\n        /// <summary>\n        /// Performs periodic work required by the audio engine.\n        /// </summary>\n        /// <remarks>Must be called at least once per frame.</remarks>\n        public void Update()\n        {\n            TimeSpan cur = _stopwatch.Elapsed;\n            TimeSpan elapsed = cur - _lastUpdateTime;\n            _lastUpdateTime = cur;\n            float dt = (float)elapsed.TotalSeconds;\n\n            lock (UpdateLock)\n            {\n                for (int x = 0; x < ActiveCues.Count; )\n                {\n                    Cue cue = ActiveCues[x];\n\n                    cue.Update(dt);\n\n                    if (cue.IsStopped || cue.IsDisposed)\n                    {\n                        ActiveCues.Remove(cue);\n                        continue;\n                    }\n\n                    x++;\n                }\n            }\n\n            // The only global curves we can process seem to be \n            // specifically for the reverb DSP effect.\n            if (_reverbSettings != null)\n            {\n                for (int i = 0; i < _reverbCurves.Length; i++)\n                {\n                    RpcCurve curve = _reverbCurves[i];\n                    float result = curve.Evaluate(_variables[curve.Variable].Value);\n                    int parameter = curve.Parameter - RpcParameter.NumParameters;\n                    _reverbSettings[parameter] = result;\n                }\n\n                AudioService.Current.SetReverbSettings(_reverbSettings);\n            }\n        }\n        \n        /// <summary>Returns an audio category by name.</summary>\n        /// <param name=\"name\">Friendly name of the category to get.</param>\n        /// <returns>The AudioCategory with a matching name. Throws an exception if not found.</returns>\n        public AudioCategory GetCategory(string name)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            int i;\n            if (!_categoryLookup.TryGetValue(name, out i))\n                throw new InvalidOperationException(\"This resource could not be created.\");\n\n            return _categories[i];\n        }\n\n        /// <summary>Gets the value of a global variable.</summary>\n        /// <param name=\"name\">Friendly name of the variable.</param>\n        /// <returns>float value of the queried variable.</returns>\n        /// <remarks>A global variable has global scope. It can be accessed by all code within a project.</remarks>\n        public float GetGlobalVariable(string name)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            int i;\n            if (!_variableLookup.TryGetValue(name, out i) || !_variables[i].IsPublic)\n                throw new IndexOutOfRangeException(\"The specified variable index is invalid.\");\n\n            lock (UpdateLock)\n                return _variables[i].Value;\n        }\n\n        internal float GetGlobalVariable(int index)\n        {\n            lock (UpdateLock)\n                return _variables[index].Value;\n        }\n\n        /// <summary>Sets the value of a global variable.</summary>\n        /// <param name=\"name\">Friendly name of the variable.</param>\n        /// <param name=\"value\">Value of the global variable.</param>\n        public void SetGlobalVariable(string name, float value)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            int i;\n            if (!_variableLookup.TryGetValue(name, out i) || !_variables[i].IsPublic)\n                throw new IndexOutOfRangeException(\"The specified variable index is invalid.\");\n\n            lock (UpdateLock)\n                _variables[i].SetValue(value);\n        }\n\n        /// <summary>\n        /// This event is triggered when the AudioEngine is disposed.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposing;\n\n        /// <summary>\n        /// Is true if the AudioEngine has been disposed.\n        /// </summary>\n        public bool IsDisposed { get; private set; }\n\n        /// <summary>\n        /// Disposes the AudioEngine.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        ~AudioEngine()\n        {\n            Dispose(false);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (IsDisposed) \n                return;\n\n            IsDisposed = true;\n\n            // TODO: Should we be forcing any active\n            // audio cues to stop here?\n\n            if (disposing)\n            {\n                var handler = Disposing;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/AudioStopOptions.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>Controls how Cue objects should cease playback when told to stop.</summary>\n    public enum AudioStopOptions\n    {\n        /// <summary>Stop normally, playing any pending release phases or transitions.</summary>\n        AsAuthored,\n        /// <summary>Immediately stops the cue, ignoring any pending release phases or transitions.</summary>\n        Immediate\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/ClipEvent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    abstract class ClipEvent\n    {\n        protected XactClip _clip;\n\n        protected ClipEvent(XactClip clip, float timeStamp, float randomOffset)\n        {\n            _clip = clip;\n            TimeStamp = timeStamp;\n            RandomOffset = randomOffset;\n        }\n\n        public float RandomOffset { get; private set; }\n\n        public float TimeStamp { get; private set; }\n\n        public abstract void Play();\n        public abstract void Stop();\n        public abstract void Pause();\n        public abstract void Resume();\n        public abstract void SetFade(float fadeInDuration, float fadeOutDuration);\n        public abstract void SetTrackVolume(float volume);\n        public abstract void SetTrackPan(float pan);\n        public abstract void SetState(float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor);\n        public abstract bool Update(float dt);\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/CrossfadeType.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    enum CrossfadeType \n    {\n        Linear,\n        Logarithmic,\n        EqualPower,\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/Cue.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>Manages the playback of a sound or set of sounds.</summary>\n    /// <remarks>\n    /// <para>Cues are comprised of one or more sounds.</para>\n    /// <para>Cues also define specific properties such as pitch or volume.</para>\n    /// <para>Cues are referenced through SoundBank objects.</para>\n    /// </remarks>\n    public class Cue : IDisposable\n    {\n        private readonly AudioEngine _engine;\n        private readonly string _name;\n        private readonly XactSound[] _sounds;\n        private readonly float[] _probs;\n\n        private readonly RpcVariable[] _variables;\n\n        private XactSound _curSound;\n\n        private bool _applied3D;\n        private bool _played;\n\n        /// <summary>Indicates whether or not the cue is currently paused.</summary>\n        /// <remarks>IsPlaying and IsPaused both return true if a cue is paused while playing.</remarks>\n        public bool IsPaused\n        {\n            get \n            {\n                if (_curSound != null)\n                    return _curSound.IsPaused;\n\n                return false;\n            }\n        }\n\n        /// <summary>Indicates whether or not the cue is currently playing.</summary>\n        /// <remarks>IsPlaying and IsPaused both return true if a cue is paused while playing.</remarks>\n        public bool IsPlaying\n        {\n            get \n            {\n                if (_curSound != null)\n                    return _curSound.Playing || _curSound.IsPaused;\n\n                return false;\n            }\n        }\n\n        /// <summary>Indicates whether or not the cue is currently stopped.</summary>\n        public bool IsStopped\n        {\n            get \n            {\n                if (_curSound != null)\n                    return _curSound.Stopped;\n\n                return !IsDisposed && !IsPrepared;\n            }\n        }\n\n        public bool IsStopping\n        {\n            get\n            {\n                // TODO: Implement me!\n                return false;\n            }\n        }\n\n        public bool IsPreparing \n        {\n            get { return false; }\n        }\n\n        public bool IsPrepared { get; internal set; }\n\n        public bool IsCreated { get; internal set; }\n\n        /// <summary>Gets the friendly name of the cue.</summary>\n        /// <remarks>The friendly name is a value set from the designer.</remarks>\n        public string Name\n        {\n            get { return _name; }\n        }\n        \n        internal Cue(AudioEngine engine, string cuename, XactSound sound)\n        {\n            _engine = engine;\n            _name = cuename;\n            _sounds = new XactSound[1];\n            _sounds[0] = sound;\n            _probs = new float[1];\n            _probs[0] = 1.0f;\n            _variables = engine.CreateCueVariables();\n        }\n        \n        internal Cue(AudioEngine engine, string cuename, XactSound[] sounds, float[] probs)\n        {\n            _engine = engine;\n            _name = cuename;\n            _sounds = sounds;\n            _probs = probs;\n            _variables = engine.CreateCueVariables();\n        }\n\n        internal void Prepare()\n        {\n            IsDisposed = false;\n            IsCreated = false;\n            IsPrepared = true;\n            _curSound = null;\n        }\n\n        /// <summary>Pauses playback.</summary>\n        public void Pause()\n        {\n            lock (_engine.UpdateLock)\n            {\n                if (_curSound != null)\n                    _curSound.Pause();\n            }\n        }\n\n        /// <summary>Requests playback of a prepared or preparing Cue.</summary>\n        /// <remarks>Calling Play when the Cue already is playing can result in an InvalidOperationException.</remarks>\n        public void Play()\n        {\n            lock (_engine.UpdateLock)\n            {\n                if (!_engine.ActiveCues.Contains(this))\n                    _engine.ActiveCues.Add(this);\n\n                //TODO: Probabilities\n                int index = XactHelpers.Random.Next(_sounds.Length);\n                _curSound = _sounds[index];\n\n                float volume = UpdateRpcCurves();\n\n                _curSound.Play(volume, _engine);\n            }\n\n            _played = true;\n            IsPrepared = false;\n        }\n\n        /// <summary>Resumes playback of a paused Cue.</summary>\n        public void Resume()\n        {\n            lock (_engine.UpdateLock)\n            {\n                if (_curSound != null)\n                    _curSound.Resume();\n            }\n        }\n\n        /// <summary>Stops playback of a Cue.</summary>\n        /// <param name=\"options\">Specifies if the sound should play any pending release phases or transitions before stopping.</param>\n        public void Stop(AudioStopOptions options)\n        {\n            lock (_engine.UpdateLock)\n            {\n                _engine.ActiveCues.Remove(this);\n\n                if (_curSound != null)\n                    _curSound.Stop(options);\n            }\n\n            IsPrepared = false;\n        }\n\n        private int FindVariable(string name)\n        {\n            // Do a simple linear search... which is fast\n            // for as little variables as most cues have.\n            for (int i = 0; i < _variables.Length; i++)\n            {\n                if (_variables[i].Name == name)\n                    return i;\n            }\n\n            return -1;\n        }\n\n        /// <summary>\n        /// Sets the value of a cue-instance variable based on its friendly name.\n        /// </summary>\n        /// <param name=\"name\">Friendly name of the variable to set.</param>\n        /// <param name=\"value\">Value to assign to the variable.</param>\n        /// <remarks>The friendly name is a value set from the designer.</remarks>\n        public void SetVariable(string name, float value)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            int i = FindVariable(name);\n            if (i == -1 || !_variables[i].IsPublic)\n                throw new IndexOutOfRangeException(\"The specified variable index is invalid.\");\n\n            _variables[i].SetValue(value);\n        }\n\n        /// <summary>Gets a cue-instance variable value based on its friendly name.</summary>\n        /// <param name=\"name\">Friendly name of the variable.</param>\n        /// <returns>Value of the variable.</returns>\n        /// <remarks>\n        /// <para>Cue-instance variables are useful when multiple instantiations of a single cue (and its associated sounds) are required (for example, a \"car\" cue where there may be more than one car at any given time). While a global variable allows multiple audio elements to be controlled in unison, a cue instance variable grants discrete control of each instance of a cue, even for each copy of the same cue.</para>\n        /// <para>The friendly name is a value set from the designer.</para>\n        /// </remarks>\n        public float GetVariable(string name)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            int i = FindVariable(name);\n            if (i == -1 || !_variables[i].IsPublic)\n                throw new IndexOutOfRangeException(\"The specified variable index is invalid.\");\n\n            return _variables[i].Value;\n        }\n\n        /// <summary>Updates the simulated 3D Audio settings calculated between an AudioEmitter and AudioListener.</summary>\n        /// <param name=\"listener\">The listener to calculate.</param>\n        /// <param name=\"emitter\">The emitter to calculate.</param>\n        /// <remarks>\n        /// <para>This must be called before Play().</para>\n        /// <para>Calling this method automatically converts the sound to monoaural and sets the speaker mix for any sound played by this cue to a value calculated with the listener's and emitter's positions. Any stereo information in the sound will be discarded.</para>\n        /// </remarks>\n        public void Apply3D(AudioListener listener, AudioEmitter emitter) \n        {\n            if (listener == null)\n                throw new ArgumentNullException(\"listener\");\n            if (emitter == null)\n                throw new ArgumentNullException(\"emitter\");\n\n            if (_played && !_applied3D)\n                throw new InvalidOperationException(\"You must call Apply3D on a Cue before calling Play to be able to call Apply3D after calling Play.\");\n\n            Vector3 direction = listener.Position - emitter.Position;\n\n            lock (_engine.UpdateLock)\n            {\n                // Set the distance for falloff.\n                float distance = direction.Length();\n                int i = FindVariable(\"Distance\");\n                _variables[i].SetValue(distance);\n\n                // Calculate the orientation.\n                if (distance > 0.0f)\n                    direction /= distance;\n                Vector3 right = Vector3.Cross(listener.Up, listener.Forward);\n                float slope = Vector3.Dot(direction, listener.Forward);\n                float angle = MathHelper.ToDegrees((float)Math.Acos(slope));\n                int j = FindVariable(\"OrientationAngle\");\n                _variables[j].SetValue(angle);\n                if (_curSound != null)\n                    _curSound.SetCuePan(Vector3.Dot(direction, right));\n\n                // Calculate doppler effect.\n                Vector3 relativeVelocity = emitter.Velocity - listener.Velocity;\n                relativeVelocity *= emitter.DopplerScale;\n            }\n\n            _applied3D = true;\n        }\n\n        internal void Update(float dt)\n        {\n            if (_curSound == null)\n                return;\n\n            _curSound.Update(dt);\n\n            UpdateRpcCurves();\n        }\n\n        private float UpdateRpcCurves()\n        {\n            float volume = 1.0f;\n\n            // Evaluate the runtime parameter controls.\n            int[] rpcCurves = _curSound.RpcCurves;\n            if (rpcCurves.Length > 0)\n            {\n                float pitch = 0.0f;\n                float reverbMix = 1.0f;\n                float? filterFrequency = null;\n                float? filterQFactor = null;\n\n                for (int i = 0; i < rpcCurves.Length; i++)\n                {\n                    RpcCurve rpcCurve = _engine.RpcCurves[rpcCurves[i]];\n\n                    // Some curves are driven by global variables and others by cue instance variables.\n                    float value;\n                    if (rpcCurve.IsGlobal)\n                        value = rpcCurve.Evaluate(_engine.GetGlobalVariable(rpcCurve.Variable));\n                    else\n                        value = rpcCurve.Evaluate(_variables[rpcCurve.Variable].Value);\n\n                    // Process the final curve value based on the parameter type it is.\n                    switch (rpcCurve.Parameter)\n                    {\n                        case RpcParameter.Volume:\n                            volume *= XactHelpers.ParseVolumeFromDecibels(value / 100.0f);\n                            break;\n\n                        case RpcParameter.Pitch:\n                            pitch += value / 1000.0f;\n                            break;\n\n                        case RpcParameter.ReverbSend:\n                            reverbMix *= XactHelpers.ParseVolumeFromDecibels(value / 100.0f);\n                            break;\n\n                        case RpcParameter.FilterFrequency:\n                            filterFrequency = value;\n                            break;\n\n                        case RpcParameter.FilterQFactor:\n                            filterQFactor = value;\n                            break;\n\n                        default:\n                            throw new ArgumentOutOfRangeException(\"rpcCurve.Parameter\");\n                    }\n                }\n\n                pitch = MathHelper.Clamp(pitch, -1.0f, 1.0f);\n                if (volume < 0.0f)\n                    volume = 0.0f;\n\n                _curSound.UpdateState(_engine, volume, pitch, reverbMix, filterFrequency, filterQFactor);\n            }\n\n            return volume;\n        }\n        \n        /// <summary>\n        /// This event is triggered when the Cue is disposed.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposing;\n\n        /// <summary>\n        /// Is true if the Cue has been disposed.\n        /// </summary>\n        public bool IsDisposed { get; internal set; }\n\n        /// <summary>\n        /// Disposes the Cue.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (IsDisposed)\n                return;\n\n            IsDisposed = true;\n\n            if (disposing)\n            {\n                IsCreated = false;\n                IsPrepared = false;\n\n                var handler = Disposing;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/DspParameter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.IO;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    struct DspParameter\n    {\n        public float Value;\n        public readonly float MinValue;\n        public readonly float MaxValue;\n\n        public DspParameter(BinaryReader reader)\n        {\n            // This is 1 if the type is byte sized and 0 for \n            // floats... not sure if we should use this info.\n            reader.ReadByte();\n            \n            // The value and the min/max range for limiting the \n            // results from the RPC curve when animated.\n            Value = reader.ReadSingle();\n            MinValue = reader.ReadSingle();\n            MaxValue = reader.ReadSingle();\n\n            // Looks to always be zero...  maybe some padding\n            // for future expansion that never occurred?\n            reader.ReadUInt16();\n        }\n\n        public void SetValue(float value)\n        {\n            if (value < MinValue)\n                Value = MinValue;\n            else if (value > MaxValue)\n                Value = MaxValue;\n            else\n                Value = value;\n        }\n\n        public override string ToString()\n        {\n            return \"Value:\" + Value + \" MinValue:\" + MinValue + \" MaxValue:\" + MaxValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/FilterMode.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public enum FilterMode\n    {\n        LowPass = 0,\n        BandPass = 1,\n        HighPass = 2,\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/MaxInstanceBehavior.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    enum MaxInstanceBehavior \n    {\n        FailToPlay,\n        Queue,\n        ReplaceOldest,\n        ReplaceQuietest,\n        ReplaceLowestPriority,\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/MiniFormatTag.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public enum MiniFormatTag\n    {\n        Pcm = 0x0,\n        Xma = 0x1,\n        Adpcm = 0x2,\n        Wma = 0x3,\n\n        // We allow XMA to be reused for a platform specific format.\n        PlatformSpecific = Xma,\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/PlayWaveEvent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    enum VariationType\n    {\n        Ordered,\n        OrderedFromRandom,\n        Random,\n        RandomNoImmediateRepeats,\n        Shuffle\n    };\n\n    class PlayWaveEvent : ClipEvent\n    {\n        private readonly SoundBank _soundBank;\n\n        private readonly VariationType _variation;\n\n        private readonly int _loopCount;\n\n        private readonly bool _newWaveOnLoop;\n\n        private readonly int[] _tracks;\n        private readonly int[] _waveBanks;\n        \n        private readonly byte[] _weights;\n        private readonly int _totalWeights;\n\n        private float _trackVolume;\n        private float _trackPitch;\n        private float _trackFilterFrequency;\n        private float _trackFilterQFactor;\n\n        private float _clipVolume;\n        private float _clipPitch;\n        private float _clipReverbMix;\n\n        private readonly Vector4? _filterVar;\n        private readonly Vector2? _volumeVar;\n        private readonly Vector2? _pitchVar;\n\n        private int _wavIndex;\n        private int _loopIndex;\n\n        private SoundEffectInstance _wav;\n        private bool _streaming;\n\n        public PlayWaveEvent(   XactClip clip, float timeStamp, float randomOffset, SoundBank soundBank,\n                                int[] waveBanks, int[] tracks, byte[] weights, int totalWeights,\n                                VariationType variation, Vector2? volumeVar, Vector2? pitchVar, Vector4? filterVar,\n                                int loopCount, bool newWaveOnLoop)\n            : base(clip, timeStamp, randomOffset)\n        {\n            _soundBank = soundBank;\n            _waveBanks = waveBanks;\n            _tracks = tracks;\n            _weights = weights;\n            _totalWeights = totalWeights;\n            _volumeVar = volumeVar;\n            _pitchVar = pitchVar;\n            _filterVar = filterVar;\n            _wavIndex = -1;\n            _loopIndex = 0;\n\n            _trackVolume = 1.0f;\n            _trackPitch = 0;\n            _trackFilterFrequency = 0;\n            _trackFilterQFactor = 0;\n\n            _clipVolume = 1.0f;\n            _clipPitch = 0;\n            _clipReverbMix = 0;\n\n            _variation = variation;\n            _loopCount = loopCount;\n            _newWaveOnLoop = newWaveOnLoop;\n        }\n\n        public override void Play() \n        {\n            if (_wav != null)\n            {\n                if (_wav.State != SoundState.Stopped)\n                    _wav.Stop();\n                if (_streaming)\n                    _wav.Dispose();\n                else\t\t\t\t\t\n                    _wav._strategy.IsXAct = false;\n                _wav = null;\n            }\n\n            Play(true);\n        }\n\n        private void Play(bool pickNewWav)\n        {\n            int trackCount = _tracks.Length;\n\n            // Do we need to pick a new wav to play first?\n            if (pickNewWav)\n            {\n                switch (_variation)\n                {\n                    case VariationType.Ordered:\n                        _wavIndex = (_wavIndex + 1) % trackCount;\n                        break;\n\n                    case VariationType.OrderedFromRandom:\n                        _wavIndex = (_wavIndex + 1) % trackCount;\n                        break;\n\n                    case VariationType.Random:\n                        if (_weights == null || trackCount == 1)\n                            _wavIndex = XactHelpers.Random.Next() % trackCount;\n                        else\n                        {\n                            int sum = XactHelpers.Random.Next(_totalWeights);\n                            for (int i = 0; i < trackCount; i++)\n                            {\n                                sum -= _weights[i];\n                                if (sum <= 0)\n                                {\n                                    _wavIndex = i;\n                                    break;\n                                }\n                            }\n                        }\n                        break;\n\n                    case VariationType.RandomNoImmediateRepeats:\n                    {\n                        if (_weights == null || trackCount == 1)\n                            _wavIndex = XactHelpers.Random.Next() % trackCount;\n                        else\n                        {\n                            int last = _wavIndex;\n                            int sum = XactHelpers.Random.Next(_totalWeights);\n                            for (int i = 0; i < trackCount; i++)\n                            {\n                                sum -= _weights[i];\n                                if (sum <= 0)\n                                {\n                                    _wavIndex = i;\n                                    break;\n                                }\n                            }\n\n                            if (_wavIndex == last)\n                                _wavIndex = (_wavIndex + 1) % trackCount;\n                        }\n                        break;\n                    }\n\n                    case VariationType.Shuffle:\n                        // TODO: Need some sort of deck implementation.\n                        _wavIndex = XactHelpers.Random.Next() % trackCount;\n                        break;\n                };\n            }\n\n            _wav = _soundBank.GetSoundEffectInstance(_waveBanks[_wavIndex], _tracks[_wavIndex], out _streaming);\n            if (_wav == null)\n            {\n                // We couldn't create a sound effect instance, most likely\n                // because we've reached the sound pool limits.\n                return;\n            }\n\n            // Do all the randoms before we play.\n            if (_volumeVar.HasValue)\n                _trackVolume = _volumeVar.Value.X + ((float)XactHelpers.Random.NextDouble() * _volumeVar.Value.Y);\n            if (_pitchVar.HasValue)\n                _trackPitch = _pitchVar.Value.X + ((float)XactHelpers.Random.NextDouble() * _pitchVar.Value.Y);\n            if (_clip.FilterEnabled)\n            {\n                if (_filterVar.HasValue)\n                {\n                    _trackFilterFrequency = _filterVar.Value.X + ((float)XactHelpers.Random.NextDouble() * _filterVar.Value.Y);\n                    _trackFilterQFactor = _filterVar.Value.Z + ((float)XactHelpers.Random.NextDouble() * _filterVar.Value.W);\n                }\n                else\n                {\n                    _trackFilterFrequency = _clip.FilterFrequency;\n                    _trackFilterQFactor = _clip.FilterQ;                \n                }\n            }\n \n            // This is a shortcut for infinite looping of a single track.\n            _wav.IsLooped = _loopCount == 255 && trackCount == 1;\n\n            // Update all the wave states then play.\n            UpdateState();\n            _wav.Play();\n        }\n\n        public override void Stop()\n        {\n            if (_wav != null)\n            {\n                _wav.Stop();\n                if (_streaming)\n                    _wav.Dispose();\n                else\n                    _wav._strategy.IsXAct = false;\t\t\t\t\n                _wav = null;\n            }\n            _loopIndex = 0;\n        }\n\n        public override void Pause() \n        {\n            if (_wav != null)\n                _wav.Pause();\n        }\n\n        public override void Resume()\n        {\n            if (_wav != null && _wav.State == SoundState.Paused)\n                _wav.Resume();\n        }\n\n        public override void SetTrackVolume(float volume)\n        {\n            _clipVolume = volume;\n            if (_wav != null)\n                _wav.Volume = _trackVolume * _clipVolume;\n        }\n\n        public override void SetTrackPan(float pan)\n        {\n            if (_wav != null)\n                _wav.Pan = pan;\n        }\n\n        public override void SetState(float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor)\n        {\n            _clipVolume = volume;\n            _clipPitch = pitch;\n            _clipReverbMix = reverbMix;\n\n            // The RPC filter overrides the randomized track filter.\n            if (filterFrequency.HasValue)\n                _trackFilterFrequency = filterFrequency.Value;\n            if (filterQFactor.HasValue)\n                _trackFilterQFactor = filterQFactor.Value;\n\n            if (_wav != null)\n                UpdateState();\n        }\n\n        private void UpdateState()\n        {\n            _wav.Volume = _trackVolume * _clipVolume;\n            _wav.Pitch = _trackPitch + _clipPitch;\n\n            if (_clip.UseReverb)\n                _wav.SetReverbMix(_clipReverbMix);\n            if (_clip.FilterEnabled)\n                _wav.SetFilter(_clip.FilterMode, _trackFilterQFactor, _trackFilterFrequency);\n        }\n\n        public override void SetFade(float fadeInDuration, float fadeOutDuration)\n        {\n            // TODO\n        }\n\n        public override bool Update(float dt)\n        {\n            if (_wav != null && _wav.State == SoundState.Stopped)\n            {\n                // If we're not looping or reached our loop \n                // limit then we can stop.\n                if (_loopCount == 0 || _loopIndex >= _loopCount)\n                {\n                    if (_streaming)\n                        _wav.Dispose();\n                    else\n                        _wav._strategy.IsXAct = false;\n                    _wav = null;\n                    _loopIndex = 0;\n                }\n                else\n                {\n                    // Increment the loop count if it isn't infinite.\n                    if (_loopCount != 255)\n                        ++_loopIndex;\n\n                    // Play the next track.\n                    Play(_newWaveOnLoop);\n                }\n            }\n\n            return _wav != null;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/ReverbSettings.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public class ReverbSettings\n    {\n        private readonly DspParameter[] _parameters = new DspParameter[22];\n\n        public ReverbSettings(BinaryReader reader)\n        {\n            _parameters[0] = new DspParameter(reader); // ReflectionsDelayMs\n            _parameters[1] = new DspParameter(reader); // ReverbDelayMs\n            _parameters[2] = new DspParameter(reader); // PositionLeft\n            _parameters[3] = new DspParameter(reader); // PositionRight\n            _parameters[4] = new DspParameter(reader); // PositionLeftMatrix\n            _parameters[5] = new DspParameter(reader); // PositionRightMatrix\n            _parameters[6] = new DspParameter(reader); // EarlyDiffusion\n            _parameters[7] = new DspParameter(reader); // LateDiffusion\n            _parameters[8] = new DspParameter(reader); // LowEqGain\n            _parameters[9] = new DspParameter(reader); // LowEqCutoff\n            _parameters[10] = new DspParameter(reader); // HighEqGain\n            _parameters[11] = new DspParameter(reader); // HighEqCutoff\n            _parameters[12] = new DspParameter(reader); // RearDelayMs\n            _parameters[13] = new DspParameter(reader); // RoomFilterFrequencyHz\n            _parameters[14] = new DspParameter(reader); // RoomFilterMainDb\n            _parameters[15] = new DspParameter(reader); // RoomFilterHighFrequencyDb\n            _parameters[16] = new DspParameter(reader); // ReflectionsGainDb\n            _parameters[17] = new DspParameter(reader); // ReverbGainDb\n            _parameters[18] = new DspParameter(reader); // DecayTimeSec\n            _parameters[19] = new DspParameter(reader); // DensityPct\n            _parameters[20] = new DspParameter(reader); // RoomSizeFeet\n            _parameters[21] = new DspParameter(reader); // WetDryMixPct\n        }\n\n        public float this[int index]\n        {\n            get { return _parameters[index].Value; }\n            set { _parameters[index].SetValue(value); }\n        }\n\n        public float ReflectionsDelayMs { get { return _parameters[0].Value; } }\n        public float ReverbDelayMs { get { return _parameters[1].Value; } }\n        public float PositionLeft { get { return _parameters[2].Value; } }\n        public float PositionRight { get { return _parameters[3].Value; } }\n        public float PositionLeftMatrix { get { return _parameters[4].Value; } }\n        public float PositionRightMatrix { get { return _parameters[5].Value; } }\n        public float EarlyDiffusion { get { return _parameters[6].Value; } }\n        public float LateDiffusion { get { return _parameters[7].Value; } }\n        public float LowEqGain { get { return _parameters[8].Value; } }\n        public float LowEqCutoff { get { return _parameters[9].Value; } }\n        public float HighEqGain { get { return _parameters[10].Value; } }\n        public float HighEqCutoff { get { return _parameters[11].Value; } }\n        public float RearDelayMs { get { return _parameters[12].Value; } }\n        public float RoomFilterFrequencyHz { get { return _parameters[13].Value; } }\n        public float RoomFilterMainDb { get { return _parameters[14].Value; } }\n        public float RoomFilterHighFrequencyDb { get { return _parameters[15].Value; } }\n        public float ReflectionsGainDb { get { return _parameters[16].Value; } }\n        public float ReverbGainDb { get { return _parameters[17].Value; } }\n        public float DecayTimeSec { get { return _parameters[18].Value; } }\n        public float DensityPct { get { return _parameters[19].Value; } }\n        public float RoomSizeFeet { get { return _parameters[20].Value; } }\n        public float WetDryMixPct { get { return _parameters[21].Value; } }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/RpcCurve.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    struct RpcCurve\n    {\n        public uint FileOffset;\n        public int Variable;\n        public bool IsGlobal;\n        public RpcParameter Parameter;\n        public RpcPoint[] Points;\n\n        public float Evaluate(float position)\n        {\n            // TODO: We need to implement the different RpcPointTypes.\n\n            RpcPoint first = Points[0];\n            if (position <= first.Position)\n                return first.Value;\n\n            RpcPoint second = Points[Points.Length - 1];\n            if (position >= second.Position)\n                return second.Value;\n\n            for (int i = 1; i < Points.Length; ++i)\n            {\n                second = Points[i];\n                if (second.Position >= position)\n                    break;\n\n                first = second;\n            }\n\n            switch (first.Type)\n            {\n                default:\n                case RpcPointType.Linear:\n                {\n                    float t = (position - first.Position) / (second.Position - first.Position);\n                    return first.Value + ((second.Value - first.Value) * t);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/RpcParameter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    enum RpcParameter\n    {\n        Volume,\n        Pitch,\n        ReverbSend,\n        FilterFrequency,\n        FilterQFactor,\n        NumParameters,\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/RpcPoint.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    struct RpcPoint \n    {\n        public RpcPointType Type;\n        public float Position;\n        public float Value;\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/RpcPointType.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    enum RpcPointType \n    {\n        Linear,\n        Fast,\n        Slow,\n        SinCos\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/RpcVariable.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    struct RpcVariable \n    {\n        public string Name;\n        public float Value;\n        public byte Flags;\n        public float InitValue;\n        public float MaxValue;\n        public float MinValue;\n\n        public bool IsPublic\n        {\n            get { return (Flags & 0x1) != 0; }\n        }\n\n        public bool IsReadOnly\n        {\n            get { return (Flags & 0x2) != 0; }\n        }\n\n        public bool IsGlobal\n        {\n            get { return (Flags & 0x4) == 0; }\n        }\n\n        public bool IsReserved\n        {\n            get { return (Flags & 0x8) != 0; }\n        }\n\n        public void SetValue(float value)\n        {\n            if (value < MinValue)\n                Value = MinValue;\n            else if (value > MaxValue)\n                Value = MaxValue;\n            else\n                Value = value;\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/SoundBank.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Diagnostics;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>Represents a collection of Cues.</summary>\n    public class SoundBank : IDisposable\n    {\n        readonly AudioEngine _audioengine;\n        readonly string[] _waveBankNames;\n        readonly WaveBank[] _waveBanks;\n\n        readonly float [] defaultProbability = new float [1] { 1.0f };\n        readonly Dictionary<string, XactSound[]> _sounds = new Dictionary<string, XactSound[]>();\n        readonly Dictionary<string, float []> _probabilities = new Dictionary<string, float []>();\n\n        /// <summary>\n        /// Is true if the SoundBank has any live Cues in use.\n        /// </summary>\n        public bool IsInUse { get; private set; }\n\n        /// <param name=\"audioEngine\">AudioEngine that will be associated with this sound bank.</param>\n        /// <param name=\"fileName\">Path to a .xsb SoundBank file.</param>\n        public SoundBank(AudioEngine audioEngine, string fileName)\n        {\n            if (audioEngine == null)\n                throw new ArgumentNullException(\"audioEngine\");\n            if (string.IsNullOrEmpty(fileName))\n                throw new ArgumentNullException(\"fileName\");\n\n            _audioengine = audioEngine;\n\n            using (Stream stream = EnsureRandomAccessStream(TitleContainer.OpenStream(fileName)))\n            using (BinaryReader reader = new BinaryReader(stream))\n            {\n                // Thanks to Liandril for \"xactxtract\" for some of the offsets.\n\n                uint magic = reader.ReadUInt32();\n                if (magic != 0x4B424453) //\"SDBK\"\n                    throw new Exception(\"Bad soundbank format\");\n\n                reader.ReadUInt16(); // toolVersion\n\n                uint formatVersion = reader.ReadUInt16();\n                if (formatVersion != 43)\n                    Debug.WriteLine(\"Warning: SoundBank format {0} not supported.\", formatVersion);\n\n                reader.ReadUInt16(); // crc, TODO: Verify crc (FCS16)\n\n                reader.ReadUInt32(); // lastModifiedLow\n                reader.ReadUInt32(); // lastModifiedHigh\n                reader.ReadByte(); // platform ???\n\n                uint numSimpleCues = reader.ReadUInt16();\n                uint numComplexCues = reader.ReadUInt16();\n                reader.ReadUInt16(); //unkn\n                reader.ReadUInt16(); // numTotalCues\n                uint numWaveBanks = reader.ReadByte();\n                reader.ReadUInt16(); // numSounds\n                uint cueNameTableLen = reader.ReadUInt16();\n                reader.ReadUInt16(); //unkn\n\n                uint simpleCuesOffset = reader.ReadUInt32();\n                uint complexCuesOffset = reader.ReadUInt32(); //unkn\n                uint cueNamesOffset = reader.ReadUInt32();\n                reader.ReadUInt32(); //unkn\n                reader.ReadUInt32(); // variationTablesOffset\n                reader.ReadUInt32(); //unkn\n                uint waveBankNameTableOffset = reader.ReadUInt32();\n                reader.ReadUInt32(); // cueNameHashTableOffset\n                reader.ReadUInt32(); // cueNameHashValsOffset\n                reader.ReadUInt32(); // soundsOffset\n                    \n                //name = System.Text.Encoding.UTF8.GetString(soundbankreader.ReadBytes(64),0,64).Replace(\"\\0\",\"\");\n\n                //parse wave bank name table\n                stream.Seek(waveBankNameTableOffset, SeekOrigin.Begin);\n                _waveBanks = new WaveBank[numWaveBanks];\n                _waveBankNames = new string[numWaveBanks];\n                for (int i=0; i<numWaveBanks; i++)\n                    _waveBankNames[i] = System.Text.Encoding.UTF8.GetString(reader.ReadBytes(64), 0, 64).Replace(\"\\0\", \"\");\n                    \n                //parse cue name table\n                stream.Seek(cueNamesOffset, SeekOrigin.Begin);\n                string[] cueNames = System.Text.Encoding.UTF8.GetString(reader.ReadBytes((int)cueNameTableLen), 0, (int)cueNameTableLen).Split('\\0');\n\n                // Simple cues\n                if (numSimpleCues > 0)\n                {\n                    stream.Seek(simpleCuesOffset, SeekOrigin.Begin);\n                    for (int i = 0; i < numSimpleCues; i++)\n                    {\n                        reader.ReadByte(); // flags\n                        uint soundOffset = reader.ReadUInt32();\n\n                        long oldPosition = stream.Position;\n                        stream.Seek(soundOffset, SeekOrigin.Begin);\n                        XactSound sound = new XactSound(audioEngine, this, reader);\n                        stream.Seek(oldPosition, SeekOrigin.Begin);\n\n                        _sounds.Add(cueNames [i], new XactSound [] { sound } );\n                        _probabilities.Add(cueNames [i], defaultProbability);  \n                    }\n                }\n                    \n                // Complex cues\n                if (numComplexCues > 0)\n                {\n                    stream.Seek(complexCuesOffset, SeekOrigin.Begin);\n                    for (int i = 0; i < numComplexCues; i++)\n                    {\n                        byte flags = reader.ReadByte();\n                        if (((flags >> 2) & 1) != 0)\n                        {\n                            uint soundOffset = reader.ReadUInt32();\n                            reader.ReadUInt32(); //unkn\n\n                            long oldPosition = stream.Position;\n                            stream.Seek(soundOffset, SeekOrigin.Begin);\n                            XactSound sound = new XactSound(audioEngine, this, reader);\n                            stream.Seek(oldPosition, SeekOrigin.Begin);\n\n                            _sounds.Add(cueNames [numSimpleCues + i], new XactSound [] { sound });\n                            _probabilities.Add(cueNames [numSimpleCues + i], defaultProbability);\n                        }\n                        else\n                        {\n                            uint variationTableOffset = reader.ReadUInt32();\n                            reader.ReadUInt32(); // transitionTableOffset\n\n                            //parse variation table\n                            long savepos = stream.Position;\n                            stream.Seek(variationTableOffset, SeekOrigin.Begin);\n\n                            uint numEntries = reader.ReadUInt16();\n                            uint variationflags = reader.ReadUInt16();\n                            reader.ReadByte();\n                            reader.ReadUInt16();\n                            reader.ReadByte();\n\n                            XactSound[] cueSounds = new XactSound[numEntries];\n                            float[] probs = new float[numEntries];\n\n                            uint tableType = (variationflags >> 3) & 0x7;\n                            for (int j = 0; j < numEntries; j++)\n                            {\n                                switch (tableType)\n                                {\n                                    case 0: //Wave\n                                        {\n                                            int trackIndex = reader.ReadUInt16();\n                                            int waveBankIndex = reader.ReadByte();\n                                            reader.ReadByte(); // weightMin\n                                            reader.ReadByte(); // weightMax\n\n                                            cueSounds[j] = new XactSound(this, waveBankIndex, trackIndex);\n                                            break;\n                                        }\n                                    case 1:\n                                        {\n                                            uint soundOffset = reader.ReadUInt32();\n                                            reader.ReadByte(); // weightMin\n                                            reader.ReadByte(); // weightMax\n\n                                            long oldPosition = stream.Position;\n                                            stream.Seek(soundOffset, SeekOrigin.Begin);\n                                            cueSounds[j] = new XactSound(audioEngine, this, reader);\n                                            stream.Seek(oldPosition, SeekOrigin.Begin);\n                                            break;\n                                        }\n                                    case 3:\n                                        {\n                                            uint soundOffset = reader.ReadUInt32();\n                                            reader.ReadSingle(); // weightMin\n                                            reader.ReadSingle(); // weightMax\n                                            reader.ReadUInt32(); // flags\n\n                                            long oldPosition = stream.Position;\n                                            stream.Seek(soundOffset, SeekOrigin.Begin);\n                                            cueSounds[j] = new XactSound(audioEngine, this, reader);\n                                            stream.Seek(oldPosition, SeekOrigin.Begin);\n                                            break;\n                                        }\n                                    case 4: //CompactWave\n                                        {\n                                            int trackIndex = reader.ReadUInt16();\n                                            int waveBankIndex = reader.ReadByte();\n                                            cueSounds[j] = new XactSound(this, waveBankIndex, trackIndex);\n                                            break;\n                                        }\n                                    default:\n                                        throw new NotSupportedException();\n                                }\n                            }\n\n                            stream.Seek(savepos, SeekOrigin.Begin);\n\n                            _sounds.Add(cueNames [numSimpleCues + i], cueSounds);\n                            _probabilities.Add(cueNames [numSimpleCues + i], probs);\n                        }\n\n                        // Instance limiting\n                        reader.ReadByte(); //instanceLimit\n                        reader.ReadUInt16(); //fadeInSec, divide by 1000.0f\n                        reader.ReadUInt16(); //fadeOutSec, divide by 1000.0f\n                        reader.ReadByte(); //instanceFlags\n                    }\n                }\n            }\n        }\n\n        private static Stream EnsureRandomAccessStream(Stream stream)\n        {\n            if (!stream.CanSeek)\n            {\n                Stream memStream = new MemoryStream();\n                stream.CopyTo(memStream);\n                memStream.Seek(0, SeekOrigin.Begin);\n                stream.Dispose();\n                return memStream;\n            }\n\n            return stream;\n        }\n\n        internal SoundEffectInstance GetSoundEffectInstance(int waveBankIndex, int trackIndex, out bool streaming)\n        {\n            WaveBank waveBank = _waveBanks[waveBankIndex];\n\n            // If the wave bank has not been resolved then do so now.\n            if (waveBank == null)\n            {\n                string name = _waveBankNames[waveBankIndex];\n                if (!_audioengine.Wavebanks.TryGetValue(name, out waveBank))\n                    throw new Exception(\"The wave bank '\" + name + \"' was not found!\");\n                _waveBanks[waveBankIndex] = waveBank;                \n            }\n\n            return waveBank.GetSoundEffectInstance(trackIndex, out streaming);\n        }\n        \n        /// <summary>\n        /// Returns a pooled Cue object.\n        /// </summary>\n        /// <param name=\"name\">Friendly name of the cue to get.</param>\n        /// <returns>a unique Cue object from a pool.</returns>\n        /// <remarks>\n        /// <para>Cue instances are unique, even when sharing the same name. This allows multiple instances to simultaneously play.</para>\n        /// </remarks>\n        public Cue GetCue(string name)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            XactSound[] sounds;\n            if (!_sounds.TryGetValue(name, out sounds))\n                throw new ArgumentException();\n\n            float [] probs;\n            if (!_probabilities.TryGetValue(name, out probs))\n                throw new ArgumentException();\n\n            IsInUse = true;\n\n            Cue cue = new Cue(_audioengine, name, sounds, probs);\n            cue.Prepare();\n            return cue;\n        }\n        \n        /// <summary>\n        /// Plays a cue.\n        /// </summary>\n        /// <param name=\"name\">Name of the cue to play.</param>\n        public void PlayCue(string name)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            XactSound[] sounds;\n            if (!_sounds.TryGetValue(name, out sounds))\n                throw new ArgumentException();\n\n            float [] probs;\n            if (!_probabilities.TryGetValue(name, out probs))\n                throw new ArgumentException();\n\n            IsInUse = true;\n            Cue cue = new Cue(_audioengine, name, sounds, probs);\n            cue.Prepare();\n            cue.Play();\n        }\n\n        /// <summary>\n        /// Plays a cue with static 3D positional information.\n        /// </summary>\n        /// <remarks>\n        /// Commonly used for short lived effects.  To dynamically change the 3D \n        /// positional information on a cue over time use <see cref=\"GetCue\"/> and <see cref=\"Cue.Apply3D\"/>.</remarks>\n        /// <param name=\"name\">The name of the cue to play.</param>\n        /// <param name=\"listener\">The listener state.</param>\n        /// <param name=\"emitter\">The cue emitter state.</param>\n        public void PlayCue(string name, AudioListener listener, AudioEmitter emitter)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            XactSound[] sounds;\n            if (!_sounds.TryGetValue(name, out sounds))\n                throw new InvalidOperationException();\n\n            float [] probs;\n            if (!_probabilities.TryGetValue(name, out probs))\n                throw new ArgumentException();\n\n            IsInUse = true;\n\n            Cue cue = new Cue(_audioengine, name, sounds, probs);\n            cue.Prepare();\n            cue.Apply3D(listener, emitter);\n            cue.Play();\n        }\n\n        /// <summary>\n        /// This event is triggered when the SoundBank is disposed.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposing;\n\n        /// <summary>\n        /// Is true if the SoundBank has been disposed.\n        /// </summary>\n        public bool IsDisposed { get; private set; }\n\n        /// <summary>\n        /// Disposes the SoundBank.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        ~SoundBank()\n        {\n            Dispose(false);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (IsDisposed)\n                return;\n\n            IsDisposed = true;\n\n            if (disposing)\n            {\n                IsInUse = false;\n\n                var handler = Disposing;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/VolumeEvent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    class VolumeEvent : ClipEvent\n    {\n        private readonly float _volume;\n\n        public VolumeEvent(XactClip clip, float timeStamp, float randomOffset, float volume)\n            : base(clip, timeStamp, randomOffset)\n        {\n            _volume = volume;\n        }\n\n        public override void Play() \n        {\n            _clip.SetVolume(_volume);\n        }\n\n        public override void Stop()\n        {\n        }\n\n        public override void Pause() \n        {\n        }\n\n        public override void Resume()\n        {\n        }\n\n        public override void SetTrackVolume(float volume)\n        {\n        }\n\n        public override void SetTrackPan(float pan)\n        {\n        }\n\n        public override void SetState(float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor)\n        {\n        }\n\n        public override bool Update(float dt)\n        {\n            return false;\n        }\n\n        public override void SetFade(float fadeInDuration, float fadeOutDuration)\n        {\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/WaveBank.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>Represents a collection of wave files.</summary>\n    public partial class WaveBank : IDisposable\n    {\n        private readonly SoundEffect[] _sounds;\n        private readonly StreamInfo[] _streams;\n        private readonly string _bankName;\n        private readonly string _waveBankFileName;\n        private readonly bool _streaming;\n        private readonly int _offset;\n        private readonly int _packetSize;\n\n        private readonly int _version;\n        private readonly int _playRegionOffset;\n\n        struct Segment\n        {\n            public int Offset;\n            public int Length;\n        }\n\n        struct WaveBankHeader\n        {\n            public int Version;\n            public Segment[] Segments;\n        }\n\n        struct WaveBankData\n        {\n            public int    Flags;                                // Bank flags\n            public int    EntryCount;                           // Number of entries in the bank\n            public string BankName;                             // Bank friendly name\n            public int    EntryMetaDataElementSize;             // Size of each entry meta-data element, in bytes\n            public int    EntryNameElementSize;                 // Size of each entry name element, in bytes\n            public int    Alignment;                            // Entry alignment, in bytes\n            public int    CompactFormat;                        // Format data for compact bank\n            public int    BuildTime;                            // Build timestamp\n        }\n\n        struct StreamInfo\n        {\n            public int Format;\n            public int FileOffset;\n            public int FileLength;\n            public int LoopStart;\n            public int LoopLength;\n        }\n\n        private const int Flag_EntryNames = 0x00010000; // Bank includes entry names\n        private const int Flag_Compact = 0x00020000; // Bank uses compact format\n        private const int Flag_SyncDisabled = 0x00040000; // Bank is disabled for audition sync\n        private const int Flag_SeekTables = 0x00080000; // Bank includes seek tables.\n        private const int Flag_Mask = 0x000F0000;\n        \n        /// <summary>\n        /// </summary>\n        public bool IsInUse { get; private set; }\n\n        /// <summary>\n        /// </summary>\n        public bool IsPrepared { get; private set; }\n\n        /// <param name=\"audioEngine\">Instance of the AudioEngine to associate this wave bank with.</param>\n        /// <param name=\"nonStreamingWaveBankFilename\">Path to the .xwb file to load.</param>\n        /// <remarks>This constructor immediately loads all wave data into memory at once.</remarks>\n        public WaveBank(AudioEngine audioEngine, string nonStreamingWaveBankFilename)\n            : this(audioEngine, nonStreamingWaveBankFilename, false, 0, 0)\n        {\n        }\n\n        private WaveBank(AudioEngine audioEngine, string waveBankFilename, bool streaming, int offset, int packetsize)\n        {\n            if (audioEngine == null)\n                throw new ArgumentNullException(\"audioEngine\");\n            if (string.IsNullOrEmpty(waveBankFilename))\n                throw new ArgumentNullException(\"nonStreamingWaveBankFilename\");\n\n            // Is this a streaming wavebank?\n            if (streaming)\n            {\n                if (offset != 0)\n                    throw new ArgumentException(\"We only support a zero offset in streaming banks.\", \"offset\");\n                if (packetsize < 2)\n                    throw new ArgumentException(\"The packet size must be greater than 2.\", \"packetsize\");\n\n                _streaming = true;\n                _offset = offset;\n                _packetSize = packetsize;\n            }\n\n            //XWB PARSING\n            //Adapted from MonoXNA\n            //Originally adaped from Luigi Auriemma's unxwb\n            \n            WaveBankHeader wavebankheader;\n            WaveBankData wavebankdata;\n\n            wavebankdata.EntryNameElementSize = 0;\n            wavebankdata.CompactFormat = 0;\n            wavebankdata.Alignment = 0;\n            wavebankdata.BuildTime = 0;\n\n            int wavebank_offset = 0;\n\n            _waveBankFileName = waveBankFilename;\n\n            BinaryReader reader = new BinaryReader(TitleContainer.OpenStream(waveBankFilename));\n\n            reader.ReadBytes(4);\n\n            _version = wavebankheader.Version = reader.ReadInt32();\n\n            int last_segment = 4;\n            //if (wavebankheader.Version == 1) goto WAVEBANKDATA;\n            if (wavebankheader.Version <= 3) last_segment = 3;\n            if (wavebankheader.Version >= 42) reader.ReadInt32();    // skip HeaderVersion\n\n            wavebankheader.Segments = new Segment[5];\n\n            for (int i = 0; i <= last_segment; i++)\n            {\n                wavebankheader.Segments[i].Offset = reader.ReadInt32();\n                wavebankheader.Segments[i].Length = reader.ReadInt32();\n            }\n\n            reader.BaseStream.Seek(wavebankheader.Segments[0].Offset, SeekOrigin.Begin);\n\n            //WAVEBANKDATA:\n\n            wavebankdata.Flags = reader.ReadInt32();\n            wavebankdata.EntryCount = reader.ReadInt32();\n\n            if ((wavebankheader.Version == 2) || (wavebankheader.Version == 3))\n            {\n                wavebankdata.BankName = System.Text.Encoding.UTF8.GetString(reader.ReadBytes(16),0,16).Replace(\"\\0\", \"\");\n            }\n            else\n            {\n                wavebankdata.BankName = System.Text.Encoding.UTF8.GetString(reader.ReadBytes(64),0,64).Replace(\"\\0\", \"\");\n            }\n\n            _bankName = wavebankdata.BankName;\n\n            if (wavebankheader.Version == 1)\n            {\n                //wavebank_offset = (int)ftell(fd) - file_offset;\n                wavebankdata.EntryMetaDataElementSize = 20;\n            }\n            else\n            {\n                wavebankdata.EntryMetaDataElementSize = reader.ReadInt32();\n                wavebankdata.EntryNameElementSize = reader.ReadInt32();\n                wavebankdata.Alignment = reader.ReadInt32();\n                wavebank_offset = wavebankheader.Segments[1].Offset; //METADATASEGMENT\n            }\n\n            if ((wavebankdata.Flags & Flag_Compact) != 0)\n            {\n                reader.ReadInt32(); // compact_format\n            }\n\n            _playRegionOffset = wavebankheader.Segments[last_segment].Offset;\n            if (_playRegionOffset == 0)\n            {\n                _playRegionOffset =\n                    wavebank_offset +\n                    (wavebankdata.EntryCount * wavebankdata.EntryMetaDataElementSize);\n            }\n            \n            int segidx_entry_name = 2;\n            if (wavebankheader.Version >= 42) segidx_entry_name = 3;\n            \n            if ((wavebankheader.Segments[segidx_entry_name].Offset != 0) &&\n                (wavebankheader.Segments[segidx_entry_name].Length != 0))\n            {\n                if (wavebankdata.EntryNameElementSize == -1) wavebankdata.EntryNameElementSize = 0;\n                byte[] entry_name = new byte[wavebankdata.EntryNameElementSize + 1];\n                entry_name[wavebankdata.EntryNameElementSize] = 0;\n            }\n\n            _sounds = new SoundEffect[wavebankdata.EntryCount];\n            _streams = new StreamInfo[wavebankdata.EntryCount];\n\n            reader.BaseStream.Seek(wavebank_offset, SeekOrigin.Begin);\n\n            // The compact format requires us to load stuff differently.\n            bool isCompactFormat = (wavebankdata.Flags & Flag_Compact) != 0;\n            if (isCompactFormat)\n            {\n                // Load the sound data offset table from disk.\n                for (int i = 0; i < wavebankdata.EntryCount; i++)\n                {\n                    int len = reader.ReadInt32();\n                    _streams[i].Format = wavebankdata.CompactFormat;\n                    _streams[i].FileOffset = (len & ((1 << 21) - 1))*wavebankdata.Alignment;\n                }\n\n                // Now figure out the sound data lengths.\n                for (int i = 0; i < wavebankdata.EntryCount; i++)\n                {\n                    int nextOffset;\n                    if (i == (wavebankdata.EntryCount - 1))\n                        nextOffset = wavebankheader.Segments[last_segment].Length;\n                    else\n                        nextOffset = _streams[i + 1].FileOffset;\n\n                    // The next and current offsets used to calculate the length.\n                    _streams[i].FileLength = nextOffset - _streams[i].FileOffset;\n                }\n            }\n            else\n            {\n                for (int i = 0; i < wavebankdata.EntryCount; i++)\n                {\n                    StreamInfo info = new StreamInfo();\n                    if (wavebankheader.Version == 1)\n                    {\n                        info.Format = reader.ReadInt32();\n                        info.FileOffset = reader.ReadInt32();\n                        info.FileLength = reader.ReadInt32();\n                        info.LoopStart = reader.ReadInt32();\n                        info.LoopLength = reader.ReadInt32();\n                    }\n                    else\n                    {\n                        int flagsAndDuration = reader.ReadInt32(); // Unused\n\n                        if (wavebankdata.EntryMetaDataElementSize >= 8)\n                            info.Format = reader.ReadInt32();\n                        if (wavebankdata.EntryMetaDataElementSize >= 12)\n                            info.FileOffset = reader.ReadInt32();\n                        if (wavebankdata.EntryMetaDataElementSize >= 16)\n                            info.FileLength = reader.ReadInt32();\n                        if (wavebankdata.EntryMetaDataElementSize >= 20)\n                            info.LoopStart = reader.ReadInt32();\n                        if (wavebankdata.EntryMetaDataElementSize >= 24)\n                            info.LoopLength = reader.ReadInt32();\n                    }\n\n                    // TODO: What is this doing?\n                    if (wavebankdata.EntryMetaDataElementSize < 24)\n                    {\n                        if (info.FileLength != 0)\n                            info.FileLength = wavebankheader.Segments[last_segment].Length;\n                    }\n\n                    _streams[i] = info;\n                }\n            }\n\n            // If this isn't a streaming wavebank then load all the sounds now.\n            if (!_streaming)\n            {\n                for (int i = 0; i < _streams.Length; i++)\n                {\n                    StreamInfo info = _streams[i];\n                    \n                    // Read the data.\n                    reader.BaseStream.Seek(info.FileOffset + _playRegionOffset, SeekOrigin.Begin);\n                    byte[] audiodata = reader.ReadBytes(info.FileLength);\n\n                    // Decode the format information.\n                    MiniFormatTag codec;\n                    int channels, rate, alignment;\n                    DecodeFormat(info.Format, out codec, out channels, out rate, out alignment);\n\n                    // Call the special constuctor on SoundEffect to sort it out.\n                    _sounds[i] = new SoundEffect(codec, audiodata, channels, rate, alignment, info.LoopStart, info.LoopLength);                \n                }\n\n                _streams = null;\n            }\n            \n            audioEngine.Wavebanks[_bankName] = this;\n\n            IsPrepared = true;\n        }\n\n        private void DecodeFormat(int format, out MiniFormatTag codec, out int channels, out int rate, out int alignment)\n        {\n            if (_version == 1)\n            {\n                // I'm not 100% sure if the following is correct\n                // version 1:\n                // 1 00000000 000101011000100010 0 001 0\n                // | |         |                 | |   |\n                // | |         |                 | |   wFormatTag\n                // | |         |                 | nChannels\n                // | |         |                 ???\n                // | |         nSamplesPerSec\n                // | wBlockAlign\n                // wBitsPerSample\n\n                codec = (MiniFormatTag)((format) & ((1 << 1) - 1));\n                channels = (format >> (1)) & ((1 << 3) - 1);\n                rate = (format >> (1 + 3 + 1)) & ((1 << 18) - 1);\n                alignment = (format >> (1 + 3 + 1 + 18)) & ((1 << 8) - 1);\n                //bits = (format >> (1 + 3 + 1 + 18 + 8)) & ((1 << 1) - 1);\n\n                /*} else if(wavebankheader.dwVersion == 23) { // I'm not 100% sure if the following is correct\n                    // version 23:\n                    // 1000000000 001011101110000000 001 1\n                    // | |        |                  |   |\n                    // | |        |                  |   ???\n                    // | |        |                  nChannels?\n                    // | |        nSamplesPerSec\n                    // | ???\n                    // !!!UNKNOWN FORMAT!!!\n\n                    //codec = -1;\n                    //chans = (wavebankentry.Format >>  1) & ((1 <<  3) - 1);\n                    //rate  = (wavebankentry.Format >>  4) & ((1 << 18) - 1);\n                    //bits  = (wavebankentry.Format >> 31) & ((1 <<  1) - 1);\n                    codec = (wavebankentry.Format                    ) & ((1 <<  1) - 1);\n                    chans = (wavebankentry.Format >> (1)             ) & ((1 <<  3) - 1);\n                    rate  = (wavebankentry.Format >> (1 + 3)         ) & ((1 << 18) - 1);\n                    align = (wavebankentry.Format >> (1 + 3 + 18)    ) & ((1 <<  9) - 1);\n                    bits  = (wavebankentry.Format >> (1 + 3 + 18 + 9)) & ((1 <<  1) - 1); */\n\n            }\n            else\n            {\n                // 0 00000000 000111110100000000 010 01\n                // | |        |                  |   |\n                // | |        |                  |   wFormatTag\n                // | |        |                  nChannels\n                // | |        nSamplesPerSec\n                // | wBlockAlign\n                // wBitsPerSample\n\n                codec = (MiniFormatTag)((format) & ((1 << 2) - 1));\n                channels = (format >> (2)) & ((1 << 3) - 1);\n                rate = (format >> (2 + 3)) & ((1 << 18) - 1);\n                alignment = (format >> (2 + 3 + 18)) & ((1 << 8) - 1);\n                //bits = (info.Format >> (2 + 3 + 18 + 8)) & ((1 << 1) - 1);\n            }            \n        }\n\n        /// <param name=\"audioEngine\">Instance of the AudioEngine to associate this wave bank with.</param>\n        /// <param name=\"streamingWaveBankFilename\">Path to the .xwb to stream from.</param>\n        /// <param name=\"offset\">DVD sector-aligned offset within the wave bank data file.</param>\n        /// <param name=\"packetsize\">Stream packet size, in sectors, to use for each stream. The minimum value is 2.</param>\n        /// <remarks>\n        /// <para>This constructor streams wave data as needed.</para>\n        /// <para>Note that packetsize is in sectors, which is 2048 bytes.</para>\n        /// <para>AudioEngine.Update() must be called at least once before using data from a streaming wave bank.</para>\n        /// </remarks>\n        public WaveBank(AudioEngine audioEngine, string streamingWaveBankFilename, int offset, short packetsize)\n            : this(audioEngine, streamingWaveBankFilename, true, offset, packetsize)\n        {\n        }\n\n        internal SoundEffectInstance GetSoundEffectInstance(int trackIndex, out bool streaming)\n        {\n            if (_streaming)\n            {\n                streaming = true;\n                StreamInfo stream = _streams[trackIndex];\n                throw new NotImplementedException(\"XACT streaming is not implemented on this platform.\");\n            }\n            else\n            {\n                streaming = false;\n                SoundEffect effect = _sounds[trackIndex];\n\n                return AudioService.Current.GetInstance(effect, true);\n            }\n        }\n\n        /// <summary>\n        /// This event is triggered when the WaveBank is disposed.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposing;\n\n        /// <summary>\n        /// Is true if the WaveBank has been disposed.\n        /// </summary>\n        public bool IsDisposed { get; private set; }\n\n        /// <summary>\n        /// Disposes the WaveBank.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        ~WaveBank()\n        {\n            Dispose(false);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (IsDisposed)\n                return;\n\n            IsDisposed = true;\n\n            if (disposing)\n            {\n                foreach (SoundEffect s in _sounds)\n                    s.Dispose();\n\n                IsPrepared = false;\n                IsInUse = false;\n\n                var handler = Disposing;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/XactClip.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    class XactClip\n    {\n        private readonly float _defaultVolume;\n        private float _volumeScale;\n        private float _volume;\n\n        private readonly ClipEvent[] _events;\n        private float _time;\n        private int _nextEvent;\n\n        internal readonly bool FilterEnabled;\n        internal readonly FilterMode FilterMode;\n        internal readonly float FilterQ;\n        internal readonly ushort FilterFrequency;\n\n        internal readonly bool UseReverb;\n\n        public XactClip(SoundBank soundBank, BinaryReader clipReader, bool useReverb)\n        {\n#pragma warning disable 0219\n            State = SoundState.Stopped;\n\n            UseReverb = useReverb;\n\n            float volumeDb = XactHelpers.ParseDecibels(clipReader.ReadByte());\n            _defaultVolume = XactHelpers.ParseVolumeFromDecibels(volumeDb);\n            uint clipOffset = clipReader.ReadUInt32();\n\n            // Read the filter info.\n            ushort filterQAndFlags = clipReader.ReadUInt16();\n            FilterEnabled = (filterQAndFlags & 1) == 1;\n            FilterMode = (FilterMode)((filterQAndFlags >> 1) & 3);\n            FilterQ = (filterQAndFlags >> 3) * 0.01f;\n            FilterFrequency = clipReader.ReadUInt16();\n\n            long oldPosition = clipReader.BaseStream.Position;\n            clipReader.BaseStream.Seek(clipOffset, SeekOrigin.Begin);\n            \n            byte numEvents = clipReader.ReadByte();\n            _events = new ClipEvent[numEvents];\n            \n            for (int i = 0; i<numEvents; i++) \n            {\n                uint eventInfo = clipReader.ReadUInt32();\n                float randomOffset = clipReader.ReadUInt16() * 0.001f;\n\n                // TODO: eventInfo still has 11 bits that are unknown!\n                uint eventId = eventInfo & 0x1F;\n                float timeStamp = ((eventInfo >> 5) & 0xFFFF) * 0.001f;\n                uint unknown = eventInfo >> 21;\n\n                switch (eventId)\n                {\n                case 0:\n                    // Stop Event\n                    throw new NotImplementedException(\"Stop event\");\n\n                case 1:\n                {\n                    // Unknown!\n                    clipReader.ReadByte();\n\n                    // Event flags\n                    byte eventFlags = clipReader.ReadByte();\n                    bool playRelease = (eventFlags & 0x01) == 0x01;\n                    bool panEnabled = (eventFlags & 0x02) == 0x02;\n                    bool useCenterSpeaker = (eventFlags & 0x04) == 0x04;\n\n                    int trackIndex = clipReader.ReadUInt16();\n                    int waveBankIndex = clipReader.ReadByte();\t\t\t\t\t\n                    byte loopCount = clipReader.ReadByte();\n                    float panAngle = clipReader.ReadUInt16() / 100.0f;\n                    float panArc = clipReader.ReadUInt16() / 100.0f;\n                    \n                    _events[i] = new PlayWaveEvent(\n                        this,\n                        timeStamp, \n                        randomOffset,\n                        soundBank, \n                        new[] { waveBankIndex }, \n                        new[] { trackIndex },\n                        null,\n                        0,\n                        VariationType.Ordered, \n                        null,\n                        null,\n                        null,\n                        loopCount,\n                        false);\n\n                    break;\n                }\n\n                case 3:\n                {\n                    // Unknown!\n                    clipReader.ReadByte();\n\n                    // Event flags\n                    byte eventFlags = clipReader.ReadByte();\n                    bool playRelease = (eventFlags & 0x01) == 0x01;\n                    bool panEnabled = (eventFlags & 0x02) == 0x02;\n                    bool useCenterSpeaker = (eventFlags & 0x04) == 0x04;\n\n                    byte loopCount = clipReader.ReadByte();\n                    float panAngle = clipReader.ReadUInt16() / 100.0f;\n                    float panArc = clipReader.ReadUInt16() / 100.0f;\n\n                    // The number of tracks for the variations.\n                    ushort numTracks = clipReader.ReadUInt16();\n\n                    // Not sure what most of this is.\n                    byte moreFlags = clipReader.ReadByte();\n                    bool newWaveOnLoop = (moreFlags & 0x40) == 0x40;\n\n                    // The variation playlist type seems to be \n                    // stored in the bottom 4bits only.\n                    VariationType variationType = (VariationType)(moreFlags & 0x0F);\n\n                    // Unknown!\n                    clipReader.ReadBytes(5);\n\n                    // Read in the variation playlist.\n                    int[] waveBanks = new int[numTracks];\n                    int[] tracks = new int[numTracks];\n                    byte[] weights = new byte[numTracks];\n                            int totalWeights = 0;\n                    for (int j = 0; j < numTracks; j++)\n                    {\n                        tracks[j] = clipReader.ReadUInt16();\n                        waveBanks[j] = clipReader.ReadByte();\n                        byte minWeight = clipReader.ReadByte();\n                        byte maxWeight = clipReader.ReadByte();\n                        weights[j] = (byte)(maxWeight - minWeight);\n                        totalWeights += weights[j];\n                    }\n\n                    _events[i] = new PlayWaveEvent(\n                        this,\n                        timeStamp,\n                        randomOffset,\n                        soundBank, \n                        waveBanks, \n                        tracks,\n                        weights,\n                        totalWeights,\n                        variationType,\n                        null,\n                        null,\n                        null,\n                        loopCount,\n                        newWaveOnLoop);\n\n                    break;\n                }\n\n                case 4:\n                {\n                    // Unknown!\n                    clipReader.ReadByte();\n\n                    // Event flags\n                    byte eventFlags = clipReader.ReadByte();\n                    bool playRelease = (eventFlags & 0x01) == 0x01;\n                    bool panEnabled = (eventFlags & 0x02) == 0x02;\n                    bool useCenterSpeaker = (eventFlags & 0x04) == 0x04;\n\n                    int trackIndex = clipReader.ReadUInt16();\n                    int waveBankIndex = clipReader.ReadByte();\n                    byte loopCount = clipReader.ReadByte();\n                    float panAngle = clipReader.ReadUInt16() / 100.0f;\n                    float panArc = clipReader.ReadUInt16() / 100.0f;\n\n                    // Pitch variation range\n                    float minPitch = clipReader.ReadInt16() / 1000.0f;\n                    float maxPitch = clipReader.ReadInt16() / 1000.0f;\n\n                    // Volume variation range\n                    float minVolume = XactHelpers.ParseVolumeFromDecibels(clipReader.ReadByte());\n                    float maxVolume = XactHelpers.ParseVolumeFromDecibels(clipReader.ReadByte());\n\n                    // Filter variation\n                    float minFrequency = clipReader.ReadSingle();\n                    float maxFrequency = clipReader.ReadSingle();\n                    float minQ = clipReader.ReadSingle();\n                    float maxQ = clipReader.ReadSingle();\n\n                    // Unknown!\n                    clipReader.ReadByte();\n\n                    byte variationFlags = clipReader.ReadByte();\n\n                    // Enable pitch variation\n                    Vector2? pitchVar = null;\n                    if ((variationFlags & 0x10) == 0x10)\n                        pitchVar = new Vector2(minPitch, maxPitch - minPitch);\n\n                    // Enable volume variation\n                    Vector2? volumeVar = null;\n                    if ((variationFlags & 0x20) == 0x20)\n                        volumeVar = new Vector2(minVolume, maxVolume - minVolume);\n\n                    // Enable filter variation\n                    Vector4? filterVar = null;\n                    if ((variationFlags & 0x40) == 0x40)\n                        filterVar = new Vector4(minFrequency, maxFrequency - minFrequency, minQ, maxQ - minQ);\n\n                    _events[i] = new PlayWaveEvent(\n                        this,\n                        timeStamp,\n                        randomOffset,\n                        soundBank,\n                        new[] { waveBankIndex },\n                        new[] { trackIndex }, \n                        null,\n                        0,\n                        VariationType.Ordered,\n                        volumeVar,\n                        pitchVar, \n                        filterVar,\n                        loopCount,\n                        false);\n\n                    break;\n                }\n\n                case 6:\n                {\n                    // Unknown!\n                    clipReader.ReadByte();\n\n                    // Event flags\n                    byte eventFlags = clipReader.ReadByte();\n                    bool playRelease = (eventFlags & 0x01) == 0x01;\n                    bool panEnabled = (eventFlags & 0x02) == 0x02;\n                    bool useCenterSpeaker = (eventFlags & 0x04) == 0x04;\n\n                    byte loopCount = clipReader.ReadByte();\n                    float panAngle = clipReader.ReadUInt16() / 100.0f;\n                    float panArc = clipReader.ReadUInt16() / 100.0f;\n\n                    // Pitch variation range\n                    float minPitch = clipReader.ReadInt16() / 1000.0f;\n                    float maxPitch = clipReader.ReadInt16() / 1000.0f;\n\n                    // Volume variation range\n                    float minVolume = XactHelpers.ParseVolumeFromDecibels(clipReader.ReadByte());\n                    float maxVolume = XactHelpers.ParseVolumeFromDecibels(clipReader.ReadByte());\n\n                    // Filter variation range\n                    float minFrequency = clipReader.ReadSingle();\n                    float maxFrequency = clipReader.ReadSingle();\n                    float minQ = clipReader.ReadSingle();\n                    float maxQ = clipReader.ReadSingle();\n\n                    // Unknown!\n                    clipReader.ReadByte();\n\n                    // TODO: Still has unknown bits!\n                    byte variationFlags = clipReader.ReadByte();\n\n                    // Enable pitch variation\n                    Vector2? pitchVar = null;\n                    if ((variationFlags & 0x10) == 0x10)\n                        pitchVar = new Vector2(minPitch, maxPitch - minPitch);\n\n                    // Enable volume variation\n                    Vector2? volumeVar = null;\n                    if ((variationFlags & 0x20) == 0x20)\n                        volumeVar = new Vector2(minVolume, maxVolume - minVolume);\n\n                    // Enable filter variation\n                    Vector4? filterVar = null;\n                    if ((variationFlags & 0x40) == 0x40)\n                        filterVar = new Vector4(minFrequency, maxFrequency - minFrequency, minQ, maxQ - minQ);\n\n                    // The number of tracks for the variations.\n                    ushort numTracks = clipReader.ReadUInt16();\n\n                    // Not sure what most of this is.\n                    byte moreFlags = clipReader.ReadByte();\n                    bool newWaveOnLoop = (moreFlags & 0x40) == 0x40;\n\n                    // The variation playlist type seems to be \n                    // stored in the bottom 4bits only.\n                    VariationType variationType = (VariationType)(moreFlags & 0x0F);\n\n                    // Unknown!\n                    clipReader.ReadBytes(5);\n\n                    // Read in the variation playlist.\n                    int[] waveBanks = new int[numTracks];\n                    int[] tracks = new int[numTracks];\n                    byte[] weights = new byte[numTracks];\n                    int totalWeights = 0;\n                    for (int j = 0; j < numTracks; j++)\n                    {\n                        tracks[j] = clipReader.ReadUInt16();\n                        waveBanks[j] = clipReader.ReadByte();\n                        byte minWeight = clipReader.ReadByte();\n                        byte maxWeight = clipReader.ReadByte();\n                        weights[j] = (byte)(maxWeight - minWeight);\n                        totalWeights += weights[j];\n                    }\n\n                    _events[i] = new PlayWaveEvent(\n                        this,\n                        timeStamp,\n                        randomOffset,\n                        soundBank,\n                        waveBanks,\n                        tracks,\n                        weights,\n                        totalWeights,\n                        variationType,\n                        volumeVar,\n                        pitchVar, \n                        filterVar,\n                        loopCount,\n                        newWaveOnLoop);\n\n                    break;\n                }\n\n                case 7:\n                    // Pitch Event\n                    throw new NotImplementedException(\"Pitch event\");\n\n                case 8:\n                {\n                    // Unknown!\n                    clipReader.ReadBytes(2);\n\n                    // Event flags\n                    byte eventFlags = clipReader.ReadByte();\n                    bool isAdd = (eventFlags & 0x01) == 0x01;\n\n                    // The replacement or additive volume.\n                    float decibles = clipReader.ReadSingle() / 100.0f;\n                    float volume = XactHelpers.ParseVolumeFromDecibels(decibles + (isAdd ? volumeDb : 0));\n\n                    // Unknown!\n                    clipReader.ReadBytes(9);\n\n                    _events[i] = new VolumeEvent(   this, \n                                                    timeStamp, \n                                                    randomOffset, \n                                                    volume);\n                    break;\n                }\n\n                case 17:\n                    // Volume Repeat Event\n                    throw new NotImplementedException(\"Volume repeat event\");\n\n                case 9:\n                    // Marker Event\n                    throw new NotImplementedException(\"Marker event\");\n\n                default:\n                    throw new NotSupportedException(\"Unknown event \" + eventId);\n                }\n            }\n            \n            clipReader.BaseStream.Seek(oldPosition, SeekOrigin.Begin);\n#pragma warning restore 0219\n        }\n\n        internal void Update(float dt)\n        {\n            if (State != SoundState.Playing)\n                return;\n\n            _time += dt;\n\n            // Play the next event.\n            while (_nextEvent < _events.Length)\n            {\n                ClipEvent evt = _events[_nextEvent];\n                if (_time < evt.TimeStamp)\n                    break;\n\n                evt.Play();\n                ++_nextEvent;\n            }\n\n            // Update all the active events.\n            bool isPlaying = _nextEvent < _events.Length;\n            for (int i = 0; i < _nextEvent; i++)\n            {\n                ClipEvent evt = _events[i];\n                isPlaying |= evt.Update(dt);\n            }\n\n            // Update the state.\n            if (!isPlaying)\n                State = SoundState.Stopped;\n        }\n\n        internal void SetFade(float fadeInDuration, float fadeOutDuration)\n        {\n            foreach (ClipEvent evt in _events)\n            {\n                if (evt is PlayWaveEvent)\n                    evt.SetFade(fadeInDuration, fadeOutDuration);\n            }\n        }\n        \n        internal void UpdateState(float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor)\n        {\n            _volumeScale = volume;\n            float trackVolume = _volume * _volumeScale;\n\n            foreach (ClipEvent evt in _events)\n                evt.SetState(trackVolume, pitch, reverbMix, filterFrequency, filterQFactor);\n        }\n\n        public void Play()\n        {\n            _time = 0.0f;\n            _nextEvent = 0;\n            SetVolume(_defaultVolume);\n            State = SoundState.Playing; \n            Update(0);\n        }\n\n        public void Resume()\n        {\n            foreach (ClipEvent evt in _events)\n                evt.Resume();\n\n            State = SoundState.Playing;\n        }\n        \n        public void Stop()\n        {\n            foreach (ClipEvent evt in _events)\n                evt.Stop();\n\n            State = SoundState.Stopped;\n        }\n        \n        public void Pause()\n        {\n            foreach (ClipEvent evt in _events)\n                evt.Pause();\n\n            State = SoundState.Paused;\n        }\n\n        public SoundState State { get; private set; }\n\n        /// <summary>\n        /// Set the combined volume scale from the parent objects.\n        /// </summary>\n        /// <param name=\"volume\">The volume scale.</param>\n        public void SetVolumeScale(float volume)\n        {\n            _volumeScale = volume;\n            UpdateVolumes();\n        }\n\n        /// <summary>\n        /// Set the volume for the clip.\n        /// </summary>\n        /// <param name=\"volume\">The volume level.</param>\n        public void SetVolume(float volume)\n        {\n            _volume = volume;\n            UpdateVolumes();\n        }\n\n        private void UpdateVolumes()\n        {\n            float volume = _volume * _volumeScale;\n            foreach (ClipEvent evt in _events)\n                evt.SetTrackVolume(volume);\n        }\n\n        public void SetPan(float pan)\n        {\n            foreach (ClipEvent evt in _events)\n                evt.SetTrackPan(pan);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/XactHelpers.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Platform.Audio\n{\n    public static class XactHelpers\n    {\n        static internal readonly Random Random = new Random();\n\n        public static float ParseDecibels(byte decibles)\n        {\n            //lazy 4-param fitting:\n            //0xff 6.0\n            //0xca 2.0\n            //0xbf 1.0\n            //0xb4 0.0\n            //0x8f -4.0\n            //0x5a -12.0\n            //0x14 -38.0\n            //0x00 -96.0\n            const double a = -96.0;\n            const double b = 0.432254984608615;\n            const double c = 80.1748600297963;\n            const double d = 67.7385212334047;\n            float dB = (float)(((a - d) / (1 + (Math.Pow(decibles / c, b)))) + d);\n\n            return dB;\n        }\n\n        public static float ParseVolumeFromDecibels(byte decibles)\n        {\n            //lazy 4-param fitting:\n            //0xff 6.0\n            //0xca 2.0\n            //0xbf 1.0\n            //0xb4 0.0\n            //0x8f -4.0\n            //0x5a -12.0\n            //0x14 -38.0\n            //0x00 -96.0\n            const double a = -96.0;\n            const double b = 0.432254984608615;\n            const double c = 80.1748600297963;\n            const double d = 67.7385212334047;\n            float dB = (float)(((a - d) / (1 + (Math.Pow(decibles / c, b)))) + d);\n\n            return ParseVolumeFromDecibels(dB);\n        }\n\n        public static float ParseVolumeFromDecibels(float decibles)\n        {\n            // Convert from decibles to linear volume.\n            return (float)Math.Pow(10.0, decibles / 20.0);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Audio/Xact/XactSound.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Platform.Audio;\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    class XactSound\n    {\n        private readonly bool _complexSound;\n        private readonly XactClip[] _soundClips;\n        private readonly int _waveBankIndex;\n        private readonly int _trackIndex;\n        private readonly float _volume;\n        private readonly float _pitch;\n        private readonly uint _categoryID;\n        private readonly SoundBank _soundBank;\n        private readonly bool _useReverb;\n\n        private SoundEffectInstance _wave;\n        private bool _streaming;\n\n        private float _cueVolume = 1;\n        private float _cuePitch = 0;\n        private float _cueReverbMix = 0;\n        private float? _cueFilterFrequency;\n        private float? _cueFilterQFactor;\n\n        internal readonly int[] RpcCurves;\n        \n        public XactSound(SoundBank soundBank, int waveBankIndex, int trackIndex)\n        {\n            _complexSound = false;\n\n            _soundBank = soundBank;\n            _waveBankIndex = waveBankIndex;\n            _trackIndex = trackIndex;\n            RpcCurves = new int[0];\n        }\n\n        public XactSound(AudioEngine engine, SoundBank soundBank, BinaryReader soundReader)\n        {\n            _soundBank = soundBank;\n            \n            byte flags = soundReader.ReadByte();\n            _complexSound = (flags & 0x1) != 0;\n            bool hasRPCs = (flags & 0x0E) != 0;\n            bool hasDSPs = (flags & 0x10) != 0;\n\n            _categoryID = soundReader.ReadUInt16();\n            _volume = XactHelpers.ParseVolumeFromDecibels(soundReader.ReadByte());\n            _pitch = soundReader.ReadInt16() / 1000.0f;\n            soundReader.ReadByte(); //priority\n            soundReader.ReadUInt16(); // filter stuff?\n            \n            int numClips = 0;\n            if (_complexSound)\n                numClips = soundReader.ReadByte();\n            else \n            {\n                _trackIndex = soundReader.ReadUInt16();\n                _waveBankIndex = soundReader.ReadByte();\n            }\n\n            if (!hasRPCs)\n                RpcCurves = new int[0];\n            else\n            {\n                long current = soundReader.BaseStream.Position;\n\n                // This doesn't seem to be used... might have been there\n                // to allow for some future file format expansion.\n                ushort dataLength = soundReader.ReadUInt16();\n\n                byte numPresets = soundReader.ReadByte();\n                RpcCurves = new int[numPresets];\n                for (int i = 0; i < numPresets; i++)\n                    RpcCurves[i] = engine.GetRpcIndex(soundReader.ReadUInt32());\n\n                // Just in case seek to the right spot.\n                soundReader.BaseStream.Seek(current + dataLength, SeekOrigin.Begin);\n            }\n\n            if (!hasDSPs)\n                _useReverb = false;\n            else\n            {\n                // The file format for this seems to follow the pattern for \n                // the RPC curves above, but in this case XACT only supports\n                // a single effect...  Microsoft Reverb... so just set it.\n                _useReverb = true;\n                soundReader.BaseStream.Seek(7, SeekOrigin.Current);\n            }\n\n            if (_complexSound)\n            {\n                _soundClips = new XactClip[numClips];\n                for (int i = 0; i < numClips; i++)\n                    _soundClips[i] = new XactClip(soundBank, soundReader, _useReverb);\n            }\n\n            AudioCategory category = engine.Categories[_categoryID];\n            category.AddSound(this);\n        }\n\n        internal void SetFade(float fadeInTime, float fadeOutTime)\n        {\n            if (fadeInTime == 0.0f &&\n                fadeOutTime == 0.0f )\n                return;\n\n            if (_complexSound)\n            {\n                foreach (XactClip sound in _soundClips)\n                    sound.SetFade(fadeInTime, fadeOutTime);\n            }\n            else\n            {\n                // TODO:\n            }\n        }\n\n        public void Play(float volume, AudioEngine engine)\n        {\n            _cueVolume = volume;\n            AudioCategory category = engine.Categories[_categoryID];\n\n            int curInstances = category.GetPlayingInstanceCount();\n            if (curInstances >= category.maxInstances)\n            {\n                XactSound prevSound = category.GetOldestInstance();\n\n                if (prevSound != null)\n                {\n                    prevSound.SetFade(0.0f, category.fadeOut);\n                    prevSound.Stop(AudioStopOptions.Immediate);\n                    SetFade(category.fadeIn, 0.0f);\n                }\n            }\n\n            float finalVolume = _volume * _cueVolume * category._volume[0];\n            float finalPitch = _pitch + _cuePitch;\n            float finalMix = _useReverb ? _cueReverbMix : 0.0f;\n\n            if (_complexSound) \n            {\n                foreach (XactClip clip in _soundClips)\n                {\n                    clip.UpdateState(finalVolume, finalPitch, finalMix, _cueFilterFrequency, _cueFilterQFactor);\n                    clip.Play();\n                }\n            } \n            else \n            {\n                if (_wave != null)\n                {\n                    if (_streaming)\n                        _wave.Dispose();\n                    else\n                        _wave._strategy.IsXAct = false;\t\t\t\t\t\n                    _wave = null;\n                }\n\n                    _wave = _soundBank.GetSoundEffectInstance(_waveBankIndex, _trackIndex, out _streaming);\n\n                if (_wave == null)\n                {\n                    // We couldn't create a sound effect instance, most likely\n                    // because we've reached the sound pool limits.\n                    return;\n                }\n\n                _wave.Pitch = finalPitch;\n                _wave.Volume = finalVolume;\n                _wave.SetReverbMix(finalMix);\n                _wave.Play();\n            }\n        }\n\n        internal void Update(float dt)\n        {\n            if (_complexSound)\n            {\n                foreach (XactClip sound in _soundClips)\n                    sound.Update(dt);\n            }\n            else\n            {\n                if (_wave != null && _wave.State == SoundState.Stopped)\n                {\n                    if (_streaming)\n                        _wave.Dispose();\n                    else\n                        _wave._strategy.IsXAct = false;\t\t\t\t\t\n                    _wave = null;\n                }\n            }\n        }\n\n        internal void StopAll(AudioStopOptions options)\n        {\n            if (_complexSound)\n            {\n                foreach (XactClip clip in _soundClips)\n                    clip.Stop();\n            }\n            else\n            {\n                if (_wave != null)\n                {\n                    _wave.Stop();\n                    if (_streaming)\n                        _wave.Dispose();\n                    else\n                        _wave._strategy.IsXAct = false;\t\t\t\t\t\n                   _wave = null;\n                }\n            }\n        }\n        \n        public void Stop(AudioStopOptions options)\n        {\n            if (_complexSound)\n            {\n                foreach (XactClip sound in _soundClips)\n                    sound.Stop();\n            }\n            else\n            {\n                if (_wave != null)\n                {\n                    _wave.Stop();\n                    if (_streaming)\n                        _wave.Dispose();\n                    else\n                        _wave._strategy.IsXAct = false;\t\t\t\t\t\n                    _wave = null;\n                }\n            }\n        }\n        \n        public void Pause()\n        {\n            if (_complexSound)\n            {\n                foreach (XactClip sound in _soundClips)\n                {\n                    if (sound.State == SoundState.Playing)\n                        sound.Pause();\n                }\n            }\n            else\n            {\n                if (_wave != null && _wave.State == SoundState.Playing)\n                    _wave.Pause();\n            }\n        }\n                \n        public void Resume()\n        {\n            if (_complexSound)\n            {\n                foreach (XactClip sound in _soundClips)\n                {\n                    if (sound.State == SoundState.Paused)\n                        sound.Resume();\n                }\n            }\n            else\n            {\n                if (_wave != null && _wave.State == SoundState.Paused)\n                    _wave.Resume();\n            }\n        }\n\n        internal void UpdateCategoryVolume(float categoryVolume)\n        {\n            // The different volumes modulate each other.\n            float volume = _volume * _cueVolume * categoryVolume;\n\n            if (_complexSound)\n            {\n                foreach (XactClip clip in _soundClips)\n                    clip.SetVolumeScale(volume);\n            }\n            else\n            {\n                if (_wave != null)\n                    _wave.Volume = volume;\n            }\n        }\n\n        internal void UpdateState(AudioEngine engine, float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor)\n        {\n            _cueVolume = volume;\n            float finalVolume = _volume * _cueVolume * engine.Categories[_categoryID]._volume[0];\n\n            _cueReverbMix = reverbMix;\n            _cueFilterFrequency = filterFrequency;\n            _cueFilterQFactor = filterQFactor;\n\n            _cuePitch = pitch;\n            float finalPitch = _pitch + _cuePitch;\n\n            if (_complexSound)\n            {\n                foreach (XactClip clip in _soundClips)\n                    clip.UpdateState(finalVolume, finalPitch, _useReverb ? _cueReverbMix : 0.0f, _cueFilterFrequency, _cueFilterQFactor);\n            }\n            else if (_wave != null)\n            {\n                _wave.SetReverbMix(_useReverb ? _cueReverbMix : 0.0f);\n                _wave.Pitch = finalPitch;\n                _wave.Volume = finalVolume;\n            }\n        }\n\n        internal void SetCuePan(float pan)\n        {\n            if (_complexSound)\n            {\n                foreach (XactClip clip in _soundClips)\n                    clip.SetPan(pan);\n            }\n            else\n            {\n                if (_wave != null)\n                    _wave.Pan = pan;\n            }\n        }\n\n        public bool Playing \n        {\n            get \n            {\n                if (_complexSound)\n                {\n                    foreach (XactClip clip in _soundClips)\n                        if (clip.State == SoundState.Playing)\n                            return true;\n\n                    return false;\n                } \n\n                return _wave != null && _wave.State == SoundState.Playing;\n            }\n        }\n\n        public bool Stopped\n        {\n            get\n            {\n                if (_complexSound)\n                {\n                    bool notStopped = false;\n\n                    // All clips must be stopped for the sound to be stopped.\n                    foreach (XactClip clip in _soundClips)\n                    {\n                        if (clip.State != SoundState.Stopped)\n                            notStopped = true;\n                    }\n\n                    return !notStopped;\n                }\n\n                // We null the wave when it it stopped.\n                return _wave == null;\n            }\n        }\n\n        public bool IsPaused\n        {\n            get\n            {\n                if (_complexSound) \n                {\n                    foreach (XactClip clip in _soundClips)\n                        if (clip.State == SoundState.Paused) \n                            return true;\n\n                    return false;\n                }\n\n                return _wave != null && _wave.State == SoundState.Paused;\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Content/SoundEffectReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Audio;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class SoundEffectReader : ContentTypeReader<SoundEffect>\n    {\n        protected override SoundEffect Read(ContentReader input, SoundEffect existingInstance)\n        {         \n            // XNB format for SoundEffect...\n            //            \n            // Byte [format size]\tFormat\tWAVEFORMATEX structure\n            // UInt32\tData size\t\n            // Byte [data size]\tData\tAudio waveform data\n            // Int32\tLoop start\tIn bytes (start must be format block aligned)\n            // Int32\tLoop length\tIn bytes (length must be format block aligned)\n            // Int32\tDuration\tIn milliseconds\n\n            // The header containss the WAVEFORMATEX header structure\n            // defined as the following...\n            //\n            //  WORD  wFormatTag;       // byte[0]  +2\n            //  WORD  nChannels;        // byte[2]  +2\n            //  DWORD nSamplesPerSec;   // byte[4]  +4\n            //  DWORD nAvgBytesPerSec;  // byte[8]  +4\n            //  WORD  nBlockAlign;      // byte[12] +2\n            //  WORD  wBitsPerSample;   // byte[14] +2\n            //  WORD  cbSize;           // byte[16] +2\n            //\n            // We let the sound effect deal with parsing this based\n            // on what format the audio data actually is.\n\n            int headerSize = input.ReadInt32();\n            byte[] header = input.ReadBytes(headerSize);\n\n            // Read the audio data buffer.\n            int dataSize = input.ReadInt32();\n            byte[] data = input.BufferPool.Get(dataSize);\n            input.Read(data, 0, dataSize);\n\n            int loopStart = input.ReadInt32();\n            int loopLength = input.ReadInt32();\n            int durationMs = input.ReadInt32();\n\n            // Create the effect.\n            SoundEffect effect = existingInstance ?? new SoundEffect(header, data, dataSize, durationMs, loopStart, loopLength);\n\n            // Store the original asset name for debugging later.\n            effect.Name = input.AssetName;\n\n            input.BufferPool.Return(data);\n\n            return effect;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/ILLink.Descriptors.xml",
    "content": "<linker>\n  <assembly fullname=\"Xna.Framework.Audio\" >\n    <type fullname=\"Microsoft.Xna.Framework.Content.SoundEffectReader\" preserve=\"all\" />\n  </assembly>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/NamespaceDoc.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Audio\n{\n    /// <summary>\n    /// Support for playing sound effects and XACT audio.\n    /// </summary>\n    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    class NamespaceDoc\n    {\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Properties/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n[assembly:InternalsVisibleTo(\"Kni.Tests\")]\n\n"
  },
  {
    "path": "src/Xna.Framework.Audio/Xna.Framework.Audio.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Audio\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{3F81F76D-F0F3-44FE-A256-40AF153C33F7}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Audio</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Audio</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Audio framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Audio</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"NamespaceDoc.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Content\\SoundEffectReader.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Utilities\\MsAdpcmDecoder.cs\" />\n    <Compile Include=\"Audio\\AudioChannels.cs\" />\n    <Compile Include=\"Audio\\AudioEmitter.cs\" />\n    <Compile Include=\"Audio\\AudioFactory.cs\" />\n    <Compile Include=\"Audio\\AudioListener.cs\" />\n    <Compile Include=\"Audio\\AudioService.cs\" />\n    <Compile Include=\"Audio\\AudioService.InstancePool.cs\" />\n    <Compile Include=\"Audio\\AudioService.Microphones.cs\" />\n    <Compile Include=\"Audio\\AudioServiceStrategy.cs\" />\n    <Compile Include=\"Audio\\DynamicSoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\InstancePlayLimitException.cs\" />\n    <Compile Include=\"Audio\\Microphone.cs\" />\n    <Compile Include=\"Audio\\NoAudioHardwareException.cs\" />\n    <Compile Include=\"Audio\\NoMicrophoneConnectedException.cs\" />\n    <Compile Include=\"Audio\\SoundEffect.cs\" />\n    <Compile Include=\"Audio\\SoundEffectInstance.cs\" />\n    <Compile Include=\"Audio\\SoundState.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Xact\\DspParameter.cs\" />\n    <Compile Include=\"Audio\\Xact\\FilterMode.cs\" />\n    <Compile Include=\"Audio\\Xact\\MiniFormatTag.cs\" />\n    <Compile Include=\"Audio\\Xact\\ReverbSettings.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Audio\\Xact\\AudioCategory.cs\" />\n    <Compile Include=\"Audio\\Xact\\AudioEngine.cs\" />\n    <Compile Include=\"Audio\\Xact\\AudioStopOptions.cs\" />\n    <Compile Include=\"Audio\\Xact\\ClipEvent.cs\" />\n    <Compile Include=\"Audio\\Xact\\CrossfadeType.cs\" />\n    <Compile Include=\"Audio\\Xact\\Cue.cs\" />\n    <Compile Include=\"Audio\\Xact\\MaxInstanceBehavior.cs\" />\n    <Compile Include=\"Audio\\Xact\\PlayWaveEvent.cs\" />\n    <Compile Include=\"Audio\\Xact\\RpcCurve.cs\" />\n    <Compile Include=\"Audio\\Xact\\RpcParameter.cs\" />\n    <Compile Include=\"Audio\\Xact\\RpcPoint.cs\" />\n    <Compile Include=\"Audio\\Xact\\RpcPointType.cs\" />\n    <Compile Include=\"Audio\\Xact\\RpcVariable.cs\" />\n    <Compile Include=\"Audio\\Xact\\SoundBank.cs\" />\n    <Compile Include=\"Audio\\Xact\\VolumeEvent.cs\" />\n    <Compile Include=\"Audio\\Xact\\WaveBank.cs\" />\n    <Compile Include=\"Audio\\Xact\\XactClip.cs\" />\n    <Compile Include=\"Audio\\Xact\\XactHelpers.cs\" />\n    <Compile Include=\"Audio\\Xact\\XactSound.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentLoadException.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    /// <summary>\n    /// The exception that's thrown when an error occurs when loading content.\n    /// </summary>\n    public class ContentLoadException : Exception\n    {\n        /// <summary>\n        /// Create a new <see cref=\"ContentLoadException\"/> instance.\n        /// </summary>\n        public ContentLoadException() : base()\n        {\n        }\n\n        /// <summary>\n        /// Create a new <see cref=\"ContentLoadException\"/> instance with the specified message.\n        /// </summary>\n        /// <param name=\"message\">The message of the exception.</param>\n        public ContentLoadException(string message) : base(message)\n        {\n        }\n\n        /// <summary>\n        /// Create a new <see cref=\"ContentLoadException\"/> instance with the specified message and inner exception.\n        /// </summary>\n        /// <param name=\"message\">The message of the exception.</param>\n        /// <param name=\"innerException\">The inner exception.</param>\n        public ContentLoadException(string message, Exception innerException) : base(message,innerException)\n        {\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentManager.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing Microsoft.Xna.Platform;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    public class ContentManager : IDisposable\n    {\n        const byte ContentFlagCompressedLzx = 0x80;\n        const byte ContentFlagCompressedLz4 = 0x40;\n        const byte ContentFlagCompressedExt = 0xC0;\n        const byte ContentFlagHiDef = 0x01;\n\n        private readonly object SyncHandle = new object();\n\n        private string _rootDirectory = string.Empty;\n        private IServiceProvider _serviceProvider;\n        private Dictionary<string, object> _loadedAssets = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);\n        private HashSet<IDisposable> _disposableAssets = new HashSet<IDisposable>();\n        private bool _isDisposed;\n\n        private static readonly List<char> _targetPlatformIdentifiers = new List<char>()\n        {\n            // XNA content identifiers\n            'w', // Windows (XNA & DirectX)\n            'x', // Xbox360 (XNA)\n            'm', // WindowsPhone7.0 (XNA)\n\n            // content identifiers\n            'i', // iOS\n            'a', // Android\n            'd', // DesktopGL\n            'X', // MacOSX\n            'W', // WindowsStoreApp\n            'n', // NativeClient\n            'r', // RaspberryPi\n            'P', // PlayStation4\n            '5', // PlayStation5\n            'O', // XboxOne\n            'S', // Nintendo Switch\n            'b', // BlazorGL\n\n            // NOTE: There are additional idenfiers for consoles that \n            // are not defined in this repository.  Be sure to ask the\n            // console port maintainers to ensure no collisions occur.\n\n            \n            // Legacy identifiers... these could be reused in the\n            // future if we feel enough time has passed.\n\n            'p', // PlayStationMobile\n            'v', // PSVita\n            'g', // Windows (OpenGL)\n            'l', // Linux\n            'M', // WindowsPhone8\n            'G', // Google Stadia\n        };\n\n        public string RootDirectory\n        {\n            get { return _rootDirectory; }\n            set { _rootDirectory = value; }\n        }\n\n        public IServiceProvider ServiceProvider\n        {\n            get { return this._serviceProvider; }\n        }\n\n\n        public ContentManager(IServiceProvider serviceProvider)\n        {\n            if (serviceProvider == null)\n                throw new ArgumentNullException(\"serviceProvider\");\n\n            this._serviceProvider = serviceProvider;\n        }\n\n        public ContentManager(IServiceProvider serviceProvider, string rootDirectory)\n        {\n            if (serviceProvider == null)\n                throw new ArgumentNullException(\"serviceProvider\");\n            if (rootDirectory == null)\n                throw new ArgumentNullException(\"rootDirectory\");\n\n            this.RootDirectory = rootDirectory;\n            this._serviceProvider = serviceProvider;\n        }\n\n\n\n        public virtual T LoadLocalized<T> (string assetName)\n        {\n            string [] cultureNames =\n            {\n                CultureInfo.CurrentCulture.Name,                        // eg. \"en-US\"\n                CultureInfo.CurrentCulture.TwoLetterISOLanguageName     // eg. \"en\"\n            };\n\n            // Look first for a specialized language-country version of the asset,\n            // then if that fails, loop back around to see if we can find one that\n            // specifies just the language without the country part.\n            foreach (string cultureName in cultureNames)\n            {\n                string localizedAssetName = assetName + '.' + cultureName;\n\n                try\n                {\n                    return Load<T>(localizedAssetName);\n                }\n                catch (ContentLoadException) { /* ignore */ }\n            }\n\n            // If we didn't find any localized asset, fall back to the default name.\n            return Load<T>(assetName);\n        }\n\n        public virtual T Load<T>(string assetName)\n        {\n            if (string.IsNullOrEmpty(assetName))\n                throw new ArgumentNullException(\"assetName\");\n            if (_isDisposed)\n                throw new ObjectDisposedException(\"ContentManager\");\n\n            T result = default(T);\n            \n            // On some platforms, name and slash direction matter.\n            // We store the asset by a /-seperating key rather than how the\n            // path to the file was passed to us to avoid\n            // loading \"content/asset1.xnb\" and \"content\\\\ASSET1.xnb\" as if they were two \n            // different files. This matches stock XNA behavior.\n            // The dictionary will ignore case differences\n            string key = assetName.Replace('\\\\', '/');\n\n            lock (this.SyncHandle)\n            {\n                // Check for a previously loaded asset first\n                object asset = null;\n                if (_loadedAssets.TryGetValue(key, out asset))\n                {\n                    if (asset is T)\n                        return (T)asset;\n                }\n                else\n                {\n                    _loadedAssets[key] = null;\n                }\n            }\n\n            // Load the asset.\n            result = ReadAsset<T>(assetName, this.RecordDisposableCallback);\n\n            lock (this.SyncHandle)\n            {\n                _loadedAssets[key] = result;\n            }\n\n            return result;\n        }\n        \n        protected virtual Stream OpenStream(string assetName)\n        {\n            try\n            {\n                string assetPath = Path.Combine(RootDirectory, assetName) + \".xnb\";\n\n                // This is primarily for editor support. \n                // Setting the RootDirectory to an absolute path is useful in editor\n                // situations, but TitleContainer can ONLY be passed relative paths.                \n                if (Path.IsPathRooted(assetPath))\n                    return File.OpenRead(assetPath);\n                \n                return TitleContainer.OpenStream(assetPath);\n            }\n            catch (FileNotFoundException fileNotFoundex)\n            {\n                throw new ContentLoadException(\"The content file was not found for asset '\" + assetName + \"'.\", fileNotFoundex);\n            }\n            catch (DirectoryNotFoundException directoryNotFoundex)\n            {\n                throw new ContentLoadException(\"The directory was not found for asset '\" + assetName + \"'.\", directoryNotFoundex);\n            }\n            catch (Exception ex)\n            {\n                throw new ContentLoadException(\"Opening stream error for asset '\" + assetName + \"'.\", ex);\n            }\n        }\n\n        protected T ReadAsset<T>(string assetName, Action<IDisposable> recordDisposableObject)\n        {\n            if (string.IsNullOrEmpty(assetName))\n                throw new ArgumentNullException(\"assetName\");\n            if (_isDisposed)\n                throw new ObjectDisposedException(\"ContentManager\");\n\n            if (recordDisposableObject == null)\n                recordDisposableObject = this.RecordDisposableCallback;\n\n            // Try to load as XNB file\n            Stream stream = OpenStream(assetName);\n            using (BinaryReader xnbReader = new BinaryReader(stream))\n            {\n                // The first 4 bytes should be the \"XNB\" header. i use that to detect an invalid file\n                byte x = xnbReader.ReadByte();\n                byte n = xnbReader.ReadByte();\n                byte b = xnbReader.ReadByte();\n                byte platform = xnbReader.ReadByte();\n\n                if (x != 'X' || n != 'N' || b != 'B')\n                    throw new ContentLoadException(\"Asset does not appear to be a valid XNB file.\");\n\n                if (!_targetPlatformIdentifiers.Contains((char)platform))\n                    throw new ContentLoadException(\"Asset does not appear to target a known platform. Platform Identifier: '\" + (char)platform+\"'.\");\n\n                byte version = xnbReader.ReadByte();\n\n                if (version != 5 && version != 4)\n                    throw new ContentLoadException(\"Invalid XNB version\");\n\n                byte flags = xnbReader.ReadByte();\n\n                bool isCompressed = (flags & ContentFlagCompressedExt) != 0;\n\n                bool isHiDef = (flags & ContentFlagHiDef) != 0;\n\n                // The next int32 is the length of the XNB file\n                uint compressedFileSize = xnbReader.ReadUInt32();\n\n                if (isCompressed)\n                {\n                    // Decompress the xnb\n\n                    uint decompressedDataSize = xnbReader.ReadUInt32();\n                    uint compressedDataSize = compressedFileSize - 14;\n\n                    Stream decompressedStream = null;\n\n                    bool isCompressedLzx = (flags & ContentFlagCompressedExt) == ContentFlagCompressedLzx;\n                    bool isCompressedLz4 = (flags & ContentFlagCompressedExt) == ContentFlagCompressedLz4;\n                    bool isCompressedExt = (flags & ContentFlagCompressedExt) == ContentFlagCompressedExt;\n\n                    if (isCompressedExt)\n                    {\n                        // read Ext compression header\n                        byte reserved = xnbReader.ReadByte(); compressedDataSize -= 1;\n                        if (reserved != 0)\n                            throw new InvalidOperationException(\"Invalid compression header.\");\n                        byte compression = xnbReader.ReadByte(); compressedDataSize -= 1;\n\n                        switch (compression)\n                        {\n                            case 0x02: // LX4\n                                {\n                                    decompressedStream = new Lz4DecoderStream(stream);\n                                }\n                                break;\n\n                            case 0x03: // Brotli\n                                {\n                                    decompressedStream = ((IPlatformTitleContainer)TitleContainer.Current).GetStrategy<TitleContainerStrategy>().DecompressBrotliStream(stream, compressedDataSize, decompressedDataSize);\n                                }\n                                break;\n\n                            default:\n                                throw new NotImplementedException(\"ContentCompression \" + compression + \" not implemented.\");\n                        }\n                    }\n                    else if (isCompressedLzx)\n                    {\n                        // LzxDecoderStream require a seekable stream.\n                        // Handle the case of Android's BufferedStream assets.\n                        Stream compressedStream = stream;\n                        if (stream is BufferedStream && !stream.CanSeek)\n                        {\n                            compressedStream = new MemoryStream((int)compressedDataSize);\n                            stream.CopyTo(compressedStream);\n                            compressedStream.Seek(0, SeekOrigin.Begin);\n                        }\n\n                        decompressedStream = new LzxDecoderStream(compressedStream, (int)decompressedDataSize, (int)compressedDataSize);\n                    }\n                    else if (isCompressedLz4)\n                    {\n                        decompressedStream = new Lz4DecoderStream(stream);\n                    }\n\n                    // create reader from decompressedStream\n                    using (ContentReader reader = new ContentReader(this, decompressedStream, assetName, version, recordDisposableObject))\n                    {\n                        T result = reader.ReadAsset<T>();\n                        if (result == null)\n                            throw new ContentLoadException(\"Could not load \" + assetName + \" asset!\");\n                        return result;\n                    }\n                }\n                else // no compression\n                {\n                    using (ContentReader reader = new ContentReader(this, stream, assetName, version, recordDisposableObject))\n                    {\n                        T result = reader.ReadAsset<T>();\n                        if (result == null)\n                            throw new ContentLoadException(\"Could not load \" + assetName + \" asset!\");\n                        return result;\n                    }\n                }\n            }\n        }\n\n        private void RecordDisposableCallback(IDisposable disposable)\n        {\n            Debug.Assert(disposable != null, \"The disposable is null.\");\n\n            lock (this.SyncHandle)\n            {\n                _disposableAssets.Add(disposable);\n            }\n        }\n\n        public virtual void Unload()\n        {\n            lock (this.SyncHandle)\n            {\n                foreach (IDisposable disposable in _disposableAssets)\n                {\n                    if (disposable != null)\n                        disposable.Dispose();\n                }\n\n                _disposableAssets.Clear();\n                _loadedAssets.Clear();\n            }\n        }\n\n\n        #region IDisposable Implementation\n        ~ContentManager()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (_isDisposed)\n                return;\n\n            if (disposing)\n            {\n                Unload();\n            }\n\n            _isDisposed = true;\n        }\n        #endregion IDisposable Implementation\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReader.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    public sealed class ContentReader : BinaryReader\n    {\n        private ContentManager _contentManager;\n        private Action<IDisposable> _recordDisposableObject;\n        \n        private ContentTypeReaderManager _typeReaderManager;\n        private string _assetName;\n        private List<KeyValuePair<int, Action<object>>> _sharedResourceFixups;\n        private ContentTypeReader[] _typeReaders;\n        internal int _version;\n\n        internal ContentTypeReader[] TypeReaders\n        {\n            get { return _typeReaders; }\n        }\n\n        internal ContentReader(ContentManager manager, Stream stream, string assetName, int version, Action<IDisposable> recordDisposableObject)\n            : base(stream)\n        {\n            this._recordDisposableObject = recordDisposableObject;\n            this._contentManager = manager;\n            this._assetName = assetName;\n            this._version = version;\n        }\n\n        public ContentManager ContentManager\n        {\n            get { return _contentManager; }\n        }\n        \n        public string AssetName\n        {\n            get { return _assetName; }\n        }\n\n        public ContentBufferPool BufferPool\n        {\n            get { return ContentBufferPool.Current; }\n        }\n\n        internal T ReadAsset<T>()\n        {\n            int typeReaderCount = base.Read7BitEncodedInt();\n            _typeReaderManager = new ContentTypeReaderManager();\n            _typeReaders = _typeReaderManager.LoadAssetReaders(this, typeReaderCount);\n\n            int sharedResourceCount = base.Read7BitEncodedInt();\n            _sharedResourceFixups = new List<KeyValuePair<int, Action<object>>>();\n\n            // Read primary object\n            T result = ReadObject<T>();\n\n            // Read shared resources\n            if (sharedResourceCount > 0)\n                ReadSharedResources(sharedResourceCount);\n            \n            return result;\n        }\n\n        internal void ReadSharedResources(int sharedResourceCount)\n        {\n            object[] sharedResources = new object[sharedResourceCount];\n\n            for (int i = 0; i < sharedResourceCount; ++i)\n            {\n                object existingInstance = null;\n                sharedResources[i] = ReadObject<object>(existingInstance);\n            }\n\n            // Fixup shared resources by calling each registered action\n            for (int i = 0; i < _sharedResourceFixups.Count; ++i)\n            {\n                KeyValuePair<int, Action<object>> fixup = _sharedResourceFixups[i];\n                object sharedResource = sharedResources[fixup.Key];\n                Action<object> fixupAction = fixup.Value;\n                fixupAction(sharedResource);\n            }\n        }\n\n        public T ReadExternalReference<T>()\n        {\n            string externalReference = ReadString();\n\n            if (!String.IsNullOrEmpty(externalReference))\n            {\n                return _contentManager.Load<T>(FileHelpers.ResolveRelativePath(_assetName, externalReference));\n            }\n\n            return default(T);\n        }\n\n        public T ReadObject<T>()\n        {\n            return ReadObject<T>(default(T));\n        }\n\n        public T ReadObject<T>(ContentTypeReader typeReader)\n        {\n            T result;\n\n            ContentTypeReader<T> typeReaderT = typeReader as ContentTypeReader<T>;\n            if (typeReaderT != null)\n                result = typeReaderT.Read(this, default(T));\n            else\n                result = (T)typeReader.Read(this, default(T));\n\n            if (result is IDisposable disposable)\n                _recordDisposableObject(disposable);\n\n            return result;\n        }\n\n        public T ReadObject<T>(T existingInstance)\n        {\n            int typeReaderIndex = base.Read7BitEncodedInt();\n            if (typeReaderIndex == 0)\n                return existingInstance;\n\n            if (typeReaderIndex > _typeReaders.Length)\n                throw new ContentLoadException(\"Incorrect type reader index found!\");\n\n            ContentTypeReader typeReader = _typeReaders[typeReaderIndex - 1];\n            T result = (T)typeReader.Read(this, existingInstance);\n\n            if (result is IDisposable disposable)\n                _recordDisposableObject(disposable);\n\n            return result;\n        }\n\n        public T ReadObject<T>(ContentTypeReader typeReader, T existingInstance)\n        {\n            if (!ReflectionHelpers.IsValueType(typeReader.TargetType))\n                return ReadObject(existingInstance);\n\n            T result = (T)typeReader.Read(this, existingInstance);\n\n            if (result is IDisposable disposable)\n                _recordDisposableObject(disposable);\n\n            return result;\n        }\n\n\n        public T ReadRawObject<T>()\n        {\n            return (T)ReadRawObject<T> (default(T));\n        }\n\n        public T ReadRawObject<T>(ContentTypeReader typeReader)\n        {\n            return (T)ReadRawObject<T>(typeReader, default(T));\n        }\n\n        public T ReadRawObject<T>(T existingInstance)\n        {\n            Type objectType = typeof(T);\n            foreach(ContentTypeReader typeReader in _typeReaders)\n            {\n                if(typeReader.TargetType == objectType)\n                    return (T)ReadRawObject<T>(typeReader,existingInstance);\n            }\n            throw new NotSupportedException();\n        }\n\n        public T ReadRawObject<T>(ContentTypeReader typeReader, T existingInstance)\n        {\n            return (T)typeReader.Read(this, existingInstance);\n        }\n\n        public void ReadSharedResource<T>(Action<T> fixup)\n        {\n            int index = base.Read7BitEncodedInt();\n            if (index > 0)\n            {\n                _sharedResourceFixups.Add(new KeyValuePair<int, Action<object>>(index - 1, delegate(object v)\n                    {\n                        if (!(v is T))\n                        {\n                            throw new ContentLoadException(String.Format(\"Error loading shared resource. Expected type {0}, received type {1}\", typeof(T).Name, v.GetType().Name));\n                        }\n                        fixup((T)v);\n                    }));\n            }\n        }\n\n        internal new int Read7BitEncodedInt()\n        {\n            return base.Read7BitEncodedInt();\n        }\n\n        public Matrix ReadMatrix()\n        {\n            Matrix result;\n            result.M11 = ReadSingle();\n            result.M12 = ReadSingle();\n            result.M13 = ReadSingle();\n            result.M14 = ReadSingle();\n            result.M21 = ReadSingle();\n            result.M22 = ReadSingle();\n            result.M23 = ReadSingle();\n            result.M24 = ReadSingle();\n            result.M31 = ReadSingle();\n            result.M32 = ReadSingle();\n            result.M33 = ReadSingle();\n            result.M34 = ReadSingle();\n            result.M41 = ReadSingle();\n            result.M42 = ReadSingle();\n            result.M43 = ReadSingle();\n            result.M44 = ReadSingle();\n            return result;\n        }\n\n        internal Complex ReadComplex()\n        {\n            Complex result;\n            result.R = ReadSingle();\n            result.i = ReadSingle();\n            return result;\n        }\n\n        public Quaternion ReadQuaternion()\n        {\n            Quaternion result;\n            result.X = ReadSingle();\n            result.Y = ReadSingle();\n            result.Z = ReadSingle();\n            result.W = ReadSingle();\n            return result;\n        }\n\n        public Vector2 ReadVector2()\n        {\n            Vector2 result;\n            result.X = ReadSingle();\n            result.Y = ReadSingle();\n            return result;\n        }\n\n        public Vector3 ReadVector3()\n        {\n            Vector3 result;\n            result.X = ReadSingle();\n            result.Y = ReadSingle();\n            result.Z = ReadSingle();\n            return result;\n        }\n\n        public Vector4 ReadVector4()\n        {\n            Vector4 result;\n            result.X = ReadSingle();\n            result.Y = ReadSingle();\n            result.Z = ReadSingle();\n            result.W = ReadSingle();\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/ArrayReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class ArrayReader<T> : ContentTypeReader<T[]>\n    {\n        ContentTypeReader _elementReader;\n\n        protected internal override void Initialize(ContentTypeReaderManager manager)\n        {\n            Type readerType = typeof(T);\n            _elementReader = manager.GetTypeReader(readerType);\n        }\n\n        protected internal override T[] Read(ContentReader input, T[] existingInstance)\n        {\n            uint count = input.ReadUInt32();\n            T[] array = existingInstance;\n            if (array == null)\n                array = new T[count];\n\n            if (ReflectionHelpers.IsValueType(typeof(T)))\n            {\n                for (uint i = 0; i < count; i++)\n                {\n                    array[i] = input.ReadObject<T>(_elementReader);\n                }\n            }\n            else\n            {\n                for (uint i = 0; i < count; i++)\n                {\n                    int readerType = input.Read7BitEncodedInt();\n                    array[i] = readerType > 0 ? input.ReadObject<T>(input.TypeReaders[readerType - 1]) : default(T);\n                }\n            }\n            return array;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/BooleanReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class BooleanReader : ContentTypeReader<bool>\n    {\n        protected internal override bool Read(ContentReader input, bool existingInstance)\n        {\n            return input.ReadBoolean();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/BoundingBoxReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    class BoundingBoxReader : ContentTypeReader<BoundingBox>\n    {\n        protected internal override BoundingBox Read(ContentReader input, BoundingBox existingInstance)\n        {\n            Vector3 min = input.ReadVector3();\n            Vector3 max = input.ReadVector3();\n\n            BoundingBox result = new BoundingBox(min, max);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/BoundingFrustumReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class BoundingFrustumReader : ContentTypeReader<BoundingFrustum>\n    {\n        protected internal override BoundingFrustum Read(ContentReader input, BoundingFrustum existingInstance)\n        {\n            return new BoundingFrustum(input.ReadMatrix());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/BoundingSphereReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class BoundingSphereReader : ContentTypeReader<BoundingSphere>\n    {\n        protected internal override BoundingSphere Read(ContentReader input, BoundingSphere existingInstance)\n        {\n            Vector3 center = input.ReadVector3();\n            float radius = input.ReadSingle();\n            return new BoundingSphere(center, radius);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/ByteReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class ByteReader : ContentTypeReader<byte>\n    {\n        protected internal override byte Read(ContentReader input, byte existingInstance)\n        {\n            return input.ReadByte();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/CharReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class CharReader : ContentTypeReader<char>\n    {\n        protected internal override char Read(ContentReader input, char existingInstance)\n        {\n            return input.ReadChar();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/ComplexReader.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class ComplexReader : ContentTypeReader<Complex>\n    {\n        protected internal override Complex Read(ContentReader input, Complex existingInstance)\n        {\n            return input.ReadComplex();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/CurveReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class CurveReader : ContentTypeReader<Curve>\n    {\n        protected internal override Curve Read(ContentReader input, Curve existingInstance)\n        {\n            Curve curve = existingInstance;\n            if (curve == null)\n            {\n                curve = new Curve();\n            }         \n            \n            curve.PreLoop = (CurveLoopType)input.ReadInt32();\n            curve.PostLoop = (CurveLoopType)input.ReadInt32();\n            int count = input.ReadInt32();\n            \n            for (int i = 0; i < count; i++)\n            {\n                float position = input.ReadSingle();\n                float value = input.ReadSingle();\n                float tangentIn = input.ReadSingle();\n                float tangentOut = input.ReadSingle();\n                CurveContinuity continuity = (CurveContinuity)input.ReadInt32();\n                curve.Keys.Add(new CurveKey(position, value, tangentIn, tangentOut, continuity));\n            }\t\t\n            return curve;         \n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/DateTimeReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class DateTimeReader : ContentTypeReader<DateTime>\n    {\n        protected internal override DateTime Read(ContentReader input, DateTime existingInstance)\n        {\n            UInt64 value = input.ReadUInt64();\n            UInt64 mask = (UInt64)3 << 62;\n            long ticks = (long)(value & ~mask);\n            DateTimeKind kind = (DateTimeKind)((value >> 62) & 3);\n            return new DateTime(ticks, kind);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/DecimalReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class DecimalReader : ContentTypeReader<decimal>\n    {\n        protected internal override decimal Read(ContentReader input, decimal existingInstance)\n        {\n            return input.ReadDecimal();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/DictionaryReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n\n    internal class DictionaryReader<TKey, TValue> : ContentTypeReader<Dictionary<TKey, TValue>>\n    {\n        ContentTypeReader _keyReader;\n        ContentTypeReader _valueReader;\n        \n        Type _keyType;\n        Type _valueType;\n        \n        protected internal override void Initialize(ContentTypeReaderManager manager)\n        {\n            _keyType = typeof(TKey);\n            _valueType = typeof(TValue);\n            \n            _keyReader = manager.GetTypeReader(_keyType);\n            _valueReader = manager.GetTypeReader(_valueType);\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return true; }\n        }\n\n        protected internal override Dictionary<TKey, TValue> Read(ContentReader input, Dictionary<TKey, TValue> existingInstance)\n        {\n            int count = input.ReadInt32();\n\n            Dictionary<TKey, TValue> dictionary = existingInstance;\n            if (dictionary == null)\n                dictionary = new Dictionary<TKey, TValue>(count);\n            else\n                dictionary.Clear();\n\n            if (ReflectionHelpers.IsValueType(_keyType))\n            {\n                for (int i = 0; i < count; i++)\n                {\n                    TKey key = input.ReadObject<TKey>(_keyReader);\n\n                    TValue value;\n                    if (ReflectionHelpers.IsValueType(_valueType))\n                    {\n                        value = input.ReadObject<TValue>(_valueReader);\n                    }\n                    else\n                    {\n                        int valueReaderType = input.Read7BitEncodedInt();\n                        value = (valueReaderType) > 0\n                              ? input.ReadObject<TValue>(input.TypeReaders[valueReaderType-1])\n                              : default(TValue);\n                    }\n\n                    dictionary.Add(key, value);\n                }\n            }\n            else\n            {\n                for (int i = 0; i < count; i++)\n                {\n                    int keyReaderType = input.Read7BitEncodedInt();\n                    TKey key = (keyReaderType > 0)\n                             ? input.ReadObject<TKey>(input.TypeReaders[keyReaderType - 1])\n                             : default(TKey);\n\n                    TValue value;\n                    if (ReflectionHelpers.IsValueType(_valueType))\n                    {\n                        value = input.ReadObject<TValue>(_valueReader);\n                    }\n                    else\n                    {\n                        int valueReaderType = input.Read7BitEncodedInt();\n                        value = (valueReaderType > 0)\n                              ? input.ReadObject<TValue>(input.TypeReaders[valueReaderType-1])\n                              : default(TValue);\n                    }\n\n                    dictionary.Add(key, value);\n                }\n            }\n\n            return dictionary;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/DoubleReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class DoubleReader : ContentTypeReader<double>\n    {\n        protected internal override double Read(ContentReader input, double existingInstance)\n        {\n            return input.ReadDouble();\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/EnumReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class EnumReader<T> : ContentTypeReader<T>\n    {\n        ContentTypeReader _elementReader;\n\n        protected internal override void Initialize(ContentTypeReaderManager manager)\n        {\t\t\t\n            Type readerType = Enum.GetUnderlyingType(typeof(T));\n            _elementReader = manager.GetTypeReader(readerType);\n        }\n        \n        protected internal override T Read(ContentReader input, T existingInstance)\n        {\n            return input.ReadRawObject<T>(_elementReader);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/ExternalReferenceReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    /// <summary>\n    /// External reference reader, provided for compatibility with XNA Framework built content\n    /// </summary>\n    internal class ExternalReferenceReader : ContentTypeReader\n    {\n        public ExternalReferenceReader()\n            : base(null)\n        {\n\n        }\n\n        protected internal override object Read(ContentReader input, object existingInstance)\n        {\n            return input.ReadExternalReference<object>();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/Int16Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Int16Reader : ContentTypeReader<short>\n    {\n        protected internal override short Read(ContentReader input, short existingInstance)\n        {\n            return input.ReadInt16();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/Int32Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Int32Reader : ContentTypeReader<int>\n    {\n        protected internal override int Read(ContentReader input, int existingInstance)\n        {\n            return input.ReadInt32();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/Int64Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Int64Reader : ContentTypeReader<long>\n    {\n        protected internal override long Read(ContentReader input, long existingInstance)\n        {\n            return input.ReadInt64();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/ListReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class ListReader<T> : ContentTypeReader<List<T>>\n    {\n        ContentTypeReader _elementReader;\n\n        protected internal override void Initialize(ContentTypeReaderManager manager)\n        {\n            Type readerType = typeof(T);\n            _elementReader = manager.GetTypeReader(readerType);\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return true; }\n        }\n\n        protected internal override List<T> Read(ContentReader input, List<T> existingInstance)\n        {\n            int count = input.ReadInt32();\n            List<T> list = existingInstance;\n            if (list == null) list = new List<T>(count);\n\n            if (ReflectionHelpers.IsValueType(typeof(T)))\n            {\n                for (int i = 0; i < count; i++)\n                {\n                    list.Add(input.ReadObject<T>(_elementReader));\n                }\n            }\n            else\n            {\n                for (int i = 0; i < count; i++)\n                {\n                    int readerType = input.Read7BitEncodedInt();\n                    list.Add(readerType > 0 ? input.ReadObject<T>(input.TypeReaders[readerType - 1]) : default(T));\n                }\n            }\n            return list;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/MatrixReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    class MatrixReader : ContentTypeReader<Matrix>\n    {\n        protected internal override Matrix Read(ContentReader input, Matrix existingInstance)\n        {\n            //return input.ReadMatrix();\n\n            Matrix result;\n            result.M11 = input.ReadSingle();\n            result.M12 = input.ReadSingle();\n            result.M13 = input.ReadSingle();\n            result.M14 = input.ReadSingle();\n            result.M21 = input.ReadSingle();\n            result.M22 = input.ReadSingle();\n            result.M23 = input.ReadSingle();\n            result.M24 = input.ReadSingle();\n            result.M31 = input.ReadSingle();\n            result.M32 = input.ReadSingle();\n            result.M33 = input.ReadSingle();\n            result.M34 = input.ReadSingle();\n            result.M41 = input.ReadSingle();\n            result.M42 = input.ReadSingle();\n            result.M43 = input.ReadSingle();\n            result.M44 = input.ReadSingle();\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/MultiArrayReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class MultiArrayReader<T> : ContentTypeReader<Array>\n    {\n        ContentTypeReader _elementReader;\n\n        protected internal override void Initialize(ContentTypeReaderManager manager)\n        {\n            Type readerType = typeof(T);\n            _elementReader = manager.GetTypeReader(readerType);\n        }\n\n        protected internal override Array Read(ContentReader input, Array existingInstance)\n        {\n            int rank = input.ReadInt32();\n            if (rank < 1)\n                throw new RankException();\n\n            int[] dimensions = new int[rank];\n            int count = 1;\n            for (int d = 0; d < dimensions.Length; d++)\n                count *= dimensions[d] = input.ReadInt32();\n\n\n            Array array = existingInstance;\n            if (array == null)\n                array = Array.CreateInstance(typeof(T), dimensions);//new T[count];\n            else if (dimensions.Length != array.Rank)\n                throw new RankException(\"existingInstance\");\n\n            int[] indices = new int[rank];\n\n            for (int i = 0; i < count; i++)\n            {\n                T value;\n                if (ReflectionHelpers.IsValueType(typeof(T)))\n                    value = input.ReadObject<T>(_elementReader);\n                else\n                {\n                    int readerType = input.Read7BitEncodedInt();\n                    if (readerType > 0)\n                        value = input.ReadObject<T>(input.TypeReaders[readerType - 1]);\n                    else\n                        value = default(T);\n                }\n\n                CalcIndices(array, i, indices);\n                array.SetValue(value, indices);\n            }\n\n            return array;\n        }\n\n        static void CalcIndices(Array array, int index, int[] indices)\n        {\n            if (array.Rank != indices.Length)\n                throw new Exception(\"indices\");\n\n            for (int d = 0; d < indices.Length; d++)\n            {\n                if (index == 0)\n                    indices[d] = 0;\n                else\n                {\n                    indices[d] = index % array.GetLength(d);\n                    index /= array.GetLength(d);\n                }\n            }\n\n            if (index != 0)\n                throw new ArgumentOutOfRangeException(\"index\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/NullableReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class NullableReader<T> : ContentTypeReader<T?> where T : struct\n    {\n        ContentTypeReader _elementReader;\n\n        protected internal override void Initialize(ContentTypeReaderManager manager)\n        {\t\t\t\n            Type readerType = typeof(T);\n            _elementReader = manager.GetTypeReader(readerType);\n        }\n        \n        protected internal override T? Read(ContentReader input, T? existingInstance)\n        {\n            if(input.ReadBoolean())\n                return input.ReadObject<T>(_elementReader);\n            \n            return null;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/PlaneReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class PlaneReader : ContentTypeReader<Plane>\n    {\n        protected internal override Plane Read(ContentReader input, Plane existingInstance)\n        {\n            existingInstance.Normal = input.ReadVector3();\n            existingInstance.D = input.ReadSingle();\n            return existingInstance;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/PointReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class PointReader : ContentTypeReader<Point>\n    {\n        protected internal override Point Read(ContentReader input, Point existingInstance)\n        {\n            int X = input.ReadInt32();\n            int Y = input.ReadInt32();\n            return new Point(X, Y);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/QuaternionReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class QuaternionReader : ContentTypeReader<Quaternion>\n    {\n        protected internal override Quaternion Read(ContentReader input, Quaternion existingInstance)\n        {\n            return input.ReadQuaternion();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/RayReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class RayReader : ContentTypeReader<Ray>\n    {\n        protected internal override Ray Read(ContentReader input, Ray existingInstance)\n        {\n            Vector3 position = input.ReadVector3();\n            Vector3 direction = input.ReadVector3();\n            return new Ray(position, direction);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/RectangleReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    \n    internal class RectangleReader : ContentTypeReader<Rectangle>\n    {\n        protected internal override Rectangle Read(ContentReader input, Rectangle existingInstance)\n        {\n            int left = input.ReadInt32();\n            int top = input.ReadInt32();\n            int width = input.ReadInt32();\n            int height = input.ReadInt32();\n            return new Rectangle(left, top, width, height);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/ReflectiveReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class ReflectiveReader<T> : ContentTypeReader\n    {\n        delegate void ReadElement(ContentReader input, object parent);\n\n        private List<ReadElement> _readers;\n\n        private ConstructorInfo _constructor;\n\n        private ContentTypeReader _baseTypeReader;\n\n\n        public ReflectiveReader() \n            : base(typeof(T))\n        {\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return TargetType.IsClass(); }\n        }\n\n        protected internal override void Initialize(ContentTypeReaderManager manager)\n        {\n            base.Initialize(manager);\n\n            Type baseType = ReflectionHelpers.GetBaseType(TargetType);\n            if (baseType != null && baseType != typeof(object))\n                _baseTypeReader = manager.GetTypeReader(baseType);\n\n            _constructor = TargetType.GetDefaultConstructor();\n\n            PropertyInfo[] properties = TargetType.GetAllProperties();\n            FieldInfo[] fields = TargetType.GetAllFields();\n            _readers = new List<ReadElement>(fields.Length + properties.Length);\n\n            // Gather the properties.\n            foreach (PropertyInfo property in properties)\n            {\n                ReadElement read = GetElementReader(manager, property);\n                if (read != null)\n                    _readers.Add(read);\n            }\n            \n            // Gather the fields.\n            foreach (FieldInfo field in fields)\n            {\n                ReadElement read = GetElementReader(manager, field);\n                if (read != null)\n                    _readers.Add(read);\n            }\n        }\n\n        private static ReadElement GetElementReader(ContentTypeReaderManager manager, MemberInfo member)\n        {\n            PropertyInfo property = member as PropertyInfo;\n            FieldInfo field = member as FieldInfo;\n            Debug.Assert(field != null || property != null);\n\n            if (property != null)\n            {\n                // Properties must have at least a getter.\n                if (property.CanRead == false)\n                    return null;\n\n                // Skip over indexer properties.\n                if (property.GetIndexParameters().Any())\n                    return null;\n            }\n\n            // Are we explicitly asked to ignore this item?\n            if (ReflectionHelpers.GetCustomAttribute<ContentSerializerIgnoreAttribute>(member) != null) \n                return null;\n\n            ContentSerializerAttribute contentSerializerAttribute = ReflectionHelpers.GetCustomAttribute<ContentSerializerAttribute>(member);\n            if (contentSerializerAttribute == null)\n            {\n                if (property != null)\n                {\n                    // There is no ContentSerializerAttribute, so non-public\n                    // properties cannot be deserialized.\n                    if (!ReflectionHelpers.PropertyIsPublic(property))\n                        return null;\n\n                    // If the read-only property has a type reader,\n                    // and CanDeserializeIntoExistingObject is true,\n                    // then it is safe to deserialize into the existing object.\n                    if (!property.CanWrite)\n                    {\n                        ContentTypeReader typeReader = manager.GetTypeReader(property.PropertyType);\n                        if (typeReader == null || !typeReader.CanDeserializeIntoExistingObject)\n                            return null;\n                    }\n                }\n                else\n                {\n                    // There is no ContentSerializerAttribute, so non-public\n                    // fields cannot be deserialized.\n                    if (!field.IsPublic)\n                        return null;\n\n                    // evolutional: Added check to skip initialise only fields\n                    if (field.IsInitOnly)\n                        return null;\n                }\n            }\n\n            Action<object, object> setter;\n            Type elementType;\n            if (property != null)\n            {\n                elementType = property.PropertyType;\n                if (property.CanWrite)\n                    setter = (o, v) => property.SetValue(o, v, null);\n                else\n                    setter = (o, v) => { };\n            }\n            else\n            {\n                elementType = field.FieldType;\n                setter = field.SetValue;\n            }\n\n            // Shared resources get special treatment.\n            if (contentSerializerAttribute != null && contentSerializerAttribute.SharedResource)\n            {\n                return (input, parent) =>\n                {\n                    Action<object> action = value => setter(parent, value);\n                    input.ReadSharedResource(action);\n                };\n            }\n\n            // We need to have a reader at this point.\n            ContentTypeReader reader = manager.GetTypeReader(elementType);\n            if (reader == null)\n                if (elementType == typeof(System.Array))\n                    reader = new ArrayReader<Array>();\n                else\n                    throw new ContentLoadException(string.Format(\"Content reader could not be found for {0} type.\", elementType.FullName));\n\n            // We use the construct delegate to pick the correct existing \n            // object to be the target of deserialization.\n            Func<object, object> construct = parent => null;\n            if (property != null && !property.CanWrite)\n                construct = parent => property.GetValue(parent, null);\n\n            return (input, parent) =>\n            {\n                object existing = construct(parent);\n                object obj2 = input.ReadObject(reader, existing);\n                setter(parent, obj2);\n            };\n        }\n      \n        protected internal override object Read(ContentReader input, object existingInstance)\n        {\n            T obj;\n            if (existingInstance != null)\n                obj = (T)existingInstance;\n            else\n                obj = (_constructor == null ? (T)Activator.CreateInstance(typeof(T)) : (T)_constructor.Invoke(null));\n        \n            if(_baseTypeReader != null)\n                _baseTypeReader.Read(input, obj);\n\n            // Box the type.\n            object boxed = (object)obj;\n\n            foreach (ReadElement reader in _readers)\n                reader(input, boxed);\n\n            // Unbox it... required for value types.\n            obj = (T)boxed;\n\n            return obj;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/SByteReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class SByteReader : ContentTypeReader<sbyte>\n    {\n        protected internal override sbyte Read(ContentReader input, sbyte existingInstance)\n        {\n            return input.ReadSByte();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/SingleReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class SingleReader : ContentTypeReader<float>\n    {\n        protected internal override float Read(ContentReader input, float existingInstance)\n        {\n            return input.ReadSingle();\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/StringReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class StringReader : ContentTypeReader<String>\n    {\n        protected internal override string Read(ContentReader input, string existingInstance)\n        {\n            return input.ReadString();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/TimeSpanReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class TimeSpanReader : ContentTypeReader<TimeSpan>\n    {\n        protected internal override TimeSpan Read(ContentReader input, TimeSpan existingInstance)\n        {\n            return new TimeSpan(input.ReadInt64());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/UInt16Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class UInt16Reader : ContentTypeReader<ushort>\n    {\n        protected internal override ushort Read(ContentReader input, ushort existingInstance)\n        {\n            return input.ReadUInt16();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/UInt32Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class UInt32Reader : ContentTypeReader<uint>\n    {\n        protected internal override uint Read(ContentReader input, uint existingInstance)\n        {\n            return input.ReadUInt32();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/UInt64Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class UInt64Reader : ContentTypeReader<ulong>\n    {\n        protected internal override ulong Read(ContentReader input, ulong existingInstance)\n        {\n            return input.ReadUInt64();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/Vector2Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Vector2Reader : ContentTypeReader<Vector2>\n    {\n        protected internal override Vector2 Read(ContentReader input, Vector2 existingInstance)\n        {\n            return input.ReadVector2();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/Vector3Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Vector3Reader : ContentTypeReader<Vector3>\n    {\n        protected internal override Vector3 Read(ContentReader input, Vector3 existingInstance)\n        {\n            return input.ReadVector3();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentReaders/Vector4Reader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Vector4Reader : ContentTypeReader<Vector4>\n    {\n        protected internal override Vector4 Read(ContentReader input, Vector4 existingInstance)\n        {\n            return input.ReadVector4();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentSerializerAttribute.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\t\n    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]\n    public sealed class ContentSerializerAttribute : Attribute\n    {\n        private string _collectionItemName;\n\n        /// <summary>\n        /// Creates an instance of the attribute.\n        /// </summary>\n        public ContentSerializerAttribute()\n        {\n            AllowNull = true;\n        }\n\n        public bool AllowNull { get; set; }\n\n        /// <summary>\n        /// Returns the overriden XML element name or the default \"Item\".\n        /// </summary>\n        public string CollectionItemName\n        {\n            get\n            {\n                // Return the defaul if unset.\n                if (string.IsNullOrEmpty(_collectionItemName))\n                    return \"Item\";\n\n                return _collectionItemName;\n            }\n            set\n            {\n                _collectionItemName = value;\n            }\n        }\n\n        public string ElementName { get; set; }\n\n        public bool FlattenContent { get; set; }\n\n        /// <summary>\n        /// Returns true if the default CollectionItemName value was overridden.\n        /// </summary>\n        public bool HasCollectionItemName\n        {\n            get\n            {\n                return !string.IsNullOrEmpty(_collectionItemName);\n            }\n        }\n\n        public bool Optional { get; set; }\n\n        public bool SharedResource { get; set; }\n\n        public ContentSerializerAttribute Clone()\n        {\n            ContentSerializerAttribute clone = new ContentSerializerAttribute();\n            clone.AllowNull = AllowNull;\n            clone._collectionItemName = _collectionItemName;\n            clone.ElementName = ElementName;\n            clone.FlattenContent = FlattenContent;\n            clone.Optional = Optional;\n            clone.SharedResource = SharedResource;\n            return clone;\n        }\n    }\n} \n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentSerializerCollectionItemNameAttribute.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    /// <summary>\n    /// This is used to specify the XML element name to use for each item in a collection.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class)]\n    public sealed class ContentSerializerCollectionItemNameAttribute : Attribute\n    {\n        /// <summary>\n        /// Creates an instance of the attribute.\n        /// </summary>\n        /// <param name=\"collectionItemName\">The XML element name to use for each item in the collection.</param>\n        public ContentSerializerCollectionItemNameAttribute(string collectionItemName)\n        {\n            CollectionItemName = collectionItemName;\n        }\n\n        /// <summary>\n        /// The XML element name to use for each item in the collection.\n        /// </summary>\n        public string CollectionItemName { get; private set;}\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentSerializerIgnoreAttribute.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n//\n// Author: Kenneth James Pouncey\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]\n    public sealed class ContentSerializerIgnoreAttribute : Attribute\n    {\n    }\n\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentSerializerRuntimeTypeAttribute.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    /// <summary>\n    /// This is used to specify the type to use when deserializing this object at runtime.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class)]\n    public sealed class ContentSerializerRuntimeTypeAttribute : Attribute\n    {\n        /// <summary>\n        /// Creates an instance of the attribute.\n        /// </summary>\n        /// <param name=\"runtimeType\">The name of the type to use at runtime.</param>\n        public ContentSerializerRuntimeTypeAttribute(string runtimeType)\n        {\n            RuntimeType = runtimeType;\n        }\n\n        /// <summary>\n        /// The name of the type to use at runtime.\n        /// </summary>\n        public string RuntimeType { get; private set;}\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentSerializerTypeVersionAttribute.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    /// <summary>\n    /// This is used to specify the version when deserializing this object at runtime.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class)]\n    public sealed class ContentSerializerTypeVersionAttribute : Attribute\n    {\n        /// <summary>\n        /// Creates an instance of the attribute.\n        /// </summary>\n        /// <param name=\"typeVersion\">The version passed to the type at runtime.</param>\n        public ContentSerializerTypeVersionAttribute(int typeVersion)\n        {\n            TypeVersion = typeVersion;\n        }\n\n        /// <summary>\n        /// The version passed to the type at runtime.\n        /// </summary>\n        public int TypeVersion { get; private set; }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentTypeReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    public abstract class ContentTypeReader\n    {\n        private Type _targetType;\n\n        public virtual bool CanDeserializeIntoExistingObject\n        {\n            get { return false; }\n        }\n\n        public Type TargetType\n        {\n            get { return _targetType; }\n        }\n\n        public virtual int TypeVersion\n        {\n            get { return 0; }   // The default version (unless overridden) is zero\n        }\n\n        protected ContentTypeReader(Type targetType)\n        {\n            _targetType = targetType;\n        }\n\n        protected internal virtual void Initialize(ContentTypeReaderManager manager)\n        {\n            // Do nothing. Are we supposed to add ourselves to the manager?\n        }\n\n        /// <param name=\"existingInstance\">The object receiving the data, or null if a new instance of the object should be created.</param>\n        protected internal abstract object Read(ContentReader input, object existingInstance);\n    }\n\n    public abstract class ContentTypeReader<T> : ContentTypeReader\n    {\n        protected ContentTypeReader()\n            : base(typeof(T))\n        {\n            // Nothing\n        }\n\n        /// <inheritdoc/>\n        protected internal override object Read(ContentReader input, object existingInstance)\n        {\n            if (existingInstance == null)\n            {\n                return Read(input, default(T));\n            } \n            return Read(input, (T)existingInstance);\n        }\n\n        protected internal abstract T Read(ContentReader input, T existingInstance);\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ContentTypeReaderManager.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Text.RegularExpressions;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    public sealed class ContentTypeReaderManager\n    {\n        private static readonly object _locker;\n\n        private static readonly Dictionary<String, Type> _contentTypeReadersCache;\n        private static readonly Dictionary<Type, ContentTypeReader> _contentReadersCache;\n\n        private Dictionary<Type, ContentTypeReader> _contentReaders;\n\n        private static readonly string _contentAssemblyName;\n        private static readonly string _contentGraphicsAssemblyName;\n        private static readonly string _contentAudioAssemblyName;\n        private static readonly string _contentMediaAssemblyName;\n\n        private static readonly bool _isRunningOnNetCore;\n\n        static ContentTypeReaderManager()\n        {\n            _locker = new object();\n            _contentTypeReadersCache = new Dictionary<string, Type>();\n            _contentReadersCache = new Dictionary<Type, ContentTypeReader>(255);\n            _contentAssemblyName = ReflectionHelpers.GetAssembly(typeof(ContentTypeReaderManager)).FullName;\n            _contentGraphicsAssemblyName = \"Xna.Framework.Graphics\";\n            _contentAudioAssemblyName = \"Xna.Framework.Audio\";\n            _contentMediaAssemblyName = \"Xna.Framework.Media\";\n\n            _isRunningOnNetCore = ReflectionHelpers.GetAssembly(typeof(System.Object)).GetName().Name == \"System.Private.CoreLib\";\n\n        }\n\n        public ContentTypeReader GetTypeReader(Type targetType)\n        {\n            if (targetType.IsArray && targetType.GetArrayRank() > 1)\n                targetType = typeof(Array);\n\n            ContentTypeReader reader;\n            if (_contentReaders.TryGetValue(targetType, out reader))\n                return reader;\n\n            return null;\n        }\n\n        internal ContentTypeReader[] LoadAssetReaders(ContentReader reader, int typeReaderCount)\n        {\n            PreserveContentTypeReaders();\n\n            ContentTypeReader[] contentReaders = new ContentTypeReader[typeReaderCount];\n            BitArray needsInitialize = new BitArray(typeReaderCount);\n            _contentReaders = new Dictionary<Type, ContentTypeReader>(typeReaderCount);\n\n            // Lock until we're done allocating and initializing any new\n            // content type readers...  this ensures we can load content\n            // from multiple threads and still cache the readers.\n            lock (_locker)\n            {\n                // For each reader in the file, we read out the length of the string which contains the type of the reader,\n                // then we read out the string. Finally we instantiate an instance of that reader using reflection\n                for (int i = 0; i < typeReaderCount; i++)\n                {\n                    // This string tells us what reader we need to decode the following data\n                    string readerTypeName = reader.ReadString();\n                    int readerTypeVersion = reader.ReadInt32();\n\n                    ContentTypeReader typeReader;\n                    Type typeReaderType;\n                    if (!_contentTypeReadersCache.ContainsKey(readerTypeName))\n                    {\n                        typeReaderType = ResolveReaderType(readerTypeName);\n                        _contentTypeReadersCache.Add(readerTypeName, typeReaderType);\n                    }\n                    else\n                    {\n                        typeReaderType = _contentTypeReadersCache[readerTypeName];\n                    }\n\n                    if (!_contentReadersCache.ContainsKey(typeReaderType))\n                    {\n                        typeReader = typeReaderType.GetDefaultConstructor().Invoke(null) as ContentTypeReader;\n                        needsInitialize[i] = true;\n                        _contentReadersCache.Add(typeReaderType, typeReader);\n                    }\n                    else\n                    {\n                        typeReader = _contentReadersCache[typeReaderType];\n                    }\n\n                    if (readerTypeVersion != typeReader.TypeVersion)\n                    {\n                        throw new ContentLoadException(\n                            String.Format(\"{0} of TypeVersion {1} does not match reader of TypeVersion {2}.\",\n                                typeReader.TargetType.Name, readerTypeVersion, typeReader.TypeVersion));\n                    }\n\n                    contentReaders[i] = typeReader;\n\n\n                    Type targetType = contentReaders[i].TargetType;\n                    if (targetType != null)\n                        if (!_contentReaders.ContainsKey(targetType))\n                            _contentReaders.Add(targetType, contentReaders[i]);\n                }\n\n                // Initialize any new readers.\n                for (int i = 0; i < contentReaders.Length; i++)\n                {\n                    if (needsInitialize.Get(i))\n                        contentReaders[i].Initialize(this);\n                }\n\n            } // lock (_locker)\n\n            return contentReaders;\n        }\n\n        // Trick to prevent the linker removing the code, but not actually execute the code\n        static bool _trimmingFalseFlag = false;\n        private static void PreserveContentTypeReaders()\n        {\n#pragma warning disable 0219, 0649\n            // Trick to prevent the linker removing the code, but not actually execute the code\n            if (_trimmingFalseFlag)\n            {\n                // Dummy variables required for it to work with trimming ** DO NOT DELETE **\n                // This forces the classes not to be optimized out when deploying with trimming\n\n                // System types\n                var hBooleanReader = new BooleanReader();\n                var hByteReader = new ByteReader();\n                var hCharReader = new CharReader();\n                var hDateTimeReader = new DateTimeReader();\n                var hDecimalReader = new DecimalReader();\n                var hDoubleReader = new DoubleReader();\n                var hInt16Reader = new Int16Reader();\n                var hInt32Reader = new Int32Reader();\n                var hInt64Reader = new Int64Reader();\n                var hSByteReader = new SByteReader();\n                var hSingleReader = new SingleReader();\n                var hStringReader = new StringReader();\n                var TimeSpanReader = new TimeSpanReader();\n                var hUInt16Reader = new UInt16Reader();\n                var hUInt32Reader = new UInt32Reader();\n                var hUInt64Reader = new UInt64Reader();\n                var hCharListReader = new ListReader<Char>();\n                var hIntListReader = new ListReader<Int32>();\n                var hArrayFloatReader = new ArrayReader<Single>();\n                var hStringListReader = new ListReader<StringReader>();\n\n                // Framework types\n                var hBoundingBoxReader = new BoundingBoxReader();\n                var hBoundingFrustumReader = new BoundingFrustumReader();\n                var hBoundingSphereReader = new BoundingSphereReader();\n                var hComplexReader = new ComplexReader();\n                var hCurveReader = new CurveReader();\n                var hExternalReferenceReader = new ExternalReferenceReader();\n                var hMatrixReader = new MatrixReader();\n                var hPlaneReader = new PlaneReader();\n                var hPointReader = new PointReader();\n                var hQuaternionReader = new QuaternionReader();\n                var hRayReader = new RayReader();\n                var hRectangleReader = new RectangleReader();\n                var hVector2Reader = new Vector2Reader();\n                var hVector3Reader = new Vector3Reader();\n                var hVector4Reader = new Vector4Reader();\n                var hArrayMatrixReader = new ArrayReader<Matrix>();\n                var hRectangleArrayReader = new ArrayReader<Rectangle>();\n                var hArrayVector2Reader = new ArrayReader<Vector2>();\n                var hRectangleListReader = new ListReader<Rectangle>();\n                var hVector3ListReader = new ListReader<Vector3>();\n                var hListVector2Reader = new ListReader<Vector2>();\n                var hNullableRectReader = new NullableReader<Rectangle>();\n            }\n#pragma warning restore 0219, 0649\n        }\n\n        /// <summary>\n        /// Removes Version, Culture and PublicKeyToken from a type string.\n        /// </summary>\n        /// <remarks>\n        /// Supports multiple generic types (e.g. Dictionary&lt;TKey,TValue&gt;) and nested generic types (e.g. List&lt;List&lt;int&gt;&gt;).\n        /// </remarks>\n        /// <param name=\"readerTypeName\">A <see cref=\"System.String\"/></param>\n        /// <returns>A <see cref=\"System.Type\"/></returns>\n        internal static Type ResolveReaderType(string readerTypeName)\n        {\n            // Handle nested types\n            int count = readerTypeName.Split(new[] { \"[[\" }, StringSplitOptions.None).Length - 1;\n            for (int i = 0; i < count; i++)\n            {\n                readerTypeName = Regex.Replace(readerTypeName, @\"\\[(.+?), Version=.+?\\]\", \"[$1]\");\n            }\n\n            // Handle non generic types\n            if (readerTypeName.Contains(\"PublicKeyToken\"))\n                readerTypeName = Regex.Replace(readerTypeName, @\"(.+?), Version=.+?$\", \"$1\");\n\n            string resolvedReaderTypeName;\n            Type readerType;\n\n            if (_isRunningOnNetCore)\n            {\n                // map net.framework (.net4.x) to core.net (.net5 or later)\n                if (readerTypeName.Contains(\", mscorlib\"))\n                {\n                    resolvedReaderTypeName = readerTypeName.Replace(\", mscorlib\", \", System.Private.CoreLib\");\n                    readerType = Type.GetType(resolvedReaderTypeName);\n                    if (readerType != null)\n                        return readerType;\n                }\n            }\n            else // (!_isRunningOnNetCore)\n            {\n                // map core.net (.net5 or later) to net.framework (.net4)\n                if (readerTypeName.Contains(\", System.Private.CoreLib\"))\n                {\n                    resolvedReaderTypeName = readerTypeName.Replace(\", System.Private.CoreLib\", \", mscorlib\");\n                    readerType = Type.GetType(resolvedReaderTypeName);\n                    if (readerType != null)\n                        return readerType;\n                }\n            }\n\n            // map XNA build-in TypeReaders\n            resolvedReaderTypeName = readerTypeName;\n            resolvedReaderTypeName = resolvedReaderTypeName.Replace(\", Microsoft.Xna.Framework.Graphics\", string.Format(\", {0}\", _contentGraphicsAssemblyName));\n            resolvedReaderTypeName = resolvedReaderTypeName.Replace(\", Microsoft.Xna.Framework.Video\",    string.Format(\", {0}\", _contentMediaAssemblyName));\n            resolvedReaderTypeName = resolvedReaderTypeName.Replace(\", Microsoft.Xna.Framework\",          string.Format(\", {0}\", _contentAssemblyName));\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n\n            // map XNA build-in TypeReaders\n            resolvedReaderTypeName = readerTypeName.Replace(\", Microsoft.Xna.Framework\", string.Format(\", {0}\", \"Xna.Framework\")); // e.g. \"Microsoft.Xna.Framework.Content.ListReader`1[[Microsoft.Xna.Framework.Rectangle, Microsoft.Xna.Framework]]\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n            resolvedReaderTypeName = readerTypeName + string.Format(\", {0}\", _contentGraphicsAssemblyName);\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n            resolvedReaderTypeName = readerTypeName + string.Format(\", {0}\", _contentAudioAssemblyName);\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n            resolvedReaderTypeName = readerTypeName + string.Format(\", {0}\", _contentMediaAssemblyName);\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n\n            // map MonoGame build-in TypeReaders\n            resolvedReaderTypeName = readerTypeName.Replace(\", MonoGame.Framework\", string.Format(\", {0}\", \"Xna.Framework\")); // e.g. \"Microsoft.Xna.Framework.Content.ListReader`1[[Microsoft.Xna.Framework.Rectangle, MonoGame.Framework]]\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n            resolvedReaderTypeName = readerTypeName.Replace(\", MonoGame.Framework\", string.Format(\", {0}\", _contentAssemblyName));\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n            resolvedReaderTypeName = readerTypeName.Replace(\", MonoGame.Framework\", string.Format(\", {0}\", _contentGraphicsAssemblyName));\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n            resolvedReaderTypeName = readerTypeName.Replace(\", MonoGame.Framework\", string.Format(\", {0}\", _contentAudioAssemblyName));\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n            resolvedReaderTypeName = readerTypeName.Replace(\", MonoGame.Framework\", string.Format(\", {0}\", _contentMediaAssemblyName));\n            readerType = Type.GetType(resolvedReaderTypeName);\n            if (readerType != null)\n                return readerType;\n\n            throw new ContentLoadException(\n                    \"Could not find ContentTypeReader Type. Please ensure the name of the Assembly that contains the Type matches the assembly in the full type name: \" +\n                    readerTypeName + \" (\" + resolvedReaderTypeName + \")\");\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/ResourceContentManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Resources;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    public class ResourceContentManager : ContentManager\n    {\n        private ResourceManager resource;\n\n        public ResourceContentManager(IServiceProvider servicesProvider, ResourceManager resource)\n            : base(servicesProvider)\n        {\n            if (resource == null)\n                throw new ArgumentNullException(\"resource\");\n\n            this.resource = resource;\n        }\n\n        protected override Stream OpenStream(string assetName)\n        {\n            object obj = this.resource.GetObject(assetName);\n\n            if (obj == null)\n                throw new ContentLoadException(\"Resource not found\");\n\n            if (!(obj is byte[]))\n                throw new ContentLoadException(\"Resource is not in binary format\");\n\n            return new MemoryStream(obj as byte[]);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/Utilities/ContentBufferPool.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    public class ContentBufferPool : IComparer<byte[]>\n    {\n        private const int MinimumBufferSize = 2 * 1024 * 1024;\n\n        private static readonly ContentBufferPool _current = new ContentBufferPool();\n\n        internal static ContentBufferPool Current\n        {\n            get { return _current; }\n        }\n\n        private SortedSet<byte[]> _bufferSet;\n\n        private ContentBufferPool()\n        {\n            _bufferSet = new SortedSet<byte[]>(this);\n        }\n\n        public byte[] Get(int size)\n        {\n            lock (_bufferSet)\n            {\n                foreach (byte[] buffer in _bufferSet)\n                {\n                    if (buffer.Length >= size)\n                    {\n                        _bufferSet.Remove(buffer);\n                        return buffer;\n                    }\n                }\n\n                if (_bufferSet.Count >= 1)\n                    _bufferSet.Remove(_bufferSet.Max);\n\n                int dataSize = Math.Max(MinimumBufferSize, size);\n\n#if NET8_0_OR_GREATER\n                return GC.AllocateUninitializedArray<byte>(dataSize);\n#else\n                return new byte[dataSize];\n#endif\n            }\n        }\n\n        public void Return(byte[] buffer)\n        {\n            lock (_bufferSet)\n            {\n                _bufferSet.Add(buffer);\n            }\n        }\n\n        int IComparer<byte[]>.Compare(byte[] x, byte[] y)\n        {\n            return (x.Length - y.Length);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/Utilities/ContentExtensions.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing System.Linq;\n\nnamespace Microsoft.Xna.Platform.Content.Utilities\n{\n    internal static class ContentExtensions\n    {\n        public static FieldInfo[] GetAllFields(this Type type)\n        {\n#if WINRT\n            FieldInfo[] fields= type.GetTypeInfo().DeclaredFields.ToArray();\n            IEnumerable<FieldInfo> nonStaticFields = from field in fields\n                    where !field.IsStatic\n                    select field;\n            return nonStaticFields.ToArray();\n#else\n            BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly;\n            return type.GetFields(attrs);\n#endif\n        }\n\n        public static PropertyInfo[] GetAllProperties(this Type type)\n        {\n\n            // Sometimes, overridden properties of abstract classes can show up even with \n            // BindingFlags.DeclaredOnly is passed to GetProperties. Make sure that\n            // all properties in this list are defined in this class by comparing\n            // its get method with that of it's base class. If they're the same\n            // Then it's an overridden property.\n#if WINRT\n            PropertyInfo[] infos= type.GetTypeInfo().DeclaredProperties.ToArray();\n            IEnumerable<PropertyInfo> nonStaticPropertyInfos = from p in infos\n                                         where (p.GetMethod != null) && (!p.GetMethod.IsStatic) &&\n                                         (p.GetMethod == p.GetMethod.GetRuntimeBaseDefinition())\n                                         select p;\n            return nonStaticPropertyInfos.ToArray();\n#else\n            const BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly;\n            List<PropertyInfo> allProps = type.GetProperties(attrs).ToList();\n            PropertyInfo[] props = allProps.FindAll(p => p.GetGetMethod(true) != null && p.GetGetMethod(true) == p.GetGetMethod(true).GetBaseDefinition()).ToArray();\n            return props;\n#endif\n        }\n\n\n        public static ConstructorInfo GetDefaultConstructor(this Type type)\n        {\n#if WINRT\n            TypeInfo typeInfo = type.GetTypeInfo();\n            ConstructorInfo ctor = typeInfo.DeclaredConstructors.FirstOrDefault(c => !c.IsStatic && c.GetParameters().Length == 0);\n            return ctor;\n#else\n            BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance;\n            return type.GetConstructor(attrs, null, new Type[0], null);\n#endif\n        }\n\n        public static bool IsClass(this Type type)\n        {\n#if WINRT\n            return type.GetTypeInfo().IsClass;\n#else\n            return type.IsClass;\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/Utilities/FileHelpers.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Text.RegularExpressions;\n\nnamespace Microsoft.Xna.Platform.Content.Utilities\n{\n    internal static class FileHelpers\n    {\n        public static readonly char BackwardSlash = '\\\\';\n        public static readonly char ForwardSlash = '/';\n\n        public static readonly string ForwardSlashString = new string(ForwardSlash, 1);\n        private static readonly char[] UrlSafeChars = new[] { '.', '_', '-', ';', '/', '?', '\\\\', ':' };\n\n#if UAP || WINUI\n        public static readonly char Separator = BackwardSlash;\n        public static readonly char NotSeparator = ForwardSlash;\n#else\n        public static readonly char Separator = Path.DirectorySeparatorChar;\n        public static readonly char NotSeparator = (Path.DirectorySeparatorChar == BackwardSlash) ? ForwardSlash : BackwardSlash;\n#endif\n\n        public static string NormalizeFilePathSeparators(string name)\n        {\n            return name.Replace(NotSeparator, Separator);\n        }\n\n        /// <summary>\n        /// Combines the filePath and relativeFile based on relativeFile being a file in the same location as filePath.\n        /// Relative directory operators (..) are also resolved\n        /// </summary>\n        /// <example>\"A\\B\\C.txt\",\"D.txt\" becomes \"A\\B\\D.txt\"</example>\n        /// <example>\"A\\B\\C.txt\",\"..\\D.txt\" becomes \"A\\D.txt\"</example>\n        /// <param name=\"filePath\">Path to the file we are starting from</param>\n        /// <param name=\"relativeFile\">Relative location of another file to resolve the path to</param>\n        public static string ResolveRelativePath(string filePath, string relativeFile)\n        {\n            // Uri accepts forward slashes\n            filePath = filePath.Replace(BackwardSlash, ForwardSlash);\n            relativeFile = relativeFile.Replace(BackwardSlash, ForwardSlash);\n\n            // Sanitize the path of double slashes, they confuse Uri\n            while (filePath.Contains(\"//\"))\n                filePath = filePath.Replace(\"//\", \"/\");\n\n            bool hasForwardSlash = filePath.StartsWith(ForwardSlashString);\n            if (!hasForwardSlash)\n                filePath = ForwardSlashString + filePath;\n\n            // Get a uri for filePath using the file:// schema and no host.\n            var src = new Uri(\"file://\" + UrlEncode(filePath));\n\n            var dst = new Uri(src, UrlEncode(relativeFile));\n            // The uri now contains the path to the relativeFile with \n            // relative addresses resolved... get the local path.\n            var localPath = dst.LocalPath;\n\n            if (!hasForwardSlash && localPath.StartsWith(\"/\"))\n                localPath = localPath.Substring(1);\n\n            // Convert the directory separator characters to the \n            // correct platform specific separator.\n            return TrimPath(NormalizeFilePathSeparators(localPath));\n        }\n\n        internal static string UrlEncode(string url)\n        {\n            var encoder = new UTF8Encoding();\n            var safeline = new StringBuilder(encoder.GetByteCount(url) * 3);\n\n            foreach (var c in url)\n            {\n                if ((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || Array.IndexOf(UrlSafeChars, c) != -1)\n                    safeline.Append(c);\n                else\n                {\n                    var bytes = encoder.GetBytes(c.ToString());\n\n                    foreach (var num in bytes)\n                    {\n                        safeline.Append(\"%\");\n                        safeline.Append(num.ToString(\"X\"));\n                    }\n                }\n            }\n\n            return safeline.ToString();\n        }\n\n        private static string TrimPath(string filePath)\n        {\n            // Remove . in filePath\n\n            while (filePath.Contains(\"/./\"))\n                filePath = filePath.Replace(\"/./\", \"/\");\n\n            while (filePath.Contains(@\"\\.\\\"))\n                filePath = filePath.Replace(@\"\\.\\\", @\"\\\");\n\n            filePath = Regex.Replace(filePath, @\"^\\.(\\/|\\\\)\", string.Empty);\n\n            // Remove .. in filePath\n\n            filePath = Regex.Replace(filePath, @\"[^\\/\\\\]+(\\/|\\\\)\\.\\.(\\/|\\\\)\", string.Empty);\n\n            return filePath;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/Utilities/Lz4DecoderStream.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n#define CHECK_ARGS\n#define CHECK_EOF\n//#define LOCAL_SHADOW\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Lz4DecoderStream : Stream\n    {\n        public Lz4DecoderStream()\n        {\n        }\n\n        public Lz4DecoderStream( Stream input, long inputLength = long.MaxValue )\n        {\n            Reset( input, inputLength );\n        }\n\n        public void Reset( Stream input, long inputLength = long.MaxValue )\n        {\n            this.inputLength = inputLength;\n            this.input = input;\n\n            phase = DecodePhase.ReadToken;\n            \n            decodeBufferPos = 0;\n            \n            litLen = 0;\n            matLen = 0;\n            matDst = 0;\n\n            inBufPos = DecBufLen;\n            inBufEnd = DecBufLen;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            this.input = null;\n            base.Dispose(disposing);\n        }\n\n        private long inputLength;\n        private Stream input;\n\n        //because we might not be able to match back across invocations,\n        //we have to keep the last window's worth of bytes around for reuse\n        //we use a circular buffer for this - every time we write into this\n        //buffer, we also write the same into our output buffer\n\n        private const int DecBufLen = 0x10000;\n        private const int DecBufMask = 0xFFFF;\n\n        private const int InBufLen = 128;\n\n        private byte[] decodeBuffer = new byte[DecBufLen + InBufLen];\n        private int decodeBufferPos, inBufPos, inBufEnd;\n\n        //we keep track of which phase we're in so that we can jump right back\n        //into the correct part of decoding\n\n        private DecodePhase phase;\n\n        private enum DecodePhase\n        {\n            ReadToken,\n            ReadExLiteralLength,\n            CopyLiteral,\n            ReadOffset,\n            ReadExMatchLength,\n            CopyMatch,\n        }\n\n        //state within interruptable phases and across phase boundaries is\n        //kept here - again, so that we can punt out and restart freely\n\n        private int litLen, matLen, matDst;\n\n        public override int Read( byte[] buffer, int offset, int count )\n        {\n#if CHECK_ARGS\n            if( buffer == null )\n                throw new ArgumentNullException( \"buffer\" );\n            if( offset < 0 || count < 0 || buffer.Length - count < offset )\n                throw new ArgumentOutOfRangeException();\n\n            if( input == null )\n                throw new InvalidOperationException();\n#endif\n            int nRead, nToRead = count;\n\n            var decBuf = decodeBuffer;\n\n            //the stringy gotos are obnoxious, but their purpose is to\n            //make it *blindingly* obvious how the state machine transitions\n            //back and forth as it reads - remember, we can yield out of\n            //this routine in several places, and we must be able to re-enter\n            //and pick up where we left off!\n\n#if LOCAL_SHADOW\n            var phase = this.phase;\n            var inBufPos = this.inBufPos;\n            var inBufEnd = this.inBufEnd;\n#endif\n            switch( phase )\n            {\n            case DecodePhase.ReadToken:\n                goto readToken;\n\n            case DecodePhase.ReadExLiteralLength:\n                goto readExLiteralLength;\n\n            case DecodePhase.CopyLiteral:\n                goto copyLiteral;\n\n            case DecodePhase.ReadOffset:\n                goto readOffset;\n\n            case DecodePhase.ReadExMatchLength:\n                goto readExMatchLength;\n\n            case DecodePhase.CopyMatch:\n                goto copyMatch;\n            }\n\n        readToken:\n            int tok;\n            if( inBufPos < inBufEnd )\n            {\n                tok = decBuf[inBufPos++];\n            }\n            else\n            {\n#if LOCAL_SHADOW\n                this.inBufPos = inBufPos;\n#endif\n\n                tok = ReadByteCore();\n#if LOCAL_SHADOW\n                inBufPos = this.inBufPos;\n                inBufEnd = this.inBufEnd;\n#endif\n#if CHECK_EOF\n                if( tok == -1 )\n                    goto finish;\n#endif\n            }\n\n            litLen = tok >> 4;\n            matLen = (tok & 0xF) + 4;\n\n            switch( litLen )\n            {\n            case 0:\n                phase = DecodePhase.ReadOffset;\n                goto readOffset;\n\n            case 0xF:\n                phase = DecodePhase.ReadExLiteralLength;\n                goto readExLiteralLength;\n\n            default:\n                phase = DecodePhase.CopyLiteral;\n                goto copyLiteral;\n            }\n\n        readExLiteralLength:\n            int exLitLen;\n            if( inBufPos < inBufEnd )\n            {\n                exLitLen = decBuf[inBufPos++];\n            }\n            else\n            {\n#if LOCAL_SHADOW\n                this.inBufPos = inBufPos;\n#endif\n                exLitLen = ReadByteCore();\n#if LOCAL_SHADOW\t\t\t\t\n                inBufPos = this.inBufPos;\n                inBufEnd = this.inBufEnd;\n#endif\n\n#if CHECK_EOF\n                if( exLitLen == -1 )\n                    goto finish;\n#endif\n            }\n\n            litLen += exLitLen;\n            if( exLitLen == 255 )\n                goto readExLiteralLength;\n\n            phase = DecodePhase.CopyLiteral;\n            goto copyLiteral;\n\n        copyLiteral:\n            int nReadLit = litLen < nToRead ? litLen : nToRead;\n            if( nReadLit != 0 )\n            {\n                if( inBufPos + nReadLit <= inBufEnd )\n                {\n                    int ofs = offset;\n\n                    for( int c = nReadLit; c-- != 0; )\n                        buffer[ofs++] = decBuf[inBufPos++];\n\n                    nRead = nReadLit;\n                }\n                else\n                {\n#if LOCAL_SHADOW\n                    this.inBufPos = inBufPos;\n#endif\n                    nRead = ReadCore( buffer, offset, nReadLit );\n#if LOCAL_SHADOW\n                    inBufPos = this.inBufPos;\n                    inBufEnd = this.inBufEnd;\n#endif\n#if CHECK_EOF\n                    if( nRead == 0 )\n                        goto finish;\n#endif\n                }\n\n                offset += nRead;\n                nToRead -= nRead;\n\n                litLen -= nRead;\n\n                if( litLen != 0 )\n                    goto copyLiteral;\n            }\n\n            if( nToRead == 0 )\n                goto finish;\n\n            phase = DecodePhase.ReadOffset;\n            goto readOffset;\n\n        readOffset:\n            if( inBufPos + 1 < inBufEnd )\n            {\n                matDst = (decBuf[inBufPos + 1] << 8) | decBuf[inBufPos];\n                inBufPos += 2;\n            }\n            else\n            {\n#if LOCAL_SHADOW\n                this.inBufPos = inBufPos;\n#endif\n                matDst = ReadOffsetCore();\n#if LOCAL_SHADOW\n                inBufPos = this.inBufPos;\n                inBufEnd = this.inBufEnd;\n#endif\n#if CHECK_EOF\n                if( matDst == -1 )\n                    goto finish;\n#endif\n            }\n\n            if( matLen == 15 + 4 )\n            {\n                phase = DecodePhase.ReadExMatchLength;\n                goto readExMatchLength;\n            }\n            else\n            {\n                phase = DecodePhase.CopyMatch;\n                goto copyMatch;\n            }\n\n        readExMatchLength:\n            int exMatLen;\n            if( inBufPos < inBufEnd )\n            {\n                exMatLen = decBuf[inBufPos++];\n            }\n            else\n            {\n#if LOCAL_SHADOW\n                this.inBufPos = inBufPos;\n#endif\n                exMatLen = ReadByteCore();\n#if LOCAL_SHADOW\n                inBufPos = this.inBufPos;\n                inBufEnd = this.inBufEnd;\n#endif\n#if CHECK_EOF\n                if( exMatLen == -1 )\n                    goto finish;\n#endif\n            }\n\n            matLen += exMatLen;\n            if( exMatLen == 255 )\n                goto readExMatchLength;\n\n            phase = DecodePhase.CopyMatch;\n            goto copyMatch;\n\n        copyMatch:\n            int nCpyMat = matLen < nToRead ? matLen : nToRead;\n            if( nCpyMat != 0 )\n            {\n                nRead = count - nToRead;\n\n                int bufDst = matDst - nRead;\n                if( bufDst > 0 )\n                {\n                    //offset is fairly far back, we need to pull from the buffer\n\n                    int bufSrc = decodeBufferPos - bufDst;\n                    if( bufSrc < 0 )\n                        bufSrc += DecBufLen;\n                    int bufCnt = bufDst < nCpyMat ? bufDst : nCpyMat;\n\n                    for( int c = bufCnt; c-- != 0; )\n                        buffer[offset++] = decBuf[bufSrc++ & DecBufMask];\n                }\n                else\n                {\n                    bufDst = 0;\n                }\n\n                int sOfs = offset - matDst;\n                for( int i = bufDst; i < nCpyMat; i++ )\n                    buffer[offset++] = buffer[sOfs++];\n\n                nToRead -= nCpyMat;\n                matLen -= nCpyMat;\n            }\n\n            if( nToRead == 0 )\n                goto finish;\n\n            phase = DecodePhase.ReadToken;\n            goto readToken;\n\n        finish:\n            nRead = count - nToRead;\n\n            int nToBuf = nRead < DecBufLen ? nRead : DecBufLen;\n            int repPos = offset - nToBuf;\n\n            if( nToBuf == DecBufLen )\n            {\n                Buffer.BlockCopy( buffer, repPos, decBuf, 0, DecBufLen );\n                decodeBufferPos = 0;\n            }\n            else\n            {\n                int decPos = decodeBufferPos;\n\n                while( nToBuf-- != 0 )\n                    decBuf[decPos++ & DecBufMask] = buffer[repPos++];\n\n                decodeBufferPos = decPos & DecBufMask;\n            }\n\n#if LOCAL_SHADOW\n            this.phase = phase;\n            this.inBufPos = inBufPos;\n#endif\n            return nRead;\n        }\n\n        private int ReadByteCore()\n        {\n            var buf = decodeBuffer;\n\n            if( inBufPos == inBufEnd )\n            {\n                int nRead = input.Read( buf, DecBufLen,\n                    InBufLen < inputLength ? InBufLen : (int)inputLength );\n\n#if CHECK_EOF\n                if( nRead == 0 )\n                    return -1;\n#endif\n\n                inputLength -= nRead;\n\n                inBufPos = DecBufLen;\n                inBufEnd = DecBufLen + nRead;\n            }\n\n            return buf[inBufPos++];\n        }\n\n        private int ReadOffsetCore()\n        {\n            var buf = decodeBuffer;\n\n            if( inBufPos == inBufEnd )\n            {\n                int nRead = input.Read( buf, DecBufLen,\n                    InBufLen < inputLength ? InBufLen : (int)inputLength );\n\n#if CHECK_EOF\n                if( nRead == 0 )\n                    return -1;\n#endif\n\n                inputLength -= nRead;\n\n                inBufPos = DecBufLen;\n                inBufEnd = DecBufLen + nRead;\n            }\n\n            if( inBufEnd - inBufPos == 1 )\n            {\n                buf[DecBufLen] = buf[inBufPos];\n\n                int nRead = input.Read( buf, DecBufLen + 1,\n                    InBufLen - 1 < inputLength ? InBufLen - 1 : (int)inputLength );\n\n#if CHECK_EOF\n                if( nRead == 0 )\n                {\n                    inBufPos = DecBufLen;\n                    inBufEnd = DecBufLen + 1;\n\n                    return -1;\n                }\n#endif\n\n                inputLength -= nRead;\n\n                inBufPos = DecBufLen;\n                inBufEnd = DecBufLen + nRead + 1;\n            }\n\n            int ret = (buf[inBufPos + 1] << 8) | buf[inBufPos];\n            inBufPos += 2;\n\n            return ret;\n        }\n\n        private int ReadCore( byte[] buffer, int offset, int count )\n        {\n            int nToRead = count;\n\n            var buf = decodeBuffer;\n            int inBufLen = inBufEnd - inBufPos;\n\n            int fromBuf = nToRead < inBufLen ? nToRead : inBufLen;\n            if( fromBuf != 0 )\n            {\n                var bufPos = inBufPos;\n\n                for( int c = fromBuf; c-- != 0; )\n                    buffer[offset++] = buf[bufPos++];\n\n                inBufPos = bufPos;\n                nToRead -= fromBuf;\n            }\n\n            if( nToRead != 0 )\n            {\n                int nRead;\n\n                if( nToRead >= InBufLen )\n                {\n                    nRead = input.Read( buffer, offset,\n                        nToRead < inputLength ? nToRead : (int)inputLength );\n                    nToRead -= nRead;\n                }\n                else\n                {\n                    nRead = input.Read( buf, DecBufLen,\n                        InBufLen < inputLength ? InBufLen : (int)inputLength );\n\n                    inBufPos = DecBufLen;\n                    inBufEnd = DecBufLen + nRead;\n\n                    fromBuf = nToRead < nRead ? nToRead : nRead;\n\n                    var bufPos = inBufPos;\n\n                    for( int c = fromBuf; c-- != 0; )\n                        buffer[offset++] = buf[bufPos++];\n\n                    inBufPos = bufPos;\n                    nToRead -= fromBuf;\n                }\n\n                inputLength -= nRead;\n            }\n\n            return count - nToRead;\n        }\n\n        #region Stream internals\n\n        public override bool CanRead\n        {\n            get { return true; }\n        }\n\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n        public override bool CanWrite\n        {\n            get { return false; }\n        }\n\n        public override void Flush()\n        {\n        }\n\n        public override long Length\n        {\n            get { throw new NotSupportedException(); }\n        }\n\n        public override long Position\n        {\n            get { throw new NotSupportedException(); }\n            set { throw new NotSupportedException(); }\n        }\n\n        public override long Seek( long offset, SeekOrigin origin )\n        {\n            throw new NotSupportedException();\n        }\n\n        public override void SetLength( long value )\n        {\n            throw new NotSupportedException();\n        }\n\n        public override void Write( byte[] buffer, int offset, int count )\n        {\n            throw new NotSupportedException();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/Utilities/LzxDecoder.cs",
    "content": "#region HEADER\n/* This file was derived from libmspack\n * (C) 2003-2004 Stuart Caie.\n * (C) 2011 Ali Scissons.\n *\n * The LZX method was created by Jonathan Forbes and Tomi Poutanen, adapted\n * by Microsoft Corporation.\n *\n * This source file is Dual licensed; meaning the end-user of this source file\n * may redistribute/modify it under the LGPL 2.1 or MS-PL licenses.\n */ \n#region LGPL License\n/* GNU LESSER GENERAL PUBLIC LICENSE version 2.1\n * LzxDecoder is free software; you can redistribute it and/or modify it under\n * the terms of the GNU Lesser General Public License (LGPL) version 2.1 \n */\n#endregion\n#region MS-PL License\n/* \n * MICROSOFT PUBLIC LICENSE\n * This source code is subject to the terms of the Microsoft Public License (Ms-PL). \n *  \n * Redistribution and use in source and binary forms, with or without modification, \n * is permitted provided that redistributions of the source code retain the above \n * copyright notices and this file header. \n *  \n * Additional copyright notices should be appended to the list above. \n * \n * For details, see <http://www.opensource.org/licenses/ms-pl.html>. \n */\n#endregion\n/*\n * This derived work is recognized by Stuart Caie and is authorized to adapt\n * any changes made to lzxd.c in his libmspack library and will still retain\n * this dual licensing scheme. Big thanks to Stuart Caie!\n * \n * DETAILS\n * This file is a pure C# port of the lzxd.c file from libmspack, with minor\n * changes towards the decompression of XNB files. The original decompression\n * software of LZX encoded data was written by Suart Caie in his\n * libmspack/cabextract projects, which can be located at \n * http://http://www.cabextract.org.uk/\n */\n#endregion\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    using System.IO;\n    \n    class LzxDecoder\n    {\n        public static uint[] position_base = null;\n        public static byte[] extra_bits = null;\n        \n        private LzxState m_state;\n        \n        public LzxDecoder (int window)\n        {\n            uint wndsize = (uint)(1 << window);\n            int posn_slots;\n            \n            // setup proper exception\n            if(window < 15 || window > 21) throw new UnsupportedWindowSizeRange();\n            \n            // let's initialise our state\n            m_state = new LzxState();\n            m_state.actual_size = 0;\n            m_state.window = new byte[wndsize];\n            for(int i = 0; i < wndsize; i++) m_state.window[i] = 0xDC;\n            m_state.actual_size = wndsize;\n            m_state.window_size = wndsize;\n            m_state.window_posn = 0;\n            \n            /* initialize static tables */\n            if(extra_bits == null)\n            {\n                extra_bits = new byte[52];\n                for(int i = 0, j = 0; i <= 50; i += 2)\n                {\n                    extra_bits[i] = extra_bits[i+1] = (byte)j;\n                    if ((i != 0) && (j < 17)) j++;\n                }\n            }\n            if(position_base == null)\n            {\n                position_base = new uint[51];\n                for(int i = 0, j = 0; i <= 50; i++)\n                {\n                    position_base[i] = (uint)j;\n                    j += 1 << extra_bits[i];\n                }\n            }\n            \n            /* calculate required position slots */\n            if(window == 20) posn_slots = 42;\n            else if(window == 21) posn_slots = 50;\n            else posn_slots = window << 1;\n            \n            m_state.R0 = m_state.R1 = m_state.R2 = 1;\n            m_state.main_elements = (ushort)(LzxConstants.NUM_CHARS + (posn_slots << 3));\n            m_state.header_read = 0;\n            m_state.frames_read = 0;\n            m_state.block_remaining = 0;\n            m_state.block_type = LzxConstants.BLOCKTYPE.INVALID;\n            m_state.intel_curpos = 0;\n            m_state.intel_started = 0;\n            \n            // yo dawg i herd u liek arrays so we put arrays in ur arrays so u can array while u array\n            m_state.PRETREE_table = new ushort[(1 << LzxConstants.PRETREE_TABLEBITS) + (LzxConstants.PRETREE_MAXSYMBOLS << 1)];\n            m_state.PRETREE_len = new byte[LzxConstants.PRETREE_MAXSYMBOLS + LzxConstants.LENTABLE_SAFETY];\n            m_state.MAINTREE_table = new ushort[(1 << LzxConstants.MAINTREE_TABLEBITS) + (LzxConstants.MAINTREE_MAXSYMBOLS << 1)];\n            m_state.MAINTREE_len = new byte[LzxConstants.MAINTREE_MAXSYMBOLS + LzxConstants.LENTABLE_SAFETY];\n            m_state.LENGTH_table = new ushort[(1 << LzxConstants.LENGTH_TABLEBITS) + (LzxConstants.LENGTH_MAXSYMBOLS << 1)];\n            m_state.LENGTH_len = new byte[LzxConstants.LENGTH_MAXSYMBOLS + LzxConstants.LENTABLE_SAFETY];\n            m_state.ALIGNED_table = new ushort[(1 << LzxConstants.ALIGNED_TABLEBITS) + (LzxConstants.ALIGNED_MAXSYMBOLS << 1)];\n            m_state.ALIGNED_len = new byte[LzxConstants.ALIGNED_MAXSYMBOLS + LzxConstants.LENTABLE_SAFETY];\n            /* initialise tables to 0 (because deltas will be applied to them) */\n            for(int i = 0; i < LzxConstants.MAINTREE_MAXSYMBOLS; i++) m_state.MAINTREE_len[i] = 0;\n            for(int i = 0; i < LzxConstants.LENGTH_MAXSYMBOLS; i++) m_state.LENGTH_len[i] = 0;\n        }\n        \n        public int Decompress(Stream inData, int inLen, Stream outData, int outLen)\n        {\n            BitBuffer bitbuf = new BitBuffer(inData);\n            long startpos = inData.Position;\n            long endpos = inData.Position + inLen;\n            \n            byte[] window = m_state.window;\n            \n            uint window_posn = m_state.window_posn;\n            uint window_size = m_state.window_size;\n            uint R0 = m_state.R0;\n            uint R1 = m_state.R1;\n            uint R2 = m_state.R2;\n            uint i, j;\n            \n            int togo = outLen, this_run, main_element, match_length, match_offset, length_footer, extra, verbatim_bits;\n            int rundest, runsrc, copy_length, aligned_bits;\n            \n            bitbuf.InitBitStream();\n            \n            /* read header if necessary */\n            if(m_state.header_read == 0)\n            {\n                uint intel = bitbuf.ReadBits(1);\n                if(intel != 0)\n                {\n                    // read the filesize\n                    i = bitbuf.ReadBits(16); j = bitbuf.ReadBits(16);\n                    m_state.intel_filesize = (int)((i << 16) | j);\n                }\n                m_state.header_read = 1;\n            }\n            \n            /* main decoding loop */\n            while(togo > 0)\n            {\n                /* last block finished, new block expected */\n                if(m_state.block_remaining == 0)\n                {\n                    // TODO may screw something up here\n                    if(m_state.block_type == LzxConstants.BLOCKTYPE.UNCOMPRESSED) {\n                        if((m_state.block_length & 1) == 1) inData.ReadByte(); /* realign bitstream to word */\n                        bitbuf.InitBitStream();\n                    }\n                    \n                    m_state.block_type = (LzxConstants.BLOCKTYPE)bitbuf.ReadBits(3);;\n                    i = bitbuf.ReadBits(16);\n                    j = bitbuf.ReadBits(8);\n                    m_state.block_remaining = m_state.block_length = (uint)((i << 8) | j);\n                    \n                    switch(m_state.block_type)\n                    {\n                    case LzxConstants.BLOCKTYPE.ALIGNED:\n                        for(i = 0, j = 0; i < 8; i++) { j = bitbuf.ReadBits(3); m_state.ALIGNED_len[i] = (byte)j; }\n                        MakeDecodeTable(LzxConstants.ALIGNED_MAXSYMBOLS, LzxConstants.ALIGNED_TABLEBITS,\n                                        m_state.ALIGNED_len, m_state.ALIGNED_table);\n                        /* rest of aligned header is same as verbatim */\n                        goto case LzxConstants.BLOCKTYPE.VERBATIM;\n                        \n                    case LzxConstants.BLOCKTYPE.VERBATIM:\n                        ReadLengths(m_state.MAINTREE_len, 0, 256, bitbuf);\n                        ReadLengths(m_state.MAINTREE_len, 256, m_state.main_elements, bitbuf);\n                        MakeDecodeTable(LzxConstants.MAINTREE_MAXSYMBOLS, LzxConstants.MAINTREE_TABLEBITS,\n                                        m_state.MAINTREE_len, m_state.MAINTREE_table);\n                        if(m_state.MAINTREE_len[0xE8] != 0) m_state.intel_started = 1;\n                        \n                        ReadLengths(m_state.LENGTH_len, 0, LzxConstants.NUM_SECONDARY_LENGTHS, bitbuf);\n                        MakeDecodeTable(LzxConstants.LENGTH_MAXSYMBOLS, LzxConstants.LENGTH_TABLEBITS,\n                                        m_state.LENGTH_len, m_state.LENGTH_table);\n                        break;\n                        \n                    case LzxConstants.BLOCKTYPE.UNCOMPRESSED:\n                        m_state.intel_started = 1; /* because we can't assume otherwise */\n                        bitbuf.EnsureBits(16); /* get up to 16 pad bits into the buffer */\n                        if(bitbuf.GetBitsLeft() > 16) inData.Seek(-2, SeekOrigin.Current); /* and align the bitstream! */\n                        byte hi, mh, ml, lo;\n                        lo = (byte)inData.ReadByte(); ml = (byte)inData.ReadByte(); mh = (byte)inData.ReadByte(); hi = (byte)inData.ReadByte();\n                        R0 = (uint)(lo | ml << 8 | mh << 16 | hi << 24);\n                        lo = (byte)inData.ReadByte(); ml = (byte)inData.ReadByte(); mh = (byte)inData.ReadByte(); hi = (byte)inData.ReadByte();\n                        R1 = (uint)(lo | ml << 8 | mh << 16 | hi << 24);\n                        lo = (byte)inData.ReadByte(); ml = (byte)inData.ReadByte(); mh = (byte)inData.ReadByte(); hi = (byte)inData.ReadByte();\n                        R2 = (uint)(lo | ml << 8 | mh << 16 | hi << 24);\n                        break;\n                        \n                    default:\n                        return -1; // TODO throw proper exception\n                    }\n                }\n                \n                /* buffer exhaustion check */\n                if(inData.Position > (startpos + inLen))\n                {\n                    /* it's possible to have a file where the next run is less than\n                     * 16 bits in size. In this case, the READ_HUFFSYM() macro used\n                     * in building the tables will exhaust the buffer, so we should\n                     * allow for this, but not allow those accidentally read bits to\n                     * be used (so we check that there are at least 16 bits\n                     * remaining - in this boundary case they aren't really part of\n                     * the compressed data)\n                     */\n                    //Debug.WriteLine(\"WTF\");\n\n                    if(inData.Position > (startpos+inLen+2) || bitbuf.GetBitsLeft() < 16) return -1; //TODO throw proper exception\n                }\n                \n                while((this_run = (int)m_state.block_remaining) > 0 && togo > 0)\n                {\n                    if(this_run > togo) this_run = togo;\n                    togo -= this_run;\n                    m_state.block_remaining -= (uint)this_run;\n                    \n                    /* apply 2^x-1 mask */\n                    window_posn &= window_size - 1;\n                    /* runs can't straddle the window wraparound */\n                    if((window_posn + this_run) > window_size)\n                        return -1; //TODO throw proper exception\n                    \n                    switch(m_state.block_type)\n                    {\n                    case LzxConstants.BLOCKTYPE.VERBATIM:\n                        while(this_run > 0)\n                        {\n                            main_element = (int)ReadHuffSym(m_state.MAINTREE_table, m_state.MAINTREE_len,\n                                                       LzxConstants.MAINTREE_MAXSYMBOLS, LzxConstants.MAINTREE_TABLEBITS,\n                                                       bitbuf);\n                            if(main_element < LzxConstants.NUM_CHARS)\n                            {\n                                /* literal: 0 to NUM_CHARS-1 */\n                                window[window_posn++] = (byte)main_element;\n                                this_run--;\n                            }\n                            else\n                            {\n                                /* match: NUM_CHARS + ((slot<<3) | length_header (3 bits)) */\n                                main_element -= LzxConstants.NUM_CHARS;\n                                \n                                match_length = main_element & LzxConstants.NUM_PRIMARY_LENGTHS;\n                                if(match_length == LzxConstants.NUM_PRIMARY_LENGTHS)\n                                {\n                                    length_footer = (int)ReadHuffSym(m_state.LENGTH_table, m_state.LENGTH_len,\n                                                                LzxConstants.LENGTH_MAXSYMBOLS, LzxConstants.LENGTH_TABLEBITS,\n                                                                bitbuf);\n                                    match_length += length_footer;\n                                }\n                                match_length += LzxConstants.MIN_MATCH;\n                                \n                                match_offset = main_element >> 3;\n                                \n                                if(match_offset > 2)\n                                {\n                                    /* not repeated offset */\n                                    if(match_offset != 3)\n                                    {\n                                        extra = extra_bits[match_offset];\n                                        verbatim_bits = (int)bitbuf.ReadBits((byte)extra);\n                                        match_offset = (int)position_base[match_offset] - 2 + verbatim_bits;\n                                    }\n                                    else\n                                    {\n                                        match_offset = 1;\n                                    }\n                                    \n                                    /* update repeated offset LRU queue */\n                                    R2 = R1; R1 = R0; R0 = (uint)match_offset;\n                                }\n                                else if(match_offset == 0)\n                                {\n                                    match_offset = (int)R0;\n                                }\n                                else if(match_offset == 1)\n                                {\n                                    match_offset = (int)R1;\n                                    R1 = R0; R0 = (uint)match_offset;\n                                }\n                                else /* match_offset == 2 */\n                                {\n                                    match_offset = (int)R2;\n                                    R2 = R0; R0 = (uint)match_offset;\n                                }\n                                \n                                rundest = (int)window_posn;\n                                this_run -= match_length;\n                                \n                                /* copy any wrapped around source data */\n                                if(window_posn >= match_offset)\n                                {\n                                    /* no wrap */\n                                    runsrc = rundest - match_offset;\n                                }\n                                else\n                                {\n                                    runsrc = rundest + ((int)window_size - match_offset);\n                                    copy_length = match_offset - (int)window_posn;\n                                    if(copy_length < match_length)\n                                    {\n                                        match_length -= copy_length;\n                                        window_posn += (uint)copy_length;\n                                        while(copy_length-- > 0) window[rundest++] = window[runsrc++];\n                                        runsrc = 0;\n                                    }\n                                }\n                                window_posn += (uint)match_length;\n                                \n                                /* copy match data - no worries about destination wraps */\n                                while(match_length-- > 0) window[rundest++] = window[runsrc++];\n                            }\n                        }\n                        break;\n                    \n                    case LzxConstants.BLOCKTYPE.ALIGNED:\n                        while(this_run > 0)\n                        {\n                            main_element = (int)ReadHuffSym(m_state.MAINTREE_table, m_state.MAINTREE_len,\n                                                                      LzxConstants.MAINTREE_MAXSYMBOLS, LzxConstants.MAINTREE_TABLEBITS,\n                                                                      bitbuf);\n                            \n                            if(main_element < LzxConstants.NUM_CHARS)\n                            {\n                                /* literal 0 to NUM_CHARS-1 */\n                                window[window_posn++] = (byte)main_element;\n                                this_run--;\n                            }\n                            else\n                            {\n                                /* match: NUM_CHARS + ((slot<<3) | length_header (3 bits)) */\n                                main_element -= LzxConstants.NUM_CHARS;\n                                \n                                match_length = main_element & LzxConstants.NUM_PRIMARY_LENGTHS;\n                                if(match_length == LzxConstants.NUM_PRIMARY_LENGTHS)\n                                {\n                                    length_footer = (int)ReadHuffSym(m_state.LENGTH_table, m_state.LENGTH_len,\n                                                                     LzxConstants.LENGTH_MAXSYMBOLS, LzxConstants.LENGTH_TABLEBITS,\n                                                                     bitbuf);\n                                    match_length += length_footer;\n                                }\n                                match_length += LzxConstants.MIN_MATCH;\n                                \n                                match_offset = main_element >> 3;\n                                \n                                if(match_offset > 2)\n                                {\n                                    /* not repeated offset */\n                                    extra = extra_bits[match_offset];\n                                    match_offset = (int)position_base[match_offset] - 2;\n                                    if(extra > 3)\n                                    {\n                                        /* verbatim and aligned bits */\n                                        extra -= 3;\n                                        verbatim_bits = (int)bitbuf.ReadBits((byte)extra);\n                                        match_offset += (verbatim_bits << 3);\n                                        aligned_bits = (int)ReadHuffSym(m_state.ALIGNED_table, m_state.ALIGNED_len,\n                                                                   LzxConstants.ALIGNED_MAXSYMBOLS, LzxConstants.ALIGNED_TABLEBITS,\n                                                                   bitbuf);\n                                        match_offset += aligned_bits;\n                                    }\n                                    else if(extra == 3)\n                                    {\n                                        /* aligned bits only */\n                                        aligned_bits = (int)ReadHuffSym(m_state.ALIGNED_table, m_state.ALIGNED_len,\n                                                                   LzxConstants.ALIGNED_MAXSYMBOLS, LzxConstants.ALIGNED_TABLEBITS,\n                                                                   bitbuf);\n                                        match_offset += aligned_bits;\n                                    }\n                                    else if (extra > 0) /* extra==1, extra==2 */\n                                    {\n                                        /* verbatim bits only */\n                                        verbatim_bits = (int)bitbuf.ReadBits((byte)extra);\n                                        match_offset += verbatim_bits;\n                                    }\n                                    else /* extra == 0 */\n                                    {\n                                        /* ??? */\n                                        match_offset = 1;\n                                    }\n                                    \n                                    /* update repeated offset LRU queue */\n                                    R2 = R1; R1 = R0; R0 = (uint)match_offset;\n                                }\n                                else if( match_offset == 0)\n                                {\n                                    match_offset = (int)R0;\n                                }\n                                else if(match_offset == 1)\n                                {\n                                    match_offset = (int)R1;\n                                    R1 = R0; R0 = (uint)match_offset;\n                                }\n                                else /* match_offset == 2 */\n                                {\n                                    match_offset = (int)R2;\n                                    R2 = R0; R0 = (uint)match_offset;\n                                }\n                                \n                                rundest = (int)window_posn;\n                                this_run -= match_length;\n                                \n                                /* copy any wrapped around source data */\n                                if(window_posn >= match_offset)\n                                {\n                                    /* no wrap */\n                                    runsrc = rundest - match_offset;\n                                }\n                                else\n                                {\n                                    runsrc = rundest + ((int)window_size - match_offset);\n                                    copy_length = match_offset - (int)window_posn;\n                                    if(copy_length < match_length)\n                                    {\n                                        match_length -= copy_length;\n                                        window_posn += (uint)copy_length;\n                                        while(copy_length-- > 0) window[rundest++] = window[runsrc++];\n                                        runsrc = 0;\n                                    }\n                                }\n                                window_posn += (uint)match_length;\n                                \n                                /* copy match data - no worries about destination wraps */\n                                while(match_length-- > 0) window[rundest++] = window[runsrc++];\n                            }\n                        }\n                        break;\n                        \n                    case LzxConstants.BLOCKTYPE.UNCOMPRESSED:\n                        if((inData.Position + this_run) > endpos) return -1; //TODO throw proper exception\n                        byte[] temp_buffer = new byte[this_run];\n                        inData.Read(temp_buffer, 0, this_run);\n                        temp_buffer.CopyTo(window, (int)window_posn);\n                        window_posn += (uint)this_run;\n                        break;\n                        \n                    default:\n                        return -1; //TODO throw proper exception\n                    }\n                }\n            }\n            \n            if(togo != 0) return -1; //TODO throw proper exception\n            int start_window_pos = (int)window_posn;\n            if(start_window_pos == 0) start_window_pos = (int)window_size;\n            start_window_pos -= outLen;\n            outData.Write(window, start_window_pos, outLen);\n            \n            m_state.window_posn = window_posn;\n            m_state.R0 = R0;\n            m_state.R1 = R1;\n            m_state.R2 = R2;\n            \n            // TODO finish intel E8 decoding\n            /* intel E8 decoding */\n            if((m_state.frames_read++ < 32768) && m_state.intel_filesize != 0)\n            {\n                if(outLen <= 6 || m_state.intel_started == 0)\n                {\n                    m_state.intel_curpos += outLen;\n                }\n                else\n                {\n                    int dataend = outLen - 10;\n                    uint curpos = (uint)m_state.intel_curpos;\n                    \n                    m_state.intel_curpos = (int)curpos + outLen;\n                    \n                    while(outData.Position < dataend)\n                    {\n                        if(outData.ReadByte() != 0xE8) { curpos++; continue; }\n                    }\n                }\n                return -1;\n            }\n            return 0;\n        }\n        \n        // READ_LENGTHS(table, first, last)\n        // if(lzx_read_lens(LENTABLE(table), first, last, bitsleft))\n        //   return ERROR (ILLEGAL_DATA)\n        // \n        \n        // TODO make returns throw exceptions\n        private int MakeDecodeTable(uint nsyms, uint nbits, byte[] length, ushort[] table)\n        {\n            ushort sym;\n            uint leaf;\n            byte bit_num = 1;\n            uint fill;\n            uint pos\t\t\t= 0; /* the current position in the decode table */\n            uint table_mask\t\t= (uint)(1 << (int)nbits);\n            uint bit_mask\t\t= table_mask >> 1; /* don't do 0 length codes */\n            uint next_symbol\t= bit_mask;\t/* base of allocation for long codes */\n            \n            /* fill entries for codes short enough for a direct mapping */\n            while (bit_num <= nbits )\n            {\n                for(sym = 0; sym < nsyms; sym++)\n                {\n                    if(length[sym] == bit_num)\n                    {\n                        leaf = pos;\n                        \n                        if((pos += bit_mask) > table_mask) return 1; /* table overrun */\n                        \n                        /* fill all possible lookups of this symbol with the symbol itself */\n                        fill = bit_mask;\n                        while(fill-- > 0) table[leaf++] = sym;\n                    }\n                }\n                bit_mask >>= 1;\n                bit_num++;\n            }\n            \n            /* if there are any codes longer than nbits */\n            if(pos != table_mask)\n            {\n                /* clear the remainder of the table */\n                for(sym = (ushort)pos; sym < table_mask; sym++) table[sym] = 0;\n                \n                /* give ourselves room for codes to grow by up to 16 more bits */\n                pos <<= 16;\n                table_mask <<= 16;\n                bit_mask = 1 << 15;\n                \n                while(bit_num <= 16)\n                {\n                    for(sym = 0; sym < nsyms; sym++)\n                    {\n                        if(length[sym] == bit_num)\n                        {\n                            leaf = pos >> 16;\n                            for(fill = 0; fill < bit_num - nbits; fill++)\n                            {\n                                /* if this path hasn't been taken yet, 'allocate' two entries */\n                                if(table[leaf] == 0)\n                                {\n                                    table[(next_symbol << 1)] = 0;\n                                    table[(next_symbol << 1) + 1] = 0;\n                                    table[leaf] = (ushort)(next_symbol++);\n                                }\n                                /* follow the path and select either left or right for next bit */\n                                leaf = (uint)(table[leaf] << 1);\n                                if(((pos >> (int)(15-fill)) & 1) == 1) leaf++;\n                            }\n                            table[leaf] = sym;\n                            \n                            if((pos += bit_mask) > table_mask) return 1;\n                        }\n                    }\n                    bit_mask >>= 1;\n                    bit_num++;\n                }\n            }\n            \n            /* full talbe? */\n            if(pos == table_mask) return 0;\n            \n            /* either erroneous table, or all elements are 0 - let's find out. */\n            for(sym = 0; sym < nsyms; sym++) if(length[sym] != 0) return 1;\n            return 0;\n        }\n        \n        // TODO throw exceptions instead of returns\n        private void ReadLengths(byte[] lens, uint first, uint last, BitBuffer bitbuf)\n        {\n            uint x, y;\n            int z;\n            \n            // hufftbl pointer here?\n            \n            for(x = 0; x < 20; x++)\n            {\n                y = bitbuf.ReadBits(4);\n                m_state.PRETREE_len[x] = (byte)y;\n            }\n            MakeDecodeTable(LzxConstants.PRETREE_MAXSYMBOLS, LzxConstants.PRETREE_TABLEBITS,\n                            m_state.PRETREE_len, m_state.PRETREE_table);\n            \n            for(x = first; x < last;)\n            {\n                z = (int)ReadHuffSym(m_state.PRETREE_table, m_state.PRETREE_len,\n                                LzxConstants.PRETREE_MAXSYMBOLS, LzxConstants.PRETREE_TABLEBITS, bitbuf);\n                if(z == 17)\n                {\n                    y = bitbuf.ReadBits(4); y += 4;\n                    while(y-- != 0) lens[x++] = 0;\n                }\n                else if(z == 18)\n                {\n                    y = bitbuf.ReadBits(5); y += 20;\n                    while(y-- != 0) lens[x++] = 0;\n                }\n                else if(z == 19)\n                {\n                    y = bitbuf.ReadBits(1); y += 4;\n                    z = (int)ReadHuffSym(m_state.PRETREE_table, m_state.PRETREE_len,\n                                LzxConstants.PRETREE_MAXSYMBOLS, LzxConstants.PRETREE_TABLEBITS, bitbuf);\n                    z = lens[x] - z; if(z < 0) z += 17;\n                    while(y-- != 0) lens[x++] = (byte)z;\n                }\n                else\n                {\n                    z = lens[x] - z; if(z < 0) z += 17;\n                    lens[x++] = (byte)z;\n                }\n            }\n        }\n        \n        private uint ReadHuffSym(ushort[] table, byte[] lengths, uint nsyms, uint nbits, BitBuffer bitbuf)\n        {\n            uint i, j;\n            bitbuf.EnsureBits(16);\n            if((i = table[bitbuf.PeekBits((byte)nbits)]) >= nsyms)\n            {\n                j = (uint)(1 << (int)((sizeof(uint)*8) - nbits));\n                do\n                {\n                    j >>= 1; i <<= 1; i |= (bitbuf.GetBuffer() & j) != 0 ? (uint)1 : 0;\n                    if(j == 0) return 0; // TODO throw proper exception\n                } while((i = table[i]) >= nsyms);\n            }\n            j = lengths[i];\n            bitbuf.RemoveBits((byte)j);\n            \n            return i;\n        }\n        \n        #region Our BitBuffer Class\n        private class BitBuffer\n        {\n            uint buffer;\n            byte bitsleft;\n            Stream byteStream;\n            \n            public BitBuffer(Stream stream)\n            {\n                byteStream = stream;\n                InitBitStream();\n            }\n            \n            public void InitBitStream()\n            {\n                buffer = 0;\n                bitsleft = 0;\n            }\n            \n            public void EnsureBits(byte bits)\n            {\n                while(bitsleft < bits) {\n                    int lo = (byte)byteStream.ReadByte();\n                    int hi = (byte)byteStream.ReadByte();\n                    //int amount2shift = sizeof(uint)*8 - 16 - bitsleft;\n                    buffer |= (uint)(((hi << 8) | lo) << (sizeof(uint)*8 - 16 - bitsleft));\n                    bitsleft += 16;\n                }\n            }\n            \n            public uint PeekBits(byte bits)\n            {\n                return (buffer >> ((sizeof(uint)*8) - bits));\n            }\n            \n            public void RemoveBits(byte bits)\n            {\n                buffer <<= bits;\n                bitsleft -= bits;\n            }\n            \n            public uint ReadBits(byte bits)\n            {\n                uint ret = 0;\n                \n                if(bits > 0)\n                {\n                    EnsureBits(bits);\n                    ret = PeekBits(bits);\n                    RemoveBits(bits);\n                }\n                \n                return ret;\n            }\n            \n            public uint GetBuffer()\n            {\n                return buffer;\n            }\n            \n            public byte GetBitsLeft()\n            {\n                return bitsleft;\n            }\n        }\n        #endregion\n        \n        struct LzxState {\n            public uint\t\t\t\t\t\tR0, R1, R2;\t\t\t/* for the LRU offset system\t\t\t\t*/\n            public ushort\t\t\t\t\tmain_elements;\t\t/* number of main tree elements\t\t\t\t*/\n            public int\t\t\t\t\t\theader_read;\t\t/* have we started decoding at all yet? \t*/\n            public LzxConstants.BLOCKTYPE\tblock_type;\t\t\t/* type of this block\t\t\t\t\t\t*/\n            public uint\t\t\t\t\t\tblock_length;\t\t/* uncompressed length of this block \t\t*/\n            public uint\t\t\t\t\t\tblock_remaining;\t/* uncompressed bytes still left to decode\t*/\n            public uint\t\t\t\t\t\tframes_read;\t\t/* the number of CFDATA blocks processed\t*/\n            public int\t\t\t\t\t\tintel_filesize;\t\t/* magic header value used for transform\t*/\n            public int\t\t\t\t\t\tintel_curpos;\t\t/* current offset in transform space\t\t*/\n            public int\t\t\t\t\t\tintel_started;\t\t/* have we seen any translateable data yet?\t*/\n            \n            public ushort[]\t\tPRETREE_table;\n            public byte[]\t\tPRETREE_len;\n            public ushort[]\t\tMAINTREE_table;\n            public byte[]\t\tMAINTREE_len;\n            public ushort[]\t\tLENGTH_table;\n            public byte[]\t\tLENGTH_len;\n            public ushort[]\t\tALIGNED_table;\n            public byte[]\t\tALIGNED_len;\n            \n            // NEEDED MEMBERS\n            // CAB actualsize\n            // CAB window\n            // CAB window_size\n            // CAB window_posn\n            public uint\t\tactual_size;\n            public byte[]\twindow;\n            public uint\t\twindow_size;\n            public uint\t\twindow_posn;\n        }\n    }\n    \n    /* CONSTANTS */\n    struct LzxConstants {\n        public const ushort MIN_MATCH =\t\t\t\t2;\n        public const ushort MAX_MATCH =\t\t\t\t257;\n        public const ushort NUM_CHARS =\t\t\t\t256;\n        public enum BLOCKTYPE {\n            INVALID = 0,\n            VERBATIM = 1,\n            ALIGNED = 2,\n            UNCOMPRESSED = 3\n        }\n        public const ushort PRETREE_NUM_ELEMENTS =\t20;\n        public const ushort ALIGNED_NUM_ELEMENTS =\t8;\n        public const ushort NUM_PRIMARY_LENGTHS =\t7;\n        public const ushort NUM_SECONDARY_LENGTHS = 249;\n        \n        public const ushort PRETREE_MAXSYMBOLS = \tPRETREE_NUM_ELEMENTS;\n        public const ushort PRETREE_TABLEBITS =\t\t6;\n        public const ushort MAINTREE_MAXSYMBOLS = \tNUM_CHARS + 50*8;\n        public const ushort MAINTREE_TABLEBITS = \t12;\n        public const ushort LENGTH_MAXSYMBOLS = \tNUM_SECONDARY_LENGTHS + 1;\n        public const ushort LENGTH_TABLEBITS =\t\t12;\n        public const ushort ALIGNED_MAXSYMBOLS = \tALIGNED_NUM_ELEMENTS;\n        public const ushort ALIGNED_TABLEBITS = \t7;\n                \n        public const ushort LENTABLE_SAFETY =\t\t64;\n    }\n    \n    /* EXCEPTIONS */\n    class UnsupportedWindowSizeRange : Exception\n    {\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content/Content/Utilities/LzxDecoderStream.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class LzxDecoderStream : Stream\n    {\n        LzxDecoder dec;\n        MemoryStream decompressedStream;\n\n        public LzxDecoderStream(Stream input, int decompressedSize, int compressedSize)\n        {\n            dec = new LzxDecoder(16);\n\n            // TODO: Rewrite using block decompression like Lz4DecoderStream\n            Decompress(input, decompressedSize, compressedSize);\n        }\n\n        // Decompress into MemoryStream\n        private void Decompress(Stream stream, int decompressedSize, int compressedSize)\n        {\n            //thanks to ShinAli (https://bitbucket.org/alisci01/xnbdecompressor)\n            // default window size for XNB encoded files is 64Kb (need 16 bits to represent it)\n            decompressedStream = new MemoryStream(decompressedSize);\n            long startPos = stream.Position;\n            long pos = startPos;\n            \n            while (pos - startPos < compressedSize)\n            {\n                // the compressed stream is seperated into blocks that will decompress\n                // into 32Kb or some other size if specified.\n                // normal, 32Kb output blocks will have a short indicating the size\n                // of the block before the block starts\n                // blocks that have a defined output will be preceded by a byte of value\n                // 0xFF (255), then a short indicating the output size and another\n                // for the block size\n                // all shorts for these cases are encoded in big endian order\n                int hi = stream.ReadByte();\n                int lo = stream.ReadByte();\n                int block_size = (hi << 8) | lo;\n                int frame_size = 0x8000; // frame size is 32Kb by default\n                                         // does this block define a frame size?\n                if (hi == 0xFF)\n                {\n                    hi = lo;\n                    lo = (byte)stream.ReadByte();\n                    frame_size = (hi << 8) | lo;\n                    hi = (byte)stream.ReadByte();\n                    lo = (byte)stream.ReadByte();\n                    block_size = (hi << 8) | lo;\n                    pos += 5;\n                }\n                else\n                    pos += 2;\n\n                // either says there is nothing to decode\n                if (block_size == 0 || frame_size == 0)\n                    break;\n\n                dec.Decompress(stream, block_size, decompressedStream, frame_size);\n                pos += block_size;\n\n                // reset the position of the input just incase the bit buffer\n                // read in some unused bytes\n                stream.Seek(pos, SeekOrigin.Begin);\n            }\n\n            if (decompressedStream.Position != decompressedSize)\n            {\n                throw new ContentLoadException(\"Decompression failed.\");\n            }\n\n            decompressedStream.Seek(0, SeekOrigin.Begin);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            base.Dispose(disposing);\n            if(disposing)\n            {                \n                decompressedStream.Dispose();\n            }            \n            dec = null;\n            decompressedStream = null;\n        }\n\n        #region Stream internals\n\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            return decompressedStream.Read(buffer, offset, count);\n        }\n\n        public override bool CanRead\n        {\n            get { return true; }\n        }\n\n\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n        public override bool CanWrite\n        {\n            get { return false; }\n        }\n\n        public override void Flush()\n        {\n        }\n\n        public override long Length\n        {\n            get { throw new NotSupportedException(); }\n        }\n\n        public override long Position\n        {\n            get { throw new NotSupportedException(); }\n            set { throw new NotSupportedException(); }\n        }\n\n\n        public override long Seek(long offset, SeekOrigin origin)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SetLength(long value)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            throw new NotImplementedException();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Content/Utilities/ReflectionHelpers.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Reflection;\n\nnamespace Microsoft.Xna.Platform.Content.Utilities\n{\n    internal static partial class ReflectionHelpers\n    {\n        public static bool IsValueType(Type targetType)\n        {\n#if WINRT\n            return targetType.GetTypeInfo().IsValueType;\n#else\n            return targetType.IsValueType;\n#endif\n        }\n\n        public static Type GetBaseType(Type targetType)\n        {\n#if WINRT\n            return targetType.GetTypeInfo().BaseType;\n#else\n            return targetType.BaseType;\n#endif\n        }\n\n        /// <summary>\n        /// Returns the Assembly of a Type\n        /// </summary>\n        public static Assembly GetAssembly(Type targetType)\n        {\n#if WINRT\n            return targetType.GetTypeInfo().Assembly;\n#else\n            return targetType.Assembly;\n#endif\n        }\n\n        /// <summary>\n        /// Returns true if the given type represents a non-object type that is not abstract.\n        /// </summary>\n        public static bool IsConcreteClass(Type t)\n        {\n            if (t == typeof(object))\n                return false;\n#if WINRT\n            var ti = t.GetTypeInfo();\n            return (ti.IsClass && !ti.IsAbstract);\n#else            \n            return (t.IsClass && !t.IsAbstract);\n#endif\n        }\n\n        public static MethodInfo GetMethodInfo(Type type, string methodName)\n        {\n#if WINRT\n            return type.GetTypeInfo().GetDeclaredMethod(methodName);\n#else\n            return type.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);\n#endif\n        }\n\n        public static MethodInfo GetPropertyGetMethod(PropertyInfo property)\n        {\n#if WINRT\n            return property.GetMethod;\n#else\n            return property.GetGetMethod();\n#endif\n        }\n\n        public static MethodInfo GetPropertySetMethod(PropertyInfo property)\n        {\n#if WINRT\n            return property.SetMethod;\n#else\n            return property.GetSetMethod();\n#endif\n        }\n\n        public static T GetCustomAttribute<T>(MemberInfo member) where T : Attribute\n        {\n#if WINRT\n            return member.GetCustomAttribute(typeof(T)) as T;\n#else\n            return Attribute.GetCustomAttribute(member, typeof(T)) as T;\n#endif\n        }\n\n        /// <summary>\n        /// Returns true if the get method of the given property exist and are public.\n        /// Note that we allow a getter-only property to be serialized (and deserialized),\n        /// *if* CanDeserializeIntoExistingObject is true for the property type.\n        /// </summary>\n        public static bool PropertyIsPublic(PropertyInfo property)\n        {\n            var getMethod = GetPropertyGetMethod(property);\n\n            return (getMethod != null && getMethod.IsPublic);\n        }\n\n        /// <summary>\n        /// Returns true if the given type can be assigned the given value\n        /// </summary>\n        public static bool IsAssignableFrom(Type type, object value)\n        {\n            return IsAssignableFromType(type, value.GetType());\n        }\n\n        /// <summary>\n        /// Returns true if the given type can be assigned a value with the given object type\n        /// </summary>\n        public static bool IsAssignableFromType(Type type, Type objectType)\n        {\n#if WINRT\n            return (type.GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo()));\n#else\n            return (type.IsAssignableFrom(objectType));\n#endif\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/ILLink.Descriptors.xml",
    "content": "<linker>\n  <assembly fullname=\"Xna.Framework.Content\" >\n    <type fullname=\"Microsoft.Xna.Framework.Content.ArrayReader`1\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.BooleanReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.BoundingBoxReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.BoundingFrustumReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.BoundingSphereReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.ByteReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.CharReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.ComplexReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.CurveReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.DateTimeReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.DecimalReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.DictionaryReader`2\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.DoubleReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.EnumReader`1\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.ExternalReferenceReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.Int16Reader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.Int32Reader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.Int64Reader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.ListReader`1\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.MatrixReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.MultiArrayReader`1\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.NullableReader`1\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.PlaneReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.PointReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.QuaternionReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.RayReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.RectangleReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.ReflectiveReader`1\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.SByteReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.SingleReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.StringReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.TimeSpanReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.UInt16Reader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.UInt32Reader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.UInt64Reader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.Vector2Reader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.Vector3Reader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.Vector4Reader\" preserve=\"all\" />\n  </assembly>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/NamespaceDoc.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    /// <summary>\n    /// The runtime support for loading content pipeline content.\n    /// </summary>\n    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    class NamespaceDoc\n    {\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content/Properties/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n[assembly:InternalsVisibleTo(\"Kni.Tests\")]\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/TitleContainer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Content.Utilities;\n\nnamespace Microsoft.Xna.Platform\n{\n    public interface ITitleContainer\n    {\n        string Location { get; }\n\n        TitlePlatform Platform { get; }\n\n        Stream OpenStream(string name);\n    }\n\n    public interface IPlatformTitleContainer\n    {\n        T GetStrategy<T>() where T : TitleContainerStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Provides functionality for opening a stream in the title storage area.\n    /// </summary>\n    public sealed class TitleContainer : ITitleContainer\n        , IPlatformTitleContainer\n    {\n        private static TitleContainer _current;\n\n        /// <summary>\n        /// Returns the current TitleContainer instance.\n        /// </summary> \n        public static TitleContainer Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(TitleContainer))\n                {\n                    if (_current == null)\n                        _current = new TitleContainer();\n\n                    return _current;\n                }\n            }\n        }\n\n        public static TitlePlatform Platform\n        {\n            get { return ((ITitleContainer)TitleContainer.Current).Platform; }\n        }\n\n        /// <summary>\n        /// Returns an open stream to an existing file in the title storage area.\n        /// </summary>\n        /// <param name=\"name\">The filepath relative to the title storage area.</param>\n        /// <returns>A open stream or null if the file is not found.</returns>\n        public static Stream OpenStream(string name)\n        {\n            return ((ITitleContainer)TitleContainer.Current).OpenStream(name);\n        }\n\n        private TitleContainerStrategy _strategy;\n\n        T IPlatformTitleContainer.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private TitleContainer()\n        {\n            _strategy = TitleContainerFactory.Current.CreateTitleContainerStrategy();\n        }\n\n        #region ITitleContainer\n\n        string ITitleContainer.Location\n        {\n            get { return _strategy.Location; }\n        }\n\n        TitlePlatform ITitleContainer.Platform\n        {\n            get { return _strategy.Platform; }\n        }\n\n\n        Stream ITitleContainer.OpenStream(string name)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            // We do not accept absolute paths here.\n            if (Path.IsPathRooted(name))\n                throw new ArgumentException(\"Invalid filename. TitleContainer.OpenStream requires a relative path.\", name);\n\n            // Normalize the file path.\n            string safeName = TitleContainer.NormalizeRelativePath(name);\n\n            // Call the platform code to open the stream.\n            // Any errors at this point should result in a file not found.\n            try\n            {\n                Stream stream = _strategy.PlatformOpenStream(safeName);\n                if (stream != null)\n                    return stream;\n                else\n                    throw new FileNotFoundException(\"Error loading \\\"\" + name + \"\\\". File not found.\");\n            }\n            catch (FileNotFoundException)\n            {\n                throw;\n            }\n            catch (Exception ex)\n            {\n                throw new FileNotFoundException(name, ex);\n            }\n        }\n\n        #endregion ITitleContainer\n\n        private static string NormalizeRelativePath(string name)\n        {\n            Uri uri = new Uri(\"file:///\" + FileHelpers.UrlEncode(name));\n            string path = uri.LocalPath;\n            path = path.Substring(1);\n            path = path.Replace(FileHelpers.NotSeparator, FileHelpers.Separator);\n\n            return path;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/TitleContainerFactory.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public abstract class TitleContainerFactory\n    {\n        private volatile static TitleContainerFactory _current;\n\n        internal static TitleContainerFactory Current\n        {\n            get\n            {\n                TitleContainerFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (typeof(TitleContainerFactory))\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"TitleContainerFactory not found.\");\n                    Console.WriteLine(\"Initialize title with 'TitleContainerFactory.RegisterTitleContainerFactory(new ConcreteTitleContainerFactory());'.\");\n                    TitleContainerFactory titleContainerFactory = CreateTitleContainerFactory();\n                    TitleContainerFactory.RegisterTitleContainerFactory(titleContainerFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static TitleContainerFactory CreateTitleContainerFactory()\n        {\n            Console.WriteLine(\"Registering Concrete TitleContainerFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.ConcreteTitleContainerFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(TitleContainerFactory)) && !type.IsAbstract)\n                    return (TitleContainerFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterTitleContainerFactory(TitleContainerFactory titleContainerFactory)\n        {\n            if (titleContainerFactory == null)\n                throw new NullReferenceException(\"titleContainerFactory\");\n\n            lock (typeof(TitleContainerFactory))\n            {\n                if (_current == null)\n                    _current = titleContainerFactory;\n                else\n                    throw new InvalidOperationException(\"TitleContainerFactory allready registered.\");\n            }\n        }\n\n        public abstract TitleContainerStrategy CreateTitleContainerStrategy();\n    }\n\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content/TitleContainerStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n\n    public abstract class TitleContainerStrategy\n    {\n        public abstract string Location { get; }\n\n        public abstract TitlePlatform Platform { get; }\n\n        protected TitleContainerStrategy()\n        {\n            \n        }\n\n        public abstract Stream PlatformOpenStream(string name);\n\n        public virtual Stream DecompressBrotliStream(Stream stream, uint compressedDataSize, uint decompressedDataSize)\n        {\n#if NET6_0_OR_GREATER\n            Stream decompressedStream = new MemoryStream((int)decompressedDataSize);\n            using (var brotliStream = new System.IO.Compression.BrotliStream(stream, System.IO.Compression.CompressionMode.Decompress, true))\n            {\n                brotliStream.CopyTo(decompressedStream, (int)decompressedDataSize);\n            }\n            decompressedStream.Seek(0, SeekOrigin.Begin);\n            return decompressedStream;\n#else\n            throw new PlatformNotSupportedException(\"ContentCompression Brotli not Supported.\");\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/TitlePlatform.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    public enum TitlePlatform\n    {\n        Windows    = 0x0011,\n        UAP        = 0x0012,\n        SDL        = 0x0014, // DesktopGL\n\n        Android    = 0x0021,\n        iOS        = 0x0022,\n        tvOS       = 0x0024,\n\n        BlazorWASM = 0x0031,\n\n        Oculus     = 0x0041,\n\n        XboxOne        = 0x0051,\n        NintendoSwitch = 0x0052,\n        PlayStation5   = 0x0054,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content/Xna.Framework.Content.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Content\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Content</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Content</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Content framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Content</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"NamespaceDoc.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Content\\ContentReaders\\ArrayReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\BooleanReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\BoundingBoxReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\BoundingFrustumReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\BoundingSphereReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\ByteReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\CharReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\ComplexReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\CurveReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\DateTimeReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\DecimalReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\DictionaryReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\DoubleReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\EnumReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\ExternalReferenceReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\Int16Reader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\Int32Reader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\Int64Reader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\ListReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\MatrixReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\MultiArrayReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\NullableReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\PlaneReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\PointReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\QuaternionReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\RayReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\RectangleReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\ReflectiveReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\SByteReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\SingleReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\StringReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\TimeSpanReader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\UInt16Reader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\UInt32Reader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\UInt64Reader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\Vector2Reader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\Vector3Reader.cs\" />\n    <Compile Include=\"Content\\ContentReaders\\Vector4Reader.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\ContentLoadException.cs\" />\n    <Compile Include=\"Content\\ContentManager.cs\" />\n    <Compile Include=\"Content\\ContentReader.cs\" />\n    <Compile Include=\"Content\\ContentSerializerAttribute.cs\" />\n    <Compile Include=\"Content\\ContentSerializerIgnoreAttribute.cs\" />\n    <Compile Include=\"Content\\ContentTypeReader.cs\" />\n    <Compile Include=\"Content\\ContentTypeReaderManager.cs\" />\n    <Compile Include=\"Content\\ResourceContentManager.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\ContentSerializerCollectionItemNameAttribute.cs\" />\n    <Compile Include=\"Content\\ContentSerializerRuntimeTypeAttribute.cs\" />\n    <Compile Include=\"Content\\ContentSerializerTypeVersionAttribute.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Content\\Utilities\\ContentBufferPool.cs\" />\n    <Compile Include=\"Content\\Utilities\\ContentExtensions.cs\" />\n    <Compile Include=\"Content\\Utilities\\FileHelpers.cs\" />\n    <Compile Include=\"Content\\Utilities\\Lz4DecoderStream.cs\" />\n    <Compile Include=\"Content\\Utilities\\LzxDecoderStream.cs\" />\n    <Compile Include=\"Content\\Utilities\\LzxDecoder.cs\" />\n    <Compile Include=\"Content\\Utilities\\ReflectionHelpers.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"TitleContainer.cs\" />\n    <Compile Include=\"TitleContainerFactory.cs\" />\n    <Compile Include=\"TitleContainerStrategy.cs\" />\n    <Compile Include=\"TitlePlatform.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ChildCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides a collection of child objects for a content item.\n    /// \n    /// Links from a child object to its parent are maintained as the collection contents are modified.\n    /// </summary>\n    /// <typeparam name=\"TParent\"></typeparam>\n    /// <typeparam name=\"TChild\"></typeparam>\n    public abstract class ChildCollection<TParent, TChild> : Collection<TChild>\n        where TParent : class\n        where TChild : class\n    {\n        TParent parent;\n\n        /// <summary>\n        /// Creates an instance of ChildCollection.\n        /// </summary>\n        /// <param name=\"parent\">Parent object of the child objects returned in the collection.</param>\n        protected ChildCollection(TParent parent)\n            : base()\n        {\n            if (parent == null)\n                throw new ArgumentNullException(\"parent\");\n            this.parent = parent;\n        }\n\n        /// <summary>\n        /// Removes all children from the collection.\n        /// </summary>\n        protected override void ClearItems()\n        {\n            // Remove parent reference from each child before clearing\n            foreach (TChild child in this)\n                SetParent(child, default(TParent));\n            base.ClearItems();\n        }\n\n        /// <summary>\n        /// Gets the parent of a child object.\n        /// </summary>\n        /// <param name=\"child\">The child of the parent being retrieved.</param>\n        /// <returns>The parent of the child object.</returns>\n        protected abstract TParent GetParent(TChild child);\n\n        /// <summary>\n        /// Inserts a child object into the collection at the specified location.\n        /// </summary>\n        /// <param name=\"index\">The position in the collection.</param>\n        /// <param name=\"item\">The child object being inserted.</param>\n        protected override void InsertItem(int index, TChild item)\n        {\n            // Make sure we have a \n            if (item == null)\n                throw new ArgumentNullException(\"child\");\n            if (GetParent(item) != null)\n                throw new InvalidOperationException(\"Child already has a parent\");\n            SetParent(item, parent);\n            base.InsertItem(index, item);\n        }\n\n        /// <summary>\n        /// Removes a child object from the collection.\n        /// </summary>\n        /// <param name=\"index\">The index of the item being removed.</param>\n        protected override void RemoveItem(int index)\n        {\n            TChild child = this[index];\n            SetParent(child, default(TParent));\n            base.RemoveItem(index);\n        }\n\n        /// <summary>\n        /// Modifies the value of the child object at the specified location.\n        /// </summary>\n        /// <param name=\"index\">The index of the child object being modified.</param>\n        /// <param name=\"item\">The new value for the child object.</param>\n        protected override void SetItem(int index, TChild item)\n        {\n            if (item == null)\n                throw new ArgumentNullException(\"child\");\n            if (GetParent(item) != null)\n                throw new InvalidOperationException(\"Child already has a parent\");\n            TChild child = this[index];\n            SetParent(child, default(TParent));\n            SetParent(item, parent);\n            base.SetItem(index, item);\n        }\n\n        /// <summary>\n        /// Modifies the value of the parent object of the specified child object.\n        /// </summary>\n        /// <param name=\"child\">The child of the parent being modified.</param>\n        /// <param name=\"parent\">The new value for the parent object.</param>\n        protected abstract void SetParent(TChild child, TParent parent);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentBuildLogger.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reporting informational messages or warnings from content importers and processors.\n    /// Do not use this class to report errors. Instead, report errors by throwing a PipelineException or InvalidContentException.\n    /// </summary>\n    public abstract class ContentBuildLogger\n    {\n        readonly Stack<string> _filenames = new Stack<string>();\n\n\n        /// <summary>\n        /// Initializes a new instance of ContentBuildLogger.\n        /// </summary>\n        protected ContentBuildLogger()\n        {\n        }\n\n        /// <summary>\n        /// Returns the relative path to the filename from the root directory.\n        /// </summary>\n        /// <param name=\"filename\">The target filename.</param>\n        /// <returns>The relative path.</returns>\n        string GetRelativePath(string filename)\n        {\n            var currentDirectory = Path.GetFullPath(\".\");\n            filename = Path.GetFullPath(filename);\n            if (filename.StartsWith(currentDirectory))\n                filename = filename.Substring(currentDirectory.Length);\n            return filename;\n        }\n\n        /// <summary>\n        /// Gets the filename currently being processed, for use in warning and error messages.\n        /// </summary>\n        /// <param name=\"contentIdentity\">Identity of a content item. If specified, GetCurrentFilename uses this value to refine the search. If no value is specified, the current PushFile state is used.</param>\n        /// <returns>Name of the file being processed.</returns>\n        protected string GetCurrentFilename(ContentIdentity contentIdentity)\n        {\n            string filename = null;\n\n            if ((contentIdentity != null) && !string.IsNullOrEmpty(contentIdentity.SourceFilename))\n                filename = contentIdentity.SourceFilename;\n            else if (_filenames.Count > 0)\n                filename = _filenames.Peek();\n\n            // This convert's filepaths to relative if they are rooted in the current directory.\n            // TODO: Move this out to concrete classes.\n            if (filename != null)                \n                filename = GetRelativePath(filename);\n\n            return filename;\n        }\n\n        /// <summary>\n        /// Outputs a high-priority status message from a content importer or processor.\n        /// </summary>\n        /// <param name=\"message\">Message being reported.</param>\n        /// <param name=\"messageArgs\">Arguments for the reported message.</param>\n        public abstract void LogImportantMessage(\n            string message,\n            params Object[] messageArgs\n            );\n\n        /// <summary>\n        /// Outputs a low priority status message from a content importer or processor.\n        /// </summary>\n        /// <param name=\"message\">Message being reported.</param>\n        /// <param name=\"messageArgs\">Arguments for the reported message.</param>\n        public abstract void LogMessage(\n            string message,\n            params Object[] messageArgs\n            );\n\n        /// <summary>\n        /// Outputs a warning message from a content importer or processor.\n        /// </summary>\n        /// <param name=\"helpLink\">Link to an existing online help topic containing related information.</param>\n        /// <param name=\"contentIdentity\">Identity of the content item that generated the message.</param>\n        /// <param name=\"message\">Message being reported.</param>\n        /// <param name=\"messageArgs\">Arguments for the reported message.</param>\n        public abstract void LogWarning(\n            string helpLink,\n            ContentIdentity contentIdentity,\n            string message,\n            params Object[] messageArgs\n            );\n\n        /// <summary>\n        /// Outputs a message indicating that a content asset has begun processing.\n        /// All logger warnings or error exceptions from this time forward to the next PopFile call refer to this file.\n        /// </summary>\n        /// <param name=\"filename\">Name of the file containing future messages.</param>\n        public virtual void PushFile(string filename)\n        {\n            _filenames.Push(filename);\n        }\n\n        /// <summary>\n        /// Outputs a message indicating that a content asset has completed processing.\n        /// </summary>\n        public virtual void PopFile()\n        {\n            _filenames.Pop();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentIdentity.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides properties describing the origin of the game asset, such as the original source file and creation tool. This information is used for error reporting, and by processors that need to determine from what directory the asset was originally loaded.\n    /// </summary>\n    [Serializable]\n    public class ContentIdentity\n    {\n        /// <summary>\n        /// Gets or sets the specific location of the content item within the larger source file.\n        /// </summary>\n        public string FragmentIdentifier { get; set; }\n\n        /// <summary>\n        /// Gets or sets the file name of the asset source.\n        /// </summary>\n        public string SourceFilename { get; set; }\n\n        /// <summary>\n        /// Gets or sets the creation tool of the asset.\n        /// </summary>\n        public string SourceTool { get; set; }\n\n        /// <summary>\n        /// Initializes a new instance of ContentIdentity.\n        /// </summary>\n        public ContentIdentity()\n            : this(string.Empty, string.Empty, null)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of ContentIdentity with the specified values.\n        /// </summary>\n        /// <param name=\"sourceFilename\">The absolute path to the file name of the asset source.</param>\n        public ContentIdentity(string sourceFilename)\n            : this(sourceFilename, string.Empty, null)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of ContentIdentity with the specified values.\n        /// </summary>\n        /// <param name=\"sourceFilename\">The absolute path to the file name of the asset source.</param>\n        /// <param name=\"sourceTool\">The name of the digital content creation (DCC) tool that created the asset.</param>\n        public ContentIdentity(string sourceFilename, string sourceTool)\n            : this(sourceFilename, sourceTool, null)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of ContentIdentity with the specified values.\n        /// </summary>\n        /// <param name=\"sourceFilename\">The absolute path to the file name of the asset source.</param>\n        /// <param name=\"sourceTool\">The name of the digital content creation (DCC) tool that created the asset.</param>\n        /// <param name=\"fragmentIdentifier\">Specific location of the content item within the larger source file. For example, this could be a line number in the file.</param>\n        public ContentIdentity(string sourceFilename, string sourceTool, string fragmentIdentifier)\n        {\n            SourceFilename = sourceFilename;\n            SourceTool = sourceTool;\n            FragmentIdentifier = fragmentIdentifier;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Implements a file format importer for use with game assets.\n    /// Importers, either provided by the framework or written by a developer, must derive from ContentImporter, as well as being marked with a ContentImporterAttribute.\n    /// An importer should produce results in the standard intermediate object model. If an asset has information not supported by the object model, the importer should output it as opaque data (key/value attributes attached to the relevant object). By following this procedure, a content pipeline can access specialized digital content creation (DCC) tool information, even when that information has not been fully standardized into the official object model.\n    /// You can also design custom importers that accept and import types containing specific third-party extensions to the object model.\n    /// </summary>\n    public abstract class ContentImporter<T> : IContentImporter\n    {\n        /// <summary>\n        /// Initializes a new instance of ContentImporter.\n        /// </summary>\n        protected ContentImporter()\n        {\n\n        }\n\n        /// <summary>\n        /// Called by the framework when importing a game asset. This is the method called by XNA when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        public abstract T Import(string filename, ContentImporterContext context);\n\n        /// <summary>\n        /// Called by the framework when importing a game asset. This is the method called by XNA when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        Object IContentImporter.Import(string filename, ContentImporterContext context)\n        {\n            if (filename == null)\n                throw new ArgumentNullException(\"filename\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n            return Import(filename, context);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentImporterAttribute.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides properties that identify and provide metadata about the importer, such as supported file extensions and caching information.\n    /// Importers are required to initialize this attribute.\n    /// </summary>\n    public class ContentImporterAttribute : Attribute\n    {\n        List<string> _extensions = new List<string>();\n\n        /// <summary>\n        /// Gets and sets the caching of the content during importation.\n        /// </summary>\n        public bool CacheImportedData { get; set; }\n\n        /// <summary>\n        /// Gets or sets the name of the default processor for content read by this importer.\n        /// </summary>\n        public string DefaultProcessor { get; set; }\n\n        /// <summary>\n        /// Gets or sets the string representing the importer in a user interface. This name is not used by the content pipeline and should not be passed to the BuildAssets task (a custom MSBuild task used by XNA Game Studio). It is used for display purposes only.\n        /// </summary>\n        public virtual string DisplayName { get; set; }\n\n        /// <summary>\n        /// Gets the supported file name extensions of the importer.\n        /// </summary>\n        public IEnumerable<string> FileExtensions { get { return _extensions; } }\n\n        /// <summary>\n        /// Initializes a new instance of ContentImporterAttribute and sets the file name extension supported by the importer.\n        /// </summary>\n        /// <param name=\"fileExtension\">The list of file name extensions supported by the importer. Prefix each extension with a '.'.</param>\n        public ContentImporterAttribute(string fileExtension)\n        {\n            _extensions.Add(fileExtension);\n        }\n\n        /// <summary>\n        /// Initializes a new instance of ContentImporterAttribute and sets the file name extensions supported by the importer.\n        /// </summary>\n        /// <param name=\"fileExtensions\">The list of file name extensions supported by the importer. Prefix each extension with a '.'.</param>\n        public ContentImporterAttribute(params string[] fileExtensions)\n        {\n            _extensions.AddRange(fileExtensions);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentImporterContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides properties that define logging behavior for the importer.\n    /// </summary>\n    public abstract class ContentImporterContext\n    {\n        /// <summary>\n        /// The absolute path to the root of the build intermediate (object) directory.\n        /// </summary>\n        public abstract string IntermediateDirectory { get; }\n\n        /// <summary>\n        /// Gets the logger for an importer.\n        /// </summary>\n        public abstract ContentBuildLogger Logger { get; }\n\n        /// <summary>\n        /// The absolute path to the root of the build output (binaries) directory.\n        /// </summary>\n        public abstract string OutputDirectory { get; }\n\n        /// <summary>\n        /// Initializes a new instance of ContentImporterContext.\n        /// </summary>\n        public ContentImporterContext()\n        {\n\n        }\n\n        /// <summary>\n        /// Adds a dependency to the specified file. This causes a rebuild of the file, when modified, on subsequent incremental builds.\n        /// </summary>\n        /// <param name=\"filename\">Name of an asset file.</param>\n        public abstract void AddDependency(string filename);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentItem.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides properties that define various aspects of content stored using the intermediate file format of the XNA Framework.\n    /// </summary>\n    public class ContentItem\n    {\n        OpaqueDataDictionary opaqueData = new OpaqueDataDictionary();\n\n        /// <summary>\n        /// Gets or sets the identity of the content item.\n        /// </summary>\n        [ContentSerializer(Optional = true)]\n        public ContentIdentity Identity { get; set; }\n\n        /// <summary>\n        /// Gets or sets the name of the content item.\n        /// </summary>\n        [ContentSerializer(Optional = true)]\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Gets the opaque data of the content item.\n        /// </summary>\n        [ContentSerializer(Optional = true)]\n        public OpaqueDataDictionary OpaqueData { get { return opaqueData; } }\n\n        /// <summary>\n        /// Initializes a new instance of ContentItem.\n        /// </summary>\n        public ContentItem()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides a base class to use when developing custom processor components. All processors must derive from this class.\n    /// </summary>\n    public abstract class ContentProcessor<TInput, TOutput> : IContentProcessor\n    {\n        /// <summary>\n        /// Initializes a new instance of the ContentProcessor class.\n        /// </summary>\n        protected ContentProcessor()\n        {\n\n        }\n\n        /// <summary>\n        /// Processes the specified input data and returns the result.\n        /// </summary>\n        /// <param name=\"input\">Existing content object being processed.</param>\n        /// <param name=\"context\">Contains any required custom process parameters.</param>\n        /// <returns>A typed object representing the processed input.</returns>\n        public abstract TOutput Process(TInput input, ContentProcessorContext context);\n\n        /// <summary>\n        /// Gets the expected object type of the input parameter to IContentProcessor.Process.\n        /// </summary>\n        Type IContentProcessor.InputType\n        {\n            get { return typeof(TInput); }\n        }\n\n        /// <summary>\n        /// Gets the object type returned by IContentProcessor.Process.\n        /// </summary>\n        Type IContentProcessor.OutputType\n        {\n            get { return typeof(TOutput); }\n        }\n\n        /// <summary>\n        /// Processes the specified input data and returns the result.\n        /// </summary>\n        /// <param name=\"input\">Existing content object being processed.</param>\n        /// <param name=\"context\">Contains any required custom process parameters.</param>\n        /// <returns>The processed input.</returns>\n        object IContentProcessor.Process(object input, ContentProcessorContext context)\n        {\n            if (input == null)\n                throw new ArgumentNullException(\"input\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n            if (!(input is TInput))\n                throw new InvalidOperationException(\"input is not of the expected type\");\n            return Process((TInput)input, context);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentProcessorAttribute.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Gets any existing content processor components.\n    /// </summary>\n    public class ContentProcessorAttribute : Attribute\n    {\n        /// <summary>\n        /// Gets or sets the string representing the processor in a user interface. This name is not used by the content pipeline and should not be passed to the BuildAssets task (a custom MSBuild task used by XNA Game Studio). It is used for display purposes only.\n        /// </summary>\n        public virtual string DisplayName { get; set; }\n\n        /// <summary>\n        /// Initializes an instance of ContentProcessorAttribute.\n        /// </summary>\n        public ContentProcessorAttribute()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ContentProcessorContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides access to custom processor parameters, methods for converting member data, and triggering nested builds.\n    /// </summary>\n    public abstract class ContentProcessorContext\n    {\n        /// <summary>\n        /// Gets the name of the current content build configuration.\n        /// </summary>\n        public abstract string BuildConfiguration { get; }\n\n        /// <summary>\n        /// Gets the path of the directory that will contain any intermediate files generated by the content processor.\n        /// </summary>\n        public abstract string IntermediateDirectory { get; }\n\n        /// <summary>\n        /// Gets the logger interface used for status messages or warnings.\n        /// </summary>\n        public abstract ContentBuildLogger Logger { get; }\n\n        /// <summary>\n        /// Gets the output path of the content processor.\n        /// </summary>\n        public abstract string OutputDirectory { get; }\n\n        /// <summary>\n        /// Gets the output file name of the content processor.\n        /// </summary>\n        public abstract string OutputFilename { get; }\n\n        /// <summary>\n        /// Gets the collection of parameters used by the content processor.\n        /// </summary>\n        public abstract OpaqueDataDictionary Parameters { get; }\n\n        /// <summary>\n        /// Gets the current content build target platform.\n        /// </summary>\n        public abstract TargetPlatform TargetPlatform { get; }\n\n        /// <summary>\n        /// Gets the current content build target profile.\n        /// </summary>\n        public abstract GraphicsProfile TargetProfile { get; }\n\n        /// <summary>\n        /// Initializes a new instance of ContentProcessorContext.\n        /// </summary>\n        public ContentProcessorContext()\n        {\n        }\n\n        /// <summary>\n        /// Adds a dependency to the specified file. This causes a rebuild of the file, when modified, on subsequent incremental builds.\n        /// </summary>\n        /// <param name=\"filename\">Name of an asset file.</param>\n        public abstract void AddDependency(string filename);\n\n        /// <summary>\n        /// Add a file name to the list of related output files maintained by the build item. This allows tracking build items that build multiple output files.\n        /// </summary>\n        /// <param name=\"filename\">The name of the file.</param>\n        public abstract void AddOutputFile(string filename);\n\n        /// <summary>\n        /// Initiates a nested build of the specified asset and then loads the result into memory.\n        /// </summary>\n        /// <typeparam name=\"TInput\">Type of the input.</typeparam>\n        /// <typeparam name=\"TOutput\">Type of the converted output.</typeparam>\n        /// <param name=\"sourceAsset\">Reference to the source asset.</param>\n        /// <param name=\"processorName\">Optional processor for this content.</param>\n        /// <returns>Copy of the final converted content.</returns>\n        /// <remarks>An example of usage would be a mesh processor calling BuildAndLoadAsset to build any associated textures and replace the original .tga file references with an embedded copy of the converted texture.</remarks>\n        public TOutput BuildAndLoadAsset<TInput,TOutput>(\n            ExternalReference<TInput> sourceAsset,\n            string processorName\n            )\n        {\n            return BuildAndLoadAsset<TInput, TOutput>(sourceAsset, processorName, null, null);\n        }\n\n        /// <summary>\n        /// Initiates a nested build of the specified asset and then loads the result into memory.\n        /// </summary>\n        /// <typeparam name=\"TInput\">Type of the input.</typeparam>\n        /// <typeparam name=\"TOutput\">Type of the converted output.</typeparam>\n        /// <param name=\"sourceAsset\">Reference to the source asset.</param>\n        /// <param name=\"processorName\">Optional processor for this content.</param>\n        /// <param name=\"processorParameters\">Optional collection of named values available as input to the content processor.</param>\n        /// <param name=\"importerName\">Optional importer for this content.</param>\n        /// <returns>Copy of the final converted content.</returns>\n        /// <remarks>An example of usage would be a mesh processor calling BuildAndLoadAsset to build any associated textures and replace the original .tga file references with an embedded copy of the converted texture.</remarks>\n        public abstract TOutput BuildAndLoadAsset<TInput,TOutput>(\n            ExternalReference<TInput> sourceAsset,\n            string processorName,\n            OpaqueDataDictionary processorParameters,\n            string importerName\n            );\n\n        /// <summary>\n        /// Initiates a nested build of an additional asset.\n        /// </summary>\n        /// <typeparam name=\"TInput\">Type of the input.</typeparam>\n        /// <typeparam name=\"TOutput\">Type of the output.</typeparam>\n        /// <param name=\"sourceAsset\">Reference to the source asset.</param>\n        /// <param name=\"processorName\">Optional processor for this content.</param>\n        /// <returns>Reference to the final compiled content. The build work is not required to complete before returning. Therefore, this file may not be up to date when BuildAsset returns but it will be available for loading by the game at runtime.</returns>\n        /// <remarks>An example of usage for BuildAsset is being called by a mesh processor to request that any related textures used are also built, replacing the original TGA file references with new references to the converted texture files.</remarks>\n        public ExternalReference<TOutput> BuildAsset<TInput,TOutput>(\n            ExternalReference<TInput> sourceAsset,\n            string processorName\n            )\n        {\n            return BuildAsset<TInput, TOutput>(sourceAsset, processorName, null, null, null);\n        }\n\n        /// <summary>\n        /// Initiates a nested build of an additional asset.\n        /// </summary>\n        /// <typeparam name=\"TInput\">Type of the input.</typeparam>\n        /// <typeparam name=\"TOutput\">Type of the output.</typeparam>\n        /// <param name=\"sourceAsset\">Reference to the source asset.</param>\n        /// <param name=\"processorName\">Optional processor for this content.</param>\n        /// <param name=\"processorParameters\">Optional collection of named values available as input to the content processor.</param>\n        /// <param name=\"importerName\">Optional importer for this content.</param>\n        /// <param name=\"assetName\">Optional name of the final compiled content.</param>\n        /// <returns>Reference to the final compiled content. The build work is not required to complete before returning. Therefore, this file may not be up to date when BuildAsset returns but it will be available for loading by the game at runtime.</returns>\n        /// <remarks>An example of usage for BuildAsset is being called by a mesh processor to request that any related textures used are also built, replacing the original TGA file references with new references to the converted texture files.</remarks>\n        public abstract ExternalReference<TOutput> BuildAsset<TInput,TOutput>(\n            ExternalReference<TInput> sourceAsset,\n            string processorName,\n            OpaqueDataDictionary processorParameters,\n            string importerName,\n            string assetName\n            );\n\n        /// <summary>\n        /// Converts a content item object using the specified content processor.\n        /// </summary>\n        /// <typeparam name=\"TInput\">Type of the input content.</typeparam>\n        /// <typeparam name=\"TOutput\">Type of the converted output.</typeparam>\n        /// <param name=\"input\">Source content to be converted.</param>\n        /// <param name=\"processorName\">Optional processor for this content.</param>\n        /// <returns>Reference of the final converted content.</returns>\n        public TOutput Convert<TInput,TOutput>(\n            TInput input,\n            string processorName\n            )\n        {\n            return Convert<TInput, TOutput>(input, processorName, new OpaqueDataDictionary());\n        }\n\n        /// <summary>\n        /// Converts a content item object using the specified content processor.\n        /// </summary>\n        /// <typeparam name=\"TInput\">Type of the input content.</typeparam>\n        /// <typeparam name=\"TOutput\">Type of the converted output.</typeparam>\n        /// <param name=\"input\">Source content to be converted.</param>\n        /// <param name=\"processorName\">Optional processor for this content.</param>\n        /// <param name=\"processorParameters\">Optional parameters for the processor.</param>\n        /// <returns>Reference of the final converted content.</returns>\n        public abstract TOutput Convert<TInput,TOutput>(\n            TInput input,\n            string processorName,\n            OpaqueDataDictionary processorParameters\n            );\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ExternalReference.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Specifies external references to a data file for the content item.\n    /// \n    /// While the object model is instantiated, reference file names are absolute. When the file containing the external reference is serialized to disk, file names are relative to the file. This allows movement of the content tree to a different location without breaking internal links.\n    /// </summary>\n    /// <typeparam name=\"T\"></typeparam>\n    public sealed class ExternalReference<T> : ContentItem\n    {\n        /// <summary>\n        /// Gets and sets the file name of an ExternalReference.\n        /// </summary>\n        public string Filename { get; set; }\n\n        /// <summary>\n        /// Initializes a new instance of ExternalReference.\n        /// </summary>\n        public ExternalReference()\n        {\n            Filename = string.Empty;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of ExternalReference.\n        /// </summary>\n        /// <param name=\"filename\">The name of the referenced file.</param>\n        public ExternalReference(string filename)\n        {\n            if (string.IsNullOrEmpty(filename))\n                throw new ArgumentNullException(\"filename\");\n            Filename = filename;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of ExternalReference, specifying the file path relative to another content item.\n        /// </summary>\n        /// <param name=\"filename\">The name of the referenced file.</param>\n        /// <param name=\"relativeToContent\">The content that the path specified in filename is relative to.</param>\n        public ExternalReference(string filename, ContentIdentity relativeToContent)\n        {\n            if (string.IsNullOrEmpty(filename))\n                throw new ArgumentNullException(\"filename\");\n            if (relativeToContent == null)\n                throw new ArgumentNullException(\"relativeToContent\");\n            if (string.IsNullOrEmpty(relativeToContent.SourceFilename))\n                throw new ArgumentNullException(\"relativeToContent.SourceFilename\");\n\n            // The intermediate serializer from XNA has the external reference\n            // path walking up to the content project directory and then back\n            // down to the asset path. We don't appear to have any way to do\n            // that from here, so we'll work with the absolute path and let the\n            // higher level process sort out any relative paths they need.\n            var basePath = Path.GetDirectoryName(relativeToContent.SourceFilename);\n            Filename = PathHelper.Normalize(Path.GetFullPath(Path.Combine(basePath, filename)));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/IContentImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Accesses a statically typed ContentImporter instance from generic code using dynamic typing.\n    /// </summary>\n    public interface IContentImporter\n    {\n        /// <summary>\n        /// Imports an asset from the specified file.\n        /// </summary>\n        /// <param name=\"filename\">Name of the game asset file.</param>\n        /// <param name=\"context\">A ContentImporterContext class containing information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        Object Import(string filename, ContentImporterContext context);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/IContentProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods and properties for accessing a statically typed ContentProcessor subclass, using dynamically typed object data.\n    /// </summary>\n    public interface IContentProcessor\n    {\n        /// <summary>\n        /// Gets the expected object type of the input parameter to IContentProcessor.Process.\n        /// </summary>\n        Type InputType { get; }\n\n        /// <summary>\n        /// Gets the object type returned by IContentProcessor.Process.\n        /// </summary>\n        Type OutputType { get; }\n\n        /// <summary>\n        /// Processes the specified input data and returns the result.\n        /// </summary>\n        /// <param name=\"input\">Existing content object being processed.</param>\n        /// <param name=\"context\">Contains any required custom process parameters.</param>\n        /// <returns>An object representing the processed input.</returns>\n        Object Process(Object input, ContentProcessorContext context);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/InvalidContentException.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Thrown when errors are encountered in content during processing.\n    /// </summary>\n    [SerializableAttribute]\n    public class InvalidContentException : Exception\n    {\n        /// <summary>\n        /// Gets or sets the identity of the content item that caused the exception.\n        /// </summary>\n        public ContentIdentity ContentIdentity { get; set; }\n\n        /// <summary>\n        /// Initializes a new instance of the InvalidContentException class\n        /// </summary>\n        public InvalidContentException()\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the InvalidContentException class with information on serialization and streaming context for the related content item.\n        /// </summary>\n        /// <param name=\"serializationInfo\">Information necessary for serialization and deserialization of the content item.</param>\n        /// <param name=\"streamingContext\">Information necessary for the source and destination of a given serialized stream. Also provides an additional caller-defined context.</param>\n        protected InvalidContentException(\n            SerializationInfo serializationInfo,\n            StreamingContext streamingContext\n            )\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the InvalidContentException class with the specified error message.\n        /// </summary>\n        /// <param name=\"message\">A message that describes the error.</param>\n        public InvalidContentException(\n            string message\n            )\n            : this(message, null, null)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the InvalidContentException class with the specified error message and the identity of the content throwing the exception.\n        /// </summary>\n        /// <param name=\"message\">A message that describes the error.</param>\n        /// <param name=\"contentIdentity\">Information about the content item that caused this error, including the file name. In some cases, a location within the file (of the problem) is specified.</param>\n        public InvalidContentException(\n            string message,\n            ContentIdentity contentIdentity\n            )\n            : this(message, contentIdentity, null)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the InvalidContentException class with the specified error message, the identity of the content throwing the exception, and a reference to the inner exception that is the cause of this exception.\n        /// </summary>\n        /// <param name=\"message\">A message that describes the error.</param>\n        /// <param name=\"contentIdentity\">Information about the content item that caused this error, including the file name. In some cases, a location within the file (of the problem) is specified.</param>\n        /// <param name=\"innerException\">The exception that is the cause of the current exception. If innerException is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>\n        public InvalidContentException(\n            string message,\n            ContentIdentity contentIdentity,\n            Exception innerException\n            )\n            : base(message, innerException)\n        {\n            ContentIdentity = contentIdentity;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the InvalidContentException class with the specified error message and a reference to the inner exception that is the cause of this exception.\n        /// </summary>\n        /// <param name=\"message\">A message that describes the error.</param>\n        /// <param name=\"innerException\">The exception that is the cause of the current exception. If innerException is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>\n        public InvalidContentException(\n            string message,\n            Exception innerException\n            )\n            : this(message, null, innerException)\n        {\n        }\n\n        /// <summary>\n        /// When overridden in a derived class, returns information about the exception.\n        /// In addition to the base behavior, this method provides serialization functionality.\n        /// </summary>\n        /// <param name=\"info\">Information necessary for serialization and deserialization of the content item.</param>\n        /// <param name=\"context\">Information necessary for the source and destination of a given serialized stream. Also provides an additional caller-defined context.</param>\n        public override void GetObjectData(\n            SerializationInfo info,\n            StreamingContext context\n            )\n        {\n            base.GetObjectData(info, context);\n            // TODO: Complete me...\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/NamedValueDictionary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    public class NamedValueDictionary<T> : IDictionary<string, T>\n    {\n        readonly Dictionary<string, T> dict = new Dictionary<string,T>();\n\n        /// <summary>\n        /// Initializes an instance of NamedValueDictionary.\n        /// </summary>\n        public NamedValueDictionary()\n        {\n        }\n\n        /// <summary>\n        /// Adds the specified key and value to the dictionary.\n        /// </summary>\n        /// <param name=\"key\">Identity of the key of the new data pair.</param>\n        /// <param name=\"value\">The value of the new data pair.</param>\n        public void Add(string key, T value)\n        {\n            dict.Add(key, value);\n        }\n\n        /// <summary>\n        /// Determines whether the specified key is present in the dictionary.\n        /// </summary>\n        /// <param name=\"key\">Identity of a key.</param>\n        /// <returns></returns>\n        public bool ContainsKey(string key)\n        {\n            return dict.ContainsKey(key);\n        }\n\n        /// <summary>\n        /// Gets all keys contained in the dictionary.\n        /// </summary>\n        public ICollection<string> Keys\n        {\n            get { return dict.Keys; }\n        }\n\n        /// <summary>\n        /// Removes the specified key and value from the dictionary.\n        /// </summary>\n        /// <param name=\"key\">Identity of the key to be removed.</param>\n        /// <returns>true if the value is present; false otherwise.</returns>\n        public bool Remove(string key)\n        {\n            return dict.Remove(key);\n        }\n\n        /// <summary>\n        /// Gets the value associated with the specified key.\n        /// </summary>\n        /// <param name=\"key\">Identity of the key of the element whose value is to be retrieved.</param>\n        /// <param name=\"value\">The current value of the element.</param>\n        /// <returns>true if the value is present; false otherwise.</returns>\n        public bool TryGetValue(string key, out T value)\n        {\n            return dict.TryGetValue(key, out value);\n        }\n\n        /// <summary>\n        /// Specifies the type hint for the intermediate serializer. Values of this type do not store an explicit type attribute in the related XML source.\n        /// </summary>\n        protected internal virtual Type DefaultSerializerType\n        {\n            get { return typeof(T); }\n        }\n\n        /// <summary>\n        /// Gets all values contained in the dictionary.\n        /// </summary>\n        public ICollection<T> Values\n        {\n            get { return dict.Values; }\n        }\n\n        /// <summary>\n        /// Gets or sets the specified item.\n        /// </summary>\n        /// <param name=\"key\">Identity of a key.</param>\n        public T this[string key]\n        {\n            get\n            {\n                return dict[key];\n            }\n            set\n            {\n                dict[key] = value;\n            }\n        }\n\n        /// <summary>\n        /// Adds an item to the collection.\n        /// </summary>\n        /// <param name=\"item\">The item to add to the collection.</param>\n        void ICollection<KeyValuePair<string, T>>.Add(KeyValuePair<string, T> item)\n        {\n            ((ICollection<KeyValuePair<string, T>>)dict).Add(item);\n        }\n\n        /// <summary>\n        /// Removes all keys and values from the dictionary.\n        /// </summary>\n        public void Clear()\n        {\n            dict.Clear();\n        }\n\n        /// <summary>\n        /// Determines whether the collection contains a specific value.\n        /// </summary>\n        /// <param name=\"item\">The object to locate in the collection.</param>\n        /// <returns>true if the collection contains the object; false otherwise.</returns>\n        bool ICollection<KeyValuePair<string, T>>.Contains(KeyValuePair<string, T> item)\n        {\n            return ((ICollection<KeyValuePair<string, T>>)dict).Contains(item);\n        }\n\n        /// <summary>\n        /// Copies the elements of the collection to an array, starting at a specified index.\n        /// </summary>\n        /// <param name=\"array\">The destination array.</param>\n        /// <param name=\"arrayIndex\">The index at which to begin the copy.</param>\n        void ICollection<KeyValuePair<string, T>>.CopyTo(KeyValuePair<string, T>[] array, int arrayIndex)\n        {\n            ((ICollection<KeyValuePair<string, T>>)dict).CopyTo(array, arrayIndex);\n        }\n\n        /// <summary>\n        /// Gets the number of items in the dictionary.\n        /// </summary>\n        public int Count\n        {\n            get { return dict.Count; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if this object is read-only.\n        /// </summary>\n        bool ICollection<KeyValuePair<string, T>>.IsReadOnly\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Removes the first occurrence of the specified object from the collection.\n        /// </summary>\n        /// <param name=\"item\">The item to remove from the collection.</param>\n        /// <returns>true if the item was successfully removed from the collection; false otherwise.</returns>\n        bool ICollection<KeyValuePair<string, T>>.Remove(KeyValuePair<string, T> item)\n        {\n            return ((ICollection<KeyValuePair<string, T>>)dict).Remove(item);\n        }\n\n        /// <summary>\n        /// Gets an enumerator that iterates through items in a dictionary.\n        /// </summary>\n        /// <returns>Enumerator for iterating through the dictionary.</returns>\n        public IEnumerator<KeyValuePair<string, T>> GetEnumerator()\n        {\n            return dict.GetEnumerator();\n        }\n\n        /// <summary>\n        /// Returns an enumerator that can iterate through this collection.\n        /// </summary>\n        /// <returns>An enumerator that can iterate through this collection</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return dict.GetEnumerator();\n        }\n\n        /// <summary>\n        /// Adds an element to the dictionary.\n        /// </summary>\n        /// <param name=\"key\">Identity of the key of the new element.</param>\n        /// <param name=\"value\">The value of the new element.</param>\n        protected virtual void AddItem(string key, T value)\n        {\n            dict.Add(key, value);\n        }\n\n        /// <summary>\n        /// Removes all elements from the dictionary.\n        /// </summary>\n        protected virtual void ClearItems()\n        {\n            dict.Clear();\n        }\n\n        /// <summary>\n        /// Removes the specified element from the dictionary.\n        /// </summary>\n        /// <param name=\"key\">Identity of the key of the data pair to be removed.</param>\n        /// <returns>true if the value is present; false otherwise.</returns>\n        protected virtual bool RemoveItem(string key)\n        {\n            return dict.Remove(key);\n        }\n\n        /// <summary>\n        /// Modifies the value of an existing element.\n        /// </summary>\n        /// <param name=\"key\">Identity of the element to be modified.</param>\n        /// <param name=\"value\">The value to be set.</param>\n        protected virtual void SetItem(string key, T value)\n        {\n            dict[key] = value;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/OpaqueDataDictionary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    [ContentSerializerCollectionItemName(\"Data\")]\n    public sealed class OpaqueDataDictionary : NamedValueDictionary<Object>\n    {\n        /// <summary>\n        /// Get the value for the specified key\n        /// </summary>\n        /// <key>The key of the item to retrieve.</key>\n        /// <defaultValue>The default value to return if the key does not exist.</defaultValue>\n        /// <returns>The item cast as T, or the default value if the item is not present in the dictonary.</returns>\n        public T GetValue<T>(string key, T defaultValue)\n        {\n            object o;\n            if (TryGetValue(key, out o))\n                return (T)o;\n            return defaultValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/PipelineComponentScanner.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Implements a scanner object containing the available importers and processors for an application. Designed for internal use only.\n    /// </summary>\n    public sealed class PipelineComponentScanner\n    {\n        List<string> errors = new List<string>();\n        Dictionary<string, ContentImporterAttribute> importerAttributes = new Dictionary<string, ContentImporterAttribute>();\n        Dictionary<string, ContentProcessorAttribute> processorAttributes = new Dictionary<string, ContentProcessorAttribute>();\n        Dictionary<string, string> importerOutputTypes = new Dictionary<string, string>();\n        Dictionary<string, string> processorInputTypes = new Dictionary<string, string>();\n        Dictionary<string, string> processorOutputTypes = new Dictionary<string, string>();\n        Dictionary<string, ProcessorParameterCollection> processorParameters = new Dictionary<string, ProcessorParameterCollection>();\n\n        /// <summary>\n        /// Gets the list of error messages produced by the last call to Update.\n        /// </summary>\n        public IList<string> Errors { get { return errors; } }\n\n        /// <summary>\n        /// Gets a dictionary that maps importer names to their associated metadata attributes.\n        /// </summary>\n        public IDictionary<string, ContentImporterAttribute> ImporterAttributes { get { return importerAttributes; } }\n\n        /// <summary>\n        /// Gets the names of all available importers.\n        /// </summary>\n        public IEnumerable<string> ImporterNames { get { return importerAttributes.Keys; } }\n\n        /// <summary>\n        /// Gets a dictionary that maps importer names to the fully qualified name of their return types.\n        /// </summary>\n        public IDictionary<string, string> ImporterOutputTypes { get { return importerOutputTypes; } }\n\n        /// <summary>\n        /// Gets a dictionary that maps processor names to their associated metadata attributes.\n        /// </summary>\n        public IDictionary<string, ContentProcessorAttribute> ProcessorAttributes { get { return processorAttributes; } }\n\n        /// <summary>\n        /// Gets a dictionary that maps processor names to the fully qualified name of supported input types.\n        /// </summary>\n        public IDictionary<string, string> ProcessorInputTypes { get { return processorInputTypes; } }\n\n        /// <summary>\n        /// Gets the names of all available processors.\n        /// </summary>\n        public IEnumerable<string> ProcessorNames { get { return processorAttributes.Keys; } }\n\n        /// <summary>\n        /// Gets a dictionary that maps processor names to the fully qualified name of their output types.\n        /// </summary>\n        public IDictionary<string, string> ProcessorOutputTypes { get { return processorOutputTypes; } }\n\n        /// <summary>\n        /// A collection of supported processor parameters.\n        /// </summary>\n        public IDictionary<string, ProcessorParameterCollection> ProcessorParameters { get { return processorParameters; } }\n\n        /// <summary>\n        /// Initializes a new instance of PipelineComponentScanner.\n        /// </summary>\n        public PipelineComponentScanner()\n        {\n        }\n\n        /// <summary>\n        /// Updates the scanner object with the latest available assembly states.\n        /// </summary>\n        /// <param name=\"pipelineAssemblies\">Enumerated list of available assemblies.</param>\n        /// <returns>true if an actual scan was required, indicating the collection contents may have changed. false if no assembly changes were detected since the previous call.</returns>\n        public bool Update(\n            IEnumerable<string> pipelineAssemblies\n            )\n        {\n            return Update(pipelineAssemblies, null);\n        }\n\n        /// <summary>\n        /// Updates the scanner object with the latest available assembly states.\n        /// </summary>\n        /// <param name=\"pipelineAssemblies\">Enumerated list of available assemblies.</param>\n        /// <param name=\"pipelineAssemblyDependencies\">Enumerated list of dependent assemblies.</param>\n        /// <returns>true if an actual scan was required, indicating the collection contents may have changed. false if no assembly changes were detected since the previous call.</returns>\n        public bool Update(\n            IEnumerable<string> pipelineAssemblies,\n            IEnumerable<string> pipelineAssemblyDependencies\n            )\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/PipelineException.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Thrown when errors are encountered during a content pipeline build.\n    /// </summary>\n    [SerializableAttribute]\n    public class PipelineException : Exception\n    {\n        /// <summary>\n        /// Creates an instance of PipelineException.\n        /// </summary>\n        public PipelineException()\n        {\n        }\n\n        /// <summary>\n        /// Creates an instance of PipelineException with information on serialization and streaming context for the related content item.\n        /// </summary>\n        /// <param name=\"serializationInfo\">Information necessary for serialization and deserialization of the content item.</param>\n        /// <param name=\"streamingContext\">Information necessary for the source and destination of a given serialized stream. Also provides an additional caller-defined context.</param>\n        protected PipelineException(\n            SerializationInfo serializationInfo,\n            StreamingContext streamingContext\n            )\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the PipelineException class with the specified error message.\n        /// </summary>\n        /// <param name=\"message\">A message that describes the error.</param>\n        public PipelineException(\n            string message\n            )\n            : base(message)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the PipelineException class with the specified error message and a reference to the inner exception that is the cause of this exception.\n        /// </summary>\n        /// <param name=\"message\">A message that describes the error.</param>\n        /// <param name=\"innerException\">The exception that is the cause of the current exception. If innerException is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>\n        public PipelineException(\n            string message,\n            Exception innerException\n            )\n            :base(message, innerException)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the PipelineException class with the specified error message.\n        /// </summary>\n        /// <param name=\"message\">A message that describes the error.</param>\n        /// <param name=\"messageArgs\">Array of strings specifying message-related arguments.</param>\n        public PipelineException(\n            string message,\n            params Object[] messageArgs\n            )\n            : base(String.Format(message, messageArgs))\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ProcessorParameter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.Reflection;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Represents a processor parameter. Processor parameters are automatically discovered by the content pipeline. Therefore, only custom processor developers should use this class directly.\n    /// </summary>\n    [SerializableAttribute]\n    public sealed class ProcessorParameter\n    {\n        PropertyInfo propInfo;\n        ReadOnlyCollection<string> enumValues;\n\n        /// <summary>\n        /// Default value of the processor parameter.\n        /// </summary>\n        public Object DefaultValue { get; set; }\n\n        /// <summary>\n        /// Description of the parameter, as specified by the [Description] attribute.\n        /// </summary>\n        public string Description { get; set; }\n\n        /// <summary>\n        /// Name of the parameter displayed in the designer, as specified by the [DisplayName] attribute.\n        /// </summary>\n        public string DisplayName { get; set; }\n\n        /// <summary>\n        /// Gets a value indicating whether the parameter is an enumeration.\n        /// </summary>\n        public bool IsEnum\n        {\n            get\n            {\n                return enumValues != null;\n            }\n        }\n\n        /// <summary>\n        /// Available options for enumerated type parameters. For parameters of other types, this value is null.\n        /// </summary>\n        public ReadOnlyCollection<string> PossibleEnumValues\n        {\n            get\n            {\n                return enumValues;\n            }\n        }\n\n        /// <summary>\n        /// Name of the property, as defined in the C# code.\n        /// </summary>\n        public string PropertyName\n        {\n            get\n            {\n                return propInfo.Name;\n            }\n        }\n\n        /// <summary>\n        /// Type of the parameter.\n        /// </summary>\n        public string PropertyType\n        {\n            get\n            {\n                return propInfo.PropertyType.Name;\n            }\n        }\n\n        /// <summary>\n        /// Constructs a ProcessorParameter instance.\n        /// </summary>\n        /// <param name=\"propertyInfo\">The info for the property.</param>\n        internal ProcessorParameter(PropertyInfo propertyInfo)\n        {\n            propInfo = propertyInfo;\n            if (propInfo.PropertyType.IsEnum)\n                enumValues = new ReadOnlyCollection<string>(propInfo.PropertyType.GetEnumNames());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/ProcessorParameterCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Represents a collection of processor parameters, usually for a single processor. This class is primarily designed for internal use or for custom processor developers.\n    /// </summary>\n    [SerializableAttribute]\n    public sealed class ProcessorParameterCollection : ReadOnlyCollection<ProcessorParameter>\n    {\n        /// <summary>\n        /// Constructs a new ProcessorParameterCollection instance.\n        /// </summary>\n        /// <param name=\"parameters\">The parameters in the collection.</param>\n        internal ProcessorParameterCollection(IEnumerable<ProcessorParameter> parameters)\n            : base(new List<ProcessorParameter>(parameters))\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Processors/PassThroughProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// As the name implies, this processor simply passes data through as-is.\n    /// </summary>\n    [ContentProcessor(DisplayName = \"No Processing Required\")]\n    public class PassThroughProcessor : ContentProcessor<object, object>\n    {\n        public override object Process(object input, ContentProcessorContext context)\n        {\n            return input;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Properties/AssemblyInfo.cs",
    "content": "using System;\n\n[assembly:CLSCompliant(true)]\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Properties/AssemblyInfo.net4.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"MonoGame.Framework.Content.Pipeline\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"MonoGame.Framework.Content.Pipeline\")]\n[assembly: AssemblyCopyright(\"Copyright ©2012-2022 MonoGame Team, ©2025 Nick Kastellanos\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"28de7aeb-1303-46c6-a349-8f65494a621b\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"4.2.9001.0\")]\n[assembly: AssemblyFileVersion(\"4.2.9001.0\")]\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ArrayWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the array value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class ArrayWriter<T> : ContentTypeWriterBaseGeneric<T[]>\n    {\n        ContentTypeWriter _elementWriter;\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            base.Initialize(compiler);\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n\n            _elementWriter = output.GetTypeWriter(typeof(T));\n        }\n\n        protected override void Write(ContentWriter output, T[] value)\n        {\n            if (value == null)\n                throw new ArgumentNullException(\"value\");\n\n            output.Write(value.Length);\n            foreach (T element in value)\n                output.WriteObject(element, _elementWriter);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".ArrayReader`1\"\n                              + \"[[\"\n                              + _elementWriter.GetRuntimeType(targetPlatform)\n                              + \"]]\";\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/BooleanWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Boolean;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the boolean value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class BooleanWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/BoundingBoxWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.BoundingBox;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the BoundingBox value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class BoundingBoxWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.Min);\n            output.Write(value.Max);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/BoundingFrustumWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.BoundingFrustum;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the BoundingFrustum value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class BoundingFrustumWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.Matrix);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/BoundingSphereWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.BoundingSphere;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the BoundingSphere value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class BoundingSphereWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.Center);\n            output.Write(value.Radius);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ByteWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Byte;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the unsigned byte value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class ByteWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/CharWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Char;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the character value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class CharWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ComplexWriter.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Complex;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Complex value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class ComplexWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentCompiler.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Provides methods for writing compiled binary format.\n    /// </summary>\n    public sealed class ContentCompiler\n    {\n        const byte XnbFormatVersion = 5;\n\n        const byte ContentFlagCompressedLzx = 0x80;\n        const byte ContentFlagCompressedLz4 = 0x40;\n        const byte ContentFlagCompressedExt = 0xC0;\n        const byte ContentFlagHiDef = 0x01;\n\n        // This array must remain in sync with TargetPlatform\n        static char[] _targetPlatformIdentifiers = new[]\n        {\n            'w', // Windows (DirectX)\n            'x', // Xbox360\n            'i', // iOS\n            'a', // Android\n            'd', // DesktopGL\n            'X', // MacOSX\n            'W', // WindowsStoreApp\n            'n', // NativeClient\n            'r', // RaspberryPi\n            'P', // PlayStation4\n            '5', // PlayStation5\n            'O', // XboxOne\n            'S', // Nintendo Switch\n            'b', // BlazorGL\n        };\n\n        readonly Dictionary<Type, Type> _typeWriterMap = new Dictionary<Type, Type>();\n\n        /// <summary>\n        /// Initializes a new instance of ContentCompiler.\n        /// </summary>\n        public ContentCompiler()\n        {\n            GetTypeWriters();\n        }\n\n        /// <summary>\n        /// Iterates through all loaded assemblies and finds the content type writers.\n        /// </summary>\n        void GetTypeWriters()\n        {\n            Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();\n            foreach (Assembly assembly in assemblies)\n            {\n                Type[] exportedTypes;\n                try\n                {\n                    exportedTypes = assembly.GetTypes();\n                }\n                catch (Exception)\n                {\n                    continue;\n                }\n\n                Type contentTypeWriterGenericType = typeof(ContentTypeWriter<>);\n\n                foreach (Type type in exportedTypes)\n                {\n\t\t\t\t\tif (type.IsAbstract)\n                        continue;\n                    if (!Attribute.IsDefined(type, typeof(ContentTypeWriterAttribute)))\n                        continue;\n                    \n                    // Find the content type this writer implements\n                    Type baseType = type.BaseType;\n                    while ((baseType != null) && (baseType.GetGenericTypeDefinition() != contentTypeWriterGenericType))\n                    {\n                        baseType = baseType.BaseType;\n                    }\n\n                    if (baseType != null)\n                        _typeWriterMap.Add(baseType, type);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Retrieves the worker writer for the specified type.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <returns>The worker writer.</returns>\n        public ContentTypeWriter GetTypeWriter(Type type)\n        {\n            try\n            {\n                Type writerType = GetTypeWriterType(type);\n                ContentTypeWriter writer = (ContentTypeWriter)Activator.CreateInstance(writerType);\n                writer.Initialize(this);\n\n                return writer;\n            }\n            catch (Exception)\n            {\n                throw new InvalidContentException(String.Format(\"Could not find ContentTypeWriter for type '{0}'\", type.Name));\n            }\n        }\n\n        private Type GetTypeWriterType(Type type)\n        {\n            if (type == typeof(Array))\n            {\n                Type resultType = typeof(ArrayWriter<Array>);\n                return resultType;\n            }\n\n            lock (_typeWriterMap)\n            {\n                Type contentTypeWriterGenericType = typeof(ContentTypeWriter<>);\n                Type contentTypeWriterType = contentTypeWriterGenericType.MakeGenericType(type);\n\n                Type typeWriterType;\n                if (_typeWriterMap.TryGetValue(contentTypeWriterType, out typeWriterType))\n                    return typeWriterType;\n\n                if (type.IsArray)\n                {\n                    Type writerGenericType = (type.GetArrayRank() == 1)\n                                           ? typeof(ArrayWriter<>)\n                                           : typeof(MultiArrayWriter<>);\n\n                    Type writerType = writerGenericType.MakeGenericType(type.GetElementType());\n                    _typeWriterMap.Add(contentTypeWriterType, writerType);\n                    return writerType;\n                }\n\n                if (type.IsEnum)\n                {\n                    Type writerGenericType = typeof(EnumWriter<>);\n                    Type writerType = writerGenericType.MakeGenericType(type);\n                    _typeWriterMap.Add(contentTypeWriterType, writerType);\n                    return writerType;\n                }\n\n                if (type.IsGenericType)\n                {\n                    Type writerGenericType = null;\n\n                    Type inputTypeDef = type.GetGenericTypeDefinition();\n                    foreach (var kvp in _typeWriterMap)\n                    {\n                        Type[] args = kvp.Key.GetGenericArguments();\n\n                        if (args.Length == 0)\n                            continue;\n                        if (!kvp.Value.IsGenericTypeDefinition)\n                            continue;\n                        if (!args[0].IsGenericType)\n                            continue;\n\n                        // Compare generic type definition\n                        Type keyTypeDef = args[0].GetGenericTypeDefinition();\n                        if (inputTypeDef == keyTypeDef)\n                        {\n                            writerGenericType = kvp.Value;\n                            break;\n                        }\n                    }\n\n                    if (writerGenericType != null)\n                    {\n                        Type[] args = type.GetGenericArguments();\n                        Type writerType = writerGenericType.MakeGenericType(args);\n                        _typeWriterMap.Add(contentTypeWriterType, writerType);\n                        return writerType;\n                    }\n                }\n\n                {\n                    Type writerGenericType = typeof(ReflectiveWriter<>);\n                    Type writerType = writerGenericType.MakeGenericType(type);\n                    _typeWriterMap.Add(contentTypeWriterType, writerType);\n                    return writerType;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Write the content to a XNB file.\n        /// </summary>\n        /// <param name=\"stream\">The stream to write the XNB file to.</param>\n        /// <param name=\"content\">The content to write to the XNB file.</param>\n        /// <param name=\"targetPlatform\">The platform the XNB is intended for.</param>\n        /// <param name=\"targetProfile\">The graphics profile of the target.</param>\n        /// <param name=\"compressContent\">True if the content should be LZ4 compressed.</param>\n        /// <param name=\"rootDirectory\">The root directory of the content.</param>\n        /// <param name=\"referenceRelocationPath\">The path of the XNB file, used to calculate relative paths for external references.</param>\n        [Obsolete]\n        public void Compile(Stream stream, object content, TargetPlatform targetPlatform, GraphicsProfile targetProfile, bool compressContent, string rootDirectory, string referenceRelocationPath)\n        {\n            ContentCompression compression = (compressContent == true)\n                                           ? ContentCompression.LegacyLZ4\n                                           : ContentCompression.Uncompressed;\n            Compile(stream, content, targetPlatform, targetProfile, compression, rootDirectory, referenceRelocationPath);\n        }\n\n        /// <summary>\n        /// Write the content to a XNB file.\n        /// </summary>\n        /// <param name=\"stream\">The stream to write the XNB file to.</param>\n        /// <param name=\"content\">The content to write to the XNB file.</param>\n        /// <param name=\"targetPlatform\">The platform the XNB is intended for.</param>\n        /// <param name=\"targetProfile\">The graphics profile of the target.</param>\n        /// <param name=\"compression\">The compression method.</param>\n        /// <param name=\"rootDirectory\">The root directory of the content.</param>\n        /// <param name=\"referenceRelocationPath\">The path of the XNB file, used to calculate relative paths for external references.</param>\n        public void Compile(Stream stream, object content, TargetPlatform targetPlatform, GraphicsProfile targetProfile, ContentCompression compression, string rootDirectory, string referenceRelocationPath)\n        {\n            using (MemoryStream contentStream = new MemoryStream())\n            using (ContentWriter contentwriter = new ContentWriter(this, contentStream, targetPlatform, targetProfile, rootDirectory, referenceRelocationPath))\n            {\n                contentwriter.WriteObject(content);\n                contentwriter.WriteSharedResources(contentwriter.SharedResources);\n\n                if (compression == ContentCompression.Uncompressed)\n                {\n                    BufferedStream bufferedStream = new BufferedStream(stream);\n                    WriteHeader(bufferedStream, targetPlatform, targetProfile, compression);\n                    long fileSizePos = bufferedStream.Position;\n                    uint compressedFileSize = 0; // compressedFileSize is not used on uncompressed XNBs.\n                    WriteUInt(bufferedStream, compressedFileSize);\n\n                    using (XnbBodyWriter xnbBodyWriter = new XnbBodyWriter(bufferedStream))\n                    {\n                        xnbBodyWriter.WriteTypeWriters(contentwriter.TypeWriters, targetPlatform);\n                        xnbBodyWriter.WriteSharedResourcesCount(contentwriter.SharedResources.Count);\n                    }\n                    contentStream.Position = 0;\n                    contentStream.CopyTo(bufferedStream);\n\n                    // Write the file size.\n                    bufferedStream.Position = fileSizePos;\n                    UInt32 fileSize = (uint)bufferedStream.Length;\n                    WriteUInt(bufferedStream, (uint)bufferedStream.Length);\n                    bufferedStream.Flush();\n                }\n                else // (compression != ContentCompression.Uncompressed)\n                {\n                    MemoryStream bodyStream = new MemoryStream();\n                    using (XnbBodyWriter xnbBodyWriter = new XnbBodyWriter(bodyStream))\n                    {\n                        xnbBodyWriter.WriteTypeWriters(contentwriter.TypeWriters, targetPlatform);\n                        xnbBodyWriter.WriteSharedResourcesCount(contentwriter.SharedResources.Count);\n                    }\n                    contentStream.Position = 0;\n                    contentStream.CopyTo(bodyStream);\n\n                    // Before we write the header, try to compress the body stream.\n                    Stream compressedStream = null;\n                    switch (compression)\n                    {\n                        case ContentCompression.Uncompressed:\n                            throw new InvalidOperationException();\n                        case ContentCompression.LegacyLZ4:\n                            compressedStream = CompressStreamLegacyLZ4(bodyStream);\n                            break;\n                        default:\n                            compressedStream = CompressStream(bodyStream, compression);\n                            break;\n                    }\n\n                    if (compressedStream == null || compressedStream.Length >= bodyStream.Length)\n                    {\n                        // If compression fails, we want to turn off the compression flag\n                        // so the correct flags are written in the header.\n                        compression = ContentCompression.Uncompressed;\n                        compressedStream = bodyStream;\n                    }\n\n                    BufferedStream bufferedStream = new BufferedStream(stream);\n                    WriteHeader(bufferedStream, targetPlatform, targetProfile, compression);\n                    long fileSizePos = bufferedStream.Position;\n                    uint compressedFileSize = (uint)(fileSizePos + sizeof(UInt32) + compressedStream.Length);\n                    WriteUInt(bufferedStream, compressedFileSize);\n\n                    compressedStream.Position = 0;\n                    compressedStream.CopyTo(bufferedStream);\n                    bufferedStream.Flush();\n                }\n            }\n\n            return;\n        }\n\n        private static void WriteUShort(Stream stream, ushort value)\n        {\n            byte[] data = BitConverter.GetBytes(value);\n            stream.Write(data, 0, data.Length);\n        }\n\n        private static void WriteUInt(Stream stream, uint value)\n        {\n            byte[] data = BitConverter.GetBytes(value);\n            stream.Write(data, 0, data.Length);\n        }\n\n        private MemoryStream CompressStreamLegacyLZ4(MemoryStream bodyStream)\n        {\n            MemoryStream compressedStream = new MemoryStream();\n            uint decompressedDataSize = (uint)bodyStream.Length;\n            WriteUInt(compressedStream, decompressedDataSize);\n\n            byte[] plainData = new byte[decompressedDataSize];\n            bodyStream.Position = 0;\n            bodyStream.Read(plainData, 0, plainData.Length);\n\n            // Compress stream\n            int maxLength = LZ4Codec.MaximumOutputLength((int)plainData.Length);\n            byte[] outputArray = new byte[maxLength * 2];\n            int resultLZ4Length = LZ4Codec.Encode32HC(plainData, 0, (int)plainData.Length, outputArray, 0, maxLength);\n            if (resultLZ4Length < 0) // check error\n                return null;\n            compressedStream.Write(outputArray, 0, resultLZ4Length);\n\n            return compressedStream;\n        }\n\n        private MemoryStream CompressStream(MemoryStream bodyStream, ContentCompression compression)\n        {\n            MemoryStream compressedStream = new MemoryStream();\n            uint decompressedDataSize = (uint)bodyStream.Length;\n            WriteUInt(compressedStream, decompressedDataSize);\n\n            // write Ext compression header\n            compressedStream.WriteByte((byte)0);  // reserved\n            compressedStream.WriteByte((byte)compression);\n\n            bodyStream.Position = 0;\n\n            switch (compression)\n            {\n                case ContentCompression.LZ4:\n                    {\n                        byte[] plainData = new byte[decompressedDataSize];\n                        bodyStream.Position = 0;\n                        bodyStream.Read(plainData, 0, plainData.Length);\n\n                        // Compress stream\n                        int maxLength = LZ4Codec.MaximumOutputLength((int)plainData.Length);\n                        byte[] outputArray = new byte[maxLength * 2];\n                        int resultLZ4Length = LZ4Codec.Encode32HC(plainData, 0, (int)plainData.Length, outputArray, 0, maxLength);\n                        if (resultLZ4Length < 0) // check error\n                            return null;\n                        compressedStream.Write(outputArray, 0, resultLZ4Length);\n                    }\n                    break;\n\n                case ContentCompression.Brotli:\n                    {\n#if NET6_0_OR_GREATER\n                        using (var brotliStream = new System.IO.Compression.BrotliStream(compressedStream,\n                                System.IO.Compression.CompressionLevel.SmallestSize,\n                                true))\n                        {\n                            bodyStream.CopyTo(brotliStream);\n                            brotliStream.Flush();\n                        }\n#else\n                        throw new PlatformNotSupportedException(\"ContentCompression Brotli not Supported.\");\n#endif\n                    }\n                    break;\n\n                default:\n                    throw new NotImplementedException(\"ContentCompression \" + compression + \" not implemented.\");\n            }\n\n            return compressedStream;\n        }\n\n        /// <summary>\n        /// Write the header to the output stream.\n        /// </summary>\n        private void WriteHeader(Stream stream, TargetPlatform targetPlatform, GraphicsProfile targetProfile, ContentCompression compression)\n        {\n            stream.WriteByte((byte)'X');\n            stream.WriteByte((byte)'N');\n            stream.WriteByte((byte)'B');\n\n            stream.WriteByte((byte)_targetPlatformIdentifiers[(int)targetPlatform]);\n            stream.WriteByte(XnbFormatVersion);\n\n            byte flags = default(byte);\n\n            switch (compression)\n            {\n                case ContentCompression.Uncompressed:\n                    break;\n                case ContentCompression.LegacyLZ4:\n                    // We cannot use LZX compression, so we use the public domain LZ4 compression.\n                    // Use one of the spare bits in the flags byte to specify LZ4.\n                    flags |= ContentFlagCompressedLz4;\n                    break;\n                default:\n                    // Use both LZX & LZ4 bits to specify a compressed content.\n                    // The compression method is specified in the header of the compressed data.\n                    flags |= ContentFlagCompressedExt;\n                    break;\n            }\n\n            if (targetProfile == GraphicsProfile.HiDef)\n            {\n                flags |= ContentFlagHiDef;\n            }\n\n            stream.WriteByte(flags);\n        }\n\n        private class XnbBodyWriter : BinaryWriter\n        {\n            public XnbBodyWriter(Stream output) : base(output)\n            {\n            }\n\n            public void WriteTypeWriters(ICollection<ContentTypeWriter> typeWriters, TargetPlatform targetPlatform)\n            {\n                Write7BitEncodedInt(typeWriters.Count);\n                foreach (ContentTypeWriter typeWriter in typeWriters)\n                {\n                    Write(typeWriter.GetRuntimeReader(targetPlatform));\n                    Write(typeWriter.TypeVersion);\n                }\n            }\n\n            public void WriteSharedResourcesCount(int sharedResourcesCount)\n            {\n                Write7BitEncodedInt(sharedResourcesCount);\n            }\n\n            /// <summary>\n            /// Releases the resources used by the IDisposable class.\n            /// </summary>\n            /// <param name=\"disposing\">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>\n            protected override void Dispose(bool disposing)\n            {\n                if (disposing)\n                {\n                }\n\n                //base.Dispose(disposing);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentCompression.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    public enum ContentCompression\n    {\n        Uncompressed = 0,\n        //ZLX        = 1,\n        LZ4          = 2,\n        Brotli       = 3,\n        \n        LegacyLZ4    = 255,\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentTypeWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Provides methods and properties for compiling a specific managed type into a binary format.\n    /// </summary>\n    public abstract class ContentTypeWriter\n    {\n        private readonly Type _targetType;\n        protected int _typeVersion;\n\n        /// <summary>\n        /// Determines if deserialization into an existing object is possible.\n        /// </summary>\n        /// <value>true if the object can be deserialized into; false otherwise.</value>\n        public virtual bool CanDeserializeIntoExistingObject\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Gets the type handled by this compiler component.\n        /// </summary>\n        /// <value>The type handled by this compiler component.</value>\n        public Type TargetType { get { return _targetType; } }\n\n        /// <summary>\n        /// Gets a format version number for this type.\n        /// </summary>\n        /// <value>A format version number for this type.</value>\n        public virtual int TypeVersion { get { return _typeVersion; } }\n\n        /// <summary>\n        /// Initializes a new instance of the ContentTypeWriter class.\n        /// </summary>\n        /// <param name=\"targetType\"></param>\n        protected ContentTypeWriter(Type targetType)\n        {\n            if (targetType == null)\n                throw new ArgumentNullException();\n\n            _targetType = targetType;\n        }\n        \n        /// <summary>\n        /// Gets the assembly qualified name of the runtime loader for this type.\n        /// </summary>\n        /// <param name=\"targetPlatform\">Name of the platform.</param>\n        /// <returns>Name of the runtime loader.</returns>\n        public abstract string GetRuntimeReader(TargetPlatform targetPlatform);\n\n        /// <summary>\n        /// Gets the assembly qualified name of the runtime target type. The runtime target type often matches the design time type, but may differ.\n        /// </summary>\n        /// <param name=\"targetPlatform\">The target platform.</param>\n        /// <returns>The qualified name.</returns>\n        public virtual string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string typeFullName = _targetType.FullName;\n            string typeAssembly = _targetType.Assembly.FullName;\n\n            string runtimeType = typeFullName + \", \" + typeAssembly;\n            return runtimeType;\n        }\n\n        /// <summary>\n        /// Retrieves and caches nested type writers and allows for reflection over the target data type. Called by the framework at creation time.\n        /// </summary>\n        /// <param name=\"compiler\">The content compiler.</param>\n        protected internal virtual void Initialize(ContentCompiler compiler)\n        {\n\n        }\n\n        /// <summary>\n        /// Allows type writers to add their element type writers to the content writer.\n        /// </summary>\n        /// <param name=\"writer\">The content writer.</param>\n        internal virtual void OnAddedToContentWriter(ContentWriter writer)\n        {\n\n        }\n\n        /// <summary>\n        /// Indicates whether a given type of content should be compressed.\n        /// </summary>\n        /// <param name=\"targetPlatform\">The target platform of the content build.</param>\n        /// <param name=\"value\">The object about to be serialized, or null if a collection of objects is to be serialized.</param>\n        /// <returns>true if the content of the requested type should be compressed; false otherwise.</returns>\n        /// <remarks>This base class implementation of this method always returns true. It should be overridden\n        /// to return false if there would be little or no useful reduction in size of the content type's data\n        /// from a general-purpose lossless compression algorithm.\n        /// The implementations for Song Class and SoundEffect Class data return false because data for these\n        /// content types is already in compressed form.</remarks>\n        protected internal virtual bool ShouldCompressContent(TargetPlatform targetPlatform, object value)\n        {\n            return true;\n        }\n\n        /// <summary>\n        /// Compiles an object into binary format.\n        /// </summary>\n        /// <param name=\"output\">The content writer serializing the value.</param>\n        /// <param name=\"value\">The resultant object.</param>\n        protected abstract void Write(ContentWriter output, object value);\n\n        internal void InternalWrite(ContentWriter output, object value)\n        {\n            this.Write(output, value);\n        }\n    }\n\n    /// <summary>\n    /// Provides a generic implementation of ContentTypeWriter methods and properties for compiling a specific managed type into a binary format.\n    /// </summary>\n    /// <typeparam name=\"T\">The type to write</typeparam>\n    /// <remarks>This is a generic implementation of ContentTypeWriter and, therefore, can handle strongly typed content data.</remarks>\n    public abstract class ContentTypeWriter<T> : ContentTypeWriter\n    {\n        /// <summary>\n        /// Initializes a new instance of the ContentTypeWriter class.\n        /// </summary>\n        protected ContentTypeWriter()\n            : base(typeof(T))\n        {\n        }\n\n        /// <summary>\n        /// Compiles an object into binary format.\n        /// </summary>\n        /// <param name=\"output\">The content writer serializing the value.</param>\n        /// <param name=\"value\">The value to write.</param>\n        protected override void Write(ContentWriter output, object value)\n        {\n            Write(output, (T)value);\n        }\n\n        /// <summary>\n        /// Compiles a strongly typed object into binary format.\n        /// </summary>\n        /// <param name=\"output\">The content writer serializing the value.</param>\n        /// <param name=\"value\">The value to write.</param>\n        protected abstract void Write(ContentWriter output, T value);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentTypeWriterAttribute.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Identifies the components of a type writer. Custom content writers must apply this attribute to their class as well as extend the ContentTypeWriter class.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class)]\n    public sealed class ContentTypeWriterAttribute : Attribute\n    {\n        /// <summary>\n        /// Initializes a new instance of the ContentTypeWriterAttribute class.\n        /// </summary>\n        public ContentTypeWriterAttribute()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentTypeWriterBase.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Base class for the built-in content type writers where the content type is the same as the runtime type.\n    /// </summary>\n    /// <typeparam name=\"T\">The content type being written.</typeparam>\n    internal abstract class ContentTypeWriterBase<T> : ContentTypeWriter<T>\n    {\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            // Change \"Writer\" in this class name to \"Reader\" and use the runtime type namespace and assembly\n            string readerName = this.GetType().Name.Replace(\"Writer\", \"Reader\");\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + \".\" + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string typeFullName = TargetType.FullName;\n            string typeAssembly = TargetType.Assembly.FullName;\n\n            if (typeAssembly.StartsWith(\"Xna.Framework,\"))\n                typeAssembly = \"Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeType = typeFullName + \", \" + typeAssembly;\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentTypeWriterBaseGeneric.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Base class for the built-in content type writers where the content type is the same as the runtime type.\n    /// </summary>\n    /// <typeparam name=\"T\">The content type being written.</typeparam>\n    internal abstract class ContentTypeWriterBaseGeneric<T> : ContentTypeWriter<T>\n    {\n        private List<ContentTypeWriter> _genericArgWriters;\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            base.Initialize(compiler);\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n\n            _genericArgWriters = new List<ContentTypeWriter>();\n\n            Type[] arguments = TargetType.GetGenericArguments();\n            foreach (Type argType in arguments)\n            {\n                ContentTypeWriter argWriter = output.GetTypeWriter(argType);\n                _genericArgWriters.Add(argWriter);\n            }\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            // Change \"Writer\" in this class name to \"Reader\" and use the runtime type namespace and assembly\n            string readerName = this.GetType().Name.Replace(\"Writer\", \"Reader\");\n\n            // Add generic arguments\n            readerName += \"[\";\n            foreach (ContentTypeWriter argWriter in _genericArgWriters)\n            {\n                readerName += \"[\";\n                readerName += argWriter.GetRuntimeType(targetPlatform);\n                readerName += \"]\";\n                // Important: Do not add a space char after the comma because \n                // this will not work with Type.GetType in Xamarin.Android!\n                readerName += \",\";\n            }\n            readerName = readerName.TrimEnd(',', ' ');\n            readerName += \"]\";\n\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + \".\" + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string typeFullName = TargetType.FullName;\n            string typeAssembly = TargetType.Assembly.FullName;\n\n            if (typeAssembly.StartsWith(\"Xna.Framework,\"))\n                typeAssembly = \"Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeType = typeFullName + \", \" + typeAssembly;\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Utilities;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Provides an implementation for many of the ContentCompiler methods including compilation, state tracking for shared resources and creation of the header type manifest.\n    /// </summary>\n    /// <remarks>A new ContentWriter is constructed for each compilation operation.</remarks>\n    public sealed class ContentWriter : BinaryWriter\n    {\n        ContentCompiler _compiler;\n        TargetPlatform _targetPlatform;\n        GraphicsProfile _targetProfile;\n        string _rootDirectory;\n        string _referenceRelocationPath;\n\n        List<ContentTypeWriter> _typeWriters = new List<ContentTypeWriter>();\n        Dictionary<Type, int> _typeWriterMap = new Dictionary<Type, int>();\n        Dictionary<Type, ContentTypeWriter> _typeMap = new Dictionary<Type, ContentTypeWriter>();\n\n        List<object> _sharedResources = new List<object>();\n        Dictionary<object, int> _sharedResourceMap = new Dictionary<object, int>();\n\n        internal IList<object> SharedResources  { get {return _sharedResources; } }\n\n        internal ICollection<ContentTypeWriter> TypeWriters { get {return _typeWriters; } }\n\n        /// <summary>\n        /// Gets the content build target platform.\n        /// </summary>\n        public TargetPlatform TargetPlatform { get { return _targetPlatform; } }\n\n        /// <summary>\n        /// Gets or sets the target graphics profile.\n        /// </summary>\n        public GraphicsProfile TargetProfile { get { return _targetProfile; } }\n\n        /// <summary>\n        /// Creates a new instance of ContentWriter.\n        /// </summary>\n        /// <param name=\"compiler\">The compiler object that created this writer.</param>\n        /// <param name=\"output\">The stream to write the XNB file to.</param>\n        /// <param name=\"targetPlatform\">The platform the XNB is intended for.</param>\n        /// <param name=\"targetProfile\">The graphics profile of the target.</param>\n        /// <param name=\"rootDirectory\">The root directory of the content.</param>\n        /// <param name=\"referenceRelocationPath\">The path of the XNB file, used to calculate relative paths for external references.</param>\n        internal ContentWriter(ContentCompiler compiler, Stream output, TargetPlatform targetPlatform, GraphicsProfile targetProfile, string rootDirectory, string referenceRelocationPath)\n            : base(output)\n        {\n            this._compiler = compiler;\n            this._targetPlatform = targetPlatform;\n            this._targetProfile = targetProfile;\n            this._rootDirectory = rootDirectory;\n\n            // Normalize the directory format so PathHelper.GetRelativePath will compute external references correctly.\n            this._referenceRelocationPath = PathHelper.NormalizeDirectory(referenceRelocationPath);\n        }\n\n        /// <summary>\n        /// Releases the resources used by the IDisposable class.\n        /// </summary>\n        /// <param name=\"disposing\">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n        /// <summary>\n        /// Write all shared resources at the end of the file.\n        /// </summary>\n        internal void WriteSharedResources(IList<object> sharedResources)\n        {\n            for (int i = 0; i < _sharedResources.Count; i++)\n            {\n                object resource = _sharedResources[i];\n                WriteObject<object>(resource);\n            }\n        }\n\n\n        /// <summary>\n        /// Gets a ContentTypeWriter for the given type.\n        /// </summary>\n        /// <param name=\"type\">The type of the object to write.</param>\n        /// <returns>The ContentTypeWriter for the type.</returns>\n        internal ContentTypeWriter GetTypeWriter(Type type)\n        {\n            ContentTypeWriter typeWriter = null;\n            if (_typeMap.TryGetValue(type, out typeWriter))\n                return typeWriter;\n\n            int index = _typeWriters.Count;\n            typeWriter = _compiler.GetTypeWriter(type);\n\n            _typeWriters.Add(typeWriter);\n            if (!_typeWriterMap.ContainsKey(typeWriter.GetType()))\n                _typeWriterMap.Add(typeWriter.GetType(), index);\n\n            _typeMap.Add(type, typeWriter);\n\n            typeWriter.OnAddedToContentWriter(this);\n\n            return typeWriter;\n        }\n\n        /// <summary>\n        /// Writes the name of an external file to the output binary.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of reference.</typeparam>\n        /// <param name=\"reference\">External reference to a data file for the content item.</param>\n        public void WriteExternalReference<T>(ExternalReference<T> reference)\n        {\n            if (reference == null)\n            {\n                Write(string.Empty);\n            }\n            else\n            {\n                string fileName = reference.Filename;\n                if (string.IsNullOrEmpty(fileName))\n                {\n                    Write(string.Empty);\n                }\n                else\n                {\n                    // Make sure the filename ends with .xnb\n                    if (!fileName.EndsWith(\".xnb\"))\n                        throw new ArgumentException(string.Format(\"ExternalReference '{0}' must reference a .xnb file\", fileName));\n                    // Make sure it is in the same root directory\n                    if (!fileName.StartsWith(_rootDirectory, StringComparison.OrdinalIgnoreCase))\n                        throw new ArgumentException(string.Format(\"ExternalReference '{0}' must be in the root directory '{1}'\", fileName, _rootDirectory));\n                    // Strip the .xnb extension\n                    fileName = fileName.Substring(0, fileName.Length - 4);\n                    // Get the relative directory\n                    fileName = PathHelper.GetRelativePath(_referenceRelocationPath, fileName);\n                    Write(fileName);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Writes a single object preceded by a type identifier to the output binary.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of value.</typeparam>\n        /// <param name=\"value\">The value to write.</param>\n        /// <remarks>This method can be called recursively with a null value.</remarks>\n        public void WriteObject<T>(T value)\n        {\n            if (value == null)\n                Write7BitEncodedInt(0);\n            else\n            {\n                ContentTypeWriter typeWriter = GetTypeWriter(value.GetType());\n\n                // Because zero means null object, we add one to \n                // the index before writing it to the file.\n                int index = _typeWriterMap[typeWriter.GetType()];\n                Write7BitEncodedInt(index + 1);\n\n                typeWriter.InternalWrite(this, value);\n            }\n        }\n\n        /// <summary>\n        /// Writes a single object to the output binary, using the specified type hint and writer worker.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of value.</typeparam>\n        /// <param name=\"value\">The value to write.</param>\n        /// <param name=\"typeWriter\">The content type writer.</param>\n        /// <remarks>The type hint should be retrieved from the Initialize method of the ContentTypeWriter\n        /// that is calling WriteObject, by calling GetTypeWriter and passing it the type of the field used\n        /// to hold the value being serialized.\n        /// </remarks>\n        public void WriteObject<T>(T value, ContentTypeWriter typeWriter)\n        {\n            if (typeWriter == null)\n                throw new ArgumentNullException(\"typeWriter\");\n\n            if (typeWriter.TargetType.IsValueType)\n                typeWriter.InternalWrite(this, value);\n            else\n                WriteObject(value);\n        }\n\n        /// <summary>\n        /// Writes a single object to the output binary as an instance of the specified type.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of value.</typeparam>\n        /// <param name=\"value\">The value to write.</param>\n        /// <remarks>If you specify a base class of the actual object value only data from this base type\n        /// will be written. This method does not write any type identifier so it cannot support null or\n        /// polymorphic values, and the reader must specify an identical type while loading the compiled data.</remarks>\n        public void WriteRawObject<T>(T value)\n        {\n            WriteRawObject<T>(value, GetTypeWriter(typeof(T)));\n        }\n\n        /// <summary>\n        /// Writes a single object to the output binary using the specified writer worker.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of value.</typeparam>\n        /// <param name=\"value\">The value to write.</param>\n        /// <param name=\"typeWriter\">The writer worker. This should be looked up from the Initialize method\n        /// of the ContentTypeWriter that is calling WriteRawObject, by calling GetTypeWriter.</param>\n        /// <remarks>WriteRawObject does not write any type identifier, so it cannot support null or polymorphic\n        /// values, and the reader must specify an identical type while loading the compiled data.</remarks>\n        public void WriteRawObject<T>(T value, ContentTypeWriter typeWriter)\n        {\n            if (value == null)\n                throw new ArgumentNullException(\"value\");\n            if (typeWriter == null)\n                throw new ArgumentNullException(\"typeWriter\");\n\n            typeWriter.InternalWrite(this, value);\n        }\n\n        /// <summary>\n        /// Adds a shared reference to the output binary and records the object to be serialized later.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of value.</typeparam>\n        /// <param name=\"value\">The object to record.</param>\n        public void WriteSharedResource<T>(T value)\n        {\n            int index = GetSharedResourceIndex(value);\n            Write7BitEncodedInt(index);\n        }\n\n        private int GetSharedResourceIndex(object value)\n        {\n            if (value != null)\n            {\n                int index;\n                if (!_sharedResourceMap.TryGetValue(value, out index))\n                {\n                    // Add it to the list of shared resources\n                    _sharedResources.Add(value);\n                    index = _sharedResources.Count - 1;\n\n                    _sharedResourceMap.Add(value, index);\n                }\n                return (index + 1); // Because zero means null value, we add one to the index\n            }\n            else\n            {\n                return 0; // Zero means a null value\n            }\n        }\n\n        /// <summary>\n        /// Writes a Complex value.\n        /// </summary>\n        /// <param name=\"value\">Value of a color using Red, Green, Blue, and Alpha values to write.</param>\n        public void Write(Complex value)\n        {\n            Write(value.R);\n            Write(value.i);\n        }\n\n        /// <summary>\n        /// Writes a Matrix value.\n        /// </summary>\n        /// <param name=\"value\">Value to write.</param>\n        public void Write(Matrix value)\n        {\n            Write(value.M11);\n            Write(value.M12);\n            Write(value.M13);\n            Write(value.M14);\n            Write(value.M21);\n            Write(value.M22);\n            Write(value.M23);\n            Write(value.M24);\n            Write(value.M31);\n            Write(value.M32);\n            Write(value.M33);\n            Write(value.M34);\n            Write(value.M41);\n            Write(value.M42);\n            Write(value.M43);\n            Write(value.M44);\n        }\n\n        /// <summary>\n        /// Writes a Quaternion value.\n        /// </summary>\n        /// <param name=\"value\">Value to write.</param>\n        public void Write(Quaternion value)\n        {\n            Write(value.X);\n            Write(value.Y);\n            Write(value.Z);\n            Write(value.W);\n        }\n\n        /// <summary>\n        /// Writes a Vector2 value.\n        /// </summary>\n        /// <param name=\"value\">Value to write.</param>\n        public void Write(Vector2 value)\n        {\n            Write(value.X);\n            Write(value.Y);\n        }\n\n        /// <summary>\n        /// Writes a Vector3 value.\n        /// </summary>\n        /// <param name=\"value\">Value to write.</param>\n        public void Write(Vector3 value)\n        {\n            Write(value.X);\n            Write(value.Y);\n            Write(value.Z);\n        }\n\n        /// <summary>\n        /// Writes a Vector4 value.\n        /// </summary>\n        /// <param name=\"value\">Value to write.</param>\n        public void Write(Vector4 value)\n        {\n            Write(value.X);\n            Write(value.Y);\n            Write(value.Z);\n            Write(value.W);\n        }\n\n\n        /// <summary>\n        /// Helper for checking if a type can be deserialized into an existing object.\n        /// </summary>\n        /// <param name=\"type\">The type to check.</param>\n        /// <returns>True if the type can be deserialized into an existing object.</returns>\n        internal bool CanDeserializeIntoExistingObject(Type type)\n        {\n            ContentTypeWriter typeWriter = _compiler.GetTypeWriter(type);\n            return typeWriter != null && typeWriter.CanDeserializeIntoExistingObject;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/CurveWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Curve;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Curve value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class CurveWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write((Int32)value.PreLoop);\n            output.Write((Int32)value.PostLoop);\n            output.Write(value.Keys.Count);\n            foreach (var key in value.Keys)\n            {\n                output.Write(key.Position);\n                output.Write(key.Value);\n                output.Write(key.TangentIn);\n                output.Write(key.TangentOut);\n                output.Write((Int32)key.Continuity);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/DateTimeWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.DateTime;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the DateTime value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class DateTimeWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            UInt64 ticks = (UInt64)value.Ticks & ~((UInt64)0xC << 62);\n            UInt64 kind = (UInt64)value.Kind << 62;\n            output.Write((UInt64)(ticks | kind));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/DecimalWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Decimal;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the decimal value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class DecimalWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/DictionaryWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the dictionary to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class DictionaryWriter<K,V> : ContentTypeWriterBaseGeneric<Dictionary<K,V>>\n    {\n        ContentTypeWriter _keyWriter;\n        ContentTypeWriter _valueWriter;\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            base.Initialize(compiler);\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n\n            _keyWriter = output.GetTypeWriter(typeof(K));\n            _valueWriter = output.GetTypeWriter(typeof(V));\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return true; }\n        }\n\n        protected override void Write(ContentWriter output, Dictionary<K,V> value)\n        {\n            if (value == null)\n                throw new ArgumentNullException(\"value\");\n\n            output.Write(value.Count);\n            foreach (var element in value)\n            {\n                output.WriteObject(element.Key, _keyWriter);\n                output.WriteObject(element.Value, _valueWriter);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/DoubleWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Double;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the double precision floating point value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class DoubleWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/EnumWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the enum value to the output. Usually 32 bit, but can be other sizes if T is not integer.\n    /// </summary>\n    /// <typeparam name=\"T\">The enum type to write.</typeparam>\n    [ContentTypeWriter]\n    class EnumWriter<T> : ContentTypeWriterBaseGeneric<T>\n    {\n        Type _underlyingType;\n        ContentTypeWriter _underlyingTypeWriter;\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            base.Initialize(compiler);\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n            _underlyingType = Enum.GetUnderlyingType(typeof(T));\n            _underlyingTypeWriter = output.GetTypeWriter(_underlyingType);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".EnumReader`1\"\n                              + \"[[\"\n                              + GetRuntimeType(targetPlatform)\n                              + \"]]\"\n                              ;\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        protected override void Write(ContentWriter output, T value)\n        {\n            output.WriteRawObject(Convert.ChangeType(value, _underlyingType), _underlyingTypeWriter);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ExternalReferenceWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the external reference to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class ExternalReferenceWriter<T> : ContentTypeWriterBaseGeneric<ExternalReference<T>>\n    {\n        private ContentTypeWriter _targetWriter;\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            base.Initialize(compiler);\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n            _targetWriter = output.GetTypeWriter(typeof(T));\n        }\n\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, ExternalReference<T> value)\n        {\n            output.WriteExternalReference(value);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".ExternalReferenceReader\";\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string runtimeType = _targetWriter.GetRuntimeType(targetPlatform);\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Int16Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Int16;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the signed short value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class Int16Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Int32Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Int32;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the signed integer value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class Int32Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Int64Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Int64;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the signed long value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class Int64Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ListWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the list to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class ListWriter<T> : ContentTypeWriterBaseGeneric<List<T>>\n    {\n        ContentTypeWriter _elementWriter;\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            base.Initialize(compiler);\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n\n            _elementWriter = output.GetTypeWriter(typeof(T));\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return true; }\n        }\n\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, List<T> value)\n        {\n            if (value == null)\n                throw new ArgumentNullException(\"value\");\n\n            output.Write(value.Count);\n            foreach (var element in value)\n            {\n                output.WriteObject(element, _elementWriter);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/MatrixWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Matrix;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Matrix value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class MatrixWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/MultiArrayWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the array value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class MultiArrayWriter<T> : ContentTypeWriterBaseGeneric<Array>\n    {\n        ContentTypeWriter _elementWriter;\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            base.Initialize(compiler);\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n\n            _elementWriter = output.GetTypeWriter(typeof(T));\n        }\n\n\n        protected override void Write(ContentWriter output, Array value)\n        {\n            if (value == null)\n                throw new ArgumentNullException(\"value\");\n\n            var rank = value.Rank;\n\n            // Dimension sizes\n            output.Write(rank);\n            for (int dimension = 0; dimension < rank; dimension++)\n                output.Write(value.GetLength(dimension));\n\n            // Values\n            var indices = new int[rank];\n            for (int i = 0; i < value.Length; i++)\n            {\n                CalcIndices(value, i, indices);\n                output.WriteObject(value.GetValue(indices), _elementWriter);\n            }\n        }\n\n        static void CalcIndices(Array array, int index, int[] indices)\n        {\n            if (array.Rank != indices.Length)\n                throw new Exception(\"indices\");\n\n            for (int d = 0; d < indices.Length; d++)\n            {\n                if (index == 0)\n                    indices[d] = 0;\n                else\n                {\n                    indices[d] = index % array.GetLength(d);\n                    index /= array.GetLength(d);\n                }\n            }\n\n            if (index != 0)\n                throw new ArgumentOutOfRangeException(\"index\");\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".MultiArrayReader`1\"\n                              + \"[[\"\n                              + _elementWriter.GetRuntimeType(targetPlatform)\n                              + \"]]\"\n                              ;\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/NullableWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the nullable value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class NullableWriter<T> : ContentTypeWriterBaseGeneric<Nullable<T>> where T: struct\n    {\n        ContentTypeWriter _elementWriter;\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            base.Initialize(compiler);\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n\n            _elementWriter = output.GetTypeWriter(typeof(T));\n        }\n\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, Nullable<T> value)\n        {\n            output.Write(value.HasValue);\n            if (value.HasValue)\n                output.WriteObject(value.Value, _elementWriter);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/PlaneWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Plane;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Plane value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class PlaneWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.Normal);\n            output.Write(value.D);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/PointWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Point;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Point value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class PointWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.X);\n            output.Write(value.Y);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/QuaternionWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Quaternion;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Quaternion value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class QuaternionWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/RayWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Ray;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Ray value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class RayWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.Position);\n            output.Write(value.Direction);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/RectangleWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Rectangle;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Rectangle value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class RectangleWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.X);\n            output.Write(value.Y);\n            output.Write(value.Width);\n            output.Write(value.Height);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ReflectiveWriter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing Microsoft.Xna.Framework.Content.Pipeline.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    class ReflectiveWriter<T> : ContentTypeWriter\n    {\n        private ContentCompiler _compiler;\n\n        private PropertyInfo[] _properties;\n        private FieldInfo[] _fields;\n\n        private Type _baseType;\n\n        private string _runtimeType;\n\n        private static HashSet<MemberInfo> _sharedResources = new HashSet<MemberInfo>();\n\n        public ReflectiveWriter()\n            : base(typeof(T))\n        {\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return TargetType.IsClass; }\n        }\n\n        protected internal override void Initialize(ContentCompiler compiler)\n        {\n            _compiler = compiler;\n\n            Type type = ReflectionHelpers.GetBaseType(TargetType);                \n            if (type != null && type != typeof(object) && !TargetType.IsValueType)\n                _baseType = type;\n\n            var runtimeType = TargetType.GetCustomAttributes(typeof(ContentSerializerRuntimeTypeAttribute), false).FirstOrDefault() as ContentSerializerRuntimeTypeAttribute;\n            if (runtimeType != null)\n                _runtimeType = runtimeType.RuntimeType;\n\n            var typeVersion = TargetType.GetCustomAttributes(typeof(ContentSerializerTypeVersionAttribute), false).FirstOrDefault() as ContentSerializerTypeVersionAttribute;\n            if (typeVersion != null)\n                _typeVersion = typeVersion.TypeVersion;\n\n            _properties = TargetType.GetAllProperties().Where(IsValidProperty).ToArray();\n            _fields = TargetType.GetAllFields().Where(IsValidField).ToArray();\n        }\n\n        /// <inheritdoc/>\n        internal override void OnAddedToContentWriter(ContentWriter output)\n        {\n            base.OnAddedToContentWriter(output);\n\n            foreach (var property in _properties)\n                output.GetTypeWriter(property.PropertyType);\n\n            foreach (var field in _fields)\n                output.GetTypeWriter(field.FieldType);\n        }\n\n        private bool IsValidProperty(PropertyInfo property)\n        {\n            // Properties must have at least a getter.\n            if (property.CanRead == false)\n                return false;\n\n            // Skip over indexer properties.\n            if (property.Name == \"Item\" && property.GetIndexParameters().Length > 0)\n                return false;\n\n            // Are we explicitly asked to ignore this item?\n            if (ReflectionHelpers.GetCustomAttribute<ContentSerializerIgnoreAttribute>(property) != null)\n                return false;\n\n            var contentSerializerAttribute = ReflectionHelpers.GetCustomAttribute<ContentSerializerAttribute>(property);\n            if (contentSerializerAttribute == null)\n            {\n                // There is no ContentSerializerAttribute, so non-public\n                // properties cannot be serialized.\n                if (!ReflectionHelpers.PropertyIsPublic(property))\n                    return false;\n\n                // Check the type reader to see if it is safe to\n                // deserialize into the existing type.\n                if (!property.CanWrite)\n                {\n                    if (!_compiler.GetTypeWriter(property.PropertyType).CanDeserializeIntoExistingObject)\n                        return false;\n                }\n            }\n            else if (contentSerializerAttribute.SharedResource)\n            {\n                _sharedResources.Add(property);\n            }\n\n            return true;\n        }\n\n        private bool IsValidField(FieldInfo field)\n        {\n            // Are we explicitly asked to ignore this item?\n            if (ReflectionHelpers.GetCustomAttribute<ContentSerializerIgnoreAttribute>(field) != null)\n                return false;\n\n            var contentSerializerAttribute = ReflectionHelpers.GetCustomAttribute<ContentSerializerAttribute>(field);\n            if (contentSerializerAttribute == null)\n            {\n                // There is no ContentSerializerAttribute, so non-public\n                // fields cannot be deserialized.\n                if (!field.IsPublic)\n                    return false;\n\n                // evolutional: Added check to skip initialise only fields\n                if (field.IsInitOnly)\n                    return false;\n            }\n            else if (contentSerializerAttribute.SharedResource)\n            {\n                _sharedResources.Add(field);\n            }\n\n            return true;\n        }\n\n        private static void Write(object parent, ContentWriter output, MemberInfo member)\n        {\n            PropertyInfo property = member as PropertyInfo;\n            FieldInfo field = member as FieldInfo;\n            Debug.Assert(field != null || property != null);\n\n            Type elementType;\n            object memberObject;\n\n            if (property != null)\n            {\n                elementType = property.PropertyType;\n                memberObject = property.GetValue(parent, null);\n            }\n            else\n            {\n                elementType = field.FieldType;\n                memberObject = field.GetValue(parent);\n            }\n\n            if (_sharedResources.Contains(member))\n                output.WriteSharedResource(memberObject);\n            else\n            {\n                ContentTypeWriter writer = output.GetTypeWriter(elementType);\n                if (writer == null || elementType == typeof(object) || elementType == typeof(Array))\n                    output.WriteObject(memberObject);\n                else\n                    output.WriteObject(memberObject, writer);\n            }\n        }\n\n        protected override void Write(ContentWriter output, object value)\n        {\n            if (_baseType != null)\n            {\n                ContentTypeWriter baseTypeWriter = output.GetTypeWriter(_baseType);\n                baseTypeWriter.InternalWrite(output, value);\n            }\n\n            foreach (PropertyInfo property in _properties)\n                Write(value, output, property);\n\n            foreach (FieldInfo field in _fields)\n                Write(value, output, field);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".ReflectiveReader`1\"\n                              + \"[[\"\n                              + GetRuntimeType(targetPlatform) \n                              + \"]]\"\n                              ;\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            if (string.IsNullOrEmpty(_runtimeType))\n                return base.GetRuntimeType(targetPlatform);\n\n            return _runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/SByteWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.SByte;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the signed byte value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class SByteWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/SingleWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.Single;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the single precision floating point value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class SingleWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/StringWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.String;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the string value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class StringWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/TimeSpanWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.TimeSpan;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the TimeSpan value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class TimeSpanWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.Ticks);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/UInt16Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.UInt16;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the unsigned short value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class UInt16Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/UInt32Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.UInt32;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the unsigned integer value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class UInt32Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/UInt64Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = System.UInt64;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the unsigned long value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class UInt64Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Vector2Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Vector2;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Vector2 value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class Vector2Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Vector3Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Vector3;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Vector3 value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class Vector3Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Vector4Writer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Vector4;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Vector4 value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class Vector4Writer : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ArraySerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    class ArraySerializer<T> : ContentTypeSerializer<T[]>\n    {\n        private readonly ListSerializer<T> _listSerializer;\n\n        public ArraySerializer() :\n            base(\"array\")\n        {\n            _listSerializer = new ListSerializer<T>();\n        }\n\n        protected internal override void Initialize(IntermediateSerializer serializer)\n        {\n            _listSerializer.Initialize(serializer);\n        }\n\n        public override bool ObjectIsEmpty(T[] value)\n        {\n            return value.Length == 0;\n        }\n\n        protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, T[] value)\n        {\n            _listSerializer.ScanChildren(serializer, callback, new List<T>(value));\n        }\n\n        protected internal override T[] Deserialize(IntermediateReader input, ContentSerializerAttribute format, T[] existingInstance)\n        {\n            if (existingInstance != null)\n                throw new InvalidOperationException(\"You cannot deserialize an array into a getter-only property.\");\n            var result = _listSerializer.Deserialize(input, format, null);\n            return result.ToArray();\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, T[] value, ContentSerializerAttribute format)\n        {\n            _listSerializer.Serialize(output, new List<T>(value), format);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/BoolSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class BoolSerializer : ElementSerializer<bool>\n    {\n        public BoolSerializer() :\n            base(\"bool\", 1)\n        {\n        }\n\n        protected internal override bool Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToBoolean(inputs[index++]);\n        }\n\n        protected internal override void Serialize(bool value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ByteSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class ByteSerializer : ElementSerializer<byte>\n    {\n        public ByteSerializer() :\n            base(\"byte\", 1)\n        {\n        }\n\n        protected internal override byte Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToByte(inputs[index++]);\n        }\n\n        protected internal override void Serialize(byte value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/CharSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class CharSerializer : ElementSerializer<char>\n    {\n        public CharSerializer() :\n            base(\"char\", 1)\n        {\n        }\n\n        protected internal override char Deserialize(string[] inputs, ref int index)\n        {\n            var str = inputs[index++];\n            if (str.Length == 1)\n                return XmlConvert.ToChar(str);\n\n            // Try parsing it as a UTF code.\n            int val;\n            if (int.TryParse(str, out val))\n                return char.ConvertFromUtf32(val)[0];\n\n            // Last ditch effort to decode it as XML escape value.\n            return XmlConvert.ToChar(XmlConvert.DecodeName(str));\n        }\n\n        protected internal override void Serialize(char value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ColorSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class ColorSerializer : ElementSerializer<Color>\n    {\n        public ColorSerializer() :\n            base(\"Color\", 1)\n        {\n        }\n\n        protected internal override Color Deserialize(string[] inputs, ref int index)\n        {\n            // NOTE: The value is serialized in ARGB format.\n            var value = uint.Parse(inputs[index++], NumberStyles.HexNumber, CultureInfo.InvariantCulture);\n            return new Color(   (int)(value >> 16 & 0xFF),\n                                (int)(value >> 8 & 0xFF),\n                                (int)(value >> 0 & 0xFF),\n                                (int)(value >> 24 & 0xFF));\n        }\n\n        protected internal override void Serialize(Color value, List<string> results)\n        {\n            // NOTE: The value is serialized in ARGB format.\n            results.Add(string.Format(\"{0:X2}{1:X2}{2:X2}{3:X2}\", value.A, value.R, value.G, value.B));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ContentTypeSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    public abstract class ContentTypeSerializer\n    {\n        protected ContentTypeSerializer(Type targetType, string xmlTypeName)\n        {\n            TargetType = targetType;\n            XmlTypeName = xmlTypeName;\n        }\n\n        public virtual bool CanDeserializeIntoExistingObject\n        {\n            get { return false; }\n        }\n\n        public Type TargetType { get; private set; }\n\n        public string XmlTypeName { get; private set; }\n\n        protected internal abstract object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance);\n\n        protected internal virtual void Initialize(IntermediateSerializer serializer)\n        {     \n        }\n\n        public virtual bool ObjectIsEmpty(object value)\n        {\n            return false;\n        }\n\n        protected internal virtual void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, object value)\n        {\n        }\n\n        protected internal abstract void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format);\n\n        internal protected delegate void ChildCallback(ContentTypeSerializer typeSerializer, object value);\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ContentTypeSerializerAttribute.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    /// <summary>\n    /// Used to identify custom ContentTypeSerializer classes. \n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n    public sealed class ContentTypeSerializerAttribute : Attribute\n    {\n        /// <summary>\n        /// Initializes an instance of the ContentTypeSerializerAttribute.\n        /// </summary>\n        public ContentTypeSerializerAttribute()\n        {\n        }\n\n\n        private static readonly object _lock = new object();\n\n        private static ReadOnlyCollection<Type> _types;\n\n        static internal ReadOnlyCollection<Type> GetTypes()\n        {\n            lock (_lock)\n            {\n                if (_types == null)\n                {\n                    var found = new List<Type>();\n                    var assemblies = AppDomain.CurrentDomain.GetAssemblies();\n                    foreach (var assembly in assemblies)\n                    {\n                        try\n                        {\n                            var types = assembly.GetTypes();\n                            foreach (var type in types)\n                            {\n                                var attributes = type.GetCustomAttributes(typeof (ContentTypeSerializerAttribute), false);\n                                if (attributes.Length > 0)\n                                    found.Add(type);\n                            }\n                        }\n                        catch (System.Reflection.ReflectionTypeLoadException ex)\n                        {\n                            Console.WriteLine(\"Warning: \" + ex.Message);\n                        }\n                    }\n\n                    _types = new ReadOnlyCollection<Type>(found);\n                }\n            }\n\n            return _types;\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ContentTypeSerializerT.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    public abstract class ContentTypeSerializer<T> : ContentTypeSerializer\n    {\n        protected ContentTypeSerializer() :\n            this(string.Empty)\n        {\n        }\n\n        protected ContentTypeSerializer(string xmlTypeName) :\n            base(typeof(T), xmlTypeName)\n        {\n        }\n\n        protected internal abstract T Deserialize(IntermediateReader input, ContentSerializerAttribute format, T existingInstance);\n\n        protected internal override object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance)\n        {\n            T cast = existingInstance == null ? default(T) : (T)existingInstance;\n            return Deserialize(input, format, cast);\n        }\n\n        public virtual bool ObjectIsEmpty(T value)\n        {\n            return base.ObjectIsEmpty(value);\n        }\n        \n        public override bool ObjectIsEmpty(object value)\n        {\n            T cast = value == null ? default(T) : (T)value;\n            return ObjectIsEmpty(cast);\n        }\n\n        protected internal virtual void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, T value)\n        {\n        }\n\n        protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, object value)\n        {\n            if (value == null)\n                return;\n            ScanChildren(serializer, callback, (T)value);\n        }\n\n        protected internal abstract void Serialize(IntermediateWriter output, T value, ContentSerializerAttribute format);\n\n        protected internal override void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format)\n        {\n            T cast = value == null ? default(T) : (T)value;\n            Serialize(output, cast, format);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/CurveKeyCollectionSerializer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class CurveKeyCollectionSerializer : ContentTypeSerializer<CurveKeyCollection>\n    {\n        public CurveKeyCollectionSerializer() :\n            base(\"Keys\")\n        { }\n\n        public override bool CanDeserializeIntoExistingObject\n        { get { return true; } }\n\n        protected internal override CurveKeyCollection Deserialize(\n            IntermediateReader input,\n            ContentSerializerAttribute format,\n            CurveKeyCollection existingInstance)\n        {\n            var result = existingInstance ?? new CurveKeyCollection();\n\n            if (input.Xml.HasValue)\n            {\n                var elements = PackedElementsHelper.ReadElements(input);\n                if (elements.Length > 0)\n                {\n                    // Each CurveKey consists of 5 elements\n                    if (elements.Length % 5 != 0)\n                        throw new InvalidContentException(\n                            \"Elements count in CurveKeyCollection is inncorect!\");\n                    try\n                    {\n                        // Parse all CurveKeys\n                        for (int i = 0; i < elements.Length; i += 5)\n                        {\n                            // Order: Position, Value, TangentIn, TangentOut and Continuity\n                            var curveKey = new CurveKey\n                                (XmlConvert.ToSingle(elements[i]),\n                                 XmlConvert.ToSingle(elements[i + 1]),\n                                 XmlConvert.ToSingle(elements[i + 2]),\n                                 XmlConvert.ToSingle(elements[i + 3]),\n                                 (CurveContinuity)Enum.Parse(\n                                     typeof(CurveContinuity),\n                                     elements[i + 4],\n                                     true));\n                            result.Add(curveKey);\n                        }\n                    }\n                    catch (Exception e)\n                    {\n                        throw new InvalidContentException\n                            (\"Error parsing CurveKey\", e);\n                    }\n                }\n            }\n            return result;\n        }\n\n\n        protected internal override void Serialize(\n            IntermediateWriter output,\n            CurveKeyCollection value,\n            ContentSerializerAttribute format)\n        {\n            var elements = new List<string>();\n            foreach (var curveKey in value)\n            {\n                // Order: Position, Value, TangentIn, TangentOut and Continuity\n                elements.Add(XmlConvert.ToString(curveKey.Position));\n                elements.Add(XmlConvert.ToString(curveKey.Value));\n                elements.Add(XmlConvert.ToString(curveKey.TangentIn));\n                elements.Add(XmlConvert.ToString(curveKey.TangentOut));\n                elements.Add(curveKey.Continuity.ToString());\n            }\n            var str = PackedElementsHelper.JoinElements(elements);\n            output.Xml.WriteString(str);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/DictionarySerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class DictionarySerializer<TKey,TValue> : ContentTypeSerializer<Dictionary<TKey,TValue>>\n    {\n        private ContentTypeSerializer _keySerializer;\n        private ContentTypeSerializer _valueSerializer;\n\n        private ContentSerializerAttribute _keyFormat;\n        private ContentSerializerAttribute _valueFormat;\n\n        public DictionarySerializer() :\n            base(\"dictionary\")\n        {\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return true; }\n        }\n\n        protected internal override void Initialize(IntermediateSerializer serializer)\n        {\n            _keySerializer = serializer.GetTypeSerializer(typeof(TKey));\n            _valueSerializer = serializer.GetTypeSerializer(typeof(TValue));\n\n            _keyFormat = new ContentSerializerAttribute\n            {\n                ElementName = \"Key\",\n                AllowNull = false\n            };\n\n            _valueFormat = new ContentSerializerAttribute()\n            {\n                ElementName = \"Value\",\n                AllowNull = typeof(TValue).IsValueType\n            };\n        }\n\n        public override bool ObjectIsEmpty(Dictionary<TKey, TValue> value)\n        {\n            return value.Count == 0;\n        }\n\n        protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, Dictionary<TKey, TValue> value)\n        {\n            foreach (var kvp in value)\n            {\n                callback(_keySerializer, kvp.Key);\n                callback(_valueSerializer, kvp.Value);\n            }\n        }\n\n        protected internal override Dictionary<TKey, TValue> Deserialize(IntermediateReader input, ContentSerializerAttribute format, Dictionary<TKey, TValue> existingInstance)\n        {\n            var result = existingInstance ?? new Dictionary<TKey, TValue>();\n\n            while (input.MoveToElement(format.CollectionItemName))\n            {\n                input.Xml.ReadStartElement();\n\n                TKey key = input.ReadObject<TKey>(_keyFormat, _keySerializer);\n                TValue value = input.ReadObject<TValue>(_valueFormat, _valueSerializer);\n                result.Add(key,value);\n\n                input.Xml.ReadEndElement();\n            }\n\n            return result;\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, Dictionary<TKey, TValue> value, ContentSerializerAttribute format)\n        {\n            foreach (var kvp in value)\n            {\n                output.Xml.WriteStartElement(format.CollectionItemName);\n\n                output.WriteObject(kvp.Key, _keyFormat, _keySerializer);\n                output.WriteObject(kvp.Value, _valueFormat, _valueSerializer);\n\n                output.Xml.WriteEndElement();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/DoubleSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class DoubleSerializer : ElementSerializer<double>\n    {\n        public DoubleSerializer() :\n            base(\"double\", 1)\n        {\n        }\n\n        protected internal override double Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToDouble(inputs[index++]);\n        }\n\n        protected internal override void Serialize(double value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ElementSerializerT.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    abstract class ElementSerializer<T> : ContentTypeSerializer<T>\n    {\n        private readonly int _elementCount;\n\n        protected ElementSerializer(string xmlTypeName, int elementCount) :\n            base(xmlTypeName)\n        {\n            _elementCount = elementCount;\n        }\n\n        protected void ThrowElementCountException()\n        {\n            throw new InvalidContentException(\"Not have enough entries in space-separated list!\");\n        }\n\n        protected internal abstract T Deserialize(string [] inputs, ref int index);\n\n        protected internal abstract void Serialize(T value, List<string> results);\n\n        \n\n        protected internal void Deserialize(IntermediateReader input, List<T> results)\n        {\n            var elements = PackedElementsHelper.ReadElements(input);\n                            \n            for (int index = 0; index < elements.Length;)\n            {\n                if (elements.Length - index < _elementCount)\n                    ThrowElementCountException();\n\n                T elem = Deserialize(elements, ref index);\n                results.Add(elem);\n            }\n        }\n\n        protected internal override T Deserialize(IntermediateReader input, ContentSerializerAttribute format, T existingInstance)\n        {\n            string[] elements = PackedElementsHelper.ReadElements(input);\n\n            if (elements.Length < _elementCount)\n                ThrowElementCountException();\n\n            int index = 0;\n            return Deserialize(elements, ref index);\n        }\n\n        protected internal void Serialize(IntermediateWriter output, List<T> values)\n        {\n            List<string> elements = new List<string>();\n            for (int i = 0; i < values.Count; i++)\n                Serialize(values[i], elements);\n            string str = PackedElementsHelper.JoinElements(elements);\n            output.Xml.WriteString(str);\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, T value, ContentSerializerAttribute format)\n        {\n            List<string> elements = new List<string>();\n            Serialize(value, elements);\n            string str = PackedElementsHelper.JoinElements(elements);\n            output.Xml.WriteString(str);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/EnumSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    class EnumSerializer : ContentTypeSerializer\n    {\n        public EnumSerializer(Type targetType) :\n            base(targetType, targetType.Name)\n        {\n        }\n\n        protected internal override object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance)\n        {\n            var str = input.Xml.ReadString();\n            try\n            {\n                return Enum.Parse(TargetType, str, true);\n            }\n            catch (Exception ex)\n            {\n                throw input.NewInvalidContentException(ex, \"Invalid enum value '{0}' for type '{1}'\", str, TargetType.Name);\n            }\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format)\n        {\n            Debug.Assert(value.GetType() == TargetType, \"Got invalid value type!\");\n            output.Xml.WriteString(value.ToString());\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ExternalReferenceSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class ExternalReferenceSerializer<T> : ContentTypeSerializer<ExternalReference<T>>\n    {\n        public ExternalReferenceSerializer() :\n            base(\"ExternalReference\")\n        {\n        }\n\n        protected internal override ExternalReference<T> Deserialize(IntermediateReader input, ContentSerializerAttribute format, ExternalReference<T> existingInstance)\n        {\n            var result = existingInstance ?? new ExternalReference<T>();\n            input.ReadExternalReference(result);\n            return result;\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, ExternalReference<T> value, ContentSerializerAttribute format)\n        {\n            output.WriteExternalReference(value);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/FloatSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class FloatSerializer : ElementSerializer<float>\n    {\n        public FloatSerializer() :\n            base(\"float\", 1)\n        {\n        }\n\n        protected internal override float Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToSingle(inputs[index++]);\n        }\n\n        protected internal override void Serialize(float value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/GenericCollectionHelper.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    internal class GenericCollectionHelper\n    {\n        public static bool IsGenericCollectionType(Type type, bool checkAncestors)\n        {\n            return GetCollectionElementType(type, checkAncestors) != null;\n        }\n\n        private static Type GetCollectionElementType(Type type, bool checkAncestors)\n        {\n            if (!checkAncestors && type.BaseType != null && FindCollectionInterface(type.BaseType) != null)\n                return null;\n\n            var collectionInterface = FindCollectionInterface(type);\n            if (collectionInterface == null)\n                return null;\n\n            return collectionInterface.GetGenericArguments()[0];\n        }\n\n        private static Type FindCollectionInterface(Type type)\n        {\n            var interfaces = type.FindInterfaces((t, o) =>\n            {\n                if (t.IsGenericType)\n                    return t.GetGenericTypeDefinition() == typeof(ICollection<>);\n                return false;\n            }, null);\n\n            return (interfaces.Length == 1)\n                ? interfaces[0]\n                : null;\n        }\n\n        private readonly ContentTypeSerializer _contentSerializer;\n        private readonly PropertyInfo _countProperty;\n        private readonly MethodInfo _addMethod;\n\n        public GenericCollectionHelper(IntermediateSerializer serializer, Type type)\n        {\n            var collectionElementType = GetCollectionElementType(type, false);\n            _contentSerializer = serializer.GetTypeSerializer(collectionElementType);\n\n            var collectionType = typeof(ICollection<>).MakeGenericType(collectionElementType);\n            _countProperty = collectionType.GetProperty(\"Count\");\n            _addMethod = collectionType.GetMethod(\"Add\", new[] { collectionElementType });\n        }\n\n        public bool ObjectIsEmpty(object list)\n        {\n            return (int) _countProperty.GetValue(list, null) == 0;\n        }\n\n        public void ScanChildren(ContentTypeSerializer.ChildCallback callback, object collection)\n        {\n            foreach (var item in (IEnumerable) collection)\n                if (item != null)\n                    callback(_contentSerializer, item);\n        }\n\n        public void Serialize(IntermediateWriter output, object collection, ContentSerializerAttribute format)\n        {\n            var itemFormat = new ContentSerializerAttribute();\n            itemFormat.ElementName = format.CollectionItemName;\n            foreach (var item in (IEnumerable) collection)\n                output.WriteObject(item, itemFormat, _contentSerializer);\n        }\n\n        public void Deserialize(IntermediateReader input, object collection, ContentSerializerAttribute format)\n        {\n            var itemFormat = new ContentSerializerAttribute();\n            itemFormat.ElementName = format.CollectionItemName;\n            while (input.MoveToElement(format.CollectionItemName))\n                _addMethod.Invoke(collection, new[] { input.ReadObject<object>(itemFormat, _contentSerializer) });\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/IntSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class IntSerializer : ElementSerializer<int>\n    {\n        public IntSerializer() :\n            base(\"int\", 1)\n        {\n        }\n\n        protected internal override int Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToInt32(inputs[index++]);\n        }\n\n        protected internal override void Serialize(int value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/IntermediateReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    public sealed class IntermediateReader\n    {\n        private readonly string _filePath;\n\n        private readonly Dictionary<string, Action<object>> _resourceFixups;\n\n        private readonly Dictionary<string, List<Action<Type, string>>> _externalReferences;\n\n        public XmlReader Xml { get; private set; }\n\n        public IntermediateSerializer Serializer { get; private set; }\n\n        internal IntermediateReader(IntermediateSerializer serializer, XmlReader xmlReader, string filePath)\n        {\n            Serializer = serializer;\n            Xml = xmlReader;\n            _filePath = filePath;\n            _resourceFixups = new Dictionary<string, Action<object>>();\n            _externalReferences = new Dictionary<string, List<Action<Type, string>>>();\n        }\n\n        public bool MoveToElement(string elementName)\n        {\n            var nodeType = Xml.MoveToContent();\n            return  nodeType == XmlNodeType.Element && \n                    Xml.Name == elementName;\n        }\n \n        public T ReadObject<T>(ContentSerializerAttribute format)\n        {\n            return ReadObject(format, Serializer.GetTypeSerializer(typeof(T)), default(T));\n        }\n\n        public T ReadObject<T>(ContentSerializerAttribute format, ContentTypeSerializer typeSerializer)\n        {\n            return ReadObject<T>(format, typeSerializer, default(T));\n        }\n\n        public T ReadObject<T>(ContentSerializerAttribute format, ContentTypeSerializer typeSerializer, T existingInstance)\n        {\n            if (!format.FlattenContent)\n            {\n                if (!MoveToElement(format.ElementName))\n                    throw NewInvalidContentException(null, \"Element '{0}' was not found.\", format.ElementName);\n\n                // Is the object null?\n                string isNull = Xml.GetAttribute(\"Null\");\n                if (isNull != null && XmlConvert.ToBoolean(isNull))\n                {\n                    if (!format.AllowNull)\n                        throw NewInvalidContentException(null, \"Element '{0}' cannot be null.\", format.ElementName);\n\n                    Xml.Skip();\n                    return default(T);\n                }\n\n                // Is the object overloading the serialized type?\n                if (Xml.MoveToAttribute(\"Type\"))\n                {\n                    Type type = ReadTypeName();\n                    if (type == null)\n                        throw NewInvalidContentException(null, \"Could not resolve type '{0}'.\", Xml.ReadContentAsString());\n                    if (!typeSerializer.TargetType.IsAssignableFrom(type))\n                        throw NewInvalidContentException(null, \"Type '{0}' is not assignable to '{1}'.\", type.FullName, typeSerializer.TargetType.FullName);\n\n                    typeSerializer = Serializer.GetTypeSerializer(type);\n                    Xml.MoveToElement();\n                }\n            }\n            \n            return ReadRawObject<T>(format, typeSerializer, existingInstance);\n        }\n\n        public T ReadObject<T>(ContentSerializerAttribute format, T existingInstance)\n        {\n            return ReadObject(format, Serializer.GetTypeSerializer(typeof(T)), existingInstance);            \n        }\n\n        public T ReadRawObject<T>(ContentSerializerAttribute format)\n        {\n            return ReadRawObject(format, Serializer.GetTypeSerializer(typeof(T)), default(T));         \n        }\n\n        public T ReadRawObject<T>(ContentSerializerAttribute format, ContentTypeSerializer typeSerializer)\n        {\n            return ReadRawObject<T>(format, typeSerializer, default(T));\n        }\n\n        public T ReadRawObject<T>(ContentSerializerAttribute format, ContentTypeSerializer typeSerializer, T existingInstance)\n        {\n            if (format.FlattenContent)\n            {\n                Xml.MoveToContent();\n                return (T)typeSerializer.Deserialize(this, format, existingInstance);\n            }\n\n            if (!MoveToElement(format.ElementName))\n                throw NewInvalidContentException(null, \"Element '{0}' was not found.\", format.ElementName);\n\n            bool isEmpty = Xml.IsEmptyElement;\n            if (!isEmpty)\n                Xml.ReadStartElement();\n\n            object result = typeSerializer.Deserialize(this, format, existingInstance);\n\n            if (isEmpty)\n                Xml.Skip();\n\n            if (!isEmpty)\n                Xml.ReadEndElement();\n\n            return (T)result;\n        }\n\n        public T ReadRawObject<T>(ContentSerializerAttribute format, T existingInstance)\n        {\n            return ReadRawObject(format, Serializer.GetTypeSerializer(typeof(T)), existingInstance);           \n        }\n\n        public void ReadSharedResource<T>(ContentSerializerAttribute format, Action<T> fixup)\n        {\n            string str;\n\n            if (format.FlattenContent)\n                str = Xml.ReadContentAsString();\n            else\n            {\n                if (!MoveToElement(format.ElementName))\n                    throw NewInvalidContentException(null, \"Element '{0}' was not found.\", format.ElementName);\n\n                str = Xml.ReadElementContentAsString();\n            }\n\n            if (string.IsNullOrEmpty(str))\n                return;\n            \n            // Do we already have one for this?\n            Action<object> prevFixup;\n            if (!_resourceFixups.TryGetValue(str, out prevFixup))\n                _resourceFixups.Add(str, (o) => fixup((T)o));\n            else\n            {\n                _resourceFixups[str] = (o) =>\n                {\n                    prevFixup(o);\n                    fixup((T)o);\n                };\n            }\n        }\n\n        internal void ReadSharedResources()\n        {\n            if (!MoveToElement(\"Resources\"))\n                return;\n\n            var resources = new Dictionary<string, object>();\n            var resourceFormat = new ContentSerializerAttribute { ElementName = \"Resource\" };\n\n            // Read all the resources.\n            Xml.ReadStartElement();\n            while (MoveToElement(\"Resource\"))\n            {\n                string id = Xml.GetAttribute(\"ID\");\n                object resource = ReadObject<object>(resourceFormat);\n                resources.Add(id, resource);\n            }\n            Xml.ReadEndElement();\n\n            // Execute the fixups.\n            foreach (var fixup in _resourceFixups)\n            {\n                object resource;\n                if (!resources.TryGetValue(fixup.Key, out resource))\n                    throw new InvalidContentException(\"Missing shared resource \\\"\" + fixup.Key + \"\\\".\");\n                fixup.Value(resource);\n            }\n        }\n\n        public void ReadExternalReference<T>(ExternalReference<T> existingInstance)\n        {\n            if (!MoveToElement(\"Reference\"))\n                return;\n\n            string str = Xml.ReadElementContentAsString();\n\n            Action<Type, string> fixup = (type, filename) =>\n            {\n                if (type != typeof(T))\n                    throw NewInvalidContentException(null, \"Invalid external reference type\");\n\n                existingInstance.Filename = filename;\n            };\n\n            List<Action<Type, string>> fixups;\n            if (!_externalReferences.TryGetValue(str, out fixups))\n                _externalReferences.Add(str, fixups = new List<Action<Type, string>>());\n            fixups.Add(fixup);\n        }\n\n        internal void ReadExternalReferences()\n        {\n            if (!MoveToElement(\"ExternalReferences\"))\n                return;\n\n            string currentDir = Path.GetDirectoryName(_filePath);\n\n            // Read all the external references.\n            Xml.ReadStartElement();\n            while (MoveToElement(\"ExternalReference\"))\n            {\n                List<Action<Type, string>> fixups;\n                string id = Xml.GetAttribute(\"ID\");\n                if (!_externalReferences.TryGetValue(id, out fixups))\n                    throw NewInvalidContentException(null, \"Unknown external reference id '{0}'!\", id);\n\n                Xml.MoveToAttribute(\"TargetType\");\n                Type targetType = ReadTypeName();\n                if (targetType == null)\n                    throw NewInvalidContentException(null, \"Could not resolve type '{0}'.\", Xml.ReadContentAsString());\n\n                Xml.MoveToElement();\n                string filename = Xml.ReadElementString();\n                filename = Path.Combine(currentDir, filename);\n\n                // Apply the fixups.\n                foreach (var fixup in fixups)\n                    fixup(targetType, filename);\n            }\n            Xml.ReadEndElement();\n        }\n\n        internal InvalidContentException NewInvalidContentException(Exception innerException, string message, params object[] args)\n        {\n            IXmlLineInfo xmlInfo = (IXmlLineInfo)Xml;\n            string lineAndColumn = string.Format(\"{0},{1}\", xmlInfo.LineNumber, xmlInfo.LinePosition);\n            ContentIdentity identity = new ContentIdentity(_filePath, string.Empty, lineAndColumn);\n            return new InvalidContentException(string.Format(message, args), identity, innerException);\n        }\n\n        /// <summary>\n        /// Reads the next type in the \n        /// </summary>\n        /// <returns></returns>\n        public Type ReadTypeName()\n        {\n            string typeName = Xml.ReadContentAsString();\n            return Serializer.FindType(typeName);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/IntermediateSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    // The intermediate serializer implementation is based on testing XNA behavior and the following sources:\n    //\n    // http://msdn.microsoft.com/en-us/library/Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate.aspx\n    // http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx\n    // http://blogs.msdn.com/b/shawnhar/archive/2008/08/26/customizing-intermediateserializer-part-1.aspx\n    // http://blogs.msdn.com/b/shawnhar/archive/2008/08/26/customizing-intermediateserializer-part-2.aspx\n    // http://blogs.msdn.com/b/shawnhar/archive/2008/08/27/why-intermediateserializer-control-attributes-are-not-part-of-the-content-pipeline.aspx\n    //\n\n    \n    public class IntermediateSerializer\n    {\n        /// <summary>\n        /// According to the examples on Sean Hargreaves' blog, explicit types\n        /// can also specify the type aliases from C#. This maps those names\n        /// to the actual .NET framework types for parsing.\n        /// </summary>\n        private static readonly Dictionary<string, Type> _typeAliases = new Dictionary<string, Type>\n        {\n            { \"bool\",   typeof(bool) },\n            { \"byte\",   typeof(byte) },\n            { \"sbyte\",  typeof(sbyte) },\n            { \"char\",   typeof(char) },\n            { \"decimal\",typeof(decimal) },\n            { \"double\", typeof(double) },\n            { \"float\",  typeof(float) },\n            { \"int\",    typeof(int) },\n            { \"uint\",   typeof(uint) },\n            { \"long\",   typeof(long) },\n            { \"ulong\",  typeof(ulong) },\n            { \"object\", typeof(object) },\n            { \"short\",  typeof(short) },\n            { \"ushort\", typeof(ushort) },\n            { \"string\", typeof(string) }\n        };\n\n        private static readonly Dictionary<Type, string> _typeAliasesReverse;\n\n        static IntermediateSerializer()\n        {\n            _typeAliasesReverse = _typeAliases.ToDictionary(x => x.Value, x => x.Key);\n        }\n\n        private IntermediateSerializer()\n        {\n            _scannedObjects = new List<object>();\n            _namespaceAliasHelper = new NamespaceAliasHelper(this);\n        }\n\n        /// <summary>\n        /// Maps \"ShortName:\" -> \"My.Namespace.LongName.\" for type lookups.\n        /// </summary>\n        private Dictionary<string, string> _namespaceLookup;\n\n        private Dictionary<Type, ContentTypeSerializer> _serializers;\n        private Dictionary<Type, GenericCollectionHelper> _collectionHelpers;\n\n        private Dictionary<Type, Type> _genericSerializerTypes;\n\n        private readonly NamespaceAliasHelper _namespaceAliasHelper;\n\n        private readonly List<object> _scannedObjects;\n\n        public static T Deserialize<T>(XmlReader input, string referenceRelocationPath)\n        {\n            var serializer = new IntermediateSerializer();\n            var reader = new IntermediateReader(serializer, input, referenceRelocationPath);\n            T asset = default(T);\n\n            try\n            {\n                if (!reader.MoveToElement(\"XnaContent\"))\n                    throw new InvalidContentException(string.Format(\"Could not find XnaContent element in '{0}'.\",\n                                                                    referenceRelocationPath));\n\n                // Initialize the namespace lookups from\n                // the attributes on the XnaContent element.\n                serializer.CreateNamespaceLookup(input);\n\n                // Move past the XnaContent.\n                input.ReadStartElement();\n\n                // Read the asset.\n                var format = new ContentSerializerAttribute {ElementName = \"Asset\"};\n                asset = reader.ReadObject<T>(format);\n\n                // Process the shared resources and external references.\n                reader.ReadSharedResources();\n                reader.ReadExternalReferences();\n\n                // Move past the closing XnaContent element.\n                input.ReadEndElement();\n            }\n            catch (XmlException xmlException)\n            {\n                throw reader.NewInvalidContentException(xmlException, \"An error occurred parsing.\");\n            }\n\n            return asset;\n        }\n\n        public ContentTypeSerializer GetTypeSerializer(Type type)\n        {\n            // Create the known serializers if we haven't already.\n            if (_serializers == null)\n            {\n                _serializers = new Dictionary<Type, ContentTypeSerializer>();\n                _genericSerializerTypes = new Dictionary<Type, Type>();\n\n                var types = ContentTypeSerializerAttribute.GetTypes();\n                foreach (Type t in types)\n                {\n                    if (t.IsGenericType)\n                    {\n                        Type genericType = t.BaseType.GetGenericArguments()[0];\n                        _genericSerializerTypes.Add(genericType.GetGenericTypeDefinition(), t);\n                    }\n                    else\n                    {\n                        var cts = Activator.CreateInstance(t) as ContentTypeSerializer;\n                        cts.Initialize(this);\n                        _serializers.Add(cts.TargetType, cts);\n                    }\n                }\n            }\n\n            // Look it up.\n            ContentTypeSerializer serializer;\n            if (_serializers.TryGetValue(type, out serializer))\n                return serializer;\n\n            Type serializerType;\n\n            if (type.IsArray)\n            {\n                if (type.GetArrayRank() != 1)\n                    throw new RankException(\"We only support single dimension arrays.\");\n\n                Type arrayType = typeof(ArraySerializer<>).MakeGenericType(new[] { type.GetElementType() });\n                serializer = (ContentTypeSerializer)Activator.CreateInstance(arrayType);\n            }\n            else if (type.IsGenericType && _genericSerializerTypes.TryGetValue(type.GetGenericTypeDefinition(), out serializerType))\n            {\n                serializerType = serializerType.MakeGenericType(type.GetGenericArguments());\n                serializer = (ContentTypeSerializer)Activator.CreateInstance(serializerType);\n            }\n            else if (type.IsEnum)\n            {\n                serializer = new EnumSerializer(type);\n            }\n            else if (typeof(IList).IsAssignableFrom(type) && !GenericCollectionHelper.IsGenericCollectionType(type, true))\n            {\n                // Special handling for non-generic IList types. By the time we get here,\n                // generic collection types will already have been handled by one of the known serializers.\n                serializer = new NonGenericIListSerializer(type);\n            }\n            else\n            {\n                // The reflective serializer is not for primitive types!\n                if (type.IsPrimitive)\n                    throw new NotImplementedException(string.Format(\"Unhandled primitive type `{0}`!\", type.FullName));\n\n                // We still don't have a serializer then we \n                // fallback to the reflection based serializer.\n                serializer = new ReflectiveSerializer(type);\n            }\n\n            Debug.Assert(serializer.TargetType == type, \"Target type mismatch!\");\n\n            // We cache the serializer before we initialize it to \n            // avoid a stack overflow on recursive types.\n            _serializers.Add(type, serializer);\n            serializer.Initialize(this);\n\n            return serializer;\n        }\n\n        internal GenericCollectionHelper GetCollectionHelper(Type type)\n        {\n            if (_collectionHelpers == null)\n                _collectionHelpers = new Dictionary<Type, GenericCollectionHelper>();\n\n            GenericCollectionHelper result;\n            if (!_collectionHelpers.TryGetValue(type, out result))\n            {\n                result = new GenericCollectionHelper(this, type);\n                _collectionHelpers.Add(type, result);\n            }\n            return result;\n        }\n\n        public static void Serialize<T>(XmlWriter output, T value, string referenceRelocationPath)\n        {\n            var serializer = new IntermediateSerializer();\n            var writer = new IntermediateWriter(serializer, output, referenceRelocationPath);\n            output.WriteStartElement(\"XnaContent\");\n\n            serializer._namespaceAliasHelper.WriteNamespaces(output, value);\n\n            // Write the asset.\n            var format = new ContentSerializerAttribute { ElementName = \"Asset\" };\n            writer.WriteObject<object>(value, format);\n\n            // Process the shared resources and external references.\n            writer.WriteSharedResources();\n            writer.WriteExternalReferences();\n\n            // Close the XnaContent element.\n            output.WriteEndElement();\n        }\n\n        /// <summary>\n        /// Builds a lookup table from a short name to the full namespace.\n        /// </summary>\n        private void CreateNamespaceLookup(XmlReader reader)\n        {\n            _namespaceLookup = new Dictionary<string, string>();\n\n            for (int i=0; i < reader.AttributeCount; i++)\n            {\n                reader.MoveToAttribute(i);\n\n                if (reader.Prefix != \"xmlns\")\n                    continue;\n\n                _namespaceLookup.Add(reader.LocalName + \":\", reader.Value + \".\");\n            }\n        }\n\n        /// <summary>\n        /// Finds the type in any assembly loaded into the AppDomain.\n        /// </summary>\n        internal Type FindType(string typeName)\n        {\n            Type foundType;\n\n            typeName = typeName.Trim();\n\n            // Shortcut for friendly C# names\n            if (_typeAliases.TryGetValue(typeName, out foundType))\n                return foundType;\n\n            // If this is an array then handle it separately.\n            if (typeName.EndsWith(\"[]\"))\n            {\n                string arrayType = typeName.Substring(0, typeName.Length - 2);\n                foundType = FindType(arrayType);\n                return foundType == null ? null : foundType.MakeArrayType();\n            }\n\n            // Expand any namespaces in the asset type\n            foreach (var pair in _namespaceLookup)\n                typeName = typeName.Replace(pair.Key, pair.Value);\n            string expandedName = typeName;\n\n            // If this a generic type, handle it separately.\n            if (typeName.EndsWith(\"]\"))\n            {\n                int openBracketIndex = typeName.IndexOf(\"[\");\n\n                string typeNameWithoutArguments = typeName.Substring(0, openBracketIndex);\n\n                string genericArgumentsString = typeName.Substring(openBracketIndex + 1, typeName.Length - openBracketIndex - 2);\n                string[] genericArgumentsArray = genericArgumentsString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n                Type[] genericArguments = genericArgumentsArray.Select(FindType).ToArray();\n\n                foundType = FindType(typeNameWithoutArguments + \"`\" + genericArguments.Length);\n                return (foundType == null) ? null : foundType.MakeGenericType(genericArguments);\n            }\n\n            Parallel.ForEach(AppDomain.CurrentDomain.GetAssemblies(), (assembly, state) =>\n            {\n                Parallel.ForEach(assembly.GetTypes(), (type, state2) =>\n                {\n                    if (state.IsStopped)\n                    {\n                        state2.Stop();\n                        return;\n                    }\n                    if (type.FullName == typeName || type.Name == typeName)\n                    {\n                        foundType = type;\n                        state.Stop();\n                    }\n                });\n            });\n\n            if (foundType == null)\n                foundType = Type.GetType(expandedName, false, true);\n\n            return foundType;\n        }\n\n        /// <summary>\n        /// Gets the (potentially) aliased name for any type.\n        /// </summary>\n        internal string GetFullTypeName(Type type)\n        {\n            string typeName;\n\n            // Shortcut for friendly C# names\n            if (_typeAliasesReverse.TryGetValue(type, out typeName))\n                return typeName;\n\n            // Look for aliased namespace.\n            if (_namespaceAliasHelper.TryGetAliasedTypeName(type, out typeName))\n                return typeName;\n\n            // Fallback to full type name.\n            string typeNamespace = type.Namespace;\n            if (!string.IsNullOrEmpty(typeNamespace))\n                typeName = typeNamespace + \".\";\n            typeName += GetTypeName(type);\n\n            return typeName;\n        }\n\n        /// <summary>\n        /// Returns the name of the type, without the namespace.\n        /// For generic types, we add the type parameters in square brackets.\n        /// i.e. List&lt;int&gt; becomes List[int]\n        /// </summary>\n        internal string GetTypeName(Type type)\n        {\n            if (type.IsGenericType)\n            {\n                string typeName = type.Name;\n                int genericBacktickIndex = typeName.IndexOf(\"`\");\n                if (genericBacktickIndex >= 0)\n                    typeName = typeName.Substring(0, genericBacktickIndex);\n\n                string result = typeName + \"[\";\n                result += string.Join(\",\", type.GetGenericArguments().Select(GetFullTypeName));\n                result += \"]\";\n                return result;\n            }\n\n            if (type.IsArray)\n                return GetTypeName(type.GetElementType()) + \"[]\";\n\n            if (type.IsNested)\n                return type.DeclaringType.Name + \"+\" + type.Name;\n\n            return type.Name;\n        }\n\n        internal bool AlreadyScanned(object value)\n        {\n            if (_scannedObjects.Contains(value))\n                return true;\n            _scannedObjects.Add(value);\n            return false;\n        }\n\n        internal bool HasTypeAlias(Type type)\n        {\n            return _typeAliasesReverse.ContainsKey(type);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/IntermediateWriter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    public sealed class IntermediateWriter\n    {\n        private readonly Stack<object> _currentObjectStack;\n        private readonly Dictionary<object, string> _sharedResources;\n        private readonly Dictionary<object, ExternalReference> _externalReferences;\n        private readonly string _filePath;\n\n        internal IntermediateWriter(IntermediateSerializer serializer, XmlWriter xmlWriter, string filePath)\n        {\n            Serializer = serializer;\n            Xml = xmlWriter;\n            _filePath = filePath;\n\n            _currentObjectStack = new Stack<object>();\n            _sharedResources = new Dictionary<object, string>();\n            _externalReferences = new Dictionary<object, ExternalReference>();\n        }\n\n        public XmlWriter Xml { get; private set; }\n\n        public IntermediateSerializer Serializer { get; private set; }\n\n        public void WriteExternalReference<T>(ExternalReference<T> value)\n        {\n            ExternalReference externalReference;\n            if (!_externalReferences.TryGetValue(value, out externalReference))\n                _externalReferences.Add(value, externalReference = new ExternalReference\n                {\n                    ID = \"#External\" + (_externalReferences.Count + 1),\n                    TargetType = typeof(T).FullName,\n                    FileName = MakeRelativePath(value.Filename)\n                });\n\n            Xml.WriteElementString(\"Reference\", externalReference.ID);\n        }\n\n        private string MakeRelativePath(string path)\n        {\n            var fullReferencePath = Path.GetFullPath(Path.GetDirectoryName(_filePath)) + Path.DirectorySeparatorChar;\n            var fullPath = Path.GetFullPath(path);\n            return new Uri(fullReferencePath).MakeRelativeUri(new Uri(fullPath)).ToString();\n        }\n\n        private class ExternalReference\n        {\n            public string ID;\n            public string TargetType;\n            public string FileName;\n        }\n\n        public void WriteObject<T>(T value, ContentSerializerAttribute format)\n        {\n            WriteObject(value, format, Serializer.GetTypeSerializer(typeof(T)));\n        }\n\n        public void WriteObject<T>(T value, ContentSerializerAttribute format, ContentTypeSerializer typeSerializer)\n        {\n            WriteObjectInternal(value, format, typeSerializer, typeof(T));\n        }\n\n        internal void WriteObjectInternal(object value, ContentSerializerAttribute format, ContentTypeSerializer typeSerializer, Type declaredType)\n        {\n            if (format.Optional && (value == null || typeSerializer.ObjectIsEmpty(value)))\n                return;\n\n            var isReferenceObject = false;\n            if (value != null && !typeSerializer.TargetType.IsValueType)\n            {\n                if (_currentObjectStack.Contains(value))\n                    throw new InvalidOperationException(\"Cyclic reference found during serialization. You may be missing a [ContentSerializer(SharedResource=true)] attribute.\");\n                _currentObjectStack.Push(value);\n                isReferenceObject = true;\n            }\n\n            if (!format.FlattenContent)\n            {\n                Xml.WriteStartElement(format.ElementName);\n\n                if (value == null)\n                {\n                    if (!format.AllowNull)\n                        throw new InvalidOperationException(string.Format(\"Element {0} cannot be null.\", format.ElementName));\n\n                    Xml.WriteAttributeString(\"Null\", \"true\");\n                }\n                else if (value.GetType() != typeSerializer.TargetType && !IsNullableType(declaredType))\n                {\n                    Xml.WriteStartAttribute(\"Type\");\n                    WriteTypeName(value.GetType());\n                    Xml.WriteEndAttribute();\n\n                    typeSerializer = Serializer.GetTypeSerializer(value.GetType());\n                }\n            }\n\n            if (value != null && !typeSerializer.ObjectIsEmpty(value))\n                typeSerializer.Serialize(this, value, format);\n\n            if (!format.FlattenContent)\n                Xml.WriteEndElement();\n\n            if (isReferenceObject)\n                _currentObjectStack.Pop();\n        }\n\n        private static bool IsNullableType(Type type)\n        {\n            return Nullable.GetUnderlyingType(type) != null;\n        }\n\n        public void WriteRawObject<T>(T value, ContentSerializerAttribute format)\n        {\n            WriteRawObject(value, format, Serializer.GetTypeSerializer(typeof(T)));\n        }\n\n        public void WriteRawObject<T>(T value, ContentSerializerAttribute format, ContentTypeSerializer typeSerializer)\n        {\n            if (!format.FlattenContent)\n                Xml.WriteStartElement(format.ElementName);\n\n            typeSerializer.Serialize(this, value, format);\n\n            if (!format.FlattenContent)\n                Xml.WriteEndElement();\n        }\n\n        public void WriteSharedResource<T>(T value, ContentSerializerAttribute format)\n        {\n            var sharedResourceID = GetSharedResourceID(value);\n\n            if (format.FlattenContent)\n                Xml.WriteValue(sharedResourceID);\n            else\n                Xml.WriteElementString(format.ElementName, sharedResourceID);\n        }\n\n        private string GetSharedResourceID(object value)\n        {\n            if (value == null)\n                return null;\n\n            string id;\n            if (!_sharedResources.TryGetValue(value, out id))\n                _sharedResources.Add(value, id = \"#Resource\" + (_sharedResources.Count + 1));\n            return id;\n        }\n\n        internal void WriteSharedResources()\n        {\n            if (!_sharedResources.Any())\n                return;\n\n            Xml.WriteStartElement(\"Resources\");\n\n            // Loop like this because we might create more shared resources while we're serializing.\n            var writtenSharedResources = new List<string>();\n            while (_sharedResources.Any(x => !writtenSharedResources.Contains(x.Value)))\n            {\n                var sharedResource = _sharedResources.First(x => !writtenSharedResources.Contains(x.Value));\n                writtenSharedResources.Add(sharedResource.Value);\n\n                WriteSharedResource(sharedResource.Value, sharedResource.Key);\n            }\n\n            Xml.WriteEndElement();\n        }\n\n        private void WriteSharedResource(string id, object sharedResource)\n        {\n            Xml.WriteStartElement(\"Resource\");\n\n            Xml.WriteAttributeString(\"ID\", id);\n\n            Xml.WriteStartAttribute(\"Type\");\n            WriteTypeName(sharedResource.GetType());\n            Xml.WriteEndAttribute();\n\n            Serializer.GetTypeSerializer(sharedResource.GetType()).Serialize(this, sharedResource, new ContentSerializerAttribute());\n\n            Xml.WriteEndElement();\n        }\n\n        internal void WriteExternalReferences()\n        {\n            if (!_externalReferences.Any())\n                return;\n\n            Xml.WriteStartElement(\"ExternalReferences\");\n\n            foreach (var externalReference in _externalReferences.Values)\n            {\n                Xml.WriteStartElement(\"ExternalReference\");\n                \n                Xml.WriteAttributeString(\"ID\", externalReference.ID);\n                Xml.WriteAttributeString(\"TargetType\", externalReference.TargetType);\n\n                Xml.WriteValue(externalReference.FileName);\n\n                Xml.WriteEndElement();\n            }\n\n            Xml.WriteEndElement();\n        }\n\n        public void WriteTypeName(Type type)\n        {\n            Xml.WriteString(Serializer.GetFullTypeName(type));\n        }\n    }        \n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ListSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class ListSerializer<T> : ContentTypeSerializer<List<T>>\n    {\n        private ContentTypeSerializer _itemSerializer;\n\n        public ListSerializer() :\n            base(\"list\")\n        {\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return true; }\n        }\n\n        protected internal override void Initialize(IntermediateSerializer serializer)\n        {\n            _itemSerializer = serializer.GetTypeSerializer(typeof(T));\n        }\n\n        public override bool ObjectIsEmpty(List<T> value)\n        {\n            return value.Count == 0;\n        }\n\n        protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, List<T> value)\n        {\n            foreach (var item in value)\n                callback(_itemSerializer, item);\n        }\n\n        protected internal override List<T> Deserialize(IntermediateReader input, ContentSerializerAttribute format, List<T> existingInstance)\n        {\n            List<T> result = existingInstance ?? new List<T>();\n\n            var elementSerializer = _itemSerializer as ElementSerializer<T>;\n            if (elementSerializer != null)\n                elementSerializer.Deserialize(input, result);\n            else\n            {\n                // Create the item serializer attribute.\n                var itemFormat = new ContentSerializerAttribute();\n                itemFormat.ElementName = format.CollectionItemName;\n\n                // Read all the items.\n                while (input.MoveToElement(itemFormat.ElementName))\n                {\n                    var value = input.ReadObject<T>(itemFormat, _itemSerializer);\n                    result.Add(value);\n                }\n            }\n\n            return result;\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, List<T> value, ContentSerializerAttribute format)\n        {\n            var elementSerializer = _itemSerializer as ElementSerializer<T>;\n            if (elementSerializer != null)\n                elementSerializer.Serialize(output, value);\n            else\n            {\n                // Create the item serializer attribute.\n                var itemFormat = new ContentSerializerAttribute();\n                itemFormat.ElementName = format.CollectionItemName;\n\n                // Read all the items.\n                foreach (var item in value)\n                    output.WriteObject(item, itemFormat, _itemSerializer);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/LongSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class LongSerializer : ElementSerializer<long>\n    {\n        public LongSerializer() :\n            base(\"long\", 1)\n        {\n        }\n\n        protected internal override long Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToInt64(inputs[index++]);\n        }\n\n        protected internal override void Serialize(long value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/MatrixSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class MatrixSerializer : ElementSerializer<Matrix>\n    {\n        public MatrixSerializer() :\n            base(\"Matrix\", 16)\n        {\n        }\n\n        protected internal override Matrix Deserialize(string[] inputs, ref int index)\n        {\n            return new Matrix(XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]));\n        }\n\n        protected internal override void Serialize(Matrix value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value.M11));\n            results.Add(XmlConvert.ToString(value.M12));\n            results.Add(XmlConvert.ToString(value.M13));\n            results.Add(XmlConvert.ToString(value.M14));\n            results.Add(XmlConvert.ToString(value.M21));\n            results.Add(XmlConvert.ToString(value.M22));\n            results.Add(XmlConvert.ToString(value.M23));\n            results.Add(XmlConvert.ToString(value.M24));\n            results.Add(XmlConvert.ToString(value.M31));\n            results.Add(XmlConvert.ToString(value.M32));\n            results.Add(XmlConvert.ToString(value.M33));\n            results.Add(XmlConvert.ToString(value.M34));\n            results.Add(XmlConvert.ToString(value.M41));\n            results.Add(XmlConvert.ToString(value.M42));\n            results.Add(XmlConvert.ToString(value.M43));\n            results.Add(XmlConvert.ToString(value.M44));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/NamedValueDictionarySerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class NamedValueDictionarySerializer<T> : ContentTypeSerializer<NamedValueDictionary<T>>\n    {\n        private ContentTypeSerializer _keySerializer;\n\n        private ContentSerializerAttribute _keyFormat;\n        private ContentSerializerAttribute _valueFormat;\n\n        public NamedValueDictionarySerializer() :\n            base(\"namedValueDictionary\")\n        {\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return true; }\n        }\n\n        protected internal override void Initialize(IntermediateSerializer serializer)\n        {\n            _keySerializer = serializer.GetTypeSerializer(typeof(string));\n\n            _keyFormat = new ContentSerializerAttribute\n            {\n                ElementName = \"Key\",\n                AllowNull = false\n            };\n\n            _valueFormat = new ContentSerializerAttribute\n            {\n                ElementName = \"Value\",\n                AllowNull = typeof(T).IsValueType\n            };\n        }\n\n        public override bool ObjectIsEmpty(NamedValueDictionary<T> value)\n        {\n            return value.Count == 0;\n        }\n\n        protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, NamedValueDictionary<T> value)\n        {\n            foreach (var kvp in value)\n                callback(serializer.GetTypeSerializer(typeof(T)), kvp.Value);\n        }\n\n        protected internal override NamedValueDictionary<T> Deserialize(IntermediateReader input, ContentSerializerAttribute format, NamedValueDictionary<T> existingInstance)\n        {\n            var result = existingInstance ?? new NamedValueDictionary<T>();\n\n            var valueSerializer = input.Serializer.GetTypeSerializer(result.DefaultSerializerType);\n\n            while (input.MoveToElement(format.CollectionItemName))\n            {\n                input.Xml.ReadStartElement();\n\n                var key = input.ReadObject<string>(_keyFormat, _keySerializer);\n                var value = input.ReadObject<T>(_valueFormat, valueSerializer);\n                result.Add(key,value);\n\n                input.Xml.ReadEndElement();\n            }\n\n            return result;\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, NamedValueDictionary<T> value, ContentSerializerAttribute format)\n        {\n            var valueSerializer = output.Serializer.GetTypeSerializer(value.DefaultSerializerType);\n\n            foreach (var kvp in value)\n            {\n                output.Xml.WriteStartElement(format.CollectionItemName);\n\n                output.WriteObject(kvp.Key, _keyFormat, _keySerializer);\n                output.WriteObject(kvp.Value, _valueFormat, valueSerializer);\n\n                output.Xml.WriteEndElement();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/NamespaceAliasHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    internal class NamespaceAliasHelper\n    {\n        private readonly IntermediateSerializer _serializer;\n\n        /// <summary>\n        /// Maps \"My.Namespace.LongName\" -> \"ShortName\" for type lookups.\n        /// </summary>\n        private Dictionary<string, AliasedNamespace> _namespaceLookupReverse;\n\n        private class AliasedNamespace\n        {\n            public string Alias;\n            public string TypePrefix;\n        }\n\n        public NamespaceAliasHelper(IntermediateSerializer serializer)\n        {\n            _serializer = serializer;\n        }\n\n        public void WriteNamespaces<T>(XmlWriter writer, T value)\n        {\n            // Maps \"My.Namespace.LongName\" -> \"ShortName\" for type lookups.\n            _namespaceLookupReverse = new Dictionary<string, AliasedNamespace>();\n\n            // Get all namespaces of types used by \"value\" or its children.\n            var childNamespaces = GetAllUsedNamespaces(value).Distinct().ToList();\n\n            // Do first pass to determine what our aliases are. We do this on a sorted\n            // list of namespaces so that more-nested namespaces will be processed last,\n            // by which time we will have already created the aliases for parent namespaces.\n            var sortedChildNamespaces = new List<string>(childNamespaces);\n            sortedChildNamespaces.Sort();\n            var tempAliases = new Dictionary<string, AliasedNamespace>();\n            foreach (var childNamespace in sortedChildNamespaces)\n            {\n                var alias = FindAlias(tempAliases, childNamespace);\n                if (alias != null)\n                    tempAliases.Add(childNamespace, alias);\n            }\n\n            // Do second pass on the namespaces as they were originally ordered, to match XNA.\n            foreach (var childNamespace in childNamespaces)\n            {\n                AliasedNamespace alias;\n                if (tempAliases.TryGetValue(childNamespace, out alias))\n                    _namespaceLookupReverse.Add(childNamespace, alias);\n            }\n\n            foreach (var kvp in _namespaceLookupReverse)\n            {\n                if (!string.IsNullOrEmpty(kvp.Value.TypePrefix))\n                    continue;\n                writer.WriteAttributeString(\"xmlns\", kvp.Value.Alias, null, kvp.Key);\n            }\n        }\n\n        private IEnumerable<string> GetAllUsedNamespaces<T>(T value)\n        {\n            var result = new List<string>();\n            ContentTypeSerializer.ChildCallback onScanChild = (contentTypeSerializer, child) =>\n            {\n                if (child == null)\n                    return;\n\n                var childType = child.GetType();\n\n                if (contentTypeSerializer.TargetType == childType)\n                    return;\n\n                if (contentTypeSerializer.TargetType.IsGenericType \n                    && contentTypeSerializer.TargetType.GetGenericTypeDefinition() == typeof(Nullable<>) \n                    && contentTypeSerializer.TargetType.GetGenericArguments()[0] == childType)\n                    return;\n\n                if (_serializer.HasTypeAlias(childType))\n                    return;\n\n                var childNamespace = childType.Namespace;\n\n                if (string.IsNullOrEmpty(childNamespace))\n                    return;\n\n                result.Add(childNamespace);\n            };\n\n            // Force top-level object type to be included.\n            onScanChild(_serializer.GetTypeSerializer(typeof(object)), value);\n\n            // Scan child objects.\n            var serializer = _serializer.GetTypeSerializer(typeof(T));\n            serializer.ScanChildren(_serializer, onScanChild, value);\n\n            return result;\n        }\n\n        private static AliasedNamespace FindAlias(Dictionary<string, AliasedNamespace> aliases, string childNamespace)\n        {\n            if (string.IsNullOrEmpty(childNamespace))\n                return null;\n\n            // If there isn't yet an alias for the last part of the namespace, use that.\n            var alias = childNamespace.Substring(childNamespace.LastIndexOf('.') + 1);\n            if (aliases.All(x => x.Value.Alias != alias))\n                return new AliasedNamespace\n                {\n                    Alias = alias,\n                    TypePrefix = string.Empty\n                };\n\n            // Otherwise, find the longest parent namespace, and use that, with a TypePrefix to make\n            // this namespace relative to that one.\n            if (aliases.Any(x => childNamespace.StartsWith(x.Key)))\n            {\n                string longestParentNamespace = string.Empty;\n                foreach (var kvp in aliases.Where(x => string.IsNullOrEmpty(x.Value.TypePrefix)))\n                {\n                    if (childNamespace.StartsWith(kvp.Key) && kvp.Key.Length > longestParentNamespace.Length)\n                        longestParentNamespace = kvp.Key;\n                }\n                return new AliasedNamespace\n                {\n                    Alias = aliases[longestParentNamespace].Alias,\n                    TypePrefix = GetRelativeNamespace(longestParentNamespace, childNamespace) + \".\"\n                };\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// Returns just the portion <paramref name=\"namespace\"/> relative to <paramref name=\"namespaceParent\"/>.\n        /// For example, given namespaceParent=Foo.Bar and @namespace=Foo.Bar.Baz, will return Baz.\n        /// </summary>\n        private static string GetRelativeNamespace(string namespaceParent, string @namespace)\n        {\n            if (@namespace.StartsWith(namespaceParent))\n                return @namespace.Substring(namespaceParent.Length + 1);\n            throw new InvalidOperationException();\n        }\n\n        public bool TryGetAliasedTypeName(Type type, out string typeName)\n        {\n            if (!string.IsNullOrEmpty(type.Namespace))\n            {\n                AliasedNamespace namespaceAlias;\n                if (_namespaceLookupReverse.TryGetValue(type.Namespace, out namespaceAlias))\n                {\n                    typeName = namespaceAlias.Alias + \":\" + namespaceAlias.TypePrefix + _serializer.GetTypeName(type);\n                    return true;\n                }\n            }\n\n            typeName = null;\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/NonGenericIListSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    class NonGenericIListSerializer : ContentTypeSerializer\n    {\n        public NonGenericIListSerializer(Type targetType) :\n            base(targetType, targetType.Name)\n        {\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return true; }\n        }\n\n        public override bool ObjectIsEmpty(object value)\n        {\n            return ((IList) value).Count == 0;\n        }\n\n        protected internal override object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance)\n        {\n            var result = (IList) (existingInstance ?? Activator.CreateInstance(TargetType));\n\n            // Create the item serializer attribute.\n            var itemFormat = new ContentSerializerAttribute();\n            itemFormat.ElementName = format.CollectionItemName;\n\n            // Read all the items.\n            while (input.MoveToElement(itemFormat.ElementName))\n            {\n                var value = input.ReadObject<object>(itemFormat);\n                result.Add(value);\n            }\n\n            return result;\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format)\n        {\n            // Create the item serializer attribute.\n            var itemFormat = new ContentSerializerAttribute();\n            itemFormat.ElementName = format.CollectionItemName;\n\n            // Read all the items.\n            foreach (var item in (IList) value)\n                output.WriteObject(item, itemFormat);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/NullableSerializer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class NullableSerializer<T> : ContentTypeSerializer<T?> where T : struct\n    {\n        private ContentTypeSerializer _serializer;\n        private ContentSerializerAttribute _format;\n\n        protected internal override void Initialize(IntermediateSerializer serializer)\n        {\n            _serializer = serializer.GetTypeSerializer(typeof(T));\n            _format = new ContentSerializerAttribute\n            {\n                FlattenContent = true\n            };\n        }\n\n        protected internal override T? Deserialize(IntermediateReader input, ContentSerializerAttribute format, T? existingInstance)\n        {\n            return input.ReadRawObject<T>(_format, _serializer);\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, T? value, ContentSerializerAttribute format)\n        {\n            output.WriteRawObject<T>(value.Value, _format, _serializer);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/PackedElementsHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    internal static class PackedElementsHelper\n    {\n        private static readonly char[] _seperators = { ' ', '\\t', '\\n' };\n\n        private const string _writeSeperator = \" \";\n\n        internal static string[] ReadElements(IntermediateReader input)\n        {\n            if (input.Xml.IsEmptyElement)\n                return new string[0];\n\n            string str = string.Empty;\n            while (input.Xml.NodeType != XmlNodeType.EndElement)\n            {\n                if (input.Xml.NodeType == XmlNodeType.Comment)\n                    input.Xml.Read();\n                else\n                    str += input.Xml.ReadString();\n            }\n\n            // Special case for char ' '\n            if (str.Length > 0 && str.Trim() == string.Empty)\n                return new string[] { str };\n\n            var elements = str.Split(_seperators, StringSplitOptions.RemoveEmptyEntries);\n            if (elements.Length == 1 && string.IsNullOrEmpty(elements[0]))\n                return new string[0];\n\n            return elements;\n        }\n\n        public static string JoinElements(IEnumerable<string> elements)\n        {\n            return string.Join(_writeSeperator, elements);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/PlaneSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class PlaneSerializer : ElementSerializer<Plane>\n    {\n        public PlaneSerializer() :\n            base(\"Plane\", 4)\n        {\n        }\n\n        protected internal override Plane Deserialize(string[] inputs, ref int index)\n        {\n            return new Plane(   XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]));\n        }\n\n        protected internal override void Serialize(Plane value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value.Normal.X));\n            results.Add(XmlConvert.ToString(value.Normal.Y));\n            results.Add(XmlConvert.ToString(value.Normal.Z));\n            results.Add(XmlConvert.ToString(value.D));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/PointSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class PointSerializer : ElementSerializer<Point>\n    {\n        public PointSerializer() :\n            base(\"Point\", 2)\n        {\n        }\n\n        protected internal override Point Deserialize(string[] inputs, ref int index)\n        {\n            return new Point(   XmlConvert.ToInt32(inputs[index++]),\n                                XmlConvert.ToInt32(inputs[index++]));\n        }\n\n        protected internal override void Serialize(Point value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value.X));\n            results.Add(XmlConvert.ToString(value.Y));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/QuaternionSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class QuaternionSerializer : ElementSerializer<Quaternion>\n    {\n        public QuaternionSerializer() :\n            base(\"Quaternion\", 4)\n        {\n        }\n\n        protected internal override Quaternion Deserialize(string[] inputs, ref int index)\n        {\n            return new Quaternion(  XmlConvert.ToSingle(inputs[index++]),\n                                    XmlConvert.ToSingle(inputs[index++]),\n                                    XmlConvert.ToSingle(inputs[index++]),\n                                    XmlConvert.ToSingle(inputs[index++]));\n        }\n\n        protected internal override void Serialize(Quaternion value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value.X));\n            results.Add(XmlConvert.ToString(value.Y));\n            results.Add(XmlConvert.ToString(value.Z));\n            results.Add(XmlConvert.ToString(value.W));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/RectangleSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class RectangleSerializer : ElementSerializer<Rectangle>\n    {\n        public RectangleSerializer() :\n            base(\"Rectangle\", 4)\n        {\n        }\n\n        protected internal override Rectangle Deserialize(string[] inputs, ref int index)\n        {\n            return new Rectangle(   XmlConvert.ToInt32(inputs[index++]),\n                                    XmlConvert.ToInt32(inputs[index++]),\n                                    XmlConvert.ToInt32(inputs[index++]),\n                                    XmlConvert.ToInt32(inputs[index++]));\n        }\n\n        protected internal override void Serialize(Rectangle value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value.X));\n            results.Add(XmlConvert.ToString(value.Y));\n            results.Add(XmlConvert.ToString(value.Width));\n            results.Add(XmlConvert.ToString(value.Height));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ReflectiveSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Xml;\nusing Microsoft.Xna.Framework.Content.Pipeline.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    internal class ReflectiveSerializer : ContentTypeSerializer\n    {\n        const BindingFlags _bindingFlags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly;\n\n        private struct ElementInfo\n        {\n            public ContentSerializerAttribute Attribute;\n            public ContentTypeSerializer Serializer;\n            public Action<object, object> Setter;\n            public Func<object, object> Getter;\n        };\n\n        private readonly List<ElementInfo> _elements = new List<ElementInfo>();\n\n        private ContentTypeSerializer _baseSerializer;\n        private GenericCollectionHelper _collectionHelper;\n\n        private bool GetElementInfo(IntermediateSerializer serializer, MemberInfo member, out ElementInfo info)\n        {\n            info = new ElementInfo();\n\n            // Are we ignoring this property?\n            if (ReflectionHelpers.GetCustomAttribute<ContentSerializerIgnoreAttribute>(member) != null)\n                return false;\n\n            var prop = member as PropertyInfo;\n            var field = member as FieldInfo;\n\n            var attrib = ReflectionHelpers.GetCustomAttribute<ContentSerializerAttribute>(member);\n            if (attrib != null)\n            {\n                // Store the attribute for later use.\n                info.Attribute = attrib.Clone();\n\n                // Default the to member name as the element name.\n                if (string.IsNullOrEmpty(attrib.ElementName))\n                    info.Attribute.ElementName = member.Name;\n            }\n            else\n            {\n                // We don't have a serializer attribute, so we can\n                // only access this member thru a public field/property.\n\n                if (prop != null)\n                {\n                    // If we don't have at least a public getter then this \n                    // property can't be serialized or deserialized in any way.\n                    if (prop.GetGetMethod() == null)\n                        return false;\n\n                    // If there is a setter, but it's private, then don't include this element\n                    // (although technically we could, as long as we have a serializer with\n                    // CanDeserializeIntoExistingObject=true for this property type)\n                    var setter = prop.GetSetMethod(true);\n                    if (setter != null && !setter.IsPublic)\n                        return false;\n\n                    // If there is no setter, and we don't have a type serializer \n                    // that can deserialize into an existing object, then we have no way \n                    // for it to be deserialized.\n                    if (setter == null && !serializer.GetTypeSerializer(prop.PropertyType).CanDeserializeIntoExistingObject)\n                        return false;\n\n                    // Don't serialize or deserialize indexers.\n                    if (prop.GetIndexParameters().Any())\n                        return false;\n                }\n                else if (field != null)\n                {\n                    if (!field.IsPublic)\n                        return false;\n                }\n\n                info.Attribute = new ContentSerializerAttribute();\n                info.Attribute.ElementName = member.Name;\n            }\n\n            if (prop != null)\n            {\n                info.Serializer = serializer.GetTypeSerializer(prop.PropertyType);\n                if (prop.CanWrite)\n                    info.Setter = (o, v) => prop.SetValue(o, v, null);\n                info.Getter = o => prop.GetValue(o, null);\n            }\n            else if (field != null)\n            {\n                info.Serializer = serializer.GetTypeSerializer(field.FieldType);\n                info.Setter = field.SetValue;\n                info.Getter = field.GetValue;\n            }\n\n            return true;\n        }\n\n        public ReflectiveSerializer(Type targetType) :\n            base(targetType, string.Empty)\n        {\n        }\n\n        protected internal override void Initialize(IntermediateSerializer serializer)\n        {\n            // If we have a base type then we need to deserialize it first.\n            if (TargetType.BaseType != null)\n                _baseSerializer = serializer.GetTypeSerializer(TargetType.BaseType);\n\n            // Cache all our serializable properties.\n            var properties = TargetType.GetProperties(_bindingFlags);\n            foreach (var prop in properties)\n            {\n                ElementInfo info;\n                if (GetElementInfo(serializer, prop, out info))\n                    _elements.Add(info);\n            }\n\n            // Cache all our serializable fields.\n            var fields = TargetType.GetFields(_bindingFlags);\n            foreach (var field in fields)\n            {\n                ElementInfo info;\n                if (GetElementInfo(serializer, field, out info))\n                    _elements.Add(info);                \n            }\n\n            if (GenericCollectionHelper.IsGenericCollectionType(TargetType, false))\n                _collectionHelper = serializer.GetCollectionHelper(TargetType);\n        }\n\n        public override bool CanDeserializeIntoExistingObject\n        {\n            get { return TargetType.IsClass && TargetType.BaseType != null; }\n        }\n\n        protected internal override object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance)\n        {\n            var result = existingInstance;\n            if (result == null)\n            {\n                try\n                {\n                    result = Activator.CreateInstance(TargetType, true);\n                }\n                catch (MissingMethodException e)\n                {\n                    throw new Exception(string.Format(\"Couldn't create object of type {0}: {1}\", TargetType.Name, e.Message), e);\n                }                \n            }\n\n            // First deserialize the base type.\n            if (_baseSerializer != null)\n                _baseSerializer.Deserialize(input, format, result);\n\n            // Now deserialize our own elements.\n            foreach (var info in _elements)\n            {\n                if (!info.Attribute.FlattenContent)\n                {\n                    if (!input.MoveToElement(info.Attribute.ElementName))\n                    {\n                        // If the the element was optional then we can\n                        // safely skip it and continue.\n                        if (info.Attribute.Optional)\n                            continue;\n                        \n                        // We failed to find a required element.\n                        throw input.NewInvalidContentException(null, \"The Xml element `{0}` is required, but element `{1}` was found at line {2}:{3}.\", info.Attribute.ElementName, input.Xml.Name, ((IXmlLineInfo)input.Xml).LineNumber, ((IXmlLineInfo)input.Xml).LinePosition);\n                    }\n                }\n\n                if (info.Attribute.SharedResource)\n                {\n                    Action<object> fixup = (o) => info.Setter(result, o);\n                    input.ReadSharedResource(info.Attribute, fixup);\n                }\n                else if (info.Setter == null)\n                {\n                    var value = info.Getter(result);\n                    input.ReadObject(info.Attribute, info.Serializer, value);\n                }\n                else\n                {\n                    var value = input.ReadObject<object>(info.Attribute, info.Serializer);\n                    info.Setter(result, value);\n                }\n            }\n\n            if (_collectionHelper != null)\n                _collectionHelper.Deserialize(input, result, format);\n\n            return result;\n        }\n\n        public override bool ObjectIsEmpty(object value)\n        {\n            if (_baseSerializer != null)\n                return _baseSerializer.ObjectIsEmpty(value);\n            if (_collectionHelper != null)\n                return _collectionHelper.ObjectIsEmpty(value);\n            return false;\n        }\n\n        protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, object value)\n        {\n            if (serializer.AlreadyScanned(value))\n                return;\n\n            // First scan the base type.\n            if (_baseSerializer != null)\n                _baseSerializer.ScanChildren(serializer, callback, value);\n\n            // Now scan our own elements.\n            foreach (var info in _elements)\n            {\n                var elementValue = info.Getter(value);\n\n                callback(info.Serializer, elementValue);\n\n                var elementSerializer = info.Serializer;\n                if (elementValue != null)\n                    elementSerializer = serializer.GetTypeSerializer(elementValue.GetType());\n\n                elementSerializer.ScanChildren(serializer, callback, elementValue);\n            }\n\n            if (_collectionHelper != null)\n                _collectionHelper.ScanChildren(callback, value);\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format)\n        {\n            // First serialize the base type.\n            if (_baseSerializer != null)\n                _baseSerializer.Serialize(output, value, format);\n\n            // Now serialize our own elements.\n            foreach (var info in _elements)\n            {\n                var elementValue = info.Getter(value);\n\n                if (info.Attribute.SharedResource)\n                    output.WriteSharedResource(elementValue, info.Attribute);\n                else\n                    output.WriteObjectInternal(elementValue, info.Attribute, info.Serializer, info.Serializer.TargetType);\n            }\n\n            if (_collectionHelper != null)\n                _collectionHelper.Serialize(output, value, format);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/SByteSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class SByteSerializer : ElementSerializer<sbyte>\n    {\n        public SByteSerializer() :\n            base(\"sbyte\", 1)\n        {\n        }\n\n        protected internal override sbyte Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToSByte(inputs[index++]);\n        }\n\n        protected internal override void Serialize(sbyte value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ShortSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class ShortSerializer : ElementSerializer<short>\n    {\n        public ShortSerializer() :\n            base(\"short\", 1)\n        {\n        }\n\n        protected internal override short Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToInt16(inputs[index++]);\n        }\n\n        protected internal override void Serialize(short value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/StringSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class StringSerializer : ContentTypeSerializer<string>\n    {\n        public StringSerializer() :\n            base(\"string\")\n        {\n        }\n\n        protected internal override string Deserialize(IntermediateReader input, ContentSerializerAttribute format, string existingInstance)\n        {\n            return input.Xml.ReadString();\n        }\n\n        protected internal override void Serialize(IntermediateWriter output, string value, ContentSerializerAttribute format)\n        {\n            output.Xml.WriteString(value);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/TimeSpanSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class TimeSpanSerializer : ElementSerializer<TimeSpan>\n    {\n        public TimeSpanSerializer() :\n            base(\"TimeSpan\", 1)\n        {\n        }\n\n        protected internal override TimeSpan Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToTimeSpan(inputs[index++]);\n        }\n\n        protected internal override void Serialize(TimeSpan value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/UIntSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class UIntSerializer : ElementSerializer<uint>\n    {\n        public UIntSerializer() :\n            base(\"int\", 1)\n        {\n        }\n\n        protected internal override uint Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToUInt32(inputs[index++]);\n        }\n\n        protected internal override void Serialize(uint value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ULongSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class ULongSerializer : ElementSerializer<ulong>\n    {\n        public ULongSerializer() :\n            base(\"ulong\", 1)\n        {\n        }\n\n        protected internal override ulong Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToUInt64(inputs[index++]);\n        }\n\n        protected internal override void Serialize(ulong value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/UShortSerializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class UShortSerializer : ElementSerializer<ushort>\n    {\n        public UShortSerializer() :\n            base(\"ushort\", 1)\n        {\n        }\n\n        protected internal override ushort Deserialize(string[] inputs, ref int index)\n        {\n            return XmlConvert.ToUInt16(inputs[index++]);\n        }\n\n        protected internal override void Serialize(ushort value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/Vector2Serializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class Vector2Serializer : ElementSerializer<Vector2>\n    {\n        public Vector2Serializer() :\n            base(\"Vector2\", 2)\n        {\n        }\n\n        protected internal override Vector2 Deserialize(string[] inputs, ref int index)\n        {\n            return new Vector2( XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]));\n        }\n\n        protected internal override void Serialize(Vector2 value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value.X));\n            results.Add(XmlConvert.ToString(value.Y));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/Vector3Serializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class Vector3Serializer : ElementSerializer<Vector3>\n    {\n        public Vector3Serializer() :\n            base(\"Vector3\", 3)\n        {\n        }\n\n        protected internal override Vector3 Deserialize(string[] inputs, ref int index)\n        {\n            return new Vector3( XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]));\n        }\n\n        protected internal override void Serialize(Vector3 value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value.X));\n            results.Add(XmlConvert.ToString(value.Y));\n            results.Add(XmlConvert.ToString(value.Z));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/Vector4Serializer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate\n{\n    [ContentTypeSerializer]\n    class Vector4Serializer : ElementSerializer<Vector4>\n    {\n        public Vector4Serializer() :\n            base(\"Vector4\", 4)\n        {\n        }\n\n        protected internal override Vector4 Deserialize(string[] inputs, ref int index)\n        {\n            return new Vector4( XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]),\n                                XmlConvert.ToSingle(inputs[index++]));\n        }\n\n        protected internal override void Serialize(Vector4 value, List<string> results)\n        {\n            results.Add(XmlConvert.ToString(value.X));\n            results.Add(XmlConvert.ToString(value.Y));\n            results.Add(XmlConvert.ToString(value.Z));\n            results.Add(XmlConvert.ToString(value.W));\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/TargetPlatform.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Identifiers for the target platform.\n    /// </summary>\n    [TypeConverter(typeof(TargetPlatformTypeConverter))]\n    public enum TargetPlatform\n    {\n        /// <summary>\n        /// All desktop versions of Windows using DirectX.\n        /// </summary>\n        Windows,\n\n        /// <summary>\n        /// Xbox 360 video game and entertainment system\n        /// </summary>\n        Xbox360,\n\n        // MonoGame-specific platforms listed below\n\n        /// <summary>\n        /// Apple iOS-based devices (iPod Touch, iPhone, iPad)\n        /// (MonoGame)\n        /// </summary>\n        iOS,\n\n        /// <summary>\n        /// Android-based devices\n        /// (MonoGame)\n        /// </summary>\n        Android,\n\n        /// <summary>\n        /// All desktop versions using OpenGL.\n        /// (MonoGame)\n        /// </summary>\n        DesktopGL,\n\n        /// <summary>\n        /// Apple Mac OSX-based devices (iMac, MacBook, MacBook Air, etc)\n        /// (MonoGame)\n        /// </summary>\n        MacOSX,\n\n        /// <summary>\n        /// Windows Store App\n        /// (MonoGame)\n        /// </summary>\n        WindowsStoreApp,\n\n        /// <summary>\n        /// Google Chrome Native Client\n        /// (MonoGame)\n        /// </summary>\n        NativeClient,\n\n        /// <summary>\n        /// Raspberry Pi\n        /// (MonoGame)\n        /// </summary>\n        RaspberryPi,\n\n        /// <summary>\n        /// Sony PlayStation4\n        /// </summary>\n        PlayStation4,\n\n        /// <summary>\n        /// Sony PlayStation5\n        /// </summary>\n        PlayStation5,\n\n        /// <summary>\n        /// Xbox One\n        /// </summary>\n        XboxOne,\n\n        /// <summary>\n        /// Nintendo Switch\n        /// </summary>\n        Switch,\n\n        /// <summary>\n        /// Blazor/WebAssembly (WebGL)\n        /// </summary>\n        BlazorGL,\n    }\n\n\n    /// <summary>\n    /// Deserialize legacy Platforms from .MGCB files.\n    /// </summary>\n    internal class TargetPlatformTypeConverter : EnumConverter\n    {\n        public TargetPlatformTypeConverter(Type type) : base(type)\n        {\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {   \n            try\n            {\n                return base.ConvertFrom(context, culture, value);\n            }\n            catch (FormatException fex)\n            { \n                // convert legacy Platforms\n                if (value.Equals(\"Linux\") || value.Equals(\"WindowsGL\"))\n                    return TargetPlatform.DesktopGL;\n                else throw fex;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/ContentExtensions.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing System.Linq;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities\n{\n    internal static class ContentExtensions\n    {\n        public static FieldInfo[] GetAllFields(this Type type)\n        {\n#if WINRT\n            FieldInfo[] fields= type.GetTypeInfo().DeclaredFields.ToArray();\n            IEnumerable<FieldInfo> nonStaticFields = from field in fields\n                    where !field.IsStatic\n                    select field;\n            return nonStaticFields.ToArray();\n#else\n            BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly;\n            return type.GetFields(attrs);\n#endif\n        }\n\n        public static PropertyInfo[] GetAllProperties(this Type type)\n        {\n\n            // Sometimes, overridden properties of abstract classes can show up even with \n            // BindingFlags.DeclaredOnly is passed to GetProperties. Make sure that\n            // all properties in this list are defined in this class by comparing\n            // its get method with that of it's base class. If they're the same\n            // Then it's an overridden property.\n#if WINRT\n            PropertyInfo[] infos= type.GetTypeInfo().DeclaredProperties.ToArray();\n            IEnumerable<PropertyInfo> nonStaticPropertyInfos = from p in infos\n                                         where (p.GetMethod != null) && (!p.GetMethod.IsStatic) &&\n                                         (p.GetMethod == p.GetMethod.GetRuntimeBaseDefinition())\n                                         select p;\n            return nonStaticPropertyInfos.ToArray();\n#else\n            const BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly;\n            List<PropertyInfo> allProps = type.GetProperties(attrs).ToList();\n            PropertyInfo[] props = allProps.FindAll(p => p.GetGetMethod(true) != null && p.GetGetMethod(true) == p.GetGetMethod(true).GetBaseDefinition()).ToArray();\n            return props;\n#endif\n        }\n\n        public static ConstructorInfo GetDefaultConstructor(this Type type)\n        {\n#if WINRT\n            TypeInfo typeInfo = type.GetTypeInfo();\n            ConstructorInfo ctor = typeInfo.DeclaredConstructors.FirstOrDefault(c => !c.IsStatic && c.GetParameters().Length == 0);\n            return ctor;\n#else\n            BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance;\n            return type.GetConstructor(attrs, null, new Type[0], null);\n#endif\n        }\n\n        public static bool IsClass(this Type type)\n        {\n#if WINRT\n            return type.GetTypeInfo().IsClass;\n#else\n            return type.IsClass;\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe.cs",
    "content": "﻿#region license\n\n/*\nCopyright (c) 2013, Milosz Krajewski\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided\nthat the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions\n  and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions\n  and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\nIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#endregion\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4\n{\n\t/// <summary>Unsafe LZ4 codec.</summary>\n\tinternal static partial class LZ4Codec\n\t{\n\t\t/// <summary>Copies block of memory.</summary>\n\t\t/// <param name=\"src\">The source.</param>\n\t\t/// <param name=\"dst\">The destination.</param>\n\t\t/// <param name=\"len\">The length (in bytes).</param>\n\t\tprivate static unsafe void BlockCopy(byte* src, byte* dst, int len)\n\t\t{\n\t\t\twhile (len >= 8)\n\t\t\t{\n\t\t\t\t*(ulong*)dst = *(ulong*)src;\n\t\t\t\tdst += 8;\n\t\t\t\tsrc += 8;\n\t\t\t\tlen -= 8;\n\t\t\t}\n\t\t\tif (len >= 4)\n\t\t\t{\n\t\t\t\t*(uint*)dst = *(uint*)src;\n\t\t\t\tdst += 4;\n\t\t\t\tsrc += 4;\n\t\t\t\tlen -= 4;\n\t\t\t}\n\t\t\tif (len >= 2)\n\t\t\t{\n\t\t\t\t*(ushort*)dst = *(ushort*)src;\n\t\t\t\tdst += 2;\n\t\t\t\tsrc += 2;\n\t\t\t\tlen -= 2;\n\t\t\t}\n\t\t\tif (len >= 1)\n\t\t\t{\n\t\t\t\t*dst = *src; /* d++; s++; l--; */\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Copies block of memory.</summary>\n\t\t/// <param name=\"dst\">The destination.</param>\n\t\t/// <param name=\"len\">The length (in bytes).</param>\n\t\t/// <param name=\"val\">The value.</param>\n\t\tprivate static unsafe void BlockFill(byte* dst, int len, byte val)\n\t\t{\n\t\t\tif (len >= 8)\n\t\t\t{\n\t\t\t\tulong mask = val;\n\t\t\t\tmask |= mask << 8;\n\t\t\t\tmask |= mask << 16;\n\t\t\t\tmask |= mask << 32;\n\t\t\t\tdo\n\t\t\t\t{\n\t\t\t\t\t*(ulong*)dst = mask;\n\t\t\t\t\tdst += 8;\n\t\t\t\t\tlen -= 8;\n\t\t\t\t} while (len >= 8);\n\t\t\t}\n\n\t\t\twhile (len-- > 0) *dst++ = val;\n\t\t}\n\n\t\t#region Encode32\n\n\t\t/// <summary>Encodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <returns>Number of bytes written.</returns>\n\t\tpublic static unsafe int Encode32(\n\t\t\tbyte* input,\n\t\t\tbyte* output,\n\t\t\tint inputLength,\n\t\t\tint outputLength)\n\t\t{\n\t\t\tif (inputLength < LZ4_64KLIMIT)\n\t\t\t{\n\t\t\t\tvar hashTable = new ushort[HASH64K_TABLESIZE];\n\t\t\t\tfixed (ushort* h = &hashTable[0])\n\t\t\t\t{\n\t\t\t\t\treturn LZ4_compress64kCtx_32(h, input, output, inputLength, outputLength);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar hashTable = new byte*[HASH_TABLESIZE];\n\t\t\t\tfixed (byte** h = &hashTable[0])\n\t\t\t\t{\n\t\t\t\t\treturn LZ4_compressCtx_32(h, input, output, inputLength, outputLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Encodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"outputOffset\">The output offset.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <returns>Number of bytes written.</returns>\n\t\tpublic static unsafe int Encode32(\n\t\t\tbyte[] input,\n\t\t\tint inputOffset,\n\t\t\tint inputLength,\n\t\t\tbyte[] output,\n\t\t\tint outputOffset,\n\t\t\tint outputLength)\n\t\t{\n\t\t\tCheckArguments(\n\t\t\t\tinput, inputOffset, ref inputLength,\n\t\t\t\toutput, outputOffset, ref outputLength);\n\n\t\t\tif (outputLength == 0) return 0;\n\n\t\t\tfixed (byte* inputPtr = &input[inputOffset])\n\t\t\tfixed (byte* outputPtr = &output[outputOffset])\n\t\t\t{\n\t\t\t\treturn Encode32(inputPtr, outputPtr, inputLength, outputLength);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Encodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <returns>Compressed buffer.</returns>\n\t\tpublic static byte[] Encode32(byte[] input, int inputOffset, int inputLength)\n\t\t{\n\t\t\tif (inputLength < 0) inputLength = input.Length - inputOffset;\n\n\t\t\tif (input == null) throw new ArgumentNullException(\"input\");\n\t\t\tif (inputOffset < 0 || inputOffset + inputLength > input.Length)\n\t\t\t\tthrow new ArgumentException(\"inputOffset and inputLength are invalid for given input\");\n\n\t\t\tvar result = new byte[MaximumOutputLength(inputLength)];\n\t\t\tvar length = Encode32(input, inputOffset, inputLength, result, 0, result.Length);\n\n\t\t\tif (length != result.Length)\n\t\t\t{\n\t\t\t\tif (length < 0)\n\t\t\t\t\tthrow new InvalidOperationException(\"Compression has been corrupted\");\n\t\t\t\tvar buffer = new byte[length];\n\t\t\t\tBuffer.BlockCopy(result, 0, buffer, 0, length);\n\t\t\t\treturn buffer;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Decode32\n\n\t\t/// <summary>Decodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <param name=\"knownOutputLength\">Set it to <c>true</c> if output length is known.</param>\n\t\t/// <returns>Number of bytes written.</returns>\n\t\tpublic static unsafe int Decode32(\n\t\t\tbyte* input,\n\t\t\tint inputLength,\n\t\t\tbyte* output,\n\t\t\tint outputLength,\n\t\t\tbool knownOutputLength)\n\t\t{\n\t\t\tif (knownOutputLength)\n\t\t\t{\n\t\t\t\tvar length = LZ4_uncompress_32(input, output, outputLength);\n\t\t\t\tif (length != inputLength)\n\t\t\t\t\tthrow new ArgumentException(\"LZ4 block is corrupted, or invalid length has been given.\");\n\t\t\t\treturn outputLength;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar length = LZ4_uncompress_unknownOutputSize_32(input, output, inputLength, outputLength);\n\t\t\t\tif (length < 0)\n\t\t\t\t\tthrow new ArgumentException(\"LZ4 block is corrupted, or invalid length has been given.\");\n\t\t\t\treturn length;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Decodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"outputOffset\">The output offset.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <param name=\"knownOutputLength\">Set it to <c>true</c> if output length is known.</param>\n\t\t/// <returns>Number of bytes written.</returns>\n\t\tpublic static unsafe int Decode32(\n\t\t\tbyte[] input,\n\t\t\tint inputOffset,\n\t\t\tint inputLength,\n\t\t\tbyte[] output,\n\t\t\tint outputOffset,\n\t\t\tint outputLength,\n\t\t\tbool knownOutputLength)\n\t\t{\n\t\t\tCheckArguments(\n\t\t\t\tinput, inputOffset, ref inputLength,\n\t\t\t\toutput, outputOffset, ref outputLength);\n\n\t\t\tif (outputLength == 0) return 0;\n\n\t\t\tfixed (byte* inputPtr = &input[inputOffset])\n\t\t\tfixed (byte* outputPtr = &output[outputOffset])\n\t\t\t{\n\t\t\t\treturn Decode32(inputPtr, inputLength, outputPtr, outputLength, knownOutputLength);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Decodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <returns>Decompressed buffer.</returns>\n\t\tpublic static byte[] Decode32(byte[] input, int inputOffset, int inputLength, int outputLength)\n\t\t{\n\t\t\tif (inputLength < 0) inputLength = input.Length - inputOffset;\n\n\t\t\tif (input == null) throw new ArgumentNullException(\"input\");\n\t\t\tif (inputOffset < 0 || inputOffset + inputLength > input.Length)\n\t\t\t\tthrow new ArgumentException(\"inputOffset and inputLength are invalid for given input\");\n\n\t\t\tvar result = new byte[outputLength];\n\t\t\tvar length = Decode32(input, inputOffset, inputLength, result, 0, outputLength, true);\n\t\t\tif (length != outputLength)\n\t\t\t\tthrow new ArgumentException(\"outputLength is not valid\");\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Encode64\n\n\t\t/// <summary>Encodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <returns>Number of bytes written.</returns>\n\t\tpublic static unsafe int Encode64(\n\t\t\tbyte* input,\n\t\t\tbyte* output,\n\t\t\tint inputLength,\n\t\t\tint outputLength)\n\t\t{\n\t\t\tif (inputLength < LZ4_64KLIMIT)\n\t\t\t{\n\t\t\t\tvar hashTable = new ushort[HASH64K_TABLESIZE];\n\t\t\t\tfixed (ushort* h = &hashTable[0])\n\t\t\t\t{\n\t\t\t\t\treturn LZ4_compress64kCtx_64(h, input, output, inputLength, outputLength);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar hashTable = new uint[HASH_TABLESIZE];\n\t\t\t\tfixed (uint* h = &hashTable[0])\n\t\t\t\t{\n\t\t\t\t\treturn LZ4_compressCtx_64(h, input, output, inputLength, outputLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Encodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"outputOffset\">The output offset.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <returns>Number of bytes written.</returns>\n\t\tpublic static unsafe int Encode64(\n\t\t\tbyte[] input,\n\t\t\tint inputOffset,\n\t\t\tint inputLength,\n\t\t\tbyte[] output,\n\t\t\tint outputOffset,\n\t\t\tint outputLength)\n\t\t{\n\t\t\tCheckArguments(\n\t\t\t\tinput, inputOffset, ref inputLength,\n\t\t\t\toutput, outputOffset, ref outputLength);\n\n\t\t\tif (outputLength == 0) return 0;\n\n\t\t\tfixed (byte* inputPtr = &input[inputOffset])\n\t\t\tfixed (byte* outputPtr = &output[outputOffset])\n\t\t\t{\n\t\t\t\treturn Encode64(inputPtr, outputPtr, inputLength, outputLength);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Encodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <returns>Compressed buffer.</returns>\n\t\tpublic static byte[] Encode64(byte[] input, int inputOffset, int inputLength)\n\t\t{\n\t\t\tif (inputLength < 0) inputLength = input.Length - inputOffset;\n\n\t\t\tif (input == null) throw new ArgumentNullException(\"input\");\n\t\t\tif (inputOffset < 0 || inputOffset + inputLength > input.Length)\n\t\t\t\tthrow new ArgumentException(\"inputOffset and inputLength are invalid for given input\");\n\n\t\t\tvar result = new byte[MaximumOutputLength(inputLength)];\n\t\t\tvar length = Encode64(input, inputOffset, inputLength, result, 0, result.Length);\n\n\t\t\tif (length != result.Length)\n\t\t\t{\n\t\t\t\tif (length < 0)\n\t\t\t\t\tthrow new InvalidOperationException(\"Compression has been corrupted\");\n\t\t\t\tvar buffer = new byte[length];\n\t\t\t\tBuffer.BlockCopy(result, 0, buffer, 0, length);\n\t\t\t\treturn buffer;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Decode64\n\n\t\t/// <summary>Decodes the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <param name=\"knownOutputLength\">Set it to <c>true</c> if output length is known.</param>\n\t\t/// <returns>Number of bytes written.</returns>\n\t\tpublic static unsafe int Decode64(\n\t\t\tbyte* input,\n\t\t\tint inputLength,\n\t\t\tbyte* output,\n\t\t\tint outputLength,\n\t\t\tbool knownOutputLength)\n\t\t{\n\t\t\tif (knownOutputLength)\n\t\t\t{\n\t\t\t\tvar length = LZ4_uncompress_64(input, output, outputLength);\n\t\t\t\tif (length != inputLength)\n\t\t\t\t\tthrow new ArgumentException(\"LZ4 block is corrupted, or invalid length has been given.\");\n\t\t\t\treturn outputLength;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar length = LZ4_uncompress_unknownOutputSize_64(input, output, inputLength, outputLength);\n\t\t\t\tif (length < 0)\n\t\t\t\t\tthrow new ArgumentException(\"LZ4 block is corrupted, or invalid length has been given.\");\n\t\t\t\treturn length;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Decode64s the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"outputOffset\">The output offset.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <param name=\"knownOutputLength\">Set it to <c>true</c> if output length is known.</param>\n\t\t/// <returns>Number of bytes written.</returns>\n\t\tpublic static unsafe int Decode64(\n\t\t\tbyte[] input,\n\t\t\tint inputOffset,\n\t\t\tint inputLength,\n\t\t\tbyte[] output,\n\t\t\tint outputOffset,\n\t\t\tint outputLength,\n\t\t\tbool knownOutputLength)\n\t\t{\n\t\t\tCheckArguments(\n\t\t\t\tinput, inputOffset, ref inputLength,\n\t\t\t\toutput, outputOffset, ref outputLength);\n\n\t\t\tif (outputLength == 0) return 0;\n\n\t\t\tfixed (byte* inputPtr = &input[inputOffset])\n\t\t\tfixed (byte* outputPtr = &output[outputOffset])\n\t\t\t{\n\t\t\t\treturn Decode64(inputPtr, inputLength, outputPtr, outputLength, knownOutputLength);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Decode64s the specified input.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <returns>Decompressed buffer.</returns>\n\t\tpublic static byte[] Decode64(byte[] input, int inputOffset, int inputLength, int outputLength)\n\t\t{\n\t\t\tif (inputLength < 0) inputLength = input.Length - inputOffset;\n\n\t\t\tif (input == null) throw new ArgumentNullException(\"input\");\n\t\t\tif (inputOffset < 0 || inputOffset + inputLength > input.Length)\n\t\t\t\tthrow new ArgumentException(\"inputOffset and inputLength are invalid for given input\");\n\n\t\t\tvar result = new byte[outputLength];\n\t\t\tvar length = Decode64(input, inputOffset, inputLength, result, 0, outputLength, true);\n\t\t\tif (length != outputLength)\n\t\t\t\tthrow new ArgumentException(\"outputLength is not valid\");\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region HC utilities\n\n\t\t// ReSharper disable InconsistentNaming\n\n\t\tprivate unsafe class LZ4HC_Data_Structure\n\t\t{\n\t\t\tpublic byte* src_base;\n\t\t\tpublic byte* nextToUpdate;\n\t\t\tpublic int[] hashTable;\n\t\t\tpublic ushort[] chainTable;\n\t\t};\n\n\t\t// ReSharper restore InconsistentNaming\n\n\n\t\tprivate static unsafe LZ4HC_Data_Structure LZ4HC_Create(byte* src)\n\t\t{\n\t\t\tvar hc4 = new LZ4HC_Data_Structure {\n\t\t\t\thashTable = new int[HASHHC_TABLESIZE],\n\t\t\t\tchainTable = new ushort[MAXD]\n\t\t\t};\n\n\t\t\tfixed (ushort* ct = &hc4.chainTable[0])\n\t\t\t{\n\t\t\t\tBlockFill((byte*)ct, MAXD * sizeof(ushort), 0xFF);\n\t\t\t}\n\n\t\t\thc4.src_base = src;\n\t\t\thc4.nextToUpdate = src + 1;\n\n\t\t\treturn hc4;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Encode32HC\n\n\t\tprivate static unsafe int LZ4_compressHC_32(byte* input, byte* output, int inputLength, int outputLength)\n\t\t{\n\t\t\treturn LZ4_compressHCCtx_32(LZ4HC_Create(input), input, output, inputLength, outputLength);\n\t\t}\n\n\t\t/// <summary>Encodes the specified input using HC codec.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"outputOffset\">The output offset.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <returns>Number of bytes written. NOTE: when output buffer is too small it returns negative value.</returns>\n\t\tpublic static unsafe int Encode32HC(\n\t\t\tbyte[] input,\n\t\t\tint inputOffset,\n\t\t\tint inputLength,\n\t\t\tbyte[] output,\n\t\t\tint outputOffset,\n\t\t\tint outputLength)\n\t\t{\n\t\t\tif (inputLength == 0) return 0;\n\n\t\t\tCheckArguments(\n\t\t\t\tinput, inputOffset, ref inputLength,\n\t\t\t\toutput, outputOffset, ref outputLength);\n\n\t\t\tfixed (byte* inputPtr = &input[inputOffset])\n\t\t\tfixed (byte* outputPtr = &output[outputOffset])\n\t\t\t{\n\t\t\t\tvar length = LZ4_compressHC_32(inputPtr, outputPtr, inputLength, outputLength);\n\t\t\t\treturn length <= 0 ? -1 : length;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Encodes the specified input using HC codec.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <returns>Buffer with compressed data (NOTE: it can be bigger than input).</returns>\n\t\tpublic static byte[] Encode32HC(\n\t\t\tbyte[] input, int inputOffset, int inputLength)\n\t\t{\n\t\t\tif (inputLength == 0) return new byte[0];\n\t\t\tvar outputLength = MaximumOutputLength(inputLength);\n\t\t\tvar result = new byte[outputLength];\n\t\t\tvar length = Encode32HC(input, inputOffset, inputLength, result, 0, outputLength);\n\n\t\t\tif (length < 0)\n\t\t\t\tthrow new ArgumentException(\"Provided data seems to be corrupted.\");\n\n\t\t\tif (length != outputLength)\n\t\t\t{\n\t\t\t\tvar buffer = new byte[length];\n\t\t\t\tBuffer.BlockCopy(result, 0, buffer, 0, length);\n\t\t\t\tresult = buffer;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Encode64HC\n\n\t\tprivate static unsafe int LZ4_compressHC_64(byte* input, byte* output, int inputLength, int outputLength)\n\t\t{\n\t\t\treturn LZ4_compressHCCtx_64(LZ4HC_Create(input), input, output, inputLength, outputLength);\n\t\t}\n\n\t\t/// <summary>Encodes the specified input using HC codec.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <param name=\"output\">The output.</param>\n\t\t/// <param name=\"outputOffset\">The output offset.</param>\n\t\t/// <param name=\"outputLength\">Length of the output.</param>\n\t\t/// <returns>Number of bytes written. NOTE: when output buffer is too small it returns negative value.</returns>\n\t\tpublic static unsafe int Encode64HC(\n\t\t\tbyte[] input,\n\t\t\tint inputOffset,\n\t\t\tint inputLength,\n\t\t\tbyte[] output,\n\t\t\tint outputOffset,\n\t\t\tint outputLength)\n\t\t{\n\t\t\tif (inputLength == 0) return 0;\n\n\t\t\tCheckArguments(\n\t\t\t\tinput, inputOffset, ref inputLength,\n\t\t\t\toutput, outputOffset, ref outputLength);\n\n\t\t\tfixed (byte* inputPtr = &input[inputOffset])\n\t\t\tfixed (byte* outputPtr = &output[outputOffset])\n\t\t\t{\n\t\t\t\tvar length = LZ4_compressHC_64(inputPtr, outputPtr, inputLength, outputLength);\n\t\t\t\treturn length <= 0 ? -1 : length;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>Encodes the specified input using HC codec.</summary>\n\t\t/// <param name=\"input\">The input.</param>\n\t\t/// <param name=\"inputOffset\">The input offset.</param>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <returns>Buffer with compressed data (NOTE: it can be bigger than input).</returns>\n\t\tpublic static byte[] Encode64HC(\n\t\t\tbyte[] input, int inputOffset, int inputLength)\n\t\t{\n\t\t\tif (inputLength == 0) return new byte[0];\n\t\t\tvar outputLength = MaximumOutputLength(inputLength);\n\t\t\tvar result = new byte[outputLength];\n\t\t\tvar length = Encode64HC(input, inputOffset, inputLength, result, 0, outputLength);\n\n\t\t\tif (length < 0)\n\t\t\t\tthrow new ArgumentException(\"Provided data seems to be corrupted.\");\n\n\t\t\tif (length != outputLength)\n\t\t\t{\n\t\t\t\tvar buffer = new byte[length];\n\t\t\t\tBuffer.BlockCopy(result, 0, buffer, 0, length);\n\t\t\t\tresult = buffer;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe32.Dirty.cs",
    "content": "﻿#region LZ4 original\n\n/*\n   LZ4 - Fast LZ compression algorithm\n   Copyright (C) 2011-2012, Yann Collet.\n   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions are\n   met:\n\n\t   * Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\t   * Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following disclaimer\n   in the documentation and/or other materials provided with the\n   distribution.\n\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   You can contact the author at :\n   - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html\n   - LZ4 source repository : http://code.google.com/p/lz4/\n*/\n\n#endregion\n\n#region LZ4 port\n\n/*\nCopyright (c) 2013, Milosz Krajewski\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided\nthat the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions\n  and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions\n  and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\nIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#endregion\n\n// ReSharper disable InconsistentNaming\n// ReSharper disable TooWideLocalVariableScope\n// ReSharper disable JoinDeclarationAndInitializer\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4\n{\n\tinternal static partial class LZ4Codec\n\t{\n\t\t#region LZ4_compressCtx_32\n\n\t\tprivate static unsafe int LZ4_compressCtx_32(\n\t\t\tbyte** hash_table,\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint src_len,\n\t\t\tint dst_maxlen)\n\t\t{\n\t\t\tbyte* _p;\n\n\t\t\tfixed (int* debruijn32 = &DEBRUIJN_TABLE_32[0])\n\t\t\t{\n\t\t\t\t// r93\n\t\t\t\tvar src_p = src;\n\t\t\t\tconst int src_base = 0;\n\t\t\t\tvar src_anchor = src_p;\n\t\t\t\tvar src_end = src_p + src_len;\n\t\t\t\tvar src_mflimit = src_end - MFLIMIT;\n\n\t\t\t\tvar dst_p = dst;\n\t\t\t\tvar dst_end = dst_p + dst_maxlen;\n\n\t\t\t\tvar src_LASTLITERALS = src_end - LASTLITERALS;\n\t\t\t\tvar src_LASTLITERALS_1 = src_LASTLITERALS - 1;\n\n\t\t\t\tvar src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1);\n\t\t\t\tvar dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS);\n\t\t\t\tvar dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS);\n\n\t\t\t\tint length;\n\n\t\t\t\tuint h, h_fwd;\n\n\t\t\t\t// Init\n\t\t\t\tif (src_len < MINLENGTH) goto _last_literals;\n\n\t\t\t\t// First Byte\n\t\t\t\thash_table[((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST)] = (src_p - src_base);\n\t\t\t\tsrc_p++;\n\t\t\t\th_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST);\n\n\t\t\t\t// Main Loop\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tvar findMatchAttempts = (1 << SKIPSTRENGTH) + 3;\n\t\t\t\t\tvar src_p_fwd = src_p;\n\t\t\t\t\tbyte* xxx_ref;\n\t\t\t\t\tbyte* xxx_token;\n\n\t\t\t\t\t// Find a match\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\th = h_fwd;\n\t\t\t\t\t\tvar step = findMatchAttempts++ >> SKIPSTRENGTH;\n\t\t\t\t\t\tsrc_p = src_p_fwd;\n\t\t\t\t\t\tsrc_p_fwd = src_p + step;\n\n\t\t\t\t\t\tif (src_p_fwd > src_mflimit) goto _last_literals;\n\n\t\t\t\t\t\th_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH_ADJUST);\n\t\t\t\t\t\txxx_ref = src_base + hash_table[h];\n\t\t\t\t\t\thash_table[h] = (src_p - src_base);\n\t\t\t\t\t} while ((xxx_ref < src_p - MAX_DISTANCE) || ((*(uint*)(xxx_ref)) != (*(uint*)(src_p))));\n\n\t\t\t\t\t// Catch up\n\t\t\t\t\twhile ((src_p > src_anchor) && (xxx_ref > src) && (src_p[-1] == xxx_ref[-1]))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p--;\n\t\t\t\t\t\txxx_ref--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Encode Literal length\n\t\t\t\t\tlength = (int)(src_p - src_anchor);\n\t\t\t\t\txxx_token = dst_p++;\n\n\t\t\t\t\tif (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit\n\n\t\t\t\t\tif (length >= RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar len = length - RUN_MASK;\n\t\t\t\t\t\t*xxx_token = (RUN_MASK << ML_BITS);\n\t\t\t\t\t\tif (len > 254)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t\t\tlen -= 255;\n\t\t\t\t\t\t\t} while (len > 254);\n\t\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t\t\tBlockCopy(src_anchor, dst_p, (length));\n\t\t\t\t\t\t\tdst_p += length;\n\t\t\t\t\t\t\tgoto _next_match;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*xxx_token = (byte)(length << ML_BITS);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Copy Literals\n\t\t\t\t\t_p = dst_p + (length);\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)src_anchor;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tsrc_anchor += 4;\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)src_anchor;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tsrc_anchor += 4;\n\t\t\t\t\t} while (dst_p < _p);\n\t\t\t\t\tdst_p = _p;\n\n\t\t\t\t_next_match:\n\n\t\t\t\t\t// Encode Offset\n\t\t\t\t\t*(ushort*)dst_p = (ushort)(src_p - xxx_ref);\n\t\t\t\t\tdst_p += 2;\n\n\t\t\t\t\t// Start Counting\n\t\t\t\t\tsrc_p += MINMATCH;\n\t\t\t\t\txxx_ref += MINMATCH; // MinMatch already verified\n\t\t\t\t\tsrc_anchor = src_p;\n\n\t\t\t\t\twhile (src_p < src_LASTLITERALS_STEPSIZE_1)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar diff = (*(int*)(xxx_ref)) ^ (*(int*)(src_p));\n\t\t\t\t\t\tif (diff == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsrc_p += STEPSIZE_32;\n\t\t\t\t\t\t\txxx_ref += STEPSIZE_32;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsrc_p += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27];\n\t\t\t\t\t\tgoto _endCount;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(xxx_ref)) == (*(ushort*)(src_p))))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p += 2;\n\t\t\t\t\t\txxx_ref += 2;\n\t\t\t\t\t}\n\t\t\t\t\tif ((src_p < src_LASTLITERALS) && (*xxx_ref == *src_p)) src_p++;\n\n\t\t\t\t_endCount:\n\n\t\t\t\t\t// Encode MatchLength\n\t\t\t\t\tlength = (int)(src_p - src_anchor);\n\n\t\t\t\t\tif (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit\n\n\t\t\t\t\tif (length >= ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\t*xxx_token += ML_MASK;\n\t\t\t\t\t\tlength -= ML_MASK;\n\t\t\t\t\t\tfor (; length > 509; length -= 510)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (length > 254)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlength -= 255;\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*dst_p++ = (byte)length;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*xxx_token += (byte)length;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Test end of chunk\n\t\t\t\t\tif (src_p > src_mflimit)\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_anchor = src_p;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fill table\n\t\t\t\t\thash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH_ADJUST)] = (src_p - 2 - src_base);\n\n\t\t\t\t\t// Test next position\n\n\t\t\t\t\th = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST);\n\t\t\t\t\txxx_ref = src_base + hash_table[h];\n\t\t\t\t\thash_table[h] = (src_p - src_base);\n\n\t\t\t\t\tif ((xxx_ref > src_p - (MAX_DISTANCE + 1)) && ((*(uint*)(xxx_ref)) == (*(uint*)(src_p))))\n\t\t\t\t\t{\n\t\t\t\t\t\txxx_token = dst_p++;\n\t\t\t\t\t\t*xxx_token = 0;\n\t\t\t\t\t\tgoto _next_match;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prepare next loop\n\t\t\t\t\tsrc_anchor = src_p++;\n\t\t\t\t\th_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST);\n\t\t\t\t}\n\n\t\t\t_last_literals:\n\n\t\t\t\t// Encode Last Literals\n\t\t\t\t{\n\t\t\t\t\tvar lastRun = (int)(src_end - src_anchor);\n\n\t\t\t\t\tif (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0;\n\n\t\t\t\t\tif (lastRun >= RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\t*dst_p++ = (RUN_MASK << ML_BITS);\n\t\t\t\t\t\tlastRun -= RUN_MASK;\n\t\t\t\t\t\tfor (; lastRun > 254; lastRun -= 255) *dst_p++ = 255;\n\t\t\t\t\t\t*dst_p++ = (byte)lastRun;\n\t\t\t\t\t}\n\t\t\t\t\telse *dst_p++ = (byte)(lastRun << ML_BITS);\n\t\t\t\t\tBlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor));\n\t\t\t\t\tdst_p += src_end - src_anchor;\n\t\t\t\t}\n\n\t\t\t\t// End\n\t\t\t\treturn (int)((dst_p) - dst);\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region LZ4_compress64kCtx_32\n\n\t\tprivate static unsafe int LZ4_compress64kCtx_32(\n\t\t\tushort* hash_table,\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint src_len,\n\t\t\tint dst_maxlen)\n\t\t{\n\t\t\tbyte* _p;\n\n\t\t\tfixed (int* debruijn32 = &DEBRUIJN_TABLE_32[0])\n\t\t\t{\n\t\t\t\t// r93\n\t\t\t\tvar src_p = src;\n\t\t\t\tvar src_anchor = src_p;\n\t\t\t\tvar src_base = src_p;\n\t\t\t\tvar src_end = src_p + src_len;\n\t\t\t\tvar src_mflimit = src_end - MFLIMIT;\n\n\t\t\t\tvar dst_p = dst;\n\t\t\t\tvar dst_end = dst_p + dst_maxlen;\n\n\t\t\t\tvar src_LASTLITERALS = src_end - LASTLITERALS;\n\t\t\t\tvar src_LASTLITERALS_1 = src_LASTLITERALS - 1;\n\n\t\t\t\tvar src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1);\n\t\t\t\tvar dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS);\n\t\t\t\tvar dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS);\n\n\t\t\t\tint len, length;\n\n\t\t\t\tuint h, h_fwd;\n\n\t\t\t\t// Init\n\t\t\t\tif (src_len < MINLENGTH) goto _last_literals;\n\n\t\t\t\t// First Byte\n\t\t\t\tsrc_p++;\n\t\t\t\th_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST);\n\n\t\t\t\t// Main Loop\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tvar findMatchAttempts = (1 << SKIPSTRENGTH) + 3;\n\t\t\t\t\tvar src_p_fwd = src_p;\n\t\t\t\t\tbyte* xxx_ref;\n\t\t\t\t\tbyte* xxx_token;\n\n\t\t\t\t\t// Find a match\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\th = h_fwd;\n\t\t\t\t\t\tvar step = findMatchAttempts++ >> SKIPSTRENGTH;\n\t\t\t\t\t\tsrc_p = src_p_fwd;\n\t\t\t\t\t\tsrc_p_fwd = src_p + step;\n\n\t\t\t\t\t\tif (src_p_fwd > src_mflimit) goto _last_literals;\n\n\t\t\t\t\t\th_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH64K_ADJUST);\n\t\t\t\t\t\txxx_ref = src_base + hash_table[h];\n\t\t\t\t\t\thash_table[h] = (ushort)(src_p - src_base);\n\t\t\t\t\t} while ((*(uint*)(xxx_ref)) != (*(uint*)(src_p)));\n\n\t\t\t\t\t// Catch up\n\t\t\t\t\twhile ((src_p > src_anchor) && (xxx_ref > src) && (src_p[-1] == xxx_ref[-1]))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p--;\n\t\t\t\t\t\txxx_ref--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Encode Literal length\n\t\t\t\t\tlength = (int)(src_p - src_anchor);\n\t\t\t\t\txxx_token = dst_p++;\n\n\t\t\t\t\tif (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit\n\n\t\t\t\t\tif (length >= RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tlen = length - RUN_MASK;\n\t\t\t\t\t\t*xxx_token = (RUN_MASK << ML_BITS);\n\t\t\t\t\t\tif (len > 254)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t\t\tlen -= 255;\n\t\t\t\t\t\t\t} while (len > 254);\n\t\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t\t\tBlockCopy(src_anchor, dst_p, (length));\n\t\t\t\t\t\t\tdst_p += length;\n\t\t\t\t\t\t\tgoto _next_match;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*xxx_token = (byte)(length << ML_BITS);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Copy Literals\n\t\t\t\t\t_p = dst_p + (length);\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)src_anchor;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tsrc_anchor += 4;\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)src_anchor;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tsrc_anchor += 4;\n\t\t\t\t\t} while (dst_p < _p);\n\t\t\t\t\tdst_p = _p;\n\n\t\t\t\t_next_match:\n\n\t\t\t\t\t// Encode Offset\n\t\t\t\t\t*(ushort*)dst_p = (ushort)(src_p - xxx_ref);\n\t\t\t\t\tdst_p += 2;\n\n\t\t\t\t\t// Start Counting\n\t\t\t\t\tsrc_p += MINMATCH;\n\t\t\t\t\txxx_ref += MINMATCH; // MinMatch verified\n\t\t\t\t\tsrc_anchor = src_p;\n\n\t\t\t\t\twhile (src_p < src_LASTLITERALS_STEPSIZE_1)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar diff = (*(int*)(xxx_ref)) ^ (*(int*)(src_p));\n\t\t\t\t\t\tif (diff == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsrc_p += STEPSIZE_32;\n\t\t\t\t\t\t\txxx_ref += STEPSIZE_32;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsrc_p += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27];\n\t\t\t\t\t\tgoto _endCount;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(xxx_ref)) == (*(ushort*)(src_p))))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p += 2;\n\t\t\t\t\t\txxx_ref += 2;\n\t\t\t\t\t}\n\t\t\t\t\tif ((src_p < src_LASTLITERALS) && (*xxx_ref == *src_p)) src_p++;\n\n\t\t\t\t_endCount:\n\n\t\t\t\t\t// Encode MatchLength\n\t\t\t\t\tlen = (int)(src_p - src_anchor);\n\n\t\t\t\t\tif (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit\n\n\t\t\t\t\tif (len >= ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\t*xxx_token += ML_MASK;\n\t\t\t\t\t\tlen -= ML_MASK;\n\t\t\t\t\t\tfor (; len > 509; len -= 510)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len > 254)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlen -= 255;\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t}\n\t\t\t\t\telse *xxx_token += (byte)len;\n\n\t\t\t\t\t// Test end of chunk\n\t\t\t\t\tif (src_p > src_mflimit)\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_anchor = src_p;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fill table\n\t\t\t\t\thash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base);\n\n\t\t\t\t\t// Test next position\n\n\t\t\t\t\th = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST);\n\t\t\t\t\txxx_ref = src_base + hash_table[h];\n\t\t\t\t\thash_table[h] = (ushort)(src_p - src_base);\n\n\t\t\t\t\tif ((*(uint*)(xxx_ref)) == (*(uint*)(src_p)))\n\t\t\t\t\t{\n\t\t\t\t\t\txxx_token = dst_p++;\n\t\t\t\t\t\t*xxx_token = 0;\n\t\t\t\t\t\tgoto _next_match;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prepare next loop\n\t\t\t\t\tsrc_anchor = src_p++;\n\t\t\t\t\th_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST);\n\t\t\t\t}\n\n\t\t\t_last_literals:\n\n\t\t\t\t// Encode Last Literals\n\t\t\t\t{\n\t\t\t\t\tvar lastRun = (int)(src_end - src_anchor);\n\t\t\t\t\tif (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0;\n\t\t\t\t\tif (lastRun >= RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\t*dst_p++ = (RUN_MASK << ML_BITS);\n\t\t\t\t\t\tlastRun -= RUN_MASK;\n\t\t\t\t\t\tfor (; lastRun > 254; lastRun -= 255) *dst_p++ = 255;\n\t\t\t\t\t\t*dst_p++ = (byte)lastRun;\n\t\t\t\t\t}\n\t\t\t\t\telse *dst_p++ = (byte)(lastRun << ML_BITS);\n\t\t\t\t\tBlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor));\n\t\t\t\t\tdst_p += src_end - src_anchor;\n\t\t\t\t}\n\n\t\t\t\t// End\n\t\t\t\treturn (int)((dst_p) - dst);\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region LZ4_uncompress_32\n\n\t\tprivate static unsafe int LZ4_uncompress_32(\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint dst_len)\n\t\t{\n\t\t\tfixed (int* dec32table = &DECODER_TABLE_32[0])\n\t\t\t{\n\t\t\t\t// r93\n\t\t\t\tvar src_p = src;\n\t\t\t\tbyte* xxx_ref;\n\n\t\t\t\tvar dst_p = dst;\n\t\t\t\tvar dst_end = dst_p + dst_len;\n\t\t\t\tbyte* dst_cpy;\n\n\t\t\t\tvar dst_LASTLITERALS = dst_end - LASTLITERALS;\n\t\t\t\tvar dst_COPYLENGTH = dst_end - COPYLENGTH;\n\t\t\t\tvar dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_32 - 4);\n\n\t\t\t\tuint xxx_token;\n\n\t\t\t\t// Main Loop\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tint length;\n\n\t\t\t\t\t// get runlength\n\t\t\t\t\txxx_token = *src_p++;\n\t\t\t\t\tif ((length = (int)(xxx_token >> ML_BITS)) == RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tint len;\n\t\t\t\t\t\tfor (; (len = *src_p++) == 255; length += 255)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlength += len;\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy literals\n\t\t\t\t\tdst_cpy = dst_p + length;\n\n\t\t\t\t\tif (dst_cpy > dst_COPYLENGTH)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals\n\t\t\t\t\t\tBlockCopy(src_p, dst_p, (length));\n\t\t\t\t\t\tsrc_p += length;\n\t\t\t\t\t\tbreak; // EOF\n\t\t\t\t\t}\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)src_p;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tsrc_p += 4;\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)src_p;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tsrc_p += 4;\n\t\t\t\t\t} while (dst_p < dst_cpy);\n\t\t\t\t\tsrc_p -= (dst_p - dst_cpy);\n\t\t\t\t\tdst_p = dst_cpy;\n\n\t\t\t\t\t// get offset\n\t\t\t\t\txxx_ref = (dst_cpy) - (*(ushort*)(src_p));\n\t\t\t\t\tsrc_p += 2;\n\t\t\t\t\tif (xxx_ref < dst) goto _output_error; // Error : offset outside destination buffer\n\n\t\t\t\t\t// get matchlength\n\t\t\t\t\tif ((length = (int)(xxx_token & ML_MASK)) == ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (; *src_p == 255; length += 255) src_p++;\n\t\t\t\t\t\tlength += *src_p++;\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy repeated sequence\n\t\t\t\t\tif ((dst_p - xxx_ref) < STEPSIZE_32)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst int dec64 = 0;\n\n\t\t\t\t\t\tdst_p[0] = xxx_ref[0];\n\t\t\t\t\t\tdst_p[1] = xxx_ref[1];\n\t\t\t\t\t\tdst_p[2] = xxx_ref[2];\n\t\t\t\t\t\tdst_p[3] = xxx_ref[3];\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t\txxx_ref -= dec32table[dst_p - xxx_ref];\n\t\t\t\t\t\t(*(uint*)(dst_p)) = (*(uint*)(xxx_ref));\n\t\t\t\t\t\tdst_p += STEPSIZE_32 - 4;\n\t\t\t\t\t\txxx_ref -= dec64;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t}\n\t\t\t\t\tdst_cpy = dst_p + length - (STEPSIZE_32 - 4);\n\n\t\t\t\t\tif (dst_cpy > dst_COPYLENGTH_STEPSIZE_4)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t\t\t} while (dst_p < dst_COPYLENGTH);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twhile (dst_p < dst_cpy) *dst_p++ = *xxx_ref++;\n\t\t\t\t\t\tdst_p = dst_cpy;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t} while (dst_p < dst_cpy);\n\t\t\t\t\tdst_p = dst_cpy; // correction\n\t\t\t\t}\n\n\t\t\t\t// end of decoding\n\t\t\t\treturn (int)((src_p) - src);\n\n\t\t\t\t// write overflow error detected\n\t\t\t_output_error:\n\t\t\t\treturn (int)(-((src_p) - src));\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region LZ4_uncompress_unknownOutputSize_32\n\n\t\tprivate static unsafe int LZ4_uncompress_unknownOutputSize_32(\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint src_len,\n\t\t\tint dst_maxlen)\n\t\t{\n\t\t\tfixed (int* dec32table = &DECODER_TABLE_32[0])\n\t\t\t{\n\t\t\t\t// r93\n\t\t\t\tvar src_p = src;\n\t\t\t\tvar src_end = src_p + src_len;\n\t\t\t\tbyte* xxx_ref;\n\n\t\t\t\tvar dst_p = dst;\n\t\t\t\tvar dst_end = dst_p + dst_maxlen;\n\t\t\t\tbyte* dst_cpy;\n\n\t\t\t\tvar src_LASTLITERALS_3 = (src_end - (2 + 1 + LASTLITERALS));\n\t\t\t\tvar src_LASTLITERALS_1 = (src_end - (LASTLITERALS + 1));\n\t\t\t\tvar dst_COPYLENGTH = (dst_end - COPYLENGTH);\n\t\t\t\tvar dst_COPYLENGTH_STEPSIZE_4 = (dst_end - (COPYLENGTH + (STEPSIZE_32 - 4)));\n\t\t\t\tvar dst_LASTLITERALS = (dst_end - LASTLITERALS);\n\t\t\t\tvar dst_MFLIMIT = (dst_end - MFLIMIT);\n\n\t\t\t\t// Special case\n\t\t\t\tif (src_p == src_end) goto _output_error; // A correctly formed null-compressed LZ4 must have at least one byte (token=0)\n\n\t\t\t\t// Main Loop\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tuint xxx_token;\n\t\t\t\t\tint length;\n\n\t\t\t\t\t// get runlength\n\t\t\t\t\txxx_token = *src_p++;\n\t\t\t\t\tif ((length = (int)(xxx_token >> ML_BITS)) == RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar s = 255;\n\t\t\t\t\t\twhile ((src_p < src_end) && (s == 255))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ts = *src_p++;\n\t\t\t\t\t\t\tlength += s;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy literals\n\t\t\t\t\tdst_cpy = dst_p + length;\n\n\t\t\t\t\tif ((dst_cpy > dst_MFLIMIT) || (src_p + length > src_LASTLITERALS_3))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (dst_cpy > dst_end) goto _output_error; // Error : writes beyond output buffer\n\t\t\t\t\t\tif (src_p + length != src_end) goto _output_error; // Error : LZ4 format requires to consume all input at this stage (no match within the last 11 bytes, and at least 8 remaining input bytes for another match+literals)\n\t\t\t\t\t\tBlockCopy(src_p, dst_p, (length));\n\t\t\t\t\t\tdst_p += length;\n\t\t\t\t\t\tbreak; // Necessarily EOF, due to parsing restrictions\n\t\t\t\t\t}\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)src_p;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tsrc_p += 4;\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)src_p;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tsrc_p += 4;\n\t\t\t\t\t} while (dst_p < dst_cpy);\n\t\t\t\t\tsrc_p -= (dst_p - dst_cpy);\n\t\t\t\t\tdst_p = dst_cpy;\n\n\t\t\t\t\t// get offset\n\t\t\t\t\txxx_ref = (dst_cpy) - (*(ushort*)(src_p));\n\t\t\t\t\tsrc_p += 2;\n\t\t\t\t\tif (xxx_ref < dst) goto _output_error; // Error : offset outside of destination buffer\n\n\t\t\t\t\t// get matchlength\n\t\t\t\t\tif ((length = (int)(xxx_token & ML_MASK)) == ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\twhile (src_p < src_LASTLITERALS_1) // Error : a minimum input bytes must remain for LASTLITERALS + token\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint s = *src_p++;\n\t\t\t\t\t\t\tlength += s;\n\t\t\t\t\t\t\tif (s == 255) continue;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy repeated sequence\n\t\t\t\t\tif (dst_p - xxx_ref < STEPSIZE_32)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst int dec64 = 0;\n\n\t\t\t\t\t\tdst_p[0] = xxx_ref[0];\n\t\t\t\t\t\tdst_p[1] = xxx_ref[1];\n\t\t\t\t\t\tdst_p[2] = xxx_ref[2];\n\t\t\t\t\t\tdst_p[3] = xxx_ref[3];\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t\txxx_ref -= dec32table[dst_p - xxx_ref];\n\t\t\t\t\t\t(*(uint*)(dst_p)) = (*(uint*)(xxx_ref));\n\t\t\t\t\t\tdst_p += STEPSIZE_32 - 4;\n\t\t\t\t\t\txxx_ref -= dec64;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t}\n\t\t\t\t\tdst_cpy = dst_p + length - (STEPSIZE_32 - 4);\n\n\t\t\t\t\tif (dst_cpy > dst_COPYLENGTH_STEPSIZE_4)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t\t\t} while (dst_p < dst_COPYLENGTH);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twhile (dst_p < dst_cpy) *dst_p++ = *xxx_ref++;\n\t\t\t\t\t\tdst_p = dst_cpy;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t\t*(uint*)dst_p = *(uint*)xxx_ref;\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\txxx_ref += 4;\n\t\t\t\t\t} while (dst_p < dst_cpy);\n\t\t\t\t\tdst_p = dst_cpy; // correction\n\t\t\t\t}\n\n\t\t\t\t// end of decoding\n\t\t\t\treturn (int)((dst_p) - dst);\n\n\t\t\t\t// write overflow error detected\n\t\t\t_output_error:\n\t\t\t\treturn (int)(-((src_p) - src));\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n\n// ReSharper restore JoinDeclarationAndInitializer\n// ReSharper restore TooWideLocalVariableScope\n// ReSharper restore InconsistentNaming"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe32HC.Dirty.cs",
    "content": "﻿#region LZ4 original\n\n/*\n   LZ4 - Fast LZ compression algorithm\n   Copyright (C) 2011-2012, Yann Collet.\n   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions are\n   met:\n\n\t   * Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\t   * Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following disclaimer\n   in the documentation and/or other materials provided with the\n   distribution.\n\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   You can contact the author at :\n   - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html\n   - LZ4 source repository : http://code.google.com/p/lz4/\n*/\n\n#endregion\n\n#region LZ4 port\n\n/*\nCopyright (c) 2013, Milosz Krajewski\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided\nthat the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions\n  and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions\n  and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\nIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#endregion\n\n// ReSharper disable InconsistentNaming\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4\n{\n\tinternal static partial class LZ4Codec\n\t{\n\t\t// Update chains up to ip (excluded)\n\t\tprivate static unsafe void LZ4HC_Insert_32(LZ4HC_Data_Structure hc4, byte* src_p)\n\t\t{\n\t\t\tfixed (ushort* chainTable = hc4.chainTable)\n\t\t\tfixed (int* hashTable = hc4.hashTable)\n\t\t\t{\n\t\t\t\tvar src_base = hc4.src_base;\n\n\t\t\t\twhile (hc4.nextToUpdate < src_p)\n\t\t\t\t{\n\t\t\t\t\tvar p = hc4.nextToUpdate;\n\t\t\t\t\tvar delta = (int)((p) - (hashTable[((((*(uint*)(p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base));\n\t\t\t\t\tif (delta > MAX_DISTANCE) delta = MAX_DISTANCE;\n\t\t\t\t\tchainTable[((int)p) & MAXD_MASK] = (ushort)delta;\n\t\t\t\t\thashTable[((((*(uint*)(p))) * 2654435761u) >> HASHHC_ADJUST)] = (int)(p - src_base);\n\t\t\t\t\thc4.nextToUpdate++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate static unsafe int LZ4HC_CommonLength_32(byte* p1, byte* p2, byte* src_LASTLITERALS)\n\t\t{\n\t\t\tfixed (int* debruijn32 = DEBRUIJN_TABLE_32)\n\t\t\t{\n\t\t\t\tvar p1t = p1;\n\n\t\t\t\twhile (p1t < src_LASTLITERALS - (STEPSIZE_32 - 1))\n\t\t\t\t{\n\t\t\t\t\tvar diff = (*(int*)(p2)) ^ (*(int*)(p1t));\n\t\t\t\t\tif (diff == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tp1t += STEPSIZE_32;\n\t\t\t\t\t\tp2 += STEPSIZE_32;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tp1t += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27];\n\t\t\t\t\treturn (int)(p1t - p1);\n\t\t\t\t}\n\t\t\t\tif ((p1t < (src_LASTLITERALS - 1)) && ((*(ushort*)(p2)) == (*(ushort*)(p1t))))\n\t\t\t\t{\n\t\t\t\t\tp1t += 2;\n\t\t\t\t\tp2 += 2;\n\t\t\t\t}\n\t\t\t\tif ((p1t < src_LASTLITERALS) && (*p2 == *p1t)) p1t++;\n\t\t\t\treturn (int)(p1t - p1);\n\t\t\t}\n\t\t}\n\n\t\tprivate static unsafe int LZ4HC_InsertAndFindBestMatch_32(\n\t\t\tLZ4HC_Data_Structure hc4, byte* src_p, byte* src_LASTLITERALS, ref byte* matchpos)\n\t\t{\n\t\t\tfixed (ushort* chainTable = hc4.chainTable)\n\t\t\tfixed (int* hashTable = hc4.hashTable)\n\t\t\t{\n\t\t\t\tvar src_base = hc4.src_base;\n\t\t\t\tvar nbAttempts = MAX_NB_ATTEMPTS;\n\t\t\t\tint repl = 0, ml = 0;\n\t\t\t\tushort delta = 0;\n\n\t\t\t\t// HC4 match finder\n\t\t\t\tLZ4HC_Insert_32(hc4, src_p);\n\t\t\t\tvar xxx_ref = (hashTable[((((*(uint*)(src_p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base);\n\n\t\t\t\t// Detect repetitive sequences of length <= 4\n\t\t\t\tif (xxx_ref >= src_p - 4) // potential repetition\n\t\t\t\t{\n\t\t\t\t\tif ((*(uint*)(xxx_ref)) == (*(uint*)(src_p))) // confirmed\n\t\t\t\t\t{\n\t\t\t\t\t\tdelta = (ushort)(src_p - xxx_ref);\n\t\t\t\t\t\trepl = ml = LZ4HC_CommonLength_32(src_p + MINMATCH, xxx_ref + MINMATCH, src_LASTLITERALS) + MINMATCH;\n\t\t\t\t\t\tmatchpos = xxx_ref;\n\t\t\t\t\t}\n\t\t\t\t\txxx_ref = ((xxx_ref) - chainTable[((int)xxx_ref) & MAXD_MASK]);\n\t\t\t\t}\n\n\t\t\t\twhile ((xxx_ref >= src_p - MAX_DISTANCE) && (nbAttempts != 0))\n\t\t\t\t{\n\t\t\t\t\tnbAttempts--;\n\t\t\t\t\tif (*(xxx_ref + ml) == *(src_p + ml))\n\t\t\t\t\t\tif ((*(uint*)(xxx_ref)) == (*(uint*)(src_p)))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar mlt = LZ4HC_CommonLength_32(src_p + MINMATCH, xxx_ref + MINMATCH, src_LASTLITERALS) + MINMATCH;\n\t\t\t\t\t\t\tif (mlt > ml)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tml = mlt;\n\t\t\t\t\t\t\t\tmatchpos = xxx_ref;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\txxx_ref = ((xxx_ref) - chainTable[((int)xxx_ref) & MAXD_MASK]);\n\t\t\t\t}\n\n\t\t\t\t// Complete table\n\t\t\t\tif (repl != 0)\n\t\t\t\t{\n\t\t\t\t\tvar src_ptr = src_p;\n\n\t\t\t\t\tvar src_end = src_p + repl - (MINMATCH - 1);\n\t\t\t\t\twhile (src_ptr < src_end - delta)\n\t\t\t\t\t{\n\t\t\t\t\t\tchainTable[((int)src_ptr) & MAXD_MASK] = delta; // Pre-Load\n\t\t\t\t\t\tsrc_ptr++;\n\t\t\t\t\t}\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\tchainTable[((int)src_ptr) & MAXD_MASK] = delta;\n\t\t\t\t\t\thashTable[((((*(uint*)(src_ptr))) * 2654435761u) >> HASHHC_ADJUST)] = (int)(src_ptr - src_base); // Head of chain\n\t\t\t\t\t\tsrc_ptr++;\n\t\t\t\t\t} while (src_ptr < src_end);\n\t\t\t\t\thc4.nextToUpdate = src_end;\n\t\t\t\t}\n\n\t\t\t\treturn ml;\n\t\t\t}\n\t\t}\n\n\t\tprivate static unsafe int LZ4HC_InsertAndGetWiderMatch_32(\n\t\t\tLZ4HC_Data_Structure hc4, byte* src_p, byte* startLimit, byte* src_LASTLITERALS, int longest,\n\t\t\tref byte* matchpos, ref byte* startpos)\n\t\t{\n\t\t\tfixed (ushort* chainTable = hc4.chainTable)\n\t\t\tfixed (int* hashTable = hc4.hashTable)\n\t\t\tfixed (int* debruijn32 = DEBRUIJN_TABLE_32)\n\t\t\t{\n\t\t\t\tvar src_base = hc4.src_base;\n\t\t\t\tvar nbAttempts = MAX_NB_ATTEMPTS;\n\t\t\t\tvar delta = (int)(src_p - startLimit);\n\n\t\t\t\t// First Match\n\t\t\t\tLZ4HC_Insert_32(hc4, src_p);\n\t\t\t\tvar xxx_ref = (hashTable[((((*(uint*)(src_p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base);\n\n\t\t\t\twhile ((xxx_ref >= src_p - MAX_DISTANCE) && (nbAttempts != 0))\n\t\t\t\t{\n\t\t\t\t\tnbAttempts--;\n\t\t\t\t\tif (*(startLimit + longest) == *(xxx_ref - delta + longest))\n\t\t\t\t\t{\n\t\t\t\t\t\tif ((*(uint*)(xxx_ref)) == (*(uint*)(src_p)))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar reft = xxx_ref + MINMATCH;\n\t\t\t\t\t\t\tvar ipt = src_p + MINMATCH;\n\t\t\t\t\t\t\tvar startt = src_p;\n\n\t\t\t\t\t\t\twhile (ipt < src_LASTLITERALS - (STEPSIZE_32 - 1))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar diff = (*(int*)(reft)) ^ (*(int*)(ipt));\n\t\t\t\t\t\t\t\tif (diff == 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tipt += STEPSIZE_32;\n\t\t\t\t\t\t\t\t\treft += STEPSIZE_32;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tipt += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27];\n\t\t\t\t\t\t\t\tgoto _endCount;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((ipt < (src_LASTLITERALS - 1)) && ((*(ushort*)(reft)) == (*(ushort*)(ipt))))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tipt += 2;\n\t\t\t\t\t\t\t\treft += 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((ipt < src_LASTLITERALS) && (*reft == *ipt)) ipt++;\n\t\t\t\t\t\t_endCount:\n\t\t\t\t\t\t\treft = xxx_ref;\n\n\t\t\t\t\t\t\twhile ((startt > startLimit) && (reft > hc4.src_base) && (startt[-1] == reft[-1]))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstartt--;\n\t\t\t\t\t\t\t\treft--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ((ipt - startt) > longest)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlongest = (int)(ipt - startt);\n\t\t\t\t\t\t\t\tmatchpos = reft;\n\t\t\t\t\t\t\t\tstartpos = startt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\txxx_ref = ((xxx_ref) - chainTable[((int)xxx_ref) & MAXD_MASK]);\n\t\t\t\t}\n\n\t\t\t\treturn longest;\n\t\t\t}\n\t\t}\n\n\t\tprivate static unsafe int LZ4_encodeSequence_32(\n\t\t\tref byte* src_p, ref byte* dst_p, ref byte* src_anchor, int matchLength, byte* xxx_ref, byte* dst_end)\n\t\t{\n\t\t\tint len;\n\n\t\t\t// Encode Literal length\n\t\t\tvar length = (int)(src_p - src_anchor);\n\t\t\tvar xxx_token = (dst_p)++;\n\t\t\tif ((dst_p + length + (2 + 1 + LASTLITERALS) + (length >> 8)) > dst_end) return 1; // Check output limit\n\t\t\tif (length >= RUN_MASK)\n\t\t\t{\n\t\t\t\t*xxx_token = (RUN_MASK << ML_BITS);\n\t\t\t\tlen = length - RUN_MASK;\n\t\t\t\tfor (; len > 254; len -= 255) *(dst_p)++ = 255;\n\t\t\t\t*(dst_p)++ = (byte)len;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*xxx_token = (byte)(length << ML_BITS);\n\t\t\t}\n\n\t\t\t// Copy Literals\n\t\t\tvar _p = dst_p + (length);\n\t\t\tdo\n\t\t\t{\n\t\t\t\t*(uint*)dst_p = *(uint*)src_anchor;\n\t\t\t\tdst_p += 4;\n\t\t\t\tsrc_anchor += 4;\n\t\t\t\t*(uint*)dst_p = *(uint*)src_anchor;\n\t\t\t\tdst_p += 4;\n\t\t\t\tsrc_anchor += 4;\n\t\t\t} while (dst_p < _p);\n\t\t\tdst_p = _p;\n\n\t\t\t// Encode Offset\n\t\t\t*(ushort*)dst_p = (ushort)(src_p - xxx_ref);\n\t\t\tdst_p += 2;\n\n\t\t\t// Encode MatchLength\n\t\t\tlen = (matchLength - MINMATCH);\n\t\t\tif (dst_p + (1 + LASTLITERALS) + (length >> 8) > dst_end) return 1; // Check output limit\n\t\t\tif (len >= ML_MASK)\n\t\t\t{\n\t\t\t\t*xxx_token += ML_MASK;\n\t\t\t\tlen -= ML_MASK;\n\t\t\t\tfor (; len > 509; len -= 510)\n\t\t\t\t{\n\t\t\t\t\t*(dst_p)++ = 255;\n\t\t\t\t\t*(dst_p)++ = 255;\n\t\t\t\t}\n\t\t\t\tif (len > 254)\n\t\t\t\t{\n\t\t\t\t\tlen -= 255;\n\t\t\t\t\t*(dst_p)++ = 255;\n\t\t\t\t}\n\t\t\t\t*(dst_p)++ = (byte)len;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*xxx_token += (byte)len;\n\t\t\t}\n\n\t\t\t// Prepare next loop\n\t\t\tsrc_p += matchLength;\n\t\t\tsrc_anchor = src_p;\n\n\t\t\treturn 0;\n\t\t}\n\n\t\tprivate static unsafe int LZ4_compressHCCtx_32(\n\t\t\tLZ4HC_Data_Structure ctx,\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint src_len,\n\t\t\tint dst_maxlen)\n\t\t{\n\t\t\tvar src_p = src;\n\t\t\tvar src_anchor = src_p;\n\t\t\tvar src_end = src_p + src_len;\n\t\t\tvar src_mflimit = src_end - MFLIMIT;\n\t\t\tvar src_LASTLITERALS = (src_end - LASTLITERALS);\n\n\t\t\tvar dst_p = dst;\n\t\t\tvar dst_end = dst_p + dst_maxlen;\n\n\t\t\tbyte* xxx_ref = null;\n\t\t\tbyte* start2 = null;\n\t\t\tbyte* ref2 = null;\n\t\t\tbyte* start3 = null;\n\t\t\tbyte* ref3 = null;\n\n\t\t\tsrc_p++;\n\n\t\t\t// Main Loop\n\t\t\twhile (src_p < src_mflimit)\n\t\t\t{\n\t\t\t\tvar ml = LZ4HC_InsertAndFindBestMatch_32(ctx, src_p, src_LASTLITERALS, ref xxx_ref);\n\t\t\t\tif (ml == 0)\n\t\t\t\t{\n\t\t\t\t\tsrc_p++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// saved, in case we would skip too much\n\t\t\t\tvar start0 = src_p;\n\t\t\t\tvar ref0 = xxx_ref;\n\t\t\t\tvar ml0 = ml;\n\n\t\t\t_Search2:\n\t\t\t\tvar ml2 = src_p + ml < src_mflimit\n\t\t\t\t\t? LZ4HC_InsertAndGetWiderMatch_32(ctx, src_p + ml - 2, src_p + 1, src_LASTLITERALS, ml, ref ref2, ref start2)\n\t\t\t\t\t: ml;\n\n\t\t\t\tif (ml2 == ml) // No better match\n\t\t\t\t{\n\t\t\t\t\tif (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml, xxx_ref, dst_end) != 0) return 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (start0 < src_p)\n\t\t\t\t{\n\t\t\t\t\tif (start2 < src_p + ml0) // empirical\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p = start0;\n\t\t\t\t\t\txxx_ref = ref0;\n\t\t\t\t\t\tml = ml0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Here, start0==ip\n\t\t\t\tif ((start2 - src_p) < 3) // First Match too small : removed\n\t\t\t\t{\n\t\t\t\t\tml = ml2;\n\t\t\t\t\tsrc_p = start2;\n\t\t\t\t\txxx_ref = ref2;\n\t\t\t\t\tgoto _Search2;\n\t\t\t\t}\n\n\t\t\t_Search3:\n\t\t\t\t// Currently we have :\n\t\t\t\t// ml2 > ml1, and\n\t\t\t\t// ip1+3 <= ip2 (usually < ip1+ml1)\n\t\t\t\tif ((start2 - src_p) < OPTIMAL_ML)\n\t\t\t\t{\n\t\t\t\t\tvar new_ml = ml;\n\t\t\t\t\tif (new_ml > OPTIMAL_ML) new_ml = OPTIMAL_ML;\n\t\t\t\t\tif (src_p + new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - src_p) + ml2 - MINMATCH;\n\t\t\t\t\tvar correction = new_ml - (int)(start2 - src_p);\n\t\t\t\t\tif (correction > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tstart2 += correction;\n\t\t\t\t\t\tref2 += correction;\n\t\t\t\t\t\tml2 -= correction;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Now, we have start2 = ip+new_ml, with new_ml=min(ml, OPTIMAL_ML=18)\n\n\t\t\t\tvar ml3 = start2 + ml2 < src_mflimit\n\t\t\t\t\t? LZ4HC_InsertAndGetWiderMatch_32(ctx, start2 + ml2 - 3, start2, src_LASTLITERALS, ml2, ref ref3, ref start3)\n\t\t\t\t\t: ml2;\n\n\t\t\t\tif (ml3 == ml2) // No better match : 2 sequences to encode\n\t\t\t\t{\n\t\t\t\t\t// ip & ref are known; Now for ml\n\t\t\t\t\tif (start2 < src_p + ml) ml = (int)(start2 - src_p);\n\t\t\t\t\t// Now, encode 2 sequences\n\t\t\t\t\tif (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml, xxx_ref, dst_end) != 0) return 0;\n\t\t\t\t\tsrc_p = start2;\n\t\t\t\t\tif (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml2, ref2, dst_end) != 0) return 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (start3 < src_p + ml + 3) // Not enough space for match 2 : remove it\n\t\t\t\t{\n\t\t\t\t\tif (start3 >= (src_p + ml)) // can write Seq1 immediately ==> Seq2 is removed, so Seq3 becomes Seq1\n\t\t\t\t\t{\n\t\t\t\t\t\tif (start2 < src_p + ml)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar correction = (int)(src_p + ml - start2);\n\t\t\t\t\t\t\tstart2 += correction;\n\t\t\t\t\t\t\tref2 += correction;\n\t\t\t\t\t\t\tml2 -= correction;\n\t\t\t\t\t\t\tif (ml2 < MINMATCH)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstart2 = start3;\n\t\t\t\t\t\t\t\tref2 = ref3;\n\t\t\t\t\t\t\t\tml2 = ml3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml, xxx_ref, dst_end) != 0) return 0;\n\t\t\t\t\t\tsrc_p = start3;\n\t\t\t\t\t\txxx_ref = ref3;\n\t\t\t\t\t\tml = ml3;\n\n\t\t\t\t\t\tstart0 = start2;\n\t\t\t\t\t\tref0 = ref2;\n\t\t\t\t\t\tml0 = ml2;\n\t\t\t\t\t\tgoto _Search2;\n\t\t\t\t\t}\n\n\t\t\t\t\tstart2 = start3;\n\t\t\t\t\tref2 = ref3;\n\t\t\t\t\tml2 = ml3;\n\t\t\t\t\tgoto _Search3;\n\t\t\t\t}\n\n\t\t\t\t// OK, now we have 3 ascending matches; let's write at least the first one\n\t\t\t\t// ip & ref are known; Now for ml\n\t\t\t\tif (start2 < src_p + ml)\n\t\t\t\t{\n\t\t\t\t\tif ((start2 - src_p) < ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (ml > OPTIMAL_ML) ml = OPTIMAL_ML;\n\t\t\t\t\t\tif (src_p + ml > start2 + ml2 - MINMATCH) ml = (int)(start2 - src_p) + ml2 - MINMATCH;\n\t\t\t\t\t\tvar correction = ml - (int)(start2 - src_p);\n\t\t\t\t\t\tif (correction > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstart2 += correction;\n\t\t\t\t\t\t\tref2 += correction;\n\t\t\t\t\t\t\tml2 -= correction;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tml = (int)(start2 - src_p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml, xxx_ref, dst_end) != 0) return 0;\n\n\t\t\t\tsrc_p = start2;\n\t\t\t\txxx_ref = ref2;\n\t\t\t\tml = ml2;\n\n\t\t\t\tstart2 = start3;\n\t\t\t\tref2 = ref3;\n\t\t\t\tml2 = ml3;\n\n\t\t\t\tgoto _Search3;\n\t\t\t}\n\n\t\t\t// Encode Last Literals\n\t\t\t{\n\t\t\t\tvar lastRun = (int)(src_end - src_anchor);\n\t\t\t\tif ((dst_p - dst) + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > (uint)dst_maxlen) return 0; // Check output limit\n\t\t\t\tif (lastRun >= RUN_MASK)\n\t\t\t\t{\n\t\t\t\t\t*dst_p++ = (RUN_MASK << ML_BITS);\n\t\t\t\t\tlastRun -= RUN_MASK;\n\t\t\t\t\tfor (; lastRun > 254; lastRun -= 255) *dst_p++ = 255;\n\t\t\t\t\t*dst_p++ = (byte)lastRun;\n\t\t\t\t}\n\t\t\t\telse *dst_p++ = (byte)(lastRun << ML_BITS);\n\t\t\t\tBlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor));\n\t\t\t\tdst_p += src_end - src_anchor;\n\t\t\t}\n\n\t\t\t// End\n\t\t\treturn (int)((dst_p) - dst);\n\t\t}\n\t}\n}\n\n// ReSharper restore InconsistentNaming\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe64.Dirty.cs",
    "content": "﻿#region LZ4 original\n\n/*\n   LZ4 - Fast LZ compression algorithm\n   Copyright (C) 2011-2012, Yann Collet.\n   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions are\n   met:\n\n\t   * Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\t   * Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following disclaimer\n   in the documentation and/or other materials provided with the\n   distribution.\n\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   You can contact the author at :\n   - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html\n   - LZ4 source repository : http://code.google.com/p/lz4/\n*/\n\n#endregion\n\n#region LZ4 port\n\n/*\nCopyright (c) 2013, Milosz Krajewski\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided\nthat the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions\n  and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions\n  and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\nIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#endregion\n\n// ReSharper disable InconsistentNaming\n// ReSharper disable TooWideLocalVariableScope\n// ReSharper disable JoinDeclarationAndInitializer\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4\n{\n\tinternal static partial class LZ4Codec\n\t{\n\t\t#region LZ4_compressCtx_64\n\n\t\tprivate static unsafe int LZ4_compressCtx_64(\n\t\t\tuint* hash_table,\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint src_len,\n\t\t\tint dst_maxlen)\n\t\t{\n\t\t\tbyte* _p;\n\n\t\t\tfixed (int* debruijn64 = &DEBRUIJN_TABLE_64[0])\n\t\t\t{\n\t\t\t\t// r93\n\t\t\t\tvar src_p = src;\n\t\t\t\tvar src_base = src_p;\n\t\t\t\tvar src_anchor = src_p;\n\t\t\t\tvar src_end = src_p + src_len;\n\t\t\t\tvar src_mflimit = src_end - MFLIMIT;\n\n\t\t\t\tvar dst_p = dst;\n\t\t\t\tvar dst_end = dst_p + dst_maxlen;\n\n\t\t\t\tvar src_LASTLITERALS = src_end - LASTLITERALS;\n\t\t\t\tvar src_LASTLITERALS_1 = src_LASTLITERALS - 1;\n\n\t\t\t\tvar src_LASTLITERALS_3 = src_LASTLITERALS - 3;\n\t\t\t\tvar src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1);\n\t\t\t\tvar dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS);\n\t\t\t\tvar dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS);\n\n\t\t\t\tint length;\n\t\t\t\tuint h, h_fwd;\n\n\t\t\t\t// Init\n\t\t\t\tif (src_len < MINLENGTH) goto _last_literals;\n\n\t\t\t\t// First Byte\n\t\t\t\thash_table[((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - src_base);\n\t\t\t\tsrc_p++;\n\t\t\t\th_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST);\n\n\t\t\t\t// Main Loop\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tvar findMatchAttempts = (1 << SKIPSTRENGTH) + 3;\n\t\t\t\t\tvar src_p_fwd = src_p;\n\t\t\t\t\tbyte* src_ref;\n\t\t\t\t\tbyte* dst_token;\n\n\t\t\t\t\t// Find a match\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\th = h_fwd;\n\t\t\t\t\t\tvar step = findMatchAttempts++ >> SKIPSTRENGTH;\n\t\t\t\t\t\tsrc_p = src_p_fwd;\n\t\t\t\t\t\tsrc_p_fwd = src_p + step;\n\n\t\t\t\t\t\tif (src_p_fwd > src_mflimit) goto _last_literals;\n\n\t\t\t\t\t\th_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH_ADJUST);\n\t\t\t\t\t\tsrc_ref = src_base + hash_table[h];\n\t\t\t\t\t\thash_table[h] = (uint)(src_p - src_base);\n\t\t\t\t\t} while ((src_ref < src_p - MAX_DISTANCE) || ((*(uint*)(src_ref)) != (*(uint*)(src_p))));\n\n\t\t\t\t\t// Catch up\n\t\t\t\t\twhile ((src_p > src_anchor) && (src_ref > src) && (src_p[-1] == src_ref[-1]))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p--;\n\t\t\t\t\t\tsrc_ref--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Encode Literal length\n\t\t\t\t\tlength = (int)(src_p - src_anchor);\n\t\t\t\t\tdst_token = dst_p++;\n\n\t\t\t\t\tif (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit\n\n\t\t\t\t\tif (length >= RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar len = length - RUN_MASK;\n\t\t\t\t\t\t*dst_token = (RUN_MASK << ML_BITS);\n\t\t\t\t\t\tif (len > 254)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t\t\tlen -= 255;\n\t\t\t\t\t\t\t} while (len > 254);\n\t\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t\t\tBlockCopy(src_anchor, dst_p, (length));\n\t\t\t\t\t\t\tdst_p += length;\n\t\t\t\t\t\t\tgoto _next_match;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*dst_token = (byte)(length << ML_BITS);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Copy Literals\n\t\t\t\t\t_p = dst_p + (length);\n\t\t\t\t\t{\n\t\t\t\t\t\tdo\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)src_anchor;\n\t\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\t\tsrc_anchor += 8;\n\t\t\t\t\t\t} while (dst_p < _p);\n\t\t\t\t\t}\n\t\t\t\t\tdst_p = _p;\n\n\t\t\t\t_next_match:\n\n\t\t\t\t\t// Encode Offset\n\t\t\t\t\t*(ushort*)dst_p = (ushort)(src_p - src_ref);\n\t\t\t\t\tdst_p += 2;\n\n\t\t\t\t\t// Start Counting\n\t\t\t\t\tsrc_p += MINMATCH;\n\t\t\t\t\tsrc_ref += MINMATCH; // MinMatch already verified\n\t\t\t\t\tsrc_anchor = src_p;\n\n\t\t\t\t\twhile (src_p < src_LASTLITERALS_STEPSIZE_1)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar diff = (*(long*)(src_ref)) ^ (*(long*)(src_p));\n\t\t\t\t\t\tif (diff == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsrc_p += STEPSIZE_64;\n\t\t\t\t\t\t\tsrc_ref += STEPSIZE_64;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsrc_p += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58];\n\t\t\t\t\t\tgoto _endCount;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((src_p < src_LASTLITERALS_3) && ((*(uint*)(src_ref)) == (*(uint*)(src_p))))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p += 4;\n\t\t\t\t\t\tsrc_ref += 4;\n\t\t\t\t\t}\n\t\t\t\t\tif ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(src_ref)) == (*(ushort*)(src_p))))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p += 2;\n\t\t\t\t\t\tsrc_ref += 2;\n\t\t\t\t\t}\n\t\t\t\t\tif ((src_p < src_LASTLITERALS) && (*src_ref == *src_p)) src_p++;\n\n\t\t\t\t_endCount:\n\n\t\t\t\t\t// Encode MatchLength\n\t\t\t\t\tlength = (int)(src_p - src_anchor);\n\n\t\t\t\t\tif (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit\n\n\t\t\t\t\tif (length >= ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\t*dst_token += ML_MASK;\n\t\t\t\t\t\tlength -= ML_MASK;\n\t\t\t\t\t\tfor (; length > 509; length -= 510)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (length > 254)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlength -= 255;\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*dst_p++ = (byte)length;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*dst_token += (byte)length;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Test end of chunk\n\t\t\t\t\tif (src_p > src_mflimit)\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_anchor = src_p;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fill table\n\t\t\t\t\thash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - 2 - src_base);\n\n\t\t\t\t\t// Test next position\n\n\t\t\t\t\th = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST);\n\t\t\t\t\tsrc_ref = src_base + hash_table[h];\n\t\t\t\t\thash_table[h] = (uint)(src_p - src_base);\n\n\t\t\t\t\tif ((src_ref > src_p - (MAX_DISTANCE + 1)) && ((*(uint*)(src_ref)) == (*(uint*)(src_p))))\n\t\t\t\t\t{\n\t\t\t\t\t\tdst_token = dst_p++;\n\t\t\t\t\t\t*dst_token = 0;\n\t\t\t\t\t\tgoto _next_match;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prepare next loop\n\t\t\t\t\tsrc_anchor = src_p++;\n\t\t\t\t\th_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST);\n\t\t\t\t}\n\n\t\t\t_last_literals:\n\n\t\t\t\t// Encode Last Literals\n\t\t\t\tvar lastRun = (int)(src_end - src_anchor);\n\t\t\t\tif (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0;\n\t\t\t\tif (lastRun >= RUN_MASK)\n\t\t\t\t{\n\t\t\t\t\t*dst_p++ = (RUN_MASK << ML_BITS);\n\t\t\t\t\tlastRun -= RUN_MASK;\n\t\t\t\t\tfor (; lastRun > 254; lastRun -= 255) *dst_p++ = 255;\n\t\t\t\t\t*dst_p++ = (byte)lastRun;\n\t\t\t\t}\n\t\t\t\telse *dst_p++ = (byte)(lastRun << ML_BITS);\n\t\t\t\tBlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor));\n\t\t\t\tdst_p += src_end - src_anchor;\n\n\t\t\t\t// End\n\t\t\t\treturn (int)(dst_p - dst);\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region LZ4_compress64kCtx_64\n\n\t\tprivate static unsafe int LZ4_compress64kCtx_64(\n\t\t\tushort* hash_table,\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint src_len,\n\t\t\tint dst_maxlen)\n\t\t{\n\t\t\tbyte* _p;\n\n\t\t\tfixed (int* debruijn64 = &DEBRUIJN_TABLE_64[0])\n\t\t\t{\n\t\t\t\t// r93\n\t\t\t\tvar src_p = src;\n\t\t\t\tvar src_anchor = src_p;\n\t\t\t\tvar src_base = src_p;\n\t\t\t\tvar src_end = src_p + src_len;\n\t\t\t\tvar src_mflimit = src_end - MFLIMIT;\n\n\t\t\t\tvar dst_p = dst;\n\t\t\t\tvar dst_end = dst_p + dst_maxlen;\n\n\t\t\t\tvar src_LASTLITERALS = src_end - LASTLITERALS;\n\t\t\t\tvar src_LASTLITERALS_1 = src_LASTLITERALS - 1;\n\n\t\t\t\tvar src_LASTLITERALS_3 = src_LASTLITERALS - 3;\n\n\t\t\t\tvar src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1);\n\t\t\t\tvar dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS);\n\t\t\t\tvar dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS);\n\n\t\t\t\tint len, length;\n\n\t\t\t\tuint h, h_fwd;\n\n\t\t\t\t// Init\n\t\t\t\tif (src_len < MINLENGTH) goto _last_literals;\n\n\t\t\t\t// First Byte\n\t\t\t\tsrc_p++;\n\t\t\t\th_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST);\n\n\t\t\t\t// Main Loop\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tvar findMatchAttempts = (1 << SKIPSTRENGTH) + 3;\n\t\t\t\t\tvar src_p_fwd = src_p;\n\t\t\t\t\tbyte* src_ref;\n\t\t\t\t\tbyte* dst_token;\n\n\t\t\t\t\t// Find a match\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\th = h_fwd;\n\t\t\t\t\t\tvar step = findMatchAttempts++ >> SKIPSTRENGTH;\n\t\t\t\t\t\tsrc_p = src_p_fwd;\n\t\t\t\t\t\tsrc_p_fwd = src_p + step;\n\n\t\t\t\t\t\tif (src_p_fwd > src_mflimit) goto _last_literals;\n\n\t\t\t\t\t\th_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH64K_ADJUST);\n\t\t\t\t\t\tsrc_ref = src_base + hash_table[h];\n\t\t\t\t\t\thash_table[h] = (ushort)(src_p - src_base);\n\t\t\t\t\t} while ((*(uint*)(src_ref)) != (*(uint*)(src_p)));\n\n\t\t\t\t\t// Catch up\n\t\t\t\t\twhile ((src_p > src_anchor) && (src_ref > src) && (src_p[-1] == src_ref[-1]))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p--;\n\t\t\t\t\t\tsrc_ref--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Encode Literal length\n\t\t\t\t\tlength = (int)(src_p - src_anchor);\n\t\t\t\t\tdst_token = dst_p++;\n\n\t\t\t\t\tif (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit\n\n\t\t\t\t\tif (length >= RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tlen = length - RUN_MASK;\n\t\t\t\t\t\t*dst_token = (RUN_MASK << ML_BITS);\n\t\t\t\t\t\tif (len > 254)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t\t\tlen -= 255;\n\t\t\t\t\t\t\t} while (len > 254);\n\t\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t\t\tBlockCopy(src_anchor, dst_p, (length));\n\t\t\t\t\t\t\tdst_p += length;\n\t\t\t\t\t\t\tgoto _next_match;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*dst_token = (byte)(length << ML_BITS);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Copy Literals\n\t\t\t\t\t{\n\t\t\t\t\t\t_p = dst_p + (length);\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)src_anchor;\n\t\t\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\t\t\tsrc_anchor += 8;\n\t\t\t\t\t\t\t} while (dst_p < _p);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdst_p = _p;\n\t\t\t\t\t}\n\n\t\t\t\t_next_match:\n\n\t\t\t\t\t// Encode Offset\n\t\t\t\t\t*(ushort*)dst_p = (ushort)(src_p - src_ref);\n\t\t\t\t\tdst_p += 2;\n\n\t\t\t\t\t// Start Counting\n\t\t\t\t\tsrc_p += MINMATCH;\n\t\t\t\t\tsrc_ref += MINMATCH; // MinMatch verified\n\t\t\t\t\tsrc_anchor = src_p;\n\n\t\t\t\t\twhile (src_p < src_LASTLITERALS_STEPSIZE_1)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar diff = (*(long*)(src_ref)) ^ (*(long*)(src_p));\n\t\t\t\t\t\tif (diff == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsrc_p += STEPSIZE_64;\n\t\t\t\t\t\t\tsrc_ref += STEPSIZE_64;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsrc_p += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58];\n\t\t\t\t\t\tgoto _endCount;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((src_p < src_LASTLITERALS_3) && ((*(uint*)(src_ref)) == (*(uint*)(src_p))))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p += 4;\n\t\t\t\t\t\tsrc_ref += 4;\n\t\t\t\t\t}\n\t\t\t\t\tif ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(src_ref)) == (*(ushort*)(src_p))))\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_p += 2;\n\t\t\t\t\t\tsrc_ref += 2;\n\t\t\t\t\t}\n\t\t\t\t\tif ((src_p < src_LASTLITERALS) && (*src_ref == *src_p)) src_p++;\n\n\t\t\t\t_endCount:\n\n\t\t\t\t\t// Encode MatchLength\n\t\t\t\t\tlen = (int)(src_p - src_anchor);\n\n\t\t\t\t\tif (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit\n\n\t\t\t\t\tif (len >= ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\t*dst_token += ML_MASK;\n\t\t\t\t\t\tlen -= ML_MASK;\n\t\t\t\t\t\tfor (; len > 509; len -= 510)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len > 254)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlen -= 255;\n\t\t\t\t\t\t\t*dst_p++ = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*dst_p++ = (byte)len;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*dst_token += (byte)len;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Test end of chunk\n\t\t\t\t\tif (src_p > src_mflimit)\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc_anchor = src_p;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fill table\n\t\t\t\t\thash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base);\n\n\t\t\t\t\t// Test next position\n\n\t\t\t\t\th = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST);\n\t\t\t\t\tsrc_ref = src_base + hash_table[h];\n\t\t\t\t\thash_table[h] = (ushort)(src_p - src_base);\n\n\t\t\t\t\tif ((*(uint*)(src_ref)) == (*(uint*)(src_p)))\n\t\t\t\t\t{\n\t\t\t\t\t\tdst_token = dst_p++;\n\t\t\t\t\t\t*dst_token = 0;\n\t\t\t\t\t\tgoto _next_match;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prepare next loop\n\t\t\t\t\tsrc_anchor = src_p++;\n\t\t\t\t\th_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST);\n\t\t\t\t}\n\n\t\t\t_last_literals:\n\n\t\t\t\t// Encode Last Literals\n\t\t\t\tvar lastRun = (int)(src_end - src_anchor);\n\t\t\t\tif (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0;\n\t\t\t\tif (lastRun >= RUN_MASK)\n\t\t\t\t{\n\t\t\t\t\t*dst_p++ = (RUN_MASK << ML_BITS);\n\t\t\t\t\tlastRun -= RUN_MASK;\n\t\t\t\t\tfor (; lastRun > 254; lastRun -= 255) *dst_p++ = 255;\n\t\t\t\t\t*dst_p++ = (byte)lastRun;\n\t\t\t\t}\n\t\t\t\telse *dst_p++ = (byte)(lastRun << ML_BITS);\n\t\t\t\tBlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor));\n\t\t\t\tdst_p += src_end - src_anchor;\n\n\t\t\t\t// End\n\t\t\t\treturn (int)(dst_p - dst);\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region LZ4_uncompress_64\n\n\t\tprivate static unsafe int LZ4_uncompress_64(\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint dst_len)\n\t\t{\n\t\t\tfixed (int* dec32table = &DECODER_TABLE_32[0])\n\t\t\tfixed (int* dec64table = &DECODER_TABLE_64[0])\n\t\t\t{\n\t\t\t\t// r93\n\t\t\t\tvar src_p = src;\n\t\t\t\tbyte* dst_ref;\n\n\t\t\t\tvar dst_p = dst;\n\t\t\t\tvar dst_end = dst_p + dst_len;\n\t\t\t\tbyte* dst_cpy;\n\n\t\t\t\tvar dst_LASTLITERALS = dst_end - LASTLITERALS;\n\t\t\t\tvar dst_COPYLENGTH = dst_end - COPYLENGTH;\n\t\t\t\tvar dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_64 - 4);\n\n\t\t\t\tbyte token;\n\n\t\t\t\t// Main Loop\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tint length;\n\n\t\t\t\t\t// get runlength\n\t\t\t\t\ttoken = *src_p++;\n\t\t\t\t\tif ((length = (token >> ML_BITS)) == RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tint len;\n\t\t\t\t\t\tfor (; (len = *src_p++) == 255; length += 255)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlength += len;\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy literals\n\t\t\t\t\tdst_cpy = dst_p + length;\n\n\t\t\t\t\tif (dst_cpy > dst_COPYLENGTH)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals\n\t\t\t\t\t\tBlockCopy(src_p, dst_p, (length));\n\t\t\t\t\t\tsrc_p += length;\n\t\t\t\t\t\tbreak; // EOF\n\t\t\t\t\t}\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)src_p;\n\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\tsrc_p += 8;\n\t\t\t\t\t} while (dst_p < dst_cpy);\n\t\t\t\t\tsrc_p -= (dst_p - dst_cpy);\n\t\t\t\t\tdst_p = dst_cpy;\n\n\t\t\t\t\t// get offset\n\t\t\t\t\tdst_ref = (dst_cpy) - (*(ushort*)(src_p));\n\t\t\t\t\tsrc_p += 2;\n\t\t\t\t\tif (dst_ref < dst) goto _output_error; // Error : offset outside destination buffer\n\n\t\t\t\t\t// get matchlength\n\t\t\t\t\tif ((length = (token & ML_MASK)) == ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (; *src_p == 255; length += 255) src_p++;\n\t\t\t\t\t\tlength += *src_p++;\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy repeated sequence\n\t\t\t\t\tif ((dst_p - dst_ref) < STEPSIZE_64)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar dec64 = dec64table[dst_p - dst_ref];\n\n\t\t\t\t\t\tdst_p[0] = dst_ref[0];\n\t\t\t\t\t\tdst_p[1] = dst_ref[1];\n\t\t\t\t\t\tdst_p[2] = dst_ref[2];\n\t\t\t\t\t\tdst_p[3] = dst_ref[3];\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tdst_ref += 4;\n\t\t\t\t\t\tdst_ref -= dec32table[dst_p - dst_ref];\n\t\t\t\t\t\t(*(uint*)(dst_p)) = (*(uint*)(dst_ref));\n\t\t\t\t\t\tdst_p += STEPSIZE_64 - 4;\n\t\t\t\t\t\tdst_ref -= dec64;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)dst_ref;\n\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\tdst_ref += 8;\n\t\t\t\t\t}\n\t\t\t\t\tdst_cpy = dst_p + length - (STEPSIZE_64 - 4);\n\n\t\t\t\t\tif (dst_cpy > dst_COPYLENGTH_STEPSIZE_4)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals\n\t\t\t\t\t\twhile (dst_p < dst_COPYLENGTH)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)dst_ref;\n\t\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\t\tdst_ref += 8;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twhile (dst_p < dst_cpy) *dst_p++ = *dst_ref++;\n\t\t\t\t\t\tdst_p = dst_cpy;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tdo\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)dst_ref;\n\t\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\t\tdst_ref += 8;\n\t\t\t\t\t\t} while (dst_p < dst_cpy);\n\t\t\t\t\t}\n\t\t\t\t\tdst_p = dst_cpy; // correction\n\t\t\t\t}\n\n\t\t\t\t// end of decoding\n\t\t\t\treturn (int)((src_p) - src);\n\n\t\t\t\t// write overflow error detected\n\t\t\t_output_error:\n\t\t\t\treturn (int)(-((src_p) - src));\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region LZ4_uncompress_unknownOutputSize_64\n\n\t\tprivate static unsafe int LZ4_uncompress_unknownOutputSize_64(\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint src_len,\n\t\t\tint dst_maxlen)\n\t\t{\n\t\t\tfixed (int* dec32table = &DECODER_TABLE_32[0])\n\t\t\tfixed (int* dec64table = &DECODER_TABLE_64[0])\n\t\t\t{\n\t\t\t\t// r93\n\t\t\t\tvar src_p = src;\n\t\t\t\tvar src_end = src_p + src_len;\n\t\t\t\tbyte* dst_ref;\n\n\t\t\t\tvar dst_p = dst;\n\t\t\t\tvar dst_end = dst_p + dst_maxlen;\n\t\t\t\tbyte* dst_cpy;\n\n\t\t\t\tvar src_LASTLITERALS_3 = (src_end - (2 + 1 + LASTLITERALS));\n\t\t\t\tvar src_LASTLITERALS_1 = (src_end - (LASTLITERALS + 1));\n\t\t\t\tvar dst_COPYLENGTH = (dst_end - COPYLENGTH);\n\t\t\t\tvar dst_COPYLENGTH_STEPSIZE_4 = (dst_end - (COPYLENGTH + (STEPSIZE_64 - 4)));\n\t\t\t\tvar dst_LASTLITERALS = (dst_end - LASTLITERALS);\n\t\t\t\tvar dst_MFLIMIT = (dst_end - MFLIMIT);\n\n\t\t\t\t// Special case\n\t\t\t\tif (src_p == src_end) goto _output_error; // A correctly formed null-compressed LZ4 must have at least one byte (token=0)\n\n\t\t\t\t// Main Loop\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tbyte token;\n\t\t\t\t\tint length;\n\n\t\t\t\t\t// get runlength\n\t\t\t\t\ttoken = *src_p++;\n\t\t\t\t\tif ((length = (token >> ML_BITS)) == RUN_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar s = 255;\n\t\t\t\t\t\twhile ((src_p < src_end) && (s == 255))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ts = *src_p++;\n\t\t\t\t\t\t\tlength += s;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy literals\n\t\t\t\t\tdst_cpy = dst_p + length;\n\n\t\t\t\t\tif ((dst_cpy > dst_MFLIMIT) || (src_p + length > src_LASTLITERALS_3))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (dst_cpy > dst_end) goto _output_error; // Error : writes beyond output buffer\n\t\t\t\t\t\tif (src_p + length != src_end) goto _output_error; // Error : LZ4 format requires to consume all input at this stage (no match within the last 11 bytes, and at least 8 remaining input bytes for another match+literals)\n\t\t\t\t\t\tBlockCopy(src_p, dst_p, (length));\n\t\t\t\t\t\tdst_p += length;\n\t\t\t\t\t\tbreak; // Necessarily EOF, due to parsing restrictions\n\t\t\t\t\t}\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)src_p;\n\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\tsrc_p += 8;\n\t\t\t\t\t} while (dst_p < dst_cpy);\n\t\t\t\t\tsrc_p -= (dst_p - dst_cpy);\n\t\t\t\t\tdst_p = dst_cpy;\n\n\t\t\t\t\t// get offset\n\t\t\t\t\tdst_ref = (dst_cpy) - (*(ushort*)(src_p));\n\t\t\t\t\tsrc_p += 2;\n\t\t\t\t\tif (dst_ref < dst) goto _output_error; // Error : offset outside of destination buffer\n\n\t\t\t\t\t// get matchlength\n\t\t\t\t\tif ((length = (token & ML_MASK)) == ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\twhile (src_p < src_LASTLITERALS_1) // Error : a minimum input bytes must remain for LASTLITERALS + token\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint s = *src_p++;\n\t\t\t\t\t\t\tlength += s;\n\t\t\t\t\t\t\tif (s == 255) continue;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy repeated sequence\n\t\t\t\t\tif (dst_p - dst_ref < STEPSIZE_64)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar dec64 = dec64table[dst_p - dst_ref];\n\n\t\t\t\t\t\tdst_p[0] = dst_ref[0];\n\t\t\t\t\t\tdst_p[1] = dst_ref[1];\n\t\t\t\t\t\tdst_p[2] = dst_ref[2];\n\t\t\t\t\t\tdst_p[3] = dst_ref[3];\n\t\t\t\t\t\tdst_p += 4;\n\t\t\t\t\t\tdst_ref += 4;\n\t\t\t\t\t\tdst_ref -= dec32table[dst_p - dst_ref];\n\t\t\t\t\t\t(*(uint*)(dst_p)) = (*(uint*)(dst_ref));\n\t\t\t\t\t\tdst_p += STEPSIZE_64 - 4;\n\t\t\t\t\t\tdst_ref -= dec64;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)dst_ref;\n\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\tdst_ref += 8;\n\t\t\t\t\t}\n\t\t\t\t\tdst_cpy = dst_p + length - (STEPSIZE_64 - 4);\n\n\t\t\t\t\tif (dst_cpy > dst_COPYLENGTH_STEPSIZE_4)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals\n\t\t\t\t\t\twhile (dst_p < dst_COPYLENGTH)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)dst_ref;\n\t\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\t\tdst_ref += 8;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twhile (dst_p < dst_cpy) *dst_p++ = *dst_ref++;\n\t\t\t\t\t\tdst_p = dst_cpy;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\t*(ulong*)dst_p = *(ulong*)dst_ref;\n\t\t\t\t\t\tdst_p += 8;\n\t\t\t\t\t\tdst_ref += 8;\n\t\t\t\t\t} while (dst_p < dst_cpy);\n\t\t\t\t\tdst_p = dst_cpy; // correction\n\t\t\t\t}\n\n\t\t\t\t// end of decoding\n\t\t\t\treturn (int)(dst_p - dst);\n\n\t\t\t_output_error:\n\n\t\t\t\t// write overflow error detected\n\t\t\t\treturn (int)-(src_p - src);\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n\n// ReSharper restore JoinDeclarationAndInitializer\n// ReSharper restore TooWideLocalVariableScope\n// ReSharper restore InconsistentNaming"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe64HC.Dirty.cs",
    "content": "﻿#region LZ4 original\n\n/*\n   LZ4 - Fast LZ compression algorithm\n   Copyright (C) 2011-2012, Yann Collet.\n   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions are\n   met:\n\n\t   * Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\t   * Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following disclaimer\n   in the documentation and/or other materials provided with the\n   distribution.\n\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   You can contact the author at :\n   - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html\n   - LZ4 source repository : http://code.google.com/p/lz4/\n*/\n\n#endregion\n\n#region LZ4 port\n\n/*\nCopyright (c) 2013, Milosz Krajewski\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided\nthat the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions\n  and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions\n  and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\nIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#endregion\n\n// ReSharper disable InconsistentNaming\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4\n{\n\tinternal static partial class LZ4Codec\n\t{\n\t\t// Update chains up to ip (excluded)\n\t\tprivate static unsafe void LZ4HC_Insert_64(LZ4HC_Data_Structure hc4, byte* src_p)\n\t\t{\n\t\t\tfixed (ushort* chainTable = hc4.chainTable)\n\t\t\tfixed (int* hashTable = hc4.hashTable)\n\t\t\t{\n\t\t\t\tvar src_base = hc4.src_base;\n\t\t\t\twhile (hc4.nextToUpdate < src_p)\n\t\t\t\t{\n\t\t\t\t\tvar p = hc4.nextToUpdate;\n\t\t\t\t\tvar delta = (int)((p) - (hashTable[((((*(uint*)(p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base));\n\t\t\t\t\tif (delta > MAX_DISTANCE) delta = MAX_DISTANCE;\n\t\t\t\t\tchainTable[((int)p) & MAXD_MASK] = (ushort)delta;\n\t\t\t\t\thashTable[((((*(uint*)(p))) * 2654435761u) >> HASHHC_ADJUST)] = (int)(p - src_base);\n\t\t\t\t\thc4.nextToUpdate++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate static unsafe int LZ4HC_CommonLength_64(byte* p1, byte* p2, byte* src_LASTLITERALS)\n\t\t{\n\t\t\tfixed (int* debruijn64 = DEBRUIJN_TABLE_64)\n\t\t\t{\n\t\t\t\tvar p1t = p1;\n\n\t\t\t\twhile (p1t < src_LASTLITERALS - (STEPSIZE_64 - 1))\n\t\t\t\t{\n\t\t\t\t\tvar diff = (*(long*)(p2)) ^ (*(long*)(p1t));\n\t\t\t\t\tif (diff == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tp1t += STEPSIZE_64;\n\t\t\t\t\t\tp2 += STEPSIZE_64;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tp1t += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58];\n\t\t\t\t\treturn (int)(p1t - p1);\n\t\t\t\t}\n\t\t\t\tif ((p1t < (src_LASTLITERALS - 3)) && ((*(uint*)(p2)) == (*(uint*)(p1t))))\n\t\t\t\t{\n\t\t\t\t\tp1t += 4;\n\t\t\t\t\tp2 += 4;\n\t\t\t\t}\n\t\t\t\tif ((p1t < (src_LASTLITERALS - 1)) && ((*(ushort*)(p2)) == (*(ushort*)(p1t))))\n\t\t\t\t{\n\t\t\t\t\tp1t += 2;\n\t\t\t\t\tp2 += 2;\n\t\t\t\t}\n\t\t\t\tif ((p1t < src_LASTLITERALS) && (*p2 == *p1t)) p1t++;\n\t\t\t\treturn (int)(p1t - p1);\n\t\t\t}\n\t\t}\n\n\t\tprivate static unsafe int LZ4HC_InsertAndFindBestMatch_64(\n\t\t\tLZ4HC_Data_Structure hc4, byte* src_p, byte* src_LASTLITERALS, ref byte* matchpos)\n\t\t{\n\t\t\tfixed (ushort* chainTable = hc4.chainTable)\n\t\t\tfixed (int* hashTable = hc4.hashTable)\n\t\t\t{\n\t\t\t\tvar src_base = hc4.src_base;\n\t\t\t\tvar nbAttempts = MAX_NB_ATTEMPTS;\n\t\t\t\tint repl = 0, ml = 0;\n\t\t\t\tushort delta = 0;\n\n\t\t\t\t// HC4 match finder\n\t\t\t\tLZ4HC_Insert_64(hc4, src_p);\n\t\t\t\tvar src_ref = (hashTable[((((*(uint*)(src_p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base);\n\n\t\t\t\t// Detect repetitive sequences of length <= 4\n\t\t\t\tif (src_ref >= src_p - 4) // potential repetition\n\t\t\t\t{\n\t\t\t\t\tif ((*(uint*)(src_ref)) == (*(uint*)(src_p))) // confirmed\n\t\t\t\t\t{\n\t\t\t\t\t\tdelta = (ushort)(src_p - src_ref);\n\t\t\t\t\t\trepl = ml = LZ4HC_CommonLength_64(src_p + MINMATCH, src_ref + MINMATCH, src_LASTLITERALS) + MINMATCH;\n\t\t\t\t\t\tmatchpos = src_ref;\n\t\t\t\t\t}\n\t\t\t\t\tsrc_ref = ((src_ref) - chainTable[((int)src_ref) & MAXD_MASK]);\n\t\t\t\t}\n\n\t\t\t\twhile ((src_ref >= src_p - MAX_DISTANCE) && (nbAttempts != 0))\n\t\t\t\t{\n\t\t\t\t\tnbAttempts--;\n\t\t\t\t\tif (*(src_ref + ml) == *(src_p + ml))\n\t\t\t\t\t\tif ((*(uint*)(src_ref)) == (*(uint*)(src_p)))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar mlt = LZ4HC_CommonLength_64(src_p + MINMATCH, src_ref + MINMATCH, src_LASTLITERALS) + MINMATCH;\n\t\t\t\t\t\t\tif (mlt > ml)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tml = mlt;\n\t\t\t\t\t\t\t\tmatchpos = src_ref;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tsrc_ref = ((src_ref) - chainTable[((int)src_ref) & MAXD_MASK]);\n\t\t\t\t}\n\n\t\t\t\t// Complete table\n\t\t\t\tif (repl != 0)\n\t\t\t\t{\n\t\t\t\t\tvar ptr = src_p;\n\n\t\t\t\t\tvar end = src_p + repl - (MINMATCH - 1);\n\t\t\t\t\twhile (ptr < end - delta)\n\t\t\t\t\t{\n\t\t\t\t\t\tchainTable[((int)ptr) & MAXD_MASK] = delta; // Pre-Load\n\t\t\t\t\t\tptr++;\n\t\t\t\t\t}\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\tchainTable[((int)ptr) & MAXD_MASK] = delta;\n\t\t\t\t\t\thashTable[((((*(uint*)(ptr))) * 2654435761u) >> HASHHC_ADJUST)] = (int)(ptr - src_base); // Head of chain\n\t\t\t\t\t\tptr++;\n\t\t\t\t\t} while (ptr < end);\n\t\t\t\t\thc4.nextToUpdate = end;\n\t\t\t\t}\n\n\t\t\t\treturn ml;\n\t\t\t}\n\t\t}\n\n\t\tprivate static unsafe int LZ4HC_InsertAndGetWiderMatch_64(\n\t\t\tLZ4HC_Data_Structure hc4, byte* src_p, byte* startLimit, byte* src_LASTLITERALS, int longest,\n\t\t\tref byte* matchpos, ref byte* startpos)\n\t\t{\n\t\t\tfixed (ushort* chainTable = hc4.chainTable)\n\t\t\tfixed (int* hashTable = hc4.hashTable)\n\t\t\tfixed (int* debruijn64 = DEBRUIJN_TABLE_64)\n\t\t\t{\n\t\t\t\tvar src_base = hc4.src_base;\n\t\t\t\tvar nbAttempts = MAX_NB_ATTEMPTS;\n\t\t\t\tvar delta = (int)(src_p - startLimit);\n\n\t\t\t\t// First Match\n\t\t\t\tLZ4HC_Insert_64(hc4, src_p);\n\t\t\t\tvar src_ref = (hashTable[((((*(uint*)(src_p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base);\n\n\t\t\t\twhile ((src_ref >= src_p - MAX_DISTANCE) && (nbAttempts != 0))\n\t\t\t\t{\n\t\t\t\t\tnbAttempts--;\n\t\t\t\t\tif (*(startLimit + longest) == *(src_ref - delta + longest))\n\t\t\t\t\t{\n\t\t\t\t\t\tif ((*(uint*)(src_ref)) == (*(uint*)(src_p)))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar reft = src_ref + MINMATCH;\n\t\t\t\t\t\t\tvar ipt = src_p + MINMATCH;\n\t\t\t\t\t\t\tvar startt = src_p;\n\n\t\t\t\t\t\t\twhile (ipt < src_LASTLITERALS - (STEPSIZE_64 - 1))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar diff = (*(long*)(reft)) ^ (*(long*)(ipt));\n\t\t\t\t\t\t\t\tif (diff == 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tipt += STEPSIZE_64;\n\t\t\t\t\t\t\t\t\treft += STEPSIZE_64;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tipt += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58];\n\t\t\t\t\t\t\t\tgoto _endCount;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((ipt < (src_LASTLITERALS - 3)) && ((*(uint*)(reft)) == (*(uint*)(ipt))))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tipt += 4;\n\t\t\t\t\t\t\t\treft += 4;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((ipt < (src_LASTLITERALS - 1)) && ((*(ushort*)(reft)) == (*(ushort*)(ipt))))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tipt += 2;\n\t\t\t\t\t\t\t\treft += 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((ipt < src_LASTLITERALS) && (*reft == *ipt)) ipt++;\n\n\t\t\t\t\t\t_endCount:\n\t\t\t\t\t\t\treft = src_ref;\n\n\t\t\t\t\t\t\twhile ((startt > startLimit) && (reft > hc4.src_base) && (startt[-1] == reft[-1]))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstartt--;\n\t\t\t\t\t\t\t\treft--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ((ipt - startt) > longest)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlongest = (int)(ipt - startt);\n\t\t\t\t\t\t\t\tmatchpos = reft;\n\t\t\t\t\t\t\t\tstartpos = startt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tsrc_ref = ((src_ref) - chainTable[((int)src_ref) & MAXD_MASK]);\n\t\t\t\t}\n\n\t\t\t\treturn longest;\n\t\t\t}\n\t\t}\n\n\t\tprivate static unsafe int LZ4_encodeSequence_64(\n\t\t\tref byte* src_p, ref byte* dst_p, ref byte* src_anchor, int matchLength, byte* src_ref, byte* dst_end)\n\t\t{\n\t\t\tint len;\n\t\t\tvar dst_token = (dst_p)++;\n\n\t\t\t// Encode Literal length\n\t\t\tvar length = (int)(src_p - src_anchor);\n\t\t\tif ((dst_p + length + (2 + 1 + LASTLITERALS) + (length >> 8)) > dst_end) return 1; // Check output limit\n\t\t\tif (length >= RUN_MASK)\n\t\t\t{\n\t\t\t\t*dst_token = (RUN_MASK << ML_BITS);\n\t\t\t\tlen = length - RUN_MASK;\n\t\t\t\tfor (; len > 254; len -= 255) *(dst_p)++ = 255;\n\t\t\t\t*(dst_p)++ = (byte)len;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*dst_token = (byte)(length << ML_BITS);\n\t\t\t}\n\n\t\t\t// Copy Literals\n\t\t\tvar _p = dst_p + (length);\n\t\t\tdo\n\t\t\t{\n\t\t\t\t*(ulong*)dst_p = *(ulong*)src_anchor;\n\t\t\t\tdst_p += 8;\n\t\t\t\tsrc_anchor += 8;\n\t\t\t} while (dst_p < _p);\n\t\t\tdst_p = _p;\n\n\t\t\t// Encode Offset\n\t\t\t*(ushort*)dst_p = (ushort)(src_p - src_ref);\n\t\t\tdst_p += 2;\n\n\t\t\t// Encode MatchLength\n\t\t\tlen = (matchLength - MINMATCH);\n\t\t\tif (dst_p + (1 + LASTLITERALS) + (length >> 8) > dst_end) return 1; // Check output limit\n\t\t\tif (len >= ML_MASK)\n\t\t\t{\n\t\t\t\t*dst_token += ML_MASK;\n\t\t\t\tlen -= ML_MASK;\n\t\t\t\tfor (; len > 509; len -= 510)\n\t\t\t\t{\n\t\t\t\t\t*(dst_p)++ = 255;\n\t\t\t\t\t*(dst_p)++ = 255;\n\t\t\t\t}\n\t\t\t\tif (len > 254)\n\t\t\t\t{\n\t\t\t\t\tlen -= 255;\n\t\t\t\t\t*(dst_p)++ = 255;\n\t\t\t\t}\n\t\t\t\t*(dst_p)++ = (byte)len;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*dst_token += (byte)len;\n\t\t\t}\n\n\t\t\t// Prepare next loop\n\t\t\tsrc_p += matchLength;\n\t\t\tsrc_anchor = src_p;\n\n\t\t\treturn 0;\n\t\t}\n\n\t\tprivate static unsafe int LZ4_compressHCCtx_64(\n\t\t\tLZ4HC_Data_Structure ctx,\n\t\t\tbyte* src,\n\t\t\tbyte* dst,\n\t\t\tint src_len,\n\t\t\tint dst_maxlen)\n\t\t{\n\t\t\tvar src_p = src;\n\t\t\tvar src_anchor = src_p;\n\t\t\tvar src_end = src_p + src_len;\n\t\t\tvar src_mflimit = src_end - MFLIMIT;\n\t\t\tvar src_LASTLITERALS = (src_end - LASTLITERALS);\n\n\t\t\tvar dst_p = dst;\n\t\t\tvar dst_end = dst_p + dst_maxlen;\n\n\t\t\tbyte* src_ref = null;\n\t\t\tbyte* start2 = null;\n\t\t\tbyte* ref2 = null;\n\t\t\tbyte* start3 = null;\n\t\t\tbyte* ref3 = null;\n\n\t\t\tsrc_p++;\n\n\t\t\t// Main Loop\n\t\t\twhile (src_p < src_mflimit)\n\t\t\t{\n\t\t\t\tvar ml = LZ4HC_InsertAndFindBestMatch_64(ctx, src_p, src_LASTLITERALS, ref src_ref);\n\t\t\t\tif (ml == 0)\n\t\t\t\t{\n\t\t\t\t\tsrc_p++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// saved, in case we would skip too much\n\t\t\t\tvar start0 = src_p;\n\t\t\t\tvar ref0 = src_ref;\n\t\t\t\tvar ml0 = ml;\n\n\t\t\t_Search2:\n\t\t\t\tvar ml2 = src_p + ml < src_mflimit\n\t\t\t\t\t? LZ4HC_InsertAndGetWiderMatch_64(ctx, src_p + ml - 2, src_p + 1, src_LASTLITERALS, ml, ref ref2, ref start2)\n\t\t\t\t\t: ml;\n\n\t\t\t\tif (ml2 == ml) // No better match\n\t\t\t\t{\n\t\t\t\t\tif (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml, src_ref, dst_end) != 0) return 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (start0 < src_p && start2 < src_p + ml0)\n\t\t\t\t{\n\t\t\t\t\tsrc_p = start0;\n\t\t\t\t\tsrc_ref = ref0;\n\t\t\t\t\tml = ml0;\n\t\t\t\t}\n\n\t\t\t\t// Here, start0==ip\n\t\t\t\tif ((start2 - src_p) < 3) // First Match too small : removed\n\t\t\t\t{\n\t\t\t\t\tml = ml2;\n\t\t\t\t\tsrc_p = start2;\n\t\t\t\t\tsrc_ref = ref2;\n\t\t\t\t\tgoto _Search2;\n\t\t\t\t}\n\n\t\t\t_Search3:\n\t\t\t\t// Currently we have :\n\t\t\t\t// ml2 > ml1, and\n\t\t\t\t// ip1+3 <= ip2 (usually < ip1+ml1)\n\t\t\t\tif ((start2 - src_p) < OPTIMAL_ML)\n\t\t\t\t{\n\t\t\t\t\tvar new_ml = ml;\n\t\t\t\t\tif (new_ml > OPTIMAL_ML) new_ml = OPTIMAL_ML;\n\t\t\t\t\tif (src_p + new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - src_p) + ml2 - MINMATCH;\n\t\t\t\t\tvar correction = new_ml - (int)(start2 - src_p);\n\t\t\t\t\tif (correction > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tstart2 += correction;\n\t\t\t\t\t\tref2 += correction;\n\t\t\t\t\t\tml2 -= correction;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Now, we have start2 = ip+new_ml, with new_ml=min(ml, OPTIMAL_ML=18)\n\n\t\t\t\tvar ml3 = start2 + ml2 < src_mflimit\n\t\t\t\t\t? LZ4HC_InsertAndGetWiderMatch_64(ctx, start2 + ml2 - 3, start2, src_LASTLITERALS, ml2, ref ref3, ref start3)\n\t\t\t\t\t: ml2;\n\n\t\t\t\tif (ml3 == ml2) // No better match : 2 sequences to encode\n\t\t\t\t{\n\t\t\t\t\t// ip & ref are known; Now for ml\n\t\t\t\t\tif (start2 < src_p + ml) ml = (int)(start2 - src_p);\n\n\t\t\t\t\t// Now, encode 2 sequences\n\t\t\t\t\tif (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml, src_ref, dst_end) != 0) return 0;\n\t\t\t\t\tsrc_p = start2;\n\t\t\t\t\tif (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml2, ref2, dst_end) != 0) return 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (start3 < src_p + ml + 3) // Not enough space for match 2 : remove it\n\t\t\t\t{\n\t\t\t\t\tif (start3 >= src_p + ml) // can write Seq1 immediately ==> Seq2 is removed, so Seq3 becomes Seq1\n\t\t\t\t\t{\n\t\t\t\t\t\tif (start2 < src_p + ml)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar correction = (int)(src_p + ml - start2);\n\t\t\t\t\t\t\tstart2 += correction;\n\t\t\t\t\t\t\tref2 += correction;\n\t\t\t\t\t\t\tml2 -= correction;\n\t\t\t\t\t\t\tif (ml2 < MINMATCH)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstart2 = start3;\n\t\t\t\t\t\t\t\tref2 = ref3;\n\t\t\t\t\t\t\t\tml2 = ml3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml, src_ref, dst_end) != 0) return 0;\n\t\t\t\t\t\tsrc_p = start3;\n\t\t\t\t\t\tsrc_ref = ref3;\n\t\t\t\t\t\tml = ml3;\n\n\t\t\t\t\t\tstart0 = start2;\n\t\t\t\t\t\tref0 = ref2;\n\t\t\t\t\t\tml0 = ml2;\n\t\t\t\t\t\tgoto _Search2;\n\t\t\t\t\t}\n\n\t\t\t\t\tstart2 = start3;\n\t\t\t\t\tref2 = ref3;\n\t\t\t\t\tml2 = ml3;\n\t\t\t\t\tgoto _Search3;\n\t\t\t\t}\n\n\t\t\t\t// OK, now we have 3 ascending matches; let's write at least the first one\n\t\t\t\t// ip & ref are known; Now for ml\n\t\t\t\tif (start2 < src_p + ml)\n\t\t\t\t{\n\t\t\t\t\tif (start2 - src_p < ML_MASK)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (ml > OPTIMAL_ML) ml = OPTIMAL_ML;\n\t\t\t\t\t\tif (src_p + ml > start2 + ml2 - MINMATCH) ml = (int)(start2 - src_p) + ml2 - MINMATCH;\n\t\t\t\t\t\tvar correction = ml - (int)(start2 - src_p);\n\t\t\t\t\t\tif (correction > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstart2 += correction;\n\t\t\t\t\t\t\tref2 += correction;\n\t\t\t\t\t\t\tml2 -= correction;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tml = (int)(start2 - src_p);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml, src_ref, dst_end) != 0)\n\t\t\t\t\treturn 0;\n\n\t\t\t\tsrc_p = start2;\n\t\t\t\tsrc_ref = ref2;\n\t\t\t\tml = ml2;\n\n\t\t\t\tstart2 = start3;\n\t\t\t\tref2 = ref3;\n\t\t\t\tml2 = ml3;\n\n\t\t\t\tgoto _Search3;\n\t\t\t}\n\n\t\t\t// Encode Last Literals\n\t\t\tvar lastRun = (int)(src_end - src_anchor);\n\t\t\tif ((dst_p - dst) + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > (uint)dst_maxlen) return 0; // Check output limit\n\t\t\tif (lastRun >= RUN_MASK)\n\t\t\t{\n\t\t\t\t*dst_p++ = (RUN_MASK << ML_BITS);\n\t\t\t\tlastRun -= RUN_MASK;\n\t\t\t\tfor (; lastRun > 254; lastRun -= 255) *dst_p++ = 255;\n\t\t\t\t*dst_p++ = (byte)lastRun;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*dst_p++ = (byte)(lastRun << ML_BITS);\n\t\t\t}\n\t\t\tBlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor));\n\t\t\tdst_p += src_end - src_anchor;\n\n\t\t\t// End\n\t\t\treturn (int)((dst_p) - dst);\n\t\t}\n\t}\n}\n\n// ReSharper restore InconsistentNaming\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.cs",
    "content": "﻿#region license\n\n/*\nCopyright (c) 2013, Milosz Krajewski\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided\nthat the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions\n  and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions\n  and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\nIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#endregion\n\nusing System;\n\n/*\nNOTE:\n\tThis file is shared between LZ4n and LZ4s.\n\tIf you would like to modify this file please keep in mind that your changes will\n\taffect both projects.\n\tUse 'LZ4s' conditional define to differentiate\n*/\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4\n{\n\tinternal static partial class LZ4Codec\n\t{\n\t\t#region configuration\n\n\t\t/// <summary>\n\t\t/// Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)\n\t\t/// Increasing memory usage improves compression ratio\n\t\t/// Reduced memory usage can improve speed, due to cache effect\n\t\t/// Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache\n\t\t/// </summary>\n\t\tprivate const int MEMORY_USAGE = 14;\n\n\t\t/// <summary>\n\t\t/// Decreasing this value will make the algorithm skip faster data segments considered \"incompressible\"\n\t\t/// This may decrease compression ratio dramatically, but will be faster on incompressible data\n\t\t/// Increasing this value will make the algorithm search more before declaring a segment \"incompressible\"\n\t\t/// This could improve compression a bit, but will be slower on incompressible data\n\t\t/// The default value (6) is recommended\n\t\t/// </summary>\n\t\tprivate const int NOTCOMPRESSIBLE_DETECTIONLEVEL = 6;\n\n#if LZ4s\n\n\t\t/// <summary>Buffer length when Buffer.BlockCopy becomes faster than straight loop.\n\t\t/// Please note that safe implementation REQUIRES it to be greater (not even equal) than 8.</summary>\n\t\tprivate const int BLOCK_COPY_LIMIT = 16;\n#endif\n\n\t\t#endregion\n\n\t\t#region consts\n\n\t\tprivate const int MINMATCH = 4;\n#pragma warning disable 162\n\t\tprivate const int SKIPSTRENGTH = NOTCOMPRESSIBLE_DETECTIONLEVEL > 2 ? NOTCOMPRESSIBLE_DETECTIONLEVEL : 2;\n#pragma warning restore 162\n\t\tprivate const int COPYLENGTH = 8;\n\t\tprivate const int LASTLITERALS = 5;\n\t\tprivate const int MFLIMIT = COPYLENGTH + MINMATCH;\n\t\tprivate const int MINLENGTH = MFLIMIT + 1;\n\t\tprivate const int MAXD_LOG = 16;\n\t\tprivate const int MAXD = 1 << MAXD_LOG;\n\t\tprivate const int MAXD_MASK = MAXD - 1;\n\t\tprivate const int MAX_DISTANCE = (1 << MAXD_LOG) - 1;\n\t\tprivate const int ML_BITS = 4;\n\t\tprivate const int ML_MASK = (1 << ML_BITS) - 1;\n\t\tprivate const int RUN_BITS = 8 - ML_BITS;\n\t\tprivate const int RUN_MASK = (1 << RUN_BITS) - 1;\n\t\tprivate const int STEPSIZE_64 = 8;\n\t\tprivate const int STEPSIZE_32 = 4;\n\n\t\tprivate const int LZ4_64KLIMIT = (1 << 16) + (MFLIMIT - 1);\n\n\t\tprivate const int HASH_LOG = MEMORY_USAGE - 2;\n\t\tprivate const int HASH_TABLESIZE = 1 << HASH_LOG;\n\t\tprivate const int HASH_ADJUST = (MINMATCH * 8) - HASH_LOG;\n\n\t\tprivate const int HASH64K_LOG = HASH_LOG + 1;\n\t\tprivate const int HASH64K_TABLESIZE = 1 << HASH64K_LOG;\n\t\tprivate const int HASH64K_ADJUST = (MINMATCH * 8) - HASH64K_LOG;\n\n\t\tprivate const int HASHHC_LOG = MAXD_LOG - 1;\n\t\tprivate const int HASHHC_TABLESIZE = 1 << HASHHC_LOG;\n\t\tprivate const int HASHHC_ADJUST = (MINMATCH * 8) - HASHHC_LOG;\n\t\t//private const int HASHHC_MASK = HASHHC_TABLESIZE - 1;\n\n\t\tprivate static readonly int[] DECODER_TABLE_32 = new[] { 0, 3, 2, 3, 0, 0, 0, 0 };\n\t\tprivate static readonly int[] DECODER_TABLE_64 = new[] { 0, 0, 0, -1, 0, 1, 2, 3 };\n\n\t\tprivate static readonly int[] DEBRUIJN_TABLE_32 = new[] {\n\t\t\t0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1,\n\t\t\t3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1\n\t\t};\n\n\t\tprivate static readonly int[] DEBRUIJN_TABLE_64 = new[] {\n\t\t\t0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7,\n\t\t\t0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7,\n\t\t\t7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6,\n\t\t\t7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7\n\t\t};\n\n\t\tprivate const int MAX_NB_ATTEMPTS = 256;\n\t\tprivate const int OPTIMAL_ML = (ML_MASK - 1) + MINMATCH;\n\n\t\t#endregion\n\n\t\t#region public interface (common)\n\n\t\t/// <summary>Gets maximum the length of the output.</summary>\n\t\t/// <param name=\"inputLength\">Length of the input.</param>\n\t\t/// <returns>Maximum number of bytes needed for compressed buffer.</returns>\n\t\tpublic static int MaximumOutputLength(int inputLength)\n\t\t{\n\t\t\treturn inputLength + (inputLength / 255) + 16;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region internal interface (common)\n\n\t\tinternal static void CheckArguments(\n\t\t\tbyte[] input, int inputOffset, ref int inputLength,\n\t\t\tbyte[] output, int outputOffset, ref int outputLength)\n\t\t{\n\t\t\tif (inputLength < 0) inputLength = input.Length - inputOffset;\n\t\t\tif (inputLength == 0)\n\t\t\t{\n\t\t\t\toutputLength = 0;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (input == null) throw new ArgumentNullException(\"input\");\n\t\t\tif (inputOffset < 0 || inputOffset + inputLength > input.Length)\n\t\t\t\tthrow new ArgumentException(\"inputOffset and inputLength are invalid for given input\");\n\n\t\t\tif (outputLength < 0) outputLength = output.Length - outputOffset;\n\t\t\tif (output == null) throw new ArgumentNullException(\"output\");\n\t\t\tif (outputOffset < 0 || outputOffset + outputLength > output.Length)\n\t\t\t\tthrow new ArgumentException(\"outputOffset and outputLength are invalid for given output\");\n\t\t}\n\n\t\t#endregion\n\t}\n}\n\n// ReSharper restore InconsistentNaming"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/PathHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities\n{\n    internal static class PathHelper\n    {\n        /// <summary>\n        /// The/universal/standard/directory/seperator.\n        /// </summary>\n        public const char DirectorySeparator = '/';\n\n        /// <summary>\n        /// Returns a path string normalized to the/universal/standard.\n        /// </summary>\n        public static string Normalize(string path)\n        {\n            return path.Replace('\\\\', '/');\n        }\n\n        /// <summary>\n        /// Returns a directory path string normalized to the/universal/standard\n        /// with a trailing seperator.\n        /// </summary>\n        public static string NormalizeDirectory(string path)\n        {\n            return path.Replace('\\\\', '/').TrimEnd('/') + '/';\n        }\n\n        /// <summary>\n        /// Returns a path string normalized to the\\Windows\\standard.\n        /// </summary>\n        public static string NormalizeWindows(string path)\n        {\n            return path.Replace('/', '\\\\');\n        }\n\n        /// <summary>\n        /// Returns a path relative to the base path.\n        /// </summary>\n        /// <param name=\"basePath\">The path to make relative to.  Must end with directory seperator.</param>\n        /// <param name=\"path\">The path to be made relative to the basePath.</param>\n        /// <returns>The relative path or the original string if it is not absolute or cannot be made relative.</returns>\n        public static string GetRelativePath(string basePath, string path)\n        {\n            Uri uri;\n            if (!Uri.TryCreate(path, UriKind.Absolute, out uri))\n                return path;\n\n            uri = new Uri(basePath).MakeRelativeUri(uri);\n            var str = Uri.UnescapeDataString(uri.ToString());\n\n            return Normalize(str);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Utilities/ReflectionHelpers.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities\n{\n    internal static partial class ReflectionHelpers\n    {\n        public static bool IsValueType(Type targetType)\n        {\n#if WINRT\n            return targetType.GetTypeInfo().IsValueType;\n#else\n            return targetType.IsValueType;\n#endif\n        }\n\n        public static Type GetBaseType(Type targetType)\n        {\n#if WINRT\n            return targetType.GetTypeInfo().BaseType;\n#else\n            return targetType.BaseType;\n#endif\n        }\n\n        /// <summary>\n        /// Returns the Assembly of a Type\n        /// </summary>\n        public static Assembly GetAssembly(Type targetType)\n        {\n#if WINRT\n            return targetType.GetTypeInfo().Assembly;\n#else\n            return targetType.Assembly;\n#endif\n        }\n\n        /// <summary>\n        /// Returns true if the given type represents a non-object type that is not abstract.\n        /// </summary>\n        public static bool IsConcreteClass(Type t)\n        {\n            if (t == typeof(object))\n                return false;\n#if WINRT\n            var ti = t.GetTypeInfo();\n            return (ti.IsClass && !ti.IsAbstract);\n#else            \n            return (t.IsClass && !t.IsAbstract);\n#endif\n        }\n\n        public static MethodInfo GetMethodInfo(Type type, string methodName)\n        {\n#if WINRT\n            return type.GetTypeInfo().GetDeclaredMethod(methodName);\n#else\n            return type.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);\n#endif\n        }\n\n        public static MethodInfo GetPropertyGetMethod(PropertyInfo property)\n        {\n#if WINRT\n            return property.GetMethod;\n#else\n            return property.GetGetMethod();\n#endif\n        }\n\n        public static MethodInfo GetPropertySetMethod(PropertyInfo property)\n        {\n#if WINRT\n            return property.SetMethod;\n#else\n            return property.GetSetMethod();\n#endif\n        }\n\n        public static T GetCustomAttribute<T>(MemberInfo member) where T : Attribute\n        {\n#if WINRT\n            return member.GetCustomAttribute(typeof(T)) as T;\n#else\n            return Attribute.GetCustomAttribute(member, typeof(T)) as T;\n#endif\n        }\n\n        /// <summary>\n        /// Returns true if the get method of the given property exist and are public.\n        /// Note that we allow a getter-only property to be serialized (and deserialized),\n        /// *if* CanDeserializeIntoExistingObject is true for the property type.\n        /// </summary>\n        public static bool PropertyIsPublic(PropertyInfo property)\n        {\n            var getMethod = GetPropertyGetMethod(property);\n\n            return (getMethod != null && getMethod.IsPublic);\n        }\n\n        /// <summary>\n        /// Returns true if the given type can be assigned the given value\n        /// </summary>\n        public static bool IsAssignableFrom(Type type, object value)\n        {\n            return IsAssignableFromType(type, value.GetType());\n        }\n\n        /// <summary>\n        /// Returns true if the given type can be assigned a value with the given object type\n        /// </summary>\n        public static bool IsAssignableFromType(Type type, Type objectType)\n        {\n#if WINRT\n            return (type.GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo()));\n#else\n            return (type.IsAssignableFrom(objectType));\n#endif\n        }\n\n        internal static int SizeOf<T>()\n        {\n            return ManagedSizeOf<T>.Value;\n        }\n\n        /// <summary>\n        /// Generics handler for Marshal.SizeOf\n        /// </summary>\n        private static class ManagedSizeOf<T>\n        {\n            static public int Value { get; private set; }\n\n            static ManagedSizeOf()\n            {\n#if NET40 || NET45 || NET40_OR_GREATER\n                Value = Marshal.SizeOf(typeof(T));\n#else\n                Value = Marshal.SizeOf<T>();\n#endif\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/XmlImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Xml;\nusing Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Implements an importer for reading intermediate XML files. This is a wrapper around IntermediateSerializer.\n    /// </summary>\n    [ContentImporter(\".xml\", DisplayName = \"Xml Importer - KNI\", DefaultProcessor = \"PassThroughProcessor\")]\n    public class XmlImporter : ContentImporter<object>\n    {\n        /// <summary>\n        /// Called by the XNA Framework when importing an intermediate file to be used as a game \n        /// asset. This is the method called by the XNA Framework when an asset is to be imported \n        /// into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>The imported game asset.</returns>\n        public override object Import(string filename, ContentImporterContext context)\n        {\n            using (var reader = XmlReader.Create(filename))\n                return IntermediateSerializer.Deserialize<object>(reader, filename);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline/Xna.Framework.Content.Pipeline.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Content.Pipeline\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <AssemblyName>Xna.Framework.Content.Pipeline</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Content.Pipeline</RootNamespace>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <DefineConstants></DefineConstants>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI Framework Framework Content Pipeline.</Description>\n    <PackageTags>KNI;</PackageTags>\n    <PackageId>nkast.Xna.Framework.Content.Pipeline</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Processors\\PassThroughProcessor.cs\" />\n    <Compile Include=\"XmlImporter.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Serialization\\Compiler\\ArrayWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ContentTypeWriterBase.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ContentTypeWriterBaseGeneric.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\DictionaryWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ContentCompiler.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ContentCompression.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ContentTypeWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ContentTypeWriterAttribute.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ContentWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\EnumWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ExternalReferenceWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\MultiArrayWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\NullableWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ReflectiveWriter.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Serialization\\Intermediate\\ArraySerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ContentTypeSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ContentTypeSerializerAttribute.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ContentTypeSerializerT.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\DictionarySerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ElementSerializerT.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\EnumSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ExternalReferenceSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\GenericCollectionHelper.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\IntermediateReader.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\IntermediateSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\IntermediateWriter.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ListSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\NamedValueDictionarySerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\NamespaceAliasHelper.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\NonGenericIListSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\NullableSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\PackedElementsHelper.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ReflectiveSerializer.cs\" />\n  </ItemGroup>\n  \n  \n  <ItemGroup>\n    <Compile Include=\"Serialization\\Compiler\\BooleanWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ByteWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\CharWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\DateTimeWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\DecimalWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\DoubleWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\Int16Writer.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\Int32Writer.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\Int64Writer.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ListWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\SByteWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\SingleWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\StringWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\TimeSpanWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\UInt16Writer.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\UInt32Writer.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\UInt64Writer.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Serialization\\Intermediate\\BoolSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ByteSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\CharSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\DoubleSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\FloatSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\IntSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\LongSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\SByteSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ShortSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\StringSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\TimeSpanSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\UIntSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\ULongSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\UShortSerializer.cs\" />\n  </ItemGroup>\n    \n  \n  <ItemGroup>\n    <Compile Include=\"Serialization\\Compiler\\BoundingBoxWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\BoundingFrustumWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\BoundingSphereWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ComplexWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\CurveWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\MatrixWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\PlaneWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\PointWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\QuaternionWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\RayWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\RectangleWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\Vector2Writer.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\Vector3Writer.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\Vector4Writer.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Serialization\\Intermediate\\ColorSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\CurveKeyCollectionSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\MatrixSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\PlaneSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\PointSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\QuaternionSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\RectangleSerializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\Vector2Serializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\Vector3Serializer.cs\" />\n    <Compile Include=\"Serialization\\Intermediate\\Vector4Serializer.cs\" />\n  </ItemGroup>\n  \n  \n  <ItemGroup>\n    <Compile Include=\"ChildCollection.cs\" />\n    <Compile Include=\"ContentBuildLogger.cs\" />\n    <Compile Include=\"ContentIdentity.cs\" />\n    <Compile Include=\"ContentImporter.cs\" />\n    <Compile Include=\"ContentImporterAttribute.cs\" />\n    <Compile Include=\"ContentImporterContext.cs\" />\n    <Compile Include=\"ContentItem.cs\" />\n    <Compile Include=\"ContentProcessor.cs\" />\n    <Compile Include=\"ContentProcessorAttribute.cs\" />\n    <Compile Include=\"ContentProcessorContext.cs\" />\n    <Compile Include=\"ExternalReference.cs\" />\n    <Compile Include=\"IContentImporter.cs\" />\n    <Compile Include=\"IContentProcessor.cs\" />\n    <Compile Include=\"InvalidContentException.cs\" />\n    <Compile Include=\"NamedValueDictionary.cs\" />\n    <Compile Include=\"OpaqueDataDictionary.cs\" />\n    <Compile Include=\"PipelineComponentScanner.cs\" />\n    <Compile Include=\"PipelineException.cs\" />\n    <Compile Include=\"ProcessorParameter.cs\" />\n    <Compile Include=\"ProcessorParameterCollection.cs\" />\n    <Compile Include=\"TargetPlatform.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Utilities\\LZ4\\LZ4Codec.cs\" />\n    <Compile Include=\"Utilities\\LZ4\\LZ4Codec.Unsafe.cs\" />\n    <Compile Include=\"Utilities\\LZ4\\LZ4Codec.Unsafe32.Dirty.cs\" />\n    <Compile Include=\"Utilities\\LZ4\\LZ4Codec.Unsafe32HC.Dirty.cs\" />\n    <Compile Include=\"Utilities\\LZ4\\LZ4Codec.Unsafe64.Dirty.cs\" />\n    <Compile Include=\"Utilities\\LZ4\\LZ4Codec.Unsafe64HC.Dirty.cs\" />\n    <Compile Include=\"Utilities\\ContentExtensions.cs\" />\n    <Compile Include=\"Utilities\\PathHelper.cs\" />\n    <Compile Include=\"Utilities\\ReflectionHelpers.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Audio/AudioContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing System.IO;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Audio\n{\n    /// <summary>\n    /// Encapsulates and provides operations, such as format conversions, on the \n    /// source audio. This type is produced by the audio importers and used by audio\n    /// processors to produce compiled audio assets.\n    /// </summary>\n    /// <remarks>Note that AudioContent can load and process audio files that are not supported by the importers.</remarks>\n    public class AudioContent : ContentItem, IDisposable\n    {\n        private bool _isDisposed;\n        private readonly string _fileName;\n        private readonly AudioFileType _fileType;\n        private byte[] _data; \n        private TimeSpan _duration;\n        private AudioFormat _format;\n        private int _loopStart;\n        private int _loopLength;\n\n        private ReadOnlyCollection<byte> _readOnlyData;\n\n        /// <summary>\n        /// The name of the original source audio file.\n        /// </summary>\n        [ContentSerializer(AllowNull = false)]\n        public string FileName { get { return _fileName; } }\n\n        /// <summary>\n        /// The type of the original source audio file.\n        /// </summary>\n        public AudioFileType FileType { get { return _fileType; } }\n\n        /// <summary>\n        /// The current raw audio data without header information.\n        /// </summary>\n        /// <remarks>\n        /// This changes from the source data to the output data after conversion.\n        /// For MP3 and WMA files this throws an exception to match XNA behavior.\n        /// </remarks>\n        public ReadOnlyCollection<byte> Data \n        {\n            get\n            {\n                if (_isDisposed || _data == null)\n                    throw new InvalidContentException(\"Could not read the audio data from file \\\"\" + Path.GetFileName(_fileName) + \"\\\".\");\n\n                if (_readOnlyData == null)\n                    _readOnlyData = new ReadOnlyCollection<byte>(_data);\n\n                return _readOnlyData;\n            }\n        }\n\n        internal byte[] RawData\n        {\n            get { return _data; }\n        }\n\n        /// <summary>\n        /// The duration of the audio data.\n        /// </summary>\n        public TimeSpan Duration { get { return _duration; } }\n\n        /// <summary>\n        /// The current format of the audio data.\n        /// </summary>\n        /// <remarks>This changes from the source format to the output format after conversion.</remarks>\n        public AudioFormat Format { get { return _format; } }\n\n        /// <summary>\n        /// The current loop length in samples.\n        /// </summary>\n        /// <remarks>This changes from the source loop length to the output loop length after conversion.</remarks>\n        public int LoopLength { get { return _loopLength; } }\n\n        /// <summary>\n        /// The current loop start location in samples.\n        /// </summary>\n        /// <remarks>This changes from the source loop start to the output loop start after conversion.</remarks>\n        public int LoopStart { get { return _loopStart; } }\n\n        /// <summary>\n        /// Initializes a new instance of AudioContent.\n        /// </summary>\n        /// <param name=\"audioFileName\">Name of the audio source file to be processed.</param>\n        /// <param name=\"audioFileType\">Type of the processed audio: WAV, MP3 or WMA.</param>\n        /// <remarks>Constructs the object from the specified source file, in the format specified.</remarks>\n        public AudioContent(string audioFileName, AudioFileType audioFileType)\n        {\n            _fileName = audioFileName;\n\n            try\n            {\n                // Get the full path to the file.\n                audioFileName = Path.GetFullPath(audioFileName);\n\n                // Use probe to get the details of the file.\n                AudioContent.ProbeFormat(audioFileName, out _fileType, out _format, out _duration, out _loopStart, out _loopLength);\n\n                // Looks like XNA only cares about type mismatch when\n                // the type is WAV... else it is ok.\n                if (    (audioFileType == AudioFileType.Wav || _fileType == AudioFileType.Wav) &&\n                        audioFileType != _fileType)\n                    throw new ArgumentException(\"Incorrect file type!\", \"audioFileType\");\n\n                // Only provide the data for WAV files.\n                if (audioFileType == AudioFileType.Wav)\n                {\n                    byte[] rawData;\n\n                    // Must be opened in read mode otherwise it fails to open\n                    // read-only files (found in some source control systems)\n                    using (var fs = new FileStream(audioFileName, FileMode.Open, FileAccess.Read))\n                    {\n                        rawData = new byte[fs.Length];\n                        fs.Read(rawData, 0, rawData.Length);\n                    }\n\n                    AudioFormat riffAudioFormat;\n                    byte[] stripped = AudioContent.StripRiffWaveHeader(rawData, out riffAudioFormat);\n\n                    if (riffAudioFormat != null)\n                    {\n                        if ((_format.Format != 2 && _format.Format != 17) && _format.BlockAlign != riffAudioFormat.BlockAlign)\n                            throw new InvalidOperationException(\"Calculated block align does not match RIFF \" + _format.BlockAlign + \" : \" + riffAudioFormat.BlockAlign);\n                        if (_format.ChannelCount != riffAudioFormat.ChannelCount)\n                            throw new InvalidOperationException(\"Probed channel count does not match RIFF: \" + _format.ChannelCount + \", \" + riffAudioFormat.ChannelCount);\n                        if (_format.Format != riffAudioFormat.Format)\n                            throw new InvalidOperationException(\"Probed audio format does not match RIFF: \" + _format.Format + \", \" + riffAudioFormat.Format);\n                        if (_format.SampleRate != riffAudioFormat.SampleRate)\n                            throw new InvalidOperationException(\"Probed sample rate does not match RIFF: \" + _format.SampleRate + \", \" + riffAudioFormat.SampleRate);\n                    }\n\n                    _data = stripped;\n                }\n            }\n            catch (Exception ex)\n            {\n                var message = string.Format(\"Failed to open file {0}. Ensure the file is a valid audio file and is not DRM protected.\", Path.GetFileNameWithoutExtension(audioFileName));\n                throw new InvalidContentException(message, ex);\n            }\n        }\n\n        /// <summary>\n        /// Transcodes the source audio to the target format and quality.\n        /// </summary>\n        /// <param name=\"formatType\">Format to convert this audio to.</param>\n        /// <param name=\"quality\">Quality of the processed output audio. For streaming formats, it can be one of the following: Low (96 kbps), Medium (128 kbps), Best (192 kbps).  For WAV formats, it can be one of the following: Low (11kHz ADPCM), Medium (22kHz ADPCM), Best (44kHz PCM)</param>\n        /// <param name=\"saveToFile\">\n        /// The name of the file that the converted audio should be saved into.  This is used for SongContent, where\n        /// the audio is stored external to the XNB file.  If this is null, then the converted audio is stored in\n        /// the Data property.\n        /// </param>\n        public void ConvertFormat(ConversionFormat formatType, ConversionQuality quality, string saveToFile)\n        {\n            string temporaryOutput = Path.GetTempFileName();\n            try\n            {\n                string ffmpegCodecName, ffmpegMuxerName;\n                //int format;\n                switch (formatType)\n                {\n                    case ConversionFormat.Adpcm:\n                        // ADPCM Microsoft \n                        ffmpegCodecName = \"adpcm_ms\";\n                        ffmpegMuxerName = \"wav\";\n                        //format = 0x0002; /* WAVE_FORMAT_ADPCM */\n                        break;\n                    case ConversionFormat.Pcm:\n                        // XNA seems to preserve the bit size of the input\n                        // format when converting to PCM.\n                        if (this.Format.BitsPerSample == 8)\n                            ffmpegCodecName = \"pcm_u8\";\n                        else if (this.Format.BitsPerSample == 32 && this.Format.Format == 3)\n                            ffmpegCodecName = \"pcm_f32le\";\n                        else\n                            ffmpegCodecName = \"pcm_s16le\";\n                        ffmpegMuxerName = \"wav\";\n                        //format = 0x0001; /* WAVE_FORMAT_PCM */\n                        break;\n                    case ConversionFormat.WindowsMedia:\n                        // Windows Media Audio 2\n                        ffmpegCodecName = \"wmav2\";\n                        ffmpegMuxerName = \"asf\";\n                        //format = 0x0161; /* WAVE_FORMAT_WMAUDIO2 */\n                        break;\n                    case ConversionFormat.Xma:\n                        throw new NotSupportedException(\n                            \"XMA is not a supported encoding format. It is specific to the Xbox 360.\");\n                    case ConversionFormat.ImaAdpcm:\n                        // ADPCM IMA WAV\n                        ffmpegCodecName = \"adpcm_ima_wav\";\n                        ffmpegMuxerName = \"wav\";\n                        //format = 0x0011; /* WAVE_FORMAT_IMA_ADPCM */\n                        break;\n                    case ConversionFormat.Aac:\n                        // AAC (Advanced Audio Coding)\n                        // Requires -strict experimental\n                        ffmpegCodecName = \"aac\";\n                        ffmpegMuxerName = \"ipod\";\n                        //format = 0x0000; /* WAVE_FORMAT_UNKNOWN */\n                        break;\n                    case ConversionFormat.Vorbis:\n                        // Vorbis\n                        ffmpegCodecName = \"libvorbis\";\n                        ffmpegMuxerName = \"ogg\";\n                        //format = 0x0000; /* WAVE_FORMAT_UNKNOWN */\n                        break;\n                    case ConversionFormat.Mp3:\n                        // Vorbis\n                        ffmpegCodecName = \"libmp3lame\";\n                        ffmpegMuxerName = \"mp3\";\n                        //format = 0x0000; /* WAVE_FORMAT_UNKNOWN */\n                        break;\n                    default:\n                        // Unknown format\n                        throw new NotSupportedException();\n                }\n\n                ConversionQuality finalQuality = quality;\n                string ffmpegStdout, ffmpegStderr;\n                int ffmpegExitCode;\n                do\n                {\n                    ffmpegExitCode = ExternalTool.Run(\n                        \"ffmpeg\",\n                        string.Format(\n                            \"-y -i \\\"{0}\\\" -vn -c:a {1} -b:a {2} -ar {3} -f:a {4} -strict experimental \\\"{5}\\\"\",\n                            this.FileName,\n                            ffmpegCodecName,\n                            AudioContent.QualityToBitRate(finalQuality),\n                            AudioContent.QualityToSampleRate(finalQuality, this.Format.SampleRate),\n                            ffmpegMuxerName,\n                            temporaryOutput),\n                        out ffmpegStdout,\n                        out ffmpegStderr);\n                    if (ffmpegExitCode != 0)\n                        finalQuality--;\n                }\n                while (finalQuality >= 0 && ffmpegExitCode != 0);\n\n                if (ffmpegExitCode != 0)\n                    throw new InvalidOperationException(\"ffmpeg exited with non-zero exit code: \\n\" + ffmpegStdout + \"\\n\" + ffmpegStderr);\n\n                byte[] rawData;\n                using (FileStream fs = new FileStream(temporaryOutput, FileMode.Open, FileAccess.Read))\n                {\n                    rawData = new byte[fs.Length];\n                    fs.Read(rawData, 0, rawData.Length);\n                }\n\n                if (saveToFile != null)\n                {\n                    using (FileStream fs = new FileStream(saveToFile, FileMode.Create, FileAccess.Write))\n                        fs.Write(rawData, 0, rawData.Length);\n                }\n\n                // Use probe to get the final format and information on the converted file.\n                AudioFileType audioFileType;\n                AudioFormat audioFormat;\n                TimeSpan duration;\n                int loopStart, loopLength;\n                AudioContent.ProbeFormat(temporaryOutput, out audioFileType, out audioFormat, out duration, out loopStart, out loopLength);\n\n                AudioFormat riffAudioFormat;\n                byte[] data = AudioContent.StripRiffWaveHeader(rawData, out riffAudioFormat);\n\n                // deal with adpcm\n                if (audioFormat.Format == 2 || audioFormat.Format == 17)\n                {\n                    // riff contains correct blockAlign\n                    audioFormat = riffAudioFormat;\n\n                    // fix loopLength -> has to be multiple of sample per block\n                    // see https://msdn.microsoft.com/de-de/library/windows/desktop/ee415711(v=vs.85).aspx\n                    int samplesPerBlock = AudioContent.SampleAlignment(audioFormat);\n                    loopLength = (int)(audioFormat.SampleRate * duration.TotalSeconds);\n                    int remainder = loopLength % samplesPerBlock;\n                    loopLength += samplesPerBlock - remainder;\n                }\n\n                this.SetData(data, audioFormat, duration, loopStart, loopLength);\n            }\n            finally\n            {\n                ExternalTool.DeleteFile(temporaryOutput);\n            }\n\n            //return quality;\n        }\n\n        public void SetData(byte[] data, AudioFormat format, TimeSpan duration, int loopStart, int loopLength)\n        {\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n            if (format == null)\n                throw new ArgumentNullException(\"format\");\n\n            _data = data;\n            _format = format;\n            _duration = duration;\n            _loopStart = loopStart;\n            _loopLength = loopLength;\n        }\n\n\n        public static void ProbeFormat(string sourceFile, out AudioFileType audioFileType, out AudioFormat audioFormat, out TimeSpan duration, out int loopStart, out int loopLength)\n        {\n            string ffprobeStdout, ffprobeStderr;\n            int ffprobeExitCode = ExternalTool.Run(\n                \"ffprobe\",\n                string.Format(\"-i \\\"{0}\\\" -show_format -show_entries streams -v quiet -of flat\", sourceFile),\n                out ffprobeStdout,\n                out ffprobeStderr);\n            if (ffprobeExitCode != 0)\n                throw new InvalidOperationException(\"ffprobe exited with non-zero exit code.\");\n\n            // Set default values if information is not available.\n            int averageBytesPerSecond = 0;\n            int bitsPerSample = 0;\n            int blockAlign = 0;\n            int channelCount = 0;\n            int sampleRate = 0;\n            int format = 0;\n            string sampleFormat = null;\n            double durationInSeconds = 0;\n            string formatName = string.Empty;\n\n            try\n            {\n                NumberFormatInfo numberFormat = CultureInfo.InvariantCulture.NumberFormat;\n                foreach (string line in ffprobeStdout.Split(new[] { '\\r', '\\n', '\\0' }, StringSplitOptions.RemoveEmptyEntries))\n                {\n                    string[] kv = line.Split(new[] { '=' }, 2);\n\n                    switch (kv[0])\n                    {\n                        case \"streams.stream.0.sample_rate\":\n                            sampleRate = int.Parse(kv[1].Trim('\"'), numberFormat);\n                            break;\n                        case \"streams.stream.0.bits_per_sample\":\n                            bitsPerSample = int.Parse(kv[1].Trim('\"'), numberFormat);\n                            break;\n                        case \"streams.stream.0.start_time\":\n                            {\n                                double seconds;\n                                if (double.TryParse(kv[1].Trim('\"'), NumberStyles.Any, numberFormat, out seconds))\n                                    durationInSeconds += seconds;\n                                break;\n                            }\n                        case \"streams.stream.0.duration\":\n                            durationInSeconds += double.Parse(kv[1].Trim('\"'), numberFormat);\n                            break;\n                        case \"streams.stream.0.channels\":\n                            channelCount = int.Parse(kv[1].Trim('\"'), numberFormat);\n                            break;\n                        case \"streams.stream.0.sample_fmt\":\n                            sampleFormat = kv[1].Trim('\"').ToLowerInvariant();\n                            break;\n                        case \"streams.stream.0.bit_rate\":\n                            averageBytesPerSecond = (int.Parse(kv[1].Trim('\"'), numberFormat) / 8);\n                            break;\n                        case \"format.format_name\":\n                            formatName = kv[1].Trim('\"').ToLowerInvariant();\n                            break;\n                        case \"streams.stream.0.codec_tag\":\n                            {\n                                string hex = kv[1].Substring(3, kv[1].Length - 4);\n                                format = int.Parse(hex, NumberStyles.HexNumber);\n                                break;\n                            }\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\n                throw new InvalidOperationException(\"Failed to parse ffprobe output.\", ex);\n            }\n\n            // XNA seems to use the sample format for the bits per sample\n            // in the case of non-PCM formats like MP3 and WMA.\n            if (bitsPerSample == 0 && sampleFormat != null)\n            {\n                switch (sampleFormat)\n                {\n                    case \"u8\":\n                    case \"u8p\":\n                        bitsPerSample = 8;\n                        break;\n                    case \"s16\":\n                    case \"s16p\":\n                        bitsPerSample = 16;\n                        break;\n                    case \"s32\":\n                    case \"s32p\":\n                    case \"flt\":\n                    case \"fltp\":\n                        bitsPerSample = 32;\n                        break;\n                    case \"dbl\":\n                    case \"dblp\":\n                        bitsPerSample = 64;\n                        break;\n                }\n            }\n\n            // Figure out the file type.\n            int durationMs = (int)Math.Floor(durationInSeconds * 1000.0);\n            if (formatName == \"wav\")\n            {\n                audioFileType = AudioFileType.Wav;\n            }\n            else if (formatName == \"mp3\")\n            {\n                audioFileType = AudioFileType.Mp3;\n                format = 1;\n                durationMs = (int)Math.Ceiling(durationInSeconds * 1000.0);\n                bitsPerSample = Math.Min(bitsPerSample, 16);\n            }\n            else if (formatName == \"wma\" || formatName == \"asf\")\n            {\n                audioFileType = AudioFileType.Wma;\n                format = 1;\n                durationMs = (int)Math.Ceiling(durationInSeconds * 1000.0);\n                bitsPerSample = Math.Min(bitsPerSample, 16);\n            }\n            else if (formatName == \"ogg\")\n            {\n                audioFileType = AudioFileType.Ogg;\n                format = 1;\n                durationMs = (int)Math.Ceiling(durationInSeconds * 1000.0);\n                bitsPerSample = Math.Min(bitsPerSample, 16);\n            }\n            else\n                audioFileType = (AudioFileType)(-1);\n\n            // XNA seems to calculate the block alignment directly from \n            // the bits per sample and channel count regardless of the \n            // format of the audio data.\n            // ffprobe doesn't report blockAlign for ADPCM and we cannot calculate it like this\n            if (bitsPerSample > 0 && (format != 2 && format != 17))\n                blockAlign = (bitsPerSample * channelCount) / 8;\n\n            // XNA seems to only be accurate to the millisecond.\n            duration = TimeSpan.FromMilliseconds(durationMs);\n\n            // Looks like XNA calculates the average bps from\n            // the sample rate and block alignment.\n            if (blockAlign > 0)\n                averageBytesPerSecond = sampleRate * blockAlign;\n\n            audioFormat = new AudioFormat(\n                averageBytesPerSecond,\n                bitsPerSample,\n                blockAlign,\n                channelCount,\n                format,\n                sampleRate);\n\n            // Loop start and length in number of samples.  For some\n            // reason XNA doesn't report loop length for non-WAV sources.\n            loopStart = 0;\n            if (audioFileType != AudioFileType.Wav)\n                loopLength = 0;\n            else\n                loopLength = (int)Math.Floor(sampleRate * durationInSeconds);\n        }\n\n        internal static byte[] StripRiffWaveHeader(byte[] data, out AudioFormat audioFormat)\n        {\n            audioFormat = null;\n\n            using (BinaryReader reader = new BinaryReader(new MemoryStream(data)))\n            {\n                string signature = new string(reader.ReadChars(4));\n                if (signature != \"RIFF\")\n                    return data;\n\n                reader.ReadInt32(); // riff_chunck_size\n\n                string wformat = new string(reader.ReadChars(4));\n                if (wformat != \"WAVE\")\n                    return data;\n\n                // Look for the data chunk.\n                while (true)\n                {\n                    string chunkSignature = new string(reader.ReadChars(4));\n                    if (chunkSignature.ToLowerInvariant() == \"data\")\n                        break;\n                    if (chunkSignature.ToLowerInvariant() == \"fmt \")\n                    {\n                        int fmtLength = reader.ReadInt32();\n                        short formatTag = reader.ReadInt16();\n                        short channels = reader.ReadInt16();\n                        int sampleRate = reader.ReadInt32();\n                        int avgBytesPerSec = reader.ReadInt32();\n                        short blockAlign = reader.ReadInt16();\n                        short bitsPerSample = reader.ReadInt16();\n                        audioFormat = new AudioFormat(avgBytesPerSec, bitsPerSample, blockAlign, channels, formatTag, sampleRate);\n\n                        fmtLength -= 2 + 2 + 4 + 4 + 2 + 2;\n                        if (fmtLength < 0)\n                            throw new InvalidOperationException(\"riff wave header has unexpected format\");\n                        reader.BaseStream.Seek(fmtLength, SeekOrigin.Current);\n                    }\n                    else\n                    {\n                        reader.BaseStream.Seek(reader.ReadInt32(), SeekOrigin.Current);\n                    }\n                }\n\n                int dataSize = reader.ReadInt32();\n                data = reader.ReadBytes(dataSize);\n            }\n\n            return data;\n        }\n\n        public static void WritePcmFile(AudioContent content, string saveToFile, int bitRate = 192000, int? sampeRate = null)\n        {\n            string ffmpegStdout, ffmpegStderr;\n            int ffmpegExitCode = ExternalTool.Run(\n                \"ffmpeg\",\n                string.Format(\n                    \"-y -i \\\"{0}\\\" -vn -c:a pcm_s16le -b:a {2} {3} -f:a wav -strict experimental \\\"{1}\\\"\",\n                    content.FileName,\n                    saveToFile,\n                    bitRate,\n                    sampeRate != null ? \"-ar \" + sampeRate.Value : \"\"\n                    ),\n                out ffmpegStdout,\n                out ffmpegStderr);\n            if (ffmpegExitCode != 0)\n                throw new InvalidOperationException(\"ffmpeg exited with non-zero exit code: \\n\" + ffmpegStdout + \"\\n\" + ffmpegStderr);\n        }\n\n        // Converts block alignment in bytes to sample alignment, primarily for compressed formats\n        // Calculation of sample alignment from http://kcat.strangesoft.net/openal-extensions/SOFT_block_alignment.txt\n        private static int SampleAlignment(AudioFormat format)\n        {\n            switch (format.Format)\n            {\n                case 2:     // MS-ADPCM\n                    return (format.BlockAlign / format.ChannelCount - 7) * 2 + 2;\n                case 17:    // IMA/ADPCM\n                    return (format.BlockAlign / format.ChannelCount - 4) / 4 * 8 + 1;\n\n                default:\n                    return 0;\n            }\n        }\n\n        private static int QualityToSampleRate(ConversionQuality quality, int sourceSampleRate)\n        {\n            switch (quality)\n            {\n                case ConversionQuality.Low:\n                    return Math.Max(8000, (int)Math.Floor(sourceSampleRate / 2.0));\n                case ConversionQuality.Medium:\n                    return Math.Max(8000, (int)Math.Floor((sourceSampleRate / 4.0) * 3));\n                case ConversionQuality.Best:\n                    return Math.Max(8000, sourceSampleRate);\n\n                default:\n                    return Math.Max(8000, sourceSampleRate);\n            }\n        }\n\n        private static int QualityToBitRate(ConversionQuality quality)\n        {\n            switch (quality)\n            {\n                case ConversionQuality.Low:\n                    return 96000;\n                case ConversionQuality.Medium:\n                    return 128000;\n                case ConversionQuality.Best:\n                    return 192000;\n\n                default:\n                    return 192000;\n            }\n        }\n\n        public void Dispose()\n        {\n            _data = null;\n            _readOnlyData = null;\n\n            _isDisposed = true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Audio/AudioFileType.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Audio\n{\n    /// <summary>\n    /// Type of the audio file.\n    /// </summary>\n    public enum AudioFileType\n    {\n        /// <summary>\n        /// The MP3 format\n        /// </summary>\n        Mp3,\n\n        /// <summary>\n        /// The WAV format\n        /// </summary>\n        Wav,\n\n        /// <summary>\n        /// The WMA format\n        /// </summary>\n        Wma,\n\n        /// <summary>\n        /// The Ogg format\n        /// </summary>\n        Ogg,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Audio/AudioFormat.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Audio\n{\n    /// <summary>\n    /// Encapsulates the native audio format (WAVEFORMATEX) information of the audio content.\n    /// </summary>\n    public sealed class AudioFormat\n    {\n        int averageBytesPerSecond;\n        int bitsPerSample;\n        int blockAlign;\n        int channelCount;\n        int format;\n        byte[] nativeWaveFormat;\n        int sampleRate;\n\n        /// <summary>\n        /// Gets the average bytes processed per second.\n        /// </summary>\n        /// <value>Average bytes processed per second.</value>\n        public int AverageBytesPerSecond { get { return averageBytesPerSecond; } }\n\n        /// <summary>\n        /// Gets the bit depth of the audio content.\n        /// </summary>\n        /// <value>If the audio has not been processed, the source bit depth; otherwise, the bit depth of the new format.</value>\n        public int BitsPerSample { get { return bitsPerSample; } }\n\n        /// <summary>\n        /// Gets the number of bytes per sample block, taking channels into consideration. For example, for 16-bit stereo audio (PCM format), the size of each sample block is 4 bytes.\n        /// </summary>\n        /// <value>Number of bytes, per sample block.</value>\n        public int BlockAlign { get { return blockAlign; } }\n\n        /// <summary>\n        /// Gets the number of channels.\n        /// </summary>\n        /// <value>If the audio has not been processed, the source channel count; otherwise, the new channel count.</value>\n        public int ChannelCount { get { return channelCount; } }\n\n        /// <summary>\n        /// Gets the format of the audio content.\n        /// </summary>\n        /// <value>If the audio has not been processed, the format tag of the source content; otherwise, the new format tag.</value>\n        public int Format { get { return format; } }\n\n        /// <summary>\n        /// Gets the raw byte buffer for the format. For non-PCM formats, this buffer contains important format-specific information beyond the basic format information exposed in other properties of the AudioFormat type.\n        /// </summary>\n        /// <value>The raw byte buffer represented in a collection.</value>\n        public ReadOnlyCollection<byte> NativeWaveFormat { get { return new ReadOnlyCollection<byte>(nativeWaveFormat); } }\n\n        internal byte[] RawNativeWaveFormat { get { return nativeWaveFormat; } }\n\n        /// <summary>\n        /// Gets the sample rate of the audio content.\n        /// </summary>\n        /// <value>If the audio has not been processed, the source sample rate; otherwise, the new sample rate.</value>\n        public int SampleRate { get { return sampleRate; } }\n\n        internal AudioFormat(\n            int averageBytesPerSecond,\n            int bitsPerSample,\n            int blockAlign,\n            int channelCount,\n            int format,\n            int sampleRate)\n        {\n            this.averageBytesPerSecond = averageBytesPerSecond;\n            this.bitsPerSample = bitsPerSample;\n            this.blockAlign = blockAlign;\n            this.channelCount = channelCount;\n            this.format = format;\n            this.sampleRate = sampleRate;\n\n            this.nativeWaveFormat = this.ConstructNativeWaveFormat();\n        }\n\n        private byte[] ConstructNativeWaveFormat()\n        {\n            using (MemoryStream memory = new MemoryStream())\n            {\n                using (BinaryWriter writer = new BinaryWriter(memory))\n                {\n                    writer.Write((short)this.format);\n                    writer.Write((short)this.channelCount);\n                    writer.Write((int)this.sampleRate);\n                    writer.Write((int)this.averageBytesPerSecond);\n                    writer.Write((short)this.blockAlign);\n                    writer.Write((short)this.bitsPerSample);\n                    writer.Write((short)0);\n\n                    byte[] bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    return bytes;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Audio/ConversionFormat.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Audio\n{\n    /// <summary>\n    /// Target formats supported for audio source conversions.\n    /// </summary>\n    public enum ConversionFormat\n    {\n        /// <summary>\n        /// Microsoft ADPCM encoding technique using 4 bits\n        /// </summary>\n        Adpcm,\n\n        /// <summary>\n        /// 8/16-bit mono/stereo PCM audio 8KHz-48KHz\n        /// </summary>\n        Pcm,\n\n        /// <summary>\n        /// Windows Media CBR formats (64 kbps, 128 kbps, 192 kbps)\n        /// </summary>\n        WindowsMedia,\n\n        /// <summary>\n        /// The Xbox compression format\n        /// </summary>\n        Xma,\n\n        /// <summary>\n        /// QuickTime ADPCM format\n        /// </summary>\n        ImaAdpcm,\n\n        /// <summary>\n        /// Advanced Audio Coding\n        /// </summary>\n        Aac,\n\n        /// <summary>\n        /// Vorbis open, patent-free audio encoding\n        /// </summary>\n        Vorbis,\n\n        /// <summary>\n        /// mp3 audio format\n        /// </summary>\n        Mp3\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Audio/ConversionQuality.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Audio\n{\n    /// <summary>\n    /// Compression quality of the audio content.\n    /// </summary>\n    public enum ConversionQuality\n    {\n        /// <summary>\n        /// High compression yielding lower file size, but could compromise audio quality\n        /// </summary>\n        Low,\n\n        /// <summary>\n        /// Moderate compression resulting in a compromise between audio quality and file size\n        /// </summary>\n        Medium,\n\n        /// <summary>\n        /// Lowest compression, but the best audio quality\n        /// </summary>\n        Best,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/ExternalTool.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Threading;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Helper to run an external tool installed in the system. Useful for when\n    /// we don't want to package the tool ourselves (ffmpeg) or it's provided\n    /// by a third party (console manufacturer).\n    /// </summary>\n    internal class ExternalTool\n    {\n        public static int Run(string command, string arguments)\n        {\n            string stdout, stderr;\n            var result = Run(command, arguments, out stdout, out stderr);\n            if (result < 0)\n                throw new Exception(string.Format(\"{0} returned exit code {1}\", command, result));\n\n            return result;\n        }\n\n        public static int Run(string command, string arguments, out string stdout, out string stderr, string stdin = null)\n        {\n            // This particular case is likely to be the most common and thus\n            // warrants its own specific error message rather than falling\n            // back to a general exception from Process.Start()\n            var fullPath = FindCommand(command);\n            if (string.IsNullOrEmpty(fullPath))\n                throw new Exception(string.Format(\"Couldn't locate external tool '{0}'.\", command));\n\n            // We can't reference ref or out parameters from within\n            // lambdas (for the thread functions), so we have to store\n            // the data in a temporary variable and then assign these\n            // variables to the out parameters.\n            var stdoutTemp = string.Empty;\n            var stderrTemp = string.Empty;\n\n            var processInfo = new ProcessStartInfo\n            {\n                Arguments = arguments,\n                CreateNoWindow = true,\n                WindowStyle = ProcessWindowStyle.Hidden,\n                ErrorDialog = false,\n                FileName = fullPath,\n                UseShellExecute = false,\n                RedirectStandardOutput = true,\n                RedirectStandardError = true,\n                RedirectStandardInput = true,\n            };\n\n            EnsureExecutable(fullPath);\n\n            using (var process = new Process())\n            {\n                process.StartInfo = processInfo;\n\n                process.Start();\n\n                // We have to run these in threads, because using ReadToEnd\n                // on one stream can deadlock if the other stream's buffer is\n                // full.\n                var stdoutThread = new Thread(new ThreadStart(() =>\n                {\n                    var memory = new MemoryStream();\n                    process.StandardOutput.BaseStream.CopyTo(memory);\n                    var bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    stdoutTemp = System.Text.Encoding.ASCII.GetString(bytes);\n                }));\n                var stderrThread = new Thread(new ThreadStart(() =>\n                {\n                    var memory = new MemoryStream();\n                    process.StandardError.BaseStream.CopyTo(memory);\n                    var bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    stderrTemp = System.Text.Encoding.ASCII.GetString(bytes);\n                }));\n\n                stdoutThread.Start();\n                stderrThread.Start();\n\n                if (stdin != null)\n                {\n                    process.StandardInput.Write(System.Text.Encoding.ASCII.GetBytes(stdin));\n                }\n\n                // Make sure interactive prompts don't block.\n                process.StandardInput.Close();\n\n                process.WaitForExit();\n\n                stdoutThread.Join();\n                stderrThread.Join();\n\n                stdout = stdoutTemp;\n                stderr = stderrTemp;\n\n                return process.ExitCode;\n            }\n        }\n\n        /// <summary>\n        /// Returns the fully-qualified path for a command, searching the system path if necessary.\n        /// </summary>\n        /// <remarks>\n        /// It's apparently necessary to use the full path when running on some systems.\n        /// </remarks>\n        private static string FindCommand(string command)\n        {\n            // Expand any environment variables.\n            command = Environment.ExpandEnvironmentVariables(command);\n\n            // If we have a full path just pass it through.\n            if (File.Exists(command))\n                return command;\n\n            // For Linux check specific subfolder\n            var lincom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"linux\", command);\n            if (CurrentPlatform.OS == OS.Linux && File.Exists(lincom))\n                return lincom;\n\n            // For Mac check specific subfolder\n            var maccom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"osx\", command);\n            if (CurrentPlatform.OS == OS.MacOSX && File.Exists(maccom))\n                return maccom;\n\n            // We don't have a full path, so try running through the system path to find it.\n            var paths = AppDomain.CurrentDomain.BaseDirectory +\n                Path.PathSeparator +\n                Environment.GetEnvironmentVariable(\"PATH\");\n\n            var justTheName = Path.GetFileName(command);\n            foreach (var path in paths.Split(Path.PathSeparator))\n            {\n                var fullName = Path.Combine(path, justTheName);\n                if (File.Exists(fullName))\n                    return fullName;\n\n                if (CurrentPlatform.OS == OS.Windows)\n                {\n                    var fullExeName = string.Concat(fullName, \".exe\");\n                    if (File.Exists(fullExeName))\n                        return fullExeName;\n                }\n            }\n\n            return null;\n        }\n\n        /// <summary>   \n        /// Ensures the specified executable has the executable bit set.  If the    \n        /// executable doesn't have the executable bit set on Linux or Mac OS, then \n        /// Mono will refuse to execute it. \n        /// </summary>  \n        /// <param name=\"path\">The full path to the executable.</param> \n        private static void EnsureExecutable(string path)\n        {\n            if (!path.StartsWith(\"/home\") && !path.StartsWith(\"/Users\"))\n                return;\n\n            try\n            {\n                var p = Process.Start(\"chmod\", \"u+x \\\"\" + path + \"\\\"\");\n                p.WaitForExit();\n            }\n            catch\n            {\n                // This platform may not have chmod in the path, in which case we can't \n                // do anything reasonable here. \n            }\n        }\n\n        /// <summary>\n        /// Safely deletes the file if it exists.\n        /// </summary>\n        /// <param name=\"filePath\">The path to the file to delete.</param>\n        public static void DeleteFile(string filePath)\n        {\n            try\n            {\n                File.Delete(filePath);\n            }\n            catch (Exception)\n            {                    \n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Mp3Importer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Audio;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading MP3 audio files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(\".mp3\", DisplayName = \"Mp3 Importer - KNI\", DefaultProcessor = \"SongProcessor\")]\n    public class Mp3Importer : ContentImporter<AudioContent>\n    {\n        /// <summary>\n        /// Initializes a new instance of Mp3Importer.\n        /// </summary>\n        public Mp3Importer()\n        {\n        }\n\n        /// <summary>\n        /// Called by the XNA Framework when importing an MP3 audio file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        public override AudioContent Import(string filename, ContentImporterContext context)\n        {\n            if (string.IsNullOrEmpty(filename))\n                throw new ArgumentNullException(\"filename\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n\n            if (!File.Exists(filename))\n                throw new FileNotFoundException(string.Format(\"Could not locate audio file {0}.\", Path.GetFileName(filename)));\n\n            var content = new AudioContent(filename, AudioFileType.Mp3);\n            return content;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/OggImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Audio;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading .ogg audio files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(\".ogg\", DisplayName = \"Ogg Importer - KNI\", DefaultProcessor = \"SongProcessor\")]\n    public class OggImporter : ContentImporter<AudioContent>\n    {\n        /// <summary>\n        /// Called by the XNA Framework when importing an ogg audio file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        public override AudioContent Import(string filename, ContentImporterContext context)\n        {\n            if (string.IsNullOrEmpty(filename))\n                throw new ArgumentNullException(\"filename\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n\n            if (!File.Exists(filename))\n                throw new FileNotFoundException(string.Format(\"Could not locate audio file {0}.\", Path.GetFileName(filename)));\n            \n            var content = new AudioContent(filename, AudioFileType.Ogg);\n            return content;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Processors/SoundEffectContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Represents a processed sound effect.\n    /// </summary>\n    public sealed class SoundEffectContent\n    {\n        internal byte[] _format;\n        internal byte[] _data;\n        internal int _loopStart;\n        internal int _loopLength;\n        internal int _duration;\n\n        /// <summary>\n        /// Initializes a new instance of the SoundEffectContent class.\n        /// </summary>\n        /// <param name=\"format\">The WAV header.</param>\n        /// <param name=\"data\">The audio waveform data.</param>\n        /// <param name=\"loopStart\">The start of the loop segment (must be block aligned).</param>\n        /// <param name=\"loopLength\">The length of the loop segment (must be block aligned).</param>\n        /// <param name=\"duration\">The duration of the wave file in milliseconds.</param>\n        internal SoundEffectContent(byte[] format, byte[] data, int loopStart, int loopLength, int duration)\n        {\n            this._format = format;\n            this._data = data;\n            this._loopStart = loopStart;\n            this._loopLength = loopLength;\n            this._duration = duration;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Processors/SoundEffectProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Content.Pipeline.Audio;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// A sound effect processor that processes an intermediate AudioContent type. This type encapsulates the source audio content, producing a SoundEffect type that can be used in the game.\n    /// </summary>\n    [ContentProcessor(DisplayName = \"Sound Effect - KNI\")]\n    public class SoundEffectProcessor : ContentProcessor<AudioContent, SoundEffectContent>\n    {\n        ConversionQuality quality = ConversionQuality.Best;\n\n        /// <summary>\n        /// Gets or sets the target format quality of the audio content.\n        /// </summary>\n        /// <value>The ConversionQuality of this audio data.</value>\n        public ConversionQuality Quality { get { return quality; } set { quality = value; } }\n\n        /// <summary>\n        /// Initializes a new instance of SoundEffectProcessor.\n        /// </summary>\n        public SoundEffectProcessor()\n        {\n        }\n\n        /// <summary>\n        /// Builds the content for the source audio.\n        /// </summary>\n        /// <param name=\"input\">The audio content to build.</param>\n        /// <param name=\"context\">Context for the specified processor.</param>\n        /// <returns>The built audio.</returns>\n        public override SoundEffectContent Process(AudioContent input, ContentProcessorContext context)\n        {\n            if (input == null)\n                throw new ArgumentNullException(\"input\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n\n            TargetPlatform platform = context.TargetPlatform;\n\n            // Default to PCM data, or ADPCM if the source is ADPCM.\n            ConversionFormat targetFormat = ConversionFormat.Pcm;\n            if (quality != ConversionQuality.Best || input.Format.Format == 2 || input.Format.Format == 17)\n            {\n                if (platform == TargetPlatform.iOS || platform == TargetPlatform.MacOSX || platform == TargetPlatform.DesktopGL)\n                    targetFormat = ConversionFormat.ImaAdpcm;\n                else\n                    targetFormat = ConversionFormat.Adpcm;\n            }\n\n            input.ConvertFormat(targetFormat, quality, null);\n\n            return new SoundEffectContent(input.Format.RawNativeWaveFormat, input.RawData, input.LoopStart, input.LoopLength, (int)input.Duration.TotalMilliseconds);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Properties/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Serialization/Compiler/SoundEffectWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class SoundEffectWriter : ContentTypeWriter<SoundEffectContent>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, SoundEffectContent value)\n        {\n            output.Write(value._format.Length);\n            output.Write(value._format);\n\n            output.Write(value._data.Length);\n            output.Write(value._data);\n\n            output.Write(value._loopStart);\n            output.Write(value._loopLength);\n            output.Write(value._duration);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".SoundEffectReader\";\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string typeNamespace = \"Microsoft.Xna.Framework.Audio\";\n            string typeName = \".SoundEffect\";\n            string typeAssembly = \", Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeType = typeNamespace + typeName + typeAssembly;\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/WavImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Audio;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading .wav audio files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(\".wav\", DisplayName = \"Wav Importer - KNI\", DefaultProcessor = \"SoundEffectProcessor\")]\n    public class WavImporter : ContentImporter<AudioContent>\n    {\n        /// <summary>\n        /// Called by the XNA Framework when importing a .wav audio file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        /// <remarks>This importer supports PCM in unsigned 8-bit, signed 16-bit, signed 24-bit, IEEE Float 32-bit, MS-ADPCM or IMA/ADPCM with sample rates from 8KHz up to 48KHz.</remarks>\n        public override AudioContent Import(string filename, ContentImporterContext context)\n        {\n            if (string.IsNullOrEmpty(filename))\n                throw new ArgumentNullException(\"filename\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n\n            if (!File.Exists(filename))\n                throw new FileNotFoundException(string.Format(\"Could not locate audio file {0}.\", Path.GetFileName(filename)));\n\n            AudioContent content = new AudioContent(filename, AudioFileType.Wav);\n\n            // Validate the format of the input.\n            if (content.Format.SampleRate < 8000 || content.Format.SampleRate > 48000)\n                throw new InvalidContentException(string.Format(\"Audio file {0} contains audio data with unsupported sample rate of {1}Hz. Supported sample rates are from 8KHz up to 48KHz.\", Path.GetFileName(filename), content.Format.SampleRate));\n            bool validPcm = content.Format.Format == 1 && (content.Format.BitsPerSample == 8 || content.Format.BitsPerSample == 16 || content.Format.BitsPerSample == 24);\n            bool validAdpcm = (content.Format.Format == 2 || content.Format.Format == 17) && content.Format.BitsPerSample == 4;\n            bool validIeeeFloat = content.Format.Format == 3 && content.Format.BitsPerSample == 32;\n            if (!(validPcm || validAdpcm || validIeeeFloat))\n                throw new InvalidContentException(string.Format(\"Audio file {0} contains audio data with unsupported format of {1} and bit depth of {2}. Supported bit depths are unsigned 8-bit, signed 16-bit, signed 24-bit for PCM(1) and 32-bit for IEEE Float(3).\", Path.GetFileName(filename), content.Format.Format, content.Format.BitsPerSample));\n            \n            return content;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/WmaImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Audio;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading Windows Media Audio (.wma) files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(\".wma\", DisplayName = \"Wma Importer - KNI\", DefaultProcessor = \"SongProcessor\")]\n    public class WmaImporter : ContentImporter<AudioContent>\n    {\n        /// <summary>\n        /// Initializes a new instance of WmaImporter.\n        /// </summary>\n        public WmaImporter()\n        {\n        }\n\n        /// <summary>\n        /// Called by the XNA Framework when importing a .wma file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        public override AudioContent Import(string filename, ContentImporterContext context)\n        {\n            if (string.IsNullOrEmpty(filename))\n                throw new ArgumentNullException(\"filename\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n\n            if (!File.Exists(filename))\n                throw new FileNotFoundException(string.Format(\"Could not locate audio file {0}.\", Path.GetFileName(filename)));\n\n            var content = new AudioContent(filename, AudioFileType.Wma);\n            return content;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Audio/Xna.Framework.Content.Pipeline.Audio.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Content.Pipeline.Audio\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <AssemblyName>Xna.Framework.Content.Pipeline.Audio</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Content.Pipeline.Audio</RootNamespace>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <DefineConstants></DefineConstants>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI Framework Framework Content Pipeline Audio.</Description>\n    <PackageTags>KNI;</PackageTags>\n    <PackageId>nkast.Xna.Framework.Content.Pipeline.Audio</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Audio\\AudioContent.cs\" />\n    <Compile Include=\"Audio\\AudioFileType.cs\" />\n    <Compile Include=\"Audio\\AudioFormat.cs\" />\n    <Compile Include=\"Audio\\ConversionFormat.cs\" />\n    <Compile Include=\"Audio\\ConversionQuality.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Processors\\SoundEffectContent.cs\" />\n    <Compile Include=\"Processors\\SoundEffectProcessor.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Serialization\\Compiler\\SoundEffectWriter.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Mp3Importer.cs\" />\n    <Compile Include=\"OggImporter.cs\" />\n    <Compile Include=\"WavImporter.cs\" />\n    <Compile Include=\"WmaImporter.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"ExternalTool.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\..\\Platforms\\Utilities\\CurrentPlatform.cs\">\n      <Link>Utilities\\CurrentPlatform.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\ffmpeg\\Windows\\x64\\ffmpeg.exe\">\n      <Link>ffmpeg.exe</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\ffmpeg\\Windows\\x64\\ffprobe.exe\">\n      <Link>ffprobe.exe</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509F44-3566-4B79-BB47-C7C6E2AA2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/DdsLoader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Loader class for DDS format image files.\n    /// </summary>\n    class DdsLoader\n    {\n        [Flags]\n        enum Ddsd : uint\n        {\n            Caps = 0x1,             // Required in every DDS file\n            Height = 0x2,           // Required in every DDS file\n            Width = 0x4,            // Required in every DDS file\n            Pitch = 0x8,            // Required when pitch is provided for an uncompressed texture\n            PixelFormat = 0x1000,   // Required in every DDS file\n            MipMapCount = 0x2000,   // Required in a mipmapped texture\n            LinearSize = 0x80000,   // Required when pitch is provided for a compressed texture\n            Depth = 0x800000,       // Required in a depth texture\n        }\n\n        [Flags]\n        enum DdsCaps : uint\n        {\n            Complex = 0x8,       // Optional; must be used on any file that contains more than one surface (a mipmap, a cubic environment map, or mipmapped volume texture)\n            MipMap = 0x400000,   // Optional; should be used for a mipmap\n            Texture = 0x1000,    // Required\n        }\n\n        [Flags]\n        enum DdsCaps2 : uint\n        {\n            Cubemap = 0x200,\n            CubemapPositiveX = 0x400,\n            CubemapNegativeX = 0x800,\n            CubemapPositiveY = 0x1000,\n            CubemapNegativeY = 0x2000,\n            CubemapPositiveZ = 0x4000,\n            CubemapNegativeZ = 0x8000,\n            Volume = 0x200000,\n\n            CubemapAllFaces = Cubemap | CubemapPositiveX | CubemapNegativeX | CubemapPositiveY | CubemapNegativeY | CubemapPositiveZ | CubemapNegativeZ,\n        }\n\n        [Flags]\n        enum Ddpf : uint\n        {\n            AlphaPixels = 0x1,\n            Alpha = 0x2,\n            FourCC = 0x4,\n            Rgb = 0x40,\n            Yuv = 0x200,\n            Luminance = 0x20000,\n        }\n\n        static uint MakeFourCC(char c1, char c2, char c3, char c4)\n        {\n            return ((uint)c1 << 24) | ((uint)c2 << 16) | ((uint)c3 << 8) | (uint)c4;\n        }\n\n        static uint MakeFourCC(string cc)\n        {\n            return ((uint)cc[0] << 24) | ((uint)cc[1] << 16) | ((uint)cc[2] << 8) | (uint)cc[3];\n        }\n\n        enum FourCC : uint\n        {\n            A32B32G32R32F = 116,\n            Dxt1 = 0x31545844,\n            Dxt2 = 0x32545844,\n            Dxt3 = 0x33545844,\n            Dxt4 = 0x34545844,\n            Dxt5 = 0x35545844,\n            Dx10 = 0x30315844,\n        }\n\n        struct DdsPixelFormat\n        {\n            public uint dwSize;\n            public Ddpf dwFlags;\n            public FourCC dwFourCC;\n            public uint dwRgbBitCount;\n            public uint dwRBitMask;\n            public uint dwGBitMask;\n            public uint dwBBitMask;\n            public uint dwABitMask;\n        }\n\n        struct DdsHeader\n        {\n            public uint dwSize;\n            public Ddsd dwFlags;\n            public uint dwHeight;\n            public uint dwWidth;\n            public uint dwPitchOrLinearSize;\n            public uint dwDepth;\n            public uint dwMipMapCount;\n            public DdsPixelFormat ddspf;\n            public DdsCaps dwCaps;\n            public DdsCaps2 dwCaps2;\n        }\n\n        static SurfaceFormat GetSurfaceFormat(ref DdsPixelFormat pixelFormat, out bool rbSwap)\n        {\n            rbSwap = false;\n            if (pixelFormat.dwFlags.HasFlag(Ddpf.FourCC))\n            {\n                switch (pixelFormat.dwFourCC)\n                {\n                    case FourCC.A32B32G32R32F:\n                        return SurfaceFormat.Vector4;\n                    case FourCC.Dxt1:\n                        return SurfaceFormat.Dxt1;\n                    case FourCC.Dxt2:\n                        throw new ContentLoadException(\"Unsupported compression format DXT2\");\n                    case FourCC.Dxt3:\n                        return SurfaceFormat.Dxt3;\n                    case FourCC.Dxt4:\n                        throw new ContentLoadException(\"Unsupported compression format DXT4\");\n                    case FourCC.Dxt5:\n                        return SurfaceFormat.Dxt5;\n                }\n            }\n            else if (pixelFormat.dwFlags.HasFlag(Ddpf.Rgb))\n            {\n                // Uncompressed format\n                if (pixelFormat.dwFlags.HasFlag(Ddpf.AlphaPixels))\n                {\n                    // Format contains RGB and A\n                    if (pixelFormat.dwRgbBitCount == 16)\n                    {\n                        if (pixelFormat.dwABitMask == 0xF)\n                        {\n                            rbSwap = pixelFormat.dwBBitMask == 0xF0;\n                            return SurfaceFormat.Bgra4444;\n                        }\n                        rbSwap = pixelFormat.dwBBitMask == 0x3E;\n                        return SurfaceFormat.Bgra5551;\n                    }\n                    else if (pixelFormat.dwRgbBitCount == 32)\n                    {\n                        rbSwap = pixelFormat.dwBBitMask == 0xFF;\n                        return SurfaceFormat.Color;\n                    }\n                    throw new ContentLoadException(\"Unsupported RGBA pixel format\");\n                }\n                else\n                {\n                    // Format contains RGB only\n                    if (pixelFormat.dwRgbBitCount == 16)\n                    {\n                        rbSwap = pixelFormat.dwBBitMask == 0x1F;\n                        return SurfaceFormat.Bgr565;\n                    }\n                    else if (pixelFormat.dwRgbBitCount == 24)\n                    {\n                        rbSwap = pixelFormat.dwBBitMask == 0xFF;\n                        return SurfaceFormat.Color;\n                    }\n                    else if (pixelFormat.dwRgbBitCount == 32)\n                    {\n                        rbSwap = pixelFormat.dwBBitMask == 0xFF;\n                        return SurfaceFormat.Color;\n                    }\n                    throw new ContentLoadException(\"Unsupported RGB pixel format\");\n                }\n            }\n            //else if (pixelFormat.dwFlags.HasFlag(Ddpf.Luminance))\n            //{\n            //    return SurfaceFormat.Alpha8;\n            //}\n            throw new ContentLoadException(\"Unsupported pixel format\");\n        }\n\n        static BitmapContent CreateBitmapContent(SurfaceFormat format, int width, int height)\n        {\n            switch (format)\n            {\n                case SurfaceFormat.Color:\n                    return new PixelBitmapContent<Color>(width, height);\n\n                case SurfaceFormat.Bgra4444:\n                    return new PixelBitmapContent<Bgra4444>(width, height);\n\n                case SurfaceFormat.Bgra5551:\n                    return new PixelBitmapContent<Bgra5551>(width, height);\n\n                case SurfaceFormat.Bgr565:\n                    return new PixelBitmapContent<Bgr565>(width, height);\n\n                case SurfaceFormat.Dxt1:\n                    return new Dxt1BitmapContent(width, height);\n\n                case SurfaceFormat.Dxt3:\n                    return new Dxt3BitmapContent(width, height);\n\n                case SurfaceFormat.Dxt5:\n                    return new Dxt5BitmapContent(width, height);\n\n                case SurfaceFormat.Vector4:\n                    return new PixelBitmapContent<Vector4>(width, height);\n            }\n            throw new ContentLoadException(\"Unsupported SurfaceFormat \" + format);\n        }\n\n        static int GetBitmapSize(SurfaceFormat format, int width, int height)\n        {\n            // It is recommended that the dwPitchOrLinearSize field is ignored and we calculate it ourselves\n            // https://msdn.microsoft.com/en-us/library/bb943991.aspx\n            int pitch = 0;\n            int rows = 0;\n\n            switch (format)\n            {\n                case SurfaceFormat.Color:\n                case SurfaceFormat.Bgra4444:\n                case SurfaceFormat.Bgra5551:\n                case SurfaceFormat.Bgr565:\n                case SurfaceFormat.Vector4:\n                    pitch = width * format.GetSize();\n                    rows = height;\n                    break;\n\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt5:\n                    pitch = ((width + 3) / 4) * format.GetSize();\n                    rows = (height + 3) / 4;\n                    break;\n\n                default:\n                    throw new ContentLoadException(\"Unsupported SurfaceFormat \" + format);\n            }\n\n            return pitch * rows;\n        }\n\n        static internal TextureContent Import(string filename, ContentImporterContext context)\n        {\n            var identity = new ContentIdentity(filename);\n            TextureContent output = null;\n\n            using (var reader = new BinaryReader(new FileStream(filename, FileMode.Open, FileAccess.Read)))\n            {\n                // Read signature (\"DDS \")\n                var valid = reader.ReadByte() == 0x44;\n                valid = valid && reader.ReadByte() == 0x44;\n                valid = valid && reader.ReadByte() == 0x53;\n                valid = valid && reader.ReadByte() == 0x20;\n                if (!valid)\n                    throw new ContentLoadException(\"Invalid file signature\");\n\n                var header = new DdsHeader();\n\n                // Read DDS_HEADER\n                header.dwSize = reader.ReadUInt32();\n                if (header.dwSize != 124)\n                    throw new ContentLoadException(\"Invalid DDS_HEADER dwSize value\");\n                header.dwFlags = (Ddsd)reader.ReadUInt32();\n                header.dwHeight = reader.ReadUInt32();\n                header.dwWidth = reader.ReadUInt32();\n                header.dwPitchOrLinearSize = reader.ReadUInt32();\n                header.dwDepth = reader.ReadUInt32();\n                header.dwMipMapCount = reader.ReadUInt32();\n                // The next 11 DWORDs are reserved and unused\n                for (int i = 0; i < 11; ++i)\n                    reader.ReadUInt32();\n                // Read DDS_PIXELFORMAT\n                header.ddspf.dwSize = reader.ReadUInt32();\n                if (header.ddspf.dwSize != 32)\n                    throw new ContentLoadException(\"Invalid DDS_PIXELFORMAT dwSize value\");\n                header.ddspf.dwFlags = (Ddpf)reader.ReadUInt32();\n                header.ddspf.dwFourCC = (FourCC)reader.ReadUInt32();\n                header.ddspf.dwRgbBitCount = reader.ReadUInt32();\n                header.ddspf.dwRBitMask = reader.ReadUInt32();\n                header.ddspf.dwGBitMask = reader.ReadUInt32();\n                header.ddspf.dwBBitMask = reader.ReadUInt32();\n                header.ddspf.dwABitMask = reader.ReadUInt32();\n                // Continue reading DDS_HEADER\n                header.dwCaps = (DdsCaps)reader.ReadUInt32();\n                header.dwCaps2 = (DdsCaps2)reader.ReadUInt32();\n                // dwCaps3 unused\n                reader.ReadUInt32();\n                // dwCaps4 unused\n                reader.ReadUInt32();\n                // dwReserved2 unused\n                reader.ReadUInt32();\n\n                // Check for the existence of the DDS_HEADER_DXT10 struct next\n                if (header.ddspf.dwFlags == Ddpf.FourCC && header.ddspf.dwFourCC == FourCC.Dx10)\n                {\n                    throw new ContentLoadException(\"Unsupported DDS_HEADER_DXT10 struct found\");\n                }\n\n                int faceCount = 1;\n                int mipMapCount = (int)(header.dwCaps.HasFlag(DdsCaps.MipMap) ? header.dwMipMapCount : 1);\n                if (header.dwCaps2.HasFlag(DdsCaps2.Cubemap))\n                {\n                    if (!header.dwCaps2.HasFlag(DdsCaps2.CubemapAllFaces))\n                        throw new ContentLoadException(\"Incomplete cubemap in DDS file\");\n                    faceCount = 6;\n                    output = new TextureCubeContent() { Identity = identity };\n                }\n                else\n                {\n                    output = new Texture2DContent() { Identity = identity };\n                }\n\n                bool rbSwap;\n                var format = GetSurfaceFormat(ref header.ddspf, out rbSwap);\n\n                for (int f = 0; f < faceCount; ++f)\n                {\n                    var w = (int)header.dwWidth;\n                    var h = (int)header.dwHeight;\n                    var mipMaps = new MipmapChain();\n                    for (int m = 0; m < mipMapCount; ++m)\n                    {\n                        var content = CreateBitmapContent(format, w, h);\n                        var byteCount = GetBitmapSize(format, w, h);\n                        // A 24-bit format is slightly different\n                        if (header.ddspf.dwRgbBitCount == 24)\n                            byteCount = 3 * w * h;\n                        var bytes = reader.ReadBytes(byteCount);\n                        if (rbSwap)\n                        {\n                            switch (format)\n                            {\n                                case SurfaceFormat.Bgr565:\n                                    ByteSwapBGR565(bytes);\n                                    break;\n                                case SurfaceFormat.Bgra4444:\n                                    ByteSwapBGRA4444(bytes);\n                                    break;\n                                case SurfaceFormat.Bgra5551:\n                                    ByteSwapBGRA5551(bytes);\n                                    break;\n                                case SurfaceFormat.Color:\n                                    if (header.ddspf.dwRgbBitCount == 32)\n                                        ByteSwapRGBX(bytes);\n                                    else if (header.ddspf.dwRgbBitCount == 24)\n                                        ByteSwapRGB(bytes);\n                                    break;\n                            }\n                        }\n                        if ((format == SurfaceFormat.Color) && header.ddspf.dwFlags.HasFlag(Ddpf.Rgb) && !header.ddspf.dwFlags.HasFlag(Ddpf.AlphaPixels))\n                        {\n                            // Fill or add alpha with opaque\n                            if (header.ddspf.dwRgbBitCount == 32)\n                                ByteFillAlpha(bytes);\n                            else if (header.ddspf.dwRgbBitCount == 24)\n                                ByteExpandAlpha(ref bytes);\n                        }\n                        content.SetPixelData(bytes);\n                        mipMaps.Add(content);\n                        w = MathHelper.Max(1, w / 2);\n                        h = MathHelper.Max(1, h / 2);\n                    }\n                    output.Faces[f] = mipMaps;\n                }\n            }\n\n            return output;\n        }\n\n        static void ByteFillAlpha(byte[] bytes)\n        {\n            for (int i = 0; i < bytes.Length; i += 4)\n            {\n                bytes[i + 3] = 255;\n            }\n        }\n\n        static void ByteExpandAlpha(ref byte[] bytes)\n        {\n            var rgba = new byte[bytes.Length + (bytes.Length / 3)];\n            int j = 0;\n            for (int i = 0; i < bytes.Length; i += 3)\n            {\n                rgba[j] = bytes[i];\n                rgba[j + 1] = bytes[i + 1];\n                rgba[j + 2] = bytes[i + 2];\n                rgba[j + 3] = 255;\n                j += 4;\n            }\n            bytes = rgba;\n        }\n\n        static void ByteSwapRGB(byte[] bytes)\n        {\n            for (int i = 0; i < bytes.Length; i += 3)\n            {\n                byte r = bytes[i];\n                bytes[i] = bytes[i + 2];\n                bytes[i + 2] = r;\n            }\n        }\n\n        static void ByteSwapRGBX(byte[] bytes)\n        {\n            for (int i = 0; i < bytes.Length; i += 4)\n            {\n                byte r = bytes[i];\n                bytes[i] = bytes[i + 2];\n                bytes[i + 2] = r;\n            }\n        }\n\n        static void ByteSwapBGRA4444(byte[] bytes)\n        {\n            for (int i = 0; i < bytes.Length; i += 2)\n            {\n                var r = bytes[i] & 0xF0;\n                var b = bytes[i + 1] & 0xF0;\n                bytes[i] = (byte)((bytes[i] & 0x0F) | b);\n                bytes[i + 1] = (byte)((bytes[i + 1] & 0x0F) | r);\n            }\n        }\n\n        static void ByteSwapBGRA5551(byte[] bytes)\n        {\n            for (int i = 0; i < bytes.Length; i += 2)\n            {\n                var r = (bytes[i] & 0xF8) >> 3;\n                var b = (bytes[i + 1] & 0x3E) >> 1;\n                bytes[i] = (byte)((bytes[i] & 0x07) | (b << 3));\n                bytes[i + 1] = (byte)((bytes[i + 1] & 0xC1) | (r << 1));\n            }\n        }\n\n        static void ByteSwapBGR565(byte[] bytes)\n        {\n            for (int i = 0; i < bytes.Length; i += 2)\n            {\n                var r = (bytes[i] & 0xF8) >> 3;\n                var b = bytes[i + 1] & 0x1F;\n                bytes[i] = (byte)((bytes[i] & 0x07) | (b << 3));\n                bytes[i + 1] = (byte)((bytes[i + 1] & 0xE0) | r);\n            }\n        }\n\n        internal static void WriteUncompressed(string filename, BitmapContent bitmapContent)\n        {\n            using (var writer = new BinaryWriter(new FileStream(filename, FileMode.Create, FileAccess.Write)))\n            {\n                // Write signature (\"DDS \")\n                writer.Write((byte)0x44);\n                writer.Write((byte)0x44);\n                writer.Write((byte)0x53);\n                writer.Write((byte)0x20);\n\n                var header = new DdsHeader();\n                header.dwSize = 124;\n                header.dwFlags = Ddsd.Caps | Ddsd.Width | Ddsd.Height | Ddsd.Pitch | Ddsd.PixelFormat;\n                header.dwWidth = (uint)bitmapContent.Width;\n                header.dwHeight = (uint)bitmapContent.Height;\n                header.dwPitchOrLinearSize = (uint)(bitmapContent.Width * 4);\n                header.dwDepth = (uint)0;\n                header.dwMipMapCount = (uint)0;\n                \n                writer.Write((uint)header.dwSize);\n                writer.Write((uint)header.dwFlags);\n                writer.Write((uint)header.dwHeight);\n                writer.Write((uint)header.dwWidth);\n                writer.Write((uint)header.dwPitchOrLinearSize);\n                writer.Write((uint)header.dwDepth);\n                writer.Write((uint)header.dwMipMapCount);\n\n                // 11 unsed and reserved DWORDS.\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n\n                SurfaceFormat format;\n                if (!bitmapContent.TryGetFormat(out format) || format != SurfaceFormat.Color)\n                    throw new NotSupportedException(\"Unsupported bitmap content!\");\n\n                header.ddspf.dwSize = 32;\n                header.ddspf.dwFlags = Ddpf.AlphaPixels | Ddpf.Rgb;\n                header.ddspf.dwFourCC = 0;\n                header.ddspf.dwRgbBitCount = 32;\n                header.ddspf.dwRBitMask = 0x000000ff;\n                header.ddspf.dwGBitMask = 0x0000ff00;\n                header.ddspf.dwBBitMask = 0x00ff0000;\n                header.ddspf.dwABitMask = 0xff000000;\n\n                // Write the DDS_PIXELFORMAT\n                writer.Write((uint)header.ddspf.dwSize);\n                writer.Write((uint)header.ddspf.dwFlags);\n                writer.Write((uint)header.ddspf.dwFourCC);\n                writer.Write((uint)header.ddspf.dwRgbBitCount);\n                writer.Write((uint)header.ddspf.dwRBitMask);\n                writer.Write((uint)header.ddspf.dwGBitMask);\n                writer.Write((uint)header.ddspf.dwBBitMask);\n                writer.Write((uint)header.ddspf.dwABitMask);\n\n                header.dwCaps = DdsCaps.Texture;\n                header.dwCaps2 = 0;\n\n                // Continue reading DDS_HEADER\n                writer.Write((uint)header.dwCaps);\n                writer.Write((uint)header.dwCaps2);\n\n                // More reserved unused DWORDs.\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n                writer.Write((uint)0);\n\n                // Write out the face data.\n                writer.Write(bitmapContent.GetPixelData());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/SamplerStateContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    public class SamplerStateContent //: ContentItem\n    {\n        public TextureAddressModeContent AddressU;\n        public TextureAddressModeContent AddressV;\n        public TextureAddressModeContent AddressW;\n        public Color BorderColor;\n        public int MaxAnisotropy;\n        public int MaxMipLevel;\n        public float MipMapLevelOfDetailBias;\n        public TextureFilterContent Filter;\n        public TextureFilterModeContent FilterMode;\n        public CompareFunctionContent ComparisonFunction;\n\n        public SamplerStateContent()\n        {\n            AddressU = TextureAddressModeContent.Wrap;\n            AddressV = TextureAddressModeContent.Wrap;\n            AddressW = TextureAddressModeContent.Wrap;\n            BorderColor = Color.White;\n            MaxAnisotropy = 4;\n            MaxMipLevel = 0;\n            MipMapLevelOfDetailBias = 0.0f;\n            Filter = TextureFilterContent.Linear;\n            FilterMode = TextureFilterModeContent.Default;\n            ComparisonFunction = CompareFunctionContent.Never;\n        }\n\n    }\n\n    /// <summary>\n    /// Defines modes for addressing texels using texture coordinates that are outside of the range of 0.0 to 1.0.\n    /// </summary>\n    public enum TextureAddressModeContent\n    {\n        /// <summary>\n        /// Texels outside range will form the tile at every integer junction.\n        /// </summary>\n        Wrap,\n        /// <summary>\n        /// Texels outside range will be set to color of 0.0 or 1.0 texel.\n        /// </summary>\n        Clamp,\n        /// <summary>\n        /// Same as <see cref=\"TextureAddressModeContent.Wrap\"/> but tiles will also flipped at every integer junction.\n        /// </summary>\n        Mirror,\n        /// <summary>\n        /// Texels outside range will be set to the border color.\n        /// </summary>\n        Border\n    }\n    \n    public enum TextureFilterTypeContent\n    {\n        None,\n        Point,\n        Linear,\n        Anisotropic,\n    }\n\n    /// <summary>\n    /// Defines filtering types for texture sampler.\n    /// </summary>\n    public enum TextureFilterContent\n    {\n        /// <summary>\n        /// Use linear filtering.\n        /// </summary>\n\t\tLinear,\n        /// <summary>\n        /// Use point filtering.\n        /// </summary>\n\t\tPoint,\n        /// <summary>\n        /// Use anisotropic filtering.\n        /// </summary>\n\t\tAnisotropic,\n        /// <summary>\n        /// Use linear filtering to shrink or expand, and point filtering between mipmap levels (mip).\n        /// </summary>\n        LinearMipPoint,\n        /// <summary>\n        /// Use point filtering to shrink (minify) or expand (magnify), and linear filtering between mipmap levels.\n        /// </summary>\n\t\tPointMipLinear,\n        /// <summary>\n        /// Use linear filtering to shrink, point filtering to expand, and linear filtering between mipmap levels.\n        /// </summary>\n\t\tMinLinearMagPointMipLinear,\n        /// <summary>\n        /// Use linear filtering to shrink, point filtering to expand, and point filtering between mipmap levels.\n        /// </summary>\n\t\tMinLinearMagPointMipPoint,\n        /// <summary>\n        /// Use point filtering to shrink, linear filtering to expand, and linear filtering between mipmap levels.\n        /// </summary>\n\t\tMinPointMagLinearMipLinear,\n        /// <summary>\n        /// Use point filtering to shrink, linear filtering to expand, and point filtering between mipmap levels.\n        /// </summary>\n\t\tMinPointMagLinearMipPoint\n    }\n\n    /// <summary>\n    /// Filtering modes for texture samplers.\n    /// </summary>\n    public enum TextureFilterModeContent\n    {\n        Default,\n        Comparison\n    }\n\n    /// <summary>\n    /// The comparison function used for depth, stencil, and alpha tests.\n    /// </summary>\n    public enum CompareFunctionContent\n    {\n        /// <summary>\n        /// Always passes the test.\n        /// </summary>\n        Always,\n        /// <summary>\n        /// Never passes the test.\n        /// </summary>\n        Never,\n        /// <summary>\n        /// Passes the test when the new pixel value is less than current pixel value.\n        /// </summary>\n        Less,\n        /// <summary>\n        /// Passes the test when the new pixel value is less than or equal to current pixel value.\n        /// </summary>\n        LessEqual,\n        /// <summary>\n        /// Passes the test when the new pixel value is equal to current pixel value.\n        /// </summary>\n        Equal,\n        /// <summary>\n        /// Passes the test when the new pixel value is greater than or equal to current pixel value.\n        /// </summary>\n        GreaterEqual,\n        /// <summary>\n        /// Passes the test when the new pixel value is greater than current pixel value.\n        /// </summary>\n        Greater,\n        /// <summary>\n        /// Passes the test when the new pixel value does not equal to current pixel value.\n        /// </summary>\n        NotEqual\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/FXParser.tpg",
    "content": "// KNI Effect Parser\n//\n// For use with our fork of the \"Tiny Parser Generator\"\n// https://github.com/kniEngine/TinyPG\n//\n\n<% @TinyPG Namespace=\"Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\" Language=\"C#\"%>\n\n[Skip] BlockComment -> @\"/\\*([^*]|\\*[^/])*\\*/\";\n[Skip] Comment -> @\"//[^\\n\\r]*\";\n[Skip] Whitespace -> @\"[ \\t\\n\\r]+\";\n[FileAndLine] LinePragma -> @\"^[ \\t]*#line[ \\t]*(?<Line>\\d*)[ \\t]*(\\\"\"(?<File>[^\\\"\"\\\\]*(?:\\\\.[^\\\"\"\\\\]*)*)\\\"\")?\\n\";\n\n// TOKENS\n[IgnoreCase] Pass -> @\"pass\";\n[IgnoreCase] Technique -> @\"technique\";\n[IgnoreCase] Sampler -> @\"sampler1D|sampler2D|sampler3D|samplerCUBE|SamplerState|sampler\";\n[IgnoreCase] SamplerState -> @\"sampler_state\";\n[IgnoreCase] VertexShader -> @\"VertexShader\";\n[IgnoreCase] PixelShader -> @\"PixelShader\";\n[IgnoreCase] ComputeShader -> @\"ComputeShader\";\n[IgnoreCase] Register -> @\"register\";\n[IgnoreCase] Boolean -> @\"true|false|0|1\";\nNumber -> @\"[+-]? ?[0-9]?\\.?[0-9]+[fF]?\";\n[IgnoreCase] HexColor -> @\"0x[0-9a-f]{6}([0-9a-f][0-9a-f])?\";\nIdentifier -> @\"[A-Za-z_][A-Za-z0-9_]*\";\nOpenBracket -> @\"{\";\nCloseBracket -> @\"}\";\nEquals -> @\"=\";\nColon -> @\":\";\nComma -> @\",\";\nSemicolon -> @\";\";\nOr -> @\"\\|\";\nOpenParenthesis -> @\"\\(\";\nCloseParenthesis -> @\"\\)\";\nOpenSquareBracket -> @\"\\[\";\nCloseSquareBracket -> @\"\\]\";\nLessThan -> @\"<\";\nGreaterThan -> @\">\";\n[IgnoreCase] Compile -> @\"compile\";\nShaderModel -> @\"[A-Za-z_][A-Za-z0-9_]*\";\nCode -> @\"[\\S]+\";\nEndOfFile -> @\"^$\";\n\n// Sampler states\n[IgnoreCase] MinFilter -> @\"MinFilter\";\n[IgnoreCase] MagFilter -> @\"MagFilter\";\n[IgnoreCase] MipFilter -> @\"MipFilter\";\n[IgnoreCase] Filter -> @\"Filter\";\n[IgnoreCase] Texture -> @\"Texture\";\n[IgnoreCase] AddressU -> @\"AddressU\";\n[IgnoreCase] AddressV -> @\"AddressV\";\n[IgnoreCase] AddressW -> @\"AddressW\";\n[IgnoreCase] BorderColor -> @\"BorderColor\";\n[IgnoreCase] MaxAnisotropy -> @\"MaxAnisotropy\";\n[IgnoreCase] MaxMipLevel -> @\"MaxMipLevel|MaxLod\";\n[IgnoreCase] MipLodBias -> @\"MipLodBias\";\n\n// Address Mode\n[IgnoreCase] Clamp -> @\"Clamp\";\n[IgnoreCase] Wrap -> @\"Wrap\";\n[IgnoreCase] Mirror -> @\"Mirror\";\n[IgnoreCase] Border -> @\"Border\";\n\n// Texture Filters\n[IgnoreCase] None -> @\"None\";\n[IgnoreCase] Linear -> @\"Linear\";\n[IgnoreCase] Point -> @\"Point\";\n[IgnoreCase] Anisotropic -> @\"Anisotropic\";\n\n// Render states\n[IgnoreCase] AlphaBlendEnable -> @\"AlphaBlendEnable\";\n[IgnoreCase] SrcBlend -> @\"SrcBlend\";\n[IgnoreCase] DestBlend -> @\"DestBlend\";\n[IgnoreCase] BlendOp -> @\"BlendOp\";\n[IgnoreCase] ColorWriteEnable -> @\"ColorWriteEnable\";\n[IgnoreCase] ZEnable -> @\"ZEnable\";\n[IgnoreCase] ZWriteEnable -> @\"ZWriteEnable\";\n[IgnoreCase] ZFunc-> @\"ZFunc\";\n[IgnoreCase] DepthBias -> @\"DepthBias\";\n[IgnoreCase] CullMode -> @\"CullMode\";\n[IgnoreCase] FillMode -> @\"FillMode\";\n[IgnoreCase] MultiSampleAntiAlias -> @\"MultiSampleAntiAlias\";\n[IgnoreCase] ScissorTestEnable -> @\"ScissorTestEnable\";\n[IgnoreCase] SlopeScaleDepthBias -> @\"SlopeScaleDepthBias\";\n[IgnoreCase] StencilEnable -> @\"StencilEnable\";\n[IgnoreCase] StencilFail -> @\"StencilFail\";\n[IgnoreCase] StencilFunc -> @\"StencilFunc\";\n[IgnoreCase] StencilMask -> @\"StencilMask\";\n[IgnoreCase] StencilPass -> @\"StencilPass\";\n[IgnoreCase] StencilRef -> @\"StencilRef\";\n[IgnoreCase] StencilWriteMask -> @\"StencilWriteMask\";\n[IgnoreCase] StencilZFail -> @\"StencilZFail\";\n \n\n// Compare function\n[IgnoreCase] Never -> @\"Never\";\n[IgnoreCase] Less -> @\"Less\";\n[IgnoreCase] Equal -> @\"Equal\";\n[IgnoreCase] LessEqual -> @\"LessEqual\";\n[IgnoreCase] Greater -> @\"Greater\";\n[IgnoreCase] NotEqual -> @\"NotEqual\";\n[IgnoreCase] GreaterEqual -> @\"GreaterEqual\";\n[IgnoreCase] Always -> @\"Always\";\n\n// Stencil operation\n[IgnoreCase] Keep -> @\"Keep\";\n[IgnoreCase] Zero -> @\"Zero\";\n[IgnoreCase] Replace -> @\"Replace\";\n[IgnoreCase] IncrSat -> @\"IncrSat\";\n[IgnoreCase] DecrSat -> @\"DecrSat\";\n[IgnoreCase] Invert -> @\"Invert\";\n[IgnoreCase] Incr -> @\"Incr\";\n[IgnoreCase] Decr -> @\"Decr\";\n\n// Colors\n[IgnoreCase] Red -> @\"Red\";\n[IgnoreCase] Green -> @\"Green\";\n[IgnoreCase] Blue -> @\"Blue\";\n[IgnoreCase] Alpha -> @\"Alpha\";\n[IgnoreCase] All -> @\"All\";\n\n// Cull mode\n[IgnoreCase] Cw -> @\"Cw\";\n[IgnoreCase] Ccw -> @\"Ccw\";\n\n// Fill mode\n[IgnoreCase] Solid -> @\"Solid\";\n[IgnoreCase] WireFrame -> @\"WireFrame\";\n\n// Blend function\n[IgnoreCase] Add -> @\"Add\";\n[IgnoreCase] Subtract -> @\"Subtract\";\n[IgnoreCase] RevSubtract -> @\"RevSubtract\";\n[IgnoreCase] Min -> @\"Min\";\n[IgnoreCase] Max -> @\"Max\";\n\n// Blend \n[IgnoreCase] Zero -> @\"Zero\";\n[IgnoreCase] One -> @\"One\";\n[IgnoreCase] SrcColor -> @\"SrcColor\";\n[IgnoreCase] InvSrcColor -> @\"InvSrcColor\";\n[IgnoreCase] SrcAlpha -> @\"SrcAlpha\";\n[IgnoreCase] InvSrcAlpha -> @\"InvSrcAlpha\";\n[IgnoreCase] DestAlpha -> @\"DestAlpha\";\n[IgnoreCase] InvDestAlpha -> @\"InvDestAlpha\";\n[IgnoreCase] DestColor -> @\"DestColor\";\n[IgnoreCase] InvDestColor -> @\"InvDestColor\";\n[IgnoreCase] SrcAlphaSat -> @\"SrcAlphaSat\";\n[IgnoreCase] BlendFactor -> @\"BlendFactor\";\n[IgnoreCase] InvBlendFactor -> @\"InvBlendFactor\";\n\n\n// Productions\nStart -> (Code | Technique_Declaration | Sampler_Declaration)* EndOfFile\n{\n   var shader = new ShaderInfo();\n\n   foreach (var node in Nodes)\n      node.Eval(tree, shader);\n\n   return shader; \n};\n\nTechnique_Declaration -> Technique Identifier? OpenBracket Pass_Declaration+ CloseBracket \n{\n   var technique = new TechniqueInfo();\n   technique.name = $Identifier as string ?? string.Empty;\n   technique.startPos = Token.StartPos;\n   technique.length = Token.Length;\n\n   foreach (var node in Nodes)\n      node.Eval(tree, technique);\n   \n   // Make sure we have at least one pass.\n   if (technique.Passes.Count > 0)\n   {\n      var shaderInfo = paramlist[0] as ShaderInfo;\n      shaderInfo.Techniques.Add(technique);\n   }\n\n   return null;\n};\n\nFillMode_Solid -> Solid { return FillModeContent.Solid; };\nFillMode_WireFrame -> WireFrame { return FillModeContent.WireFrame; };\nFillModes -> (FillMode_Solid|FillMode_WireFrame)\n{\n\treturn $FillMode_Solid ?? $FillMode_WireFrame;\n};\n\nCullMode_None -> None { return CullModeContent.None; };\nCullMode_Cw -> Cw { return CullModeContent.CullClockwiseFace; };\nCullMode_Ccw -> Ccw { return CullModeContent.CullCounterClockwiseFace; };\nCullModes -> (CullMode_None|CullMode_Cw|CullMode_Ccw)\n{\n\treturn $CullMode_None ?? $CullMode_Cw ?? $CullMode_Ccw;\n};\n\nColors_None -> None { return ColorWriteChannelsContent.None; };\nColors_Red -> Red { return ColorWriteChannelsContent.Red; };\nColors_Green -> Green { return ColorWriteChannelsContent.Green; };\nColors_Blue -> Blue { return ColorWriteChannelsContent.Blue; };\nColors_Alpha -> Alpha { return ColorWriteChannelsContent.Alpha; };\nColors_All -> All { return ColorWriteChannelsContent.All; };\nColors_Boolean -> Boolean { return ParseTreeTools.ParseBool((string)$Boolean) ?  ColorWriteChannelsContent.All : ColorWriteChannelsContent.None; };\nColors -> (Colors_Red|Colors_Green|Colors_Blue|Colors_Alpha|Colors_None|Colors_All|Colors_Boolean)\n{\n\treturn $Colors_Red ?? $Colors_Green ?? $Colors_Blue ?? $Colors_Alpha ?? $Colors_None ?? $Colors_All ?? $Colors_Boolean;\n};\nColorsMasks -> Colors (Or Colors)? (Or Colors)? (Or Colors)?\n{\n\treturn\t(ColorWriteChannelsContent)($Colors[0] ?? 0) | \n\t\t\t(ColorWriteChannelsContent)($Colors[1] ?? 0) | \n\t\t\t(ColorWriteChannelsContent)($Colors[2] ?? 0) | \n\t\t\t(ColorWriteChannelsContent)($Colors[3] ?? 0);\n};\n\nBlend_Zero -> Zero { return BlendContent.Zero; };\nBlend_One -> One { return BlendContent.One; };\nBlend_SrcColor -> SrcColor { return BlendContent.SourceColor; };\nBlend_InvSrcColor -> InvSrcColor { return BlendContent.InverseSourceColor; };\nBlend_SrcAlpha -> SrcAlpha { return BlendContent.SourceAlpha; };\nBlend_InvSrcAlpha -> InvSrcAlpha { return BlendContent.InverseSourceAlpha; };\nBlend_DestAlpha -> DestAlpha { return BlendContent.DestinationAlpha; };\nBlend_InvDestAlpha -> InvDestAlpha { return BlendContent.InverseDestinationAlpha; };\nBlend_DestColor -> DestColor { return BlendContent.DestinationColor; };\nBlend_InvDestColor -> InvDestColor { return BlendContent.InverseDestinationColor; };\nBlend_SrcAlphaSat -> SrcAlphaSat { return BlendContent.SourceAlphaSaturation; };\nBlend_BlendFactor -> BlendFactor { return BlendContent.BlendFactor; };\nBlend_InvBlendFactor -> InvBlendFactor { return BlendContent.InverseBlendFactor; };\nBlends -> (\tBlend_Zero|Blend_One|Blend_SrcColor|Blend_InvSrcColor|Blend_SrcAlpha|Blend_InvSrcAlpha|\n\t\t\tBlend_DestAlpha|Blend_InvDestAlpha|Blend_DestColor|Blend_InvDestColor|Blend_SrcAlphaSat|\n\t\t\tBlend_BlendFactor|Blend_InvBlendFactor)\n{\n\treturn\t$Blend_Zero ?? $Blend_One ?? $Blend_SrcColor ?? $Blend_InvSrcColor ?? $Blend_SrcAlpha ?? $Blend_InvSrcAlpha ?? \n\t\t\t$Blend_DestAlpha ?? $Blend_InvDestAlpha ?? $Blend_DestColor ?? $Blend_InvDestColor ?? $Blend_SrcAlphaSat ??\n\t\t\t$Blend_BlendFactor ?? $Blend_InvBlendFactor;\n};\n\nBlendOp_Add -> Add { return BlendFunctionContent.Add; };\nBlendOp_Subtract -> Subtract { return BlendFunctionContent.Subtract; };\nBlendOp_RevSubtract -> RevSubtract { return BlendFunctionContent.ReverseSubtract; };\nBlendOp_Min -> Min { return BlendFunctionContent.Min; };\nBlendOp_Max -> Max { return BlendFunctionContent.Max; };\nBlendOps -> (BlendOp_Add|BlendOp_Subtract|BlendOp_RevSubtract|BlendOp_Min|BlendOp_Max)\n{\n\treturn\t$BlendOp_Add ?? $BlendOp_Subtract ?? $BlendOp_RevSubtract ?? $BlendOp_Min ?? $BlendOp_Max;\n};\n\nCmpFunc_Never -> Never { return CompareFunctionContent.Never; };\nCmpFunc_Less -> Less { return CompareFunctionContent.Less; };\nCmpFunc_Equal -> Equal { return CompareFunctionContent.Equal; };\nCmpFunc_LessEqual -> LessEqual { return CompareFunctionContent.LessEqual; };\nCmpFunc_Greater -> Greater { return CompareFunctionContent.Greater; };\nCmpFunc_NotEqual -> NotEqual { return CompareFunctionContent.NotEqual; };\nCmpFunc_GreaterEqual -> GreaterEqual { return CompareFunctionContent.GreaterEqual; };\nCmpFunc_Always -> Always { return CompareFunctionContent.Always; };\nCmpFunc -> (CmpFunc_Never|CmpFunc_Less|CmpFunc_Equal|CmpFunc_LessEqual|CmpFunc_Greater|CmpFunc_NotEqual|CmpFunc_GreaterEqual|CmpFunc_Always)\n{\n\treturn\t$CmpFunc_Never ?? $CmpFunc_Less ?? $CmpFunc_Equal ?? $CmpFunc_LessEqual ?? $CmpFunc_Greater ?? $CmpFunc_NotEqual ?? $CmpFunc_GreaterEqual ?? $CmpFunc_Always;\n};\n\nStencilOp_Keep -> Keep { return StencilOperationContent.Keep; };\nStencilOp_Zero -> Zero { return StencilOperationContent.Zero; };\nStencilOp_Replace -> Replace { return StencilOperationContent.Replace; };\nStencilOp_IncrSat -> IncrSat { return StencilOperationContent.IncrementSaturation; };\nStencilOp_DecrSat -> DecrSat { return StencilOperationContent.DecrementSaturation; };\nStencilOp_Invert -> Invert { return StencilOperationContent.Invert; };\nStencilOp_Incr -> Incr { return StencilOperationContent.Increment; };\nStencilOp_Decr -> Decr { return StencilOperationContent.Decrement; };\nStencilOp -> (StencilOp_Keep|StencilOp_Zero|StencilOp_Replace|StencilOp_IncrSat|StencilOp_DecrSat|StencilOp_Invert|StencilOp_Incr|StencilOp_Decr)\n{\n\treturn\t$StencilOp_Keep ?? $StencilOp_Zero ?? $StencilOp_Replace ?? $StencilOp_IncrSat ?? $StencilOp_DecrSat ?? $StencilOp_Invert ?? $StencilOp_Incr ?? $StencilOp_Decr;\n};\n\n// Render states\nRender_State_CullMode -> CullMode Equals CullModes Semicolon { (paramlist[0] as PassInfo).CullMode = (CullModeContent)$CullModes; return null; };\nRender_State_FillMode -> FillMode Equals FillModes Semicolon { (paramlist[0] as PassInfo).FillMode = (FillModeContent)$FillModes; return null; };\nRender_State_AlphaBlendEnable -> AlphaBlendEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).AlphaBlendEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; };\nRender_State_SrcBlend -> SrcBlend Equals Blends Semicolon { (paramlist[0] as PassInfo).SrcBlend = (BlendContent)$Blends; return null; };\nRender_State_DestBlend -> DestBlend Equals Blends Semicolon { (paramlist[0] as PassInfo).DestBlend = (BlendContent)$Blends; return null; };\nRender_State_BlendOp -> BlendOp Equals BlendOps Semicolon { (paramlist[0] as PassInfo).BlendOp = (BlendFunctionContent)$BlendOps; return null; };\nRender_State_ColorWriteEnable -> ColorWriteEnable Equals ColorsMasks Semicolon { (paramlist[0] as PassInfo).ColorWriteEnable = (ColorWriteChannelsContent)$ColorsMasks; return null; };\nRender_State_DepthBias -> DepthBias Equals Number Semicolon { (paramlist[0] as PassInfo).DepthBias = ParseTreeTools.ParseFloat((string)$Number); return null; };\nRender_State_SlopeScaleDepthBias -> SlopeScaleDepthBias Equals Number Semicolon { (paramlist[0] as PassInfo).SlopeScaleDepthBias = ParseTreeTools.ParseFloat((string)$Number); return null; };\nRender_State_ZEnable -> ZEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).ZEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; };\nRender_State_ZWriteEnable -> ZWriteEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).ZWriteEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; };\nRender_State_ZFunc -> ZFunc Equals CmpFunc Semicolon { (paramlist[0] as PassInfo).DepthBufferFunction = (CompareFunctionContent)$CmpFunc; return null; };\nRender_State_MultiSampleAntiAlias -> MultiSampleAntiAlias Equals Boolean Semicolon { (paramlist[0] as PassInfo).MultiSampleAntiAlias = ParseTreeTools.ParseBool((string)$Boolean); return null; };\nRender_State_ScissorTestEnable -> ScissorTestEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).ScissorTestEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; };\nRender_State_StencilEnable -> StencilEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).StencilEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; };\nRender_State_StencilFail -> StencilFail Equals StencilOp Semicolon { (paramlist[0] as PassInfo).StencilFail = (StencilOperationContent)$StencilOp; return null; };\nRender_State_StencilFunc -> StencilFunc Equals CmpFunc Semicolon { (paramlist[0] as PassInfo).StencilFunc = (CompareFunctionContent)$CmpFunc; return null; };\nRender_State_StencilMask -> StencilMask Equals Number Semicolon { (paramlist[0] as PassInfo).StencilMask = ParseTreeTools.ParseInt((string)$Number); return null; };\nRender_State_StencilPass -> StencilPass Equals StencilOp Semicolon { (paramlist[0] as PassInfo).StencilPass = (StencilOperationContent)$StencilOp; return null; };\nRender_State_StencilRef -> StencilRef Equals Number Semicolon { (paramlist[0] as PassInfo).StencilRef = ParseTreeTools.ParseInt((string)$Number); return null; };\nRender_State_StencilWriteMask -> StencilWriteMask Equals Number Semicolon { (paramlist[0] as PassInfo).StencilWriteMask = ParseTreeTools.ParseInt((string)$Number); return null; };\nRender_State_StencilZFail -> StencilZFail Equals StencilOp Semicolon { (paramlist[0] as PassInfo).StencilZFail = (StencilOperationContent)$StencilOp; return null; };\n\n\nRender_State_Expression ->\t\n\t\t\t\tRender_State_CullMode |\n\t\t\t\tRender_State_FillMode |\n\t\t\t\tRender_State_AlphaBlendEnable |\n\t\t\t\tRender_State_SrcBlend |\n\t\t\t\tRender_State_DestBlend |\n\t\t\t\tRender_State_BlendOp |\n\t\t\t\tRender_State_ColorWriteEnable |\n\t\t\t\tRender_State_DepthBias |\n\t\t\t\tRender_State_SlopeScaleDepthBias |\n\t\t\t\tRender_State_ZEnable |\n\t\t\t\tRender_State_ZWriteEnable |\n\t\t\t\tRender_State_ZFunc |\n\t\t\t\tRender_State_MultiSampleAntiAlias |\n\t\t\t\tRender_State_ScissorTestEnable |\n\t\t\t\tRender_State_StencilEnable |\n\t\t\t\tRender_State_StencilFail |\n\t\t\t\tRender_State_StencilFunc |\n\t\t\t\tRender_State_StencilMask |\n\t\t\t\tRender_State_StencilPass |\n\t\t\t\tRender_State_StencilRef |\n\t\t\t\tRender_State_StencilWriteMask |\n\t\t\t\tRender_State_StencilZFail;\n\nPass_Declaration ->\tPass Identifier? OpenBracket (VertexShader_Pass_Expression | PixelShader_Pass_Expression | ComputeShader_Pass_Expression | Render_State_Expression)* CloseBracket \n{ \n   var pass = new PassInfo();\n   pass.name = $Identifier as string ?? string.Empty;\n\n   foreach (var node in Nodes)\n      node.Eval(tree, pass);\n\n   // We need to have at least one shader to keep this pass.\n   if (!string.IsNullOrEmpty(pass.psFunction)\n   ||  !string.IsNullOrEmpty(pass.vsFunction)\n   ||  !string.IsNullOrEmpty(pass.csFunction))\n   {\n      var technique = paramlist[0] as TechniqueInfo;\n      technique.Passes.Add(pass);\n   }\n\n   return null;\n};\n\nVertexShader_Pass_Expression -> VertexShader Equals Compile ShaderModel Identifier OpenParenthesis CloseParenthesis Semicolon\n{\n   var pass = paramlist[0] as PassInfo;\n   pass.vsModel = $ShaderModel as string;\n   pass.vsFunction = $Identifier as string;\n   return null;\n};\n\nPixelShader_Pass_Expression -> PixelShader Equals Compile ShaderModel Identifier OpenParenthesis CloseParenthesis Semicolon\n{\n   var pass = paramlist[0] as PassInfo;\n   pass.psModel = $ShaderModel as string;\n   pass.psFunction = $Identifier as string;\n   return null;\n};\n\nComputeShader_Pass_Expression -> ComputeShader Equals Compile ShaderModel Identifier OpenParenthesis CloseParenthesis Semicolon\n{\n   var pass = paramlist[0] as PassInfo;\n   pass.csModel = $ShaderModel as string;\n   pass.csFunction = $Identifier as string;\n   return null;\n};\n\nAddressMode_Clamp -> Clamp { return TextureAddressModeContent.Clamp; };\nAddressMode_Wrap -> Wrap { return TextureAddressModeContent.Wrap; };\nAddressMode_Mirror -> Mirror { return TextureAddressModeContent.Mirror; };\nAddressMode_Border -> Border { return TextureAddressModeContent.Border; };\nAddressMode -> (AddressMode_Clamp|AddressMode_Wrap|AddressMode_Mirror|AddressMode_Border)\n{\n\treturn $AddressMode_Clamp ?? $AddressMode_Wrap ?? $AddressMode_Mirror ?? $AddressMode_Border;\n};\n\nTextureFilter_None -> None { return TextureFilterTypeContent.None; };\nTextureFilter_Linear -> Linear { return TextureFilterTypeContent.Linear; };\nTextureFilter_Point -> Point { return TextureFilterTypeContent.Point; };\nTextureFilter_Anisotropic -> Anisotropic { return TextureFilterTypeContent.Anisotropic; };\nTextureFilter -> (TextureFilter_None|TextureFilter_Linear|TextureFilter_Point|TextureFilter_Anisotropic)\n{\n\treturn $TextureFilter_None ?? $TextureFilter_Linear ?? $TextureFilter_Point ?? $TextureFilter_Anisotropic;\n};\n\n// Sampler States\nSampler_State_Texture -> Texture Equals (LessThan|OpenParenthesis) Identifier (GreaterThan|CloseParenthesis) Semicolon { (paramlist[0] as SamplerStateInfo).TextureName = (string)$Identifier; return null; };\nSampler_State_MinFilter -> MinFilter Equals TextureFilter Semicolon { (paramlist[0] as SamplerStateInfo).MinFilter = (TextureFilterTypeContent)$TextureFilter; return null; };\nSampler_State_MagFilter -> MagFilter Equals TextureFilter Semicolon { (paramlist[0] as SamplerStateInfo).MagFilter = (TextureFilterTypeContent)$TextureFilter; return null; };\nSampler_State_MipFilter -> MipFilter Equals TextureFilter Semicolon { (paramlist[0] as SamplerStateInfo).MipFilter = (TextureFilterTypeContent)$TextureFilter; return null; };\nSampler_State_Filter -> Filter Equals TextureFilter Semicolon { (paramlist[0] as SamplerStateInfo).Filter = (TextureFilterTypeContent)$TextureFilter; return null; };\nSampler_State_AddressU -> AddressU Equals AddressMode Semicolon { (paramlist[0] as SamplerStateInfo).AddressU = (TextureAddressModeContent)$AddressMode; return null; };\nSampler_State_AddressV -> AddressV Equals AddressMode Semicolon { (paramlist[0] as SamplerStateInfo).AddressV = (TextureAddressModeContent)$AddressMode; return null; };\nSampler_State_AddressW -> AddressW Equals AddressMode Semicolon { (paramlist[0] as SamplerStateInfo).AddressW = (TextureAddressModeContent)$AddressMode; return null; };\nSampler_State_BorderColor -> BorderColor Equals HexColor Semicolon { (paramlist[0] as SamplerStateInfo).BorderColor = ParseTreeTools.ParseColor((string)$HexColor); return null; };\nSampler_State_MaxMipLevel -> MaxMipLevel Equals Number Semicolon { (paramlist[0] as SamplerStateInfo).MaxMipLevel = ParseTreeTools.ParseInt((string)$Number); return null; };\nSampler_State_MaxAnisotropy -> MaxAnisotropy Equals Number Semicolon { (paramlist[0] as SamplerStateInfo).MaxAnisotropy = ParseTreeTools.ParseInt((string)$Number); return null; };\nSampler_State_MipLodBias -> MipLodBias Equals Number Semicolon { (paramlist[0] as SamplerStateInfo).MipMapLevelOfDetailBias = ParseTreeTools.ParseFloat((string)$Number); return null; };\n\n\nSampler_State_Expression ->\t\n\t\t\t\tSampler_State_Texture |\n\t\t\t\tSampler_State_MinFilter |\n\t\t\t\tSampler_State_MagFilter |\n\t\t\t\tSampler_State_MipFilter |\n\t\t\t\tSampler_State_Filter |\n\t\t\t\tSampler_State_AddressU |\n\t\t\t\tSampler_State_AddressV |\n\t\t\t\tSampler_State_AddressW |\n                Sampler_State_BorderColor |\n\t\t\t\tSampler_State_MaxMipLevel |\n\t\t\t\tSampler_State_MaxAnisotropy |\n\t\t\t\tSampler_State_MipLodBias;\n\nSampler_Register_Expression -> Colon Register OpenParenthesis Identifier (Comma Identifier (OpenSquareBracket Number CloseSquareBracket)?)? CloseParenthesis\n{\n\treturn null;\n};\n\nSampler_Declaration_States -> (Equals SamplerState)? OpenBracket Sampler_State_Expression* CloseBracket;\n\nSampler_Declaration -> Sampler Identifier Sampler_Register_Expression* Sampler_Declaration_States? (Semicolon | Comma | CloseParenthesis)\n{\n\t// if there is a comma or closing paren at the end this is a sampler as a parameter of a function\n\tif ($Semicolon == null) return null;\n\n\tvar sampler = new SamplerStateInfo();\n\tsampler.Name = $Identifier[0] as string;\n\t\n\tforeach (ParseNode node in Nodes)\n\t\tnode.Eval(tree, sampler);\n\t\n\tvar shaderInfo = paramlist[0] as ShaderInfo;\n\tshaderInfo.SamplerStates.Add(sampler.Name, sampler);\n\t\n\treturn null;\n};\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/ParseTree.cs",
    "content": "// Generated by TinyPG v1.3 available at www.codeproject.com\n\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Xml.Serialization;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\n{\n    #region ParseTree\n    [Serializable]\n    public class ParseErrors : List<ParseError>\n    {\n    }\n\n    [Serializable]\n    public class ParseError\n    {\n        private string file;\n        private string message;\n        private int code;\n        private int line;\n        private int col;\n        private int pos;\n        private int length;\n\n        public string File { get { return file; } }\n        public int Code { get { return code; } }\n        public int Line { get { return line; } }\n        public int Column { get { return col; } }\n        public int Position { get { return pos; } }\n        public int Length { get { return length; } }\n        public string Message { get { return message; } }\n\n        // just for the sake of serialization\n        public ParseError()\n        {\n        }\n\n        public ParseError(string message, int code, ParseNode node) : this(message, code, node.Token)\n        {\n        }\n\n        public ParseError(string message, int code, Token token) : this(message, code, token.File, token.Line, token.Column, token.StartPos, token.Length)\n        {\n        }\n\n        public ParseError(string message, int code) : this(message, code, string.Empty, 0, 0, 0, 0)\n        {\n        }\n\n        public ParseError(string message, int code, string file, int line, int col, int pos, int length)\n        {\n            this.file = file;\n            this.message = message;\n            this.code = code;\n            this.line = line;\n            this.col = col;\n            this.pos = pos;\n            this.length = length;\n        }\n    }\n\n    // rootlevel of the node tree\n    [Serializable]\n    public partial class ParseTree : ParseNode\n    {\n        public ParseErrors Errors;\n\n        public List<Token> Skipped;\n\n        public ParseTree() : base(new Token(), \"ParseTree\")\n        {\n            Token.Type = TokenType.Start;\n            Token.Text = \"Root\";\n            Errors = new ParseErrors();\n        }\n\n        public string PrintTree()\n        {\n            StringBuilder sb = new StringBuilder();\n            int indent = 0;\n            PrintNode(sb, this, indent);\n            return sb.ToString();\n        }\n\n        private void PrintNode(StringBuilder sb, ParseNode node, int indent)\n        {\n            \n            string space = \"\".PadLeft(indent, ' ');\n\n            sb.Append(space);\n            sb.AppendLine(node.Text);\n\n            foreach (ParseNode n in node.Nodes)\n                PrintNode(sb, n, indent + 2);\n        }\n        \n        /// <summary>\n        /// this is the entry point for executing and evaluating the parse tree.\n        /// </summary>\n        /// <param name=\"paramlist\">additional optional input parameters</param>\n        /// <returns>the output of the evaluation function</returns>\n        public object Eval(params object[] paramlist)\n        {\n            return Nodes[0].Eval(this, paramlist);\n        }\n    }\n\n    [Serializable]\n    [XmlInclude(typeof(ParseTree))]\n    public partial class ParseNode\n    {\n        protected string text;\n        protected List<ParseNode> nodes;\n        \n        public List<ParseNode> Nodes { get {return nodes;} }\n        \n        [XmlIgnore] // avoid circular references when serializing\n        public ParseNode Parent;\n        public Token Token; // the token/rule\n\n        [XmlIgnore] // skip redundant text (is part of Token)\n        public string Text { // text to display in parse tree \n            get { return text;} \n            set { text = value; }\n        } \n\n        public virtual ParseNode CreateNode(Token token, string text)\n        {\n            ParseNode node = new ParseNode(token, text);\n            node.Parent = this;\n            return node;\n        }\n\n        protected ParseNode(Token token, string text)\n        {\n            this.Token = token;\n            this.text = text;\n            this.nodes = new List<ParseNode>();\n        }\n\n        protected object GetValue(ParseTree tree, TokenType type, int index)\n        {\n            return GetValue(tree, type, ref index);\n        }\n\n        protected object GetValue(ParseTree tree, TokenType type, ref int index)\n        {\n            object o = null;\n            if (index < 0) return o;\n\n            // left to right\n            foreach (ParseNode node in nodes)\n            {\n                if (node.Token.Type == type)\n                {\n                    index--;\n                    if (index < 0)\n                    {\n                        o = node.Eval(tree);\n                        break;\n                    }\n                }\n            }\n            return o;\n        }\n\n        /// <summary>\n        /// this implements the evaluation functionality, cannot be used directly\n        /// </summary>\n        /// <param name=\"tree\">the parsetree itself</param>\n        /// <param name=\"paramlist\">optional input parameters</param>\n        /// <returns>a partial result of the evaluation</returns>\n        internal object Eval(ParseTree tree, params object[] paramlist)\n        {\n            object Value = null;\n\n            switch (Token.Type)\n            {\n                case TokenType.Start:\n                    Value = EvalStart(tree, paramlist);\n                    break;\n                case TokenType.Technique_Declaration:\n                    Value = EvalTechnique_Declaration(tree, paramlist);\n                    break;\n                case TokenType.FillMode_Solid:\n                    Value = EvalFillMode_Solid(tree, paramlist);\n                    break;\n                case TokenType.FillMode_WireFrame:\n                    Value = EvalFillMode_WireFrame(tree, paramlist);\n                    break;\n                case TokenType.FillModes:\n                    Value = EvalFillModes(tree, paramlist);\n                    break;\n                case TokenType.CullMode_None:\n                    Value = EvalCullMode_None(tree, paramlist);\n                    break;\n                case TokenType.CullMode_Cw:\n                    Value = EvalCullMode_Cw(tree, paramlist);\n                    break;\n                case TokenType.CullMode_Ccw:\n                    Value = EvalCullMode_Ccw(tree, paramlist);\n                    break;\n                case TokenType.CullModes:\n                    Value = EvalCullModes(tree, paramlist);\n                    break;\n                case TokenType.Colors_None:\n                    Value = EvalColors_None(tree, paramlist);\n                    break;\n                case TokenType.Colors_Red:\n                    Value = EvalColors_Red(tree, paramlist);\n                    break;\n                case TokenType.Colors_Green:\n                    Value = EvalColors_Green(tree, paramlist);\n                    break;\n                case TokenType.Colors_Blue:\n                    Value = EvalColors_Blue(tree, paramlist);\n                    break;\n                case TokenType.Colors_Alpha:\n                    Value = EvalColors_Alpha(tree, paramlist);\n                    break;\n                case TokenType.Colors_All:\n                    Value = EvalColors_All(tree, paramlist);\n                    break;\n                case TokenType.Colors_Boolean:\n                    Value = EvalColors_Boolean(tree, paramlist);\n                    break;\n                case TokenType.Colors:\n                    Value = EvalColors(tree, paramlist);\n                    break;\n                case TokenType.ColorsMasks:\n                    Value = EvalColorsMasks(tree, paramlist);\n                    break;\n                case TokenType.Blend_Zero:\n                    Value = EvalBlend_Zero(tree, paramlist);\n                    break;\n                case TokenType.Blend_One:\n                    Value = EvalBlend_One(tree, paramlist);\n                    break;\n                case TokenType.Blend_SrcColor:\n                    Value = EvalBlend_SrcColor(tree, paramlist);\n                    break;\n                case TokenType.Blend_InvSrcColor:\n                    Value = EvalBlend_InvSrcColor(tree, paramlist);\n                    break;\n                case TokenType.Blend_SrcAlpha:\n                    Value = EvalBlend_SrcAlpha(tree, paramlist);\n                    break;\n                case TokenType.Blend_InvSrcAlpha:\n                    Value = EvalBlend_InvSrcAlpha(tree, paramlist);\n                    break;\n                case TokenType.Blend_DestAlpha:\n                    Value = EvalBlend_DestAlpha(tree, paramlist);\n                    break;\n                case TokenType.Blend_InvDestAlpha:\n                    Value = EvalBlend_InvDestAlpha(tree, paramlist);\n                    break;\n                case TokenType.Blend_DestColor:\n                    Value = EvalBlend_DestColor(tree, paramlist);\n                    break;\n                case TokenType.Blend_InvDestColor:\n                    Value = EvalBlend_InvDestColor(tree, paramlist);\n                    break;\n                case TokenType.Blend_SrcAlphaSat:\n                    Value = EvalBlend_SrcAlphaSat(tree, paramlist);\n                    break;\n                case TokenType.Blend_BlendFactor:\n                    Value = EvalBlend_BlendFactor(tree, paramlist);\n                    break;\n                case TokenType.Blend_InvBlendFactor:\n                    Value = EvalBlend_InvBlendFactor(tree, paramlist);\n                    break;\n                case TokenType.Blends:\n                    Value = EvalBlends(tree, paramlist);\n                    break;\n                case TokenType.BlendOp_Add:\n                    Value = EvalBlendOp_Add(tree, paramlist);\n                    break;\n                case TokenType.BlendOp_Subtract:\n                    Value = EvalBlendOp_Subtract(tree, paramlist);\n                    break;\n                case TokenType.BlendOp_RevSubtract:\n                    Value = EvalBlendOp_RevSubtract(tree, paramlist);\n                    break;\n                case TokenType.BlendOp_Min:\n                    Value = EvalBlendOp_Min(tree, paramlist);\n                    break;\n                case TokenType.BlendOp_Max:\n                    Value = EvalBlendOp_Max(tree, paramlist);\n                    break;\n                case TokenType.BlendOps:\n                    Value = EvalBlendOps(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc_Never:\n                    Value = EvalCmpFunc_Never(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc_Less:\n                    Value = EvalCmpFunc_Less(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc_Equal:\n                    Value = EvalCmpFunc_Equal(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc_LessEqual:\n                    Value = EvalCmpFunc_LessEqual(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc_Greater:\n                    Value = EvalCmpFunc_Greater(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc_NotEqual:\n                    Value = EvalCmpFunc_NotEqual(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc_GreaterEqual:\n                    Value = EvalCmpFunc_GreaterEqual(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc_Always:\n                    Value = EvalCmpFunc_Always(tree, paramlist);\n                    break;\n                case TokenType.CmpFunc:\n                    Value = EvalCmpFunc(tree, paramlist);\n                    break;\n                case TokenType.StencilOp_Keep:\n                    Value = EvalStencilOp_Keep(tree, paramlist);\n                    break;\n                case TokenType.StencilOp_Zero:\n                    Value = EvalStencilOp_Zero(tree, paramlist);\n                    break;\n                case TokenType.StencilOp_Replace:\n                    Value = EvalStencilOp_Replace(tree, paramlist);\n                    break;\n                case TokenType.StencilOp_IncrSat:\n                    Value = EvalStencilOp_IncrSat(tree, paramlist);\n                    break;\n                case TokenType.StencilOp_DecrSat:\n                    Value = EvalStencilOp_DecrSat(tree, paramlist);\n                    break;\n                case TokenType.StencilOp_Invert:\n                    Value = EvalStencilOp_Invert(tree, paramlist);\n                    break;\n                case TokenType.StencilOp_Incr:\n                    Value = EvalStencilOp_Incr(tree, paramlist);\n                    break;\n                case TokenType.StencilOp_Decr:\n                    Value = EvalStencilOp_Decr(tree, paramlist);\n                    break;\n                case TokenType.StencilOp:\n                    Value = EvalStencilOp(tree, paramlist);\n                    break;\n                case TokenType.Render_State_CullMode:\n                    Value = EvalRender_State_CullMode(tree, paramlist);\n                    break;\n                case TokenType.Render_State_FillMode:\n                    Value = EvalRender_State_FillMode(tree, paramlist);\n                    break;\n                case TokenType.Render_State_AlphaBlendEnable:\n                    Value = EvalRender_State_AlphaBlendEnable(tree, paramlist);\n                    break;\n                case TokenType.Render_State_SrcBlend:\n                    Value = EvalRender_State_SrcBlend(tree, paramlist);\n                    break;\n                case TokenType.Render_State_DestBlend:\n                    Value = EvalRender_State_DestBlend(tree, paramlist);\n                    break;\n                case TokenType.Render_State_BlendOp:\n                    Value = EvalRender_State_BlendOp(tree, paramlist);\n                    break;\n                case TokenType.Render_State_ColorWriteEnable:\n                    Value = EvalRender_State_ColorWriteEnable(tree, paramlist);\n                    break;\n                case TokenType.Render_State_DepthBias:\n                    Value = EvalRender_State_DepthBias(tree, paramlist);\n                    break;\n                case TokenType.Render_State_SlopeScaleDepthBias:\n                    Value = EvalRender_State_SlopeScaleDepthBias(tree, paramlist);\n                    break;\n                case TokenType.Render_State_ZEnable:\n                    Value = EvalRender_State_ZEnable(tree, paramlist);\n                    break;\n                case TokenType.Render_State_ZWriteEnable:\n                    Value = EvalRender_State_ZWriteEnable(tree, paramlist);\n                    break;\n                case TokenType.Render_State_ZFunc:\n                    Value = EvalRender_State_ZFunc(tree, paramlist);\n                    break;\n                case TokenType.Render_State_MultiSampleAntiAlias:\n                    Value = EvalRender_State_MultiSampleAntiAlias(tree, paramlist);\n                    break;\n                case TokenType.Render_State_ScissorTestEnable:\n                    Value = EvalRender_State_ScissorTestEnable(tree, paramlist);\n                    break;\n                case TokenType.Render_State_StencilEnable:\n                    Value = EvalRender_State_StencilEnable(tree, paramlist);\n                    break;\n                case TokenType.Render_State_StencilFail:\n                    Value = EvalRender_State_StencilFail(tree, paramlist);\n                    break;\n                case TokenType.Render_State_StencilFunc:\n                    Value = EvalRender_State_StencilFunc(tree, paramlist);\n                    break;\n                case TokenType.Render_State_StencilMask:\n                    Value = EvalRender_State_StencilMask(tree, paramlist);\n                    break;\n                case TokenType.Render_State_StencilPass:\n                    Value = EvalRender_State_StencilPass(tree, paramlist);\n                    break;\n                case TokenType.Render_State_StencilRef:\n                    Value = EvalRender_State_StencilRef(tree, paramlist);\n                    break;\n                case TokenType.Render_State_StencilWriteMask:\n                    Value = EvalRender_State_StencilWriteMask(tree, paramlist);\n                    break;\n                case TokenType.Render_State_StencilZFail:\n                    Value = EvalRender_State_StencilZFail(tree, paramlist);\n                    break;\n                case TokenType.Render_State_Expression:\n                    Value = EvalRender_State_Expression(tree, paramlist);\n                    break;\n                case TokenType.Pass_Declaration:\n                    Value = EvalPass_Declaration(tree, paramlist);\n                    break;\n                case TokenType.VertexShader_Pass_Expression:\n                    Value = EvalVertexShader_Pass_Expression(tree, paramlist);\n                    break;\n                case TokenType.PixelShader_Pass_Expression:\n                    Value = EvalPixelShader_Pass_Expression(tree, paramlist);\n                    break;\n                case TokenType.ComputeShader_Pass_Expression:\n                    Value = EvalComputeShader_Pass_Expression(tree, paramlist);\n                    break;\n                case TokenType.AddressMode_Clamp:\n                    Value = EvalAddressMode_Clamp(tree, paramlist);\n                    break;\n                case TokenType.AddressMode_Wrap:\n                    Value = EvalAddressMode_Wrap(tree, paramlist);\n                    break;\n                case TokenType.AddressMode_Mirror:\n                    Value = EvalAddressMode_Mirror(tree, paramlist);\n                    break;\n                case TokenType.AddressMode_Border:\n                    Value = EvalAddressMode_Border(tree, paramlist);\n                    break;\n                case TokenType.AddressMode:\n                    Value = EvalAddressMode(tree, paramlist);\n                    break;\n                case TokenType.TextureFilter_None:\n                    Value = EvalTextureFilter_None(tree, paramlist);\n                    break;\n                case TokenType.TextureFilter_Linear:\n                    Value = EvalTextureFilter_Linear(tree, paramlist);\n                    break;\n                case TokenType.TextureFilter_Point:\n                    Value = EvalTextureFilter_Point(tree, paramlist);\n                    break;\n                case TokenType.TextureFilter_Anisotropic:\n                    Value = EvalTextureFilter_Anisotropic(tree, paramlist);\n                    break;\n                case TokenType.TextureFilter:\n                    Value = EvalTextureFilter(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_Texture:\n                    Value = EvalSampler_State_Texture(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_MinFilter:\n                    Value = EvalSampler_State_MinFilter(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_MagFilter:\n                    Value = EvalSampler_State_MagFilter(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_MipFilter:\n                    Value = EvalSampler_State_MipFilter(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_Filter:\n                    Value = EvalSampler_State_Filter(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_AddressU:\n                    Value = EvalSampler_State_AddressU(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_AddressV:\n                    Value = EvalSampler_State_AddressV(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_AddressW:\n                    Value = EvalSampler_State_AddressW(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_BorderColor:\n                    Value = EvalSampler_State_BorderColor(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_MaxMipLevel:\n                    Value = EvalSampler_State_MaxMipLevel(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_MaxAnisotropy:\n                    Value = EvalSampler_State_MaxAnisotropy(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_MipLodBias:\n                    Value = EvalSampler_State_MipLodBias(tree, paramlist);\n                    break;\n                case TokenType.Sampler_State_Expression:\n                    Value = EvalSampler_State_Expression(tree, paramlist);\n                    break;\n                case TokenType.Sampler_Register_Expression:\n                    Value = EvalSampler_Register_Expression(tree, paramlist);\n                    break;\n                case TokenType.Sampler_Declaration_States:\n                    Value = EvalSampler_Declaration_States(tree, paramlist);\n                    break;\n                case TokenType.Sampler_Declaration:\n                    Value = EvalSampler_Declaration(tree, paramlist);\n                    break;\n\n                default:\n                    Value = Token.Text;\n                    break;\n            }\n            return Value;\n        }\n\n        protected virtual object EvalStart(ParseTree tree, params object[] paramlist)\n        {\n            var shader = new ShaderInfo();\n        \n           foreach (var node in Nodes)\n              node.Eval(tree, shader);\n        \n           return shader;\n        }\n\n        protected virtual object EvalTechnique_Declaration(ParseTree tree, params object[] paramlist)\n        {\n            var technique = new TechniqueInfo();\n           technique.name = this.GetValue(tree, TokenType.Identifier, 0) as string ?? string.Empty;\n           technique.startPos = Token.StartPos;\n           technique.length = Token.Length;\n        \n           foreach (var node in Nodes)\n              node.Eval(tree, technique);\n           \n           // Make sure we have at least one pass.\n           if (technique.Passes.Count > 0)\n           {\n              var shaderInfo = paramlist[0] as ShaderInfo;\n              shaderInfo.Techniques.Add(technique);\n           }\n        \n           return null;\n        }\n\n        protected virtual object EvalFillMode_Solid(ParseTree tree, params object[] paramlist)\n        {\n            return FillModeContent.Solid;\n        }\n\n        protected virtual object EvalFillMode_WireFrame(ParseTree tree, params object[] paramlist)\n        {\n            return FillModeContent.WireFrame;\n        }\n\n        protected virtual object EvalFillModes(ParseTree tree, params object[] paramlist)\n        {\n            return this.GetValue(tree, TokenType.FillMode_Solid, 0) ?? this.GetValue(tree, TokenType.FillMode_WireFrame, 0);\n        }\n\n        protected virtual object EvalCullMode_None(ParseTree tree, params object[] paramlist)\n        {\n            return CullModeContent.None;\n        }\n\n        protected virtual object EvalCullMode_Cw(ParseTree tree, params object[] paramlist)\n        {\n            return CullModeContent.CullClockwiseFace;\n        }\n\n        protected virtual object EvalCullMode_Ccw(ParseTree tree, params object[] paramlist)\n        {\n            return CullModeContent.CullCounterClockwiseFace;\n        }\n\n        protected virtual object EvalCullModes(ParseTree tree, params object[] paramlist)\n        {\n            return this.GetValue(tree, TokenType.CullMode_None, 0) ?? this.GetValue(tree, TokenType.CullMode_Cw, 0) ?? this.GetValue(tree, TokenType.CullMode_Ccw, 0);\n        }\n\n        protected virtual object EvalColors_None(ParseTree tree, params object[] paramlist)\n        {\n            return ColorWriteChannelsContent.None;\n        }\n\n        protected virtual object EvalColors_Red(ParseTree tree, params object[] paramlist)\n        {\n            return ColorWriteChannelsContent.Red;\n        }\n\n        protected virtual object EvalColors_Green(ParseTree tree, params object[] paramlist)\n        {\n            return ColorWriteChannelsContent.Green;\n        }\n\n        protected virtual object EvalColors_Blue(ParseTree tree, params object[] paramlist)\n        {\n            return ColorWriteChannelsContent.Blue;\n        }\n\n        protected virtual object EvalColors_Alpha(ParseTree tree, params object[] paramlist)\n        {\n            return ColorWriteChannelsContent.Alpha;\n        }\n\n        protected virtual object EvalColors_All(ParseTree tree, params object[] paramlist)\n        {\n            return ColorWriteChannelsContent.All;\n        }\n\n        protected virtual object EvalColors_Boolean(ParseTree tree, params object[] paramlist)\n        {\n            return ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)) ?  ColorWriteChannelsContent.All : ColorWriteChannelsContent.None;\n        }\n\n        protected virtual object EvalColors(ParseTree tree, params object[] paramlist)\n        {\n            return this.GetValue(tree, TokenType.Colors_Red, 0) ?? this.GetValue(tree, TokenType.Colors_Green, 0) ?? this.GetValue(tree, TokenType.Colors_Blue, 0) ?? this.GetValue(tree, TokenType.Colors_Alpha, 0) ?? this.GetValue(tree, TokenType.Colors_None, 0) ?? this.GetValue(tree, TokenType.Colors_All, 0) ?? this.GetValue(tree, TokenType.Colors_Boolean, 0);\n        }\n\n        protected virtual object EvalColorsMasks(ParseTree tree, params object[] paramlist)\n        {\n            return\t(ColorWriteChannelsContent)(this.GetValue(tree, TokenType.Colors, 0) ?? 0) | \n        \t\t\t(ColorWriteChannelsContent)(this.GetValue(tree, TokenType.Colors, 1) ?? 0) | \n        \t\t\t(ColorWriteChannelsContent)(this.GetValue(tree, TokenType.Colors, 2) ?? 0) | \n        \t\t\t(ColorWriteChannelsContent)(this.GetValue(tree, TokenType.Colors, 3) ?? 0);\n        }\n\n        protected virtual object EvalBlend_Zero(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.Zero;\n        }\n\n        protected virtual object EvalBlend_One(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.One;\n        }\n\n        protected virtual object EvalBlend_SrcColor(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.SourceColor;\n        }\n\n        protected virtual object EvalBlend_InvSrcColor(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.InverseSourceColor;\n        }\n\n        protected virtual object EvalBlend_SrcAlpha(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.SourceAlpha;\n        }\n\n        protected virtual object EvalBlend_InvSrcAlpha(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.InverseSourceAlpha;\n        }\n\n        protected virtual object EvalBlend_DestAlpha(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.DestinationAlpha;\n        }\n\n        protected virtual object EvalBlend_InvDestAlpha(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.InverseDestinationAlpha;\n        }\n\n        protected virtual object EvalBlend_DestColor(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.DestinationColor;\n        }\n\n        protected virtual object EvalBlend_InvDestColor(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.InverseDestinationColor;\n        }\n\n        protected virtual object EvalBlend_SrcAlphaSat(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.SourceAlphaSaturation;\n        }\n\n        protected virtual object EvalBlend_BlendFactor(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.BlendFactor;\n        }\n\n        protected virtual object EvalBlend_InvBlendFactor(ParseTree tree, params object[] paramlist)\n        {\n            return BlendContent.InverseBlendFactor;\n        }\n\n        protected virtual object EvalBlends(ParseTree tree, params object[] paramlist)\n        {\n            return\tthis.GetValue(tree, TokenType.Blend_Zero, 0) ?? this.GetValue(tree, TokenType.Blend_One, 0) ?? this.GetValue(tree, TokenType.Blend_SrcColor, 0) ?? this.GetValue(tree, TokenType.Blend_InvSrcColor, 0) ?? this.GetValue(tree, TokenType.Blend_SrcAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_InvSrcAlpha, 0) ?? \n        \t\t\tthis.GetValue(tree, TokenType.Blend_DestAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_InvDestAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_DestColor, 0) ?? this.GetValue(tree, TokenType.Blend_InvDestColor, 0) ?? this.GetValue(tree, TokenType.Blend_SrcAlphaSat, 0) ??\n        \t\t\tthis.GetValue(tree, TokenType.Blend_BlendFactor, 0) ?? this.GetValue(tree, TokenType.Blend_InvBlendFactor, 0);\n        }\n\n        protected virtual object EvalBlendOp_Add(ParseTree tree, params object[] paramlist)\n        {\n            return BlendFunctionContent.Add;\n        }\n\n        protected virtual object EvalBlendOp_Subtract(ParseTree tree, params object[] paramlist)\n        {\n            return BlendFunctionContent.Subtract;\n        }\n\n        protected virtual object EvalBlendOp_RevSubtract(ParseTree tree, params object[] paramlist)\n        {\n            return BlendFunctionContent.ReverseSubtract;\n        }\n\n        protected virtual object EvalBlendOp_Min(ParseTree tree, params object[] paramlist)\n        {\n            return BlendFunctionContent.Min;\n        }\n\n        protected virtual object EvalBlendOp_Max(ParseTree tree, params object[] paramlist)\n        {\n            return BlendFunctionContent.Max;\n        }\n\n        protected virtual object EvalBlendOps(ParseTree tree, params object[] paramlist)\n        {\n            return\tthis.GetValue(tree, TokenType.BlendOp_Add, 0) ?? this.GetValue(tree, TokenType.BlendOp_Subtract, 0) ?? this.GetValue(tree, TokenType.BlendOp_RevSubtract, 0) ?? this.GetValue(tree, TokenType.BlendOp_Min, 0) ?? this.GetValue(tree, TokenType.BlendOp_Max, 0);\n        }\n\n        protected virtual object EvalCmpFunc_Never(ParseTree tree, params object[] paramlist)\n        {\n            return CompareFunctionContent.Never;\n        }\n\n        protected virtual object EvalCmpFunc_Less(ParseTree tree, params object[] paramlist)\n        {\n            return CompareFunctionContent.Less;\n        }\n\n        protected virtual object EvalCmpFunc_Equal(ParseTree tree, params object[] paramlist)\n        {\n            return CompareFunctionContent.Equal;\n        }\n\n        protected virtual object EvalCmpFunc_LessEqual(ParseTree tree, params object[] paramlist)\n        {\n            return CompareFunctionContent.LessEqual;\n        }\n\n        protected virtual object EvalCmpFunc_Greater(ParseTree tree, params object[] paramlist)\n        {\n            return CompareFunctionContent.Greater;\n        }\n\n        protected virtual object EvalCmpFunc_NotEqual(ParseTree tree, params object[] paramlist)\n        {\n            return CompareFunctionContent.NotEqual;\n        }\n\n        protected virtual object EvalCmpFunc_GreaterEqual(ParseTree tree, params object[] paramlist)\n        {\n            return CompareFunctionContent.GreaterEqual;\n        }\n\n        protected virtual object EvalCmpFunc_Always(ParseTree tree, params object[] paramlist)\n        {\n            return CompareFunctionContent.Always;\n        }\n\n        protected virtual object EvalCmpFunc(ParseTree tree, params object[] paramlist)\n        {\n            return\tthis.GetValue(tree, TokenType.CmpFunc_Never, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Less, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Equal, 0) ?? this.GetValue(tree, TokenType.CmpFunc_LessEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Greater, 0) ?? this.GetValue(tree, TokenType.CmpFunc_NotEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_GreaterEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Always, 0);\n        }\n\n        protected virtual object EvalStencilOp_Keep(ParseTree tree, params object[] paramlist)\n        {\n            return StencilOperationContent.Keep;\n        }\n\n        protected virtual object EvalStencilOp_Zero(ParseTree tree, params object[] paramlist)\n        {\n            return StencilOperationContent.Zero;\n        }\n\n        protected virtual object EvalStencilOp_Replace(ParseTree tree, params object[] paramlist)\n        {\n            return StencilOperationContent.Replace;\n        }\n\n        protected virtual object EvalStencilOp_IncrSat(ParseTree tree, params object[] paramlist)\n        {\n            return StencilOperationContent.IncrementSaturation;\n        }\n\n        protected virtual object EvalStencilOp_DecrSat(ParseTree tree, params object[] paramlist)\n        {\n            return StencilOperationContent.DecrementSaturation;\n        }\n\n        protected virtual object EvalStencilOp_Invert(ParseTree tree, params object[] paramlist)\n        {\n            return StencilOperationContent.Invert;\n        }\n\n        protected virtual object EvalStencilOp_Incr(ParseTree tree, params object[] paramlist)\n        {\n            return StencilOperationContent.Increment;\n        }\n\n        protected virtual object EvalStencilOp_Decr(ParseTree tree, params object[] paramlist)\n        {\n            return StencilOperationContent.Decrement;\n        }\n\n        protected virtual object EvalStencilOp(ParseTree tree, params object[] paramlist)\n        {\n            return\tthis.GetValue(tree, TokenType.StencilOp_Keep, 0) ?? this.GetValue(tree, TokenType.StencilOp_Zero, 0) ?? this.GetValue(tree, TokenType.StencilOp_Replace, 0) ?? this.GetValue(tree, TokenType.StencilOp_IncrSat, 0) ?? this.GetValue(tree, TokenType.StencilOp_DecrSat, 0) ?? this.GetValue(tree, TokenType.StencilOp_Invert, 0) ?? this.GetValue(tree, TokenType.StencilOp_Incr, 0) ?? this.GetValue(tree, TokenType.StencilOp_Decr, 0);\n        }\n\n        protected virtual object EvalRender_State_CullMode(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).CullMode = (CullModeContent)this.GetValue(tree, TokenType.CullModes, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_FillMode(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).FillMode = (FillModeContent)this.GetValue(tree, TokenType.FillModes, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_AlphaBlendEnable(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).AlphaBlendEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_SrcBlend(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).SrcBlend = (BlendContent)this.GetValue(tree, TokenType.Blends, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_DestBlend(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).DestBlend = (BlendContent)this.GetValue(tree, TokenType.Blends, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_BlendOp(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).BlendOp = (BlendFunctionContent)this.GetValue(tree, TokenType.BlendOps, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_ColorWriteEnable(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).ColorWriteEnable = (ColorWriteChannelsContent)this.GetValue(tree, TokenType.ColorsMasks, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_DepthBias(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).DepthBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_SlopeScaleDepthBias(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).SlopeScaleDepthBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_ZEnable(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).ZEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_ZWriteEnable(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).ZWriteEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_ZFunc(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).DepthBufferFunction = (CompareFunctionContent)this.GetValue(tree, TokenType.CmpFunc, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_MultiSampleAntiAlias(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).MultiSampleAntiAlias = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_ScissorTestEnable(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).ScissorTestEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_StencilEnable(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).StencilEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_StencilFail(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).StencilFail = (StencilOperationContent)this.GetValue(tree, TokenType.StencilOp, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_StencilFunc(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).StencilFunc = (CompareFunctionContent)this.GetValue(tree, TokenType.CmpFunc, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_StencilMask(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).StencilMask = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_StencilPass(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).StencilPass = (StencilOperationContent)this.GetValue(tree, TokenType.StencilOp, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_StencilRef(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).StencilRef = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_StencilWriteMask(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).StencilWriteMask = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;\n        }\n\n        protected virtual object EvalRender_State_StencilZFail(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as PassInfo).StencilZFail = (StencilOperationContent)this.GetValue(tree, TokenType.StencilOp, 0); return null;\n        }\n\n        protected virtual object EvalRender_State_Expression(ParseTree tree, params object[] paramlist)\n        {\n            foreach (var node in Nodes)\n                node.Eval(tree, paramlist);\n            return null;\n        }\n\n        protected virtual object EvalPass_Declaration(ParseTree tree, params object[] paramlist)\n        {\n            var pass = new PassInfo();\n           pass.name = this.GetValue(tree, TokenType.Identifier, 0) as string ?? string.Empty;\n        \n           foreach (var node in Nodes)\n              node.Eval(tree, pass);\n        \n           // We need to have at least one shader to keep this pass.\n           if (!string.IsNullOrEmpty(pass.psFunction)\n           ||  !string.IsNullOrEmpty(pass.vsFunction)\n           ||  !string.IsNullOrEmpty(pass.csFunction))\n           {\n              var technique = paramlist[0] as TechniqueInfo;\n              technique.Passes.Add(pass);\n           }\n        \n           return null;\n        }\n\n        protected virtual object EvalVertexShader_Pass_Expression(ParseTree tree, params object[] paramlist)\n        {\n            var pass = paramlist[0] as PassInfo;\n           pass.vsModel = this.GetValue(tree, TokenType.ShaderModel, 0) as string;\n           pass.vsFunction = this.GetValue(tree, TokenType.Identifier, 0) as string;\n           return null;\n        }\n\n        protected virtual object EvalPixelShader_Pass_Expression(ParseTree tree, params object[] paramlist)\n        {\n            var pass = paramlist[0] as PassInfo;\n           pass.psModel = this.GetValue(tree, TokenType.ShaderModel, 0) as string;\n           pass.psFunction = this.GetValue(tree, TokenType.Identifier, 0) as string;\n           return null;\n        }\n\n        protected virtual object EvalComputeShader_Pass_Expression(ParseTree tree, params object[] paramlist)\n        {\n            var pass = paramlist[0] as PassInfo;\n           pass.csModel = this.GetValue(tree, TokenType.ShaderModel, 0) as string;\n           pass.csFunction = this.GetValue(tree, TokenType.Identifier, 0) as string;\n           return null;\n        }\n\n        protected virtual object EvalAddressMode_Clamp(ParseTree tree, params object[] paramlist)\n        {\n            return TextureAddressModeContent.Clamp;\n        }\n\n        protected virtual object EvalAddressMode_Wrap(ParseTree tree, params object[] paramlist)\n        {\n            return TextureAddressModeContent.Wrap;\n        }\n\n        protected virtual object EvalAddressMode_Mirror(ParseTree tree, params object[] paramlist)\n        {\n            return TextureAddressModeContent.Mirror;\n        }\n\n        protected virtual object EvalAddressMode_Border(ParseTree tree, params object[] paramlist)\n        {\n            return TextureAddressModeContent.Border;\n        }\n\n        protected virtual object EvalAddressMode(ParseTree tree, params object[] paramlist)\n        {\n            return this.GetValue(tree, TokenType.AddressMode_Clamp, 0) ?? this.GetValue(tree, TokenType.AddressMode_Wrap, 0) ?? this.GetValue(tree, TokenType.AddressMode_Mirror, 0) ?? this.GetValue(tree, TokenType.AddressMode_Border, 0);\n        }\n\n        protected virtual object EvalTextureFilter_None(ParseTree tree, params object[] paramlist)\n        {\n            return TextureFilterTypeContent.None;\n        }\n\n        protected virtual object EvalTextureFilter_Linear(ParseTree tree, params object[] paramlist)\n        {\n            return TextureFilterTypeContent.Linear;\n        }\n\n        protected virtual object EvalTextureFilter_Point(ParseTree tree, params object[] paramlist)\n        {\n            return TextureFilterTypeContent.Point;\n        }\n\n        protected virtual object EvalTextureFilter_Anisotropic(ParseTree tree, params object[] paramlist)\n        {\n            return TextureFilterTypeContent.Anisotropic;\n        }\n\n        protected virtual object EvalTextureFilter(ParseTree tree, params object[] paramlist)\n        {\n            return this.GetValue(tree, TokenType.TextureFilter_None, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Linear, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Point, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Anisotropic, 0);\n        }\n\n        protected virtual object EvalSampler_State_Texture(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).TextureName = (string)this.GetValue(tree, TokenType.Identifier, 0); return null;\n        }\n\n        protected virtual object EvalSampler_State_MinFilter(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).MinFilter = (TextureFilterTypeContent)this.GetValue(tree, TokenType.TextureFilter, 0); return null;\n        }\n\n        protected virtual object EvalSampler_State_MagFilter(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).MagFilter = (TextureFilterTypeContent)this.GetValue(tree, TokenType.TextureFilter, 0); return null;\n        }\n\n        protected virtual object EvalSampler_State_MipFilter(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).MipFilter = (TextureFilterTypeContent)this.GetValue(tree, TokenType.TextureFilter, 0); return null;\n        }\n\n        protected virtual object EvalSampler_State_Filter(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).Filter = (TextureFilterTypeContent)this.GetValue(tree, TokenType.TextureFilter, 0); return null;\n        }\n\n        protected virtual object EvalSampler_State_AddressU(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).AddressU = (TextureAddressModeContent)this.GetValue(tree, TokenType.AddressMode, 0); return null;\n        }\n\n        protected virtual object EvalSampler_State_AddressV(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).AddressV = (TextureAddressModeContent)this.GetValue(tree, TokenType.AddressMode, 0); return null;\n        }\n\n        protected virtual object EvalSampler_State_AddressW(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).AddressW = (TextureAddressModeContent)this.GetValue(tree, TokenType.AddressMode, 0); return null;\n        }\n\n        protected virtual object EvalSampler_State_BorderColor(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).BorderColor = ParseTreeTools.ParseColor((string)this.GetValue(tree, TokenType.HexColor, 0)); return null;\n        }\n\n        protected virtual object EvalSampler_State_MaxMipLevel(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).MaxMipLevel = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;\n        }\n\n        protected virtual object EvalSampler_State_MaxAnisotropy(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).MaxAnisotropy = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;\n        }\n\n        protected virtual object EvalSampler_State_MipLodBias(ParseTree tree, params object[] paramlist)\n        {\n            (paramlist[0] as SamplerStateInfo).MipMapLevelOfDetailBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null;\n        }\n\n        protected virtual object EvalSampler_State_Expression(ParseTree tree, params object[] paramlist)\n        {\n            foreach (var node in Nodes)\n                node.Eval(tree, paramlist);\n            return null;\n        }\n\n        protected virtual object EvalSampler_Register_Expression(ParseTree tree, params object[] paramlist)\n        {\n            return null;\n        }\n\n        protected virtual object EvalSampler_Declaration_States(ParseTree tree, params object[] paramlist)\n        {\n            foreach (var node in Nodes)\n                node.Eval(tree, paramlist);\n            return null;\n        }\n\n        protected virtual object EvalSampler_Declaration(ParseTree tree, params object[] paramlist)\n        {\n            // if there is a comma or closing paren at the end this is a sampler as a parameter of a function\n        \tif (this.GetValue(tree, TokenType.Semicolon, 0) == null) return null;\n        \n        \tvar sampler = new SamplerStateInfo();\n        \tsampler.Name = this.GetValue(tree, TokenType.Identifier, 0) as string;\n        \t\n        \tforeach (ParseNode node in Nodes)\n        \t\tnode.Eval(tree, sampler);\n        \t\n        \tvar shaderInfo = paramlist[0] as ShaderInfo;\n        \tshaderInfo.SamplerStates.Add(sampler.Name, sampler);\n        \t\n        \treturn null;\n        }\n\n\n    }\n    \n    #endregion ParseTree\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/ParseTreeTools.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\n{\n\tpublic static class ParseTreeTools\n\t{\n        public static float ParseFloat(string value)\n        {\n            // Remove all whitespace and trailing F or f.\n            value = value.Replace(\" \", \"\");\n            value = value.TrimEnd('f', 'F');\n            return float.Parse(value, NumberStyles.Float, CultureInfo.InvariantCulture);\n        }\n\n        public static int ParseInt(string value)\n        {\n            // We read it as a float and cast it down to\n            // an integer to match Microsoft FX behavior.\n            return (int)Math.Floor(ParseFloat(value));\n        }\n       \n\t\tpublic static bool ParseBool(string value)\n\t\t{\n\t\t    if (value.ToLowerInvariant() == \"true\" || value == \"1\")\n\t\t\t\treturn true;\n\t\t    if (value.ToLowerInvariant() == \"false\" || value == \"0\")\n\t\t        return false;\n\n\t\t    throw new Exception(\"Invalid boolean value '\" + value + \"'\");\n\t\t}\n\n\t    public static Color ParseColor(string value)\n\t    {\n\t        var hexValue = Convert.ToUInt32(value, 16);\n\n\t        byte r, g, b, a;\n\t        if (value.Length == 8)\n\t        {\n\t            r = (byte) ((hexValue >> 16) & 0xFF);\n                g = (byte) ((hexValue >> 8) & 0xFF);\n                b = (byte) ((hexValue >> 0) & 0xFF);\n\t            a = 255;\n\t        }\n\t        else if (value.Length == 10)\n\t        {\n                r = (byte) ((hexValue >> 24) & 0xFF);\n                g = (byte) ((hexValue >> 16) & 0xFF);\n                b = (byte) ((hexValue >> 8) & 0xFF);\n                a = (byte) ((hexValue >> 0) & 0xFF);\n\t        }\n\t        else\n\t        {\n\t            throw new NotSupportedException();\n\t        }\n\n            return new Color(r, g, b, a);\n\t    }        \n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/Parser.cs",
    "content": "// Generated by TinyPG v1.3 available at www.codeproject.com\n\nusing System;\nusing System.Collections.Generic;\n\n// Disable unused variable warnings which\n// can happen during the parser generation.\n#pragma warning disable 168\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\n{\n    #region Parser\n\n    public partial class Parser \n    {\n        private Scanner scanner;\n        private ParseTree tree;\n        \n        public Parser(Scanner scanner)\n        {\n            this.scanner = scanner;\n        }\n\n         public ParseTree Parse(string input)\n        {\n            return Parse(input, \"\", new ParseTree());\n        }\n\n        public ParseTree Parse(string input, string fileName)\n        {\n            return Parse(input, fileName, new ParseTree());\n        }\n\n        public ParseTree Parse(string input, string fileName, ParseTree tree)\n        {\n            scanner.Init(input, fileName);\n\n            this.tree = tree;\n            ParseStart(tree);\n            tree.Skipped = scanner.Skipped;\n\n            return tree;\n        }\n\n        private void ParseStart(ParseNode parent) // NonTerminalSymbol: Start\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Start), \"Start\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Code, TokenType.Technique, TokenType.Sampler); // ZeroOrMore Rule\n            while (tok.Type == TokenType.Code\n                || tok.Type == TokenType.Technique\n                || tok.Type == TokenType.Sampler)\n            {\n                tok = scanner.LookAhead(TokenType.Code, TokenType.Technique, TokenType.Sampler); // Choice Rule\n                switch (tok.Type)\n                { // Choice Rule\n                    case TokenType.Code:\n                        tok = scanner.Scan(TokenType.Code); // Terminal Rule: Code\n                        n = node.CreateNode(tok, tok.ToString() );\n                        node.Token.UpdateRange(tok);\n                        node.Nodes.Add(n);\n                        if (tok.Type != TokenType.Code) {\n                            tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Code.ToString(), 0x1001, tok));\n                            return;\n                        }\n                        break;\n                    case TokenType.Technique:\n                        ParseTechnique_Declaration(node); // NonTerminal Rule: Technique_Declaration\n                        break;\n                    case TokenType.Sampler:\n                        ParseSampler_Declaration(node); // NonTerminal Rule: Sampler_Declaration\n                        break;\n                    default:\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Code, Technique, or Sampler.\", 0x0002, tok));\n                        break;\n                } // Choice Rule\n            tok = scanner.LookAhead(TokenType.Code, TokenType.Technique, TokenType.Sampler); // ZeroOrMore Rule\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.EndOfFile); // Terminal Rule: EndOfFile\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.EndOfFile) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.EndOfFile.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Start\n\n        private void ParseTechnique_Declaration(ParseNode parent) // NonTerminalSymbol: Technique_Declaration\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Technique_Declaration), \"Technique_Declaration\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Technique); // Terminal Rule: Technique\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Technique) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Technique.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Identifier); // Option Rule\n            if (tok.Type == TokenType.Identifier)\n            {\n                tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.Identifier) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                    return;\n                }\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.OpenBracket); // Terminal Rule: OpenBracket\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.OpenBracket) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenBracket.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            do { // OneOrMore Rule\n                ParsePass_Declaration(node); // NonTerminal Rule: Pass_Declaration\n                tok = scanner.LookAhead(TokenType.Pass); // OneOrMore Rule\n            } while (tok.Type == TokenType.Pass); // OneOrMore Rule\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.CloseBracket); // Terminal Rule: CloseBracket\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.CloseBracket) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseBracket.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Technique_Declaration\n\n        private void ParseFillMode_Solid(ParseNode parent) // NonTerminalSymbol: FillMode_Solid\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.FillMode_Solid), \"FillMode_Solid\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Solid); // Terminal Rule: Solid\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Solid) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Solid.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: FillMode_Solid\n\n        private void ParseFillMode_WireFrame(ParseNode parent) // NonTerminalSymbol: FillMode_WireFrame\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.FillMode_WireFrame), \"FillMode_WireFrame\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.WireFrame); // Terminal Rule: WireFrame\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.WireFrame) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.WireFrame.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: FillMode_WireFrame\n\n        private void ParseFillModes(ParseNode parent) // NonTerminalSymbol: FillModes\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.FillModes), \"FillModes\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.Solid, TokenType.WireFrame); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Solid:\n                    ParseFillMode_Solid(node); // NonTerminal Rule: FillMode_Solid\n                    break;\n                case TokenType.WireFrame:\n                    ParseFillMode_WireFrame(node); // NonTerminal Rule: FillMode_WireFrame\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Solid or WireFrame.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: FillModes\n\n        private void ParseCullMode_None(ParseNode parent) // NonTerminalSymbol: CullMode_None\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CullMode_None), \"CullMode_None\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.None); // Terminal Rule: None\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.None) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.None.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CullMode_None\n\n        private void ParseCullMode_Cw(ParseNode parent) // NonTerminalSymbol: CullMode_Cw\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CullMode_Cw), \"CullMode_Cw\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Cw); // Terminal Rule: Cw\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Cw) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Cw.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CullMode_Cw\n\n        private void ParseCullMode_Ccw(ParseNode parent) // NonTerminalSymbol: CullMode_Ccw\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CullMode_Ccw), \"CullMode_Ccw\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Ccw); // Terminal Rule: Ccw\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Ccw) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Ccw.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CullMode_Ccw\n\n        private void ParseCullModes(ParseNode parent) // NonTerminalSymbol: CullModes\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CullModes), \"CullModes\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.None, TokenType.Cw, TokenType.Ccw); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.None:\n                    ParseCullMode_None(node); // NonTerminal Rule: CullMode_None\n                    break;\n                case TokenType.Cw:\n                    ParseCullMode_Cw(node); // NonTerminal Rule: CullMode_Cw\n                    break;\n                case TokenType.Ccw:\n                    ParseCullMode_Ccw(node); // NonTerminal Rule: CullMode_Ccw\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected None, Cw, or Ccw.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CullModes\n\n        private void ParseColors_None(ParseNode parent) // NonTerminalSymbol: Colors_None\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_None), \"Colors_None\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.None); // Terminal Rule: None\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.None) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.None.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Colors_None\n\n        private void ParseColors_Red(ParseNode parent) // NonTerminalSymbol: Colors_Red\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Red), \"Colors_Red\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Red); // Terminal Rule: Red\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Red) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Red.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Colors_Red\n\n        private void ParseColors_Green(ParseNode parent) // NonTerminalSymbol: Colors_Green\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Green), \"Colors_Green\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Green); // Terminal Rule: Green\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Green) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Green.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Colors_Green\n\n        private void ParseColors_Blue(ParseNode parent) // NonTerminalSymbol: Colors_Blue\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Blue), \"Colors_Blue\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Blue); // Terminal Rule: Blue\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Blue) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Blue.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Colors_Blue\n\n        private void ParseColors_Alpha(ParseNode parent) // NonTerminalSymbol: Colors_Alpha\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Alpha), \"Colors_Alpha\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Alpha); // Terminal Rule: Alpha\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Alpha) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Alpha.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Colors_Alpha\n\n        private void ParseColors_All(ParseNode parent) // NonTerminalSymbol: Colors_All\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_All), \"Colors_All\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.All); // Terminal Rule: All\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.All) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.All.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Colors_All\n\n        private void ParseColors_Boolean(ParseNode parent) // NonTerminalSymbol: Colors_Boolean\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Boolean), \"Colors_Boolean\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Boolean) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Boolean.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Colors_Boolean\n\n        private void ParseColors(ParseNode parent) // NonTerminalSymbol: Colors\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors), \"Colors\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.Red, TokenType.Green, TokenType.Blue, TokenType.Alpha, TokenType.None, TokenType.All, TokenType.Boolean); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Red:\n                    ParseColors_Red(node); // NonTerminal Rule: Colors_Red\n                    break;\n                case TokenType.Green:\n                    ParseColors_Green(node); // NonTerminal Rule: Colors_Green\n                    break;\n                case TokenType.Blue:\n                    ParseColors_Blue(node); // NonTerminal Rule: Colors_Blue\n                    break;\n                case TokenType.Alpha:\n                    ParseColors_Alpha(node); // NonTerminal Rule: Colors_Alpha\n                    break;\n                case TokenType.None:\n                    ParseColors_None(node); // NonTerminal Rule: Colors_None\n                    break;\n                case TokenType.All:\n                    ParseColors_All(node); // NonTerminal Rule: Colors_All\n                    break;\n                case TokenType.Boolean:\n                    ParseColors_Boolean(node); // NonTerminal Rule: Colors_Boolean\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Red, Green, Blue, Alpha, None, All, or Boolean.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Colors\n\n        private void ParseColorsMasks(ParseNode parent) // NonTerminalSymbol: ColorsMasks\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.ColorsMasks), \"ColorsMasks\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            ParseColors(node); // NonTerminal Rule: Colors\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Or); // Option Rule\n            if (tok.Type == TokenType.Or)\n            {\n\n                 // Concat Rule\n                tok = scanner.Scan(TokenType.Or); // Terminal Rule: Or\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.Or) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Or.ToString(), 0x1001, tok));\n                    return;\n                }\n\n                 // Concat Rule\n                ParseColors(node); // NonTerminal Rule: Colors\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Or); // Option Rule\n            if (tok.Type == TokenType.Or)\n            {\n\n                 // Concat Rule\n                tok = scanner.Scan(TokenType.Or); // Terminal Rule: Or\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.Or) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Or.ToString(), 0x1001, tok));\n                    return;\n                }\n\n                 // Concat Rule\n                ParseColors(node); // NonTerminal Rule: Colors\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Or); // Option Rule\n            if (tok.Type == TokenType.Or)\n            {\n\n                 // Concat Rule\n                tok = scanner.Scan(TokenType.Or); // Terminal Rule: Or\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.Or) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Or.ToString(), 0x1001, tok));\n                    return;\n                }\n\n                 // Concat Rule\n                ParseColors(node); // NonTerminal Rule: Colors\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: ColorsMasks\n\n        private void ParseBlend_Zero(ParseNode parent) // NonTerminalSymbol: Blend_Zero\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_Zero), \"Blend_Zero\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Zero); // Terminal Rule: Zero\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Zero) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Zero.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_Zero\n\n        private void ParseBlend_One(ParseNode parent) // NonTerminalSymbol: Blend_One\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_One), \"Blend_One\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.One); // Terminal Rule: One\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.One) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.One.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_One\n\n        private void ParseBlend_SrcColor(ParseNode parent) // NonTerminalSymbol: Blend_SrcColor\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_SrcColor), \"Blend_SrcColor\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.SrcColor); // Terminal Rule: SrcColor\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.SrcColor) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.SrcColor.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_SrcColor\n\n        private void ParseBlend_InvSrcColor(ParseNode parent) // NonTerminalSymbol: Blend_InvSrcColor\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvSrcColor), \"Blend_InvSrcColor\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.InvSrcColor); // Terminal Rule: InvSrcColor\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.InvSrcColor) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.InvSrcColor.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_InvSrcColor\n\n        private void ParseBlend_SrcAlpha(ParseNode parent) // NonTerminalSymbol: Blend_SrcAlpha\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_SrcAlpha), \"Blend_SrcAlpha\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.SrcAlpha); // Terminal Rule: SrcAlpha\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.SrcAlpha) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.SrcAlpha.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_SrcAlpha\n\n        private void ParseBlend_InvSrcAlpha(ParseNode parent) // NonTerminalSymbol: Blend_InvSrcAlpha\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvSrcAlpha), \"Blend_InvSrcAlpha\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.InvSrcAlpha); // Terminal Rule: InvSrcAlpha\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.InvSrcAlpha) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.InvSrcAlpha.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_InvSrcAlpha\n\n        private void ParseBlend_DestAlpha(ParseNode parent) // NonTerminalSymbol: Blend_DestAlpha\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_DestAlpha), \"Blend_DestAlpha\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.DestAlpha); // Terminal Rule: DestAlpha\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.DestAlpha) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.DestAlpha.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_DestAlpha\n\n        private void ParseBlend_InvDestAlpha(ParseNode parent) // NonTerminalSymbol: Blend_InvDestAlpha\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvDestAlpha), \"Blend_InvDestAlpha\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.InvDestAlpha); // Terminal Rule: InvDestAlpha\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.InvDestAlpha) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.InvDestAlpha.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_InvDestAlpha\n\n        private void ParseBlend_DestColor(ParseNode parent) // NonTerminalSymbol: Blend_DestColor\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_DestColor), \"Blend_DestColor\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.DestColor); // Terminal Rule: DestColor\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.DestColor) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.DestColor.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_DestColor\n\n        private void ParseBlend_InvDestColor(ParseNode parent) // NonTerminalSymbol: Blend_InvDestColor\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvDestColor), \"Blend_InvDestColor\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.InvDestColor); // Terminal Rule: InvDestColor\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.InvDestColor) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.InvDestColor.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_InvDestColor\n\n        private void ParseBlend_SrcAlphaSat(ParseNode parent) // NonTerminalSymbol: Blend_SrcAlphaSat\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_SrcAlphaSat), \"Blend_SrcAlphaSat\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.SrcAlphaSat); // Terminal Rule: SrcAlphaSat\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.SrcAlphaSat) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.SrcAlphaSat.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_SrcAlphaSat\n\n        private void ParseBlend_BlendFactor(ParseNode parent) // NonTerminalSymbol: Blend_BlendFactor\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_BlendFactor), \"Blend_BlendFactor\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.BlendFactor); // Terminal Rule: BlendFactor\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.BlendFactor) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.BlendFactor.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_BlendFactor\n\n        private void ParseBlend_InvBlendFactor(ParseNode parent) // NonTerminalSymbol: Blend_InvBlendFactor\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvBlendFactor), \"Blend_InvBlendFactor\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.InvBlendFactor); // Terminal Rule: InvBlendFactor\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.InvBlendFactor) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.InvBlendFactor.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blend_InvBlendFactor\n\n        private void ParseBlends(ParseNode parent) // NonTerminalSymbol: Blends\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blends), \"Blends\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.Zero, TokenType.One, TokenType.SrcColor, TokenType.InvSrcColor, TokenType.SrcAlpha, TokenType.InvSrcAlpha, TokenType.DestAlpha, TokenType.InvDestAlpha, TokenType.DestColor, TokenType.InvDestColor, TokenType.SrcAlphaSat, TokenType.BlendFactor, TokenType.InvBlendFactor); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Zero:\n                    ParseBlend_Zero(node); // NonTerminal Rule: Blend_Zero\n                    break;\n                case TokenType.One:\n                    ParseBlend_One(node); // NonTerminal Rule: Blend_One\n                    break;\n                case TokenType.SrcColor:\n                    ParseBlend_SrcColor(node); // NonTerminal Rule: Blend_SrcColor\n                    break;\n                case TokenType.InvSrcColor:\n                    ParseBlend_InvSrcColor(node); // NonTerminal Rule: Blend_InvSrcColor\n                    break;\n                case TokenType.SrcAlpha:\n                    ParseBlend_SrcAlpha(node); // NonTerminal Rule: Blend_SrcAlpha\n                    break;\n                case TokenType.InvSrcAlpha:\n                    ParseBlend_InvSrcAlpha(node); // NonTerminal Rule: Blend_InvSrcAlpha\n                    break;\n                case TokenType.DestAlpha:\n                    ParseBlend_DestAlpha(node); // NonTerminal Rule: Blend_DestAlpha\n                    break;\n                case TokenType.InvDestAlpha:\n                    ParseBlend_InvDestAlpha(node); // NonTerminal Rule: Blend_InvDestAlpha\n                    break;\n                case TokenType.DestColor:\n                    ParseBlend_DestColor(node); // NonTerminal Rule: Blend_DestColor\n                    break;\n                case TokenType.InvDestColor:\n                    ParseBlend_InvDestColor(node); // NonTerminal Rule: Blend_InvDestColor\n                    break;\n                case TokenType.SrcAlphaSat:\n                    ParseBlend_SrcAlphaSat(node); // NonTerminal Rule: Blend_SrcAlphaSat\n                    break;\n                case TokenType.BlendFactor:\n                    ParseBlend_BlendFactor(node); // NonTerminal Rule: Blend_BlendFactor\n                    break;\n                case TokenType.InvBlendFactor:\n                    ParseBlend_InvBlendFactor(node); // NonTerminal Rule: Blend_InvBlendFactor\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Zero, One, SrcColor, InvSrcColor, SrcAlpha, InvSrcAlpha, DestAlpha, InvDestAlpha, DestColor, InvDestColor, SrcAlphaSat, BlendFactor, or InvBlendFactor.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Blends\n\n        private void ParseBlendOp_Add(ParseNode parent) // NonTerminalSymbol: BlendOp_Add\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_Add), \"BlendOp_Add\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Add); // Terminal Rule: Add\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Add) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Add.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: BlendOp_Add\n\n        private void ParseBlendOp_Subtract(ParseNode parent) // NonTerminalSymbol: BlendOp_Subtract\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_Subtract), \"BlendOp_Subtract\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Subtract); // Terminal Rule: Subtract\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Subtract) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Subtract.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: BlendOp_Subtract\n\n        private void ParseBlendOp_RevSubtract(ParseNode parent) // NonTerminalSymbol: BlendOp_RevSubtract\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_RevSubtract), \"BlendOp_RevSubtract\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.RevSubtract); // Terminal Rule: RevSubtract\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.RevSubtract) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.RevSubtract.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: BlendOp_RevSubtract\n\n        private void ParseBlendOp_Min(ParseNode parent) // NonTerminalSymbol: BlendOp_Min\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_Min), \"BlendOp_Min\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Min); // Terminal Rule: Min\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Min) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Min.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: BlendOp_Min\n\n        private void ParseBlendOp_Max(ParseNode parent) // NonTerminalSymbol: BlendOp_Max\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_Max), \"BlendOp_Max\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Max); // Terminal Rule: Max\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Max) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Max.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: BlendOp_Max\n\n        private void ParseBlendOps(ParseNode parent) // NonTerminalSymbol: BlendOps\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOps), \"BlendOps\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.Add, TokenType.Subtract, TokenType.RevSubtract, TokenType.Min, TokenType.Max); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Add:\n                    ParseBlendOp_Add(node); // NonTerminal Rule: BlendOp_Add\n                    break;\n                case TokenType.Subtract:\n                    ParseBlendOp_Subtract(node); // NonTerminal Rule: BlendOp_Subtract\n                    break;\n                case TokenType.RevSubtract:\n                    ParseBlendOp_RevSubtract(node); // NonTerminal Rule: BlendOp_RevSubtract\n                    break;\n                case TokenType.Min:\n                    ParseBlendOp_Min(node); // NonTerminal Rule: BlendOp_Min\n                    break;\n                case TokenType.Max:\n                    ParseBlendOp_Max(node); // NonTerminal Rule: BlendOp_Max\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Add, Subtract, RevSubtract, Min, or Max.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: BlendOps\n\n        private void ParseCmpFunc_Never(ParseNode parent) // NonTerminalSymbol: CmpFunc_Never\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Never), \"CmpFunc_Never\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Never); // Terminal Rule: Never\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Never) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Never.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc_Never\n\n        private void ParseCmpFunc_Less(ParseNode parent) // NonTerminalSymbol: CmpFunc_Less\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Less), \"CmpFunc_Less\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Less); // Terminal Rule: Less\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Less) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Less.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc_Less\n\n        private void ParseCmpFunc_Equal(ParseNode parent) // NonTerminalSymbol: CmpFunc_Equal\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Equal), \"CmpFunc_Equal\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Equal); // Terminal Rule: Equal\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equal) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equal.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc_Equal\n\n        private void ParseCmpFunc_LessEqual(ParseNode parent) // NonTerminalSymbol: CmpFunc_LessEqual\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_LessEqual), \"CmpFunc_LessEqual\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.LessEqual); // Terminal Rule: LessEqual\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.LessEqual) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.LessEqual.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc_LessEqual\n\n        private void ParseCmpFunc_Greater(ParseNode parent) // NonTerminalSymbol: CmpFunc_Greater\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Greater), \"CmpFunc_Greater\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Greater); // Terminal Rule: Greater\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Greater) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Greater.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc_Greater\n\n        private void ParseCmpFunc_NotEqual(ParseNode parent) // NonTerminalSymbol: CmpFunc_NotEqual\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_NotEqual), \"CmpFunc_NotEqual\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.NotEqual); // Terminal Rule: NotEqual\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.NotEqual) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.NotEqual.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc_NotEqual\n\n        private void ParseCmpFunc_GreaterEqual(ParseNode parent) // NonTerminalSymbol: CmpFunc_GreaterEqual\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_GreaterEqual), \"CmpFunc_GreaterEqual\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.GreaterEqual); // Terminal Rule: GreaterEqual\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.GreaterEqual) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.GreaterEqual.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc_GreaterEqual\n\n        private void ParseCmpFunc_Always(ParseNode parent) // NonTerminalSymbol: CmpFunc_Always\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Always), \"CmpFunc_Always\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Always); // Terminal Rule: Always\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Always) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Always.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc_Always\n\n        private void ParseCmpFunc(ParseNode parent) // NonTerminalSymbol: CmpFunc\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc), \"CmpFunc\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.Never, TokenType.Less, TokenType.Equal, TokenType.LessEqual, TokenType.Greater, TokenType.NotEqual, TokenType.GreaterEqual, TokenType.Always); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Never:\n                    ParseCmpFunc_Never(node); // NonTerminal Rule: CmpFunc_Never\n                    break;\n                case TokenType.Less:\n                    ParseCmpFunc_Less(node); // NonTerminal Rule: CmpFunc_Less\n                    break;\n                case TokenType.Equal:\n                    ParseCmpFunc_Equal(node); // NonTerminal Rule: CmpFunc_Equal\n                    break;\n                case TokenType.LessEqual:\n                    ParseCmpFunc_LessEqual(node); // NonTerminal Rule: CmpFunc_LessEqual\n                    break;\n                case TokenType.Greater:\n                    ParseCmpFunc_Greater(node); // NonTerminal Rule: CmpFunc_Greater\n                    break;\n                case TokenType.NotEqual:\n                    ParseCmpFunc_NotEqual(node); // NonTerminal Rule: CmpFunc_NotEqual\n                    break;\n                case TokenType.GreaterEqual:\n                    ParseCmpFunc_GreaterEqual(node); // NonTerminal Rule: CmpFunc_GreaterEqual\n                    break;\n                case TokenType.Always:\n                    ParseCmpFunc_Always(node); // NonTerminal Rule: CmpFunc_Always\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Never, Less, Equal, LessEqual, Greater, NotEqual, GreaterEqual, or Always.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: CmpFunc\n\n        private void ParseStencilOp_Keep(ParseNode parent) // NonTerminalSymbol: StencilOp_Keep\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Keep), \"StencilOp_Keep\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Keep); // Terminal Rule: Keep\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Keep) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Keep.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp_Keep\n\n        private void ParseStencilOp_Zero(ParseNode parent) // NonTerminalSymbol: StencilOp_Zero\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Zero), \"StencilOp_Zero\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Zero); // Terminal Rule: Zero\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Zero) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Zero.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp_Zero\n\n        private void ParseStencilOp_Replace(ParseNode parent) // NonTerminalSymbol: StencilOp_Replace\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Replace), \"StencilOp_Replace\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Replace); // Terminal Rule: Replace\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Replace) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Replace.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp_Replace\n\n        private void ParseStencilOp_IncrSat(ParseNode parent) // NonTerminalSymbol: StencilOp_IncrSat\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_IncrSat), \"StencilOp_IncrSat\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.IncrSat); // Terminal Rule: IncrSat\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.IncrSat) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.IncrSat.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp_IncrSat\n\n        private void ParseStencilOp_DecrSat(ParseNode parent) // NonTerminalSymbol: StencilOp_DecrSat\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_DecrSat), \"StencilOp_DecrSat\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.DecrSat); // Terminal Rule: DecrSat\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.DecrSat) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.DecrSat.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp_DecrSat\n\n        private void ParseStencilOp_Invert(ParseNode parent) // NonTerminalSymbol: StencilOp_Invert\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Invert), \"StencilOp_Invert\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Invert); // Terminal Rule: Invert\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Invert) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Invert.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp_Invert\n\n        private void ParseStencilOp_Incr(ParseNode parent) // NonTerminalSymbol: StencilOp_Incr\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Incr), \"StencilOp_Incr\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Incr); // Terminal Rule: Incr\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Incr) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Incr.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp_Incr\n\n        private void ParseStencilOp_Decr(ParseNode parent) // NonTerminalSymbol: StencilOp_Decr\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Decr), \"StencilOp_Decr\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Decr); // Terminal Rule: Decr\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Decr) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Decr.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp_Decr\n\n        private void ParseStencilOp(ParseNode parent) // NonTerminalSymbol: StencilOp\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp), \"StencilOp\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.Keep, TokenType.Zero, TokenType.Replace, TokenType.IncrSat, TokenType.DecrSat, TokenType.Invert, TokenType.Incr, TokenType.Decr); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Keep:\n                    ParseStencilOp_Keep(node); // NonTerminal Rule: StencilOp_Keep\n                    break;\n                case TokenType.Zero:\n                    ParseStencilOp_Zero(node); // NonTerminal Rule: StencilOp_Zero\n                    break;\n                case TokenType.Replace:\n                    ParseStencilOp_Replace(node); // NonTerminal Rule: StencilOp_Replace\n                    break;\n                case TokenType.IncrSat:\n                    ParseStencilOp_IncrSat(node); // NonTerminal Rule: StencilOp_IncrSat\n                    break;\n                case TokenType.DecrSat:\n                    ParseStencilOp_DecrSat(node); // NonTerminal Rule: StencilOp_DecrSat\n                    break;\n                case TokenType.Invert:\n                    ParseStencilOp_Invert(node); // NonTerminal Rule: StencilOp_Invert\n                    break;\n                case TokenType.Incr:\n                    ParseStencilOp_Incr(node); // NonTerminal Rule: StencilOp_Incr\n                    break;\n                case TokenType.Decr:\n                    ParseStencilOp_Decr(node); // NonTerminal Rule: StencilOp_Decr\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Keep, Zero, Replace, IncrSat, DecrSat, Invert, Incr, or Decr.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: StencilOp\n\n        private void ParseRender_State_CullMode(ParseNode parent) // NonTerminalSymbol: Render_State_CullMode\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_CullMode), \"Render_State_CullMode\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.CullMode); // Terminal Rule: CullMode\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.CullMode) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CullMode.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseCullModes(node); // NonTerminal Rule: CullModes\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_CullMode\n\n        private void ParseRender_State_FillMode(ParseNode parent) // NonTerminalSymbol: Render_State_FillMode\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_FillMode), \"Render_State_FillMode\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.FillMode); // Terminal Rule: FillMode\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.FillMode) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.FillMode.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseFillModes(node); // NonTerminal Rule: FillModes\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_FillMode\n\n        private void ParseRender_State_AlphaBlendEnable(ParseNode parent) // NonTerminalSymbol: Render_State_AlphaBlendEnable\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_AlphaBlendEnable), \"Render_State_AlphaBlendEnable\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.AlphaBlendEnable); // Terminal Rule: AlphaBlendEnable\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.AlphaBlendEnable) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.AlphaBlendEnable.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Boolean) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Boolean.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_AlphaBlendEnable\n\n        private void ParseRender_State_SrcBlend(ParseNode parent) // NonTerminalSymbol: Render_State_SrcBlend\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_SrcBlend), \"Render_State_SrcBlend\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.SrcBlend); // Terminal Rule: SrcBlend\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.SrcBlend) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.SrcBlend.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseBlends(node); // NonTerminal Rule: Blends\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_SrcBlend\n\n        private void ParseRender_State_DestBlend(ParseNode parent) // NonTerminalSymbol: Render_State_DestBlend\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_DestBlend), \"Render_State_DestBlend\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.DestBlend); // Terminal Rule: DestBlend\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.DestBlend) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.DestBlend.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseBlends(node); // NonTerminal Rule: Blends\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_DestBlend\n\n        private void ParseRender_State_BlendOp(ParseNode parent) // NonTerminalSymbol: Render_State_BlendOp\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_BlendOp), \"Render_State_BlendOp\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.BlendOp); // Terminal Rule: BlendOp\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.BlendOp) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.BlendOp.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseBlendOps(node); // NonTerminal Rule: BlendOps\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_BlendOp\n\n        private void ParseRender_State_ColorWriteEnable(ParseNode parent) // NonTerminalSymbol: Render_State_ColorWriteEnable\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ColorWriteEnable), \"Render_State_ColorWriteEnable\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ColorWriteEnable); // Terminal Rule: ColorWriteEnable\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ColorWriteEnable) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ColorWriteEnable.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseColorsMasks(node); // NonTerminal Rule: ColorsMasks\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_ColorWriteEnable\n\n        private void ParseRender_State_DepthBias(ParseNode parent) // NonTerminalSymbol: Render_State_DepthBias\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_DepthBias), \"Render_State_DepthBias\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.DepthBias); // Terminal Rule: DepthBias\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.DepthBias) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.DepthBias.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Number) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_DepthBias\n\n        private void ParseRender_State_SlopeScaleDepthBias(ParseNode parent) // NonTerminalSymbol: Render_State_SlopeScaleDepthBias\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_SlopeScaleDepthBias), \"Render_State_SlopeScaleDepthBias\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.SlopeScaleDepthBias); // Terminal Rule: SlopeScaleDepthBias\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.SlopeScaleDepthBias) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.SlopeScaleDepthBias.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Number) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_SlopeScaleDepthBias\n\n        private void ParseRender_State_ZEnable(ParseNode parent) // NonTerminalSymbol: Render_State_ZEnable\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ZEnable), \"Render_State_ZEnable\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ZEnable); // Terminal Rule: ZEnable\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ZEnable) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ZEnable.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Boolean) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Boolean.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_ZEnable\n\n        private void ParseRender_State_ZWriteEnable(ParseNode parent) // NonTerminalSymbol: Render_State_ZWriteEnable\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ZWriteEnable), \"Render_State_ZWriteEnable\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ZWriteEnable); // Terminal Rule: ZWriteEnable\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ZWriteEnable) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ZWriteEnable.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Boolean) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Boolean.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_ZWriteEnable\n\n        private void ParseRender_State_ZFunc(ParseNode parent) // NonTerminalSymbol: Render_State_ZFunc\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ZFunc), \"Render_State_ZFunc\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ZFunc); // Terminal Rule: ZFunc\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ZFunc) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ZFunc.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseCmpFunc(node); // NonTerminal Rule: CmpFunc\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_ZFunc\n\n        private void ParseRender_State_MultiSampleAntiAlias(ParseNode parent) // NonTerminalSymbol: Render_State_MultiSampleAntiAlias\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_MultiSampleAntiAlias), \"Render_State_MultiSampleAntiAlias\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.MultiSampleAntiAlias); // Terminal Rule: MultiSampleAntiAlias\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.MultiSampleAntiAlias) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.MultiSampleAntiAlias.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Boolean) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Boolean.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_MultiSampleAntiAlias\n\n        private void ParseRender_State_ScissorTestEnable(ParseNode parent) // NonTerminalSymbol: Render_State_ScissorTestEnable\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ScissorTestEnable), \"Render_State_ScissorTestEnable\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ScissorTestEnable); // Terminal Rule: ScissorTestEnable\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ScissorTestEnable) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ScissorTestEnable.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Boolean) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Boolean.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_ScissorTestEnable\n\n        private void ParseRender_State_StencilEnable(ParseNode parent) // NonTerminalSymbol: Render_State_StencilEnable\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilEnable), \"Render_State_StencilEnable\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.StencilEnable); // Terminal Rule: StencilEnable\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.StencilEnable) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.StencilEnable.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Boolean) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Boolean.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_StencilEnable\n\n        private void ParseRender_State_StencilFail(ParseNode parent) // NonTerminalSymbol: Render_State_StencilFail\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilFail), \"Render_State_StencilFail\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.StencilFail); // Terminal Rule: StencilFail\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.StencilFail) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.StencilFail.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseStencilOp(node); // NonTerminal Rule: StencilOp\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_StencilFail\n\n        private void ParseRender_State_StencilFunc(ParseNode parent) // NonTerminalSymbol: Render_State_StencilFunc\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilFunc), \"Render_State_StencilFunc\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.StencilFunc); // Terminal Rule: StencilFunc\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.StencilFunc) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.StencilFunc.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseCmpFunc(node); // NonTerminal Rule: CmpFunc\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_StencilFunc\n\n        private void ParseRender_State_StencilMask(ParseNode parent) // NonTerminalSymbol: Render_State_StencilMask\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilMask), \"Render_State_StencilMask\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.StencilMask); // Terminal Rule: StencilMask\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.StencilMask) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.StencilMask.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Number) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_StencilMask\n\n        private void ParseRender_State_StencilPass(ParseNode parent) // NonTerminalSymbol: Render_State_StencilPass\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilPass), \"Render_State_StencilPass\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.StencilPass); // Terminal Rule: StencilPass\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.StencilPass) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.StencilPass.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseStencilOp(node); // NonTerminal Rule: StencilOp\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_StencilPass\n\n        private void ParseRender_State_StencilRef(ParseNode parent) // NonTerminalSymbol: Render_State_StencilRef\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilRef), \"Render_State_StencilRef\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.StencilRef); // Terminal Rule: StencilRef\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.StencilRef) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.StencilRef.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Number) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_StencilRef\n\n        private void ParseRender_State_StencilWriteMask(ParseNode parent) // NonTerminalSymbol: Render_State_StencilWriteMask\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilWriteMask), \"Render_State_StencilWriteMask\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.StencilWriteMask); // Terminal Rule: StencilWriteMask\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.StencilWriteMask) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.StencilWriteMask.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Number) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_StencilWriteMask\n\n        private void ParseRender_State_StencilZFail(ParseNode parent) // NonTerminalSymbol: Render_State_StencilZFail\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilZFail), \"Render_State_StencilZFail\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.StencilZFail); // Terminal Rule: StencilZFail\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.StencilZFail) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.StencilZFail.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseStencilOp(node); // NonTerminal Rule: StencilOp\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_StencilZFail\n\n        private void ParseRender_State_Expression(ParseNode parent) // NonTerminalSymbol: Render_State_Expression\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_Expression), \"Render_State_Expression\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.CullMode, TokenType.FillMode, TokenType.AlphaBlendEnable, TokenType.SrcBlend, TokenType.DestBlend, TokenType.BlendOp, TokenType.ColorWriteEnable, TokenType.DepthBias, TokenType.SlopeScaleDepthBias, TokenType.ZEnable, TokenType.ZWriteEnable, TokenType.ZFunc, TokenType.MultiSampleAntiAlias, TokenType.ScissorTestEnable, TokenType.StencilEnable, TokenType.StencilFail, TokenType.StencilFunc, TokenType.StencilMask, TokenType.StencilPass, TokenType.StencilRef, TokenType.StencilWriteMask, TokenType.StencilZFail); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.CullMode:\n                    ParseRender_State_CullMode(node); // NonTerminal Rule: Render_State_CullMode\n                    break;\n                case TokenType.FillMode:\n                    ParseRender_State_FillMode(node); // NonTerminal Rule: Render_State_FillMode\n                    break;\n                case TokenType.AlphaBlendEnable:\n                    ParseRender_State_AlphaBlendEnable(node); // NonTerminal Rule: Render_State_AlphaBlendEnable\n                    break;\n                case TokenType.SrcBlend:\n                    ParseRender_State_SrcBlend(node); // NonTerminal Rule: Render_State_SrcBlend\n                    break;\n                case TokenType.DestBlend:\n                    ParseRender_State_DestBlend(node); // NonTerminal Rule: Render_State_DestBlend\n                    break;\n                case TokenType.BlendOp:\n                    ParseRender_State_BlendOp(node); // NonTerminal Rule: Render_State_BlendOp\n                    break;\n                case TokenType.ColorWriteEnable:\n                    ParseRender_State_ColorWriteEnable(node); // NonTerminal Rule: Render_State_ColorWriteEnable\n                    break;\n                case TokenType.DepthBias:\n                    ParseRender_State_DepthBias(node); // NonTerminal Rule: Render_State_DepthBias\n                    break;\n                case TokenType.SlopeScaleDepthBias:\n                    ParseRender_State_SlopeScaleDepthBias(node); // NonTerminal Rule: Render_State_SlopeScaleDepthBias\n                    break;\n                case TokenType.ZEnable:\n                    ParseRender_State_ZEnable(node); // NonTerminal Rule: Render_State_ZEnable\n                    break;\n                case TokenType.ZWriteEnable:\n                    ParseRender_State_ZWriteEnable(node); // NonTerminal Rule: Render_State_ZWriteEnable\n                    break;\n                case TokenType.ZFunc:\n                    ParseRender_State_ZFunc(node); // NonTerminal Rule: Render_State_ZFunc\n                    break;\n                case TokenType.MultiSampleAntiAlias:\n                    ParseRender_State_MultiSampleAntiAlias(node); // NonTerminal Rule: Render_State_MultiSampleAntiAlias\n                    break;\n                case TokenType.ScissorTestEnable:\n                    ParseRender_State_ScissorTestEnable(node); // NonTerminal Rule: Render_State_ScissorTestEnable\n                    break;\n                case TokenType.StencilEnable:\n                    ParseRender_State_StencilEnable(node); // NonTerminal Rule: Render_State_StencilEnable\n                    break;\n                case TokenType.StencilFail:\n                    ParseRender_State_StencilFail(node); // NonTerminal Rule: Render_State_StencilFail\n                    break;\n                case TokenType.StencilFunc:\n                    ParseRender_State_StencilFunc(node); // NonTerminal Rule: Render_State_StencilFunc\n                    break;\n                case TokenType.StencilMask:\n                    ParseRender_State_StencilMask(node); // NonTerminal Rule: Render_State_StencilMask\n                    break;\n                case TokenType.StencilPass:\n                    ParseRender_State_StencilPass(node); // NonTerminal Rule: Render_State_StencilPass\n                    break;\n                case TokenType.StencilRef:\n                    ParseRender_State_StencilRef(node); // NonTerminal Rule: Render_State_StencilRef\n                    break;\n                case TokenType.StencilWriteMask:\n                    ParseRender_State_StencilWriteMask(node); // NonTerminal Rule: Render_State_StencilWriteMask\n                    break;\n                case TokenType.StencilZFail:\n                    ParseRender_State_StencilZFail(node); // NonTerminal Rule: Render_State_StencilZFail\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected CullMode, FillMode, AlphaBlendEnable, SrcBlend, DestBlend, BlendOp, ColorWriteEnable, DepthBias, SlopeScaleDepthBias, ZEnable, ZWriteEnable, ZFunc, MultiSampleAntiAlias, ScissorTestEnable, StencilEnable, StencilFail, StencilFunc, StencilMask, StencilPass, StencilRef, StencilWriteMask, or StencilZFail.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Render_State_Expression\n\n        private void ParsePass_Declaration(ParseNode parent) // NonTerminalSymbol: Pass_Declaration\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Pass_Declaration), \"Pass_Declaration\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Pass); // Terminal Rule: Pass\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Pass) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Pass.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Identifier); // Option Rule\n            if (tok.Type == TokenType.Identifier)\n            {\n                tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.Identifier) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                    return;\n                }\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.OpenBracket); // Terminal Rule: OpenBracket\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.OpenBracket) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenBracket.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.VertexShader, TokenType.PixelShader, TokenType.ComputeShader, TokenType.CullMode, TokenType.FillMode, TokenType.AlphaBlendEnable, TokenType.SrcBlend, TokenType.DestBlend, TokenType.BlendOp, TokenType.ColorWriteEnable, TokenType.DepthBias, TokenType.SlopeScaleDepthBias, TokenType.ZEnable, TokenType.ZWriteEnable, TokenType.ZFunc, TokenType.MultiSampleAntiAlias, TokenType.ScissorTestEnable, TokenType.StencilEnable, TokenType.StencilFail, TokenType.StencilFunc, TokenType.StencilMask, TokenType.StencilPass, TokenType.StencilRef, TokenType.StencilWriteMask, TokenType.StencilZFail); // ZeroOrMore Rule\n            while (tok.Type == TokenType.VertexShader\n                || tok.Type == TokenType.PixelShader\n                || tok.Type == TokenType.ComputeShader\n                || tok.Type == TokenType.CullMode\n                || tok.Type == TokenType.FillMode\n                || tok.Type == TokenType.AlphaBlendEnable\n                || tok.Type == TokenType.SrcBlend\n                || tok.Type == TokenType.DestBlend\n                || tok.Type == TokenType.BlendOp\n                || tok.Type == TokenType.ColorWriteEnable\n                || tok.Type == TokenType.DepthBias\n                || tok.Type == TokenType.SlopeScaleDepthBias\n                || tok.Type == TokenType.ZEnable\n                || tok.Type == TokenType.ZWriteEnable\n                || tok.Type == TokenType.ZFunc\n                || tok.Type == TokenType.MultiSampleAntiAlias\n                || tok.Type == TokenType.ScissorTestEnable\n                || tok.Type == TokenType.StencilEnable\n                || tok.Type == TokenType.StencilFail\n                || tok.Type == TokenType.StencilFunc\n                || tok.Type == TokenType.StencilMask\n                || tok.Type == TokenType.StencilPass\n                || tok.Type == TokenType.StencilRef\n                || tok.Type == TokenType.StencilWriteMask\n                || tok.Type == TokenType.StencilZFail)\n            {\n                tok = scanner.LookAhead(TokenType.VertexShader, TokenType.PixelShader, TokenType.ComputeShader, TokenType.CullMode, TokenType.FillMode, TokenType.AlphaBlendEnable, TokenType.SrcBlend, TokenType.DestBlend, TokenType.BlendOp, TokenType.ColorWriteEnable, TokenType.DepthBias, TokenType.SlopeScaleDepthBias, TokenType.ZEnable, TokenType.ZWriteEnable, TokenType.ZFunc, TokenType.MultiSampleAntiAlias, TokenType.ScissorTestEnable, TokenType.StencilEnable, TokenType.StencilFail, TokenType.StencilFunc, TokenType.StencilMask, TokenType.StencilPass, TokenType.StencilRef, TokenType.StencilWriteMask, TokenType.StencilZFail); // Choice Rule\n                switch (tok.Type)\n                { // Choice Rule\n                    case TokenType.VertexShader:\n                        ParseVertexShader_Pass_Expression(node); // NonTerminal Rule: VertexShader_Pass_Expression\n                        break;\n                    case TokenType.PixelShader:\n                        ParsePixelShader_Pass_Expression(node); // NonTerminal Rule: PixelShader_Pass_Expression\n                        break;\n                    case TokenType.ComputeShader:\n                        ParseComputeShader_Pass_Expression(node); // NonTerminal Rule: ComputeShader_Pass_Expression\n                        break;\n                    case TokenType.CullMode:\n                    case TokenType.FillMode:\n                    case TokenType.AlphaBlendEnable:\n                    case TokenType.SrcBlend:\n                    case TokenType.DestBlend:\n                    case TokenType.BlendOp:\n                    case TokenType.ColorWriteEnable:\n                    case TokenType.DepthBias:\n                    case TokenType.SlopeScaleDepthBias:\n                    case TokenType.ZEnable:\n                    case TokenType.ZWriteEnable:\n                    case TokenType.ZFunc:\n                    case TokenType.MultiSampleAntiAlias:\n                    case TokenType.ScissorTestEnable:\n                    case TokenType.StencilEnable:\n                    case TokenType.StencilFail:\n                    case TokenType.StencilFunc:\n                    case TokenType.StencilMask:\n                    case TokenType.StencilPass:\n                    case TokenType.StencilRef:\n                    case TokenType.StencilWriteMask:\n                    case TokenType.StencilZFail:\n                        ParseRender_State_Expression(node); // NonTerminal Rule: Render_State_Expression\n                        break;\n                    default:\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected VertexShader, PixelShader, ComputeShader, CullMode, FillMode, AlphaBlendEnable, SrcBlend, DestBlend, BlendOp, ColorWriteEnable, DepthBias, SlopeScaleDepthBias, ZEnable, ZWriteEnable, ZFunc, MultiSampleAntiAlias, ScissorTestEnable, StencilEnable, StencilFail, StencilFunc, StencilMask, StencilPass, StencilRef, StencilWriteMask, or StencilZFail.\", 0x0002, tok));\n                        break;\n                } // Choice Rule\n            tok = scanner.LookAhead(TokenType.VertexShader, TokenType.PixelShader, TokenType.ComputeShader, TokenType.CullMode, TokenType.FillMode, TokenType.AlphaBlendEnable, TokenType.SrcBlend, TokenType.DestBlend, TokenType.BlendOp, TokenType.ColorWriteEnable, TokenType.DepthBias, TokenType.SlopeScaleDepthBias, TokenType.ZEnable, TokenType.ZWriteEnable, TokenType.ZFunc, TokenType.MultiSampleAntiAlias, TokenType.ScissorTestEnable, TokenType.StencilEnable, TokenType.StencilFail, TokenType.StencilFunc, TokenType.StencilMask, TokenType.StencilPass, TokenType.StencilRef, TokenType.StencilWriteMask, TokenType.StencilZFail); // ZeroOrMore Rule\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.CloseBracket); // Terminal Rule: CloseBracket\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.CloseBracket) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseBracket.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Pass_Declaration\n\n        private void ParseVertexShader_Pass_Expression(ParseNode parent) // NonTerminalSymbol: VertexShader_Pass_Expression\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.VertexShader_Pass_Expression), \"VertexShader_Pass_Expression\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.VertexShader); // Terminal Rule: VertexShader\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.VertexShader) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.VertexShader.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Compile); // Terminal Rule: Compile\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Compile) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Compile.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ShaderModel); // Terminal Rule: ShaderModel\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ShaderModel) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ShaderModel.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Identifier) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.OpenParenthesis) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenParenthesis.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.CloseParenthesis) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseParenthesis.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: VertexShader_Pass_Expression\n\n        private void ParsePixelShader_Pass_Expression(ParseNode parent) // NonTerminalSymbol: PixelShader_Pass_Expression\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.PixelShader_Pass_Expression), \"PixelShader_Pass_Expression\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.PixelShader); // Terminal Rule: PixelShader\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.PixelShader) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.PixelShader.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Compile); // Terminal Rule: Compile\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Compile) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Compile.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ShaderModel); // Terminal Rule: ShaderModel\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ShaderModel) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ShaderModel.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Identifier) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.OpenParenthesis) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenParenthesis.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.CloseParenthesis) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseParenthesis.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: PixelShader_Pass_Expression\n\n        private void ParseComputeShader_Pass_Expression(ParseNode parent) // NonTerminalSymbol: ComputeShader_Pass_Expression\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.ComputeShader_Pass_Expression), \"ComputeShader_Pass_Expression\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ComputeShader); // Terminal Rule: ComputeShader\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ComputeShader) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ComputeShader.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Compile); // Terminal Rule: Compile\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Compile) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Compile.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.ShaderModel); // Terminal Rule: ShaderModel\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.ShaderModel) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.ShaderModel.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Identifier) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.OpenParenthesis) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenParenthesis.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.CloseParenthesis) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseParenthesis.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: ComputeShader_Pass_Expression\n\n        private void ParseAddressMode_Clamp(ParseNode parent) // NonTerminalSymbol: AddressMode_Clamp\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode_Clamp), \"AddressMode_Clamp\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Clamp); // Terminal Rule: Clamp\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Clamp) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Clamp.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: AddressMode_Clamp\n\n        private void ParseAddressMode_Wrap(ParseNode parent) // NonTerminalSymbol: AddressMode_Wrap\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode_Wrap), \"AddressMode_Wrap\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Wrap); // Terminal Rule: Wrap\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Wrap) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Wrap.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: AddressMode_Wrap\n\n        private void ParseAddressMode_Mirror(ParseNode parent) // NonTerminalSymbol: AddressMode_Mirror\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode_Mirror), \"AddressMode_Mirror\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Mirror); // Terminal Rule: Mirror\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Mirror) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Mirror.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: AddressMode_Mirror\n\n        private void ParseAddressMode_Border(ParseNode parent) // NonTerminalSymbol: AddressMode_Border\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode_Border), \"AddressMode_Border\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Border); // Terminal Rule: Border\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Border) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Border.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: AddressMode_Border\n\n        private void ParseAddressMode(ParseNode parent) // NonTerminalSymbol: AddressMode\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode), \"AddressMode\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.Clamp, TokenType.Wrap, TokenType.Mirror, TokenType.Border); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Clamp:\n                    ParseAddressMode_Clamp(node); // NonTerminal Rule: AddressMode_Clamp\n                    break;\n                case TokenType.Wrap:\n                    ParseAddressMode_Wrap(node); // NonTerminal Rule: AddressMode_Wrap\n                    break;\n                case TokenType.Mirror:\n                    ParseAddressMode_Mirror(node); // NonTerminal Rule: AddressMode_Mirror\n                    break;\n                case TokenType.Border:\n                    ParseAddressMode_Border(node); // NonTerminal Rule: AddressMode_Border\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Clamp, Wrap, Mirror, or Border.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: AddressMode\n\n        private void ParseTextureFilter_None(ParseNode parent) // NonTerminalSymbol: TextureFilter_None\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter_None), \"TextureFilter_None\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.None); // Terminal Rule: None\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.None) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.None.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: TextureFilter_None\n\n        private void ParseTextureFilter_Linear(ParseNode parent) // NonTerminalSymbol: TextureFilter_Linear\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter_Linear), \"TextureFilter_Linear\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Linear); // Terminal Rule: Linear\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Linear) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Linear.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: TextureFilter_Linear\n\n        private void ParseTextureFilter_Point(ParseNode parent) // NonTerminalSymbol: TextureFilter_Point\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter_Point), \"TextureFilter_Point\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Point); // Terminal Rule: Point\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Point) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Point.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: TextureFilter_Point\n\n        private void ParseTextureFilter_Anisotropic(ParseNode parent) // NonTerminalSymbol: TextureFilter_Anisotropic\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter_Anisotropic), \"TextureFilter_Anisotropic\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.Scan(TokenType.Anisotropic); // Terminal Rule: Anisotropic\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Anisotropic) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Anisotropic.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: TextureFilter_Anisotropic\n\n        private void ParseTextureFilter(ParseNode parent) // NonTerminalSymbol: TextureFilter\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter), \"TextureFilter\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.None, TokenType.Linear, TokenType.Point, TokenType.Anisotropic); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.None:\n                    ParseTextureFilter_None(node); // NonTerminal Rule: TextureFilter_None\n                    break;\n                case TokenType.Linear:\n                    ParseTextureFilter_Linear(node); // NonTerminal Rule: TextureFilter_Linear\n                    break;\n                case TokenType.Point:\n                    ParseTextureFilter_Point(node); // NonTerminal Rule: TextureFilter_Point\n                    break;\n                case TokenType.Anisotropic:\n                    ParseTextureFilter_Anisotropic(node); // NonTerminal Rule: TextureFilter_Anisotropic\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected None, Linear, Point, or Anisotropic.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: TextureFilter\n\n        private void ParseSampler_State_Texture(ParseNode parent) // NonTerminalSymbol: Sampler_State_Texture\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_Texture), \"Sampler_State_Texture\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Texture); // Terminal Rule: Texture\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Texture) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Texture.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.LessThan, TokenType.OpenParenthesis); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.LessThan:\n                    tok = scanner.Scan(TokenType.LessThan); // Terminal Rule: LessThan\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.LessThan) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.LessThan.ToString(), 0x1001, tok));\n                        return;\n                    }\n                    break;\n                case TokenType.OpenParenthesis:\n                    tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.OpenParenthesis) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenParenthesis.ToString(), 0x1001, tok));\n                        return;\n                    }\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected LessThan or OpenParenthesis.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Identifier) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.GreaterThan, TokenType.CloseParenthesis); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.GreaterThan:\n                    tok = scanner.Scan(TokenType.GreaterThan); // Terminal Rule: GreaterThan\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.GreaterThan) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.GreaterThan.ToString(), 0x1001, tok));\n                        return;\n                    }\n                    break;\n                case TokenType.CloseParenthesis:\n                    tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.CloseParenthesis) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseParenthesis.ToString(), 0x1001, tok));\n                        return;\n                    }\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected GreaterThan or CloseParenthesis.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_Texture\n\n        private void ParseSampler_State_MinFilter(ParseNode parent) // NonTerminalSymbol: Sampler_State_MinFilter\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MinFilter), \"Sampler_State_MinFilter\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.MinFilter); // Terminal Rule: MinFilter\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.MinFilter) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.MinFilter.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseTextureFilter(node); // NonTerminal Rule: TextureFilter\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_MinFilter\n\n        private void ParseSampler_State_MagFilter(ParseNode parent) // NonTerminalSymbol: Sampler_State_MagFilter\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MagFilter), \"Sampler_State_MagFilter\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.MagFilter); // Terminal Rule: MagFilter\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.MagFilter) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.MagFilter.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseTextureFilter(node); // NonTerminal Rule: TextureFilter\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_MagFilter\n\n        private void ParseSampler_State_MipFilter(ParseNode parent) // NonTerminalSymbol: Sampler_State_MipFilter\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MipFilter), \"Sampler_State_MipFilter\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.MipFilter); // Terminal Rule: MipFilter\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.MipFilter) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.MipFilter.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseTextureFilter(node); // NonTerminal Rule: TextureFilter\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_MipFilter\n\n        private void ParseSampler_State_Filter(ParseNode parent) // NonTerminalSymbol: Sampler_State_Filter\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_Filter), \"Sampler_State_Filter\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Filter); // Terminal Rule: Filter\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Filter) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Filter.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseTextureFilter(node); // NonTerminal Rule: TextureFilter\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_Filter\n\n        private void ParseSampler_State_AddressU(ParseNode parent) // NonTerminalSymbol: Sampler_State_AddressU\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_AddressU), \"Sampler_State_AddressU\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.AddressU); // Terminal Rule: AddressU\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.AddressU) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.AddressU.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseAddressMode(node); // NonTerminal Rule: AddressMode\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_AddressU\n\n        private void ParseSampler_State_AddressV(ParseNode parent) // NonTerminalSymbol: Sampler_State_AddressV\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_AddressV), \"Sampler_State_AddressV\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.AddressV); // Terminal Rule: AddressV\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.AddressV) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.AddressV.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseAddressMode(node); // NonTerminal Rule: AddressMode\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_AddressV\n\n        private void ParseSampler_State_AddressW(ParseNode parent) // NonTerminalSymbol: Sampler_State_AddressW\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_AddressW), \"Sampler_State_AddressW\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.AddressW); // Terminal Rule: AddressW\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.AddressW) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.AddressW.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            ParseAddressMode(node); // NonTerminal Rule: AddressMode\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_AddressW\n\n        private void ParseSampler_State_BorderColor(ParseNode parent) // NonTerminalSymbol: Sampler_State_BorderColor\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_BorderColor), \"Sampler_State_BorderColor\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.BorderColor); // Terminal Rule: BorderColor\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.BorderColor) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.BorderColor.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.HexColor); // Terminal Rule: HexColor\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.HexColor) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.HexColor.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_BorderColor\n\n        private void ParseSampler_State_MaxMipLevel(ParseNode parent) // NonTerminalSymbol: Sampler_State_MaxMipLevel\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MaxMipLevel), \"Sampler_State_MaxMipLevel\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.MaxMipLevel); // Terminal Rule: MaxMipLevel\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.MaxMipLevel) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.MaxMipLevel.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Number) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_MaxMipLevel\n\n        private void ParseSampler_State_MaxAnisotropy(ParseNode parent) // NonTerminalSymbol: Sampler_State_MaxAnisotropy\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MaxAnisotropy), \"Sampler_State_MaxAnisotropy\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.MaxAnisotropy); // Terminal Rule: MaxAnisotropy\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.MaxAnisotropy) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.MaxAnisotropy.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Number) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_MaxAnisotropy\n\n        private void ParseSampler_State_MipLodBias(ParseNode parent) // NonTerminalSymbol: Sampler_State_MipLodBias\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MipLodBias), \"Sampler_State_MipLodBias\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.MipLodBias); // Terminal Rule: MipLodBias\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.MipLodBias) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.MipLodBias.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Equals) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Number) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Semicolon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_MipLodBias\n\n        private void ParseSampler_State_Expression(ParseNode parent) // NonTerminalSymbol: Sampler_State_Expression\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_Expression), \"Sampler_State_Expression\");\n            parent.Nodes.Add(node);\n\n            tok = scanner.LookAhead(TokenType.Texture, TokenType.MinFilter, TokenType.MagFilter, TokenType.MipFilter, TokenType.Filter, TokenType.AddressU, TokenType.AddressV, TokenType.AddressW, TokenType.BorderColor, TokenType.MaxMipLevel, TokenType.MaxAnisotropy, TokenType.MipLodBias); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Texture:\n                    ParseSampler_State_Texture(node); // NonTerminal Rule: Sampler_State_Texture\n                    break;\n                case TokenType.MinFilter:\n                    ParseSampler_State_MinFilter(node); // NonTerminal Rule: Sampler_State_MinFilter\n                    break;\n                case TokenType.MagFilter:\n                    ParseSampler_State_MagFilter(node); // NonTerminal Rule: Sampler_State_MagFilter\n                    break;\n                case TokenType.MipFilter:\n                    ParseSampler_State_MipFilter(node); // NonTerminal Rule: Sampler_State_MipFilter\n                    break;\n                case TokenType.Filter:\n                    ParseSampler_State_Filter(node); // NonTerminal Rule: Sampler_State_Filter\n                    break;\n                case TokenType.AddressU:\n                    ParseSampler_State_AddressU(node); // NonTerminal Rule: Sampler_State_AddressU\n                    break;\n                case TokenType.AddressV:\n                    ParseSampler_State_AddressV(node); // NonTerminal Rule: Sampler_State_AddressV\n                    break;\n                case TokenType.AddressW:\n                    ParseSampler_State_AddressW(node); // NonTerminal Rule: Sampler_State_AddressW\n                    break;\n                case TokenType.BorderColor:\n                    ParseSampler_State_BorderColor(node); // NonTerminal Rule: Sampler_State_BorderColor\n                    break;\n                case TokenType.MaxMipLevel:\n                    ParseSampler_State_MaxMipLevel(node); // NonTerminal Rule: Sampler_State_MaxMipLevel\n                    break;\n                case TokenType.MaxAnisotropy:\n                    ParseSampler_State_MaxAnisotropy(node); // NonTerminal Rule: Sampler_State_MaxAnisotropy\n                    break;\n                case TokenType.MipLodBias:\n                    ParseSampler_State_MipLodBias(node); // NonTerminal Rule: Sampler_State_MipLodBias\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Texture, MinFilter, MagFilter, MipFilter, Filter, AddressU, AddressV, AddressW, BorderColor, MaxMipLevel, MaxAnisotropy, or MipLodBias.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_State_Expression\n\n        private void ParseSampler_Register_Expression(ParseNode parent) // NonTerminalSymbol: Sampler_Register_Expression\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_Register_Expression), \"Sampler_Register_Expression\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Colon); // Terminal Rule: Colon\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Colon) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Colon.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Register); // Terminal Rule: Register\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Register) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Register.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.OpenParenthesis) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenParenthesis.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Identifier) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Comma); // Option Rule\n            if (tok.Type == TokenType.Comma)\n            {\n\n                 // Concat Rule\n                tok = scanner.Scan(TokenType.Comma); // Terminal Rule: Comma\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.Comma) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Comma.ToString(), 0x1001, tok));\n                    return;\n                }\n\n                 // Concat Rule\n                tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.Identifier) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                    return;\n                }\n\n                 // Concat Rule\n                tok = scanner.LookAhead(TokenType.OpenSquareBracket); // Option Rule\n                if (tok.Type == TokenType.OpenSquareBracket)\n                {\n\n                     // Concat Rule\n                    tok = scanner.Scan(TokenType.OpenSquareBracket); // Terminal Rule: OpenSquareBracket\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.OpenSquareBracket) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenSquareBracket.ToString(), 0x1001, tok));\n                        return;\n                    }\n\n                     // Concat Rule\n                    tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.Number) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Number.ToString(), 0x1001, tok));\n                        return;\n                    }\n\n                     // Concat Rule\n                    tok = scanner.Scan(TokenType.CloseSquareBracket); // Terminal Rule: CloseSquareBracket\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.CloseSquareBracket) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseSquareBracket.ToString(), 0x1001, tok));\n                        return;\n                    }\n                }\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.CloseParenthesis) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseParenthesis.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_Register_Expression\n\n        private void ParseSampler_Declaration_States(ParseNode parent) // NonTerminalSymbol: Sampler_Declaration_States\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_Declaration_States), \"Sampler_Declaration_States\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Equals); // Option Rule\n            if (tok.Type == TokenType.Equals)\n            {\n\n                 // Concat Rule\n                tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.Equals) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Equals.ToString(), 0x1001, tok));\n                    return;\n                }\n\n                 // Concat Rule\n                tok = scanner.Scan(TokenType.SamplerState); // Terminal Rule: SamplerState\n                n = node.CreateNode(tok, tok.ToString() );\n                node.Token.UpdateRange(tok);\n                node.Nodes.Add(n);\n                if (tok.Type != TokenType.SamplerState) {\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.SamplerState.ToString(), 0x1001, tok));\n                    return;\n                }\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.OpenBracket); // Terminal Rule: OpenBracket\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.OpenBracket) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.OpenBracket.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Texture, TokenType.MinFilter, TokenType.MagFilter, TokenType.MipFilter, TokenType.Filter, TokenType.AddressU, TokenType.AddressV, TokenType.AddressW, TokenType.BorderColor, TokenType.MaxMipLevel, TokenType.MaxAnisotropy, TokenType.MipLodBias); // ZeroOrMore Rule\n            while (tok.Type == TokenType.Texture\n                || tok.Type == TokenType.MinFilter\n                || tok.Type == TokenType.MagFilter\n                || tok.Type == TokenType.MipFilter\n                || tok.Type == TokenType.Filter\n                || tok.Type == TokenType.AddressU\n                || tok.Type == TokenType.AddressV\n                || tok.Type == TokenType.AddressW\n                || tok.Type == TokenType.BorderColor\n                || tok.Type == TokenType.MaxMipLevel\n                || tok.Type == TokenType.MaxAnisotropy\n                || tok.Type == TokenType.MipLodBias)\n            {\n                ParseSampler_State_Expression(node); // NonTerminal Rule: Sampler_State_Expression\n            tok = scanner.LookAhead(TokenType.Texture, TokenType.MinFilter, TokenType.MagFilter, TokenType.MipFilter, TokenType.Filter, TokenType.AddressU, TokenType.AddressV, TokenType.AddressW, TokenType.BorderColor, TokenType.MaxMipLevel, TokenType.MaxAnisotropy, TokenType.MipLodBias); // ZeroOrMore Rule\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.CloseBracket); // Terminal Rule: CloseBracket\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.CloseBracket) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseBracket.ToString(), 0x1001, tok));\n                return;\n            }\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_Declaration_States\n\n        private void ParseSampler_Declaration(ParseNode parent) // NonTerminalSymbol: Sampler_Declaration\n        {\n            Token tok;\n            ParseNode n;\n            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_Declaration), \"Sampler_Declaration\");\n            parent.Nodes.Add(node);\n\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Sampler); // Terminal Rule: Sampler\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Sampler) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Sampler.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier\n            n = node.CreateNode(tok, tok.ToString() );\n            node.Token.UpdateRange(tok);\n            node.Nodes.Add(n);\n            if (tok.Type != TokenType.Identifier) {\n                tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Identifier.ToString(), 0x1001, tok));\n                return;\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Colon); // ZeroOrMore Rule\n            while (tok.Type == TokenType.Colon)\n            {\n                ParseSampler_Register_Expression(node); // NonTerminal Rule: Sampler_Register_Expression\n            tok = scanner.LookAhead(TokenType.Colon); // ZeroOrMore Rule\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Equals, TokenType.OpenBracket); // Option Rule\n            if (tok.Type == TokenType.Equals\n                || tok.Type == TokenType.OpenBracket)\n            {\n                ParseSampler_Declaration_States(node); // NonTerminal Rule: Sampler_Declaration_States\n            }\n\n             // Concat Rule\n            tok = scanner.LookAhead(TokenType.Semicolon, TokenType.Comma, TokenType.CloseParenthesis); // Choice Rule\n            switch (tok.Type)\n            { // Choice Rule\n                case TokenType.Semicolon:\n                    tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.Semicolon) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Semicolon.ToString(), 0x1001, tok));\n                        return;\n                    }\n                    break;\n                case TokenType.Comma:\n                    tok = scanner.Scan(TokenType.Comma); // Terminal Rule: Comma\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.Comma) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.Comma.ToString(), 0x1001, tok));\n                        return;\n                    }\n                    break;\n                case TokenType.CloseParenthesis:\n                    tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis\n                    n = node.CreateNode(tok, tok.ToString() );\n                    node.Token.UpdateRange(tok);\n                    node.Nodes.Add(n);\n                    if (tok.Type != TokenType.CloseParenthesis) {\n                        tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected \" + TokenType.CloseParenthesis.ToString(), 0x1001, tok));\n                        return;\n                    }\n                    break;\n                default:\n                    tree.Errors.Add(new ParseError(\"Unexpected token '\" + tok.Text.Replace(\"\\n\", \"\") + \"' found. Expected Semicolon, Comma, or CloseParenthesis.\", 0x0002, tok));\n                    break;\n            } // Choice Rule\n\n            parent.Token.UpdateRange(node.Token);\n        } // NonTerminalSymbol: Sampler_Declaration\n\n\n    }\n\n    #endregion Parser\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/PassInfo.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\n{\n    public class PassInfo\n    {\n        public string name;\n\n        public string vsModel;\n        public string vsFunction;\n\n        public string psModel;\n        public string psFunction;\n\n        public string csModel;\n        public string csFunction;\n\n        public BlendState blendState;\n        public RasterizerState rasterizerState;\n        public DepthStencilState depthStencilState;\n\t\t\n        private static Blend ToAlphaBlend(BlendContent blend)\n        {\n            switch (blend)\n            {\n                case BlendContent.SourceColor:\n                    return Blend.SourceAlpha;\n                case BlendContent.InverseSourceColor:\n                    return Blend.InverseSourceAlpha;\n                case BlendContent.DestinationColor:\n                    return Blend.DestinationAlpha;\n                case BlendContent.InverseDestinationColor:\n                    return Blend.InverseDestinationAlpha;\n            }\n            return (Blend)blend;\n        }\n\n        public bool AlphaBlendEnable\n        {\n            set\n            {\n                if (value)\n                {\n                    if (blendState == null)\n                    {\n                        blendState = new BlendState();\n                        blendState.ColorSourceBlend = Blend.One;\n                        blendState.AlphaSourceBlend = Blend.One;\n                        blendState.ColorDestinationBlend = Blend.InverseSourceAlpha;\n                        blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha;\n                    }\n                }\n                else if (!value)\n                {\n                    if (blendState == null)\n                        blendState = new BlendState();\n                    blendState.ColorSourceBlend = Blend.One;\n                    blendState.AlphaSourceBlend = Blend.One;\n                    blendState.ColorDestinationBlend = Blend.Zero;\n                    blendState.AlphaDestinationBlend = Blend.Zero;\n                }\n            }\n        }\n\n        public FillModeContent FillMode\n        {\n            set\n            {\n                if (rasterizerState == null)\n                    rasterizerState = new RasterizerState();\n                rasterizerState.FillMode = (FillMode)value;             \n            }\n        }\n\n        public CullModeContent CullMode\n        {\n            set\n            {\n                if (rasterizerState == null)\n                    rasterizerState = new RasterizerState();\n                rasterizerState.CullMode = (CullMode)value;\n            }\n        }\n\n        public bool ZEnable\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.DepthBufferEnable = value;\n            }\n        }\n\n        public bool ZWriteEnable\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.DepthBufferWriteEnable = value;\n            }\n        }\n\n        public CompareFunctionContent DepthBufferFunction\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.DepthBufferFunction = (CompareFunction)value;\n            }\n        }\n\n        public bool MultiSampleAntiAlias\n        {\n            set\n            {\n                if (rasterizerState == null)\n                    rasterizerState = new RasterizerState();\n                rasterizerState.MultiSampleAntiAlias = value;\n            }\n        }\n\n        public bool ScissorTestEnable\n        {\n            set\n            {\n                if (rasterizerState == null)\n                    rasterizerState = new RasterizerState();\n                rasterizerState.ScissorTestEnable = value;\n            }\n        }\n\n        public bool StencilEnable\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.StencilEnable = value;\n            }\n        }\n\n        public StencilOperationContent StencilFail\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.StencilFail = (StencilOperation)value;\n            }\n        }\n\n        public CompareFunctionContent StencilFunc\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.StencilFunction = (CompareFunction)value;\n            }\n        }\n\n        public int StencilMask\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.StencilMask = value;\n            }\n        }\n\n        public StencilOperationContent StencilPass\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.StencilPass = (StencilOperation)value;\n            }\n        }\n\n        public int StencilRef\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.ReferenceStencil = value;\n            }\n        }\n\n        public int StencilWriteMask\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.StencilWriteMask = value;\n            }\n        }\n\n        public StencilOperationContent StencilZFail\n        {\n            set\n            {\n                if (depthStencilState == null)\n                    depthStencilState = new DepthStencilState();\n                depthStencilState.StencilDepthBufferFail = (StencilOperation)value;\n            }\n        }\n\n        public BlendContent SrcBlend\n        {\n            set\n            {\n                if (blendState == null)\n                    blendState = new BlendState();\n                blendState.ColorSourceBlend = (Blend)value;\n                blendState.AlphaSourceBlend = ToAlphaBlend(value);\n            }\n        }\n\n        public BlendContent DestBlend\n        {\n            set\n            {\n                if (blendState == null)\n                    blendState = new BlendState();\n                blendState.ColorDestinationBlend = (Blend)value;\n                blendState.AlphaDestinationBlend = ToAlphaBlend(value);\n            }\n        }\n\n        public BlendFunctionContent BlendOp\n        {\n            set\n            {\n                if (blendState == null)\n                    blendState = new BlendState();\n                blendState.AlphaBlendFunction = (BlendFunction)value;\n            }\n        }\n\n        public ColorWriteChannelsContent ColorWriteEnable\n        {\n            set\n            {\n                if (blendState == null)\n                    blendState = new BlendState();\n                blendState.ColorWriteChannels = (ColorWriteChannels)value;\n            }    \n        }\n\n        public float DepthBias\n        {\n            set\n            {\n                if (rasterizerState == null)\n                    rasterizerState = new RasterizerState();\n                rasterizerState.DepthBias = value;\n            }\n        }\n\n        public float SlopeScaleDepthBias\n        {\n            set\n            {\n                if (rasterizerState == null)\n                    rasterizerState = new RasterizerState();\n                rasterizerState.SlopeScaleDepthBias = value;\n            }\n        }\n    }\n\n\n    /// <summary>\n    /// Defines stencil buffer operations.\n    /// </summary>\n    public enum StencilOperationContent\n    {\n        /// <summary>\n        /// Does not update the stencil buffer entry.\n        /// </summary>\n        Keep,\n        /// <summary>\n        /// Sets the stencil buffer entry to 0.\n        /// </summary>\n        Zero,\n        /// <summary>\n        /// Replaces the stencil buffer entry with a reference value.\n        /// </summary>\n        Replace,\n        /// <summary>\n        /// Increments the stencil buffer entry, wrapping to 0 if the new value exceeds the maximum value.\n        /// </summary>\n        Increment,\n        /// <summary>\n        /// Decrements the stencil buffer entry, wrapping to the maximum value if the new value is less than 0.\n        /// </summary>\n        Decrement,\n        /// <summary>\n        /// Increments the stencil buffer entry, clamping to the maximum value.\n        /// </summary>\n        IncrementSaturation,\n        /// <summary>\n        /// Decrements the stencil buffer entry, clamping to 0.\n        /// </summary>\n        DecrementSaturation,\n        /// <summary>\n        /// Inverts the bits in the stencil buffer entry.\n        /// </summary>\n        Invert\n    }\n\n    /// <summary>\n    /// Defines a blend mode.\n    /// </summary>\n    public enum BlendContent\n    {\n        /// <summary>\n        /// Each component of the color is multiplied by {1, 1, 1, 1}.\n        /// </summary>\n        One,\n        /// <summary>\n        /// Each component of the color is multiplied by {0, 0, 0, 0}.\n        /// </summary>\n        Zero,\n        /// <summary>\n        /// Each component of the color is multiplied by the source color. \n        /// {Rs, Gs, Bs, As}, where Rs, Gs, Bs, As are color source values.\n        /// </summary>\n        SourceColor,\n        /// <summary>\n        /// Each component of the color is multiplied by the inverse of the source color.\n        ///  {1 − Rs, 1 − Gs, 1 − Bs, 1 − As}, where Rs, Gs, Bs, As are color source values.\n        /// </summary>\n        InverseSourceColor,\n        /// <summary>\n        /// Each component of the color is multiplied by the alpha value of the source. \n        /// {As, As, As, As}, where As is the source alpha value.\n        /// </summary>\n        SourceAlpha,\n        /// <summary>\n        /// Each component of the color is multiplied by the inverse of the alpha value of the source. \n        /// {1 − As, 1 − As, 1 − As, 1 − As}, where As is the source alpha value.\n        /// </summary>\n        InverseSourceAlpha,\n        /// <summary>\n        /// Each component color is multiplied by the destination color. \n        /// {Rd, Gd, Bd, Ad}, where Rd, Gd, Bd, Ad are color destination values.\n        /// </summary>\n        DestinationColor,\n        /// <summary>\n        /// Each component of the color is multiplied by the inversed destination color. \n        /// {1 − Rd, 1 − Gd, 1 − Bd, 1 − Ad}, where Rd, Gd, Bd, Ad are color destination values.\n        /// </summary>\n        InverseDestinationColor,\n        /// <summary>\n        /// Each component of the color is multiplied by the alpha value of the destination.\n        /// {Ad, Ad, Ad, Ad}, where Ad is the destination alpha value.\n        /// </summary>\n        DestinationAlpha,\n        /// <summary>\n        /// Each component of the color is multiplied by the inversed alpha value of the destination. \n        /// {1 − Ad, 1 − Ad, 1 − Ad, 1 − Ad}, where Ad is the destination alpha value.\n        /// </summary>\n        InverseDestinationAlpha,\n        /// <summary>\n        /// Each component of the color is multiplied by a constant in the <see cref=\"P:Microsoft.Xna.Framework.Graphics.GraphicsDevice.BlendFactor\"/>.\n        /// </summary>\n        BlendFactor,\n        /// <summary>\n        /// Each component of the color is multiplied by a inversed constant in the <see cref=\"P:Microsoft.Xna.Framework.Graphics.GraphicsDevice.BlendFactor\"/>.\n        /// </summary>\n        InverseBlendFactor,\n        /// <summary>\n        /// Each component of the color is multiplied by either the alpha of the source color, or the inverse of the alpha of the source color, whichever is greater. \n        /// {f, f, f, 1}, where f = min(As, 1 − As), where As is the source alpha value.\n        /// </summary>\n        SourceAlphaSaturation\n    }\n\n    /// <summary>\n    /// Defines a function for color blending.\n    /// </summary>\n    public enum BlendFunctionContent\n    {\n        /// <summary>\n        /// The function will adds destination to the source. (srcColor * srcBlend) + (destColor * destBlend)\n        /// </summary>\n        Add,\n        /// <summary>\n        /// The function will subtracts destination from source. (srcColor * srcBlend) − (destColor * destBlend)\n        /// </summary>\n        Subtract,\n        /// <summary>\n        /// The function will subtracts source from destination. (destColor * destBlend) - (srcColor * srcBlend) \n        /// </summary>\n        ReverseSubtract,\n        /// <summary>\n        /// The function will extracts minimum of the source and destination. min((srcColor * srcBlend),(destColor * destBlend))\n        /// </summary>\n        Min,\n        /// <summary>\n        /// The function will extracts maximum of the source and destination. max((srcColor * srcBlend),(destColor * destBlend))\n        /// </summary>\n        Max\n    }\n\n    /// <summary>\n    /// Defines the color channels for render target blending operations.\n    /// </summary>\n    [Flags]\n    public enum ColorWriteChannelsContent\n    {\n        /// <summary>\n        /// No channels selected.\n        /// </summary>\n        None = 0,\n        /// <summary>\n        /// Red channel selected.\n        /// </summary>\n        Red = 1,\n        /// <summary>\n        /// Green channel selected.\n        /// </summary>\n        Green = 2,\n        /// <summary>\n        /// Blue channel selected.\n        /// </summary>\n        Blue = 4,\n        /// <summary>\n        /// Alpha channel selected.\n        /// </summary>\n        Alpha = 8,\n        /// <summary>\n        /// All channels selected.\n        /// </summary>\n        All = 15\n    }\n\n    /// <summary>\n    /// Defines options for filling the primitive.\n    /// </summary>\n    public enum FillModeContent\n    {\n        /// <summary>\n        /// Draw solid faces for each primitive.\n        /// </summary>\n        Solid,\n        /// <summary>\n        /// Draw lines for each primitive.\n        /// </summary>\n        WireFrame\n    }\n\n\n    /// <summary>\n    /// Defines a culling mode for faces in rasterization process.\n    /// </summary>\n    public enum CullModeContent\n    {\n        /// <summary>\n        /// Do not cull faces.\n        /// </summary>\n        None,\n        /// <summary>\n        /// Cull faces with clockwise order.\n        /// </summary>\n        CullClockwiseFace,\n        /// <summary>\n        /// Cull faces with counter clockwise order.\n        /// </summary>\n        CullCounterClockwiseFace\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/SamplerStateInfo.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\n{\n    public class SamplerStateInfo\n    {\n        private SamplerState _state;\n        \n        private bool _dirty;\n\n        private TextureFilterTypeContent _minFilter;\n        private TextureFilterTypeContent _magFilter;\n        private TextureFilterTypeContent _mipFilter;\n\n        private TextureAddressModeContent _addressU;\n        private TextureAddressModeContent _addressV;\n        private TextureAddressModeContent _addressW;\n\n        private Color _borderColor;\n\n        private int _maxAnisotropy;\n        private int _maxMipLevel;\n        private float _mipMapLevelOfDetailBias;\n\n        public SamplerStateInfo()\n        {\n            // NOTE: These match the defaults of SamplerState.\n            _minFilter = TextureFilterTypeContent.Linear;\n            _magFilter = TextureFilterTypeContent.Linear;\n            _mipFilter = TextureFilterTypeContent.Linear;\n            _addressU = TextureAddressModeContent.Wrap;\n            _addressV = TextureAddressModeContent.Wrap;\n            _addressW = TextureAddressModeContent.Wrap;\n            _borderColor = Color.White;\n            _maxAnisotropy = 4;\n            _maxMipLevel = 0;\n            _mipMapLevelOfDetailBias = 0.0f;\n        }\n\n        public string Name { get; set; }\n\n        public string TextureName { get; set; }\n\n        public TextureFilterTypeContent MinFilter\n        {\n            set\n            {\n                _minFilter = value;\n                _dirty = true;\n            }\n        }\n\n        public TextureFilterTypeContent MagFilter\n        {\n            set\n            {\n                _magFilter = value;\n                _dirty = true;\n            }\n        }\n\n        public TextureFilterTypeContent MipFilter\n        {\n            set\n            {\n                _mipFilter = value;\n                _dirty = true;\n            }\n        }\n\n        public TextureFilterTypeContent Filter\n        {\n            set\n            {\n                _minFilter = _magFilter = _mipFilter = value;\n                _dirty = true;\n            }\n        }\n\n        public TextureAddressModeContent AddressU\n        {\n            set\n            {\n                _addressU = value;\n                _dirty = true;\n            }\n        }\n\n        public TextureAddressModeContent AddressV\n        {\n            set\n            {\n                _addressV = value;\n                _dirty = true;\n            }\n        }\n\n        public TextureAddressModeContent AddressW\n        {\n            set\n            {\n                _addressW = value;\n                _dirty = true;\n            }\n        }\n\n        public Color BorderColor\n        {\n            set\n            {\n                _borderColor = value;\n                _dirty = true;\n            }\n        }\n\n        public int MaxAnisotropy\n        {\n            set\n            {\n                _maxAnisotropy = value;\n                _dirty = true;\n            }\n        }\n\n        public int MaxMipLevel\n        {\n            set\n            {\n                _maxMipLevel = value;\n                _dirty = true;\n            }\n        }\n\n        public float MipMapLevelOfDetailBias\n        {\n            set\n            {\n                _mipMapLevelOfDetailBias = value;\n                _dirty = true;\n            }\n        }\n\n        static TextureAddressMode ToXNATextureAddressMode(TextureAddressModeContent textureAddressMode)\n        {\n            switch (textureAddressMode)\n            {\n                case TextureAddressModeContent.Clamp:\n                    return TextureAddressMode.Clamp;\n                case TextureAddressModeContent.Wrap:\n                    return TextureAddressMode.Wrap;\n                case TextureAddressModeContent.Mirror:\n                    return TextureAddressMode.Mirror;\n                case TextureAddressModeContent.Border:\n                    return TextureAddressMode.Border;\n\n                default:\n                    throw new NotImplementedException();\n            }\n        }\n\n        private void UpdateSamplerState()\n        {\n            // Get the existing state or create it.\n            if (_state == null)\n                _state = new SamplerState();\n\n            _state.AddressU = ToXNATextureAddressMode(_addressU);\n            _state.AddressV = ToXNATextureAddressMode(_addressV);\n            _state.AddressW = ToXNATextureAddressMode(_addressW);\n\n            _state.BorderColor = _borderColor;\n\n            _state.MaxAnisotropy = _maxAnisotropy;\n            _state.MaxMipLevel = _maxMipLevel;\n            _state.MipMapLevelOfDetailBias = _mipMapLevelOfDetailBias;\n\n            // Figure out what kind of filter to set based on each\n            // individual min, mag, and mip filter settings.\n            //\n            // NOTE: We're treating \"None\" and \"Point\" the same here\n            // and disabling mipmapping further below.\n            //\n            if (_minFilter == TextureFilterTypeContent.Anisotropic)\n                _state.Filter = TextureFilter.Anisotropic;\n            else if (_minFilter == TextureFilterTypeContent.Linear && _magFilter == TextureFilterTypeContent.Linear && _mipFilter == TextureFilterTypeContent.Linear)\n                _state.Filter = TextureFilter.Linear;\n            else if (_minFilter == TextureFilterTypeContent.Linear && _magFilter == TextureFilterTypeContent.Linear && _mipFilter <= TextureFilterTypeContent.Point)\n                _state.Filter = TextureFilter.LinearMipPoint;\n            else if (_minFilter == TextureFilterTypeContent.Linear && _magFilter <= TextureFilterTypeContent.Point && _mipFilter == TextureFilterTypeContent.Linear)\n                _state.Filter = TextureFilter.MinLinearMagPointMipLinear;\n            else if (_minFilter == TextureFilterTypeContent.Linear && _magFilter <= TextureFilterTypeContent.Point && _mipFilter <= TextureFilterTypeContent.Point)\n                _state.Filter = TextureFilter.MinLinearMagPointMipPoint;\n            else if (_minFilter <= TextureFilterTypeContent.Point && _magFilter == TextureFilterTypeContent.Linear && _mipFilter == TextureFilterTypeContent.Linear)\n                _state.Filter = TextureFilter.MinPointMagLinearMipLinear;\n            else if (_minFilter <= TextureFilterTypeContent.Point && _magFilter == TextureFilterTypeContent.Linear && _mipFilter <= TextureFilterTypeContent.Point)\n                _state.Filter = TextureFilter.MinPointMagLinearMipPoint;\n            else if (_minFilter <= TextureFilterTypeContent.Point && _magFilter <= TextureFilterTypeContent.Point && _mipFilter <= TextureFilterTypeContent.Point)\n                _state.Filter = TextureFilter.Point;\n            else if (_minFilter <= TextureFilterTypeContent.Point && _magFilter <= TextureFilterTypeContent.Point && _mipFilter == TextureFilterTypeContent.Linear)\n                _state.Filter = TextureFilter.PointMipLinear;\n\n            // Do we need to disable mipmapping?\n            if (_mipFilter == TextureFilterTypeContent.None)\n            {\n                // TODO: This is the only option we have right now for \n                // disabling mipmapping.  We should add support for MinLod\n                // and MaxLod which potentially does a better job at this.\n                _state.MipMapLevelOfDetailBias = -16.0f;\n                _state.MaxMipLevel = 0;\n            }\n\n            _dirty = false;\n        }\n        \n        public SamplerState State\n        {\n            get\n            {\n                if (_dirty)\n                    UpdateSamplerState();\n\n                return _state;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/Scanner.cs",
    "content": "// Generated by TinyPG v1.3 available at www.codeproject.com\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing System.Xml.Serialization;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\n{\n    #region Scanner\n\n    public partial class Scanner\n    {\n        public string Input;\n        public int StartPos = 0;\n        public int EndPos = 0;\n        public string CurrentFile;\n        public int CurrentLine;\n        public int CurrentColumn;\n        public int CurrentPosition;\n        public List<Token> Skipped; // tokens that were skipped\n        public Dictionary<TokenType, Regex> Patterns;\n\n        private Token LookAheadToken;\n        private List<TokenType> Tokens;\n        private List<TokenType> SkipList; // tokens to be skipped\n        private readonly TokenType FileAndLine;\n\n        public Scanner()\n        {\n            Regex regex;\n            Patterns = new Dictionary<TokenType, Regex>();\n            Tokens = new List<TokenType>();\n            LookAheadToken = null;\n            Skipped = new List<Token>();\n\n            SkipList = new List<TokenType>();\n            SkipList.Add(TokenType.BlockComment);\n            SkipList.Add(TokenType.Comment);\n            SkipList.Add(TokenType.Whitespace);\n            SkipList.Add(TokenType.LinePragma);\n            FileAndLine = TokenType.LinePragma;\n\n            regex = new Regex(@\"/\\*([^*]|\\*[^/])*\\*/\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.BlockComment, regex);\n            Tokens.Add(TokenType.BlockComment);\n\n            regex = new Regex(@\"//[^\\n\\r]*\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Comment, regex);\n            Tokens.Add(TokenType.Comment);\n\n            regex = new Regex(@\"[ \\t\\n\\r]+\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Whitespace, regex);\n            Tokens.Add(TokenType.Whitespace);\n\n            regex = new Regex(@\"^[ \\t]*#line[ \\t]*(?<Line>\\d*)[ \\t]*(\\\"\"(?<File>[^\\\"\"\\\\]*(?:\\\\.[^\\\"\"\\\\]*)*)\\\"\")?\\n\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.LinePragma, regex);\n            Tokens.Add(TokenType.LinePragma);\n\n            regex = new Regex(@\"pass\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Pass, regex);\n            Tokens.Add(TokenType.Pass);\n\n            regex = new Regex(@\"technique\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Technique, regex);\n            Tokens.Add(TokenType.Technique);\n\n            regex = new Regex(@\"sampler1D|sampler2D|sampler3D|samplerCUBE|SamplerState|sampler\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Sampler, regex);\n            Tokens.Add(TokenType.Sampler);\n\n            regex = new Regex(@\"sampler_state\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.SamplerState, regex);\n            Tokens.Add(TokenType.SamplerState);\n\n            regex = new Regex(@\"VertexShader\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.VertexShader, regex);\n            Tokens.Add(TokenType.VertexShader);\n\n            regex = new Regex(@\"PixelShader\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.PixelShader, regex);\n            Tokens.Add(TokenType.PixelShader);\n\n            regex = new Regex(@\"ComputeShader\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.ComputeShader, regex);\n            Tokens.Add(TokenType.ComputeShader);\n\n            regex = new Regex(@\"register\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Register, regex);\n            Tokens.Add(TokenType.Register);\n\n            regex = new Regex(@\"true|false|0|1\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Boolean, regex);\n            Tokens.Add(TokenType.Boolean);\n\n            regex = new Regex(@\"[+-]? ?[0-9]?\\.?[0-9]+[fF]?\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Number, regex);\n            Tokens.Add(TokenType.Number);\n\n            regex = new Regex(@\"0x[0-9a-f]{6}([0-9a-f][0-9a-f])?\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.HexColor, regex);\n            Tokens.Add(TokenType.HexColor);\n\n            regex = new Regex(@\"[A-Za-z_][A-Za-z0-9_]*\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Identifier, regex);\n            Tokens.Add(TokenType.Identifier);\n\n            regex = new Regex(@\"{\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.OpenBracket, regex);\n            Tokens.Add(TokenType.OpenBracket);\n\n            regex = new Regex(@\"}\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.CloseBracket, regex);\n            Tokens.Add(TokenType.CloseBracket);\n\n            regex = new Regex(@\"=\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Equals, regex);\n            Tokens.Add(TokenType.Equals);\n\n            regex = new Regex(@\":\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Colon, regex);\n            Tokens.Add(TokenType.Colon);\n\n            regex = new Regex(@\",\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Comma, regex);\n            Tokens.Add(TokenType.Comma);\n\n            regex = new Regex(@\";\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Semicolon, regex);\n            Tokens.Add(TokenType.Semicolon);\n\n            regex = new Regex(@\"\\|\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Or, regex);\n            Tokens.Add(TokenType.Or);\n\n            regex = new Regex(@\"\\(\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.OpenParenthesis, regex);\n            Tokens.Add(TokenType.OpenParenthesis);\n\n            regex = new Regex(@\"\\)\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.CloseParenthesis, regex);\n            Tokens.Add(TokenType.CloseParenthesis);\n\n            regex = new Regex(@\"\\[\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.OpenSquareBracket, regex);\n            Tokens.Add(TokenType.OpenSquareBracket);\n\n            regex = new Regex(@\"\\]\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.CloseSquareBracket, regex);\n            Tokens.Add(TokenType.CloseSquareBracket);\n\n            regex = new Regex(@\"<\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.LessThan, regex);\n            Tokens.Add(TokenType.LessThan);\n\n            regex = new Regex(@\">\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.GreaterThan, regex);\n            Tokens.Add(TokenType.GreaterThan);\n\n            regex = new Regex(@\"compile\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Compile, regex);\n            Tokens.Add(TokenType.Compile);\n\n            regex = new Regex(@\"[A-Za-z_][A-Za-z0-9_]*\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.ShaderModel, regex);\n            Tokens.Add(TokenType.ShaderModel);\n\n            regex = new Regex(@\"[\\S]+\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.Code, regex);\n            Tokens.Add(TokenType.Code);\n\n            regex = new Regex(@\"^$\", RegexOptions.Compiled);\n            Patterns.Add(TokenType.EndOfFile, regex);\n            Tokens.Add(TokenType.EndOfFile);\n\n            regex = new Regex(@\"MinFilter\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.MinFilter, regex);\n            Tokens.Add(TokenType.MinFilter);\n\n            regex = new Regex(@\"MagFilter\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.MagFilter, regex);\n            Tokens.Add(TokenType.MagFilter);\n\n            regex = new Regex(@\"MipFilter\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.MipFilter, regex);\n            Tokens.Add(TokenType.MipFilter);\n\n            regex = new Regex(@\"Filter\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Filter, regex);\n            Tokens.Add(TokenType.Filter);\n\n            regex = new Regex(@\"Texture\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Texture, regex);\n            Tokens.Add(TokenType.Texture);\n\n            regex = new Regex(@\"AddressU\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.AddressU, regex);\n            Tokens.Add(TokenType.AddressU);\n\n            regex = new Regex(@\"AddressV\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.AddressV, regex);\n            Tokens.Add(TokenType.AddressV);\n\n            regex = new Regex(@\"AddressW\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.AddressW, regex);\n            Tokens.Add(TokenType.AddressW);\n\n            regex = new Regex(@\"BorderColor\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.BorderColor, regex);\n            Tokens.Add(TokenType.BorderColor);\n\n            regex = new Regex(@\"MaxAnisotropy\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.MaxAnisotropy, regex);\n            Tokens.Add(TokenType.MaxAnisotropy);\n\n            regex = new Regex(@\"MaxMipLevel|MaxLod\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.MaxMipLevel, regex);\n            Tokens.Add(TokenType.MaxMipLevel);\n\n            regex = new Regex(@\"MipLodBias\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.MipLodBias, regex);\n            Tokens.Add(TokenType.MipLodBias);\n\n            regex = new Regex(@\"Clamp\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Clamp, regex);\n            Tokens.Add(TokenType.Clamp);\n\n            regex = new Regex(@\"Wrap\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Wrap, regex);\n            Tokens.Add(TokenType.Wrap);\n\n            regex = new Regex(@\"Mirror\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Mirror, regex);\n            Tokens.Add(TokenType.Mirror);\n\n            regex = new Regex(@\"Border\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Border, regex);\n            Tokens.Add(TokenType.Border);\n\n            regex = new Regex(@\"None\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.None, regex);\n            Tokens.Add(TokenType.None);\n\n            regex = new Regex(@\"Linear\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Linear, regex);\n            Tokens.Add(TokenType.Linear);\n\n            regex = new Regex(@\"Point\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Point, regex);\n            Tokens.Add(TokenType.Point);\n\n            regex = new Regex(@\"Anisotropic\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Anisotropic, regex);\n            Tokens.Add(TokenType.Anisotropic);\n\n            regex = new Regex(@\"AlphaBlendEnable\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.AlphaBlendEnable, regex);\n            Tokens.Add(TokenType.AlphaBlendEnable);\n\n            regex = new Regex(@\"SrcBlend\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.SrcBlend, regex);\n            Tokens.Add(TokenType.SrcBlend);\n\n            regex = new Regex(@\"DestBlend\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.DestBlend, regex);\n            Tokens.Add(TokenType.DestBlend);\n\n            regex = new Regex(@\"BlendOp\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.BlendOp, regex);\n            Tokens.Add(TokenType.BlendOp);\n\n            regex = new Regex(@\"ColorWriteEnable\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.ColorWriteEnable, regex);\n            Tokens.Add(TokenType.ColorWriteEnable);\n\n            regex = new Regex(@\"ZEnable\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.ZEnable, regex);\n            Tokens.Add(TokenType.ZEnable);\n\n            regex = new Regex(@\"ZWriteEnable\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.ZWriteEnable, regex);\n            Tokens.Add(TokenType.ZWriteEnable);\n\n            regex = new Regex(@\"ZFunc\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.ZFunc, regex);\n            Tokens.Add(TokenType.ZFunc);\n\n            regex = new Regex(@\"DepthBias\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.DepthBias, regex);\n            Tokens.Add(TokenType.DepthBias);\n\n            regex = new Regex(@\"CullMode\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.CullMode, regex);\n            Tokens.Add(TokenType.CullMode);\n\n            regex = new Regex(@\"FillMode\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.FillMode, regex);\n            Tokens.Add(TokenType.FillMode);\n\n            regex = new Regex(@\"MultiSampleAntiAlias\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.MultiSampleAntiAlias, regex);\n            Tokens.Add(TokenType.MultiSampleAntiAlias);\n\n            regex = new Regex(@\"ScissorTestEnable\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.ScissorTestEnable, regex);\n            Tokens.Add(TokenType.ScissorTestEnable);\n\n            regex = new Regex(@\"SlopeScaleDepthBias\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.SlopeScaleDepthBias, regex);\n            Tokens.Add(TokenType.SlopeScaleDepthBias);\n\n            regex = new Regex(@\"StencilEnable\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.StencilEnable, regex);\n            Tokens.Add(TokenType.StencilEnable);\n\n            regex = new Regex(@\"StencilFail\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.StencilFail, regex);\n            Tokens.Add(TokenType.StencilFail);\n\n            regex = new Regex(@\"StencilFunc\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.StencilFunc, regex);\n            Tokens.Add(TokenType.StencilFunc);\n\n            regex = new Regex(@\"StencilMask\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.StencilMask, regex);\n            Tokens.Add(TokenType.StencilMask);\n\n            regex = new Regex(@\"StencilPass\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.StencilPass, regex);\n            Tokens.Add(TokenType.StencilPass);\n\n            regex = new Regex(@\"StencilRef\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.StencilRef, regex);\n            Tokens.Add(TokenType.StencilRef);\n\n            regex = new Regex(@\"StencilWriteMask\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.StencilWriteMask, regex);\n            Tokens.Add(TokenType.StencilWriteMask);\n\n            regex = new Regex(@\"StencilZFail\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.StencilZFail, regex);\n            Tokens.Add(TokenType.StencilZFail);\n\n            regex = new Regex(@\"Never\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Never, regex);\n            Tokens.Add(TokenType.Never);\n\n            regex = new Regex(@\"Less\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Less, regex);\n            Tokens.Add(TokenType.Less);\n\n            regex = new Regex(@\"Equal\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Equal, regex);\n            Tokens.Add(TokenType.Equal);\n\n            regex = new Regex(@\"LessEqual\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.LessEqual, regex);\n            Tokens.Add(TokenType.LessEqual);\n\n            regex = new Regex(@\"Greater\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Greater, regex);\n            Tokens.Add(TokenType.Greater);\n\n            regex = new Regex(@\"NotEqual\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.NotEqual, regex);\n            Tokens.Add(TokenType.NotEqual);\n\n            regex = new Regex(@\"GreaterEqual\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.GreaterEqual, regex);\n            Tokens.Add(TokenType.GreaterEqual);\n\n            regex = new Regex(@\"Always\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Always, regex);\n            Tokens.Add(TokenType.Always);\n\n            regex = new Regex(@\"Keep\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Keep, regex);\n            Tokens.Add(TokenType.Keep);\n\n            regex = new Regex(@\"Zero\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Zero, regex);\n            Tokens.Add(TokenType.Zero);\n\n            regex = new Regex(@\"Replace\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Replace, regex);\n            Tokens.Add(TokenType.Replace);\n\n            regex = new Regex(@\"IncrSat\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.IncrSat, regex);\n            Tokens.Add(TokenType.IncrSat);\n\n            regex = new Regex(@\"DecrSat\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.DecrSat, regex);\n            Tokens.Add(TokenType.DecrSat);\n\n            regex = new Regex(@\"Invert\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Invert, regex);\n            Tokens.Add(TokenType.Invert);\n\n            regex = new Regex(@\"Incr\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Incr, regex);\n            Tokens.Add(TokenType.Incr);\n\n            regex = new Regex(@\"Decr\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Decr, regex);\n            Tokens.Add(TokenType.Decr);\n\n            regex = new Regex(@\"Red\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Red, regex);\n            Tokens.Add(TokenType.Red);\n\n            regex = new Regex(@\"Green\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Green, regex);\n            Tokens.Add(TokenType.Green);\n\n            regex = new Regex(@\"Blue\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Blue, regex);\n            Tokens.Add(TokenType.Blue);\n\n            regex = new Regex(@\"Alpha\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Alpha, regex);\n            Tokens.Add(TokenType.Alpha);\n\n            regex = new Regex(@\"All\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.All, regex);\n            Tokens.Add(TokenType.All);\n\n            regex = new Regex(@\"Cw\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Cw, regex);\n            Tokens.Add(TokenType.Cw);\n\n            regex = new Regex(@\"Ccw\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Ccw, regex);\n            Tokens.Add(TokenType.Ccw);\n\n            regex = new Regex(@\"Solid\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Solid, regex);\n            Tokens.Add(TokenType.Solid);\n\n            regex = new Regex(@\"WireFrame\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.WireFrame, regex);\n            Tokens.Add(TokenType.WireFrame);\n\n            regex = new Regex(@\"Add\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Add, regex);\n            Tokens.Add(TokenType.Add);\n\n            regex = new Regex(@\"Subtract\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Subtract, regex);\n            Tokens.Add(TokenType.Subtract);\n\n            regex = new Regex(@\"RevSubtract\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.RevSubtract, regex);\n            Tokens.Add(TokenType.RevSubtract);\n\n            regex = new Regex(@\"Min\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Min, regex);\n            Tokens.Add(TokenType.Min);\n\n            regex = new Regex(@\"Max\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.Max, regex);\n            Tokens.Add(TokenType.Max);\n\n            regex = new Regex(@\"One\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.One, regex);\n            Tokens.Add(TokenType.One);\n\n            regex = new Regex(@\"SrcColor\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.SrcColor, regex);\n            Tokens.Add(TokenType.SrcColor);\n\n            regex = new Regex(@\"InvSrcColor\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.InvSrcColor, regex);\n            Tokens.Add(TokenType.InvSrcColor);\n\n            regex = new Regex(@\"SrcAlpha\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.SrcAlpha, regex);\n            Tokens.Add(TokenType.SrcAlpha);\n\n            regex = new Regex(@\"InvSrcAlpha\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.InvSrcAlpha, regex);\n            Tokens.Add(TokenType.InvSrcAlpha);\n\n            regex = new Regex(@\"DestAlpha\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.DestAlpha, regex);\n            Tokens.Add(TokenType.DestAlpha);\n\n            regex = new Regex(@\"InvDestAlpha\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.InvDestAlpha, regex);\n            Tokens.Add(TokenType.InvDestAlpha);\n\n            regex = new Regex(@\"DestColor\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.DestColor, regex);\n            Tokens.Add(TokenType.DestColor);\n\n            regex = new Regex(@\"InvDestColor\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.InvDestColor, regex);\n            Tokens.Add(TokenType.InvDestColor);\n\n            regex = new Regex(@\"SrcAlphaSat\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.SrcAlphaSat, regex);\n            Tokens.Add(TokenType.SrcAlphaSat);\n\n            regex = new Regex(@\"BlendFactor\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.BlendFactor, regex);\n            Tokens.Add(TokenType.BlendFactor);\n\n            regex = new Regex(@\"InvBlendFactor\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            Patterns.Add(TokenType.InvBlendFactor, regex);\n            Tokens.Add(TokenType.InvBlendFactor);\n\n\n        }\n\n        public void Init(string input)\n        {\n            Init(input, \"\");\n        }\n\n        public void Init(string input, string fileName)\n        {\n            this.Input = input;\n            StartPos = 0;\n            EndPos = 0;\n            CurrentFile = fileName;\n            CurrentLine = 1;\n            CurrentColumn = 1;\n            CurrentPosition = 0;\n            LookAheadToken = null;\n        }\n\n        public Token GetToken(TokenType type)\n        {\n            Token t = new Token(this.StartPos, this.EndPos);\n            t.Type = type;\n            return t;\n        }\n\n         /// <summary>\n        /// executes a lookahead of the next token\n        /// and will advance the scan on the input string\n        /// </summary>\n        /// <returns></returns>\n        public Token Scan(params TokenType[] expectedtokens)\n        {\n            Token tok = LookAhead(expectedtokens); // temporarely retrieve the lookahead\n            LookAheadToken = null; // reset lookahead token, so scanning will continue\n            StartPos = tok.EndPos;\n            EndPos = tok.EndPos; // set the tokenizer to the new scan position\n            CurrentLine = tok.Line + (tok.Text.Length - tok.Text.Replace(\"\\n\", \"\").Length);\n            CurrentFile = tok.File;\n            return tok;\n        }\n\n        /// <summary>\n        /// returns token with longest best match\n        /// </summary>\n        /// <returns></returns>\n        public Token LookAhead(params TokenType[] expectedtokens)\n        {\n            int i;\n            int startpos = StartPos;\n            int endpos = EndPos;\n            int currentline = CurrentLine;\n            string currentFile = CurrentFile;\n            Token tok = null;\n            List<TokenType> scantokens;\n\n\n            // this prevents double scanning and matching\n            // increased performance\n            if (LookAheadToken != null \n                && LookAheadToken.Type != TokenType._UNDETERMINED_ \n                && LookAheadToken.Type != TokenType._NONE_) return LookAheadToken;\n\n            // if no scantokens specified, then scan for all of them (= backward compatible)\n            if (expectedtokens.Length == 0)\n                scantokens = Tokens;\n            else\n            {\n                scantokens = new List<TokenType>(expectedtokens);\n                scantokens.AddRange(SkipList);\n            }\n\n            do\n            {\n\n                int len = -1;\n                TokenType index = (TokenType)int.MaxValue;\n                string input = Input.Substring(startpos);\n\n                tok = new Token(startpos, endpos);\n\n                for (i = 0; i < scantokens.Count; i++)\n                {\n                    Regex r = Patterns[scantokens[i]];\n                    Match m = r.Match(input);\n                    if (m.Success && m.Index == 0 && ((m.Length > len) || (scantokens[i] < index && m.Length == len )))\n                    {\n                        len = m.Length;\n                        index = scantokens[i];  \n                    }\n                }\n\n                if (index >= 0 && len >= 0)\n                {\n                    tok.EndPos = startpos + len;\n                    tok.Text = Input.Substring(tok.StartPos, len);\n                    tok.Type = index;\n                }\n                else if (tok.StartPos == tok.EndPos)\n                {\n                    if (tok.StartPos < Input.Length)\n                        tok.Text = Input.Substring(tok.StartPos, 1);\n                    else\n                        tok.Text = \"EOF\";\n                }\n\n                // Update the line and column count for error reporting.\n                tok.File = currentFile;\n                tok.Line = currentline;\n                if (tok.StartPos < Input.Length)\n                    tok.Column = tok.StartPos - Input.LastIndexOf('\\n', tok.StartPos);\n\n                if (SkipList.Contains(tok.Type))\n                {\n                    startpos = tok.EndPos;\n                    endpos = tok.EndPos;\n                    currentline = tok.Line + (tok.Text.Length - tok.Text.Replace(\"\\n\", \"\").Length);\n                    currentFile = tok.File;\n                    Skipped.Add(tok);\n                }\n                else\n                {\n                    // only assign to non-skipped tokens\n                    tok.Skipped = Skipped; // assign prior skips to this token\n                    Skipped = new List<Token>(); //reset skips\n                }\n\n                // Check to see if the parsed token wants to \n                // alter the file and line number.\n                if (tok.Type == FileAndLine)\n                {\n                    var match = Patterns[tok.Type].Match(tok.Text);\n                    var fileMatch = match.Groups[\"File\"];\n                    if (fileMatch.Success)\n                        currentFile = fileMatch.Value.Replace(\"\\\\\\\\\", \"\\\\\");\n                    var lineMatch = match.Groups[\"Line\"];\n                    if (lineMatch.Success)\n                        currentline = int.Parse(lineMatch.Value, NumberStyles.Integer, CultureInfo.InvariantCulture);\n                }\n            }\n            while (SkipList.Contains(tok.Type));\n\n            LookAheadToken = tok;\n            return tok;\n        }\n    }\n\n    #endregion\n\n    #region Token\n\n    public enum TokenType\n    {\n\n            //Non terminal tokens:\n            _NONE_  = 0,\n            _UNDETERMINED_= 1,\n\n            //Non terminal tokens:\n            Start   = 2,\n            Technique_Declaration= 3,\n            FillMode_Solid= 4,\n            FillMode_WireFrame= 5,\n            FillModes= 6,\n            CullMode_None= 7,\n            CullMode_Cw= 8,\n            CullMode_Ccw= 9,\n            CullModes= 10,\n            Colors_None= 11,\n            Colors_Red= 12,\n            Colors_Green= 13,\n            Colors_Blue= 14,\n            Colors_Alpha= 15,\n            Colors_All= 16,\n            Colors_Boolean= 17,\n            Colors  = 18,\n            ColorsMasks= 19,\n            Blend_Zero= 20,\n            Blend_One= 21,\n            Blend_SrcColor= 22,\n            Blend_InvSrcColor= 23,\n            Blend_SrcAlpha= 24,\n            Blend_InvSrcAlpha= 25,\n            Blend_DestAlpha= 26,\n            Blend_InvDestAlpha= 27,\n            Blend_DestColor= 28,\n            Blend_InvDestColor= 29,\n            Blend_SrcAlphaSat= 30,\n            Blend_BlendFactor= 31,\n            Blend_InvBlendFactor= 32,\n            Blends  = 33,\n            BlendOp_Add= 34,\n            BlendOp_Subtract= 35,\n            BlendOp_RevSubtract= 36,\n            BlendOp_Min= 37,\n            BlendOp_Max= 38,\n            BlendOps= 39,\n            CmpFunc_Never= 40,\n            CmpFunc_Less= 41,\n            CmpFunc_Equal= 42,\n            CmpFunc_LessEqual= 43,\n            CmpFunc_Greater= 44,\n            CmpFunc_NotEqual= 45,\n            CmpFunc_GreaterEqual= 46,\n            CmpFunc_Always= 47,\n            CmpFunc = 48,\n            StencilOp_Keep= 49,\n            StencilOp_Zero= 50,\n            StencilOp_Replace= 51,\n            StencilOp_IncrSat= 52,\n            StencilOp_DecrSat= 53,\n            StencilOp_Invert= 54,\n            StencilOp_Incr= 55,\n            StencilOp_Decr= 56,\n            StencilOp= 57,\n            Render_State_CullMode= 58,\n            Render_State_FillMode= 59,\n            Render_State_AlphaBlendEnable= 60,\n            Render_State_SrcBlend= 61,\n            Render_State_DestBlend= 62,\n            Render_State_BlendOp= 63,\n            Render_State_ColorWriteEnable= 64,\n            Render_State_DepthBias= 65,\n            Render_State_SlopeScaleDepthBias= 66,\n            Render_State_ZEnable= 67,\n            Render_State_ZWriteEnable= 68,\n            Render_State_ZFunc= 69,\n            Render_State_MultiSampleAntiAlias= 70,\n            Render_State_ScissorTestEnable= 71,\n            Render_State_StencilEnable= 72,\n            Render_State_StencilFail= 73,\n            Render_State_StencilFunc= 74,\n            Render_State_StencilMask= 75,\n            Render_State_StencilPass= 76,\n            Render_State_StencilRef= 77,\n            Render_State_StencilWriteMask= 78,\n            Render_State_StencilZFail= 79,\n            Render_State_Expression= 80,\n            Pass_Declaration= 81,\n            VertexShader_Pass_Expression= 82,\n            PixelShader_Pass_Expression= 83,\n            ComputeShader_Pass_Expression= 84,\n            AddressMode_Clamp= 85,\n            AddressMode_Wrap= 86,\n            AddressMode_Mirror= 87,\n            AddressMode_Border= 88,\n            AddressMode= 89,\n            TextureFilter_None= 90,\n            TextureFilter_Linear= 91,\n            TextureFilter_Point= 92,\n            TextureFilter_Anisotropic= 93,\n            TextureFilter= 94,\n            Sampler_State_Texture= 95,\n            Sampler_State_MinFilter= 96,\n            Sampler_State_MagFilter= 97,\n            Sampler_State_MipFilter= 98,\n            Sampler_State_Filter= 99,\n            Sampler_State_AddressU= 100,\n            Sampler_State_AddressV= 101,\n            Sampler_State_AddressW= 102,\n            Sampler_State_BorderColor= 103,\n            Sampler_State_MaxMipLevel= 104,\n            Sampler_State_MaxAnisotropy= 105,\n            Sampler_State_MipLodBias= 106,\n            Sampler_State_Expression= 107,\n            Sampler_Register_Expression= 108,\n            Sampler_Declaration_States= 109,\n            Sampler_Declaration= 110,\n\n            //Terminal tokens:\n            BlockComment= 111,\n            Comment = 112,\n            Whitespace= 113,\n            LinePragma= 114,\n            Pass    = 115,\n            Technique= 116,\n            Sampler = 117,\n            SamplerState= 118,\n            VertexShader= 119,\n            PixelShader= 120,\n            ComputeShader= 121,\n            Register= 122,\n            Boolean = 123,\n            Number  = 124,\n            HexColor= 125,\n            Identifier= 126,\n            OpenBracket= 127,\n            CloseBracket= 128,\n            Equals  = 129,\n            Colon   = 130,\n            Comma   = 131,\n            Semicolon= 132,\n            Or      = 133,\n            OpenParenthesis= 134,\n            CloseParenthesis= 135,\n            OpenSquareBracket= 136,\n            CloseSquareBracket= 137,\n            LessThan= 138,\n            GreaterThan= 139,\n            Compile = 140,\n            ShaderModel= 141,\n            Code    = 142,\n            EndOfFile= 143,\n            MinFilter= 144,\n            MagFilter= 145,\n            MipFilter= 146,\n            Filter  = 147,\n            Texture = 148,\n            AddressU= 149,\n            AddressV= 150,\n            AddressW= 151,\n            BorderColor= 152,\n            MaxAnisotropy= 153,\n            MaxMipLevel= 154,\n            MipLodBias= 155,\n            Clamp   = 156,\n            Wrap    = 157,\n            Mirror  = 158,\n            Border  = 159,\n            None    = 160,\n            Linear  = 161,\n            Point   = 162,\n            Anisotropic= 163,\n            AlphaBlendEnable= 164,\n            SrcBlend= 165,\n            DestBlend= 166,\n            BlendOp = 167,\n            ColorWriteEnable= 168,\n            ZEnable = 169,\n            ZWriteEnable= 170,\n            ZFunc   = 171,\n            DepthBias= 172,\n            CullMode= 173,\n            FillMode= 174,\n            MultiSampleAntiAlias= 175,\n            ScissorTestEnable= 176,\n            SlopeScaleDepthBias= 177,\n            StencilEnable= 178,\n            StencilFail= 179,\n            StencilFunc= 180,\n            StencilMask= 181,\n            StencilPass= 182,\n            StencilRef= 183,\n            StencilWriteMask= 184,\n            StencilZFail= 185,\n            Never   = 186,\n            Less    = 187,\n            Equal   = 188,\n            LessEqual= 189,\n            Greater = 190,\n            NotEqual= 191,\n            GreaterEqual= 192,\n            Always  = 193,\n            Keep    = 194,\n            Zero    = 195,\n            Replace = 196,\n            IncrSat = 197,\n            DecrSat = 198,\n            Invert  = 199,\n            Incr    = 200,\n            Decr    = 201,\n            Red     = 202,\n            Green   = 203,\n            Blue    = 204,\n            Alpha   = 205,\n            All     = 206,\n            Cw      = 207,\n            Ccw     = 208,\n            Solid   = 209,\n            WireFrame= 210,\n            Add     = 211,\n            Subtract= 212,\n            RevSubtract= 213,\n            Min     = 214,\n            Max     = 215,\n            One     = 216,\n            SrcColor= 217,\n            InvSrcColor= 218,\n            SrcAlpha= 219,\n            InvSrcAlpha= 220,\n            DestAlpha= 221,\n            InvDestAlpha= 222,\n            DestColor= 223,\n            InvDestColor= 224,\n            SrcAlphaSat= 225,\n            BlendFactor= 226,\n            InvBlendFactor= 227\n    }\n\n    public class Token\n    {\n        private string file;\n        private int line;\n        private int column;\n        private int startpos;\n        private int endpos;\n        private string text;\n        private object value;\n\n        // contains all prior skipped symbols\n        private List<Token> skipped;\n\n        public string File { \n            get { return file; } \n            set { file = value; }\n        }\n\n        public int Line { \n            get { return line; } \n            set { line = value; }\n        }\n\n        public int Column {\n            get { return column; } \n            set { column = value; }\n        }\n\n        public int StartPos { \n            get { return startpos;} \n            set { startpos = value; }\n        }\n\n        public int Length { \n            get { return endpos - startpos;} \n        }\n\n        public int EndPos { \n            get { return endpos;} \n            set { endpos = value; }\n        }\n\n        public string Text { \n            get { return text;} \n            set { text = value; }\n        }\n\n        public List<Token> Skipped { \n            get { return skipped;} \n            set { skipped = value; }\n        }\n        public object Value { \n            get { return value;} \n            set { this.value = value; }\n        }\n\n        [XmlAttribute]\n        public TokenType Type;\n\n        public Token()\n            : this(0, 0)\n        {\n        }\n\n        public Token(int start, int end)\n        {\n            Type = TokenType._UNDETERMINED_;\n            startpos = start;\n            endpos = end;\n            Text = \"\"; // must initialize with empty string, may cause null reference exceptions otherwise\n            Value = null;\n        }\n\n        public void UpdateRange(Token token)\n        {\n            if (token.StartPos < startpos) startpos = token.StartPos;\n            if (token.EndPos > endpos) endpos = token.EndPos;\n        }\n\n        public override string ToString()\n        {\n            if (Text != null)\n                return Type.ToString() + \" '\" + Text + \"'\";\n            else\n                return Type.ToString();\n        }\n    }\n\n    #endregion\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/ShaderInfo.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\n{\n    public class ShaderInfo\n\t{\n\t\tpublic readonly List<TechniqueInfo> Techniques = new List<TechniqueInfo>();\n\n        public readonly Dictionary<string, SamplerStateInfo> SamplerStates = new Dictionary<string, SamplerStateInfo>();\n\t}\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/TechniqueInfo.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser\n{\n    public class TechniqueInfo\n    {\n        public int startPos;\n        public int length;\n\n        public string name;\n        public List<PassInfo> Passes = new List<PassInfo>();\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/EffectImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading effect (.fx) files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(\".fx\", DisplayName = \"Effect Importer - KNI\", DefaultProcessor = \"EffectProcessor\")]\n    public class EffectImporter : ContentImporter<EffectContent>\n    {\n        /// <summary>\n        /// Initializes a new instance of EffectImporter.\n        /// </summary>\n        public EffectImporter()\n        {\n        }\n\n        /// <summary>\n        /// Called by the XNA Framework when importing an .fx file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        public override EffectContent Import(string filename, ContentImporterContext context)\n        {\n            EffectContent effect = new EffectContent();\n            effect.Identity = new ContentIdentity(filename);\n            effect.Name = Path.GetFileNameWithoutExtension(filename);\n\n            using (TextReader reader = new StreamReader(filename))\n                effect.EffectCode = reader.ReadToEnd();\n\n            return effect;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/ExternalTool.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Threading;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Helper to run an external tool installed in the system. Useful for when\n    /// we don't want to package the tool ourselves (ffmpeg) or it's provided\n    /// by a third party (console manufacturer).\n    /// </summary>\n    internal class ExternalTool\n    {\n        public static int Run(string command, string arguments)\n        {\n            string stdout, stderr;\n            var result = Run(command, arguments, out stdout, out stderr);\n            if (result < 0)\n                throw new Exception(string.Format(\"{0} returned exit code {1}\", command, result));\n\n            return result;\n        }\n\n        public static int Run(string command, string arguments, out string stdout, out string stderr, string stdin = null)\n        {\n            // This particular case is likely to be the most common and thus\n            // warrants its own specific error message rather than falling\n            // back to a general exception from Process.Start()\n            var fullPath = FindCommand(command);\n            if (string.IsNullOrEmpty(fullPath))\n                throw new Exception(string.Format(\"Couldn't locate external tool '{0}'.\", command));\n\n            // We can't reference ref or out parameters from within\n            // lambdas (for the thread functions), so we have to store\n            // the data in a temporary variable and then assign these\n            // variables to the out parameters.\n            var stdoutTemp = string.Empty;\n            var stderrTemp = string.Empty;\n\n            var processInfo = new ProcessStartInfo\n            {\n                Arguments = arguments,\n                CreateNoWindow = true,\n                WindowStyle = ProcessWindowStyle.Hidden,\n                ErrorDialog = false,\n                FileName = fullPath,\n                UseShellExecute = false,\n                RedirectStandardOutput = true,\n                RedirectStandardError = true,\n                RedirectStandardInput = true,\n            };\n\n            EnsureExecutable(fullPath);\n\n            using (var process = new Process())\n            {\n                process.StartInfo = processInfo;\n\n                process.Start();\n\n                // We have to run these in threads, because using ReadToEnd\n                // on one stream can deadlock if the other stream's buffer is\n                // full.\n                var stdoutThread = new Thread(new ThreadStart(() =>\n                {\n                    var memory = new MemoryStream();\n                    process.StandardOutput.BaseStream.CopyTo(memory);\n                    var bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    stdoutTemp = System.Text.Encoding.ASCII.GetString(bytes);\n                }));\n                var stderrThread = new Thread(new ThreadStart(() =>\n                {\n                    var memory = new MemoryStream();\n                    process.StandardError.BaseStream.CopyTo(memory);\n                    var bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    stderrTemp = System.Text.Encoding.ASCII.GetString(bytes);\n                }));\n\n                stdoutThread.Start();\n                stderrThread.Start();\n\n                if (stdin != null)\n                {\n                    process.StandardInput.Write(System.Text.Encoding.ASCII.GetBytes(stdin));\n                }\n\n                // Make sure interactive prompts don't block.\n                process.StandardInput.Close();\n\n                process.WaitForExit();\n\n                stdoutThread.Join();\n                stderrThread.Join();\n\n                stdout = stdoutTemp;\n                stderr = stderrTemp;\n\n                return process.ExitCode;\n            }\n        }\n\n        /// <summary>\n        /// Returns the fully-qualified path for a command, searching the system path if necessary.\n        /// </summary>\n        /// <remarks>\n        /// It's apparently necessary to use the full path when running on some systems.\n        /// </remarks>\n        private static string FindCommand(string command)\n        {\n            // Expand any environment variables.\n            command = Environment.ExpandEnvironmentVariables(command);\n\n            // If we have a full path just pass it through.\n            if (File.Exists(command))\n                return command;\n\n            // For Linux check specific subfolder\n            var lincom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"linux\", command);\n            if (CurrentPlatform.OS == OS.Linux && File.Exists(lincom))\n                return lincom;\n\n            // For Mac check specific subfolder\n            var maccom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"osx\", command);\n            if (CurrentPlatform.OS == OS.MacOSX && File.Exists(maccom))\n                return maccom;\n\n            // We don't have a full path, so try running through the system path to find it.\n            var paths = AppDomain.CurrentDomain.BaseDirectory +\n                Path.PathSeparator +\n                Environment.GetEnvironmentVariable(\"PATH\");\n\n            var justTheName = Path.GetFileName(command);\n            foreach (var path in paths.Split(Path.PathSeparator))\n            {\n                var fullName = Path.Combine(path, justTheName);\n                if (File.Exists(fullName))\n                    return fullName;\n\n                if (CurrentPlatform.OS == OS.Windows)\n                {\n                    var fullExeName = string.Concat(fullName, \".exe\");\n                    if (File.Exists(fullExeName))\n                        return fullExeName;\n                }\n            }\n\n            return null;\n        }\n\n        /// <summary>   \n        /// Ensures the specified executable has the executable bit set.  If the    \n        /// executable doesn't have the executable bit set on Linux or Mac OS, then \n        /// Mono will refuse to execute it. \n        /// </summary>  \n        /// <param name=\"path\">The full path to the executable.</param> \n        private static void EnsureExecutable(string path)\n        {\n            if (!path.StartsWith(\"/home\") && !path.StartsWith(\"/Users\"))\n                return;\n\n            try\n            {\n                var p = Process.Start(\"chmod\", \"u+x \\\"\" + path + \"\\\"\");\n                p.WaitForExit();\n            }\n            catch\n            {\n                // This platform may not have chmod in the path, in which case we can't \n                // do anything reasonable here. \n            }\n        }\n\n        /// <summary>\n        /// Safely deletes the file if it exists.\n        /// </summary>\n        /// <param name=\"filePath\">The path to the file to delete.</param>\n        public static void DeleteFile(string filePath)\n        {\n            try\n            {\n                File.Delete(filePath);\n            }\n            catch (Exception)\n            {                    \n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/FbxImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading AutoDesk (.fbx) files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(\".fbx\", DisplayName = \"Fbx Importer - KNI\", DefaultProcessor = \"ModelProcessor\")]\n    public class FbxImporter : ContentImporter<NodeContent>\n    {\n        public override NodeContent Import(string filename, ContentImporterContext context)\n        {\n            if (filename == null)\n                throw new ArgumentNullException(\"filename\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n\n            var importer = new OpenAssetImporter(\"FbxImporter\");\n            return importer.Import(filename, context);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/FontDescriptionImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n\t/// <summary>\n\t/// Provides methods for reading .spritefont files for use in the Content Pipeline.\n\t/// </summary>\n\t[ContentImporter(\".spritefont\", DisplayName = \"Sprite Font Importer - KNI\", DefaultProcessor = \"FontDescriptionProcessor\")]\n\tpublic class FontDescriptionImporter : ContentImporter<FontDescription>\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of FontDescriptionImporter.\n\t\t/// </summary>\n\t\tpublic FontDescriptionImporter()\n\t\t{\n\t\t}\n\n\t    /// <summary>\n\t    /// Called by the XNA Framework when importing a .spritefont file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n\t    /// </summary>\n\t    /// <param name=\"filename\">Name of a game asset file.</param>\n\t    /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n\t    /// <returns>Resulting game asset.</returns>\n\t    public override FontDescription Import(string filename, ContentImporterContext context)\n\t    {\n            XmlImporter xmlImporter = new XmlImporter();\n            FontDescription fontDescription = (FontDescription)xmlImporter.Import(filename, context);\n\n\t        fontDescription.Identity = new ContentIdentity(new FileInfo(filename).FullName, \"FontDescriptionImporter\");\n\n            return fontDescription;\n\t    }\n\t}\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AlphaTestMaterialContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class AlphaTestMaterialContent : MaterialContent\n    {\n        public const string AlphaKey = \"Alpha\";\n        public const string AlphaFunctionKey = \"AlphaFunction\";\n        public const string DiffuseColorKey = \"DiffuseColor\";\n        public const string ReferenceAlphaKey = \"ReferenceAlpha\";\n        public const string TextureKey = \"Texture\";\n        public const string VertexColorEnabledKey = \"VertexColorEnabled\";\n\n        public float? Alpha\n        {\n            get { return GetValueTypeProperty<float>(AlphaKey); }\n            set { SetProperty(AlphaKey, value); }\n        }\n        \n        public CompareFunction? AlphaFunction\n        {\n            get { return GetValueTypeProperty<CompareFunction>(AlphaFunctionKey); }\n            set { SetProperty(AlphaFunctionKey, value); }\n        }\n\n        public Vector3? DiffuseColor\n        {\n            get { return GetValueTypeProperty<Vector3>(DiffuseColorKey); }\n            set { SetProperty(DiffuseColorKey, value); }\n        }\n\n        public int? ReferenceAlpha\n        {\n            get { return GetValueTypeProperty<int>(ReferenceAlphaKey); }\n            set { SetProperty(ReferenceAlphaKey, value); }\n        }\n\n        public ExternalReference<TextureContent> Texture\n        {\n            get { return GetTexture(TextureKey); }\n            set { SetTexture(TextureKey, value); }\n        }\n\n        public bool? VertexColorEnabled\n        {\n            get { return GetValueTypeProperty<bool>(VertexColorEnabledKey); }\n            set { SetProperty(VertexColorEnabledKey, value); }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationChannel.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods and properties for maintaining an animation channel. An animation channel is a collection of keyframes describing the movement of a single bone or rigid object.\n    /// </summary>\n    public sealed class AnimationChannel : ICollection<AnimationKeyframe>, IEnumerable<AnimationKeyframe>, IEnumerable\n    {\n        List<AnimationKeyframe> _keyframes;\n\n        /// <summary>\n        /// Gets the number of keyframes in the collection.\n        /// </summary>\n        public int Count { get { return _keyframes.Count; } }\n\n        /// <summary>\n        /// Gets the keyframe at the specified index position.\n        /// </summary>\n        public AnimationKeyframe this[int index] { get { return _keyframes[index]; } }\n\n        /// <summary>\n        /// Returns a value indicating whether the object is read-only.\n        /// </summary>\n        bool ICollection<AnimationKeyframe>.IsReadOnly { get { return false; } }\n\n        /// <summary>\n        /// Initializes a new instance of AnimationChannel.\n        /// </summary>\n        public AnimationChannel()\n        {\n            _keyframes = new List<AnimationKeyframe>();\n        }\n\n        /// <summary>\n        /// To satisfy ICollection\n        /// </summary>\n        /// <param name=\"item\"></param>\n        void ICollection<AnimationKeyframe>.Add(AnimationKeyframe item)\n        {\n            _keyframes.Add(item);\n        }\n\n        /// <summary>\n        /// Adds a new keyframe to the collection, automatically sorting the contents according to keyframe times.\n        /// </summary>\n        /// <param name=\"item\">Keyframe to be added to the channel.</param>\n        /// <returns>Index of the new keyframe.</returns>\n        public int Add(AnimationKeyframe item)\n        {\n            if (item == null)\n                throw new ArgumentNullException(\"item\");\n\n            // Find the correct place at which to insert it, so we can know the index to return.\n            // The alternative is Add, Sort then return IndexOf, which would be horribly inefficient\n            // and the order returned by Sort would change each time for keyframes with the same time.\n\n            // BinarySearch returns the index of the first item found with the same time, or the bitwise\n            // complement of the next largest item found.\n            int index = _keyframes.BinarySearch(item);\n            if (index >= 0)\n            {\n                // If a match is found, we do not know if it is at the start, middle or end of a range of\n                // keyframes with the same time value.  So look for the end of the range and insert there\n                // so we have deterministic behaviour.\n                while (index < _keyframes.Count)\n                {\n                    if (item.CompareTo(_keyframes[index]) != 0)\n                        break;\n                    index++;\n                }\n            }\n            else\n            {\n                // If BinarySearch returns a negative value, it is the bitwise complement of the next largest\n                // item in the list.  So we just do a bitwise complement and insert at that index.\n                index = ~index;\n            }\n            _keyframes.Insert(index, item);\n\n            return index;\n        }\n\n        /// <summary>\n        /// Removes all keyframes from the collection.\n        /// </summary>\n        public void Clear()\n        {\n            _keyframes.Clear();\n        }\n\n        /// <summary>\n        /// Searches the collection for the specified keyframe.\n        /// </summary>\n        /// <param name=\"item\">Keyframe being searched for.</param>\n        /// <returns>true if the keyframe exists; false otherwise.</returns>\n        public bool Contains(AnimationKeyframe item)\n        {\n            return _keyframes.Contains(item);\n        }\n\n        /// <summary>\n        /// To satisfy ICollection\n        /// </summary>\n        /// <param name=\"array\"></param>\n        /// <param name=\"arrayIndex\"></param>\n        void ICollection<AnimationKeyframe>.CopyTo(AnimationKeyframe[] array, int arrayIndex)\n        {\n            _keyframes.CopyTo(array, arrayIndex);\n        }\n\n        /// <summary>\n        /// Determines the index for the specified keyframe.\n        /// </summary>\n        /// <param name=\"item\">Identity of a keyframe.</param>\n        /// <returns>Index of the specified keyframe.</returns>\n        public int IndexOf(AnimationKeyframe item)\n        {\n            return _keyframes.IndexOf(item);\n        }\n\n        /// <summary>\n        /// Removes the specified keyframe from the collection.\n        /// </summary>\n        /// <param name=\"item\">Keyframe being removed.</param>\n        /// <returns>true if the keyframe was removed; false otherwise.</returns>\n        public bool Remove(AnimationKeyframe item)\n        {\n            return _keyframes.Remove(item);\n        }\n\n        /// <summary>\n        /// Removes the keyframe at the specified index position.\n        /// </summary>\n        /// <param name=\"index\">Index of the keyframe being removed.</param>\n        public void RemoveAt(int index)\n        {\n            _keyframes.RemoveAt(index);\n        }\n\n        /// <summary>\n        /// Returns an enumerator that iterates through the keyframes.\n        /// </summary>\n        /// <returns>Enumerator for the keyframe collection.</returns>\n        public IEnumerator<AnimationKeyframe> GetEnumerator()\n        {\n            return _keyframes.GetEnumerator();\n        }\n\n        /// <summary>\n        /// To satisfy ICollection\n        /// </summary>\n        /// <returns></returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _keyframes.GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationChannelDictionary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Collection of animation data channels, one per bone or rigid object.\n    /// </summary>\n    public sealed class AnimationChannelDictionary : NamedValueDictionary<AnimationChannel>\n    {\n        /// <summary>\n        /// Initializes a new instance of AnimationChannelDictionary.\n        /// </summary>\n        public AnimationChannelDictionary()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides properties for maintaining an animation.\n    /// </summary>\n    public class AnimationContent : ContentItem\n    {\n        TimeSpan _duration;\n        AnimationChannelDictionary _channels;\n\n        /// <summary>\n        /// Gets the collection of animation data channels. Each channel describes the movement of a single bone or rigid object.\n        /// </summary>\n        public AnimationChannelDictionary Channels\n        {\n            get { return _channels; }\n        }\n\n        /// <summary>\n        /// Gets or sets the total length of the animation.\n        /// </summary>\n        public TimeSpan Duration\n        {\n            get { return _duration; }\n            set { _duration = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of AnimationContent.\n        /// </summary>\n        public AnimationContent()\n        {\n            _channels = new AnimationChannelDictionary();\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{Duration:{0}, _channels: {1}}}\", _duration, _channels.Count);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationContentDictionary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Collection of named animations.\n    /// </summary>\n    public sealed class AnimationContentDictionary : NamedValueDictionary<AnimationContent>\n    {\n        /// <summary>\n        /// Initializes a new instance of AnimationContentDictionary.\n        /// </summary>\n        public AnimationContentDictionary()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationKeyframe.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods and properties for managing a keyframe. A keyframe describes the position of an animation channel at a single point in time.\n    /// </summary>\n    public sealed class AnimationKeyframe : IComparable<AnimationKeyframe>\n    {\n        TimeSpan _time;\n        Matrix _transform;\n\n        /// <summary>\n        /// Gets the time offset from the start of the animation to the position described by this keyframe.\n        /// </summary>\n        public TimeSpan Time { get { return _time; } }\n\n        /// <summary>\n        /// Gets or sets the position described by this keyframe.\n        /// </summary>\n        public Matrix Transform\n        {\n            get { return _transform; }\n            set { _transform = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of AnimationKeyframe with the specified time offsetand transform.\n        /// </summary>\n        /// <param name=\"time\">Time offset of the keyframe.</param>\n        /// <param name=\"transform\">Position of the keyframe.</param>\n        public AnimationKeyframe(TimeSpan time, Matrix transform)\n        {\n            this._time = time;\n            this._transform = transform;\n        }\n\n        /// <summary>\n        /// Compares this instance of a keyframe to another.\n        /// </summary>\n        /// <param name=\"other\">Keyframe being compared to.</param>\n        /// <returns>Indication of their relative values.</returns>\n        public int CompareTo(AnimationKeyframe other)\n        {\n            // No sense in comparing the transform, so compare the time.\n            // This would be used for sorting keyframes in time order.\n            return _time.CompareTo(other._time);\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{Time:{0}, Transform: {1}}}\", _time, _transform);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AtcBitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing ATI.TextureConverter;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public abstract class AtcBitmapContent : BitmapContent\n    {\n        internal byte[] _bitmapData;\n\n        public AtcBitmapContent()\n            : base()\n        {\n        }\n\n        public AtcBitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        public override byte[] GetPixelData()\n        {\n            return _bitmapData;\n        }\n\n        public override void SetPixelData(byte[] sourceData)\n        {\n            _bitmapData = sourceData;\n        }\n\n\t\tprotected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat sourceFormat;\n            if (!sourceBitmap.TryGetFormat(out sourceFormat))\n                return false;\n\n            SurfaceFormat format;\n            TryGetFormat(out format);\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (format == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                SetPixelData(sourceBitmap.GetPixelData());\n                return true;\n            }\n\n            // Destination region copy is not yet supported\n            if (destinationRegion != new Rectangle(0, 0, Width, Height))\n                return false;\n\n            // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy\n            if (!(sourceBitmap is PixelBitmapContent<Vector4>) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height)\n            {\n                try\n                {\n                    BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion);\n                    return true;\n                }\n                catch (InvalidOperationException)\n                {\n                    return false;\n                }\n            }\n\n            // Convert to full colour 32-bit format. Floating point would be preferred for processing, but it appears the ATICompressor does not support this\n            var colorBitmap = new PixelBitmapContent<Color>(sourceRegion.Width, sourceRegion.Height);\n            BitmapContent.Copy(sourceBitmap, sourceRegion, colorBitmap, new Rectangle(0, 0, colorBitmap.Width, colorBitmap.Height));\n            sourceBitmap = colorBitmap;\n\n\t\t\tATICompressor.CompressionFormat targetFormat;\n\t\t\tswitch (format)\n            {\n\t\t\t\tcase SurfaceFormat.RgbaAtcExplicitAlpha:\n\t\t\t\t\ttargetFormat = ATICompressor.CompressionFormat.AtcRgbaExplicitAlpha;\n\t\t\t\t\tbreak;\n\t\t\t\tcase SurfaceFormat.RgbaAtcInterpolatedAlpha:\n\t\t\t\t\ttargetFormat = ATICompressor.CompressionFormat.AtcRgbaInterpolatedAlpha;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar sourceData = sourceBitmap.GetPixelData();\n\t\t\tvar compressedData = ATICompressor.Compress(sourceData, Width, Height, targetFormat);\n\t\t\tSetPixelData(compressedData);\n\n\t\t\treturn true;\n        }\n\n        protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat destinationFormat;\n            if (!destinationBitmap.TryGetFormat(out destinationFormat))\n                return false;\n\n            SurfaceFormat format;\n            TryGetFormat(out format);\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (format == destinationFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                destinationBitmap.SetPixelData(GetPixelData());\n                return true;\n            }\n\n            // No other support for copying from a ATC texture yet\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AtcExplicitBitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class AtcExplicitBitmapContent : AtcBitmapContent\n    {\n        /// <summary>\n        /// Creates an instance of AtcExplicitBitmapContent.\n        /// </summary>\n        public AtcExplicitBitmapContent()\n        {\n        }\n\n        /// <summary>\n        /// Creates an instance of AtcExplicitBitmapContent with the specified width and height.\n        /// </summary>\n        /// <param name=\"width\">The width in pixels of the bitmap.</param>\n        /// <param name=\"height\">The height in pixels of the bitmap.</param>\n        public AtcExplicitBitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.RgbaAtcExplicitAlpha;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"ATITC Explicit Alpha \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AtcInterpolatedBitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class AtcInterpolatedBitmapContent : AtcBitmapContent\n    {\n        /// <summary>\n        /// Creates an instance of AtcInterpolatedBitmapContent.\n        /// </summary>\n        public AtcInterpolatedBitmapContent()\n        {\n        }\n\n        /// <summary>\n        /// Creates an instance of AtcInterpolatedBitmapContent with the specified width and height.\n        /// </summary>\n        /// <param name=\"width\">The width in pixels of the bitmap.</param>\n        /// <param name=\"height\">The height in pixels of the bitmap.</param>\n        public AtcInterpolatedBitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.RgbaAtcInterpolatedAlpha;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"ATITC Interpolated Alpha \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BasicMaterialContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class BasicMaterialContent : MaterialContent\n    {\n        public const string AlphaKey = \"Alpha\";\n        public const string DiffuseColorKey = \"DiffuseColor\";\n        public const string EmissiveColorKey = \"EmissiveColor\";\n        public const string SpecularColorKey = \"SpecularColor\";\n        public const string SpecularPowerKey = \"SpecularPower\";\n        public const string TextureKey = \"Texture\";\n        public const string VertexColorEnabledKey = \"VertexColorEnabled\";\n\n        public float? Alpha\n        {\n            get { return GetValueTypeProperty<float>(AlphaKey); }\n            set { SetProperty(AlphaKey, value); }\n        }\n\n        public Vector3? DiffuseColor\n        {\n            get { return GetValueTypeProperty<Vector3>(DiffuseColorKey); }\n            set { SetProperty(DiffuseColorKey, value); }\n        }\n\n        public Vector3? EmissiveColor\n        {\n            get { return GetValueTypeProperty<Vector3>(EmissiveColorKey); }\n            set { SetProperty(EmissiveColorKey, value); }\n        }\n\n        public Vector3? SpecularColor\n        {\n            get { return GetValueTypeProperty<Vector3>(SpecularColorKey); }\n            set { SetProperty(SpecularColorKey, value); }\n        }\n\n        public float? SpecularPower\n        {\n            get { return GetValueTypeProperty<float>(SpecularPowerKey); }\n            set { SetProperty(SpecularPowerKey, value); }\n        }\n\n        public ExternalReference<TextureContent> Texture\n        {\n            get { return GetTexture(TextureKey); }\n            set { SetTexture(TextureKey, value); }\n        }\n\n        public bool? VertexColorEnabled\n        {\n            get { return GetValueTypeProperty<bool>(VertexColorEnabledKey); }\n            set { SetProperty(VertexColorEnabledKey, value); }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides properties and methods for creating and maintaining a bitmap resource.\n    /// </summary>\n    public abstract class BitmapContent : ContentItem\n    {\n        int _height;\n        int _width;\n\n        /// <summary>\n        /// Gets or sets the height of the bitmap, in pixels.\n        /// </summary>\n        public int Height\n        {\n            get { return _height; }\n            protected set\n            {\n                if (value <= 0)\n                    throw new ArgumentOutOfRangeException(\"height\");\n\n                _height = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the width of the bitmap, in pixels.\n        /// </summary>\n        public int Width\n        {\n            get { return _width; }\n            protected set\n            {\n                if (value <= 0)\n                    throw new ArgumentOutOfRangeException(\"width\");\n\n                _width = value;\n            }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of BitmapContent.\n        /// </summary>\n        protected BitmapContent()\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of BitmapContent with the specified width or height.\n        /// </summary>\n        /// <param name=\"width\">Width, in pixels, of the bitmap resource.</param>\n        /// <param name=\"height\">Height, in pixels, of the bitmap resource.</param>\n        protected BitmapContent(int width, int height)\n        {\n            // Write to properties so validation is run.\n            Width = width;\n            Height = height;\n        }\n\n        /// <summary>\n        /// Copies one bitmap into another.\n        /// The destination bitmap can be in any format and size. If the destination is larger or smaller, the source bitmap is scaled accordingly.\n        /// </summary>\n        /// <param name=\"sourceBitmap\">BitmapContent being copied.</param>\n        /// <param name=\"destinationBitmap\">BitmapContent being overwritten.</param>\n        public static void Copy(BitmapContent sourceBitmap, BitmapContent destinationBitmap)\n        {\n            if (sourceBitmap == null)\n                throw new ArgumentNullException(\"sourceBitmap\");\n            if (destinationBitmap == null)\n                throw new ArgumentNullException(\"destinationBitmap\");\n\n            var sourceRegion = new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height);\n            var destinationRegion = new Rectangle(0, 0, destinationBitmap.Width, destinationBitmap.Height);\n\n            Copy(sourceBitmap, sourceRegion, destinationBitmap, destinationRegion);\n        }\n\n        /// <summary>\n        /// Copies one bitmap into another.\n        /// The destination bitmap can be in any format and size. If the destination is larger or smaller, the source bitmap is scaled accordingly.\n        /// </summary>\n        /// <param name=\"sourceBitmap\">BitmapContent being copied.</param>\n        /// <param name=\"sourceRegion\">Region of sourceBitmap.</param>\n        /// <param name=\"destinationBitmap\">BitmapContent being overwritten.</param>\n        /// <param name=\"destinationRegion\">Region of bitmap to be overwritten.</param>\n        public static void Copy(BitmapContent sourceBitmap, Rectangle sourceRegion, BitmapContent destinationBitmap, Rectangle destinationRegion)\n        {\n            if (sourceBitmap == null)\n                throw new ArgumentNullException(\"sourceBitmap\");\n            if (destinationBitmap == null)\n                throw new ArgumentNullException(\"destinationBitmap\");\n\n            // Make sure regions are within the bounds of the bitmaps\n            if (sourceRegion.Left < 0\n            || sourceRegion.Top < 0\n            || sourceRegion.Width <= 0\n            || sourceRegion.Height <= 0\n            || sourceRegion.Right > sourceBitmap.Width\n            || sourceRegion.Bottom > sourceBitmap.Height)\n                throw new ArgumentOutOfRangeException(\"sourceRegion\");\n\n            if (destinationRegion.Left < 0\n            || destinationRegion.Top < 0\n            || destinationRegion.Width <= 0\n            || destinationRegion.Height <= 0\n            || destinationRegion.Right > destinationBitmap.Width\n            || destinationRegion.Bottom > destinationBitmap.Height)\n                throw new ArgumentOutOfRangeException(\"destinationRegion\");\n\n\n            SurfaceFormat sourceFormat;\n            if (!sourceBitmap.TryGetFormat(out sourceFormat))\n                throw new InvalidOperationException(\"Could not retrieve surface format of source bitmap\");\n            SurfaceFormat destinationFormat;\n            if (!destinationBitmap.TryGetFormat(out destinationFormat))\n                throw new InvalidOperationException(\"Could not retrieve surface format of destination bitmap\");\n\n            // If the formats are the same and the regions are the full bounds of the bitmaps and they are the same size, do a simpler copy\n            if (sourceFormat == destinationFormat\n                && sourceRegion == destinationRegion\n                && sourceRegion == new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height)\n                && destinationRegion == new Rectangle(0, 0, destinationBitmap.Width, destinationBitmap.Height))\n            {\n                destinationBitmap.SetPixelData(sourceBitmap.GetPixelData());\n                return;\n            }\n\n            // if the destination format is <Vector4> and the regions are the full bounds of the bitmaps and they are the same size,\n            // copy to the destinationBitmap directly using TryCopyTo().\n            if (destinationFormat == SurfaceFormat.Vector4\n                && sourceRegion == destinationRegion\n                && sourceRegion == new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height)\n                && destinationRegion == new Rectangle(0, 0, destinationBitmap.Width, destinationBitmap.Height))\n            {\n                if (sourceBitmap.TryCopyTo(destinationBitmap, sourceRegion, destinationRegion))\n                    return;\n            }\n\n            // The basic process is\n            // 1. Copy from source bitmap region to a new PixelBitmapContent<Vector4> using sourceBitmap.TryCopyTo()\n            // 2. If source and destination regions are a different size, resize Vector4 version\n            // 3. Copy from Vector4 to destination region using destinationBitmap.TryCopyFrom()\n\n            // Copy from the source to the intermediate Vector4 format\n            var intermediate = new PixelBitmapContent<Vector4>(sourceRegion.Width, sourceRegion.Height);\n            var intermediateRegion = new Rectangle(0, 0, sourceRegion.Width, sourceRegion.Height);\n            if (sourceBitmap.TryCopyTo(intermediate, sourceRegion, intermediateRegion))\n            {\n                // Resize the intermediate if required\n                if (intermediate.Width != destinationRegion.Width || intermediate.Height != destinationRegion.Height)\n                    intermediate = intermediate.Resize(destinationRegion.Width, destinationRegion.Height) as PixelBitmapContent<Vector4>;\n                // Copy from the intermediate to the destination\n                if (destinationBitmap.TryCopyFrom(intermediate, new Rectangle(0, 0, intermediate.Width, intermediate.Height), destinationRegion))\n                    return;\n            }\n\n            // If we got here, one of the above steps didn't work\n            throw new InvalidOperationException(\"Could not copy between \" + sourceFormat + \" and \" + destinationFormat);\n        }\n\n        /// <summary>\n        /// Reads encoded bitmap content.\n        /// </summary>\n        /// <returns>Array containing encoded bitmap data.</returns>\n        public abstract byte[] GetPixelData();\n\n        /// <summary>\n        /// Writes encoded bitmap content.\n        /// </summary>\n        /// <param name=\"sourceData\">Array containing encoded bitmap data to be set.</param>\n        public abstract void SetPixelData(byte[] sourceData);\n\n        /// <summary>\n        /// Returns a string description of the bitmap resource.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return string.Format(\"{0}, {1}x{2}\", GetType().Name, Width, Height);\n        }\n\n        /// <summary>\n        /// Attempts to copy a region from a specified bitmap.\n        /// </summary>\n        /// <param name=\"sourceBitmap\">BitmapContent being copied.</param>\n        /// <param name=\"sourceRegion\">Location of sourceBitmap.</param>\n        /// <param name=\"destinationRegion\">Region of destination bitmap to be overwritten.</param>\n        /// <returns>true if region copy is supported; false otherwise.</returns>\n        protected abstract bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion);\n\n        /// <summary>\n        /// Attempts to copy a region of the specified bitmap onto another.\n        /// </summary>\n        /// <param name=\"destinationBitmap\">BitmapContent being overwritten.</param>\n        /// <param name=\"sourceRegion\">Location of the source bitmap.</param>\n        /// <param name=\"destinationRegion\">Region of destination bitmap to be overwritten.</param>\n        /// <returns>true if region copy is supported; false otherwise.</returns>\n        protected abstract bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion);\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public abstract bool TryGetFormat(out SurfaceFormat format);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BoneContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Represents an animation skeleton.\n    /// </summary>\n    [System.Diagnostics.DebuggerDisplay(\"Bone '{Name}'\")]\n    public class BoneContent : NodeContent\n    {\n        /// <summary>\n        /// Initializes a new instance of BoneContent.\n        /// </summary>\n        public BoneContent()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BoneWeight.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides properties for managing a bone weight.\n    /// </summary>\n    public struct BoneWeight\n    {\n        string _boneName;\n        float _weight;\n\n        /// <summary>\n        /// Gets the name of the bone.\n        /// </summary>\n        public string BoneName\n        {\n            get { return _boneName; }\n        }\n\n        /// <summary>\n        /// Gets the amount of bone influence, ranging from zero to one. The complete set of weights in a BoneWeightCollection should sum to one.\n        /// </summary>\n        public float Weight\n        {\n            get { return _weight; }\n            internal set { _weight = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of BoneWeight with the specified name and weight.\n        /// </summary>\n        /// <param name=\"boneName\">Name of the bone.</param>\n        /// <param name=\"weight\">Amount of influence, ranging from zero to one.</param>\n        public BoneWeight(string boneName, float weight)\n        {\n            this._boneName = boneName;\n            this._weight = weight;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BoneWeightCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Collection of bone weights of a vertex.\n    /// </summary>\n    public sealed class BoneWeightCollection : Collection<BoneWeight>\n    {\n        /// <summary>\n        /// Initializes a new instance of BoneWeightCollection.\n        /// </summary>\n        public BoneWeightCollection()\n        {\n        }\n\n        /// <summary>\n        /// Normalizes the contents of the weights list.\n        /// </summary>\n        public void NormalizeWeights()\n        {\n            // Normalization does the following:\n            //\n            // - Sorts weights such that the most significant weight is first.\n            // - Removes zero-value entries.\n            // - Adjusts values so the sum equals one.\n            //\n            // Throws InvalidContentException if all weights are zero.\n            NormalizeWeights(int.MaxValue);\n        }\n\n        /// <summary>\n        /// Normalizes the contents of the bone weights list.\n        /// </summary>\n        /// <param name=\"maxWeights\">Maximum number of weights allowed.</param>\n        public void NormalizeWeights(int maxWeights)\n        {\n            // Normalization does the following:\n            //\n            // - Sorts weights such that the most significant weight is first.\n            // - Removes zero-value entries.\n            // - Discards weights with the smallest value until there are maxWeights or less in the list.\n            // - Adjusts values so the sum equals one.\n            //\n            // Throws InvalidContentException if all weights are zero.\n\n            List<BoneWeight> weights = (List<BoneWeight>)Items;\n\n            // Sort into descending order\n            weights.Sort((b1, b2) => b2.Weight.CompareTo(b1.Weight));\n\n            // Find the sum to validate we have weights and to normalize the weights\n            float sum = 0.0f;\n            int index = 0;\n            // Cannot use a foreach or for because the index may not always increment and the length of the list may change.\n            while (index < weights.Count)\n            {\n                float weight = weights[index].Weight;\n                if ((weight > 0.0f) && (index < maxWeights))\n                {\n                    sum += weight;\n                    ++index;\n                }\n                else\n                {\n                    // Discard any zero weights or if we have exceeded the maximum number of weights\n                    weights.RemoveAt(index);\n                }\n            }\n\n            if (sum == 0.0f)\n                throw new InvalidContentException(\"Total bone weights in a collection must not be zero\");\n\n            // Normalize each weight\n            int count = weights.Count;\n            // Old-school trick. Multiplication is faster than division, so multiply by the inverse.\n            float invSum = 1.0f / sum;\n            for (index = 0; index < count; ++index)\n            {\n                BoneWeight bw = weights[index];\n                bw.Weight *= invSum;\n                weights[index] = bw;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/DualTextureMaterialContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class DualTextureMaterialContent : MaterialContent\n    {\n        public const string AlphaKey = \"Alpha\";\n        public const string DiffuseColorKey = \"DiffuseColor\";\n        public const string TextureKey = \"Texture\";\n        public const string Texture2Key = \"Texture2\";\n        public const string VertexColorEnabledKey = \"VertexColorEnabled\";\n\n        public float? Alpha\n        {\n            get { return GetValueTypeProperty<float>(AlphaKey); }\n            set { SetProperty(AlphaKey, value); }\n        }\n\n        public Vector3? DiffuseColor\n        {\n            get { return GetValueTypeProperty<Vector3>(DiffuseColorKey); }\n            set { SetProperty(DiffuseColorKey, value); }\n        }\n\n        public ExternalReference<TextureContent> Texture\n        {\n            get { return GetTexture(TextureKey); }\n            set { SetTexture(TextureKey, value); }\n        }\n\n        public ExternalReference<TextureContent> Texture2\n        {\n            get { return GetTexture(Texture2Key); }\n            set { SetTexture(Texture2Key, value); }\n        }\n\n        public bool? VertexColorEnabled\n        {\n            get { return GetValueTypeProperty<bool>(VertexColorEnabledKey); }\n            set { SetProperty(VertexColorEnabledKey, value); }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Dxt1BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class Dxt1BitmapContent : DxtBitmapContent\n    {\n        public Dxt1BitmapContent(int width, int height)\n            : base(8, width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.Dxt1;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"DXT1 \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Dxt3BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class Dxt3BitmapContent : DxtBitmapContent\n    {\n        public Dxt3BitmapContent(int width, int height)\n            : base(16, width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.Dxt3;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"DXT3 \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Dxt5BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class Dxt5BitmapContent : DxtBitmapContent\n    {\n        public Dxt5BitmapContent(int width, int height)\n            : base(16, width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.Dxt5;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"DXT5 \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/DxtBitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework.Graphics;\nusing NVTT = Nvidia.TextureTools;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public abstract class DxtBitmapContent : BitmapContent\n    {\n        private byte[] _bitmapData;\n        private int _blockSize;\n        private SurfaceFormat _format;\n\n        private int _nvttWriteOffset;\n\n        protected DxtBitmapContent(int blockSize)\n        {\n            if (!((blockSize == 8) || (blockSize == 16)))\n                throw new ArgumentException(\"Invalid block size\");\n            _blockSize = blockSize;\n            TryGetFormat(out _format);\n        }\n\n        protected DxtBitmapContent(int blockSize, int width, int height)\n            : this(blockSize)\n        {\n            Width = width;\n            Height = height;\n        }\n\n        public override byte[] GetPixelData()\n        {\n            return _bitmapData;\n        }\n\n        public override void SetPixelData(byte[] sourceData)\n        {\n            _bitmapData = sourceData;\n        }\n\n        private void NvttBeginImageCallback(int size, int width, int height, int depth, int face, int miplevel)\n        {\n            _bitmapData = new byte[size];\n            _nvttWriteOffset = 0;\n        }\n\n        private bool NvttWriteImageCallback(IntPtr data, int length)\n        {\n            Marshal.Copy(data, _bitmapData, _nvttWriteOffset, length);\n            _nvttWriteOffset += length;\n            return true;\n        }\n\n        private void NvttEndImageCallback()\n        {\n        }\n        \n        private unsafe static void PrepareNVTT(byte[] data)\n        {\n            fixed (byte* pdata = data)\n            {\n                int count = data.Length / 4;\n                for (int x = 0; x < count; x++)\n                {\n                    // NVTT wants BGRA where our source is RGBA so\n                    // we swap the red and blue channels.\n                    byte r = pdata[x*4+0];\n                    byte b = pdata[x*4+2];\n                    pdata[x*4+0] = b;\n                    pdata[x*4+2] = r;\n                }\n            }\n        }\n\n        private unsafe static bool PrepareNVTT_DXT1(byte[] data)\n        {\n            bool hasTransparency = false;\n\n            fixed (byte* pdata = data)\n            {\n                int count = data.Length/4;\n                for (int x = 0; x < count; x++)\n                {\n                    // NVTT wants BGRA where our source is RGBA so\n                    // we swap the red and blue channels.\n                    byte r = pdata[x*4+0];\n                    byte b = pdata[x*4+2];\n                    pdata[x*4+0] = b;\n                    pdata[x*4+2] = r;\n\n                    // Look for non-opaque pixels.\n                    hasTransparency = (hasTransparency || pdata[x*4+3] < 255);\n                }\n            }\n\n            return hasTransparency;\n        }\n\n        protected unsafe override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat sourceFormat;\n            if (!sourceBitmap.TryGetFormat(out sourceFormat))\n                return false;\n\n            SurfaceFormat format;\n            TryGetFormat(out format);\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (format == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                SetPixelData(sourceBitmap.GetPixelData());\n                return true;\n            }\n\n            // TODO: Add a XNA unit test to see what it does\n            // my guess is that this is invalid for DXT.\n            //\n            // Destination region copy is not yet supported\n            if (destinationRegion != new Rectangle(0, 0, Width, Height))\n                return false;\n\n            // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy\n            if (!(sourceBitmap is PixelBitmapContent<Vector4>) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height)\n            {\n                try\n                {\n                    BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion);\n                    return true;\n                }\n                catch (InvalidOperationException)\n                {\n                    return false;\n                }\n            }\n\n            // NVTT wants 8bit data in BGRA format.\n            PixelBitmapContent<Color> colorBitmap = new PixelBitmapContent<Color>(sourceBitmap.Width, sourceBitmap.Height);\n            BitmapContent.Copy(sourceBitmap, colorBitmap);\n            byte[] sourceData = colorBitmap.GetPixelData();\n\n            NVTT.AlphaMode alphaMode;\n            NVTT.Format outputFormat;\n            bool alphaDither = false;\n            switch (format)\n            {\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1SRgb:\n                {\n                    bool hasTransparency = PrepareNVTT_DXT1(sourceData);\n                    outputFormat = hasTransparency ? NVTT.Format.DXT1a : NVTT.Format.DXT1;\n                    alphaMode = hasTransparency ? NVTT.AlphaMode.Transparency : NVTT.AlphaMode.None;\n                    alphaDither = true;\n                    break;\n                }\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt3SRgb:\n                {\n                    PrepareNVTT(sourceData);\n                    outputFormat = NVTT.Format.DXT3;\n                    alphaMode = NVTT.AlphaMode.Transparency;\n                    break;\n                }\n                case SurfaceFormat.Dxt5:\n                case SurfaceFormat.Dxt5SRgb:\n                {\n                    PrepareNVTT(sourceData);\n                    outputFormat = NVTT.Format.DXT5;\n                    alphaMode = NVTT.AlphaMode.Transparency;\n                    break;\n                }\n                default:\n                    throw new InvalidOperationException(\"Invalid DXT surface format!\");\n            }\n\n            using (NVTT.Compressor dxtCompressor = new NVTT.Compressor())\n            {\n                fixed (byte* pData = &sourceData[0])\n                {\n                    dxtCompressor.InputOptions.SetTextureLayout(NVTT.TextureType.Texture2D, colorBitmap.Width, colorBitmap.Height, 1);\n                    dxtCompressor.InputOptions.SetMipmapData((IntPtr)pData, colorBitmap.Width, colorBitmap.Height, 1, 0, 0);\n                    dxtCompressor.InputOptions.SetMipmapGeneration(false);\n                    dxtCompressor.InputOptions.SetGamma(1.0f, 1.0f);\n                    dxtCompressor.InputOptions.SetAlphaMode(alphaMode);\n\n                    dxtCompressor.CompressionOptions.SetFormat(outputFormat);\n                    dxtCompressor.CompressionOptions.SetQuality(NVTT.Quality.Normal);\n\n                    // TODO: This isn't working which keeps us from getting the\n                    //       same alpha dither behavior on DXT1 as XNA.\n                    //       See: https://github.com/MonoGame/MonoGame/issues/6259\n                    //if (alphaDither)\n                    //    compressionOptions.SetQuantization(false, false, true);\n\n                    NVTT.OutputOptions.BeginImageDelegate beginImageDelegate = new NVTT.OutputOptions.BeginImageDelegate(NvttBeginImageCallback);\n                    NVTT.OutputOptions.WriteDataDelegate  outputDelegate = new NVTT.OutputOptions.WriteDataDelegate(NvttWriteImageCallback);\n                    NVTT.OutputOptions.EndImageDelegate   endImageDelegate = new NVTT.OutputOptions.EndImageDelegate(NvttEndImageCallback);\n                    GCHandle beginImageHandle = GCHandle.Alloc(beginImageDelegate);\n                    GCHandle writeHandle      = GCHandle.Alloc(outputDelegate);\n                    GCHandle endImageHandle   = GCHandle.Alloc(endImageDelegate);\n                    try\n                    {\n                        dxtCompressor.OutputOptions.SetOutputHeader(false);\n                        dxtCompressor.OutputOptions.SetOutputOptionsOutputHandler(beginImageDelegate, outputDelegate, endImageDelegate);\n\n                        dxtCompressor.Compress();\n                    }\n                    finally\n                    {\n                        beginImageHandle.Free();\n                        writeHandle.Free();\n                        endImageHandle.Free();\n                    }\n                }\n            }\n\n            return true;\n        }\n\n        protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat destinationFormat;\n            if (!destinationBitmap.TryGetFormat(out destinationFormat))\n                return false;\n\n            SurfaceFormat format;\n            TryGetFormat(out format);\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            Rectangle fullRegion = new Rectangle(0, 0, Width, Height);\n            if ((format == destinationFormat) && (sourceRegion == fullRegion) && (sourceRegion == destinationRegion))\n            {\n                destinationBitmap.SetPixelData(GetPixelData());\n                return true;\n            }\n\n            // No other support for copying from a DXT texture yet\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/EffectContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Contains the source code for a DirectX Effect, loaded from a .fx file.\n    /// </summary>\n    public class EffectContent : ContentItem\n    {\n        /// <summary>\n        /// Initializes a new instance of EffectContent.\n        /// </summary>\n        public EffectContent()\n        {\n\n        }\n\n        /// <summary>\n        /// Gets or sets the effect program source code.\n        /// </summary>\n        public string EffectCode { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/EffectMaterialContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class EffectMaterialContent : MaterialContent\n    {\n        public const string EffectKey = \"Effect\";\n        public const string CompiledEffectKey = \"CompiledEffect\";\n\n        public ExternalReference<EffectContent> Effect\n        {\n            get { return GetReferenceTypeProperty<ExternalReference<EffectContent>>(EffectKey); }\n            set { SetProperty(EffectKey, value); }\n        }\n\n        public ExternalReference<CompiledEffectContent> CompiledEffect\n        {\n            get { return GetReferenceTypeProperty<ExternalReference<CompiledEffectContent>>(CompiledEffectKey); }\n            set { SetProperty(CompiledEffectKey, value); }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/EnvironmentMapMaterialContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class EnvironmentMapMaterialContent : MaterialContent\n    {\n        public const string AlphaKey = \"Alpha\";\n        public const string DiffuseColorKey = \"DiffuseColor\";\n        public const string EmissiveColorKey = \"EmissiveColor\";\n        public const string EnvironmentMapKey = \"EnvironmentMap\";\n        public const string EnvironmentMapAmountKey = \"EnvironmentMapAmount\";\n        public const string EnvironmentMapSpecularKey = \" EnvironmentMapSpecular\";\n        public const string FresnelFactorKey = \"FresnelFactor\";\n        public const string TextureKey = \"Texture\";\n\n        public float? Alpha\n        {\n            get { return GetValueTypeProperty<float>(AlphaKey); }\n            set { SetProperty(AlphaKey, value); }\n        }\n\n        public Vector3? DiffuseColor\n        {\n            get { return GetValueTypeProperty<Vector3>(DiffuseColorKey); }\n            set { SetProperty(DiffuseColorKey, value); }\n        }\n\n        public Vector3? EmissiveColor\n        {\n            get { return GetValueTypeProperty<Vector3>(EmissiveColorKey); }\n            set { SetProperty(EmissiveColorKey, value); }\n        }\n\n        public ExternalReference<TextureContent> EnvironmentMap\n        {\n            get { return GetTexture(EnvironmentMapKey); }\n            set { SetTexture(EnvironmentMapKey, value); }\n        }\n\n        public float? EnvironmentMapAmount\n        {\n            get { return GetValueTypeProperty<float>(EnvironmentMapAmountKey); }\n            set { SetProperty(EnvironmentMapAmountKey, value); }\n        }\n\n        public Vector3? EnvironmentMapSpecular\n        {\n            get { return GetValueTypeProperty<Vector3>(EnvironmentMapSpecularKey); }\n            set { SetProperty(EnvironmentMapSpecularKey, value); }\n        }\n\n        public float? FresnelFactor\n        {\n            get { return GetValueTypeProperty<float>(FresnelFactorKey); }\n            set { SetProperty(FresnelFactorKey, value); }\n        }\n\n        public ExternalReference<TextureContent> Texture\n        {\n            get { return GetTexture(TextureKey); }\n            set { SetTexture(TextureKey, value); }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Etc1BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing PVRTexLibNET;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Supports the processing of a texture compressed using ETC1.\n    /// </summary>\n    public class Etc1BitmapContent : BitmapContent\n    {\n        byte[] _bitmapData;\n\n        /// <summary>\n        /// Initializes a new instance of Etc1BitmapContent.\n        /// </summary>\n        protected Etc1BitmapContent()\n            : base()\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of Etc1BitmapContent with the specified width or height.\n        /// </summary>\n        /// <param name=\"width\">Width in pixels of the bitmap resource.</param>\n        /// <param name=\"height\">Height in pixels of the bitmap resource.</param>\n        public Etc1BitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        public override byte[] GetPixelData()\n        {\n            return _bitmapData;\n        }\n\n        public override void SetPixelData(byte[] sourceData)\n        {\n            int bytesRequired = ((Width + 3) >> 2) * ((Height + 3) >> 2) * SurfaceFormat.RgbEtc1.GetSize();\n            if (bytesRequired != sourceData.Length)\n                throw new ArgumentException(\"ETC1 bitmap with width \" + Width + \" and height \" + Height + \" needs \"\n                    + bytesRequired + \" bytes. Received \" + sourceData.Length + \" bytes\");\n\n            if (_bitmapData == null || _bitmapData.Length != bytesRequired)\n                _bitmapData = new byte[bytesRequired];\n            Buffer.BlockCopy(sourceData, 0, _bitmapData, 0, bytesRequired);\n        }\n\n        protected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat sourceFormat;\n            if (!sourceBitmap.TryGetFormat(out sourceFormat))\n                return false;\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (SurfaceFormat.RgbEtc1 == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                SetPixelData(sourceBitmap.GetPixelData());\n                return true;\n            }\n\n            // Destination region copy is not yet supported\n            if (destinationRegion != new Rectangle(0, 0, Width, Height))\n                return false;\n\n            // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy\n            if (!(sourceBitmap is PixelBitmapContent<Vector4>) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height)\n            {\n                try\n                {\n                    BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion);\n                    return true;\n                }\n                catch (InvalidOperationException)\n                {\n                    return false;\n                }\n            }\n\n            // Create the texture object in the PVR library\n            var sourceData = sourceBitmap.GetPixelData();\n            var rgba32F = (PixelFormat)0x2020202061626772; // static const PixelType PVRStandard32PixelType = PixelType('r', 'g', 'b', 'a', 32, 32, 32, 32);\n            using (var pvrTexture = PVRTexture.CreateTexture(sourceData, (uint)sourceBitmap.Width, (uint)sourceBitmap.Height, 1,\n                rgba32F, true, VariableType.Float, ColourSpace.lRGB))\n            {\n                // Resize the bitmap if needed\n                if ((sourceBitmap.Width != Width) || (sourceBitmap.Height != Height))\n                    pvrTexture.Resize((uint)Width, (uint)Height, 1, ResizeMode.Cubic);\n                pvrTexture.Transcode(PixelFormat.ETC1, VariableType.UnsignedByte, ColourSpace.lRGB /*, CompressorQuality.ETCMediumPerceptual, true*/);\n                var texDataSize = pvrTexture.GetTextureDataSize(0);\n                var texData = new byte[texDataSize];\n                pvrTexture.GetTextureData(texData, texDataSize);\n                SetPixelData(texData);\n            }\n            return true;\n        }\n\n        protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat destinationFormat;\n            if (!destinationBitmap.TryGetFormat(out destinationFormat))\n                return false;\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (SurfaceFormat.RgbEtc1 == destinationFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                destinationBitmap.SetPixelData(GetPixelData());\n                return true;\n            }\n\n            // No other support for copying from a ETC1 texture yet\n            return false;\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.RgbEtc1;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"ETC1 \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/CharacterRegion.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n\t// Describes a range of consecutive characters that should be included in the font.\n\t[TypeConverter(typeof(CharacterRegionTypeConverter))]\n\tpublic struct CharacterRegion\n\t{\n\t    public char Start;\n\t    public char End;\n\n\t\t// Enumerates all characters within the region.        \n\t    public IEnumerable<char> Characters()\n\t    {\n\t        for (char ch = Start; ch <= End; ch++)\n\t        {\n\t            yield return ch;\n\t        }\n\t    }\n\n\t    // Constructor.\n        public CharacterRegion(char start, char end)\n        {\n            if (start > end)\n                throw new ArgumentException();\n\n            Start = start;\n            End = end;\n        }\n\t\t\n\t\t// Default to just the base ASCII character set.\n\t\tpublic static CharacterRegion Default = new CharacterRegion(' ', '~');\n\n\n\t\t/// <summary>\n\t\t/// Test if there is an element in this enumeration.\n\t\t/// </summary>\n\t\t/// <typeparam name=\"T\">Type of the element</typeparam>\n\t\t/// <param name=\"source\">The enumerable source.</param>\n\t\t/// <returns><c>true</c> if there is an element in this enumeration, <c>false</c> otherwise</returns>\n\t\tpublic static bool Any<T>(IEnumerable<T> source)\n\t\t{\n\t\t\treturn source.GetEnumerator().MoveNext();\n\t\t}\n\n\t\t\n\t\t/// <summary>\n\t\t/// Select elements from an enumeration.\n\t\t/// </summary>\n\t\t/// <typeparam name=\"TSource\">The type of the T source.</typeparam>\n\t\t/// <typeparam name=\"TResult\">The type of the T result.</typeparam>\n\t\t/// <param name=\"source\">The source.</param>\n\t\t/// <param name=\"selector\">The selector.</param>\n\t\t/// <returns>A enumeration of selected values</returns>\n\t\tpublic static IEnumerable<TResult> SelectMany<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, IEnumerable<TResult>> selector)\n\t\t{\n\t\t\tforeach (TSource sourceItem in source)\n\t\t\t{\n\t\t\t\tforeach (TResult result in selector(sourceItem))\n\t\t\t\t\tyield return result;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Selects distinct elements from an enumeration.\n\t\t/// </summary>\n\t\t/// <typeparam name=\"TSource\">The type of the T source.</typeparam>\n\t\t/// <param name=\"source\">The source.</param>\n\t\t/// <param name=\"comparer\">The comparer.</param>\n\t\t/// <returns>A enumeration of selected values</returns>\n\t\tpublic static IEnumerable<TSource> Distinct<TSource>(IEnumerable<TSource> source, IEqualityComparer<TSource> comparer = null)\n\t\t{\n\t\t\tif (comparer == null)\n\t\t\t\tcomparer = EqualityComparer<TSource>.Default;\n\n            // using Dictionary is not really efficient but easy to implement\n            Dictionary<TSource,object> values = new Dictionary<TSource,object>(comparer);\n\t\t\tforeach (TSource sourceItem in source)\n\t\t\t{\n\t\t\t\tif (!values.ContainsKey(sourceItem))\n\t\t\t\t{\n\t\t\t\t\tvalues.Add(sourceItem, null);\n\t\t\t\t\tyield return sourceItem;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/CharacterRegionTypeConverter.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n\tpublic class CharacterRegionTypeConverter : TypeConverter\n\t{\n\t\tpublic override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n\t\t{\n\t\t\treturn sourceType == typeof(string);\n\t\t}\n\n\n\t\tpublic override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n\t\t{\n\t\t\t// Input must be a string.\n\t\t\tstring source = value as string;\n\n\t\t\tif (string.IsNullOrEmpty(source))\n\t\t\t{\n\t\t\t\tthrow new ArgumentException();\n\t\t\t}\n\n\t\t\t// Supported input formats:\n\t\t\t//  A\n\t\t\t//  A-Z\n\t\t\t//  32-127\n\t\t\t//  0x20-0x7F\n\n\t\t\tstring[] splitStr = source.Split('-');\n            char[] split = new char[splitStr.Length];\n\t\t\tfor (int i = 0; i < splitStr.Length; i++)\n\t\t\t{\n\t\t\t\tsplit[i] = ConvertCharacter(splitStr[i]);\n\t\t\t}\n\n\t\t\tswitch (split.Length)\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t// Only a single character (eg. \"a\").\n\t\t\t\treturn new CharacterRegion(split[0], split[0]);\n\n\t\t\t\tcase 2:\n\t\t\t\t// Range of characters (eg. \"a-z\").\n\t\t\t\treturn new CharacterRegion(split[0], split[1]);\n\n\t\t\t\tdefault:\n\t\t\t\tthrow new ArgumentException();\n\t\t\t}\n\t\t}\n\n\n\t\tstatic char ConvertCharacter(string value)\n\t\t{\n\t\t\tif (value.Length == 1)\n\t\t\t{\n\t\t\t\t// Single character directly specifies a codepoint.\n\t\t\t\treturn value[0];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Otherwise it must be an integer (eg. \"32\" or \"0x20\").\n\t\t\t\treturn (char)(int)intConverter.ConvertFromInvariantString(value);\n\t\t\t}\n\t\t}\n\n\n\t\tstatic TypeConverter intConverter = TypeDescriptor.GetConverter(typeof(int));\n\t}\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/FontFamilyInfo.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System.Collections.Generic;\nusing OpenFontStyleFlags = Typography.OpenFont.Extensions.TranslatedOS2FontStyle;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    internal class FontFamilyInfo\n    {\n        public readonly string FamilyName;\n        public readonly List<FontFaceInfo> Faces = new List<FontFaceInfo>();\n\n        public FontFamilyInfo(string familyName)\n        {\n            FamilyName = familyName;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"{{FamilyName: {0}, FacesCount: {1} }}\", FamilyName, Faces.Count);\n        }\n    }\n\n    internal class FontFaceInfo\n    {\n        public readonly string FontFile;\n        public readonly int FaceIndex;\n        public readonly FontDescriptionStyle Style;\n\n        // optional properties\n        public readonly string StyleName;\n\n        public readonly ushort WinAscend;\n        public readonly ushort WinDescent;\n\n        private readonly SharpFont.FaceFlags FaceFlags;\n\n        public FontFaceInfo(string fontPath, int faceIndex, FontDescriptionStyle style)\n        {\n            this.FontFile = fontPath;\n            this.FaceIndex = faceIndex;\n            this.Style = style;\n        }\n\n        public FontFaceInfo(string fontPath, int faceIndex, FontDescriptionStyle style, string styleName, ushort winAscend, ushort winDescent)\n        {\n            this.FontFile = fontPath;\n            this.FaceIndex = faceIndex;\n            this.Style = style;\n\n            this.StyleName = styleName;\n\n            this.WinAscend = winAscend;\n            this.WinDescent = winDescent;\n        }\n\n        public FontFaceInfo(string fontPath, int faceIndex, FontDescriptionStyle style, string styleName, SharpFont.FaceFlags faceFlags)\n        {\n            this.FontFile = fontPath;\n            this.FaceIndex = faceIndex;\n            this.Style = style;\n\n            this.StyleName = styleName;\n            this.FaceFlags = faceFlags;\n        }\n\n        internal static FontDescriptionStyle ToFontStyle(SharpFont.StyleFlags styleFlags)\n        {\n            FontDescriptionStyle style = default(FontDescriptionStyle);\n\n            if ((styleFlags & SharpFont.StyleFlags.Bold) == SharpFont.StyleFlags.Bold)\n                style |= FontDescriptionStyle.Bold;\n            if ((styleFlags & SharpFont.StyleFlags.Italic) == SharpFont.StyleFlags.Italic)\n                style |= FontDescriptionStyle.Italic;\n\n            return style;\n        }\n\n        internal static FontDescriptionStyle ToFontStyle(OpenFontStyleFlags styleFlags)\n        {\n            FontDescriptionStyle style = default(FontDescriptionStyle);\n\n            if ((styleFlags & OpenFontStyleFlags.BOLD) == OpenFontStyleFlags.BOLD)\n                style |= FontDescriptionStyle.Bold;\n            if ((styleFlags & OpenFontStyleFlags.ITALIC) == OpenFontStyleFlags.ITALIC)\n                style |= FontDescriptionStyle.Italic;\n\n            // not supported styles\n            if ((styleFlags & OpenFontStyleFlags.OBLIQUE) == OpenFontStyleFlags.OBLIQUE)\n                style = (FontDescriptionStyle)(-1);\n\n            return style;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"{{FontFile: {0}, FaceIndex: {1}, Style: {2}, StyleName: {3}, FaceFlags: [{4}] }}\",\n                FontFile, FaceIndex, Style,\n                StyleName, FaceFlags);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/Glyph.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    internal struct GlyphKerning\n    {\n        public float LeftBearing;\n        public float AdvanceWidth;\n        public float RightBearing;\n\n        public Vector3 ToVector3()\n        {\n            return new Vector3(LeftBearing, AdvanceWidth, RightBearing);\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{LeftBearing: {0}, AdvanceWidth: {1}, RightBearing: {2} }}\",\n                LeftBearing, AdvanceWidth, RightBearing);\n        }\n    }\n\n    // Represents a single character within a font.\n    internal class FontGlyph\n    {\n        // Constructor.\n        public FontGlyph(PixelBitmapContent<Vector4> bitmap)\n        {\n            Bitmap = bitmap;\n            Subrect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);\n            Width = bitmap.Width;\n            Height = bitmap.Height;\n        }\n\n        // Glyph image data (may only use a portion of a larger bitmap).\n        public PixelBitmapContent<Vector4> Bitmap;\n        public Rectangle Subrect;\n\n        public int FontBitmapLeft;\n        public int FontBitmapTop;\n\n        // Layout information.\n        public int XOffset;\n        public int YOffset;\n        public int Width;\n        public int Height;\n\n        public float XAdvance;\n\n        public GlyphKerning Kerning;\n\n        public float GlyphMetricTopBearing;\n#if DEBUG\n        public float GlyphMetricLeftBearing;\n        public float GlyphMetricWidth;\n        public float GlyphMetricXAdvance;\n#endif\n\n        // Crops unused space from around the edge of a glyph bitmap.\n        public void Crop()\n        {\n            // Crop the top.\n            while (Subrect.Height > 1 && IsEmptyRow(this.Bitmap, Subrect.X, Subrect.Y, Subrect.Width))\n            {\n                YOffset++;\n                Subrect.Y++;\n                Subrect.Height--;\n            }\n\n            // Crop the bottom.\n            while (Subrect.Height > 1 && IsEmptyRow(this.Bitmap, Subrect.X, Subrect.Bottom - 1, Subrect.Width))\n            {\n                Subrect.Height--;\n            }\n\n            // Crop the left.\n            while (Subrect.Width > 1 && IsEmptyColumn(this.Bitmap, Subrect.X, Subrect.Y, Subrect.Height))\n            {\n                XOffset++;\n                Subrect.X++;\n                Subrect.Width--;\n            }\n\n            // Crop the right.\n            while (Subrect.Width > 1 && IsEmptyColumn(this.Bitmap, Subrect.Right - 1, Subrect.Y, Subrect.Height))\n            {\n                Subrect.Width--;\n\n                XAdvance++;\n            }\n        }\n\n        const float TransparentAlpha = 0f;\n\n        public static bool IsEmptyRow(PixelBitmapContent<Vector4> bmp, int rX, int rY, int rW)\n        {\n            for (int x = 0; x < rW; x++)\n            {\n                float alpha = bmp.GetPixel(rX + x, rY + 0).W;\n                if (alpha != TransparentAlpha)\n                    return false;\n            }\n\n            return true;\n        }\n\n        public static bool IsEmptyColumn(PixelBitmapContent<Vector4> bmp, int rX, int rY, int rH)\n        {\n            for (int y = 0; y < rH; y++)\n            {\n                float alpha = bmp.GetPixel(rX + 0, rY + y).W;\n                if (alpha != TransparentAlpha)\n                    return false;\n            }\n\n            return true;\n        }\n    }\n\n    internal class FontContent : ContentItem\n    {\n        public readonly Dictionary<char, FontGlyph> Glyphs = new Dictionary<char, FontGlyph>();\n\n        public float MetricsHeight;\n        public float MetricsAscender;\n        public float MetricsDescender;\n\n        public float WinAscend;\n        public float WinDescend;\n\n        public float FaceBBoxLeft;\n        public float FaceBBoxTop;\n        public float FaceBBoxRight;\n        public float FaceBBoxBottom;\n\n#if DEBUG\n        public float FaceAscender;\n        public float FaceDescender;\n\n        public float FaceUnderlinePosition;\n        public float FaceUnderlineThickness;\n#endif\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/GlyphPacker.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    // Helper for arranging many small bitmaps onto a single larger surface.\n    internal static class GlyphPacker\n    {\n        public static BitmapContent ArrangeGlyphs(ICollection<FontGlyph> glyphs, bool requirePOT, bool requireSquare)\n        {\n            // Build up a list of all the glyphs needing to be arranged.\n            List<ArrangedFontGlyph> arrangedGlyphs = new List<ArrangedFontGlyph>();\n\n            foreach (FontGlyph glyph in glyphs)\n            {\n                ArrangedFontGlyph arrangedGlyph = new ArrangedFontGlyph(glyph);\n                arrangedGlyph.Bounds.Size = glyph.Subrect.Size;\n\n                // Leave a one pixel border around every glyph in the output bitmap.\n                arrangedGlyph.Bounds.Width += 2;\n                arrangedGlyph.Bounds.Height += 2;\n\n                arrangedGlyphs.Add(arrangedGlyph);\n            }\n\n            // Sort so the largest glyphs get arranged first.\n            arrangedGlyphs.Sort();\n\n            // Work out how big the output bitmap should be.\n            int guessedWidth = GuessOutputWidth(glyphs);\n            MaxRectsBin rectPacker = new MaxRectsBin(guessedWidth, 1024 * 2, GrowRule.Height);\n\n            for (int i = 0; i < arrangedGlyphs.Count; i++)\n            {\n                ArrangedFontGlyph arrangedGlyph = arrangedGlyphs[i];\n                Rectangle bounds = rectPacker.Insert(arrangedGlyph.Bounds.Width, arrangedGlyph.Bounds.Height, MaxRectsHeuristic.Bl);\n                arrangedGlyph.Bounds.Location = bounds.Location;\n            }\n\n            // Create the merged output bitmap.\n            int outputWidth = MakeValidTextureSize(rectPacker.UsedWidth, requirePOT);\n            int outputHeight = MakeValidTextureSize(rectPacker.UsedHeight, requirePOT);\n\n            if (requireSquare)\n            {\n                outputHeight = Math.Max(outputWidth, outputHeight);\n                outputWidth = outputHeight;\n            }\n\n            return CopyGlyphsToOutput(arrangedGlyphs, outputWidth, outputHeight);\n        }\n\n        // Once arranging is complete, copies each glyph to its chosen position in the single larger output bitmap.\n        static BitmapContent CopyGlyphsToOutput(List<ArrangedFontGlyph> arrangedGlyphs, int width, int height)\n        {\n            PixelBitmapContent<Vector4> output = new PixelBitmapContent<Vector4>(width, height);\n\n            foreach (ArrangedFontGlyph glyph in arrangedGlyphs)\n            {\n                FontGlyph sourceGlyph = glyph.Glyph;\n                Rectangle sourceRegion = sourceGlyph.Subrect;\n                Rectangle destinationRegion = new Rectangle(glyph.Bounds.Location, sourceRegion.Size);\n                destinationRegion.Offset(1,1);\n\n                BitmapContent.Copy(sourceGlyph.Bitmap, sourceRegion, output, destinationRegion);\n\n                sourceGlyph.Bitmap = output;\n                sourceGlyph.Subrect = destinationRegion;\n            }\n\n            return output;\n        }\n\n\n        // Internal helper class keeps track of a glyph while it is being arranged.\n        class ArrangedFontGlyph : IComparable<ArrangedFontGlyph>\n        {\n            public readonly FontGlyph Glyph;\n            public Rectangle Bounds;\n\n            public ArrangedFontGlyph(FontGlyph glyph)\n            {\n                Glyph = glyph;\n            }\n\n            int IComparable<ArrangedFontGlyph>.CompareTo(ArrangedFontGlyph other)\n            {\n                int aSize = this.Bounds.Height << 10  + this.Bounds.Width;\n                int bSize = other.Bounds.Height << 10 + other.Bounds.Width;\n\n                return bSize.CompareTo(aSize);\n            }\n        }\n\n        // Heuristic guesses what might be a good output width for a list of glyphs.\n        static int GuessOutputWidth(ICollection<FontGlyph> sourceGlyphs)\n        {\n            int maxWidth = 0;\n            int totalSize = 0;\n\n            foreach (FontGlyph glyph in sourceGlyphs)\n            {\n                maxWidth = Math.Max(maxWidth, glyph.Bitmap.Width+2);\n                totalSize += (glyph.Bitmap.Width+2) * (glyph.Bitmap.Height+2);\n            }\n\n            int width = Math.Max((int)Math.Sqrt(totalSize), maxWidth);\n\n            return MakeValidTextureSize(width, true);\n        }\n\n\n        // Rounds a value up to the next larger valid texture size.\n        static int MakeValidTextureSize(int value, bool requirePowerOfTwo)\n        {\n            // In case we want to compress the texture, make sure the size is a multiple of 4.\n            const int blockSize = 4;\n\n            if (requirePowerOfTwo)\n            {\n                // Round up to a power of two.\n                int powerOfTwo = blockSize;\n\n                while (powerOfTwo < value)\n                    powerOfTwo <<= 1;\n\n                return powerOfTwo;\n            }\n            else\n            {\n                // Round up to the specified block size.\n                return (value + blockSize - 1) & ~(blockSize - 1);\n            }\n        }\n    }\n\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/GrowRule.cs",
    "content": "﻿/*\nThis was adapted from a version I found online. Here's the original header:\n \tBased on the Public Domain MaxRectsBinPack.cpp source by Jukka Jylänki\n \thttps://github.com/juj/RectangleBinPack/\n \tPorted to C# by Sven Magnus\n \tThis version is also public domain - do whatever you want with it.\n*/\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// How to grow the bin when a rectangel can't be placed.\n    /// </summary>\n    internal enum GrowRule\n    {\n        /// <summary>\n        /// Don't grow the bin, throw an exception when full.\n        /// </summary>\n        None,\n        /// <summary>\n        /// Grow the bins width.\n        /// </summary>\n        Width,\n        /// <summary>\n        /// Grow the bins height.\n        /// </summary>\n        Height,\n        /// <summary>\n        /// Alternate growing the bins width and height. Starts with width.\n        /// </summary>\n        Both\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/MaxRectsBin.cs",
    "content": "﻿/*\nThis was adapted from a version I found online. Here's the original header:\n \tBased on the Public Domain MaxRectsBinPack.cpp source by Jukka Jylänki\n \thttps://github.com/juj/RectangleBinPack/\n \tPorted to C# by Sven Magnus\n \tThis version is also public domain - do whatever you want with it.\n*/\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// A bin that can pack rectangles using the MaxRects algorithm with several heuristics.\n    /// </summary>\n    internal class MaxRectsBin\n    {\n        /// <summary>\n        /// Width of the bin.\n        /// </summary>\n        public int BinWidth { get; private set; }\n\n        /// <summary>\n        /// Height of the bin.\n        /// </summary>\n        public int BinHeight { get; private set; }\n\n        /// <summary>\n        /// Indicates if rectangle can be rotated.\n        /// </summary>\n        public bool AllowRotations { get; private set; }\n\n        /// <summary>\n        /// Padding to add to both sides in the horizontal dimension. Default is 0.\n        /// </summary>\n        public int PaddingWidth { get; set; }\n\n        /// <summary>\n        /// Padding to add to both sides in the vertical dimension. Default is 0.\n        /// </summary>\n        public int PaddingHeight { get; set; }\n\n        /// <summary>\n        /// Determines if padding is included in returned rectangles. Default is <c>false</c>.\n        /// </summary>\n        public bool IncludePadding { get; set; }\n\n        private readonly List<Rectangle> _usedRectangles;\n        private readonly List<Rectangle> _freeRectangles;\n\n        /// <summary>\n        /// The actually used width of the bin.\n        /// </summary>\n        public int UsedWidth { get; private set; }\n\n        /// <summary>\n        /// The actually used height of the bin.\n        /// </summary>\n        public int UsedHeight { get; private set; }\n\n        /// <summary>\n        /// The number of times to grow the bin for a single rectangle when it doesn't fit. Defaults to 3.\n        /// </summary>\n        public int GrowLimit\n        {\n            get { return _growLimit;  }\n            set\n            {\n                if (value <= 0)\n                    throw new ArgumentOutOfRangeException(nameof(value), \"Grow limit must be larger than 0.\");\n                _growLimit = value;\n            }\n        }\n\n        /// <summary>\n        /// Rule to choose in which dimension to grow.\n        /// </summary>\n        public GrowRule Grow { get; set; }\n\n        /// <summary>\n        ///   Determines how the bin is grown.\n        ///   A positive value means a fixed size increase, a negative value means a factor increase.\n        ///   E.g. -2 will grow the bin by a factor of 2 when it needs to grow.\n        /// </summary>\n        public float GrowIncrement { get; set; }\n\n        private bool _growWidth;\n        private int _growLimit = 3;\n\n        /// <summary>\n        /// Create a <see cref=\"MaxRectsBin\"/> instance.\n        /// </summary>\n        /// <param name=\"width\">Initial available width. Defaults to 64.</param>\n        /// <param name=\"height\">Initial available height. Defaults to 64.</param>\n        /// <param name=\"grow\">Whether to allow growing the available space when a rectangle doesn't fit.</param>\n        /// <param name=\"growIncrement\">\n        ///   Determines how the bin is grown.\n        ///   A positive value means a fixed size increase, a negative value means a factor increase.\n        ///   E.g. -2 will grow the bin by a factor of 2 when it needs to grow.\n        /// </param>\n        /// <param name=\"allowRotation\">Whether to allow rotating the rectangles.</param>\n        public MaxRectsBin(int width = 64, int height = 64, GrowRule grow = GrowRule.Both, float growIncrement = -2, bool allowRotation = false)\n        {\n            BinWidth = width;\n            BinHeight = height;\n            Grow = grow;\n            GrowIncrement = growIncrement;\n            AllowRotations = allowRotation;\n\n            _usedRectangles = new List<Rectangle>();\n            _freeRectangles = new List<Rectangle>();\n\n            Rectangle n = new Rectangle(0, 0, width, height);\n            _freeRectangles.Add(n);\n        }\n\n        private void DoGrow()\n        {\n            switch (Grow)\n            {\n                case GrowRule.None:\n                    break;\n                case GrowRule.Width:\n                    GrowWidth();\n                    break;\n                case GrowRule.Height:\n                    GrowHeight();\n                    break;\n                case GrowRule.Both:\n                    // alternate between growing width and height\n                    if (_growWidth)\n                        GrowWidth();\n                    else\n                        GrowHeight();\n                    _growWidth = !_growWidth;\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException();\n            }\n        }\n\n        private void GrowWidth()\n        {\n            float grow = GrowIncrement < 0 ? BinWidth * -(GrowIncrement + 1) : BinWidth + GrowIncrement;\n\n            Rectangle rect = new Rectangle(BinWidth, 0, (int)grow, BinHeight);\n            BinWidth += (int)grow;\n            _freeRectangles.Add(rect);\n        }\n\n        private void GrowHeight()\n        {\n            float grow = GrowIncrement < 0 ? BinHeight * -(GrowIncrement + 1) : BinHeight + GrowIncrement;\n\n            Rectangle rect = new Rectangle(0, BinHeight, BinWidth, (int)grow);\n            BinHeight += (int)grow;\n            _freeRectangles.Add(rect);\n        }\n\n        /// <summary>\n        /// Insert a rectangle into the bin.\n        /// </summary>\n        /// <param name=\"width\">Width of the rectangle.</param>\n        /// <param name=\"height\">Height of the rectangle.</param>\n        /// <param name=\"heuristic\">Heuristic to use.</param>\n        /// <returns>The bounds of the rectangle after placement.</returns>\n        /// <exception cref=\"Exception\">If the rectangle did not fit in the bin.</exception>\n        public Rectangle Insert(int width, int height, MaxRectsHeuristic heuristic)\n        {\n            if (width == 0 || height == 0)\n                return new Rectangle(0, 0, width, height);\n\n            width += PaddingWidth;\n            height += PaddingHeight;\n\n            Rectangle newNode;\n            FindPositionForNewNode(heuristic, width, height, out newNode);\n\n            if (Grow == GrowRule.None && newNode.Height == 0)\n                throw new Exception($\"Failed to pack rectangle of size ({width}, {height}). BinWidth: {BinWidth}, BinHeight: {BinHeight}. Growing not allowed.\");\n\n            int growTries = 0;\n            while (newNode.Height == 0)\n            {\n                DoGrow();\n                growTries++;\n                FindPositionForNewNode(heuristic, width, height, out newNode);\n                if (growTries >= GrowLimit)\n                    throw new Exception($\"Failed to pack rectangle of size ({width}, {height}). BinWidth: {BinWidth}, BinHeight: {BinHeight}, Occupancy: {GetOccupancy()}\");\n            }\n\n            PlaceRect(ref newNode);\n\n            if (newNode.Right > UsedWidth)\n                UsedWidth = newNode.Right;\n            if (newNode.Bottom > UsedHeight)\n                UsedHeight = newNode.Bottom;\n\n            if (!IncludePadding)\n            {\n                newNode = new Rectangle(\n                    newNode.X + PaddingWidth, newNode.Y + PaddingHeight,\n                    newNode.Width - PaddingWidth * 2, newNode.Height - PaddingHeight * 2);\n            }\n            return newNode;\n        }\n\n        void FindPositionForNewNode(MaxRectsHeuristic heuristic, int width, int height, \n                  out Rectangle rect)\n        {\n            int score1 = 0; // Unused in this function. We don't need to know the score after finding the position.\n            int score2 = 0;\n            switch (heuristic)\n            {\n                case MaxRectsHeuristic.Bssf:\n                    rect = FindPositionForNewNodeBestShortSideFit(width, height, ref score1, ref score2);\n                    break;\n                case MaxRectsHeuristic.Bl:\n                    rect = FindPositionForNewNodeBottomLeft(width, height, ref score1, ref score2);\n                    break;\n                case MaxRectsHeuristic.RectContactPointRule:\n                    rect = FindPositionForNewNodeContactPoint(width, height, ref score1);\n                    break;\n                case MaxRectsHeuristic.Blsf:\n                    rect = FindPositionForNewNodeBestLongSideFit(width, height, ref score2, ref score1);\n                    break;\n                case MaxRectsHeuristic.Baf:\n                    rect = FindPositionForNewNodeBestAreaFit(width, height, ref score1, ref score2);\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(heuristic), heuristic, null);\n            }\n        }\n\n        /// <summary>\n        /// Place an array of rectangles in the bin.\n        /// </summary>\n        /// <param name=\"sizes\">Sizes of the rectangles.</param>\n        /// <param name=\"heuristic\">Heuristic to use.</param>\n        /// <returns>Bounds of all rectangles after placement.</returns>\n        /// <exception cref=\"ArgumentNullException\">If <paramref name=\"sizes\"/> is <c>null</c>.</exception>\n        public Rectangle[] Insert(Point[] sizes, MaxRectsHeuristic heuristic = MaxRectsHeuristic.Bssf)\n        {\n            if (sizes == null)\n                throw new ArgumentNullException(nameof(sizes));\n            Rectangle[] bounds = new Rectangle[sizes.Length];\n            Insert(sizes, bounds, 0, heuristic);\n            return bounds;\n        }\n\n        /// <summary>\n        /// Place an array of rectangles in the bin.\n        /// </summary>\n        /// <param name=\"sizes\">Sizes of the rectangles.</param>\n        /// <param name=\"bounds\">Array to fill with rectangle bounds.</param>\n        /// <param name=\"indexOffset\">Index into <paramref name=\"bounds\"/> to start filling.</param>\n        /// <param name=\"heuristic\">Heuristic to use.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        ///   If <paramref name=\"sizes\"/> or <paramref name=\"bounds\"/> is <c>null</c>.\n        /// </exception>\n        /// <exception cref=\"ArgumentException\">If <paramref name=\"indexOffset\"/> is less than 0.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">\n        ///   If <paramref name=\"bounds\"/> is not large enough to hold all bounds.\n        ///   I.e. <c>bounds.Length - indexOffset &lt; sizes.Length</c>\n        /// </exception>\n        public void Insert(Point[] sizes, Rectangle[] bounds, int indexOffset = 0, MaxRectsHeuristic heuristic = MaxRectsHeuristic.Bssf)\n        {\n            if (sizes == null)\n                throw new ArgumentNullException(nameof(sizes));\n            if (bounds == null)\n                throw new ArgumentNullException(nameof(bounds));\n            if (indexOffset < 0)\n                throw new ArgumentOutOfRangeException(nameof(indexOffset), \"Index offset must be larger than 0.\");\n            if (bounds.Length - indexOffset < sizes.Length)\n                throw new ArgumentException(\"Packed array not large enough to hold bounds.\", nameof(bounds));\n\n            List<int> indices = new List<int>(sizes.Length);\n            for (int i = 0; i < sizes.Length; i++)\n                indices.Add(i);\n\n            while (indices.Count > 0)\n            {\n                Rectangle bestNode;\n                int bestRectIndex = GetBestRect(sizes, heuristic, indices, out bestNode);\n                if (Grow == GrowRule.None && bestRectIndex == -1)\n                    throw new Exception($\"Failed to pack rectangles with {indices.Count} rectangles left. BinWidth: {BinWidth}, BinHeight: {BinHeight}. Growing not allowed.\");\n\n                int growTries = 0;\n                while (bestRectIndex == -1)\n                {\n                    DoGrow();\n                    growTries++;\n                    bestRectIndex = GetBestRect(sizes, heuristic, indices, out bestNode);\n                    if (growTries >= GrowLimit)\n                        throw new Exception($\"Failed to pack rectangles with {indices.Count} rectangles left. BinWidth: {BinWidth}, BinHeight: {BinHeight}, Occupancy: {GetOccupancy()}\");\n                }\n\n                PlaceRect(ref bestNode);\n                int ogIndex = indices[bestRectIndex];\n                indices.RemoveAt(bestRectIndex);\n\n                if (bestNode.Right > UsedWidth)\n                    UsedWidth = bestNode.Right;\n                if (bestNode.Bottom > UsedHeight)\n                    UsedHeight = bestNode.Bottom;\n\n                if (!IncludePadding)\n                    bestNode = new Rectangle(\n                        bestNode.X + PaddingWidth, bestNode.Y + PaddingHeight,\n                        bestNode.Width - PaddingWidth * 2, bestNode.Height - PaddingHeight * 2);\n                bounds[indexOffset + ogIndex] = bestNode;\n            }\n        }\n\n        private int GetBestRect(Point[] sizes, MaxRectsHeuristic heuristic, List<int> indices, out Rectangle bestNode)\n        {\n            int bestScore1 = int.MaxValue;\n            int bestScore2 = int.MaxValue;\n            int bestRectIndex = -1;\n            bestNode = new Rectangle();\n\n            for (int indirectIndex = 0; indirectIndex < indices.Count; indirectIndex++)\n            {\n                int i = indices[indirectIndex];\n                int score1 = 0;\n                int score2 = 0;\n                Rectangle newNode = ScoreRect(sizes[i].X + PaddingWidth * 2, sizes[i].Y + PaddingHeight * 2, heuristic,\n                    ref score1, ref score2);\n\n                if (score1 < bestScore1 || (score1 == bestScore1 && score2 < bestScore2))\n                {\n                    bestScore1 = score1;\n                    bestScore2 = score2;\n                    bestNode = newNode;\n                    bestRectIndex = indirectIndex;\n                }\n            }\n\n            return bestRectIndex;\n        }\n\n        private void PlaceRect(ref Rectangle node)\n        {\n            int numRectanglesToProcess = _freeRectangles.Count;\n            for (int i = 0; i < numRectanglesToProcess; ++i)\n            {\n                if (SplitFreeNode(_freeRectangles[i], ref node))\n                {\n                    _freeRectangles.RemoveAt(i);\n                    --i;\n                    --numRectanglesToProcess;\n                }\n            }\n\n            PruneFreeList();\n\n            _usedRectangles.Add(node);\n        }\n\n        private Rectangle ScoreRect(int width, int height, MaxRectsHeuristic method, ref int score1, ref int score2)\n        {\n            Rectangle newNode = new Rectangle();\n            score1 = int.MaxValue;\n            score2 = int.MaxValue;\n            switch (method)\n            {\n                case MaxRectsHeuristic.Bssf:\n                    newNode = FindPositionForNewNodeBestShortSideFit(width, height, ref score1, ref score2);\n                    break;\n                case MaxRectsHeuristic.Bl:\n                    newNode = FindPositionForNewNodeBottomLeft(width, height, ref score1, ref score2);\n                    break;\n                case MaxRectsHeuristic.RectContactPointRule:\n                    newNode = FindPositionForNewNodeContactPoint(width, height, ref score1);\n                    score1 = -score1; // Reverse since we are minimizing, but for contact point score bigger is better.\n                    break;\n                case MaxRectsHeuristic.Blsf:\n                    newNode = FindPositionForNewNodeBestLongSideFit(width, height, ref score2, ref score1);\n                    break;\n                case MaxRectsHeuristic.Baf:\n                    newNode = FindPositionForNewNodeBestAreaFit(width, height, ref score1, ref score2);\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(method), method, null);\n            }\n\n            // Cannot fit the current rectangle.\n            if (newNode.Height == 0)\n            {\n                score1 = int.MaxValue;\n                score2 = int.MaxValue;\n            }\n\n            return newNode;\n        }\n\n        /// <summary>\n        /// Computes the ratio of used surface area.\n        /// </summary>\n        /// <param name=\"crop\">\n        ///   If <c>true</c> this uses <see cref=\"UsedWidth\"/> and <see cref=\"UsedHeight\"/> instead of\n        ///   <see cref=\"BinWidth\"/> and <see cref=\"BinHeight\"/> for available area.\n        /// </param>\n        public float GetOccupancy(bool crop = false)\n        {\n            ulong usedSurfaceArea = 0;\n            for (int i = 0; i < _usedRectangles.Count; ++i)\n                usedSurfaceArea += (uint)_usedRectangles[i].Width * (uint)_usedRectangles[i].Height;\n\n            int available = crop ? UsedWidth * UsedHeight : BinWidth * BinHeight;\n            return (float)usedSurfaceArea / available;\n        }\n\n        private Rectangle FindPositionForNewNodeBottomLeft(int width, int height, ref int bestY, ref int bestX)\n        {\n            Rectangle bestNode = new Rectangle();\n\n            bestY = int.MaxValue;\n\n            for (int i = 0; i < _freeRectangles.Count; ++i)\n            {\n                // Try to place the rectangle in upright (non-flipped) orientation.\n                if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height)\n                {\n                    int topSideY = _freeRectangles[i].Y + height;\n                    if (topSideY < bestY || (topSideY == bestY && _freeRectangles[i].X < bestX))\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height);\n                        bestY = topSideY;\n                        bestX = _freeRectangles[i].X;\n                    }\n                }\n\n                if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width)\n                {\n                    int topSideY = _freeRectangles[i].Y + width;\n                    if (topSideY < bestY || (topSideY == bestY && _freeRectangles[i].X < bestX))\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width);\n                        bestY = topSideY;\n                        bestX = _freeRectangles[i].X;\n                    }\n                }\n            }\n\n            return bestNode;\n        }\n\n        private Rectangle FindPositionForNewNodeBestShortSideFit(int width, int height, ref int bestShortSideFit,\n            ref int bestLongSideFit)\n        {\n            Rectangle bestNode = new Rectangle();\n\n            bestShortSideFit = int.MaxValue;\n\n            for (int i = 0; i < _freeRectangles.Count; ++i)\n            {\n                // Try to place the rectangle in upright (non-flipped) orientation.\n                if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height)\n                {\n                    int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - width);\n                    int leftoverVert = Math.Abs(_freeRectangles[i].Height - height);\n                    int shortSideFit = Math.Min(leftoverHoriz, leftoverVert);\n                    int longSideFit = Math.Max(leftoverHoriz, leftoverVert);\n\n                    if (shortSideFit < bestShortSideFit ||\n                        (shortSideFit == bestShortSideFit && longSideFit < bestLongSideFit))\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height);\n                        bestShortSideFit = shortSideFit;\n                        bestLongSideFit = longSideFit;\n                    }\n                }\n\n                if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width)\n                {\n                    int flippedLeftoverHoriz = Math.Abs(_freeRectangles[i].Width - height);\n                    int flippedLeftoverVert = Math.Abs(_freeRectangles[i].Height - width);\n                    int flippedShortSideFit = Math.Min(flippedLeftoverHoriz, flippedLeftoverVert);\n                    int flippedLongSideFit = Math.Max(flippedLeftoverHoriz, flippedLeftoverVert);\n\n                    if (flippedShortSideFit < bestShortSideFit ||\n                        (flippedShortSideFit == bestShortSideFit && flippedLongSideFit < bestLongSideFit))\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width);\n                        bestShortSideFit = flippedShortSideFit;\n                        bestLongSideFit = flippedLongSideFit;\n                    }\n                }\n            }\n\n            return bestNode;\n        }\n\n        private Rectangle FindPositionForNewNodeBestLongSideFit(int width, int height, ref int bestShortSideFit,\n            ref int bestLongSideFit)\n        {\n            Rectangle bestNode = new Rectangle();\n\n            bestLongSideFit = int.MaxValue;\n\n            for (int i = 0; i < _freeRectangles.Count; ++i)\n            {\n                // Try to place the rectangle in upright (non-flipped) orientation.\n                if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height)\n                {\n                    int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - width);\n                    int leftoverVert = Math.Abs(_freeRectangles[i].Height - height);\n                    int shortSideFit = Math.Min(leftoverHoriz, leftoverVert);\n                    int longSideFit = Math.Max(leftoverHoriz, leftoverVert);\n\n                    if (longSideFit < bestLongSideFit ||\n                        (longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit))\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height);\n                        bestShortSideFit = shortSideFit;\n                        bestLongSideFit = longSideFit;\n                    }\n                }\n\n                if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width)\n                {\n                    int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - height);\n                    int leftoverVert = Math.Abs(_freeRectangles[i].Height - width);\n                    int shortSideFit = Math.Min(leftoverHoriz, leftoverVert);\n                    int longSideFit = Math.Max(leftoverHoriz, leftoverVert);\n\n                    if (longSideFit < bestLongSideFit ||\n                        (longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit))\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width);\n                        bestShortSideFit = shortSideFit;\n                        bestLongSideFit = longSideFit;\n                    }\n                }\n            }\n\n            return bestNode;\n        }\n\n        private Rectangle FindPositionForNewNodeBestAreaFit(int width, int height, ref int bestAreaFit,\n            ref int bestShortSideFit)\n        {\n            Rectangle bestNode = new Rectangle();\n\n            bestAreaFit = int.MaxValue;\n\n            for (int i = 0; i < _freeRectangles.Count; ++i)\n            {\n                int areaFit = _freeRectangles[i].Width * _freeRectangles[i].Height - width * height;\n\n                // Try to place the rectangle in upright (non-flipped) orientation.\n                if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height)\n                {\n                    int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - width);\n                    int leftoverVert = Math.Abs(_freeRectangles[i].Height - height);\n                    int shortSideFit = Math.Min(leftoverHoriz, leftoverVert);\n\n                    if (areaFit < bestAreaFit || (areaFit == bestAreaFit && shortSideFit < bestShortSideFit))\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height);\n                        bestShortSideFit = shortSideFit;\n                        bestAreaFit = areaFit;\n                    }\n                }\n\n                if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width)\n                {\n                    int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - height);\n                    int leftoverVert = Math.Abs(_freeRectangles[i].Height - width);\n                    int shortSideFit = Math.Min(leftoverHoriz, leftoverVert);\n\n                    if (areaFit < bestAreaFit || (areaFit == bestAreaFit && shortSideFit < bestShortSideFit))\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width);\n                        bestShortSideFit = shortSideFit;\n                        bestAreaFit = areaFit;\n                    }\n                }\n            }\n\n            return bestNode;\n        }\n\n        /// Returns 0 if the two intervals i1 and i2 are disjoint, or the length of their overlap otherwise.\n        private int CommonIntervalLength(int i1Start, int i1End, int i2Start, int i2End)\n        {\n            if (i1End < i2Start || i2End < i1Start)\n                return 0;\n            return Math.Min(i1End, i2End) - Math.Max(i1Start, i2Start);\n        }\n\n        private int ContactPointScoreNode(int x, int y, int width, int height)\n        {\n            int score = 0;\n\n            if (x == 0 || x + width == BinWidth)\n                score += height;\n            if (y == 0 || y + height == BinHeight)\n                score += width;\n\n            for (int i = 0; i < _usedRectangles.Count; ++i)\n            {\n                if (_usedRectangles[i].X == x + width || _usedRectangles[i].X + _usedRectangles[i].Width == x)\n                    score += CommonIntervalLength(_usedRectangles[i].Y,\n                        _usedRectangles[i].Y + _usedRectangles[i].Height, y, y + height);\n                if (_usedRectangles[i].Y == y + height || _usedRectangles[i].Y + _usedRectangles[i].Height == y)\n                    score += CommonIntervalLength(_usedRectangles[i].X,\n                        _usedRectangles[i].X + _usedRectangles[i].Width, x, x + width);\n            }\n\n            return score;\n        }\n\n        private Rectangle FindPositionForNewNodeContactPoint(int width, int height, ref int bestContactScore)\n        {\n            Rectangle bestNode = new Rectangle();\n\n            bestContactScore = -1;\n\n            for (int i = 0; i < _freeRectangles.Count; ++i)\n            {\n                // Try to place the rectangle in upright (non-flipped) orientation.\n                if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height)\n                {\n                    int score = ContactPointScoreNode(_freeRectangles[i].X, _freeRectangles[i].Y, width,\n                        height);\n                    if (score > bestContactScore)\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height);\n                        bestContactScore = score;\n                    }\n                }\n\n                if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width)\n                {\n                    int score = ContactPointScoreNode(_freeRectangles[i].X, _freeRectangles[i].Y, height,\n                        width);\n                    if (score > bestContactScore)\n                    {\n                        bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width);\n                        bestContactScore = score;\n                    }\n                }\n            }\n\n            return bestNode;\n        }\n\n        private bool SplitFreeNode(Rectangle freeNode, ref Rectangle usedNode)\n        {\n            // Test with SAT if the rectangles even intersect.\n            if (usedNode.Left >= freeNode.Right || usedNode.Right <= freeNode.Left ||\n                usedNode.Top >= freeNode.Bottom || usedNode.Bottom <= freeNode.Top)\n                return false;\n\n            if (usedNode.Left < freeNode.Right && usedNode.Right > freeNode.Left)\n            {\n                // New node at the top side of the used node.\n                if (usedNode.Top > freeNode.Top && usedNode.Top < freeNode.Bottom)\n                {\n                    Rectangle newNode = new Rectangle(freeNode.X, freeNode.Y, freeNode.Width, usedNode.Top - freeNode.Top);\n                    _freeRectangles.Add(newNode);\n                }\n\n                // New node at the bottom side of the used node.\n                if (usedNode.Bottom < freeNode.Bottom)\n                {\n                    Rectangle newNode = new Rectangle(freeNode.X, usedNode.Bottom, freeNode.Width, freeNode.Bottom - usedNode.Bottom);\n                    _freeRectangles.Add(newNode);\n                }\n            }\n\n            if (usedNode.Top < freeNode.Bottom && usedNode.Bottom > freeNode.Top)\n            {\n                // New node at the left side of the used node.\n                if (usedNode.Left > freeNode.Left && usedNode.Left < freeNode.Right)\n                {\n                    Rectangle newNode = new Rectangle(freeNode.Left, freeNode.Top, usedNode.Left - freeNode.Left, freeNode.Height);\n                    _freeRectangles.Add(newNode);\n                }\n\n                // New node at the right side of the used node.\n                if (usedNode.X + usedNode.Width < freeNode.X + freeNode.Width)\n                {\n                    Rectangle newNode = new Rectangle(usedNode.Right, freeNode.Top, freeNode.Right - usedNode.Right, freeNode.Height);\n                    _freeRectangles.Add(newNode);\n                }\n            }\n\n            return true;\n        }\n\n        private void PruneFreeList()\n        {\n            for (int i = 0; i < _freeRectangles.Count; ++i)\n                for (int j = i + 1; j < _freeRectangles.Count; ++j)\n                {\n                    if (IsContainedIn(_freeRectangles[i], _freeRectangles[j]))\n                    {\n                        _freeRectangles.RemoveAt(i);\n                        --i;\n                        break;\n                    }\n\n                    if (IsContainedIn(_freeRectangles[j], _freeRectangles[i]))\n                    {\n                        _freeRectangles.RemoveAt(j);\n                        --j;\n                    }\n                }\n        }\n\n        private bool IsContainedIn(Rectangle a, Rectangle b)\n        {\n            return a.Left >= b.Left &&\n                   a.Top >= b.Top &&\n                   a.Right <= b.Right &&\n                   a.Bottom <= b.Bottom;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/MaxRectsHeuristic.cs",
    "content": "﻿/*\nThis was adapted from a version I found online. Here's the original header:\n \tBased on the Public Domain MaxRectsBinPack.cpp source by Jukka Jylänki\n \thttps://github.com/juj/RectangleBinPack/\n \tPorted to C# by Sven Magnus\n \tThis version is also public domain - do whatever you want with it.\n*/\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Heuristic method to use to choose the rectangles positions.\n    /// </summary>\n    internal enum MaxRectsHeuristic\n    {\n        /// <summary>\n        /// Best Short Side Fit: Positions the rectangle against the short side of a free rectangle into which it fits the best.\n        /// </summary>\n        Bssf,\n\n        /// <summary>\n        /// Best Long Side Fit: Positions the rectangle against the long side of a free rectangle into which it fits the best.\n        /// </summary>\n        Blsf,\n\n        /// <summary>\n        /// Best Area Fit: Positions the rectangle into the smallest free rect into which it fits.\n        /// </summary>\n        Baf,\n\n        /// <summary>\n        /// Bottom Left (Tetris method): Each rectangle is placed to a position (possibly rotating it) where its top side lies as low as possible.\n        /// </summary>\n        Bl,\n\n        /// <summary>\n        /// Contact Point: Choosest the placement where the rectangle touches other rects as much as possible.\n        /// </summary>\n        RectContactPointRule\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/FontDescription.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n\t/// <summary>\n\t/// Provides information to the FontDescriptionProcessor describing which font to rasterize, which font size to utilize, and which Unicode characters to include in the processor output.\n\t/// </summary>\n\tpublic class FontDescription : ContentItem\n\t{\n        private string _fontName;\n        private float _size;\n        private float _spacing;\n        private FontDescriptionStyle _style;\n        private bool _useKerning;\n\t    private ICollection<char> _characters = new HashSet<char>();\n        private char? _defaultCharacter;\n\n\t\t/// <summary>\n\t\t/// Gets or sets the name of the font, such as \"Times New Roman\" or \"Arial\". This value cannot be null or empty.\n\t\t/// </summary>\n        [ContentSerializer(AllowNull = false)]\n\t\tpublic string FontName\n\t\t{\n\t\t\tget { return _fontName; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (string.IsNullOrEmpty(value))\n\t\t\t\t\tthrow new ArgumentNullException(\"FontName is null or an empty string.\");\n\t\t\t\t_fontName = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the size, in points, of the font.\n\t\t/// </summary>\n\t\tpublic float Size\n\t\t{\n\t\t\tget { return _size; }\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (value <= 0.0f)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException(\"Size must be greater than zero.\");\n\t\t\t\t_size = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the amount of space, in pixels, to insert between letters in a string.\n\t\t/// </summary>\n        [ContentSerializer(Optional = true)]\n\t\tpublic float Spacing\n\t\t{\n\t\t\tget { return _spacing; }\n\t\t\tset { _spacing = value; }\n\t\t}\n\n        /// <summary>\n        /// Indicates if kerning information is used when drawing characters.\n        /// </summary>\n        [ContentSerializer(Optional = true)]\n        public bool UseKerning\n        {\n            get { return _useKerning; }\n            set { _useKerning = value; }\n        }\n\n\t\t/// <summary>\n\t\t/// Gets or sets the style of the font, expressed as a combination of one or more FontDescriptionStyle flags.\n\t\t/// </summary>\n\t\tpublic FontDescriptionStyle Style\n\t\t{\n\t\t\tget { return _style; }\n\t\t\tset { _style = value; }\n\t\t}\n\n        /// <summary>\n        /// Gets or sets the default character for the font.\n        /// </summary>\n        [ContentSerializer(Optional = true)]\n        public Nullable<char> DefaultCharacter\n        {\n            get { return _defaultCharacter; }\n            set { _defaultCharacter = value; }\n        }\n\n        [ContentSerializer(CollectionItemName = \"CharacterRegion\")]\n        internal CharacterRegion[] CharacterRegions\n        {\n            get\n            {\n                List<CharacterRegion> regions = new List<CharacterRegion>();\n                List<char> chars = new List<char>(Characters);\n                chars.Sort();\n\n                char start = chars[0];\n                char end = chars[0];\n\n                for (int i=1; i < chars.Count; i++)\n                {\n                    if (chars[i] != (end+1))\n                    {\n                        regions.Add(new CharacterRegion(start, end));\n                        start = chars[i];\n                    }\n                    end = chars[i];\n                }\n\n                regions.Add(new CharacterRegion(start, end));\n\n                return regions.ToArray();\n            }\n\n            set\n            {\n                for (int index = 0; index < value.Length; ++index)\n                {\n                    CharacterRegion characterRegion = value[index];\n                    if (characterRegion.End < characterRegion.Start)\n                        throw new ArgumentException(\"CharacterRegion.End must be greater than CharacterRegion.Start\");\n\n                    for (char start = characterRegion.Start; start <= characterRegion.End; start++)\n                        Characters.Add(start);\n                }\n            }\n        }\n\t\t\n\t    [ContentSerializerIgnore]\n\t    public ICollection<char> Characters\n\t    {\n\t        get { return _characters; } \n            internal set { _characters = new HashSet<char>(value); }\n\t    }\n\n        internal FontDescription()\n        {\n        }\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of FontDescription and initializes its members to the specified font, size, and spacing, using FontDescriptionStyle.Regular as the default value for Style.\n\t\t/// </summary>\n\t\t/// <param name=\"fontName\">The name of the font, such as Times New Roman.</param>\n\t\t/// <param name=\"size\">The size, in points, of the font.</param>\n\t\t/// <param name=\"spacing\">The amount of space, in pixels, to insert between letters in a string.</param>\n\t\tpublic FontDescription(string fontName, float size, float spacing)\n\t\t\t: this(fontName, size, spacing, FontDescriptionStyle.Regular, false)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of FontDescription and initializes its members to the specified font, size, spacing, and style.\n\t\t/// </summary>\n\t\t/// <param name=\"fontName\">The name of the font, such as Times New Roman.</param>\n\t\t/// <param name=\"size\">The size, in points, of the font.</param>\n\t\t/// <param name=\"spacing\">The amount of space, in pixels, to insert between letters in a string.</param>\n\t\t/// <param name=\"fontStyle\">The font style for the font.</param>\n\t\tpublic FontDescription(string fontName, float size, float spacing, FontDescriptionStyle fontStyle)\n            : this(fontName, size, spacing, fontStyle, false)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of FontDescription using the specified values.\n\t\t/// </summary>\n\t\t/// <param name=\"fontName\">The name of the font, such as Times New Roman.</param>\n\t\t/// <param name=\"size\">The size, in points, of the font.</param>\n\t\t/// <param name=\"spacing\">The amount of space, in pixels, to insert between letters in a string.</param>\n\t\t/// <param name=\"fontStyle\">The font style for the font.</param>\n\t\t/// <param name=\"useKerning\">true if kerning information is used when drawing characters; false otherwise.</param>\n\t\tpublic FontDescription(string fontName, float size, float spacing, FontDescriptionStyle fontStyle, bool useKerning)            \n\t\t{\n\t\t\t// Write to the properties so the validation is run\n\t\t\tthis.FontName = fontName;\n            this.Size = size;\n            this.Spacing = spacing;\n            this.Style = fontStyle;\n            this.UseKerning = useKerning;\t\t\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/FontDescriptionStyle.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Flags that describe style information to be applied to text.\n    /// You can combine these flags by using a bitwise OR operator (|).\n    /// </summary>\n    [Flags]\n    public enum FontDescriptionStyle\n    {\n        /// <summary>\n        /// Normal text.\n        /// </summary>\n        Regular = 0x0000,\n\n        /// <summary>\n        /// Bold text.\n        /// </summary>\n        Bold    = 0x0001,\n\n        /// <summary>\n        /// Italic text.\n        /// </summary>\n        Italic   = 0x0002,\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/GeometryContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides properties that define various aspects of a geometry batch.\n    /// </summary>\n    public class GeometryContent : ContentItem\n    {\n        IndexCollection _indices;\n        MaterialContent _material;\n        MeshContent _parent;\n        VertexContent _vertices;\n\n        /// <summary>\n        /// Gets the list of triangle indices for this geometry batch. Geometry is stored as an indexed triangle list, where each group of three indices defines a single triangle.\n        /// </summary>\n        public IndexCollection Indices\n        {\n            get { return _indices; }\n        }\n\n        /// <summary>\n        /// Gets or sets the material of the parent mesh.\n        /// </summary>\n        public MaterialContent Material\n        {\n            get { return _material; }\n            set { _material = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the parent MeshContent for this object.\n        /// </summary>\n        public MeshContent Parent\n        {\n            get { return _parent; }\n            set { _parent = value; }\n        }\n\n        /// <summary>\n        /// Gets the set of vertex batches for the geometry batch.\n        /// </summary>\n        public VertexContent Vertices\n        {\n            get { return _vertices; }\n        }\n\n        /// <summary>\n        /// Creates an instance of GeometryContent.\n        /// </summary>\n        public GeometryContent()\n        {\n            _indices = new IndexCollection();\n            _vertices = new VertexContent(this);\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{Name:{0}, Vertices: {1}, Indices: {2} }}\",\n                base.Name, this.Vertices.VertexCount, this.Indices.Count);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/GeometryContentCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods for maintaining a collection of geometry batches that make up a mesh.\n    /// </summary>\n    public sealed class GeometryContentCollection : ChildCollection<MeshContent, GeometryContent>\n    {\n        internal GeometryContentCollection(MeshContent parent)\n            : base(parent)\n        {\n        }\n\n        /// <summary>\n        /// Gets the parent of a child object.\n        /// </summary>\n        /// <param name=\"child\">The child of the parent being retrieved.</param>\n        /// <returns>The parent of the child object.</returns>\n        protected override MeshContent GetParent(GeometryContent child)\n        {\n            return child.Parent;\n        }\n\n        /// <summary>\n        /// Sets the parent of the specified child object.\n        /// </summary>\n        /// <param name=\"child\">The child of the parent being set.</param>\n        /// <param name=\"parent\">The parent of the child object.</param>\n        protected override void SetParent(GeometryContent child, MeshContent parent)\n        {\n            child.Parent = parent;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/GraphicsUtil.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\nusing FreeImageAPI;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public static class GraphicsUtil\n    {\n        internal static BitmapContent Resize(this BitmapContent bitmap, int newWidth, int newHeight)\n        {\n            BitmapContent src = bitmap;\n            SurfaceFormat format;\n            src.TryGetFormat(out format);\n            if (format != SurfaceFormat.Vector4)\n            {\n                var v4 = new PixelBitmapContent<Vector4>(src.Width, src.Height);\n                BitmapContent.Copy(src, v4);\n                src = v4;\n            }\n\n            // Convert to FreeImage bitmap\n            var bytes = src.GetPixelData();\n            var fi = FreeImage.ConvertFromRawBits(bytes, FREE_IMAGE_TYPE.FIT_RGBAF, src.Width, src.Height, SurfaceFormat.Vector4.GetSize() * src.Width, 128, 0, 0, 0, true);\n\n            // Resize\n            var newfi = FreeImage.Rescale(fi, newWidth, newHeight, FREE_IMAGE_FILTER.FILTER_BICUBIC);\n            FreeImage.Unload(fi);\n\n            // Convert back to PixelBitmapContent<Vector4>\n            src = new PixelBitmapContent<Vector4>(newWidth, newHeight);\n            bytes = new byte[SurfaceFormat.Vector4.GetSize() * newWidth * newHeight];\n            FreeImage.ConvertToRawBits(bytes, newfi, SurfaceFormat.Vector4.GetSize() * newWidth, 128, 0, 0, 0, true);\n            src.SetPixelData(bytes);\n            FreeImage.Unload(newfi);\n            // Convert back to source type if required\n            if (format != SurfaceFormat.Vector4)\n            {\n                var s = (BitmapContent)Activator.CreateInstance(bitmap.GetType(), new object[] { newWidth, newHeight });\n                BitmapContent.Copy(src, s);\n                src = s;\n            }\n\n            return src;\n        }\n\n        public static void BGRAtoRGBA(byte[] data)\n        {\n            for (var x = 0; x < data.Length; x += 4)\n            {\n                data[x] ^= data[x + 2];\n                data[x + 2] ^= data[x];\n                data[x] ^= data[x + 2];\n            }\n        }\n\n        public static bool IsPowerOfTwo(int x)\n        {\n            return (x & (x - 1)) == 0;\n        }\n\n        /// <summary>\n        /// Returns the next power of two. Returns same value if already is PoT.\n        /// </summary>\n        public static int GetNextPowerOfTwo(int value)\n        {\n            if (IsPowerOfTwo(value))\n                return value;\n\n            var nearestPower = 1;\n            while (nearestPower < value)\n                nearestPower = nearestPower << 1;\n\n            return nearestPower;\n        }\n\n        enum AlphaRange\n        {\n            /// <summary>\n            /// Pixel data has no alpha values below 1.0.\n            /// </summary>\n            Opaque,\n\n            /// <summary>\n            /// Pixel data contains alpha values that are either 0.0 or 1.0.\n            /// </summary>\n            Cutout,\n\n            /// <summary>\n            /// Pixel data contains alpha values that cover the full range of 0.0 to 1.0.\n            /// </summary>\n            Full,\n        }\n\n        /// <summary>\n        /// Gets the alpha range in a set of pixels.\n        /// </summary>\n        /// <param name=\"bitmap\">A bitmap of full-colour floating point pixel data in RGBA or BGRA order.</param>\n        /// <returns>A member of the AlphaRange enum to describe the range of alpha in the pixel data.</returns>\n\t\tstatic unsafe AlphaRange CalculateAlphaRange(BitmapContent bitmap)\n        {\n            AlphaRange result = AlphaRange.Opaque;\n\n            if (bitmap is PixelBitmapContent<Vector4>)\n            {\n                var pixelBitmap = (PixelBitmapContent<Vector4>)bitmap;\n                for (int y = 0; y < pixelBitmap.Height; ++y)\n                {\n                    Vector4[] row = pixelBitmap.GetRow(y);\n                    fixed (Vector4* prow = row)\n                    {\n                        for (int i = 0; i < row.Length; i++)\n                        {\n                            if (prow[i].W < 1.0)\n                            {\n                                if (prow[i].W == 0.0)\n                                    result = AlphaRange.Cutout;\n                                else\n                                    return AlphaRange.Full;\n                            }\n                        }\n                    }\n                }\n                return result;\n            }\n            else if (bitmap is PixelBitmapContent<Color>)\n            {\n                var pixelBitmap = (PixelBitmapContent<Color>)bitmap;\n                for (int y = 0; y < pixelBitmap.Height; ++y)\n                {\n                    Color[] row = pixelBitmap.GetRow(y);\n                    fixed (Color* prow = row)\n                    {\n                        for (int i = 0; i < row.Length; i++)\n                        {\n                            if (prow[i].A < 255)\n                            {\n                                if (prow[i].A == 0.0)\n                                    result = AlphaRange.Cutout;\n                                else\n                                    return AlphaRange.Full;\n                            }\n                        }\n                    }\n                }\n                return result;\n            }\n            else\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public static void CompressPvrtc(TextureContent input, ContentProcessorContext context)\n        {\n            // Calculate number of mip levels\n            var width = input.Faces[0][0].Height;\n            var height = input.Faces[0][0].Width;\n\n\t\t\tif (!IsPowerOfTwo(width) || !IsPowerOfTwo(height) || (width != height))\n            {\n                context.Logger.LogWarning(null, input.Identity, \"PVR compression requires width and height to be powers of two and equal. Falling back to 16-bit color.\");\n                GraphicsUtil.CompressColor16Bit(input);\n                return;\n            }\n\n            BitmapContent face = input.Faces[0][0];\n\n            AlphaRange alphaRange = CalculateAlphaRange(face);\n\n            if (alphaRange == AlphaRange.Opaque)\n                input.ConvertBitmapType(typeof(PvrtcRgb4BitmapContent));\n            else\n                input.ConvertBitmapType(typeof(PvrtcRgba4BitmapContent));\n        }\n\n        public static void CompressDxt(TextureContent input, ContentProcessorContext context)\n        {\n            BitmapContent face = input.Faces[0][0];\n\n            if (context.TargetProfile == GraphicsProfile.Reach)\n            {\n                if (!IsPowerOfTwo(face.Width) || !IsPowerOfTwo(face.Height))\n                    throw new PipelineException(\"DXT compression requires width and height must be powers of two in Reach graphics profile.\");                \n            }\n\n            // Test the alpha channel to figure out if we have alpha.\n            AlphaRange alphaRange = CalculateAlphaRange(face);\n\n            // TODO: This isn't quite right.\n            //\n            // We should be generating DXT1 textures for cutout alpha\n            // as DXT1 supports 1bit alpha and it uses less memory.\n            //\n            // XNA never generated DXT3 for textures... it always picked\n            // between DXT1 for cutouts and DXT5 for fractional alpha.\n            //\n            // DXT3 however can produce better results for high frequency\n            // alpha like a chain link fence where is DXT5 is better for \n            // low frequency alpha like clouds.  I don't know how we can \n            // pick the right thing in this case without a hint.\n            //\n            switch (alphaRange)\n            {\n                case AlphaRange.Opaque:\n                    input.ConvertBitmapType(typeof(Dxt1BitmapContent));\n                    break;\n                case AlphaRange.Cutout:\n                    input.ConvertBitmapType(typeof(Dxt3BitmapContent));\n                    break;\n                case AlphaRange.Full:\n                    input.ConvertBitmapType(typeof(Dxt5BitmapContent));\n                    break;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        static public void CompressAti(TextureContent input)\n        {\n            BitmapContent face = input.Faces[0][0];\n            AlphaRange alphaRange = CalculateAlphaRange(face);\n\n            if (alphaRange == AlphaRange.Full)\n                input.ConvertBitmapType(typeof(AtcExplicitBitmapContent));\n            else\n                input.ConvertBitmapType(typeof(AtcInterpolatedBitmapContent));\n        }\n\n        static public void CompressEtc1(TextureContent input, ContentProcessorContext context)\n        {\n            BitmapContent face = input.Faces[0][0];\n            AlphaRange alphaRange = CalculateAlphaRange(face);\n\n            // Use BGRA4444 for textures with non-opaque alpha values\n            if (alphaRange != AlphaRange.Opaque)\n                input.ConvertBitmapType(typeof(PixelBitmapContent<Bgra4444>));\n            else\n            {\n                // PVR SGX does not handle non-POT ETC1 textures.\n                // https://code.google.com/p/libgdx/issues/detail?id=1310\n                // Since we already enforce POT for PVR and DXT in Reach, we will also enforce POT for ETC1\n                if (!IsPowerOfTwo(face.Width) || !IsPowerOfTwo(face.Height))\n                {\n                    context.Logger.LogWarning(null, input.Identity, \"ETC1 compression requires width and height to be powers of two due to hardware restrictions on some devices. Falling back to BGR565.\");\n                    input.ConvertBitmapType(typeof(PixelBitmapContent<Bgr565>));\n                }\n                else\n                    input.ConvertBitmapType(typeof(Etc1BitmapContent));\n            }\n        }\n\n        static public void CompressColor16Bit(TextureContent input)\n        {\n            BitmapContent face = input.Faces[0][0];\n            AlphaRange alphaRange = CalculateAlphaRange(face);\n\n            if (alphaRange == AlphaRange.Opaque)\n                input.ConvertBitmapType(typeof(PixelBitmapContent<Bgr565>));\n            else if (alphaRange == AlphaRange.Cutout)\n                input.ConvertBitmapType(typeof(PixelBitmapContent<Bgra5551>));\n            else\n                input.ConvertBitmapType(typeof(PixelBitmapContent<Bgra4444>));\n        }\n\n        // Compress the greyscale font texture page using a specially-formulated DXT3 mode\n        internal static unsafe void CompressFontDXT3(TextureContent input, ContentProcessorContext context)\n        {\n            if (input.Faces.Count > 1)\n                throw new PipelineException(\"Font textures should only have one face\");\n\n            if (context.TargetProfile == GraphicsProfile.Reach)\n            {\n                if (!IsPowerOfTwo(input.Faces[0][0].Width) || !IsPowerOfTwo(input.Faces[0][0].Height))\n                    throw new PipelineException(\"DXT compression requires width and height must be powers of two in Reach graphics profile.\");\n            }\n\n            var block = new Vector4[16];\n            for (int i = 0; i < input.Faces[0].Count; ++i)\n            {\n                var face = input.Faces[0][i];\n                var xBlocks = (face.Width + 3) / 4;\n                var yBlocks = (face.Height + 3) / 4;\n                var dxt3Size = xBlocks * yBlocks * 16;\n                var buffer = new byte[dxt3Size];\n\n                var bytes = face.GetPixelData();\n                fixed (byte* b = bytes)\n                {\n                    Vector4* colors = (Vector4*)b;\n\n                    int w = 0;\n                    int h = 0;\n                    int x = 0;\n                    int y = 0;\n                    while (h < (face.Height & ~3))\n                    {\n                        w = 0;\n                        x = 0;\n\n                        var h0 = h * face.Width;\n                        var h1 = h0 + face.Width;\n                        var h2 = h1 + face.Width;\n                        var h3 = h2 + face.Width;\n\n                        while (w < (face.Width & ~3))\n                        {\n                            block[0] = colors[w + h0];\n                            block[1] = colors[w + h0 + 1];\n                            block[2] = colors[w + h0 + 2];\n                            block[3] = colors[w + h0 + 3];\n                            block[4] = colors[w + h1];\n                            block[5] = colors[w + h1 + 1];\n                            block[6] = colors[w + h1 + 2];\n                            block[7] = colors[w + h1 + 3];\n                            block[8] = colors[w + h2];\n                            block[9] = colors[w + h2 + 1];\n                            block[10] = colors[w + h2 + 2];\n                            block[11] = colors[w + h2 + 3];\n                            block[12] = colors[w + h3];\n                            block[13] = colors[w + h3 + 1];\n                            block[14] = colors[w + h3 + 2];\n                            block[15] = colors[w + h3 + 3];\n\n                            int offset = (x + y * xBlocks) * 16;\n                            CompressFontDXT3Block(block, buffer, offset);\n\n                            w += 4;\n                            ++x;\n                        }\n\n                        // Do partial block at end of row\n                        if (w < face.Width)\n                        {\n                            var cols = face.Width - w;\n                            Array.Clear(block, 0, 16);\n                            for (int r = 0; r < 4; ++r)\n                            {\n                                h0 = (h + r) * face.Width;\n                                for (int c = 0; c < cols; ++c)\n                                    block[(r * 4) + c] = colors[w + h0 + c];\n                            }\n\n                            int offset = (x + y * xBlocks) * 16;\n                            CompressFontDXT3Block(block, buffer, offset);\n                        }\n\n                        h += 4;\n                        ++y;\n                    }\n\n                    // Do last partial row\n                    if (h < face.Height)\n                    {\n                        var rows = face.Height - h;\n                        w = 0;\n                        x = 0;\n                        while (w < (face.Width & ~3))\n                        {\n                            Array.Clear(block, 0, 16);\n                            for (int r = 0; r < rows; ++r)\n                            {\n                                var h0 = (h + r) * face.Width;\n                                block[(r * 4) + 0] = colors[w + h0 + 0];\n                                block[(r * 4) + 1] = colors[w + h0 + 1];\n                                block[(r * 4) + 2] = colors[w + h0 + 2];\n                                block[(r * 4) + 3] = colors[w + h0 + 3];\n                            }\n\n                            int offset = (x + y * xBlocks) * 16;\n                            CompressFontDXT3Block(block, buffer, offset);\n\n                            w += 4;\n                            ++x;\n                        }\n\n                        // Do last partial block\n                        if (w < face.Width)\n                        {\n                            var cols = face.Width - w;\n                            Array.Clear(block, 0, 16);\n                            for (int r = 0; r < rows; ++r)\n                            {\n                                var h0 = (h + r) * face.Width;\n                                for (int c = 0; c < cols; ++c)\n                                    block[(r * 4) + c] = colors[w + h0 + c];\n                            }\n\n                            int offset = (x + y * xBlocks) * 16;\n                            CompressFontDXT3Block(block, buffer, offset);\n                        }\n                    }\n                }\n\n                var dxt3 = new Dxt3BitmapContent(face.Width, face.Height);\n                dxt3.SetPixelData(buffer);\n                input.Faces[0][i] = dxt3;\n            }\n        }\n\n        // Maps a 2-bit greyscale to the index required for DXT3\n        // 00 = color0\n        // 01 = color1\n        // 10 = 2/3 * color0 + 1/3 * color1\n        // 11 = 1/3 * color0 + 2/3 * color1\n        static byte[] dxt3Map = new byte[] { 0, 2, 3, 1 };\n\n        // Compress a single 4x4 block from colors into buffer at the given offset\n        static void CompressFontDXT3Block(Vector4[] colors, byte[] buffer, int offset)\n        {\n            // Get the alpha into a 0-15 range\n            int a0 = (int)(colors[0].W * 15.0);\n            int a1 = (int)(colors[1].W * 15.0);\n            int a2 = (int)(colors[2].W * 15.0);\n            int a3 = (int)(colors[3].W * 15.0);\n            int a4 = (int)(colors[4].W * 15.0);\n            int a5 = (int)(colors[5].W * 15.0);\n            int a6 = (int)(colors[6].W * 15.0);\n            int a7 = (int)(colors[7].W * 15.0);\n            int a8 = (int)(colors[8].W * 15.0);\n            int a9 = (int)(colors[9].W * 15.0);\n            int a10 = (int)(colors[10].W * 15.0);\n            int a11 = (int)(colors[11].W * 15.0);\n            int a12 = (int)(colors[12].W * 15.0);\n            int a13 = (int)(colors[13].W * 15.0);\n            int a14 = (int)(colors[14].W * 15.0);\n            int a15 = (int)(colors[15].W * 15.0);\n\n            // Duplicate the top two bits into the bottom two bits so we get one of four values: b0000, b0101, b1010, b1111\n            a0 = (a0 & 0xC) | (a0 >> 2);\n            a1 = (a1 & 0xC) | (a1 >> 2);\n            a2 = (a2 & 0xC) | (a2 >> 2);\n            a3 = (a3 & 0xC) | (a3 >> 2);\n            a4 = (a4 & 0xC) | (a4 >> 2);\n            a5 = (a5 & 0xC) | (a5 >> 2);\n            a6 = (a6 & 0xC) | (a6 >> 2);\n            a7 = (a7 & 0xC) | (a7 >> 2);\n            a8 = (a8 & 0xC) | (a8 >> 2);\n            a9 = (a9 & 0xC) | (a9 >> 2);\n            a10 = (a10 & 0xC) | (a10 >> 2);\n            a11 = (a11 & 0xC) | (a11 >> 2);\n            a12 = (a12 & 0xC) | (a12 >> 2);\n            a13 = (a13 & 0xC) | (a13 >> 2);\n            a14 = (a14 & 0xC) | (a14 >> 2);\n            a15 = (a15 & 0xC) | (a15 >> 2);\n\n            // 4-bit alpha\n            buffer[offset + 0] = (byte)((a1 << 4) | a0);\n            buffer[offset + 1] = (byte)((a3 << 4) | a2);\n            buffer[offset + 2] = (byte)((a5 << 4) | a4);\n            buffer[offset + 3] = (byte)((a7 << 4) | a6);\n            buffer[offset + 4] = (byte)((a9 << 4) | a8);\n            buffer[offset + 5] = (byte)((a11 << 4) | a10);\n            buffer[offset + 6] = (byte)((a13 << 4) | a12);\n            buffer[offset + 7] = (byte)((a15 << 4) | a14);\n\n            // color0 (transparent)\n            buffer[offset + 8] = 0;\n            buffer[offset + 9] = 0;\n\n            // color1 (white)\n            buffer[offset + 10] = 255;\n            buffer[offset + 11] = 255;\n\n            // Get the red (to be used for green and blue channels as well) into a 0-15 range\n            a0 = (int)(colors[0].X * 15.0);\n            a1 = (int)(colors[1].X * 15.0);\n            a2 = (int)(colors[2].X * 15.0);\n            a3 = (int)(colors[3].X * 15.0);\n            a4 = (int)(colors[4].X * 15.0);\n            a5 = (int)(colors[5].X * 15.0);\n            a6 = (int)(colors[6].X * 15.0);\n            a7 = (int)(colors[7].X * 15.0);\n            a8 = (int)(colors[8].X * 15.0);\n            a9 = (int)(colors[9].X * 15.0);\n            a10 = (int)(colors[10].X * 15.0);\n            a11 = (int)(colors[11].X * 15.0);\n            a12 = (int)(colors[12].X * 15.0);\n            a13 = (int)(colors[13].X * 15.0);\n            a14 = (int)(colors[14].X * 15.0);\n            a15 = (int)(colors[15].X * 15.0);\n\n            // Duplicate the top two bits into the bottom two bits so we get one of four values: b0000, b0101, b1010, b1111\n            a0 = (a0 & 0xC) | (a0 >> 2);\n            a1 = (a1 & 0xC) | (a1 >> 2);\n            a2 = (a2 & 0xC) | (a2 >> 2);\n            a3 = (a3 & 0xC) | (a3 >> 2);\n            a4 = (a4 & 0xC) | (a4 >> 2);\n            a5 = (a5 & 0xC) | (a5 >> 2);\n            a6 = (a6 & 0xC) | (a6 >> 2);\n            a7 = (a7 & 0xC) | (a7 >> 2);\n            a8 = (a8 & 0xC) | (a8 >> 2);\n            a9 = (a9 & 0xC) | (a9 >> 2);\n            a10 = (a10 & 0xC) | (a10 >> 2);\n            a11 = (a11 & 0xC) | (a11 >> 2);\n            a12 = (a12 & 0xC) | (a12 >> 2);\n            a13 = (a13 & 0xC) | (a13 >> 2);\n            a14 = (a14 & 0xC) | (a14 >> 2);\n            a15 = (a15 & 0xC) | (a15 >> 2);\n\n            // Color indices (00 = color0, 01 = color1, 10 = 2/3 * color0 + 1/3 * color1, 11 = 1/3 * color0 + 2/3 * color1)\n            buffer[offset + 12] = (byte)((dxt3Map[a3 >> 2] << 6) | (dxt3Map[a2 >> 2] << 4) | (dxt3Map[a1 >> 2] << 2) | dxt3Map[a0 >> 2]);\n            buffer[offset + 13] = (byte)((dxt3Map[a7 >> 2] << 6) | (dxt3Map[a6 >> 2] << 4) | (dxt3Map[a5 >> 2] << 2) | dxt3Map[a4 >> 2]);\n            buffer[offset + 14] = (byte)((dxt3Map[a11 >> 2] << 6) | (dxt3Map[a10 >> 2] << 4) | (dxt3Map[a9 >> 2] << 2) | dxt3Map[a8 >> 2]);\n            buffer[offset + 15] = (byte)((dxt3Map[a15 >> 2] << 6) | (dxt3Map[a14 >> 2] << 4) | (dxt3Map[a13 >> 2] << 2) | dxt3Map[a12 >> 2]);\n        }\n\n        internal static TextureProcessorOutputFormat GetTextureFormatForPlatform(TextureProcessorOutputFormat format, TargetPlatform platform)\n        {\n            // Select the default texture compression format for the target platform\n            if (format == TextureProcessorOutputFormat.Compressed)\n            {\n                switch (platform)\n                {\n                    case TargetPlatform.iOS:\n                        format = TextureProcessorOutputFormat.PvrCompressed;\n                        break;\n                    case TargetPlatform.Android:\n                        format = TextureProcessorOutputFormat.Etc1Compressed;\n                        break;\n\n                    default:\n                        format = TextureProcessorOutputFormat.DxtCompressed;\n                        break;\n                }\n            }\n            \n            // Is Compressed TextureFormat ?\n            if (format == TextureProcessorOutputFormat.AtcCompressed\n            ||  format == TextureProcessorOutputFormat.DxtCompressed\n            ||  format == TextureProcessorOutputFormat.Etc1Compressed\n            ||  format == TextureProcessorOutputFormat.PvrCompressed)\n            {\n                // Make sure the target platform supports the selected texture compression format\n                switch (platform)\n                {\n                    case TargetPlatform.iOS:\n                        if (format != TextureProcessorOutputFormat.PvrCompressed)\n                            throw new PlatformNotSupportedException(\"iOS platform only supports PVR texture compression\");\n                        break;\n\n                    case TargetPlatform.Windows:\n                    case TargetPlatform.WindowsStoreApp:\n                    case TargetPlatform.DesktopGL:\n                    case TargetPlatform.MacOSX:\n                    case TargetPlatform.NativeClient:\n                    case TargetPlatform.BlazorGL:\n                        if (format != TextureProcessorOutputFormat.DxtCompressed)\n                            throw new PlatformNotSupportedException(platform + \" platform only supports DXT texture compression\");\n                        break;\n                }\n            }\n\n            return format;\n        }\n\n        internal static bool RequiresPowerOfTwo(TextureProcessorOutputFormat format, bool generateMipmaps, TargetPlatform targetPlatform, GraphicsProfile targetProfile)\n        {\n            if (generateMipmaps)\n                return (targetProfile == GraphicsProfile.Reach);\n\n            switch (format)\n            {\n                case TextureProcessorOutputFormat.DxtCompressed:\n                    return (targetProfile == GraphicsProfile.Reach);\n\n                case TextureProcessorOutputFormat.PvrCompressed:\n                case TextureProcessorOutputFormat.Etc1Compressed:\n                    return true;\n\n                default:\n                    return false;\n                    break;\n            }\n        }\n\n        internal static bool RequiresSquare(TextureProcessorOutputFormat format, TargetPlatform targetPlatform)\n        {\n            switch (format)\n            {\n                case TextureProcessorOutputFormat.PvrCompressed:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/IndexCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.ObjectModel;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods for maintaining a list of index values.\n    /// </summary>\n    public sealed class IndexCollection : Collection<int>\n    {\n        /// <summary>\n        /// Initializes a new instance of IndexCollection.\n        /// </summary>\n        public IndexCollection()\n        {\n        }\n\n        /// <summary>\n        /// Add a range of indices to the collection.\n        /// </summary>\n        /// <param name=\"indices\">A collection of indices to add.</param>\n        public void AddRange(IEnumerable<int> indices)\n        {\n            foreach (var t in indices)\n                Add(t);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/IndirectPositionCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods for maintaining a list of vertex positions.\n    /// </summary>\n    /// <remarks>\n    /// This class is designed to collect the vertex positions for a VertexContent object. Use the contents\n    /// of the PositionIndices property (of the contained VertexContent object) to index into the Positions \n    /// property of the parent mesh.\n    /// </remarks>\n    public sealed class IndirectPositionCollection : IList<Vector3>\n    {\n        private readonly VertexChannel<int> _positionIndices;\n        private readonly GeometryContent _geometry;\n\n        /// <summary>\n        /// Number of positions in the collection.\n        /// </summary>\n        /// <value>Number of positions.</value>\n        public int Count\n        {\n            get { return _positionIndices.Count; }\n        }\n\n        /// <summary>\n        /// Gets or sets the position at the specified index.\n        /// </summary>\n        /// <value>Position located at index.</value>\n        public Vector3 this[int index]\n        {\n            get\n            {\n                int remap = _positionIndices[index];\n                return _geometry.Parent.Positions[remap];\n            } \n            set\n            {\n                throw Readonly();\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether this object is read-only.\n        /// </summary>\n        /// <value>true if this object is read-only; false otherwise.</value>\n        bool ICollection<Vector3>.IsReadOnly\n        {\n            get { return true; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of IndirectPositionCollection.\n        /// </summary>\n        internal IndirectPositionCollection(GeometryContent geometry, VertexChannel<int> positionIndices)\n        {\n            _geometry = geometry;\n            _positionIndices = positionIndices;\n        }\n\n        /// <summary>\n        /// Determines whether the specified position is in the collection.\n        /// </summary>\n        /// <param name=\"item\">Position being searched for in the collection.</param>\n        /// <returns>true if the position was found; false otherwise.</returns>\n        public bool Contains(Vector3 item)\n        {\n            return IndexOf(item) > -1;\n        }\n\n        /// <summary>\n        /// Copies the specified positions to an array, starting at the specified index.\n        /// </summary>\n        /// <param name=\"array\">Array of positions to be copied.</param>\n        /// <param name=\"arrayIndex\">Index of the first copied position.</param>\n        public void CopyTo(Vector3[] array, int arrayIndex)\n        {\n            foreach (Vector3 vec in this)\n                array[arrayIndex++] = vec;\n        }\n\n        /// <summary>\n        /// Gets an enumerator interface for reading the position values.\n        /// </summary>\n        /// <returns>Interface for enumerating the collection of position values.</returns>\n        public IEnumerator<Vector3> GetEnumerator()\n        {\n            for (int i = 0; i < Count; i++)\n                yield return this[i];\n        }\n\n        /// <summary>\n        /// Gets the index of the specified position in a collection.\n        /// </summary>\n        /// <param name=\"item\">Position being searched for.</param>\n        /// <returns>Index of the specified position or -1 if not found.</returns>\n        public int IndexOf(Vector3 item)\n        {\n            for (int i = 0; i < Count; i++)\n                if (this[i] == item)\n                    return i;\n\n            return -1;\n        }\n\n        internal Exception Readonly()\n        {\n            return new NotSupportedException(\"The collection is read only!\");\n        }\n\n        void ICollection<Vector3>.Add(Vector3 item)\n        {\n            throw Readonly();\n        }\n\n        void ICollection<Vector3>.Clear()\n        {\n            throw Readonly();\n        }\n\n        bool ICollection<Vector3>.Remove(Vector3 item)\n        {\n            throw Readonly();\n        }\n\n        void IList<Vector3>.Insert(int index, Vector3 item)\n        {\n            throw Readonly();\n        }\n\n        void IList<Vector3>.RemoveAt(int index)\n        {\n            throw Readonly();\n        }\n\n        /// <summary>\n        /// Returns an enumerator that can iterate through the collection.\n        /// </summary>\n        /// <returns>Enumerator that can iterate through the collection.</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/LocalizedFontDescription.cs",
    "content": "﻿#region File Description\n//-----------------------------------------------------------------------------\n// LocalizedFontDescription.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\n#region Using Statements\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n#endregion\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Normally, when you add a .spritefont file to your project, this data is\n    /// deserialized into a FontDescription object, which is then built into a\n    /// SpriteFontContent by the FontDescriptionProcessor. But to localize the\n    /// font, we want to add some additional data, so our custom processor can\n    /// know what .resx files it needs to scan. We do this by defining our own\n    /// custom font description class, deriving from the built in FontDescription\n    /// type, and adding a new property to store the resource filenames.\n    /// </summary>\n    public class LocalizedFontDescription : FontDescription\n    {\n        /// <summary>\n        /// Constructor.\n        /// </summary>\n        public LocalizedFontDescription()\n            : base(\"Arial\", 14, 0)\n        {\n        }\n\n\n        /// <summary>\n        /// Add a new property to our font description, which will allow us to\n        /// include a ResourceFiles element in the .spritefont XML. We use the\n        /// ContentSerializer attribute to mark this as optional, so existing\n        /// .spritefont files that do not include this ResourceFiles element\n        /// can be imported as well.\n        /// </summary>\n        [ContentSerializer(Optional = true, CollectionItemName = \"Resx\")]\n        public List<string> ResourceFiles\n        {\n            get { return resourceFiles; }\n        }\n\n        List<string> resourceFiles = new List<string>();\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MaterialContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods and properties for maintaining a collection of named texture references.\n    /// </summary>\n    /// <remarks>In addition to texture references, opaque data values are stored in the OpaqueData property of the base class.</remarks>\n    public class MaterialContent : ContentItem\n    {\n        readonly TextureReferenceDictionary _textures;\n\n        /// <summary>\n        /// Gets the texture collection of the material.\n        /// </summary>\n        /// <value>Collection of textures used by the material.</value>\n        public TextureReferenceDictionary Textures { get { return _textures; } }\n\n        /// <summary>\n        /// Initializes a new instance of MaterialContent.\n        /// </summary>\n        public MaterialContent()\n        {\n            _textures = new TextureReferenceDictionary();\n        }\n\n        /// <summary>\n        /// Gets a reference type from the OpaqueDataDictionary collection.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the related opaque data.</typeparam>\n        /// <param name=\"key\">Key of the property being retrieved.</param>\n        /// <returns>The related opaque data.</returns>\n        protected T GetReferenceTypeProperty<T>(string key) where T : class\n        {\n            object value;\n            if (OpaqueData.TryGetValue(key, out value))\n                return (T)value;\n            return default(T);\n        }\n\n        /// <summary>\n        /// Gets a value from the Textures collection.\n        /// </summary>\n        /// <param name=\"key\">Key of the texture being retrieved.</param>\n        /// <returns>Reference to a texture from the collection.</returns>\n        protected ExternalReference<TextureContent> GetTexture(string key)\n        {\n            ExternalReference<TextureContent> texture;\n            _textures.TryGetValue(key, out texture);\n            return texture;\n        }\n\n        /// <summary>\n        /// Gets a value type from the OpaqueDataDictionary collection.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the value being retrieved.</typeparam>\n        /// <param name=\"key\">Key of the value type being retrieved.</param>\n        /// <returns>Index of the value type beng retrieved.</returns>\n        protected Nullable<T> GetValueTypeProperty<T>(string key) where T : struct\n        {\n            object value;\n            if (OpaqueData.TryGetValue(key, out value))\n                return (T)value;\n            return null;\n        }\n\n        /// <summary>\n        /// Sets a value in the contained OpaqueDataDictionary object.\n        /// If null is passed, the value is removed.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the element being set.</typeparam>\n        /// <param name=\"key\">Name of the key being modified.</param>\n        /// <param name=\"value\">Value being set.</param>\n        protected void SetProperty<T>(string key, T value)\n        {\n            if (value != null)\n                OpaqueData[key] = value;\n            else\n                OpaqueData.Remove(key);\n        }\n\n        /// <summary>\n        /// Sets a value in the contained TextureReferenceDictionary object.\n        /// If null is passed, the value is removed.\n        /// </summary>\n        /// <param name=\"key\">Name of the key being modified.</param>\n        /// <param name=\"value\">Value being set.</param>\n        /// <remarks>The key value differs depending on the type of attached dictionary.\n        /// If attached to a BasicMaterialContent dictionary (which becomes a BasicEffect object at run time), the value for the Texture key is used as the texture for the BasicEffect runtime object. Other keys are ignored.\n        /// If attached to a EffectMaterialContent dictionary, key names are the texture names used by the effect. These names are dependent upon the author of the effect object.</remarks>\n        protected void SetTexture(string key, ExternalReference<TextureContent> value)\n        {\n            if (value != null)\n                _textures[key] = value;\n            else\n                _textures.Remove(key);\n        }\n\n        /// <summary>\n        /// Helper method to make a copy of a material.\n        /// </summary>\n        /// <returns>A clone of the material.</returns>\n        public MaterialContent Clone()\n        {\n            // Construct it via reflection.\n            var clone = (MaterialContent)Activator.CreateInstance(GetType());\n\n            // Give it the same identity as the original material.\n            clone.Name = Name;\n            clone.Identity = Identity;\n\n            // Just copy the opaque data and textures which should\n            // result in the same properties being set if the material\n            // is implemented correctly.\n            foreach (var pair in Textures)\n                clone.Textures.Add(pair.Key, pair.Value);            \n            foreach (var pair in OpaqueData)\n                clone.OpaqueData.Add(pair.Key, pair.Value);\n\n            return clone;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MeshBuilder.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public sealed class MeshBuilder\n    {\n        private readonly MeshContent _meshContent;\n\n        private MaterialContent _currentMaterial;\n        private OpaqueDataDictionary _currentOpaqueData;\n        private bool _geometryDirty;\n        private GeometryContent _currentGeometryContent;\n\n        private readonly List<VertexChannel> _vertexChannels;\n        private readonly List<object> _vertexChannelData;\n\n        private bool _finishedCreation;\n        private bool _finishedMesh;\n\n        /// <summary>\n        /// Gets or sets the current value for position merging of the mesh.\n        /// </summary>\n        public bool MergeDuplicatePositions { get; set; }\n\n        /// <summary>\n        /// Gets or sets the tolerance for <see cref=\"MergeDuplicatePositions\"/>.\n        /// </summary>\n        public float MergePositionTolerance { get; set; }\n\n        /// <summary>\n        /// Gets or sets the name of the current  <see cref=\"MeshContent\"/> object being processed.\n        /// </summary>\n        public string Name\n        {\n            get { return _meshContent.Name; }\n            set { _meshContent.Name = value; }\n        }\n\n        /// <summary>\n        /// Reverses the triangle winding order of the specified mesh.\n        /// </summary>\n        public bool SwapWindingOrder { get; set; }\n\n\n        private MeshBuilder(string name)\n        {\n            _meshContent = new MeshContent();\n            _vertexChannels = new List<VertexChannel>();\n            _vertexChannelData = new List<object>();\n            _currentGeometryContent = new GeometryContent();\n            _currentOpaqueData = new OpaqueDataDictionary();\n            _geometryDirty = true;\n            Name = name;\n        }\n\n        /// <summary>\n        /// Adds a vertex into the index collection.\n        /// </summary>\n        /// <param name=\"indexIntoVertexCollection\">Index of the inserted vertex, in the collection.\n        /// This corresponds to the value returned by <see cref=\"CreatePosition(float,float,float)\"/>.</param>\n        public void AddTriangleVertex(int indexIntoVertexCollection)\n        {\n            if (_finishedMesh)\n                throw new InvalidOperationException( \"This MeshBuilder can no longer be used because FinishMesh has been called.\");\n\n            _finishedCreation = true;\n\n            if (_geometryDirty)\n            {\n                _currentGeometryContent = new GeometryContent();\n                _currentGeometryContent.Material = _currentMaterial;\n                foreach (KeyValuePair<string, object> kvp in _currentOpaqueData)\n                    _currentGeometryContent.OpaqueData.Add(kvp.Key, kvp.Value);\n\n                // we have to copy our vertex channels to the new geometry\n                foreach (VertexChannel channel in _vertexChannels)\n                {\n                    _currentGeometryContent.Vertices.Channels.Add(channel.Name, channel.ElementType, null);\n                }\n                _meshContent.Geometry.Add(_currentGeometryContent);\n                _geometryDirty = false;\n\n            }\n            // Add the vertex to the mesh and then add the vertex position to the indices list\n            int pos = _currentGeometryContent.Vertices.Add(indexIntoVertexCollection);\n\n            // Then add the data for the other channels\n            for (int i = 0; i < _vertexChannels.Count; i++)\n            {\n                VertexChannel channel = _currentGeometryContent.Vertices.Channels[i];\n                object data = _vertexChannelData[i];\n                if (data == null)\n                    throw new InvalidOperationException(String.Format(\"Missing vertex channel data for channel {0}\", channel.Name));\n\n                channel.Items.Add(data);\n            }\n\n            _currentGeometryContent.Indices.Add(pos);\n        }\n\n        public int CreateVertexChannel<T>(string usage)\n        {\n            if (_finishedMesh)\n                throw new InvalidOperationException(\"This MeshBuilder can no longer be used because FinishMesh has been called.\");\n            if (_finishedCreation)\n                throw new InvalidOperationException(\"Functions starting with 'Create' must be called before calling AddTriangleVertex\");\n\n            VertexChannel<T> channel = new VertexChannel<T>(usage);\n            _vertexChannels.Add(channel);\n            _vertexChannelData.Add(default(T));\n\n            _currentGeometryContent.Vertices.Channels.Add<T>(usage, null);\n\n            return _vertexChannels.Count - 1;\n        }\n\n        /// <summary>\n        /// Inserts the specified vertex position into the vertex channel.\n        /// </summary>\n        /// <param name=\"x\">Value of the x component of the vector.</param>\n        /// <param name=\"y\">Value of the y component of the vector.</param>\n        /// <param name=\"z\">Value of the z component of the vector.</param>\n        /// <returns>Index of the inserted vertex.</returns>\n        public int CreatePosition(float x, float y, float z)\n        {\n            return CreatePosition(new Vector3(x, y, z));\n        }\n\n        /// <summary>\n        /// Inserts the specified vertex position into the vertex channel at the specified index.\n        /// </summary>\n        /// <param name=\"pos\">Value of the vertex being inserted.</param>\n        /// <returns>Index of the vertex being inserted.</returns>\n        public int CreatePosition(Vector3 pos)\n        {\n            if (_finishedMesh)\n                throw new InvalidOperationException( \"This MeshBuilder can no longer be used because FinishMesh has been called.\");\n            if (_finishedCreation)\n                throw new InvalidOperationException(\"Functions starting with 'Create' must be called before calling AddTriangleVertex\");\n\n            _meshContent.Positions.Add(pos);\n            return _meshContent.Positions.Count - 1;\n        }\n\n        /// <summary>\n        /// Ends the creation of a mesh.\n        /// </summary>\n        /// <returns>Resultant mesh.</returns>\n        public MeshContent FinishMesh()\n        {\n            if (_finishedMesh)\n                return _meshContent;\n\n            if (MergeDuplicatePositions)\n                MeshHelper.MergeDuplicatePositions(_meshContent, MergePositionTolerance);\n\n            MeshHelper.MergeDuplicateVertices(_meshContent);\n\n            MeshHelper.CalculateNormals(_meshContent, false);\n            if (SwapWindingOrder)\n                MeshHelper.SwapWindingOrder(_meshContent);\n\n            _finishedMesh = true;\n            return _meshContent;\n        }\n\n        /// <summary>\n        /// Sets the material for the next triangles.\n        /// </summary>\n        /// <param name=\"material\">Material for the next triangles.</param>\n        /// <remarks>\n        /// Sets the material for the triangles being defined next. This material\n        /// and the opaque data dictionary, set with <see cref=\"SetOpaqueData\"/>\n        /// define the <see cref=\"GeometryContent\"/>  object containing the next\n        /// triangles. When you set a new material or opaque data dictionary the\n        /// triangles you add afterwards will belong to a new\n        /// <see cref=\"GeometryContent\"/> object.\n        /// </remarks>\n        public void SetMaterial(MaterialContent material)\n        {\n            if (_currentMaterial == material)\n                return;\n\n            _currentMaterial = material;\n            _geometryDirty = true;\n        }\n\n        /// <summary>\n        /// Sets the opaque data for the next triangles.\n        /// </summary>\n        /// <param name=\"opaqueData\">Opaque data dictionary for the next triangles.</param>\n        /// <remarks>\n        /// Sets the opaque data dictionary for the triangles being defined next. This dictionary\n        /// and the material, set with <see cref=\"SetMaterial\"/>, define the <see cref=\"GeometryContent\"/>\n        /// object containing the next triangles. When you set a new material or opaque data dictionary\n        /// the triangles you add afterwards will belong to a new <see cref=\"GeometryContent\"/> object.\n        /// </remarks>\n        public void SetOpaqueData(OpaqueDataDictionary opaqueData)\n        {\n            if (_currentOpaqueData == opaqueData)\n                return;\n\n            _currentOpaqueData = opaqueData;\n            _geometryDirty = true;\n        }\n\n        /// <summary>\n        /// Sets the specified vertex data with new data.\n        /// </summary>\n        /// <param name=\"vertexDataIndex\">Index of the vertex data channel being set. This should match the index returned by CreateVertexChannel.</param>\n        /// <param name=\"channelData\">New data values for the vertex data. The data type being set must match the data type for the vertex channel specified by vertexDataIndex.</param>\n        public void SetVertexChannelData(int vertexDataIndex, object channelData)\n        {\n            if (_currentGeometryContent.Vertices.Channels[vertexDataIndex].ElementType != channelData.GetType())\n                throw new InvalidOperationException(String.Format(\"Channel {0} data has a different type from input. Expected: {1}. Actual: {2}\",\n                    vertexDataIndex, _currentGeometryContent.Vertices.Channels[vertexDataIndex].ElementType, channelData.GetType()));\n\n            _vertexChannelData[vertexDataIndex] = channelData;\n        }\n\n        /// <summary>\n        /// Initializes the creation of a mesh.\n        /// </summary>\n        /// <param name=\"name\">Name of the mesh.</param>\n        /// <returns>Object used when building the mesh.</returns>\n        public static MeshBuilder StartMesh(string name)\n        {\n            return new MeshBuilder(name);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MeshContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides properties and methods that define various aspects of a mesh.\n    /// </summary>\n    public class MeshContent : NodeContent\n    {\n        GeometryContentCollection _geometry;\n        PositionCollection _positions;\n\n        /// <summary>\n        /// Gets the list of geometry batches for the mesh.\n        /// </summary>\n        public GeometryContentCollection Geometry\n        {\n            get { return _geometry; }\n        }\n\n        /// <summary>\n        /// Gets the list of vertex position values.\n        /// </summary>\n        public PositionCollection Positions\n        {\n            get { return _positions; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of MeshContent.\n        /// </summary>\n        public MeshContent()\n        {\n            _geometry = new GeometryContentCollection(this);\n            _positions = new PositionCollection();\n        }\n\n        /// <summary>\n        /// Applies a transform directly to position and normal channels. Node transforms are unaffected.\n        /// </summary>\n        internal void TransformContents(ref Matrix xform)\n        {\n            // Transform positions\n            for (int i = 0; i < _positions.Count; i++)\n                _positions[i] = Vector3.Transform(_positions[i], xform);\n\n            // Transform all vectors too:\n            // Normals are \"tangent covectors\", which need to be transformed using the\n            // transpose of the inverse matrix!\n            Matrix inverseTranspose = Matrix.Transpose(Matrix.Invert(xform));\n            foreach (GeometryContent geometry in _geometry)\n            {\n                foreach (VertexChannel vertexChannel in geometry.Vertices.Channels)\n                {\n                    VertexChannel<Vector3> vector3Channel = vertexChannel as VertexChannel<Vector3>;\n                    if (vector3Channel == null)\n                        continue;\n\n                    if (vertexChannel.Name.StartsWith(\"Normal\")\n                    ||  vertexChannel.Name.StartsWith(\"Binormal\")\n                    ||  vertexChannel.Name.StartsWith(\"Tangent\"))\n                    {\n                        for (int i = 0; i < vector3Channel.Count; i++)\n                        {\n                            Vector3 normal = vector3Channel[i];\n                            Vector3.TransformNormal(ref normal, ref inverseTranspose, out normal);\n                            Vector3.Normalize(ref normal, out normal);\n                            vector3Channel[i] = normal;\n                        }\n                    }\n                }\n            }\n\n            // Swap winding order when faces are mirrored.\n            if (MeshHelper.IsLeftHanded(ref xform))\n                MeshHelper.SwapWindingOrder(this);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MeshHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public static class MeshHelper\n    {\n        static bool IsFinite(float v)\n        {\n            return !float.IsInfinity(v) && !float.IsNaN(v);\n        }\n\n        static bool IsFinite(this Vector3 v)\n        {\n            return IsFinite(v.X) && IsFinite(v.Y) && IsFinite(v.Z);\n        }\n\n        static bool IsNaN(this Vector3 v)\n        {\n            return float.IsNaN(v.X) || float.IsNaN(v.Y) || float.IsNaN(v.Z);\n        }\n\n        /// <summary>\n        /// Generates vertex normals by accumulation of triangle face normals.\n        /// </summary>\n        /// <param name=\"mesh\">The mesh which will receive the normals.</param>\n        /// <param name=\"overwriteExistingNormals\">Overwrite or skip over geometry with existing normals.</param>\n        /// <remarks>\n        /// This calls <see cref=\"CalculateNormals(GeometryContent, bool)\"/> to do the work.\n        /// </remarks>\n        public static void CalculateNormals(MeshContent mesh, bool overwriteExistingNormals)\n        {\n            foreach (GeometryContent geometry in mesh.Geometry)\n                CalculateNormals(geometry, overwriteExistingNormals);\n        }\n\n        /// <summary>\n        /// Generates vertex normals by accumulation of triangle face normals.\n        /// </summary>\n        /// <param name=\"geometry\">The geometry which will receive the normals.</param>\n        /// <param name=\"overwriteExistingNormals\">Overwrite or skip over geometry with existing normals.</param>\n        /// <remarks>\n        /// We use a \"Mean Weighted Equally\" method generate vertex normals from triangle \n        /// face normals.  If normal cannot be calculated from the geometry we set it to zero.\n        /// </remarks>\n        public static void CalculateNormals(GeometryContent geometry, bool overwriteExistingNormals)\n        {\n            VertexChannel<Vector3> normalsChannel;\n            // Look for an existing normals channel.\n            if (!geometry.Vertices.Channels.Contains(VertexChannelNames.Normal()))\n            {\n                // We don't have existing normals, so add a new channel.\n                normalsChannel = geometry.Vertices.Channels.Add<Vector3>(VertexChannelNames.Normal(), null);\n            }\n            else\n            {\n                // If we're not supposed to overwrite the existing\n                // normals then we're done here.\n                if (!overwriteExistingNormals)\n                    return;\n\n                normalsChannel = geometry.Vertices.Channels.Get<Vector3>(VertexChannelNames.Normal());\n            }\n\n            // Accumulate all the triangle face normals for each vertex.\n            Vector3[] normals = new Vector3[normalsChannel.Count];\n            for (int i = 0; i < geometry.Indices.Count; i += 3)\n            {\n                int ia = geometry.Indices[i + 0];\n                int ib = geometry.Indices[i + 1];\n                int ic = geometry.Indices[i + 2];\n\n                Vector3 aa = geometry.Vertices.Positions[ia];\n                Vector3 bb = geometry.Vertices.Positions[ib];\n                Vector3 cc = geometry.Vertices.Positions[ic];\n\n                Vector3 faceNormal = Vector3.Cross(cc - bb, bb - aa);\n                float len = faceNormal.Length();\n                if (len > 0.0f)\n                {\n                    faceNormal.X /= len;\n                    faceNormal.Y /= len;\n                    faceNormal.Z /= len;\n\n                    // We are using the \"Mean Weighted Equally\" method where each\n                    // face has an equal weight in the final normal calculation.\n                    //\n                    // We could maybe switch to \"Mean Weighted by Angle\" which is said\n                    // to look best in most cases, but is more expensive to calculate.\n                    //\n                    // There is also an idea of weighting by triangle area, but IMO the\n                    // triangle area doesn't always have a direct relationship to the \n                    // shape of a mesh.\n                    //\n                    // For more ideas see:\n                    //\n                    // \"A Comparison of Algorithms for Vertex Normal Computation\"\n                    // by Shuangshuang Jin, Robert R. Lewis, David West.\n                    //\n\n                    Vector3.Add(ref normals[ia], ref faceNormal, out normals[ia]);\n                    Vector3.Add(ref normals[ib], ref faceNormal, out normals[ib]);\n                    Vector3.Add(ref normals[ic], ref faceNormal, out normals[ic]);\n                }\n            }\n\n            // Normalize the gathered vertex normals.\n            for (int i = 0; i < normals.Length; i++)\n            {\n                float len = normals[i].Length();\n                if (len > 0.0f)\n                {\n                    normals[i].X /= len;\n                    normals[i].Y /= len;\n                    normals[i].Z /= len;\n                }\n                else\n                {\n                    // TODO: It would be nice to be able to log this to\n                    // the pipeline so that it can be fixed in the model.\n\n                    // TODO: We could maybe void this by a better algorithm\n                    // above for generating the normals.\n\n                    // We have a zero length normal.  You can argue that putting\n                    // anything here is better than nothing, but by leaving it to\n                    // zero it allows the caller to detect this and react to it.\n                    normals[i] = Vector3.Zero;\n                }\n\n                Debug.Assert(!normals[i].IsNaN(), \"Bad normal!\");\n                Debug.Assert(normals[i].IsFinite(), \"Bad normal!\");\n                Debug.Assert(normals[i].Length() >= 0.9999f, \"Bad normal!\");\n\n                // Set the new normals on the vertex channel.\n                normalsChannel[i] = normals[i];\n            }\n\n            return;\n        }\n\n        /// <summary>\n        /// Generate the tangents and binormals (tangent frames) for each vertex in the mesh.\n        /// </summary>\n        /// <param name=\"mesh\">The mesh which will have add tangent and binormal channels added.</param>\n        /// <param name=\"textureCoordinateChannelName\">The Vector2 texture coordinate channel used to generate tangent frames.</param>\n        /// <param name=\"tangentChannelName\"></param>\n        /// <param name=\"binormalChannelName\"></param>\n        public static void CalculateTangentFrames(MeshContent mesh, string textureCoordinateChannelName, string tangentChannelName, string binormalChannelName)\n        {\n            for (int g = 0; g < mesh.Geometry.Count; g++)\n            {\n                GeometryContent geometry = mesh.Geometry[g];\n\n                CalculateTangentFrames(geometry, textureCoordinateChannelName, tangentChannelName, binormalChannelName);\n            }\n        }\n\n        public static void CalculateTangentFrames(GeometryContent geometry, string textureCoordinateChannelName, string tangentChannelName, string binormalChannelName)\n        {\n            VertexContent verts = geometry.Vertices;\n            IndexCollection indices = geometry.Indices;\n            VertexChannelCollection channels = geometry.Vertices.Channels;\n\n            string normalChannelName = VertexChannelNames.Normal(0);\n\n            if (!channels.Contains(normalChannelName))\n                throw new InvalidContentException(\"geometry doesn't contain 'Normal0' channel.\");\n            if (!channels.Contains(textureCoordinateChannelName))\n                throw new InvalidContentException(\"geometry doesn't contain '\"+ textureCoordinateChannelName + \"' channel.\");\n\n            VertexChannel <Vector3> normals = channels.Get<Vector3>(normalChannelName);\n            VertexChannel<Vector2> uvs = channels.Get<Vector2>(textureCoordinateChannelName);\n\n            Vector3[] tangents, bitangents;\n            CalculateTangentFrames(verts.Positions, indices, normals, uvs, out tangents, out bitangents);\n\n            // All the indices are 1:1 with the others, so we \n            // can just add the new channels in place.\n\n            if (!string.IsNullOrEmpty(tangentChannelName))\n                channels.Add(tangentChannelName, tangents);\n\n            if (!string.IsNullOrEmpty(binormalChannelName))\n                channels.Add(binormalChannelName, bitangents);\n        }\n\n        public static void CalculateTangentFrames(IList<Vector3> positions,\n                                                  IList<int> indices,\n                                                  IList<Vector3> normals,\n                                                  IList<Vector2> textureCoords,\n                                                  out Vector3[] tangents,\n                                                  out Vector3[] bitangents)\n        {\n            // Lengyel, Eric. “Computing Tangent Space Basis Vectors for an Arbitrary Mesh”. \n            // Terathon Software 3D Graphics Library, 2001.\n            // http://www.terathon.com/code/tangent.html\n\n            // Hegde, Siddharth. \"Messing with Tangent Space\". Gamasutra, 2007. \n            // http://www.gamasutra.com/view/feature/129939/messing_with_tangent_space.php\n\n            int numVerts = positions.Count;\n            int numIndices = indices.Count;\n\n            Vector3[] tan1 = new Vector3[numVerts];\n            Vector3[] tan2 = new Vector3[numVerts];\n\n            for (int index = 0; index < numIndices; index += 3)\n            {\n                int i1 = indices[index + 0];\n                int i2 = indices[index + 1];\n                int i3 = indices[index + 2];\n\n                Vector2 w1 = textureCoords[i1];\n                Vector2 w2 = textureCoords[i2];\n                Vector2 w3 = textureCoords[i3];\n\n                float s1 = w2.X - w1.X;\n                float s2 = w3.X - w1.X;\n                float t1 = w2.Y - w1.Y;\n                float t2 = w3.Y - w1.Y;\n\n                float denom = s1 * t2 - s2 * t1;\n                if (Math.Abs(denom) < float.Epsilon)\n                {\n                    // The triangle UVs are zero sized one dimension.\n                    //\n                    // So we cannot calculate the vertex tangents for this\n                    // one trangle, but maybe it can with other trangles.\n                    continue;\n                }\n\n                float r = 1.0f / denom;\n                Debug.Assert(IsFinite(r), \"Bad r!\");\n\n                Vector3 v1 = positions[i1];\n                Vector3 v2 = positions[i2];\n                Vector3 v3 = positions[i3];\n\n                float x1 = v2.X - v1.X;\n                float x2 = v3.X - v1.X;\n                float y1 = v2.Y - v1.Y;\n                float y2 = v3.Y - v1.Y;\n                float z1 = v2.Z - v1.Z;\n                float z2 = v3.Z - v1.Z;\n\n                Vector3 sdir;\n                sdir.X = (t2 * x1 - t1 * x2) * r;\n                sdir.Y = (t2 * y1 - t1 * y2) * r;\n                sdir.Z = (t2 * z1 - t1 * z2) * r;\n\n                Vector3 tdir;\n                tdir.X = (s1 * x2 - s2 * x1) * r;\n                tdir.Y = (s1 * y2 - s2 * y1) * r;\n                tdir.Z = (s1 * z2 - s2 * z1) * r;\n\n                tan1[i1] += sdir;\n                Debug.Assert(tan1[i1].IsFinite(), \"Bad tan1[i1]!\");\n                tan1[i2] += sdir;\n                Debug.Assert(tan1[i2].IsFinite(), \"Bad tan1[i2]!\");\n                tan1[i3] += sdir;\n                Debug.Assert(tan1[i3].IsFinite(), \"Bad tan1[i3]!\");\n\n                tan2[i1] += tdir;\n                Debug.Assert(tan2[i1].IsFinite(), \"Bad tan2[i1]!\");\n                tan2[i2] += tdir;\n                Debug.Assert(tan2[i2].IsFinite(), \"Bad tan2[i2]!\");\n                tan2[i3] += tdir;\n                Debug.Assert(tan2[i3].IsFinite(), \"Bad tan2[i3]!\");\n            }\n\n            tangents = new Vector3[numVerts];\n            bitangents = new Vector3[numVerts];\n\n            // At this point we have all the vectors accumulated, but we need to average\n            // them all out. So we loop through all the final verts and do a Gram-Schmidt\n            // orthonormalize, then make sure they're all unit length.\n            for (int i = 0; i < numVerts; i++)\n            {\n                Vector3 n = normals[i];\n                Debug.Assert(n.IsFinite(), \"Bad normal!\");\n                Debug.Assert(n.Length() >= 0.9999f, \"Bad normal!\");\n\n                Vector3 t = tan1[i];\n                if (t.LengthSquared() < float.Epsilon)\n                {\n                    // TODO: Ideally we could spit out a warning to the\n                    // content logging here!\n\n                    // We couldn't find a good tanget for this vertex.\n                    //\n                    // Rather than set them to zero which could produce\n                    // errors in other parts of the pipeline, we just take        \n                    // a guess at something that may look ok.\n\n                    t = Vector3.Cross(n, Vector3.UnitX);\n                    if (t.LengthSquared() < float.Epsilon)\n                        t = Vector3.Cross(n, Vector3.UnitY);\n\n                    tangents[i] = Vector3.Normalize(t);\n                    bitangents[i] = Vector3.Cross(n, tangents[i]);\n                    continue;\n                }\n\n                // Gram-Schmidt orthogonalize\n                // TODO: This can be zero can cause NaNs on \n                // normalize... how do we fix this?\n                Vector3 tangent = t - n * Vector3.Dot(n, t);\n                tangent = Vector3.Normalize(tangent);\n                Debug.Assert(tangent.IsFinite(), \"Bad tangent!\");\n                tangents[i] = tangent;\n\n                // Calculate handedness\n                float w = (Vector3.Dot(Vector3.Cross(n, t), tan2[i]) < 0.0F) ? -1.0F : 1.0F;\n                Debug.Assert(IsFinite(w), \"Bad handedness!\");\n\n                // Calculate the bitangent\n                Vector3 bitangent = Vector3.Cross(n, tangent) * w;\n                Debug.Assert(bitangent.IsFinite(), \"Bad bitangent!\");\n                bitangents[i] = bitangent;\n            }\n        }\n\n        /// <summary>\n        /// Search for the root bone of the skeletion.\n        /// </summary>\n        /// <param name=\"node\">The node from which to begin the search for the skeleton.</param>\n        /// <returns>The root bone of the skeletion or null if none is found.</returns>\n        public static BoneContent FindSkeleton(NodeContent node)\n        {\n            // We should always get a node to search!\n            if (node == null)\n                throw new ArgumentNullException(\"node\");\n\n            // Search up thru the hierarchy.\n            for (; node != null; node = node.Parent)\n            {\n                // First if this node is a bone then search up for the root.\n                BoneContent root = node as BoneContent;\n                if (root != null)\n                {\n                    while (root.Parent is BoneContent)\n                        root = (BoneContent)root.Parent;\n                    return root;\n                }\n\n                // Next try searching the children for a root bone.\n                foreach (NodeContent nodeContent in node.Children)\n                {\n                    BoneContent bone = nodeContent as BoneContent;\n                    if (bone == null) \n                        continue;\n\n                    // If we found a bone\n                    if (root != null)\n                        throw new InvalidContentException(\"DuplicateSkeleton\", node.Identity);\n\n                    // This is our new root.\n                    root = bone;\n                }\n\n                // If we found a root bone then return it, else\n                // we continue the search to the node parent.\n                if (root != null)\n                    return root;\n            }\n\n            // We didn't find any bones!\n            return null;\n        }\n\n        /// <summary>\n        /// Traverses a skeleton depth-first and builds a list of its bones.\n        /// </summary>\n        public static IList<BoneContent> FlattenSkeleton(BoneContent skeleton)\n        {\n            if (skeleton == null)\n                throw new ArgumentNullException(\"skeleton\");\n\n            List<BoneContent> results = new List<BoneContent>();\n            Stack<NodeContent> work = new Stack<NodeContent>(new[] { skeleton });\n            while (work.Count > 0)\n            {\n                NodeContent top = work.Pop();\n                BoneContent bone = top as BoneContent;\n                if (bone != null)\n                    results.Add(bone);\n\n                for (int i = top.Children.Count - 1; i >= 0; i--)\n                    work.Push(top.Children[i]);\n            }\n\n            return results;\n        }\n\n        /// <summary>\n        /// Merge any positions in the <see cref=\"PositionCollection\"/> of the\n        /// specified mesh that are at a distance less than the specified tolerance\n        /// from each other.\n        /// </summary>\n        /// <param name=\"mesh\">Mesh to be processed.</param>\n        /// <param name=\"tolerance\">Tolerance value that determines how close \n        /// positions must be to each other to be merged.</param>\n        /// <remarks>\n        /// This method will also update the <see cref=\"VertexContent.PositionIndices\"/>\n        /// in the <see cref=\"GeometryContent\"/> of the specified mesh.\n        /// </remarks>\n        public static void MergeDuplicatePositions(MeshContent mesh, float tolerance)\n        {\n            if (mesh == null)\n                throw new ArgumentNullException(\"mesh\");\n\n            // TODO Improve performance with spatial partitioning scheme\n            List<IndexUpdateList> indexLists = new List<IndexUpdateList>();\n            foreach (GeometryContent geometry in mesh.Geometry)\n            {\n                IndexUpdateList list = new IndexUpdateList(geometry.Vertices.PositionIndices);\n                indexLists.Add(list);\n            }\n\n            for (int i = mesh.Positions.Count - 1; i >= 1; i--)\n            {\n                Vector3 pi = mesh.Positions[i];\n                for (int j = i - 1; j >= 0; j--)\n                {\n                    Vector3 pj = mesh.Positions[j];\n                    if (Vector3.Distance(pi, pj) <= tolerance)\n                    {\n                        foreach (IndexUpdateList list in indexLists)\n                            list.Update(i, j);\n                        mesh.Positions.RemoveAt(i);\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Merge vertices with the same <see cref=\"VertexContent.PositionIndices\"/> and\n        /// <see cref=\"VertexChannel\"/> data within the specified\n        /// <see cref=\"GeometryContent\"/>.\n        /// </summary>\n        /// <param name=\"geometry\">Geometry to be processed.</param>\n        public static void MergeDuplicateVertices(GeometryContent geometry)\n        {\n            if (geometry == null)\n                throw new ArgumentNullException(\"geometry\");\n\n            VertexContent verts = geometry.Vertices;\n            var hashMap = new Dictionary<int, List<VertexData>>();\n\n            IndexUpdateList indices = new IndexUpdateList(geometry.Indices);\n            int vIndex = 0;\n\n            for (int i = 0; i < geometry.Indices.Count; i++)\n            {\n                int iIndex = geometry.Indices[i];\n                VertexData iData = new VertexData\n                {\n                    Index = iIndex,\n                    PositionIndex = verts.PositionIndices[vIndex],\n                    ChannelData = new object[verts.Channels.Count]\n                };\n                \n                for (int channel = 0; channel < verts.Channels.Count; channel++)\n                    iData.ChannelData[channel] = verts.Channels[channel][vIndex];\n\n                int hash = iData.ComputeHash();\n\n                bool merged = false;\n                List<VertexData> candidates;\n                if (hashMap.TryGetValue(hash, out candidates))\n                {\n                    for (int candidateIndex = 0; candidateIndex < candidates.Count; candidateIndex++)\n                    {\n                        VertexData c = candidates[candidateIndex];\n                        if (!iData.ContentEquals(c))\n                            continue;\n\n                        // Match! Update the corresponding indices and remove the vertex\n                        indices.Update(iIndex, c.Index);\n                        verts.RemoveAt(vIndex);\n                        merged = true;\n                    }\n                    if (!merged)\n                        candidates.Add(iData);\n                }\n                else\n                {\n                    // no vertices with the same hash yet, create a new list for the data\n                    hashMap.Add(hash, new List<VertexData> { iData });\n                }\n\n                if (!merged)\n                    vIndex++;\n            }\n\n            // update the indices because of the vertices we removed\n            indices.Pack();\n        }\n\n        /// <summary>\n        /// Merge vertices with the same <see cref=\"VertexContent.PositionIndices\"/> and\n        /// <see cref=\"VertexChannel\"/> data within the <see cref=\"MeshContent.Geometry\"/>\n        /// of this mesh. If you want to merge positions too, call \n        /// <see cref=\"MergeDuplicatePositions\"/> on your mesh before this function.\n        /// </summary>\n        /// <param name=\"mesh\">Mesh to be processed</param>\n        public static void MergeDuplicateVertices(MeshContent mesh)\n        {\n            if (mesh == null)\n                throw new ArgumentNullException(\"mesh\");\n\n            foreach (GeometryContent geometry in mesh.Geometry)\n                MergeDuplicateVertices(geometry);\n        }\n\n        public static void OptimizeForCache(MeshContent mesh)\n        {\n            // We don't throw here as non-optimized still works.\n        }\n        \n        /// <summary>\n        /// Reverses the triangle winding order of the mesh.\n        /// </summary>\n        /// <param name=\"mesh\">The mesh which will be modified.</param>\n        /// <remarks>\n        /// This method is useful when changing the direction of backface culling\n        /// like when switching between left/right handed coordinate systems.\n        /// </remarks>\n        public static void SwapWindingOrder(MeshContent mesh)\n        {\n            // Gotta have a mesh to run!\n            if (mesh == null)\n                throw new ArgumentNullException(\"mesh\");\n\n            foreach (GeometryContent geometry in mesh.Geometry)\n            {\n                for (int i = 0; i < geometry.Indices.Count; i += 3)\n                {\n                    int first = geometry.Indices[i];\n                    int last = geometry.Indices[i+2];\n                    geometry.Indices[i] = last;\n                    geometry.Indices[i+2] = first;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Transforms the contents of a node and its descendants.\n        /// </summary>\n        /// <remarks>The node transforms themselves are unaffected.</remarks>\n        /// <param name=\"scene\">The root node of the scene to transform.</param>\n        /// <param name=\"transform\">The transform matrix to apply to the scene.</param>\n        public static void TransformScene(NodeContent scene, Matrix transform)\n        {\n            if (scene == null)\n                throw new ArgumentException(\"scene\");\n\n            // If the transformation is an identity matrix, this is a no-op and\n            // we can save ourselves a bunch of work in the first place.\n            if (transform == Matrix.Identity)\n                return;\n\n            Matrix inverseTransform = Matrix.Invert(transform);\n\n            Stack<NodeContent> work = new Stack<NodeContent>();\n            work.Push(scene);\n\n            while (work.Count > 0)\n            {\n                NodeContent node = work.Pop();\n                foreach (NodeContent child in node.Children)\n                    work.Push(child);\n\n                // Transform the mesh content.\n                MeshContent mesh = node as MeshContent;\n                if (mesh != null)\n                    mesh.TransformContents(ref transform);\n\n                // Transform local coordinate system using \"similarity transform\".\n                node.Transform = inverseTransform * node.Transform * transform;\n\n                // Transform animations.\n                foreach (AnimationContent animation in node.Animations.Values)\n                    foreach (AnimationChannel animationChannel in animation.Channels.Values)\n                        for (int i = 0; i < animationChannel.Count; i++)\n                            animationChannel[i].Transform = inverseTransform * animationChannel[i].Transform * transform;\n            }\n        }\n\n        /// <summary>\n        /// Determines whether the specified transform is left-handed.\n        /// </summary>\n        /// <param name=\"xform\">The transform.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if <paramref name=\"xform\"/> is left-handed; otherwise,\n        /// <see langword=\"false\"/> if <paramref name=\"xform\"/> is right-handed.\n        /// </returns>\n        internal static bool IsLeftHanded(ref Matrix xform)\n        {\n            // Check sign of determinant of upper-left 3x3 matrix:\n            //   positive determinant ... right-handed\n            //   negative determinant ... left-handed\n\n            // Since XNA does not have a 3x3 matrix, use the \"scalar triple product\"\n            // (see http://en.wikipedia.org/wiki/Triple_product) to calculate the\n            // determinant.\n            float d = Vector3.Dot(xform.Right, Vector3.Cross(xform.Forward, xform.Up));\n            return d < 0.0f;\n        }\n\n        #region Private helpers\n\n        private static void UpdatePositionIndices(MeshContent mesh, int from, int to)\n        {\n            foreach (GeometryContent geometry in mesh.Geometry)\n            {\n                for (int i = 0; i < geometry.Vertices.PositionIndices.Count; i++)\n                {\n                    int index = geometry.Vertices.PositionIndices[i];\n                    if (index == from)\n                        geometry.Vertices.PositionIndices[i] = to;\n                }\n            }\n        }\n\n        private class VertexData\n        {\n            public int Index;\n            public int PositionIndex;\n            public object[] ChannelData;\n\n            // Compute a hash based on PositionIndex and ChannelData\n            public int ComputeHash()\n            {\n                int hash = PositionIndex;\n                foreach (object channel in ChannelData)\n                    hash ^= channel.GetHashCode();\n\n                return hash;\n            }\n\n            // Check equality on PositionIndex and ChannelData\n            public bool ContentEquals(VertexData other)\n            {\n                if (PositionIndex != other.PositionIndex)\n                    return false;\n\n                if (ChannelData.Length != other.ChannelData.Length)\n                    return false;\n\n                for (int i = 0; i < ChannelData.Length; i++)\n                {\n                        if (!Equals(ChannelData[i], other.ChannelData[i]))\n                        return false;\n                }\n\n                return true;\n            }\n        }\n\n        // takes an IndexCollection and can efficiently update index values\n        private class IndexUpdateList\n        {\n            private readonly IList<int> _collectionToUpdate;\n            private readonly Dictionary<int, List<int>> _indexPositions;\n\n            // create the list, presort the values and compute the start positions of each value\n            public IndexUpdateList(IList<int> collectionToUpdate)\n            {\n                _collectionToUpdate = collectionToUpdate;\n                _indexPositions = new Dictionary<int, List<int>>();\n                Initialize();\n            }\n\n            private void Initialize()\n            {\n                for (int pos = 0; pos < _collectionToUpdate.Count; pos++)\n                {\n                    int v = _collectionToUpdate[pos];\n                    if (_indexPositions.ContainsKey(v))\n                        _indexPositions[v].Add(pos);\n                    else\n                        _indexPositions.Add(v, new List<int> {pos});\n                }\n            }\n\n            public void Update(int from, int to)\n            {\n                if (from == to || !_indexPositions.ContainsKey(from))\n                    return;\n\n                foreach (int pos in _indexPositions[from])\n                    _collectionToUpdate[pos] = to;\n\n                if (_indexPositions.ContainsKey(to))\n                    _indexPositions[to].AddRange(_indexPositions[from]);\n                else\n                    _indexPositions.Add(to, _indexPositions[from]);\n\n                _indexPositions.Remove(from);\n            }\n\n            // Pack all indices together starting from zero\n            // E.g. [5, 5, 3, 5, 21, 3] -> [1, 1, 0, 1, 2, 0]\n            // note that the order must be kept\n            public void Pack()\n            {\n                if (_collectionToUpdate.Count == 0)\n                    return;\n\n                SortedSet<int> sorted = new SortedSet<int>(_collectionToUpdate);\n\n                int newIndex = 0;\n                foreach (int value in sorted)\n                {\n                    foreach (int pos in _indexPositions[value])\n                        _collectionToUpdate[pos] = newIndex;\n\n                    newIndex++;\n                }\n\n            }\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MipmapChain.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods for accessing a mipmap chain.\n    /// </summary>\n    public sealed class MipmapChain : Collection<BitmapContent>\n    {\n        /// <summary>\n        /// Initializes a new instance of MipmapChain.\n        /// </summary>\n        public MipmapChain()\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of MipmapChain with the specified mipmap.\n        /// </summary>\n        /// <param name=\"bitmap\"></param>\n        public MipmapChain(BitmapContent bitmap)\n        {\n            Add(bitmap);\n        }\n\n        /// <summary>\n        /// Constructs a new mipmap chain containing the specified bitmap.\n        /// </summary>\n        /// <param name=\"bitmap\">Bitmap used for the mipmap chain.</param>\n        /// <returns>Resultant mipmap chain.</returns>\n        public static implicit operator MipmapChain(BitmapContent bitmap)\n        {\n            return new MipmapChain(bitmap);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MipmapChainCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods for maintaining a mipmap chain.\n    /// </summary>\n    public sealed class MipmapChainCollection : Collection<MipmapChain>\n    {\n        private readonly bool _fixedSize;\n\n        private const string CannotResizeError = \"Cannot resize MipmapChainCollection. This type of texture has a fixed number of faces.\";\n\n        internal MipmapChainCollection(int count, bool fixedSize)\n        {\n            for (var i = 0; i < count; i++)\n                Add(new MipmapChain());\n\n            _fixedSize = fixedSize;\n        }\n\n        protected override void ClearItems()\n        {\n            if (_fixedSize)\n                throw new NotSupportedException(CannotResizeError);\n\n            base.ClearItems();\n        }\n\n        protected override void RemoveItem(int index)\n        {\n            if (_fixedSize)\n                throw new NotSupportedException(CannotResizeError);\n\n            base.RemoveItem(index);\n        }\n\n        protected override void InsertItem(int index, MipmapChain item)\n        {\n            if (_fixedSize)\n                throw new NotSupportedException(CannotResizeError);\n\n            base.InsertItem(index, item);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/NodeContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides a base class for graphics types that define local coordinate systems.\n    /// </summary>\n    [System.Diagnostics.DebuggerDisplay(\"Node '{Name}'\")]\n    public class NodeContent : ContentItem\n    {\n        Matrix _transform;\n        NodeContent _parent;\n        NodeContentCollection _children;\n        AnimationContentDictionary _animations;\n\n        /// <summary>\n        /// Gets the value of the local Transform property, multiplied by the AbsoluteTransform of the parent.\n        /// </summary>\n        public Matrix AbsoluteTransform\n        {\n            get\n            {\n                if (_parent != null)\n                    return _transform * _parent.AbsoluteTransform;\n                return _transform;\n            }\n        }\n\n        /// <summary>\n        /// Gets the set of animations belonging to this node.\n        /// </summary>\n        public AnimationContentDictionary Animations\n        {\n            get { return _animations; }\n        }\n\n        /// <summary>\n        /// Gets the children of the NodeContent object.\n        /// </summary>\n        public NodeContentCollection Children\n        {\n            get { return _children; }\n        }\n\n        /// <summary>\n        /// Gets the parent of this NodeContent object.\n        /// </summary>\n        public NodeContent Parent\n        {\n            get { return _parent; }\n            set { _parent = value; }\n        }\n\n        /// <summary>\n        /// Gets the transform matrix of the scene.\n        /// The transform matrix defines a local coordinate system for the content in addition to any children of this object.\n        /// </summary>\n        public Matrix Transform\n        {\n            get { return _transform; }\n            set { _transform = value; }\n        }\n\n        /// <summary>\n        /// Creates an instance of NodeContent.\n        /// </summary>\n        public NodeContent()\n        {\n            _children = new NodeContentCollection(this);\n            _animations = new AnimationContentDictionary();\n            Transform = Matrix.Identity;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/NodeContentCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class NodeContentCollection : ChildCollection<NodeContent, NodeContent>\n    {\n        /// <summary>\n        /// Creates an instance of NodeContentCollection.\n        /// </summary>\n        /// <param name=\"parent\">Parent object of the child objects returned in the collection.</param>\n        internal NodeContentCollection(NodeContent parent)\n            : base(parent)\n        {\n        }\n\n        /// <summary>\n        /// Gets the parent of a child object.\n        /// </summary>\n        /// <param name=\"child\">The child of the parent being retrieved.</param>\n        /// <returns>The parent of the child object.</returns>\n        protected override NodeContent GetParent(NodeContent child)\n        {\n            return child.Parent;\n        }\n\n        /// <summary>\n        /// Modifies the value of the parent object of the specified child object.\n        /// </summary>\n        /// <param name=\"child\">The child of the parent being modified.</param>\n        /// <param name=\"parent\">The new value for the parent object.</param>\n        protected override void SetParent(NodeContent child, NodeContent parent)\n        {\n            child.Parent = parent;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PixelBitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Content.Pipeline.Utilities;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class PixelBitmapContent<T> : BitmapContent where T : struct, IEquatable<T>\n    {\n        private T[][] _pixelData;\n\n        internal SurfaceFormat _format;\n\n        public PixelBitmapContent(int width, int height)\n        {\n            if (!TryGetFormat(out _format))\n                throw new InvalidOperationException(String.Format(\"Color format \\\"{0}\\\" is not supported\",typeof(T).ToString()));\n            Height = height;\n            Width = width;\n\n            _pixelData = new T[height][];\n\n            Parallel.For(0, Height, (y) =>\n            {\n                _pixelData[y] = new T[Width];\n            });\n\n        }\n\n        public unsafe override byte[] GetPixelData()\n        {\n            int formatSize = _format.GetSize();\n            int dataSize = Width * Height * formatSize;\n            byte[] outputData = new byte[dataSize];\n\n            Parallel.For(0, Height, (y) =>\n            {\n                T[] row = _pixelData[y];\n                fixed (T* pData = &row[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n\n                    Marshal.Copy(dataPtr, outputData, (formatSize * y * Width), (Width * formatSize));\n                }\n            });\n\n            return outputData;\n        }\n\n        public unsafe override void SetPixelData(byte[] sourceData)\n        {\n            int formatSize = _format.GetSize();\n            int rowSize = Width * formatSize;\n\n            Parallel.For(0, Height, (y) =>\n            {\n                T[] row = _pixelData[y];\n                fixed (T* pData = &row[0])\n                {\n                    IntPtr dataPtr = (IntPtr)pData;\n\n                    Marshal.Copy(sourceData, (y * rowSize), dataPtr, rowSize);\n                }\n            });\n        }\n\n        public T[] GetRow(int y)\n        {\n            if (y < 0 || y >= Height)\n                throw new ArgumentOutOfRangeException(\"y\");\n\n            return _pixelData[y];\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            if (typeof(T) == typeof(Color))\n                format = SurfaceFormat.Color;\n            else if (typeof(T) == typeof(Vector2))\n                format = SurfaceFormat.Vector2;\n            else if (typeof(T) == typeof(Vector4))\n                format = SurfaceFormat.Vector4;\n\n            else if (typeof(T) == typeof(byte))\n                format = SurfaceFormat.Alpha8;\n            else if (typeof(T) == typeof(Single))\n                format = SurfaceFormat.Single;\n\n            else if (typeof(T) == typeof(Alpha8))\n                format = SurfaceFormat.Alpha8;\n            else if (typeof(T) == typeof(Bgr565))\n                format = SurfaceFormat.Bgr565;\n            else if (typeof(T) == typeof(Bgra4444))\n                format = SurfaceFormat.Bgra4444;\n            else if (typeof(T) == typeof(Bgra5551))\n                format = SurfaceFormat.Bgra5551;\n            else if (typeof(T) == typeof(Byte4))\n                format = SurfaceFormat.Color;\n\n            else if (typeof(T) == typeof(HalfSingle))\n                format = SurfaceFormat.HalfSingle;\n            else if (typeof(T) == typeof(HalfVector2))\n                format = SurfaceFormat.HalfVector2;\n            else if (typeof(T) == typeof(HalfVector4))\n                format = SurfaceFormat.HalfVector4;\n\n            else if (typeof(T) == typeof(NormalizedByte2))\n                format = SurfaceFormat.NormalizedByte2;\n            else if (typeof(T) == typeof(NormalizedByte4))\n                format = SurfaceFormat.NormalizedByte4;\n            else if (typeof(T) == typeof(NormalizedShort2))\n                format = SurfaceFormat.NormalizedByte2;\n            else if (typeof(T) == typeof(NormalizedShort4))\n                format = SurfaceFormat.NormalizedByte4;\n\n            else if (typeof(T) == typeof(Rg32))\n                format = SurfaceFormat.Rg32;\n            else if (typeof(T) == typeof(Rgba1010102))\n                format = SurfaceFormat.Rgba1010102;\n            else if (typeof(T) == typeof(Rgba64))\n                format = SurfaceFormat.Rgba64;\n\n            else\n            {\n                format = (SurfaceFormat)(int)-1;\n                return false;\n            }\n\n            return true;\n        }\n\n        public T GetPixel(int x, int y)\n        {\n            return _pixelData[y][x];\n        }\n\n        public void SetPixel(int x, int y, T value)\n        {\n            _pixelData[y][x] = value;\n        }\n\n        public void ReplaceColor(T originalColor, T newColor)\n        {\n            Parallel.For(0, Height, (y) =>\n            {\n                T[] row = _pixelData[y];\n                for (int x = 0; x < Width; x++)\n                {\n                    if (row[x].Equals(originalColor))\n                        row[x] = newColor;\n                }\n            });\n        }\n\n        protected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat sourceFormat;\n            if (!sourceBitmap.TryGetFormat(out sourceFormat))\n                return false;\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (_format == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                SetPixelData(sourceBitmap.GetPixelData());\n                return true;\n            }\n\n            // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy\n            if (!(sourceBitmap is PixelBitmapContent<Vector4>) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height)\n            {\n                try\n                {\n                    BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion);\n                    return true;\n                }\n                catch (InvalidOperationException)\n                {\n                    return false;\n                }\n            }\n\n            // Convert from a Vector4 format\n            PixelBitmapContent<Vector4> src = sourceBitmap as PixelBitmapContent<Vector4>;\n            if (default(T) is IPackedVector)\n            {\n                Parallel.For(0, sourceRegion.Height, (y) =>\n                {\n                    T pixel = default(T);\n                    IPackedVector p = (IPackedVector)pixel;\n                    Vector4[] row = src.GetRow(sourceRegion.Top + y);\n                    for (int x = 0; x < sourceRegion.Width; x++)\n                    {\n                        p.PackFromVector4(row[sourceRegion.Left + x]);\n                        pixel = (T)p;\n\n                        SetPixel(destinationRegion.Left + x, destinationRegion.Top + y,\n                                 pixel);\n                    }\n                });\n            }\n            else\n            {\n                VectorConverterEx<T> converter = new VectorConverterEx() as VectorConverterEx<T>;\n                // If no converter could be created, converting from this format is not supported\n                if (converter == null)\n                    return false;\n\n                Parallel.For(0, sourceRegion.Height, (y) =>\n                {\n                    Vector4[] row = src.GetRow(sourceRegion.Top + y);\n                    for (int x = 0; x < sourceRegion.Width; x++)\n                    {\n                        SetPixel(destinationRegion.Left + x, destinationRegion.Top + y,\n                                 converter.FromVector4(row[sourceRegion.Left + x]));\n                    }\n                });\n            }\n\n            return true;\n        }\n\n        protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat destinationFormat;\n            if (!destinationBitmap.TryGetFormat(out destinationFormat))\n                return false;\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (_format == destinationFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                destinationBitmap.SetPixelData(GetPixelData());\n                return true;\n            }\n\n            // If the destination is not Vector4 or requires resizing, send it through BitmapContent.Copy\n            if (!(destinationBitmap is PixelBitmapContent<Vector4>) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height)\n            {\n                try\n                {\n                    BitmapContent.Copy(this, sourceRegion, destinationBitmap, destinationRegion);\n                    return true;\n                }\n                catch (InvalidOperationException)\n                {\n                    return false;\n                }\n            }\n\n            // Convert to a Vector4 format\n            PixelBitmapContent<Vector4> dest = destinationBitmap as PixelBitmapContent<Vector4>;\n            if (default(T) is IPackedVector)\n            {\n                Parallel.For(0, sourceRegion.Height, (y) =>\n                {\n                    T[] row = GetRow(sourceRegion.Top + y);\n                    for (int x = 0; x < sourceRegion.Width; x++)\n                    {\n                        dest.SetPixel(destinationRegion.Left + x, destinationRegion.Top + y,\n                                      ((IPackedVector)row[sourceRegion.Left + x]).ToVector4());\n                    }\n                });\n            }\n            else\n            {\n                VectorConverterEx<T> converter = new VectorConverterEx() as VectorConverterEx<T>;\n                // If no converter could be created, converting from this format is not supported\n                if (converter == null)\n                    return false;\n\n                Parallel.For(0, sourceRegion.Height, (y) =>\n                {\n                    T[] row = GetRow(sourceRegion.Top + y);\n                    for (int x = 0; x < sourceRegion.Width; x++)\n                    {\n                        dest.SetPixel(destinationRegion.Left + x, destinationRegion.Top + y,\n                                      converter.ToVector4(row[sourceRegion.Left + x]));\n                    }\n                });\n            }\n\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PositionCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides a collection of vertex position values.\n    /// </summary>\n    public sealed class PositionCollection : Collection<Vector3>\n    {\n        /// <summary>\n        /// Initializes a new instance of PositionCollection.\n        /// </summary>\n        public PositionCollection()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcBitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing PVRTexLibNET;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public abstract class PvrtcBitmapContent : BitmapContent\n    {\n        internal byte[] _bitmapData;\n\n        public PvrtcBitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        int GetDataSize()\n        {\n            SurfaceFormat format;\n            TryGetFormat(out format);\n            switch (format)\n            {\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                    return (Math.Max(Width, 16) * Math.Max(Height, 8) * 2 + 7) / 8;\n\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                    return (Math.Max(Width, 8) * Math.Max(Height, 8) * 4 + 7) / 8;\n            }\n\n            return 0;\n        }\n\n        public override byte[] GetPixelData()\n        {\n            if (_bitmapData == null)\n                throw new InvalidOperationException(\"No data set on bitmap\");\n            var result = new byte[_bitmapData.Length];\n            Buffer.BlockCopy(_bitmapData, 0, result, 0, _bitmapData.Length);\n            return result;\n        }\n\n        public override void SetPixelData(byte[] sourceData)\n        {\n            var size = GetDataSize();\n            if (sourceData.Length != size)\n                throw new ArgumentException(\"Incorrect data size. Expected \" + size + \" bytes\");\n            if (_bitmapData == null || _bitmapData.Length != size)\n                _bitmapData = new byte[size];\n            Buffer.BlockCopy(sourceData, 0, _bitmapData, 0, size);\n        }\n\n        protected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat sourceFormat;\n            if (!sourceBitmap.TryGetFormat(out sourceFormat))\n                return false;\n\n            SurfaceFormat format;\n            TryGetFormat(out format);\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (format == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                SetPixelData(sourceBitmap.GetPixelData());\n                return true;\n            }\n\n            // Destination region copy is not yet supported\n            if (destinationRegion != new Rectangle(0, 0, Width, Height))\n                return false;\n\n            // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy\n            if (!(sourceBitmap is PixelBitmapContent<Vector4>) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height)\n            {\n                try\n                {\n                    BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion);\n                    return true;\n                }\n                catch (InvalidOperationException)\n                {\n                    return false;\n                }\n            }\n\n            PixelFormat targetFormat;\n            switch (format)\n            {\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                    targetFormat = PixelFormat.PVRTCI_2bpp_RGB;\n                    break;\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                    targetFormat = PixelFormat.PVRTCI_2bpp_RGBA;\n                    break;\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                    targetFormat = PixelFormat.PVRTCI_4bpp_RGB;\n                    break;\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                    targetFormat = PixelFormat.PVRTCI_4bpp_RGBA;\n                    break;\n                default:\n                    return false;\n            }\n\n            // Create the texture object in the PVR library\n            var sourceData = sourceBitmap.GetPixelData();\n            var rgba32F = (PixelFormat)0x2020202061626772; // static const PixelType PVRStandard32PixelType = PixelType('r', 'g', 'b', 'a', 32, 32, 32, 32);\n            using (var pvrTexture = PVRTexture.CreateTexture(sourceData, (uint)sourceBitmap.Width, (uint)sourceBitmap.Height, 1,\n                rgba32F, true, VariableType.Float, ColourSpace.lRGB))\n            {\n                // Resize the bitmap if needed\n                if ((sourceBitmap.Width != Width) || (sourceBitmap.Height != Height))\n                    pvrTexture.Resize((uint)Width, (uint)Height, 1, ResizeMode.Cubic);\n                // On Linux, anything less than CompressorQuality.PVRTCHigh crashes in libpthread.so at the end of compression\n                pvrTexture.Transcode(targetFormat, VariableType.UnsignedByte, ColourSpace.lRGB, CompressorQuality.PVRTCHigh);\n                var texDataSize = pvrTexture.GetTextureDataSize(0);\n                var texData = new byte[texDataSize];\n                pvrTexture.GetTextureData(texData, texDataSize);\n                SetPixelData(texData);\n            }\n            return true;\n        }\n\n        protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion)\n        {\n            SurfaceFormat destinationFormat;\n            if (!destinationBitmap.TryGetFormat(out destinationFormat))\n                return false;\n\n            SurfaceFormat format;\n            TryGetFormat(out format);\n\n            // A shortcut for copying the entire bitmap to another bitmap of the same type and format\n            if (format == destinationFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion)\n            {\n                destinationBitmap.SetPixelData(GetPixelData());\n                return true;\n            }\n\n            // No other support for copying from a PVR texture yet\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcRgb2BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class PvrtcRgb2BitmapContent : PvrtcBitmapContent\n    {\n        /// <summary>\n        /// Creates an instance of PvrtcRgb2BitmapContent with the specified width and height.\n        /// </summary>\n        /// <param name=\"width\">The width in pixels of the bitmap.</param>\n        /// <param name=\"height\">The height in pixels of the bitmap.</param>\n        public PvrtcRgb2BitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.RgbPvrtc2Bpp;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"PVRTC RGB 2bpp \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcRgb4BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class PvrtcRgb4BitmapContent : PvrtcBitmapContent\n    {\n        /// <summary>\n        /// Creates an instance of PvrtcRgb4BitmapContent with the specified width and height.\n        /// </summary>\n        /// <param name=\"width\">The width in pixels of the bitmap.</param>\n        /// <param name=\"height\">The height in pixels of the bitmap.</param>\n        public PvrtcRgb4BitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.RgbPvrtc4Bpp;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"PVRTC RGB 4bpp \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcRgba2BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class PvrtcRgba2BitmapContent : PvrtcBitmapContent\n    {\n        /// <summary>\n        /// Creates an instance of PvrtcRgba2BitBitmapContent with the specified width and height.\n        /// </summary>\n        /// <param name=\"width\">The width in pixels of the bitmap.</param>\n        /// <param name=\"height\">The height in pixels of the bitmap.</param>\n        public PvrtcRgba2BitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.RgbaPvrtc2Bpp;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"PVRTC RGBA 2bpp \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcRgba4BitmapContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class PvrtcRgba4BitmapContent : PvrtcBitmapContent\n    {\n        /// <summary>\n        /// Creates an instance of PvrtcRgba4BitBitmapContent with the specified width and height.\n        /// </summary>\n        /// <param name=\"width\">The width in pixels of the bitmap.</param>\n        /// <param name=\"height\">The height in pixels of the bitmap.</param>\n        public PvrtcRgba4BitmapContent(int width, int height)\n            : base(width, height)\n        {\n        }\n\n        /// <summary>\n        /// Gets the corresponding GPU texture format for the specified bitmap type.\n        /// </summary>\n        /// <param name=\"format\">Format being retrieved.</param>\n        /// <returns>The GPU texture format of the bitmap type.</returns>\n        public override bool TryGetFormat(out SurfaceFormat format)\n        {\n            format = SurfaceFormat.RgbaPvrtc4Bpp;\n            return true;\n        }\n\n        /// <summary>\n        /// Returns a string description of the bitmap.\n        /// </summary>\n        /// <returns>Description of the bitmap.</returns>\n        public override string ToString()\n        {\n            return \"PVRTC RGBA 4bpp \" + Width + \"x\" + Height;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/SkinnedMaterialContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class SkinnedMaterialContent : MaterialContent\n    {\n        public const string AlphaKey = \"Alpha\";\n        public const string DiffuseColorKey = \"DiffuseColor\";\n        public const string EmissiveColorKey = \"EmissiveColor\";\n        public const string SpecularColorKey = \"SpecularColor\";\n        public const string SpecularPowerKey = \"SpecularPower\";\n        public const string TextureKey = \"Texture\";\n        public const string WeightsPerVertexKey = \"WeightsPerVertex\";\n\n        public float? Alpha\n        {\n            get { return GetValueTypeProperty<float>(AlphaKey); }\n            set { SetProperty(AlphaKey, value); }\n        }\n\n        public Vector3? DiffuseColor\n        {\n            get { return GetValueTypeProperty<Vector3>(DiffuseColorKey); }\n            set { SetProperty(DiffuseColorKey, value); }\n        }\n\n        public Vector3? EmissiveColor\n        {\n            get { return GetValueTypeProperty<Vector3>(EmissiveColorKey); }\n            set { SetProperty(EmissiveColorKey, value); }\n        }\n\n        public Vector3? SpecularColor\n        {\n            get { return GetValueTypeProperty<Vector3>(SpecularColorKey); }\n            set { SetProperty(SpecularColorKey, value); }\n        }\n\n        public float? SpecularPower\n        {\n            get { return GetValueTypeProperty<float>(SpecularPowerKey); }\n            set { SetProperty(SpecularPowerKey, value); }\n        }\n\n        public ExternalReference<TextureContent> Texture\n        {\n            get { return GetTexture(TextureKey); }\n            set { SetTexture(TextureKey, value); }\n        }\n\n        public int? WeightsPerVertex\n        {\n            get { return GetValueTypeProperty<int>(WeightsPerVertexKey); }\n            set { SetProperty(WeightsPerVertexKey, value); }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Texture2DContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class Texture2DContent : TextureContent\n    {\n        public MipmapChain Mipmaps\n        {\n            get { return Faces[0]; }\n            set { Faces[0] = value; }\n        }\n\n        public Texture2DContent() :\n            base(new MipmapChainCollection(1, true))\n        {\n        }\n\n        public override void Validate(GraphicsProfile? targetProf)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Texture3DContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class Texture3DContent : TextureContent\n    {\n        public Texture3DContent() :\n            base(new MipmapChainCollection(0, false))\n        {\n        }\n\n        public override void Validate(GraphicsProfile? targetProf)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void GenerateMipmaps(bool overwriteExistingMipmaps)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/TextureContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides a base class for all texture objects.\n    /// </summary>\n    public abstract class TextureContent : ContentItem\n    {\n        MipmapChainCollection faces;\n\n        /// <summary>\n        /// Collection of image faces that hold a single mipmap chain for a regular 2D texture, six chains for a cube map, or an arbitrary number for volume and array textures.\n        /// </summary>\n        public MipmapChainCollection Faces\n        {\n            get\n            {\n                return faces;\n            }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of TextureContent with the specified face collection.\n        /// </summary>\n        /// <param name=\"faces\">Mipmap chain containing the face collection.</param>\n        protected TextureContent(MipmapChainCollection faces)\n        {\n            this.faces = faces;\n        }\n\n        /// <summary>\n        /// Converts all bitmaps for this texture to a different format.\n        /// </summary>\n        /// <param name=\"newBitmapType\">Type being converted to. The new type must be a subclass of BitmapContent, such as PixelBitmapContent or DxtBitmapContent.</param>\n        public void ConvertBitmapType(Type newBitmapType)\n        {\n            if (newBitmapType == null)\n                throw new ArgumentNullException(\"newBitmapType\");\n\n            if (!newBitmapType.IsSubclassOf(typeof (BitmapContent)))\n                throw new ArgumentException(string.Format(\"Type '{0}' is not a subclass of BitmapContent.\", newBitmapType));\n\n            if (newBitmapType.IsAbstract)\n                throw new ArgumentException(string.Format(\"Type '{0}' is abstract and cannot be allocated.\", newBitmapType));\n\n            if (newBitmapType.ContainsGenericParameters)\n                throw new ArgumentException(string.Format(\"Type '{0}' contains generic parameters and cannot be allocated.\", newBitmapType));\n\n            if (newBitmapType.GetConstructor(new Type[2] {typeof (int), typeof (int)}) == null)\n                throw new ArgumentException(string.Format(\"Type '{0} does not have a constructor with signature (int, int) and cannot be allocated.\",\n                                                          newBitmapType));\n\n            foreach (var mipChain in faces)\n            {\n                for (var i = 0; i < mipChain.Count; i++)\n                {\n                    var src = mipChain[i];\n                    if (src.GetType() != newBitmapType)\n                    {\n                        var dst = (BitmapContent)Activator.CreateInstance(newBitmapType, new object[] { src.Width,src.Height });\n                        BitmapContent.Copy(src, dst);\n                        mipChain[i] = dst;\n                    }\n                }\n            }\n        }        \n\n        /// <summary>\n        /// Generates a full set of mipmaps for the texture.\n        /// </summary>\n        /// <param name=\"overwriteExistingMipmaps\">true if the existing mipmap set is replaced with the new set; false otherwise.</param>\n        public virtual void GenerateMipmaps(bool overwriteExistingMipmaps)\n        {\n            // If we already have mipmaps and we're not supposed to overwrite\n            // them then return without any generation.\n            if (!overwriteExistingMipmaps && faces.Any(f => f.Count > 1))\n                return;\n\n            // Generate the mips for each face.\n            foreach (var face in faces)\n            {\n                // Remove any existing mipmaps.\n                var faceBitmap = face[0];\n                face.Clear();\n                face.Add(faceBitmap);\n                var faceType = faceBitmap.GetType();\n                int width = faceBitmap.Width;\n                int height = faceBitmap.Height;\n                while (width > 1 || height > 1)\n                {\n                    if (width > 1)\n                        width /= 2;\n                    if (height > 1)\n                        height /= 2;\n\n                    var mip = (BitmapContent)Activator.CreateInstance(faceType, new object[] { width, height });\n                    BitmapContent.Copy(faceBitmap, mip);\n                    face.Add(mip);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Verifies that all contents of this texture are present, correct and match the capabilities of the device.\n        /// </summary>\n        /// <param name=\"targetProfile\">The profile identifier that defines the capabilities of the device.</param>\n        public abstract void Validate(GraphicsProfile? targetProfile);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/TextureCubeContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public class TextureCubeContent : TextureContent\n    {\n        public TextureCubeContent() :\n            base(new MipmapChainCollection(6, true))\n        {\n        }\n\n        public override void Validate(GraphicsProfile? targetProf)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/TextureReferenceDictionary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides a collection of named references to texture files.\n    /// </summary>\n    public sealed class TextureReferenceDictionary : NamedValueDictionary<ExternalReference<TextureContent>>\n    {\n        /// <summary>\n        /// Initializes a new instance of TextureReferenceDictionary.\n        /// </summary>\n        public TextureReferenceDictionary()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VectorConverter.cs",
    "content": "﻿// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    public static class VectorConverter\n    {\n        public static bool TryGetSurfaceFormat(Type vectorType, out SurfaceFormat surfaceFormat)\n        {\n            throw new NotImplementedException();\n        }\n\n        public static bool TryGetVectorType(SurfaceFormat surfaceFormat, out Type vectorType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public static bool TryGetVectorType(VertexElementFormat vertexElementFormat, out Type vectorType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public static bool TryGetVertexElementFormat(Type vectorType, out VertexElementFormat vertexElementFormat)\n        {\n            throw new NotImplementedException();\n        }\n\n        // see: https://docs.microsoft.com/en-us/dotnet/api/system.converter-2\n        public static Converter<TInput, TOutput> GetConverter<TInput, TOutput>()\n        {\n            if (typeof(TInput) == typeof(Vector2) && typeof(TOutput) == typeof(Vector4))\n            {\n                var converter = new Converter<Vector2, Vector4>(Vector2ToVector4);\n                return (Converter<TInput, TOutput>)(object)converter;\n            }\n            if (typeof(TInput) == typeof(Vector3) && typeof(TOutput) == typeof(Vector4))\n            {\n                var converter = new Converter<Vector3, Vector4>(Vector3ToVector4);\n                return (Converter<TInput, TOutput>)(object)converter;\n            }\n            if (typeof(TInput) == typeof(Vector4) && typeof(TOutput) == typeof(Vector4))\n            {\n                var converter = new Converter<Vector4, Vector4>(Vector4ToVector4);\n                return (Converter<TInput, TOutput>)(object)converter;\n            }\n\n            if (typeof(TInput) == typeof(Vector4) && typeof(TOutput) == typeof(float))\n            {\n                var converter = new Converter<Vector4, float>(Vector4ToFloat);\n                return (Converter<TInput, TOutput>)(object)converter;\n            }\n            if (typeof(TInput) == typeof(Vector4) && typeof(TOutput) == typeof(Vector2))\n            {\n                var converter = new Converter<Vector4, Vector2>(Vector4ToVector2);\n                return (Converter<TInput, TOutput>)(object)converter;\n            }\n            if (typeof(TInput) == typeof(Vector4) && typeof(TOutput) == typeof(Vector3))\n            {\n                var converter = new Converter<Vector4, Vector3>(Vector4ToVector3);\n                return (Converter<TInput, TOutput>)(object)converter;\n            }\n\n            if (typeof(TInput) == typeof(Vector4) && typeof(TOutput).GetInterface(\"IPackedVector\") != null)\n            {\n                var converter = new Converter<Vector4, TOutput>(Vector4ToPackedVector<TOutput>);\n                return (Converter<TInput, TOutput>)(object)converter;\n            }\n\n            throw new NotImplementedException(\n                string.Format(\"TypeConverter for {0} -> {1} is not implemented.\",\n                typeof(TInput).Name, typeof(TOutput).Name));\n        }\n\n        private static Vector4 Vector2ToVector4(Vector2 value)\n        {\n            return new Vector4(value.X, value.Y, 0.0f, 0.0f);\n        }\n\n        private static Vector4 Vector3ToVector4(Vector3 value)\n        {\n            return new Vector4(value.X, value.Y, value.Z, 0.0f);\n        }\n\n        private static Vector4 Vector4ToVector4(Vector4 value)\n        {\n            return value;\n        }\n\n        private static float Vector4ToFloat(Vector4 value)\n        {\n            return value.X;\n        }\n\n        private static Vector2 Vector4ToVector2(Vector4 value)\n        {\n            return new Vector2(value.X, value.Y);\n        }\n\n        private static Vector3 Vector4ToVector3(Vector4 value)\n        {\n            return new Vector3(value.X, value.Y, value.Z);\n        }\n\n        private static TPacked Vector4ToPackedVector<TPacked>(Vector4 value)\n        {\n            var packedVec = (IPackedVector)Activator.CreateInstance(typeof(TPacked));\n            packedVec.PackFromVector4(value);\n            return (TPacked)packedVec;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexChannel.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods and properties for maintaining a vertex channel.\n    /// A vertex channel is a list of arbitrary data with one value for each vertex. Channels are stored inside a GeometryContent and identified by name.\n    /// </summary>\n    public abstract class VertexChannel : IList, ICollection, IEnumerable\n    {\n        string _name;\n\n        /// <summary>\n        /// Allows overriding classes to implement the list, and for properties/methods in this class to access it.\n        /// </summary>\n        internal abstract IList Items\n        {\n            get;\n        }\n\n        /// <summary>\n        /// Gets the number of elements in the vertex channel\n        /// </summary>\n        public int Count\n        {\n            get { return Items.Count; }\n        }\n\n        /// <summary>\n        /// Gets the type of data contained in this channel.\n        /// </summary>\n        public abstract Type ElementType { get; }\n\n        /// <summary>\n        /// Gets or sets the element at the specified index.\n        /// </summary>\n        public Object this[int index]\n        {\n            get { return Items[index]; }\n            set { Items[index] = value; }\n        }\n\n        /// <summary>\n        /// Gets the name of the vertex channel.\n        /// </summary>\n        public string Name\n        {\n            get { return _name; }\n            internal set { _name = value; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether access to the collection is synchronized (thread safe).\n        /// </summary>\n        bool ICollection.IsSynchronized\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Gets an object that can be used to synchronize access to the collection.\n        /// </summary>\n        Object ICollection.SyncRoot\n        {\n            get { return this; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether this list has a fixed size.\n        /// </summary>\n        bool IList.IsFixedSize\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether this object is read-only.\n        /// </summary>\n        bool IList.IsReadOnly\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Creates an instance of VertexChannel.\n        /// </summary>\n        /// <param name=\"name\">Name of the channel.</param>\n        internal VertexChannel(string name)\n        {\n            Name = name;\n        }\n\n        /// <summary>\n        /// Determines whether the specified element is in the channel.\n        /// </summary>\n        /// <param name=\"value\">Element being searched for.</param>\n        /// <returns>true if the element is present; false otherwise.</returns>\n        public bool Contains(Object value)\n        {\n            return Items.Contains(value);\n        }\n\n        /// <summary>\n        /// Copies the elements of the channel to an array, starting at the specified index.\n        /// </summary>\n        /// <param name=\"array\">Array that will receive the copied channel elements.</param>\n        /// <param name=\"index\">Starting index for copy operation.</param>\n        public void CopyTo(Array array, int index)\n        {\n            ((ICollection)Items).CopyTo(array, index);\n        }\n\n        /// <summary>\n        /// Gets an enumerator interface for reading channel content.\n        /// </summary>\n        /// <returns>Enumeration of the channel content.</returns>\n        public IEnumerator GetEnumerator()\n        {\n            return Items.GetEnumerator();\n        }\n\n        /// <summary>\n        /// Gets the index of the specified item.\n        /// </summary>\n        /// <param name=\"value\">Item whose index is to be retrieved.</param>\n        /// <returns>Index of specified item.</returns>\n        public int IndexOf(Object value)\n        {\n            return Items.IndexOf(value);\n        }\n\n        /// <summary>\n        /// Reads channel content and automatically converts it to the specified vector format.\n        /// </summary>\n        /// <typeparam name=\"TargetType\">Target vector format of the converted data.</typeparam>\n        /// <returns>The converted data.</returns>\n        public abstract IEnumerable<TargetType> ReadConvertedContent<TargetType>();\n\n        /// <summary>\n        /// Adds a new element to the end of the collection.\n        /// </summary>\n        /// <param name=\"value\">The element to add.</param>\n        /// <returns>Index of the element.</returns>\n        int IList.Add(Object value)\n        {\n            return Items.Add(value);\n        }\n\n        /// <summary>\n        /// Removes all elements from the collection.\n        /// </summary>\n        void IList.Clear()\n        {\n            Items.Clear();\n        }\n\n        /// <summary>\n        /// Inserts an element into the collection at the specified position.\n        /// </summary>\n        /// <param name=\"index\">Index at which to insert the element.</param>\n        /// <param name=\"value\">The element to insert.</param>\n        void IList.Insert(int index, Object value)\n        {\n            Items.Insert(index, value);\n        }\n\n        /// <summary>\n        /// Inserts the range of values from the enumerable into the channel.\n        /// </summary>\n        /// <param name=\"index\">The zero-based index at which the new elements should be inserted.</param>\n        /// <param name=\"data\">The data to insert into the channel.</param>\n        internal abstract void InsertRange(int index, IEnumerable data);\n\n        /// <summary>\n        /// Removes a specified element from the collection.\n        /// </summary>\n        /// <param name=\"value\">The element to remove.</param>\n        void IList.Remove(Object value)\n        {\n            Items.Remove(value);\n        }\n\n        /// <summary>\n        /// Removes the element at the specified index position.\n        /// </summary>\n        /// <param name=\"index\">Index of the element to remove.</param>\n        void IList.RemoveAt(int index)\n        {\n            Items.RemoveAt(index);\n        }\n\n        /// <summary>\n        /// Removes a range of values from the channel.\n        /// </summary>\n        /// <param name=\"index\">The zero-based starting index of the range of elements to remove.</param>\n        /// <param name=\"count\"> The number of elements to remove.</param>\n        internal abstract void RemoveRange(int index, int count);\n\n\n        public override string ToString()\n        {\n            return String.Format(\"{{Name:{0}, ElementType: {1}, Count: {2} }}\",\n                this.Name, this.ElementType, this.Count);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexChannelCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods and properties for managing a list of vertex data channels.\n    /// </summary>\n    public sealed class VertexChannelCollection : IList<VertexChannel>, ICollection<VertexChannel>, IEnumerable<VertexChannel>, IEnumerable\n    {\n        List<VertexChannel> _channels;\n        VertexContent _vertexContent;\n\n        /// <summary>\n        /// Gets the number of vertex channels in the collection.\n        /// </summary>\n        public int Count\n        {\n            get { return _channels.Count; }\n        }\n\n        /// <summary>\n        /// Gets or sets the vertex channel at the specified index position.\n        /// </summary>\n        public VertexChannel this[int index]\n        {\n            get { return _channels[index]; }\n            set { _channels[index] = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the vertex channel with the specified name.\n        /// </summary>\n        public VertexChannel this[string name]\n        {\n            get\n            {\n                var index = IndexOf(name);\n                if (index < 0)\n                    throw new ArgumentException(\"name\");\n                return _channels[index];\n            }\n            set\n            {\n                var index = IndexOf(name);\n                if (index < 0)\n                    throw new ArgumentException(\"name\");\n                _channels[index] = value;\n            }\n        }\n\n        /// <summary>\n        /// Determines whether the collection is read-only.\n        /// </summary>\n        bool ICollection<VertexChannel>.IsReadOnly\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Creates an instance of VertexChannelCollection.\n        /// </summary>\n        /// <param name=\"vertexContent\">The VertexContent object that owns this collection.</param>\n        internal VertexChannelCollection(VertexContent vertexContent)\n        {\n            this._vertexContent = vertexContent;\n            _channels = new List<VertexChannel>();\n             _insertOverload = GetType().GetMethods().First(m => m.Name == \"Insert\" && m.IsGenericMethodDefinition);\n        }\n\n        /// <summary>\n        /// Adds a new vertex channel to the end of the collection.\n        /// </summary>\n        /// <typeparam name=\"ElementType\">Type of the channel.</typeparam>\n        /// <param name=\"name\">Name of the new channel.</param>\n        /// <param name=\"channelData\">Initial data for the new channel. If null, the channel is filled with the default value for that type.</param>\n        /// <returns>The newly added vertex channel.</returns>\n        public VertexChannel<ElementType> Add<ElementType>(string name, IEnumerable<ElementType> channelData)\n        {\n            return Insert(_channels.Count, name, channelData);\n        }\n\n        /// <summary>\n        /// Adds a new vertex channel to the end of the collection.\n        /// </summary>\n        /// <param name=\"name\">Name of the new channel.</param>\n        /// <param name=\"elementType\">Type of data to be contained in the new channel.</param>\n        /// <param name=\"channelData\">Initial data for the new channel. If null, the channel is filled with the default value for that type.</param>\n        /// <returns>The newly added vertex channel.</returns>\n        public VertexChannel Add(string name, Type elementType, IEnumerable channelData)\n        {\n            return Insert(_channels.Count, name, elementType, channelData);\n        }\n\n        /// <summary>\n        /// Removes all vertex channels from the collection.\n        /// </summary>\n        public void Clear()\n        {\n            _channels.Clear();\n        }\n\n        /// <summary>\n        /// Determines whether the collection contains the specified vertex channel.\n        /// </summary>\n        /// <param name=\"name\">Name of the channel being searched for.</param>\n        /// <returns>true if the channel was found; false otherwise.</returns>\n        public bool Contains(string name)\n        {\n            return _channels.Exists(c => { return c.Name == name; });\n        }\n\n        /// <summary>\n        /// Determines whether the collection contains the specified vertex channel.\n        /// </summary>\n        /// <param name=\"item\">The channel being searched for.</param>\n        /// <returns>true if the channel was found; false otherwise.</returns>\n        public bool Contains(VertexChannel item)\n        {\n            return _channels.Contains(item);\n        }\n\n        /// <summary>\n        /// Converts the channel, at the specified index, to another vector format.\n        /// </summary>\n        /// <typeparam name=\"TargetType\">Type of the target format. Can be one of the following: Single, Vector2, Vector3, Vector4, IPackedVector</typeparam>\n        /// <param name=\"index\">Index of the channel to be converted.</param>\n        /// <returns>New channel in the specified format.</returns>\n        public VertexChannel<TargetType> ConvertChannelContent<TargetType>(int index)\n        {\n            if (index < 0 || index >= _channels.Count)\n                throw new ArgumentOutOfRangeException(\"index\");\n\n            // Get the channel at that index\n            VertexChannel channel = this[index];\n            // Remove it because we cannot add a new channel with the same name\n            RemoveAt(index);\n            VertexChannel<TargetType> result = null;\n            try\n            {\n                // Insert a new converted channel at the same index\n                result = Insert(index, channel.Name, channel.ReadConvertedContent<TargetType>());\n            }\n            catch\n            {\n                // If anything went wrong, put the old channel back...\n                _channels.Insert(index, channel);\n                // ...before throwing the exception again\n                throw;\n            }\n\n            // Return the new converted channel\n            return result;\n        }\n\n        /// <summary>\n        /// Converts the channel, specified by name to another vector format.\n        /// </summary>\n        /// <typeparam name=\"TargetType\">Type of the target format. Can be one of the following: Single, Vector2, Vector3, Vector4, IPackedVector</typeparam>\n        /// <param name=\"name\">Name of the channel to be converted.</param>\n        /// <returns>New channel in the specified format.</returns>\n        public VertexChannel<TargetType> ConvertChannelContent<TargetType>(string name)\n        {\n            int index = IndexOf(name);\n            if (index < 0)\n                throw new ArgumentException(\"name\");\n\n            return ConvertChannelContent<TargetType>(index);\n        }\n\n        /// <summary>\n        /// Gets the vertex channel with the specified index and content type.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of a vertex channel.</typeparam>\n        /// <param name=\"index\">Index of a vertex channel.</param>\n        /// <returns>The vertex channel.</returns>\n        public VertexChannel<T> Get<T>(int index)\n        {\n            if (index < 0 || index >= _channels.Count)\n                throw new ArgumentOutOfRangeException(\"index\");\n\n            VertexChannel channel = this[index];\n\n            // Make sure the channel type is as expected\n            if (channel.ElementType != typeof(T))\n                throw new InvalidOperationException(\"Mismatched channel type '\"+typeof(T).Name+\"' for channel[\"+index+\"] \" + channel);\n\n            return (VertexChannel<T>)channel;\n        }\n\n        /// <summary>\n        /// Gets the vertex channel with the specified name and content type.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the vertex channel.</typeparam>\n        /// <param name=\"name\">Name of a vertex channel.</param>\n        /// <returns>The vertex channel.</returns>\n        public VertexChannel<T> Get<T>(string name)\n        {\n            int index = IndexOf(name);\n            if (index < 0)\n                throw new ArgumentException(\"name\");\n\n            return Get<T>(index);\n        }\n\n        /// <summary>\n        /// Gets an enumerator that iterates through the vertex channels of a collection.\n        /// </summary>\n        /// <returns>Enumerator for the collection.</returns>\n        public IEnumerator<VertexChannel> GetEnumerator()\n        {\n            return _channels.GetEnumerator();\n        }\n\n        /// <summary>\n        /// Determines the index of a vertex channel with the specified name.\n        /// </summary>\n        /// <param name=\"name\">Name of the vertex channel being searched for.</param>\n        /// <returns>Index of the vertex channel.</returns>\n        public int IndexOf(string name)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n\n            return _channels.FindIndex((v) => v.Name == name);\n        }\n\n        /// <summary>\n        /// Determines the index of the specified vertex channel.\n        /// </summary>\n        /// <param name=\"item\">Vertex channel being searched for.</param>\n        /// <returns>Index of the vertex channel.</returns>\n        public int IndexOf(VertexChannel item)\n        {\n            if (item == null)\n                throw new ArgumentNullException(\"item\");\n\n            return _channels.IndexOf(item);\n        }\n\n        /// <summary>\n        /// Inserts a new vertex channel at the specified position.\n        /// </summary>\n        /// <typeparam name=\"ElementType\">Type of the new channel.</typeparam>\n        /// <param name=\"index\">Index for channel insertion.</param>\n        /// <param name=\"name\">Name of the new channel.</param>\n        /// <param name=\"channelData\">The new channel.</param>\n        /// <returns>The inserted vertex channel.</returns>\n        public VertexChannel<ElementType> Insert<ElementType>(int index, string name, IEnumerable<ElementType> channelData)\n        {\n            if ((index < 0) || (index > _channels.Count))\n                throw new ArgumentOutOfRangeException(\"index\");\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"name\");\n            // Don't insert a channel with the same name\n            if (IndexOf(name) >= 0)\n                throw new ArgumentException(\"Vertex channel with name \" + name + \" already exists\");\n\n            VertexChannel<ElementType> channel = new VertexChannel<ElementType>(name);\n            if (channelData != null)\n            {\n                // Insert the values from the enumerable into the channel\n                channel.InsertRange(0, channelData);\n                // Make sure we have the right number of vertices\n                if (channel.Count != _vertexContent.VertexCount)\n                    throw new ArgumentOutOfRangeException(\"channelData\");\n            }\n            else\n            {\n                // Insert enough default values to fill the channel\n                channel.InsertRange(0, new ElementType[_vertexContent.VertexCount]);\n            }\n            _channels.Insert(index, channel);\n            return channel;\n        }\n\n        // this reference the above Insert method and is initialized in the constructor\n        private readonly MethodInfo _insertOverload;\n\n        /// <summary>\n        /// Inserts a new vertex channel at the specified position.\n        /// </summary>\n        /// <param name=\"index\">Index for channel insertion.</param>\n        /// <param name=\"name\">Name of the new channel.</param>\n        /// <param name=\"elementType\">Type of the new channel.</param>\n        /// <param name=\"channelData\">Initial data for the new channel. If null, it is filled with the default value.</param>\n        /// <returns>The inserted vertex channel.</returns>\n        public VertexChannel Insert(int index, string name, Type elementType, IEnumerable channelData)\n        {\n            // Call the generic version of this method\n            return (VertexChannel) _insertOverload.MakeGenericMethod(elementType).Invoke(this, new object[] { index, name, channelData });\n        }\n\n        /// <summary>\n        /// Removes the specified vertex channel from the collection.\n        /// </summary>\n        /// <param name=\"name\">Name of the vertex channel being removed.</param>\n        /// <returns>true if the channel was removed; false otherwise.</returns>\n        public bool Remove(string name)\n        {\n            int index = IndexOf(name);\n            if (index >= 0)\n            {\n                _channels.RemoveAt(index);\n                return true;\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Removes the specified vertex channel from the collection.\n        /// </summary>\n        /// <param name=\"item\">The vertex channel being removed.</param>\n        /// <returns>true if the channel was removed; false otherwise.</returns>\n        public bool Remove(VertexChannel item)\n        {\n            return _channels.Remove(item);\n        }\n\n        /// <summary>\n        /// Removes the vertex channel at the specified index position.\n        /// </summary>\n        /// <param name=\"index\">Index of the vertex channel being removed.</param>\n        public void RemoveAt(int index)\n        {\n            _channels.RemoveAt(index);\n        }\n\n        /// <summary>\n        /// Adds a new vertex channel to the collection.\n        /// </summary>\n        /// <param name=\"item\">Vertex channel to be added.</param>\n        void ICollection<VertexChannel>.Add(VertexChannel item)\n        {\n            _channels.Add(item);\n        }\n\n        /// <summary>\n        /// Copies the elements of the collection to an array, starting at the specified index.\n        /// </summary>\n        /// <param name=\"array\">The destination array.</param>\n        /// <param name=\"arrayIndex\">The index at which to begin copying elements.</param>\n        void ICollection<VertexChannel>.CopyTo(VertexChannel[] array, int arrayIndex)\n        {\n            _channels.CopyTo(array, arrayIndex);\n        }\n\n        /// <summary>\n        /// Inserts an item at the specified index.\n        /// </summary>\n        /// <param name=\"index\">The zero-based index at which item should be inserted.</param>\n        /// <param name=\"item\">The item to insert.</param>\n        void IList<VertexChannel>.Insert(int index, VertexChannel item)\n        {\n            _channels.Insert(index, item);\n        }\n\n        /// <summary>\n        /// Returns an enumerator that iterates through a collection.\n        /// </summary>\n        /// <returns>An object that can be used to iterate through the collection.</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _channels.GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexChannelGeneric.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods and properties for maintaining a vertex channel.\n    /// This is a generic implementation of VertexChannel and, therefore, can handle strongly typed content data.\n    /// </summary>\n    public sealed class VertexChannel<T> : VertexChannel, IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable\n    {\n        List<T> _items;\n\n        /// <summary>\n        /// Gets the strongly-typed list for the base class to access.\n        /// </summary>\n        internal override IList Items\n        {\n            get { return _items; }\n        }\n\n        /// <summary>\n        /// Gets the type of data contained in this channel.\n        /// </summary>\n        public override Type ElementType\n        {\n            get { return typeof(T); }\n        }\n\n        /// <summary>\n        /// Gets or sets the element at the specified index.\n        /// </summary>\n        public new T this[int index]\n        {\n            get { return _items[index]; }\n            set { _items[index] = value; }\n        }\n\n        /// <summary>\n        /// true if this object is read-only; false otherwise.\n        /// </summary>\n        bool ICollection<T>.IsReadOnly\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Creates an instance of VertexChannel.\n        /// </summary>\n        /// <param name=\"name\">Name of the channel.</param>\n        internal VertexChannel(string name)\n            : base(name)\n        {\n            _items = new List<T>();\n        }\n\n        /// <summary>\n        /// Determines whether the specified element is in the channel.\n        /// </summary>\n        /// <param name=\"item\">Element being searched for.</param>\n        /// <returns>true if the element is present; false otherwise.</returns>\n        public bool Contains(T item)\n        {\n            return _items.Contains(item);\n        }\n\n        /// <summary>\n        /// Copies the elements of the channel to an array, starting at the specified index.\n        /// </summary>\n        /// <param name=\"array\">Array that will receive the copied channel elements.</param>\n        /// <param name=\"arrayIndex\">Starting index for copy operation.</param>\n        public void CopyTo(T[] array, int arrayIndex)\n        {\n            _items.CopyTo(array, arrayIndex);\n        }\n\n        /// <summary>\n        /// Gets an enumerator interface for reading channel content.\n        /// </summary>\n        /// <returns>Enumeration of the channel content.</returns>\n        public new IEnumerator<T> GetEnumerator()\n        {\n            return _items.GetEnumerator();\n        }\n\n        /// <summary>\n        /// Gets the index of the specified item.\n        /// </summary>\n        /// <param name=\"item\">Item whose index is to be retrieved.</param>\n        /// <returns>Index of specified item.</returns>\n        public int IndexOf(T item)\n        {\n            return _items.IndexOf(item);\n        }\n\n        /// <summary>\n        /// Inserts the range of values from the enumerable into the channel.\n        /// </summary>\n        /// <param name=\"index\">The zero-based index at which the new elements should be inserted.</param>\n        /// <param name=\"data\">The data to insert into the channel.</param>\n        internal override void InsertRange(int index, IEnumerable data)\n        {\n            if ((index < 0) || (index > _items.Count))\n                throw new ArgumentOutOfRangeException(\"index\");\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n            if (!(data is IEnumerable<T>))\n                throw new ArgumentException(\"data\");\n            _items.InsertRange(index, (IEnumerable<T>)data);\n        }\n\n        /// <summary>\n        /// Reads channel content and automatically converts it to the specified vector format.\n        /// </summary>\n        /// <typeparam name=\"TargetType\">Target vector format for the converted channel data.</typeparam>\n        /// <returns>The converted channel data.</returns>\n        public override IEnumerable<TargetType> ReadConvertedContent<TargetType>()\n        {\n            if (typeof(TargetType).IsAssignableFrom(typeof(T)))\n                return _items.Cast<TargetType>();\n\n            return Convert<TargetType>(_items);\n        }\n\n        private static IEnumerable<TargetType> Convert<TargetType>(List<T> items)\n        {\n            // The following formats are supported:\n            // - Single\n            // - Vector2 Structure\n            // - Vector3 Structure\n            // - Vector4 Structure\n            // - Any implementation of IPackedVector Interface.\n\n            Converter<T, Vector4> vconverter4 = VectorConverter.GetConverter<T, Vector4>();\n            Converter<Vector4, TargetType> converter = VectorConverter.GetConverter<Vector4, TargetType>();\n\n            foreach (T item in items)\n            {\n                Vector4 vec4 = vconverter4(item);\n                yield return (TargetType)converter(vec4);\n            }\n        }\n\n        /// <summary>\n        /// Adds a new element to the end of the collection.\n        /// </summary>\n        /// <param name=\"value\">The element to add.</param>\n        void ICollection<T>.Add(T value)\n        {\n            ((ICollection<T>)Items).Add(value);\n        }\n\n        /// <summary>\n        /// Removes all elements from the collection.\n        /// </summary>\n        void ICollection<T>.Clear()\n        {\n            Items.Clear();\n        }\n\n        /// <summary>\n        /// Removes a specified element from the collection.\n        /// </summary>\n        /// <param name=\"value\">The element to remove.</param>\n        /// <returns>true if the channel was removed; false otherwise.</returns>\n        bool ICollection<T>.Remove(T value)\n        {\n            return ((ICollection<T>)Items).Remove(value);\n        }\n\n        /// <summary>\n        /// Inserts an element into the collection at the specified position.\n        /// </summary>\n        /// <param name=\"index\">Index at which to insert the element.</param>\n        /// <param name=\"value\">The element to insert.</param>\n        void IList<T>.Insert(int index, T value)\n        {\n            Items.Insert(index, value);\n        }\n\n        /// <summary>\n        /// Removes the element at the specified index position.\n        /// </summary>\n        /// <param name=\"index\">Index of the element to remove.</param>\n        void IList<T>.RemoveAt(int index)\n        {\n            Items.RemoveAt(index);\n        }\n\n        /// <summary>\n        /// Removes a range of values from the channel.\n        /// </summary>\n        /// <param name=\"index\">The zero-based starting index of the range of elements to remove.</param>\n        /// <param name=\"count\"> The number of elements to remove.</param>\n        internal override void RemoveRange(int index, int count)\n        {\n            _items.RemoveRange(index, count);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexChannelNames.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides properties for managing a collection of vertex channel names.\n    /// </summary>\n    public static class VertexChannelNames\n    {\n        /// <summary>\n        /// A lookup for the TryDecodeUsage method.\n        /// </summary>\n        static Dictionary<string, VertexElementUsage> usages;\n\n        static VertexChannelNames()\n        {\n            // Populate the lookup for TryDecodeUsage\n            usages = new Dictionary<string, VertexElementUsage>();\n            string[] names = Enum.GetNames(typeof(VertexElementUsage));\n            Array values = Enum.GetValues(typeof(VertexElementUsage));\n            for (int i = 0; i < names.Length; ++i)\n                usages.Add(names[i], (VertexElementUsage)values.GetValue(i));\n        }\n\n        /// <summary>\n        /// Gets the name of a binormal vector channel with the specified index.\n        /// This will typically contain Vector3 data.\n        /// </summary>\n        /// <param name=\"usageIndex\">Zero-based index of the vector channel being retrieved.</param>\n        /// <returns>Name of the retrieved vector channel.</returns>\n        public static string Binormal(int usageIndex)\n        {\n            return EncodeName(VertexElementUsage.Binormal, usageIndex);\n        }\n\n        /// <summary>\n        /// Gets the name of a color channel with the specified index.\n        /// This will typically contain Vector3 data.\n        /// </summary>\n        /// <param name=\"usageIndex\">Zero-based index of the color channel being retrieved.</param>\n        /// <returns>Name of the retrieved color channel.</returns>\n        public static string Color(int usageIndex)\n        {\n            return EncodeName(VertexElementUsage.Color, usageIndex);\n        }\n\n        /// <summary>\n        /// Gets a channel base name stub from the encoded string format.\n        /// </summary>\n        /// <param name=\"encodedName\">Encoded string to be decoded.</param>\n        /// <returns>Extracted base name.</returns>\n        public static string DecodeBaseName(string encodedName)\n        {\n            if (string.IsNullOrEmpty(encodedName))\n                throw new ArgumentNullException(\"encodedName\");\n            return encodedName.TrimEnd(\"0123456789\".ToCharArray());\n        }\n\n        /// <summary>\n        /// Gets a channel usage index from the encoded format.\n        /// </summary>\n        /// <param name=\"encodedName\">Encoded name to be decoded.</param>\n        /// <returns>Resulting channel usage index.</returns>\n        public static int DecodeUsageIndex(string encodedName)\n        {\n            if (string.IsNullOrEmpty(encodedName))\n                throw new ArgumentNullException(\"encodedName\");\n            // Extract the base name\n            string baseName = DecodeBaseName(encodedName);\n            if (string.IsNullOrEmpty(baseName))\n                throw new InvalidOperationException(\"encodedName\");\n\n            // Subtract the base name from the string and convert the remainder to an integer.\n            // TryParse solves the problem when name is just 'BlendIndicies' for example, in \n            // which case we default to index 0, assuming only 1 index.\n            int index = 0;\n            int.TryParse(encodedName.Substring(baseName.Length), NumberStyles.Integer, CultureInfo.InvariantCulture, out index);\n\n            return index;\n        }\n\n        /// <summary>\n        /// Combines a channel name stub and usage index into a string name.\n        /// </summary>\n        /// <param name=\"baseName\">A channel base name stub.</param>\n        /// <param name=\"usageIndex\">A channel usage index.</param>\n        /// <returns>Resulting encoded name.</returns>\n        public static string EncodeName(string baseName, int usageIndex)\n        {\n            return baseName + usageIndex.ToString(CultureInfo.InvariantCulture);\n        }\n\n        /// <summary>\n        /// Combines a vertex declaration usage and usage index into a string name.\n        /// </summary>\n        /// <param name=\"vertexElementUsage\">A vertex declaration.</param>\n        /// <param name=\"usageIndex\">An index for the vertex declaration.</param>\n        /// <returns>Resulting encoded name.</returns>\n        public static string EncodeName(VertexElementUsage vertexElementUsage, int usageIndex)\n        {\n            return vertexElementUsage.ToString() + usageIndex.ToString(CultureInfo.InvariantCulture);\n        }\n\n        /// <summary>\n        /// Gets the name of the primary normal channel.\n        /// This will typically contain Vector3 data.\n        /// </summary>\n        /// <returns>Primary normal channel name.</returns>\n        public static string Normal()\n        {\n            return Normal(0);\n        }\n\n        /// <summary>\n        /// Gets the name of a normal channel with the specified index.\n        /// This will typically contain Vector3 data.\n        /// </summary>\n        /// <param name=\"usageIndex\">Zero-based index of the normal channel being retrieved.</param>\n        /// <returns>Normal channel at the specified index.</returns>\n        public static string Normal(int usageIndex)\n        {\n            return EncodeName(VertexElementUsage.Normal, usageIndex);\n        }\n\n        /// <summary>\n        /// Gets the name of a tangent vector channel with the specified index.\n        /// This will typically contain Vector3 data.\n        /// </summary>\n        /// <param name=\"usageIndex\">Zero-based index of the tangent vector channel being retrieved.</param>\n        /// <returns>Name of the retrieved tangent vector channel.</returns>\n        public static string Tangent(int usageIndex)\n        {\n            return EncodeName(VertexElementUsage.Tangent, usageIndex);\n        }\n\n        /// <summary>\n        /// Gets the name of a texture coordinate channel with the specified index.\n        /// This will typically contain Vector3 data.\n        /// </summary>\n        /// <param name=\"usageIndex\">Zero-based index of the texture coordinate channel being retrieved.</param>\n        /// <returns>Name of the retrieved texture coordinate channel.</returns>\n        public static string TextureCoordinate(int usageIndex)\n        {\n            return EncodeName(VertexElementUsage.TextureCoordinate, usageIndex);\n        }\n\n        /// <summary>\n        /// Gets a vertex declaration usage enumeration from the encoded string format.\n        /// </summary>\n        /// <param name=\"encodedName\">Encoded name of a vertex declaration.</param>\n        /// <param name=\"usage\">Value of the declaration usage for the vertex declaration.</param>\n        /// <returns>true if the encoded name maps to a VertexElementUsage enumeration value; false otherwise.</returns>\n        public static bool TryDecodeUsage(string encodedName, out VertexElementUsage usage)\n        {\n            if (string.IsNullOrEmpty(encodedName))\n                throw new ArgumentNullException(\"encodedName\");\n            // Extract the base name\n            string baseName = DecodeBaseName(encodedName);\n            if (string.IsNullOrEmpty(baseName))\n                throw new InvalidOperationException(\"encodedName\");\n            return usages.TryGetValue(baseName, out usage);\n        }\n\n        /// <summary>\n        /// Gets the name of the primary animation weights channel.\n        /// This will typically contain data on the bone weights for a vertex channel. For more information, see BoneWeightCollection.\n        /// </summary>\n        /// <returns>Name of the primary animation weights channel.</returns>\n        public static string Weights()\n        {\n            return Weights(0);\n        }\n\n        /// <summary>\n        /// Gets the name of an animation weights channel at the specified index.\n        /// This will typically contain data on the bone weights for a vertex channel. For more information, see BoneWeightCollection.\n        /// </summary>\n        /// <param name=\"usageIndex\">Index of the animation weight channel to be retrieved.</param>\n        /// <returns>Name of the retrieved animation weights channel.</returns>\n        public static string Weights(int usageIndex)\n        {\n            // This appears to be the odd one out that doesn't use the VertexElementUsage enum.\n            return EncodeName(\"Weights\", usageIndex);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    /// <summary>\n    /// Provides methods and properties for maintaining the vertex data of a GeometryContent.\n    /// </summary>\n    /// <remarks>This class combines a collection of arbitrarily named data channels with a list of position indices that reference the Positions collection of the parent MeshContent.</remarks>\n    public sealed class VertexContent\n    {\n        VertexChannelCollection _channels;\n        VertexChannel<int> _positionIndices;\n        IndirectPositionCollection _positions;\n\n        /// <summary>\n        /// Gets the list of named vertex data channels in the VertexContent.\n        /// </summary>\n        /// <value>Collection of vertex data channels.</value>\n        public VertexChannelCollection Channels { get { return _channels; } }\n\n        /// <summary>\n        /// Gets the list of position indices.\n        /// </summary>\n        /// <value>Position of the position index being retrieved.</value>\n        /// <remarks>This list adds a level of indirection between the actual triangle indices and the Positions member of the parent. This indirection preserves the topological vertex identity in cases where a single vertex position is used by triangles that straddle a discontinuity in some other data channel.\n        /// For example, the following code gets the position of the first vertex of the first triangle in a GeometryContent object:\n        /// parent.Positions[Vertices.PositionIndices[Indices[0]]]</remarks>\n        public VertexChannel<int> PositionIndices { get { return _positionIndices; } }\n\n        /// <summary>\n        /// Gets position data from the parent mesh object.\n        /// </summary>\n        /// <value>Collection of vertex positions for the mesh.</value>\n        /// <remarks>The collection returned from this call provides a virtualized view of the vertex positions for this batch. The collection uses the contents of the PositionIndices property to index into the parent Positions. This collection is read-only. If you need to modify any contained values, edit the PositionIndices or Positions members directly.</remarks>\n        public IndirectPositionCollection Positions { get { return _positions; } }\n\n        /// <summary>\n        /// Number of vertices for the content.\n        /// </summary>\n        /// <value>Number of vertices.</value>\n        public int VertexCount { get { return _positionIndices.Count; } }\n\n        /// <summary>\n        /// Constructs a VertexContent instance.\n        /// </summary>\n        internal VertexContent(GeometryContent geometry)\n        {\n            _positionIndices = new VertexChannel<int>(\"PositionIndices\");\n            _positions = new IndirectPositionCollection(geometry, _positionIndices);\n            _channels = new VertexChannelCollection(this);\n        }\n\n        /// <summary>\n        /// Appends a new vertex index to the end of the PositionIndices collection.\n        /// Other vertex channels will automatically be extended and the new indices populated with default values.\n        /// </summary>\n        /// <param name=\"positionIndex\">Index into the MeshContent.Positions member of the parent.</param>\n        /// <returns>Index of the new entry. This can be added to the Indices member of the parent.</returns>\n        public int Add(int positionIndex)\n        {\n            return _positionIndices.Items.Add(positionIndex);\n        }\n\n        /// <summary>\n        /// Appends multiple vertex indices to the end of the PositionIndices collection.\n        /// Other vertex channels will automatically be extended and the new indices populated with default values.\n        /// </summary>\n        /// <param name=\"positionIndexCollection\">Index into the Positions member of the parent.</param>\n        public void AddRange(IEnumerable<int> positionIndexCollection)\n        {\n            _positionIndices.InsertRange(_positionIndices.Items.Count, positionIndexCollection);\n        }\n\n        /// <summary>\n        /// Converts design-time vertex position and channel data into a vertex buffer format that a graphics device can recognize.\n        /// </summary>\n        /// <returns>A packed vertex buffer.</returns>\n        /// <exception cref=\"InvalidContentException\">One or more of the vertex channel types are invalid or an unrecognized name was passed to VertexElementUsage.</exception>\n        public VertexBufferContent CreateVertexBuffer()\n        {\n            VertexBufferContent vertexBuffer = new VertexBufferContent(_positions.Count);\n            SetupVertexDeclaration(vertexBuffer.VertexDeclaration);\n            int stride = vertexBuffer.VertexDeclaration.VertexStride.Value;\n\n            // TODO: Verify enough elements in channels to match positions?\n\n            // Write out data in an interleaved fashion each channel at a time, for example:\n            //    |------------------------------------------------------------|\n            //    |POSITION[0] | NORMAL[0]  |TEX0[0] | POSITION[1]| NORMAL[1]  |\n            //    |-----------------------------------------------|------------|\n            // #0 |111111111111|____________|________|111111111111|____________|\n            // #1 |111111111111|111111111111|________|111111111111|111111111111|\n            // #2 |111111111111|111111111111|11111111|111111111111|111111111111|\n\n            // #0: Write position vertices using stride to skip over the other channels:\n            int bufferOffset = 0;\n            vertexBuffer.Write(bufferOffset, stride, _positions);\n\n            int channelOffset = VertexBufferContent.SizeOf(typeof(Vector3));\n            foreach (VertexChannel channel in Channels)\n            {\n                // #N: Fill in the channel within each vertex\n                Type channelType = channel.ElementType;\n                vertexBuffer.Write(bufferOffset + channelOffset, stride, channelType, channel);\n                channelOffset += VertexBufferContent.SizeOf(channelType);\n            }\n\n            return vertexBuffer;\n        }\n\n        internal void SetupVertexDeclaration(VertexDeclarationContent vertexDeclaration)\n        {\n            int offset = 0;\n\n            // We always have a position channel\n            vertexDeclaration.VertexElements.Add(\n                    new VertexElement(offset, VertexElementFormat.Vector3, VertexElementUsage.Position, 0));\n            offset += VertexElementFormat.Vector3.GetSize();\n\n            // Optional channels\n            foreach (VertexChannel channel in Channels)\n            {\n                VertexElementFormat format;\n                VertexElementUsage usage;\n\n                // Try to determine the vertex format\n                if (channel.ElementType == typeof(Single))\n                    format = VertexElementFormat.Single;\n                else if (channel.ElementType == typeof(Vector2))\n                    format = VertexElementFormat.Vector2;\n                else if (channel.ElementType == typeof(Vector3))\n                    format = VertexElementFormat.Vector3;\n                else if (channel.ElementType == typeof(Vector4))\n                    format = VertexElementFormat.Vector4;\n                else if (channel.ElementType == typeof(Color))\n                    format = VertexElementFormat.Color;\n                else if (channel.ElementType == typeof(Byte4))\n                    format = VertexElementFormat.Byte4;\n                else if (channel.ElementType == typeof(Short2))\n                    format = VertexElementFormat.Short2;\n                else if (channel.ElementType == typeof(Short4))\n                    format = VertexElementFormat.Short4;\n                else if (channel.ElementType == typeof(NormalizedShort2))\n                    format = VertexElementFormat.NormalizedShort2;\n                else if (channel.ElementType == typeof(NormalizedShort4))\n                    format = VertexElementFormat.NormalizedShort4;\n                else if (channel.ElementType == typeof(HalfVector2))\n                    format = VertexElementFormat.HalfVector2;\n                else if (channel.ElementType == typeof(HalfVector4))\n                    format = VertexElementFormat.HalfVector4;\n                else\n                    throw new InvalidContentException(string.Format(\"Unrecognized vertex content type: '{0}'\", channel.ElementType));\n\n                // Try to determine the vertex usage\n                if (!VertexChannelNames.TryDecodeUsage(channel.Name, out usage))\n                    throw new InvalidContentException(string.Format(\"Unknown vertex element usage for channel '{0}'\", channel.Name));\n\n                // Try getting the usage index\n                int usageIndex = VertexChannelNames.DecodeUsageIndex(channel.Name);\n\n                vertexDeclaration.VertexElements.Add(new VertexElement(offset, format, usage, usageIndex));\n                offset += format.GetSize();\n            }\n\n            vertexDeclaration.VertexStride = offset;\n        }\n\n        /// <summary>\n        /// Inserts a new vertex index to the PositionIndices collection.\n        /// Other vertex channels will automatically be extended and the new indices populated with default values.\n        /// </summary>\n        /// <param name=\"index\">Vertex index to be inserted.</param>\n        /// <param name=\"positionIndex\">Position of new vertex index in the collection.</param>\n        public void Insert(int index, int positionIndex)\n        {\n            _positionIndices.Items.Insert(index, positionIndex);\n        }\n\n        /// <summary>\n        /// Inserts multiple vertex indices to the PositionIndices collection.\n        /// Other vertex channels will automatically be extended and the new indices populated with default values.\n        /// </summary>\n        /// <param name=\"index\">Vertex index to be inserted.</param>\n        /// <param name=\"positionIndexCollection\">Position of the first element of the inserted range in the collection.</param>\n        public void InsertRange(int index, IEnumerable<int> positionIndexCollection)\n        {\n            _positionIndices.InsertRange(index, positionIndexCollection);\n        }\n\n        /// <summary>\n        /// Removes a vertex index from the specified location in both PositionIndices and VertexChannel&lt;T&gt;.\n        /// </summary>\n        /// <param name=\"index\">Index of the vertex to be removed.</param>\n        public void RemoveAt(int index)\n        {\n            if (index < 0 || index >= VertexCount)\n                throw new ArgumentOutOfRangeException(\"index\");\n\n            _positionIndices.Items.RemoveAt(index);\n\n            foreach (VertexChannel channel in _channels)\n                channel.Items.RemoveAt(index);\n        }\n\n        /// <summary>\n        /// Removes a range of vertex indices from the specified location in both PositionIndices and VertexChannel&lt;T&gt;.\n        /// </summary>\n        /// <param name=\"index\">Index of the first vertex index to be removed.</param>\n        /// <param name=\"count\">Number of indices to remove.</param>\n        public void RemoveRange(int index, int count)\n        {\n            if (index < 0 || index >= VertexCount)\n                throw new ArgumentOutOfRangeException(\"index\");\n            if (count < 0 || (index+count) > VertexCount)\n                throw new ArgumentOutOfRangeException(\"count\");\n\n            _positionIndices.RemoveRange(index, count);\n\n            foreach (VertexChannel channel in _channels)\n                channel.RemoveRange(index, count);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/OpenAssetImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing Assimp;\nusing Assimp.Unmanaged;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Platform.Utilities;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    [ContentImporter(\n        \".dae\", // Collada\n        \".gltf\", \"glb\", // glTF\n        \".blend\", // Blender 3D\n        \".3ds\", // 3ds Max 3DS\n        \".ase\", // 3ds Max ASE\n        \".obj\", // Wavefront Object\n        \".ifc\", // Industry Foundation Classes (IFC/Step)\n        \".xgl\", \".zgl\", // XGL\n        \".ply\", // Stanford Polygon Library\n        \".dxf\", // AutoCAD DXF\n        \".lwo\", // LightWave\n        \".lws\", // LightWave Scene\n        \".lxo\", // Modo\n        \".stl\", // Stereolithography\n        \".ac\", // AC3D\n        \".ms3d\", // Milkshape 3D\n        \".cob\", \".scn\", // TrueSpace\n        \".bvh\", // Biovision BVH\n        \".csm\", // CharacterStudio Motion\n        \".irrmesh\", // Irrlicht Mesh\n        \".irr\", // Irrlicht Scene\n        \".mdl\", // Quake I, 3D GameStudio (3DGS)\n        \".md2\", // Quake II\n        \".md3\", // Quake III Mesh\n        \".pk3\", // Quake III Map/BSP\n        \".mdc\", // Return to Castle Wolfenstein\n        \".md5\", // Doom 3\n        \".smd\", \".vta\", // Valve Model \n        \".ogex\", // Open Game Engine Exchange\n        \".3d\", // Unreal\n        \".b3d\", // BlitzBasic 3D\n        \".q3d\", \".q3s\", // Quick3D\n        \".nff\", // Neutral File Format, Sense8 WorldToolKit\n        \".off\", // Object File Format\n        \".ter\", // Terragen Terrain\n        \".hmp\", // 3D GameStudio (3DGS) Terrain\n        \".ndo\", // Izware Nendo\n        DisplayName = \"Open Asset Import Library - KNI\", DefaultProcessor = \"ModelProcessor\")]\n    public class OpenAssetImporter : ContentImporter<NodeContent>\n    {\n        // Assimp has a few limitations (not all FBX files are supported):\n        // FBX files reference objects using IDs. Therefore, it is possible to resolve\n        // bones even if multiple bones/nodes have the same name. But Assimp references\n        // bones only by name!\n        // --> Limitation #1: A model cannot have more than one skeleton!\n        // --> Limitation #2: Bone names need to be unique!\n        //\n        // Bones are represented by regular nodes, but there is no flag indicating whether\n        // a node is a bone. A mesh in Assimp references deformation bones (= bones that\n        // affect vertices) by name. That means, we can identify the nodes that represent\n        // deformation bones. But there is no way to identify helper bones (= bones that \n        // belong to the skeleton, but do not affect vertices). As described in \n        // http://assimp.sourceforge.net/lib_html/data.html and \n        // http://gamedev.stackexchange.com/questions/26382/i-cant-figure-out-how-to-animate-my-loaded-model-with-assimp/26442#26442\n        // we can only guess which nodes belong to a skeleton:\n        // --> Limitation #3: The skeleton needs to be a direct child of the root node or\n        //                    the mesh node!\n        //\n        // Node.Transform is irrelevant for bones. This transform is just the pose of the\n        // bone at the time of the export. This could be one of the animation frames. It\n        // is not necessarily the bind pose (rest pose)! For example, XNA's Dude.fbx does\n        // NOT store the skeleton in bind pose.\n        // The correct transform is stored in Mesh.Bones[i].OffsetMatrix. However, this\n        // information is only available for deformation bones, not for helper bones.\n        // --> Limitation #4: The skeleton either must not contain helper bones, or it must\n        //                    be guaranteed that the skeleton is exported in bind pose!\n        //\n        // An FBX file does not directly store all animation values. In some FBX scene it\n        // is insufficient to simply read the animation data from the file. Instead, the\n        // animation properties of all relevant objects in the scene need to be evaluated.\n        // For example, some animations are the result of the current skeleton pose + the\n        // current animation. The current skeleton pose is not imported/processed by XNA.\n        // Assimp does not include an \"animation evaluater\" that automatically bakes these\n        // animations.\n        // --> Limitation #5: All bones included in an animation need to be key framed.\n        //                    (There is no automatic evaluation.)\n        //\n        // In FBX it is possible to define animations curves for some transform components\n        // (e.g. translation X and Y) and leave other components (e.g. translation Z) undefined.\n        // Assimp does not pick the right defaults for undefined components.\n        // --> Limitation #6: When scale, rotation, or translation is animated, all components\n        //                    X, Y, Z need to be key framed.\n\n        private static readonly List<VectorKey> EmptyVectorKeys = new List<VectorKey>(0);\n        private static readonly List<QuaternionKey> EmptyQuaternionKeys = new List<QuaternionKey>(0);\n\n        private readonly string _importerName;\n\n        // XNA Content importer\n        private ContentIdentity _identity;\n\n        // Assimp scene\n        private Dictionary<string, Bone> _deformationBones;     // The names of all deformation bones.\n        private Node _rootBone;                                 // The node that represents the root bone.\n        private List<Node> _bones = new List<Node>();           // All nodes attached to the root bone.\n\n\n        /// <summary>\n        /// Default constructor.\n        /// </summary>\n        public OpenAssetImporter() : this(\"OpenAssetImporter\")\n        {\n        }\n\n        internal OpenAssetImporter(string importerName)\n        {            \n            _importerName = importerName;\n        }\n\n        public override NodeContent Import(string filename, ContentImporterContext context)\n        {\n            if (filename == null)\n                throw new ArgumentNullException(\"filename\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n\n            if (CurrentPlatform.OS == OS.Linux)\n            {\n                string targetDir = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName;\n\n                try\n                {\n                    AssimpLibrary.Instance.LoadLibrary(\n                        Path.Combine(targetDir, \"libassimp.so\"),\n                        Path.Combine(targetDir, \"libassimp.so\"));\n                }\n                catch { }\n            }\n\n            _identity = new ContentIdentity(filename, _importerName);\n\n            using (AssimpContext importer = new AssimpContext())\n            {\n                // FBXPreservePivotsConfig(false) can be set to remove transformation\n                // pivots.\n                importer.SetConfig(new Assimp.Configs.FBXPreservePivotsConfig(false));\n\n                // Set flag to remove degenerate faces (points and lines).\n                // This flag is very important when PostProcessSteps.FindDegenerates is used\n                // because FindDegenerates converts degenerate triangles to points and lines!\n                importer.SetConfig(new Assimp.Configs.RemoveDegeneratePrimitivesConfig(true));\n                // Set flag to not remove small triangles when PostProcessSteps.FindDegenerates is used.\n                //importer.SetConfig(new Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig(false));\n\n                // Note about Assimp post-processing:\n                // Keep post-processing to a minimum. The ModelImporter should import\n                // the model as is. We don't want to lose any information, i.e. empty\n                // nodes shoud not be thrown away, meshes/materials should not be merged,\n                // etc. Custom model processors may depend on this information!\n                Scene aiScene = importer.ImportFile(filename,\n                    //PostProcessSteps.FindDegenerates |\n                    PostProcessSteps.FindInvalidData |\n                    PostProcessSteps.FlipUVs |              // Required for Direct3D\n                    PostProcessSteps.FlipWindingOrder |     // Required for Direct3D\n                    PostProcessSteps.JoinIdenticalVertices |\n                    PostProcessSteps.ImproveCacheLocality |\n                    PostProcessSteps.OptimizeMeshes |\n                    PostProcessSteps.Triangulate\n\n                    // Unused: \n                    //PostProcessSteps.CalculateTangentSpace\n                    //PostProcessSteps.Debone |\n                    //PostProcessSteps.FindInstances |      // No effect + slow?\n                    //PostProcessSteps.FixInFacingNormals |\n                    //PostProcessSteps.GenerateNormals |\n                    //PostProcessSteps.GenerateSmoothNormals |\n                    //PostProcessSteps.GenerateUVCoords | // Might be needed... find test case\n                    //PostProcessSteps.LimitBoneWeights |\n                    //PostProcessSteps.MakeLeftHanded |     // Not necessary, XNA is right-handed.\n                    //PostProcessSteps.OptimizeGraph |      // Will eliminate helper nodes\n                    //PostProcessSteps.PreTransformVertices |\n                    //PostProcessSteps.RemoveComponent |\n                    //PostProcessSteps.RemoveRedundantMaterials |\n                    //PostProcessSteps.SortByPrimitiveType |\n                    //PostProcessSteps.SplitByBoneCount |\n                    //PostProcessSteps.SplitLargeMeshes |\n                    //PostProcessSteps.TransformUVCoords |\n                    //PostProcessSteps.ValidateDataStructure |\n                    );\n\n                // Find _rootBone, _bones, _deformationBones.\n                FindSkeleton(aiScene);\n\n                // Create _materials.\n                List<MaterialContent> materials = ImportMaterials(aiScene.Materials);\n\n                // Create _pivots and _rootNode (incl. children).\n                NodeContent rootNode = ImportNodes(context, aiScene, materials);\n\n                // If we have a simple hierarchy and just the one mesh,\n                // we can flatten it out so the mesh is the root node.\n                //if ((rootNode is MeshContent) == false\n                //&&  rootNode.Transform == Matrix.Identity\n                //&&  rootNode.Children.Count == 1 \n                //&&  rootNode.Children[0] is MeshContent)\n                //{\n                //    Matrix absXform = rootNode.Children[0].Transform;\n                //    rootNode = rootNode.Children[0];\n                //    rootNode.Identity = _identity;\n                //    rootNode.Transform = absXform;\n                //    rootNode.Parent = null;\n                //}\n\n                // Create skeleton (incl. animations) and add to _rootNode.\n                ImportSkeleton(aiScene, rootNode);\n\n                // If we have a simple hierarchy with no bones and just the one\n                // mesh, we can flatten it out so the mesh is the root node.\n                if (rootNode.Children.Count == 1 && rootNode.Children[0] is MeshContent)\n                {\n                    Matrix absXform = rootNode.Children[0].AbsoluteTransform;\n                    rootNode = rootNode.Children[0];\n                    rootNode.Identity = _identity;\n                    rootNode.Transform = absXform;\n                }\n\n                ImportMetadata(aiScene, rootNode);\n\n                MetaTransform(rootNode);\n\n                aiScene.Clear();\n\n                return rootNode;\n            }\n        }\n\n        /// <summary>\n        /// Converts all Assimp <see cref=\"Material\"/>s to standard XNA compatible <see cref=\"MaterialContent\"/>s.\n        /// </summary>\n        private List<MaterialContent> ImportMaterials(List<Material> aiMaterials)\n        {\n            List<MaterialContent> materials = new List<MaterialContent>();\n\n            foreach (Material aiMaterial in aiMaterials)\n            {\n                // TODO: What about AlphaTestMaterialContent, DualTextureMaterialContent, \n                // EffectMaterialContent, EnvironmentMapMaterialContent, and SkinnedMaterialContent?\n\n                BasicMaterialContent material = new BasicMaterialContent();\n                material.Name = aiMaterial.Name;\n                material.Identity = _identity;\n\n                if (aiMaterial.HasTextureDiffuse)\n                    material.Texture = ImportTextureContentRef(aiMaterial.TextureDiffuse);\n\n                if (aiMaterial.HasTextureOpacity)\n                    material.Textures.Add(\"Transparency\", ImportTextureContentRef(aiMaterial.TextureOpacity));\n\n                if (aiMaterial.HasTextureSpecular)\n                    material.Textures.Add(\"Specular\", ImportTextureContentRef(aiMaterial.TextureSpecular));\n\n                if (aiMaterial.HasTextureHeight)\n                    material.Textures.Add(\"Bump\", ImportTextureContentRef(aiMaterial.TextureHeight));\n\n                if (aiMaterial.HasColorDiffuse)\n                    material.DiffuseColor = ToXna(aiMaterial.ColorDiffuse);\n\n                if (aiMaterial.HasColorEmissive)\n                    material.EmissiveColor = ToXna(aiMaterial.ColorEmissive);\n\n                if (aiMaterial.HasOpacity)\n                    material.Alpha = aiMaterial.Opacity;\n\n                if (aiMaterial.HasColorSpecular)\n                    material.SpecularColor = ToXna(aiMaterial.ColorSpecular);\n\n                if (aiMaterial.HasShininess)\n                    material.SpecularPower = aiMaterial.Shininess;\n                \n                materials.Add(material);\n            }\n\n            return materials;\n        }\n\n        private ExternalReference<TextureContent> ImportTextureContentRef(TextureSlot textureSlot, bool ext = false)\n        {\n            ExternalReference<TextureContent> texture = new ExternalReference<TextureContent>(textureSlot.FilePath, _identity);\n            texture.OpaqueData.Add(\"TextureCoordinate\", String.Format(\"TextureCoordinate{0}\", textureSlot.UVIndex));\n\n            // ext is set by ImportMaterialsEx()\n            if (ext)\n            {\n                texture.OpaqueData.Add(\"Operation\", textureSlot.Operation.ToString());\n                texture.OpaqueData.Add(\"AddressU\", textureSlot.WrapModeU.ToString());\n                texture.OpaqueData.Add(\"AddressV\", textureSlot.WrapModeV.ToString());\n                texture.OpaqueData.Add(\"Mapping\", textureSlot.Mapping.ToString());\n            }\n\n            return texture;\n        }            \n\n        /// <summary>\n        /// Returns all the Assimp <see cref=\"Material\"/> features as a <see cref=\"MaterialContent\"/>.\n        /// </summary>\n        private List<MaterialContent> ImportMaterialsExt(List<Material> aiMaterials)\n        {\n            List<MaterialContent> materials = new List<MaterialContent>();\n\n            foreach (Material aiMaterial in aiMaterials)\n            {\n                MaterialContent material = new MaterialContent();\n                material.Name = aiMaterial.Name;\n                material.Identity = _identity;\n\n                TextureSlot[] textureSlots = aiMaterial.GetAllMaterialTextures();\n                foreach (TextureSlot textureSlot in textureSlots)\n                {\n                    string name;\n\n                    // Force the XNA naming standard for diffuse textures\n                    // which allows the material to work with the stock\n                    // model processor.\n                    if (textureSlot.TextureType == TextureType.Diffuse)\n                        name = BasicMaterialContent.TextureKey;\n                    else\n                        name = textureSlot.TextureType.ToString();\n\n                    // We might have multiple textures of the same type so number\n                    // them starting with 2 like in DualTextureMaterialContent.\n                    if (textureSlot.TextureIndex > 0)\n                        name += (textureSlot.TextureIndex + 1);\n\n                    material.Textures.Add(name, ImportTextureContentRef(textureSlot, true));\n                }\n\n                if (aiMaterial.HasBlendMode)\n                    material.OpaqueData.Add(\"BlendMode\", aiMaterial.BlendMode.ToString());\n                if (aiMaterial.HasBumpScaling)\n                    material.OpaqueData.Add(\"BumpScaling\", aiMaterial.BumpScaling);\n                if (aiMaterial.HasColorAmbient)\n                    material.OpaqueData.Add(\"AmbientColor\", ToXna(aiMaterial.ColorAmbient));\n                if (aiMaterial.HasColorDiffuse)\n                    material.OpaqueData.Add(\"DiffuseColor\", ToXna(aiMaterial.ColorDiffuse));\n                if (aiMaterial.HasColorEmissive)\n                    material.OpaqueData.Add(\"EmissiveColor\", ToXna(aiMaterial.ColorEmissive));\n                if (aiMaterial.HasColorReflective)\n                    material.OpaqueData.Add(\"ReflectiveColor\", ToXna(aiMaterial.ColorReflective));\n                if (aiMaterial.HasColorSpecular)\n                    material.OpaqueData.Add(\"SpecularColor\", ToXna(aiMaterial.ColorSpecular));\n                if (aiMaterial.HasColorTransparent)\n                    material.OpaqueData.Add(\"TransparentColor\", ToXna(aiMaterial.ColorTransparent));\n                if (aiMaterial.HasOpacity)\n                    material.OpaqueData.Add(\"Opacity\", aiMaterial.Opacity);\n                if (aiMaterial.HasReflectivity)\n                    material.OpaqueData.Add(\"Reflectivity\", aiMaterial.Reflectivity);\n                if (aiMaterial.HasShadingMode)\n                    material.OpaqueData.Add(\"ShadingMode\", aiMaterial.ShadingMode.ToString());\n                if (aiMaterial.HasShininess)\n                    material.OpaqueData.Add(\"Shininess\", aiMaterial.Shininess);\n                if (aiMaterial.HasShininessStrength)\n                    material.OpaqueData.Add(\"ShininessStrength\", aiMaterial.ShininessStrength);\n                if (aiMaterial.HasTwoSided)\n                    material.OpaqueData.Add(\"TwoSided\", aiMaterial.IsTwoSided);\n                if (aiMaterial.HasWireFrame)\n                    material.OpaqueData.Add(\"WireFrame\", aiMaterial.IsWireFrameEnabled);\n\n                materials.Add(material);\n            }\n\n            return materials;\n        }\n\n        /// <summary>\n        /// Converts all Assimp nodes to XNA nodes. (Nodes representing bones are excluded!)\n        /// </summary>\n        private NodeContent ImportNodes(ContentImporterContext context, Scene aiScene, List<MaterialContent> materials)\n        {\n            NodeContent rootNode = ImportNodes(context, aiScene, aiScene.RootNode, materials, null,  null);\n            return rootNode;\n        }\n\n        /// <summary>\n        /// Converts the specified node and all descendant nodes.\n        /// </summary>\n        /// <param name=\"aiNode\">The node.</param>\n        /// <param name=\"aiParent\">The parent node. Can be <see langword=\"null\"/>.</param>\n        /// <param name=\"parent\">The <paramref name=\"aiParent\"/> node converted to XNA.</param>\n        /// <returns>The XNA <see cref=\"NodeContent\"/>.</returns>\n        /// <remarks>\n        /// It may be necessary to skip certain \"preserve pivot\" nodes in the hierarchy. The\n        /// converted node needs to be relative to <paramref name=\"aiParent\"/>, not <c>node.Parent</c>.\n        /// </remarks>\n        private NodeContent ImportNodes(ContentImporterContext context, Scene aiScene, Node aiNode, List<MaterialContent> materials, Node aiParent, NodeContent parent)\n        {\n            NodeContent node = null;\n            if (aiNode.HasMeshes)\n            {\n                MeshContent mesh = new MeshContent();\n                mesh.Name = aiNode.Name;\n                mesh.Identity = _identity;\n                mesh.Transform = ToXna(GetRelativeTransform(aiNode, aiParent));\n\n                foreach (int meshIndex in aiNode.MeshIndices)\n                {\n                    Mesh aiMesh = aiScene.Meshes[meshIndex];\n                    if (!aiMesh.HasVertices)\n                        continue;\n\n                    GeometryContent geometry = CreateGeometry(context, mesh, aiMesh, materials);\n                    mesh.Geometry.Add(geometry);\n                }\n\n                node = mesh;\n            }\n            else if (!_bones.Contains(aiNode)) // Ignore bones.\n            {\n                node = new NodeContent();\n                node.Name = aiNode.Name;\n                node.Identity = _identity;\n                node.Transform = ToXna(GetRelativeTransform(aiNode, aiParent));\n            }\n\n            if (node != null)\n            {\n                if (parent != null)\n                    parent.Children.Add(node);\n\n                // For the children, this is the new parent.\n                aiParent = aiNode;\n                parent = node;\n\n                if (aiScene.HasAnimations)\n                {\n                    foreach (Animation aiAnimation in aiScene.Animations)\n                    {\n                        AnimationContent animationContent = ImportAnimation(aiAnimation, node.Name);\n                        if (animationContent.Channels.Count > 0)\n                            node.Animations.Add(animationContent.Name, animationContent);\n                    }\n                }\n            }\n\n            Debug.Assert(parent != null);\n\n            foreach (Node aiChild in aiNode.Children)\n                ImportNodes(context, aiScene, aiChild, materials, aiParent, parent);\n\n            return node;\n        }\n\n        private GeometryContent CreateGeometry(ContentImporterContext context, MeshContent mesh, Mesh aiMesh, List<MaterialContent> materials)\n        {\n            GeometryContent geometry = new GeometryContent();\n            geometry.Identity = _identity;\n            geometry.Material = materials[aiMesh.MaterialIndex];\n\n            // Vertices\n            int baseVertex = mesh.Positions.Count;\n            foreach (Vector3D aiVert in aiMesh.Vertices)\n                mesh.Positions.Add(ToXna(aiVert));\n            geometry.Vertices.AddRange(Enumerable.Range(baseVertex, aiMesh.VertexCount));\n            geometry.Indices.AddRange(aiMesh.GetIndices());\n\n            if (aiMesh.HasBones)\n            {\n                int vertexCount = geometry.Vertices.VertexCount;\n                BoneWeightCollection[] weights = new BoneWeightCollection[vertexCount];\n                for (int vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++)\n                    weights[vertexIndex] = new BoneWeightCollection();\n\n                for (int boneIndex = 0; boneIndex < aiMesh.BoneCount; boneIndex++)\n                {\n                    Bone aiBone = aiMesh.Bones[boneIndex];\n                    for (int weightIndex = 0; weightIndex < aiBone.VertexWeights.Count; weightIndex++)\n                    {\n                        VertexWeight aiWeight = aiBone.VertexWeights[weightIndex];\n\n                        if (aiWeight.VertexID <= vertexCount)\n                            weights[aiWeight.VertexID].Add(new BoneWeight(aiBone.Name, aiWeight.Weight));\n                    }\n                }\n\n                bool missingBoneWeights = false;\n                for (int vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++)\n                {\n                    if (weights[vertexIndex].Count == 0)\n                    {\n                        // No bone weights found for vertex. Use bone 0 as fallback.\n                        missingBoneWeights = true;\n                        weights[vertexIndex].Add(new BoneWeight(aiMesh.Bones[0].Name, 1));\n                    }\n                }\n\n                if (missingBoneWeights)\n                    context.Logger.LogWarning(string.Empty, _identity, \"No bone weights found for one or more vertices of skinned mesh '{0}'.\", aiMesh.Name);\n\n                geometry.Vertices.Channels.Add(VertexChannelNames.Weights(0), weights);\n            }\n\n            // Individual channels go here\n            if (aiMesh.HasNormals)\n                geometry.Vertices.Channels.Add(VertexChannelNames.Normal(), aiMesh.Normals.Select(ToXna));\n\n            for (int i = 0; i < aiMesh.TextureCoordinateChannelCount; i++)\n                geometry.Vertices.Channels.Add(VertexChannelNames.TextureCoordinate(i), aiMesh.TextureCoordinateChannels[i].Select(ToXnaTexCoord));\n\n            for (int i = 0; i < aiMesh.VertexColorChannelCount; i++)\n                geometry.Vertices.Channels.Add(VertexChannelNames.Color(i), aiMesh.VertexColorChannels[i].Select(ToXnaColor));\n\n            return geometry;\n        }\n\n        /// <summary>\n        /// Identifies the nodes that represent bones and stores the bone offset matrices.\n        /// </summary>\n        private void FindSkeleton(Scene aiScene)\n        {\n            // See http://assimp.sourceforge.net/lib_html/data.html, section \"Bones\"\n            // and notes above.\n\n            // First, identify all deformation bones.\n            _deformationBones = FindDeformationBones(aiScene);\n            if (_deformationBones.Count == 0)\n                return;\n\n            // Walk the tree upwards to find the root bones.\n            HashSet<Node> rootBones = new HashSet<Node>();\n            foreach (string boneName in _deformationBones.Keys)\n            {\n                Node aiRootBone = FindRootBone(aiScene, boneName);\n                rootBones.Add(aiRootBone);\n            }\n\n            if (rootBones.Count > 1)\n                throw new InvalidContentException(\"Multiple skeletons found. Please ensure that the model does not contain more that one skeleton.\", _identity);\n\n            _rootBone = rootBones.First();\n\n            // Add all nodes below root bone to skeleton.\n            GetSubtree(_rootBone, _bones);\n        }\n\n        /// <summary>\n        /// Copies the current node and all descendant nodes into a list.\n        /// </summary>\n        /// <param name=\"aiNode\">The current node.</param>\n        /// <param name=\"list\">The list.</param>\n        private static void GetSubtree(Node aiNode, List<Node> list)\n        {\n            list.Add(aiNode);\n            foreach (Node aiChild in aiNode.Children)\n                GetSubtree(aiChild, list);\n        }\n\n        /// <summary>\n        /// Finds the deformation bones (= bones attached to meshes).\n        /// </summary>\n        /// <param name=\"aiScene\">The scene.</param>\n        /// <returns>A dictionary of all deformation bones and their offset matrices.</returns>\n        private static Dictionary<string, Bone> FindDeformationBones(Scene aiScene)\n        {\n            Dictionary<string, Bone> deformationBones = new Dictionary<string, Bone>();\n\n            if (aiScene.HasMeshes)\n                foreach (Mesh aiMesh in aiScene.Meshes)\n                    if (aiMesh.HasBones)\n                        foreach (Bone aiBone in aiMesh.Bones)\n                            if (!deformationBones.ContainsKey(aiBone.Name))\n                                deformationBones[aiBone.Name] = aiBone;\n\n            return deformationBones;\n        }\n\n        /// <summary>\n        /// Finds the root bone of a specific bone in the skeleton.\n        /// </summary>\n        /// <param name=\"aiScene\">The scene.</param>\n        /// <param name=\"boneName\">The name of a bone in the skeleton.</param>\n        /// <returns>The root bone.</returns>\n        private static Node FindRootBone(Scene aiScene, string boneName)\n        {\n            Debug.Assert(!string.IsNullOrEmpty(boneName));\n\n            // Start with the specified bone.\n            Node aiNode = aiScene.RootNode.FindNode(boneName);\n            Debug.Assert(aiNode != null, \"Node referenced by mesh not found in model.\");\n\n            // Walk all the way up to the scene root or the mesh node.\n            Node rootBone = aiNode;\n            while (aiNode != aiScene.RootNode && !aiNode.HasMeshes)\n            {\n                rootBone = aiNode;\n\n                aiNode = aiNode.Parent;\n            }\n\n            return rootBone;\n        }\n\n        /// <summary>\n        /// Imports the skeleton including all skeletal animations.\n        /// </summary>\n        private void ImportSkeleton(Scene aiScene, NodeContent rootNode)\n        {\n            if (_rootBone == null)\n                return;\n\n            // Convert nodes to bones and attach to root node.\n            BoneContent rootBoneContent = ImportBones(_rootBone, _rootBone.Parent, null);\n            rootNode.Children.Add(rootBoneContent);\n\n            if (!aiScene.HasAnimations)\n                return;\n\n            // Convert animations and add to root bone.\n            foreach (Animation aiAnimation in aiScene.Animations)\n            {\n                AnimationContent animationContent = ImportAnimation(aiAnimation);\n                rootBoneContent.Animations.Add(animationContent.Name, animationContent);\n            }\n        }\n\n        /// <summary>\n        /// Converts the specified node and all descendant nodes to XNA bones.\n        /// </summary>\n        /// <param name=\"aiNode\">The node.</param>\n        /// <param name=\"aiParent\">The parent node.</param>\n        /// <param name=\"parentBone\">The <paramref name=\"aiParent\"/> node converted to XNA.</param>\n        /// <returns>The XNA <see cref=\"NodeContent\"/>.</returns>\n        private BoneContent ImportBones(Node aiNode, Node aiParent, BoneContent parentBone)\n        {\n            Debug.Assert(aiNode != null);\n\n            if (_bones.Contains(aiNode))\n            {\n                // Bone\n                BoneContent bone = new BoneContent();\n                bone.Name = aiNode.Name;\n                bone.Identity = _identity;\n\n                // node.Transform is irrelevant for bones. This transform is just the\n                // pose of the node at the time of the export. This could, for example,\n                // be one of the animation frames. It is not necessarily the bind pose\n                // (rest pose)!\n                // In XNA BoneContent.Transform needs to be set to the relative bind pose\n                // matrix. The relative bind pose matrix can be derived from the OffsetMatrix\n                // which is stored in aiMesh.Bones.\n                //\n                // offsetMatrix ... Offset matrix. Transforms the mesh from local space to bone space in bind pose.\n                // bindPoseRel  ... Relative bind pose matrix. Defines the transform of a bone relative to its parent bone.\n                // bindPoseAbs  ... Absolute bind pose matrix. Defines the transform of a bone relative to world space.\n                //\n                // The offset matrix is the inverse of the absolute bind pose matrix.\n                //   offsetMatrix = inverse(bindPoseAbs)\n                //\n                // bindPoseAbs = bindPoseRel * parentBindPoseAbs\n                // => bindPoseRel = bindPoseAbs * inverse(parentBindPoseAbs)\n                //                = inverse(offsetMatrix) * parentOffsetMatrix\n\n                _deformationBones.TryGetValue(aiNode.Name, out Bone aiBone);\n                _deformationBones.TryGetValue(aiParent.Name, out Bone aiParentBone);\n\n                if (aiBone != null && aiParentBone != null)\n                {\n                    bone.Transform = Matrix.Invert(ToXna(aiBone.OffsetMatrix)) * ToXna(aiParentBone.OffsetMatrix);\n                }\n                else if (aiBone != null && aiNode == _rootBone)\n                {\n                    // The current bone is the first in the chain.\n                    // The parent offset matrix is missing. :(\n                       \n                    // --> Let's assume that parent's transform is Identity.\n                    bone.Transform = Matrix.Invert(ToXna(aiBone.OffsetMatrix));\n                }\n                else if (aiBone != null && aiParent == _rootBone)\n                {\n                    // The current bone is the second bone in the chain.\n                    // The parent offset matrix is missing. :(\n                    // --> Derive matrix from parent bone, which is the root bone.\n                    bone.Transform = Matrix.Invert(ToXna(aiBone.OffsetMatrix)) * Matrix.Invert(parentBone.Transform);\n                }\n                else\n                {\n                    // Offset matrices are not provided by Assimp. :(\n                    // Let's hope that the skeleton was exported in bind pose.\n                    // (Otherwise we are just importing garbage.)\n                    bone.Transform = ToXna(GetRelativeTransform(aiNode, aiParent));\n                }\n\n                if (parentBone != null)\n                    parentBone.Children.Add(bone);\n\n                foreach (Node aiChild in aiNode.Children)\n                    ImportBones(aiChild, aiNode, bone);\n\n                return bone;\n            }\n            else\n            {\n                foreach (Node aiChild in aiNode.Children)\n                    ImportBones(aiChild, aiParent, parentBone);\n\n                return null;\n            }\n        }\n\n        /// <summary>\n        /// Converts the specified animation to XNA.\n        /// </summary>\n        /// <param name=\"aiAnimation\">The animation.</param>\n        /// <param name=\"nodeName\">An optional filter.</param>\n        /// <returns>The animation converted to XNA.</returns>\n        private AnimationContent ImportAnimation(Animation aiAnimation, string nodeName = null)\n        {\n            AnimationContent animation = new AnimationContent();\n            animation.Name = aiAnimation.Name.Replace(\"AnimStack::\", string.Empty);\n            animation.Identity = _identity;\n            animation.Duration = TimeSpan.FromTicks((long)(aiAnimation.DurationInTicks * TimeSpan.TicksPerSecond / aiAnimation.TicksPerSecond));\n\n            // In Assimp animation channels may be split into separate channels.\n            // Group animation channels by name.\n            IEnumerable<IGrouping<string,NodeAnimationChannel>> channelGroups;\n            if (nodeName != null)\n            {\n                channelGroups = aiAnimation.NodeAnimationChannels\n                                           .Where(channel => nodeName == channel.NodeName)\n                                           .GroupBy(channel => channel.NodeName);\n            }\n            else\n            {\n                channelGroups = aiAnimation.NodeAnimationChannels\n                                           .GroupBy(channel => channel.NodeName);\n            }\n\n            foreach (IGrouping<string,NodeAnimationChannel> channelGroup in channelGroups)\n            {\n                string boneName = channelGroup.Key;\n                AnimationChannel channel = new AnimationChannel();\n\n                List<VectorKey> scaleKeys = EmptyVectorKeys;\n                List<QuaternionKey> rotationKeys = EmptyQuaternionKeys;\n                List<VectorKey> translationKeys = EmptyVectorKeys;\n\n                foreach (NodeAnimationChannel aiChannel in channelGroup)\n                {\n                    scaleKeys = aiChannel.ScalingKeys;\n                    rotationKeys = aiChannel.RotationKeys;\n                    translationKeys = aiChannel.PositionKeys;\n                }\n\n                int scaleIndex = -1;\n                int rotationIndex = -1;\n                int translationIndex = -1;\n\n                // Interpolate frames  \n                int framesPerSecond = 60;\n                double ticksPerFrame = aiAnimation.TicksPerSecond / framesPerSecond;\n                int frames = (int)Math.Ceiling(aiAnimation.DurationInTicks / ticksPerFrame);\n                for (int frame = 0; frame < frames; frame++)\n                {\n                    double time = frame * ticksPerFrame;\n\n                    Vector3? scale = null;\n                    if (scaleKeys.Count > 0)\n                    {\n                        while ((scaleIndex+1) < scaleKeys.Count &&\n                               time > scaleKeys[(scaleIndex+1)].Time)\n                            scaleIndex++;\n\n                        int scaleIndexA = scaleIndex;\n                        if (scaleIndexA == -1) // wrap scaleIndexA\n                            scaleIndexA = scaleKeys.Count-1;\n                        int scaleIndexB = Math.Min(scaleIndex+1, scaleKeys.Count-1); // (scaleIndex+1) % scaleKeys.Count;\n\n                        double scaleTimeA = scaleKeys[scaleIndexA].Time;\n                        double scaleTimeB = scaleKeys[scaleIndexB].Time;\n                        if (scaleIndexA == scaleKeys.Count-1) // wrap scaleTimeA\n                            scaleTimeA = Math.Min(0, scaleTimeA - aiAnimation.DurationInTicks);\n                        double dt = scaleTimeB - scaleTimeA;\n                        if (dt != 0)\n                        {\n                            float amount = (float)((time - scaleTimeA) / dt);\n                            Vector3 scaleA = ToXna(scaleKeys[scaleIndexA].Value);\n                            Vector3 scaleB = ToXna(scaleKeys[scaleIndexB].Value);\n                            scale = Vector3.Lerp(scaleA, scaleB, amount);\n                        }\n                        else\n                        {\n                            scale = ToXna(scaleKeys[scaleIndexB].Value);\n                        }\n                    }\n\n                    Quaternion? rotation = null;\n                    if (rotationKeys.Count > 0)\n                    {\n                        while ((rotationIndex+1) < rotationKeys.Count &&\n                               time > rotationKeys[(rotationIndex+1)].Time)\n                            rotationIndex++;\n\n                        int rotationIndexA = rotationIndex;\n                        if (rotationIndexA == -1) // wrap rotationIndexA\n                            rotationIndexA = rotationKeys.Count-1;\n                        int rotationIndexB = Math.Min(rotationIndex+1, rotationKeys.Count - 1); // (rotationIndex+1) % rotationKeys.Count;\n\n                        double rotationTimeA = rotationKeys[rotationIndexA].Time;\n                        double rotationTimeB = rotationKeys[rotationIndexB].Time;\n                        if (rotationIndexA == rotationKeys.Count-1) // wrap rotationTimeA\n                            rotationTimeA = Math.Min(0, rotationTimeA - aiAnimation.DurationInTicks);\n                        double dt = rotationTimeB - rotationTimeA;\n                        if (dt != 0)\n                        {\n                            float amount = (float)((time - rotationTimeA) / dt);\n                            Quaternion rotationA = ToXna(rotationKeys[rotationIndexA].Value);\n                            Quaternion rotationB = ToXna(rotationKeys[rotationIndexB].Value);\n                            rotation = Quaternion.Slerp(rotationA, rotationB, amount);\n                        }\n                        else\n                        {\n                            rotation = ToXna(rotationKeys[rotationIndexB].Value);\n                        }\n                    }\n\n                    Vector3? translation = null;\n                    if (translationKeys.Count > 0)\n                    {\n                        while ((translationIndex+1) < translationKeys.Count &&\n                               time > translationKeys[(translationIndex+1)].Time)\n                            translationIndex++;\n\n                        int translationIndexA = translationIndex;\n                        if (translationIndexA == -1) // wrap translationIndexA\n                            translationIndexA = translationKeys.Count-1;\n                        int translationIndexB = Math.Min(translationIndex+1, translationKeys.Count-1); // (translationIndex+1) % translationKeys.Count;\n\n                        double translationTimeA = translationKeys[translationIndexA].Time;\n                        double translationTimeB = translationKeys[translationIndexB].Time;\n                        if (translationIndexA == translationKeys.Count-1) // wrap translationTimeA\n                            translationTimeA = Math.Min(0, translationTimeA - aiAnimation.DurationInTicks);\n                        double dt = translationTimeB - translationTimeA;\n                        if (dt != 0)\n                        {\n                            float amount = (float)((time - translationTimeA) / dt);\n                            Vector3 translationA = ToXna(translationKeys[translationIndexA].Value);\n                            Vector3 translationB = ToXna(translationKeys[translationIndexB].Value);\n                            translation = Vector3.Lerp(translationA, translationB, amount);\n                        }\n                        else\n                        {\n                            translation = ToXna(translationKeys[translationIndexB].Value);\n                        }\n                    }\n\n                    // Apply transformation.\n                    Matrix transform = Matrix.Identity;\n                    if (scale.HasValue)\n                        transform *= Matrix.CreateScale(scale.Value);\n                    if (rotation.HasValue)\n                        transform *= Matrix.CreateFromQuaternion(rotation.Value);\n                    if (translation.HasValue)\n                        transform *= Matrix.CreateTranslation(translation.Value);\n\n                    long ticks = (long)(time * (TimeSpan.TicksPerSecond / aiAnimation.TicksPerSecond));\n                    channel.Add(new AnimationKeyframe(TimeSpan.FromTicks(ticks), transform));\n                }\n\n                animation.Channels[channelGroup.Key] = channel;\n            }\n\n            return animation;\n        }\n\n        /// <summary>\n        /// Gets the transform of node relative to a specific ancestor node.\n        /// </summary>\n        /// <param name=\"node\">The node.</param>\n        /// <param name=\"ancestorNode\">The ancestor node. Can be <see langword=\"null\"/>.</param>\n        /// <returns>\n        /// The relative transform. If <paramref name=\"ancestorNode\"/> is <see langword=\"null\"/> the\n        /// absolute transform of <paramref name=\"node\"/> is returned.\n        /// </returns>\n        private static Matrix4x4 GetRelativeTransform(Node node, Node ancestorNode)\n        {\n            // Get transform of node relative to ancestor.\n            Matrix4x4 transform = node.Transform;\n            for (Node parent = node.Parent; parent != ancestorNode; parent = parent.Parent)\n            {\n                if (parent == null)\n                {\n                    if (ancestorNode != null)\n                        throw new ArgumentException(String.Format(\"Node \\\"{0}\\\" is not an ancestor of \\\"{1}\\\".\", ancestorNode.Name, node.Name));\n                    break;\n                }\n\n                transform = transform * parent.Transform;\n            }\n\n            return transform;\n        }\n\n        private static void ImportMetadata(Scene _scene, NodeContent rootNode)\n        {\n            foreach (var metaDataPair in _scene.Metadata)\n            {\n                string key = \"metadata:\" + metaDataPair.Key;\n                object value = metaDataPair.Value.Data;\n\n                if (metaDataPair.Value.DataType == MetaDataType.Vector3D)\n                    value = ToXna((Vector3D)value);\n\n                rootNode.OpaqueData.Add(key, value);\n            }\n        }\n\n        private static Vector3 GetAxis(int axis)\n        {\n            switch (axis)\n            {\n                case 0: return Vector3.Right;\n                case 1: return Vector3.Up;\n                case 2: return Vector3.Forward;\n                default: throw new InvalidOperationException(\"axis\");\n            }\n        }\n\n        private static void MetaTransform(NodeContent rootNode)\n        {\n            Matrix metaTransform = Matrix.Identity;\n\n            int metaCoordAxis = rootNode.OpaqueData.GetValue<int>(\"metadata:CoordAxis\", 0);\n            int metaCoordAxisSign = rootNode.OpaqueData.GetValue<int>(\"metadata:CoordAxisSign\", 1);\n            metaTransform.Right = GetAxis(metaCoordAxis) * metaCoordAxisSign;\n\n            int metaUpAxis = rootNode.OpaqueData.GetValue<int>(\"metadata:UpAxis\", 1);\n            int metaUpAxisSign = rootNode.OpaqueData.GetValue<int>(\"metadata:UpAxisSign\", 1);\n            metaTransform.Up = GetAxis(metaUpAxis) * metaUpAxisSign;\n\n            int metaFrontAxis = rootNode.OpaqueData.GetValue<int>(\"metadata:FrontAxis\", 2);\n            int metaFrontAxisSign = rootNode.OpaqueData.GetValue<int>(\"metadata:FrontAxisSign\", 1);\n            metaTransform.Forward = GetAxis(metaFrontAxis) * metaFrontAxisSign;\n\n            float metaUnitScaleFactor = rootNode.OpaqueData.GetValue<float>(\"metadata:UnitScaleFactor\", 1f);\n            metaTransform *= Matrix.CreateScale(metaUnitScaleFactor);\n\n            MeshHelper.TransformScene(rootNode, metaTransform);\n        }\n\n        #region Conversion Helpers\n\n        [DebuggerStepThrough]\n        private static Matrix ToXna(Matrix4x4 matrix)\n        {\n            Matrix result;\n\n            result.M11 = matrix.A1;\n            result.M12 = matrix.B1;\n            result.M13 = matrix.C1;\n            result.M14 = matrix.D1;\n\n            result.M21 = matrix.A2;\n            result.M22 = matrix.B2;\n            result.M23 = matrix.C2;\n            result.M24 = matrix.D2;\n\n            result.M31 = matrix.A3;\n            result.M32 = matrix.B3;\n            result.M33 = matrix.C3;\n            result.M34 = matrix.D3;\n\n            result.M41 = matrix.A4;\n            result.M42 = matrix.B4;\n            result.M43 = matrix.C4;\n            result.M44 = matrix.D4;\n\n            return result;\n        }\n\n        [DebuggerStepThrough]\n        private static Vector2 ToXna(Vector2D vector)\n        {\n            Vector2 result;\n            result.X = vector.X;\n            result.Y = vector.Y;\n            return result;\n        }\n\n        [DebuggerStepThrough]\n        private static Vector3 ToXna(Vector3D vector)\n        {\n            Vector3 result;\n            result.X = vector.X;\n            result.Y = vector.Y;\n            result.Z = vector.Z;\n            return result;\n        }\n\n        [DebuggerStepThrough]\n        private static Quaternion ToXna(Assimp.Quaternion quaternion)\n        {\n            Quaternion result;\n            result.X = quaternion.X;\n            result.Y = quaternion.Y;\n            result.Z = quaternion.Z;\n            result.W = quaternion.W;\n            return result;\n        }\n\n        [DebuggerStepThrough]\n        private static Vector3 ToXna(Color4D color)\n        {\n            Vector3 result;\n            result.X = color.R;\n            result.Y = color.G;\n            result.Z = color.B;\n            return result;\n        }\n\n        [DebuggerStepThrough]\n        private static Vector2 ToXnaTexCoord(Vector3D vector)\n        {\n            Vector2 result;\n            result.X = vector.X;\n            result.Y = vector.Y;\n            return result;\n        }\n\n        [DebuggerStepThrough]\n        private static Color ToXnaColor(Color4D color)\n        {\n            return new Color(color.R, color.G, color.B, color.A);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/CompiledEffectContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Represents a compiled Effect.\n    /// </summary>\n    public class CompiledEffectContent : ContentItem\n    {\n        byte[] effectCode;\n\n        /// <summary>\n        /// Creates a new instance of the CompiledEffectContent class\n        /// </summary>\n        /// <param name=\"effectCode\">The compiled effect code.</param>\n        public CompiledEffectContent(byte[] effectCode)\n        {\n            this.effectCode = effectCode;\n        }\n\n        /// <summary>\n        /// Retrieves the compiled byte code for this shader.\n        /// </summary>\n        /// <returns>The compiled bytecode.</returns>\n        public byte[] GetEffectCode()\n        {\n            return effectCode;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/FontDescriptionProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Linq;\nusing Microsoft.Win32;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Platform.Utilities;\nusing SharpFont;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    [ContentProcessor(DisplayName = \"Sprite Font Description - KNI\")]\n    public class FontDescriptionProcessor : ContentProcessor<FontDescription, SpriteFontContent>\n    {\n        private static object _fontFamilyInfoCacheLocker = new object();\n        private static Dictionary<string, FontFamilyInfo> _fontFamilyInfoCache;\n\n        List<string> _allowedFontFileExtensions = new List<string> { \".ttf\", \".ttc\", \".otf\" };\n\n        SmoothingMode _smoothing = SmoothingMode.Normal;\n        private bool _generateMipmaps = false;\n\n        [DefaultValue(true)]\n        public virtual bool PremultiplyAlpha { get; set; }\n\n        [DefaultValue(typeof(TextureProcessorOutputFormat), \"Compressed\")]\n        public virtual TextureProcessorOutputFormat TextureFormat { get; set; }\n\n        [DefaultValue(typeof(SmoothingMode), \"Normal\")]\n        public virtual SmoothingMode Smoothing\n        {\n            get { return _smoothing; }\n            set { _smoothing = value; }\n        }\n\n        [DefaultValue(false)]\n        [DisplayName(\"Generate Mipmaps\")]\n        public virtual bool GenerateMipmaps\n        {\n            get { return _generateMipmaps; }\n            set { _generateMipmaps = value; }\n        }\n\n        public FontDescriptionProcessor()\n        {\n            PremultiplyAlpha = true;\n            TextureFormat = TextureProcessorOutputFormat.Compressed;\n        }\n\n        public override SpriteFontContent Process(FontDescription input, ContentProcessorContext context)\n        {\n            SpriteFontContent output = new SpriteFontContent(input);\n\n            FontFaceInfo faceInfo = null;\n            faceInfo = FindLocalFontFile(input, context);\n            if (faceInfo == null)\n                faceInfo = FindFontFile(input, context);\n\n            if (faceInfo == null)\n                throw new PipelineException(\"Could not find \\\"\" + input.FontName + \"\\\" font.\");\n\n            context.Logger.LogMessage(\"Building Font {0}\", faceInfo.FontFile);\n\n            List<char> characters = new List<char>(input.Characters);\n            // add default character\n            if (input.DefaultCharacter != null)\n            {\n                if (!characters.Contains(input.DefaultCharacter.Value))\n                    characters.Add(input.DefaultCharacter.Value);\n            }\n            characters.Sort();\n\n            FontContent font = ImportFont(input, context, faceInfo, characters);\n            Dictionary<char, FontGlyph> glyphs = font.Glyphs;\n\n            // Validate.\n            if (glyphs.Count == 0)\n                throw new PipelineException(\"Font does not contain any glyphs.\");\n\n            // Optimize glyphs.\n            foreach (FontGlyph glyph in glyphs.Values)\n                glyph.Crop();\n\n            // We need to know how to pack the glyphs.\n            TextureProcessorOutputFormat format = TextureFormat;\n            if (format == TextureProcessorOutputFormat.Compressed)\n                format = GraphicsUtil.GetTextureFormatForPlatform(format, context.TargetPlatform);\n            bool requiresPot = GraphicsUtil.RequiresPowerOfTwo(format, GenerateMipmaps ,context.TargetPlatform, context.TargetProfile);\n            bool requiresSquare = GraphicsUtil.RequiresSquare(format, context.TargetPlatform);\n\n            BitmapContent glyphAtlas = GlyphPacker.ArrangeGlyphs(glyphs.Values, requiresPot, requiresSquare);\n\n            // calculate line spacing.\n            if (font.WinAscend != 0 || font.WinDescend != 0)\n            {\n                output.VerticalLineSpacing = (int)Math.Ceiling(font.WinAscend + font.WinDescend);\n            }\n            else\n            {\n                output.VerticalLineSpacing = (int)font.MetricsHeight;\n                // The LineSpacing from XNA font importer is +1px that SharpFont.\n                output.VerticalLineSpacing += 1;\n            }\n\n            float glyphHeightEx = -(font.MetricsDescender/2f);\n            // The above value of glyphHeightEx match the XNA importer,\n            // however the height of MeasureString() does not match VerticalLineSpacing.\n            //glyphHeightEx = 0;\n            float baseline = font.MetricsHeight + font.MetricsDescender + (font.MetricsDescender/2f) + glyphHeightEx;\n\n            foreach (char ch in glyphs.Keys)\n            {\n                FontGlyph glyph = glyphs[ch];\n\n                output.CharacterMap.Add(ch);\n\n                Rectangle texRect = glyph.Subrect;\n                output.Glyphs.Add(texRect);\n\n                int yoffset = (font.WinAscend != 0 || font.WinDescend != 0) \n                            ? (int)Math.Ceiling(font.WinAscend - glyph.FontBitmapTop)\n                            : (int)Math.Ceiling(baseline - glyph.FontBitmapTop);\n\n                Rectangle cropping;\n                cropping.X = glyph.XOffset + glyph.FontBitmapLeft;\n                cropping.Y = glyph.YOffset + yoffset;\n                cropping.Width  = (int)glyph.XAdvance;\n                cropping.Height = (int)Math.Ceiling(font.MetricsHeight + glyphHeightEx);\n                output.Cropping.Add(cropping);\n\n                // Set the optional character kerning.\n                if (input.UseKerning)\n                    output.Kerning.Add(glyph.Kerning.ToVector3());\n                else\n                    output.Kerning.Add(new Vector3(0, glyph.Width + 1, 0));\n            }\n\n            if (PremultiplyAlpha)\n                TextureProcessor.ProcessPremultiplyAlpha((PixelBitmapContent<Vector4>)glyphAtlas);\n\n            output.Texture.Faces[0].Add(glyphAtlas);\n\n            if (GenerateMipmaps)\n                output.Texture.GenerateMipmaps(false);\n\n            // Perform the final texture conversion.\n            try\n            {\n                TextureProcessorOutputFormat textureFormat = GraphicsUtil.GetTextureFormatForPlatform(TextureFormat, context.TargetPlatform);\n\n                switch (textureFormat)\n                {\n                    case TextureProcessorOutputFormat.NoChange:\n                        // We do nothing in this case.\n                        break;\n                    case TextureProcessorOutputFormat.Color:\n                        // If this is color just make sure the format is right and return it.\n                        output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Color>));\n                        break;\n                    case TextureProcessorOutputFormat.Color16Bit:\n                        // Handle this common compression format.\n                        GraphicsUtil.CompressColor16Bit(output.Texture);\n                        break;\n\n                    case TextureProcessorOutputFormat.AtcCompressed:\n                        {\n                            // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR\n                            output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressColor16Bit(output.Texture);\n                            //GraphicsUtil.CompressAti(input);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.DxtCompressed:\n                        {\n                            // Compress the greyscale font texture page using a specially-formulated DXT3 mode\n                            output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressFontDXT3(output.Texture, context);\n                            //GraphicsUtil.CompressDxt(output.Texture, context);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.Etc1Compressed:\n                        {\n                            // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR\n                            output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressColor16Bit(output.Texture);\n                            //GraphicsUtil.CompressEtc1(input, context);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.PvrCompressed:\n                        {\n                            // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR\n                            output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressColor16Bit(output.Texture);\n                            //GraphicsUtil.CompressPvrtc(input, context);\n                        }\n                        break;\n                }\n            }\n            catch (EntryPointNotFoundException ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not find the entry point to compress the texture. \" + ex.ToString());\n                throw;\n            }\n            catch (DllNotFoundException ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not compress texture. Required shared lib is missing. \" + ex.ToString());\n                throw;\n            }\n            catch (Exception ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not convert texture. \" + ex.ToString());\n                throw;\n            }\n\n            return output;\n        }\n\n        private FontFaceInfo FindLocalFontFile(FontDescription input, ContentProcessorContext context)\n        {\n\n            string fontsDirectory = Path.GetDirectoryName(input.Identity.SourceFilename);\n\n            string fontFile = Path.Combine(fontsDirectory, input.FontName);\n\n            if (!File.Exists(fontFile))\n                return null;\n            string fontFileExtension = Path.GetExtension(fontFile).ToLowerInvariant();\n            if (!_allowedFontFileExtensions.Contains(fontFileExtension))\n               throw new PipelineException(\"Unknown file extension \" + fontFileExtension);\n\n            Dictionary<string, FontFamilyInfo> fontFamilyInfoCache = new Dictionary<string, FontFamilyInfo>();\n\n            //using (Library sharpFontLib = new Library())\n            //    AddSharpFontFaces(fontFamilyInfoCache, fontFile, sharpFontLib);\n            AddOpenFontFaces(fontFamilyInfoCache, fontFile);\n\n            foreach(FontFamilyInfo familyInfo in fontFamilyInfoCache.Values)\n            {\n                foreach (FontFaceInfo faceInfo in familyInfo.Faces)\n                {\n                    if (faceInfo.Style == input.Style)\n                        return faceInfo;\n                }\n            }\n\n            return null;\n        }\n\n        private FontFaceInfo FindFontFile(FontDescription input, ContentProcessorContext context)\n        {\n            if (CurrentPlatform.OS == OS.Windows)\n            {\n                lock (_fontFamilyInfoCacheLocker)\n                {\n                    if (_fontFamilyInfoCache == null)\n                    {\n                        Dictionary<string, FontFamilyInfo> fontFamilyInfoCache = new Dictionary<string, FontFamilyInfo>();\n\n                        //using (Library sharpFontLib = new Library())\n                        {\n                            string fontsDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), \"Fonts\");\n                            foreach (RegistryKey key in new RegistryKey[] { Registry.LocalMachine, Registry.CurrentUser })\n                            {\n                                RegistryKey subkey = key.OpenSubKey(@\"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts\", false);\n                                string[] valueNames = subkey.GetValueNames();\n                                Array.Sort(valueNames);\n\n                                foreach (string font in valueNames)\n                                {\n                                    string fontFile = subkey.GetValue(font).ToString();\n                                    // The registry value might have trailing NUL characters\n                                    fontFile.TrimEnd(new char[] { '\\0' });\n\n                                    string fontFileExtension = Path.GetExtension(fontFile).ToLowerInvariant();\n                                    if (!_allowedFontFileExtensions.Contains(fontFileExtension))\n                                        continue;\n\n                                    if (!Path.IsPathRooted(fontFile))\n                                        fontFile = Path.Combine(fontsDirectory, fontFile);\n                                    if (!File.Exists(fontFile))\n                                        continue;\n\n                                    //AddSharpFontFaces(fontFamilyInfoCache, fontFile, sharpFontLib);\n                                    AddOpenFontFaces(fontFamilyInfoCache, fontFile);\n                                }\n                            }\n                        }\n\n                        _fontFamilyInfoCache = fontFamilyInfoCache;\n                    }\n\n                    FontFamilyInfo familyInfo;\n                    if (_fontFamilyInfoCache.TryGetValue(input.FontName.ToUpperInvariant(), out familyInfo))\n                    {\n                        foreach (FontFaceInfo faceInfo in familyInfo.Faces)\n                        {\n                            if (faceInfo.Style == input.Style)\n                                return faceInfo;\n                        }\n                        string errorMsg = String.Format(\"Font '{0}' does not have style '{1}'.\", input.FontName, input.Style);\n                        throw new InvalidContentException(errorMsg);\n                    }\n                }\n            }\n            else if (CurrentPlatform.OS == OS.MacOSX)\n            {\n                lock (_fontFamilyInfoCacheLocker)\n                {\n                    if (_fontFamilyInfoCache == null)\n                    {\n                        Dictionary<string, FontFamilyInfo> fontFamilyInfoCache = new Dictionary<string, FontFamilyInfo>();\n\n                        //using (Library sharpFontLib = new Library())\n                        {\n                            List<string> directories = new List<string>();\n                            directories.Add(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), \"Library\", \"Fonts\"));\n                            directories.Add(\"/Library/Fonts\");\n                            directories.Add(\"/System/Library/Fonts/Supplemental\");\n\n                            foreach (string fontsDirectory in directories)\n                            {\n                                foreach (string fontFile in Directory.GetFiles(fontsDirectory))\n                                {\n                                    string fontFileExtension = Path.GetExtension(fontFile).ToLowerInvariant();\n                                    if (!_allowedFontFileExtensions.Contains(fontFileExtension))\n                                        continue;\n\n                                    //AddSharpFontFaces(fontFamilyInfoCache, fontFile, sharpFontLib);\n                                    AddOpenFontFaces(fontFamilyInfoCache, fontFile);\n                                }\n                            }\n                        }\n\n                        _fontFamilyInfoCache = fontFamilyInfoCache;\n                    }\n\n                    FontFamilyInfo familyInfo;\n                    if (_fontFamilyInfoCache.TryGetValue(input.FontName.ToUpperInvariant(), out familyInfo))\n                    {\n                        foreach (FontFaceInfo faceInfo in familyInfo.Faces)\n                        {\n                            if (faceInfo.Style == input.Style)\n                                return faceInfo;\n                        }\n                        string errorMsg = String.Format(\"Font '{0}' does not have style '{1}'.\", input.FontName, input.Style);\n                        throw new InvalidContentException(errorMsg);\n                    }\n                }\n            }\n            else if (CurrentPlatform.OS == OS.Linux)\n            {\n                string stdout, stderr;\n                ExternalTool.Run(\"/bin/bash\", string.Format(\"-c \\\"fc-match -f '%{{file}}:%{{family}}\\\\n' '{0}:style={1}'\\\"\", input.FontName, input.Style.ToString()), out stdout, out stderr);\n                stdout = stdout.Trim();\n\n                string[] split = stdout.Split(':');\n                if (split.Length >= 2)\n                {\n                    string fontFile = split[0];\n                    string fontName = split[1];\n\n                    string fontFileExtension = Path.GetExtension(fontFile).ToLowerInvariant();\n                    if (!_allowedFontFileExtensions.Contains(fontFileExtension))\n                        return null;\n\n                    // check font family, fontconfig might return a fallback\n                    string[] families = new string[] { fontName };\n                    if (fontName.Contains(\",\"))\n                        families = fontName.Split(','); // this file defines multiple family names\n                    foreach (string family in families)\n                    {\n                        if (input.FontName.Equals(family, StringComparison.InvariantCultureIgnoreCase))\n                        {\n                            FontFaceInfo fontFaceInfo = new FontFaceInfo(fontFile, 0, input.Style);\n                            return fontFaceInfo;\n                        }\n                    }\n                }\n            }\n\n            return null;\n        }\n\n        private static void AddOpenFontFaces(Dictionary<string, FontFamilyInfo> fontFamilyInfoCache, string fontFile)\n        {\n            using (Stream fontFileStream = new FileStream(fontFile, FileMode.Open, FileAccess.Read, FileShare.Read))\n            {\n                Typography.OpenFont.OpenFontReader reader = new Typography.OpenFont.OpenFontReader();\n                Typography.OpenFont.PreviewFontInfo previewFontInfo = reader.ReadPreview(fontFileStream);\n\n                bool isFontCollection = previewFontInfo.IsFontCollection;\n                if (!isFontCollection)\n                {\n                    int faceIndex = 0;\n                    Typography.OpenFont.PreviewFontInfo fontInfo = previewFontInfo;\n\n                    string fontName = fontInfo.Name;\n                    string styleName = fontInfo.NameEntry.TypographyicSubfamilyName;\n                    FontDescriptionStyle fontStyle = FontFaceInfo.ToFontStyle(fontInfo.OS2TranslatedStyle);\n\n                    Typography.OpenFont.Tables.OS2Table table = fontInfo.OS2Table;\n                    ushort winAscend = (table != null) ? table.usWinAscent : (ushort)0;\n                    ushort winDescent = (table != null) ? table.usWinDescent : (ushort)0;\n\n                    FontFaceInfo fontFaceInfo = new FontFaceInfo(fontFile, faceIndex, fontStyle, styleName,\n                                                                 winAscend, winDescent);\n\n                    CachefontFaceInfo(fontFamilyInfoCache, fontName, fontFaceInfo);\n                }\n                else\n                {\n                    for (int faceIndex = 0; faceIndex < previewFontInfo.MemberCount; faceIndex++)\n                    {\n                        Typography.OpenFont.PreviewFontInfo fontInfo = previewFontInfo.GetMember(faceIndex);\n\n                        string fontName = fontInfo.Name;\n                        string styleName = fontInfo.NameEntry.TypographyicSubfamilyName;\n                        FontDescriptionStyle fontStyle = FontFaceInfo.ToFontStyle(fontInfo.OS2TranslatedStyle);\n\n                        Typography.OpenFont.Tables.OS2Table table = fontInfo.OS2Table;\n                        ushort winAscend = (table != null) ? table.usWinAscent : (ushort)0;\n                        ushort winDescent = (table != null) ? table.usWinDescent : (ushort)0;\n\n                        FontFaceInfo fontFaceInfo = new FontFaceInfo(fontFile, faceIndex, fontStyle, styleName,\n                                                                     winAscend, winDescent);\n\n                        CachefontFaceInfo(fontFamilyInfoCache, fontName, fontFaceInfo);\n                    }\n                }\n            }\n\n        }\n\n        private static void AddSharpFontFaces(Dictionary<string, FontFamilyInfo> fontFamilyInfoCache, string fontFile, Library sharpFontLib)\n        {\n            int faceCount = 1;\n            for (int faceIndex = 0; faceIndex < faceCount; faceIndex++)\n            {\n                using (Face face = sharpFontLib.NewFace(fontFile, faceIndex))\n                {\n                    faceCount = face.FaceCount;\n\n                    string fontName = face.FamilyName;\n                    string styleName = face.StyleName;\n                    FontDescriptionStyle fontStyle = FontFaceInfo.ToFontStyle(face.StyleFlags);\n\n                    FontFaceInfo fontFaceInfo = new FontFaceInfo(fontFile, face.FaceIndex, fontStyle, styleName, face.FaceFlags);\n\n                    CachefontFaceInfo(fontFamilyInfoCache, fontName, fontFaceInfo);\n                }\n            }\n        }\n\n        private static void CachefontFaceInfo(Dictionary<string, FontFamilyInfo> fontFamilyInfoCache, string fontName, FontFaceInfo fontFaceInfo)\n        {\n            FontFamilyInfo fontFamilyInfo;\n            if (!fontFamilyInfoCache.TryGetValue(fontName.ToUpperInvariant(), out fontFamilyInfo))\n            {\n                fontFamilyInfo = new FontFamilyInfo(fontName);\n                fontFamilyInfoCache.Add(fontName.ToUpperInvariant(), fontFamilyInfo);\n            }\n            fontFamilyInfo.Faces.Add(fontFaceInfo);\n        }\n\n        // Uses FreeType to rasterize TrueType fonts into a series of glyph bitmaps.\n        private FontContent ImportFont(FontDescription input, ContentProcessorContext context, FontFaceInfo faceInfo, List<char> characters)\n        {\n            FontContent fontContent = new FontContent();\n\n            using (Library sharpFontLib = new Library())\n            using (Face face = sharpFontLib.NewFace(faceInfo.FontFile, faceInfo.FaceIndex))\n            {\n                float emSizeInPixels = (96f/72f) * input.Size;\n                int fixedSize = (int)(emSizeInPixels * 64);\n                const uint dpi = 0;\n                face.SetCharSize(0, fixedSize, dpi, dpi);\n\n                // Rasterize each character in turn.\n                foreach (char ch in characters)\n                {\n                    if (fontContent.Glyphs.ContainsKey(ch))\n                        continue;\n\n                    FontGlyph glyph = ImportGlyph(input, context, face, ch);\n                    fontContent.Glyphs.Add(ch, glyph);\n                }\n\n                //SharpFont.Fnt.Header header = face.GetWinFntHeader();\n                fontContent.WinAscend = faceInfo.WinAscend * emSizeInPixels / face.UnitsPerEM;\n                fontContent.WinDescend = faceInfo.WinDescent * emSizeInPixels / face.UnitsPerEM;\n\n                fontContent.MetricsHeight = face.Size.Metrics.Height / 64f;\n                fontContent.MetricsAscender  = face.Size.Metrics.Ascender / 64f;\n                fontContent.MetricsDescender = face.Size.Metrics.Descender / 64f;\n\n                fontContent.FaceBBoxLeft = face.BBox.Left * emSizeInPixels / face.UnitsPerEM;\n                fontContent.FaceBBoxTop = face.BBox.Top * emSizeInPixels / face.UnitsPerEM;\n                fontContent.FaceBBoxRight = face.BBox.Right * emSizeInPixels / face.UnitsPerEM;\n                fontContent.FaceBBoxBottom = face.BBox.Bottom * emSizeInPixels / face.UnitsPerEM;\n\n#if DEBUG\n                fontContent.FaceAscender = face.Ascender * emSizeInPixels / face.UnitsPerEM;\n                fontContent.FaceDescender = face.Descender * emSizeInPixels / face.UnitsPerEM;\n\n                fontContent.FaceUnderlinePosition = face.UnderlinePosition * emSizeInPixels / face.UnitsPerEM;\n                fontContent.FaceUnderlineThickness = face.UnderlineThickness * emSizeInPixels / face.UnitsPerEM;\n#endif\n\n                return fontContent;\n            }\n        }\n\n        // Rasterizes a single character glyph.\n        private FontGlyph ImportGlyph(FontDescription input, ContentProcessorContext context, Face face, char ch)\n        {\n            LoadFlags loadFlags   = LoadFlags.Default;\n            LoadTarget loadTarget = LoadTarget.Normal;\n            RenderMode renderMode = RenderMode.Normal;\n\n            switch (this.Smoothing)\n            {\n                case SmoothingMode.Disable:\n                    //loadTarget = LoadTarget.Mono;\n                    renderMode = RenderMode.Mono;\n                    break;\n                case SmoothingMode.Normal:\n                    break;\n                case SmoothingMode.Light:\n                    loadFlags |= LoadFlags.ForceAutohint;\n                    loadTarget = LoadTarget.Light;\n                    //renderMode = RenderMode.Light;\n                    break;\n                case SmoothingMode.AutoHint:\n                    loadFlags |= LoadFlags.ForceAutohint;\n                    break;\n\n\n                default:\n                    throw new InvalidOperationException(\"RenderMode\");\n            }\n\n            uint glyphIndex = face.GetCharIndex(ch);\n            face.LoadGlyph(glyphIndex, loadFlags, loadTarget);\n            face.Glyph.RenderGlyph(renderMode);\n\n            // Render the character.\n            PixelBitmapContent<Vector4> glyphBitmap = null;\n            if (face.Glyph.Bitmap.Width > 0 && face.Glyph.Bitmap.Rows > 0)\n            {\n                switch (face.Glyph.Bitmap.PixelMode)\n                {\n                    case PixelMode.Mono:\n                        glyphBitmap = new PixelBitmapContent<Vector4>(face.Glyph.Bitmap.Width, face.Glyph.Bitmap.Rows);\n                        glyphBitmap.SetPixelData(ConvertMonoToVector4(face.Glyph));\n                        break;\n\n                    case PixelMode.Gray:\n                        glyphBitmap = new PixelBitmapContent<Vector4>(face.Glyph.Bitmap.Width, face.Glyph.Bitmap.Rows);\n                        glyphBitmap.SetPixelData(ConvertAlphaToVector4(face.Glyph));\n                        break;\n\n                    default:\n                        throw new PipelineException(string.Format(\"Glyph PixelMode {0} is not supported.\", face.Glyph.Bitmap.PixelMode));\n                }\n            }\n            else // whitespace\n            {\n                float gHA = face.Glyph.Metrics.HorizontalAdvance / 64f;\n                float gVA = face.Size.Metrics.Height / 64f;\n                gHA = (gHA > 0) ? gHA : gVA;\n                gVA = (gVA > 0) ? gVA : gHA;\n                glyphBitmap = new PixelBitmapContent<Vector4>((int)gHA, (int)gVA);\n            }\n\n            GlyphKerning kerning = new GlyphKerning();\n            kerning.LeftBearing  = (face.Glyph.Metrics.HorizontalBearingX / 64f);\n            kerning.AdvanceWidth = (face.Glyph.Metrics.Width / 64f);\n            kerning.RightBearing = (face.Glyph.Metrics.HorizontalAdvance / 64f) - (kerning.LeftBearing + kerning.AdvanceWidth);\n            kerning.LeftBearing  -= face.Glyph.BitmapLeft;\n            kerning.AdvanceWidth += face.Glyph.BitmapLeft;\n\n            // Construct the output Glyph object.\n            FontGlyph glyph = new FontGlyph(glyphBitmap);\n            glyph.FontBitmapLeft = face.Glyph.BitmapLeft;\n            glyph.FontBitmapTop = face.Glyph.BitmapTop;\n\n            glyph.XOffset = 0;\n            glyph.YOffset = 0;\n            glyph.XAdvance = (face.Glyph.Metrics.HorizontalAdvance / 64f);\n            glyph.Kerning = kerning;\n\n            glyph.GlyphMetricTopBearing = (face.Glyph.Metrics.HorizontalBearingY / 64f);\n#if DEBUG\n            glyph.GlyphMetricLeftBearing = (face.Glyph.Metrics.HorizontalBearingX / 64f);\n            glyph.GlyphMetricWidth = (face.Glyph.Metrics.Width / 64f);\n            glyph.GlyphMetricXAdvance = (face.Glyph.Metrics.HorizontalAdvance / 64f);\n#endif\n\n            return glyph;\n        }\n\n        private static unsafe byte[] ConvertMonoToVector4(GlyphSlot glyph)\n        {\n            FTBitmap bitmap = glyph.Bitmap;\n            int cols = bitmap.Width;\n            int rows = bitmap.Rows;\n            int stride = bitmap.Pitch;\n\n            // SharpFont 2.5.3 doesn't return the entire bitmapdata when Pitch > 1.\n            //System.Diagnostics.Debug.Assert(bitmap.BufferData.Length == rows * bitmap.Pitch);\n\n            byte* pGlyphData = (byte*)bitmap.Buffer.ToPointer();\n            byte[] data = new byte[cols * rows * sizeof(Vector4)];\n            fixed (byte* pdata = data)\n            {\n                Vector4* pvdata = (Vector4*)pdata;\n                for (int y = 0; y < rows; y++)\n                {\n                    for (int x = 0; x < cols; x++)\n                    {\n                        byte b = pGlyphData[(x >> 3) + y * stride];\n                        b = (byte)(b & (0x80 >> (x & 0x07)));\n                        float a = (b == (byte)0) ? 0f : 1f;\n\n                        int idx = x + y * cols;\n                        pvdata[idx].X = 1f;\n                        pvdata[idx].Y = 1f;\n                        pvdata[idx].Z = 1f;\n                        pvdata[idx].W = a;\n                    }\n                }\n            }\n\n            return data;\n        }\n\n        private static unsafe byte[] ConvertAlphaToVector4(GlyphSlot glyph)\n        {\n            FTBitmap bitmap = glyph.Bitmap;\n            int cols = bitmap.Width;\n            int rows = bitmap.Rows;\n\n            byte* pGlyphData = (byte*)bitmap.Buffer.ToPointer();\n            byte[] data = new byte[cols * rows * sizeof(Vector4)];\n            fixed (byte* pdata = data)\n            {\n                Vector4* pvdata = (Vector4*)pdata;\n                int count = (cols * rows);\n                for (int idx = 0; idx < count; idx++)\n                {\n                    byte a = pGlyphData[idx];\n\n                    pvdata[idx].X = 1f;\n                    pvdata[idx].Y = 1f;\n                    pvdata[idx].Z = 1f;\n                    pvdata[idx].W = a / (float)byte.MaxValue;\n                }\n            }\n\n            return data;\n        }\n\n        public enum SmoothingMode\n        {\n            [Description(\"Normal hinting\")]\n            Normal,\n            [Description(\"Light hinting\")]\n            Light,\n            [Description(\"Auto-hinter\")]\n            AutoHint,\n            [Description(\"Bitmap with 1bit alpha\")]\n            Disable,\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/FontTextureProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    [ContentProcessorAttribute(DisplayName = \"Font Texture - KNI\")]\n    public class FontTextureProcessor : ContentProcessor<Texture2DContent, SpriteFontContent>\n    {\n        private Vector4 transparentPixel = Color.Magenta.ToVector4();\n        private bool _generateMipmaps = false;\n\n        [DefaultValue(' ')]\n        public virtual char FirstCharacter { get; set; }\n\n        [DefaultValue(true)]\n        public virtual bool PremultiplyAlpha { get; set; }\n\n        public virtual TextureProcessorOutputFormat TextureFormat { get; set; }\n\n        [DefaultValue(false)]\n        [DisplayName(\"Generate Mipmaps\")]\n        public virtual bool GenerateMipmaps\n        {\n            get { return _generateMipmaps; }\n            set { _generateMipmaps = value; }\n        }\n\n        public FontTextureProcessor()\n        {\n            FirstCharacter = ' ';\n            PremultiplyAlpha = true;\n        }\n\n\n        public override SpriteFontContent Process(Texture2DContent input, ContentProcessorContext context)\n        {\n            SpriteFontContent output = new SpriteFontContent();\n\n            BitmapContent fontBitmap = input.Faces[0][0];\n            SurfaceFormat faceFormat;\n            fontBitmap.TryGetFormat(out faceFormat);\n            if (faceFormat != SurfaceFormat.Vector4)\n            {\n                PixelBitmapContent<Vector4> colorFace = new PixelBitmapContent<Vector4>(fontBitmap.Width, fontBitmap.Height);\n                BitmapContent.Copy(fontBitmap, colorFace);\n                fontBitmap = colorFace;\n            }\n\n            // extract the glyphs from the texture and map them to a list of characters.\n            // we need to call GtCharacterForIndex for each glyph in the Texture to \n            // get the char for that glyph, by default we start at ' ' then '!' and then ASCII\n            // after that.\n            Dictionary<char, FontGlyph> glyphs = ImportFont(input, context, (PixelBitmapContent<Vector4>)fontBitmap);\n\n            // Optimize glyphs.\n            foreach (FontGlyph glyph in glyphs.Values)\n                glyph.Crop();\n\n            // calculate line spacing.\n            foreach (FontGlyph glyph in glyphs.Values)\n                output.VerticalLineSpacing = Math.Max(output.VerticalLineSpacing, glyph.Subrect.Height);\n\n            TextureProcessorOutputFormat format = TextureFormat;\n            // resolve Compressed format.\n            if (format == TextureProcessorOutputFormat.Compressed)\n                format = GraphicsUtil.GetTextureFormatForPlatform(format, context.TargetPlatform);\n\n            if (format == TextureProcessorOutputFormat.NoChange)\n            {\n                switch(faceFormat)\n                {\n                    case SurfaceFormat.Color:\n                        format = TextureProcessorOutputFormat.Color;\n                        break;\n                    // TODO: Get output format from input faceFormat\n                    default:\n                        throw new NotImplementedException();\n                }\n            }\n\n            // We need to know how to pack the glyphs.\n            bool requiresPot = GraphicsUtil.RequiresPowerOfTwo(format, GenerateMipmaps ,context.TargetPlatform, context.TargetProfile);\n            bool requiresSquare = GraphicsUtil.RequiresSquare(format, context.TargetPlatform);\n\n            BitmapContent glyphAtlas = GlyphPacker.ArrangeGlyphs(glyphs.Values, requiresPot, requiresSquare);\n\n            foreach (char ch in glyphs.Keys)\n            {\n                FontGlyph glyph = glyphs[ch];\n\n                output.CharacterMap.Add(ch);\n\n                Rectangle texRect = glyph.Subrect;\n                output.Glyphs.Add(texRect);\n\n                Rectangle cropping;\n                cropping.X = (int)glyph.XOffset;\n                cropping.Y = (int)glyph.YOffset;\n                cropping.Width = glyph.Width;\n                cropping.Height = glyph.Height;\n                output.Cropping.Add(cropping);\n\n                output.Kerning.Add(glyph.Kerning.ToVector3());\n            }\n\n            if (PremultiplyAlpha)\n                TextureProcessor.ProcessPremultiplyAlpha((PixelBitmapContent<Vector4>)glyphAtlas);\n\n            output.Texture.Faces[0].Add(glyphAtlas);\n\n            if (GenerateMipmaps)\n                output.Texture.GenerateMipmaps(false);\n\n            // Perform the final texture conversion.\n            try\n            {\n                format = GraphicsUtil.GetTextureFormatForPlatform(format, context.TargetPlatform);\n                switch (format)\n                {\n                    case TextureProcessorOutputFormat.Color:\n                        // If this is color just make sure the format is right and return it.\n                        output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Color>));\n                        break;\n\n                    case TextureProcessorOutputFormat.Color16Bit:\n                        // Handle this common compression format.\n                        GraphicsUtil.CompressColor16Bit(output.Texture);\n                        break;\n\n                    case TextureProcessorOutputFormat.AtcCompressed:\n                        {\n                            // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR\n                            output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressColor16Bit(output.Texture);\n                            //GraphicsUtil.CompressAti(output.Texture);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.DxtCompressed:\n                        {\n                            // Compress the greyscale font texture page using a specially-formulated DXT3 mode\n                            output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressFontDXT3(output.Texture, context);\n                            //GraphicsUtil.CompressDxt(output.Texture, context);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.Etc1Compressed:\n                        {\n                            // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR\n                            output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressColor16Bit(output.Texture);\n                            //GraphicsUtil.CompressEtc1(output.Texture, context);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.PvrCompressed:\n                        {\n                            // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR\n                            output.Texture.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressColor16Bit(output.Texture);\n                            //GraphicsUtil.CompressPvrtc(output.Texture, context);\n                        }\n                        break;\n\n                    default:\n                        throw new NotImplementedException(\"The texture output format \" + format + \" is not implemented for font textures.\");\n                }\n            }\n            catch (EntryPointNotFoundException ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not find the entry point to compress the texture. \" + ex.ToString());\n                throw ex;\n            }\n            catch (DllNotFoundException ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not compress texture. Required shared lib is missing. \" + ex.ToString());\n                throw ex;\n            }\n            catch (Exception ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not convert texture. \" + ex.ToString());\n                throw ex;\n            }\n\n            return output;\n        }\n\n        private Dictionary<char, FontGlyph> ImportFont(Texture2DContent input, ContentProcessorContext context, PixelBitmapContent<Vector4> bitmap)\n        {\n            Dictionary<char, FontGlyph> glyphs = new Dictionary<char, FontGlyph>();\n\n            List<Rectangle> regions = new List<Rectangle>();\n            for (int y = 0; y < bitmap.Height; y++)\n            {\n                for (int x = 0; x < bitmap.Width; x++)\n                {\n                    if (bitmap.GetPixel(x, y) != transparentPixel)\n                    {\n                        // if we don't have a region that has this pixel already\n                        Rectangle rect = regions.Find(r =>\n                        {\n                            return r.Contains(x, y);\n                        });\n                        if (rect == Rectangle.Empty)\n                        {\n                            // we have found the top, left of a image. \n                            // we now need to scan for the 'bounds'\n                            int top = y;\n                            int bottom = y;\n                            int left = x;\n                            int right = x;\n                            while (bitmap.GetPixel(right, bottom) != transparentPixel)\n                                right++;\n                            while (bitmap.GetPixel(left, bottom) != transparentPixel)\n                                bottom++;\n                            // we got a glyph :)\n                            regions.Add(new Rectangle(left, top, right - left, bottom - top));\n                            x = right;\n                        }\n                        else\n                        {\n                            x += rect.Width;\n                        }\n                    }\n                }\n            }\n\n            for (int i = 0; i < regions.Count; i++)\n            {\n                char ch = (char)(FirstCharacter + i);\n\n                Rectangle rect = regions[i];\n                PixelBitmapContent<Vector4> glyphBitmap = new PixelBitmapContent<Vector4>(rect.Width, rect.Height);\n                BitmapContent.Copy(bitmap, rect, glyphBitmap, new Rectangle(0, 0, rect.Width, rect.Height));\n\n                GlyphKerning kerning = new GlyphKerning();\n                kerning.AdvanceWidth = glyphBitmap.Width;\n\n                FontGlyph glyph = new FontGlyph(glyphBitmap);\n                glyph.Kerning = kerning;\n\n                glyphs.Add(ch, glyph);\n                //newbitmap.Save(\"\"+ch+\".png\", System.Drawing.Imaging.ImageFormat.Png);\n            }\n\n            return glyphs;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/LocalizedFontProcessor.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// LocalizedFontProcessor.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\nusing System.ComponentModel;\nusing System.IO;\nusing System.Xml;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Custom processor extends the SpriteFont build process to scan over the resource\n    /// strings used by the game, automatically adding whatever characters it finds in\n    /// them to the font. This makes sure the game will always have all the characters\n    /// it needs, no matter what languages it is localized into, while still producing\n    /// an efficient font that does not waste space on unnecessary characters. This is\n    /// especially useful for languages such as Japanese and Korean, which have\n    /// potentially thousands of different characters, although games typically only\n    /// use a small fraction of these. Building only the characters we need is far more\n    /// efficient than if we tried to include the entire CJK character region.\n    /// </summary>\n    [ContentProcessor]\n    public class LocalizedFontProcessor : ContentProcessor<LocalizedFontDescription, SpriteFontContent>\n    {\n        [DefaultValue(true)]\n        public virtual bool PremultiplyAlpha { get; set; }\n\n        [DefaultValue(typeof(TextureProcessorOutputFormat), \"Compressed\")]\n        public virtual TextureProcessorOutputFormat TextureFormat { get; set; }\n\n        public LocalizedFontProcessor()\n        {\n              PremultiplyAlpha = true;\n              TextureFormat = TextureProcessorOutputFormat.Compressed;\n        }\n\n        /// <summary>\n        /// Converts a font description into SpriteFont format.\n        /// </summary>\n        public override SpriteFontContent Process(LocalizedFontDescription input, ContentProcessorContext context)\n        {\n            // Scan each .resx file in turn.\n            foreach (string resourceFile in input.ResourceFiles)\n            {\n                string absolutePath = Path.GetFullPath(resourceFile.Replace('\\\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar));\n\n                // Make sure the .resx file really does exist.\n                if (!File.Exists(absolutePath))\n                    throw new InvalidContentException(\"Can't find \" + absolutePath);\n\n                // Load the .resx data.\n                XmlDocument xmlDocument = new XmlDocument();\n\n                xmlDocument.Load(absolutePath);\n\n                // Scan each string from the .resx file.\n                foreach (XmlNode xmlNode in xmlDocument.SelectNodes(\"root/data/value\"))\n                {\n                    string resourceString = xmlNode.InnerText;\n\n                    // Scan each character of the string.\n                    foreach (char usedCharacter in resourceString)\n                    {\n                        if (!input.Characters.Contains(usedCharacter))\n                            input.Characters.Add(usedCharacter);\n                    }\n                }\n\n                // Mark that this font should be rebuilt if the resource file changes.\n                context.AddDependency(absolutePath);\n            }\n\n            OpaqueDataDictionary parameters = new OpaqueDataDictionary();\n            parameters.Add(\"PremultiplyAlpha\", PremultiplyAlpha);\n            parameters.Add(\"TextureFormat\", TextureFormat);\n            // After adding the necessary characters, we can use the built in\n            // FontDescriptionProcessor to do the hard work of building the font for us.\n            return context.Convert<FontDescription, SpriteFontContent>(input, \"FontDescriptionProcessor\", parameters);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/MaterialProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Provides methods and properties for maintaining a collection of named texture references.\n    /// </summary>\n    /// <remarks>In addition to texture references, opaque data values are stored in the OpaqueData property of the base class.</remarks>\n    [ContentProcessor(DisplayName = \"Material - KNI\")]\n    public class MaterialProcessor : ContentProcessor<MaterialContent, MaterialContent>\n    {\n        Color colorKeyColor;\n        bool colorKeyEnabled;\n        MaterialProcessorDefaultEffect defaultEffect;\n        bool generateMipmaps;\n        bool premultiplyTextureAlpha;\n        bool resizeTexturesToPowerOfTwo;\n        TextureProcessorOutputFormat textureFormat;\n\n        /// <summary>\n        /// Gets or sets the color value to replace with transparent black.\n        /// </summary>\n        /// <value>Color value of the material to replace with transparent black.</value>\n        [DefaultValue(typeof(Color), \"255, 0, 255, 255\")]\n        [DisplayName(\"Color Key Color\")]\n        [Description(\"If the texture is color-keyed, pixels of this color are replaced with transparent black.\")]\n        public virtual Color ColorKeyColor { get { return colorKeyColor; } set { colorKeyColor = value; } }\n\n        /// <summary>\n        /// Specifies whether color keying of a texture is enabled.\n        /// </summary>\n        /// <value>true if color keying is enabled; false otherwise.</value>\n        [DefaultValue(true)]\n        [DisplayName(\"Color Key Enabled\")]\n        [Description(\"If enabled, the source texture is color-keyed. Pixels matching the value of \\\"Color Key Color\\\" are replaced with transparent black.\")]\n        public virtual bool ColorKeyEnabled { get { return colorKeyEnabled; } set { colorKeyEnabled = value; } }\n\n        /// <summary>\n        /// The default effect type for this instance of MaterialProcessor.\n        /// </summary>\n        /// <value>The default effect type.</value>\n        /// <remarks>When MaterialProcessor is instantiated, DefaultEffect is set to default to BasicEffect Class.</remarks>\n        [DefaultValue(typeof(MaterialProcessorDefaultEffect), \"BasicEffect\")]\n        [DisplayName(\"Default Effect\")]\n        [Description(\"The default effect type.\")]\n        public virtual MaterialProcessorDefaultEffect DefaultEffect { get { return defaultEffect; } set { defaultEffect = value; } }\n\n        /// <summary>\n        /// Specifies if a full chain of mipmaps are generated from the source material. Existing mipmaps of the material are not replaced.\n        /// </summary>\n        /// <value>true if mipmap generation is enabled; false otherwise.</value>\n        [DefaultValue(true)]\n        [DisplayName(\"Generate Mipmaps\")]\n        [Description(\"If enabled, a full chain of mipmaps are generated from the source material. Existing mipmaps of the material are not replaced.\")]\n        public virtual bool GenerateMipmaps { get { return generateMipmaps; } set { generateMipmaps = value; } }\n\n        /// <summary>\n        /// Specifies whether alpha premultiply of textures is enabled.\n        /// </summary>\n        /// <value>true if alpha premultiply is enabled; false otherwise.</value>\n        [DefaultValue(true)]\n        [DisplayName(\"Premultiply Alpha\")]\n        [Description(\"If enabled, the texture is converted to premultiplied alpha format.\")]\n        public virtual bool PremultiplyTextureAlpha { get { return premultiplyTextureAlpha; } set { premultiplyTextureAlpha = value; } }\n\n        /// <summary>\n        /// Specifies whether resizing of a material is enabled. Typically used to maximize compatability with a graphics card because many graphics cards do not support a material size that is not a power of two. If ResizeTexturesToPowerOfTwo is enabled, the material is resized to the next largest power of two.\n        /// </summary>\n        /// <value>true if resizing is enabled; false otherwise.</value>\n        [DefaultValue(false)]\n        [DisplayName(\"Resize to Power of Two\")]\n        [Description(\"If enabled, the texture is resized to the next largest power of two, maximizing compatibility. Many graphics cards do not support texture sizes that are not a power of two.\")]\n        public virtual bool ResizeTexturesToPowerOfTwo { get { return resizeTexturesToPowerOfTwo; } set { resizeTexturesToPowerOfTwo = value; } }\n\n        /// <summary>\n\t\t/// Specifies the texture format of output materials. Materials can either be left unchanged from the source asset, converted to a corresponding Color, or compressed using the appropriate DxtCompressed format.\n        /// </summary>\n        /// <value>The texture format of the output.</value>\n        [DefaultValue(typeof(TextureProcessorOutputFormat), \"Compressed\")]\n        [DisplayName(\"Texture Format\")]\n        [Description(\"Specifies the SurfaceFormat type of processed textures. Textures can either remain unchanged from the source asset, converted to the Color format, or DXT compressed.\")]\n        public virtual TextureProcessorOutputFormat TextureFormat { get { return textureFormat; } set { textureFormat = value; } }\n\n        /// <summary>\n        /// Initializes a new instance of the MaterialProcessor class.\n        /// </summary>\n        public MaterialProcessor()\n        {\n            colorKeyColor = new Color(255, 0, 255, 255);\n            colorKeyEnabled = true;\n            defaultEffect = MaterialProcessorDefaultEffect.BasicEffect;\n            generateMipmaps = true;\n            premultiplyTextureAlpha = true;\n            resizeTexturesToPowerOfTwo = false;\n            textureFormat = TextureProcessorOutputFormat.Compressed;\n        }\n\n        /// <summary>\n        /// Builds effect content.\n        /// </summary>\n        /// <param name=\"effect\">An external reference to the effect content.</param>\n        /// <param name=\"context\">Context for the specified processor.</param>\n        /// <returns>A platform-specific compiled binary effect.</returns>\n        /// <remarks>If the input to process is of type EffectMaterialContent, this function will be called to request that the EffectContent be built. The EffectProcessor is used to process the EffectContent. Subclasses of MaterialProcessor can override this function to modify the parameters used to build EffectContent. For example, a different version of this function could request a different processor for the EffectContent.</remarks>\n        protected virtual ExternalReference<CompiledEffectContent> BuildEffect(ExternalReference<EffectContent> effect, ContentProcessorContext context)\n        {\n            return context.BuildAsset<EffectContent, CompiledEffectContent>(effect, \"EffectProcessor\");\n        }\n\n        /// <summary>\n        /// Builds texture content.\n        /// </summary>\n        /// <param name=\"textureName\">The name of the texture. This should correspond to the key used to store the texture in Textures.</param>\n        /// <param name=\"texture\">The asset to build. This should be a member of Textures.</param>\n        /// <param name=\"context\">Context for the specified processor.</param>\n        /// <returns>The built texture content.</returns>\n        /// <remarks>textureName can be used to determine which processor to use. For example, if a texture is being used as a normal map, the user may not want to use the ModelTextureProcessor on it, which compresses textures.</remarks>\n        protected virtual ExternalReference<TextureContent> BuildTexture(string textureName, ExternalReference<TextureContent> texture, ContentProcessorContext context)\n        {\n            OpaqueDataDictionary parameters = new OpaqueDataDictionary();\n            parameters.Add(\"ColorKeyColor\", ColorKeyColor);\n            parameters.Add(\"ColorKeyEnabled\", ColorKeyEnabled);\n            parameters.Add(\"GenerateMipmaps\", GenerateMipmaps);\n            parameters.Add(\"PremultiplyAlpha\", PremultiplyTextureAlpha);\n            parameters.Add(\"ResizeToPowerOfTwo\", ResizeTexturesToPowerOfTwo);\n            parameters.Add(\"TextureFormat\", TextureFormat);\n\n            return context.BuildAsset<TextureContent, TextureContent>(texture, \"TextureProcessor\", parameters, \"TextureImporter\", null);\n        }\n\n        /// <summary>\n        /// Builds the texture and effect content for the material.\n        /// </summary>\n        /// <param name=\"input\">The material content to build.</param>\n        /// <param name=\"context\">Context for the specified processor.</param>\n        /// <returns>The built material.</returns>\n        /// <remarks>If the MaterialContent is of type EffectMaterialContent, a build is requested for Effect, and validation will be performed on the OpaqueData to ensure that all parameters are valid input to SetValue or SetValueTranspose. If the MaterialContent is a BasicMaterialContent, no validation will be performed on OpaqueData. Process requests builds for all textures in Textures, unless the MaterialContent is of type BasicMaterialContent, in which case a build will only be requested for DiffuseColor. The textures in Textures will be ignored.</remarks>\n        public override MaterialContent Process(MaterialContent input, ContentProcessorContext context)\n        {\n            // Apply specified default effect.\n            if (input is BasicMaterialContent && DefaultEffect != MaterialProcessorDefaultEffect.BasicEffect)\n            {\n                MaterialContent newMaterial = CreateDefaultMaterial(DefaultEffect);\n                \n                // Preserve material properties.\n                newMaterial.Name = input.Name;\n                newMaterial.Identity = input.Identity;\n                foreach (KeyValuePair<string,object> item in input.OpaqueData)\n                    newMaterial.OpaqueData.Add(item.Key, item.Value);\n                foreach (var item in input.Textures)\n                    newMaterial.Textures.Add(item.Key, item.Value);\n                \n                input = newMaterial;\n            }\n\n            // Docs say that if it's a basic effect, only build the diffuse texture.\n            BasicMaterialContent basic = input as BasicMaterialContent;\n            if (basic != null)\n            {\n                ExternalReference<TextureContent> texture;\n                if (basic.Textures.TryGetValue(BasicMaterialContent.TextureKey, out texture))\n                    basic.Texture = BuildTexture(texture.Filename, texture, context);\n\n                return basic;\n            }\n\n            // Build custom effects\n            EffectMaterialContent effectMaterial = input as EffectMaterialContent;\n            if (effectMaterial != null && effectMaterial.CompiledEffect == null)\n            {\n                if (effectMaterial.Effect == null)\n                    throw new PipelineException(\"EffectMaterialContent.Effect or EffectMaterialContent.CompiledEffect should be set for materials with a custom effect.\");\n                effectMaterial.CompiledEffect = BuildEffect(effectMaterial.Effect, context);\n                // TODO: Docs say to validate OpaqueData for SetValue/SetValueTranspose\n                // Does that mean to match up with effect param names??\n            }\n\n            // Build all textures\n            List<string> keys = new List<string>(input.Textures.Keys);\n            foreach (string key in keys)\n            {\n                ExternalReference<TextureContent> texture = input.Textures[key];\n                ExternalReference<TextureContent> builtTexture = BuildTexture(texture.Filename, texture, context);\n                input.Textures[key] = builtTexture;\n            }\n\n            return input;\n        }\n\n        /// <summary>\n        /// Helper method which returns the material for a default effect.\n        /// </summary>\n        /// <returns>A material.</returns>\n        public static MaterialContent CreateDefaultMaterial(MaterialProcessorDefaultEffect effect)\n        {\n            switch (effect)\n            {\n                case MaterialProcessorDefaultEffect.BasicEffect:\n                    return new BasicMaterialContent();\n                case MaterialProcessorDefaultEffect.SkinnedEffect:\n                    return new SkinnedMaterialContent();\n                case MaterialProcessorDefaultEffect.EnvironmentMapEffect:\n                    return new EnvironmentMapMaterialContent();\n                case MaterialProcessorDefaultEffect.DualTextureEffect:\n                    return new DualTextureMaterialContent();\n                case MaterialProcessorDefaultEffect.AlphaTestEffect:\n                    return new AlphaTestMaterialContent();\n                default:\n                    throw new ArgumentOutOfRangeException();\n            }\n        }\n\n        /// <summary>\n        /// Helper method which returns the default effect for a material.\n        /// </summary>\n        /// <returns>The default effect.</returns>\n        public static MaterialProcessorDefaultEffect GetDefaultEffect(MaterialContent content)\n        {\n            if (content is AlphaTestMaterialContent)\n                return MaterialProcessorDefaultEffect.AlphaTestEffect;\n            if (content is BasicMaterialContent)\n                return MaterialProcessorDefaultEffect.BasicEffect;\n            if (content is DualTextureMaterialContent)\n                return MaterialProcessorDefaultEffect.DualTextureEffect;\n            if (content is EnvironmentMapMaterialContent)\n                return MaterialProcessorDefaultEffect.EnvironmentMapEffect;\n            if (content is SkinnedMaterialContent)\n                return MaterialProcessorDefaultEffect.SkinnedEffect;\n\n            throw new ArgumentOutOfRangeException(\"Unknown material content type!\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/MaterialProcessorDefaultEffect.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Specifies the default effect type.\n    /// </summary>\n    public enum MaterialProcessorDefaultEffect\n    {\n        /// <summary>\n        /// A BasicEffect Class effect.\n        /// </summary>\n        BasicEffect = 0,\n\n        /// <summary>\n        /// A SkinnedEffect Class effect.\n        /// </summary>\n        SkinnedEffect = 1,\n\n        /// <summary>\n        /// An EnvironmentMapEffect Class effect.\n        /// </summary>\n        EnvironmentMapEffect = 2,\n\n        /// <summary>\n        /// A DualTextureEffect Class effect.\n        /// </summary>\n        DualTextureEffect = 3,\n\n        /// <summary>\n        /// An AlphaTestEffect Class effect.\n        /// </summary>\n        AlphaTestEffect = 4,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelBoneContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    public sealed class ModelBoneContent\n    {\n        private ModelBoneContentCollection _children;\n        private int _index;\n        private string _name;\n        private ModelBoneContent _parent;\n        private Matrix _transform;\n\n        internal ModelBoneContent() { }\n\n        internal ModelBoneContent(string name, int index, Matrix transform, ModelBoneContent parent)\n        {\n            _name = name;\n            _index = index;\n            _transform = transform;\n            _parent = parent;\n        }\n\n        public ModelBoneContentCollection Children\n        {\n            get { return _children; }\n            internal set { _children = value; }\n        }\n\n        public int Index\n        {\n            get { return _index; }\n        }\n\n        public string Name\n        {\n            get { return _name; }\n        }\n\n        public ModelBoneContent Parent\n        {\n            get { return _parent; }\n        }\n\n        public Matrix Transform\n        {\n            get { return _transform; }\n            set { _transform = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelBoneContentCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    public sealed class ModelBoneContentCollection : ReadOnlyCollection<ModelBoneContent>\n    {\n        internal ModelBoneContentCollection(IList<ModelBoneContent> list) : base(list)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    public sealed class ModelContent\n    {\n        private ModelBoneContentCollection _bones;\n        private ModelMeshContentCollection _meshes;\n        private ModelBoneContent _root;\n\n        internal ModelContent() { }\n\n        internal ModelContent(ModelBoneContent root, IList<ModelBoneContent> bones, IList<ModelMeshContent> meshes)\n        {\n            _root = root;\n            _bones = new ModelBoneContentCollection(bones);\n            _meshes = new ModelMeshContentCollection(meshes);\n        }\n\n        public ModelBoneContentCollection Bones\n        {\n            get { return _bones; }\n        }\n\n        public ModelMeshContentCollection Meshes\n        {\n            get { return _meshes; }\n        }\n\n        public ModelBoneContent Root\n        {\n            get { return _root; }\n        }\n\n        public object Tag { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelMeshContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    public sealed class ModelMeshContent\n    {\n        private BoundingSphere _boundingSphere;\n        private ModelMeshPartContentCollection _meshParts;\n        private string _name;\n        private ModelBoneContent _parentBone;\n        private MeshContent _sourceMesh;\n\n        internal ModelMeshContent() { }\n\n        internal ModelMeshContent(string name, MeshContent sourceMesh, ModelBoneContent parentBone,\n                                  BoundingSphere boundingSphere, IList<ModelMeshPartContent> meshParts)\n        {\n            _name = name;\n            _sourceMesh = sourceMesh;\n            _parentBone = parentBone;\n            _boundingSphere = boundingSphere;\n            _meshParts = new ModelMeshPartContentCollection(meshParts);\n        }\n\n        public BoundingSphere BoundingSphere\n        {\n            get { return _boundingSphere; }\n        }\n\n        public ModelMeshPartContentCollection MeshParts\n        {\n            get { return _meshParts; }\n        }\n\n        public string Name\n        {\n            get { return _name; }\n        }\n\n        public ModelBoneContent ParentBone\n        {\n            get { return _parentBone; }\n        }\n\n        public MeshContent SourceMesh\n        {\n            get { return _sourceMesh; }\n        }\n\n        public object Tag { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelMeshContentCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    public sealed class ModelMeshContentCollection : ReadOnlyCollection<ModelMeshContent>\n    {\n        internal ModelMeshContentCollection(IList<ModelMeshContent> list)\n            : base(list)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelMeshPartContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    public sealed class ModelMeshPartContent\n    {\n        private IndexCollection _indexBuffer;\n        private MaterialContent _material;\n        private int _numVertices;\n        private int _primitiveCount;\n        private int _startIndex;\n        private VertexBufferContent _vertexBuffer;\n        private int _vertexOffset;\n\n        internal ModelMeshPartContent() { }\n\n        internal ModelMeshPartContent(VertexBufferContent vertexBuffer, IndexCollection indices, int vertexOffset,\n                                      int numVertices, int startIndex, int primitiveCount)\n        {\n            _vertexBuffer = vertexBuffer;\n            _indexBuffer = indices;\n            _vertexOffset = vertexOffset;\n            _numVertices = numVertices;\n            _startIndex = startIndex;\n            _primitiveCount = primitiveCount;\n        }\n\n        public IndexCollection IndexBuffer\n        {\n            get { return _indexBuffer; }\n        }\n\n        public MaterialContent Material\n        {\n            get { return _material; }\n            set { _material = value; }\n        }\n\n        public int NumVertices\n        {\n            get { return _numVertices; }\n        }\n\n        public int PrimitiveCount\n        {\n            get { return _primitiveCount; }\n        }\n\n        public int StartIndex\n        {\n            get { return _startIndex; }\n        }\n\n        public object Tag { get; set; }\n\n        public VertexBufferContent VertexBuffer\n        {\n            get { return _vertexBuffer; }\n        }\n\n        public int VertexOffset\n        {\n            get { return _vertexOffset; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelMeshPartContentCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    public sealed class ModelMeshPartContentCollection : ReadOnlyCollection<ModelMeshPartContent>\n    {\n        internal ModelMeshPartContentCollection(IList<ModelMeshPartContent> list)\n            : base(list)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    [ContentProcessor(DisplayName = \"Model - KNI\")]\n    public class ModelProcessor : ContentProcessor<NodeContent, ModelContent>\n    {\n        private ContentIdentity _identity;\n\n        #region Fields for default values\n\n        private bool _colorKeyEnabled = true;\n        private bool _generateMipmaps = true;\n        private bool _premultiplyTextureAlpha = true;\n        private bool _premultiplyVertexColors = true;\n        private float _scale = 1.0f;\n        private TextureProcessorOutputFormat _textureFormat = TextureProcessorOutputFormat.Compressed;\n\n        #endregion\n\n        public ModelProcessor()\n        {\n            ColorKeyColor = new Color(255, 0, 255, 255);\n        }\n\n        #region Properties\n\n        [DefaultValue(typeof(Color), \"255,0,255,255\")]\n        public virtual Color ColorKeyColor { get; set; }\n\n        [DefaultValue(true)]\n        public virtual bool ColorKeyEnabled\n        {\n            get { return _colorKeyEnabled; }\n            set { _colorKeyEnabled = value; }\n        }\n\n        public virtual MaterialProcessorDefaultEffect DefaultEffect { get; set; }\n\n        [DefaultValue(true)]\n        public virtual bool GenerateMipmaps\n        {\n            get { return _generateMipmaps; }\n            set { _generateMipmaps = value; }\n        }\n\n        public virtual bool GenerateNormals { get; set; }\n\n        public virtual bool GenerateTangentFrames { get; set; }\n\n        [DefaultValue(true)]\n        public virtual bool PremultiplyTextureAlpha\n        {\n            get { return _premultiplyTextureAlpha; }\n            set { _premultiplyTextureAlpha = value; }\n        }\n\n        [DefaultValue(true)]\n        public virtual bool PremultiplyVertexColors\n        {\n            get { return _premultiplyVertexColors; }\n            set { _premultiplyVertexColors = value; }\n        }\n\n        public virtual bool ResizeTexturesToPowerOfTwo { get; set; }\n\n        public virtual float RotationX { get; set; }\n\n        public virtual float RotationY { get; set; }\n\n        public virtual float RotationZ { get; set; }\n\n        [DefaultValue(1.0f)]\n        public virtual float Scale\n        {\n            get { return _scale; }\n            set { _scale = value; }\n        }\n\n        public virtual bool SwapWindingOrder { get; set; }\n\n\t\t[DefaultValue(typeof(TextureProcessorOutputFormat), \"Compressed\")]\n        public virtual TextureProcessorOutputFormat TextureFormat\n        {\n            get { return _textureFormat; }\n            set { _textureFormat = value; }\n        }\n\n        #endregion\n\n        public override ModelContent Process(NodeContent input, ContentProcessorContext context)\n        {\n            _identity = input.Identity;\n\n            // Perform the processor transforms.\n            if (RotationX != 0.0f || RotationY != 0.0f || RotationZ != 0.0f || Scale != 1.0f)\n            {\n                Matrix rotX  = Matrix.CreateRotationX(MathHelper.ToRadians(RotationX));\n                Matrix rotY  = Matrix.CreateRotationY(MathHelper.ToRadians(RotationY));\n                Matrix rotZ  = Matrix.CreateRotationZ(MathHelper.ToRadians(RotationZ));\n                Matrix scale = Matrix.CreateScale(Scale);\n                MeshHelper.TransformScene(input, rotZ * rotX * rotY * scale);\n            }\n\n            // Gather all the nodes in tree traversal order.\n            List<NodeContent> nodes = input.AsEnumerable().SelectDeep(n => n.Children).ToList();\n\n            List<MeshContent> meshes = nodes.FindAll(n => n is MeshContent).Cast<MeshContent>().ToList();\n            List<GeometryContent> geometries = meshes.SelectMany(m => m.Geometry).ToList();\n            List<MaterialContent> distinctMaterials = geometries.Select(g => g.Material).Distinct().ToList();\n\n            // Loop through all distinct materials, passing them through the conversion method\n            // only once, and then processing all geometries using that material.\n            foreach (MaterialContent inputMaterial in distinctMaterials)\n            {\n                List<GeometryContent> geomsWithMaterial = geometries.Where(g => g.Material == inputMaterial).ToList();\n                MaterialContent material = ConvertMaterial(inputMaterial, context);\n\n                ProcessGeometryUsingMaterial(material, geomsWithMaterial, context);\n            }\n\n            List<ModelBoneContent> boneList = new List<ModelBoneContent>();\n            List<ModelMeshContent> meshList = new List<ModelMeshContent>();\n            ModelBoneContent rootNode = ProcessNode(input, null, boneList, meshList, context);\n\n            return new ModelContent(rootNode, boneList, meshList);\n        }\n\n        private ModelBoneContent ProcessNode(NodeContent node, ModelBoneContent parent, List<ModelBoneContent> boneList, List<ModelMeshContent> meshList, ContentProcessorContext context)\n        {\n            ModelBoneContent result = new ModelBoneContent(node.Name, boneList.Count, node.Transform, parent);\n            boneList.Add(result);\n\n            if (node is MeshContent)\n                meshList.Add(ProcessMesh(node as MeshContent, result, context));\n\n            List<ModelBoneContent> children = new List<ModelBoneContent>();\n            foreach (NodeContent child in node.Children)\n                children.Add(ProcessNode(child, result, boneList, meshList, context));\n            result.Children = new ModelBoneContentCollection(children);\n\n            return result;\n        }\n\n        private ModelMeshContent ProcessMesh(MeshContent mesh, ModelBoneContent parent, ContentProcessorContext context)\n        {\n            List<ModelMeshPartContent> parts = new List<ModelMeshPartContent>();\n            VertexBufferContent vertexBuffer = null;\n            IndexCollection indexBuffer = new IndexCollection();\n            \n            if (GenerateNormals)\n            {\n                context.Logger.LogMessage(\"Generating normals.\");\n                MeshHelper.CalculateNormals(mesh, false);\n            }\n\n            if (GenerateTangentFrames)\n            {\n                context.Logger.LogMessage(\"Generating tangent frames.\");\n                foreach (GeometryContent geometry in mesh.Geometry)\n                {\n                    if (!geometry.Vertices.Channels.Contains(VertexChannelNames.Normal(0)))\n                    {\n                        MeshHelper.CalculateNormals(geometry, true);\n                    }\n\n                    if(!geometry.Vertices.Channels.Contains(VertexChannelNames.Tangent(0))\n                    || !geometry.Vertices.Channels.Contains(VertexChannelNames.Binormal(0)))\n                    {\n                        MeshHelper.CalculateTangentFrames(geometry, VertexChannelNames.TextureCoordinate(0), VertexChannelNames.Tangent(0),\n                            VertexChannelNames.Binormal(0));\n                    }\n                }\n            }\n\n            int startVertex = 0;\n            foreach (GeometryContent geometry in mesh.Geometry)\n            {\n                VertexContent vertices = geometry.Vertices;\n                int vertexCount = vertices.VertexCount;\n                ModelMeshPartContent partContent;\n                if (vertexCount == 0)\n                {\n                    partContent = new ModelMeshPartContent();\n                }\n                else\n                {\n                    if (vertexBuffer == null)\n                    {\n                        vertexBuffer = geometry.Vertices.CreateVertexBuffer();\n                    }\n                    else\n                    {\n                        VertexDeclarationContent vertexDeclaration = new VertexDeclarationContent();\n                        geometry.Vertices.SetupVertexDeclaration(vertexDeclaration);\n\n                        if (vertexBuffer.VertexDeclaration.VertexStride != vertexDeclaration.VertexStride\n                        ||  vertexBuffer.VertexDeclaration.VertexElements.Count != vertexDeclaration.VertexElements.Count)\n                            throw new InvalidOperationException(\"Invalid geometry\");\n\n                        int stride = vertexDeclaration.VertexStride.Value;\n                        int bufferOffset0 = vertexBuffer.VertexData.Length;\n                        vertexBuffer.Write(bufferOffset0, stride, geometry.Vertices.Positions);\n\n                        Collection<VertexElement> vertexElements = vertexBuffer.VertexDeclaration.VertexElements;\n                        for (int ve = 0; ve < vertexElements.Count; ve++)\n                        {\n                            VertexElement vertexElement = vertexElements[ve];\n\n                            // find channel\n                            string channelName = vertexElement.VertexElementUsage.ToString() + vertexElement.UsageIndex.ToString();\n                            if (channelName == \"Position0\")\n                                continue;\n                            VertexChannel channel = geometry.Vertices.Channels.First(ch => ch.Name == channelName);\n\n                            int channelOffset = vertexElement.Offset;\n                            Type channelType = channel.ElementType;\n                            vertexBuffer.Write(bufferOffset0 + channelOffset, stride, channelType, channel);\n                        }\n                    }\n\n                    int startIndex = indexBuffer.Count;\n                    indexBuffer.AddRange(geometry.Indices);\n\n                    partContent = new ModelMeshPartContent(vertexBuffer, indexBuffer, startVertex, vertexCount, startIndex, geometry.Indices.Count / 3);\n\n                    startVertex += vertexCount;\n                }\n\n                partContent.Material = geometry.Material;\n                parts.Add(partContent);\n            }\n\n            BoundingSphere bounds = new BoundingSphere();\n            if (mesh.Positions.Count > 0)\n                bounds = BoundingSphere.CreateFromPoints(mesh.Positions);\n\n            return new ModelMeshContent(mesh.Name, mesh, parent, bounds, parts);\n        }\n\n        protected virtual MaterialContent ConvertMaterial(MaterialContent material, ContentProcessorContext context)\n        {\n            OpaqueDataDictionary parameters = new OpaqueDataDictionary();\n            parameters.Add(\"ColorKeyColor\", ColorKeyColor);\n            parameters.Add(\"ColorKeyEnabled\", ColorKeyEnabled);\n            parameters.Add(\"GenerateMipmaps\", GenerateMipmaps);\n            parameters.Add(\"PremultiplyTextureAlpha\", PremultiplyTextureAlpha);\n            parameters.Add(\"ResizeTexturesToPowerOfTwo\", ResizeTexturesToPowerOfTwo);\n            parameters.Add(\"TextureFormat\", TextureFormat);\n            parameters.Add(\"DefaultEffect\", DefaultEffect);\n\n            return context.Convert<MaterialContent, MaterialContent>(material, \"MaterialProcessor\", parameters);\n        }\n\n        protected virtual void ProcessGeometryUsingMaterial(MaterialContent material,\n                                                            IEnumerable<GeometryContent> geometryCollection,\n                                                            ContentProcessorContext context)\n        {\n            // If we don't get a material then assign a default one.\n            if (material == null)\n                material = MaterialProcessor.CreateDefaultMaterial(DefaultEffect);\n\n            // Test requirements from the assigned material.\n            int textureChannels;\n            bool vertexWeights = false;\n            if (material is DualTextureMaterialContent)\n            {\n                textureChannels = 2;\n            }\n            else if (material is SkinnedMaterialContent)\n            {\n                textureChannels = 1;\n                vertexWeights = true;\n            }\n            else if (material is EnvironmentMapMaterialContent)\n            {\n                textureChannels = 1;\n            }\n            else if (material is AlphaTestMaterialContent)\n            {\n                textureChannels = 1;\n            }\n            else\n            {\n                // Just check for a \"Texture\" which should cover custom Effects\n                // and BasicEffect which can have an optional texture.\n                textureChannels = material.Textures.ContainsKey(\"Texture\") ? 1 : 0;                \n            }\n\n            // By default we must set the vertex color property\n            // to match XNA behavior.\n            material.OpaqueData[\"VertexColorEnabled\"] = false;\n\n            // If we run into a geometry that requires vertex\n            // color we need a seperate material for it.\n            MaterialContent colorMaterial = material.Clone();\n            colorMaterial.OpaqueData[\"VertexColorEnabled\"] = true;    \n\n            foreach (GeometryContent geometry in geometryCollection)\n            {\n                // Process the geometry.\n                for (int i = 0; i < geometry.Vertices.Channels.Count; i++)\n                    ProcessVertexChannel(geometry, i, context);\n\n                // Verify we have the right number of texture coords.\n                for (int i = 0; i < textureChannels; i++)\n                {\n                    if (!geometry.Vertices.Channels.Contains(VertexChannelNames.TextureCoordinate(i)))\n                        throw new InvalidContentException(\n                            String.Format(\"The mesh \\\"{0}\\\", using {1}, contains geometry that is missing texture coordinates for channel {2}.\", \n                            geometry.Parent.Name,\n                            MaterialProcessor.GetDefaultEffect(material),\n                            i),\n                            _identity);\n                }\n\n                // Do we need to enable vertex color?\n                if (geometry.Vertices.Channels.Contains(VertexChannelNames.Color(0)))\n                    geometry.Material = colorMaterial;\n                else\n                    geometry.Material = material;\n\n                // Do we need vertex weights?\n                if (vertexWeights)\n                {\n                    string weightsName = VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, 0);\n                    if (!geometry.Vertices.Channels.Contains(weightsName))\n                        throw new InvalidContentException(\n                            String.Format(\"The skinned mesh \\\"{0}\\\" contains geometry without any vertex weights.\", geometry.Parent.Name),\n                            _identity);                    \n                }\n            }\n        }\n\n        protected virtual void ProcessVertexChannel(GeometryContent geometry,\n                                                    int vertexChannelIndex,\n                                                    ContentProcessorContext context)\n        {\n            VertexChannel vertexChannel = geometry.Vertices.Channels[vertexChannelIndex];\n\n            // TODO: According to docs, channels with VertexElementUsage.Color -> Color\n\n            // Channels[VertexChannelNames.Weights] -> { Byte4 boneIndices, Color boneWeights }\n            if (vertexChannel.Name.StartsWith(VertexChannelNames.Weights()))\n                ProcessWeightsChannel(geometry, vertexChannelIndex, _identity);\n        }\n\n        private static void ProcessWeightsChannel(GeometryContent geometry, int vertexChannelIndex, ContentIdentity identity)\n        {\n            // NOTE: Portions of this code is from the XNA CPU Skinning \n            // sample under Ms-PL, (c) Microsoft Corporation.\n\n            // create a map of Name->Index of the bones\n            BoneContent skeleton = MeshHelper.FindSkeleton(geometry.Parent);\n            if (skeleton == null)\n            {\n                throw new InvalidContentException(\n                    \"Skeleton not found. Meshes that contain a Weights vertex channel cannot be processed without access to the skeleton data.\",\n                    identity);                     \n            }\n\n            Dictionary<string, int> boneIndices = new Dictionary<string, int>();\n            IList<BoneContent> flattenedBones = MeshHelper.FlattenSkeleton(skeleton);\n            for (int i = 0; i < flattenedBones.Count; i++)\n                boneIndices.Add(flattenedBones[i].Name, i);\n\n            VertexChannel vertexChannel = geometry.Vertices.Channels[vertexChannelIndex];\n            VertexChannel<BoneWeightCollection> inputWeights = vertexChannel as VertexChannel<BoneWeightCollection>;\n            if (inputWeights == null)\n            {\n                throw new InvalidContentException(\n                    String.Format(\n                        \"Vertex channel \\\"{0}\\\" is the wrong type. It has element type {1}. Type {2} is expected.\",\n                        vertexChannel.Name,\n                        vertexChannel.ElementType.FullName,\n                        \"Microsoft.Xna.Framework.Content.Pipeline.Graphics.BoneWeightCollection\"),\n                    identity);                          \n            }\n            Byte4[] outputIndices = new Byte4[inputWeights.Count];\n            Vector4[] outputWeights = new Vector4[inputWeights.Count];\n            for (int i = 0; i < inputWeights.Count; i++)\n                ConvertWeights(inputWeights[i], boneIndices, outputIndices, outputWeights, i);\n\n            // create our new channel names\n            int usageIndex = VertexChannelNames.DecodeUsageIndex(inputWeights.Name);\n            string indicesName = VertexChannelNames.EncodeName(VertexElementUsage.BlendIndices, usageIndex);\n            string weightsName = VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, usageIndex);\n\n            // add in the index and weight channels\n            geometry.Vertices.Channels.Insert(vertexChannelIndex + 1, indicesName, outputIndices);\n            geometry.Vertices.Channels.Insert(vertexChannelIndex + 2, weightsName, outputWeights);\n\n            // remove the original weights channel\n            geometry.Vertices.Channels.RemoveAt(vertexChannelIndex);\n        }\n\n        // From the XNA CPU Skinning Sample under Ms-PL, (c) Microsoft Corporation\n        private static void ConvertWeights(BoneWeightCollection weights, Dictionary<string, int> boneIndices, Byte4[] outIndices, Vector4[] outWeights, int vertexIndex)\n        {\n            // we only handle 4 weights per bone\n            const int maxWeights = 4;\n\n            // create some temp arrays to hold our values\n            int[] tempIndices = new int[maxWeights];\n            float[] tempWeights = new float[maxWeights];\n\n            // cull out any extra bones\n            weights.NormalizeWeights(maxWeights);\n\n            // get our indices and weights\n            for (int i = 0; i < weights.Count; i++)\n            {\n                BoneWeight weight = weights[i];\n\n                if (!boneIndices.ContainsKey(weight.BoneName))\n                {\n                    string errorMessage = String.Format(\"Bone '{0}' was not found in the skeleton! Skeleton bones are: '{1}'.\", weight.BoneName, string.Join(\"', '\", boneIndices.Keys));\n                    throw new Exception(errorMessage);\n                }\n\n                tempIndices[i] = boneIndices[weight.BoneName];\n                tempWeights[i] = weight.Weight;\n            }\n\n            // zero out any remaining spaces\n            for (int i = weights.Count; i < maxWeights; i++)\n            {\n                tempIndices[i] = 0;\n                tempWeights[i] = 0;\n            }\n\n            // output the values\n            outIndices[vertexIndex] = new Byte4(tempIndices[0], tempIndices[1], tempIndices[2], tempIndices[3]);\n            outWeights[vertexIndex] = new Vector4(tempWeights[0], tempWeights[1], tempWeights[2], tempWeights[3]);\n        }\n    }\n\n    internal static class ModelEnumerableExtensions\n    {\n        /// <summary>\n        /// Returns each element of a tree structure in hierarchical order.\n        /// </summary>\n        /// <typeparam name=\"T\">The enumerated type.</typeparam>\n        /// <param name=\"source\">The enumeration to traverse.</param>\n        /// <param name=\"selector\">A function which returns the children of the element.</param>\n        /// <returns>An IEnumerable whose elements are in tree structure heriarchical order.</returns>\n        public static IEnumerable<T> SelectDeep<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> selector)\n        {\n            Stack<T> stack = new Stack<T>(source.Reverse());\n            while (stack.Count > 0)\n            {\n                // Return the next item on the stack.\n                T item = stack.Pop();\n                yield return item;\n\n                // Get the children from this item.\n                IEnumerable<T> children = selector(item);\n\n                // If we have no children then skip it.\n                if (children == null)\n                    continue;\n\n                // We're using a stack, so we need to push the\n                // children on in reverse to get the correct order.\n                foreach (T child in children.Reverse())\n                    stack.Push(child);\n            }\n        }\n\n        /// <summary>\n        /// Returns an enumerable from a single element.\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"item\"></param>\n        /// <returns></returns>\n        public static IEnumerable<T> AsEnumerable<T>(this T item)\n        {\n            yield return item;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/SpriteFontContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n\tpublic class SpriteFontContent\n    {\n        internal Texture2DContent Texture = new Texture2DContent();\n        internal List<Rectangle> Glyphs = new List<Rectangle>();\n        internal List<Rectangle> Cropping = new List<Rectangle>();\n        internal List<char> CharacterMap = new List<char>();\n        internal List<Vector3> Kerning = new List<Vector3>();\n        internal int VerticalLineSpacing;\n        internal float HorizontalSpacing;\n\n        internal Nullable<char> DefaultCharacter;\n\n        internal SpriteFontContent()\n        {\n        }\n\n        internal SpriteFontContent(FontDescription desc)\n        {\n            FontName = desc.FontName;\n            Style = desc.Style;\n            FontSize = desc.Size;\n\n            CharacterMap = new List<char>(desc.Characters.Count);\n\n            VerticalLineSpacing = (int)desc.Spacing; // Will be replaced in the pipeline.\n            HorizontalSpacing = desc.Spacing;\n\n            DefaultCharacter = desc.DefaultCharacter;\n        }\n\n        internal string FontName = string.Empty;\n        FontDescriptionStyle Style = FontDescriptionStyle.Regular;\n        internal float FontSize; \n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/TextureProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    [ContentProcessor(DisplayName=\"Texture - KNI\")]\n    public class TextureProcessor : ContentProcessor<TextureContent, TextureContent>\n    {\n        public TextureProcessor()\n        {\n            ColorKeyColor = new Color(255, 0, 255, 255);\n            ColorKeyEnabled = true;\n            PremultiplyAlpha = true;\n        }\n\n        [DefaultValueAttribute(typeof(Color), \"255,0,255,255\")]\n        public virtual Color ColorKeyColor { get; set; }\n\n        [DefaultValueAttribute(true)]\n        public virtual bool ColorKeyEnabled { get; set; }\n\n        public virtual bool GenerateMipmaps { get; set; }\n\n        [DefaultValueAttribute(true)]\n        public virtual bool PremultiplyAlpha { get; set; }\n\n        public virtual bool ResizeToPowerOfTwo { get; set; }\n\n        public virtual bool MakeSquare { get; set; }\n\n        public virtual TextureProcessorOutputFormat TextureFormat { get; set; }\n\n        public override TextureContent Process(TextureContent input, ContentProcessorContext context)\n        {\n            SurfaceFormat format;\n            if (input.Faces[0][0].TryGetFormat(out format))\n            {\n                // If it is already a compressed format, we cannot do anything else so just return it\n                if (format.IsCompressedFormat())\n                    return input;\n            }\n\n            if (ColorKeyEnabled || ResizeToPowerOfTwo || MakeSquare || PremultiplyAlpha || GenerateMipmaps)\n            {\n                // Convert to floating point format for modifications. Keep the original format for conversion back later on if required.\n                var originalType = input.Faces[0][0].GetType();\n                try\n                {\n                    input.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>));\n                }\n                catch (Exception ex)\n                {\n                    context.Logger.LogImportantMessage(\"Could not convert input texture for processing. \" + ex.ToString());\n                    throw ex; \n                }\n\n                if (GenerateMipmaps)\n                    input.GenerateMipmaps(false);\n\n                for (int f = 0; f < input.Faces.Count; ++f)\n                {\n                    var face = input.Faces[f];\n                    for (int m = 0; m < face.Count; ++m)\n                    {\n                        var bmp = (PixelBitmapContent<Vector4>)face[m];\n\n                        if (ColorKeyEnabled)\n                        {\n                            bmp.ReplaceColor(ColorKeyColor.ToVector4(), Vector4.Zero);\n                        }\n\n                        if (ResizeToPowerOfTwo)\n                        {\n                            if (!GraphicsUtil.IsPowerOfTwo(bmp.Width) || !GraphicsUtil.IsPowerOfTwo(bmp.Height) || (MakeSquare && bmp.Height != bmp.Width))\n                            {\n                                var newWidth = GraphicsUtil.GetNextPowerOfTwo(bmp.Width);\n                                var newHeight = GraphicsUtil.GetNextPowerOfTwo(bmp.Height);\n                                if (MakeSquare)\n                                    newWidth = newHeight = Math.Max(newWidth, newHeight);\n                                var resized = new PixelBitmapContent<Vector4>(newWidth, newHeight);\n                                BitmapContent.Copy(bmp, resized);\n                                bmp = resized;\n                            }\n                        }\n                        else if (MakeSquare && bmp.Height != bmp.Width)\n                        {\n                            var newSize = Math.Max(bmp.Width, bmp.Height);\n                            var resized = new PixelBitmapContent<Vector4>(newSize, newSize);\n                            BitmapContent.Copy(bmp, resized);\n                        }\n\n                        if (PremultiplyAlpha)\n                            ProcessPremultiplyAlpha(bmp);\n\n                        face[m] = bmp;\n                    }\n                }\n\n                // If no change to the surface format was desired, change it back now before it early outs\n                if (TextureFormat == TextureProcessorOutputFormat.NoChange)\n                    input.ConvertBitmapType(originalType);\n            }\n\n            try\n            {\n                TextureProcessorOutputFormat textureFormat = GraphicsUtil.GetTextureFormatForPlatform(TextureFormat, context.TargetPlatform);\n\n                switch (textureFormat)\n                {\n                    case TextureProcessorOutputFormat.NoChange:\n                        // We do nothing in this case.\n                        break;\n                    case TextureProcessorOutputFormat.Color:\n                        // If this is color just make sure the format is right and return it.\n                        input.ConvertBitmapType(typeof(PixelBitmapContent<Color>));\n                        break;\n                    case TextureProcessorOutputFormat.Color16Bit:\n                        // Handle this common compression format.\n                        GraphicsUtil.CompressColor16Bit(input);\n                        break;\n\n                    case TextureProcessorOutputFormat.AtcCompressed:\n                        {\n                            input.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressAti(input);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.DxtCompressed:\n                        {\n                            input.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressDxt(input, context);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.Etc1Compressed:\n                        {\n                            input.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressEtc1(input, context);\n                        }\n                        break;\n                    case TextureProcessorOutputFormat.PvrCompressed:\n                        {\n                            input.ConvertBitmapType(typeof(PixelBitmapContent<Vector4>)); // Make sure we're in a floating point format\n                            GraphicsUtil.CompressPvrtc(input, context);\n                        }\n                        break;\n                }\n            }\n            catch (EntryPointNotFoundException ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not find the entry point to compress the texture. \" + ex.ToString());\n                throw;\n            }\n            catch (DllNotFoundException ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not compress texture. Required shared lib is missing. \" + ex.ToString());\n                throw;\n            }\n            catch (Exception ex)\n            {\n                context.Logger.LogImportantMessage(\"Could not convert texture. \" + ex.ToString());\n                throw;\n            }\n\n            return input;\n        }\n\n        internal static unsafe void ProcessPremultiplyAlpha(PixelBitmapContent<Vector4> bmp)\n        {\n            for (int y = 0; y < bmp.Height; y++)\n            {\n                Vector4[] row = bmp.GetRow(y);\n                fixed (Vector4* pdata = row)\n                {\n                    int count = bmp.Width;\n                    for (int x = 0; x < count; x++)\n                    {\n                        var a = pdata[x].W;\n                        pdata[x].X *= a;\n                        pdata[x].Y *= a;\n                        pdata[x].Z *= a;\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/TextureProcessorOutputFormat.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Specifies the target output (of type SurfaceFormat) of the texture processor. Used by TextureProcessor.TextureFormat.\n    /// </summary>\n    public enum TextureProcessorOutputFormat\n    {\n        /// <summary>\n        /// The SurfaceFormat value, of the input TextureContent object, is converted to Color by the processor. Typically used for 2D graphics and overlays.\n        /// </summary>\n        Color,\n\n        /// <summary>\n        /// The SurfaceFormat value, of the input TextureContent object, is converted to an appropriate DXT compression by the processor. If the input texture\n        /// contains fractional alpha values, it is converted to DXT5 format (8 bits per texel); otherwise it is converted to DXT1 (4 bits per texel). This\n        /// conversion reduces the resource's size on the graphics card. Typically used for 3D textures such as 3D model textures.\n        /// </summary>\n        DxtCompressed,\n\n        /// <summary>\n        /// The SurfaceFormat value, of the input TextureContent object, is not changed by the processor. Typically used for textures processed by an external tool.\n        /// </summary>\n        NoChange,\n\n        /// <summary>\n        /// The SurfaceFormat value, of the input TextureContent object, is converted to an appropriate compressed format for the target platform.\n        /// This can include PVRTC for iOS, DXT for desktop, Windows 8 and Windows Phone 8, and ETC1 or BGRA4444 for Android.\n        /// </summary>\n        Compressed,\n\n        /// <summary>\n        /// The pixel depth of the input texture is reduced to BGR565 for opaque textures, otherwise it uses BGRA4444.\n        /// </summary>\n        Color16Bit,\n\n        /// <summary>\n        /// The input texture is compressed using ETC1 texture compression.  Used on Android platforms.\n        /// </summary>\n        Etc1Compressed,\n\n        /// <summary>\n        /// The input texture is compressed using PVR texture compression. Used on iOS and some Android platforms.\n        /// </summary>\n        PvrCompressed,\n\n        /// <summary>\n        /// The input texture is compressed using ATI texture compression.  Used on some Android platforms.\n        /// </summary>\n        AtcCompressed,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/VertexBufferContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Provides methods and properties for managing a design-time vertex buffer that holds packed vertex data.\n    /// </summary>\n    /// <remarks>This type directly corresponds to the runtime VertexBuffer class, and when a VertexBufferContent object is passed to the content compiler, the vertex data deserializes directly into a VertexBuffer at runtime. VertexBufferContent objects are not directly created by importers. The preferred method is to store vertex data in the more flexible VertexContent class.</remarks>\n    public class VertexBufferContent : ContentItem\n    {\n        VertexDeclarationContent _vertexDeclaration;\n\n        readonly MemoryStream _memoryStream;\n\n        /// <summary>\n        /// Gets the array containing the raw bytes of the packed vertex data. Use this method to get and set the contents of the vertex buffer.\n        /// </summary>\n        /// <value>Raw data of the packed vertex data.</value>\n        public byte[] VertexData \n        {\n            get\n            {\n                byte[] result = _memoryStream.ToArray();\n                return result;\n            }\n        }\n\n        /// <summary>\n        /// Gets and sets the associated VertexDeclarationContent object.\n        /// </summary>\n        /// <value>The associated VertexDeclarationContent object.</value>\n        public VertexDeclarationContent VertexDeclaration\n        {\n            get { return _vertexDeclaration; }\n            set { _vertexDeclaration = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of VertexBufferContent.\n        /// </summary>\n        public VertexBufferContent()\n        {\n            _memoryStream = new MemoryStream();\n            _vertexDeclaration = new VertexDeclarationContent();\n        }\n\n        /// <summary>\n        /// Initializes a new instance of VertexBufferContent of the specified size.\n        /// </summary>\n        /// <param name=\"size\">The size of the vertex buffer content, in bytes.</param>\n        public VertexBufferContent(int size)\n            : base()\n        {\n            _memoryStream = new MemoryStream(size);\n            _vertexDeclaration = new VertexDeclarationContent();\n        }\n\n        /// <summary>\n        /// Gets the size of the specified type, in bytes.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <returns>The size of the specified type, in bytes.</returns>\n        /// <remarks>Call this method to compute offset parameters for the Write method. If the specified \n        /// data type cannot be packed into a vertex buffer—for example, if type is not a valid value type—a \n        /// NotSupportedException is thrown.</remarks>\n        /// <exception cref=\"NotSupportedException\">type is not a valid value type</exception>\n        public static int SizeOf(Type type)\n        {\n            if (!type.IsValueType || type.IsAutoLayout)\n                throw new NotSupportedException(\"The vertex type must be a struct and have a fixed layout\");\n\n            return Marshal.SizeOf(type);\n        }\n\n        /// <summary>\n        /// Gets the size of the specified type, in bytes.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <returns>The size of the specified type, in bytes.</returns>\n        /// <remarks>Call this method to compute offset parameters for the Write method. If the specified \n        /// data type cannot be packed into a vertex buffer—for example, if type is not a valid value type—a \n        /// NotSupportedException is thrown.</remarks>\n        /// <exception cref=\"NotSupportedException\">type is not a valid value type</exception>\n        public static int SizeOf<T>() where T : struct\n        {\n            Type type = typeof(T);\n            if (type.IsAutoLayout)\n                throw new NotSupportedException(\"The vertex type must have a fixed layout\");\n\n            return ReflectionHelpers.SizeOf<T>();\n        }\n\n        /// <summary>\n        /// Writes additional data into the vertex buffer. Writing begins at the specified byte offset, and each value is spaced according to the specified stride value (in bytes).\n        /// </summary>\n        /// <typeparam name=\"T\">Type being written.</typeparam>\n        /// <param name=\"offset\">Offset to begin writing at.</param>\n        /// <param name=\"stride\">Stride of the data being written, in bytes.</param>\n        /// <param name=\"data\">Enumerated collection of data.</param>\n        /// <exception cref=\"NotSupportedException\">The specified data type cannot be packed into a vertex buffer.</exception>\n        public void Write<T>(int offset, int stride, IEnumerable<T> data)\n        {\n            Write(offset, stride, typeof(T), data);\n        }\n\n        /// <summary>\n        /// Writes additional data into the vertex buffer. Writing begins at the specified byte offset, and each value is spaced according to the specified stride value (in bytes).\n        /// </summary>\n        /// <param name=\"offset\">Offset at which to begin writing.</param>\n        /// <param name=\"stride\">Stride of the data being written, in bytes.</param>\n        /// <param name=\"dataType\">The type of data to be written.</param>\n        /// <param name=\"data\">The data to write.</param>\n        /// <exception cref=\"NotSupportedException\">The specified data type cannot be packed into a vertex buffer.</exception>\n        public void Write(int offset, int stride, Type dataType, IEnumerable data)\n        {\n            int size = SizeOf(dataType);\n            byte[] bytes = new byte[size];\n            IntPtr ptr = Marshal.AllocHGlobal(size);\n\n            // NOTE: This is not a very fast way to serialize \n            // an unknown struct type, but it is reliable.\n            //\n            // Still the chances vertex buffer serialization\n            // being the bottleneck of the content pipeline\n            // are almost non-existent.\n\n            _memoryStream.Seek(offset, SeekOrigin.Begin);\n            foreach (object item in data)\n            {\n                long next = _memoryStream.Position + stride;\n                Marshal.StructureToPtr(item, ptr, false);\n                Marshal.Copy(ptr, bytes, 0, size);\n                _memoryStream.Write(bytes, 0, size);\n                _memoryStream.Seek(next, SeekOrigin.Begin);\n            }\n\n            Marshal.FreeHGlobal(ptr);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Processors/VertexDeclarationContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Provides methods and properties for maintaining the vertex declaration data of a VertexContent.\n    /// </summary>\n    public class VertexDeclarationContent : ContentItem\n    {\n        Collection<VertexElement> vertexElements;\n        int? vertexStride;\n\n        /// <summary>\n        /// Gets the VertexElement object of the vertex declaration.\n        /// </summary>\n        /// <value>The VertexElement object of the vertex declaration.</value>\n        public Collection<VertexElement> VertexElements { get { return vertexElements; } }\n\n        /// <summary>\n        /// The number of bytes from one vertex to the next.\n        /// </summary>\n        /// <value>The stride (in bytes).</value>\n        public int? VertexStride\n        {\n            get { return vertexStride; }\n            set { vertexStride = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of VertexDeclarationContent.\n        /// </summary>\n        public VertexDeclarationContent()\n        {\n            vertexElements = new Collection<VertexElement>();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Properties/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n\n[assembly:InternalsVisibleTo(\"Kni.Tests\")]\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"Font Debug ContentFont\": {\n      \"commandName\": \"Executable\",\n      \"executablePath\": \"X:\\\\kniEngine\\\\kni\\\\Tools\\\\MonoGame.Content.Builder\\\\bin\\\\Windows\\\\AnyCPU\\\\Debug\\\\net8.0-windows\\\\MGCB.exe\",\n      \"commandLineArgs\": \"/@:Content.mgcb /Rebuild /SingleThread\",\n      \"workingDirectory\": \"X:\\\\kniEngine\\\\kni\\\\\\\\Tests\\\\Assets\\\\Projects\\\\Content\\\\\"\n    }\n  }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/AlphaTestEffectWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class AlphaTestEffectWriter : ContentTypeWriterBase<AlphaTestMaterialContent>\n    {\n        protected override void Write(ContentWriter output, AlphaTestMaterialContent value)\n        {\n            output.WriteExternalReference(value.Textures.ContainsKey(AlphaTestMaterialContent.TextureKey) ? value.Texture : null);\n            output.Write((int)(value.AlphaFunction.HasValue ? value.AlphaFunction.Value : CompareFunction.Greater));\n            output.Write((int)(value.ReferenceAlpha.HasValue ? value.ReferenceAlpha.Value : 0));\n            output.Write(value.DiffuseColor.GetValueOrDefault());\n            output.Write(value.Alpha.GetValueOrDefault());\n            output.Write(value.VertexColorEnabled.GetValueOrDefault());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/BasicEffectWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class BasicEffectWriter : ContentTypeWriterBase<BasicMaterialContent>\n    {\n        protected override void Write(ContentWriter output, BasicMaterialContent value)\n        {\n            output.WriteExternalReference(value.Textures.ContainsKey(BasicMaterialContent.TextureKey) ? value.Texture : null);\n            output.Write(value.DiffuseColor ?? new Vector3(1, 1, 1));\n            output.Write(value.EmissiveColor ?? new Vector3(0, 0, 0));\n            output.Write(value.SpecularColor ?? new Vector3(1, 1, 1));\n            output.Write(value.SpecularPower ?? 16);\n            output.Write(value.Alpha ?? 1);\n            output.Write(value.VertexColorEnabled ?? false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/ColorWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing TOutput = Microsoft.Xna.Framework.Color;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Writes the Color value to the output.\n    /// </summary>\n    [ContentTypeWriter]\n    class ColorWriter : ContentTypeWriterBase<TOutput>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, TOutput value)\n        {\n            output.Write(value.R);\n            output.Write(value.G);\n            output.Write(value.B);\n            output.Write(value.A);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string typeNamespace = \"Microsoft.Xna.Framework\"; // Color namespace is not 'Microsoft.Xna.Framework.Graphics'\n            string typeName = TargetType.Name;\n            string typeAssembly = TargetType.Assembly.FullName;\n\n            if (typeAssembly.StartsWith(\"Xna.Framework.Graphics,\"))\n                typeAssembly = \"Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeType = typeNamespace + \".\" + typeName + \", \" + typeAssembly;\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/CompiledEffectWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class CompiledEffectWriter : ContentTypeWriterBase<CompiledEffectContent>\n    {\n        protected override void Write(ContentWriter output, CompiledEffectContent value)\n        {\n            byte[] bytecode = value.GetEffectCode();\n\n            output.Write(bytecode.Length);\n            output.Write(bytecode);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".EffectReader\";\n            string readerAssembly = \", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/ContentTypeWriterBase.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    /// <summary>\n    /// Base class for the built-in content type writers where the content type is the same as the runtime type.\n    /// </summary>\n    /// <typeparam name=\"T\">The content type being written.</typeparam>\n    internal abstract class ContentTypeWriterBase<T> : ContentTypeWriter<T>\n    {\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            // Change \"Writer\" in this class name to \"Reader\" and use the runtime type namespace and assembly\n            string readerName = this.GetType().Name.Replace(\"Writer\", \"Reader\");\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + \".\" + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string typeNamespace = \"Microsoft.Xna.Framework.Graphics\";\n            string typeName = TargetType.Name;\n            string typeAssembly = TargetType.Assembly.FullName;\n\n            if (typeAssembly.StartsWith(\"Xna.Framework.Graphics,\"))\n                typeAssembly = \"Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeType = typeNamespace + \".\" + typeName + \", \" + typeAssembly;\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/DualTextureEffectWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class DualTextureEffectWriter : ContentTypeWriterBase<DualTextureMaterialContent>\n    {\n        protected override void Write(ContentWriter output, DualTextureMaterialContent value)\n        {\n            output.WriteExternalReference(value.Textures.ContainsKey(DualTextureMaterialContent.TextureKey) ? value.Texture : null);\n            output.WriteExternalReference(value.Textures.ContainsKey(DualTextureMaterialContent.Texture2Key) ? value.Texture2 : null);\n            output.Write(value.DiffuseColor.HasValue ? value.DiffuseColor.Value : Vector3.One);\n            output.Write(value.Alpha.HasValue ? value.Alpha.Value : 1.0f);\n            output.Write(value.VertexColorEnabled.HasValue ? value.VertexColorEnabled.Value : false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/EffectMaterialWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class EffectMaterialWriter : ContentTypeWriterBase<EffectMaterialContent>\n    {\n        protected override void Write(ContentWriter output, EffectMaterialContent value)\n        {\n            output.WriteExternalReference(value.CompiledEffect);\n\n            Dictionary<string,object> dict = new Dictionary<string, object>();\n            foreach (KeyValuePair<string,ExternalReference<TextureContent>> item in value.Textures)\n            {\n                dict.Add(item.Key, item.Value);\n            }\n            foreach (KeyValuePair<string,object> item in value.OpaqueData)\n            {\n                if (item.Key != EffectMaterialContent.EffectKey && item.Key != EffectMaterialContent.CompiledEffectKey)\n                    dict.Add(item.Key, item.Value);\n            }\n            output.WriteObject(dict);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/EnvironmentMapEffectWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class EnvironmentMapEffectWriter : ContentTypeWriterBase<EnvironmentMapMaterialContent>\n    {\n        protected override void Write(ContentWriter output, EnvironmentMapMaterialContent value)\n        {\n            output.WriteExternalReference(value.Textures.ContainsKey(EnvironmentMapMaterialContent.TextureKey) ? value.Texture : null);\n            output.WriteExternalReference(value.Textures.ContainsKey(EnvironmentMapMaterialContent.EnvironmentMapKey) ? value.EnvironmentMap : null);\n            output.Write(value.EnvironmentMapAmount.HasValue ? value.EnvironmentMapAmount.Value : 1.0f);\n            output.Write(value.EnvironmentMapSpecular.HasValue ? value.EnvironmentMapSpecular.Value : Vector3.Zero);\n            output.Write(value.FresnelFactor.HasValue ? value.FresnelFactor.Value : 1.0f);\n            output.Write(value.DiffuseColor.HasValue ? value.DiffuseColor.Value : Vector3.One);\n            output.Write(value.EmissiveColor.HasValue ? value.EmissiveColor.Value : Vector3.Zero);\n            output.Write(value.Alpha.HasValue ? value.Alpha.Value : 1.0f);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/IndexBufferWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class IndexBufferWriter : ContentTypeWriterBase<IndexCollection>\n    {\n        protected override void Write(ContentWriter output, IndexCollection value)\n        {\n            // Check if the buffer and can be saved as Int16.\n            bool shortIndices = true;\n            foreach(int index in value)\n            {\n                if(index > ushort.MaxValue)\n                {\n                    shortIndices = false;\n                    break;\n                }\n            }\n\n            output.Write(shortIndices);\n\n            int indicesSize = shortIndices ? 2 : 4;\n            int byteCount = value.Count * indicesSize;\n\n            output.Write(byteCount);\n            if (shortIndices)\n            {\n                foreach (int item in value)\n                    output.Write((ushort)item);\n            }\n            else\n            {\n                foreach (int item in value)\n                    output.Write(item);\n            }\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".IndexBufferReader\";\n            string readerAssembly = \", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            Type type = typeof(ContentReader);\n\n            string runtimeType = type.Namespace + \".IndexBufferReader, \" + type.AssemblyQualifiedName;\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/ModelWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class ModelWriter : ContentTypeWriterBase<ModelContent>\n    {\n        protected override void Write(ContentWriter output, ModelContent value)\n        {\n            WriteBones(output, value.Bones);\n\n            output.Write((uint)value.Meshes.Count);\n            foreach (ModelMeshContent mesh in value.Meshes)\n            {\n                output.WriteObject(mesh.Name);\n                WriteBoneReference(output, mesh.ParentBone, value.Bones);\n                WriteBoundingSphere(output, mesh.BoundingSphere);\n                output.WriteObject(mesh.Tag);\n\n                output.Write((uint)mesh.MeshParts.Count);\n                foreach (ModelMeshPartContent part in mesh.MeshParts)\n                {\n                    output.Write((uint)part.VertexOffset);\n                    output.Write((uint)part.NumVertices);\n                    output.Write((uint)part.StartIndex);\n                    output.Write((uint)part.PrimitiveCount);\n                    output.WriteObject(part.Tag);\n\n                    output.WriteSharedResource(part.VertexBuffer);\n                    output.WriteSharedResource(part.IndexBuffer);\n                    output.WriteSharedResource(part.Material);\n                }\n            }\n\n            WriteBoneReference(output, value.Root, value.Bones);\n            output.WriteObject(value.Tag);\n        }\n\n        private void WriteBones(ContentWriter output, ModelBoneContentCollection bones)\n        {\n            output.Write((uint)bones.Count);\n\n            // Bone properties\n            foreach (ModelBoneContent bone in bones)\n            {\n                output.WriteObject(bone.Name);\n                output.Write(bone.Transform);\n            }\n\n            // Hierarchy\n            foreach (ModelBoneContent bone in bones)\n            {\n                WriteBoneReference(output, bone.Parent, bones);\n\n                output.Write((uint)bone.Children.Count);\n                foreach (ModelBoneContent child in bone.Children)\n                    WriteBoneReference(output, child, bones);\n            }\n        }\n\n        private void WriteBoneReference(ContentWriter output, ModelBoneContent bone, ModelBoneContentCollection bones)\n        {\n            int boneCount = (bones != null)\n                          ? bones.Count\n                          : 0;\n            int boneId = (bone != null)\n                       ? bone.Index + 1\n                       : 0;\n\n            if (boneCount < 255)\n                output.Write((byte)boneId);\n            else\n                output.Write((uint)boneId);\n        }\n\n        private static void WriteBoundingSphere(ContentWriter output, BoundingSphere value)\n        {\n            //output.WriteRawObject(boundingSphere);\n            output.Write(value.Center);\n            output.Write(value.Radius);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/SkinnedEffectWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class SkinnedEffectWriter : ContentTypeWriterBase<SkinnedMaterialContent>\n    {\n        protected override void Write(ContentWriter output, SkinnedMaterialContent value)\n        {\n            output.WriteExternalReference(value.Textures.ContainsKey(SkinnedMaterialContent.TextureKey) ? value.Texture : null);\n            output.Write(value.WeightsPerVertex.GetValueOrDefault(4));\n            output.Write(value.DiffuseColor.HasValue ? value.DiffuseColor.Value : Vector3.One);\n            output.Write(value.EmissiveColor.HasValue ? value.EmissiveColor.Value : Vector3.Zero);\n            output.Write(value.SpecularColor.HasValue ? value.SpecularColor.Value : Vector3.Zero);\n            output.Write(value.SpecularPower.HasValue ? value.SpecularPower.Value : 0);\n            output.Write(value.Alpha.HasValue ? value.Alpha.Value : 1.0f);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/SpriteFontWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    public class SpriteFontWriter : ContentTypeWriter<SpriteFontContent>\n    {\n        protected override void Write(ContentWriter output, SpriteFontContent value)\n        {\n            output.WriteObject(value.Texture);\n            output.WriteObject(value.Glyphs);\n            output.WriteObject(value.Cropping);\n            output.WriteObject(value.CharacterMap);\n            output.Write(value.VerticalLineSpacing);\n            output.Write(value.HorizontalSpacing);\n            output.WriteObject(value.Kerning);\n            var hasDefChar = value.DefaultCharacter.HasValue;\n            output.Write(hasDefChar);\n            if (hasDefChar)\n                output.Write(value.DefaultCharacter.Value);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".SpriteFontReader\";\n            string readerAssembly = \", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            // Base the reader type string from a known public class in the same namespace in the same assembly\n            Type type = typeof(ContentReader);\n\n\t\t\tstring runtimeType = type.Namespace + \".SpriteFontReader, \" + type.AssemblyQualifiedName;\n            return runtimeType;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/Texture2DWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class Texture2DWriter : ContentTypeWriterBase<Texture2DContent>\n    {\n        protected override void Write(ContentWriter output, Texture2DContent value)\n        {\n            MipmapChain mipmaps = value.Faces[0];   // Mipmap chain.\n            BitmapContent level0 = mipmaps[0];        // Most detailed mipmap level.\n\n            SurfaceFormat format;\n            if (!level0.TryGetFormat(out format))\n                throw new Exception(\"Couldn't get Format for TextureContent.\");\n\n            output.Write((int)format);\n            output.Write(level0.Width);\n            output.Write(level0.Height);\n            output.Write(mipmaps.Count);    // Number of mipmap levels.\n\n            foreach (BitmapContent level in mipmaps)\n            {\n                byte[] pixelData = level.GetPixelData();\n                output.Write(pixelData.Length);\n                output.Write(pixelData);\n            }\n        }\n        \n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".Texture2DReader\";\n            string readerAssembly = \", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/TextureCubeWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    internal class TextureCubeWriter : ContentTypeWriterBase<TextureCubeContent>\n    {\n        protected override void Write(ContentWriter output, TextureCubeContent value)\n        {\n            var mipmaps0 = value.Faces[0];  // Mipmap chain of face 0 (+X).\n            var level0 = mipmaps0[0];       // Most detailed mipmap level of face 0.\n\n            SurfaceFormat format;\n            if (!level0.TryGetFormat(out format))\n                throw new Exception(\"Couldn't get format for TextureCubeContent.\");\n\n            output.Write((int)format);      // Surface format\n            output.Write(level0.Width);     // Cube map size\n            output.Write(mipmaps0.Count);   // Number of mipmap levels\n\n            // The number of faces in TextureCubeContent is guaranteed to be 6.\n            foreach (var mipmaps in value.Faces)\n            {\n                foreach (var level in mipmaps)\n                {\n                    byte[] pixelData = level.GetPixelData();\n                    output.Write(pixelData.Length);\n                    output.Write(pixelData);\n                }\n            }\n        }\n        \n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".TextureCubeReader\";\n            string readerAssembly = \", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/TextureWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    internal class TextureWriter : ContentTypeWriterBase<TextureContent>\n    {\n        protected override void Write(ContentWriter output, TextureContent value)\n        {\n            // Do nothing.\n            // The TextureWriter is not used to write anything, but it is used by\n            // the ExternalReferenceWriter when an ExternalReference<TextureContent>\n            // is written! (See ExternalReferenceWriter implementation.)\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/VertexBufferWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class VertexBufferWriter : ContentTypeWriterBase<VertexBufferContent>\n    {\n        protected override void Write(ContentWriter output, VertexBufferContent value)\n        {\n            output.WriteRawObject(value.VertexDeclaration);\n\n            uint vertexCount = (uint)(value.VertexData.Length / value.VertexDeclaration.VertexStride);\n\n            int rem = (value.VertexData.Length % value.VertexDeclaration.VertexStride.Value);\n            if (rem != 0)\n                throw new PipelineException(\"Invalid VertexData.Length\");\n\n            output.Write((uint)vertexCount);\n            output.Write(value.VertexData);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/VertexDeclarationWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class VertexDeclarationWriter : ContentTypeWriterBase<VertexDeclarationContent>\n    {\n        protected override void Write(ContentWriter output, VertexDeclarationContent value)\n        {\n            // If fpr whatever reason there isn't a vertex stride defined, it's going to\n            // cause problems after reading it in, so better to fail early here.\n            output.Write((uint)value.VertexStride.Value);\n            output.Write((uint)value.VertexElements.Count);\n            foreach (VertexElement element in value.VertexElements)\n            {\n                output.Write((uint)element.Offset);\n                output.Write((int)element.VertexElementFormat);\n                output.Write((int)element.VertexElementUsage);\n                output.Write((uint)element.UsageIndex);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/TextureImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\nusing FreeImageAPI;\nusing StbImageSharp;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading texture files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(   \".bmp\", // Bitmap Image File\n                        \".cut\", // Dr Halo CUT\n                        \".dds\", // Direct Draw Surface\n                        \".g3\", // Raw Fax G3\n                        \".hdr\", // RGBE\n                        \".gif\", // Graphcis Interchange Format\n                        \".ico\", // Microsoft Windows Icon\n                        \".iff\", // Interchange File Format\n                        \".jbg\", \".jbig\", // JBIG\n                        \".jng\", \".jpg\", \".jpeg\", \".jpe\", \".jif\", \".jfif\", \".jfi\", // JPEG\n                        \".jp2\", \".j2k\", \".jpf\", \".jpx\", \".jpm\", \".mj2\", // JPEG 2000\n                        \".jxr\", \".hdp\", \".wdp\", // JPEG XR\n                        \".koa\", \".gg\", // Koala\n                        \".pcd\", // Kodak PhotoCD\n                        \".mng\", // Multiple-Image Network Graphics\n                        \".pcx\", //Personal Computer Exchange\n                        \".pbm\", \".pgm\", \".ppm\", \".pnm\", // Netpbm\n                        \".pfm\", // Printer Font Metrics\n                        \".png\", //Portable Network Graphics\n                        \".pict\", \".pct\", \".pic\", // PICT\n                        \".psd\", // Photoshop\n                        \".3fr\", \".ari\", \".arw\", \".bay\", \".crw\", \".cr2\", \".cap\", \".dcs\", // RAW\n                        \".dcr\", \".dng\", \".drf\", \".eip\", \".erf\", \".fff\", \".iiq\", \".k25\", // RAW\n                        \".kdc\", \".mdc\", \".mef\", \".mos\", \".mrw\", \".nef\", \".nrw\", \".obm\", // RAW\n                        \".orf\", \".pef\", \".ptx\", \".pxn\", \".r3d\", \".raf\", \".raw\", \".rwl\", // RAW\n                        \".rw2\", \".rwz\", \".sr2\", \".srf\", \".srw\", \".x3f\", // RAW\n                        \".ras\", \".sun\", // Sun RAS\n                        \".sgi\", \".rgba\", \".bw\", \".int\", \".inta\", // Silicon Graphics Image\n                        \".tga\", // Truevision TGA/TARGA\n                        \".tiff\", \".tif\", // Tagged Image File Format\n                        \".wbmp\", // Wireless Application Protocol Bitmap Format\n                        \".webp\", // WebP\n                        \".xbm\", // X BitMap\n                        \".xpm\", // X PixMap\n                    DisplayName = \"Texture Importer - KNI\", DefaultProcessor = \"TextureProcessor\")]\n    public class TextureImporter : ContentImporter<TextureContent>\n    {\n        /// <summary>\n        /// Initializes a new instance of TextureImporter.\n        /// </summary>\n        public TextureImporter( )\n        {\n        }\n\n        /// <summary>\n        /// Called by the XNA Framework when importing a texture file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        public override TextureContent Import(string filename, ContentImporterContext context)\n        {\n            var ext = Path.GetExtension(filename).ToLower();\n\n            // Special case for loading some formats\n            switch (ext)\n            {\n                case \".dds\":\n                    return DdsLoader.Import(filename, context);\n                case \".bmp\":\n                    return LoadImage(filename);\n            }\n\n            var output = new Texture2DContent { Identity = new ContentIdentity(filename) };\n\n            var format = FreeImage.GetFileType(filename, 0);\n            var fBitmap = FreeImage.Load(format, filename, 0);\n            //if freeimage can not recognize the image type\n            if(format == FREE_IMAGE_FORMAT.FIF_UNKNOWN)\n                throw new ContentLoadException(\"TextureImporter failed to load '\" + filename + \"'\");\n            //if freeimage can recognize the file headers but can't read its contents\n            else if(fBitmap == IntPtr.Zero)\n                throw new InvalidContentException(\"TextureImporter couldn't understand the contents of '\" + filename + \"'\", output.Identity);\n            BitmapContent face = null;\n            var height = (int) FreeImage.GetHeight(fBitmap);\n            var width = (int) FreeImage.GetWidth(fBitmap);\n            //uint bpp = FreeImage.GetBPP(fBitmap);\n            var imageType = FreeImage.GetImageType(fBitmap);\n\n            // Swizzle channels and expand to include an alpha channel\n            fBitmap = ConvertAndSwapChannels(fBitmap, imageType);\n\n            // The bits per pixel and image type may have changed\n            uint bpp = FreeImage.GetBPP(fBitmap);\n            imageType = FreeImage.GetImageType(fBitmap);\n            var pitch = (int) FreeImage.GetPitch(fBitmap);\n            var redMask = FreeImage.GetRedMask(fBitmap);\n            var greenMask = FreeImage.GetGreenMask(fBitmap);\n            var blueMask = FreeImage.GetBlueMask(fBitmap);\n\n            // Create the byte array for the data\n            byte[] bytes = new byte[((width * height * bpp - 1) / 8) + 1];\n\n            //Converts the pixel data to bytes, do not try to use this call to switch the color channels because that only works for 16bpp bitmaps\n            FreeImage.ConvertToRawBits(bytes, fBitmap, pitch, bpp, redMask, greenMask, blueMask, true);\n            // Create the Pixel bitmap content depending on the image type\n            switch(imageType)\n            {\n                //case FREE_IMAGE_TYPE.FIT_BITMAP:\n                default:\n                    face = new PixelBitmapContent<Color>(width, height);\n                    break;\n                case FREE_IMAGE_TYPE.FIT_RGBA16:\n                    face = new PixelBitmapContent<Rgba64>(width, height);\n                    break;\n                case FREE_IMAGE_TYPE.FIT_RGBAF:\n                    face = new PixelBitmapContent<Vector4>(width, height);\n                    break;\n            }\n            FreeImage.Unload(fBitmap);\n\n            face.SetPixelData(bytes);\n            output.Faces[0].Add(face);\n            return output;\n        }\n        /// <summary>\n        /// Expands images to have an alpha channel and swaps red and blue channels\n        /// </summary>\n        /// <param name=\"fBitmap\">Image to process</param>\n        /// <param name=\"imageType\">Type of the image for the procedure</param>\n        /// <returns></returns>\n        private static IntPtr ConvertAndSwapChannels(IntPtr fBitmap, FREE_IMAGE_TYPE imageType)\n        {\n            IntPtr bgra;\n            switch(imageType)\n            {\n                // Return BGRA images as is\n\n                case FREE_IMAGE_TYPE.FIT_RGBAF:\n                case FREE_IMAGE_TYPE.FIT_RGBA16:\n                    break;\n\n                // Add an alpha channel to BGRA images without one\n\n                case FREE_IMAGE_TYPE.FIT_RGBF:\n                    bgra = FreeImage.ConvertToType(fBitmap, FREE_IMAGE_TYPE.FIT_RGBAF, true);\n                    FreeImage.Unload(fBitmap);\n                    fBitmap = bgra;\n                    break;\n\n                case FREE_IMAGE_TYPE.FIT_RGB16:\n                    bgra = FreeImage.ConvertToType(fBitmap, FREE_IMAGE_TYPE.FIT_RGBA16, true);\n                    FreeImage.Unload(fBitmap);\n                    fBitmap = bgra;\n                    break;\n\n\n                // Add an alpha channel to RGB images\n                // Swap the red and blue channels of RGBA images\n\n                default:\n                    // Bitmap and other formats are converted to 32-bit by default\n                    bgra = FreeImage.ConvertTo32Bits(fBitmap);\n                    SwitchRedAndBlueChannels(bgra);\n                    FreeImage.Unload(fBitmap);\n                    fBitmap = bgra;\n                    break;\n            }\n\n            return fBitmap;\n        }\n        /// <summary>\n        /// Switches the red and blue channels\n        /// </summary>\n        /// <param name=\"fBitmap\">image</param>\n        private static void SwitchRedAndBlueChannels(IntPtr fBitmap)\n        {\n            var r = FreeImage.GetChannel(fBitmap, FREE_IMAGE_COLOR_CHANNEL.FICC_RED);\n            var b = FreeImage.GetChannel(fBitmap, FREE_IMAGE_COLOR_CHANNEL.FICC_BLUE);\n            FreeImage.SetChannel(fBitmap, b, FREE_IMAGE_COLOR_CHANNEL.FICC_RED);\n            FreeImage.SetChannel(fBitmap, r, FREE_IMAGE_COLOR_CHANNEL.FICC_BLUE);\n            FreeImage.Unload(r);\n            FreeImage.Unload(b);\n        }\n\n        // Loads BMP using StbSharp. This allows us to load BMP files containing BITMAPV4HEADER and BITMAPV5HEADER\n        // structures, which FreeImage does not support.\n        TextureContent LoadImage(string filename)\n        {\n            var output = new Texture2DContent { Identity = new ContentIdentity(filename) };\n\n            ImageResult result;\n            using (var stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read))\n            {\n                result = ImageResult.FromStream(stream, ColorComponents.RedGreenBlueAlpha);\n            }\n\n            var face = new PixelBitmapContent<Color>(result.Width, result.Height);\n            face.SetPixelData(result.Data);\n            output.Faces[0].Add(face);\n\n            return output;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Utilities/ContentWriterExtensions.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    public static class ContentWriterExtensions\n    {\n        /// <summary>\n        ///  Writes a Color value to the current stream and advances the stream position by 4 bytes.\n        /// </summary>\n        /// <param name=\"output\">The ContentWriter.</param>\n        /// <param name=\"value\">The Color value to write.</param>\n        public static void Write(this ContentWriter output, Color value)\n        {\n            output.Write(value.R);\n            output.Write(value.G);\n            output.Write(value.B);\n            output.Write(value.A);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Utilities/FreeImageAPI.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace FreeImageAPI\n{\n    internal enum FREE_IMAGE_TYPE\n    {\n        FIT_UNKNOWN,\n        FIT_BITMAP,\n        FIT_UINT16,\n        FIT_INT16,\n        FIT_UINT32,\n        FIT_INT32,\n        FIT_FLOAT,\n        FIT_DOUBLE,\n        FIT_COMPLEX,\n        FIT_RGB16,\n        FIT_RGBA16,\n        FIT_RGBF,\n        FIT_RGBAF\n    }\n\n    internal enum FREE_IMAGE_FILTER\n    {\n        FILTER_BOX,\n        FILTER_BICUBIC,\n        FILTER_BILINEAR,\n        FILTER_BSPLINE,\n        FILTER_CATMULLROM,\n        FILTER_LANCZOS3\n    }\n\n    internal enum FREE_IMAGE_FORMAT\n    {\n        FIF_UNKNOWN = -1,\n        FIF_BMP,\n        FIF_ICO,\n        FIF_JPEG,\n        FIF_JNG,\n        FIF_KOALA,\n        FIF_LBM,\n        FIF_IFF,\n        FIF_MNG,\n        FIF_PBM,\n        FIF_PBMRAW,\n        FIF_PCD,\n        FIF_PCX,\n        FIF_PGM,\n        FIF_PGMRAW,\n        FIF_PNG,\n        FIF_PPM,\n        FIF_PPMRAW,\n        FIF_RAS,\n        FIF_TARGA,\n        FIF_TIFF,\n        FIF_WBMP,\n        FIF_PSD,\n        FIF_CUT,\n        FIF_XBM,\n        FIF_XPM,\n        FIF_DDS,\n        FIF_GIF,\n        FIF_HDR,\n        FIF_FAXG3,\n        FIF_SGI,\n        FIF_EXR,\n        FIF_J2K,\n        FIF_JP2,\n        FIF_PFM,\n        FIF_PICT,\n        FIF_RAW,\n        FIF_WEBP,\n        FIF_JXR\n    }\n\n    internal enum FREE_IMAGE_COLOR_CHANNEL\n    {\n        FICC_RGB,\n        FICC_RED,\n        FICC_GREEN,\n        FICC_BLUE,\n        FICC_ALPHA,\n        FICC_BLACK,\n        FICC_REAL,\n        FICC_IMAG,\n        FICC_MAG,\n        FICC_PHASE\n    }\n\n    partial class FreeImage\n    {\n        private const string NativeLibName = \"FreeImage\";\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_ConvertFromRawBits\")]\n        public static extern IntPtr ConvertFromRawBits(byte[] bits, int width, int height, int pitch, uint bpp, uint red_mask, uint green_mask, uint blue_mask, bool topdown);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_Rescale\")]\n        public static extern IntPtr Rescale(IntPtr dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_Unload\")]\n        public static extern void Unload(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_ConvertToRawBits\")]\n        public static extern void ConvertToRawBits(byte[] bits, IntPtr dib, int pitch, uint bpp, uint red_mask, uint green_mask, uint blue_mask, bool topdown);\n\n        [DllImport(NativeLibName, CharSet = CharSet.Unicode, EntryPoint = \"FreeImage_GetFileTypeU\")]\n        public static extern FREE_IMAGE_FORMAT GetFileTypeU(string filename, int size);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetFileType\")]\n        public static extern FREE_IMAGE_FORMAT GetFileTypeS(string filename, int size);\n\n        public static FREE_IMAGE_FORMAT GetFileType(string filename, int size)\n        {\n            if (CurrentPlatform.OS == OS.Windows)\n                return GetFileTypeU(filename, size);\n            else\n                return GetFileTypeS(filename, size);\n        }\n\n        [DllImport(NativeLibName, CharSet = CharSet.Unicode, EntryPoint = \"FreeImage_LoadU\")]\n        public static extern IntPtr LoadU(FREE_IMAGE_FORMAT fif, string filename, int flags);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_Load\")]\n        public static extern IntPtr LoadS(FREE_IMAGE_FORMAT fif, string filename, int flags);\n\n        public static IntPtr Load(FREE_IMAGE_FORMAT fif, string filename, int flags)\n        {\n            if (CurrentPlatform.OS == OS.Windows)\n                return LoadU(fif, filename, flags);\n            else\n                return LoadS(fif, filename, flags);\n        }\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetHeight\")]\n        public static extern uint GetHeight(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetWidth\")]\n        public static extern uint GetWidth(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetImageType\")]\n        public static extern FREE_IMAGE_TYPE GetImageType(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetChannel\")]\n        public static extern IntPtr GetChannel(IntPtr dib, FREE_IMAGE_COLOR_CHANNEL channel);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_SetChannel\")]\n        public static extern bool SetChannel(IntPtr dib, IntPtr dib8, FREE_IMAGE_COLOR_CHANNEL channel);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_ConvertToType\")]\n        public static extern IntPtr ConvertToType(IntPtr src, FREE_IMAGE_TYPE dst_type, bool scale_linear);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_ConvertTo32Bits\")]\n        public static extern IntPtr ConvertTo32Bits(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetBPP\")]\n        public static extern uint GetBPP(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetPitch\")]\n        public static extern uint GetPitch(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetRedMask\")]\n        public static extern uint GetRedMask(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetGreenMask\")]\n        public static extern uint GetGreenMask(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetBlueMask\")]\n        public static extern uint GetBlueMask(IntPtr dib);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_AllocateT\")]\n        public static extern IntPtr AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp, uint red_mask, uint green_mask, uint blue_mask);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetScanLine\")]\n        public static extern IntPtr GetScanLine(IntPtr dib, int scanline);\n\n        [DllImport(NativeLibName, EntryPoint = \"FreeImage_GetLine\")]\n        public static extern uint GetLine(IntPtr dib);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Utilities/FreeImageAPIC.cs",
    "content": "﻿// The following code is part of FreeImage.NET\n// https://freeimagenet.codeplex.com/SourceControl/latest#FreeImage.NET/FreeImage.NET/3.17.0.4/FreeImageWrapper.cs\n//\n// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN \"AS IS\" BASIS, WITHOUT WARRANTY\n// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES\n// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE\n// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED\n// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT\n// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY\n// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL\n// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER\n// THIS DISCLAIMER.\n\nusing System;\n\nnamespace FreeImageAPI\n{\n    partial class FreeImage\n    {\n        public static unsafe void CopyMemory(byte* dest, byte* src, int len)\n        {\n            if (len >= 0x10)\n            {\n                do\n                {\n                    *((int*)dest) = *((int*)src);\n                    *((int*)(dest + 4)) = *((int*)(src + 4));\n                    *((int*)(dest + 8)) = *((int*)(src + 8));\n                    *((int*)(dest + 12)) = *((int*)(src + 12));\n                    dest += 0x10;\n                    src += 0x10;\n                }\n                while ((len -= 0x10) >= 0x10);\n            }\n            if (len > 0)\n            {\n                if ((len & 8) != 0)\n                {\n                    *((int*)dest) = *((int*)src);\n                    *((int*)(dest + 4)) = *((int*)(src + 4));\n                    dest += 8;\n                    src += 8;\n                }\n                if ((len & 4) != 0)\n                {\n                    *((int*)dest) = *((int*)src);\n                    dest += 4;\n                    src += 4;\n                }\n                if ((len & 2) != 0)\n                {\n                    *((short*)dest) = *((short*)src);\n                    dest += 2;\n                    src += 2;\n                }\n                if ((len & 1) != 0)\n                {\n                    *dest = *src;\n                }\n            }\n        }\n\n        public static unsafe IntPtr ConvertFromRawBits(\n            byte[] bits,\n            FREE_IMAGE_TYPE type,\n            int width,\n            int height,\n            int pitch,\n            uint bpp,\n            uint red_mask,\n            uint green_mask,\n            uint blue_mask,\n            bool topdown)\n        {\n            fixed (byte* ptr = bits)\n            {\n                return ConvertFromRawBits(\n                    (IntPtr)ptr,\n                    type,\n                    width,\n                    height,\n                    pitch,\n                    bpp,\n                    red_mask,\n                    green_mask,\n                    blue_mask,\n                    topdown);\n            }\n        }\n\n        public static unsafe IntPtr ConvertFromRawBits(\n            IntPtr bits,\n            FREE_IMAGE_TYPE type,\n            int width,\n            int height,\n            int pitch,\n            uint bpp,\n            uint red_mask,\n            uint green_mask,\n            uint blue_mask,\n            bool topdown)\n        {\n            byte* addr = (byte*)bits;\n            if ((addr == null) || (width <= 0) || (height <= 0))\n            {\n                return IntPtr.Zero;\n            }\n\n            IntPtr dib = AllocateT(type, width, height, (int)bpp, red_mask, green_mask, blue_mask);\n            if (dib != IntPtr.Zero)\n            {\n                if (topdown)\n                {\n                    for (int i = height - 1; i >= 0; --i)\n                    {\n                        CopyMemory((byte*)GetScanLine(dib, i), addr, (int)GetLine(dib));\n                        addr += pitch;\n                    }\n                }\n                else\n                {\n                    for (int i = 0; i < height; ++i)\n                    {\n                        CopyMemory((byte*)GetScanLine(dib, i), addr, (int)GetLine(dib));\n                        addr += pitch;\n                    }\n                }\n            }\n            return dib;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Utilities/GraphicsExtensions.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics\n{\n    static class GraphicsExtensions\n    {\n        public static int GetSize(this VertexElementFormat elementFormat)\n        {\n            switch (elementFormat)\n            {\n                case VertexElementFormat.Single:\n                    return 4;\n                case VertexElementFormat.Vector2:\n                    return 8;\n                case VertexElementFormat.Vector3:\n                    return 12;\n                case VertexElementFormat.Vector4:\n                    return 16;\n                case VertexElementFormat.Color:\n                    return 4;\n                case VertexElementFormat.Byte4:\n                    return 4;\n                case VertexElementFormat.Short2:\n                    return 4;\n                case VertexElementFormat.Short4:\n                    return 8;\n                case VertexElementFormat.NormalizedShort2:\n                    return 4;\n                case VertexElementFormat.NormalizedShort4:\n                    return 8;\n                case VertexElementFormat.HalfVector2:\n                    return 4;\n                case VertexElementFormat.HalfVector4:\n                    return 8;\n\n                default:\n                    return 0;\n            }\n        }\n\n        public static bool IsCompressedFormat(this SurfaceFormat format)\n        {\n            switch (format)\n            {\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1a:\n                case SurfaceFormat.Dxt1SRgb:\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt3SRgb:\n                case SurfaceFormat.Dxt5:\n                case SurfaceFormat.Dxt5SRgb:\n                case SurfaceFormat.RgbaAtcExplicitAlpha:\n                case SurfaceFormat.RgbaAtcInterpolatedAlpha:\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                case SurfaceFormat.RgbEtc1:\n                case SurfaceFormat.Rgb8Etc2:\n                case SurfaceFormat.Srgb8Etc2:\n                case SurfaceFormat.Rgb8A1Etc2:\n                case SurfaceFormat.Srgb8A1Etc2:\n                case SurfaceFormat.Rgba8Etc2:\n                case SurfaceFormat.SRgb8A8Etc2:\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        public static int GetSize(this SurfaceFormat surfaceFormat)\n        {\n            switch (surfaceFormat)\n            {\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1SRgb:\n                case SurfaceFormat.Dxt1a:\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                case SurfaceFormat.RgbEtc1:\n                case SurfaceFormat.Rgb8Etc2:\n                case SurfaceFormat.Srgb8Etc2:\n                case SurfaceFormat.Rgb8A1Etc2:\n                case SurfaceFormat.Srgb8A1Etc2:\n                    // One texel in DXT1, PVRTC (2bpp and 4bpp) and ETC1 is a minimum 4x4 block (8x4 for PVRTC 2bpp), which is 8 bytes\n                    return 8;\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt3SRgb:\n                case SurfaceFormat.Dxt5:\n                case SurfaceFormat.Dxt5SRgb:\n                case SurfaceFormat.RgbaAtcExplicitAlpha:\n                case SurfaceFormat.RgbaAtcInterpolatedAlpha:\n                case SurfaceFormat.Rgba8Etc2:\n                case SurfaceFormat.SRgb8A8Etc2:\n                    // One texel in DXT3 and DXT5 is a minimum 4x4 block, which is 16 bytes\n                    return 16;\n                case SurfaceFormat.Alpha8:\n                    return 1;\n                case SurfaceFormat.Bgr565:\n                case SurfaceFormat.Bgra4444:\n                case SurfaceFormat.Bgra5551:\n                case SurfaceFormat.HalfSingle:\n                case SurfaceFormat.NormalizedByte2:\n                    return 2;\n                case SurfaceFormat.Color:\n                case SurfaceFormat.ColorSRgb:\n                case SurfaceFormat.ColorSRgba:\n                case SurfaceFormat.Single:\n                case SurfaceFormat.Rg32:\n                case SurfaceFormat.HalfVector2:\n                case SurfaceFormat.NormalizedByte4:\n                case SurfaceFormat.Rgba1010102:\n                case SurfaceFormat.Bgra32:\n                case SurfaceFormat.Bgra32SRgb:\n                case SurfaceFormat.Bgr32:\n                case SurfaceFormat.Bgr32SRgb:\n                    return 4;\n                case SurfaceFormat.HalfVector4:\n                case SurfaceFormat.Rgba64:\n                case SurfaceFormat.Vector2:\n                    return 8;\n                case SurfaceFormat.Vector4:\n                    return 16;\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        public static void GetBlockSize(this SurfaceFormat surfaceFormat, out int width, out int height)\n        {\n            switch (surfaceFormat)\n            {\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                    width = 8;\n                    height = 4;\n                    break;\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1SRgb:\n                case SurfaceFormat.Dxt1a:\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt3SRgb:\n                case SurfaceFormat.Dxt5:\n                case SurfaceFormat.Dxt5SRgb:\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                case SurfaceFormat.RgbEtc1:\n                case SurfaceFormat.Rgb8Etc2:\n                case SurfaceFormat.Srgb8Etc2:\n                case SurfaceFormat.Rgb8A1Etc2:\n                case SurfaceFormat.Srgb8A1Etc2:\n                case SurfaceFormat.Rgba8Etc2:\n                case SurfaceFormat.SRgb8A8Etc2:\n                case SurfaceFormat.RgbaAtcExplicitAlpha:\n                case SurfaceFormat.RgbaAtcInterpolatedAlpha:\n                    width = 4;\n                    height = 4;\n                    break;\n\n                default:\n                    width = 1;\n                    height = 1;\n                    break;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Utilities/ReflectionHelpers.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Graphics.Utilities\n{\n    internal static partial class ReflectionHelpers\n    {\n        internal static int SizeOf<T>()\n        {\n            return ManagedSizeOf<T>.Value;\n        }\n\n        /// <summary>\n        /// Generics handler for Marshal.SizeOf\n        /// </summary>\n        private static class ManagedSizeOf<T>\n        {\n            static public int Value { get; private set; }\n\n            static ManagedSizeOf()\n            {\n#if NET40 || NET45 || NET40_OR_GREATER\n                Value = Marshal.SizeOf(typeof(T));\n#else\n                Value = Marshal.SizeOf<T>();\n#endif\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/Utilities/VectorConverterEx.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities\n{\n    interface VectorConverterEx<T> where T : struct\n    {\n        Vector4 ToVector4(T value);\n        T FromVector4(Vector4 value);\n    }\n\n    /// <summary>\n    /// Helper class used by PixelBitmapContent.TryCopyFrom and TryCopyTo\n    /// to convert between non-PackedValue types and Vector4.\n    /// </summary>\n    class VectorConverterEx :\n        VectorConverterEx<byte>,\n        VectorConverterEx<short>,\n        VectorConverterEx<int>,\n        VectorConverterEx<float>,\n        VectorConverterEx<Color>,\n        VectorConverterEx<Vector4>\n    {\n        Vector4 VectorConverterEx<byte>.ToVector4(byte value)\n        {\n            var f = (float)value / (float)byte.MaxValue;\n            return new Vector4(f, 0f, 0f, 1f);\n        }\n\n        Vector4 VectorConverterEx<short>.ToVector4(short value)\n        {\n            var f = (float)value / (float)short.MaxValue;\n            return new Vector4(f, 0f, 0f, 1f);\n        }\n\n        Vector4 VectorConverterEx<int>.ToVector4(int value)\n        {\n            var f = (float)value / (float)int.MaxValue;\n            return new Vector4(f, 0f, 0f, 1f);\n        }\n\n        Vector4 VectorConverterEx<float>.ToVector4(float value)\n        {\n            return new Vector4(value, 0f, 0f, 1f);\n        }\n\n        Vector4 VectorConverterEx<Color>.ToVector4(Color value)\n        {\n            return value.ToVector4();\n        }\n\n        Vector4 VectorConverterEx<Vector4>.ToVector4(Vector4 value)\n        {\n            return value;\n        }\n\n        byte VectorConverterEx<byte>.FromVector4(Vector4 value)\n        {\n            return (byte)(value.X * (float)byte.MaxValue);\n        }\n\n        short VectorConverterEx<short>.FromVector4(Vector4 value)\n        {\n            return (short)(value.X * (float)short.MaxValue);\n        }\n\n        int VectorConverterEx<int>.FromVector4(Vector4 value)\n        {\n            return (int)(value.X * (float)int.MaxValue);\n        }\n\n        float VectorConverterEx<float>.FromVector4(Vector4 value)\n        {\n            return value.X;\n        }\n\n        Color VectorConverterEx<Color>.FromVector4(Vector4 value)\n        {\n            return new Color(value);\n        }\n\n        Vector4 VectorConverterEx<Vector4>.FromVector4(Vector4 value)\n        {\n            return value;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/XImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading DirectX Object (.x) files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(\".x\", DisplayName = \"X Importer - KNI\", DefaultProcessor = \"ModelProcessor\")]\n    public class XImporter : ContentImporter<NodeContent>\n    {\n        /// <summary>\n        /// Initializes a new instance of XImporter.\n        /// </summary>\n        public XImporter()\n        {\n        }\n\n        /// <summary>\n        /// Called by the XNA Framework when importing a .x file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        public override NodeContent Import(string filename, ContentImporterContext context)\n        {\n            var importer = new OpenAssetImporter(\"XImporter\");\n            return importer.Import(filename, context);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/XNA.Framework.Content.Pipeline.Graphics.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Content.Pipeline.Graphics\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <AssemblyName>Xna.Framework.Content.Pipeline.Graphics</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Content.Pipeline.Graphics</RootNamespace>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <DefineConstants>STBSHARP_INTERNAL</DefineConstants>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI Framework Framework Content Pipeline Graphics.</Description>\n    <PackageTags>KNI;</PackageTags>\n    <PackageId>nkast.Xna.Framework.Content.Pipeline.Graphics</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"Microsoft.Win32.Registry\" Version=\"5.0.0\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'net40' \">\n    <Reference Include=\"AssimpNet\">\n      <HintPath>..\\..\\ThirdParty\\AssimpNet\\5.0.0\\lib\\net40\\AssimpNet.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Typography.OpenFont\">\n      <HintPath>..\\..\\ThirdParty\\Typography\\net40\\Typography.OpenFont.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SharpFont\">\n      <HintPath>..\\..\\ThirdParty\\SharpFont\\Windows\\x64\\SharpFont.dll</HintPath>\n    </Reference>\n    <Reference Include=\"PVRTexLibNET\">\n      <HintPath>..\\..\\ThirdParty\\PVRTexLibNET\\PVRTexLibNET.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  \n  <ItemGroup Condition=\"'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'net8.0' \">\n    <Reference Include=\"AssimpNet\">\n      <HintPath>..\\..\\ThirdParty\\AssimpNet\\5.0.0\\lib\\netstandard2.0\\AssimpNet.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Typography.OpenFont\">\n      <HintPath>..\\..\\ThirdParty\\Typography\\netstandard2.0\\Typography.OpenFont.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SharpFont\">\n      <HintPath>..\\..\\ThirdParty\\Dependencies\\SharpFont\\x64\\SharpFont.dll</HintPath>\n    </Reference>\n    <Reference Include=\"PVRTexLibNET\">\n      <HintPath>..\\..\\ThirdParty\\Dependencies\\PVRTexLibNET\\PVRTexLibNET.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Reference Include=\"Nvidia.TextureTools\" Condition=\"'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'net8.0' \">\n      <HintPath>..\\..\\ThirdParty\\Dependencies\\NVTT\\lib\\\\netstandard2.0\\Nvidia.TextureTools.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nvidia.TextureTools\" Condition=\"'$(TargetFramework)' == 'net40' \">\n      <HintPath>..\\..\\ThirdParty\\Dependencies\\NVTT\\lib\\\\net40\\Nvidia.TextureTools.dll</HintPath>\n    </Reference>\n    <Reference Include=\"ATI.TextureConverter\">\n      <HintPath>..\\..\\ThirdParty\\Dependencies\\ATI.TextureConverter\\ATI.TextureConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"EffectCompiler\\SamplerStateContent.cs\" />\n    <Compile Include=\"EffectCompiler\\TPGParser\\Parser.cs\" />\n    <Compile Include=\"EffectCompiler\\TPGParser\\ParseTree.cs\" />\n    <Compile Include=\"EffectCompiler\\TPGParser\\ParseTreeTools.cs\" />\n    <Compile Include=\"EffectCompiler\\TPGParser\\PassInfo.cs\" />\n    <Compile Include=\"EffectCompiler\\TPGParser\\SamplerStateInfo.cs\" />\n    <Compile Include=\"EffectCompiler\\TPGParser\\Scanner.cs\" />\n    <Compile Include=\"EffectCompiler\\TPGParser\\ShaderInfo.cs\" />\n    <Compile Include=\"EffectCompiler\\TPGParser\\TechniqueInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Graphics\\Font\\CharacterRegion.cs\" />\n    <Compile Include=\"Graphics\\Font\\CharacterRegionTypeConverter.cs\" />\n    <Compile Include=\"Graphics\\Font\\FontFamilyInfo.cs\" />\n    <Compile Include=\"Graphics\\Font\\Glyph.cs\" />\n    <Compile Include=\"Graphics\\Font\\GlyphPacker.cs\" />\n    <Compile Include=\"Graphics\\Font\\GrowRule.cs\" />\n    <Compile Include=\"Graphics\\Font\\MaxRectsBin.cs\" />\n    <Compile Include=\"Graphics\\Font\\MaxRectsHeuristic.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Graphics\\AlphaTestMaterialContent.cs\" />\n    <Compile Include=\"Graphics\\AnimationChannel.cs\" />\n    <Compile Include=\"Graphics\\AnimationChannelDictionary.cs\" />\n    <Compile Include=\"Graphics\\AnimationContent.cs\" />\n    <Compile Include=\"Graphics\\AnimationContentDictionary.cs\" />\n    <Compile Include=\"Graphics\\AnimationKeyframe.cs\" />\n    <Compile Include=\"Graphics\\AtcBitmapContent.cs\" />\n    <Compile Include=\"Graphics\\AtcExplicitBitmapContent.cs\" />\n    <Compile Include=\"Graphics\\AtcInterpolatedBitmapContent.cs\" />\n    <Compile Include=\"Graphics\\BasicMaterialContent.cs\" />\n    <Compile Include=\"Graphics\\BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\BoneContent.cs\" />\n    <Compile Include=\"Graphics\\BoneWeight.cs\" />\n    <Compile Include=\"Graphics\\BoneWeightCollection.cs\" />\n    <Compile Include=\"Graphics\\DualTextureMaterialContent.cs\" />\n    <Compile Include=\"Graphics\\Dxt1BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\Dxt3BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\Dxt5BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\DxtBitmapContent.cs\" />\n    <Compile Include=\"Graphics\\EffectContent.cs\" />\n    <Compile Include=\"Graphics\\EffectMaterialContent.cs\" />\n    <Compile Include=\"Graphics\\EnvironmentMapMaterialContent.cs\" />\n    <Compile Include=\"Graphics\\Etc1BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\FontDescription.cs\" />\n    <Compile Include=\"Graphics\\FontDescriptionStyle.cs\" />\n    <Compile Include=\"Graphics\\GeometryContent.cs\" />\n    <Compile Include=\"Graphics\\GeometryContentCollection.cs\" />\n    <Compile Include=\"Graphics\\GraphicsUtil.cs\" />\n    <Compile Include=\"Graphics\\IndexCollection.cs\" />\n    <Compile Include=\"Graphics\\IndirectPositionCollection.cs\" />\n    <Compile Include=\"Graphics\\LocalizedFontDescription.cs\" />\n    <Compile Include=\"Graphics\\MaterialContent.cs\" />\n    <Compile Include=\"Graphics\\MeshBuilder.cs\" />\n    <Compile Include=\"Graphics\\MeshContent.cs\" />\n    <Compile Include=\"Graphics\\MeshHelper.cs\" />\n    <Compile Include=\"Graphics\\MipmapChain.cs\" />\n    <Compile Include=\"Graphics\\MipmapChainCollection.cs\" />\n    <Compile Include=\"Graphics\\NodeContent.cs\" />\n    <Compile Include=\"Graphics\\NodeContentCollection.cs\" />\n    <Compile Include=\"Graphics\\PixelBitmapContent.cs\" />\n    <Compile Include=\"Graphics\\PositionCollection.cs\" />\n    <Compile Include=\"Graphics\\PvrtcBitmapContent.cs\" />\n    <Compile Include=\"Graphics\\PvrtcRgb2BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\PvrtcRgb4BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\PvrtcRgba2BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\PvrtcRgba4BitmapContent.cs\" />\n    <Compile Include=\"Graphics\\SkinnedMaterialContent.cs\" />\n    <Compile Include=\"Graphics\\Texture2DContent.cs\" />\n    <Compile Include=\"Graphics\\Texture3DContent.cs\" />\n    <Compile Include=\"Graphics\\TextureContent.cs\" />\n    <Compile Include=\"Graphics\\TextureCubeContent.cs\" />\n    <Compile Include=\"Graphics\\TextureReferenceDictionary.cs\" />\n    <Compile Include=\"Graphics\\VectorConverter.cs\" />\n    <Compile Include=\"Graphics\\VertexChannel.cs\" />\n    <Compile Include=\"Graphics\\VertexChannelCollection.cs\" />\n    <Compile Include=\"Graphics\\VertexChannelGeneric.cs\" />\n    <Compile Include=\"Graphics\\VertexChannelNames.cs\" />\n    <Compile Include=\"Graphics\\VertexContent.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Processors\\CompiledEffectContent.cs\" />\n    <Compile Include=\"Processors\\FontDescriptionProcessor.cs\" />\n    <Compile Include=\"Processors\\FontTextureProcessor.cs\" />\n    <Compile Include=\"Processors\\LocalizedFontProcessor.cs\" />\n    <Compile Include=\"Processors\\MaterialProcessor.cs\" />\n    <Compile Include=\"Processors\\MaterialProcessorDefaultEffect.cs\" />\n    <Compile Include=\"Processors\\ModelBoneContent.cs\" />\n    <Compile Include=\"Processors\\ModelBoneContentCollection.cs\" />\n    <Compile Include=\"Processors\\ModelContent.cs\" />\n    <Compile Include=\"Processors\\ModelMeshContent.cs\" />\n    <Compile Include=\"Processors\\ModelMeshContentCollection.cs\" />\n    <Compile Include=\"Processors\\ModelMeshPartContent.cs\" />\n    <Compile Include=\"Processors\\ModelMeshPartContentCollection.cs\" />\n    <Compile Include=\"Processors\\ModelProcessor.cs\" />\n    <Compile Include=\"Processors\\SpriteFontContent.cs\" />\n    <Compile Include=\"Processors\\TextureProcessor.cs\" />\n    <Compile Include=\"Processors\\TextureProcessorOutputFormat.cs\" />\n    <Compile Include=\"Processors\\VertexBufferContent.cs\" />\n    <Compile Include=\"Processors\\VertexDeclarationContent.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Serialization\\Compiler\\AlphaTestEffectWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\BasicEffectWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ColorWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\CompiledEffectWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\DualTextureEffectWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\EffectMaterialWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\EnvironmentMapEffectWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\IndexBufferWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ModelWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\SkinnedEffectWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\SpriteFontWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\Texture2DWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\TextureCubeWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\TextureWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\VertexBufferWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\VertexDeclarationWriter.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"DdsLoader.cs\" />\n    <Compile Include=\"EffectImporter.cs\" />\n    <Compile Include=\"FbxImporter.cs\" />\n    <Compile Include=\"FontDescriptionImporter.cs\" />\n    <Compile Include=\"OpenAssetImporter.cs\" />\n    <Compile Include=\"TextureImporter.cs\" />\n    <Compile Include=\"XImporter.cs\" />\n    <Compile Include=\"Utilities\\ContentWriterExtensions.cs\" />\n    <Compile Include=\"Utilities\\FreeImageAPI.cs\" />\n    <Compile Include=\"Utilities\\FreeImageAPIC.cs\" />\n    <Compile Include=\"Utilities\\GraphicsExtensions.cs\" />\n    <Compile Include=\"Utilities\\ReflectionHelpers.cs\" />\n    <Compile Include=\"Utilities\\VectorConverterEx.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"ExternalTool.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\ContentTypeWriterBase.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"..\\..\\Platforms\\Utilities\\CurrentPlatform.cs\">\n      <Link>Utilities\\CurrentPlatform.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\ThirdParty\\StbImageSharp\\src\\**\\*.cs\" LinkBase=\"Utilities\\StbImageSharp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\..\\ThirdParty\\AssimpNet\\5.0.0\\runtimes\\win-x64\\native\\assimp.dll\">\n      <Link>assimp.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\NVTT\\runtimes\\win-x64\\nvtt.dll\">\n      <Link>nvtt.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\FreeImage.NET\\Windows\\FreeImage.dll\">\n      <Link>FreeImage.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n  </ItemGroup>\n    \n  <ItemGroup Condition=\"'$(TargetFramework)' == 'net40' \">\n    <None Include=\"..\\..\\ThirdParty\\SharpFont\\Windows\\x64\\freetype6.dll\">\n      <Link>freetype6.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n    <None Include=\"..\\..\\ThirdParty\\SharpFont\\Windows\\x64\\msvcr110.dll\">\n      <Link>msvcr110.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n    <None Include=\"..\\..\\ThirdParty\\PVRTexLibNET\\Windows\\x64\\PVRTexLibWrapper.dll\">\n      <Link>PVRTexLibWrapper.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n  </ItemGroup>\n  \n  <ItemGroup Condition=\"'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'net8.0' \">\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\SharpFont\\x64\\freetype6.dll\">\n      <Link>freetype6.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n    <None Include=\"..\\..\\ThirdParty\\SharpFont\\Windows\\x64\\msvcr110.dll\">\n      <Link>msvcr110.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\PVRTexLibNET\\Windows\\x64\\PVRTexLibWrapper.dll\">\n      <Link>PVRTexLibWrapper.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509F44-3566-4B79-BB47-C7C6E2AA2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics/XNA.Framework.Content.Pipeline.Graphics.dll.config",
    "content": "﻿<configuration>\n  <dllmap os=\"osx\" dll=\"FreeImage\" target=\"libfreeimage.dylib\"/>\n  <dllmap os=\"linux\" dll=\"FreeImage\" target=\"libfreeimage-3.17.0.so\"/>\n</configuration>\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ConstantBufferData.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    internal class ConstantBufferData\n    {\n        public ConstantBufferData()\n        {\n        }\n\n        public string Name { get; internal set; }\n\n        public int Size { get; internal set; }\n\n        public List<int> ParameterIndex { get; internal set; }\n\n        public List<int> ParameterOffset { get; internal set; }\n\n        public List<EffectObject.EffectParameterContent> Parameters { get; internal set; }\n\n        public ConstantBufferData(string name)\n        {\n            Name = name;\n\n            ParameterIndex = new List<int>();\n            ParameterOffset = new List<int>();\n            Parameters = new List<EffectObject.EffectParameterContent>();\n            Size = 0;\n        }\n\n        public bool SameAs(ConstantBufferData other)\n        {\n            // If the names of the constant buffers don't\n            // match then consider them different right off \n            // the bat... even if their parameters are the same.\n            if (Name != other.Name)\n                return false;\n\n            // Do we have the same count of parameters and size?\n            if (    Size != other.Size ||\n                    Parameters.Count != other.Parameters.Count)\n                return false;\n            \n            // Compare the parameters themselves.\n            for (int i = 0; i < Parameters.Count; i++)\n            {\n                EffectObject.EffectParameterContent p1 = Parameters[i];\n                EffectObject.EffectParameterContent p2 = other.Parameters[i];\n\n                // Check the importaint bits.\n                if (    p1.name != p2.name ||\n                        p1.rows != p2.rows ||\n                        p1.columns != p2.columns ||\n                        p1.columnsActual != p2.columnsActual ||\n                        p1.class_ != p2.class_ ||\n                        p1.type != p2.type ||\n                        p1.bufferOffset != p2.bufferOffset)\n                    return false;\n            }\n\n            // These are equal.\n            return true;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/EffectObject.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    internal class EffectObject\n    {\n        public EffectObject()\n        {\n        }\n\n        public enum RENDERSTATETYPE\n        {\n            ZENABLE                   =   7,\n            FILLMODE                  =   8,\n            SHADEMODE                 =   9,\n            ZWRITEENABLE              =  14,\n            ALPHATESTENABLE           =  15,\n            LASTPIXEL                 =  16,\n            SRCBLEND                  =  19,\n            DESTBLEND                 =  20,\n            CULLMODE                  =  22,\n            ZFUNC                     =  23,\n            ALPHAREF                  =  24,\n            ALPHAFUNC                 =  25,\n            DITHERENABLE              =  26,\n            ALPHABLENDENABLE          =  27,\n            FOGENABLE                 =  28,\n            SPECULARENABLE            =  29,\n            FOGCOLOR                  =  34,\n            FOGTABLEMODE              =  35,\n            FOGSTART                  =  36,\n            FOGEND                    =  37,\n            FOGDENSITY                =  38,\n            RANGEFOGENABLE            =  48,\n            STENCILENABLE             =  52,\n            STENCILFAIL               =  53,\n            STENCILZFAIL              =  54,\n            STENCILPASS               =  55,\n            STENCILFUNC               =  56,\n            STENCILREF                =  57,\n            STENCILMASK               =  58,\n            STENCILWRITEMASK          =  59,\n            TEXTUREFACTOR             =  60,\n            WRAP0                     = 128,\n            WRAP1                     = 129,\n            WRAP2                     = 130,\n            WRAP3                     = 131,\n            WRAP4                     = 132,\n            WRAP5                     = 133,\n            WRAP6                     = 134,\n            WRAP7                     = 135,\n            CLIPPING                  = 136,\n            LIGHTING                  = 137,\n            AMBIENT                   = 139,\n            FOGVERTEXMODE             = 140,\n            COLORVERTEX               = 141,\n            LOCALVIEWER               = 142,\n            NORMALIZENORMALS          = 143,\n            DIFFUSEMATERIALSOURCE     = 145,\n            SPECULARMATERIALSOURCE    = 146,\n            AMBIENTMATERIALSOURCE     = 147,\n            EMISSIVEMATERIALSOURCE    = 148,\n            VERTEXBLEND               = 151,\n            CLIPPLANEENABLE           = 152,\n            POINTSIZE                 = 154,\n            POINTSIZE_MIN             = 155,\n            POINTSPRITEENABLE         = 156,\n            POINTSCALEENABLE          = 157,\n            POINTSCALE_A              = 158,\n            POINTSCALE_B              = 159,\n            POINTSCALE_C              = 160,\n            MULTISAMPLEANTIALIAS      = 161,\n            MULTISAMPLEMASK           = 162,\n            PATCHEDGESTYLE            = 163,\n            DEBUGMONITORTOKEN         = 165,\n            POINTSIZE_MAX             = 166,\n            INDEXEDVERTEXBLENDENABLE  = 167,\n            COLORWRITEENABLE          = 168,\n            TWEENFACTOR               = 170,\n            BLENDOP                   = 171,\n            POSITIONDEGREE            = 172,\n            NORMALDEGREE              = 173,\n            SCISSORTESTENABLE         = 174,\n            SLOPESCALEDEPTHBIAS       = 175,\n            ANTIALIASEDLINEENABLE     = 176,\n            MINTESSELLATIONLEVEL      = 178,\n            MAXTESSELLATIONLEVEL      = 179,\n            ADAPTIVETESS_X            = 180,\n            ADAPTIVETESS_Y            = 181,\n            ADAPTIVETESS_Z            = 182,\n            ADAPTIVETESS_W            = 183,\n            ENABLEADAPTIVETESSELLATION= 184,\n            TWOSIDEDSTENCILMODE       = 185,\n            CCW_STENCILFAIL           = 186,\n            CCW_STENCILZFAIL          = 187,\n            CCW_STENCILPASS           = 188,\n            CCW_STENCILFUNC           = 189,\n            COLORWRITEENABLE1         = 190,\n            COLORWRITEENABLE2         = 191,\n            COLORWRITEENABLE3         = 192,\n            BLENDFACTOR               = 193,\n            SRGBWRITEENABLE           = 194,\n            DEPTHBIAS                 = 195,\n            WRAP8                     = 198,\n            WRAP9                     = 199,\n            WRAP10                    = 200,\n            WRAP11                    = 201,\n            WRAP12                    = 202,\n            WRAP13                    = 203,\n            WRAP14                    = 204,\n            WRAP15                    = 205,\n            SEPARATEALPHABLENDENABLE  = 206,\n            SRCBLENDALPHA             = 207,\n            DESTBLENDALPHA            = 208,\n            BLENDOPALPHA              = 209,\n        \n            FORCE_DWORD               = 0x7fffffff\n        }\n\n        public enum TEXTURESTAGESTATETYPE\n        {\n            COLOROP               =  1,\n            COLORARG1             =  2,\n            COLORARG2             =  3,\n            ALPHAOP               =  4,\n            ALPHAARG1             =  5,\n            ALPHAARG2             =  6,\n            BUMPENVMAT00          =  7,\n            BUMPENVMAT01          =  8,\n            BUMPENVMAT10          =  9,\n            BUMPENVMAT11          = 10,\n            TEXCOORDINDEX         = 11,\n            BUMPENVLSCALE         = 22,\n            BUMPENVLOFFSET        = 23,\n            TEXTURETRANSFORMFLAGS = 24,\n            COLORARG0             = 26,\n            ALPHAARG0             = 27,\n            RESULTARG             = 28,\n            CONSTANT              = 32,\n        \n            FORCE_DWORD           = 0x7fffffff\n        }\n\n        public enum TRANSFORMSTATETYPE\n        {\n            VIEW            =  2,\n            PROJECTION      =  3,\n            TEXTURE0        = 16,\n            TEXTURE1        = 17,\n            TEXTURE2        = 18,\n            TEXTURE3        = 19,\n            TEXTURE4        = 20,\n            TEXTURE5        = 21,\n            TEXTURE6        = 22,\n            TEXTURE7        = 23,\n            WORLD           = 256,\n            FORCE_DWORD     = 0x7fffffff\n        }\n\n        public const int PARAMETER_SHARED = 1;\n        public const int PARAMETER_LITERAL = 2;\n        public const int PARAMETER_ANNOTATION = 4;\n\n        public enum PARAMETER_CLASS\n        {\n            SCALAR,\n            VECTOR,\n            MATRIX_ROWS,\n            MATRIX_COLUMNS,\n            OBJECT,\n            STRUCT,\n            FORCE_DWORD = 0x7fffffff,\n        }\n\n        public enum PARAMETER_TYPE\n        {\n            VOID,\n            BOOL,\n            INT,\n            FLOAT,\n            STRING,\n            TEXTURE,\n            TEXTURE1D,\n            TEXTURE2D,\n            TEXTURE3D,\n            TEXTURECUBE,\n            SAMPLER,\n            SAMPLER1D,\n            SAMPLER2D,\n            SAMPLER3D,\n            SAMPLERCUBE,\n            PIXELSHADER,\n            VERTEXSHADER,\n            COMPUTESHADER,\n            PIXELFRAGMENT,\n            VERTEXFRAGMENT,\n            UNSUPPORTED,\n            FORCE_DWORD = 0x7fffffff,\n        }\n\n        enum SAMPLERSTATETYPE \n        {\n            ADDRESSU       = 1,\n            ADDRESSV       = 2,\n            ADDRESSW       = 3,\n            BORDERCOLOR    = 4,\n            MAGFILTER      = 5,\n            MINFILTER      = 6,\n            MIPFILTER      = 7,\n            MIPMAPLODBIAS  = 8,\n            MAXMIPLEVEL    = 9,\n            MAXANISOTROPY  = 10,\n            SRGBTEXTURE    = 11,\n            ELEMENTINDEX   = 12,\n            DMAPOFFSET     = 13,\n                                        \n            FORCE_DWORD   = 0x7fffffff,\n        };\n\n        public enum STATE_CLASS\n        {\n            LIGHTENABLE,\n            FVF,\n            LIGHT,\n            MATERIAL,\n            NPATCHMODE,\n            PIXELSHADER,\n            RENDERSTATE,\n            SETSAMPLER,\n            SAMPLERSTATE,\n            TEXTURE,\n            TEXTURESTAGE,\n            TRANSFORM,\n            VERTEXSHADER,\n            SHADERCONST,\n            COMPUTESHADER,\n            UNKNOWN,\n        };\n\n        public enum MATERIAL_TYPE\n        {\n            DIFFUSE,\n            AMBIENT,\n            SPECULAR,\n            EMISSIVE,\n            POWER,\n        };\n\n        public enum LIGHT_TYPE\n        {\n            TYPE,\n            DIFFUSE,\n            SPECULAR,\n            AMBIENT,\n            POSITION,\n            DIRECTION,\n            RANGE,\n            FALLOFF,\n            ATTENUATION0,\n            ATTENUATION1,\n            ATTENUATION2,\n            THETA,\n            PHI,\n        };\n\n        public enum SHADER_CONSTANT_TYPE\n        {\n            VSFLOAT,\n            VSBOOL,\n            VSINT,\n            PSFLOAT,\n            PSBOOL,\n            PSINT,\n        }\n\n        public enum STATE_TYPE\n        {\n            CONSTANT,\n            PARAMETER,\n            EXPRESSION,\n            EXPRESSIONINDEX,\n        }\n\n        public class EffectParameterContent\n        {\n            public string name;\n            public string semantic;\n            public object data;\n            public PARAMETER_CLASS class_;\n            public PARAMETER_TYPE  type;\n            public uint rows;\n            public uint columns;\n            // MojoShader optimizes matrices to occupy less registers.\n            // columnsActual store the actual number of columns.\n            public uint columnsActual;\n            public uint element_count;\n            public uint annotation_count = 0;\n            public uint member_count;\n            public uint flags = 0;\n            public uint bytes = 0;\n\n            public int bufferIndex = -1;\n            public int bufferOffset = -1;\n\n            public EffectParameterContent[] annotation_handles = null;\n            public EffectParameterContent[] member_handles;\n\n            public override string ToString()\n            {\n                if (rows > 0 || columns > 0)\n                    return string.Format(\"{0} {1}{2}x{3} {4} : cb{5},{6}\", class_, type, rows, columns, name, bufferIndex, bufferOffset);\n                else\n                    return string.Format(\"{0} {1} {2}\", class_, type, name);\n            }\n        }\n        \n        public class EffectStateContent\n        {\n            public uint operation;\n            public uint index;\n            public STATE_TYPE type;\n            public EffectParameterContent parameter;\n        }\n\n        public class EffectSamplerContent\n        {\n            public uint state_count = 0;\n            public EffectStateContent[] states = null;\n        }\n        \n        public class EffectPassContent\n        {\n            public string name;\n            public uint state_count;\n            public uint annotation_count = 0;\n\n            public BlendState blendState;\n            public DepthStencilState depthStencilState;\n            public RasterizerState rasterizerState;\n\n            public EffectStateContent[] states;\n            public EffectParameterContent[] annotation_handles = null;\n        }\n\n        public class EffectTechniqueContent\n        {\n            public string name;\n            public uint pass_count;\n            public uint annotation_count = 0;\n\n            public EffectParameterContent[] annotation_handles = null;\n            public EffectPassContent[] pass_handles;\n        }\n\n        public class state_info\n        {\n            public STATE_CLASS class_ { get; private set; }\n            public uint op { get; private set; }\n            public string name { get; private set; }\n\n            public state_info(STATE_CLASS class_, uint op, string name) \n            {\n                this.class_ = class_;\n                this.op = op;\n                this.name = name;\n            }\n        }\n\n        /// <summary>\n        /// The shared state definition table.\n        /// </summary>\n        public static readonly state_info[] state_table =\n        {\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ZENABLE, \"ZENABLE\"), /* 0x0 */\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FILLMODE, \"FILLMODE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SHADEMODE, \"SHADEMODE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ZWRITEENABLE, \"ZWRITEENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ALPHATESTENABLE, \"ALPHATESTENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.LASTPIXEL, \"LASTPIXEL\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SRCBLEND, \"SRCBLEND\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DESTBLEND, \"DESTBLEND\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CULLMODE, \"CULLMODE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ZFUNC, \"ZFUNC\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ALPHAREF, \"ALPHAREF\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ALPHAFUNC, \"ALPHAFUNC\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DITHERENABLE, \"DITHERENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ALPHABLENDENABLE, \"ALPHABLENDENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGENABLE, \"FOGENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SPECULARENABLE, \"SPECULARENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGCOLOR, \"FOGCOLOR\"), /* 0x10 */\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGTABLEMODE, \"FOGTABLEMODE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGSTART, \"FOGSTART\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGEND, \"FOGEND\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGDENSITY, \"FOGDENSITY\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.RANGEFOGENABLE, \"RANGEFOGENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILENABLE, \"STENCILENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILFAIL, \"STENCILFAIL\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILZFAIL, \"STENCILZFAIL\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILPASS, \"STENCILPASS\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILFUNC, \"STENCILFUNC\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILREF, \"STENCILREF\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILMASK, \"STENCILMASK\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILWRITEMASK, \"STENCILWRITEMASK\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.TEXTUREFACTOR, \"TEXTUREFACTOR\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP0, \"WRAP0\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP1, \"WRAP1\"), /* 0x20 */\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP2, \"WRAP2\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP3, \"WRAP3\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP4, \"WRAP4\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP5, \"WRAP5\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP6, \"WRAP6\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP7, \"WRAP7\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP8, \"WRAP8\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP9, \"WRAP9\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP10, \"WRAP10\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP11, \"WRAP11\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP12, \"WRAP12\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP13, \"WRAP13\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP14, \"WRAP14\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP15, \"WRAP15\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CLIPPING, \"CLIPPING\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.LIGHTING, \"LIGHTING\"), /* 0x30 */\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.AMBIENT, \"AMBIENT\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGVERTEXMODE, \"FOGVERTEXMODE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORVERTEX, \"COLORVERTEX\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.LOCALVIEWER, \"LOCALVIEWER\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.NORMALIZENORMALS, \"NORMALIZENORMALS\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DIFFUSEMATERIALSOURCE, \"DIFFUSEMATERIALSOURCE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SPECULARMATERIALSOURCE, \"SPECULARMATERIALSOURCE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.AMBIENTMATERIALSOURCE, \"AMBIENTMATERIALSOURCE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.EMISSIVEMATERIALSOURCE, \"EMISSIVEMATERIALSOURCE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.VERTEXBLEND, \"VERTEXBLEND\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CLIPPLANEENABLE, \"CLIPPLANEENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSIZE, \"POINTSIZE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSIZE_MIN, \"POINTSIZE_MIN\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSIZE_MAX, \"POINTSIZE_MAX\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSPRITEENABLE, \"POINTSPRITEENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSCALEENABLE, \"POINTSCALEENABLE\"), /* 0x40 */\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSCALE_A, \"POINTSCALE_A\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSCALE_B, \"POINTSCALE_B\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSCALE_C, \"POINTSCALE_C\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.MULTISAMPLEANTIALIAS, \"MULTISAMPLEANTIALIAS\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.MULTISAMPLEMASK, \"MULTISAMPLEMASK\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.PATCHEDGESTYLE, \"PATCHEDGESTYLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DEBUGMONITORTOKEN, \"DEBUGMONITORTOKEN\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.INDEXEDVERTEXBLENDENABLE, \"INDEXEDVERTEXBLENDENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORWRITEENABLE, \"COLORWRITEENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.TWEENFACTOR, \"TWEENFACTOR\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.BLENDOP, \"BLENDOP\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POSITIONDEGREE, \"POSITIONDEGREE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.NORMALDEGREE, \"NORMALDEGREE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SCISSORTESTENABLE, \"SCISSORTESTENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SLOPESCALEDEPTHBIAS, \"SLOPESCALEDEPTHBIAS\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ANTIALIASEDLINEENABLE, \"ANTIALIASEDLINEENABLE\"), /* 0x50 */\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.MINTESSELLATIONLEVEL, \"MINTESSELLATIONLEVEL\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.MAXTESSELLATIONLEVEL, \"MAXTESSELLATIONLEVEL\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ADAPTIVETESS_X, \"ADAPTIVETESS_X\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ADAPTIVETESS_Y, \"ADAPTIVETESS_Y\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ADAPTIVETESS_Z, \"ADAPTIVETESS_Z\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ADAPTIVETESS_W, \"ADAPTIVETESS_W\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ENABLEADAPTIVETESSELLATION, \"ENABLEADAPTIVETESSELLATION\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.TWOSIDEDSTENCILMODE, \"TWOSIDEDSTENCILMODE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CCW_STENCILFAIL, \"CCW_STENCILFAIL\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CCW_STENCILZFAIL, \"CCW_STENCILZFAIL\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CCW_STENCILPASS, \"CCW_STENCILPASS\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CCW_STENCILFUNC, \"CCW_STENCILFUNC\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORWRITEENABLE1, \"COLORWRITEENABLE1\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORWRITEENABLE2, \"COLORWRITEENABLE2\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORWRITEENABLE3, \"COLORWRITEENABLE3\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.BLENDFACTOR, \"BLENDFACTOR\"), /* 0x60 */\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SRGBWRITEENABLE, \"SRGBWRITEENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DEPTHBIAS, \"DEPTHBIAS\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SEPARATEALPHABLENDENABLE, \"SEPARATEALPHABLENDENABLE\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SRCBLENDALPHA, \"SRCBLENDALPHA\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DESTBLENDALPHA, \"DESTBLENDALPHA\"),\n            new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.BLENDOPALPHA, \"BLENDOPALPHA\"),\n            /* Texture stages */\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.COLOROP, \"COLOROP\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.COLORARG0, \"COLORARG0\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.COLORARG1, \"COLORARG1\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.COLORARG2, \"COLORARG2\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.ALPHAOP, \"ALPHAOP\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.ALPHAARG0, \"ALPHAARG0\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.ALPHAARG1, \"ALPHAARG1\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.ALPHAARG2, \"ALPHAARG2\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.RESULTARG, \"RESULTARG\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVMAT00, \"BUMPENVMAT00\"), /* 0x70 */\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVMAT01, \"BUMPENVMAT01\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVMAT10, \"BUMPENVMAT10\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVMAT11, \"BUMPENVMAT11\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.TEXCOORDINDEX, \"TEXCOORDINDEX\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVLSCALE, \"BUMPENVLSCALE\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVLOFFSET, \"BUMPENVLOFFSET\"),\n            new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.TEXTURETRANSFORMFLAGS, \"TEXTURETRANSFORMFLAGS\"),\n            /* */\n            new state_info(STATE_CLASS.UNKNOWN, 0, \"UNKNOWN\"),\n            /* NPatchMode */\n            new state_info(STATE_CLASS.NPATCHMODE, 0, \"NPatchMode\"),\n            /* */\n            new state_info(STATE_CLASS.UNKNOWN, 0, \"UNKNOWN\"),\n            /* Transform */\n            new state_info(STATE_CLASS.TRANSFORM, (uint)TRANSFORMSTATETYPE.PROJECTION, \"PROJECTION\"),\n            new state_info(STATE_CLASS.TRANSFORM, (uint)TRANSFORMSTATETYPE.VIEW, \"VIEW\"),\n            new state_info(STATE_CLASS.TRANSFORM, (uint)TRANSFORMSTATETYPE.WORLD, \"WORLD\"),\n            new state_info(STATE_CLASS.TRANSFORM, (uint)TRANSFORMSTATETYPE.TEXTURE0, \"TEXTURE0\"),\n            /* Material */\n            new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.DIFFUSE, \"MaterialDiffuse\"),\n            new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.AMBIENT, \"MaterialAmbient\"), /* 0x80 */\n            new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.SPECULAR, \"MaterialSpecular\"),\n            new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.EMISSIVE, \"MaterialEmissive\"),\n            new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.POWER, \"MaterialPower\"),\n            /* Light */\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.TYPE, \"LightType\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.DIFFUSE, \"LightDiffuse\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.SPECULAR, \"LightSpecular\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.AMBIENT, \"LightAmbient\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.POSITION, \"LightPosition\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.DIRECTION, \"LightDirection\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.RANGE, \"LightRange\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.FALLOFF, \"LightFallOff\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.ATTENUATION0, \"LightAttenuation0\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.ATTENUATION1, \"LightAttenuation1\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.ATTENUATION2, \"LightAttenuation2\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.THETA, \"LightTheta\"),\n            new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.PHI, \"LightPhi\"), /* 0x90 */\n            /* Ligthenable */\n            new state_info(STATE_CLASS.LIGHTENABLE, 0, \"LightEnable\"),\n            /* Vertexshader */\n            new state_info(STATE_CLASS.VERTEXSHADER, 0, \"Vertexshader\"),\n            /* Pixelshader */\n            new state_info(STATE_CLASS.PIXELSHADER, 0, \"Pixelshader\"),\n            /* ComputerShader */\n            new state_info(STATE_CLASS.COMPUTESHADER, 0, \"ComputeShader\"),\n            /* Shader constants */\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, \"VertexShaderConstantF\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSBOOL, \"VertexShaderConstantB\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSINT, \"VertexShaderConstantI\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, \"VertexShaderConstant\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, \"VertexShaderConstant1\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, \"VertexShaderConstant2\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, \"VertexShaderConstant3\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, \"VertexShaderConstant4\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, \"PixelShaderConstantF\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSBOOL, \"PixelShaderConstantB\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSINT, \"PixelShaderConstantI\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, \"PixelShaderConstant\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, \"PixelShaderConstant1\"), /* 0xa0 */\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, \"PixelShaderConstant2\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, \"PixelShaderConstant3\"),\n            new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, \"PixelShaderConstant4\"),\n            /* Texture */\n            new state_info(STATE_CLASS.TEXTURE, 0, \"Texture\"),\n            /* Sampler states */\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.ADDRESSU, \"AddressU\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.ADDRESSV, \"AddressV\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.ADDRESSW, \"AddressW\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.BORDERCOLOR, \"BorderColor\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MAGFILTER, \"MagFilter\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MINFILTER, \"MinFilter\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MIPFILTER, \"MipFilter\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MIPMAPLODBIAS, \"MipMapLodBias\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MAXMIPLEVEL, \"MaxMipLevel\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MAXANISOTROPY, \"MaxAnisotropy\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.SRGBTEXTURE, \"SRGBTexture\"),\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.ELEMENTINDEX, \"ElementIndex\"), /* 0xb0 */\n            new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.DMAPOFFSET, \"DMAPOffset\"),\n            /* Set sampler */\n            new state_info(STATE_CLASS.SETSAMPLER, 0, \"Sampler\"),\n        };\n\n        static public EffectParameterClass ToXNAParameterClass( PARAMETER_CLASS class_ )\n        {\n            switch (class_) \n            {\n                case PARAMETER_CLASS.SCALAR:\n                    return EffectParameterClass.Scalar;\n                case PARAMETER_CLASS.VECTOR:\n                    return EffectParameterClass.Vector;\n                case PARAMETER_CLASS.MATRIX_ROWS:\n                case PARAMETER_CLASS.MATRIX_COLUMNS:\n                    return EffectParameterClass.Matrix;\n                case PARAMETER_CLASS.OBJECT:\n                    return EffectParameterClass.Object;\n                case PARAMETER_CLASS.STRUCT:\n                    return EffectParameterClass.Struct;\n                default:\n                    throw new NotImplementedException();\n            }\n        }\n\n        static public EffectParameterType ToXNAParameterType(PARAMETER_TYPE type)\n        {\n            switch (type) \n            {\n                case PARAMETER_TYPE.BOOL:\n                    return EffectParameterType.Bool;\n                case PARAMETER_TYPE.INT:\n                    return EffectParameterType.Int32;\n                case PARAMETER_TYPE.FLOAT:\n                    return EffectParameterType.Single;\n                case PARAMETER_TYPE.STRING:\n                    return EffectParameterType.String;\n                case PARAMETER_TYPE.TEXTURE:\n                    return EffectParameterType.Texture;\n                case PARAMETER_TYPE.TEXTURE1D:\n                    return EffectParameterType.Texture1D;\n                case PARAMETER_TYPE.TEXTURE2D:\n                    return EffectParameterType.Texture2D;\n                case PARAMETER_TYPE.TEXTURE3D:\n                    return EffectParameterType.Texture3D;\n                case PARAMETER_TYPE.TEXTURECUBE:\n                    return EffectParameterType.TextureCube;\n                default:\n                    throw new NotImplementedException();\n            }\n        }\n\n        static internal VertexElementUsage ToXNAVertexElementUsage(MojoShader.Usage usage)\n        {\n            switch (usage)\n            {\n                case MojoShader.Usage.POSITION:\n                    return VertexElementUsage.Position;\n                case MojoShader.Usage.BLENDWEIGHT:\n                    return VertexElementUsage.BlendWeight;\n                case MojoShader.Usage.BLENDINDICES:\n                    return VertexElementUsage.BlendIndices;\n                case MojoShader.Usage.NORMAL:\n                    return VertexElementUsage.Normal;\n                case MojoShader.Usage.POINTSIZE:\n                    return VertexElementUsage.PointSize;\n                case MojoShader.Usage.TEXCOORD:\n                    return VertexElementUsage.TextureCoordinate;\n                case MojoShader.Usage.TANGENT:\n                    return VertexElementUsage.Tangent;\n                case MojoShader.Usage.BINORMAL:\n                    return VertexElementUsage.Binormal;\n                case MojoShader.Usage.TESSFACTOR:\n                    return VertexElementUsage.TessellateFactor;\n                case MojoShader.Usage.COLOR:\n                    return VertexElementUsage.Color;\n                case MojoShader.Usage.FOG:\n                    return VertexElementUsage.Fog;\n                case MojoShader.Usage.DEPTH:\n                    return VertexElementUsage.Depth;\n                case MojoShader.Usage.SAMPLE:\n                    return VertexElementUsage.Sample;\n\n                default:\n                    throw new NotImplementedException();\n            }\n        }\n\n        internal static int GetShaderIndex(STATE_CLASS type, EffectStateContent[] states)\n        {\n            foreach (EffectStateContent state in states)\n            {\n                state_info operation = state_table[state.operation];\n                if (operation.class_ != type)\n                    continue;\n\n                if (state.type != STATE_TYPE.CONSTANT)\n                    throw new NotSupportedException(\"We do not support shader expressions!\");\n\n                return (int)state.parameter.data;\n            }\n\n            return -1;\n        }\n\n        public EffectParameterContent[] Objects { get; private set; }\n\n        public EffectParameterContent[] Parameters { get; internal set; }\n\n        public EffectTechniqueContent[] Techniques { get; internal set; }\n\n        public List<ShaderData> Shaders { get; internal set; }\n\n        public List<ConstantBufferData> ConstantBuffers { get; internal set; }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/GLSLBytecode.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    internal class GLSLBytecode\n    {\n        internal readonly byte Major;\n        internal readonly byte Minor;\n        internal readonly bool ES;\n        internal readonly byte[] Bytecode;\n\n        public GLSLBytecode(byte major, byte minor, bool es, byte[] bytecode)\n        {\n            this.Major = major;\n            this.Minor = minor;\n            this.ES = es;\n            this.Bytecode = bytecode;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/KNIFXWriter11.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    class KNIFXWriter11 : BinaryWriter\n    {\n        internal const string KNIFXSignature = \"KNIF\";\n        internal const int Version = 11;\n\n        public KNIFXWriter11(Stream output) : base(output)\n        {\n        }\n\n        protected void WritePackedInt(int value)\n        {\n            // write zigzag encoded int\n            int zzint = ((value << 1) ^ (value >> 31));\n            Write7BitEncodedInt(zzint);\n        }\n\n        internal void WriteEffect(EffectObject effectObject, bool integersAsFloats)\n        {\n            Write((bool)integersAsFloats);\n            WriteConstantBuffers(effectObject.ConstantBuffers);\n            WriteShaders(effectObject.Shaders);\n            WriteParameters(effectObject.Parameters, effectObject.Parameters.Length);\n            WriteTechniques(effectObject.Techniques);\n        }\n\n        private void WriteConstantBuffers(ICollection<ConstantBufferData> constantBuffers)\n        {\n            WritePackedInt(constantBuffers.Count);\n            foreach (ConstantBufferData cbuffer in constantBuffers)\n                WriteConstantBuffer(cbuffer);\n        }\n\n        private void WriteConstantBuffer(ConstantBufferData cbuffer)\n        {\n            Write(cbuffer.Name);\n\n            WritePackedInt(cbuffer.Size);\n\n            WritePackedInt(cbuffer.ParameterIndex.Count);\n            for (int i = 0; i < cbuffer.ParameterIndex.Count; i++)\n            {\n                WritePackedInt(cbuffer.ParameterIndex[i]);\n                Write((ushort)cbuffer.ParameterOffset[i]);\n            }\n        }\n\n        private void WriteShaders(ICollection<ShaderData> shaders)\n        {\n            WritePackedInt(shaders.Count);\n            foreach (ShaderData shader in shaders)\n                WriteShader(shader);\n        }\n\n        private void WriteShader(ShaderData shader)\n        {\n            Write((byte)shader.Stage);\n            WriteShaderVersion(shader.ShaderVersion);\n\n            Write(shader.ShaderCode.Length);\n            Write(shader.ShaderCode);\n\n            Debug.WriteLine(\"Write Samplers (\"+ shader._samplers.Length + \")\");\n            foreach (SamplerInfo sampler in shader._samplers)\n            {\n                Debug.WriteLine(\" \");\n                Debug.WriteLine(\" GLsamplerName: \" + sampler.GLsamplerName);\n                Debug.WriteLine(\" textureName: //\" + sampler.textureName);\n                Debug.WriteLine(\" type: \" + sampler.type);\n                Debug.WriteLine(\" textureSlot: #\" + sampler.textureSlot);\n                Debug.WriteLine(\" samplerSlot: #\" + sampler.samplerSlot);\n                bool hasState = sampler.state != null;\n                Debug.WriteLine(\" hasState: \" + hasState);\n                if (hasState)\n                {\n                    Debug.WriteLine(\"  Filter: \" + sampler.state.Filter);\n                    Debug.WriteLine(\"  AddressU: \" + sampler.state.AddressU);\n                    Debug.WriteLine(\"  AddressV: \" + sampler.state.AddressV);\n                }\n            }\n            Debug.WriteLine(\"\");\n\n            WritePackedInt(shader._samplers.Length);\n            foreach (SamplerInfo sampler in shader._samplers)\n            {\n                Write((byte)sampler.type);\n                Write((byte)sampler.textureSlot);\n                Write((byte)sampler.samplerSlot);\n\n                if (sampler.state != null)\n                {\n                    Write(true);\n                    WriteSamplerState(sampler.state);\n                }\n                else\n                    Write(false);\n\n                Write(sampler.GLsamplerName);\n\n                WritePackedInt(sampler.textureParameter);\n            }\n\n            WritePackedInt(shader._cbuffers.Length);\n            foreach (int cb in shader._cbuffers)\n                WritePackedInt((byte)cb);\n\n\n            Debug.WriteLine(\"Write _attributes (\" + shader._attributes.Length + \")\");\n            foreach (ShaderData.Attribute attrib in shader._attributes)\n            {\n                Debug.WriteLine(\" \");\n                Debug.WriteLine(\" name: \" + attrib.name);\n                Debug.WriteLine(\" usage: \" + attrib.usage);\n                Debug.WriteLine(\" index: \" + attrib.index);\n                Debug.WriteLine(\" location: \" + attrib.location);\n            }\n\n            WritePackedInt(shader._attributes.Length);\n            foreach (ShaderData.Attribute attrib in shader._attributes)\n            {\n                Write(attrib.name);\n                Write((byte)attrib.usage);\n                WritePackedInt(attrib.index);\n                Write((short)attrib.location);\n            }\n        }\n\n        private void WriteShaderVersion(ShaderVersion shaderVersion)\n        {\n            WritePackedInt(checked((ushort)shaderVersion.Major));\n            WritePackedInt(checked((ushort)shaderVersion.Minor));\n        }\n\n        private void WriteSamplerState(SamplerState state)\n        {\n            Write((byte)state.AddressU);\n            Write((byte)state.AddressV);\n            Write((byte)state.AddressW);\n            Write(state.BorderColor.R);\n            Write(state.BorderColor.G);\n            Write(state.BorderColor.B);\n            Write(state.BorderColor.A);\n            Write((byte)state.Filter);\n            WritePackedInt(state.MaxAnisotropy);\n            WritePackedInt(state.MaxMipLevel);\n            Write(state.MipMapLevelOfDetailBias);\n        }\n\n        private void WriteParameters(EffectObject.EffectParameterContent[] parameters, int count)\n        {\n            WritePackedInt(count);\n            for (int i = 0; i < count; i++)\n                WriteParameter(parameters[i]);\n        }\n\n        private void WriteParameter(EffectObject.EffectParameterContent param)\n        {\n            EffectParameterClass paramClass = EffectObject.ToXNAParameterClass(param.class_);\n            EffectParameterType paramType = EffectObject.ToXNAParameterType(param.type);\n            Write((byte)paramClass);\n            Write((byte)paramType);\n\n            Write(param.name);\n            Write(param.semantic);\n            WriteAnnotations(param.annotation_handles);\n\n            Write((byte)param.rows);\n            Write((byte)param.columns);\n            Write((byte)param.columnsActual);\n\n            // Write the elements or struct members.\n            WriteParameters(param.member_handles, (int)param.element_count);\n            WriteParameters(param.member_handles, (int)param.member_count);\n\n            if (param.element_count == 0 && param.member_count == 0)\n            {\n                switch (paramType)\n                {\n                    case EffectParameterType.Bool:\n                    case EffectParameterType.Int32:\n                    case EffectParameterType.Single:\n                        Write((byte[])param.data);\n                        break;\n                }\n            }\n        }\n\n        private void WriteTechniques(EffectObject.EffectTechniqueContent[] techniques)\n        {\n            WritePackedInt(techniques.Length);\n            foreach (EffectObject.EffectTechniqueContent technique in techniques)\n            {\n                Write(technique.name);\n                WriteAnnotations(technique.annotation_handles);\n\n                // Write the passes.\n                WritePasses(technique);\n            }\n        }\n\n        private void WritePasses(EffectObject.EffectTechniqueContent technique)\n        {\n            WritePackedInt((int)technique.pass_count);\n            for (int p = 0; p < technique.pass_count; p++)\n            {\n                EffectObject.EffectPassContent pass = technique.pass_handles[p];\n                WriteEffectPass(pass);\n            }\n        }\n\n        private void WriteEffectPass(EffectObject.EffectPassContent pass)\n        {\n            Write(pass.name);\n            WriteAnnotations(pass.annotation_handles);\n\n            // Write the index for the vertex and pixel shaders.\n            int vertexShaderIndex  = EffectObject.GetShaderIndex(EffectObject.STATE_CLASS.VERTEXSHADER, pass.states);\n            int pixelShaderIndex   = EffectObject.GetShaderIndex(EffectObject.STATE_CLASS.PIXELSHADER, pass.states);\n            int computeShaderIndex = EffectObject.GetShaderIndex(EffectObject.STATE_CLASS.COMPUTESHADER, pass.states);\n            WritePackedInt(vertexShaderIndex);\n            WritePackedInt(pixelShaderIndex);\n            WritePackedInt(computeShaderIndex);\n\n            // Write the state objects too!\n            if (pass.blendState != null)\n            {\n                Write(true);\n                WriteBlendState(pass.blendState);\n            }\n            else\n                Write(false);\n\n            if (pass.depthStencilState != null)\n            {\n                Write(true);\n                WriteDepthStencilState(pass.depthStencilState);\n            }\n            else\n                Write(false);\n\n            if (pass.rasterizerState != null)\n            {\n                Write(true);\n                WriteRasterizerState(pass.rasterizerState);\n            }\n            else\n                Write(false);\n        }\n\n        private void WriteBlendState(BlendState blendState)\n        {\n            Write((byte)blendState.AlphaBlendFunction);\n            Write((byte)blendState.AlphaDestinationBlend);\n            Write((byte)blendState.AlphaSourceBlend);\n            Write(blendState.BlendFactor.R);\n            Write(blendState.BlendFactor.G);\n            Write(blendState.BlendFactor.B);\n            Write(blendState.BlendFactor.A);\n            Write((byte)blendState.ColorBlendFunction);\n            Write((byte)blendState.ColorDestinationBlend);\n            Write((byte)blendState.ColorSourceBlend);\n            Write((byte)blendState.ColorWriteChannels);\n            Write((byte)blendState.ColorWriteChannels1);\n            Write((byte)blendState.ColorWriteChannels2);\n            Write((byte)blendState.ColorWriteChannels3);\n            Write(blendState.MultiSampleMask);\n        }\n\n        private void WriteDepthStencilState(DepthStencilState depthStencilState)\n        {\n            Write((byte)depthStencilState.CounterClockwiseStencilDepthBufferFail);\n            Write((byte)depthStencilState.CounterClockwiseStencilFail);\n            Write((byte)depthStencilState.CounterClockwiseStencilFunction);\n            Write((byte)depthStencilState.CounterClockwiseStencilPass);\n            Write(depthStencilState.DepthBufferEnable);\n            Write((byte)depthStencilState.DepthBufferFunction);\n            Write(depthStencilState.DepthBufferWriteEnable);\n            Write(depthStencilState.ReferenceStencil);\n            Write((byte)depthStencilState.StencilDepthBufferFail);\n            Write(depthStencilState.StencilEnable);\n            Write((byte)depthStencilState.StencilFail);\n            Write((byte)depthStencilState.StencilFunction);\n            Write(depthStencilState.StencilMask);\n            Write((byte)depthStencilState.StencilPass);\n            Write(depthStencilState.StencilWriteMask);\n            Write(depthStencilState.TwoSidedStencilMode);\n        }\n\n        private void WriteRasterizerState(RasterizerState rasterizerState)\n        {\n            Write((byte)rasterizerState.CullMode);\n            Write(rasterizerState.DepthBias);\n            Write((byte)rasterizerState.FillMode);\n            Write(rasterizerState.MultiSampleAntiAlias);\n            Write(rasterizerState.ScissorTestEnable);\n            Write(rasterizerState.SlopeScaleDepthBias);\n        }\n\n        private void WriteAnnotations(EffectObject.EffectParameterContent[] annotations)\n        {\n            int count = annotations == null ? 0 : annotations.Length;\n            WritePackedInt(count);\n\n            // TODO: Annotations are not implemented!\n            System.Diagnostics.Debug.Assert(count == 0);\n\n            //for (int i = 0; i < count; i++)\n            //    WriteParameter(writer, annotations[i]);\n        }\n\n        //protected void Write7BitEncodedInt(int value)\n        //{\n        //    unchecked\n        //    {\n        //        do\n        //        {\n        //            byte value7bit = (byte)(value & 0x7f);\n        //            value = (int)((uint)value >> 7);\n        //            if (value != 0)\n        //                value7bit |= 0x80;\n        //            Write(value7bit);\n        //        }\n        //        while (value != 0);\n        //    }\n        //}\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/MarshalHelper.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    internal class MarshalHelper\n    {\n        public static T Unmarshal<T>(IntPtr ptr)\n        {\n            Type type = typeof(T);\n            T result = (T)Marshal.PtrToStructure(ptr, type);\n            return result;\n        }\n\n        public static T[] UnmarshalArray<T>(IntPtr ptr, int count) \n        {\n            Type type = typeof(T);\n            int size = Marshal.SizeOf(type);            \n            T[] ret = new T[count];\n\n            for (int i = 0; i < count; i++)\n            {\n                int offset = i * size;\n                IntPtr structPtr = ptr + offset;\n                ret[i] = (T)Marshal.PtrToStructure(structPtr, type);\n            }\n\n            return ret;\n        }\n\n        public static byte[] UnmarshalArray(IntPtr ptr, int count)\n        {\n            byte[] result = new byte[count];\n            Marshal.Copy(ptr, result, 0, count);\n            return result;\n        }\t\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/MojoShader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    internal class MojoShader\n    {\n#if OLD_CONTENT_PROCESSORS\n        const string mojoshader_dll = \"libmojoshader_32.dll\";\n#else\n        const string mojoshader_dll = \"libmojoshader_64.dll\";\n#endif\n\n        public partial class NativeConstants\n        {\n            /// MOJOSHADER_VERSION -> 1111\n            public const int MOJOSHADER_VERSION = 1111;\n\n            /// MOJOSHADER_CHANGESET -> \"hg-1111:91a6af79b5e4\"\n            public const string MOJOSHADER_CHANGESET = \"hg-1111:91a6af79b5e4\";\n\n            /// POSITION_NONE -> (-3)\n            public const int POSITION_NONE = -3;\n\n            /// POSITION_BEFORE -> (-2)\n            public const int POSITION_BEFORE = -2;\n\n            /// POSITION_AFTER -> (-1)\n            public const int POSITION_AFTER = -1;\n\n            /// PROFILE_D3D -> \"d3d\"\n            public const string PROFILE_D3D = \"d3d\";\n\n            /// PROFILE_BYTECODE -> \"bytecode\"\n            public const string PROFILE_BYTECODE = \"bytecode\";\n\n            /// PROFILE_GLSL -> \"glsl\"\n            public const string PROFILE_GLSL = \"glsl\";\n\n            /// PROFILE_GLSL120 -> \"glsl120\"\n            public const string PROFILE_GLSL120 = \"glsl120\";\n\n            /// PROFILE_ARB1 -> \"arb1\"\n            public const string PROFILE_ARB1 = \"arb1\";\n\n            /// PROFILE_NV2 -> \"nv2\"\n            public const string PROFILE_NV2 = \"nv2\";\n\n            /// PROFILE_NV3 -> \"nv3\"\n            public const string PROFILE_NV3 = \"nv3\";\n\n            /// PROFILE_NV4 -> \"nv4\"\n            public const string PROFILE_NV4 = \"nv4\";\n\n            /// SRC_PROFILE_HLSL_VS_1_1 -> \"hlsl_vs_1_1\"\n            public const string SRC_PROFILE_HLSL_VS_1_1 = \"hlsl_vs_1_1\";\n\n            /// SRC_PROFILE_HLSL_VS_2_0 -> \"hlsl_vs_2_0\"\n            public const string SRC_PROFILE_HLSL_VS_2_0 = \"hlsl_vs_2_0\";\n\n            /// SRC_PROFILE_HLSL_VS_3_0 -> \"hlsl_vs_3_0\"\n            public const string SRC_PROFILE_HLSL_VS_3_0 = \"hlsl_vs_3_0\";\n\n            /// SRC_PROFILE_HLSL_PS_1_1 -> \"hlsl_ps_1_1\"\n            public const string SRC_PROFILE_HLSL_PS_1_1 = \"hlsl_ps_1_1\";\n\n            /// SRC_PROFILE_HLSL_PS_1_2 -> \"hlsl_ps_1_2\"\n            public const string SRC_PROFILE_HLSL_PS_1_2 = \"hlsl_ps_1_2\";\n\n            /// SRC_PROFILE_HLSL_PS_1_3 -> \"hlsl_ps_1_3\"\n            public const string SRC_PROFILE_HLSL_PS_1_3 = \"hlsl_ps_1_3\";\n\n            /// SRC_PROFILE_HLSL_PS_1_4 -> \"hlsl_ps_1_4\"\n            public const string SRC_PROFILE_HLSL_PS_1_4 = \"hlsl_ps_1_4\";\n\n            /// SRC_PROFILE_HLSL_PS_2_0 -> \"hlsl_ps_2_0\"\n            public const string SRC_PROFILE_HLSL_PS_2_0 = \"hlsl_ps_2_0\";\n\n            /// SRC_PROFILE_HLSL_PS_3_0 -> \"hlsl_ps_3_0\"\n            public const string SRC_PROFILE_HLSL_PS_3_0 = \"hlsl_ps_3_0\";\n\n            // CONST -> (1 << 31)\n            public const int CONST = (1) << (31);\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Uniform\n        {\n            /// UniformType->Anonymous_cf91fd71_65e4_4c31_a6d5_9488d7f3d32a\n            public UniformType type;\n\n            /// int\n            public int index;\n\n            /// int\n            public int array_count;\n\n            /// int\n            public int constant;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Constant\n        {\n            /// UniformType->Anonymous_cf91fd71_65e4_4c31_a6d5_9488d7f3d32a\n            public UniformType type;\n\n            /// int\n            public int index;\n\n            /// Anonymous_5371dd6a_e42a_47c1_91d1_a2af9a8283be\n            public Anonymous_5371dd6a_e42a_47c1_91d1_a2af9a8283be value;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Sampler\n        {\n            /// SamplerType->Anonymous_a752a39b_b479_42b0_9502_e39ba7d86100\n            public SamplerType type;\n\n            /// int\n            public int index;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n\n            /// int\n            public int texbem;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct SamplerMap\n        {\n            /// int\n            public int index;\n\n            /// SamplerType->Anonymous_a752a39b_b479_42b0_9502_e39ba7d86100\n            public SamplerType type;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Attribute\n        {\n            /// Usage->Anonymous_9c01433d_7bb5_4c50_bf77_e65cef0661b5\n            public Usage usage;\n\n            /// int\n            public int index;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n        }\n\n        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]\n        public struct Swizzle\n        {\n            /// Usage->Anonymous_9c01433d_7bb5_4c50_bf77_e65cef0661b5\n            public Usage usage;\n\n            /// unsigned int\n            public uint index;\n\n            /// unsigned char[4]\n            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]\n            public string swizzles;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct SymbolTypeInfo\n        {\n            /// SymbolClass->Anonymous_681c4b26_94f7_4142_a8e9_b970fe0b60df\n            public SymbolClass parameter_class;\n\n            /// SymbolType->Anonymous_d8534f21_7f44_465d_8843_40a435dbb54a\n            public SymbolType parameter_type;\n\n            /// unsigned int\n            public uint rows;\n\n            /// unsigned int\n            public uint columns;\n\n            /// unsigned int\n            public uint elements;\n\n            /// unsigned int\n            public uint member_count;\n\n            /// SymbolStructMember*\n            public IntPtr members;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct SymbolStructMember\n        {\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n\n            /// SymbolTypeInfo\n            public SymbolTypeInfo info;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Symbol\n        {\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n\n            /// SymbolRegisterSet->Anonymous_9ff7ac54_131c_43b0_a295_9830d24ac76b\n            public SymbolRegisterSet register_set;\n\n            /// unsigned int\n            public uint register_index;\n\n            /// unsigned int\n            public uint register_count;\n\n            /// SymbolTypeInfo\n            public SymbolTypeInfo info;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Error\n        {\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string error;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string filename;\n\n            /// int\n            public int error_position;\n        }\n\n        public enum PreshaderOpcode\n        {\n            NOP,\n            MOV,\n            NEG,\n            RCP,\n            FRC,\n            EXP,\n            LOG,\n            RSQ,\n            SIN,\n            COS,\n            ASIN,\n            ACOS,\n            ATAN,\n            MIN,\n            MAX,\n            LT,\n            GE,\n            ADD,\n            MUL,\n            ATAN2,\n            DIV,\n            CMP,\n            MOVC,\n            DOT,\n            NOISE,\n            SCALAR_OPS,\n\n            /// MIN_SCALAR -> SCALAR_OPS\n            MIN_SCALAR = PreshaderOpcode.SCALAR_OPS,\n\n            MAX_SCALAR,\n            LT_SCALAR,\n            GE_SCALAR,\n            ADD_SCALAR,\n            MUL_SCALAR,\n            ATAN2_SCALAR,\n            DIV_SCALAR,\n            DOT_SCALAR,\n            NOISE_SCALAR,\n        }\n\n        public enum PreshaderOperandType\n        {\n            /// LITERAL -> 1\n            LITERAL = 1,\n            /// INPUT -> 2\n            INPUT = 2,\n            /// OUTPUT -> 4\n            OUTPUT = 4,\n            /// TEMP -> 7\n            TEMP = 7,\n            /// UNKN -> 0xff\n            UNKN = 255,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct PreshaderOperand\n        {\n\n            /// PreshaderOperandType\n            public PreshaderOperandType type;\n\n            /// unsigned int\n            public uint index;\n\n            /// int\n            public int indexingType;\n\n            /// unsigned int\n            public uint indexingIndex;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct PreshaderInstruction\n        {\n\n            /// PreshaderOpcode\n            public PreshaderOpcode opcode;\n\n            /// unsigned int\n            public uint element_count;\n\n            /// unsigned int\n            public uint operand_count;\n\n            /// PreshaderOperand[4]\n            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.Struct)]\n            public PreshaderOperand[] operands;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Preshader\n        {\n            /// unsigned int\n            public uint literal_count;\n\n            /// double*\n            public IntPtr literals;\n\n            /// unsigned int\n            public uint temp_count;\n\n            /// unsigned int\n            public uint symbol_count;\n\n            /// Symbol*\n            public IntPtr symbols;\n\n            /// unsigned int\n            public uint instruction_count;\n\n            /// PreshaderInstruction*\n            public IntPtr instructions;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct ParseData\n        {\n            /// int\n            public int error_count;\n\n            /// Error*\n            public IntPtr errors;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string profile;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string output;\n\n            /// int\n            public int output_len;\n\n            /// int\n            public int instruction_count;\n\n            /// ShaderType->Anonymous_96517ad6_cc69_4542_8537_054e63919d54\n            public ShaderType shader_type;\n\n            /// int\n            public int major_ver;\n\n            /// int\n            public int minor_ver;\n\n            /// int\n            public int uniform_count;\n\n            /// Uniform*\n            public IntPtr uniforms;\n\n            /// int\n            public int constant_count;\n\n            /// Constant*\n            public IntPtr constants;\n\n            /// int\n            public int sampler_count;\n\n            /// Sampler*\n            public IntPtr samplers;\n\n            /// int\n            public int attribute_count;\n\n            /// Attribute*\n            public IntPtr attributes;\n\n            /// int\n            public int output_count;\n\n            /// Attribute*\n            public IntPtr outputs;\n\n            /// int\n            public int swizzle_count;\n\n            /// Swizzle*\n            public IntPtr swizzles;\n\n            /// int\n            public int symbol_count;\n\n            /// Symbol*\n            public IntPtr symbols;\n\n            /// Preshader*\n            public IntPtr preshader;\n\n            /// Malloc\n            public IntPtr malloc;\n\n            /// Free\n            public IntPtr free;\n\n            /// void*\n            public IntPtr malloc_data;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct EffectParam\n        {\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string semantic;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct EffectState\n        {\n            /// unsigned int\n            public uint type;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct EffectPass\n        {\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n\n            /// unsigned int\n            public uint state_count;\n\n            /// EffectState*\n            public IntPtr states;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct EffectTechnique\n        {\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n\n            /// unsigned int\n            public uint pass_count;\n\n            /// EffectPass*\n            public IntPtr passes;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct EffectTexture\n        {\n\n            /// unsigned int\n            public uint param;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string name;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct EffectShader\n        {\n            /// unsigned int\n            public uint technique;\n\n            /// unsigned int\n            public uint pass;\n\n            /// ParseData*\n            public IntPtr shader;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct Effect\n        {\n            /// int\n            public int error_count;\n\n            /// Error*\n            public IntPtr errors;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string profile;\n\n            /// int\n            public int param_count;\n\n            /// EffectParam*\n            public IntPtr @params;\n\n            /// int\n            public int technique_count;\n\n            /// EffectTechnique*\n            public IntPtr techniques;\n\n            /// int\n            public int texture_count;\n\n            /// EffectTexture*\n            public IntPtr textures;\n\n            /// int\n            public int shader_count;\n\n            /// EffectShader*\n            public IntPtr shaders;\n\n            /// Malloc\n            public IntPtr malloc;\n\n            /// Free\n            public IntPtr free;\n\n            /// void*\n            public IntPtr malloc_data;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct PreprocessorDefine\n        {\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string identifier;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string definition;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct PreprocessData\n        {\n            /// int\n            public int error_count;\n\n            /// Error*\n            public IntPtr errors;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string output;\n\n            /// int\n            public int output_len;\n\n            /// Malloc\n            public IntPtr malloc;\n\n            /// Free\n            public IntPtr free;\n\n            /// void*\n            public IntPtr malloc_data;\n        }\n\n        /// Return Type: int\n        ///inctype: IncludeType->Anonymous_f1eed39d_7d1b_46d4_972e_a3229d15c26e\n        ///fname: char*\n        ///parent: char*\n        ///outdata: char**\n        ///outbytes: unsigned int*\n        ///m: Malloc\n        ///f: Free\n        ///d: void*\n        public delegate int IncludeOpen(IncludeType inctype, [In()] [MarshalAs(UnmanagedType.LPStr)] string fname, [In()] [MarshalAs(UnmanagedType.LPStr)] string parent, ref IntPtr outdata, ref uint outbytes, IntPtr m, IntPtr f, IntPtr d);\n\n        /// Return Type: void\n        ///data: char*\n        ///m: Malloc\n        ///f: Free\n        ///d: void*\n        public delegate void IncludeClose([In()] [MarshalAs(UnmanagedType.LPStr)] string data, IntPtr m, IntPtr f, IntPtr d);\n\n        public enum AstDataTypeType\n        {\n            NONE,\n            BOOL,\n            INT,\n            UINT,\n            FLOAT,\n            FLOAT_SNORM,\n            FLOAT_UNORM,\n            HALF,\n            DOUBLE,\n            STRING,\n            SAMPLER_1D,\n            SAMPLER_2D,\n            SAMPLER_3D,\n            SAMPLER_CUBE,\n            SAMPLER_STATE,\n            SAMPLER_COMPARISON_STATE,\n            STRUCT,\n            ARRAY,\n            VECTOR,\n            MATRIX,\n            BUFFER,\n            FUNCTION,\n            USER,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstDataTypeStructMember\n        {\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string identifier;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstDataTypeStruct\n        {\n\n            /// AstDataTypeType\n            public AstDataTypeType type;\n\n            /// AstDataTypeStructMember*\n            public IntPtr members;\n\n            /// int\n            public int member_count;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstDataTypeArray\n        {\n\n            /// AstDataTypeType\n            public AstDataTypeType type;\n\n            /// AstDataType*\n            public IntPtr @base;\n\n            /// int\n            public int elements;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstDataTypeMatrix\n        {\n\n            /// AstDataTypeType\n            public AstDataTypeType type;\n\n            /// AstDataType*\n            public IntPtr @base;\n\n            /// int\n            public int rows;\n\n            /// int\n            public int columns;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstDataTypeBuffer\n        {\n\n            /// AstDataTypeType\n            public AstDataTypeType type;\n\n            /// AstDataType*\n            public IntPtr @base;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstDataTypeFunction\n        {\n\n            /// AstDataTypeType\n            public AstDataTypeType type;\n\n            /// AstDataType*\n            public IntPtr retval;\n\n            /// AstDataType**\n            public IntPtr @params;\n\n            /// int\n            public int num_params;\n\n            /// int\n            public int intrinsic;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstDataTypeUser\n        {\n\n            /// AstDataTypeType\n            public AstDataTypeType type;\n\n            /// AstDataType*\n            public IntPtr details;\n\n            /// char*\n            public IntPtr name;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct AstDataType\n        {\n\n            /// AstDataTypeType\n            [FieldOffset(0)]\n            public AstDataTypeType type;\n\n            /// AstDataTypeArray\n            [FieldOffset(0)]\n            public AstDataTypeArray array;\n\n            /// AstDataTypeStruct\n            [FieldOffset(0)]\n            public AstDataTypeStruct structure;\n\n            /// AstDataTypeVector->AstDataTypeArray\n            [FieldOffset(0)]\n            public AstDataTypeArray vector;\n\n            /// AstDataTypeMatrix\n            [FieldOffset(0)]\n            public AstDataTypeMatrix matrix;\n\n            /// AstDataTypeBuffer\n            [FieldOffset(0)]\n            public AstDataTypeBuffer buffer;\n\n            /// AstDataTypeUser\n            [FieldOffset(0)]\n            public AstDataTypeUser user;\n\n            /// AstDataTypeFunction\n            [FieldOffset(0)]\n            public AstDataTypeFunction function;\n        }\n\n        public enum AstNodeType\n        {\n            OP_START_RANGE,\n            OP_START_RANGE_UNARY,\n            OP_PREINCREMENT,\n            OP_PREDECREMENT,\n            OP_NEGATE,\n            OP_COMPLEMENT,\n            OP_NOT,\n            OP_POSTINCREMENT,\n            OP_POSTDECREMENT,\n            OP_CAST,\n            OP_END_RANGE_UNARY,\n            OP_START_RANGE_BINARY,\n            OP_COMMA,\n            OP_MULTIPLY,\n            OP_DIVIDE,\n            OP_MODULO,\n            OP_ADD,\n            OP_SUBTRACT,\n            OP_LSHIFT,\n            OP_RSHIFT,\n            OP_LESSTHAN,\n            OP_GREATERTHAN,\n            OP_LESSTHANOREQUAL,\n            OP_GREATERTHANOREQUAL,\n            OP_EQUAL,\n            OP_NOTEQUAL,\n            OP_BINARYAND,\n            OP_BINARYXOR,\n            OP_BINARYOR,\n            OP_LOGICALAND,\n            OP_LOGICALOR,\n            OP_ASSIGN,\n            OP_MULASSIGN,\n            OP_DIVASSIGN,\n            OP_MODASSIGN,\n            OP_ADDASSIGN,\n            OP_SUBASSIGN,\n            OP_LSHIFTASSIGN,\n            OP_RSHIFTASSIGN,\n            OP_ANDASSIGN,\n            OP_XORASSIGN,\n            OP_ORASSIGN,\n            OP_DEREF_ARRAY,\n            OP_END_RANGE_BINARY,\n            OP_START_RANGE_TERNARY,\n            OP_CONDITIONAL,\n            OP_END_RANGE_TERNARY,\n            OP_START_RANGE_DATA,\n            OP_IDENTIFIER,\n            OP_INT_LITERAL,\n            OP_FLOAT_LITERAL,\n            OP_STRING_LITERAL,\n            OP_BOOLEAN_LITERAL,\n            OP_END_RANGE_DATA,\n            OP_START_RANGE_MISC,\n            OP_DEREF_STRUCT,\n            OP_CALLFUNC,\n            OP_CONSTRUCTOR,\n            OP_END_RANGE_MISC,\n            OP_END_RANGE,\n\n            COMPUNIT_START_RANGE,\n            COMPUNIT_FUNCTION,\n            COMPUNIT_TYPEDEF,\n            COMPUNIT_STRUCT,\n            COMPUNIT_VARIABLE,\n            COMPUNIT_END_RANGE,\n\n            STATEMENT_START_RANGE,\n            STATEMENT_EMPTY,\n            STATEMENT_BREAK,\n            STATEMENT_CONTINUE,\n            STATEMENT_DISCARD,\n            STATEMENT_BLOCK,\n            STATEMENT_EXPRESSION,\n            STATEMENT_IF,\n            STATEMENT_SWITCH,\n            STATEMENT_FOR,\n            STATEMENT_DO,\n            STATEMENT_WHILE,\n            STATEMENT_RETURN,\n            STATEMENT_TYPEDEF,\n            STATEMENT_STRUCT,\n            STATEMENT_VARDECL,\n            STATEMENT_END_RANGE,\n\n            MISC_START_RANGE,\n            FUNCTION_PARAMS,\n            FUNCTION_SIGNATURE,\n            SCALAR_OR_ARRAY,\n            TYPEDEF,\n            PACK_OFFSET,\n            VARIABLE_LOWLEVEL,\n            ANNOTATION,\n            VARIABLE_DECLARATION,\n            STRUCT_DECLARATION,\n            STRUCT_MEMBER,\n            SWITCH_CASE,\n            ARGUMENTS,\n            MISC_END_RANGE,\n            END_RANGE,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstNodeInfo\n        {\n\n            /// AstNodeType\n            public AstNodeType type;\n\n            /// char*\n            public IntPtr filename;\n\n            /// unsigned int\n            public uint line;\n        }\n\n        public enum AstVariableAttributes\n        {\n            // EXTERN -> (1<<0)\n            EXTERN = (1) << (0),\n            // NOINTERPOLATION -> (1<<1)\n            NOINTERPOLATION = (1) << (1),\n            // SHARED -> (1<<2)\n            SHARED = (1) << (2),\n            // STATIC -> (1<<3)\n            STATIC = (1) << (3),\n            // UNIFORM -> (1<<4)\n            UNIFORM = (1) << (4),\n            // VOLATILE -> (1<<5)\n            VOLATILE = (1) << (5),\n            // CONST -> (1<<6)\n            CONST = (1) << (6),\n            // ROWMAJOR -> (1<<7)\n            ROWMAJOR = (1) << (7),\n            // COLUMNMAJOR -> (1<<8)\n            COLUMNMAJOR = (1) << (8),\n        }\n\n        public enum AstIfAttributes\n        {\n            NONE,\n            BRANCH,\n            FLATTEN,\n            IFALL,\n            IFANY,\n            PREDICATE,\n            PREDICATEBLOCK,\n        }\n\n        public enum AstSwitchAttributes\n        {\n            NONE,\n            FLATTEN,\n            BRANCH,\n            FORCECASE,\n            CALL,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstGeneric\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpression\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstArguments\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstExpression*\n            public IntPtr argument;\n\n            /// AstArguments*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionUnary\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstExpression*\n            public IntPtr operand;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionBinary\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstExpression*\n            public IntPtr left;\n\n            /// AstExpression*\n            public IntPtr right;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionTernary\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstExpression*\n            public IntPtr left;\n\n            /// AstExpression*\n            public IntPtr center;\n\n            /// AstExpression*\n            public IntPtr right;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionIdentifier\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// char*\n            public IntPtr identifier;\n\n            /// int\n            public int index;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionIntLiteral\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// int\n            public int value;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionFloatLiteral\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// double\n            public double value;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionStringLiteral\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// char*\n            public IntPtr @string;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionBooleanLiteral\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// int\n            public int value;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionConstructor\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstArguments*\n            public IntPtr args;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionDerefStruct\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstExpression*\n            public IntPtr identifier;\n\n            /// char*\n            public IntPtr member;\n\n            /// int\n            public int isswizzle;\n\n            /// int\n            public int member_index;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionCallFunction\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstExpressionIdentifier*\n            public IntPtr identifier;\n\n            /// AstArguments*\n            public IntPtr args;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionCast\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstExpression*\n            public IntPtr operand;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstCompilationUnit\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstCompilationUnit*\n            public IntPtr next;\n        }\n\n        public enum AstFunctionStorageClass\n        {\n            NONE,\n            INLINE,\n        }\n\n        public enum AstInputModifier\n        {\n            NONE,\n            IN,\n            OUT,\n            INOUT,\n            UNIFORM,\n        }\n\n        public enum AstInterpolationModifier\n        {\n            NONE,\n            LINEAR,\n            CENTROID,\n            NOINTERPOLATION,\n            NOPERSPECTIVE,\n            SAMPLE,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstFunctionParameters\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstInputModifier\n            public AstInputModifier input_modifier;\n\n            /// char*\n            public IntPtr identifier;\n\n            /// char*\n            public IntPtr semantic;\n\n            /// AstInterpolationModifier\n            public AstInterpolationModifier interpolation_modifier;\n\n            /// AstExpression*\n            public IntPtr initializer;\n\n            /// AstFunctionParameters*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstFunctionSignature\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// char*\n            public IntPtr identifier;\n\n            /// AstFunctionParameters*\n            public IntPtr @params;\n\n            /// AstFunctionStorageClass\n            public AstFunctionStorageClass storage_class;\n\n            /// char*\n            public IntPtr semantic;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstScalarOrArray\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// char*\n            public IntPtr identifier;\n\n            /// int\n            public int isarray;\n\n            /// AstExpression*\n            public IntPtr dimension;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstAnnotations\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstExpression*\n            public IntPtr initializer;\n\n            /// AstAnnotations*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstPackOffset\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// char*\n            public IntPtr ident1;\n\n            /// char*\n            public IntPtr ident2;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstVariableLowLevel\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstPackOffset*\n            public IntPtr packoffset;\n\n            /// char*\n            public IntPtr register_name;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstStructMembers\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// char*\n            public IntPtr semantic;\n\n            /// AstScalarOrArray*\n            public IntPtr details;\n\n            /// AstInterpolationModifier\n            public AstInterpolationModifier interpolation_mod;\n\n            /// AstStructMembers*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstStructDeclaration\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// char*\n            public IntPtr name;\n\n            /// AstStructMembers*\n            public IntPtr members;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstVariableDeclaration\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// int\n            public int attributes;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// AstStructDeclaration*\n            public IntPtr anonymous_datatype;\n\n            /// AstScalarOrArray*\n            public IntPtr details;\n\n            /// char*\n            public IntPtr semantic;\n\n            /// AstAnnotations*\n            public IntPtr annotations;\n\n            /// AstExpression*\n            public IntPtr initializer;\n\n            /// AstVariableLowLevel*\n            public IntPtr lowlevel;\n\n            /// AstVariableDeclaration*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstBlockStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// AstStatement*\n            public IntPtr statements;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstReturnStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// AstExpression*\n            public IntPtr expr;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstExpressionStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// AstExpression*\n            public IntPtr expr;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstIfStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// int\n            public int attributes;\n\n            /// AstExpression*\n            public IntPtr expr;\n\n            /// AstStatement*\n            public IntPtr statement;\n\n            /// AstStatement*\n            public IntPtr else_statement;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstSwitchCases\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstExpression*\n            public IntPtr expr;\n\n            /// AstStatement*\n            public IntPtr statement;\n\n            /// AstSwitchCases*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstSwitchStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// int\n            public int attributes;\n\n            /// AstExpression*\n            public IntPtr expr;\n\n            /// AstSwitchCases*\n            public IntPtr cases;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstWhileStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// int\n            public int unroll;\n\n            /// AstExpression*\n            public IntPtr expr;\n\n            /// AstStatement*\n            public IntPtr statement;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstForStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// int\n            public int unroll;\n\n            /// AstVariableDeclaration*\n            public IntPtr var_decl;\n\n            /// AstExpression*\n            public IntPtr initializer;\n\n            /// AstExpression*\n            public IntPtr looptest;\n\n            /// AstExpression*\n            public IntPtr counter;\n\n            /// AstStatement*\n            public IntPtr statement;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstTypedef\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstDataType*\n            public IntPtr datatype;\n\n            /// int\n            public int isconst;\n\n            /// AstScalarOrArray*\n            public IntPtr details;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstTypedefStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// AstTypedef*\n            public IntPtr type_info;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstVarDeclStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// AstVariableDeclaration*\n            public IntPtr declaration;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstStructStatement\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstStatement*\n            public IntPtr next;\n\n            /// AstStructDeclaration*\n            public IntPtr struct_info;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstCompilationUnitFunction\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstCompilationUnit*\n            public IntPtr next;\n\n            /// AstFunctionSignature*\n            public IntPtr declaration;\n\n            /// AstStatement*\n            public IntPtr definition;\n\n            /// int\n            public int index;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstCompilationUnitTypedef\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstCompilationUnit*\n            public IntPtr next;\n\n            /// AstTypedef*\n            public IntPtr type_info;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstCompilationUnitStruct\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstCompilationUnit*\n            public IntPtr next;\n\n            /// AstStructDeclaration*\n            public IntPtr struct_info;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstCompilationUnitVariable\n        {\n\n            /// AstNodeInfo\n            public AstNodeInfo ast;\n\n            /// AstCompilationUnit*\n            public IntPtr next;\n\n            /// AstVariableDeclaration*\n            public IntPtr declaration;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct AstNode\n        {\n\n            /// AstNodeInfo\n            [FieldOffset(0)]\n            public AstNodeInfo ast;\n\n            /// AstGeneric\n            [FieldOffset(0)]\n            public AstGeneric generic;\n\n            /// AstExpression\n            [FieldOffset(0)]\n            public AstExpression expression;\n\n            /// AstArguments\n            [FieldOffset(0)]\n            public AstArguments arguments;\n\n            /// AstExpressionUnary\n            [FieldOffset(0)]\n            public AstExpressionUnary unary;\n\n            /// AstExpressionBinary\n            [FieldOffset(0)]\n            public AstExpressionBinary binary;\n\n            /// AstExpressionTernary\n            [FieldOffset(0)]\n            public AstExpressionTernary ternary;\n\n            /// AstExpressionIdentifier\n            [FieldOffset(0)]\n            public AstExpressionIdentifier identifier;\n\n            /// AstExpressionIntLiteral\n            [FieldOffset(0)]\n            public AstExpressionIntLiteral intliteral;\n\n            /// AstExpressionFloatLiteral\n            [FieldOffset(0)]\n            public AstExpressionFloatLiteral floatliteral;\n\n            /// AstExpressionStringLiteral\n            [FieldOffset(0)]\n            public AstExpressionStringLiteral stringliteral;\n\n            /// AstExpressionBooleanLiteral\n            [FieldOffset(0)]\n            public AstExpressionBooleanLiteral boolliteral;\n\n            /// AstExpressionConstructor\n            [FieldOffset(0)]\n            public AstExpressionConstructor constructor;\n\n            /// AstExpressionDerefStruct\n            [FieldOffset(0)]\n            public AstExpressionDerefStruct derefstruct;\n\n            /// AstExpressionCallFunction\n            [FieldOffset(0)]\n            public AstExpressionCallFunction callfunc;\n\n            /// AstExpressionCast\n            [FieldOffset(0)]\n            public AstExpressionCast cast;\n\n            /// AstCompilationUnit\n            [FieldOffset(0)]\n            public AstCompilationUnit compunit;\n\n            /// AstFunctionParameters\n            [FieldOffset(0)]\n            public AstFunctionParameters @params;\n\n            /// AstFunctionSignature\n            [FieldOffset(0)]\n            public AstFunctionSignature funcsig;\n\n            /// AstScalarOrArray\n            [FieldOffset(0)]\n            public AstScalarOrArray soa;\n\n            /// AstAnnotations\n            [FieldOffset(0)]\n            public AstAnnotations annotations;\n\n            /// AstPackOffset\n            [FieldOffset(0)]\n            public AstPackOffset packoffset;\n\n            /// AstVariableLowLevel\n            [FieldOffset(0)]\n            public AstVariableLowLevel varlowlevel;\n\n            /// AstStructMembers\n            [FieldOffset(0)]\n            public AstStructMembers structmembers;\n\n            /// AstStructDeclaration\n            [FieldOffset(0)]\n            public AstStructDeclaration structdecl;\n\n            /// AstVariableDeclaration\n            [FieldOffset(0)]\n            public AstVariableDeclaration vardecl;\n\n            /// AstStatement\n            [FieldOffset(0)]\n            public AstStatement stmt;\n\n            /// AstEmptyStatement->AstStatement\n            [FieldOffset(0)]\n            public AstStatement emptystmt;\n\n            /// AstBreakStatement->AstStatement\n            [FieldOffset(0)]\n            public AstStatement breakstmt;\n\n            /// AstContinueStatement->AstStatement\n            [FieldOffset(0)]\n            public AstStatement contstmt;\n\n            /// AstDiscardStatement->AstStatement\n            [FieldOffset(0)]\n            public AstStatement discardstmt;\n\n            /// AstBlockStatement\n            [FieldOffset(0)]\n            public AstBlockStatement blockstmt;\n\n            /// AstReturnStatement\n            [FieldOffset(0)]\n            public AstReturnStatement returnstmt;\n\n            /// AstExpressionStatement\n            [FieldOffset(0)]\n            public AstExpressionStatement exprstmt;\n\n            /// AstIfStatement\n            [FieldOffset(0)]\n            public AstIfStatement ifstmt;\n\n            /// AstSwitchCases\n            [FieldOffset(0)]\n            public AstSwitchCases cases;\n\n            /// AstSwitchStatement\n            [FieldOffset(0)]\n            public AstSwitchStatement switchstmt;\n\n            /// AstWhileStatement\n            [FieldOffset(0)]\n            public AstWhileStatement whilestmt;\n\n            /// AstDoStatement->AstWhileStatement\n            [FieldOffset(0)]\n            public AstWhileStatement dostmt;\n\n            /// AstForStatement\n            [FieldOffset(0)]\n            public AstForStatement forstmt;\n\n            /// AstTypedef\n            [FieldOffset(0)]\n            public AstTypedef typdef;\n\n            /// AstTypedefStatement\n            [FieldOffset(0)]\n            public AstTypedefStatement typedefstmt;\n\n            /// AstVarDeclStatement\n            [FieldOffset(0)]\n            public AstVarDeclStatement vardeclstmt;\n\n            /// AstStructStatement\n            [FieldOffset(0)]\n            public AstStructStatement structstmt;\n\n            /// AstCompilationUnitFunction\n            [FieldOffset(0)]\n            public AstCompilationUnitFunction funcunit;\n\n            /// AstCompilationUnitTypedef\n            [FieldOffset(0)]\n            public AstCompilationUnitTypedef typedefunit;\n\n            /// AstCompilationUnitStruct\n            [FieldOffset(0)]\n            public AstCompilationUnitStruct structunit;\n\n            /// AstCompilationUnitVariable\n            [FieldOffset(0)]\n            public AstCompilationUnitVariable varunit;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct AstData\n        {\n            /// int\n            public int error_count;\n\n            /// Error*\n            public IntPtr errors;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string source_profile;\n\n            /// AstNode*\n            public IntPtr ast;\n\n            /// malloc\n            public IntPtr Malloc;\n\n            /// Free\n            public IntPtr free;\n\n            /// void*\n            public IntPtr malloc_data;\n\n            /// void*\n            public IntPtr opaque;\n        }\n\n        public enum irNodeType\n        {\n            START_RANGE_EXPR,\n            CONSTANT,\n            TEMP,\n            BINOP,\n            MEMORY,\n            CALL,\n            ESEQ,\n            ARRAY,\n            CONVERT,\n            SWIZZLE,\n            CONSTRUCT,\n            END_RANGE_EXPR,\n            START_RANGE_STMT,\n            MOVE,\n            EXPR_STMT,\n            JUMP,\n            CJUMP,\n            SEQ,\n            LABEL,\n            DISCARD,\n            END_RANGE_STMT,\n            START_RANGE_MISC,\n            EXPRLIST,\n            END_RANGE_MISC,\n            END_RANGE,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irNodeInfo\n        {\n            /// irNodeType\n            public irNodeType type;\n\n            /// char*\n            public IntPtr filename;\n\n            /// unsigned int\n            public uint line;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irGeneric\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n        }\n\n        public enum irBinOpType\n        {\n            ADD,\n            SUBTRACT,\n            MULTIPLY,\n            DIVIDE,\n            MODULO,\n            AND,\n            OR,\n            XOR,\n            LSHIFT,\n            RSHIFT,\n            UNKNOWN,\n        }\n\n        public enum irConditionType\n        {\n            EQL,\n            NEQ,\n            LT,\n            GT,\n            LEQ,\n            GEQ,\n            UNKNOWN,\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irExprInfo\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n\n            /// AstDataTypeType\n            public AstDataTypeType type;\n\n            /// int\n            public int elements;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irConstant\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// Anonymous_3a13e6d2_72d8_4c86_b5bf_9aff36c73111\n            public Anonymous_3a13e6d2_72d8_4c86_b5bf_9aff36c73111 value;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irTemp\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// int\n            public int index;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irBinOp\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// irBinOpType\n            public irBinOpType op;\n\n            /// irExpression*\n            public IntPtr left;\n\n            /// irExpression*\n            public IntPtr right;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irMemory\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// int\n            public int index;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irCall\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// int\n            public int index;\n\n            /// irExprList*\n            public IntPtr args;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irESeq\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// irStatement*\n            public IntPtr stmt;\n\n            /// irExpression*\n            public IntPtr expr;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irArray\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// irExpression*\n            public IntPtr array;\n\n            /// irExpression*\n            public IntPtr element;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irConvert\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// irExpression*\n            public IntPtr expr;\n        }\n\n        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]\n        public struct irSwizzle\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// irExpression*\n            public IntPtr expr;\n\n            /// char[4]\n            public IntPtr channels;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irConstruct\n        {\n            /// irExprInfo\n            public irExprInfo info;\n\n            /// irExprList*\n            public IntPtr args;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct irExpression\n        {\n            /// irNodeInfo\n            [FieldOffset(0)]\n            public irNodeInfo ir;\n\n            /// irExprInfo\n            [FieldOffset(0)]\n            public irExprInfo info;\n\n            /// irConstant\n            [FieldOffset(0)]\n            public irConstant constant;\n\n            /// irTemp\n            [FieldOffset(0)]\n            public irTemp temp;\n\n            /// irBinOp\n            [FieldOffset(0)]\n            public irBinOp binop;\n\n            /// irMemory\n            [FieldOffset(0)]\n            public irMemory memory;\n\n            /// irCall\n            [FieldOffset(0)]\n            public irCall call;\n\n            /// irESeq\n            [FieldOffset(0)]\n            public irESeq eseq;\n\n            /// irArray\n            [FieldOffset(0)]\n            public irArray array;\n\n            /// irConvert\n            [FieldOffset(0)]\n            public irConvert convert;\n\n            /// irSwizzle\n            [FieldOffset(0)]\n            public irSwizzle swizzle;\n\n            /// irConstruct\n            [FieldOffset(0)]\n            public irConstruct construct;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irMove\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n\n            /// irExpression*\n            public IntPtr dst;\n\n            /// irExpression*\n            public IntPtr src;\n\n            /// int\n            public int writemask;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irExprStmt\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n\n            /// irExpression*\n            public IntPtr expr;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irJump\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n\n            /// int\n            public int label;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irCJump\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n\n            /// irConditionType\n            public irConditionType cond;\n\n            /// irExpression*\n            public IntPtr left;\n\n            /// irExpression*\n            public IntPtr right;\n\n            /// int\n            public int iftrue;\n\n            /// int\n            public int iffalse;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irSeq\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n\n            /// irStatement*\n            public IntPtr first;\n\n            /// irStatement*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irLabel\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n\n            /// int\n            public int index;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct irStatement\n        {\n            /// irNodeInfo\n            [FieldOffset(0)]\n            public irNodeInfo ir;\n\n            /// irGeneric\n            [FieldOffset(0)]\n            public irGeneric generic;\n\n            /// irMove\n            [FieldOffset(0)]\n            public irMove move;\n\n            /// irExprStmt\n            [FieldOffset(0)]\n            public irExprStmt expr;\n\n            /// irJump\n            [FieldOffset(0)]\n            public irJump jump;\n\n            /// irCJump\n            [FieldOffset(0)]\n            public irCJump cjump;\n\n            /// irSeq\n            [FieldOffset(0)]\n            public irSeq seq;\n\n            /// irLabel\n            [FieldOffset(0)]\n            public irLabel label;\n\n            /// irDiscard->irGeneric\n            [FieldOffset(0)]\n            public irGeneric discard;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct irExprList\n        {\n            /// irNodeInfo\n            public irNodeInfo ir;\n\n            /// irExpression*\n            public IntPtr expr;\n\n            /// irExprList*\n            public IntPtr next;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct irMisc\n        {\n            /// irNodeInfo\n            [FieldOffset(0)]\n            public irNodeInfo ir;\n\n            /// irGeneric\n            [FieldOffset(0)]\n            public irGeneric generic;\n\n            /// irExprList\n            [FieldOffset(0)]\n            public irExprList exprlist;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct irNode\n        {\n            /// irNodeInfo\n            [FieldOffset(0)]\n            public irNodeInfo ir;\n\n            /// irGeneric\n            [FieldOffset(0)]\n            public irGeneric generic;\n\n            /// irExpression\n            [FieldOffset(0)]\n            public irExpression expr;\n\n            /// irStatement\n            [FieldOffset(0)]\n            public irStatement stmt;\n\n            /// irMisc\n            [FieldOffset(0)]\n            public irMisc misc;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        public struct CompileData\n        {\n            /// int\n            public int error_count;\n\n            /// Error*\n            public IntPtr errors;\n\n            /// int\n            public int warning_count;\n\n            /// Error*\n            public IntPtr warnings;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string source_profile;\n\n            /// char*\n            [MarshalAs(UnmanagedType.LPStr)]\n            public string output;\n\n            /// int\n            public int output_len;\n\n            /// int\n            public int symbol_count;\n\n            /// Symbol*\n            public IntPtr symbols;\n\n            /// Malloc\n            public IntPtr malloc;\n\n            /// Free\n            public IntPtr free;\n\n            /// void*\n            public IntPtr malloc_data;\n        }\n\n        /// Return Type: void*\n        ///fnname: char*\n        ///data: void*\n        public delegate IntPtr glGetProcAddress([In()] [MarshalAs(UnmanagedType.LPStr)] string fnname, IntPtr data);\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct Anonymous_5371dd6a_e42a_47c1_91d1_a2af9a8283be\n        {\n            /// float[4]\n            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.R4)]\n            [FieldOffset(0)]\n            public IntPtr f;\n\n            /// int[4]\n            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.I4)]\n            [FieldOffset(0)]\n            public IntPtr i;\n\n            /// int\n            [FieldOffset(0)]\n            public int b;\n        }\n\n        [StructLayout(LayoutKind.Explicit)]\n        public struct Anonymous_3a13e6d2_72d8_4c86_b5bf_9aff36c73111\n        {\n            /// int[16]\n            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16, ArraySubType = UnmanagedType.I4)]\n            [FieldOffset(0)]\n            public IntPtr ival;\n\n            /// float[16]\n            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16, ArraySubType = UnmanagedType.R4)]\n            [FieldOffset(0)]\n            public IntPtr fval;\n        }\n\n        public enum UniformType\n        {\n            /// UNKNOWN -> -1\n            UNKNOWN = -1,\n            FLOAT,\n            INT,\n            BOOL,\n        }\n\n        public enum SamplerType\n        {\n            /// UNKNOWN -> -1\n            SAMPLER_UNKNOWN = -1,\n            SAMPLER_2D = 0,\n            SAMPLER_CUBE = 1,\n            SAMPLER_VOLUME = 2,\n            SAMPLER_1D = 3,\n        }\n\n        public enum Usage\n        {\n            /// UNKNOWN -> -1\n            UNKNOWN = -1,\n            POSITION,\n            BLENDWEIGHT,\n            BLENDINDICES,\n            NORMAL,\n            POINTSIZE,\n            TEXCOORD,\n            TANGENT,\n            BINORMAL,\n            TESSFACTOR,\n            POSITIONT,\n            COLOR,\n            FOG,\n            DEPTH,\n            SAMPLE,\n            TOTAL,\n        }\n\n        public enum SymbolClass\n        {\n            SCALAR,\n            VECTOR,\n            MATRIX_ROWS,\n            MATRIX_COLUMNS,\n            OBJECT,\n            STRUCT,\n        }\n\n        public enum SymbolType\n        {\n            VOID,\n            BOOL,\n            INT,\n            FLOAT,\n            STRING,\n            TEXTURE,\n            TEXTURE1D,\n            TEXTURE2D,\n            TEXTURE3D,\n            TEXTURECUBE,\n            SAMPLER,\n            SAMPLER1D,\n            SAMPLER2D,\n            SAMPLER3D,\n            SAMPLERCUBE,\n            PIXELSHADER,\n            VERTEXSHADER,\n            PIXELFRAGMENT,\n            VERTEXFRAGMENT,\n            UNSUPPORTED,\n        }\n\n        public enum SymbolRegisterSet\n        {\n            BOOL,\n            INT4,\n            FLOAT4,\n            SAMPLER,\n        }\n\n        public enum ShaderType\n        {\n\n            // UNKNOWN -> 0\n            UNKNOWN = 0,\n            // PIXEL -> (1<<0)\n            PIXEL = (1) << (0),\n            // VERTEX -> (1<<1)\n            VERTEX = (1) << (1),\n            // GEOMETRY -> (1<<2)\n            GEOMETRY = (1) << (2),\n            // ANY -> 0xFFFFFFFF\n            ANY = -1,\n        }\n\n        public enum IncludeType\n        {\n            LOCAL,\n            SYSTEM,\n        }\n\n        public enum AttributeType\n        {\n            // UNKNOWN -> -1\n            UNKNOWN = -1,\n            BYTE,\n            UBYTE,\n            SHORT,\n            USHORT,\n            INT,\n            UINT,\n            FLOAT,\n            DOUBLE,\n            HALF_FLOAT,\n        }\n\n        public partial class NativeMethods\n        {\n\n            /// Return Type: int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_version\")]\n            public static extern int Version();\n\n\n            /// Return Type: char*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_changeset\")]\n            public static extern IntPtr Changeset();\n\n\n            /// Return Type: int\n            ///profile: char*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_maxShaderModel\")]\n            public static extern int MaxShaderModel([In()] [MarshalAs(UnmanagedType.LPStr)] string profile);\n\n\n            /// Return Type: ParseData*\n            ///tokenbuf: char*\n            ///bufsize: int\n            ///m: Malloc\n            ///f: Free\n            ///d: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_parseExpression\")]\n            public static extern IntPtr ParseExpression([In()] byte[] tokenbuf, int bufsize, IntPtr m, IntPtr f, IntPtr d);\n\n\n            /// Return Type: void\n            ///param0: Preshader*\n            ///param1: float*\n            ///param2: float*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_runPreshader\")]\n            public static extern void RunPreshader(ref Preshader param0, ref float param1, ref float param2);\n\n\n            /// Return Type: ParseData*\n            ///profile: char*\n            ///tokenbuf: char*\n            ///bufsize: int\n            ///swiz: Swizzle*\n            ///swizcount: int\n            ///smap: SamplerMap*\n            ///smapcount: int\n            ///m: Malloc\n            ///f: Free\n            ///d: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_parse\")]\n            public static extern IntPtr Parse([In()] [MarshalAs(UnmanagedType.LPStr)] string profile, [In()] byte[] tokenbuf, int bufsize, IntPtr swiz, int swizcount, IntPtr smap, int smapcount, IntPtr m, IntPtr f, IntPtr d);\n\n\n            /// Return Type: void\n            ///data: ParseData*\n            [DllImport(mojoshader_dll, EntryPoint = \"FreeParseData\")]\n            public static extern void FreeParseData(ref ParseData data);\n\n\n            /// Return Type: Effect*\n            ///profile: char*\n            ///buf: char*\n            ///_len: int\n            ///swiz: Swizzle*\n            ///swizcount: int\n            ///smap: SamplerMap*\n            ///smapcount: int\n            ///m: Malloc\n            ///f: Free\n            ///d: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_parseEffect\")]\n            public static extern IntPtr ParseEffect([In()] [MarshalAs(UnmanagedType.LPStr)] string profile, [In()] [MarshalAs(UnmanagedType.LPStr)] string buf, int _len, ref Swizzle swiz, int swizcount, ref SamplerMap smap, int smapcount, IntPtr m, IntPtr f, IntPtr d);\n\n\n            /// Return Type: void\n            ///effect: Effect*\n            [DllImport(mojoshader_dll, EntryPoint = \"FreeEffect\")]\n            public static extern void FreeEffect(ref Effect effect);\n\n\n            /// Return Type: PreprocessData*\n            ///filename: char*\n            ///source: char*\n            ///sourcelen: unsigned int\n            ///defines: PreprocessorDefine*\n            ///define_count: unsigned int\n            ///include_open: IncludeOpen\n            ///include_close: IncludeClose\n            ///m: Malloc\n            ///f: Free\n            ///d: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_preprocess\")]\n            public static extern IntPtr Preprocess([In()] [MarshalAs(UnmanagedType.LPStr)] string filename, [In()] [MarshalAs(UnmanagedType.LPStr)] string source, uint sourcelen, ref PreprocessorDefine defines, uint define_count, IncludeOpen include_open, IncludeClose include_close, IntPtr m, IntPtr f, IntPtr d);\n\n\n            /// Return Type: void\n            ///data: PreprocessData*\n            [DllImport(mojoshader_dll, EntryPoint = \"FreePreprocessData\")]\n            public static extern void FreePreprocessData(ref PreprocessData data);\n\n\n            /// Return Type: ParseData*\n            ///filename: char*\n            ///source: char*\n            ///sourcelen: unsigned int\n            ///comments: char**\n            ///comment_count: unsigned int\n            ///symbols: Symbol*\n            ///symbol_count: unsigned int\n            ///defines: PreprocessorDefine*\n            ///define_count: unsigned int\n            ///include_open: IncludeOpen\n            ///include_close: IncludeClose\n            ///m: Malloc\n            ///f: Free\n            ///d: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_assemble\")]\n            public static extern IntPtr Assemble([In()] [MarshalAs(UnmanagedType.LPStr)] string filename, [In()] [MarshalAs(UnmanagedType.LPStr)] string source, uint sourcelen, ref IntPtr comments, uint comment_count, ref Symbol symbols, uint symbol_count, ref PreprocessorDefine defines, uint define_count, IncludeOpen include_open, IncludeClose include_close, IntPtr m, IntPtr f, IntPtr d);\n\n\n            /// Return Type: AstData*\n            ///srcprofile: char*\n            ///filename: char*\n            ///source: char*\n            ///sourcelen: unsigned int\n            ///defs: PreprocessorDefine*\n            ///define_count: unsigned int\n            ///include_open: IncludeOpen\n            ///include_close: IncludeClose\n            ///m: Malloc\n            ///f: Free\n            ///d: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_parseAst\")]\n            public static extern IntPtr ParseAst([In()] [MarshalAs(UnmanagedType.LPStr)] string srcprofile, [In()] [MarshalAs(UnmanagedType.LPStr)] string filename, [In()] [MarshalAs(UnmanagedType.LPStr)] string source, uint sourcelen, ref PreprocessorDefine defs, uint define_count, IncludeOpen include_open, IncludeClose include_close, IntPtr m, IntPtr f, IntPtr d);\n\n\n            /// Return Type: void\n            ///data: AstData*\n            [DllImport(mojoshader_dll, EntryPoint = \"FreeAstData\")]\n            public static extern void FreeAstData(ref AstData data);\n\n\n            /// Return Type: CompileData*\n            ///srcprofile: char*\n            ///filename: char*\n            ///source: char*\n            ///sourcelen: unsigned int\n            ///defs: PreprocessorDefine*\n            ///define_count: unsigned int\n            ///include_open: IncludeOpen\n            ///include_close: IncludeClose\n            ///m: Malloc\n            ///f: Free\n            ///d: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_compile\")]\n            public static extern IntPtr Compile([In()] [MarshalAs(UnmanagedType.LPStr)] string srcprofile, [In()] [MarshalAs(UnmanagedType.LPStr)] string filename, [In()] [MarshalAs(UnmanagedType.LPStr)] string source, uint sourcelen, ref PreprocessorDefine defs, uint define_count, IncludeOpen include_open, IncludeClose include_close, IntPtr m, IntPtr f, IntPtr d);\n\n\n            /// Return Type: void\n            ///data: CompileData*\n            [DllImport(mojoshader_dll, EntryPoint = \"FreeCompileData\")]\n            public static extern void FreeCompileData(ref CompileData data);\n\n\n            /// Return Type: int\n            ///lookup: glGetProcAddress\n            ///d: void*\n            ///profs: char**\n            ///size: int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glAvailableProfiles\")]\n            public static extern int glAvailableProfiles(glGetProcAddress lookup, IntPtr d, ref IntPtr profs, int size);\n\n\n            /// Return Type: char*\n            ///lookup: glGetProcAddress\n            ///d: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glBestProfile\")]\n            public static extern IntPtr glBestProfile(glGetProcAddress lookup, IntPtr d);\n\n\n            /// Return Type: char*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetError\")]\n            public static extern IntPtr glGetError();\n\n\n            /// Return Type: int\n            ///shader_type: ShaderType->Anonymous_96517ad6_cc69_4542_8537_054e63919d54\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glMaxUniforms\")]\n            public static extern int glMaxUniforms(ShaderType shader_type);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: float*\n            ///vec4count: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetVertexShaderUniformF\")]\n            public static extern void glSetVertexShaderUniformF(uint idx, ref float data, uint vec4count);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: float*\n            ///vec4count: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetVertexShaderUniformF\")]\n            public static extern void glGetVertexShaderUniformF(uint idx, ref float data, uint vec4count);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: int*\n            ///ivec4count: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetVertexShaderUniformI\")]\n            public static extern void glSetVertexShaderUniformI(uint idx, ref int data, uint ivec4count);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: int*\n            ///ivec4count: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetVertexShaderUniformI\")]\n            public static extern void glGetVertexShaderUniformI(uint idx, ref int data, uint ivec4count);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: int*\n            ///bcount: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetVertexShaderUniformB\")]\n            public static extern void glSetVertexShaderUniformB(uint idx, ref int data, uint bcount);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: int*\n            ///bcount: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetVertexShaderUniformB\")]\n            public static extern void glGetVertexShaderUniformB(uint idx, ref int data, uint bcount);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: float*\n            ///vec4count: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetPixelShaderUniformF\")]\n            public static extern void glSetPixelShaderUniformF(uint idx, ref float data, uint vec4count);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: float*\n            ///vec4count: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetPixelShaderUniformF\")]\n            public static extern void glGetPixelShaderUniformF(uint idx, ref float data, uint vec4count);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: int*\n            ///ivec4count: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetPixelShaderUniformI\")]\n            public static extern void glSetPixelShaderUniformI(uint idx, ref int data, uint ivec4count);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: int*\n            ///ivec4count: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetPixelShaderUniformI\")]\n            public static extern void glGetPixelShaderUniformI(uint idx, ref int data, uint ivec4count);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: int*\n            ///bcount: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetPixelShaderUniformB\")]\n            public static extern void glSetPixelShaderUniformB(uint idx, ref int data, uint bcount);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: int*\n            ///bcount: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetPixelShaderUniformB\")]\n            public static extern void glGetPixelShaderUniformB(uint idx, ref int data, uint bcount);\n\n\n            /// Return Type: void\n            ///sampler: unsigned int\n            ///mat00: float\n            ///mat01: float\n            ///mat10: float\n            ///mat11: float\n            ///lscale: float\n            ///loffset: float\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetLegacyBumpMapEnv\")]\n            public static extern void glSetLegacyBumpMapEnv(uint sampler, float mat00, float mat01, float mat10, float mat11, float lscale, float loffset);\n\n\n            /// Return Type: void\n            ///usage: Usage->Anonymous_9c01433d_7bb5_4c50_bf77_e65cef0661b5\n            ///index: int\n            ///size: unsigned int\n            ///type: AttributeType->Anonymous_2f2591e6_1657_418c_9f54_80f3acd43cbe\n            ///normalized: int\n            ///stride: unsigned int\n            ///ptr: void*\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetVertexAttribute\")]\n            public static extern void glSetVertexAttribute(Usage usage, int index, uint size, AttributeType type, int normalized, uint stride, IntPtr ptr);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: float*\n            ///vec4n: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetVertexPreshaderUniformF\")]\n            public static extern void glSetVertexPreshaderUniformF(uint idx, ref float data, uint vec4n);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: float*\n            ///vec4n: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetVertexPreshaderUniformF\")]\n            public static extern void glGetVertexPreshaderUniformF(uint idx, ref float data, uint vec4n);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: float*\n            ///vec4n: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glSetPixelPreshaderUniformF\")]\n            public static extern void glSetPixelPreshaderUniformF(uint idx, ref float data, uint vec4n);\n\n\n            /// Return Type: void\n            ///idx: unsigned int\n            ///data: float*\n            ///vec4n: unsigned int\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glGetPixelPreshaderUniformF\")]\n            public static extern void glGetPixelPreshaderUniformF(uint idx, ref float data, uint vec4n);\n\n\n            /// Return Type: void\n            [DllImport(mojoshader_dll, EntryPoint = \"MOJOSHADER_glProgramReady\")]\n            public static extern void glProgramReady();\n\n        }\n\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/Preprocessor.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing CppNet;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    public class Preprocessor : PreprocessorListener, VirtualFileSystem\n    {\n        private EffectContent _input;\n        private ContentProcessorContext _context;\n        private string _fullFilePath;\n        private CppNet.Preprocessor _pp;\n\n        public Preprocessor(EffectContent input, ContentProcessorContext context, string fullFilePath)\n        {\n            this._input = input;\n            this._context = context;\n            this._fullFilePath = fullFilePath;\n\n            _pp = new CppNet.Preprocessor();\n            _pp.EmitExtraLineInfo = false;\n            _pp.addFeature(Feature.LINEMARKERS);\n            _pp.setListener(this);\n            _pp.setFileSystem(this);\n        }\n\n        internal void AddMacro(string name, string value)\n        {\n            _pp.addMacro(name, value);\n        }\n\n        public string Preprocess()\n        {\n            _pp.setQuoteIncludePath(new List<string> { Path.GetDirectoryName(_fullFilePath) });\n\n            string effectCode = _input.EffectCode;\n            effectCode = effectCode.Replace(\"#line\", \"//--WORKAROUND#line\");\n\n            StringLexerSource inputSource = new PPStringLexerSource(effectCode, true, _fullFilePath);\n            _pp.addInput(inputSource);\n\n            StringBuilder result = new StringBuilder();\n\n            while (true)\n            {\n                Token token = _pp.token();\n                int tokenType = token.getType();\n\n                switch (tokenType)\n                {\n                    case CppNet.Token.EOF:\n                        return result.ToString();\n\n                    case CppNet.Token.CPPCOMMENT:\n                        {\n                            string tokenText = token.getText();\n                            if (tokenText.StartsWith(\"//--WORKAROUND#line\"))\n                            {\n                                result.Append(tokenText.Replace(\"//--WORKAROUND#line\", \"#line\"));\n                            }\n                        }\n                        break;\n\n                    case CppNet.Token.CCOMMENT:\n                        {\n                            string tokenText = token.getText();\n                            if (tokenText != null)\n                            {\n                                // Need to preserve line breaks so that line numbers are correct.\n                                foreach (char c in tokenText)\n                                    if (c == '\\n')\n                                        result.Append(c);\n                            }\n                        }\n                        break;\n\n                    default:\n                        {\n                            string tokenText = token.getText();\n                            if (tokenText != null)\n                                result.Append(tokenText);\n                        }\n                        break;\n                }\n            }\n\n        }\n\n\n        #region PreprocessorListener\n    \n        void PreprocessorListener.handleWarning(Source source, int line, int column, string msg)\n        {\n            string file = ((PPStringLexerSource)source).Path;\n            ContentIdentity contentIdentity = new ContentIdentity(file, null, line + \",\" + column);\n            _context.Logger.LogWarning(null, contentIdentity, msg);\n        }\n\n        void PreprocessorListener.handleError(Source source, int line, int column, string msg)\n        {\n            string file = ((PPStringLexerSource)source).Path;\n            ContentIdentity contentIdentity = new ContentIdentity(file, null, line + \",\" + column);\n            throw new InvalidContentException(msg, contentIdentity);\n        }\n\n        void PreprocessorListener.handleSourceChange(Source source, string ev)\n        {\n\n        }\n\n        #endregion PreprocessorListener\n\n\n        #region VirtualFileSystem\n\n        VirtualFile VirtualFileSystem.getFile(string path)\n        {\n            return new PPVirtualFile((VirtualFileSystem)this, path);\n        }\n\n        VirtualFile VirtualFileSystem.getFile(string dir, string name)\n        {\n            return new PPVirtualFile((VirtualFileSystem)this, Path.Combine(dir, name));\n        }\n\n        #endregion VirtualFileSystem\n\n\n        private class PPVirtualFile : VirtualFile\n        {\n            VirtualFileSystem _virtualFileSystem;\n            private readonly string _path;\n\n            public PPVirtualFile(VirtualFileSystem virtualFileSystem, string path)\n            {\n                this._virtualFileSystem = virtualFileSystem;\n                this._path = Path.GetFullPath(path);\n            }\n\n            bool VirtualFile.isFile()\n            {\n                return File.Exists(_path) && !File.GetAttributes(_path).HasFlag(FileAttributes.Directory);\n            }\n\n            string VirtualFile.getPath()\n            {\n                return _path;\n            }\n\n            string VirtualFile.getName()\n            {\n                return Path.GetFileName(_path);\n            }\n\n            VirtualFile VirtualFile.getParentFile()\n            {\n                return new PPVirtualFile(_virtualFileSystem, Path.GetDirectoryName(_path));\n            }\n\n            VirtualFile VirtualFile.getChildFile(string name)\n            {\n                return new PPVirtualFile(_virtualFileSystem, Path.Combine(_path, name));\n            }\n\n            Source VirtualFile.getSource()\n            {\n                // Add the include dependencies so that if they change\n                // it will trigger a rebuild of this effect.\n                ((Preprocessor)_virtualFileSystem)._context.AddDependency(_path);\n\n                string effectCode = File.ReadAllText(_path);\n                // Append new line if none present.\n                if (!effectCode.EndsWith(\"\\n\"))\n                    effectCode += \"\\n\";\n\n                StringLexerSource source = new PPStringLexerSource(effectCode, true, _path);\n                return source;\n            }\n\n        }\n\n        private class PPStringLexerSource : StringLexerSource\n        {\n            public string Path { get; private set; }\n\n            public PPStringLexerSource(string str, bool ppvalid, string fileName)\n                : base(str.Replace(\"\\r\\n\", \"\\n\"), ppvalid, fileName)\n            {\n                Path = fileName;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/SamplerInfo.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    internal struct SamplerInfo\n    {\n        public MojoShader.SamplerType type;\n        public int textureSlot;\n        public int samplerSlot;\n        public string GLsamplerName; // e.g. \"ps_s0\", \"ps_s1\", etc\n        public string textureName;\n        public int textureParameter;\n        public SamplerState state;\n\n        public override string ToString()\n        {\n            return String.Format(\"type: {0}, textureParameter:{1}, GLsamplerName: {2}, t#: {3}, s#: {4}, textureName: {5}\",\n                                 type, textureParameter, GLsamplerName, textureSlot, samplerSlot, textureName);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderCompilerException.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    public class ShaderCompilerException : Exception\n    {\n        public ShaderCompilerException()\n            : base(\"A shader failed to compile!\")\n        {\t        \n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderData.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    internal class ShaderData\n    {\n        private readonly ShaderStage _shaderStage;\n\n        public ShaderStage Stage { get { return _shaderStage; } }\n\n\n        public ShaderData(ShaderStage shaderStage)\n        {\n            _shaderStage = shaderStage;\n        }\n\n        public struct Attribute\n        {\n            public string name;\n            public VertexElementUsage usage;\n            public int index;\n#pragma warning disable 649\n            public int location;\n#pragma warning restore 649\n        }\n\n        /// <summary>\n        /// The index to the constant buffers which are \n        /// required by this shader at runtime.\n        /// </summary>\n        public int[] _cbuffers;\n\n        public SamplerInfo[] _samplers;\n\n        public ShaderData.Attribute[] _attributes;\n\n        public byte[] ShaderCode { get; set; }\n\n\n#region Non-Serialized Stuff\n\n        public string ShaderFunctionName { get; set; }\n\n        public string ShaderProfile { get; set; }\n        public ShaderVersion ShaderVersion { get; internal set; }\n\n#endregion // Non-Serialized Stuff\n\n    }\n\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderProfile.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Runtime.InteropServices;\nusing System.Linq;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing Microsoft.Xna.Framework.Content.Pipeline;\nusing Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\nusing Microsoft.Xna.Framework.Graphics;\nusing D3DC = SharpDX.D3DCompiler;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    [TypeConverter(typeof(StringConverter))]\n    public abstract class ShaderProfile\n    {\n        protected ShaderProfile()\n        {\n        }\n\n        public static readonly ShaderProfile DirectX_11 = new ShaderProfileDX11();\n\n        public static readonly ShaderProfile OpenGL_Mojo = new ShaderProfileGL();\n\n\n        /// <summary>\n        /// Returns the name of the shader profile.\n        /// </summary>\n        public abstract string Name { get; }\n\n        /// <summary>\n        /// Returns the format identifier used in the FX file format.\n        /// </summary>\n        public abstract ShaderProfileType ProfileType { get; }\n\n        internal abstract IEnumerable<KeyValuePair<string,string>> GetMacros(GraphicsBackend backend);\n\n        internal abstract void ValidateShaderModels(PassInfo pass, string shaderFunction, string shaderModel, ShaderStage shaderStage, ShaderVersion shaderVersion);\n\n        internal abstract ShaderData CreateShader(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, EffectObject effect, ShaderInfo shaderInfo, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, ShaderVersion shaderVersion, ShaderStage shaderStage, ref string errorsAndWarnings);\n\n        internal static D3DC.ShaderBytecode CompileHLSL(EffectContent input, ContentProcessorContext context, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, bool backwardsCompatibility, ref string errorsAndWarnings)\n        {\n            try\n            {\n                D3DC.ShaderFlags shaderFlags = 0;\n\n                // While we never allow preshaders, this flag is invalid for\n                // the DX11 shader compiler which doesn't allow preshaders\n                // in the first place.\n                //shaderFlags |= D3DC.ShaderFlags.NoPreshader;\n\n                if (backwardsCompatibility)\n                    shaderFlags |= D3DC.ShaderFlags.EnableBackwardsCompatibility;\n\n                if (debugMode == Processors.EffectProcessorDebugMode.Debug)\n                {\n                    shaderFlags |= D3DC.ShaderFlags.SkipOptimization;\n                    shaderFlags |= D3DC.ShaderFlags.Debug;\n                }\n                else\n                {\n                    shaderFlags |= D3DC.ShaderFlags.OptimizationLevel3;\n                }\n\n                // Compile the shader into bytecode.                \n                D3DC.CompilationResult result = D3DC.ShaderBytecode.Compile(\n                    fileContent,\n                    shaderFunction,\n                    shaderProfileName,\n                    shaderFlags,\n                    0,\n                    null,\n                    null,\n                    fullFilePath);\n\n                // Store all the errors and warnings to log out later.\n                errorsAndWarnings += result.Message;\n\n                if (result.Bytecode == null)\n                    throw new ShaderCompilerException();\n\n                D3DC.ShaderBytecode shaderBytecode = result.Bytecode;\n                //string source = shaderByteCode.Disassemble();\n\n                return shaderBytecode;\n            }\n            catch (SharpDX.CompilationException ex)\n            {\n                errorsAndWarnings += ex.Message;\n                throw new ShaderCompilerException();\n            }\n        }\n        \n        [Conditional(\"DEBUG\")]\n        internal static void LogDX11ShaderReflection(D3DC.ShaderReflection d3dcShaderReflection)\n        {\n            StringBuilder sb = new StringBuilder();\n            sb.AppendLine(\"LogShaderReflection \");\n\n            for (int r = 0; r < d3dcShaderReflection.Description.BoundResources; r++)\n            {\n                D3DC.InputBindingDescription ibDesc = d3dcShaderReflection.GetResourceBindingDescription(r);\n\n                sb.AppendLine(\"\");\n                sb.AppendLine(\"ResourceBindingDescription: #\" + r);\n                sb.AppendLine(\"Name: '\" + ibDesc.Name + \"'\");\n                sb.AppendLine(\"Type: \" + ibDesc.Type);\n                sb.AppendLine(\"BindPoint: \" + ibDesc.BindPoint);\n                sb.AppendLine(\"BindCount: \" + ibDesc.BindCount);\n                sb.AppendLine(\"Flags: \" + ibDesc.Flags);\n                sb.AppendLine(\"ReturnType: \" + ibDesc.ReturnType);\n                sb.AppendLine(\"Dimension: \" + ibDesc.Dimension);\n            }\n\n            for (int i = 0; i < d3dcShaderReflection.Description.InputParameters; i++)\n            {\n                D3DC.ShaderParameterDescription paramDesc = d3dcShaderReflection.GetInputParameterDescription(i);\n\n                sb.AppendLine(\"\");\n                sb.AppendLine(\"InputParameterDescription: #\" + i);\n                sb.AppendLine(\"SemanticName: '\" + paramDesc.SemanticName + \"'\");\n                sb.AppendLine(\"SemanticIndex: \" + paramDesc.SemanticIndex);\n                sb.AppendLine(\"Register: \" + paramDesc.Register);\n                sb.AppendLine(\"SystemValueType: \" + paramDesc.SystemValueType);\n                sb.AppendLine(\"UsageMask: \" + paramDesc.UsageMask);\n            }\n\n            for (int o = 0; o < d3dcShaderReflection.Description.OutputParameters; o++)\n            {\n                D3DC.ShaderParameterDescription paramDesc = d3dcShaderReflection.GetOutputParameterDescription(o);\n\n                sb.AppendLine(\"\");\n                sb.AppendLine(\"OutputParameterDescription: #\" + o);\n                sb.AppendLine(\"SemanticName: '\" + paramDesc.SemanticName + \"'\");\n                sb.AppendLine(\"SemanticIndex: \" + paramDesc.SemanticIndex);\n                sb.AppendLine(\"Register: \" + paramDesc.Register);\n                sb.AppendLine(\"SystemValueType: \" + paramDesc.SystemValueType);\n                sb.AppendLine(\"UsageMask: \" + paramDesc.UsageMask);\n            }\n\n            for (int c = 0; c < d3dcShaderReflection.Description.ConstantBuffers; c++)\n            {\n                D3DC.ConstantBuffer cbuffer = d3dcShaderReflection.GetConstantBuffer(c);\n\n                sb.AppendLine(\"\");\n                sb.AppendLine(\"ConstantBuffer: #\" + c);\n                sb.AppendLine(\"Tag: \" + cbuffer.Tag);\n                sb.AppendLine(\"Name: '\" + cbuffer.Description.Name + \"'\");\n                sb.AppendLine(\"Size: \" + cbuffer.Description.Size);\n                sb.AppendLine(\"Flags: \" + cbuffer.Description.Flags);\n                for (int v = 0; v < cbuffer.Description.VariableCount; v++)\n                {\n                    D3DC.ShaderReflectionVariable variable = cbuffer.GetVariable(v);\n                    D3DC.ShaderReflectionType type = variable.GetVariableType();\n\n                    sb.AppendLine(\"\");\n                    sb.AppendLine(\"  Variable: #\" + v);\n                    sb.AppendLine(\"  Name: '\" + variable.Description.Name + \"'\");\n                    sb.AppendLine(\"  Flags: \" + variable.Description.Flags);\n                    sb.AppendLine(\"  TypeClass: \" + type.Description.Class);\n                    sb.AppendLine(\"  StartOffset: \" + variable.Description.StartOffset);\n                    sb.AppendLine(\"  Size: \" + variable.Description.Size);\n                    sb.AppendLine(\"  StartSampler: \" + variable.Description.StartSampler);\n                    sb.AppendLine(\"  SamplerSize: \" + variable.Description.SamplerSize);\n                    sb.AppendLine(\"  StartTexture: \" + variable.Description.StartTexture);\n                    sb.AppendLine(\"  TextureSize: \" + variable.Description.TextureSize);\n                    sb.Append(\"  DefaultValue: \");\n                    if (variable.Description.DefaultValue == IntPtr.Zero)\n                    {\n                        sb.Append(\"(null)\");\n                    }\n                    else\n                    {\n                        int size = type.Description.ColumnCount * type.Description.RowCount;\n                        switch (type.Description.Type)\n                        {\n                            case D3DC.ShaderVariableType.Float:\n                                float[] fdata = new float[size];\n                                Marshal.Copy(variable.Description.DefaultValue, fdata, 0, (int)size);\n                                for (int d = 0; d < fdata.Length; d++)\n                                    sb.Append(fdata[d].ToString(CultureInfo.InvariantCulture) + \" \");\n                                break;\n                            case D3DC.ShaderVariableType.Int:\n                            case D3DC.ShaderVariableType.Bool:\n                                int[] idata = new int[size];\n                                Marshal.Copy(variable.Description.DefaultValue, idata, 0, (int)size);\n                                for(int d = 0; d<idata.Length; d++)\n                                    sb.Append(idata[d].ToString(CultureInfo.InvariantCulture) + \" \");\n                                break;\n                        }\n                    }\n                    sb.AppendLine(\"\");\n                }\n            }\n\n            for (int p = 0; p < d3dcShaderReflection.Description.PatchConstantParameters; p++)\n            {\n                D3DC.ShaderParameterDescription paramDesc = d3dcShaderReflection.GetPatchConstantParameterDescription(p);\n\n                sb.AppendLine(\"\");\n                sb.AppendLine(\"PatchConstantParameterDescription: #\" + p);\n                sb.AppendLine(\"SemanticName: '\" + paramDesc.SemanticName + \"'\");\n                sb.AppendLine(\"SemanticIndex: \" + paramDesc.SemanticIndex);\n                sb.AppendLine(\"Register: \" + paramDesc.Register);\n                sb.AppendLine(\"SystemValueType: \" + paramDesc.SystemValueType);\n                sb.AppendLine(\"UsageMask: \" + paramDesc.UsageMask);\n            }\n\n            sb.AppendLine(\"\");\n\n            string msg = sb.ToString();\n            Debug.WriteLine(msg);\n\n            return;\n        }\n\n        internal static ConstantBufferData[] GetDX11ConstantBuffers(D3DC.ShaderReflection d3dcShaderReflection)\n        {\n            ConstantBufferData[] cbuffersData = new ConstantBufferData[d3dcShaderReflection.Description.ConstantBuffers];\n            for (int i = 0; i < d3dcShaderReflection.Description.ConstantBuffers; i++)\n            {\n                D3DC.ConstantBuffer d3dcbuffer = d3dcShaderReflection.GetConstantBuffer(i);\n                ConstantBufferData cbufferData = ShaderProfileDX11.CreateDX11ConstantBufferData(d3dcbuffer);\n                cbuffersData[i] = cbufferData;\n            }\n\n            return cbuffersData;\n        }\n\n        private static ConstantBufferData CreateDX11ConstantBufferData(D3DC.ConstantBuffer d3dcbuffer)\n        {\n            ConstantBufferData cbufferData = new ConstantBufferData();\n\n            cbufferData.Name = string.Empty;\n            cbufferData.Size = d3dcbuffer.Description.Size;\n\n            cbufferData.ParameterIndex = new List<int>();\n\n            List<EffectObject.EffectParameterContent> parameters = new List<EffectObject.EffectParameterContent>();\n\n            // Gather all the parameters.\n            for (int i = 0; i < d3dcbuffer.Description.VariableCount; i++)\n            {\n                D3DC.ShaderReflectionVariable vdesc = d3dcbuffer.GetVariable(i);\n\n                EffectObject.EffectParameterContent param = GetParameterFromType(vdesc.GetVariableType());\n\n                param.name = vdesc.Description.Name;\n                param.semantic = string.Empty;\n                param.bufferOffset = vdesc.Description.StartOffset;\n\n                uint size = param.columns * param.rows * 4;\n                byte[] data = new byte[size];\n\n                if (vdesc.Description.DefaultValue != IntPtr.Zero)\n                    Marshal.Copy(vdesc.Description.DefaultValue, data, 0, (int)size);\n\n                param.data = data;\n\n                parameters.Add(param);\n            }\n\n            // Sort them by the offset for some consistent results.\n            IEnumerable<EffectObject.EffectParameterContent> sortedParameters = parameters.OrderBy(e => e.bufferOffset);\n            cbufferData.Parameters = sortedParameters.ToList();\n\n            // Store the parameter offsets.\n            cbufferData.ParameterOffset = new List<int>();\n            foreach (EffectObject.EffectParameterContent param in cbufferData.Parameters)\n                cbufferData.ParameterOffset.Add(param.bufferOffset);\n\n            return cbufferData;\n        }\n\n        private static EffectObject.EffectParameterContent GetParameterFromType(D3DC.ShaderReflectionType type)\n        {\n            EffectObject.EffectParameterContent param = new EffectObject.EffectParameterContent();\n            param.rows = (uint)type.Description.RowCount;\n            param.columns = (uint)type.Description.ColumnCount;\n            param.columnsActual = (uint)type.Description.ColumnCount;\n            param.name = type.Description.Name ?? string.Empty;\n            param.semantic = string.Empty;\n            param.bufferOffset = type.Description.Offset;\n\n            switch (type.Description.Class)\n            {\n                case D3DC.ShaderVariableClass.Scalar:\n                    param.class_ = EffectObject.PARAMETER_CLASS.SCALAR;\n                    break;\n\n                case D3DC.ShaderVariableClass.Vector:\n                    param.class_ = EffectObject.PARAMETER_CLASS.VECTOR;\n                    break;\n\n                case D3DC.ShaderVariableClass.MatrixColumns:\n                    param.class_ = EffectObject.PARAMETER_CLASS.MATRIX_COLUMNS;\n                    break;\n\n                default:\n                    throw new Exception(\"Unsupported parameter class!\");\n            }\n\n            switch (type.Description.Type)\n            {\n                case D3DC.ShaderVariableType.Bool:\n                    param.type = EffectObject.PARAMETER_TYPE.BOOL;\n                    break;\n\n                case D3DC.ShaderVariableType.Float:\n                    param.type = EffectObject.PARAMETER_TYPE.FLOAT;\n                    break;\n\n                case D3DC.ShaderVariableType.Int:\n                    param.type = EffectObject.PARAMETER_TYPE.INT;\n                    break;\n\n                default:\n                    throw new Exception(\"Unsupported parameter type!\");\n            }\n\n            param.member_count = (uint)type.Description.MemberCount;\n            param.element_count = (uint)type.Description.ElementCount;\n\n            if (param.member_count > 0)\n            {\n                param.member_handles = new EffectObject.EffectParameterContent[param.member_count];\n                for (int i = 0; i < param.member_count; i++)\n                {\n                    EffectObject.EffectParameterContent mparam = GetParameterFromType(type.GetMemberType(i));\n                    mparam.name = type.GetMemberTypeName(i) ?? string.Empty;\n                    param.member_handles[i] = mparam;\n                }\n            }\n            else\n            {\n                param.member_handles = new EffectObject.EffectParameterContent[param.element_count];\n                for (int i = 0; i < param.element_count; i++)\n                {\n                    EffectObject.EffectParameterContent mparam = new EffectObject.EffectParameterContent();\n\n                    mparam.name = string.Empty;\n                    mparam.semantic = string.Empty;\n                    mparam.type = param.type;\n                    mparam.class_ = param.class_;\n                    mparam.rows = param.rows;\n                    mparam.columns = param.columns;\n                    mparam.columnsActual = param.columnsActual;\n                    mparam.data = new byte[param.columns * param.rows * 4];\n\n                    param.member_handles[i] = mparam;\n                }\n            }\n\n            return param;\n        }\n\n        private class StringConverter : TypeConverter\n        {\n            public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n            {\n                if (value is string)\n                {\n                    string name = value as string;\n\n                    if (ShaderProfile.DirectX_11.Name == name)\n                        return ShaderProfile.DirectX_11;\n\n                    if (ShaderProfile.OpenGL_Mojo.Name == name)\n                        return ShaderProfile.OpenGL_Mojo;\n                }\n\n                return base.ConvertFrom(context, culture, value);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderProfileDX11.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Text.RegularExpressions;\nusing Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\nusing Microsoft.Xna.Framework.Graphics;\nusing D3D = SharpDX.Direct3D;\nusing D3DC = SharpDX.D3DCompiler;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    class ShaderProfileDX11 : ShaderProfile\n    {\n        public override ShaderProfileType ProfileType { get { return ShaderProfileType.DirectX_11; } }\n        public override string Name { get { return \"DirectX_11\"; } }\n\n        public ShaderProfileDX11()\n        {\n        }\n\n        internal override IEnumerable<KeyValuePair<string, string>> GetMacros(GraphicsBackend backend)\n        {\n            yield return new KeyValuePair<string, string>(\"__DIRECTX__\", \"1\");\n        }\n\n        internal override void ValidateShaderModels(PassInfo pass, string shaderFunction, string shaderModel, ShaderStage shaderStage, ShaderVersion shaderVersion)\n        {\n\n            if (shaderStage == ShaderStage.Vertex)\n            {\n                if (shaderVersion.Major == -1)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Vertex shader '{1}'.\", shaderModel, shaderFunction));\n                if (shaderVersion.Major < 2)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Vertex shader '{1}' must be at least SM 2.0.\", shaderModel, shaderFunction));\n            }\n\n            if (shaderStage == ShaderStage.Pixel)\n            {\n                if (shaderVersion.Major == -1)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Pixel shader '{1}'.\", shaderModel, shaderFunction));\n                if (shaderVersion.Major < 2)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Pixel shader '{1}' must be at least SM 2.0.\", shaderModel, shaderFunction));\n            }\n\n            if (shaderStage == ShaderStage.Compute)\n            {\n                if (shaderVersion.Major == -1)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Compute shader '{1}'.\", shaderModel, shaderFunction));\n                if (shaderVersion.Major < 5)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Compute shader '{1}' must be at least SM 5.0.\", shaderModel, shaderFunction));\n            }\n        }\n\n        internal override ShaderData CreateShader(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, EffectObject effect, ShaderInfo shaderInfo, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, ShaderVersion shaderVersion, ShaderStage shaderStage, ref string errorsAndWarnings)\n        {\n            string dx11ShaderProfileName = shaderProfileName;\n            dx11ShaderProfileName = dx11ShaderProfileName.Replace(\"s_2_0\", \"s_4_0_level_9_1\");\n            dx11ShaderProfileName = dx11ShaderProfileName.Replace(\"s_3_0\", \"s_4_0_level_9_3\");\n            using (D3DC.ShaderBytecode shaderBytecodeDX11 = ShaderProfile.CompileHLSL(input, context, fullFilePath, fileContent, debugMode, shaderFunction, dx11ShaderProfileName, true, ref errorsAndWarnings))\n            {\n                ShaderData shaderDataDX11 = ShaderProfileDX11.CreateHLSL(input, context, backend, shaderInfo, shaderBytecodeDX11, shaderStage, effect.ConstantBuffers, debugMode);\n                return shaderDataDX11;\n            }\n        }\n\n        private static ShaderData CreateHLSL(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderInfo shaderInfo, D3DC.ShaderBytecode shaderBytecodeDX11, ShaderStage shaderStage, List<ConstantBufferData> cbuffers, EffectProcessorDebugMode debugMode)\n        {\n            ShaderData dxshader = new ShaderData(shaderStage);\n            dxshader._attributes = new ShaderData.Attribute[0];\n\n            // Strip the bytecode we're gonna save!\n            D3DC.StripFlags stripFlags = D3DC.StripFlags.CompilerStripReflectionData |\n                                         D3DC.StripFlags.CompilerStripTestBlobs;\n\n            if (debugMode != EffectProcessorDebugMode.Debug)\n                stripFlags |= D3DC.StripFlags.CompilerStripDebugInformation;\n\n            // Strip the bytecode for saving to disk.\n            D3DC.ShaderBytecode stripped = shaderBytecodeDX11.Strip(stripFlags);\n            {\n                // Only SM4 and above works with strip... so this can return null!\n                if (stripped != null)\n                {\n                    dxshader.ShaderCode = stripped;\n                }\n                else\n                {\n                    // TODO: There is a way to strip SM3 and below\n                    // but we have to write the method ourselves.\n                    // \n                    // If we need to support it then consider porting\n                    // this code over...\n                    //\n                    // http://entland.homelinux.com/blog/2009/01/15/stripping-comments-from-shader-bytecodes/\n                    //\n                    dxshader.ShaderCode = (byte[])shaderBytecodeDX11.Data.Clone();\n                }\n            }\n\n            // Use reflection to get details of the shader.\n            using (D3DC.ShaderReflection shaderReflectionDX11 = new D3DC.ShaderReflection(shaderBytecodeDX11.Data))\n            {\n                LogDX11ShaderReflection(shaderReflectionDX11);\n\n                List<D3DC.InputBindingDescription> samplersMap = new List<D3DC.InputBindingDescription>();\n                List<D3DC.InputBindingDescription> texturesMap = new List<D3DC.InputBindingDescription>();\n\n                for (int i = 0; i < shaderReflectionDX11.Description.BoundResources; i++)\n                {\n                    D3DC.InputBindingDescription ibDesc = shaderReflectionDX11.GetResourceBindingDescription(i);\n                    switch (ibDesc.Type)\n                    {\n                        case D3DC.ShaderInputType.Sampler:\n                            samplersMap.Add(ibDesc);\n                            break;\n                        case D3DC.ShaderInputType.Texture:\n                            texturesMap.Add(ibDesc);\n                            break;\n                    }\n                }\n\n                // Get the textures.\n                List<SamplerInfo> textures = new List<SamplerInfo>();\n                foreach (D3DC.InputBindingDescription txDesc in texturesMap)\n                {\n                    // Init samplerInfo\n                    SamplerInfo textureInfo = new SamplerInfo();\n                    textureInfo.type = MojoShader.SamplerType.SAMPLER_UNKNOWN;\n                    textureInfo.GLsamplerName = String.Empty;\n                    textureInfo.samplerSlot = -1;\n                    textureInfo.state = null;\n                    textureInfo.textureSlot = -1;\n                    textureInfo.textureName = null;\n                    textureInfo.textureParameter = -1;\n\n                    textureInfo.textureSlot = txDesc.BindPoint;\n                    textureInfo.textureName = txDesc.Name;\n                    textureInfo.type = DXToSamplerType(txDesc.Dimension);\n\n                    textures.Add(textureInfo);\n                }\n\n                // Get the samplers.\n                List<SamplerInfo> samplers = new List<SamplerInfo>();\n                foreach (D3DC.InputBindingDescription samplerDesc in samplersMap)\n                {\n                    // Init samplerInfo\n                    SamplerInfo samplerInfo = new SamplerInfo();\n                    samplerInfo.type = MojoShader.SamplerType.SAMPLER_UNKNOWN;\n                    samplerInfo.GLsamplerName = String.Empty;\n                    samplerInfo.samplerSlot = -1;\n                    samplerInfo.state = null;\n                    samplerInfo.textureSlot = -1;\n                    samplerInfo.textureName = null;\n                    samplerInfo.textureParameter = -1;\n\n                    samplerInfo.samplerSlot = samplerDesc.BindPoint;\n                    samplerInfo.GLsamplerName = samplerDesc.Name;\n\n                    SamplerStateInfo samplerStateInfo = shaderInfo.SamplerStates[samplerDesc.Name];\n                    samplerInfo.textureName = samplerStateInfo.TextureName;\n                    samplerInfo.state = samplerStateInfo.State;\n\n                    samplers.Add(samplerInfo);\n                }\n\n                // merge paired samples & textures\n                // & resolve textureName from sample.\n                for(int t = 0; t< textures.Count; t++)\n                {\n                    SamplerInfo textureInfo = textures[t];\n\n                    for (int s = 0; s < samplers.Count; s++)\n                    {\n                        if (textureInfo.textureName == samplers[s].GLsamplerName)\n                        {\n                            textureInfo.textureName = samplers[s].textureName;\n\n                            textureInfo.samplerSlot = samplers[s].samplerSlot;\n                            if (samplers[s].state != null)\n                            {\n                                textureInfo.state = samplers[s].state;\n                            }\n\n                            samplers.RemoveAt(s--);\n                            break;\n                        }\n                    }\n\n                    textures[t] = textureInfo; // update struct\n                }\n\n                // merge remaining samples into textures \n                for (int t = 0; t < textures.Count; t++)\n                {\n                    SamplerInfo textureInfo = textures[t];\n\n                    for (int s = 0; s < samplers.Count; s++)\n                    {\n                        if (textureInfo.samplerSlot == -1)\n                        {\n                            textureInfo.samplerSlot = samplers[s].samplerSlot;\n                            if (samplers[s].state != null)\n                            {\n                                textureInfo.state = samplers[s].state;\n                            }\n\n                            samplers.RemoveAt(s--);\n                            break;\n                        }\n                    }\n\n                    textures[t] = textureInfo; // update struct\n                }\n\n                if (samplers.Count > 0)\n                    throw new InvalidOperationException(\"samplers not merged.\");\n\n                dxshader._samplers = textures.ToArray();\n\n                // Gather all the constant buffers used by this shader.\n                ConstantBufferData[] cbuffersData = GetDX11ConstantBuffers(shaderReflectionDX11);\n\n                // map ConstantBuffers\n                int[] cbindexmap = new int[cbuffersData.Length];\n                for (int i = 0; i < cbuffersData.Length; i++)\n                {\n                    // Look for a duplicate cbuffer in the list.\n                    int cbindex = 0;\n                    for (; cbindex < cbuffers.Count; cbindex++)\n                        if (cbuffersData[i].SameAs(cbuffers[cbindex]))\n                            break;\n                    // Add a new cbuffer.\n                    if (cbindex == cbuffers.Count)\n                        cbuffers.Add(cbuffersData[i]);\n\n                    cbindexmap[i] = cbindex;\n                }\n                dxshader._cbuffers = cbindexmap;\n            }\n\n            return dxshader;\n        }\n\n        private static MojoShader.SamplerType DXToSamplerType(D3D.ShaderResourceViewDimension dimension)\n        {\n            switch (dimension)\n            {\n                case D3D.ShaderResourceViewDimension.Texture1D:\n                case D3D.ShaderResourceViewDimension.Texture1DArray:\n                    return MojoShader.SamplerType.SAMPLER_1D;\n\n                case D3D.ShaderResourceViewDimension.Texture2D:\n                case D3D.ShaderResourceViewDimension.Texture2DArray:\n                case D3D.ShaderResourceViewDimension.Texture2DMultisampled:\n                case D3D.ShaderResourceViewDimension.Texture2DMultisampledArray:\n                    return MojoShader.SamplerType.SAMPLER_2D;\n\n                case D3D.ShaderResourceViewDimension.Texture3D:\n                    return MojoShader.SamplerType.SAMPLER_VOLUME;\n\n                case D3D.ShaderResourceViewDimension.TextureCube:\n                case D3D.ShaderResourceViewDimension.TextureCubeArray:\n                    return MojoShader.SamplerType.SAMPLER_CUBE;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderProfileGL.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Text;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\nusing Microsoft.Xna.Framework.Graphics;\nusing D3DC = SharpDX.D3DCompiler;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    class ShaderProfileGL : ShaderProfile\n    {\n        public override ShaderProfileType ProfileType { get { return ShaderProfileType.OpenGL_Mojo; } }\n        public override string Name { get { return \"OpenGL\"; } }\n\n        public ShaderProfileGL()\n        {\n        }\n\n        internal override IEnumerable<KeyValuePair<string, string>> GetMacros(GraphicsBackend backend)\n        {\n            yield return new KeyValuePair<string, string>(\"__GL__\", \"1\");\n            yield return new KeyValuePair<string, string>(\"__MOJOSHADER__\", \"1\");\n\n            switch(backend)\n            {\n                case GraphicsBackend.OpenGL:\n                        yield return new KeyValuePair<string, string>(\"__OPENGL__\", \"1\");\n                    break;\n\n                    case GraphicsBackend.GLES:\n                    case GraphicsBackend.WebGL:\n                        yield return new KeyValuePair<string, string>(\"__GLES__\", \"1\");\n                    break;\n            }\n        }\n\n        internal override void ValidateShaderModels(PassInfo pass, string shaderFunction, string shaderModel, ShaderStage shaderStage, ShaderVersion shaderVersion)\n        {\n            const int MojoMaxShaderVersion = 4;\n\n            if (shaderStage == ShaderStage.Vertex)\n            {\n                if (shaderVersion.Major == -1)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Vertex shader '{1}'.\", shaderModel, shaderFunction));\n                if (shaderVersion.Major < 2)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Vertex shader '{1}' must be at least SM 2.0.\", shaderModel, shaderFunction));\n                if (shaderVersion.Major > MojoMaxShaderVersion)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Vertex shader '{1}' must be SM 3.0 or lower.\", shaderModel, shaderFunction));\n            }\n\n            if (shaderStage == ShaderStage.Pixel)\n            {\n                if (shaderVersion.Major == -1)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Pixel shader '{1}'.\", shaderModel, pass.psFunction));\n                if (shaderVersion.Major < 2)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Pixel shader '{1}' must be at least SM 2.0.\", shaderModel, shaderFunction));\n                if (shaderVersion.Major > MojoMaxShaderVersion)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Pixel shader '{1}' must be SM 3.0 or lower.\", shaderModel, shaderFunction));\n            }\n\n            if (shaderStage == ShaderStage.Compute)\n            {\n                if (shaderVersion.Major == -1)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Compute shader '{1}'.\", shaderModel, shaderFunction));\n                if (shaderVersion.Major < 5)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Compute shader '{1}' must be at least SM 5.0.\", shaderModel, shaderFunction));\n                if (shaderVersion.Major > MojoMaxShaderVersion)\n                    throw new Exception(String.Format(\"Invalid profile '{0}'. Compute shader '{1}' must be SM 3.0 or lower.\", shaderModel, shaderFunction));\n            }\n        }\n\n        internal override ShaderData CreateShader(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, EffectObject effect, ShaderInfo shaderInfo, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, ShaderVersion shaderVersion, ShaderStage shaderStage, ref string errorsAndWarnings)\n        {\n            ConstantBufferData[] dx11CBuffersData;\n            string dx11ShaderProfileName = shaderProfileName;\n            dx11ShaderProfileName = dx11ShaderProfileName.Replace(\"s_2_0\", \"s_4_0_level_9_1\");\n            dx11ShaderProfileName = dx11ShaderProfileName.Replace(\"s_3_0\", \"s_4_0_level_9_3\");\n            using (D3DC.ShaderBytecode shaderBytecodeDX11 = ShaderProfile.CompileHLSL(input, context, fullFilePath, fileContent, debugMode, shaderFunction, dx11ShaderProfileName, true, ref errorsAndWarnings))\n            {\n                // Use reflection to get details of the shader.\n                using (D3DC.ShaderReflection shaderReflection = new D3DC.ShaderReflection(shaderBytecodeDX11.Data))\n                {\n                    LogDX11ShaderReflection(shaderReflection);\n                    dx11CBuffersData = GetDX11ConstantBuffers(shaderReflection);\n                }\n            }\n\n            // For now GLSL is only supported via translation\n            // using MojoShader which works from DX9 HLSL bytecode.\n            string dx9ShaderProfileName = shaderProfileName;\n            dx9ShaderProfileName = dx9ShaderProfileName.Replace(\"s_4_0_level_9_1\", \"s_2_0\");\n            dx9ShaderProfileName = dx9ShaderProfileName.Replace(\"s_4_0_level_9_3\", \"s_3_0\");\n            dx9ShaderProfileName = dx9ShaderProfileName.Replace(\"s_4_0\", \"s_3_0\");\n            using (D3DC.ShaderBytecode shaderBytecodeDX9 = ShaderProfile.CompileHLSL(input, context, fullFilePath, fileContent, debugMode, shaderFunction, dx9ShaderProfileName, false, ref errorsAndWarnings))\n            {\n                ShaderData shaderDataDX9 = ShaderProfileGL.CreateGLSL(input, context, backend, shaderInfo, shaderBytecodeDX9, shaderStage, shaderVersion, effect.ConstantBuffers, debugMode, dx11CBuffersData);\n                return shaderDataDX9;\n            }\n        }\n\n        private static ShaderData CreateGLSL(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderInfo shaderInfo, D3DC.ShaderBytecode shaderBytecodeDX9, ShaderStage shaderStage, ShaderVersion shaderVersion, List<ConstantBufferData> cbuffers, EffectProcessorDebugMode debugMode, ConstantBufferData[] dx11CBuffersData)\n        {\n            ShaderData dxshader = new ShaderData(shaderStage);\n\n            // Use MojoShader to convert the HLSL bytecode to GLSL.\n\n            IntPtr parseDataPtr = MojoShader.NativeMethods.Parse(\n                MojoShader.NativeConstants.PROFILE_GLSL,\n                shaderBytecodeDX9.Data,\n                shaderBytecodeDX9.Data.Length,\n                IntPtr.Zero,\n                0,\n                IntPtr.Zero,\n                0,\n                IntPtr.Zero,\n                IntPtr.Zero,\n                IntPtr.Zero);\n\n            MojoShader.ParseData parseData = MarshalHelper.Unmarshal<MojoShader.ParseData>(parseDataPtr);\n            if (parseData.error_count > 0)\n            {\n                MojoShader.Error[] errors = MarshalHelper.UnmarshalArray<MojoShader.Error>(\n                    parseData.errors,\n                    parseData.error_count\n                );\n                throw new Exception(errors[0].error);\n            }\n\n            // Conver the attributes.\n            //\n            // TODO: Could this be done using DX shader reflection?\n            //\n            {\n                MojoShader.Attribute[] attributes = MarshalHelper.UnmarshalArray<MojoShader.Attribute>(\n                        parseData.attributes, parseData.attribute_count);\n\n                dxshader._attributes = new ShaderData.Attribute[attributes.Length];\n                for (int i = 0; i < attributes.Length; i++)\n                {\n                    dxshader._attributes[i].name = attributes[i].name;\n                    dxshader._attributes[i].index = attributes[i].index;\n                    dxshader._attributes[i].usage = EffectObject.ToXNAVertexElementUsage(attributes[i].usage);\n                }\n            }\n\n            MojoShader.Symbol[] symbols = MarshalHelper.UnmarshalArray<MojoShader.Symbol>(\n                    parseData.symbols, parseData.symbol_count);\n\n            //try to put the symbols in the order they are eventually packed into the uniform arrays\n            //this /should/ be done by pulling the info from mojoshader\n            Array.Sort(symbols, delegate (MojoShader.Symbol a, MojoShader.Symbol b)\n            {\n                uint va = a.register_index;\n                if (a.info.elements == 1)\n                    va += 1024; //hax. mojoshader puts array objects first\n                uint vb = b.register_index;\n                if (b.info.elements == 1)\n                    vb += 1024;\n                return va.CompareTo(vb);\n            }\n            );//(a, b) => ((int)(a.info.elements > 1))a.register_index.CompareTo(b.register_index));\n\n            // NOTE: Because we are compiling SM3.0 to GLSL 1.10 instead of GLSL 1.20\n            // MojoShader encodes integers and booleans as floats,\n            // and we need to handle int<->float conversion manually.\n            // We leave the code below, but the runtime has been optimized for this case.\n            // TODO: Compile SM 3.0 and above with MojoShader.NativeConstants.PROFILE_GLSL120.\n\n            // For whatever reason the register indexing is \n            // incorrect from MojoShader.\n            // TODO: use reflection to map HLSL parameter indices to GLSL\n            {\n                uint bool_index = 0;\n                uint float4_index = 0;\n                uint int4_index = 0;\n\n                for (int i = 0; i < symbols.Length; i++)\n                {\n                    switch (symbols[i].register_set)\n                    {\n                        case MojoShader.SymbolRegisterSet.BOOL:\n                            symbols[i].register_index = bool_index;\n                            bool_index += symbols[i].register_count;\n                            break;\n\n                        case MojoShader.SymbolRegisterSet.FLOAT4:\n                            symbols[i].register_index = float4_index;\n                            float4_index += symbols[i].register_count;\n                            break;\n\n                        case MojoShader.SymbolRegisterSet.INT4:\n                            symbols[i].register_index = int4_index;\n                            int4_index += symbols[i].register_count;\n                            break;\n                    }\n                }\n            }\n\n            // Get the samplers.\n            MojoShader.Sampler[] samplers = MarshalHelper.UnmarshalArray<MojoShader.Sampler>(\n                    parseData.samplers, parseData.sampler_count);\n            dxshader._samplers = new SamplerInfo[samplers.Length];\n            for (int i = 0; i < samplers.Length; i++)\n            {\n                // We need the original sampler name... look for that in the symbols.\n                MojoShader.Symbol symbol = symbols.First(e => e.register_set == MojoShader.SymbolRegisterSet.SAMPLER &&\n                                                  e.register_index == samplers[i].index);\n                string samplerName = symbol.name;\n\n                SamplerInfo samplerInfo = new SamplerInfo();\n                samplerInfo.textureSlot = samplers[i].index;\n                samplerInfo.samplerSlot = samplers[i].index;\n\n                // GLSL needs the uniform sampler name.\n                samplerInfo.GLsamplerName = samplers[i].name;\n\n                //sampler mapping to parameter is unknown atm\n                samplerInfo.textureParameter = -1;\n                // By default use the original sampler name for the parameter name.\n                samplerInfo.textureName = samplerName;\n\n                samplerInfo.type = samplers[i].type;\n\n\n                string textureName = null;\n                if (samplerName.Contains(\"+\"))\n                {\n                    int plusIndex = samplerName.IndexOf('+');\n                    textureName = samplerName.Substring(plusIndex + 1);\n                    samplerName = samplerName.Substring(0, plusIndex);\n                }\n\n                SamplerStateInfo state;\n                if (shaderInfo.SamplerStates.TryGetValue(samplerName, out state))\n                {\n                    samplerInfo.state = state.State;\n\n                    if (textureName != null)\n                        samplerInfo.textureName = textureName;\n                    else\n                        samplerInfo.textureName = state.TextureName;\n                }\n\n                // Store the sampler.\n                dxshader._samplers[i] = samplerInfo;\n            }\n\n            // For whatever reason the register indexing is \n            // incorrect from MojoShader.\n            // TODO: use reflection to map HLSL sampler & texture indices to GLSL\n            {\n                uint sampler_index = 0;\n\n                for (int i = 0; i < dxshader._samplers.Length; i++)\n                {\n                    dxshader._samplers[i].samplerSlot = i;\n                    dxshader._samplers[i].textureSlot = i;\n                }\n            }\n\n            // Gather all the parameters used by this shader.\n            AddConstantBuffers(cbuffers, dxshader, symbols, dx11CBuffersData);\n\n            string glslCode = parseData.output;\n            glslCode = glslCode.Replace(\"\\r\\n\", \"\\n\");\n\n            List<GLSLBytecode> glslBytecodes = new List<GLSLBytecode>();\n\n            switch(backend)\n            {\n                case GraphicsBackend.OpenGL:\n                    {\n                        string glsl110Code = ConvertGLSL110ToGLSL110(dxshader.Stage, glslCode);\n                        GLSLBytecode glsl110 = new GLSLBytecode(1, 1, false, Encoding.ASCII.GetBytes(glsl110Code));\n                        glslBytecodes.Add(glsl110);\n                    }\n                    break;\n                case GraphicsBackend.GLES:\n                case GraphicsBackend.WebGL:\n                    {\n                        // GLES 3.00 is required for dFdx/dFdy/gl_FragData\n                        string glsl300esCode = ConvertGLSL110ToGLSL300es(dxshader.Stage, glslCode);\n                        GLSLBytecode glsl300es = new GLSLBytecode(3, 0, true, Encoding.ASCII.GetBytes(glsl300esCode));\n                        glslBytecodes.Add(glsl300es);\n\n                        if (shaderVersion == new ShaderVersion(2, 0))\n                        {\n                            string glsl100Code = ConvertGLSL110ToGLSL100(dxshader.Stage, glslCode);\n                            GLSLBytecode glsl100 = new GLSLBytecode(1, 0, false, Encoding.ASCII.GetBytes(glsl100Code));\n                            glslBytecodes.Add(glsl100);\n                        }\n                    }\n                    break;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n\n            using (MemoryStream memoryStream = new MemoryStream())\n            using (BinaryWriter writer = new BinaryWriter(memoryStream, Encoding.ASCII))\n            {\n                writer.Write((short)0); // Reserved\n\n                // write bytecode directory\n                writer.Write((short)glslBytecodes.Count);\n                const int HeaderSize = 4;\n                const int EntrySize = 7;\n                int bytecodesOffset = HeaderSize + EntrySize * glslBytecodes.Count;\n                for (int i = 0; i < glslBytecodes.Count; i++)\n                {\n                    writer.Write((byte)glslBytecodes[i].Major);\n                    writer.Write((byte)glslBytecodes[i].Minor);\n                    writer.Write(glslBytecodes[i].ES);\n                    writer.Write((int)(bytecodesOffset));\n                    bytecodesOffset += (4 + glslBytecodes[i].Bytecode.Length);\n                }\n                // write bytecodes\n                for (int i = 0; i < glslBytecodes.Count; i++)\n                {\n                    writer.Write((Int32)glslBytecodes[i].Bytecode.Length);\n                    writer.Write(glslBytecodes[i].Bytecode);\n                }\n\n                // Store the code for serialization.\n                dxshader.ShaderCode = memoryStream.ToArray();\n            }\n\n            return dxshader;\n        }\n\n        private static string ConvertGLSL110ToGLSL110(ShaderStage shaderStage, string glslCode)\n        {\n            // remove the opengl 1.10 header for now.\n            Debug.Assert(glslCode.StartsWith(\"#version 110\\n\"));\n            glslCode = glslCode.Replace(\"#version 110\\n\", \"\");\n\n            // add the header back.\n            // (version 1.10 is the OpenGL default)\n            //glslCode = \"#version 110\\n\"\n            //         + glslCode;\n\n            return glslCode;\n        }\n\n        private static string ConvertGLSL110ToGLSL100(ShaderStage shaderStage, string glslCode)\n        {\n            // remove the opengl 1.10 header. GLES platforms do not like this.\n            Debug.Assert(glslCode.StartsWith(\"#version 110\\n\"));\n            glslCode = glslCode.Replace(\"#version 110\\n\", \"\");\n\n            // Add the required precision specifiers for GLES.\n            if (shaderStage == ShaderStage.Pixel)\n            {\n                glslCode = \"precision highp float;\\n\"\n                         + \"precision highp int;\\n\"\n                         + \"\\n\"\n                         + glslCode;\n            }\n\n            // Enable standard derivatives extension as necessary.\n            // (we dont need that on Reach/sm2.0)\n            //if (glslCode.IndexOf(\"dFdx\", StringComparison.InvariantCulture) >= 0\n            //||  glslCode.IndexOf(\"dFdy\", StringComparison.InvariantCulture) >= 0\n            //||  glslCode.IndexOf(\"fwidth\", StringComparison.InvariantCulture) >= 0)\n            //{\n            //    glslCode = \"#extension GL_OES_standard_derivatives : enable\\n\"\n            //             + \"\\n\";\n            //}\n\n            // add the GL ES header.\n            // (version 1.00 is the GLes default)\n            //glslCode = \"#version 100\\n\"\n            //         + glslCode;\n\n            return glslCode;\n        }\n\n        static Regex rgxAttribute = new Regex(\n                @\"^attribute(?=\\s)\", RegexOptions.Multiline);\n        static Regex rgxVarying = new Regex(\n                @\"^varying(?=\\s)\", RegexOptions.Multiline);\n        static Regex rgxFragColor = new Regex(\n                @\"^#define (\\w+) gl_FragColor\", RegexOptions.Multiline);\n        static Regex rgxFragData = new Regex(\n                @\"^#define (\\w+) gl_FragData\\[(\\d+)\\]\", RegexOptions.Multiline);\n        static Regex rgxTexture = new Regex(\n                @\"texture(2D|3D|Cube)(?=\\()\", RegexOptions.Multiline);\n\n        private static string ConvertGLSL110ToGLSL300es(ShaderStage shaderStage, string glslCode)\n        {\n            // remove the opengl 1.10 header. GLES platforms do not like this.\n            Debug.Assert(glslCode.StartsWith(\"#version 110\\n\"));\n            glslCode = glslCode.Replace(\"#version 110\\n\", \"\");\n\n            // Add the required precision specifiers for GLES.\n            if (shaderStage == ShaderStage.Pixel)\n            {\n                glslCode = \"precision highp float;\\n\"\n                         + \"precision highp int;\\n\"\n                         + \"\\n\"\n                         + glslCode;\n            }\n\n            // add the GL ES header.\n            glslCode = \"#version 300 es\\n\"\n                     + glslCode;\n\n            switch (shaderStage)\n            {\n                case ShaderStage.Vertex:\n                    {\n                        glslCode = rgxVarying.Replace(glslCode, \"out\");\n                    }\n                    break;\n\n                case ShaderStage.Pixel:\n                    {\n                        glslCode = rgxVarying.Replace(glslCode, \"in\");\n                        glslCode = rgxFragColor.Replace(glslCode, \"out vec4 $1;\");\n                        glslCode = rgxFragData.Replace(glslCode, \"layout(location=$2) out vec4 $1;\");\n                    }\n                    break;\n            }\n\n            glslCode = rgxAttribute.Replace(glslCode, \"in\");\n            glslCode = rgxTexture.Replace(glslCode, \"texture\");\n\n            return glslCode;\n        }\n\n        private static void AddConstantBuffers(List<ConstantBufferData> cbuffers, ShaderData dxshader, MojoShader.Symbol[] symbols, ConstantBufferData[] dx11CBuffersData)\n        {\n            var symbol_types = new[]\n            {\n                new { name = (dxshader.Stage == ShaderStage.Vertex) ? \"vs_uniforms_bool\"  : \"ps_uniforms_bool\",  set = MojoShader.SymbolRegisterSet.BOOL, },\n                new { name = (dxshader.Stage == ShaderStage.Vertex) ? \"vs_uniforms_ivec4\" : \"ps_uniforms_ivec4\", set = MojoShader.SymbolRegisterSet.INT4, },\n                new { name = (dxshader.Stage == ShaderStage.Vertex) ? \"vs_uniforms_vec4\"  : \"ps_uniforms_vec4\",  set = MojoShader.SymbolRegisterSet.FLOAT4, },\n            };\n\n            List<int> cbuffer_index = new List<int>();\n            for (int i = 0; i < symbol_types.Length; i++)\n            {\n                ConstantBufferData cbuffer = ShaderProfileGL.CreateConstantBufferData(symbol_types[i].name,\n                                                                                      symbol_types[i].set,\n                                                                                      symbols);\n\n                if (cbuffer.Size == 0)\n                    continue;\n\n                int match = cbuffers.FindIndex(e => e.SameAs(cbuffer));\n                if (match == -1)\n                {\n                    cbuffer_index.Add(cbuffers.Count);\n                    cbuffers.Add(cbuffer);\n\n                    foreach (EffectObject.EffectParameterContent param in cbuffer.Parameters)\n                        SetReflectionData(dx11CBuffersData, param);\n                }\n                else\n                {\n                    cbuffer_index.Add(match);\n                }\n            }\n\n            dxshader._cbuffers = cbuffer_index.ToArray();\n        }\n\n        private static void SetReflectionData(ConstantBufferData[] dx11CBuffersData, EffectObject.EffectParameterContent param)\n        {\n            foreach (ConstantBufferData dx11cb in dx11CBuffersData)\n            {\n                foreach (EffectObject.EffectParameterContent dx11param in dx11cb.Parameters)\n                {\n                    if (param.name == dx11param.name\n                    && param.type == dx11param.type\n                    && param.class_ == dx11param.class_)\n                    {\n                        // set reflection data\n                        if (param.data is Array && dx11param.data is Array)\n                        {\n                            Array paramArray = param.data as Array;\n                            Array dx11paramArray = dx11param.data as Array;\n                            if (paramArray.Length == dx11paramArray.Length)\n                            {\n                                Array.Copy(dx11paramArray, paramArray, paramArray.Length);\n                            }\n                            else\n                            {\n                                Debug.Assert(paramArray.Length == dx11paramArray.Length);\n                            }\n                        }\n                        return;\n                    }\n                }\n            }\n            return;\n        }\n\n        private static ConstantBufferData CreateConstantBufferData(string name, MojoShader.SymbolRegisterSet set, MojoShader.Symbol[] symbols)\n        {\n            ConstantBufferData cbuffer = new ConstantBufferData();\n\n            cbuffer.Name = name ?? string.Empty;\n\n            cbuffer.ParameterIndex = new List<int>();\n            cbuffer.ParameterOffset = new List<int>();\n            cbuffer.Parameters = new List<EffectObject.EffectParameterContent>();\n\n            int minRegister = short.MaxValue;\n            int maxRegister = 0;\n\n            int registerSize = (set == MojoShader.SymbolRegisterSet.BOOL ? 1 : 4) * 4;\n\n            foreach (MojoShader.Symbol symbol in symbols)\n            {\n                if (symbol.register_set != set)\n                    continue;\n\n                // Create the parameter.\n                EffectObject.EffectParameterContent parm = GetParameterFromSymbol(symbol);\n\n                int offset = (int)symbol.register_index * registerSize;\n                parm.bufferOffset = offset;\n\n                cbuffer.Parameters.Add(parm);\n                cbuffer.ParameterOffset.Add(offset);\n\n                minRegister = Math.Min(minRegister, (int)symbol.register_index);\n                maxRegister = Math.Max(maxRegister, (int)(symbol.register_index + symbol.register_count));\n            }\n\n            cbuffer.Size = Math.Max(maxRegister - minRegister, 0) * registerSize;\n\n            return cbuffer;\n        }\n\n        private static EffectObject.EffectParameterContent GetParameterFromSymbol(MojoShader.Symbol symbol)\n        {\n            EffectObject.EffectParameterContent param = new EffectObject.EffectParameterContent();\n            param.rows = symbol.info.rows;\n            param.columns = symbol.info.columns;\n            param.columnsActual = symbol.info.columns;\n            param.name = symbol.name ?? string.Empty;\n            param.semantic = string.Empty; // TODO: How do i do this with only MojoShader?\n\n            int registerSize = (symbol.register_set == MojoShader.SymbolRegisterSet.BOOL ? 1 : 4) * 4;\n            int offset = (int)symbol.register_index * registerSize;\n            param.bufferOffset = offset;\n\n            switch (symbol.info.parameter_class)\n            {\n                case MojoShader.SymbolClass.SCALAR:\n                    param.class_ = EffectObject.PARAMETER_CLASS.SCALAR;\n                    break;\n\n                case MojoShader.SymbolClass.VECTOR:\n                    param.class_ = EffectObject.PARAMETER_CLASS.VECTOR;\n                    break;\n\n                case MojoShader.SymbolClass.MATRIX_COLUMNS:\n                    param.class_ = EffectObject.PARAMETER_CLASS.MATRIX_COLUMNS;\n\n                    // MojoShader optimizes matrices to occupy less registers.\n                    param.columnsActual = Math.Min(param.columns, symbol.register_count);\n\n                    break;\n\n                default:\n                    throw new Exception(\"Unsupported parameter class!\");\n            }\n\n            switch (symbol.info.parameter_type)\n            {\n                case MojoShader.SymbolType.BOOL:\n                    param.type = EffectObject.PARAMETER_TYPE.BOOL;\n                    break;\n\n                case MojoShader.SymbolType.FLOAT:\n                    param.type = EffectObject.PARAMETER_TYPE.FLOAT;\n                    break;\n\n                case MojoShader.SymbolType.INT:\n                    param.type = EffectObject.PARAMETER_TYPE.INT;\n                    break;\n\n                default:\n                    throw new Exception(\"Unsupported parameter type!\");\n            }\n\n            param.data = new byte[param.rows * param.columns * 4];\n\n            param.member_count = symbol.info.member_count;\n            param.element_count = symbol.info.elements > 1 ? symbol.info.elements : 0;\n\n            if (param.member_count > 0)\n            {\n                param.member_handles = new EffectObject.EffectParameterContent[param.member_count];\n\n                MojoShader.Symbol[] members = MarshalHelper.UnmarshalArray<MojoShader.Symbol>(\n                    symbol.info.members, (int)symbol.info.member_count);\n\n                for (int i = 0; i < param.member_count; i++)\n                {\n                    EffectObject.EffectParameterContent mparam = GetParameterFromSymbol(members[i]);\n                    param.member_handles[i] = mparam;\n                }\n            }\n            else\n            {\n                param.member_handles = new EffectObject.EffectParameterContent[param.element_count];\n                for (int i = 0; i < param.element_count; i++)\n                {\n                    EffectObject.EffectParameterContent mparam = new EffectObject.EffectParameterContent();\n\n                    mparam.name = string.Empty;\n                    mparam.semantic = string.Empty;\n                    mparam.type = param.type;\n                    mparam.class_ = param.class_;\n                    mparam.rows = param.rows;\n                    mparam.columns = param.columns;\n                    mparam.columnsActual = (uint)Math.Min(param.columns, symbol.register_count - i * param.columns);\n                    mparam.data = new byte[param.columns * param.rows * 4];\n\n                    param.member_handles[i] = mparam;\n                }\n            }\n\n            return param;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderProfileType.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    public enum ShaderProfileType\n    {\n        OpenGL_Mojo = 0,\n        DirectX_11  = 1,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderStage.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    internal enum ShaderStage : byte\n    {\n        Pixel   = 0,\n        Vertex  = 1,\n        Compute = 5,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderVersion.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler\n{\n    public struct ShaderVersion\n    {\n        public readonly int Major;\n        public readonly int Minor;\n\n        private static readonly Regex VertexShaderRegex  = new Regex(@\"^vs_(?<major>1|2|3|4|5)_(?<minor>0|1|)(_level_(?<level>9_1|9_3))?$\", RegexOptions.Compiled);\n        private static readonly Regex PixelShaderRegex   = new Regex(@\"^ps_(?<major>1|2|3|4|5)_(?<minor>0|1|)(_level_(?<level>9_1|9_3))?$\", RegexOptions.Compiled);\n        private static readonly Regex ComputeShaderRegex = new Regex(@\"^cs_(?<major>1|2|3|4|5)_(?<minor>0|1|)?$\", RegexOptions.Compiled);\n        \n\n        public ShaderVersion(int major, int minor)\n            : this()\n        {\n            this.Major = major;\n            this.Minor = minor;\n        }\n\n        private static ShaderVersion ParseShaderModel(string shaderModel, Regex regex)\n        {\n            Match match = regex.Match(shaderModel);\n\n            if (match.Success)\n            {\n                int major = int.Parse(match.Groups[\"major\"].Value, NumberStyles.Integer, CultureInfo.InvariantCulture);\n                int minor = int.Parse(match.Groups[\"minor\"].Value, NumberStyles.Integer, CultureInfo.InvariantCulture);\n\n                Group levelGroup = match.Groups[\"level\"];\n                if (levelGroup.Success)\n                {\n                    if (major == 4 && minor == 0)\n                    {\n                        string level = levelGroup.Value;\n                        if (level == \"9_1\")\n                            return new ShaderVersion(2, 0);\n                        if (level == \"9_3\")\n                            return new ShaderVersion(3, 0);\n                    }\n                }\n                else\n                {\n                    return new ShaderVersion(major, minor);\n                }\n            }\n\n            return new ShaderVersion(-1, 0);\n\n        }\n\n        internal static ShaderVersion ParseVertexShaderModel(string vsModel)\n        {\n            return ParseShaderModel(vsModel, VertexShaderRegex);\n        }\n\n        internal static ShaderVersion ParsePixelShaderModel(string psModel)\n        {\n            return ParseShaderModel(psModel, PixelShaderRegex);\n        }\n\n        internal static ShaderVersion ParseComputeShaderModel(string csModel)\n        {\n            return ParseShaderModel(csModel, ComputeShaderRegex);\n        }\n\n        public static bool operator <(ShaderVersion l, ShaderVersion r)\n        {\n            if (l.Major == r.Major)\n                return (l.Minor < r.Minor);\n            return (l.Major < r.Major);\n        }\n\n        public static bool operator >(ShaderVersion l, ShaderVersion r)\n        {\n            if (l.Major == r.Major)\n                return (l.Minor > r.Minor);\n            return (l.Major > r.Major);\n        }\n\n        public static bool operator <=(ShaderVersion l, ShaderVersion r)\n        {\n            if (l.Major == r.Major)\n                return (l.Minor <= r.Minor);\n            return (l.Major < r.Major);\n        }\n\n        public static bool operator >=(ShaderVersion l, ShaderVersion r)\n        {\n            if (l.Major == r.Major)\n                return (l.Minor >= r.Minor);\n            return (l.Major > r.Major);\n        }\n\n        public static bool operator ==(ShaderVersion l, ShaderVersion r)\n        {\n            return (l.Major == r.Major && l.Minor == r.Minor);\n        }\n\n        public static bool operator !=(ShaderVersion l, ShaderVersion r)\n        {\n            return (l.Major != r.Major || l.Minor != r.Minor);\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{Major: {0}, Minor: {1} }}\",\n                Major, Minor);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/ExternalTool.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Threading;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Helper to run an external tool installed in the system. Useful for when\n    /// we don't want to package the tool ourselves (ffmpeg) or it's provided\n    /// by a third party (console manufacturer).\n    /// </summary>\n    internal class ExternalTool\n    {\n        public static int Run(string command, string arguments)\n        {\n            string stdout, stderr;\n            int result = Run(command, arguments, out stdout, out stderr);\n            if (result < 0)\n                throw new Exception(string.Format(\"{0} returned exit code {1}\", command, result));\n\n            return result;\n        }\n\n        public static int Run(string command, string arguments, out string stdout, out string stderr, string stdin = null)\n        {\n            // This particular case is likely to be the most common and thus\n            // warrants its own specific error message rather than falling\n            // back to a general exception from Process.Start()\n            string fullPath = FindCommand(command);\n            if (string.IsNullOrEmpty(fullPath))\n                throw new Exception(string.Format(\"Couldn't locate external tool '{0}'.\", command));\n\n            // We can't reference ref or out parameters from within\n            // lambdas (for the thread functions), so we have to store\n            // the data in a temporary variable and then assign these\n            // variables to the out parameters.\n            string stdoutTemp = string.Empty;\n            string stderrTemp = string.Empty;\n\n            ProcessStartInfo processInfo = new ProcessStartInfo\n            {\n                FileName = fullPath,\n                Arguments = arguments,\n                CreateNoWindow = true,\n                WindowStyle = ProcessWindowStyle.Hidden,\n                ErrorDialog = false,\n                UseShellExecute = false,\n                RedirectStandardOutput = true,\n                RedirectStandardError = true,\n                RedirectStandardInput = true,\n            };\n\n            EnsureExecutable(fullPath);\n\n            using (Process process = new Process())\n            {\n                process.StartInfo = processInfo;\n\n                process.Start();\n\n                // We have to run these in threads, because using ReadToEnd\n                // on one stream can deadlock if the other stream's buffer is\n                // full.\n                Thread stdoutThread = new Thread(new ThreadStart(() =>\n                {\n                    MemoryStream memory = new MemoryStream();\n                    process.StandardOutput.BaseStream.CopyTo(memory);\n                    byte[] bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    stdoutTemp = System.Text.Encoding.ASCII.GetString(bytes);\n                }));\n                Thread stderrThread = new Thread(new ThreadStart(() =>\n                {\n                    MemoryStream memory = new MemoryStream();\n                    process.StandardError.BaseStream.CopyTo(memory);\n                    byte[] bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    stderrTemp = System.Text.Encoding.ASCII.GetString(bytes);\n                }));\n\n                stdoutThread.Start();\n                stderrThread.Start();\n\n                if (stdin != null)\n                {\n                    process.StandardInput.Write(System.Text.Encoding.ASCII.GetBytes(stdin));\n                }\n\n                // Make sure interactive prompts don't block.\n                process.StandardInput.Close();\n\n                process.WaitForExit();\n\n                stdoutThread.Join();\n                stderrThread.Join();\n\n                stdout = stdoutTemp;\n                stderr = stderrTemp;\n\n                return process.ExitCode;\n            }\n        }\n\n        /// <summary>\n        /// Returns the fully-qualified path for a command, searching the system path if necessary.\n        /// </summary>\n        /// <remarks>\n        /// It's apparently necessary to use the full path when running on some systems.\n        /// </remarks>\n        private static string FindCommand(string command)\n        {\n            // Expand any environment variables.\n            command = Environment.ExpandEnvironmentVariables(command);\n\n            // If we have a full path just pass it through.\n            if (File.Exists(command))\n                return command;\n\n            // For Linux check specific subfolder\n            string lincom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"linux\", command);\n            if (CurrentPlatform.OS == OS.Linux && File.Exists(lincom))\n                return lincom;\n\n            // For Mac check specific subfolder\n            string maccom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"osx\", command);\n            if (CurrentPlatform.OS == OS.MacOSX && File.Exists(maccom))\n                return maccom;\n\n            // We don't have a full path, so try running through the system path to find it.\n            string paths = AppDomain.CurrentDomain.BaseDirectory +\n                Path.PathSeparator +\n                Environment.GetEnvironmentVariable(\"PATH\");\n\n            string justTheName = Path.GetFileName(command);\n            foreach (string path in paths.Split(Path.PathSeparator))\n            {\n                string fullName = Path.Combine(path, justTheName);\n                if (File.Exists(fullName))\n                    return fullName;\n\n                if (CurrentPlatform.OS == OS.Windows)\n                {\n                    string fullExeName = string.Concat(fullName, \".exe\");\n                    if (File.Exists(fullExeName))\n                        return fullExeName;\n                }\n            }\n\n            return null;\n        }\n\n        /// <summary>   \n        /// Ensures the specified executable has the executable bit set.  If the    \n        /// executable doesn't have the executable bit set on Linux or Mac OS, then \n        /// Mono will refuse to execute it. \n        /// </summary>  \n        /// <param name=\"path\">The full path to the executable.</param> \n        private static void EnsureExecutable(string path)\n        {\n            if (!path.StartsWith(\"/home\") && !path.StartsWith(\"/Users\"))\n                return;\n\n            try\n            {\n                Process process = Process.Start(\"chmod\", \"u+x \\\"\" + path + \"\\\"\");\n                process.WaitForExit();\n            }\n            catch\n            {\n                // This platform may not have chmod in the path, in which case we can't \n                // do anything reasonable here. \n            }\n        }\n\n        /// <summary>\n        /// Safely deletes the file if it exists.\n        /// </summary>\n        /// <param name=\"filePath\">The path to the file to delete.</param>\n        public static void DeleteFile(string filePath)\n        {\n            try\n            {\n                File.Delete(filePath);\n            }\n            catch (Exception)\n            {\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Processors/EffectProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Processes a string representation to a platform-specific compiled effect.\n    /// </summary>\n    [ContentProcessor(DisplayName = \"Effect - KNI\")]\n    public class EffectProcessor : ContentProcessor<EffectContent, CompiledEffectContent>\n    {\n        private EffectProcessorDebugMode _debugMode;\n        private string _defines;\n\n        /// <summary>\n        /// The debug mode for compiling effects.\n        /// </summary>\n        /// <value>The debug mode to use when compiling effects.</value>\n        public virtual EffectProcessorDebugMode DebugMode\n        {\n            get { return _debugMode; }\n            set { _debugMode = value; }\n        }\n\n        /// <summary>\n        /// Define assignments for the effect.\n        /// </summary>\n        /// <value>A list of define assignments delimited by semicolons.</value>\n        public virtual string Defines\n        {\n            get { return _defines; }\n            set { _defines = value; }\n        }\n\n\n        /// <summary>\n        /// Initializes a new instance of EffectProcessor.\n        /// </summary>\n        public EffectProcessor()\n        {\n        }\n\n        /// <summary>\n        /// Processes the string representation of the specified effect into a platform-specific binary format using the specified context.\n        /// </summary>\n        /// <param name=\"input\">The effect string to be processed.</param>\n        /// <param name=\"context\">Context for the specified processor.</param>\n        /// <returns>A platform-specific compiled binary effect.</returns>\n        public override CompiledEffectContent Process(EffectContent input, ContentProcessorContext context)\n        {\n            MojoEffectProcessor mojoProcessor = new MojoEffectProcessor();\n            mojoProcessor.DebugMode = this.DebugMode;\n            mojoProcessor.Defines = this.Defines;\n            return mojoProcessor.Process(input, context);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Processors/EffectProcessorDebugMode.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Specifies how debugging of effects is to be supported in PIX.\n    /// </summary>\n    public enum EffectProcessorDebugMode\n    {\n        /// <summary>\n        /// Enables effect debugging when built with Debug profile.\n        /// </summary>\n        Auto = 0,\n\n        /// <summary>\n        /// Enables effect debugging for all profiles. Will produce unoptimized shaders.\n        /// </summary>\n        Debug = 1,\n\n        /// <summary>\n        /// Disables debugging for all profiles, produce optimized shaders.\n        /// </summary>\n        Optimize = 2,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Processors/MojoEffectProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing Microsoft.Xna.Framework.Content.Pipeline.Graphics;\nusing Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler;\nusing Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Processes a string representation to a platform-specific compiled effect.\n    /// </summary>\n    [ContentProcessor(DisplayName = \"Effect (MojoShader) - KNI\")]\n    public class MojoEffectProcessor : ContentProcessor<EffectContent, CompiledEffectContent>\n    {\n        private EffectProcessorDebugMode _debugMode;\n        private string _defines;\n\n        /// <summary>\n        /// The debug mode for compiling effects.\n        /// </summary>\n        /// <value>The debug mode to use when compiling effects.</value>\n        public virtual EffectProcessorDebugMode DebugMode \n        {\n            get { return _debugMode; }\n            set { _debugMode = value; }\n        }\n\n        /// <summary>\n        /// Define assignments for the effect.\n        /// </summary>\n        /// <value>A list of define assignments delimited by semicolons.</value>\n        public virtual string Defines\n        {\n            get { return _defines; }\n            set { _defines = value; }\n        }\n        \n\n        /// <summary>\n        /// Initializes a new instance of MojoEffectProcessor.\n        /// </summary>\n        public MojoEffectProcessor()\n        {\n        }\n\n        /// <summary>\n        /// Processes the string representation of the specified effect into a platform-specific binary format using the specified context.\n        /// </summary>\n        /// <param name=\"input\">The effect string to be processed.</param>\n        /// <param name=\"context\">Context for the specified processor.</param>\n        /// <returns>A platform-specific compiled binary effect.</returns>\n        public override CompiledEffectContent Process(EffectContent input, ContentProcessorContext context)\n        {\n            if (DebugMode == EffectProcessorDebugMode.Auto)\n            {\n                if (String.Equals(context.BuildConfiguration, \"Debug\", StringComparison.OrdinalIgnoreCase))\n                    DebugMode = EffectProcessorDebugMode.Debug;\n            }\n\n            List<GraphicsBackend> backends = context.Parameters.GetValue<List<GraphicsBackend>>(\"_GraphicsBackendList\", null);\n            if (backends == null)\n            {\n                backends = new List<GraphicsBackend>();\n                GraphicsBackend backend = MojoEffectProcessor.BackendFromPlatform(context.TargetPlatform);\n                backends.Add(backend);\n            }\n\n            // replace any WebGL backend with GLES, and remove duplicates.\n            backends = backends.Select( (backend) => (backend == GraphicsBackend.WebGL) ? GraphicsBackend.GLES : backend)\n                               .Distinct()\n                               .ToList();\n\n            // compile effect\n            Dictionary<GraphicsBackend, EffectObject> effectObjects = new Dictionary<GraphicsBackend, EffectObject>();\n            Dictionary<GraphicsBackend, ShaderProfileType> shaderProfileTypes = new Dictionary<GraphicsBackend, ShaderProfileType>();\n            for (int backendIdx = 0; backendIdx < backends.Count; backendIdx++)\n            {\n                GraphicsBackend backend = backends[backendIdx];\n\n                ShaderProfile shaderProfile = MojoEffectProcessor.ShaderProfileFromBackend(backend);\n                if (shaderProfile == null)\n                    throw new InvalidContentException(string.Format(\"{0} effects are not supported.\", backend), input.Identity);\n\n                try\n                {\n                    string fullFilePath = Path.GetFullPath(input.Identity.SourceFilename);\n\n                    // Preprocess the FX file expanding includes and macros.\n                    string effectCode = Preprocess(input, context, backend, shaderProfile, fullFilePath);\n\n                    EffectObject effectObject = ProcessTechniques(input, context, backend, shaderProfile, fullFilePath, effectCode);\n\n                    effectObjects[backend] = effectObject;\n                    shaderProfileTypes[backend] = shaderProfile.ProfileType;\n                }\n                catch (InvalidContentException)\n                {\n                    throw;\n                }\n                catch (Exception ex)\n                {\n                    // TODO: Extract good line numbers from fx parser!\n                    throw new InvalidContentException(ex.Message, input.Identity, ex);\n                }\n            }\n\n            Dictionary<GraphicsBackend, MemoryStream> fxStreams = new Dictionary<GraphicsBackend, MemoryStream>();\n            for (int backendIdx = 0; backendIdx < backends.Count; backendIdx++)\n            {\n                GraphicsBackend backend = backends[backendIdx];\n                EffectObject effectObject = effectObjects[backend];\n\n                MemoryStream fxStream = new MemoryStream();\n                KNIFXWriter11 fxWriter = new KNIFXWriter11(fxStream);\n                {\n                    bool integersAsFloats = (shaderProfileTypes[backend] == ShaderProfileType.OpenGL_Mojo);\n                    fxWriter.WriteEffect(effectObject, integersAsFloats);\n                }\n                fxStreams[backend] = fxStream;\n            }\n\n            // Write out the effect to a runtime format.\n            try\n            {\n                using (MemoryStream stream = new MemoryStream())\n                using (BinaryWriter writer = new BinaryWriter(stream))\n                {\n                    // Write a very simple header for identification and versioning.\n                    writer.Write(KNIFXWriter11.KNIFXSignature.ToCharArray());\n                    writer.Write((short)KNIFXWriter11.Version);\n                    writer.Write((short)0); // reserved\n\n                    // write fx Directory\n                    writer.Write((short)backends.Count);\n                    int HeaderSize = (int)writer.BaseStream.Position;\n                    const int EntrySize = 10;\n                    int fxOffset = HeaderSize + (backends.Count * EntrySize);\n                    for (int backendIdx = 0; backendIdx < backends.Count; backendIdx++)\n                    {\n                        GraphicsBackend backend = backends[backendIdx];\n                        MemoryStream fxStream = fxStreams[backend];\n                        {\n                            int effectLength = (int)fxStream.Length;\n\n                            // Write the GraphicsBackend, so we can easily detect the correct shader type.\n                            writer.Write((short)backend);\n                            // Calculate a hash code from memory stream and write it to the header.\n                            int effectKey = HashHelper.ComputeHash(fxStream);\n                            writer.Write((Int32)effectKey);\n                            // write fxOffset\n                            writer.Write((Int32)fxOffset);\n                            fxOffset += (4 + effectLength);\n                        }\n                    }\n\n                    // write fx streams\n                    for (int backendIdx = 0; backendIdx < backends.Count; backendIdx++)\n                    {\n                        GraphicsBackend backend = backends[backendIdx];\n                        using (MemoryStream fxStream = fxStreams[backend])\n                        {\n                            int effectLength = (int)fxStream.Length;\n\n                            // write the length of the memory stream.\n                            writer.Write((Int32)effectLength);\n                            //write content from memory stream to final stream.\n                            fxStream.WriteTo(writer.BaseStream);\n                        }\n                    }\n\n                    byte[] effectBytecode = stream.ToArray();\n                    return new CompiledEffectContent(effectBytecode);\n                }\n            }\n            catch (Exception ex)\n            {\n                throw new InvalidContentException(\"Failed to serialize the effect!\", input.Identity, ex);\n            }\n        }\n\n        /// <summary>\n        /// Returns the correct GraphicsBackend for the named platform or\n        /// null if no supporting profile is found.\n        /// </summary>\n        public static GraphicsBackend BackendFromPlatform(TargetPlatform platform)\n        {\n            switch (platform)\n            {\n                case TargetPlatform.Windows:\n                case TargetPlatform.WindowsStoreApp:\n                    return GraphicsBackend.DirectX11;\n\n                case TargetPlatform.DesktopGL:\n                case TargetPlatform.MacOSX:\n                    return GraphicsBackend.OpenGL;\n\n                case TargetPlatform.iOS:\n                case TargetPlatform.Android:\n                case TargetPlatform.RaspberryPi:\n                    return GraphicsBackend.GLES;\n\n                case TargetPlatform.BlazorGL:\n                    return GraphicsBackend.WebGL;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        /// <summary>\n        /// Returns the correct profile for the named GraphicsBackend or\n        /// null if no supporting profile is found.\n        /// </summary>\n        public static ShaderProfile ShaderProfileFromBackend(GraphicsBackend backend)\n        {\n            switch (backend)\n            {\n                case GraphicsBackend.DirectX11:\n                    return ShaderProfile.DirectX_11;\n\n                case GraphicsBackend.OpenGL:\n                case GraphicsBackend.GLES:\n                case GraphicsBackend.WebGL:\n                    return ShaderProfile.OpenGL_Mojo;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        // Pre-process the file,\n        // resolving all #includes and macros.\n        private string Preprocess(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderProfile shaderProfile, string fullFilePath)\n        {\n            Preprocessor pp = new Preprocessor(input, context, fullFilePath);\n\n            pp.AddMacro(\"__KNIFX__\", \"1\");\n\n            // If we're building shaders for debug set __DEBUG__ flag too.\n            if (DebugMode == EffectProcessorDebugMode.Debug)\n                pp.AddMacro(\"__DEBUG__\", \"1\");\n\n            foreach (KeyValuePair<string, string> macro in shaderProfile.GetMacros(backend))\n                pp.AddMacro(macro.Key, macro.Value);\n\n            if (!string.IsNullOrEmpty(Defines))\n            {\n                string[] defines = Defines.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);\n                foreach (string define in defines)\n                {\n                    string name = define;\n                    string value = \"1\";\n                    if (define.Contains(\"=\"))\n                    {\n                        string[] parts = define.Split('=');\n\n                        if (parts.Length > 0)\n                            name = parts[0].Trim();\n\n                        if (parts.Length > 1)\n                            value = parts[1].Trim();\n                    }\n\n                    pp.AddMacro(name, value);\n                }\n            }\n\n            string effectCode = pp.Preprocess();\n\n            return effectCode;\n        }\n\n\n        private EffectObject ProcessTechniques(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderProfile shaderProfile, string fullFilePath, string effectCode)\n        {\n            // Parse the resulting file for techniques and passes.\n            ParseTree tree = new Parser(new Scanner()).Parse(effectCode, fullFilePath);\n            if (tree.Errors.Count > 0)\n            {\n                string errors = String.Empty;\n                foreach (ParseError error in tree.Errors)\n                {\n\n                    errors += string.Format(\"{0}({1},{2}) : {3}\\r\\n\", error.File, error.Line, error.Column, error.Message);\n                }\n\n                throw new InvalidContentException(errors, input.Identity);\n            }\n\n            // Evaluate the results of the parse tree.\n            ShaderInfo shaderInfo = tree.Eval() as ShaderInfo;\n\n            // Remove the samplers and techniques so that the shader compiler\n            // gets a clean file without any FX file syntax in it.\n            string cleanFile = effectCode;\n            WhitespaceNodes(TokenType.Technique_Declaration, tree.Nodes, ref cleanFile);\n            WhitespaceNodes(TokenType.Sampler_Declaration_States, tree.Nodes, ref cleanFile);\n\n\n            // Remove empty techniques.\n            for (int i = 0; i < shaderInfo.Techniques.Count; i++)\n            {\n                TechniqueInfo tech = shaderInfo.Techniques[i];\n                if (tech.Passes.Count <= 0)\n                {\n                    shaderInfo.Techniques.RemoveAt(i);\n                    i--;\n                }\n            }\n\n            // We must have at least one technique.\n            if (shaderInfo.Techniques.Count <= 0)\n                throw new InvalidContentException(\"The effect must contain at least one technique and pass!\",\n                    input.Identity);\n\n\n            // Create the effect object.\n            EffectObject effectObject = null;\n            string shaderErrorsAndWarnings = String.Empty;\n            try\n            {\n                effectObject = MojoEffectProcessor.CompileEffect(input, context, backend, shaderProfile, shaderInfo, fullFilePath, cleanFile, this.DebugMode, out shaderErrorsAndWarnings);\n            }\n            catch (ShaderCompilerException)\n            {\n                // This will log any warnings and errors and throw.\n                ProcessErrorsAndWarnings(true, shaderErrorsAndWarnings, input, context);\n            }\n\n            // Process any warning messages that the shader compiler might have produced.\n            ProcessErrorsAndWarnings(false, shaderErrorsAndWarnings, input, context);\n\n            return effectObject;\n        }\n\n        private static void WhitespaceNodes(TokenType type, List<ParseNode> nodes, ref string sourceFile)\n        {\n            for (int i = 0; i < nodes.Count; i++)\n            {\n                ParseNode n = nodes[i];\n                if (n.Token.Type != type)\n                {\n                    WhitespaceNodes(type, n.Nodes, ref sourceFile);\n                    continue;\n                }\n\n                // Get the full content of this node.\n                int start = n.Token.StartPos;\n                int end = n.Token.EndPos;\n                int length = end - n.Token.StartPos;\n                string content = sourceFile.Substring(start, length);\n\n                // Replace the content of this node with whitespace.\n                for (int c = 0; c < length; c++)\n                {\n                    if (!char.IsWhiteSpace(content[c]))\n                        content = content.Replace(content[c], ' ');\n                }\n\n                // Add the whitespace back to the source file.\n                string newfile = sourceFile.Substring(0, start);\n                newfile += content;\n                newfile += sourceFile.Substring(end);\n                sourceFile = newfile;\n            }\n        }\n\n        private static EffectObject CompileEffect(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderProfile shaderProfile, ShaderInfo shaderInfo, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, out string errorsAndWarnings)\n        {\n            errorsAndWarnings = string.Empty;\n\n            EffectObject effect = new EffectObject();\n            // These are filled out as we process stuff.\n            effect.ConstantBuffers = new List<ConstantBufferData>();\n            effect.Shaders = new List<ShaderData>();\n\n            // Go thru the techniques and that will find all the \n            // shaders and constant buffers.\n            effect.Techniques = new EffectObject.EffectTechniqueContent[shaderInfo.Techniques.Count];\n            for (int t = 0; t < shaderInfo.Techniques.Count; t++)\n            {\n                TechniqueInfo tinfo = shaderInfo.Techniques[t];\n\n                EffectObject.EffectTechniqueContent technique = new EffectObject.EffectTechniqueContent();\n                technique.name = tinfo.name;\n                technique.pass_count = (uint)tinfo.Passes.Count;\n                technique.pass_handles = new EffectObject.EffectPassContent[tinfo.Passes.Count];\n\n                for (int p = 0; p < tinfo.Passes.Count; p++)\n                {\n                    PassInfo pinfo = tinfo.Passes[p];\n\n                    EffectObject.EffectPassContent pass = new EffectObject.EffectPassContent();\n                    pass.name = pinfo.name ?? string.Empty;\n\n                    pass.blendState = pinfo.blendState;\n                    pass.depthStencilState = pinfo.depthStencilState;\n                    pass.rasterizerState = pinfo.rasterizerState;\n\n                    pass.state_count = 0;\n                    EffectObject.EffectStateContent[] tempstate = new EffectObject.EffectStateContent[3];\n\n                    if (!string.IsNullOrEmpty(pinfo.psFunction))\n                    {\n                        ShaderVersion psShaderVersion = ShaderVersion.ParsePixelShaderModel(pinfo.psModel);\n                        shaderProfile.ValidateShaderModels(pinfo, pinfo.psFunction, pinfo.psModel, ShaderStage.Pixel, psShaderVersion);\n\n                        pass.state_count += 1;\n                        tempstate[pass.state_count - 1] = MojoEffectProcessor.CreateShader(input, context, backend, effect, shaderInfo, shaderProfile, fullFilePath, fileContent, debugMode, pinfo.psFunction, pinfo.psModel, ShaderStage.Pixel, psShaderVersion, ref errorsAndWarnings);\n                    }\n\n                    if (!string.IsNullOrEmpty(pinfo.vsFunction))\n                    {\n                        ShaderVersion vsShaderVersion = ShaderVersion.ParseVertexShaderModel(pinfo.vsModel);\n                        shaderProfile.ValidateShaderModels(pinfo, pinfo.vsFunction, pinfo.vsModel, ShaderStage.Pixel, vsShaderVersion);\n\n                        pass.state_count += 1;\n                        tempstate[pass.state_count - 1] = MojoEffectProcessor.CreateShader(input, context, backend, effect, shaderInfo, shaderProfile, fullFilePath, fileContent, debugMode, pinfo.vsFunction, pinfo.vsModel, ShaderStage.Vertex, vsShaderVersion, ref errorsAndWarnings);\n                    }\n\n                    if (!string.IsNullOrEmpty(pinfo.csFunction))\n                    {\n                        ShaderVersion csShaderVersion = ShaderVersion.ParseComputeShaderModel(pinfo.csModel);\n                        shaderProfile.ValidateShaderModels(pinfo, pinfo.csFunction, pinfo.csModel, ShaderStage.Compute, csShaderVersion);\n\n                        pass.state_count += 1;\n                        tempstate[pass.state_count - 1] = MojoEffectProcessor.CreateShader(input, context, backend, effect, shaderInfo, shaderProfile, fullFilePath, fileContent, debugMode, pinfo.csFunction, pinfo.csModel, ShaderStage.Compute, csShaderVersion, ref errorsAndWarnings);\n                    }\n\n                    pass.states = new EffectObject.EffectStateContent[pass.state_count];\n                    for (int s = 0; s < pass.state_count; s++)\n                        pass.states[s] = tempstate[s];\n\n                    technique.pass_handles[p] = pass;\n                }\n\n                effect.Techniques[t] = technique;\n            }\n\n            // Make the list of parameters by combining all the\n            // constant buffers ignoring the buffer offsets.\n            List<EffectObject.EffectParameterContent> parameters = new List<EffectObject.EffectParameterContent>();\n            for (int c = 0; c < effect.ConstantBuffers.Count; c++)\n            {\n                ConstantBufferData cb = effect.ConstantBuffers[c];\n\n                for (int i = 0; i < cb.Parameters.Count; i++)\n                {\n                    EffectObject.EffectParameterContent param = cb.Parameters[i];\n\n                    int match = parameters.FindIndex(e => e.name == param.name);\n                    if (match == -1)\n                    {\n                        cb.ParameterIndex.Add(parameters.Count);\n                        parameters.Add(param);\n                    }\n                    else\n                    {\n                        // TODO: Make sure the type and size of \n                        // the parameter match up!\n                        cb.ParameterIndex.Add(match);\n                    }\n                }\n            }\n\n            // Add the texture parameters from the samplers.\n            foreach (ShaderData shader in effect.Shaders)\n            {\n                for (int s = 0; s < shader._samplers.Length; s++)\n                {\n                    SamplerInfo samplerInfo = shader._samplers[s];\n\n                    int textureParameterIdx = parameters.FindIndex((paramContent) => paramContent.name == samplerInfo.textureName);\n                    if (textureParameterIdx != -1)\n                    {\n                        // TODO: Make sure the type and size of\n                        // the parameter match up!\n                        shader._samplers[s].textureParameter = textureParameterIdx;\n                    }\n                    else if (samplerInfo.textureName != null)\n                    {\n                        EffectObject.EffectParameterContent param = new EffectObject.EffectParameterContent();\n                        param.class_ = EffectObject.PARAMETER_CLASS.OBJECT;\n                        param.name = samplerInfo.textureName;\n                        param.semantic = string.Empty;\n                        param.type = SamplerTypeToParameterType(samplerInfo.type);\n                        parameters.Add(param);\n\n                        // Store the index for runtime lookup.\n                        textureParameterIdx = parameters.Count-1;\n                        shader._samplers[s].textureParameter = textureParameterIdx;\n                    }\n                }\n            }\n\n            // TODO: Annotations are part of the .FX format and\n            // not a part of shaders... we need to implement them\n            // in our fx parser if we want them back.\n\n            effect.Parameters = parameters.ToArray();\n\n            return effect;\n        }\n\n        private static EffectObject.PARAMETER_TYPE SamplerTypeToParameterType(MojoShader.SamplerType samplerType)\n        {\n            switch (samplerType)\n            {\n                case MojoShader.SamplerType.SAMPLER_1D:\n                    return EffectObject.PARAMETER_TYPE.TEXTURE1D;\n\n                case MojoShader.SamplerType.SAMPLER_2D:\n                    return EffectObject.PARAMETER_TYPE.TEXTURE2D;\n\n                case MojoShader.SamplerType.SAMPLER_VOLUME:\n                    return EffectObject.PARAMETER_TYPE.TEXTURE3D;\n\n                case MojoShader.SamplerType.SAMPLER_CUBE:\n                    return EffectObject.PARAMETER_TYPE.TEXTURECUBE;\n\n                default:\n                    throw new InvalidOperationException();\n            }\n        }\n\n        internal static EffectObject.EffectStateContent CreateShader(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, EffectObject effect, ShaderInfo shaderInfo, ShaderProfile shaderProfile, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, ShaderStage shaderStage, ShaderVersion shaderVersion, ref string errorsAndWarnings)\n        {\n            // Check if this shader has already been created.\n\n            // The index of the shader in the shared list.\n            int sharedIndex = effect.Shaders.FindIndex(shader => shader.ShaderFunctionName == shaderFunction && shader.ShaderProfile == shaderProfileName);\n            if (sharedIndex == -1)\n            {\n                // Compile and create the shader.\n                ShaderData shaderData = shaderProfile.CreateShader(input, context, backend, effect, shaderInfo, fullFilePath, fileContent, debugMode, shaderFunction, shaderProfileName, shaderVersion, shaderStage, ref errorsAndWarnings);\n                shaderData.ShaderFunctionName = shaderFunction;\n                shaderData.ShaderProfile = shaderProfileName;\n                shaderData.ShaderVersion = shaderVersion;\n\n                sharedIndex = effect.Shaders.Count;\n                effect.Shaders.Add(shaderData);\n            }\n\n            EffectObject.EffectStateContent state = new EffectObject.EffectStateContent();\n            state.index = 0;\n            state.type = EffectObject.STATE_TYPE.CONSTANT;\n            state.parameter = new EffectObject.EffectParameterContent();\n            state.parameter.name = string.Empty;\n            state.parameter.semantic = string.Empty;\n            state.parameter.class_ = EffectObject.PARAMETER_CLASS.OBJECT;\n            state.parameter.rows = 0;\n            state.parameter.columns = 0;\n            state.parameter.columnsActual = 0;\n            state.parameter.data = sharedIndex;\n            switch (shaderStage)\n            {\n                case ShaderStage.Vertex:\n                    state.operation = (uint)146;\n                    state.parameter.type = EffectObject.PARAMETER_TYPE.VERTEXSHADER;\n                    break;\n                case ShaderStage.Pixel:\n                    state.operation = (uint)147;\n                    state.parameter.type = EffectObject.PARAMETER_TYPE.PIXELSHADER;\n                    break;\n                case ShaderStage.Compute:\n                    state.operation = (uint)148;\n                    state.parameter.type = EffectObject.PARAMETER_TYPE.COMPUTESHADER;\n                    break;\n                default:\n                    throw new InvalidOperationException(\"Unsupported shader stage: \" + shaderStage);\n            }\n\n            return state;\n        }\n\n        private static void ProcessErrorsAndWarnings(bool buildFailed, string shaderErrorsAndWarnings, EffectContent input, ContentProcessorContext context)\n        {\n            // Split the errors and warnings into individual lines.\n            string[] errorsAndWarningArray = shaderErrorsAndWarnings.Split(new[] { \"\\n\", \"\\r\", Environment.NewLine },\n                                                                      StringSplitOptions.RemoveEmptyEntries);\n\n            Regex errorOrWarning = new Regex(@\"(?<Filename>.*)\\((?<LineAndColumn>[0-9]*(,([0-9]+)(-[0-9]+)?)?)\\)\\s*:\\s*(?<ErrorType>error|warning)\\s*(?<ErrorCode>[A-Z0-9]*)\\s*:\\s*(?<Message>.*)\", RegexOptions.Compiled);\n            ContentIdentity identity = null;\n            string allErrorsAndWarnings = string.Empty;\n\n            // Process all the lines.\n            for (int i = 0; i < errorsAndWarningArray.Length; i++)\n            {\n                Match match = errorOrWarning.Match(errorsAndWarningArray[i]);\n                if (!match.Success) // || match.Groups.Count != 8)\n                {\n                    // Just log anything we don't recognize as a warning.\n                    context.Logger.LogWarning(string.Empty, input.Identity, errorsAndWarningArray[i]);\n\n                    continue;\n                }\n\n                string fileName = match.Groups[\"Filename\"].Value;\n                string lineAndColumn = match.Groups[\"LineAndColumn\"].Value;\n                string errorType = match.Groups[\"ErrorType\"].Value;\n                string errorCode = match.Groups[\"ErrorCode\"].Value;\n                string message = match.Groups[\"Message\"].Value;\n\n                // Try to ensure a good file name for the error message.\n                if (string.IsNullOrEmpty(fileName))\n                    fileName = input.Identity.SourceFilename;\n                else if (!File.Exists(fileName))\n                {\n                    string folder = Path.GetDirectoryName(input.Identity.SourceFilename);\n                    fileName = Path.Combine(folder, fileName);\n                }\n\n                identity = new ContentIdentity(fileName, input.Identity.SourceTool, lineAndColumn);\n                string errorCodeAndMessage = string.Format(\"{0}:{1}\", errorCode, message);\n\n                switch (errorType)\n                {\n                    case \"warning\":\n                        context.Logger.LogWarning(string.Empty, identity, errorCodeAndMessage);\n                        break;\n                    case \"error\":\n                        throw new InvalidContentException(errorCodeAndMessage, identity);\n                    default:\n                        // log anything we didn't recognize as a warning.\n                        if (allErrorsAndWarnings != string.Empty)\n                            context.Logger.LogWarning(string.Empty, input.Identity, errorsAndWarningArray[i]);\n                        break;\n                }\n            }\n\n            if (buildFailed)\n                throw new InvalidContentException(allErrorsAndWarnings, identity ?? input.Identity);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Properties/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n\n[assembly:InternalsVisibleTo(\"Kni.Tests\")]\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"Mojo Debug DirectX Effects\": {\n      \"commandName\": \"Executable\",\n      \"executablePath\": \"X:\\\\kniEngine\\\\kni\\\\Tools\\\\MonoGame.Content.Builder\\\\bin\\\\Windows\\\\AnyCPU\\\\Debug\\\\net8.0-windows\\\\MGCB.exe\",\n      \"commandLineArgs\": \"/@:DirectX.mgcb /Rebuild /SingleThread\",\n      \"workingDirectory\": \"X:\\\\kniEngine\\\\kni\\\\\\\\Tests\\\\Assets\\\\Effects\\\\\"\n    },\n    \"Mojo Debug OpenGL Effects\": {\n      \"commandName\": \"Executable\",\n      \"executablePath\": \"X:\\\\kniEngine\\\\kni\\\\Tools\\\\MonoGame.Content.Builder\\\\bin\\\\Windows\\\\AnyCPU\\\\Debug\\\\net8.0-windows\\\\MGCB.exe\",\n      \"commandLineArgs\": \"/@:OpenGL.mgcb /Rebuild /SingleThread\",\n      \"workingDirectory\": \"X:\\\\kniEngine\\\\kni\\\\Tests\\\\Assets\\\\\\\\Effects\\\\\"\n    }\n  }\n}"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <AssemblyName>Xna.Framework.Content.Pipeline.Graphics.MojoProcessor</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Content.Pipeline.Graphics</RootNamespace>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <DefineConstants></DefineConstants>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n  </PropertyGroup>\n\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'net40' \">\n    <Reference Include=\"CppNet\">\n      <HintPath>..\\..\\ThirdParty\\CppNet\\net40\\CppNet.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'net8.0' \">\n    <Reference Include=\"CppNet\">\n      <HintPath>..\\..\\ThirdParty\\CppNet\\net40\\CppNet.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX\" />\n    <PackageReference Version=\"4.2.0\" Include=\"SharpDX.D3DCompiler\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Processors\\EffectProcessor.cs\" />\n    <Compile Include=\"Processors\\EffectProcessorDebugMode.cs\" />\n    <Compile Include=\"Processors\\MojoEffectProcessor.cs\" />\n    <Compile Include=\"EffectCompiler\\ConstantBufferData.cs\" />\n    <Compile Include=\"EffectCompiler\\EffectObject.cs\" />\n    <Compile Include=\"EffectCompiler\\GLSLBytecode.cs\" />\n    <Compile Include=\"EffectCompiler\\KNIFXWriter11.cs\" />\n    <Compile Include=\"EffectCompiler\\MarshalHelper.cs\" />\n    <Compile Include=\"EffectCompiler\\SamplerInfo.cs\" />\n    <Compile Include=\"EffectCompiler\\ShaderCompilerException.cs\" />\n    <Compile Include=\"EffectCompiler\\ShaderData.cs\" />\n    <Compile Include=\"EffectCompiler\\MojoShader.cs\" />\n    <Compile Include=\"EffectCompiler\\Preprocessor.cs\" />\n    <Compile Include=\"EffectCompiler\\ShaderProfile.cs\" />\n    <Compile Include=\"EffectCompiler\\ShaderProfileDX11.cs\" />\n    <Compile Include=\"EffectCompiler\\ShaderProfileGL.cs\" />\n    <Compile Include=\"EffectCompiler\\ShaderProfileType.cs\" />\n    <Compile Include=\"EffectCompiler\\ShaderStage.cs\" />\n    <Compile Include=\"EffectCompiler\\ShaderVersion.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"ExternalTool.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\Platforms\\Utilities\\CurrentPlatform.cs\">\n      <Link>Utilities\\CurrentPlatform.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\MojoShader\\Windows\\libmojoshader_64.dll\">\n      <Link>libmojoshader_64.dll</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509F44-3566-4B79-BB47-C7C6E2AA2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content.Pipeline.Graphics\\Xna.Framework.Content.Pipeline.Graphics.csproj\">\n      <Project>{7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/ExternalTool.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Threading;\nusing Microsoft.Xna.Platform.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Helper to run an external tool installed in the system. Useful for when\n    /// we don't want to package the tool ourselves (ffmpeg) or it's provided\n    /// by a third party (console manufacturer).\n    /// </summary>\n    internal class ExternalTool\n    {\n        public static int Run(string command, string arguments)\n        {\n            string stdout, stderr;\n            var result = Run(command, arguments, out stdout, out stderr);\n            if (result < 0)\n                throw new Exception(string.Format(\"{0} returned exit code {1}\", command, result));\n\n            return result;\n        }\n\n        public static int Run(string command, string arguments, out string stdout, out string stderr, string stdin = null)\n        {\n            // This particular case is likely to be the most common and thus\n            // warrants its own specific error message rather than falling\n            // back to a general exception from Process.Start()\n            var fullPath = FindCommand(command);\n            if (string.IsNullOrEmpty(fullPath))\n                throw new Exception(string.Format(\"Couldn't locate external tool '{0}'.\", command));\n\n            // We can't reference ref or out parameters from within\n            // lambdas (for the thread functions), so we have to store\n            // the data in a temporary variable and then assign these\n            // variables to the out parameters.\n            var stdoutTemp = string.Empty;\n            var stderrTemp = string.Empty;\n\n            var processInfo = new ProcessStartInfo\n            {\n                Arguments = arguments,\n                CreateNoWindow = true,\n                WindowStyle = ProcessWindowStyle.Hidden,\n                ErrorDialog = false,\n                FileName = fullPath,\n                UseShellExecute = false,\n                RedirectStandardOutput = true,\n                RedirectStandardError = true,\n                RedirectStandardInput = true,\n            };\n\n            EnsureExecutable(fullPath);\n\n            using (var process = new Process())\n            {\n                process.StartInfo = processInfo;\n\n                process.Start();\n\n                // We have to run these in threads, because using ReadToEnd\n                // on one stream can deadlock if the other stream's buffer is\n                // full.\n                var stdoutThread = new Thread(new ThreadStart(() =>\n                {\n                    var memory = new MemoryStream();\n                    process.StandardOutput.BaseStream.CopyTo(memory);\n                    var bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    stdoutTemp = System.Text.Encoding.ASCII.GetString(bytes);\n                }));\n                var stderrThread = new Thread(new ThreadStart(() =>\n                {\n                    var memory = new MemoryStream();\n                    process.StandardError.BaseStream.CopyTo(memory);\n                    var bytes = new byte[memory.Position];\n                    memory.Seek(0, SeekOrigin.Begin);\n                    memory.Read(bytes, 0, bytes.Length);\n                    stderrTemp = System.Text.Encoding.ASCII.GetString(bytes);\n                }));\n\n                stdoutThread.Start();\n                stderrThread.Start();\n\n                if (stdin != null)\n                {\n                    process.StandardInput.Write(System.Text.Encoding.ASCII.GetBytes(stdin));\n                }\n\n                // Make sure interactive prompts don't block.\n                process.StandardInput.Close();\n\n                process.WaitForExit();\n\n                stdoutThread.Join();\n                stderrThread.Join();\n\n                stdout = stdoutTemp;\n                stderr = stderrTemp;\n\n                return process.ExitCode;\n            }\n        }\n\n        /// <summary>\n        /// Returns the fully-qualified path for a command, searching the system path if necessary.\n        /// </summary>\n        /// <remarks>\n        /// It's apparently necessary to use the full path when running on some systems.\n        /// </remarks>\n        private static string FindCommand(string command)\n        {\n            // Expand any environment variables.\n            command = Environment.ExpandEnvironmentVariables(command);\n\n            // If we have a full path just pass it through.\n            if (File.Exists(command))\n                return command;\n\n            // For Linux check specific subfolder\n            var lincom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"linux\", command);\n            if (CurrentPlatform.OS == OS.Linux && File.Exists(lincom))\n                return lincom;\n\n            // For Mac check specific subfolder\n            var maccom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"osx\", command);\n            if (CurrentPlatform.OS == OS.MacOSX && File.Exists(maccom))\n                return maccom;\n\n            // We don't have a full path, so try running through the system path to find it.\n            var paths = AppDomain.CurrentDomain.BaseDirectory +\n                Path.PathSeparator +\n                Environment.GetEnvironmentVariable(\"PATH\");\n\n            var justTheName = Path.GetFileName(command);\n            foreach (var path in paths.Split(Path.PathSeparator))\n            {\n                var fullName = Path.Combine(path, justTheName);\n                if (File.Exists(fullName))\n                    return fullName;\n\n                if (CurrentPlatform.OS == OS.Windows)\n                {\n                    var fullExeName = string.Concat(fullName, \".exe\");\n                    if (File.Exists(fullExeName))\n                        return fullExeName;\n                }\n            }\n\n            return null;\n        }\n\n        /// <summary>   \n        /// Ensures the specified executable has the executable bit set.  If the    \n        /// executable doesn't have the executable bit set on Linux or Mac OS, then \n        /// Mono will refuse to execute it. \n        /// </summary>  \n        /// <param name=\"path\">The full path to the executable.</param> \n        private static void EnsureExecutable(string path)\n        {\n            if (!path.StartsWith(\"/home\") && !path.StartsWith(\"/Users\"))\n                return;\n\n            try\n            {\n                var p = Process.Start(\"chmod\", \"u+x \\\"\" + path + \"\\\"\");\n                p.WaitForExit();\n            }\n            catch\n            {\n                // This platform may not have chmod in the path, in which case we can't \n                // do anything reasonable here. \n            }\n        }\n\n        /// <summary>\n        /// Safely deletes the file if it exists.\n        /// </summary>\n        /// <param name=\"filePath\">The path to the file to delete.</param>\n        public static void DeleteFile(string filePath)\n        {\n            try\n            {\n                File.Delete(filePath);\n            }\n            catch (Exception)\n            {                    \n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/H264Importer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    [ContentImporter(\".mp4\", DisplayName = \"H.264 Video - KNI\", DefaultProcessor = \"VideoProcessor\")]\n    public class H264Importer : ContentImporter<VideoContent>\n    {\n        public H264Importer()\n        {\n        }\n\n        public override VideoContent Import(string filename, ContentImporterContext context)\n        {\n            var content = new VideoContent(filename);\n            return content;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/Processors/SongProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Audio;\nusing Microsoft.Xna.Framework.Content.Pipeline.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// A custom song processor that processes an intermediate AudioContent type. This type encapsulates the source audio content, producing a Song type that can be used in the game.\n    /// </summary>\n    [ContentProcessor(DisplayName = \"Song - KNI\")]\n    public class SongProcessor : ContentProcessor<AudioContent, SongContent>\n    {\n        ConversionQuality _quality = ConversionQuality.Best;\n\n        /// <summary>\n        /// Gets or sets the target format quality of the audio content.\n        /// </summary>\n        /// <value>The ConversionQuality of this audio data.</value>\n        public ConversionQuality Quality \n        { \n            get { return _quality; } \n            set { _quality = value; } \n        }\n\n        /// <summary>\n        /// Initializes a new instance of SongProcessor.\n        /// </summary>\n        public SongProcessor()\n        {\n        }\n\n        /// <summary>\n        /// Builds the content for the source audio.\n        /// </summary>\n        /// <param name=\"input\">The audio content to build.</param>\n        /// <param name=\"context\">Context for the specified processor.</param>\n        /// <returns>The built audio.</returns>\n        public override SongContent Process(AudioContent input, ContentProcessorContext context)\n        {\n            // The xnb name is the basis for the final song filename.\n            string songFileName = context.OutputFilename;\n\n            // Convert and write out the song media file.\n            ConversionQuality quality = _quality;\n\n            ConversionFormat targetFormat;\n            switch (context.TargetPlatform)\n            {\n                case TargetPlatform.Windows:\n                case TargetPlatform.WindowsStoreApp:\n                    targetFormat = ConversionFormat.WindowsMedia;\n                    break;\n                case TargetPlatform.DesktopGL:\n                    targetFormat = ConversionFormat.Vorbis;\n                    break;\n                case TargetPlatform.BlazorGL:\n                    targetFormat = ConversionFormat.Mp3;\n                    break;\n                case TargetPlatform.Android:\n                    targetFormat = ConversionFormat.Mp3;\n                    break;\n                case TargetPlatform.iOS:\n                    targetFormat = ConversionFormat.Mp3;\n                    break;\n\n                default:\n                    targetFormat = ConversionFormat.Mp3;\n                    break;\n            }\n\n            // Get the song output path with the target format extension.\n            songFileName = Path.ChangeExtension(songFileName, SongProcessor.GetExtension(targetFormat));\n\n            // Make sure the output folder for the file exists.\n            Directory.CreateDirectory(Path.GetDirectoryName(songFileName));\n            input.ConvertFormat(targetFormat, quality, songFileName);\n\n            // Let the pipeline know about the song file so it can clean things up.\n            context.AddOutputFile(songFileName);\n\n            // Return the XNB song content.\n            string relativeMediaPath = PathHelper.GetRelativePath(Path.GetDirectoryName(context.OutputFilename) + Path.DirectorySeparatorChar, songFileName);\n            return new SongContent(relativeMediaPath, input.Duration);\n        }\n\n        /// <summary>\n        /// Gets the file extension for an audio format.\n        /// </summary>\n        /// <param name=\"format\">The conversion format</param>\n        /// <returns>The file extension for the given conversion format.</returns>\n        static public string GetExtension(ConversionFormat format)\n        {\n            switch (format)\n            {\n                case ConversionFormat.Adpcm:\n                case ConversionFormat.Pcm:\n                    return \"wav\";\n                case ConversionFormat.WindowsMedia:\n                    return \"wma\";\n                case ConversionFormat.Xma:\n                    return \"xma\";\n                case ConversionFormat.ImaAdpcm:\n                    return \"wav\";\n                case ConversionFormat.Aac:\n                    return \"m4a\";\n                case ConversionFormat.Vorbis:\n                    return \"ogg\";\n                case ConversionFormat.Mp3:\n                    return \"mp3\";\n\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(format), format, null);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/Processors/VideoProcessor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.ComponentModel;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content.Pipeline.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    [ContentProcessor(DisplayName = \"Video - KNI\")]\n    public class VideoProcessor : ContentProcessor<VideoContent, VideoContent>\n    {\n\n        [DefaultValue(typeof(VideoProcessorOutputFormat), \"Default\")]\n        public virtual VideoProcessorOutputFormat VideoFormat { get; set; }\n\n\n        public override VideoContent Process(VideoContent input, ContentProcessorContext context)\n        {\n            string relative = Path.GetDirectoryName(PathHelper.GetRelativePath(context.OutputDirectory, context.OutputFilename));\n            string relVideoPath = PathHelper.Normalize(Path.Combine(relative, Path.GetFileName(input.Filename)));\n            string absVideoPath = PathHelper.Normalize(Path.Combine(context.OutputDirectory, relVideoPath));\n\n            // Make sure the output folder for the video exists.\n            Directory.CreateDirectory(Path.GetDirectoryName(absVideoPath));\n\n            VideoProcessorOutputFormat videoFormat = VideoFormat;\n            if (videoFormat == VideoProcessorOutputFormat.NoChange)\n            {\n                // Copy the already encoded video file over\n                File.Copy(input.Filename, absVideoPath, true);\n                context.AddOutputFile(absVideoPath);\n            }\n            else\n            {\n                if (videoFormat == VideoProcessorOutputFormat.Default)\n                    videoFormat = VideoProcessor.GetDefaultOutputFormat(context.TargetPlatform);\n\n                string containerExt = VideoProcessor.GetExtension(videoFormat);\n                absVideoPath = Path.ChangeExtension(absVideoPath, containerExt);\n\n                input.ConvertFormat(absVideoPath);\n                context.AddOutputFile(absVideoPath);\n            }\n\n            // Fixup relative path\n            string relativeMediaPath = PathHelper.GetRelativePath(context.OutputFilename, absVideoPath);\n            input.Filename = relativeMediaPath;\n\n            return input;\n        }\n\n        public static VideoProcessorOutputFormat GetDefaultOutputFormat(TargetPlatform targetPlatform)\n        {\n            switch (targetPlatform)\n            {\n                case TargetPlatform.Windows:\n                case TargetPlatform.WindowsStoreApp:\n                    return VideoProcessorOutputFormat.WMV;\n                case TargetPlatform.iOS:\n                    return VideoProcessorOutputFormat.WebM;\n                case TargetPlatform.Android:\n                    return VideoProcessorOutputFormat.WebM;\n                case TargetPlatform.BlazorGL:\n                    return VideoProcessorOutputFormat.WebM;\n                case TargetPlatform.DesktopGL:\n                    return VideoProcessorOutputFormat.WebM;\n\n                default:\n                    return VideoProcessorOutputFormat.WebM;\n            }\n        }\n\n        public static string GetExtension(VideoProcessorOutputFormat videoFormat)\n        {\n            switch (videoFormat)\n            {\n                case VideoProcessorOutputFormat.WMV:\n                        return \".wmv\";\n                case VideoProcessorOutputFormat.MP4:\n                        return \".mp4\";\n                case VideoProcessorOutputFormat.WebM:\n                        return \".webm\";\n\n                default:\n                    throw new InvalidOperationException(\"Unsupported video format: \" + videoFormat);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/Processors/VideoProcessorOutputFormat.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    public enum VideoProcessorOutputFormat\n    {\n        Default  = 0,\n        NoChange = 1,\n        WMV      = 2,\n        MP4      = 3,\n        WebM     = 4,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/Properties/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/Serialization/Compiler/SongWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline.Processors;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class SongWriter : ContentTypeWriter<SongContent>\n    {\n        /// <summary>\n        /// Writes the value to the output.\n        /// </summary>\n        /// <param name=\"output\">The output writer object.</param>\n        /// <param name=\"value\">The value to write to the output.</param>\n        protected override void Write(ContentWriter output, SongContent value)\n        {\n            output.Write(value.fileName);\n            output.WriteObject((int)value.duration.TotalMilliseconds);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".SongReader\";\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string typeNamespace = \"Microsoft.Xna.Framework.Media\";\n            string typeName = \".Song\";\n            string typeAssembly = \", Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeType = typeNamespace + typeName + typeAssembly;\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/Serialization/Compiler/VideoWriter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler\n{\n    [ContentTypeWriter]\n    class VideoWriter : ContentTypeWriter<VideoContent>\n    {\n        protected override void Write(ContentWriter output, VideoContent value)\n        {\n            output.WriteObject<string>(value.Filename);\n            output.WriteObject<int>((int)value.Duration.TotalMilliseconds);\n            output.WriteObject<int>(value.Width);\n            output.WriteObject<int>(value.Height);\n            output.WriteObject<float>(value.FramesPerSecond);\n            output.WriteObject<int>((int)value.VideoSoundtrackType);\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeReader(TargetPlatform targetPlatform)\n        {\n            string readerNamespace = \"Microsoft.Xna.Framework.Content\";\n            string readerName = \".VideoReader\";\n            // From looking at XNA-produced XNBs, it appears built-in\n            // type readers don't need assembly qualification.\n            string readerAssembly = String.Empty;\n\n            string runtimeReader = readerNamespace + readerName + readerAssembly;\n            return runtimeReader;\n        }\n\n        /// <inheritdoc/>\n        public override string GetRuntimeType(TargetPlatform targetPlatform)\n        {\n            string typeNamespace = \"Microsoft.Xna.Framework.Media\";\n            string typeName = \".Video\";\n            string typeAssembly = \", Microsoft.Xna.Framework.Video, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553\";\n\n            string runtimeType = typeNamespace + typeName + typeAssembly;\n            return runtimeType;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/SongContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Processors\n{\n    /// <summary>\n    /// Represents a processed Song object.\n    /// </summary>\n    public sealed class SongContent\n    {\n        internal string fileName;\n        internal TimeSpan duration;\n\n        /// <summary>\n        /// Creates a new instance of the SongContent class\n        /// </summary>\n        /// <param name=\"fileName\">Filename of the song</param>\n        /// <param name=\"duration\">Duration of the song</param>\n        internal SongContent(string fileName, TimeSpan duration)\n        {\n            this.fileName = fileName;\n            this.duration = duration;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/Utilities/PathHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Content.Pipeline;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline.Utilities\n{\n    internal static class PathHelper\n    {\n        /// <summary>\n        /// The/universal/standard/directory/seperator.\n        /// </summary>\n        public const char DirectorySeparator = '/';\n\n        /// <summary>\n        /// Returns a path string normalized to the/universal/standard.\n        /// </summary>\n        public static string Normalize(string path)\n        {\n            return path.Replace('\\\\', '/');\n        }\n\n        /// <summary>\n        /// Returns a directory path string normalized to the/universal/standard\n        /// with a trailing seperator.\n        /// </summary>\n        public static string NormalizeDirectory(string path)\n        {\n            return path.Replace('\\\\', '/').TrimEnd('/') + '/';\n        }\n\n        /// <summary>\n        /// Returns a path string normalized to the\\Windows\\standard.\n        /// </summary>\n        public static string NormalizeWindows(string path)\n        {\n            return path.Replace('/', '\\\\');\n        }\n\n        /// <summary>\n        /// Returns a path relative to the base path.\n        /// </summary>\n        /// <param name=\"basePath\">The path to make relative to.  Must end with directory seperator.</param>\n        /// <param name=\"path\">The path to be made relative to the basePath.</param>\n        /// <returns>The relative path or the original string if it is not absolute or cannot be made relative.</returns>\n        public static string GetRelativePath(string basePath, string path)\n        {\n            Uri uri;\n            if (!Uri.TryCreate(path, UriKind.Absolute, out uri))\n                return path;\n\n            uri = new Uri(basePath).MakeRelativeUri(uri);\n            var str = Uri.UnescapeDataString(uri.ToString());\n\n            return Normalize(str);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/VideoContent.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Linq;\nusing System.Globalization;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides a base class for all video objects.\n    /// </summary>\n    public class VideoContent : ContentItem, IDisposable\n    {\n        private bool _disposed;\n        private int _bitsPerSecond;\n        private TimeSpan _duration;\n        private float _framesPerSecond;\n        private int _height;\n        private int _width;\n\n        /// <summary>\n        /// Gets the bit rate for this video.\n        /// </summary>\n        public int BitsPerSecond { get { return _bitsPerSecond; } }\n\n        /// <summary>\n        /// Gets the duration of this video.\n        /// </summary>\n        public TimeSpan Duration { get { return _duration; } }\n\n        /// <summary>\n        /// Gets or sets the file name for this video.\n        /// </summary>\n        [ContentSerializerAttribute]\n        public string Filename { get; set; }\n\n        /// <summary>\n        /// Gets the frame rate for this video.\n        /// </summary>\n        public float FramesPerSecond { get { return _framesPerSecond; } }\n\n        /// <summary>\n        /// Gets the height of this video.\n        /// </summary>\n        public int Height { get { return _height; } }\n\n        /// <summary>\n        /// Gets or sets the type of soundtrack accompanying the video.\n        /// </summary>\n        [ContentSerializerAttribute]\n        public VideoSoundtrackType VideoSoundtrackType { get; set; }\n\n        /// <summary>\n        /// Gets the width of this video.\n        /// </summary>\n        public int Width { get { return _width; } }\n\n        /// <summary>\n        /// Initializes a new copy of the VideoContent class for the specified video file.\n        /// </summary>\n        /// <param name=\"filename\">The file name of the video to import.</param>\n        public VideoContent(string filename)\n        {\n            Filename = filename;\n\n            VideoContent.ProbeFormat(filename, out _width, out _height, out _duration, out _bitsPerSecond, out _framesPerSecond);\n        }\n\n        private static void ProbeFormat(string sourceFile, out int width, out int height, out TimeSpan duration, out int bitsPerSecond, out float framesPerSecond)\n        {\n            // Set default values if information is not available.\n            width = 0;\n            height = 0;\n            duration = TimeSpan.Zero;\n            bitsPerSecond = 0;\n            framesPerSecond = 0.0f;\n\n            string stdout, stderr;\n            var result = ExternalTool.Run(\"ffprobe\",\n                string.Format(\"-i \\\"{0}\\\" -show_format -select_streams v -show_streams -print_format ini\", sourceFile), out stdout, out stderr);\n\n            var lines = stdout.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);\n            foreach (var line in lines)\n            {\n                if (!line.Contains('='))\n                    continue;\n\n                var key = line.Substring(0, line.IndexOf('='));\n                var value = line.Substring(line.IndexOf('=') + 1);\n                switch (key)\n                {\n                    case \"duration\":\n                        if (value != \"N/A\")\n                            duration = TimeSpan.FromSeconds(double.Parse(value, CultureInfo.InvariantCulture));\n                        break;\n\n                    case \"bit_rate\":\n                        if (value != \"N/A\")\n                            bitsPerSecond = int.Parse(value, CultureInfo.InvariantCulture);\n                        break;\n\n                    case \"width\":\n                        width = int.Parse(value, CultureInfo.InvariantCulture);\n                        break;\n\n                    case \"height\":\n                        height = int.Parse(value, CultureInfo.InvariantCulture);\n                        break;\n\n                    case \"r_frame_rate\":\n                        var frac = value.Split('/');\n                        framesPerSecond = float.Parse(frac[0], CultureInfo.InvariantCulture) / float.Parse(frac[1], CultureInfo.InvariantCulture);\n                        break;\n                }\n            }\n        }\n\n        public void ConvertFormat(string saveToFile)\n        {\n            string containerExt = Path.GetExtension(saveToFile).ToLower();\n\n            switch (containerExt)\n            {\n                case \".wmv\":\n                    this.ConvertToWmv(saveToFile);\n                    VideoContent.ProbeFormat(saveToFile, out _width, out _height, out _duration, out _bitsPerSecond, out _framesPerSecond);\n                    this.Filename = saveToFile;\n                    break;\n                case \".mp4\":\n                    this.ConvertToMP4(saveToFile);\n                    VideoContent.ProbeFormat(saveToFile, out _width, out _height, out _duration, out _bitsPerSecond, out _framesPerSecond);\n                    this.Filename = saveToFile;\n                    break;\n                case \".webm\":\n                    this.ConvertToWebM(saveToFile);\n                    VideoContent.ProbeFormat(saveToFile, out _width, out _height, out _duration, out _bitsPerSecond, out _framesPerSecond);\n                    this.Filename = saveToFile;\n                    break;\n\n                default:\n                    throw new InvalidOperationException(\"Unsupported video format: \" + containerExt);\n            }\n        }\n\n        private void ConvertToWmv(string saveToFile)\n        {\n            string ffmpegVCodecName, ffmpegACodecName;\n            ffmpegVCodecName = \"wmv2\";\n            ffmpegACodecName = \"wmav2\";\n\n            string args = string.Format(\n                    \"-y -i \\\"{0}\\\" -c:v {1} -c:a {2} -movflags +faststart \\\"{3}\\\"\",\n                    this.Filename,\n                    ffmpegVCodecName,\n                    ffmpegACodecName,\n                    saveToFile);\n\n            string ffmpegStdout, ffmpegStderr;\n            int ffmpegExitCode;\n\n            ffmpegExitCode = ExternalTool.Run(\"ffmpeg\", args, out ffmpegStdout, out ffmpegStderr);\n\n            if (ffmpegExitCode != 0)\n                throw new InvalidOperationException(\"ffmpeg exited with non-zero exit code: \\n\" + ffmpegStdout + \"\\n\" + ffmpegStderr);\n        }\n\n        private void ConvertToMP4(string saveToFile)\n        {\n            string ffmpegVCodecName, ffmpegACodecName;\n            ffmpegVCodecName = \"libx264\";\n            ffmpegACodecName = \"aac\";\n\n            string args = string.Format(\n                    //\"-y -i \\\"{0}\\\" -c:v {1} -profile:v baseline -level 3.0 -c:a {2} -strict -2 -movflags +faststart \\\"{3}\\\"\",\n                    \"-y -i \\\"{0}\\\" -c:v {1} -profile:v main -c:a {2} -strict -2 -movflags +faststart \\\"{3}\\\"\",\n                    this.Filename,\n                    ffmpegVCodecName,\n                    ffmpegACodecName,\n                    saveToFile);\n\n            string ffmpegStdout, ffmpegStderr;\n            int ffmpegExitCode;\n\n            ffmpegExitCode = ExternalTool.Run(\"ffmpeg\", args, out ffmpegStdout, out ffmpegStderr);\n\n            if (ffmpegExitCode != 0)\n                throw new InvalidOperationException(\"ffmpeg exited with non-zero exit code: \\n\" + ffmpegStdout + \"\\n\" + ffmpegStderr);\n        }\n\n        private void ConvertToWebM(string saveToFile)\n        {\n            string ffmpegVCodecName, ffmpegACodecName;\n            ffmpegVCodecName = \"libvpx-vp9\";\n            ffmpegACodecName = \"libopus\";\n\n            string args = string.Format(\n                    \"-y -i \\\"{0}\\\" -c:v {1} -b:v 0 -crf 30 -c:a {2} -fflags +bitexact \\\"{3}\\\"\",\n                    this.Filename,\n                    ffmpegVCodecName,\n                    ffmpegACodecName,\n                    saveToFile);\n\n            string ffmpegStdout, ffmpegStderr;\n            int ffmpegExitCode;\n\n            ffmpegExitCode = ExternalTool.Run(\"ffmpeg\", args, out ffmpegStdout, out ffmpegStderr);\n            if (ffmpegExitCode != 0)\n                throw new InvalidOperationException(\"ffmpeg exited with non-zero exit code: \\n\" + ffmpegStdout + \"\\n\" + ffmpegStderr);\n        }\n\n        ~VideoContent()\n        {\n            Dispose(false);\n        }\n\n        /// <summary>\n        /// Immediately releases the unmanaged resources used by this object.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (!_disposed)\n            {\n                if (disposing)\n                {\n                    // TODO: Free managed resources here\n                    // ...\n                }\n                // TODO: Free unmanaged resources here\n                // ...\n                _disposed = true;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/VideoImporter.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    [ContentImporter(\".wmv\",\n                     \".asf\",\n                     \".mp4\",\n                     \".m4v\",\n                     \".avi\",\n                     \".divx\",\n                     \".xvid\",\n                     \".mov\",\n                     \".mpg\",\n                     \".mpeg\",\n                     \".webm\",\n                     \".mkv\",\n                     \".ogv\",\n                     \".mjpeg\",\n                     \".vob\",\n                     \".ts\",\n                     \".y4m\",\n                     \".flv\",\n                     \".3gp\",\n                     DisplayName = \"Video Importer - KNI\", DefaultProcessor = \"VideoProcessor\")]\n    public class VideoImporter : ContentImporter<VideoContent>\n    {\n        public VideoImporter()\n        {\n        }\n\n        public override VideoContent Import(string filename, ContentImporterContext context)\n        {\n            var content = new VideoContent(filename);\n            return content;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/WmvImporter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Content.Pipeline\n{\n    /// <summary>\n    /// Provides methods for reading Windows Media Video (.wmv) files for use in the Content Pipeline.\n    /// </summary>\n    [ContentImporter(\".wmv\", DisplayName = \"Wmv Importer - KNI\", DefaultProcessor = \"VideoProcessor\")]\n    public class WmvImporter : ContentImporter<VideoContent>\n    {\n        /// <summary>\n        /// Initializes a new instance of WmvImporter.\n        /// </summary>\n        public WmvImporter()\n        {\n        }\n\n        /// <summary>\n        /// Called by the XNA Framework when importing a .wmv file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline.\n        /// </summary>\n        /// <param name=\"filename\">Name of a game asset file.</param>\n        /// <param name=\"context\">Contains information for importing a game asset, such as a logger interface.</param>\n        /// <returns>Resulting game asset.</returns>\n        public override VideoContent Import(string filename, ContentImporterContext context)\n        {\n            var content = new VideoContent(filename);\n            return content;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Content.Pipeline.Media/Xna.Framework.Content.Pipeline.Media.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Content.Pipeline.Media\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <AssemblyName>Xna.Framework.Content.Pipeline.Media</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Content.Pipeline</RootNamespace>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <DefineConstants></DefineConstants>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>KNI Framework Framework Content Pipeline Media.</Description>\n    <PackageTags>KNI;</PackageTags>\n    <PackageId>nkast.Xna.Framework.Content.Pipeline.Media</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Processors\\SongProcessor.cs\" />\n    <Compile Include=\"Processors\\VideoProcessor.cs\" />\n    <Compile Include=\"Processors\\VideoProcessorOutputFormat.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\SongWriter.cs\" />\n    <Compile Include=\"Serialization\\Compiler\\VideoWriter.cs\" />\n    <Compile Include=\"SongContent.cs\" />\n    <Compile Include=\"VideoContent.cs\" />\n    <Compile Include=\"VideoImporter.cs\" />\n    <Compile Include=\"WmvImporter.cs\" />\n    <Compile Include=\"H264Importer.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Utilities\\PathHelper.cs\" />\n    <Compile Include=\"ExternalTool.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\Platforms\\Utilities\\CurrentPlatform.cs\">\n      <Link>Utilities\\CurrentPlatform.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\ffmpeg\\Windows\\x64\\ffmpeg.exe\">\n      <Link>ffmpeg.exe</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n    <None Include=\"..\\..\\ThirdParty\\Dependencies\\ffmpeg\\Windows\\x64\\ffprobe.exe\">\n      <Link>ffprobe.exe</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <NativeBinary>True</NativeBinary>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content.Pipeline\\Xna.Framework.Content.Pipeline.csproj\">\n      <Project>{73509F44-3566-4B79-BB47-C7C6E2AA2351}</Project>\n      <Name>Xna.Framework.Content.Pipeline</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Media\\Xna.Framework.Media.csproj\">\n      <Project>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</Project>\n      <Name>Xna.Framework.Media</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content.Pipeline.Audio\\Xna.Framework.Content.Pipeline.Audio.csproj\">\n      <Project>{acd26013-5730-4caf-9468-3baae867a8a2}</Project>\n      <Name>Xna.Framework.Content.Pipeline.Audio</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Design/Design/ColorConverter.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Microsoft.Xna.Framework.Design\n{\n    public class ColorConverter : TypeConverter\n    {\n        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)\n        {\n            if (destinationType == typeof(string))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)\n        {\n            Color color = (Color)value;\n\n            if (destinationType == typeof(string))\n            {\n                var terms = new string[4];\n                terms[0] = color.R.ToString(\"R\", culture);\n                terms[1] = color.G.ToString(\"R\", culture);\n                terms[2] = color.B.ToString(\"R\", culture);\n                terms[3] = color.A.ToString(\"R\", culture);\n\n                return string.Join(culture.TextInfo.ListSeparator + \" \", terms);\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            if (sourceType == typeof(string))\n                return true;\n\n            return base.CanConvertFrom(context, sourceType);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            Type sourceType = value.GetType();\n            Color color = default(Color);\n\n            if (sourceType == typeof(string))\n            {\n                string str = (string)value;\n                string[] values = str.Split(culture.TextInfo.ListSeparator.ToCharArray());\n\n                color.R = (byte)int.Parse(values[0], culture);\n                color.G = (byte)int.Parse(values[1], culture);\n                color.B = (byte)int.Parse(values[2], culture);\n                color.A = (byte)int.Parse(values[3], culture);\n\n                return color;\n            }\n\n            return base.ConvertFrom(context, culture, value);\n        }\n    }\n}\n    "
  },
  {
    "path": "src/Xna.Framework.Design/Design/Vector2Converter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Microsoft.Xna.Framework.Design\n{\n    public class Vector2Converter : TypeConverter\n    {\n        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)\n        {\n            if (destinationType == typeof(string))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)\n        {\n            var vec = (Vector2)value;\n\n            if (destinationType == typeof(string))\n            {\n                var terms = new string[2];\n                terms[0] = vec.X.ToString(\"R\", culture);\n                terms[1] = vec.Y.ToString(\"R\", culture);\n\n                return string.Join(culture.TextInfo.ListSeparator + \" \", terms);\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            if (sourceType == typeof(string))\n                return true;\n\n            return base.CanConvertFrom(context, sourceType);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            var sourceType = value.GetType();\n            var vec = Vector2.Zero;\n\n            if (sourceType == typeof(string))\n            {\n                var str = (string)value;\n                var words = str.Split(culture.TextInfo.ListSeparator.ToCharArray());\n\n                vec.X = float.Parse(words[0], culture);\n                vec.Y = float.Parse(words[1], culture);\n\n                return vec;\n            }\n\n            return base.ConvertFrom(context, culture, value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Design/Design/Vector3Converter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Microsoft.Xna.Framework.Design\n{\n    public class Vector3Converter : TypeConverter\n    {\n        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)\n        {\n            if (destinationType == typeof(string))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)\n        {\n            var vec = (Vector3)value;\n\n            if (destinationType == typeof(string))\n            {                \n                var terms = new string[3];\n                terms[0] = vec.X.ToString(\"R\", culture);\n                terms[1] = vec.Y.ToString(\"R\", culture);\n                terms[2] = vec.Z.ToString(\"R\", culture);\n\n                return string.Join(culture.TextInfo.ListSeparator + \" \", terms);\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            if (sourceType == typeof(string))\n                return true;\n\n            return base.CanConvertFrom(context, sourceType);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            var sourceType = value.GetType();\n            var vec = Vector3.Zero;\n\n            if (sourceType == typeof(string))\n            {\n                var str = (string)value;\n                var words = str.Split(culture.TextInfo.ListSeparator.ToCharArray());\n\n                vec.X = float.Parse(words[0], culture);\n                vec.Y = float.Parse(words[1], culture);\n                vec.Z = float.Parse(words[2], culture);\n\n                return vec;\n            }\n\n            return base.ConvertFrom(context, culture, value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Design/Design/Vector4Converter.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace Microsoft.Xna.Framework.Design\n{\n    public class Vector4Converter : TypeConverter\n    {\n        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)\n        {\n            if (destinationType == typeof(string))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)\n        {\n            var vec = (Vector4)value;\n\n            if (destinationType == typeof(string))\n            {\n                var terms = new string[4];\n                terms[0] = vec.X.ToString(\"R\", culture);\n                terms[1] = vec.Y.ToString(\"R\", culture);\n                terms[2] = vec.Z.ToString(\"R\", culture);\n                terms[3] = vec.W.ToString(\"R\", culture);\n\n                return string.Join(culture.TextInfo.ListSeparator + \" \", terms);\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            if (sourceType == typeof(string))\n                return true;\n\n            return base.CanConvertFrom(context, sourceType);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            var sourceType = value.GetType();\n            var vec = Vector4.Zero;\n\n            if (sourceType == typeof(string))\n            {\n                var str = (string)value;\n                var words = str.Split(culture.TextInfo.ListSeparator.ToCharArray());\n\n                vec.X = float.Parse(words[0], culture);\n                vec.Y = float.Parse(words[1], culture);\n                vec.Z = float.Parse(words[2], culture);\n                vec.W = float.Parse(words[3], culture);\n\n                return vec;\n            }\n\n            return base.ConvertFrom(context, culture, value);\n        }\n    }\n}\n    "
  },
  {
    "path": "src/Xna.Framework.Design/Properties/AssemblyInfo.cs",
    "content": "using System;\n\n[assembly:CLSCompliant(true)]\n"
  },
  {
    "path": "src/Xna.Framework.Design/Xna.Framework.Design.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Design\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <ProjectGuid>{E37F98D7-C4E8-4556-B322-AEF99638ECE1}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Design</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Design</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Design Converters.</Description>\n    <PackageTags>KNI;.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Design</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Design\\ColorConverter.cs\" />\n    <Compile Include=\"Design\\Vector2Converter.cs\" />\n    <Compile Include=\"Design\\Vector3Converter.cs\" />\n    <Compile Include=\"Design\\Vector4Converter.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/DevicesFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public abstract class DevicesFactory\n    {\n        private volatile static DevicesFactory _current;\n\n        internal static DevicesFactory Current\n        {\n            get\n            {\n                DevicesFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (typeof(DevicesFactory))\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"DevicesFactory not found.\");\n                    Console.WriteLine(\"Initialize devices with 'DevicesFactory.RegisterDevicesFactory(new ConcreteDevicesFactory());'.\");\n                    DevicesFactory devicesFactory = CreateDevicesFactory();\n                    DevicesFactory.RegisterDevicesFactory(devicesFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static DevicesFactory CreateDevicesFactory()\n        {\n            Console.WriteLine(\"Registering ConcreteDevicesFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.Devices.ConcreteDevicesFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(DevicesFactory)) && !type.IsAbstract)\n                    return (DevicesFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterDevicesFactory(DevicesFactory devicesFactory)\n        {\n            if (devicesFactory == null)\n                throw new NullReferenceException(\"devicesFactory\");\n\n            lock (typeof(DevicesFactory))\n            {\n                if (_current == null)\n                    _current = devicesFactory;\n                else\n                    throw new InvalidOperationException(\"devicesFactory allready registered.\");\n            }\n        }\n\n        public abstract HapticsStrategy CreateConcreteHapticsStrategy();\n\n        public abstract SensorServiceStrategy CreateSensorServiceStrategy();\n        public abstract AccelerometerStrategy CreateAccelerometerStrategy();\n        public abstract CompassStrategy CreateCompassStrategy();\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Haptics.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Devices;\nusing Microsoft.Xna.Platform.Devices;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public interface IPlatformHaptics\n    {\n        T GetStrategy<T>() where T : HapticsStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Devices\n{\n    public sealed class Haptics : IPlatformHaptics\n    {\n        private static Haptics _current;\n\n        /// <summary>\n        /// Returns the current Vibrator instance.\n        /// </summary> \n        public static Haptics Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(Haptics))\n                {\n                    if (_current == null)\n                        _current = new Haptics();\n\n                    return _current;\n                }\n            }\n        }\n\n        private HapticsStrategy _strategy;\n\n        T IPlatformHaptics.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private Haptics()\n        {\n            _strategy = DevicesFactory.Current.CreateConcreteHapticsStrategy();\n        }\n\n        public void Vibrate(TimeSpan duration)\n        {\n            lock (typeof(Haptics))\n            {\n                _strategy.Vibrate(duration);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/HapticsStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Devices;\n\nnamespace Microsoft.Xna.Platform.Devices\n{\n    public abstract class HapticsStrategy\n    {\n        public abstract void Vibrate(TimeSpan duration);\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/Accelerometer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    /// <summary>\n    /// Provides access to the device's accelerometer sensor.\n    /// </summary>\n    public sealed class Accelerometer : SensorBase<AccelerometerReading>\n    {\n        private AccelerometerStrategy _strategy;\n\n        private bool _isDisposed;\n\n        internal AccelerometerStrategy Strategy\n        {\n            get { return _strategy; }\n        }\n\n        /// <summary>\n        /// Gets whether the device on which the application is running supports the accelerometer sensor.\n        /// </summary>\n        public static bool IsSupported\n        {\n            get { return SensorService.Current.IsAccelerometerSupported; }\n        }\n\n        /// <summary>\n        /// Gets the current state of the accelerometer. The value is a member of the SensorState enumeration.\n        /// </summary>\n        public SensorState State\n        {\n            get\n            {\n                ThrowIfDisposed();\n\n                return Strategy.State;\n            }\n        }\n\n        protected override bool IsDisposed\n        {\n            get { return _isDisposed; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return Strategy.IsDataValid; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return Strategy.ReportInterval; }\n            set { Strategy.ReportInterval = value; }\n        }\n\n        public override AccelerometerReading CurrentReading\n        {\n            get { return Strategy.CurrentReading; }\n        }\n\n        /// <summary>\n        /// Creates a new instance of the Accelerometer object.\n        /// </summary>\n        public Accelerometer()\n        {\n            _strategy = DevicesFactory.Current.CreateAccelerometerStrategy();\n            _strategy.ReadingChanged += _strategy_ReadingChanged;\n        }\n\n        private void _strategy_ReadingChanged(object sender, SensorReadingEventArgs<AccelerometerReading> eventArgs)\n        {\n            OnReadingChanged(eventArgs);\n        }\n\n        /// <summary>\n        /// Starts data acquisition from the accelerometer.\n        /// </summary>\n        public override void Start()\n        {\n            ThrowIfDisposed();\n\n            Strategy.Start();\n        }\n\n        /// <summary>\n        /// Stops data acquisition from the accelerometer.\n        /// </summary>\n        public override void Stop()\n        {\n            ThrowIfDisposed();\n\n            Strategy.Stop();\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    Strategy.Dispose();\n                }\n\n                _isDisposed = true;\n                //base.Dispose(disposing);\n            }\n        }\n\n        private void ThrowIfDisposed()\n        {\n            if (!_isDisposed)\n                return;\n\n            throw new ObjectDisposedException(\"Accelerometer\");\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/AccelerometerFailedException.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    /// <summary>\n    /// The exception that may be thrown during a call to Start() or Stop(). The Message field describes the reason for the exception and the ErrorId field contains the error code from the underlying native code implementation of the accelerometer framework.\n    /// </summary>\n    public class AccelerometerFailedException : SensorFailedException\n    {\n        /// <summary>\n        /// Initializes a new instance of AccelerometerFailedException\n        /// </summary>\n        /// <param name=\"message\">The descriptive reason for the exception</param>\n        /// <param name=\"errorId\">The native error code that caused the exception</param>\n        internal AccelerometerFailedException(string message, int errorId)\n            : base(message)\n        {\n            ErrorId = errorId;\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/AccelerometerReading.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    public struct AccelerometerReading : ISensorReading\n    {\n        public Vector3 Acceleration { get; internal set; }\n        public DateTimeOffset Timestamp { get; internal set; }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/AccelerometerStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    public abstract class AccelerometerStrategy : SensorStrategy<AccelerometerReading>\n        , IDisposable\n    {\n\n        public AccelerometerStrategy()\n        {\n        }\n\n        protected AccelerometerReading CreateAccelerometerReading(\n            Vector3 acceleration,\n            DateTimeOffset timestamp\n            )\n        {\n            AccelerometerReading reading = new AccelerometerReading();\n            reading.Acceleration = acceleration;\n            reading.Timestamp = timestamp;\n            return reading;\n        }\n\n        protected AccelerometerFailedException CreateAccelerometerFailedException(string message, int errorId)\n        {            \n            return new AccelerometerFailedException(message, errorId);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/CalibrationEventArgs.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    /// <summary>\n    /// Provides data for Calibrate and events.\n    /// </summary>\n    public class CalibrationEventArgs : EventArgs\n    {\n        public static readonly CalibrationEventArgs Empty = new CalibrationEventArgs();\n\n        /// <summary>\n        /// Initializes a new instance of the CalibrationEventArgs class.\n        /// </summary>\n        /// <remarks>\n        /// Obtain a CalibrationEventArgs object by implementing a handler for the Compass.Calibrate event.\n        /// </remarks>\n        public CalibrationEventArgs()\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/Compass.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Devices;\nusing Microsoft.Xna.Platform.Devices.Sensors;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    /// <summary>\n    /// Provides access to the device's compass sensor.\n    /// </summary>\n    public sealed class Compass : SensorBase<CompassReading>\n    {\n        private CompassStrategy _strategy;\n\n        private bool _isDisposed;\n\n        public event EventHandler<CalibrationEventArgs> Calibrate;\n\n        internal CompassStrategy Strategy\n        {\n            get { return _strategy; }\n        }\n\n        /// <summary>\n        /// Gets whether the device on which the application is running supports the compass sensor.\n        /// </summary>\n        public static bool IsSupported\n        {\n            get { return SensorService.Current.IsCompassSupported; }\n        }\n\n        /// <summary>\n        /// Gets the current state of the compass. The value is a member of the SensorState enumeration.\n        /// </summary>\n        public SensorState State\n        {\n            get\n            {\n                ThrowIfDisposed();\n\n                return Strategy.State;\n            }\n        }\n\n        protected override bool IsDisposed\n        {\n            get { return _isDisposed; }\n        }\n\n        public override bool IsDataValid\n        {\n            get { return Strategy.IsDataValid; }\n        }\n\n        public override TimeSpan ReportInterval\n        {\n            get { return Strategy.ReportInterval; }\n            set { Strategy.ReportInterval = value; }\n        }\n\n        public override CompassReading CurrentReading\n        {\n            get { return Strategy.CurrentReading; }\n        }\n\n        /// <summary>\n        /// Creates a new instance of the Compass object.\n        /// </summary>\n        public Compass()\n        {\n            _strategy = DevicesFactory.Current.CreateCompassStrategy();\n            _strategy.ReadingChanged += _strategy_CurrentReadingChanged;\n            _strategy.Calibrate += _strategy_Calibrate;\n        }\n\n        private void _strategy_CurrentReadingChanged(object sender, SensorReadingEventArgs<CompassReading> eventArgs)\n        {\n            OnReadingChanged(eventArgs);\n        }\n\n        private void _strategy_Calibrate(object sender, CalibrationEventArgs eventArgs)\n        {\n            OnCalibrate(eventArgs);\n        }\n\n        /// <summary>\n        /// Starts data acquisition from the compass.\n        /// </summary>\n        public override void Start()\n        {\n            ThrowIfDisposed();\n\n            Strategy.Start();\n        }\n\n        /// <summary>\n        /// Stops data acquisition from the accelerometer.\n        /// </summary>\n        public override void Stop()\n        {\n            ThrowIfDisposed();\n\n            Strategy.Stop();\n        }\n\n        private void OnCalibrate(CalibrationEventArgs eventArgs)\n        {\n            var handler = Calibrate;\n            if (handler != null)\n                handler(this, eventArgs);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    Strategy.Dispose();\n                }\n\n                _isDisposed = true;\n                //base.Dispose(disposing);\n            }\n        }\n\n        private void ThrowIfDisposed()\n        {\n            if (!_isDisposed)\n                return;\n\n            throw new ObjectDisposedException(\"Compass\");\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/CompassReading.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    public struct CompassReading : ISensorReading\n    {\n        public double HeadingAccuracy { get; internal set; }\n        public double MagneticHeading { get; internal set; }\n        public Vector3 MagnetometerReading { get; internal set; }\n        public DateTimeOffset Timestamp { get; internal set; }\n        public double TrueHeading { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/CompassStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    public abstract class CompassStrategy : SensorStrategy<CompassReading>\n        , IDisposable\n    {\n\n        public event EventHandler<CalibrationEventArgs> Calibrate;\n\n        public CompassStrategy()\n        {\n        }\n\n        internal\n        protected virtual void OnCalibrate(CalibrationEventArgs eventArgs)\n        {\n            var handler = Calibrate;\n            if (handler != null)\n                handler(this, eventArgs);\n        }\n\n        protected CompassReading CreateCompassReading(\n            double headingAccuracy,\n            double magneticHeading,\n            Vector3 magnetometerReading,\n            DateTimeOffset timestamp,\n            double trueHeading\n            )\n        {\n            CompassReading reading = new CompassReading();\n            reading.HeadingAccuracy = headingAccuracy;\n            reading.MagneticHeading = magneticHeading;\n            reading.MagnetometerReading = magnetometerReading;\n            reading.Timestamp = timestamp;\n            reading.TrueHeading = trueHeading;\n            return reading;\n        }\n\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/ISensorReading.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    public interface ISensorReading\n    {\n        DateTimeOffset Timestamp { get; }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/SensorBase.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    public abstract class SensorBase<TSensorReading> : IDisposable\n        where TSensorReading : ISensorReading\n    {\n        public event EventHandler<SensorReadingEventArgs<TSensorReading>> ReadingChanged;\n\n        public abstract TSensorReading CurrentReading { get; }\n        public abstract bool IsDataValid { get; }\n        public abstract TimeSpan ReportInterval { get; set; }\n        protected abstract bool IsDisposed { get; }\n\n        public SensorBase()\n        {\n        }\n\n        public abstract void Start();\n        public abstract void Stop();\n\n        protected virtual void OnReadingChanged(SensorReadingEventArgs<TSensorReading> eventArgs)\n        {\n            var handler = ReadingChanged;\n            if (handler != null)\n                handler(this, eventArgs);\n        }\n\n\n        #region IDisposable\n\n        ~SensorBase()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n\n        #endregion IDisposable\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/SensorFailedException.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    public class SensorFailedException : Exception\n    {\n        public int ErrorId { get; protected set; }\n\n        internal SensorFailedException(string message)\n            : base(message)\n        {\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/SensorReadingEventArgs.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    public class SensorReadingEventArgs<T> : EventArgs\n        where T : ISensorReading\n    {\n        public T SensorReading { get; set; }\n\n        public SensorReadingEventArgs(T sensorReading)\n        {\n            this.SensorReading = sensorReading;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/SensorService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{   \n    public sealed class SensorService : IDisposable\n        , IPlatformSensorService\n    {\n        private volatile static SensorService _current;\n        private SensorServiceStrategy _strategy;\n\n        public readonly static object SyncHandle = new object();\n\n        SensorServiceStrategy IPlatformSensorService.Strategy { get { return _strategy; } }\n\n        public static SensorService Current\n        {\n            get\n            {\n                SensorService current = _current;\n                if (current != null)\n                    return current;\n\n                // Create instance\n                lock(SyncHandle)\n                {\n                    if (_current == null)\n                    {   \n                        try\n                        {\n                            _current = new SensorService();\n                        }\n                        catch (Exception ex)\n                        {\n                            throw new Exception(\"SensorService has failed to initialize.\", ex);\n                        }\n                    }\n                    return _current;\n                }\n            }\n        }\n\n        internal bool IsAccelerometerSupported\n        {\n            get { return _strategy.PlatformIsAccelerometerSupported(); }\n        }\n\n        internal bool IsCompassSupported\n        {\n            get { return _strategy.PlatformIsCompassSupported(); }\n        }\n\n        private SensorService()\n        {\n            _strategy = DevicesFactory.Current.CreateSensorServiceStrategy();\n        }\n\n        public static void Suspend()\n        {\n            if (_current == null) return;\n\n            // Shutdown\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                {\n                    _current._strategy.Suspend();\n                }\n            }\n        }\n\n        public static void Resume()\n        {\n            if (_current == null) return;\n\n            // Shutdown\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                {\n                    _current._strategy.Resume();\n                }\n            }\n        }\n\n        public static void Shutdown()\n        {\n            if (_current == null) return;\n\n            // Shutdown\n            lock (SyncHandle)\n            {\n                if (_current != null)\n                {\n                    _current.Dispose();\n                    _current = null;\n                }\n            }\n        }\n\n        #region IDisposable\n\n        private bool isDisposed = false;\n        public event EventHandler Disposing;\n\n        ~SensorService()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (isDisposed)\n                    return;\n\n                var handler = Disposing;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n\n                _strategy.Dispose();\n                _strategy = null;\n\n                isDisposed = true;\n            }\n            else\n            {\n                if (isDisposed)\n                    return;\n                                \n                _strategy = null;\n\n                isDisposed = true;\n            }\n        }\n\n\n        #endregion // IDisposable\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/SensorServiceStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    public interface IPlatformSensorService\n    {\n        SensorServiceStrategy Strategy { get; }\n    }\n\n    abstract public class SensorServiceStrategy : IDisposable\n    {\n        public abstract void Suspend();\n        public abstract void Resume();\n        public abstract bool PlatformIsAccelerometerSupported();\n        public abstract bool PlatformIsCompassSupported();\n\n        public T ToConcrete<T>() where T : SensorServiceStrategy\n        {\n            return (T)this;\n        }\n\n\n        #region IDisposable\n        ~SensorServiceStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n        #endregion\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/SensorState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Devices.Sensors\n{\n    public enum SensorState\n    {\n        NotSupported,\n        Ready,\n        Initializing,\n        NoData,\n        NoPermissions,\n        Disabled\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Devices/Sensors/SensorStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Devices.Sensors;\n\nnamespace Microsoft.Xna.Platform.Devices.Sensors\n{\n    public class SensorStrategy<TSensorReading> : IDisposable\n        where TSensorReading : ISensorReading\n    {\n        private SensorState _state;\n        private bool _isDataValid;\n        private TimeSpan _reportInterval = TimeSpan.FromMilliseconds(2);\n        private TSensorReading _currentReading;\n\n        public event EventHandler<SensorReadingEventArgs<TSensorReading>> ReadingChanged;\n\n\n        public virtual SensorState State\n        {\n            get { return _state; }\n            set { _state = value; }\n        }\n\n        public virtual bool IsDataValid\n        {\n            get { return _isDataValid; }\n            set { _isDataValid = value; }\n        }\n\n        public virtual TimeSpan ReportInterval\n        {\n            get { return _reportInterval; }\n            set { _reportInterval = value; }\n        }\n\n        public virtual TSensorReading CurrentReading\n        {\n            get { return _currentReading; }\n            set { _currentReading = value; }\n        }\n\n        public SensorStrategy()\n        {\n        }\n\n\n\n        public virtual void Start()\n        {\n        }\n\n        public virtual void Stop()\n        {\n        }\n\n        internal\n        protected virtual void OnReadingChanged(SensorReadingEventArgs<TSensorReading> eventArgs)\n        {\n            var handler = ReadingChanged;\n            if (handler != null)\n                handler(this, eventArgs);\n        }\n\n        protected SensorFailedException CreateSensorFailedException(string message)\n        {\n            throw new SensorFailedException(message);\n        }\n\n        #region IDisposable Members\n\n        ~SensorStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Devices/ILLink.Descriptors.xml",
    "content": "<linker>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework.Devices/NamespaceDoc.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.Devices\n{\n    /// <summary>\n    /// Provides functionality to handle devices like haptics, etc.\n    /// </summary>\n    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    class NamespaceDoc\n    {\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Devices/Xna.Framework.Devices.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Devices\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{6B3E56F7-C567-463C-9746-0244FD959322}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Devices</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Devices</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Devices framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Devices</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"NamespaceDoc.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Devices\\DevicesFactory.cs\" />\n    <Compile Include=\"Devices\\Haptics.cs\" />\n    <Compile Include=\"Devices\\HapticsStrategy.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Devices\\Sensors\\Accelerometer.cs\" />\n    <Compile Include=\"Devices\\Sensors\\AccelerometerFailedException.cs\" />\n    <Compile Include=\"Devices\\Sensors\\AccelerometerReading.cs\" />\n    <Compile Include=\"Devices\\Sensors\\AccelerometerStrategy.cs\" />\n    <Compile Include=\"Devices\\Sensors\\CalibrationEventArgs.cs\" />\n    <Compile Include=\"Devices\\Sensors\\Compass.cs\" />\n    <Compile Include=\"Devices\\Sensors\\CompassReading.cs\" />\n    <Compile Include=\"Devices\\Sensors\\CompassStrategy.cs\" />\n    <Compile Include=\"Devices\\Sensors\\ISensorReading.cs\" />\n    <Compile Include=\"Devices\\Sensors\\SensorBase.cs\" />\n    <Compile Include=\"Devices\\Sensors\\SensorFailedException.cs\" />\n    <Compile Include=\"Devices\\Sensors\\SensorReadingEventArgs.cs\" />\n    <Compile Include=\"Devices\\Sensors\\SensorService.cs\" />\n    <Compile Include=\"Devices\\Sensors\\SensorServiceStrategy.cs\" />\n    <Compile Include=\"Devices\\Sensors\\SensorState.cs\" />\n    <Compile Include=\"Devices\\Sensors\\SensorStrategy.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Game/DrawableGameComponent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// A <see cref=\"GameComponent\"/> that is drawn when its <see cref=\"Game\"/> is drawn.\n    /// </summary>\n    public class DrawableGameComponent : GameComponent, IDrawable\n    {\n        private bool _initialized;\n        private bool _disposed;\n        private int _drawOrder;\n        private bool _visible = true;\n\n        /// <summary>\n        /// Get the <see cref=\"GraphicsDevice\"/> that this <see cref=\"DrawableGameComponent\"/> uses for drawing.\n        /// </summary>\n        public Graphics.GraphicsDevice GraphicsDevice\n        {\n            get { return this.Game.GraphicsDevice; } \n        }\n\n        public int DrawOrder\n        {\n            get { return _drawOrder; }\n            set\n            {\n                if (_drawOrder != value)\n                {\n                    _drawOrder = value;\n                    OnDrawOrderChanged(EventArgs.Empty);\n                }\n            }\n        }\n\n        public bool Visible\n        {\n            get { return _visible; }\n            set\n            {\n                if (_visible != value)\n                {\n                    _visible = value;\n                    OnVisibleChanged(EventArgs.Empty);\n                }\n            }\n        }\n\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DrawOrderChanged;\n\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> VisibleChanged;\n\n        /// <summary>\n        /// Create a <see cref=\"DrawableGameComponent\"/>.\n        /// </summary>\n        /// <param name=\"game\">The game that this component will belong to.</param>\n        public DrawableGameComponent(Game game)\n            : base(game)\n        {\n        }\n\n        public override void Initialize()\n        {\n            if (!_initialized)\n            {\n                _initialized = true;\n                LoadContent();\n            }\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (!_disposed)\n            {\n                _disposed = true;\n                if (disposing)\n                {\n                    UnloadContent();\n                }\n                base.Dispose(disposing);\n            }\n        }\n\n        /// <summary>\n        /// Load graphical resources needed by this component.\n        /// </summary>\n        protected virtual void LoadContent() { }\n\n        /// <summary>\n        /// Unload graphical resources needed by this component.\n        /// </summary>\n        protected virtual void UnloadContent() { }\n\n        /// <summary>\n        /// Draw this component.\n        /// </summary>\n        /// <param name=\"gameTime\">The time elapsed since the last call to <see cref=\"Draw\"/>.</param>\n        public virtual void Draw(GameTime gameTime) { }\n\n        /// <summary>\n        /// Called when <see cref=\"Visible\"/> changed.\n        /// </summary>\n        /// <param name=\"args\">Arguments to the <see cref=\"VisibleChanged\"/> event.</param>\n        protected virtual void OnVisibleChanged(EventArgs args)\n        {\n            var handler = VisibleChanged;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        /// <summary>\n        /// Called when <see cref=\"DrawOrder\"/> changed.\n        /// </summary>\n        /// <param name=\"args\">Arguments to the <see cref=\"DrawOrderChanged\"/> event.</param>\n        protected virtual void OnDrawOrderChanged(EventArgs args)\n        {\n            var handler = DrawOrderChanged;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/FileDropEventArgs.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// This class is used in the <see cref=\"GameWindow.FileDrop\"/> event as <see cref=\"EventArgs\"/>.\n    /// </summary>\n    public class FileDropEventArgs : EventArgs\n    {\n        public FileDropEventArgs(string[] files)\n        {\n            Files = files;\n        }\n\n        /// <summary>\n        /// The paths of dropped files\n        /// </summary>\n        public string[] Files { get; private set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/Game.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Input.Touch;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// This class is the entry point for most games. Handles setting up\n    /// a window and graphics and runs a game loop that calls <see cref=\"Update\"/> and <see cref=\"Draw\"/>.\n    /// </summary>\n    public class Game : IDisposable\n        , IPlatformGame\n    {\n        private GameStrategy _strategy;\n\n        GameStrategy Strategy { get { return _strategy; } }\n\n        /// <summary>\n        /// Create a <see cref=\"Game\"/>.\n        /// </summary>\n        public Game()\n        {\n            LaunchParameters = new LaunchParameters();\n\n            _strategy = GameFactory.Current.CreateGameStrategy(this);\n\n            Strategy.Activated += Platform_Activated;\n            Strategy.Deactivated += Platform_Deactivated;\n        }\n\n        ~Game()\n        {\n            Dispose(false);\n        }\n\n        T IPlatformGame.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        void Platform_Activated(object sender, EventArgs e) { OnActivated(e); }\n        void Platform_Deactivated(object sender, EventArgs e) { OnDeactivated(e); }\n\n        #region IDisposable Implementation\n\n        private bool _isDisposed;\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n\n            var handler = Disposed;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    if (_strategy != null)\n                    {\n                        _strategy.Activated -= Platform_Activated;\n                        _strategy.Deactivated -= Platform_Deactivated;\n\n                        _strategy.Dispose();\n                        _strategy = null;\n                    }\n                }\n\n                _isDisposed = true;\n            }\n        }\n\n        [System.Diagnostics.DebuggerNonUserCode]\n        internal void AssertNotDisposed()\n        {\n            if (_isDisposed)\n            {\n                string name = GetType().Name;\n                throw new ObjectDisposedException(\n                    name, string.Format(\"The {0} object was used after being Disposed.\", name));\n            }\n        }\n\n        #endregion IDisposable Implementation\n\n        #region Properties\n\n        /// <summary>\n        /// The start up parameters for this <see cref=\"Game\"/>.\n        /// </summary>\n        public LaunchParameters LaunchParameters { get; private set; }\n\n        /// <summary>\n        /// A collection of game components attached to this <see cref=\"Game\"/>.\n        /// </summary>\n        public GameComponentCollection Components { get { return Strategy.Components; } }\n\n        public TimeSpan InactiveSleepTime\n        {\n            get { return Strategy.InactiveSleepTime; }\n            set { Strategy.InactiveSleepTime = value; }\n        }\n\n        /// <summary>\n        /// The maximum amount of time we will frameskip over and only perform Update calls with no Draw calls.\n        /// MonoGame extension.\n        /// </summary>\n        public TimeSpan MaxElapsedTime\n        {\n            get { return Strategy.MaxElapsedTime; }\n            set { Strategy.MaxElapsedTime = value; }\n        }\n\n        /// <summary>\n        /// Indicates if the game is the focused application.\n        /// </summary>\n        public bool IsActive\n        {\n            get { return Strategy.IsActive; }\n        }\n\n\n        public bool IsVisible\n        {\n            get { return Strategy.IsVisible; }\n        }\n\n        /// <summary>\n        /// Indicates if the mouse cursor is visible on the game screen.\n        /// </summary>\n        public bool IsMouseVisible\n        {\n            get { return Strategy.IsMouseVisible; }\n            set { Strategy.IsMouseVisible = value; }\n        }\n\n        /// <summary>\n        /// The time between frames when running with a fixed time step. <seealso cref=\"IsFixedTimeStep\"/>\n        /// </summary>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Target elapsed time must be strictly larger than zero.</exception>\n        public TimeSpan TargetElapsedTime\n        {\n            get { return Strategy.TargetElapsedTime; }\n            set { Strategy.TargetElapsedTime = value; }\n        }\n\n\n        /// <summary>\n        /// Indicates if this game is running with a fixed time between frames.\n        /// \n        /// When set to <code>true</code> the target time between frames is\n        /// given by <see cref=\"TargetElapsedTime\"/>.\n        /// </summary>\n        public bool IsFixedTimeStep\n        {\n            get { return Strategy.IsFixedTimeStep; }\n            set { Strategy.IsFixedTimeStep = value; }\n        }\n\n        /// <summary>\n        /// Get a container holding service providers attached to this <see cref=\"Game\"/>.\n        /// </summary>\n        public GameServiceContainer Services { get { return Strategy.Services; } }\n\n\n        /// <summary>\n        /// The <see cref=\"ContentManager\"/> of this <see cref=\"Game\"/>.\n        /// </summary>\n        /// <exception cref=\"ArgumentNullException\">If Content is set to <code>null</code>.</exception>\n        public ContentManager Content\n        {\n            get { return Strategy.Content; }\n            set { Strategy.Content = value; }\n        }\n\n        /// <summary>\n        /// Gets the <see cref=\"GraphicsDevice\"/> used for rendering by this <see cref=\"Game\"/>.\n        /// </summary>\n        /// <exception cref=\"InvalidOperationException\">\n        /// There is no <see cref=\"Graphics.GraphicsDevice\"/> attached to this <see cref=\"Game\"/>.\n        /// </exception>\n        public GraphicsDevice GraphicsDevice\n        {\n            get { return Strategy.GraphicsDevice; }\n        }\n\n        /// <summary>\n        /// The system window that this game is displayed on.\n        /// </summary>\n        [CLSCompliant(false)]\n        public GameWindow Window\n        {\n            get { return Strategy.Window; }\n        }\n\n        #endregion Properties\n\n        #region Events\n\n        /// <summary>\n        /// Raised when the game gains focus.\n        /// </summary>\n        public event EventHandler<EventArgs> Activated;\n\n        /// <summary>\n        /// Raised when the game loses focus.\n        /// </summary>\n        public event EventHandler<EventArgs> Deactivated;\n\n        /// <summary>\n        /// Raised when this game is being disposed.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposed;\n\n        /// <summary>\n        /// Raised when this game is exiting.\n        /// </summary>\n        public event EventHandler<EventArgs> Exiting;\n\n        #endregion\n\n        #region Public Methods\n\n        /// <summary>\n        /// Exit the game at the end of this tick.\n        /// </summary>\n        /// <exception cref=\"PlatformNotSupportedException\"></exception>\n        public void Exit()\n        {\n            Strategy.Exit();\n        }\n\n        /// <summary>\n        /// Reset the elapsed game time to <see cref=\"TimeSpan.Zero\"/>.\n        /// </summary>\n        public void ResetElapsedTime()\n        {\n            Strategy.ResetElapsedTime();\n        }\n\n        /// <summary>\n        /// Supress calling <see cref=\"Draw\"/> in the game loop.\n        /// </summary>\n        public void SuppressDraw()\n        {\n            Strategy.SuppressDraw();\n        }\n        \n        /// <summary>\n        /// Run the game for one frame, then exit.\n        /// </summary>\n        public void RunOneFrame()\n        {\n            if (Strategy == null)\n                return;\n\n            Strategy.RunOneFrame();\n        }\n\n        /// <summary>\n        /// Run the game for the current platform.\n        /// </summary>\n        public void Run()\n        {\n            AssertNotDisposed();\n\n            Strategy.Run();\n        }\n        \n        /// <summary>\n        /// Run one iteration of the game loop.\n        ///\n        /// Makes at least one call to <see cref=\"Update\"/>\n        /// and exactly one call to <see cref=\"Draw\"/> if drawing is not supressed.\n        /// When <see cref=\"IsFixedTimeStep\"/> is set to <code>false</code> this will\n        /// make exactly one call to <see cref=\"Update\"/>.\n        /// </summary>\n        public void Tick()\n        {\n            Strategy.Tick();\n\n            if (Strategy.ShouldExit)\n                Strategy.TickExiting();\n        }\n\n        #endregion\n\n        #region Protected Methods\n\n        /// <summary>\n        /// Called right before <see cref=\"Draw\"/> is normally called. Can return <code>false</code>\n        /// to let the game loop not call <see cref=\"Draw\"/>.\n        /// </summary>\n        /// <returns>\n        ///   <code>true</code> if <see cref=\"Draw\"/> should be called, <code>false</code> if it should not.\n        /// </returns>\n        protected internal virtual bool BeginDraw()\n        {\n            return Strategy.BeginDraw();\n        }\n\n        /// <summary>\n        /// Called right after <see cref=\"Draw\"/>. Presents the\n        /// rendered frame in the <see cref=\"GameWindow\"/>.\n        /// </summary>\n        protected internal virtual void EndDraw()\n        {\n            Strategy.EndDraw();\n        }\n\n        /// <summary>\n        /// Called after <see cref=\"Initialize\"/>, but before the first call to <see cref=\"Update\"/>.\n        /// </summary>\n        protected internal virtual void BeginRun() { }\n\n        /// <summary>\n        /// Called when the game loop has been terminated before exiting.\n        /// </summary>\n        protected internal virtual void EndRun() { }\n\n        /// <summary>\n        /// Override this to load graphical resources required by the game.\n        /// </summary>\n        protected virtual void LoadContent() { }\n\n        /// <summary>\n        /// Override this to unload graphical resources loaded by the game.\n        /// </summary>\n        protected internal virtual void UnloadContent() { }\n\n        /// <summary>\n        /// Override this to initialize the game and load any needed non-graphical resources.\n        ///\n        /// Initializes attached <see cref=\"GameComponent\"/> instances and calls <see cref=\"LoadContent\"/>.\n        /// </summary>\n        protected internal virtual void Initialize()\n        {\n            Strategy.Initialize();\n\n            IGraphicsDeviceService graphicsDeviceService = (IGraphicsDeviceService)Services.GetService(typeof(IGraphicsDeviceService));\n            if (graphicsDeviceService != null)\n            {\n                if (graphicsDeviceService.GraphicsDevice != null)\n                    LoadContent();\n            }\n        }\n\n        /// <summary>\n        /// Called when the game should update.\n        ///\n        /// Updates the <see cref=\"GameComponent\"/> instances attached to this game.\n        /// Override this to update your game.\n        /// </summary>\n        /// <param name=\"gameTime\">The elapsed time since the last call to <see cref=\"Update\"/>.</param>\n        protected internal virtual void Update(GameTime gameTime)\n        {\n            Strategy.Update(gameTime);\n        }\n\n        /// <summary>\n        /// Called when the game should draw a frame.\n        ///\n        /// Draws the <see cref=\"DrawableGameComponent\"/> instances attached to this game.\n        /// Override this to render your game.\n        /// </summary>\n        /// <param name=\"gameTime\">A <see cref=\"GameTime\"/> instance containing the elapsed time since the last call to <see cref=\"Draw\"/> and the total time elapsed since the game started.</param>\n        protected internal virtual void Draw(GameTime gameTime)\n        {\n            Strategy.Draw(gameTime);\n        }\n\n        /// <summary>\n        /// Called when the game is exiting. Raises the <see cref=\"Exiting\"/> event.\n        /// </summary>\n        /// <param name=\"args\">The arguments to the <see cref=\"Exiting\"/> event.</param>\n        protected internal virtual void OnExiting(EventArgs args)\n        {\n            var handler = Exiting;\n            if (handler != null)\n                handler(this, args);\n        }\n        \n        /// <summary>\n        /// Called when the game gains focus. Raises the <see cref=\"Activated\"/> event.\n        /// </summary>\n        /// <param name=\"args\">The arguments to the <see cref=\"Activated\"/> event.</param>\n        protected virtual void OnActivated(EventArgs args)\n        {\n            AssertNotDisposed();\n\n            var handler = Activated;\n            if (handler != null)\n                handler(this, args);\n        }\n        \n        /// <summary>\n        /// Called when the game loses focus. Raises the <see cref=\"Deactivated\"/> event.\n        /// </summary>\n        /// <param name=\"args\">The arguments to the <see cref=\"Deactivated\"/> event.</param>\n        protected virtual void OnDeactivated(EventArgs args)\n        {\n            AssertNotDisposed();\n\n            var handler = Deactivated;\n            if (handler != null)\n                handler(this, args);\n        }\n\n        #endregion Protected Methods\n\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/GameComponent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{   \n    /// <summary>\n    /// An object that can be attached to a <see cref=\"Microsoft.Xna.Framework.Game\"/> and have its <see cref=\"Update\"/>\n    /// method called when <see cref=\"Microsoft.Xna.Framework.Game.Update\"/> is called.\n    /// </summary>\n    public class GameComponent : IGameComponent, IUpdateable, IDisposable\n    {\n        bool _enabled = true;\n        int _updateOrder;\n\n        /// <summary>\n        /// The <see cref=\"Game\"/> that owns this <see cref=\"GameComponent\"/>.\n        /// </summary>\n        public Game Game { get; private set; }\n\n        public bool Enabled\n        {\n            get { return _enabled; }\n            set\n            {\n                if (_enabled != value)\n                {\n                    _enabled = value;\n                    OnEnabledChanged(EventArgs.Empty);\n                }\n            }\n        }\n\n        public int UpdateOrder\n        {\n            get { return _updateOrder; }\n            set\n            {\n                if (_updateOrder != value)\n                {\n                    _updateOrder = value;\n                    OnUpdateOrderChanged(EventArgs.Empty);\n                }\n            }\n        }\n\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> EnabledChanged;\n\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> UpdateOrderChanged;\n\n        /// <summary>\n        /// Create a <see cref=\"GameComponent\"/>.\n        /// </summary>\n        /// <param name=\"game\">The game that this component will belong to.</param>\n        public GameComponent(Game game)\n        {\n            this.Game = game;\n        }\n\n        ~GameComponent()\n        {\n            Dispose(false);\n        }\n\n        public virtual void Initialize() { }\n\n        /// <summary>\n        /// Update the component.\n        /// </summary>\n        /// <param name=\"gameTime\"><see cref=\"GameTime\"/> of the <see cref=\"Game\"/>.</param>\n        public virtual void Update(GameTime gameTime) { }\n\n        /// <summary>\n        /// Called when <see cref=\"UpdateOrder\"/> changed. Raises the <see cref=\"UpdateOrderChanged\"/> event.\n        /// </summary>\n        /// <param name=\"args\">Arguments to the <see cref=\"UpdateOrderChanged\"/> event.</param>\n        protected virtual void OnUpdateOrderChanged(EventArgs args)\n        {\n            var handler = UpdateOrderChanged;\n            if (handler != null)\n                handler(this, args);\n        }\n\n        /// <summary>\n        /// Called when <see cref=\"Enabled\"/> changed. Raises the <see cref=\"EnabledChanged\"/> event.\n        /// </summary>\n        /// <param name=\"args\">Arguments to the <see cref=\"EnabledChanged\"/> event.</param>\n        protected virtual void OnEnabledChanged(EventArgs args)\n        {\n            var handler = EnabledChanged;\n            if (handler != null)\n                handler(this, args);\n        }\n\n        /// <summary>\n        /// Shuts down the component.\n        /// </summary>\n        protected virtual void Dispose(bool disposing) { }\n        \n        /// <summary>\n        /// Shuts down the component.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/GameComponentCollection.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// A collection of <see cref=\"IGameComponent\"/> instances.\n    /// </summary>\n    public sealed class GameComponentCollection : Collection<IGameComponent>\n    {\n        /// <summary>\n        /// Event that is triggered when a <see cref=\"GameComponent\"/> is added\n        /// to this <see cref=\"GameComponentCollection\"/>.\n        /// </summary>\n        public event EventHandler<GameComponentCollectionEventArgs> ComponentAdded;\n\n        /// <summary>\n        /// Event that is triggered when a <see cref=\"GameComponent\"/> is removed\n        /// from this <see cref=\"GameComponentCollection\"/>.\n        /// </summary>\n        public event EventHandler<GameComponentCollectionEventArgs> ComponentRemoved;\n\n        /// <summary>\n        /// Removes every <see cref=\"GameComponent\"/> from this <see cref=\"GameComponentCollection\"/>.\n        /// Triggers <see cref=\"OnComponentRemoved\"/> once for each <see cref=\"GameComponent\"/> removed.\n        /// </summary>\n        protected override void ClearItems()\n        {\n            for (int i = 0; i < base.Count; i++)\n            {\n                this.OnComponentRemoved(new GameComponentCollectionEventArgs(base[i]));\n            }\n            base.ClearItems();\n        }\n\n        protected override void InsertItem(int index, IGameComponent item)\n        {\n            if (base.IndexOf(item) != -1)\n            {\n                throw new ArgumentException(\"Cannot Add Same Component Multiple Times\");\n            }\n            base.InsertItem(index, item);\n            if (item != null)\n            {\n                this.OnComponentAdded(new GameComponentCollectionEventArgs(item));\n            }\n        }\n\n        private void OnComponentAdded(GameComponentCollectionEventArgs eventArgs)\n        {\n            var handler = ComponentAdded;\n            if (handler != null)\n                handler(this, eventArgs);\n        }\n\n        private void OnComponentRemoved(GameComponentCollectionEventArgs eventArgs)\n        {\n            var handler = ComponentRemoved;\n            if (handler != null)\n                handler(this, eventArgs);\n        }\n\n        protected override void RemoveItem(int index)\n        {\n            IGameComponent gameComponent = base[index];\n            base.RemoveItem(index);\n            if (gameComponent != null)\n            {\n                this.OnComponentRemoved(new GameComponentCollectionEventArgs(gameComponent));\n            }\n        }\n\n        protected override void SetItem(int index, IGameComponent item)\n        {\n            throw new NotSupportedException();\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Game/GameComponentCollectionEventArgs.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Arguments for the <see cref=\"GameComponentCollection.ComponentAdded\"/> and\n    /// <see cref=\"GameComponentCollection.ComponentRemoved\"/> events.\n    /// </summary>\n    public class GameComponentCollectionEventArgs : EventArgs\n    {\n        private IGameComponent _gameComponent;\n\n        /// <summary>\n        /// Create a <see cref=\"GameComponentCollectionEventArgs\"/> instance.\n        /// </summary>\n        /// <param name=\"gameComponent\">The <see cref=\"IGameComponent\"/> that the event notifies about.</param>\n        public GameComponentCollectionEventArgs(IGameComponent gameComponent)\n        {\n            _gameComponent = gameComponent;\n        }\n\n        /// <summary>\n        /// The <see cref=\"IGameComponent\"/> that the event notifies about.\n        /// </summary>\n        public IGameComponent GameComponent\n        {\n            get\n            {\n                return _gameComponent;\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Game/GameFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Platform\n{\n    public abstract class GameFactory\n    {\n        private volatile static GameFactory _current;\n\n        internal static GameFactory Current\n        {\n            get\n            {\n                GameFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (typeof(GameFactory))\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"GameFactory not found.\");\n                    Console.WriteLine(\"Initialize input with 'GameFactory.RegisterGameFactory(new ConcreteGameFactory());'.\");\n                    GameFactory gameFactory = CreateGameFactory();\n                    GameFactory.RegisterGameFactory(gameFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static GameFactory CreateGameFactory()\n        {\n            Console.WriteLine(\"Registering ConcreteGameFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.ConcreteGameFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(GameFactory)) && !type.IsAbstract)\n                    return (GameFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterGameFactory(GameFactory gameFactory)\n        {\n            if (gameFactory == null)\n                throw new NullReferenceException(\"gameFactory\");\n\n            lock (typeof(GameFactory))\n            {\n                if (_current == null)\n                    _current = gameFactory;\n                else\n                    throw new InvalidOperationException(\"gameFactory allready registered.\");\n            }\n        }\n\n        public abstract GameStrategy CreateGameStrategy(Game game);\n        public abstract GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game);\n\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/GameServiceContainer.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// A container for services for a <see cref=\"Game\"/>.\n    /// </summary>\n    public class GameServiceContainer : IServiceProvider\n    {\n        Dictionary<Type, object> services;\n\n        /// <summary>\n        /// Create an empty <see cref=\"GameServiceContainer\"/>.\n        /// </summary>\n        public GameServiceContainer()\n        {\n            services = new Dictionary<Type, object>();\n        }\n\n        /// <summary>\n        /// Add a service provider to this container.\n        /// </summary>\n        /// <param name=\"type\">The type of the service.</param>\n        /// <param name=\"provider\">The provider of the service.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// If <paramref name=\"type\"/> or <paramref name=\"provider\"/> is <code>null</code>.\n        /// </exception>\n        /// <exception cref=\"ArgumentException\">\n        /// If <paramref name=\"provider\"/> cannot be assigned to <paramref name=\"type\"/>.\n        /// </exception>\n        public void AddService(Type type, object provider)\n        {\n            if (type == null)\n                throw new ArgumentNullException(\"type\");\n            if (provider == null)\n                throw new ArgumentNullException(\"provider\");\n\n            Type providerType = provider.GetType();\n            if (!type.IsAssignableFrom(providerType))\n                throw new ArgumentException(\"The provider does not match the specified service type!\");\n\n            services.Add(type, provider);\n        }\n\n        /// <summary>\n        /// Get a service provider for the service of the specified type.\n        /// </summary>\n        /// <param name=\"type\">The type of the service.</param>\n        /// <returns>\n        /// A service provider for the service of the specified type or <code>null</code> if\n        /// no suitable service provider is registered in this container.\n        /// </returns>\n        /// <exception cref=\"ArgumentNullException\">If the specified type is <code>null</code>.</exception>\n        public object GetService(Type type)\n        {\n            if (type == null)\n                throw new ArgumentNullException(\"type\");\n\n            object service;\n            if (services.TryGetValue(type, out service))\n                return service;\n\n            return null;\n        }\n\n        /// <summary>\n        /// Remove the service with the specified type. Does nothing no service of the specified type is registered.\n        /// </summary>\n        /// <param name=\"type\">The type of the service to remove.</param>\n        /// <exception cref=\"ArgumentNullException\">If the specified type is <code>null</code>.</exception>\n        public void RemoveService(Type type)\n        {\n            if (type == null)\n                throw new ArgumentNullException(\"type\");\n\n            services.Remove(type);\n        }\n        \n        /// <summary>\n        /// Add a service provider to this container.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the service.</typeparam>\n        /// <param name=\"provider\">The provider of the service.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// If <paramref name=\"provider\"/> is <code>null</code>.\n        /// </exception>\n        public void AddService<T>(T provider)\n        {\n            AddService(typeof(T), provider);\n        }\n\n        /// <summary>\n        /// Get a service provider of the specified type.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the service provider.</typeparam>\n        /// <returns>\n        /// A service provider of the specified type or <code>null</code> if\n        /// no suitable service provider is registered in this container.\n        /// </returns>\n        public T GetService<T>() where T : class\n        {\n            var service = GetService(typeof(T));\n\n            if (service == null)\n                return null;\n\n            return (T)service;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/GameStrategy.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform\n{\n    public interface IPlatformGame\n    {\n        T GetStrategy<T>() where T : GameStrategy;\n    }\n\n    public abstract class GameStrategy : IDisposable\n    {\n        #region Fields\n\n        private GameServiceContainer _services;\n        private IGraphicsDeviceService _graphicsDeviceService;\n        private IGraphicsDeviceManager _graphicsDeviceManager;\n\n        private ContentManager _content;\n        private GameComponentCollection _components;\n        private DrawableComponents _drawableComponents = new DrawableComponents();\n        private UpdateableComponents _updateableComponents = new UpdateableComponents();\n\n        private TimeSpan _targetElapsedTime = TimeSpan.FromTicks(166666); // 60fps\n        private TimeSpan _inactiveSleepTime = TimeSpan.FromMilliseconds(20.0);\n\n        private TimeSpan _maxElapsedTime = TimeSpan.FromMilliseconds(500);\n\n        private bool _isFixedTimeStep = true;\n\n        private bool _shouldExit;\n        private bool _suppressDraw;\n\n        bool _isDisposed;\n\n        protected bool InFullScreenMode = false;\n        protected bool IsDisposed { get { return _isDisposed; } }\n\n        private bool _initialized = false;\n\n        #endregion\n\n        #region Construction/Destruction\n\n        protected GameStrategy(Game game)\n        {\n            if (game == null)\n                throw new ArgumentNullException(\"game\");\n\n            Game = game;\n\n            _services = new GameServiceContainer();\n            _components = new GameComponentCollection();\n            _content = new ContentManager(_services);\n\n            _services.AddService(typeof(GameStrategy), this);\n        }\n\n        ~GameStrategy()\n        {\n            Dispose(false);\n        }\n\n        #endregion Construction/Destruction\n\n        #region Public Properties\n\n        /// <summary>\n        /// Get a container holding service providers attached to this <see cref=\"Game\"/>.\n        /// </summary>\n        public GameServiceContainer Services { get { return _services; } }\n\n        /// <summary>\n        /// A collection of game components attached to this <see cref=\"Game\"/>.\n        /// </summary>\n        public GameComponentCollection Components { get { return _components; } }\n\n        /// <summary>\n        /// The <see cref=\"ContentManager\"/> of this <see cref=\"Game\"/>.\n        /// </summary>\n        /// <exception cref=\"ArgumentNullException\">If Content is set to <code>null</code>.</exception>\n        public ContentManager Content\n        {\n            get { return _content; }\n            set\n            {\n                if (value == null)\n                    throw new ArgumentNullException();\n\n                _content = value;\n            }\n        }\n\n\n        public GraphicsDevice GraphicsDevice\n        {\n            get\n            {\n                IGraphicsDeviceService graphicsDeviceService = this.GraphicsDeviceService;\n\n                if (graphicsDeviceService == null)\n                    throw new InvalidOperationException(\"No Graphics Device Service\");\n\n                return graphicsDeviceService.GraphicsDevice;\n            }\n        }\n\n        private IGraphicsDeviceService GraphicsDeviceService\n        {\n            get\n            {\n                if (_graphicsDeviceService != null)\n                    return _graphicsDeviceService;\n\n                _graphicsDeviceService = (IGraphicsDeviceService)Services.GetService(typeof(IGraphicsDeviceService));\n\n                return _graphicsDeviceService;\n            }\n        }\n\n        public GraphicsDeviceManager GraphicsDeviceManager\n        {\n            get\n            {\n                if (_graphicsDeviceManager != null)\n                    return (GraphicsDeviceManager)_graphicsDeviceManager;\n\n                _graphicsDeviceManager = (IGraphicsDeviceManager)Services.GetService(typeof(IGraphicsDeviceManager));\n\n                return (GraphicsDeviceManager)_graphicsDeviceManager;\n            }\n        }\n\n        /// <summary>\n        /// Gets the Game instance that owns this GamePlatform instance.\n        /// </summary>\n        public readonly Game Game;\n\n        private readonly GameTime Time = new GameTime();\n        private Stopwatch Timer = new Stopwatch();\n\n        private bool _isActive;\n        public bool IsActive\n        {\n            get { return _isActive; }\n        }\n\n        private bool _isVisible = true;\n        public bool IsVisible\n        {\n            get { return _isVisible; }\n            protected set { _isVisible = value; }\n        }\n\n        private bool _isMouseVisible;\n        public virtual bool IsMouseVisible\n        {\n            get { return _isMouseVisible; }\n            set { _isMouseVisible = value; }\n        }\n\n        private GameWindow _window;\n        public GameWindow Window\n        {\n            get { return _window; }\n            protected set { _window = value; }\n        }\n\n        public TimeSpan InactiveSleepTime\n        {\n            get { return _inactiveSleepTime; }\n            set\n            {\n                if (value < TimeSpan.Zero)\n                    throw new ArgumentOutOfRangeException(\"InactiveSleepTime must be positive.\");\n\n                _inactiveSleepTime = value;\n            }\n        }\n\n        /// <summary>\n        /// The maximum amount of time we will frameskip over and only perform Update calls with no Draw calls.\n        /// MonoGame extension.\n        /// </summary>\n        public TimeSpan MaxElapsedTime\n        {\n            get { return _maxElapsedTime; }\n            set\n            {\n                if (value < TimeSpan.FromMilliseconds(500))\n                    throw new ArgumentOutOfRangeException(\"MaxElapsedTime must be at least 0.5s\");\n\n                _maxElapsedTime = value;\n            }\n        }\n\n        /// <summary>\n        /// The time between frames when running with a fixed time step. <seealso cref=\"IsFixedTimeStep\"/>\n        /// </summary>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Target elapsed time must be strictly larger than zero.</exception>\n        public virtual TimeSpan TargetElapsedTime\n        {\n            get { return _targetElapsedTime; }\n            set\n            {\n                if (value <= TimeSpan.Zero)\n                    throw new ArgumentOutOfRangeException(\"TargetElapsedTime must be positive and non-zero.\");\n\n                _targetElapsedTime = value;\n            }\n        }\n\n        /// <summary>\n        /// Indicates if this game is running with a fixed time between frames.\n        /// \n        /// When set to <code>true</code> the target time between frames is\n        /// given by <see cref=\"TargetElapsedTime\"/>.\n        /// </summary>\n        public bool IsFixedTimeStep\n        {\n            get { return _isFixedTimeStep; }\n            set { _isFixedTimeStep = value; }\n        }\n\n        public bool ShouldExit { get { return _shouldExit; } }\n\n        #endregion\n\n        #region Events\n\n        public event EventHandler<EventArgs> Activated;\n        public event EventHandler<EventArgs> Deactivated;\n\n        protected virtual void OnActivated(EventArgs e)\n        {\n            var handler = Activated;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected virtual void OnDeactivated(EventArgs e)\n        {\n            var handler = Deactivated;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        #endregion Events\n\n        #region Methods\n\n        protected void SetWindowListeners()\n        {\n            _window.Activated += GameWindow_Activated;\n            _window.Deactivated += GameWindow_Deactivated;\n        }\n\n        private void GameWindow_Activated(object sender, EventArgs e)\n        {\n            _isActive = true;\n\n            var handler = Activated;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        private void GameWindow_Deactivated(object sender, EventArgs e)\n        {\n            _isActive = false;\n\n            var handler = Deactivated;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        public void RunOneFrame()\n        {\n            this.CallInitialize();\n            this.CallBeginRun();\n\n            //Not quite right..\n            Game.Tick();\n\n            this.CallEndRun();\n        }\n\n\n        protected internal virtual void Run()\n        {\n            this.CallInitialize();\n            this.CallBeginRun();\n            // XNA runs one Update even before showing the window\n            this.CallUpdate(new GameTime());\n\n            this.RunGameLoop();\n\n            this.CallEndRun();\n            this.CallExiting();\n        }\n\n        protected virtual void RunGameLoop()\n        {\n            throw new NotImplementedException(\"Blocking Run() is not implemented.\");\n        }\n\n        #region Internal Methods\n\n        protected void CallInitialize()\n        {\n            if (!_initialized)\n            {\n                this.Game.AssertNotDisposed();\n\n                GraphicsDeviceManager gdm = this.GraphicsDeviceManager;\n                if (gdm != null)\n                    ((IGraphicsDeviceManager)gdm).CreateDevice();\n\n                this.Game.Initialize();\n\n                this.InitializeComponents();\n\n                _initialized = true;\n            }\n        }\n\n        protected void CallBeginRun()\n        {\n            this.Game.BeginRun();\n            this.Timer.Restart();\n        }\n\n        protected void CallUpdate(GameTime gameTime)\n        {\n            this.Game.AssertNotDisposed();\n\n            ((IFrameworkDispatcher)FrameworkDispatcher.Current).Update();\n            this.Game.Update(gameTime);\n        }\n\n        protected void CallDraw(GameTime gameTime)\n        {\n            this.Game.AssertNotDisposed();\n\n            bool gdmBeginDraw;\n            IGraphicsDeviceManager gdm = (IGraphicsDeviceManager)this.Services.GetService(typeof(IGraphicsDeviceManager));\n            if (gdm != null)\n                gdmBeginDraw = gdm.BeginDraw();\n            else // (gdm == null)\n                gdmBeginDraw = true;\n\n            // Draw and EndDraw should not be called if BeginDraw returns false.\n            // http://stackoverflow.com/questions/4054936/manual-control-over-when-to-redraw-the-screen/4057180#4057180\n            // http://stackoverflow.com/questions/4235439/xna-3-1-to-4-0-requires-constant-redraw-or-will-display-a-purple-screen\n            if (gdmBeginDraw && this.Game.BeginDraw())\n            {\n                this.Game.Draw(gameTime);\n                this.Game.EndDraw();\n            }\n        }\n\n        protected void CallEndRun()\n        {\n            this.Game.EndRun();\n        }\n\n        protected void CallExiting()\n        {\n            this.Game.OnExiting(EventArgs.Empty);\n            this.Game.UnloadContent();\n        }\n\n        #endregion Internal Methods\n\n        public virtual void Initialize()\n        {\n            // According to the information given on MSDN (see link below), all\n            // GameComponents in Components at the time Initialize() is called\n            // are initialized.\n            // http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.initialize.aspx\n            // Initialize all existing components\n            for (int i = 0; i < this.Components.Count; i++)\n                this.Components[i].Initialize();\n\n            this._graphicsDeviceService = (IGraphicsDeviceService)Services.GetService(typeof(IGraphicsDeviceService));\n        }\n\n        internal void InitializeComponents()\n        {\n            // We need to do this after virtual Initialize(...) is called.\n            // 1. Categorize components into IUpdateable and IDrawable lists.\n            // 2. Subscribe to Added/Removed events to keep the categorized\n            //    lists synced and to Initialize future components as they are\n            //    added.            \n\n            _updateableComponents.ClearUpdatables();\n            _drawableComponents.ClearDrawables();\n            for (int i = 0; i < Components.Count; i++)\n            {\n                if (Components[i] is IUpdateable)\n                    _updateableComponents.AddUpdatable((IUpdateable)Components[i]);\n                if (Components[i] is IDrawable)\n                    _drawableComponents.AddDrawable((IDrawable)Components[i]);\n            }\n\n            Components.ComponentAdded += Components_ComponentAdded;\n            Components.ComponentRemoved += Components_ComponentRemoved;\n        }\n\n        private void Components_ComponentAdded(object sender, GameComponentCollectionEventArgs e)\n        {\n            // Since we only subscribe to ComponentAdded after the graphics\n            // devices are set up, it is safe to just blindly call Initialize.\n            e.GameComponent.Initialize();\n\n            if (e.GameComponent is IUpdateable)\n                _updateableComponents.AddUpdatable((IUpdateable)e.GameComponent);\n            if (e.GameComponent is IDrawable)\n                _drawableComponents.AddDrawable((IDrawable)e.GameComponent);\n        }\n\n        private void Components_ComponentRemoved(object sender, GameComponentCollectionEventArgs e)\n        {\n            if (e.GameComponent is IUpdateable)\n                _updateableComponents.RemoveUpdatable((IUpdateable)e.GameComponent);\n            if (e.GameComponent is IDrawable)\n                _drawableComponents.RemoveDrawable((IDrawable)e.GameComponent);\n        }\n\n\n        /// <summary>\n        /// When implemented in a derived, ends the active run loop.\n        /// </summary>\n        public virtual void Exit()\n        {\n            _shouldExit = true;\n            SuppressDraw();\n        }\n\n        public abstract void TickExiting();\n\n        /// <summary>\n        /// MSDN: Use this method if your game is recovering from a slow-running state, and ElapsedGameTime is too large to be useful.\n        /// Frame timing is generally handled by the Game class, but some platforms still handle it elsewhere. Once all platforms\n        /// rely on the Game class's functionality, this method and any overrides should be removed.\n        /// </summary>\n        public void ResetElapsedTime()\n        {\n            Timer.Reset();\n            Timer.Start();\n\n            Time.ElapsedGameTime = TimeSpan.Zero;\n\n            _currElapsedTime = TimeSpan.Zero;\n            _prevElapsedTime = TimeSpan.Zero;\n        }\n\n        internal void Update(GameTime gameTime)\n        {\n            _updateableComponents.UpdateEnabledComponent(gameTime);\n        }\n\n        internal void Draw(GameTime gameTime)\n        {\n            _drawableComponents.DrawVisibleComponents(gameTime);\n        }\n\n        /// <summary>\n        /// Suppress the next <see cref=\"Draw\"/> call in the game loop.\n        /// </summary>\n        public void SuppressDraw()\n        {\n            _suppressDraw = true;\n        }\n\n        public virtual bool BeginDraw()\n        {\n            return true;\n        }\n\n        public virtual void EndDraw()\n        {\n            IGraphicsDeviceManager gdm = (IGraphicsDeviceManager)Services.GetService(typeof(IGraphicsDeviceManager));\n            if (gdm != null)\n                gdm.EndDraw();\n\n        }\n\n        private TimeSpan _currElapsedTime;\n        private TimeSpan _prevElapsedTime;\n        private int _updateFrameLag;\n\n        /// <summary>\n        /// Run one iteration of the game loop.\n        ///\n        /// Makes at least one call to <see cref=\"Update\"/>\n        /// and exactly one call to <see cref=\"Draw\"/> if drawing is not supressed.\n        /// When <see cref=\"IsFixedTimeStep\"/> is set to <code>false</code> this will\n        /// make exactly one call to <see cref=\"Update\"/>.\n        /// </summary>\n        public virtual void Tick()\n        {\n            // implement InactiveSleepTime to save battery life \n            // and/or release CPU time to other threads and processes.\n            if (!IsActive)\n                System.Threading.Thread.Sleep((int)InactiveSleepTime.TotalMilliseconds);\n\n            RetryTick:\n\n            // Advance the accumulated elapsed time.\n            TimeSpan elapsedTime = Timer.Elapsed;\n            TimeSpan dt = elapsedTime - _prevElapsedTime;\n            _currElapsedTime += dt;\n            _prevElapsedTime = elapsedTime;\n\n            if (IsFixedTimeStep && _currElapsedTime < TargetElapsedTime)\n            {\n                // When game IsActive use CPU Spin.\n                /*\n                if ((TargetElapsedTime - _currElapsedTime).TotalMilliseconds >= 2.0)\n                {\n#if WINDOWSDX || DESKTOPGL || ANDROID || IOS || TVOS || (UAP || WINUI)\n                    System.Threading.Thread.Sleep(0);\n#endif\n                }\n                */\n\n                // Keep looping until it's time to perform the next update\n                goto RetryTick;\n            }\n\n            // Do not allow any update to take longer than our maximum.\n            TimeSpan maxElapsedTime = TimeSpan.FromTicks(Math.Max(MaxElapsedTime.Ticks, TargetElapsedTime.Ticks));\n            if (_currElapsedTime > maxElapsedTime)\n                _currElapsedTime = maxElapsedTime;\n\n            if (IsFixedTimeStep)\n            {\n                Time.ElapsedGameTime = TargetElapsedTime;\n                int stepCount = 0;\n\n                // Perform as many full fixed length time steps as we can.\n                while (_currElapsedTime >= TargetElapsedTime && !_shouldExit)\n                {\n                    Time.TotalGameTime += TargetElapsedTime;\n                    _currElapsedTime -= TargetElapsedTime;\n                    stepCount++;\n\n                    this.CallUpdate(Time);\n                }\n\n                //Every update after the first accumulates lag\n                _updateFrameLag += Math.Max(0, stepCount - 1);\n                _updateFrameLag = Math.Min(_updateFrameLag, 5);\n\n                //If we think we are running slowly, wait until the lag clears before resetting it\n                if (Time.IsRunningSlowly)\n                {\n                    if (_updateFrameLag == 0)\n                        Time.IsRunningSlowly = false;\n                }\n                else if (_updateFrameLag >= 5)\n                {\n                    //If we lag more than 5 frames, start thinking we are running slowly\n                    Time.IsRunningSlowly = true;\n                }\n\n                //Every time we just do one update and one draw, then we are not running slowly, so decrease the lag\n                if (stepCount == 1 && _updateFrameLag > 0)\n                    _updateFrameLag--;\n\n                // Draw needs to know the total elapsed time\n                // that occurred for the fixed length updates.\n                Time.ElapsedGameTime = TimeSpan.FromTicks(TargetElapsedTime.Ticks * stepCount);\n            }\n            else\n            {\n                // Perform a single variable length update.\n                Time.ElapsedGameTime = _currElapsedTime;\n                Time.TotalGameTime += _currElapsedTime;\n                _currElapsedTime = TimeSpan.Zero;\n\n                this.CallUpdate(Time);\n            }\n\n            if (!_suppressDraw)\n                this.CallDraw(Time);\n            else\n                _suppressDraw = false;\n        }\n\n\n        #endregion Methods\n\n        #region IDisposable implementation\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing,\n        /// releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    for (int i = 0; i < _components.Count; i++)\n                    {\n                        IDisposable disposable = _components[i] as IDisposable;\n                        if (disposable != null)\n                            disposable.Dispose();\n                    }\n                    _components = null;\n\n                    if (_content != null)\n                    {\n                        _content.Dispose();\n                        _content = null;\n                    }\n\n                    if (_graphicsDeviceManager != null)\n                    {\n                        ((IDisposable)_graphicsDeviceManager).Dispose();\n                        _graphicsDeviceManager = null;\n                    }\n\n                    if (_window != null)\n                    {\n                        _window.Deactivated -= GameWindow_Deactivated;\n                        _window.Activated -= GameWindow_Activated;\n                    }\n                }\n\n                _services.RemoveService(typeof(GameStrategy));\n\n                _isDisposed = true;\n            }\n        }\n\n        #endregion\n\n\n        #region Component Collections\n\n        private class DrawableComponents\n        {\n            private readonly List<IDrawable> _drawableComponents = new List<IDrawable>();\n            private readonly List<IDrawable> _visibleComponents = new List<IDrawable>();\n            private bool _isVisibleCacheInvalidated = true;\n\n            private readonly List<DrawableJournalEntry> _addDrawableJournal = new List<DrawableJournalEntry>();\n            private readonly List<int> _removeDrawableJournal = new List<int>();\n            private int _addDrawableJournalCount;\n\n            public void AddDrawable(IDrawable component)\n            {\n                // NOTE: We subscribe to item events after components in _addDrawableJournal have been merged.\n                _addDrawableJournal.Add(new DrawableJournalEntry(component, _addDrawableJournalCount++));\n                _isVisibleCacheInvalidated = true;\n            }\n\n            public void RemoveDrawable(IDrawable component)\n            {\n                if (_addDrawableJournal.Remove(new DrawableJournalEntry(component, -1)))\n                    return;\n\n                int index = _drawableComponents.IndexOf(component);\n                if (index >= 0)\n                {\n                    component.VisibleChanged -= Component_VisibleChanged;\n                    component.DrawOrderChanged -= Component_DrawOrderChanged;\n                    _removeDrawableJournal.Add(index);\n                    _isVisibleCacheInvalidated = true;\n                }\n            }\n\n            public void ClearDrawables()\n            {\n                for (int i = 0; i < _drawableComponents.Count; i++)\n                {\n                    _drawableComponents[i].VisibleChanged -= Component_VisibleChanged;\n                    _drawableComponents[i].DrawOrderChanged -= Component_DrawOrderChanged;\n                }\n\n                _addDrawableJournal.Clear();\n                _removeDrawableJournal.Clear();\n                _drawableComponents.Clear();\n                _isVisibleCacheInvalidated = true;\n            }\n\n            private void Component_VisibleChanged(object sender, EventArgs e)\n            {\n                _isVisibleCacheInvalidated = true;\n            }\n\n            private void Component_DrawOrderChanged(object sender, EventArgs e)\n            {\n                IDrawable component = (IDrawable)sender;\n                int index = _drawableComponents.IndexOf(component);\n\n                _addDrawableJournal.Add(new DrawableJournalEntry(component, _addDrawableJournalCount++));\n\n                component.VisibleChanged -= Component_VisibleChanged;\n                component.DrawOrderChanged -= Component_DrawOrderChanged;\n                _removeDrawableJournal.Add(index);\n\n                _isVisibleCacheInvalidated = true;\n            }\n\n            internal void DrawVisibleComponents(GameTime gameTime)\n            {\n                if (_removeDrawableJournal.Count > 0)\n                    ProcessRemoveDrawableJournal();\n                if (_addDrawableJournal.Count > 0)\n                    ProcessAddDrawableJournal();\n\n                // rebuild _visibleComponents\n                if (_isVisibleCacheInvalidated)\n                {\n                    _visibleComponents.Clear();\n                    for (int i = 0; i < _drawableComponents.Count; i++)\n                        if (_drawableComponents[i].Visible)\n                            _visibleComponents.Add(_drawableComponents[i]);\n\n                    _isVisibleCacheInvalidated = false;\n                }\n\n                // draw components\n                for (int i = 0; i < _visibleComponents.Count; i++)\n                    _visibleComponents[i].Draw(gameTime);\n\n                // If the cache was invalidated as a result of processing components,\n                // now is a good time to clear it and give the GC (more of) a\n                // chance to do its thing.\n                if (_isVisibleCacheInvalidated)\n                    _visibleComponents.Clear();\n            }\n\n            private void ProcessRemoveDrawableJournal()\n            {\n                // Remove components in reverse.\n                _removeDrawableJournal.Sort();\n                for (int i = _removeDrawableJournal.Count - 1; i >= 0; i--)\n                    _drawableComponents.RemoveAt(_removeDrawableJournal[i]);\n\n                _removeDrawableJournal.Clear();\n            }\n\n            private void ProcessAddDrawableJournal()\n            {\n                // Prepare the _addJournal to be merge-sorted with _drawableComponents.\n                // _drawableComponents is always sorted.\n                _addDrawableJournal.Sort(DrawableJournalEntry.CompareAddJournalEntry);\n                _addDrawableJournalCount = 0;\n\n                int iAddJournal = 0;\n                int iItems = 0;\n\n                while (iItems < _drawableComponents.Count && iAddJournal < _addDrawableJournal.Count)\n                {\n                    IDrawable addDrawableItem = _addDrawableJournal[iAddJournal].Component;\n                    // If addDrawableItem is less than (belongs before) _items[iItems], insert it.\n                    if (Comparer<int>.Default.Compare(addDrawableItem.DrawOrder, _drawableComponents[iItems].DrawOrder) < 0)\n                    {\n                        addDrawableItem.VisibleChanged += Component_VisibleChanged;\n                        addDrawableItem.DrawOrderChanged += Component_DrawOrderChanged;\n                        _drawableComponents.Insert(iItems, addDrawableItem);\n                        iAddJournal++;\n                    }\n                    // Always increment iItems, either because we inserted and\n                    // need to move past the insertion, or because we didn't\n                    // insert and need to consider the next element.\n                    iItems++;\n                }\n\n                // If _addJournal had any \"tail\" items, append them all now.\n                for (; iAddJournal < _addDrawableJournal.Count; iAddJournal++)\n                {\n                    IDrawable addDrawableItem = _addDrawableJournal[iAddJournal].Component;\n                    addDrawableItem.VisibleChanged += Component_VisibleChanged;\n                    addDrawableItem.DrawOrderChanged += Component_DrawOrderChanged;\n                    _drawableComponents.Add(addDrawableItem);\n                }\n\n                _addDrawableJournal.Clear();\n            }\n\n            private struct DrawableJournalEntry\n            {\n                private readonly int AddOrder;\n                public readonly IDrawable Component;\n\n                public DrawableJournalEntry(IDrawable component, int addOrder)\n                {\n                    Component = component;\n                    this.AddOrder = addOrder;\n                }\n\n                public override int GetHashCode()\n                {\n                    return Component.GetHashCode();\n                }\n\n                public override bool Equals(object obj)\n                {\n                    if (!(obj is DrawableJournalEntry))\n                        return false;\n\n                    return object.ReferenceEquals(Component, ((DrawableJournalEntry)obj).Component);\n                }\n\n                internal static int CompareAddJournalEntry(DrawableJournalEntry x, DrawableJournalEntry y)\n                {\n                    int result = Comparer<int>.Default.Compare(x.Component.DrawOrder, y.Component.DrawOrder);\n                    if (result == 0)\n                        result = x.AddOrder - y.AddOrder;\n                    return result;\n                }\n            }\n        }\n\n        private class UpdateableComponents\n        {\n            private readonly List<IUpdateable> _updateableComponents = new List<IUpdateable>();\n            private readonly List<IUpdateable> _enabledComponents = new List<IUpdateable>();\n            private bool _isEnabledCacheInvalidated = true;\n\n            private readonly List<UpdateableJournalEntry> _addUpdateableJournal = new List<UpdateableJournalEntry>();\n            private readonly List<int> _removeUpdateableJournal = new List<int>();\n            private int _addUpdateableJournalCount;\n\n            public void AddUpdatable(IUpdateable component)\n            {\n                // NOTE: We subscribe to item events after items in _addUpdateableJournal have been merged.\n                _addUpdateableJournal.Add(new UpdateableJournalEntry(component, _addUpdateableJournalCount++));\n                _isEnabledCacheInvalidated = true;\n            }\n\n            public void RemoveUpdatable(IUpdateable component)\n            {\n                if (_addUpdateableJournal.Remove(new UpdateableJournalEntry(component, -1)))\n                    return;\n\n                int index = _updateableComponents.IndexOf(component);\n                if (index >= 0)\n                {\n                    component.EnabledChanged -= Component_EnabledChanged;\n                    component.UpdateOrderChanged -= Component_UpdateOrderChanged;\n\n                    _removeUpdateableJournal.Add(index);\n                    _isEnabledCacheInvalidated = true;\n                }\n            }\n\n            public void ClearUpdatables()\n            {\n                for (int i = 0; i < _updateableComponents.Count; i++)\n                {\n                    _updateableComponents[i].EnabledChanged -= Component_EnabledChanged;\n                    _updateableComponents[i].UpdateOrderChanged -= Component_UpdateOrderChanged;\n                }\n\n                _addUpdateableJournal.Clear();\n                _removeUpdateableJournal.Clear();\n                _updateableComponents.Clear();\n\n                _isEnabledCacheInvalidated = true;\n            }\n\n            private void Component_EnabledChanged(object sender, EventArgs e)\n            {\n                _isEnabledCacheInvalidated = true;\n            }\n\n            private void Component_UpdateOrderChanged(object sender, EventArgs e)\n            {\n                IUpdateable component = (IUpdateable)sender;\n                int index = _updateableComponents.IndexOf(component);\n\n                _addUpdateableJournal.Add(new UpdateableJournalEntry(component, _addUpdateableJournalCount++));\n\n                component.EnabledChanged -= Component_EnabledChanged;\n                component.UpdateOrderChanged -= Component_UpdateOrderChanged;\n                _removeUpdateableJournal.Add(index);\n\n                _isEnabledCacheInvalidated = true;\n            }\n\n            private void ProcessRemoveUpdateableJournal()\n            {\n                // Remove components in reverse.\n                _removeUpdateableJournal.Sort();\n                for (int i = _removeUpdateableJournal.Count - 1; i >= 0; i--)\n                    _updateableComponents.RemoveAt(_removeUpdateableJournal[i]);\n\n                _removeUpdateableJournal.Clear();\n            }\n\n            internal void UpdateEnabledComponent(GameTime gameTime)\n            {\n                if (_removeUpdateableJournal.Count > 0)\n                    ProcessRemoveUpdateableJournal();\n                if (_addUpdateableJournal.Count > 0)\n                    ProcessAddUpdateableJournal();\n\n                // rebuild _enabledComponents\n                if (_isEnabledCacheInvalidated)\n                {\n                    _enabledComponents.Clear();\n                    for (int i = 0; i < _updateableComponents.Count; i++)\n                        if (_updateableComponents[i].Enabled)\n                            _enabledComponents.Add(_updateableComponents[i]);\n\n                    _isEnabledCacheInvalidated = false;\n                }\n\n                // update components\n                for (int i = 0; i < _enabledComponents.Count; i++)\n                    _enabledComponents[i].Update(gameTime);\n\n                // If the cache was invalidated as a result of processing components,\n                // now is a good time to clear it and give the GC (more of) a\n                // chance to do its thing.\n                if (_isEnabledCacheInvalidated)\n                    _enabledComponents.Clear();\n            }\n\n            private void ProcessAddUpdateableJournal()\n            {\n                // Prepare the _addJournal to be merge-sorted with _updateableComponents.\n                // _updateableComponents is always sorted.\n                _addUpdateableJournal.Sort(UpdateableJournalEntry.CompareAddJournalEntry);\n                _addUpdateableJournalCount = 0;\n\n                int iAddJournal = 0;\n                int iItems = 0;\n\n                while (iItems < _updateableComponents.Count && iAddJournal < _addUpdateableJournal.Count)\n                {\n                    IUpdateable addUpdateableItem = _addUpdateableJournal[iAddJournal].Component;\n                    // If addUpdateableItem is less than (belongs before) _items[iItems], insert it.\n                    if (Comparer<int>.Default.Compare(addUpdateableItem.UpdateOrder, _updateableComponents[iItems].UpdateOrder) < 0)\n                    {\n                        addUpdateableItem.EnabledChanged += Component_EnabledChanged;\n                        addUpdateableItem.UpdateOrderChanged += Component_UpdateOrderChanged;\n                        _updateableComponents.Insert(iItems, addUpdateableItem);\n                        iAddJournal++;\n                    }\n                    // Always increment iItems, either because we inserted and\n                    // need to move past the insertion, or because we didn't\n                    // insert and need to consider the next element.\n                    iItems++;\n                }\n\n                // If _addJournal had any \"tail\" items, append them all now.\n                for (; iAddJournal < _addUpdateableJournal.Count; iAddJournal++)\n                {\n                    IUpdateable addUpdateableItem = _addUpdateableJournal[iAddJournal].Component;\n                    addUpdateableItem.EnabledChanged += Component_EnabledChanged;\n                    addUpdateableItem.UpdateOrderChanged += Component_UpdateOrderChanged;\n\n                    _updateableComponents.Add(addUpdateableItem);\n                }\n\n                _addUpdateableJournal.Clear();\n            }\n\n            private struct UpdateableJournalEntry\n            {\n                private readonly int AddOrder;\n                public readonly IUpdateable Component;\n\n                public UpdateableJournalEntry(IUpdateable component, int addOrder)\n                {\n                    Component = component;\n                    AddOrder = addOrder;\n                }\n\n                public override int GetHashCode()\n                {\n                    return Component.GetHashCode();\n                }\n\n                public override bool Equals(object obj)\n                {\n                    if (!(obj is UpdateableJournalEntry))\n                        return false;\n\n                    return object.Equals(Component, ((UpdateableJournalEntry)obj).Component);\n                }\n\n                internal static int CompareAddJournalEntry(UpdateableJournalEntry x, UpdateableJournalEntry y)\n                {\n                    int result = Comparer<int>.Default.Compare(x.Component.UpdateOrder, y.Component.UpdateOrder);\n                    if (result == 0)\n                        result = x.AddOrder - y.AddOrder;\n                    return result;\n                }\n            }\n        }\n        #endregion Component Collections\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Game/GameTime.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Holds the time state of a <see cref=\"Game\"/>.\n    /// </summary>\n    public class GameTime\n    {\n        /// <summary>\n        /// Time since the start of the <see cref=\"Game\"/>.\n        /// </summary>\n        public TimeSpan TotalGameTime { get; protected internal set; }\n\n        /// <summary>\n        /// Time since the last call to <see cref=\"Game.Update\"/>.\n        /// </summary>\n        public TimeSpan ElapsedGameTime { get; protected internal set; }\n\n        /// <summary>\n        /// Indicates whether the <see cref=\"Game\"/> is running slowly.\n        ///\n        /// This flag is set to <c>true</c> when <see cref=\"Game.IsFixedTimeStep\"/> is set to <c>true</c>\n        /// and a tick of the game loop takes longer than <see cref=\"Game.TargetElapsedTime\"/> for\n        /// a few frames in a row.\n        /// </summary>\n        public bool IsRunningSlowly { get; protected internal set; }\n\n        /// <summary>\n        /// Create a <see cref=\"GameTime\"/> instance with a <see cref=\"TotalGameTime\"/> and\n        /// <see cref=\"ElapsedGameTime\"/> of <code>0</code>.\n        /// </summary>\n        public GameTime()\n        {\n            TotalGameTime = TimeSpan.Zero;\n            ElapsedGameTime = TimeSpan.Zero;\n            IsRunningSlowly = false;\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"GameTime\"/> with the specified <see cref=\"TotalGameTime\"/>\n        /// and <see cref=\"ElapsedGameTime\"/>.\n        /// </summary>\n        /// <param name=\"totalGameTime\">The total game time elapsed since the start of the <see cref=\"Game\"/>.</param>\n        /// <param name=\"elapsedGameTime\">The time elapsed since the last call to <see cref=\"Game.Update\"/>.</param>\n        public GameTime(TimeSpan totalGameTime, TimeSpan elapsedGameTime)\n        {\n            TotalGameTime = totalGameTime;\n            ElapsedGameTime = elapsedGameTime;\n            IsRunningSlowly = false;\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"GameTime\"/> with the specified <see cref=\"TotalGameTime\"/>\n        /// and <see cref=\"ElapsedGameTime\"/>.\n        /// </summary>\n        /// <param name=\"totalRealTime\">The total game time elapsed since the start of the <see cref=\"Game\"/>.</param>\n        /// <param name=\"elapsedRealTime\">The time elapsed since the last call to <see cref=\"Game.Update\"/>.</param>\n        /// <param name=\"isRunningSlowly\">A value indicating if the <see cref=\"Game\"/> is running slowly.</param>\n        public GameTime(TimeSpan totalRealTime, TimeSpan elapsedRealTime, bool isRunningSlowly)\n        {\n            TotalGameTime = totalRealTime;\n            ElapsedGameTime = elapsedRealTime;\n            IsRunningSlowly = isRunningSlowly;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Game/GameWindow.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.ComponentModel;\nusing Microsoft.Xna.Framework.Input;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// The system window used by a <see cref=\"Game\"/>.\n    /// </summary>\n    public abstract class GameWindow\n    {\n        #region Properties\n\n        /// <summary>\n        /// Indicates if users can resize this <see cref=\"GameWindow\"/>.\n        /// </summary>\n        [DefaultValue(false)]\n        public abstract bool AllowUserResizing { get; set; }\n\n        /// <summary>\n        /// The client rectangle of the <see cref=\"GameWindow\"/>.\n        /// </summary>\n        public abstract Rectangle ClientBounds { get; }\n\n        private bool _disableAltF4;\n\n        /// <summary>\n        /// Gets or sets a bool that enables usage of Alt+F4 for window closing on desktop platforms. Value is true by default.\n        /// </summary>\n        public bool AllowAltF4\n        { \n            get { return !_disableAltF4; }\n            set { _disableAltF4 = !value; }\n        }\n\n        /// <summary>\n        /// The display orientation on a mobile device.\n        /// </summary>\n        public abstract DisplayOrientation CurrentOrientation { get; }\n\n        /// <summary>\n        /// The handle to the window used by the backend windowing service.\n        ///\n        /// For WindowsDX this is the Win32 window handle (HWND).\n        /// For DesktopGL this is the SDL window handle.\n        /// For UWP this is a handle to an IUnknown interface for the CoreWindow.\n        /// </summary>\n        public abstract IntPtr Handle { get; }\n\n        /// <summary>\n        /// The name of the screen the window is currently on.\n        /// </summary>\n        public abstract string ScreenDeviceName { get; }\n\n        private string _title;\n\n        /// <summary>\n        /// Gets or sets the title of the game window.\n        /// </summary>\n        /// <remarks>\n        /// For UWP this has no effect. The title should be\n        /// set by using the DisplayName property found in the app manifest file.\n        /// </remarks>\n        public string Title\n        {\n            get { return _title; }\n            set \n            {\n                if (value != null)\n                {\n                    if (_title != value)\n                    {\n                        SetTitle(value);\n                        _title = value;\n                    }\n                }\n                else\n                    throw new ArgumentNullException(\"Title\");\n            }\n        }\n\n        /// <summary>\n        /// Determines whether the border of the window is visible. Currently only supported on the WindowsDX and DesktopGL platforms.\n        /// </summary>\n        /// <exception cref=\"System.NotImplementedException\">\n        /// Thrown when trying to use this property on a platform other than WinowsDX or DesktopGL.\n        /// </exception>\n        public virtual bool IsBorderless\n        {\n            get { return false; }\n            set { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"GameWindow\"/>.\n        /// </summary>\n        protected GameWindow()\n        {\n        }\n\n        #endregion Properties\n\n        #region Events\n\n        /// <summary>\n        /// Raised when the user resized the window or the window switches from fullscreen mode to\n        /// windowed mode or vice versa.\n        /// </summary>\n        public event EventHandler<EventArgs> ClientSizeChanged;\n\n        /// <summary>\n        /// Raised when <see cref=\"CurrentOrientation\"/> changed.\n        /// </summary>\n        public event EventHandler<EventArgs> OrientationChanged;\n\n        /// <summary>\n        /// Raised when <see cref=\"ScreenDeviceName\"/> changed.\n        /// </summary>\n        public event EventHandler<EventArgs> ScreenDeviceNameChanged;\n\n        internal event EventHandler<EventArgs> Deactivated;\n        internal event EventHandler<EventArgs> Activated;\n\n        /// <summary>\n        /// Use this event to user text input.\n        /// \n        /// This event is not raised by noncharacter keys except control characters such as backspace, tab, carriage return and escape.\n        /// This event also supports key repeat.\n        /// </summary>\n        /// <remarks>\n        /// This event is only supported on desktop/browser platforms.\n        /// </remarks>\n        public event EventHandler<TextInputEventArgs> TextInput;\n\n        /// <summary>\n        /// Buffered keyboard KeyDown event.\n        /// </summary>\n        public event EventHandler<InputKeyEventArgs> KeyDown;\n\n        /// <summary>\n        /// Buffered keyboard KeyUp event.\n        /// </summary>\n        public event EventHandler<InputKeyEventArgs> KeyUp;\n\n        /// <summary>\n        /// This event is raised when user drops a file into the game window\n        /// </summary>\n        /// <remarks>\n        /// This event is only supported on desktop platforms.\n        /// </remarks>\n        public event EventHandler<FileDropEventArgs> FileDrop;\n\n        #endregion Events\n\n        /// <summary>\n        /// Called when the window gains focus.\n        /// </summary>\n        protected void OnActivated()\n        {\n            var handler = Activated;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        /// <summary>\n        /// Called when the window loses focus.\n        /// </summary>\n        protected void OnDeactivated()\n        {\n            var handler = Deactivated;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected void OnClientSizeChanged()\n        {\n            var handler = ClientSizeChanged;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n         \n        /// <summary>\n        /// Called when <see cref=\"CurrentOrientation\"/> changed. Raises the <see cref=\"OnOrientationChanged\"/> event.\n        /// </summary>\n        protected void OnOrientationChanged()\n        {\n            var handler = OrientationChanged;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected void OnPaint()\n        {\n        }\n\n        /// <summary>\n        /// Called when <see cref=\"ScreenDeviceName\"/> changed. Raises the <see cref=\"ScreenDeviceNameChanged\"/> event.\n        /// </summary>\n        protected void OnScreenDeviceNameChanged()\n        {\n            var handler = ScreenDeviceNameChanged;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        protected void OnFileDrop(FileDropEventArgs e)\n        {\n            var handler = FileDrop;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        /// <summary>\n        /// Set the title of this window to the given string.\n        /// </summary>\n        /// <param name=\"title\">The new title of the window.</param>\n        protected abstract void SetTitle(string title);\n\n\n        #region Keyboard events\n\n        /// <summary>\n        /// Called when the window receives text input. Raises the <see cref=\"TextInput\"/> event.\n        /// </summary>\n        protected void OnTextInput(char character, Keys key)\n        {\n            var handler = TextInput;\n            if (handler != null)\n                handler(this, new TextInputEventArgs(key, character));\n        }\n        protected void OnKeyDown(Keys key)\n        {\n            var handler = KeyDown;\n            if (handler != null)\n                handler(this, new InputKeyEventArgs(key));\n        }\n        protected void OnKeyUp(Keys key)\n        {\n            var handler = KeyUp;\n            if (handler != null)\n                handler(this, new InputKeyEventArgs(key));\n        }\n\n        protected bool IsTextInputAttached() { return (TextInput != null); }\n        protected bool IsKeyUpDownAttached() { return (KeyDown != null || KeyUp != null); }\n\n        #endregion Keyboard events\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/GraphicsDeviceManager.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Used to initialize and control the presentation of the graphics device.\n    /// </summary>\n    public class GraphicsDeviceManager : IGraphicsDeviceService, IGraphicsDeviceManager, IDisposable\n        , IPlatformGraphicsDeviceManager\n    {\n        GraphicsDeviceManagerStrategy _strategy;\n\n\n        /// <summary>\n        /// The default back buffer width.\n        /// </summary>\n        public static readonly int DefaultBackBufferWidth = 800;\n\n        /// <summary>\n        /// The default back buffer height.\n        /// </summary>\n        public static readonly int DefaultBackBufferHeight = 480;\n\n\n        /// <summary>\n        /// Associates this graphics device manager to a game instances.\n        /// </summary>\n        /// <param name=\"game\">The game instance to attach.</param>\n        public GraphicsDeviceManager(Game game)\n        {\n            _strategy = GameFactory.Current.CreateGraphicsDeviceManagerStrategy(game);\n\n            // dispatch events\n            _strategy.PreparingDeviceSettings += (sender, e) => { OnPreparingDeviceSettings(e); };\n            _strategy.DeviceCreated   += (sender, e) => { OnDeviceCreated(e); };\n            _strategy.DeviceDisposing += (sender, e) => { OnDeviceDisposing(e); };\n            _strategy.DeviceResetting += (sender, e) => { OnDeviceResetting(e); };\n            _strategy.DeviceReset     += (sender, e) => { OnDeviceReset(e); };\n\n            if (game.Services.GetService(typeof(IGraphicsDeviceManager)) != null)\n                throw new ArgumentException(\"A graphics device manager is already registered.  The graphics device manager cannot be changed once it is set.\");\n            game.Services.AddService(typeof(IGraphicsDeviceManager), this);\n            game.Services.AddService(typeof(IGraphicsDeviceService), this);\n        }\n\n        T IPlatformGraphicsDeviceManager.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        #region IGraphicsDeviceManager\n\n        void IGraphicsDeviceManager.CreateDevice()\n        {\n            _strategy.CreateDevice();\n        }\n\n        bool IGraphicsDeviceManager.BeginDraw()\n        {\n            return _strategy.BeginDraw();\n        }\n\n        void IGraphicsDeviceManager.EndDraw()\n        {\n            _strategy.EndDraw();\n        }\n\n        #endregion // IGraphicsDeviceManager\n\n        #region IGraphicsDeviceService\n\n        /// <summary>\n        /// Returns the graphics device for this manager.\n        /// </summary>\n        public GraphicsDevice GraphicsDevice\n        {\n            get { return _strategy.GraphicsDevice; }\n        }\n\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DeviceCreated;\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DeviceDisposing;\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DeviceResetting;\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DeviceReset;\n\n\n        /// <summary>\n        /// Called when a <see cref=\"GraphicsDevice\"/> is created. Raises the <see cref=\"DeviceCreated\"/> event.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected virtual void OnDeviceCreated(EventArgs e)\n        {\n            var handler = DeviceCreated;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        /// <summary>\n        /// Called when a <see cref=\"GraphicsDevice\"/> is disposed. Raises the <see cref=\"DeviceDisposing\"/> event.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected virtual void OnDeviceDisposing(EventArgs e)\n        {\n            var handler = DeviceDisposing;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        /// <summary>\n        /// Called before a <see cref=\"Graphics.GraphicsDevice\"/> is reset.\n        /// Raises the <see cref=\"DeviceResetting\"/> event.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected virtual void OnDeviceResetting(EventArgs e)\n        {\n            var handler = DeviceResetting;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        /// <summary>\n        /// Called after a <see cref=\"Graphics.GraphicsDevice\"/> is reset.\n        /// Raises the <see cref=\"DeviceReset\"/> event.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected virtual void OnDeviceReset(EventArgs e)\n        {\n            var handler = DeviceReset;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        #endregion // IGraphicsDeviceService\n\n\n        #region IDisposable\n\n        /// <summary>\n        /// Raised when this <see cref=\"GraphicsDeviceManager\"/> is disposed.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposed;\n\n        ~GraphicsDeviceManager()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (!_strategy.IsDisposed)\n            {\n                if (disposing)\n                {\n                    _strategy.Dispose();\n                    _strategy.PreparingDeviceSettings -= (sender, e) => { OnPreparingDeviceSettings(e); };\n                    _strategy.DeviceCreated   -= (sender, e) => { OnDeviceCreated(e); };\n                    _strategy.DeviceDisposing -= (sender, e) => { OnDeviceDisposing(e); };\n                    _strategy.DeviceResetting -= (sender, e) => { OnDeviceResetting(e); };\n                    _strategy.DeviceReset     -= (sender, e) => { OnDeviceReset(e); };\n                    _strategy = null;\n                }\n\n                var handler = Disposed;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n            }\n        }\n\n        #endregion // IDisposable\n\n\n        /// <summary>\n        /// The profile which determines the graphics feature level.\n        /// </summary>\n        public GraphicsProfile GraphicsProfile\n        {\n            get { return _strategy.GraphicsProfile; }\n            set { _strategy.GraphicsProfile = value; }\n        }\n\n        /// <summary>\n        /// Indicates if DX9 style pixel addressing or current standard\n        /// pixel addressing should be used. This flag is set to\n        /// <c>false</c> by default. It should be set to <c>true</c>\n        /// for XNA compatibility. It is recommended to leave this flag\n        /// set to <c>false</c> for projects that are not ported from\n        /// XNA. This value is passed to <see cref=\"GraphicsDevice.UseHalfPixelOffset\"/>.\n        /// </summary>\n        /// <remarks>\n        /// XNA uses DirectX9 for its graphics. DirectX9 interprets UV\n        /// coordinates differently from other graphics API's. This is\n        /// typically referred to as the half-pixel offset. MonoGame\n        /// replicates XNA behavior if this flag is set to <c>true</c>.\n        /// </remarks>\n        public bool PreferHalfPixelOffset\n        {\n            get { return _strategy.PreferHalfPixelOffset; }\n            set { _strategy.PreferHalfPixelOffset = value; }\n        }\n\n        /// <summary>\n        /// Indicates the desired back buffer width in pixels.\n        /// </summary>\n        /// <remarks>\n        /// When called at startup this will automatically set the width during initialization.  If\n        /// set after startup you must call ApplyChanges() for the width to be changed.\n        /// </remarks>\n        public int PreferredBackBufferWidth\n        {\n            get { return _strategy.PreferredBackBufferWidth; }\n            set { _strategy.PreferredBackBufferWidth = value; }\n        }\n\n        /// <summary>\n        /// Indicates the desired back buffer height in pixels.\n        /// </summary>\n        /// <remarks>\n        /// When called at startup this will automatically set the height during initialization.  If\n        /// set after startup you must call ApplyChanges() for the height to be changed.\n        /// </remarks>\n        public int PreferredBackBufferHeight\n        {\n            get { return _strategy.PreferredBackBufferHeight; }\n            set { _strategy.PreferredBackBufferHeight = value; }\n        }\n\n        /// <summary>\n        /// Indicates the desired back buffer color format.\n        /// </summary>\n        /// <remarks>\n        /// When called at startup this will automatically set the format during initialization.  If\n        /// set after startup you must call ApplyChanges() for the format to be changed.\n        /// </remarks>\n        public SurfaceFormat PreferredBackBufferFormat\n        {\n            get { return _strategy.PreferredBackBufferFormat; }\n            set { _strategy.PreferredBackBufferFormat = value; }\n        }\n\n        /// <summary>\n        /// Indicates the desired depth-stencil buffer format.\n        /// </summary>\n        /// <remarks>\n        /// The depth-stencil buffer format defines the scene depth precision and stencil bits available for effects during rendering.\n        /// When called at startup this will automatically set the format during initialization.  If\n        /// set after startup you must call ApplyChanges() for the format to be changed.\n        /// </remarks>\n        public DepthFormat PreferredDepthStencilFormat\n        {\n            get { return _strategy.PreferredDepthStencilFormat; }\n            set { _strategy.PreferredDepthStencilFormat = value; }\n        }\n\n        /// <summary>\n        /// Indicates the desire for a multisampled back buffer.\n        /// </summary>\n        /// <remarks>\n        /// When called at startup this will automatically set the MSAA mode during initialization.  If\n        /// set after startup you must call ApplyChanges() for the MSAA mode to be changed.\n        /// </remarks>\n        public bool PreferMultiSampling\n        {\n            get { return _strategy.PreferMultiSampling; }\n            set { _strategy.PreferMultiSampling = value; }\n        }\n\n        /// <summary>\n        /// Indicates the desire for vsync when presenting the back buffer.\n        /// </summary>\n        /// <remarks>\n        /// Vsync limits the frame rate of the game to the monitor referesh rate to prevent screen tearing.\n        /// When called at startup this will automatically set the vsync mode during initialization.  If\n        /// set after startup you must call ApplyChanges() for the vsync mode to be changed.\n        /// </remarks>\n        public bool SynchronizeWithVerticalRetrace\n        {\n            get { return _strategy.SynchronizeWithVerticalRetrace; }\n            set { _strategy.SynchronizeWithVerticalRetrace = value; }\n        }\n\n        /// <summary>\n        /// Indicates the desire to switch into fullscreen mode.\n        /// </summary>\n        /// <remarks>\n        /// When called at startup this will automatically set fullscreen mode during initialization.  If\n        /// set after startup you must call ApplyChanges() for the fullscreen mode to be changed.\n        /// Note that for some platforms that do not support windowed modes this property has no affect.\n        /// </remarks>\n        public bool IsFullScreen\n        {\n            get { return _strategy.IsFullScreen; }\n            set { _strategy.IsFullScreen = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the boolean which defines how window switches from windowed to fullscreen state.\n        /// \"Hard\" mode(true) is slow to switch, but more effecient for performance, while \"soft\" mode(false) is vice versa.\n        /// The default value is <c>true</c>.\n        /// </summary>\n        public bool HardwareModeSwitch\n        {\n            get { return _strategy.HardwareModeSwitch; }\n            set { _strategy.HardwareModeSwitch = value; }\n        }\n\n        /// <summary>\n        /// Indicates the desired allowable display orientations when the device is rotated.\n        /// </summary>\n        /// <remarks>\n        /// This property only applies to mobile platforms with automatic display rotation.\n        /// When called at startup this will automatically apply the supported orientations during initialization.  If\n        /// set after startup you must call ApplyChanges() for the supported orientations to be changed.\n        /// </remarks>\n        public DisplayOrientation SupportedOrientations\n        {\n            get { return _strategy.SupportedOrientations; }\n            set { _strategy.SupportedOrientations = value; }\n        }\n\n        /// <summary>\n        /// Raised by <see cref=\"CreateDevice()\"/> or <see cref=\"ApplyChanges\"/>. Allows users\n        /// to override the <see cref=\"PresentationParameters\"/> to pass to the\n        /// <see cref=\"Graphics.GraphicsDevice\"/>.\n        /// </summary>\n        public event EventHandler<PreparingDeviceSettingsEventArgs> PreparingDeviceSettings;\n\n        protected virtual void OnPreparingDeviceSettings(PreparingDeviceSettingsEventArgs e)\n        {\n            var handler = PreparingDeviceSettings;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        protected virtual GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice)\n        {\n            return _strategy.FindBestDevice(anySuitableDevice);\n        }\n\n        protected virtual void RankDevices(List<GraphicsDeviceInformation> foundDevices)\n        {\n            _strategy.RankDevices(foundDevices);\n        }\n\n        protected virtual bool CanResetDevice(GraphicsDeviceInformation newDeviceInfo)\n        {\n            return _strategy.CanResetDevice(newDeviceInfo);\n        }\n\n        /// <summary>\n        /// Toggles between windowed and fullscreen modes.\n        /// </summary>\n        /// <remarks>\n        /// Note that on platforms that do not support windowed modes this has no affect.\n        /// </remarks>\n        public void ToggleFullScreen()\n        {\n            _strategy.ToggleFullScreen();\n        }\n\n        /// <summary>\n        /// Applies any pending property changes to the graphics device.\n        /// </summary>\n        public void ApplyChanges()\n        {\n            _strategy.ApplyChanges();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/GraphicsDeviceManagerStrategy.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform\n{\n    public interface IPlatformGraphicsDeviceManager\n    {\n        T GetStrategy<T>() where T : GraphicsDeviceManagerStrategy;\n    }\n\n    public abstract class GraphicsDeviceManagerStrategy : IDisposable\n    {\n        public static readonly int DefaultBackBufferWidth  = 800;\n        public static readonly int DefaultBackBufferHeight = 480;\n\n        private Game _game;\n        private bool _isDrawing;\n        private bool _isDisposed;\n        protected /*private*/ GraphicsDevice _graphicsDevice;\n\n        public virtual GraphicsProfile GraphicsProfile { get; set; }\n        public virtual bool PreferHalfPixelOffset { get; set; }\n\n        public virtual int PreferredBackBufferWidth  { get; set; }\n        public virtual int PreferredBackBufferHeight { get; set; }\n        public virtual SurfaceFormat PreferredBackBufferFormat { get; set; }\n        public virtual DepthFormat PreferredDepthStencilFormat { get; set; }\n        public virtual bool PreferMultiSampling { get; set; }\n        public virtual bool SynchronizeWithVerticalRetrace { get; set; }\n        public virtual bool IsFullScreen { get; set; }\n        public virtual bool HardwareModeSwitch { get; set; }\n        public virtual DisplayOrientation SupportedOrientations { get; set; }\n        \n\n        public Game Game\n        {\n            get { return _game; }\n        }\n\n\n        public GraphicsDeviceManagerStrategy(Game game)\n        {\n            if (game == null)\n                throw new ArgumentNullException(\"game\", \"Game cannot be null.\");\n\n            _game = game;\n\n            GraphicsProfile = GraphicsProfile.Reach;\n            PreferHalfPixelOffset = false;\n\n            PreferredBackBufferWidth  = DefaultBackBufferWidth;\n            PreferredBackBufferHeight = DefaultBackBufferHeight;\n            PreferredBackBufferFormat   = SurfaceFormat.Color;\n            PreferredDepthStencilFormat = DepthFormat.Depth24;\n            PreferMultiSampling = false;\n            SynchronizeWithVerticalRetrace = true;\n            IsFullScreen = false;\n            HardwareModeSwitch = true;\n            SupportedOrientations = DisplayOrientation.Default;\n        }\n\n\n        #region IGraphicsDeviceManager\n        \n        public bool IsDrawing\n        {\n            get { return _isDrawing; }\n            set { _isDrawing = value; }\n        }\n\n        public abstract void CreateDevice();\n\n        public virtual bool BeginDraw()\n        {\n            if (_graphicsDevice != null)\n            {\n                _isDrawing = true;\n                return true;\n            }\n            return false;\n        }\n\n        public virtual void EndDraw()\n        {\n            GraphicsDevice device = this.GraphicsDevice;\n            if (device != null)\n            {\n                if (_isDrawing)\n                {\n                    _isDrawing = false;\n                    device.Present();\n                }\n            }\n        }\n\n        #endregion // IGraphicsDeviceManager\n\n\n        #region IGraphicsDeviceService\n\n        public virtual GraphicsDevice GraphicsDevice\n        {\n            get { return _graphicsDevice; }\n            set\n            {\n                if (_graphicsDevice != null)\n                {\n                    _graphicsDevice.Disposing -= (sender, e) => { OnDeviceDisposing(e); };\n                    _graphicsDevice.DeviceResetting -= (sender, e) => { OnDeviceResetting(e); };\n                    _graphicsDevice.DeviceReset     -= (sender, e) => { OnDeviceReset(e); };\n                }\n\n                _graphicsDevice = value;\n\n                if (_graphicsDevice != null)\n                {\n                    _graphicsDevice.Disposing += (sender, e) => { OnDeviceDisposing(e); };\n                    _graphicsDevice.DeviceResetting += (sender, e) => { OnDeviceResetting(e); };\n                    _graphicsDevice.DeviceReset += (sender, e) => { OnDeviceReset(e); };\n                }\n            }\n        }\n\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DeviceCreated;\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DeviceDisposing;\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DeviceResetting;\n        /// <inheritdoc />\n        public event EventHandler<EventArgs> DeviceReset;\n\n\n        /// <summary>\n        /// Called when a <see cref=\"GraphicsDevice\"/> is created. Raises the <see cref=\"DeviceCreated\"/> event.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected virtual void OnDeviceCreated(EventArgs e)\n        {\n            var handler = DeviceCreated;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        /// <summary>\n        /// Called when a <see cref=\"GraphicsDevice\"/> is disposed. Raises the <see cref=\"DeviceDisposing\"/> event.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected virtual void OnDeviceDisposing(EventArgs e)\n        {\n            var handler = DeviceDisposing;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        /// <summary>\n        /// Called before a <see cref=\"Graphics.GraphicsDevice\"/> is reset.\n        /// Raises the <see cref=\"DeviceResetting\"/> event.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected virtual void OnDeviceResetting(EventArgs e)\n        {\n            var handler = DeviceResetting;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        /// <summary>\n        /// Called after a <see cref=\"Graphics.GraphicsDevice\"/> is reset.\n        /// Raises the <see cref=\"DeviceReset\"/> event.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected virtual void OnDeviceReset(EventArgs e)\n        {\n            var handler = DeviceReset;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        #endregion // IGraphicsDeviceService\n\n\n        #region IDisposable\n\n        public bool IsDisposed\n        {\n            get { return _isDisposed; }\n        }\n\n        /// <summary>\n        /// Raised when this <see cref=\"GraphicsDeviceManager\"/> is disposed.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposed;\n\n        ~GraphicsDeviceManagerStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    if (_graphicsDevice != null)\n                    {\n                        _graphicsDevice.Dispose();\n                        _graphicsDevice = null;\n                    }\n                    _game = null;\n                }\n                _isDisposed = true;\n\n                var handler = Disposed;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n            }\n        }\n\n        #endregion // IDisposable\n\n\n        /// <summary>\n        /// Raised by <see cref=\"CreateDevice()\"/> or <see cref=\"ApplyChanges\"/>. Allows users\n        /// to override the <see cref=\"PresentationParameters\"/> to pass to the\n        /// <see cref=\"Graphics.GraphicsDevice\"/>.\n        /// </summary>\n        public event EventHandler<PreparingDeviceSettingsEventArgs> PreparingDeviceSettings;\n\n        protected virtual void OnPreparingDeviceSettings(PreparingDeviceSettingsEventArgs e)\n        {\n            var handler = PreparingDeviceSettings;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        public virtual GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice)\n        {\n            throw new NotImplementedException();\n        }\n\n        public virtual void RankDevices(List<GraphicsDeviceInformation> foundDevices)\n        {\n            throw new NotImplementedException();\n        }\n\n        public virtual bool CanResetDevice(GraphicsDeviceInformation newDeviceInfo)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Toggles between windowed and fullscreen modes.\n        /// </summary>\n        /// <remarks>\n        /// Note that on platforms that do not support windowed modes this has no affect.\n        /// </remarks>\n        public virtual void ToggleFullScreen()\n        {\n            IsFullScreen = !IsFullScreen;\n            ApplyChanges();\n        }\n\n        /// <summary>\n        /// Applies any pending property changes to the graphics device.\n        /// </summary>\n        public abstract void ApplyChanges();\n\n        public T ToConcrete<T>() where T : GraphicsDeviceManagerStrategy\n        {\n            return (T)this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/IDrawable.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Interface for drawable entities.\n    /// </summary>\n    public interface IDrawable\n    {\n        /// <summary>\n        /// The draw order of this <see cref=\"IDrawable\"/> relative\n        /// to other <see cref=\"IDrawable\"/> instances.\n        /// </summary>\n        int DrawOrder { get; }\n\n        /// <summary>\n        /// Indicates if <see cref=\"Draw\"/> will be called.\n        /// </summary>\n        bool Visible { get; }\n\n        /// <summary>\n        /// Raised when <see cref=\"DrawOrder\"/> changed.\n        /// </summary>\n        event EventHandler<EventArgs> DrawOrderChanged;\n\n        /// <summary>\n        /// Raised when <see cref=\"Visible\"/> changed.\n        /// </summary>\n        event EventHandler<EventArgs> VisibleChanged;\n\n        /// <summary>\n        /// Called when this <see cref=\"IDrawable\"/> should draw itself.\n        /// </summary>\n        /// <param name=\"gameTime\">The elapsed time since the last call to <see cref=\"Draw\"/>.</param>\n        void Draw(GameTime gameTime);      \n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Game/IGameComponent.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// An interface for <see cref=\"GameComponent\"/>.\n    /// </summary>\n    public interface IGameComponent\n    {\n        /// <summary>\n        /// Initializes the component. Used to load non-graphical resources.\n        /// </summary>\n        void Initialize();\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Game/ILLink.Descriptors.xml",
    "content": "<linker>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework.Game/IUpdateable.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Interface for updateable entities.\n    /// </summary>\n    public interface IUpdateable\n    {\n        #region Methods\n        /// <summary>\n        /// Called when this <see cref=\"IUpdateable\"/> should update itself.\n        /// </summary>\n        /// <param name=\"gameTime\">The elapsed time since the last call to <see cref=\"Update\"/>.</param>\n        void Update(GameTime gameTime);\n        #endregion\n        \n        #region Events\n\n        /// <summary>\n        /// Raised when <see cref=\"Enabled\"/> changed.\n        /// </summary>\n        event EventHandler<EventArgs> EnabledChanged;\n        \n        /// <summary>\n        /// Raised when <see cref=\"UpdateOrder\"/> changed.\n        /// </summary>\n        event EventHandler<EventArgs> UpdateOrderChanged;\n        #endregion\n    \n        #region Properties\n\n        /// <summary>\n        /// Indicates if <see cref=\"Update\"/> will be called.\n        /// </summary>\n        bool Enabled { get; }\n        \n        /// <summary>\n        /// The update order of this <see cref=\"GameComponent\"/> relative\n        /// to other <see cref=\"GameComponent\"/> instances.\n        /// </summary>\n        int UpdateOrder { get; }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/LaunchParameters.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// The parameters for launching a <see cref=\"Game\"/>.\n    /// </summary>\n    public class LaunchParameters : Dictionary<string, string>\n    {\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Game/Properties/AssemblyInfo.cs",
    "content": "using System;\n\n[assembly:CLSCompliant(true)]\n"
  },
  {
    "path": "src/Xna.Framework.Game/Xna.Framework.Game.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Game\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Game</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Game</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Game framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Game</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"DrawableGameComponent.cs\" />\n    <Compile Include=\"FileDropEventArgs.cs\" />\n    <Compile Include=\"Game.cs\" />\n    <Compile Include=\"GameFactory.cs\" />\n    <Compile Include=\"GameComponent.cs\" />\n    <Compile Include=\"GameComponentCollection.cs\" />\n    <Compile Include=\"GameComponentCollectionEventArgs.cs\" />\n    <Compile Include=\"GameServiceContainer.cs\" />\n    <Compile Include=\"GameStrategy.cs\" />\n    <Compile Include=\"GameTime.cs\" />\n    <Compile Include=\"GameWindow.cs\" />\n    <Compile Include=\"GraphicsDeviceManager.cs\" />\n    <Compile Include=\"GraphicsDeviceManagerStrategy.cs\" />\n    <Compile Include=\"IDrawable.cs\" />\n    <Compile Include=\"IGameComponent.cs\" />\n    <Compile Include=\"IUpdateable.cs\" />\n    <Compile Include=\"LaunchParameters.cs\" />\n  </ItemGroup>\n\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Input\\Xna.Framework.Input.csproj\">\n      <Project>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</Project>\n      <Name>Xna.Framework.Input</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Graphics/Color.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.ComponentModel;\nusing System.Text;\nusing System.Runtime.Serialization;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\n\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Describes a 32-bit packed color.\n    /// </summary>\n    [DataContract]\n    [DebuggerDisplay(\"{DebugDisplayString,nq}\")]\n    [TypeConverter(\"Microsoft.Xna.Framework.Design.ColorConverter, Xna.Framework.Design\")]\n    public struct Color : IPackedVector<UInt32>, IEquatable<Color>\n    {\n        static Color()\n        {\n            Transparent = new Color(0);\n            AliceBlue = new Color(0xfffff8f0);\n            AntiqueWhite = new Color(0xffd7ebfa);\n            Aqua = new Color(0xffffff00);\n            Aquamarine = new Color(0xffd4ff7f);\n            Azure = new Color(0xfffffff0);\n            Beige = new Color(0xffdcf5f5);\n            Bisque = new Color(0xffc4e4ff);\n            Black = new Color(0xff000000);\n            BlanchedAlmond = new Color(0xffcdebff);\n            Blue = new Color(0xffff0000);\n            BlueViolet = new Color(0xffe22b8a);\n            Brown = new Color(0xff2a2aa5);\n            BurlyWood = new Color(0xff87b8de);\n            CadetBlue = new Color(0xffa09e5f);\n            Chartreuse = new Color(0xff00ff7f);\n            Chocolate = new Color(0xff1e69d2);\n            Coral = new Color(0xff507fff);\n            CornflowerBlue = new Color(0xffed9564);\n            Cornsilk = new Color(0xffdcf8ff);\n            Crimson = new Color(0xff3c14dc);\n            Cyan = new Color(0xffffff00);\n            DarkBlue = new Color(0xff8b0000);\n            DarkCyan = new Color(0xff8b8b00);\n            DarkGoldenrod = new Color(0xff0b86b8);\n            DarkGray = new Color(0xffa9a9a9);\n            DarkGreen = new Color(0xff006400);\n            DarkKhaki = new Color(0xff6bb7bd);\n            DarkMagenta = new Color(0xff8b008b);\n            DarkOliveGreen = new Color(0xff2f6b55);\n            DarkOrange = new Color(0xff008cff);\n            DarkOrchid = new Color(0xffcc3299);\n            DarkRed = new Color(0xff00008b);\n            DarkSalmon = new Color(0xff7a96e9);\n            DarkSeaGreen = new Color(0xff8bbc8f);\n            DarkSlateBlue = new Color(0xff8b3d48);\n            DarkSlateGray = new Color(0xff4f4f2f);\n            DarkTurquoise = new Color(0xffd1ce00);\n            DarkViolet = new Color(0xffd30094);\n            DeepPink = new Color(0xff9314ff);\n            DeepSkyBlue = new Color(0xffffbf00);\n            DimGray = new Color(0xff696969);\n            DodgerBlue = new Color(0xffff901e);\n            Firebrick = new Color(0xff2222b2);\n            FloralWhite = new Color(0xfff0faff);\n            ForestGreen = new Color(0xff228b22);\n            Fuchsia = new Color(0xffff00ff);\n            Gainsboro = new Color(0xffdcdcdc);\n            GhostWhite = new Color(0xfffff8f8);\n            Gold = new Color(0xff00d7ff);\n            Goldenrod = new Color(0xff20a5da);\n            Gray = new Color(0xff808080);\n            Green = new Color(0xff008000);\n            GreenYellow = new Color(0xff2fffad);\n            Honeydew = new Color(0xfff0fff0);\n            HotPink = new Color(0xffb469ff);\n            IndianRed = new Color(0xff5c5ccd);\n            Indigo = new Color(0xff82004b);\n            Ivory = new Color(0xfff0ffff);\n            Khaki = new Color(0xff8ce6f0);\n            Lavender = new Color(0xfffae6e6);\n            LavenderBlush = new Color(0xfff5f0ff);\n            LawnGreen = new Color(0xff00fc7c);\n            LemonChiffon = new Color(0xffcdfaff);\n            LightBlue = new Color(0xffe6d8ad);\n            LightCoral = new Color(0xff8080f0);\n            LightCyan = new Color(0xffffffe0);\n            LightGoldenrodYellow = new Color(0xffd2fafa);\n            LightGray = new Color(0xffd3d3d3);\n            LightGreen = new Color(0xff90ee90);\n            LightPink = new Color(0xffc1b6ff);\n            LightSalmon = new Color(0xff7aa0ff);\n            LightSeaGreen = new Color(0xffaab220);\n            LightSkyBlue = new Color(0xffface87);\n            LightSlateGray = new Color(0xff998877);\n            LightSteelBlue = new Color(0xffdec4b0);\n            LightYellow = new Color(0xffe0ffff);\n            Lime = new Color(0xff00ff00);\n            LimeGreen = new Color(0xff32cd32);\n            Linen = new Color(0xffe6f0fa);\n            Magenta = new Color(0xffff00ff);\n            Maroon = new Color(0xff000080);\n            MediumAquamarine = new Color(0xffaacd66);\n            MediumBlue = new Color(0xffcd0000);\n            MediumOrchid = new Color(0xffd355ba);\n            MediumPurple = new Color(0xffdb7093);\n            MediumSeaGreen = new Color(0xff71b33c);\n            MediumSlateBlue = new Color(0xffee687b);\n            MediumSpringGreen = new Color(0xff9afa00);\n            MediumTurquoise = new Color(0xffccd148);\n            MediumVioletRed = new Color(0xff8515c7);\n            MidnightBlue = new Color(0xff701919);\n            MintCream = new Color(0xfffafff5);\n            MistyRose = new Color(0xffe1e4ff);\n            Moccasin = new Color(0xffb5e4ff);\n            MonoGameOrange = new Color(0xff003ce7);\n            NavajoWhite = new Color(0xffaddeff);\n            Navy = new Color(0xff800000);\n            OldLace = new Color(0xffe6f5fd);\n            Olive = new Color(0xff008080);\n            OliveDrab = new Color(0xff238e6b);\n            Orange = new Color(0xff00a5ff);\n            OrangeRed = new Color(0xff0045ff);\n            Orchid = new Color(0xffd670da);\n            PaleGoldenrod = new Color(0xffaae8ee);\n            PaleGreen = new Color(0xff98fb98);\n            PaleTurquoise = new Color(0xffeeeeaf);\n            PaleVioletRed = new Color(0xff9370db);\n            PapayaWhip = new Color(0xffd5efff);\n            PeachPuff = new Color(0xffb9daff);\n            Peru = new Color(0xff3f85cd);\n            Pink = new Color(0xffcbc0ff);\n            Plum = new Color(0xffdda0dd);\n            PowderBlue = new Color(0xffe6e0b0);\n            Purple = new Color(0xff800080);\n            Red = new Color(0xff0000ff);\n            RosyBrown = new Color(0xff8f8fbc);\n            RoyalBlue = new Color(0xffe16941);\n            SaddleBrown = new Color(0xff13458b);\n            Salmon= new Color(0xff7280fa);\n            SandyBrown = new Color(0xff60a4f4);\n            SeaGreen = new Color(0xff578b2e);\n            SeaShell = new Color(0xffeef5ff);\n            Sienna = new Color(0xff2d52a0);\n            Silver  = new Color(0xffc0c0c0);\n            SkyBlue  = new Color(0xffebce87);\n            SlateBlue= new Color(0xffcd5a6a);\n            SlateGray= new Color(0xff908070);\n            Snow= new Color(0xfffafaff);\n            SpringGreen= new Color(0xff7fff00);\n            SteelBlue= new Color(0xffb48246);\n            Tan= new Color(0xff8cb4d2);\n            Teal= new Color(0xff808000);\n            Thistle= new Color(0xffd8bfd8);\n            Tomato= new Color(0xff4763ff);\n            Turquoise= new Color(0xffd0e040);\n            Violet= new Color(0xffee82ee);\n            Wheat= new Color(0xffb3def5);\n            White= new Color(uint.MaxValue);\n            WhiteSmoke= new Color(0xfff5f5f5);\n            Yellow = new Color(0xff00ffff);\n            YellowGreen = new Color(0xff32cd9a);\n        }\n\n        // Stored as RGBA with R in the least significant octet:\n        // |-------|-------|-------|-------\n        // A       B       G       R\n        private uint _packedValue;\n\n        /// <summary>\n        /// Gets or sets packed value of this <see cref=\"Color\"/>.\n        /// </summary>\n        [CLSCompliant(false)]\n        public UInt32 PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            int r = (int)(vector.X * 255);\n            int g = (int)(vector.Y * 255);\n            int b = (int)(vector.Z * 255);\n            int a = (int)(vector.W * 255);\n\n            if (((r | g | b | a) & 0xFFFFFF00) != 0)\n            {\n                r = MathHelper.Clamp(r, Byte.MinValue, Byte.MaxValue);\n                g = MathHelper.Clamp(g, Byte.MinValue, Byte.MaxValue);\n                b = MathHelper.Clamp(b, Byte.MinValue, Byte.MaxValue);\n                a = MathHelper.Clamp(a, Byte.MinValue, Byte.MaxValue);\n            }\n\n            _packedValue = ((uint)a << 24) | ((uint)b << 16) | ((uint)g << 8) | ((uint)r);\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from a packed value.\n        /// The value is a 32-bit unsigned integer, with R in the least significant octet.\n        /// </summary>\n        /// <param name=\"packedValue\">The packed value.</param>\n        [CLSCompliant(false)]\n        public Color(uint packedValue)\n        {\n            _packedValue = packedValue;\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from the XYZW unit length components of a vector.\n        /// </summary>\n        /// <param name=\"color\">A <see cref=\"Vector4\"/> representing color.</param>\n        public Color(Vector4 color)\n            : this((int)(color.X * 255), (int)(color.Y * 255), (int)(color.Z * 255), (int)(color.W * 255))\n        {\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from the XYZ unit length components of a vector. Alpha value will be opaque.\n        /// </summary>\n        /// <param name=\"color\">A <see cref=\"Vector3\"/> representing color.</param>\n        public Color(Vector3 color)\n            : this((int)(color.X * 255), (int)(color.Y * 255), (int)(color.Z * 255))\n        {\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from a <see cref=\"Color\"/> and an alpha value.\n        /// </summary>\n        /// <param name=\"color\">A <see cref=\"Color\"/> for RGB values of new <see cref=\"Color\"/> instance.</param>\n        /// <param name=\"alpha\">The alpha component value from 0 to 255.</param>\n        public Color(Color color, int alpha)\n        {\n            if ((alpha & 0xFFFFFF00) != 0)\n            {\n                var clampedA = (uint)MathHelper.Clamp(alpha, Byte.MinValue, Byte.MaxValue);\n\n                _packedValue = (color._packedValue & 0x00FFFFFF) | (clampedA << 24);\n            }\n            else\n            {\n                _packedValue = (color._packedValue & 0x00FFFFFF) | ((uint)alpha << 24);\n            }\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from color and alpha value.\n        /// </summary>\n        /// <param name=\"color\">A <see cref=\"Color\"/> for RGB values of new <see cref=\"Color\"/> instance.</param>\n        /// <param name=\"alpha\">Alpha component value from 0.0f to 1.0f.</param>\n        public Color(Color color, float alpha):\n            this(color, (int)(alpha * 255))\n        {\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from scalars representing red, green and blue values. Alpha value will be opaque.\n        /// </summary>\n        /// <param name=\"r\">Red component value from 0.0f to 1.0f.</param>\n        /// <param name=\"g\">Green component value from 0.0f to 1.0f.</param>\n        /// <param name=\"b\">Blue component value from 0.0f to 1.0f.</param>\n        public Color(float r, float g, float b)\n            : this((int)(r * 255), (int)(g * 255), (int)(b * 255))\n        {\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from scalars representing red, green, blue and alpha values.\n        /// </summary>\n        /// <param name=\"r\">Red component value from 0.0f to 1.0f.</param>\n        /// <param name=\"g\">Green component value from 0.0f to 1.0f.</param>\n        /// <param name=\"b\">Blue component value from 0.0f to 1.0f.</param>\n        /// <param name=\"alpha\">Alpha component value from 0.0f to 1.0f.</param>\n        public Color(float r, float g, float b, float alpha)\n            : this((int)(r * 255), (int)(g * 255), (int)(b * 255), (int)(alpha * 255))\n        {\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from scalars representing red, green and blue values. Alpha value will be opaque.\n        /// </summary>\n        /// <param name=\"r\">Red component value from 0 to 255.</param>\n        /// <param name=\"g\">Green component value from 0 to 255.</param>\n        /// <param name=\"b\">Blue component value from 0 to 255.</param>\n        public Color(int r, int g, int b)\n        {\n            _packedValue = 0xFF000000; // A = 255\n\n            if (((r | g | b) & 0xFFFFFF00) != 0)\n            {\n                var clampedR = (uint)MathHelper.Clamp(r, Byte.MinValue, Byte.MaxValue);\n                var clampedG = (uint)MathHelper.Clamp(g, Byte.MinValue, Byte.MaxValue);\n                var clampedB = (uint)MathHelper.Clamp(b, Byte.MinValue, Byte.MaxValue);\n\n                _packedValue |= (clampedB << 16) | (clampedG << 8) | (clampedR);\n            }\n            else\n            {\n                _packedValue |= ((uint)b << 16) | ((uint)g << 8) | ((uint)r);\n            }\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from scalars representing red, green, blue and alpha values.\n        /// </summary>\n        /// <param name=\"r\">Red component value from 0 to 255.</param>\n        /// <param name=\"g\">Green component value from 0 to 255.</param>\n        /// <param name=\"b\">Blue component value from 0 to 255.</param>\n        /// <param name=\"alpha\">Alpha component value from 0 to 255.</param>\n        public Color(int r, int g, int b, int alpha)\n        {\n            if (((r | g | b | alpha) & 0xFFFFFF00) != 0)\n            {\n                var clampedR = (uint)MathHelper.Clamp(r, Byte.MinValue, Byte.MaxValue);\n                var clampedG = (uint)MathHelper.Clamp(g, Byte.MinValue, Byte.MaxValue);\n                var clampedB = (uint)MathHelper.Clamp(b, Byte.MinValue, Byte.MaxValue);\n                var clampedA = (uint)MathHelper.Clamp(alpha, Byte.MinValue, Byte.MaxValue);\n\n                _packedValue = (clampedA << 24) | (clampedB << 16) | (clampedG << 8) | (clampedR);\n            }\n            else\n            {\n                _packedValue = ((uint)alpha << 24) | ((uint)b << 16) | ((uint)g << 8) | ((uint)r);\n            }\n        }\n\n        /// <summary>\n        /// Constructs an RGBA color from scalars representing red, green, blue and alpha values.\n        /// </summary>\n        /// <remarks>\n        /// This overload sets the values directly without clamping, and may therefore be faster than the other overloads.\n        /// </remarks>\n        /// <param name=\"r\"></param>\n        /// <param name=\"g\"></param>\n        /// <param name=\"b\"></param>\n        /// <param name=\"alpha\"></param>\n        public Color(byte r, byte g, byte b, byte alpha)\n        {\n            _packedValue = ((uint)alpha << 24) | ((uint)b << 16) | ((uint)g << 8) | (r);\n        }\n\n        /// <summary>\n        /// Gets or sets the blue component.\n        /// </summary>\n        [DataMember]\n        public byte B\n        {\n            get { unchecked { return (byte) (_packedValue >> 16); } }\n            set { _packedValue = (_packedValue & 0xff00ffff) | ((uint)value << 16); }\n        }\n\n        /// <summary>\n        /// Gets or sets the green component.\n        /// </summary>\n        [DataMember]\n        public byte G\n        {\n            get { unchecked { return (byte)(_packedValue >> 8); } }\n            set { _packedValue = (_packedValue & 0xffff00ff) | ((uint)value << 8); }\n        }\n\n        /// <summary>\n        /// Gets or sets the red component.\n        /// </summary>\n        [DataMember]\n        public byte R\n        {\n            get { unchecked { return (byte)_packedValue; } }\n            set { _packedValue = (_packedValue & 0xffffff00) | value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the alpha component.\n        /// </summary>\n        [DataMember]\n        public byte A\n        {\n            get { unchecked { return (byte)(_packedValue >> 24); } }\n            set { _packedValue = (_packedValue & 0x00ffffff) | ((uint)value << 24); }\n        }\n        \n    /// <summary>\n        /// Compares whether two <see cref=\"Color\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Color\"/> instance on the left of the equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Color\"/> instance on the right of the equal sign.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public static bool operator ==(Color left, Color right)\n        {\n            return (left._packedValue == right._packedValue);\n        }\n    \n    /// <summary>\n        /// Compares whether two <see cref=\"Color\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"Color\"/> instance on the left of the not equal sign.</param>\n        /// <param name=\"right\"><see cref=\"Color\"/> instance on the right of the not equal sign.</param>\n        /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>\t\n        public static bool operator !=(Color left, Color right)\n        {\n            return (left._packedValue != right._packedValue);\n        }\n\n        /// <summary>\n        /// Gets the hash code of this <see cref=\"Color\"/>.\n        /// </summary>\n        /// <returns>Hash code of this <see cref=\"Color\"/>.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n    \n        /// <summary>\n        /// Compares whether current instance is equal to specified object.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"Color\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            return ((obj is Color) && this.Equals((Color)obj));\n        }\n\n        #region Color Bank\n        \n        /// <summary>\n        /// Transparent color (R:0,G:0,B:0,A:0).\n        /// </summary>\n        public static Color Transparent\n        {\n            get;\n            private set;\n        }\n    \n    /// <summary>\n        /// AliceBlue color (R:240,G:248,B:255,A:255).\n        /// </summary>\n        public static Color AliceBlue\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// AntiqueWhite color (R:250,G:235,B:215,A:255).\n        /// </summary>\n        public static Color AntiqueWhite\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Aqua color (R:0,G:255,B:255,A:255).\n        /// </summary>\n    public static Color Aqua\n        {\n            get;\n            private set;\n        }\n    \n    /// <summary>\n        /// Aquamarine color (R:127,G:255,B:212,A:255).\n        /// </summary>\n        public static Color Aquamarine\n    {\n        get;\n        private set;\n    }\n        \n        /// <summary>\n        /// Azure color (R:240,G:255,B:255,A:255).\n        /// </summary>\n    public static Color Azure\n        {\n            get;\n            private set;\n        }\n    \n    /// <summary>\n        /// Beige color (R:245,G:245,B:220,A:255).\n        /// </summary>\n        public static Color Beige\n    {\n        get;\n        private set;\n    }\n        \n        /// <summary>\n        /// Bisque color (R:255,G:228,B:196,A:255).\n        /// </summary>\n        public static Color Bisque\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Black color (R:0,G:0,B:0,A:255).\n        /// </summary>\n        public static Color Black\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// BlanchedAlmond color (R:255,G:235,B:205,A:255).\n        /// </summary>\n        public static Color BlanchedAlmond\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Blue color (R:0,G:0,B:255,A:255).\n        /// </summary>\n        public static Color Blue\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// BlueViolet color (R:138,G:43,B:226,A:255).\n        /// </summary>\n        public static Color BlueViolet\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Brown color (R:165,G:42,B:42,A:255).\n        /// </summary>\n        public static Color Brown\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// BurlyWood color (R:222,G:184,B:135,A:255).\n        /// </summary>\n        public static Color BurlyWood\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// CadetBlue color (R:95,G:158,B:160,A:255).\n        /// </summary>\n        public static Color CadetBlue\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Chartreuse color (R:127,G:255,B:0,A:255).\n        /// </summary>\n        public static Color Chartreuse\n        {\n            get;\n            private set;\n        }\n         \n        /// <summary>\n        /// Chocolate color (R:210,G:105,B:30,A:255).\n        /// </summary>\n        public static Color Chocolate\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Coral color (R:255,G:127,B:80,A:255).\n        /// </summary>\n        public static Color Coral\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// CornflowerBlue color (R:100,G:149,B:237,A:255).\n        /// </summary>\n        public static Color CornflowerBlue\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Cornsilk color (R:255,G:248,B:220,A:255).\n        /// </summary>\n    public static Color Cornsilk\n        {\n            get;\n            private set;\n        }\n    \n    /// <summary>\n        /// Crimson color (R:220,G:20,B:60,A:255).\n        /// </summary>\n        public static Color Crimson\n    {\n        get;\n        private set;\n    }\n        \n        /// <summary>\n        /// Cyan color (R:0,G:255,B:255,A:255).\n        /// </summary>\n        public static Color Cyan\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// DarkBlue color (R:0,G:0,B:139,A:255).\n        /// </summary>\n    public static Color DarkBlue\n        {\n            get;\n            private set;\n        }\n    \n    /// <summary>\n        /// DarkCyan color (R:0,G:139,B:139,A:255).\n        /// </summary>\n        public static Color DarkCyan\n    {\n        get;\n        private set;\n    }\n        \n        /// <summary>\n        /// DarkGoldenrod color (R:184,G:134,B:11,A:255).\n        /// </summary>\n        public static Color DarkGoldenrod\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// DarkGray color (R:169,G:169,B:169,A:255).\n        /// </summary>\n    public static Color DarkGray\n        {\n            get;\n            private set;\n        }\n    \n    /// <summary>\n        /// DarkGreen color (R:0,G:100,B:0,A:255).\n        /// </summary>\n        public static Color DarkGreen\n    {\n        get;\n        private set;\n    }\n        \n        /// <summary>\n        /// DarkKhaki color (R:189,G:183,B:107,A:255).\n        /// </summary>\n        public static Color DarkKhaki\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkMagenta color (R:139,G:0,B:139,A:255).\n        /// </summary>\n        public static Color DarkMagenta\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkOliveGreen color (R:85,G:107,B:47,A:255).\n        /// </summary>\n        public static Color DarkOliveGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkOrange color (R:255,G:140,B:0,A:255).\n        /// </summary>\n        public static Color DarkOrange\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkOrchid color (R:153,G:50,B:204,A:255).\n        /// </summary>\n        public static Color DarkOrchid\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkRed color (R:139,G:0,B:0,A:255).\n        /// </summary>\n        public static Color DarkRed\n        {\n            get;\n            private set;\n        }\n        \n    /// <summary>\n        /// DarkSalmon color (R:233,G:150,B:122,A:255).\n        /// </summary>\n        public static Color DarkSalmon\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkSeaGreen color (R:143,G:188,B:139,A:255).\n        /// </summary>\n        public static Color DarkSeaGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkSlateBlue color (R:72,G:61,B:139,A:255).\n        /// </summary>\n        public static Color DarkSlateBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkSlateGray color (R:47,G:79,B:79,A:255).\n        /// </summary>\n        public static Color DarkSlateGray\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkTurquoise color (R:0,G:206,B:209,A:255).\n        /// </summary>\n        public static Color DarkTurquoise\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DarkViolet color (R:148,G:0,B:211,A:255).\n        /// </summary>\n        public static Color DarkViolet\n        {\n            get;\n            private set;\n        }\n         \n        /// <summary>\n        /// DeepPink color (R:255,G:20,B:147,A:255).\n        /// </summary>\n        public static Color DeepPink\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DeepSkyBlue color (R:0,G:191,B:255,A:255).\n        /// </summary>\n        public static Color DeepSkyBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DimGray color (R:105,G:105,B:105,A:255).\n        /// </summary>\n        public static Color DimGray\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// DodgerBlue color (R:30,G:144,B:255,A:255).\n        /// </summary>\n        public static Color DodgerBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Firebrick color (R:178,G:34,B:34,A:255).\n        /// </summary>\n        public static Color Firebrick\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// FloralWhite color (R:255,G:250,B:240,A:255).\n        /// </summary>\n        public static Color FloralWhite\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// ForestGreen color (R:34,G:139,B:34,A:255).\n        /// </summary>\n        public static Color ForestGreen\n        {\n            get;\n            private set;\n        }\n        \n    /// <summary>\n        /// Fuchsia color (R:255,G:0,B:255,A:255).\n        /// </summary>\n        public static Color Fuchsia\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Gainsboro color (R:220,G:220,B:220,A:255).\n        /// </summary>\n        public static Color Gainsboro\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// GhostWhite color (R:248,G:248,B:255,A:255).\n        /// </summary>\n        public static Color GhostWhite\n        {\n            get;\n            private set;\n        }\n        /// <summary>\n        /// Gold color (R:255,G:215,B:0,A:255).\n        /// </summary>\n        public static Color Gold\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Goldenrod color (R:218,G:165,B:32,A:255).\n        /// </summary>\n        public static Color Goldenrod\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Gray color (R:128,G:128,B:128,A:255).\n        /// </summary>\n        public static Color Gray\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Green color (R:0,G:128,B:0,A:255).\n        /// </summary>\n        public static Color Green\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// GreenYellow color (R:173,G:255,B:47,A:255).\n        /// </summary>\n        public static Color GreenYellow\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Honeydew color (R:240,G:255,B:240,A:255).\n        /// </summary>\n        public static Color Honeydew\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// HotPink color (R:255,G:105,B:180,A:255).\n        /// </summary>\n        public static Color HotPink\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// IndianRed color (R:205,G:92,B:92,A:255).\n        /// </summary>\n        public static Color IndianRed\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Indigo color (R:75,G:0,B:130,A:255).\n        /// </summary>\n        public static Color Indigo\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Ivory color (R:255,G:255,B:240,A:255).\n        /// </summary>\n        public static Color Ivory\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Khaki color (R:240,G:230,B:140,A:255).\n        /// </summary>\n        public static Color Khaki\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Lavender color (R:230,G:230,B:250,A:255).\n        /// </summary>\n        public static Color Lavender\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// LavenderBlush color (R:255,G:240,B:245,A:255).\n        /// </summary>\n        public static Color LavenderBlush\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// LawnGreen color (R:124,G:252,B:0,A:255).\n        /// </summary>\n        public static Color LawnGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LemonChiffon color (R:255,G:250,B:205,A:255).\n        /// </summary>\n        public static Color LemonChiffon\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightBlue color (R:173,G:216,B:230,A:255).\n        /// </summary>\n        public static Color LightBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightCoral color (R:240,G:128,B:128,A:255).\n        /// </summary>\n        public static Color LightCoral\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// LightCyan color (R:224,G:255,B:255,A:255).\n        /// </summary>\n        public static Color LightCyan\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightGoldenrodYellow color (R:250,G:250,B:210,A:255).\n        /// </summary>\n        public static Color LightGoldenrodYellow\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// LightGray color (R:211,G:211,B:211,A:255).\n        /// </summary>\n        public static Color LightGray\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightGreen color (R:144,G:238,B:144,A:255).\n        /// </summary>\n        public static Color LightGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightPink color (R:255,G:182,B:193,A:255).\n        /// </summary>\n        public static Color LightPink\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightSalmon color (R:255,G:160,B:122,A:255).\n        /// </summary>\n        public static Color LightSalmon\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightSeaGreen color (R:32,G:178,B:170,A:255).\n        /// </summary>\n        public static Color LightSeaGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightSkyBlue color (R:135,G:206,B:250,A:255).\n        /// </summary>\n        public static Color LightSkyBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightSlateGray color (R:119,G:136,B:153,A:255).\n        /// </summary>\n        public static Color LightSlateGray\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightSteelBlue color (R:176,G:196,B:222,A:255).\n        /// </summary>\n        public static Color LightSteelBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LightYellow color (R:255,G:255,B:224,A:255).\n        /// </summary>\n        public static Color LightYellow\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Lime color (R:0,G:255,B:0,A:255).\n        /// </summary>\n        public static Color Lime\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// LimeGreen color (R:50,G:205,B:50,A:255).\n        /// </summary>\n        public static Color LimeGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Linen color (R:250,G:240,B:230,A:255).\n        /// </summary>\n        public static Color Linen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Magenta color (R:255,G:0,B:255,A:255).\n        /// </summary>\n        public static Color Magenta\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Maroon color (R:128,G:0,B:0,A:255).\n        /// </summary>\n        public static Color Maroon\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumAquamarine color (R:102,G:205,B:170,A:255).\n        /// </summary>\n        public static Color MediumAquamarine\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumBlue color (R:0,G:0,B:205,A:255).\n        /// </summary>\n        public static Color MediumBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumOrchid color (R:186,G:85,B:211,A:255).\n        /// </summary>\n        public static Color MediumOrchid\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumPurple color (R:147,G:112,B:219,A:255).\n        /// </summary>\n        public static Color MediumPurple\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumSeaGreen color (R:60,G:179,B:113,A:255).\n        /// </summary>\n        public static Color MediumSeaGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumSlateBlue color (R:123,G:104,B:238,A:255).\n        /// </summary>\n        public static Color MediumSlateBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumSpringGreen color (R:0,G:250,B:154,A:255).\n        /// </summary>\n        public static Color MediumSpringGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumTurquoise color (R:72,G:209,B:204,A:255).\n        /// </summary>\n        public static Color MediumTurquoise\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MediumVioletRed color (R:199,G:21,B:133,A:255).\n        /// </summary>\n        public static Color MediumVioletRed\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MidnightBlue color (R:25,G:25,B:112,A:255).\n        /// </summary>\n        public static Color MidnightBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MintCream color (R:245,G:255,B:250,A:255).\n        /// </summary>\n        public static Color MintCream\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MistyRose color (R:255,G:228,B:225,A:255).\n        /// </summary>\n        public static Color MistyRose\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Moccasin color (R:255,G:228,B:181,A:255).\n        /// </summary>\n        public static Color Moccasin\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// MonoGame orange theme color (R:231,G:60,B:0,A:255).\n        /// </summary>\n        public static Color MonoGameOrange\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// NavajoWhite color (R:255,G:222,B:173,A:255).\n        /// </summary>\n        public static Color NavajoWhite\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Navy color (R:0,G:0,B:128,A:255).\n        /// </summary>\n        public static Color Navy\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// OldLace color (R:253,G:245,B:230,A:255).\n        /// </summary>\n        public static Color OldLace\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Olive color (R:128,G:128,B:0,A:255).\n        /// </summary>\n        public static Color Olive\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// OliveDrab color (R:107,G:142,B:35,A:255).\n        /// </summary>\n        public static Color OliveDrab\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Orange color (R:255,G:165,B:0,A:255).\n        /// </summary>\n        public static Color Orange\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// OrangeRed color (R:255,G:69,B:0,A:255).\n        /// </summary>\n        public static Color OrangeRed\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Orchid color (R:218,G:112,B:214,A:255).\n        /// </summary>\n        public static Color Orchid\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// PaleGoldenrod color (R:238,G:232,B:170,A:255).\n        /// </summary>\n        public static Color PaleGoldenrod\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// PaleGreen color (R:152,G:251,B:152,A:255).\n        /// </summary>\n        public static Color PaleGreen\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// PaleTurquoise color (R:175,G:238,B:238,A:255).\n        /// </summary>\n        public static Color PaleTurquoise\n        {\n            get;\n            private set;\n        }\n        /// <summary>\n        /// PaleVioletRed color (R:219,G:112,B:147,A:255).\n        /// </summary>\n        public static Color PaleVioletRed\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// PapayaWhip color (R:255,G:239,B:213,A:255).\n        /// </summary>\n        public static Color PapayaWhip\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// PeachPuff color (R:255,G:218,B:185,A:255).\n        /// </summary>\n        public static Color PeachPuff\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Peru color (R:205,G:133,B:63,A:255).\n        /// </summary>\n        public static Color Peru\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Pink color (R:255,G:192,B:203,A:255).\n        /// </summary>\n        public static Color Pink\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Plum color (R:221,G:160,B:221,A:255).\n        /// </summary>\n        public static Color Plum\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// PowderBlue color (R:176,G:224,B:230,A:255).\n        /// </summary>\n        public static Color PowderBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        ///  Purple color (R:128,G:0,B:128,A:255).\n        /// </summary>\n        public static Color Purple\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Red color (R:255,G:0,B:0,A:255).\n        /// </summary>\n        public static Color Red\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// RosyBrown color (R:188,G:143,B:143,A:255).\n        /// </summary>\n        public static Color RosyBrown\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// RoyalBlue color (R:65,G:105,B:225,A:255).\n        /// </summary>\n        public static Color RoyalBlue\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// SaddleBrown color (R:139,G:69,B:19,A:255).\n        /// </summary>\n        public static Color SaddleBrown\n        {\n            get;\n            private set;\n        }\n         \n        /// <summary>\n        /// Salmon color (R:250,G:128,B:114,A:255).\n        /// </summary>\n        public static Color Salmon\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// SandyBrown color (R:244,G:164,B:96,A:255).\n        /// </summary>\n        public static Color SandyBrown\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// SeaGreen color (R:46,G:139,B:87,A:255).\n        /// </summary>\n        public static Color SeaGreen\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// SeaShell color (R:255,G:245,B:238,A:255).\n        /// </summary>\n        public static Color SeaShell\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Sienna color (R:160,G:82,B:45,A:255).\n        /// </summary>\n        public static Color Sienna\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Silver color (R:192,G:192,B:192,A:255).\n        /// </summary>\n        public static Color Silver\n        {\n            get;\n            private set;\n        }\n        \n       /// <summary>\n       /// SkyBlue color (R:135,G:206,B:235,A:255).\n       /// </summary>\n       public static Color SkyBlue\n        {\n            get;\n            private set;\n        }\n       \n        /// <summary>\n        /// SlateBlue color (R:106,G:90,B:205,A:255).\n        /// </summary>\n        public static Color SlateBlue\n       {\n           get;\n           private set;\n       }\n      \n        /// <summary>\n        /// SlateGray color (R:112,G:128,B:144,A:255).\n        /// </summary>\n        public static Color SlateGray\n        {\n            get;\n            private set;\n        }\n      \n        /// <summary>\n        /// Snow color (R:255,G:250,B:250,A:255).\n        /// </summary>\n        public static Color Snow\n        {\n            get;\n            private set;\n        }\n      \n        /// <summary>\n        /// SpringGreen color (R:0,G:255,B:127,A:255).\n        /// </summary>\n        public static Color SpringGreen\n        {\n            get;\n            private set;\n        }\n      \n        /// <summary>\n        /// SteelBlue color (R:70,G:130,B:180,A:255).\n        /// </summary>\n        public static Color SteelBlue\n        {\n            get;\n            private set;\n        }\n      \n        /// <summary>\n        /// Tan color (R:210,G:180,B:140,A:255).\n        /// </summary>\n        public static Color Tan\n        {\n            get;\n            private set;\n        }\n       \n        /// <summary>\n        /// Teal color (R:0,G:128,B:128,A:255).\n        /// </summary>\n        public static Color Teal\n        {\n            get;\n            private set;\n        }\n       \n        /// <summary>\n        /// Thistle color (R:216,G:191,B:216,A:255).\n        /// </summary>\n        public static Color Thistle\n        {\n            get;\n            private set;\n        }\n       \n        /// <summary>\n        /// Tomato color (R:255,G:99,B:71,A:255).\n        /// </summary>\n        public static Color Tomato\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Turquoise color (R:64,G:224,B:208,A:255).\n        /// </summary>\n        public static Color Turquoise\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Violet color (R:238,G:130,B:238,A:255).\n        /// </summary>\n        public static Color Violet\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Wheat color (R:245,G:222,B:179,A:255).\n        /// </summary>\n    public static Color Wheat\n        {\n            get;\n            private set;\n        }\n    \n        /// <summary>\n        /// White color (R:255,G:255,B:255,A:255).\n        /// </summary>\n        public static Color White\n    {\n        get;\n        private set;\n    }\n       \n        /// <summary>\n        /// WhiteSmoke color (R:245,G:245,B:245,A:255).\n        /// </summary>\n        public static Color WhiteSmoke\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// Yellow color (R:255,G:255,B:0,A:255).\n        /// </summary>\n        public static Color Yellow\n        {\n            get;\n            private set;\n        }\n        \n        /// <summary>\n        /// YellowGreen color (R:154,G:205,B:50,A:255).\n        /// </summary>\n        public static Color YellowGreen\n        {\n            get;\n            private set;\n        }\n        #endregion\n\n        /// <summary>\n        /// Performs linear interpolation of <see cref=\"Color\"/>.\n        /// </summary>\n        /// <param name=\"start\">Source <see cref=\"Color\"/>.</param>\n        /// <param name=\"end\">Destination <see cref=\"Color\"/>.</param>\n        /// <param name=\"amount\">Interpolation factor.</param>\n        /// <returns>Interpolated <see cref=\"Color\"/>.</returns>\n        public static Color Lerp(Color start, Color end, Single amount)\n        {\n            amount = MathHelper.Clamp(amount, 0, 1);\n            return new Color(\n                (int)MathHelper.Lerp(start.R, end.R, amount),\n                (int)MathHelper.Lerp(start.G, end.G, amount),\n                (int)MathHelper.Lerp(start.B, end.B, amount),\n                (int)MathHelper.Lerp(start.A, end.A, amount) );\n        }\n\n        /// <summary>\n        /// <see cref=\"Color.Lerp\"/> should be used instead of this function.\n        /// </summary>\n        /// <returns>Interpolated <see cref=\"Color\"/>.</returns>\n        [Obsolete(\"Color.Lerp should be used instead of this function.\")]\n        public static Color LerpPrecise(Color start, Color end, Single amount)\n        {\n            amount = MathHelper.Clamp(amount, 0, 1);\n            return new Color(\n                (int)MathHelper.LerpPrecise(start.R, end.R, amount),\n                (int)MathHelper.LerpPrecise(start.G, end.G, amount),\n                (int)MathHelper.LerpPrecise(start.B, end.B, amount),\n                (int)MathHelper.LerpPrecise(start.A, end.A, amount));\n        }\n        \n        /// <summary>\n        /// Multiply <see cref=\"Color\"/> by value.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Color\"/>.</param>\n        /// <param name=\"right\">Multiplicator.</param>\n        /// <returns>Multiplication result.</returns>\n        public static Color Multiply(Color left, float right)\n        {\n            return new Color((int)(left.R * right), (int)(left.G * right), (int)(left.B * right), (int)(left.A * right));\n        }\n    \n        /// <summary>\n        /// Multiply <see cref=\"Color\"/> by value.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"Color\"/>.</param>\n        /// <param name=\"right\">Multiplicator.</param>\n        /// <returns>Multiplication result.</returns>\n        public static Color operator *(Color left, float right)\n        {\n            return new Color((int)(left.R * right), (int)(left.G * right), (int)(left.B * right), (int)(left.A * right));\n        }\n\n        /// <summary>\n        /// Multiply <see cref=\"Color\"/> by value.\n        /// </summary>\n        /// <param name=\"left\">Scalar value on the left of the mul sign.</param>\n        /// <param name=\"right\">Source <see cref=\"Color\"/>.</param>\n        /// <returns>Multiplication result.</returns>\n        public static Color operator *(float left, Color right)\n        {\n            return new Color((int)(right.R * left), (int)(right.G * left), (int)(right.B * left), (int)(right.A * left));\n        }\n\n        /// <summary>\n        /// Gets a <see cref=\"Vector3\"/> representation for this object.\n        /// </summary>\n        /// <returns>A <see cref=\"Vector3\"/> representation for this object.</returns>\n        public Vector3 ToVector3()\n        {\n            return new Vector3(R / 255.0f, G / 255.0f, B / 255.0f);\n        }\n\n        /// <summary>\n        /// Gets a <see cref=\"Vector4\"/> representation for this object.\n        /// </summary>\n        /// <returns>A <see cref=\"Vector4\"/> representation for this object.</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(R / 255.0f, G / 255.0f, B / 255.0f, A / 255.0f);\n        }\n    \n\n        internal string DebugDisplayString\n        {\n            get\n            {\n                return string.Concat(\n                    this.R.ToString(), \"  \",\n                    this.G.ToString(), \"  \",\n                    this.B.ToString(), \"  \",\n                    this.A.ToString()\n                );\n            }\n        }\n\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Color\"/> in the format:\n        /// {R:[red] G:[green] B:[blue] A:[alpha]}\n        /// </summary>\n        /// <returns><see cref=\"String\"/> representation of this <see cref=\"Color\"/>.</returns>\n    public override string ToString()\n    {\n        StringBuilder sb = new StringBuilder(25);\n        sb.Append(\"{R:\");\n        sb.Append(R);\n        sb.Append(\" G:\");\n        sb.Append(G);\n        sb.Append(\" B:\");\n        sb.Append(B);\n        sb.Append(\" A:\");\n        sb.Append(A);\n        sb.Append(\"}\");\n        return sb.ToString();\n    }\n    \n    /// <summary>\n        /// Translate a non-premultipled alpha <see cref=\"Color\"/> to a <see cref=\"Color\"/> that contains premultiplied alpha.\n        /// </summary>\n        /// <param name=\"vector\">A <see cref=\"Vector4\"/> representing color.</param>\n        /// <returns>A <see cref=\"Color\"/> which contains premultiplied alpha data.</returns>\n        public static Color FromNonPremultiplied(Vector4 vector)\n        {\n            return new Color(vector.X * vector.W, vector.Y * vector.W, vector.Z * vector.W, vector.W);\n        }\n    \n    /// <summary>\n        /// Translate a non-premultipled alpha <see cref=\"Color\"/> to a <see cref=\"Color\"/> that contains premultiplied alpha.\n        /// </summary>\n        /// <param name=\"r\">Red component value.</param>\n        /// <param name=\"g\">Green component value.</param>\n        /// <param name=\"b\">Blue component value.</param>\n        /// <param name=\"a\">Alpha component value.</param>\n        /// <returns>A <see cref=\"Color\"/> which contains premultiplied alpha data.</returns>\n        public static Color FromNonPremultiplied(int r, int g, int b, int a)\n        {\n            return new Color(r * a / 255, g * a / 255, b * a / 255, a);\n        }\n\n        #region IEquatable<Color> Members\n    \n    /// <summary>\n        /// Compares whether current instance is equal to specified <see cref=\"Color\"/>.\n        /// </summary>\n        /// <param name=\"other\">The <see cref=\"Color\"/> to compare.</param>\n        /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>\n        public bool Equals(Color other)\n        {\n        return this.PackedValue == other.PackedValue;\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Color\"/>.\n        /// </summary>\n        /// <param name=\"r\">Red component value from 0 to 255.</param>\n        /// <param name=\"g\">Green component value from 0 to 255.</param>\n        /// <param name=\"b\">Blue component value from 0 to 255.</param>\n        public void Deconstruct(out byte r, out byte g, out byte b)\n        {\n            r = R;\n            g = G;\n            b = B;\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Color\"/>.\n        /// </summary>\n        /// <param name=\"r\">Red component value from 0.0f to 1.0f.</param>\n        /// <param name=\"g\">Green component value from 0.0f to 1.0f.</param>\n        /// <param name=\"b\">Blue component value from 0.0f to 1.0f.</param>\n        public void Deconstruct(out float r, out float g, out float b)\n        {\n            r = R / 255f;\n            g = G / 255f;\n            b = B / 255f;\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Color\"/> with Alpha.\n        /// </summary>\n        /// <param name=\"r\">Red component value from 0 to 255.</param>\n        /// <param name=\"g\">Green component value from 0 to 255.</param>\n        /// <param name=\"b\">Blue component value from 0 to 255.</param>\n        /// <param name=\"a\">Alpha component value from 0 to 255.</param>\n        public void Deconstruct(out byte r, out byte g, out byte b, out byte a)\n        {\n            r = R;\n            g = G;\n            b = B;\n            a = A;\n        }\n\n        /// <summary>\n        /// Deconstruction method for <see cref=\"Color\"/> with Alpha.\n        /// </summary>\n        /// <param name=\"r\">Red component value from 0.0f to 1.0f.</param>\n        /// <param name=\"g\">Green component value from 0.0f to 1.0f.</param>\n        /// <param name=\"b\">Blue component value from 0.0f to 1.0f.</param>\n        /// <param name=\"a\">Alpha component value from 0.0f to 1.0f.</param>\n        public void Deconstruct(out float r, out float g, out float b, out float a)\n        {\n            r = R / 255f;\n            g = G / 255f;\n            b = B / 255f;\n            a = A / 255f;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/AlphaTestEffectReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    class AlphaTestEffectReader : ContentTypeReader<AlphaTestEffect>\n    {\n        protected override AlphaTestEffect Read(ContentReader input, AlphaTestEffect existingInstance)\n        {\n            AlphaTestEffect effect = new AlphaTestEffect(input.GetGraphicsDevice());\n\n            effect.Texture = input.ReadExternalReference<Texture>() as Texture2D;\n            effect.AlphaFunction = (CompareFunction)input.ReadInt32();\n            effect.ReferenceAlpha = (int)input.ReadUInt32();\n            effect.DiffuseColor = input.ReadVector3();\n            effect.Alpha = input.ReadSingle();\n            effect.VertexColorEnabled = input.ReadBoolean();\n            return effect;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/BasicEffectReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class BasicEffectReader : ContentTypeReader<BasicEffect>\n    {\n        protected override BasicEffect Read(ContentReader input, BasicEffect existingInstance)\n        {\n            BasicEffect effect = new BasicEffect(input.GetGraphicsDevice());\n            Texture2D texture = input.ReadExternalReference<Texture>() as Texture2D;\n            if (texture != null)\n            {\n                effect.Texture = texture;\n                effect.TextureEnabled = true;\n            }\n\n            effect.DiffuseColor = input.ReadVector3();\n            effect.EmissiveColor = input.ReadVector3();\n            effect.SpecularColor = input.ReadVector3();\n            effect.SpecularPower = input.ReadSingle();\n            effect.Alpha = input.ReadSingle();\n            effect.VertexColorEnabled = input.ReadBoolean();\n            return effect;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/ColorReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class ColorReader : ContentTypeReader<Color>\n    {\n        protected override Color Read(ContentReader input, Color existingInstance)\n        {\n            Color result = new Color();\n            result.R = input.ReadByte();\n            result.G = input.ReadByte();\n            result.B = input.ReadByte();\n            result.A = input.ReadByte();\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/DualTextureEffectReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    class DualTextureEffectReader : ContentTypeReader<DualTextureEffect>\n    {\n        protected override DualTextureEffect Read(ContentReader input, DualTextureEffect existingInstance)\n        {\n            DualTextureEffect effect = new DualTextureEffect(input.GetGraphicsDevice());\n            effect.Texture = input.ReadExternalReference<Texture>() as Texture2D;\n            effect.Texture2 = input.ReadExternalReference<Texture>() as Texture2D;\n            effect.DiffuseColor = input.ReadVector3();\n            effect.Alpha = input.ReadSingle();\n            effect.VertexColorEnabled = input.ReadBoolean();\n            return effect;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/EffectMaterialReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class EffectMaterialReader : ContentTypeReader<EffectMaterial>\n    {\n        protected override EffectMaterial Read(ContentReader input, EffectMaterial existingInstance)\n        {\n            Effect effect = input.ReadExternalReference<Effect>();\n            EffectMaterial effectMaterial = new EffectMaterial(effect);\n\n            Dictionary<string,object> dict = input.ReadObject<Dictionary<string, object>>();\n\n            foreach (KeyValuePair<string, object> item in dict)\n            {\n                EffectParameter parameter = effectMaterial.Parameters[item.Key];\n                if (parameter != null)\n                {\n                    Type itemType = item.Value.GetType();\n\n                    if (ReflectionHelpers.IsAssignableFromType(typeof(Texture), itemType))\n                        parameter.SetValue((Texture)item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(int), itemType))\n                        parameter.SetValue((int)item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(int[]), itemType))\n                        parameter.SetValue((int[])item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(bool), itemType))\n                        parameter.SetValue((bool)item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(float), itemType))\n                        parameter.SetValue((float)item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(float[]), itemType))\n                        parameter.SetValue((float[])item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector2), itemType))\n                        parameter.SetValue((Vector2)item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector2[]), itemType))\n                        parameter.SetValue((Vector2[])item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector3), itemType))\n                        parameter.SetValue((Vector3)item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector3[]), itemType))\n                        parameter.SetValue((Vector3[])item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector4), itemType))\n                        parameter.SetValue((Vector4)item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector4[]), itemType))\n                        parameter.SetValue((Vector4[])item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Matrix), itemType))\n                        parameter.SetValue((Matrix)item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Matrix[]), itemType))\n                        parameter.SetValue((Matrix[])item.Value);\n                    else if (ReflectionHelpers.IsAssignableFromType(typeof(Quaternion), itemType))\n                        parameter.SetValue((Quaternion)item.Value);\n                    else\n                        throw new NotSupportedException(\"Parameter type is not supported\");\n                }\n                else\n                {\n                    Debug.WriteLine(\"No parameter \" + item.Key);\n                }\n            }\n\n            return effectMaterial;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/EffectReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class EffectReader : ContentTypeReader<Effect>\n    {\n        protected override Effect Read(ContentReader input, Effect existingInstance)\n        {\n            int dataSize = input.ReadInt32();\n            byte[] data = input.BufferPool.Get(dataSize);\n            input.Read(data, 0, dataSize);\n            Effect effect = existingInstance ?? new Effect(input.GetGraphicsDevice(), data, 0, dataSize);\n            input.BufferPool.Return(data);\n\n            return effect;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/EnvironmentMapEffectReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    class EnvironmentMapEffectReader : ContentTypeReader<EnvironmentMapEffect>\n    {\n        protected override EnvironmentMapEffect Read(ContentReader input, EnvironmentMapEffect existingInstance)\n        {\n            EnvironmentMapEffect effect = new EnvironmentMapEffect(input.GetGraphicsDevice());\n            effect.Texture = input.ReadExternalReference<Texture>() as Texture2D;\n            effect.EnvironmentMap = input.ReadExternalReference<TextureCube>() as TextureCube;\n            effect.EnvironmentMapAmount = input.ReadSingle();\n            effect.EnvironmentMapSpecular = input.ReadVector3();\n            effect.FresnelFactor = input.ReadSingle();\n            effect.DiffuseColor = input.ReadVector3();\n            effect.EmissiveColor = input.ReadVector3();\n            effect.Alpha = input.ReadSingle();\n            return effect;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/IndexBufferReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    class IndexBufferReader : ContentTypeReader<IndexBuffer>\n    {\n        protected override IndexBuffer Read(ContentReader input, IndexBuffer existingInstance)\n        {\n            IndexBuffer indexBuffer = existingInstance;\n\n            bool sixteenBits = input.ReadBoolean();\n            int dataSize = input.ReadInt32();\n            if (indexBuffer == null)\n            {\n                indexBuffer = new IndexBuffer(input.GetGraphicsDevice(),\n                    sixteenBits ? IndexElementSize.SixteenBits : IndexElementSize.ThirtyTwoBits, \n                    dataSize / (sixteenBits ? 2 : 4), BufferUsage.None);\n            }\n\n            byte[] data = input.BufferPool.Get(dataSize);\n            input.Read(data, 0, dataSize);\n            indexBuffer.SetData(data, 0, dataSize);\n            input.BufferPool.Return(data);\n\n            return indexBuffer;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/ModelReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class ModelReader : ContentTypeReader<Model>\n    {\n//      List<VertexBuffer> vertexBuffers = new List<VertexBuffer>();\n//      List<IndexBuffer> indexBuffers = new List<IndexBuffer>();\n//      List<Effect> effects = new List<Effect>();\n//      List<GraphicsResource> sharedResources = new List<GraphicsResource>();\n\n        protected override Model Read(ContentReader input, Model existingInstance)\n        {\n            // Read the bone names and transforms.\n            uint boneCount = input.ReadUInt32();\n            bool is8BitBoneReference = (boneCount < 255);\n            //Debug.WriteLine(\"Bone count: {0}\", boneCount);\n\n            List<ModelBone> bones = new List<ModelBone>((int)boneCount);\n\n            for (uint boneIndex = 0; boneIndex < boneCount; boneIndex++)\n            {\n                string boneName = input.ReadObject<string>();\n                Matrix boneTransform = input.ReadMatrix();\n                ModelBone bone = new ModelBone((int)boneIndex, boneName, boneTransform);\n                bones.Add(bone);\n            }\n            \n            // Read the bone hierarchy.\n            for (int boneIndex = 0; boneIndex < boneCount; boneIndex++)\n            {\n                ModelBone bone = bones[boneIndex];\n\n                //Debug.WriteLine(\"Bone {0} hierarchy:\", i);\n\n                // Read the parent bone reference.\n                //Debug.WriteLine(\"Parent: \");\n                int parentIndex = ReadBoneReference(input, is8BitBoneReference);\n\n                if (parentIndex != -1)\n                    bone.Parent = bones[parentIndex];\n\n                // Read the child bone references.\n                uint childCount = input.ReadUInt32();\n\n                //Debug.WriteLine(\"Children:\");\n\n                for (uint j = 0; j < childCount; j++)\n                {\n                    int childIndex = ReadBoneReference(input, is8BitBoneReference);\n                    if (childIndex != -1)\n                        bone.AddChild(bones[childIndex]);\n                }\n            }\n\n            List<ModelMesh> meshes = new List<ModelMesh>();\n\n            //// Read the mesh data.\n            int meshCount = input.ReadInt32();\n            //Debug.WriteLine(\"Mesh count: {0}\", meshCount);\n\n            for (int i = 0; i < meshCount; i++)\n            {\n\n                //Debug.WriteLine(\"Mesh {0}\", i);\n                string name = input.ReadObject<string>();\n                int parentBoneIndex = ReadBoneReference(input, is8BitBoneReference);\n                //Opt: BoundingSphere boundingSphere = input.ReadRawObject<BoundingSphere>();\n                BoundingSphere boundingSphere = new BoundingSphere(input.ReadVector3(), input.ReadSingle());\n\n                // Tag\n                object meshTag = input.ReadObject<object>();\n\n                // Read the mesh part data.\n                int partCount = input.ReadInt32();\n                //Debug.WriteLine(\"Mesh part count: {0}\", partCount);\n\n                List<ModelMeshPart> parts = new List<ModelMeshPart>(partCount);\n\n                for (uint j = 0; j < partCount; j++)\n                {\n                    ModelMeshPart part;\n                    if (existingInstance != null)\n                        part = existingInstance.Meshes[i].MeshParts[(int)j];\n                    else\n                        part = new ModelMeshPart();\n\n                    part.VertexOffset = input.ReadInt32();\n                    part.NumVertices = input.ReadInt32();\n                    part.StartIndex = input.ReadInt32();\n                    part.PrimitiveCount = input.ReadInt32();\n\n                    // tag\n                    part.Tag = input.ReadObject<object>();\n                    \n                    parts.Add(part);\n                    \n                    int jj = (int)j;\n                    input.ReadSharedResource<VertexBuffer>(delegate (VertexBuffer v)\n                    {\n                        parts[jj].VertexBuffer = v;\n                    });\n                    input.ReadSharedResource<IndexBuffer>(delegate (IndexBuffer v)\n                    {\n                        parts[jj].IndexBuffer = v;\n                    });\n                    input.ReadSharedResource<Effect>(delegate (Effect v)\n                    {\n                        parts[jj].Effect = v;\n                    });\n\n                    \n                }\n\n                if (existingInstance != null)\n                    continue;\n\n                ModelMesh mesh = new ModelMesh(input.GetGraphicsDevice(), parts);\n\n                mesh.Tag = meshTag;\n                mesh.Name = name;\n                mesh.ParentBone = bones[parentBoneIndex];\n                mesh.BoundingSphere = boundingSphere;\n                meshes.Add(mesh);\n            }\n\n            if (existingInstance != null)\n            {\n                // Read past remaining data and return existing instance\n                ReadBoneReference(input, is8BitBoneReference);\n                input.ReadObject<object>();\n                return existingInstance;\n            }\n\n            // Read the final pieces of model data.\n            int rootBoneIndex = ReadBoneReference(input, is8BitBoneReference);\n\n            Model model = new Model(bones, meshes);\n\n            model.Root = bones[rootBoneIndex];\n\n            // Tag?\n            model.Tag = input.ReadObject<object>();\n            \n            return model;\n        }\n\n        static int ReadBoneReference(ContentReader input, bool is8BitBoneReference)\n        {\n            // Read the bone ID, which may be encoded as either an 8 or 32 bit value.\n            uint boneId = (is8BitBoneReference)\n                        ? input.ReadByte()\n                        : input.ReadUInt32()\n                        ;\n\n            // Print out the bone ID.\n            //if (boneId == 0)\n            //    Debug.WriteLine(\"null\");\n            //else\n            //    Debug.WriteLine(\"bone #{0}\", boneId - 1);\n\n            return (int)(boneId - 1);\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/SkinnedEffectReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    class SkinnedEffectReader : ContentTypeReader<SkinnedEffect>\n    {\n        protected override SkinnedEffect Read(ContentReader input, SkinnedEffect existingInstance)\n        {\n            SkinnedEffect effect = new SkinnedEffect(input.GetGraphicsDevice());\n            effect.Texture = input.ReadExternalReference<Texture>() as Texture2D;\n            effect.WeightsPerVertex = input.ReadInt32();\n            effect.DiffuseColor = input.ReadVector3();\n            effect.EmissiveColor = input.ReadVector3();\n            effect.SpecularColor = input.ReadVector3();\n            effect.SpecularPower = input.ReadSingle();\n            effect.Alpha = input.ReadSingle();\n            return effect;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/SpriteFontReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class SpriteFontReader : ContentTypeReader<SpriteFont>\n    {\n        protected override SpriteFont Read(ContentReader input, SpriteFont existingInstance)\n        {\n            if (existingInstance != null)\n            {\n                // Read the texture into the existing texture instance\n                input.ReadObject<Texture2D>(existingInstance.Texture);\n                \n                // discard the rest of the SpriteFont data as we are only reloading GPU resources for now\n                input.ReadObject<List<Rectangle>>();\n                input.ReadObject<List<Rectangle>>();\n                input.ReadObject<List<char>>();\n                input.ReadInt32();\n                input.ReadSingle();\n                input.ReadObject<List<Vector3>>();\n                if (input.ReadBoolean())\n                {\n                    input.ReadChar();\n                }\n\n                return existingInstance;\n            }\n            else\n            {\n                // Create a fresh SpriteFont instance\n                Texture2D texture = input.ReadObject<Texture2D>();\n                List<Rectangle> glyphs = input.ReadObject<List<Rectangle>>();\n                List<Rectangle> cropping = input.ReadObject<List<Rectangle>>();\n                List<char> charMap = input.ReadObject<List<char>>();\n                int lineSpacing = input.ReadInt32();\n                float spacing = input.ReadSingle();\n                List<Vector3> kerning = input.ReadObject<List<Vector3>>();\n                char? defaultCharacter = null;\n                if (input.ReadBoolean())\n                {\n                    defaultCharacter = new char?(input.ReadChar());\n                }\n                return new SpriteFont(texture, glyphs, cropping, charMap, lineSpacing, spacing, kerning, defaultCharacter);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/Texture2DReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Texture2DReader : ContentTypeReader<Texture2D>\n    {\n        protected override Texture2D Read(ContentReader input, Texture2D existingInstance)\n        {\n            Texture2D texture = null;\n\n            SurfaceFormat surfaceFormat = (SurfaceFormat)input.ReadInt32();\n            int width = input.ReadInt32();\n            int height = input.ReadInt32();\n            int levelCount = input.ReadInt32();\n            int levelCountOutput = levelCount;\n\n            SurfaceFormat convertedFormat = surfaceFormat;\n            switch (surfaceFormat)\n            {\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1a:\n                    if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsDxt1)\n                        convertedFormat = SurfaceFormat.Color;\n                    break;\n                case SurfaceFormat.Dxt1SRgb:\n                    if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsDxt1)\n                        convertedFormat = SurfaceFormat.ColorSRgb;\n                    break;\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt5:\n                    if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc)\n                        convertedFormat = SurfaceFormat.Color;\n                    break;\n                case SurfaceFormat.Dxt3SRgb:\n                case SurfaceFormat.Dxt5SRgb:\n                    if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc)\n                        convertedFormat = SurfaceFormat.ColorSRgb;\n                    break;\n                case SurfaceFormat.NormalizedByte4:\n                    convertedFormat = SurfaceFormat.Color;\n                    break;\n                case SurfaceFormat.Bgra5551:\n                    if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsBgra5551)\n                    {\n                        //if (((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsAbgr5551)\n                        //    convertedFormat = SurfaceFormat.Abgr5551;\n                    }\n                    break;\n                case SurfaceFormat.Bgra4444:\n                    if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsBgra4444)\n                    {\n                        //if (((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsAbgr4444)\n                        //    convertedFormat = SurfaceFormat.Abgr4444;\n                    }\n                    break;\n            }\n            \n            texture = existingInstance ?? new Texture2D(input.GetGraphicsDevice(), width, height, levelCountOutput > 1, convertedFormat);\n\n            for (int level = 0; level < levelCount; level++)\n            {\n                int levelDataSizeInBytes = input.ReadInt32();\n                byte[] levelData = input.BufferPool.Get(levelDataSizeInBytes);\n                input.Read(levelData, 0, levelDataSizeInBytes);\n                int levelWidth = Math.Max(width >> level, 1);\n                int levelHeight = Math.Max(height >> level, 1);\n\n                if (level >= levelCountOutput)\n                    continue;\n\n                //Convert the image data if required\n                switch (surfaceFormat)\n                {\n                    case SurfaceFormat.Dxt1:\n                    case SurfaceFormat.Dxt1SRgb:\n                    case SurfaceFormat.Dxt1a:\n                        if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsDxt1 && convertedFormat == SurfaceFormat.Color)\n                        {\n                            levelData = DxtDecoder.DecompressDxt1(levelData, levelWidth, levelHeight);\n                            levelDataSizeInBytes = levelData.Length;\n                        }\n                        break;\n                    case SurfaceFormat.Dxt3:\n                    case SurfaceFormat.Dxt3SRgb:\n                        if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc)\n                            if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc &&\n                                convertedFormat == SurfaceFormat.Color)\n                            {\n                                levelData = DxtDecoder.DecompressDxt3(levelData, levelWidth, levelHeight);\n                                levelDataSizeInBytes = levelData.Length;\n                            }\n                        break;\n                    case SurfaceFormat.Dxt5:\n                    case SurfaceFormat.Dxt5SRgb:\n                        if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc)\n                            if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc &&\n                                convertedFormat == SurfaceFormat.Color)\n                            {\n                                levelData = DxtDecoder.DecompressDxt5(levelData, levelWidth, levelHeight);\n                                levelDataSizeInBytes = levelData.Length;\n                            }\n                        break;\n                    case SurfaceFormat.Bgra5551:\n                        if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsBgra5551)\n                        {\n                            //if (convertedFormat == SurfaceFormat.Abgr5551)\n                            {\n                                // Shift the channels to suit OpenGL\n                                int offset = 0;\n                                for (int y = 0; y < levelHeight; y++)\n                                {\n                                    for (int x = 0; x < levelWidth; x++)\n                                    {\n                                        ushort pixel = BitConverter.ToUInt16(levelData, offset);\n                                        pixel = (ushort)(((pixel & 0x7FFF) << 1) | ((pixel & 0x8000) >> 15));\n                                        levelData[offset] = (byte)(pixel);\n                                        levelData[offset + 1] = (byte)(pixel >> 8);\n                                        offset += 2;\n                                    }\n                                }\n                            }\n                        }\n                        break;\n                    case SurfaceFormat.Bgra4444:\n                        if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsBgra4444)\n                        {\n                            //if (convertedFormat == SurfaceFormat.Abgr4444)\n                            {\n                                // Shift the channels to suit OpenGL\n                                int offset = 0;\n                                for (int y = 0; y < levelHeight; y++)\n                                {\n                                    for (int x = 0; x < levelWidth; x++)\n                                    {\n                                        ushort pixel = BitConverter.ToUInt16(levelData, offset);\n                                        pixel = (ushort)(((pixel & 0x0FFF) << 4) | ((pixel & 0xF000) >> 12));\n                                        levelData[offset] = (byte)(pixel);\n                                        levelData[offset + 1] = (byte)(pixel >> 8);\n                                        offset += 2;\n                                    }\n                                }\n                            }\n                        }\n                        break;\n                    case SurfaceFormat.NormalizedByte4:\n                        {\n                            int bytesPerPixel = surfaceFormat.GetSize();\n                            int pitch = levelWidth * bytesPerPixel;\n                            for (int y = 0; y < levelHeight; y++)\n                            {\n                                for (int x = 0; x < levelWidth; x++)\n                                {\n                                    int color = BitConverter.ToInt32(levelData, y * pitch + x * bytesPerPixel);\n                                    levelData[y * pitch + x * 4] = (byte)(((color >> 16) & 0xff)); //R:=W\n                                    levelData[y * pitch + x * 4 + 1] = (byte)(((color >> 8) & 0xff)); //G:=V\n                                    levelData[y * pitch + x * 4 + 2] = (byte)(((color) & 0xff)); //B:=U\n                                    levelData[y * pitch + x * 4 + 3] = (byte)(((color >> 24) & 0xff)); //A:=Q\n                                }\n                            }\n                        }\n                        break;\n                }\n                \n                texture.SetData(level, null, levelData, 0, levelDataSizeInBytes);\n                input.BufferPool.Return(levelData);\n            }\n                    \n            texture.Name = input.AssetName;\n            return texture;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/Texture3DReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class Texture3DReader : ContentTypeReader<Texture3D>\n    {\n        protected override Texture3D Read(ContentReader input, Texture3D existingInstance)\n        {\n            Texture3D texture = null;\n\n            SurfaceFormat format = (SurfaceFormat)input.ReadInt32();\n            int width = input.ReadInt32();\n            int height = input.ReadInt32();\n            int depth = input.ReadInt32();\n            int levelCount = input.ReadInt32();\n\n            if (existingInstance == null)\n                texture = new Texture3D(input.GetGraphicsDevice(), width, height, depth, levelCount > 1, format);\n            else\n                texture = existingInstance;\n\n            for (int i = 0; i < levelCount; i++)\n            {\n                int dataSize = input.ReadInt32();\n                byte[] data = input.BufferPool.Get(dataSize);\n                input.Read(data, 0, dataSize);\n                texture.SetData(i, 0, 0, width, height, 0, depth, data, 0, dataSize);\n\n                // Calculate dimensions of next mip level.\n                width = Math.Max(width >> 1, 1);\n                height = Math.Max(height >> 1, 1);\n                depth = Math.Max(depth >> 1, 1);\n\n                input.BufferPool.Return(data);\n            }\n\n            return texture;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/TextureCubeReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class TextureCubeReader : ContentTypeReader<TextureCube>\n    {\n\n        protected override TextureCube Read(ContentReader input, TextureCube existingInstance)\n        {\n            TextureCube textureCube = null;\n\n            SurfaceFormat surfaceFormat = (SurfaceFormat)input.ReadInt32();\n            int size = input.ReadInt32();\n            int levels = input.ReadInt32();\n\n            if (existingInstance == null)\n                textureCube = new TextureCube(input.GetGraphicsDevice(), size, levels > 1, surfaceFormat);\n            else\n                textureCube = existingInstance;\n\n            for (int face = 0; face < 6; face++)\n            {\n                for (int i = 0; i < levels; i++)\n                {\n                    int faceSize = input.ReadInt32();\n                    byte[] faceData = input.BufferPool.Get(faceSize);\n                    input.Read(faceData, 0, faceSize);\n                    textureCube.SetData<byte>((CubeMapFace)face, i, null, faceData, 0, faceSize);\n                    input.BufferPool.Return(faceData);\n                }\n            }\n\n             return textureCube;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/TextureReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class TextureReader : ContentTypeReader<Texture>\n    {\n        protected override Texture Read(ContentReader input, Texture existingInstance)\n        {\n            return existingInstance;\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/VertexBufferReader.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    class VertexBufferReader : ContentTypeReader<VertexBuffer>\n    {\n        protected override VertexBuffer Read(ContentReader input, VertexBuffer existingInstance)\n        {\n            VertexDeclaration declaration = input.ReadRawObject<VertexDeclaration>();\n\n            int vertexCount = (int)input.ReadUInt32();\n            int dataSize = vertexCount * declaration.VertexStride;\n            byte[] data = input.BufferPool.Get(dataSize);\n            input.Read(data, 0, dataSize);\n\n            VertexBuffer buffer = existingInstance ?? new VertexBuffer(input.GetGraphicsDevice(), declaration, vertexCount, BufferUsage.None);\n            buffer.SetData(data, 0, dataSize);\n            input.BufferPool.Return(data);\n            return buffer;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Content/VertexDeclarationReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class VertexDeclarationReader : ContentTypeReader<VertexDeclaration>\n    {\n        protected override VertexDeclaration Read(ContentReader input, VertexDeclaration existingInstance)\n        {\n            int vertexStride = input.ReadInt32();\n            int elementCount = input.ReadInt32();\n\n            VertexElement[] elements = new VertexElement[elementCount];\n            for (int i = 0; i < elementCount; i++)\n            {\n                int offset = input.ReadInt32();\n                VertexElementFormat elementFormat = (VertexElementFormat)input.ReadInt32();\n                VertexElementUsage elementUsage = (VertexElementUsage)input.ReadInt32();\n                int usageIndex = input.ReadInt32();\n                elements[i] = new VertexElement(offset, elementFormat, elementUsage, usageIndex);\n            }\n\n            VertexDeclaration vertexDeclaration = VertexDeclaration.GetOrCreate(vertexStride, elements);\n\n            return vertexDeclaration;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/DisplayOrientation.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Defines the orientation of the display.\n    /// </summary>\n    [Flags]\n    public enum DisplayOrientation\n    {\n        /// <summary>\n        /// The default orientation.\n        /// </summary>\n        Default = 0,\n        /// <summary>\n        /// The display is rotated counterclockwise into a landscape orientation. Width is greater than height.\n        /// </summary>\n        LandscapeLeft = 1,\n        /// <summary>\n        /// The display is rotated clockwise into a landscape orientation. Width is greater than height.\n        /// </summary>\n        LandscapeRight = 2,\n        /// <summary>\n        /// The display is rotated as portrait, where height is greater than width.\n        /// </summary>\n        Portrait = 4,\n        /// <summary>\n        /// The display is rotated as inverted portrait, where height is greater than width.\n        /// </summary>\n        PortraitDown = 8,\n        /// <summary>\n        /// Unknown display orientation.\n        /// </summary>\n        Unknown = 16\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ClearOptions.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines the buffers for clearing when calling <see cref=\"GraphicsDevice.Clear(ClearOptions, Color, float, int)\"/> operation.\n    /// </summary>\n    [Flags]\n    public enum ClearOptions\n    {\n        /// <summary>\n        /// Color buffer.\n        /// </summary>\n        Target = 1,\n        /// <summary>\n        /// Depth buffer.\n        /// </summary>\n        DepthBuffer = 2,\n        /// <summary>\n        /// Stencil buffer.\n        /// </summary>\n        Stencil = 4        \n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ColorWriteChannels.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines the color channels for render target blending operations.\n    /// </summary>\n    [Flags]\n    public enum ColorWriteChannels\n    {\n        /// <summary>\n        /// No channels selected.\n        /// </summary>\n        None = 0,\n        /// <summary>\n        /// Red channel selected.\n        /// </summary>\n        Red = 1,\n        /// <summary>\n        /// Green channel selected.\n        /// </summary>\n        Green = 2,\n        /// <summary>\n        /// Blue channel selected.\n        /// </summary>\n        Blue = 4,\n        /// <summary>\n        /// Alpha channel selected.\n        /// </summary>\n        Alpha = 8,\n        /// <summary>\n        /// All channels selected.\n        /// </summary>\n        All = 15\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/CubeMapFace.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines the faces in a cube map for the <see cref=\"TextureCube\"/> class.\n    /// </summary>\n    public enum CubeMapFace\n    {\n        /// <summary>\n        /// Positive X face in the cube map.\n        /// </summary>\n        PositiveX,\n        /// <summary>\n        /// Negative X face in the cube map.\n        /// </summary>\n        NegativeX, \n        /// <summary>\n        /// Positive Y face in the cube map.\n        /// </summary>\n        PositiveY,\n        /// <summary>\n        /// Negative Y face in the cube map.\n        /// </summary>\n        NegativeY,\n        /// <summary>\n        /// Positive Z face in the cube map.\n        /// </summary>\n        PositiveZ,\n        /// <summary>\n        /// Negative Z face in the cube map.\n        /// </summary>\n        NegativeZ\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/DeviceLostException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [DataContract]\n    public sealed class DeviceLostException : Exception\n    {\n        public DeviceLostException()\n            : base()\n        {\n\n        }\n\n        public DeviceLostException(string message)\n            : base(message)\n        {\n\n        }\n\n        public DeviceLostException(string message, Exception inner)\n            : base(message, inner)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/DeviceNotResetException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [DataContract]\n    public sealed class DeviceNotResetException : Exception\n    {\n        public DeviceNotResetException()\n            : base()\n        {\n\n        }\n\n        public DeviceNotResetException(string message)\n            : base(message)\n        {\n\n        }\n\n        public DeviceNotResetException(string message, Exception inner)\n            : base(message, inner)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/DirectionalLight.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public sealed class DirectionalLight\n    {\n        EffectParameter _directionParameter;\n        EffectParameter _diffuseColorParameter;\n        EffectParameter _specularColorParameter;\n\n        bool _enabled;\n        Vector3 _direction;\n        Vector3 _diffuseColor;\n        Vector3 _specularColor;\n\n        internal event EventHandler EnabledChanged;\n\n        public DirectionalLight(EffectParameter directionParameter, EffectParameter diffuseColorParameter, EffectParameter specularColorParameter, DirectionalLight cloneSource)\n        {\n            this._directionParameter = directionParameter;\n            this._diffuseColorParameter = diffuseColorParameter;\n            this._specularColorParameter = specularColorParameter;\n\n            if (cloneSource != null)\n            {;\n                this._enabled = cloneSource._enabled;\n                this._direction = cloneSource._direction;\n                this._diffuseColor = cloneSource._diffuseColor;\n                this._specularColor = cloneSource._specularColor;\n            }\n            else\n            {\n                this._directionParameter = directionParameter;\n                this._diffuseColorParameter = diffuseColorParameter;\n                this._specularColorParameter = specularColorParameter;\n            }\n        }\n\n        public bool Enabled\n        {\n            get { return _enabled; }\n            set\n            {\n                if (this._enabled != value)\n                {\n                    this._enabled = value;\n\n                    if (this._diffuseColorParameter != null)\n                        this._diffuseColorParameter.SetValue(this._enabled ? this._diffuseColor : Vector3.Zero);\n                    if (this._specularColorParameter != null)\n                        this._specularColorParameter.SetValue(this._enabled ? this._specularColor : Vector3.Zero);\n\n                    OnEnabledChanged(EventArgs.Empty);\n                }\n            }\n        }\n\n        public Vector3 Direction\n        {\n            get { return _direction; }\n            set\n            {\n                _direction = value;\n\n                if (this._directionParameter != null)\n                    _directionParameter.SetValue(_direction);\n            }\n        }\n\n        public Vector3 DiffuseColor\n        {\n            get { return _diffuseColor; }\n            set\n            {\n                _diffuseColor = value;\n\n                if (this._diffuseColorParameter != null && this._enabled)\n                    _diffuseColorParameter.SetValue(_diffuseColor);\n            }\n        }\n\n        public Vector3 SpecularColor\n        {\n            get { return _specularColor; }\n            set\n            {\n                _specularColor = value;\n\n                if (this._specularColorParameter != null && this._enabled)\n                    _specularColorParameter.SetValue(_specularColor);\n            }\n        }\n\n        private void OnEnabledChanged(EventArgs args)\n        {\n            var handler = EnabledChanged;\n            if (handler != null)\n                handler(this, args);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/DisplayMode.cs",
    "content": "#region License\n/*\nMIT License\nCopyright © 2006 The Mono.Xna Team\n\nAll rights reserved.\n\nAuthors:\n * Rob Loach\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n#endregion License\n\nusing System;\nusing System.Globalization;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [DataContract]\n    public class DisplayMode\n    {\n        #region Fields\n\n        private int _width;\n        private int _height;\n        private SurfaceFormat _format;\n\n        #endregion Fields\n\n        #region Properties\n        \n        public int Width { get { return _width; } }\n        public int Height { get { return _height; } }\n        public SurfaceFormat Format { get { return _format; } }\n\n        public float AspectRatio\n        {\n            get { return (float)_width / (float)_height; }\n        }\n        \n        public Rectangle TitleSafeArea\n        {\n            get { return GraphicsDevice.GetTitleSafeArea(0, 0, _width, _height); }\n        }\n\n        #endregion Properties\n\n        #region Constructors\n        \n        internal DisplayMode(int width, int height, SurfaceFormat format)\n        {\n            this._width  = width;\n            this._height = height;\n            this._format = format;\n        }\n\n        #endregion Constructors\n\n        #region Operators\n\n        public static bool operator !=(DisplayMode left, DisplayMode right)\n        {\n            return !(left == right);\n        }\n\n        public static bool operator ==(DisplayMode left, DisplayMode right)\n        {\n            if (ReferenceEquals(left, right)) //Same object or both are null\n            {\n                return true;\n            }\n\n            if (ReferenceEquals(left, null) || ReferenceEquals(right, null))\n            {\n                return false;\n            }\n\n            return (left._width  == right._width ) &&\n                   (left._height == right._height) &&\n                   (left._format == right._format);\n        }\n\n        #endregion Operators\n\n        #region Public Methods\n\n        public override bool Equals(object obj)\n        {\n            return obj is DisplayMode && this == (DisplayMode)obj;\n        }\n\n        public override int GetHashCode()\n        {\n            return (this._width.GetHashCode() ^ this._height.GetHashCode() ^ this._format.GetHashCode());\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{Width:{0}, Height:{1}, Format:{2}, AspectRatio:{3}}\",\n                _width, _height, _format, AspectRatio);\n        }\n\n        #endregion Public Methods\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/DisplayModeCollection.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class DisplayModeCollection : IEnumerable<DisplayMode>\n    {\n        private readonly List<DisplayMode> _modes;\n\n        public IEnumerable<DisplayMode> this[SurfaceFormat format]\n        {\n            get \n            {\n                var list = new List<DisplayMode>();\n                foreach (DisplayMode mode in _modes)\n                {\n                    if (mode.Format == format)\n                        list.Add(mode);\n                }\n                return list;\n            }\n        }\n\n        public IEnumerator<DisplayMode> GetEnumerator()\n        {\n            return _modes.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _modes.GetEnumerator();\n        }\n        \n        internal DisplayModeCollection(List<DisplayMode> modes)\n        {\n            // Sort the modes in a consistent way that happens\n            // to match XNA behavior on some graphics devices.\n\n            modes.Sort(delegate(DisplayMode a, DisplayMode b)\n            {\n                if (a == b) \n                    return 0;\n                if (a.Format <= b.Format && a.Width <= b.Width && a.Height <= b.Height) \n                    return -1;\n                return 1;\n            });\n\n            _modes = modes;\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/AlphaTestEffect.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// AlphaTestEffect.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\n#region Using Statements\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\n#endregion\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Built-in effect that supports alpha testing.\n    /// </summary>\n    public class AlphaTestEffect : Effect, IEffectMatrices, IEffectFog\n    {\n        #region Effect Parameters\n\n        EffectParameter textureParam;\n        EffectParameter diffuseColorParam;\n        EffectParameter alphaTestParam;\n        EffectParameter fogColorParam;\n        EffectParameter fogVectorParam;\n        EffectParameter worldViewProjParam;\n\n        #endregion\n\n        #region Fields\n\n        bool fogEnabled;\n        bool vertexColorEnabled;\n\n        Matrix world = Matrix.Identity;\n        Matrix view = Matrix.Identity;\n        Matrix projection = Matrix.Identity;\n\n        Matrix worldView;\n\n        Vector3 diffuseColor = Vector3.One;\n\n        float alpha = 1;\n\n        float fogStart = 0;\n        float fogEnd = 1;\n\n        CompareFunction alphaFunction = CompareFunction.Greater;\n        int referenceAlpha;\n\n        EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Gets or sets the world matrix.\n        /// </summary>\n        public Matrix World\n        {\n            get { return world; }\n            set\n            {\n                world = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the view matrix.\n        /// </summary>\n        public Matrix View\n        {\n            get { return view; }\n            set\n            {\n                view = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the projection matrix.\n        /// </summary>\n        public Matrix Projection\n        {\n            get { return projection; }\n            set\n            {\n                projection = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material diffuse color (range 0 to 1).\n        /// </summary>\n        public Vector3 DiffuseColor\n        {\n            get { return diffuseColor; }\n            set\n            {\n                diffuseColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material alpha.\n        /// </summary>\n        public float Alpha\n        {\n            get { return alpha; }\n            set\n            {\n                alpha = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog enable flag.\n        /// </summary>\n        public bool FogEnabled\n        {\n            get { return fogEnabled; }\n            set\n            {\n                if (fogEnabled != value)\n                {\n                    fogEnabled = value;\n                    dirtyFlags |= EffectDirtyFlags.FogEnable;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog start distance.\n        /// </summary>\n        public float FogStart\n        {\n            get { return fogStart; }\n            set\n            {\n                fogStart = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog end distance.\n        /// </summary>\n        public float FogEnd\n        {\n            get { return fogEnd; }\n            set\n            {\n                fogEnd = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog color.\n        /// </summary>\n        public Vector3 FogColor\n        {\n            get { return fogColorParam.GetValueVector3(); }\n            set { fogColorParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the current texture.\n        /// </summary>\n        public Texture2D Texture\n        {\n            get { return textureParam.GetValueTexture2D(); }\n            set { textureParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets whether vertex color is enabled.\n        /// </summary>\n        public bool VertexColorEnabled\n        {\n            get { return vertexColorEnabled; }\n            set\n            {\n                if (vertexColorEnabled != value)\n                {\n                    vertexColorEnabled = value;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the alpha compare function (default Greater).\n        /// </summary>\n        public CompareFunction AlphaFunction\n        {\n            get { return alphaFunction; }\n            set\n            {\n                if (alphaFunction != value)\n                {\n                    alphaFunction = value;\n                    dirtyFlags |= EffectDirtyFlags.AlphaTest;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the reference alpha value (default 0).\n        /// </summary>\n        public int ReferenceAlpha\n        {\n            get { return referenceAlpha; }\n            set\n            {\n                referenceAlpha = value;\n                dirtyFlags |= EffectDirtyFlags.AlphaTest;\n            }\n        }\n\n        #endregion\n\n        #region Methods\n\n        /// <summary>\n        /// Creates a new AlphaTestEffect with default parameter settings.\n        /// </summary>\n        public AlphaTestEffect(GraphicsDevice device)\n            : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameAlphaTestEffect))\n        {\n            CacheEffectParameters();\n        }\n\n        /// <summary>\n        /// Creates a new AlphaTestEffect by cloning parameter settings from an existing instance.\n        /// </summary>\n        protected AlphaTestEffect(AlphaTestEffect cloneSource)\n            : base(cloneSource)\n        {\n            CacheEffectParameters();\n\n            fogEnabled = cloneSource.fogEnabled;\n            vertexColorEnabled = cloneSource.vertexColorEnabled;\n\n            world = cloneSource.world;\n            view = cloneSource.view;\n            projection = cloneSource.projection;\n\n            diffuseColor = cloneSource.diffuseColor;\n\n            alpha = cloneSource.alpha;\n\n            fogStart = cloneSource.fogStart;\n            fogEnd = cloneSource.fogEnd;\n            \n            alphaFunction = cloneSource.alphaFunction;\n            referenceAlpha = cloneSource.referenceAlpha;\n\n        }\n\n        /// <summary>\n        /// Creates a clone of the current AlphaTestEffect instance.\n        /// </summary>\n        public override Effect Clone()\n        {\n            return new AlphaTestEffect(this);\n        }\n\n        /// <summary>\n        /// Looks up shortcut references to our effect parameters.\n        /// </summary>\n        void CacheEffectParameters()\n        {\n            textureParam        = Parameters[\"Texture\"];\n            diffuseColorParam   = Parameters[\"DiffuseColor\"];\n            alphaTestParam      = Parameters[\"AlphaTest\"];\n            fogColorParam       = Parameters[\"FogColor\"];\n            fogVectorParam      = Parameters[\"FogVector\"];\n            worldViewProjParam  = Parameters[\"WorldViewProj\"];\n        }\n        \n        /// <summary>\n        /// Lazily computes derived parameter values immediately before applying the effect.\n        /// </summary>\n        protected internal override void OnApply()\n        {\n            // Recompute the world+view+projection matrix or fog vector?\n            dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam);\n\n            // Recompute the diffuse/alpha material color parameter?\n            if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0)\n            {\n                diffuseColorParam.SetValue(new Vector4(diffuseColor * alpha, alpha));\n\n                dirtyFlags &= ~EffectDirtyFlags.MaterialColor;\n            }\n\n            // Recompute the alpha test settings?\n            if ((dirtyFlags & EffectDirtyFlags.AlphaTest) != 0)\n            {\n                Vector4 alphaTest = new Vector4();\n                \n                // Convert reference alpha from 8 bit integer to 0-1 float format.\n                float reference = (float)referenceAlpha / 255f;\n                \n                // Comparison tolerance of half the 8 bit integer precision.\n                const float threshold = 0.5f / 255f;\n                \n                switch (alphaFunction)\n                {\n                    case CompareFunction.Less:\n                        // Shader will evaluate: clip((a < x) ? z : w)\n                        alphaTest.X = reference - threshold;\n                        alphaTest.Z = 1;\n                        alphaTest.W = -1;\n                        break;\n\n                    case CompareFunction.LessEqual:\n                        // Shader will evaluate: clip((a < x) ? z : w)\n                        alphaTest.X = reference + threshold;\n                        alphaTest.Z = 1;\n                        alphaTest.W = -1;\n                        break;\n\n                    case CompareFunction.GreaterEqual:\n                        // Shader will evaluate: clip((a < x) ? z : w)\n                        alphaTest.X = reference - threshold;\n                        alphaTest.Z = -1;\n                        alphaTest.W = 1;\n                        break;\n\n                    case CompareFunction.Greater:\n                        // Shader will evaluate: clip((a < x) ? z : w)\n                        alphaTest.X = reference + threshold;\n                        alphaTest.Z = -1;\n                        alphaTest.W = 1;\n                        break;\n\n                    case CompareFunction.Equal:\n                        // Shader will evaluate: clip((abs(a - x) < Y) ? z : w)\n                        alphaTest.X = reference;\n                        alphaTest.Y = threshold;\n                        alphaTest.Z = 1;\n                        alphaTest.W = -1;\n                        break;\n\n                    case CompareFunction.NotEqual:\n                        // Shader will evaluate: clip((abs(a - x) < Y) ? z : w)\n                        alphaTest.X = reference;\n                        alphaTest.Y = threshold;\n                        alphaTest.Z = -1;\n                        alphaTest.W = 1;\n                        break;\n\n                    case CompareFunction.Never:\n                        // Shader will evaluate: clip((a < x) ? z : w)\n                        alphaTest.Z = -1;\n                        alphaTest.W = -1;\n                        break;\n\n                    case CompareFunction.Always:\n                    default:\n                        // Shader will evaluate: clip((a < x) ? z : w)\n                        alphaTest.Z = 1;\n                        alphaTest.W = 1;\n                        break;\n                }\n\n                alphaTestParam.SetValue(alphaTest);\n                dirtyFlags &= ~EffectDirtyFlags.AlphaTest;\n            }\n        }\n\n        private void UpdateCurrentTechnique()\n        {\n            int shaderIndex = 0;\n\n            if (fogEnabled)\n                shaderIndex += 1;\n\n            if (vertexColorEnabled)\n                shaderIndex += 2;\n\n            if (alphaFunction == CompareFunction.Equal || alphaFunction == CompareFunction.NotEqual)\n                shaderIndex += 4;\n\n            CurrentTechnique = Techniques[shaderIndex];\n        }\n\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/BasicEffect.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// BasicEffect.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\n#region Using Statements\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\n#endregion\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Built-in effect that supports optional texturing, vertex coloring, fog, and lighting.\n    /// </summary>\n    public class BasicEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog\n    {\n        #region Effect Parameters\n\n        EffectParameter textureParam;\n        EffectParameter diffuseColorParam;\n        EffectParameter emissiveColorParam;\n        EffectParameter specularColorParam;\n        EffectParameter specularPowerParam;\n        EffectParameter eyePositionParam;\n        EffectParameter fogColorParam;\n        EffectParameter fogVectorParam;\n        EffectParameter worldParam;\n        EffectParameter worldInverseTransposeParam;\n        EffectParameter worldViewProjParam;\n\n        #endregion\n\n        #region Fields\n\n        bool lightingEnabled;\n        bool preferPerPixelLighting;\n        bool _oneLight;\n        bool fogEnabled;\n        bool textureEnabled;\n        bool vertexColorEnabled;\n\n        Matrix world = Matrix.Identity;\n        Matrix view = Matrix.Identity;\n        Matrix projection = Matrix.Identity;\n\n        Matrix worldView;\n\n        Vector3 diffuseColor = Vector3.One;\n        Vector3 emissiveColor = Vector3.Zero;\n        Vector3 ambientLightColor = Vector3.Zero;\n\n        float alpha = 1;\n\n        DirectionalLight light0;\n        DirectionalLight light1;\n        DirectionalLight light2;\n\n        float fogStart = 0;\n        float fogEnd = 1;\n\n        EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All;\n\n        #endregion\n        \n        #region Public Properties\n\n        /// <summary>\n        /// Gets or sets the world matrix.\n        /// </summary>\n        public Matrix World\n        {\n            get { return world; }\n            set\n            {\n                world = value;\n                dirtyFlags |= EffectDirtyFlags.World | EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the view matrix.\n        /// </summary>\n        public Matrix View\n        {\n            get { return view; }\n            set\n            {\n                view = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.EyePosition | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the projection matrix.\n        /// </summary>\n        public Matrix Projection\n        {\n            get { return projection; }\n            set\n            {\n                projection = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material diffuse color (range 0 to 1).\n        /// </summary>\n        public Vector3 DiffuseColor\n        {\n            get { return diffuseColor; }\n            set\n            {\n                diffuseColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material emissive color (range 0 to 1).\n        /// </summary>\n        public Vector3 EmissiveColor\n        {\n            get { return emissiveColor; }\n            set\n            {\n                emissiveColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material specular color (range 0 to 1).\n        /// </summary>\n        public Vector3 SpecularColor\n        {\n            get { return specularColorParam.GetValueVector3(); }\n            set { specularColorParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the material specular power.\n        /// </summary>\n        public float SpecularPower\n        {\n            get { return specularPowerParam.GetValueSingle(); }\n            set { specularPowerParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the material alpha.\n        /// </summary>\n        public float Alpha\n        {\n            get { return alpha; }\n            set\n            {\n                alpha = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <inheritdoc/>\n        public bool LightingEnabled\n        {\n            get { return lightingEnabled; }\n            set\n            {\n                if (lightingEnabled != value)\n                {\n                    lightingEnabled = value;\n                    dirtyFlags |= EffectDirtyFlags.MaterialColor;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the per-pixel lighting prefer flag.\n        /// </summary>\n        public bool PreferPerPixelLighting\n        {\n            get { return preferPerPixelLighting; }\n            set\n            {\n                if (preferPerPixelLighting != value)\n                {\n                    preferPerPixelLighting = value;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <inheritdoc/>\n        public Vector3 AmbientLightColor\n        {\n            get { return ambientLightColor; }\n            set\n            {\n                ambientLightColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <inheritdoc/>\n        public DirectionalLight DirectionalLight0 { get { return light0; } }\n\n        /// <inheritdoc/>\n        public DirectionalLight DirectionalLight1 { get { return light1; } }\n\n        /// <inheritdoc/>\n        public DirectionalLight DirectionalLight2 { get { return light2; } }\n\n        /// <inheritdoc/>\n        public bool FogEnabled\n        {\n            get { return fogEnabled; }\n            set\n            {\n                if (fogEnabled != value)\n                {\n                    fogEnabled = value;\n                    dirtyFlags |= EffectDirtyFlags.FogEnable;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <inheritdoc/>\n        public float FogStart\n        {\n            get { return fogStart; }\n            set\n            {\n                fogStart = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <inheritdoc/>\n        public float FogEnd\n        {\n            get { return fogEnd; }\n            set\n            {\n                fogEnd = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <inheritdoc/>\n        public Vector3 FogColor\n        {\n            get { return fogColorParam.GetValueVector3(); }\n            set { fogColorParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets whether texturing is enabled.\n        /// </summary>\n        public bool TextureEnabled\n        {\n            get { return textureEnabled; }\n            set\n            {\n                if (textureEnabled != value)\n                {\n                    textureEnabled = value;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the current texture.\n        /// </summary>\n        public Texture2D Texture\n        {\n            get { return textureParam.GetValueTexture2D(); }\n            set { textureParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets whether vertex color is enabled.\n        /// </summary>\n        public bool VertexColorEnabled\n        {\n            get { return vertexColorEnabled; }\n            set\n            {\n                if (vertexColorEnabled != value)\n                {\n                    vertexColorEnabled = value;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        #endregion\n\n        #region Methods\n\n        /// <summary>\n        /// Creates a new BasicEffect with default parameter settings.\n        /// </summary>\n        public BasicEffect(GraphicsDevice device)\n            : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameBasicEffect))\n        {\n            CacheEffectParameters(null);\n\n            DirectionalLight0.Enabled = true;\n            SpecularColor = Vector3.One;\n            SpecularPower = 16;\n        }\n\n        /// <summary>\n        /// Creates a new BasicEffect by cloning parameter settings from an existing instance.\n        /// </summary>\n        protected BasicEffect(BasicEffect cloneSource)\n            : base(cloneSource)\n        {\n            CacheEffectParameters(cloneSource);\n\n            lightingEnabled = cloneSource.lightingEnabled;\n            preferPerPixelLighting = cloneSource.preferPerPixelLighting;\n            fogEnabled = cloneSource.fogEnabled;            \n            textureEnabled = cloneSource.textureEnabled;\n            vertexColorEnabled = cloneSource.vertexColorEnabled;\n\n            world = cloneSource.world;\n            view = cloneSource.view;\n            projection = cloneSource.projection;\n\n            diffuseColor = cloneSource.diffuseColor;\n            emissiveColor = cloneSource.emissiveColor;\n            ambientLightColor = cloneSource.ambientLightColor;\n\n            alpha = cloneSource.alpha;\n\n            fogStart = cloneSource.fogStart;\n            fogEnd = cloneSource.fogEnd;\n        }\n\n\n        /// <summary>\n        /// Creates a clone of the current BasicEffect instance.\n        /// </summary>\n        public override Effect Clone()\n        {\n            return new BasicEffect(this);\n        }\n\n\n        /// <inheritdoc/>\n        public void EnableDefaultLighting()\n        {\n            LightingEnabled = true;\n\n            AmbientLightColor = EffectHelpers.EnableDefaultLighting(light0, light1, light2);\n        }\n\n\n        /// <summary>\n        /// Looks up shortcut references to our effect parameters.\n        /// </summary>\n        void CacheEffectParameters(BasicEffect cloneSource)\n        {\n            textureParam                = Parameters[\"Texture\"];\n            diffuseColorParam           = Parameters[\"DiffuseColor\"];\n            emissiveColorParam          = Parameters[\"EmissiveColor\"];\n            specularColorParam          = Parameters[\"SpecularColor\"];\n            specularPowerParam          = Parameters[\"SpecularPower\"];\n            eyePositionParam            = Parameters[\"EyePosition\"];\n            fogColorParam               = Parameters[\"FogColor\"];\n            fogVectorParam              = Parameters[\"FogVector\"];\n            worldParam                  = Parameters[\"World\"];\n            worldInverseTransposeParam  = Parameters[\"WorldInverseTranspose\"];\n            worldViewProjParam          = Parameters[\"WorldViewProj\"];\n\n            light0 = new DirectionalLight(Parameters[\"DirLight0Direction\"],\n                                          Parameters[\"DirLight0DiffuseColor\"],\n                                          Parameters[\"DirLight0SpecularColor\"],\n                                          (cloneSource != null) ? cloneSource.light0 : null);\n\n            light1 = new DirectionalLight(Parameters[\"DirLight1Direction\"],\n                                          Parameters[\"DirLight1DiffuseColor\"],\n                                          Parameters[\"DirLight1SpecularColor\"],\n                                          (cloneSource != null) ? cloneSource.light1 : null);\n\n            light2 = new DirectionalLight(Parameters[\"DirLight2Direction\"],\n                                          Parameters[\"DirLight2DiffuseColor\"],\n                                          Parameters[\"DirLight2SpecularColor\"],\n                                          (cloneSource != null) ? cloneSource.light2 : null);\n\n            light1.EnabledChanged += Light_EnabledChanged;\n            light2.EnabledChanged += Light_EnabledChanged;\n        }\n\n        private void Light_EnabledChanged(object sender, EventArgs e)\n        {\n            _oneLight = !light1.Enabled && !light2.Enabled;\n            UpdateCurrentTechnique();\n        }\n\n        /// <summary>\n        /// Lazily computes derived parameter values immediately before applying the effect.\n        /// </summary>\n        protected internal override void OnApply()\n        {\n            // Recompute the world+view+projection matrix or fog vector?\n            dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam);\n            \n            // Recompute the diffuse/emissive/alpha material color parameters?\n            if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0)\n            {\n                EffectHelpers.SetMaterialColor(lightingEnabled, alpha, ref diffuseColor, ref emissiveColor, ref ambientLightColor, diffuseColorParam, emissiveColorParam);\n\n                dirtyFlags &= ~EffectDirtyFlags.MaterialColor;\n            }\n\n            if (lightingEnabled)\n            {\n                // Recompute the world inverse transpose and eye position?\n                dirtyFlags = EffectHelpers.SetLightingMatrices(dirtyFlags, ref world, ref view, worldParam, worldInverseTransposeParam, eyePositionParam);\n            }\n        }\n\n        private void UpdateCurrentTechnique()\n        {\n            int shaderIndex = 0;\n\n            if (fogEnabled)\n                shaderIndex += 1;\n\n            if (vertexColorEnabled)\n                shaderIndex += 2;\n\n            if (textureEnabled)\n                shaderIndex += 4;\n\n            if (lightingEnabled)\n            {\n                if (preferPerPixelLighting)\n                    shaderIndex += 24;\n                else if (_oneLight) // oneLight\n                    shaderIndex += 16;\n                else // three lights\n                    shaderIndex += 8;\n            }\n\n            CurrentTechnique = Techniques[shaderIndex];\n        }\n\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/DualTextureEffect.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// DualTextureEffect.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\n#region Using Statements\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\n#endregion\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Built-in effect that supports two-layer multitexturing.\n    /// </summary>\n    public class DualTextureEffect : Effect, IEffectMatrices, IEffectFog\n    {\n        #region Effect Parameters\n\n        EffectParameter textureParam;\n        EffectParameter texture2Param;\n        EffectParameter diffuseColorParam;\n        EffectParameter fogColorParam;\n        EffectParameter fogVectorParam;\n        EffectParameter worldViewProjParam;\n\n        #endregion\n\n        #region Fields\n\n        bool fogEnabled;\n        bool vertexColorEnabled;\n\n        Matrix world = Matrix.Identity;\n        Matrix view = Matrix.Identity;\n        Matrix projection = Matrix.Identity;\n\n        Matrix worldView;\n\n        Vector3 diffuseColor = Vector3.One;\n\n        float alpha = 1;\n\n        float fogStart = 0;\n        float fogEnd = 1;\n\n        EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Gets or sets the world matrix.\n        /// </summary>\n        public Matrix World\n        {\n            get { return world; }\n            set\n            {\n                world = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the view matrix.\n        /// </summary>\n        public Matrix View\n        {\n            get { return view; }\n            set\n            {\n                view = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the projection matrix.\n        /// </summary>\n        public Matrix Projection\n        {\n            get { return projection; }\n            set\n            {\n                projection = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material diffuse color (range 0 to 1).\n        /// </summary>\n        public Vector3 DiffuseColor\n        {\n            get { return diffuseColor; }\n            set\n            {\n                diffuseColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material alpha.\n        /// </summary>\n        public float Alpha\n        {\n            get { return alpha; }\n            set\n            {\n                alpha = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog enable flag.\n        /// </summary>\n        public bool FogEnabled\n        {\n            get { return fogEnabled; }\n            set\n            {\n                if (fogEnabled != value)\n                {\n                    fogEnabled = value;\n                    dirtyFlags |= EffectDirtyFlags.FogEnable;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog start distance.\n        /// </summary>\n        public float FogStart\n        {\n            get { return fogStart; }\n            set\n            {\n                fogStart = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog end distance.\n        /// </summary>\n        public float FogEnd\n        {\n            get { return fogEnd; }\n            set\n            {\n                fogEnd = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog color.\n        /// </summary>\n        public Vector3 FogColor\n        {\n            get { return fogColorParam.GetValueVector3(); }\n            set { fogColorParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the current base texture.\n        /// </summary>\n        public Texture2D Texture\n        {\n            get { return textureParam.GetValueTexture2D(); }\n            set { textureParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the current overlay texture.\n        /// </summary>\n        public Texture2D Texture2\n        {\n            get { return texture2Param.GetValueTexture2D(); }\n            set { texture2Param.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets whether vertex color is enabled.\n        /// </summary>\n        public bool VertexColorEnabled\n        {\n            get { return vertexColorEnabled; }\n            set\n            {\n                if (vertexColorEnabled != value)\n                {\n                    vertexColorEnabled = value;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        #endregion\n\n        #region Methods\n\n\n        /// <summary>\n        /// Creates a new DualTextureEffect with default parameter settings.\n        /// </summary>\n        public DualTextureEffect(GraphicsDevice device)\n            : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameDualTextureEffect))\n        {\n            CacheEffectParameters();\n        }\n\n\n        /// <summary>\n        /// Creates a new DualTextureEffect by cloning parameter settings from an existing instance.\n        /// </summary>\n        protected DualTextureEffect(DualTextureEffect cloneSource)\n            : base(cloneSource)\n        {\n            CacheEffectParameters();\n\n            fogEnabled = cloneSource.fogEnabled;\n            vertexColorEnabled = cloneSource.vertexColorEnabled;\n\n            world = cloneSource.world;\n            view = cloneSource.view;\n            projection = cloneSource.projection;\n\n            diffuseColor = cloneSource.diffuseColor;\n\n            alpha = cloneSource.alpha;\n\n            fogStart = cloneSource.fogStart;\n            fogEnd = cloneSource.fogEnd;\n        }\n\n\n        /// <summary>\n        /// Creates a clone of the current DualTextureEffect instance.\n        /// </summary>\n        public override Effect Clone()\n        {\n            return new DualTextureEffect(this);\n        }\n\n\n        /// <summary>\n        /// Looks up shortcut references to our effect parameters.\n        /// </summary>\n        void CacheEffectParameters()\n        {\n            textureParam        = Parameters[\"Texture\"];\n            texture2Param       = Parameters[\"Texture2\"];\n            diffuseColorParam   = Parameters[\"DiffuseColor\"];\n            fogColorParam       = Parameters[\"FogColor\"];\n            fogVectorParam      = Parameters[\"FogVector\"];\n            worldViewProjParam  = Parameters[\"WorldViewProj\"];\n        }\n\n\n        /// <summary>\n        /// Lazily computes derived parameter values immediately before applying the effect.\n        /// </summary>\n        protected internal override void OnApply()\n        {\n            // Recompute the world+view+projection matrix or fog vector?\n            dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam);\n\n            // Recompute the diffuse/alpha material color parameter?\n            if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0)\n            {\n                diffuseColorParam.SetValue(new Vector4(diffuseColor * alpha, alpha));\n\n                dirtyFlags &= ~EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        private void UpdateCurrentTechnique()\n        {\n            int shaderIndex = 0;\n\n            if (fogEnabled)\n                shaderIndex += 1;\n\n            if (vertexColorEnabled)\n                shaderIndex += 2;\n\n            CurrentTechnique = Techniques[shaderIndex];\n        }\n\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/Effect.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public partial class Effect : GraphicsResource\n    {\n        public EffectParameterCollection Parameters { get; private set; }\n\n        public EffectTechniqueCollection Techniques { get; private set; }\n\n        public EffectTechnique CurrentTechnique { get; set; }\n  \n        internal ConstantBuffer[] ConstantBuffers { get; private set; }\n\n        private Shader[] _shaders;\n\n        private readonly bool _isClone;\n\n        internal Effect(GraphicsDevice graphicsDevice)\n            : base(graphicsDevice)\n        {\n        }\n            \n        protected Effect(Effect cloneSource)\n            : this(cloneSource.GraphicsDevice)\n        {\n            _isClone = true;\n            Clone(cloneSource);\n        }\n\n        public Effect(GraphicsDevice graphicsDevice, byte[] effectCode)\n            : this(graphicsDevice, effectCode, 0, effectCode.Length)\n        {\n        }\n\n\n        public Effect (GraphicsDevice graphicsDevice, byte[] effectCode, int index, int count)\n            : this(graphicsDevice)\n        {\n            // By default we currently cache all unique byte streams\n            // and use cloning to populate the effect with parameters,\n            // techniques, and passes.\n            //\n            // This means all the immutable types in an effect:\n            //\n            //  - Shaders\n            //  - Annotations\n            //  - Names\n            //  - State Objects\n            //\n            // Are shared for every instance of an effect while the \n            // parameter values and constant buffers are copied.\n            //\n            // This might need to change slightly if/when we support\n            // shared constant buffers as 'new' should return unique\n            // effects without any shared instance state.\n \n            //Read the KNI fx header\n            KNIFXHeader fxHeader = new KNIFXHeader(effectCode, index);\n            if (fxHeader.Signature == KNIFXHeader.KNIFXSignature)\n            {\n                switch (fxHeader.Version)\n                {\n                    case 11:\n                        {\n                            int headerOffset = fxHeader.HeaderSize;\n\n                            int fxCount = BitConverter.ToInt16(effectCode, index + headerOffset); headerOffset += 2;\n\n                            for (int fxIdx = 0; fxIdx < fxCount; fxIdx++)\n                            {\n                                GraphicsBackend shaderBackend = (GraphicsBackend)BitConverter.ToInt16(effectCode, index + headerOffset); headerOffset += 2;\n                                int effectKey = BitConverter.ToInt32(effectCode, index + headerOffset); headerOffset += 4;\n                                int fxOffset = BitConverter.ToInt32(effectCode, index + headerOffset); headerOffset += 4;\n\n                                if (!((IPlatformGraphicsAdapter)graphicsDevice.Adapter).Strategy.Platform_IsShaderBackendSupported(shaderBackend))\n                                    continue;\n\n                                Effect effect;\n                                lock (((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache)\n                                {\n                                    if (!((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache.TryGetValue(effectKey, out effect))\n                                    {\n                                        int effectLength = BitConverter.ToInt32(effectCode, index + fxOffset); fxOffset += 4;\n                                        using (Stream stream = new MemoryStream(effectCode, index + fxOffset, effectLength, false))\n                                        using (KNIFXReader11 reader = new KNIFXReader11(stream, graphicsDevice))\n                                            effect = reader.ReadEffect();\n\n                                        ((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache.Add(effectKey, effect);\n                                    }\n                                }\n\n                                // Clone it.\n                                _isClone = true;\n                                Clone(effect);\n                                return;\n                            }\n\n                            headerOffset = fxHeader.HeaderSize;\n                            String[] shaderProfiles = new string[fxCount];\n                            for (int fxIdx = 0; fxIdx < fxCount; fxIdx++)\n                            {\n                                ShaderProfileType shaderProfile = (ShaderProfileType)BitConverter.ToInt16(effectCode, index + headerOffset); headerOffset += 2;\n                                headerOffset += 8;\n                                shaderProfiles[fxIdx] = shaderProfile.ToString();\n                            }\n                            throw new Exception(\"Effect profile '\" + String.Join(\",\", shaderProfiles) + \"' is not compatible with the graphics backend '\" + graphicsDevice.Adapter.Backend + \"'.\");\n                        }\n\n                    default:\n                        if (fxHeader.Version > KNIFXHeader.CurrentKNIFXVersion)\n                            throw new Exception(\"This effect seems to be for a newer version of KNI.\");\n                        if (fxHeader.Version < KNIFXHeader.CurrentKNIFXVersion)\n                            throw new Exception(\"This effect is for an older version of KNI and needs to be rebuilt.\");\n                        break;\n                }\n            }\n\n            //Read the mgfx header\n            MGFXHeader mgfxheader = new MGFXHeader(effectCode, index);\n            if (mgfxheader.Signature == MGFXHeader.MGFXSignature)\n            {\n                switch (mgfxheader.Version)\n                {\n                    case 10:\n                        {\n                            ShaderProfileType shaderProfile = mgfxheader.Profile;\n                            int headerOffset = mgfxheader.HeaderSize;\n                            int fxOffset = headerOffset;\n\n                            if (!((IPlatformGraphicsAdapter)graphicsDevice.Adapter).Strategy.Platform_IsShaderProfileSupported(shaderProfile))\n                                throw new Exception(\"Effect profile '\" + shaderProfile + \"' is not compatible with the graphics backend '\" + graphicsDevice.Adapter.Backend + \"'.\");\n\n                            Effect effect;\n                            lock (((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache)\n                            {\n                                if (!((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache.TryGetValue(mgfxheader.EffectKey, out effect))\n                                {\n                                    int length = count - fxOffset;\n                                    using (Stream stream = new MemoryStream(effectCode, index + fxOffset, length, false))\n                                    using (MGFXReader10 reader = new MGFXReader10(stream, graphicsDevice, shaderProfile))\n                                        effect = reader.ReadEffect();\n\n                                    ((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache.Add(mgfxheader.EffectKey, effect);\n                                }\n                            }\n\n                            // Clone it.\n                            _isClone = true;\n                            Clone(effect);\n                            return;\n                        }\n\n                    default:\n                        if (mgfxheader.Version > MGFXHeader.MGFXVersion)\n                            throw new Exception(\"This effect seems to be for a newer version of KNI.\");\n                        if (mgfxheader.Version < MGFXHeader.MGFXVersion)\n                            throw new Exception(\"This effect is for an older version of KNI and needs to be rebuilt.\");\n                        break;\n                }\n            }\n\n            throw new Exception(\"This does not appear to be an FX effect file.\");\n        }\n\n        /// <summary>\n        /// Clone the source into this existing object.\n        /// </summary>\n        /// <remarks>\n        /// Note this is not overloaded in derived classes on purpose.  This is\n        /// only a reason this exists is for caching effects.\n        /// </remarks>\n        /// <param name=\"cloneSource\">The source effect to clone from.</param>\n        private void Clone(Effect cloneSource)\n        {\n            Debug.Assert(_isClone, \"Cannot clone into non-cloned effect!\");\n\n            // Copy the mutable members of the effect.\n            Parameters = cloneSource.Parameters.Clone();\n            Techniques = cloneSource.Techniques.Clone(this);\n\n            // Make a copy of the immutable constant buffers.\n            ConstantBuffers = new ConstantBuffer[cloneSource.ConstantBuffers.Length];\n            for (int i = 0; i < cloneSource.ConstantBuffers.Length; i++)\n                ConstantBuffers[i] = new ConstantBuffer(cloneSource.ConstantBuffers[i]);\n\n            // Find and set the current technique.\n            for (int i = 0; i < cloneSource.Techniques.Count; i++)\n            {\n                if (cloneSource.Techniques[i] == cloneSource.CurrentTechnique)\n                {\n                    CurrentTechnique = Techniques[i];\n                    break;\n                }\n            }\n\n            // Take a reference to the original shader list.\n            _shaders = cloneSource._shaders;\n        }\n\n        /// <summary>\n        /// Returns a deep copy of the effect where immutable types \n        /// are shared and mutable data is duplicated.\n        /// </summary>\n        /// <remarks>\n        /// See \"Cloning an Effect\" in MSDN:\n        /// http://msdn.microsoft.com/en-us/library/windows/desktop/ff476138(v=vs.85).aspx\n        /// </remarks>\n        /// <returns>The cloned effect.</returns>\n        public virtual Effect Clone()\n        {\n            return new Effect(this);\n        }\n\n        protected internal virtual void OnApply()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            System.Diagnostics.Debug.Assert(!IsDisposed);\n\n            if (disposing)\n            {\n                if (!_isClone)\n                {\n                    // Only the original source can dispose the shaders.\n                    if (_shaders != null)\n                    {\n                        foreach (Shader shader in _shaders)\n                            shader.Dispose();\n                    }\n                }\n\n                if (ConstantBuffers != null)\n                {\n                    foreach (ConstantBuffer buffer in ConstantBuffers)\n                        buffer.Dispose();\n                    ConstantBuffers = null;\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n\n        internal protected override void GraphicsContextLost()\n        {\n            for (int i = 0; i < ConstantBuffers.Length; i++)\n                ((IPlatformConstantBuffer)ConstantBuffers[i]).Strategy.PlatformContextLost();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectAnnotation.cs",
    "content": "using System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    // TODO: This class needs to be finished!\n\n    public class EffectAnnotation\n    {\n        internal EffectAnnotation(\n            EffectParameterClass class_,\n            EffectParameterType type,\n            string name,\n            int rowCount,\n            int columnCount,\n            string semantic,\n            object data)\n        {\n            ParameterClass = class_;\n            ParameterType = type;\n            Name = name;\n            RowCount = rowCount;\n            ColumnCount = columnCount;\n            Semantic = semantic;\n        }\n\n        internal EffectAnnotation(EffectParameter parameter)\n        {\n            ParameterClass = parameter.ParameterClass;\n            ParameterType = parameter.ParameterType;\n            Name = parameter.Name;\n            RowCount = parameter.RowCount;\n            ColumnCount = parameter.ColumnCount;\n            Semantic = parameter.Semantic;\n        }\n\n        public EffectParameterClass ParameterClass {get; private set;}\n        public EffectParameterType ParameterType {get; private set;}\n        public string Name {get; private set;}\n        public int RowCount {get; private set;}\n        public int ColumnCount {get; private set;}\n        public string Semantic {get; private set;}\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectAnnotationCollection.cs",
    "content": "using System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class EffectAnnotationCollection : IEnumerable<EffectAnnotation>\n    {\n        internal static readonly EffectAnnotationCollection Empty = new EffectAnnotationCollection(new EffectAnnotation[0]);\n\n        private readonly EffectAnnotation[] _annotations;\n\n        internal EffectAnnotationCollection(EffectAnnotation[] annotations)\n        {\n            _annotations = annotations;\n        }\n\n        public int Count \n        {\n            get { return _annotations.Length; }\n        }\n        \n        public EffectAnnotation this[int index]\n        {\n            get { return _annotations[index]; }\n        }\n        \n        public EffectAnnotation this[string name]\n        {\n            get \n            {\n                foreach (EffectAnnotation annotation in _annotations) \n                {\n                    if (annotation.Name == name)\n                        return annotation;\n                }\n                return null;\n            }\n        }\n        \n        public IEnumerator<EffectAnnotation> GetEnumerator()\n        {\n            return ((IEnumerable<EffectAnnotation>)_annotations).GetEnumerator();\n        }\n\n        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n        {\n            return _annotations.GetEnumerator();\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectHelpers.cs",
    "content": "//#region File Description\n//-----------------------------------------------------------------------------\n// EffectHelpers.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n//#endregion\n\n//#region Using Statements\nusing System;\n//#endregion\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Track which effect parameters need to be recomputed during the next OnApply.\n    /// </summary>\n    [Flags]\n    internal enum EffectDirtyFlags\n    {\n        WorldViewProj   = 1,\n        World           = 2,\n        EyePosition     = 4,\n        MaterialColor   = 8,\n        Fog             = 16,\n        FogEnable       = 32,\n        AlphaTest       = 64,\n        All             = -1\n    }\n\n\n    /// <summary>\n    /// Helper code shared between the various built-in effects.\n    /// </summary>\n    internal static class EffectHelpers\n    {\n        /// <summary>\n        /// Sets up the standard key/fill/back lighting rig.\n        /// </summary>\n        internal static Vector3 EnableDefaultLighting(DirectionalLight light0, DirectionalLight light1, DirectionalLight light2)\n        {\n            // Key light.\n            light0.Direction = new Vector3(-0.5265408f, -0.5735765f, -0.6275069f);\n            light0.DiffuseColor = new Vector3(1, 0.9607844f, 0.8078432f);\n            light0.SpecularColor = new Vector3(1, 0.9607844f, 0.8078432f);\n            light0.Enabled = true;\n\n            // Fill light.\n            light1.Direction = new Vector3(0.7198464f, 0.3420201f, 0.6040227f);\n            light1.DiffuseColor = new Vector3(0.9647059f, 0.7607844f, 0.4078432f);\n            light1.SpecularColor = Vector3.Zero;\n            light1.Enabled = true;\n\n            // Back light.\n            light2.Direction = new Vector3(0.4545195f, -0.7660444f, 0.4545195f);\n            light2.DiffuseColor = new Vector3(0.3231373f, 0.3607844f, 0.3937255f);\n            light2.SpecularColor = new Vector3(0.3231373f, 0.3607844f, 0.3937255f);\n            light2.Enabled = true;\n\n            // Ambient light.\n            return new Vector3(0.05333332f, 0.09882354f, 0.1819608f);\n        }\n\n\n        /// <summary>\n        /// Lazily recomputes the world+view+projection matrix and\n        /// fog vector based on the current effect parameter settings.\n        /// </summary>\n        internal static EffectDirtyFlags SetWorldViewProjAndFog(EffectDirtyFlags dirtyFlags,\n                                                                ref Matrix world, ref Matrix view, ref Matrix projection, ref Matrix worldView,\n                                                                bool fogEnabled, float fogStart, float fogEnd,\n                                                                EffectParameter worldViewProjParam, EffectParameter fogVectorParam)\n        {\n            // Recompute the world+view+projection matrix?\n            if ((dirtyFlags & EffectDirtyFlags.WorldViewProj) != 0)\n            {\n                Matrix worldViewProj;\n                \n                Matrix.Multiply(ref world, ref view, out worldView);\n                Matrix.Multiply(ref worldView, ref projection, out worldViewProj);\n                \n                worldViewProjParam.SetValue(worldViewProj);\n                \n                dirtyFlags &= ~EffectDirtyFlags.WorldViewProj;\n            }\n\n            if (fogEnabled)\n            {\n                // Recompute the fog vector?\n                if ((dirtyFlags & (EffectDirtyFlags.Fog | EffectDirtyFlags.FogEnable)) != 0)\n                {\n                    SetFogVector(ref worldView, fogStart, fogEnd, fogVectorParam);\n\n                    dirtyFlags &= ~(EffectDirtyFlags.Fog | EffectDirtyFlags.FogEnable);\n                }\n            }\n            else\n            {\n                // When fog is disabled, make sure the fog vector is reset to zero.\n                if ((dirtyFlags & EffectDirtyFlags.FogEnable) != 0)\n                {\n                    fogVectorParam.SetValue(Vector4.Zero);\n\n                    dirtyFlags &= ~EffectDirtyFlags.FogEnable;\n                }\n            }\n\n            return dirtyFlags;\n        }\n\n\n        /// <summary>\n        /// Sets a vector which can be dotted with the object space vertex position to compute fog amount.\n        /// </summary>\n        static void SetFogVector(ref Matrix worldView, float fogStart, float fogEnd, EffectParameter fogVectorParam)\n        {\n            if (fogStart == fogEnd)\n            {\n                // Degenerate case: force everything to 100% fogged if start and end are the same.\n                fogVectorParam.SetValue(new Vector4(0, 0, 0, 1));\n            }\n            else\n            {\n                // We want to transform vertex positions into view space, take the resulting\n                // Z value, then scale and offset according to the fog start/end distances.\n                // Because we only care about the Z component, the shader can do all this\n                // with a single dot product, using only the Z row of the world+view matrix.\n                \n                float scale = 1f / (fogStart - fogEnd);\n\n                Vector4 fogVector = new Vector4();\n\n                fogVector.X = worldView.M13 * scale;\n                fogVector.Y = worldView.M23 * scale;\n                fogVector.Z = worldView.M33 * scale;\n                fogVector.W = (worldView.M43 + fogStart) * scale;\n\n                fogVectorParam.SetValue(fogVector);\n            }\n        }\n\n\n        /// <summary>\n        /// Lazily recomputes the world inverse transpose matrix and\n        /// eye position based on the current effect parameter settings.\n        /// </summary>\n        internal static EffectDirtyFlags SetLightingMatrices(EffectDirtyFlags dirtyFlags, ref Matrix world, ref Matrix view,\n                                                             EffectParameter worldParam, EffectParameter worldInverseTransposeParam, EffectParameter eyePositionParam)\n        {\n            // Set the world and world inverse transpose matrices.\n            if ((dirtyFlags & EffectDirtyFlags.World) != 0)\n            {\n                Matrix worldTranspose;\n                Matrix worldInverseTranspose;\n                \n                Matrix.Invert(ref world, out worldTranspose);\n                Matrix.Transpose(ref worldTranspose, out worldInverseTranspose);\n                \n                worldParam.SetValue(world);\n                worldInverseTransposeParam.SetValue(worldInverseTranspose);\n                \n                dirtyFlags &= ~EffectDirtyFlags.World;\n            }\n\n            // Set the eye position.\n            if ((dirtyFlags & EffectDirtyFlags.EyePosition) != 0)\n            {\n                Matrix viewInverse;\n                \n                Matrix.Invert(ref view, out viewInverse);\n\n                eyePositionParam.SetValue(viewInverse.Translation);\n\n                dirtyFlags &= ~EffectDirtyFlags.EyePosition;\n            }\n\n            return dirtyFlags;\n        }\n\n\n        /// <summary>\n        /// Sets the diffuse/emissive/alpha material color parameters.\n        /// </summary>\n        internal static void SetMaterialColor(bool lightingEnabled, float alpha,\n                                              ref Vector3 diffuseColor, ref Vector3 emissiveColor, ref Vector3 ambientLightColor,\n                                              EffectParameter diffuseColorParam, EffectParameter emissiveColorParam)\n        {\n            // Desired lighting model:\n            //\n            //     ((AmbientLightColor + sum(diffuse directional light)) * DiffuseColor) + EmissiveColor\n            //\n            // When lighting is disabled, ambient and directional lights are ignored, leaving:\n            //\n            //     DiffuseColor + EmissiveColor\n            //\n            // For the lighting disabled case, we can save one shader instruction by precomputing\n            // diffuse+emissive on the CPU, after which the shader can use DiffuseColor directly,\n            // ignoring its emissive parameter.\n            //\n            // When lighting is enabled, we can merge the ambient and emissive settings. If we\n            // set our emissive parameter to emissive+(ambient*diffuse), the shader no longer\n            // needs to bother adding the ambient contribution, simplifying its computation to:\n            //\n            //     (sum(diffuse directional light) * DiffuseColor) + EmissiveColor\n            //\n            // For futher optimization goodness, we merge material alpha with the diffuse\n            // color parameter, and premultiply all color values by this alpha.\n            \n            if (lightingEnabled)\n            {\n                Vector4 diffuse = new Vector4();\n                Vector3 emissive = new Vector3();\n                \n                diffuse.X = diffuseColor.X * alpha;\n                diffuse.Y = diffuseColor.Y * alpha;\n                diffuse.Z = diffuseColor.Z * alpha;\n                diffuse.W = alpha;\n\n                emissive.X = (emissiveColor.X + ambientLightColor.X * diffuseColor.X) * alpha;\n                emissive.Y = (emissiveColor.Y + ambientLightColor.Y * diffuseColor.Y) * alpha;\n                emissive.Z = (emissiveColor.Z + ambientLightColor.Z * diffuseColor.Z) * alpha;\n\n                diffuseColorParam.SetValue(diffuse);\n                emissiveColorParam.SetValue(emissive);\n            }\n            else\n            {\n                Vector4 diffuse = new Vector4();\n                \n                diffuse.X = (diffuseColor.X + emissiveColor.X) * alpha;\n                diffuse.Y = (diffuseColor.Y + emissiveColor.Y) * alpha;\n                diffuse.Z = (diffuseColor.Z + emissiveColor.Z) * alpha;\n                diffuse.W = alpha;\n\n                diffuseColorParam.SetValue(diffuse);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectMaterial.cs",
    "content": "#region License\n/*\nMicrosoft Public License (Ms-PL)\nMonoGame - Copyright © 2009 The MonoGame Team\n\nAll rights reserved.\n\nThis license governs use of the accompanying software. If you use the software, you accept this license. If you do not\naccept the license, do not use the software.\n\n1. Definitions\nThe terms \"reproduce,\" \"reproduction,\" \"derivative works,\" and \"distribution\" have the same meaning here as under \nU.S. copyright law.\n\nA \"contribution\" is the original software, or any additions or changes to the software.\nA \"contributor\" is any person that distributes its contribution under this license.\n\"Licensed patents\" are a contributor's patent claims that read directly on its contribution.\n\n2. Grant of Rights\n(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, \neach contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\n(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, \neach contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\n\n3. Conditions and Limitations\n(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.\n(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, \nyour patent license from such contributor to the software ends automatically.\n(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution \nnotices that are present in the software.\n(D) If you distribute any portion of the software in source code form, you may do so only under this license by including \na complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object \ncode form, you may only do so under a license that complies with this license.\n(E) The software is licensed \"as-is.\" You bear the risk of using it. The contributors give no express warranties, guarantees\nor conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent\npermitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular\npurpose and non-infringement.\n*/\n#endregion License\n\nusing System;\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class EffectMaterial : Effect\n    {\n        public EffectMaterial (Effect cloneSource) : base(cloneSource)\n        {\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectParameter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Linq;\nusing System.Text;\nusing System.Diagnostics;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [DebuggerDisplay(\"{DebugDisplayString}\")]\n    public class EffectParameter\n    {\n        public string Name { get; private set; }\n\n        public string Semantic { get; private set; }\n\n        public EffectParameterClass ParameterClass { get; private set; }\n\n        public EffectParameterType ParameterType { get; private set; }\n\n        public int RowCount { get; private set; }\n\n        public int ColumnCount { get; private set; }\n        \n        internal int ColumnCountActual { get; private set; }\n\n        public EffectParameterCollection Elements { get; private set; }\n\n        public EffectParameterCollection StructureMembers { get; private set; }\n\n        public EffectAnnotationCollection Annotations { get; private set; }\n        \n        internal object Data { get; private set; }\n        // Because we are compiling SM3.0 to GLSL 1.10 instead of GLSL 1.20\n        // MojoShader encodes integers and booleans as floats,\n        // and we need to handle int<->float conversion manually.\n        // TODO: Compile SM 3.0 and above with MojoShader.NativeConstants.PROFILE_GLSL120.\n        private bool _integersAsFloats;\n\n        /// <summary>\n        /// The next state key used when an effect parameter\n        /// is updated by any of the 'set' methods.\n        /// </summary>\n        internal static ulong NextStateKey { get; private set; }\n\n        /// <summary>\n        /// The current state key which is used to detect\n        /// if the parameter value has been changed.\n        /// </summary>\n        internal ulong StateKey { get; private set; }\n\n\n        internal EffectParameter(EffectParameterClass class_,\n                                    EffectParameterType type,\n                                    string name,\n                                    int rowCount,\n                                    int columnCount,\n                                    int columnCountActual,\n                                    string semantic,\n                                    EffectAnnotationCollection annotations,\n                                    EffectParameterCollection elements,\n                                    EffectParameterCollection structMembers,\n                                    object data,\n                                    bool integersAsFloats)\n        {\n            ParameterClass = class_;\n            ParameterType = type;\n\n            Name = name;\n            Semantic = semantic;\n            Annotations = annotations;\n\n            RowCount = rowCount;\n            ColumnCount = columnCount;\n            ColumnCountActual = columnCountActual;\n\n            Elements = elements;\n            StructureMembers = structMembers;\n\n            Data = data;\n            _integersAsFloats = integersAsFloats;\n\n            StateKey = unchecked(NextStateKey++);\n        }\n\n        internal EffectParameter(EffectParameter cloneSource)\n        {\n            // Share all the immutable types.\n            ParameterClass = cloneSource.ParameterClass;\n            ParameterType = cloneSource.ParameterType;\n            Name = cloneSource.Name;\n            Semantic = cloneSource.Semantic;\n            Annotations = cloneSource.Annotations;\n            RowCount = cloneSource.RowCount;\n            ColumnCount = cloneSource.ColumnCount;\n            ColumnCountActual = cloneSource.ColumnCountActual;\n\n            // Clone the mutable types.\n            Elements = cloneSource.Elements.Clone();\n            StructureMembers = cloneSource.StructureMembers.Clone();\n\n            // The data is mutable, so we have to clone it.\n            Array array = cloneSource.Data as Array;\n            if (array != null)\n                Data = array.Clone();\n            _integersAsFloats = cloneSource._integersAsFloats;\n\n            StateKey = unchecked(NextStateKey++);\n        }\n\n\n        public bool GetValueBoolean()\n        {\n            if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Bool)\n            {\n                if (_integersAsFloats)\n                    return ((float[])Data)[0] != 0.0f;\n                else\n                    return ((int[])Data)[0] != 0;\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(bool value)\n        {\n            if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Bool)\n            {\n                if (_integersAsFloats)\n                    ((float[])Data)[0] = value ? 1 : 0;\n                else\n                    ((int[])Data)[0] = value ? 1 : 0;\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public bool[] GetValueBooleanArray()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void SetValue(bool[] value)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        public int GetValueInt32()\n        {\n            if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Int32)\n            {\n                if (_integersAsFloats)\n                    return (int)((float[])Data)[0];\n                else\n                    return ((int[])Data)[0];\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(int value)\n        {\n            if (ParameterType == EffectParameterType.Single)\n            {\n                ((float[])Data)[0] = value;\n\n                StateKey = unchecked(NextStateKey++);\n                return;\n            }\n\n            if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Int32)\n            {\n                if (_integersAsFloats)\n                    ((float[])Data)[0] = value;\n                else\n                    ((int[])Data)[0] = value;\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public int[] GetValueInt32Array()\n        {\n            if (Elements != null && Elements.Count > 0)\n            {\n                int[] ret = new int[RowCount * ColumnCount * Elements.Count];\n                for (int i = 0; i < Elements.Count; i++)\n                {\n                    int[] elmArray = Elements[i].GetValueInt32Array();\n                    for (int j = 0; j < elmArray.Length; j++)\n                        ret[RowCount * ColumnCount * i + j] = elmArray[j];\n                }\n                return ret;\n            }\n\n            switch (ParameterClass)\n            {\n                case EffectParameterClass.Scalar:\n                    return new int[] { GetValueInt32() };\n                default:\n                    throw new NotImplementedException();\n            }\n        }\n\n        public void SetValue(int[] value)\n        {\n            for (int i = 0; i < value.Length; i++)\n                Elements[i].SetValue(value[i]);\n\n            StateKey = unchecked(NextStateKey++);\n        }\n\n\n        public Single GetValueSingle()\n        {\n            if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Single)\n            {\n                return ((float[])Data)[0];\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Single value)\n        {\n            if (ParameterType == EffectParameterType.Single)\n            {\n                ((float[])Data)[0] = value;\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public Single[] GetValueSingleArray()\n        {\n            if (Elements != null && Elements.Count > 0)\n            {\n                Single[] ret = new Single[RowCount * ColumnCount * Elements.Count];\n                for (int i = 0; i < Elements.Count; i++)\n                {\n                    Single[] elmArray = Elements[i].GetValueSingleArray();\n                    for (int j = 0; j < elmArray.Length; j++)\n                        ret[RowCount * ColumnCount * i + j] = elmArray[j];\n                }\n                return ret;\n            }\n\n            switch (ParameterClass)\n            {\n                case EffectParameterClass.Scalar:\n                    return new Single[] { GetValueSingle() };\n                case EffectParameterClass.Vector:\n                case EffectParameterClass.Matrix:\n                    if (Data is Matrix)\n                        return Matrix.ToFloatArray((Matrix)Data);\n                    else\n                        return (float[])Data;\n                default:\n                    throw new NotImplementedException();\n            }\n        }\n\n        public void SetValue(Single[] value)\n        {\n            for (int i = 0; i < value.Length; i++)\n                Elements[i].SetValue(value[i]);\n\n            StateKey = unchecked(NextStateKey++);\n        }\n\n\n        public Vector2 GetValueVector2()\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                float[] vecInfo = (float[])Data;\n                return new Vector2(vecInfo[0], vecInfo[1]);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Vector2 value)\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                float[] fData = (float[])Data;\n                fData[0] = value.X;\n                fData[1] = value.Y;\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public Vector2[] GetValueVector2Array()\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                if (Elements != null && Elements.Count > 0)\n                {\n                    Vector2[] result = new Vector2[Elements.Count];\n                    for (int i = 0; i < Elements.Count; i++)\n                    {\n                        float[] v = Elements[i].GetValueSingleArray();\n                        result[i] = new Vector2(v[0], v[1]);\n                    }\n                    return result;\n                }\n\n                return null;\n            }\n            else \n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Vector2[] value)\n        {\n            for (int i = 0; i < value.Length; i++)\n                Elements[i].SetValue(value[i]);\n\n            StateKey = unchecked(NextStateKey++);\n        }\n\n\n        public Vector3 GetValueVector3()\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                float[] vecInfo = (float[])Data;\n                return new Vector3(vecInfo[0], vecInfo[1], vecInfo[2]);\n            }\n            else\n                throw new InvalidCastException();\n            }\n\n        public void SetValue(Vector3 value)\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                float[] fData = (float[])Data;\n                fData[0] = value.X;\n                fData[1] = value.Y;\n                fData[2] = value.Z;\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public Vector3[] GetValueVector3Array()\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                if (Elements != null && Elements.Count > 0)\n                {\n                    Vector3[] result = new Vector3[Elements.Count];\n                    for (int i = 0; i < Elements.Count; i++)\n                    {\n                        float[] v = Elements[i].GetValueSingleArray();\n                        result[i] = new Vector3(v[0], v[1], v[2]);\n                    }\n                    return result;\n                }\n                return null;\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Vector3[] value)\n        {\n            for (int i = 0; i < value.Length; i++)\n                Elements[i].SetValue(value[i]);\n\n            StateKey = unchecked(NextStateKey++);\n        }\n\n\n        public Vector4 GetValueVector4()\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                float[] vecInfo = (float[])Data;\n                return new Vector4(vecInfo[0], vecInfo[1], vecInfo[2], vecInfo[3]);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Vector4 value)\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                float[] fData = (float[])Data;\n                fData[0] = value.X;\n                fData[1] = value.Y;\n                fData[2] = value.Z;\n                fData[3] = value.W;\n\n                StateKey = unchecked(NextStateKey++);                \n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public Vector4[] GetValueVector4Array()\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                if (Elements != null && Elements.Count > 0)\n                {\n                    Vector4[] result = new Vector4[Elements.Count];\n                    for (int i = 0; i < Elements.Count; i++)\n                    {\n                        float[] v = Elements[i].GetValueSingleArray();\n                        result[i] = new Vector4(v[0], v[1], v[2], v[3]);\n                    }\n                    return result;\n                }\n                return null;\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Vector4[] value)\n        {\n            for (int i = 0; i < value.Length; i++)\n                Elements[i].SetValue(value[i]);\n\n            StateKey = unchecked(NextStateKey++);\n        }\n\n\n        public Quaternion GetValueQuaternion()\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                float[] vecInfo = (float[])Data;\n                return new Quaternion(vecInfo[0], vecInfo[1], vecInfo[2], vecInfo[3]);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Quaternion value)\n        {\n            if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single)\n            {\n                float[] fData = (float[])Data;\n                fData[0] = value.X;\n                fData[1] = value.Y;\n                fData[2] = value.Z;\n                fData[3] = value.W;\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public Quaternion[] GetValueQuaternionArray()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void SetValue(Quaternion[] value)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        public Matrix GetValueMatrix()\n        {\n            if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single)\n            {\n                float[] fData = (float[])Data;\n\n                if (RowCount == 4 && ColumnCount == 4)\n                {\n                    return new Matrix(fData[0], fData[4], fData[ 8], fData[12],\n                                      fData[1], fData[5], fData[ 9], fData[13],\n                                      fData[2], fData[6], fData[10], fData[14],\n                                      fData[3], fData[7], fData[11], fData[15]);\n                }\n                else\n                    throw new InvalidCastException();\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Matrix value)\n        {\n            if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single)\n            {\n                // HLSL expects matrices to be transposed by default.\n                // These unrolled loops do the transpose during assignment.\n                if (RowCount == 4)\n                {\n                    if (ColumnCount == 4)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M21;\n                        fData[2] = value.M31;\n                        fData[3] = value.M41;\n\n                        fData[4] = value.M12;\n                        fData[5] = value.M22;\n                        fData[6] = value.M32;\n                        fData[7] = value.M42;\n\n                        fData[8] = value.M13;\n                        fData[9] = value.M23;\n                        fData[10] = value.M33;\n                        fData[11] = value.M43;\n\n                        fData[12] = value.M14;\n                        fData[13] = value.M24;\n                        fData[14] = value.M34;\n                        fData[15] = value.M44;\n                    }\n                    else if (ColumnCount == 3)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M21;\n                        fData[2] = value.M31;\n                        fData[3] = value.M41;\n\n                        fData[4] = value.M12;\n                        fData[5] = value.M22;\n                        fData[6] = value.M32;\n                        fData[7] = value.M42;\n\n                        fData[8] = value.M13;\n                        fData[9] = value.M23;\n                        fData[10] = value.M33;\n                        fData[11] = value.M43;\n                    }\n                    else if (ColumnCount == 2)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M21;\n                        fData[2] = value.M31;\n                        fData[3] = value.M41;\n\n                        fData[4] = value.M12;\n                        fData[5] = value.M22;\n                        fData[6] = value.M32;\n                        fData[7] = value.M42;\n                    }\n                    else\n                        throw new InvalidCastException();\n                }\n                else if (RowCount == 3)\n                {\n                    if (ColumnCount == 4)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M21;\n                        fData[2] = value.M31;\n\n                        fData[3] = value.M12;\n                        fData[4] = value.M22;\n                        fData[5] = value.M32;\n\n                        fData[6] = value.M13;\n                        fData[7] = value.M23;\n                        fData[8] = value.M33;\n\n                        fData[9] = value.M14;\n                        fData[10] = value.M24;\n                        fData[11] = value.M34;\n                    }\n                    else if (ColumnCount == 3)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M21;\n                        fData[2] = value.M31;\n\n                        fData[3] = value.M12;\n                        fData[4] = value.M22;\n                        fData[5] = value.M32;\n\n                        fData[6] = value.M13;\n                        fData[7] = value.M23;\n                        fData[8] = value.M33;\n                    }\n                    else if (ColumnCount == 2)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M21;\n                        fData[2] = value.M31;\n\n                        fData[3] = value.M12;\n                        fData[4] = value.M22;\n                        fData[5] = value.M32;\n                    }\n                    else\n                        throw new InvalidCastException();\n                }\n                else\n                    throw new InvalidCastException();\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n\n        }\n\n        public Matrix[] GetValueMatrixArray(int count)\n        {\n            if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single)\n            {\n                Matrix[] ret = new Matrix[count];\n                for (int i = 0; i < count; i++)\n                    ret[i] = Elements[i].GetValueMatrix();\n\n                return ret;\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Matrix[] value)\n        {\n            if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single)\n            {\n                if (RowCount == 4)\n                {\n                    if (ColumnCount == 4)\n                    {\n                        for (int i = 0; i < value.Length; i++)\n                        {\n                            float[] fData = (float[])Elements[i].Data;\n\n                            fData[0] = value[i].M11;\n                            fData[1] = value[i].M21;\n                            fData[2] = value[i].M31;\n                            fData[3] = value[i].M41;\n\n                            fData[4] = value[i].M12;\n                            fData[5] = value[i].M22;\n                            fData[6] = value[i].M32;\n                            fData[7] = value[i].M42;\n\n                            fData[8] = value[i].M13;\n                            fData[9] = value[i].M23;\n                            fData[10] = value[i].M33;\n                            fData[11] = value[i].M43;\n\n                            fData[12] = value[i].M14;\n                            fData[13] = value[i].M24;\n                            fData[14] = value[i].M34;\n                            fData[15] = value[i].M44;\n                        }\n                    }\n                    else if (ColumnCount == 3)\n                    {\n                        for (int i = 0; i < value.Length; i++)\n                        {\n                            float[] fData = (float[])Elements[i].Data;\n\n                            fData[0] = value[i].M11;\n                            fData[1] = value[i].M21;\n                            fData[2] = value[i].M31;\n                            fData[3] = value[i].M41;\n\n                            fData[4] = value[i].M12;\n                            fData[5] = value[i].M22;\n                            fData[6] = value[i].M32;\n                            fData[7] = value[i].M42;\n\n                            fData[8] = value[i].M13;\n                            fData[9] = value[i].M23;\n                            fData[10] = value[i].M33;\n                            fData[11] = value[i].M43;\n                        }\n                    }\n                    else if (ColumnCount == 2)\n                    {\n                        for (int i = 0; i < value.Length; i++)\n                        {\n                            float[] fData = (float[])Elements[i].Data;\n\n                            fData[0] = value[i].M11;\n                            fData[1] = value[i].M21;\n                            fData[2] = value[i].M31;\n                            fData[3] = value[i].M41;\n\n                            fData[4] = value[i].M12;\n                            fData[5] = value[i].M22;\n                            fData[6] = value[i].M32;\n                            fData[7] = value[i].M42;\n                        }\n                    }\n                    else\n                        throw new InvalidCastException();\n                }\n                else if (RowCount == 3)\n                {\n                    if (ColumnCount == 4)\n                    {\n                        for (int i = 0; i < value.Length; i++)\n                        {\n                            float[] fData = (float[])Elements[i].Data;\n\n                            fData[0] = value[i].M11;\n                            fData[1] = value[i].M21;\n                            fData[2] = value[i].M31;\n\n                            fData[3] = value[i].M12;\n                            fData[4] = value[i].M22;\n                            fData[5] = value[i].M32;\n\n                            fData[6] = value[i].M13;\n                            fData[7] = value[i].M23;\n                            fData[8] = value[i].M33;\n\n                            fData[9] = value[i].M14;\n                            fData[10] = value[i].M24;\n                            fData[11] = value[i].M34;\n                        }\n                    }\n                    else if (ColumnCount == 3)\n                    {\n                        for (int i = 0; i < value.Length; i++)\n                        {\n                            float[] fData = (float[])Elements[i].Data;\n\n                            fData[0] = value[i].M11;\n                            fData[1] = value[i].M21;\n                            fData[2] = value[i].M31;\n\n                            fData[3] = value[i].M12;\n                            fData[4] = value[i].M22;\n                            fData[5] = value[i].M32;\n\n                            fData[6] = value[i].M13;\n                            fData[7] = value[i].M23;\n                            fData[8] = value[i].M33;\n                        }\n                    }\n                    else if (ColumnCount == 2)\n                    {\n                        for (int i = 0; i < value.Length; i++)\n                        {\n                            float[] fData = (float[])Elements[i].Data;\n\n                            fData[0] = value[i].M11;\n                            fData[1] = value[i].M21;\n                            fData[2] = value[i].M31;\n\n                            fData[3] = value[i].M12;\n                            fData[4] = value[i].M22;\n                            fData[5] = value[i].M32;\n                        }\n                    }\n                    else\n                        throw new InvalidCastException();                    \n                }\n                else\n                    throw new InvalidCastException();\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n\n        public void SetValueTranspose(Matrix value)\n        {\n            if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single)\n            {\n                // HLSL expects matrices to be transposed by default, so copying them straight\n                // from the in-memory version effectively transposes them back to row-major.\n            \n                if (RowCount == 4)\n                {\n                    if (ColumnCount == 4)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M12;\n                        fData[2] = value.M13;\n                        fData[3] = value.M14;\n\n                        fData[4] = value.M21;\n                        fData[5] = value.M22;\n                        fData[6] = value.M23;\n                        fData[7] = value.M24;\n\n                        fData[8] = value.M31;\n                        fData[9] = value.M32;\n                        fData[10] = value.M33;\n                        fData[11] = value.M34;\n\n                        fData[12] = value.M41;\n                        fData[13] = value.M42;\n                        fData[14] = value.M43;\n                        fData[15] = value.M44;\n                    }\n                    else if (ColumnCount == 3)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M12;\n                        fData[2] = value.M13;\n                        fData[3] = value.M14;\n\n                        fData[4] = value.M21;\n                        fData[5] = value.M22;\n                        fData[6] = value.M23;\n                        fData[7] = value.M24;\n\n                        fData[8] = value.M31;\n                        fData[9] = value.M32;\n                        fData[10] = value.M33;\n                        fData[11] = value.M34;\n                    }\n                    else if (ColumnCount == 2)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M21;\n                        fData[2] = value.M31;\n                        fData[3] = value.M41;\n\n                        fData[4] = value.M12;\n                        fData[5] = value.M22;\n                        fData[6] = value.M32;\n                        fData[7] = value.M42;\n                    }\n                    else\n                        throw new InvalidCastException();\n                }\n                else if (RowCount == 3)\n                {\n                    if (ColumnCount == 4)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M12;\n                        fData[2] = value.M13;\n\n                        fData[3] = value.M21;\n                        fData[4] = value.M22;\n                        fData[5] = value.M23;\n\n                        fData[6] = value.M31;\n                        fData[7] = value.M32;\n                        fData[8] = value.M33;\n\n                        fData[9] = value.M41;\n                        fData[10] = value.M42;\n                        fData[11] = value.M43;\n                    }\n                    else if (ColumnCount == 3)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M12;\n                        fData[2] = value.M13;\n\n                        fData[3] = value.M21;\n                        fData[4] = value.M22;\n                        fData[5] = value.M23;\n\n                        fData[6] = value.M31;\n                        fData[7] = value.M32;\n                        fData[8] = value.M33;\n                    }\n                    else if (ColumnCount == 2)\n                    {\n                        float[] fData = (float[])Data;\n\n                        fData[0] = value.M11;\n                        fData[1] = value.M12;\n                        fData[2] = value.M13;\n\n                        fData[3] = value.M21;\n                        fData[4] = value.M22;\n                        fData[5] = value.M23;\n                    }\n                    else\n                        throw new InvalidCastException();\n                }\n                else\n                    throw new InvalidCastException();\n\n                StateKey = unchecked(NextStateKey++);            \n            }\n            else\n                throw new InvalidCastException();\n        }\n\n\n        public string GetValueString()\n        {\n            if (ParameterClass == EffectParameterClass.Object && ParameterType == EffectParameterType.String)\n            {\n                return ((string[])Data)[0];\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(string value)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        public Texture2D GetValueTexture2D()\n        {\n            if (ParameterClass == EffectParameterClass.Object && ParameterType == EffectParameterType.Texture2D)\n            {\n                return (Texture2D)Data;\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public Texture3D GetValueTexture3D()\n        {\n            if (ParameterClass == EffectParameterClass.Object && ParameterType == EffectParameterType.Texture3D)\n            {\n                return (Texture3D)Data;\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public TextureCube GetValueTextureCube()\n        {\n            if (ParameterClass == EffectParameterClass.Object && ParameterType == EffectParameterType.TextureCube)\n            {\n                return (TextureCube)Data;\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n        public void SetValue(Texture value)\n        {\n            if (this.ParameterType == EffectParameterType.Texture ||\n                this.ParameterType == EffectParameterType.Texture1D ||\n                this.ParameterType == EffectParameterType.Texture2D ||\n                this.ParameterType == EffectParameterType.Texture3D ||\n                this.ParameterType == EffectParameterType.TextureCube)\n            {\n                Data = value;\n\n                StateKey = unchecked(NextStateKey++);\n            }\n            else\n                throw new InvalidCastException();\n        }\n\n\n        /// <summary>\n        /// Property referenced by the DebuggerDisplayAttribute.\n        /// </summary>\n        private string DebugDisplayString\n        {\n            get\n            {\n                string semanticStr = string.Empty;\n                if (!string.IsNullOrEmpty(Semantic))\n                    semanticStr = string.Concat(\" <\", Semantic, \">\");\n\n                return string.Concat(\"[\", ParameterClass, \" \", ParameterType, \"]\", semanticStr, \" \", Name, \" : \", GetDebugDataValueString());\n            }\n        }\n\n        private string GetDebugDataValueString()\n        {\n            string valueStr;\n\n            if (Data == null)\n            {\n                if (Elements == null)\n                    valueStr = \"(null)\";\n                else\n                    valueStr = string.Join(\", \", Elements.Select(e => e.GetDebugDataValueString()));\n            }\n            else\n            {\n                switch (ParameterClass)\n                {\n                    // Object types are stored directly in the Data property.\n                    // Display Data's string value.\n                    case EffectParameterClass.Object:\n                        valueStr = Data.ToString();\n                        break;\n\n                    // Matrix types are stored in a float[16] which we don't really have room for.\n                    // Display \"...\".\n                    case EffectParameterClass.Matrix:\n                        valueStr = \"...\";\n                        break;\n\n                    // Scalar types are stored as a float[1].\n                    // Display the first (and only) element's string value.                    \n                    case EffectParameterClass.Scalar:\n                        valueStr = (Data as Array).GetValue(0).ToString();\n                        break;\n\n                    // Vector types are stored as an Array<Type>.\n                    // Display the string value of each array element.\n                    case EffectParameterClass.Vector:\n                        Array array = Data as Array;\n                        string[] arrayStr = new string[array.Length];\n                        int idx = 0;\n                        foreach (object e in array)\n                        {\n                            arrayStr[idx] = array.GetValue(idx).ToString();\n                            idx++;\n                        }\n\n                        valueStr = string.Join(\" \", arrayStr);\n                        break;\n\n                    // Handle additional cases here...\n                    default:\n                        valueStr = Data.ToString();\n                        break;\n                }\n            }\n\n            return string.Concat(\"{\", valueStr, \"}\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectParameterClass.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines classes for effect parameters and shader constants.\n    /// </summary>\n    public enum EffectParameterClass\n    {\n        /// <summary>\n        /// Scalar class type.\n        /// </summary>\n        Scalar,\n        /// <summary>\n        /// Vector class type.\n        /// </summary>\n        Vector,\n        /// <summary>\n        /// Matrix class type.\n        /// </summary>\n        Matrix,\n        /// <summary>\n        /// Class type for textures, shaders or strings. \n        /// </summary>\n        Object,\n        /// <summary>\n        /// Structure class type.\n        /// </summary>\n        Struct\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectParameterCollection.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class EffectParameterCollection : IEnumerable<EffectParameter>\n    {\n        internal static readonly EffectParameterCollection Empty = new EffectParameterCollection(new EffectParameter[0]);\n\n        private readonly EffectParameter[] _parameters;\n        private readonly Dictionary<string, int> _indexLookup;\n\n        internal EffectParameterCollection(EffectParameter[] parameters)\n        {\n            _parameters = parameters;\n            _indexLookup = new Dictionary<string, int>(_parameters.Length);\n            for (int i = 0; i < _parameters.Length; i++)\n            {\n                string name = _parameters[i].Name;\n                if(!string.IsNullOrWhiteSpace(name))\n                    _indexLookup.Add(name, i);\n            }\n        }\n\n        private EffectParameterCollection(EffectParameter[] parameters, Dictionary<string, int> indexLookup)\n        {\n            _parameters = parameters;\n            _indexLookup = indexLookup;\n        }\n\n        internal EffectParameterCollection Clone()\n        {\n            if (_parameters.Length == 0)\n                return Empty;\n\n            EffectParameter[] parameters = new EffectParameter[_parameters.Length];\n            for (int i = 0; i < _parameters.Length; i++)\n                parameters[i] = new EffectParameter(_parameters[i]);\n\n            return new EffectParameterCollection(parameters, _indexLookup);\n        }\n\n        public int Count\n        {\n            get { return _parameters.Length; }\n        }\n        \n        public EffectParameter this[int index]\n        {\n            get { return _parameters[index]; }\n        }\n        \n        public EffectParameter this[string name]\n        {\n            get\n            {\n                int index;\n                if (_indexLookup.TryGetValue(name, out index))\n                    return _parameters[index];\n                return null;\n            }\n        }\n\n        public IEnumerator<EffectParameter> GetEnumerator()\n        {\n            return ((IEnumerable<EffectParameter>)_parameters).GetEnumerator();\n        }\n\n        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n        {\n            return _parameters.GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectParameterType.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines types for effect parameters and shader constants.\n    /// </summary>\n    public enum EffectParameterType\n    {\n        /// <summary>\n        /// Pointer to void type.\n        /// </summary>\n        Void,\n        /// <summary>\n        /// Boolean type. Any non-zero will be <c>true</c>; <c>false</c> otherwise.\n        /// </summary>\n        Bool,\n        /// <summary>\n        /// 32-bit integer type.\n        /// </summary>\n        Int32,\n        /// <summary>\n        /// Float type.\n        /// </summary>\n        Single,\n        /// <summary>\n        /// String type.\n        /// </summary>\n        String,\n        /// <summary>\n        /// Any texture type.\n        /// </summary>\n        Texture,\n        /// <summary>\n        /// 1D-texture type.\n        /// </summary>\n        Texture1D,  \n        /// <summary>\n        /// 2D-texture type.\n        /// </summary>\n        Texture2D,\n        /// <summary>\n        /// 3D-texture type.\n        /// </summary>\n        Texture3D,\n        /// <summary>\n        /// Cubic texture type.\n        /// </summary>\n        TextureCube\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectPass.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class EffectPass\n    {\n        private readonly Effect _effect;\n\n        private readonly PixelShader _pixelShader;\n        private readonly VertexShader _vertexShader;\n\n        private readonly BlendState _blendState;\n        private readonly DepthStencilState _depthStencilState;\n        private readonly RasterizerState _rasterizerState;\n\n        public string Name { get; private set; }\n\n        public EffectAnnotationCollection Annotations { get; private set; }\n\n        internal EffectPass(    Effect effect, \n                                string name,\n                                VertexShader vertexShader, \n                                PixelShader pixelShader,\n                                BlendState blendState, \n                                DepthStencilState depthStencilState, \n                                RasterizerState rasterizerState,\n                                EffectAnnotationCollection annotations )\n        {\n            Debug.Assert(effect != null, \"Got a null effect!\");\n            Debug.Assert(annotations != null, \"Got a null annotation collection!\");\n\n            _effect = effect;\n\n            Name = name;\n\n            _vertexShader = vertexShader;\n            _pixelShader = pixelShader;\n\n            _blendState = blendState;\n            _depthStencilState = depthStencilState;\n            _rasterizerState = rasterizerState;\n\n            Annotations = annotations;\n        }\n        \n        internal EffectPass(Effect effect, EffectPass cloneSource)\n        {\n            Debug.Assert(effect != null, \"Got a null effect!\");\n            Debug.Assert(cloneSource != null, \"Got a null cloneSource!\");\n\n            _effect = effect;\n\n            // Share all the immutable types.\n            Name = cloneSource.Name;\n            _blendState = cloneSource._blendState;\n            _depthStencilState = cloneSource._depthStencilState;\n            _rasterizerState = cloneSource._rasterizerState;\n            Annotations = cloneSource.Annotations;\n            _vertexShader = cloneSource._vertexShader;\n            _pixelShader = cloneSource._pixelShader;\n        }\n\n        public void Apply()\n        {\n            EffectTechnique currentTechnique = _effect.CurrentTechnique;\n\n            _effect.OnApply();\n\n            if (_effect.CurrentTechnique != currentTechnique)\n                throw new InvalidOperationException(\"CurrentTechnique changed during Effect.OnApply().\");\n\n            GraphicsContext context = _effect.GraphicsDevice.CurrentContext;\n\n            if (_vertexShader != null)\n            {\n                context.VertexShader = _vertexShader;\n\n                // Update the texture parameters.\n                SetShaderSamplers(_vertexShader, context.VertexTextures, context.VertexSamplerStates);\n\n                // Update the constant buffers.\n                for (int c = 0; c < _vertexShader.CBuffers.Length; c++)\n                {\n                    ConstantBuffer constantBuffer = _effect.ConstantBuffers[_vertexShader.CBuffers[c]];\n                    ((IPlatformConstantBuffer)constantBuffer).Strategy.Update(_effect.Parameters);\n                    ((IPlatformGraphicsContext)context).Strategy._vertexConstantBuffers[c] = constantBuffer;\n                }\n            }\n\n            if (_pixelShader != null)\n            {\n                context.PixelShader = _pixelShader;\n\n                // Update the texture parameters.\n                SetShaderSamplers(_pixelShader, context.Textures, context.SamplerStates);\n\n                // Update the constant buffers.\n                for (int c = 0; c < _pixelShader.CBuffers.Length; c++)\n                {\n                    ConstantBuffer constantBuffer = _effect.ConstantBuffers[_pixelShader.CBuffers[c]];\n                    ((IPlatformConstantBuffer)constantBuffer).Strategy.Update(_effect.Parameters);\n                    ((IPlatformGraphicsContext)context).Strategy._pixelConstantBuffers[c] = constantBuffer;\n                }\n            }\n\n            // Set the render states if we have some.\n            if (_rasterizerState != null)\n                context.RasterizerState = _rasterizerState;\n            if (_blendState != null)\n                context.BlendState = _blendState;\n            if (_depthStencilState != null)\n                context.DepthStencilState = _depthStencilState;\n        }\n\n        private void SetShaderSamplers(Shader shader, TextureCollection textures, SamplerStateCollection samplerStates)\n        {\n            SamplerInfo[] samplers = shader.Samplers;\n            for (int i = 0; i < samplers.Length; i++)\n            {\n                // Set Texture\n                if (samplers[i].textureParameter != -1)\n                {\n                    EffectParameter param = _effect.Parameters[samplers[i].textureParameter];\n                    textures[samplers[i].textureSlot] = param.Data as Texture;\n                }\n\n                // Set SamplerState\n                if (samplers[i].state != null)\n                    samplerStates[samplers[i].samplerSlot] = samplers[i].state;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectPassCollection.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class EffectPassCollection : IEnumerable<EffectPass>\n    {\n        private readonly EffectPass[] _passes;\n\n        internal EffectPassCollection(EffectPass [] passes)\n        {\n            _passes = passes;\n        }\n\n        internal EffectPassCollection Clone(Effect effect)\n        {\n            EffectPass[] passes = new EffectPass[_passes.Length];\n            for (int i = 0; i < _passes.Length; i++)\n                passes[i] = new EffectPass(effect, _passes[i]);\n\n            return new EffectPassCollection(passes);\n        }\n\n        public EffectPass this[int index]\n        {\n            get { return _passes[index]; }\n        }\n\n        public EffectPass this[string name]\n        {\n            get \n            {\n                // TODO: Add a name to pass lookup table.\n                foreach (EffectPass pass in _passes) \n                {\n                    if (pass.Name == name)\n                        return pass;\n                }\n                return null;\n            }\n        }\n\n        public int Count\n        {\n            get { return _passes.Length; }\n        }\n\n        public Enumerator GetEnumerator()\n        {\n            return new Enumerator(_passes);\n        }\n            \n        IEnumerator<EffectPass> IEnumerable<EffectPass>.GetEnumerator()\n        {\n            return ((IEnumerable<EffectPass>)_passes).GetEnumerator();\n        }\n\n        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n        {\n            return _passes.GetEnumerator();\n        }\n\n        public struct Enumerator : IEnumerator<EffectPass>\n        {\n            private readonly EffectPass[] _array;\n            private int _index;\n            private EffectPass _current;\n\n            internal Enumerator(EffectPass[] array)\n            {\n                _array = array;\n                _index = 0;\n                _current = null;\n            }\n\n            public bool MoveNext()\n            {\n                if (_index < _array.Length)\n                {\n                    _current = _array[_index];\n                    _index++;\n                    return true;\n                }\n                _index = _array.Length + 1;\n                _current = null;\n                return false;\n            }\n\n            public EffectPass Current\n            {\n                get { return _current; }\n            }\n\n            public void Dispose()\n            {\n\n            }\n\n            object System.Collections.IEnumerator.Current\n            {\n                get\n                {\n                    if (_index == _array.Length + 1)\n                        throw new InvalidOperationException();\n                    return Current;\n                }\n            }\n\n            void System.Collections.IEnumerator.Reset()\n            {\n                _index = 0;\n                _current = null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectTechnique.cs",
    "content": "using System;\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class EffectTechnique\n    {\n        public EffectPassCollection Passes { get; private set; }\n\n        public EffectAnnotationCollection Annotations { get; private set; }\n\n        public string Name { get; private set; }\n\n        internal EffectTechnique(Effect effect, EffectTechnique cloneSource)\n        {\n            // Share all the immutable types.\n            Name = cloneSource.Name;\n            Annotations = cloneSource.Annotations;\n\n            // Clone the mutable types.\n            Passes = cloneSource.Passes.Clone(effect);\n        }\n\n        internal EffectTechnique(Effect effect, string name, EffectPassCollection passes, EffectAnnotationCollection annotations)\n        {\n            Name = name;\n            Passes = passes;\n            Annotations = annotations;\n        }\n    }\n\n\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EffectTechniqueCollection.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class EffectTechniqueCollection : IEnumerable<EffectTechnique>\n    {\n        private readonly EffectTechnique[] _techniques;\n\n        public int Count { get { return _techniques.Length; } }\n\n        internal EffectTechniqueCollection(EffectTechnique[] techniques)\n        {\n            _techniques = techniques;\n        }\n\n        internal EffectTechniqueCollection Clone(Effect effect)\n        {\n            EffectTechnique[] techniques = new EffectTechnique[_techniques.Length];\n            for (int i = 0; i < _techniques.Length; i++)\n                techniques[i] = new EffectTechnique(effect, _techniques[i]);\n\n            return new EffectTechniqueCollection(techniques);\n        }\n        \n        public EffectTechnique this[int index]\n        {\n            get { return _techniques[index]; }\n        }\n\n        public EffectTechnique this[string name]\n        {\n            get \n            {\n                // TODO: Add a name to technique lookup table.\n                foreach (EffectTechnique technique in _techniques) \n                {\n                    if (technique.Name == name)\n                        return technique;\n                }\n\n                return null;\n            }\n        }\n\n        public IEnumerator<EffectTechnique> GetEnumerator()\n        {\n            return ((IEnumerable<EffectTechnique>)_techniques).GetEnumerator();\n        }\n\n        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n        {\n            return _techniques.GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/EnvironmentMapEffect.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// EnvironmentMapEffect.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\n#region Using Statements\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\n#endregion\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Built-in effect that supports environment mapping.\n    /// </summary>\n    public class EnvironmentMapEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog\n    {\n        #region Effect Parameters\n\n        EffectParameter textureParam;\n        EffectParameter environmentMapParam;\n        EffectParameter environmentMapAmountParam;\n        EffectParameter environmentMapSpecularParam;\n        EffectParameter fresnelFactorParam;\n        EffectParameter diffuseColorParam;\n        EffectParameter emissiveColorParam;\n        EffectParameter eyePositionParam;\n        EffectParameter fogColorParam;\n        EffectParameter fogVectorParam;\n        EffectParameter worldParam;\n        EffectParameter worldInverseTransposeParam;\n        EffectParameter worldViewProjParam;\n\n        #endregion\n\n        #region Fields\n\n        bool _oneLight;\n        bool fogEnabled;\n        bool fresnelEnabled;\n        bool specularEnabled;\n\n        Matrix world = Matrix.Identity;\n        Matrix view = Matrix.Identity;\n        Matrix projection = Matrix.Identity;\n\n        Matrix worldView;\n\n        Vector3 diffuseColor = Vector3.One;\n        Vector3 emissiveColor = Vector3.Zero;\n        Vector3 ambientLightColor = Vector3.Zero;\n\n        float alpha = 1;\n\n        DirectionalLight light0;\n        DirectionalLight light1;\n        DirectionalLight light2;\n\n        float fogStart = 0;\n        float fogEnd = 1;\n\n        EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Gets or sets the world matrix.\n        /// </summary>\n        public Matrix World\n        {\n            get { return world; }\n            set\n            {\n                world = value;\n                dirtyFlags |= EffectDirtyFlags.World | EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the view matrix.\n        /// </summary>\n        public Matrix View\n        {\n            get { return view; }\n            set\n            {\n                view = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.EyePosition | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the projection matrix.\n        /// </summary>\n        public Matrix Projection\n        {\n            get { return projection; }\n            set\n            {\n                projection = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material diffuse color (range 0 to 1).\n        /// </summary>\n        public Vector3 DiffuseColor\n        {\n            get { return diffuseColor; }\n            set\n            {\n                diffuseColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material emissive color (range 0 to 1).\n        /// </summary>\n        public Vector3 EmissiveColor\n        {\n            get { return emissiveColor; }\n            set\n            {\n                emissiveColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material alpha.\n        /// </summary>\n        public float Alpha\n        {\n            get { return alpha; }\n            set\n            {\n                alpha = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the ambient light color (range 0 to 1).\n        /// </summary>\n        public Vector3 AmbientLightColor\n        {\n            get { return ambientLightColor; }\n            set\n            {\n                ambientLightColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets the first directional light.\n        /// </summary>\n        public DirectionalLight DirectionalLight0 { get { return light0; } }\n\n        /// <summary>\n        /// Gets the second directional light.\n        /// </summary>\n        public DirectionalLight DirectionalLight1 { get { return light1; } }\n\n        /// <summary>\n        /// Gets the third directional light.\n        /// </summary>\n        public DirectionalLight DirectionalLight2 { get { return light2; } }\n\n        /// <summary>\n        /// Gets or sets the fog enable flag.\n        /// </summary>\n        public bool FogEnabled\n        {\n            get { return fogEnabled; }\n            set\n            {\n                if (fogEnabled != value)\n                {\n                    fogEnabled = value;\n                    dirtyFlags |= EffectDirtyFlags.FogEnable;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog start distance.\n        /// </summary>\n        public float FogStart\n        {\n            get { return fogStart; }\n            set\n            {\n                fogStart = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog end distance.\n        /// </summary>\n        public float FogEnd\n        {\n            get { return fogEnd; }\n            set\n            {\n                fogEnd = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog color.\n        /// </summary>\n        public Vector3 FogColor\n        {\n            get { return fogColorParam.GetValueVector3(); }\n            set { fogColorParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the current texture.\n        /// </summary>\n        public Texture2D Texture\n        {\n            get { return textureParam.GetValueTexture2D(); }\n            set { textureParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the current environment map texture.\n        /// </summary>\n        public TextureCube EnvironmentMap\n        {\n            get { return environmentMapParam.GetValueTextureCube(); }\n            set { environmentMapParam.SetValue(value); }\n        }\n        \n        /// <summary>\n        /// Gets or sets the amount of the environment map RGB that will be blended over \n        /// the base texture. Range 0 to 1, default 1. If set to zero, the RGB channels \n        /// of the environment map will completely ignored (but the environment map alpha \n        /// may still be visible if EnvironmentMapSpecular is greater than zero).\n        /// </summary>\n        public float EnvironmentMapAmount\n        {\n            get { return environmentMapAmountParam.GetValueSingle(); }\n            set { environmentMapAmountParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the amount of the environment map alpha channel that will \n        /// be added to the base texture. Range 0 to 1, default 0. This can be used \n        /// to implement cheap specular lighting, by encoding one or more specular \n        /// highlight patterns into the environment map alpha channel, then setting \n        /// EnvironmentMapSpecular to the desired specular light color.\n        /// </summary>\n        public Vector3 EnvironmentMapSpecular\n        {\n            get { return environmentMapSpecularParam.GetValueVector3(); }\n            set\n            {\n                environmentMapSpecularParam.SetValue(value);\n                \n                bool enabled = (value != Vector3.Zero);\n                \n                if (specularEnabled != enabled)\n                {\n                    specularEnabled = enabled;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n        \n        /// <summary>\n        /// Gets or sets the Fresnel factor used for the environment map blending. \n        /// Higher values make the environment map only visible around the silhouette \n        /// edges of the object, while lower values make it visible everywhere. \n        /// Setting this property to 0 disables Fresnel entirely, making the \n        /// environment map equally visible regardless of view angle. The default is 1.\n        /// Fresnel only affects the environment map RGB (the intensity of which is \n        /// controlled by EnvironmentMapAmount). The alpha contribution (controlled by \n        /// EnvironmentMapSpecular) is not affected by the Fresnel setting.\n        /// </summary>\n        public float FresnelFactor\n        {\n            get { return fresnelFactorParam.GetValueSingle(); }\n            set\n            {\n                fresnelFactorParam.SetValue(value);\n                \n                bool enabled = (value != 0);\n                \n                if (fresnelEnabled != enabled)\n                {\n                    fresnelEnabled = enabled;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// This effect requires lighting, so we explicitly implement\n        /// IEffectLights.LightingEnabled, and do not allow turning it off.\n        /// </summary>\n        bool IEffectLights.LightingEnabled\n        {\n            get { return true; }\n            set { if (!value) throw new NotSupportedException(\"EnvironmentMapEffect does not support setting LightingEnabled to false.\"); }\n        }\n\n        #endregion\n\n        #region Methods\n\n\n        /// <summary>\n        /// Creates a new EnvironmentMapEffect with default parameter settings.\n        /// </summary>\n        public EnvironmentMapEffect(GraphicsDevice device)\n            : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameEnvironmentMapEffect))\n        {\n            CacheEffectParameters(null);\n\n            DirectionalLight0.Enabled = true;\n\n            EnvironmentMapAmount = 1;\n            EnvironmentMapSpecular = Vector3.Zero;\n            FresnelFactor = 1;\n        }\n\n\n        /// <summary>\n        /// Creates a new EnvironmentMapEffect by cloning parameter settings from an existing instance.\n        /// </summary>\n        protected EnvironmentMapEffect(EnvironmentMapEffect cloneSource)\n            : base(cloneSource)\n        {\n            CacheEffectParameters(cloneSource);\n\n            fogEnabled = cloneSource.fogEnabled;\n            fresnelEnabled = cloneSource.fresnelEnabled;\n            specularEnabled = cloneSource.specularEnabled;\n\n            world = cloneSource.world;\n            view = cloneSource.view;\n            projection = cloneSource.projection;\n\n            diffuseColor = cloneSource.diffuseColor;\n            emissiveColor = cloneSource.emissiveColor;\n            ambientLightColor = cloneSource.ambientLightColor;\n\n            alpha = cloneSource.alpha;\n\n            fogStart = cloneSource.fogStart;\n            fogEnd = cloneSource.fogEnd;\n        }\n\n\n        /// <summary>\n        /// Creates a clone of the current EnvironmentMapEffect instance.\n        /// </summary>\n        public override Effect Clone()\n        {\n            return new EnvironmentMapEffect(this);\n        }\n\n\n        /// <summary>\n        /// Sets up the standard key/fill/back lighting rig.\n        /// </summary>\n        public void EnableDefaultLighting()\n        {\n            AmbientLightColor = EffectHelpers.EnableDefaultLighting(light0, light1, light2);\n        }\n\n\n        /// <summary>\n        /// Looks up shortcut references to our effect parameters.\n        /// </summary>\n        void CacheEffectParameters(EnvironmentMapEffect cloneSource)\n        {\n            textureParam                = Parameters[\"Texture\"];\n            environmentMapParam         = Parameters[\"EnvironmentMap\"];\n            environmentMapAmountParam   = Parameters[\"EnvironmentMapAmount\"];\n            environmentMapSpecularParam = Parameters[\"EnvironmentMapSpecular\"];\n            fresnelFactorParam          = Parameters[\"FresnelFactor\"];\n            diffuseColorParam           = Parameters[\"DiffuseColor\"];\n            emissiveColorParam          = Parameters[\"EmissiveColor\"];\n            eyePositionParam            = Parameters[\"EyePosition\"];\n            fogColorParam               = Parameters[\"FogColor\"];\n            fogVectorParam              = Parameters[\"FogVector\"];\n            worldParam                  = Parameters[\"World\"];\n            worldInverseTransposeParam  = Parameters[\"WorldInverseTranspose\"];\n            worldViewProjParam          = Parameters[\"WorldViewProj\"];\n\n            light0 = new DirectionalLight(Parameters[\"DirLight0Direction\"],\n                                          Parameters[\"DirLight0DiffuseColor\"],\n                                          null,\n                                          (cloneSource != null) ? cloneSource.light0 : null);\n\n            light1 = new DirectionalLight(Parameters[\"DirLight1Direction\"],\n                                          Parameters[\"DirLight1DiffuseColor\"],\n                                          null,\n                                          (cloneSource != null) ? cloneSource.light1 : null);\n\n            light2 = new DirectionalLight(Parameters[\"DirLight2Direction\"],\n                                          Parameters[\"DirLight2DiffuseColor\"],\n                                          null,\n                                          (cloneSource != null) ? cloneSource.light2 : null);\n\n            light1.EnabledChanged += Light_EnabledChanged;\n            light2.EnabledChanged += Light_EnabledChanged;\n        }\n\n        private void Light_EnabledChanged(object sender, EventArgs e)\n        {\n            _oneLight = !light1.Enabled && !light2.Enabled;\n            UpdateCurrentTechnique();\n        }\n\n        /// <summary>\n        /// Lazily computes derived parameter values immediately before applying the effect.\n        /// </summary>\n        protected internal override void OnApply()\n        {\n            // Recompute the world+view+projection matrix or fog vector?\n            dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam);\n\n            // Recompute the world inverse transpose and eye position?\n            dirtyFlags = EffectHelpers.SetLightingMatrices(dirtyFlags, ref world, ref view, worldParam, worldInverseTransposeParam, eyePositionParam);\n            \n            // Recompute the diffuse/emissive/alpha material color parameters?\n            if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0)\n            {\n                EffectHelpers.SetMaterialColor(true, alpha, ref diffuseColor, ref emissiveColor, ref ambientLightColor, diffuseColorParam, emissiveColorParam);\n\n                dirtyFlags &= ~EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        private void UpdateCurrentTechnique()\n        {\n            int shaderIndex = 0;\n\n            if (fogEnabled)\n                shaderIndex += 1;\n\n            if (fresnelEnabled)\n                shaderIndex += 2;\n\n            if (specularEnabled)\n                shaderIndex += 4;\n\n            if (_oneLight) // oneLight\n                shaderIndex += 8;\n\n            CurrentTechnique = Techniques[shaderIndex];\n        }\n\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/IEffectBones.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Interface for Effects that support bone transforms.\n    /// </summary>\n    public interface IEffectBones\n    {\n        /// <summary>\n        /// Sets an array of skinning bone transform matrices.\n        /// </summary>\n        void SetBoneTransforms(Matrix[] boneTransforms);\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/IEffectFog.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// The common effect fog rendering parameters.\n    /// </summary>\n    public interface IEffectFog\n    {\n        /// <summary>\n        /// The floating point fog color.\n        /// </summary>\n        Vector3 FogColor { get; set; }\n\n        /// <summary>\n        /// Used to toggle the rendering of fog.\n        /// </summary>\n        bool FogEnabled { get; set; }\n\n        /// <summary>\n        /// The world space distance from the camera at which fogging is fully applied.\n        /// </summary>\n        /// <remarks>\n        /// FogEnd should be greater than FogStart.  If FogEnd and FogStart \n        /// are the same value everything is fully fogged.\n        /// </remarks>\n        float FogEnd { get; set; }\n\n        /// <summary>\n        /// The world space distance from the camera at which fogging begins.\n        /// </summary>\n        /// <remarks>\n        /// FogStart should be less than FogEnd.  If FogEnd and FogStart are the\n        /// same value everything is fully fogged.\n        /// </remarks>\n        float FogStart { get; set; }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/IEffectLights.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// The common effect light rendering parameters.\n    /// </summary>\n    public interface IEffectLights\n    {\n        /// <summary>\n        /// The floating point ambient light color.\n        /// </summary>\n        Vector3 AmbientLightColor { get; set; }\n\n        /// <summary>\n        /// Returns the first directional light.\n        /// </summary>\n        DirectionalLight DirectionalLight0 { get; }\n\n        /// <summary>\n        /// Returns the second directional light.\n        /// </summary>\n        DirectionalLight DirectionalLight1 { get; }\n\n        /// <summary>\n        /// Returns the third directional light.\n        /// </summary>\n        DirectionalLight DirectionalLight2 { get; }\n\n        /// <summary>\n        /// Toggles the rendering of lighting.\n        /// </summary>\n        bool LightingEnabled { get; set; }\n\n        /// <summary>\n        /// Initializes the lights to the standard key/fill/back lighting rig.\n        /// </summary>\n        void EnableDefaultLighting();\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/IEffectMatrices.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public interface IEffectMatrices\n    {\n        Matrix Projection { get; set; }\n        Matrix View { get; set; }\n        Matrix World { get; set; }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/KNIFXHeader.cs",
    "content": "// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n        internal struct KNIFXHeader\n        {\n            /// <summary>\n            /// The KNI Effect file format header identifier (\"KNIF\").\n            /// </summary>\n            public static readonly int KNIFXSignature = (BitConverter.IsLittleEndian) ? 0x46494E4B : 0x4B4E4946;\n\n            /// <summary>\n            /// The current KNI Effect file format versions\n            /// </summary>\n            public const int CurrentKNIFXVersion = 11;\n\n            public readonly int Signature;\n            public readonly int Version;\n            public readonly int HeaderSize;\n\n            public KNIFXHeader(byte[] effectCode, int index)\n            {\n                int offset = 0;\n                Signature = BitConverter.ToInt32(effectCode, index + offset); offset += 4;\n                Version = (int)BitConverter.ToInt16(effectCode, index + offset); offset += 2;\n                short reserved0 = BitConverter.ToInt16(effectCode, index + offset); offset += 2;\n\n                HeaderSize = offset;\n            }\n        }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/KNIFXReader11.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public partial class Effect\n    {\n        private class KNIFXReader11 : BinaryReader\n        {\n            private readonly GraphicsDevice _graphicsDevice;\n            private bool _integersAsFloats;\n\n            public KNIFXReader11(Stream stream, GraphicsDevice graphicsDevice) : base(stream)\n            {\n                this._graphicsDevice = graphicsDevice;\n            }\n\n            private int ReadPackedInt()\n            {\n                unchecked\n                {\n                    // read zigzag encoded int\n                    int zzint = Read7BitEncodedInt();\n                    return ((int)((uint)zzint >> 1) ^ (-(zzint & 1)));\n                }\n            }\n\n            internal Effect ReadEffect()\n            {\n                Effect effect = new Effect(_graphicsDevice);\n\n                _integersAsFloats = ReadBoolean();\n                effect.ConstantBuffers = ReadConstantBuffers();\n                effect._shaders = ReadShaders();\n                effect.Parameters = ReadParameters();\n                effect.Techniques = ReadTechniques(effect);\n\n                effect.CurrentTechnique = effect.Techniques[0];\n\n                return effect;\n            }\n\n            private ConstantBuffer[] ReadConstantBuffers()\n            {\n                int buffersCount = ReadPackedInt();\n                ConstantBuffer[] constantBuffers = new ConstantBuffer[buffersCount];\n                for (int c = 0; c < buffersCount; c++)\n                    constantBuffers[c] = ReadConstantBuffer();\n                return constantBuffers;\n            }\n\n            ConstantBuffer ReadConstantBuffer()\n            {\n                string name = ReadString();\n\n                // Create the backing system memory buffer.\n                int sizeInBytes = ReadPackedInt();\n\n                // Read the parameter index values.\n                int[] parameters = new int[ReadPackedInt()];\n                int[] offsets = new int[parameters.Length];\n                for (int i = 0; i < parameters.Length; i++)\n                {\n                    parameters[i] = ReadPackedInt();\n                    offsets[i]    = (int)ReadUInt16();\n                }\n\n                ConstantBuffer buffer = new ConstantBuffer(_graphicsDevice,\n                                                name,\n                                                parameters,\n                                                offsets,\n                                                sizeInBytes,\n                                                _integersAsFloats);\n                return buffer;\n            }\n\n            private Shader[] ReadShaders()\n            {\n                int shadersCount = ReadPackedInt();\n                Shader[] shaders = new Shader[shadersCount];\n                for (int s = 0; s < shadersCount; s++)\n                    shaders[s] = ReadShader();\n                return shaders;\n            }\n\n            private Shader ReadShader()\n            {\n                ShaderStage shaderStage = (ShaderStage)ReadByte();\n                ShaderVersion shaderVersion = ReadShaderVersion();\n\n                int shaderLength = ReadInt32();\n                byte[] shaderBytecode = ReadBytes(shaderLength);\n\n                int samplerCount = ReadPackedInt();\n                SamplerInfo[] samplers = new SamplerInfo[samplerCount];\n                for (int s = 0; s < samplerCount; s++)\n                {\n                    samplers[s].type = (SamplerType)ReadByte();\n                    samplers[s].textureSlot = ReadByte();\n                    samplers[s].samplerSlot = ReadByte();\n\n                    if (samplers[s].samplerSlot == 255)\n                        samplers[s].samplerSlot = samplers[s].textureSlot;\n\n                    if (ReadBoolean())\n                        samplers[s].state = ReadSamplerState();\n\n                    samplers[s].GLsamplerName = ReadString();\n                    samplers[s].textureParameter = ReadPackedInt();\n                }\n\n                int cbufferCount = ReadPackedInt();\n                int[] cBuffers = new int[cbufferCount];\n                for (int c = 0; c < cbufferCount; c++)\n                    cBuffers[c] = ReadPackedInt();\n\n                int attributeCount = ReadPackedInt();\n                VertexAttribute[] attributes = new VertexAttribute[attributeCount];\n                for (int a = 0; a < attributeCount; a++)\n                {\n                    attributes[a].name = ReadString();\n                    attributes[a].usage = (VertexElementUsage)ReadByte();\n                    attributes[a].index = ReadPackedInt();\n                    attributes[a].location = ReadInt16();\n                }\n\n                switch (shaderStage)\n                {\n                    case ShaderStage.Vertex:\n                        return new VertexShader(_graphicsDevice,\n                            shaderVersion,\n                            shaderBytecode,\n                            samplers, cBuffers, attributes);\n                    case ShaderStage.Pixel:\n                        return new PixelShader(_graphicsDevice,\n                            shaderVersion,\n                            shaderBytecode,\n                            samplers, cBuffers, attributes);\n\n                    default:\n                        throw new InvalidOperationException(\"stage\");\n                }\n            }\n\n            private ShaderVersion ReadShaderVersion()\n            {\n                ushort major = checked((ushort)ReadPackedInt());\n                ushort minor = checked((ushort)ReadPackedInt());\n                return new ShaderVersion(major, minor);\n            }\n\n            private SamplerState ReadSamplerState()\n            {\n                SamplerState state = new SamplerState();\n                state.AddressU = (TextureAddressMode)ReadByte();\n                state.AddressV = (TextureAddressMode)ReadByte();\n                state.AddressW = (TextureAddressMode)ReadByte();\n                state.BorderColor = new Color(\n                    ReadByte(),\n                    ReadByte(),\n                    ReadByte(),\n                    ReadByte());\n                state.Filter = (TextureFilter)ReadByte();\n                state.MaxAnisotropy = ReadPackedInt();\n                state.MaxMipLevel = ReadPackedInt();\n                state.MipMapLevelOfDetailBias = ReadSingle();\n                return state;\n            }\n\n            private EffectParameterCollection ReadParameters()\n            {\n                int count = ReadPackedInt();\n\n                if (count == 0)\n                    return EffectParameterCollection.Empty;\n\n                EffectParameter[] parameters = new EffectParameter[count];\n                for (int i = 0; i < count; i++)\n                    parameters[i] = ReadParameter();\n\n                return new EffectParameterCollection(parameters);\n            }\n\n            private EffectParameter ReadParameter()\n            {\n                EffectParameterClass class_ = (EffectParameterClass)ReadByte();\n                EffectParameterType type = (EffectParameterType)ReadByte();\n                string name = ReadString();\n                string semantic = ReadString();\n                EffectAnnotationCollection annotations = ReadAnnotations();\n                int rowCount     = (int)ReadByte();\n                int columnCount  = (int)ReadByte();\n                int columnCountActual = (int)ReadByte();\n\n                EffectParameterCollection elements = ReadParameters();\n                EffectParameterCollection structMembers = ReadParameters();\n\n                object data = null;\n                if (elements.Count == 0 && structMembers.Count == 0)\n                {\n                    switch (type)\n                    {\n                        case EffectParameterType.Bool:\n                            if (_integersAsFloats)\n                            {\n                                // Booleans are stored in a float type.\n                                float[] buffer = new float[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadInt32();\n                                data = buffer;\n                            }\n                            else\n                            {\n                                // Booleans are stored in an integer type.\n                                int[] buffer = new int[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadInt32();\n                                data = buffer;\n                            }\n                            break;\n\n                        case EffectParameterType.Int32:\n                            if (_integersAsFloats)\n                            {\n                                // Integers are stored in a float type.\n                                float[] buffer = new float[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadInt32();\n                                data = buffer;\n                            }\n                            else\n                            {\n                                int[] buffer = new int[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadInt32();\n                                data = buffer;\n                            }\n                            break;\n\n                        case EffectParameterType.Single:\n                            {\n                                float[] buffer = new float[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadSingle();\n                                data = buffer;\n                            }\n                            break;\n\n                        case EffectParameterType.String:\n                            throw new NotImplementedException();\n\n                        default:\n                            {\n                                Debug.WriteLine(\"Parameter {0} of type {1} is ignored\", name, type.ToString());\n                                // throw new NotImplementedException();\n                            }\n                            break;\n                    }\n                }\n\n                return new EffectParameter(\n                    class_, type, name, rowCount, columnCount, columnCountActual, semantic,\n                    annotations, elements, structMembers, data, _integersAsFloats);\n            }\n\n            private EffectTechniqueCollection ReadTechniques(Effect effect)\n            {\n                int techniqueCount = ReadPackedInt();\n\n                EffectTechnique[] techniques = new EffectTechnique[techniqueCount];\n                for (int t = 0; t < techniqueCount; t++)\n                {\n                    string name = ReadString();\n                    EffectAnnotationCollection annotations = ReadAnnotations();\n                    EffectPassCollection passes = ReadPasses(effect);\n                    techniques[t] = new EffectTechnique(effect, name, passes, annotations);\n                }\n\n                return new EffectTechniqueCollection(techniques);\n            }\n\n            private EffectPassCollection ReadPasses(Effect effect)\n            {\n                int passesCount = ReadPackedInt();\n                EffectPass[] passes = new EffectPass[passesCount];\n                for (int i = 0; i < passesCount; i++)\n                    ReadEffectPass(effect, passes, i);\n                return new EffectPassCollection(passes);\n            }\n\n            private void ReadEffectPass(Effect effect, EffectPass[] passes, int i)\n            {\n                string name = ReadString();\n                EffectAnnotationCollection annotations = ReadAnnotations();\n\n                // Get the vertex and pixel shader.\n                VertexShader vertexShader = null;\n                PixelShader pixelShader = null;\n                //ComputeShader computeShader = null;\n                {\n                    int vertexShaderIndex  = ReadPackedInt();\n                    int pixelShaderIndex   = ReadPackedInt();\n                    int computeShaderIndex = ReadPackedInt();\n                    if (vertexShaderIndex >= 0)\n                        vertexShader = (VertexShader)effect._shaders[vertexShaderIndex];\n                    if (pixelShaderIndex >= 0)\n                        pixelShader = (PixelShader)effect._shaders[pixelShaderIndex];\n                    if (computeShaderIndex >= 0)\n                        throw new NotImplementedException(\"Compute shaders are not implemented in this version of KNI.\");\n                        //computeShader = (ComputeShader)effect._shaders[computeShaderIndex];\n                }\n\n                BlendState blend = ReadBoolean() ? ReadBlendState() : null;\n                DepthStencilState depth = ReadBoolean() ? ReadDepthStencilState() : null;\n                RasterizerState rasterizer = ReadBoolean() ? ReadRasterizerState() : null;\n\n                passes[i] = new EffectPass(effect, name, vertexShader, pixelShader, blend, depth, rasterizer, annotations);\n            }\n\n            private BlendState ReadBlendState()\n            {\n                return new BlendState\n                {\n                    AlphaBlendFunction = (BlendFunction)ReadByte(),\n                    AlphaDestinationBlend = (Blend)ReadByte(),\n                    AlphaSourceBlend = (Blend)ReadByte(),\n                    BlendFactor = new Color(ReadByte(), ReadByte(), ReadByte(), ReadByte()),\n                    ColorBlendFunction = (BlendFunction)ReadByte(),\n                    ColorDestinationBlend = (Blend)ReadByte(),\n                    ColorSourceBlend = (Blend)ReadByte(),\n                    ColorWriteChannels = (ColorWriteChannels)ReadByte(),\n                    ColorWriteChannels1 = (ColorWriteChannels)ReadByte(),\n                    ColorWriteChannels2 = (ColorWriteChannels)ReadByte(),\n                    ColorWriteChannels3 = (ColorWriteChannels)ReadByte(),\n                    MultiSampleMask = ReadInt32(),\n                };\n            }\n\n            private DepthStencilState ReadDepthStencilState()\n            {\n                return new DepthStencilState\n                {\n                    CounterClockwiseStencilDepthBufferFail = (StencilOperation)ReadByte(),\n                    CounterClockwiseStencilFail = (StencilOperation)ReadByte(),\n                    CounterClockwiseStencilFunction = (CompareFunction)ReadByte(),\n                    CounterClockwiseStencilPass = (StencilOperation)ReadByte(),\n                    DepthBufferEnable = ReadBoolean(),\n                    DepthBufferFunction = (CompareFunction)ReadByte(),\n                    DepthBufferWriteEnable = ReadBoolean(),\n                    ReferenceStencil = ReadInt32(),\n                    StencilDepthBufferFail = (StencilOperation)ReadByte(),\n                    StencilEnable = ReadBoolean(),\n                    StencilFail = (StencilOperation)ReadByte(),\n                    StencilFunction = (CompareFunction)ReadByte(),\n                    StencilMask = ReadInt32(),\n                    StencilPass = (StencilOperation)ReadByte(),\n                    StencilWriteMask = ReadInt32(),\n                    TwoSidedStencilMode = ReadBoolean(),\n                };\n            }\n\n            private RasterizerState ReadRasterizerState()\n            {\n                return new RasterizerState\n                {\n                    CullMode = (CullMode)ReadByte(),\n                    DepthBias = ReadSingle(),\n                    FillMode = (FillMode)ReadByte(),\n                    MultiSampleAntiAlias = ReadBoolean(),\n                    ScissorTestEnable = ReadBoolean(),\n                    SlopeScaleDepthBias = ReadSingle(),\n                };\n            }\n\n            private EffectAnnotationCollection ReadAnnotations()\n            {\n                int count = ReadPackedInt();\n                if (count == 0)\n                    return EffectAnnotationCollection.Empty;\n\n                EffectAnnotation[] annotations = new EffectAnnotation[count];\n\n                // TODO: Annotations are not implemented!\n\n                return new EffectAnnotationCollection(annotations);\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/MGFXHeader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n        internal struct MGFXHeader\n        {\n            /// <summary>\n            /// The MonoGame Effect file format header identifier (\"MGFX\"). \n            /// </summary>\n            public static readonly int MGFXSignature = (BitConverter.IsLittleEndian) ? 0x5846474D: 0x4D474658;\n\n            /// <summary>\n            /// The current MonoGame Effect file format versions\n            /// used to detect old packaged content.\n            /// </summary>\n            /// <remarks>\n            /// We should avoid supporting old versions for very long if at all \n            /// as users should be rebuilding content when packaging their game.\n            /// </remarks>\n            public const int MGFXVersion = 10;\n\n            public readonly int Signature;\n            public readonly int Version;\n            public readonly ShaderProfileType Profile;\n            public readonly int EffectKey;\n            public readonly int HeaderSize;\n\n            public MGFXHeader(byte[] effectCode, int index)\n            {\n                int offset = 0;\n                Signature = BitConverter.ToInt32(effectCode, index + offset); offset += 4;\n                Version = (int)effectCode[index + offset]; offset += 1;\n                Profile = (ShaderProfileType)effectCode[index + offset]; offset += 1;\n                EffectKey = BitConverter.ToInt32(effectCode, index + offset); offset += 4;\n                HeaderSize = offset;\n            }\n        }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/MGFXReader10.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public partial class Effect\n    {\n        private class MGFXReader10 : BinaryReader\n        {\n            private readonly GraphicsDevice _graphicsDevice;\n            private bool _integersAsFloats;\n            ShaderProfileType _shaderProfile;\n\n            public MGFXReader10(Stream stream, GraphicsDevice graphicsDevice, ShaderProfileType shaderProfile) : base(stream)\n            {\n                this._graphicsDevice = graphicsDevice;\n                this._shaderProfile = shaderProfile;\n            }\n\n            private int ReadPackedInt()\n            {\n                unchecked\n                {\n                    // read zigzag encoded int\n                    int zzint = Read7BitEncodedInt();\n                    return ((int)((uint)zzint >> 1) ^ (-(zzint & 1)));\n                }\n            }\n\n            internal Effect ReadEffect()\n            {\n                Effect effect = new Effect(_graphicsDevice);\n\n                _integersAsFloats = (_shaderProfile == ShaderProfileType.OpenGL_Mojo);\n                effect.ConstantBuffers = ReadConstantBuffers();\n                effect._shaders = ReadShaders();\n                effect.Parameters = ReadParameters();\n                effect.Techniques = ReadTechniques(effect);\n\n                effect.CurrentTechnique = effect.Techniques[0];\n\n                // Check file tail to ensure we parsed the content correctly.\n                int tail = ReadInt32();\n                if (tail != MGFXHeader.MGFXSignature)\n                    throw new ArgumentException(\"The MGFX effect code was not parsed correctly.\", \"effectCode\");\n\n                return effect;\n            }\n\n            private ConstantBuffer[] ReadConstantBuffers()\n            {\n                int buffersCount = ReadInt32();\n                ConstantBuffer[] constantBuffers = new ConstantBuffer[buffersCount];\n                for (int c = 0; c < buffersCount; c++)\n                    constantBuffers[c] = ReadConstantBuffer();\n                return constantBuffers;\n            }\n\n            ConstantBuffer ReadConstantBuffer()\n            {\n                string name = ReadString();\n\n                // Create the backing system memory buffer.\n                int sizeInBytes = (int)ReadInt16();\n\n                // Read the parameter index values.\n                int[] parameters = new int[ReadInt32()];\n                int[] offsets = new int[parameters.Length];\n                for (int i = 0; i < parameters.Length; i++)\n                {\n                    parameters[i] = ReadInt32();\n                    offsets[i]    = (int)ReadUInt16();\n                }\n\n                ConstantBuffer buffer = new ConstantBuffer(_graphicsDevice,\n                                                name,\n                                                parameters,\n                                                offsets,\n                                                sizeInBytes,\n                                                _integersAsFloats);\n                return buffer;\n            }\n\n            private Shader[] ReadShaders()\n            {\n                int shadersCount = ReadInt32();\n                Shader[] shaders = new Shader[shadersCount];\n                for (int s = 0; s < shadersCount; s++)\n                    shaders[s] = ReadShader();\n                return shaders;\n            }\n\n            private Shader ReadShader()\n            {\n                ShaderStage shaderStage = (ShaderStage)ReadByte();\n                ShaderVersion shaderVersion = default;\n\n                int shaderLength = ReadInt32();\n                byte[] shaderBytecode = ReadBytes(shaderLength);\n\n                int samplerCount = (int)ReadByte();\n                SamplerInfo[] samplers = new SamplerInfo[samplerCount];\n                for (int s = 0; s < samplerCount; s++)\n                {\n                    samplers[s].type = (SamplerType)ReadByte();\n                    samplers[s].textureSlot = ReadByte();\n                    samplers[s].samplerSlot = ReadByte();\n\n                    if (samplers[s].samplerSlot == 255)\n                        samplers[s].samplerSlot = samplers[s].textureSlot;\n\n                    if (ReadBoolean())\n                        samplers[s].state = ReadSamplerState();\n\n                    samplers[s].GLsamplerName = ReadString();\n                    samplers[s].textureParameter = ReadByte();\n                    if (samplers[s].textureParameter == 255)\n                        samplers[s].textureParameter = -1;\n                }\n\n                int cbufferCount = (int)ReadByte();\n                int[] cBuffers = new int[cbufferCount];\n                for (int c = 0; c < cbufferCount; c++)\n                    cBuffers[c] = ReadByte();\n\n                int attributeCount = (int)ReadByte();\n                VertexAttribute[] attributes = new VertexAttribute[attributeCount];\n                for (int a = 0; a < attributeCount; a++)\n                {\n                    attributes[a].name = ReadString();\n                    attributes[a].usage = (VertexElementUsage)ReadByte();\n                    attributes[a].index = ReadByte();\n                    attributes[a].location = ReadInt16();\n                }\n\n                switch (shaderStage)\n                {\n                    case ShaderStage.Vertex:\n                        return new VertexShader(_graphicsDevice,\n                            shaderVersion,\n                            shaderBytecode,\n                            samplers, cBuffers, attributes);\n                    case ShaderStage.Pixel:\n                        return new PixelShader(_graphicsDevice,\n                            shaderVersion,\n                            shaderBytecode,\n                            samplers, cBuffers, attributes);\n\n                    default:\n                        throw new InvalidOperationException(\"stage\");\n                }\n            }\n\n            private SamplerState ReadSamplerState()\n            {\n                SamplerState state = new SamplerState();\n                state.AddressU = (TextureAddressMode)ReadByte();\n                state.AddressV = (TextureAddressMode)ReadByte();\n                state.AddressW = (TextureAddressMode)ReadByte();\n                state.BorderColor = new Color(\n                    ReadByte(),\n                    ReadByte(),\n                    ReadByte(),\n                    ReadByte());\n                state.Filter = (TextureFilter)ReadByte();\n                state.MaxAnisotropy = ReadInt32();\n                state.MaxMipLevel = ReadInt32();\n                state.MipMapLevelOfDetailBias = ReadSingle();\n                return state;\n            }\n\n            private EffectParameterCollection ReadParameters()\n            {\n                int count = ReadInt32();\n\n                if (count == 0)\n                    return EffectParameterCollection.Empty;\n\n                EffectParameter[] parameters = new EffectParameter[count];\n                for (int i = 0; i < count; i++)\n                    parameters[i] = ReadParameter();\n\n                return new EffectParameterCollection(parameters);\n            }\n\n            private EffectParameter ReadParameter()\n            {\n                EffectParameterClass class_ = (EffectParameterClass)ReadByte();\n                EffectParameterType type = (EffectParameterType)ReadByte();\n                string name = ReadString();\n                string semantic = ReadString();\n                EffectAnnotationCollection annotations = ReadAnnotations();\n                int rowCount    = (int)ReadByte();\n                int columnCount = (int)ReadByte();\n\n                EffectParameterCollection elements = ReadParameters();\n                EffectParameterCollection structMembers = ReadParameters();\n\n                object data = null;\n                if (elements.Count == 0 && structMembers.Count == 0)\n                {\n                    switch (type)\n                    {\n                        case EffectParameterType.Bool:\n                            if (_integersAsFloats)\n                            {\n                                // Booleans are stored in a float type.\n                                float[] buffer = new float[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadInt32();\n                                data = buffer;\n                            }\n                            else\n                            {\n                                // Booleans are stored in an integer type.\n                                int[] buffer = new int[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadInt32();\n                                data = buffer;\n                            }\n                            break;\n\n                        case EffectParameterType.Int32:\n                            if (_integersAsFloats)\n                            {\n                                // Integers are stored in a float type.\n                                float[] buffer = new float[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadInt32();\n                                data = buffer;\n                            }\n                            else\n                            {\n                                int[] buffer = new int[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadInt32();\n                                data = buffer;\n                            }\n                            break;\n\n                        case EffectParameterType.Single:\n                            {\n                                float[] buffer = new float[rowCount * columnCount];\n                                for (int j = 0; j < buffer.Length; j++)\n                                    buffer[j] = ReadSingle();\n                                data = buffer;\n                            }\n                            break;\n\n                        case EffectParameterType.String:\n                            throw new NotImplementedException();\n\n                        default:\n                            {\n                                Debug.WriteLine(\"Parameter {0} of type {1} is ignored\", name, type.ToString());\n                                // throw new NotImplementedException();\n                            }\n                            break;\n                    }\n                }\n\n                return new EffectParameter(\n                    class_, type, name, rowCount, columnCount, columnCount, semantic,\n                    annotations, elements, structMembers, data, _integersAsFloats);\n            }\n\n            private EffectTechniqueCollection ReadTechniques(Effect effect)\n            {\n                int techniqueCount = ReadInt32();\n\n                EffectTechnique[] techniques = new EffectTechnique[techniqueCount];\n                for (int t = 0; t < techniqueCount; t++)\n                {\n                    string name = ReadString();\n                    EffectAnnotationCollection annotations = ReadAnnotations();\n                    EffectPassCollection passes = ReadPasses(effect);\n                    techniques[t] = new EffectTechnique(effect, name, passes, annotations);\n                }\n\n                return new EffectTechniqueCollection(techniques);\n            }\n\n            private EffectPassCollection ReadPasses(Effect effect)\n            {\n                int passesCount = ReadInt32();\n                EffectPass[] passes = new EffectPass[passesCount];\n                for (int i = 0; i < passesCount; i++)\n                    ReadEffectPass(effect, passes, i);\n                return new EffectPassCollection(passes);\n            }\n\n            private void ReadEffectPass(Effect effect, EffectPass[] passes, int i)\n            {\n                string name = ReadString();\n                EffectAnnotationCollection annotations = ReadAnnotations();\n\n                // Get the vertex and pixel shader.\n                VertexShader vertexShader = null;\n                PixelShader pixelShader = null;\n                {\n                    int vertexShaderIndex = ReadInt32();\n                    int pixelShaderIndex  = ReadInt32();\n                    if (vertexShaderIndex >= 0)\n                        vertexShader = (VertexShader)effect._shaders[vertexShaderIndex];\n                    if (pixelShaderIndex >= 0)\n                        pixelShader = (PixelShader)effect._shaders[pixelShaderIndex];\n                }\n\n                BlendState blend = ReadBoolean() ? ReadBlendState() : null;\n                DepthStencilState depth = ReadBoolean() ? ReadDepthStencilState() : null;\n                RasterizerState rasterizer = ReadBoolean() ? ReadRasterizerState() : null;\n\n                passes[i] = new EffectPass(effect, name, vertexShader, pixelShader, blend, depth, rasterizer, annotations);\n            }\n\n            private BlendState ReadBlendState()\n            {\n                return new BlendState\n                {\n                    AlphaBlendFunction = (BlendFunction)ReadByte(),\n                    AlphaDestinationBlend = (Blend)ReadByte(),\n                    AlphaSourceBlend = (Blend)ReadByte(),\n                    BlendFactor = new Color(ReadByte(), ReadByte(), ReadByte(), ReadByte()),\n                    ColorBlendFunction = (BlendFunction)ReadByte(),\n                    ColorDestinationBlend = (Blend)ReadByte(),\n                    ColorSourceBlend = (Blend)ReadByte(),\n                    ColorWriteChannels = (ColorWriteChannels)ReadByte(),\n                    ColorWriteChannels1 = (ColorWriteChannels)ReadByte(),\n                    ColorWriteChannels2 = (ColorWriteChannels)ReadByte(),\n                    ColorWriteChannels3 = (ColorWriteChannels)ReadByte(),\n                    MultiSampleMask = ReadInt32(),\n                };\n            }\n\n            private DepthStencilState ReadDepthStencilState()\n            {\n                return new DepthStencilState\n                {\n                    CounterClockwiseStencilDepthBufferFail = (StencilOperation)ReadByte(),\n                    CounterClockwiseStencilFail = (StencilOperation)ReadByte(),\n                    CounterClockwiseStencilFunction = (CompareFunction)ReadByte(),\n                    CounterClockwiseStencilPass = (StencilOperation)ReadByte(),\n                    DepthBufferEnable = ReadBoolean(),\n                    DepthBufferFunction = (CompareFunction)ReadByte(),\n                    DepthBufferWriteEnable = ReadBoolean(),\n                    ReferenceStencil = ReadInt32(),\n                    StencilDepthBufferFail = (StencilOperation)ReadByte(),\n                    StencilEnable = ReadBoolean(),\n                    StencilFail = (StencilOperation)ReadByte(),\n                    StencilFunction = (CompareFunction)ReadByte(),\n                    StencilMask = ReadInt32(),\n                    StencilPass = (StencilOperation)ReadByte(),\n                    StencilWriteMask = ReadInt32(),\n                    TwoSidedStencilMode = ReadBoolean(),\n                };\n            }\n\n            private RasterizerState ReadRasterizerState()\n            {\n                return new RasterizerState\n                {\n                    CullMode = (CullMode)ReadByte(),\n                    DepthBias = ReadSingle(),\n                    FillMode = (FillMode)ReadByte(),\n                    MultiSampleAntiAlias = ReadBoolean(),\n                    ScissorTestEnable = ReadBoolean(),\n                    SlopeScaleDepthBias = ReadSingle(),\n                };\n            }\n\n            private EffectAnnotationCollection ReadAnnotations()\n            {\n                int count = (int)ReadInt32();\n                if (count == 0)\n                    return EffectAnnotationCollection.Empty;\n\n                EffectAnnotation[] annotations = new EffectAnnotation[count];\n\n                // TODO: Annotations are not implemented!\n\n                return new EffectAnnotationCollection(annotations);\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/SkinnedEffect.cs",
    "content": "#region File Description\n//-----------------------------------------------------------------------------\n// SkinnedEffect.cs\n//\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//-----------------------------------------------------------------------------\n#endregion\n\n#region Using Statements\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Graphics;\n#endregion\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Built-in effect for rendering skinned character models.\n    /// </summary>\n    public class SkinnedEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog, IEffectBones\n    {\n        public const int MaxBones = 72;\n        \n        #region Effect Parameters\n\n        EffectParameter textureParam;\n        EffectParameter diffuseColorParam;\n        EffectParameter emissiveColorParam;\n        EffectParameter specularColorParam;\n        EffectParameter specularPowerParam;\n        EffectParameter eyePositionParam;\n        EffectParameter fogColorParam;\n        EffectParameter fogVectorParam;\n        EffectParameter worldParam;\n        EffectParameter worldInverseTransposeParam;\n        EffectParameter worldViewProjParam;\n        EffectParameter bonesParam;\n\n        #endregion\n\n        #region Fields\n\n        bool preferPerPixelLighting;\n        bool _oneLight;\n        bool fogEnabled;\n\n        Matrix world = Matrix.Identity;\n        Matrix view = Matrix.Identity;\n        Matrix projection = Matrix.Identity;\n\n        Matrix worldView;\n\n        Vector3 diffuseColor = Vector3.One;\n        Vector3 emissiveColor = Vector3.Zero;\n        Vector3 ambientLightColor = Vector3.Zero;\n\n        float alpha = 1;\n\n        DirectionalLight light0;\n        DirectionalLight light1;\n        DirectionalLight light2;\n\n        float fogStart = 0;\n        float fogEnd = 1;\n\n        int weightsPerVertex = 4;\n\n        EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All;\n\n        #endregion\n\n        #region Public Properties\n\n        /// <summary>\n        /// Gets or sets the world matrix.\n        /// </summary>\n        public Matrix World\n        {\n            get { return world; }\n            set\n            {\n                world = value;\n                dirtyFlags |= EffectDirtyFlags.World | EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the view matrix.\n        /// </summary>\n        public Matrix View\n        {\n            get { return view; }\n            set\n            {\n                view = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.EyePosition | EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the projection matrix.\n        /// </summary>\n        public Matrix Projection\n        {\n            get { return projection; }\n            set\n            {\n                projection = value;\n                dirtyFlags |= EffectDirtyFlags.WorldViewProj;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material diffuse color (range 0 to 1).\n        /// </summary>\n        public Vector3 DiffuseColor\n        {\n            get { return diffuseColor; }\n            set\n            {\n                diffuseColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material emissive color (range 0 to 1).\n        /// </summary>\n        public Vector3 EmissiveColor\n        {\n            get { return emissiveColor; }\n            set\n            {\n                emissiveColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the material specular color (range 0 to 1).\n        /// </summary>\n        public Vector3 SpecularColor\n        {\n            get { return specularColorParam.GetValueVector3(); }\n            set { specularColorParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the material specular power.\n        /// </summary>\n        public float SpecularPower\n        {\n            get { return specularPowerParam.GetValueSingle(); }\n            set { specularPowerParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the material alpha.\n        /// </summary>\n        public float Alpha\n        {\n            get { return alpha; }\n            set\n            {\n                alpha = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the per-pixel lighting prefer flag.\n        /// </summary>\n        public bool PreferPerPixelLighting\n        {\n            get { return preferPerPixelLighting; }\n            set\n            {\n                if (preferPerPixelLighting != value)\n                {\n                    preferPerPixelLighting = value;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the ambient light color (range 0 to 1).\n        /// </summary>\n        public Vector3 AmbientLightColor\n        {\n            get { return ambientLightColor; }\n            set\n            {\n                ambientLightColor = value;\n                dirtyFlags |= EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        /// <summary>\n        /// Gets the first directional light.\n        /// </summary>\n        public DirectionalLight DirectionalLight0 { get { return light0; } }\n\n        /// <summary>\n        /// Gets the second directional light.\n        /// </summary>\n        public DirectionalLight DirectionalLight1 { get { return light1; } }\n\n        /// <summary>\n        /// Gets the third directional light.\n        /// </summary>\n        public DirectionalLight DirectionalLight2 { get { return light2; } }\n\n        /// <summary>\n        /// Gets or sets the fog enable flag.\n        /// </summary>\n        public bool FogEnabled\n        {\n            get { return fogEnabled; }\n            set\n            {\n                if (fogEnabled != value)\n                {\n                    fogEnabled = value;\n                    dirtyFlags |= EffectDirtyFlags.FogEnable;\n                    UpdateCurrentTechnique();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog start distance.\n        /// </summary>\n        public float FogStart\n        {\n            get { return fogStart; }\n            set\n            {\n                fogStart = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog end distance.\n        /// </summary>\n        public float FogEnd\n        {\n            get { return fogEnd; }\n            set\n            {\n                fogEnd = value;\n                dirtyFlags |= EffectDirtyFlags.Fog;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the fog color.\n        /// </summary>\n        public Vector3 FogColor\n        {\n            get { return fogColorParam.GetValueVector3(); }\n            set { fogColorParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the current texture.\n        /// </summary>\n        public Texture2D Texture\n        {\n            get { return textureParam.GetValueTexture2D(); }\n            set { textureParam.SetValue(value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the number of skinning weights to evaluate for each vertex (1, 2, or 4).\n        /// </summary>\n        public int WeightsPerVertex\n        {\n            get { return weightsPerVertex; }\n            set\n            {\n                if ((value != 1) &&\n                    (value != 2) &&\n                    (value != 4))\n                {\n                    throw new ArgumentOutOfRangeException(\"value\");\n                }\n\n                weightsPerVertex = value;\n                UpdateCurrentTechnique();\n            }\n        }\n\n        /// <summary>\n        /// Sets an array of skinning bone transform matrices.\n        /// </summary>\n        public void SetBoneTransforms(Matrix[] boneTransforms)\n        {\n            if ((boneTransforms == null) || (boneTransforms.Length == 0))\n                throw new ArgumentNullException(\"boneTransforms\");\n\n            if (boneTransforms.Length > MaxBones)\n                throw new ArgumentException();\n\n            bonesParam.SetValue(boneTransforms);\n        }\n\n        /// <summary>\n        /// Gets a copy of the current skinning bone transform matrices.\n        /// </summary>\n        public Matrix[] GetBoneTransforms(int count)\n        {\n            if (count <= 0 || count > MaxBones)\n                throw new ArgumentOutOfRangeException(\"count\");\n\n            Matrix[] bones = bonesParam.GetValueMatrixArray(count);\n            \n            // Convert matrices from 43 to 44 format.\n            for (int i = 0; i < bones.Length; i++)\n            {\n                bones[i].M44 = 1;\n            }\n            \n            return bones;\n        }\n\n        /// <summary>\n        /// This effect requires lighting, so we explicitly implement\n        /// IEffectLights.LightingEnabled, and do not allow turning it off.\n        /// </summary>\n        bool IEffectLights.LightingEnabled\n        {\n            get { return true; }\n            set { if (!value) throw new NotSupportedException(\"SkinnedEffect does not support setting LightingEnabled to false.\"); }\n        }\n\n        #endregion\n\n        #region Methods\n\n\n        /// <summary>\n        /// Creates a new SkinnedEffect with default parameter settings.\n        /// </summary>\n        public SkinnedEffect(GraphicsDevice device)\n            : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameSkinnedEffect))\n        {\n            CacheEffectParameters(null);\n\n            DirectionalLight0.Enabled = true;\n\n            SpecularColor = Vector3.One;\n            SpecularPower = 16;\n            \n            Matrix[] identityBones = new Matrix[MaxBones];\n            \n            for (int i = 0; i < MaxBones; i++)\n            {\n                identityBones[i] = Matrix.Identity;\n            }\n            \n            SetBoneTransforms(identityBones);\n        }\n\n\n        /// <summary>\n        /// Creates a new SkinnedEffect by cloning parameter settings from an existing instance.\n        /// </summary>\n        protected SkinnedEffect(SkinnedEffect cloneSource)\n            : base(cloneSource)\n        {\n            CacheEffectParameters(cloneSource);\n\n            preferPerPixelLighting = cloneSource.preferPerPixelLighting;\n            fogEnabled = cloneSource.fogEnabled;\n\n            world = cloneSource.world;\n            view = cloneSource.view;\n            projection = cloneSource.projection;\n\n            diffuseColor = cloneSource.diffuseColor;\n            emissiveColor = cloneSource.emissiveColor;\n            ambientLightColor = cloneSource.ambientLightColor;\n\n            alpha = cloneSource.alpha;\n\n            fogStart = cloneSource.fogStart;\n            fogEnd = cloneSource.fogEnd;\n            \n            weightsPerVertex = cloneSource.weightsPerVertex;\n        }\n\n\n        /// <summary>\n        /// Creates a clone of the current SkinnedEffect instance.\n        /// </summary>\n        public override Effect Clone()\n        {\n            return new SkinnedEffect(this);\n        }\n\n\n        /// <summary>\n        /// Sets up the standard key/fill/back lighting rig.\n        /// </summary>\n        public void EnableDefaultLighting()\n        {\n            AmbientLightColor = EffectHelpers.EnableDefaultLighting(light0, light1, light2);\n        }\n\n\n        /// <summary>\n        /// Looks up shortcut references to our effect parameters.\n        /// </summary>\n        void CacheEffectParameters(SkinnedEffect cloneSource)\n        {\n            textureParam                = Parameters[\"Texture\"];\n            diffuseColorParam           = Parameters[\"DiffuseColor\"];\n            emissiveColorParam          = Parameters[\"EmissiveColor\"];\n            specularColorParam          = Parameters[\"SpecularColor\"];\n            specularPowerParam          = Parameters[\"SpecularPower\"];\n            eyePositionParam            = Parameters[\"EyePosition\"];\n            fogColorParam               = Parameters[\"FogColor\"];\n            fogVectorParam              = Parameters[\"FogVector\"];\n            worldParam                  = Parameters[\"World\"];\n            worldInverseTransposeParam  = Parameters[\"WorldInverseTranspose\"];\n            worldViewProjParam          = Parameters[\"WorldViewProj\"];\n            bonesParam                  = Parameters[\"Bones\"];\n\n            light0 = new DirectionalLight(Parameters[\"DirLight0Direction\"],\n                                          Parameters[\"DirLight0DiffuseColor\"],\n                                          Parameters[\"DirLight0SpecularColor\"],\n                                          (cloneSource != null) ? cloneSource.light0 : null);\n\n            light1 = new DirectionalLight(Parameters[\"DirLight1Direction\"],\n                                          Parameters[\"DirLight1DiffuseColor\"],\n                                          Parameters[\"DirLight1SpecularColor\"],\n                                          (cloneSource != null) ? cloneSource.light1 : null);\n\n            light2 = new DirectionalLight(Parameters[\"DirLight2Direction\"],\n                                          Parameters[\"DirLight2DiffuseColor\"],\n                                          Parameters[\"DirLight2SpecularColor\"],\n                                          (cloneSource != null) ? cloneSource.light2 : null);\n\n            light1.EnabledChanged += Light_EnabledChanged;\n            light2.EnabledChanged += Light_EnabledChanged;\n        }\n\n        private void Light_EnabledChanged(object sender, EventArgs e)\n        {\n            _oneLight = !light1.Enabled && !light2.Enabled;\n            UpdateCurrentTechnique();\n        }\n\n        /// <summary>\n        /// Lazily computes derived parameter values immediately before applying the effect.\n        /// </summary>\n        protected internal override void OnApply()\n        {\n            // Recompute the world+view+projection matrix or fog vector?\n            dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam);\n\n            // Recompute the world inverse transpose and eye position?\n            dirtyFlags = EffectHelpers.SetLightingMatrices(dirtyFlags, ref world, ref view, worldParam, worldInverseTransposeParam, eyePositionParam);\n\n            // Recompute the diffuse/emissive/alpha material color parameters?\n            if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0)\n            {\n                EffectHelpers.SetMaterialColor(true, alpha, ref diffuseColor, ref emissiveColor, ref ambientLightColor, diffuseColorParam, emissiveColorParam);\n\n                dirtyFlags &= ~EffectDirtyFlags.MaterialColor;\n            }\n        }\n\n        private void UpdateCurrentTechnique()\n        {\n            int shaderIndex = 0;\n\n            if (fogEnabled)\n                shaderIndex += 1;\n\n            if (weightsPerVertex == 2)\n                shaderIndex += 2;\n            else if (weightsPerVertex == 4)\n                shaderIndex += 4;\n\n            if (preferPerPixelLighting)\n                shaderIndex += 12;\n            else if (_oneLight) // oneLight\n                shaderIndex += 6;\n\n            CurrentTechnique = Techniques[shaderIndex];\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Effect/SpriteEffect.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Microsoft XNA Community Game Platform\n// Copyright (C) Microsoft Corporation. All rights reserved.\n\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// The default effect used by SpriteBatch.\n    /// </summary>\n    public class SpriteEffect : Effect\n    {\n        private EffectParameter _matrixParam;\n        private Viewport _lastViewport;\n        private Matrix _projection;\n\n        /// <summary>\n        /// Creates a new SpriteEffect.\n        /// </summary>\n        public SpriteEffect(GraphicsDevice device)\n            : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameSpriteEffect))\n        {\n            CacheEffectParameters();\n\n            // initialize static values of _projection.\n            _projection = Matrix.CreateTranslation(-1f, 1f, 0);\n        }\n\n        /// <summary>\n        /// An optional matrix used to transform the sprite geometry. Uses <see cref=\"Matrix.Identity\"/> if null.\n        /// </summary>\n        public Matrix? TransformMatrix { get; set; }\n\n        /// <summary>\n        /// Creates a new SpriteEffect by cloning parameter settings from an existing instance.\n        /// </summary>\n        protected SpriteEffect(SpriteEffect cloneSource)\n            : base(cloneSource)\n        {\n            CacheEffectParameters();\n\n            // initialize static values of _projection.\n            _projection = Matrix.CreateTranslation(-1f, 1f, 0);\n        }\n\n\n        /// <summary>\n        /// Creates a clone of the current SpriteEffect instance.\n        /// </summary>\n        public override Effect Clone()\n        {\n            return new SpriteEffect(this);\n        }\n\n\n        /// <summary>\n        /// Looks up shortcut references to our effect parameters.\n        /// </summary>\n        void CacheEffectParameters()\n        {\n            _matrixParam = Parameters[\"MatrixTransform\"];\n        }\n\n        /// <summary>\n        /// Lazily computes derived parameter values immediately before applying the effect.\n        /// </summary>\n        protected internal override void OnApply()\n        {\n            Viewport vp = GraphicsDevice.Viewport;\n            if ((vp.Width != _lastViewport.Width) || (vp.Height != _lastViewport.Height))\n            {\n                // Normal 3D cameras look into the -z direction (z = 1 is in front of z = 0). The\n                // sprite batch layer depth is the opposite (z = 0 is in front of z = 1).\n                // --> We get the correct matrix with near plane 0 and far plane -1.\n                //Matrix.CreateOrthographicOffCenter(0, vp.Width, vp.Height, 0, 0, -1, out _projection);\n                // static values of _projection were set in the constuctor as Matrix.CreateTranslation(-1f, 1f, 0). \n                // we calculate only M11,M22 and M41,M42\n\n                if (GraphicsDevice.UseHalfPixelOffset)\n                {\n                    float texelW = (1f / vp.Width);\n                    float texelH = (1f / vp.Height);\n                    _projection.M11 =  (2f * texelW);\n                    _projection.M22 = -(2f * texelH);\n                    _projection.M41 = -(1f + texelW);\n                    _projection.M42 =  (1f + texelH);\n                }\n                else\n                {\n                    _projection.M11 =  (2f / vp.Width);\n                    _projection.M22 = -(2f / vp.Height);\n                }\n\n                _lastViewport = vp;\n            }\n\n            if (TransformMatrix.HasValue)\n            {\n                // OPT: Matrix transform = TransformMatrix.Value * _projection;\n                Matrix transform = TransformMatrix.Value; // copy M13,M14,M23,M24,M33,M34,M43,M44.\n                // calculate M11,M12,M21,M22,M31,M32,M41,M42.\n                if (GraphicsDevice.UseHalfPixelOffset)\n                {\n                    transform.M11 = ((transform.M11 * _projection.M11) + (transform.M14 * _projection.M41));\n                    transform.M12 = ((transform.M12 * _projection.M22) + (transform.M14 * _projection.M42));\n                    transform.M21 = ((transform.M21 * _projection.M11) + (transform.M24 * _projection.M41));\n                    transform.M22 = ((transform.M22 * _projection.M22) + (transform.M24 * _projection.M42));\n                    transform.M31 = ((transform.M31 * _projection.M11) + (transform.M34 * _projection.M41));\n                    transform.M32 = ((transform.M32 * _projection.M22) + (transform.M34 * _projection.M42));\n                    transform.M41 = ((transform.M41 * _projection.M11) + (transform.M44 * _projection.M41));\n                    transform.M42 = ((transform.M42 * _projection.M22) + (transform.M44 * _projection.M42));\n                }\n                else\n                {\n                    transform.M11 = ((transform.M11 * _projection.M11) - transform.M14);\n                    transform.M12 = ((transform.M12 * _projection.M22) + transform.M14);\n                    transform.M21 = ((transform.M21 * _projection.M11) - transform.M24);\n                    transform.M22 = ((transform.M22 * _projection.M22) + transform.M24);\n                    transform.M31 = ((transform.M31 * _projection.M11) - transform.M34);\n                    transform.M32 = ((transform.M32 * _projection.M22) + transform.M34);\n                    transform.M41 = ((transform.M41 * _projection.M11) - transform.M44);\n                    transform.M42 = ((transform.M42 * _projection.M22) + transform.M44);\n                }\n                _matrixParam.SetValue(transform);\n            }\n            else\n                _matrixParam.SetValue(_projection);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsAdapter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public sealed class GraphicsAdapter\n        : IPlatformGraphicsAdapter\n    {\n        private GraphicsAdapterStrategy _strategy;\n\n        GraphicsAdapterStrategy IPlatformGraphicsAdapter.Strategy { get { return _strategy; } }\n\n        public static ReadOnlyCollection<GraphicsAdapter> Adapters\n        {\n            get { return GraphicsAdaptersProviderStrategy.Current.Platform_Adapters; }\n        }\n\n        public static GraphicsAdapter DefaultAdapter\n        {\n            get { return GraphicsAdaptersProviderStrategy.Current.Platform_DefaultAdapter; }\n        }\n\n        /// <summary>\n        /// Used to request creation of the reference graphics device, \n        /// or the default hardware accelerated device (when set to false).\n        /// </summary>\n        /// <remarks>\n        /// This only works on DirectX platforms where a reference graphics\n        /// device is available and must be defined before the graphics device\n        /// is created. It defaults to false.\n        /// </remarks>\n        public static bool UseReferenceDevice\n        {\n            get { return GraphicsAdaptersProviderStrategy.Current.Platform_UseReferenceDevice; }\n            set { GraphicsAdaptersProviderStrategy.Current.Platform_UseReferenceDevice = value; }\n        }\n\n        public string DeviceName\n        {\n            get { return _strategy.Platform_DeviceName; }\n        }\n\n        public string Description\n        {\n            get { return _strategy.Platform_Description; }\n        }\n\n        public int DeviceId\n        {\n            get { return _strategy.Platform_DeviceId; }\n        }\n\n        public int Revision\n        {\n            get { return _strategy.Platform_Revision; }\n        }\n\n        public int VendorId\n        {\n            get { return _strategy.Platform_VendorId; }\n        }\n\n        public int SubSystemId\n        {\n            get { return _strategy.Platform_SubSystemId; }\n        }\n        public IntPtr MonitorHandle\n        {\n            get { return _strategy.Platform_MonitorHandle; }\n        }\n\n        public bool IsDefaultAdapter\n        {\n            get { return _strategy.Platform_IsDefaultAdapter; }\n        }\n\n        public DisplayModeCollection SupportedDisplayModes\n        {\n            get { return _strategy.Platform_SupportedDisplayModes; }\n        }\n\n        public DisplayMode CurrentDisplayMode\n        {\n            get { return _strategy.Platform_CurrentDisplayMode; }\n        }\n\n        /// <summary>\n        /// Returns true if the <see cref=\"GraphicsAdapter.CurrentDisplayMode\"/> is widescreen.\n        /// </summary>\n        /// <remarks>\n        /// Common widescreen modes include 16:9, 16:10 and 2:1.\n        /// </remarks>\n        public bool IsWideScreen\n        {\n            get { return _strategy.Platform_IsWideScreen; }\n        }\n\n        public GraphicsBackend Backend\n        {\n            get { return _strategy.Backend; }\n        }\n\n        internal GraphicsAdapter(GraphicsAdapterStrategy strategy)\n        {\n            _strategy = strategy;\n        }\n\n        public bool QueryBackBufferFormat(\n             GraphicsProfile graphicsProfile,\n             SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n             out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            return _strategy.Platform_QueryBackBufferFormat(\n                graphicsProfile,\n                format, depthFormat, multiSampleCount,\n                out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount\n            );\n        }\n\n        /// <summary>\n        /// Queries for support of the requested render target format on the adaptor.\n        /// </summary>\n        /// <param name=\"graphicsProfile\">The graphics profile.</param>\n        /// <param name=\"format\">The requested surface format.</param>\n        /// <param name=\"depthFormat\">The requested depth stencil format.</param>\n        /// <param name=\"multiSampleCount\">The requested multisample count.</param>\n        /// <param name=\"selectedFormat\">Set to the best format supported by the adaptor for the requested surface format.</param>\n        /// <param name=\"selectedDepthFormat\">Set to the best format supported by the adaptor for the requested depth stencil format.</param>\n        /// <param name=\"selectedMultiSampleCount\">Set to the best count supported by the adaptor for the requested multisample count.</param>\n        /// <returns>True if the requested format is supported by the adaptor. False if one or more of the values was changed.</returns>\n        public bool QueryRenderTargetFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount)\n        {\n            return _strategy.Platform_QueryRenderTargetFormat(\n                graphicsProfile,\n                format, depthFormat, multiSampleCount,\n                out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount\n            );\n        }\n\n        public bool IsProfileSupported(GraphicsProfile graphicsProfile)\n        {\n            return _strategy.Platform_IsProfileSupported(graphicsProfile);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsAdapterStrategy.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformGraphicsAdapter\n    {\n        GraphicsAdapterStrategy Strategy { get; }\n    }\n\n    public abstract class GraphicsAdapterStrategy\n    {\n        public virtual string Platform_DeviceName { get; set; }\n        public virtual string Platform_Description { get; set; }\n        public virtual int Platform_DeviceId { get; set; }\n        public virtual int Platform_Revision { get; set; }\n        public virtual int Platform_VendorId { get; set; }\n        public virtual int Platform_SubSystemId { get; set; }\n        public virtual IntPtr Platform_MonitorHandle { get; set; }\n        public virtual bool Platform_IsDefaultAdapter { get; set; }\n\n        public abstract DisplayModeCollection Platform_SupportedDisplayModes { get; }\n        public abstract DisplayMode Platform_CurrentDisplayMode { get; }\n        public abstract bool Platform_IsWideScreen { get; }\n        public abstract GraphicsBackend Backend { get; }\n\n        public abstract bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile);\n\n        public abstract bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend);\n        public abstract bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile);\n\n        public abstract bool Platform_QueryBackBufferFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount);\n\n        public abstract bool Platform_QueryRenderTargetFormat(\n            GraphicsProfile graphicsProfile,\n            SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount,\n            out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount);\n\n        public T ToConcrete<T>() where T : GraphicsAdapterStrategy\n        {\n            return (T)this;\n        }\n\n        protected DisplayMode CreateDisplayMode(int width, int height, SurfaceFormat format)\n        {\n            return new DisplayMode(width, height, format);\n        }\n\n        protected DisplayModeCollection CreateDisplayModeCollection(List<DisplayMode> modes)\n        {\n            return new DisplayModeCollection(modes);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsAdaptersProviderStrategy.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.ObjectModel;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class GraphicsAdaptersProviderStrategy\n    {\n        private static GraphicsAdaptersProviderStrategy _current;\n\n        internal static GraphicsAdaptersProviderStrategy Current\n        {\n            get\n            {\n                lock (typeof(GraphicsAdaptersProviderStrategy))\n                {\n                    if (_current == null)\n                        _current = GraphicsFactory.Current.CreateGraphicsAdaptersProviderStrategy();\n\n                    return _current;\n                }\n            }\n        }\n\n        public abstract ReadOnlyCollection<GraphicsAdapter> Platform_Adapters { get; }\n        public abstract GraphicsAdapter Platform_DefaultAdapter { get; }\n        public virtual bool Platform_UseReferenceDevice { get; set; }\n\n\n        public T ToConcrete<T>() where T : GraphicsAdaptersProviderStrategy\n        {\n            return (T)this;\n        }\n\n        protected GraphicsAdapter CreateGraphicsAdapter(GraphicsAdapterStrategy adapterStrategy)\n        {\n            return new GraphicsAdapter(adapterStrategy);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsBackend.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public enum GraphicsBackend\n    {\n        OpenGL    = 0x0011,\n        GLES      = 0x0012,\n        WebGL     = 0x0014,\n\n        DirectX11 = 0x0021,\n        DirectX12 = 0x0022,\n\n        WebGPU    = 0x0041,\n        Vulkan    = 0x0081,\n        Metal     = 0x0101,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsCapabilities.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    /// <summary>\n    /// Provides information about the capabilities of the\n    /// current graphics device. A very useful thread for investigating GL extenion names\n    /// http://stackoverflow.com/questions/3881197/opengl-es-2-0-extensions-on-android-devices\n    /// </summary>\n    public abstract class GraphicsCapabilities\n    {\n\n        /// <summary>\n        /// Whether the device supports anisotropic texture filtering\n        /// </summary>\n        public bool SupportsTextureFilterAnisotropic { get; protected set; }\n\n        public bool SupportsDepth24 { get; protected set; }\n\n        public bool SupportsPackedDepthStencil { get; protected set; }\n\n        public bool SupportsDepthNonLinear { get; protected set; }\n\n        public bool SupportsBgra5551 { get; protected set; }\n        public bool SupportsAbgr5551 { get; protected set; }\n        public bool SupportsBgra4444 { get; protected set; }\n        public bool SupportsAbgr4444 { get; protected set; }\n\n        /// <summary>\n        /// Gets the support for DXT1\n        /// </summary>\n        public bool SupportsDxt1 { get; protected set; }\n\n        /// <summary>\n        /// Gets the support for S3TC (DXT1, DXT3, DXT5)\n        /// </summary>\n        public bool SupportsS3tc { get; protected set; }\n\n        /// <summary>\n        /// Gets the support for PVRTC\n        /// </summary>\n        public bool SupportsPvrtc { get; protected set; }\n\n        /// <summary>\n        /// Gets the support for ETC1\n        /// </summary>\n        public bool SupportsEtc1 { get; protected set; }\n\n        /// <summary>\n        /// Gets the support for ETC2\n        /// </summary>\n        public bool SupportsEtc2 { get; protected set; }\n\n        /// <summary>\n        /// Gets the support for ATITC\n        /// </summary>\n        public bool SupportsAtitc { get; protected set; }\n\n        public bool SupportsTextureMaxLevel { get; protected set; }\n\n        /// <summary>\n        /// True, if sRGB is supported. On Direct3D platforms, this is always <code>true</code>.\n        /// On OpenGL platforms, it is <code>true</code> if both framebuffer sRGB\n        /// and texture sRGB are supported.\n        /// </summary>\n        public bool SupportsSRgb { get; protected set; }\n\n        public bool SupportsTextureArrays { get; protected set; }\n\n        public bool SupportsDepthClamp { get; protected set; }\n\n        protected int _maxTextureSize;\n        protected int _maxTextureSlots;\n        protected int _maxVertexTextureSlots;\n\n        internal int MaxTextureSize { get { return _maxTextureSize; } }\n        internal int MaxTextureSlots { get { return _maxTextureSlots; } }\n        internal int MaxVertexTextureSlots { get { return _maxVertexTextureSlots; } }\n\n        protected int _maxVertexBufferSlots;\n\n        public int MaxVertexBufferSlots { get { return _maxVertexBufferSlots; } }\n\n        /// <summary>\n        /// True, if the underlying platform supports floating point textures. \n        /// For Direct3D platforms this is always <code>true</code>.\n        /// For OpenGL Desktop platforms it is always <code>true</code>.\n        /// For OpenGL Mobile platforms it requires `GL_EXT_color_buffer_float`.\n        /// If the requested format is not supported an <code>NotSupportedException</code>\n        /// will be thrown.\n        /// </summary>\n        public bool SupportsFloatTextures { get; protected set; }\n\n        /// <summary>\n        /// True, if the underlying platform supports half floating point textures. \n        /// For Direct3D platforms this is always <code>true</code>.\n        /// For OpenGL Desktop platforms it is always <code>true</code>.\n        /// For OpenGL Mobile platforms it requires `GL_EXT_color_buffer_half_float`.\n        /// If the requested format is not supported an <code>NotSupportedException</code>\n        /// will be thrown.\n        /// </summary>\n        public bool SupportsHalfFloatTextures { get; protected set; }\n\n        public bool SupportsNormalized { get; protected set; }\n\n        /// <summary>\n        /// Gets the max texture anisotropy. This value typically lies\n        /// between 0 and 16, where 0 means anisotropic filtering is not\n        /// supported.\n        /// </summary>\n        public int MaxTextureAnisotropy { get; protected set; }\n\n        public bool SupportsInstancing { get; protected set; }\n\n        public bool SupportsBaseIndexInstancing { get; protected set; }\n\n        public bool SupportsSeparateBlendStates { get; protected set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsContext.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public sealed class GraphicsContext : IDisposable\n        , IPlatformGraphicsContext\n    {\n        private GraphicsContextStrategy _strategy;\n        private GraphicsDeviceStrategy _deviceStrategy;\n        private bool _isDisposed = false;\n\n        private readonly RenderTargetBinding[] _singleRenderTargetBinding = new RenderTargetBinding[1];\n\n        GraphicsContextStrategy IPlatformGraphicsContext.Strategy { get { return _strategy; } }\n        GraphicsDeviceStrategy IPlatformGraphicsContext.DeviceStrategy { get { return _deviceStrategy; } }\n\n\n        internal GraphicsContext(GraphicsDevice device) : this(((IPlatformGraphicsDevice)device).Strategy)\n        {\n        }\n\n        internal GraphicsContext(GraphicsDeviceStrategy deviceStrategy)\n        {\n            _deviceStrategy = deviceStrategy;\n            _strategy = deviceStrategy.CreateGraphicsContextStrategy(this);\n        }\n\n\n        /// <summary>\n        /// The rendering information for debugging and profiling.\n        /// The metrics are reset every frame after draw within <see cref=\"GraphicsDevice.Present\"/>. \n        /// </summary>\n        public GraphicsMetrics Metrics\n        {\n            get { return _strategy._graphicsMetrics; }\n            set { _strategy._graphicsMetrics = value; }\n        }\n\n        /// <summary>\n        /// Get or set the color a <see cref=\"RenderTarget2D\"/> is cleared to when it is set.\n        /// </summary>\n        public Color DiscardColor\n        {\n            get { return _strategy.DiscardColor; }\n            set { _strategy.DiscardColor = value; }\n        }\n\n        /// <summary>\n        /// Access debugging APIs for the graphics subsystem.\n        /// </summary>\n        public GraphicsDebug GraphicsDebug\n        {\n            get { return _strategy.GraphicsDebug; }\n            set { _strategy.GraphicsDebug = value; }\n        }\n\n        public Rectangle ScissorRectangle\n        {\n            get { return _strategy.ScissorRectangle; }\n            set { _strategy.ScissorRectangle = value; }\n        }\n\n        public Viewport Viewport\n        {\n            get { return _strategy.Viewport; }\n            set { _strategy.Viewport = value; }\n        }\n\n        public BlendState BlendState\n        {\n            get { return _strategy.BlendState; }\n            set { _strategy.BlendState = value; }\n        }\n\n        public Color BlendFactor\n        {\n            get { return _strategy.BlendFactor; }\n            set { _strategy.BlendFactor = value; }\n        }\n\n        public DepthStencilState DepthStencilState\n        {\n            get { return _strategy.DepthStencilState; }\n            set { _strategy.DepthStencilState = value; }\n        }\n\n        public RasterizerState RasterizerState\n        {\n            get { return _strategy.RasterizerState; }\n            set { _strategy.RasterizerState = value; }\n        }\n\n        public SamplerStateCollection SamplerStates\n        {\n            get { return _strategy.SamplerStates; }\n        }\n\n        public SamplerStateCollection VertexSamplerStates\n        {\n            get { return _strategy.VertexSamplerStates; }\n        }\n\n        public TextureCollection Textures\n        {\n            get { return _strategy.Textures; }\n        }\n\n        public TextureCollection VertexTextures\n        {\n            get { return _strategy.VertexTextures; }\n        }\n\n        public IndexBuffer Indices\n        {\n            get { return _strategy.Indices; }\n            set { _strategy.Indices = value; }\n        }\n\n        public void Clear(Color color)\n        {\n            ClearOptions options = ClearOptions.Target\n                                 | ClearOptions.DepthBuffer\n                                 | ClearOptions.Stencil;\n            _strategy.Clear(options, color.ToVector4(), _strategy.Viewport.MaxDepth, 0);\n        }\n\n        public void Clear(ClearOptions options, Color color, float depth, int stencil)\n        {\n            _strategy.Clear(options, color.ToVector4(), depth, stencil);\n        }\n\n        public void Clear(ClearOptions options, Vector4 color, float depth, int stencil)\n        {\n            _strategy.Clear(options, color, depth, stencil);\n        }\n\n        public void SetVertexBuffer(VertexBuffer vertexBuffer)\n        {\n            _strategy.SetVertexBuffer(vertexBuffer);\n        }\n\n        public void SetVertexBuffer(VertexBuffer vertexBuffer, int vertexOffset)\n        {\n            _strategy.SetVertexBuffer(vertexBuffer, vertexOffset);\n        }\n\n        public void SetVertexBuffers(VertexBufferBinding[] vertexBuffers)\n        {\n            _strategy.SetVertexBuffers(vertexBuffers);\n        }\n\n        internal VertexShader VertexShader\n        {\n            get { return _strategy.VertexShader; }\n            set { _strategy.VertexShader = value; }\n        }\n\n        internal PixelShader PixelShader\n        {\n            get { return _strategy.PixelShader; }\n            set { _strategy.PixelShader = value; }\n        }\n\n        /// <summary>\n        /// Retrieves the currently bound render targets as an array.\n        /// </summary>\n        /// <returns>An array of <see cref=\"RenderTargetBinding\"/> representing the current render targets.</returns>\n        internal RenderTargetBinding[] GetRenderTargets()\n        {\n            return _strategy.GetRenderTargets();\n        }\n\n        /// <summary>\n        /// Copies the currently bound render targets into the provided array.\n        /// </summary>\n        /// <param name=\"bindings\">The array to store the current render targets.\n        /// GraphicsProfile.Reach supports a maximum of 1 simultaneous rendertargets.\n        /// GraphicsProfile.HiDef supports a maximum of 4 simultaneous rendertargets.\n        /// GraphicsProfile.FL10_0 supports a maximum of 8 simultaneous rendertargets.\n        /// </param>\n        /// <returns>The number of render targets copied.</returns>\n        /// <remarks>This is a MonoGame extension</remarks>\n        public int GetRenderTargets(RenderTargetBinding[] bindings)\n        {\n            return _strategy.GetRenderTargets(bindings);\n        }\n\n        public void SetRenderTarget(RenderTarget2D renderTarget)\n        {\n            if (renderTarget == null)\n            {\n                SetRenderTargets(null);\n            }\n            else\n            {\n                _singleRenderTargetBinding[0] = new RenderTargetBinding(renderTarget);\n                SetRenderTargets(_singleRenderTargetBinding);\n            }\n        }\n\n        public void SetRenderTarget(RenderTargetCube renderTarget, CubeMapFace cubeMapFace)\n        {\n            if (renderTarget == null)\n            {\n                SetRenderTargets(null);\n            }\n            else\n            {\n                _singleRenderTargetBinding[0] = new RenderTargetBinding(renderTarget, cubeMapFace);\n                SetRenderTargets(_singleRenderTargetBinding);\n            }\n        }\n\n        /// <remarks>Only implemented for DirectX </remarks>\n        public void SetRenderTarget(RenderTarget2D renderTarget, int arraySlice)\n        {\n            if (!_strategy.Capabilities.SupportsTextureArrays)\n                throw new InvalidOperationException(\"Texture arrays are not supported on this graphics device\");\n\n            if (renderTarget == null)\n            {\n                SetRenderTargets(null);\n            }\n            else\n            {\n                _singleRenderTargetBinding[0] = new RenderTargetBinding(renderTarget, arraySlice);\n                SetRenderTargets(_singleRenderTargetBinding);\n            }\n        }\n\n        /// <remarks>Only implemented for DirectX </remarks>\n        public void SetRenderTarget(RenderTarget3D renderTarget, int arraySlice)\n        {\n            if (renderTarget == null)\n            {\n                SetRenderTargets(null);\n            }\n            else\n            {\n                _singleRenderTargetBinding[0] = new RenderTargetBinding(renderTarget, arraySlice);\n                SetRenderTargets(_singleRenderTargetBinding);\n            }\n        }\n\n        public void SetRenderTargets(params RenderTargetBinding[] renderTargets)\n        {\n            // Avoid having to check for both null and zero length array.\n            int renderTargetCount = 0;\n            if (renderTargets != null)\n            {\n                renderTargetCount = renderTargets.Length;\n                if (renderTargetCount == 0)\n                    renderTargets = null;\n            }\n\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && renderTargetCount > 1)\n                throw new NotSupportedException(\"Reach profile supports a maximum of 1 simultaneous rendertargets\");\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && renderTargetCount > 4)\n                throw new NotSupportedException(\"HiDef profile supports a maximum of 4 simultaneous rendertargets\");\n            if (renderTargetCount > 8)\n                throw new NotSupportedException(\"Current profile supports a maximum of 8 simultaneous rendertargets\");\n\n            // Try to early out if the current and new bindings are equal.\n            if (_strategy.RenderTargetCount == renderTargetCount)\n            {\n                bool isEqual = true;\n                for (int i = 0; i < _strategy.RenderTargetCount; i++)\n                {\n                    if (_strategy.CurrentRenderTargetBindings[i].RenderTarget != renderTargets[i].RenderTarget ||\n                        _strategy.CurrentRenderTargetBindings[i].ArraySlice != renderTargets[i].ArraySlice)\n                    {\n                        isEqual = false;\n                        break;\n                    }\n                }\n\n                if (isEqual)\n                    return;\n            }\n\n            _strategy.ApplyRenderTargets(renderTargets);\n        }\n\n        /// <summary>\n        /// Draw geometry by indexing into the vertex buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">A hint of the lowest vertex indexed relative to baseVertex.</param>\n        /// <param name=\"minVertexIndex\">A hint of the maximum vertex indexed.</param>\n        /// <param name=\"numVertices\">This is unused and remains here only for XNA API compatibility.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to render from the index buffer.</param>\n        public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)\n        {\n            if (_strategy._vertexBuffers.Count == 0)\n                throw new InvalidOperationException(\"Vertex buffer must be set before calling DrawIndexedPrimitives.\");\n\n            if (_strategy.Indices == null)\n                throw new InvalidOperationException(\"Index buffer must be set before calling DrawIndexedPrimitives.\");\n\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535)\n                throw new NotSupportedException(\"Reach profile supports a maximum of 65535 primitives per draw call.\");\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575)\n                throw new NotSupportedException(\"HiDef profile supports a maximum of 1048575 primitives per draw call.\");\n\n            if (primitiveCount <= 0)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (_strategy.VertexShader == null)\n                throw new InvalidOperationException(\"Vertex shader must be set before calling DrawIndexedPrimitives.\");\n            if (_strategy.PixelShader == null)\n                throw new InvalidOperationException(\"Pixel shader must be set before calling DrawIndexedPrimitives.\");\n\n            _strategy.DrawIndexedPrimitives(primitiveType, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount);\n        }\n\n        /// <summary>\n        /// Draw geometry by indexing into the vertex buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to render from the index buffer.</param>\n        public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount)\n        {\n            if (_strategy._vertexBuffers.Count == 0)\n                throw new InvalidOperationException(\"Vertex buffer must be set before calling DrawIndexedPrimitives.\");\n\n            if (_strategy.Indices == null)\n                throw new InvalidOperationException(\"Index buffer must be set before calling DrawIndexedPrimitives.\");\n\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535)\n                throw new NotSupportedException(\"Reach profile supports a maximum of 65535 primitives per draw call.\");\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575)\n                throw new NotSupportedException(\"HiDef profile supports a maximum of 1048575 primitives per draw call.\");\n\n            if (primitiveCount <= 0)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (_strategy.VertexShader == null)\n                throw new InvalidOperationException(\"Vertex shader must be set before calling DrawIndexedPrimitives.\");\n            if (_strategy.PixelShader == null)\n                throw new InvalidOperationException(\"Pixel shader must be set before calling DrawIndexedPrimitives.\");\n\n\n            _strategy.DrawIndexedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type from the data in an array of vertices without indexing.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex that should be rendered.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <remarks>The <see cref=\"VertexDeclaration\"/> will be found by getting <see cref=\"IVertexType.VertexDeclaration\"/>\n        /// from an instance of <typeparamref name=\"T\"/> and cached for subsequent calls.</remarks>\n        public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount) where T : struct, IVertexType\n        {\n            VertexDeclaration vertexDeclaration = VertexDeclarationCache<T>.VertexDeclaration;\n            DrawUserPrimitives<T>(primitiveType, vertexData, vertexOffset, primitiveCount, vertexDeclaration);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type from the data in the given array of vertices without indexing.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex that should be rendered.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"vertexDeclaration\">The layout of the vertices.</param>\n        public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct\n        {\n            if (vertexData == null)\n                throw new ArgumentNullException(\"vertexData\");\n\n            if (vertexData.Length == 0)\n                throw new ArgumentOutOfRangeException(\"vertexData\");\n\n            if (vertexOffset < 0 || vertexOffset >= vertexData.Length)\n                throw new ArgumentOutOfRangeException(\"vertexOffset\");\n\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535)\n                throw new NotSupportedException(\"Reach profile supports a maximum of 65535 primitives per draw call.\");\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575)\n                throw new NotSupportedException(\"HiDef profile supports a maximum of 1048575 primitives per draw call.\");\n\n            if (primitiveCount <= 0)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            int vertexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n\n            if (vertexOffset + vertexCount > vertexData.Length)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (vertexDeclaration == null)\n                throw new ArgumentNullException(\"vertexDeclaration\");\n\n            if (_strategy.VertexShader == null)\n                throw new InvalidOperationException(\"Vertex shader must be set before calling DrawUserPrimitives.\");\n            if (_strategy.PixelShader == null)\n                throw new InvalidOperationException(\"Pixel shader must be set before calling DrawUserPrimitives.\");\n\n\n            _strategy.DrawUserPrimitives<T>(primitiveType, vertexData, vertexOffset, primitiveCount, vertexDeclaration, vertexCount);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type from the currently bound vertexbuffers without indexing.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives to draw.</param>\n        /// <param name=\"vertexStart\">Index of the vertex to start at.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        public void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount)\n        {\n            if (_strategy._vertexBuffers.Count == 0)\n                throw new InvalidOperationException(\"Vertex buffer must be set before calling DrawPrimitives.\");\n\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535)\n                throw new NotSupportedException(\"Reach profile supports a maximum of 65535 primitives per draw call.\");\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575)\n                throw new NotSupportedException(\"HiDef profile supports a maximum of 1048575 primitives per draw call.\");\n\n            if (primitiveCount <= 0)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (_strategy.VertexShader == null)\n                throw new InvalidOperationException(\"Vertex shader must be set before calling DrawPrimitives.\");\n            if (_strategy.PixelShader == null)\n                throw new InvalidOperationException(\"Pixel shader must be set before calling DrawPrimitives.\");\n\n            int vertexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount);\n\n\n            _strategy.DrawPrimitives(primitiveType, vertexStart, primitiveCount, vertexCount);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex to draw.</param>\n        /// <param name=\"indexOffset\">The index in the array of indices of the first index to use</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"numVertices\">The number of vertices to draw.</param>\n        /// <param name=\"indexData\">The index data.</param>\n        /// <remarks>The <see cref=\"VertexDeclaration\"/> will be found by getting <see cref=\"IVertexType.VertexDeclaration\"/>\n        /// from an instance of <typeparamref name=\"T\"/> and cached for subsequent calls.</remarks>\n        /// <remarks>All indices in the vertex buffer are interpreted relative to the specified <paramref name=\"vertexOffset\"/>.\n        /// For example a value of zero in the array of indices points to the vertex at index <paramref name=\"vertexOffset\"/>\n        /// in the array of vertices.</remarks>\n        public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType\n        {\n            VertexDeclaration vertexDeclaration = VertexDeclarationCache<T>.VertexDeclaration;\n            DrawUserIndexedPrimitives<T>(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex to draw.</param>\n        /// <param name=\"indexOffset\">The index in the array of indices of the first index to use</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"numVertices\">The number of vertices to draw.</param>\n        /// <param name=\"indexData\">The index data.</param>\n        /// <param name=\"vertexDeclaration\">The layout of the vertices.</param>\n        /// <remarks>All indices in the vertex buffer are interpreted relative to the specified <paramref name=\"vertexOffset\"/>.\n        /// For example a value of zero in the array of indices points to the vertex at index <paramref name=\"vertexOffset\"/>\n        /// in the array of vertices.</remarks>\n        public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct\n        {\n            if (vertexData == null || vertexData.Length == 0)\n                throw new ArgumentNullException(\"vertexData\");\n\n            if (vertexOffset < 0 || vertexOffset >= vertexData.Length)\n                throw new ArgumentOutOfRangeException(\"vertexOffset\");\n\n            if (numVertices <= 0 || numVertices > vertexData.Length)\n                throw new ArgumentOutOfRangeException(\"numVertices\");\n\n            if (vertexOffset + numVertices > vertexData.Length)\n                throw new ArgumentOutOfRangeException(\"numVertices\");\n\n            if (indexData == null || indexData.Length == 0)\n                throw new ArgumentNullException(\"indexData\");\n\n            if (indexOffset < 0 || indexOffset >= indexData.Length)\n                throw new ArgumentOutOfRangeException(\"indexOffset\");\n\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535)\n                throw new NotSupportedException(\"Reach profile supports a maximum of 65535 primitives per draw call.\");\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575)\n                throw new NotSupportedException(\"HiDef profile supports a maximum of 1048575 primitives per draw call.\");\n\n            if (primitiveCount <= 0)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (indexOffset + GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount) > indexData.Length)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (vertexDeclaration == null)\n                throw new ArgumentNullException(\"vertexDeclaration\");\n\n            if (vertexDeclaration.VertexStride < ReflectionHelpers.SizeOf<T>())\n                throw new ArgumentOutOfRangeException(\"vertexDeclaration\", \"Vertex stride of vertexDeclaration should be at least as big as the stride of the actual vertices.\");\n\n            if (_strategy.VertexShader == null)\n                throw new InvalidOperationException(\"Vertex shader must be set before calling DrawUserIndexedPrimitives.\");\n            if (_strategy.PixelShader == null)\n                throw new InvalidOperationException(\"Pixel shader must be set before calling DrawUserIndexedPrimitives.\");\n\n\n            _strategy.DrawUserIndexedPrimitives<T>(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex to draw.</param>\n        /// <param name=\"indexOffset\">The index in the array of indices of the first index to use</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"numVertices\">The number of vertices to draw.</param>\n        /// <param name=\"indexData\">The index data.</param>\n        /// <remarks>The <see cref=\"VertexDeclaration\"/> will be found by getting <see cref=\"IVertexType.VertexDeclaration\"/>\n        /// from an instance of <typeparamref name=\"T\"/> and cached for subsequent calls.</remarks>\n        /// <remarks>All indices in the vertex buffer are interpreted relative to the specified <paramref name=\"vertexOffset\"/>.\n        /// For example a value of zero in the array of indices points to the vertex at index <paramref name=\"vertexOffset\"/>\n        /// in the array of vertices.</remarks>\n        public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType\n        {\n            VertexDeclaration vertexDeclaration = VertexDeclarationCache<T>.VertexDeclaration;\n            DrawUserIndexedPrimitives<T>(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex to draw.</param>\n        /// <param name=\"indexOffset\">The index in the array of indices of the first index to use</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"numVertices\">The number of vertices to draw.</param>\n        /// <param name=\"indexData\">The index data.</param>\n        /// <param name=\"vertexDeclaration\">The layout of the vertices.</param>\n        /// <remarks>All indices in the vertex buffer are interpreted relative to the specified <paramref name=\"vertexOffset\"/>.\n        /// For example value of zero in the array of indices points to the vertex at index <paramref name=\"vertexOffset\"/>\n        /// in the array of vertices.</remarks>\n        public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct\n        {\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach)\n                throw new NotSupportedException(\"Reach profile does not support 32 bit indices\");\n\n            if (vertexData == null || vertexData.Length == 0)\n                throw new ArgumentNullException(\"vertexData\");\n\n            if (vertexOffset < 0 || vertexOffset >= vertexData.Length)\n                throw new ArgumentOutOfRangeException(\"vertexOffset\");\n\n            if (numVertices <= 0 || numVertices > vertexData.Length)\n                throw new ArgumentOutOfRangeException(\"numVertices\");\n\n            if (vertexOffset + numVertices > vertexData.Length)\n                throw new ArgumentOutOfRangeException(\"numVertices\");\n\n            if (indexData == null || indexData.Length == 0)\n                throw new ArgumentNullException(\"indexData\");\n\n            if (indexOffset < 0 || indexOffset >= indexData.Length)\n                throw new ArgumentOutOfRangeException(\"indexOffset\");\n\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535)\n                throw new NotSupportedException(\"Reach profile supports a maximum of 65535 primitives per draw call.\");\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575)\n                throw new NotSupportedException(\"HiDef profile supports a maximum of 1048575 primitives per draw call.\");\n\n            if (primitiveCount <= 0)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (indexOffset + GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount) > indexData.Length)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (vertexDeclaration == null)\n                throw new ArgumentNullException(\"vertexDeclaration\");\n\n            if (vertexDeclaration.VertexStride < ReflectionHelpers.SizeOf<T>())\n                throw new ArgumentOutOfRangeException(\"vertexDeclaration\", \"Vertex stride of vertexDeclaration should be at least as big as the stride of the actual vertices.\");\n\n            if (_strategy.VertexShader == null)\n                throw new InvalidOperationException(\"Vertex shader must be set before calling DrawUserIndexedPrimitives.\");\n            if (_strategy.PixelShader == null)\n                throw new InvalidOperationException(\"Pixel shader must be set before calling DrawUserIndexedPrimitives.\");\n\n\n            _strategy.DrawUserIndexedPrimitives<T>(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration);\n        }\n\n        /// <summary>\n        /// Draw instanced geometry from the bound vertex buffers and index buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"minVertexIndex\">This is unused and remains here only for XNA API compatibility.</param>\n        /// <param name=\"numVertices\">This is unused and remains here only for XNA API compatibility.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives in a single instance.</param>\n        /// <param name=\"instanceCount\">The number of instances to render.</param>\n        /// <remarks>Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored.</remarks>\n        public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount)\n        {\n            DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, 0, instanceCount);\n        }\n\n        /// <summary>\n        /// Draw instanced geometry from the bound vertex buffers and index buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives in a single instance.</param>\n        /// <param name=\"instanceCount\">The number of instances to render.</param>\n        /// <remarks>Draw geometry with data from multiple bound vertex streams at different frequencies.</remarks>\n        public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int instanceCount)\n        {\n            DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, 0, instanceCount);\n        }\n\n        /// <summary>\n        /// Draw instanced geometry from the bound vertex buffers and index buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives in a single instance.</param>\n        /// <param name=\"baseInstance\">Used to offset the instance range indexed from the instance buffer.</param>\n        /// <param name=\"instanceCount\">The number of instances to render.</param>\n        /// <remarks>Draw geometry with data from multiple bound vertex streams at different frequencies.</remarks>\n        public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount)\n        {\n            if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach)\n                throw new NotSupportedException(\"Reach profile does not support Instancing.\");\n\n            if (_strategy._vertexBuffers.Count == 0)\n                throw new InvalidOperationException(\"Vertex buffer must be set before calling DrawInstancedPrimitives.\");\n\n            if (_strategy.Indices == null)\n                throw new InvalidOperationException(\"Index buffer must be set before calling DrawInstancedPrimitives.\");\n\n            if (primitiveCount <= 0)\n                throw new ArgumentOutOfRangeException(\"primitiveCount\");\n\n            if (_strategy.VertexShader == null)\n                throw new InvalidOperationException(\"Vertex shader must be set before calling DrawInstancedPrimitives.\");\n            if (_strategy.PixelShader == null)\n                throw new InvalidOperationException(\"Pixel shader must be set before calling DrawInstancedPrimitives.\");\n\n\n            _strategy.DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, baseInstance, instanceCount);\n        }\n\n        /// <summary>\n        /// Sends queued-up commands in the command buffer to the graphics processing unit (GPU).\n        /// </summary>\n        public void Flush()\n        {\n            _strategy.Flush();\n        }\n\n\n        #region IDisposable Members\n\n        ~GraphicsContext()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            ThrowIfDisposed();\n            {\n                Dispose(true);\n                GC.SuppressFinalize(this);\n                _isDisposed = true;\n            }\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_strategy != null)\n                    _strategy.Dispose();\n\n                _strategy = null;\n                _deviceStrategy = null;\n            }\n        }\n\n        //[Conditional(\"DEBUG\")]\n        private void ThrowIfDisposed()\n        {\n            if (!_isDisposed)\n                return;\n\n            throw new ObjectDisposedException(\"Object is Disposed.\");\n        }\n\n        #endregion IDisposable Members\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsContextStrategy.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformGraphicsContext\n    {\n        GraphicsContextStrategy Strategy { get; }\n        GraphicsDeviceStrategy DeviceStrategy { get; }\n\n    }\n\n    public abstract class GraphicsContextStrategy : IDisposable\n    {\n        private GraphicsContext _context;\n\n        public GraphicsContext Context { get { return _context; } }\n\n        private bool _isDisposed = false;\n\n        internal GraphicsMetrics _graphicsMetrics;\n        protected internal GraphicsCapabilities _capabilities;\n\n        public GraphicsCapabilities Capabilities\n        {\n            get { return _capabilities; }\n        }\n\n        protected internal Rectangle _scissorRectangle;\n        protected internal bool _scissorRectangleDirty;\n        public Viewport _viewport;\n\n        // states\n        private BlendState _blendState;\n        private Color _blendFactor = Color.White;\n        private DepthStencilState _depthStencilState;\n        private RasterizerState _rasterizerState;\n        internal SamplerStateCollection _vertexSamplerStates;\n        internal SamplerStateCollection _pixelSamplerStates;\n\n        // states dirty flags\n        protected internal bool _blendStateDirty;\n        protected internal bool _blendFactorDirty;\n        protected internal bool _depthStencilStateDirty;\n        protected internal bool _rasterizerStateDirty;\n\n        // actual states\n        public BlendState _actualBlendState;\n        public DepthStencilState _actualDepthStencilState;\n        public RasterizerState _actualRasterizerState;\n\n        // predefined states\n        internal BlendState _blendStateAdditive;\n        internal BlendState _blendStateAlphaBlend;\n        internal BlendState _blendStateNonPremultiplied;\n        internal BlendState _blendStateOpaque;\n        internal DepthStencilState _depthStencilStateDefault;\n        internal DepthStencilState _depthStencilStateDepthRead;\n        internal DepthStencilState _depthStencilStateNone;\n        internal RasterizerState _rasterizerStateCullClockwise;\n        internal RasterizerState _rasterizerStateCullCounterClockwise;\n        internal RasterizerState _rasterizerStateCullNone;\n\n        // shaders\n        private VertexShader _vertexShader;\n        private PixelShader _pixelShader;\n        protected internal ConstantBufferCollection _vertexConstantBuffers;\n        protected internal ConstantBufferCollection _pixelConstantBuffers;\n\n        // shaders dirty flags\n        protected internal bool _vertexShaderDirty;\n        protected internal bool _pixelShaderDirty;\n\n        // buffers\n        private IndexBuffer _indexBuffer;\n        protected internal VertexBufferCollection _vertexBuffers;\n\n        // buffers dirty flags\n        public bool _indexBufferDirty;\n        public bool _vertexBuffersDirty;\n\n        // textures\n        internal TextureCollection _vertexTextures;\n        internal TextureCollection _pixelTextures;\n\n        private readonly RenderTargetBinding[] _currentRenderTargetBindings = new RenderTargetBinding[8];\n        protected int _currentRenderTargetCount;\n        private static RenderTargetBinding[] _emptyRenderTargetBindings = new RenderTargetBinding[0];\n\n        private Color _discardColor = new Color(68, 34, 136, 255);\n\n        private GraphicsDebug _graphicsDebug;\n\n\n        public readonly object SyncHandle = new object();\n\n        public RenderTargetBinding[] CurrentRenderTargetBindings { get { return _currentRenderTargetBindings; } }\n        public int RenderTargetCount { get { return _currentRenderTargetCount; } }\n        public bool IsRenderTargetBound { get { return _currentRenderTargetCount > 0; } }\n\n        /// <summary>\n        /// Get or set the color a <see cref=\"RenderTarget2D\"/> is cleared to when it is set.\n        /// </summary>\n        public Color DiscardColor\n        {\n            get { return _discardColor; }\n            set { _discardColor = value; }\n        }\n\n        /// <summary>\n        /// Access debugging APIs for the graphics subsystem.\n        /// </summary>\n        public GraphicsDebug GraphicsDebug\n        {\n            get { return _graphicsDebug; }\n            set { _graphicsDebug = value; }\n        }\n\n        public Rectangle ScissorRectangle\n        {\n            get { return _scissorRectangle; }\n            set\n            {\n                if (_scissorRectangle == value)\n                    return;\n\n                _scissorRectangle = value;\n                _scissorRectangleDirty = true;\n            }\n        }\n\n        virtual public Viewport Viewport\n        {\n            get { return _viewport; }\n            set { _viewport = value; }\n        }\n\n        public BlendState BlendState\n        {\n            get { return _blendState; }\n            set\n            {\n                if (value == null)\n                    throw new ArgumentNullException(\"value\");\n\n                // Don't set the same state twice!\n                if (_blendState == value)\n                    return;\n\n                _blendState = value;\n\n                // Static state properties never actually get bound;\n                // instead we use our GraphicsDevice-specific version of them.\n                BlendState newBlendState = _blendState;\n                if (ReferenceEquals(_blendState, BlendState.Additive))\n                    newBlendState = _blendStateAdditive;\n                else if (ReferenceEquals(_blendState, BlendState.AlphaBlend))\n                    newBlendState = _blendStateAlphaBlend;\n                else if (ReferenceEquals(_blendState, BlendState.NonPremultiplied))\n                    newBlendState = _blendStateNonPremultiplied;\n                else if (ReferenceEquals(_blendState, BlendState.Opaque))\n                    newBlendState = _blendStateOpaque;\n\n                if (newBlendState.IndependentBlendEnable && !this.Capabilities.SupportsSeparateBlendStates)\n                    throw new PlatformNotSupportedException(\"Independent blend states requires at least OpenGL 4.0 or GL_ARB_draw_buffers_blend. Try upgrading your graphics drivers.\");\n\n                // Blend state is now bound to a device... no one should\n                // be changing the state of the blend state object now!\n                newBlendState.BindToGraphicsDevice(this);\n\n                _actualBlendState = newBlendState;\n\n                BlendFactor = _actualBlendState.BlendFactor;\n\n                _blendStateDirty = true;\n            }\n        }\n\n        public Color BlendFactor\n        {\n            get { return _blendFactor; }\n            set\n            {\n                if (_blendFactor == value)\n                    return;\n                _blendFactor = value;\n                _blendFactorDirty = true;\n            }\n        }\n\n        public DepthStencilState DepthStencilState\n        {\n            get { return _depthStencilState; }\n            set\n            {\n                if (value == null)\n                    throw new ArgumentNullException(\"value\");\n\n                // Don't set the same state twice!\n                if (_depthStencilState == value)\n                    return;\n\n                _depthStencilState = value;\n\n                // Static state properties never actually get bound;\n                // instead we use our GraphicsDevice-specific version of them.\n                DepthStencilState newDepthStencilState = _depthStencilState;\n                if (ReferenceEquals(_depthStencilState, DepthStencilState.Default))\n                    newDepthStencilState = _depthStencilStateDefault;\n                else if (ReferenceEquals(_depthStencilState, DepthStencilState.DepthRead))\n                    newDepthStencilState = _depthStencilStateDepthRead;\n                else if (ReferenceEquals(_depthStencilState, DepthStencilState.None))\n                    newDepthStencilState = _depthStencilStateNone;\n\n                newDepthStencilState.BindToGraphicsDevice(this);\n\n                _actualDepthStencilState = newDepthStencilState;\n\n                _depthStencilStateDirty = true;\n            }\n        }\n\n        public RasterizerState RasterizerState\n        {\n            get { return _rasterizerState; }\n            set\n            {\n                if (value == null)\n                    throw new ArgumentNullException(\"value\");\n\n                // Don't set the same state twice!\n                if (_rasterizerState == value)\n                    return;\n\n                if (!value.DepthClipEnable && !this.Capabilities.SupportsDepthClamp)\n                    throw new InvalidOperationException(\"Cannot set RasterizerState.DepthClipEnable to false on this graphics device\");\n\n                _rasterizerState = value;\n\n                // Static state properties never actually get bound;\n                // instead we use our GraphicsDevice-specific version of them.\n                RasterizerState newRasterizerState = _rasterizerState;\n                if (ReferenceEquals(_rasterizerState, RasterizerState.CullClockwise))\n                    newRasterizerState = _rasterizerStateCullClockwise;\n                else if (ReferenceEquals(_rasterizerState, RasterizerState.CullCounterClockwise))\n                    newRasterizerState = _rasterizerStateCullCounterClockwise;\n                else if (ReferenceEquals(_rasterizerState, RasterizerState.CullNone))\n                    newRasterizerState = _rasterizerStateCullNone;\n\n                newRasterizerState.BindToGraphicsDevice(this);\n\n                _actualRasterizerState = newRasterizerState;\n\n                _rasterizerStateDirty = true;\n            }\n        }\n\n        public SamplerStateCollection VertexSamplerStates\n        {\n            get { return _vertexSamplerStates; }\n        }\n\n        public SamplerStateCollection SamplerStates\n        {\n            get { return _pixelSamplerStates; }\n        }\n\n        public TextureCollection VertexTextures\n        {\n            get { return _vertexTextures; }\n        }\n\n        public TextureCollection Textures\n        {\n            get { return _pixelTextures; }\n        }\n\n\n        public IndexBuffer Indices\n        {\n            get { return _indexBuffer; }\n            set\n            {\n                if (_indexBuffer != value)\n                {\n                    _indexBuffer = value;\n                    _indexBufferDirty = true;\n                }\n            }\n        }\n\n        public VertexShader VertexShader\n        {\n            get { return _vertexShader; }\n            set\n            {\n                if (_vertexShader == value)\n                    return;\n\n                _vertexShader = value;\n                _vertexConstantBuffers.Clear();\n                _vertexShaderDirty = true;\n            }\n        }\n\n        public PixelShader PixelShader\n        {\n            get { return _pixelShader; }\n            set\n            {\n                if (_pixelShader == value)\n                    return;\n\n                _pixelShader = value;\n                _pixelConstantBuffers.Clear();\n                _pixelShaderDirty = true;\n            }\n        }\n\n        protected GraphicsContextStrategy(GraphicsContext context)\n        {\n            _context = context;\n            \n        }\n\n        protected void Initialize(GraphicsCapabilities capabilities)\n        {\n            this._vertexConstantBuffers = new ConstantBufferCollection(this, 16);\n            this._pixelConstantBuffers = new ConstantBufferCollection(this, 16);\n\n            this._vertexTextures = new TextureCollection(this, this.Capabilities.MaxVertexTextureSlots);\n            this._pixelTextures = new TextureCollection(this, this.Capabilities.MaxTextureSlots);\n\n            this._pixelSamplerStates = new SamplerStateCollection(this, this.Capabilities.MaxTextureSlots);\n            this._vertexSamplerStates = new SamplerStateCollection(this, this.Capabilities.MaxVertexTextureSlots);\n\n            this._blendStateAdditive = new BlendState(BlendState.Additive);\n            this._blendStateAlphaBlend = new BlendState(BlendState.AlphaBlend);\n            this._blendStateNonPremultiplied = new BlendState(BlendState.NonPremultiplied);\n            this._blendStateOpaque = new BlendState(BlendState.Opaque);\n\n            this.BlendState = BlendState.Opaque;\n            this._blendStateDirty = true;\n            this._blendFactorDirty = true;\n\n            this._depthStencilStateDefault = new DepthStencilState(DepthStencilState.Default);\n            this._depthStencilStateDepthRead = new DepthStencilState(DepthStencilState.DepthRead);\n            this._depthStencilStateNone = new DepthStencilState(DepthStencilState.None);\n\n            this.DepthStencilState = DepthStencilState.Default;\n            this._depthStencilStateDirty = true;\n\n            this._rasterizerStateCullClockwise = new RasterizerState(RasterizerState.CullClockwise);\n            this._rasterizerStateCullCounterClockwise = new RasterizerState(RasterizerState.CullCounterClockwise);\n            this._rasterizerStateCullNone = new RasterizerState(RasterizerState.CullNone);\n\n            this.RasterizerState = RasterizerState.CullCounterClockwise;\n            this._rasterizerStateDirty = true;\n\n            // Force set the buffers and shaders on next ApplyState() call\n            this._vertexBuffers = new VertexBufferCollection(this.Capabilities.MaxVertexBufferSlots);\n            this._vertexBuffersDirty = true;\n            this._indexBufferDirty = true;\n            this._vertexShaderDirty = true;\n            this._pixelShaderDirty = true;\n\n            this._scissorRectangleDirty = true;\n\n        }\n\n\n        protected internal void SetVertexBuffer(VertexBuffer vertexBuffer)\n        {\n            if (vertexBuffer != null)\n            {\n                _vertexBuffersDirty |= _vertexBuffers.Set(vertexBuffer, 0);\n            }\n            else\n            {\n                _vertexBuffersDirty |= _vertexBuffers.Clear();\n            }\n        }\n\n        public abstract void PlatformSetup();\n\n        public abstract void Clear(ClearOptions options, Vector4 color, float depth, int stencil);\n\n        internal void SetVertexBuffer(VertexBuffer vertexBuffer, int vertexOffset)\n        {\n            if (vertexBuffer != null)\n            {\n                if (0 >= vertexOffset && vertexOffset < vertexBuffer.VertexCount)\n                {\n                    _vertexBuffersDirty |= _vertexBuffers.Set(vertexBuffer, vertexOffset);\n                }\n                else\n                    throw new ArgumentOutOfRangeException(\"vertexOffset\");\n            }\n            else\n            {\n                if (vertexOffset == 0)\n                {\n                    _vertexBuffersDirty |= _vertexBuffers.Clear();\n                }\n                else\n                    throw new ArgumentOutOfRangeException(\"vertexOffset\");\n            }\n        }\n\n        internal void SetVertexBuffers(VertexBufferBinding[] vertexBuffers)\n        {\n            if (vertexBuffers != null && vertexBuffers.Length > 0)\n            {\n                if (vertexBuffers.Length <= this.Capabilities.MaxVertexBufferSlots)\n                {\n                    _vertexBuffersDirty |= _vertexBuffers.Set(vertexBuffers);\n                }\n                else\n                {\n                    string message = String.Format(\"Max number of vertex buffers is {0}.\", this.Capabilities.MaxVertexBufferSlots);\n                    throw new ArgumentOutOfRangeException(\"vertexBuffers\", message);\n                }\n            }\n            else\n            {\n                _vertexBuffersDirty |= _vertexBuffers.Clear();\n            }\n        }\n\n        public void ApplyRenderTargets(RenderTargetBinding[] renderTargets)\n        {\n            bool clearTarget = false;\n\n            this.PlatformResolveRenderTargets();\n\n            // Clear the current bindings.\n            Array.Clear(_currentRenderTargetBindings, 0, _currentRenderTargetBindings.Length);\n\n            int renderTargetWidth;\n            int renderTargetHeight;\n            if (renderTargets == null)\n            {\n                _currentRenderTargetCount = 0;\n\n                this.PlatformApplyDefaultRenderTarget();\n                clearTarget = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.RenderTargetUsage == RenderTargetUsage.DiscardContents;\n\n                renderTargetWidth = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferWidth;\n                renderTargetHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight;\n\n                unchecked { _graphicsMetrics._targetCount++; }\n            }\n            else\n            {\n                // Copy the new bindings.\n                Array.Copy(renderTargets, _currentRenderTargetBindings, renderTargets.Length);\n                _currentRenderTargetCount = renderTargets.Length;\n\n                IRenderTarget renderTarget = this.PlatformApplyRenderTargets();\n\n                // We clear the render target if asked.\n                clearTarget = renderTarget.RenderTargetUsage == RenderTargetUsage.DiscardContents;\n\n                renderTargetWidth = renderTarget.Width;\n                renderTargetHeight = renderTarget.Height;\n\n                if (renderTargets.Length == 0)\n                    unchecked { _graphicsMetrics._targetCount++; }\n                else\n                    unchecked { _graphicsMetrics._targetCount += renderTargets.Length; }\n            }\n\n            // Set the viewport to the size of the first render target.\n            this.Viewport = new Viewport(0, 0, renderTargetWidth, renderTargetHeight);\n\n            // Set the scissor rectangle to the size of the first render target.\n            this.ScissorRectangle = new Rectangle(0, 0, renderTargetWidth, renderTargetHeight);\n\n            if (clearTarget)\n            {\n                ClearOptions options = ClearOptions.Target\n                                     | ClearOptions.DepthBuffer\n                                     | ClearOptions.Stencil;\n                this.Clear(options, this.DiscardColor.ToVector4(), this.Viewport.MaxDepth, 0);\n            }\n        }\n\n        internal RenderTargetBinding[] GetRenderTargets()\n        {\n            int renderTargetCount = _currentRenderTargetCount;\n\n            if (renderTargetCount == 0)\n                return _emptyRenderTargetBindings;\n\n            RenderTargetBinding[] bindings = new RenderTargetBinding[renderTargetCount];\n            Array.Copy(_currentRenderTargetBindings, bindings, _currentRenderTargetCount);\n            return bindings;\n        }\n\n        internal int GetRenderTargets(RenderTargetBinding[] bindings)\n        {\n            int renderTargetCount = _currentRenderTargetCount;\n\n            Array.Copy(_currentRenderTargetBindings, bindings, renderTargetCount);\n            return renderTargetCount;\n        }\n\n        protected internal static int GetElementCountArray(PrimitiveType primitiveType, int primitiveCount)\n        {\n            switch (primitiveType)\n            {\n                case PrimitiveType.LineList:\n                    return primitiveCount * 2;\n                case PrimitiveType.LineStrip:\n                    return primitiveCount + 1;\n                case PrimitiveType.TriangleList:\n                    return primitiveCount * 3;\n                case PrimitiveType.TriangleStrip:\n                    return primitiveCount + 2;\n                case PrimitiveType.PointList:\n                    return primitiveCount;\n                default:\n                    throw new NotSupportedException();\n            }\n        }\n\n        public abstract void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount);\n        public abstract void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount);\n        public abstract void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount);\n        public abstract void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount);\n        public abstract void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount) where T : struct;\n        public abstract void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct;\n        public abstract void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct;\n        public abstract void Flush();\n\n\n        public abstract OcclusionQueryStrategy CreateOcclusionQueryStrategy();\n        public abstract GraphicsDebugStrategy CreateGraphicsDebugStrategy();\n        public abstract ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity);\n        public abstract TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity);\n        public abstract SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity);\n\n        public abstract ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared);\n        public abstract ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format);\n        public abstract ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format);\n        public abstract IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount);\n        public abstract IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount);\n        public abstract IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount);\n\n        public abstract ITexture2DStrategy CreateTexture2DStrategy(Stream stream);\n\n        public abstract ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes);\n        public abstract ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes);\n        public abstract ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats);\n\n        public abstract IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage);\n        public abstract VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage);\n        public abstract IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage);\n        public abstract VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage);\n\n        public abstract IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source);\n        public abstract IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source);\n        public abstract IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy stsourcerategy);\n        public abstract ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source);\n\n        protected abstract void PlatformResolveRenderTargets();\n        protected abstract void PlatformApplyDefaultRenderTarget();\n        protected abstract IRenderTarget PlatformApplyRenderTargets();\n\n        protected GraphicsDebug CreateGraphicsDebug()\n        {\n            return new GraphicsDebug(this);\n        }\n\n        public T ToConcrete<T>() where T : GraphicsContextStrategy\n        {\n            return (T)this;\n        }\n\n        #region Metrics\n        protected void Metrics_AddClearCount() { unchecked { _graphicsMetrics._clearCount++; } }\n        protected void Metrics_AddDrawCount() { unchecked { _graphicsMetrics._drawCount++; } }\n        protected void Metrics_AddPixelShaderCount() { unchecked { _graphicsMetrics._pixelShaderCount++; } }\n        protected void Metrics_AddTargetCount() { unchecked { _graphicsMetrics._targetCount++; } }\n        protected void Metrics_AddVertexShaderCount() { unchecked { _graphicsMetrics._vertexShaderCount++; } }\n        protected void Metrics_AddPrimitiveCount(int primitiveCount) { unchecked { _graphicsMetrics._primitiveCount += primitiveCount; } }\n        public void Metrics_AddSpriteCount(int batchCount) { unchecked { _graphicsMetrics._spriteCount += batchCount; } }\n        public void Metrics_AddTextureCount() { unchecked { _graphicsMetrics._textureCount++; } }\n        #endregion Metrics\n\n\n        #region IDisposable Members\n\n        ~GraphicsContextStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            ThrowIfDisposed();\n            {\n                Dispose(true);\n                GC.SuppressFinalize(this);\n                _isDisposed = true;\n            }\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _blendState = null;\n                _actualBlendState = null;\n                _blendStateAdditive.Dispose();\n                _blendStateAlphaBlend.Dispose();\n                _blendStateNonPremultiplied.Dispose();\n                _blendStateOpaque.Dispose();\n\n                _depthStencilState = null;\n                _actualDepthStencilState = null;\n                _depthStencilStateDefault.Dispose();\n                _depthStencilStateDepthRead.Dispose();\n                _depthStencilStateNone.Dispose();\n\n                _rasterizerState = null;\n                _actualRasterizerState = null;\n                _rasterizerStateCullClockwise.Dispose();\n                _rasterizerStateCullCounterClockwise.Dispose();\n                _rasterizerStateCullNone.Dispose();\n            }\n        }\n\n        //[Conditional(\"DEBUG\")]\n        protected void ThrowIfDisposed()\n        {\n            if (!_isDisposed)\n                return;\n\n            throw new ObjectDisposedException(\"Object is Disposed.\");\n        }\n\n        #endregion IDisposable Members\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsDebug.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class GraphicsDebug\n        : IPlatformGraphicsDebug\n    {\n        private GraphicsDebugStrategy _strategy;\n\n        GraphicsDebugStrategy IPlatformGraphicsDebug.Strategy { get { return _strategy; } }\n\n        public GraphicsDebug(GraphicsDevice device) : this(device.MainContext)\n        {\n        }\n\n        internal GraphicsDebug(GraphicsContext context) : this(((IPlatformGraphicsContext)context).Strategy)\n        {\n        }\n\n        internal GraphicsDebug(GraphicsContextStrategy contextStrategy)\n        {\n            _strategy = contextStrategy.CreateGraphicsDebugStrategy();\n        }\n\n        /// <summary>\n        /// Attempt to dequeue a debugging message from the graphics subsystem.\n        /// </summary>\n        /// <remarks>\n        /// When running on a graphics device with debugging enabled, this allows you to retrieve\n        /// subsystem-specific (e.g. DirectX, OpenGL, etc.) debugging messages including information\n        /// about improper usage of shaders and APIs.\n        /// </remarks>\n        /// <param name=\"message\">The graphics debugging message if retrieved, null otherwise.</param>\n        /// <returns>True if a graphics debugging message was retrieved, false otherwise.</returns>\n        public bool TryDequeueMessage(out GraphicsDebugMessage message)\n        {\n            return _strategy.TryDequeueMessage(out message);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsDebugMessage.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class GraphicsDebugMessage\n    {\n        public string Message { get; set; }\n\n        public string Severity { get; set; }\n\n        public int Id { get; set; }\n\n        public string IdName { get; set; }\n\n        public string Category { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsDebugStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformGraphicsDebug\n    {\n        GraphicsDebugStrategy Strategy { get; }\n    }\n\n    public abstract class GraphicsDebugStrategy\n    {\n        protected readonly GraphicsContextStrategy _contextStrategy;\n\n        protected GraphicsDebugStrategy(GraphicsContextStrategy contextStrategy)\n        {\n            _contextStrategy = contextStrategy;\n\n        }\n\n        public abstract bool TryDequeueMessage(out GraphicsDebugMessage message);\n\n\n        public T ToConcrete<T>() where T : GraphicsDebugStrategy\n        {\n            return (T)this;\n        }\n        \n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsDevice.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class GraphicsDevice : IDisposable\n        , IPlatformGraphicsDevice\n    {\n        private GraphicsDeviceStrategy _strategy;\n\n        GraphicsDeviceStrategy IPlatformGraphicsDevice.Strategy { get { return _strategy; } }\n\n        internal GraphicsContext MainContext { get { return _strategy.MainContext; } }\n        internal GraphicsContext CurrentContext { get { return _strategy.CurrentContext; } }\n\n\n        // TODO: Graphics Device events need implementing\n        public event EventHandler<EventArgs> DeviceLost;\n        public event EventHandler<EventArgs> DeviceReset;\n        public event EventHandler<EventArgs> DeviceResetting;\n        public event EventHandler<ResourceCreatedEventArgs> ResourceCreated;\n        public event EventHandler<ResourceDestroyedEventArgs> ResourceDestroyed;\n\n        /// <summary>\n        /// Raised when the GraphicsDevice is disposed or finalized.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposing;\n\n        private event EventHandler<PresentationEventArgs> _presentationChanged;\n        event EventHandler<PresentationEventArgs> IPlatformGraphicsDevice.PresentationChanged\n        {\n            add { _presentationChanged += value; }\n            remove { _presentationChanged -= value; }\n        }\n\n        public bool IsDisposed\n        {\n            get { return _strategy.IsDisposed; }\n        }\n\n        public GraphicsAdapter Adapter\n        {\n            get { return _strategy.Adapter; }\n        }\n\n        public GraphicsProfile GraphicsProfile\n        {\n            get { return _strategy.GraphicsProfile; }\n        }\n\n        /// <summary>\n        /// Indicates if DX9 style pixel addressing or current standard\n        /// pixel addressing should be used. This flag is set to\n        /// <c>false</c> by default. If `UseHalfPixelOffset` is\n        /// `true` you have to add half-pixel offset to a Projection matrix.\n        /// See also <see cref=\"GraphicsDeviceManager.PreferHalfPixelOffset\"/>.\n        /// </summary>\n        /// <remarks>\n        /// XNA uses DirectX9 for its graphics. DirectX9 interprets UV\n        /// coordinates differently from other graphics API's. This is\n        /// typically referred to as the half-pixel offset. MonoGame\n        /// replicates XNA behavior if this flag is set to <c>true</c>.\n        /// </remarks>\n        public bool UseHalfPixelOffset\n        {\n            get { return _strategy.UseHalfPixelOffset; }\n        }\n\n        public PresentationParameters PresentationParameters\n        {\n            get { return _strategy.PresentationParameters; }\n        }\n\n\n        /// <summary>\n        /// The rendering information for debugging and profiling.\n        /// The metrics are reset every frame after draw within <see cref=\"GraphicsDevice.Present\"/>. \n        /// </summary>\n        public GraphicsMetrics Metrics\n        {\n            get { return CurrentContext.Metrics; }\n            set { CurrentContext.Metrics = value; }\n        }\n\n        /// <summary>\n        /// Access debugging APIs for the graphics subsystem.\n        /// </summary>\n        public GraphicsDebug GraphicsDebug\n        {\n            get { return CurrentContext.GraphicsDebug ; }\n            set { CurrentContext.GraphicsDebug = value; }\n        }\n\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"GraphicsDevice\" /> class.\n        /// </summary>\n        /// <param name=\"adapter\">The graphics adapter.</param>\n        /// <param name=\"graphicsProfile\">The graphics profile.</param>\n        /// <param name=\"presentationParameters\">The presentation options.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"presentationParameters\"/> is <see langword=\"null\"/>.\n        /// </exception>\n        public GraphicsDevice(GraphicsAdapter adapter, GraphicsProfile graphicsProfile, PresentationParameters presentationParameters)\n        {\n            PreserveGraphicsContentTypeReaders();\n\n            _strategy = GraphicsFactory.Current.CreateGraphicsDeviceStrategy(this, adapter, graphicsProfile, false, presentationParameters);\n            _strategy.DeviceResetting += (sender, e) => { OnDeviceResetting(e); };\n            _strategy.DeviceReset += (sender, e) => { OnDeviceReset(e); };\n            _strategy.PresentationChanged += (sender, e) => { OnPresentationChanged(e); };\n            _strategy.Disposing += (sender, e) => { OnDisposing(e); };\n\n            _strategy.Initialize();\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"GraphicsDevice\" /> class.\n        /// </summary>\n        /// <param name=\"adapter\">The graphics adapter.</param>\n        /// <param name=\"graphicsProfile\">The graphics profile.</param>\n        /// <param name=\"preferHalfPixelOffset\"> Indicates if DX9 style pixel addressing or current standard pixel addressing should be used. This value is passed to <see cref=\"GraphicsDevice.UseHalfPixelOffset\"/></param>\n        /// <param name=\"presentationParameters\">The presentation options.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"presentationParameters\"/> is <see langword=\"null\"/>.\n        /// </exception>\n        public GraphicsDevice(GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n        {\n            PreserveGraphicsContentTypeReaders();\n\n            _strategy = GraphicsFactory.Current.CreateGraphicsDeviceStrategy(this, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters);\n            _strategy.DeviceResetting += (sender, e) => { OnDeviceResetting(e); };\n            _strategy.DeviceReset += (sender, e) => { OnDeviceReset(e); };\n            _strategy.PresentationChanged += (sender, e) => { OnPresentationChanged(e); };\n            _strategy.Disposing += (sender, e) => { OnDisposing(e); };\n\n            _strategy.Initialize();\n        }\n\n        ~GraphicsDevice()\n        {\n            Dispose(false);\n        }\n\n        // Trick to prevent the linker removing the code, but not actually execute the code\n        static bool _trimmingFalseFlag = false;\n        private static void PreserveGraphicsContentTypeReaders()\n        {\n#pragma warning disable 0219, 0649\n            // Trick to prevent the linker removing the code, but not actually execute the code\n            if (_trimmingFalseFlag)\n            {\n                // Dummy variables required for it to work with trimming ** DO NOT DELETE **\n                // This forces the classes not to be optimized out when deploying with trimming\n\n                // Framework.Graphics.PackedVector types\n                var hColorReader = new ColorReader();\n\n                // Framework.Graphics types\n                var hAlphaTestEffectReader = new AlphaTestEffectReader();\n                var hBasicEffectReader = new BasicEffectReader();\n                var hDualTextureEffectReader = new DualTextureEffectReader();\n                var hEffectMaterialReader = new EffectMaterialReader();\n                var hEffectReader = new EffectReader();\n                var hIndexBufferReader = new IndexBufferReader();\n                var hModelReader = new ModelReader();\n                var hSkinnedEffectReader = new SkinnedEffectReader();\n                var hSpriteFontReader = new SpriteFontReader();\n                var hTexture2DReader = new Texture2DReader();\n                var hTexture3DReader = new Texture3DReader();\n                var hTextureCubeReader = new TextureCubeReader();\n                var hVertexBufferReader = new VertexBufferReader();\n            }\n#pragma warning restore 0219, 0649\n        }\n\n        public Rectangle ScissorRectangle\n        {\n            get { return CurrentContext.ScissorRectangle; }\n            set { CurrentContext.ScissorRectangle = value; }\n        }\n\n        public Viewport Viewport\n        {\n            get { return CurrentContext.Viewport; }\n            set { CurrentContext.Viewport = value; }\n        }\n\n        public BlendState BlendState\n        {\n            get { return CurrentContext.BlendState; }\n            set { CurrentContext.BlendState = value; }\n        }\n\n        /// <summary>\n        /// The color used as blend factor when alpha blending.\n        /// </summary>\n        /// <remarks>\n        /// When only changing BlendFactor, use this rather than <see cref=\"Graphics.BlendState.BlendFactor\"/> to\n        /// only update BlendFactor so the whole BlendState does not have to be updated.\n        /// </remarks>\n        public Color BlendFactor\n        {\n            get { return CurrentContext.BlendFactor; }\n            set { CurrentContext.BlendFactor = value; }\n        }\n\n        public DepthStencilState DepthStencilState\n        {\n            get { return CurrentContext.DepthStencilState; }\n            set { CurrentContext.DepthStencilState = value; }\n        }\n\n        public RasterizerState RasterizerState\n        {\n            get { return CurrentContext.RasterizerState; }\n            set { CurrentContext.RasterizerState = value; }\n        }\n\n        public SamplerStateCollection SamplerStates\n        {\n            get { return CurrentContext.SamplerStates; }\n        }\n\n        public SamplerStateCollection VertexSamplerStates\n        {\n            get { return CurrentContext.VertexSamplerStates; }\n        }\n\n        public TextureCollection Textures\n        {\n            get { return CurrentContext.Textures; }\n        }\n\n        public TextureCollection VertexTextures\n        {\n            get { return CurrentContext.VertexTextures; }\n        }\n\n        /// <summary>\n        /// Get or set the color a <see cref=\"RenderTarget2D\"/> is cleared to when it is set.\n        /// </summary>\n        public Color DiscardColor\n        {\n            get { return CurrentContext.DiscardColor; }\n            set { CurrentContext.DiscardColor = value; }\n        }\n\n        public void Clear(Color color)\n        {\n            CurrentContext.Clear(color);\n        }\n\n        public void Clear(ClearOptions options, Color color, float depth, int stencil)\n        {\n            CurrentContext.Clear(options, color, depth, stencil);\n        }\n\n        public void Clear(ClearOptions options, Vector4 color, float depth, int stencil)\n        {\n            CurrentContext.Clear(options, color, depth, stencil);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void OnDisposing(EventArgs e)\n        {\n            var handler = Disposing;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _strategy.Dispose();\n            }\n\n            _strategy.DeviceResetting -= (sender, e) => { OnDeviceResetting(e); };\n            _strategy.DeviceReset -= (sender, e) => { OnDeviceReset(e); };\n            _strategy.PresentationChanged -= (sender, e) => { OnPresentationChanged(e); };\n            _strategy.Disposing -= (sender, e) => { OnDisposing(e); };\n        }\n\n\n        public void Present()\n        {\n            // We cannot present with a RT set on the device.\n            if (((IPlatformGraphicsContext)_strategy._mainContext).Strategy.IsRenderTargetBound)\n                throw new InvalidOperationException(\"Cannot call Present when a render target is active.\");\n\n            _strategy.Present();\n        }\n\n        public void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle)\n        {\n            _strategy.Present(sourceRectangle, destinationRectangle, overrideWindowHandle);\n        }\n\n        private void OnDeviceResetting(EventArgs e)\n        {\n            var handler = DeviceResetting;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        private void OnPresentationChanged(PresentationEventArgs e)\n        {\n            var handler = _presentationChanged;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        private void OnDeviceReset(EventArgs e)\n        {\n            var handler = DeviceReset;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        public void Reset()\n        {\n            _strategy.OnDeviceResetting(EventArgs.Empty);\n\n            _strategy.Reset();\n\n            _strategy.OnPresentationChanged(new PresentationEventArgs(this.PresentationParameters));\n\n            _strategy.OnDeviceReset(EventArgs.Empty);\n        }\n\n        public void Reset(PresentationParameters presentationParameters)\n        {\n            if (presentationParameters == null)\n                throw new ArgumentNullException(\"presentationParameters\");\n\n            _strategy.OnDeviceResetting(EventArgs.Empty);\n\n            _strategy.Reset(presentationParameters);\n\n            _strategy.OnPresentationChanged(new PresentationEventArgs(this.PresentationParameters));\n\n            _strategy.OnDeviceReset(EventArgs.Empty);\n        }\n\n        public DisplayMode DisplayMode\n        {\n            get { return _strategy.DisplayMode; }\n        }\n\n        public GraphicsDeviceStatus GraphicsDeviceStatus\n        {\n            get { return GraphicsDeviceStatus.Normal; }\n        }\n\n\n\n        public void SetRenderTarget(RenderTarget2D renderTarget)\n        {\n            CurrentContext.SetRenderTarget(renderTarget);\n        }\n\n        public void SetRenderTarget(RenderTargetCube renderTarget, CubeMapFace cubeMapFace)\n        {\n            CurrentContext.SetRenderTarget(renderTarget, cubeMapFace);\n        }\n\n        /// <remarks>Only implemented for DirectX </remarks>\n        public void SetRenderTarget(RenderTarget2D renderTarget, int arraySlice)\n        {\n            CurrentContext.SetRenderTarget(renderTarget, arraySlice);\n        }\n\n        /// <remarks>Only implemented for DirectX </remarks>\n        public void SetRenderTarget(RenderTarget3D renderTarget, int arraySlice)\n        {\n            CurrentContext.SetRenderTarget(renderTarget, arraySlice);\n        }\n\n        public void SetRenderTargets(params RenderTargetBinding[] renderTargets)\n        {\n            CurrentContext.SetRenderTargets(renderTargets);\n        }\n\n        /// <summary>\n        /// Retrieves the currently bound render targets as an array.\n        /// </summary>\n        /// <returns>An array of <see cref=\"RenderTargetBinding\"/> representing the current render targets.</returns>\n        public RenderTargetBinding[] GetRenderTargets()\n        {\n            return CurrentContext.GetRenderTargets();\n        }\n\n        /// <summary>\n        /// Copies the currently bound render targets into the provided array.\n        /// </summary>\n        /// <param name=\"bindings\">The array to store the current render targets.\n        /// Reach profile supports a maximum of 1 simultaneous rendertargets.\n        /// HiDef profile supports a maximum of 4 simultaneous rendertargets.\n        /// FL10_0 profile supports a maximum of 8 simultaneous rendertargets.\n        /// </param>\n        /// <returns>The number of render targets copied.</returns>\n        /// <remarks>This is a MonoGame extension</remarks>\n        public int GetRenderTargets(RenderTargetBinding[] bindings)\n        {\n            return CurrentContext.GetRenderTargets(bindings);\n        }\n\n        public void SetVertexBuffer(VertexBuffer vertexBuffer)\n        {\n            CurrentContext.SetVertexBuffer(vertexBuffer);\n        }\n\n        public void SetVertexBuffer(VertexBuffer vertexBuffer, int vertexOffset)\n        {\n            CurrentContext.SetVertexBuffer(vertexBuffer, vertexOffset);\n        }\n\n        public void SetVertexBuffers(params VertexBufferBinding[] vertexBuffers)\n        {\n            CurrentContext.SetVertexBuffers(vertexBuffers);\n        }\n\n        public IndexBuffer Indices\n        {\n            get { return CurrentContext.Indices; }\n            set { CurrentContext.Indices = value; }\n        }\n\n        /// <summary>\n        /// Draw geometry by indexing into the vertex buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"minVertexIndex\">This is unused and remains here only for XNA API compatibility.</param>\n        /// <param name=\"numVertices\">This is unused and remains here only for XNA API compatibility.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to render from the index buffer.</param>\n        /// <remarks>Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored.</remarks>\n        public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)\n        {\n            CurrentContext.DrawIndexedPrimitives(primitiveType, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount);\n        }\n\n        /// <summary>\n        /// Draw geometry by indexing into the vertex buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to render from the index buffer.</param>\n        public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount)\n        {\n            CurrentContext.DrawIndexedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type from the data in an array of vertices without indexing.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex that should be rendered.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <remarks>The <see cref=\"VertexDeclaration\"/> will be found by getting <see cref=\"IVertexType.VertexDeclaration\"/>\n        /// from an instance of <typeparamref name=\"T\"/> and cached for subsequent calls.</remarks>\n        public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount) where T : struct, IVertexType\n        {\n            CurrentContext.DrawUserPrimitives<T>(primitiveType, vertexData, vertexOffset, primitiveCount);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type from the data in the given array of vertices without indexing.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex that should be rendered.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"vertexDeclaration\">The layout of the vertices.</param>\n        public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct\n        {\n            CurrentContext.DrawUserPrimitives<T>(primitiveType, vertexData, vertexOffset, primitiveCount, vertexDeclaration);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type from the currently bound vertexbuffers without indexing.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives to draw.</param>\n        /// <param name=\"vertexStart\">Index of the vertex to start at.</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        public void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount)\n        {\n            CurrentContext.DrawPrimitives(primitiveType, vertexStart, primitiveCount);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex to draw.</param>\n        /// <param name=\"indexOffset\">The index in the array of indices of the first index to use</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"numVertices\">The number of vertices to draw.</param>\n        /// <param name=\"indexData\">The index data.</param>\n        /// <remarks>The <see cref=\"VertexDeclaration\"/> will be found by getting <see cref=\"IVertexType.VertexDeclaration\"/>\n        /// from an instance of <typeparamref name=\"T\"/> and cached for subsequent calls.</remarks>\n        /// <remarks>All indices in the vertex buffer are interpreted relative to the specified <paramref name=\"vertexOffset\"/>.\n        /// For example a value of zero in the array of indices points to the vertex at index <paramref name=\"vertexOffset\"/>\n        /// in the array of vertices.</remarks>\n        public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType\n        {\n            CurrentContext.DrawUserIndexedPrimitives<T>(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex to draw.</param>\n        /// <param name=\"indexOffset\">The index in the array of indices of the first index to use</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"numVertices\">The number of vertices to draw.</param>\n        /// <param name=\"indexData\">The index data.</param>\n        /// <param name=\"vertexDeclaration\">The layout of the vertices.</param>\n        /// <remarks>All indices in the vertex buffer are interpreted relative to the specified <paramref name=\"vertexOffset\"/>.\n        /// For example a value of zero in the array of indices points to the vertex at index <paramref name=\"vertexOffset\"/>\n        /// in the array of vertices.</remarks>\n        public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct\n        {\n             CurrentContext.DrawUserIndexedPrimitives<T>(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex to draw.</param>\n        /// <param name=\"indexOffset\">The index in the array of indices of the first index to use</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"numVertices\">The number of vertices to draw.</param>\n        /// <param name=\"indexData\">The index data.</param>\n        /// <remarks>The <see cref=\"VertexDeclaration\"/> will be found by getting <see cref=\"IVertexType.VertexDeclaration\"/>\n        /// from an instance of <typeparamref name=\"T\"/> and cached for subsequent calls.</remarks>\n        /// <remarks>All indices in the vertex buffer are interpreted relative to the specified <paramref name=\"vertexOffset\"/>.\n        /// For example a value of zero in the array of indices points to the vertex at index <paramref name=\"vertexOffset\"/>\n        /// in the array of vertices.</remarks>\n        public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType\n        {\n            CurrentContext.DrawUserIndexedPrimitives<T>(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount);\n        }\n\n        /// <summary>\n        /// Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the vertices.</typeparam>\n        /// <param name=\"primitiveType\">The type of primitives to draw with the vertices.</param>\n        /// <param name=\"vertexData\">An array of vertices to draw.</param>\n        /// <param name=\"vertexOffset\">The index in the array of the first vertex to draw.</param>\n        /// <param name=\"indexOffset\">The index in the array of indices of the first index to use</param>\n        /// <param name=\"primitiveCount\">The number of primitives to draw.</param>\n        /// <param name=\"numVertices\">The number of vertices to draw.</param>\n        /// <param name=\"indexData\">The index data.</param>\n        /// <param name=\"vertexDeclaration\">The layout of the vertices.</param>\n        /// <remarks>All indices in the vertex buffer are interpreted relative to the specified <paramref name=\"vertexOffset\"/>.\n        /// For example value of zero in the array of indices points to the vertex at index <paramref name=\"vertexOffset\"/>\n        /// in the array of vertices.</remarks>\n        public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct\n        {\n            CurrentContext.DrawUserIndexedPrimitives<T>(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration);\n        }\n\n        /// <summary>\n        /// Draw instanced geometry from the bound vertex buffers and index buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"minVertexIndex\">This is unused and remains here only for XNA API compatibility.</param>\n        /// <param name=\"numVertices\">This is unused and remains here only for XNA API compatibility.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives in a single instance.</param>\n        /// <param name=\"instanceCount\">The number of instances to render.</param>\n        /// <remarks>Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored.</remarks>\n        public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount)\n        {\n            CurrentContext.DrawInstancedPrimitives(primitiveType, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount, instanceCount);\n        }\n\n        /// <summary>\n        /// Draw instanced geometry from the bound vertex buffers and index buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives in a single instance.</param>\n        /// <param name=\"instanceCount\">The number of instances to render.</param>\n        /// <remarks>Draw geometry with data from multiple bound vertex streams at different frequencies.</remarks>\n        public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int instanceCount)\n        {\n            CurrentContext.DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, instanceCount);\n        }\n\n        /// <summary>\n        /// Draw instanced geometry from the bound vertex buffers and index buffer.\n        /// </summary>\n        /// <param name=\"primitiveType\">The type of primitives in the index buffer.</param>\n        /// <param name=\"baseVertex\">Used to offset the vertex range indexed from the vertex buffer.</param>\n        /// <param name=\"startIndex\">The index within the index buffer to start drawing from.</param>\n        /// <param name=\"primitiveCount\">The number of primitives in a single instance.</param>\n        /// <param name=\"baseInstance\">Used to offset the instance range indexed from the instance buffer.</param>\n        /// <param name=\"instanceCount\">The number of instances to render.</param>\n        /// <remarks>Draw geometry with data from multiple bound vertex streams at different frequencies.</remarks>\n        public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount)\n        {\n            CurrentContext.DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, baseInstance, instanceCount);\n        }\n\n        /// <summary>\n        /// Sends queued-up commands in the command buffer to the graphics processing unit (GPU).\n        /// </summary>\n        public void Flush()\n        {\n            CurrentContext.Flush();\n        }\n\n        /// <summary>\n        /// Gets the Pixel data of what is currently drawn on screen.\n        /// The format is whatever the current format of the backbuffer is.\n        /// </summary>\n        /// <typeparam name=\"T\">A byte[] of size (ViewPort.Width * ViewPort.Height * 4)</typeparam>\n        public void GetBackBufferData<T>(T[] data) where T : struct\n        {\n            GetBackBufferData(null, data, 0, data.Length);\n        }\n\n        public void GetBackBufferData<T>(T[] data, int startIndex, int elementCount) where T : struct\n        {\n            GetBackBufferData(null, data, startIndex, elementCount);\n        }\n\n        public unsafe void GetBackBufferData<T>(Rectangle? rect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n\n            int width, height;\n            if (rect.HasValue)\n            {\n                Rectangle rectangle = rect.Value;\n                width = rectangle.Width;\n                height = rectangle.Height;\n\n                if (rectangle.X < 0 || rectangle.Y < 0 || rectangle.Width <= 0 || rectangle.Height <= 0 ||\n                    rectangle.Right > PresentationParameters.BackBufferWidth || rectangle.Top > PresentationParameters.BackBufferHeight)\n                    throw new ArgumentException(\"Rectangle must fit in BackBuffer dimensions\");\n            }\n            else\n            {\n                width = PresentationParameters.BackBufferWidth;\n                height = PresentationParameters.BackBufferHeight;\n            }\n\n            int tSize = sizeof(T);\n            int fSize = PresentationParameters.BackBufferFormat.GetSize();\n            if (tSize > fSize || fSize % tSize != 0)\n                throw new ArgumentException(\"Type T is of an invalid size for the format of this texture.\", \"T\");\n            if (startIndex < 0 || startIndex >= data.Length)\n                throw new ArgumentException(\"startIndex must be at least zero and smaller than data.Length.\", \"startIndex\");\n            if (data.Length < startIndex + elementCount)\n                throw new ArgumentException(\"The data array is too small.\");\n            int dataByteSize = width * height * fSize;\n\n            if (elementCount * tSize != dataByteSize)\n                throw new ArgumentException(string.Format(\"elementCount is not the right size, \" +\n                                            \"elementCount * sizeof(T) is {0}, but data size is {1} bytes.\",\n                                            elementCount * tSize, dataByteSize), \"elementCount\");\n\n            _strategy.GetBackBufferData(rect, data, startIndex, elementCount);\n        }\n\n        // uniformly scales down the given rectangle by 10%\n        internal static Rectangle GetDefaultTitleSafeArea(int x, int y, int width, int height)\n        {\n            int marginX = (width + 19) / 20;\n            int marginY = (height + 19) / 20;\n            x += marginX;\n            y += marginY;\n\n            width -= marginX * 2;\n            height -= marginY * 2;\n            return new Rectangle(x, y, width, height);\n        }\n\n        internal static Rectangle GetTitleSafeArea(int x, int y, int width, int height)\n        {\n            return new Rectangle(x, y, width, height);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsDeviceStatus.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Describes the status of the <see cref=\"GraphicsDevice\"/>.\n    /// </summary>\n    public enum GraphicsDeviceStatus\n    {\n        /// <summary>\n        /// The device is normal.\n        /// </summary>\n        Normal,\n        /// <summary>\n        /// The device has been lost.\n        /// </summary>\n        Lost,\n        /// <summary>\n        /// The device has not been reset.\n        /// </summary>\n        NotReset\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsDeviceStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Reflection;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformGraphicsDevice\n    {\n        GraphicsDeviceStrategy Strategy { get; }\n\n        event EventHandler<PresentationEventArgs> PresentationChanged;\n    }\n\n    public abstract class GraphicsDeviceStrategy : IDisposable\n    {\n        GraphicsDevice _device;\n        private bool _isDisposed;\n\n        private GraphicsAdapter _graphicsAdapter;\n        private readonly GraphicsProfile _graphicsProfile;\n        private bool _useHalfPixelOffset;\n        private PresentationParameters _presentationParameters;\n        protected internal GraphicsContext _mainContext;\n\n        /// <summary>\n        /// The cache of effects from unique byte streams.\n        /// </summary>\n        public readonly Dictionary<int, Effect> EffectCache = new Dictionary<int, Effect>();\n\n\n        /// <summary>\n        /// Raised when the GraphicsResource is disposed or finalized.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposing;\n\n        internal event EventHandler<EventArgs> ContextLost;\n        internal event EventHandler<EventArgs> DeviceReset;\n        internal event EventHandler<EventArgs> DeviceResetting;\n\n        internal event EventHandler<PresentationEventArgs> PresentationChanged;\n\n\n        public GraphicsDevice Device { get { return _device; } }\n\n        public bool IsDisposed\n        {\n            get { return _isDisposed; }\n        }\n\n        public GraphicsAdapter Adapter\n        {\n            get { return _graphicsAdapter; }\n            protected set { _graphicsAdapter = value; }\n        }\n\n        public DisplayMode DisplayMode\n        {\n            get { return _graphicsAdapter.CurrentDisplayMode; }\n        }\n\n        public GraphicsProfile GraphicsProfile\n        {\n            get { return _graphicsProfile; }\n        }\n\n        public bool UseHalfPixelOffset\n        {\n            get { return _useHalfPixelOffset; }\n        }\n\n        public PresentationParameters PresentationParameters\n        {\n            get { return _presentationParameters; }\n            protected set { _presentationParameters = value; }\n        }\n\n        public GraphicsCapabilities Capabilities\n        {\n            get { return ((IPlatformGraphicsContext)_mainContext).Strategy.Capabilities; }\n        }\n\n        public GraphicsContext MainContext { get { return _mainContext; } }\n\n        public GraphicsContext CurrentContext { get { return _mainContext; } }\n\n\n        protected GraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters)\n        {\n            if (adapter == null)\n                throw new ArgumentNullException(\"adapter\");\n            if (!adapter.IsProfileSupported(graphicsProfile))\n                throw new NoSuitableGraphicsDeviceException(String.Format(\"Adapter '{0}' does not support the {1} profile.\", adapter.Description, graphicsProfile));\n            if (presentationParameters == null)\n                throw new ArgumentNullException(\"presentationParameters\");\n\n            this._device = device;\n            this._graphicsAdapter = adapter;\n            this._graphicsProfile = graphicsProfile;\n            this._useHalfPixelOffset = preferHalfPixelOffset;\n            this._presentationParameters = presentationParameters;\n\n        }\n\n        internal void Initialize()\n        {\n            // Setup\n            _mainContext = this.CreateGraphicsContext();\n\n            this.PlatformInitialize();\n\n            // Set the default render target.\n             ((IPlatformGraphicsContext)_mainContext).Strategy.ApplyRenderTargets(null);\n        }\n\n        protected abstract void PlatformInitialize();\n\n        protected void OnContextLost(EventArgs e)\n        {\n            var handler = ContextLost;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        internal void OnDeviceResetting(EventArgs e)\n        {\n            var handler = DeviceResetting;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        internal void OnPresentationChanged(PresentationEventArgs e)\n        {\n            var handler = PresentationChanged;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        protected internal void OnDeviceReset(EventArgs e)\n        {\n            var handler = DeviceReset;\n            if (handler != null)\n                handler(this, e);\n        }\n\n\n        public abstract void Reset();\n        public abstract void Reset(PresentationParameters presentationParameters);\n        public abstract void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle);\n        public virtual void Present()\n        {\n            // reset _graphicsMetrics\n            ((IPlatformGraphicsContext)MainContext).Strategy._graphicsMetrics = new GraphicsMetrics();\n        }\n\n        public abstract void GetBackBufferData<T>(Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct;\n                \n\n        public abstract GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context);\n\n        protected GraphicsContext CreateGraphicsContext()\n        {\n            return new GraphicsContext(this);\n        }\n\n        public T ToConcrete<T>() where T : GraphicsDeviceStrategy\n        {\n            return (T)this;\n        }\n\n        public abstract Assembly ConcreteAssembly { get; }\n\n        internal const string ResourceNameAlphaTestEffect = \"Resources.AlphaTestEffect.fxo\";\n        internal const string ResourceNameBasicEffect = \"Resources.BasicEffect.fxo\";\n        internal const string ResourceNameDualTextureEffect = \"Resources.DualTextureEffect.fxo\";\n        internal const string ResourceNameEnvironmentMapEffect = \"Resources.EnvironmentMapEffect.fxo\";\n        internal const string ResourceNameSkinnedEffect = \"Resources.SkinnedEffect.fxo\";\n        internal const string ResourceNameSpriteEffect = \"Resources.SpriteEffect.fxo\";\n\n        internal byte[] GetResourceStreamBytes(string resourceName)\n        {\n            Stream stream = ConcreteAssembly.GetManifestResourceStream(resourceName);\n            byte[] bytecode = new byte[stream.Length];\n            stream.Read(bytecode, 0, (int)stream.Length);\n            return bytecode;\n        }\n\n        #region IDisposable Members\n\n        ~GraphicsDeviceStrategy()\n        {\n            _isDisposed = true;\n            OnDisposing(EventArgs.Empty);\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            if (!_isDisposed)\n            {\n                _isDisposed = true;\n                OnDisposing(EventArgs.Empty);\n                Dispose(true);\n                GC.SuppressFinalize(this);\n            }\n        }\n\n        private void OnDisposing(EventArgs e)\n        {\n            var handler = Disposing;\n            if (handler != null)\n                handler(this, e);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                // Clear the effect cache.\n                this.EffectCache.Clear();\n\n                if (_mainContext != null)\n                {\n                    _mainContext.Dispose();\n                    _mainContext = null;\n                }\n\n                _device = null;\n            }\n        }\n\n\n        #endregion IDisposable Members\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsFactory.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class GraphicsFactory\n    {\n        private volatile static GraphicsFactory _current;\n\n        internal static GraphicsFactory Current\n        {\n            get\n            {\n                GraphicsFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (typeof(GraphicsFactory))\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"GraphicsFactory not found.\");\n                    Console.WriteLine(\"Initialize graphics with 'GraphicsFactory.RegisterGraphicsFactory(new ConcreteGraphicsFactory());'.\");\n                    GraphicsFactory graphicsFactory = CreateGraphicsFactory();\n                    GraphicsFactory.RegisterGraphicsFactory(graphicsFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static GraphicsFactory CreateGraphicsFactory()\n        {\n            Console.WriteLine(\"Registering Concrete GraphicsFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.Graphics.ConcreteGraphicsFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(GraphicsFactory)) && !type.IsAbstract)\n                    return (GraphicsFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterGraphicsFactory(GraphicsFactory graphicsFactory)\n        {\n            if (graphicsFactory == null)\n                throw new NullReferenceException(\"graphicsFactory\");\n\n            lock (typeof(GraphicsFactory))\n            {\n                if (_current == null)\n                    _current = graphicsFactory;\n                else\n                    throw new InvalidOperationException(\"GraphicsFactory allready registered.\");\n            }\n        }\n\n        public abstract GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy();\n        public abstract GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters);\n        public abstract SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity);\n    }\n\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsMetrics.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// A snapshot of rendering statistics from <see cref=\"GraphicsDevice.Metrics\"/> to be used for runtime debugging and profiling.\n    /// </summary>\n    public struct GraphicsMetrics\n    {\n        internal long _clearCount;\n        internal long _drawCount;\n        internal long _pixelShaderCount;\n        internal long _primitiveCount;\n        internal long _spriteCount;\n        internal long _targetCount;\n        internal long _textureCount;\n        internal long _vertexShaderCount;\n\n        /// <summary>\n        /// Number of times Clear was called.\n        /// </summary>\n        public long ClearCount { get { return _clearCount; } }\n\n        /// <summary>\n        /// Number of times Draw was called.\n        /// </summary>\n        public long DrawCount { get { return _drawCount; } }\n\n        /// <summary>\n        /// Number of times the pixel shader was changed on the GPU.\n        /// </summary>\n        public long PixelShaderCount { get { return _pixelShaderCount; } }\n\n        /// <summary>\n        /// Number of rendered primitives.\n        /// </summary>\n        public long PrimitiveCount { get { return _primitiveCount; } }\n\n        /// <summary>\n        /// Number of sprites and text characters rendered via <see cref=\"SpriteBatch\"/>.\n        /// </summary>\n        public long SpriteCount { get { return _spriteCount; } }\n\n        /// <summary>\n        /// Number of times a target was changed on the GPU.\n        /// </summary>\n        public long TargetCount {get { return _targetCount; } }\n\n        /// <summary>\n        /// Number of times a texture was changed on the GPU.\n        /// </summary>\n        public long TextureCount { get { return _textureCount; } }\n\n        /// <summary>\n        /// Number of times the vertex shader was changed on the GPU.\n        /// </summary>\n        public long VertexShaderCount { get { return _vertexShaderCount; } }\n\n        /// <summary>\n        /// Returns the difference between two sets of metrics.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"GraphicsMetrics\"/> on the left of the sub sign.</param>\n        /// <param name=\"right\">Source <see cref=\"GraphicsMetrics\"/> on the right of the sub sign.</param>\n        /// <returns>Difference between two sets of metrics.</returns>\n        public static GraphicsMetrics operator -(GraphicsMetrics left, GraphicsMetrics right)\n        {\n            return new GraphicsMetrics()\n            {\n                _clearCount = left._clearCount - right._clearCount,\n                _drawCount = left._drawCount - right._drawCount,\n                _pixelShaderCount = left._pixelShaderCount - right._pixelShaderCount,\n                _primitiveCount = left._primitiveCount - right._primitiveCount,\n                _spriteCount = left._spriteCount - right._spriteCount,\n                _targetCount = left._targetCount - right._targetCount,\n                _textureCount = left._textureCount - right._textureCount,\n                _vertexShaderCount = left._vertexShaderCount - right._vertexShaderCount\n            };\n        }\n\n        /// <summary>\n        /// Returns the combination of two sets of metrics.\n        /// </summary>\n        /// <param name=\"left\">Source <see cref=\"GraphicsMetrics\"/> on the left of the add sign.</param>\n        /// <param name=\"right\">Source <see cref=\"GraphicsMetrics\"/> on the right of the add sign.</param>\n        /// <returns>Combination of two sets of metrics.</returns>\n        public static GraphicsMetrics operator +(GraphicsMetrics left, GraphicsMetrics right)\n        {\n            return new GraphicsMetrics()\n            {\n                _clearCount =  left._clearCount + right._clearCount,\n                _drawCount = left._drawCount + right._drawCount,\n                _pixelShaderCount = left._pixelShaderCount + right._pixelShaderCount,\n                _primitiveCount = left._primitiveCount + right._primitiveCount,\n                _spriteCount = left._spriteCount + right._spriteCount,\n                _targetCount = left._targetCount + right._targetCount,\n                _textureCount = left._textureCount + right._textureCount,\n                _vertexShaderCount = left._vertexShaderCount + right._vertexShaderCount\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsProfile.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines a set of graphic capabilities.\n    /// </summary>\n    public enum GraphicsProfile\n    {\n        /// <summary>\n        /// Use a limited set of graphic features and capabilities, allowing the game to support the widest variety of devices.\n        /// </summary>\n        Reach = 0,\n        /// <summary>\n        /// Use the largest available set of graphic features and capabilities to target devices, that have more enhanced graphic capabilities.        \n        /// </summary>\n        HiDef = 1,\n\n        FL10_0 = 2,\n        FL10_1 = 3,\n        FL11_0 = 4,\n        FL11_1 = 5,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsResource.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public abstract class GraphicsResource : IDisposable\n    {\n        private IGraphicsResourceStrategy _strategy;\n\n        private bool _isDisposed;\n\n        public string Name { get; set; }\n\n        public Object Tag { get; set; }\n\n        public bool IsDisposed { get { return _isDisposed; } }\n\n        public GraphicsDevice GraphicsDevice\n        { \n            get \n            {\n                if (_strategy != null)\n                    return _strategy.GraphicsDevice;\n\n                return null;\n            } \n        }\n\n        /// <summary>\n        /// Raised when the GraphicsResource is disposed or finalized.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposing;\n\n        protected GraphicsResource()\n        {\n            // parent class will set the _strategy\n        }\n\n        protected GraphicsResource(GraphicsDevice device)\n        {\n            if (device == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n\n            IGraphicsResourceStrategy strategy = new GraphicsResourceStrategy();\n            SetResourceStrategy(strategy);\n            Debug.Assert(device != null);\n            ((GraphicsResourceStrategy)_strategy).BindGraphicsDevice(((IPlatformGraphicsDevice)device).Strategy);\n        }\n\n        protected void SetResourceStrategy(IGraphicsResourceStrategy strategy)\n        {\n            Debug.Assert(_strategy == null);\n\n            _strategy = strategy;\n            _strategy.GraphicsResource = this;\n        }\n\n        ~GraphicsResource()\n        {\n             Dispose(false);\n        }\n\n\n\n        /// <summary>\n        /// Called before the device is reset. Allows graphics resources to \n        /// invalidate their state so they can be recreated after the device reset.\n        /// Warning: This may be called after a call to Dispose() up until\n        /// the resource is garbage collected.\n        /// </summary>\n        internal protected virtual void GraphicsContextLost()\n        {\n\n        }\n\n        internal void GraphicsResourceStrategy_ContextLost()\n        {\n            GraphicsContextLost();\n        }\n\n        internal void GraphicsResourceStrategy_DeviceDisposing()\n        {\n            this.Dispose();\n        }\n\n        public void Dispose()\n        {\n            if (!IsDisposed)\n            {\n                Dispose(true);\n                GC.SuppressFinalize(this);\n\n                _isDisposed = true;\n            }\n        }\n\n        internal void OnDisposing()\n        {\n            var handler = Disposing;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        /// <summary>\n        /// The method that derived classes should override to implement disposing of managed and native resources.\n        /// </summary>\n        /// <param name=\"disposing\">True if managed objects should be disposed.</param>\n        /// <remarks>Native resources should always be released regardless of the value of the disposing parameter.</remarks>\n        protected virtual void Dispose(bool disposing)\n        {\n            System.Diagnostics.Debug.Assert(!IsDisposed);\n\n            if (disposing)\n            {\n                if (_strategy != null)\n                {\n                    _strategy.Dispose();\n                    _strategy.GraphicsResource = null;\n                }\n            }\n        }\n\n\n        public override string ToString()\n        {\n            return string.IsNullOrEmpty(Name) ? base.ToString() : Name;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/GraphicsResourceStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class GraphicsResourceStrategy : IGraphicsResourceStrategy\n    {\n        private GraphicsDeviceStrategy _deviceStrategy;\n        private WeakDeviceStrategyEvents _deviceStrategyEvents;\n        private readonly WeakReference _graphicsResourceRef = new WeakReference(null);\n\n        public GraphicsDeviceStrategy GraphicsDeviceStrategy\n        {\n            get { return _deviceStrategy; }\n        }\n\n        public GraphicsDevice GraphicsDevice\n        { \n            get \n            {\n                if (_deviceStrategy != null)\n                    return _deviceStrategy.Device;\n\n                return null;\n            }\n        }\n\n        GraphicsResource IGraphicsResourceStrategy.GraphicsResource\n        {\n            get { return _graphicsResourceRef.Target as GraphicsResource;}\n            set \n            {\n                if (_graphicsResourceRef.Target != null || value != null)\n                    _graphicsResourceRef.Target = value;\n            }\n        }\n\n        internal GraphicsResourceStrategy()\n        {\n        }\n\n        public GraphicsResourceStrategy(GraphicsContextStrategy contextStrategy)\n        {\n            BindGraphicsDevice(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy);\n        }\n\n        public GraphicsResourceStrategy(GraphicsResourceStrategy source)\n        {\n            BindGraphicsDevice(source._deviceStrategy);\n        }\n\n        internal void BindGraphicsDevice(GraphicsDeviceStrategy deviceStrategy)\n        {\n            _deviceStrategy = deviceStrategy;\n\n            _deviceStrategyEvents = new WeakDeviceStrategyEvents(this, _deviceStrategy);\n        }\n\n        private void GraphicsDeviceStrategy_ContextLost(object sender, EventArgs e)\n        {\n            OnContextLost(e);\n            PlatformGraphicsContextLost();\n        }\n\n        private void GraphicsDeviceStrategy_Disposing(object sender, EventArgs e)\n        {\n            OnDeviceDisposing(e);\n        }\n\n        private void OnContextLost(EventArgs e)\n        {\n            if (_graphicsResourceRef.Target != null)\n            {\n                GraphicsResource graphicsResource = (GraphicsResource)_graphicsResourceRef.Target;\n                graphicsResource.GraphicsResourceStrategy_ContextLost();\n            }\n        }\n\n        private void OnDeviceDisposing(EventArgs e)\n        {\n            if (_graphicsResourceRef.Target != null)\n            {\n                GraphicsResource graphicsResource = (GraphicsResource)_graphicsResourceRef.Target;\n                graphicsResource.GraphicsResourceStrategy_DeviceDisposing();\n            }\n        }\n\n        protected virtual void PlatformGraphicsContextLost()\n        {\n\n        }\n\n\n        #region IDisposable Members\n\n        ~GraphicsResourceStrategy()\n        {\n            OnDisposing(EventArgs.Empty);\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            OnDisposing(EventArgs.Empty);\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        internal void OnDisposing(EventArgs e)\n        {\n            if (_graphicsResourceRef.Target != null)\n            {\n                GraphicsResource graphicsResource = (GraphicsResource)_graphicsResourceRef.Target;\n                graphicsResource.OnDisposing();\n            }\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            if (_deviceStrategyEvents != null)\n            {\n                _deviceStrategyEvents.Dispose();\n                _deviceStrategyEvents = null;\n            }\n\n            _deviceStrategy = null;\n        }\n\n        #endregion IDisposable Members\n\n\n        private sealed class  WeakDeviceStrategyEvents : IDisposable\n        {\n            readonly WeakReference _resourceStrategyRef;\n            GraphicsDeviceStrategy _deviceStrategy;\n\n            internal WeakDeviceStrategyEvents(GraphicsResourceStrategy resourceStrategy, GraphicsDeviceStrategy deviceStrategy)\n            {\n                _resourceStrategyRef = new WeakReference(resourceStrategy);\n                _deviceStrategy = deviceStrategy;\n\n                _deviceStrategy.ContextLost += this.GraphicsDeviceStrategy_ContextLost;\n                _deviceStrategy.Disposing += this.GraphicsDeviceStrategy_Disposing;\n            }\n\n            private void GraphicsDeviceStrategy_ContextLost(object sender, EventArgs e)\n            {\n                if (_resourceStrategyRef.IsAlive)\n                    ((GraphicsResourceStrategy)_resourceStrategyRef.Target).GraphicsDeviceStrategy_ContextLost(sender, e);\n            }\n\n            private void GraphicsDeviceStrategy_Disposing(object sender, EventArgs e)\n            {\n                if (_resourceStrategyRef.IsAlive)\n                    ((GraphicsResourceStrategy)_resourceStrategyRef.Target).GraphicsDeviceStrategy_Disposing(sender, e);\n            }\n\n            public void Dispose()\n            {\n                _deviceStrategy.ContextLost -= this.GraphicsDeviceStrategy_ContextLost;\n                _deviceStrategy.Disposing -= this.GraphicsDeviceStrategy_Disposing;\n\n                if (_resourceStrategyRef.Target != null)\n                    _resourceStrategyRef.Target = null;\n                _deviceStrategy = null;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/IGraphicsDeviceService.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Provider of a <see cref=\"Graphics.GraphicsDevice\"/>.\n    /// </summary>\n    public interface IGraphicsDeviceService\n    {\n        /// <summary>\n        /// The provided <see cref=\"Graphics.GraphicsDevice\"/>.\n        /// </summary>\n        GraphicsDevice GraphicsDevice { get; }\n\n        /// <summary>\n        /// Raised when a new <see cref=\"Graphics.GraphicsDevice\"/> has been created.\n        /// </summary>\n        event EventHandler<EventArgs> DeviceCreated;\n\n        /// <summary>\n        /// Raised when the <see cref=\"GraphicsDevice\"/> is disposed.\n        /// </summary>\n        event EventHandler<EventArgs> DeviceDisposing;\n\n        /// <summary>\n        /// Raised when the <see cref=\"GraphicsDevice\"/> has reset.\n        /// </summary>\n        /// <seealso cref=\"Microsoft.Xna.Framework.Graphics.GraphicsDevice.Reset\"/>\n        event EventHandler<EventArgs> DeviceReset;\n\n        /// <summary>\n        /// Raised before the <see cref=\"GraphicsDevice\"/> is resetting.\n        /// </summary>\n        event EventHandler<EventArgs> DeviceResetting;\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/IGraphicsResourceStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IGraphicsResourceStrategy : IDisposable\n    {\n        GraphicsDevice GraphicsDevice { get; }\n        GraphicsResource GraphicsResource { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/IRenderTarget.cs",
    "content": "﻿//// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    /// <summary>\n    /// Represents a render target.\n    /// </summary>\n    public interface IRenderTarget\n    {\n        /// <summary>\n        /// Gets the width of the render target in pixels\n        /// </summary>\n        /// <value>The width of the render target in pixels.</value>\n        int Width { get; }\n\n        /// <summary>\n        /// Gets the height of the render target in pixels\n        /// </summary>\n        /// <value>The height of the render target in pixels.</value>\n        int Height { get; }\n\n        DepthFormat DepthStencilFormat { get; }\n\n        int MultiSampleCount { get; }\n\n        /// <summary>\n        /// Gets the usage mode of the render target.\n        /// </summary>\n        /// <value>The usage mode of the render target.</value>\n        RenderTargetUsage RenderTargetUsage { get; }\n\n        IRenderTargetStrategy RenderTargetStrategy { get; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/IRenderTarget2DStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IRenderTarget2DStrategy : ITexture2DStrategy, IRenderTargetStrategy\n    {\n\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/IRenderTarget3DStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IRenderTarget3DStrategy : ITexture3DStrategy, IRenderTargetStrategy\n    {\n\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/IRenderTargetCubeStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IRenderTargetCubeStrategy : ITextureCubeStrategy, IRenderTargetStrategy\n    {\n\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/IRenderTargetStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IRenderTargetStrategy\n    {\n\n        DepthFormat DepthStencilFormat { get; }\n        int MultiSampleCount { get; }\n        RenderTargetUsage RenderTargetUsage { get; }\n\n        bool IsContentLost { get; }\n\n        void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ITexture2DStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public enum TextureSurfaceType\n    {\n        Texture,\n        RenderTarget,\n        RenderTargetSwapChain,\n    }\n\n    public interface ITexture2DStrategy : ITextureStrategy\n    {\n        int Width { get; }\n        int Height { get; }\n        int ArraySize { get; }\n\n        Rectangle Bounds { get; }\n\n        IntPtr GetSharedHandle();\n        void SetData<T>(int level, T[] data, int startIndex, int elementCount) where T : struct;\n        void SetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct;\n        void GetData<T>(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct;\n        int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect);\n\n        void SaveAsJpeg(Stream stream, int width, int height);\n        void SaveAsPng(Stream stream, int width, int height);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ITexture3DStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface ITexture3DStrategy : ITextureStrategy\n    {\n\n        int Width { get; }\n        int Height { get; }\n        int Depth { get; }\n\n        void SetData<T>(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct;\n        void GetData<T>(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct;\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ITextureCubeStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface ITextureCubeStrategy : ITextureStrategy\n    {\n        int Size { get; }\n\n        void SetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct;\n        void GetData<T>(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct;\n        int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect);\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ITextureStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformTexture\n    {\n        T GetTextureStrategy<T>() where T : ITextureStrategy;\n    }\n\n    public interface ITextureStrategy\n    {\n        SurfaceFormat Format { get; }\n        int LevelCount { get; }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Model.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// A basic 3D model with per mesh parent bones.\n    /// </summary>\n    public sealed class Model\n    {\n        private Matrix[] _cachedBoneTransforms;\n        \n        /// <summary>\n        /// A collection of <see cref=\"ModelBone\"/> objects which describe how each mesh in the\n        /// mesh collection for this model relates to its parent mesh.\n        /// </summary>\n        public ModelBoneCollection Bones { get; private set; }\n\n        /// <summary>\n        /// A collection of <see cref=\"ModelMesh\"/> objects which compose the model. Each <see cref=\"ModelMesh\"/>\n        /// in a model may be moved independently and may be composed of multiple materials\n        /// identified as <see cref=\"ModelMeshPart\"/> objects.\n        /// </summary>\n        public ModelMeshCollection Meshes { get; private set; }\n\n        /// <summary>\n        /// Root bone for this model.\n        /// </summary>\n        public ModelBone Root { get; internal set; }\n\n        /// <summary>\n        /// Custom attached object.\n        /// <remarks>\n        /// Skinning data is example of attached object for model.\n        /// </remarks>\n        /// </summary>\n        public object Tag { get; set; }\n\n        /// <summary>\n        /// Constructs a model. \n        /// </summary>\n        /// <param name=\"graphicsDevice\">A valid reference to <see cref=\"GraphicsDevice\"/>.</param>\n        /// <param name=\"bones\">The collection of bones.</param>\n        /// <param name=\"meshes\">The collection of meshes.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"graphicsDevice\"/> is null.\n        /// </exception>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"bones\"/> is null.\n        /// </exception>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"meshes\"/> is null.\n        /// </exception>\n        internal Model(List<ModelBone> bones, List<ModelMesh> meshes)\n        {\n            Bones = new ModelBoneCollection(bones);\n            Meshes = new ModelMeshCollection(meshes);\n        }\n\n        /// <summary>\n        /// Draws the model meshes.\n        /// </summary>\n        /// <param name=\"world\">The world transform.</param>\n        /// <param name=\"view\">The view transform.</param>\n        /// <param name=\"projection\">The projection transform.</param>\n        /// <exception cref=\"InvalidOperationException\"></exception>\n        public void Draw(Matrix world, Matrix view, Matrix projection)\n        {\n            if (_cachedBoneTransforms == null)\n                _cachedBoneTransforms = new Matrix[this.Bones.Count];\n            \n            // Look up combined bone matrices for the entire model.\n            CopyAbsoluteBoneTransformsTo(_cachedBoneTransforms);\n\n            // Draw the model.\n            foreach (ModelMesh mesh in Meshes)\n            {\n                foreach (Effect effect in mesh.Effects)\n                {\n                    IEffectMatrices effectMatricies = effect as IEffectMatrices;\n                    if (effectMatricies != null)\n                    {\t\t\t\t\t\t\n                        effectMatricies.World = _cachedBoneTransforms[mesh.ParentBone.Index] * world;\n                        effectMatricies.View = view;\n                        effectMatricies.Projection = projection;\n                    }\n                    else\n                        throw new InvalidOperationException(\"This model contains a custom effect which does not implement the IEffectMatrices interface, so it cannot be drawn using Model.Draw(...). Instead, call ModelMesh.Draw() after setting the appropriate effect parameters.\");\n                }\n\n                mesh.Draw();\n            }\n        }\n\n        /// <summary>\n        /// Copies bone transforms relative to all parent bones of the each bone from this model to a given array.\n        /// </summary>\n        /// <param name=\"destinationBoneTransforms\">The array receiving the transformed bones.</param>\n        public void CopyAbsoluteBoneTransformsTo(Matrix[] destinationBoneTransforms)\n        {\n            if (destinationBoneTransforms == null)\n                throw new ArgumentNullException(\"destinationBoneTransforms\");\n            if (destinationBoneTransforms.Length < this.Bones.Count)\n                throw new ArgumentOutOfRangeException(\"destinationBoneTransforms\");\n\n            int count = this.Bones.Count;\n            for (int i = 0; i < count; i++)\n            {\n                ModelBone modelBone = this.Bones[i];\n\n                if (modelBone.Parent != null)\n                {\n                    int parentBoneIndex = modelBone.Parent.Index;\n                    Matrix.Multiply(ref modelBone._transform, ref destinationBoneTransforms[parentBoneIndex], out destinationBoneTransforms[i]);\n                }\n                else\n                {\n                    destinationBoneTransforms[i] = modelBone._transform;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Copies bone transforms relative to <see cref=\"Model.Root\"/> bone from a given array to this model.\n        /// </summary>\n        /// <param name=\"sourceBoneTransforms\">The array of prepared bone transform data.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"sourceBoneTransforms\"/> is null.\n        /// </exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">\n        /// <paramref name=\"sourceBoneTransforms\"/> is invalid.\n        /// </exception>\n        public void CopyBoneTransformsFrom(Matrix[] sourceBoneTransforms)\n        {\n            if (sourceBoneTransforms == null)\n                throw new ArgumentNullException(\"sourceBoneTransforms\");\n            if (sourceBoneTransforms.Length < Bones.Count)\n                throw new ArgumentOutOfRangeException(\"sourceBoneTransforms\");\n\n            int count = Bones.Count;\n            for (int i = 0; i < count; i++)\n            {\n                Bones[i].Transform = sourceBoneTransforms[i];\n            }\n        }\n\n        /// <summary>\n        /// Copies bone transforms relative to <see cref=\"Model.Root\"/> bone from this model to a given array.\n        /// </summary>\n        /// <param name=\"destinationBoneTransforms\">The array receiving the transformed bones.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"destinationBoneTransforms\"/> is null.\n        /// </exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">\n        /// <paramref name=\"destinationBoneTransforms\"/> is invalid.\n        /// </exception>\n        public void CopyBoneTransformsTo(Matrix[] destinationBoneTransforms)\n        {\n            if (destinationBoneTransforms == null)\n                throw new ArgumentNullException(\"destinationBoneTransforms\");\n            if (destinationBoneTransforms.Length < Bones.Count)\n                throw new ArgumentOutOfRangeException(\"destinationBoneTransforms\");\n\n            int count = Bones.Count;\n            for (int i = 0; i < count; i++)\n            {\n                destinationBoneTransforms[i] = Bones[i].Transform;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ModelBone.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Represents bone data for a model.\n    /// </summary>\n    public sealed class ModelBone\n    {\n        private List<ModelBone> _children = new List<ModelBone>();\n\n        internal Matrix _transform;\n\n        /// <summary>\n        /// Gets a collection of bones that are children of this bone.\n        /// </summary>\n        public ModelBoneCollection Children { get; private set; }\n\n        /// <summary>\n        /// Gets the index of this bone in the Bones collection.\n        /// </summary>\n        public int Index { get; private set; }\n\n        /// <summary>\n        /// Gets the name of this bone.\n        /// </summary>\n        public string Name { get; private set; }\n\n        /// <summary>\n        /// Gets the parent of this bone.\n        /// </summary>\n        public ModelBone Parent { get; internal set; }\n\n        /// <summary>\n        /// Gets or sets the matrix used to transform this bone relative to its parent bone.\n        /// </summary>\n        public Matrix Transform\n        { \n            get { return this._transform; }\n            set { this._transform = value; }\n        }\n        \n        internal ModelBone(int index, string name, Matrix transform)\n        {\n            Children = new ModelBoneCollection(_children);\n\n            this.Index = index;\n            this.Name = name;\n            this.Transform = transform;\n        }\n\n        // tests only\n        internal ModelBone()\n        {\n            Children = new ModelBoneCollection(_children);\n        }\n\n        internal void AddChild(ModelBone childModelBone)\n        {\n            _children.Add(childModelBone);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ModelBoneCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Represents a set of bones associated with a model.\n    /// </summary>\n    public class ModelBoneCollection : ReadOnlyCollection<ModelBone>\n    {\n        internal ModelBoneCollection(IList<ModelBone> list)\n            : base(list)\n        {\n\n        }\n\n        /// <summary>\n        /// Retrieves a ModelBone from the collection, given the name of the bone.\n        /// </summary>\n        /// <param name=\"boneName\">The name of the bone to retrieve.</param>\n        public ModelBone this[string boneName]\n        {\n            get\n            {\n                ModelBone ret;\n                if (!TryGetValue(boneName, out ret))\n                    throw new KeyNotFoundException();\n                return ret;\n            }\n        }\n\n        /// <summary>\n        /// Finds a bone with a given name if it exists in the collection.\n        /// </summary>\n        /// <param name=\"boneName\">The name of the bone to find.</param>\n        /// <param name=\"value\">The bone named boneName, if found.</param>\n        /// <returns>true if the bone was found</returns>\n        public bool TryGetValue(string boneName, out ModelBone value)\n        {\n            if (string.IsNullOrEmpty(boneName))\n                throw new ArgumentNullException(\"boneName\");\n\n            foreach (ModelBone bone in this)\n            {\n                if (bone.Name == boneName)\n                {\n                    value = bone;\n                    return true;\n                }\n            }\n\n            value = null;\n            return false;\n        }\n\n        /// <summary>\n        /// Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection.\n        /// </summary>\n        /// <returns></returns>\n        public new Enumerator GetEnumerator()\n        {\n            return new Enumerator(this);\n        }\n\n        /// <summary>\n        /// Provides the ability to iterate through the bones in an ModelMeshCollection.\n        /// </summary>\n        public struct Enumerator : IEnumerator<ModelBone>\n        {\n            private readonly ModelBoneCollection _collection;\n            private int _position;\n\n            internal Enumerator(ModelBoneCollection collection)\n            {\n                _collection = collection;\n                _position = -1;\n            }\n\n\n            /// <summary>\n            /// Gets the current element in the ModelMeshCollection.\n            /// </summary>\n            public ModelBone Current { get { return _collection[_position]; } }\n\n            /// <summary>\n            /// Advances the enumerator to the next element of the ModelMeshCollection.\n            /// </summary>\n            public bool MoveNext()\n            {\n                _position++;\n                return (_position < _collection.Count);\n            }\n\n            #region IDisposable\n\n            /// <summary>\n            /// Immediately releases the unmanaged resources used by this object.\n            /// </summary>\n            public void Dispose()\n            {\n            }\n\n            #endregion\n\n            #region IEnumerator Members\n\n            object IEnumerator.Current\n            {\n                get { return _collection[_position]; }\n            }\n\n            public void Reset()\n            {\n                _position = -1;\n            }\n\n            #endregion\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ModelEffectCollection.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    // Summary:\n    //     Represents a collection of effects associated with a model.\n    public sealed class ModelEffectCollection : ReadOnlyCollection<Effect>\n    {\n        internal ModelEffectCollection(IList<Effect> list)\n            : base(list)\n        {\n\n        }\n\n        internal ModelEffectCollection() : base(new List<Effect>())\n        {\n        }\n        \n        //ModelMeshPart needs to be able to add to ModelMesh's effects list\n        internal void Add(Effect item)\n        {\n            Items.Add(item);\n        }\n        internal void Remove(Effect item)\n        {\n            Items.Remove(item);\n        }\n\n        // Summary:\n        //     Returns a ModelEffectCollection.Enumerator that can iterate through a ModelEffectCollection.\n        public new ModelEffectCollection.Enumerator GetEnumerator()\n        {\n            return new ModelEffectCollection.Enumerator((List<Effect>)Items);\n        }\n\n        // Summary:\n        //     Provides the ability to iterate through the bones in an ModelEffectCollection.\n        public struct Enumerator : IEnumerator<Effect>, IDisposable, IEnumerator\n        {\n            List<Effect>.Enumerator _enumerator;\n            bool _isDisposed;\n\n            internal Enumerator(List<Effect> list)\n            {\n                _enumerator = list.GetEnumerator();\n                _isDisposed = false;\n            }\n\n            // Summary:\n            //     Gets the current element in the ModelEffectCollection.\n            public Effect Current { get { return _enumerator.Current; } }\n\n            // Summary:\n            //     Immediately releases the unmanaged resources used by this object.\n            public void Dispose()\n            {\n                if (!_isDisposed)\n                {\n                    _enumerator.Dispose();\n                    _isDisposed = true;\n                }\n            }\n            //\n            // Summary:\n            //     Advances the enumerator to the next element of the ModelEffectCollection.\n            public bool MoveNext() { return _enumerator.MoveNext(); }\n\n            #region IEnumerator Members\n\n            object IEnumerator.Current\n            {\n                get { return Current; }\n            }\n\n            void IEnumerator.Reset()\n            {\n                IEnumerator resetEnumerator = _enumerator;\n                resetEnumerator.Reset();\n                _enumerator = (List<Effect>.Enumerator)resetEnumerator;\n            }\n\n            #endregion\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ModelMesh.cs",
    "content": "﻿using System;\nusing Microsoft.Xna.Framework;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n\n    // Summary:\n    //     Represents a mesh that is part of a Model.\n    public sealed class ModelMesh\n    {\n        private GraphicsDevice graphicsDevice;\n\n        internal ModelMesh(GraphicsDevice graphicsDevice, List<ModelMeshPart> parts)\n        {\n            // TODO: Complete member initialization\n            this.graphicsDevice = graphicsDevice;\n            \n            MeshParts = new ModelMeshPartCollection(parts);\n            \n            for (int i = 0; i < parts.Count; i++) {\n                parts[i]._parent = this;\n            }\n            \n            Effects = new ModelEffectCollection();\n        }\n        \n        /*internal void BuildEffectList()\n        {\n            List<Effect> effects = new List<Effect>();\n            foreach (ModelMeshPart item in parts) \n            {\n                if (!effects.Contains(item.Effect))\n                {\n                    if (item.Effect != null)\n                        effects.Add(item.Effect);\n                }\n            }\n            Effects = new ModelEffectCollection(effects);\n        }*/\n        \n        // Summary:\n        //     Gets the BoundingSphere that contains this mesh.\n        public BoundingSphere BoundingSphere { get; internal set; }\n        //\n        // Summary:\n        //     Gets a collection of effects associated with this mesh.\n        public ModelEffectCollection Effects { get; internal set; }\n        //\n        // Summary:\n        //     Gets the ModelMeshPart objects that make up this mesh. Each part of a mesh\n        //     is composed of a set of primitives that share the same material.\n        public ModelMeshPartCollection MeshParts { get; private set; }\n        //\n        // Summary:\n        //     Gets the name of this mesh.\n        public string Name { get; internal set; }\n        //\n        // Summary:\n        //     Gets the parent bone for this mesh. The parent bone of a mesh contains a\n        //     transformation matrix that describes how the mesh is located relative to\n        //     any parent meshes in a model.\n        public ModelBone ParentBone { get; internal set; }\n        //\n        // Summary:\n        //     Gets or sets an object identifying this mesh.\n        public object Tag { get; set; }\n                \n        // Summary:\n        //     Draws all of the ModelMeshPart objects in this mesh, using their current\n        //     Effect settings.\n        public void Draw()\n        {\t\n            for(int i = 0; i < MeshParts.Count; i++)\n            {\n                ModelMeshPart part = MeshParts[i];\n                Effect effect = part.Effect;\n                \n                if (part.PrimitiveCount > 0)\n                {\n                    this.graphicsDevice.SetVertexBuffer(part.VertexBuffer);\n                    this.graphicsDevice.Indices = part.IndexBuffer;\n                    \n                    for (int j = 0; j < effect.CurrentTechnique.Passes.Count; j++)\n                    {\n                        effect.CurrentTechnique.Passes[j].Apply();\n                        graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, part.VertexOffset, part.StartIndex, part.PrimitiveCount);\n                    }\n                }\n            }\n        }\n    }\n\n\n    //// Summary:\n    ////     Represents a mesh that is part of a Model.\n    //public sealed class ModelMesh\n    //{\n    //    // Summary:\n    //    //     Gets the BoundingSphere that contains this mesh.\n    //    public BoundingSphere BoundingSphere { get { throw new NotImplementedException(); } }\n    //    //\n    //    // Summary:\n    //    //     Gets a collection of effects associated with this mesh.\n    //    public ModelEffectCollection Effects { get { throw new NotImplementedException(); } }\n    //    //\n    //    // Summary:\n    //    //     Gets the ModelMeshPart objects that make up this mesh. Each part of a mesh\n    //    //     is composed of a set of primitives that share the same material.\n    //    public ModelMeshPartCollection MeshParts { get { throw new NotImplementedException(); } }\n    //    //\n    //    // Summary:\n    //    //     Gets the name of this mesh.\n    //    public string Name { get { throw new NotImplementedException(); } }\n    //    //\n    //    // Summary:\n    //    //     Gets the parent bone for this mesh. The parent bone of a mesh contains a\n    //    //     transformation matrix that describes how the mesh is located relative to\n    //    //     any parent meshes in a model.\n    //    public ModelBone ParentBone { get { throw new NotImplementedException(); } }\n    //    //\n    //    // Summary:\n    //    //     Gets or sets an object identifying this mesh.\n    //    public object Tag { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } }\n\n    //    // Summary:\n    //    //     Draws all of the ModelMeshPart objects in this mesh, using their current\n    //    //     Effect settings.\n    //    public void Draw() { throw new NotImplementedException(); }\n    //}\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ModelMeshCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Represents a collection of ModelMesh objects.\n    /// </summary>\n    public sealed class ModelMeshCollection : ReadOnlyCollection<ModelMesh>\n    {\n        internal ModelMeshCollection(IList<ModelMesh> list)\n            : base(list)\n        {\n\n        }\n\n        /// <summary>\n        /// Retrieves a ModelMesh from the collection, given the name of the mesh.\n        /// </summary>\n        /// <param name=\"meshName\">The name of the mesh to retrieve.</param>\n        public ModelMesh this[string meshName]\n        {\n            get\n            {\n                ModelMesh ret;\n                if (!TryGetValue(meshName, out ret))\n                    throw new KeyNotFoundException();\n                return ret;\n            }\n        }\n\n        /// <summary>\n        /// Finds a mesh with a given name if it exists in the collection.\n        /// </summary>\n        /// <param name=\"meshName\">The name of the mesh to find.</param>\n        /// <param name=\"value\">The mesh named meshName, if found.</param>\n        /// <returns>true if a mesh was found</returns>\n        public bool TryGetValue(string meshName, out ModelMesh value)\n        {\n            if (string.IsNullOrEmpty(meshName))\n                throw new ArgumentNullException(\"meshName\");\n\n            foreach (ModelMesh mesh in this)\n            {\n                if (string.Compare(mesh.Name, meshName, StringComparison.Ordinal) == 0)\n                {\n                    value = mesh;\n                    return true;\n                }\n            }\n\n            value = null;\n            return false;\n        }\n\n        /// <summary>\n        /// Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection.\n        /// </summary>\n        /// <returns></returns>\n        public new Enumerator GetEnumerator()\n        {\n            return new Enumerator(this);\n        }\n\n        /// <summary>\n        /// Provides the ability to iterate through the bones in an ModelMeshCollection.\n        /// </summary>\n        public struct Enumerator : IEnumerator<ModelMesh>\n        {\n            private readonly ModelMeshCollection _collection;\n            private int _position;\n\n            internal Enumerator(ModelMeshCollection collection)\n            {\n                _collection = collection;\n                _position = -1;\n            }\n\n\n            /// <summary>\n            /// Gets the current element in the ModelMeshCollection.\n            /// </summary>\n            public ModelMesh Current { get { return _collection[_position]; } }\n\n            /// <summary>\n            /// Advances the enumerator to the next element of the ModelMeshCollection.\n            /// </summary>\n            public bool MoveNext()\n            {\n                _position++;\n                return (_position < _collection.Count);\n            }\n\n            #region IDisposable\n\n            /// <summary>\n            /// Immediately releases the unmanaged resources used by this object.\n            /// </summary>\n            public void Dispose()\n            {\n            }\n\n            #endregion\n\n            #region IEnumerator Members\n\n            object IEnumerator.Current\n            {\n                get { return _collection[_position]; }\n            }\n\n            /// <remarks>This is a MonoGame extension</remarks>\n            public void Reset()\n            {\n                _position = -1;\n            }\n\n            #endregion\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ModelMeshPart.cs",
    "content": "using System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public sealed class ModelMeshPart\n    {\n        private Effect _effect;\n\n        internal ModelMesh _parent;\n\n        public Effect Effect\n        {\n            get { return _effect; }\n            set \n            {\n                if (value == _effect)\n                    return;\n\n                if (_effect != null)\n                {\n                    // First check to see any other parts are also using this effect.\n                    bool removeEffect = true;\n                    foreach (ModelMeshPart part in _parent.MeshParts)\n                    {\n                        if (part != this && part._effect == _effect)\n                        {\n                            removeEffect = false;\n                            break;\n                        }\n                    }\n\n                    if (removeEffect)\n                        _parent.Effects.Remove(_effect);\n                }\n\n                // Set the new effect.\n                _effect = value;\n                \n                if (_effect != null && !_parent.Effects.Contains(_effect))                \n                    _parent.Effects.Add(_effect);\n            }\n        }\n\n        public IndexBuffer IndexBuffer { get; internal set; }\n\n        public int NumVertices { get; internal set; }\n\n        public int PrimitiveCount { get; internal set; }\n\n        public int StartIndex { get; internal set; }\n\n        public object Tag { get; set; }\n\n        public VertexBuffer VertexBuffer { get; internal set; }\n\n        public int VertexOffset { get; internal set; }\n\n        internal int VertexBufferIndex { get; set; }\n\n        internal int IndexBufferIndex { get; set; }\n\n        internal int EffectIndex { get; set; }\n        \n        internal ModelMeshPart()\n        { \n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ModelMeshPartCollection.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n\n    public sealed class ModelMeshPartCollection : ReadOnlyCollection<ModelMeshPart>\n    {\n        public ModelMeshPartCollection(IList<ModelMeshPart> list)\n            : base(list)\n        {\n\n        }\n    }\n\n    //// Summary:\n    ////     Represents a collection of ModelMeshPart objects.\n    //public sealed class ModelMeshPartCollection : ReadOnlyCollection<ModelMeshPart>\n    //{\n    //    internal ModelMeshPartCollection()\n    //        : base(new List<ModelMeshPart>())\n    //    {\n    //    }\n\n    //    // Summary:\n    //    //     Returns a ModelMeshPartCollection.Enumerator that can iterate through a ModelMeshPartCollection.\n    //    public ModelMeshPartCollection.Enumerator GetEnumerator() { throw new NotImplementedException(); }\n\n    //    // Summary:\n    //    //     Provides the ability to iterate through the bones in an ModelMeshPartCollection.\n    //    public struct Enumerator : IEnumerator<ModelMeshPart>, IDisposable, IEnumerator\n    //    {\n\n    //        // Summary:\n    //        //     Gets the current element in the ModelMeshPartCollection.\n    //        public ModelMeshPart Current { get { throw new NotImplementedException(); } }\n\n    //        // Summary:\n    //        //     Immediately releases the unmanaged resources used by this object.\n    //        public void Dispose() { throw new NotImplementedException(); }\n    //        //\n    //        // Summary:\n    //        //     Advances the enumerator to the next element of the ModelMeshPartCollection.\n    //        public bool MoveNext() { throw new NotImplementedException(); }\n\n    //        #region IEnumerator Members\n\n    //        object IEnumerator.Current\n    //        {\n    //            get { throw new NotImplementedException(); }\n    //        }\n\n    //        public void Reset()\n    //        {\n    //            throw new NotImplementedException();\n    //        }\n\n    //        #endregion\n    //    }\n    //}\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/NoSuitableGraphicsDeviceException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [DataContract]\n    public sealed class NoSuitableGraphicsDeviceException : Exception\n    {\n        public NoSuitableGraphicsDeviceException()\n            : base()\n        {\n\n        }\n\n        public NoSuitableGraphicsDeviceException(string message)\n            : base(message)\n        {\n\n        }\n\n        public NoSuitableGraphicsDeviceException(string message, Exception inner)\n            : base(message, inner)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/OcclusionQuery.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class OcclusionQuery : GraphicsResource\n        , IPlatformOcclusionQuery\n    {\n        private OcclusionQueryStrategy _strategy;\n\n        OcclusionQueryStrategy IPlatformOcclusionQuery.Strategy { get { return _strategy; } }\n\n        /// <summary>\n        /// Gets a value indicating whether the occlusion query has completed.\n        /// </summary>\n        /// <value>\n        /// <see langword=\"true\"/> if the occlusion query has completed; otherwise,\n        /// <see langword=\"false\"/>.\n        /// </value>\n        public bool IsComplete { get { return _strategy.IsComplete; } }\n\n        /// <summary>\n        /// Gets the number of visible pixels.\n        /// </summary>\n        /// <value>The number of visible pixels.</value>\n        /// <exception cref=\"InvalidOperationException\">\n        /// The occlusion query has not yet completed. Check <see cref=\"IsComplete\"/> before reading\n        /// the result!\n        /// </exception>\n        public int PixelCount\n        {\n            get\n            {\n                if (!IsComplete)\n                    throw new InvalidOperationException(\"The occlusion query has not yet completed. Check IsComplete before reading the result.\");\n\n                return _strategy.PixelCount;\n            }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"OcclusionQuery\"/> class.\n        /// </summary>\n        /// <param name=\"graphicsDevice\">The graphics device.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"graphicsDevice\"/> is <see langword=\"null\"/>.\n        /// </exception>\n        /// <exception cref=\"NotSupportedException\">\n        /// The current graphics profile does not support occlusion queries.\n        /// </exception>\n        public OcclusionQuery(GraphicsDevice graphicsDevice)\n            : base()\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                throw new NotSupportedException(\"The Reach profile does not support occlusion queries.\");\n\n            _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateOcclusionQueryStrategy();\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n        /// <summary>\n        /// Begins the occlusion query.\n        /// </summary>\n        /// <exception cref=\"InvalidOperationException\">\n        /// <see cref=\"Begin\"/> is called again before calling <see cref=\"End\"/>.\n        /// </exception>\n        public void Begin()\n        {\n            _strategy.PlatformBegin();\n        }\n\n        /// <summary>\n        /// Ends the occlusion query.\n        /// </summary>\n        /// <exception cref=\"InvalidOperationException\">\n        /// <see cref=\"End\"/> is called before calling <see cref=\"Begin\"/>.\n        /// </exception>\n        public void End()\n        {\n            _strategy.PlatformEnd();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            System.Diagnostics.Debug.Assert(!IsDisposed);\n\n            if (disposing)\n            {\n                if (_strategy != null)\n                    _strategy.Dispose();\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/OcclusionQueryStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformOcclusionQuery\n    {\n        OcclusionQueryStrategy Strategy { get; }\n    }\n\n    public abstract class OcclusionQueryStrategy : GraphicsResourceStrategy\n    {\n        protected readonly GraphicsContextStrategy _contextStrategy;\n\n\n        public abstract int PixelCount { get; }\n        public abstract bool IsComplete { get; }\n\n        protected OcclusionQueryStrategy(GraphicsContextStrategy contextStrategy)\n            : base(contextStrategy)\n        {\n            _contextStrategy = contextStrategy;\n        }\n\n        public abstract void PlatformBegin();\n\n        public abstract void PlatformEnd();\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Alpha8.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing a single 8 bit normalized W values that is ranging from 0 to 1.\n    /// </summary>\n    public struct Alpha8 : IPackedVector<byte>, IEquatable<Alpha8>, IPackedVector\n    {\n        private byte _packedValue;\n\n        /// <summary>\n        /// Gets and sets the packed value.\n        /// </summary>\n        [CLSCompliant(false)]\n        public byte PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        /// <summary>\n        /// Creates a new instance of Alpha8.\n        /// </summary>\n        /// <param name=\"alpha\">The alpha component</param>\n        public Alpha8(float alpha)\n        {\n            _packedValue = Pack(alpha);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in float format.\n        /// </summary>\n        /// <returns>The packed vector in Vector3 format</returns>\n        public float ToAlpha()\n        {\n            return (float) (_packedValue / 255.0f);\n        }\n\n        /// <summary>\n        /// Sets the packed vector from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.W);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(\n                0.0f,\n                0.0f,\n                0.0f,\n                (float) (_packedValue / 255.0f)\n            );\n        }\n\n        /// <summary>\n        /// Compares an object with the packed vector.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare.</param>\n        /// <returns>True if the object is equal to the packed vector.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Alpha8) && Equals((Alpha8) obj);\n        }\n\n        /// <summary>\n        /// Compares another Alpha8 packed vector with the packed vector.\n        /// </summary>\n        /// <param name=\"other\">The Alpha8 packed vector to compare.</param>\n        /// <returns>True if the packed vectors are equal.</returns>\n        public bool Equals(Alpha8 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        /// <summary>\n        /// Gets a string representation of the packed vector.\n        /// </summary>\n        /// <returns>A string representation of the packed vector.</returns>\n        public override string ToString()\n        {\n            return (_packedValue / 255.0f).ToString();\n        }\n\n        /// <summary>\n        /// Gets a hash code of the packed vector.\n        /// </summary>\n        /// <returns>The hash code for the packed vector.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public static bool operator ==(Alpha8 left, Alpha8 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        public static bool operator !=(Alpha8 left, Alpha8 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n\n        private static byte Pack(float alpha)\n        {\n            return (byte) Math.Round(\n                MathHelper.Clamp(alpha, 0, 1) * 255.0f\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Bgr565.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing unsigned normalized values ranging from 0 to 1. The x and z components use 5 bits, and the y component uses 6 bits.\n    /// </summary>\n    public struct Bgr565 : IPackedVector<UInt16>, IEquatable<Bgr565>, IPackedVector\n    {\n        UInt16 _packedValue;\n\n        /// <summary>\n        /// Gets and sets the packed value.\n        /// </summary>\n        [CLSCompliant(false)]\n        public UInt16 PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        private static UInt16 Pack(float x, float y, float z)\n        {\n            return (UInt16) ((((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 31.0f) & 0x1F) << 11) |\n                (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 63.0f) & 0x3F) << 5) |\n                ((int) Math.Round(MathHelper.Clamp(z, 0, 1) * 31.0f) & 0x1F));\n        }\n\n        /// <summary>\n        /// Creates a new instance of Bgr565.\n        /// </summary>\n        /// <param name=\"x\">The x component</param>\n        /// <param name=\"y\">The y component</param>\n        /// <param name=\"z\">The z component</param>\n        public Bgr565(float x, float y, float z)\n        {\n            _packedValue = Pack(x, y, z);\n        }\n\n        /// <summary>\n        /// Creates a new instance of Bgr565.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components for the packed vector.</param>\n        public Bgr565(Vector3 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector3 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector3 format</returns>\n        public Vector3 ToVector3()\n        {\n            return new Vector3((float)(((_packedValue >> 11) & 0x1F) * (1.0f / 31.0f)),\n                (float)(((_packedValue >> 5) & 0x3F) * (1.0f / 63.0f)),\n                (float)((_packedValue & 0x1F) * (1.0f / 31.0f))\n                );\n        }\n\n        /// <summary>\n        /// Sets the packed vector from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = (UInt16)((((int)(vector.X * 31.0f) & 0x1F) << 11) |\n                (((int)(vector.Y * 63.0f) & 0x3F) << 5) |\n                ((int)(vector.Z * 31.0f) & 0x1F));\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(ToVector3(), 1.0f);\n        }\n\n        /// <summary>\n        /// Compares an object with the packed vector.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare.</param>\n        /// <returns>true if the object is equal to the packed vector.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj != null && (obj is Bgr565))\n                return this == (Bgr565)obj;\n            return false;\n        }\n\n        /// <summary>\n        /// Compares another Bgr565 packed vector with the packed vector.\n        /// </summary>\n        /// <param name=\"other\">The Bgr565 packed vector to compare.</param>\n        /// <returns>true if the packed vectors are equal.</returns>\n        public bool Equals(Bgr565 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        /// <summary>\n        /// Gets a string representation of the packed vector.\n        /// </summary>\n        /// <returns>A string representation of the packed vector.</returns>\n        public override string ToString()\n        {\n            return ToVector3().ToString();\n        }\n\n        /// <summary>\n        /// Gets a hash code of the packed vector.\n        /// </summary>\n        /// <returns>The hash code for the packed vector.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public static bool operator ==(Bgr565 left, Bgr565 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        public static bool operator !=(Bgr565 left, Bgr565 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Bgra4444.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing unsigned normalized values, ranging from 0 to 1, using 4 bits each for x, y, z, and w.\n    /// </summary>\n    public struct Bgra4444 : IPackedVector<UInt16>, IEquatable<Bgra4444>\n    {\n        UInt16 _packedValue;\n\n        /// <summary>\n        /// Gets and sets the packed value.\n        /// </summary>\n        [CLSCompliant(false)]\n        public UInt16 PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        /// <summary>\n        /// Creates a new instance of Bgra4444.\n        /// </summary>\n        /// <param name=\"x\">The x component</param>\n        /// <param name=\"y\">The y component</param>\n        /// <param name=\"z\">The z component</param>\n        /// <param name=\"w\">The w component</param>\n        public Bgra4444(float x, float y, float z, float w)\n        {\n            _packedValue = Pack(x, y, z, w);\n        }\n\n        /// <summary>\n        /// Creates a new instance of Bgra4444.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components for the packed vector.</param>\n        public Bgra4444(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        private static UInt16 Pack(float x, float y, float z, float w)\n        {\n            return (UInt16) ((((int) Math.Round(MathHelper.Clamp(w, 0, 1) * 15.0f) & 0x0F) << 12) |\n                (((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 15.0f) & 0x0F) << 8) |\n                (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 15.0f) & 0x0F) << 4) |\n                ((int) Math.Round(MathHelper.Clamp(z, 0, 1) * 15.0f) & 0x0F));\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            const float maxVal = 1 / 15.0f;\n\n            return new Vector4( ((_packedValue >> 8) & 0x0F) * maxVal,\n                                ((_packedValue >> 4) & 0x0F) * maxVal,\n                                (_packedValue & 0x0F) * maxVal,\n                                ((_packedValue >> 12) & 0x0F) * maxVal);\n        }\n\n        /// <summary>\n        /// Sets the packed vector from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        /// <summary>\n        /// Compares an object with the packed vector.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare.</param>\n        /// <returns>true if the object is equal to the packed vector.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj != null && (obj is Bgra4444))\n                return this == (Bgra4444)obj;\n            return false;\n        }\n\n        /// <summary>\n        /// Compares another Bgra4444 packed vector with the packed vector.\n        /// </summary>\n        /// <param name=\"other\">The Bgra4444 packed vector to compare.</param>\n        /// <returns>true if the packed vectors are equal.</returns>\n        public bool Equals(Bgra4444 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        /// <summary>\n        /// Gets a string representation of the packed vector.\n        /// </summary>\n        /// <returns>A string representation of the packed vector.</returns>\n        public override string ToString()\n        {\n            return ToVector4().ToString();\n        }\n\n        /// <summary>\n        /// Gets a hash code of the packed vector.\n        /// </summary>\n        /// <returns>The hash code for the packed vector.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public static bool operator ==(Bgra4444 left, Bgra4444 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        public static bool operator !=(Bgra4444 left, Bgra4444 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Bgra5551.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing unsigned normalized values ranging from 0 to 1.\n    /// The x , y and z components use 5 bits, and the w component uses 1 bit.\n    /// </summary>\n    public struct Bgra5551 : IPackedVector<UInt16>, IEquatable<Bgra5551>, IPackedVector\n    {\n        private UInt16 _packedValue;\n\n        /// <summary>\n        /// Gets and sets the packed value.\n        /// </summary>\n        [CLSCompliant(false)]\n        public UInt16 PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        /// <summary>\n        /// Creates a new instance of Bgra5551.\n        /// </summary>\n        /// <param name=\"x\">The x component</param>\n        /// <param name=\"y\">The y component</param>\n        /// <param name=\"z\">The z component</param>\n        /// <param name=\"w\">The w component</param>\n        public Bgra5551(float x, float y, float z, float w)\n        {\n            _packedValue = Pack(x, y, z, w);\n        }\n\n        /// <summary>\n        /// Creates a new instance of Bgra5551.\n        /// </summary>\n        /// <param name=\"vector\">\n        /// Vector containing the components for the packed vector.\n        /// </param>\n        public Bgra5551(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(\n                (float) (((_packedValue >> 10) & 0x1F) / 31.0f),\n                (float) (((_packedValue >> 5) & 0x1F) / 31.0f),\n                (float) (((_packedValue >> 0) & 0x1F) / 31.0f),\n                (float) ((_packedValue >> 15)& 0x01)\n            );\n        }\n\n        /// <summary>\n        /// Sets the packed vector from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        /// <summary>\n        /// Compares an object with the packed vector.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare.</param>\n        /// <returns>True if the object is equal to the packed vector.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Bgra5551) && Equals((Bgra5551) obj);\n        }\n\n        /// <summary>\n        /// Compares another Bgra5551 packed vector with the packed vector.\n        /// </summary>\n        /// <param name=\"other\">The Bgra5551 packed vector to compare.</param>\n        /// <returns>True if the packed vectors are equal.</returns>\n        public bool Equals(Bgra5551 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        /// <summary>\n        /// Gets a string representation of the packed vector.\n        /// </summary>\n        /// <returns>A string representation of the packed vector.</returns>\n        public override string ToString()\n        {\n            return ToVector4().ToString();\n        }\n\n        /// <summary>\n        /// Gets a hash code of the packed vector.\n        /// </summary>\n        /// <returns>The hash code for the packed vector.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public static bool operator ==(Bgra5551 left, Bgra5551 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        public static bool operator !=(Bgra5551 left, Bgra5551 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n\n        private static UInt16 Pack(float x, float y, float z, float w)\n        {\n            return (UInt16) (\n                (((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 31.0f) & 0x1F) << 10) |\n                (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 31.0f) & 0x1F) << 5) |\n                (((int) Math.Round(MathHelper.Clamp(z, 0, 1) * 31.0f) & 0x1F) << 0) |\n                ((((int) Math.Round(MathHelper.Clamp(w, 0, 1)) & 0x1) << 15))\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Byte4.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing four 8-bit unsigned integer values, ranging from 0 to 255.\n    /// </summary>\n    public struct Byte4 : IPackedVector<uint>, IEquatable<Byte4>, IPackedVector\n    {\n        uint _packedValue;\n\n        /// <summary>\n        /// Directly gets or sets the packed representation of the value.\n        /// </summary>\n        /// <value>The packed representation of the value.</value>\n        [CLSCompliant(false)]\n        public uint PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the Byte4 class.\n        /// </summary>\n        /// <param name=\"vector\">A vector containing the initial values for the components of the Byte4 structure.</param>\n        public Byte4(Vector4 vector)\n        {\n            _packedValue = Pack(ref vector);\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the Byte4 class.\n        /// </summary>\n        /// <param name=\"x\">Initial value for the x component.</param>\n        /// <param name=\"y\">Initial value for the y component.</param>\n        /// <param name=\"z\">Initial value for the z component.</param>\n        /// <param name=\"w\">Initial value for the w component.</param>\n        public Byte4(float x, float y, float z, float w)\n        {\n            var vector = new Vector4(x, y, z, w);\n            _packedValue = Pack(ref vector);\n        }\n\n        /// <summary>\n        /// Compares the current instance of a class to another instance to determine whether they are different.\n        /// </summary>\n        /// <param name=\"left\">The object to the left of the equality operator.</param>\n        /// <param name=\"right\">The object to the right of the equality operator.</param>\n        /// <returns>true if the objects are different; false otherwise.</returns>\n        public static bool operator !=(Byte4 left, Byte4 right)\n        {\n            return left.PackedValue != right.PackedValue;\n        }\n\n        /// <summary>\n        /// Compares the current instance of a class to another instance to determine whether they are the same.\n        /// </summary>\n        /// <param name=\"left\">The object to the left of the equality operator.</param>\n        /// <param name=\"right\">The object to the right of the equality operator.</param>\n        /// <returns>true if the objects are the same; false otherwise.</returns>\n        public static bool operator ==(Byte4 left, Byte4 right)\n        {\n            return left.PackedValue == right.PackedValue;\n        }\n\n        /// <summary>\n        /// Returns a value that indicates whether the current instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"obj\">The object with which to make the comparison.</param>\n        /// <returns>true if the current instance is equal to the specified object; false otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is Byte4)\n                return this == (Byte4)obj;\n            return false;\n        }\n\n        /// <summary>\n        /// Returns a value that indicates whether the current instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"other\">The object with which to make the comparison.</param>\n        /// <returns>true if the current instance is equal to the specified object; false otherwise.</returns>\n        public bool Equals(Byte4 other)\n        {\n            return this == other;\n        }\n\n        /// <summary>\n        /// Gets the hash code for the current instance.\n        /// </summary>\n        /// <returns>Hash code for the instance.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        /// <summary>\n        /// Returns a string representation of the current instance.\n        /// </summary>\n        /// <returns>String that represents the object.</returns>\n        public override string ToString()\n        {\n            return _packedValue.ToString(\"x8\");\n        }\n\n        /// <summary>\n        /// Packs a vector into a uint.\n        /// </summary>\n        /// <param name=\"vector\">The vector containing the values to pack.</param>\n        /// <returns>The ulong containing the packed values.</returns>\n        static uint Pack(ref Vector4 vector)\n        {\n            const float max = 255.0f;\n            const float min = 0.0f;\n\n            // clamp the value between min and max values\n            var byte4 = (uint) Math.Round(MathHelper.Clamp(vector.X, min, max)) & 0xFF;\n            var byte3 = ((uint) Math.Round(MathHelper.Clamp(vector.Y, min, max)) & 0xFF) << 0x8;\n            var byte2 = ((uint) Math.Round(MathHelper.Clamp(vector.Z, min, max)) & 0xFF) << 0x10;\n            var byte1 = ((uint) Math.Round(MathHelper.Clamp(vector.W, min, max)) & 0xFF) << 0x18;\n\n            return byte4 | byte3 | byte2 | byte1;\n        }\n\n        /// <summary>\n        /// Sets the packed representation from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">The vector to create the packed representation from.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(ref vector);\n        }\n\n        /// <summary>\n        /// Expands the packed representation into a Vector4.\n        /// </summary>\n        /// <returns>The expanded vector.</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(\n                (float)(_packedValue & 0xFF),\n                (float)((_packedValue >> 0x8) & 0xFF),\n                (float)((_packedValue >> 0x10) & 0xFF),\n                (float)((_packedValue >> 0x18) & 0xFF));\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/HalfSingle.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    public struct HalfSingle : IPackedVector<UInt16>, IEquatable<HalfSingle>, IPackedVector\n    {\n        UInt16 _packedValue;\n\n        [CLSCompliant(false)]\n        public ushort PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        public HalfSingle(float single)\n        {\n            _packedValue = HalfTypeHelper.Convert(single);\n        }\n\n        public float ToSingle()\n        {\n            return HalfTypeHelper.Convert(_packedValue);\n        }\n\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = HalfTypeHelper.Convert(vector.X);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(this.ToSingle(), 0f, 0f, 1f);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj != null && obj.GetType() == this.GetType())\n            {\n                return this == (HalfSingle)obj;\n            }\n\n            return false;\n        }\n\n        public bool Equals(HalfSingle other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        public override string ToString()\n        {\n            return this.ToSingle().ToString();\n        }\n\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public static bool operator ==(HalfSingle left, HalfSingle right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        public static bool operator !=(HalfSingle left, HalfSingle right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/HalfTypeHelper.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.InteropServices;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    internal class HalfTypeHelper\n    {\n        [StructLayout(LayoutKind.Explicit)]\n        private struct uif\n        {\n            [FieldOffset(0)]\n            public float f;\n            [FieldOffset(0)]\n            public int i;\n            [FieldOffset(0)]\n            public uint u;\n        }\n\n        internal static UInt16 Convert(float f)\n        {\n            uif uif = new uif();\n            uif.f = f;\n            return Convert(uif.i);\n        }\n\n        internal static UInt16 Convert(int i)\n        {\n            int s = (i >> 16) & 0x00008000;\n            int e = ((i >> 23) & 0x000000ff) - (127 - 15);\n            int m = i & 0x007fffff;\n\n            if (e <= 0)\n            {\n                if (e < -10)\n                {\n                    return (UInt16)s;\n                }\n\n                m = m | 0x00800000;\n\n                int t = 14 - e;\n                int a = (1 << (t - 1)) - 1;\n                int b = (m >> t) & 1;\n\n                m = (m + a + b) >> t;\n\n                return (UInt16)(s | m);\n            }\n            else if (e == 0xff - (127 - 15))\n            {\n                if (m == 0)\n                {\n                    return (UInt16)(s | 0x7c00);\n                }\n                else\n                {\n                    m >>= 13;\n                    return (UInt16)(s | 0x7c00 | m | ((m == 0) ? 1 : 0));\n                }\n            }\n            else\n            {\n                m = m + 0x00000fff + ((m >> 13) & 1);\n\n                if ((m & 0x00800000) != 0)\n                {\n                    m = 0;\n                    e += 1;\n                }\n\n                if (e > 30)\n                {\n                    return (UInt16)(s | 0x7c00);\n                }\n\n                return (UInt16)(s | (e << 10) | (m >> 13));\n            }\n        }\n\n        internal static float Convert(ushort value)\n        {\n            uint rst;\n            uint mantissa = (uint)(value & 1023);\n            uint exp = 0xfffffff2;\n\n            if ((value & -33792) == 0)\n            {\n                if (mantissa != 0)\n                {\n                    while ((mantissa & 1024) == 0)\n                    {\n                        exp--;\n                        mantissa = mantissa << 1;\n                    }\n                    mantissa &= 0xfffffbff;\n                    rst = ((uint)((((uint)value & 0x8000) << 16) | ((exp + 127) << 23))) | (mantissa << 13);\n                }\n                else\n                {\n                    rst = (uint)((value & 0x8000) << 16);\n                }\n            }\n            else\n            {\n                rst = (uint)(((((uint)value & 0x8000) << 16) | ((((((uint)value >> 10) & 0x1f) - 15) + 127) << 23)) | (mantissa << 13));\n            }\n\n            var uif = new uif();\n            uif.u = rst;\n            return uif.f;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/HalfVector2.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    public struct HalfVector2 : IPackedVector<uint>, IPackedVector, IEquatable<HalfVector2>\n    {\n        private uint _packedValue;\n\n        [CLSCompliant(false)]\n        public uint PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        public HalfVector2(float x, float y)\n        {\n            this._packedValue = PackHelper(x, y);\n        }\n\n        public HalfVector2(Vector2 vector)\n        {\n            this._packedValue = PackHelper(vector.X, vector.Y);\n        }\n\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = PackHelper(vector.X, vector.Y);\n        }\n\n        private static uint PackHelper(float vectorX, float vectorY)\n        {\n            uint word2 = HalfTypeHelper.Convert(vectorX);\n            uint word1 = (uint)(HalfTypeHelper.Convert(vectorY) << 0x10);\n            return (word2 | word1);\n        }\n\n        public Vector2 ToVector2()\n        {\n            Vector2 result;\n            result.X = HalfTypeHelper.Convert((ushort)_packedValue);\n            result.Y = HalfTypeHelper.Convert((ushort)(_packedValue >> 0x10));\n            return result;\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            Vector2 vector = this.ToVector2();\n            return new Vector4(vector.X, vector.Y, 0f, 1f);\n        }\n\n        public override string ToString()\n        {\n            return this.ToVector2().ToString();\n        }\n\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public override bool Equals(object obj)\n        {\n            return ((obj is HalfVector2) && this.Equals((HalfVector2)obj));\n        }\n\n        public bool Equals(HalfVector2 other)\n        {\n            return _packedValue.Equals(other._packedValue);\n        }\n\n        public static bool operator ==(HalfVector2 left, HalfVector2 right)\n        {\n            return left.Equals(right);\n        }\n\n        public static bool operator !=(HalfVector2 left, HalfVector2 right)\n        {\n            return !left.Equals(right);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/HalfVector4.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing four 16-bit floating-point values.\n    /// </summary>\n    public struct HalfVector4 : IPackedVector<ulong>, IPackedVector, IEquatable<HalfVector4>\n    {\n        ulong _packedValue;\n\n        /// <summary>\n        /// Directly gets or sets the packed representation of the value.\n        /// </summary>\n        /// <value>The packed representation of the value.</value>\n        [CLSCompliant(false)]\n        public ulong PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the HalfVector4 structure.\n        /// </summary>\n        /// <param name=\"x\">Initial value for the x component.</param>\n        /// <param name=\"y\">Initial value for the y component.</param>\n        /// <param name=\"z\">Initial value for the z component.</param>\n        /// <param name=\"w\">Initial value for the q component.</param>\n        public HalfVector4(float x, float y, float z, float w)\n        {\n            var vector = new Vector4(x, y, z, w);\n            _packedValue = PackHelper(ref vector);\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the HalfVector4 structure.\n        /// </summary>\n        /// <param name=\"vector\">A vector containing the initial values for the components of the HalfVector4 structure.</param>\n        public HalfVector4(Vector4 vector)\n        {\n            _packedValue = PackHelper(ref vector);\n        }\n\n        /// <summary>\n        /// Sets the packed representation from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">The vector to create the packed representation from.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = PackHelper(ref vector);\n        }\n\n        /// <summary>\n        /// Packs a vector into a ulong.\n        /// </summary>\n        /// <param name=\"vector\">The vector containing the values to pack.</param>\n        /// <returns>The ulong containing the packed values.</returns>\n        static ulong PackHelper(ref Vector4 vector)\n        {\n            ulong word4 =  (ulong)HalfTypeHelper.Convert(vector.X);\n            ulong word3 = ((ulong)HalfTypeHelper.Convert(vector.Y) << 0x10);\n            ulong word2 = ((ulong)HalfTypeHelper.Convert(vector.Z) << 0x20);\n            ulong word1 = ((ulong)HalfTypeHelper.Convert(vector.W) << 0x30);\n            return word4 | word3 | word2 | word1;\n        }\n\n        /// <summary>\n        /// Expands the packed representation into a Vector4.\n        /// </summary>\n        /// <returns>The expanded vector.</returns>\n        public Vector4 ToVector4()\n        {\n            Vector4 result;\n            result.X = HalfTypeHelper.Convert((ushort)_packedValue);\n            result.Y = HalfTypeHelper.Convert((ushort)(_packedValue >> 0x10));\n            result.Z = HalfTypeHelper.Convert((ushort)(_packedValue >> 0x20));\n            result.W = HalfTypeHelper.Convert((ushort)(_packedValue >> 0x30));\n            return result;\n        }\n\n        /// <summary>\n        /// Returns a string representation of the current instance.\n        /// </summary>\n        /// <returns>String that represents the object.</returns>\n        public override string ToString()\n        {\n            return ToVector4().ToString();\n        }\n\n        /// <summary>\n        /// Gets the hash code for the current instance.\n        /// </summary>\n        /// <returns>Hash code for the instance.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        /// <summary>\n        /// Returns a value that indicates whether the current instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"obj\">The object with which to make the comparison.</param>\n        /// <returns>true if the current instance is equal to the specified object; false otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            return ((obj is HalfVector4) && Equals((HalfVector4)obj));\n        }\n\n        /// <summary>\n        /// Returns a value that indicates whether the current instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"other\">The object with which to make the comparison.</param>\n        /// <returns>true if the current instance is equal to the specified object; false otherwise.</returns>\n        public bool Equals(HalfVector4 other)\n        {\n            return _packedValue.Equals(other._packedValue);\n        }\n\n        /// <summary>\n        /// Compares the current instance of a class to another instance to determine whether they are the same.\n        /// </summary>\n        /// <param name=\"left\">The object to the left of the equality operator.</param>\n        /// <param name=\"right\">The object to the right of the equality operator.</param>\n        /// <returns>true if the objects are the same; false otherwise.</returns>\n        public static bool operator ==(HalfVector4 left, HalfVector4 right)\n        {\n            return left.Equals(right);\n        }\n\n        /// <summary>\n        /// Compares the current instance of a class to another instance to determine whether they are different.\n        /// </summary>\n        /// <param name=\"left\">The object to the left of the equality operator.</param>\n        /// <param name=\"right\">The object to the right of the equality operator.</param>\n        /// <returns>true if the objects are different; false otherwise.</returns>\n        public static bool operator !=(HalfVector4 left, HalfVector4 right)\n        {\n            return !left.Equals(right);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/IPackedVector.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n//\n// Author: Kenneth James Pouncey\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    // http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.packedvector.ipackedvector.aspx\n    public interface IPackedVector\n    {\n        void PackFromVector4(Vector4 vector);\n        Vector4 ToVector4();\n    }\n    \n    // PackedVector Generic interface\n    // http://msdn.microsoft.com/en-us/library/bb197661.aspx\n    public interface IPackedVector<TPacked> : IPackedVector\n    {\n        TPacked PackedValue { get; set; }\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/NormalizedByte2.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    public struct NormalizedByte2 : IPackedVector<ushort>, IEquatable<NormalizedByte2>\n    {\n        private ushort _packedValue;\n\n        public NormalizedByte2(Vector2 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y);\n        }\n\n        public NormalizedByte2(float x, float y)\n        {\n            _packedValue = Pack(x, y);\n        }\n\n        public static bool operator !=(NormalizedByte2 left, NormalizedByte2 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n\n        public static bool operator ==(NormalizedByte2 left, NormalizedByte2 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        [CLSCompliant(false)]\n        public ushort PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return (obj is NormalizedByte2) &&\n                    ((NormalizedByte2)obj)._packedValue == _packedValue;\n        }\n\n        public bool Equals(NormalizedByte2 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return _packedValue.ToString(\"X\");\n        }\n\n        private static ushort Pack(float x, float y)\n        {\n            var byte2 = (((ushort) Math.Round(MathHelper.Clamp(x, -1.0f, 1.0f) * 127.0f)) & 0xFF) << 0;\n            var byte1 = (((ushort) Math.Round(MathHelper.Clamp(y, -1.0f, 1.0f) * 127.0f)) & 0xFF) << 8;\n\n            return (ushort)(byte2 | byte1);\n        }\n\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(ToVector2(), 0.0f, 1.0f);\n        }\n\n        public Vector2 ToVector2()\n        {\n            return new Vector2(\n                ((sbyte) ((_packedValue >> 0) & 0xFF)) / 127.0f,\n                ((sbyte) ((_packedValue >> 8) & 0xFF)) / 127.0f);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/NormalizedByte4.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    public struct NormalizedByte4 : IPackedVector<uint>, IEquatable<NormalizedByte4>\n    {\n        private uint _packedValue;\n\n        public NormalizedByte4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        public NormalizedByte4(float x, float y, float z, float w)\n        {\n            _packedValue = Pack(x, y, z, w);\n        }\n\n        public static bool operator !=(NormalizedByte4 left, NormalizedByte4 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n\n        public static bool operator ==(NormalizedByte4 left, NormalizedByte4 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        [CLSCompliant(false)]\n        public uint PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return  (obj is NormalizedByte4) &&\n                    ((NormalizedByte4)obj)._packedValue == _packedValue;\n        }\n\n        public bool Equals(NormalizedByte4 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return _packedValue.ToString(\"X\");\n        }\n\n        private static uint Pack(float x, float y, float z, float w)\n        {\n            var byte4 = (((uint) Math.Round(MathHelper.Clamp(x, -1.0f, 1.0f) * 127.0f)) & 0xff) << 0;\n            var byte3 = (((uint) Math.Round(MathHelper.Clamp(y, -1.0f, 1.0f) * 127.0f)) & 0xff) << 8;\n            var byte2 = (((uint) Math.Round(MathHelper.Clamp(z, -1.0f, 1.0f) * 127.0f)) & 0xff) << 16;\n            var byte1 = (((uint) Math.Round(MathHelper.Clamp(w, -1.0f, 1.0f) * 127.0f)) & 0xff) << 24;\n\n            return byte4 | byte3 | byte2 | byte1;\n        }\n\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        public Vector4 ToVector4()\n        {\n            return new Vector4(\n                ((sbyte) ((_packedValue >> 0) & 0xFF)) / 127.0f,\n                ((sbyte) ((_packedValue >> 8) & 0xFF)) / 127.0f,\n                ((sbyte) ((_packedValue >> 16) & 0xFF)) / 127.0f,\n                ((sbyte) ((_packedValue >> 24) & 0xFF)) / 127.0f);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/NormalizedShort2.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    public struct NormalizedShort2 : IPackedVector<uint>, IEquatable<NormalizedShort2>\n    {\n        private uint _packedValue;\n\n        public NormalizedShort2(Vector2 vector)\n        {\n            _packedValue = PackInTwo(vector.X, vector.Y);\n        }\n\n        public NormalizedShort2(float x, float y)\n        {\n            _packedValue = PackInTwo(x, y);\n        }\n\n        public static bool operator !=(NormalizedShort2 left, NormalizedShort2 right)\n        {\n            return !left.Equals(right);\n        }\n\n        public static bool operator ==(NormalizedShort2 left, NormalizedShort2 right)\n        {\n            return left.Equals(right);\n        }\n\n        [CLSCompliant(false)]\n        public uint PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return (obj is NormalizedShort2) && Equals((NormalizedShort2)obj);\n        }\n\n        public bool Equals(NormalizedShort2 other)\n        {\n            return _packedValue.Equals(other._packedValue);\n        }\n\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return _packedValue.ToString(\"X\");\n        }\n\n        public Vector2 ToVector2()\n        {\n            const float maxVal = 0x7FFF;\n\n            var v2 = new Vector2();\n            v2.X = ((short)(_packedValue & 0xFFFF)) / maxVal;\n            v2.Y = (short)(_packedValue >> 0x10) / maxVal;\n            return v2;\n        }\n\n        private static uint PackInTwo(float vectorX, float vectorY)\n        {\n            const float maxPos = 0x7FFF;\n            const float minNeg = -maxPos;\n\n            // clamp the value between min and max values\n            // Round rather than truncate.\n            var word2 = (uint)((int)MathHelper.Clamp((float)Math.Round(vectorX * maxPos), minNeg, maxPos) & 0xFFFF);\n            var word1 = (uint)(((int)MathHelper.Clamp((float)Math.Round(vectorY * maxPos), minNeg, maxPos) & 0xFFFF) << 0x10);\n\n            return (word2 | word1);\n        }\n\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = PackInTwo(vector.X, vector.Y);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            const float maxVal = 0x7FFF;\n\n            var v4 = new Vector4(0,0,0,1);\n            v4.X = ((short)((_packedValue >> 0x00) & 0xFFFF)) / maxVal;\n            v4.Y = ((short)((_packedValue >> 0x10) & 0xFFFF)) / maxVal;\n            return v4;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/NormalizedShort4.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    public struct NormalizedShort4 : IPackedVector<ulong>, IEquatable<NormalizedShort4>\n    {\n        private ulong _packedValue;\n\n        public NormalizedShort4(Vector4 vector)\n        {\n            _packedValue = PackInFour(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        public NormalizedShort4(float x, float y, float z, float w)\n        {\n            _packedValue = PackInFour(x, y, z, w);\n        }\n\n        public static bool operator !=(NormalizedShort4 left, NormalizedShort4 right)\n        {\n            return !left.Equals(right);\n        }\n\n        public static bool operator ==(NormalizedShort4 left, NormalizedShort4 right)\n        {\n            return left.Equals(right);\n        }\n\n        [CLSCompliant(false)]\n        public ulong PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return (obj is NormalizedShort4) && Equals((NormalizedShort4)obj);\n        }\n\n        public bool Equals(NormalizedShort4 other)\n        {\n            return _packedValue.Equals(other._packedValue);\n        }\n\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return _packedValue.ToString(\"X\");\n        }\n\n        private static ulong PackInFour(float vectorX, float vectorY, float vectorZ, float vectorW)\n        {\n            const long mask = 0xFFFF;\n            const long maxPos = 0x7FFF;\n            const long minNeg = -maxPos;\n\n            // clamp the value between min and max values\n            var word4 = (ulong)((int)Math.Round(MathHelper.Clamp(vectorX * maxPos, minNeg, maxPos)) & mask);\n            var word3 = (ulong)((int)Math.Round(MathHelper.Clamp(vectorY * maxPos, minNeg, maxPos)) & mask) << 0x10;\n            var word2 = (ulong)((int)Math.Round(MathHelper.Clamp(vectorZ * maxPos, minNeg, maxPos)) & mask) << 0x20;\n            var word1 = (ulong)((int)Math.Round(MathHelper.Clamp(vectorW * maxPos, minNeg, maxPos)) & mask) << 0x30;\n\n            return (word4 | word3 | word2 | word1);\n        }\n\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = PackInFour(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        public Vector4 ToVector4()\n        {\n            const float maxVal = 0x7FFF;\n\n            var v4 = new Vector4();\n            v4.X = ((short)((_packedValue >> 0x00) & 0xFFFF)) / maxVal;\n            v4.Y = ((short)((_packedValue >> 0x10) & 0xFFFF)) / maxVal;\n            v4.Z = ((short)((_packedValue >> 0x20) & 0xFFFF)) / maxVal;\n            v4.W = ((short)((_packedValue >> 0x30) & 0xFFFF)) / maxVal;\n            return v4;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Rg32.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing two 16-bit unsigned normalized values ranging from 0 to 1.\n    /// </summary>\n    public struct Rg32 : IPackedVector<uint>, IEquatable<Rg32>, IPackedVector\n    {\n        private uint _packedValue;\n\n        /// <summary>\n        /// Gets and sets the packed value.\n        /// </summary>\n        [CLSCompliant(false)]\n        public uint PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        /// <summary>\n        /// Creates a new instance of Rg32.\n        /// </summary>\n        /// <param name=\"x\">The x component</param>\n        /// <param name=\"y\">The y component</param>\n        public Rg32(float x, float y)\n        {\n            _packedValue = Pack(x, y);\n        }\n\n        /// <summary>\n        /// Creates a new instance of Rg32.\n        /// </summary>\n        /// <param name=\"vector\">\n        /// Vector containing the components for the packed vector.\n        /// </param>\n        public Rg32(Vector2 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector2 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector2 format</returns>\n        public Vector2 ToVector2()\n        {\n            return new Vector2(\n                (float) ((_packedValue & 0xFFFF) / 65535.0f),\n                (float)(((_packedValue >> 16) & 0xFFFF) / 65535.0f)\n            );\n        }\n\n        /// <summary>\n        /// Sets the packed vector from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(ToVector2(), 0.0f, 1.0f);\n        }\n\n        /// <summary>\n        /// Compares an object with the packed vector.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare.</param>\n        /// <returns>True if the object is equal to the packed vector.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Rg32) && Equals((Rg32) obj);\n        }\n\n        /// <summary>\n        /// Compares another Rg32 packed vector with the packed vector.\n        /// </summary>\n        /// <param name=\"other\">The Rg32 packed vector to compare.</param>\n        /// <returns>True if the packed vectors are equal.</returns>\n        public bool Equals(Rg32 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        /// <summary>\n        /// Gets a string representation of the packed vector.\n        /// </summary>\n        /// <returns>A string representation of the packed vector.</returns>\n        public override string ToString()\n        {\n            return ToVector2().ToString();\n        }\n\n        /// <summary>\n        /// Gets a hash code of the packed vector.\n        /// </summary>\n        /// <returns>The hash code for the packed vector.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public static bool operator ==(Rg32 left, Rg32 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        public static bool operator !=(Rg32 left, Rg32 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n\n        private static uint Pack(float x, float y)\n        {\n            return (uint) (\n                (((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 65535.0f) & 0xFFFF) ) |\n                (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 65535.0f) & 0xFFFF) << 16)\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Rgba1010102.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing unsigned normalized values ranging from 0 to 1.\n    /// The x, y and z components use 10 bits, and the w component uses 2 bits.\n    /// </summary>\n    public struct Rgba1010102 : IPackedVector<uint>, IEquatable<Rgba1010102>, IPackedVector\n    {\n        private uint _packedValue;\n\n        /// <summary>\n        /// Gets and sets the packed value.\n        /// </summary>\n        [CLSCompliant(false)]\n        public uint PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        /// <summary>\n        /// Creates a new instance of Rgba1010102.\n        /// </summary>\n        /// <param name=\"x\">The x component</param>\n        /// <param name=\"y\">The y component</param>\n        /// <param name=\"z\">The z component</param>\n        /// <param name=\"w\">The w component</param>\n        public Rgba1010102(float x, float y, float z, float w)\n        {\n            _packedValue = Pack(x, y, z, w);\n        }\n\n        /// <summary>\n        /// Creates a new instance of Rgba1010102.\n        /// </summary>\n        /// <param name=\"vector\">\n        /// Vector containing the components for the packed vector.\n        /// </param>\n        public Rgba1010102(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(\n                (float) (((_packedValue >> 0) & 0x03FF) / 1023.0f),\n                (float) (((_packedValue >> 10) & 0x03FF) / 1023.0f),\n                (float) (((_packedValue >> 20) & 0x03FF) / 1023.0f),\n                (float) (((_packedValue >> 30) & 0x03) / 3.0f)\n            );\n        }\n\n        /// <summary>\n        /// Sets the packed vector from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        /// <summary>\n        /// Compares an object with the packed vector.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare.</param>\n        /// <returns>True if the object is equal to the packed vector.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Rgba1010102) && Equals((Rgba1010102) obj);\n        }\n\n        /// <summary>\n        /// Compares another Rgba1010102 packed vector with the packed vector.\n        /// </summary>\n        /// <param name=\"other\">The Rgba1010102 packed vector to compare.</param>\n        /// <returns>True if the packed vectors are equal.</returns>\n        public bool Equals(Rgba1010102 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        /// <summary>\n        /// Gets a string representation of the packed vector.\n        /// </summary>\n        /// <returns>A string representation of the packed vector.</returns>\n        public override string ToString()\n        {\n            return ToVector4().ToString();\n        }\n\n        /// <summary>\n        /// Gets a hash code of the packed vector.\n        /// </summary>\n        /// <returns>The hash code for the packed vector.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public static bool operator ==(Rgba1010102 left, Rgba1010102 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        public static bool operator !=(Rgba1010102 left, Rgba1010102 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n\n        private static uint Pack(float x, float y, float z, float w)\n        {\n            return (uint) (\n                (((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 1023.0f) & 0x03FF) << 0) |\n                (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 1023.0f) & 0x03FF) << 10) |\n                (((int) Math.Round(MathHelper.Clamp(z, 0, 1) * 1023.0f) & 0x03FF) << 20) |\n                (((int) Math.Round(MathHelper.Clamp(w, 0, 1) * 3.0f) & 0x03) << 30)\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Rgba64.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing four 16-bit unsigned normalized values ranging from 0 to 1.\n    /// </summary>\n    public struct Rgba64 : IPackedVector<ulong>, IEquatable<Rgba64>, IPackedVector\n    {\n        private ulong _packedValue;\n\n        /// <summary>\n        /// Gets and sets the packed value.\n        /// </summary>\n        [CLSCompliant(false)]\n        public ulong PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n\n        /// <summary>\n        /// Creates a new instance of Rgba64.\n        /// </summary>\n        /// <param name=\"x\">The x component</param>\n        /// <param name=\"y\">The y component</param>\n        /// <param name=\"z\">The z component</param>\n        /// <param name=\"w\">The w component</param>\n        public Rgba64(float x, float y, float z, float w)\n        {\n            _packedValue = Pack(x, y, z, w);\n        }\n\n        /// <summary>\n        /// Creates a new instance of Rgba64.\n        /// </summary>\n        /// <param name=\"vector\">\n        /// Vector containing the components for the packed vector.\n        /// </param>\n        public Rgba64(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(\n                (float) (((_packedValue) & 0xFFFF) / 65535.0f),\n                (float) (((_packedValue >> 16) & 0xFFFF) / 65535.0f),\n                (float) (((_packedValue >> 32) & 0xFFFF) / 65535.0f),\n                (float) (((_packedValue >> 48) & 0xFFFF) / 65535.0f)\n            );\n        }\n\n        /// <summary>\n        /// Sets the packed vector from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">Vector containing the components.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W);\n        }\n\n        /// <summary>\n        /// Compares an object with the packed vector.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare.</param>\n        /// <returns>True if the object is equal to the packed vector.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is Rgba64) && Equals((Rgba64) obj);\n        }\n\n        /// <summary>\n        /// Compares another Rgba64 packed vector with the packed vector.\n        /// </summary>\n        /// <param name=\"other\">The Rgba64 packed vector to compare.</param>\n        /// <returns>True if the packed vectors are equal.</returns>\n        public bool Equals(Rgba64 other)\n        {\n            return _packedValue == other._packedValue;\n        }\n\n        /// <summary>\n        /// Gets a string representation of the packed vector.\n        /// </summary>\n        /// <returns>A string representation of the packed vector.</returns>\n        public override string ToString()\n        {\n            return ToVector4().ToString();\n        }\n\n        /// <summary>\n        /// Gets a hash code of the packed vector.\n        /// </summary>\n        /// <returns>The hash code for the packed vector.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public static bool operator ==(Rgba64 left, Rgba64 right)\n        {\n            return left._packedValue == right._packedValue;\n        }\n\n        public static bool operator !=(Rgba64 left, Rgba64 right)\n        {\n            return left._packedValue != right._packedValue;\n        }\n\n        private static ulong Pack(float x, float y, float z, float w)\n        {\n            return (ulong) (\n                (((ulong)Math.Round(MathHelper.Clamp(x * 0xFFFF, 0, 65535f)) ) ) |\n                (((ulong)Math.Round(MathHelper.Clamp(y * 0xFFFF, 0, 65535f)) ) << 16) |\n                (((ulong)Math.Round(MathHelper.Clamp(z * 0xFFFF, 0, 65535f)) ) << 32) |\n                (((ulong)Math.Round(MathHelper.Clamp(w * 0xFFFF, 0, 65535f)) ) << 48)\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Short2.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    public struct Short2 : IPackedVector<uint>, IEquatable<Short2>\n    {\n        private uint _packedValue;\n\n        [CLSCompliant(false)]\n        public uint PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        public Short2(Vector2 vector)\n        {\n            _packedValue = PackInTwo(vector.X, vector.Y);\n        }\n\n        public Short2(Single x,Single y)\n        {\n            _packedValue = PackInTwo(x, y);\n        }\n\n        public static bool operator !=(Short2 left, Short2 right)\n        {\n            return left.PackedValue != right.PackedValue;\n        }\n\n        public static bool operator ==(Short2 left, Short2 right)\n        {\n            return left.PackedValue == right.PackedValue;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj is Short2)\n                return this == (Short2)obj;\n            return false;\n        }\n\n        public bool Equals(Short2 other)\n        {\n            return this == other;\n        }\n\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return _packedValue.ToString(\"x8\");\n        }\n\n        public Vector2 ToVector2()\n        {\n            var v2 = new Vector2();\n            v2.X = (short)(_packedValue & 0xFFFF);\n            v2.Y = (short)(_packedValue >> 0x10);\n            return v2;\n        }\n\n        private static uint PackInTwo(float vectorX, float vectorY)\n        {\n            const float maxPos = 0x7FFF; // Largest two byte positive number 0xFFFF >> 1;\n            const float minNeg = ~(int)maxPos; // two's complement\n\n            // clamp the value between min and max values\n            var word2 = ((uint) Math.Round(MathHelper.Clamp(vectorX, minNeg, maxPos)) & 0xFFFF);\n            var word1 = (((uint) Math.Round(MathHelper.Clamp(vectorY, minNeg, maxPos)) & 0xFFFF) << 0x10);\n\n            return (word2 | word1);\n        }\n\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Short2.PackInTwo(vector.X, vector.Y);\n        }\n\n        /// <summary>\n        /// Gets the packed vector in Vector4 format.\n        /// </summary>\n        /// <returns>The packed vector in Vector4 format</returns>\n        public Vector4 ToVector4()\n        {\n            var v4 = new Vector4(0,0,0,1);\n            v4.X = (short)(_packedValue & 0xFFFF);\n            v4.Y = (short)(_packedValue >> 0x10);\n            return v4;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PackedVector/Short4.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Graphics.PackedVector\n{\n    /// <summary>\n    /// Packed vector type containing four 16-bit signed integer values.\n    /// </summary>\n    public struct Short4 : IPackedVector<ulong>, IEquatable<Short4>\n    {\n        ulong _packedValue;\n\n        /// <summary>\n        /// Directly gets or sets the packed representation of the value.\n        /// </summary>\n        /// <value>The packed representation of the value.</value>\n        [CLSCompliant(false)]\n        public ulong PackedValue\n        {\n            get { return _packedValue; }\n            set { _packedValue = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the Short4 class.\n        /// </summary>\n        /// <param name=\"vector\">A vector containing the initial values for the components of the Short4 structure.</param>\n        public Short4(Vector4 vector)\n        {\n            _packedValue = Pack(ref vector);\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the Short4 class.\n        /// </summary>\n        /// <param name=\"x\">Initial value for the x component.</param>\n        /// <param name=\"y\">Initial value for the y component.</param>\n        /// <param name=\"z\">Initial value for the z component.</param>\n        /// <param name=\"w\">Initial value for the w component.</param>\n        public Short4(float x, float y, float z, float w)\n        {\n            var vector = new Vector4(x, y, z, w);\n            _packedValue = Pack(ref vector);\n        }\n\n        /// <summary>\n        /// Compares the current instance of a class to another instance to determine whether they are different.\n        /// </summary>\n        /// <param name=\"left\">The object to the left of the equality operator.</param>\n        /// <param name=\"right\">The object to the right of the equality operator.</param>\n        /// <returns>true if the objects are different; false otherwise.</returns>\n        public static bool operator !=(Short4 left, Short4 right)\n        {\n            return left.PackedValue != right.PackedValue;\n        }\n\n        /// <summary>\n        /// Compares the current instance of a class to another instance to determine whether they are the same.\n        /// </summary>\n        /// <param name=\"left\">The object to the left of the equality operator.</param>\n        /// <param name=\"right\">The object to the right of the equality operator.</param>\n        /// <returns>true if the objects are the same; false otherwise.</returns>\n        public static bool operator ==(Short4 left, Short4 right)\n        {\n            return left.PackedValue == right.PackedValue;\n        }\n\n        /// <summary>\n        /// Returns a value that indicates whether the current instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"obj\">The object with which to make the comparison.</param>\n        /// <returns>true if the current instance is equal to the specified object; false otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is Short4)\n                return this == (Short4)obj;\n            return false;\n        }\n\n        /// <summary>\n        /// Returns a value that indicates whether the current instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"other\">The object with which to make the comparison.</param>\n        /// <returns>true if the current instance is equal to the specified object; false otherwise.</returns>\n        public bool Equals(Short4 other)\n        {\n            return this == other;\n        }\n\n        /// <summary>\n        /// Gets the hash code for the current instance.\n        /// </summary>\n        /// <returns>Hash code for the instance.</returns>\n        public override int GetHashCode()\n        {\n            return _packedValue.GetHashCode();\n        }\n\n        /// <summary>\n        /// Returns a string representation of the current instance.\n        /// </summary>\n        /// <returns>String that represents the object.</returns>\n        public override string ToString()\n        {\n            return _packedValue.ToString(\"x16\");\n        }\n\n        /// <summary>\n        /// Packs a vector into a ulong.\n        /// </summary>\n        /// <param name=\"vector\">The vector containing the values to pack.</param>\n        /// <returns>The ulong containing the packed values.</returns>\n        static ulong Pack(ref Vector4 vector)\n        {\n            const long mask = 0xFFFF;\n            const long maxPos = 0x7FFF; // Largest two byte positive number 0xFFFF >> 1;\n            const float minNeg = ~(int)maxPos; // two's complement\n\n            // clamp the value between min and max values\n            var word4 = ((ulong)((int) Math.Round(MathHelper.Clamp(vector.X, minNeg, maxPos))) & mask);\n            var word3 = ((ulong)((int) Math.Round(MathHelper.Clamp(vector.Y, minNeg, maxPos)) & mask)) << 0x10;\n            var word2 = ((ulong)((int) Math.Round(MathHelper.Clamp(vector.Z, minNeg, maxPos)) & mask)) << 0x20;\n            var word1 = ((ulong)((int) Math.Round(MathHelper.Clamp(vector.W, minNeg, maxPos)) & mask)) << 0x30;\n\n            return word4 | word3 | word2 | word1;\n        }\n\n        /// <summary>\n        /// Sets the packed representation from a Vector4.\n        /// </summary>\n        /// <param name=\"vector\">The vector to create the packed representation from.</param>\n        void IPackedVector.PackFromVector4(Vector4 vector)\n        {\n            _packedValue = Pack(ref vector);\n        }\n\n        /// <summary>\n        /// Expands the packed representation into a Vector4.\n        /// </summary>\n        /// <returns>The expanded vector.</returns>\n        public Vector4 ToVector4()\n        {\n            return new Vector4(\n                (short)((_packedValue & 0xFFFF)),\n                (short)((_packedValue >> 0x10) & 0xFFFF),\n                (short)((_packedValue >> 0x20) & 0xFFFF),\n                (short)((_packedValue >> 0x30) & 0xFFFF));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PresentInterval.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines how <see cref=\"GraphicsDevice.Present\"/> updates the game window.\n    /// </summary>\n    public enum PresentInterval\n    {\n        /// <summary>\n        /// Equivalent to <see cref=\"PresentInterval.One\"/>.\n        /// </summary>\n        Default,\n        /// <summary>\n        /// The driver waits for the vertical retrace period, before updating window client area. Present operations are not affected more frequently than the screen refresh rate.\n        /// </summary>\n        One,\n        /// <summary>\n        /// The driver waits for the vertical retrace period, before updating window client area. Present operations are not affected more frequently than every second screen refresh. \n        /// </summary>\n        Two,\n        /// <summary>\n        /// The driver updates the window client area immediately. Present operations might be affected immediately. There is no limit for framerate.\n        /// </summary>\n        Immediate,\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PresentationEventArgs.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class PresentationEventArgs : EventArgs\n    {\n        public PresentationParameters PresentationParameters { get; private set; }\n\n        internal PresentationEventArgs(PresentationParameters presentationParameters)\n        {\n            PresentationParameters = presentationParameters;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/PresentationParameters.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class PresentationParameters\n    {\n        #region Constants\n\n        public const int DefaultPresentRate = 60;\n\n        #endregion Constants\n\n        #region Private Fields\n\n        private SurfaceFormat _backBufferFormat = SurfaceFormat.Color;\n        private DepthFormat _depthStencilFormat = DepthFormat.None;\n        private int _backBufferWidth;\n        private int _backBufferHeight;\n        private int _multiSampleCount;\n        private RenderTargetUsage _renderTargetUsage = RenderTargetUsage.DiscardContents;\n        private PresentInterval _presentationInterval = PresentInterval.Default;\n        private DisplayOrientation _displayOrientation= DisplayOrientation.Default;\n        private bool _isFullScreen;\n        private bool _hardwareModeSwitch = true;\n        private IntPtr _deviceWindowHandle;\n\n        private bool _useDebugLayers;\n        private DriverType _useDriverType;\n\n        #endregion Private Fields\n\n        #region Constructors\n\n        /// <summary>\n        /// Create a <see cref=\"PresentationParameters\"/> instance with default values for all properties.\n        /// </summary>\n        public PresentationParameters()\n        {\n        }\n\n        #endregion Constructors\n\n        #region Properties\n\n        /// <summary>\n        /// Get or set the format of the back buffer.\n        /// </summary>\n        public SurfaceFormat BackBufferFormat\n        {\n            get { return _backBufferFormat; }\n            set { _backBufferFormat = value; }\n        }\n\n        /// <summary>\n        /// Get or set the height of the back buffer.\n        /// </summary>\n        public int BackBufferHeight\n        {\n            get { return _backBufferHeight; }\n            set { _backBufferHeight = value; }\n        }\n\n        /// <summary>\n        /// Get or set the width of the back buffer.\n        /// </summary>\n        public int BackBufferWidth\n        {\n            get { return _backBufferWidth; }\n            set { _backBufferWidth = value; }\n        }\n\n        /// <summary>\n        /// Get the bounds of the back buffer.\n        /// </summary>\n        public Rectangle Bounds\n        {\n            get { return new Rectangle(0, 0, _backBufferWidth, _backBufferHeight); }\n        }\n\n        /// <summary>\n        /// Get or set the handle of the window that will present the back buffer.\n        /// </summary>\n        public IntPtr DeviceWindowHandle\n        {\n            get { return _deviceWindowHandle; }\n            set { _deviceWindowHandle = value; }\n        }\n\n        /// <summary>\n        /// Get or set the depth stencil format for the back buffer.\n        /// </summary>\n        public DepthFormat DepthStencilFormat\n        {\n            get { return _depthStencilFormat; }\n            set { _depthStencilFormat = value; }\n        }\n\n        /// <summary>\n        /// Get or set a value indicating if we are in full screen mode.\n        /// </summary>\n        public bool IsFullScreen\n        {\n            get { return _isFullScreen; }\n            set { _isFullScreen = value; }\n        }\n        \n        /// <summary>\n        /// If <code>true</code> the <see cref=\"GraphicsDevice\"/> will do a mode switch\n        /// when going to full screen mode. If <code>false</code> it will instead do a\n        /// soft full screen by maximizing the window and making it borderless.\n        /// </summary>\n        public bool HardwareModeSwitch\n        {\n            get { return _hardwareModeSwitch; }\n            set { _hardwareModeSwitch = value; }\n        }\n\n        /// <summary>\n        /// Get or set the multisample count for the back buffer.\n        /// </summary>\n        public int MultiSampleCount\n        {\n            get { return _multiSampleCount; }\n            set { _multiSampleCount = value; }\n        }\n        \n        /// <summary>\n        /// Get or set the presentation interval.\n        /// </summary>\n        public PresentInterval PresentationInterval\n        {\n            get { return _presentationInterval; }\n            set { _presentationInterval = value; }\n        }\n\n        /// <summary>\n        /// Get or set the display orientation.\n        /// </summary>\n        public DisplayOrientation DisplayOrientation\n        {\n            get { return _displayOrientation; }\n            set { _displayOrientation = value; }\n        }\n        \n        /// <summary>\n        /// Get or set the RenderTargetUsage for the back buffer.\n        /// Determines if the back buffer is cleared when it is set as the\n        /// render target by the <see cref=\"GraphicsDevice\"/>.\n        /// <see cref=\"GraphicsDevice\"/> target.\n        /// </summary>\n        public RenderTargetUsage RenderTargetUsage\n        {\n            get { return _renderTargetUsage; }\n            set { _renderTargetUsage = value; }\n        }\n\n\n        /// <summary>\n        /// Used to request the graphics device should be created\n        /// with debugging features enabled.\n        /// </summary>\n        /// <remarks>Usable only on DirectX platforms.</remarks>\n        public bool UseDebugLayers\n        {\n            get { return _useDebugLayers; }\n            set { _useDebugLayers = value; }\n        }\n\n        /// <summary>\n        /// Used to request creation of a specific kind of driver.\n        /// </summary>\n        /// <remarks>\n        /// These values only work on DirectX platforms and must be defined before the graphics device\n        /// is created. <see cref=\"DriverType.Hardware\"/> by default.\n        /// </remarks>\n        public DriverType UseDriverType\n        {\n            get { return _useDriverType; }\n            set { _useDriverType = value; }\n        }\n\n\n        /// <summary>\n        /// Defines the driver type for graphics adapter.\n        /// </summary>\n        /// <remarks>Usable only on DirectX platforms.</remarks>\n        public enum DriverType\n        {\n            /// <summary>\n            /// Hardware device been used for rendering. Maximum speed and performance.\n            /// </summary>\n            Hardware,\n            /// <summary>\n            /// Emulates the hardware device on CPU. Slowly, only for testing.\n            /// </summary>\n            Reference,\n            /// <summary>\n            /// Useful when <see cref=\"DriverType.Hardware\"/> acceleration does not work.\n            /// </summary>\n            FastSoftware\n        }\n\n        #endregion Properties\n\n\n        #region Methods\n\n        /// <summary>\n        /// Create a copy of this <see cref=\"PresentationParameters\"/> instance.\n        /// </summary>\n        /// <returns></returns>\n        public PresentationParameters Clone()\n        {\n            PresentationParameters clone = new PresentationParameters();\n            clone._backBufferFormat = this._backBufferFormat;\n            clone._depthStencilFormat = this._depthStencilFormat;\n            clone._backBufferHeight = this._backBufferHeight;\n            clone._backBufferWidth = this._backBufferWidth;\n            clone._multiSampleCount = this._multiSampleCount;\n            clone._renderTargetUsage = this._renderTargetUsage;\n            clone._presentationInterval = this._presentationInterval;\n            clone._displayOrientation = this._displayOrientation;\n            clone._isFullScreen = this._isFullScreen;\n            clone._hardwareModeSwitch = this._hardwareModeSwitch;\n            clone._deviceWindowHandle = this._deviceWindowHandle;\n\n            clone._useDebugLayers = this._useDebugLayers;\n            clone._useDriverType = this._useDriverType;\n\n            return clone;\n        }\n\n        #endregion Methods\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/RenderTarget2D.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class RenderTarget2D : Texture2D, IRenderTarget\n    {\n        protected IRenderTarget2DStrategy _strategyRenderTarget2D;\n\n        public DepthFormat DepthStencilFormat { get { return _strategyRenderTarget2D.DepthStencilFormat; } }\n        \n        public int MultiSampleCount { get { return _strategyRenderTarget2D.MultiSampleCount; } }\n        \n        public RenderTargetUsage RenderTargetUsage { get { return _strategyRenderTarget2D.RenderTargetUsage; } }\n\n        IRenderTargetStrategy IRenderTarget.RenderTargetStrategy { get { return _strategyRenderTarget2D; } }\n\n        public bool IsContentLost { get { return _strategyRenderTarget2D.IsContentLost; } }\n\n        public event EventHandler<EventArgs> ContentLost;\n\n        protected RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format, bool shared, int arraySize,\n            bool isInternal)\n            : base(graphicsDevice, width, height, mipMap, format, shared, arraySize, true)\n        {\n            System.Diagnostics.Debug.Assert(isInternal == true);\n        }\n\n        public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage, bool shared, int arraySize)\n            : base(graphicsDevice, width, height, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), shared, arraySize, true)\n        {\n            SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat);\n            _strategyRenderTarget2D = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateRenderTarget2DStrategy(width, height, mipMap, arraySize, shared, usage,\n                format, preferredDepthFormat, preferredMultiSampleCount);\n            _strategyTexture2D = _strategyRenderTarget2D;\n            _strategyTexture = _strategyTexture2D;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D);\n        }\n        \n        protected static SurfaceFormat QuerySelectedFormat(GraphicsDevice graphicsDevice, SurfaceFormat preferredFormat)\n        {\n            SurfaceFormat selectedFormat = preferredFormat;\n            DepthFormat selectedDepthFormat;\n            int selectedMultiSampleCount;\n\n            if (graphicsDevice != null)\n            {\n                graphicsDevice.Adapter.QueryRenderTargetFormat(((IPlatformGraphicsDevice)graphicsDevice).Strategy.GraphicsProfile, preferredFormat, DepthFormat.None, 0,\n                    out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount);\n            }\n            \n            return selectedFormat;\n        }\n\n        public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage, bool shared)\n            : this(graphicsDevice, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage, shared, 1)\n        {\n        }\n\n        public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)\n            :this(graphicsDevice, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage, false, 1)\n        {\n        }\n\n        public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat)\n            :this(graphicsDevice, width, height, mipMap, preferredFormat, preferredDepthFormat, 0, RenderTargetUsage.DiscardContents, false, 1) \n        {\n        }\n        \n        public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height)\n            : this(graphicsDevice, width, height, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.DiscardContents, false, 1) \n        {\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/RenderTarget3D.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class RenderTarget3D : Texture3D, IRenderTarget\n    {\n        private IRenderTarget3DStrategy _strategyRenderTarget3D;\n\n        public DepthFormat DepthStencilFormat { get { return _strategyRenderTarget3D.DepthStencilFormat; } }\n        \n        public int MultiSampleCount { get { return _strategyRenderTarget3D.MultiSampleCount; } }\n        \n        public RenderTargetUsage RenderTargetUsage { get { return _strategyRenderTarget3D.RenderTargetUsage; } }\n\n        IRenderTargetStrategy IRenderTarget.RenderTargetStrategy { get { return _strategyRenderTarget3D; } }\n\n        public bool IsContentLost { get { return _strategyRenderTarget3D.IsContentLost; } }\n\n        public event EventHandler<EventArgs> ContentLost;\n\n\n\n        public RenderTarget3D(GraphicsDevice graphicsDevice, int width, int height, int depth, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)\n            :base(graphicsDevice, width, height, depth, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), true)\n        {\n            SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat);\n            _strategyRenderTarget3D = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateRenderTarget3DStrategy(width, height, depth, mipMap, usage,\n                format, preferredDepthFormat, preferredMultiSampleCount);\n            _strategyTexture3D = _strategyRenderTarget3D;\n            _strategyTexture = _strategyTexture3D;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture3D);\n        }\n\n        protected static SurfaceFormat QuerySelectedFormat(GraphicsDevice graphicsDevice, SurfaceFormat preferredFormat)\n        {\n            SurfaceFormat selectedFormat = preferredFormat;\n            DepthFormat selectedDepthFormat;\n            int selectedMultiSampleCount;\n\n            if (graphicsDevice != null)\n            {\n                graphicsDevice.Adapter.QueryRenderTargetFormat(((IPlatformGraphicsDevice)graphicsDevice).Strategy.GraphicsProfile, preferredFormat, DepthFormat.None, 0, \n                   out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount);\n            }\n            \n            return selectedFormat;\n        }\n\n        public RenderTarget3D(GraphicsDevice graphicsDevice, int width, int height, int depth, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat)\n            :this(graphicsDevice, width, height, depth, mipMap, preferredFormat, preferredDepthFormat, 0, RenderTargetUsage.DiscardContents) \n        {\n        }\n        \n        public RenderTarget3D(GraphicsDevice graphicsDevice, int width, int height, int depth)\n            : this(graphicsDevice, width, height, depth, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.DiscardContents) \n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/RenderTargetBinding.cs",
    "content": "//// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n//\n// Author: Kenneth James Pouncey\n\n// Copyright (C)2023-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    // http://msdn.microsoft.com/en-us/library/ff434403.aspx\n    public struct RenderTargetBinding\n    {\n        private readonly Texture _renderTarget;\n        private readonly int _arraySlice;\n\n        public Texture RenderTarget { get { return _renderTarget; } }\n        public int ArraySlice { get { return _arraySlice; } }\n\n\n        public RenderTargetBinding(RenderTarget2D renderTarget)\n        {\n            if (renderTarget == null) \n                throw new ArgumentNullException(\"renderTarget\");\n\n            _renderTarget = renderTarget;\n            _arraySlice = (int)CubeMapFace.PositiveX;\n        }\n\n        public RenderTargetBinding(RenderTargetCube renderTarget, CubeMapFace cubeMapFace)\n        {\n            if (renderTarget == null)\n                throw new ArgumentNullException(\"renderTarget\");\n            if (cubeMapFace < CubeMapFace.PositiveX || cubeMapFace > CubeMapFace.NegativeZ)\n                throw new ArgumentOutOfRangeException(\"cubeMapFace\");\n\n            _renderTarget = renderTarget;\n            _arraySlice = (int)cubeMapFace;\n        }\n\n        public RenderTargetBinding(RenderTarget2D renderTarget, int arraySlice)\n        {\n            if (renderTarget == null)\n                throw new ArgumentNullException(\"renderTarget\");\n            if (arraySlice < 0 || arraySlice >= renderTarget.ArraySize)\n                throw new ArgumentOutOfRangeException(\"arraySlice\");\n            if (!((IPlatformGraphicsDevice)renderTarget.GraphicsDevice).Strategy.Capabilities.SupportsTextureArrays)\n                throw new InvalidOperationException(\"Texture arrays are not supported on this graphics device\");\n\n            _renderTarget = renderTarget;\n            _arraySlice = arraySlice;\n        }\n\n        public RenderTargetBinding(RenderTarget3D renderTarget, int arraySlice)\n        {\n            if (renderTarget == null)\n                throw new ArgumentNullException(\"renderTarget\");\n            if (arraySlice < 0 || arraySlice >= renderTarget.Depth)\n                throw new ArgumentOutOfRangeException(\"arraySlice\");\n\n            _renderTarget = renderTarget;\n            _arraySlice = arraySlice;\n        }\n\n        public RenderTargetBinding(RenderTarget3D renderTarget)\n        {\n            if (renderTarget == null)\n                throw new ArgumentNullException(\"renderTarget\");\n\n            _renderTarget = renderTarget;\n            _arraySlice = 0;\n        }\n\n        public static implicit operator RenderTargetBinding(RenderTarget2D renderTarget)\n        {\n            return new RenderTargetBinding(renderTarget);\n        }\n\n        public static implicit operator RenderTargetBinding(RenderTarget3D renderTarget)\n        {\n            return new RenderTargetBinding(renderTarget);\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{_arraySlice: {0}, _renderTarget: {1} }}\",\n                _arraySlice,\n                (_renderTarget != null) ? _renderTarget.GetHashCode().ToString(\"X\") : \"null\"\n                );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/RenderTargetCube.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Represents a texture cube that can be used as a render target.\n    /// </summary>\n    public class RenderTargetCube : TextureCube, IRenderTarget\n    {\n        private IRenderTargetCubeStrategy _strategyRenderTargetCube;\n\n        /// <summary>\n        /// Gets the depth-stencil buffer format of this render target.\n        /// </summary>\n        /// <value>The format of the depth-stencil buffer.</value>\n        public DepthFormat DepthStencilFormat { get { return _strategyRenderTargetCube.DepthStencilFormat; } }\n\n        /// <summary>\n        /// Gets the number of multisample locations.\n        /// </summary>\n        /// <value>The number of multisample locations.</value>\n        public int MultiSampleCount { get { return _strategyRenderTargetCube.MultiSampleCount; } }\n\n        /// <summary>\n        /// Gets the usage mode of this render target.\n        /// </summary>\n        /// <value>The usage mode of the render target.</value>\n        public RenderTargetUsage RenderTargetUsage { get { return _strategyRenderTargetCube.RenderTargetUsage; } }\n\n        IRenderTargetStrategy IRenderTarget.RenderTargetStrategy { get { return _strategyRenderTargetCube; } }\n\n        /// <inheritdoc/>\n        int IRenderTarget.Width { get { return this.Size; } }\n\n        /// <inheritdoc/>\n        int IRenderTarget.Height { get { return this.Size; } }\n\n        public bool IsContentLost { get { return _strategyRenderTargetCube.IsContentLost; } }\n\n        public event EventHandler<EventArgs> ContentLost;\n        \n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"RenderTargetCube\"/> class.\n        /// </summary>\n        /// <param name=\"graphicsDevice\">The graphics device.</param>\n        /// <param name=\"size\">The width and height of a texture cube face in pixels.</param>\n        /// <param name=\"mipMap\"><see langword=\"true\"/> to generate a full mipMap chain; otherwise <see langword=\"false\"/>.</param>\n        /// <param name=\"preferredFormat\">The preferred format of the surface.</param>\n        /// <param name=\"preferredDepthFormat\">The preferred format of the depth-stencil buffer.</param>\n        public RenderTargetCube(GraphicsDevice graphicsDevice, int size, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat)\n            : this(graphicsDevice, size, mipMap, preferredFormat, preferredDepthFormat, 0, RenderTargetUsage.DiscardContents)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"RenderTargetCube\"/> class.\n        /// </summary>\n        /// <param name=\"graphicsDevice\">The graphics device.</param>\n        /// <param name=\"size\">The width and height of a texture cube face in pixels.</param>\n        /// <param name=\"mipMap\"><see langword=\"true\"/> to generate a full mipMap chain; otherwise <see langword=\"false\"/>.</param>\n        /// <param name=\"preferredFormat\">The preferred format of the surface.</param>\n        /// <param name=\"preferredDepthFormat\">The preferred format of the depth-stencil buffer.</param>\n        /// <param name=\"preferredMultiSampleCount\">The preferred number of multisample locations.</param>\n        /// <param name=\"usage\">The usage mode of the render target.</param>\n        public RenderTargetCube(GraphicsDevice graphicsDevice, int size, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)\n            : base(graphicsDevice, size, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), true)\n        {\n            SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat);\n            _strategyRenderTargetCube = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateRenderTargetCubeStrategy(size, mipMap, usage,\n                format, preferredDepthFormat, preferredMultiSampleCount);\n            _strategyTextureCube = _strategyRenderTargetCube;\n            _strategyTexture = _strategyTextureCube;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTextureCube);\n       }\n        \n        protected static SurfaceFormat QuerySelectedFormat(GraphicsDevice graphicsDevice, SurfaceFormat preferredFormat)\n        {\n            SurfaceFormat selectedFormat = preferredFormat;\n            DepthFormat selectedDepthFormat;\n            int selectedMultiSampleCount;\n\n            if (graphicsDevice != null)\n            {\n                graphicsDevice.Adapter.QueryRenderTargetFormat(((IPlatformGraphicsDevice)graphicsDevice).Strategy.GraphicsProfile, preferredFormat, DepthFormat.None, 0, \n                    out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount);\n            }\n            \n            return selectedFormat;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/RenderTargetUsage.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines if the previous content in a render target is preserved when it set on the graphics device.\n    /// </summary>\n    public enum RenderTargetUsage\n    {\n        /// <summary>\n        /// The render target content will not be preserved.\n        /// </summary>\n        DiscardContents,\n        /// <summary>\n        /// The render target content will be preserved even if it is slow or requires extra memory.\n        /// </summary>\n        PreserveContents,\n        /// <summary>\n        /// The render target content might be preserved if the platform can do so without a penalty in performance or memory usage.\n        /// </summary>\n        PlatformContents\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ResourceCreatedEventArgs.cs",
    "content": "﻿using System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public sealed class ResourceCreatedEventArgs : EventArgs\n    {\n        /// <summary>\n        /// The newly created resource object.\n        /// </summary>\n        public Object Resource { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/ResourceDestroyedEventArgs.cs",
    "content": "﻿using System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public sealed class ResourceDestroyedEventArgs : EventArgs\n    {\n        /// <summary>\n        /// The name of the destroyed resource.\n        /// </summary>\n        public string Name { get; internal set; }\n\n        /// <summary>\n        /// The resource manager tag of the destroyed resource.\n        /// </summary>\n        public Object Tag { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SamplerStateCollection.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n//\n// Author: Kenneth James Pouncey\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public sealed partial class SamplerStateCollection\n        : IPlatformSamplerStateCollection\n    {\n        private SamplerStateCollectionStrategy _strategy;\n\n\n        SamplerStateCollectionStrategy IPlatformSamplerStateCollection.Strategy { get { return _strategy; } }\n\n\n        internal SamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity)\n        {\n            _strategy = contextStrategy.CreateSamplerStateCollectionStrategy(capacity);\n            \n            Clear();\n        }\n        \n        public SamplerState this[int index] \n        {\n            get { return _strategy[index]; }\n            set { _strategy[index] = value; }\n        }\n\n        internal void Clear()\n        {\n            _strategy.Clear();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SamplerStateCollectionStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformSamplerStateCollection\n    {\n        SamplerStateCollectionStrategy Strategy { get; }\n    }\n\n    public abstract class SamplerStateCollectionStrategy\n    {\n        protected readonly GraphicsContextStrategy _contextStrategy;\n\n        private readonly SamplerState _samplerStateAnisotropicClamp;\n        private readonly SamplerState _samplerStateAnisotropicWrap;\n        private readonly SamplerState _samplerStateLinearClamp;\n        private readonly SamplerState _samplerStateLinearWrap;\n        private readonly SamplerState _samplerStatePointClamp;\n        private readonly SamplerState _samplerStatePointWrap;\n\n        private readonly SamplerState[] _samplers;\n        protected internal readonly SamplerState[] _actualSamplers;\n\n\n        protected SamplerStateCollectionStrategy(GraphicsContextStrategy contextStrategy, int capacity)\n        {\n            // hard limit of 32 because of _d3dDirty flags being 32bits.\n            if (capacity > 32)\n                throw new ArgumentOutOfRangeException(\"capacity\");\n\n            _contextStrategy = contextStrategy;\n\n            _samplerStateAnisotropicClamp = new SamplerState(SamplerState.AnisotropicClamp);\n            _samplerStateAnisotropicWrap = new SamplerState(SamplerState.AnisotropicWrap);\n            _samplerStateLinearClamp = new SamplerState(SamplerState.LinearClamp);\n            _samplerStateLinearWrap = new SamplerState(SamplerState.LinearWrap);\n            _samplerStatePointClamp = new SamplerState(SamplerState.PointClamp);\n            _samplerStatePointWrap = new SamplerState(SamplerState.PointWrap);\n\n            _samplers = new SamplerState[capacity];\n            _actualSamplers = new SamplerState[capacity];\n\n        }\n\n        public virtual SamplerState this[int index]\n        {\n            get { return _samplers[index]; }\n            set\n            {\n                if (value == null)\n                    throw new ArgumentNullException(\"value\");\n\n                if (_samplers[index] == value)\n                    return;\n\n                _samplers[index] = value;\n\n                // Static state properties never actually get bound;\n                // instead we use our GraphicsDevice-specific version of them.\n                SamplerState newSamplerState = value;\n                if (ReferenceEquals(value, SamplerState.AnisotropicClamp))\n                    newSamplerState = _samplerStateAnisotropicClamp;\n                else if (ReferenceEquals(value, SamplerState.AnisotropicWrap))\n                    newSamplerState = _samplerStateAnisotropicWrap;\n                else if (ReferenceEquals(value, SamplerState.LinearClamp))\n                    newSamplerState = _samplerStateLinearClamp;\n                else if (ReferenceEquals(value, SamplerState.LinearWrap))\n                    newSamplerState = _samplerStateLinearWrap;\n                else if (ReferenceEquals(value, SamplerState.PointClamp))\n                    newSamplerState = _samplerStatePointClamp;\n                else if (ReferenceEquals(value, SamplerState.PointWrap))\n                    newSamplerState = _samplerStatePointWrap;\n\n                newSamplerState.BindToGraphicsDevice(_contextStrategy);\n\n                _actualSamplers[index] = newSamplerState;\n            }\n        }\n\n        public virtual void Clear()\n        {\n            for (int i = 0; i < _samplers.Length; i++)\n            {\n                _samplers[i] = SamplerState.LinearWrap;\n\n                _samplerStateLinearWrap.BindToGraphicsDevice(_contextStrategy);\n                _actualSamplers[i] = _samplerStateLinearWrap;\n            }\n        }\n\n        /// <summary>\n        /// Mark all the sampler slots as dirty.\n        /// </summary>\n        public virtual void Dirty()\n        {\n        }\n\n        public T ToConcrete<T>() where T : SamplerStateCollectionStrategy\n        {\n            return (T)this;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SetDataOptions.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines how vertex or index buffer data will be flushed during a SetData operation.\n    /// </summary>\n    public enum SetDataOptions\n    { \n        /// <summary>\n        /// The SetData can overwrite the portions of existing data.\n        /// </summary>\n        None,\n        /// <summary>\n        /// The SetData will discard the entire buffer. A pointer to a new memory area is returned and rendering from the previous area do not stall.\n        /// </summary>\n        Discard,\n        /// <summary>\n        /// The SetData operation will not overwrite existing data. This allows the driver to return immediately from a SetData operation and continue rendering.\n        /// </summary>\n        NoOverwrite\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/ConstantBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ConstantBuffer : GraphicsResource\n        , IPlatformConstantBuffer\n    {\n        private ConstantBufferStrategy _strategy;\n        \n        ConstantBufferStrategy IPlatformConstantBuffer.Strategy { get { return _strategy; } }\n\n        public ConstantBuffer(GraphicsDevice device,\n                              string name,\n                              int[] parameterIndexes,\n                              int[] parameterOffsets,\n                              int sizeInBytes,\n                              bool integersAsFloats)\n            : base()\n        {\n            _strategy = ((IPlatformGraphicsContext)device.MainContext).Strategy.CreateConstantBufferStrategy(name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats);\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n        public ConstantBuffer(ConstantBuffer cloneSource)\n            : base()\n        {\n            _strategy = (ConstantBufferStrategy)cloneSource._strategy.Clone();\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_strategy != null)\n                    _strategy.Dispose();\n\n                _strategy = null;\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/ConstantBufferCollection.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public sealed class ConstantBufferCollection\n        : IPlatformConstantBufferCollection\n    {\n        private ConstantBufferCollectionStrategy _strategy;\n\n        ConstantBufferCollectionStrategy IPlatformConstantBufferCollection.Strategy { get { return _strategy; } }\n\n\n        internal ConstantBufferCollection(GraphicsContextStrategy contextStrategy, int capacity)\n        {\n            _strategy = contextStrategy.CreateConstantBufferCollectionStrategy(capacity);\n        }\n\n\n        public ConstantBuffer this[int index]\n        {\n            get { return _strategy[index]; }\n            set { _strategy[index] = value; }\n        }\n\n        internal void Clear()\n        {\n            _strategy.Clear();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/ConstantBufferCollectionStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformConstantBufferCollection\n    {\n        ConstantBufferCollectionStrategy Strategy { get; }\n    }\n\n    public abstract class ConstantBufferCollectionStrategy\n    {\n        private readonly ConstantBuffer[] _buffers;\n\n        public int Length { get { return _buffers.Length; } }\n\n\n        protected ConstantBufferCollectionStrategy(int capacity)\n        {\n            _buffers = new ConstantBuffer[capacity];\n        }\n\n        public virtual ConstantBuffer this[int index]\n        {\n            get { return _buffers[index]; }\n            set { _buffers[index] = value; }\n        }\n\n        public abstract void Clear();\n\n\n        public T ToConcrete<T>() where T : ConstantBufferCollectionStrategy\n        {\n            return (T)this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/ConstantBufferStrategy.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformConstantBuffer\n    {\n        ConstantBufferStrategy Strategy { get; }\n    }\n\n    public abstract class ConstantBufferStrategy : GraphicsResourceStrategy, ICloneable, IDisposable\n    {\n        private string _name;\n        private int[] _parameters;\n        private int[] _offsets;\n        private byte[] _bufferData;\n        private bool _integersAsFloats;\n        private bool _dirty;\n        private ulong _stateKey;\n\n        public string Name { get { return _name; } }\n        public int[] Parameters { get { return _parameters; } }\n        public int[] Offsets { get { return _offsets; } }\n        public byte[] BufferData { get { return _bufferData; } }\n        public virtual bool Dirty\n        {\n            get { return _dirty; }\n            set { _dirty = value; }\n        }\n        public virtual ulong StateKey\n        {\n            get { return _stateKey; }\n            set { _stateKey = value; }\n        }\n        protected bool IntegersAsFloats\n        {\n            get { return _integersAsFloats; }\n        }\n\n        protected ConstantBufferStrategy(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats)\n            : base(contextStrategy)\n        {\n            this._name = name;\n            this._parameters = parameters;\n            this._offsets = offsets;\n            this._bufferData = new byte[sizeInBytes];\n            this._integersAsFloats = integersAsFloats;\n        }\n\n        protected ConstantBufferStrategy(ConstantBufferStrategy source)\n            : base(source)\n        {\n            // shared\n            this._name = source._name;\n            this._parameters = source._parameters;\n            this._offsets = source._offsets;\n\n            // copies\n            this._bufferData = (byte[])source._bufferData.Clone();\n            this._integersAsFloats = source._integersAsFloats;\n        }\n\n        public T ToConcrete<T>() where T : ConstantBufferStrategy\n        {\n            return (T)this;\n        }\n\n\n        public void Update(EffectParameterCollection parameters)\n        {\n            // TODO:  We should be doing some sort of dirty state \n            // testing here.\n            //\n            // It should let us skip all parameter updates if\n            // nothing has changed.  It should not be per-parameter\n            // as that is why you should use multiple constant\n            // buffers.\n\n            // If our state key becomes larger than the \n            // next state key then the keys have rolled \n            // over and we need to reset.\n            if (this.StateKey > EffectParameter.NextStateKey)\n                this.StateKey = 0;\n            \n            for (int p = 0; p < this.Parameters.Length; p++)\n            {\n                int index = this.Parameters[p];\n                EffectParameter param = parameters[index];\n\n                if (param.StateKey < this.StateKey)\n                    continue;\n                this.Dirty = true;\n\n                int offset = this.Offsets[p];\n                this.SetParameter(param, offset);\n            }\n\n            this.StateKey = EffectParameter.NextStateKey;\n        }\n\n        private int SetParameter(EffectParameter param, int offset)\n        {\n            EffectParameterCollection elements = param.Elements;\n            if (elements.Count <= 0)\n            {\n                if (param.Data != null)\n                {\n                    switch (param.ParameterType)\n                    {\n                        case EffectParameterType.Single:\n                        case EffectParameterType.Int32:\n                        case EffectParameterType.Bool:\n                            // HLSL assumes matrices are column-major, whereas in-memory we use row-major.\n                            // TODO: HLSL can be told to use row-major. We should handle that too.\n                            if (param.ParameterClass == EffectParameterClass.Matrix)\n                            {\n                                SetData(offset, param.ColumnCountActual, param.RowCount, param.Data);\n                                return (param.ColumnCount * RowSize);\n                            }\n                            else\n                            {\n                                SetData(offset, param.RowCount, param.ColumnCount, param.Data);\n                                return (param.RowCount * RowSize);\n                            }\n                        default:\n                            throw new NotSupportedException(\"Not supported!\");\n                    }\n                }\n                else\n                {\n                    return 0;\n                }\n            }\n            else // (elements.Count > 0)\n            {\n                int elementByteCount = 0;\n                for (int i = 0; i < elements.Count; i++)\n                {\n                    int subElementByteCount = SetParameter(elements[i], offset + elementByteCount);\n                    elementByteCount += subElementByteCount;\n                }\n                return elementByteCount;\n            }\n        }\n\n        // Shader registers are always 4 bytes and all the\n        // incoming data objects should be 4 bytes per element.\n        const int ElementSize = 4;\n        const int RowSize = (ElementSize * 4);\n\n        private void SetData(int offset, int rows, int columns, object data)\n        {\n            Array src = (Array)data;\n            int srcStride = (columns * ElementSize);\n\n            // Take care of the single copy case!\n            if (rows == 1 || RowSize == srcStride)\n            {\n                Buffer.BlockCopy(src, 0, this.BufferData, offset, srcStride * rows);\n            }\n            // Take care of Matrix3x3 and Matrix4x3. (unroll loop)\n            else if (rows == 3)\n            {\n                Buffer.BlockCopy(src, srcStride * 0, this.BufferData, offset + (RowSize * 0), srcStride);\n                Buffer.BlockCopy(src, srcStride * 1, this.BufferData, offset + (RowSize * 1), srcStride);\n                Buffer.BlockCopy(src, srcStride * 2, this.BufferData, offset + (RowSize * 2), srcStride);\n            }\n            else\n            {\n                for (int r = 0; r < rows; r++)\n                    Buffer.BlockCopy(src, srcStride * r, this.BufferData, offset + (RowSize * r), srcStride);\n            }\n        }\n\n\n        public abstract object Clone();\n        public abstract void PlatformContextLost();\n\n\n        #region IDisposable\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _name = null;\n                _parameters = null;\n                _offsets = null;\n                _bufferData = null;\n                _dirty = true;\n            }\n\n            base.Dispose(disposing);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/PixelShader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    public sealed class PixelShader : Shader\n    {\n        internal PixelShader(GraphicsDevice graphicsDevice,\n            ShaderVersion shaderVersion,\n            byte[] shaderBytecode,\n            SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base()\n        {\n            _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreatePixelShaderStrategy(shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/SamplerInfo.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public enum SamplerType\n    {\n        Sampler2D = 0,\n        SamplerCube = 1,\n        SamplerVolume = 2,\n        Sampler1D = 3,\n    }\n\n    public struct SamplerInfo\n    {\n        public SamplerType type;\n        public int textureSlot;\n        public int samplerSlot;\n        public string GLsamplerName; // e.g. \"ps_s0\", \"ps_s1\", etc\n        public SamplerState state;\n\n        // TODO: This should be moved to EffectPass.\n        public int textureParameter;\n\n        public override string ToString()\n        {\n            return String.Format(\"type: {0}, textureParameter:{1}, GLsamplerName: {2}, t#: {3}, s#: {4}\",\n                                 type, textureParameter, GLsamplerName, textureSlot, samplerSlot);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/Shader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    public abstract class Shader : GraphicsResource\n        , IPlatformShader\n    {\n        protected ShaderStrategy _strategy;\n\n        ShaderStrategy IPlatformShader.Strategy { get { return _strategy; } }\n        \n        public ShaderVersion ShaderModelVersion { get { return _strategy.ShaderModelVersion; } }\n        public SamplerInfo[] Samplers { get { return _strategy.Samplers; } }\n\n        public int[] CBuffers { get { return _strategy.CBuffers; } }\n\n        public VertexAttribute[] Attributes { get { return _strategy.Attributes; } }\n\n\n        internal Shader()\n            : base()\n        {\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/ShaderProfileType.cs",
    "content": "// Copyright (C)2022 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public enum ShaderProfileType\n    {\n        OpenGL_Mojo = 0,\n        DirectX_11  = 1,\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/ShaderStage.cs",
    "content": "﻿namespace Microsoft.Xna.Platform.Graphics\n{\n    public enum ShaderStage : byte\n    {\n        Pixel  = 0,\n        Vertex = 1,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/ShaderStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformShader\n    {\n        ShaderStrategy Strategy { get; }\n    }\n\n    public abstract class ShaderStrategy : GraphicsResourceStrategy\n    {\n        protected readonly GraphicsContextStrategy _contextStrategy;\n\n        ShaderVersion _shaderVersion;\n        private SamplerInfo[] _samplers;\n        private int[] _CBuffers;\n        private VertexAttribute[] _attributes;\n\n        public ShaderVersion ShaderModelVersion { get { return _shaderVersion; } }\n        public SamplerInfo[] Samplers { get { return _samplers; } }\n        public int[] CBuffers { get { return _CBuffers; } }\n        public VertexAttribute[] Attributes { get { return _attributes; } }\n\n        protected static readonly Dictionary<GraphicsProfile, ShaderVersion> MaxShaderVersions = new Dictionary<GraphicsProfile, ShaderVersion>()\n        {\n            { GraphicsProfile.Reach,   new ShaderVersion(2, 0) },\n            { GraphicsProfile.HiDef,   new ShaderVersion(3, 0) },\n            { GraphicsProfile.FL10_0,  new ShaderVersion(4, 0) },\n            { GraphicsProfile.FL10_1,  new ShaderVersion(4, 1) },\n            { GraphicsProfile.FL11_0,  new ShaderVersion(5, 0) },\n            { GraphicsProfile.FL11_1,  new ShaderVersion(5, 0) },\n        };\n\n        protected ShaderStrategy(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base(contextStrategy)\n        {\n            _contextStrategy = contextStrategy;\n\n            this._shaderVersion = shaderVersion;\n            this._samplers = samplers;\n            this._CBuffers = cBuffers;\n            this._attributes = attributes;\n\n        }\n\n        public T ToConcrete<T>() where T : ShaderStrategy\n        {\n            return (T)this;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/ShaderVersion.cs",
    "content": "﻿// Copyright (C)2025 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public struct ShaderVersion\n    {\n        public readonly ushort Major;\n        public readonly ushort Minor;\n\n        public uint PackedValue { get { return ((uint)Major << 16) | (uint)Minor; } }\n\n        public ShaderVersion(ushort major, ushort minor)\n        {\n            this.Major = major;\n            this.Minor = minor;\n        }\n\n        public static bool operator <(ShaderVersion l, ShaderVersion r)\n        {\n            return l.PackedValue < r.PackedValue;\n        }\n\n        public static bool operator >(ShaderVersion l, ShaderVersion r)\n        {\n            return l.PackedValue > r.PackedValue;\n        }\n\n        public static bool operator <=(ShaderVersion l, ShaderVersion r)\n        {\n            return l.PackedValue <= r.PackedValue;\n        }\n\n        public static bool operator >=(ShaderVersion l, ShaderVersion r)\n        {\n            return l.PackedValue >= r.PackedValue;\n        }\n\n        public static bool operator ==(ShaderVersion l, ShaderVersion r)\n        {\n            return l.PackedValue == r.PackedValue;\n        }\n\n        public static bool operator !=(ShaderVersion l, ShaderVersion r)\n        {\n            return l.PackedValue != r.PackedValue;\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{0}.{1}\", Major, Minor);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/VertexAttribute.cs",
    "content": "// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public struct VertexAttribute\n    {\n        public VertexElementUsage usage;\n        public int index;\n        public string name;\n        public int location;\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Shader/VertexShader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n\n    public sealed class VertexShader : Shader\n    {\n        internal VertexShader(GraphicsDevice graphicsDevice,\n            ShaderVersion shaderVersion,\n            byte[] shaderBytecode,\n            SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes)\n            : base()\n        {\n            _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateVertexShaderStrategy(shaderVersion, shaderBytecode, samplers, cBuffers, attributes);\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SpriteBatch.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2023 Nick Kastellanos\n\nusing System;\nusing System.Text;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Helper class for drawing text strings and sprites in one or more optimized batches.\n    /// </summary>\n    public class SpriteBatch : GraphicsResource\n    {\n        #region Private Fields\n        readonly SpriteBatcherStrategy _batcher;\n\n        SpriteSortMode _sortMode;\n        BlendState _blendState;\n        SamplerState _samplerState;\n        DepthStencilState _depthStencilState;\n        RasterizerState _rasterizerState;\n        Effect _effect;\n        bool _beginCalled;\n\n        SpriteEffect _spriteEffect;\n        readonly EffectPass _spritePass;\n\n        Rectangle _tempRect = new Rectangle(0, 0, 0, 0);\n        Vector2 _texCoordTL = new Vector2(0, 0);\n        Vector2 _texCoordBR = new Vector2(0, 0);\n        #endregion\n\n        /// <summary>\n        /// Constructs a <see cref=\"SpriteBatch\"/>.\n        /// </summary>\n        /// <param name=\"graphicsDevice\">The <see cref=\"GraphicsDevice\"/>, which will be used for sprite rendering.</param>        \n        /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"graphicsDevice\"/> is null.</exception>\n        public SpriteBatch(GraphicsDevice graphicsDevice) : this(graphicsDevice, 0)\n        {\n        }\n\n        /// <summary>\n        /// Constructs a <see cref=\"SpriteBatch\"/>.\n        /// </summary>\n        /// <param name=\"graphicsDevice\">The <see cref=\"GraphicsDevice\"/>, which will be used for sprite rendering.</param>\n        /// <param name=\"capacity\">The initial capacity of the internal array holding batch items (the value will be rounded to the next multiple of 64).</param>\n        /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"graphicsDevice\"/> is null.</exception>\n        public SpriteBatch(GraphicsDevice graphicsDevice, int capacity)\n            : base(graphicsDevice)\n        {\n            _spriteEffect = new SpriteEffect(graphicsDevice);\n            _spritePass = _spriteEffect.CurrentTechnique.Passes[0];\n\n            _batcher = GraphicsFactory.Current.CreateSpriteBatcher(graphicsDevice, capacity);\n\n            _beginCalled = false;\n        }\n\n        /// <summary>\n        /// Begins a new sprite and text batch with the specified render state.\n        /// </summary>\n        /// <param name=\"sortMode\">The drawing order for sprite and text drawing. <see cref=\"SpriteSortMode.Deferred\"/> by default.</param>\n        /// <param name=\"blendState\">State of the blending. Uses <see cref=\"BlendState.AlphaBlend\"/> if null.</param>\n        /// <param name=\"samplerState\">State of the sampler. Uses <see cref=\"SamplerState.LinearClamp\"/> if null.</param>\n        /// <param name=\"depthStencilState\">State of the depth-stencil buffer. Uses <see cref=\"DepthStencilState.None\"/> if null.</param>\n        /// <param name=\"rasterizerState\">State of the rasterization. Uses <see cref=\"RasterizerState.CullCounterClockwise\"/> if null.</param>\n        /// <param name=\"effect\">A custom <see cref=\"Effect\"/> to override the default sprite effect. Uses default sprite effect if null.</param>\n        /// <param name=\"transformMatrix\">An optional matrix used to transform the sprite geometry. Uses <see cref=\"Matrix.Identity\"/> if null.</param>\n        /// <exception cref=\"InvalidOperationException\">Thrown if <see cref=\"Begin\"/> is called next time without previous <see cref=\"End\"/>.</exception>\n        /// <remarks>This method uses optional parameters.</remarks>\n        /// <remarks>The <see cref=\"Begin\"/> Begin should be called before drawing commands, and you cannot call it again before subsequent <see cref=\"End\"/>.</remarks>\n        public void Begin\n        (\n             SpriteSortMode sortMode = SpriteSortMode.Deferred,\n             BlendState blendState = null,\n             SamplerState samplerState = null,\n             DepthStencilState depthStencilState = null,\n             RasterizerState rasterizerState = null,\n             Effect effect = null,\n             Matrix? transformMatrix = null\n        )\n        {\n            if (_beginCalled)\n                throw new InvalidOperationException(\"Begin cannot be called again until End has been successfully called.\");\n\n            // defaults\n            _sortMode = sortMode;\n            _blendState = blendState ?? BlendState.AlphaBlend;\n            _samplerState = samplerState ?? SamplerState.LinearClamp;\n            _depthStencilState = depthStencilState ?? DepthStencilState.None;\n            _rasterizerState = rasterizerState ?? RasterizerState.CullCounterClockwise;\n            _effect = effect;\n            _spriteEffect.TransformMatrix = transformMatrix;\n\n            // Setup things now so a user can change them.\n            if (sortMode == SpriteSortMode.Immediate)\n            {\n                Setup();\n            }\n\n            _beginCalled = true;\n        }\n\n        /// <summary>\n        /// Flushes all batched text and sprites to the screen.\n        /// </summary>\n        /// <remarks>This command should be called after <see cref=\"Begin\"/> and drawing commands.</remarks>\n        public void End()\n        {\n            if (!_beginCalled)\n                throw new InvalidOperationException(\"Begin must be called before calling End.\");\n\n            _beginCalled = false;\n\n            if (_sortMode != SpriteSortMode.Immediate)\n            {\n                Setup();\n\n                if (_batcher.BatchItemCount > 0)\n                {\n                    _batcher.SortBatch(_sortMode);\n                    _batcher.DrawBatch(_effect);\n                }\n            }\n        }\n\n        void Setup()\n        {\n            GraphicsDevice gd = this.GraphicsDevice;\n            gd.BlendState = _blendState;\n            gd.DepthStencilState = _depthStencilState;\n            gd.RasterizerState = _rasterizerState;\n            gd.SamplerStates[0] = _samplerState;\n\n            _spritePass.Apply();\n        }\n\n        void CheckValid(Texture2D texture)\n        {\n            if (texture == null)\n                throw new ArgumentNullException(\"texture\");\n            if (!_beginCalled)\n                throw new InvalidOperationException(\"Draw was called, but Begin has not yet been called. Begin must be called successfully before you can call Draw.\");\n        }\n\n        void CheckValid(SpriteFont spriteFont, string text)\n        {\n            if (spriteFont == null)\n                throw new ArgumentNullException(\"spriteFont\");\n            if (text == null)\n                throw new ArgumentNullException(\"text\");\n            if (!_beginCalled)\n                throw new InvalidOperationException(\"DrawString was called, but Begin has not yet been called. Begin must be called successfully before you can call DrawString.\");\n        }\n\n        void CheckValid(SpriteFont spriteFont, StringBuilder text)\n        {\n            if (spriteFont == null)\n                throw new ArgumentNullException(\"spriteFont\");\n            if (text == null)\n                throw new ArgumentNullException(\"text\");\n            if (!_beginCalled)\n                throw new InvalidOperationException(\"DrawString was called, but Begin has not yet been called. Begin must be called successfully before you can call DrawString.\");\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"sourceRectangle\">An optional region on the texture which will be rendered. If null - draws full texture.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this sprite.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this sprite.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this sprite.</param>\n        public void Draw(Texture2D texture,\n                Vector2 position,\n                Rectangle? sourceRectangle,\n                Color color,\n                float rotation,\n                Vector2 origin,\n                Vector2 scale,\n                SpriteEffects effects,\n                float layerDepth)\n        {\n            Complex rotation2;\n            if (rotation == 0f)\n            {\n                rotation2.R = 1f;\n                rotation2.i = 0f;\n            }\n            else\n            {\n                rotation2.R = (float)Math.Cos(rotation);\n                rotation2.i = (float)Math.Sin(rotation);\n            }\n\n            Draw(texture, position, sourceRectangle, color, rotation2, origin, scale, effects, layerDepth);\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"sourceRectangle\">An optional region on the texture which will be rendered. If null - draws full texture.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this sprite.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this sprite.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this sprite.</param>\n        public void Draw(Texture2D texture,\n                Vector2 position,\n                Rectangle? sourceRectangle,\n                Color color,\n                Complex rotation,\n                Vector2 origin,\n                Vector2 scale,\n                SpriteEffects effects,\n                float layerDepth)\n        {\n            CheckValid(texture);            \n\n            SpriteBatchItem item = _batcher.CreateBatchItem();\n            item.Texture = texture;\n\n            // set SortKey based on SpriteSortMode.\n            switch (_sortMode)\n            {\n                // Comparison of Texture objects.\n                case SpriteSortMode.Texture:\n                    item.SortKey = texture.SortingKey;\n                    break;\n                // Comparison of Depth\n                case SpriteSortMode.FrontToBack:\n                    item.SortKey = layerDepth;\n                    break;\n                // Comparison of Depth in reverse\n                case SpriteSortMode.BackToFront:\n                    item.SortKey = -layerDepth;\n                    break;\n            }\n\n            origin = origin * scale;\n\n            float w, h;\n            if (sourceRectangle.HasValue)\n            {\n                Rectangle srcRect = sourceRectangle.GetValueOrDefault();\n                w = srcRect.Width * scale.X;\n                h = srcRect.Height * scale.Y;\n                _texCoordTL.X = srcRect.X * texture.TexelWidth;\n                _texCoordTL.Y = srcRect.Y * texture.TexelHeight;\n                _texCoordBR.X = (srcRect.X + srcRect.Width) * texture.TexelWidth;\n                _texCoordBR.Y = (srcRect.Y + srcRect.Height) * texture.TexelHeight;\n            }\n            else\n            {\n                w = texture.Width * scale.X;\n                h = texture.Height * scale.Y;\n                _texCoordTL = Vector2.Zero;\n                _texCoordBR = Vector2.One;\n            }\n\n            if ((effects & SpriteEffects.FlipVertically) != 0)\n            {\n                float temp = _texCoordBR.Y;\n                _texCoordBR.Y = _texCoordTL.Y;\n                _texCoordTL.Y = temp;\n            }\n            if ((effects & SpriteEffects.FlipHorizontally) != 0)\n            {\n                float temp = _texCoordBR.X;\n                _texCoordBR.X = _texCoordTL.X;\n                _texCoordTL.X = temp;\n            }\n\n            if (rotation.i == 0f)\n            {\n                item.Set(position.X - origin.X,\n                         position.Y - origin.Y,\n                         w,\n                         h,\n                         layerDepth,\n                         color,\n                         _texCoordTL,\n                         _texCoordBR);\n            }\n            else\n            {\n                item.Set(position.X,\n                         position.Y,\n                         -origin.X,\n                         -origin.Y,\n                         w,\n                         h,\n                         ref rotation,\n                         layerDepth,\n                         color,\n                         _texCoordTL,\n                         _texCoordBR);\n            }\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"sourceRectangle\">An optional region on the texture which will be rendered. If null - draws full texture.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this sprite.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this sprite.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this sprite.</param>\n        public void Draw(Texture2D texture,\n                Vector2 position,\n                Rectangle? sourceRectangle,\n                Color color,\n                float rotation,\n                Vector2 origin,\n                float scale,\n                SpriteEffects effects,\n                float layerDepth)\n        {\n            Vector2 scaleVec = new Vector2(scale, scale);\n            Draw(texture, position, sourceRectangle, color, rotation, origin, scaleVec, effects, layerDepth);\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"destinationRectangle\">The drawing bounds on screen.</param>\n        /// <param name=\"sourceRectangle\">An optional region on the texture which will be rendered. If null - draws full texture.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this sprite.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this sprite.</param>\n        public void Draw(Texture2D texture,\n            Rectangle destinationRectangle,\n            Rectangle? sourceRectangle,\n            Color color,\n            float rotation,\n            Vector2 origin,\n            SpriteEffects effects,\n            float layerDepth)\n        {\n            Complex rotation2;\n            if (rotation == 0f)\n            {\n                rotation2.R = 1f;\n                rotation2.i = 0f;\n            }\n            else\n            {\n                rotation2.R = (float)Math.Cos(rotation);\n                rotation2.i = (float)Math.Sin(rotation);\n            }\n\n            Draw(texture, destinationRectangle, sourceRectangle, color, rotation2, origin, effects, layerDepth);\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"destinationRectangle\">The drawing bounds on screen.</param>\n        /// <param name=\"sourceRectangle\">An optional region on the texture which will be rendered. If null - draws full texture.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this sprite.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this sprite.</param>\n        public void Draw(Texture2D texture,\n            Rectangle destinationRectangle,\n            Rectangle? sourceRectangle,\n            Color color,\n            Complex rotation,\n            Vector2 origin,\n            SpriteEffects effects,\n            float layerDepth)\n        {\n            CheckValid(texture);\n\n            SpriteBatchItem item = _batcher.CreateBatchItem();\n            item.Texture = texture;\n\n            // set SortKey based on SpriteSortMode.\n            switch (_sortMode)\n            {\n                // Comparison of Texture objects.\n                case SpriteSortMode.Texture:\n                    item.SortKey = texture.SortingKey;\n                    break;\n                // Comparison of Depth\n                case SpriteSortMode.FrontToBack:\n                    item.SortKey = layerDepth;\n                    break;\n                // Comparison of Depth in reverse\n                case SpriteSortMode.BackToFront:\n                    item.SortKey = -layerDepth;\n                    break;\n            }\n\n            if (sourceRectangle.HasValue)\n            {\n                Rectangle srcRect = sourceRectangle.GetValueOrDefault();\n                _texCoordTL.X = srcRect.X * texture.TexelWidth;\n                _texCoordTL.Y = srcRect.Y * texture.TexelHeight;\n                _texCoordBR.X = (srcRect.X + srcRect.Width) * texture.TexelWidth;\n                _texCoordBR.Y = (srcRect.Y + srcRect.Height) * texture.TexelHeight;\n\n                if (srcRect.Width != 0)\n                    origin.X = origin.X * (float)destinationRectangle.Width / (float)srcRect.Width;\n                else\n                    origin.X = origin.X * (float)destinationRectangle.Width * texture.TexelWidth;\n                if (srcRect.Height != 0)\n                    origin.Y = origin.Y * (float)destinationRectangle.Height / (float)srcRect.Height;\n                else\n                    origin.Y = origin.Y * (float)destinationRectangle.Height * texture.TexelHeight;\n            }\n            else\n            {\n                _texCoordTL = Vector2.Zero;\n                _texCoordBR = Vector2.One;\n\n                origin.X = origin.X * (float)destinationRectangle.Width * texture.TexelWidth;\n                origin.Y = origin.Y * (float)destinationRectangle.Height * texture.TexelHeight;\n            }\n\n            if ((effects & SpriteEffects.FlipVertically) != 0)\n            {\n                float temp = _texCoordBR.Y;\n                _texCoordBR.Y = _texCoordTL.Y;\n                _texCoordTL.Y = temp;\n            }\n            if ((effects & SpriteEffects.FlipHorizontally) != 0)\n            {\n                float temp = _texCoordBR.X;\n                _texCoordBR.X = _texCoordTL.X;\n                _texCoordTL.X = temp;\n            }\n\n            if (rotation.i == 0f)\n            {\n                item.Set(destinationRectangle.X - origin.X,\n                         destinationRectangle.Y - origin.Y,\n                         destinationRectangle.Width,\n                         destinationRectangle.Height,\n                         layerDepth,\n                         color,\n                         _texCoordTL,\n                         _texCoordBR);\n            }\n            else\n            {\n                item.Set(destinationRectangle.X,\n                         destinationRectangle.Y,\n                         -origin.X,\n                         -origin.Y,\n                         destinationRectangle.Width,\n                         destinationRectangle.Height,\n                         ref rotation,\n                         layerDepth,\n                         color,\n                         _texCoordTL,\n                         _texCoordBR);\n            }\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"sourceRectangle\">An optional region on the texture which will be rendered. If null - draws full texture.</param>\n        /// <param name=\"color\">A color mask.</param>\n        public void Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color)\n        {\n            CheckValid(texture);\n\n            SpriteBatchItem item = _batcher.CreateBatchItem();\n            item.Texture = texture;\n\n            // set SortKey based on SpriteSortMode.\n            item.SortKey = _sortMode == SpriteSortMode.Texture ? texture.SortingKey : 0;\n\n            Vector2 size;\n\n            if (sourceRectangle.HasValue)\n            {\n                Rectangle srcRect = sourceRectangle.GetValueOrDefault();\n                size = new Vector2(srcRect.Width, srcRect.Height);\n                _texCoordTL.X = srcRect.X * texture.TexelWidth;\n                _texCoordTL.Y = srcRect.Y * texture.TexelHeight;\n                _texCoordBR.X = (srcRect.X + srcRect.Width) * texture.TexelWidth;\n                _texCoordBR.Y = (srcRect.Y + srcRect.Height) * texture.TexelHeight;\n            }\n            else\n            {\n                size = new Vector2(texture.Width, texture.Height);\n                _texCoordTL = Vector2.Zero;\n                _texCoordBR = Vector2.One;\n            }\n\n            item.Set(position.X,\n                     position.Y,\n                     size.X,\n                     size.Y,\n                     0,\n                     color,\n                     _texCoordTL,\n                     _texCoordBR);\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"destinationRectangle\">The drawing bounds on screen.</param>\n        /// <param name=\"sourceRectangle\">An optional region on the texture which will be rendered. If null - draws full texture.</param>\n        /// <param name=\"color\">A color mask.</param>\n        public void Draw(Texture2D texture, Rectangle destinationRectangle, Rectangle? sourceRectangle, Color color)\n        {\n            CheckValid(texture);\n\n            SpriteBatchItem item = _batcher.CreateBatchItem();\n            item.Texture = texture;\n\n            // set SortKey based on SpriteSortMode.\n            item.SortKey = _sortMode == SpriteSortMode.Texture ? texture.SortingKey : 0;\n\n            if (sourceRectangle.HasValue)\n            {\n                Rectangle srcRect = sourceRectangle.GetValueOrDefault();\n                _texCoordTL.X = srcRect.X * texture.TexelWidth;\n                _texCoordTL.Y = srcRect.Y * texture.TexelHeight;\n                _texCoordBR.X = (srcRect.X + srcRect.Width) * texture.TexelWidth;\n                _texCoordBR.Y = (srcRect.Y + srcRect.Height) * texture.TexelHeight;\n            }\n            else\n            {\n                _texCoordTL = Vector2.Zero;\n                _texCoordBR = Vector2.One;\n            }\n\n            item.Set(destinationRectangle.X,\n                     destinationRectangle.Y,\n                     destinationRectangle.Width,\n                     destinationRectangle.Height,\n                     0,\n                     color,\n                     _texCoordTL,\n                     _texCoordBR);\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        public void Draw(Texture2D texture, Vector2 position, Color color)\n        {\n            CheckValid(texture);\n\n            SpriteBatchItem item = _batcher.CreateBatchItem();\n            item.Texture = texture;\n\n            // set SortKey based on SpriteSortMode.\n            item.SortKey = _sortMode == SpriteSortMode.Texture ? texture.SortingKey : 0;\n\n            item.Set(position.X,\n                     position.Y,\n                     texture.Width,\n                     texture.Height,\n                     0,\n                     color,\n                     Vector2.Zero,\n                     Vector2.One);\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Submit a sprite for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"texture\">A texture.</param>\n        /// <param name=\"destinationRectangle\">The drawing bounds on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        public void Draw(Texture2D texture, Rectangle destinationRectangle, Color color)\n        {\n            CheckValid(texture);\n\n            SpriteBatchItem item = _batcher.CreateBatchItem();\n            item.Texture = texture;\n\n            // set SortKey based on SpriteSortMode.\n            item.SortKey = _sortMode == SpriteSortMode.Texture ? texture.SortingKey : 0;\n\n            item.Set(destinationRectangle.X,\n                     destinationRectangle.Y,\n                     destinationRectangle.Width,\n                     destinationRectangle.Height,\n                     0,\n                     color,\n                     Vector2.Zero,\n                     Vector2.One);\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        public unsafe void DrawString(SpriteFont spriteFont, string text, Vector2 position, Color color)\n        {\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        public unsafe void DrawString(SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color)\n        {\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color);\n        }\n\n        private unsafe void DrawString(SpriteFont spriteFont, char* pChars, int* pGlyphIndices, int charsCount, Vector2 position, Color color)\n        {\n            // set SortKey based on SpriteSortMode.\n            float sortKey = (_sortMode == SpriteSortMode.Texture) ? spriteFont.Texture.SortingKey : 0;\n\n            Vector2 offset = Vector2.Zero;\n            bool firstGlyphOfLine = true;\n\n            fixed (SpriteFont.Glyph* pGlyphs = spriteFont.InternalGlyphs)\n            {\n                for (int i = 0; i < charsCount; i++)\n                {\n                    char c = pChars[i];\n\n                    if (c == '\\r')\n                        continue;\n\n                    if (c == '\\n')\n                    {\n                        offset.X = 0;\n                        offset.Y += spriteFont.LineSpacing;\n                        firstGlyphOfLine = true;\n                        continue;\n                    }\n\n                    int currentGlyphIndex = pGlyphIndices[i];\n                    if (currentGlyphIndex == -1)\n                        throw new ArgumentException(SpriteFont.UnresolvableCharacterErrorMessage(c), \"text\");\n                    SpriteFont.Glyph* pCurrentGlyph = pGlyphs + currentGlyphIndex;\n\n                    // The first character on a line might have a negative left side bearing.\n                    // In this scenario, SpriteBatch/SpriteFont normally offset the text to the right,\n                    //  so that text does not hang off the left side of its rectangle.\n                    if (firstGlyphOfLine)\n                    {\n                        offset.X = Math.Max(pCurrentGlyph->LeftSideBearing, 0);\n                        firstGlyphOfLine = false;\n                    }\n                    else\n                    {\n                        offset.X += spriteFont.Spacing + pCurrentGlyph->LeftSideBearing;\n                    }\n\n                    Vector2 p = offset;\n                    p.X += pCurrentGlyph->Cropping.X;\n                    p.Y += pCurrentGlyph->Cropping.Y;\n                    p += position;\n\n                    SpriteBatchItem item = _batcher.CreateBatchItem();\n                    item.Texture = spriteFont.Texture;\n                    item.SortKey = sortKey;\n\n                    item.Set(p.X,\n                             p.Y,\n                             pCurrentGlyph->BoundsInTexture.Width,\n                             pCurrentGlyph->BoundsInTexture.Height,\n                             0,\n                             color,\n                             pCurrentGlyph->TexCoordTL,\n                             pCurrentGlyph->TexCoordBR\n                             );\n\n                    offset.X += pCurrentGlyph->Width + pCurrentGlyph->RightSideBearing;\n                }\n            }\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, string text, Vector2 position, Color color,\n            float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth)\n        {\n            Complex rotation2;\n            if (rotation == 0f)\n            {\n                rotation2.R = 1f;\n                rotation2.i = 0f;\n            }\n            else\n            {\n                rotation2.R = (float)Math.Cos(rotation);\n                rotation2.i = (float)Math.Sin(rotation);\n            }\n\n            Vector2 scale2;\n            scale2.X = scale;\n            scale2.Y = scale;\n\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                       ref rotation2, origin, scale2, effects, layerDepth);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, string text, Vector2 position, Color color,\n            float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth)\n        {\n            Complex rotation2;\n            if (rotation == 0f)\n            {\n                rotation2.R = 1f;\n                rotation2.i = 0f;\n            }\n            else\n            {\n                rotation2.R = (float)Math.Cos(rotation);\n                rotation2.i = (float)Math.Sin(rotation);\n            }\n\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                       ref rotation2, origin, scale, effects, layerDepth);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, string text, Vector2 position, Color color,\n            Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth)\n        {\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                       ref rotation, origin, scale, effects, layerDepth);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color,\n            float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth)\n        {\n            Complex rotation2;\n            if (rotation == 0f)\n            {\n                rotation2.R = 1f;\n                rotation2.i = 0f;\n            }\n            else\n            {\n                rotation2.R = (float)Math.Cos(rotation);\n                rotation2.i = (float)Math.Sin(rotation);\n            }\n\n            Vector2 scale2;\n            scale2.X = scale;\n            scale2.Y = scale;\n\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                       ref rotation2, origin, scale2, effects, layerDepth);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color,\n            float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth)\n        {\n            Complex rotation2;\n            if (rotation == 0f)\n            {\n                rotation2.R = 1f;\n                rotation2.i = 0f;\n            }\n            else\n            {\n                rotation2.R = (float)Math.Cos(rotation);\n                rotation2.i = (float)Math.Sin(rotation);\n            }\n\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                       ref rotation2, origin, scale, effects, layerDepth);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color,\n            Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth)\n        {\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                       ref rotation, origin, scale, effects, layerDepth);\n        }\n\n        private unsafe void DrawString(\n            SpriteFont spriteFont, char* pChars, int* pGlyphIndices, int charsCount, Vector2 position, Color color,\n            ref Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth)\n        {\n            float sortKey = 0;\n            // set SortKey based on SpriteSortMode.\n            switch (_sortMode)\n            {\n                // Comparison of Texture objects.\n                case SpriteSortMode.Texture:\n                    sortKey = spriteFont.Texture.SortingKey;\n                    break;\n                // Comparison of Depth\n                case SpriteSortMode.FrontToBack:\n                    sortKey = layerDepth;\n                    break;\n                // Comparison of Depth in reverse\n                case SpriteSortMode.BackToFront:\n                    sortKey = -layerDepth;\n                    break;\n            }\n\n            Vector2 flipAdjustment = Vector2.Zero;\n\n            bool flippedVert = (effects & SpriteEffects.FlipVertically) == SpriteEffects.FlipVertically;\n            bool flippedHorz = (effects & SpriteEffects.FlipHorizontally) == SpriteEffects.FlipHorizontally;\n\n            if (flippedVert || flippedHorz)\n            {\n                Vector2 size = spriteFont.MeasureString(pChars, pGlyphIndices, charsCount);\n\n                if (flippedHorz)\n                {\n                    origin.X *= -1;\n                    flipAdjustment.X = -size.X;\n                }\n\n                if (flippedVert)\n                {\n                    origin.Y *= -1;\n                    flipAdjustment.Y = spriteFont.LineSpacing - size.Y;\n                }\n            }\n\n            Matrix transformation = Matrix.Identity;\n            if (rotation.i == 0)\n            {\n                transformation.M11 = (flippedHorz ? -scale.X : scale.X);\n                transformation.M22 = (flippedVert ? -scale.Y : scale.Y);\n                transformation.M41 = (flipAdjustment.X - origin.X) * transformation.M11 + position.X;\n                transformation.M42 = (flipAdjustment.Y - origin.Y) * transformation.M22 + position.Y;\n            }\n            else\n            {\n                transformation.M11 = (flippedHorz ? -scale.X : scale.X) *  rotation.R;\n                transformation.M12 = (flippedHorz ? -scale.X : scale.X) *  rotation.i;\n                transformation.M21 = (flippedVert ? -scale.Y : scale.Y) * -rotation.i;\n                transformation.M22 = (flippedVert ? -scale.Y : scale.Y) *  rotation.R;\n                transformation.M41 = (flipAdjustment.X - origin.X) * transformation.M11 + (flipAdjustment.Y - origin.Y) * transformation.M21 + position.X;\n                transformation.M42 = (flipAdjustment.X - origin.X) * transformation.M12 + (flipAdjustment.Y - origin.Y) * transformation.M22 + position.Y;\n            }\n\n            Vector2 offset = Vector2.Zero;\n            bool firstGlyphOfLine = true;\n\n            fixed (SpriteFont.Glyph* pGlyphs = spriteFont.InternalGlyphs)\n            {\n                for (int i = 0; i < charsCount; i++)\n                {\n                    char c = pChars[i];\n\n                    if (c == '\\r')\n                        continue;\n\n                    if (c == '\\n')\n                    {\n                        offset.X = 0;\n                        offset.Y += spriteFont.LineSpacing;\n                        firstGlyphOfLine = true;\n                        continue;\n                    }\n\n                    int currentGlyphIndex = pGlyphIndices[i];\n                    if (currentGlyphIndex == -1)\n                        throw new ArgumentException(SpriteFont.UnresolvableCharacterErrorMessage(c), \"text\");\n                    SpriteFont.Glyph* pCurrentGlyph = pGlyphs + currentGlyphIndex;\n\n                    // The first character on a line might have a negative left side bearing.\n                    // In this scenario, SpriteBatch/SpriteFont normally offset the text to the right,\n                    //  so that text does not hang off the left side of its rectangle.\n                    if (firstGlyphOfLine)\n                    {\n                        offset.X = Math.Max(pCurrentGlyph->LeftSideBearing, 0);\n                        firstGlyphOfLine = false;\n                    }\n                    else\n                    {\n                        offset.X += spriteFont.Spacing + pCurrentGlyph->LeftSideBearing;\n                    }\n\n                    Vector2 p = offset;\n\n                    if (flippedHorz)\n                        p.X += pCurrentGlyph->BoundsInTexture.Width;\n                    p.X += pCurrentGlyph->Cropping.X;\n\n                    if (flippedVert)\n                        p.Y += pCurrentGlyph->BoundsInTexture.Height - spriteFont.LineSpacing;\n                    p.Y += pCurrentGlyph->Cropping.Y;\n\n                    //Opt: Vector2.Transform(ref p, ref transformation, out p);\n                    float tpx = (p.X * transformation.M11);\n                    float tpy = (p.X * transformation.M12);\n                    tpx += (p.Y * transformation.M21) + transformation.M41;\n                    tpy += (p.Y * transformation.M22) + transformation.M42;\n\n                    SpriteBatchItem item = _batcher.CreateBatchItem();\n                    item.Texture = spriteFont.Texture;\n                    item.SortKey = sortKey;\n\n                    _texCoordTL = pCurrentGlyph->TexCoordTL;\n                    _texCoordBR = pCurrentGlyph->TexCoordBR;\n\n                    if ((effects & SpriteEffects.FlipVertically) != 0)\n                    {\n                        float temp = _texCoordBR.Y;\n                        _texCoordBR.Y = _texCoordTL.Y;\n                        _texCoordTL.Y = temp;\n                    }\n                    if ((effects & SpriteEffects.FlipHorizontally) != 0)\n                    {\n                        float temp = _texCoordBR.X;\n                        _texCoordBR.X = _texCoordTL.X;\n                        _texCoordTL.X = temp;\n                    }\n\n                    if (rotation.i == 0f)\n                    {\n                        item.Set(tpx,\n                                 tpy,\n                                 pCurrentGlyph->BoundsInTexture.Width * scale.X,\n                                 pCurrentGlyph->BoundsInTexture.Height * scale.Y,\n                                 layerDepth,\n                                 color,\n                                 _texCoordTL,\n                                 _texCoordBR);\n                    }\n                    else\n                    {\n                        item.Set(tpx,\n                                 tpy,\n                                 0,\n                                 0,\n                                 pCurrentGlyph->BoundsInTexture.Width * scale.X,\n                                 pCurrentGlyph->BoundsInTexture.Height * scale.Y,\n                                 ref rotation,\n                                 layerDepth,\n                                 color,\n                                 _texCoordTL,\n                                 _texCoordBR);\n                    }\n\n                    offset.X += pCurrentGlyph->Width + pCurrentGlyph->RightSideBearing;\n                }\n            }\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        /// <param name=\"rtl\">Text is Right to Left.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, string text, Vector2 position, Color color,\n            float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth, bool rtl)\n        {\n            Complex rotation2;\n            if (rotation == 0f)\n            {\n                rotation2.R = 1f;\n                rotation2.i = 0f;\n            }\n            else\n            {\n                rotation2.R = (float)Math.Cos(rotation);\n                rotation2.i = (float)Math.Sin(rotation);\n            }\n\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                       ref rotation2, origin, scale, effects, layerDepth, rtl);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        /// <param name=\"rtl\">Text is Right to Left.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color,\n            float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth, bool rtl)\n        {\n            Complex rotation2;\n            if (rotation == 0f)\n            {\n                rotation2.R = 1f;\n                rotation2.i = 0f;\n            }\n            else\n            {\n                rotation2.R = (float)Math.Cos(rotation);\n                rotation2.i = (float)Math.Sin(rotation);\n            }\n\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                ref rotation2, origin, scale, effects, layerDepth, rtl);\n        }\n\n        /// <summary>\n        /// Submit a text string of sprites for drawing in the current batch.\n        /// </summary>\n        /// <param name=\"spriteFont\">A font.</param>\n        /// <param name=\"text\">The text which will be drawn.</param>\n        /// <param name=\"position\">The drawing location on screen.</param>\n        /// <param name=\"color\">A color mask.</param>\n        /// <param name=\"rotation\">A rotation of this string.</param>\n        /// <param name=\"origin\">Center of the rotation. 0,0 by default.</param>\n        /// <param name=\"scale\">A scaling of this string.</param>\n        /// <param name=\"effects\">Modificators for drawing. Can be combined.</param>\n        /// <param name=\"layerDepth\">A depth of the layer of this string.</param>\n        /// <param name=\"rtl\">Text is Right to Left.</param>\n        public unsafe void DrawString(\n            SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color,\n            Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth, bool rtl)\n        {\n            CheckValid(spriteFont, text);\n\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color,\n                ref rotation, origin, scale, effects, layerDepth, rtl);\n        }\n\n        private unsafe void DrawString(\n            SpriteFont spriteFont, char* pChars, int* pGlyphIndices, int charsCount, Vector2 position, Color color,\n            ref Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth, bool rtl)\n        {\n            float sortKey = 0;\n            // set SortKey based on SpriteSortMode.\n            switch (_sortMode)\n            {\n                // Comparison of Texture objects.\n                case SpriteSortMode.Texture:\n                    sortKey = spriteFont.Texture.SortingKey;\n                    break;\n                // Comparison of Depth\n                case SpriteSortMode.FrontToBack:\n                    sortKey = layerDepth;\n                    break;\n                // Comparison of Depth in reverse\n                case SpriteSortMode.BackToFront:\n                    sortKey = -layerDepth;\n                    break;\n            }\n\n            Vector2 flipAdjustment = Vector2.Zero;\n\n            bool flippedVert = (effects & SpriteEffects.FlipVertically) == SpriteEffects.FlipVertically;\n            bool flippedHorz = ((effects & SpriteEffects.FlipHorizontally) == SpriteEffects.FlipHorizontally) ^ rtl;\n\n            if (flippedVert || flippedHorz || rtl)\n            {\n                Vector2 size = spriteFont.MeasureString(pChars, pGlyphIndices, charsCount);\n\n                if (flippedHorz ^ rtl)\n                {\n                    origin.X *= -1;\n                    flipAdjustment.X = -size.X;\n                }\n                if (flippedVert)\n                {\n                    origin.Y *= -1;\n                    flipAdjustment.Y = spriteFont.LineSpacing - size.Y;\n                }\n            }\n\n            Matrix transformation = Matrix.Identity;\n            if (rotation.i == 0)\n            {\n                transformation.M11 = (flippedHorz ? -scale.X : scale.X);\n                transformation.M22 = (flippedVert ? -scale.Y : scale.Y);\n                transformation.M41 = (flipAdjustment.X - origin.X) * transformation.M11 + position.X;\n                transformation.M42 = (flipAdjustment.Y - origin.Y) * transformation.M22 + position.Y;\n            }\n            else\n            {\n                transformation.M11 = (flippedHorz ? -scale.X : scale.X) *  rotation.R;\n                transformation.M12 = (flippedHorz ? -scale.X : scale.X) *  rotation.i;\n                transformation.M21 = (flippedVert ? -scale.Y : scale.Y) * -rotation.i;\n                transformation.M22 = (flippedVert ? -scale.Y : scale.Y) *  rotation.R;\n                transformation.M41 = (flipAdjustment.X - origin.X) * transformation.M11 + (flipAdjustment.Y - origin.Y) * transformation.M21 + position.X;\n                transformation.M42 = (flipAdjustment.X - origin.X) * transformation.M12 + (flipAdjustment.Y - origin.Y) * transformation.M22 + position.Y;\n            }\n\n            Vector2 offset = Vector2.Zero;\n            bool firstGlyphOfLine = true;\n\n            fixed (SpriteFont.Glyph* pGlyphs = spriteFont.InternalGlyphs)\n            {\n                for (int i = 0; i < charsCount; i++)\n                {\n                    char c = pChars[i];\n\n                    if (c == '\\r')\n                        continue;\n\n                    if (c == '\\n')\n                    {\n                        offset.X = 0;\n                        offset.Y += spriteFont.LineSpacing;\n                        firstGlyphOfLine = true;\n                        continue;\n                    }\n\n                    int currentGlyphIndex = pGlyphIndices[i];\n                    if (currentGlyphIndex == -1)\n                        throw new ArgumentException(SpriteFont.UnresolvableCharacterErrorMessage(c), \"text\");\n                    SpriteFont.Glyph* pCurrentGlyph = pGlyphs + currentGlyphIndex;\n\n                    // The first character on a line might have a negative left side bearing.\n                    // In this scenario, SpriteBatch/SpriteFont normally offset the text to the right,\n                    //  so that text does not hang off the left side of its rectangle.\n                    if (firstGlyphOfLine)\n                    {\n                        offset.X = Math.Max(rtl ? pCurrentGlyph->RightSideBearing : pCurrentGlyph->LeftSideBearing, 0);\n                        firstGlyphOfLine = false;\n                    }\n                    else\n                    {\n                        offset.X += spriteFont.Spacing + (rtl ? pCurrentGlyph->RightSideBearing : pCurrentGlyph->LeftSideBearing);\n                    }\n\n                    Vector2 p = offset;\n\n                    if (flippedHorz)\n                        p.X += pCurrentGlyph->BoundsInTexture.Width;\n                    p.X += pCurrentGlyph->Cropping.X;\n\n                    if (flippedVert)\n                        p.Y += pCurrentGlyph->BoundsInTexture.Height - spriteFont.LineSpacing;\n                    p.Y += pCurrentGlyph->Cropping.Y;\n\n                    //Opt: Vector2.Transform(ref p, ref transformation, out p);\n                    float tpx = (p.X * transformation.M11);\n                    float tpy = (p.X * transformation.M12);\n                    tpx += (p.Y * transformation.M21) + transformation.M41;\n                    tpy += (p.Y * transformation.M22) + transformation.M42;\n\n                    SpriteBatchItem item = _batcher.CreateBatchItem();\n                    item.Texture = spriteFont.Texture;\n                    item.SortKey = sortKey;\n\n                    _texCoordTL = pCurrentGlyph->TexCoordTL;\n                    _texCoordBR = pCurrentGlyph->TexCoordBR;\n\n                    if ((effects & SpriteEffects.FlipVertically) != 0)\n                    {\n                        float temp = _texCoordBR.Y;\n                        _texCoordBR.Y = _texCoordTL.Y;\n                        _texCoordTL.Y = temp;\n                    }\n                    if ((effects & SpriteEffects.FlipHorizontally) != 0)\n                    {\n                        float temp = _texCoordBR.X;\n                        _texCoordBR.X = _texCoordTL.X;\n                        _texCoordTL.X = temp;\n                    }\n\n                    if (rotation.i == 0f)\n                    {\n                        item.Set(tpx,\n                                 tpy,\n                                 pCurrentGlyph->BoundsInTexture.Width  * scale.X,\n                                 pCurrentGlyph->BoundsInTexture.Height * scale.Y,\n                                 layerDepth,\n                                 color,\n                                 _texCoordTL, _texCoordBR);\n                    }\n                    else\n                    {\n                        item.Set(tpx,\n                                 tpy,\n                                 0,\n                                 0,\n                                 pCurrentGlyph->BoundsInTexture.Width  * scale.X,\n                                 pCurrentGlyph->BoundsInTexture.Height * scale.Y,\n                                 ref rotation,\n                                 layerDepth,\n                                 color,\n                                 _texCoordTL,\n                                 _texCoordBR);\n                    }\n\n                    offset.X += pCurrentGlyph->Width + (rtl ? pCurrentGlyph->LeftSideBearing : pCurrentGlyph->RightSideBearing);\n                }\n            }\n\n            if (_sortMode == SpriteSortMode.Immediate)\n                _batcher.DrawBatch(_effect);\n        }\n\n        /// <summary>\n        /// Immediately releases the unmanaged resources used by this object.\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected override void Dispose(bool disposing)\n        {\n            System.Diagnostics.Debug.Assert(!IsDisposed);\n\n            if (disposing)\n            {\n                if (_spriteEffect != null)\n                {\n                    _spriteEffect.Dispose();\n                    _spriteEffect = null;\n                }\n                if (_batcher != null)\n                {\n                    _batcher.Dispose();\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SpriteBatchItem.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class SpriteBatchItem : IComparable<SpriteBatchItem>\n    {\n        public Texture2D Texture;\n        public float SortKey;\n\n        public VertexPositionColorTexture vertexTL;\n        public VertexPositionColorTexture vertexTR;\n        public VertexPositionColorTexture vertexBL;\n        public VertexPositionColorTexture vertexBR;\n        public SpriteBatchItem()\n        {\n            vertexTL = new VertexPositionColorTexture();\n            vertexTR = new VertexPositionColorTexture();\n            vertexBL = new VertexPositionColorTexture();\n            vertexBR = new VertexPositionColorTexture();\n        }\n\n        public void Set(float x, float y, float w, float h, float depth,\n                        Color color, Vector2 texCoordTL, Vector2 texCoordBR)\n        {\n            vertexTL.Position.X = x;\n            vertexTL.Position.Y = y;\n            vertexTL.Position.Z = depth;\n            vertexTL.Color = color;\n            vertexTL.TextureCoordinate.X = texCoordTL.X;\n            vertexTL.TextureCoordinate.Y = texCoordTL.Y;\n\n            vertexTR.Position.X = x + w;\n            vertexTR.Position.Y = y;\n            vertexTR.Position.Z = depth;\n            vertexTR.Color = color;\n            vertexTR.TextureCoordinate.X = texCoordBR.X;\n            vertexTR.TextureCoordinate.Y = texCoordTL.Y;\n\n            vertexBL.Position.X = x;\n            vertexBL.Position.Y = y + h;\n            vertexBL.Position.Z = depth;\n            vertexBL.Color = color;\n            vertexBL.TextureCoordinate.X = texCoordTL.X;\n            vertexBL.TextureCoordinate.Y = texCoordBR.Y;\n\n            vertexBR.Position.X = x + w;\n            vertexBR.Position.Y = y + h;\n            vertexBR.Position.Z = depth;\n            vertexBR.Color = color;\n            vertexBR.TextureCoordinate.X = texCoordBR.X;\n            vertexBR.TextureCoordinate.Y = texCoordBR.Y;\n        }\n\n        public void Set(float x, float y, float dx, float dy, float w, float h, ref Complex q, float depth,\n                        Color color, Vector2 texCoordTL, Vector2 texCoordBR)\n        {\n            vertexTL.Position.X = x + dx*q.R-dy*q.i;\n            vertexTL.Position.Y = y + dx*q.i+dy*q.R;\n            vertexTL.Position.Z = depth;\n            vertexTL.Color = color;\n            vertexTL.TextureCoordinate.X = texCoordTL.X;\n            vertexTL.TextureCoordinate.Y = texCoordTL.Y;\n\n            vertexTR.Position.X = x + (dx+w)*q.R-dy*q.i;\n            vertexTR.Position.Y = y + (dx+w)*q.i+dy*q.R;\n            vertexTR.Position.Z = depth;\n            vertexTR.Color = color;\n            vertexTR.TextureCoordinate.X = texCoordBR.X;\n            vertexTR.TextureCoordinate.Y = texCoordTL.Y;\n\n            vertexBL.Position.X = x + dx*q.R-(dy+h)*q.i;\n            vertexBL.Position.Y = y + dx*q.i+(dy+h)*q.R;\n            vertexBL.Position.Z = depth;\n            vertexBL.Color = color;\n            vertexBL.TextureCoordinate.X = texCoordTL.X;\n            vertexBL.TextureCoordinate.Y = texCoordBR.Y;\n\n            vertexBR.Position.X = x + (dx+w)*q.R-(dy+h)*q.i;\n            vertexBR.Position.Y = y + (dx+w)*q.i+(dy+h)*q.R;\n            vertexBR.Position.Z = depth;\n            vertexBR.Color = color;\n            vertexBR.TextureCoordinate.X = texCoordBR.X;\n            vertexBR.TextureCoordinate.Y = texCoordBR.Y;\n        }\n\n\n        #region Implement IComparable\n        public int CompareTo(SpriteBatchItem other)\n        {\n            return SortKey.CompareTo(other.SortKey);\n        }\n        #endregion\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SpriteBatcherStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public abstract class SpriteBatcherStrategy : IDisposable\n    {\n\n        public abstract int BatchItemCount { get; }\n\n        public abstract SpriteBatchItem CreateBatchItem();\n        public abstract void SortBatch(SpriteSortMode sortMode);\n        public abstract void DrawBatch(Effect effect);\n\n\n        #region IDisposable Members\n\n        ~SpriteBatcherStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n\n        #endregion IDisposable Members\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SpriteEffects.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines sprite visual options for mirroring.\n    /// </summary>\n    [Flags]\n    public enum SpriteEffects\n    {\n        /// <summary>\n        /// No options specified.\n        /// </summary>\n        None = 0,\n        /// <summary>\n        /// Render the sprite reversed along the X axis.\n        /// </summary>\n        FlipHorizontally = 1,\n        /// <summary>\n        /// Render the sprite reversed along the Y axis.\n        /// </summary>\n        FlipVertically = 2\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SpriteFont.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\n// Original code from SilverSprite Project\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Diagnostics;\nusing System.Text;\n\nnamespace Microsoft.Xna.Framework.Graphics \n{\n\n    public sealed class SpriteFont \n    {\n        private readonly ReadOnlyCollection<char> _readOnlyKeys;\n        private readonly CharacterRegion[] _regions;\n        private readonly Texture2D _texture;\n        private char? _defaultCharacter;\n        private int _defaultGlyphIndex = -1;\n\n        private readonly Glyph[] _glyphs;\n\n        ///<remarks>SpriteBatcher need direct accest to the Glyph array</remarks>\n        internal Glyph[] InternalGlyphs { get { return _glyphs; } }\n\n\n        class CharComparer: IEqualityComparer<char>\n        {\n            public bool Equals(char x, char y)\n            {\n                return x == y;\n            }\n\n            public int GetHashCode(char b)\n            {\n                return (b);\n            }\n\n            static public readonly CharComparer Default = new CharComparer();\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"SpriteFont\" /> class.\n        /// </summary>\n        /// <param name=\"texture\">The font texture.</param>\n        /// <param name=\"glyphBounds\">The rectangles in the font texture containing letters.</param>\n        /// <param name=\"cropping\">The cropping rectangles, which are applied to the corresponding glyphBounds to calculate the bounds of the actual character.</param>\n        /// <param name=\"characters\">The characters.</param>\n        /// <param name=\"lineSpacing\">The line spacing (the distance from baseline to baseline) of the font.</param>\n        /// <param name=\"spacing\">The spacing (tracking) between characters in the font.</param>\n        /// <param name=\"kerning\">The letters kernings (X - left side bearing, Y - width and Z - right side bearing).</param>\n        /// <param name=\"defaultCharacter\">The character that will be substituted when a given character is not included in the font.</param>\n        public SpriteFont(\n            Texture2D texture, List<Rectangle> glyphBounds, List<Rectangle> cropping, List<char> characters,\n            int lineSpacing, float spacing, List<Vector3> kerning, char? defaultCharacter)\n        {\n            _texture = texture;\n            LineSpacing = lineSpacing;\n            Spacing = spacing;\n\n            _readOnlyKeys = new ReadOnlyCollection<char>(characters);\n\n            // create regions\n            var regions = new Stack<CharacterRegion>();\n            for (int i = 0; i < characters.Count; i++) \n            {                \n                if(regions.Count == 0 || characters[i] > (regions.Peek().End+1))\n                {\n                    // Start a new region\n                    regions.Push(new CharacterRegion(characters[i], i));\n                } \n                else if(characters[i] == (regions.Peek().End+1))\n                {\n                    CharacterRegion currentRegion = regions.Pop();\n                    // include character in currentRegion\n                    currentRegion.End++;\n                    regions.Push(currentRegion);\n                }\n                else // characters[i] < (regions.Peek().End+1)\n                {\n                    throw new InvalidOperationException(\"Invalid SpriteFont. Character map must be in ascending order.\");\n                }\n            }\n            _regions = regions.ToArray();\n            Array.Reverse(_regions);\n\n            // create Glyphs\n            _glyphs = new Glyph[characters.Count];\n            for (int i = 0; i < characters.Count; i++)\n            {\n                _glyphs[i] = new Glyph(glyphBounds[i], cropping[i], kerning[i], _texture);\n            }\n\n            Glyphs = new GlyphCollection(this, _readOnlyKeys);\n\n            DefaultCharacter = defaultCharacter;\n        }\n\n        /// <summary>\n        /// Gets the texture that this SpriteFont draws from.\n        /// </summary>\n        /// <remarks>Can be used to implement custom rendering of a SpriteFont</remarks>\n        public Texture2D Texture { get { return _texture; } }\n\n        /// <summary>\n        /// Gets a collection of the characters in the font.\n        /// </summary>\n        public ReadOnlyCollection<char> Characters { get { return _readOnlyKeys; } }\n\n        /// <summary>\n        /// The glyphs in this SpriteFont.\n        /// </summary>\n        ///\n        public readonly GlyphCollection Glyphs;\n\n        /// <summary>\n        /// Gets or sets the character that will be substituted when a\n        /// given character is not included in the font.\n        /// </summary>\n        public char? DefaultCharacter\n        {\n            get { return _defaultCharacter; }\n            set\n            {   \n                // Get the default glyph index here once.\n                if (value.HasValue)\n                {\n                    if(!TryGetGlyphIndex(value.Value, out _defaultGlyphIndex))\n                        throw new ArgumentException(UnresolvableCharacterErrorMessage(value.Value));\n                }\n                else\n                    _defaultGlyphIndex = -1;\n\n                _defaultCharacter = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the line spacing (the distance from baseline\n        /// to baseline) of the font.\n        /// </summary>\n        public int LineSpacing { get; set; }\n\n        /// <summary>\n        /// Gets or sets the spacing (tracking) between characters in\n        /// the font.\n        /// </summary>\n        public float Spacing { get; set; }\n\n        /// <summary>\n        /// Returns the size of a string when rendered in this font.\n        /// </summary>\n        /// <param name=\"text\">The text to measure.</param>\n        /// <returns>The size, in pixels, of 'text' when rendered in\n        /// this font.</returns>\n        public unsafe Vector2 MeasureString(string text)\n        {\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            return MeasureString(pChars, pGlyphIndices, text.Length);\n        }\n\n        /// <summary>\n        /// Returns the size of the contents of a StringBuilder when\n        /// rendered in this font.\n        /// </summary>\n        /// <param name=\"text\">The text to measure.</param>\n        /// <returns>The size, in pixels, of 'text' when rendered in\n        /// this font.</returns>\n        public unsafe Vector2 MeasureString(StringBuilder text)\n        {\n            char* pChars = stackalloc char[text.Length];\n            int* pGlyphIndices = stackalloc int[text.Length];\n            GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length);\n            return MeasureString(pChars, pGlyphIndices, text.Length);\n        }\n\n        internal unsafe Vector2 MeasureString(char* pChars, int* pGlyphIndices, int charsCount)\n        {\n            if (charsCount == 0)\n                return Vector2.Zero;\n\n            float width = 0.0f;\n            float finalLineHeight = (float)LineSpacing;\n            \n            Vector2 offset = Vector2.Zero;\n            bool firstGlyphOfLine = true;\n\n            fixed (Glyph* pGlyphs = InternalGlyphs)\n            for (int i = 0; i < charsCount; i++)\n            {\n                char c = pChars[i];\n\n                if (c == '\\r')\n                    continue;\n\n                if (c == '\\n')\n                {\n                    finalLineHeight = LineSpacing;\n\n                    offset.X = 0;\n                    offset.Y += LineSpacing;\n                    firstGlyphOfLine = true;\n                    continue;\n                }\n\n                int currentGlyphIndex = pGlyphIndices[i];\n                if (currentGlyphIndex == -1)\n                    throw new ArgumentException(UnresolvableCharacterErrorMessage(c), \"text\");\n\n                Debug.Assert(currentGlyphIndex >= 0 && currentGlyphIndex < InternalGlyphs.Length, \"currentGlyphIndex was outside the bounds of the array.\");\n                Glyph* pCurrentGlyph = pGlyphs + currentGlyphIndex;\n\n                // The first character on a line might have a negative left side bearing.\n                // In this scenario, SpriteBatch/SpriteFont normally offset the text to the right,\n                //  so that text does not hang off the left side of its rectangle.\n                if (firstGlyphOfLine)\n                {\n                    offset.X = Math.Max(pCurrentGlyph->LeftSideBearing, 0);\n                    firstGlyphOfLine = false;\n                }\n                else\n                {\n                    offset.X += Spacing + pCurrentGlyph->LeftSideBearing;\n                }\n\n                offset.X += pCurrentGlyph->Width;\n\n                float proposedWidth = offset.X + Math.Max(pCurrentGlyph->RightSideBearing, 0);\n                if (proposedWidth > width)\n                    width = proposedWidth;\n\n                offset.X += pCurrentGlyph->RightSideBearing;\n\n                if (pCurrentGlyph->Cropping.Height > finalLineHeight)\n                    finalLineHeight = pCurrentGlyph->Cropping.Height;\n            }\n\n            float height = offset.Y + finalLineHeight;\n            return new Vector2(width, height);\n        }\n        \n        internal unsafe bool TryGetGlyphIndex(char c, out int index)\n        {\n            fixed (CharacterRegion* pRegions = _regions)\n                return TryGetGlyphIndex(pRegions, c, out index);\n        }\n        \n        private unsafe bool TryGetGlyphIndex(CharacterRegion* pRegions, char c, out int index)\n        {\n            // Get region Index\n            int regionIdx = -1;\n            int l = 0;\n            int r = _regions.Length - 1;\n            while (l <= r)\n            {\n                int m = (l + r) >> 1;\n                Debug.Assert(m >= 0 && m < _regions.Length, \"Index was outside the bounds of the array.\");\n                if (pRegions[m].End < c)\n                {\n                    l = m + 1;\n                }\n                else if (pRegions[m].Start > c)\n                {\n                    r = m - 1;\n                }\n                else\n                {\n                    regionIdx = m;\n                    break;\n                }\n            }\n\n            if (regionIdx != -1)\n            {\n                index = pRegions[regionIdx].StartIndex + (c - pRegions[regionIdx].Start);\n                return true;\n            }\n            else\n            {\n                index = -1;\n                return false;\n            }\n        }\n\n        internal unsafe void GetGlyphIndexes(StringBuilder text, char* pChars, int* pGlyphIndices, int charsCount)\n        {\n            fixed (CharacterRegion* pRegions = _regions)\n            {\n                for (int i = 0; i < charsCount; i++)\n                {\n                    pChars[i] = text[i];\n                    if (!TryGetGlyphIndex(pRegions, pChars[i], out pGlyphIndices[i]))\n                    {\n                        pGlyphIndices[i] = _defaultGlyphIndex;\n                    }\n                }\n            }\n        }\n\n        internal unsafe void GetGlyphIndexes(string text, char* pChars, int* pGlyphIndices, int charsCount)\n        {\n            fixed (CharacterRegion* pRegions = _regions)\n            {\n                for (int i = 0; i < charsCount; i++)\n                {\n                    pChars[i] = text[i];\n                    if (!TryGetGlyphIndex(pRegions, pChars[i], out pGlyphIndices[i]))\n                    {\n                        pGlyphIndices[i] = _defaultGlyphIndex;\n                    }\n                }\n            }\n        }\n\n        internal static string UnresolvableCharacterErrorMessage(char ch)\n        {\n            return String.Format(\"Character '{0}' (#{1}) cannot be resolved by this SpriteFont.\", ch,(int)ch);\n        }\n\n        /// <summary>\n        /// Struct that defines the spacing, Kerning, and bounds of a character.\n        /// </summary>\n        /// <remarks>Provides the data necessary to implement custom SpriteFont rendering.</remarks>\n        public struct Glyph \n        {\n            /// <summary>\n            /// Rectangle in the font texture where this letter exists.\n            /// </summary>\n            public Rectangle BoundsInTexture;\n            /// <summary>\n            /// Cropping applied to the BoundsInTexture to calculate the bounds of the actual character.\n            /// </summary>\n            public Rectangle Cropping;\n            /// <summary>\n            /// The amount of space between the left side of the character and its first pixel in the X dimension.\n            /// </summary>\n            public float LeftSideBearing;\n            /// <summary>\n            /// The amount of space between the right side of the character and its last pixel in the X dimension.\n            /// </summary>\n            public float RightSideBearing;\n            /// <summary>\n            /// Width of the character before kerning is applied. \n            /// </summary>\n            public float Width;\n            /// <summary>\n            /// Width of the character before kerning is applied. \n            /// </summary>\n            public float WidthIncludingBearings;\n\n            internal Vector2 TexCoordTL;\n            internal Vector2 TexCoordBR;\n\n            public static readonly Glyph Empty = new Glyph();\n\n            public Glyph(Rectangle glyphBounds, Rectangle cropping, Vector3 kerning, Texture2D texture) : this()\n            {\n                BoundsInTexture = glyphBounds;\n                Cropping = cropping;\n\n                LeftSideBearing = kerning.X;\n                Width = kerning.Y;\n                RightSideBearing = kerning.Z;\n\n                WidthIncludingBearings = kerning.X + kerning.Y + kerning.Z;\n\n                TexCoordTL = new Vector2(glyphBounds.X * texture.TexelWidth,\n                                         glyphBounds.Y * texture.TexelHeight);\n                TexCoordBR = new Vector2((glyphBounds.X + glyphBounds.Width) * texture.TexelWidth,\n                                         (glyphBounds.Y + glyphBounds.Height) * texture.TexelHeight);\n            }\n\n            public override string ToString ()\n            {\n                return \"Glyph=\" + BoundsInTexture + \", Cropping=\" + Cropping + \", Kerning=\" + LeftSideBearing + \",\" + Width + \",\" + RightSideBearing;\n            }\n        }\n\n        private struct CharacterRegion\n        {\n            public char Start;\n            public char End;\n            public int StartIndex;\n\n            public CharacterRegion(char start, int startIndex)\n            {\n                this.Start = start;                \n                this.End = start;\n                this.StartIndex = startIndex;\n            }\n        }\n\n        public class GlyphCollection : IDictionary<char, Glyph>\n        {\n            private readonly SpriteFont _spriteFont;\n            private readonly ReadOnlyCollection<char> _keys;\n            private readonly ICollection<Glyph> _values;\n\n            internal GlyphCollection(SpriteFont spriteFont, ReadOnlyCollection<char> keys)\n            {\n                _spriteFont = spriteFont;\n                _keys = keys;\n                _values = new ReadOnlyCollection<Glyph>(_spriteFont._glyphs);\n            }\n\n            public Glyph this[char key]\n            {\n                get\n                {\n                    if (_spriteFont.TryGetGlyphIndex(key, out int glyphIdx))\n                    {\n                        Glyph glyph = _spriteFont._glyphs[glyphIdx];\n                        return glyph;\n                    }\n                    else\n                        throw new KeyNotFoundException();\n                }\n                set { throw new NotSupportedException(); }\n            }\n\n            public int Count { get { return _keys.Count; } }\n\n            public bool IsReadOnly { get { return true; } }\n\n            ICollection<char> IDictionary<char, Glyph>.Keys { get { return _keys; } }\n\n            ICollection<Glyph> IDictionary<char, Glyph>.Values { get { return _values; } }\n\n            public bool ContainsKey(char key)\n            {\n                return _spriteFont.TryGetGlyphIndex(key, out int glyphIdx);\n            }\n\n            public bool TryGetValue(char key, out Glyph value)\n            {\n                if (_spriteFont.TryGetGlyphIndex(key, out int glyphIdx))\n                {\n                    value = _spriteFont._glyphs[glyphIdx];\n                    return true;\n                }\n                else\n                {\n                    value = default(Glyph);\n                    return false;\n                }\n            }\n\n            bool ICollection<KeyValuePair<char, Glyph>>.Contains(KeyValuePair<char, Glyph> item)\n            {\n                return (_keys.Contains(item.Key) && this[item.Key].Equals(item.Value));\n            }\n\n            void ICollection<KeyValuePair<char, Glyph>>.CopyTo(KeyValuePair<char, Glyph>[] array, int arrayIndex)\n            {\n                foreach (var keyValue in this)\n                    array[arrayIndex++] = keyValue;\n            }\n\n            IEnumerator<KeyValuePair<char, Glyph>> IEnumerable<KeyValuePair<char, Glyph>>.GetEnumerator()\n            {\n                return new CharGlyphPairEnumerator(_keys, this);\n            }\n\n            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n            {\n                return ((IEnumerable<KeyValuePair<char, Glyph>>)this).GetEnumerator();\n            }\n\n            void IDictionary<char, Glyph>.Add(char key, Glyph value)\n            {\n                throw new NotSupportedException();\n            }\n\n            bool IDictionary<char, Glyph>.Remove(char key)\n            {\n                throw new NotSupportedException();\n            }\n\n            void ICollection<KeyValuePair<char, Glyph>>.Add(KeyValuePair<char, Glyph> item)\n            {\n                throw new NotSupportedException();\n            }\n\n            bool ICollection<KeyValuePair<char, Glyph>>.Remove(KeyValuePair<char, Glyph> item)\n            {\n                throw new NotSupportedException();\n            }\n\n            void ICollection<KeyValuePair<char, Glyph>>.Clear()\n            {\n                throw new NotSupportedException();\n            }\n\n            public struct CharGlyphPairEnumerator : IEnumerator<KeyValuePair<char, Glyph>>\n            {\n                private int i;\n                private ReadOnlyCollection<char> _keys;\n                private GlyphCollection _collection;\n\n                public CharGlyphPairEnumerator( ReadOnlyCollection<char> keys, GlyphCollection collection)\n                {\n                    i = -1;\n                    _keys = keys;\n                    _collection = collection;\n                }\n\n                #region IEnumerator<KeyValuePair<char, Glyph>>\n\n                public KeyValuePair<char, Glyph> Current\n                {\n                    get\n                    {\n                        char key = _keys[i];\n                        Glyph glyph = _collection[key];\n                        return new KeyValuePair<char, Glyph>(key, glyph);\n                    }\n                }\n\n                #endregion IEnumerator<KeyValuePair<char, Glyph>>\n\n                #region IEnumerator\n\n                public bool MoveNext()\n                {\n                    return (++i < _keys.Count);\n                }\n\n                object IEnumerator.Current\n                {\n                    get\n                    {\n                        char key = _keys[i];\n                        Glyph glyph = _collection[key];\n                        return new KeyValuePair<char, Glyph>(key, glyph);\n                    }\n                }\n\n                void IDisposable.Dispose()\n                {\n                        _collection = null;\n                        _keys = null;\n                        i = -1;\n                }\n\n                void IEnumerator.Reset()\n                {\n                    i = -1;\n                }\n\n                #endregion IEnumerator\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SpriteSortMode.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines sprite sort rendering options.\n    /// </summary>\n    public enum SpriteSortMode\n    {\n        /// <summary>\n        /// All sprites are drawing when <see cref=\"SpriteBatch.End\"/> invokes, in order of draw call sequence. Depth is ignored.\n        /// </summary>\n        Deferred,\n        /// <summary>\n        /// Each sprite is drawing at individual draw call, instead of <see cref=\"SpriteBatch.End\"/>. Depth is ignored.\n        /// </summary>\n        Immediate,\n        /// <summary>\n        /// Same as <see cref=\"SpriteSortMode.Deferred\"/>, except sprites are sorted by texture prior to drawing. Depth is ignored.\n        /// </summary>\n        Texture,\n        /// <summary>\n        /// Same as <see cref=\"SpriteSortMode.Deferred\"/>, except sprites are sorted by depth in back-to-front order prior to drawing.\n        /// An unstable sort is used, which means sprites with equal depth may not have their order preserved.\n        /// </summary>\n        BackToFront,\n        /// <summary>\n        /// Same as <see cref=\"SpriteSortMode.Deferred\"/>, except sprites are sorted by depth in front-to-back order prior to drawing.\n        /// An unstable sort is used, which means sprites with equal depth may not have their order preserved.\n        /// </summary>\n        FrontToBack\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/Blend.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines a blend mode.\n    /// </summary>\n    public enum Blend\n    {\n        /// <summary>\n        /// Each component of the color is multiplied by {1, 1, 1, 1}.\n        /// </summary>\n        One,\n        /// <summary>\n        /// Each component of the color is multiplied by {0, 0, 0, 0}.\n        /// </summary>\n        Zero,\n        /// <summary>\n        /// Each component of the color is multiplied by the source color. \n        /// {Rs, Gs, Bs, As}, where Rs, Gs, Bs, As are color source values.\n        /// </summary>\n        SourceColor,\n        /// <summary>\n        /// Each component of the color is multiplied by the inverse of the source color.\n        ///  {1 − Rs, 1 − Gs, 1 − Bs, 1 − As}, where Rs, Gs, Bs, As are color source values.\n        /// </summary>\n        InverseSourceColor,\n        /// <summary>\n        /// Each component of the color is multiplied by the alpha value of the source. \n        /// {As, As, As, As}, where As is the source alpha value.\n        /// </summary>\n        SourceAlpha,\n        /// <summary>\n        /// Each component of the color is multiplied by the inverse of the alpha value of the source. \n        /// {1 − As, 1 − As, 1 − As, 1 − As}, where As is the source alpha value.\n        /// </summary>\n        InverseSourceAlpha,\n        /// <summary>\n        /// Each component color is multiplied by the destination color. \n        /// {Rd, Gd, Bd, Ad}, where Rd, Gd, Bd, Ad are color destination values.\n        /// </summary>\n        DestinationColor,\t\n        /// <summary>\n        /// Each component of the color is multiplied by the inversed destination color. \n        /// {1 − Rd, 1 − Gd, 1 − Bd, 1 − Ad}, where Rd, Gd, Bd, Ad are color destination values.\n        /// </summary>\n        InverseDestinationColor,\n        /// <summary>\n        /// Each component of the color is multiplied by the alpha value of the destination.\n        /// {Ad, Ad, Ad, Ad}, where Ad is the destination alpha value.\n        /// </summary>\n        DestinationAlpha,\t\n        /// <summary>\n        /// Each component of the color is multiplied by the inversed alpha value of the destination. \n        /// {1 − Ad, 1 − Ad, 1 − Ad, 1 − Ad}, where Ad is the destination alpha value.\n        /// </summary>\n        InverseDestinationAlpha,\n        /// <summary>\n        /// Each component of the color is multiplied by a constant in the <see cref=\"P:Microsoft.Xna.Framework.Graphics.GraphicsDevice.BlendFactor\"/>.\n        /// </summary>\n        BlendFactor,\n        /// <summary>\n        /// Each component of the color is multiplied by a inversed constant in the <see cref=\"P:Microsoft.Xna.Framework.Graphics.GraphicsDevice.BlendFactor\"/>.\n        /// </summary>\n        InverseBlendFactor,\n        /// <summary>\n        /// Each component of the color is multiplied by either the alpha of the source color, or the inverse of the alpha of the source color, whichever is greater. \n        /// {f, f, f, 1}, where f = min(As, 1 − As), where As is the source alpha value.\n        /// </summary>\n        SourceAlphaSaturation\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/BlendFunction.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines a function for color blending.\n    /// </summary>\n    public enum BlendFunction\n    {\n        /// <summary>\n        /// The function will adds destination to the source. (srcColor * srcBlend) + (destColor * destBlend)\n        /// </summary>\n        Add,\n        /// <summary>\n        /// The function will subtracts destination from source. (srcColor * srcBlend) − (destColor * destBlend)\n        /// </summary>\n        Subtract,\n        /// <summary>\n        /// The function will subtracts source from destination. (destColor * destBlend) - (srcColor * srcBlend) \n        /// </summary>\n        ReverseSubtract,\n        /// <summary>\n        /// The function will extracts minimum of the source and destination. min((srcColor * srcBlend),(destColor * destBlend))\n        /// </summary>\n        Min, \n        /// <summary>\n        /// The function will extracts maximum of the source and destination. max((srcColor * srcBlend),(destColor * destBlend))\n        /// </summary>\n        Max\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/BlendState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class BlendState : GraphicsResource\n        , IPlatformBlendState\n    {\n        internal IBlendStateStrategy _strategy;\n\n        T IPlatformBlendState.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        public static readonly BlendState Additive;\n        public static readonly BlendState AlphaBlend;\n        public static readonly BlendState NonPremultiplied;\n        public static readonly BlendState Opaque;\n\n        static BlendState()\n        {\n            Additive = new BlendState(\"BlendState.Additive\", Blend.SourceAlpha, Blend.One);\n            AlphaBlend = new BlendState(\"BlendState.AlphaBlend\", Blend.One, Blend.InverseSourceAlpha);\n            NonPremultiplied = new BlendState(\"BlendState.NonPremultiplied\", Blend.SourceAlpha, Blend.InverseSourceAlpha);\n            Opaque = new BlendState(\"BlendState.Opaque\", Blend.One, Blend.Zero);\n        }\n\n\n        /// <summary>\n        /// Enables use of the per-target blend states.\n        /// </summary>\n        public bool IndependentBlendEnable\n        {\n            get { return _strategy.IndependentBlendEnable; }\n            set {  _strategy.IndependentBlendEnable = value; }\n        }\n\n        /// <summary>\n        /// Returns the target specific blend state.\n        /// </summary>\n        /// <param name=\"index\">The 0 to 3 target blend state index.</param>\n        /// <returns>A target blend state.</returns>\n        public TargetBlendState this[int index]\n        {\n            get { return _strategy.Targets[index]; }\n        }\n\n        public BlendFunction AlphaBlendFunction\n        {\n            get { return _strategy.AlphaBlendFunction; }\n            set { _strategy.AlphaBlendFunction = value; }\n        }\n\n        public Blend AlphaDestinationBlend\n        {\n            get { return _strategy.AlphaDestinationBlend; }\n            set { _strategy.AlphaDestinationBlend = value; }\n        }\n\n        public Blend AlphaSourceBlend\n        {\n            get { return _strategy.AlphaSourceBlend; }\n            set { _strategy.AlphaSourceBlend = value; }\n        }\n\n        public BlendFunction ColorBlendFunction\n        {\n            get { return _strategy.ColorBlendFunction; }\n            set { _strategy.ColorBlendFunction = value; }\n        }\n\n        public Blend ColorDestinationBlend\n        {\n            get { return _strategy.ColorDestinationBlend; }\n            set { _strategy.ColorDestinationBlend = value; }\n        }\n\n        public Blend ColorSourceBlend\n        {\n            get { return _strategy.ColorSourceBlend; }\n            set { _strategy.ColorSourceBlend = value; }\n        }\n\n        public ColorWriteChannels ColorWriteChannels\n        {\n            get { return _strategy.ColorWriteChannels; }\n            set { _strategy.ColorWriteChannels = value; }\n        }\n\n        public ColorWriteChannels ColorWriteChannels1\n        {\n            get { return _strategy.ColorWriteChannels1; }\n            set { _strategy.ColorWriteChannels1 = value; }\n        }\n\n        public ColorWriteChannels ColorWriteChannels2\n        {\n            get { return _strategy.ColorWriteChannels2; }\n            set { _strategy.ColorWriteChannels2 = value; }\n        }\n\n        public ColorWriteChannels ColorWriteChannels3\n        {\n            get { return _strategy.ColorWriteChannels3; }\n            set { _strategy.ColorWriteChannels3 = value; }\n        }\n\n        /// <summary>\n        /// The color used as blend factor when alpha blending.\n        /// </summary>\n        /// <remarks>\n        /// <see cref=\"P:Microsoft.Xna.Framework.Graphics.GraphicsDevice.BlendFactor\"/> is set to this value when this <see cref=\"BlendState\"/>\n        /// is bound to a GraphicsDevice.\n        /// </remarks>\n        public Color BlendFactor\n        {\n            get { return _strategy.BlendFactor; }\n            set { _strategy.BlendFactor = value; }\n        }\n\n        public int MultiSampleMask\n        {\n            get { return _strategy.MultiSampleMask; }\n            set { _strategy.MultiSampleMask = value; }\n        }\n\n        internal void BindToGraphicsDevice(GraphicsContextStrategy contextStrategy)\n        {\n            if (_strategy is ReadonlyBlendStateStrategy)\n                throw new InvalidOperationException(\"You cannot bind a default state object.\");\n\n            GraphicsDeviceStrategy deviceStrategy  = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy;\n            if (this.GraphicsDevice != deviceStrategy.Device)\n            {\n                if (this.GraphicsDevice == null)\n                {\n                    System.Diagnostics.Debug.Assert(deviceStrategy.Device != null);\n\n                    _strategy = contextStrategy.CreateBlendStateStrategy(_strategy);\n                    SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n                }\n                else\n                    throw new InvalidOperationException(\"This blend state is already bound to a different graphics device.\");\n            }\n        }\n\n        public BlendState()\n            : base()\n        {\n            _strategy = new BlendStateStrategy();\n        }\n\n        private BlendState(string name, Blend sourceBlend, Blend destinationBlend)\n            : base()\n        {\n            Name = name;\n            _strategy = new ReadonlyBlendStateStrategy(sourceBlend, destinationBlend);\n        }\n\n        internal BlendState(BlendState source)\n            : base()\n        {\n            Name = source.Name;\n            _strategy = new BlendStateStrategy(source._strategy);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            System.Diagnostics.Debug.Assert(!IsDisposed);\n\n            if (disposing)\n            {\n            }\n\n            for (int i = 0; i < _strategy.Targets.Length; i++)\n                _strategy.Targets[i] = null;\n\n            base.Dispose(disposing);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/BlendStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class BlendStateStrategy : GraphicsResourceStrategy\n        , IBlendStateStrategy\n    {\n        private Color _blendFactor;\n        private int _multiSampleMask;\n\n        private bool _independentBlendEnable;\n        private readonly TargetBlendState[] _targetBlendState;\n\n        public virtual bool IndependentBlendEnable\n        {\n            get { return _independentBlendEnable; }\n            set { _independentBlendEnable = value; }\n        }\n\n        public TargetBlendState[] Targets\n        {\n            get { return _targetBlendState; }\n        }\n\n        public virtual Color BlendFactor\n        {\n            get { return _blendFactor; }\n            set { _blendFactor = value; }\n        }\n\n        public virtual int MultiSampleMask\n        {\n            get { return _multiSampleMask; }\n            set { _multiSampleMask = value; }\n        }\n\n        public virtual BlendFunction AlphaBlendFunction\n        {\n            get { return _targetBlendState[0].AlphaBlendFunction; }\n            set { _targetBlendState[0].AlphaBlendFunction = value; }\n        }\n\n        public virtual Blend AlphaDestinationBlend\n        {\n            get { return _targetBlendState[0].AlphaDestinationBlend; }\n            set { _targetBlendState[0].AlphaDestinationBlend = value; }\n        }\n\n        public virtual Blend AlphaSourceBlend\n        {\n            get { return _targetBlendState[0].AlphaSourceBlend; }\n            set { _targetBlendState[0].AlphaSourceBlend = value; }\n        }\n\n        public virtual BlendFunction ColorBlendFunction\n        {\n            get { return _targetBlendState[0].ColorBlendFunction; }\n            set { _targetBlendState[0].ColorBlendFunction = value; }\n        }\n\n        public virtual Blend ColorDestinationBlend\n        {\n            get { return _targetBlendState[0].ColorDestinationBlend; }\n            set { _targetBlendState[0].ColorDestinationBlend = value; }\n        }\n\n        public virtual Blend ColorSourceBlend\n        {\n            get { return _targetBlendState[0].ColorSourceBlend; }\n            set { _targetBlendState[0].ColorSourceBlend = value; }\n        }\n\n        public virtual ColorWriteChannels ColorWriteChannels\n        {\n            get { return _targetBlendState[0].ColorWriteChannels; }\n            set { _targetBlendState[0].ColorWriteChannels = value; }\n        }\n\n        public virtual ColorWriteChannels ColorWriteChannels1\n        {\n            get { return _targetBlendState[1].ColorWriteChannels; }\n            set { _targetBlendState[1].ColorWriteChannels = value; }\n        }\n\n        public virtual ColorWriteChannels ColorWriteChannels2\n        {\n            get { return _targetBlendState[2].ColorWriteChannels; }\n            set { _targetBlendState[2].ColorWriteChannels = value; }\n        }\n\n        public virtual ColorWriteChannels ColorWriteChannels3\n        {\n            get { return _targetBlendState[3].ColorWriteChannels; }\n            set { _targetBlendState[3].ColorWriteChannels = value; }\n        }\n\n        public BlendStateStrategy()\n            : base()\n        {\n            _blendFactor = Color.White;\n            _multiSampleMask = Int32.MaxValue;\n\n            _independentBlendEnable = false;\n            _targetBlendState = new TargetBlendState[4];\n            _targetBlendState[0] = new TargetBlendState(this);\n            _targetBlendState[1] = new TargetBlendState(this);\n            _targetBlendState[2] = new TargetBlendState(this);\n            _targetBlendState[3] = new TargetBlendState(this);\n\n            //_alphaBlendFunction = BlendFunction.Add;\n            //_alphaDestinationBlend = Blend.Zero;\n            //_alphaSourceBlend = Blend.One;\n            //_colorBlendFunction = BlendFunction.Add;\n            //_colorDestinationBlend = Blend.Zero;\n            //_colorSourceBlend = Blend.One;\n            //_colorWriteChannels  = ColorWriteChannels.All;\n            //_colorWriteChannels1 = ColorWriteChannels1.All;\n            //_colorWriteChannels2 = ColorWriteChannels2.All;\n            //_colorWriteChannels3 = ColorWriteChannels3.All;\n        }\n\n        internal BlendStateStrategy(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source)\n            : base(contextStrategy)\n        {\n            this._blendFactor = source.BlendFactor;\n            this._multiSampleMask = source.MultiSampleMask;\n\n            _independentBlendEnable = source.IndependentBlendEnable;\n            _targetBlendState = new TargetBlendState[4];\n            _targetBlendState[0] = new TargetBlendState(source.Targets[0], source);\n            _targetBlendState[1] = new TargetBlendState(source.Targets[1], source);\n            _targetBlendState[2] = new TargetBlendState(source.Targets[2], source);\n            _targetBlendState[3] = new TargetBlendState(source.Targets[3], source);\n\n            //_alphaBlendFunction = source.AlphaBlendFunction;\n            //_alphaDestinationBlend = source.AlphaDestinationBlend;\n            //_alphaSourceBlend = source.AlphaSourceBlend;\n            //_colorBlendFunction = source.ColorBlendFunction;\n            //_colorDestinationBlend = source.ColorDestinationBlend;\n            //_colorSourceBlend = source.ColorSourceBlend;\n            //_colorWriteChannels  = source.ColorWriteChannels;\n            //_colorWriteChannels1 = source.ColorWriteChannels1;\n            //_colorWriteChannels2 = source.ColorWriteChannels2;\n            //_colorWriteChannels3 = source.ColorWriteChannels3;\n        }\n\n        internal BlendStateStrategy(IBlendStateStrategy source)\n            : base()\n        {\n            this._blendFactor = source.BlendFactor;\n            this._multiSampleMask = source.MultiSampleMask;\n\n            _independentBlendEnable = source.IndependentBlendEnable;\n            _targetBlendState = new TargetBlendState[4];\n            _targetBlendState[0] = new TargetBlendState(source.Targets[0], source);\n            _targetBlendState[1] = new TargetBlendState(source.Targets[1], source);\n            _targetBlendState[2] = new TargetBlendState(source.Targets[2], source);\n            _targetBlendState[3] = new TargetBlendState(source.Targets[3], source);\n\n            //_alphaBlendFunction = source.AlphaBlendFunction;\n            //_alphaDestinationBlend = source.AlphaDestinationBlend;\n            //_alphaSourceBlend = source.AlphaSourceBlend;\n            //_colorBlendFunction = source.ColorBlendFunction;\n            //_colorDestinationBlend = source.ColorDestinationBlend;\n            //_colorSourceBlend = source.ColorSourceBlend;\n            //_colorWriteChannels  = source.ColorWriteChannels;\n            //_colorWriteChannels1 = source.ColorWriteChannels1;\n            //_colorWriteChannels2 = source.ColorWriteChannels2;\n            //_colorWriteChannels3 = source.ColorWriteChannels3;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/CompareFunction.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// The comparison function used for depth, stencil, and alpha tests.\n    /// </summary>\n    public enum CompareFunction\n    {\n        /// <summary>\n        /// Always passes the test.\n        /// </summary>\n        Always,\n        /// <summary>\n        /// Never passes the test.\n        /// </summary>\n        Never,\n        /// <summary>\n        /// Passes the test when the new value is less than current value.\n        /// </summary>\n        Less,\n        /// <summary>\n        /// Passes the test when the new value is less than or equal to current value.\n        /// </summary>\n        LessEqual,\n        /// <summary>\n        /// Passes the test when the new value is equal to current value.\n        /// </summary>\n        Equal,\n        /// <summary>\n        /// Passes the test when the new value is greater than or equal to current value.\n        /// </summary>\n        GreaterEqual,\n        /// <summary>\n        /// Passes the test when the new value is greater than current value.\n        /// </summary>\n        Greater,\n        /// <summary>\n        /// Passes the test when the new value does not equal to current value.\n        /// </summary>\n        NotEqual\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/CullMode.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines a culling mode for faces in rasterization process.\n    /// </summary>\n    public enum CullMode\n    {\n        /// <summary>\n        /// Do not cull faces.\n        /// </summary>\n        None,\n        /// <summary>\n        /// Cull faces with clockwise order.\n        /// </summary>\n        CullClockwiseFace,\n        /// <summary>\n        /// Cull faces with counter clockwise order.\n        /// </summary>\n        CullCounterClockwiseFace\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/DepthFormat.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines formats for depth-stencil buffer.\n    /// </summary>\n    public enum DepthFormat\n    {\n        /// <summary>\n        /// Depth-stencil buffer will not be created.\n        /// </summary>\n        None,\n        /// <summary>\n        /// 16-bit depth buffer.\n        /// </summary>\n        Depth16,\n        /// <summary>\n        /// 24-bit depth buffer. Equivalent of <see cref=\"DepthFormat.Depth24Stencil8\"/> for DirectX platforms.\n        /// </summary>\n        Depth24,\n        /// <summary>\n        /// 32-bit depth-stencil buffer. Where 24-bit depth and 8-bit for stencil used.\n        /// </summary>\n        Depth24Stencil8\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/DepthStencilState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class DepthStencilState : GraphicsResource\n        , IPlatformDepthStencilState\n    {\n        internal IDepthStencilStateStrategy _strategy;\n\n        T IPlatformDepthStencilState.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        public static readonly DepthStencilState Default;\n        public static readonly DepthStencilState DepthRead;\n        public static readonly DepthStencilState None;\n\n        static DepthStencilState()\n        {\n            Default = new DepthStencilState(\"DepthStencilState.Default\", true, true);\n            DepthRead = new DepthStencilState(\"DepthStencilState.DepthRead\", true, false);\n            None = new DepthStencilState(\"DepthStencilState.None\", false, false);\n        }\n\n\n        public bool DepthBufferEnable\n        {\n            get { return _strategy.DepthBufferEnable; }\n            set { _strategy.DepthBufferEnable = value; }\n        }\n\n        public bool DepthBufferWriteEnable\n        {\n            get { return _strategy.DepthBufferWriteEnable; }\n            set { _strategy.DepthBufferWriteEnable = value; }\n        }\n\n        public StencilOperation CounterClockwiseStencilDepthBufferFail\n        {\n            get { return _strategy.CounterClockwiseStencilDepthBufferFail; }\n            set { _strategy.CounterClockwiseStencilDepthBufferFail = value; }\n        }\n\n        public StencilOperation CounterClockwiseStencilFail\n        {\n            get { return _strategy.CounterClockwiseStencilFail; }\n            set { _strategy.CounterClockwiseStencilFail = value; }\n        }\n\n        public CompareFunction CounterClockwiseStencilFunction\n        {\n            get { return _strategy.CounterClockwiseStencilFunction; }\n            set { _strategy.CounterClockwiseStencilFunction = value; }\n        }\n\n        public StencilOperation CounterClockwiseStencilPass\n        {\n            get { return _strategy.CounterClockwiseStencilPass; }\n            set { _strategy.CounterClockwiseStencilPass = value; }\n        }\n\n        public CompareFunction DepthBufferFunction\n        {\n            get { return _strategy.DepthBufferFunction; }\n            set { _strategy.DepthBufferFunction = value; }\n        }\n\n        public int ReferenceStencil\n        {\n            get { return _strategy.ReferenceStencil; }\n            set { _strategy.ReferenceStencil = value; }\n        }\n\n        public StencilOperation StencilDepthBufferFail\n        {\n            get { return _strategy.StencilDepthBufferFail; }\n            set { _strategy.StencilDepthBufferFail = value; }\n        }\n\n        public bool StencilEnable\n        {\n            get { return _strategy.StencilEnable; }\n            set { _strategy.StencilEnable = value; }\n        }\n\n        public StencilOperation StencilFail\n        {\n            get { return _strategy.StencilFail; }\n            set { _strategy.StencilFail = value; }\n        }\n\n        public CompareFunction StencilFunction\n        {\n            get { return _strategy.StencilFunction; }\n            set { _strategy.StencilFunction = value; }\n        }\n\n        public int StencilMask\n        {\n            get { return _strategy.StencilMask; }\n            set { _strategy.StencilMask = value; }\n        }\n\n        public StencilOperation StencilPass\n        {\n            get { return _strategy.StencilPass; }\n            set {\n                _strategy.StencilPass = value; }\n        }\n\n        public int StencilWriteMask\n        {\n            get { return _strategy.StencilWriteMask; }\n            set { _strategy.StencilWriteMask = value; }\n        }\n\n        public bool TwoSidedStencilMode\n        {\n            get { return _strategy.TwoSidedStencilMode; }\n            set { _strategy.TwoSidedStencilMode = value; }\n        }\n\n        internal void BindToGraphicsDevice(GraphicsContextStrategy contextStrategy)\n        {\n            if (_strategy is ReadonlyDepthStencilStateStrategy)\n                throw new InvalidOperationException(\"You cannot bind a default state object.\");\n\n            GraphicsDeviceStrategy deviceStrategy = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy;\n            if (this.GraphicsDevice != deviceStrategy.Device)\n            {\n                if (this.GraphicsDevice == null)\n                {\n                    System.Diagnostics.Debug.Assert(deviceStrategy.Device != null);\n\n                    _strategy = contextStrategy.CreateDepthStencilStateStrategy(_strategy);\n                    SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n                }\n                else\n                    throw new InvalidOperationException(\"This depth stencil state is already bound to a different graphics device.\");\n            }\n        }\n\n        public DepthStencilState()\n            : base()\n        {\n            _strategy = new DepthStencilStateStrategy();\n        }\n\n        private DepthStencilState(string name, bool depthBufferEnable, bool depthBufferWriteEnable)\n            : base()\n        {\n            Name = name;\n            _strategy = new ReadonlyDepthStencilStateStrategy(depthBufferEnable, depthBufferWriteEnable);\n        }\n\n        internal DepthStencilState(DepthStencilState source)\n            : base()\n        {\n            Name = source.Name;\n            _strategy = new DepthStencilStateStrategy(source._strategy);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            System.Diagnostics.Debug.Assert(!IsDisposed);\n\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/DepthStencilStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class DepthStencilStateStrategy : GraphicsResourceStrategy\n        , IDepthStencilStateStrategy\n    {\n        private bool _depthBufferEnable;\n        private bool _depthBufferWriteEnable;\n        private CompareFunction _depthBufferFunction;\n        private StencilOperation _counterClockwiseStencilDepthBufferFail;\n        private StencilOperation _counterClockwiseStencilFail;\n        private CompareFunction _counterClockwiseStencilFunction;\n        private StencilOperation _counterClockwiseStencilPass;\n        private int _referenceStencil;\n        private StencilOperation _stencilDepthBufferFail;\n        private bool _stencilEnable;\n        private StencilOperation _stencilFail;\n        private CompareFunction _stencilFunction;\n        private int _stencilMask;\n        private StencilOperation _stencilPass;\n        private int _stencilWriteMask;\n        private bool _twoSidedStencilMode;\n\n        public virtual bool DepthBufferEnable\n        {\n            get { return _depthBufferEnable; }\n            set { _depthBufferEnable = value; }\n        }\n\n        public virtual bool DepthBufferWriteEnable\n        {\n            get { return _depthBufferWriteEnable; }\n            set { _depthBufferWriteEnable = value; }\n        }\n\n        public virtual CompareFunction DepthBufferFunction\n        {\n            get { return _depthBufferFunction; }\n            set { _depthBufferFunction = value; }\n        }\n\n        public virtual StencilOperation CounterClockwiseStencilDepthBufferFail\n        {\n            get { return _counterClockwiseStencilDepthBufferFail; }\n            set { _counterClockwiseStencilDepthBufferFail = value; }\n        }\n\n        public virtual StencilOperation CounterClockwiseStencilFail\n        {\n            get { return _counterClockwiseStencilFail; }\n            set { _counterClockwiseStencilFail = value; }\n        }\n\n        public virtual CompareFunction CounterClockwiseStencilFunction\n        {\n            get { return _counterClockwiseStencilFunction; }\n            set { _counterClockwiseStencilFunction = value; }\n        }\n\n        public virtual StencilOperation CounterClockwiseStencilPass\n        {\n            get { return _counterClockwiseStencilPass; }\n            set { _counterClockwiseStencilPass = value; }\n        }\n\n        public virtual int ReferenceStencil\n        {\n            get { return _referenceStencil; }\n            set { _referenceStencil = value; }\n        }\n\n        public virtual StencilOperation StencilDepthBufferFail\n        {\n            get { return _stencilDepthBufferFail; }\n            set { _stencilDepthBufferFail = value; }\n        }\n\n        public virtual bool StencilEnable\n        {\n            get { return _stencilEnable; }\n            set { _stencilEnable = value; }\n        }\n\n        public virtual StencilOperation StencilFail\n        {\n            get { return _stencilFail; }\n            set { _stencilFail = value; }\n        }\n\n        public virtual CompareFunction StencilFunction\n        {\n            get { return _stencilFunction; }\n            set { _stencilFunction = value; }\n        }\n\n        public virtual int StencilMask\n        {\n            get { return _stencilMask; }\n            set { _stencilMask = value; }\n        }\n\n        public virtual StencilOperation StencilPass\n        {\n            get { return _stencilPass; }\n            set { _stencilPass = value; }\n        }\n\n        public virtual int StencilWriteMask\n        {\n            get { return _stencilWriteMask; }\n            set { _stencilWriteMask = value; }\n        }\n\n        public virtual bool TwoSidedStencilMode\n        {\n            get { return _twoSidedStencilMode; }\n            set { _twoSidedStencilMode = value;\n            }\n        }\n\n        public DepthStencilStateStrategy()\n            : base()\n        {\n            _depthBufferEnable = true;\n            _depthBufferWriteEnable = true;\n            _depthBufferFunction = CompareFunction.LessEqual;\n            _stencilEnable = false;\n            _stencilFunction = CompareFunction.Always;\n            _stencilPass = StencilOperation.Keep;\n            _stencilFail = StencilOperation.Keep;\n            _stencilDepthBufferFail = StencilOperation.Keep;\n            _twoSidedStencilMode = false;\n            _counterClockwiseStencilFunction = CompareFunction.Always;\n            _counterClockwiseStencilPass = StencilOperation.Keep;\n            _counterClockwiseStencilFail = StencilOperation.Keep;\n            _counterClockwiseStencilDepthBufferFail = StencilOperation.Keep;\n            _stencilMask = Int32.MaxValue;\n            _stencilWriteMask = Int32.MaxValue;\n            _referenceStencil = 0;\n        }\n\n        internal DepthStencilStateStrategy(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source)\n            : base(contextStrategy)\n        {\n            _depthBufferEnable = source.DepthBufferEnable;\n            _depthBufferWriteEnable = source.DepthBufferWriteEnable;\n            _depthBufferFunction = source.DepthBufferFunction;\n            _stencilEnable = source.StencilEnable;\n            _stencilFunction = source.StencilFunction;\n            _stencilPass = source.StencilPass;\n            _stencilFail = source.StencilFail;\n            _stencilDepthBufferFail = source.StencilDepthBufferFail;\n            _twoSidedStencilMode = source.TwoSidedStencilMode;\n            _counterClockwiseStencilFunction = source.CounterClockwiseStencilFunction;\n            _counterClockwiseStencilPass = source.CounterClockwiseStencilPass;\n            _counterClockwiseStencilFail = source.CounterClockwiseStencilFail;\n            _counterClockwiseStencilDepthBufferFail = source.CounterClockwiseStencilDepthBufferFail;\n            _stencilMask = source.StencilMask;\n            _stencilWriteMask = source.StencilWriteMask;\n            _referenceStencil = source.ReferenceStencil;\n        }\n\n        internal DepthStencilStateStrategy(IDepthStencilStateStrategy source)\n            : base()\n        {\n            _depthBufferEnable = source.DepthBufferEnable;\n            _depthBufferWriteEnable = source.DepthBufferWriteEnable;\n            _depthBufferFunction = source.DepthBufferFunction;\n            _stencilEnable = source.StencilEnable;\n            _stencilFunction = source.StencilFunction;\n            _stencilPass = source.StencilPass;\n            _stencilFail = source.StencilFail;\n            _stencilDepthBufferFail = source.StencilDepthBufferFail;\n            _twoSidedStencilMode = source.TwoSidedStencilMode;\n            _counterClockwiseStencilFunction = source.CounterClockwiseStencilFunction;\n            _counterClockwiseStencilPass = source.CounterClockwiseStencilPass;\n            _counterClockwiseStencilFail = source.CounterClockwiseStencilFail;\n            _counterClockwiseStencilDepthBufferFail = source.CounterClockwiseStencilDepthBufferFail;\n            _stencilMask = source.StencilMask;\n            _stencilWriteMask = source.StencilWriteMask;\n            _referenceStencil = source.ReferenceStencil;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/FillMode.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines options for filling the primitive.\n    /// </summary>\n    public enum FillMode\n    {\n        /// <summary>\n        /// Draw solid faces for each primitive.\n        /// </summary>\n        Solid,\n        /// <summary>\n        /// Draw lines for each primitive.\n        /// </summary>\n        WireFrame\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/IBlendStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformBlendState\n    {\n        T GetStrategy<T>() where T : IBlendStateStrategy;\n    }\n\n    public interface IBlendStateStrategy\n    {\n        bool IndependentBlendEnable { get; set; }\n        TargetBlendState[] Targets { get; }\n\n        Color BlendFactor { get; set; }\n        int MultiSampleMask { get; set; }\n        BlendFunction AlphaBlendFunction { get; set; }\n        Blend AlphaDestinationBlend { get; set; }\n        Blend AlphaSourceBlend { get; set; }\n        BlendFunction ColorBlendFunction { get; set; }\n        Blend ColorDestinationBlend { get; set; }\n        Blend ColorSourceBlend { get; set; }\n        ColorWriteChannels ColorWriteChannels { get; set; }\n        ColorWriteChannels ColorWriteChannels1 { get; set; }\n        ColorWriteChannels ColorWriteChannels2 { get; set; }\n        ColorWriteChannels ColorWriteChannels3 { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/IDepthStencilStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformDepthStencilState\n    {\n        T GetStrategy<T>() where T : IDepthStencilStateStrategy;\n    }\n\n    public interface IDepthStencilStateStrategy\n    {\n        bool DepthBufferEnable { get; set; }\n        bool DepthBufferWriteEnable { get; set; }\n        CompareFunction DepthBufferFunction { get; set; }\n        StencilOperation CounterClockwiseStencilDepthBufferFail { get; set; }\n        StencilOperation CounterClockwiseStencilFail { get; set; }\n        CompareFunction CounterClockwiseStencilFunction { get; set; }\n        StencilOperation CounterClockwiseStencilPass { get; set; }\n        int ReferenceStencil { get; set; }\n        StencilOperation StencilDepthBufferFail { get; set; }\n        bool StencilEnable { get; set; }\n        StencilOperation StencilFail { get; set; }\n        CompareFunction StencilFunction { get; set; }\n        int StencilMask { get; set; }\n        StencilOperation StencilPass { get; set; }\n        int StencilWriteMask { get; set; }\n        bool TwoSidedStencilMode { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/IRasterizerStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformRasterizerState\n    {\n        T GetStrategy<T>() where T : IRasterizerStateStrategy;\n    }\n\n    public interface IRasterizerStateStrategy\n    {\n        CullMode CullMode { get; set; }\n        float DepthBias { get; set; }\n        FillMode FillMode { get; set; }\n        bool MultiSampleAntiAlias { get; set; }\n        bool ScissorTestEnable { get; set; }\n        float SlopeScaleDepthBias { get; set; }\n        bool DepthClipEnable { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ISamplerStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformSamplerState\n    {\n        T GetStrategy<T>() where T : ISamplerStateStrategy;\n    }\n\n    public interface ISamplerStateStrategy\n    {\n        TextureFilter Filter { get; set; }\n        TextureAddressMode AddressU { get; set; }\n        TextureAddressMode AddressV { get; set; }\n        TextureAddressMode AddressW { get; set; }\n        Color BorderColor { get; set; }\n        int MaxAnisotropy { get; set; }\n        int MaxMipLevel { get; set; }\n        float MipMapLevelOfDetailBias { get; set; }\n        CompareFunction ComparisonFunction { get; set; }\n        TextureFilterMode FilterMode { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/RasterizerState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class RasterizerState : GraphicsResource\n        , IPlatformRasterizerState\n    {\n        internal IRasterizerStateStrategy _strategy;\n\n        T IPlatformRasterizerState.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        public static readonly RasterizerState CullClockwise;\n        public static readonly RasterizerState CullCounterClockwise;\n        public static readonly RasterizerState CullNone;\n\n        static RasterizerState()\n        {\n            CullClockwise = new RasterizerState(\"RasterizerState.CullClockwise\", CullMode.CullClockwiseFace);\n            CullCounterClockwise = new RasterizerState(\"RasterizerState.CullCounterClockwise\", CullMode.CullCounterClockwiseFace);\n            CullNone = new RasterizerState(\"RasterizerState.CullNone\", CullMode.None);\n        }\n\n\n        public CullMode CullMode\n        {\n            get { return _strategy.CullMode; }\n            set { _strategy.CullMode = value; }\n        }\n\n        public float DepthBias\n        {\n            get { return _strategy.DepthBias; }\n            set { _strategy.DepthBias = value; }\n        }\n\n        public FillMode FillMode\n        {\n            get { return _strategy.FillMode; }\n            set { _strategy.FillMode = value; }\n        }\n\n        public bool MultiSampleAntiAlias\n        {\n            get { return _strategy.MultiSampleAntiAlias; }\n            set { _strategy.MultiSampleAntiAlias = value; }\n        }\n\n        public bool ScissorTestEnable\n        {\n            get { return _strategy.ScissorTestEnable; }\n            set { _strategy.ScissorTestEnable = value; }\n        }\n\n        public float SlopeScaleDepthBias\n        {\n            get { return _strategy.SlopeScaleDepthBias; }\n            set { _strategy.SlopeScaleDepthBias = value; }\n        }\n\n        public bool DepthClipEnable\n        {\n            get { return _strategy.DepthClipEnable; }\n            set { _strategy.DepthClipEnable = value; }\n        }\n\n        internal void BindToGraphicsDevice(GraphicsContextStrategy contextStrategy)\n        {\n            if (_strategy is ReadonlyRasterizerStateStrategy)\n                throw new InvalidOperationException(\"You cannot bind a default state object.\");\n\n            GraphicsDeviceStrategy deviceStrategy = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy;\n            if (this.GraphicsDevice != deviceStrategy.Device)\n            {\n                if (this.GraphicsDevice == null)\n                {\n                    System.Diagnostics.Debug.Assert(deviceStrategy.Device != null);\n\n                    _strategy = contextStrategy.CreateRasterizerStateStrategy(_strategy);\n                    SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n                }\n                else\n                    throw new InvalidOperationException(\"This rasterizer state is already bound to a different graphics device.\");\n            }\n        }\n\n        public RasterizerState()\n            : base()\n        {\n            _strategy = new RasterizerStateStrategy();\n        }\n\n        private RasterizerState(string name, CullMode cullMode)\n            : base()\n        {\n            Name = name;\n            _strategy = new ReadonlyRasterizerStateStrategy(cullMode);\n        }\n\n        internal RasterizerState(RasterizerState source)\n            : base()\n        {\n            Name = source.Name;\n            _strategy = new RasterizerStateStrategy(source._strategy);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            System.Diagnostics.Debug.Assert(!IsDisposed);\n\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/RasterizerStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class RasterizerStateStrategy : GraphicsResourceStrategy\n        , IRasterizerStateStrategy\n    {\n        private CullMode _cullMode;\n        private float _depthBias;\n        private FillMode _fillMode;\n        private bool _multiSampleAntiAlias;\n        private bool _scissorTestEnable;\n        private float _slopeScaleDepthBias;\n        private bool _depthClipEnable;\n\n        public virtual CullMode CullMode\n        {\n            get { return _cullMode; }\n            set { _cullMode = value; }\n        }\n\n        public virtual float DepthBias\n        {\n            get { return _depthBias; }\n            set { _depthBias = value; }\n        }\n\n        public virtual FillMode FillMode\n        {\n            get { return _fillMode; }\n            set { _fillMode = value; }\n        }\n\n        public virtual bool MultiSampleAntiAlias\n        {\n            get { return _multiSampleAntiAlias; }\n            set { _multiSampleAntiAlias = value; }\n        }\n\n        public virtual bool ScissorTestEnable\n        {\n            get { return _scissorTestEnable; }\n            set { _scissorTestEnable = value; }\n        }\n\n        public virtual float SlopeScaleDepthBias\n        {\n            get { return _slopeScaleDepthBias; }\n            set { _slopeScaleDepthBias = value; }\n        }\n\n        public virtual bool DepthClipEnable\n        {\n            get { return _depthClipEnable; }\n            set { _depthClipEnable = value; }\n        }\n\n        public RasterizerStateStrategy()\n            : base()\n        {\n            _cullMode = CullMode.CullCounterClockwiseFace;\n            _fillMode = FillMode.Solid;\n            _depthBias = 0;\n            _multiSampleAntiAlias = true;\n            _scissorTestEnable = false;\n            _slopeScaleDepthBias = 0;\n            _depthClipEnable = true;\n        }\n\n        internal RasterizerStateStrategy(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source)\n            : base(contextStrategy)\n        {\n            _cullMode = source.CullMode;\n            _fillMode = source.FillMode;\n            _depthBias = source.DepthBias;\n            _multiSampleAntiAlias = source.MultiSampleAntiAlias;\n            _scissorTestEnable = source.ScissorTestEnable;\n            _slopeScaleDepthBias = source.SlopeScaleDepthBias;\n            _depthClipEnable = source.DepthClipEnable;\n        }\n\n        internal RasterizerStateStrategy(IRasterizerStateStrategy source)\n            : base()\n        {\n            _cullMode = source.CullMode;\n            _fillMode = source.FillMode;\n            _depthBias = source.DepthBias;\n            _multiSampleAntiAlias = source.MultiSampleAntiAlias;\n            _scissorTestEnable = source.ScissorTestEnable;\n            _slopeScaleDepthBias = source.SlopeScaleDepthBias;\n            _depthClipEnable = source.DepthClipEnable;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ReadonlyBlendStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ReadonlyBlendStateStrategy : BlendStateStrategy\n    {\n        public override bool IndependentBlendEnable\n        {\n            get { return base.IndependentBlendEnable; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override Color BlendFactor\n        {\n            get { return base.BlendFactor; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override int MultiSampleMask\n        {\n            get { return base.MultiSampleMask; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override BlendFunction AlphaBlendFunction\n        {\n            get { return base.AlphaBlendFunction; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override Blend AlphaDestinationBlend\n        {\n            get { return base.AlphaDestinationBlend; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override Blend AlphaSourceBlend\n        {\n            get { return base.AlphaSourceBlend; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override BlendFunction ColorBlendFunction\n        {\n            get { return base.ColorBlendFunction; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override Blend ColorDestinationBlend\n        {\n            get { return base.ColorDestinationBlend; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override Blend ColorSourceBlend\n        {\n            get { return base.ColorSourceBlend; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override ColorWriteChannels ColorWriteChannels\n        {\n            get { return base.ColorWriteChannels; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override ColorWriteChannels ColorWriteChannels1\n        {\n            get { return base.ColorWriteChannels1; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override ColorWriteChannels ColorWriteChannels2\n        {\n            get { return base.ColorWriteChannels2; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override ColorWriteChannels ColorWriteChannels3\n        {\n            get { return base.ColorWriteChannels3; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n\n        public ReadonlyBlendStateStrategy(Blend sourceBlend, Blend destinationBlend)\n            : base()\n        {\n            //base.ColorSourceBlend = sourceBlend;\n            //base.AlphaSourceBlend = sourceBlend;\n            //base.ColorDestinationBlend = destinationBlend;\n            //base.AlphaDestinationBlend = destinationBlend;\n\n            base.Targets[0] = new TargetBlendState(this, sourceBlend, destinationBlend);\n            base.Targets[1] = new TargetBlendState(this, sourceBlend, destinationBlend);\n            base.Targets[2] = new TargetBlendState(this, sourceBlend, destinationBlend);\n            base.Targets[3] = new TargetBlendState(this, sourceBlend, destinationBlend);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ReadonlyDepthStencilStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ReadonlyDepthStencilStateStrategy : DepthStencilStateStrategy\n    {\n        public override bool DepthBufferEnable\n        {\n            get { return base.DepthBufferEnable; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override bool DepthBufferWriteEnable\n        {\n            get { return base.DepthBufferWriteEnable; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override StencilOperation CounterClockwiseStencilDepthBufferFail\n        {\n            get { return base.CounterClockwiseStencilDepthBufferFail; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override StencilOperation CounterClockwiseStencilFail\n        {\n            get { return base.CounterClockwiseStencilFail; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override CompareFunction CounterClockwiseStencilFunction\n        {\n            get { return base.CounterClockwiseStencilFunction; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override StencilOperation CounterClockwiseStencilPass\n        {\n            get { return base.CounterClockwiseStencilPass; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override CompareFunction DepthBufferFunction\n        {\n            get { return base.DepthBufferFunction; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override int ReferenceStencil\n        {\n            get { return base.ReferenceStencil; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override StencilOperation StencilDepthBufferFail\n        {\n            get { return base.StencilDepthBufferFail; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override bool StencilEnable\n        {\n            get { return base.StencilEnable; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override StencilOperation StencilFail\n        {\n            get { return base.StencilFail; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override CompareFunction StencilFunction\n        {\n            get { return base.StencilFunction; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override int StencilMask\n        {\n            get { return base.StencilMask; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override StencilOperation StencilPass\n        {\n            get { return base.StencilPass; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override int StencilWriteMask\n        {\n            get { return base.StencilWriteMask; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override bool TwoSidedStencilMode\n        {\n            get { return base.TwoSidedStencilMode; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public ReadonlyDepthStencilStateStrategy(bool depthBufferEnable, bool depthBufferWriteEnable)\n            : base()\n        {\n            base.DepthBufferEnable = depthBufferEnable;\n            base.DepthBufferWriteEnable = depthBufferWriteEnable;\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ReadonlyRasterizerStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ReadonlyRasterizerStateStrategy : RasterizerStateStrategy\n    {\n\n        public override CullMode CullMode\n        {\n            get { return base.CullMode; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override float DepthBias\n        {\n            get { return base.DepthBias; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override FillMode FillMode\n        {\n            get { return base.FillMode; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override bool MultiSampleAntiAlias\n        {\n            get { return base.MultiSampleAntiAlias; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override bool ScissorTestEnable\n        {\n            get { return base.ScissorTestEnable; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override float SlopeScaleDepthBias\n        {\n            get { return base.SlopeScaleDepthBias; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override bool DepthClipEnable\n        {\n            get { return base.DepthClipEnable; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public ReadonlyRasterizerStateStrategy(CullMode cullMode)\n            : base()\n        {\n            base.CullMode = cullMode;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ReadonlySamplerStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    internal class ReadonlySamplerStateStrategy : SamplerStateStrategy\n    {\n        public override TextureFilter Filter\n        {\n            get { return base.Filter; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override TextureAddressMode AddressU\n        {\n            get { return base.AddressU; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override TextureAddressMode AddressV\n        {\n            get { return base.AddressV; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override TextureAddressMode AddressW\n        {\n            get { return base.AddressW; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override Color BorderColor\n\n        {\n            get { return base.BorderColor; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override int MaxAnisotropy\n        {\n            get { return base.MaxAnisotropy; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override int MaxMipLevel\n        {\n            get { return base.MaxMipLevel; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override float MipMapLevelOfDetailBias\n        {\n            get { return base.MipMapLevelOfDetailBias; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override CompareFunction ComparisonFunction\n        {\n            get { return base.ComparisonFunction; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public override TextureFilterMode FilterMode\n        {\n            get { return base.FilterMode; }\n            set { throw new InvalidOperationException(\"The state object is readonly.\"); }\n        }\n\n        public ReadonlySamplerStateStrategy(TextureFilter filter, TextureAddressMode addressMode)\n            : base()\n        {\n            base.Filter = filter;\n            base.AddressU = addressMode;\n            base.AddressV = addressMode;\n            base.AddressW = addressMode;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ResourceBlendStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ResourceBlendStateStrategy : BlendStateStrategy\n    {\n        public override bool IndependentBlendEnable\n        {\n            get { return base.IndependentBlendEnable; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override Color BlendFactor\n        {\n            get { return base.BlendFactor; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override int MultiSampleMask\n        {\n            get { return base.MultiSampleMask; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override BlendFunction AlphaBlendFunction\n        {\n            get { return base.AlphaBlendFunction; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override Blend AlphaDestinationBlend\n        {\n            get { return base.AlphaDestinationBlend; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override Blend AlphaSourceBlend\n        {\n            get { return base.AlphaSourceBlend; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override BlendFunction ColorBlendFunction\n        {\n            get { return base.ColorBlendFunction; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override Blend ColorDestinationBlend\n        {\n            get { return base.ColorDestinationBlend; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override Blend ColorSourceBlend\n        {\n            get { return base.ColorSourceBlend; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override ColorWriteChannels ColorWriteChannels\n        {\n            get { return base.ColorWriteChannels; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override ColorWriteChannels ColorWriteChannels1\n        {\n            get { return base.ColorWriteChannels1; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override ColorWriteChannels ColorWriteChannels2\n        {\n            get { return base.ColorWriteChannels2; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override ColorWriteChannels ColorWriteChannels3\n        {\n            get { return base.ColorWriteChannels3; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public ResourceBlendStateStrategy(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ResourceDepthStencilStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ResourceDepthStencilStateStrategy : DepthStencilStateStrategy\n    {\n        public override bool DepthBufferEnable\n        {\n            get { return base.DepthBufferEnable; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override bool DepthBufferWriteEnable\n        {\n            get { return base.DepthBufferWriteEnable; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override StencilOperation CounterClockwiseStencilDepthBufferFail\n        {\n            get { return base.CounterClockwiseStencilDepthBufferFail; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override StencilOperation CounterClockwiseStencilFail\n        {\n            get { return base.CounterClockwiseStencilFail; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override CompareFunction CounterClockwiseStencilFunction\n        {\n            get { return base.CounterClockwiseStencilFunction; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override StencilOperation CounterClockwiseStencilPass\n        {\n            get { return base.CounterClockwiseStencilPass; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override CompareFunction DepthBufferFunction\n        {\n            get { return base.DepthBufferFunction; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override int ReferenceStencil\n        {\n            get { return base.ReferenceStencil; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override StencilOperation StencilDepthBufferFail\n        {\n            get { return base.StencilDepthBufferFail; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override bool StencilEnable\n        {\n            get { return base.StencilEnable; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override StencilOperation StencilFail\n        {\n            get { return base.StencilFail; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override CompareFunction StencilFunction\n        {\n            get { return base.StencilFunction; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override int StencilMask\n        {\n            get { return base.StencilMask; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override StencilOperation StencilPass\n        {\n            get { return base.StencilPass; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override int StencilWriteMask\n        {\n            get { return base.StencilWriteMask; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override bool TwoSidedStencilMode\n        {\n            get { return base.TwoSidedStencilMode; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public ResourceDepthStencilStateStrategy(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source)\n            : base(contextStrategy, source)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ResourceRasterizerStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ResourceRasterizerStateStrategy : RasterizerStateStrategy\n    {\n\n        public override CullMode CullMode\n        {\n            get { return base.CullMode; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override float DepthBias\n        {\n            get { return base.DepthBias; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override FillMode FillMode\n        {\n            get { return base.FillMode; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override bool MultiSampleAntiAlias\n        {\n            get { return base.MultiSampleAntiAlias; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override bool ScissorTestEnable\n        {\n            get { return base.ScissorTestEnable; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override float SlopeScaleDepthBias\n        {\n            get { return base.SlopeScaleDepthBias; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override bool DepthClipEnable\n        {\n            get { return base.DepthClipEnable; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public ResourceRasterizerStateStrategy(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source) \n            : base(contextStrategy, source)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/ResourceSamplerStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class ResourceSamplerStateStrategy : SamplerStateStrategy\n    {\n        public override TextureFilter Filter\n        {\n            get { return base.Filter; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override TextureAddressMode AddressU\n        {\n            get { return base.AddressU; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override TextureAddressMode AddressV\n        {\n            get { return base.AddressV; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override TextureAddressMode AddressW\n        {\n            get { return base.AddressW; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override Color BorderColor\n\n        {\n            get { return base.BorderColor; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override int MaxAnisotropy\n        {\n            get { return base.MaxAnisotropy; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override int MaxMipLevel\n        {\n            get { return base.MaxMipLevel; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override float MipMapLevelOfDetailBias\n        {\n            get { return base.MipMapLevelOfDetailBias; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override CompareFunction ComparisonFunction\n        {\n            get { return base.ComparisonFunction; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public override TextureFilterMode FilterMode\n        {\n            get { return base.FilterMode; }\n            set { throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device.\"); }\n        }\n\n        public ResourceSamplerStateStrategy(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source) \n            : base(contextStrategy, source)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/SamplerState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class SamplerState : GraphicsResource\n        , IPlatformSamplerState\n    {\n        internal ISamplerStateStrategy _strategy;\n\n        public static readonly SamplerState AnisotropicClamp;\n        public static readonly SamplerState AnisotropicWrap;\n        public static readonly SamplerState LinearClamp;\n        public static readonly SamplerState LinearWrap;\n        public static readonly SamplerState PointClamp;\n        public static readonly SamplerState PointWrap;\n\n        static SamplerState()\n        {\n            AnisotropicClamp = new SamplerState(\"SamplerState.AnisotropicClamp\", TextureFilter.Anisotropic, TextureAddressMode.Clamp);\n            AnisotropicWrap = new SamplerState(\"SamplerState.AnisotropicWrap\", TextureFilter.Anisotropic, TextureAddressMode.Wrap);\n            LinearClamp = new SamplerState(\"SamplerState.LinearClamp\", TextureFilter.Linear, TextureAddressMode.Clamp);\n            LinearWrap = new SamplerState(\"SamplerState.LinearWrap\", TextureFilter.Linear, TextureAddressMode.Wrap);\n            PointClamp = new SamplerState(\"SamplerState.PointClamp\", TextureFilter.Point, TextureAddressMode.Clamp);\n            PointWrap = new SamplerState(\"SamplerState.PointWrap\", TextureFilter.Point, TextureAddressMode.Wrap);\n        }\n\n        T IPlatformSamplerState.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n\n        public TextureAddressMode AddressU\n        {\n            get { return _strategy.AddressU; }\n            set { _strategy.AddressU = value; }\n        }\n\n        public TextureAddressMode AddressV\n        {\n            get { return _strategy.AddressV; }\n            set { _strategy.AddressV = value; }\n        }\n\n        public TextureAddressMode AddressW\n        {\n            get { return _strategy.AddressW; }\n            set { _strategy.AddressW = value; }\n        }\n\n        public Color BorderColor\n        {\n            get { return _strategy.BorderColor; }\n            set { _strategy.BorderColor = value; }\n        }\n\n        public TextureFilter Filter\n        {\n            get { return _strategy.Filter; }\n            set { _strategy.Filter = value; }\n        }\n\n        public int MaxAnisotropy\n        {\n            get { return _strategy.MaxAnisotropy; }\n            set { _strategy.MaxAnisotropy = value; }\n        }\n\n        public int MaxMipLevel\n        {\n            get { return _strategy.MaxMipLevel; }\n            set { _strategy.MaxMipLevel = value; }\n        }\n\n        public float MipMapLevelOfDetailBias\n        {\n            get { return _strategy.MipMapLevelOfDetailBias; }\n            set { _strategy.MipMapLevelOfDetailBias = value; }\n        }\n\n        /// <summary>\n        /// When using comparison sampling, also set <see cref=\"FilterMode\"/> to <see cref=\"TextureFilterMode.Comparison\"/>.\n        /// </summary>\n        public CompareFunction ComparisonFunction\n        {\n            get { return _strategy.ComparisonFunction; }\n            set { _strategy.ComparisonFunction = value; }\n        }\n\n        public TextureFilterMode FilterMode\n        {\n            get { return _strategy.FilterMode; }\n            set { _strategy.FilterMode = value; }\n        }\n\n        internal void BindToGraphicsDevice(GraphicsContextStrategy contextStrategy)\n        {\n            if (_strategy is ReadonlySamplerStateStrategy)\n                throw new InvalidOperationException(\"You cannot bind a default state object.\");\n\n            GraphicsDeviceStrategy deviceStrategy = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy;\n            if (this.GraphicsDevice != deviceStrategy.Device)\n            {\n                if (this.GraphicsDevice == null)\n                {\n                    System.Diagnostics.Debug.Assert(deviceStrategy.Device != null);\n\n                    _strategy = contextStrategy.CreateSamplerStateStrategy(_strategy);\n                    SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n                }\n                else\n                    throw new InvalidOperationException(\"This sampler state is already bound to a different graphics device.\");\n            }\n        }\n\n        public SamplerState()\n            : base()\n        {\n            _strategy = new SamplerStateStrategy();\n        }\n\n        private SamplerState(string name, TextureFilter filter, TextureAddressMode addressMode)\n            : base()\n        {\n            Name = name;\n            _strategy = new ReadonlySamplerStateStrategy(filter, addressMode);\n        }\n\n        internal SamplerState(SamplerState source)\n            : base()\n        {\n            Name = source.Name;\n            _strategy = new SamplerStateStrategy(source._strategy);\n        }\n\n\n        protected override void Dispose(bool disposing)\n        {\n            System.Diagnostics.Debug.Assert(!IsDisposed);\n\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/SamplerStateStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public class SamplerStateStrategy : GraphicsResourceStrategy\n        , ISamplerStateStrategy\n    {\n        private TextureFilter _filter;\n        private TextureAddressMode _addressU;\n        private TextureAddressMode _addressV;\n        private TextureAddressMode _addressW;\n        private Color _borderColor;\n        private int _maxAnisotropy;\n        private int _maxMipLevel;\n        private float _mipMapLevelOfDetailBias;\n        private TextureFilterMode _filterMode;\n        private CompareFunction _comparisonFunction;\n\n        public virtual TextureFilter Filter\n        {\n            get { return _filter; }\n            set { _filter = value; }\n        }\n\n        public virtual TextureAddressMode AddressU\n        {\n            get { return _addressU; }\n            set { _addressU = value; }\n        }\n\n        public virtual TextureAddressMode AddressV\n        {\n            get { return _addressV; }\n            set { _addressV = value; }\n        }\n\n        public virtual TextureAddressMode AddressW\n        {\n            get { return _addressW; }\n            set { _addressW = value; }\n        }\n\n        public virtual Color BorderColor\n\n        {\n            get { return _borderColor; }\n            set { _borderColor = value; }\n        }\n\n        public virtual int MaxAnisotropy\n        {\n            get { return _maxAnisotropy; }\n            set { _maxAnisotropy = value; }\n        }\n        public virtual int MaxMipLevel\n        {\n            get { return _maxMipLevel; }\n            set { _maxMipLevel = value; }\n        }\n\n        public virtual float MipMapLevelOfDetailBias\n        {\n            get { return _mipMapLevelOfDetailBias; }\n            set { _mipMapLevelOfDetailBias = value; }\n        }\n\n        public virtual CompareFunction ComparisonFunction\n        {\n            get { return _comparisonFunction; }\n            set { _comparisonFunction = value; }\n        }\n        public virtual TextureFilterMode FilterMode\n        {\n            get { return _filterMode; }\n            set { _filterMode = value; }\n        }\n\n        public SamplerStateStrategy()\n            : base()\n        {\n            _filter = TextureFilter.Linear;\n            _addressU = TextureAddressMode.Wrap;\n            _addressV = TextureAddressMode.Wrap;\n            _addressW = TextureAddressMode.Wrap;\n            _borderColor = Color.White;\n            _maxAnisotropy = 4;\n            _maxMipLevel = 0;\n            _mipMapLevelOfDetailBias = 0.0f;\n            _comparisonFunction = CompareFunction.Never;\n            _filterMode = TextureFilterMode.Default;\n        }\n        \n        internal SamplerStateStrategy(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source)\n            : base(contextStrategy)\n        {\n            _filter = source.Filter;\n            _addressU = source.AddressU;\n            _addressV = source.AddressV;\n            _addressW = source.AddressW;\n            _borderColor = source.BorderColor;\n            _maxAnisotropy = source.MaxAnisotropy;\n            _maxMipLevel = source.MaxMipLevel;\n            _mipMapLevelOfDetailBias = source.MipMapLevelOfDetailBias;\n            _comparisonFunction = source.ComparisonFunction;\n            _filterMode = source.FilterMode;\n        }\n\n        internal SamplerStateStrategy(ISamplerStateStrategy source)\n            : base()\n        {\n            _filter = source.Filter;\n            _addressU = source.AddressU;\n            _addressV = source.AddressV;\n            _addressW = source.AddressW;\n            _borderColor = source.BorderColor;\n            _maxAnisotropy = source.MaxAnisotropy;\n            _maxMipLevel = source.MaxMipLevel;\n            _mipMapLevelOfDetailBias = source.MipMapLevelOfDetailBias;\n            _comparisonFunction = source.ComparisonFunction;\n            _filterMode = source.FilterMode;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/StencilOperation.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines stencil buffer operations.\n    /// </summary>\n    public enum StencilOperation\n    {\n        /// <summary>\n        /// Does not update the stencil buffer entry.\n        /// </summary>\n        Keep,\n        /// <summary>\n        /// Sets the stencil buffer entry to 0.\n        /// </summary>\n        Zero,\n        /// <summary>\n        /// Replaces the stencil buffer entry with a reference value.\n        /// </summary>\n        Replace,\n        /// <summary>\n        /// Increments the stencil buffer entry, wrapping to 0 if the new value exceeds the maximum value.\n        /// </summary>\n        Increment,\n        /// <summary>\n        /// Decrements the stencil buffer entry, wrapping to the maximum value if the new value is less than 0.\n        /// </summary>\n        Decrement,\n        /// <summary>\n        /// Increments the stencil buffer entry, clamping to the maximum value.\n        /// </summary>\n        IncrementSaturation,\n        /// <summary>\n        /// Decrements the stencil buffer entry, clamping to 0.\n        /// </summary>\n        DecrementSaturation,\n        /// <summary>\n        /// Inverts the bits in the stencil buffer entry.\n        /// </summary>\n        Invert\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/TargetBlendState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class TargetBlendState\n    {\n        private readonly IBlendStateStrategy _parentStrategy;\n\n        private BlendFunction _alphaBlendFunction;\n        private Blend _alphaDestinationBlend;\n        private Blend _alphaSourceBlend;\n        private BlendFunction _colorBlendFunction;\n        private Blend _colorDestinationBlend;\n        private Blend _colorSourceBlend;\n        private ColorWriteChannels _colorWriteChannels;\n\n        internal TargetBlendState(IBlendStateStrategy parentStrategy)\n        {\n            _parentStrategy = parentStrategy;\n\n            _alphaBlendFunction = BlendFunction.Add;\n            _alphaDestinationBlend = Blend.Zero;\n            _alphaSourceBlend = Blend.One;\n            _colorBlendFunction = BlendFunction.Add;\n            _colorDestinationBlend = Blend.Zero;\n            _colorSourceBlend = Blend.One;\n            _colorWriteChannels = ColorWriteChannels.All;\n        }\n\n        internal TargetBlendState(IBlendStateStrategy parentStrategy, Blend sourceBlend, Blend destinationBlend) \n            : this(parentStrategy)\n        {\n            _colorSourceBlend = sourceBlend;\n            _alphaSourceBlend = sourceBlend;\n            _colorDestinationBlend = destinationBlend;\n            _alphaDestinationBlend = destinationBlend;\n        }\n\n        internal TargetBlendState(TargetBlendState source, IBlendStateStrategy parentStrategy)\n        {\n            _parentStrategy = parentStrategy;\n\n            this._alphaBlendFunction = source.AlphaBlendFunction;\n            this._alphaDestinationBlend = source.AlphaDestinationBlend;\n            this._alphaSourceBlend = source.AlphaSourceBlend;\n            this._colorBlendFunction = source.ColorBlendFunction;\n            this._colorDestinationBlend = source.ColorDestinationBlend;\n            this._colorSourceBlend = source.ColorSourceBlend;\n            this._colorWriteChannels = source.ColorWriteChannels;\n        }\n\n        public BlendFunction AlphaBlendFunction\n        {\n            get { return _alphaBlendFunction; }\n            set\n            {\n                if (_parentStrategy is ReadonlyBlendStateStrategy)\n                    throw new InvalidOperationException(\"The state object is readonly.\");\n                if (_parentStrategy is ResourceBlendStateStrategy)\n                    throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device!\");\n\n                _alphaBlendFunction = value;\n            }\n        }\n\n        public Blend AlphaDestinationBlend\n        {\n            get { return _alphaDestinationBlend; }\n            set\n            {\n                if (_parentStrategy is ReadonlyBlendStateStrategy)\n                    throw new InvalidOperationException(\"The state object is readonly.\");\n                if (_parentStrategy is ResourceBlendStateStrategy)\n                    throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device!\");\n\n                _alphaDestinationBlend = value;\n            }\n        }\n\n        public Blend AlphaSourceBlend\n        {\n            get { return _alphaSourceBlend; }\n            set\n            {\n                if (_parentStrategy is ReadonlyBlendStateStrategy)\n                    throw new InvalidOperationException(\"The state object is readonly.\");\n                if (_parentStrategy is ResourceBlendStateStrategy)\n                    throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device!\");\n\n                _alphaSourceBlend = value;\n            }\n        }\n\n        public BlendFunction ColorBlendFunction\n        {\n            get { return _colorBlendFunction; }\n            set\n            {\n                if (_parentStrategy is ReadonlyBlendStateStrategy)\n                    throw new InvalidOperationException(\"The state object is readonly.\");\n                if (_parentStrategy is ResourceBlendStateStrategy)\n                    throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device!\");\n\n                _colorBlendFunction = value;\n            }\n        }\n\n        public Blend ColorDestinationBlend\n        {\n            get { return _colorDestinationBlend; }\n            set\n            {\n                if (_parentStrategy is ReadonlyBlendStateStrategy)\n                    throw new InvalidOperationException(\"The state object is readonly.\");\n                if (_parentStrategy is ResourceBlendStateStrategy)\n                    throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device!\");\n\n                _colorDestinationBlend = value;\n            }\n        }\n\n        public Blend ColorSourceBlend\n        {\n            get { return _colorSourceBlend; }\n            set\n            {\n                if (_parentStrategy is ReadonlyBlendStateStrategy)\n                    throw new InvalidOperationException(\"The state object is readonly.\");\n                if (_parentStrategy is ResourceBlendStateStrategy)\n                    throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device!\");\n\n                _colorSourceBlend = value;\n            }\n        }\n\n        public ColorWriteChannels ColorWriteChannels\n        {\n            get { return _colorWriteChannels; }\n            set\n            {\n                if (_parentStrategy is ReadonlyBlendStateStrategy)\n                    throw new InvalidOperationException(\"The state object is readonly.\");\n                if (_parentStrategy is ResourceBlendStateStrategy)\n                    throw new InvalidOperationException(\"You cannot modify the state after it has been bound to the graphics device!\");\n\n                _colorWriteChannels = value;\n            }\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/TextureAddressMode.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines modes for addressing texels using texture coordinates that are outside of the range of 0.0 to 1.0.\n    /// </summary>\n    public enum TextureAddressMode\n    {\n        /// <summary>\n        /// Texels outside range will form the tile at every integer junction.\n        /// </summary>\n        Wrap,\n        /// <summary>\n        /// Texels outside range will be set to color of 0.0 or 1.0 texel.\n        /// </summary>\n        Clamp,\n        /// <summary>\n        /// Same as <see cref=\"TextureAddressMode.Wrap\"/> but tiles will also flipped at every integer junction.\n        /// </summary>\n        Mirror,\n        /// <summary>\n        /// Texels outside range will be set to the border color.\n        /// </summary>\n        Border\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/TextureFilter.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines filtering types for texture sampler.\n    /// </summary>\n    public enum TextureFilter\n    {\n        /// <summary>\n        /// Use linear filtering.\n        /// </summary>\n        Linear,\n        /// <summary>\n        /// Use point filtering.\n        /// </summary>\n        Point,\n        /// <summary>\n        /// Use anisotropic filtering.\n        /// </summary>\n        Anisotropic,\t\n        /// <summary>\n        /// Use linear filtering to shrink or expand, and point filtering between mipMap levels (mip).\n        /// </summary>\n        LinearMipPoint,\n        /// <summary>\n        /// Use point filtering to shrink (minify) or expand (magnify), and linear filtering between mipMap levels.\n        /// </summary>\n        PointMipLinear,\n        /// <summary>\n        /// Use linear filtering to shrink, point filtering to expand, and linear filtering between mipMap levels.\n        /// </summary>\n        MinLinearMagPointMipLinear,\n        /// <summary>\n        /// Use linear filtering to shrink, point filtering to expand, and point filtering between mipMap levels.\n        /// </summary>\n        MinLinearMagPointMipPoint,\n        /// <summary>\n        /// Use point filtering to shrink, linear filtering to expand, and linear filtering between mipMap levels.\n        /// </summary>\n        MinPointMagLinearMipLinear,\n        /// <summary>\n        /// Use point filtering to shrink, linear filtering to expand, and point filtering between mipMap levels.\n        /// </summary>\n        MinPointMagLinearMipPoint\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/States/TextureFilterMode.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Filtering modes for texture samplers.\n    /// </summary>\n    public enum TextureFilterMode\n    {\n        Default,\n        Comparison\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/SurfaceFormat.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines types of surface formats.\n    /// </summary>\n    public enum SurfaceFormat\n    {\n        /// <summary>\n        /// Unsigned 32-bit ARGB pixel format for store 8 bits per channel. \n        /// </summary>\n        Color,\n        /// <summary>\n        /// Unsigned 16-bit BGR pixel format for store 5 bits for blue, 6 bits for green, and 5 bits for red.   \n        /// </summary>\n        Bgr565,\n        /// <summary>\n        /// Unsigned 16-bit BGRA pixel format where 5 bits reserved for each color and last bit is reserved for alpha.\n        /// </summary>\n        Bgra5551,\n        /// <summary>\n        /// Unsigned 16-bit BGRA pixel format for store 4 bits per channel.\n        /// </summary>\n        Bgra4444,\n        /// <summary>\n        /// DXT1. Texture format with compression. Surface dimensions must be a multiple 4.\n        /// </summary>\n        Dxt1,\n        /// <summary>\n        /// DXT3. Texture format with compression. Surface dimensions must be a multiple 4.\n        /// </summary>\n        Dxt3, \n        /// <summary>\n        /// DXT5. Texture format with compression. Surface dimensions must be a multiple 4.\n        /// </summary>\n        Dxt5,\n        /// <summary>\n        /// Signed 16-bit bump-map format for store 8 bits for <c>u</c> and <c>v</c> data.\n        /// </summary>\n        NormalizedByte2,\n        /// <summary>\n        /// Signed 32-bit bump-map format for store 8 bits per channel.\n        /// </summary>\n        NormalizedByte4,\n        /// <summary>\n        /// Unsigned 32-bit RGBA pixel format for store 10 bits for each color and 2 bits for alpha.\n        /// </summary>\n        Rgba1010102,\n        /// <summary>\n        /// Unsigned 32-bit RG pixel format using 16 bits per channel.\n        /// </summary>\n        Rg32,\n        /// <summary>\n        /// Unsigned 64-bit RGBA pixel format using 16 bits per channel.\n        /// </summary>\n        Rgba64,\n        /// <summary>\n        /// Unsigned A 8-bit format for store 8 bits to alpha channel.\n        /// </summary>\n        Alpha8,\n        /// <summary>\n        /// IEEE 32-bit R float format for store 32 bits to red channel.\n        /// </summary>\n        Single,\n        /// <summary>\n        /// IEEE 64-bit RG float format for store 32 bits per channel.\n        /// </summary>\n        Vector2,\n        /// <summary>\n        /// IEEE 128-bit RGBA float format for store 32 bits per channel.\n        /// </summary>\n        Vector4,\n        /// <summary>\n        /// Float 16-bit R format for store 16 bits to red channel.   \n        /// </summary>\n        HalfSingle,\n        /// <summary>\n        /// Float 32-bit RG format for store 16 bits per channel. \n        /// </summary>\n        HalfVector2,\n        /// <summary>\n        /// Float 64-bit ARGB format for store 16 bits per channel. \n        /// </summary>\n        HalfVector4,\n        /// <summary>\n        /// Float pixel format for high dynamic range data.\n        /// </summary>\n        HdrBlendable,\n\n        #region Extensions\n\n        /// <summary>\n        /// For compatibility with WPF D3DImage.\n        /// </summary>\n        Bgr32 = 20,     // B8G8R8X8\n        /// <summary>\n        /// For compatibility with WPF D3DImage.\n        /// </summary>\n        Bgra32 = 21,    // B8G8R8A8    \n\n        /// <summary>\n        /// Unsigned 32-bit RGBA sRGB pixel format that supports 8 bits per channel.\n        /// </summary>\n        ColorSRgb = 30,\n        /// <summary>\n        /// Unsigned 32-bit sRGB pixel format that supports 8 bits per channel. 8 bits are unused.\n        /// </summary>\n        Bgr32SRgb = 31,\n        /// <summary>\n        /// Unsigned 32-bit sRGB pixel format that supports 8 bits per channel.\n        /// </summary>\n        Bgra32SRgb = 32,\n        /// <summary>\n        /// DXT1. sRGB texture format with compression. Surface dimensions must be a multiple of 4.\n        /// </summary>\n        Dxt1SRgb = 33,\n        /// <summary>\n        /// DXT3. sRGB texture format with compression. Surface dimensions must be a multiple of 4.\n        /// </summary>\n        Dxt3SRgb = 34,\n        /// <summary>\n        /// DXT5. sRGB texture format with compression. Surface dimensions must be a multiple of 4.\n        /// </summary>\n        Dxt5SRgb = 35,\n\n        /// <summary>\n        /// PowerVR texture compression format (iOS and Android).\n        /// </summary>\n        RgbPvrtc2Bpp = 50,\n        /// <summary>\n        /// PowerVR texture compression format (iOS and Android).\n        /// </summary>\n        RgbPvrtc4Bpp = 51,\n        /// <summary>\n        /// PowerVR texture compression format (iOS and Android).\n        /// </summary>\n        RgbaPvrtc2Bpp = 52,\n        /// <summary>\n        /// PowerVR texture compression format (iOS and Android).\n        /// </summary>\n        RgbaPvrtc4Bpp = 53,\n        /// <summary>\n        /// Ericcson Texture Compression (Android)\n        /// </summary>\n        RgbEtc1 = 60,\n        /// <summary>\n        /// DXT1 version where 1-bit alpha is used.\n        /// </summary>\n        Dxt1a = 70,\n        /// <summary>\n        /// ATC/ATITC compression (Android)\n        /// </summary>\n        RgbaAtcExplicitAlpha =  80,\n        /// <summary>\n        /// ATC/ATITC compression (Android)\n        /// </summary>\n        RgbaAtcInterpolatedAlpha = 81,\n\n        /// <summary>\n        /// Etc2 RGB8 (Android/iOS withh OpenglES 3.0)\n        /// </summary>\n        Rgb8Etc2 = 90,\n        /// <summary>\n        /// Etc2 SRGB8 (Android/iOS withh OpenglES 3.0)\n        /// </summary>\n        Srgb8Etc2 = 91,\n        /// <summary>\n        /// Etc2 RGB8A1 (Android/iOS withh OpenglES 3.0)\n        /// </summary>\n        Rgb8A1Etc2 = 92,\n        /// <summary>\n        /// Etc2 SRGB8A1 (Android/iOS withh OpenglES 3.0)\n        /// </summary>\n        Srgb8A1Etc2 = 93,\n        /// <summary>\n        /// Etc2 RGBA8 EAC (Android/iOS withh OpenglES 3.0)\n        /// </summary>\n        Rgba8Etc2 = 94,\n        /// <summary>\n        /// Etc2 SRGB8A8 EAC (Android/iOS withh OpenglES 3.0)\n        /// </summary>\n        SRgb8A8Etc2 = 95,\n\n        /// <summary>\n        /// Unsigned 32-bit RGBA sRGBA pixel format that supports 8 bits per channel.\n        /// </summary>\n        ColorSRgba = 96,\n\n        #endregion\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Texture.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.Threading;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public abstract class Texture : GraphicsResource\n        , IPlatformTexture\n    {\n        protected ITextureStrategy _strategyTexture;\n        \n        private readonly int _sortingKey = Interlocked.Increment(ref _lastSortingKey);\n        private static int _lastSortingKey;\n\n        /// <summary>\n        /// Gets a unique identifier of this texture for sorting purposes.\n        /// </summary>\n        /// <remarks>\n        /// <para>For example, this value is used by <see cref=\"SpriteBatch\"/> when drawing with <see cref=\"SpriteSortMode.Texture\"/>.</para>\n        /// <para>The value is an implementation detail and may change between application launches or MonoGame versions.\n        /// It is only guaranteed to stay consistent during application lifetime.</para>\n        /// </remarks>\n        internal int SortingKey { get { return _sortingKey; } }\n\n        public SurfaceFormat Format { get { return _strategyTexture.Format; } }\t\t\n        public int LevelCount { get { return _strategyTexture.LevelCount; } }\n\n\n        protected Texture()\n            : base()\n        {\n        }\n\n        \n        T IPlatformTexture.GetTextureStrategy<T>()\n        {\n            return (T)_strategyTexture;\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Texture2D.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class Texture2D : Texture\n    {\n        protected internal ITexture2DStrategy _strategyTexture2D;\n\n        internal float TexelWidth { get; private set; }\n        internal float TexelHeight { get; private set; }\n\n        /// <summary>\n        /// Gets the width of the texture in pixels.\n        /// </summary>\n        public int Width { get { return _strategyTexture2D.Width; } }\n\n        /// <summary>\n        /// Gets the height of the texture in pixels.\n        /// </summary>\n        public int Height { get { return _strategyTexture2D.Height; } }\n\n        internal int ArraySize { get { return _strategyTexture2D.ArraySize; } }\n\n        /// <summary>\n        /// Gets the dimensions of the texture\n        /// </summary>\n        public Rectangle Bounds { get { return _strategyTexture2D.Bounds; } }\n\n        /// <summary>\n        /// Creates a new texture of the given size\n        /// </summary>\n        /// <param name=\"graphicsDevice\"></param>\n        /// <param name=\"width\"></param>\n        /// <param name=\"height\"></param>\n        public Texture2D(GraphicsDevice graphicsDevice, int width, int height)\n            : this(graphicsDevice, width, height, false, SurfaceFormat.Color, false, 1)\n        {\n        }\n\n        /// <summary>\n        /// Creates a new texture of a given size with a surface format and optional mipmaps \n        /// </summary>\n        /// <param name=\"graphicsDevice\"></param>\n        /// <param name=\"width\"></param>\n        /// <param name=\"height\"></param>\n        /// <param name=\"mipMap\"></param>\n        /// <param name=\"format\"></param>\n        public Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format)\n            : this(graphicsDevice, width, height, mipMap, format, false, 1)\n        {\n        }\n\n        /// <summary>\n        /// Creates a new texture array of a given size with a surface format and optional mipmaps.\n        /// Throws ArgumentException if the current GraphicsDevice can't work with texture arrays\n        /// </summary>\n        /// <param name=\"graphicsDevice\"></param>\n        /// <param name=\"width\"></param>\n        /// <param name=\"height\"></param>\n        /// <param name=\"mipMap\"></param>\n        /// <param name=\"format\"></param>\n        /// <param name=\"arraySize\"></param>\n        public Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format, int arraySize)\n            : this(graphicsDevice, width, height, mipMap, format, false, arraySize)\n        {\n        }\n        \n        private Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format, bool shared, int arraySize)\n            : this(graphicsDevice, width, height, mipMap, format, shared, arraySize, true)\n        {\n            _strategyTexture2D = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateTexture2DStrategy(width, height, mipMap, format, arraySize, shared);\n            _strategyTexture = _strategyTexture2D;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D);\n        }\n\n        protected Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format, bool shared, int arraySize,\n            bool isInternal)\n            : base()\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && (width > 2048 || height > 2048))\n                throw new NotSupportedException(\"Reach profile supports a maximum Texture2D size of 2048\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.HiDef && (width > 4096 || height > 4096))\n                throw new NotSupportedException(\"HiDef profile supports a maximum Texture2D size of 4096\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 8192 || height > 8192))\n                throw new NotSupportedException(\"FL10_0 profile supports a maximum Texture2D size of 8192\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 8192 || height > 8192))\n                throw new NotSupportedException(\"FL10_1 profile supports a maximum Texture2D size of 8192\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 16384 || height > 16384))\n                throw new NotSupportedException(\"FL11_0 profile supports a maximum Texture2D size of 16384\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 16384 || height > 16384))\n                throw new NotSupportedException(\"FL11_1 profile supports a maximum Texture2D size of 16384\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && mipMap && (!MathHelper.IsPowerOfTwo(width) || !MathHelper.IsPowerOfTwo(height)))\n                throw new NotSupportedException(\"Reach profile requires mipmapped Texture2D sizes to be powers of two\");            \n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && GraphicsExtensions.IsCompressedFormat(format) && (!MathHelper.IsPowerOfTwo(width) || !MathHelper.IsPowerOfTwo(height)))\n                throw new NotSupportedException(\"Reach profile requires compressed Texture2D sizes to be powers of two\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && (format == SurfaceFormat.Rgba1010102 || format == SurfaceFormat.Rg32 || format == SurfaceFormat.Rgba64 || format == SurfaceFormat.Alpha8 || format == SurfaceFormat.Single || format == SurfaceFormat.Vector2 || format == SurfaceFormat.Vector4 || format == SurfaceFormat.HalfSingle || format == SurfaceFormat.HalfVector2 || format == SurfaceFormat.HalfVector4 || format == SurfaceFormat.HdrBlendable))\n                throw new NotSupportedException(\"Reach profile does not support Texture2D format \"+ format);\n            if (width <= 0)\n                throw new ArgumentOutOfRangeException(\"width\",\"Texture width must be greater than zero\");\n            if (height <= 0)\n                throw new ArgumentOutOfRangeException(\"height\",\"Texture height must be greater than zero\");\n            if (arraySize > 1 && !((IPlatformGraphicsDevice)graphicsDevice).Strategy.Capabilities.SupportsTextureArrays)\n                throw new ArgumentException(\"Texture arrays are not supported on this graphics device\", \"arraySize\");\n\n            this.TexelWidth = 1f / (float)width;\n            this.TexelHeight = 1f / (float)height;\n\n        }\n\n        private Texture2D(GraphicsContext context, Stream stream)\n        {\n            _strategyTexture2D = ((IPlatformGraphicsContext)context).Strategy.CreateTexture2DStrategy(stream);\n            _strategyTexture = _strategyTexture2D;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D);\n\n            this.TexelWidth = 1f / (float)this.Width;\n            this.TexelHeight = 1f / (float)this.Height;\n        }\n\n\n        /// <summary>\n        /// Gets the handle to a shared resource.\n        /// </summary>\n        /// <returns>\n        /// The handle of the shared resource, or <see cref=\"IntPtr.Zero\"/> if the texture was not\n        /// created as a shared resource.\n        /// </returns>\n        public IntPtr GetSharedHandle()\n        {\n            return _strategyTexture2D.GetSharedHandle();\n        }\n\n\n        /// <summary>\n        /// Changes the pixels of the texture\n        /// Throws ArgumentNullException if data is null\n        /// Throws ArgumentException if arraySlice is greater than 0, and the GraphicsDevice does not support texture arrays\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"level\">Layer of the texture to modify</param>\n        /// <param name=\"arraySlice\">Index inside the texture array</param>\n        /// <param name=\"rect\">Area to modify</param>\n        /// <param name=\"data\">New data for the texture</param>\n        /// <param name=\"startIndex\">Start position of data</param>\n        /// <param name=\"elementCount\"></param>\n        public void SetData<T>(int level, int arraySlice, Rectangle? rect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(arraySlice, data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Width >> level, 1), Math.Max(Height >> level, 1));\n            if (rect == null)\n                rect = textureBounds;\n            ValidateRect<T>(level, ref textureBounds, rect.Value);\n            Rectangle checkedRect;\n            ValidateParams<T>(level, rect.Value, elementCount, ref textureBounds, out checkedRect);\n            _strategyTexture2D.SetData<T>(level, arraySlice, checkedRect, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Changes the pixels of the texture\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"level\">Layer of the texture to modify</param>\n        /// <param name=\"rect\">Area to modify</param>\n        /// <param name=\"data\">New data for the texture</param>\n        /// <param name=\"startIndex\">Start position of data</param>\n        /// <param name=\"elementCount\"></param>\n        public void SetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount)\n            where T : struct \n        {\n            ValidateArrayBounds<T>(0, data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Width >> level, 1), Math.Max(Height >> level, 1));\n            bool rectHasValue = rect.HasValue;\n            if (rect == null)\n                rect = textureBounds;\n            ValidateRect<T>(level, ref textureBounds, rect.Value);\n            Rectangle checkedRect;\n            ValidateParams<T>(level, rect.Value, elementCount, ref textureBounds, out checkedRect);\n            if (rectHasValue)\n                _strategyTexture2D.SetData<T>(level, 0, checkedRect, data, startIndex, elementCount);\n            else           \n                _strategyTexture2D.SetData<T>(level, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Changes the texture's pixels\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"data\">New data for the texture</param>\n        /// <param name=\"startIndex\">Start position of data</param>\n        /// <param name=\"elementCount\"></param>\n        public void SetData<T>(T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(0, data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Width, Height);\n            Rectangle checkedRect;\n            ValidateParams<T>(0, textureBounds, elementCount, ref textureBounds, out checkedRect);\n            _strategyTexture2D.SetData<T>(0, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Changes the texture's pixels\n        /// </summary>\n        /// <typeparam name=\"T\">New data for the texture</typeparam>\n        /// <param name=\"data\"></param>\n        public void SetData<T>(T[] data)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(0, data, 0, data.Length);\n            Rectangle textureBounds = new Rectangle(0, 0,Width, Height);\n            Rectangle checkedRect;\n            ValidateParams<T>(0, textureBounds, data.Length, ref textureBounds, out checkedRect);\n            _strategyTexture2D.SetData<T>(0, data, 0, data.Length);\n        }\n\n        /// <summary>\n        /// Retrieves the contents of the texture\n        /// Throws ArgumentException if data is null, data.length is too short or\n        /// if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"level\">Layer of the texture</param>\n        /// <param name=\"arraySlice\">Index inside the texture array</param>\n        /// <param name=\"rect\">Area of the texture to retrieve</param>\n        /// <param name=\"data\">Destination array for the data</param>\n        /// <param name=\"startIndex\">Starting index of data where to write the pixel data</param>\n        /// <param name=\"elementCount\">Number of pixels to read</param>\n        public void GetData<T>(int level, int arraySlice, Rectangle? rect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(arraySlice, data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Width >> level, 1), Math.Max(Height >> level, 1));\n            if (rect == null)\n                rect = textureBounds;\n            ValidateRect<T>(level, ref textureBounds, rect.Value);\n            Rectangle checkedRect;\n            ValidateParams<T>(level, rect.Value, elementCount, ref textureBounds, out checkedRect);\n            _strategyTexture2D.GetData<T>(level, arraySlice, checkedRect, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Retrieves the contents of the texture\n        /// Throws ArgumentException if data is null, data.length is too short or\n        /// if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"level\">Layer of the texture</param>\n        /// <param name=\"rect\">Area of the texture</param>\n        /// <param name=\"data\">Destination array for the texture data</param>\n        /// <param name=\"startIndex\">First position in data where to write the pixel data</param>\n        /// <param name=\"elementCount\">Number of pixels to read</param>\n        public void GetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(0, data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Width >> level, 1), Math.Max(Height >> level, 1));\n            if (rect == null)\n                rect = textureBounds;\n            ValidateRect<T>(level, ref textureBounds, rect.Value);\n            Rectangle checkedRect;\n            ValidateParams<T>(level, rect.Value, elementCount, ref textureBounds, out checkedRect);\n            _strategyTexture2D.GetData<T>(level, 0, checkedRect, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Retrieves the contents of the texture\n        /// Throws ArgumentException if data is null, data.length is too short or\n        /// if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"data\">Destination array for the texture data</param>\n        /// <param name=\"startIndex\">First position in data where to write the pixel data</param>\n        /// <param name=\"elementCount\">Number of pixels to read</param>\n        public void GetData<T>(T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(0, data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Width, Height);\n            Rectangle checkedRect;\n            ValidateParams<T>(0, textureBounds, elementCount, ref textureBounds, out checkedRect);\n            _strategyTexture2D.GetData<T>(0, 0, checkedRect, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Retrieves the contents of the texture\n        /// Throws ArgumentException if data is null, data.length is too short or\n        /// if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"data\">Destination array for the texture data</param>\n        public void GetData<T>(T[] data)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(0, data, 0, data.Length);\n            Rectangle textureBounds = new Rectangle(0, 0, Width, Height);\n            Rectangle checkedRect;\n            ValidateParams<T>(0, textureBounds, data.Length, ref textureBounds, out checkedRect);\n            _strategyTexture2D.GetData<T>(0, 0, checkedRect, data, 0, data.Length);\n        }\n\n        private void ValidateArrayBounds<T>(int arraySlice, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            if (arraySlice > 0 && !((IPlatformGraphicsDevice)base.GraphicsDevice).Strategy.Capabilities.SupportsTextureArrays)\n                throw new ArgumentException(\"Texture arrays are not supported on this graphics device\", \"arraySlice\");\n            if (arraySlice < 0 || arraySlice >= ArraySize)\n                throw new ArgumentException(\"arraySlice must be smaller than the ArraySize of this texture and larger than 0.\", \"arraySlice\");\n\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n            if (startIndex < 0 || startIndex >= data.Length)\n                throw new ArgumentException(\"startIndex must be at least zero and smaller than data.Length.\", \"startIndex\");\n            if (data.Length < startIndex + elementCount)\n                throw new ArgumentException(\"The data array is too small.\");\n        }\n\n        private void ValidateRect<T>(int level, ref Rectangle textureBounds, Rectangle rect)\n            where T : struct\n        {\n            if (level < 0 || level >= LevelCount)\n                throw new ArgumentException(\"level must be smaller than the number of levels in this texture.\", \"level\");\n            if (!textureBounds.Contains(rect) || rect.Width <= 0 || rect.Height <= 0)\n                throw new ArgumentException(\"Rectangle must be inside the texture bounds\", \"rect\");\n        }\n\n        private unsafe void ValidateParams<T>(int level, Rectangle rect, int elementCount, ref Rectangle textureBounds, out Rectangle checkedRect)\n            where T : struct\n        {\n            int tSize = sizeof(T);\n            int fSize = Format.GetSize();\n            if (tSize > fSize || fSize % tSize != 0)\n                throw new ArgumentException(\"Type T is of an invalid size for the format of this texture.\", \"T\");\n\n            int dataByteSize;\n            if (Format.IsCompressedFormat())\n            {\n                dataByteSize = _strategyTexture2D.GetCompressedDataByteSize(fSize, rect, ref textureBounds, out checkedRect);\n            }\n            else\n            {\n                checkedRect = rect;\n                dataByteSize = rect.Width * rect.Height * fSize;\n            }\n\n            if (elementCount * tSize != dataByteSize)\n                throw new ArgumentException(string.Format(\"elementCount is not the right size, \" +\n                                            \"elementCount * sizeof(T) is {0}, but data size is {1}.\",\n                                            elementCount * tSize, dataByteSize), \"elementCount\");\n        }\n\n        /// <summary>\n        /// Creates a <see cref=\"Texture2D\"/> from a stream, supported formats bmp, gif, jpg, png, tif and dds (only for simple textures).\n        /// May work with other formats, but will not work with tga files.\n        /// </summary>\n        /// <param name=\"graphicsDevice\">The graphics device to use to create the texture.</param>\n        /// <param name=\"stream\">The stream from which to read the image data.</param>\n        /// <returns>The <see cref=\"Texture2D\"/> created from the image stream.</returns>\n        /// <remarks>Note that different image decoders may generate slight differences between platforms, but perceptually \n        /// the images should be identical.  This call does not premultiply the image alpha, but areas of zero alpha will\n        /// result in black color data.\n        /// </remarks>\n        public static Texture2D FromStream(GraphicsDevice graphicsDevice, Stream stream)\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n            if (stream == null)\n                throw new ArgumentNullException(\"stream\");\n\n            try\n            {\n                return new Texture2D(graphicsDevice.MainContext, stream);\n            }\n            catch(Exception e)\n            {\n                throw new InvalidOperationException(\"This image format is not supported\", e);\n            }\n        }\n\n        /// <summary>\n        /// Converts the texture to a JPG image\n        /// </summary>\n        /// <param name=\"stream\">Destination for the image</param>\n        /// <param name=\"width\"></param>\n        /// <param name=\"height\"></param>\n        public void SaveAsJpeg(Stream stream, int width, int height)\n        {\n            _strategyTexture2D.SaveAsJpeg(stream, width, height);\n        }\n\n        /// <summary>\n        /// Converts the texture to a PNG image\n        /// </summary>\n        /// <param name=\"stream\">Destination for the image</param>\n        /// <param name=\"width\"></param>\n        /// <param name=\"height\"></param>\n        public void SaveAsPng(Stream stream, int width, int height)\n        {\n            _strategyTexture2D.SaveAsPng(stream, width, height);\n        }\n        \n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Texture3D.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class Texture3D : Texture\n    {\n        protected ITexture3DStrategy _strategyTexture3D;\n\n        public int Width { get { return _strategyTexture3D.Width; } }\n\n        public int Height { get { return _strategyTexture3D.Height; } }\n\n        public int Depth { get { return _strategyTexture3D.Depth; } }\n\n        public Texture3D(GraphicsDevice graphicsDevice, int width, int height, int depth, bool mipMap, SurfaceFormat format)\n            : this(graphicsDevice, width, height, depth, mipMap, format, true)\n        {\n            _strategyTexture3D = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateTexture3DStrategy(width, height, depth, mipMap, format);\n            _strategyTexture = _strategyTexture3D;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture3D);\n        }\n\n        protected Texture3D(GraphicsDevice graphicsDevice, int width, int height, int depth, bool mipMap, SurfaceFormat format,\n            bool isInternal)\n            : base()\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                throw new NotSupportedException(\"Reach profile does not support Texture3D\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.HiDef && (width > 256 || height > 256 || height > 256))\n                throw new NotSupportedException(\"HiDef profile supports a maximum Texture3D size of 256\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 2048 || height > 2048 || height > 2048))\n                throw new NotSupportedException(\"FL10_0 profile supports a maximum Texture3D size of 2048\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 2048 || height > 2048 || height > 2048))\n                throw new NotSupportedException(\"FL10_1 profile supports a maximum Texture3D size of 2048\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 2048 || height > 2048 || height > 2048))\n                throw new NotSupportedException(\"FL11_0 profile supports a maximum Texture3D size of 2048\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 2048 || height > 2048 || height > 2048))\n                throw new NotSupportedException(\"FL11_1 profile supports a maximum Texture3D size of 2048\");\n            if (width <= 0)\n                throw new ArgumentOutOfRangeException(\"width\",\"Texture width must be greater than zero\");\n            if (height <= 0)\n                throw new ArgumentOutOfRangeException(\"height\",\"Texture height must be greater than zero\");\n            if (depth <= 0)\n                throw new ArgumentOutOfRangeException(\"depth\",\"Texture depth must be greater than zero\");\n\n        }\n\n        public void SetData<T>(T[] data)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, 0, data.Length);\n            ValidateParams<T>(0, 0, 0, this.Width, this.Height, 0, this.Depth, data.Length);\n            _strategyTexture3D.SetData<T>(0, 0, 0, this.Width, this.Height, 0, this.Depth, data, 0, data.Length);\n        }\n\n        public void SetData<T>(T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, startIndex, elementCount);\n            ValidateParams<T>(0, 0, 0, this.Width, this.Height, 0, this.Depth, elementCount);\n            _strategyTexture3D.SetData<T>(0, 0, 0, this.Width, this.Height, 0, this.Depth, data, startIndex, elementCount);\n        }\n\n        public void SetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, startIndex, elementCount);\n            ValidateParams<T>(level, left, top, right, bottom, front, back, elementCount);\n            _strategyTexture3D.SetData<T>(level, left, top, right, bottom, front, back, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Gets a copy of 3D texture data, specifying a mipMap level, source box, start index, and number of elements.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the elements in the array.</typeparam>\n        /// <param name=\"level\">MipMap level.</param>\n        /// <param name=\"left\">Position of the left side of the box on the x-axis.</param>\n        /// <param name=\"top\">Position of the top of the box on the y-axis.</param>\n        /// <param name=\"right\">Position of the right side of the box on the x-axis.</param>\n        /// <param name=\"bottom\">Position of the bottom of the box on the y-axis.</param>\n        /// <param name=\"front\">Position of the front of the box on the z-axis.</param>\n        /// <param name=\"back\">Position of the back of the box on the z-axis.</param>\n        /// <param name=\"data\">Array of data.</param>\n        /// <param name=\"startIndex\">Index of the first element to get.</param>\n        /// <param name=\"elementCount\">Number of elements to get.</param>\n        public void GetData<T>(int level, int left, int top, int right, int bottom, int front, int back,\n                               T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, startIndex, elementCount);\n            ValidateParams<T>(level, left, top, right, bottom, front, back, elementCount);                       \n            _strategyTexture3D.GetData<T>(level, left, top, right, bottom, front, back, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Gets a copy of 3D texture data, specifying a start index and number of elements.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the elements in the array.</typeparam>\n        /// <param name=\"data\">Array of data.</param>\n        /// <param name=\"startIndex\">Index of the first element to get.</param>\n        /// <param name=\"elementCount\">Number of elements to get.</param>\n        public void GetData<T>(T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, startIndex, elementCount);\n            ValidateParams<T>(0, 0, 0, this.Width, this.Height, 0, this.Depth, elementCount);\n            _strategyTexture3D.GetData<T>(0, 0, 0, this.Width, this.Height, 0, this.Depth, data, startIndex, elementCount);\n        }\n\n        /// <summary>\n        /// Gets a copy of 3D texture data.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the elements in the array.</typeparam>\n        /// <param name=\"data\">Array of data.</param>\n        public void GetData<T>(T[] data)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, 0, data.Length);\n            ValidateParams<T>(0, 0, 0, this.Width, this.Height, 0, this.Depth, data.Length);\n            _strategyTexture3D.GetData<T>(0, 0, 0, this.Width, this.Height, 0, this.Depth, data, 0, data.Length);\n        }\n\n        private void ValidateArrayBounds<T>(T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n            if (startIndex < 0 || startIndex >= data.Length)\n                throw new ArgumentException(\"startIndex must be at least zero and smaller than data.Length.\", \"startIndex\");\n            if (data.Length < startIndex + elementCount)\n                throw new ArgumentException(\"The data array is too small.\");\n        }\n\n        private unsafe void ValidateParams<T>(int level,\n                                       int left, int top, int right, int bottom, int front, int back,\n                                       int elementCount)\n            where T : struct\n        {\n            int tSize = sizeof(T);\n            int fSize = Format.GetSize();\n            if (tSize > fSize || fSize % tSize != 0)\n                throw new ArgumentException(\"Type T is of an invalid size for the format of this texture.\", \"T\");\n\n            int texWidth = Math.Max(Width >> level, 1);\n            int texHeight = Math.Max(Height >> level, 1);\n            int texDepth = Math.Max(Depth >> level, 1);\n            int width = right - left;\n            int height = bottom - top;\n            int depth = back - front;\n\n            if (left < 0 || top < 0 || back < 0 || right > texWidth || bottom > texHeight || front > texDepth)\n                throw new ArgumentException(\"Area must remain inside texture bounds\");\n            // Disallow negative box size\n            if (left >= right || top >= bottom || front >= back)\n                throw new ArgumentException(\"Neither box size nor box position can be negative\");\n            if (level < 0 || level >= LevelCount)\n                throw new ArgumentException(\"level must be smaller than the number of levels in this texture.\");\n\n            int dataByteSize = width*height*depth*fSize;\n            if (elementCount * tSize != dataByteSize)\n                throw new ArgumentException(string.Format(\"elementCount is not the right size, \" +\n                                            \"elementCount * sizeof(T) is {0}, but data size is {1}.\",\n                                            elementCount * tSize, dataByteSize), \"elementCount\");\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/TextureCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public sealed class TextureCollection\n        : IPlatformTextureCollection\n    {\n        private TextureCollectionStrategy _strategy;\n\n        TextureCollectionStrategy IPlatformTextureCollection.Strategy { get { return _strategy; } }\n\n\n        internal TextureCollection(GraphicsContextStrategy contextStrategy, int capacity)\n        {\n            _strategy = contextStrategy.CreateTextureCollectionStrategy(capacity);\n\n        }\n\n        public Texture this[int index]\n        {\n            get { return _strategy[index]; }\n            set { _strategy[index] = value; }\n        }\n\n        internal void Clear()\n        {\n            _strategy.Clear();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/TextureCollectionStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformTextureCollection\n    {\n        TextureCollectionStrategy Strategy { get; }\n    }\n\n    public abstract class TextureCollectionStrategy\n    {   \n        protected readonly GraphicsContextStrategy _contextStrategy;\n\n        protected readonly Texture[] _textures;\n        protected uint _dirty;\n\n        protected TextureCollectionStrategy(GraphicsContextStrategy contextStrategy, int capacity)\n        {\n            // hard limit of 32 because of _dirty flags being 32bits.\n            if (capacity > 32)\n                throw new ArgumentOutOfRangeException(\"capacity\");\n\n            _contextStrategy = contextStrategy;\n\n            _textures = new Texture[capacity];\n\n            Dirty();\n        }\n\n        public int Length { get { return _textures.Length; } }\n\n        public Texture this[int index]\n        {\n            get { return _textures[index]; }\n            set\n            {\n                if (_textures[index] != value)\n                {\n                    uint mask = ((uint)1) << index;\n                    _textures[index] = value;\n                    _dirty |= mask;\n                }\n            }\n        }\n\n        public virtual void Clear()\n        {\n            for (int i = 0; i < _textures.Length; i++)\n            {\n                _textures[i] = null;\n            }\n\n            Dirty();\n        }\n\n        public void Dirty(int index)\n        {\n            uint mask = ((uint)1) << index;\n            _dirty |= mask;\n        }\n\n        /// <summary>\n        /// Marks all texture slots as dirty.\n        /// </summary>\n        public void Dirty()\n        {\n            for (int i = 0; i < _textures.Length; i++)\n                _dirty |= (((uint)1) << i);\n        }\n\n        public T ToConcrete<T>() where T : TextureCollectionStrategy\n        {\n            return (T)this;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/TextureCube.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class TextureCube : Texture\n    {\n        protected ITextureCubeStrategy _strategyTextureCube;\n\n        /// <summary>\n        /// Gets the width and height of the cube map face in pixels.\n        /// </summary>\n        /// <value>The width and height of a cube map face in pixels.</value>\n        public int Size { get { return _strategyTextureCube.Size; } }\n        \n        public TextureCube(GraphicsDevice graphicsDevice, int size, bool mipMap, SurfaceFormat format)\n            : this(graphicsDevice, size, mipMap, format, true)\n        {\n            _strategyTextureCube = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateTextureCubeStrategy(size, mipMap, format);\n            _strategyTexture = _strategyTextureCube;\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategyTextureCube);\n        }\n\n        protected TextureCube(GraphicsDevice graphicsDevice, int size, bool mipMap, SurfaceFormat format,\n            bool isInternal)\n            : base()\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && size > 512)\n                throw new NotSupportedException(\"Reach profile supports a maximum TextureCube size of 512\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.HiDef && size > 4096)\n                throw new NotSupportedException(\"HiDef profile supports a maximum TextureCube size of 4096\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_0 && size > 8192)\n                throw new NotSupportedException(\"FL10_0 profile supports a maximum TextureCube size of 8192\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_1 && size > 8192)\n                throw new NotSupportedException(\"FL10_1 profile supports a maximum TextureCube size of 8192\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_0 && size > 16384)\n                throw new NotSupportedException(\"FL11_0 profile supports a maximum TextureCube size of 16384\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_1 && size > 16384)\n                throw new NotSupportedException(\"FL11_1 profile supports a maximum TextureCube size of 16384\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && !MathHelper.IsPowerOfTwo(size))\n                throw new NotSupportedException(\"Reach profile requires TextureCube sizes to be powers of two\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && (format == SurfaceFormat.NormalizedByte2 || format == SurfaceFormat.NormalizedByte4 || format == SurfaceFormat.Rgba1010102 || format == SurfaceFormat.Rg32 || format == SurfaceFormat.Rgba64 || format == SurfaceFormat.Alpha8 || format == SurfaceFormat.Single || format == SurfaceFormat.Vector2 || format == SurfaceFormat.Vector4 || format == SurfaceFormat.HalfSingle || format == SurfaceFormat.HalfVector2 || format == SurfaceFormat.HalfVector4 || format == SurfaceFormat.HdrBlendable))\n                throw new NotSupportedException(\"Reach profile does not support Texture2D format \"+ format);\n            if (size <= 0)\n                throw new ArgumentOutOfRangeException(\"size\",\"Cube size must be greater than zero\");\n\n        }\n\n        /// <summary>\n        /// Gets a copy of cube texture data specifying a cubemap face.\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"cubeMapFace\">The cube map face.</param>\n        /// <param name=\"data\">The data.</param>\n        public void GetData<T>(CubeMapFace cubeMapFace, T[] data)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, 0, data.Length);\n            Rectangle textureBounds = new Rectangle(0, 0, Size, Size);\n            Rectangle checkedRect;\n            ValidateParams<T>(0, textureBounds, data.Length, ref textureBounds, out checkedRect);\n            _strategyTextureCube.GetData<T>(cubeMapFace, 0, checkedRect, data, 0, data.Length);\n        }\n\n        public void GetData<T>(CubeMapFace cubeMapFace, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Size, Size);\n            Rectangle checkedRect;\n            ValidateParams<T>(0, textureBounds, elementCount, ref textureBounds, out checkedRect);\n            _strategyTextureCube.GetData<T>(cubeMapFace, 0, checkedRect, data, startIndex, elementCount);\n        }\n\n        public void GetData<T>(CubeMapFace cubeMapFace, int level, Rectangle? rect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Size >> level, 1), Math.Max(Size >> level, 1));\n            if (rect == null)\n                rect = textureBounds;\n            ValidateRect<T>(level, ref textureBounds, rect.Value);\n            Rectangle checkedRect;\n            ValidateParams<T>(level, rect.Value, elementCount, ref textureBounds, out checkedRect);\n            _strategyTextureCube.GetData<T>(cubeMapFace, level, checkedRect, data, startIndex, elementCount);\n        }\n\n        public void SetData<T>(CubeMapFace cubeMapFace, T[] data)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, 0, data.Length);\n            Rectangle textureBounds = new Rectangle(0, 0, Size, Size);\n            Rectangle checkedRect;\n            ValidateParams<T>(0, textureBounds, data.Length, ref textureBounds, out checkedRect);\n            _strategyTextureCube.SetData<T>(cubeMapFace, 0, checkedRect, data, 0, data.Length);\n        }\n\n        public void SetData<T>(CubeMapFace cubeMapFace, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Size, Size);\n            Rectangle checkedRect;\n            ValidateParams<T>(0, textureBounds, elementCount, ref textureBounds, out checkedRect);\n            _strategyTextureCube.SetData<T>(cubeMapFace, 0, checkedRect, data, startIndex, elementCount);\n        }\n        \n        public void SetData<T>(CubeMapFace cubeMapFace, int level, Rectangle? rect, T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            ValidateArrayBounds<T>(data, startIndex, elementCount);\n            Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Size >> level, 1), Math.Max(Size >> level, 1));\n            if (rect == null)\n                rect = textureBounds;\n            ValidateRect<T>(level, ref textureBounds, rect.Value);\n            Rectangle checkedRect;\n            ValidateParams<T>(level, rect.Value, elementCount, ref textureBounds, out checkedRect);\n            _strategyTextureCube.SetData<T>(cubeMapFace, level, checkedRect, data, startIndex, elementCount);\n        }\n\n        private void ValidateArrayBounds<T>(T[] data, int startIndex, int elementCount)\n            where T : struct\n        {\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n            if (startIndex < 0 || startIndex >= data.Length)\n                throw new ArgumentException(\"startIndex must be at least zero and smaller than data.Length.\", \"startIndex\");\n            if (data.Length < startIndex + elementCount)\n                throw new ArgumentException(\"The data array is too small.\");\n        }\n\n        private void ValidateRect<T>(int level, ref Rectangle textureBounds, Rectangle rect)\n            where T : struct\n        {\n            if (level < 0 || level >= LevelCount)\n                throw new ArgumentException(\"level must be smaller than the number of levels in this texture.\");\n            if (!textureBounds.Contains(rect) || rect.Width <= 0 || rect.Height <= 0)\n                throw new ArgumentException(\"Rectangle must be inside the texture bounds\", \"rect\");\n        }\n\n        private unsafe void ValidateParams<T>(int level, Rectangle rect, int elementCount, ref Rectangle textureBounds, out Rectangle checkedRect)\n            where T : struct\n        {\n            int tSize = sizeof(T);\n            int fSize = Format.GetSize();\n            if (tSize > fSize || fSize % tSize != 0)\n                throw new ArgumentException(\"Type T is of an invalid size for the format of this texture.\", \"T\");\n\n            int dataByteSize;\n            if (Format.IsCompressedFormat())\n            {\n                dataByteSize = _strategyTextureCube.GetCompressedDataByteSize(fSize, rect, ref textureBounds, out checkedRect);\n            }\n            else\n            {\n                checkedRect = rect;\n                dataByteSize = rect.Width * rect.Height * fSize;\n            }\n\n            if (elementCount * tSize != dataByteSize)\n                throw new ArgumentException(string.Format(\"elementCount is not the right size, \" +\n                                            \"elementCount * sizeof(T) is {0}, but data size is {1}.\",\n                                            elementCount * tSize, dataByteSize), \"elementCount\");\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Utilities/ContentReaderExtensions.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    public static class ContentReaderExtensions\n    {\n        /// <summary>\n        /// Reads the next Color from the current stream and advances the current position of the stream by 4 bytes.\n        /// </summary>\n        /// <param name=\"input\">The ContentReader.</param>\n        /// <returns>The next Color read from the current stream.</returns>\n        public static Color ReadColor(this ContentReader input)\n        {\n            Color result = new Color();\n            result.R = input.ReadByte();\n            result.G = input.ReadByte();\n            result.B = input.ReadByte();\n            result.A = input.ReadByte();\n            return result;\n        }\n\n        /// <summary>\n        /// Gets the GraphicsDevice from the ContentManager.ServiceProvider.\n        /// </summary>\n        /// <returns>The <see cref=\"GraphicsDevice\"/>.</returns>\n        public static GraphicsDevice GetGraphicsDevice(this ContentReader contentReader)\n        {\n            IServiceProvider serviceProvider = contentReader.ContentManager.ServiceProvider;\n            IGraphicsDeviceService graphicsDeviceService = serviceProvider.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService;\n            if (graphicsDeviceService == null)\n                throw new InvalidOperationException(\"No Graphics Device Service\");\n\n            return graphicsDeviceService.GraphicsDevice;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Utilities/DxtDecoder.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\n\nnamespace Microsoft.Xna.Platform.Graphics.Utilities\n{\n    internal static class DxtDecoder\n    {\n        internal static byte[] DecompressDxt1(byte[] imageData, int width, int height)\n        {\n            using (MemoryStream imageStream = new MemoryStream(imageData))\n                return DecompressDxt1(imageStream, width, height);\n        }\n\n        internal static byte[] DecompressDxt1(Stream imageStream, int width, int height)\n        {\n            byte[] imageData = new byte[width * height * 4];\n\n            using (BinaryReader imageReader = new BinaryReader(imageStream))\n            {\n                int blockCountX = (width + 3) / 4;\n                int blockCountY = (height + 3) / 4;\n                \n                for (int y = 0; y < blockCountY; y++)\n                {\n                    for (int x = 0; x < blockCountX; x++)\n                    {\n                        DecompressDxt1Block(imageReader, x, y, blockCountX, width, height, imageData);\n                    }\n                }\n            }\n\n            return imageData;\n        }\n\n        private static void DecompressDxt1Block(BinaryReader imageReader, int x, int y, int blockCountX, int width, int height, byte[] imageData)\n        {\n            ushort c0 = imageReader.ReadUInt16();\n            ushort c1 = imageReader.ReadUInt16();\n\n            byte r0, g0, b0;\n            byte r1, g1, b1;\n            ConvertRgb565ToRgb888(c0, out r0, out g0, out b0);\n            ConvertRgb565ToRgb888(c1, out r1, out g1, out b1);\n\n            uint lookupTable = imageReader.ReadUInt32();\n\n            for (int blockY = 0; blockY < 4; blockY++)\n            {\n                for (int blockX = 0; blockX < 4; blockX++)\n                {\n                    byte r = 0, g = 0, b = 0, a = 255;\n                    uint index = (lookupTable >> 2 * (4 * blockY + blockX)) & 0x03;\n                    \n                    if (c0 > c1)\n                    {\n                        switch (index)\n                        {\n                            case 0:\n                                r = r0;\n                                g = g0;\n                                b = b0;\n                                break;\n                            case 1:\n                                r = r1;\n                                g = g1;\n                                b = b1;\n                                break;\n                            case 2:\n                                r = (byte)((2 * r0 + r1) / 3);\n                                g = (byte)((2 * g0 + g1) / 3);\n                                b = (byte)((2 * b0 + b1) / 3);\n                                break;\n                            case 3:\n                                r = (byte)((r0 + 2 * r1) / 3);\n                                g = (byte)((g0 + 2 * g1) / 3);\n                                b = (byte)((b0 + 2 * b1) / 3);\n                                break;\n                        }\n                    }\n                    else\n                    {\n                        switch (index)\n                        {\n                            case 0:\n                                r = r0;\n                                g = g0;\n                                b = b0;\n                                break;\n                            case 1:\n                                r = r1;\n                                g = g1;\n                                b = b1;\n                                break;\n                            case 2:\n                                r = (byte)((r0 + r1) / 2);\n                                g = (byte)((g0 + g1) / 2);\n                                b = (byte)((b0 + b1) / 2);\n                                break;\n                            case 3:\n                                r = 0;\n                                g = 0;\n                                b = 0;\n                                a = 0;\n                                break;\n                        }\n                    }\n\n                    int px = (x << 2) + blockX;\n                    int py = (y << 2) + blockY;\n                    if ((px < width) && (py < height))\n                    {\n                        int offset = ((py * width) + px) << 2;\n                        imageData[offset] = r;\n                        imageData[offset + 1] = g;\n                        imageData[offset + 2] = b;\n                        imageData[offset + 3] = a;\n                    }\n                }\n            }\n        }\n        \n        internal static byte[] DecompressDxt3(byte[] imageData, int width, int height)\n        {\n            using (MemoryStream imageStream = new MemoryStream(imageData))\n                return DecompressDxt3(imageStream, width, height);\n        }\n\n        internal static byte[] DecompressDxt3(Stream imageStream, int width, int height)\n        {\n            byte[] imageData = new byte[width * height * 4];\n\n            using (BinaryReader imageReader = new BinaryReader(imageStream))\n            {\n                int blockCountX = (width + 3) / 4;\n                int blockCountY = (height + 3) / 4;\n\n                for (int y = 0; y < blockCountY; y++)\n                {\n                    for (int x = 0; x < blockCountX; x++)\n                    {\n                        DecompressDxt3Block(imageReader, x, y, blockCountX, width, height, imageData);\n                    }\n                }\n            }\n\n            return imageData;\n        }\n\n        private static void DecompressDxt3Block(BinaryReader imageReader, int x, int y, int blockCountX, int width, int height, byte[] imageData)\n        {\n            byte a0 = imageReader.ReadByte();\n            byte a1 = imageReader.ReadByte();\n            byte a2 = imageReader.ReadByte();\n            byte a3 = imageReader.ReadByte();\n            byte a4 = imageReader.ReadByte();\n            byte a5 = imageReader.ReadByte();\n            byte a6 = imageReader.ReadByte();\n            byte a7 = imageReader.ReadByte();\n            \n            ushort c0 = imageReader.ReadUInt16();\n            ushort c1 = imageReader.ReadUInt16();\n\n            byte r0, g0, b0;\n            byte r1, g1, b1;\n            ConvertRgb565ToRgb888(c0, out r0, out g0, out b0);\n            ConvertRgb565ToRgb888(c1, out r1, out g1, out b1);\n\n            uint lookupTable = imageReader.ReadUInt32();\n\n            int alphaIndex = 0;\n            for (int blockY = 0; blockY < 4; blockY++)\n            {\n                for (int blockX = 0; blockX < 4; blockX++)\n                {\n                    byte r = 0, g = 0, b = 0, a = 0;\n\n                    uint index = (lookupTable >> 2 * (4 * blockY + blockX)) & 0x03;\n                    \n                    switch (alphaIndex)\n                    {\n                        case 0:\n                            a = (byte)((a0 & 0x0F) | ((a0 & 0x0F) << 4));\n                            break;\n                        case 1:\n                            a = (byte)((a0 & 0xF0) | ((a0 & 0xF0) >> 4));\n                            break;\n                        case 2:\n                            a = (byte)((a1 & 0x0F) | ((a1 & 0x0F) << 4));\n                            break;\n                        case 3:\n                            a = (byte)((a1 & 0xF0) | ((a1 & 0xF0) >> 4));\n                            break;\n                        case 4:\n                            a = (byte)((a2 & 0x0F) | ((a2 & 0x0F) << 4));\n                            break;\n                        case 5:\n                            a = (byte)((a2 & 0xF0) | ((a2 & 0xF0) >> 4));\n                            break;\n                        case 6:\n                            a = (byte)((a3 & 0x0F) | ((a3 & 0x0F) << 4));\n                            break;\n                        case 7:\n                            a = (byte)((a3 & 0xF0) | ((a3 & 0xF0) >> 4));\n                            break;\n                        case 8:\n                            a = (byte)((a4 & 0x0F) | ((a4 & 0x0F) << 4));\n                            break;\n                        case 9:\n                            a = (byte)((a4 & 0xF0) | ((a4 & 0xF0) >> 4));\n                            break;\n                        case 10:\n                            a = (byte)((a5 & 0x0F) | ((a5 & 0x0F) << 4));\n                            break;\n                        case 11:\n                            a = (byte)((a5 & 0xF0) | ((a5 & 0xF0) >> 4));\n                            break;\n                        case 12:\n                            a = (byte)((a6 & 0x0F) | ((a6 & 0x0F) << 4));\n                            break;\n                        case 13:\n                            a = (byte)((a6 & 0xF0) | ((a6 & 0xF0) >> 4));\n                            break;\n                        case 14:\n                            a = (byte)((a7 & 0x0F) | ((a7 & 0x0F) << 4));\n                            break;\n                        case 15:\n                            a = (byte)((a7 & 0xF0) | ((a7 & 0xF0) >> 4));\n                            break;\n                    }\n                    ++alphaIndex;\n\n                    switch (index)\n                    {\n                        case 0:\n                            r = r0;\n                            g = g0;\n                            b = b0;\n                            break;\n                        case 1:\n                            r = r1;\n                            g = g1;\n                            b = b1;\n                            break;\n                        case 2:\n                            r = (byte)((2 * r0 + r1) / 3);\n                            g = (byte)((2 * g0 + g1) / 3);\n                            b = (byte)((2 * b0 + b1) / 3);\n                            break;\n                        case 3:\n                            r = (byte)((r0 + 2 * r1) / 3);\n                            g = (byte)((g0 + 2 * g1) / 3);\n                            b = (byte)((b0 + 2 * b1) / 3);\n                            break;\n                    }\n\n                    int px = (x << 2) + blockX;\n                    int py = (y << 2) + blockY;\n                    if ((px < width) && (py < height))\n                    {\n                        int offset = ((py * width) + px) << 2;\n                        imageData[offset] = r;\n                        imageData[offset + 1] = g;\n                        imageData[offset + 2] = b;\n                        imageData[offset + 3] = a;\n                    }\n                }\n            }\n        }\n        \n        internal static byte[] DecompressDxt5(byte[] imageData, int width, int height)\n        {\n            using (MemoryStream imageStream = new MemoryStream(imageData))\n                return DecompressDxt5(imageStream, width, height);\n        }\n        \n        internal static byte[] DecompressDxt5(Stream imageStream, int width, int height)\n        {\n            byte[] imageData = new byte[width * height * 4];\n\n            using (BinaryReader imageReader = new BinaryReader(imageStream))\n            {\n                int blockCountX = (width + 3) / 4;\n                int blockCountY = (height + 3) / 4;\n                \n                for (int y = 0; y < blockCountY; y++)\n                {\n                    for (int x = 0; x < blockCountX; x++)\n                    {\n                        DecompressDxt5Block(imageReader, x, y, blockCountX, width, height, imageData);\n                    }\n                }\n            }\n\n            return imageData;\n        }\n\n        private static void DecompressDxt5Block(BinaryReader imageReader, int x, int y, int blockCountX, int width, int height, byte[] imageData)\n        {\n            byte alpha0 = imageReader.ReadByte();\n            byte alpha1 = imageReader.ReadByte();\n\n            ulong alphaMask = (ulong)imageReader.ReadByte();\n            alphaMask += (ulong)imageReader.ReadByte() << 8;\n            alphaMask += (ulong)imageReader.ReadByte() << 16;\n            alphaMask += (ulong)imageReader.ReadByte() << 24;\n            alphaMask += (ulong)imageReader.ReadByte() << 32;\n            alphaMask += (ulong)imageReader.ReadByte() << 40;\n\n            ushort c0 = imageReader.ReadUInt16();\n            ushort c1 = imageReader.ReadUInt16();\n\n            byte r0, g0, b0;\n            byte r1, g1, b1;\n            ConvertRgb565ToRgb888(c0, out r0, out g0, out b0);\n            ConvertRgb565ToRgb888(c1, out r1, out g1, out b1);\n\n            uint lookupTable = imageReader.ReadUInt32();\n\n            for (int blockY = 0; blockY < 4; blockY++)\n            {\n                for (int blockX = 0; blockX < 4; blockX++)\n                {\n                    byte r = 0, g = 0, b = 0, a = 255;\n                    uint index = (lookupTable >> 2 * (4 * blockY + blockX)) & 0x03;\n                    \n                    uint alphaIndex = (uint)((alphaMask >> 3 * (4 * blockY + blockX)) & 0x07);\n                    if (alphaIndex == 0)\n                    {\n                        a = alpha0;\n                    }\n                    else if (alphaIndex == 1)\n                    {\n                        a = alpha1;\n                    }\n                    else if (alpha0 > alpha1)\n                    {\n                        a = (byte)(((8 - alphaIndex) * alpha0 + (alphaIndex - 1) * alpha1) / 7);\n                    }\n                    else if (alphaIndex == 6)\n                    {\n                        a = 0;\n                    }\n                    else if (alphaIndex == 7)\n                    {\n                        a = 0xff;\n                    }\n                    else\n                    {\n                        a = (byte)(((6 - alphaIndex) * alpha0 + (alphaIndex - 1) * alpha1) / 5);\n                    }\n\n                    switch (index)\n                    {\n                        case 0:\n                            r = r0;\n                            g = g0;\n                            b = b0;\n                            break;\n                        case 1:\n                            r = r1;\n                            g = g1;\n                            b = b1;\n                            break;\n                        case 2:\n                            r = (byte)((2 * r0 + r1) / 3);\n                            g = (byte)((2 * g0 + g1) / 3);\n                            b = (byte)((2 * b0 + b1) / 3);\n                            break;\n                        case 3:\n                            r = (byte)((r0 + 2 * r1) / 3);\n                            g = (byte)((g0 + 2 * g1) / 3);\n                            b = (byte)((b0 + 2 * b1) / 3);\n                            break;\n                    }\n\n                    int px = (x << 2) + blockX;\n                    int py = (y << 2) + blockY;\n                    if ((px < width) && (py < height))\n                    {\n                        int offset = ((py * width) + px) << 2;\n                        imageData[offset] = r;\n                        imageData[offset + 1] = g;\n                        imageData[offset + 2] = b;\n                        imageData[offset + 3] = a;\n                    }\n                }\n            }\n        }\n                \n        private static void ConvertRgb565ToRgb888(ushort color, out byte r, out byte g, out byte b)\n        {\n            int temp;\n\n            temp = (color >> 11) * 255 + 16;\n            r = (byte)((temp / 32 + temp) / 32);\n            temp = ((color & 0x07E0) >> 5) * 255 + 32;\n            g = (byte)((temp / 64 + temp) / 64);\n            temp = (color & 0x001F) * 255 + 16;\n            b = (byte)((temp / 32 + temp) / 32);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Utilities/GraphicsExtensions.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics.Utilities\n{\n    public static class GraphicsExtensions\n    {\n        public static int GetSize(this VertexElementFormat elementFormat)\n        {\n            switch (elementFormat)\n            {\n                case VertexElementFormat.Single:\n                    return 4;\n                case VertexElementFormat.Vector2:\n                    return 8;\n                case VertexElementFormat.Vector3:\n                    return 12;\n                case VertexElementFormat.Vector4:\n                    return 16;\n                case VertexElementFormat.Color:\n                    return 4;\n                case VertexElementFormat.Byte4:\n                    return 4;\n                case VertexElementFormat.Short2:\n                    return 4;\n                case VertexElementFormat.Short4:\n                    return 8;\n                case VertexElementFormat.NormalizedShort2:\n                    return 4;\n                case VertexElementFormat.NormalizedShort4:\n                    return 8;\n                case VertexElementFormat.HalfVector2:\n                    return 4;\n                case VertexElementFormat.HalfVector4:\n                    return 8;\n\n                default:\n                    return 0;\n            }\n        }\n\n        public static bool IsCompressedFormat(this SurfaceFormat format)\n        {\n            switch (format)\n            {\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1a:\n                case SurfaceFormat.Dxt1SRgb:\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt3SRgb:\n                case SurfaceFormat.Dxt5:\n                case SurfaceFormat.Dxt5SRgb:\n                case SurfaceFormat.RgbaAtcExplicitAlpha:\n                case SurfaceFormat.RgbaAtcInterpolatedAlpha:\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                case SurfaceFormat.RgbEtc1:\n                case SurfaceFormat.Rgb8Etc2:\n                case SurfaceFormat.Srgb8Etc2:\n                case SurfaceFormat.Rgb8A1Etc2:\n                case SurfaceFormat.Srgb8A1Etc2:\n                case SurfaceFormat.Rgba8Etc2:\n                case SurfaceFormat.SRgb8A8Etc2:\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        public static int GetSize(this SurfaceFormat surfaceFormat)\n        {\n            switch (surfaceFormat)\n            {\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1SRgb:\n                case SurfaceFormat.Dxt1a:\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                case SurfaceFormat.RgbEtc1:\n                case SurfaceFormat.Rgb8Etc2:\n                case SurfaceFormat.Srgb8Etc2:\n                case SurfaceFormat.Rgb8A1Etc2:\n                case SurfaceFormat.Srgb8A1Etc2:\n                    // One texel in DXT1, PVRTC (2bpp and 4bpp) and ETC1 is a minimum 4x4 block (8x4 for PVRTC 2bpp), which is 8 bytes\n                    return 8;\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt3SRgb:\n                case SurfaceFormat.Dxt5:\n                case SurfaceFormat.Dxt5SRgb:\n                case SurfaceFormat.RgbaAtcExplicitAlpha:\n                case SurfaceFormat.RgbaAtcInterpolatedAlpha:\n                case SurfaceFormat.Rgba8Etc2:\n                case SurfaceFormat.SRgb8A8Etc2:\n                    // One texel in DXT3 and DXT5 is a minimum 4x4 block, which is 16 bytes\n                    return 16;\n                case SurfaceFormat.Alpha8:\n                    return 1;\n                case SurfaceFormat.Bgr565:\n                case SurfaceFormat.Bgra4444:\n                case SurfaceFormat.Bgra5551:\n                case SurfaceFormat.HalfSingle:\n                case SurfaceFormat.NormalizedByte2:\n                    return 2;\n                case SurfaceFormat.Color:\n                case SurfaceFormat.ColorSRgb:\n                case SurfaceFormat.ColorSRgba:\n                case SurfaceFormat.Single:\n                case SurfaceFormat.Rg32:\n                case SurfaceFormat.HalfVector2:\n                case SurfaceFormat.NormalizedByte4:\n                case SurfaceFormat.Rgba1010102:\n                case SurfaceFormat.Bgra32:\n                case SurfaceFormat.Bgra32SRgb:\n                case SurfaceFormat.Bgr32:\n                case SurfaceFormat.Bgr32SRgb:\n                    return 4;\n                case SurfaceFormat.HalfVector4:\n                case SurfaceFormat.Rgba64:\n                case SurfaceFormat.Vector2:\n                    return 8;\n                case SurfaceFormat.Vector4:\n                    return 16;\n\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        public static void GetBlockSize(this SurfaceFormat surfaceFormat, out int width, out int height)\n        {\n            switch (surfaceFormat)\n            {\n                case SurfaceFormat.RgbPvrtc2Bpp:\n                case SurfaceFormat.RgbaPvrtc2Bpp:\n                    width = 8;\n                    height = 4;\n                    break;\n                case SurfaceFormat.Dxt1:\n                case SurfaceFormat.Dxt1SRgb:\n                case SurfaceFormat.Dxt1a:\n                case SurfaceFormat.Dxt3:\n                case SurfaceFormat.Dxt3SRgb:\n                case SurfaceFormat.Dxt5:\n                case SurfaceFormat.Dxt5SRgb:\n                case SurfaceFormat.RgbPvrtc4Bpp:\n                case SurfaceFormat.RgbaPvrtc4Bpp:\n                case SurfaceFormat.RgbEtc1:\n                case SurfaceFormat.Rgb8Etc2:\n                case SurfaceFormat.Srgb8Etc2:\n                case SurfaceFormat.Rgb8A1Etc2:\n                case SurfaceFormat.Srgb8A1Etc2:\n                case SurfaceFormat.Rgba8Etc2:\n                case SurfaceFormat.SRgb8A8Etc2:\n                case SurfaceFormat.RgbaAtcExplicitAlpha:\n                case SurfaceFormat.RgbaAtcInterpolatedAlpha:\n                    width = 4;\n                    height = 4;\n                    break;\n\n                default:\n                    width = 1;\n                    height = 1;\n                    break;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Utilities/HashHelpers.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing System.IO;\n\nnamespace Microsoft.Xna.Platform.Graphics.Utilities\n{\n    // TODO: precompute shader's hashKey in the processor.\n    public static class HashHelper\n    {\n        /// <summary>\n        /// Compute a hash from a byte array.\n        /// </summary>\n        /// <remarks>\n        /// Modified FNV Hash in C#\n        /// http://stackoverflow.com/a/468084\n        /// </remarks>\n        public unsafe static int ComputeHash(params byte[] data)\n        {\n            unchecked\n            {\n                const int p = 16777619;\n                int hash = (int)2166136261;\n\n                int count = data.Length;\n                fixed (byte* pData = data)\n                {\n                    for (int i = 0; i < count; i++)\n                    {\n                        hash = (hash ^ pData[i]) * p;\n                    }\n                }\n\n                hash += hash << 13;\n                hash ^= hash >> 7;\n                hash += hash << 3;\n                hash ^= hash >> 17;\n                hash += hash << 5;\n                return hash;\n            }\n        }\n\n        /// <summary>\n        /// Compute a hash from the content of a stream and restore the position.\n        /// </summary>\n        /// <remarks>\n        /// Modified FNV Hash in C#\n        /// http://stackoverflow.com/a/468084\n        /// </remarks>\n        public unsafe static int ComputeHash(Stream stream)\n        {\n            System.Diagnostics.Debug.Assert(stream.CanSeek);\n\n            unchecked\n            {\n                const int p = 16777619;\n                int hash = (int)2166136261;\n\n                long prevPosition = stream.Position;\n                stream.Position = 0;\n\n                int count;\n                byte[] data = new byte[1024];\n                fixed (byte* pData = data)\n                {\n                    while ((count = stream.Read(data, 0, data.Length)) != 0)\n                    {\n                        for (int i = 0; i < count; i++)\n                            hash = (hash ^ pData[i]) * p;\n                    }\n                }\n\n                // Restore stream position.\n                stream.Position = prevPosition;\n\n                hash += hash << 13;\n                hash ^= hash >> 7;\n                hash += hash << 3;\n                hash ^= hash >> 17;\n                hash += hash << 5;\n                return hash;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Utilities/ReflectionHelpers.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Platform.Graphics.Utilities\n{\n    public static class ReflectionHelpers\n    {\n        public static bool IsValueType(Type targetType)\n        {\n#if WINRT\n            return targetType.GetTypeInfo().IsValueType;\n#else\n            return targetType.IsValueType;\n#endif\n        }\n\n        /// <summary>\n        /// Returns the Assembly of a Type\n        /// </summary>\n        public static Assembly GetAssembly(Type targetType)\n        {\n#if WINRT\n            return targetType.GetTypeInfo().Assembly;\n#else\n            return targetType.Assembly;\n#endif\n        }\n\n        /// <summary>\n        /// Returns true if the given type can be assigned the given value\n        /// </summary>\n        public static bool IsAssignableFrom(Type type, object value)\n        {\n            return IsAssignableFromType(type, value.GetType());\n        }\n\n        /// <summary>\n        /// Returns true if the given type can be assigned a value with the given object type\n        /// </summary>\n        public static bool IsAssignableFromType(Type type, Type objectType)\n        {\n#if WINRT\n            return (type.GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo()));\n#else\n            return (type.IsAssignableFrom(objectType));\n#endif\n        }\n\n        public static int SizeOf<T>()\n        {\n            return ManagedSizeOf<T>.Value;\n        }\n\n        /// <summary>\n        /// Generics handler for Marshal.SizeOf\n        /// </summary>\n        private static class ManagedSizeOf<T>\n        {\n            static public int Value { get; private set; }\n\n            static ManagedSizeOf()\n            {\n#if NET40 || NET45 || NET40_OR_GREATER\n                Value = Marshal.SizeOf(typeof(T));\n#else\n                Value = Marshal.SizeOf<T>();\n#endif\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Utilities/TextureHelpers.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Graphics.PackedVector;\n\nnamespace Microsoft.Xna.Platform.Graphics.Utilities\n{\n    public static class TextureHelpers\n    {\n\n        public static int GetClampedMultiSampleCount(SurfaceFormat surfaceFormat, int multiSampleCount, int maxMultiSampleCount)\n        {\n            if (multiSampleCount > 1)\n            {\n                // Round down MultiSampleCount to the nearest power of two\n                // hack from http://stackoverflow.com/a/2681094\n                // Note: this will return an incorrect, but large value\n                // for very large numbers. That doesn't matter because\n                // the number will get clamped below anyway in this case.\n                int msc = multiSampleCount;\n                msc = msc | (msc >> 1);\n                msc = msc | (msc >> 2);\n                msc = msc | (msc >> 4);\n                msc -= (msc >> 1);\n\n                // and clamp it to what the device can handle\n                msc = Math.Min(msc, maxMultiSampleCount);\n\n                return msc;\n            }\n            else return 0;\n        }\n\n\n\n        public static int CalculateMipLevels(bool mipMap, int width, int height = 0, int depth = 0)\n        {\n            if (!mipMap)\n                return 1;\n\n            int levels = 1;\n            int size = Math.Max(Math.Max(width, height), depth);\n            while (size > 1)\n            {\n                size = size / 2;\n                levels++;\n            }\n            return levels;\n        }\n\n        public static void GetSizeForLevel(int width, int height, int level, out int w, out int h)\n        {\n            w = width;\n            h = height;\n            while (level > 0)\n            {\n                --level;\n                w /= 2;\n                h /= 2;\n            }\n            if (w == 0)\n                w = 1;\n            if (h == 0)\n                h = 1;\n        }\n\n        public static void GetSizeForLevel(int width, int height, int depth, int level, out int w, out int h, out int d)\n        {\n            w = width;\n            h = height;\n            d = depth;\n            while (level > 0)\n            {\n                --level;\n                w /= 2;\n                h /= 2;\n                d /= 2;\n            }\n            if (w == 0)\n                w = 1;\n            if (h == 0)\n                h = 1;\n            if (d == 0)\n                d = 1;\n        }\n            \n        public static Color[] GetColorData(ITexture2DStrategy texture2D)\n        {\n            int colorDataLength = texture2D.Width * texture2D.Height;\n            Color[] colorData = new Color[colorDataLength];\n\n            switch (texture2D.Format)\n            {\n                case SurfaceFormat.Single:\n                    float[] floatData = new float[colorDataLength];\n                    texture2D.GetData<float>(0, 0, texture2D.Bounds, floatData, 0, floatData.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                    {\n                        float brightness = floatData[i];\n                        // Export as a greyscale image.\n                        colorData[i] = new Color(brightness, brightness, brightness);\n                    }\n                    break;\n\n                case SurfaceFormat.Color:\n                    texture2D.GetData<Color>(0, 0, texture2D.Bounds, colorData, 0, colorData.Length);\n                    break;\n\n                case SurfaceFormat.Alpha8:\n                    Alpha8[] alpha8Data = new Alpha8[colorDataLength];\n                    texture2D.GetData<Alpha8>(0, 0, texture2D.Bounds, alpha8Data, 0, alpha8Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(alpha8Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.Bgr565:\n                    Bgr565[] bgr565Data = new Bgr565[colorDataLength];\n                    texture2D.GetData<Bgr565>(0, 0, texture2D.Bounds, bgr565Data, 0, bgr565Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(bgr565Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.Bgra4444:\n                    Bgra4444[] bgra4444Data = new Bgra4444[colorDataLength];\n                    texture2D.GetData<Bgra4444>(0, 0, texture2D.Bounds, bgra4444Data, 0, bgra4444Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(bgra4444Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.Bgra5551:\n                    Bgra5551[] bgra5551Data = new Bgra5551[colorDataLength];\n                    texture2D.GetData<Bgra5551>(0, 0, texture2D.Bounds, bgra5551Data, 0, bgra5551Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(bgra5551Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.HalfSingle:\n                    HalfSingle[] halfSingleData = new HalfSingle[colorDataLength];\n                    texture2D.GetData<HalfSingle>(0, 0, texture2D.Bounds, halfSingleData, 0, halfSingleData.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(halfSingleData[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.HalfVector2:\n                    HalfVector2[] halfVector2Data = new HalfVector2[colorDataLength];\n                    texture2D.GetData<HalfVector2>(0, 0, texture2D.Bounds, halfVector2Data, 0, halfVector2Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(halfVector2Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.HalfVector4:\n                    HalfVector4[] halfVector4Data = new HalfVector4[colorDataLength];\n                    texture2D.GetData<HalfVector4>(0, 0, texture2D.Bounds, halfVector4Data, 0, halfVector4Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(halfVector4Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.NormalizedByte2:\n                    NormalizedByte2[] normalizedByte2Data = new NormalizedByte2[colorDataLength];\n                    texture2D.GetData<NormalizedByte2>(0, 0, texture2D.Bounds, normalizedByte2Data, 0, normalizedByte2Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(normalizedByte2Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.NormalizedByte4:\n                    NormalizedByte4[] normalizedByte4Data = new NormalizedByte4[colorDataLength];\n                    texture2D.GetData<NormalizedByte4>(0, 0, texture2D.Bounds, normalizedByte4Data, 0, normalizedByte4Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(normalizedByte4Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.Rg32:\n                    Rg32[] rg32Data = new Rg32[colorDataLength];\n                    texture2D.GetData<Rg32>(0, 0, texture2D.Bounds, rg32Data, 0, rg32Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(rg32Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.Rgba64:\n                    Rgba64[] rgba64Data = new Rgba64[colorDataLength];\n                    texture2D.GetData<Rgba64>(0, 0, texture2D.Bounds, rgba64Data, 0, rgba64Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(rgba64Data[i].ToVector4());\n                    break;\n\n                case SurfaceFormat.Rgba1010102:\n                    Rgba1010102[] rgba1010102Data = new Rgba1010102[colorDataLength];\n                    texture2D.GetData<Rgba1010102>(0, 0, texture2D.Bounds, rgba1010102Data, 0, rgba1010102Data.Length);\n\n                    for (int i = 0; i < colorDataLength; i++)\n                        colorData[i] = new Color(rgba1010102Data[i].ToVector4());\n                    break;\n\n                default:\n                    throw new Exception(\"Texture surface format not supported\");\n            }\n\n            return colorData;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/BufferUsage.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// A usage hint for optimizing memory placement of graphics buffers.\n    /// </summary>\n    public enum BufferUsage\n    {\n        /// <summary>\n        /// No special usage.\n        /// </summary>\n        None,\n        /// <summary>\n        /// The buffer will not be readable and will be optimized for rendering and writing.\n        /// </summary>\n        WriteOnly\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/DynamicIndexBuffer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class DynamicIndexBuffer : IndexBuffer\n    {\n\n        public bool IsContentLost { get { return ((IDynamicIndexBufferStrategy)_strategy).IsContentLost; } }\n\n        public event EventHandler<EventArgs> ContentLost;\n\n        public DynamicIndexBuffer(GraphicsDevice graphicsDevice, Type indexType, int indexCount, BufferUsage usage) :\n            this(graphicsDevice, SizeForType(graphicsDevice, indexType), indexCount, usage)\n        {\n        }\n\n        public DynamicIndexBuffer(GraphicsDevice graphicsDevice, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) :\n            base()\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && indexElementSize == IndexElementSize.ThirtyTwoBits)\n                throw new NotSupportedException(\"Reach profile does not support 32 bit indices\");\n\n            _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateDynamicIndexBufferStrategy(indexElementSize, indexCount, usage);\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n\n        public void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct\n        {\n            base.SetDataInternal<T>(offsetInBytes, data, startIndex, elementCount, options);\n        }\n\n        public void SetData<T>(T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct\n        {\n            base.SetDataInternal<T>(0, data, startIndex, elementCount, options);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/DynamicVertexBuffer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class DynamicVertexBuffer : VertexBuffer\n    {\n\n        public bool IsContentLost { get { return ((IDynamicVertexBufferStrategy)_strategy).IsContentLost; } }\n\n        public event EventHandler<EventArgs> ContentLost;\n\n        public DynamicVertexBuffer(GraphicsDevice graphicsDevice, Type type, int vertexCount, BufferUsage usage)\n            : this(graphicsDevice, VertexDeclaration.FromType(type), vertexCount, usage)\n        {\n        }\n\n        public DynamicVertexBuffer(GraphicsDevice graphicsDevice, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base()\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n\n            _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateDynamicVertexBufferStrategy(vertexDeclaration, vertexCount, usage);\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n        public void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options) where T : struct\n        {\n            base.SetDataInternal<T>(offsetInBytes, data, startIndex, elementCount, vertexStride, options);\n        }\n\n        public unsafe void SetData<T>(T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct\n        {\n            int elementSizeInBytes = sizeof(T);\n            base.SetDataInternal<T>(0, data, startIndex, elementCount, elementSizeInBytes, options);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/IDynamicIndexBufferStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IDynamicIndexBufferStrategy\n    {\n        bool IsContentLost { get; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/IDynamicVertexBufferStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IDynamicVertexBufferStrategy\n    {\n        bool IsContentLost { get; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/IPlatformVertexDeclaration.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformVertexDeclaration\n    {\n        VertexElement[] InternalVertexElements { get; }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/IVertexType.cs",
    "content": "﻿namespace Microsoft.Xna.Framework.Graphics\n{\n    public interface IVertexType\n    {\n        VertexDeclaration VertexDeclaration\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/IndexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class IndexBuffer : GraphicsResource\n        , IPlatformIndexBuffer\n    {\n        internal IndexBufferStrategy _strategy;\n\n        IndexBufferStrategy IPlatformIndexBuffer.Strategy { get { return _strategy; } }\n\n        public BufferUsage BufferUsage\n        {\n            get { return _strategy.BufferUsage; }\n        }\n\n        public int IndexCount\n        {\n            get { return _strategy.IndexCount; }\n        }\n\n        public IndexElementSize IndexElementSize\n        {\n            get { return _strategy.IndexElementSize; }\n        }\n\n\n        public IndexBuffer(GraphicsDevice graphicsDevice, Type indexType, int indexCount, BufferUsage usage) :\n            this(graphicsDevice, SizeForType(graphicsDevice, indexType), indexCount, usage)\n        {\n        }\n\n        public IndexBuffer(GraphicsDevice graphicsDevice, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base()\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n            if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && indexElementSize == IndexElementSize.ThirtyTwoBits)\n                throw new NotSupportedException(\"Reach profile does not support 32 bit indices\");\n\n            _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateIndexBufferStrategy(indexElementSize, indexCount, usage);\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n\n        protected IndexBuffer()\n            : base()\n        {\n        }\n\n\n        /// <summary>\n        /// Gets the relevant IndexElementSize enum value for the given type.\n        /// </summary>\n        /// <param name=\"graphicsDevice\">The graphics device.</param>\n        /// <param name=\"type\">The type to use for the index buffer</param>\n        /// <returns>The IndexElementSize enum value that matches the type</returns>\n        internal static IndexElementSize SizeForType(GraphicsDevice graphicsDevice, Type type)\n        {\n            switch (Marshal.SizeOf(type))\n            {\n                case 2:\n                    return IndexElementSize.SixteenBits;\n                case 4:\n                    if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach)\n                        throw new NotSupportedException(\"The profile does not support an elementSize of IndexElementSize.ThirtyTwoBits; use IndexElementSize.SixteenBits or a type that has a size of two bytes.\");\n                    return IndexElementSize.ThirtyTwoBits;\n                default:\n                    throw new ArgumentOutOfRangeException(\"type\",\"Index buffers can only be created for types that are sixteen or thirty two bits in length\");\n            }\n        }\n\n        public void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct\n        {\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n            if (data.Length < (startIndex + elementCount))\n                throw new InvalidOperationException(\"The array specified in the data parameter is not the correct size for the amount of data requested.\");\n            if (BufferUsage == BufferUsage.WriteOnly)\n                throw new NotSupportedException(\"This IndexBuffer was created with a usage type of BufferUsage.WriteOnly. Calling GetData on a resource that was created with BufferUsage.WriteOnly is not supported.\");\n\n            _strategy.GetData<T>(offsetInBytes, data, startIndex, elementCount);\n        }\n\n        public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct\n        {\n            this.GetData<T>(0, data, startIndex, elementCount);\n        }\n\n        public void GetData<T>(T[] data) where T : struct\n        {\n            this.GetData<T>(0, data, 0, data.Length);\n        }\n\n        public void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct\n        {\n            SetDataInternal<T>(offsetInBytes, data, startIndex, elementCount, SetDataOptions.None);\n        }\n                \n        public void SetData<T>(T[] data, int startIndex, int elementCount) where T : struct\n        {\n            SetDataInternal<T>(0, data, startIndex, elementCount, SetDataOptions.None);\n        }\n        \n        public void SetData<T>(T[] data) where T : struct\n        {\n            SetDataInternal<T>(0, data, 0, data.Length, SetDataOptions.None);\n        }\n\n        protected void SetDataInternal<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct\n        {\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n            if (data.Length < (startIndex + elementCount))\n                throw new InvalidOperationException(\"The array specified in the data parameter is not the correct size for the amount of data requested.\");\n\n            _strategy.SetData<T>(offsetInBytes, data, startIndex, elementCount, options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/IndexBufferStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformIndexBuffer\n    {\n        IndexBufferStrategy Strategy { get; }\n    }\n\n    public abstract class IndexBufferStrategy : GraphicsResourceStrategy\n    {\n        protected readonly GraphicsContextStrategy _contextStrategy;\n\n        private IndexElementSize _indexElementSize;\n        private int _indexCount;\n        private BufferUsage _bufferUsage;\n\n        private readonly int _elementSizeInBytes;\n\n        public IndexElementSize IndexElementSize\n        {\n            get { return _indexElementSize; }\n        }\n        public int IndexCount\n        {\n            get { return _indexCount; }\n        }\n        public BufferUsage BufferUsage\n        {\n            get { return _bufferUsage; }\n        }\n\n        public int ElementSizeInBytes\n        {\n            get { return _elementSizeInBytes; }\n        }\n\n        public T ToConcrete<T>() where T : IndexBufferStrategy\n        {\n            return (T)this;\n        }\n\n        protected IndexBufferStrategy(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)\n            : base(contextStrategy)\n        {\n            _contextStrategy = contextStrategy;\n\n            this._indexElementSize = indexElementSize;\t\n            this._indexCount = indexCount;\n            this._bufferUsage = usage;\n\n            switch (indexElementSize)\n            {\n                case IndexElementSize.SixteenBits:   this._elementSizeInBytes = sizeof(Int16); break;\n                case IndexElementSize.ThirtyTwoBits: this._elementSizeInBytes = sizeof(Int32); break;\n                default: throw new InvalidOperationException();\n            }\n        }\n\n        public abstract void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct;\n        public abstract void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct;\n\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/IndexElementSize.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines size for index in <see cref=\"IndexBuffer\"/> and <see cref=\"DynamicIndexBuffer\"/>.\n    /// </summary>\n    public enum IndexElementSize\n    {\n        /// <summary>\n        /// 16-bit short/ushort value been used.\n        /// </summary>\n        SixteenBits,\n        /// <summary>\n        /// 32-bit int/uint value been used.\n        /// </summary>\n        ThirtyTwoBits\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/PrimitiveType.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines how vertex data is ordered.\n    /// </summary>\n    public enum PrimitiveType\n    {\n        /// <summary>\n        /// Renders the specified vertices as a sequence of isolated triangles. Each group of three vertices defines a separate triangle. Back-face culling is affected by the current winding-order render state.\n        /// </summary>\n        TriangleList,\n\n        /// <summary>\n        /// Renders the vertices as a triangle strip. The back-face culling flag is flipped automatically on even-numbered triangles.\n        /// </summary>\n        TriangleStrip,\n\n        /// <summary>\n        /// Renders the vertices as a list of isolated straight line segments; the count may be any positive integer.\n        /// </summary>\n        LineList,\n\n        /// <summary>\n        /// Renders the vertices as a single polyline; the count may be any positive integer.\n        /// </summary>\n        LineStrip,\n\n        /// <summary>\n        /// Renders the vertices as individual points; the count may be any positive integer.\n        /// </summary>\n        PointList\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexBuffer.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    public class VertexBuffer : GraphicsResource\n        , IPlatformVertexBuffer\n    {\n        internal VertexBufferStrategy _strategy;\n\n        VertexBufferStrategy IPlatformVertexBuffer.Strategy { get { return _strategy; } }\n\n        public int VertexCount\n        {\n            get { return _strategy.VertexCount; }\n        }\n\n        public VertexDeclaration VertexDeclaration\n        {\n            get { return _strategy.VertexDeclaration; }\n        }\n\n        public BufferUsage BufferUsage\n        {\n            get { return _strategy.BufferUsage; }\n        }\n        \n        \n        public VertexBuffer(GraphicsDevice graphicsDevice, Type type, int vertexCount, BufferUsage usage) :\n            this(graphicsDevice, VertexDeclaration.FromType(type), vertexCount, usage)\n        {\n        }\n\n        public VertexBuffer(GraphicsDevice graphicsDevice, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) :\n            base()\n        {\n            if (graphicsDevice == null)\n                throw new ArgumentNullException(\"graphicsDevice\");\n\n            _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateVertexBufferStrategy(vertexDeclaration, vertexCount, usage);\n            SetResourceStrategy((IGraphicsResourceStrategy)_strategy);\n        }\n\n        protected VertexBuffer()\n            : base()\n        {\n        }\n\n\n        /// <summary>\n        /// Get the vertex data froom this VertexBuffer.\n        /// </summary>\n        /// <typeparam name=\"T\">The struct you want to fill.</typeparam>\n        /// <param name=\"offsetInBytes\">The offset to the first element in the vertex buffer in bytes.</param>\n        /// <param name=\"data\">An array of T's to be filled.</param>\n        /// <param name=\"startIndex\">The index to start filling the data array.</param>\n        /// <param name=\"elementCount\">The number of T's to get.</param>\n        /// <param name=\"vertexStride\">The size of how a vertex buffer element should be interpreted.</param>\n        ///\n        /// <remarks>\n        /// Note that this pulls data from VRAM into main memory and because of that is a very expensive operation.\n        /// It is often a better idea to keep a copy of the data in main memory.\n        /// </remarks>\n        ///\n        /// <remarks>\n        /// <p>Using this operation it is easy to get certain vertex elements from a VertexBuffer.</p>\n        /// <p>\n        /// For example to get the texture coordinates from a VertexBuffer of <see cref=\"VertexPositionTexture\"/> you can call \n        /// GetData(4 * 3, data, elementCount, 20). 'data'should be an array of <see cref=\"Vector2\"/> in this example.\n        /// The offsetInBytes is the number of bytes taken up by the <see cref=\"VertexPositionTexture.Position\"/> of the vertex.\n        /// For vertexStride we pass the size of a <see cref=\"VertexPositionTexture\"/>.\n        /// </p>\n        /// </remarks>\n        public unsafe void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride = 0) where T : struct\n        {\n            int elementSizeInBytes = sizeof(T);\n            if (vertexStride == 0)\n                vertexStride = elementSizeInBytes;\n\n            int vertexByteSize = VertexCount * VertexDeclaration.VertexStride;\n            if (vertexStride > vertexByteSize)\n                throw new ArgumentOutOfRangeException(\"vertexStride\", \"Vertex stride can not be larger than the vertex buffer size.\");\n\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n            if (data.Length < (startIndex + elementCount))\n                throw new ArgumentOutOfRangeException(\"elementCount\", \"This parameter must be a valid index within the array.\");\n            if (BufferUsage == BufferUsage.WriteOnly)\n                throw new NotSupportedException(\"Calling GetData on a resource that was created with BufferUsage.WriteOnly is not supported.\");\n            if (elementCount > 1 && elementCount * vertexStride > vertexByteSize)\n                throw new InvalidOperationException(\"The array is not the correct size for the amount of data requested.\");\n\n            _strategy.GetData<T>(offsetInBytes, data, startIndex, elementCount, vertexStride);\n        }\n\n        public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct\n        {\n            this.GetData<T>(0, data, startIndex, elementCount, 0);\n        }\n\n        public unsafe void GetData<T>(T[] data) where T : struct\n        {\n            int elementSizeInByte = sizeof(T);\n            this.GetData<T>(0, data, 0, data.Length, elementSizeInByte);\n        }\n\n        /// <summary>\n        /// Sets the vertex buffer data, specifying the index at which to start copying from the source data array,\n        /// the number of elements to copy from the source data array, \n        /// and how far apart elements from the source data array should be when they are copied into the vertex buffer.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of elements in the data array.</typeparam>\n        /// <param name=\"offsetInBytes\">Offset in bytes from the beginning of the vertex buffer to the start of the copied data.</param>\n        /// <param name=\"data\">Data array.</param>\n        /// <param name=\"startIndex\">Index at which to start copying from <paramref name=\"data\"/>.\n        /// Must be within the <paramref name=\"data\"/> array bounds.</param>\n        /// <param name=\"elementCount\">Number of elements to copy from <paramref name=\"data\"/>.\n        /// The combination of <paramref name=\"startIndex\"/> and <paramref name=\"elementCount\"/> \n        /// must be within the <paramref name=\"data\"/> array bounds.</param>\n        /// <param name=\"vertexStride\">Specifies how far apart, in bytes, elements from <paramref name=\"data\"/> should be when \n        /// they are copied into the vertex buffer.\n        /// In almost all cases this should be <c>sizeof(T)</c>, to create a tightly-packed vertex buffer.\n        /// If you specify <c>sizeof(T)</c>, elements from <paramref name=\"data\"/> will be copied into the \n        /// vertex buffer with no padding between each element.\n        /// If you specify a value greater than <c>sizeof(T)</c>, elements from <paramref name=\"data\"/> will be copied \n        /// into the vertex buffer with padding between each element.\n        /// If you specify <c>0</c> for this parameter, it will be treated as if you had specified <c>sizeof(T)</c>.\n        /// With the exception of <c>0</c>, you must specify a value greater than or equal to <c>sizeof(T)</c>.</param>\n        /// <remarks>\n        /// If <c>T</c> is <c>VertexPositionTexture</c>, but you want to set only the position component of the vertex data,\n        /// you would call this method as follows:\n        /// <code>\n        /// Vector3[] positions = new Vector3[numVertices];\n        /// vertexBuffer.SetData(0, positions, 0, numVertices, vertexBuffer.VertexDeclaration.VertexStride);\n        /// </code>\n        /// \n        /// Continuing from the previous example, if you want to set only the texture coordinate component of the vertex data,\n        /// you would call this method as follows (note the use of <paramref name=\"offsetInBytes\"/>:\n        /// <code>\n        /// Vector2[] texCoords = new Vector2[numVertices];\n        /// vertexBuffer.SetData(12, texCoords, 0, numVertices, vertexBuffer.VertexDeclaration.VertexStride);\n        /// </code>\n        /// </remarks>\n        /// <remarks>\n        /// If you provide a <c>byte[]</c> in the <paramref name=\"data\"/> parameter, then you should almost certainly\n        /// set <paramref name=\"vertexStride\"/> to <c>1</c>, to avoid leaving any padding between the <c>byte</c> values\n        /// when they are copied into the vertex buffer.\n        /// </remarks>\n        public void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct\n        {\n            SetDataInternal<T>(offsetInBytes, data, startIndex, elementCount, vertexStride, SetDataOptions.None);\n        }\n\n        /// <summary>\n        /// Sets the vertex buffer data, specifying the index at which to start copying from the source data array,\n        /// and the number of elements to copy from the source data array. This is the same as calling \n        /// <see cref=\"SetData{T}(int, T[], int, int, int)\"/>  with <c>offsetInBytes</c> equal to <c>0</c>,\n        /// and <c>vertexStride</c> equal to <c>sizeof(T)</c>.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of elements in the data array.</typeparam>\n        /// <param name=\"data\">Data array.</param>\n        /// <param name=\"startIndex\">Index at which to start copying from <paramref name=\"data\"/>.\n        /// Must be within the <paramref name=\"data\"/> array bounds.</param>\n        /// <param name=\"elementCount\">Number of elements to copy from <paramref name=\"data\"/>.\n        /// The combination of <paramref name=\"startIndex\"/> and <paramref name=\"elementCount\"/> \n        /// must be within the <paramref name=\"data\"/> array bounds.</param>\n        public unsafe void SetData<T>(T[] data, int startIndex, int elementCount) where T : struct\n        {\n            int elementSizeInBytes = sizeof(T);\n            SetDataInternal<T>(0, data, startIndex, elementCount, elementSizeInBytes, SetDataOptions.None);\n        }\n        \n        /// <summary>\n        /// Sets the vertex buffer data. This is the same as calling <see cref=\"SetData{T}(int, T[], int, int, int)\"/> \n        /// with <c>offsetInBytes</c> and <c>startIndex</c> equal to <c>0</c>, <c>elementCount</c> equal to <c>data.Length</c>, \n        /// and <c>vertexStride</c> equal to <c>sizeof(T)</c>.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of elements in the data array.</typeparam>\n        /// <param name=\"data\">Data array.</param>\n        public unsafe void SetData<T>(T[] data) where T : struct\n        {\n            int elementSizeInBytes = sizeof(T);\n            SetDataInternal<T>(0, data, 0, data.Length, elementSizeInBytes, SetDataOptions.None);\n        }\n\n        protected unsafe void SetDataInternal<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options) where T : struct\n        {\n            if (data == null)\n                throw new ArgumentNullException(\"data\");\n\n            int elementSizeInBytes = sizeof(T);\n            int bufferSize = VertexCount * VertexDeclaration.VertexStride;\n\n            if (vertexStride == 0)\n                vertexStride = elementSizeInBytes;\n\n            int vertexByteSize = VertexCount * VertexDeclaration.VertexStride;\n            if (vertexStride > vertexByteSize)\n                throw new ArgumentOutOfRangeException(\"vertexStride\", \"Vertex stride can not be larger than the vertex buffer size.\");\n\n            if (startIndex + elementCount > data.Length || elementCount <= 0)\n                throw new ArgumentOutOfRangeException(\"data\",\"The array specified in the data parameter is not the correct size for the amount of data requested.\");\n            if (elementCount > 1 && (elementCount * vertexStride > bufferSize))\n                throw new InvalidOperationException(\"The vertex stride is larger than the vertex buffer.\");\n            if (vertexStride < elementSizeInBytes)\n                throw new ArgumentOutOfRangeException(\"The vertex stride must be greater than or equal to the size of the specified data (\" + elementSizeInBytes + \").\");\n\n            _strategy.SetData<T>(offsetInBytes, data, startIndex, elementCount, vertexStride, options, bufferSize, elementSizeInBytes);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexBufferBinding.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines how a vertex buffer is bound to the graphics device for rendering.\n    /// </summary>\n    public struct VertexBufferBinding\n    {\n        private readonly VertexBuffer _vertexBuffer;\n        private readonly int _vertexOffset;\n        private readonly int _instanceFrequency;\n\n        /// <summary>\n        /// Gets the vertex buffer.\n        /// </summary>\n        /// <value>The vertex buffer.</value>\n        public VertexBuffer VertexBuffer\n        {\n            get { return _vertexBuffer; }\n        }\n\n        /// <summary>\n        /// Gets the index of the first vertex in the vertex buffer to use.\n        /// </summary>\n        /// <value>The index of the first vertex in the vertex buffer to use.</value>\n        public int VertexOffset\n        {\n            get { return _vertexOffset; }\n        }\n\n        /// <summary>\n        /// Gets the number of instances to draw using the same per-instance data before advancing\n        /// in the buffer by one element.\n        /// </summary>\n        /// <value>\n        /// The number of instances to draw using the same per-instance data before advancing in the\n        /// buffer by one element. This value must be 0 for an element that contains per-vertex\n        /// data and greater than 0 for per-instance data.\n        /// </value>\n        public int InstanceFrequency\n        {\n            get { return _instanceFrequency; }\n        }\n\n        /// <summary>\n        /// Creates an instance of <see cref=\"VertexBufferBinding\"/>.\n        /// </summary>\n        /// <param name=\"vertexBuffer\">The vertex buffer to bind.</param>\n        public VertexBufferBinding(VertexBuffer vertexBuffer)\n            : this(vertexBuffer, 0, 0)\n        {\n        }\n\n        /// <summary>\n        /// Creates an instance of <see cref=\"VertexBufferBinding\"/>.\n        /// </summary>\n        /// <param name=\"vertexBuffer\">The vertex buffer to bind.</param>\n        /// <param name=\"vertexOffset\">\n        /// The index of the first vertex in the vertex buffer to use.\n        /// </param>\n        public VertexBufferBinding(VertexBuffer vertexBuffer, int vertexOffset)\n            : this(vertexBuffer, vertexOffset, 0)\n        {\n        }\n\n        /// <summary>\n        /// Creates an instance of VertexBufferBinding.\n        /// </summary>\n        /// <param name=\"vertexBuffer\">The vertex buffer to bind.</param>\n        /// <param name=\"vertexOffset\">\n        /// The index of the first vertex in the vertex buffer to use.\n        /// </param>\n        /// <param name=\"instanceFrequency\">\n        /// The number of instances to draw using the same per-instance data before advancing in the\n        /// buffer by one element. This value must be 0 for an element that contains per-vertex data\n        /// and greater than 0 for per-instance data.\n        /// </param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"vertexBuffer\"/> is <see langword=\"null\"/>.\n        /// </exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">\n        /// <paramref name=\"vertexOffset\"/> or <paramref name=\"instanceFrequency\"/> is invalid.\n        /// </exception>\n        public VertexBufferBinding(VertexBuffer vertexBuffer, int vertexOffset, int instanceFrequency)\n        {\n            if (vertexBuffer == null)\n                throw new ArgumentNullException(\"vertexBuffer\");\n            if (vertexOffset < 0 || vertexOffset >= vertexBuffer.VertexCount)\n                throw new ArgumentOutOfRangeException(\"vertexOffset\");\n            if (instanceFrequency < 0)\n                throw new ArgumentOutOfRangeException(\"instanceFrequency\");\n\n            _vertexBuffer = vertexBuffer;\n            _vertexOffset = vertexOffset;\n            _instanceFrequency = instanceFrequency;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexBufferCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\n\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    /// <summary>\n    /// Stores the vertex buffers to be bound to the input assembler stage.\n    /// </summary>\n    public sealed class VertexBufferCollection\n    {\n        VertexBufferBinding[] _bindings;\n\n        /// <summary>\n        /// Gets or sets the number of used input slots.\n        /// </summary>\n        /// <value>The number of used input slots.</value>\n        public int Count { get; private set; }\n\n        // VertexDeclarations and InstanceFrequencies are used by DX VertexInputLayoutKey and InputLayoutCache\n        public VertexDeclaration[] VertexDeclarations { get; private set; }\n        public int[] InstanceFrequencies { get; private set; }\n\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"VertexBufferCollection\" /> class.\n        /// </summary>\n        /// <param name=\"maxVertexBufferSlots\">The maximum number of vertex buffer slots.</param>\n        internal VertexBufferCollection(int maxVertexBufferSlots)\n        {\n            Count = 0;\n            _bindings = new VertexBufferBinding[maxVertexBufferSlots];\n\n            VertexDeclarations = new VertexDeclaration[maxVertexBufferSlots];\n            InstanceFrequencies = new int[maxVertexBufferSlots];\n\n        }\n\n        /// <summary>\n        /// Clears the vertex buffer slots.\n        /// </summary>\n        /// <returns>\n        /// <see langword=\"true\"/> if the input layout was changed; otherwise,\n        /// <see langword=\"false\"/>.\n        /// </returns>\n        public bool Clear()\n        {\n            if (Count == 0)\n                return false;\n\n            Array.Clear(_bindings, 0, Count);\n\n            Array.Clear(VertexDeclarations, 0, Count);\n            Array.Clear(InstanceFrequencies, 0, Count);\n            Count = 0;\n            return true;\n        }\n\n        /// <summary>\n        /// Binds the specified vertex buffer to the first input slot.\n        /// </summary>\n        /// <param name=\"vertexBuffer\">The vertex buffer.</param>\n        /// <param name=\"vertexOffset\">\n        /// The offset (in vertices) from the beginning of the vertex buffer to the first vertex to \n        /// use.\n        /// </param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the input layout was changed; otherwise,\n        /// <see langword=\"false\"/>.\n        /// </returns>\n        public bool Set(VertexBuffer vertexBuffer, int vertexOffset)\n        {\n            Debug.Assert(vertexBuffer != null);\n            Debug.Assert(0 <= vertexOffset && vertexOffset < vertexBuffer.VertexCount);\n\n            if (Count == 1\n            &&  _bindings[0].VertexBuffer == vertexBuffer\n            &&  _bindings[0].VertexOffset == vertexOffset\n            &&  _bindings[0].InstanceFrequency == 0)\n            {\n                return false;\n            }\n\n            _bindings[0] = new VertexBufferBinding(vertexBuffer, vertexOffset, 0);\n\n            VertexDeclarations[0] = vertexBuffer.VertexDeclaration;\n            InstanceFrequencies[0] = 0;\n\n            if (Count > 1)\n            {\n                Array.Clear(_bindings, 1, Count - 1);\n\n                Array.Clear(VertexDeclarations, 1, Count - 1);\n                Array.Clear(InstanceFrequencies, 1, Count - 1);\n            }\n\n            Count = 1;\n            return true;\n        }\n\n        /// <summary>\n        /// Binds the the specified vertex buffers to the input slots.\n        /// </summary>\n        /// <param name=\"vertexBufferBindings\">The vertex buffer bindings.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the input layout was changed; otherwise,\n        /// <see langword=\"false\"/>.\n        /// </returns>\n        public bool Set(params VertexBufferBinding[] vertexBufferBindings)\n        {\n            Debug.Assert(vertexBufferBindings != null);\n            Debug.Assert(vertexBufferBindings.Length > 0);\n            Debug.Assert(vertexBufferBindings.Length <= _bindings.Length);\n\n            bool isDirty = false;\n            for (int i = 0; i < vertexBufferBindings.Length; i++)\n            {\n                Debug.Assert(vertexBufferBindings[i].VertexBuffer != null);\n\n                if (_bindings[i].VertexBuffer != vertexBufferBindings[i].VertexBuffer\n                ||  _bindings[i].VertexOffset != vertexBufferBindings[i].VertexOffset\n                ||  _bindings[i].InstanceFrequency != vertexBufferBindings[i].InstanceFrequency)\n                {\n                    _bindings[i] = vertexBufferBindings[i];\n\n                    VertexDeclarations[i] = vertexBufferBindings[i].VertexBuffer.VertexDeclaration;\n                    InstanceFrequencies[i] = vertexBufferBindings[i].InstanceFrequency;\n                    isDirty = true;\n                }\n            }\n\n            if (Count > vertexBufferBindings.Length)\n            {\n                int startIndex = vertexBufferBindings.Length;\n                int length = Count - startIndex;\n                Array.Clear(_bindings, startIndex, length);\n\n                Array.Clear(VertexDeclarations, startIndex, length);\n                Array.Clear(InstanceFrequencies, startIndex, length);\n                isDirty = true;\n            }\n\n            Count = vertexBufferBindings.Length;\n            return isDirty;\n        }\n\n        /// <summary>\n        /// Gets vertex buffer bound to the specified input slots.\n        /// </summary>\n        /// <returns>The vertex buffer binding.</returns>\n        public VertexBufferBinding Get(int slot)\n        {\n            Debug.Assert(0 <= slot && slot < Count);\n            return _bindings[slot];\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexBufferStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Platform.Graphics\n{\n    public interface IPlatformVertexBuffer\n    {\n        VertexBufferStrategy Strategy { get; }\n    }\n\n    public abstract class VertexBufferStrategy : GraphicsResourceStrategy\n    {\n        protected readonly GraphicsContextStrategy _contextStrategy;\n\n        private VertexDeclaration _vertexDeclaration;\n        private int _vertexCount;\n        private BufferUsage _bufferUsage;\n\n        public VertexDeclaration VertexDeclaration\n        {\n            get { return _vertexDeclaration; }\n        }\n        public int VertexCount\n        {\n            get { return _vertexCount; }\n        }\n        public BufferUsage BufferUsage\n        {\n            get { return _bufferUsage; }\n        }\n\n        public T ToConcrete<T>() where T : VertexBufferStrategy\n        {\n            return (T)this;\n        }\n\n        protected VertexBufferStrategy(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)\n            : base(contextStrategy)\n        {\n            this._contextStrategy = contextStrategy;\n\n            this._vertexDeclaration = vertexDeclaration;\n            this._vertexCount = vertexCount;\n            this._bufferUsage = usage;\n        }\n\n        public abstract void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes) where T : struct;\n        public abstract void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct;\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n            base.Dispose(disposing);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexDeclaration.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Graphics;\nusing Microsoft.Xna.Platform.Graphics.Utilities;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines per-vertex data of a vertex buffer.\n    /// </summary>\n    /// <remarks>\n    /// <see cref=\"VertexDeclaration\"/> implements <see cref=\"IEquatable{T}\"/> and can be used as\n    /// a key in a dictionary. Two vertex declarations are considered equal if the vertices are\n    /// structurally equivalent, i.e. the vertex elements and the vertex stride are identical. (The\n    /// properties <see cref=\"GraphicsResource.Name\"/> and <see cref=\"GraphicsResource.Tag\"/> are\n    /// ignored in <see cref=\"GetHashCode\"/> and <see cref=\"Equals(VertexDeclaration)\"/>!)\n    /// </remarks>\n    public class VertexDeclaration : IEquatable<VertexDeclaration>, IDisposable\n        , IPlatformVertexDeclaration\n    {\n\n        #region ----- Data shared between structurally identical vertex declarations -----\n\n        private sealed class VertexDeclarationData : IEquatable<VertexDeclarationData>\n        {\n            private readonly int _hashCode;\n\n            public readonly int VertexStride;\n            public VertexElement[] Elements;\n\n\n            public VertexDeclarationData(int vertexStride, VertexElement[] elements)\n            {\n                this.VertexStride = vertexStride;\n                this.Elements = elements;\n\n                // Pre-calculate hash code for fast comparisons and lookup in dictionaries.\n                _hashCode = VertexDeclarationData.CalculateHashCode(this.VertexStride, this.Elements);\n            }\n\n            private static int CalculateHashCode(int vertexStride, VertexElement[] elements)\n            {\n                int hashCode;\n\n                unchecked\n                {\n                    hashCode = elements[0].GetHashCode();\n                    for (int i = 1; i < elements.Length; i++)\n                        hashCode = (hashCode * 397) ^ elements[i].GetHashCode();\n\n                    hashCode = (hashCode * 397) ^ elements.Length;\n                    hashCode = (hashCode * 397) ^ vertexStride;\n\n                    return hashCode;\n                }\n            }\n\n            public override bool Equals(object obj)\n            {\n                return Equals(obj as VertexDeclarationData);\n            }\n\n            public bool Equals(VertexDeclarationData other)\n            {\n                if (ReferenceEquals(null, other))\n                    return false;\n\n                if (ReferenceEquals(this, other))\n                    return true;\n\n                if (_hashCode != other._hashCode\n                || VertexStride != other.VertexStride\n                || Elements.Length != other.Elements.Length)\n                {\n                    return false;\n                }\n\n                for (int i = 0; i < Elements.Length; i++)\n                {\n                    if (!Elements[i].Equals(other.Elements[i]))\n                        return false;\n                }\n\n                return true;\n            }\n\n            public override int GetHashCode()\n            {\n                return _hashCode;\n            }\n        }\n        #endregion\n\n\n        #region ----- VertexDeclaration Cache -----\n\n        private static readonly Dictionary<VertexDeclarationData, VertexDeclaration> _vertexDeclarationDataCache = new Dictionary<VertexDeclarationData, VertexDeclaration>();\n\n        internal static VertexDeclaration GetOrCreate(int vertexStride, VertexElement[] elements)\n        {\n            lock (_vertexDeclarationDataCache)\n            {\n                VertexDeclarationData data = new VertexDeclarationData(vertexStride, elements);\n                VertexDeclaration vertexDeclaration;\n                if (_vertexDeclarationDataCache.TryGetValue(data, out vertexDeclaration))\n                    return vertexDeclaration;\n\n                // Data.Elements have already been set in the Data ctor. However, entries\n                // in the vertex declaration cache must be immutable. Therefore, we create a \n                // copy of the array, which the user cannot access.\n                data.Elements = (VertexElement[])elements.Clone();\n\n                vertexDeclaration = new VertexDeclaration(data);\n                _vertexDeclarationDataCache[data] = vertexDeclaration;\n\n                return vertexDeclaration;\n            }\n        }\n\n        private VertexDeclaration(VertexDeclarationData data)\n        {\n            _data = data;\n        }\n        #endregion\n\n\n        private readonly VertexDeclarationData _data;\n\n        /// <summary>\n        /// Gets the internal vertex elements array.\n        /// </summary>\n        /// <value>The internal vertex elements array.</value>\n        VertexElement[] IPlatformVertexDeclaration.InternalVertexElements\n        {\n            get { return _data.Elements; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"VertexDeclaration\"/> class.\n        /// </summary>\n        /// <param name=\"elements\">The vertex elements.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"elements\"/> is <see langword=\"null\"/> or empty.\n        /// </exception>\n        public VertexDeclaration(params VertexElement[] elements)\n            : this(CalculateVertexStride(elements), elements)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"VertexDeclaration\"/> class.\n        /// </summary>\n        /// <param name=\"vertexStride\">The size of a vertex (including padding) in bytes.</param>\n        /// <param name=\"elements\">The vertex elements.</param>\n        /// <exception cref=\"ArgumentNullException\">\n        /// <paramref name=\"elements\"/> is <see langword=\"null\"/> or empty.\n        /// </exception>\n        public VertexDeclaration(int vertexStride, params VertexElement[] elements)\n        {\n            if ((elements == null) || (elements.Length == 0))\n                throw new ArgumentNullException(\"elements\", \"Elements cannot be empty\");\n\n            lock (_vertexDeclarationDataCache)\n            {\n                VertexDeclarationData data = new VertexDeclarationData(vertexStride, elements);\n\n                VertexDeclaration vertexDeclaration;\n                if (_vertexDeclarationDataCache.TryGetValue(data, out vertexDeclaration))\n                {\n                    // Reuse existing data.\n                    _data = vertexDeclaration._data;\n                }\n                else\n                {\n                    // Cache new vertex declaration.\n                    data.Elements = (VertexElement[])elements.Clone();\n                    _data = data;\n                    _vertexDeclarationDataCache[data] = this;\n                }\n            }\n        }\n\n        private static int CalculateVertexStride(VertexElement[] elements)\n        {\n            int max = 0;\n            for (int i = 0; i < elements.Length; i++)\n            {\n                int start = elements[i].Offset + elements[i].VertexElementFormat.GetSize();\n                if (max < start)\n                    max = start;\n            }\n\n            return max;\n        }\n\n        /// <summary>\n        /// Returns the VertexDeclaration for Type.\n        /// </summary>\n        /// <param name=\"vertexType\">A value type which implements the IVertexType interface.</param>\n        /// <returns>The VertexDeclaration.</returns>\n        /// <remarks>\n        /// Prefer to use VertexDeclarationCache when the declaration lookup\n        /// can be performed with a templated type.\n        /// </remarks>\n        internal static VertexDeclaration FromType(Type vertexType)\n        {\n            if (vertexType == null)\n                throw new ArgumentNullException(\"vertexType\", \"Cannot be null\");\n\n            if (!ReflectionHelpers.IsValueType(vertexType))\n            {\n                throw new ArgumentException(\"Must be value type\", \"vertexType\");\n            }\n\n            IVertexType type = Activator.CreateInstance(vertexType) as IVertexType;\n            if (type == null)\n            {\n                throw new ArgumentException(\"vertexData does not inherit IVertexType\");\n            }\n\n            VertexDeclaration vertexDeclaration = type.VertexDeclaration;\n            if (vertexDeclaration == null)\n            {\n                throw new Exception(\"VertexDeclaration cannot be null\");\n            }\n\n            return vertexDeclaration;\n        }\n\n        /// <summary>\n        /// Gets a copy of the vertex elements.\n        /// </summary>\n        /// <returns>A copy of the vertex elements.</returns>\n        public VertexElement[] GetVertexElements()\n        {\n            return (VertexElement[])_data.Elements.Clone();\n        }\n\n        /// <summary>\n        /// Gets the size of a vertex (including padding) in bytes.\n        /// </summary>\n        /// <value>The size of a vertex (including padding) in bytes.</value>\n        public int VertexStride\n        {\n            get { return _data.VertexStride; }\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"object\"/> is equal to this instance.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare with the current object.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the specified <see cref=\"object\"/> is equal to this instance;\n        /// otherwise, <see langword=\"false\"/>.\n        /// </returns>\n        public override bool Equals(object obj)\n        {\n            return Equals(obj as VertexDeclaration);\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"VertexDeclaration\"/> is equal to this\n        /// instance.\n        /// </summary>\n        /// <param name=\"other\">The object to compare with the current object.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the specified <see cref=\"VertexDeclaration\"/> is equal to this\n        /// instance; otherwise, <see langword=\"false\"/>.\n        /// </returns>\n        public bool Equals(VertexDeclaration other)\n        {\n            return other != null && ReferenceEquals(_data, other._data);\n        }\n\n        /// <summary>\n        /// Returns a hash code for this instance.\n        /// </summary>\n        /// <returns>\n        /// A hash code for this instance, suitable for use in hashing algorithms and data\n        /// structures like a hash table.\n        /// </returns>\n        public override int GetHashCode()\n        {\n            return _data.GetHashCode();\n        }\n\n        /// <summary>\n        /// Compares two <see cref=\"VertexElement\"/> instances to determine whether they are the\n        /// same.\n        /// </summary>\n        /// <param name=\"left\">The first instance.</param>\n        /// <param name=\"right\">The second instance.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the <paramref name=\"left\"/> and <paramref name=\"right\"/> are\n        /// the same; otherwise, <see langword=\"false\"/>.\n        /// </returns>\n        public static bool operator ==(VertexDeclaration left, VertexDeclaration right)\n        {\n            return Equals(left, right);\n        }\n\n        /// <summary>\n        /// Compares two <see cref=\"VertexElement\"/> instances to determine whether they are\n        /// different.\n        /// </summary>\n        /// <param name=\"left\">The first instance.</param>\n        /// <param name=\"right\">The second instance.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the <paramref name=\"left\"/> and <paramref name=\"right\"/> are\n        /// the different; otherwise, <see langword=\"false\"/>.\n        /// </returns>\n        public static bool operator !=(VertexDeclaration left, VertexDeclaration right)\n        {\n            return !Equals(left, right);\n        }\n\n\n        #region IDisposable Implementation\n\n        ~VertexDeclaration()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n        #endregion IDisposable Implementation\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexDeclarationCache.cs",
    "content": "﻿namespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Helper class which ensures we only lookup a vertex \n    /// declaration for a particular type once.\n    /// </summary>\n    /// <typeparam name=\"T\">A vertex structure which implements IVertexType.</typeparam>\n    internal class VertexDeclarationCache<T>\n        where T : struct, IVertexType\n    {\n        static private VertexDeclaration _cached;\n\n        static public VertexDeclaration VertexDeclaration\n        {\n            get\n            {\n                if (_cached == null)\n                    _cached = VertexDeclaration.FromType(typeof(T));\n\n                return _cached;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexElement.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines a single element in a vertex.\n    /// </summary>\n    public struct VertexElement : IEquatable<VertexElement>\n    {\n        private int _offset;\n        private VertexElementFormat _format;\n        private VertexElementUsage _usage;\n        private int _usageIndex;\n\n        /// <summary>\n        /// Gets or sets the offset in bytes from the beginning of the stream to the vertex element.\n        /// </summary>\n        /// <value>The offset in bytes.</value>\n        public int Offset\n        {\n            get { return _offset; }\n            set { _offset = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the data format.\n        /// </summary>\n        /// <value>The data format.</value>\n        public VertexElementFormat VertexElementFormat\n        {\n            get { return _format; }\n            set { _format = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the HLSL semantic of the element in the vertex shader input.\n        /// </summary>\n        /// <value>The HLSL semantic of the element in the vertex shader input.</value>\n        public VertexElementUsage VertexElementUsage\n        {\n            get { return _usage; }\n            set { _usage = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the semantic index.\n        /// </summary>\n        /// <value>\n        /// The semantic index, which is required if the semantic is used for more than one vertex\n        /// element.\n        /// </value>\n        /// <remarks>\n        /// Usage indices in a vertex declaration usually start with 0. When multiple vertex buffers\n        /// are bound to the input assembler stage (see <see cref=\"GraphicsDevice.SetVertexBuffers\"/>),\n        /// MonoGame internally adjusts the usage indices based on the order in which the vertex\n        /// buffers are bound.\n        /// </remarks>\n        public int UsageIndex\n        {\n            get { return _usageIndex; }\n            set { _usageIndex = value; }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"VertexElement\"/> struct.\n        /// </summary>\n        /// <param name=\"offset\">The offset in bytes from the beginning of the stream to the vertex element.</param>\n        /// <param name=\"elementFormat\">The element format.</param>\n        /// <param name=\"elementUsage\">The HLSL semantic of the element in the vertex shader input-signature.</param>\n        /// <param name=\"usageIndex\">The semantic index, which is required if the semantic is used for more than one vertex element.</param>\n        public VertexElement(int offset, VertexElementFormat elementFormat, VertexElementUsage elementUsage, int usageIndex)\n        {\n            _offset = offset;\n            _format = elementFormat;\n            _usageIndex = usageIndex;\n            _usage = elementUsage;\n        }\n\n        /// <summary>\n        /// Returns a hash code for this instance.\n        /// </summary>\n        /// <returns>\n        /// A hash code for this instance, suitable for use in hashing algorithms and data\n        /// structures like a hash table.\n        /// </returns>\n        public override int GetHashCode()\n        {\n            // ReSharper disable NonReadonlyMemberInGetHashCode\n\n            // Optimized hash:\n            // - DirectX 11 has max 32 registers. A register is max 16 byte. _offset is in the range\n            //   0 to 512 (exclusive). --> _offset needs 9 bit.\n            // - VertexElementFormat has 12 values. --> _format needs 4 bit.\n            // - VertexElementUsage has 13 values. --> _usage needs 4 bit.\n            // - DirectX 11 has max 32 registers. --> _usageIndex needs 6 bit.\n            // (Note: If these assumptions are correct we get a unique hash code. If these \n            // assumptions are not correct, we still get a useful hash code because we use XOR.)\n            int hashCode = _offset;\n            hashCode ^= (int)_format << 9;\n            hashCode ^= (int)_usage << (9 + 4);\n            hashCode ^= _usageIndex << (9 + 4 + 4);\n            return hashCode;\n            // ReSharper restore NonReadonlyMemberInGetHashCode\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"string\" /> that represents this instance.\n        /// </summary>\n        /// <returns>A <see cref=\"string\" /> that represents this instance.</returns>\n        public override string ToString()\n        {\n            return \"{Offset:\" + _offset + \" Format:\" + _format + \" Usage:\" + _usage + \" UsageIndex: \" + _usageIndex + \"}\";\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"object\"/> is equal to this instance.\n        /// </summary>\n        /// <param name=\"obj\">The object to compare with the current object.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the specified <see cref=\"object\"/> is equal to this instance;\n        /// otherwise, <see langword=\"false\"/>.\n        /// </returns>\n        public override bool Equals(object obj)\n        {\n            return obj is VertexElement && Equals((VertexElement)obj);\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"VertexElement\"/> is equal to this\n        /// instance.\n        /// </summary>\n        /// <param name=\"other\">The object to compare with the current object.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the specified <see cref=\"VertexElement\"/> is equal to this\n        /// instance; otherwise, <see langword=\"false\"/>.\n        /// </returns>\n        public bool Equals(VertexElement other)\n        {\n            return _offset == other._offset\n                   && _format == other._format\n                   && _usage == other._usage\n                   && _usageIndex == other._usageIndex;\n        }\n\n        /// <summary>\n        /// Compares two <see cref=\"VertexElement\"/> instances to determine whether they are the\n        /// same.\n        /// </summary>\n        /// <param name=\"left\">The first instance.</param>\n        /// <param name=\"right\">The second instance.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the <paramref name=\"left\"/> and <paramref name=\"right\"/> are\n        /// the same; otherwise, <see langword=\"false\"/>.\n        /// </returns>\n        public static bool operator ==(VertexElement left, VertexElement right)\n        {\n            return left.Equals(right);\n        }\n\n        /// <summary>\n        /// Compares two <see cref=\"VertexElement\"/> instances to determine whether they are\n        /// different.\n        /// </summary>\n        /// <param name=\"left\">The first instance.</param>\n        /// <param name=\"right\">The second instance.</param>\n        /// <returns>\n        /// <see langword=\"true\"/> if the <paramref name=\"left\"/> and <paramref name=\"right\"/> are\n        /// the different; otherwise, <see langword=\"false\"/>.\n        /// </returns>\n        public static bool operator !=(VertexElement left, VertexElement right)\n        {\n            return !left.Equals(right);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexElementFormat.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines vertex element formats.\n    /// </summary>\n    public enum VertexElementFormat\n    {\n        /// <summary>\n        /// Single 32-bit floating point number.\n        /// </summary>\n        Single,\n        /// <summary>\n        /// Two component 32-bit floating point number.\n        /// </summary>\n        Vector2,\n        /// <summary>\n        /// Three component 32-bit floating point number.\n        /// </summary>\n        Vector3, \n        /// <summary>\n        /// Four component 32-bit floating point number.\n        /// </summary>\n        Vector4, \n        /// <summary>\n        /// Four component, packed unsigned byte, mapped to 0 to 1 range. \n        /// </summary>\n        Color,   \n        /// <summary>\n        /// Four component unsigned byte.\n        /// </summary>\n        Byte4,        \n        /// <summary>\n        /// Two component signed 16-bit integer.\n        /// </summary>\n        Short2,\n        /// <summary>\n        /// Four component signed 16-bit integer.\n        /// </summary>\n        Short4,\n        /// <summary>\n        /// Normalized, two component signed 16-bit integer.\n        /// </summary>\n        NormalizedShort2,\n        /// <summary>\n        /// Normalized, four component signed 16-bit integer.\n        /// </summary>\n        NormalizedShort4,\n        /// <summary>\n        /// Two component 16-bit floating point number.\n        /// </summary>\n        HalfVector2,  \n        /// <summary>\n        /// Four component 16-bit floating point number.\n        /// </summary>\n        HalfVector4\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexElementUsage.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Defines usage for vertex elements.\n    /// </summary>\n    public enum VertexElementUsage\n    {\n        /// <summary>\n        /// Position data.\n        /// </summary>\n        Position,\n        /// <summary>\n        /// Color data.\n        /// </summary>\n        Color,   \n        /// <summary>\n        /// Texture coordinate data or can be used for user-defined data.\n        /// </summary>\n        TextureCoordinate, \n        /// <summary>\n        /// Normal data.\n        /// </summary>\n        Normal,\n        /// <summary>\n        /// Binormal data.\n        /// </summary>\n        Binormal,\n        /// <summary>\n        /// Tangent data.\n        /// </summary>\n        Tangent,\n        /// <summary>\n        /// Blending indices data.\n        /// </summary>\n        BlendIndices,\n        /// <summary>\n        /// Blending weight data.\n        /// </summary>\n        BlendWeight,     \n        /// <summary>\n        /// Depth data.\n        /// </summary>\n        Depth,\n        /// <summary>\n        /// Fog data.\n        /// </summary>\n        Fog,      \n        /// <summary>\n        /// Point size data. Usable for drawing point sprites.\n        /// </summary>\n        PointSize,\n        /// <summary>\n        /// Sampler data for specifies the displacement value to look up.\n        /// </summary>\n        Sample,     \n        /// <summary>\n        /// Single, positive float value, specifies a tessellation factor used in the tessellation unit to control the rate of tessellation.\n        /// </summary>\n        TessellateFactor\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexPosition.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Runtime.Serialization;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [DataContract]\n    [StructLayout(LayoutKind.Sequential, Pack = 1)]\n    public struct VertexPosition : IVertexType\n    {\n        [DataMember]\n        public Vector3 Position;\n\n        public static readonly VertexDeclaration VertexDeclaration;\n\n        public VertexPosition(Vector3 position)\n        {\n            Position = position;\n        }\n\n        VertexDeclaration IVertexType.VertexDeclaration\n        {\n            get { return VertexDeclaration; }\n        }\n\n        public override int GetHashCode()\n        {\n            return Position.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return \"{{Position:\" + Position + \"}}\";\n        }\n\n        public static bool operator == (VertexPosition left, VertexPosition right)\n        {\n            return left.Position == right.Position;\n        }\n\n        public static bool operator != (VertexPosition left, VertexPosition right)\n        {\n            return !(left == right);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj == null)\n            {\n                return false;\n            }\n            if (obj.GetType() != GetType())\n            {\n                return false;\n            }\n            return this == (VertexPosition) obj;\n        }\n\n        static VertexPosition()\n        {\n            VertexElement[] elements = { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0) };\n            VertexDeclaration declaration = new VertexDeclaration(elements);\n            VertexDeclaration = declaration;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionColor.cs",
    "content": "using System;\nusing System.Runtime.Serialization;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [DataContract]\n    [StructLayout(LayoutKind.Sequential, Pack = 1)]\n    public struct VertexPositionColor : IVertexType\n    {\n        [DataMember]\n        public Vector3 Position;\n        \n        [DataMember]\n        public Color Color;\n\n        public static readonly VertexDeclaration VertexDeclaration;\n\n        public VertexPositionColor(Vector3 position, Color color)\n        {\n            this.Position = position;\n            Color = color;\n        }\n\n        VertexDeclaration IVertexType.VertexDeclaration\n        {\n            get\n            {\n                return VertexDeclaration;\n            }\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (Position.GetHashCode() * 397) ^ Color.GetHashCode();\n            }\n        }\n\n        public override string ToString()\n        {\n            return \"{{Position:\" + this.Position + \" Color:\" + this.Color + \"}}\";\n        }\n\n        public static bool operator == (VertexPositionColor left, VertexPositionColor right)\n        {\n            return ((left.Color == right.Color) && (left.Position == right.Position));\n        }\n\n        public static bool operator != (VertexPositionColor left, VertexPositionColor right)\n        {\n            return !(left == right);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj == null)\n            {\n                return false;\n            }\n            if (obj.GetType() != base.GetType())\n            {\n                return false;\n            }\n            return (this == ((VertexPositionColor)obj));\n        }\n\n        static VertexPositionColor()\n        {\n            VertexElement[] elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0) };\n            VertexDeclaration declaration = new VertexDeclaration(elements);\n            VertexDeclaration = declaration;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionColorNormal.cs",
    "content": "﻿using System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [StructLayout(LayoutKind.Sequential, Pack = 1)]\n    public struct VertexPositionColorNormal : IVertexType\n    {\n        public Vector3 Position;\n        public Color Color;\n        public Vector3 Normal;\n        public static readonly VertexDeclaration VertexDeclaration;\n\n        public VertexPositionColorNormal(Vector3 position, Color color, Vector3 normal)\n        {\n            Position = position;\n            Color = color;\n            Normal = normal;\n        }\n\n        VertexDeclaration IVertexType.VertexDeclaration\n        {\n            get\n            {\n                return VertexDeclaration;\n            }\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int hashCode = Position.GetHashCode();\n                hashCode = (hashCode * 397) ^ Color.GetHashCode();\n                hashCode = (hashCode * 397) ^ Normal.GetHashCode();\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return \"{{Position:\" + this.Position + \" Color:\" + this.Color + \" Normal:\" + this.Normal + \"}}\";\n        }\n\n        public static bool operator ==(VertexPositionColorNormal left, VertexPositionColorNormal right)\n        {\n            return ((left.Position == right.Position) && (left.Color == right.Color) && (left.Normal == right.Normal));\n        }\n\n        public static bool operator !=(VertexPositionColorNormal left, VertexPositionColorNormal right)\n        {\n            return !(left == right);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj == null)\n                return false;\n\n            if (obj.GetType() != base.GetType())\n                return false;\n\n            return (this == ((VertexPositionColorNormal)obj));\n        }\n\n        static VertexPositionColorNormal()\n        {\n            var elements = new VertexElement[]\n            {\n                new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),\n                new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0),\n                new VertexElement(16, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0)\n            };\n            VertexDeclaration = new VertexDeclaration(elements);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionColorNormalTexture.cs",
    "content": "﻿using System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [StructLayout(LayoutKind.Sequential, Pack = 1)]\n    public struct VertexPositionColorNormalTexture : IVertexType\n    {\n        public Vector3 Position;\n        public Color Color;\n        public Vector3 Normal;\n        public Vector2 TextureCoordinate;\n        public static readonly VertexDeclaration VertexDeclaration;\n\n        public VertexPositionColorNormalTexture(Vector3 position, Color color, Vector3 normal, Vector2 textureCoordinate)\n        {\n            Position = position;\n            Color = color;\n            Normal = normal;\n            TextureCoordinate = textureCoordinate;\n        }\n\n        VertexDeclaration IVertexType.VertexDeclaration\n        {\n            get\n            {\n                return VertexDeclaration;\n            }\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int hashCode = Position.GetHashCode();\n                hashCode = (hashCode * 397) ^ Color.GetHashCode();\n                hashCode = (hashCode * 397) ^ Normal.GetHashCode();\n                hashCode = (hashCode * 397) ^ TextureCoordinate.GetHashCode();\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return \"{{Position:\" + this.Position + \" Color:\" + this.Color + \" Normal:\" + this.Normal + \" TextureCoordinate:\" + this.TextureCoordinate + \"}}\";\n        }\n\n        public static bool operator ==(VertexPositionColorNormalTexture left, VertexPositionColorNormalTexture right)\n        {\n            return ((left.Position == right.Position) && (left.Color == right.Color) && (left.Normal == right.Normal) && (left.TextureCoordinate == right.TextureCoordinate));\n        }\n\n        public static bool operator !=(VertexPositionColorNormalTexture left, VertexPositionColorNormalTexture right)\n        {\n            return !(left == right);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj == null)\n                return false;\n\n            if (obj.GetType() != base.GetType())\n                return false;\n\n            return (this == ((VertexPositionColorNormalTexture)obj));\n        }\n\n        static VertexPositionColorNormalTexture()\n        {\n            var elements = new VertexElement[]\n            {\n                new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),\n                new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0),\n                new VertexElement(16, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0),\n                new VertexElement(28, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0)\n            };\n            VertexDeclaration = new VertexDeclaration(elements);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionColorTexture.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [StructLayout(LayoutKind.Sequential, Pack = 1)]\n    public struct VertexPositionColorTexture : IVertexType\n    {\n        public Vector3 Position;\n        public Color Color;\n        public Vector2 TextureCoordinate;\n        public static readonly VertexDeclaration VertexDeclaration;\n\n        public VertexPositionColorTexture(Vector3 position, Color color, Vector2 textureCoordinate)\n        {\n            Position = position;\n            Color = color;\n            TextureCoordinate = textureCoordinate;\n        }\n        \n        VertexDeclaration IVertexType.VertexDeclaration\n        {\n            get\n            {\n                return VertexDeclaration;\n            }\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int hashCode = Position.GetHashCode();\n                hashCode = (hashCode * 397) ^ Color.GetHashCode();\n                hashCode = (hashCode * 397) ^ TextureCoordinate.GetHashCode();\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return \"{{Position:\" + this.Position + \" Color:\" + this.Color + \" TextureCoordinate:\" + this.TextureCoordinate + \"}}\";\n        }\n\n        public static bool operator ==(VertexPositionColorTexture left, VertexPositionColorTexture right)\n        {\n            return ((left.Position == right.Position) && (left.Color == right.Color) && (left.TextureCoordinate == right.TextureCoordinate));\n        }\n\n        public static bool operator !=(VertexPositionColorTexture left, VertexPositionColorTexture right)\n        {\n            return !(left == right);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj == null)\n                return false;\n\n            if (obj.GetType() != base.GetType())\n                return false;\n\n            return (this == ((VertexPositionColorTexture)obj));\n        }\n\n        static VertexPositionColorTexture()\n        {\n            var elements = new VertexElement[] \n            { \n                new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), \n                new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0), \n                new VertexElement(16, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0) \n            };\n            VertexDeclaration = new VertexDeclaration(elements);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionNormalTexture.cs",
    "content": "﻿using System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [StructLayout(LayoutKind.Sequential, Pack = 1)]\n    public struct VertexPositionNormalTexture : IVertexType\n    {\n        public Vector3 Position;\n        public Vector3 Normal;\n        public Vector2 TextureCoordinate;\n        public static readonly VertexDeclaration VertexDeclaration;\n        public VertexPositionNormalTexture(Vector3 position, Vector3 normal, Vector2 textureCoordinate)\n        {\n            this.Position = position;\n            this.Normal = normal;\n            this.TextureCoordinate = textureCoordinate;\n        }\n\n        VertexDeclaration IVertexType.VertexDeclaration\n        {\n            get\n            {\n                return VertexDeclaration;\n            }\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int hashCode = Position.GetHashCode();\n                hashCode = (hashCode * 397) ^ Normal.GetHashCode();\n                hashCode = (hashCode * 397) ^ TextureCoordinate.GetHashCode();\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return \"{{Position:\" + this.Position + \" Normal:\" + this.Normal + \" TextureCoordinate:\" + this.TextureCoordinate + \"}}\";\n        }\n\n        public static bool operator ==(VertexPositionNormalTexture left, VertexPositionNormalTexture right)\n        {\n            return ((left.Position == right.Position) && (left.Normal == right.Normal) && (left.TextureCoordinate == right.TextureCoordinate));\n        }\n\n        public static bool operator !=(VertexPositionNormalTexture left, VertexPositionNormalTexture right)\n        {\n            return !(left == right);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj == null)\n            {\n                return false;\n            }\n            if (obj.GetType() != base.GetType())\n            {\n                return false;\n            }\n            return (this == ((VertexPositionNormalTexture)obj));\n        }\n\n        static VertexPositionNormalTexture()\n        {\n            VertexElement[] elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0), new VertexElement(0x18, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0) };\n            VertexDeclaration declaration = new VertexDeclaration(elements);\n            VertexDeclaration = declaration;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionTexture.cs",
    "content": "﻿using System.Runtime.InteropServices;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    [StructLayout(LayoutKind.Sequential, Pack=1)]\n    public struct VertexPositionTexture : IVertexType\n    {\n        public Vector3 Position;\n        public Vector2 TextureCoordinate;\n        public static readonly VertexDeclaration VertexDeclaration;\n        public VertexPositionTexture(Vector3 position, Vector2 textureCoordinate)\n        {\n            this.Position = position;\n            this.TextureCoordinate = textureCoordinate;\n        }\n\n        VertexDeclaration IVertexType.VertexDeclaration\n        {\n            get\n            {\n                return VertexDeclaration;\n            }\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (Position.GetHashCode() * 397) ^ TextureCoordinate.GetHashCode();\n            }\n        }\n\n        public override string ToString()\n        {\n            return \"{{Position:\" + this.Position + \" TextureCoordinate:\" + this.TextureCoordinate + \"}}\";\n        }\n\n        public static bool operator ==(VertexPositionTexture left, VertexPositionTexture right)\n        {\n            return ((left.Position == right.Position) && (left.TextureCoordinate == right.TextureCoordinate));\n        }\n\n        public static bool operator !=(VertexPositionTexture left, VertexPositionTexture right)\n        {\n            return !(left == right);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj == null)\n            {\n                return false;\n            }\n            if (obj.GetType() != base.GetType())\n            {\n                return false;\n            }\n            return (this == ((VertexPositionTexture)obj));\n        }\n\n        static VertexPositionTexture()\n        {\n            VertexElement[] elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0) };\n            VertexDeclaration declaration = new VertexDeclaration(elements);\n            VertexDeclaration = declaration;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Graphics/Viewport.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Xna.Framework.Graphics\n{\n    /// <summary>\n    /// Describes the view bounds for render-target surface.\n    /// </summary>\n    [DataContract]\n    public struct Viewport\n    {\n        private int x;\n        private int y;\n        private int w;\n        private int h;\n        private float minDepth;\n        private float maxDepth;\n\n        #region Properties\n\n        /// <summary>\n        /// The height of the bounds in pixels.\n        /// </summary>\n        [DataMember]\n        public int Height\n        {\n            get { return this.h; }\n            set { h = value; }\n        }\n\n        /// <summary>\n        /// The upper limit of depth of this viewport.\n        /// </summary>\n        [DataMember]\n        public float MaxDepth\n        {\n            get { return this.maxDepth; }\n            set { maxDepth = value; }\n        }\n\n        /// <summary>\n        /// The lower limit of depth of this viewport.\n        /// </summary>\n        [DataMember]\n        public float MinDepth\n        {\n            get { return this.minDepth; }\n            set { minDepth = value; }\n        }\n\n        /// <summary>\n        /// The width of the bounds in pixels.\n        /// </summary>\n        [DataMember]\n        public int Width\n        {\n            get { return this.w; }\n            set { w = value; }\n        }\n\n        /// <summary>\n        /// The y coordinate of the beginning of this viewport.\n        /// </summary>\n        [DataMember]\n        public int Y\n        {\n            get { return this.y; }\n            set { y = value; }\n        }\n\n        /// <summary>\n        /// The x coordinate of the beginning of this viewport.\n        /// </summary>\n        [DataMember]\n        public int X \n        {\n            get{ return x;}\n            set{ x = value;}\n        }\n\n        #endregion\n        \n        /// <summary>\n        /// Gets the aspect ratio of this <see cref=\"Viewport\"/>, which is width / height. \n        /// </summary>\n        public float AspectRatio \n        {\n            get\n            {\n                if ((h != 0) && (w != 0))\n                {\n                    return ((float)w / (float)h);\n                }\n                return 0f;\n            }\n        }\n        \n        /// <summary>\n        /// Gets or sets a boundary of this <see cref=\"Viewport\"/>.\n        /// </summary>\n        public Rectangle Bounds \n        {\n            get { return new Rectangle(x, y, w, h); }\n            set\n            {\n                x = value.X;\n                y = value.Y;\n                w = value.Width;\n                h = value.Height;\n            }\n        }\n\n        /// <summary>\n        /// Returns the subset of the viewport that is guaranteed to be visible on a lower quality display.\n        /// </summary>\n        public Rectangle TitleSafeArea \n        {\n            get { return GraphicsDevice.GetTitleSafeArea(x, y, w, h); }\n        }\n\n\n        /// <summary>\n        /// Constructs a viewport from the given values.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate of the upper-left corner of the view bounds in pixels.</param>\n        /// <param name=\"y\">The y coordinate of the upper-left corner of the view bounds in pixels.</param>\n        /// <param name=\"width\">The width of the view bounds in pixels.</param>\n        /// <param name=\"height\">The height of the view bounds in pixels.</param>\n        /// <param name=\"minDepth\">The lower limit of depth.</param>\n        /// <param name=\"maxDepth\">The upper limit of depth.</param>\n        public Viewport(int x, int y, int width, int height,float minDepth,float maxDepth)\n        {\n            this.x = x;\n            this.y = y;\n            this.w = width;\n            this.h = height;\n            this.minDepth = minDepth;\n            this.maxDepth = maxDepth;\n        }\n\n        /// <summary>\n        /// Constructs a viewport from the given values. The <see cref=\"MinDepth\"/> will be 0.0 and <see cref=\"MaxDepth\"/> will be 1.0.\n        /// </summary>\n        /// <param name=\"x\">The x coordinate of the upper-left corner of the view bounds in pixels.</param>\n        /// <param name=\"y\">The y coordinate of the upper-left corner of the view bounds in pixels.</param>\n        /// <param name=\"width\">The width of the view bounds in pixels.</param>\n        /// <param name=\"height\">The height of the view bounds in pixels.</param>\n        public Viewport(int x, int y, int width, int height) : this(x, y, width, height, 0.0f,  1.0f)\n        {\n        }\n\n        /// <summary>\n        /// Creates a new instance of <see cref=\"Viewport\"/> struct.\n        /// </summary>\n        /// <param name=\"bounds\">A <see cref=\"Rectangle\"/> that defines the location and size of the <see cref=\"Viewport\"/> in a render target.</param>\n        public Viewport(Rectangle bounds) : this(bounds.X, bounds.Y, bounds.Width, bounds.Height)\n        {\n        }\n\n        /// <summary>\n        /// Projects a <see cref=\"Vector3\"/> from model space into screen space.\n        /// The source point is transformed from model space to world space by the world matrix,\n        /// then from world space to view space by the view matrix, and\n        /// finally from view space to screen space by the projection matrix.\n        /// </summary>\n        /// <param name=\"source\">The <see cref=\"Vector3\"/> to project.</param>\n        /// <param name=\"projection\">The projection <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"view\">The view <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"world\">The world <see cref=\"Matrix\"/>.</param>\n        /// <returns></returns>\n        public Vector3 Project(Vector3 source, Matrix projection, Matrix view, Matrix world)\n        {\n            Matrix.Multiply(ref world, ref view, out view);\n            Matrix.Multiply(ref view, ref projection, out projection);\n            float w = (source.X * projection.M14) + (source.Y * projection.M24) + (source.Z * projection.M34) + projection.M44;\n            Vector3.Transform(ref source, ref projection, out source);\n\n            float invW = 1 / w;\n            source.X = source.X * invW;\n            source.Y = source.Y * invW;\n            source.Z = source.Z * invW;\n\n            source.X = (((source.X + 1f) * 0.5f) * this.w) + this.x;\n            source.Y = (((-source.Y + 1f) * 0.5f) * this.h) + this.y;\n            source.Z = (source.Z * (this.maxDepth - this.minDepth)) + this.minDepth;\n            return source;\n        }\n\n        /// <summary>\n        /// Unprojects a <see cref=\"Vector3\"/> from screen space into model space.\n        /// The source point is transformed from screen space to view space by the inverse of the projection matrix,\n        /// then from view space to world space by the inverse of the view matrix, and\n        /// finally from world space to model space by the inverse of the world matrix.\n        /// Note source.Z must be less than or equal to MaxDepth.\n        /// </summary>\n        /// <param name=\"source\">The <see cref=\"Vector3\"/> to unproject.</param>\n        /// <param name=\"projection\">The projection <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"view\">The view <see cref=\"Matrix\"/>.</param>\n        /// <param name=\"world\">The world <see cref=\"Matrix\"/>.</param>\n        /// <returns></returns>\n        public Vector3 Unproject(Vector3 source, Matrix projection, Matrix view, Matrix world)\n        {\n            Matrix.Multiply(ref world, ref view, out view);\n            Matrix.Multiply(ref view, ref projection, out projection);\n            Matrix.Invert(ref projection, out projection);\n            source.X = (((source.X - this.x) / ((float) this.w)) * 2f) - 1f;\n            source.Y = -((((source.Y - this.y) / ((float) this.h)) * 2f) - 1f);\n            source.Z = (source.Z - this.minDepth) / (this.maxDepth - this.minDepth);\n            float w = (source.X * projection.M14) + (source.Y * projection.M24) + (source.Z * projection.M34) + projection.M44;\n            Vector3.Transform(ref source, ref projection, out source);\n            \n            float invW = 1 / w;\n            source.X = source.X * invW;\n            source.Y = source.Y * invW;\n            source.Z = source.Z * invW;\n\n            return source;\n        }\t\t\n\n        /// <summary>\n        /// Returns a <see cref=\"String\"/> representation of this <see cref=\"Viewport\"/> in the format:\n        /// {X:[<see cref=\"X\"/>] Y:[<see cref=\"Y\"/>] Width:[<see cref=\"Width\"/>] Height:[<see cref=\"Height\"/>] MinDepth:[<see cref=\"MinDepth\"/>] MaxDepth:[<see cref=\"MaxDepth\"/>]}\n        /// </summary>\n        /// <returns>A <see cref=\"String\"/> representation of this <see cref=\"Viewport\"/>.</returns>\n        public override string ToString()\n        {\n            return \"{X:\" + x + \", Y:\" + y + \", Width:\" + w + \", Height:\" + h + \", MinDepth:\" + minDepth + \", MaxDepth:\" + maxDepth + \"}\";\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/GraphicsDeviceInformation.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Framework.Graphics;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// The settings used in creation of the graphics device.\n    /// See <see cref=\"GraphicsDeviceManager.PreparingDeviceSettings\"/>.\n    /// </summary>\n    public class GraphicsDeviceInformation\n    {\t\n        /// <summary>\n        /// The graphics adapter on which the graphics device will be created.\n        /// </summary>\n        /// <remarks>\n        /// This is only valid on desktop systems where multiple graphics \n        /// adapters are possible.  Defaults to <see cref=\"GraphicsAdapter.DefaultAdapter\"/>.\n        /// </remarks>\n        public GraphicsAdapter Adapter { get; set; }\n        \n        /// <summary>\n        /// The requested graphics device feature set. \n        /// </summary>\n        public GraphicsProfile GraphicsProfile { get; set; }\n        \n        /// <summary>\n        /// The settings that define how graphics will be presented to the display.\n        /// </summary>\n        public PresentationParameters PresentationParameters { get; set; }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/IGraphicsDeviceManager.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// Used by the platform code to control the graphics device.\n    /// </summary>\n    public interface IGraphicsDeviceManager\n    {\n        /// <summary>\n        /// Called to create the graphics device.\n        /// </summary>\n        /// <remarks>Does nothing if the graphics device is already created.</remarks>\n        void CreateDevice();\n\n        /// <summary>\n        /// Called at the start of rendering a frame.\n        /// </summary>\n        /// <returns>Returns true if the frame should be rendered.</returns>\n        bool BeginDraw();\n\n        /// <summary>\n        /// Called after rendering to present the frame to the screen.\n        /// </summary>\n        void EndDraw();\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/ILLink.Descriptors.xml",
    "content": "<linker>\n  <assembly fullname=\"Xna.Framework.Graphics\" >\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.AlphaTestEffectReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.BasicEffectReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.ColorReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.DualTextureEffectReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.EffectMaterialReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.EffectReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.EnvironmentMapEffectReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.IndexBufferReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.ModelReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.SkinnedEffectReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.SpriteFontReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.Texture2DReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.Texture3DReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.TextureCubeReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.TextureReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.VertexBufferReader\" preserve=\"all\" />\n\t  <type fullname=\"Microsoft.Xna.Framework.Content.VertexDeclarationReader\" preserve=\"all\" />\n  </assembly>\n</linker>\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/PreparingDeviceSettingsEventArgs.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework\n{\n    /// <summary>\n    /// The arguments to the <see cref=\"GraphicsDeviceManager.PreparingDeviceSettings\"/> event.\n    /// </summary>\n    public class PreparingDeviceSettingsEventArgs : EventArgs\n    {\n        GraphicsDeviceInformation _graphicsDeviceInformation;\n\n        /// <summary>\n        /// The default settings that will be used in device creation.\n        /// </summary>\n        public GraphicsDeviceInformation GraphicsDeviceInformation { get { return _graphicsDeviceInformation; } }\n\n        /// <summary>\n        /// Create a new instance of the event.\n        /// </summary>\n        /// <param name=\"graphicsDeviceInformation\">The default settings to be used in device creation.</param>\n        public PreparingDeviceSettingsEventArgs(GraphicsDeviceInformation graphicsDeviceInformation)\n        {\n            this._graphicsDeviceInformation = graphicsDeviceInformation;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Properties/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n[assembly:InternalsVisibleTo(\"Kni.Tests\")]\n\n"
  },
  {
    "path": "src/Xna.Framework.Graphics/Xna.Framework.Graphics.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Graphics\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Graphics</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Graphics</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Graphics framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Graphics</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Content\\AlphaTestEffectReader.cs\" />\n    <Compile Include=\"Content\\BasicEffectReader.cs\" />\n    <Compile Include=\"Content\\ColorReader.cs\" />\n    <Compile Include=\"Content\\DualTextureEffectReader.cs\" />\n    <Compile Include=\"Content\\EffectMaterialReader.cs\" />\n    <Compile Include=\"Content\\EffectReader.cs\" />\n    <Compile Include=\"Content\\EnvironmentMapEffectReader.cs\" />\n    <Compile Include=\"Content\\IndexBufferReader.cs\" />\n    <Compile Include=\"Content\\ModelReader.cs\" />\n    <Compile Include=\"Content\\SkinnedEffectReader.cs\" />\n    <Compile Include=\"Content\\SpriteFontReader.cs\" />\n    <Compile Include=\"Content\\Texture2DReader.cs\" />\n    <Compile Include=\"Content\\Texture3DReader.cs\" />\n    <Compile Include=\"Content\\TextureCubeReader.cs\" />\n    <Compile Include=\"Content\\TextureReader.cs\" />\n    <Compile Include=\"Content\\VertexBufferReader.cs\" />\n    <Compile Include=\"Content\\VertexDeclarationReader.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\PackedVector\\Alpha8.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Bgr565.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Bgra4444.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Bgra5551.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Byte4.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\HalfSingle.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\HalfTypeHelper.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\HalfVector2.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\HalfVector4.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\IPackedVector.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\NormalizedByte2.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\NormalizedByte4.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\NormalizedShort2.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\NormalizedShort4.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Rg32.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Rgba1010102.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Rgba64.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Short2.cs\" />\n    <Compile Include=\"Graphics\\PackedVector\\Short4.cs\" />\n    <Compile Include=\"Color.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Graphics\\Effect\\AlphaTestEffect.cs\" />\n    <Compile Include=\"Graphics\\Effect\\BasicEffect.cs\" />\n    <Compile Include=\"Graphics\\Effect\\DualTextureEffect.cs\" />\n    <Compile Include=\"Graphics\\Effect\\Effect.cs\" />\n    <Compile Include=\"Graphics\\Effect\\MGFXReader10.cs\" />\n    <Compile Include=\"Graphics\\Effect\\KNIFXReader11.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectAnnotation.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectAnnotationCollection.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectHelpers.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectMaterial.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectParameter.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectParameterClass.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectParameterCollection.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectParameterType.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectPass.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectPassCollection.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectTechnique.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EffectTechniqueCollection.cs\" />\n    <Compile Include=\"Graphics\\Effect\\EnvironmentMapEffect.cs\" />\n    <Compile Include=\"Graphics\\Effect\\IEffectBones.cs\" />\n    <Compile Include=\"Graphics\\Effect\\IEffectFog.cs\" />\n    <Compile Include=\"Graphics\\Effect\\IEffectLights.cs\" />\n    <Compile Include=\"Graphics\\Effect\\IEffectMatrices.cs\" />\n    <Compile Include=\"Graphics\\Effect\\KNIFXHeader.cs\" />\n    <Compile Include=\"Graphics\\Effect\\MGFXHeader.cs\" />\n    <Compile Include=\"Graphics\\Effect\\SkinnedEffect.cs\" />\n    <Compile Include=\"Graphics\\Effect\\SpriteEffect.cs\" />\n    <Compile Include=\"Graphics\\Shader\\ConstantBuffer.cs\" />\n    <Compile Include=\"Graphics\\Shader\\ConstantBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\Shader\\ConstantBufferCollectionStrategy.cs\" />\n    <Compile Include=\"Graphics\\Shader\\ConstantBufferStrategy.cs\" />\n    <Compile Include=\"Graphics\\Shader\\SamplerInfo.cs\" />\n    <Compile Include=\"Graphics\\Shader\\Shader.cs\" />\n    <Compile Include=\"Graphics\\Shader\\VertexShader.cs\" />\n    <Compile Include=\"Graphics\\Shader\\PixelShader.cs\" />\n    <Compile Include=\"Graphics\\Shader\\ShaderStrategy.cs\" />\n    <Compile Include=\"Graphics\\Shader\\ShaderProfileType.cs\" />\n    <Compile Include=\"Graphics\\Shader\\ShaderStage.cs\" />\n    <Compile Include=\"Graphics\\Shader\\ShaderVersion.cs\" />\n    <Compile Include=\"Graphics\\Shader\\VertexAttribute.cs\" />\n    <Compile Include=\"Graphics\\States\\Blend.cs\" />\n    <Compile Include=\"Graphics\\States\\BlendFunction.cs\" />\n    <Compile Include=\"Graphics\\States\\BlendState.cs\" />\n    <Compile Include=\"Graphics\\States\\BlendStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ReadonlyBlendStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ResourceBlendStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\IBlendStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\CompareFunction.cs\" />\n    <Compile Include=\"Graphics\\States\\CullMode.cs\" />\n    <Compile Include=\"Graphics\\States\\DepthFormat.cs\" />\n    <Compile Include=\"Graphics\\States\\DepthStencilState.cs\" />\n    <Compile Include=\"Graphics\\States\\DepthStencilStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ReadonlyDepthStencilStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ResourceDepthStencilStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\IDepthStencilStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\FillMode.cs\" />\n    <Compile Include=\"Graphics\\States\\RasterizerState.cs\" />\n    <Compile Include=\"Graphics\\States\\RasterizerStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ReadonlyRasterizerStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ResourceRasterizerStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\IRasterizerStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\SamplerState.cs\" />\n    <Compile Include=\"Graphics\\States\\SamplerStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ReadonlySamplerStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ResourceSamplerStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\ISamplerStateStrategy.cs\" />\n    <Compile Include=\"Graphics\\States\\StencilOperation.cs\" />\n    <Compile Include=\"Graphics\\States\\TargetBlendState.cs\" />\n    <Compile Include=\"Graphics\\States\\TextureAddressMode.cs\" />\n    <Compile Include=\"Graphics\\States\\TextureFilter.cs\" />\n    <Compile Include=\"Graphics\\States\\TextureFilterMode.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\BufferUsage.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\DynamicIndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\IDynamicIndexBufferStrategy.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\DynamicVertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\IDynamicVertexBufferStrategy.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\IndexBuffer.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\IndexBufferStrategy.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\IndexElementSize.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\IPlatformVertexDeclaration.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\IVertexType.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\PrimitiveType.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexBuffer.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexBufferStrategy.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexBufferBinding.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexBufferCollection.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexDeclaration.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexDeclarationCache.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexElement.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexElementFormat.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexElementUsage.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexPosition.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexPositionColor.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexPositionColorNormal.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexPositionColorNormalTexture.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexPositionColorTexture.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexPositionNormalTexture.cs\" />\n    <Compile Include=\"Graphics\\Vertices\\VertexPositionTexture.cs\" />\n    <Compile Include=\"Graphics\\ClearOptions.cs\" />\n    <Compile Include=\"Graphics\\ColorWriteChannels.cs\" />\n    <Compile Include=\"Graphics\\CubeMapFace.cs\" />\n    <Compile Include=\"Graphics\\DeviceLostException.cs\" />\n    <Compile Include=\"Graphics\\DeviceNotResetException.cs\" />\n    <Compile Include=\"Graphics\\DirectionalLight.cs\" />\n    <Compile Include=\"Graphics\\DisplayMode.cs\" />\n    <Compile Include=\"Graphics\\DisplayModeCollection.cs\" />\n    <Compile Include=\"Graphics\\GraphicsAdapter.cs\" />\n    <Compile Include=\"Graphics\\GraphicsAdaptersProviderStrategy.cs\" />\n    <Compile Include=\"Graphics\\GraphicsAdapterStrategy.cs\" />\n    <Compile Include=\"Graphics\\GraphicsBackend.cs\" />\n    <Compile Include=\"Graphics\\GraphicsCapabilities.cs\" />\n    <Compile Include=\"Graphics\\GraphicsContext.cs\" />\n    <Compile Include=\"Graphics\\GraphicsContextStrategy.cs\" />\n    <Compile Include=\"Graphics\\GraphicsDebug.cs\" />\n    <Compile Include=\"Graphics\\GraphicsDebugStrategy.cs\" />\n    <Compile Include=\"Graphics\\GraphicsDebugMessage.cs\" />\n    <Compile Include=\"Graphics\\GraphicsDevice.cs\" />\n    <Compile Include=\"Graphics\\GraphicsDeviceStrategy.cs\" />\n    <Compile Include=\"Graphics\\GraphicsDeviceStatus.cs\" />\n    <Compile Include=\"Graphics\\GraphicsFactory.cs\" />\n    <Compile Include=\"Graphics\\GraphicsMetrics.cs\" />\n    <Compile Include=\"Graphics\\GraphicsProfile.cs\" />\n    <Compile Include=\"Graphics\\GraphicsResource.cs\" />\n    <Compile Include=\"Graphics\\GraphicsResourceStrategy.cs\" />\n    <Compile Include=\"Graphics\\IGraphicsResourceStrategy.cs\" />\n    <Compile Include=\"Graphics\\IGraphicsDeviceService.cs\" />\n    <Compile Include=\"Graphics\\IRenderTarget.cs\" />\n    <Compile Include=\"Graphics\\IRenderTargetStrategy.cs\" />\n    <Compile Include=\"Graphics\\IRenderTarget2DStrategy.cs\" />\n    <Compile Include=\"Graphics\\IRenderTarget3DStrategy.cs\" />\n    <Compile Include=\"Graphics\\IRenderTargetCubeStrategy.cs\" />\n    <Compile Include=\"Graphics\\ITexture2DStrategy.cs\" />\n    <Compile Include=\"Graphics\\ITexture3DStrategy.cs\" />\n    <Compile Include=\"Graphics\\ITextureCubeStrategy.cs\" />\n    <Compile Include=\"Graphics\\ITextureStrategy.cs\" />\n    <Compile Include=\"Graphics\\Model.cs\" />\n    <Compile Include=\"Graphics\\ModelBone.cs\" />\n    <Compile Include=\"Graphics\\ModelBoneCollection.cs\" />\n    <Compile Include=\"Graphics\\ModelEffectCollection.cs\" />\n    <Compile Include=\"Graphics\\ModelMesh.cs\" />\n    <Compile Include=\"Graphics\\ModelMeshCollection.cs\" />\n    <Compile Include=\"Graphics\\ModelMeshPart.cs\" />\n    <Compile Include=\"Graphics\\ModelMeshPartCollection.cs\" />\n    <Compile Include=\"Graphics\\NoSuitableGraphicsDeviceException.cs\" />\n    <Compile Include=\"Graphics\\OcclusionQuery.cs\" />\n    <Compile Include=\"Graphics\\OcclusionQueryStrategy.cs\" />\n    <Compile Include=\"Graphics\\PresentationEventArgs.cs\" />\n    <Compile Include=\"Graphics\\PresentationParameters.cs\" />\n    <Compile Include=\"Graphics\\PresentInterval.cs\" />\n    <Compile Include=\"Graphics\\RenderTarget2D.cs\" />\n    <Compile Include=\"Graphics\\RenderTarget3D.cs\" />\n    <Compile Include=\"Graphics\\RenderTargetBinding.cs\" />\n    <Compile Include=\"Graphics\\RenderTargetCube.cs\" />\n    <Compile Include=\"Graphics\\RenderTargetUsage.cs\" />\n    <Compile Include=\"Graphics\\ResourceCreatedEventArgs.cs\" />\n    <Compile Include=\"Graphics\\ResourceDestroyedEventArgs.cs\" />\n    <Compile Include=\"Graphics\\SamplerStateCollection.cs\" />\n    <Compile Include=\"Graphics\\SamplerStateCollectionStrategy.cs\" />\n    <Compile Include=\"Graphics\\SetDataOptions.cs\" />\n    <Compile Include=\"Graphics\\SpriteBatcherStrategy.cs\" />\n    <Compile Include=\"Graphics\\SpriteBatch.cs\" />\n    <Compile Include=\"Graphics\\SpriteBatchItem.cs\" />\n    <Compile Include=\"Graphics\\SpriteEffects.cs\" />\n    <Compile Include=\"Graphics\\SpriteFont.cs\" />\n    <Compile Include=\"Graphics\\SpriteSortMode.cs\" />\n    <Compile Include=\"Graphics\\SurfaceFormat.cs\" />\n    <Compile Include=\"Graphics\\Texture.cs\" />\n    <Compile Include=\"Graphics\\Texture2D.cs\" />\n    <Compile Include=\"Graphics\\Texture3D.cs\" />\n    <Compile Include=\"Graphics\\TextureCollection.cs\" />\n    <Compile Include=\"Graphics\\TextureCollectionStrategy.cs\" />\n    <Compile Include=\"Graphics\\TextureCube.cs\" />\n    <Compile Include=\"Graphics\\Viewport.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"DisplayOrientation.cs\" />\n    <Compile Include=\"GraphicsDeviceInformation.cs\" />\n    <Compile Include=\"IGraphicsDeviceManager.cs\" />\n    <Compile Include=\"PreparingDeviceSettingsEventArgs.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Graphics\\Utilities\\ContentReaderExtensions.cs\" />\n    <Compile Include=\"Graphics\\Utilities\\DxtDecoder.cs\" />\n    <Compile Include=\"Graphics\\Utilities\\GraphicsExtensions.cs\" />\n    <Compile Include=\"Graphics\\Utilities\\HashHelpers.cs\" />\n    <Compile Include=\"Graphics\\Utilities\\ReflectionHelpers.cs\" />\n    <Compile Include=\"Graphics\\Utilities\\TextureHelpers.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Input/ILLink.Descriptors.xml",
    "content": "<linker>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/ButtonState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Defines a button state for buttons of mouse, gamepad or joystick.\n    /// </summary>\n    public enum ButtonState\n    {\n        /// <summary>\n        /// The button is released.\n        /// </summary>\n        Released = 0,\n\n        /// <summary>\n        /// The button is pressed.\n        /// </summary>\n        Pressed = 1,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Buttons.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Defines the buttons on gamepad.\n    /// </summary>\n    [Flags]\n    public enum Buttons\n    {\n        /// <summary>\n        /// Directional pad up.\n        /// </summary>\n        DPadUp = 1 << 0,\n\n        /// <summary>\n        /// Directional pad down.\n        /// </summary>\n        DPadDown = 1 << 1,\n\n        /// <summary>\n        /// Directional pad left.\n        /// </summary>\n        DPadLeft = 1 << 2,\n\n        /// <summary>\n        /// Directional pad right.\n        /// </summary>\n        DPadRight = 1 << 3,\n\n        /// <summary>\n        /// START button.\n        /// </summary>\n        Start = 1 << 4,\n      \n        /// <summary>\n        /// BACK button.\n        /// </summary>\n        Back = 1 << 5,\n\n        /// <summary>\n        /// Left stick button (pressing the left stick).\n        /// </summary>\n        LeftStick = 1 << 6,\n\n        /// <summary>\n        /// Right stick button (pressing the right stick).\n        /// </summary>\n        RightStick = 1 << 7,\n\n        /// <summary>\n        /// Left bumper (shoulder) button.\n        /// </summary>\n        LeftShoulder = 1 << 8,\n\n        /// <summary>\n        /// Right bumper (shoulder) button.\n        /// </summary>\n        RightShoulder = 1 << 9,\n\n        /// <summary>\n        /// Big button.\n        /// </summary>    \n        BigButton = 1 << 11,\n       \n        /// <summary>\n        /// A button.\n        /// </summary>\n        A = 1 << 12,\n\n        /// <summary>\n        /// B button.\n        /// </summary>\n        B = 1 << 13,\n\n        /// <summary>\n        /// X button.\n        /// </summary>\n        X = 1 << 14,\n\n        /// <summary>\n        /// Y button.\n        /// </summary>\n        Y = 1 << 15,    \n\n        /// <summary>\n        /// Left grip.\n        /// </summary>\n        LeftGrip = 1 << 19,\n\n        /// <summary>\n        /// Right grip.\n        /// </summary>\n        RightGrip = 1 << 20,\n\n        /// <summary>\n        /// Left stick is towards the left.\n        /// </summary>\n        LeftThumbstickLeft = 1 << 21,\n\n        /// <summary>\n        /// Right trigger.\n        /// </summary>\n        RightTrigger = 1 << 22,\n\n        /// <summary>\n        /// Left trigger.\n        /// </summary>\n        LeftTrigger = 1 << 23,\n\n        /// <summary>\n        /// Right stick is towards up.\n        /// </summary>   \n        RightThumbstickUp = 1 << 24,\n\n        /// <summary>\n        /// Right stick is towards down.\n        /// </summary>   \n        RightThumbstickDown = 1 << 25,\n\n        /// <summary>\n        /// Right stick is towards the right.\n        /// </summary>\n        RightThumbstickRight = 1 << 26,\n\n        /// <summary>\n        /// Right stick is towards the left.\n        /// </summary>\n        RightThumbstickLeft = 1 << 27,\n\n        /// <summary>\n        /// Left stick is towards up.\n        /// </summary>  \n        LeftThumbstickUp = 1 << 28,\n\n        /// <summary>\n        /// Left stick is towards down.\n        /// </summary>  \n        LeftThumbstickDown = 1 << 29,\n\n        /// <summary>\n        /// Left stick is towards the right.\n        /// </summary>\n        LeftThumbstickRight = 1 << 30\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePad.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public interface IGamePad\n    {\n        int MaximumGamePadCount { get; }\n\n        GamePadCapabilities GetCapabilities(PlayerIndex playerIndex);\n        GamePadCapabilities GetCapabilities(int index);\n        GamePadState GetState(PlayerIndex playerIndex);\n        GamePadState GetState(int index);\n        GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode);\n        GamePadState GetState(int index, GamePadDeadZone deadZoneMode);\n        GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode);\n        GamePadState GetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode);\n        bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor);\n        bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger);\n        bool SetVibration(int index, float leftMotor, float rightMotor);\n        bool SetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger);\n    }\n\n    public interface IPlatformGamePad\n    {\n        T GetStrategy<T>() where T : GamePadStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary> \n    /// Supports querying the game controllers and setting the vibration motors.\n    /// </summary>\n    public sealed class GamePad : IGamePad\n        , IPlatformGamePad\n    {\n        private static GamePad _current;\n\n        /// <summary>\n        /// Returns the current GamePad instance.\n        /// </summary> \n        public static GamePad Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(GamePad))\n                {\n                    if (_current == null)\n                        _current = new GamePad();\n\n                    return _current;\n                }\n            }\n        }\n\n        /// <summary>\n        /// The maximum number of game pads supported on this system.\n        /// </summary>\n        public static int MaximumGamePadCount\n        {\n            get { return ((IGamePad)GamePad.Current).MaximumGamePadCount; }\n        }\n\n        /// <summary>\n        /// Returns the capabilities of the connected controller.\n        /// </summary>\n        /// <param name=\"playerIndex\">Player index for the controller you want to query.</param>\n        /// <returns>The capabilities of the controller.</returns>\n        public static GamePadCapabilities GetCapabilities(PlayerIndex playerIndex)\n        {\n            return ((IGamePad)GamePad.Current).GetCapabilities(playerIndex);\n        }\n\n        /// <summary>\n        /// Returns the capabilities of the connected controller.\n        /// </summary>\n        /// <param name=\"index\">Index for the controller you want to query.</param>\n        /// <returns>The capabilities of the controller.</returns>\n        public static GamePadCapabilities GetCapabilities(int index)\n        {\n            return ((IGamePad)GamePad.Current).GetCapabilities(index);\n        }\n\n        /// <summary>\n        /// Gets the current state of a game pad controller with an independent axes dead zone.\n        /// </summary>\n        /// <param name=\"playerIndex\">Player index for the controller you want to query.</param>\n        /// <returns>The state of the controller.</returns>\n        public static GamePadState GetState(PlayerIndex playerIndex)\n        {\n            return ((IGamePad)GamePad.Current).GetState(playerIndex);\n        }\n\n        /// <summary>\n        /// Gets the current state of a game pad controller with an independent axes dead zone.\n        /// </summary>\n        /// <param name=\"index\">Index for the controller you want to query.</param>\n        /// <returns>The state of the controller.</returns>\n        public static GamePadState GetState(int index)\n        {\n            return ((IGamePad)GamePad.Current).GetState(index);\n        }\n\n        /// <summary>\n        /// Gets the current state of a game pad controller, using a specified dead zone\n        /// on analog stick positions.\n        /// </summary>\n        /// <param name=\"playerIndex\">Player index for the controller you want to query.</param>\n        /// <param name=\"deadZoneMode\">Enumerated value that specifies what dead zone type to use.</param>\n        /// <returns>The state of the controller.</returns>\n        public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode)\n        {\n            return ((IGamePad)GamePad.Current).GetState(playerIndex, deadZoneMode);\n        }\n\n        /// <summary>\n        /// Gets the current state of a game pad controller, using a specified dead zone\n        /// on analog stick positions.\n        /// </summary>\n        /// <param name=\"index\">Index for the controller you want to query.</param>\n        /// <param name=\"deadZoneMode\">Enumerated value that specifies what dead zone type to use.</param>\n        /// <returns>The state of the controller.</returns>\n        public static GamePadState GetState(int index, GamePadDeadZone deadZoneMode)\n        {           \n            return ((IGamePad)GamePad.Current).GetState(index, deadZoneMode);\n        }\n\n        /// <summary>\n        /// Gets the current state of a game pad controller, using a specified dead zone\n        /// on analog stick positions.\n        /// </summary>\n        /// <param name=\"playerIndex\">Player index for the controller you want to query.</param>\n        /// <param name=\"leftDeadZoneMode\">Enumerated value that specifies what dead zone type to use for the left stick.</param>\n        /// <param name=\"rightDeadZoneMode\">Enumerated value that specifies what dead zone type to use for the right stick.</param>\n        /// <returns>The state of the controller.</returns>\n        public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            return ((IGamePad)GamePad.Current).GetState(playerIndex, leftDeadZoneMode, rightDeadZoneMode);\n        }\n\n        /// <summary>\n        /// Gets the current state of a game pad controller, using a specified dead zone\n        /// on analog stick positions.\n        /// </summary>\n        /// <param name=\"index\">Index for the controller you want to query.</param>\n        /// <param name=\"leftDeadZoneMode\">Enumerated value that specifies what dead zone type to use for the left stick.</param>\n        /// <param name=\"rightDeadZoneMode\">Enumerated value that specifies what dead zone type to use for the right stick.</param>\n        /// <returns>The state of the controller.</returns>\n        public static GamePadState GetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            return ((IGamePad)GamePad.Current).GetState(index, leftDeadZoneMode, rightDeadZoneMode);\n        }\n\n        /// <summary>\n        /// Sets the vibration motor speeds on the controller device if supported.\n        /// </summary>\n        /// <param name=\"playerIndex\">Player index that identifies the controller to set.</param>\n        /// <param name=\"leftMotor\">The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor.</param>\n        /// <param name=\"rightMotor\">The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor.</param>\n        /// <returns>Returns true if the vibration motors were set.</returns>\n        public static bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor)\n        {\n            return ((IGamePad)GamePad.Current).SetVibration(playerIndex, leftMotor, rightMotor);\n        }\n\n        /// <summary>\n        /// Sets the vibration motor speeds on the controller device if supported.\n        /// </summary>\n        /// <param name=\"playerIndex\">Player index that identifies the controller to set.</param>\n        /// <param name=\"leftMotor\">The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor.</param>\n        /// <param name=\"rightMotor\">The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor.</param>\n        /// <param name=\"leftTrigger\">(Xbox One controller only) The speed of the left trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor.</param>\n        /// <param name=\"rightTrigger\">(Xbox One controller only) The speed of the right trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor.</param>\n        /// <returns>Returns true if the vibration motors were set.</returns>\n        public static bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            return ((IGamePad)GamePad.Current).SetVibration(playerIndex, leftMotor, rightMotor, leftTrigger, rightTrigger);\n        }\n\n        /// <summary>\n        /// Sets the vibration motor speeds on the controller device if supported.\n        /// </summary>\n        /// <param name=\"index\">Index for the controller you want to query.</param>\n        /// <param name=\"leftMotor\">The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor.</param>\n        /// <param name=\"rightMotor\">The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor.</param>\n        /// <returns>Returns true if the vibration motors were set.</returns>\n        public static bool SetVibration(int index, float leftMotor, float rightMotor)\n        {           \n            return ((IGamePad)GamePad.Current).SetVibration(index, leftMotor, rightMotor);\n        }\n\n        /// <summary>\n        /// Sets the vibration motor speeds on the controller device if supported.\n        /// </summary>\n        /// <param name=\"index\">Index for the controller you want to query.</param>\n        /// <param name=\"leftMotor\">The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor.</param>\n        /// <param name=\"rightMotor\">The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor.</param>\n        /// <param name=\"leftTrigger\">(Xbox One controller only) The speed of the left trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor.</param>\n        /// <param name=\"rightTrigger\">(Xbox One controller only) The speed of the right trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor.</param>\n        /// <returns>Returns true if the vibration motors were set.</returns>\n        public static bool SetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            return ((IGamePad)GamePad.Current).SetVibration(index, leftMotor, rightMotor, leftTrigger, rightTrigger);\n        }\n\n        private GamePadStrategy _strategy;\n\n        T IPlatformGamePad.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private GamePad()\n        {\n            _strategy = InputFactory.Current.CreateGamePadStrategy();\n        }\n\n        #region IGamePad\n\n        int IGamePad.MaximumGamePadCount\n        {\n            get { return _strategy.PlatformGetMaxNumberOfGamePads(); }\n        }\n\n        GamePadCapabilities IGamePad.GetCapabilities(PlayerIndex playerIndex)\n        {\n            return GetCapabilities((int)playerIndex);\n        }\n\n        GamePadCapabilities IGamePad.GetCapabilities(int index)\n        {\n            if (index < 0 || index >= _strategy.PlatformGetMaxNumberOfGamePads())\n            {\n                return new GamePadCapabilities(\n                    gamePadType: GamePadType.Unknown,\n                    displayName: null,\n                    identifier: null,\n                    isConnected: false,\n                    buttons: (Buttons)0,\n                    hasLeftVibrationMotor: false,\n                    hasRightVibrationMotor: false,\n                    hasVoiceSupport: false\n                );\n            }\n\n            return _strategy.PlatformGetCapabilities(index);\n        }\n\n        GamePadState IGamePad.GetState(PlayerIndex playerIndex)\n        {\n            return GetState((int)playerIndex, GamePadDeadZone.IndependentAxes);\n        }\n\n        GamePadState IGamePad.GetState(int index)\n        {\n            return GetState(index, GamePadDeadZone.IndependentAxes);\n        }\n\n        GamePadState IGamePad.GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode)\n        {\n            return GetState((int)playerIndex, deadZoneMode);\n        }\n\n        GamePadState IGamePad.GetState(int index, GamePadDeadZone deadZoneMode)\n        {\n            return GetState(index, deadZoneMode, deadZoneMode);\n        }\n\n        GamePadState IGamePad.GetState(PlayerIndex playerIndex, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            return GetState((int)playerIndex, leftDeadZoneMode, rightDeadZoneMode);\n        }\n\n        GamePadState IGamePad.GetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            if (index < 0 || index >= _strategy.PlatformGetMaxNumberOfGamePads())\n                return new GamePadState();\n\n            return _strategy.PlatformGetState(index, leftDeadZoneMode, rightDeadZoneMode);\n        }\n\n        bool IGamePad.SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor)\n        {\n            return SetVibration((int)playerIndex, leftMotor, rightMotor, 0.0f, 0.0f);\n        }\n\n        bool IGamePad.SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            return SetVibration((int)playerIndex, leftMotor, rightMotor, leftTrigger, rightTrigger);\n        }\n\n        bool IGamePad.SetVibration(int index, float leftMotor, float rightMotor)\n        {\n            return SetVibration(index, leftMotor, rightMotor, 0.0f, 0.0f);\n        }\n\n        bool IGamePad.SetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger)\n        {\n            if (index < 0 || index >= _strategy.PlatformGetMaxNumberOfGamePads())\n                return false;\n\n            return _strategy.PlatformSetVibration(index, MathHelper.Clamp(leftMotor, 0.0f, 1.0f), MathHelper.Clamp(rightMotor, 0.0f, 1.0f), MathHelper.Clamp(leftTrigger, 0.0f, 1.0f), MathHelper.Clamp(rightTrigger, 0.0f, 1.0f));\n        }\n\n\n        #endregion IGamePad\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadButtons.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// A struct that represents the current button states for the controller.\n    /// </summary>\n    public struct GamePadButtons\n    {\n        internal readonly Buttons _buttons;\n\n        /// <summary>\n        /// Gets a value indicating if the button A is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button A is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState A\n        {\n            get\n            {\n                return ((_buttons & Buttons.A) == Buttons.A) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button B is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button B is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState B\n        {\n            get\n            {\n                return ((_buttons & Buttons.B) == Buttons.B) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button Back is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button Back is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Back\n        {\n            get\n            {\n                return ((_buttons & Buttons.Back) == Buttons.Back) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button X is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button X is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState X\n        {\n            get\n            {\n                return ((_buttons & Buttons.X) == Buttons.X) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button Y is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button Y is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Y\n        {\n            get\n            {\n                return ((_buttons & Buttons.Y) == Buttons.Y) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button Start is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button Start is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Start\n        {\n            get\n            {\n                return ((_buttons & Buttons.Start) == Buttons.Start) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the left shoulder button is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the left shoulder button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState LeftShoulder\n        {\n            get\n            {\n                return ((_buttons & Buttons.LeftShoulder) == Buttons.LeftShoulder) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the left grip button is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the left grip button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState LeftGrip\n        {\n            get\n            {\n                return ((_buttons & Buttons.LeftGrip) == Buttons.LeftGrip) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the left stick button is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the left stick button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState LeftStick\n        {\n            get\n            {\n                return ((_buttons & Buttons.LeftStick) == Buttons.LeftStick) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the right shoulder button is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the right shoulder button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState RightShoulder\n        {\n            get\n            {\n                return ((_buttons & Buttons.RightShoulder) == Buttons.RightShoulder) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the right grip button is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the right grip button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState RightGrip\n        {\n            get\n            {\n                return ((_buttons & Buttons.RightGrip) == Buttons.RightGrip) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the right stick button is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the right stick button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState RightStick\n        {\n            get\n            {\n                return ((_buttons & Buttons.RightStick) == Buttons.RightStick) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the guide button is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the guide button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState BigButton\n        {\n            get\n            {\n                return ((_buttons & Buttons.BigButton) == Buttons.BigButton) ? ButtonState.Pressed : ButtonState.Released;\n            }\n        }\n        \n        public GamePadButtons(Buttons buttons)\n        {\n            _buttons = buttons;\n        }\n\n        internal GamePadButtons(params Buttons[] buttons) : this()\n        {\n            foreach (Buttons b in buttons)\n                _buttons |= b;\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadButtons\"/> are equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are equal; otherwise, false.</returns>\n        public static bool operator ==(GamePadButtons left, GamePadButtons right)\n        {\n            return left._buttons == right._buttons;\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadButtons\"/> are not equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are not equal; otherwise, false.</returns>\n        public static bool operator !=(GamePadButtons left, GamePadButtons right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Returns a value indicating whether this instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"obj\">An object to compare to this instance.</param>\n        /// <returns>true if <paramref name=\"obj\"/> is a <see cref=\"GamePadButtons\"/> and has the same value as this instance; otherwise, false.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is GamePadButtons) && (this == (GamePadButtons)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadButtons\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            return (int)_buttons;\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadButtons\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadButtons\"/>.</returns>\n        public override string ToString()\n        {\n            return \"[GamePadButtons:\" +\n                \" A=\" + (int)A +\n                \", B=\" + (int)B +\n                \", X=\" + (int)X +\n                \", Y=\" + (int)Y +\n                \", Start=\" + (int)Start +\n                \", Back=\" + (int)Back +\n                \", BigButton=\" + (int)BigButton +\n                \", LeftShoulder=\" + (int)LeftShoulder +\n                \", RightShoulder=\" + (int)RightShoulder +\n                \", LeftStick=\" + (int)LeftStick +\n                \", RightStick=\" + (int)RightStick +\n                \"]\";\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadCapabilities.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// A stuct that represents the controller capabilities.\n    /// </summary>\n    public struct GamePadCapabilities\n    {\n        private const Buttons ButtonLeftXThumbStick = (Buttons.LeftThumbstickLeft & Buttons.LeftThumbstickRight);\n        private const Buttons ButtonLeftYThumbStick = (Buttons.LeftThumbstickDown & Buttons.LeftThumbstickUp);\n        private const Buttons ButtonRightXThumbStick = (Buttons.RightThumbstickLeft & Buttons.RightThumbstickRight);\n        private const Buttons ButtonRightYThumbStick = (Buttons.RightThumbstickDown & Buttons.RightThumbstickUp);\n\n        private const uint CapsConnected = (1 << 0);\n        private const uint CapsLeftVibrationMotor = (1 << 1);\n        private const uint CapsRightVibrationMotor = (1 << 2);\n        private const uint CapsVoiceSupport = (1 << 3);\n\n        private Buttons _hasButtons;\n        private uint _hasCaps;\n        private GamePadType _gamePadType;\n\n        [Obsolete]\n        public GamePadCapabilities(\n            GamePadType gamePadType, string displayName, string identifier, bool isConnected, \n            bool hasAButton, bool hasBButton, bool hasXButton, bool hasYButton,            \n            bool hasStartButton, bool hasBackButton,  bool hasBigButton, \n            bool hasDPadDownButton, bool hasDPadLeftButton, bool hasDPadRightButton, bool hasDPadUpButton, \n            bool hasLeftShoulderButton, bool hasLeftStickButton, \n            bool hasRightShoulderButton, bool hasRightStickButton,            \n            bool hasLeftXThumbStick, bool hasLeftYThumbStick, \n            bool hasRightXThumbStick, bool hasRightYThumbStick, \n            bool hasLeftTrigger, bool hasRightTrigger, \n            bool hasLeftVibrationMotor, bool hasRightVibrationMotor, \n            bool hasVoiceSupport) : this()\n        {\n            _gamePadType = gamePadType;\n            DisplayName = displayName;\n            Identifier = identifier;\n            IsConnected = isConnected;\n            HasAButton = hasAButton;\n            HasBButton = hasBButton;\n            HasXButton = hasXButton;\n            HasYButton = hasYButton;\n            HasStartButton = hasStartButton;\n            HasBackButton = hasBackButton;\n            HasBigButton = hasBigButton;\n            HasDPadDownButton = hasDPadDownButton;\n            HasDPadLeftButton = hasDPadLeftButton;\n            HasDPadRightButton = hasDPadRightButton;\n            HasDPadUpButton = hasDPadUpButton;\n            HasLeftShoulderButton = hasLeftShoulderButton;\n            HasLeftStickButton = hasLeftStickButton;\n            HasRightShoulderButton = hasRightShoulderButton;\n            HasRightStickButton = hasRightStickButton;\n            HasLeftXThumbStick = hasLeftXThumbStick;\n            HasLeftYThumbStick = hasLeftYThumbStick;\n            HasRightXThumbStick = hasRightXThumbStick;\n            HasRightYThumbStick = hasRightYThumbStick;\n            HasLeftTrigger = hasLeftTrigger;\n            HasRightTrigger=hasRightTrigger;\n            HasLeftVibrationMotor = hasLeftVibrationMotor;\n            HasRightVibrationMotor=hasRightVibrationMotor;\n            HasVoiceSupport = hasVoiceSupport;\n        }\n\n        internal GamePadCapabilities(\n            GamePadType gamePadType, string displayName, string identifier, bool isConnected,\n            Buttons buttons,\n            bool hasLeftVibrationMotor, bool hasRightVibrationMotor,\n            bool hasVoiceSupport) : this()\n        {\n            bool hasLeftThumbstickLeft = (_hasButtons & Buttons.LeftThumbstickLeft) == Buttons.LeftThumbstickLeft;\n            bool hasLeftThumbstickRight = (_hasButtons & Buttons.LeftThumbstickRight) == Buttons.LeftThumbstickRight;\n            bool hasLeftThumbstickDown = (_hasButtons & Buttons.LeftThumbstickDown) == Buttons.LeftThumbstickDown;\n            bool hasLeftThumbstickUp = (_hasButtons & Buttons.LeftThumbstickUp) == Buttons.LeftThumbstickUp;\n            bool hasRightThumbstickLeft = (_hasButtons & Buttons.RightThumbstickLeft) == Buttons.RightThumbstickLeft;\n            bool hasRightThumbstickRight = (_hasButtons & Buttons.RightThumbstickRight) == Buttons.RightThumbstickRight;\n            bool hasRightThumbstickDown = (_hasButtons & Buttons.RightThumbstickDown) == Buttons.RightThumbstickDown;\n            bool hasRightThumbstickUp = (_hasButtons & Buttons.RightThumbstickUp) == Buttons.RightThumbstickUp;\n            Debug.Assert(hasLeftThumbstickLeft == hasLeftThumbstickRight); // ButtonLeftXThumbStick\n            Debug.Assert(hasLeftThumbstickDown == hasLeftThumbstickUp); // ButtonLeftYThumbStick\n            Debug.Assert(hasRightThumbstickLeft == hasRightThumbstickRight); // ButtonRightXThumbStick\n            Debug.Assert(hasRightThumbstickDown == hasRightThumbstickUp); // ButtonRightYThumbStick\n\n            this._gamePadType = gamePadType;\n            this.DisplayName = displayName;\n            this.Identifier = identifier;\n            this.IsConnected = isConnected;\n            this._hasButtons = buttons;\n            this.HasLeftVibrationMotor = hasLeftVibrationMotor;\n            this.HasRightVibrationMotor = hasRightVibrationMotor;\n            this.HasVoiceSupport = hasVoiceSupport;\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the controller is connected.\n        /// </summary>\n        /// <value><c>true</c> if it is connected; otherwise, <c>false</c>.</value>\n        public bool IsConnected\n        {\n            get { return (_hasCaps & CapsConnected) == CapsConnected; }\n            internal set\n            {\n                _hasCaps = (value)\n                         ? (_hasCaps | CapsConnected)\n                         : (_hasCaps & ~CapsConnected);\n            }\n        }\n\n        /// <summary>\n        /// Gets the gamepad display name.\n        /// \n        /// This property is not available in XNA.\n        /// </summary>\n        /// <value>String representing the display name of the gamepad.</value>\n        public string DisplayName { get; internal set; }\n\n        /// <summary>\n        /// Gets the unique identifier of the gamepad.\n        /// \n        /// This property is not available in XNA.\n        /// </summary>\n        /// <value>String representing the unique identifier of the gamepad.</value>\n        public string Identifier { get; internal set; }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the button A.\n        /// </summary>\n        /// <value><c>true</c> if it has the button A; otherwise, <c>false</c>.</value>\n        public bool HasAButton \n        {\n            get { return (_hasButtons & Buttons.A) == Buttons.A; }\n            internal set \n            {\n                _hasButtons = (value)\n                            ? (_hasButtons |  Buttons.A)\n                            : (_hasButtons & ~Buttons.A);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the button Back.\n        /// </summary>\n        /// <value><c>true</c> if it has the button Back; otherwise, <c>false</c>.</value>\n        public bool HasBackButton\n        {\n            get { return (_hasButtons & Buttons.Back) == Buttons.Back; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.Back)\n                            : (_hasButtons & ~Buttons.Back);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the button B.\n        /// </summary>\n        /// <value><c>true</c> if it has the button B; otherwise, <c>false</c>.</value>\n        public bool HasBButton\n        {\n            get { return (_hasButtons & Buttons.B) == Buttons.B; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.B)\n                            : (_hasButtons & ~Buttons.B);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the directional pad down button.\n        /// </summary>\n        /// <value><c>true</c> if it has the directional pad down button; otherwise, <c>false</c>.</value>\n        public bool HasDPadDownButton\n        {\n            get { return (_hasButtons & Buttons.DPadDown) == Buttons.DPadDown; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.DPadDown)\n                            : (_hasButtons & ~Buttons.DPadDown);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the directional pad left button.\n        /// </summary>\n        /// <value><c>true</c> if it has the directional pad left button; otherwise, <c>false</c>.</value>\n        public bool HasDPadLeftButton\n        {\n            get { return (_hasButtons & Buttons.DPadLeft) == Buttons.DPadLeft; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.DPadLeft)\n                            : (_hasButtons & ~Buttons.DPadLeft);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the directional pad right button.\n        /// </summary>\n        /// <value><c>true</c> if it has the directional pad right button; otherwise, <c>false</c>.</value>\n        public bool HasDPadRightButton\n        {\n            get { return (_hasButtons & Buttons.DPadRight) == Buttons.DPadRight; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.DPadRight)\n                            : (_hasButtons & ~Buttons.DPadRight);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the directional pad up button.\n        /// </summary>\n        /// <value><c>true</c> if it has the directional pad up button; otherwise, <c>false</c>.</value>\n        public bool HasDPadUpButton\n        {\n            get { return (_hasButtons & Buttons.DPadUp) == Buttons.DPadUp; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.DPadUp)\n                            : (_hasButtons & ~Buttons.DPadUp);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the left shoulder button.\n        /// </summary>\n        /// <value><c>true</c> if it has the left shoulder button; otherwise, <c>false</c>.</value>\n        public bool HasLeftShoulderButton\n        {\n            get { return (_hasButtons & Buttons.LeftShoulder) == Buttons.LeftShoulder; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.LeftShoulder)\n                            : (_hasButtons & ~Buttons.LeftShoulder);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the left stick button.\n        /// </summary>\n        /// <value><c>true</c> if it has the left stick button; otherwise, <c>false</c>.</value>\n        public bool HasLeftStickButton\n        {\n            get { return (_hasButtons & Buttons.LeftStick) == Buttons.LeftStick; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.LeftStick)\n                            : (_hasButtons & ~Buttons.LeftStick);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the right shoulder button.\n        /// </summary>\n        /// <value><c>true</c> if it has the right shoulder button; otherwise, <c>false</c>.</value>\n        public bool HasRightShoulderButton\n        {\n            get { return (_hasButtons & Buttons.RightShoulder) == Buttons.RightShoulder; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.RightShoulder)\n                            : (_hasButtons & ~Buttons.RightShoulder);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the right stick button.\n        /// </summary>\n        /// <value><c>true</c> if it has the right stick button; otherwise, <c>false</c>.</value>\n        public bool HasRightStickButton\n        {\n            get { return (_hasButtons & Buttons.RightStick) == Buttons.RightStick; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.RightStick)\n                            : (_hasButtons & ~Buttons.RightStick);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the button Start.\n        /// </summary>\n        /// <value><c>true</c> if it has the button Start; otherwise, <c>false</c>.</value>\n        public bool HasStartButton\n        {\n            get { return (_hasButtons & Buttons.Start) == Buttons.Start; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.Start)\n                            : (_hasButtons & ~Buttons.Start);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the button X.\n        /// </summary>\n        /// <value><c>true</c> if it has the button X; otherwise, <c>false</c>.</value>\n        public bool HasXButton\n        {\n            get { return (_hasButtons & Buttons.X) == Buttons.X; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.X)\n                            : (_hasButtons & ~Buttons.X);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the button Y.\n        /// </summary>\n        /// <value><c>true</c> if it has the button Y; otherwise, <c>false</c>.</value>\n        public bool HasYButton\n        {\n            get { return (_hasButtons & Buttons.Y) == Buttons.Y; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.Y)\n                            : (_hasButtons & ~Buttons.Y);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the guide button.\n        /// </summary>\n        /// <value><c>true</c> if it has the guide button; otherwise, <c>false</c>.</value>\n        public bool HasBigButton\n        {\n            get { return (_hasButtons & Buttons.BigButton) == Buttons.BigButton; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.BigButton)\n                            : (_hasButtons & ~Buttons.BigButton);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has X axis for the left stick (thumbstick) button.\n        /// </summary>\n        /// <value><c>true</c> if it has X axis for the left stick (thumbstick) button; otherwise, <c>false</c>.</value>\n        public bool HasLeftXThumbStick\n        {\n            get { return (_hasButtons & ButtonLeftXThumbStick) == ButtonLeftXThumbStick; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | ButtonLeftXThumbStick)\n                            : (_hasButtons & ~ButtonLeftXThumbStick);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has Y axis for the left stick (thumbstick) button.\n        /// </summary>\n        /// <value><c>true</c> if it has Y axis for the left stick (thumbstick) button; otherwise, <c>false</c>.</value>\n        public bool HasLeftYThumbStick\n        {\n            get { return (_hasButtons & ButtonLeftYThumbStick) == ButtonLeftYThumbStick; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | ButtonLeftYThumbStick)\n                            : (_hasButtons & ~ButtonLeftYThumbStick);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has X axis for the right stick (thumbstick) button.\n        /// </summary>\n        /// <value><c>true</c> if it has X axis for the right stick (thumbstick) button; otherwise, <c>false</c>.</value>\n        public bool HasRightXThumbStick\n        {\n            get { return (_hasButtons & ButtonRightXThumbStick) == ButtonRightXThumbStick; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | ButtonRightXThumbStick)\n                            : (_hasButtons & ~ButtonRightXThumbStick);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has Y axis for the right stick (thumbstick) button.\n        /// </summary>\n        /// <value><c>true</c> if it has Y axis for the right stick (thumbstick) button; otherwise, <c>false</c>.</value>\n        public bool HasRightYThumbStick\n        {\n            get { return (_hasButtons & ButtonRightYThumbStick) == ButtonRightYThumbStick; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | ButtonRightYThumbStick)\n                            : (_hasButtons & ~ButtonRightYThumbStick);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the left trigger button.\n        /// </summary>\n        /// <value><c>true</c> if it has the left trigger button; otherwise, <c>false</c>.</value>\n        public bool HasLeftTrigger\n        {\n            get { return (_hasButtons & Buttons.LeftTrigger) == Buttons.LeftTrigger; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.LeftTrigger)\n                            : (_hasButtons & ~Buttons.LeftTrigger);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the right trigger button.\n        /// </summary>\n        /// <value><c>true</c> if it has the right trigger button; otherwise, <c>false</c>.</value>\n        public bool HasRightTrigger\n        {\n            get { return (_hasButtons & Buttons.RightTrigger) == Buttons.RightTrigger; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.RightTrigger)\n                            : (_hasButtons & ~Buttons.RightTrigger);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the left grip button.\n        /// </summary>\n        /// <value><c>true</c> if it has the left grip button; otherwise, <c>false</c>.</value>\n        public bool HasLeftGrip\n        {\n            get { return (_hasButtons & Buttons.LeftGrip) == Buttons.LeftGrip; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.LeftGrip)\n                            : (_hasButtons & ~Buttons.LeftGrip);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the right grip button.\n        /// </summary>\n        /// <value><c>true</c> if it has the right grip button; otherwise, <c>false</c>.</value>\n        public bool HasRightGrip\n        {\n            get { return (_hasButtons & Buttons.RightGrip) == Buttons.RightGrip; }\n            internal set\n            {\n                _hasButtons = (value)\n                            ? (_hasButtons | Buttons.RightGrip)\n                            : (_hasButtons & ~Buttons.RightGrip);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the left vibration motor.\n        /// </summary>\n        /// <value><c>true</c> if it has the left vibration motor; otherwise, <c>false</c>.</value>\n        public bool HasLeftVibrationMotor\n        {\n            get { return (_hasCaps & CapsLeftVibrationMotor) == CapsLeftVibrationMotor; }\n            internal set\n            {\n                _hasCaps = (value)\n                         ? (_hasCaps | CapsLeftVibrationMotor)\n                         : (_hasCaps & ~CapsLeftVibrationMotor);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has the right vibration motor.\n        /// </summary>\n        /// <value><c>true</c> if it has the right vibration motor; otherwise, <c>false</c>.</value>\n        public bool HasRightVibrationMotor\n        {\n            get { return (_hasCaps & CapsRightVibrationMotor) == CapsRightVibrationMotor; }\n            internal set\n            {\n                _hasCaps = (value)\n                         ? (_hasCaps | CapsRightVibrationMotor)\n                         : (_hasCaps & ~CapsRightVibrationMotor);\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the controller has a microphone.\n        /// </summary>\n        /// <value><c>true</c> if it has a microphone; otherwise, <c>false</c>.</value>\n        public bool HasVoiceSupport\n        {\n            get { return (_hasCaps & CapsVoiceSupport) == CapsVoiceSupport; }\n            internal set\n            {\n                _hasCaps = (value)\n                         ? (_hasCaps | CapsVoiceSupport)\n                         : (_hasCaps & ~CapsVoiceSupport);\n            }\n        }\n\n        /// <summary>\n        /// Gets the type of the controller.\n        /// </summary>\n        /// <value>A <see cref=\"GamePadType\"/> representing the controller type..</value>\n        public GamePadType GamePadType\n        {\n            get { return _gamePadType; }\n            internal set { _gamePadType = value; }\n        }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>\n        /// is equal to another specified <see cref=\"Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.GamePadCapabilities\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.GamePadCapabilities\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are equal; otherwise, <c>false</c>.</returns>\n        public static bool operator ==(GamePadCapabilities left, GamePadCapabilities right)\n        {\n            bool eq = true;\n\n            eq &= (left.DisplayName == right.DisplayName);\n            eq &= (left.Identifier == right.Identifier);\n            eq &= (left._hasButtons == right._hasButtons);\n            eq &= (left._hasCaps == right._hasCaps);\n            eq &= (left._gamePadType == right._gamePadType);\n\n            return eq;\n        }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>\n        /// is not equal to another specified <see cref=\"Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.GamePadCapabilities\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.GamePadCapabilities\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are not equal; otherwise, <c>false</c>.</returns>\n        public static bool operator !=(GamePadCapabilities left, GamePadCapabilities right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"object\"/> is equal to the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"object\"/> to compare with the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>.</param>\n        /// <returns><c>true</c> if the specified <see cref=\"object\"/> is equal to the current\n        /// <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>; otherwise, <c>false</c>.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is GamePadCapabilities) && (this == (GamePadCapabilities)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadCapabilities\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            return Identifier.GetHashCode();\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadCapabilities\"/>.</returns>\n        public override string ToString()\n        {\n            return \"[GamePadCapabilities: IsConnected=\" + IsConnected +\n                \", DisplayName=\" + DisplayName +\n                \", Identifier=\" + Identifier +\n                \", HasAButton=\" + HasAButton +\n                \", HasBackButton=\" + HasBackButton +\n                \", HasBButton=\" + HasBButton +\n                \", HasDPadDownButton=\" + HasDPadDownButton +\n                \", HasDPadLeftButton=\" + HasDPadLeftButton +\n                \", HasDPadRightButton=\" + HasDPadRightButton +\n                \", HasDPadUpButton=\" + HasDPadUpButton +\n                \", HasLeftShoulderButton=\" + HasLeftShoulderButton +\n                \", HasLeftStickButton=\" + HasLeftStickButton +\n                \", HasRightShoulderButton=\" + HasRightShoulderButton +\n                \", HasRightStickButton=\" + HasRightStickButton +\n                \", HasStartButton=\" + HasStartButton +\n                \", HasXButton=\" + HasXButton +\n                \", HasYButton=\" + HasYButton +\n                \", HasBigButton=\" + HasBigButton +\n                \", HasLeftXThumbStick=\" + HasLeftXThumbStick +\n                \", HasLeftYThumbStick=\" + HasLeftYThumbStick +\n                \", HasRightXThumbStick=\" + HasRightXThumbStick +\n                \", HasRightYThumbStick=\" + HasRightYThumbStick +\n                \", HasLeftTrigger=\" + HasLeftTrigger +\n                \", HasRightTrigger=\" + HasRightTrigger +\n                \", HasLeftVibrationMotor=\" + HasLeftVibrationMotor +\n                \", HasRightVibrationMotor=\" + HasRightVibrationMotor +\n                \", HasVoiceSupport=\" + HasVoiceSupport +\n                \", GamePadType=\" + GamePadType +\n                \"]\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadDPad.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    public struct GamePadDPad\n    {\n        private const Buttons ButtonsMask = (Buttons.DPadUp | Buttons.DPadDown | Buttons.DPadLeft | Buttons.DPadRight);\n\n        internal readonly Buttons _buttons;\n\n        /// <summary>\n        /// Gets a value indicating whether up is pressed on the directional pad.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the up button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Up { get { return (ButtonState)((int)(_buttons & Buttons.DPadUp) >> 0); } }\n\n        /// <summary>\n        /// Gets a value indicating whether down is pressed on the directional pad.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the down button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Down { get { return (ButtonState)((int)(_buttons & Buttons.DPadDown) >> 1); } }\n\n        /// <summary>\n        /// Gets a value indicating whether left is pressed on the directional pad.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the left button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Left { get { return (ButtonState)((int)(_buttons & Buttons.DPadLeft) >> 2); } }\n\n        /// <summary>\n        /// Gets a value indicating whether right is pressed on the directional pad.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the right button is pressed; otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Right { get { return (ButtonState)((int)(_buttons & Buttons.DPadRight) >> 3); } }\n\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadDPad\"/> struct.\n        /// </summary>\n        /// <param name=\"upValue\">Current state of directional pad up.</param>\n        /// <param name=\"downValue\">Current state of directional pad down.</param>\n        /// <param name=\"leftValue\">Current state of directional pad left.</param>\n        /// <param name=\"rightValue\">Current state of directional pad right.</param>\n        public GamePadDPad(ButtonState upValue, ButtonState downValue, ButtonState leftValue, ButtonState rightValue) : this()\n        {\n            int buttons = (int)upValue    << 0\n                        | (int)downValue  << 1\n                        | (int)leftValue  << 2\n                        | (int)rightValue << 3;\n            _buttons = (Buttons)buttons;\n        }\n\n        internal GamePadDPad(params Buttons[] buttons) : this()\n        {\n            foreach (Buttons button in buttons)\n            {\n                _buttons |= button & ButtonsMask;\n            }\n        }\n\n        internal GamePadDPad(Buttons buttons) : this()\n        {\n            _buttons |= buttons & ButtonsMask;\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadDPad\"/> are equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are equal; otherwise, false.</returns>\n        public static bool operator ==(GamePadDPad left, GamePadDPad right)\n        {\n            return (left._buttons == right._buttons);\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadDPad\"/> are not equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are not equal; otherwise, false.</returns>\n        public static bool operator !=(GamePadDPad left, GamePadDPad right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Returns a value indicating whether this instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"obj\">An object to compare to this instance.</param>\n        /// <returns>true if <paramref name=\"obj\"/> is a <see cref=\"GamePadDPad\"/> and has the same value as this instance; otherwise, false.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is GamePadDPad) && (this == (GamePadDPad)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadDPad\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            return (int)_buttons;\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadDPad\"/>\n        /// in a format of 0000 where each number represents a boolean value of each respecting object property: Left, Up, Right, Down.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadDPad\"/>.</returns>\n        public override string ToString()\n        {\n            return \"\" + (int)Left + (int)Up + (int)Right + (int)Down;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadDeadZone.cs",
    "content": "﻿\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Specifies a type of dead zone processing to apply to Xbox 360 Controller\n    /// analog sticks when calling GetState.\n    /// </summary>\n    public enum GamePadDeadZone\n    {\n        /// <summary>\n        /// The values of each stick are not processed and are returned by GetState as\n        /// \"raw\" values. This is best if you intend to implement your own dead zone\n        /// processing.\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// The X and Y positions of each stick are compared against the dead zone independently.\n        /// This setting is the default when calling GetState.\n        /// </summary>\n        IndependentAxes,\n\n        /// <summary>\n        /// The combined X and Y position of each stick is compared to the dead zone.\n        /// This provides better control than IndependentAxes when the stick is used\n        /// as a two-dimensional control surface, such as when controlling a character's\n        /// view in a first-person game.\n        /// </summary>\n        Circular\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Represents specific information about the state of the controller,\n    /// including the current state of buttons and sticks.\n    ///\n    /// This is implemented as a partial struct to allow for individual platforms\n    /// to offer additional data without separate state queries to GamePad.\n    /// </summary>\n    public struct GamePadState\n    {\n        /// <summary>\n        /// Gets a value indicating if the controller is connected.\n        /// </summary>\n        /// <value><c>true</c> if it is connected; otherwise, <c>false</c>.</value>\n        public bool IsConnected { get; internal set; }\n\n        /// <summary>\n        /// Gets the packet number associated with this state.\n        /// </summary>\n        /// <value>The packet number.</value>\n        public int PacketNumber { get; internal set; }\n\n        /// <summary>\n        /// Gets a structure that identifies what buttons on the controller are pressed.\n        /// </summary>\n        /// <value>The GamePadButtons structure.</value>\n        public GamePadButtons Buttons\n        { \n            get { return new GamePadButtons(this.TouchButtons._buttons); }\n        }\n\n        /// <summary>\n        /// Gets a structure that identifies what buttons on the controller are pressed or touched.\n        /// </summary>\n        /// <value>The TouchButtons structure.</value>\n        public GamePadTouchButtons TouchButtons { get; internal set; }\n\n        /// <summary>\n        /// Gets a structure that identifies what directions of the directional pad on the controller are pressed.\n        /// </summary>\n        /// <value>The directional pad structure.</value>\n        public GamePadDPad DPad { get; internal set; }\n\n        /// <summary>\n        /// Gets a structure that indicates the position of the controller sticks (thumbsticks).\n        /// </summary>\n        /// <value>The thumbsticks position.</value>\n        public GamePadThumbSticks ThumbSticks { get; internal set; }\n\n        /// <summary>\n        /// Gets a structure that identifies the position of triggers on the controller.\n        /// </summary>\n        /// <value>Positions of the triggers.</value>\n        public GamePadTriggers Triggers { get; internal set; }\n\n        /// <summary>\n        /// Gets a structure that identifies the position of Grips on the controller.\n        /// </summary>\n        /// <value>Positions of the grips.</value>\n        public GamePadTriggers Grips { get; internal set; }\n\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/> struct\n        /// using the specified GamePadThumbSticks, GamePadTriggers, GamePadButtons, and GamePadDPad.\n        /// </summary>\n        /// <param name=\"thumbSticks\">Initial thumbstick state.</param>\n        /// <param name=\"triggers\">Initial trigger state.</param>\n        /// <param name=\"buttons\">Initial button state.</param>\n        /// <param name=\"dPad\">Initial directional pad state.</param>\n        public GamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadButtons buttons, GamePadDPad dPad) : this()\n        {\n            ThumbSticks = thumbSticks;\n            Triggers = triggers;\n            Grips = default(GamePadTriggers);\n            TouchButtons = new GamePadTouchButtons(buttons._buttons, default(Buttons));\n            DPad = dPad;\n            IsConnected = true;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/> struct\n        /// using the specified stick, trigger, and button values.\n        /// </summary>\n        /// <param name=\"leftThumbStick\">Left stick value. Each axis is clamped between −1.0 and 1.0.</param>\n        /// <param name=\"rightThumbStick\">Right stick value. Each axis is clamped between −1.0 and 1.0.</param>\n        /// <param name=\"leftTrigger\">Left trigger value. This value is clamped between 0.0 and 1.0.</param>\n        /// <param name=\"rightTrigger\">Right trigger value. This value is clamped between 0.0 and 1.0.</param>\n        /// <param name=\"buttons\"> Array or parameter list of Buttons to initialize as pressed.</param>\n        public GamePadState(Vector2 leftThumbStick, Vector2 rightThumbStick, float leftTrigger, float rightTrigger, params Buttons[] buttons) : this()\n        {\n            Buttons buttonFlags = default;\n            foreach (Buttons b in buttons)\n                buttonFlags |= b;\n\n            ThumbSticks = new GamePadThumbSticks(leftThumbStick, rightThumbStick);\n            Triggers = new GamePadTriggers(leftTrigger, rightTrigger);\n            Grips = default(GamePadTriggers);\n            TouchButtons = new GamePadTouchButtons(buttonFlags, default(Buttons));\n            DPad = new GamePadDPad(buttons);\n            IsConnected = true;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/> struct\n        /// using the specified GamePadThumbSticks, GamePadTriggers, GamePadButtons, and GamePadDPad.\n        /// </summary>\n        /// <param name=\"thumbSticks\">Initial thumbstick state.</param>\n        /// <param name=\"triggers\">Initial trigger state.</param>\n        /// <param name=\"grips\">Initial directional pad state.</param>\n        /// <param name=\"touchButtons\">Initial button state.</param>\n        /// <param name=\"dPad\">Initial directional pad state.</param>\n        public GamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadTriggers grips, GamePadTouchButtons touchButtons, GamePadDPad dPad) : this()\n        {\n            ThumbSticks = thumbSticks;\n            Triggers = triggers;\n            Grips = grips;\n            TouchButtons = touchButtons;\n            DPad = dPad;\n            IsConnected = true;\n        }\n\n        /// <summary>\n        /// Determines whether specified input device buttons are pressed in this GamePadState.\n        /// </summary>\n        /// <returns><c>true</c> if button was pressed, <c>false</c> if button was released or touched.</returns>\n        /// <param name=\"button\">Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation.</param>\n        public bool IsButtonDown(Buttons button)\n        {\n            Buttons virtualButtons = TouchButtons._buttons\n                                   | DPad._buttons\n                                   | ThumbSticks._virtualButtons\n                                   ;\n            return (virtualButtons & button) == button;\n        }\n\n        /// <summary>\n        /// Determines whether specified input device buttons are released in this GamePadState.\n        /// </summary>\n        /// <returns><c>true</c> if button was released or touched, <c>false</c> if button was pressed.</returns>\n        /// <param name=\"button\">Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation.</param>\n        public bool IsButtonUp(Buttons button)\n        {\n            Buttons virtualButtons = TouchButtons._buttons\n                                   | DPad._buttons\n                                   | ThumbSticks._virtualButtons\n                                   ;\n            return (virtualButtons & button) != button;\n        }\n\n        /// <summary>\n        /// Determines whether specified input device buttons are touched in this GamePadState.\n        /// </summary>\n        /// <returns><c>true</c> if button was touched, <c>false</c> if button was released or touched.</returns>\n        /// <param name=\"button\">Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation.</param>\n        public bool IsButtonTouched(Buttons button)\n        {\n            Buttons touchButtons = TouchButtons._touches & ~TouchButtons._buttons;\n            return (touchButtons & button) == button;\n        }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.GamePadState\"/> is equal\n        /// to another specified <see cref=\"Microsoft.Xna.Framework.Input.GamePadState\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.GamePadState\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.GamePadState\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are equal; otherwise, <c>false</c>.</returns>\n        public static bool operator ==(GamePadState left, GamePadState right)\n        {\n            return (left.IsConnected == right.IsConnected)\n                && (left.PacketNumber == right.PacketNumber)\n                && (left.TouchButtons == right.TouchButtons)\n                && (left.DPad == right.DPad)\n                && (left.ThumbSticks == right.ThumbSticks)\n                && (left.Triggers == right.Triggers)\n                && (left.Grips == right.Grips)\n                ;\n        }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.GamePadState\"/> is not\n        /// equal to another specified <see cref=\"Microsoft.Xna.Framework.Input.GamePadState\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.GamePadState\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.GamePadState\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are not equal; otherwise, <c>false</c>.</returns>\n        public static bool operator !=(GamePadState left, GamePadState right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"object\"/> is equal to the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"object\"/> to compare with the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/>.</param>\n        /// <returns><c>true</c> if the specified <see cref=\"object\"/> is equal to the current\n        /// <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/>; otherwise, <c>false</c>.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is GamePadState) && (this == (GamePadState)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int hash = PacketNumber;\n                hash = (hash * 397) ^ TouchButtons.GetHashCode();\n                hash = (hash * 397) ^ DPad.GetHashCode();\n                hash = (hash * 397) ^ ThumbSticks.GetHashCode();\n                hash = (hash * 397) ^ Triggers.GetHashCode();\n                hash = (hash * 397) ^ Grips.GetHashCode();\n                return hash;\n            }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadState\"/>.</returns>\n        public override string ToString()\n        {\n            if (!IsConnected)\n                return \"[GamePadState: IsConnected = 0]\";\n\n            return \"[GamePadState: IsConnected=\" + (IsConnected ? \"1\" : \"0\") +\n                   \", PacketNumber=\" + PacketNumber.ToString(\"00000\") +\n                   \", Buttons=\" + Buttons +\n                   \", TouchButtons=\" + TouchButtons +\n                   \", DPad=\" + DPad +\n                   \", ThumbSticks=\" + ThumbSticks +\n                   \", Triggers=\" + Triggers +\n                   \", Grips=\" + Grips +\n                   \"]\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public abstract class GamePadStrategy\n    {\n        public abstract float LeftThumbDeadZone { get; }\n        public abstract float RightThumbDeadZone { get; }\n        public abstract int PlatformGetMaxNumberOfGamePads();\n        public abstract GamePadCapabilities PlatformGetCapabilities(int index);\n        public abstract GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode);\n        public abstract bool PlatformSetVibration(int index, float v1, float v2, float v3, float v4);\n\n        protected GamePadCapabilities CreateGamePadCapabilities(\n            GamePadType gamePadType, string displayName, string identifier, bool isConnected,\n            Buttons buttons,\n            bool hasLeftVibrationMotor, bool hasRightVibrationMotor,\n            bool hasVoiceSupport)\n        {\n            return new GamePadCapabilities(\n                        gamePadType: gamePadType,\n                        displayName: displayName,\n                        identifier: identifier,\n                        isConnected: isConnected,\n                        buttons: buttons,\n                        hasLeftVibrationMotor: hasLeftVibrationMotor,\n                        hasRightVibrationMotor: hasRightVibrationMotor,\n                        hasVoiceSupport: hasVoiceSupport\n                    );\n        }\n\n        protected GamePadState CreateGamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadButtons buttons, GamePadDPad dPad)\n        {\n            return new GamePadState(thumbSticks, triggers, buttons, dPad);\n        }\n        protected GamePadState CreateGamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadButtons buttons, GamePadDPad dPad,\n            int packetNumber)\n        {\n            GamePadState state = new GamePadState(thumbSticks, triggers, buttons, dPad);\n            state.PacketNumber = packetNumber;\n            return state;\n        }\n        protected GamePadState CreateGamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadButtons buttons, GamePadDPad dPad,\n            bool isConnected)\n        {\n            GamePadState state = new GamePadState(thumbSticks, triggers, buttons, dPad);\n            state.IsConnected = isConnected;\n            return state;\n        }\n\n        protected GamePadThumbSticks CreateGamePadThumbSticks(Vector2 leftPosition, Vector2 rightPosition, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode)\n        {\n            return new GamePadThumbSticks(leftPosition, rightPosition, leftDeadZoneMode, rightDeadZoneMode);\n        }\n\n        protected GamePadDPad CreateGamePadDPad(Buttons buttons)\n        {\n            return new GamePadDPad(buttons);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadThumbSticks.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// A struct that represents the current stick (thumbstick) states for the controller.\n    /// </summary>\n    public struct GamePadThumbSticks\n    {\n        internal readonly Buttons _virtualButtons;\n        private readonly Vector2 _left, _right;\n\n        /// <summary>\n        /// Gets a value indicating the position of the left stick (thumbstick). \n        /// </summary>\n        /// <value>A <see cref=\"Vector2\"/> indicating the current position of the left stick (thumbstick).</value>\n        public Vector2 Left\n        {\n            get { return _left; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating the position of the right stick (thumbstick). \n        /// </summary>\n        /// <value>A <see cref=\"Vector2\"/> indicating the current position of the right stick (thumbstick).</value>\n        public Vector2 Right\n        {\n            get { return _right; }\n        }\n\n        public GamePadThumbSticks(Vector2 leftPosition, Vector2 rightPosition)\n            : this(leftPosition, rightPosition, GamePadDeadZone.None, GamePadDeadZone.None)\n        {\n            \n        }\n\n        internal GamePadThumbSticks(Vector2 leftPosition, Vector2 rightPosition, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) : this()\n        {\n            float leftThumbDeadZone  = ((IPlatformGamePad)GamePad.Current).GetStrategy<GamePadStrategy>().LeftThumbDeadZone;\n            float rightThumbDeadZone = ((IPlatformGamePad)GamePad.Current).GetStrategy<GamePadStrategy>().RightThumbDeadZone;\n\n            // Apply dead zone\n            _left = ApplyDeadZone(leftDeadZoneMode, leftThumbDeadZone, leftPosition);\n            _right = ApplyDeadZone(rightDeadZoneMode, rightThumbDeadZone, rightPosition);\n\n            // VirtualButtons should always behave like deadzone is IndependentAxes. \n            // This is consistent with XNA behaviour and generally most convenient (e.g. for menu navigation)\n            _virtualButtons = 0;\n\n            if (leftPosition.X < -leftThumbDeadZone)\n                _virtualButtons |= Buttons.LeftThumbstickLeft;\n            else if (leftPosition.X > leftThumbDeadZone)\n                _virtualButtons |= Buttons.LeftThumbstickRight;\n\n            if (leftPosition.Y < -leftThumbDeadZone)\n                _virtualButtons |= Buttons.LeftThumbstickDown;\n            else if (leftPosition.Y > leftThumbDeadZone)\n                _virtualButtons |= Buttons.LeftThumbstickUp;\n\n            if (rightPosition.X < -rightThumbDeadZone)\n                _virtualButtons |= Buttons.RightThumbstickLeft;\n            else if (rightPosition.X > rightThumbDeadZone)\n                _virtualButtons |= Buttons.RightThumbstickRight;\n\n            if (rightPosition.Y < -rightThumbDeadZone)\n                _virtualButtons |= Buttons.RightThumbstickDown;\n            else if (rightPosition.Y > rightThumbDeadZone)\n                _virtualButtons |= Buttons.RightThumbstickUp;\n        }\n\n        private Vector2 ApplyDeadZone(GamePadDeadZone deadZoneMode, float deadZone, Vector2 thumbstickPosition)\n        {\n            // XNA applies dead zones before rounding/clamping values. The public ctor does not allow this because the dead zone must be known before\n\n            // Apply dead zone\n            switch (deadZoneMode)\n            {\n                case GamePadDeadZone.None:\n                    break;\n                case GamePadDeadZone.IndependentAxes:\n                    thumbstickPosition = ExcludeIndependentAxesDeadZone(thumbstickPosition, deadZone);\n                    break;\n                case GamePadDeadZone.Circular:\n                    thumbstickPosition = ExcludeCircularDeadZone(thumbstickPosition, deadZone);\n                    break;\n            }\n\n            // Apply clamp\n            if (deadZoneMode == GamePadDeadZone.Circular)\n            {\n                if (thumbstickPosition.LengthSquared() > 1f)\n                    thumbstickPosition.Normalize();\n            }\n            else\n            {\n                thumbstickPosition = new Vector2(MathHelper.Clamp(thumbstickPosition.X, -1f, 1f), MathHelper.Clamp(thumbstickPosition.Y, -1f, 1f));\n            }\n\n            return thumbstickPosition;\n        }\n\n        private Vector2 ExcludeIndependentAxesDeadZone(Vector2 value, float deadZone)\n        {\n            return new Vector2(ExcludeAxisDeadZone(value.X, deadZone), ExcludeAxisDeadZone(value.Y, deadZone));\n        }\n\n        private float ExcludeAxisDeadZone(float value, float deadZone)\n        {\n            if (value < -deadZone)\n                value += deadZone;\n            else if (value > deadZone)\n                value -= deadZone;\n            else\n                return 0f;\n            return value / (1f - deadZone);\n        }\n\n        private Vector2 ExcludeCircularDeadZone(Vector2 value, float deadZone)\n        {\n            float originalLength = value.Length();\n            if (originalLength <= deadZone)\n                return Vector2.Zero;\n            float newLength = (originalLength - deadZone) / (1f - deadZone);\n            return value * (newLength / originalLength);\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadThumbSticks\"/> are equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are equal; otherwise, false.</returns>\n        public static bool operator ==(GamePadThumbSticks left, GamePadThumbSticks right)\n        {\n            return (left.Left == right.Left) && (left.Right == right.Right);\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadThumbSticks\"/> are not equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are not equal; otherwise, false.</returns>\n        public static bool operator !=(GamePadThumbSticks left, GamePadThumbSticks right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Returns a value indicating whether this instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"obj\">An object to compare to this instance.</param>\n        /// <returns>true if <paramref name=\"obj\"/> is a <see cref=\"GamePadThumbSticks\"/> and has the same value as this instance; otherwise, false.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is GamePadThumbSticks) && (this == (GamePadThumbSticks)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadThumbSticks\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (Left.GetHashCode() * 397) ^ Right.GetHashCode();\n            }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadThumbSticks\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadThumbSticks\"/>.</returns>\n        public override string ToString()\n        {\n            return \"[GamePadThumbSticks: Left=\" + Left + \", Right=\" + Right + \"]\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadTouchButtons.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// A struct that represents the current button states for the controller.\n    /// </summary>\n    public struct GamePadTouchButtons\n    {\n        internal readonly Buttons _buttons;\n        internal readonly Buttons _touches;\n\n        /// <summary>\n        /// Gets a value indicating if the button A is pressed or Touched.\n        /// </summary>\n        public TouchButtonState A\n        {\n            get\n            {\n                if ((_buttons & Buttons.A) == Buttons.A) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.A) == Buttons.A) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button B is pressed or Touched.\n        /// </summary>\n        public TouchButtonState B\n        {\n            get\n            {\n                if ((_buttons & Buttons.B) == Buttons.B) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.B) == Buttons.B) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button Back is pressed or Touched.\n        /// </summary>\n        public TouchButtonState Back\n        {\n            get\n            {\n                if ((_buttons & Buttons.Back) == Buttons.Back) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.Back) == Buttons.Back) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button X is pressed or Touched.\n        /// </summary>\n        public TouchButtonState X\n        {\n            get\n            {\n                if ((_buttons & Buttons.X) == Buttons.X) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.X) == Buttons.X) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button Y is pressed or Touched.\n        /// </summary>\n        public TouchButtonState Y\n        {\n            get\n            {\n                if ((_buttons & Buttons.Y) == Buttons.Y) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.Y) == Buttons.Y) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the button Start is pressed or Touched.\n        /// </summary>\n        public TouchButtonState Start\n        {\n            get\n            {\n                if ((_buttons & Buttons.Start) == Buttons.Start) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.Start) == Buttons.Start) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the left shoulder button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState LeftShoulder\n        {\n            get\n            {\n                if ((_buttons & Buttons.LeftShoulder) == Buttons.LeftShoulder) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.LeftShoulder) == Buttons.LeftShoulder) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the left grip button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState LeftGrip\n        {\n            get\n            {\n                if ((_buttons & Buttons.LeftGrip) == Buttons.LeftGrip) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.LeftGrip) == Buttons.LeftGrip) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the left stick button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState LeftStick\n        {\n            get\n            {\n                if ((_buttons & Buttons.LeftStick) == Buttons.LeftStick) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.LeftStick) == Buttons.LeftStick) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the left trigger button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState LeftTrigger\n        {\n            get\n            {\n                if ((_buttons & Buttons.LeftTrigger) == Buttons.LeftTrigger) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.LeftTrigger) == Buttons.LeftTrigger) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the right shoulder button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState RightShoulder\n        {\n            get\n            {\n                if ((_buttons & Buttons.RightShoulder) == Buttons.RightShoulder) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.RightShoulder) == Buttons.RightShoulder) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the right grip button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState RightGrip\n        {\n            get\n            {\n                if ((_buttons & Buttons.RightGrip) == Buttons.RightGrip) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.RightGrip) == Buttons.RightGrip) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the right stick button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState RightStick\n        {\n            get\n            {\n                if ((_buttons & Buttons.RightStick) == Buttons.RightStick) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.RightStick) == Buttons.RightStick) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the right trigger button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState RightTrigger\n        {\n            get\n            {\n                if ((_buttons & Buttons.RightTrigger) == Buttons.RightTrigger) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.RightTrigger) == Buttons.RightTrigger) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating if the guide button is pressed or Touched.\n        /// </summary>\n        public TouchButtonState BigButton\n        {\n            get\n            {\n                if ((_buttons & Buttons.BigButton) == Buttons.BigButton) return TouchButtonState.Pressed;\n                if ((_touches & Buttons.BigButton) == Buttons.BigButton) return TouchButtonState.Touched;\n                return TouchButtonState.Released;\n            }\n        }\n        \n        public GamePadTouchButtons(Buttons buttons, Buttons touches)\n        {\n            _buttons = buttons;\n            _touches = touches;\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadButtons\"/> are equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are equal; otherwise, false.</returns>\n        public static bool operator ==(GamePadTouchButtons left, GamePadTouchButtons right)\n        {\n            return left._buttons == right._buttons && left._touches == right._touches;\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadButtons\"/> are not equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are not equal; otherwise, false.</returns>\n        public static bool operator !=(GamePadTouchButtons left, GamePadTouchButtons right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Returns a value indicating whether this instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"obj\">An object to compare to this instance.</param>\n        /// <returns>true if <paramref name=\"obj\"/> is a <see cref=\"GamePadButtons\"/> and has the same value as this instance; otherwise, false.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is GamePadTouchButtons) && (this == (GamePadTouchButtons)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadButtons\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            return (int)_buttons ^ (int)_touches;\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadButtons\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadButtons\"/>.</returns>\n        public override string ToString()\n        {\n            return \"[GamePadButtons:\" +\n                \" A=\" + (int)A +\n                \", B=\" + (int)B +\n                \", X=\" + (int)X +\n                \", Y=\" + (int)Y +\n                \", Start=\" + (int)Start +\n                \", Back=\" + (int)Back +\n                \", BigButton=\" + (int)BigButton +\n                \", LeftShoulder=\" + (int)LeftShoulder +\n                \", RightShoulder=\" + (int)RightShoulder +\n                \", LeftStick=\" + (int)LeftStick +\n                \", RightStick=\" + (int)RightStick +\n                \"]\";\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadTriggers.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// A struct that contains information on the left and the right trigger buttons.\n    /// </summary>\n    public struct GamePadTriggers\n    {\n        /// <summary>\n        /// Gets the position of the left trigger.\n        /// </summary>\n        /// <value>A value from 0.0f to 1.0f representing left trigger.</value>\n        public float Left { get; private set; }\n\n        /// <summary>\n        /// Gets the position of the right trigger.\n        /// </summary>\n        /// <value>A value from 0.0f to 1.0f representing right trigger.</value>\n        public float Right { get; private set; }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadTriggers\"/> struct.\n        /// </summary>\n        /// <param name=\"leftTrigger\">The position of the left trigger, the value will get clamped between 0.0f and 1.0f.</param>\n        /// <param name=\"rightTrigger\">The position of the right trigger, the value will get clamped between 0.0f and 1.0f.</param>\n        public GamePadTriggers(float leftTrigger, float rightTrigger) : this()\n        {\n            Left = MathHelper.Clamp(leftTrigger, 0f, 1f);\n            Right = MathHelper.Clamp(rightTrigger, 0f, 1f);\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadTriggers\"/> are equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are equal; otherwise, false.</returns>\n        public static bool operator ==(GamePadTriggers left, GamePadTriggers right)\n        {\n            return (left.Left == right.Left) && (left.Right == right.Right);\n        }\n\n        /// <summary>\n        /// Determines whether two specified instances of <see cref=\"GamePadTriggers\"/> are not equal.\n        /// </summary>\n        /// <param name=\"left\">The first object to compare.</param>\n        /// <param name=\"right\">The second object to compare.</param>\n        /// <returns>true if <paramref name=\"left\"/> and <paramref name=\"right\"/> are not equal; otherwise, false.</returns>\n        public static bool operator !=(GamePadTriggers left, GamePadTriggers right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Returns a value indicating whether this instance is equal to a specified object.\n        /// </summary>\n        /// <param name=\"obj\">An object to compare to this instance.</param>\n        /// <returns>true if <paramref name=\"obj\"/> is a <see cref=\"GamePadTriggers\"/> and has the same value as this instance; otherwise, false.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is GamePadTriggers) && (this == (GamePadTriggers)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadTriggers\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (Left.GetHashCode() * 397) ^ Right.GetHashCode();\n            }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadTriggers\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.GamePadTriggers\"/>.</returns>\n        public override string ToString()\n        {\n            return \"[GamePadTriggers: Left=\" + Left + \", Right=\" + Right + \"]\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/GamePadType.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Defines a type of gamepad.\n    /// </summary>\n    public enum GamePadType\n    {\n        /// <summary>\n        /// Unknown.\n        /// </summary>\n        Unknown,\n\n        /// <summary>\n        /// GamePad is the Xbox controller.\n        /// </summary>\n        GamePad,\n\n        /// <summary>\n        /// GamePad is a wheel.\n        /// </summary>\n        Wheel,\n\n        /// <summary>\n        /// GamePad is an arcade stick.\n        /// </summary>\n        ArcadeStick,\n\n        /// <summary>\n        /// GamePad is a flight stick.\n        /// </summary>\n        FlightStick,\n\n        /// <summary>\n        /// GamePad is a dance pad.\n        /// </summary>\n        DancePad,\n\n        /// <summary>\n        /// GamePad is a guitar.\n        /// </summary>\n        Guitar,\n\n        /// <summary>\n        /// GamePad is an alternate guitar.\n        /// </summary>\n        AlternateGuitar,\n\n        /// <summary>\n        /// GamePad is a drum kit.\n        /// </summary>\n        DrumKit,\n\n        /// <summary>\n        /// GamePad is a big button pad.\n        /// </summary>\n        BigButtonPad = 768\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/InputFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public abstract class InputFactory\n    {\n        private volatile static InputFactory _current;\n\n        internal static InputFactory Current\n        {\n            get\n            {\n                InputFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (typeof(InputFactory))\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"InputFactory not found.\");\n                    Console.WriteLine(\"Initialize input with 'InputFactory.RegisterInputFactory(new ConcreteInputFactory());'.\");\n                    InputFactory inputFactory = CreateInputFactory();\n                    InputFactory.RegisterInputFactory(inputFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static InputFactory CreateInputFactory()\n        {\n            Console.WriteLine(\"Registering ConcreteInputFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.Input.ConcreteInputFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(InputFactory)) && !type.IsAbstract)\n                    return (InputFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterInputFactory(InputFactory inputFactory)\n        {\n            if (inputFactory == null)\n                throw new NullReferenceException(\"inputFactory\");\n\n            lock (typeof(InputFactory))\n            {\n                if (_current == null)\n                    _current = inputFactory;\n                else\n                    throw new InvalidOperationException(\"inputFactory allready registered.\");\n            }\n        }\n\n        public abstract TouchPanelStrategy CreateTouchPanelStrategy();\n        public abstract GamePadStrategy CreateGamePadStrategy();\n        public abstract JoystickStrategy CreateJoystickStrategy();\n        public abstract KeyboardStrategy CreateKeyboardStrategy();\n        public abstract MouseStrategy CreateMouseStrategy();\n        public abstract MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType);\n        public abstract MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy);\n        public abstract KeyboardInputStrategy CreateKeyboardInputStrategy();\n        public abstract MessageBoxStrategy CreateMessageBoxStrategy();\n\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/InputKeyEventArgs.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    public class InputKeyEventArgs : EventArgs\n    {\n        /// <summary>\n        /// The key that was either pressed or released.\n        /// </summary>\n        public readonly Keys Key;\n\n        /// <summary>\n        /// Create a new keyboard input event\n        /// </summary>\n        /// <param name=\"key\">The key involved in this event</param>\n        public InputKeyEventArgs(Keys key)\n        {\n            Key = key;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Joystick.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public interface IJoystick\n    {\n        bool IsSupported { get; }\n        int LastConnectedIndex { get; }\n\n        JoystickCapabilities GetCapabilities(int index);\n        JoystickState GetState(int index);\n        void GetState(int index, ref JoystickState joystickState);\n    }\n\n    public interface IPlatformJoystick\n    {\n        T GetStrategy<T>() where T : JoystickStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary> \n    /// Allows interaction with joysticks. Unlike <see cref=\"GamePad\"/> the number of Buttons/Axes/DPads is not limited.\n    /// </summary>\n    public sealed class Joystick : IJoystick\n        , IPlatformJoystick\n    {\n        private static Joystick _current;\n\n        /// <summary>\n        /// Returns the current Keyboard instance.\n        /// </summary> \n        public static Joystick Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(Joystick))\n                {\n                    if (_current == null)\n                        _current = new Joystick();\n\n                    return _current;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the current platform supports reading raw joystick data.\n        /// </summary>\n        /// <value><c>true</c> if the current platform supports reading raw joystick data; otherwise, <c>false</c>.</value>\n        public static bool IsSupported\n        {\n            get { return ((IJoystick)Joystick.Current).IsSupported; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating the last joystick index connected to the system. If this value is less than 0, no joysticks are connected.\n        /// <para>The order joysticks are connected and disconnected determines their index.\n        /// As such, this value may be larger than 0 even if only one joystick is connected.\n        /// </para>\n        /// </summary>\n        public static int LastConnectedIndex\n        {\n            get { return ((IJoystick)Joystick.Current).LastConnectedIndex; }\n        }\n\n        /// <summary>\n        /// Gets the capabilities of the joystick.\n        /// </summary>\n        /// <param name=\"index\">Index of the joystick you want to access.</param>\n        /// <returns>The capabilities of the joystick.</returns>\n        public static JoystickCapabilities GetCapabilities(int index)\n        {\n            return ((IJoystick)Joystick.Current).GetCapabilities(index);\n        }\n\n        /// <summary>\n        /// Gets the current state of the joystick.\n        /// </summary>\n        /// <param name=\"index\">Index of the joystick you want to access.</param>\n        /// <returns>The state of the joystick.</returns>\n        public static JoystickState GetState(int index)\n        {\n            return ((IJoystick)Joystick.Current).GetState(index);\n        }\n\n        /// <summary>\n        /// Gets the current state of the joystick by updating an existing <see cref=\"JoystickState\"/>.\n        /// </summary>\n        /// <param name=\"joystickState\">The <see cref=\"JoystickState\"/> to update.</param>\n        /// <param name=\"index\">Index of the joystick you want to access.</param>\n        public static void GetState(ref JoystickState joystickState, int index)\n        {\n            ((IJoystick)Joystick.Current).GetState(index, ref joystickState);\n        }\n\n        private JoystickStrategy _strategy;\n\n        T IPlatformJoystick.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private Joystick()\n        {\n            _strategy = InputFactory.Current.CreateJoystickStrategy();\n        }\n\n        #region IJoystick\n\n        bool IJoystick.IsSupported\n        {\n            get { return _strategy.PlatformIsSupported; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating the last joystick index connected to the system. If this value is less than 0, no joysticks are connected.\n        /// <para>The order joysticks are connected and disconnected determines their index.\n        /// As such, this value may be larger than 0 even if only one joystick is connected.\n        /// </para>\n        /// </summary>\n        int IJoystick.LastConnectedIndex\n        {\n            get { return _strategy.PlatformLastConnectedIndex; }\n        }\n\n        /// <summary>\n        /// Gets the capabilities of the joystick.\n        /// </summary>\n        /// <param name=\"index\">Index of the joystick you want to access.</param>\n        /// <returns>The capabilities of the joystick.</returns>\n        JoystickCapabilities IJoystick.GetCapabilities(int index)\n        {\n            return _strategy.PlatformGetCapabilities(index);\n        }\n\n        /// <summary>\n        /// Gets the current state of the joystick.\n        /// </summary>\n        /// <param name=\"index\">Index of the joystick you want to access.</param>\n        /// <returns>The state of the joystick.</returns>\n        JoystickState IJoystick.GetState(int index)\n        {\n            return _strategy.PlatformGetState(index);\n        }\n\n        /// <summary>\n        /// Gets the current state of the joystick by updating an existing <see cref=\"JoystickState\"/>.\n        /// </summary>\n        /// <param name=\"joystickState\">The <see cref=\"JoystickState\"/> to update.</param>\n        /// <param name=\"index\">Index of the joystick you want to access.</param>\n        void IJoystick.GetState(int index, ref JoystickState joystickState)\n        {\n            _strategy.PlatformGetState(index, ref joystickState);\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/JoystickCapabilities.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Describes joystick capabilities.\n    /// </summary>\n    public struct JoystickCapabilities\n    {\n        /// <summary>\n        /// Gets a value indicating whether the joystick is connected.\n        /// </summary>\n        /// <value><c>true</c> if the joystick is connected; otherwise, <c>false</c>.</value>\n        public bool IsConnected { get; internal set; }\n\n        /// <summary>\n        /// Gets the unique identifier of the joystick.\n        /// </summary>\n        /// <value>String representing the unique identifier of the joystick.</value>\n        public string Identifier { get; internal set; }\n\n        /// <summary>\n        /// Gets the joystick's display name.\n        /// </summary>\n        /// <value>String representing the display name of the joystick.</value>\n        public string DisplayName { get; internal set; }\n\n        /// <summary>\n        /// Gets a value indicating if the joystick is a gamepad.\n        /// </summary>\n        /// <value><c>true</c> if the joystick is a gamepad; otherwise, <c>false</c>.</value>\n        public bool IsGamepad { get; internal set; }\n\n        /// <summary>\n        /// Gets the axis count.\n        /// </summary>\n        /// <value>The number of axes that the joystick possesses.</value>\n        public int AxisCount { get; internal set; }\n\n        /// <summary>\n        /// Gets the button count.\n        /// </summary>\n        /// <value>The number of buttons that the joystick possesses.</value>\n        public int ButtonCount { get; internal set; }\n\n        /// <summary>\n        /// Gets the hat count.\n        /// </summary>\n        /// <value>The number of hats/dpads that the joystick possesses.</value>\n        public int HatCount { get; internal set; }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>\n        /// is equal to another specified <see cref=\"Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.JoystickCapabilities\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.JoystickCapabilities\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are equal; otherwise, <c>false</c>.</returns>\n        public static bool operator ==(JoystickCapabilities left, JoystickCapabilities right)\n        {\n            return left.IsConnected == right.IsConnected &&\n               left.Identifier == right.Identifier &&\n               left.IsGamepad == right.IsGamepad &&\n               left.AxisCount == right.AxisCount &&\n               left.ButtonCount == right.ButtonCount &&\n               left.HatCount == right.HatCount;\n        }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>\n        /// is not equal to another specified <see cref=\"Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.JoystickCapabilities\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.JoystickCapabilities\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are not equal; otherwise, <c>false</c>.</returns>\n        public static bool operator !=(JoystickCapabilities left, JoystickCapabilities right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"object\"/> is equal to the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"object\"/> to compare with the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>.</param>\n        /// <returns><c>true</c> if the specified <see cref=\"object\"/> is equal to the current\n        /// <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>; otherwise, <c>false</c>.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is JoystickCapabilities) && (this == (JoystickCapabilities)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickCapabilities\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            return Identifier.GetHashCode();\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickCapabilities\"/>.</returns>\n        public override string ToString()\n        {\n            return \"[JoystickCapabilities: IsConnected=\" + IsConnected + \", Identifier=\" + Identifier + \", DisplayName=\" + DisplayName + \", IsGamepad=\" + IsGamepad + \" , AxisCount=\" + AxisCount + \", ButtonCount=\" + ButtonCount + \", HatCount=\" + HatCount + \"]\";\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/JoystickHat.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Describes joystick hat state.\n    /// </summary>\n    public struct JoystickHat\n    {\n        private readonly Buttons _dPadButtons;\n\n        internal JoystickHat(Buttons dPadButtons)\n        {\n            this._dPadButtons = dPadButtons;\n        }\n\n\n        /// <summary>\n        /// Gets if joysticks hat \"down\" is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button is pressed otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Down { get { return (ButtonState)((int)(_dPadButtons & Buttons.DPadDown) >> 1); } }\n\n        /// <summary>\n        /// Gets if joysticks hat \"left\" is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button is pressed otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Left { get { return (ButtonState)((int)(_dPadButtons & Buttons.DPadLeft) >> 2); } }\n\n        /// <summary>\n        /// Gets if joysticks hat \"right\" is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button is pressed otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Right { get { return (ButtonState)((int)(_dPadButtons & Buttons.DPadRight) >> 3); } }\n\n        /// <summary>\n        /// Gets if joysticks hat \"up\" is pressed.\n        /// </summary>\n        /// <value><see cref=\"ButtonState.Pressed\"/> if the button is pressed otherwise, <see cref=\"ButtonState.Released\"/>.</value>\n        public ButtonState Up { get { return (ButtonState)((int)(_dPadButtons & Buttons.DPadUp) >> 0); } }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.JoystickHat\"/> is equal\n        /// to another specified <see cref=\"Microsoft.Xna.Framework.Input.JoystickHat\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.JoystickHat\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.JoystickHat\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are equal; otherwise, <c>false</c>.</returns>\n        public static bool operator ==(JoystickHat left, JoystickHat right)\n        {\n            return (left._dPadButtons == right._dPadButtons);\n        }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.JoystickHat\"/> is not\n        /// equal to another specified <see cref=\"Microsoft.Xna.Framework.Input.JoystickHat\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.JoystickHat\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.JoystickHat\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are not equal; otherwise, <c>false</c>.</returns>\n        public static bool operator !=(JoystickHat left, JoystickHat right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"object\"/> is equal to the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickHat\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"object\"/> to compare with the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickHat\"/>.</param>\n        /// <returns><c>true</c> if the specified <see cref=\"object\"/> is equal to the current\n        /// <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickHat\"/>; otherwise, <c>false</c>.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is JoystickHat) && (this == (JoystickHat)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickHat\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            int hash = 0;\n\n            hash |= (int)_dPadButtons;\n\n            return hash;\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickHat\"/> in a format of 0000 where each number represents a boolean value of each respecting object property: Left, Up, Right, Down.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickHat\"/>.</returns>\n        public override string ToString()\n        {\n            return string.Format(\"{{ Left: {0}, Up: {1}, Right: {2}, Down: {3} }}\",\n                (int)Left, (int)Up, (int)Right, (int)Down);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/JoystickState.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Linq;\nusing System.Text;\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Describes current joystick state.\n    /// </summary>\n    public struct JoystickState\n    {\n        /// <summary>\n        /// Gets a value indicating whether the joystick is connected.\n        /// </summary>\n        /// <value><c>true</c> if the joystick is connected; otherwise, <c>false</c>.</value>\n        public bool IsConnected { get; internal set; }\n\n        /// <summary>\n        /// Gets the joystick axis values.\n        /// </summary>\n        /// <value>An array list of ints that indicate axis values.</value>\n        public int[] Axes { get; internal set; }\n\n        /// <summary>\n        /// Gets the joystick button values.\n        /// </summary>\n        /// <value>An array list of ButtonState that indicate button values.</value>\n        public ButtonState[] Buttons { get; internal set; }\n\n        /// <summary>\n        /// Gets the joystick hat values.\n        /// </summary>\n        /// <value>An array list of <see cref=\"JoystickHat\"/> that indicate hat values.</value>\n        public JoystickHat[] Hats{ get; internal set; }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.JoystickState\"/> is\n        /// equal to another specified <see cref=\"Microsoft.Xna.Framework.Input.JoystickState\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.JoystickState\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.JoystickState\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are equal; otherwise, <c>false</c>.</returns>\n        public static bool operator ==(JoystickState left, JoystickState right)\n        {\n            return left.IsConnected == right.IsConnected\n                && left.Axes.SequenceEqual(right.Axes)\n                && left.Buttons.SequenceEqual(right.Buttons)\n                && left.Hats.SequenceEqual(right.Hats);\n        }\n\n        /// <summary>\n        /// Determines whether a specified instance of <see cref=\"Microsoft.Xna.Framework.Input.JoystickState\"/> is not\n        /// equal to another specified <see cref=\"Microsoft.Xna.Framework.Input.JoystickState\"/>.\n        /// </summary>\n        /// <param name=\"left\">The first <see cref=\"Microsoft.Xna.Framework.Input.JoystickState\"/> to compare.</param>\n        /// <param name=\"right\">The second <see cref=\"Microsoft.Xna.Framework.Input.JoystickState\"/> to compare.</param>\n        /// <returns><c>true</c> if <c>left</c> and <c>right</c> are not equal; otherwise, <c>false</c>.</returns>\n        public static bool operator !=(JoystickState left, JoystickState right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Determines whether the specified <see cref=\"object\"/> is equal to the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickState\"/>.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"object\"/> to compare with the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickState\"/>.</param>\n        /// <returns><c>true</c> if the specified <see cref=\"object\"/> is equal to the current\n        /// <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickState\"/>; otherwise, <c>false</c>.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is JoystickState) && (this == (JoystickState)obj);\n        }\n\n        /// <summary>\n        /// Serves as a hash function for a <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickState\"/> object.\n        /// </summary>\n        /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a\n        /// hash table.</returns>\n        public override int GetHashCode()\n        {\n            int hash = 0;\n\n            if (IsConnected)\n            {\n                unchecked\n                {\n                    foreach (var axis in Axes)\n                        hash = (hash * 397) ^ axis;\n\n                    for (int i = 0; i < Buttons.Length; i++)\n                        hash = hash ^ ((int)Buttons[i] << (i % 32));\n\n                    foreach (var hat in Hats)\n                        hash = (hash * 397) ^ hat.GetHashCode();\n                }\n            }\n\n            return hash;\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickState\"/>.\n        /// </summary>\n        /// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:Microsoft.Xna.Framework.Input.JoystickState\"/>.</returns>\n        public override string ToString()\n        {\n            StringBuilder ret = new StringBuilder(54 - 2 + Axes.Length * 7 + Buttons.Length + Hats.Length * 5);\n            ret.Append(\"[JoystickState: IsConnected=\" + (IsConnected ? 1 : 0));\n\n            if (IsConnected)\n            {\n                ret.Append(\", Axes=\");\n                foreach (var axis in Axes)\n                    ret.Append((axis > 0 ? \"+\" : \"\") + axis.ToString(\"00000\") + \" \");\n                ret.Length--;\n\n                ret.Append(\", Buttons=\");\n                foreach (var button in Buttons)\n                    ret.Append((int)button);\n\n                ret.Append(\", Hats=\");\n                foreach (var hat in Hats)\n                    ret.Append(hat + \" \");\n                ret.Length--;\n            }\n\n            ret.Append(\"]\");\n            return ret.ToString();\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/JoystickStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public abstract class JoystickStrategy\n    {\n        public abstract bool PlatformIsSupported { get; }\n        public abstract int PlatformLastConnectedIndex { get; }\n\n        public abstract JoystickCapabilities PlatformGetCapabilities(int index);\n        public abstract JoystickState PlatformGetState(int index);\n        public abstract void PlatformGetState(int index, ref JoystickState joystickState);\n\n        protected JoystickCapabilities CreateJoystickCapabilities(\n            bool isConnected, string displayName, string identifier,\n            bool isGamepad, int axisCount, int buttonCount, int hatCount)\n        {\n            JoystickCapabilities caps = new JoystickCapabilities();\n            caps.IsConnected = isConnected;\n            caps.DisplayName = displayName;\n            caps.Identifier = identifier;\n            caps.IsGamepad = isGamepad;\n            caps.AxisCount = axisCount;\n            caps.ButtonCount = buttonCount;\n            caps.HatCount = hatCount;\n\n            return caps;\n        }\n\n        protected JoystickState CreateJoystickState(bool isConnected, int[] axes, ButtonState[] buttons, JoystickHat[] hats)\n        {\n            JoystickState state = new JoystickState();\n            state.IsConnected = isConnected;\n            state.Axes = axes;\n            state.Buttons = buttons;\n            state.Hats = hats;\n\n            return state;\n        }\n\n        protected JoystickHat CreateJoystickHat(Buttons dPadButtons)\n        {\n            return new JoystickHat(dPadButtons);\n        }\n\n        /// <summary>\n        /// A default <see cref=\"JoystickState\"/>.\n        /// </summary>\n        protected static JoystickState DefaultJoystickState = new JoystickState\n        {\n            IsConnected = false,\n            Axes = new int[0],\n            Buttons = new ButtonState[0],\n            Hats = new JoystickHat[0]\n        };\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/KeyState.cs",
    "content": "#region License\n// /*\n// Microsoft Public License (Ms-PL)\n// MonoGame - Copyright © 2009 The MonoGame Team\n// \n// All rights reserved.\n// \n// This license governs use of the accompanying software. If you use the software, you accept this license. If you do not\n// accept the license, do not use the software.\n// \n// 1. Definitions\n// The terms \"reproduce, \" \"reproduction,  \" \"derivative works,  \" and \"distribution\" have the same meaning here as under \n// U.S. copyright law.\n// \n// A \"contribution\" is the original software, or any additions or changes to the software.\n// A \"contributor\" is any person that distributes its contribution under this license.\n// \"Licensed patents\" are a contributor's patent claims that read directly on its contribution.\n// \n// 2. Grant of Rights\n// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3,  \n// each contributor grants you a non-exclusive, worldwide,  royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\n// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3,  \n// each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make,  have made, use,  sell, offer for sale, import,  and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\n// \n// 3. Conditions and Limitations\n// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.\n// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, \n// your patent license from such contributor to the software ends automatically.\n// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution \n// notices that are present in the software.\n// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including \n// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object \n// code form, you may only do so under a license that complies with this license.\n// (E) The software is licensed \"as-is.\" You bear the risk of using it. The contributors give no express warranties, guarantees\n// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent\n// permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular\n// purpose and non-infringement.\n// */\n#endregion License\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Identifies the state of a keyboard key.\n    /// </summary>\n    public enum KeyState\n    {\n        /// <summary>\n        /// Key is released.\n        /// </summary>\n        Up,\n\n        /// <summary>\n        /// Key is pressed.\n        /// </summary>\n        Down,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Keyboard.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public interface IKeyboard\n    {\n        KeyboardState GetState();\n    }\n\n    public interface IPlatformKeyboard\n    {\n        T GetStrategy<T>() where T : KeyboardStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Allows getting keystrokes from keyboard.\n    /// </summary>\n    public sealed class Keyboard : IKeyboard\n        , IPlatformKeyboard\n    {\n        private static Keyboard _current;\n\n        /// <summary>\n        /// Returns the current Keyboard instance.\n        /// </summary> \n        public static Keyboard Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(Keyboard))\n                {\n                    if (_current == null)\n                        _current = new Keyboard();\n\n                    return _current;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Returns the current keyboard state.\n        /// </summary>\n        /// <returns>Current keyboard state.</returns>\n        public static KeyboardState GetState()\n        {\n            return ((IKeyboard)Keyboard.Current).GetState();\n        }\n        \n        /// <summary>\n        /// Returns the current keyboard state for a given player.\n        /// </summary>\n        /// <param name=\"playerIndex\">Player index of the keyboard.</param>\n        /// <returns>Current keyboard state.</returns>\n        [Obsolete(\"Use GetState() instead. In future versions this method can be removed.\")]\n        public static KeyboardState GetState(PlayerIndex playerIndex)\n        {\n            return ((IKeyboard)Keyboard.Current).GetState();\n        }\n\n        private KeyboardStrategy _strategy;\n\n        T IPlatformKeyboard.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private Keyboard()\n        {\n            _strategy = InputFactory.Current.CreateKeyboardStrategy();\n        }\n\n\n        #region IKeyboard\n\n        KeyboardState IKeyboard.GetState()\n        {\n            return _strategy.PlatformGetState();\n        }\n\n        #endregion IKeyboard\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/KeyboardInput.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public interface IKeyboardInput\n    {\n        bool IsVisible { get; }\n\n#if !NET40\n        Task<string> Show(string title, string description, string defaultText = \"\", bool usePasswordMode = false);\n#endif\n        void Cancel(string result);\n    }\n\n    public interface IPlatformKeyboardInput\n    {\n        T GetStrategy<T>() where T : KeyboardInputStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    public sealed class KeyboardInput : IKeyboardInput\n        , IPlatformKeyboardInput\n    {\n        private static KeyboardInput _current;\n\n        /// <summary>\n        /// Returns the current Mouse instance.\n        /// </summary> \n        public static KeyboardInput Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(KeyboardInput))\n                {\n                    if (_current == null)\n                        _current = new KeyboardInput();\n\n                    return _current;\n                }\n            }\n        }\n\n\n        public static bool IsVisible\n        {\n            get { return ((IKeyboardInput)KeyboardInput.Current).IsVisible; } \n        }\n\n#if !NET40\n        /// <summary>\n        /// Displays the keyboard input interface asynchronously.\n        /// </summary>\n        /// <param name=\"title\">Title of the dialog box.</param>\n        /// <param name=\"description\">Description of the dialog box.</param>\n        /// <param name=\"defaultText\">Default text displayed in the input area.</param>\n        /// <param name=\"usePasswordMode\">If password mode is enabled, the characters entered are not displayed.</param>\n        /// <returns>Text entered by the player. Null if back was used.</returns>\n        /// <exception cref=\"System.Exception\">Thrown when the message box is already visible</exception>\n        /// <example>\n        /// <code>\n        /// var name = await KeyboardInput.Show(\"Name\", \"What's your name?\", \"Player\");\n        /// </code>\n        /// </example>\n        public static async Task<string> Show(string title, string description, string defaultText = \"\", bool usePasswordMode = false)\n        {\n            return await ((IKeyboardInput)KeyboardInput.Current).Show(title, description, defaultText, usePasswordMode);\n        }\n#endif\n\n        /// <summary>\n        /// Hides the keyboard input interface and returns the parameter as the result of <see cref=\"Show\"/>\n        /// </summary>\n        /// <param name=\"result\">Result to return</param>\n        /// <exception cref=\"System.Exception\">Thrown when the keyboard input is not visible</exception>\n        /// <example>\n        /// <code>\n        /// var nameTask = KeyboardInput.Show(\"Name\", \"What's your name?\", \"Player\");\n        /// KeyboardInput.Cancel(\"John Doe\");\n        /// var name = await nameTask;\n        /// </code>\n        /// </example>\n        public static void Cancel(string result)\n        {\n            ((IKeyboardInput)KeyboardInput.Current).Cancel(result);\n        }\n\n        private KeyboardInputStrategy _strategy;\n\n        T IPlatformKeyboardInput.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private KeyboardInput()\n        {\n            _strategy = InputFactory.Current.CreateKeyboardInputStrategy();\n        }\n\n\n        #region IKeyboardInput\n\n        private bool _isVisible;\n\n        bool IKeyboardInput.IsVisible\n        {\n            get { return _isVisible; }\n        }\n\n#if !NET40\n        async Task<string> IKeyboardInput.Show(string title, string description, string defaultText = \"\", bool usePasswordMode = false)\n        {\n            if (IsVisible)\n                throw new Exception(\"The function cannot be completed at this time: the KeyboardInput UI is already active. Wait until KeyboardInput.IsVisible is false before issuing this call.\");\n\n            _isVisible = true;\n\n            string result = await _strategy.PlatformShow(title, description, defaultText, usePasswordMode);\n\n            _isVisible = false;\n\n            return result;\n        }\n#endif\n\n        void IKeyboardInput.Cancel(string result)\n        {\n            if (!IsVisible)\n                throw new Exception(\"The function cannot be completed at this time: the MessageBox UI is not active.\");\n\n            _strategy.PlatformCancel(result);\n        }\n\n        #endregion IKeyboardInput\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/KeyboardInputStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public abstract class KeyboardInputStrategy\n    {\n        public abstract void PlatformCancel(string result);\n        public abstract Task<string> PlatformShow(string title, string description, string defaultText, bool usePasswordMode);\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/KeyboardState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Holds the state of keystrokes by a keyboard.\n    /// </summary>\n    public struct KeyboardState\n    {\n        private const byte CapsLockBit = 1;\n        private const byte NumLockBit  = 2;\n\n        // Used for the common situation where GetPressedKeys will return an empty array\n        private static Keys[] _empty = new Keys[0];\n\n        #region Key Data\n\n        // Array of 256 bits:\n        private uint _keys0, _keys1, _keys2, _keys3, _keys4, _keys5, _keys6, _keys7;\n        private byte _modifiers;\n\n        bool InternalGetKey(Keys key)\n        {\n            uint mask = (uint)1 << (((int)key) & 0x1f);\n\n            uint element;\n            switch (((int)key) >> 5)\n            {\n                case 0: element = _keys0; break;\n                case 1: element = _keys1; break;\n                case 2: element = _keys2; break;\n                case 3: element = _keys3; break;\n                case 4: element = _keys4; break;\n                case 5: element = _keys5; break;\n                case 6: element = _keys6; break;\n                case 7: element = _keys7; break;\n                default: element = 0; break;\n            }\n\n            return (element & mask) != 0;\n        }\n\n        internal void InternalSetKey(Keys key)\n        {\n            uint mask = (uint)1 << (((int)key) & 0x1f);\n            switch (((int)key) >> 5)\n            {\n                case 0: _keys0 |= mask; break;\n                case 1: _keys1 |= mask; break;\n                case 2: _keys2 |= mask; break;\n                case 3: _keys3 |= mask; break;\n                case 4: _keys4 |= mask; break;\n                case 5: _keys5 |= mask; break;\n                case 6: _keys6 |= mask; break;\n                case 7: _keys7 |= mask; break;\n            }\n        }\n\n        internal void InternalResetKey(Keys key)\n        {\n            uint mask = (uint)1 << (((int)key) & 0x1f);\n            switch (((int)key) >> 5)\n            {\n                case 0: _keys0 &= ~mask; break;\n                case 1: _keys1 &= ~mask; break;\n                case 2: _keys2 &= ~mask; break;\n                case 3: _keys3 &= ~mask; break;\n                case 4: _keys4 &= ~mask; break;\n                case 5: _keys5 &= ~mask; break;\n                case 6: _keys6 &= ~mask; break;\n                case 7: _keys7 &= ~mask; break;\n            }\n        }\n\n        internal void InternalResetKeys()\n        {\n            _keys0 = 0;\n            _keys1 = 0;\n            _keys2 = 0;\n            _keys3 = 0;\n            _keys4 = 0;\n            _keys5 = 0;\n            _keys6 = 0;\n            _keys7 = 0;\n        }\n\n        #endregion\n\n\n        #region XNA Interface\n\n        internal KeyboardState(List<Keys> keys, bool capsLock = false, bool numLock = false) : this()\n        {\n            _keys0 = 0;\n            _keys1 = 0;\n            _keys2 = 0;\n            _keys3 = 0;\n            _keys4 = 0;\n            _keys5 = 0;\n            _keys6 = 0;\n            _keys7 = 0;\n            _modifiers = (byte)(0 | (capsLock ? CapsLockBit : 0) | (numLock ? NumLockBit : 0));\n\n            if (keys != null)\n            {\n                for (int i = 0; i < keys.Count; i++)\n                    InternalSetKey(keys[i]);\n            }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"KeyboardState\"/> class.\n        /// </summary>\n        /// <param name=\"keys\">List of keys to be flagged as pressed on initialization.</param>\n        /// <param name=\"capsLock\">Caps Lock state.</param>\n        /// <param name=\"numLock\">Num Lock state.</param>\n        public KeyboardState(Keys[] keys, bool capsLock = false, bool numLock = false) : this()\n        {\n            _keys0 = 0;\n            _keys1 = 0;\n            _keys2 = 0;\n            _keys3 = 0;\n            _keys4 = 0;\n            _keys5 = 0;\n            _keys6 = 0;\n            _keys7 = 0;\n            _modifiers = (byte)(0 | (capsLock ? CapsLockBit : 0) | (numLock ? NumLockBit : 0));\n\n            if (keys != null)\n            {\n                for (int i = 0; i < keys.Length; i++)\n                    InternalSetKey(keys[i]);\n            }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"KeyboardState\"/> class.\n        /// </summary>\n        /// <param name=\"keys\">List of keys to be flagged as pressed on initialization.</param>\n        public KeyboardState(params Keys[] keys) : this()\n        {\n            _keys0 = 0;\n            _keys1 = 0;\n            _keys2 = 0;\n            _keys3 = 0;\n            _keys4 = 0;\n            _keys5 = 0;\n            _keys6 = 0;\n            _keys7 = 0;\n            _modifiers = 0;\n\n            if (keys != null)\n            {\n                for (int i = 0; i < keys.Length; i++)\n                    InternalSetKey(keys[i]);\n            }\n        }\n\n        /// <summary>\n        /// Gets the current state of the Caps Lock key.\n        /// </summary>\n        public bool CapsLock\n        {\n            get { return (_modifiers & CapsLockBit) > 0; }\n        }\n\n        /// <summary>\n        /// Gets the current state of the Num Lock key.\n        /// </summary>\n        public bool NumLock\n        {\n            get { return (_modifiers & NumLockBit) > 0; }\n        }\n\n        /// <summary>\n        /// Returns the state of a specified key.\n        /// </summary>\n        /// <param name=\"key\">The key to query.</param>\n        /// <returns>The state of the key.</returns>\n        public KeyState this[Keys key]\n        {\n            get { return InternalGetKey(key) ? KeyState.Down : KeyState.Up; }\n        }\n\n        /// <summary>\n        /// Gets whether given key is currently being pressed.\n        /// </summary>\n        /// <param name=\"key\">The key to query.</param>\n        /// <returns>true if the key is pressed; false otherwise.</returns>\n        public bool IsKeyDown(Keys key)\n        {\n            return InternalGetKey(key);\n        }\n\n        /// <summary>\n        /// Gets whether given key is currently being not pressed.\n        /// </summary>\n        /// <param name=\"key\">The key to query.</param>\n        /// <returns>true if the key is not pressed; false otherwise.</returns>\n        public bool IsKeyUp(Keys key)\n        {\n            return !InternalGetKey(key);\n        }\n\n        #endregion\n\n\n        #region GetPressedKeys()\n\n        /// <summary>\n        /// Returns the number of pressed keys in this <see cref=\"KeyboardState\"/>.\n        /// </summary>\n        /// <returns>An integer representing the number of keys currently pressed in this <see cref=\"KeyboardState\"/>.</returns>\n        public int GetPressedKeyCount()\n        {\n            uint count = CountBits(_keys0) + CountBits(_keys1) + CountBits(_keys2) + CountBits(_keys3)\n                       + CountBits(_keys4) + CountBits(_keys5) + CountBits(_keys6) + CountBits(_keys7);\n            return (int)count;\n        }\n\n        private static uint CountBits(uint v)\n        {\n            // http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel\n            v = v - ((v >> 1) & 0x55555555);                    // reuse input as temporary\n            v = (v & 0x33333333) + ((v >> 2) & 0x33333333);     // temp\n            return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count\n        }\n\n        private static int AddKeysToArray(uint keys, int offset, Keys[] pressedKeys, int index)\n        {\n            for (int i = 0; i < 32; i++)\n            {\n                if ((keys & (1 << i)) != 0)\n                    pressedKeys[index++] = (Keys)(offset + i);\n            }\n            return index;\n        }\n\n        /// <summary>\n        /// Returns an array of values holding keys that are currently being pressed.\n        /// </summary>\n        /// <returns>The keys that are currently being pressed.</returns>\n        public Keys[] GetPressedKeys()\n        {\n            uint count = CountBits(_keys0) + CountBits(_keys1) + CountBits(_keys2) + CountBits(_keys3)\n                       + CountBits(_keys4) + CountBits(_keys5) + CountBits(_keys6) + CountBits(_keys7);\n\n            if (count == 0)\n                return _empty;\n\n            Keys[] keys = new Keys[count];\n\n            int index = 0;\n            if (_keys0 != 0) index = AddKeysToArray(_keys0, 0 * 32, keys, index);\n            if (_keys1 != 0) index = AddKeysToArray(_keys1, 1 * 32, keys, index);\n            if (_keys2 != 0) index = AddKeysToArray(_keys2, 2 * 32, keys, index);\n            if (_keys3 != 0) index = AddKeysToArray(_keys3, 3 * 32, keys, index);\n            if (_keys4 != 0) index = AddKeysToArray(_keys4, 4 * 32, keys, index);\n            if (_keys5 != 0) index = AddKeysToArray(_keys5, 5 * 32, keys, index);\n            if (_keys6 != 0) index = AddKeysToArray(_keys6, 6 * 32, keys, index);\n            if (_keys7 != 0) index = AddKeysToArray(_keys7, 7 * 32, keys, index);\n\n            return keys;\n        }\n\n        /// <summary>\n        /// Fills an array of values holding keys that are currently being pressed.\n        /// </summary>\n        /// <param name=\"keys\">The keys array to fill.\n        /// This array is not cleared, and it must be equal to or larger than the number of keys pressed.</param>\n        public void GetPressedKeys(Keys[] keys)\n        {\n            if (keys == null)\n                throw new System.ArgumentNullException(\"keys\");\n\n            uint count = CountBits(_keys0) + CountBits(_keys1) + CountBits(_keys2) + CountBits(_keys3)\n                       + CountBits(_keys4) + CountBits(_keys5) + CountBits(_keys6) + CountBits(_keys7);\n            if (count > keys.Length)\n            {\n                throw new System.ArgumentOutOfRangeException(\"keys\",\n                    \"The supplied array cannot fit the number of pressed keys. Call GetPressedKeyCount() to get the number of pressed keys.\");\n            }\n\n            int index = 0;\n            if (_keys0 != 0 && index < keys.Length) index = AddKeysToArray(_keys0, 0 * 32, keys, index);\n            if (_keys1 != 0 && index < keys.Length) index = AddKeysToArray(_keys1, 1 * 32, keys, index);\n            if (_keys2 != 0 && index < keys.Length) index = AddKeysToArray(_keys2, 2 * 32, keys, index);\n            if (_keys3 != 0 && index < keys.Length) index = AddKeysToArray(_keys3, 3 * 32, keys, index);\n            if (_keys4 != 0 && index < keys.Length) index = AddKeysToArray(_keys4, 4 * 32, keys, index);\n            if (_keys5 != 0 && index < keys.Length) index = AddKeysToArray(_keys5, 5 * 32, keys, index);\n            if (_keys6 != 0 && index < keys.Length) index = AddKeysToArray(_keys6, 6 * 32, keys, index);\n            if (_keys7 != 0 && index < keys.Length) index = AddKeysToArray(_keys7, 7 * 32, keys, index);\n        }\n\n        #endregion\n\n\n        #region Object and Equality\n\n        /// <summary>\n        /// Gets the hash code for <see cref=\"KeyboardState\"/> instance.\n        /// </summary>\n        /// <returns>Hash code of the object.</returns>\n        public override int GetHashCode()\n        {\n            return (int)(_keys0 ^ _keys1 ^ _keys2 ^ _keys3 ^ _keys4 ^ _keys5 ^ _keys6 ^ _keys7);\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"KeyboardState\"/> instances are equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"KeyboardState\"/> instance to the left of the equality operator.</param>\n        /// <param name=\"right\"><see cref=\"KeyboardState\"/> instance to the right of the equality operator.</param>\n        /// <returns>true if the instances are equal; false otherwise.</returns>\n        public static bool operator ==(KeyboardState left, KeyboardState right)\n        {\n            return left._keys0 == right._keys0\n                && left._keys1 == right._keys1\n                && left._keys2 == right._keys2\n                && left._keys3 == right._keys3\n                && left._keys4 == right._keys4\n                && left._keys5 == right._keys5\n                && left._keys6 == right._keys6\n                && left._keys7 == right._keys7;\n        }\n\n        /// <summary>\n        /// Compares whether two <see cref=\"KeyboardState\"/> instances are not equal.\n        /// </summary>\n        /// <param name=\"left\"><see cref=\"KeyboardState\"/> instance to the left of the inequality operator.</param>\n        /// <param name=\"right\"><see cref=\"KeyboardState\"/> instance to the right of the inequality operator.</param>\n        /// <returns>true if the instances are different; false otherwise.</returns>\n        public static bool operator !=(KeyboardState left, KeyboardState right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified object.\n        /// </summary>\n        /// <param name=\"obj\">The <see cref=\"KeyboardState\"/> to compare.</param>\n        /// <returns>true if the provided <see cref=\"KeyboardState\"/> instance is same with current; false otherwise.</returns>\n        public override bool Equals(object obj)\n        {\n            return (obj is KeyboardState && this == (KeyboardState)obj);\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/KeyboardStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public abstract class KeyboardStrategy\n    {\n        public abstract KeyboardState PlatformGetState();\n\n        protected KeyboardState CreateKeyboardState(List<Keys> keys, bool capsLock = false, bool numLock = false)\n        {\n            return new KeyboardState(keys, capsLock, numLock);\n        }\n\n        protected void InternalSetKey(ref KeyboardState keyboardState, Keys key)\n        {\n            keyboardState.InternalSetKey(key);\n        }\n\n        protected void InternalResetKey(ref KeyboardState keyboardState, Keys key)\n        {\n            keyboardState.InternalResetKey(key);\n        }\n\n        protected void InternalResetKeys(ref KeyboardState keyboardState)\n        {\n            keyboardState.InternalResetKeys();\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Keys.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Defines the keys on a keyboard.\n    /// </summary>\t\n    public enum Keys\n    {\n        /// <summary>\n        /// Reserved.\n        /// </summary>\n        None = 0,\n        /// <summary>\n        /// BACKSPACE key.\n        /// </summary>\n        Back = 8,\n        /// <summary>\n        /// TAB key.\n        /// </summary>\n        Tab = 9,\n        /// <summary>\n        /// ENTER key.\n        /// </summary>\n        Enter = 13,\n        /// <summary>\n        /// CAPS LOCK key.\n        /// </summary>\n        CapsLock = 20,\n        /// <summary>\n        /// ESC key.\n        /// </summary>\n        Escape = 27,\n        /// <summary>\n        /// SPACEBAR key.\n        /// </summary>\n        Space = 32,\n        /// <summary>\n        /// PAGE UP key.\n        /// </summary>\n        PageUp = 33,\n        /// <summary>\n        /// PAGE DOWN key.\n        /// </summary>\n        PageDown = 34,\n        /// <summary>\n        /// END key.\n        /// </summary>\n        End = 35,\n        /// <summary>\n        /// HOME key.\n        /// </summary>\n        Home = 36,\n        /// <summary>\n        /// LEFT ARROW key.\n        /// </summary>\n        Left = 37,\n        /// <summary>\n        /// UP ARROW key.\n        /// </summary>\n        Up = 38,\n        /// <summary>\n        /// RIGHT ARROW key.\n        /// </summary>\n        Right = 39,\n        /// <summary>\n        /// DOWN ARROW key.\n        /// </summary>\n        Down = 40,\n        /// <summary>\n        /// SELECT key.\n        /// </summary>\n        Select = 41,\n        /// <summary>\n        /// PRINT key.\n        /// </summary>\n        Print = 42,\n        /// <summary>\n        /// EXECUTE key.\n        /// </summary>\n        Execute = 43,\n        /// <summary>\n        /// PRINT SCREEN key.\n        /// </summary>\n        PrintScreen = 44,\n        /// <summary>\n        /// INS key.\n        /// </summary>\n        Insert = 45,\n        /// <summary>\n        /// DEL key.\n        /// </summary>\n        Delete = 46,\n        /// <summary>\n        /// HELP key.\n        /// </summary>\n        Help = 47,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D0 = 48,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D1 = 49,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D2 = 50,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D3 = 51,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D4 = 52,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D5 = 53,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D6 = 54,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D7 = 55,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D8 = 56,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        D9 = 57,\n        /// <summary>\n        /// A key.\n        /// </summary>\n        A = 65,\n        /// <summary>\n        /// B key.\n        /// </summary>\n        B = 66,\n        /// <summary>\n        /// C key.\n        /// </summary>\n        C = 67,\n        /// <summary>\n        /// D key.\n        /// </summary>\n        D = 68,\n        /// <summary>\n        /// E key.\n        /// </summary>\n        E = 69,\n        /// <summary>\n        /// F key.\n        /// </summary>\n        F = 70,\n        /// <summary>\n        /// G key.\n        /// </summary>\n        G = 71,\n        /// <summary>\n        /// H key.\n        /// </summary>\n        H = 72,\n        /// <summary>\n        /// I key.\n        /// </summary>\n        I = 73,\n        /// <summary>\n        /// J key.\n        /// </summary>\n        J = 74,\n        /// <summary>\n        /// K key.\n        /// </summary>\n        K = 75,\n        /// <summary>\n        /// L key.\n        /// </summary>\n        L = 76,\n        /// <summary>\n        /// M key.\n        /// </summary>\n        M = 77,\n        /// <summary>\n        /// N key.\n        /// </summary>\n        N = 78,\n        /// <summary>\n        /// O key.\n        /// </summary>\n        O = 79,\n        /// <summary>\n        /// P key.\n        /// </summary>\n        P = 80,\n        /// <summary>\n        /// Q key.\n        /// </summary>\n        Q = 81,\n        /// <summary>\n        /// R key.\n        /// </summary>\n        R = 82,\n        /// <summary>\n        /// S key.\n        /// </summary>\n        S = 83,\n        /// <summary>\n        /// T key.\n        /// </summary>\n        T = 84,\n        /// <summary>\n        /// U key.\n        /// </summary>\n        U = 85,\n        /// <summary>\n        /// V key.\n        /// </summary>\n        V = 86,\n        /// <summary>\n        /// W key.\n        /// </summary>\n        W = 87,\n        /// <summary>\n        /// X key.\n        /// </summary>\n        X = 88,\n        /// <summary>\n        /// Y key.\n        /// </summary>\n        Y = 89,\n        /// <summary>\n        /// Z key.\n        /// </summary>\n        Z = 90,\n        /// <summary>\n        /// Left Windows key.\n        /// </summary>\n        LeftWindows = 91,\n        /// <summary>\n        /// Right Windows key.\n        /// </summary>\n        RightWindows = 92,\n        /// <summary>\n        /// Applications key.\n        /// </summary>\n        Apps = 93,\n        /// <summary>\n        /// Computer Sleep key.\n        /// </summary>\n        Sleep = 95,\n        /// <summary>\n        /// Numeric keypad 0 key.\n        /// </summary>\n        NumPad0 = 96,\n        /// <summary>\n        /// Numeric keypad 1 key.\n        /// </summary>\n        NumPad1 = 97,\n        /// <summary>\n        /// Numeric keypad 2 key.\n        /// </summary>\n        NumPad2 = 98,\n        /// <summary>\n        /// Numeric keypad 3 key.\n        /// </summary>\n        NumPad3 = 99,\n        /// <summary>\n        /// Numeric keypad 4 key.\n        /// </summary>\n        NumPad4 = 100,\n        /// <summary>\n        /// Numeric keypad 5 key.\n        /// </summary>\n        NumPad5 = 101,\n        /// <summary>\n        /// Numeric keypad 6 key.\n        /// </summary>\n        NumPad6 = 102,\n        /// <summary>\n        /// Numeric keypad 7 key.\n        /// </summary>\n        NumPad7 = 103,\n        /// <summary>\n        /// Numeric keypad 8 key.\n        /// </summary>\n        NumPad8 = 104,\n        /// <summary>\n        /// Numeric keypad 9 key.\n        /// </summary>\n        NumPad9 = 105,\n        /// <summary>\n        /// Multiply key.\n        /// </summary>\n        Multiply = 106,\n        /// <summary>\n        /// Add key.\n        /// </summary>\n        Add = 107,\n        /// <summary>\n        /// Separator key.\n        /// </summary>\n        Separator = 108,\n        /// <summary>\n        /// Subtract key.\n        /// </summary>\n        Subtract = 109,\n        /// <summary>\n        /// Decimal key.\n        /// </summary>\n        Decimal = 110,\n        /// <summary>\n        /// Divide key.\n        /// </summary>\n        Divide = 111,\n        /// <summary>\n        /// F1 key.\n        /// </summary>\n        F1 = 112,\n        /// <summary>\n        /// F2 key.\n        /// </summary>\n        F2 = 113,\n        /// <summary>\n        /// F3 key.\n        /// </summary>\n        F3 = 114,\n        /// <summary>\n        /// F4 key.\n        /// </summary>\n        F4 = 115,\n        /// <summary>\n        /// F5 key.\n        /// </summary>\n        F5 = 116,\n        /// <summary>\n        /// F6 key.\n        /// </summary>\n        F6 = 117,\n        /// <summary>\n        /// F7 key.\n        /// </summary>\n        F7 = 118,\n        /// <summary>\n        /// F8 key.\n        /// </summary>\n        F8 = 119,\n        /// <summary>\n        /// F9 key.\n        /// </summary>\n        F9 = 120,\n        /// <summary>\n        /// F10 key.\n        /// </summary>\n        F10 = 121,\n        /// <summary>\n        /// F11 key.\n        /// </summary>\n        F11 = 122,\n        /// <summary>\n        /// F12 key.\n        /// </summary>\n        F12 = 123,\n        /// <summary>\n        /// F13 key.\n        /// </summary>\n        F13 = 124,\n        /// <summary>\n        /// F14 key.\n        /// </summary>\n        F14 = 125,\n        /// <summary>\n        /// F15 key.\n        /// </summary>\n        F15 = 126,\n        /// <summary>\n        /// F16 key.\n        /// </summary>\n        F16 = 127,\n        /// <summary>\n        /// F17 key.\n        /// </summary>\n        F17 = 128,\n        /// <summary>\n        /// F18 key.\n        /// </summary>\n        F18 = 129,\n        /// <summary>\n        /// F19 key.\n        /// </summary>\n        F19 = 130,\n        /// <summary>\n        /// F20 key.\n        /// </summary>\n        F20 = 131,\n        /// <summary>\n        /// F21 key.\n        /// </summary>\n        F21 = 132,\n        /// <summary>\n        /// F22 key.\n        /// </summary>\n        F22 = 133,\n        /// <summary>\n        /// F23 key.\n        /// </summary>\n        F23 = 134,\n        /// <summary>\n        /// F24 key.\n        /// </summary>\n        F24 = 135,\n        /// <summary>\n        /// NUM LOCK key.\n        /// </summary>\n        NumLock = 144,\n        /// <summary>\n        /// SCROLL LOCK key.\n        /// </summary>\n        Scroll = 145,\n        /// <summary>\n        /// Left SHIFT key.\n        /// </summary>\n        LeftShift = 160,\n        /// <summary>\n        /// Right SHIFT key.\n        /// </summary>\n        RightShift = 161,\n        /// <summary>\n        /// Left CONTROL key.\n        /// </summary>\n        LeftControl = 162,\n        /// <summary>\n        /// Right CONTROL key.\n        /// </summary>\n        RightControl = 163,\n        /// <summary>\n        /// Left ALT key.\n        /// </summary>\n        LeftAlt = 164,\n        /// <summary>\n        /// Right ALT key.\n        /// </summary>\n        RightAlt = 165,\n        /// <summary>\n        /// Browser Back key.\n        /// </summary>\n        BrowserBack = 166,\n        /// <summary>\n        /// Browser Forward key.\n        /// </summary>\n        BrowserForward = 167,\n        /// <summary>\n        /// Browser Refresh key.\n        /// </summary>\n        BrowserRefresh = 168,\n        /// <summary>\n        /// Browser Stop key.\n        /// </summary>\n        BrowserStop = 169,\n        /// <summary>\n        /// Browser Search key.\n        /// </summary>\n        BrowserSearch = 170,\n        /// <summary>\n        /// Browser Favorites key.\n        /// </summary>\n        BrowserFavorites = 171,\n        /// <summary>\n        /// Browser Start and Home key.\n        /// </summary>\n        BrowserHome = 172,\n        /// <summary>\n        /// Volume Mute key.\n        /// </summary>\n        VolumeMute = 173,\n        /// <summary>\n        /// Volume Down key.\n        /// </summary>\n        VolumeDown = 174,\n        /// <summary>\n        /// Volume Up key.\n        /// </summary>\n        VolumeUp = 175,\n        /// <summary>\n        /// Next Track key.\n        /// </summary>\n        MediaNextTrack = 176,\n        /// <summary>\n        /// Previous Track key.\n        /// </summary>\n        MediaPreviousTrack = 177,\n        /// <summary>\n        /// Stop Media key.\n        /// </summary>\n        MediaStop = 178,\n        /// <summary>\n        /// Play/Pause Media key.\n        /// </summary>\n        MediaPlayPause = 179,\n        /// <summary>\n        /// Start Mail key.\n        /// </summary>\n        LaunchMail = 180,\n        /// <summary>\n        /// Select Media key.\n        /// </summary>\n        SelectMedia = 181,\n        /// <summary>\n        /// Start Application 1 key.\n        /// </summary>\n        LaunchApplication1 = 182,\n        /// <summary>\n        /// Start Application 2 key.\n        /// </summary>\n        LaunchApplication2 = 183,\n        /// <summary>\n        /// The OEM Semicolon key on a US standard keyboard.\n        /// </summary>\n        OemSemicolon = 186,\n        /// <summary>\n        /// For any country/region, the '+' key.\n        /// </summary>\n        OemPlus = 187,\n        /// <summary>\n        /// For any country/region, the ',' key.\n        /// </summary>\n        OemComma = 188,\n        /// <summary>\n        /// For any country/region, the '-' key.\n        /// </summary>\n        OemMinus = 189,\n        /// <summary>\n        /// For any country/region, the '.' key.\n        /// </summary>\n        OemPeriod = 190,\n        /// <summary>\n        /// The OEM question mark key on a US standard keyboard.\n        /// </summary>\n        OemQuestion = 191,\n        /// <summary>\n        /// The OEM tilde key on a US standard keyboard.\n        /// </summary>\n        OemTilde = 192,\n        /// <summary>\n        /// The OEM open bracket key on a US standard keyboard.\n        /// </summary>\n        OemOpenBrackets = 219,\n        /// <summary>\n        /// The OEM pipe key on a US standard keyboard.\n        /// </summary>\n        OemPipe = 220,\n        /// <summary>\n        /// The OEM close bracket key on a US standard keyboard.\n        /// </summary>\n        OemCloseBrackets = 221,\n        /// <summary>\n        /// The OEM singled/double quote key on a US standard keyboard.\n        /// </summary>\n        OemQuotes = 222,\n        /// <summary>\n        /// Used for miscellaneous characters; it can vary by keyboard.\n        /// </summary>\n        Oem8 = 223,\n        /// <summary>\n        /// The OEM angle bracket or backslash key on the RT 102 key keyboard.\n        /// </summary>\n        OemBackslash = 226,\n        /// <summary>\n        /// IME PROCESS key.\n        /// </summary>\n        ProcessKey = 229,\n        /// <summary>\n        /// Attn key.\n        /// </summary>\n        Attn = 246,\n        /// <summary>\n        /// CrSel key.\n        /// </summary>\n        Crsel = 247,\n        /// <summary>\n        /// ExSel key.\n        /// </summary>\n        Exsel = 248,\n        /// <summary>\n        /// Erase EOF key.\n        /// </summary>\n        EraseEof = 249,\n        /// <summary>\n        /// Play key.\n        /// </summary>\n        Play = 250,\n        /// <summary>\n        /// Zoom key.\n        /// </summary>\n        Zoom = 251,\n        /// <summary>\n        /// PA1 key.\n        /// </summary>\n        Pa1 = 253,\n        /// <summary>\n        /// CLEAR key.\n        /// </summary>\n        OemClear = 254,\n        /// <summary>\n        /// Green ChatPad key.\n        /// </summary>\n        ChatPadGreen = 0xCA,\n        /// <summary>\n        /// Orange ChatPad key.\n        /// </summary>\n        ChatPadOrange = 0xCB,\n        /// <summary>\n        /// PAUSE key.\n        /// </summary>\n        Pause = 0x13,\n        /// <summary>\n        /// IME Convert key.\n        /// </summary>\n        ImeConvert = 0x1c,\n        /// <summary>\n        /// IME NoConvert key.\n        /// </summary>\n        ImeNoConvert = 0x1d,\n        /// <summary>\n        /// Kana key on Japanese keyboards.\n        /// </summary>\n        Kana = 0x15,\n        /// <summary>\n        /// Kanji key on Japanese keyboards.\n        /// </summary>\n        Kanji = 0x19,\n        /// <summary>\n        /// OEM Auto key.\n        /// </summary>\n        OemAuto = 0xf3,\n        /// <summary>\n        /// OEM Copy key.\n        /// </summary>\n        OemCopy = 0xf2,\n        /// <summary>\n        /// OEM Enlarge Window key.\n        /// </summary>\n        OemEnlW = 0xf4\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/MessageBox.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public interface IMessageBox\n    {\n        bool IsVisible { get; }\n\n#if !NET40\n        Task<int?> Show(string title, string description, IEnumerable<string> buttons);\n#endif\n        void Cancel(int? result);\n\n\n    }\n\n    public interface IPlatformMessageBox\n    {\n        T GetStrategy<T>() where T : MessageBoxStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input\n{\n\n    public sealed partial class MessageBox : IMessageBox\n        , IPlatformMessageBox\n    {\n        private static MessageBox _current;\n\n        /// <summary>\n        /// Returns the current Mouse instance.\n        /// </summary> \n        public static MessageBox Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(MessageBox))\n                {\n                    if (_current == null)\n                        _current = new MessageBox();\n\n                    return _current;\n                }\n            }\n        }\n\n\n        public static bool IsVisible\n        {\n            get { return ((IMessageBox)MessageBox.Current).IsVisible; }\n        }\n\n#if !NET40\n        /// <summary>\n        /// Displays the message box interface asynchronously.\n        /// </summary>\n        /// <param name=\"title\">Title of the message box.</param>\n        /// <param name=\"description\">Description of the message box.</param>\n        /// <param name=\"buttons\">Captions of the message box buttons. Up to three supported.</param>\n        /// <returns>Index of button selected by the player. Null if back was used.</returns>\n        /// <exception cref=\"System.Exception\">Thrown when the message box is already visible</exception>\n        /// <example>\n        /// <code>\n        /// var color = await MessageBox.Show(\"Color\", \"What's your favorite color?\", new[] { \"Red\", \"Green\", \"Blue\" });\n        /// </code>\n        /// </example>\n        public static async Task<int?> Show(string title, string description, IEnumerable<string> buttons)\n        {\n            return await ((IMessageBox)MessageBox.Current).Show(title, description, buttons);\n        }\n#endif\n\n        /// <summary>\n        /// Hides the message box interface and returns the parameter as the result of <see cref=\"Show\"/>\n        /// </summary>\n        /// <param name=\"result\">Result to return</param>\n        /// <exception cref=\"System.Exception\">Thrown when the message box is not visible</exception>\n        /// <example>\n        /// <code>\n        /// var colorTask = MessageBox.Show(\"Color\", \"What's your favorite color?\", new[] { \"Red\", \"Green\", \"Blue\" });\n        /// MessageBox.Cancel(0);\n        /// var color = await colorTask;\n        /// </code>\n        /// </example>\n        public static void Cancel(int? result)\n        {\n            ((IMessageBox)MessageBox.Current).Cancel(result);\n        }\n\n\n        private MessageBoxStrategy _strategy;\n\n        T IPlatformMessageBox.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private MessageBox()\n        {\n            _strategy = InputFactory.Current.CreateMessageBoxStrategy();\n        }\n\n        #region IMessageBox\n\n        private static bool _isVisible;\n\n        bool IMessageBox.IsVisible\n        {\n            get { return _isVisible; }\n        }\n\n#if !NET40\n        async Task<int?> IMessageBox.Show(string title, string description, IEnumerable<string> buttons)\n        {\n            if (IsVisible)\n                throw new Exception(\"The function cannot be completed at this time: the MessageBox UI is already active. Wait until MessageBox.IsVisible is false before issuing this call.\");\n\n            _isVisible = true;\n\n            List<string> buttonsList = buttons.ToList();\n            if (buttonsList.Count > 3 || buttonsList.Count == 0)\n                throw new ArgumentException(\"Invalid number of buttons: one to three required\", \"buttons\");\n\n            int? result = await _strategy.PlatformShow(title, description, buttonsList);\n\n            _isVisible = false;\n\n            return result;\n        }\n#endif\n\n        void IMessageBox.Cancel(int? result)\n        {\n            if (!IsVisible)\n                throw new Exception(\"The function cannot be completed at this time: the MessageBox UI is not active.\");\n\n            _strategy.PlatformCancel(result);\n        }\n\n        #endregion IMessageBox\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/MessageBoxStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public abstract class MessageBoxStrategy\n    {\n        public abstract void PlatformCancel(int? result);\n        public abstract Task<int?> PlatformShow(string title, string description, List<string> buttonsList);\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Mouse.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021-2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public interface IMouse\n    {\n        IntPtr WindowHandle { get; set; }\n        bool IsRawInputAvailable { get; }\n\n        MouseState GetState();\n        void SetPosition(int x, int y);\n        void SetCursor(MouseCursor cursor);\n    }\n\n    public interface IPlatformMouse\n    {\n        T GetStrategy<T>() where T : MouseStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Allows reading position and button click information from mouse.\n    /// </summary>\n    public sealed class Mouse : IMouse\n        , IPlatformMouse\n    {\n        private static Mouse _current;\n\n        private MouseCursor _mouseCursor;\n\n        /// <summary>\n        /// Returns the current Mouse instance.\n        /// </summary> \n        public static Mouse Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(Mouse))\n                {\n                    if (_current == null)\n                        _current = new Mouse();\n\n                    return _current;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the window handle for current mouse processing.\n        /// </summary> \n        public static IntPtr WindowHandle\n        {\n            get { return ((IMouse)Mouse.Current).WindowHandle; }\n            set { ((IMouse)Mouse.Current).WindowHandle = value; }\n        }\n\n        /// <summary>\n        /// Gets if RawInput is available.\n        /// </summary>\n        public static bool IsRawInputAvailable\n        {\n            get { return ((IMouse)Mouse.Current).IsRawInputAvailable; }\n        }\n\n        /// <summary>\n        /// Gets mouse state information that includes position and button presses\n        /// for the primary window\n        /// </summary>\n        /// <returns>Current state of the mouse.</returns>\n        public static MouseState GetState()\n        {\n            return ((IMouse)Mouse.Current).GetState();\n        }\n\n        /// <summary>\n        /// Sets mouse cursor's relative position to game-window.\n        /// </summary>\n        /// <param name=\"x\">Relative horizontal position of the cursor.</param>\n        /// <param name=\"y\">Relative vertical position of the cursor.</param>\n        public static void SetPosition(int x, int y)\n        {\n            ((IMouse)Mouse.Current).SetPosition(x, y);\n        }\n\n        /// <summary>\n        /// Sets the cursor image to the specified MouseCursor.\n        /// </summary>\n        /// <param name=\"cursor\">Mouse cursor to use for the cursor image.</param>\n        public static void SetCursor(MouseCursor cursor)\n        {\n            ((IMouse)Mouse.Current).SetCursor(cursor);\n        }\n\n        private MouseStrategy _strategy;\n\n        T IPlatformMouse.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private Mouse()\n        {\n            _strategy = InputFactory.Current.CreateMouseStrategy();\n        }\n\n\n        #region IMouse\n\n        IntPtr IMouse.WindowHandle\n        {\n            get { return _strategy.PlatformGetWindowHandle(); }\n            set { _strategy.PlatformSetWindowHandle(value); }\n        }\n\n        bool IMouse.IsRawInputAvailable\n        {\n            get { return _strategy.PlatformIsRawInputAvailable(); }\n        }\n\n        MouseState IMouse.GetState()\n        {\n            return _strategy.PlatformGetState();\n        }\n\n        void IMouse.SetPosition(int x, int y)\n        {\n            _strategy.PlatformSetPosition(x, y);\n        }\n\n        void IMouse.SetCursor(MouseCursor cursor)\n        {\n            _strategy.PlatformSetCursor(cursor);\n            _mouseCursor = cursor;\n        }\n\n        #endregion IMouse\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/MouseCursor.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public interface IPlatformMouseCursor\n    {\n        T GetStrategy<T>() where T : MouseCursorStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Describes a mouse cursor.\n    /// </summary>\n    public class MouseCursor : IDisposable\n        , IPlatformMouseCursor\n    {\n        private MouseCursorStrategy _strategy;\n\n        /// <summary>\n        /// Gets the default arrow cursor.\n        /// </summary>\n        public static MouseCursor Arrow { get; private set; }\n\n        /// <summary>\n        /// Gets the cursor that appears when the mouse is over text editing regions.\n        /// </summary>\n        public static MouseCursor IBeam { get; private set; }\n\n        /// <summary>\n        /// Gets the waiting cursor that appears while the application/system is busy.\n        /// </summary>\n        public static MouseCursor Wait { get; private set; }\n\n        /// <summary>\n        /// Gets the crosshair (\"+\") cursor.\n        /// </summary>\n        public static MouseCursor Crosshair { get; private set; }\n\n        /// <summary>\n        /// Gets the cross between Arrow and Wait cursors.\n        /// </summary>\n        public static MouseCursor WaitArrow { get; private set; }\n\n        /// <summary>\n        /// Gets the northwest/southeast (\"\\\") cursor.\n        /// </summary>\n        public static MouseCursor SizeNWSE { get; private set; }\n\n        /// <summary>\n        /// Gets the northeast/southwest (\"/\") cursor.\n        /// </summary>\n        public static MouseCursor SizeNESW { get; private set; }\n\n        /// <summary>\n        /// Gets the horizontal west/east (\"-\") cursor.\n        /// </summary>\n        public static MouseCursor SizeWE { get; private set; }\n\n        /// <summary>\n        /// Gets the vertical north/south (\"|\") cursor.\n        /// </summary>\n        public static MouseCursor SizeNS { get; private set; }\n\n        /// <summary>\n        /// Gets the size all cursor which points in all directions.\n        /// </summary>\n        public static MouseCursor SizeAll { get; private set; }\n\n        /// <summary>\n        /// Gets the cursor that points that something is invalid, usually a cross.\n        /// </summary>\n        public static MouseCursor No { get; private set; }\n\n        /// <summary>\n        /// Gets the hand cursor, usually used for web links.\n        /// </summary>\n        public static MouseCursor Hand { get; private set; }\n\n\n        static MouseCursor()\n        {\n            Arrow     = new MouseCursor(MouseCursorStrategy.MouseCursorType.Arrow);\n            IBeam     = new MouseCursor(MouseCursorStrategy.MouseCursorType.IBeam);\n            Wait      = new MouseCursor(MouseCursorStrategy.MouseCursorType.Wait);\n            Crosshair = new MouseCursor(MouseCursorStrategy.MouseCursorType.Crosshair);\n            WaitArrow = new MouseCursor(MouseCursorStrategy.MouseCursorType.WaitArrow);\n            SizeNWSE  = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeNWSE);\n            SizeNESW  = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeNESW);\n            SizeWE    = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeWE);\n            SizeNS    = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeNS);\n            SizeAll   = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeAll);\n            No        = new MouseCursor(MouseCursorStrategy.MouseCursorType.No);\n            Hand      = new MouseCursor(MouseCursorStrategy.MouseCursorType.Hand);\n        }\n\n        T IPlatformMouseCursor.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private MouseCursor(MouseCursorStrategy.MouseCursorType cursorType)\n        {\n            _strategy = InputFactory.Current.CreateMouseCursorStrategy(cursorType);\n        }\n\n        public MouseCursor(byte[] data, int w, int h, int originx, int originy)\n        {\n            _strategy = InputFactory.Current.CreateMouseCursorStrategy(data, w, h, originx, originy);\n        }\n\n        /// <summary>\n        /// Creates a mouse cursor from the specified texture.\n        /// </summary>\n        /// <param name=\"texture\">Texture to use as the cursor image.</param>\n        /// <param name=\"originx\">X cordinate of the image that will be used for mouse position.</param>\n        /// <param name=\"originy\">Y cordinate of the image that will be used for mouse position.</param>\n        public static MouseCursor FromTexture2D(Texture2D texture, int originx, int originy)\n        {\n            if (texture.Format != SurfaceFormat.Color && texture.Format != SurfaceFormat.ColorSRgb && texture.Format != SurfaceFormat.ColorSRgba)\n                throw new ArgumentException(\"Only Color or ColorSrgb textures are accepted for mouse cursors\", \"texture\");\n\n            int w = texture.Width;\n            int h = texture.Height;\n            byte[] data = new byte[w * h * 4];\n            texture.GetData(data);\n\n            return new MouseCursor(data, w, h, originx, originy);\n        }\n\n        public IntPtr Handle { get { return _strategy.Handle; } }\n\n\n        #region IDisposable\n\n        ~MouseCursor()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n                if (_strategy.IsBuildInMouseCursor)\n                throw new InvalidOperationException(\"Disposing Stock MouseCursors is not allowed.\");\n\n                if (_strategy != null)\n                {\n                    _strategy.Dispose();\n                    _strategy = null;\n                }\n            }\n\n        }\n\n        #endregion IDisposable\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/MouseCursorStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public class MouseCursorStrategy : IDisposable\n    {\n        protected MouseCursorStrategy.MouseCursorType _cursorType;\n        protected IntPtr _handle;\n\n        public bool IsBuildInMouseCursor\n        {\n            get { return _cursorType != MouseCursorStrategy.MouseCursorType.User; }\n        }\n\n        public IntPtr Handle\n        {\n            get { return _handle; }\n        }\n\n\n        #region IDisposable\n\n        ~MouseCursorStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool dispose)\n        {\n            if (dispose)\n            {\n               \n            }\n\n            _cursorType = (MouseCursorStrategy.MouseCursorType)0;\n            _handle = IntPtr.Zero;\n        }\n\n        #endregion IDisposable\n\n        public enum MouseCursorType\n        {\n            Arrow = 1,\n            IBeam,\n            Wait,\n            Crosshair,\n            WaitArrow,\n            SizeNWSE,\n            SizeNESW,\n            SizeWE,\n            SizeNS,\n            SizeAll,\n            No,\n            Hand,\n\n            User = 0x80\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/MouseState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2021 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Represents a mouse state with cursor position and button press information.\n    /// </summary>\n    public struct MouseState\n    {\n        private const int LeftButtonBit = 0;\n        private const int MiddleButtonBit = 1;\n        private const int RightButtonBit = 2;\n        private const int XButton1Bit = 3;\n        private const int XButton2Bit = 4;\n\n        private int _x;\n        private int _y;\n        private int _scrollWheelValue;\n        private int _horizontalScrollWheelValue;\n        private int _rawX;\n        private int _rawY;\n        private int _buttons;\n\n        /// <summary>\n        /// Initializes a new instance of the MouseState.\n        /// </summary>\n        /// <param name=\"x\">Horizontal position of the mouse in relation to the window.</param>\n        /// <param name=\"y\">Vertical position of the mouse in relation to the window.</param>\n        /// <param name=\"scrollWheel\">Mouse scroll wheel's value.</param>\n        /// <param name=\"leftButton\">Left mouse button's state.</param>\n        /// <param name=\"middleButton\">Middle mouse button's state.</param>\n        /// <param name=\"rightButton\">Right mouse button's state.</param>\n        /// <param name=\"xButton1\">XBUTTON1's state.</param>\n        /// <param name=\"xButton2\">XBUTTON2's state.</param>\n        /// <remarks>Normally <see cref=\"Mouse.GetState()\"/> should be used to get mouse current state. The constructor is provided for simulating mouse input.</remarks>\n        public MouseState(\n            int x,\n            int y,\n            int scrollWheel,\n            ButtonState leftButton,\n            ButtonState middleButton,\n            ButtonState rightButton,\n            ButtonState xButton1,\n            ButtonState xButton2)\n        {\n            _x = x;\n            _y = y;\n            _scrollWheelValue = scrollWheel;\n            _horizontalScrollWheelValue = 0;\n            _rawX = 0;\n            _rawY = 0;\n            _buttons = (int)leftButton << LeftButtonBit |\n                       (int)middleButton << MiddleButtonBit |\n                       (int)rightButton << RightButtonBit |\n                       (int)xButton1 << XButton1Bit |\n                       (int)xButton2 << XButton2Bit; ;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the MouseState.\n        /// </summary>\n        /// <param name=\"x\">Horizontal position of the mouse in relation to the window.</param>\n        /// <param name=\"y\">Vertical position of the mouse in relation to the window.</param>\n        /// <param name=\"scrollWheel\">Mouse scroll wheel's value.</param>\n        /// <param name=\"horizontalScrollWheel\">Mouse horizontal scroll wheel's value.</param>\n        /// <param name=\"rawX\">Mouse rawX value.</param>\n        /// <param name=\"rawY\">Mouse rawY value.</param>\n        /// <param name=\"leftButton\">Left mouse button's state.</param>\n        /// <param name=\"middleButton\">Middle mouse button's state.</param>\n        /// <param name=\"rightButton\">Right mouse button's state.</param>\n        /// <param name=\"xButton1\">XBUTTON1's state.</param>\n        /// <param name=\"xButton2\">XBUTTON2's state.</param>\n        /// <remarks>Normally <see cref=\"Mouse.GetState()\"/> should be used to get mouse current state. The constructor is provided for simulating mouse input.</remarks>\n        public MouseState(\n            int x,\n            int y,\n            int scrollWheel,\n            int horizontalScrollWheel,\n            int rawX, int rawY,\n            ButtonState leftButton,\n            ButtonState middleButton,\n            ButtonState rightButton,\n            ButtonState xButton1,\n            ButtonState xButton2)\n        {\n            _x = x;\n            _y = y;\n            _scrollWheelValue = scrollWheel;\n            _horizontalScrollWheelValue = horizontalScrollWheel;\n            _rawX = rawX;\n            _rawY = rawY;\n            _buttons = (int)leftButton << LeftButtonBit |\n                       (int)middleButton << MiddleButtonBit |\n                       (int)rightButton << RightButtonBit |\n                       (int)xButton1 << XButton1Bit |\n                       (int)xButton2 << XButton2Bit;\n        }\n\n        /// <summary>\n        /// Compares whether two MouseState instances are equal.\n        /// </summary>\n        /// <param name=\"left\">MouseState instance on the left of the equal sign.</param>\n        /// <param name=\"right\">MouseState instance  on the right of the equal sign.</param>\n        /// <returns>true if the instances are equal; false otherwise.</returns>\n        public static bool operator ==(MouseState left, MouseState right)\n        {\n            return left._x == right._x &&\n                   left._y == right._y &&\n                   left._scrollWheelValue == right._scrollWheelValue &&\n                   left._horizontalScrollWheelValue == right._horizontalScrollWheelValue &&\n                   left.RawX == right.RawX &&\n                   left.RawY == right.RawY &&\n                   left._buttons == right._buttons;\n        }\n\n        /// <summary>\n        /// Compares whether two MouseState instances are not equal.\n        /// </summary>\n        /// <param name=\"left\">MouseState instance on the left of the equal sign.</param>\n        /// <param name=\"right\">MouseState instance  on the right of the equal sign.</param>\n        /// <returns>true if the objects are not equal; false otherwise.</returns>\n        public static bool operator !=(MouseState left, MouseState right)\n        {\n            return !(left == right);\n        }\n\n        /// <summary>\n        /// Compares whether current instance is equal to specified object.\n        /// </summary>\n        /// <param name=\"obj\">The MouseState to compare.</param>\n        /// <returns></returns>\n        public override bool Equals(object obj)\n        {\n            if (obj is MouseState)\n                return this == (MouseState)obj;\n            return false;\n        }\n\n        /// <summary>\n        /// Gets the hash code for MouseState instance.\n        /// </summary>\n        /// <returns>Hash code of the object.</returns>\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = _x;\n                hashCode = (hashCode * 397) ^ _y;\n                hashCode = (hashCode * 397) ^ _scrollWheelValue;\n                hashCode = (hashCode * 397) ^ _horizontalScrollWheelValue;\n                hashCode = (hashCode * 397) ^ RawX.GetHashCode();\n                hashCode = (hashCode * 397) ^ RawY.GetHashCode();\n                hashCode = (hashCode * 397) ^ _buttons;\n                return hashCode;\n            }\n        }\n\n        /// <summary>\n        /// Returns a string describing the mouse state.\n        /// </summary>\n        public override string ToString()\n        {\n            string buttons;\n            if (_buttons == 0)\n                buttons = \"None\";\n            else\n            {\n                buttons = string.Empty;\n                if (LeftButton == ButtonState.Pressed)\n                {\n                    if (buttons.Length > 0)\n                        buttons += \" Left\";\n                    else\n                        buttons += \"Left\";\n                }\n                if (RightButton == ButtonState.Pressed)\n                {\n                    if (buttons.Length > 0)\n                        buttons += \" Right\";\n                    else\n                        buttons += \"Right\";\n                }\n                if (MiddleButton == ButtonState.Pressed)\n                {\n                    if (buttons.Length > 0)\n                        buttons += \" Middle\";\n                    else\n                        buttons += \"Middle\";\n                }\n                if (XButton1 == ButtonState.Pressed)\n                {\n                    if (buttons.Length > 0)\n                        buttons += \" XButton1\";\n                    else\n                        buttons += \"XButton1\";\n                }\n                if (XButton2 == ButtonState.Pressed)\n                {\n                    if (buttons.Length > 0)\n                        buttons += \" XButton2\";\n                    else\n                        buttons += \"XButton2\";\n                }\n            }\n\n            return  \"[MouseState X=\" + _x +\n                    \", Y=\" + _y +\n                    \", Buttons=\" + buttons +\n                    \", Wheel=\" + _scrollWheelValue +\n                    \", HWheel=\" + _horizontalScrollWheelValue +\n                    \"]\";\n        }\n\n        /// <summary>\n        /// Gets horizontal position of the cursor in relation to the window.\n        /// </summary>\n        public int X\n        {\n            get { return _x; }\n            internal set { _x = value; }\n        }\n\n        /// <summary>\n        /// Gets vertical position of the cursor in relation to the window.\n        /// </summary>\n        public int Y\n        {\n            get { return _y; }\n            internal set { _y = value; }\n        }\n\n        /// <summary>\n        /// Gets cursor position.\n        /// </summary>\n        public Point Position\n        {\n            get { return new Point(_x, _y); }\n        }\n\n        /// <summary>\n        /// Returns cumulative scroll wheel value since the game start.\n        /// </summary>\n        public int ScrollWheelValue\n        {\n            get { return _scrollWheelValue; }\n            internal set { _scrollWheelValue = value; }\n        }\n\n        /// <summary>\n        /// Returns the cumulative horizontal scroll wheel value since the game start\n        /// </summary>\n        public int HorizontalScrollWheelValue\n        {\n            get { return _horizontalScrollWheelValue; }\n            internal set { _horizontalScrollWheelValue = value; }\n        }\n        \n        /// <summary>\n        /// Gets cursor raw X input.\n        /// </summary>        \n        public int RawX\n        {\n            get { return _rawX; }\n            internal set { _rawX = value; }\n        }\n\n        /// <summary>\n        /// Gets cursor raw X input.\n        /// </summary>        \n        public int RawY\n        {\n            get { return _rawY; }\n            internal set { _rawY = value; }\n        }\n\n        /// <summary>\n        /// Gets state of the left mouse button.\n        /// </summary>\n        public ButtonState LeftButton\n        {\n            get { return (ButtonState)((_buttons >> LeftButtonBit) & 1); }\n            internal set { _buttons = _buttons & (~(1 << LeftButtonBit)) | (int)value << LeftButtonBit; }\n        }\n\n        /// <summary>\n        /// Gets state of the middle mouse button.\n        /// </summary>\n        public ButtonState MiddleButton\n        {\n            get { return (ButtonState)((_buttons >> MiddleButtonBit) & 1); }\n            internal set { _buttons = _buttons & (~(1 << MiddleButtonBit)) | (int)value << MiddleButtonBit; }\n        }\n\n        /// <summary>\n        /// Gets state of the right mouse button.\n        /// </summary>\n        public ButtonState RightButton\n        {\n            get { return (ButtonState)((_buttons >> RightButtonBit) & 1); }\n            internal set { _buttons = _buttons & (~(1 << RightButtonBit)) | (int)value << RightButtonBit; }\n        }\n\n        /// <summary>\n        /// Gets state of the XButton1.\n        /// </summary>\n        public ButtonState XButton1\n        {\n            get { return (ButtonState)((_buttons >> XButton1Bit) & 1); }\n            internal set { _buttons = _buttons & (~(1 << XButton1Bit)) | (int)value << XButton1Bit; }\n        }\n\n        /// <summary>\n        /// Gets state of the XButton2.\n        /// </summary>\n        public ButtonState XButton2\n        {\n            get { return (ButtonState)((_buttons >> XButton2Bit) & 1); }\n            internal set { _buttons = _buttons & (~(1 << XButton2Bit)) | (int)value << XButton2Bit; }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/MouseStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Input;\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public abstract class MouseStrategy\n    {\n        public abstract IntPtr PlatformGetWindowHandle();\n        public abstract void PlatformSetWindowHandle(IntPtr value);\n        public abstract bool PlatformIsRawInputAvailable();\n        public abstract MouseState PlatformGetState();\n        public abstract void PlatformSetPosition(int x, int y);\n        public abstract void PlatformSetCursor(MouseCursor cursor);\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/TextInputEventArgs.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// This class is used in the <see cref=\"GameWindow.TextInput\"/> event as <see cref=\"EventArgs\"/>.\n    /// </summary>\n    public class TextInputEventArgs : InputKeyEventArgs\n    {\n        /// <summary>\n        /// The character for the key that was pressed.\n        /// </summary>\n        public readonly char Character;\n        \n        public TextInputEventArgs(Keys key, char character)\n            : base(key)\n        {\n            Character = character;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/GestureLocationData.cs",
    "content": "// Copyright (C)2025 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n\n    internal struct GestureLocationData : IEquatable<GestureLocationData>\n    {\n        private int _id;\n\n        internal TouchLocationState _state;\n        internal Vector2 _position;\n\n        internal TouchLocationState _previousState;\n        internal Vector2 _previousPosition;\n\n        internal Vector2 _velocity;\n        private Vector2 _pressPosition;\n        private TimeSpan _pressTimestamp;\n        internal TimeSpan _timestamp;\n\n        internal int _framestamp;\n\n        /// <summary>\n        /// True if this touch was pressed and released on the same frame.\n        /// In this case we will keep it around for the user to get by GetState that frame.\n        /// However if they do not call GetState that frame, this touch will be forgotten.\n        /// </summary>\n        internal bool SameFrameReleased;\n\n        internal int Id { get { return _id; } }\n        internal TouchLocationState State { get { return _state; } }\n        internal Vector2 Position { get { return _position; } }\n\n        internal Vector2 Velocity { get { return _velocity; } }\n        internal Vector2 PressPosition { get { return _pressPosition; } }\n        internal TimeSpan PressTimestamp { get { return _pressTimestamp; } }\n        internal TimeSpan Timestamp { get { return _timestamp; } }\n        internal int Framestamp { get { return _framestamp; } }\n\n\n        internal GestureLocationData(int id, TouchLocationState state, Vector2 position, TimeSpan timestamp, int framestamp)\n        {\n            _id = id;\n            _state = state;\n            _position = position;\n\n            _previousState = TouchLocationState.Invalid;\n            _previousPosition = Vector2.Zero;\n\n            _timestamp = timestamp;\n            _framestamp = framestamp;\n            _velocity = Vector2.Zero;\n\n            Debug.Assert(state == TouchLocationState.Pressed);\n            _pressPosition = position;\n            _pressTimestamp = timestamp;\n\n            SameFrameReleased = false;\n        }\n\n        public bool TryGetPreviousLocationData(out GestureLocationData aPreviousLocation)\n        {\n            if (_previousState == TouchLocationState.Invalid)\n            {\n                aPreviousLocation._id = -1;\n                aPreviousLocation._state = TouchLocationState.Invalid;\n                aPreviousLocation._position = Vector2.Zero;\n                aPreviousLocation._previousState = TouchLocationState.Invalid;\n                aPreviousLocation._previousPosition = Vector2.Zero;\n                aPreviousLocation._timestamp = TimeSpan.Zero;\n                aPreviousLocation._framestamp = 0;\n                aPreviousLocation._pressPosition = Vector2.Zero;\n                aPreviousLocation._pressTimestamp = TimeSpan.Zero;\n                aPreviousLocation._velocity = Vector2.Zero;\n                aPreviousLocation.SameFrameReleased = false;\n                return false;\n            }\n\n            aPreviousLocation._id = _id;\n            aPreviousLocation._state = _previousState;\n            aPreviousLocation._position = _previousPosition;\n            aPreviousLocation._previousState = TouchLocationState.Invalid;\n            aPreviousLocation._previousPosition = Vector2.Zero;\n            aPreviousLocation._timestamp = _timestamp;\n            aPreviousLocation._framestamp = _framestamp;\n            aPreviousLocation._pressPosition = _pressPosition;\n            aPreviousLocation._pressTimestamp = _pressTimestamp;\n            aPreviousLocation._velocity = _velocity;\n            aPreviousLocation.SameFrameReleased = SameFrameReleased;\n\n            return true;\n        }\n\n        public override int GetHashCode()\n        {\n            return _id;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj is GestureLocationData)\n                return Equals((GestureLocationData)obj);\n\n            return false;\n        }\n\n        public bool Equals(GestureLocationData other)\n        {\n            return _id.Equals(other._id)\n                && _position.Equals(other._position)\n                && _previousPosition.Equals(other._previousPosition);\n        }\n\n        public static bool operator !=(GestureLocationData left, GestureLocationData right)\n        {\n            return left._id != right._id\n                || left._state != right._state\n                || left._position != right._position\n                || left._previousState != right._previousState\n                || left._previousPosition != right._previousPosition;\n        }\n\n        public static bool operator ==(GestureLocationData left, GestureLocationData right)\n        {\n            return left._id == right._id\n                && left._state == right._state\n                && left._position == right._position\n                && left._previousState == right._previousState\n                && left._previousPosition == right._previousPosition;\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{ Touch id: {0}, state: {1}, position: {2}, pressure: {3}, prevState: {4}, prevPosition: {5}, previousPressure: {6} }}\",\n                _id, _state, _position, 0f, _previousState, _previousPosition, 0f);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/GestureSample.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework;\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n    /// <summary>\n    /// Represents data from a multi-touch gesture over a span of time.\n    /// </summary>\n    public struct GestureSample\n    {\n        // attributes\n        private GestureType _gestureType;\n        private TimeSpan _timestamp;\n        private Vector2 _position;\n        private Vector2 _position2;\n        private Vector2 _delta;\n        private Vector2 _delta2;\n        \n        #region Properties\n\n        /// <summary>\n        /// Gets the type of the gesture.\n        /// </summary>\n        public GestureType GestureType\n        {\n            get\n            {\n                return this._gestureType;\n            }\n        }\n\n        /// <summary>\n        /// Gets the starting time for this multi-touch gesture sample.\n        /// </summary>\n        public TimeSpan Timestamp\n        {\n            get\n            {\n                return this._timestamp;\n            }\n        }\n\n        /// <summary>\n        /// Gets the position of the first touch-point in the gesture sample.\n        /// </summary>\n        public Vector2 Position\n        {\n            get\n            {\n                return this._position;\n            }\n        }\n\n        /// <summary>\n        /// Gets the position of the second touch-point in the gesture sample.\n        /// </summary>\n        public Vector2 Position2\n        {\n            get\n            {\n                return this._position2;\n            }\n        }\n\n        /// <summary>\n        /// Gets the delta information for the first touch-point in the gesture sample.\n        /// </summary>\n        public Vector2 Delta\n        {\n            get\n            {\n                return this._delta;\n            }\n        }\n\n        /// <summary>\n        /// Gets the delta information for the second touch-point in the gesture sample.\n        /// </summary>\n        public Vector2 Delta2\n        {\n            get\n            {\n                return this._delta2;\n            }\n        }\n        #endregion\n        \n        /// <summary>\n        /// Initializes a new <see cref=\"GestureSample\"/>.\n        /// </summary>\n        /// <param name=\"gestureType\"><see cref=\"GestureType\"/></param>\n        /// <param name=\"timestamp\"></param>\n        /// <param name=\"position\"></param>\n        /// <param name=\"position2\"></param>\n        /// <param name=\"delta\"></param>\n        /// <param name=\"delta2\"></param>\n        public GestureSample(GestureType gestureType, TimeSpan timestamp, Vector2 position, Vector2 position2, Vector2 delta, Vector2 delta2)\n        {\n            this._gestureType = gestureType;\n            this._timestamp = timestamp;\n            this._position = position;\n            this._position2 = position2;\n            this._delta = delta;\n            this._delta2 = delta2;\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/GestureType.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n    /// <summary>\n    /// Enumeration of values that represent different gestures that can be processed by <see cref=\"TouchPanel.ReadGesture\"/>.\n    /// </summary>\n    [Flags]\n    public enum GestureType\n    {\n        /// <summary>\n        /// No gestures.\n        /// </summary>\n        None = 0,\n        /// <summary>\n        /// The user touched a single point.\n        /// </summary>\n        Tap = 1,\n        /// <summary>\n        /// States completion of a drag gesture(VerticalDrag, HorizontalDrag, or FreeDrag).\n        /// </summary>\n        /// <remarks>No position or delta information is available for this sample.</remarks>\n        DragComplete = 2,\t\n        /// <summary>\n        /// States that a touch was combined with a quick swipe.\n        /// </summary>    \n        /// <remarks>Flicks does not contain position information. The velocity of it can be read from <see cref=\"GestureSample.Delta\"/></remarks>\n        Flick = 4,\n        /// <summary>\n        /// The user touched a point and then performed a free-form drag.\n        /// </summary>\n        FreeDrag = 8,\n        /// <summary>        \n        /// The user touched a single point for approximately one second.\n        /// </summary>\n        /// <remarks>As this is a single event, it will not be continuously fired while the user is holding the touch-point.</remarks>\n        Hold = 16,\n        /// <summary>\n        /// The user touched the screen and performed either left to right or right to left drag gesture.\n        /// </summary>\n        HorizontalDrag = 32,\n        /// <summary>\n        /// The user either converged or diverged two touch-points on the screen which is like a two-finger drag.\n        /// </summary>\n        /// <remarks>When this gesture-type is enabled and two fingers are down, it takes precedence over drag gestures.</remarks>\n        Pinch = 64,\n        /// <summary>\n        /// An in-progress pinch operation was completed.\n        /// </summary>\n        /// <remarks>No position or delta information is available for this sample.</remarks>\n        PinchComplete = 128,\n        /// <summary>\n        /// The user tapped the device twice which is always preceded by a Tap gesture.\n        /// </summary>\n        /// <remarks>If the time between two touches are long enough, insted two seperate single Tap gestures will be generated.</remarks>\n        DoubleTap = 256,\n        /// <summary>\n        /// The user touched the screen and performed either top to bottom or bottom to top drag gesture.\n        /// </summary>\n        VerticalDrag = 512,\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchCollection.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n    /// <summary>\n    /// Provides state information for a touch screen enabled device.\n    /// </summary>\n    public struct TouchCollection : IList<TouchLocation>\n    {\n        private readonly int _count;\n        private readonly TouchLocation _value0, _value1, _value2, _value3;\n        private readonly TouchLocation[] _collection;\n\n        #region Properties\n\n        /// <summary>\n        /// States if a touch screen is available.\n        /// </summary>\n        public bool IsConnected { get { return TouchPanel.GetCapabilities().IsConnected; } }\n\n        private static readonly TouchLocation[] EmptyLocationArray = new TouchLocation[0];\n        internal static readonly TouchCollection Empty = new TouchCollection(EmptyLocationArray);\n\n        #endregion\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TouchCollection\"/> with a pre-determined set of touch locations.\n        /// </summary>\n        /// <param name=\"touches\">Array of <see cref=\"TouchLocation\"/> items to initialize with.</param>\n        public TouchCollection(TouchLocation[] touches): this((IList<TouchLocation>)touches)\n        {\n        }\n        \n        internal TouchCollection(IList<TouchLocation> touches)\n        {\n            if (touches == null)\n                throw new ArgumentNullException(\"touches\");\n\n            _count = touches.Count;\n\n            _value0 = (_count > 0) ? touches[0] : TouchLocation.Invalid;\n            _value1 = (_count > 1) ? touches[1] : TouchLocation.Invalid;\n            _value2 = (_count > 2) ? touches[2] : TouchLocation.Invalid;\n            _value3 = (_count > 3) ? touches[3] : TouchLocation.Invalid;\n            _collection = null;\n\n            if (_count > 4)\n            {\n                _collection = new TouchLocation[_count];\n                touches.CopyTo(_collection, 0);\n            }\n        }\n        \n        internal TouchCollection(IList<TouchLocationData> touches)\n        {\n            if (touches == null)\n                throw new ArgumentNullException(\"touches\");\n\n            _count = touches.Count;\n\n            _value0 = (_count > 0) ? touches[0].TouchLocation : TouchLocation.Invalid;\n            _value1 = (_count > 1) ? touches[1].TouchLocation : TouchLocation.Invalid;\n            _value2 = (_count > 2) ? touches[2].TouchLocation : TouchLocation.Invalid;\n            _value3 = (_count > 3) ? touches[3].TouchLocation : TouchLocation.Invalid;\n            _collection = null;\n\n            if (_count > 4)\n            {\n                _collection = new TouchLocation[_count];\n                for (int i = 0; i < _count; i++)\n                    _collection[i] = touches[i].TouchLocation;\n            }\n        }\n        \n        /// <summary>\n        /// Returns <see cref=\"TouchLocation\"/> specified by ID.\n        /// </summary>\n        /// <param name=\"id\"></param>\n        /// <param name=\"touchLocation\"></param>\n        /// <returns></returns>\n        public bool FindById(int id, out TouchLocation touchLocation)\n        {\n            for (int i = 0; i < Count; i++)\n            {\n                if (this[i].Id == id)\n                {\n                    touchLocation = this[i];\n                    return true;\n                }\n            }\n\n            touchLocation = TouchLocation.Invalid;\n            return false;\n        }\n\n        #region IList<TouchLocation>\n\n        /// <summary>\n        /// States if touch collection is read only.\n        /// </summary>\n        public bool IsReadOnly\n        {\n            get { return true; }\n        }\n\n        /// <summary>\n        /// Returns the index of the first occurrence of specified <see cref=\"TouchLocation\"/> item in the collection.\n        /// </summary>\n        /// <param name=\"item\"><see cref=\"TouchLocation\"/> to query.</param>\n        /// <returns></returns>\n        public int IndexOf(TouchLocation item)\n        {\n            for (int i = 0; i < Count; i++)\n            {\n                if (item == this[i])\n                    return i;\n            }\n\n            return -1;\n        }\n\n        /// <summary>\n        /// Inserts a <see cref=\"TouchLocation\"/> item into the indicated position.\n        /// </summary>\n        /// <param name=\"index\">The position to insert into.</param>\n        /// <param name=\"item\">The <see cref=\"TouchLocation\"/> item to insert.</param>\n        public void Insert(int index, TouchLocation item)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Removes the <see cref=\"TouchLocation\"/> item at specified index.\n        /// </summary>\n        /// <param name=\"index\">Index of the item that will be removed from collection.</param>\n        public void RemoveAt(int index)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Gets or sets the item at the specified index of the collection.\n        /// </summary>\n        /// <param name=\"index\">Position of the item.</param>\n        /// <returns><see cref=\"TouchLocation\"/></returns>\n        public TouchLocation this[int index]\n        {\n            get\n            {\n                if (index < 0 || index >= _count)\n                    throw new ArgumentOutOfRangeException(\"index\");\n\n                switch (index)\n                {\n                    case 0: return _value0;\n                    case 1: return _value1;\n                    case 2: return _value2;\n                    case 3: return _value3;\n                    default: return _collection[index];\n                } \n            }\n            set { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        /// Adds a <see cref=\"TouchLocation\"/> to the collection.\n        /// </summary>\n        /// <param name=\"item\">The <see cref=\"TouchLocation\"/> item to be added. </param>\n        public void Add(TouchLocation item)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Clears all the items in collection.\n        /// </summary>\n        public void Clear()\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Returns true if specified <see cref=\"TouchLocation\"/> item exists in the collection, false otherwise./>\n        /// </summary>\n        /// <param name=\"item\">The <see cref=\"TouchLocation\"/> item to query for.</param>\n        /// <returns>Returns true if queried item is found, false otherwise.</returns>\n        public bool Contains(TouchLocation item)\n        {\n            for (int i = 0; i < Count; i++)\n            {\n                if (item == this[i])\n                    return true;\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Copies the <see cref=\"TouchLocation\"/>collection to specified array starting from the given index.\n        /// </summary>\n        /// <param name=\"array\">The array to copy <see cref=\"TouchLocation\"/> items.</param>\n        /// <param name=\"arrayIndex\">The starting index of the copy operation.</param>\n        public void CopyTo(TouchLocation[] array, int arrayIndex)\n        {\n            for (int i = 0; i < Count; i++)\n            {\n                array[arrayIndex + i] = this[i];\n            }\n        }\n\n        /// <summary>\n        /// Returns the number of <see cref=\"TouchLocation\"/> items that exist in the collection.\n        /// </summary>\n        public int Count\n        {\n            get { return _count; }\n        }\n\n        /// <summary>\n        /// Removes the specified <see cref=\"TouchLocation\"/> item from the collection.\n        /// </summary>\n        /// <param name=\"item\">The <see cref=\"TouchLocation\"/> item to remove.</param>\n        /// <returns></returns>\n        public bool Remove(TouchLocation item)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Returns an enumerator for the <see cref=\"TouchCollection\"/>.\n        /// </summary>\n        /// <returns>Enumerable list of <see cref=\"TouchLocation\"/> objects.</returns>\n        public Enumerator GetEnumerator()\n        {\n            return new Enumerator(this);\n        }\n\n        /// <summary>\n        /// Returns an enumerator for the <see cref=\"TouchCollection\"/>.\n        /// </summary>\n        /// <returns>Enumerable list of <see cref=\"TouchLocation\"/> objects.</returns>\n        IEnumerator<TouchLocation> IEnumerable<TouchLocation>.GetEnumerator()\n        {\n            return new Enumerator(this);\n        }\n\n        /// <summary>\n        /// Returns an enumerator for the <see cref=\"TouchCollection\"/>.\n        /// </summary>\n        /// <returns>Enumerable list of objects.</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return new Enumerator(this);\n        }\n\n        #endregion // IList<TouchLocation>\n\n        /// <summary>\n        /// Provides the ability to iterate through the TouchLocations in an TouchCollection.\n        /// </summary>\n        public struct Enumerator : IEnumerator<TouchLocation>\n        {\n            private readonly TouchCollection _collection;\n            private int _position;\n\n            internal Enumerator(TouchCollection collection)\n            {\n                _collection = collection;\n                _position = -1;\n            }\n\n            /// <summary>\n            /// Gets the current element in the TouchCollection.\n            /// </summary>\n            public TouchLocation Current { get { return _collection[_position]; } }\n\n            /// <summary>\n            /// Advances the enumerator to the next element of the TouchCollection.\n            /// </summary>\n            public bool MoveNext()\n            {\n                _position++;\n                return (_position < _collection.Count);\n            }\n\n            #region IDisposable\n\n            /// <summary>\n            /// Immediately releases the unmanaged resources used by this object.\n            /// </summary>\n            public void Dispose()\n            {\n            }\n\n            #endregion\n\n            #region IEnumerator Members\n\n            object IEnumerator.Current\n            {\n                get { return _collection[_position]; }\n            }\n\n            public void Reset()\n            {\n                _position = -1;\n            }\n\n            #endregion\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchLocation.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Diagnostics;\n\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n    public struct TouchLocation : IEquatable<TouchLocation>\n    {\n        /// <summary>\n        ///Attributes \n        /// </summary>\n        private int _id;\n        private TouchLocationState _state;\n        private Vector2 _position;\n        private Vector2 _previousPosition;\n        private TouchLocationState _previousState;\n\n        /// <summary>\n        /// Helper for assigning an invalid touch location.\n        /// </summary>\n        internal static readonly TouchLocation Invalid = new TouchLocation();\n\n        #region Properties\n\n        public int Id \n        { \n            get\n            {\n                return _id;\n            }\n        }\n\n        public Vector2 Position \n        { \n            get\n            {\n                return _position;\n            }\n        }\n        \n        public float Pressure \n        { \n            get\n            {\n                return 0f;\n            }\n        }\n                                \n        public TouchLocationState State \n        { \n            get\n            {\n                return _state;\n            } \n        }\n        \n        #endregion\n        \n        #region Constructors\n\n        public TouchLocation(int id, TouchLocationState state, Vector2 position)\n            : this(id, state, position, TouchLocationState.Invalid, Vector2.Zero)\n        {\n        }\n\n        public TouchLocation(   int id, TouchLocationState state, Vector2 position, \n                                TouchLocationState previousState, Vector2 previousPosition)\n        {\n            _id = id;\n            _state = state;\n            _position = position;\n\n            _previousState = previousState;\n            _previousPosition = previousPosition;\n        }\n\n        #endregion\n\n        public override bool Equals(object obj)\n        {\n            if (obj is TouchLocation)\n                return Equals((TouchLocation)obj);\n\n            return false;\n        }\n\n        public bool Equals(TouchLocation other)\n        {\n            return  _id.Equals(other._id) &&\n                    _position.Equals(other._position) &&\n                    _previousPosition.Equals(other._previousPosition);\n        }\n\n        public override int GetHashCode()\n        {\n            return _id;\n        }\n\n        public override string ToString()\n        {\n            return \"Touch id:\"+_id+\" state:\"+_state + \" position:\" + _position + \" pressure:\" + 0f +\" prevState:\"+_previousState+\" prevPosition:\"+ _previousPosition + \" previousPressure:\" + 0f;\n        }\n\n        public bool TryGetPreviousLocation(out TouchLocation aPreviousLocation)\n        {\n            if (_previousState == TouchLocationState.Invalid)\n            {\n                aPreviousLocation._id = -1;\n                aPreviousLocation._state = TouchLocationState.Invalid;\n                aPreviousLocation._position = Vector2.Zero;\n                aPreviousLocation._previousState = TouchLocationState.Invalid;\n                aPreviousLocation._previousPosition = Vector2.Zero; \n                return false;\n            }\n\n            aPreviousLocation._id = _id;\n            aPreviousLocation._state = _previousState;\n            aPreviousLocation._position = _previousPosition;\n            aPreviousLocation._previousState = TouchLocationState.Invalid;\n            aPreviousLocation._previousPosition = Vector2.Zero;\n            return true;\n        }\n\n        public static bool operator !=(TouchLocation left, TouchLocation right)\n        {\n            return  left._id != right._id || \n                    left._state != right._state ||\n                    left._position != right._position ||\n                    left._previousState != right._previousState ||\n                    left._previousPosition != right._previousPosition;\n        }\n\n        public static bool operator ==(TouchLocation left, TouchLocation right)\n        {\n            return  left._id == right._id && \n                    left._state == right._state &&\n                    left._position == right._position &&\n                    left._previousState == right._previousState &&\n                    left._previousPosition == right._previousPosition;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchLocationData.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n\n    internal struct TouchLocationData : IEquatable<TouchLocationData>\n    {\n        private int _id;\n\n        internal TouchLocationState _state;\n        internal Vector2 _position;\n\n        internal TouchLocationState _previousState;\n        internal Vector2 _previousPosition;\n\n        internal TimeSpan _timestamp;\n\n        internal int _framestamp;\n\n        /// <summary>\n        /// True if this touch was pressed and released on the same frame.\n        /// In this case we will keep it around for the user to get by GetState that frame.\n        /// However if they do not call GetState that frame, this touch will be forgotten.\n        /// </summary>\n        internal bool SameFrameReleased;\n\n        internal int Id { get { return _id; } }\n        internal TouchLocationState State { get { return _state; } }\n        internal Vector2 Position { get { return _position; } }\n\n        internal TimeSpan Timestamp { get { return _timestamp; } }\n        internal int Framestamp { get { return _framestamp; } }\n\n\n\n        internal TouchLocation TouchLocation\n        {\n            get\n            {\n                return new TouchLocation(this._id,\n                                         this._state, this._position,\n                                         this._previousState, this._previousPosition);\n            }\n        }\n\n\n        internal TouchLocationData(int id, TouchLocationState state, Vector2 position, TimeSpan timestamp, int framestamp)\n        {\n            _id = id;\n            _state = state;\n            _position = position;\n\n            _previousState = TouchLocationState.Invalid;\n            _previousPosition = Vector2.Zero;\n\n            _timestamp = timestamp;\n            _framestamp = framestamp;\n\n            SameFrameReleased = false;\n        }\n\n        public bool TryGetPreviousLocationData(out TouchLocationData aPreviousLocation)\n        {\n            if (_previousState == TouchLocationState.Invalid)\n            {\n                aPreviousLocation._id = -1;\n                aPreviousLocation._state = TouchLocationState.Invalid;\n                aPreviousLocation._position = Vector2.Zero;\n                aPreviousLocation._previousState = TouchLocationState.Invalid;\n                aPreviousLocation._previousPosition = Vector2.Zero;\n                aPreviousLocation._timestamp = TimeSpan.Zero;\n                aPreviousLocation._framestamp = 0;\n                aPreviousLocation.SameFrameReleased = false;\n                return false;\n            }\n\n            aPreviousLocation._id = _id;\n            aPreviousLocation._state = _previousState;\n            aPreviousLocation._position = _previousPosition;\n            aPreviousLocation._previousState = TouchLocationState.Invalid;\n            aPreviousLocation._previousPosition = Vector2.Zero;\n            aPreviousLocation._timestamp = _timestamp;\n            aPreviousLocation._framestamp = _framestamp;\n            aPreviousLocation.SameFrameReleased = SameFrameReleased;\n\n            return true;\n        }\n\n        public override int GetHashCode()\n        {\n            return _id;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj is TouchLocationData)\n                return Equals((TouchLocationData)obj);\n\n            return false;\n        }\n\n        public bool Equals(TouchLocationData other)\n        {\n            return _id.Equals(other._id)\n                && _position.Equals(other._position)\n                && _previousPosition.Equals(other._previousPosition);\n        }\n\n        public static bool operator !=(TouchLocationData left, TouchLocationData right)\n        {\n            return left._id != right._id\n                || left._state != right._state\n                || left._position != right._position\n                || left._previousState != right._previousState\n                || left._previousPosition != right._previousPosition;\n        }\n\n        public static bool operator ==(TouchLocationData left, TouchLocationData right)\n        {\n            return left._id == right._id\n                && left._state == right._state\n                && left._position == right._position\n                && left._previousState == right._previousState\n                && left._previousPosition == right._previousPosition;\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{{ Touch id: {0}, state: {1}, position: {2}, pressure: {3}, prevState: {4}, prevPosition: {5}, previousPressure: {6} }}\",\n                _id, _state, _position, 0f, _previousState, _previousPosition, 0f);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchLocationState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n    /// <summary>\n    /// Holds the possible state information for a touch location..\n    /// </summary>\n    public enum TouchLocationState\n    {\n        /// <summary>\n        /// This touch location position is invalid.\n        /// </summary>\n        /// <remarks>Typically, you will encounter this state when a new touch location attempts to get the previous state of itself.</remarks>\n        Invalid,    \n        /// <summary>\n        /// This touch location position was updated or pressed at the same position.\n        /// </summary>\n        Moved,\n        /// <summary>\n        /// This touch location position is new. \n        /// </summary>\n        Pressed,\n        /// <summary>\n        /// This touch location position was released. \n        /// </summary>\n        Released,\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchPanel.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\nusing Microsoft.Xna.Platform.Input;\nusing Microsoft.Xna.Platform.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public interface ITouchPanel\n    {\n        IntPtr WindowHandle { get; set; }\n        int DisplayWidth { get; set; }\n        int DisplayHeight { get; set; }\n        DisplayOrientation DisplayOrientation { get; set; }\n        GestureType EnabledGestures { get; set; }\n        bool IsGestureAvailable { get; }\n\n        TouchPanelCapabilities GetCapabilities();\n        TouchCollection GetState();\n        GestureSample ReadGesture();\n    }\n\n    public interface IPlatformTouchPanel\n    {\n        T GetStrategy<T>() where T : TouchPanelStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n    /// <summary>\n    /// Allows retrieval of information from Touch Panel device.\n    /// </summary>\n    public sealed class TouchPanel : ITouchPanel\n        , IPlatformTouchPanel\n    {\n        private static TouchPanel _current;\n\n        /// <summary>\n        /// Returns the current Keyboard instance.\n        /// </summary> \n        public static TouchPanel Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(Keyboard))\n                {\n                    if (_current == null)\n                        _current = new TouchPanel();\n\n                    return _current;\n                }\n            }\n        }\n\n\n        /// <summary>\n        /// The window handle of the touch panel. Purely for Xna compatibility.\n        /// </summary>\n        public static IntPtr WindowHandle\n        {\n            get { return ((ITouchPanel)TouchPanel.Current).WindowHandle; }\n            set { ((ITouchPanel)TouchPanel.Current).WindowHandle = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the display width of the touch panel.\n        /// </summary>\n        public static int DisplayWidth\n        {\n            get { return ((ITouchPanel)TouchPanel.Current).DisplayWidth; }\n            set { ((ITouchPanel)TouchPanel.Current).DisplayWidth = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the display height of the touch panel.\n        /// </summary>\n        public static int DisplayHeight\n        {\n            get { return ((ITouchPanel)TouchPanel.Current).DisplayHeight; }\n            set { ((ITouchPanel)TouchPanel.Current).DisplayHeight = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the display orientation of the touch panel.\n        /// </summary>\n        public static DisplayOrientation DisplayOrientation\n        {\n            get { return ((ITouchPanel)TouchPanel.Current).DisplayOrientation; }\n            set { ((ITouchPanel)TouchPanel.Current).DisplayOrientation = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets enabled gestures.\n        /// </summary>\n        public static GestureType EnabledGestures\n        {\n            get { return ((ITouchPanel)TouchPanel.Current).EnabledGestures; }\n            set { ((ITouchPanel)TouchPanel.Current).EnabledGestures = value; }\n        }\n\n        /// <summary>\n        /// Returns true if a touch gesture is available.\n        /// </summary>\n        public static bool IsGestureAvailable\n        {\n            get { return ((ITouchPanel)TouchPanel.Current).IsGestureAvailable; }\n        }\n\n        /// <summary>\n        /// Gets the current state of the touch panel.\n        /// </summary>\n        /// <returns><see cref=\"TouchCollection\"/></returns>\n        public static TouchCollection GetState()\n        {\n            return ((ITouchPanel)TouchPanel.Current).GetState();\n        }\n\n        public static TouchPanelCapabilities GetCapabilities()\n        {\n            return ((ITouchPanel)TouchPanel.Current).GetCapabilities();\n        }\n\n        /// <summary>\n        /// Returns the next available gesture on touch panel device.\n        /// </summary>\n        /// <returns><see cref=\"GestureSample\"/></returns>\n        public static GestureSample ReadGesture()\n        {\n            return ((ITouchPanel)TouchPanel.Current).ReadGesture();\n        }\n\n        private TouchPanelStrategy _strategy;\n\n        T IPlatformTouchPanel.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        private TouchPanel()\n        {\n            _strategy = InputFactory.Current.CreateTouchPanelStrategy();\n        }\n\n        #region ITouchPanel\n\n        IntPtr ITouchPanel.WindowHandle\n        {\n            get { return _strategy.WindowHandle; }\n            set { _strategy.WindowHandle = value; }\n        }\n\n        int ITouchPanel.DisplayWidth\n        {\n            get { return _strategy.DisplayWidth; }\n            set { _strategy.DisplayWidth = value; }\n        }\n\n        int ITouchPanel.DisplayHeight\n        {\n            get { return _strategy.DisplayHeight; }\n            set { _strategy.DisplayHeight = value; }\n        }\n\n        DisplayOrientation ITouchPanel.DisplayOrientation\n        {\n            get { return _strategy.DisplayOrientation; }\n            set { _strategy.DisplayOrientation = value; }\n        }\n\n        GestureType ITouchPanel.EnabledGestures\n        {\n            get { return _strategy.EnabledGestures; }\n            set { _strategy.EnabledGestures = value; }\n        }\n\n        bool ITouchPanel.IsGestureAvailable\n        {\n            get { return _strategy.IsGestureAvailable; }\n        }\n\n        TouchPanelCapabilities ITouchPanel.GetCapabilities()\n        {\n            return _strategy.GetCapabilities();\n        }\n\n        TouchCollection ITouchPanel.GetState()\n        {\n            return _strategy.GetState();\n        }\n\n\n        GestureSample ITouchPanel.ReadGesture()\n        {\n            return _strategy.ReadGesture();\n        }\n\n        #endregion ITouchPanel\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchPanelCapabilities.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Input.Touch\n{\n    /// <summary>\n    /// Allows retrieval of capabilities information from touch panel device.\n    /// </summary>\n    public struct TouchPanelCapabilities\n    {\n        internal bool _isConnected;\n        internal int  _maximumTouchCount;\n        internal bool _hasPressure;\n\n        /// <summary>\n        /// Returns true if a device is available for use.\n        /// </summary>\n        public bool IsConnected\n        {\n            get { return _isConnected; }\n        }\n\n        /// <summary>\n        /// Returns the maximum number of touch locations tracked by the touch panel device.\n        /// </summary>\n        public int MaximumTouchCount\n        {\n            get { return _maximumTouchCount; }\n        }\n\n        public bool HasPressure\n        {\n            get { return _hasPressure; }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchPanelStrategy.Legacy.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public abstract partial class TouchPanelStrategy\n    {\n        /// The value 1 is reserved for the mouse touch point.\n        private const int StartingTouchId = 2;\n\n        /// <summary>\n        /// The current touch state.\n        /// </summary>\n        private readonly List<TouchLocationData> _touchStates = new List<TouchLocationData>();\n\n        /// <summary>\n        /// The next touch location identifier.\n        /// </summary>\n        private int _nextTouchId = StartingTouchId;\n\n        private TimeSpan _currentTimestamp;\n        private int _currentFramestamp;\n\n        /// <summary>\n        /// The current timestamp that we use for setting the timestamp of new TouchLocations\n        /// </summary>\n        internal TimeSpan CurrentTimestamp\n        {\n            get { return _currentTimestamp; }\n        }\n\n        private void UpdateCurrentTimestamp()\n        {\n            _currentTimestamp = _stopwatch.Elapsed;\n            _currentFramestamp++;\n        }\n\n        /// <summary>\n        /// The mapping between platform specific touch ids\n        /// and the touch ids we assign to touch locations.\n        /// \n        /// Different platforms return different touch identifiers\n        /// based on the specifics of their implementation and the\n        /// system drivers.\n        ///\n        /// Sometimes these ids are suitable for our use, but other\n        /// times it can recycle ids or do cute things like return\n        /// the same id for double tap events.\n        ///\n        /// We instead provide consistent ids by generating them\n        /// ourselves on the press and looking them up on move \n        /// and release events.\n        /// </summary>\n        private readonly Dictionary<int, int> _touchIdsMap = new Dictionary<int, int>();\n\n\n        private TouchCollection LegacyGetState()\n        {\n            int currentFramestamp = this._currentFramestamp;\n\n            //Clear out touches from previous frames that were released on the same frame they were touched that haven't been seen\n            for (int i = _touchStates.Count - 1; i >= 0; i--)\n            {\n                TouchLocationData touch = _touchStates[i];\n\n                //If a touch was pressed and released in a previous frame and the user didn't ask about it then trash it.\n                if (touch.SameFrameReleased\n                &&  touch.State == TouchLocationState.Pressed\n                &&  touch.Framestamp < currentFramestamp)\n                {\n                    _touchStates.RemoveAt(i);\n                }\n            }\n\n            TouchCollection result = (_touchStates.Count > 0) ? new TouchCollection(_touchStates) : TouchCollection.Empty;\n\n            // Age all the touches, so any that were Pressed become Moved, and any that were Released are removed\n            for (int i = _touchStates.Count - 1; i >= 0; i--)\n            {\n                TouchLocationData touch = _touchStates[i];\n                switch (touch.State)\n                {\n                    case TouchLocationState.Pressed:\n                        touch._previousState = touch.State;\n                        touch._previousPosition = touch.Position;\n                        if (touch.SameFrameReleased)\n                            touch._state = TouchLocationState.Released;\n                        else\n                            touch._state = TouchLocationState.Moved;\n                        _touchStates[i] = touch;\n                        break;\n                    case TouchLocationState.Moved:\n                        touch._previousState = touch.State;\n                        touch._previousPosition = touch.Position;\n                        _touchStates[i] = touch;\n                        break;\n                    case TouchLocationState.Released:\n                        _touchStates.RemoveAt(i);\n                        break;\n                }\n            }\n\n            return result;\n        }\n\n        protected void AddPressedEvent(int nativeTouchId, Vector2 position, Point winSize)\n        {\n            // Register touchId.\n            int touchId;\n            if (_touchIdsMap.TryGetValue(nativeTouchId, out touchId))\n            {\n                System.Diagnostics.Debug.Assert(false, \"nativeTouchId already registered.\");\n            }\n            else\n            {\n                touchId = _nextTouchId;\n                _touchIdsMap[nativeTouchId] = touchId;\n\n                if (_nextTouchId < int.MaxValue)\n                    _nextTouchId++;\n                else\n                    _nextTouchId = StartingTouchId;\n            }\n\n            // scale position\n            position.X = position.X * DisplayWidth / winSize.X;\n            position.Y = position.Y * DisplayHeight / winSize.Y;\n\n            TimeSpan currentTimestamp = this.CurrentTimestamp;\n            int currentFramestamp = this._currentFramestamp;\n\n            // Add event\n            System.Diagnostics.Debug.Assert(_touchStates.TrueForAll(t => t.Id != touchId));\n            TouchLocationData evt = new TouchLocationData(touchId, TouchLocationState.Pressed, position, currentTimestamp, currentFramestamp);\n            _touchStates.Add(evt);\n\n            // If we have gestures enabled then collect events for those too.\n            // We also have to keep tracking any touches while we know about touches so we don't miss releases even if gesture recognition is disabled\n            GesturesAddPressedEvent(touchId, position, currentTimestamp, currentFramestamp);\n        }\n\n        protected void AddMovedEvent(int nativeTouchId, Vector2 position, Point winSize)\n        {\n            // Find touchId.\n            int touchId;\n            if (!_touchIdsMap.TryGetValue(nativeTouchId, out touchId))\n            {\n                System.Diagnostics.Debug.Assert(false, \"nativeTouchId not found.\");\n                return;\n            }\n\n            // scale position\n            position.X = position.X * DisplayWidth / winSize.X;\n            position.Y = position.Y * DisplayHeight / winSize.Y;\n\n            TimeSpan currentTimestamp = this.CurrentTimestamp;\n            int currentFramestamp = this._currentFramestamp;\n\n            //Find the matching touch\n            int tidx = FindTouchStateIndex(touchId);\n            if (tidx != -1)\n            {\n                TouchLocationData existingTouch = _touchStates[tidx];\n                {\n                    // Update the touch based on the new one\n                    System.Diagnostics.Debug.Assert(existingTouch.State != TouchLocationState.Released, \"We shouldn't be changing state on a released location.\");\n                    System.Diagnostics.Debug.Assert(existingTouch.Timestamp <= currentTimestamp, \"The currentTimestamp is older than our TouchLocationData.\");\n\n                    // Store the current state as the previous one.\n                    existingTouch._previousState = existingTouch.State;\n                    existingTouch._previousPosition = existingTouch.Position;\n\n                    // Set the new state.\n                    existingTouch._position = position;\n\n                    // Set the new timestamp.\n                    existingTouch._timestamp = currentTimestamp;\n                    existingTouch._framestamp = currentFramestamp;\n\n                    _touchStates[tidx] = existingTouch;\n                }\n            }\n\n            // If we have gestures enabled then collect events for those too.\n            // We also have to keep tracking any touches while we know about touches so we don't miss releases even if gesture recognition is disabled\n            GesturesAddMovedEvent(touchId, position, currentTimestamp, currentFramestamp);\n        }\n\n        protected void AddReleasedEvent(int nativeTouchId, Vector2 position, Point winSize)\n        {\n            // Find and unregister touchId.\n            int touchId;\n            if (!_touchIdsMap.TryGetValue(nativeTouchId, out touchId))\n            {\n                System.Diagnostics.Debug.Assert(false, \"nativeTouchId not found.\");\n                return;\n            }\n            _touchIdsMap.Remove(nativeTouchId);\n\n            // scale position\n            position.X = position.X * DisplayWidth / winSize.X;\n            position.Y = position.Y * DisplayHeight / winSize.Y;\n\n            TimeSpan currentTimestamp = this.CurrentTimestamp;\n            int currentFramestamp = this._currentFramestamp;\n\n            //Find the matching touch\n            int tidx = FindTouchStateIndex(touchId);\n            if (tidx != -1)\n            {\n                TouchLocationData existingTouch = _touchStates[tidx];\n                {\n                    //If we are moving straight from Pressed to Released and we've existed for multiple frames,\n                    // that means we've never been seen, so just get rid of us\n                    if (existingTouch.State == TouchLocationState.Pressed\n                    && existingTouch.Framestamp != currentFramestamp)\n                    {\n                        _touchStates.RemoveAt(tidx);\n                    }\n                    else\n                    {\n                        //Otherwise update the touch based on the new one\n                        System.Diagnostics.Debug.Assert(existingTouch.State != TouchLocationState.Released, \"We shouldn't be changing state on a released location.\");\n                        System.Diagnostics.Debug.Assert(existingTouch.Timestamp <= currentTimestamp, \"The currentTimestamp is older than our TouchLocationData.\");\n\n                        // Store the current state as the previous one.\n                        existingTouch._previousState = existingTouch.State;\n                        existingTouch._previousPosition = existingTouch.Position;\n\n                        // Set the new state.\n                        existingTouch._state = TouchLocationState.Released;\n                        existingTouch._position = position;\n\n                        //Going straight from pressed to released on the same frame\n                        if (existingTouch._previousState == TouchLocationState.Pressed)\n                        {\n                            if (existingTouch.Framestamp == currentFramestamp)\n                            {\n                                //Lie that we are pressed for now\n                                existingTouch.SameFrameReleased = true;\n                                existingTouch._state = TouchLocationState.Pressed;\n                            }\n                        }\n\n                        // Set the new timestamp.\n                        existingTouch._timestamp = currentTimestamp;\n                        existingTouch._framestamp = currentFramestamp;\n\n                        _touchStates[tidx] = existingTouch;\n                    }\n                }\n            }\n\n            // If we have gestures enabled then collect events for those too.\n            // We also have to keep tracking any touches while we know about touches so we don't miss releases even if gesture recognition is disabled\n            GesturesAddReleasedEvent(touchId, position, currentTimestamp, currentFramestamp);\n        }\n\n        protected void AddCanceledEvent(int nativeTouchId, Vector2 position, Point winSize)\n        {\n            // Find and unregister touchId.\n            int touchId;\n            if (!_touchIdsMap.TryGetValue(nativeTouchId, out touchId))\n            {\n                System.Diagnostics.Debug.Assert(false, \"nativeTouchId not found.\");\n                return;\n            }\n            _touchIdsMap.Remove(nativeTouchId);\n\n            throw new NotImplementedException();\n        }\n\n        private int FindTouchStateIndex(int touchId)\n        {\n            for (int tidx = 0; tidx < _touchStates.Count; tidx++)\n            {\n                if (_touchStates[tidx].Id == touchId)\n                    return tidx;\n            }\n            return -1;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchPanelStrategy.LegacyGesture.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public abstract partial class TouchPanelStrategy\n    {\n        /// <summary>\n        /// The current gesture state.\n        /// </summary>\n        private readonly List<GestureLocationData> _gestureStates = new List<GestureLocationData>();\n\n\n        internal readonly Queue<GestureSample> GestureList = new Queue<GestureSample>();\n\n        /// <summary>\n        /// Returns true if a touch gesture is available.\n        /// </summary>\n        private bool LegacyIsGestureAvailable\n        {\n            get\n            {\n                // Process the pending gesture events. (May cause hold events)\n                TimeSpan currentTimestamp = this.CurrentTimestamp;\n                UpdateGestures(currentTimestamp, false);\n\n                return GestureList.Count > 0;\n            }\n        }\n\n        private int FindGestureStateIndex(int touchId)\n        {\n            for (int gidx = 0; gidx < _gestureStates.Count; gidx++)\n            {\n                if (_gestureStates[gidx].Id == touchId)\n                    return gidx;\n            }\n            return -1;\n        }\n\n        private static void UpdateGestureVelocity(TimeSpan currentTimestamp, ref GestureLocationData existingTouch)\n        {\n            TimeSpan elapsed = currentTimestamp - existingTouch.Timestamp;\n            // If time has elapsed then update the velocity.\n            if (elapsed > TimeSpan.Zero)\n            {\n                // Use a simple low pass filter to accumulate velocity.\n                Vector2 delta = existingTouch.Position - existingTouch._previousPosition;\n                Vector2 velocity = delta / (float)elapsed.TotalSeconds;\n                existingTouch._velocity += (velocity - existingTouch.Velocity) * 0.45f;\n            }\n        }\n\n\n        /// <summary>\n        /// Returns the next available gesture on touch panel device.\n        /// </summary>\n        /// <returns><see cref=\"GestureSample\"/></returns>\n        private GestureSample LegacyReadGesture()\n        {\n            // Return the next gesture.\n            return GestureList.Dequeue();\n        }\n\n        #region Gesture Recognition\n\n        private void GesturesAddPressedEvent(int touchId, Vector2 position, TimeSpan currentTimestamp, int currentFramestamp)\n        {\n            if (EnabledGestures != GestureType.None || _gestureStates.Count > 0)\n            {\n                GestureLocationData evt = new GestureLocationData(touchId, TouchLocationState.Pressed, position, currentTimestamp, currentFramestamp);\n                _gestureStates.Add(evt);\n\n                if (EnabledGestures != GestureType.None)\n                    UpdateGestures(currentTimestamp, true);\n\n                // Age all the touches, so any that were Pressed become Moved, and any that were Released are removed\n                for (int i = _gestureStates.Count - 1; i >= 0; i--)\n                {\n                    GestureLocationData touch = _gestureStates[i];\n                    switch (touch.State)\n                    {\n                        case TouchLocationState.Pressed:\n                            touch._previousState = touch.State;\n                            touch._previousPosition = touch.Position;\n                            if (touch.SameFrameReleased)\n                                touch._state = TouchLocationState.Released;\n                            else\n                                touch._state = TouchLocationState.Moved;\n                            _gestureStates[i] = touch;\n                            break;\n                        case TouchLocationState.Moved:\n                            touch._previousState = touch.State;\n                            touch._previousPosition = touch.Position;\n                            _gestureStates[i] = touch;\n                            break;\n                        case TouchLocationState.Released:\n                            _gestureStates.RemoveAt(i);\n                            break;\n                    }\n                }\n            }\n        }\n\n        private void GesturesAddMovedEvent(int touchId, Vector2 position, TimeSpan currentTimestamp, int currentFramestamp)\n        {\n            //Find the matching gesture\n            int gidx = FindGestureStateIndex(touchId);\n            if (gidx != -1)\n            {\n                GestureLocationData existingTouch = _gestureStates[gidx];\n                {\n                    // Update the touch based on the new one\n                    System.Diagnostics.Debug.Assert(existingTouch.State != TouchLocationState.Released, \"We shouldn't be changing state on a released location.\");\n                    System.Diagnostics.Debug.Assert(existingTouch.Timestamp <= currentTimestamp, \"The currentTimestamp is older than our GestureLocationData.\");\n\n                    // Store the current state as the previous one.\n                    existingTouch._previousPosition = existingTouch.Position;\n                    existingTouch._previousState = existingTouch.State;\n\n                    // Set the new state.\n                    existingTouch._position = position;\n\n                    // Update the velocity.\n                    UpdateGestureVelocity(currentTimestamp, ref existingTouch);\n\n                    // Set the new timestamp.\n                    existingTouch._timestamp = currentTimestamp;\n                    existingTouch._framestamp = currentFramestamp;\n\n                    _gestureStates[gidx] = existingTouch;\n                }\n            }\n\n            if (EnabledGestures != GestureType.None || _gestureStates.Count > 0)\n            {\n                if (EnabledGestures != GestureType.None)\n                    UpdateGestures(currentTimestamp, true);\n\n                // Age all the touches, so any that were Pressed become Moved, and any that were Released are removed\n                for (int i = _gestureStates.Count - 1; i >= 0; i--)\n                {\n                    GestureLocationData touch = _gestureStates[i];\n                    switch (touch.State)\n                    {\n                        case TouchLocationState.Pressed:\n                            touch._previousState = touch.State;\n                            touch._previousPosition = touch.Position;\n                            if (touch.SameFrameReleased)\n                                touch._state = TouchLocationState.Released;\n                            else\n                                touch._state = TouchLocationState.Moved;\n                            _gestureStates[i] = touch;\n                            break;\n                        case TouchLocationState.Moved:\n                            touch._previousState = touch.State;\n                            touch._previousPosition = touch.Position;\n                            _gestureStates[i] = touch;\n                            break;\n                        case TouchLocationState.Released:\n                            _gestureStates.RemoveAt(i);\n                            break;\n                    }\n                }\n            }\n        }\n\n        private void GesturesAddReleasedEvent(int touchId, Vector2 position, TimeSpan currentTimestamp, int currentFramestamp)\n        {\n            //Find the matching gesture\n            int gidx = FindGestureStateIndex(touchId);\n            if (gidx != -1)\n            {\n                GestureLocationData existingTouch = _gestureStates[gidx];\n                {\n                    //If we are moving straight from Pressed to Released and we've existed for multiple frames,\n                    // that means we've never been seen, so just get rid of us\n                    if (existingTouch.State == TouchLocationState.Pressed\n                    && existingTouch.Framestamp != currentFramestamp)\n                    {\n                        _gestureStates.RemoveAt(gidx);\n                    }\n                    else\n                    {\n                        //Otherwise update the touch based on the new one\n                        System.Diagnostics.Debug.Assert(existingTouch.State != TouchLocationState.Released, \"We shouldn't be changing state on a released location.\");\n                        System.Diagnostics.Debug.Assert(existingTouch.Timestamp <= currentTimestamp, \"The currentTimestamp is older than our GestureLocationData.\");\n\n                        // Store the current state as the previous one.\n                        existingTouch._previousPosition = existingTouch.Position;\n                        existingTouch._previousState = existingTouch.State;\n\n                        // Set the new state.\n                        existingTouch._position = position;\n                        existingTouch._state = TouchLocationState.Released;\n\n                        // Update the velocity.\n                        UpdateGestureVelocity(currentTimestamp, ref existingTouch);\n\n                        //Going straight from pressed to released on the same frame\n                        if (existingTouch._previousState == TouchLocationState.Pressed)\n                        {\n                            if (existingTouch.Framestamp == currentFramestamp)\n                            {\n                                //Lie that we are pressed for now\n                                existingTouch.SameFrameReleased = true;\n                                existingTouch._state = TouchLocationState.Pressed;\n                            }\n                        }\n\n                        // Set the new timestamp.\n                        existingTouch._timestamp = currentTimestamp;\n                        existingTouch._framestamp = currentFramestamp;\n\n                        _gestureStates[gidx] = existingTouch;\n                    }\n                }\n            }\n\n            if (EnabledGestures != GestureType.None || _gestureStates.Count > 0)\n            {\n                if (EnabledGestures != GestureType.None)\n                    UpdateGestures(currentTimestamp, true);\n\n                // Age all the touches, so any that were Pressed become Moved, and any that were Released are removed\n                for (int i = _gestureStates.Count - 1; i >= 0; i--)\n                {\n                    GestureLocationData touch = _gestureStates[i];\n                    switch (touch.State)\n                    {\n                        case TouchLocationState.Pressed:\n                            touch._previousState = touch.State;\n                            touch._previousPosition = touch.Position;\n                            if (touch.SameFrameReleased)\n                                touch._state = TouchLocationState.Released;\n                            else\n                                touch._state = TouchLocationState.Moved;\n                            _gestureStates[i] = touch;\n                            break;\n                        case TouchLocationState.Moved:\n                            touch._previousState = touch.State;\n                            touch._previousPosition = touch.Position;\n                            _gestureStates[i] = touch;\n                            break;\n                        case TouchLocationState.Released:\n                            _gestureStates.RemoveAt(i);\n                            break;\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Maximum distance a touch location can wiggle and \n        /// not be considered to have moved.\n        /// </summary>\n        internal const float TapJitterTolerance = 35.0f;\n\n        internal static readonly TimeSpan TimeRequiredForHold = TimeSpan.FromMilliseconds(1024);\n\n        /// <summary>\n        /// The pinch touch locations.\n        /// </summary>\n        private readonly GestureLocationData[] _pinchTouch = new GestureLocationData[2];\n\n        /// <summary>\n        /// If true the pinch touch locations are valid and\n        /// a pinch gesture has begun.\n        /// </summary>\n        private bool _pinchGestureStarted;\n\n        private bool IsGestureEnabled(GestureType gestureType)\n        {\n            return (EnabledGestures & gestureType) != 0;\n        }\n\n        /// <summary>\n        /// Used to disable emitting of tap gestures.\n        /// </summary>\n        bool _tapDisabled;\n\n        /// <summary>\n        /// Used to disable emitting of hold gestures.\n        /// </summary>\n        bool _holdDisabled;\n\n\n        private void UpdateGestures(TimeSpan currentTimestamp, bool stateChanged)\n        {\n            // These are observed XNA gesture rules which we follow below.  Please\n            // add to them if a new case is found.\n            //\n            //  - Tap occurs on release.\n            //  - DoubleTap occurs on the first press after a Tap.\n            //  - Tap, Double Tap, and Hold are disabled if a drag begins or more than one finger is pressed.\n            //  - Drag occurs when one finger is down and actively moving.\n            //  - Pinch occurs if 2 or more fingers are down and at least one is moving.\n            //  - If you enter a Pinch during a drag a DragComplete is fired.\n            //  - Drags are classified as horizontal, vertical, free, or none and stay that way.\n            //\n\n            // First get a count of touch locations which \n            // are not in the released state.\n            int heldLocations = 0;\n            foreach (GestureLocationData touch in _gestureStates)\n                heldLocations += touch.State != TouchLocationState.Released ? 1 : 0;\n\n            // As soon as we have more than one held point then \n            // tap and hold gestures are disabled until all the \n            // points are released.\n            if (heldLocations > 1)\n            {\n                _tapDisabled = true;\n                _holdDisabled = true;\n            }\n\n            // Process the touch locations for gestures.\n            for (int i = 0; i < _gestureStates.Count; i++)\n            {\n                GestureLocationData touch = _gestureStates[i];\n                switch (touch.State)\n                {\n                    case TouchLocationState.Pressed:\n                    case TouchLocationState.Moved:\n                        {\n                            // The DoubleTap event is emitted on first press as\n                            // opposed to Tap which happens on release.\n                            if (touch.State == TouchLocationState.Pressed\n                            && ProcessDoubleTap(ref touch))\n                                break;\n\n                            // Any time more than one finger is down and pinch is\n                            // enabled then we exclusively do pinch processing.\n                            if (IsGestureEnabled(GestureType.Pinch) && heldLocations > 1)\n                            {\n                                // Save or update the first pinch point.\n                                if (_pinchTouch[0].State == TouchLocationState.Invalid\n                                || _pinchTouch[0].Id == touch.Id)\n                                    _pinchTouch[0] = touch;\n\n                                // Save or update the second pinch point.\n                                else if (_pinchTouch[1].State == TouchLocationState.Invalid\n                                     || _pinchTouch[1].Id == touch.Id)\n                                    _pinchTouch[1] = touch;\n\n                                // NOTE: Actual pinch processing happens outside and\n                                // below this loop to ensure both points are updated\n                                // before gestures are emitted.\n                                break;\n                            }\n\n                            // If we're not dragging try to process a hold event.\n                            float sqDist = Vector2.DistanceSquared(touch.Position, touch.PressPosition);\n                            if (_dragGestureStarted == GestureType.None && sqDist < TapJitterTolerance * TapJitterTolerance)\n                            {\n                                ProcessHold(currentTimestamp, ref touch);\n                                break;\n                            }\n\n                            // If the touch state has changed then do a drag gesture.\n                            if (stateChanged)\n                                ProcessDrag(ref touch);\n                            break;\n                        }\n\n                    case TouchLocationState.Released:\n                        {\n                            // If the touch state hasn't changed then this\n                            // is an old release event... skip it.\n                            if (!stateChanged)\n                                break;\n\n                            // If this is one of the pinch locations then we\n                            // need to fire off the complete event and stop\n                            // the pinch gesture operation.\n                            if (_pinchGestureStarted\n                            && (touch.Id == _pinchTouch[0].Id || touch.Id == _pinchTouch[1].Id))\n                            {\n                                if (IsGestureEnabled(GestureType.PinchComplete))\n                                    GestureList.Enqueue(new GestureSample(\n                                                            GestureType.PinchComplete, touch.Timestamp,\n                                                            Vector2.Zero, Vector2.Zero,\n                                                            Vector2.Zero, Vector2.Zero));\n\n                                _pinchGestureStarted = false;\n                                _pinchTouch[0] = new GestureLocationData();\n                                _pinchTouch[1] = new GestureLocationData();\n                                break;\n                            }\n\n                            // If there are still other pressed locations then there\n                            // is nothing more we can do with this release.\n                            if (heldLocations != 0)\n                                break;\n\n                            // From testing XNA it seems we need a velocity \n                            // of about 100 to classify this as a flick.\n                            if (IsGestureEnabled(GestureType.Flick))\n                            {\n                                float sqDist = Vector2.DistanceSquared(touch.Position, touch.PressPosition);\n                                if (sqDist > TapJitterTolerance * TapJitterTolerance\n                                && touch.Velocity.LengthSquared() > 100.0f * 100.0f)\n                                {\n                                    GestureList.Enqueue(new GestureSample(\n                                                            GestureType.Flick, touch.Timestamp,\n                                                            Vector2.Zero, Vector2.Zero,\n                                                            touch.Velocity, Vector2.Zero));\n\n                                    //fall through, a drag should still happen even if a flick does\n                                }\n                            }\n\n                            // If a drag is active then we need to finalize it.\n                            if (_dragGestureStarted != GestureType.None)\n                            {\n                                if (IsGestureEnabled(GestureType.DragComplete))\n                                    GestureList.Enqueue(new GestureSample(\n                                                            GestureType.DragComplete, touch.Timestamp,\n                                                            Vector2.Zero, Vector2.Zero,\n                                                            Vector2.Zero, Vector2.Zero));\n\n                                _dragGestureStarted = GestureType.None;\n                                break;\n                            }\n\n                            // If all else fails try to process it as a tap.\n                            ProcessTap(currentTimestamp, ref touch);\n                            break;\n                        }\n                }\n            }\n\n            // If the touch state hasn't changed then there is no \n            // cleanup to do and no pinch to process.\n            if (!stateChanged)\n                return;\n\n            // If we have two pinch points then update the pinch state.\n            if (IsGestureEnabled(GestureType.Pinch)\n            && _pinchTouch[0].State != TouchLocationState.Invalid\n            && _pinchTouch[1].State != TouchLocationState.Invalid)\n                ProcessPinch(_pinchTouch);\n            else\n            {\n                // Make sure a partial pinch state \n                // is not left hanging around.\n                _pinchGestureStarted = false;\n                _pinchTouch[0] = new GestureLocationData();\n                _pinchTouch[1] = new GestureLocationData();\n            }\n\n            // If all points are released then clear some states.\n            if (heldLocations == 0)\n            {\n                _tapDisabled = false;\n                _holdDisabled = false;\n                _dragGestureStarted = GestureType.None;\n            }\n        }\n\n        private void ProcessHold(TimeSpan currentTimestamp, ref GestureLocationData touch)\n        {\n            if (!IsGestureEnabled(GestureType.Hold) || _holdDisabled)\n                return;\n\n            TimeSpan elapsed = currentTimestamp - touch.PressTimestamp;\n            if (elapsed < TimeRequiredForHold)\n                return;\n\n            _holdDisabled = true;\n\n            GestureList.Enqueue(\n                new GestureSample(GestureType.Hold,\n                                    touch.Timestamp,\n                                    touch.Position, Vector2.Zero,\n                                    Vector2.Zero, Vector2.Zero));\n        }\n\n        private bool ProcessDoubleTap(ref GestureLocationData touch)\n        {\n            if (!IsGestureEnabled(GestureType.DoubleTap)\n            || _tapDisabled\n            || _lastTap.State == TouchLocationState.Invalid)\n                return false;\n\n            // If the new tap is too far away from the last then\n            // this cannot be a double tap event.\n            float sqDist = Vector2.DistanceSquared(touch.Position, _lastTap.Position);\n            if (sqDist > TapJitterTolerance * TapJitterTolerance)\n                return false;\n\n            // Check that this tap happened within the standard \n            // double tap time threshold of 300 milliseconds.\n            TimeSpan elapsed = touch.Timestamp - _lastTap.Timestamp;\n            if (elapsed.TotalMilliseconds > 300)\n                return false;\n\n            GestureList.Enqueue(new GestureSample(\n                           GestureType.DoubleTap, touch.Timestamp,\n                           touch.Position, Vector2.Zero,\n                           Vector2.Zero, Vector2.Zero));\n\n            // Disable taps until after the next release.\n            _tapDisabled = true;\n\n            return true;\n        }\n\n        private GestureLocationData _lastTap;\n\n        private void ProcessTap(TimeSpan currentTimestamp, ref GestureLocationData touch)\n        {\n            if (_tapDisabled)\n                return;\n\n            // If the release is too far away from the press \n            // position then this cannot be a tap event.\n            float sqDist = Vector2.DistanceSquared(touch.PressPosition, touch.Position);\n            if (sqDist > TapJitterTolerance * TapJitterTolerance)\n                return;\n\n            // If we pressed and held too long then don't \n            // generate a tap event for it.\n            TimeSpan elapsed = currentTimestamp - touch.PressTimestamp;\n            if (elapsed > TimeRequiredForHold)\n                return;\n\n            // Store the last tap for \n            // double tap processing.\n            _lastTap = touch;\n\n            // Fire off the tap event immediately.\n            if (IsGestureEnabled(GestureType.Tap))\n            {\n                GestureSample tap = new GestureSample(\n                    GestureType.Tap, touch.Timestamp,\n                    touch.Position, Vector2.Zero,\n                    Vector2.Zero, Vector2.Zero);\n                GestureList.Enqueue(tap);\n            }\n        }\n\n        private GestureType _dragGestureStarted = GestureType.None;\n\n        private void ProcessDrag(ref GestureLocationData touch)\n        {\n            bool dragH = IsGestureEnabled(GestureType.HorizontalDrag);\n            bool dragV = IsGestureEnabled(GestureType.VerticalDrag);\n            bool dragF = IsGestureEnabled(GestureType.FreeDrag);\n\n            if (!dragH && !dragV && !dragF)\n                return;\n\n            // Make sure this is a move event and that we have\n            // a previous touch location.\n            GestureLocationData prevTouch;\n            if (touch.State != TouchLocationState.Moved\n            || !touch.TryGetPreviousLocationData(out prevTouch))\n                return;\n\n            Vector2 delta = touch.Position - prevTouch.Position;\n\n            // If we're free dragging then stick to it.\n            if (_dragGestureStarted != GestureType.FreeDrag)\n            {\n                bool isHorizontalDelta = Math.Abs(delta.X) > Math.Abs(delta.Y * 2.0f);\n                bool isVerticalDelta = Math.Abs(delta.Y) > Math.Abs(delta.X * 2.0f);\n                bool classify = _dragGestureStarted == GestureType.None;\n\n                // Once we enter either vertical or horizontal drags\n                // we stick to it... regardless of the delta.\n                if (dragH\n                && ((classify && isHorizontalDelta) || _dragGestureStarted == GestureType.HorizontalDrag))\n                {\n                    delta.Y = 0;\n                    _dragGestureStarted = GestureType.HorizontalDrag;\n                }\n                else if (dragV\n                     && ((classify && isVerticalDelta) || _dragGestureStarted == GestureType.VerticalDrag))\n                {\n                    delta.X = 0;\n                    _dragGestureStarted = GestureType.VerticalDrag;\n                }\n\n                // If the delta isn't either horizontal or vertical\n                //then it could be a free drag if not classified.\n                else if (dragF && classify)\n                {\n                    _dragGestureStarted = GestureType.FreeDrag;\n                }\n                else\n                {\n                    // If we couldn't classify the drag then\n                    // it is nothing... set it to complete.\n                    _dragGestureStarted = GestureType.DragComplete;\n                }\n            }\n\n            // If the drag could not be classified then no gesture.\n            if (_dragGestureStarted == GestureType.None\n            || _dragGestureStarted == GestureType.DragComplete)\n                return;\n\n            _tapDisabled = true;\n            _holdDisabled = true;\n\n            GestureList.Enqueue(new GestureSample(\n                                    _dragGestureStarted, touch.Timestamp,\n                                    touch.Position, Vector2.Zero,\n                                    delta, Vector2.Zero));\n        }\n\n        private void ProcessPinch(GestureLocationData[] touches)\n        {\n            GestureLocationData prevPos0;\n            GestureLocationData prevPos1;\n\n            if (!touches[0].TryGetPreviousLocationData(out prevPos0))\n                prevPos0 = touches[0];\n\n            if (!touches[1].TryGetPreviousLocationData(out prevPos1))\n                prevPos1 = touches[1];\n\n            Vector2 delta0 = touches[0].Position - prevPos0.Position;\n            Vector2 delta1 = touches[1].Position - prevPos1.Position;\n\n            // Get the newest timestamp.\n            TimeSpan timestamp = touches[0].Timestamp > touches[1].Timestamp ? touches[0].Timestamp : touches[1].Timestamp;\n\n            // If we were already in a drag state then fire\n            // off the drag completion event.\n            if (_dragGestureStarted != GestureType.None)\n            {\n                if (IsGestureEnabled(GestureType.DragComplete))\n                    GestureList.Enqueue(new GestureSample(\n                                            GestureType.DragComplete, timestamp,\n                                            Vector2.Zero, Vector2.Zero,\n                                            Vector2.Zero, Vector2.Zero));\n\n                _dragGestureStarted = GestureType.None;\n            }\n\n            GestureList.Enqueue(new GestureSample(\n                GestureType.Pinch,\n                timestamp,\n                touches[0].Position, touches[1].Position,\n                delta0, delta1));\n\n            _pinchGestureStarted = true;\n            _tapDisabled = true;\n            _holdDisabled = true;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/Touch/TouchPanelStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Input.Touch;\n\nnamespace Microsoft.Xna.Platform.Input.Touch\n{\n    public abstract partial class TouchPanelStrategy\n    {\n        private readonly Stopwatch _stopwatch;\n\n        private IntPtr _windowHandle;\n        private int _displayWidth;\n        private int _displayHeight;\n        private DisplayOrientation _displayOrientation;\n        private GestureType _enabledGestures;\n\n        protected TouchPanelCapabilities _capabilities;\n\n        public virtual IntPtr WindowHandle\n        {\n            get { return _windowHandle; }\n            set { _windowHandle = value; }\n\n        }\n\n        public virtual int DisplayWidth\n        {\n            get { return _displayWidth; }\n            set { _displayWidth = value; }\n        }\n\n        public virtual int DisplayHeight\n        {\n            get { return _displayHeight; }\n            set { _displayHeight = value; }\n        }\n\n        public virtual DisplayOrientation DisplayOrientation\n        {\n            get { return _displayOrientation; }\n            set { _displayOrientation = value; }\n        }\n         \n        public virtual GestureType EnabledGestures\n        {\n            get { return _enabledGestures; }\n            set { _enabledGestures = value; }\n        }\n\n        public virtual bool IsGestureAvailable\n        {\n            get\n            {\n                return this.LegacyIsGestureAvailable;\n            }\n        }\n\n        protected TouchPanelStrategy()\n        {\n            _stopwatch = Stopwatch.StartNew();\n\n            // the current implementation need to update on each frame\n            ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate += this.UpdateCurrentTimestamp;\n        }\n\n        public virtual TouchPanelCapabilities GetCapabilities()\n        {\n            throw new NotImplementedException();\n        }\n\n        public virtual TouchCollection GetState()\n        {\n            return this.LegacyGetState();\n        }\n\n        public virtual GestureSample ReadGesture()\n        {\n            return this.LegacyReadGesture();\n        }\n\n        public abstract void AddPressedEvent(int nativeTouchId, Vector2 position);\n        public abstract void AddMovedEvent(int nativeTouchId, Vector2 position);\n        public abstract void AddReleasedEvent(int nativeTouchId, Vector2 position);\n        public abstract void AddCanceledEvent(int nativeTouchId, Vector2 position);\n\n        /// <summary>\n        /// This will invalidate the touch panel state.\n        /// </summary>\n        /// <remarks>\n        /// Called from orientation change on mobiles, window clientBounds changes, minimize, etc\n        /// </remarks>\n        public void BlazorCancelAllTouches()\n        {\n            // local copy of touchStates\n            int[] nativeTouchIds = new int[_touchIdsMap.Count];\n            _touchIdsMap.Keys.CopyTo(nativeTouchIds, 0);\n\n            // submit a Canceled event for each touch Id\n            for (int i = 0; i < nativeTouchIds.Length; i++)\n                AddCanceledEvent(nativeTouchIds[i], Vector2.Zero);\n        }\n\n        public void TestReleaseAllTouches()\n        {\n            // local copy of touchStates\n            int[] nativeTouchIds = new int[_touchIdsMap.Count];\n            _touchIdsMap.Keys.CopyTo(nativeTouchIds, 0);\n\n            for (int i = 0; i < nativeTouchIds.Length; i++)\n                AddReleasedEvent(nativeTouchIds[i], Vector2.Zero);\n        }\n\n        protected TouchPanelCapabilities CreateTouchPanelCapabilities(int maximumTouchCount, bool isConnected, bool hasPressure)\n        {\n            TouchPanelCapabilities caps = new TouchPanelCapabilities();\n            caps._maximumTouchCount = maximumTouchCount;\n            caps._isConnected = isConnected;\n            caps._hasPressure = hasPressure;\n\n            return caps;\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/TouchButtonState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Defines a button state for buttons of mouse, gamepad or joystick.\n    /// </summary>\n    public enum TouchButtonState\n    {\n        /// <summary>\n        /// The button is released.\n        /// </summary>\n        Released = 0,\n\n        /// <summary>\n        /// The button is pressed.\n        /// </summary>\n        Pressed = 1,\n\n        /// <summary>\n        /// The button is touched.\n        /// </summary>\n        Touched = 2,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/XR/ITouchControllerInput.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\n\n\nnamespace Microsoft.Xna.Platform.Input.XR\n{\n    public interface ITouchControllerInput\n    {\n        void GetCapabilities(TouchControllerType type,\n            ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected,\n            ref Buttons buttons,\n            ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor,\n            ref bool hasVoiceSupport\n            );\n        GamePadState GetState(TouchControllerType type);\n        bool SetVibration(TouchControllerType type, float amplitude);\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Input/Input/XR/TouchController.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Input;\nusing Microsoft.Xna.Framework.Input.XR;\nusing Microsoft.Xna.Platform.Input;\nusing Microsoft.Xna.Platform.Input.XR;\n\n\nnamespace Microsoft.Xna.Platform.Input\n{\n    public interface ITouchController\n    {\n        ITouchControllerInput DeviceHandle { get; set; }\n\n        GamePadCapabilities GetCapabilities(TouchControllerType type);\n        GamePadState GetState(TouchControllerType type);\n        bool SetVibration(TouchControllerType type, float amplitude);\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Input.XR\n{\n    public class TouchController : ITouchController\n    {\n        private static TouchController _current;\n\n        /// <summary>\n        /// Returns the current GamePad instance.\n        /// </summary> \n        public static TouchController Current\n        {\n            get\n            {\n                if (_current != null)\n                    return _current;\n\n                lock (typeof(TouchController))\n                {\n                    if (_current == null)\n                        _current = new TouchController();\n\n                    return _current;\n                }\n            }\n        }\n\n        public static ITouchControllerInput DeviceHandle\n        {\n            get { return ((ITouchController)TouchController.Current).DeviceHandle; }\n            set { ((ITouchController)TouchController.Current).DeviceHandle = value; }\n        }\n\n        public static GamePadCapabilities GetCapabilities(TouchControllerType type)\n        {\n            return ((ITouchController)TouchController.Current).GetCapabilities(type);\n        }\n\n        public static GamePadState GetState(TouchControllerType type)\n        {\n            return ((ITouchController)TouchController.Current).GetState(type);\n        }\n\n        public static bool SetVibration(TouchControllerType type, float amplitude)\n        {\n            return ((ITouchController)TouchController.Current).SetVibration(type, amplitude);\n        }\n\n\n        private TouchController()\n        {\n        }\n\n        #region ITouchController\n\n        ITouchControllerInput ITouchController.DeviceHandle\n        {\n            get; set;\n        }\n\n        GamePadCapabilities ITouchController.GetCapabilities(TouchControllerType type)\n        {\n            ITouchControllerInput device = ((ITouchController)this).DeviceHandle;\n            if (device != null)\n            {\n                //--\n                GamePadType gamePadType = GamePadType.Unknown;\n                string displayName = String.Empty;\n                string identifier = String.Empty;\n                bool isConnected = false;\n                Buttons buttons = (Buttons)0;\n                bool hasLeftVibrationMotor = false;\n                bool hasRightVibrationMotor = false;\n                bool hasVoiceSupport = false;\n                //--\n\n                device.GetCapabilities(type,\n                    ref gamePadType, ref displayName, ref identifier, ref isConnected,\n                    ref buttons,\n                    ref hasLeftVibrationMotor, ref hasRightVibrationMotor,\n                    ref hasVoiceSupport\n                    );\n\n                return new GamePadCapabilities(\n                        gamePadType: gamePadType,\n                        displayName: displayName,\n                        identifier: identifier,\n                        isConnected: isConnected,\n                        buttons: buttons,\n                        hasLeftVibrationMotor: hasLeftVibrationMotor,\n                        hasRightVibrationMotor: hasRightVibrationMotor,\n                        hasVoiceSupport: hasVoiceSupport\n                    );\n            }\n            else\n            {\n                return new GamePadCapabilities(\n                        gamePadType: GamePadType.Unknown,\n                        displayName: null,\n                        identifier: null,\n                        isConnected: false,\n                        buttons: (Buttons)0,\n                        hasLeftVibrationMotor: false,\n                        hasRightVibrationMotor: false,\n                        hasVoiceSupport: false\n                    );\n            }\n        }\n\n        GamePadState ITouchController.GetState(TouchControllerType type)\n        {\n            ITouchControllerInput device = ((ITouchController)this).DeviceHandle;\n            if (device != null)\n                return device.GetState(type);\n            else\n                return new GamePadState();\n        }\n\n        bool ITouchController.SetVibration(TouchControllerType type, float amplitude)\n        {\n            ITouchControllerInput device = ((ITouchController)this).DeviceHandle;\n            if (device != null)\n                return device.SetVibration(type, amplitude);\n            else\n                return false;\n        }\n\n        #endregion ITouchController\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Input/XR/TouchControllerType.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Input.XR\n{\n    public enum TouchControllerType\n    {\n        LTouch = 0x0001,\n        RTouch = 0x0002,\n        Touch  = 0x0003,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/NamespaceDoc.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Input\n{\n    /// <summary>\n    /// Provides functionality to handle input from keyboards, mice, gamepads, etc.\n    /// </summary>\n    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    class NamespaceDoc\n    {\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Input/Properties/AssemblyInfo.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\n[assembly:CLSCompliant(true)]\n[assembly:InternalsVisibleTo(\"Kni.Tests\")]\n\n"
  },
  {
    "path": "src/Xna.Framework.Input/Xna.Framework.Input.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Input\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{8FB8B257-C091-4C41-B221-75C37B68CD8F}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Input</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Input</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Input framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Input</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"NamespaceDoc.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\Touch\\GestureSample.cs\" />\n    <Compile Include=\"Input\\Touch\\GestureType.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchCollection.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchLocation.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchLocationData.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchLocationState.cs\" />\n    <Compile Include=\"Input\\Touch\\GestureLocationData.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchPanel.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchPanelStrategy.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchPanelStrategy.Legacy.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchPanelStrategy.LegacyGesture.cs\" />\n    <Compile Include=\"Input\\Touch\\TouchPanelCapabilities.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\XR\\ITouchControllerInput.cs\" />\n    <Compile Include=\"Input\\XR\\TouchController.cs\" />\n    <Compile Include=\"Input\\XR\\TouchControllerType.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Input\\Buttons.cs\" />\n    <Compile Include=\"Input\\ButtonState.cs\" />\n    <Compile Include=\"Input\\GamePad.cs\" />\n    <Compile Include=\"Input\\GamePadStrategy.cs\" />\n    <Compile Include=\"Input\\GamePadButtons.cs\" />\n    <Compile Include=\"Input\\GamePadCapabilities.cs\" />\n    <Compile Include=\"Input\\GamePadDeadZone.cs\" />\n    <Compile Include=\"Input\\GamePadDPad.cs\" />\n    <Compile Include=\"Input\\GamePadState.cs\" />\n    <Compile Include=\"Input\\GamePadThumbSticks.cs\" />\n    <Compile Include=\"Input\\GamePadTouchButtons.cs\" />\n    <Compile Include=\"Input\\GamePadTriggers.cs\" />\n    <Compile Include=\"Input\\GamePadType.cs\" />\n    <Compile Include=\"Input\\InputFactory.cs\" />\n    <Compile Include=\"Input\\InputKeyEventArgs.cs\" />\n    <Compile Include=\"Input\\Joystick.cs\" />\n    <Compile Include=\"Input\\JoystickStrategy.cs\" />\n    <Compile Include=\"Input\\JoystickCapabilities.cs\" />\n    <Compile Include=\"Input\\JoystickHat.cs\" />\n    <Compile Include=\"Input\\JoystickState.cs\" />\n    <Compile Include=\"Input\\Keyboard.cs\" />\n    <Compile Include=\"Input\\KeyboardStrategy.cs\" />\n    <Compile Include=\"Input\\KeyboardState.cs\" />\n    <Compile Include=\"Input\\KeyboardInput.cs\" />\n    <Compile Include=\"Input\\KeyboardInputStrategy.cs\" />\n    <Compile Include=\"Input\\MessageBox.cs\" />\n    <Compile Include=\"Input\\MessageBoxStrategy.cs\" />\n    <Compile Include=\"Input\\Keys.cs\" />\n    <Compile Include=\"Input\\KeyState.cs\" />\n    <Compile Include=\"Input\\Mouse.cs\" />\n    <Compile Include=\"Input\\MouseStrategy.cs\" />\n    <Compile Include=\"Input\\MouseCursor.cs\" />\n    <Compile Include=\"Input\\MouseCursorStrategy.cs\" />\n    <Compile Include=\"Input\\MouseState.cs\" />\n    <Compile Include=\"Input\\TextInputEventArgs.cs\" />\n    <Compile Include=\"Input\\TouchButtonState.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Media/Content/SongReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Media.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class SongReader : ContentTypeReader<Song>\n    {\n        protected override Song Read(ContentReader input, Song existingInstance)\n        {\n            string path = input.ReadString();\n            int durationMs = input.ReadObject<int>();\n\n            if (String.IsNullOrEmpty(path))\n                throw new InvalidOperationException();\n\n            {\n                // Add the ContentManager's RootDirectory\n                string assetsLocationFullPath = ((ITitleContainer)TitleContainer.Current).Location;\n                string rootDirectoryFullPath = Path.Combine(assetsLocationFullPath, input.ContentManager.RootDirectory);\n                string dirPath = Path.Combine(rootDirectoryFullPath, input.AssetName);\n\n                // Resolve the relative path\n                path = FileHelpers.ResolveRelativePath(dirPath, path);\n            }\n\n            string name = Path.GetFileNameWithoutExtension(path);\n            Uri streamSource = new Uri(path, UriKind.RelativeOrAbsolute);\n            Song result = existingInstance ?? new Song(name, streamSource, durationMs);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Content/VideoReader.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\nusing Microsoft.Xna.Platform;\nusing Microsoft.Xna.Platform.Media.Utilities;\n\nnamespace Microsoft.Xna.Framework.Content\n{\n    internal class VideoReader : ContentTypeReader<Video>\n    {\n        protected override Video Read(ContentReader input, Video existingInstance)\n        {\n            string path = input.ReadObject<string>();\n            int durationMS = input.ReadObject<int>();\n            int width = input.ReadObject<int>();\n            int height = input.ReadObject<int>();\n            float framesPerSecond = input.ReadObject<float>();\n            VideoSoundtrackType soundTrackType = (VideoSoundtrackType)input.ReadObject<int>();  // 0 = Music, 1 = Dialog, 2 = Music and dialog\n\n            if (String.IsNullOrEmpty(path))\n                throw new InvalidOperationException();\n\n            {\n                // Add the ContentManager's RootDirectory\n                string assetsLocationFullPath = ((ITitleContainer)TitleContainer.Current).Location;\n                string rootDirectoryFullPath = Path.Combine(assetsLocationFullPath, input.ContentManager.RootDirectory);\n                string dirPath = Path.Combine(rootDirectoryFullPath, input.AssetName);\n\n                // Resolve the relative path\n                path = FileHelpers.ResolveRelativePath(dirPath, path);\n            }\n\n            Video result = new Video(input.GetGraphicsDevice(), path, durationMS);\n            result.Width = width;\n            result.Height = height;\n            result.FramesPerSecond = framesPerSecond;\n            result.VideoSoundtrackType = soundTrackType;\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/ILLink.Descriptors.xml",
    "content": "<linker>\n  <assembly fullname=\"Xna.Framework.Media\" >\n    <type fullname=\"Microsoft.Xna.Framework.Content.SongReader\" preserve=\"all\" />\n    <type fullname=\"Microsoft.Xna.Framework.Content.VideoReader\" preserve=\"all\" />\n  </assembly>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/Album.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Platform.Media;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class Album : IDisposable\n        , IPlatformAlbum\n    {\n        private AlbumStrategy _strategy;\n\n        AlbumStrategy IPlatformAlbum.Strategy { get { return _strategy; } }\n\n\n        public Artist Artist\n        {\n            get { return _strategy.Artist; }\n        }\n\n        /// <summary>\n        /// Gets the duration of the Album.\n        /// </summary>\n        public TimeSpan Duration\n        {\n            get { return _strategy.Duration; }\n        }\n\n        /// <summary>\n        /// Gets the Genre of the Album.\n        /// </summary>\n        public Genre Genre\n        {\n            get { return _strategy.Genre; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the Album has associated album art.\n        /// </summary>\n        public bool HasArt\n        {\n            get { return _strategy.HasArt; }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the object is disposed.\n        /// </summary>\n        public bool IsDisposed\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Gets the name of the Album.\n        /// </summary>\n        public string Name\n        {\n            get { return _strategy.Name; }\n        }\n\n        /// <summary>\n        /// Gets a SongCollection that contains the songs on the album.\n        /// </summary>\n        public SongCollection Songs\n        {\n            get { return _strategy.Songs; }\n        }\n\n        internal Album(AlbumStrategy strategy)\n        {\n            _strategy = strategy;\n        }\n\n\n        /// <summary>\n        /// Immediately releases the unmanaged resources used by this object.\n        /// </summary>\n        public void Dispose()\n        {\n            _strategy.Dispose();\n        }\n\n\n        /// <summary>\n        /// Returns the stream that contains the album art image data.\n        /// </summary>\n        public Stream GetAlbumArt()\n        {\n            return _strategy.GetAlbumArt();\n        }\n\n        /// <summary>\n        /// Returns the stream that contains the album thumbnail image data.\n        /// </summary>\n        public Stream GetThumbnail()\n        {\n            return _strategy.GetThumbnail();\n        }\n\n        /// <summary>\n        /// Returns a String representation of this Album.\n        /// </summary>\n        public override string ToString()\n        {\n            return _strategy.Name;\n        }\n\n        /// <summary>\n        /// Gets the hash code for this instance.\n        /// </summary>\n        public override int GetHashCode()\n        {\n            return _strategy.Name.GetHashCode();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/AlbumCollection.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class AlbumCollection : IDisposable\n    {\n        private List<Album> _innerList;\n\n        /// <summary>\n        /// Gets a value indicating whether the object is disposed.\n        /// </summary>\n        public bool IsDisposed\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Gets the number of Album objects in the AlbumCollection.\n        /// </summary>\n        public int Count\n        {\n            get { return this._innerList.Count; }\n        }\n\n\n        internal AlbumCollection(List<Album> albums)\n        {\n            this._innerList = albums;\n        }\n\n        /// <summary>\n        /// Gets the Album at the specified index in the AlbumCollection.\n        /// </summary>\n        /// <param name=\"index\">Index of the Album to get.</param>\n        public Album this[int index]\n        {\n            get { return this._innerList[index]; }\n        }\n\n        /// <summary>\n        /// Immediately releases the unmanaged resources used by this object.\n        /// </summary>\n        public void Dispose()\n        {\n            foreach (Album album in this._innerList)\n                album.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/AlbumStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public interface IPlatformAlbum\n    {\n        AlbumStrategy Strategy { get; }\n    }\n\n    abstract public class AlbumStrategy : IDisposable\n    {\n        abstract public string Name { get; }\n        abstract public Artist Artist { get; }\n        abstract public Genre Genre { get; }\n        abstract public TimeSpan Duration { get; }\n        abstract public bool HasArt { get; }\n        abstract public SongCollection Songs { get; }\n\n\n        public AlbumStrategy()\n        {\n        }\n\n        abstract public Stream GetAlbumArt();\n        abstract public Stream GetThumbnail();\n        \n\n        #region IDisposable\n        ~AlbumStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        abstract protected void Dispose(bool disposing);\n        #endregion\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/Artist.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class Artist : IDisposable\n    {\n        private string _name;\n\n        /// <summary>\n        /// Gets the AlbumCollection for the Artist.\n        /// </summary>\n        public AlbumCollection Albums\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the object is disposed.\n        /// </summary>\n        public bool IsDisposed\n        {\n            get { return true; }\n        }\n\n        /// <summary>\n        /// Gets the name of the Artist.\n        /// </summary>\n        public string Name\n        {\n            get { return this._name; }\n        }\n\n        /// <summary>\n        /// Gets the SongCollection for the Artist.\n        /// </summary>\n        public SongCollection Songs\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public Artist(string name)\n        {\n            this._name = name;\n        }\n\n        /// <summary>\n        /// Immediately releases the unmanaged resources used by this object.\n        /// </summary>\n        public void Dispose()\n        {\n        }\n\n        /// <summary>\n        /// Returns a String representation of the Artist.\n        /// </summary>\n        public override string ToString()\n        {\n            return this._name;\n        }\n\n        /// <summary>\n        /// Gets the hash code for this instance.\n        /// </summary>\n        public override int GetHashCode()\n        {\n            return this._name.GetHashCode();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/Genre.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class Genre : IDisposable\n    {\n        private string _name;\n\n        /// <summary>\n        /// Gets the AlbumCollection for the Genre.\n        /// </summary>\n        public AlbumCollection Albums\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        /// Gets a value indicating whether the object is disposed.\n        /// </summary>\n        public bool IsDisposed\n        {\n            get { return true; }\n        }\n\n        /// <summary>\n        /// Gets the name of the Genre.\n        /// </summary>\n        public string Name\n        {\n            get { return this._name; }\n        }\n\n        /// <summary>\n        /// Gets the SongCollection for the Genre.\n        /// </summary>\n        public SongCollection Songs\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public Genre(string name)\n        {\n            this._name = name;\n        }\n\n        /// <summary>\n        /// Immediately releases the unmanaged resources used by this object.\n        /// </summary>\n        public void Dispose()\n        {\n        }\n\n        /// <summary>\n        /// Returns a String representation of the Genre.\n        /// </summary>\n        public override string ToString()\n        {\n            return this._name;\n        }\n\n        /// <summary>\n        /// Gets the hash code for this instance.\n        /// </summary>\n        public override int GetHashCode()\n        {\n            return this._name.GetHashCode();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaFactory.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public abstract class MediaFactory\n    {\n        private volatile static MediaFactory _current;\n\n        public static MediaFactory Current\n        {\n            get\n            {\n                MediaFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (typeof(MediaFactory))\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"MediaFactory not found.\");\n                    Console.WriteLine(\"Initialize media with 'MediaFactory.RegisterMediaFactory(new ConcreteMediaFactory());'.\");\n                    MediaFactory mediaFactory = CreateMediaFactory();\n                    MediaFactory.RegisterMediaFactory(mediaFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static MediaFactory CreateMediaFactory()\n        {\n            Console.WriteLine(\"Registering Concrete MediaFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.Media.ConcreteMediaFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(MediaFactory)) && !type.IsAbstract)\n                    return (MediaFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterMediaFactory(MediaFactory mediaFactory)\n        {\n            if (mediaFactory == null)\n                throw new NullReferenceException(\"mediaFactory\");\n\n            lock (typeof(MediaFactory))\n            {\n                if (_current == null)\n                    _current = mediaFactory;\n                else\n                    throw new InvalidOperationException(\"MediaFactory allready registered.\");\n            }\n        }\n\n        public abstract MediaLibraryStrategy CreateMediaLibraryStrategy();\n        public abstract MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource);\n        public abstract MediaPlayerStrategy CreateMediaPlayerStrategy();\n        public abstract SongStrategy CreateSongStrategy(string name, Uri streamSource);\n        public abstract VideoPlayerStrategy CreateVideoPlayerStrategy();\n        public abstract VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan);\n\n        public abstract IList<MediaSource> GetAvailableMediaSources();\n\n        protected MediaSource CreateMediaSource(string name, MediaSourceType type)\n        {\n            return new MediaSource(name, type);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaLibrary.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework.Content;\nusing Microsoft.Xna.Platform.Media;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public partial class MediaLibrary : IDisposable\n        , IPlatformMediaLibrary\n    {\n        private MediaLibraryStrategy _strategy;\n        bool _isDisposed;\n\n        MediaLibraryStrategy IPlatformMediaLibrary.Strategy { get { return _strategy; } }\n        public bool IsDisposed { get { return _isDisposed; } }\n\n        public MediaSource MediaSource { get { return _strategy.MediaSource; } }\n        public AlbumCollection Albums { get { return _strategy.Albums;  } }\n        public SongCollection Songs { get { return _strategy.Songs; } }\n        //public ArtistCollection Artists { get; private set; }\n        //public GenreCollection Genres { get; private set; }\n        //public PlaylistCollection Playlists { get; private set; }\n\n\n        public MediaLibrary()\n        {\n            _strategy = MediaFactory.Current.CreateMediaLibraryStrategy();\n        }\n\n        public MediaLibrary(MediaSource mediaSource)\n        {\n            _strategy = MediaFactory.Current.CreateMediaLibraryStrategy(mediaSource);\n        }\n\n        // Trick to prevent the linker removing the code, but not actually execute the code\n        static bool _trimmingFalseFlag = false;\n        internal static void PreserveMediaContentTypeReaders()\n        {\n#pragma warning disable 0219, 0649\n            // Trick to prevent the linker removing the code, but not actually execute the code\n            if (_trimmingFalseFlag)\n            {\n                // Dummy variables required for it to work with trimming ** DO NOT DELETE **\n                // This forces the classes not to be optimized out when deploying with trimming\n\n                // Framework.Media types\n                var hSongReader = new SongReader();\n                var hVideoReader = new VideoReader();\n            }\n#pragma warning restore 0219, 0649\n        }\n\n        /// <summary>\n        /// Load the contents of MediaLibrary. This blocking call might take up to a few minutes depending on the platform and the size of the user's music library.\n        /// </summary>\n        /// <param name=\"progressCallback\">Callback that reports back the progress of the music library loading in percents (0-100).</param>\n        public void Load(Action<int> progressCallback = null)\n        {\n            _strategy.Load(progressCallback);\n        }\n        \n        \n        public void SavePicture(string name, byte[] imageBuffer)\n        {\n            _strategy.SavePicture(name, imageBuffer);\n        }\n\n        public void SavePicture(string name, Stream source)\n        {\n            _strategy.SavePicture(name, source);\n        }\n\n\n\n        #region IDisposable Implementation\n\n        ~MediaLibrary()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    _strategy.Dispose();\n                }\n\n                _isDisposed = true;\n            }\n        }\n\n        #endregion\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaLibraryStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public interface IPlatformMediaLibrary\n    {\n        MediaLibraryStrategy Strategy { get; }\n    }\n\n    abstract public class MediaLibraryStrategy : IDisposable\n    {\n        public virtual MediaSource MediaSource { get; private set; }\n        abstract public AlbumCollection Albums { get; }\n        abstract public SongCollection Songs { get; }\n        abstract public PlaylistCollection Playlists  { get; }\n        //abstract public ArtistCollection Artists  { get; }\n        //abstract public GenreCollection Genres  { get; }\n\n\n        public MediaLibraryStrategy()\n        {\n            MediaSource = null;\n        }\n\n        public MediaLibraryStrategy(MediaSource mediaSource)\n        {\n            MediaSource = mediaSource;\n        }\n\n        abstract public void Load(Action<int> progressCallback = null);\n        abstract public void SavePicture(string name, byte[] imageBuffer);\n        abstract public void SavePicture(string name, Stream source);\n\n\n        protected SongCollection CreateSongCollection(List<Song> songs)\n        {\n            return new SongCollection(songs);\n        }\n\n        protected Song CreateSong(SongStrategy strategy)\n        {\n            return new Song(strategy);\n        }\n\n        protected AlbumCollection CreateAlbumCollection(List<Album> albums)\n        {\n            return new AlbumCollection(albums);\n        }\n\n        protected Album CreateAlbum(AlbumStrategy strategy)\n        {\n            return new Album(strategy);\n        }\n\n        #region IDisposable\n        ~MediaLibraryStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        abstract protected void Dispose(bool disposing);\n        #endregion\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Platform.Media;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class MediaPlayer : IMediaPlayer\n        , IPlatformMediaPlayer\n    {\n        private static MediaPlayer _current;\n\n        /// <summary>\n        /// Returns the current FrameworkDispatcher instance.\n        /// </summary> \n        internal static IMediaPlayer Current\n        {\n            get\n            {\n                lock (typeof(MediaPlayer))\n                {\n                    if (_current == null)\n                    {\n                        _current = new MediaPlayer();\n                    }\n\n                    return _current;\n                }\n            }\n        }\n\n\n        public static event EventHandler<EventArgs> ActiveSongChanged;\n        public static event EventHandler<EventArgs> MediaStateChanged;\n\n\n        #region Properties\n\n        public static MediaQueue Queue\n        {\n            get { return Current.Queue; }\n        }\n        \n        public static bool IsMuted\n        {\n            get { return Current.IsMuted; }\n            set { Current.IsMuted = value; }\n        }\n\n        public static bool IsRepeating \n        {\n            get { return Current.IsRepeating; }\n            set { Current.IsRepeating = value; }\n        }\n\n        public static bool IsShuffled\n        {\n            get { return Current.IsShuffled; }\n            set { Current.IsShuffled = value; }\n        }\n\n        public static bool IsVisualizationEnabled\n        {\n            get { return Current.IsVisualizationEnabled; }\n            set { Current.IsVisualizationEnabled = value; }\n        }\n\n        public static TimeSpan PlayPosition\n        {\n            get { return Current.PlayPosition; }\n        }\n\n        public static MediaState State\n        {\n            get { return Current.State; }\n        }\n        \n        public static bool GameHasControl\n        {\n            get { return Current.GameHasControl; }\n        }\n        \n        public static float Volume\n        {\n            get { return Current.Volume; }\n            set { Current.Volume = value; }\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Play clears the current playback queue, and then queues up the specified song for playback. \n        /// Playback starts immediately at the beginning of the song.\n        /// </summary>\n        public static void Play(Song song)\n        {\n            MediaPlayer.Current.Play(song);\n        }\n\n        public static void Play(SongCollection collection)\n        {\n            MediaPlayer.Current.Play(collection);\n        }\n\n        public static void Play(SongCollection collection, int index)\n        {\n            MediaPlayer.Current.Play(collection, index);\n        }\n\n        public static void Pause()\n        {\n            MediaPlayer.Current.Pause();\n        }\n\n        public static void Resume()\n        {\n            MediaPlayer.Current.Resume();\n        }\n\n        public static void Stop()\n        {\n            MediaPlayer.Current.Stop();\n        }\n\n        public static void MoveNext()\n        {\n            MediaPlayer.Current.MoveNext();\n        }\n\n        public static void MovePrevious()\n        {\n            MediaPlayer.Current.MovePrevious();\n        }\n\n        internal void OnActiveSongChanged(EventArgs args)\n        {\n            var handler = _activeSongChanged;\n            if (handler != null)\n                handler(this, args);\n\n            var staticHandler = MediaPlayer.ActiveSongChanged;\n            if (staticHandler != null)\n                staticHandler(null, args);\n        }\n\n        internal void OnMediaStateChanged(EventArgs args)\n        {\n            var handler = _mediaStateChanged;\n            if (handler != null)\n                handler(this, args);\n\n            var staticHandler = MediaPlayer.MediaStateChanged;\n            if (staticHandler != null)\n                staticHandler(null, args);\n        }\n\n\n        private MediaPlayerStrategy _strategy;\n\n        private event EventHandler<EventArgs> _activeSongChanged;\n        private event EventHandler<EventArgs> _mediaStateChanged;\n\n\n        MediaPlayerStrategy IPlatformMediaPlayer.Strategy { get { return _strategy; } }\n\n\n        event EventHandler<EventArgs> IMediaPlayer.ActiveSongChanged\n        {\n            add { _activeSongChanged += value; }\n            remove { ActiveSongChanged -= value; }\n        }\n\n        event EventHandler<EventArgs> IMediaPlayer.MediaStateChanged\n        {\n            add { _mediaStateChanged += value; }\n            remove { _mediaStateChanged -= value; }\n        }\n\n\n        MediaQueue IMediaPlayer.Queue\n        {\n            get { return _strategy.Queue; }\n        }\n\n        bool IMediaPlayer.IsMuted\n        {\n            get { return _strategy.PlatformIsMuted; }\n            set { _strategy.PlatformIsMuted = value; }\n        }\n\n        bool IMediaPlayer.IsRepeating\n        {\n            get { return _strategy.PlatformIsRepeating; }\n            set { _strategy.PlatformIsRepeating = value; }\n        }\n\n        bool IMediaPlayer.IsShuffled\n        {\n            get { return _strategy.PlatformIsShuffled; }\n            set { _strategy.PlatformIsShuffled = value; }\n        }\n\n        bool IMediaPlayer.IsVisualizationEnabled\n        {\n            get { return _strategy.PlatformIsVisualizationEnabled; }\n            set { _strategy.PlatformIsVisualizationEnabled = value; }\n        }\n\n        TimeSpan IMediaPlayer.PlayPosition\n        {\n            get { return _strategy.PlatformPlayPosition; }\n        }\n\n        MediaState IMediaPlayer.State\n        {\n            get { return _strategy.State; }\n        }\n\n        bool IMediaPlayer.GameHasControl\n        {\n            get { return _strategy.PlatformGameHasControl; }\n        }\n\n        float IMediaPlayer.Volume\n        {\n            get { return _strategy.PlatformVolume; }\n            set\n            {\n                float volume = MathHelper.Clamp(value, 0, 1);\n                _strategy.PlatformVolume = volume;\n            }\n        }\n\n\n        private MediaPlayer()\n        {\n            _strategy = MediaFactory.Current.CreateMediaPlayerStrategy();\n            _strategy.MediaPlayer = this;\n        }\n\n        void IMediaPlayer.Play(Song song)\n        {\n            if (song == null)\n                throw new ArgumentNullException(\"song\", \"This method does not accept null for this parameter.\");\n\n            Song previousSong = _strategy.Queue.Count > 0\n                              ? _strategy.Queue[0]\n                              : null;\n\n            _strategy.PlatformClearQueue();\n            _strategy.Queue.Add(song);\n            _strategy.Queue.ActiveSongIndex = 0;\n\n            if (song.IsDisposed)\n                throw new ObjectDisposedException(\"song\");\n\n            _strategy.PlatformPlaySong(song);\n            _strategy._state = MediaState.Playing;\n            _strategy.OnPlatformMediaStateChanged();\n\n            if (previousSong != song)\n                _strategy.OnPlatformActiveSongChanged();\n        }\n\n        void IMediaPlayer.Play(SongCollection collection)\n        {\n            ((IMediaPlayer)this).Play(collection, 0);\n        }\n\n        void IMediaPlayer.Play(SongCollection collection, int index)\n        {\n            if (collection == null)\n                throw new ArgumentNullException(\"collection\", \"This method does not accept null for this parameter.\");\n\n            _strategy.PlatformClearQueue();\n\n            foreach (Song song in collection)\n                _strategy.Queue.Add(song);\n\n            _strategy.Queue.ActiveSongIndex = index;\n\n            Song activeSong = _strategy.Queue.ActiveSong;\n            if (activeSong.IsDisposed)\n                throw new ObjectDisposedException(\"activeSong\");\n\n            _strategy.PlatformPlaySong(activeSong);\n            _strategy._state = MediaState.Playing;\n            _strategy.OnPlatformMediaStateChanged();\n        }\n\n        void IMediaPlayer.Pause()\n        {\n            MediaState state = State;\n            switch (state)\n            {\n                case MediaState.Playing:\n                    if (_strategy.Queue.ActiveSong != null)\n                    {\n                        _strategy.PlatformPause();\n                        _strategy._state =  MediaState.Paused;\n                        _strategy.OnPlatformMediaStateChanged();\n                    }\n                    break;\n            }\n        }\n\n        void IMediaPlayer.Resume()\n        {\n            MediaState state = State;\n            switch (state)\n            {\n                case MediaState.Paused:\n                    {\n                        _strategy.PlatformResume();\n                        _strategy._state = MediaState.Playing;\n                        _strategy.OnPlatformMediaStateChanged();\n                    }\n                    break;\n            }\n        }\n\n        void IMediaPlayer.Stop()\n        {\n            MediaState state = State;\n            switch (state)\n            {\n                case MediaState.Playing:\n                case MediaState.Paused:\n                    {\n                        _strategy.PlatformStop();\n                        _strategy._state = MediaState.Stopped;\n                        _strategy.OnPlatformMediaStateChanged();\n                    }\n                    break;\n            }\n        }\n\n        void IMediaPlayer.MoveNext()\n        {\n            Stop();\n            _strategy.PlatformMoveNext();\n        }\n\n        void IMediaPlayer.MovePrevious()\n        {\n            Stop();\n            _strategy.PlatformMovePrevious();\n        }\n                \n    }\n\n    internal interface IMediaPlayer\n    {\n        MediaQueue Queue { get; }\n        bool IsMuted { get; set; }\n        bool IsRepeating { get; set; }\n        bool IsShuffled { get; set; }\n        bool IsVisualizationEnabled { get; set; }\n        TimeSpan PlayPosition { get; }\n        MediaState State { get; }\n        bool GameHasControl { get; }\n        float Volume { get; set; }\n\n        event EventHandler<EventArgs> ActiveSongChanged;\n        event EventHandler<EventArgs> MediaStateChanged;\n\n        void Play(Song song);\n        void Play(SongCollection collection);\n        void Play(SongCollection collection, int index);\n        void Pause();\n        void Resume();\n        void Stop();\n        void MoveNext();\n        void MovePrevious();\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaPlayerStrategy.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\nusing FrameworkMedia = Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public interface IPlatformMediaPlayer\n    {\n        MediaPlayerStrategy Strategy { get; }\n    }\n\n    abstract public class MediaPlayerStrategy : IDisposable\n    {\n        private float _volume = 1.0f;\n        private bool _isMuted;\n        private bool _isRepeating;\n        private bool _isShuffled;\n        private bool _isVisualizationEnabled;\n\n        internal MediaState _state = MediaState.Stopped;\n\n        private readonly MediaQueue _queue = new MediaQueue();\n        // Need to hold onto this to keep track of how many songs\n        // have played when in shuffle mode\n        protected int _numSongsInQueuePlayed = 0;\n\n        private readonly WeakReference _mediaPlayerRef = new WeakReference(null);\n        internal FrameworkMedia.MediaPlayer MediaPlayer\n        {\n            get { return _mediaPlayerRef.Target as FrameworkMedia.MediaPlayer; }\n            set { _mediaPlayerRef.Target = value; }\n        }\n        \n        ~MediaPlayerStrategy()\n        {\n            Dispose(false);\n        }\n        \n        internal protected MediaState State\n        {\n            get\n            {\n                PlatformUpdateState(ref _state);\n                return _state;\n            }\n        }\n\n        public MediaQueue Queue { get {return _queue; } }\n\n        public virtual float PlatformVolume\n        {\n            get { return _volume; }\n            set { _volume = value; }\n        }\n        public virtual bool PlatformIsMuted\n        {\n            get { return _isMuted; }\n            set { _isMuted = value; }\n        }\n        public virtual bool PlatformIsRepeating\n        {\n            get { return _isRepeating; }\n            set { _isRepeating = value; }\n        }\n\n        public virtual bool PlatformIsShuffled\n        {\n            get { return _isShuffled; }\n            set { _isShuffled = value; }\n        }\n        internal virtual bool PlatformIsVisualizationEnabled\n        {\n            get { return _isVisualizationEnabled; }\n            set { _isVisualizationEnabled = value; }\n        }\n\n        public abstract bool PlatformGameHasControl { get; }\n        public abstract TimeSpan PlatformPlayPosition { get; }\n\n        protected abstract bool PlatformUpdateState(ref MediaState state);\n        public abstract void PlatformPlaySong(Song song);\n        public abstract void PlatformPause();\n        public abstract void PlatformResume();\n        public abstract void PlatformStop();\n\n\n        internal protected void OnPlatformActiveSongChanged()\n        {\n            if (_mediaPlayerRef.Target != null)\n            {\n                FrameworkMedia.MediaPlayer mediaPlayer = (FrameworkMedia.MediaPlayer)_mediaPlayerRef.Target;\n                mediaPlayer.OnActiveSongChanged(EventArgs.Empty);\n            }\n        }\n\n        internal protected void OnPlatformMediaStateChanged()\n        {\n            if (_mediaPlayerRef.Target != null)\n            {\n                FrameworkMedia.MediaPlayer mediaPlayer = (FrameworkMedia.MediaPlayer)_mediaPlayerRef.Target;\n                mediaPlayer.OnMediaStateChanged(EventArgs.Empty);\n            }\n        }\n\n        protected internal virtual void PlatformClearQueue()\n        {\n            while (_queue.Count > 0)\n            {\n                Song song = _queue[0];\n                _queue.Remove(song);\n            }\n\n            _numSongsInQueuePlayed = 0;\n        }\n\n        protected void RemoveQueuedSong(Song song)\n        {\n            this.Queue.Remove(song);\n        }\n\n        internal void PlatformMoveNext()\n        {\n            NextSong(1);\n        }\n\n        internal void PlatformMovePrevious()\n        {\n            NextSong(-1);\n        }\n\n        private void NextSong(int direction)\n        {\n            if (PlatformIsRepeating && _queue.ActiveSongIndex >= _queue.Count - 1)\n            {\n                _queue.ActiveSongIndex = 0;\n                \n                // Setting direction to 0 will force the first song\n                // in the queue to be played.\n                // if we're on \"shuffle\", then it'll pick a random one\n                // anyway, regardless of the \"direction\".\n                direction = 0;\n            }\n\n            Song nextSong = _queue.GetNextSong(direction, PlatformIsShuffled);\n            if (nextSong != null)\n            {\n                if (nextSong.IsDisposed)\n                    throw new ObjectDisposedException(\"nextSong\");\n\n                PlatformPlaySong(nextSong);\n                _state = MediaState.Playing;\n                OnPlatformMediaStateChanged();\n            }\n\n            OnPlatformActiveSongChanged();\n        }\n\n        protected void OnSongFinishedPlaying()\n        {\n            Song activeSong = this.Queue.ActiveSong;\n\n            _numSongsInQueuePlayed++;\n            \n            if (_numSongsInQueuePlayed >= _queue.Count)\n            {\n                _numSongsInQueuePlayed = 0;\n                if (!PlatformIsRepeating)\n                {\n                    // Stop\n                    MediaState state = State;\n                    switch (state)\n                    {\n                        case MediaState.Playing:\n                        case MediaState.Paused:\n                            {\n                                PlatformStop();\n                                _state = MediaState.Stopped;\n                                OnPlatformMediaStateChanged();\n                            }\n                            break;\n                    }\n\n                    OnPlatformActiveSongChanged();\n                    return;\n                }\n            }\n\n            // Stop\n            {\n                MediaState state = State;\n                switch (state)\n                {\n                    case MediaState.Playing:\n                    case MediaState.Paused:\n                        {\n                            PlatformStop();\n                            _state = MediaState.Stopped;\n                            OnPlatformMediaStateChanged();\n                        }\n                        break;\n                }\n            }\n\n            NextSong(1);\n        }\n\n\n        #region IDisposable Members\n        \n        /// <summary>Releases the resources held by this <see cref=\"Microsoft.Xna.Framework.Audio.SoundEffect\"/>.</summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {               \n                \n            }\n            \n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaQueue.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class MediaQueue\n    {\n        private List<Song> _songs = new List<Song>();\n        private int _activeSongIndex = -1;\n        private Random _random = new Random();\n\n\n        public MediaQueue()\n        {\n            \n        }\n        \n        public Song ActiveSong\n        {\n            get\n            {\n                if (_songs.Count == 0 || _activeSongIndex < 0)\n                    return null;\n                \n                return _songs[_activeSongIndex];\n            }\n        }\n        \n        public int ActiveSongIndex\n        {\n            get { return _activeSongIndex; }\n            set { _activeSongIndex = value; }\n        }\n\n        public int Count\n        {\n            get { return _songs.Count; }\n        }\n\n        public Song this[int index]\n        {\n            get { return _songs[index]; }\n        }\n\n        internal void Add(Song song)\n        {\n            _songs.Add(song);\n        }\n\n        internal void Remove(Song song)\n        {\n            _songs.Remove(song);\n        }\n\n        internal Song GetNextSong(int direction, bool shuffle)\n        {\n            if (shuffle)\n                _activeSongIndex = _random.Next(_songs.Count);\n            else\t\t\t\n                _activeSongIndex = (int)MathHelper.Clamp(_activeSongIndex + direction, 0, _songs.Count - 1);\n            \n            return _songs[_activeSongIndex];\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaSource.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Platform.Media;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class MediaSource\n    {\n        private string _name;\n        private MediaSourceType _type;\n\n        public string Name { get { return _name; } }\n\n        public MediaSourceType MediaSourceType { get { return _type; } }\n\n        internal MediaSource(string name, MediaSourceType type)\n        {\n            _name = name;\n            _type = type;\n        }\n\n        public static IList<MediaSource> GetAvailableMediaSources()\n        {\n            return MediaFactory.Current.GetAvailableMediaSources();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaSourceType.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Media\n{\n \tpublic enum MediaSourceType\n    {\n        LocalDevice = 0,\n        WindowsMediaConnect = 4\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/MediaState.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public enum MediaState\n    {\n        Stopped,\n        Playing,\n        Paused\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/Playlist.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class Playlist : IDisposable\n    {\n        public TimeSpan Duration\n        {\n            get;\n            internal set;\n        }\n\n        public string Name\n        {\n            get;\n            internal set;\n        }\n\n        public void Dispose()\n        {\n        }\n\n        \n        /*public SongCollection Songs\n        {\n            get\n            {\n            }\n        }*/\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/PlaylistCollection.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n\n    public sealed class PlaylistCollection : ICollection<Playlist>, IEnumerable<Playlist>, IEnumerable, IDisposable\n    {\n        private bool _isReadOnly = false;\n        private List<Playlist> _innerList = new List<Playlist>();\n        \n        public void Dispose()\n        {\n        }\n\n        public IEnumerator<Playlist> GetEnumerator()\n        {\n            return _innerList.GetEnumerator();\n        }\n        \n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _innerList.GetEnumerator();\n        }\n\n        public int Count\n        {\n            get { return _innerList.Count; }\n        }\n        \n        public bool IsReadOnly\n        {\n            get { return this._isReadOnly; }\n        }\n\n        public Playlist this[int index]\n        {\n            get { return this._innerList[index]; }\n        }\n        \n        public void Add(Playlist item)\n        {\n            if (item == null)\n                throw new ArgumentNullException();\n\n            if (_innerList.Count == 0)\n            {\n                this._innerList.Add(item);\n                return;\n            }\n\n            for (int i = 0; i < this._innerList.Count; i++)\n            {\n                if (item.Duration < this._innerList[i].Duration)\n                {\n                    this._innerList.Insert(i, item);\n                    return;\n                }\n            }\n\n            this._innerList.Add(item);\n        }\n        \n        public void Clear()\n        {\n            _innerList.Clear();\n        }\n        \n        public PlaylistCollection Clone()\n        {\n            PlaylistCollection plc = new PlaylistCollection();\n            foreach (Playlist playlist in this._innerList)\n                plc.Add(playlist);\n            return plc;\n        }\n        \n        public bool Contains(Playlist item)\n        {\n            return _innerList.Contains(item);\n        }\n        \n        public void CopyTo(Playlist[] array, int arrayIndex)\n        {\n            _innerList.CopyTo(array, arrayIndex);\n        }\n        \n        public int IndexOf(Playlist item)\n        {\n            return _innerList.IndexOf(item);\n        }\n        \n        public bool Remove(Playlist item)\n        {\n            return _innerList.Remove(item);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/Song.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Platform.Media;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class Song : IEquatable<Song>, IDisposable\n        , IPlatformSong\n    {\n        private SongStrategy _strategy;\n        bool _isDisposed;\n\n        SongStrategy IPlatformSong.Strategy { get { return _strategy; } }\n\n        public bool IsDisposed { get { return _isDisposed; } }\n\n        /// <summary>\n        /// Gets the Album on which the Song appears.\n        /// </summary>\n        public Album Album { get { return _strategy.Album; } }\n\n        /// <summary>\n        /// Gets the Artist of the Song.\n        /// </summary>\n        public Artist Artist { get { return _strategy.Artist; } }\n\n        /// <summary>\n        /// Gets the Genre of the Song.\n        /// </summary>\n        public Genre Genre { get { return _strategy.Genre; } }\n        \n        public TimeSpan Duration { get { return _strategy.Duration; } }\n\n        public bool IsProtected { get { return _strategy.IsProtected; } }\n\n        public bool IsRated { get { return _strategy.IsRated; } }\n\n        public string Name { get { return _strategy.Name; } }\n\n        public int PlayCount { get { return _strategy.PlayCount; } }\n\n        public int Rating { get { return _strategy.Rating; } }\n\n        public int TrackNumber { get { return _strategy.TrackNumber; } }\n\n        internal Song(string name, Uri streamSource, int durationMS)\n        {\n            _strategy = MediaFactory.Current.CreateSongStrategy(name, streamSource);\n            _strategy.Duration = TimeSpan.FromMilliseconds(durationMS);\n        }\n\n        internal Song(string name, Uri streamSource)\n        {\n            MediaLibrary.PreserveMediaContentTypeReaders();\n\n            _strategy = MediaFactory.Current.CreateSongStrategy(name, streamSource);\n        }\n\n        internal Song(SongStrategy strategy)\n        {\n            MediaLibrary.PreserveMediaContentTypeReaders();\n\n            _strategy = strategy;\n        }\n\n        ~Song()\n        {\n            Dispose(false);\n        }\n\n\n        /// <summary>\n        /// Returns a song that can be played via <see cref=\"MediaPlayer\"/>.\n        /// </summary>\n        /// <param name=\"name\">The name for the song. See <see cref=\"Song.Name\"/>.</param>\n        /// <param name=\"uri\">The path to the song file.</param>\n        /// <returns></returns>\n        public static Song FromUri(string name, Uri uri)\n        {\n            Song song = new Song(name, uri);\n            return song;\n        }\n\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        public bool Equals(Song other)\n        {   \n            return (other != null && this._strategy.Filename == other._strategy.Filename);\n        }\n\n        public override bool Equals(Object obj)\n        {\n            if (obj == null)\n            {\n                return false;\n            }\n\n            return Equals(obj as Song);\n        }\n\n        public static bool operator ==(Song left, Song right)\n        {\n            if ((object)left == null)\n            {\n                return (object)right == null;\n            }\n\n            return left.Equals(right);\n        }\n\n        public static bool operator !=(Song left, Song right)\n        {\n            return !(left == right);\n        }\n\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                    _strategy.Dispose();\n\n                _isDisposed = true;\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/SongCollection.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public class SongCollection : ICollection<Song>, IEnumerable<Song>, IEnumerable, IDisposable\n    {\n        private bool _isReadOnly = false;\n        private List<Song> _innerList;\n\n\n        internal SongCollection(List<Song> songs)\n        {\n            this._innerList = songs;\n        }\n\n        public void Dispose()\n        {\n        }\n        \n        public IEnumerator<Song> GetEnumerator()\n        {\n            return _innerList.GetEnumerator();\n        }\n        \n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _innerList.GetEnumerator();\n        }\n\n        public int Count\n        {\n            get { return _innerList.Count; }\n        }\n        \n        public bool IsReadOnly\n        {\n            get { return this._isReadOnly; }\n        }\n\n        public Song this[int index]\n        {\n            get { return this._innerList[index]; }\n        }\n        \n        public void Add(Song item)\n        {\n\n            if (item == null)\n                throw new ArgumentNullException();\n\n            if (_innerList.Count == 0)\n            {\n                this._innerList.Add(item);\n                return;\n            }\n\n            for (int i = 0; i < this._innerList.Count; i++)\n            {\n                if (item.TrackNumber < this._innerList[i].TrackNumber)\n                {\n                    this._innerList.Insert(i, item);\n                    return;\n                }\n            }\n\n            this._innerList.Add(item);\n        }\n        \n        public void Clear()\n        {\n            _innerList.Clear();\n        }\n        \n        public SongCollection Clone()\n        {\n            List<Song> songs = new List<Song>();\n            SongCollection sc = new SongCollection(songs);\n\n            foreach (Song song in this._innerList)\n                sc.Add(song);\n\n            return sc;\n        }\n        \n        public bool Contains(Song item)\n        {\n            return _innerList.Contains(item);\n        }\n        \n        public void CopyTo(Song[] array, int arrayIndex)\n        {\n            _innerList.CopyTo(array, arrayIndex);\n        }\n        \n        public int IndexOf(Song item)\n        {\n            return _innerList.IndexOf(item);\n        }\n        \n        public bool Remove(Song item)\n        {\n            return _innerList.Remove(item);\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/SongStrategy.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Media;\n\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public interface IPlatformSong\n    {\n        SongStrategy Strategy { get; }\n    }\n\n    abstract public class SongStrategy : IDisposable\n    {\n        private string _name;\n        private TimeSpan _duration = TimeSpan.Zero;\n        private int _playCount = 0;\n\n        private Album _album;\n        private Artist _artist;\n        private Genre _genre;\n        private bool _isProtected;\n        private bool _isRated;\n        private int _rating;\n        private int _trackNumber;\n\n        public abstract string Filename { get; }\n\n        public virtual string Name\n        {\n            get { return _name; }\n            set { _name = value; }\n        }\n\n        public virtual TimeSpan Duration\n        {\n            get { return _duration; }\n            set { _duration = value; }\n        }\n\n        public virtual int PlayCount\n        {\n            get { return _playCount; }\n            set { _playCount = value; }\n        }\n\n        public virtual Album Album\n        {\n            get { return _album; }\n            set { _album = value; }\n        }\n\n        public virtual Genre Genre\n        {\n            get { return _genre; }\n            set { _genre = value; }\n        }\n\n        public virtual Artist Artist\n        {\n            get { return _artist; }\n            set { _artist = value; }\n        }\n\n        public virtual bool IsProtected\n        {\n            get { return _isProtected; }\n            set { _isProtected = value; }\n        }\n\n        public virtual bool IsRated\n        {\n            get { return _isRated; }\n            set { _isRated = value; }\n        }\n\n        public virtual int Rating\n        {\n            get { return _rating; }\n            set { _rating = value; }\n        }\n\n        public virtual int TrackNumber\n        {\n            get { return _trackNumber; }\n            set { _trackNumber = value; }\n        }\n\n        protected SongStrategy()\n        {\n        }\n\n        public T ToConcrete<T>() where T : SongStrategy\n        {\n            return (T)this;\n        }\n\n\n        #region IDisposable\n        ~SongStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/Utilities/FileHelpers.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Text.RegularExpressions;\n\nnamespace Microsoft.Xna.Platform.Media.Utilities\n{\n    internal static class FileHelpers\n    {\n        public static readonly char BackwardSlash = '\\\\';\n        public static readonly char ForwardSlash = '/';\n\n        public static readonly string ForwardSlashString = new string(ForwardSlash, 1);\n        private static readonly char[] UrlSafeChars = new[] { '.', '_', '-', ';', '/', '?', '\\\\', ':' };\n\n#if UAP || WINUI\n        public static readonly char Separator = BackwardSlash;\n        public static readonly char NotSeparator = ForwardSlash;\n#else\n        public static readonly char Separator = Path.DirectorySeparatorChar;\n        public static readonly char NotSeparator = (Path.DirectorySeparatorChar == BackwardSlash) ? ForwardSlash : BackwardSlash;\n#endif\n\n        public static string NormalizeFilePathSeparators(string name)\n        {\n            return name.Replace(NotSeparator, Separator);\n        }\n\n        /// <summary>\n        /// Combines the filePath and relativeFile based on relativeFile being a file in the same location as filePath.\n        /// Relative directory operators (..) are also resolved\n        /// </summary>\n        /// <example>\"A\\B\\C.txt\",\"D.txt\" becomes \"A\\B\\D.txt\"</example>\n        /// <example>\"A\\B\\C.txt\",\"..\\D.txt\" becomes \"A\\D.txt\"</example>\n        /// <param name=\"filePath\">Path to the file we are starting from</param>\n        /// <param name=\"relativeFile\">Relative location of another file to resolve the path to</param>\n        public static string ResolveRelativePath(string filePath, string relativeFile)\n        {\n            // Uri accepts forward slashes\n            filePath = filePath.Replace(BackwardSlash, ForwardSlash);\n            relativeFile = relativeFile.Replace(BackwardSlash, ForwardSlash);\n\n            // Sanitize the path of double slashes, they confuse Uri\n            while (filePath.Contains(\"//\"))\n                filePath = filePath.Replace(\"//\", \"/\");\n\n            bool hasForwardSlash = filePath.StartsWith(ForwardSlashString);\n            if (!hasForwardSlash)\n                filePath = ForwardSlashString + filePath;\n\n            // Get a uri for filePath using the file:// schema and no host.\n            Uri src = new Uri(\"file://\" + UrlEncode(filePath));\n\n            Uri dst = new Uri(src, UrlEncode(relativeFile));\n            // The uri now contains the path to the relativeFile with \n            // relative addresses resolved... get the local path.\n            string localPath = dst.LocalPath;\n\n            if (!hasForwardSlash && localPath.StartsWith(\"/\"))\n                localPath = localPath.Substring(1);\n\n            // Convert the directory separator characters to the \n            // correct platform specific separator.\n            return TrimPath(NormalizeFilePathSeparators(localPath));\n        }\n\n        internal static string UrlEncode(string url)\n        {\n            UTF8Encoding encoder = new UTF8Encoding();\n            StringBuilder safeline = new StringBuilder(encoder.GetByteCount(url) * 3);\n\n            foreach (char c in url)\n            {\n                if ((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || Array.IndexOf(UrlSafeChars, c) != -1)\n                    safeline.Append(c);\n                else\n                {\n                    byte[] bytes = encoder.GetBytes(c.ToString());\n\n                    foreach (byte num in bytes)\n                    {\n                        safeline.Append(\"%\");\n                        safeline.Append(num.ToString(\"X\"));\n                    }\n                }\n            }\n\n            return safeline.ToString();\n        }\n\n        private static string TrimPath(string filePath)\n        {\n            // Remove . in filePath\n\n            while (filePath.Contains(\"/./\"))\n                filePath = filePath.Replace(\"/./\", \"/\");\n\n            while (filePath.Contains(@\"\\.\\\"))\n                filePath = filePath.Replace(@\"\\.\\\", @\"\\\");\n\n            filePath = Regex.Replace(filePath, @\"^\\.(\\/|\\\\)\", string.Empty);\n\n            // Remove .. in filePath\n\n            filePath = Regex.Replace(filePath, @\"[^\\/\\\\]+(\\/|\\\\)\\.\\.(\\/|\\\\)\", string.Empty);\n\n            return filePath;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/Video.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\n// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Media;\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    /// <summary>\n    /// Represents a video.\n    /// </summary>\n    public sealed class Video : IDisposable\n        , IPlatformVideo\n    {\n        private VideoStrategy _strategy;\n        private bool _isDisposed;\n\n        VideoStrategy IPlatformVideo.Strategy { get { return _strategy; } }\n\n        #region Public API\n\n        /// <summary>\n        /// Gets the duration of the Video.\n        /// </summary>\n        public TimeSpan Duration { get { return _strategy.Duration; } }\n\n        /// <summary>\n        /// Gets the frame rate of this video.\n        /// </summary>\n        public float FramesPerSecond\n        {\n            get { return _strategy.FramesPerSecond; }\n            internal set { _strategy.FramesPerSecond = value; }\n        }\n\n        /// <summary>\n        /// Gets the height of this video, in pixels.\n        /// </summary>\n        public int Height\n        {\n            get { return _strategy.Height; }\n            internal set { _strategy.Height = value; }\n        }\n\n        /// <summary>\n        /// Gets the VideoSoundtrackType for this video.\n        /// </summary>\n        public VideoSoundtrackType VideoSoundtrackType\n        {\n            get { return _strategy.VideoSoundtrackType; }\n            internal set { _strategy.VideoSoundtrackType = value; }\n        }\n\n        /// <summary>\n        /// Gets the width of this video, in pixels.\n        /// </summary>\n        public int Width\n        {\n            get { return _strategy.Width; }\n            internal set { _strategy.Width = value; }\n}\n\n        #endregion\n\n        #region Internal API\n\n        internal Video(GraphicsDevice graphicsDevice, string fileName, float durationMS)\n        {\n            MediaLibrary.PreserveMediaContentTypeReaders();\n\n            _strategy = MediaFactory.Current.CreateVideoStrategy(graphicsDevice, fileName, TimeSpan.FromMilliseconds(durationMS));\n\n        }\n\n        ~Video()\n        {\n            Dispose(false);\n        }\n\n        #endregion\n\n        #region IDisposable Implementation\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        void Dispose(bool disposing)\n        {\n            if (!_isDisposed)\n            {\n                if (disposing)\n                {\n                    _strategy.Dispose();\n                }\n\n                _isDisposed = true;\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/VideoPlayer.cs",
    "content": "// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing System.Diagnostics;\nusing System.Threading;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.Media;\n\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    public sealed class VideoPlayer : IDisposable\n    {\n        private VideoPlayerStrategy _strategy;\n\n\n        #region Properties\n\n        private VideoPlayerStrategy Strategy\n        {\n            get { return _strategy; }\n        }\n\n\n        /// <summary>\n        /// Gets a value that indicates whether the object is disposed.\n        /// </summary>\n        public bool IsDisposed { get; private set; }\n\n        /// <summary>\n        /// Gets a value that indicates whether the player is playing video in a loop.\n        /// </summary>\n        public bool IsLooped\n        {\n            get { return Strategy.IsLooped; }\n            set { Strategy.IsLooped = value; }\n        }\n\n        /// <summary>\n        /// Gets or sets the muted setting for the video player.\n        /// </summary>\n        public bool IsMuted\n        {\n            get { return Strategy.IsMuted; }\n            set\n            {\n                if (Strategy.IsMuted != value)\n                    Strategy.IsMuted = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets the play position within the currently playing video.\n        /// </summary>\n        public TimeSpan PlayPosition\n        {\n            get\n            {\n                if (Strategy.Video == null)\n                    return TimeSpan.Zero;\n\n                if (State == MediaState.Stopped)\n                    return TimeSpan.Zero;\n\n                return Strategy.PlayPosition;\n            }\n        }\n\n        /// <summary>\n        /// Gets the media playback state, MediaState.\n        /// </summary>\n        public MediaState State\n        { \n            get { return Strategy.State; }\n        }\n\n        /// <summary>\n        /// Gets the Video that is currently playing.\n        /// </summary>\n        public Video Video\n        {\n            get { return Strategy.Video; }\n        }\n\n        /// <summary>\n        /// Video player volume, from 0.0f (silence) to 1.0f (full volume relative to the current device volume).\n        /// </summary>\n        public float Volume\n        {\n            get { return Strategy.Volume; }            \n            set { Strategy.Volume = value; }\n        }\n\n        #endregion\n\n        #region Public API\n\n        public VideoPlayer()\n        {\n            _strategy = MediaFactory.Current.CreateVideoPlayerStrategy();\n        }\n\n        /// <summary>\n        /// Retrieves a Texture2D containing the current frame of video being played.\n        /// </summary>\n        /// <returns>The current frame of video.</returns>\n        /// <exception cref=\"InvalidOperationException\">Thrown if no video is set on the player</exception>\n        /// <exception cref=\"InvalidOperationException\">Thrown if the platform was unable to get a texture in a reasonable amount of time. Often the platform specific media code is running\n        /// in a different thread or process. Note: This may be a change from XNA behaviour</exception>\n        public Texture2D GetTexture()\n        {\n            if (Strategy.Video == null)\n                throw new InvalidOperationException(\"Operation is not valid due to the current state of the object\");\n\n            Texture2D texture = Strategy.PlatformGetTexture();\n            System.Diagnostics.Debug.Assert(texture != null);\n\n            return texture;\n        }\n\n        /// <summary>\n        /// Pauses the currently playing video.\n        /// </summary>\n        public void Pause()\n        {\n            if (Strategy.Video != null)\n                Strategy.PlatformPause();\n        }\n\n        /// <summary>\n        /// Plays a Video.\n        /// </summary>\n        /// <param name=\"video\">Video to play.</param>\n        public void Play(Video video)\n        {\n            if (video == null)\n                throw new ArgumentNullException(\"video is null.\");\n\n            if (Strategy.Video == video)\n            {\n                MediaState state = State;\n                switch (state)\n                {\n                    case MediaState.Stopped:\n                        Strategy.PlatformPlay(video);\n                        return;\n                    case MediaState.Playing:\n                        return;\n                    case MediaState.Paused:\n                        Strategy.PlatformResume();\n                        return;\n                }\n            }\n\n            Strategy.PlatformPlay(video);\n        }\n\n        /// <summary>\n        /// Resumes a paused video.\n        /// </summary>\n        public void Resume()\n        {\n            if (Strategy.Video == null)\n                return;\n\n            MediaState state = State;\n            switch (state)\n            {\n                case MediaState.Stopped:\n                    Strategy.PlatformPlay(Strategy.Video);\n                    return;\n                case MediaState.Playing:\n                    return;\n                case MediaState.Paused:\n                    Strategy.PlatformResume();\n                    break;\n            }\n\n            return;\n        }\n\n        /// <summary>\n        /// Stops playing a video.\n        /// </summary>\n        public void Stop()\n        {\n            if (Strategy.Video != null)\n                Strategy.PlatformStop();\n        }\n\n        #endregion\n\n        #region IDisposable Implementation\n\n        /// <summary>\n        /// Immediately releases the unmanaged resources used by this object.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (!IsDisposed)\n            {\n                if (disposing)\n                {\n                    Strategy.Dispose();\n                }\n\n                IsDisposed = true;\n            }\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/VideoPlayerStrategy.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    abstract public class VideoPlayerStrategy : IDisposable\n    {\n        private MediaState _state = MediaState.Stopped;\n\n        private Video _currentVideo;\n        private float _volume = 1.0f;\n        private bool _isLooped = false;\n        private bool _isMuted = false;\n\n        public virtual MediaState State\n        {\n            get\n            {\n                PlatformUpdateState(ref _state);\n                return _state;\n            }\n            protected set { _state = value; }\n        }\n\n        public virtual Video Video\n        {\n            get { return _currentVideo; }\n            protected set { _currentVideo = value; }\n        }\n\n        public virtual float Volume\n        {\n            get { return _volume; }\n            set\n            {\n                if (value < 0.0f || value > 1.0f)\n                    throw new ArgumentOutOfRangeException();\n\n                _volume = value;\n            }\n        }\n\n        public virtual bool IsLooped\n        {\n            get { return _isLooped; }\n            set { _isLooped = value; }\n        }\n\n        public virtual bool IsMuted\n        {\n            get { return _isMuted; }\n            set { _isMuted = value; }\n        }\n\n        virtual public TimeSpan PlayPosition\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        ~VideoPlayerStrategy()\n        {\n            Dispose(false);\n        }\n\n        protected abstract void PlatformUpdateState(ref MediaState state);\n\n\n        virtual public Texture2D PlatformGetTexture()\n        {\n            throw new NotImplementedException();\n        }\n\n        virtual public void PlatformPlay(Video video)\n        {\n            throw new NotImplementedException();\n        }\n\n        virtual public void PlatformPause()\n        {\n            throw new NotImplementedException();\n        }\n\n        virtual public void PlatformResume()\n        {\n            throw new NotImplementedException();\n        }\n\n        virtual public void PlatformStop()\n        {\n            throw new NotImplementedException();\n        }\n\n        #region IDisposable Members\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _currentVideo = null;\n            }\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/VideoSoundtrackType.cs",
    "content": "﻿// MonoGame - Copyright (C) The MonoGame Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nnamespace Microsoft.Xna.Framework.Media\n{\n    /// <summary>\n    /// Type of sounds in a video\n    /// </summary>\n    public enum VideoSoundtrackType\n    {\n        /// <summary>\n        /// This video contains only music.\n        /// </summary>\n        Music,\n\n        /// <summary>\n        /// This video contains only dialog.\n        /// </summary>\n        Dialog,\n\n        /// <summary>\n        /// This video contains music and dialog.\n        /// </summary>\n        MusicAndDialog,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Media/VideoStrategy.cs",
    "content": "﻿// Copyright (C)2023 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.Media;\n\nnamespace Microsoft.Xna.Platform.Media\n{\n    public interface IPlatformVideo\n    {\n        VideoStrategy Strategy { get; }\n    }\n\n    public class VideoStrategy : IDisposable\n    {\n        public VideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration)\n        {\n            this.GraphicsDevice = graphicsDevice;\n            this.FileName = fileName;\n            this.Duration = duration;\n        }\n\n        public GraphicsDevice GraphicsDevice { get; private set; }\n\n        /// <summary>\n        /// I actually think this is a file PATH...\n        /// </summary>\n        public string FileName { get; private set; }\n\n        /// <summary>\n        /// Gets the duration of the Video.\n        /// </summary>\n        public TimeSpan Duration { get; internal set; }\n\n        /// <summary>\n        /// Gets the frame rate of this video.\n        /// </summary>\n        public float FramesPerSecond { get; internal set; }\n\n        /// <summary>\n        /// Gets the width of this video, in pixels.\n        /// </summary>\n        public int Width { get; internal set; }\n\n        /// <summary>\n        /// Gets the height of this video, in pixels.\n        /// </summary>\n        public int Height { get; internal set; }\n\n        /// <summary>\n        /// Gets the VideoSoundtrackType for this video.\n        /// </summary>\n        public VideoSoundtrackType VideoSoundtrackType { get; internal set; }\n\n        public T ToConcrete<T>() where T : VideoStrategy\n        {\n            return (T)this;\n        }\n\n        #region IDisposable Members\n        \n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n\n            }\n\n            GraphicsDevice = null;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Media/Properties/AssemblyInfo.cs",
    "content": "using System;\n\n[assembly:CLSCompliant(true)]\n"
  },
  {
    "path": "src/Xna.Framework.Media/Xna.Framework.Media.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Media\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>net40;netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Media</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Media</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Media framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Media</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\t\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Compile Include=\"Content\\SongReader.cs\" />\n    <Compile Include=\"Content\\VideoReader.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Media\\Utilities\\FileHelpers.cs\" />\n    <Compile Include=\"Media\\Album.cs\" />\n    <Compile Include=\"Media\\AlbumStrategy.cs\" />\n    <Compile Include=\"Media\\AlbumCollection.cs\" />\n    <Compile Include=\"Media\\Artist.cs\" />\n    <Compile Include=\"Media\\Genre.cs\" />\n    <Compile Include=\"Media\\MediaFactory.cs\" />\n    <Compile Include=\"Media\\MediaLibrary.cs\" />\n    <Compile Include=\"Media\\MediaLibraryStrategy.cs\" />\n    <Compile Include=\"Media\\MediaPlayer.cs\" />\n    <Compile Include=\"Media\\MediaPlayerStrategy.cs\" />\n    <Compile Include=\"Media\\MediaQueue.cs\" />\n    <Compile Include=\"Media\\MediaSource.cs\" />\n    <Compile Include=\"Media\\MediaSourceType.cs\" />\n    <Compile Include=\"Media\\MediaState.cs\" />\n    <Compile Include=\"Media\\PlaylistCollection.cs\" />\n    <Compile Include=\"Media\\Playlist.cs\" />\n    <Compile Include=\"Media\\Song.cs\" />\n    <Compile Include=\"Media\\SongCollection.cs\" />\n    <Compile Include=\"Media\\SongStrategy.cs\" />\n    <Compile Include=\"Media\\VideoSoundtrackType.cs\" />\n    <Compile Include=\"Media\\Video.cs\" />\n    <Compile Include=\"Media\\VideoStrategy.cs\" />\n    <Compile Include=\"Media\\VideoPlayer.cs\" />\n    <Compile Include=\"Media\\VideoPlayerStrategy.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Content\\Xna.Framework.Content.csproj\">\n      <Project>{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}</Project>\n      <Name>Xna.Framework.Content</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.Storage/ILLink.Descriptors.xml",
    "content": "<linker>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework.Storage/NamespaceDoc.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.Storage\n{\n    /// <summary>\n    /// Provides functionality to access Storage.\n    /// </summary>\n    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    class NamespaceDoc\n    {\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Storage/Storage/StorageContainer.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\n// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Storage;\n\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    public interface IPlatformStorageContainer\n    {\n        T GetStrategy<T>() where T : StorageContainerStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Storage\n{\n    /// <summary>\n    /// Contains a logical collection of files used for user-data storage.\n    /// </summary>\t\t\t\n    /// <remarks>MSDN documentation contains related conceptual article: http://msdn.microsoft.com/en-us/library/bb200105.aspx#ID4EDB</remarks>\n    public class StorageContainer : IPlatformStorageContainer, IDisposable\n    {\n        private StorageContainerStrategy _strategy;\n\n        T IPlatformStorageContainer.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        bool _isDisposed;\n\n        private readonly StorageDevice _device;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"Microsoft.Xna.Framework.Storage.StorageContainer\"/> class.\n        /// </summary>\n        /// <param name='device'>The attached storage-device.</param>\n        /// <param name='name'> name.</param>\n        /// <param name='playerIndex'>The player index of the player to save the data.</param>\n        internal StorageContainer(StorageDevice device, string name, PlayerIndex? playerIndex)\n        {\n            if (string.IsNullOrEmpty(name))\n                throw new ArgumentNullException(\"A title name has to be provided in parameter name.\");\n\n            this._strategy = StorageFactory.Current.CreateStorageContainerStrategy(name, playerIndex);\n\n            _device = device;\n        }\n\n        /// <summary>\n        /// Returns display name of the title.\n        /// </summary>\n        public string DisplayName\n        {\n            get { return _strategy.DisplayName; }\n        }\n        \n        /// <summary>\n        /// Gets a bool value indicating whether the instance has been disposed.\n        /// </summary>\n        public bool IsDisposed\n        {\n            get { return _isDisposed; }\n        }\n\n        /// <summary>\n        /// Returns the <see cref=\"StorageDevice\"/> that holds logical files for the container.\n        /// </summary>\n        public StorageDevice StorageDevice\n        {\n            get {return _device; }\n        }\n\n        // TODO: Implement the Disposing function.  Find sample first\n\n        /// <summary>\n        /// Fired when <see cref=\"Dispose\"/> is called or object if finalized or collected by the garbage collector.\n        /// </summary>\n        public event EventHandler<EventArgs> Disposing;\n\n        /// <summary>\n        /// Creates a new directory in the storage-container.\n        /// </summary>\n        /// <param name=\"directory\">Relative path of the directory to be created.</param>\n        public void CreateDirectory(string directory)\n        {\n            if (string.IsNullOrEmpty(directory))\n                throw new ArgumentNullException(\"Parameter directory must contain a value.\");\n\n            _strategy.CreateDirectory(directory);\n        }\n        \n        /// <summary>\n        /// Creates a file in the storage-container.\n        /// </summary>\n        /// <param name=\"file\">Relative path of the file to be created.</param>\n        /// <returns>Returns <see cref=\"Stream\"/> for the created file.</returns>\n        public Stream CreateFile(string file)\n        {\n            if (string.IsNullOrEmpty(file))\n                throw new ArgumentNullException(\"Parameter file must contain a value.\");\n\n            return _strategy.CreateFile(file);\n        }\n        \n        /// <summary>\n        /// Deletes specified directory for the storage-container.\n        /// </summary>\n        /// <param name=\"directory\">The relative path of the directory to be deleted.</param>\n        public void DeleteDirectory(string directory)\n        {\n            if (string.IsNullOrEmpty(directory))\n                throw new ArgumentNullException(\"Parameter directory must contain a value.\");\n\n            _strategy.DeleteDirectory(directory);\n        }\n        \n        /// <summary>\n        /// Deletes a file from the storage-container.\n        /// </summary>\n        /// <param name=\"file\">The relative path of the file to be deleted.</param>\n        public void DeleteFile(string file)\n        {\n            if (string.IsNullOrEmpty(file))\n                throw new ArgumentNullException(\"Parameter file must contain a value.\");\n\n            _strategy.DeleteFile(file);\n        }\n\n        /// <summary>\n        /// Returns true if specified path exists in the storage-container, false otherwise.\n        /// </summary>\n        /// <param name=\"directory\">The relative path of directory to query for.</param>\n        /// <returns>True if queried directory exists, false otherwise.</returns>\n        public bool DirectoryExists(string directory)\n        {\n            if (string.IsNullOrEmpty(directory))\n                throw new ArgumentNullException(\"Parameter directory must contain a value.\");\n\n            return _strategy.DirectoryExists(directory);\n        }\n        \n        /// <summary>\n        /// Returns true if the specified file exists in the storage-container, false otherwise.\n        /// </summary>\n        /// <param name=\"file\">The relative path of file to query for.</param>\n        /// <returns>True if queried file exists, false otherwise.</returns>\n        public bool FileExists(string file)\n        {\n            if (string.IsNullOrEmpty(file))\n                throw new ArgumentNullException(\"Parameter file must contain a value.\");\n\n            return _strategy.FileExists(file);\n\n        }\n\n        /// <summary>\n        /// Returns list of directory names in the storage-container.\n        /// </summary>\n        /// <returns>List of directory names.</returns>\n        public string[] GetDirectoryNames()\n        {\n            return _strategy.GetDirectoryNames();\n        }\n\n        /// <summary>\n        /// Returns list of directory names with given search pattern.\n        /// </summary>\n        /// <param name=\"searchPattern\">A search pattern that supports single-character (\"?\") and multicharacter (\"*\") wildcards.</param>\n        /// <returns>List of matched directory names.</returns>\n        public string[] GetDirectoryNames(string searchPattern)\n        {\n            return _strategy.GetDirectoryNames(searchPattern);\n        }\n\n        /// <summary>\n        /// Returns list of file names in the storage-container.\n        /// </summary>\n        /// <returns>List of file names.</returns>\n        public string[] GetFileNames()\n        {\n            return _strategy.GetFileNames();\n        }\n\n        /// <summary>\n        /// Returns list of file names with given search pattern.\n        /// </summary>\n        /// <param name=\"searchPattern\">A search pattern that supports single-character (\"?\") and multicharacter (\"*\") wildcards.</param>\n        /// <returns>List of matched file names.</returns>\n        public string[] GetFileNames(string searchPattern)\n        {\n            if (string.IsNullOrEmpty(searchPattern))\n                throw new ArgumentNullException(\"Parameter searchPattern must contain a value.\");\n\n            return _strategy.GetFileNames(searchPattern);\n        }\n\n        /// <summary>\n        /// Opens a file contained in storage-container.\n        /// </summary>\n        /// <param name=\"file\">Relative path of the file.</param>\n        /// <param name=\"fileMode\"><see cref=\"FileMode\"/> that specifies how the file is opened.</param>\n        /// <returns><see cref=\"Stream\"/> object for the opened file.</returns>\n        public Stream OpenFile(string file, FileMode fileMode)\n        {\n            return OpenFile(file, fileMode, FileAccess.ReadWrite, FileShare.ReadWrite);\n        }\n\n        /// <summary>\n        /// Opens a file contained in storage-container.\n        /// </summary>\n        /// <param name=\"file\">Relative path of the file.</param>\n        /// <param name=\"fileMode\"><see cref=\"FileMode\"/> that specifies how the file is opened.</param>\n        /// <param name=\"fileAccess\"><see cref=\"FileAccess\"/> that specifies access mode.</param>\n        /// <returns><see cref=\"Stream\"/> object for the opened file.</returns>\n        public Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess)\n        {\n            return OpenFile(file, fileMode, fileAccess, FileShare.ReadWrite);\n        }\n\n        /// <summary>\n        /// Opens a file contained in storage-container.\n        /// </summary>\n        /// <param name=\"file\">Relative path of the file.</param>\n        /// <param name=\"fileMode\"><see cref=\"FileMode\"/> that specifies how the file is opened.</param>\n        /// <param name=\"fileAccess\"><see cref=\"FileAccess\"/> that specifies access mode.</param>\n        /// <param name=\"fileShare\">A bitwise combination of <see cref=\"FileShare\"/> enumeration values that specifies access modes for other stream objects.</param>\n        /// <returns><see cref=\"Stream\"/> object for the opened file.</returns>\n        public Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)\n        {\n            if (string.IsNullOrEmpty(file))\n                throw new ArgumentNullException(\"Parameter file must contain a value.\");\n\n            return _strategy.OpenFile(file, fileMode, fileAccess, fileShare);\n        }\n\n\n        /// <summary>\n        /// Disposes un-managed objects referenced by this object.\n        /// </summary>\n        public void Dispose()\n        {\n            _strategy.Dispose();\n            _strategy = null;\n\n            // Fill this in when we figure out what we should be disposing\n            _isDisposed = true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Storage/Storage/StorageContainerStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.IO;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    public abstract class StorageContainerStrategy : IDisposable\n    {\n        private string _storagePath;\n        private readonly string _name;\n\n        public virtual string DisplayName\n        {\n            get { return _name; }\n        }\n\n        public virtual string StoragePath\n        {\n            get { return _storagePath; }\n            set { _storagePath = value; }\n        }\n\n        public StorageContainerStrategy(string name)\n        {\n            _name = name;\n        }\n\n        public abstract void CreateDirectory(string directory);\n        public abstract Stream CreateFile(string file);\n        public abstract void DeleteDirectory(string directory);\n        public abstract void DeleteFile(string file);\n        public abstract bool DirectoryExists(string directory);\n        public abstract bool FileExists(string file);\n        public abstract string[] GetDirectoryNames();\n        public abstract string[] GetDirectoryNames(string searchPattern);\n        public abstract string[] GetFileNames();\n        public abstract string[] GetFileNames(string searchPattern);\n        public abstract Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare);\n\n\n        #region IDisposable\n        ~StorageContainerStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n            }\n\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Storage/Storage/StorageDevice.cs",
    "content": "// MIT License - Copyright (C) The Mono.Xna Team\n// This file is subject to the terms and conditions defined in\n// file 'LICENSE.txt', which is part of this source code package.\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Platform.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    public interface IPlatformStorageDevice\n    {\n        T GetStrategy<T>() where T : StorageDeviceStrategy;\n    }\n}\n\nnamespace Microsoft.Xna.Framework.Storage\n{\n        \n    /// <summary>\n    /// Exposes a storage device for storing user data.\n    /// </summary>\n    /// <remarks>MSDN documentation contains related conceptual article: http://msdn.microsoft.com/en-us/library/bb200105.aspx</remarks>\n    public sealed class StorageDevice : IPlatformStorageDevice\n    {\n        private StorageDeviceStrategy _strategy;\n\n        T IPlatformStorageDevice.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"StorageDevice\"/> instance.\n        /// </summary>\n        /// <param name=\"player\">The playerIndex of the player.</param>\n        /// <param name=\"sizeInBytes\">Size of the storage device.</param>\n        /// <param name=\"directoryCount\"></param>\n        internal StorageDevice(PlayerIndex? player, int sizeInBytes, int directoryCount) \n        {\n            this._strategy = StorageFactory.Current.CreateStorageDeviceStrategy(player, directoryCount);\n        }\n        \n        /// <summary>\n        /// Returns the amount of free space.\n        /// </summary>\n        public long FreeSpace\n        {\n            get { return _strategy.FreeSpace; }\n        }\n\n        /// <summary>\n        /// Returns true if device is connected, false otherwise.\n        /// </summary>\n        public bool IsConnected\n        {\n            get { return _strategy.IsConnected; }\n        }\n\n        /// <summary>\n        /// Returns the total size of device.\n        /// </summary>\n        public long TotalSpace\n        {\n            get { return _strategy.TotalSpace; }\n        }\n\n        string GetDevicePath\n        {\n            get { return _strategy.GetDevicePath; }\n        }\n\n        /// <summary>\n        /// Fired when a device is removed or inserted.\n        /// </summary>\n        public static event EventHandler<EventArgs> DeviceChanged;\n\n        /// <summary>\n        /// Begins the process for opening a StorageContainer containing any files for\n        /// the specified title.\n        /// </summary>\n        /// <param name=\"displayName\">A constant human-readable string that names the file.</param>\n        /// <param name=\"callback\">An AsyncCallback that represents the method called when the operation is complete.</param>\n        /// <param name=\"state\">A user-created object used to uniquely identify the request, or null.</param>\n        public IAsyncResult BeginOpenContainer(string displayName, AsyncCallback callback, object state)\n        {\n            return _strategy.BeginOpenContainer(this, displayName, callback, state);\n        }\n    \n        /// <summary>\n        /// Ends the process for opening a StorageContainer.\n        /// </summary>\n        /// <param name=\"result\">The IAsyncResult returned from BeginOpenContainer.</param>\n        public StorageContainer EndOpenContainer(IAsyncResult result)\n        {\n            return _strategy.EndOpenContainer(result);\n        }\t\t\t\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"titleName\">The name of the storage container to delete.</param>\n        public void DeleteContainer(string titleName)\n        {\n            _strategy.DeleteContainer(titleName);\n        }\n\n        private StorageContainer Open(string displayName)\n        {\n            return _strategy.Open(this, displayName);\n        }\n\n        /// <summary>\n        /// Begins the process for displaying the storage device selector user interface,\n        /// and for specifying a callback implemented when the player chooses a device.\n        /// Reference page contains links to related code samples.\n        /// </summary>\n        /// <param name=\"callback\">An AsyncCallback that represents the method called when the player chooses a device.</param>\n        /// <param name=\"state\">A user-created object used to uniquely identify the request, or null.</param>\n        public static IAsyncResult BeginShowSelector(AsyncCallback callback, object state)\n        {\n            return BeginShowSelector(0, 0, callback, state);\n        }\n\n        /// <summary>\n        ///     Begins the process for displaying the storage device selector user interface;\n        ///     specifies the callback implemented when the player chooses a device. Reference\n        ///     page contains links to related code samples.\n        /// </summary>\n        /// <param name=\"player\">The PlayerIndex that represents the player who requested the save operation. On Windows, the only valid option is PlayerIndex.One.</param>\n        /// <param name=\"callback\">An AsyncCallback that represents the method called when the player chooses a device.</param>\n        /// <param name=\"state\">A user-created object used to uniquely identify the request, or null.</param>\n        public static IAsyncResult BeginShowSelector(PlayerIndex player, AsyncCallback callback, object state)\n        {\n            return BeginShowSelector(player, 0, 0, callback, state);\n        }\n\n        /// <summary>\n        ///     Begins the process for displaying the storage device selector user interface,\n        ///     and for specifying the size of the data to be written to the storage device\n        ///     and the callback implemented when the player chooses a device. Reference\n        ///     page contains links to related code samples.\n        /// </summary>\n        /// <param name=\"sizeInBytes\">The size, in bytes, of data to write to the storage device.</param>\n        /// <param name=\"directoryCount\">The number of directories to write to the storage device.</param>\n        /// <param name=\"callback\">An AsyncCallback that represents the method called when the player chooses a device.</param>\n        /// <param name=\"state\">A user-created object used to uniquely identify the request, or null.</param>\n        public static IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            return StorageService.Current.BeginShowSelector(sizeInBytes, directoryCount, callback, state);\n        }\n\n        /// <summary>\n        ///     Begins the process for displaying the storage device selector user interface,\n        ///     for specifying the player who requested the save operation, for setting the\n        ///     size of data to be written to the storage device, and for naming the callback\n        ///     implemented when the player chooses a device. Reference page contains links\n        ///     to related code samples.\n        /// </summary>\n        /// <param name=\"player\">The PlayerIndex that represents the player who requested the save operation. On Windows, the only valid option is PlayerIndex.One.</param>\n        /// <param name=\"sizeInBytes\">The size, in bytes, of the data to write to the storage device.</param>\n        /// <param name=\"directoryCount\">The number of directories to write to the storage device.</param>\n        /// <param name=\"callback\"> An AsyncCallback that represents the method called when the player chooses a device.</param>\n        /// <param name=\"state\">A user-created object used to uniquely identify the request, or null.</param>\n        public static IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            return StorageService.Current.BeginShowSelector(player, sizeInBytes, directoryCount, callback, state);\n        }\n\n        /// <summary>\n        ///     Ends the display of the storage selector user interface. Reference page contains\n        ///     links to related code samples.\n        /// </summary>\n        /// <param name=\"result\">The IAsyncResult returned from BeginShowSelector.</param>\n        public static StorageDevice EndShowSelector(IAsyncResult result) \n        {\n            return StorageService.Current.EndShowSelector(result);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.Storage/Storage/StorageDeviceStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    public abstract class StorageDeviceStrategy\n    {\n        private PlayerIndex? _player;\n        private int _directoryCount;\n        private StorageContainer _storageContainer;\n\n\n        public virtual StorageContainer StorageContainer\n        {\n            get { return _storageContainer; }\n            set { _storageContainer = value; }\n        }\n\n        public virtual PlayerIndex? Player\n        {\n            get { return _player; }\n            set { _player = value; }\n        }\n\n        public abstract long FreeSpace { get; }\n\n        public abstract bool IsConnected { get; }\n\n        public abstract long TotalSpace { get; }\n\n        public abstract string GetDevicePath { get; }\n\n        public StorageDeviceStrategy(PlayerIndex? player, int directoryCount)\n        {\n            this._player = player;\n            this._directoryCount = directoryCount;\n        }\n\n        public abstract IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state);\n        public abstract StorageContainer EndOpenContainer(IAsyncResult result);\n        public abstract void DeleteContainer(string titleName);\n        public abstract StorageContainer Open(StorageDevice storageDevice, string displayName);\n\n        public StorageContainer CreateStorageContainer(StorageDevice storageDevice, string displayName, PlayerIndex? player)\n        {\n            return new StorageContainer(storageDevice, displayName, player);\n        }\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.Storage/Storage/StorageFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    public abstract class StorageFactory\n    {\n        private volatile static StorageFactory _current;\n\n        internal static StorageFactory Current\n        {\n            get\n            {\n                StorageFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (typeof(StorageFactory))\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"StorageFactory not found.\");\n                    Console.WriteLine(\"Initialize storage with 'StorageFactory.RegisterStorageFactory(new ConcreteStorageFactory());'.\");\n                    StorageFactory storageFactory = CreateStorageFactory();\n                    StorageFactory.RegisterStorageFactory(storageFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static StorageFactory CreateStorageFactory()\n        {\n            Console.WriteLine(\"Registering ConcreteStorageFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.Storage.ConcreteStorageFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(StorageFactory)) && !type.IsAbstract)\n                    return (StorageFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterStorageFactory(StorageFactory storageFactory)\n        {\n            if (storageFactory == null)\n                throw new NullReferenceException(\"storageFactory\");\n\n            lock (typeof(StorageFactory))\n            {\n                if (_current == null)\n                    _current = storageFactory;\n                else\n                    throw new InvalidOperationException(\"storageFactory allready registered.\");\n            }\n        }\n\n        public abstract StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex);\n        public abstract StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount);\n        public abstract StorageServiceStrategy CreateStorageServiceStrategy();\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Storage/Storage/StorageService.cs",
    "content": "// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{   \n    public sealed class StorageService : IDisposable\n        , IPlatformStorageService\n    {\n        private volatile static StorageService _current;\n        private StorageServiceStrategy _strategy;\n\n        public readonly static object SyncHandle = new object();\n\n        StorageServiceStrategy IPlatformStorageService.Strategy { get { return _strategy; } }\n\n        public static StorageService Current\n        {\n            get\n            {\n                StorageService current = _current;\n                if (current != null)\n                    return current;\n\n                // Create instance\n                lock(SyncHandle)\n                {\n                    if (_current == null)\n                    {   \n                        try\n                        {\n                            _current = new StorageService();\n                        }\n                        catch (Exception ex)\n                        {\n                            throw new Exception(\"StorageService has failed to initialize.\", ex);\n                        }\n                    }\n                    return _current;\n                }\n            }\n        }\n\n        private StorageService()\n        {\n            _strategy = StorageFactory.Current.CreateStorageServiceStrategy();\n        }\n\n        public IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            return _strategy.BeginShowSelector(player, sizeInBytes, directoryCount, callback, state);\n        }\n\n        public IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state)\n        {\n            return _strategy.BeginShowSelector(sizeInBytes, directoryCount, callback, state);\n        }\n\n        public StorageDevice EndShowSelector(IAsyncResult result)\n        {\n            return _strategy.EndShowSelector(result);\n        }\n\n        #region IDisposable\n\n        private bool isDisposed = false;\n        public event EventHandler Disposing;\n\n        ~StorageService()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n\n        private void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (isDisposed)\n                    return;\n\n                var handler = Disposing;\n                if (handler != null)\n                    handler(this, EventArgs.Empty);\n\n                _strategy.Dispose();\n                _strategy = null;\n\n                isDisposed = true;\n            }\n            else\n            {\n                if (isDisposed)\n                    return;\n                                \n                _strategy = null;\n\n                isDisposed = true;\n            }\n        }\n\n\n        #endregion // IDisposable\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.Storage/Storage/StorageServiceStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Storage;\n\nnamespace Microsoft.Xna.Platform.Storage\n{\n    public interface IPlatformStorageService\n    {\n        StorageServiceStrategy Strategy { get; }\n    }\n\n    public abstract class StorageServiceStrategy : IDisposable\n    {\n        public abstract IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state);\n        public abstract IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state);\n        public abstract StorageDevice EndShowSelector(IAsyncResult result);\n\n        public T ToConcrete<T>() where T : StorageServiceStrategy\n        {\n            return (T)this;\n        }\n\n        public StorageDevice CreateStorageDevice(PlayerIndex? player, int sizeInBytes, int directoryCount)\n        {\n            return new StorageDevice(player, sizeInBytes, directoryCount);\n        }\n\n        #region IDisposable\n        ~StorageServiceStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n        #endregion\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.Storage/Xna.Framework.Storage.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.Storage\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}</ProjectGuid>\n    <AssemblyName>Xna.Framework.Storage</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.Storage</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The Storage framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.Storage</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"NamespaceDoc.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Storage\\StorageContainer.cs\" />\n    <Compile Include=\"Storage\\StorageContainerStrategy.cs\" />\n    <Compile Include=\"Storage\\StorageDevice.cs\" />\n    <Compile Include=\"Storage\\StorageDeviceStrategy.cs\" />\n    <Compile Include=\"Storage\\StorageFactory.cs\" />\n    <Compile Include=\"Storage\\StorageService.cs\" />\n    <Compile Include=\"Storage\\StorageServiceStrategy.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Xna.Framework.XR/ILLink.Descriptors.xml",
    "content": "<linker>\n</linker>\n\n"
  },
  {
    "path": "src/Xna.Framework.XR/NamespaceDoc.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    /// <summary>\n    /// Provides functionality to handle Extended Reality devices.\n    /// </summary>\n    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    class NamespaceDoc\n    {\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.XR/XR/HandsState.cs",
    "content": "﻿// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    public struct HandsState\n    {\n        public Pose3 LHandPose;\n        public Pose3 RHandPose;\n\n        public Pose3 LGripPose;\n        public Pose3 RGripPose;\n\n        public Vector3 LHandLinearVelocity;\n        public Vector3 RHandLinearVelocity;\n\n        public Vector3 GetLinearVelocity(int handIndex)\n        {\n            switch (handIndex)\n            {\n                case 0:\n                    return LHandLinearVelocity;\n                case 1:\n                    return RHandLinearVelocity;\n                default:\n                    throw new IndexOutOfRangeException();\n            }\n        }\n\n        public Matrix GetHandTransform(int handIndex)\n        {\n            switch (handIndex)\n            {\n                case 0:\n                    return Matrix.CreateFromPose(LHandPose);\n                case 1:\n                    return Matrix.CreateFromPose(RHandPose);\n                default:\n                    throw new IndexOutOfRangeException();\n            }\n        }\n\n        public Matrix GetGripTransform(int handIndex)\n        {\n            switch (handIndex)\n            {\n                case 0:\n                    return Matrix.CreateFromPose(LGripPose);\n                case 1:\n                    return Matrix.CreateFromPose(RGripPose);\n                default:\n                    throw new IndexOutOfRangeException();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.XR/XR/HeadsetState.cs",
    "content": "﻿// Copyright (C)2022 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    public struct HeadsetState\n    {\n        public Pose3 HeadPose;\n        public Pose3 LEyePose;\n        public Pose3 REyePose;\n\n        public Matrix GetEyeTransform(XREye eyeIndex)\n        {\n            switch (eyeIndex)\n            {\n                case XREye.None:\n                    return Matrix.CreateFromPose(HeadPose);\n                case XREye.Left:\n                    return Matrix.CreateFromPose(LEyePose);\n                case XREye.Right:\n                    return Matrix.CreateFromPose(REyePose);\n                default:\n                    throw new IndexOutOfRangeException();\n            }\n        }\n\n        public Matrix GetEyeView(XREye eyeIndex)\n        {\n            switch (eyeIndex)\n            {\n                case XREye.None:\n                    Pose3 invhpose = Pose3.Inverse(HeadPose);\n                    return Matrix.CreateFromPose(invhpose);\n                case XREye.Left:\n                    Pose3 invlpose = Pose3.Inverse(LEyePose);\n                    return Matrix.CreateFromPose(invlpose);\n                case XREye.Right:\n                    Pose3 invrpose = Pose3.Inverse(REyePose);\n                    return Matrix.CreateFromPose(invrpose);\n                default:\n                    throw new IndexOutOfRangeException();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.XR/XR/XRDevice.cs",
    "content": "﻿// Copyright (C)2022-2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Platform.XR;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    public class XRDevice : IPlatformXRDevice, IDisposable\n    {\n        private XRDeviceStrategy _strategy;\n\n        T IPlatformXRDevice.GetStrategy<T>()\n        {\n            return (T)_strategy;\n        }\n\n\n        public bool IsVRSupported\n        {\n            get { return _strategy.IsVRSupported; }\n        }\n\n        public bool IsARSupported\n        {\n            get { return _strategy.IsARSupported; }\n        }\n\n        public XRDeviceState DeviceState\n        {\n            get { return _strategy.DeviceState; }\n        }\n\n        public XRSessionMode SessionMode\n        {\n            get { return _strategy.SessionMode; }\n        }\n\n        public bool IsTrackFloorLevelEnabled\n        {\n            get { return _strategy.IsTrackFloorLevelEnabled; }\n        }\n\n        public XRDevice(string applicationName, IServiceProvider services)\n        {\n            _strategy = XRFactory.Current.CreateXRDeviceStrategy(applicationName, services);\n        }\n\n        public XRDevice(string applicationName, Game game)\n        {\n            _strategy = XRFactory.Current.CreateXRDeviceStrategy(applicationName, game);\n        }\n\n\n        public int BeginSessionAsync()\n        {\n            return _strategy.BeginSessionAsync(XRSessionMode.VR);\n        }\n\n        public int BeginSessionAsync(XRSessionMode sessionMode)\n        {\n            return _strategy.BeginSessionAsync(sessionMode);\n        }\n\n        public int BeginFrame()\n        {\n            return _strategy.BeginFrame();\n        }\n\n        public HeadsetState GetHeadsetState()\n        {\n            return _strategy.GetHeadsetState();\n        }\n\n        public IEnumerable<XREye> GetEyes()\n        {\n            return _strategy.GetEyes();\n        }\n\n        public RenderTarget2D GetEyeRenderTarget(XREye eye)\n        {\n            return _strategy.GetEyeRenderTarget(eye);\n        }\n\n        public Matrix CreateProjection(XREye eye, float znear, float zfar)\n        {\n            return _strategy.CreateProjection(eye, znear, zfar);\n        }\n\n        public void CommitRenderTarget(XREye eye, RenderTarget2D rt)\n        {\n            _strategy.CommitRenderTarget(eye, rt);\n        }\n\n        public int EndFrame()\n        {\n            return _strategy.EndFrame();\n        }\n\n        public HandsState GetHandsState()\n        {\n            return _strategy.GetHandsState();\n        }\n\n        public void EndSessionAsync()\n        {\n            _strategy.EndSessionAsync();\n        }\n\n        public void TrackFloorLevelAsync(bool enable)\n        {\n            _strategy.TrackFloorLevelAsync(enable);\n        }\n\n\n        #region IDisposable\n        ~XRDevice()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _strategy.Dispose();\n                _strategy = null;\n            }\n\n        }\n        #endregion\n    }\n}\n\n"
  },
  {
    "path": "src/Xna.Framework.XR/XR/XRDeviceState.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    public enum XRDeviceState\n    {\n        InitializingDevice,\n        Disabled,\n        InitializingSession,\n        Enabled,\n        NoPermissions,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.XR/XR/XRDeviceStrategy.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.Graphics;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public interface IPlatformXRDevice\n    {\n        T GetStrategy<T>() where T : XRDeviceStrategy;\n    }\n\n    public abstract class XRDeviceStrategy : IDisposable\n    {\n        public abstract bool IsVRSupported { get; }\n        public abstract bool IsARSupported { get; }\n        public abstract XRSessionMode SessionMode { get; }\n        public abstract XRDeviceState DeviceState { get; }\n        public abstract bool IsTrackFloorLevelEnabled { get; }\n\n        public abstract int BeginSessionAsync(XRSessionMode sessionMode);\n        public abstract int BeginFrame();\n        public abstract HeadsetState GetHeadsetState();\n        public abstract IEnumerable<XREye> GetEyes();\n        public abstract RenderTarget2D GetEyeRenderTarget(XREye eye);\n        public abstract Matrix CreateProjection(XREye eye, float znear, float zfar);\n        public abstract void CommitRenderTarget(XREye eye, RenderTarget2D rt);\n        public abstract int EndFrame();\n        public abstract HandsState GetHandsState();\n        public abstract void EndSessionAsync();\n        public abstract void TrackFloorLevelAsync(bool enable);\n\n\n        #region IDisposable\n        ~XRDeviceStrategy()\n        {\n            Dispose(false);\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected abstract void Dispose(bool disposing);\n        #endregion\n    }\n}"
  },
  {
    "path": "src/Xna.Framework.XR/XR/XREye.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    public enum XREye\n    {\n        /// <remarks>\n        /// The default when not in XR mode, but also returned by WebXR when in 'immersive-ar' on mobile.\n        /// </remarks>\n        None  = 0,\n        Left  = 1,\n        Right = 2,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.XR/XR/XRFactory.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.Xna.Framework;\nusing Microsoft.Xna.Framework.XR;\n\nnamespace Microsoft.Xna.Platform.XR\n{\n    public abstract class XRFactory\n    {\n        private volatile static XRFactory _current;\n\n        internal static XRFactory Current\n        {\n            get\n            {\n                XRFactory current = _current;\n                if (current != null)\n                    return current;\n\n                lock (typeof(XRFactory))\n                {\n                    if (_current != null)\n                        return _current;\n\n                    Console.WriteLine(\"XRFactory not found.\");\n                    Console.WriteLine(\"Initialize XR with 'XRFactory.RegisterXRFactory(new ConcreteXRFactory());'.\");\n                    XRFactory xrFactory = CreateXRFactory();\n                    XRFactory.RegisterXRFactory(xrFactory);\n                }\n\n                return _current;\n            }\n        }\n\n        private static XRFactory CreateXRFactory()\n        {\n            Console.WriteLine(\"Registering ConcreteXRFactoryStrategy through reflection.\");\n\n            Type type = Type.GetType(\"Microsoft.Xna.Platform.XR.ConcreteXRFactory, Kni.Platform\", false);\n            if (type != null)\n                if (type.IsSubclassOf(typeof(XRFactory)) && !type.IsAbstract)\n                    return (XRFactory)Activator.CreateInstance(type);\n\n            return null;\n        }\n\n        public static void RegisterXRFactory(XRFactory xrFactory)\n        {\n            if (xrFactory == null)\n                throw new NullReferenceException(\"xrFactory\");\n\n            lock (typeof(XRFactory))\n            {\n                if (_current == null)\n                    _current = xrFactory;\n                else\n                    throw new InvalidOperationException(\"xrFactory allready registered.\");\n            }\n        }\n\n        public abstract XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services);\n        public abstract XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game);\n    }\n\n}\n"
  },
  {
    "path": "src/Xna.Framework.XR/XR/XRSessionMode.cs",
    "content": "﻿// Copyright (C)2024 Nick Kastellanos\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Microsoft.Xna.Framework.XR\n{\n    public enum XRSessionMode\n    {\n        VR = 1,\n        AR = 2,\n    }\n}\n"
  },
  {
    "path": "src/Xna.Framework.XR/Xna.Framework.XR.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\kniPackage.props\" />\n  <PropertyGroup>\n    <BaseOutputPath>..\\..\\Artifacts\\Xna.Framework.XR\\</BaseOutputPath>\n    \n    <Version>4.2.9001.0</Version>\n    <AssemblyVersion>4.2.9001.0</AssemblyVersion>\n\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EnableDefaultItems>false</EnableDefaultItems>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">true</IsTrimmable>\n    <ProjectGuid>{6D0D985D-B256-4208-9E78-77897D461698}</ProjectGuid>\n    <AssemblyName>Xna.Framework.XR</AssemblyName>\n    <RootNamespace>Microsoft.Xna.Framework.XR</RootNamespace>\n    <DefineConstants></DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <NoWarn>CS0067;CS1591;CS1574;CS0419;CS8500</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <Description>The XR framework.</Description>\n    <PackageTags>.net core;core;.net standard;standard</PackageTags>\n    <PackageId>nkast.Xna.Framework.XR</PackageId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"ILLink.Descriptors.xml\">\n      <LogicalName>ILLink.Descriptors.xml</LogicalName>\n    </EmbeddedResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"NamespaceDoc.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"XR\\HandsState.cs\" />\n    <Compile Include=\"XR\\HeadsetState.cs\" />\n    <Compile Include=\"XR\\XRDevice.cs\" />\n    <Compile Include=\"XR\\XRDeviceState.cs\" />\n    <Compile Include=\"XR\\XRDeviceStrategy.cs\" />\n    <Compile Include=\"XR\\XREye.cs\" />\n    <Compile Include=\"XR\\XRFactory.cs\" />\n    <Compile Include=\"XR\\XRSessionMode.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Xna.Framework\\Xna.Framework.csproj\">\n      <Project>{741B4B1E-89E4-434C-8867-6129838AFD51}</Project>\n      <Name>Xna.Framework</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Game\\Xna.Framework.Game.csproj\">\n      <Project>{90BBD6EF-F386-4F47-88CD-BF386C7D1705}</Project>\n      <Name>Xna.Framework.Game</Name>\n      <Private>False</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Xna.Framework.Graphics\\Xna.Framework.Graphics.csproj\">\n      <Project>{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}</Project>\n      <Name>Xna.Framework.Graphics</Name>\n      <Private>False</Private>\n    </ProjectReference>\n  </ItemGroup>\n  \n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETFramework.ReferenceAssemblies\" Version=\"1.0.3\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>"
  }
]